From a1740e8a9c024c664668557da720de41dee01b64 Mon Sep 17 00:00:00 2001 From: Daniel Buckmaster Date: Sun, 18 Nov 2012 21:32:51 +1100 Subject: [PATCH 001/324] Made Trigger friendlier towards inheritance. Specifically: * Made update bits constants protected so that derived classes can use them - especially NextFreeMask! IIRC, most classes make these constants public, though there's no real reason to. * Made potentialEnterObject virtual so that derived classes can substitute their own logic. --- Engine/source/T3D/trigger.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Engine/source/T3D/trigger.h b/Engine/source/T3D/trigger.h index f0f8bc339b..ee3cbdf026 100644 --- a/Engine/source/T3D/trigger.h +++ b/Engine/source/T3D/trigger.h @@ -87,6 +87,10 @@ class Trigger : public GameBase String mLeaveCommand; String mTickCommand; + static const U32 CMD_SIZE = 1024; + + protected: + enum TriggerUpdateBits { TransformMask = Parent::NextFreeMask << 0, @@ -97,10 +101,6 @@ class Trigger : public GameBase NextFreeMask = Parent::NextFreeMask << 5, }; - static const U32 CMD_SIZE = 1024; - - protected: - static bool smRenderTriggers; bool testObject(GameBase* enter); void processTick(const Move *move); @@ -142,7 +142,7 @@ class Trigger : public GameBase // Trigger void setTriggerPolyhedron(const Polyhedron&); - void potentialEnterObject(GameBase*); + virtual void potentialEnterObject(GameBase*); U32 getNumTriggeringObjects() const; GameBase* getObject(const U32); const Vector& getObjects() const { return mObjects; } From 5d5e878129be994d435ee4bcf3c513b8a76f8420 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 23 Oct 2014 20:48:58 -0500 Subject: [PATCH 002/324] dynamic cubemap support for tsStatics engine: implements the capacity for tsstatic objects to allow themselves to use the reflector system in order to display runtime generated cubemaps. script: defines a calibrated reflectordesc that reflects all object types within the space of approximately half stock veiwdistance usage: cubeReflectorDesc = DefaultCubeDesc placed in a given object-insatnces entry that uses a material with a dynamiccubemap = true; flag. immediate purpose: consistency of application of materials. long term impact: tags steps required in order to associate a given runtime generated cubemap with an object-instance. in the future, this is likely to give way to an area-derived cubemap based on the accumulation volume tech developed by Andrew Mac, or a screenspace reflection. --- Engine/source/T3D/tsStatic.cpp | 60 +++++++++++++++++++ Engine/source/T3D/tsStatic.h | 9 +++ .../Full/game/art/datablocks/environment.cs | 12 ++++ 3 files changed, 81 insertions(+) diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index 1474bf96df..c7ef76d4f2 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -90,6 +90,9 @@ ConsoleDocClass( TSStatic, ); TSStatic::TSStatic() +: + cubeDescId( 0 ), + reflectorDesc( NULL ) { mNetFlags.set(Ghostable | ScopeAlways); @@ -180,6 +183,11 @@ void TSStatic::initPersistFields() endGroup("Rendering"); + addGroup( "Reflection" ); + addField( "cubeReflectorDesc", TypeRealString, Offset( cubeDescName, TSStatic ), + "References a ReflectorDesc datablock that defines performance and quality properties for dynamic reflections.\n"); + endGroup( "Reflection" ); + addGroup("Collision"); addField( "collisionType", TypeTSMeshType, Offset( mCollisionType, TSStatic ), @@ -279,6 +287,14 @@ bool TSStatic::onAdd() addToScene(); + if ( isClientObject() ) + { + mCubeReflector.unregisterReflector(); + + if ( reflectorDesc ) + mCubeReflector.registerReflector( this, reflectorDesc ); + } + _updateShouldTick(); return true; @@ -337,6 +353,16 @@ bool TSStatic::_createShape() if ( mAmbientThread ) mShapeInstance->setSequence( mAmbientThread, ambientSeq, 0); + // Resolve CubeReflectorDesc. + if ( cubeDescName.isNotEmpty() ) + { + Sim::findObject( cubeDescName, reflectorDesc ); + } + else if( cubeDescId > 0 ) + { + Sim::findObject( cubeDescId, reflectorDesc ); + } + return true; } @@ -402,6 +428,8 @@ void TSStatic::onRemove() mShapeInstance = NULL; mAmbientThread = NULL; + if ( isClientObject() ) + mCubeReflector.unregisterReflector(); Parent::onRemove(); } @@ -504,6 +532,12 @@ void TSStatic::prepRenderImage( SceneRenderState* state ) F32 invScale = (1.0f/getMax(getMax(mObjScale.x,mObjScale.y),mObjScale.z)); + // If we're currently rendering our own reflection we + // don't want to render ourselves into it. + if ( mCubeReflector.isRendering() ) + return; + + if ( mForceDetail == -1 ) mShapeInstance->setDetailFromDistance( state, dist * invScale ); else @@ -520,6 +554,9 @@ void TSStatic::prepRenderImage( SceneRenderState* state ) rdata.setFadeOverride( 1.0f ); rdata.setOriginSort( mUseOriginSort ); + if ( mCubeReflector.isEnabled() ) + rdata.setCubemap( mCubeReflector.getCubemap() ); + // If we have submesh culling enabled then prepare // the object space frustum to pass to the shape. Frustum culler; @@ -544,6 +581,20 @@ void TSStatic::prepRenderImage( SceneRenderState* state ) mat.scale( mObjScale ); GFX->setWorldMatrix( mat ); + if ( state->isDiffusePass() && mCubeReflector.isEnabled() && mCubeReflector.getOcclusionQuery() ) + { + RenderPassManager *pass = state->getRenderPass(); + OccluderRenderInst *ri = pass->allocInst(); + + ri->type = RenderPassManager::RIT_Occluder; + ri->query = mCubeReflector.getOcclusionQuery(); + mObjToWorld.mulP( mObjBox.getCenter(), &ri->position ); + ri->scale.set( mObjBox.getExtents() ); + ri->orientation = pass->allocUniqueXform( mObjToWorld ); + ri->isSphere = false; + state->getRenderPass()->addInst( ri ); + } + mShapeInstance->animate(); mShapeInstance->render( rdata ); @@ -628,6 +679,10 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream) if ( mLightPlugin ) retMask |= mLightPlugin->packUpdate(this, AdvancedStaticOptionsMask, con, mask, stream); + if( stream->writeFlag( reflectorDesc != NULL ) ) + { + stream->writeRangedU32( reflectorDesc->getId(), DataBlockObjectIdFirst, DataBlockObjectIdLast ); + } return retMask; } @@ -687,6 +742,11 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) mLightPlugin->unpackUpdate(this, con, stream); } + if( stream->readFlag() ) + { + cubeDescId = stream->readRangedU32( DataBlockObjectIdFirst, DataBlockObjectIdLast ); + } + if ( isProperlyAdded() ) _updateShouldTick(); } diff --git a/Engine/source/T3D/tsStatic.h b/Engine/source/T3D/tsStatic.h index fe71132946..ac6c50cc1d 100644 --- a/Engine/source/T3D/tsStatic.h +++ b/Engine/source/T3D/tsStatic.h @@ -39,6 +39,10 @@ #include "ts/tsShape.h" #endif +#ifndef _REFLECTOR_H_ + #include "scene/reflector.h" +#endif + class TSShapeInstance; class TSThread; class TSStatic; @@ -135,6 +139,11 @@ class TSStatic : public SceneObject /// Start or stop processing ticks depending on our state. void _updateShouldTick(); + String cubeDescName; + U32 cubeDescId; + ReflectorDesc *reflectorDesc; + CubeReflector mCubeReflector; + protected: Convex *mConvexList; diff --git a/Templates/Full/game/art/datablocks/environment.cs b/Templates/Full/game/art/datablocks/environment.cs index 386703f679..c9d2b0a51d 100644 --- a/Templates/Full/game/art/datablocks/environment.cs +++ b/Templates/Full/game/art/datablocks/environment.cs @@ -84,3 +84,15 @@ datablock LightningData(DefaultStorm) thunderSounds[2] = ThunderCrash3Sound; thunderSounds[3] = ThunderCrash4Sound; }; + +datablock ReflectorDesc( DefaultCubeDesc ) +{ + texSize = 256; + nearDist = 0.1; + farDist = 1000.0; + objectTypeMask = 0xFFFFFFFF; + detailAdjust = 1.0; + priority = 1.0; + maxRateMs = 15; + useOcclusionQuery = true; +}; From b8c750dd56056edf4df47d1540cb103c775af037 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sun, 11 Jan 2015 17:45:29 -0600 Subject: [PATCH 003/324] extraneous mipmap generation prune OR spits out quite a few pointless mips for non square textures, which can lead to it triggering that AssertFatal(mNumMipLevels <= c_maxMipLevels, "GBitmap::allocateBitmap: too many miplevels"); entry --- Engine/source/gfx/bitmap/gBitmap.cpp | 2 +- Engine/source/gfx/gfxTextureManager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/gfx/bitmap/gBitmap.cpp b/Engine/source/gfx/bitmap/gBitmap.cpp index 151a792edf..78454d5e3e 100644 --- a/Engine/source/gfx/bitmap/gBitmap.cpp +++ b/Engine/source/gfx/bitmap/gBitmap.cpp @@ -326,7 +326,7 @@ void GBitmap::allocateBitmap(const U32 in_width, const U32 in_height, const bool mNumMipLevels++; allocPixels += currWidth * currHeight * mBytesPerPixel; - } while (currWidth != 1 || currHeight != 1); + } while (currWidth != 1 && currHeight != 1); } AssertFatal(mNumMipLevels <= c_maxMipLevels, "GBitmap::allocateBitmap: too many miplevels"); diff --git a/Engine/source/gfx/gfxTextureManager.cpp b/Engine/source/gfx/gfxTextureManager.cpp index c997d1d2b2..da132d7d28 100644 --- a/Engine/source/gfx/gfxTextureManager.cpp +++ b/Engine/source/gfx/gfxTextureManager.cpp @@ -1098,7 +1098,7 @@ void GFXTextureManager::_validateTexParams( const U32 width, const U32 height, currHeight = 1; inOutNumMips++; - } while ( currWidth != 1 || currHeight != 1 ); + } while ( currWidth != 1 && currHeight != 1 ); } } } From 39d5563a8c543e11fb1232d9b70fffcc0c993bd5 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 11:40:45 -0800 Subject: [PATCH 004/324] Added type checking functions added some type checking functions to TorqueScript. --- Engine/source/console/consoleFunctions.cpp | 200 +++++++++++++++++++++ Engine/source/console/consoleFunctions.h | 16 ++ 2 files changed, 216 insertions(+) create mode 100644 Engine/source/console/consoleFunctions.h diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index a5ea49f335..8d54ae0764 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -25,6 +25,11 @@ #include "console/consoleInternal.h" #include "console/engineAPI.h" #include "console/ast.h" + +#ifndef _CONSOLFUNCTIONS_H_ +#include "console/consoleFunctions.h" +#endif + #include "core/strings/findMatch.h" #include "core/strings/stringUnit.h" #include "core/strings/unicode.h" @@ -45,6 +50,132 @@ bool LinkConsoleFunctions = false; // Buffer for expanding script filenames. static char scriptFilenameBuffer[1024]; +bool isInt(const char* str) +{ + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ingore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + for(int i = start; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(i != 0) + return false; + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; +} + +bool isFloat(const char* str, bool sciOk = false) +{ + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ingore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + bool seenDot = false; + int eLoc = -1; + for(int i = 0; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(sciOk) + { + //Haven't found e or scientific notation symbol + if(eLoc == -1) + { + //only allowed in beginning + if(i != 0) + return false; + } + else + { + //if not right after the e + if(i != (eLoc + 1)) + return false; + } + } + else + { + //only allowed in beginning + if(i != 0) + return false; + } + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case 'e': case 'E': + if(!sciOk) + return false; + else + { + //already saw it so can't have 2 + if(eLoc != -1) + return false; + + eLoc = i; + } + break; + case '.': + if(seenDot | (sciOk && eLoc != -1)) + return false; + seenDot = true; + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; +} + +bool isValidIP(const char* ip) +{ + unsigned b1, b2, b3, b4; + unsigned char c; + int rc = dSscanf(ip, "%3u.%3u.%3u.%3u%c", &b1, &b2, &b3, &b4, &c); + if (rc != 4 && rc != 5) return false; + if ((b1 | b2 | b3 | b4) > 255) return false; + if (dStrspn(ip, "0123456789.") < dStrlen(ip)) return false; + return true; +} + +bool isValidPort(U16 port) +{ + return (port >= 0 && port <=65535); +} //============================================================================= // String Functions. @@ -815,6 +946,75 @@ DefineConsoleFunction( strrchrpos, S32, ( const char* str, const char* chr, S32 return index; } +//---------------------------------------------------------------- + +// Warning: isInt and isFloat are very 'strict' and might need to be adjusted to allow other values. //seanmc +DefineConsoleFunction( isInt, bool, ( const char* str),, + "Returns true if the string is an integer.\n" + "@param str The string to test.\n" + "@return true if @a str is an integer and false if not\n\n" + "@tsexample\n" + "isInt( \"13\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + return isInt(str); +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isFloat, bool, ( const char* str, bool sciOk), (false), + "Returns true if the string is a float.\n" + "@param str The string to test.\n" + "@param sciOk Test for correct scientific notation and accept it (ex. 1.2e+14)" + "@return true if @a str is a float and false if not\n\n" + "@tsexample\n" + "isFloat( \"13.5\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + return isFloat(str, sciOk); +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isValidPort, bool, ( const char* str),, + "Returns true if the string is a valid port number.\n" + "@param str The string to test.\n" + "@return true if @a str is a port and false if not\n\n" + "@tsexample\n" + "isValidPort( \"8080\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + if(isInt(str)) + { + U16 port = dAtous(str); + return isValidPort(port); + } + else + return false; +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isValidIP, bool, ( const char* str),, + "Returns true if the string is a valid ip address, excepts localhost.\n" + "@param str The string to test.\n" + "@return true if @a str is a valid ip address and false if not\n\n" + "@tsexample\n" + "isValidIP( \"localhost\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + if(dStrcmp(str, "localhost") == 0) + { + return true; + } + else + return isValidIP(str); +} + //============================================================================= // Field Manipulators. //============================================================================= diff --git a/Engine/source/console/consoleFunctions.h b/Engine/source/console/consoleFunctions.h new file mode 100644 index 0000000000..1cb19d1df4 --- /dev/null +++ b/Engine/source/console/consoleFunctions.h @@ -0,0 +1,16 @@ +#ifndef _CONSOLFUNCTIONS_H_ +#define _CONSOLFUNCTIONS_H_ + +#ifndef _STRINGFUNCTIONS_H_ +#include "core/strings/stringFunctions.h" +#endif + +bool isInt(const char* str); + +bool isFloat(const char* str); + +bool isValidIP(const char* ip); + +bool isValidPort(U16 port); + +#endif \ No newline at end of file From 14037a742a41eba97b65f01cb9094c1e60291f19 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 11:48:15 -0800 Subject: [PATCH 005/324] Added string manipulation functions added some string manipulation functions, some are slightly different versions of existing functions. --- Engine/source/console/consoleFunctions.cpp | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 8d54ae0764..47a57ecdb1 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -370,6 +370,40 @@ DefineConsoleFunction( strlen, S32, ( const char* str ),, return dStrlen( str ); } +//----------------------------------------------------------------------------- +DefineConsoleFunction( strlenskip, S32, ( const char* str, const char* first, const char* last ),, + "Calculate the length of a string in characters, skipping everything between and including first and last.\n" + "@param str A string.\n" + "@param first First character to look for to skip block of text.\n" + "@param last Second character to look for to skip block of text.\n" + "@return The length of the given string skipping blocks of text between characters.\n" + "@ingroup Strings" ) +{ + const UTF8* pos = str; + U32 size = 0; + U32 length = dStrlen(str); + bool count = true; + + //loop through each character counting each character, skipping tags (anything with < followed by >) + for(U32 i = 0; i < length; i++, pos++) + { + if(count) + { + if(*pos == first[0]) + count = false; + else + size++; + } + else + { + if(*pos == last[0]) + count = true; + } + } + + return S32(size); +} + //----------------------------------------------------------------------------- DefineConsoleFunction( strstr, S32, ( const char* string, const char* substring ),, @@ -416,6 +450,33 @@ DefineConsoleFunction( strpos, S32, ( const char* haystack, const char* needle, //----------------------------------------------------------------------------- +DefineConsoleFunction( strposr, S32, ( const char* haystack, const char* needle, S32 offset ), ( 0 ), + "Find the start of @a needle in @a haystack searching from right to left beginning at the given offset.\n" + "@param haystack The string to search.\n" + "@param needle The string to search for.\n" + "@return The index at which the first occurrence of @a needle was found in @a heystack or -1 if no match was found.\n\n" + "@tsexample\n" + "strposr( \"b ab\", \"b\", 1 ) // Returns 2.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + U32 sublen = dStrlen( needle ); + U32 strlen = dStrlen( haystack ); + S32 start = strlen - offset; + + if(start < 0 || start > strlen) + return -1; + + if (start + sublen > strlen) + start = strlen - sublen; + for(; start >= 0; start--) + if(!dStrncmp(haystack + start, needle, sublen)) + return start; + return -1; +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( ltrim, const char*, ( const char* str ),, "Remove leading whitespace from the string.\n" "@param str A string.\n" @@ -762,6 +823,18 @@ DefineConsoleFunction( stripTrailingNumber, String, ( const char* str ),, return String::GetTrailingNumber( str, suffix ); } +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getFirstNumber, String, ( const char* str ),, + "Get the first occuring number from @a str.\n" + "@param str The string from which to read out the first number.\n" + "@return String representation of the number or "" if no number.\n\n") +{ + U32 start; + U32 end; + return String::GetFirstNumber(str, start, end); +} + //---------------------------------------------------------------- DefineConsoleFunction( isspace, bool, ( const char* str, S32 index ),, @@ -948,6 +1021,30 @@ DefineConsoleFunction( strrchrpos, S32, ( const char* str, const char* chr, S32 //---------------------------------------------------------------- +DefineConsoleFunction( strToggleCaseToWords, const char*, ( const char* str ),, + "Parse a Toggle Case word into separate words.\n" + "@param str The string to parse.\n" + "@return new string space separated.\n\n" + "@tsexample\n" + "strToggleCaseToWords( \"HelloWorld\" ) // Returns \"Hello World\".\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + String newStr; + for(S32 i = 0; str[i]; i++) + { + //If capitol add a space + if(i != 0 && str[i] >= 65 && str[i] <= 90) + newStr += " "; + + newStr += str[i]; + } + + return Con::getReturnBuffer(newStr); +} + +//---------------------------------------------------------------- + // Warning: isInt and isFloat are very 'strict' and might need to be adjusted to allow other values. //seanmc DefineConsoleFunction( isInt, bool, ( const char* str),, "Returns true if the string is an integer.\n" From 2d7472d16067f1a03c3d76bfa05e6b7871042549 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 11:51:05 -0800 Subject: [PATCH 006/324] add case sensitive strings Added case sensitive strings function to add them to the string table. --- Engine/source/console/consoleFunctions.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 47a57ecdb1..f08ad2ac43 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -1112,6 +1112,17 @@ DefineConsoleFunction( isValidIP, bool, ( const char* str),, return isValidIP(str); } +//---------------------------------------------------------------- + +// Torque won't normally add another string if it already exists with another casing, +// so this forces the addition. It should be called once near the start, such as in main.cs. +ConsoleFunction(addCaseSensitiveStrings,void,2,0,"[string1, string2, ...]" + "Adds case sensitive strings to the StringTable.") +{ + for(int i = 1; i < argc; i++) + StringTable->insert(argv[i], true); +} + //============================================================================= // Field Manipulators. //============================================================================= From 6a5fd4eceb5e14209cebb303a7d2eae790a3b748 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 11:53:25 -0800 Subject: [PATCH 007/324] date number to string added month and week number to string console functions. --- Engine/source/console/consoleFunctions.cpp | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index f08ad2ac43..9fe5708fd8 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -1233,6 +1233,49 @@ DefineConsoleFunction( getWordCount, S32, ( const char* text ),, //----------------------------------------------------------------------------- +DefineEngineFunction( monthNumToStr, String, ( S32 num, bool abbreviate ), (false), + "@brief returns month as a word given a number or \"\" if number is bad" + "@return month as a word given a number or \"\" if number is bad" + "@ingroup FileSystem") +{ + switch(num) + { + case 1: return abbreviate ? "Jan" : "January"; break; + case 2: return abbreviate ? "Feb" : "February"; break; + case 3: return abbreviate ? "Mar" : "March"; break; + case 4: return abbreviate ? "Apr" : "April"; break; + case 5: return "May"; break; + case 6: return abbreviate ? "Jun" : "June"; break; + case 7: return abbreviate ? "Jul" : "July"; break; + case 8: return abbreviate ? "Aug" : "August"; break; + case 9: return abbreviate ? "Sep" : "September"; break; + case 10: return abbreviate ? "Oct" : "October"; break; + case 11: return abbreviate ? "Nov" : "November"; break; + case 12: return abbreviate ? "Dec" : "December"; break; + default: return ""; + } +} + +DefineEngineFunction( weekdayNumToStr, String, ( S32 num, bool abbreviate ), (false), + "@brief returns weekday as a word given a number or \"\" if number is bad" + "@return weekday as a word given a number or \"\" if number is bad" + "@ingroup FileSystem") +{ + switch(num) + { + case 0: return abbreviate ? "Sun" : "Sunday"; break; + case 1: return abbreviate ? "Mon" : "Monday"; break; + case 2: return abbreviate ? "Tue" : "Tuesday"; break; + case 3: return abbreviate ? "Wed" : "Wednesday"; break; + case 4: return abbreviate ? "Thu" : "Thursday"; break; + case 5: return abbreviate ? "Fri" : "Friday"; break; + case 6: return abbreviate ? "Sat" : "Saturday"; break; + default: return ""; + } +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( getField, const char*, ( const char* text, S32 index ),, "Extract the field at the given @a index in the newline and/or tab separated list in @a text.\n" "Fields in @a text must be separated by newlines and/or tabs.\n" From 55b91606e6d6fce1805bf341bbc042025aba4dd6 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 11:54:44 -0800 Subject: [PATCH 008/324] Added more token functions Added a bunch more token functions and added comments to word equivalents to let you know about the token version. --- Engine/source/console/consoleFunctions.cpp | 113 +++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 9fe5708fd8..f7680a82c0 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -1141,6 +1141,7 @@ DefineConsoleFunction( getWord, const char*, ( const char* text, S32 index ),, "@endtsexample\n\n" "@see getWords\n" "@see getWordCount\n" + "@see getToken\n" "@see getField\n" "@see getRecord\n" "@ingroup FieldManip" ) @@ -1164,6 +1165,7 @@ DefineConsoleFunction( getWords, const char*, ( const char* text, S32 startIndex "@endtsexample\n\n" "@see getWord\n" "@see getWordCount\n" + "@see getTokens\n" "@see getFields\n" "@see getRecords\n" "@ingroup FieldManip" ) @@ -1188,6 +1190,7 @@ DefineConsoleFunction( setWord, const char*, ( const char* text, S32 index, cons "setWord( \"a b c d\", 2, \"f\" ) // Returns \"a b f d\"\n" "@endtsexample\n\n" "@see getWord\n" + "@see setToken\n" "@see setField\n" "@see setRecord\n" "@ingroup FieldManip" ) @@ -1207,6 +1210,7 @@ DefineConsoleFunction( removeWord, const char*, ( const char* text, S32 index ), "@tsexample\n" "removeWord( \"a b c d\", 2 ) // Returns \"a b d\"\n" "@endtsexample\n\n" + "@see removeToken\n" "@see removeField\n" "@see removeRecord\n" "@ingroup FieldManip" ) @@ -1224,6 +1228,7 @@ DefineConsoleFunction( getWordCount, S32, ( const char* text ),, "@tsexample\n" "getWordCount( \"a b c d e\" ) // Returns 5\n" "@endtsexample\n\n" + "@see getTokenCount\n" "@see getFieldCount\n" "@see getRecordCount\n" "@ingroup FieldManip" ) @@ -1597,6 +1602,114 @@ DefineConsoleFunction( nextToken, const char*, ( const char* str1, const char* t return ret; } +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getToken, const char*, ( const char* text, const char* delimiters, S32 index ),, + "Extract the substring at the given @a index in the @a delimiters separated list in @a text.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the substring to extract.\n" + "@return The substring at the given index or \"\" if the index is out of range.\n\n" + "@tsexample\n" + "getToken( \"a b c d\", \" \", 2 ) // Returns \"c\"\n" + "@endtsexample\n\n" + "@see getTokens\n" + "@see getTokenCount\n" + "@see getWord\n" + "@see getField\n" + "@see getRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::getUnit(text, index, delimiters)); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getTokens, const char*, ( const char* text, const char* delimiters, S32 startIndex, S32 endIndex ), ( -1 ), + "Extract a range of substrings separated by @a delimiters at the given @a startIndex onwards thru @a endIndex.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param startIndex The zero-based index of the first substring to extract from @a text.\n" + "@param endIndex The zero-based index of the last substring to extract from @a text. If this is -1, all words beginning " + "with @a startIndex are extracted from @a text.\n" + "@return A string containing the specified range of substrings from @a text or \"\" if @a startIndex " + "is out of range or greater than @a endIndex.\n\n" + "@tsexample\n" + "getTokens( \"a b c d\", \" \", 1, 2, ) // Returns \"b c\"\n" + "@endtsexample\n\n" + "@see getToken\n" + "@see getTokenCount\n" + "@see getWords\n" + "@see getFields\n" + "@see getRecords\n" + "@ingroup FieldManip" ) +{ + if( endIndex < 0 ) + endIndex = 1000000; + + return Con::getReturnBuffer( StringUnit::getUnits( text, startIndex, endIndex, delimiters ) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( setToken, const char*, ( const char* text, const char* delimiters, S32 index, const char* replacement ),, + "Replace the substring in @a text separated by @a delimiters at the given @a index with @a replacement.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the substring to replace.\n" + "@param replacement The string with which to replace the substring.\n" + "@return A new string with the substring at the given @a index replaced by @a replacement or the original " + "string if @a index is out of range.\n\n" + "@tsexample\n" + "setToken( \"a b c d\", \" \", 2, \"f\" ) // Returns \"a b f d\"\n" + "@endtsexample\n\n" + "@see getToken\n" + "@see setWord\n" + "@see setField\n" + "@see setRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::setUnit( text, index, replacement, delimiters) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( removeToken, const char*, ( const char* text, const char* delimiters, S32 index ),, + "Remove the substring in @a text separated by @a delimiters at the given @a index.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the word in @a text.\n" + "@return A new string with the substring at the given index removed or the original string if @a index is " + "out of range.\n\n" + "@tsexample\n" + "removeToken( \"a b c d\", \" \", 2 ) // Returns \"a b d\"\n" + "@endtsexample\n\n" + "@see removeWord\n" + "@see removeField\n" + "@see removeRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::removeUnit( text, index, delimiters ) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getTokenCount, S32, ( const char* text, const char* delimiters),, + "Return the number of @a delimiters substrings in @a text.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@return The number of @a delimiters substrings in @a text.\n\n" + "@tsexample\n" + "getTokenCount( \"a b c d e\", \" \" ) // Returns 5\n" + "@endtsexample\n\n" + "@see getWordCount\n" + "@see getFieldCount\n" + "@see getRecordCount\n" + "@ingroup FieldManip" ) +{ + return StringUnit::getUnitCount( text, delimiters ); +} + //============================================================================= // Tagged Strings. //============================================================================= From 5cfcb0cd4547a183f5f5924a3cc9c0f7dc19f8a4 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 11:59:06 -0800 Subject: [PATCH 009/324] fixed comment added path param documentation to display splash window. --- Engine/source/console/consoleFunctions.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index f7680a82c0..c15c6c944a 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -2062,6 +2062,7 @@ DefineEngineFunction( gotoWebPage, void, ( const char* address ),, DefineEngineFunction( displaySplashWindow, bool, (const char* path), ("art/gui/splash.bmp"), "Display a startup splash window suitable for showing while the engine still starts up.\n\n" "@note This is currently only implemented on Windows.\n\n" + "@param path relative path to splash screen image to display.\n" "@return True if the splash window could be successfully initialized.\n\n" "@ingroup Platform" ) { From df2ca75b13d3edc9a3fa180ce0c96b30675005a9 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 12:02:40 -0800 Subject: [PATCH 010/324] get max dynamic verts in script you can now get the max dynamic vertices in script. --- Engine/source/console/consoleFunctions.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index c15c6c944a..1d5403818e 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -37,6 +37,7 @@ #include "console/compiler.h" #include "platform/platformInput.h" #include "core/util/journal/journal.h" +#include "gfx/gfxEnums.h" #include "core/util/uuid.h" #ifdef TORQUE_DEMO_PURCHASE @@ -3065,3 +3066,10 @@ DefineEngineFunction( isToolBuild, bool, (),, return false; #endif } + +DefineEngineFunction( getMaxDynamicVerts, S32, (),, + "Get max number of allowable dynamic vertices in a single vertex buffer.\n\n" + "@return the max number of allowable dynamic vertices in a single vertex buffer" ) +{ + return MAX_DYNAMIC_VERTS / 2; +} \ No newline at end of file From c98e95e6ff9f0a22adee57544805701a81b71c39 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 29 Jan 2015 15:09:41 -0800 Subject: [PATCH 011/324] Forgot supporting method Added string manipulation functions upload, requires these changes to compile. --- Engine/source/core/util/str.cpp | 100 ++++++++++++++++++++++++++++++++ Engine/source/core/util/str.h | 1 + 2 files changed, 101 insertions(+) diff --git a/Engine/source/core/util/str.cpp b/Engine/source/core/util/str.cpp index 3f4f3d8f9a..59fd0ab46f 100644 --- a/Engine/source/core/util/str.cpp +++ b/Engine/source/core/util/str.cpp @@ -1624,3 +1624,103 @@ String String::GetTrailingNumber(const char* str, S32& number) return base.substr(0, p - base.c_str()); } + +String String::GetFirstNumber(const char* str, U32& startPos, U32& endPos) +{ + // Check for trivial strings + if (!str || !str[0]) + return String::EmptyString; + + // Find the number at the end of the string + String base(str); + const char* p = base.c_str(); + const char* end = base.c_str() + base.length() - 1; + bool dec = false; + startPos = 0; + + //Check if we are just a digit + if(p == end && isdigit(*p)) + return base; + + //Look for the first digit + while ((p != end) && (dIsspace(*p) || !isdigit(*p))) + { + p++; + startPos++; + } + + //Handle if we are at the end and found nothing + if(p == end && !isdigit(*p)) + return ""; + + //update our end position at least to the start of our number + endPos = startPos; + + //Backup our ptr + const char* backup = p; + + //Check for any negative or decimal values + if(startPos > 0) + { + p--; + startPos--; + if(*p == '.') + { + dec = true; + + //ignore any duplicate periods + while ((p != base.c_str()) && (*p == '.')) + { + p--; + startPos--; + } + + //Found a decimal lets still check for negative sign + if(startPos > 0) + { + p--; + startPos--; + if((*p != '-') && (*p != '_')) + { + startPos++; + p++; + } + } + } + else if((*p != '-') && (*p != '_')) + { + //go back to where we where cause no decimal or negative sign found + startPos++; + p++; + } + } + + //Restore where we were + p = backup; + + //look for the end of the digits + bool justFoundDec = false; + while (p != end) + { + if(*p == '.') + { + if(dec && !justFoundDec) + break; + else + { + dec = true; + justFoundDec = true; + } + } + else if(!isdigit(*p)) + break; + else if(justFoundDec) + justFoundDec = false; + + p++; + endPos++; + } + + U32 len = (!isdigit(*p)) ? endPos - startPos : (endPos + 1) - startPos; + return base.substr(startPos, len); +} diff --git a/Engine/source/core/util/str.h b/Engine/source/core/util/str.h index 0094844519..33fdb819d6 100644 --- a/Engine/source/core/util/str.h +++ b/Engine/source/core/util/str.h @@ -190,6 +190,7 @@ class String static String ToUpper(const String &string); static String GetTrailingNumber(const char* str, S32& number); + static String GetFirstNumber(const char* str, U32& startPos, U32& endPos); /// @} From e03c3bb34fb7a2bdac847a23f10277285d9abf61 Mon Sep 17 00:00:00 2001 From: Ben Payne Date: Mon, 2 Feb 2015 18:17:37 -0500 Subject: [PATCH 012/324] Fix TORQUE_UNUSED for recent versions of MSVC Since there's now apparently no way to suppress the warning for a particular variable without adding at least some extra size to the executable, just turn the warning off in release builds. We leave it on in debug since it can sometimes help catch bugs, and we don't care about a little extra code in that configuration. --- Engine/source/platform/types.visualc.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Engine/source/platform/types.visualc.h b/Engine/source/platform/types.visualc.h index e383c1ea74..36d075d077 100644 --- a/Engine/source/platform/types.visualc.h +++ b/Engine/source/platform/types.visualc.h @@ -32,6 +32,16 @@ typedef signed _int64 S64; typedef unsigned _int64 U64; +// The types.h version of TORQUE_UNUSED no longer works for recent versions of MSVC. +// Since it appears that MS has made this impossible to do in a zero-overhead way, +// just turn the warning off in release builds. +#undef TORQUE_UNUSED +#ifdef TORQUE_DEBUG +#define TORQUE_UNUSED(var) ((0,0) ? (void)(var) : (void)0) +#else +#pragma warning(disable: 4189) // local variable is initialized but not referenced +#define TORQUE_UNUSED(var) ((void)0) +#endif //-------------------------------------- // Compiler Version From c19a70814c270d51dd768b0ffdfa45ec9cd42f39 Mon Sep 17 00:00:00 2001 From: Ben Payne Date: Mon, 2 Feb 2015 18:24:01 -0500 Subject: [PATCH 013/324] Tidy up and fix the various Assert macros Rephrase the macros so that they can be used in expressions, and properly require semicolons. And add the semicolons where missing. --- Engine/source/T3D/fx/fxFoliageReplicator.cpp | 6 +-- Engine/source/T3D/fx/fxShapeReplicator.cpp | 2 +- Engine/source/console/codeBlock.cpp | 2 +- Engine/source/core/idGenerator.h | 2 +- Engine/source/environment/timeOfDay.cpp | 4 +- .../source/gfx/bitmap/loaders/bitmapTga.cpp | 2 +- Engine/source/gui/core/guiCanvas.cpp | 3 +- Engine/source/platform/platformAssert.h | 53 +++++++++---------- Engine/source/sim/netGhost.cpp | 4 +- Engine/source/util/catmullRom.cpp | 2 +- Engine/source/util/catmullRom.h | 4 +- 11 files changed, 40 insertions(+), 44 deletions(-) diff --git a/Engine/source/T3D/fx/fxFoliageReplicator.cpp b/Engine/source/T3D/fx/fxFoliageReplicator.cpp index 7e88b174fd..ec17c2f183 100644 --- a/Engine/source/T3D/fx/fxFoliageReplicator.cpp +++ b/Engine/source/T3D/fx/fxFoliageReplicator.cpp @@ -426,7 +426,7 @@ void fxFoliageReplicator::CreateFoliage(void) Point3F MaxPoint( 0.5, 0.5, 0.5 ); // Check Host. - AssertFatal(isClientObject(), "Trying to create Foliage on Server, this is bad!") + AssertFatal(isClientObject(), "Trying to create Foliage on Server, this is bad!"); // Cannot continue without Foliage Texture! if (dStrlen(mFieldData.mFoliageFile) == 0) @@ -1134,7 +1134,7 @@ void fxFoliageReplicator::ProcessQuadrant(fxFoliageQuadrantNode* pParentNode, fx void fxFoliageReplicator::SyncFoliageReplicators(void) { // Check Host. - AssertFatal(isServerObject(), "We *MUST* be on server when Synchronising Foliage!") + AssertFatal(isServerObject(), "We *MUST* be on server when Synchronising Foliage!"); // Find the Replicator Set. SimSet *fxFoliageSet = dynamic_cast(Sim::findObject("fxFoliageSet")); @@ -1196,7 +1196,7 @@ void fxFoliageReplicator::DestroyFoliageItems() void fxFoliageReplicator::DestroyFoliage(void) { // Check Host. - AssertFatal(isClientObject(), "Trying to destroy Foliage on Server, this is bad!") + AssertFatal(isClientObject(), "Trying to destroy Foliage on Server, this is bad!"); // Destroy Quad-tree. mPotentialFoliageNodes = 0; diff --git a/Engine/source/T3D/fx/fxShapeReplicator.cpp b/Engine/source/T3D/fx/fxShapeReplicator.cpp index 9082127160..6093fa0d55 100644 --- a/Engine/source/T3D/fx/fxShapeReplicator.cpp +++ b/Engine/source/T3D/fx/fxShapeReplicator.cpp @@ -224,7 +224,7 @@ void fxShapeReplicator::CreateShapes(void) } // Check Shapes. - AssertFatal(mCurrentShapeCount==0,"Shapes already present, this should not be possible!") + AssertFatal(mCurrentShapeCount==0,"Shapes already present, this should not be possible!"); // Check that we have a shape... if (!mFieldData.mShapeFile) return; diff --git a/Engine/source/console/codeBlock.cpp b/Engine/source/console/codeBlock.cpp index 05a2ab7980..9b87a5ed34 100644 --- a/Engine/source/console/codeBlock.cpp +++ b/Engine/source/console/codeBlock.cpp @@ -61,7 +61,7 @@ CodeBlock::CodeBlock() CodeBlock::~CodeBlock() { // Make sure we aren't lingering in the current code block... - AssertFatal(smCurrentCodeBlock != this, "CodeBlock::~CodeBlock - Caught lingering in smCurrentCodeBlock!") + AssertFatal(smCurrentCodeBlock != this, "CodeBlock::~CodeBlock - Caught lingering in smCurrentCodeBlock!"); if(name) removeFromCodeList(); diff --git a/Engine/source/core/idGenerator.h b/Engine/source/core/idGenerator.h index a0ddc74edb..8c34676738 100644 --- a/Engine/source/core/idGenerator.h +++ b/Engine/source/core/idGenerator.h @@ -74,7 +74,7 @@ class IdGenerator void free(U32 id) { - AssertFatal(id >= mIdBlockBase, "IdGenerator::alloc: invalid id, id does not belong to this IdGenerator.") + AssertFatal(id >= mIdBlockBase, "IdGenerator::alloc: invalid id, id does not belong to this IdGenerator."); if(id == mNextId - 1) { mNextId--; diff --git a/Engine/source/environment/timeOfDay.cpp b/Engine/source/environment/timeOfDay.cpp index 49b069b643..a0ae2fc83b 100644 --- a/Engine/source/environment/timeOfDay.cpp +++ b/Engine/source/environment/timeOfDay.cpp @@ -402,7 +402,7 @@ void TimeOfDay::_getSunColor( ColorF *outColor ) const //simple check if ( mColorTargets[0].elevation != 0.0f ) { - AssertFatal(0, "TimeOfDay::GetColor() - First elevation must be 0.0 radians") + AssertFatal(0, "TimeOfDay::GetColor() - First elevation must be 0.0 radians"); outColor->set(1.0f, 1.0f, 1.0f); //mBandMod = 1.0f; //mCurrentBandColor = color; @@ -411,7 +411,7 @@ void TimeOfDay::_getSunColor( ColorF *outColor ) const if ( mColorTargets[mColorTargets.size()-1].elevation != M_PI_F ) { - AssertFatal(0, "Celestails::GetColor() - Last elevation must be PI") + AssertFatal(0, "Celestails::GetColor() - Last elevation must be PI"); outColor->set(1.0f, 1.0f, 1.0f); //mBandMod = 1.0f; //mCurrentBandColor = color; diff --git a/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp b/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp index 15812ff9b8..dff46bf036 100644 --- a/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp +++ b/Engine/source/gfx/bitmap/loaders/bitmapTga.cpp @@ -483,7 +483,7 @@ static bool sReadTGA(Stream &stream, GBitmap *bitmap) static bool sWriteTGA(GBitmap *bitmap, Stream &stream, U32 compressionLevel) { - AssertISV(false, "GBitmap::writeTGA - doesn't support writing tga files!") + AssertISV(false, "GBitmap::writeTGA - doesn't support writing tga files!"); return false; } diff --git a/Engine/source/gui/core/guiCanvas.cpp b/Engine/source/gui/core/guiCanvas.cpp index 4dba87310c..6c68e410c4 100644 --- a/Engine/source/gui/core/guiCanvas.cpp +++ b/Engine/source/gui/core/guiCanvas.cpp @@ -712,7 +712,8 @@ bool GuiCanvas::processMouseEvent(InputEventInfo &inputEvent) // Need to query platform for specific things AssertISV(mPlatformWindow, "GuiCanvas::processMouseEvent - no window present!"); PlatformCursorController *pController = mPlatformWindow->getCursorController(); - AssertFatal(pController != NULL, "GuiCanvas::processInputEvent - No Platform Controller Found") + AssertFatal(pController != NULL, "GuiCanvas::processInputEvent - No Platform Controller Found"); + //copy the modifier into the new event mLastEvent.modifier = inputEvent.modifier; diff --git a/Engine/source/platform/platformAssert.h b/Engine/source/platform/platformAssert.h index c26f255c02..86ccb1b234 100644 --- a/Engine/source/platform/platformAssert.h +++ b/Engine/source/platform/platformAssert.h @@ -64,19 +64,17 @@ class PlatformAssert #ifdef TORQUE_ENABLE_ASSERTS - /*! - Assert that the statement x is true, and continue processing. +/*! + Assert that the statement x is true, and continue processing. - If the statment x is true, continue processing. + If the statment x is true, continue processing. - If the statement x is false, log the file and line where the assert occured, - the message y and continue processing. + If the statement x is false, log the file and line where the assert occured, + the message y and continue processing. - These asserts are only present in DEBUG builds. - */ - #define AssertWarn(x, y) \ - { if ((x)==0) \ - ::PlatformAssert::processAssert(::PlatformAssert::Warning, __FILE__, __LINE__, y); } + These asserts are only present in DEBUG builds. + */ +#define AssertWarn(x, y) (void)(!!(x) || ::PlatformAssert::processAssert(::PlatformAssert::Warning, __FILE__, __LINE__, y)) /*! Helper macro called when AssertFatal failed. @@ -86,27 +84,27 @@ class PlatformAssert #define ON_FAIL_ASSERTFATAL #endif - /*! - Assert that the statement x is true, otherwise halt. +/*! + Assert that the statement x is true, otherwise halt. - If the statement x is true, continue processing. + If the statement x is true, continue processing. - If the statement x is false, log the file and line where the assert occured, - the message y and displaying a dialog containing the message y. The user then - has the option to halt or continue causing the debugger to break. + If the statement x is false, log the file and line where the assert occured, + the message y and displaying a dialog containing the message y. The user then + has the option to halt or continue causing the debugger to break. - These asserts are only present in DEBUG builds. + These asserts are only present in DEBUG builds. - This assert is very useful for verifying data as well as function entry and - exit conditions. - */ - #define AssertFatal(x, y) \ - { if (((bool)(x))==false) \ - { if ( ::PlatformAssert::processAssert(::PlatformAssert::Fatal, __FILE__, __LINE__, y) ) { ::Platform::debugBreak(); } } } + This assert is very useful for verifying data as well as function entry and + exit conditions. + */ +#define AssertFatal(x, y) ((!(x) && ::PlatformAssert::processAssert(::PlatformAssert::Fatal, __FILE__, __LINE__, y)) ? ::Platform::debugBreak() : (void)0) \ #else - #define AssertFatal(x, y) { TORQUE_UNUSED(x); TORQUE_UNUSED(y); } - #define AssertWarn(x, y) { TORQUE_UNUSED(x); TORQUE_UNUSED(y); } + +#define AssertFatal(x, y) TORQUE_UNUSED(x) +#define AssertWarn(x, y) TORQUE_UNUSED(x) + #endif /*! @@ -121,10 +119,7 @@ class PlatformAssert This assert should only be used for rare conditions where the application cannot continue execution without seg-faulting and you want to display a nice exit message. */ -#define AssertISV(x, y) \ - { if ((x)==0) \ -{ if ( ::PlatformAssert::processAssert(::PlatformAssert::Fatal_ISV, __FILE__, __LINE__, y) ) { ::Platform::debugBreak(); } } } - +#define AssertISV(x, y) ((!(x) && ::PlatformAssert::processAssert(::PlatformAssert::Fatal_ISV, __FILE__, __LINE__, y)) ? ::Platform::debugBreak() : (void)0) \ /*! Sprintf style string formating into a fixed temporary buffer. diff --git a/Engine/source/sim/netGhost.cpp b/Engine/source/sim/netGhost.cpp index 13acfc7e38..9ea42fc069 100644 --- a/Engine/source/sim/netGhost.cpp +++ b/Engine/source/sim/netGhost.cpp @@ -958,7 +958,7 @@ void NetConnection::activateGhosting() // Iterate through the scope always objects... for (j = mGhostZeroUpdateIndex - 1; j >= 0; j--) { - AssertFatal((mGhostArray[j]->flags & GhostInfo::ScopeAlways) != 0, "NetConnection::activateGhosting: Non-scope always in the scope always list.") + AssertFatal((mGhostArray[j]->flags & GhostInfo::ScopeAlways) != 0, "NetConnection::activateGhosting: Non-scope always in the scope always list."); // Clear the ghost update mask and flags appropriately. mGhostArray[j]->updateMask = 0; @@ -1009,7 +1009,7 @@ void NetConnection::activateGhosting() // Iterate through the scope always objects... for (j = mGhostZeroUpdateIndex - 1; j >= 0; j--) { - AssertFatal((mGhostArray[j]->flags & GhostInfo::ScopeAlways) != 0, "NetConnection::activateGhosting: Non-scope always in the scope always list.") + AssertFatal((mGhostArray[j]->flags & GhostInfo::ScopeAlways) != 0, "NetConnection::activateGhosting: Non-scope always in the scope always list."); // Clear the ghost update mask and flags appropriately. mGhostArray[j]->updateMask = 0; diff --git a/Engine/source/util/catmullRom.cpp b/Engine/source/util/catmullRom.cpp index 10452c18cb..7ac676a159 100644 --- a/Engine/source/util/catmullRom.cpp +++ b/Engine/source/util/catmullRom.cpp @@ -48,7 +48,7 @@ CatmullRomBase::CatmullRomBase() void CatmullRomBase::_initialize( U32 count, const F32 *times ) { //AssertFatal( times, "CatmullRomBase::_initialize() - Got null position!" ) - AssertFatal( count > 1, "CatmullRomBase::_initialize() - Must have more than 2 points!" ) + AssertFatal( count > 1, "CatmullRomBase::_initialize() - Must have more than 2 points!" ); // set up arrays mTimes = new F32[count]; diff --git a/Engine/source/util/catmullRom.h b/Engine/source/util/catmullRom.h index f4c9decb02..84bb272aad 100644 --- a/Engine/source/util/catmullRom.h +++ b/Engine/source/util/catmullRom.h @@ -142,8 +142,8 @@ inline void CatmullRom::clear() template inline void CatmullRom::initialize( U32 count, const TYPE *positions, const F32 *times ) { - AssertFatal( positions, "CatmullRom::initialize - Got null position!" ) - AssertFatal( count > 1, "CatmullRom::initialize - Must have more than 2 points!" ) + AssertFatal( positions, "CatmullRom::initialize - Got null position!" ); + AssertFatal( count > 1, "CatmullRom::initialize - Must have more than 2 points!" ); // Clean up any previous state. clear(); From 222be2bb723f6536bf33ce139e352dfc52c45e6f Mon Sep 17 00:00:00 2001 From: Ben Payne Date: Mon, 2 Feb 2015 19:11:20 -0500 Subject: [PATCH 014/324] Remove dead function --- Engine/source/platform/platformAssert.cpp | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/Engine/source/platform/platformAssert.cpp b/Engine/source/platform/platformAssert.cpp index 7e1d3b93ad..f1a2b2957d 100644 --- a/Engine/source/platform/platformAssert.cpp +++ b/Engine/source/platform/platformAssert.cpp @@ -69,24 +69,6 @@ bool PlatformAssert::displayMessageBox(const char *title, const char *message, b } static const char *typeName[] = { "Unknown", "Fatal-ISV", "Fatal", "Warning" }; -//------------------------------------------------------------------------------ -static bool askToEnterDebugger(const char* message ) -{ - static bool haveAsked = false; - static bool useDebugger = true; - if(!haveAsked ) - { - static char tempBuff[1024]; - dSprintf( tempBuff, 1024, "Torque has encountered an assertion with message\n\n" - "%s\n\n" - "Would you like to use the debugger? If you cancel, you won't be asked" - " again until you restart Torque.", message); - - useDebugger = Platform::AlertOKCancel("Use debugger?", tempBuff ); - haveAsked = true; - } - return useDebugger; -} //-------------------------------------- From 2efe1a9c0a0b420a10742235c7bdcfe7b599cbc1 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Tue, 3 Feb 2015 10:59:32 -0800 Subject: [PATCH 015/324] Added More Vector math functions Added VectorMul (vector multiply), VectorDiv (vector divide, and VectorMidPoint to find the midpoint of two vectors. --- Engine/source/math/mathTypes.cpp | 88 ++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/Engine/source/math/mathTypes.cpp b/Engine/source/math/mathTypes.cpp index ce0f198d19..807e3bc600 100644 --- a/Engine/source/math/mathTypes.cpp +++ b/Engine/source/math/mathTypes.cpp @@ -659,6 +659,66 @@ DefineConsoleFunction( VectorScale, VectorF, ( VectorF a, F32 scalar ),, { return a * scalar; } +DefineConsoleFunction( VectorMul, VectorF, ( VectorF a, VectorF b ),, + "Multiplies two vectors.\n" + "@param a The first vector.\n" + "@param b The second vector.\n" + "@return The vector @a a * @a b.\n\n" + "@tsexample\n" + "//-----------------------------------------------------------------------------\n" + "//\n" + "// VectorMul( %a, %b );\n" + "//\n" + "// The multiplication of vector a, (ax, ay, az), and vector b, (bx, by, bz) is:\n" + "//\n" + "// a * b = ( ax * bx, ay * by, az * bz )\n" + "//\n" + "//-----------------------------------------------------------------------------\n\n" + + "%a = \"1 0 0\";\n" + "%b = \"0 1 0\";\n\n" + + "// %r = \"( 1 * 0, 0 * 1, 0 * 0 )\";\n" + "// %r = \"0 0 0\";\n" + "%r = VectorMul( %a, %b );\n" + "@endtsexample\n\n" + "@ingroup Vectors" ) +{ + return a * b; +} + +DefineConsoleFunction( VectorDiv, VectorF, ( VectorF a, VectorF b ),, + "Divide two vectors.\n" + "@param a The first vector.\n" + "@param b The second vector.\n" + "@return The vector @a a / @a b.\n\n" + "@tsexample\n" + "//-----------------------------------------------------------------------------\n" + "//\n" + "// VectorDiv( %a, %b );\n" + "//\n" + "// The division of vector a, (ax, ay, az), and vector b, (bx, by, bz) is:\n" + "//\n" + "// a * b = ( ax / bx, ay / by, az / bz )\n" + "//\n" + "//-----------------------------------------------------------------------------\n\n" + + "%a = \"1 1 1\";\n" + "%b = \"2 2 2\";\n\n" + + "// %r = \"( 1 / 2, 1 / 2, 1 / 2 )\";\n" + "// %r = \"0.5 0.5 0.5\";\n" + "%r = VectorDiv( %a, %b );\n" + "@endtsexample\n\n" + "@ingroup Vectors" ) +{ + //this is kind of bad, but so is dividing by 0 + if(b.x == 0) b.x = 0.000001f; + if(b.y == 0) b.y = 0.000001f; + if(b.z == 0) b.z = 0.000001f; + + return a / b; +} //----------------------------------------------------------------------------- @@ -789,6 +849,34 @@ DefineConsoleFunction( VectorDist, F32, ( VectorF a, VectorF b ),, //----------------------------------------------------------------------------- +DefineConsoleFunction( VectorMidPoint, VectorF, ( VectorF a, VectorF b ),, + "Gets the midpoint between the two vectors.\n" + "@param a The first vector.\n" + "@param b The second vector.\n" + "@return The vector (@a a + @a b) / 2.\n\n" + "@tsexample\n" + "//-----------------------------------------------------------------------------\n" + "//\n" + "// VectorMidPoint( %a, %b );\n" + "//\n" + "// The midpoint of vector a, (ax, ay, az), and vector b, (bx, by, bz) is:\n" + "//\n" + "// (a + b)/2 = ( (ax + bx) /2, ay + by) /2, (az + bz) /2 )\n" + "//\n" + "//-----------------------------------------------------------------------------\n" +// "%a = \"1 0 0\";\n" +// "%b = \"0 1 0\";\n\n" +// "// %r = \"( 1 + 0, 0 + 1, 0 + 0 )\";\n" +// "// %r = \"1 1 0\";\n" +// "%r = VectorAdd( %a, %b );\n" + "@endtsexample\n\n" + "@ingroup Vectors") +{ + return (a + b)/2.0f; +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( VectorLen, F32, ( VectorF v ),, "Calculate the magnitude of the given vector.\n" "@param v A vector.\n" From 686b9fced931833fc30e043472e92a6709cdccbf Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Tue, 3 Feb 2015 11:52:06 -0800 Subject: [PATCH 016/324] Round function can now round to number of digits Changed round function to support optional n parameter to round to that many digits. --- Engine/source/math/mConsoleFunctions.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Engine/source/math/mConsoleFunctions.cpp b/Engine/source/math/mConsoleFunctions.cpp index 1a11fe23e4..f9b352c288 100644 --- a/Engine/source/math/mConsoleFunctions.cpp +++ b/Engine/source/math/mConsoleFunctions.cpp @@ -94,13 +94,18 @@ DefineConsoleFunction( mFloor, S32, ( F32 v ),, return (S32)mFloor( v ); } -DefineConsoleFunction( mRound, S32, ( F32 v ),, - "Round v to the nth decimal place or the nearest whole number by default." - "@param v Value to roundn" - "@return The rounded value as a S32." - "@ingroup Math" ) + +DefineConsoleFunction( mRound, F32, ( F32 v, S32 n ), (0), + "Round v to the nth decimal place or the nearest whole number by default." + "@param v Value to round\n" + "@param n Number of decimal places to round to, 0 by default\n" + "@return The rounded value as a S32." + "@ingroup Math" ) { - return mRound(v); + if(n <= 0) + return mRound(v); + else + return mRound(v, n); } DefineConsoleFunction( mCeil, S32, ( F32 v ),, From 40999be7c1952af154609e0ecbc9933e13c5e391 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 5 Feb 2015 11:19:41 -0800 Subject: [PATCH 017/324] Improved file open dialogue Added some extra parameters to open file dialogue and added a check to findConstructor so it doesn't throw errors. --- .../Empty/game/tools/gui/openFileDialog.ed.cs | 25 +++++++++++++------ .../Full/game/tools/gui/openFileDialog.ed.cs | 25 +++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/Templates/Empty/game/tools/gui/openFileDialog.ed.cs b/Templates/Empty/game/tools/gui/openFileDialog.ed.cs index b988d33611..50c7cdfccd 100644 --- a/Templates/Empty/game/tools/gui/openFileDialog.ed.cs +++ b/Templates/Empty/game/tools/gui/openFileDialog.ed.cs @@ -20,27 +20,38 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -function getLoadFilename(%filespec, %callback, %currentFile) -{ +function getLoadFilename(%filespec, %callback, %currentFile, %getRelative, %defaultPath) +{ + //If no default path passed in then try to get one from the file + if(%defaultPath $= "") + { + if ( filePath( %currentFile ) !$= "" ) + %defaultPath = filePath(%currentFile); + } + %dlg = new OpenFileDialog() { Filters = %filespec; DefaultFile = %currentFile; + DefaultPath = %defaultPath; ChangePath = false; MustExist = true; MultipleFiles = false; }; - if ( filePath( %currentFile ) !$= "" ) - %dlg.DefaultPath = filePath(%currentFile); - - if ( %dlg.Execute() ) + %ok = %dlg.Execute(); + if ( %ok ) { - eval(%callback @ "(\"" @ %dlg.FileName @ "\");"); + %file = %dlg.FileName; + if(%getRelative) + %file = strreplace(%file,getWorkingDirectory() @ "/", ""); + eval(%callback @ "(\"" @ %file @ "\");"); $Tools::FileDialogs::LastFilePath = filePath( %dlg.FileName ); } %dlg.delete(); + + return %ok; } // Opens a choose file dialog with format filters already loaded diff --git a/Templates/Full/game/tools/gui/openFileDialog.ed.cs b/Templates/Full/game/tools/gui/openFileDialog.ed.cs index b988d33611..50c7cdfccd 100644 --- a/Templates/Full/game/tools/gui/openFileDialog.ed.cs +++ b/Templates/Full/game/tools/gui/openFileDialog.ed.cs @@ -20,27 +20,38 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -function getLoadFilename(%filespec, %callback, %currentFile) -{ +function getLoadFilename(%filespec, %callback, %currentFile, %getRelative, %defaultPath) +{ + //If no default path passed in then try to get one from the file + if(%defaultPath $= "") + { + if ( filePath( %currentFile ) !$= "" ) + %defaultPath = filePath(%currentFile); + } + %dlg = new OpenFileDialog() { Filters = %filespec; DefaultFile = %currentFile; + DefaultPath = %defaultPath; ChangePath = false; MustExist = true; MultipleFiles = false; }; - if ( filePath( %currentFile ) !$= "" ) - %dlg.DefaultPath = filePath(%currentFile); - - if ( %dlg.Execute() ) + %ok = %dlg.Execute(); + if ( %ok ) { - eval(%callback @ "(\"" @ %dlg.FileName @ "\");"); + %file = %dlg.FileName; + if(%getRelative) + %file = strreplace(%file,getWorkingDirectory() @ "/", ""); + eval(%callback @ "(\"" @ %file @ "\");"); $Tools::FileDialogs::LastFilePath = filePath( %dlg.FileName ); } %dlg.delete(); + + return %ok; } // Opens a choose file dialog with format filters already loaded From 7ef3a6495784c19824fbb0e414a54dd2ba54f761 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 5 Feb 2015 11:28:19 -0800 Subject: [PATCH 018/324] Added getLocalTime console function Add getLocalTime console function so that script has access to the local time. --- Engine/source/app/game.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Engine/source/app/game.cpp b/Engine/source/app/game.cpp index 4579b4819a..2f0e30c777 100644 --- a/Engine/source/app/game.cpp +++ b/Engine/source/app/game.cpp @@ -202,6 +202,26 @@ DefineConsoleFunction( getRealTime, S32, (), , "()" return Platform::getRealMilliseconds(); } +ConsoleFunction( getLocalTime, const char *, 1, 1, "Return the current local time as: weekday month day year hour min sec.\n\n" + "Local time is platform defined.") +{ + Platform::LocalTime lt; + Platform::getLocalTime(lt); + + static const U32 bufSize = 128; + char *retBuffer = Con::getReturnBuffer(bufSize); + dSprintf(retBuffer, bufSize, "%d %d %d %d %02d %02d %02d", + lt.weekday, + lt.month + 1, + lt.monthday, + lt.year + 1900, + lt.hour, + lt.min, + lt.sec); + + return retBuffer; +} + ConsoleFunctionGroupEnd(Platform); //----------------------------------------------------------------------------- From a0250e6c6bd3b9c88858c0fc35a3f5da6a5807df Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 5 Feb 2015 11:41:44 -0800 Subject: [PATCH 019/324] Added callback when we read all lines Added a script callback when all lines have been read. --- Engine/source/app/net/tcpObject.cpp | 6 ++++++ Engine/source/app/net/tcpObject.h | 1 + 2 files changed, 7 insertions(+) diff --git a/Engine/source/app/net/tcpObject.cpp b/Engine/source/app/net/tcpObject.cpp index f2818b4262..6d1ccaa497 100644 --- a/Engine/source/app/net/tcpObject.cpp +++ b/Engine/source/app/net/tcpObject.cpp @@ -138,6 +138,10 @@ IMPLEMENT_CALLBACK(TCPObject, onLine, void, (const char* line), (line), "@param line Data sent from the server.\n" ); +IMPLEMENT_CALLBACK(TCPObject, onEndReceive, void, (), (), + "@brief Called when we are done reading all lines.\n\n" + ); + IMPLEMENT_CALLBACK(TCPObject, onDNSResolved, void, (),(), "Called whenever the DNS has been resolved.\n" ); @@ -499,6 +503,8 @@ void processConnectedReceiveEvent(NetSocket sock, RawData incomingData) size -= ret; buffer += ret; } + + tcpo->onEndReceive_callback(); } void processConnectedAcceptEvent(NetSocket listeningPort, NetSocket newConnection, NetAddress originatingAddress) diff --git a/Engine/source/app/net/tcpObject.h b/Engine/source/app/net/tcpObject.h index 9c4582eabc..9d14868ad8 100644 --- a/Engine/source/app/net/tcpObject.h +++ b/Engine/source/app/net/tcpObject.h @@ -36,6 +36,7 @@ class TCPObject : public SimObject DECLARE_CALLBACK(void, onConnectionRequest, (const char* address, const char* ID)); DECLARE_CALLBACK(void, onLine, (const char* line)); + DECLARE_CALLBACK(void, onEndReceive, ()); DECLARE_CALLBACK(void, onDNSResolved,()); DECLARE_CALLBACK(void, onDNSFailed, ()); DECLARE_CALLBACK(void, onConnected, ()); From 5f0b3984fc0137382560f74dffdec90468b2c290 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 5 Feb 2015 11:43:56 -0800 Subject: [PATCH 020/324] Added sendFile method Added a method to send an entire file over tcp. --- Engine/source/app/net/tcpObject.cpp | 33 +++++++++++++++++++++++++++++ Engine/source/app/net/tcpObject.h | 6 ++++++ 2 files changed, 39 insertions(+) diff --git a/Engine/source/app/net/tcpObject.cpp b/Engine/source/app/net/tcpObject.cpp index 6d1ccaa497..b156bfa046 100644 --- a/Engine/source/app/net/tcpObject.cpp +++ b/Engine/source/app/net/tcpObject.cpp @@ -27,6 +27,7 @@ #include "console/consoleInternal.h" #include "core/strings/stringUnit.h" #include "console/engineAPI.h" +#include "core/stream/fileStream.h" TCPObject *TCPObject::table[TCPObject::TableSize] = {0, }; @@ -404,6 +405,29 @@ void TCPObject::send(const U8 *buffer, U32 len) Net::sendtoSocket(mTag, buffer, S32(len)); } +bool TCPObject::sendFile(const char* fileName) +{ + //Open the file for reading + FileStream readFile; + if(!readFile.open(fileName, Torque::FS::File::Read)) + { + return false; + } + + //Read each byte into our buffer + Vector buffer(readFile.getStreamSize()); + U8 byte; + while(readFile.read(&byte)) + { + buffer.push_back(byte); + } + + //Send the buffer + send(buffer.address(), buffer.size()); + + return true; +} + DefineEngineMethod(TCPObject, send, void, (const char *data),, "@brief Transmits the data string to the connected computer.\n\n" @@ -425,6 +449,15 @@ DefineEngineMethod(TCPObject, send, void, (const char *data),, object->send( (const U8*)data, dStrlen(data) ); } +DefineEngineMethod(TCPObject, sendFile, bool, (const char *fileName),, + "@brief Transmits the file in binary to the connected computer.\n\n" + + "@param fileName The filename of the file to transfer.\n") +{ + return object->sendFile(fileName); +} + + DefineEngineMethod(TCPObject, listen, void, (U32 port),, "@brief Start listening on the specified port for connections.\n\n" diff --git a/Engine/source/app/net/tcpObject.h b/Engine/source/app/net/tcpObject.h index 9d14868ad8..39b9464bac 100644 --- a/Engine/source/app/net/tcpObject.h +++ b/Engine/source/app/net/tcpObject.h @@ -82,6 +82,12 @@ class TCPObject : public SimObject bool processArguments(S32 argc, ConsoleValueRef *argv); void send(const U8 *buffer, U32 bufferLen); + + ///Send an entire file over tcp + ///@arg fileName Full path to file you want to send + ///@return true if file was sent, false if not (file doesn't exist) + bool sendFile(const char* fileName); + void addToTable(NetSocket newTag); void removeFromTable(); From 0a768090928d07912c14af10cde2bdc86d323f51 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 5 Feb 2015 11:44:32 -0800 Subject: [PATCH 021/324] Opened finishLastLine to script Opened finishLastLine to script so you can eat the rest of the lines in script. --- Engine/source/app/net/tcpObject.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Engine/source/app/net/tcpObject.cpp b/Engine/source/app/net/tcpObject.cpp index b156bfa046..28e91ba45c 100644 --- a/Engine/source/app/net/tcpObject.cpp +++ b/Engine/source/app/net/tcpObject.cpp @@ -457,6 +457,11 @@ DefineEngineMethod(TCPObject, sendFile, bool, (const char *fileName),, return object->sendFile(fileName); } +DefineEngineMethod(TCPObject, finishLastLine, void, (),, + "@brief Eat the rest of the lines.\n") +{ + object->finishLastLine(); +} DefineEngineMethod(TCPObject, listen, void, (U32 port),, "@brief Start listening on the specified port for connections.\n\n" From 02f859c150d69e6339a59bd41a6035115a66cdb7 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Wed, 11 Feb 2015 10:53:34 -0800 Subject: [PATCH 022/324] Fixed spacing to fit GG standards. Fixed tabs to 3 spaces. --- Engine/source/console/consoleFunctions.cpp | 374 ++++++++++----------- Engine/source/core/util/str.cpp | 192 +++++------ Engine/source/math/mConsoleFunctions.cpp | 18 +- 3 files changed, 292 insertions(+), 292 deletions(-) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 1d5403818e..4c12f2550d 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -53,129 +53,129 @@ static char scriptFilenameBuffer[1024]; bool isInt(const char* str) { - int len = dStrlen(str); - if(len <= 0) - return false; - - // Ingore whitespace - int start = 0; - for(int i = start; i < len; i++) - if(str[i] != ' ') - { - start = i; - break; - } - - for(int i = start; i < len; i++) - switch(str[i]) - { - case '+': case '-': - if(i != 0) - return false; - break; - case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': - break; - case ' ': // ignore whitespace - for(int j = i+1; j < len; j++) - if(str[j] != ' ') - return false; - return true; - break; - default: - return false; - } - return true; + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ignore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + for(int i = start; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(i != 0) + return false; + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; } bool isFloat(const char* str, bool sciOk = false) { - int len = dStrlen(str); - if(len <= 0) - return false; - - // Ingore whitespace - int start = 0; - for(int i = start; i < len; i++) - if(str[i] != ' ') - { - start = i; - break; - } - - bool seenDot = false; - int eLoc = -1; - for(int i = 0; i < len; i++) - switch(str[i]) - { - case '+': case '-': - if(sciOk) - { - //Haven't found e or scientific notation symbol - if(eLoc == -1) - { - //only allowed in beginning - if(i != 0) - return false; - } - else - { - //if not right after the e - if(i != (eLoc + 1)) - return false; - } - } - else - { - //only allowed in beginning - if(i != 0) - return false; - } - break; - case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': - break; - case 'e': case 'E': - if(!sciOk) - return false; - else - { - //already saw it so can't have 2 - if(eLoc != -1) - return false; - - eLoc = i; - } - break; - case '.': - if(seenDot | (sciOk && eLoc != -1)) - return false; - seenDot = true; - break; - case ' ': // ignore whitespace - for(int j = i+1; j < len; j++) - if(str[j] != ' ') - return false; - return true; - break; - default: - return false; - } - return true; + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ingore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + bool seenDot = false; + int eLoc = -1; + for(int i = 0; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(sciOk) + { + //Haven't found e or scientific notation symbol + if(eLoc == -1) + { + //only allowed in beginning + if(i != 0) + return false; + } + else + { + //if not right after the e + if(i != (eLoc + 1)) + return false; + } + } + else + { + //only allowed in beginning + if(i != 0) + return false; + } + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case 'e': case 'E': + if(!sciOk) + return false; + else + { + //already saw it so can't have 2 + if(eLoc != -1) + return false; + + eLoc = i; + } + break; + case '.': + if(seenDot | (sciOk && eLoc != -1)) + return false; + seenDot = true; + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; } bool isValidIP(const char* ip) { - unsigned b1, b2, b3, b4; - unsigned char c; - int rc = dSscanf(ip, "%3u.%3u.%3u.%3u%c", &b1, &b2, &b3, &b4, &c); - if (rc != 4 && rc != 5) return false; - if ((b1 | b2 | b3 | b4) > 255) return false; - if (dStrspn(ip, "0123456789.") < dStrlen(ip)) return false; - return true; + unsigned b1, b2, b3, b4; + unsigned char c; + int rc = dSscanf(ip, "%3u.%3u.%3u.%3u%c", &b1, &b2, &b3, &b4, &c); + if (rc != 4 && rc != 5) return false; + if ((b1 | b2 | b3 | b4) > 255) return false; + if (dStrspn(ip, "0123456789.") < dStrlen(ip)) return false; + return true; } bool isValidPort(U16 port) { - return (port >= 0 && port <=65535); + return (port >= 0 && port <=65535); } //============================================================================= @@ -380,29 +380,29 @@ DefineConsoleFunction( strlenskip, S32, ( const char* str, const char* first, co "@return The length of the given string skipping blocks of text between characters.\n" "@ingroup Strings" ) { - const UTF8* pos = str; - U32 size = 0; - U32 length = dStrlen(str); - bool count = true; + const UTF8* pos = str; + U32 size = 0; + U32 length = dStrlen(str); + bool count = true; - //loop through each character counting each character, skipping tags (anything with < followed by >) - for(U32 i = 0; i < length; i++, pos++) - { - if(count) - { - if(*pos == first[0]) - count = false; - else - size++; - } - else - { - if(*pos == last[0]) - count = true; - } - } + //loop through each character counting each character, skipping tags (anything with < followed by >) + for(U32 i = 0; i < length; i++, pos++) + { + if(count) + { + if(*pos == first[0]) + count = false; + else + size++; + } + else + { + if(*pos == last[0]) + count = true; + } + } - return S32(size); + return S32(size); } //----------------------------------------------------------------------------- @@ -831,9 +831,9 @@ DefineConsoleFunction( getFirstNumber, String, ( const char* str ),, "@param str The string from which to read out the first number.\n" "@return String representation of the number or "" if no number.\n\n") { - U32 start; - U32 end; - return String::GetFirstNumber(str, start, end); + U32 start; + U32 end; + return String::GetFirstNumber(str, start, end); } //---------------------------------------------------------------- @@ -1031,17 +1031,17 @@ DefineConsoleFunction( strToggleCaseToWords, const char*, ( const char* str ),, "@endtsexample\n" "@ingroup Strings" ) { - String newStr; - for(S32 i = 0; str[i]; i++) - { - //If capitol add a space - if(i != 0 && str[i] >= 65 && str[i] <= 90) - newStr += " "; + String newStr; + for(S32 i = 0; str[i]; i++) + { + //If capitol add a space + if(i != 0 && str[i] >= 65 && str[i] <= 90) + newStr += " "; - newStr += str[i]; - } + newStr += str[i]; + } - return Con::getReturnBuffer(newStr); + return Con::getReturnBuffer(newStr); } //---------------------------------------------------------------- @@ -1056,7 +1056,7 @@ DefineConsoleFunction( isInt, bool, ( const char* str),, "@endtsexample\n" "@ingroup Strings" ) { - return isInt(str); + return isInt(str); } //---------------------------------------------------------------- @@ -1071,7 +1071,7 @@ DefineConsoleFunction( isFloat, bool, ( const char* str, bool sciOk), (false), "@endtsexample\n" "@ingroup Strings" ) { - return isFloat(str, sciOk); + return isFloat(str, sciOk); } //---------------------------------------------------------------- @@ -1085,13 +1085,13 @@ DefineConsoleFunction( isValidPort, bool, ( const char* str),, "@endtsexample\n" "@ingroup Strings" ) { - if(isInt(str)) - { - U16 port = dAtous(str); - return isValidPort(port); - } - else - return false; + if(isInt(str)) + { + U16 port = dAtous(str); + return isValidPort(port); + } + else + return false; } //---------------------------------------------------------------- @@ -1105,12 +1105,12 @@ DefineConsoleFunction( isValidIP, bool, ( const char* str),, "@endtsexample\n" "@ingroup Strings" ) { - if(dStrcmp(str, "localhost") == 0) - { - return true; - } - else - return isValidIP(str); + if(dStrcmp(str, "localhost") == 0) + { + return true; + } + else + return isValidIP(str); } //---------------------------------------------------------------- @@ -1244,22 +1244,22 @@ DefineEngineFunction( monthNumToStr, String, ( S32 num, bool abbreviate ), (fals "@return month as a word given a number or \"\" if number is bad" "@ingroup FileSystem") { - switch(num) - { - case 1: return abbreviate ? "Jan" : "January"; break; - case 2: return abbreviate ? "Feb" : "February"; break; - case 3: return abbreviate ? "Mar" : "March"; break; - case 4: return abbreviate ? "Apr" : "April"; break; - case 5: return "May"; break; - case 6: return abbreviate ? "Jun" : "June"; break; - case 7: return abbreviate ? "Jul" : "July"; break; - case 8: return abbreviate ? "Aug" : "August"; break; - case 9: return abbreviate ? "Sep" : "September"; break; - case 10: return abbreviate ? "Oct" : "October"; break; - case 11: return abbreviate ? "Nov" : "November"; break; - case 12: return abbreviate ? "Dec" : "December"; break; - default: return ""; - } + switch(num) + { + case 1: return abbreviate ? "Jan" : "January"; break; + case 2: return abbreviate ? "Feb" : "February"; break; + case 3: return abbreviate ? "Mar" : "March"; break; + case 4: return abbreviate ? "Apr" : "April"; break; + case 5: return "May"; break; + case 6: return abbreviate ? "Jun" : "June"; break; + case 7: return abbreviate ? "Jul" : "July"; break; + case 8: return abbreviate ? "Aug" : "August"; break; + case 9: return abbreviate ? "Sep" : "September"; break; + case 10: return abbreviate ? "Oct" : "October"; break; + case 11: return abbreviate ? "Nov" : "November"; break; + case 12: return abbreviate ? "Dec" : "December"; break; + default: return ""; + } } DefineEngineFunction( weekdayNumToStr, String, ( S32 num, bool abbreviate ), (false), @@ -1267,17 +1267,17 @@ DefineEngineFunction( weekdayNumToStr, String, ( S32 num, bool abbreviate ), (fa "@return weekday as a word given a number or \"\" if number is bad" "@ingroup FileSystem") { - switch(num) - { - case 0: return abbreviate ? "Sun" : "Sunday"; break; - case 1: return abbreviate ? "Mon" : "Monday"; break; - case 2: return abbreviate ? "Tue" : "Tuesday"; break; - case 3: return abbreviate ? "Wed" : "Wednesday"; break; - case 4: return abbreviate ? "Thu" : "Thursday"; break; - case 5: return abbreviate ? "Fri" : "Friday"; break; - case 6: return abbreviate ? "Sat" : "Saturday"; break; - default: return ""; - } + switch(num) + { + case 0: return abbreviate ? "Sun" : "Sunday"; break; + case 1: return abbreviate ? "Mon" : "Monday"; break; + case 2: return abbreviate ? "Tue" : "Tuesday"; break; + case 3: return abbreviate ? "Wed" : "Wednesday"; break; + case 4: return abbreviate ? "Thu" : "Thursday"; break; + case 5: return abbreviate ? "Fri" : "Friday"; break; + case 6: return abbreviate ? "Sat" : "Saturday"; break; + default: return ""; + } } //----------------------------------------------------------------------------- @@ -3071,5 +3071,5 @@ DefineEngineFunction( getMaxDynamicVerts, S32, (),, "Get max number of allowable dynamic vertices in a single vertex buffer.\n\n" "@return the max number of allowable dynamic vertices in a single vertex buffer" ) { - return MAX_DYNAMIC_VERTS / 2; + return MAX_DYNAMIC_VERTS / 2; } \ No newline at end of file diff --git a/Engine/source/core/util/str.cpp b/Engine/source/core/util/str.cpp index 59fd0ab46f..f97aa08fa7 100644 --- a/Engine/source/core/util/str.cpp +++ b/Engine/source/core/util/str.cpp @@ -1627,100 +1627,100 @@ String String::GetTrailingNumber(const char* str, S32& number) String String::GetFirstNumber(const char* str, U32& startPos, U32& endPos) { - // Check for trivial strings - if (!str || !str[0]) - return String::EmptyString; - - // Find the number at the end of the string - String base(str); - const char* p = base.c_str(); - const char* end = base.c_str() + base.length() - 1; - bool dec = false; - startPos = 0; - - //Check if we are just a digit - if(p == end && isdigit(*p)) - return base; - - //Look for the first digit - while ((p != end) && (dIsspace(*p) || !isdigit(*p))) - { - p++; - startPos++; - } - - //Handle if we are at the end and found nothing - if(p == end && !isdigit(*p)) - return ""; - - //update our end position at least to the start of our number - endPos = startPos; - - //Backup our ptr - const char* backup = p; - - //Check for any negative or decimal values - if(startPos > 0) - { - p--; - startPos--; - if(*p == '.') - { - dec = true; - - //ignore any duplicate periods - while ((p != base.c_str()) && (*p == '.')) - { - p--; - startPos--; - } - - //Found a decimal lets still check for negative sign - if(startPos > 0) - { - p--; - startPos--; - if((*p != '-') && (*p != '_')) - { - startPos++; - p++; - } - } - } - else if((*p != '-') && (*p != '_')) - { - //go back to where we where cause no decimal or negative sign found - startPos++; - p++; - } - } - - //Restore where we were - p = backup; - - //look for the end of the digits - bool justFoundDec = false; - while (p != end) - { - if(*p == '.') - { - if(dec && !justFoundDec) - break; - else - { - dec = true; - justFoundDec = true; - } - } - else if(!isdigit(*p)) - break; - else if(justFoundDec) - justFoundDec = false; - - p++; - endPos++; - } - - U32 len = (!isdigit(*p)) ? endPos - startPos : (endPos + 1) - startPos; - return base.substr(startPos, len); + // Check for trivial strings + if (!str || !str[0]) + return String::EmptyString; + + // Find the number at the end of the string + String base(str); + const char* p = base.c_str(); + const char* end = base.c_str() + base.length() - 1; + bool dec = false; + startPos = 0; + + //Check if we are just a digit + if(p == end && isdigit(*p)) + return base; + + //Look for the first digit + while ((p != end) && (dIsspace(*p) || !isdigit(*p))) + { + p++; + startPos++; + } + + //Handle if we are at the end and found nothing + if(p == end && !isdigit(*p)) + return ""; + + //update our end position at least to the start of our number + endPos = startPos; + + //Backup our ptr + const char* backup = p; + + //Check for any negative or decimal values + if(startPos > 0) + { + p--; + startPos--; + if(*p == '.') + { + dec = true; + + //ignore any duplicate periods + while ((p != base.c_str()) && (*p == '.')) + { + p--; + startPos--; + } + + //Found a decimal lets still check for negative sign + if(startPos > 0) + { + p--; + startPos--; + if((*p != '-') && (*p != '_')) + { + startPos++; + p++; + } + } + } + else if((*p != '-') && (*p != '_')) + { + //go back to where we where cause no decimal or negative sign found + startPos++; + p++; + } + } + + //Restore where we were + p = backup; + + //look for the end of the digits + bool justFoundDec = false; + while (p != end) + { + if(*p == '.') + { + if(dec && !justFoundDec) + break; + else + { + dec = true; + justFoundDec = true; + } + } + else if(!isdigit(*p)) + break; + else if(justFoundDec) + justFoundDec = false; + + p++; + endPos++; + } + + U32 len = (!isdigit(*p)) ? endPos - startPos : (endPos + 1) - startPos; + return base.substr(startPos, len); } diff --git a/Engine/source/math/mConsoleFunctions.cpp b/Engine/source/math/mConsoleFunctions.cpp index f9b352c288..679dad3e2e 100644 --- a/Engine/source/math/mConsoleFunctions.cpp +++ b/Engine/source/math/mConsoleFunctions.cpp @@ -96,16 +96,16 @@ DefineConsoleFunction( mFloor, S32, ( F32 v ),, DefineConsoleFunction( mRound, F32, ( F32 v, S32 n ), (0), - "Round v to the nth decimal place or the nearest whole number by default." - "@param v Value to round\n" - "@param n Number of decimal places to round to, 0 by default\n" - "@return The rounded value as a S32." - "@ingroup Math" ) + "Round v to the nth decimal place or the nearest whole number by default." + "@param v Value to round\n" + "@param n Number of decimal places to round to, 0 by default\n" + "@return The rounded value as a S32." + "@ingroup Math" ) { - if(n <= 0) - return mRound(v); - else - return mRound(v, n); + if(n <= 0) + return mRound(v); + else + return mRound(v, n); } DefineConsoleFunction( mCeil, S32, ( F32 v ),, From 2e7018bf681e8c5733cab28cac11f7e2de16e703 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Wed, 11 Feb 2015 10:55:30 -0800 Subject: [PATCH 023/324] Added type conversions to fix compile errors Added two type conversions that were missing in order to fix some compile errors. --- Engine/source/core/strings/stringFunctions.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Engine/source/core/strings/stringFunctions.h b/Engine/source/core/strings/stringFunctions.h index 0c11d73ed1..89601319a8 100644 --- a/Engine/source/core/strings/stringFunctions.h +++ b/Engine/source/core/strings/stringFunctions.h @@ -150,11 +150,20 @@ inline U32 dAtoui(const char *str, U32 base = 10) return strtoul(str, NULL, base); } +inline U16 dAtous(const char *str, U32 base = 10) +{ + return strtoul(str, NULL, base); +} + inline F32 dAtof(const char *str) { return strtof(str, NULL); } +inline F64 dAtod(const char *str) +{ + return strtod(str, NULL); +} inline char dToupper(const char c) { From 0915a642a5f96d6076047aa7e2243ea9a4bccb5f Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 12 Feb 2015 12:07:55 -0800 Subject: [PATCH 024/324] Optimized file reading to buffer Optimized the code that reads the file to the buffer as suggested by @jamesu --- Engine/source/app/net/tcpObject.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Engine/source/app/net/tcpObject.cpp b/Engine/source/app/net/tcpObject.cpp index 28e91ba45c..ac21cd43b7 100644 --- a/Engine/source/app/net/tcpObject.cpp +++ b/Engine/source/app/net/tcpObject.cpp @@ -416,11 +416,7 @@ bool TCPObject::sendFile(const char* fileName) //Read each byte into our buffer Vector buffer(readFile.getStreamSize()); - U8 byte; - while(readFile.read(&byte)) - { - buffer.push_back(byte); - } + readFile.read(buffer.size(), &buffer); //Send the buffer send(buffer.address(), buffer.size()); From 1d20f6d26a1fe7f438e0f3540e35b083b843e25b Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 12 Feb 2015 12:18:34 -0800 Subject: [PATCH 025/324] Fixed spacing issues Changed spacing from tabs to 3 spaces. --- Engine/source/app/net/tcpObject.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Engine/source/app/net/tcpObject.cpp b/Engine/source/app/net/tcpObject.cpp index ac21cd43b7..d1f127924c 100644 --- a/Engine/source/app/net/tcpObject.cpp +++ b/Engine/source/app/net/tcpObject.cpp @@ -407,21 +407,21 @@ void TCPObject::send(const U8 *buffer, U32 len) bool TCPObject::sendFile(const char* fileName) { - //Open the file for reading - FileStream readFile; - if(!readFile.open(fileName, Torque::FS::File::Read)) - { - return false; - } + //Open the file for reading + FileStream readFile; + if(!readFile.open(fileName, Torque::FS::File::Read)) + { + return false; + } - //Read each byte into our buffer - Vector buffer(readFile.getStreamSize()); - readFile.read(buffer.size(), &buffer); + //Read each byte into our buffer + Vector buffer(readFile.getStreamSize()); + readFile.read(buffer.size(), &buffer); - //Send the buffer - send(buffer.address(), buffer.size()); + //Send the buffer + send(buffer.address(), buffer.size()); - return true; + return true; } DefineEngineMethod(TCPObject, send, void, (const char *data),, @@ -450,13 +450,13 @@ DefineEngineMethod(TCPObject, sendFile, bool, (const char *fileName),, "@param fileName The filename of the file to transfer.\n") { - return object->sendFile(fileName); + return object->sendFile(fileName); } DefineEngineMethod(TCPObject, finishLastLine, void, (),, "@brief Eat the rest of the lines.\n") { - object->finishLastLine(); + object->finishLastLine(); } DefineEngineMethod(TCPObject, listen, void, (U32 port),, From 69b1c0072cb7a492f20123be4139733b6ab4c668 Mon Sep 17 00:00:00 2001 From: Nathan Bowhay Date: Thu, 12 Feb 2015 12:19:56 -0800 Subject: [PATCH 026/324] Allowed for WebSocket reading Allowed for WebSocket reading in script. --- Engine/source/app/net/tcpObject.cpp | 47 ++++++++++++++++++++++++++++- Engine/source/app/net/tcpObject.h | 5 ++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/Engine/source/app/net/tcpObject.cpp b/Engine/source/app/net/tcpObject.cpp index d1f127924c..06f3205767 100644 --- a/Engine/source/app/net/tcpObject.cpp +++ b/Engine/source/app/net/tcpObject.cpp @@ -139,6 +139,11 @@ IMPLEMENT_CALLBACK(TCPObject, onLine, void, (const char* line), (line), "@param line Data sent from the server.\n" ); +IMPLEMENT_CALLBACK(TCPObject, onPacket, bool, (const char* data), (data), + "@brief Called when we get a packet with no newlines or nulls (probably websocket).\n\n" + "@param data Data sent from the server.\n" + "@return true if script handled the packet.\n" + ); IMPLEMENT_CALLBACK(TCPObject, onEndReceive, void, (), (), "@brief Called when we are done reading all lines.\n\n" ); @@ -360,7 +365,7 @@ void TCPObject::onConnectFailed() onConnectFailed_callback(); } -void TCPObject::finishLastLine() +bool TCPObject::finishLastLine() { if(mBufferSize) { @@ -369,6 +374,25 @@ void TCPObject::finishLastLine() dFree(mBuffer); mBuffer = 0; mBufferSize = 0; + + return true; + } + + return false; +} + +bool TCPObject::isBufferEmpty() +{ + return (mBufferSize <= 0); +} + +void TCPObject::emptyBuffer() +{ + if(mBufferSize) + { + dFree(mBuffer); + mBuffer = 0; + mBufferSize = 0; } } @@ -538,6 +562,27 @@ void processConnectedReceiveEvent(NetSocket sock, RawData incomingData) buffer += ret; } + //If our buffer now has something in it then it's probably a web socket packet and lets handle it + if(!tcpo->isBufferEmpty()) + { + //Copy all the data into a string (may be a quicker way of doing this) + U8 *data = (U8*)incomingData.data; + String temp; + for(S32 i = 0; i < incomingData.size; i++) + { + temp += data[i]; + } + + //Send the packet to script + bool handled = tcpo->onPacket_callback(temp); + + //If the script did something with it, clear the buffer + if(handled) + { + tcpo->emptyBuffer(); + } + } + tcpo->onEndReceive_callback(); } diff --git a/Engine/source/app/net/tcpObject.h b/Engine/source/app/net/tcpObject.h index 39b9464bac..9a8b5e40da 100644 --- a/Engine/source/app/net/tcpObject.h +++ b/Engine/source/app/net/tcpObject.h @@ -36,6 +36,7 @@ class TCPObject : public SimObject DECLARE_CALLBACK(void, onConnectionRequest, (const char* address, const char* ID)); DECLARE_CALLBACK(void, onLine, (const char* line)); + DECLARE_CALLBACK(bool, onPacket, (const char* data)); DECLARE_CALLBACK(void, onEndReceive, ()); DECLARE_CALLBACK(void, onDNSResolved,()); DECLARE_CALLBACK(void, onDNSFailed, ()); @@ -61,7 +62,9 @@ class TCPObject : public SimObject virtual ~TCPObject(); void parseLine(U8 *buffer, U32 *start, U32 bufferLen); - void finishLastLine(); + bool finishLastLine(); + bool isBufferEmpty(); + void emptyBuffer(); static TCPObject *find(NetSocket tag); From cd686a23b3b39c18552c933f76bc6587fc5ce2f3 Mon Sep 17 00:00:00 2001 From: Miodrag Sejic Date: Sat, 28 Feb 2015 21:28:10 +0100 Subject: [PATCH 027/324] +proper buffer size for udp socket MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SkypeLog: 28.02.2015 [17:18:32] DuÅ¡an Jocic: when creating user datagram protocol or UDP, old implementation was limiting lan utalization to 1% of our modern 1000Mbps hardwar [17:19:15] DuÅ¡an Jocic: that add proper buffer size for udp socket [17:19:43] DuÅ¡an Jocic: and lift off limitation what was present there for 10/100 mbps lan --- Engine/source/platform/platformNet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/platform/platformNet.cpp b/Engine/source/platform/platformNet.cpp index acc4e99050..5f7adb8565 100644 --- a/Engine/source/platform/platformNet.cpp +++ b/Engine/source/platform/platformNet.cpp @@ -503,7 +503,7 @@ bool Net::openPort(S32 port, bool doBind) } if(error == NoError) - error = setBufferSize(udpSocket, 32768); + error = setBufferSize(udpSocket, 32768*8); if(error == NoError && !useVDP) error = setBroadcast(udpSocket, true); From 6e8fa7215a5376b4e958acabdf2aa8a1dfee9674 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 6 Jun 2015 17:40:49 -0500 Subject: [PATCH 028/324] Moves from using dStrIsEmpty to the new String::isEmpty static function. Keeps things cleaner, consistent, and works with intellisense. --- Engine/source/T3D/lightBase.cpp | 2 +- Engine/source/console/consoleFunctions.cpp | 10 +++++----- Engine/source/console/fieldBrushObject.cpp | 2 +- .../environment/editors/guiMeshRoadEditorCtrl.cpp | 2 +- Engine/source/gui/core/guiControl.cpp | 4 ++-- Engine/source/gui/worldEditor/terrainEditor.cpp | 4 ++-- Engine/source/sfx/sfxSystem.cpp | 14 +++++++------- Engine/source/terrain/terrData.cpp | 12 ++++++------ Engine/source/ts/collada/colladaLights.cpp | 4 ++-- Engine/source/util/settings.cpp | 2 +- Engine/source/util/undo.cpp | 2 +- 11 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Engine/source/T3D/lightBase.cpp b/Engine/source/T3D/lightBase.cpp index dd168a4835..a374e12dfd 100644 --- a/Engine/source/T3D/lightBase.cpp +++ b/Engine/source/T3D/lightBase.cpp @@ -431,7 +431,7 @@ DefineConsoleMethod( LightBase, playAnimation, void, (const char * anim), (""), "existing one is played." "@hide") { - if ( dStrIsEmpty(anim) ) + if ( String::isEmpty(anim) ) { object->playAnimation(); return; diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index a5ea49f335..cc85a86c0c 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -2269,7 +2269,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa "@endtsexample\n\n" "@ingroup Scripting") { - if(dStrIsEmpty(varName)) + if(String::isEmpty(varName)) { Con::errorf("isDefined() - did you forget to put quotes around the variable name?"); return false; @@ -2345,7 +2345,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa { if (dStrlen(value) > 0) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { obj->setDataField(valName, 0, varValue); } @@ -2362,7 +2362,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa if (ent) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { gEvalState.getCurrentFrame().setVariable(name, varValue); } @@ -2377,7 +2377,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa if (ent) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { gEvalState.globalVars.setVariable(name, varValue); } @@ -2387,7 +2387,7 @@ DefineConsoleFunction( isDefined, bool, ( const char* varName, const char* varVa // Is it an object? if (dStrcmp(varName, "0") && dStrcmp(varName, "") && (Sim::findObject(varName) != NULL)) return true; - else if (!dStrIsEmpty(varValue)) + else if (!String::isEmpty(varValue)) { Con::errorf("%s() - can't assign a value to a variable of the form \"%s\"", __FUNCTION__, varValue); } diff --git a/Engine/source/console/fieldBrushObject.cpp b/Engine/source/console/fieldBrushObject.cpp index 3b6f38b25d..d0eaf541c5 100644 --- a/Engine/source/console/fieldBrushObject.cpp +++ b/Engine/source/console/fieldBrushObject.cpp @@ -216,7 +216,7 @@ DefineConsoleMethod(FieldBrushObject, queryFields, const char*, (const char* sim const AbstractClassRep::FieldList& staticFields = pSimObject->getFieldList(); // Did we specify a groups list? - if ( dStrIsEmpty(groupList) ) + if ( String::isEmpty(groupList) ) { // No, so return all fields... diff --git a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp index 10fdbe115b..70bc7df851 100644 --- a/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp +++ b/Engine/source/environment/editors/guiMeshRoadEditorCtrl.cpp @@ -1248,7 +1248,7 @@ DefineConsoleMethod( GuiMeshRoadEditorCtrl, setNodeNormal, void, (Point3F normal DefineConsoleMethod( GuiMeshRoadEditorCtrl, setSelectedRoad, void, (const char * objName), (""), "" ) { - if ( dStrIsEmpty(objName) ) + if ( String::isEmpty(objName) ) object->setSelectedRoad(NULL); else { diff --git a/Engine/source/gui/core/guiControl.cpp b/Engine/source/gui/core/guiControl.cpp index a17e701f38..75a783e77e 100644 --- a/Engine/source/gui/core/guiControl.cpp +++ b/Engine/source/gui/core/guiControl.cpp @@ -2820,9 +2820,9 @@ DefineConsoleMethod( GuiControl, setExtent, void, ( const char* extOrX, const ch "@hide" ) { Point2I extent; - if(!dStrIsEmpty(extOrX) && dStrIsEmpty(y)) + if(!String::isEmpty(extOrX) && String::isEmpty(y)) dSscanf(extOrX, "%d %d", &extent.x, &extent.y); - else if(!dStrIsEmpty(extOrX) && !dStrIsEmpty(y)) + else if(!String::isEmpty(extOrX) && !String::isEmpty(y)) { extent.x = dAtoi(extOrX); extent.y = dAtoi(y); diff --git a/Engine/source/gui/worldEditor/terrainEditor.cpp b/Engine/source/gui/worldEditor/terrainEditor.cpp index 8a2c421063..9ebcf3b14c 100644 --- a/Engine/source/gui/worldEditor/terrainEditor.cpp +++ b/Engine/source/gui/worldEditor/terrainEditor.cpp @@ -2762,9 +2762,9 @@ DefineConsoleMethod(TerrainEditor, getTerrainUnderWorldPoint, S32, (const char * if(tEditor == NULL) return 0; Point3F pos; - if(!dStrIsEmpty(ptOrX) && dStrIsEmpty(Y) && dStrIsEmpty(Z)) + if(!String::isEmpty(ptOrX) && String::isEmpty(Y) && String::isEmpty(Z)) dSscanf(ptOrX, "%f %f %f", &pos.x, &pos.y, &pos.z); - else if(!dStrIsEmpty(ptOrX) && !dStrIsEmpty(Y) && !dStrIsEmpty(Z)) + else if(!String::isEmpty(ptOrX) && !String::isEmpty(Y) && !String::isEmpty(Z)) { pos.x = dAtof(ptOrX); pos.y = dAtof(Y); diff --git a/Engine/source/sfx/sfxSystem.cpp b/Engine/source/sfx/sfxSystem.cpp index 502e167335..fafa8bfa0e 100644 --- a/Engine/source/sfx/sfxSystem.cpp +++ b/Engine/source/sfx/sfxSystem.cpp @@ -1467,7 +1467,7 @@ DefineConsoleFunction( sfxCreateSource, S32, ( const char * sfxType, const char if ( track ) { // In this overloaded use of the function, arg0..arg2 are x, y, and z. - if ( dStrIsEmpty(arg0) ) + if ( String::isEmpty(arg0) ) { source = SFX->createSource( track ); } @@ -1489,7 +1489,7 @@ DefineConsoleFunction( sfxCreateSource, S32, ( const char * sfxType, const char } else { - if ( dStrIsEmpty(arg1) ) + if ( String::isEmpty(arg1) ) { source = SFX->createSource( tempProfile ); } @@ -1552,7 +1552,7 @@ DefineConsoleFunction( sfxPlay, S32, ( const char * trackName, const char * poin "Start playing the given source or create a new source for the given track and play it.\n" "@hide" ) { - if ( dStrIsEmpty(pointOrX) ) + if ( String::isEmpty(pointOrX) ) { SFXSource* source = dynamic_cast( Sim::findObject( trackName ) ); if ( source ) @@ -1570,11 +1570,11 @@ DefineConsoleFunction( sfxPlay, S32, ( const char * trackName, const char * poin } Point3F pos(0.f, 0.f, 0.f); - if ( !dStrIsEmpty( pointOrX ) && dStrIsEmpty( y ) && dStrIsEmpty( z ) ) + if ( !String::isEmpty( pointOrX ) && String::isEmpty( y ) && String::isEmpty( z ) ) { dSscanf( pointOrX, "%g %g %g", &pos.x, &pos.y, &pos.z ); } - else if( !dStrIsEmpty( pointOrX ) && !dStrIsEmpty( y ) && !dStrIsEmpty( z ) ) + else if( !String::isEmpty( pointOrX ) && !String::isEmpty( y ) && !String::isEmpty( z ) ) pos.set( dAtof(pointOrX), dAtof(y), dAtof(z) ); MatrixF transform; @@ -1679,7 +1679,7 @@ DefineConsoleFunction( sfxPlayOnce, S32, ( const char * sfxType, const char * ar if( track ) { // In this overloaded use, arg0..arg2 are x, y, z, and arg3 is the fadeInTime. - if (dStrIsEmpty(arg0)) + if (String::isEmpty(arg0)) { source = SFX->playOnce( track ); } @@ -1701,7 +1701,7 @@ DefineConsoleFunction( sfxPlayOnce, S32, ( const char * sfxType, const char * ar } else { - if (dStrIsEmpty(arg1)) + if (String::isEmpty(arg1)) source = SFX->playOnce( tempProfile ); else { diff --git a/Engine/source/terrain/terrData.cpp b/Engine/source/terrain/terrData.cpp index f33e32340f..f67e78c62d 100644 --- a/Engine/source/terrain/terrData.cpp +++ b/Engine/source/terrain/terrData.cpp @@ -150,9 +150,9 @@ DefineConsoleFunction( getTerrainUnderWorldPoint, S32, (const char* ptOrX, const "@hide") { Point3F pos; - if(!dStrIsEmpty(ptOrX) && dStrIsEmpty(y) && dStrIsEmpty(z)) + if(!String::isEmpty(ptOrX) && String::isEmpty(y) && String::isEmpty(z)) dSscanf(ptOrX, "%f %f %f", &pos.x, &pos.y, &pos.z); - else if(!dStrIsEmpty(ptOrX) && !dStrIsEmpty(y) && !dStrIsEmpty(z)) + else if(!String::isEmpty(ptOrX) && !String::isEmpty(y) && !String::isEmpty(z)) { pos.x = dAtof(ptOrX); pos.y = dAtof(y); @@ -1327,9 +1327,9 @@ DefineConsoleFunction( getTerrainHeight, F32, (const char* ptOrX, const char* y) F32 height = 0.0f; Point2F pos; - if(!dStrIsEmpty(ptOrX) && dStrIsEmpty(y)) + if(!String::isEmpty(ptOrX) && String::isEmpty(y)) dSscanf(ptOrX, "%f %f", &pos.x, &pos.y); - else if(!dStrIsEmpty(ptOrX) && !dStrIsEmpty(y)) + else if(!String::isEmpty(ptOrX) && !String::isEmpty(y)) { pos.x = dAtof(ptOrX); pos.y = dAtof(y); @@ -1374,9 +1374,9 @@ DefineConsoleFunction( getTerrainHeightBelowPosition, F32, (const char* ptOrX, c F32 height = 0.0f; Point3F pos; - if(!dStrIsEmpty(ptOrX) && dStrIsEmpty(y) && dStrIsEmpty(z)) + if(!String::isEmpty(ptOrX) && String::isEmpty(y) && String::isEmpty(z)) dSscanf(ptOrX, "%f %f %f", &pos.x, &pos.y, &pos.z); - else if(!dStrIsEmpty(ptOrX) && !dStrIsEmpty(y) && !dStrIsEmpty(z)) + else if(!String::isEmpty(ptOrX) && !String::isEmpty(y) && !String::isEmpty(z)) { pos.x = dAtof(ptOrX); pos.y = dAtof(y); diff --git a/Engine/source/ts/collada/colladaLights.cpp b/Engine/source/ts/collada/colladaLights.cpp index bed659285c..390ad6ee72 100644 --- a/Engine/source/ts/collada/colladaLights.cpp +++ b/Engine/source/ts/collada/colladaLights.cpp @@ -168,7 +168,7 @@ DefineConsoleFunction( loadColladaLights, bool, (const char * filename, const ch // the MissionGroup if not specified. SimGroup* missionGroup = dynamic_cast(Sim::findObject("MissionGroup")); SimGroup* group = 0; - if (!dStrIsEmpty(parentGroup)){ + if (!String::isEmpty(parentGroup)){ if (!Sim::findObject(parentGroup, group)) { // Create the group if it could not be found group = new SimGroup; @@ -187,7 +187,7 @@ DefineConsoleFunction( loadColladaLights, bool, (const char * filename, const ch // Optional object to provide the base transform MatrixF offset(true); - if (!dStrIsEmpty(baseObject)){ + if (!String::isEmpty(baseObject)){ SceneObject *obj; if (Sim::findObject(baseObject, obj)) offset = obj->getTransform(); diff --git a/Engine/source/util/settings.cpp b/Engine/source/util/settings.cpp index 1b0ddfea64..b57b77bb4f 100644 --- a/Engine/source/util/settings.cpp +++ b/Engine/source/util/settings.cpp @@ -648,7 +648,7 @@ DefineConsoleMethod(Settings, setValue, void, (const char * settingName, const c { StringTableEntry fieldName = StringTable->insert( settingName ); - if (!dStrIsEmpty(value)) + if (!String::isEmpty(value)) object->setValue( fieldName, value ); else object->setValue( fieldName ); diff --git a/Engine/source/util/undo.cpp b/Engine/source/util/undo.cpp index 140eda541e..fd23033fa4 100644 --- a/Engine/source/util/undo.cpp +++ b/Engine/source/util/undo.cpp @@ -504,7 +504,7 @@ void UndoManager::popCompound( bool discard ) DefineConsoleMethod(UndoAction, addToManager, void, (const char * undoManager), (""), "action.addToManager([undoManager])") { UndoManager *theMan = NULL; - if (!dStrIsEmpty(undoManager)) + if (!String::isEmpty(undoManager)) { SimObject *obj = Sim::findObject(undoManager); if(obj) From 6b0c6ae8ac79b4841c24f00c6066d04c61e4dda8 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 24 Jun 2015 14:26:23 -0500 Subject: [PATCH 029/324] adds 3 new horizontal relative gui entries for dealing with swapping elements between 4:3 and 16:9 aspect ratios. "relativeToYL" maintains the initial aspect ratio, keeping the leftmost edge the same, "relativeToYR" also shifts it so the right hand side is shifted over so that edge would match, and "relativeToYC" takes/adds space from both sides --- Engine/source/gui/core/guiControl.cpp | 33 +++++++++++++++++++++++++++ Engine/source/gui/core/guiControl.h | 3 +++ 2 files changed, 36 insertions(+) diff --git a/Engine/source/gui/core/guiControl.cpp b/Engine/source/gui/core/guiControl.cpp index a17e701f38..14a10c5174 100644 --- a/Engine/source/gui/core/guiControl.cpp +++ b/Engine/source/gui/core/guiControl.cpp @@ -175,6 +175,9 @@ ImplementEnumType( GuiHorizontalSizing, { GuiControl::horizResizeLeft, "left" }, { GuiControl::horizResizeCenter, "center" }, { GuiControl::horizResizeRelative, "relative" }, + { GuiControl::horizResizeRelativeToYL, "relativeToYL" }, + { GuiControl::horizResizeRelativeToYR, "relativeToYR" }, + { GuiControl::horizResizeRelativeToYC, "relativeToYC" }, { GuiControl::horizResizeWindowRelative, "windowRelative" } EndImplementEnumType; @@ -1366,6 +1369,36 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen newPosition.x = newLeft; newExtent.x = newWidth; } + else if (mHorizSizing == horizResizeRelativeToYL && oldParentRect.extent.x != 0) + { + S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + + newPosition.x = newLeft; + newExtent.x = newWidth; + } + else if (mHorizSizing == horizResizeRelativeToYR && oldParentRect.extent.x != 0) + { + S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width + S32 rWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //parent aspect ratio relative width + + S32 offset = rWidth - newWidth; // account for change in relative width + newLeft += offset; + newPosition.x = newLeft; + newExtent.x = newWidth; + } + else if (mHorizSizing == horizResizeRelativeToYC && oldParentRect.extent.x != 0) + { + S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width + S32 rWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //parent aspect ratio relative width + + S32 offset = rWidth - newWidth; // account for change in relative width + newLeft += offset/2; + newPosition.x = newLeft; + newExtent.x = newWidth; + } if (mVertSizing == vertResizeCenter) newPosition.y = (newParentRect.extent.y - getHeight()) >> 1; diff --git a/Engine/source/gui/core/guiControl.h b/Engine/source/gui/core/guiControl.h index 4240fbad69..fd538c65fe 100644 --- a/Engine/source/gui/core/guiControl.h +++ b/Engine/source/gui/core/guiControl.h @@ -121,6 +121,9 @@ class GuiControl : public SimGroup horizResizeLeft, ///< fixed on the right and width horizResizeCenter, horizResizeRelative, ///< resize relative + horizResizeRelativeToYL, ///< resize relative to hieght delta (offset Left) + horizResizeRelativeToYR, ///< resize relative to hieght delta (offset Right) + horizResizeRelativeToYC, ///< resize relative to hieght delta (offset Right) horizResizeWindowRelative ///< resize window relative }; enum vertSizingOptions From 138d34e31cc54a41f4fefae39cbc773365ba982d Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 24 Jun 2015 17:18:36 -0500 Subject: [PATCH 030/324] renames for clarity: relativeToYL changed to aspectLeft ect. also by request, vertsizing options for down the line when mobile is supported.. --- Engine/source/gui/core/guiControl.cpp | 45 +++++++++++++++++++++++---- Engine/source/gui/core/guiControl.h | 9 ++++-- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/Engine/source/gui/core/guiControl.cpp b/Engine/source/gui/core/guiControl.cpp index 14a10c5174..222560f75f 100644 --- a/Engine/source/gui/core/guiControl.cpp +++ b/Engine/source/gui/core/guiControl.cpp @@ -175,9 +175,9 @@ ImplementEnumType( GuiHorizontalSizing, { GuiControl::horizResizeLeft, "left" }, { GuiControl::horizResizeCenter, "center" }, { GuiControl::horizResizeRelative, "relative" }, - { GuiControl::horizResizeRelativeToYL, "relativeToYL" }, - { GuiControl::horizResizeRelativeToYR, "relativeToYR" }, - { GuiControl::horizResizeRelativeToYC, "relativeToYC" }, + { GuiControl::horizResizeAspectLeft, "aspectLeft" }, + { GuiControl::horizResizeAspectRight, "aspectRight" }, + { GuiControl::horizResizeAspectCenter, "aspectCenter" }, { GuiControl::horizResizeWindowRelative, "windowRelative" } EndImplementEnumType; @@ -189,6 +189,9 @@ ImplementEnumType( GuiVerticalSizing, { GuiControl::vertResizeTop, "top" }, { GuiControl::vertResizeCenter, "center" }, { GuiControl::vertResizeRelative, "relative" }, + { GuiControl::vertResizeAspectTop, "aspectTop" }, + { GuiControl::vertResizeAspectBottom, "aspectBottom" }, + { GuiControl::vertResizeAspectCenter, "aspectCenter" }, { GuiControl::vertResizeWindowRelative, "windowRelative" } EndImplementEnumType; @@ -1369,7 +1372,7 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen newPosition.x = newLeft; newExtent.x = newWidth; } - else if (mHorizSizing == horizResizeRelativeToYL && oldParentRect.extent.x != 0) + else if (mHorizSizing == horizResizeAspectLeft && oldParentRect.extent.x != 0) { S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); @@ -1377,7 +1380,7 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen newPosition.x = newLeft; newExtent.x = newWidth; } - else if (mHorizSizing == horizResizeRelativeToYR && oldParentRect.extent.x != 0) + else if (mHorizSizing == horizResizeAspectRight && oldParentRect.extent.x != 0) { S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width @@ -1388,7 +1391,7 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen newPosition.x = newLeft; newExtent.x = newWidth; } - else if (mHorizSizing == horizResizeRelativeToYC && oldParentRect.extent.x != 0) + else if (mHorizSizing == horizResizeAspectCenter && oldParentRect.extent.x != 0) { S32 newLeft = mRoundToNearest((F32(newPosition.x) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); S32 newWidth = mRoundToNearest((F32(newExtent.x) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //origional aspect ratio corrected width @@ -1414,6 +1417,36 @@ void GuiControl::parentResized(const RectI &oldParentRect, const RectI &newParen newPosition.y = newTop; newExtent.y = newHeight; } + else if (mVertSizing == vertResizeAspectTop && oldParentRect.extent.y != 0) + { + S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); + + newPosition.y = newTop; + newExtent.y = newHeight; + } + else if (mVertSizing == vertResizeAspectBottom && oldParentRect.extent.y != 0) + { + S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //origional aspect ratio corrected hieght + S32 rHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //parent aspect ratio relative hieght + + S32 offset = rHeight - newHeight; // account for change in relative hieght + newTop += offset; + newPosition.y = newTop; + newExtent.y = newHeight; + } + else if (mVertSizing == vertResizeAspectCenter && oldParentRect.extent.y != 0) + { + S32 newTop = mRoundToNearest((F32(newPosition.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); + S32 newHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.x)) * F32(newParentRect.extent.x)); //origional aspect ratio corrected hieght + S32 rHeight = mRoundToNearest((F32(newExtent.y) / F32(oldParentRect.extent.y)) * F32(newParentRect.extent.y)); //parent aspect ratio relative hieght + + S32 offset = rHeight - newHeight; // account for change in relative hieght + newTop += offset / 2; + newPosition.y = newTop; + newExtent.y = newHeight; + } // Resizing Re factor [9/18/2006] // Only resize if our minExtent is satisfied with it. diff --git a/Engine/source/gui/core/guiControl.h b/Engine/source/gui/core/guiControl.h index fd538c65fe..dc2653ff93 100644 --- a/Engine/source/gui/core/guiControl.h +++ b/Engine/source/gui/core/guiControl.h @@ -121,9 +121,9 @@ class GuiControl : public SimGroup horizResizeLeft, ///< fixed on the right and width horizResizeCenter, horizResizeRelative, ///< resize relative - horizResizeRelativeToYL, ///< resize relative to hieght delta (offset Left) - horizResizeRelativeToYR, ///< resize relative to hieght delta (offset Right) - horizResizeRelativeToYC, ///< resize relative to hieght delta (offset Right) + horizResizeAspectLeft, ///< resize relative to hieght delta (offset Left) + horizResizeAspectRight, ///< resize relative to hieght delta (offset Right) + horizResizeAspectCenter, ///< resize relative to hieght delta (Centered) horizResizeWindowRelative ///< resize window relative }; enum vertSizingOptions @@ -133,6 +133,9 @@ class GuiControl : public SimGroup vertResizeTop, ///< fixed in height and on the bottom vertResizeCenter, vertResizeRelative, ///< resize relative + vertResizeAspectTop, ///< resize relative to width delta (offset Left) + vertResizeAspectBottom, ///< resize relative to width delta (offset Right) + vertResizeAspectCenter, ///< resize relative to width delta Centered) vertResizeWindowRelative ///< resize window relative }; From 03109c9d6d613d51902fa8451fc862acf2214af7 Mon Sep 17 00:00:00 2001 From: Lopuska Date: Wed, 21 Jan 2015 23:14:53 +0100 Subject: [PATCH 031/324] Color Picker --- Engine/source/console/consoleFunctions.cpp | 83 ++ Engine/source/core/color.h | 284 ++++ Engine/source/gui/controls/guiColorPicker.cpp | 229 +++- Engine/source/gui/controls/guiColorPicker.h | 8 +- .../source/gui/controls/guiTextEditCtrl.cpp | 103 +- Engine/source/gui/controls/guiTextEditCtrl.h | 6 + Engine/source/math/mConsoleFunctions.cpp | 13 + .../Empty/game/tools/gui/colorPicker.ed.gui | 1167 +++++++++++++---- .../Full/game/tools/gui/colorPicker.ed.gui | 1167 +++++++++++++---- 9 files changed, 2421 insertions(+), 639 deletions(-) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index a5ea49f335..1e72f05b83 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -33,6 +33,9 @@ #include "platform/platformInput.h" #include "core/util/journal/journal.h" #include "core/util/uuid.h" +#include "core/color.h" +#include "math/mPoint3.h" +#include "math/mathTypes.h" #ifdef TORQUE_DEMO_PURCHASE #include "gui/core/guiCanvas.h" @@ -815,6 +818,86 @@ DefineConsoleFunction( strrchrpos, S32, ( const char* str, const char* chr, S32 return index; } +//---------------------------------------------------------------- + +DefineConsoleFunction(ColorFloatToInt, ColorI, (ColorF color), , + "Convert from a float color to an integer color (0.0 - 1.0 to 0 to 255).\n" + "@param color Float color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha.\n" + "@return Converted color value (0 - 255)\n\n" + "@tsexample\n" + "ColorFloatToInt( \"0 0 1 0.5\" ) // Returns \"0 0 255 128\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + return (ColorI)color; +} + +DefineConsoleFunction(ColorIntToFloat, ColorF, (ColorI color), , + "Convert from a integer color to an float color (0 to 255 to 0.0 - 1.0).\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha.\n" + "@return Converted color value (0.0 - 1.0)\n\n" + "@tsexample\n" + "ColorIntToFloat( \"0 0 255 128\" ) // Returns \"0 0 1 0.5\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + return (ColorF)color; +} + +DefineConsoleFunction(ColorRGBToHEX, const char*, (ColorI color), , + "Convert from a integer RGB (red, green, blue) color to hex color value (0 to 255 to 00 - FF).\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" + "@return Hex color value (#000000 - #FFFFFF), alpha isn't handled/converted so it is only the RGB value\n\n" + "@tsexample\n" + "ColorRBGToHEX( \"0 0 255 128\" ) // Returns \"#0000FF\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + return Con::getReturnBuffer(color.getHex()); +} + +DefineConsoleFunction(ColorRGBToHSB, const char*, (ColorI color), , + "Convert from a integer RGB (red, green, blue) color to HSB (hue, saturation, brightness). HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" + "@return HSB color value, alpha isn't handled/converted so it is only the RGB value\n\n" + "@tsexample\n" + "ColorRBGToHSB( \"0 0 255 128\" ) // Returns \"240 100 100\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + ColorI::Hsb hsb(color.getHSB()); + String s(String::ToString(hsb.hue) + " " + String::ToString(hsb.sat) + " " + String::ToString(hsb.brightness)); + return Con::getReturnBuffer(s); +} + +DefineConsoleFunction(ColorHEXToRGB, ColorI, (const char* hex), , + "Convert from a hex color value to an integer RGB (red, green, blue) color (00 - FF to 0 to 255).\n" + "@param hex Hex color value (#000000 - #FFFFFF) to be converted to an RGB (red, green, blue) value.\n" + "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" + "@tsexample\n" + "ColorHEXToRGB( \"#0000FF\" ) // Returns \"0 0 255 0\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + ColorI color; + color.set(hex); + return color; +} + +DefineConsoleFunction(ColorHSBToRGB, ColorI, (Point3I hsb), , + "Convert from a HSB (hue, saturation, brightness) to an integer RGB (red, green, blue) color. HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" + "@param hsb HSB (hue, saturation, brightness) value to be converted.\n" + "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" + "@tsexample\n" + "ColorHSBToRGB( \"240 100 100\" ) // Returns \"0 0 255 0\".\n" + "@endtsexample\n" + "@ingroup Strings") +{ + ColorI color; + color.set(ColorI::Hsb(hsb.x, hsb.y, hsb.z)); + return color; +} + //============================================================================= // Field Manipulators. //============================================================================= diff --git a/Engine/source/core/color.h b/Engine/source/core/color.h index b0620fc4f6..ddb98c8a83 100644 --- a/Engine/source/core/color.h +++ b/Engine/source/core/color.h @@ -30,6 +30,10 @@ #include "math/mPoint4.h" #endif +#ifndef _ENGINEAPI_H_ +#include "console/engineAPI.h" +#endif + class ColorI; @@ -121,9 +125,20 @@ class ColorI U8 blue; U8 alpha; + struct Hsb + { + Hsb() :hue(0), sat(0), brightness(0){}; + Hsb(U32 h, U32 s, U32 b) :hue(h), sat(s), brightness(b){}; + + U32 hue; ///Hue + U32 sat; ///Saturation + U32 brightness; //Brightness/Value/Lightness + }; + public: ColorI() { } ColorI(const ColorI& in_rCopy); + ColorI(const Hsb& color); ColorI(const U8 in_r, const U8 in_g, const U8 in_b, @@ -132,6 +147,12 @@ class ColorI ColorI( const char* pStockColorName ); + void set(const Hsb& color); + + void HSLtoRGB_Subfunction(U32& c, const F64& temp1, const F64& temp2, const F64& temp3); + + void set(const String& hex); + void set(const U8 in_r, const U8 in_g, const U8 in_b, @@ -176,6 +197,11 @@ class ColorI U16 get565() const; U16 get4444() const; + Hsb getHSB() const; + + String getHex() const; + S32 convertFromHex(const String& hex) const; + operator ColorF() const; operator const U8*() const { return &red; } @@ -459,6 +485,174 @@ inline void ColorI::set(const ColorI& in_rCopy, alpha = in_a; } +inline void ColorI::set(const Hsb& color) +{ + U32 r = 0; + U32 g = 0; + U32 b = 0; + + F64 L = ((F64)color.brightness) / 100.0; + F64 S = ((F64)color.sat) / 100.0; + F64 H = ((F64)color.hue) / 360.0; + + if (color.sat == 0) + { + r = color.brightness; + g = color.brightness; + b = color.brightness; + } + else + { + F64 temp1 = 0; + if (L < 0.50) + { + temp1 = L*(1 + S); + } + else + { + temp1 = L + S - (L*S); + } + + F64 temp2 = 2.0*L - temp1; + + F64 temp3 = 0; + for (S32 i = 0; i < 3; i++) + { + switch (i) + { + case 0: // red + { + temp3 = H + 0.33333; + if (temp3 > 1.0) + temp3 -= 1.0; + HSLtoRGB_Subfunction(r, temp1, temp2, temp3); + break; + } + case 1: // green + { + temp3 = H; + HSLtoRGB_Subfunction(g, temp1, temp2, temp3); + break; + } + case 2: // blue + { + temp3 = H - 0.33333; + if (temp3 < 0) + temp3 += 1; + HSLtoRGB_Subfunction(b, temp1, temp2, temp3); + break; + } + default: + { + + } + } + } + } + red = (U32)((((F64)r) / 100) * 255); + green = (U32)((((F64)g) / 100) * 255); + blue = (U32)((((F64)b) / 100) * 255); +} + +// This is a subfunction of HSLtoRGB +inline void ColorI::HSLtoRGB_Subfunction(U32& c, const F64& temp1, const F64& temp2, const F64& temp3) +{ + if ((temp3 * 6.0) < 1.0) + c = (U32)((temp2 + (temp1 - temp2)*6.0*temp3)*100.0); + else + if ((temp3 * 2.0) < 1.0) + c = (U32)(temp1*100.0); + else + if ((temp3 * 3.0) < 2.0) + c = (U32)((temp2 + (temp1 - temp2)*(0.66666 - temp3)*6.0)*100.0); + else + c = (U32)(temp2*100.0); + return; +} + +inline void ColorI::set(const String& hex) +{ + String redString; + String greenString; + String blueString; + + //if the prefix # was attached to hex + if (hex[0] == '#') + { + redString = hex.substr(1, 2); + greenString = hex.substr(3, 2); + blueString = hex.substr(5, 2); + } + else + { + // since there is no prefix attached to hex + redString = hex.substr(0, 2); + greenString = hex.substr(2, 2); + blueString = hex.substr(4, 2); + } + + red = (U8)(convertFromHex(redString)); + green = (U8)(convertFromHex(greenString)); + blue = (U8)(convertFromHex(blueString)); +} + +inline S32 ColorI::convertFromHex(const String& hex) const +{ + S32 hexValue = 0; + + S32 a = 0; + S32 b = hex.length() - 1; + + for (; b >= 0; a++, b--) + { + if (hex[b] >= '0' && hex[b] <= '9') + { + hexValue += (hex[b] - '0') * (1 << (a * 4)); + } + else + { + switch (hex[b]) + { + case 'A': + case 'a': + hexValue += 10 * (1 << (a * 4)); + break; + + case 'B': + case 'b': + hexValue += 11 * (1 << (a * 4)); + break; + + case 'C': + case 'c': + hexValue += 12 * (1 << (a * 4)); + break; + + case 'D': + case 'd': + hexValue += 13 * (1 << (a * 4)); + break; + + case 'E': + case 'e': + hexValue += 14 * (1 << (a * 4)); + break; + + case 'F': + case 'f': + hexValue += 15 * (1 << (a * 4)); + break; + + default: + Con::errorf("Error, invalid character '%c' in hex number", hex[a]); + break; + } + } + } + + return hexValue; +} + inline ColorI::ColorI(const ColorI& in_rCopy) { red = in_rCopy.red; @@ -467,6 +661,11 @@ inline ColorI::ColorI(const ColorI& in_rCopy) alpha = in_rCopy.alpha; } +inline ColorI::ColorI(const Hsb& color) +{ + set(color); +} + inline ColorI::ColorI(const U8 in_r, const U8 in_g, const U8 in_b, @@ -647,6 +846,91 @@ inline U16 ColorI::get4444() const U16(U16(blue >> 4) << 0)); } +inline ColorI::Hsb ColorI::getHSB() const +{ + F64 rPercent = ((F64)red) / 255; + F64 gPercent = ((F64)green) / 255; + F64 bPercent = ((F64)blue) / 255; + + F64 maxColor = 0.0; + if ((rPercent >= gPercent) && (rPercent >= bPercent)) + maxColor = rPercent; + if ((gPercent >= rPercent) && (gPercent >= bPercent)) + maxColor = gPercent; + if ((bPercent >= rPercent) && (bPercent >= gPercent)) + maxColor = bPercent; + + F64 minColor = 0.0; + if ((rPercent <= gPercent) && (rPercent <= bPercent)) + minColor = rPercent; + if ((gPercent <= rPercent) && (gPercent <= bPercent)) + minColor = gPercent; + if ((bPercent <= rPercent) && (bPercent <= gPercent)) + minColor = bPercent; + + F64 H = 0.0; + F64 S = 0.0; + F64 B = 0.0; + + B = (maxColor + minColor) / 2.0; + + if (maxColor == minColor) + { + H = 0.0; + S = 0.0; + } + else + { + if (B < 0.50) + { + S = (maxColor - minColor) / (maxColor + minColor); + } + else + { + S = (maxColor - minColor) / (2.0 - maxColor - minColor); + } + if (maxColor == rPercent) + { + H = (gPercent - bPercent) / (maxColor - minColor); + } + if (maxColor == gPercent) + { + H = 2.0 + (bPercent - rPercent) / (maxColor - minColor); + } + if (maxColor == bPercent) + { + H = 4.0 + (rPercent - gPercent) / (maxColor - minColor); + } + } + + ColorI::Hsb val; + val.sat = (U32)(S * 100); + val.brightness = (U32)(B * 100); + H = H*60.0; + if (H < 0.0) + H += 360.0; + val.hue = (U32)H; + + return val; +} + +inline String ColorI::getHex() const +{ + char r[255]; + dSprintf(r, sizeof(r), "%.2X", red); + String result(r); + + char g[255]; + dSprintf(g, sizeof(g), "%.2X", green); + result += g; + + char b[255]; + dSprintf(b, sizeof(b), "%.2X", blue); + result += b; + + return result; +} + //-------------------------------------- INLINE CONVERSION OPERATORS inline ColorF::operator ColorI() const { diff --git a/Engine/source/gui/controls/guiColorPicker.cpp b/Engine/source/gui/controls/guiColorPicker.cpp index 0b8676240e..39c1404346 100644 --- a/Engine/source/gui/controls/guiColorPicker.cpp +++ b/Engine/source/gui/controls/guiColorPicker.cpp @@ -71,6 +71,18 @@ GuiColorPickerCtrl::GuiColorPickerCtrl() mSelectorGap = 1; mActionOnMove = false; mShowReticle = true; + mSelectColor = false; + mSetColor = mSetColor.BLACK; + mBitmap = NULL; +} + +GuiColorPickerCtrl::~GuiColorPickerCtrl() +{ + if (mBitmap) + { + delete mBitmap; + mBitmap = NULL; + } } //-------------------------------------------------------------------------- @@ -331,60 +343,180 @@ void GuiColorPickerCtrl::renderColorBox(RectI &bounds) void GuiColorPickerCtrl::onRender(Point2I offset, const RectI& updateRect) { - if (mStateBlock.isNull()) - { - GFXStateBlockDesc desc; - desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); - desc.setZReadWrite(false); - desc.zWriteEnable = false; - desc.setCullMode(GFXCullNone); - mStateBlock = GFX->createStateBlock( desc ); - } + if (mStateBlock.isNull()) + { + GFXStateBlockDesc desc; + desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); + desc.setZReadWrite(false); + desc.zWriteEnable = false; + desc.setCullMode(GFXCullNone); + mStateBlock = GFX->createStateBlock(desc); + } - RectI boundsRect(offset, getExtent()); - renderColorBox(boundsRect); + RectI boundsRect(offset, getExtent()); + renderColorBox(boundsRect); - if (mPositionChanged) - { - mPositionChanged = false; - Point2I extent = getRoot()->getExtent(); - // If we are anything but a pallete, change the pick color - if (mDisplayMode != pPallet) - { - Point2I resolution = getRoot()->getExtent(); + if (mPositionChanged || mBitmap == NULL) + { + bool nullBitmap = false; - U32 buf_x = offset.x + mSelectorPos.x + 1; - U32 buf_y = resolution.y - ( extent.y - ( offset.y + mSelectorPos.y + 1 ) ); + if (mPositionChanged == false && mBitmap == NULL) + nullBitmap = true; - GFXTexHandle bb( resolution.x, - resolution.y, - GFXFormatR8G8B8A8, &GFXDefaultRenderTargetProfile, avar("%s() - bb (line %d)", __FUNCTION__, __LINE__) ); - - Point2I tmpPt( buf_x, buf_y ); + mPositionChanged = false; + Point2I extent = getRoot()->getExtent(); + // If we are anything but a pallete, change the pick color + if (mDisplayMode != pPallet) + { + Point2I resolution = getRoot()->getExtent(); - GFXTarget *targ = GFX->getActiveRenderTarget(); - targ->resolveTo( bb ); - - GBitmap bmp( bb.getWidth(), bb.getHeight() ); + U32 buf_x = offset.x + mSelectorPos.x + 1; + U32 buf_y = resolution.y - (extent.y - (offset.y + mSelectorPos.y + 1)); - bb.copyToBmp( &bmp ); - - //bmp.writePNGDebug( "foo.png" ); + GFXTexHandle bb(resolution.x, + resolution.y, + GFXFormatR8G8B8A8, &GFXDefaultRenderTargetProfile, avar("%s() - bb (line %d)", __FUNCTION__, __LINE__)); - ColorI tmp; - bmp.getColor( buf_x, buf_y, tmp ); + Point2I tmpPt(buf_x, buf_y); - mPickColor = (ColorF)tmp; + GFXTarget *targ = GFX->getActiveRenderTarget(); + targ->resolveTo(bb); - // Now do onAction() if we are allowed - if (mActionOnMove) - onAction(); - } - - } - - //render the children - renderChildControls( offset, updateRect); + if (mBitmap) + { + delete mBitmap; + mBitmap = NULL; + } + + mBitmap = new GBitmap(bb.getWidth(), bb.getHeight()); + + bb.copyToBmp(mBitmap); + + //bmp.writePNGDebug( "foo.png" ); + + if (!nullBitmap) + { + if (mSelectColor) + { + Point2I pos = findColor(mSetColor, offset, resolution, *mBitmap); + mSetColor = mSetColor.BLACK; + mSelectColor = false; + + setSelectorPos(pos); + } + else + { + ColorI tmp; + mBitmap->getColor(buf_x, buf_y, tmp); + + mPickColor = (ColorF)tmp; + + // Now do onAction() if we are allowed + if (mActionOnMove) + onAction(); + } + } + } + + } + + //render the children + renderChildControls(offset, updateRect); +} + +void GuiColorPickerCtrl::setSelectorPos(const ColorF & color) +{ + if (mBitmap && !mPositionChanged) + { + Point2I resolution = getRoot() ? getRoot()->getExtent() : Point2I(1024, 768); + RectI rect(getGlobalBounds()); + Point2I pos = findColor(color, rect.point, resolution, *mBitmap); + mSetColor = mSetColor.BLACK; + mSelectColor = false; + + setSelectorPos(pos); + } + else + { + mSetColor = color; + mSelectColor = true; + mPositionChanged = true; + } +} + +Point2I GuiColorPickerCtrl::findColor(const ColorF & color, const Point2I& offset, const Point2I& resolution, GBitmap& bmp) +{ + RectI rect; + Point2I ext = getExtent(); + if (mDisplayMode != pDropperBackground) + { + ext.x -= 3; + ext.y -= 2; + rect = RectI(Point2I(1, 1), ext); + } + else + { + rect = RectI(Point2I(0, 0), ext); + } + + Point2I closestPos(-1, -1); + + /* Debugging + char filename[256]; + dSprintf( filename, 256, "%s.%s", "colorPickerTest", "png" ); + + // Open up the file on disk. + FileStream fs; + if ( !fs.open( filename, Torque::FS::File::Write ) ) + Con::errorf( "GuiObjectView::saveAsImage() - Failed to open output file '%s'!", filename ); + else + { + // Write it and close. + bmp.writeBitmap( "png", fs ); + + fs.close(); + } + */ + + ColorI tmp; + U32 buf_x; + U32 buf_y; + ColorF curColor; + F32 val(10000.0f); + F32 closestVal(10000.0f); + bool closestSet = false; + + for (S32 x = rect.point.x; x <= rect.extent.x; x++) + { + for (S32 y = rect.point.y; y <= rect.extent.y; y++) + { + buf_x = offset.x + x + 1; + buf_y = (resolution.y - (offset.y + y + 1)); + if (GFX->getAdapterType() != OpenGL) + buf_y = resolution.y - buf_y; + + //Get the color at that position + bmp.getColor(buf_x, buf_y, tmp); + curColor = (ColorF)tmp; + + //Evaluate how close the color is to our desired color + val = mFabs(color.red - curColor.red) + mFabs(color.green - curColor.green) + mFabs(color.blue - curColor.blue); + + if (!closestSet) + { + closestVal = val; + closestPos.set(x, y); + closestSet = true; + } + else if (val < closestVal) + { + closestVal = val; + closestPos.set(x, y); + } + } + } + + return closestPos; } //-------------------------------------------------------------------------- @@ -539,3 +671,10 @@ DefineConsoleMethod(GuiColorPickerCtrl, updateColor, void, (), , "Forces update { object->updateColor(); } + +DefineEngineMethod(GuiColorPickerCtrl, setSelectorColor, void, (ColorF color), , + "Sets the current position of the selector based on a color.n" + "@param color Color to look for.n") +{ + object->setSelectorPos(color); +} \ No newline at end of file diff --git a/Engine/source/gui/controls/guiColorPicker.h b/Engine/source/gui/controls/guiColorPicker.h index a9421b7f7f..202a2b5ca6 100644 --- a/Engine/source/gui/controls/guiColorPicker.h +++ b/Engine/source/gui/controls/guiColorPicker.h @@ -98,7 +98,11 @@ class GuiColorPickerCtrl : public GuiControl bool mMouseDown; ///< Mouse button down? bool mActionOnMove; ///< Perform onAction() when position has changed? - + bool mSelectColor; + ColorF mSetColor; + GBitmap* mBitmap; + + Point2I findColor(const ColorF & color, const Point2I& offset, const Point2I& resolution, GBitmap& bmp); S32 mSelectorGap; ///< The half-way "gap" between the selector pos and where the selector is allowed to draw. @@ -113,6 +117,7 @@ class GuiColorPickerCtrl : public GuiControl DECLARE_CATEGORY( "Gui Editor" ); GuiColorPickerCtrl(); + ~GuiColorPickerCtrl(); static void initPersistFields(); void onRender(Point2I offset, const RectI &updateRect); @@ -131,6 +136,7 @@ class GuiColorPickerCtrl : public GuiControl /// @name Selector Functions /// @{ void setSelectorPos(const Point2I &pos); ///< Set new pos (in local coords) + void setSelectorPos(const ColorF & color); Point2I getSelectorPos() {return mSelectorPos;} /// @} diff --git a/Engine/source/gui/controls/guiTextEditCtrl.cpp b/Engine/source/gui/controls/guiTextEditCtrl.cpp index 450be5280a..7224f3eb86 100644 --- a/Engine/source/gui/controls/guiTextEditCtrl.cpp +++ b/Engine/source/gui/controls/guiTextEditCtrl.cpp @@ -128,6 +128,8 @@ GuiTextEditCtrl::GuiTextEditCtrl() mActive = true; + mTextValid = true; + mTextOffsetReset = true; mHistoryDirty = false; @@ -1257,15 +1259,21 @@ void GuiTextEditCtrl::onRender(Point2I offset, const RectI &updateRect) //if opaque, fill the update rect with the fill color if ( mProfile->mOpaque ) { - if(isFirstResponder()) - GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColorHL ); - else - GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColor ); + if (!mTextValid) + GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorNA); + else if (isFirstResponder()) + GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorHL); + else + GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColor); } //if there's a border, draw the border - if ( mProfile->mBorder ) - renderBorder( ctrlRect, mProfile ); + if (mProfile->mBorder) + { + renderBorder(ctrlRect, mProfile); + if (!mTextValid) + GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorNA); + } drawText( ctrlRect, isFirstResponder() ); } @@ -1491,6 +1499,24 @@ bool GuiTextEditCtrl::hasText() return (mTextBuffer.length()); } +void GuiTextEditCtrl::invalidText(bool playSound) +{ + mTextValid = false; + + if (playSound) + playDeniedSound(); +} + +void GuiTextEditCtrl::validText() +{ + mTextValid = true; +} + +bool GuiTextEditCtrl::isValidText() +{ + return mTextValid; +} + void GuiTextEditCtrl::playDeniedSound() { if ( mDeniedSound ) @@ -1518,27 +1544,29 @@ void GuiTextEditCtrl::handleCharInput( U16 ascii ) //see if it's a number field if ( mProfile->mNumbersOnly ) { - if ( ascii == '-') - { - //a minus sign only exists at the beginning, and only a single minus sign - if ( mCursorPos != 0 && !isAllTextSelected() ) - { - playDeniedSound(); - return; - } - - if ( mInsertOn && ( mTextBuffer.getChar(0) == '-' ) ) - { - playDeniedSound(); - return; - } - } - // BJTODO: This is probably not unicode safe. - else if ( ascii != '.' && (ascii < '0' || ascii > '9') ) - { - playDeniedSound(); - return; - } + if (ascii == '-') + { + //a minus sign only exists at the beginning, and only a single minus sign + if (mCursorPos != 0 && !isAllTextSelected()) + { + invalidText(); + return; + } + + if (mInsertOn && (mTextBuffer.getChar(0) == '-')) + { + invalidText(); + return; + } + } + // BJTODO: This is probably not unicode safe. + else if (ascii != '.' && (ascii < '0' || ascii > '9')) + { + invalidText(); + return; + } + else + validText(); } //save the current state @@ -1746,3 +1774,24 @@ DefineEngineMethod( GuiTextEditCtrl, forceValidateText, void, (),, { object->forceValidateText(); } + +DefineEngineMethod(GuiTextEditCtrl, invalidText, void, (bool playSound), (true), + "@brief Trigger the invalid sound and make the box red.nn" + "@param playSound Play the invalid text sound or not.n") +{ + object->invalidText(playSound); +} + + +DefineEngineMethod(GuiTextEditCtrl, validText, void, (), , + "@brief Restores the box to normal color.nn") +{ + object->validText(); +} + +DefineEngineMethod(GuiTextEditCtrl, isValidText, bool, (), , + "@brief Returns if the text is set to valid or not.n" + "@Return true if text is set to valid, false if not.nn") +{ + return object->isValidText(); +} diff --git a/Engine/source/gui/controls/guiTextEditCtrl.h b/Engine/source/gui/controls/guiTextEditCtrl.h index 1821ef1828..9d29038f7e 100644 --- a/Engine/source/gui/controls/guiTextEditCtrl.h +++ b/Engine/source/gui/controls/guiTextEditCtrl.h @@ -93,6 +93,8 @@ class GuiTextEditCtrl : public GuiTextCtrl void playDeniedSound(); void execConsoleCallback(); + bool mTextValid; + virtual void handleCharInput( U16 ascii ); S32 findNextWord(); @@ -119,6 +121,10 @@ class GuiTextEditCtrl : public GuiTextCtrl S32 getCursorPos() { return( mCursorPos ); } void setCursorPos( const S32 newPos ); + void invalidText(bool playSound = true); + void validText(); + bool isValidText(); + bool isAllTextSelected(); void selectAllText(); void clearSelectedText(); diff --git a/Engine/source/math/mConsoleFunctions.cpp b/Engine/source/math/mConsoleFunctions.cpp index 1a11fe23e4..df380da1b1 100644 --- a/Engine/source/math/mConsoleFunctions.cpp +++ b/Engine/source/math/mConsoleFunctions.cpp @@ -103,6 +103,19 @@ DefineConsoleFunction( mRound, S32, ( F32 v ),, return mRound(v); } +DefineConsoleFunction( mRoundColour, F32, ( F32 v, S32 n ), (0), + "Round v to the nth decimal place or the nearest whole number by default." + "@param v Value to roundn" + "@param n Number of decimal places to round to, 0 by defaultn" + "@return The rounded value as a S32." + "@ingroup Math") +{ + if (n <= 0) + return mRound(v); + else + return mRound(v, n); +} + DefineConsoleFunction( mCeil, S32, ( F32 v ),, "Round v up to the nearest integer.\n" "@param v Number to convert to integer." diff --git a/Templates/Empty/game/tools/gui/colorPicker.ed.gui b/Templates/Empty/game/tools/gui/colorPicker.ed.gui index 18dad276e4..c203ca52e3 100644 --- a/Templates/Empty/game/tools/gui/colorPicker.ed.gui +++ b/Templates/Empty/game/tools/gui/colorPicker.ed.gui @@ -1,289 +1,722 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiColorPickerCtrl(ColorPickerDlg,EditorGuiGroup) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; + displayMode = "Dropper"; // this makes the background visible + actionOnMove = "1"; position = "0 0"; - Extent = "800 600"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + extent = "1024 768"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - DisplayMode = "Dropper"; // this makes the background visible - ActionOnMove = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiWindowCtrl(GuiPickerDlg) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiWindowProfile"; - HorizSizing = "windowRelative"; - VertSizing = "windowRelative"; - position = "170 100"; - Extent = "348 347"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; text = "Color Picker"; - maxLength = "255"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "0"; canMaximize = "0"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "DoColorPickerCancelCallback(); ColorPickerDlg.getRoot().popDialog(ColorPickerDlg);"; - + position = "170 100"; + extent = "439 317"; + minExtent = "8 2"; + horizSizing = "windowRelative"; + vertSizing = "windowRelative"; + profile = "ToolsGuiWindowProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + new GuiBitmapBorderCtrl(){ // color blend - Profile = "ToolsGuiGroupBorderProfile"; position = "3 24"; - Extent = "255 258"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorBlendSelect) { + baseColor = "1 0 0 1"; + pickColor = "0 0 0 1"; + selectorGap = "1"; + displayMode = "BlendColor"; + actionOnMove = "1"; + position = "1 0"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updateRGBValues(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; new GuiBitmapBorderCtrl(){ // Hue - Profile = "ToolsGuiGroupBorderProfile"; position = "263 23"; - Extent = "25 261"; + extent = "25 261"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorRangeSelect) { + baseColor = "1 0 0 1"; + pickColor = "1 0 0 1"; + selectorGap = "1"; + displayMode = "VertColor"; + actionOnMove = "1"; + position = "1 1"; + extent = "21 257"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updatePickerBaseColor(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + new GuiTextCtrl() { + text = "New"; + position = "306 22"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; new GuiBitmapBorderCtrl(){ // new old color - Profile = "ToolsGuiGroupBorderProfile"; position = "292 37"; - Extent = "52 99"; - }; - new GuiBitmapBorderCtrl(){ // rgb - Profile = "ToolsGuiGroupBorderProfile"; - position = "292 209"; - Extent = "52 75"; - }; - new GuiBitmapBorderCtrl(){ // alpha - Profile = "ToolsGuiGroupBorderProfile"; - position = "3 287"; - Extent = "341 24"; - }; - new GuiColorPickerCtrl(ColorBlendSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "3 24"; - Extent = "255 258"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - command = "updateRGBValues(1);"; + extent = "52 99"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "0 0 0 1"; - SelectorGap = "1"; - DisplayMode = "BlendColor"; - ActionOnMove = "1"; - }; - new GuiColorPickerCtrl(ColorRangeSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "264 24"; - Extent = "21 257"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - Command = "updatePickerBaseColor(1);"; - hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "1 0 0 1"; - SelectorGap = "1"; - DisplayMode = "VertColor"; - ActionOnMove = "1"; - }; - new GuiTextCtrl() { canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 215"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "R"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_R_Val) { // Red Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 215"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + + new GuiSwatchButtonCtrl(myColor){ // New Color // + position = "1 1"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; + new GuiSwatchButtonCtrl(oldColor){ // Old Color // + position = "1 48"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; }; new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "297 238"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "G"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_G_Val) { // Green Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 238"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + text = "Old"; + position = "310 138"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 261"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + new GuiBitmapBorderCtrl(){ // Color Text Fields + position = "291 165"; + extent = "141 118"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "B"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 261"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; - }; - - - new GuiControl() { - class = "AggregateControl"; - position = "2 290"; - Extent = "341 18"; - - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "267 0"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { // rgb + position = "4 0"; + extent = "52 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "Alpha"; - maxLength = "255"; - }; - new GuiSliderCtrl(ColorAlphaSelect) { - internalName = "slider"; - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiSliderProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "5 3"; - Extent = "251 13"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "R"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_R_Val) { // Red Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + }; + new GuiTextCtrl() { + text = "G"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_G_Val) { // Green Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + }; + }; + new GuiControl() { + position = "71 0"; + extent = "61 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - range = "0 1"; - ticks = "0"; - value = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "H"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_H_Val) { // Hue Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + }; + new GuiTextCtrl() { + text = "o"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 2"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "S"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_S_Val) { // Saturation Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 29"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_Br_Val) { // Brightness Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 52"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; - new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal - internalName = "textEdit"; - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "305 0"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + new GuiControl() { + position = "3 87"; + extent = "138 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "#"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "3 5"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(HexColor_Val) { // Hex Color Field + text = "0"; + maxLength = "6"; + position = "13 5"; + extent = "116 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + command = "$thisControl.onKeyDown();"; + }; }; }; - new GuiSwatchButtonCtrl(myColor){ // New Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 38"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "New"; - position = "306 22"; - Extent = "26 14"; - }; - new GuiSwatchButtonCtrl(oldColor){ // Old Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 85"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "Old"; - position = "310 138"; - Extent = "26 14"; + new GuiBitmapBorderCtrl(){ // alpha + position = "3 287"; + extent = "429 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { + position = "-1 3"; + extent = "428 18"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + class = "AggregateControl"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl(ColorAlphaSelect) { + range = "0 1"; + ticks = "0"; + value = "1"; + position = "5 3"; + extent = "341 13"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + internalName = "slider"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Alpha"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "355 0"; + extent = "28 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal + text = "0"; + maxLength = "4"; + position = "392 0"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + internalName = "TextEdit"; + }; + }; }; new GuiButtonCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "144 316"; - Extent = "115 24"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCallback();"; - hovertime = "1000"; text = "Select"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - }; - new GuiButtonCtrl() { - canSaveDynamicFields = "0"; + position = "349 37"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "268 316"; - Extent = "73 24"; - MinExtent = "8 2"; canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCancelCallback();"; - hovertime = "1000"; + canSaveDynamicFields = "0"; + }; + new GuiButtonCtrl() { text = "Cancel"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; + position = "349 68"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCancelCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; @@ -294,26 +727,6 @@ $ColorPickerCancelCallback = ""; $ColorPickerUpdateCallback = ""; $ColorCallbackType = 1; // ColorI -function ColorFloatToInt( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return mCeil( %red * 255 ) SPC mCeil( %green * 255 ) SPC mCeil( %blue * 255 ) SPC mCeil( %alpha * 255 ); -} - -function ColorIntToFloat( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return ( %red / 255 ) SPC ( %green / 255 ) SPC ( %blue / 255 ) SPC ( %alpha / 255 ); -} - // This function pushes the color picker dialog and returns to a callback the selected value function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCallback ) { @@ -333,15 +746,18 @@ function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 255"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0) / 255; - %green = getWord(%currentColor, 1) / 255; - %blue = getWord(%currentColor, 2) / 255; + %red = getWord(%currentColor, 0); + %green = getWord(%currentColor, 1); + %blue = getWord(%currentColor, 2); %alpha = getWord(%currentColor, 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -371,15 +787,18 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 1"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0); - %green = getWord(%currentColor, 1); - %blue = getWord(%currentColor, 2); - %alpha = getWord(%currentColor, 3); + %red = mRoundColour(getWord(%currentColor, 0), 3); + %green = mRoundColour(getWord(%currentColor, 1), 3); + %blue = mRoundColour(getWord(%currentColor, 2), 3); + %alpha = mRoundColour(getWord(%currentColor, 3), 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -390,6 +809,133 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal Channel_A_Val.setText( %alpha ); } +function ColorPickerRGBClass::onValidate(%this) +{ + %red = Channel_R_Val.getValue(); + %green = Channel_G_Val.getValue(); + %blue = Channel_B_Val.getValue(); + + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //Update everything else with our new color + setColorInfo(); +} + +function ColorPickerHSBClass::onValidate(%this) +{ + %hue = Channel_H_Val.getValue(); + %saturation = Channel_S_Val.getValue(); + %brightness = Channel_Br_Val.getValue(); + + //Update all the other color fields + %rgb = ColorHSBToRGB(%hue SPC %saturation SPC %brightness); + %hex = ColorRGBToHEX(%rgb); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Update everything else with our new color + setColorInfo(); +} + +function HexColor_Val::onKeyDown(%this) +{ + //Get the value + %value = %this.getValue(); + + //It's hex so keep it all uppercase + %value = strupr(%value); + %pos = %this.getCursorPos(); + %this.setValue(%value); + %this.setCursorPos(%pos); + + //Verify that it's a hex value + %value = stripChars(%value, "0123456789ABCDEF"); + if(%value $= "") + { + %this.validText(); + } + else + { + %this.invalidText(false); + } +} + +function HexColor_Val::onValidate(%this) +{ + //if the current text is invalid don't do anyting + if(!%this.isValidText()) + { + %this.invalidText(true); + return; + } + + //Get the current value + %hex = %this.getValue(); + + //Make sure we have 6 characters + while(strlen(%hex) < 6) + { + %hex = "0" @ %hex; + } + %hex = strupr(%hex); + + //Update the value in case there were missing characters + %this.setValue(%hex); + + //Update all the other color fields + %rgb = ColorHEXToRGB(%hex); + %hsb = ColorRGBToHSB(%rgb); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + //Update everything else with our new color + setColorInfo(); +} + // This function is used to update the text controls at the top function setColorInfo() { @@ -398,16 +944,40 @@ function setColorInfo() %blue = Channel_B_Val.getValue(); if( $ColorCallbackType == 1) - { - %red = (%red / 255); - %green = (%green / 255); - %blue = (%blue / 255); - } + %rgb = ColorIntToFloat(%red SPC %green SPC %blue SPC "255"); + else + %rgb = %red SPC %green SPC %blue SPC "1.0"; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; - ColorBlendSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; + //Convert color over to hue color + %hsb = ColorRGBToHSB(ColorFloatToInt(%rgb)); + %tempColor = ColorHSBToRGB( getWord(%hsb, 0) SPC 100 SPC 50); + %tempColor = ColorIntToFloat(setWord(%tempColor, 3, 255)); + + //Make sure all the text fields and everything don't update because of the cursors + ColorRangeSelect.update = false; + ColorBlendSelect.update = false; + + //Set values for the hue color picker + ColorRangeSelect.baseColor = %tempColor; + ColorRangeSelect.pickColor = %tempColor; + ColorRangeSelect.updateColor(); + + //Set the cursor for the hue picker + ColorRangeSelect.setSelectorColor(%tempColor); + + //Set the values for the gradient color picker + ColorBlendSelect.baseColor = %tempColor; + ColorBlendSelect.pickColor = %rgb; ColorBlendSelect.updateColor(); + + //Set the cursor for the gradiant color picker + ColorBlendSelect.setSelectorColor(%rgb); + + //Update our current color + %alpha = getWord(myColor.color, 3); + myColor.color = setWord(%rgb, 3, %alpha); } // return mycolor.color @@ -433,11 +1003,17 @@ function DoColorPickerUpdateCallback() // this is called from ColorRangeSelect.updateColor function updatePickerBaseColor( %location ) { + if(!ColorRangeSelect.update) + { + ColorRangeSelect.update = true; + return; + } + if( $ColorPickerSignal && %location ) %pickColor = ColorRangeSelect.baseColor; else %pickColor = ColorRangeSelect.pickColor; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; %red = getWord(%pickColor, 0); %green = getWord(%pickColor, 1); @@ -451,6 +1027,12 @@ function updatePickerBaseColor( %location ) // this is called from ColorBlendSelect.updateColor function updateRGBValues( %location ) { + if(!ColorBlendSelect.update) + { + ColorBlendSelect.update = true; + return; + } + //update the color based on where it came from if( $ColorPickerSignal && %location ) %pickColor = ColorBlendSelect.baseColor; @@ -465,7 +1047,7 @@ function updateRGBValues( %location ) %alpha = getWord(myColor.color, 3); // set the color! - myColor.color = %red SPC %green SPC %blue SPC %alpha ; + myColor.color = %red SPC %green SPC %blue SPC %alpha; DoColorPickerUpdateCallback(); @@ -488,6 +1070,25 @@ function updateRGBValues( %location ) Channel_G_Val.setValue(%green); Channel_B_Val.setValue(%blue); + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + $ColorPickerSignal = 0; } diff --git a/Templates/Full/game/tools/gui/colorPicker.ed.gui b/Templates/Full/game/tools/gui/colorPicker.ed.gui index 18dad276e4..c203ca52e3 100644 --- a/Templates/Full/game/tools/gui/colorPicker.ed.gui +++ b/Templates/Full/game/tools/gui/colorPicker.ed.gui @@ -1,289 +1,722 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiColorPickerCtrl(ColorPickerDlg,EditorGuiGroup) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; + displayMode = "Dropper"; // this makes the background visible + actionOnMove = "1"; position = "0 0"; - Extent = "800 600"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + extent = "1024 768"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - DisplayMode = "Dropper"; // this makes the background visible - ActionOnMove = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiWindowCtrl(GuiPickerDlg) { - canSaveDynamicFields = "0"; - isContainer = "1"; - Profile = "ToolsGuiWindowProfile"; - HorizSizing = "windowRelative"; - VertSizing = "windowRelative"; - position = "170 100"; - Extent = "348 347"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; text = "Color Picker"; - maxLength = "255"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "0"; canMaximize = "0"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "DoColorPickerCancelCallback(); ColorPickerDlg.getRoot().popDialog(ColorPickerDlg);"; - + position = "170 100"; + extent = "439 317"; + minExtent = "8 2"; + horizSizing = "windowRelative"; + vertSizing = "windowRelative"; + profile = "ToolsGuiWindowProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + new GuiBitmapBorderCtrl(){ // color blend - Profile = "ToolsGuiGroupBorderProfile"; position = "3 24"; - Extent = "255 258"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorBlendSelect) { + baseColor = "1 0 0 1"; + pickColor = "0 0 0 1"; + selectorGap = "1"; + displayMode = "BlendColor"; + actionOnMove = "1"; + position = "1 0"; + extent = "255 258"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updateRGBValues(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; new GuiBitmapBorderCtrl(){ // Hue - Profile = "ToolsGuiGroupBorderProfile"; position = "263 23"; - Extent = "25 261"; + extent = "25 261"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiColorPickerCtrl(ColorRangeSelect) { + baseColor = "1 0 0 1"; + pickColor = "1 0 0 1"; + selectorGap = "1"; + displayMode = "VertColor"; + actionOnMove = "1"; + position = "1 1"; + extent = "21 257"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + command = "updatePickerBaseColor(1);"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + new GuiTextCtrl() { + text = "New"; + position = "306 22"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; new GuiBitmapBorderCtrl(){ // new old color - Profile = "ToolsGuiGroupBorderProfile"; position = "292 37"; - Extent = "52 99"; - }; - new GuiBitmapBorderCtrl(){ // rgb - Profile = "ToolsGuiGroupBorderProfile"; - position = "292 209"; - Extent = "52 75"; - }; - new GuiBitmapBorderCtrl(){ // alpha - Profile = "ToolsGuiGroupBorderProfile"; - position = "3 287"; - Extent = "341 24"; - }; - new GuiColorPickerCtrl(ColorBlendSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "3 24"; - Extent = "255 258"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - command = "updateRGBValues(1);"; + extent = "52 99"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "0 0 0 1"; - SelectorGap = "1"; - DisplayMode = "BlendColor"; - ActionOnMove = "1"; - }; - new GuiColorPickerCtrl(ColorRangeSelect) { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "264 24"; - Extent = "21 257"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - Command = "updatePickerBaseColor(1);"; - hovertime = "1000"; - baseColor = "1 0 0 1"; - PickColor = "1 0 0 1"; - SelectorGap = "1"; - DisplayMode = "VertColor"; - ActionOnMove = "1"; - }; - new GuiTextCtrl() { canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 215"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "R"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_R_Val) { // Red Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 215"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + + new GuiSwatchButtonCtrl(myColor){ // New Color // + position = "1 1"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; + new GuiSwatchButtonCtrl(oldColor){ // Old Color // + position = "1 48"; + extent = "50 50"; + profile = "GuiDefaultProfile"; + }; }; new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "297 238"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - text = "G"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_G_Val) { // Green Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 238"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; + text = "Old"; + position = "310 138"; + extent = "26 14"; + profile = "GuiDefaultProfile"; }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "298 261"; - Extent = "8 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + new GuiBitmapBorderCtrl(){ // Color Text Fields + position = "291 165"; + extent = "141 118"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "B"; - maxLength = "255"; - }; - new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "307 261"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "setColorInfo();"; - }; - - - new GuiControl() { - class = "AggregateControl"; - position = "2 290"; - Extent = "341 18"; - - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "267 0"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { // rgb + position = "4 0"; + extent = "52 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - text = "Alpha"; - maxLength = "255"; - }; - new GuiSliderCtrl(ColorAlphaSelect) { - internalName = "slider"; - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiSliderProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "5 3"; - Extent = "251 13"; - MinExtent = "8 2"; + isContainer = "1"; canSave = "1"; - Visible = "1"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "R"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_R_Val) { // Red Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Red Channel color value."; + }; + new GuiTextCtrl() { + text = "G"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_G_Val) { // Green Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Green Channel color value."; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_B_Val) { // Blue Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerRGBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Blue Channel color value."; + }; + }; + new GuiControl() { + position = "71 0"; + extent = "61 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; - range = "0 1"; - ticks = "0"; - value = "1"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "H"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 6"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_H_Val) { // Hue Channal + text = "0"; + maxLength = "4"; + position = "14 6"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hue Channel color value."; + }; + new GuiTextCtrl() { + text = "o"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 2"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "S"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "4 29"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_S_Val) { // Saturation Channal + text = "0"; + maxLength = "4"; + position = "14 29"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Saturation Channel color value."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 29"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "B"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 52"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_Br_Val) { // Brightness Channal + text = "0"; + maxLength = "4"; + position = "14 52"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + class = "ColorPickerHSBClass"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Brightness Channel color value. Aka value or lightness."; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "51 52"; + extent = "10 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; - new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal - internalName = "textEdit"; - Profile = "ToolsGuiNumericTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "305 0"; - Extent = "34 18"; - text = "0"; - maxLength = "4"; - altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + new GuiControl() { + position = "3 87"; + extent = "138 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "#"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "3 5"; + extent = "8 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(HexColor_Val) { // Hex Color Field + text = "0"; + maxLength = "6"; + position = "13 5"; + extent = "116 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; + tooltipProfile = "GuiToolTipProfile"; + tooltip = "Hex representation of Red, Green, Blue Color value."; + command = "$thisControl.onKeyDown();"; + }; }; }; - new GuiSwatchButtonCtrl(myColor){ // New Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 38"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "New"; - position = "306 22"; - Extent = "26 14"; - }; - new GuiSwatchButtonCtrl(oldColor){ // Old Color // - Profile = "ToolsGuiDefaultProfile"; - position = "293 85"; - Extent = "50 50"; - }; - new GuiTextCtrl(){ - Profile = "ToolsGuiDefaultProfile"; - text = "Old"; - position = "310 138"; - Extent = "26 14"; + new GuiBitmapBorderCtrl(){ // alpha + position = "3 287"; + extent = "429 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiGroupBorderProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiControl() { + position = "-1 3"; + extent = "428 18"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + class = "AggregateControl"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl(ColorAlphaSelect) { + range = "0 1"; + ticks = "0"; + value = "1"; + position = "5 3"; + extent = "341 13"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + internalName = "slider"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Alpha"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "355 0"; + extent = "28 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextProfile"; + visible = "1"; + active = "1"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(Channel_A_Val) { // Alpha Channal + text = "0"; + maxLength = "4"; + position = "392 0"; + extent = "34 18"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfileNumbersOnly"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); updateColorPickerAlpha( $ThisControl.getValue() );"; + internalName = "TextEdit"; + }; + }; }; new GuiButtonCtrl() { - canSaveDynamicFields = "0"; - isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "144 316"; - Extent = "115 24"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCallback();"; - hovertime = "1000"; text = "Select"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - }; - new GuiButtonCtrl() { - canSaveDynamicFields = "0"; + position = "349 37"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; isContainer = "0"; - Profile = "ToolsGuiButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "268 316"; - Extent = "73 24"; - MinExtent = "8 2"; canSave = "1"; - Visible = "1"; - Command = "DoColorPickerCancelCallback();"; - hovertime = "1000"; + canSaveDynamicFields = "0"; + }; + new GuiButtonCtrl() { text = "Cancel"; groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; + position = "349 68"; + extent = "84 24"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiButtonProfile"; + visible = "1"; + active = "1"; + command = "DoColorPickerCancelCallback();"; + Clickable = "1"; + AffectChildren = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; @@ -294,26 +727,6 @@ $ColorPickerCancelCallback = ""; $ColorPickerUpdateCallback = ""; $ColorCallbackType = 1; // ColorI -function ColorFloatToInt( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return mCeil( %red * 255 ) SPC mCeil( %green * 255 ) SPC mCeil( %blue * 255 ) SPC mCeil( %alpha * 255 ); -} - -function ColorIntToFloat( %color ) -{ - %red = getWord( %color, 0 ); - %green = getWord( %color, 1 ); - %blue = getWord( %color, 2 ); - %alpha = getWord( %color, 3 ); - - return ( %red / 255 ) SPC ( %green / 255 ) SPC ( %blue / 255 ) SPC ( %alpha / 255 ); -} - // This function pushes the color picker dialog and returns to a callback the selected value function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCallback ) { @@ -333,15 +746,18 @@ function GetColorI( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 255"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0) / 255; - %green = getWord(%currentColor, 1) / 255; - %blue = getWord(%currentColor, 2) / 255; + %red = getWord(%currentColor, 0); + %green = getWord(%currentColor, 1); + %blue = getWord(%currentColor, 2); %alpha = getWord(%currentColor, 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -371,15 +787,18 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal ColorAlphaSelect.range = "0 1"; // Set the RGBA displays accordingly - %red = getWord(%currentColor, 0); - %green = getWord(%currentColor, 1); - %blue = getWord(%currentColor, 2); - %alpha = getWord(%currentColor, 3); + %red = mRoundColour(getWord(%currentColor, 0), 3); + %green = mRoundColour(getWord(%currentColor, 1), 3); + %blue = mRoundColour(getWord(%currentColor, 2), 3); + %alpha = mRoundColour(getWord(%currentColor, 3), 3); - // set the initial range blend to correct color, no alpha needed - // this should also set the color blend select right now - ColorRangeSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; - ColorRangeSelect.updateColor(); + //Set the red green blue text fields + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Have the rgb text fields update the rest + Channel_R_Val.onValidate(); if(!isObject(%root)) %root = Canvas; @@ -390,6 +809,133 @@ function GetColorF( %currentColor, %callback, %root, %updateCallback, %cancelCal Channel_A_Val.setText( %alpha ); } +function ColorPickerRGBClass::onValidate(%this) +{ + %red = Channel_R_Val.getValue(); + %green = Channel_G_Val.getValue(); + %blue = Channel_B_Val.getValue(); + + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //Update everything else with our new color + setColorInfo(); +} + +function ColorPickerHSBClass::onValidate(%this) +{ + %hue = Channel_H_Val.getValue(); + %saturation = Channel_S_Val.getValue(); + %brightness = Channel_Br_Val.getValue(); + + //Update all the other color fields + %rgb = ColorHSBToRGB(%hue SPC %saturation SPC %brightness); + %hex = ColorRGBToHEX(%rgb); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + //Update everything else with our new color + setColorInfo(); +} + +function HexColor_Val::onKeyDown(%this) +{ + //Get the value + %value = %this.getValue(); + + //It's hex so keep it all uppercase + %value = strupr(%value); + %pos = %this.getCursorPos(); + %this.setValue(%value); + %this.setCursorPos(%pos); + + //Verify that it's a hex value + %value = stripChars(%value, "0123456789ABCDEF"); + if(%value $= "") + { + %this.validText(); + } + else + { + %this.invalidText(false); + } +} + +function HexColor_Val::onValidate(%this) +{ + //if the current text is invalid don't do anyting + if(!%this.isValidText()) + { + %this.invalidText(true); + return; + } + + //Get the current value + %hex = %this.getValue(); + + //Make sure we have 6 characters + while(strlen(%hex) < 6) + { + %hex = "0" @ %hex; + } + %hex = strupr(%hex); + + //Update the value in case there were missing characters + %this.setValue(%hex); + + //Update all the other color fields + %rgb = ColorHEXToRGB(%hex); + %hsb = ColorRGBToHSB(%rgb); + + //convert to float for rgb if we need to + if( $ColorCallbackType != 1 ) + { + %rgb = ColorIntToFloat(%rgb); + } + + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + Channel_R_Val.setValue(%red); + Channel_G_Val.setValue(%green); + Channel_B_Val.setValue(%blue); + + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + //Update everything else with our new color + setColorInfo(); +} + // This function is used to update the text controls at the top function setColorInfo() { @@ -398,16 +944,40 @@ function setColorInfo() %blue = Channel_B_Val.getValue(); if( $ColorCallbackType == 1) - { - %red = (%red / 255); - %green = (%green / 255); - %blue = (%blue / 255); - } + %rgb = ColorIntToFloat(%red SPC %green SPC %blue SPC "255"); + else + %rgb = %red SPC %green SPC %blue SPC "1.0"; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; - ColorBlendSelect.baseColor = %red SPC %green SPC %blue SPC "1.0"; + //Convert color over to hue color + %hsb = ColorRGBToHSB(ColorFloatToInt(%rgb)); + %tempColor = ColorHSBToRGB( getWord(%hsb, 0) SPC 100 SPC 50); + %tempColor = ColorIntToFloat(setWord(%tempColor, 3, 255)); + + //Make sure all the text fields and everything don't update because of the cursors + ColorRangeSelect.update = false; + ColorBlendSelect.update = false; + + //Set values for the hue color picker + ColorRangeSelect.baseColor = %tempColor; + ColorRangeSelect.pickColor = %tempColor; + ColorRangeSelect.updateColor(); + + //Set the cursor for the hue picker + ColorRangeSelect.setSelectorColor(%tempColor); + + //Set the values for the gradient color picker + ColorBlendSelect.baseColor = %tempColor; + ColorBlendSelect.pickColor = %rgb; ColorBlendSelect.updateColor(); + + //Set the cursor for the gradiant color picker + ColorBlendSelect.setSelectorColor(%rgb); + + //Update our current color + %alpha = getWord(myColor.color, 3); + myColor.color = setWord(%rgb, 3, %alpha); } // return mycolor.color @@ -433,11 +1003,17 @@ function DoColorPickerUpdateCallback() // this is called from ColorRangeSelect.updateColor function updatePickerBaseColor( %location ) { + if(!ColorRangeSelect.update) + { + ColorRangeSelect.update = true; + return; + } + if( $ColorPickerSignal && %location ) %pickColor = ColorRangeSelect.baseColor; else %pickColor = ColorRangeSelect.pickColor; - $ColorPickerSignal = 1; + $ColorPickerSignal = 0; %red = getWord(%pickColor, 0); %green = getWord(%pickColor, 1); @@ -451,6 +1027,12 @@ function updatePickerBaseColor( %location ) // this is called from ColorBlendSelect.updateColor function updateRGBValues( %location ) { + if(!ColorBlendSelect.update) + { + ColorBlendSelect.update = true; + return; + } + //update the color based on where it came from if( $ColorPickerSignal && %location ) %pickColor = ColorBlendSelect.baseColor; @@ -465,7 +1047,7 @@ function updateRGBValues( %location ) %alpha = getWord(myColor.color, 3); // set the color! - myColor.color = %red SPC %green SPC %blue SPC %alpha ; + myColor.color = %red SPC %green SPC %blue SPC %alpha; DoColorPickerUpdateCallback(); @@ -488,6 +1070,25 @@ function updateRGBValues( %location ) Channel_G_Val.setValue(%green); Channel_B_Val.setValue(%blue); + //Rest of the fields just do everything with ints so convert + if( $ColorCallbackType != 1 ) + { + %rgb = ColorFloatToInt(%red SPC %green SPC %blue SPC "1.0"); + %red = getWord(%rgb, 0); + %green = getWord(%rgb, 1); + %blue = getWord(%rgb, 2); + } + + //Update all the other color fields + %hsb = ColorRGBToHSB(%red SPC %green SPC %blue); + Channel_H_Val.setValue(getWord(%hsb, 0)); + Channel_S_Val.setValue(getWord(%hsb, 1)); + Channel_Br_Val.setValue(getWord(%hsb, 2)); + + %hex = ColorRGBToHEX(%red SPC %green SPC %blue); + HexColor_Val.setValue(%hex); + HexColor_Val.onKeyDown(); + $ColorPickerSignal = 0; } From 005c3c4b367ed7af19a9bd758bd330ac88a95c38 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 29 Jul 2015 01:41:09 -0500 Subject: [PATCH 032/324] =?UTF-8?q?From=20Du=C5=A1an=20Joci=C4=87:=20addit?= =?UTF-8?q?ional=20debugdraw=20entries.=20DirectionLine,=20OutlinedText,?= =?UTF-8?q?=20Capsule?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Engine/source/gfx/sim/debugDraw.cpp | 110 +++++++++++++++++++++++++++- Engine/source/gfx/sim/debugDraw.h | 7 +- 2 files changed, 114 insertions(+), 3 deletions(-) diff --git a/Engine/source/gfx/sim/debugDraw.cpp b/Engine/source/gfx/sim/debugDraw.cpp index 68b8c835dc..b31a6925e2 100644 --- a/Engine/source/gfx/sim/debugDraw.cpp +++ b/Engine/source/gfx/sim/debugDraw.cpp @@ -132,6 +132,11 @@ void DebugDrawer::setupStateBlocks() d.setZReadWrite(false); mRenderZOffSB = GFX->createStateBlock(d); + + d.setCullMode(GFXCullCCW); + d.setZReadWrite(true, false); + d.setBlend(true); + mRenderAlpha = GFX->createStateBlock(d); } void DebugDrawer::render() @@ -158,10 +163,13 @@ void DebugDrawer::render() // Set up the state block... GFXStateBlockRef currSB; - if(p->useZ) + if(p->type==DebugPrim::Capsule){ + currSB = mRenderAlpha; + }else if(p->useZ){ currSB = mRenderZOnSB; - else + }else{ currSB = mRenderZOffSB; + } GFX->setStateBlock( currSB ); Point3F d; @@ -180,6 +188,47 @@ void DebugDrawer::render() PrimBuild::end(); break; + case DebugPrim::DirectionLine: + { + const static F32 ARROW_LENGTH = 0.2f, ARROW_RADIUS = 0.035f, CYLINDER_RADIUS = 0.008f; + Point3F &start = p->a, &end = p->b; + Point3F direction = end - start; + F32 length = direction.len(); + if( length>ARROW_LENGTH ){ + //cylinder with arrow on end + direction *= (1.0f/length); + Point3F baseArrow = end - (direction*ARROW_LENGTH); + GFX->getDrawUtil()->drawCone(currSB->getDesc(), baseArrow, end, ARROW_RADIUS, p->color); + GFX->getDrawUtil()->drawCylinder(currSB->getDesc(), start, baseArrow, CYLINDER_RADIUS, p->color); + }else if( length>0 ){ + //short, so just draw arrow + GFX->getDrawUtil()->drawCone(currSB->getDesc(), start, end, ARROW_RADIUS, p->color); + } + } + break; + case DebugPrim::Capsule: + GFX->getDrawUtil()->drawCapsule(currSB->getDesc(), p->a, p->b.x, p->b.y, p->color); + break; + case DebugPrim::OutlinedText: + { + GFXTransformSaver saver; + Point3F result; + if (MathUtils::mProjectWorldToScreen(p->a, &result, GFX->getViewport(), GFX->getWorldMatrix(), GFX->getProjectionMatrix())) + { + GFX->setClipRect(GFX->getViewport()); + Point2I where = Point2I(result.x, result.y); + + GFX->getDrawUtil()->setBitmapModulation(p->color2); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x-1, where.y), p->mText); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x+1, where.y), p->mText); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x, where.y-1), p->mText); + GFX->getDrawUtil()->drawText(mFont, Point2I(where.x, where.y+1), p->mText); + + GFX->getDrawUtil()->setBitmapModulation(p->color); + GFX->getDrawUtil()->drawText(mFont, where, p->mText); + } + } + break; case DebugPrim::Box: d = p->a - p->b; GFX->getDrawUtil()->drawCube(currSB->getDesc(), d * 0.5, (p->a + p->b) * 0.5, p->color); @@ -262,6 +311,63 @@ void DebugDrawer::drawLine(const Point3F &a, const Point3F &b, const ColorF &col mHead = n; } +void DebugDrawer::drawCapsule(const Point3F &a, const F32 &radius, const F32 &height, const ColorF &color) +{ + if(isFrozen || !isDrawing) + return; + + DebugPrim *n = mPrimChunker.alloc(); + + n->useZ = true; + n->dieTime = 0; + n->a = a; + n->b.x = radius; + n->b.y = height; + n->color = color; + n->type = DebugPrim::Capsule; + + n->next = mHead; + mHead = n; + +} + +void DebugDrawer::drawDirectionLine(const Point3F &a, const Point3F &b, const ColorF &color) +{ + if(isFrozen || !isDrawing) + return; + + DebugPrim *n = mPrimChunker.alloc(); + + n->useZ = true; + n->dieTime = 0; + n->a = a; + n->b = b; + n->color = color; + n->type = DebugPrim::DirectionLine; + + n->next = mHead; + mHead = n; +} + +void DebugDrawer::drawOutlinedText(const Point3F& pos, const String& text, const ColorF &color, const ColorF &colorOutline) +{ + if(isFrozen || !isDrawing) + return; + + DebugPrim *n = mPrimChunker.alloc(); + + n->useZ = false; + n->dieTime = 0; + n->a = pos; + n->color = color; + n->color2 = colorOutline; + dStrncpy(n->mText, text.c_str(), 256); + n->type = DebugPrim::OutlinedText; + + n->next = mHead; + mHead = n; +} + void DebugDrawer::drawTri(const Point3F &a, const Point3F &b, const Point3F &c, const ColorF &color) { if(isFrozen || !isDrawing) diff --git a/Engine/source/gfx/sim/debugDraw.h b/Engine/source/gfx/sim/debugDraw.h index b1ab559700..c650417b0b 100644 --- a/Engine/source/gfx/sim/debugDraw.h +++ b/Engine/source/gfx/sim/debugDraw.h @@ -161,6 +161,7 @@ class DebugDrawer : public SimObject { /// Color used for this primitive. ColorF color; + ColorF color2; /// Points used to store positional data. Exact semantics determined by type. Point3F a, b, c; @@ -168,7 +169,10 @@ class DebugDrawer : public SimObject Tri, Box, Line, - Text + Text, + DirectionLine, + OutlinedText, + Capsule, } type; ///< Type of the primitive. The meanings of a,b,c are determined by this. SimTime dieTime; ///< Time at which we should remove this from the list. @@ -188,6 +192,7 @@ class DebugDrawer : public SimObject GFXStateBlockRef mRenderZOffSB; GFXStateBlockRef mRenderZOnSB; + GFXStateBlockRef mRenderAlpha; Resource mFont; From 5d91cf90b386759f2d2ede4773139786a8b32a6d Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Tue, 7 Jul 2015 21:11:26 +0200 Subject: [PATCH 033/324] Fix running on Linux / Intel Mesa drivers * Explicitly request a GL 3.2 context * Enable 'experimental' extensions on glew (This appears necessary to get glew to work with explictly set GL versions) --- Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp | 4 ++++ Engine/source/gfx/gl/tGL/tGL.cpp | 1 + Engine/source/platformSDL/sdlPlatformGL.cpp | 4 +--- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp b/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp index 10e18deb43..74e1773fc7 100644 --- a/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp +++ b/Engine/source/gfx/gl/sdl/gfxGLDevice.sdl.cpp @@ -83,6 +83,10 @@ void GFXGLDevice::enumerateAdapters( Vector &adapterList ) ); SDL_ClearError(); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + SDL_GLContext tempContext = SDL_GL_CreateContext( tempWindow ); if( !tempContext ) { diff --git a/Engine/source/gfx/gl/tGL/tGL.cpp b/Engine/source/gfx/gl/tGL/tGL.cpp index 94953b4877..8d62a7fd18 100644 --- a/Engine/source/gfx/gl/tGL/tGL.cpp +++ b/Engine/source/gfx/gl/tGL/tGL.cpp @@ -29,6 +29,7 @@ namespace GL { void gglPerformBinds() { + glewExperimental = GL_TRUE; GLenum err = glewInit(); AssertFatal(GLEW_OK == err, avar("Error: %s\n", glewGetErrorString(err)) ); } diff --git a/Engine/source/platformSDL/sdlPlatformGL.cpp b/Engine/source/platformSDL/sdlPlatformGL.cpp index 6562f2c803..b71846d8b3 100644 --- a/Engine/source/platformSDL/sdlPlatformGL.cpp +++ b/Engine/source/platformSDL/sdlPlatformGL.cpp @@ -13,18 +13,16 @@ namespace PlatformGL return; inited = true; - const U32 majorOGL = 4; + const U32 majorOGL = 3; const U32 minorOGL = 2; U32 debugFlag = 0; #ifdef TORQUE_DEBUG debugFlag |= SDL_GL_CONTEXT_DEBUG_FLAG; #endif -#if 0 // cause problem with glew, no extension load SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, majorOGL); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, minorOGL); SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); -#endif SDL_GL_SetAttribute(SDL_GL_CONTEXT_FLAGS, debugFlag); SDL_ClearError(); From 08622e9601da87b2c663042a06ba404e6bc1577a Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Mon, 20 Jul 2015 15:15:04 +0200 Subject: [PATCH 034/324] Use different extension detection mechanism I got this from looking at the code from the glew utility 'glewinfo' on my system it reported the following for GL_ARB_geometry_shader4: OK [MISSING]. This lead me to believe that there are two different ways of determining extensions. The first 'OK' seems to refer to the entrypoint existing while the second one seems to refer to the extension being available. The difference is this: The first OK comes from : GLEW_ARB_geometry_shader4 the global whereas the second 'MISSING' comes from glewGetExtension("GL_ARB_geometry_shader4"). By replacing the gglHasExtension I got the desired result. We may want to implement some caching if we want to keep using GLEW perhaps? Anyway I suggest this merely as a test, I'm not sure if this is a viable long-term solution. --- Engine/source/gfx/gl/tGL/tGL.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/tGL/tGL.h b/Engine/source/gfx/gl/tGL/tGL.h index aa1275ee57..849f490931 100644 --- a/Engine/source/gfx/gl/tGL/tGL.h +++ b/Engine/source/gfx/gl/tGL/tGL.h @@ -24,7 +24,8 @@ #define T_GL_H #include "GL/glew.h" -#define gglHasExtension(EXTENSION) GLEW_##EXTENSION +// Slower but reliably detects extensions +#define gglHasExtension(EXTENSION) glewGetExtension("GL_##EXTENSION") #endif From 320718327f1c77c8ad61b29301dbf949ca63307b Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Mon, 20 Jul 2015 16:27:52 +0200 Subject: [PATCH 035/324] Actually generate a working string for glewGetExtension() I don't know how to 'C' apparently. --- Engine/source/gfx/gl/tGL/tGL.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/tGL/tGL.h b/Engine/source/gfx/gl/tGL/tGL.h index 849f490931..37aefe7f3b 100644 --- a/Engine/source/gfx/gl/tGL/tGL.h +++ b/Engine/source/gfx/gl/tGL/tGL.h @@ -25,7 +25,7 @@ #include "GL/glew.h" // Slower but reliably detects extensions -#define gglHasExtension(EXTENSION) glewGetExtension("GL_##EXTENSION") +#define gglHasExtension(EXTENSION) glewGetExtension("GL_" # EXTENSION) #endif From eadd77272d857d9478baaf94833210e9af5498ed Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Thu, 30 Jul 2015 22:16:13 +0200 Subject: [PATCH 036/324] Add @Azaezel's exception for Win32 "This chunk causes issues on the win8.1/non-SDL side." --- Engine/source/gfx/gl/tGL/tGL.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/tGL/tGL.h b/Engine/source/gfx/gl/tGL/tGL.h index 37aefe7f3b..bb21422b7d 100644 --- a/Engine/source/gfx/gl/tGL/tGL.h +++ b/Engine/source/gfx/gl/tGL/tGL.h @@ -24,8 +24,13 @@ #define T_GL_H #include "GL/glew.h" -// Slower but reliably detects extensions +#if defined (TORQUE_OS_WIN) +// This doesn't work on Mesa drivers. +#define gglHasExtension(EXTENSION) GLEW_##EXTENSION +#else +// Slower but reliably detects extensions on Mesa. #define gglHasExtension(EXTENSION) glewGetExtension("GL_" # EXTENSION) +#endif #endif From 4d3db61e941b33cd32253441df9373ce9eaecb66 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 12 Aug 2015 03:41:49 -0500 Subject: [PATCH 037/324] credit to @MusicMonkey5555 for spotting. asserts for Div/NULLs with mutli-element classes Also includes his magnitude and normalize safe alts --- Engine/source/core/color.h | 1 + Engine/source/math/mPoint2.h | 10 ++++++++++ Engine/source/math/mPoint3.h | 29 ++++++++++++++++++++++++++++- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/Engine/source/core/color.h b/Engine/source/core/color.h index b0620fc4f6..6378e35790 100644 --- a/Engine/source/core/color.h +++ b/Engine/source/core/color.h @@ -503,6 +503,7 @@ inline ColorI& ColorI::operator*=(const S32 in_mul) inline ColorI& ColorI::operator/=(const S32 in_mul) { + AssertFatal(in_mul != 0.0f, "Error, div by zero..."); red = red / in_mul; green = green / in_mul; blue = blue / in_mul; diff --git a/Engine/source/math/mPoint2.h b/Engine/source/math/mPoint2.h index f814ddbbc5..c141400b93 100644 --- a/Engine/source/math/mPoint2.h +++ b/Engine/source/math/mPoint2.h @@ -438,6 +438,7 @@ inline Point2I Point2I::operator/(const Point2I &_vec) const inline Point2I& Point2I::operator/=(const Point2I &_vec) { + AssertFatal(_vec.x != 0 && _vec.y != 0, "Error, div by zero attempted"); x /= _vec.x; y /= _vec.y; return *this; @@ -645,6 +646,7 @@ inline Point2F Point2F::operator/(const Point2F &_vec) const inline Point2F& Point2F::operator/=(const Point2F &_vec) { + AssertFatal(_vec.x != 0 && _vec.y != 0, "Error, div by zero attempted"); x /= _vec.x; y /= _vec.y; return *this; @@ -908,6 +910,14 @@ inline bool mIsNaN( const Point2F &p ) return mIsNaN_F( p.x ) || mIsNaN_F( p.y ); } +/// Return 0 if points are colinear +/// Return positive if p0p1p2 are counter-clockwise +/// Return negative if p0p1p2 are clockwise +inline F64 mCross(const Point2F &p0, const Point2F &p1, const Point2F &pt2) +{ + return (p1.x - p0.x) * (pt2.y - p0.y) - (p1.y - p0.y) * (pt2.x - p0.x); +} + namespace DictHash { diff --git a/Engine/source/math/mPoint3.h b/Engine/source/math/mPoint3.h index 5a85c6cd0a..12af91c4b9 100644 --- a/Engine/source/math/mPoint3.h +++ b/Engine/source/math/mPoint3.h @@ -233,11 +233,13 @@ class Point3D bool isZero() const; F64 len() const; F64 lenSquared() const; + F64 magnitudeSafe() const; //-------------------------------------- Mathematical mutators public: void neg(); void normalize(); + void normalizeSafe(); void normalize(F64 val); void convolve(const Point3D&); void convolveInverse(const Point3D&); @@ -728,11 +730,13 @@ inline Point3F& Point3F::operator*=(const Point3F &_vec) inline Point3F Point3F::operator/(const Point3F &_vec) const { + AssertFatal(_vec.x != 0.0f && _vec.y != 0.0f && _vec.z != 0.0f, "Error, div by zero attempted"); return Point3F(x / _vec.x, y / _vec.y, z / _vec.z); } inline Point3F& Point3F::operator/=(const Point3F &_vec) { + AssertFatal(_vec.x != 0.0f && _vec.y != 0.0f && _vec.z != 0.0f, "Error, div by zero attempted"); x /= _vec.x; y /= _vec.y; z /= _vec.z; @@ -855,7 +859,8 @@ inline F64 Point3D::lenSquared() const inline F64 Point3D::len() const { - return mSqrtD(x*x + y*y + z*z); + F64 temp = x*x + y*y + z*z; + return (temp > 0.0) ? mSqrtD(temp) : 0.0; } inline void Point3D::normalize() @@ -863,6 +868,28 @@ inline void Point3D::normalize() m_point3D_normalize(*this); } +inline F64 Point3D::magnitudeSafe() const +{ + if( isZero() ) + { + return 0.0; + } + else + { + return len(); + } +} + +inline void Point3D::normalizeSafe() +{ + F64 vmag = magnitudeSafe(); + + if( vmag > POINT_EPSILON ) + { + *this *= F64(1.0 / vmag); + } +} + inline void Point3D::normalize(F64 val) { m_point3D_normalize_f(*this, val); From 27112c468aaa1b1938facf6da679e097595ebbac Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 17 Sep 2015 16:14:49 -0500 Subject: [PATCH 038/324] reversion for https://github.com/GarageGames/Torque3D/commit/a4c09d168029dccac872b5816b21f8298f73f5e9 To be honest, can't remember how I was intending to fix that, but this one's causing it to fail to profile twice in a row, so kill it with fire. --- Engine/source/platform/profiler.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Engine/source/platform/profiler.cpp b/Engine/source/platform/profiler.cpp index ca34b45933..fb60453fce 100644 --- a/Engine/source/platform/profiler.cpp +++ b/Engine/source/platform/profiler.cpp @@ -214,12 +214,10 @@ Profiler::~Profiler() void Profiler::reset() { mEnabled = false; // in case we're in a profiler call. - ProfilerData * head = mProfileList; - ProfilerData * curr = NULL; - while ((curr = head) != NULL) + while (mProfileList) { - head = head->mNextProfilerData; - free(curr); + free(mProfileList); + mProfileList = NULL; } for(ProfilerRootData *walk = ProfilerRootData::sRootList; walk; walk = walk->mNextRoot) From a35d788fcc196b333a361e2596c0ead25297f7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francisco=20Monta=C3=B1=C3=A9s=20Garc=C3=ADa?= Date: Sun, 20 Sep 2015 20:44:11 +0200 Subject: [PATCH 039/324] Fix for Issue #1415Move::Move() is not properly initializing bool trigger[MaxTriggerKeys]; from https://github.com/GarageGames/Torque3D/issues/1415 --- Engine/source/T3D/gameBase/moveManager.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Engine/source/T3D/gameBase/moveManager.cpp b/Engine/source/T3D/gameBase/moveManager.cpp index a95164ec7e..2a717bf10d 100644 --- a/Engine/source/T3D/gameBase/moveManager.cpp +++ b/Engine/source/T3D/gameBase/moveManager.cpp @@ -160,12 +160,8 @@ Move::Move() checksum = false; deviceIsKeyboardMouse = false; freeLook = false; - trigger[0] = false; - trigger[1] = false; - trigger[2] = false; - trigger[3] = false; - trigger[4] = false; - trigger[5] = false; + for (S32 i = 0; i< MaxTriggerKeys; i++) + trigger[i] = false; } static inline F32 clampFloatWrap(F32 val) From 4baf410b4f8c931f317d6303990e3a675951b43a Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Tue, 22 Sep 2015 00:57:40 -0400 Subject: [PATCH 040/324] remove GL_EXT_gpu_shader4 --- Engine/source/gfx/gl/gfxGLShader.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLShader.cpp b/Engine/source/gfx/gl/gfxGLShader.cpp index f10a2dd3fa..8de562d9d2 100644 --- a/Engine/source/gfx/gl/gfxGLShader.cpp +++ b/Engine/source/gfx/gl/gfxGLShader.cpp @@ -952,13 +952,6 @@ bool GFXGLShader::_loadShaderFromStream( GLuint shader, buffers.push_back( dStrdup( versionDecl ) ); lengths.push_back( dStrlen( versionDecl ) ); - if(gglHasExtension(EXT_gpu_shader4)) - { - const char *extension = "#extension GL_EXT_gpu_shader4 : enable\r\n"; - buffers.push_back( dStrdup( extension ) ); - lengths.push_back( dStrlen( extension ) ); - } - if(gglHasExtension(ARB_gpu_shader5)) { const char *extension = "#extension GL_ARB_gpu_shader5 : enable\r\n"; From 3630f97ab14867887acb196283ee3c09fc73efed Mon Sep 17 00:00:00 2001 From: irei1as Date: Tue, 22 Sep 2015 19:37:42 +0200 Subject: [PATCH 041/324] mQuat.h change to fix QuatF::angleBetween The old version doesn't have that 2.0f in the return that seems to be needed. Also added normalizing inside so it can be used for not-normalized quaternions too. --- Engine/source/math/mQuat.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Engine/source/math/mQuat.h b/Engine/source/math/mQuat.h index 2ea1b94c1e..c167e4e185 100644 --- a/Engine/source/math/mQuat.h +++ b/Engine/source/math/mQuat.h @@ -227,8 +227,13 @@ inline F32 QuatF::dot( const QuatF &q ) const inline F32 QuatF::angleBetween( const QuatF & q ) { - // angle between to quaternions - return mAcos(x * q.x + y * q.y + z * q.z + w * q.w); + // angle between two quaternions + QuatF base(x,y,z,w); + base=base.normalize(); + QuatF q_norm=q; + q_norm=q_norm.normalize(); + return 2.0f*mAcos(base.dot(q_norm)); } + #endif // _MQUAT_H_ From f128b451702782edbdd6b04664286b2bae79b6f0 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Fri, 25 Sep 2015 22:40:24 +1000 Subject: [PATCH 042/324] Changed order of fmodex library unload. --- Engine/source/sfx/fmod/sfxFMODDevice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/sfx/fmod/sfxFMODDevice.h b/Engine/source/sfx/fmod/sfxFMODDevice.h index f710faa20e..fc15041e93 100644 --- a/Engine/source/sfx/fmod/sfxFMODDevice.h +++ b/Engine/source/sfx/fmod/sfxFMODDevice.h @@ -105,8 +105,8 @@ struct FModFNTable } ~FModFNTable() { - eventDllRef = NULL; dllRef = NULL; + eventDllRef = NULL; delete mutex; } From 1733ecc315197cab5b3f2873a619980d36895c61 Mon Sep 17 00:00:00 2001 From: irei1as Date: Tue, 29 Sep 2015 16:13:01 +0200 Subject: [PATCH 043/324] Updated normalize() It seems normalize() already changes the quaternion so the asignation is not needed. --- Engine/source/math/mQuat.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Engine/source/math/mQuat.h b/Engine/source/math/mQuat.h index c167e4e185..628e298ba5 100644 --- a/Engine/source/math/mQuat.h +++ b/Engine/source/math/mQuat.h @@ -229,11 +229,10 @@ inline F32 QuatF::angleBetween( const QuatF & q ) { // angle between two quaternions QuatF base(x,y,z,w); - base=base.normalize(); + base.normalize(); QuatF q_norm=q; - q_norm=q_norm.normalize(); + q_norm.normalize(); return 2.0f*mAcos(base.dot(q_norm)); } - #endif // _MQUAT_H_ From aa6d078c40ac08e5f1e9c235401f45a221da97ed Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 30 Sep 2015 22:51:59 -0500 Subject: [PATCH 044/324] cuts the shadergen hashkey generator down from a 64 bit to a 32 bit key. (MacOSX 32 bit compatibilty errors. was generating 2k+ shader files. may also address https://github.com/GarageGames/Torque3D/issues/1219) --- Engine/source/shaderGen/shaderGen.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Engine/source/shaderGen/shaderGen.cpp b/Engine/source/shaderGen/shaderGen.cpp index 712b038411..81e7f644fd 100644 --- a/Engine/source/shaderGen/shaderGen.cpp +++ b/Engine/source/shaderGen/shaderGen.cpp @@ -465,12 +465,12 @@ GFXShader* ShaderGen::getShader( const MaterialFeatureData &featureData, const G // Don't get paranoid! This has 1 in 18446744073709551616 // chance for collision... it won't happen in this lifetime. // - U64 hash = Torque::hash64( (const U8*)shaderDescription.c_str(), shaderDescription.length(), 0 ); + U32 hash = Torque::hash( (const U8*)shaderDescription.c_str(), shaderDescription.length(), 0 ); hash = convertHostToLEndian(hash); - U32 high = (U32)( hash >> 32 ); - U32 low = (U32)( hash & 0x00000000FFFFFFFF ); - String cacheKey = String::ToString( "%x%x", high, low ); - + //U32 high = (U32)( hash >> 32 ); + //U32 low = (U32)( hash & 0x00000000FFFFFFFF ); + //String cacheKey = String::ToString( "%x%x", high, low ); + String cacheKey = String::ToString("%x", hash); // return shader if exists GFXShader *match = mProcShaders[cacheKey]; if ( match ) From 183c468ddabbc335d6826452c0bccd38852d15c8 Mon Sep 17 00:00:00 2001 From: wcb Date: Tue, 6 Oct 2015 02:05:34 -0400 Subject: [PATCH 045/324] sfxCompareProvider fix for Full template --- .../Full/game/core/scripts/client/audio.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Templates/Full/game/core/scripts/client/audio.cs b/Templates/Full/game/core/scripts/client/audio.cs index 83a0757544..900ef40b1a 100644 --- a/Templates/Full/game/core/scripts/client/audio.cs +++ b/Templates/Full/game/core/scripts/client/audio.cs @@ -239,26 +239,26 @@ function sfxCompareProvider( %providerA, %providerB ) case "FMOD": return 1; - case "XAudio": - if( %providerB !$= "FMOD" ) - return 1; - else - return -1; - // Prefer OpenAL over anything but FMOD. case "OpenAL": - if( %providerB $= "FMOD" && %providerB !$= "XAudio") + if( %providerB $= "FMOD" ) return -1; else return 1; - - // DSound is just about deprecated, so make that one the last fallback - case "DirectSound": - if( %providerB $= "FMOD" || %providerB $= "OpenAL" && %providerB !$= "XAudio") + + // choose XAudio over DirectSound + case "XAudio": + if( %providerB $= "FMOD" || %providerB $= "OpenAL" ) return -1; else return 0; + case "DirectSound": + if( %providerB !$= "FMOD" && %providerB !$= "OpenAL" && %providerB !$= "XAudio" ) + return 1; + else + return -1; + default: return -1; } From 3c252689f3c362184f55b2aaaf96cd134e4399cc Mon Sep 17 00:00:00 2001 From: wcb Date: Tue, 6 Oct 2015 02:07:01 -0400 Subject: [PATCH 046/324] sfxCompareProvider fix for Empty template --- .../Empty/game/core/scripts/client/audio.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Templates/Empty/game/core/scripts/client/audio.cs b/Templates/Empty/game/core/scripts/client/audio.cs index 83a0757544..900ef40b1a 100644 --- a/Templates/Empty/game/core/scripts/client/audio.cs +++ b/Templates/Empty/game/core/scripts/client/audio.cs @@ -239,26 +239,26 @@ function sfxCompareProvider( %providerA, %providerB ) case "FMOD": return 1; - case "XAudio": - if( %providerB !$= "FMOD" ) - return 1; - else - return -1; - // Prefer OpenAL over anything but FMOD. case "OpenAL": - if( %providerB $= "FMOD" && %providerB !$= "XAudio") + if( %providerB $= "FMOD" ) return -1; else return 1; - - // DSound is just about deprecated, so make that one the last fallback - case "DirectSound": - if( %providerB $= "FMOD" || %providerB $= "OpenAL" && %providerB !$= "XAudio") + + // choose XAudio over DirectSound + case "XAudio": + if( %providerB $= "FMOD" || %providerB $= "OpenAL" ) return -1; else return 0; + case "DirectSound": + if( %providerB !$= "FMOD" && %providerB !$= "OpenAL" && %providerB !$= "XAudio" ) + return 1; + else + return -1; + default: return -1; } From 691a08bb33341500f405fb60fa00c03fe11f9897 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 6 Oct 2015 15:34:26 -0500 Subject: [PATCH 047/324] Backend correction for the rigid vs rigid collision resolver: First line is to ensure similar behavior to current regarding pushback on the object doing the colliding. Second line applies an impulse to the rigid that was collided with. --- Engine/source/T3D/rigid.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/rigid.cpp b/Engine/source/T3D/rigid.cpp index e2441441fb..31f4d411a2 100644 --- a/Engine/source/T3D/rigid.cpp +++ b/Engine/source/T3D/rigid.cpp @@ -156,7 +156,7 @@ bool Rigid::resolveCollision(const Point3F& p, const Point3F &normal, Rigid* rig return false; // Compute impulse - F32 d, n = -nv * (1.0f + restitution * rigid->restitution); + F32 d, n = -nv * (2.0f + restitution * rigid->restitution); Point3F a1,b1,c1; mCross(r1,normal,&a1); invWorldInertia.mulV(a1,&b1); @@ -173,7 +173,7 @@ bool Rigid::resolveCollision(const Point3F& p, const Point3F &normal, Rigid* rig applyImpulse(r1,impulse); impulse.neg(); - applyImpulse(r2,impulse); + rigid->applyImpulse(r2, impulse); return true; } From ad5a7dfe0bffb0568fcfb62b01e49f184433d91c Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 6 Oct 2015 17:00:07 -0500 Subject: [PATCH 048/324] The TypeCommand type brings up a full notepad-esque interface. http://i.imgur.com/fB44GBl.png --- Engine/source/gui/core/guiControl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/gui/core/guiControl.cpp b/Engine/source/gui/core/guiControl.cpp index d0d668ed46..00693fc0b2 100644 --- a/Engine/source/gui/core/guiControl.cpp +++ b/Engine/source/gui/core/guiControl.cpp @@ -270,11 +270,11 @@ void GuiControl::initPersistFields() addField("variable", TypeString, Offset(mConsoleVariable, GuiControl), "Name of the variable to which the value of this control will be synchronized." ); - addField("command", TypeRealString, Offset(mConsoleCommand, GuiControl), + addField("command", TypeCommand, Offset(mConsoleCommand, GuiControl), "Command to execute on the primary action of the control.\n\n" "@note Within this script snippet, the control on which the #command is being executed is bound to " "the global variable $ThisControl." ); - addField("altCommand", TypeRealString, Offset(mAltConsoleCommand, GuiControl), + addField("altCommand", TypeCommand, Offset(mAltConsoleCommand, GuiControl), "Command to execute on the secondary action of the control.\n\n" "@note Within this script snippet, the control on which the #altCommand is being executed is bound to " "the global variable $ThisControl." ); From 6d6055c8738c96bc5910ba9be720c2ac0e2abdeb Mon Sep 17 00:00:00 2001 From: blackwc Date: Wed, 7 Oct 2015 03:28:48 -0400 Subject: [PATCH 049/324] fullscreen and windowed mode cli fix --- Templates/Empty/game/core/main.cs | 4 ++-- Templates/Empty/game/core/scripts/client/canvas.cs | 3 +++ Templates/Full/game/core/main.cs | 4 ++-- Templates/Full/game/core/scripts/client/canvas.cs | 3 +++ 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Templates/Empty/game/core/main.cs b/Templates/Empty/game/core/main.cs index 0baeb93644..f666c948cb 100644 --- a/Templates/Empty/game/core/main.cs +++ b/Templates/Empty/game/core/main.cs @@ -141,11 +141,11 @@ function parseArgs() switch$ (%arg) { case "-fullscreen": - setFullScreen(true); + $cliFullscreen = true; $argUsed[%i]++; case "-windowed": - setFullScreen(false); + $cliFullscreen = false; $argUsed[%i]++; case "-openGL": diff --git a/Templates/Empty/game/core/scripts/client/canvas.cs b/Templates/Empty/game/core/scripts/client/canvas.cs index 69dd6da71d..b3a906f463 100644 --- a/Templates/Empty/game/core/scripts/client/canvas.cs +++ b/Templates/Empty/game/core/scripts/client/canvas.cs @@ -32,6 +32,9 @@ function configureCanvas() if ($pref::Video::mode $= "") $pref::Video::mode = "800 600 false 32 60 0"; + if($cliFullscreen !$="") + $pref::Video::mode = setWord($pref::Video::mode, $WORD::FULLSCREEN, $cliFullScreen); + %resX = getWord($pref::Video::mode, $WORD::RES_X); %resY = getWord($pref::Video::mode, $WORD::RES_Y); %fs = getWord($pref::Video::mode, $WORD::FULLSCREEN); diff --git a/Templates/Full/game/core/main.cs b/Templates/Full/game/core/main.cs index 0baeb93644..f666c948cb 100644 --- a/Templates/Full/game/core/main.cs +++ b/Templates/Full/game/core/main.cs @@ -141,11 +141,11 @@ function parseArgs() switch$ (%arg) { case "-fullscreen": - setFullScreen(true); + $cliFullscreen = true; $argUsed[%i]++; case "-windowed": - setFullScreen(false); + $cliFullscreen = false; $argUsed[%i]++; case "-openGL": diff --git a/Templates/Full/game/core/scripts/client/canvas.cs b/Templates/Full/game/core/scripts/client/canvas.cs index 69dd6da71d..b3a906f463 100644 --- a/Templates/Full/game/core/scripts/client/canvas.cs +++ b/Templates/Full/game/core/scripts/client/canvas.cs @@ -32,6 +32,9 @@ function configureCanvas() if ($pref::Video::mode $= "") $pref::Video::mode = "800 600 false 32 60 0"; + if($cliFullscreen !$="") + $pref::Video::mode = setWord($pref::Video::mode, $WORD::FULLSCREEN, $cliFullScreen); + %resX = getWord($pref::Video::mode, $WORD::RES_X); %resY = getWord($pref::Video::mode, $WORD::RES_Y); %fs = getWord($pref::Video::mode, $WORD::FULLSCREEN); From 5239c2f183787e66393391a9b1d6016d29f8dd65 Mon Sep 17 00:00:00 2001 From: blackwc Date: Wed, 7 Oct 2015 04:56:36 -0400 Subject: [PATCH 050/324] fullscreen and windowed mode cli fix update --- Templates/Empty/game/core/scripts/client/canvas.cs | 4 +++- Templates/Full/game/core/scripts/client/canvas.cs | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Templates/Empty/game/core/scripts/client/canvas.cs b/Templates/Empty/game/core/scripts/client/canvas.cs index b3a906f463..3982b433da 100644 --- a/Templates/Empty/game/core/scripts/client/canvas.cs +++ b/Templates/Empty/game/core/scripts/client/canvas.cs @@ -32,8 +32,10 @@ function configureCanvas() if ($pref::Video::mode $= "") $pref::Video::mode = "800 600 false 32 60 0"; - if($cliFullscreen !$="") + if($cliFullscreen !$="") { $pref::Video::mode = setWord($pref::Video::mode, $WORD::FULLSCREEN, $cliFullScreen); + $cliFullscreen = ""; + } %resX = getWord($pref::Video::mode, $WORD::RES_X); %resY = getWord($pref::Video::mode, $WORD::RES_Y); diff --git a/Templates/Full/game/core/scripts/client/canvas.cs b/Templates/Full/game/core/scripts/client/canvas.cs index b3a906f463..cae9e16b63 100644 --- a/Templates/Full/game/core/scripts/client/canvas.cs +++ b/Templates/Full/game/core/scripts/client/canvas.cs @@ -32,8 +32,10 @@ function configureCanvas() if ($pref::Video::mode $= "") $pref::Video::mode = "800 600 false 32 60 0"; - if($cliFullscreen !$="") + if($cliFullscreen !$= "") { $pref::Video::mode = setWord($pref::Video::mode, $WORD::FULLSCREEN, $cliFullScreen); + $cliFullscreen = ""; + } %resX = getWord($pref::Video::mode, $WORD::RES_X); %resY = getWord($pref::Video::mode, $WORD::RES_Y); From e0c275b56b1660c1ddaa511af3ccc226dd849459 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 7 Oct 2015 05:36:44 -0500 Subject: [PATCH 051/324] missing empty template glow pass debug tool --- .../client/lighting/advanced/lightViz.cs | 34 +++++++++++++++++++ .../lighting/advanced/dbgGlowVisualizeP.hlsl | 31 +++++++++++++++++ .../advanced/gl/dbgGlowVisualizeP.glsl | 34 +++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs index 8c3ecc03c4..22665120df 100644 --- a/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs @@ -84,6 +84,26 @@ singleton PostEffect( AL_DepthVisualize ) return true; } +new ShaderData( AL_GlowVisualizeShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl"; + + samplerNames[0] = "glowBuffer"; + pixVersion = 2.0; +}; + +singleton PostEffect( AL_GlowVisualize ) +{ + shader = AL_GlowVisualizeShader; + stateBlock = AL_DefaultVisualizeState; + texture[0] = "#glowbuffer"; + target = "$backBuffer"; + renderPriority = 9999; +}; new ShaderData( AL_NormalsVisualizeShader ) { @@ -204,6 +224,20 @@ function toggleDepthViz( %enable ) AL_DepthVisualize.disable(); } +/// Toggles the visualization of the AL depth buffer. +function toggleGlowViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_GlowVisualizeVar = AL_GlowVisualize.isEnabled() ? false : true; + AL_GlowVisualize.toggle(); + } + else if ( %enable ) + AL_GlowVisualize.enable(); + else if ( !%enable ) + AL_GlowVisualize.disable(); +} + /// Toggles the visualization of the AL normals buffer. function toggleNormalsViz( %enable ) { diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl new file mode 100644 index 0000000000..3c31c897e8 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl @@ -0,0 +1,31 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "shadergen:/autogenConditioners.h" +#include "../../postfx/postFx.hlsl" + + +float4 main( PFXVertToPix IN, + uniform sampler2D glowBuffer : register(S0) ) : COLOR0 +{ + return tex2D(glowBuffer, IN.uv0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl new file mode 100644 index 0000000000..fa573f07f1 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgGlowVisualizeP.glsl @@ -0,0 +1,34 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postFx/gl/postFX.glsl" + +uniform sampler2D glowBuffer; + +out vec4 OUT_FragColor0; + +void main() +{ + OUT_FragColor0 = texture(glowBuffer, uv0); +} From a100a00c9919d8d0685d49cc86eb8c49623ae733 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 7 Oct 2015 05:40:05 -0500 Subject: [PATCH 052/324] missing ribbon shaders, empty template --- .../common/ribbons/texRibbonShaderP.hlsl | 20 +++++++++++ .../common/ribbons/texRibbonShaderV.hlsl | 34 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 Templates/Empty/game/shaders/common/ribbons/texRibbonShaderP.hlsl create mode 100644 Templates/Empty/game/shaders/common/ribbons/texRibbonShaderV.hlsl diff --git a/Templates/Empty/game/shaders/common/ribbons/texRibbonShaderP.hlsl b/Templates/Empty/game/shaders/common/ribbons/texRibbonShaderP.hlsl new file mode 100644 index 0000000000..ade2a18996 --- /dev/null +++ b/Templates/Empty/game/shaders/common/ribbons/texRibbonShaderP.hlsl @@ -0,0 +1,20 @@ +#define IN_HLSL +#include "../shdrConsts.h" +#include "../torque.hlsl" + +uniform sampler2D ribTex : register(S0); + +struct v2f +{ + + float2 texCoord : TEXCOORD0; + float2 shiftdata : TEXCOORD1; + float4 color : COLOR0; +}; + +float4 main(v2f IN) : COLOR0 +{ + float4 Tex = tex2D(ribTex,IN.texCoord); + Tex.a *= IN.color.a; + return hdrEncode(Tex); +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/ribbons/texRibbonShaderV.hlsl b/Templates/Empty/game/shaders/common/ribbons/texRibbonShaderV.hlsl new file mode 100644 index 0000000000..933fbc0eba --- /dev/null +++ b/Templates/Empty/game/shaders/common/ribbons/texRibbonShaderV.hlsl @@ -0,0 +1,34 @@ +#define IN_HLSL +#include "../shdrConsts.h" + +struct a2v +{ + float2 texCoord : TEXCOORD0; + float2 shiftdata : TEXCOORD1; + float3 normal : NORMAL; + float4 position : POSITION; + float4 color : COLOR0; +}; + +struct v2f +{ + float4 hpos : POSITION; + float2 texCoord : TEXCOORD0; + float2 shiftdata : TEXCOORD1; + float4 color : COLOR0; +}; + +uniform float4x4 modelview; +uniform float3 eyePos; + +v2f main(a2v IN) +{ + v2f OUT; + + OUT.hpos = mul(modelview, IN.position); + OUT.color = IN.color; + OUT.texCoord = IN.texCoord; + OUT.shiftdata = IN.shiftdata; + + return OUT; +} \ No newline at end of file From 2da94ed4eee706d9ec96c4b74eb577bcf191e1a9 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 9 Oct 2015 17:43:00 -0500 Subject: [PATCH 053/324] explosion cover miscalc %distscale can actually end up negative. causes miscalculations for applyimpulse and the like (or even healing if you've hacked in the capacity for negative damage) --- Templates/Full/game/scripts/server/radiusDamage.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Templates/Full/game/scripts/server/radiusDamage.cs b/Templates/Full/game/scripts/server/radiusDamage.cs index 808d3b7d66..db2573459c 100644 --- a/Templates/Full/game/scripts/server/radiusDamage.cs +++ b/Templates/Full/game/scripts/server/radiusDamage.cs @@ -56,7 +56,8 @@ function radiusDamage(%sourceObject, %position, %radius, %damage, %damageType, % // Full damage is applied to anything less than half the radius away, // linear scale from there. %distScale = (%dist < %halfRadius)? 1.0 : 1.0 - ((%dist - %halfRadius) / %halfRadius); - + %distScale = mClamp(%distScale,0.0,1.0); + // Apply the damage %targetObject.damage(%sourceObject, %position, %damage * %coverage * %distScale, %damageType); From ef5bdc66d33164809f81bde73a31c818a2032457 Mon Sep 17 00:00:00 2001 From: blackwc Date: Sun, 11 Oct 2015 02:34:21 -0400 Subject: [PATCH 054/324] fullscreen and windowed mode cli fix update 2 --- Templates/Empty/game/core/scripts/client/canvas.cs | 14 +++++++------- Templates/Full/game/core/scripts/client/canvas.cs | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Templates/Empty/game/core/scripts/client/canvas.cs b/Templates/Empty/game/core/scripts/client/canvas.cs index 3982b433da..5c1d377c5e 100644 --- a/Templates/Empty/game/core/scripts/client/canvas.cs +++ b/Templates/Empty/game/core/scripts/client/canvas.cs @@ -32,11 +32,6 @@ function configureCanvas() if ($pref::Video::mode $= "") $pref::Video::mode = "800 600 false 32 60 0"; - if($cliFullscreen !$="") { - $pref::Video::mode = setWord($pref::Video::mode, $WORD::FULLSCREEN, $cliFullScreen); - $cliFullscreen = ""; - } - %resX = getWord($pref::Video::mode, $WORD::RES_X); %resY = getWord($pref::Video::mode, $WORD::RES_Y); %fs = getWord($pref::Video::mode, $WORD::FULLSCREEN); @@ -44,9 +39,14 @@ function configureCanvas() %rate = getWord($pref::Video::mode, $WORD::REFRESH); %fsaa = getWord($pref::Video::mode, $WORD::AA); - echo("--------------"); - echo("Attempting to set resolution to \"" @ $pref::Video::mode @ "\""); + if($cliFullscreen !$= "") { + %fs = $cliFullscreen; + $cliFullscreen = ""; + } + echo("--------------"); + echo("Attempting to set resolution to \"" @ %resX SPC %resY SPC %fs SPC %bpp SPC %rate SPC %fsaa @ "\""); + %deskRes = getDesktopResolution(); %deskResX = getWord(%deskRes, $WORD::RES_X); %deskResY = getWord(%deskRes, $WORD::RES_Y); diff --git a/Templates/Full/game/core/scripts/client/canvas.cs b/Templates/Full/game/core/scripts/client/canvas.cs index cae9e16b63..5c1d377c5e 100644 --- a/Templates/Full/game/core/scripts/client/canvas.cs +++ b/Templates/Full/game/core/scripts/client/canvas.cs @@ -32,11 +32,6 @@ function configureCanvas() if ($pref::Video::mode $= "") $pref::Video::mode = "800 600 false 32 60 0"; - if($cliFullscreen !$= "") { - $pref::Video::mode = setWord($pref::Video::mode, $WORD::FULLSCREEN, $cliFullScreen); - $cliFullscreen = ""; - } - %resX = getWord($pref::Video::mode, $WORD::RES_X); %resY = getWord($pref::Video::mode, $WORD::RES_Y); %fs = getWord($pref::Video::mode, $WORD::FULLSCREEN); @@ -44,9 +39,14 @@ function configureCanvas() %rate = getWord($pref::Video::mode, $WORD::REFRESH); %fsaa = getWord($pref::Video::mode, $WORD::AA); - echo("--------------"); - echo("Attempting to set resolution to \"" @ $pref::Video::mode @ "\""); + if($cliFullscreen !$= "") { + %fs = $cliFullscreen; + $cliFullscreen = ""; + } + echo("--------------"); + echo("Attempting to set resolution to \"" @ %resX SPC %resY SPC %fs SPC %bpp SPC %rate SPC %fsaa @ "\""); + %deskRes = getDesktopResolution(); %deskResX = getWord(%deskRes, $WORD::RES_X); %deskResY = getWord(%deskRes, $WORD::RES_Y); From 215ae1429ec8ff94f4a54552ddf3c462562ac362 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 31 Aug 2015 22:26:50 -0500 Subject: [PATCH 055/324] ensures opengl texSpaceMat is initialized from the get-go (whines in console otherwise) --- Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index e1ab4e4a4f..7567b55163 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -49,7 +49,7 @@ LangElement * ShaderFeatureGLSL::setupTexSpaceMat( Vector &, / (*texSpaceMat)->setName( "objToTangentSpace" ); MultiLine * meta = new MultiLine; - meta->addStatement( new GenOp( " @;\r\n", new DecOp( *texSpaceMat ) ) ); + meta->addStatement( new GenOp( " @ = float3x3(1,0,0, 0,1,0, 0,0,1);\r\n", new DecOp( *texSpaceMat ) ) ); // Protect against missing normal and tangent. if ( !N || !T ) From 7a3b40a86d6b613d82f56ee135efee8f1c8c1b7a Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 13 Oct 2015 15:19:36 -0500 Subject: [PATCH 056/324] Initial Implementation of the Taml, Asset and Modules systems. Only has example and shape assets currently. --- Engine/lib/tinyxml/tinyxml.h | 51 +- Engine/lib/tinyxml/tinyxmlparser.cpp | 23 - Engine/source/T3D/assets/ExampleAsset.cpp | 127 + Engine/source/T3D/assets/ExampleAsset.h | 70 + Engine/source/T3D/assets/ShapeAsset.cpp | 157 + Engine/source/T3D/assets/ShapeAsset.h | 86 + Engine/source/T3D/trigger.cpp | 2 +- Engine/source/app/mainLoop.cpp | 27 +- Engine/source/assets/assetBase.cpp | 352 ++ Engine/source/assets/assetBase.h | 145 + .../source/assets/assetBase_ScriptBinding.h | 41 + Engine/source/assets/assetDefinition.h | 102 + Engine/source/assets/assetFieldTypes.cpp | 114 + Engine/source/assets/assetFieldTypes.h | 56 + Engine/source/assets/assetManager.cpp | 3017 +++++++++++++++++ Engine/source/assets/assetManager.h | 395 +++ .../assets/assetManager_ScriptBinding.h | 811 +++++ Engine/source/assets/assetPtr.h | 184 + Engine/source/assets/assetQuery.cpp | 121 + Engine/source/assets/assetQuery.h | 90 + .../source/assets/assetQuery_ScriptBinding.h | 85 + Engine/source/assets/assetTagsManifest.cpp | 564 +++ Engine/source/assets/assetTagsManifest.h | 148 + .../assets/assetTagsManifest_ScriptBinding.h | 151 + Engine/source/assets/core.h | 12 + Engine/source/assets/declaredAssets.cpp | 45 + Engine/source/assets/declaredAssets.h | 73 + Engine/source/assets/referencedAssets.cpp | 45 + Engine/source/assets/referencedAssets.h | 73 + .../assets/tamlAssetDeclaredUpdateVisitor.h | 132 + .../source/assets/tamlAssetDeclaredVisitor.h | 189 ++ .../assets/tamlAssetReferencedUpdateVisitor.h | 127 + .../assets/tamlAssetReferencedVisitor.h | 96 + Engine/source/console/compiledEval.cpp | 7 + Engine/source/console/console.cpp | 488 +++ Engine/source/console/console.h | 22 + Engine/source/console/consoleObject.cpp | 186 +- Engine/source/console/consoleObject.h | 146 +- Engine/source/console/consoleTypes.cpp | 50 +- Engine/source/console/dynamicTypes.h | 11 +- Engine/source/console/runtimeClassRep.h | 21 + Engine/source/console/scriptFilename.cpp | 5 + Engine/source/console/simFieldDictionary.h | 2 +- Engine/source/console/simObject.cpp | 307 +- Engine/source/console/simObject.h | 46 +- Engine/source/console/simSet.h | 35 +- Engine/source/core/factoryCache.h | 86 + Engine/source/core/module.cpp | 48 +- Engine/source/core/module.h | 4 +- Engine/source/core/stream/stream.cpp | 13 + Engine/source/core/stream/stream.h | 13 +- Engine/source/core/util/tDictionary.h | 162 + Engine/source/gui/core/guiTypes.cpp | 2 +- Engine/source/math/mathTypes.cpp | 29 +- Engine/source/module/moduleCallbacks.h | 52 + Engine/source/module/moduleDefinition.cpp | 209 ++ Engine/source/module/moduleDefinition.h | 329 ++ .../module/moduleDefinition_ScriptBinding.h | 96 + Engine/source/module/moduleManager.cpp | 2513 ++++++++++++++ Engine/source/module/moduleManager.h | 215 ++ .../module/moduleManager_ScriptBinding.h | 344 ++ .../source/module/moduleMergeDefinition.cpp | 49 + Engine/source/module/moduleMergeDefinition.h | 56 + .../source/module/tamlModuleIdUpdateVisitor.h | 133 + .../source/persistence/_tinyXML/tinystr.cpp | 111 + Engine/source/persistence/_tinyXML/tinystr.h | 305 ++ .../source/persistence/_tinyXML/tinyxml.cpp | 1725 ++++++++++ Engine/source/persistence/_tinyXML/tinyxml.h | 1725 ++++++++++ .../persistence/_tinyXML/tinyxmlerror.cpp | 52 + .../persistence/_tinyXML/tinyxmlparser.cpp | 1638 +++++++++ .../source/persistence/rapidjson/allocators.h | 221 ++ .../source/persistence/rapidjson/document.h | 843 +++++ .../persistence/rapidjson/encodedstream.h | 250 ++ .../source/persistence/rapidjson/encodings.h | 527 +++ .../persistence/rapidjson/filereadstream.h | 74 + .../source/persistence/rapidjson/filestream.h | 49 + .../persistence/rapidjson/filewritestream.h | 73 + .../persistence/rapidjson/internal/pow10.h | 54 + .../persistence/rapidjson/internal/stack.h | 83 + .../persistence/rapidjson/internal/strfunc.h | 24 + .../persistence/rapidjson/prettywriter.h | 160 + .../source/persistence/rapidjson/rapidjson.h | 256 ++ Engine/source/persistence/rapidjson/reader.h | 669 ++++ .../persistence/rapidjson/stringbuffer.h | 50 + Engine/source/persistence/rapidjson/writer.h | 249 ++ .../taml/binary/tamlBinaryReader.cpp | 429 +++ .../taml/binary/tamlBinaryReader.h | 68 + .../taml/binary/tamlBinaryWriter.cpp | 297 ++ .../taml/binary/tamlBinaryWriter.h | 59 + Engine/source/persistence/taml/fsTinyXml.cpp | 747 ++++ Engine/source/persistence/taml/fsTinyXml.h | 248 ++ .../persistence/taml/json/tamlJSONParser.cpp | 258 ++ .../persistence/taml/json/tamlJSONParser.h | 57 + .../persistence/taml/json/tamlJSONReader.cpp | 686 ++++ .../persistence/taml/json/tamlJSONReader.h | 76 + .../persistence/taml/json/tamlJSONWriter.cpp | 367 ++ .../persistence/taml/json/tamlJSONWriter.h | 66 + Engine/source/persistence/taml/taml.cpp | 1544 +++++++++ Engine/source/persistence/taml/taml.h | 218 ++ .../source/persistence/taml/tamlCallbacks.h | 61 + Engine/source/persistence/taml/tamlChildren.h | 49 + Engine/source/persistence/taml/tamlCustom.cpp | 72 + Engine/source/persistence/taml/tamlCustom.h | 785 +++++ Engine/source/persistence/taml/tamlParser.h | 58 + Engine/source/persistence/taml/tamlVisitor.h | 111 + .../source/persistence/taml/tamlWriteNode.cpp | 66 + .../source/persistence/taml/tamlWriteNode.h | 116 + .../persistence/taml/taml_ScriptBinding.h | 311 ++ .../persistence/taml/xml/tamlXmlParser.cpp | 193 ++ .../persistence/taml/xml/tamlXmlParser.h | 57 + .../persistence/taml/xml/tamlXmlReader.cpp | 484 +++ .../persistence/taml/xml/tamlXmlReader.h | 73 + .../persistence/taml/xml/tamlXmlWriter.cpp | 301 ++ .../persistence/taml/xml/tamlXmlWriter.h | 59 + Engine/source/platform/platform.h | 3 + Engine/source/platform/platformFileIO.cpp | 89 + Engine/source/platformWin32/winFileio.cpp | 11 + .../renderInstance/renderPassStateToken.cpp | 2 +- Engine/source/sfx/sfxTypes.cpp | 14 +- Engine/source/sim/netConnection.h | 12 + Templates/Empty/game/main.cs | 5 + Templates/Full/game/main.cs | 5 + Tools/projectGenerator/modules/T3D.inc | 9 + 123 files changed, 30424 insertions(+), 170 deletions(-) create mode 100644 Engine/source/T3D/assets/ExampleAsset.cpp create mode 100644 Engine/source/T3D/assets/ExampleAsset.h create mode 100644 Engine/source/T3D/assets/ShapeAsset.cpp create mode 100644 Engine/source/T3D/assets/ShapeAsset.h create mode 100644 Engine/source/assets/assetBase.cpp create mode 100644 Engine/source/assets/assetBase.h create mode 100644 Engine/source/assets/assetBase_ScriptBinding.h create mode 100644 Engine/source/assets/assetDefinition.h create mode 100644 Engine/source/assets/assetFieldTypes.cpp create mode 100644 Engine/source/assets/assetFieldTypes.h create mode 100644 Engine/source/assets/assetManager.cpp create mode 100644 Engine/source/assets/assetManager.h create mode 100644 Engine/source/assets/assetManager_ScriptBinding.h create mode 100644 Engine/source/assets/assetPtr.h create mode 100644 Engine/source/assets/assetQuery.cpp create mode 100644 Engine/source/assets/assetQuery.h create mode 100644 Engine/source/assets/assetQuery_ScriptBinding.h create mode 100644 Engine/source/assets/assetTagsManifest.cpp create mode 100644 Engine/source/assets/assetTagsManifest.h create mode 100644 Engine/source/assets/assetTagsManifest_ScriptBinding.h create mode 100644 Engine/source/assets/core.h create mode 100644 Engine/source/assets/declaredAssets.cpp create mode 100644 Engine/source/assets/declaredAssets.h create mode 100644 Engine/source/assets/referencedAssets.cpp create mode 100644 Engine/source/assets/referencedAssets.h create mode 100644 Engine/source/assets/tamlAssetDeclaredUpdateVisitor.h create mode 100644 Engine/source/assets/tamlAssetDeclaredVisitor.h create mode 100644 Engine/source/assets/tamlAssetReferencedUpdateVisitor.h create mode 100644 Engine/source/assets/tamlAssetReferencedVisitor.h create mode 100644 Engine/source/core/factoryCache.h create mode 100644 Engine/source/module/moduleCallbacks.h create mode 100644 Engine/source/module/moduleDefinition.cpp create mode 100644 Engine/source/module/moduleDefinition.h create mode 100644 Engine/source/module/moduleDefinition_ScriptBinding.h create mode 100644 Engine/source/module/moduleManager.cpp create mode 100644 Engine/source/module/moduleManager.h create mode 100644 Engine/source/module/moduleManager_ScriptBinding.h create mode 100644 Engine/source/module/moduleMergeDefinition.cpp create mode 100644 Engine/source/module/moduleMergeDefinition.h create mode 100644 Engine/source/module/tamlModuleIdUpdateVisitor.h create mode 100644 Engine/source/persistence/_tinyXML/tinystr.cpp create mode 100644 Engine/source/persistence/_tinyXML/tinystr.h create mode 100644 Engine/source/persistence/_tinyXML/tinyxml.cpp create mode 100644 Engine/source/persistence/_tinyXML/tinyxml.h create mode 100644 Engine/source/persistence/_tinyXML/tinyxmlerror.cpp create mode 100644 Engine/source/persistence/_tinyXML/tinyxmlparser.cpp create mode 100644 Engine/source/persistence/rapidjson/allocators.h create mode 100644 Engine/source/persistence/rapidjson/document.h create mode 100644 Engine/source/persistence/rapidjson/encodedstream.h create mode 100644 Engine/source/persistence/rapidjson/encodings.h create mode 100644 Engine/source/persistence/rapidjson/filereadstream.h create mode 100644 Engine/source/persistence/rapidjson/filestream.h create mode 100644 Engine/source/persistence/rapidjson/filewritestream.h create mode 100644 Engine/source/persistence/rapidjson/internal/pow10.h create mode 100644 Engine/source/persistence/rapidjson/internal/stack.h create mode 100644 Engine/source/persistence/rapidjson/internal/strfunc.h create mode 100644 Engine/source/persistence/rapidjson/prettywriter.h create mode 100644 Engine/source/persistence/rapidjson/rapidjson.h create mode 100644 Engine/source/persistence/rapidjson/reader.h create mode 100644 Engine/source/persistence/rapidjson/stringbuffer.h create mode 100644 Engine/source/persistence/rapidjson/writer.h create mode 100644 Engine/source/persistence/taml/binary/tamlBinaryReader.cpp create mode 100644 Engine/source/persistence/taml/binary/tamlBinaryReader.h create mode 100644 Engine/source/persistence/taml/binary/tamlBinaryWriter.cpp create mode 100644 Engine/source/persistence/taml/binary/tamlBinaryWriter.h create mode 100644 Engine/source/persistence/taml/fsTinyXml.cpp create mode 100644 Engine/source/persistence/taml/fsTinyXml.h create mode 100644 Engine/source/persistence/taml/json/tamlJSONParser.cpp create mode 100644 Engine/source/persistence/taml/json/tamlJSONParser.h create mode 100644 Engine/source/persistence/taml/json/tamlJSONReader.cpp create mode 100644 Engine/source/persistence/taml/json/tamlJSONReader.h create mode 100644 Engine/source/persistence/taml/json/tamlJSONWriter.cpp create mode 100644 Engine/source/persistence/taml/json/tamlJSONWriter.h create mode 100644 Engine/source/persistence/taml/taml.cpp create mode 100644 Engine/source/persistence/taml/taml.h create mode 100644 Engine/source/persistence/taml/tamlCallbacks.h create mode 100644 Engine/source/persistence/taml/tamlChildren.h create mode 100644 Engine/source/persistence/taml/tamlCustom.cpp create mode 100644 Engine/source/persistence/taml/tamlCustom.h create mode 100644 Engine/source/persistence/taml/tamlParser.h create mode 100644 Engine/source/persistence/taml/tamlVisitor.h create mode 100644 Engine/source/persistence/taml/tamlWriteNode.cpp create mode 100644 Engine/source/persistence/taml/tamlWriteNode.h create mode 100644 Engine/source/persistence/taml/taml_ScriptBinding.h create mode 100644 Engine/source/persistence/taml/xml/tamlXmlParser.cpp create mode 100644 Engine/source/persistence/taml/xml/tamlXmlParser.h create mode 100644 Engine/source/persistence/taml/xml/tamlXmlReader.cpp create mode 100644 Engine/source/persistence/taml/xml/tamlXmlReader.h create mode 100644 Engine/source/persistence/taml/xml/tamlXmlWriter.cpp create mode 100644 Engine/source/persistence/taml/xml/tamlXmlWriter.h diff --git a/Engine/lib/tinyxml/tinyxml.h b/Engine/lib/tinyxml/tinyxml.h index a3589e5b26..33e38b5358 100644 --- a/Engine/lib/tinyxml/tinyxml.h +++ b/Engine/lib/tinyxml/tinyxml.h @@ -283,10 +283,9 @@ class TiXmlBase TIXML_ERROR_STRING_COUNT }; -protected: - static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); +protected: inline static bool IsWhiteSpace( char c ) { return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); @@ -360,6 +359,7 @@ class TiXmlBase } } +public: // Return true if the next characters in the stream are any of the endTag sequences. // Ignore case only works for english, and should only be relied on when comparing // to English words: StringEqual( p, "version", true ) is fine. @@ -368,6 +368,7 @@ class TiXmlBase bool ignoreCase, TiXmlEncoding encoding ); +protected: static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; TiXmlCursor location; @@ -375,10 +376,13 @@ class TiXmlBase /// Field containing a generic user pointer void* userData; +public: // None of these methods are reliable for any language except English. // Good for approximation, not great for accuracy. static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); + +protected: inline static int ToLower( int v, TiXmlEncoding encoding ) { if ( encoding == TIXML_ENCODING_UTF8 ) @@ -750,9 +754,10 @@ class TiXmlNode : public TiXmlBase #endif // Figure out what is at *p, and parse it. Returns null if it is not an xml node. - TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); - + virtual TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); +public: TiXmlNode* parent; +protected: NodeType type; TiXmlNode* firstChild; @@ -1047,7 +1052,7 @@ class TiXmlElement : public TiXmlNode /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ - void SetAttribute( const char* name, const char * _value ); + virtual void SetAttribute( const char* name, const char * _value ); #ifdef TIXML_USE_STL const std::string* Attribute( const std::string& name ) const; @@ -1067,7 +1072,7 @@ class TiXmlElement : public TiXmlNode /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. */ - void SetAttribute( const char * name, int value ); + virtual void SetAttribute( const char * name, int value ); /** Sets an attribute of name to a given value. The attribute will be created if it does not exist, or changed if it does. @@ -1152,7 +1157,6 @@ class TiXmlElement : public TiXmlNode */ const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); -private: TiXmlAttributeSet attributeSet; }; @@ -1264,7 +1268,6 @@ protected : virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif -private: bool cdata; // true if this should be input and output as a CDATA style text element }; @@ -1336,8 +1339,6 @@ class TiXmlDeclaration : public TiXmlNode virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif -private: - TIXML_STRING version; TIXML_STRING encoding; TIXML_STRING standalone; @@ -1416,9 +1417,9 @@ class TiXmlDocument : public TiXmlNode /// Save a file using the current document value. Returns true if successful. bool SaveFile() const; /// Load a file using the given filename. Returns true if successful. - bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + virtual bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); /// Save a file using the given filename. Returns true if successful. - bool SaveFile( const char * filename ) const; + virtual bool SaveFile( const char * filename ) const; /** Load a file using the given FILE*. Returns true if successful. Note that this method doesn't stream - the entire object pointed at by the FILE* will be interpreted as an XML file. TinyXML doesn't stream in XML from the current @@ -1543,14 +1544,15 @@ protected : virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); #endif -private: void CopyTo( TiXmlDocument* target ) const; +private: bool error; int errorId; TIXML_STRING errorDesc; int tabsize; TiXmlCursor errorLocation; +protected: bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. }; @@ -1797,6 +1799,29 @@ class TiXmlPrinter : public TiXmlVisitor TIXML_STRING lineBreak; }; +class TiXmlParsingData +{ + friend class TiXmlDocument; + public: + void Stamp( const char* now, TiXmlEncoding encoding ); + + const TiXmlCursor& Cursor() const { return cursor; } + + private: + // Only used by the document! + TiXmlParsingData( const char* start, int _tabsize, int row, int col ) + { + assert( start ); + stamp = start; + tabsize = _tabsize; + cursor.row = row; + cursor.col = col; + } + + TiXmlCursor cursor; + const char* stamp; + int tabsize; +}; #ifdef _MSC_VER #pragma warning( pop ) diff --git a/Engine/lib/tinyxml/tinyxmlparser.cpp b/Engine/lib/tinyxml/tinyxmlparser.cpp index 81b7eae96b..7bf2705cb6 100644 --- a/Engine/lib/tinyxml/tinyxmlparser.cpp +++ b/Engine/lib/tinyxml/tinyxmlparser.cpp @@ -168,29 +168,6 @@ void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* leng } -class TiXmlParsingData -{ - friend class TiXmlDocument; - public: - void Stamp( const char* now, TiXmlEncoding encoding ); - - const TiXmlCursor& Cursor() const { return cursor; } - - private: - // Only used by the document! - TiXmlParsingData( const char* start, int _tabsize, int row, int col ) - { - assert( start ); - stamp = start; - tabsize = _tabsize; - cursor.row = row; - cursor.col = col; - } - - TiXmlCursor cursor; - const char* stamp; - int tabsize; -}; void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) diff --git a/Engine/source/T3D/assets/ExampleAsset.cpp b/Engine/source/T3D/assets/ExampleAsset.cpp new file mode 100644 index 0000000000..8a0c09d1e1 --- /dev/null +++ b/Engine/source/T3D/assets/ExampleAsset.cpp @@ -0,0 +1,127 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _EXAMPLE_ASSET_H_ +#include "ExampleAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(ExampleAsset); + +ConsoleType(ExampleAssetPtr, TypeExampleAssetPtr, ExampleAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeExampleAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeExampleAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +ExampleAsset::ExampleAsset() : +mAcquireReferenceCount(0), +mpOwningAssetManager(NULL), +mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); +} + +//----------------------------------------------------------------------------- + +ExampleAsset::~ExampleAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void ExampleAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + +} + +//------------------------------------------------------------------------------ + +void ExampleAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/ExampleAsset.h b/Engine/source/T3D/assets/ExampleAsset.h new file mode 100644 index 0000000000..43532a6e5a --- /dev/null +++ b/Engine/source/T3D/assets/ExampleAsset.h @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef _EXAMPLE_ASSET_H_ +#define _EXAMPLE_ASSET_H_ + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- +class ExampleAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + +public: + ExampleAsset(); + virtual ~ExampleAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Declare Console Object. + DECLARE_CONOBJECT(ExampleAsset); + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} +}; + +DefineConsoleType(TypeExampleAssetPtr, ExampleAsset) + +#endif // _ASSET_BASE_H_ + diff --git a/Engine/source/T3D/assets/ShapeAsset.cpp b/Engine/source/T3D/assets/ShapeAsset.cpp new file mode 100644 index 0000000000..9b2aec3de7 --- /dev/null +++ b/Engine/source/T3D/assets/ShapeAsset.cpp @@ -0,0 +1,157 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _SHAPE_ASSET_H_ +#include "ShapeAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +#include "core/resourceManager.h" + +// Debug Profiling. +#include "platform/profiler.h" + +static U32 execDepth = 0; +static U32 journalDepth = 1; + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(ShapeAsset); + +ConsoleType(TestAssetPtr, TypeShapeAssetPtr, ShapeAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeShapeAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeShapeAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +ShapeAsset::ShapeAsset() : +mAcquireReferenceCount(0), +mpOwningAssetManager(NULL), +mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); +} + +//----------------------------------------------------------------------------- + +ShapeAsset::~ShapeAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void ShapeAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField("fileName", TypeFilename, Offset(mFileName, ShapeAsset), "Path to the script file we want to execute"); +} + +void ShapeAsset::initializeAsset() +{ + // Call parent. + Parent::initializeAsset(); + + if (dStrcmp(mFileName, "") == 0) + return; + + loadShape(); +} + +bool ShapeAsset::loadShape() +{ + mShape = ResourceManager::get().load(mFileName); + + if (!mShape) + { + Con::errorf("StaticMesh::updateShape : failed to load shape file!"); + return false; //if it failed to load, bail out + } + + return true; +} + +//------------------------------------------------------------------------------ + +void ShapeAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h new file mode 100644 index 0000000000..81b716d084 --- /dev/null +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef _SHAPE_ASSET_H_ +#define _SHAPE_ASSET_H_ + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +#ifndef _TSSHAPE_H_ +#include "ts/TSShape.h" +#endif +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif + +//----------------------------------------------------------------------------- +class ShapeAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + +protected: + StringTableEntry mFileName; + Resource mShape; + +public: + ShapeAsset(); + virtual ~ShapeAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + virtual void initializeAsset(); + + /// Declare Console Object. + DECLARE_CONOBJECT(ShapeAsset); + + bool loadShape(); + + TSShape* getShape() { return mShape; } + +protected: + virtual void onAssetRefresh(void) {} +}; + +DefineConsoleType(TypeShapeAssetPtr, ShapeAsset) + +#endif // _ASSET_BASE_H_ + diff --git a/Engine/source/T3D/trigger.cpp b/Engine/source/T3D/trigger.cpp index 7dbcba6183..64305314f9 100644 --- a/Engine/source/T3D/trigger.cpp +++ b/Engine/source/T3D/trigger.cpp @@ -236,7 +236,7 @@ DECLARE_STRUCT( Polyhedron ); IMPLEMENT_STRUCT( Polyhedron, Polyhedron,, "" ) END_IMPLEMENT_STRUCT; -ConsoleType( floatList, TypeTriggerPolyhedron, Polyhedron ) +ConsoleType(floatList, TypeTriggerPolyhedron, Polyhedron, "") ConsoleGetType( TypeTriggerPolyhedron ) diff --git a/Engine/source/app/mainLoop.cpp b/Engine/source/app/mainLoop.cpp index 4ee92b1171..7e9034699b 100644 --- a/Engine/source/app/mainLoop.cpp +++ b/Engine/source/app/mainLoop.cpp @@ -65,6 +65,14 @@ #include "platform/platformVFS.h" #endif +#ifndef _MODULE_MANAGER_H +#include "module/moduleManager.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + DITTS( F32, gTimeScale, 1.0 ); DITTS( U32, gTimeAdvance, 0 ); DITTS( U32, gFrameSkip, 0 ); @@ -257,7 +265,7 @@ void StandardMainLoop::init() // Initialize modules. - ModuleManager::initializeSystem(); + EngineModuleManager::initializeSystem(); // Initialise ITickable. #ifdef TORQUE_TGB_ONLY @@ -288,6 +296,15 @@ void StandardMainLoop::init() Con::addVariable("MiniDump::Params", TypeString, &gMiniDumpParams); Con::addVariable("MiniDump::ExecDir", TypeString, &gMiniDumpExecDir); #endif + + // Register the module manager. + ModuleDatabase.registerObject("ModuleDatabase"); + + // Register the asset database. + AssetDatabase.registerObject("AssetDatabase"); + + // Register the asset database as a module listener. + ModuleDatabase.addListener(&AssetDatabase); ActionMap* globalMap = new ActionMap; globalMap->registerObject("GlobalActionMap"); @@ -317,10 +334,16 @@ void StandardMainLoop::shutdown() delete tm; preShutdown(); + + // Unregister the module database. + ModuleDatabase.unregisterObject(); + + // Unregister the asset database. + AssetDatabase.unregisterObject(); // Shut down modules. - ModuleManager::shutdownSystem(); + EngineModuleManager::shutdownSystem(); ThreadPool::GlobalThreadPool::deleteSingleton(); diff --git a/Engine/source/assets/assetBase.cpp b/Engine/source/assets/assetBase.cpp new file mode 100644 index 0000000000..e5cf9bf6c9 --- /dev/null +++ b/Engine/source/assets/assetBase.cpp @@ -0,0 +1,352 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script bindings. +#include "assetBase_ScriptBinding.h" + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(AssetBase); + +//----------------------------------------------------------------------------- + +StringTableEntry assetNameField = StringTable->insert("AssetName"); +StringTableEntry assetDescriptionField = StringTable->insert("AssetDescription"); +StringTableEntry assetCategoryField = StringTable->insert("AssetCategory"); +StringTableEntry assetAutoUnloadField = StringTable->insert("AssetAutoUnload"); +StringTableEntry assetInternalField = StringTable->insert("AssetInternal"); +StringTableEntry assetPrivateField = StringTable->insert("AssetPrivate"); + +//----------------------------------------------------------------------------- + +AssetBase::AssetBase() : +mAcquireReferenceCount(0), +mpOwningAssetManager(NULL), +mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); +} + +//----------------------------------------------------------------------------- + +AssetBase::~AssetBase() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void AssetBase::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + // Asset configuration. + addProtectedField(assetNameField, TypeString, 0, &setAssetName, &getAssetName, &writeAssetName, "The name of the asset. The is not a unique identification like an asset Id."); + addProtectedField(assetDescriptionField, TypeString, 0, &setAssetDescription, &getAssetDescription, &writeAssetDescription, "The simple description of the asset contents."); + addProtectedField(assetCategoryField, TypeString, 0, &setAssetCategory, &getAssetCategory, &writeAssetCategory, "An arbitrary category that can be used to categorized assets."); + addProtectedField(assetAutoUnloadField, TypeBool, 0, &setAssetAutoUnload, &getAssetAutoUnload, &writeAssetAutoUnload, "Whether the asset is automatically unloaded when an asset is released and has no other acquisitions or not."); + addProtectedField(assetInternalField, TypeBool, 0, &setAssetInternal, &getAssetInternal, &writeAssetInternal, "Whether the asset is used internally only or not."); + addProtectedField(assetPrivateField, TypeBool, 0, &defaultProtectedNotSetFn, &getAssetPrivate, &defaultProtectedNotWriteFn, "Whether the asset is private or not."); +} + +//------------------------------------------------------------------------------ + +void AssetBase::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); + + // Cast to asset. + AssetBase* pAsset = static_cast(object); + + // Sanity! + AssertFatal(pAsset != NULL, "AssetBase::copyTo() - Object is not the correct type."); + + // Copy state. + pAsset->setAssetName(getAssetName()); + pAsset->setAssetDescription(getAssetDescription()); + pAsset->setAssetCategory(getAssetCategory()); + pAsset->setAssetAutoUnload(getAssetAutoUnload()); + pAsset->setAssetInternal(getAssetInternal()); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetDescription(const char* pAssetDescription) +{ + // Fetch asset description. + StringTableEntry assetDescription = StringTable->insert(pAssetDescription); + + // Ignore no change. + if (mpAssetDefinition->mAssetDescription == assetDescription) + return; + + // Update. + mpAssetDefinition->mAssetDescription = assetDescription; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetCategory(const char* pAssetCategory) +{ + // Fetch asset category. + StringTableEntry assetCategory = StringTable->insert(pAssetCategory); + + // Ignore no change. + if (mpAssetDefinition->mAssetCategory == assetCategory) + return; + + // Update. + mpAssetDefinition->mAssetCategory = assetCategory; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetAutoUnload(const bool autoUnload) +{ + // Ignore no change. + if (mpAssetDefinition->mAssetAutoUnload == autoUnload) + return; + + // Update. + mpAssetDefinition->mAssetAutoUnload = autoUnload; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +void AssetBase::setAssetInternal(const bool assetInternal) +{ + // Ignore no change, + if (mpAssetDefinition->mAssetInternal == assetInternal) + return; + + // Update. + mpAssetDefinition->mAssetInternal = assetInternal; + + // Refresh the asset. + refreshAsset(); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetBase::expandAssetFilePath(const char* pAssetFilePath) const +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_ExpandAssetFilePath); + + // Sanity! + AssertFatal(pAssetFilePath != NULL, "Cannot expand a NULL asset path."); + + // Fetch asset file-path length. + const U32 assetFilePathLength = dStrlen(pAssetFilePath); + + // Are there any characters in the path? + if (assetFilePathLength == 0) + { + // No, so return empty. + return StringTable->EmptyString(); + } + + // Fetch the asset base-path hint. + StringTableEntry assetBasePathHint; + if (getOwned() && !getAssetPrivate()) + { + assetBasePathHint = mpOwningAssetManager->getAssetPath(getAssetId()); + } + else + { + assetBasePathHint = NULL; + } + + // Expand the path with the asset base-path hint. + char assetFilePathBuffer[1024]; + Con::expandPath(assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath, assetBasePathHint); + return StringTable->insert(assetFilePathBuffer); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetBase::collapseAssetFilePath(const char* pAssetFilePath) const +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_CollapseAssetFilePath); + + // Sanity! + AssertFatal(pAssetFilePath != NULL, "Cannot collapse a NULL asset path."); + + // Fetch asset file-path length. + const U32 assetFilePathLength = dStrlen(pAssetFilePath); + + // Are there any characters in the path? + if (assetFilePathLength == 0) + { + // No, so return empty. + return StringTable->EmptyString(); + } + + char assetFilePathBuffer[1024]; + + // Is the asset not owned or private? + if (!getOwned() || getAssetPrivate()) + { + // Yes, so we can only collapse the path using the platform layer. + Con::collapsePath(assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath); + return StringTable->insert(assetFilePathBuffer); + } + + // Fetch asset base-path. + StringTableEntry assetBasePath = mpOwningAssetManager->getAssetPath(getAssetId()); + + // Is the asset file-path location within the asset base-path? + if (Con::isBasePath(pAssetFilePath, assetBasePath)) + { + // Yes, so fetch path relative to the asset base-path. + StringTableEntry relativePath = Platform::makeRelativePathName(pAssetFilePath, assetBasePath); + + // Format the collapsed path. + dSprintf(assetFilePathBuffer, sizeof(assetFilePathBuffer), "%s", relativePath); + } + else + { + // No, so we can collapse the path using the platform layer. + Con::collapsePath(assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath); + } + + return StringTable->insert(assetFilePathBuffer); +} + +//----------------------------------------------------------------------------- + +void AssetBase::refreshAsset(void) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_RefreshAsset); + + // Finish if asset is not owned or is not initialized. + if (mpOwningAssetManager == NULL || !mAssetInitialized) + return; + + // Yes, so refresh the asset via the asset manager. + mpOwningAssetManager->refreshAsset(getAssetId()); +} + +//----------------------------------------------------------------------------- + +void AssetBase::acquireAssetReference(void) +{ + // Acquired the acquired reference count. + if (mpOwningAssetManager != NULL) + mpOwningAssetManager->acquireAcquiredReferenceCount(); + + mAcquireReferenceCount++; +} + +//----------------------------------------------------------------------------- + +bool AssetBase::releaseAssetReference(void) +{ + // Are there any acquisition references? + if (mAcquireReferenceCount == 0) + { + // Return "unload" unless auto unload is off. + return mpAssetDefinition->mAssetAutoUnload; + } + + // Release the acquired reference count. + if (mpOwningAssetManager != NULL) + mpOwningAssetManager->releaseAcquiredReferenceCount(); + + // Release reference. + mAcquireReferenceCount--; + + // Are there any acquisition references? + if (mAcquireReferenceCount == 0) + { + // No, so return "unload" unless auto unload is off. + return mpAssetDefinition->mAssetAutoUnload; + } + + // Return "don't unload". + return false; +} + +//----------------------------------------------------------------------------- + +void AssetBase::setOwned(AssetManager* pAssetManager, AssetDefinition* pAssetDefinition) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetBase_setOwned); + + // Sanity! + AssertFatal(pAssetManager != NULL, "Cannot set asset ownership with NULL asset manager."); + AssertFatal(mpOwningAssetManager == NULL, "Cannot set asset ownership if it is already owned."); + AssertFatal(pAssetDefinition != NULL, "Cannot set asset ownership with a NULL asset definition."); + AssertFatal(mpAssetDefinition != NULL, "Asset ownership assigned but has a NULL asset definition."); + AssertFatal(mpAssetDefinition->mAssetName == pAssetDefinition->mAssetName, "Asset ownership differs by asset name."); + AssertFatal(mpAssetDefinition->mAssetDescription == pAssetDefinition->mAssetDescription, "Asset ownership differs by asset description."); + AssertFatal(mpAssetDefinition->mAssetCategory == pAssetDefinition->mAssetCategory, "Asset ownership differs by asset category."); + AssertFatal(mpAssetDefinition->mAssetAutoUnload == pAssetDefinition->mAssetAutoUnload, "Asset ownership differs by asset auto-unload flag."); + AssertFatal(mpAssetDefinition->mAssetInternal == pAssetDefinition->mAssetInternal, "Asset ownership differs by asset internal flag."); + + // Transfer asset definition ownership state. + delete mpAssetDefinition; + mpAssetDefinition = pAssetDefinition; + + // Flag as owned. + // NOTE: This must be done prior to initializing the asset so any initialization can assume ownership. + mpOwningAssetManager = pAssetManager; + + // Initialize the asset. + initializeAsset(); + + // Flag asset as initialized. + mAssetInitialized = true; +} \ No newline at end of file diff --git a/Engine/source/assets/assetBase.h b/Engine/source/assets/assetBase.h new file mode 100644 index 0000000000..8709c54742 --- /dev/null +++ b/Engine/source/assets/assetBase.h @@ -0,0 +1,145 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef _ASSET_BASE_H_ +#define _ASSET_BASE_H_ + +#ifndef _ASSET_DEFINITION_H_ +#include "assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- + +class AssetManager; + +//----------------------------------------------------------------------------- + +extern StringTableEntry assetNameField; +extern StringTableEntry assetDescriptionField; +extern StringTableEntry assetCategoryField; +extern StringTableEntry assetInternalField; +extern StringTableEntry assetPrivateField; +extern StringTableEntry assetAutoUnloadField; + +//#define ASSET_BASE_ASSETNAME_FIELD "AssetName" +//#define ASSET_BASE_ASSETDESCRIPTION_FIELD "AssetDescription" +//#define ASSET_BASE_ASSETCATEGORY_FIELD "AssetCategory" +//#define ASSET_BASE_ASSETINTERNAL_FIELD "AssetInternal" +//#define ASSET_BASE_ASSETPRIVATE_FIELD "AssetPrivate" +//#define ASSET_BASE_AUTOUNLOAD_FIELD "AssetAutoUnload" + +//----------------------------------------------------------------------------- + +class AssetBase : public SimObject +{ + friend class AssetManager; + + typedef SimObject Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + +public: + AssetBase(); + virtual ~AssetBase(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Asset configuration. + inline void setAssetName(const char* pAssetName) { if (mpOwningAssetManager == NULL) mpAssetDefinition->mAssetName = StringTable->insert(pAssetName); } + inline StringTableEntry getAssetName(void) const { return mpAssetDefinition->mAssetName; } + void setAssetDescription(const char* pAssetDescription); + inline StringTableEntry getAssetDescription(void) const { return mpAssetDefinition->mAssetDescription; } + void setAssetCategory(const char* pAssetCategory); + inline StringTableEntry getAssetCategory(void) const { return mpAssetDefinition->mAssetCategory; } + void setAssetAutoUnload(const bool autoUnload); + inline bool getAssetAutoUnload(void) const { return mpAssetDefinition->mAssetAutoUnload; } + void setAssetInternal(const bool assetInternal); + inline bool getAssetInternal(void) const { return mpAssetDefinition->mAssetInternal; } + inline bool getAssetPrivate(void) const { return mpAssetDefinition->mAssetPrivate; } + inline StringTableEntry getAssetType(void) const { return mpAssetDefinition->mAssetType; } + + inline S32 getAcquiredReferenceCount(void) const { return mAcquireReferenceCount; } + inline bool getOwned(void) const { return mpOwningAssetManager != NULL; } + + // Asset Id is only available once registered with the asset manager. + inline StringTableEntry getAssetId(void) const { return mpAssetDefinition->mAssetId; } + + /// Expanding/Collapsing asset paths is only available once registered with the asset manager. + StringTableEntry expandAssetFilePath(const char* pAssetFilePath) const; + StringTableEntry collapseAssetFilePath(const char* pAssetFilePath) const; + + virtual bool isAssetValid(void) const { return true; } + + void refreshAsset(void); + + /// Declare Console Object. + DECLARE_CONOBJECT(AssetBase); + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} + +protected: + static bool setAssetName(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetName(data); return false; } + static const char* getAssetName(void* obj, const char* data) { return static_cast(obj)->getAssetName(); } + static bool writeAssetName(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetName() != StringTable->EmptyString(); } + + static bool setAssetDescription(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetDescription(data); return false; } + static const char* getAssetDescription(void* obj, const char* data) { return static_cast(obj)->getAssetDescription(); } + static bool writeAssetDescription(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetDescription() != StringTable->EmptyString(); } + + static bool setAssetCategory(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetCategory(data); return false; } + static const char* getAssetCategory(void* obj, const char* data) { return static_cast(obj)->getAssetCategory(); } + static bool writeAssetCategory(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetCategory() != StringTable->EmptyString(); } + + static bool setAssetAutoUnload(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetAutoUnload(dAtob(data)); return false; } + static const char* getAssetAutoUnload(void* obj, const char* data) { return Con::getBoolArg(static_cast(obj)->getAssetAutoUnload()); } + static bool writeAssetAutoUnload(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetAutoUnload() == false; } + + static bool setAssetInternal(void *obj, const char *array, const char *data) { static_cast(obj)->setAssetInternal(dAtob(data)); return false; } + static const char* getAssetInternal(void* obj, const char* data) { return Con::getBoolArg(static_cast(obj)->getAssetInternal()); } + static bool writeAssetInternal(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetInternal() == true; } + + static const char* getAssetPrivate(void* obj, const char* data) { return Con::getBoolArg(static_cast(obj)->getAssetPrivate()); } + +private: + void acquireAssetReference(void); + bool releaseAssetReference(void); + + /// Set asset manager ownership. + void setOwned(AssetManager* pAssetManager, AssetDefinition* pAssetDefinition); +}; + +#endif // _ASSET_BASE_H_ + diff --git a/Engine/source/assets/assetBase_ScriptBinding.h b/Engine/source/assets/assetBase_ScriptBinding.h new file mode 100644 index 0000000000..8ac8f6a0dd --- /dev/null +++ b/Engine/source/assets/assetBase_ScriptBinding.h @@ -0,0 +1,41 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "console/engineAPI.h" +#include "assetBase.h" +#include "assetManager.h" + + +DefineEngineMethod(AssetBase, refreshAsset, void, (), , + "Refresh the asset.\n" + "@return No return value.\n") +{ + object->refreshAsset(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetBase, getAssetId, String, (), , + "Gets the assets' Asset Id. This is only available if the asset was acquired from the asset manager.\n" + "@return The assets' Asset Id.\n") +{ + return object->getAssetId(); +} diff --git a/Engine/source/assets/assetDefinition.h b/Engine/source/assets/assetDefinition.h new file mode 100644 index 0000000000..0d3b1c9645 --- /dev/null +++ b/Engine/source/assets/assetDefinition.h @@ -0,0 +1,102 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_DEFINITION_H_ +#define _ASSET_DEFINITION_H_ + +#ifndef _STRINGTABLE_H_ +#include "core/stringTable.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +#ifndef _SIM_H_ +#include "console/sim.h" +#endif + +#ifndef _SIMOBJECT_H_ +#include "console/simObject.h" +#endif + +#ifndef _CONSOLEOBJECT_H_ +#include "console/consoleObject.h" +#endif + +//----------------------------------------------------------------------------- + +class AssetBase; +class ModuleDefinition; + +//----------------------------------------------------------------------------- + +struct AssetDefinition +{ +public: + AssetDefinition() { reset(); } + virtual ~AssetDefinition() {} + + virtual void reset( void ) + { + mAssetLoading = false; + mpModuleDefinition = NULL; + mpAssetBase = NULL; + mAssetBaseFilePath = StringTable->EmptyString(); + mAssetId = StringTable->EmptyString(); + mAssetLoadedCount = 0; + mAssetUnloadedCount = 0; + mAssetRefreshEnable = true; + mAssetLooseFiles.clear(); + + // Reset persisted state. + mAssetName = StringTable->EmptyString(); + mAssetDescription = StringTable->EmptyString(); + mAssetAutoUnload = true; + mAssetInternal = false; + mAssetPrivate = false; + mAssetType = StringTable->EmptyString(); + mAssetCategory = StringTable->EmptyString(); + } + + ModuleDefinition* mpModuleDefinition; + AssetBase* mpAssetBase; + StringTableEntry mAssetBaseFilePath; + StringTableEntry mAssetId; + U32 mAssetLoadedCount; + U32 mAssetUnloadedCount; + bool mAssetRefreshEnable; + Vector mAssetLooseFiles; + + /// Persisted state. + StringTableEntry mAssetName; + StringTableEntry mAssetDescription; + bool mAssetAutoUnload; + bool mAssetInternal; + bool mAssetPrivate; + bool mAssetLoading; + StringTableEntry mAssetType; + StringTableEntry mAssetCategory; +}; + +#endif // _ASSET_DEFINITION_H_ + diff --git a/Engine/source/assets/assetFieldTypes.cpp b/Engine/source/assets/assetFieldTypes.cpp new file mode 100644 index 0000000000..154513d412 --- /dev/null +++ b/Engine/source/assets/assetFieldTypes.cpp @@ -0,0 +1,114 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assetFieldTypes.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assetPtr.h" +#endif + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +/*#ifndef _AUDIO_ASSET_H_ +#include "audio/AudioAsset.h" +#endif*/ + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +//----------------------------------------------------------------------------- + +StringTableEntry assetLooseIdSignature = StringTable->insert( ASSET_ID_SIGNATURE ); +StringTableEntry assetLooseFileSignature = StringTable->insert( ASSET_LOOSEFILE_SIGNATURE ); + +//----------------------------------------------------------------------------- + +ConsoleType( assetLooseFilePath, TypeAssetLooseFilePath, String, ASSET_LOOSE_FILE_FIELD_PREFIX ) +ConsoleType(assetIdString, TypeAssetId, String, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType( TypeAssetLooseFilePath ) +{ + // Fetch asset loose file-path. + return *((StringTableEntry*)dptr); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType( TypeAssetLooseFilePath ) +{ + // Was a single argument specified? + if( argc == 1 ) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset loose file-path. + StringTableEntry* assetLooseFilePath = (StringTableEntry*)(dptr); + + // Update asset loose file-path value. + *assetLooseFilePath = StringTable->insert(pFieldValue); + + return; + } + + // Warn. + Con::warnf( "(TypeAssetLooseFilePath) - Cannot set multiple args to a single asset loose-file." ); +} + +//----------------------------------------------------------------------------- + +ConsoleGetType( TypeAssetId ) +{ + // Fetch asset Id. + return *((StringTableEntry*)dptr); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType( TypeAssetId ) +{ + // Was a single argument specified? + if( argc == 1 ) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset Id. + StringTableEntry* assetId = (StringTableEntry*)(dptr); + + // Update asset value. + *assetId = StringTable->insert(pFieldValue); + + return; + } + + // Warn. + Con::warnf( "(TypeAssetId) - Cannot set multiple args to a single asset." ); +} + diff --git a/Engine/source/assets/assetFieldTypes.h b/Engine/source/assets/assetFieldTypes.h new file mode 100644 index 0000000000..af76682f44 --- /dev/null +++ b/Engine/source/assets/assetFieldTypes.h @@ -0,0 +1,56 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_FIELD_TYPES_H_ +#define _ASSET_FIELD_TYPES_H_ + +#ifndef _CONSOLE_BASE_TYPE_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +DefineConsoleType( TypeAssetId, S32 ) +DefineConsoleType( TypeAssetLooseFilePath, String ) + +//----------------------------------------------------------------------------- + +/// Asset scope. +#define ASSET_SCOPE_TOKEN ":" + +/// Asset assignment. +#define ASSET_ASSIGNMENT_TOKEN "=" + +/// Asset Id. +#define ASSET_ID_SIGNATURE "@asset" +#define ASSET_ID_FIELD_PREFIX "@asset=" + +/// Asset loose file. +#define ASSET_LOOSEFILE_SIGNATURE "@assetFile" +#define ASSET_LOOSE_FILE_FIELD_PREFIX "@assetFile=" + +//----------------------------------------------------------------------------- + +extern StringTableEntry assetLooseIdSignature; +extern StringTableEntry assetLooseFileSignature; + +#endif // _ASSET_FIELD_TYPES_H_ \ No newline at end of file diff --git a/Engine/source/assets/assetManager.cpp b/Engine/source/assets/assetManager.cpp new file mode 100644 index 0000000000..bfd21c6996 --- /dev/null +++ b/Engine/source/assets/assetManager.cpp @@ -0,0 +1,3017 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "assetManager.h" + +#ifndef _ASSET_PTR_H_ +#include "assetPtr.h" +#endif + +#ifndef _REFERENCED_ASSETS_H_ +#include "assets/referencedAssets.h" +#endif + +#ifndef _DECLARED_ASSETS_H_ +#include "assets/declaredAssets.h" +#endif + +#ifndef _TAML_ASSET_REFERENCED_VISITOR_H_ +#include "tamlAssetReferencedVisitor.h" +#endif + +#ifndef _TAML_ASSET_DECLARED_VISITOR_H_ +#include "tamlAssetDeclaredVisitor.h" +#endif + +#ifndef _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ +#include "tamlAssetDeclaredUpdateVisitor.h" +#endif + +#ifndef _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ +#include "tamlAssetReferencedUpdateVisitor.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script bindings. +#include "assetManager_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( AssetManager ); + +//----------------------------------------------------------------------------- + +AssetManager AssetDatabase; + +//----------------------------------------------------------------------------- + +AssetManager::AssetManager() : + mLoadedInternalAssetsCount( 0 ), + mLoadedExternalAssetsCount( 0 ), + mLoadedPrivateAssetsCount( 0 ), + mMaxLoadedInternalAssetsCount( 0 ), + mMaxLoadedExternalAssetsCount( 0 ), + mMaxLoadedPrivateAssetsCount( 0 ), + mAcquiredReferenceCount( 0 ), + mEchoInfo( false ), + mIgnoreAutoUnload( false ) +{ +} + +//----------------------------------------------------------------------------- + +bool AssetManager::onAdd() +{ + // Call parent. + if ( !Parent::onAdd() ) + return false; + + return true; +} + +//----------------------------------------------------------------------------- + +void AssetManager::onRemove() +{ + // Do we have an asset tags manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so remove it. + mAssetTagsManifest->deleteObject(); + } + + // Call parent. + Parent::onRemove(); +} + +//----------------------------------------------------------------------------- + +void AssetManager::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField( "EchoInfo", TypeBool, Offset(mEchoInfo, AssetManager), "Whether the asset manager echos extra information to the console or not." ); + addField( "IgnoreAutoUnload", TypeBool, Offset(mIgnoreAutoUnload, AssetManager), "Whether the asset manager should ignore unloading of auto-unload assets or not." ); +} + +//----------------------------------------------------------------------------- + +bool AssetManager::compileReferencedAssets( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_CompileReferencedAsset); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot add declared assets using a NULL module definition" ); + + // Clear referenced assets. + mReferencedAssets.clear(); + + // Iterate the module definition children. + for( SimSet::iterator itr = pModuleDefinition->begin(); itr != pModuleDefinition->end(); ++itr ) + { + // Fetch the referenced assets. + ReferencedAssets* pReferencedAssets = dynamic_cast( *itr ); + + // Skip if it's not a referenced assets location. + if ( pReferencedAssets == NULL ) + continue; + + // Expand asset manifest location. + char filePathBuffer[1024]; + dSprintf( filePathBuffer, sizeof(filePathBuffer), "%s/%s", pModuleDefinition->getModulePath(), pReferencedAssets->getPath() ); + + // Scan referenced assets at location. + if ( !scanReferencedAssets( filePathBuffer, pReferencedAssets->getExtension(), pReferencedAssets->getRecurse() ) ) + { + // Warn. + Con::warnf( "AssetManager::compileReferencedAssets() - Could not scan for referenced assets at location '%s' with extension '%s'.", filePathBuffer, pReferencedAssets->getExtension() ); + } + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::addModuleDeclaredAssets( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddDeclaredAssets); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot add declared assets using a NULL module definition" ); + + // Does the module have any assets associated with it? + if ( pModuleDefinition->getModuleAssets().size() > 0 ) + { + // Yes, so warn. + Con::warnf( "Asset Manager: Cannot add declared assets to module '%s' as it already has existing assets.", pModuleDefinition->getSignature() ); + return false; + } + + // Iterate the module definition children. + for( SimSet::iterator itr = pModuleDefinition->begin(); itr != pModuleDefinition->end(); ++itr ) + { + // Fetch the declared assets. + DeclaredAssets* pDeclaredAssets = dynamic_cast( *itr ); + + // Skip if it's not a declared assets location. + if ( pDeclaredAssets == NULL ) + continue; + + // Expand asset manifest location. + char filePathBuffer[1024]; + String mdldfpth = pModuleDefinition->getModulePath(); + String astfpth = pDeclaredAssets->getPath(); + + //dSprintf( filePathBuffer, sizeof(filePathBuffer), "%s/%s", pModuleDefinition->getModulePath(), pDeclaredAssets->getPath() ); + dSprintf(filePathBuffer, sizeof(filePathBuffer), "%s/%s", pModuleDefinition->getModulePath(), pDeclaredAssets->getPath()); + + // Scan declared assets at location. + if ( !scanDeclaredAssets( filePathBuffer, pDeclaredAssets->getExtension(), pDeclaredAssets->getRecurse(), pModuleDefinition ) ) + { + // Warn. + Con::warnf( "AssetManager::addModuleDeclaredAssets() - Could not scan for declared assets at location '%s' with extension '%s'.", filePathBuffer, pDeclaredAssets->getExtension() ); + } + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::addDeclaredAsset( ModuleDefinition* pModuleDefinition, const char* pAssetFilePath ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddSingleDeclaredAsset); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot add single declared asset using a NULL module definition" ); + AssertFatal( pAssetFilePath != NULL, "Cannot add single declared asset using a NULL asset file-path." ); + + // Expand asset file-path. + char assetFilePathBuffer[1024]; + Con::expandPath( assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetFilePath ); + + // Find the final slash which should be just before the file. + char* pFileStart = dStrrchr( assetFilePathBuffer, '/' ); + + // Did we find the final slash? + if ( pFileStart == NULL ) + { + // No, so warn. + Con::warnf( "AssetManager::addDeclaredAsset() - Could not add single declared asset file '%s' as file-path '%s' is not valid.", + assetFilePathBuffer, + pModuleDefinition->getModulePath() ); + return false; + } + + // Terminate path at slash. + *pFileStart = 0; + + // Move to next character which should be the file start. + pFileStart++; + + // Scan declared assets at location. + if ( !scanDeclaredAssets( assetFilePathBuffer, pFileStart, false, pModuleDefinition ) ) + { + // Warn. + Con::warnf( "AssetManager::addDeclaredAsset() - Could not scan declared assets at location '%s' with extension '%s'.", assetFilePathBuffer, pFileStart ); + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::addPrivateAsset( AssetBase* pAssetBase ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddPrivateAsset); + + // Sanity! + AssertFatal( pAssetBase != NULL, "Cannot add a NULL private asset." ); + + // Is the asset already added? + if (pAssetBase->mpAssetDefinition->mAssetId != StringTable->EmptyString()) + { + // Yes, so warn. + Con::warnf( "Cannot add private asset '%d' as it has already been assigned.", pAssetBase->mpAssetDefinition->mAssetId ); + return StringTable->EmptyString(); + } + + static U32 masterPrivateAssetId = 1; + + // Create asset definition. + AssetDefinition* pAssetDefinition = new AssetDefinition(); + + // Fetch source asset definition. + AssetDefinition* pSourceAssetDefinition = pAssetBase->mpAssetDefinition; + + // Configure asset. + pAssetDefinition->mpAssetBase = pAssetBase; + pAssetDefinition->mAssetDescription = pSourceAssetDefinition->mAssetDescription; + pAssetDefinition->mAssetCategory = pSourceAssetDefinition->mAssetCategory; + pAssetDefinition->mAssetAutoUnload = true; + pAssetDefinition->mAssetRefreshEnable = false; + pAssetDefinition->mAssetType = StringTable->insert( pAssetBase->getClassName() ); + pAssetDefinition->mAssetLoadedCount = 0; + pAssetDefinition->mAssetInternal = false; + pAssetDefinition->mAssetPrivate = true; + + // Format asset name. + char assetNameBuffer[256]; + dSprintf(assetNameBuffer, sizeof(assetNameBuffer), "%s_%d", pAssetDefinition->mAssetType, masterPrivateAssetId++ ); + + // Set asset identity. + pAssetDefinition->mAssetName = StringTable->insert( assetNameBuffer ); + pAssetDefinition->mAssetId = pAssetDefinition->mAssetName; + + // Ensure that the source asset is fully synchronized with the new asset definition. + pSourceAssetDefinition->mAssetName = pAssetDefinition->mAssetName; + pSourceAssetDefinition->mAssetAutoUnload = pAssetDefinition->mAssetAutoUnload; + pSourceAssetDefinition->mAssetInternal = pAssetDefinition->mAssetInternal; + + // Set ownership by asset manager. + pAssetDefinition->mpAssetBase->setOwned( this, pAssetDefinition ); + + // Store in declared assets. + mDeclaredAssets.insert( pAssetDefinition->mAssetId, pAssetDefinition ); + + // Increase the private loaded asset count. + if ( ++mLoadedPrivateAssetsCount > mMaxLoadedPrivateAssetsCount ) + mMaxLoadedPrivateAssetsCount = mLoadedPrivateAssetsCount; + + return pAssetDefinition->mAssetId; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::removeDeclaredAssets( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemoveDeclaredAssets); + + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot remove declared assets using a NULL module definition" ); + + // Fetch module assets. + ModuleDefinition::typeModuleAssetsVector& moduleAssets = pModuleDefinition->getModuleAssets(); + + // Remove all module assets. + while ( moduleAssets.size() > 0 ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = *moduleAssets.begin(); + + // Remove this asset. + removeDeclaredAsset( pAssetDefinition->mAssetId ); + } + + // Info. + if ( mEchoInfo ) + Con::printSeparator(); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::removeDeclaredAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemoveSingleDeclaredAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot remove single declared asset using NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Find declared asset. + typeDeclaredAssetsHash::iterator declaredAssetItr = mDeclaredAssets.find( assetId ); + + // Did we find the declared asset? + if ( declaredAssetItr == mDeclaredAssets.end() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot remove single asset Id '%s' it could not be found.", assetId ); + return false; + } + + // Fetch asset definition. + AssetDefinition* pAssetDefinition = declaredAssetItr->value; + + // Is the asset private? + if ( !pAssetDefinition->mAssetPrivate ) + { + // No, so fetch module assets. + ModuleDefinition::typeModuleAssetsVector& moduleAssets = pAssetDefinition->mpModuleDefinition->getModuleAssets(); + + // Remove module asset. + for ( ModuleDefinition::typeModuleAssetsVector::iterator moduleAssetItr = moduleAssets.begin(); moduleAssetItr != moduleAssets.end(); ++moduleAssetItr ) + { + if ( *moduleAssetItr == pAssetDefinition ) + { + moduleAssets.erase( moduleAssetItr ); + break; + } + } + + // Remove asset dependencies. + removeAssetDependencies( pAssetId ); + } + + // Do we have an asset loaded? + if ( pAssetDefinition->mpAssetBase != NULL ) + { + // Yes, so delete it. + // NOTE: If anything is using this then this'll cause a crash. Objects should always use safe reference methods however. + pAssetDefinition->mpAssetBase->deleteObject(); + } + + // Remove from declared assets. + mDeclaredAssets.erase( declaredAssetItr ); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Removing Asset Id '%s' of type '%s' in asset file '%s'.", + pAssetDefinition->mAssetId, + pAssetDefinition->mAssetType, + pAssetDefinition->mAssetBaseFilePath ); + } + + // Destroy asset definition. + delete pAssetDefinition; + + return true; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetName( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetName; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetDescription( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetDescription; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetCategory( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetCategory; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetType( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mAssetType; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetFilePath( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return StringTable->EmptyString(); + } + + return pAssetDefinition->mAssetBaseFilePath; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetManager::getAssetPath( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_GetAssetPath); + + // Fetch asset file-path. + StringTableEntry assetFilePath = getAssetFilePath( pAssetId ); + + // Finish if no file-path. + if ( assetFilePath == StringTable->EmptyString() ) + return assetFilePath; + + // Find the final slash which should be just before the file. + const char* pFinalSlash = dStrrchr( assetFilePath, '/' ); + + // Sanity! + AssertFatal( pFinalSlash != NULL, "Should always be able to find final slash in the asset file-path." ); + + // Fetch asset path. + return StringTable->insertn( assetFilePath, (U32)(pFinalSlash - assetFilePath) ); +} + +//----------------------------------------------------------------------------- + +ModuleDefinition* AssetManager::getAssetModuleDefinition( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return NULL; + } + + return pAssetDefinition->mpModuleDefinition; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetInternal( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mAssetInternal; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetPrivate( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mAssetPrivate; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetAutoUnload( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mAssetAutoUnload; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetLoaded( const char* pAssetId ) +{ + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find asset Id '%s'.", pAssetId ); + return false; + } + + return pAssetDefinition->mpAssetBase != NULL; +} + + +//----------------------------------------------------------------------------- + +bool AssetManager::isDeclaredAsset( const char* pAssetId ) +{ + return findAsset( pAssetId ) != NULL; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::doesAssetDependOn( const char* pAssetId, const char* pDependsOnAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_DoesAssetDependOn); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + AssertFatal( pDependsOnAssetId != NULL, "Cannot use NULL depends-on asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Fetch depends-on asset Id. + StringTableEntry dependsOnAssetId = StringTable->insert( pDependsOnAssetId ); + + // Find depends-on entry. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find( assetId ); + + // Iterate all dependencies. + while( dependsOnItr != mAssetDependsOn.end() && dependsOnItr->key == assetId ) + { + // Finish if a depends on. + if ( dependsOnItr->value == dependsOnAssetId ) + return true; + + // Next dependency. + dependsOnItr++; + } + + return false; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isAssetDependedOn( const char* pAssetId, const char* pDependedOnByAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_IsAssetDependedOn); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + AssertFatal( pDependedOnByAssetId != NULL, "Cannot use NULL depended-on-by asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Fetch depended-on-by asset Id. + StringTableEntry dependedOnByAssetId = StringTable->insert( pDependedOnByAssetId ); + + // Find depended-on-by entry. + typeAssetDependsOnHash::Iterator dependedOnItr = mAssetIsDependedOn.find(assetId); + + // Iterate all dependencies. + while( dependedOnItr != mAssetIsDependedOn.end() && dependedOnItr->key == assetId ) + { + // Finish if depended-on. + if ( dependedOnItr->value == dependedOnByAssetId ) + return true; + + // Next dependency. + dependedOnItr++; + } + + return false; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::isReferencedAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_IsReferencedAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot check if NULL asset Id is referenced." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Is asset Id the correct format? + if ( StringUnit::getUnitCount( assetId, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot check if asset Id '%s' is referenced as it is not the correct format.", assetId ); + return false; + } + + return mReferencedAssets.count( assetId ) > 0; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::renameDeclaredAsset( const char* pAssetIdFrom, const char* pAssetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameDeclaredAsset); + + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Cannot rename from NULL asset Id." ); + AssertFatal( pAssetIdTo != NULL, "Cannot rename to NULL asset Id." ); + + // Fetch asset Ids. + StringTableEntry assetIdFrom = StringTable->insert( pAssetIdFrom ); + StringTableEntry assetIdTo = StringTable->insert( pAssetIdTo ); + + // Is asset Id from the correct format? + if ( StringUnit::getUnitCount( assetIdFrom, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as source asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Is asset Id to the correct format? + if ( StringUnit::getUnitCount( assetIdTo, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as target asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Does the asset Id from exist? + if ( !mDeclaredAssets.contains( assetIdFrom ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as source asset Id is not declared.", assetIdFrom, assetIdTo ); + return false; + } + + // Does the asset Id to exist? + if ( mDeclaredAssets.contains( assetIdTo ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as target asset Id is already declared.", assetIdFrom, assetIdTo ); + return false; + } + + // Split module Ids from asset Ids. + StringTableEntry moduleIdFrom = StringTable->insert( StringUnit::getUnit( assetIdFrom, 0, ASSET_SCOPE_TOKEN ) ); + StringTableEntry moduleIdTo = StringTable->insert( StringUnit::getUnit( assetIdTo, 0, ASSET_SCOPE_TOKEN ) ); + + // Are the module Ids the same? + if ( moduleIdFrom != moduleIdTo ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the module Id cannot be changed.", assetIdFrom, assetIdTo ); + return false; + } + + // Find asset definition. + typeDeclaredAssetsHash::iterator assetDefinitionItr = mDeclaredAssets.find( assetIdFrom ); + + // Sanity! + AssertFatal( assetDefinitionItr != mDeclaredAssets.end(), "Asset Manager: Failed to find asset." ); + + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetDefinitionItr->value; + + // Is this a private asset? + if ( pAssetDefinition->mAssetPrivate ) + { + // Yes, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the source asset is private.", assetIdFrom, assetIdTo ); + return false; + } + + // Setup declared update visitor. + TamlAssetDeclaredUpdateVisitor assetDeclaredUpdateVisitor; + assetDeclaredUpdateVisitor.setAssetIdFrom( assetIdFrom ); + assetDeclaredUpdateVisitor.setAssetIdTo( assetIdTo ); + + // Update asset file declaration. + if ( !mTaml.parse( pAssetDefinition->mAssetBaseFilePath, assetDeclaredUpdateVisitor ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename declared asset Id '%s' to asset Id '%s' as the declared asset file could not be parsed: %s", + assetIdFrom, assetIdTo, pAssetDefinition->mAssetBaseFilePath ); + return false; + } + + // Update asset definition. + pAssetDefinition->mAssetId = assetIdTo; + pAssetDefinition->mAssetName = StringTable->insert( StringUnit::getUnit( assetIdTo, 1, ASSET_SCOPE_TOKEN ) ); + + // Reinsert declared asset. + mDeclaredAssets.erase( assetIdFrom ); + mDeclaredAssets.insert( assetIdTo, pAssetDefinition ); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Renaming declared Asset Id '%s' to Asset Id '%s'.", assetIdFrom, assetIdTo ); + Con::printSeparator(); + } + + // Rename asset dependencies. + renameAssetDependencies( assetIdFrom, assetIdTo ); + + // Do we have an asset tags manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so rename any assets. + mAssetTagsManifest->renameAssetId( pAssetIdFrom, pAssetIdTo ); + + // Save the asset tags. + saveAssetTags(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::renameReferencedAsset( const char* pAssetIdFrom, const char* pAssetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameReferencedAsset); + + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Cannot rename from NULL asset Id." ); + AssertFatal( pAssetIdTo != NULL, "Cannot rename to NULL asset Id." ); + + // Fetch asset Ids. + StringTableEntry assetIdFrom = StringTable->insert( pAssetIdFrom ); + StringTableEntry assetIdTo = StringTable->insert( pAssetIdTo ); + + // Is asset Id from the correct format? + if ( StringUnit::getUnitCount( assetIdFrom, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as source asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Is asset Id to the correct format? + if ( StringUnit::getUnitCount( assetIdTo, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as target asset Id is not the correct format.", assetIdFrom, assetIdTo ); + return false; + } + + // Does the asset Id to exist? + if ( !mDeclaredAssets.contains( assetIdTo ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as target asset Id is not declared.", assetIdFrom, assetIdTo ); + return false; + } + + // Rename asset references. + renameAssetReferences( assetIdFrom, assetIdTo ); + + // Info. + if ( mEchoInfo ) + Con::printSeparator(); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::releaseAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_ReleaseAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot release NULL asset Id." ); + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to release asset Id '%s' as it does not exist.", pAssetId ); + return false; + } + + // Is the asset loaded? + if ( pAssetDefinition->mpAssetBase == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to release asset Id '%s' as it is not acquired.", pAssetId ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started releasing Asset Id '%s'...", pAssetId ); + } + + // Release asset reference. + if ( pAssetDefinition->mpAssetBase->releaseAssetReference() ) + { + // Are we ignoring auto-unloaded assets? + if ( mIgnoreAutoUnload ) + { + // Yes, so info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Releasing to idle state." ); + } + } + else + { + // No, so info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Unload the asset from memory." ); + } + + // Unload the asset. + unloadAsset( pAssetDefinition ); + } + } + // Info. + else if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Reference count now '%d'.", pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Finished releasing Asset Id '%s'.", pAssetId ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void AssetManager::purgeAssets( void ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_PurgeAssets); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Started purging assets..." ); + } + + // Iterate asset definitions. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip asset if private, not loaded or referenced. + if ( pAssetDefinition->mAssetPrivate || + pAssetDefinition->mpAssetBase == NULL || + pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() > 0 ) + continue; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Purging asset Id '%s'...", pAssetDefinition->mAssetId ); + } + + // Unload the asset. + unloadAsset( pAssetDefinition ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: ... Finished purging assets." ); + } +} + +//----------------------------------------------------------------------------- + +bool AssetManager::deleteAsset( const char* pAssetId, const bool deleteLooseFiles, const bool deleteDependencies ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_DeleteAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot delete NULL asset Id." ); + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to delete asset Id '%s' as it does not exist.", pAssetId ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started deleting Asset Id '%s'...", pAssetId ); + } + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Are we deleting dependencies? + if ( deleteDependencies ) + { + Vector dependantAssets; + + // Yes, so find depended-on-by entry. + typeAssetDependsOnHash::Iterator dependedOnItr = mAssetIsDependedOn.find( assetId ); + + // Iterate all dependencies. + while( dependedOnItr != mAssetIsDependedOn.end() && dependedOnItr->key == assetId ) + { + // Store asset Id. + dependantAssets.push_back( dependedOnItr->value ); + + // Next dependency. + dependedOnItr++; + } + + // Do we have any dependants? + if ( dependantAssets.size() > 0 ) + { + // Yes, so iterate dependants. + for( Vector::const_iterator assetItr = dependantAssets.begin(); assetItr != dependantAssets.end(); ++assetItr ) + { + StringTableEntry dependentAssetId = *assetItr; + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Deleting Asset Id '%s' dependant of '%s.'", pAssetId, dependentAssetId ); + } + + // Delete dependant. + deleteAsset( dependentAssetId, deleteLooseFiles, deleteDependencies ); + } + } + } + + // Remove asset references. + removeAssetReferences( assetId ); + + // Are we deleting loose files? + if ( deleteLooseFiles ) + { + // Yes, so remove loose files. + Vector& assetLooseFiles = pAssetDefinition->mAssetLooseFiles; + for( Vector::iterator looseFileItr = assetLooseFiles.begin(); looseFileItr != assetLooseFiles.end(); ++looseFileItr ) + { + // Fetch loose file. + StringTableEntry looseFile = *looseFileItr; + + // Delete the loose file. + if ( !dFileDelete( looseFile ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to delete the loose file '%s' while deleting asset Id '%s'.", looseFile, pAssetId ); + } + } + } + + // Fetch asset definition file. + StringTableEntry assetDefinitionFile = pAssetDefinition->mAssetBaseFilePath; + + // Remove reference here as we're about to remove the declared asset. + pAssetDefinition = NULL; + + // Remove asset. + removeDeclaredAsset( pAssetId ); + + // Delete the asset definition file. + if ( !dFileDelete( assetDefinitionFile ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to delete the asset definition file '%s' while deleting asset Id '%s'.", assetDefinitionFile, pAssetId ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Finished deleting Asset Id '%s'.", pAssetId ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::refreshAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RefreshAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot refresh NULL asset Id." ); + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to refresh asset Id '%s' as it does not exist.", pAssetId ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started refreshing Asset Id '%s'...", pAssetId ); + } + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Is the asset private? + if ( pAssetDefinition->mAssetPrivate ) + { + // Yes, so notify asset of asset refresh only. + pAssetDefinition->mpAssetBase->onAssetRefresh(); + + // Asset refresh notifications. + for( typeAssetPtrRefreshHash::iterator refreshNotifyItr = mAssetPtrRefreshNotifications.begin(); refreshNotifyItr != mAssetPtrRefreshNotifications.end(); ++refreshNotifyItr ) + { + // Fetch pointed asset. + StringTableEntry pointedAsset = refreshNotifyItr->key->getAssetId(); + + // Ignore if the pointed asset is not the asset or a dependency. + if ( pointedAsset == StringTable->EmptyString() || ( pointedAsset != assetId && !doesAssetDependOn( pointedAsset, assetId ) ) ) + continue; + + // Perform refresh notification callback. + refreshNotifyItr->value->onAssetRefreshed( refreshNotifyItr->key ); + } + } + // Is the asset definition allowed to refresh? + else if ( pAssetDefinition->mAssetRefreshEnable ) + { + // Yes, so fetch the asset. + AssetBase* pAssetBase = pAssetDefinition->mpAssetBase; + + // Is the asset loaded? + if ( pAssetBase != NULL ) + { + // Yes, so notify asset of asset refresh. + pAssetBase->onAssetRefresh(); + + // Save asset. + mTaml.write( pAssetBase, pAssetDefinition->mAssetBaseFilePath ); + + // Remove asset dependencies. + removeAssetDependencies( pAssetId ); + + // Find any new dependencies. + TamlAssetDeclaredVisitor assetDeclaredVisitor; + + // Parse the filename. + if ( !mTaml.parse( pAssetDefinition->mAssetBaseFilePath, assetDeclaredVisitor ) ) + { + // Warn. + Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.\nDependencies are now incorrect!", pAssetDefinition->mAssetBaseFilePath ); + return false; + } + + // Fetch asset dependencies. + TamlAssetDeclaredVisitor::typeAssetIdVector& assetDependencies = assetDeclaredVisitor.getAssetDependencies(); + + // Are there any asset dependences? + if ( assetDependencies.size() > 0 ) + { + // Yes, so iterate dependencies. + for( TamlAssetDeclaredVisitor::typeAssetIdVector::iterator assetDependencyItr = assetDependencies.begin(); assetDependencyItr != assetDependencies.end(); ++assetDependencyItr ) + { + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = *assetDependencyItr; + + // Insert depends-on. + mAssetDependsOn.insertEqual( assetId, dependencyAssetId ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( dependencyAssetId, assetId ); + } + } + + // Fetch asset loose files. + TamlAssetDeclaredVisitor::typeLooseFileVector& assetLooseFiles = assetDeclaredVisitor.getAssetLooseFiles(); + + // Clear any existing loose files. + pAssetDefinition->mAssetLooseFiles.clear(); + + // Are there any loose files? + if ( assetLooseFiles.size() > 0 ) + { + // Yes, so iterate loose files. + for( TamlAssetDeclaredVisitor::typeLooseFileVector::iterator assetLooseFileItr = assetLooseFiles.begin(); assetLooseFileItr != assetLooseFiles.end(); ++assetLooseFileItr ) + { + // Store loose file. + pAssetDefinition->mAssetLooseFiles.push_back( *assetLooseFileItr ); + } + } + + // Asset refresh notifications. + for( typeAssetPtrRefreshHash::iterator refreshNotifyItr = mAssetPtrRefreshNotifications.begin(); refreshNotifyItr != mAssetPtrRefreshNotifications.end(); ++refreshNotifyItr ) + { + // Fetch pointed asset. + StringTableEntry pointedAsset = refreshNotifyItr->key->getAssetId(); + + // Ignore if the pointed asset is not the asset or a dependency. + if ( pointedAsset == StringTable->EmptyString() || ( pointedAsset != assetId && !doesAssetDependOn( pointedAsset, assetId ) ) ) + continue; + + // Perform refresh notification callback. + refreshNotifyItr->value->onAssetRefreshed( refreshNotifyItr->key ); + } + + // Find is-depends-on entry. + typeAssetIsDependedOnHash::Iterator isDependedOnItr = mAssetIsDependedOn.find( assetId ); + + // Is asset depended on? + if ( isDependedOnItr != mAssetIsDependedOn.end() ) + { + // Yes, so compiled them. + Vector dependedOn; + + // Iterate all dependencies. + while( isDependedOnItr != mAssetIsDependedOn.end() && isDependedOnItr->key == assetId ) + { + dependedOn.push_back( isDependedOnItr->value ); + + // Next dependency. + isDependedOnItr++; + } + + // Refresh depended-on assets. + for ( Vector::iterator isDependedOnItr = dependedOn.begin(); isDependedOnItr != dependedOn.end(); ++isDependedOnItr ) + { + // Refresh dependency asset. + refreshAsset( *isDependedOnItr ); + } + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Finished refreshing Asset Id '%s'.", pAssetId ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void AssetManager::refreshAllAssets( const bool includeUnloaded ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RefreshAllAssets); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started refreshing ALL assets." ); + } + + Vector assetsToRelease; + + // Are we including unloaded assets? + if ( includeUnloaded ) + { + // Yes, so prepare a list of assets to release and load them. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset Id. + typeAssetId assetId = assetItr->key; + + // Skip if asset is loaded. + if ( assetItr->value->mpAssetBase != NULL ) + continue; + + // Note asset as needing a release. + assetsToRelease.push_back( assetId ); + + // Acquire the asset. + acquireAsset( assetId ); + } + } + + // Refresh the current loaded assets. + // NOTE: This will result in some assets being refreshed more than once due to asset dependencies. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Skip private assets. + if ( assetItr->value->mAssetPrivate ) + continue; + + // Refresh asset if it's loaded. + refreshAsset( assetItr->key ); + } + + // Are we including unloaded assets? + if ( includeUnloaded ) + { + // Yes, so release the assets we loaded. + for( Vector::iterator assetItr = assetsToRelease.begin(); assetItr != assetsToRelease.end(); ++assetItr ) + { + releaseAsset( *assetItr ); + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Finished refreshing ALL assets." ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::registerAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase, AssetPtrCallback* pCallback ) +{ + // Find an existing notification iterator. + typeAssetPtrRefreshHash::iterator notificationItr = mAssetPtrRefreshNotifications.find( pAssetPtrBase ); + + // Do we have one? + if ( notificationItr != mAssetPtrRefreshNotifications.end() ) + { + // Yes, so update the callback. + notificationItr->value = pCallback; + return; + } + + // No, so add one. + mAssetPtrRefreshNotifications.insert( pAssetPtrBase, pCallback ); +} + +//----------------------------------------------------------------------------- + +void AssetManager::unregisterAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase ) +{ + mAssetPtrRefreshNotifications.erase( pAssetPtrBase ); +} + +//----------------------------------------------------------------------------- + +bool AssetManager::loadAssetTags( ModuleDefinition* pModuleDefinition ) +{ + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot load asset tags manifest using a NULL module definition" ); + + // Expand manifest location. + char assetTagsManifestFilePathBuffer[1024]; + Con::expandPath( assetTagsManifestFilePathBuffer, sizeof(assetTagsManifestFilePathBuffer), pModuleDefinition->getAssetTagsManifest() ); + + // Do we already have a manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so warn. + Con::warnf( "Asset Manager: Cannot load asset tags manifest from module '%s' as one is already loaded.", pModuleDefinition->getSignature() ); + return false; + } + + // Is the specified file valid? + if ( Platform::isFile( assetTagsManifestFilePathBuffer ) ) + { + // Yes, so read asset tags manifest. + mAssetTagsManifest = mTaml.read( assetTagsManifestFilePathBuffer ); + + // Did we read the manifest? + if ( mAssetTagsManifest.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to load asset tags manifest '%s' from module '%s'.", assetTagsManifestFilePathBuffer, pModuleDefinition->getSignature() ); + return false; + } + + // Set asset tags module definition. + mAssetTagsModuleDefinition = pModuleDefinition; + } + else + { + // No, so generate a new asset tags manifest. + mAssetTagsManifest = new AssetTagsManifest(); + mAssetTagsManifest->registerObject(); + + // Set asset tags module definition. + mAssetTagsModuleDefinition = pModuleDefinition; + + // Save the asset tags. + saveAssetTags(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::saveAssetTags( void ) +{ + // Do we have an asset tags manifest? + if ( mAssetTagsManifest.isNull() || mAssetTagsModuleDefinition.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to save asset tags manifest as one is not loaded." ); + return false; + } + + // Expand manifest location. + char assetTagsManifestFilePathBuffer[1024]; + Con::expandPath( assetTagsManifestFilePathBuffer, sizeof(assetTagsManifestFilePathBuffer), mAssetTagsModuleDefinition->getAssetTagsManifest() ); + + // Save asset tags manifest. + if ( !mTaml.write( mAssetTagsManifest, assetTagsManifestFilePathBuffer ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to save asset tags manifest '%s' from module '%s'.", assetTagsManifestFilePathBuffer, mAssetTagsModuleDefinition->getSignature() ); + return false; + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::restoreAssetTags( void ) +{ + // Do we already have a manifest? + if ( mAssetTagsManifest.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot restore asset tags manifest as one is not already loaded." ); + return false; + } + + // Sanity! + AssertFatal( mAssetTagsModuleDefinition != NULL, "Cannot restore asset tags manifest as module definition is NULL." ); + + // Delete existing asset tags manifest. + mAssetTagsManifest->deleteObject(); + + // Reload asset tags manifest. + return loadAssetTags( mAssetTagsModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +S32 QSORT_CALLBACK descendingAssetDefinitionLoadCount(const void* a, const void* b) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_DescendingAssetDefinitionLoadCount); + + // Fetch asset definitions. + const AssetDefinition* pAssetDefinitionA = *(AssetDefinition**)a; + const AssetDefinition* pAssetDefinitionB = *(AssetDefinition**)b; + + // Sort. + return pAssetDefinitionB->mAssetLoadedCount - pAssetDefinitionA->mAssetLoadedCount; +} + +//----------------------------------------------------------------------------- + +void AssetManager::dumpDeclaredAssets( void ) const +{ + Vector assetDefinitions; + + // Iterate asset definitions. + for( typeDeclaredAssetsHash::const_iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + assetDefinitions.push_back( assetItr->value ); + } + + // Sort asset definitions. + dQsort( assetDefinitions.address(), assetDefinitions.size(), sizeof(const AssetDefinition*), descendingAssetDefinitionLoadCount ); + + // Info. + Con::printSeparator(); + Con::printf( "Asset Manager: %d declared asset(s) dump as follows:", mDeclaredAssets.size() ); + Con::printBlankLine(); + + // Iterate sorted asset definitions. + for ( Vector::iterator assetItr = assetDefinitions.begin(); assetItr != assetDefinitions.end(); ++assetItr ) + { + // Fetch asset definition. + const AssetDefinition* pAssetDefinition = *assetItr; + + // Info. + Con::printf( "AssetId:'%s', RefCount:%d, LoadCount:%d, UnloadCount:%d, AutoUnload:%d, Loaded:%d, Internal:%d, Private: %d, Type:'%s', Module/Version:'%s'/'%d', File:'%s'", + pAssetDefinition->mAssetId, + pAssetDefinition->mpAssetBase == NULL ? 0 : pAssetDefinition->mpAssetBase->getAcquiredReferenceCount(), + pAssetDefinition->mAssetLoadedCount, + pAssetDefinition->mAssetUnloadedCount, + pAssetDefinition->mAssetAutoUnload, + pAssetDefinition->mpAssetBase != NULL, + pAssetDefinition->mAssetInternal, + pAssetDefinition->mAssetPrivate, + pAssetDefinition->mAssetType, + pAssetDefinition->mpModuleDefinition->getModuleId(), + pAssetDefinition->mpModuleDefinition->getVersionId(), + pAssetDefinition->mAssetBaseFilePath ); + } + + // Info. + Con::printSeparator(); + Con::printBlankLine(); +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAllAssets( AssetQuery* pAssetQuery, const bool ignoreInternal, const bool ignorePrivate ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAllAssets); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if internal and we're ignoring them. + if ( ignoreInternal && pAssetDefinition->mAssetInternal ) + continue; + + // Skip if private and we're ignoring them. + if ( ignorePrivate && pAssetDefinition->mAssetPrivate ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back( pAssetDefinition->mAssetId ); + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetName( AssetQuery* pAssetQuery, const char* pAssetName, const bool partialName ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetName); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetName != NULL, "Cannot use NULL asset name." ); + + // Reset asset name. + StringTableEntry assetName = NULL; + S32 partialAssetNameLength = 0; + + // Are we doing partial name search? + if ( partialName ) + { + // Yes, so fetch length of partial name. + partialAssetNameLength = dStrlen( pAssetName ); + } + else + { + // No, so fetch asset name. + assetName = StringTable->insert( pAssetName ); + } + + // Reset result count. + S32 resultCount = 0; + + // Iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Are we doing partial name search? + if ( partialName ) + { + // Yes, so fetch the length of this asset name. + const S32 currentAssetNameLength = dStrlen( pAssetDefinition->mAssetName ); + + // Skip if the query asset name is longer than the current asset name. + if ( partialAssetNameLength > currentAssetNameLength ) + continue; + + // Skip if this is not the asset we want. + if ( dStrnicmp( pAssetDefinition->mAssetName, pAssetName, partialAssetNameLength ) != 0 ) + continue; + } + else + { + // No, so skip if this is not the asset we want. + if ( assetName != pAssetDefinition->mAssetName ) + continue; + } + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetCategory( AssetQuery* pAssetQuery, const char* pAssetCategory, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetCategory); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetCategory != NULL, "Cannot use NULL asset category." ); + + // Fetch asset category. + StringTableEntry assetCategory = StringTable->insert( pAssetCategory ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetCategory != assetCategory ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetCategory != pAssetDefinition->mAssetCategory ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +S32 AssetManager::findAssetAutoUnload( AssetQuery* pAssetQuery, const bool assetAutoUnload, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetAutoUnload); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetAutoUnload != assetAutoUnload ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetAutoUnload != pAssetDefinition->mAssetAutoUnload ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetInternal( AssetQuery* pAssetQuery, const bool assetInternal, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetInternal); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetInternal != assetInternal ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetInternal != pAssetDefinition->mAssetInternal ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetPrivate( AssetQuery* pAssetQuery, const bool assetPrivate, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetPrivate); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetPrivate != assetPrivate ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetPrivate != pAssetDefinition->mAssetPrivate ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetType( AssetQuery* pAssetQuery, const char* pAssetType, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetType); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetType != NULL, "Cannot use NULL asset type." ); + + // Fetch asset type. + StringTableEntry assetType = StringTable->insert( pAssetType ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Skip if this is not the asset we want. + if ( pAssetDefinition == NULL || + pAssetDefinition->mAssetType != assetType ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Skip if this is not the asset we want. + if ( assetType != pAssetDefinition->mAssetType ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetDependsOn( AssetQuery* pAssetQuery, const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetDependsOn); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Reset result count. + S32 resultCount = 0; + + // Find depends-on entry. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find( assetId ); + + // Iterate all dependencies. + while( dependsOnItr != mAssetDependsOn.end() && dependsOnItr->key == assetId ) + { + // Store as result. + pAssetQuery->mAssetList.push_back(dependsOnItr->value); + + // Next dependency. + dependsOnItr++; + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetIsDependedOn( AssetQuery* pAssetQuery, const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetIsDependedOn); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetId != NULL, "Cannot use NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Reset result count. + S32 resultCount = 0; + + // Find depended-on entry. + typeAssetIsDependedOnHash::Iterator dependedOnItr = mAssetIsDependedOn.find( assetId ); + + // Iterate all dependencies. + while( dependedOnItr != mAssetIsDependedOn.end() && dependedOnItr->key == assetId ) + { + // Store as result. + pAssetQuery->mAssetList.push_back(dependedOnItr->value); + + // Next dependency. + dependedOnItr++; + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findInvalidAssetReferences( AssetQuery* pAssetQuery ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindInvalidAssetReferences); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + + // Reset result count. + S32 resultCount = 0; + + // Iterate referenced assets. + for( typeReferencedAssetsHash::Iterator assetItr = mReferencedAssets.begin(); assetItr != mReferencedAssets.end(); ++assetItr ) + { + // Find asset definition. + AssetDefinition* pAssetDefinition = findAsset( assetItr->key ); + + // Skip if the asset definition was found. + if ( pAssetDefinition != NULL ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(assetItr->key); + + // Increase result count. + resultCount++; + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findTaggedAssets( AssetQuery* pAssetQuery, const char* pAssetTagNames, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindTaggedAssets); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pAssetTagNames != NULL, "Cannot use NULL asset tag name(s)." ); + + // Do we have an asset tag manifest? + if ( mAssetTagsManifest.isNull() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Cannot find tagged assets as no asset tag manifest is present." ); + return 0; + } + + // Reset result count. + S32 resultCount = 0; + + const char* pTagSeparators = " ,\t\n"; + + // Fetch tag count. + U32 assetTagCount = StringUnit::getUnitCount( pAssetTagNames, pTagSeparators ); + + // Fetch asset tags. + Vector assetTags; + for( U32 tagIndex = 0; tagIndex < assetTagCount; ++tagIndex ) + { + // Fetch asset tag name. + const char* pTagName = StringUnit::getUnit( pAssetTagNames, tagIndex, pTagSeparators ); + + // Fetch asset tag. + AssetTagsManifest::AssetTag* pAssetTag = mAssetTagsManifest->findAssetTag( pTagName ); + + // Did we find the asset tag? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Asset Manager: Cannot find tagged assets of '%s' as it does not exist. Ignoring tag.", pTagName ); + continue; + } + + assetTags.push_back( pAssetTag ); + } + + // Fetch found asset tag count. + assetTagCount = assetTags.size(); + + // Did we find any tags? + if ( assetTagCount == 0 ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Asset Manager: No specified tagged assets found in '%s'.", pAssetTagNames ); + return 0; + } + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset Id. + StringTableEntry assetId = *assetItr; + + // Skip if asset is not valid. + if ( !isDeclaredAsset( assetId ) ) + continue; + + // Reset matched flag. + bool assetTagMatched = false; + + // Iterate asset tags. + for ( Vector::iterator assetTagItr = assetTags.begin(); assetTagItr != assetTags.end(); ++assetTagItr ) + { + // Fetch asset tag. + AssetTagsManifest::AssetTag* pAssetTag = *assetTagItr; + + // Skip if asset is not tagged. + if ( !pAssetTag->containsAsset( assetId ) ) + continue; + + // Flag as matched. + assetTagMatched = true; + break; + } + + // Did we find a match? + if ( assetTagMatched ) + { + // Yes, so is asset already present? + if ( !filteredAssets.containsAsset( assetId ) ) + { + // No, so store as result. + filteredAssets.mAssetList.push_back(assetId); + + // Increase result count. + resultCount++; + } + } + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // Iterate asset tags. + for ( Vector::iterator assetTagItr = assetTags.begin(); assetTagItr != assetTags.end(); ++assetTagItr ) + { + // Fetch asset tag. + AssetTagsManifest::AssetTag* pAssetTag = *assetTagItr; + + // Iterate tagged assets. + for ( Vector::iterator assetItr = pAssetTag->mAssets.begin(); assetItr != pAssetTag->mAssets.end(); ++assetItr ) + { + // Fetch asset Id. + StringTableEntry assetId = *assetItr; + + // Skip if asset Id is already present. + if ( pAssetQuery->containsAsset( assetId ) ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(assetId); + + // Increase result count. + resultCount++; + } + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +S32 AssetManager::findAssetLooseFile( AssetQuery* pAssetQuery, const char* pLooseFile, const bool assetQueryAsSource ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAssetLooseFile); + + // Sanity! + AssertFatal( pAssetQuery != NULL, "Cannot use NULL asset query." ); + AssertFatal( pLooseFile != NULL, "Cannot use NULL loose file." ); + + // Expand loose file. + char looseFileBuffer[1024]; + Con::expandPath(looseFileBuffer, sizeof(looseFileBuffer), pLooseFile, NULL, false ); + + // Fetch asset loose file. + StringTableEntry looseFile = StringTable->insert( looseFileBuffer ); + + // Reset result count. + S32 resultCount = 0; + + // Use asset-query as the source? + if ( assetQueryAsSource ) + { + AssetQuery filteredAssets; + + // Yes, so iterate asset query. + for (Vector::iterator assetItr = pAssetQuery->mAssetList.begin(); assetItr != pAssetQuery->mAssetList.end(); ++assetItr) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = findAsset( *assetItr ); + + // Fetch loose files. + Vector& assetLooseFiles = pAssetDefinition->mAssetLooseFiles; + + // Skip if this asset has no loose files. + if ( assetLooseFiles.size() == 0 ) + continue; + + // Search the assets loose files. + for( Vector::iterator looseFileItr = assetLooseFiles.begin(); looseFileItr != assetLooseFiles.end(); ++looseFileItr ) + { + // Is this the loose file we are searching for? + if ( *looseFileItr != looseFile ) + continue; + + // Store as result. + filteredAssets.mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + + break; + } + } + + // Set asset query. + pAssetQuery->set( filteredAssets ); + } + else + { + // No, so iterate declared assets. + for( typeDeclaredAssetsHash::iterator assetItr = mDeclaredAssets.begin(); assetItr != mDeclaredAssets.end(); ++assetItr ) + { + // Fetch asset definition. + AssetDefinition* pAssetDefinition = assetItr->value; + + // Fetch loose files. + Vector& assetLooseFiles = pAssetDefinition->mAssetLooseFiles; + + // Skip if this asset has no loose files. + if ( assetLooseFiles.size() == 0 ) + continue; + + // Search the assets loose files. + for( Vector::iterator looseFileItr = assetLooseFiles.begin(); looseFileItr != assetLooseFiles.end(); ++looseFileItr ) + { + // Is this the loose file we are searching for? + if ( *looseFileItr != looseFile ) + continue; + + // Store as result. + pAssetQuery->mAssetList.push_back(pAssetDefinition->mAssetId); + + // Increase result count. + resultCount++; + + break; + } + } + } + + return resultCount; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::scanDeclaredAssets( const char* pPath, const char* pExtension, const bool recurse, ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_ScanDeclaredAssets); + + // Sanity! + AssertFatal( pPath != NULL, "Cannot scan declared assets with NULL path." ); + AssertFatal( pExtension != NULL, "Cannot scan declared assets with NULL extension." ); + + // Expand path location. + char pathBuffer[1024]; + Con::expandPath( pathBuffer, sizeof(pathBuffer), pPath ); + + // Find files. + Vector files; + if ( !Platform::dumpPath( pathBuffer, files, recurse ? -1 : 0 ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to scan declared assets in directory '%s'.", pathBuffer ); + return false; + } + + // Is the asset file-path located within the specified module? + if ( !Con::isBasePath( pathBuffer, pModuleDefinition->getModulePath() ) ) + { + // No, so warn. + Con::warnf( "Asset Manager: Could not add declared asset file '%s' as file does not exist with module path '%s'", + pathBuffer, + pModuleDefinition->getModulePath() ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Scanning for declared assets in path '%s' for files with extension '%s'...", pathBuffer, pExtension ); + } + + // Fetch extension length. + const U32 extensionLength = dStrlen( pExtension ); + + // Fetch module assets. + ModuleDefinition::typeModuleAssetsVector& moduleAssets = pModuleDefinition->getModuleAssets(); + + TamlAssetDeclaredVisitor assetDeclaredVisitor; + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo& fileInfo = *fileItr; + + // Fetch filename. + const char* pFilename = fileInfo.pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength > filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, pExtension ) != 0 ) + continue; + + // Clear declared assets. + assetDeclaredVisitor.clear(); + + // Format full file-path. + char assetFileBuffer[1024]; + dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", fileInfo.pFullPath, fileInfo.pFileName ); + + // Parse the filename. + if ( !mTaml.parse( assetFileBuffer, assetDeclaredVisitor ) ) + { + // Warn. + Con::warnf( "Asset Manager: Failed to parse file containing asset declaration: '%s'.", assetFileBuffer ); + continue; + } + + // Fetch asset definition. + AssetDefinition& foundAssetDefinition = assetDeclaredVisitor.getAssetDefinition(); + + // Did we get an asset name? + if ( foundAssetDefinition.mAssetName == StringTable->EmptyString() ) + { + // No, so warn. + Con::warnf( "Asset Manager: Parsed file '%s' but did not encounter an asset.", assetFileBuffer ); + continue; + } + + // Set module definition. + foundAssetDefinition.mpModuleDefinition = pModuleDefinition; + + // Format asset Id. + char assetIdBuffer[1024]; + dSprintf(assetIdBuffer, sizeof(assetIdBuffer), "%s%s%s", + pModuleDefinition->getModuleId(), + ASSET_SCOPE_TOKEN, + foundAssetDefinition.mAssetName ); + + // Set asset Id. + foundAssetDefinition.mAssetId = StringTable->insert( assetIdBuffer ); + + // Does this asset already exist? + if ( mDeclaredAssets.contains( foundAssetDefinition.mAssetId ) ) + { + // Yes, so warn. + Con::warnf( "Asset Manager: Encountered asset Id '%s' in asset file '%s' but it conflicts with existing asset Id in asset file '%s'.", + foundAssetDefinition.mAssetId, + foundAssetDefinition.mAssetBaseFilePath, + mDeclaredAssets.find( foundAssetDefinition.mAssetId )->value->mAssetBaseFilePath ); + + continue; + } + + // Create new asset definition. + AssetDefinition* pAssetDefinition = new AssetDefinition( foundAssetDefinition ); + + // Store in declared assets. + mDeclaredAssets.insert( pAssetDefinition->mAssetId, pAssetDefinition ); + + // Store in module assets. + moduleAssets.push_back( pAssetDefinition ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Adding Asset Id '%s' of type '%s' in asset file '%s'.", + pAssetDefinition->mAssetId, + pAssetDefinition->mAssetType, + pAssetDefinition->mAssetBaseFilePath ); + } + + // Fetch asset Id. + StringTableEntry assetId = pAssetDefinition->mAssetId; + + // Fetch asset dependencies. + TamlAssetDeclaredVisitor::typeAssetIdVector& assetDependencies = assetDeclaredVisitor.getAssetDependencies(); + + // Are there any asset dependencies? + if ( assetDependencies.size() > 0 ) + { + // Yes, so iterate dependencies. + for( TamlAssetDeclaredVisitor::typeAssetIdVector::iterator assetDependencyItr = assetDependencies.begin(); assetDependencyItr != assetDependencies.end(); ++assetDependencyItr ) + { + // Fetch asset Ids. + StringTableEntry dependencyAssetId = *assetDependencyItr; + + // Insert depends-on. + mAssetDependsOn.insertEqual( assetId, dependencyAssetId ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( dependencyAssetId, assetId ); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Asset Id '%s' has dependency of Asset Id '%s'", assetId, dependencyAssetId ); + } + } + } + + // Fetch asset loose files. + TamlAssetDeclaredVisitor::typeLooseFileVector& assetLooseFiles = assetDeclaredVisitor.getAssetLooseFiles(); + + // Are there any loose files? + if ( assetLooseFiles.size() > 0 ) + { + // Yes, so iterate loose files. + for( TamlAssetDeclaredVisitor::typeLooseFileVector::iterator assetLooseFileItr = assetLooseFiles.begin(); assetLooseFileItr != assetLooseFiles.end(); ++assetLooseFileItr ) + { + // Fetch loose file. + StringTableEntry looseFile = *assetLooseFileItr; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Asset Id '%s' has loose file '%s'.", assetId, looseFile ); + } + + // Store loose file. + pAssetDefinition->mAssetLooseFiles.push_back( looseFile ); + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: ... Finished scanning for declared assets in path '%s' for files with extension '%s'.", pathBuffer, pExtension ); + Con::printSeparator(); + Con::printBlankLine(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetManager::scanReferencedAssets( const char* pPath, const char* pExtension, const bool recurse ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_ScanReferencedAssets); + + // Sanity! + AssertFatal( pPath != NULL, "Cannot scan referenced assets with NULL path." ); + AssertFatal( pExtension != NULL, "Cannot scan referenced assets with NULL extension." ); + + // Expand path location. + char pathBuffer[1024]; + Con::expandPath( pathBuffer, sizeof(pathBuffer), pPath ); + + // Find files. + Vector files; + if ( !Platform::dumpPath( pathBuffer, files, recurse ? -1 : 0 ) ) + { + // Failed so warn. + Con::warnf( "Asset Manager: Failed to scan referenced assets in directory '%s'.", pathBuffer ); + return false; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Scanning for referenced assets in path '%s' for files with extension '%s'...", pathBuffer, pExtension ); + } + + // Fetch extension length. + const U32 extensionLength = dStrlen( pExtension ); + + TamlAssetReferencedVisitor assetReferencedVisitor; + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo& fileInfo = *fileItr; + + // Fetch filename. + const char* pFilename = fileInfo.pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength > filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, pExtension ) != 0 ) + continue; + + // Clear referenced assets. + assetReferencedVisitor.clear(); + + // Format full file-path. + char assetFileBuffer[1024]; + dSprintf( assetFileBuffer, sizeof(assetFileBuffer), "%s/%s", fileInfo.pFullPath, fileInfo.pFileName ); + + // Format reference file-path. + typeReferenceFilePath referenceFilePath = StringTable->insert( assetFileBuffer ); + + // Parse the filename. + if ( !mTaml.parse( referenceFilePath, assetReferencedVisitor ) ) + { + // Warn. + Con::warnf( "Asset Manager: Failed to parse file containing asset references: '%s'.", referenceFilePath ); + continue; + } + + // Fetch usage map. + const TamlAssetReferencedVisitor::typeAssetReferencedHash& assetReferencedMap = assetReferencedVisitor.getAssetReferencedMap(); + + // Do we have any asset references? + if ( assetReferencedMap.size() > 0 ) + { + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + } + + // Iterate usage. + for( TamlAssetReferencedVisitor::typeAssetReferencedHash::const_iterator usageItr = assetReferencedMap.begin(); usageItr != assetReferencedMap.end(); ++usageItr ) + { + // Fetch asset name. + typeAssetId assetId = usageItr->key; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Found referenced Asset Id '%s' in file '%s'.", assetId, referenceFilePath ); + } + + // Add referenced asset. + addReferencedAsset( assetId, referenceFilePath ); + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: ... Finished scanning for referenced assets in path '%s' for files with extension '%s'.", pathBuffer, pExtension ); + Con::printSeparator(); + Con::printBlankLine(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +AssetDefinition* AssetManager::findAsset( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_FindAsset); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot find NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Find declared asset. + typeDeclaredAssetsHash::iterator declaredAssetItr = mDeclaredAssets.find( assetId ); + + // Find if we didn't find a declared asset Id. + if ( declaredAssetItr == mDeclaredAssets.end() ) + return NULL; + + return declaredAssetItr->value; +} + +//----------------------------------------------------------------------------- + +void AssetManager::addReferencedAsset( StringTableEntry assetId, StringTableEntry referenceFilePath ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_AddReferencedAsset); + + // Sanity! + AssertFatal( assetId != NULL, "Cannot add referenced asset with NULL asset Id." ); + AssertFatal( referenceFilePath != NULL, "Cannot add referenced asset with NULL reference file-path." ); + + // Find referenced asset. + typeReferencedAssetsHash::Iterator referencedAssetItr = mReferencedAssets.find( assetId ); + + // Did we find the asset? + if ( referencedAssetItr == mReferencedAssets.end() ) + { + // No, so add asset Id. + mReferencedAssets.insertEqual( assetId, referenceFilePath ); + } + else + { + // Yes, so add asset Id with a unique file. + while( true ) + { + // Finish if this file is already present. + if ( referencedAssetItr->value == referenceFilePath ) + return; + + // Move to next asset Id. + referencedAssetItr++; + + // Is this the end of referenced assets or a different asset Id? + if ( referencedAssetItr == mReferencedAssets.end() || + referencedAssetItr->key != assetId ) + { + // Yes, so add asset reference. + mReferencedAssets.insertEqual( assetId, referenceFilePath ); + return; + } + }; + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::renameAssetReferences( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameAssetReferences); + + // Sanity! + AssertFatal( assetIdFrom != NULL, "Cannot rename asset references using NULL asset Id from." ); + AssertFatal( assetIdTo != NULL, "Cannot rename asset references using NULL asset Id to." ); + + // Finish if the asset is not referenced. + if ( !mReferencedAssets.count( assetIdFrom ) ) + return; + + // Setup referenced update visitor. + TamlAssetReferencedUpdateVisitor assetReferencedUpdateVisitor; + assetReferencedUpdateVisitor.setAssetIdFrom( assetIdFrom ); + assetReferencedUpdateVisitor.setAssetIdTo( assetIdTo ); + + // Find first referenced asset Id. + typeReferencedAssetsHash::Iterator referencedAssetItr = mReferencedAssets.find( assetIdFrom ); + + // Iterate references. + while( true ) + { + // Finish if end of references. + if ( referencedAssetItr == mReferencedAssets.end() || referencedAssetItr->key != assetIdFrom ) + return; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Renaming declared Asset Id '%s' to Asset Id '%s'. Updating referenced file '%s'", + assetIdFrom, + assetIdTo, + referencedAssetItr->value ); + } + + // Update asset file declaration. + if ( !mTaml.parse( referencedAssetItr->value, assetReferencedUpdateVisitor ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot rename referenced asset Id '%s' to asset Id '%s' as the referenced asset file could not be parsed: %s", + assetIdFrom, assetIdTo, referencedAssetItr->value ); + } + + // Move to next reference. + referencedAssetItr++; + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::removeAssetReferences( StringTableEntry assetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemoveAssetReferences); + + // Sanity! + AssertFatal( assetId != NULL, "Cannot rename asset references using NULL asset Id." ); + + // Finish if the asset is not referenced. + if ( !mReferencedAssets.count( assetId ) ) + return; + + // Setup referenced update visitor. + TamlAssetReferencedUpdateVisitor assetReferencedUpdateVisitor; + assetReferencedUpdateVisitor.setAssetIdFrom( assetId ); + assetReferencedUpdateVisitor.setAssetIdTo( StringTable->EmptyString() ); + + // Find first referenced asset Id. + typeReferencedAssetsHash::Iterator referencedAssetItr = mReferencedAssets.find(assetId); + + // Iterate references. + while( true ) + { + // Finish if end of references. + if ( referencedAssetItr == mReferencedAssets.end() || referencedAssetItr->key != assetId ) + break; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: Removing Asset Id '%s' references from file '%s'", + assetId, + referencedAssetItr->value ); + } + + // Update asset file declaration. + if ( !mTaml.parse( referencedAssetItr->value, assetReferencedUpdateVisitor ) ) + { + // No, so warn. + Con::warnf("Asset Manager: Cannot remove referenced asset Id '%s' as the referenced asset file could not be parsed: %s", + assetId, + referencedAssetItr->value ); + } + + // Move to next reference. + referencedAssetItr++; + } + + // Remove asset references. + mReferencedAssets.erase( assetId ); +} + +//----------------------------------------------------------------------------- + +void AssetManager::renameAssetDependencies( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RenameAssetDependencies); + + // Sanity! + AssertFatal( assetIdFrom != NULL, "Cannot rename asset dependencies using NULL asset Id from." ); + AssertFatal( assetIdTo != NULL, "Cannot rename asset dependencies using NULL asset Id to." ); + + // Rename via depends-on... + while( mAssetDependsOn.count( assetIdFrom ) > 0 ) + { + // Find depends-on. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find(assetIdFrom); + + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = dependsOnItr->value; + + // Find is-depends-on entry. + typeAssetIsDependedOnHash::Iterator isDependedOnItr = mAssetIsDependedOn.find(dependencyAssetId); + + // Sanity! + AssertFatal( isDependedOnItr != mAssetIsDependedOn.end(), "Asset dependencies are corrupt!" ); + + while( isDependedOnItr != mAssetIsDependedOn.end() && isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value != assetIdFrom ) + { + isDependedOnItr++; + } + + // Sanity! + AssertFatal( isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value == assetIdFrom, "Asset dependencies are corrupt!" ); + + // Remove is-depended-on. + mAssetIsDependedOn.erase( isDependedOnItr ); + + // Remove depends-on. + mAssetDependsOn.erase( dependsOnItr ); + + // Insert depends-on. + mAssetDependsOn.insertEqual( assetIdTo, dependencyAssetId ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( dependencyAssetId, assetIdTo ); + } + + // Rename via is-depended-on... + while( mAssetIsDependedOn.count( assetIdFrom ) > 0 ) + { + // Find is-depended-on. + typeAssetIsDependedOnHash::Iterator isdependedOnItr = mAssetIsDependedOn.find(assetIdFrom); + + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = isdependedOnItr->value; + + // Find depends-on entry. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find(dependencyAssetId); + + // Sanity! + AssertFatal( dependsOnItr != mAssetDependsOn.end(), "Asset dependencies are corrupt!" ); + + while( dependsOnItr != mAssetDependsOn.end() && dependsOnItr->key == dependencyAssetId && dependsOnItr->value != assetIdFrom ) + { + dependsOnItr++; + } + + // Sanity! + AssertFatal( dependsOnItr->key == dependencyAssetId && dependsOnItr->value == assetIdFrom, "Asset dependencies are corrupt!" ); + + // Remove is-depended-on. + mAssetIsDependedOn.erase( isdependedOnItr ); + + // Remove depends-on. + mAssetDependsOn.erase( dependsOnItr ); + + // Insert depends-on. + mAssetDependsOn.insertEqual( dependencyAssetId, assetIdTo ); + + // Insert is-depended-on. + mAssetIsDependedOn.insertEqual( assetIdTo, dependencyAssetId ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::removeAssetDependencies( const char* pAssetId ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_RemvoeAsetDependencies); + + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot remove asset dependencies using NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Remove from depends-on assets. + while( mAssetDependsOn.count( assetId ) > 0 ) + { + // Find depends-on. + typeAssetDependsOnHash::Iterator dependsOnItr = mAssetDependsOn.find(assetId); + + // Fetch dependency asset Id. + StringTableEntry dependencyAssetId = dependsOnItr->value; + + // Find is-depends-on entry. + typeAssetIsDependedOnHash::Iterator isDependedOnItr = mAssetIsDependedOn.find(dependencyAssetId); + + // Sanity! + AssertFatal( isDependedOnItr != mAssetIsDependedOn.end(), "Asset dependencies are corrupt!" ); + + while( isDependedOnItr != mAssetIsDependedOn.end() && isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value != assetId ) + { + isDependedOnItr++; + } + + // Sanity! + AssertFatal( isDependedOnItr->key == dependencyAssetId && isDependedOnItr->value == assetId, "Asset dependencies are corrupt!" ); + + // Remove is-depended-on. + mAssetIsDependedOn.erase( isDependedOnItr ); + + // Remove depends-on. + mAssetDependsOn.erase( dependsOnItr ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::unloadAsset( AssetDefinition* pAssetDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_UnloadAsset); + + // Destroy the asset. + pAssetDefinition->mpAssetBase->deleteObject(); + + // Increase unloaded count. + pAssetDefinition->mAssetUnloadedCount++; + + // Is the asset internal? + if ( pAssetDefinition->mAssetInternal ) + { + // Yes, so decrease internal loaded asset count. + mLoadedInternalAssetsCount--; + } + else + { + // No, so decrease external loaded assets count. + mLoadedExternalAssetsCount--; + } + + // Is the asset private? + if ( pAssetDefinition->mAssetPrivate ) + { + // Yes, so decrease private loaded asset count. + mLoadedPrivateAssetsCount--; + + // Remove it completely. + removeDeclaredAsset( pAssetDefinition->mAssetId ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::onModulePreLoad( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_OnModulePreLoad); + + // Add module declared assets. + addModuleDeclaredAssets( pModuleDefinition ); + + // Is an asset tags manifest specified? + if ( pModuleDefinition->getAssetTagsManifest() != StringTable->EmptyString() ) + { + // Yes, so load the asset tags manifest. + loadAssetTags( pModuleDefinition ); + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::onModulePreUnload( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_OnModulePreUnload); + + // Is an asset tags manifest specified? + if ( pModuleDefinition->getAssetTagsManifest() != StringTable->EmptyString() ) + { + // Yes, so save the asset tags manifest. + saveAssetTags(); + + // Do we have an asset tags manifest? + if ( !mAssetTagsManifest.isNull() ) + { + // Yes, so remove it. + mAssetTagsManifest->deleteObject(); + mAssetTagsModuleDefinition = NULL; + } + } +} + +//----------------------------------------------------------------------------- + +void AssetManager::onModulePostUnload( ModuleDefinition* pModuleDefinition ) +{ + // Debug Profiling. + PROFILE_SCOPE(AssetManager_OnModulePostUnload); + + // Remove declared assets. + removeDeclaredAssets( pModuleDefinition ); +} diff --git a/Engine/source/assets/assetManager.h b/Engine/source/assets/assetManager.h new file mode 100644 index 0000000000..fbf1522f34 --- /dev/null +++ b/Engine/source/assets/assetManager.h @@ -0,0 +1,395 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_MANAGER_H_ +#define _ASSET_MANAGER_H_ + +#ifndef _SIMBASE_H_ +#include "console/sim.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _MODULE_DEFINITION_H +#include "module/moduleDefinition.h" +#endif + +#ifndef _MODULE_CALLBACKS_H_ +#include "module/moduleCallbacks.h" +#endif + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _ASSET_TAGS_MANIFEST_H_ +#include "assets/assetTagsManifest.h" +#endif + +#ifndef _ASSET_QUERY_H_ +#include "assets/assetQuery.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class AssetPtrCallback; +class AssetPtrBase; + +//----------------------------------------------------------------------------- + +class AssetManager : public SimObject, public ModuleCallbacks +{ +private: + typedef SimObject Parent; + typedef StringTableEntry typeAssetId; + typedef StringTableEntry typeAssetName; + typedef StringTableEntry typeReferenceFilePath; + typedef HashMap typeDeclaredAssetsHash; + typedef HashTable typeReferencedAssetsHash; + typedef HashTable typeAssetDependsOnHash; + typedef HashTable typeAssetIsDependedOnHash; + typedef HashMap typeAssetPtrRefreshHash; + + /// Declared assets. + typeDeclaredAssetsHash mDeclaredAssets; + + /// Referenced assets. + typeReferencedAssetsHash mReferencedAssets; + + /// Asset dependencies. + typeAssetDependsOnHash mAssetDependsOn; + typeAssetIsDependedOnHash mAssetIsDependedOn; + + /// Asset tags. + SimObjectPtr mAssetTagsManifest; + SimObjectPtr mAssetTagsModuleDefinition; + + /// Asset pointer refresh notifications. + typeAssetPtrRefreshHash mAssetPtrRefreshNotifications; + + /// Miscellaneous. + bool mEchoInfo; + bool mIgnoreAutoUnload; + U32 mLoadedInternalAssetsCount; + U32 mLoadedExternalAssetsCount; + U32 mLoadedPrivateAssetsCount; + U32 mAcquiredReferenceCount; + U32 mMaxLoadedInternalAssetsCount; + U32 mMaxLoadedExternalAssetsCount; + U32 mMaxLoadedPrivateAssetsCount; + Taml mTaml; + +public: + AssetManager(); + virtual ~AssetManager() {} + + /// SimObject overrides + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + /// Declared assets. + bool addModuleDeclaredAssets( ModuleDefinition* pModuleDefinition ); + bool addDeclaredAsset( ModuleDefinition* pModuleDefinition, const char* pAssetFilePath ); + StringTableEntry addPrivateAsset( AssetBase* pAssetBase ); + bool removeDeclaredAssets( ModuleDefinition* pModuleDefinition ); + bool removeDeclaredAsset( const char* pAssetId ); + bool renameDeclaredAsset( const char* pAssetIdFrom, const char* pAssetIdTo ); + StringTableEntry getAssetName( const char* pAssetId ); + StringTableEntry getAssetDescription( const char* pAssetId ); + StringTableEntry getAssetCategory( const char* pAssetId ); + StringTableEntry getAssetType( const char* pAssetId ); + StringTableEntry getAssetFilePath( const char* pAssetId ); + StringTableEntry getAssetPath( const char* pAssetId ); + ModuleDefinition* getAssetModuleDefinition( const char* pAssetId ); + bool isAssetInternal( const char* pAssetId ); + bool isAssetPrivate( const char* pAssetId ); + bool isAssetAutoUnload( const char* pAssetId ); + bool isAssetLoaded( const char* pAssetId ); + bool isDeclaredAsset( const char* pAssetId ); + bool doesAssetDependOn( const char* pAssetId, const char* pDependsOnAssetId ); + bool isAssetDependedOn( const char* pAssetId, const char* pDependedOnByAssetId ); + + /// Referenced assets. + bool compileReferencedAssets( ModuleDefinition* pModuleDefinition ); + bool isReferencedAsset( const char* pAssetId ); + bool renameReferencedAsset( const char* pAssetIdFrom, const char* pAssetIdTo ); + + /// Public asset acquisition. + template T* acquireAsset( const char* pAssetId ) + { + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot acquire NULL asset Id." ); + + // Is this an empty asset Id? + if ( *pAssetId == 0 ) + { + // Yes, so return nothing. + return NULL; + } + + // Find asset. + AssetDefinition* pAssetDefinition = findAsset( pAssetId ); + + // Did we find the asset? + if ( pAssetDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: Failed to acquire asset Id '%s' as it does not exist.", pAssetId ); + return NULL; + } + + // Is asset loading? + if ( pAssetDefinition->mAssetLoading == true ) + { + // Yes, so we've got a circular loop which we cannot resolve! + Con::warnf( "Asset Manager: Failed to acquire asset Id '%s' as loading it involves a cyclic dependency on itself which cannot be resolved.", pAssetId ); + return NULL; + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Asset Manager: Started acquiring Asset Id '%s'...", pAssetId ); + } + + // Is the asset already loaded? + if ( pAssetDefinition->mpAssetBase == NULL ) + { + // No, so info + if ( mEchoInfo ) + { + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Find any asset dependencies. + typeAssetDependsOnHash::Iterator assetDependenciesItr = mAssetDependsOn.find( assetId ); + + // Does the asset have any dependencies? + if ( assetDependenciesItr != mAssetDependsOn.end() ) + { + // Yes, so show all dependency assets. + Con::printf( "Asset Manager: > Found dependencies:" ); + + // Iterate all dependencies. + while( assetDependenciesItr != mAssetDependsOn.end() && assetDependenciesItr->key == assetId ) + { + // Info. + Con::printf( "Asset Manager: > Asset Id '%s'", assetDependenciesItr->value ); + + // Next dependency. + assetDependenciesItr++; + } + } + } + + // Flag asset as loading. + pAssetDefinition->mAssetLoading = true; + + // Generate primary asset. + pAssetDefinition->mpAssetBase = mTaml.read( pAssetDefinition->mAssetBaseFilePath ); + + // Flag asset as finished loading. + pAssetDefinition->mAssetLoading = false; + + // Did we generate the asset? + if ( pAssetDefinition->mpAssetBase == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: > Failed to acquire asset Id '%s' as loading the asset file failed to return the asset or the correct asset type: '%s'.", + pAssetId, pAssetDefinition->mAssetBaseFilePath ); + return NULL; + } + + // Increase loaded count. + pAssetDefinition->mAssetLoadedCount++; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Loading asset into memory as object Id '%d' from file '%s'.", + pAssetDefinition->mpAssetBase->getId(), pAssetDefinition->mAssetBaseFilePath ); + } + + // Set ownership by asset manager. + pAssetDefinition->mpAssetBase->setOwned( this, pAssetDefinition ); + + // Is the asset internal? + if ( pAssetDefinition->mAssetInternal ) + { + // Yes, so increase internal loaded asset count. + if ( ++mLoadedInternalAssetsCount > mMaxLoadedInternalAssetsCount ) + mMaxLoadedInternalAssetsCount = mLoadedInternalAssetsCount; + } + else + { + // No, so increase external loaded assets count. + if ( ++mLoadedExternalAssetsCount > mMaxLoadedExternalAssetsCount ) + mMaxLoadedExternalAssetsCount = mLoadedExternalAssetsCount; + } + } + else if ( pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() == 0 ) + { + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Acquiring from idle state." ); + } + } + + // Set acquired asset. + T* pAcquiredAsset = dynamic_cast( (AssetBase*)pAssetDefinition->mpAssetBase ); + + // Is asset the correct type? + if ( pAcquiredAsset == NULL ) + { + // No, so warn. + Con::warnf( "Asset Manager: > Failed to acquire asset Id '%s' as it was not the required asset type: '%s'.", pAssetId, pAssetDefinition->mAssetBaseFilePath ); + return NULL; + } + + // Acquire asset reference. + pAcquiredAsset->acquireAssetReference(); + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Asset Manager: > Finished acquiring asset. Reference count now '%d'.", pAssetDefinition->mpAssetBase->getAcquiredReferenceCount() ); + Con::printSeparator(); + } + + return pAcquiredAsset; + } + + /// Private asset acquisition. + template T* acquireAsPrivateAsset( const char* pAssetId ) + { + // Acquire the asset normally. + T* pAsset = acquireAsset( pAssetId ); + + // Finish if the asset was not acquired. + if ( pAsset == NULL ) + return NULL; + + // Clone the asset. + T* pAssetClone = dynamic_cast( pAsset->clone() ); + + // Sanity! + AssertFatal( pAssetClone != NULL, "acquireAsPrivateAsset() - Failed to clone asset type." ); + + // Release the public asset. + releaseAsset( pAssetId ); + + // Add as a private asset. + addPrivateAsset( pAssetClone ); + + return pAssetClone; + } + + bool releaseAsset( const char* pAssetId ); + void purgeAssets( void ); + + /// Asset deletion. + bool deleteAsset( const char* pAssetId, const bool deleteLooseFiles, const bool deleteDependencies ); + + // Asset refresh notification. + bool refreshAsset( const char* pAssetId ); + void refreshAllAssets( const bool includeUnloaded = false ); + void registerAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase, AssetPtrCallback* pCallback ); + void unregisterAssetPtrRefreshNotify( AssetPtrBase* pAssetPtrBase ); + + /// Asset tags. + bool loadAssetTags( ModuleDefinition* pModuleDefinition ); + bool saveAssetTags( void ); + bool restoreAssetTags( void ); + inline AssetTagsManifest* getAssetTags( void ) const { return mAssetTagsManifest; } + + /// Info. + inline U32 getDeclaredAssetCount( void ) const { return (U32)mDeclaredAssets.size(); } + inline U32 getReferencedAssetCount( void ) const { return (U32)mReferencedAssets.size(); } + inline U32 getLoadedInternalAssetCount( void ) const { return mLoadedInternalAssetsCount; } + inline U32 getLoadedExternalAssetCount( void ) const { return mLoadedExternalAssetsCount; } + inline U32 getLoadedPrivateAssetCount( void ) const { return mLoadedPrivateAssetsCount; } + inline U32 getMaxLoadedInternalAssetCount( void ) const { return mMaxLoadedInternalAssetsCount; } + inline U32 getMaxLoadedExternalAssetCount( void ) const { return mMaxLoadedExternalAssetsCount; } + inline U32 getMaxLoadedPrivateAssetCount( void ) const { return mMaxLoadedPrivateAssetsCount; } + void dumpDeclaredAssets( void ) const; + + /// Total acquired asset references. + inline void acquireAcquiredReferenceCount( void ) { mAcquiredReferenceCount++; } + inline void releaseAcquiredReferenceCount( void ) { AssertFatal( mAcquiredReferenceCount != 0, "AssetManager: Invalid acquired reference count." ); mAcquiredReferenceCount--; } + inline U32 getAcquiredReferenceCount( void ) const { return mAcquiredReferenceCount; } + + /// Asset queries. + S32 findAllAssets( AssetQuery* pAssetQuery, const bool ignoreInternal = true, const bool ignorePrivate = true ); + S32 findAssetName( AssetQuery* pAssetQuery, const char* pAssetName, const bool partialName = false ); + S32 findAssetCategory( AssetQuery* pAssetQuery, const char* pAssetCategory, const bool assetQueryAsSource = false ); + S32 findAssetAutoUnload( AssetQuery* pAssetQuery, const bool assetAutoUnload, const bool assetQueryAsSource = false ); + S32 findAssetInternal( AssetQuery* pAssetQuery, const bool assetInternal, const bool assetQueryAsSource = false ); + S32 findAssetPrivate( AssetQuery* pAssetQuery, const bool assetPrivate, const bool assetQueryAsSource = false ); + S32 findAssetType( AssetQuery* pAssetQuery, const char* pAssetType, const bool assetQueryAsSource = false ); + S32 findAssetDependsOn( AssetQuery* pAssetQuery, const char* pAssetId ); + S32 findAssetIsDependedOn( AssetQuery* pAssetQuery, const char* pAssetId ); + S32 findInvalidAssetReferences( AssetQuery* pAssetQuery ); + S32 findTaggedAssets( AssetQuery* pAssetQuery, const char* pAssetTagNames, const bool assetQueryAsSource = false ); + S32 findAssetLooseFile( AssetQuery* pAssetQuery, const char* pLooseFile, const bool assetQueryAsSource = false ); + + /// Declare Console Object. + DECLARE_CONOBJECT( AssetManager ); + +private: + bool scanDeclaredAssets( const char* pPath, const char* pExtension, const bool recurse, ModuleDefinition* pModuleDefinition ); + bool scanReferencedAssets( const char* pPath, const char* pExtension, const bool recurse ); + AssetDefinition* findAsset( const char* pAssetId ); + void addReferencedAsset( StringTableEntry assetId, StringTableEntry referenceFilePath ); + void renameAssetReferences( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ); + void removeAssetReferences( StringTableEntry assetId ); + void renameAssetDependencies( StringTableEntry assetIdFrom, StringTableEntry assetIdTo ); + void removeAssetDependencies( const char* pAssetId ); + void removeAssetLooseFiles( const char* pAssetId ); + void unloadAsset( AssetDefinition* pAssetDefinition ); + + /// Module callbacks. + virtual void onModulePreLoad( ModuleDefinition* pModuleDefinition ); + virtual void onModulePreUnload( ModuleDefinition* pModuleDefinition ); + virtual void onModulePostUnload( ModuleDefinition* pModuleDefinition ); +}; + +//----------------------------------------------------------------------------- + +extern AssetManager AssetDatabase; + +#endif // _ASSET_MANAGER_H_ \ No newline at end of file diff --git a/Engine/source/assets/assetManager_ScriptBinding.h b/Engine/source/assets/assetManager_ScriptBinding.h new file mode 100644 index 0000000000..ddfb3f3f2a --- /dev/null +++ b/Engine/source/assets/assetManager_ScriptBinding.h @@ -0,0 +1,811 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "console/engineAPI.h" +#include "assetBase.h" +#include "assetManager.h" +#include "module/moduleDefinition.h" +#include "console/sim.h" + +DefineEngineMethod(AssetManager, compileReferencedAssets, bool, (const char* moduleDefinition), (""), + "Compile the referenced assets determined by the specified module definition.\n" + "@param moduleDefinition The module definition specifies the asset manifest.\n" + "@return Whether the compilation was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::compileReferencedAssets() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Compile referenced assets. + return object->compileReferencedAssets( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, addModuleDeclaredAssets, bool, (const char* moduleDefinition), (""), + "Add any the declared assets specified by the module definition.\n" + "@param moduleDefinition The module definition specifies the asset manifest.\n" + "@return Whether adding declared assets was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::addDeclaredAssets() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Add module declared assets. + return object->addModuleDeclaredAssets( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, addDeclaredAsset, bool, (const char* moduleDefinition, const char* assetFilePath), ("", ""), + "Add the specified asset against the specified module definition.\n" + "@param moduleDefinition The module definition that may contain declared assets.\n" + "@return Whether adding declared assets was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::addDeclaredAsset() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Fetch asset file-path. + const char* pAssetFilePath = assetFilePath; + + // Add declared asset. + return object->addDeclaredAsset( pModuleDefinition, pAssetFilePath ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, addPrivateAsset, String, (const char* assetObject), (""), + "Adds a private asset object.\n" + "@param assetObject The asset object to add as a private asset.\n" + "@return The allocated private asset Id.\n") +{ + // Fetch asset. + AssetBase* pAssetBase; + Sim::findObject(assetObject, pAssetBase); + + // Did we find the asset? + if ( pAssetBase == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::addPrivateAsset() - Could not find the asset '%s'.", assetObject); + return StringTable->EmptyString(); + } + + // Add private asset. + return object->addPrivateAsset( pAssetBase ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, removeDeclaredAssets, bool, (const char* moduleDefinition), (""), + "Remove any the declared assets specified by the module definition.\n" + "@param moduleDefinition The module definition that may contain declared assets.\n" + "@return Whether removing declared assets was successful or not.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition; + Sim::findObject(moduleDefinition, pModuleDefinition); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::removeDeclaredAssets() - Could not find the module definition '%s'.", moduleDefinition); + return false; + } + + // Remove declared assets. + return object->removeDeclaredAssets( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, removeDeclaredAsset, bool, (const char* assetId), (""), + "Remove the specified declared asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return Whether removing the declared asset was successful or not.\n") +{ + // Remove the declared asset Id. + return object->removeDeclaredAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetName, String, (const char* assetId), (""), + "Gets the asset name from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset name from the specified asset Id.\n") +{ + return object->getAssetName(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetDescription, String, (const char* assetId), (""), + "Gets the asset description from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset description from the specified asset Id.\n") +{ + return object->getAssetDescription(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetCategory, String, (const char* assetId), (""), + "Gets the asset category from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset category from the specified asset Id.\n") +{ + return object->getAssetCategory(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetType, String, (const char* assetId), (""), + "Gets the asset type from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset type from the specified asset Id.\n") +{ + return object->getAssetType(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetFilePath, String, (const char* assetId), (""), + "Gets the asset file-path from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset file - path from the specified asset Id.\n") +{ + return object->getAssetFilePath(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetPath, String, (const char* assetId), (""), + "Gets the asset path (not including the asset file) from the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return The asset path(not including the asset file) from the specified asset Id.\n") +{ + return object->getAssetPath(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetModule, String, (const char* assetId), (""), + "Gets the module definition where the the specified asset Id is located.\n" + "@param assetId The selected asset Id.\n" + "@return The module definition where the the specified asset Id is located.\n") +{ + // Fetch module definition. + ModuleDefinition* pModuleDefinition = object->getAssetModuleDefinition(assetId); + + return pModuleDefinition == NULL ? StringTable->EmptyString() : pModuleDefinition->getIdString(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetInternal, bool, (const char* assetId), (""), + "Check whether the specified asset Id is internal or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is internal or not.\n") +{ + return object->isAssetInternal(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetPrivate, bool, (const char* assetId), (""), + "Check whether the specified asset Id is private or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is private or not.\n") +{ + return object->isAssetPrivate(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetAutoUnload, bool, (const char* assetId), (""), + "Check whether the specified asset Id is auto - unload or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is auto-unload or not.\n") +{ + return object->isAssetAutoUnload(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isAssetLoaded, bool, (const char* assetId), (""), + "Check whether the specified asset Id is loaded or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is loaded or not.\n") +{ + return object->isAssetLoaded(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isDeclaredAsset, bool, (const char* assetId), (""), + "Check whether the specified asset Id is declared or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is declared or not.\n") +{ + return object->isDeclaredAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, isReferencedAsset, bool, (const char* assetId), (""), + "Check whether the specified asset Id is referenced or not.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the specified asset Id is referenced or not.\n") +{ + return object->isReferencedAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, renameDeclaredAsset, bool, (const char* assetIdFrom, const char* assetIdTo), ("", ""), + "Rename declared asset Id.\n" + "@param assetIdFrom The selected asset Id to rename from.\n" + "@param assetIdFrom The selected asset Id to rename to.\n" + "@return Whether the rename was successful or not.\n") +{ + return object->renameDeclaredAsset(assetIdFrom, assetIdTo); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, renameReferencedAsset, bool, (const char* assetIdFrom, const char* assetIdTo), ("", ""), + "Rename referenced asset Id. \n" + "@param assetIdFrom The selected asset Id to rename from.\n" + "@param assetIdFrom The selected asset Id to rename to.\n" + "@return Whether the rename was successful or not.\n") +{ + return object->renameReferencedAsset(assetIdFrom, assetIdTo); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, acquireAsset, String, (const char* assetId, bool asPrivate), ("", false), + "Acquire the specified asset Id.\n" + "You must release the asset once you're finish with it using 'releaseAsset'.\n" + "@param assetId The selected asset Id.\n" + "@param asPrivate Whether to acquire the asset Id as a private asset.\n" + "@return The acquired asset or NULL if not acquired.\n") +{ + // Fetch asset Id. + const char* pAssetId = assetId; + + // Reset asset reference. + AssetBase* pAssetBase = NULL; + + // Acquire private asset? + if ( asPrivate ) + { + // Acquire private asset. + pAssetBase = object->acquireAsPrivateAsset( pAssetId ); + } + else + { + // Acquire public asset. + pAssetBase = object->acquireAsset( pAssetId ); + } + + return pAssetBase != NULL ? pAssetBase->getIdString() : StringTable->EmptyString(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, releaseAsset, bool, (const char* assetId), (""), + "Release the specified asset Id.\n" + "The asset should have been acquired using 'acquireAsset'.\n" + "@param assetId The selected asset Id.\n" + "@return Whether the asset was released or not.\n") +{ + // Release asset. + return object->releaseAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, purgeAssets, void, (),, + "Purge all assets that are not referenced even if they are set to not auto-unload.\n" + "Assets can be in this state because they are either set to not auto-unload or the asset manager has/is disabling auto-unload.\n" + "@return No return value.\n") +{ + // Purge assets. + object->purgeAssets(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, deleteAsset, bool, (const char* assetId, bool deleteLooseFiles, bool deleteDependencies), ("", false, false), + "Deletes the specified asset Id and optionally its loose files and asset dependencies.\n" + "@param assetId The selected asset Id.\n" + "@param deleteLooseFiles Whether to delete an assets loose files or not.\n" + "@param deleteDependencies Whether to delete assets that depend on this asset or not.\n" + "@return Whether the asset deletion was successful or not. A failure only indicates that the specified asset was not deleted but dependent assets and their loose files may have being deleted.\n") +{ + // Fetch asset Id. + const char* pAssetId = assetId; + + // Delete asset. + return object->deleteAsset( pAssetId, deleteLooseFiles, deleteDependencies ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, refreshAsset, void, (const char* assetId), (""), + "Refresh the specified asset Id.\n" + "@param assetId The selected asset Id.\n" + "@return No return value.\n") +{ + object->refreshAsset(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, refreshAllAssets, void, (bool includeUnloaded), (false), + "Refresh all declared assets.\n" + "@param Whether to include currently unloaded assets in the refresh or not. Optional: Defaults to false.\n" + "Refreshing all assets can be an expensive (time-consuming) operation to perform.\n" + "@return No return value.\n") +{ + // Refresh assets + object->refreshAllAssets(includeUnloaded); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, saveAssetTags, bool, (),, + "Save the currently loaded asset tags manifest.\n" + "@return Whether the save was successful or not.\n") +{ + // Save asset tags. + return object->saveAssetTags(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, restoreAssetTags, bool, (),, + "Restore the currently loaded asset tags manifest from disk (replace anything in memory).\n" + "@return Whether the restore was successful or not.\n") +{ + // Restore asset tags. + return object->restoreAssetTags(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getAssetTags, S32, (), , + "Gets the currently loaded asset tags manifest.\n" + "@return The currently loaded asset tags manifest or zero if not loaded.\n") +{ + // Fetch the asset tags manifest. + AssetTagsManifest* pAssetTagsManifest = object->getAssetTags(); + + return pAssetTagsManifest == NULL ? 0 : pAssetTagsManifest->getId(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAllAssets, S32, (const char* assetQuery, bool ignoreInternal, bool ignorePrivate), ("", true, true), + "Performs an asset query searching for all assets optionally ignoring internal assets.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param ignoreInternal Whether to ignore internal assets or not. Optional: Defaults to true.\n" + "@param ignorePrivate Whether to ignore private assets or not. Optional: Defaults to true.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAllAssets() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAllAssets( pAssetQuery, ignoreInternal, ignorePrivate ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetName, S32, (const char* assetQuery, const char* assetName, bool partialName), ("", "", false), + "Performs an asset query searching for the specified asset name.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetName The asset name to search for. This may be a partial name if 'partialName' is true.\n" + "@param partialName Whether the asset name is to be used as a partial name or not. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetName() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset name. + const char* pAssetName = assetName; + + // Perform query. + return object->findAssetName( pAssetQuery, pAssetName, partialName ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetCategory, S32, (const char* assetQuery, const char* assetCategory, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified asset category.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetCategory The asset category to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetCategory() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset category. + const char* pAssetCategory = assetCategory; + + // Perform query. + return object->findAssetCategory( pAssetQuery, pAssetCategory, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetAutoUnload, S32, (const char* assetQuery, bool assetAutoUnload, bool assetQueryAsSource), ("", false, false), + "Performs an asset query searching for the specified asset auto-unload flag.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetInternal The asset internal flag to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetAutoUnload() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAssetAutoUnload( pAssetQuery, assetAutoUnload, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetInternal, S32, (const char* assetQuery, bool assetInternal, bool assetQueryAsSource), ("", false, false), + "Performs an asset query searching for the specified asset internal flag.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetInternal The asset internal flag to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetInternal() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAssetInternal( pAssetQuery, assetInternal, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetPrivate, S32, (const char* assetQuery, bool assetPrivate, bool assetQueryAsSource), ("", false, false), + "Performs an asset query searching for the specified asset private flag.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetPrivate The asset private flag to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetPrivate() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findAssetInternal( pAssetQuery, assetPrivate, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetType, S32, (const char* assetQuery, const char* assetType, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified asset type.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetType The asset type to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetType() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset type. + const char* pAssetType = assetType; + + // Perform query. + return object->findAssetType( pAssetQuery, pAssetType, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetDependsOn, S32, (const char* assetQuery, const char* assetId), ("", ""), + "Performs an asset query searching for asset Ids that the specified asset Id depends on.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetId The asset Id to query for any asset Ids that it depends on.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetDependsOn() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset Id. + const char* pAssetId = assetId; + + // Perform query. + return object->findAssetDependsOn( pAssetQuery, pAssetId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetIsDependedOn, S32, (const char* assetQuery, const char* assetId), ("", ""), + "Performs an asset query searching for asset Ids that depend on the specified asset Id.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetId The asset Id to query for any asset Ids that may depend on it.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetIsDependedOn() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset Id. + const char* pAssetId = assetId; + + // Perform query. + return object->findAssetIsDependedOn( pAssetQuery, pAssetId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findInvalidAssetReferences, S32, (const char* assetQuery), (""), + "Performs an asset query searching for invalid asset references.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@return The number of asset Ids found that are invalid or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findInvalidAssetReferences() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Perform query. + return object->findInvalidAssetReferences( pAssetQuery ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findTaggedAssets, S32, (const char* assetQuery, const char* assetTagNames, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified asset tag name(s).\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetTagNames The asset tag name or names to search for. Multiple names can be specified using comma, space, tab or newline separation. Tags use an OR operation i.e. only assets tagged with ANY of the specified tags will be returned.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findTaggedAssets() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset tag name(s). + const char* pAssetTagNames = assetTagNames; + + // Perform query. + return object->findTaggedAssets( pAssetQuery, pAssetTagNames, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, findAssetLooseFile, S32, (const char* assetQuery, const char* assetLooseFile, bool assetQueryAsSource), ("", "", false), + "Performs an asset query searching for the specified loose file.\n" + "@param assetQuery The asset query object that will be populated with the results.\n" + "@param assetLooseFile The loose-file used by the asset to search for.\n" + "@param assetQueryAsSource Whether to use the asset query as the data-source rather than the asset managers database or not. Doing this effectively filters the asset query. Optional: Defaults to false.\n" + "@return The number of asset Ids found or (-1) if an error occurred.\n") +{ + // Fetch asset query. + AssetQuery* pAssetQuery; + Sim::findObject(assetQuery, pAssetQuery); + + // Did we find the asset query? + if ( pAssetQuery == NULL ) + { + // No, so warn. + Con::warnf("AssetManager::findAssetLooseFile() - Could not find the asset query object '%s'.", assetQuery); + return -1; + } + + // Fetch asset loose file. + const char* pAssetLooseFile = assetLooseFile; + + // Perform query. + return object->findAssetLooseFile( pAssetQuery, pAssetLooseFile, assetQueryAsSource ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getDeclaredAssetCount, bool, (),, + "Gets the number of declared assets.\n" + "@return Returns the number of declared assets.\n") +{ + return object->getDeclaredAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getReferencedAssetCount, bool, (), , + "Gets the number of asset referenced.\n" + "@return Returns the number of asset references.\n") +{ + return object->getReferencedAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getLoadedInternalAssetCount, bool, (), , + "Gets the number of loaded internal assets.\n" + "@return Returns the number of loaded internal assets.\n") +{ + return object->getLoadedInternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getMaxLoadedInternalAssetCount, bool, (), , + "Gets the maximum number of loaded internal assets.\n" + "@return Returns the maximum number of loaded internal assets.\n") +{ + return object->getMaxLoadedInternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getLoadedExternalAssetCount, bool, (), , + "Gets the number of loaded external assets.\n" + "@return Returns the number of loaded external assets.\n") +{ + return object->getLoadedExternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, getMaxLoadedExternalAssetCount, bool, (), , + "Gets the maximum number of loaded external assets.\n" + "@return Returns the maximum number of loaded external assets.\n") +{ + return object->getMaxLoadedExternalAssetCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetManager, dumpDeclaredAssets, void, (), , + "Dumps a breakdown of all declared assets.\n" + "@return No return value.\n") +{ + return object->dumpDeclaredAssets(); +} diff --git a/Engine/source/assets/assetPtr.h b/Engine/source/assets/assetPtr.h new file mode 100644 index 0000000000..a68a4e2875 --- /dev/null +++ b/Engine/source/assets/assetPtr.h @@ -0,0 +1,184 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_PTR_H_ +#define _ASSET_PTR_H_ + +#ifndef _ASSET_MANAGER_H_ +#include "assetManager.h" +#endif + +//----------------------------------------------------------------------------- + +class AssetPtrCallback +{ + friend class AssetManager; + +protected: + virtual void onAssetRefreshed( AssetPtrBase* pAssetPtrBase ) = 0; +}; + +//----------------------------------------------------------------------------- + +class AssetPtrBase +{ +public: + AssetPtrBase() {}; + virtual ~AssetPtrBase() + { + // Un-register any notifications. + unregisterRefreshNotify(); + }; + + /// Referencing. + virtual void clear( void ) = 0; + virtual void setAssetId( const char* pAssetId ) = 0; + virtual StringTableEntry getAssetId( void ) const = 0; + virtual StringTableEntry getAssetType( void ) const = 0; + virtual bool isAssetId( const char* pAssetId ) const = 0; + + /// Validity. + virtual bool isNull( void ) const = 0; + virtual bool notNull( void ) const = 0; + + /// Notification. + inline void registerRefreshNotify( AssetPtrCallback* pCallback ) + { + // Sanity! + AssertFatal( AssetDatabase.isProperlyAdded(), "AssetPtrBase::registerRefreshNotify() - Cannot register an asset pointer with the asset system." ); + + // register refresh notify. + AssetDatabase.registerAssetPtrRefreshNotify( this, pCallback ); + } + + void unregisterRefreshNotify( void ) + { + // Un-register the refresh notify if the asset system is available. + if ( AssetDatabase.isProperlyAdded() ) + AssetDatabase.unregisterAssetPtrRefreshNotify( this ); + } +}; + +//----------------------------------------------------------------------------- + +template class AssetPtr : public AssetPtrBase +{ +private: + SimObjectPtr mpAsset; + +public: + AssetPtr() {} + AssetPtr( const char* pAssetId ) + { + // Finish if this is an invalid asset Id. + if ( pAssetId == NULL || *pAssetId == 0 ) + return; + + // Acquire asset. + mpAsset = AssetDatabase.acquireAsset( pAssetId ); + } + AssetPtr( const AssetPtr& assetPtr ) + { + // Does the asset pointer have an asset? + if ( assetPtr.notNull() ) + { + // Yes, so acquire the asset. + mpAsset = AssetDatabase.acquireAsset( assetPtr->getAssetId() ); + } + } + virtual ~AssetPtr() + { + // Do we have an asset? + if ( notNull() ) + { + // Yes, so release it. + AssetDatabase.releaseAsset( mpAsset->getAssetId() ); + } + } + + /// Assignment. + AssetPtr& operator=( const char* pAssetId ) + { + // Do we have an asset? + if ( notNull() ) + { + // Yes, so finish if the asset Id is already assigned. + if ( isAssetId( pAssetId ) ) + return *this; + + // No, so release it. + AssetDatabase.releaseAsset( mpAsset->getAssetId() ); + } + + // Is the asset Id at least okay to attempt to acquire the asset? + if ( pAssetId != NULL && *pAssetId != 0 ) + { + // Yes, so acquire the asset. + mpAsset = AssetDatabase.acquireAsset( pAssetId ); + } + else + { + // No, so remove reference. + mpAsset = NULL; + } + + // Return Reference. + return *this; + } + + AssetPtr& operator=( const AssetPtr& assetPtr ) + { + // Set asset pointer. + *this = assetPtr->getAssetId(); + + // Return Reference. + return *this; + } + + /// Referencing. + virtual void clear( void ) + { + // Do we have an asset? + if ( notNull() ) + { + // Yes, so release it. + AssetDatabase.releaseAsset( mpAsset->getAssetId() ); + } + + // Reset the asset reference. + mpAsset = NULL; + } + + T* operator->( void ) const { return mpAsset; } + T& operator*( void ) const { return *mpAsset; } + operator T*( void ) const { return mpAsset; } + virtual void setAssetId( const char* pAssetId ) { *this = pAssetId; } + virtual StringTableEntry getAssetId( void ) const { return isNull() ? StringTable->EmptyString() : mpAsset->getAssetId(); } + virtual StringTableEntry getAssetType(void) const { return isNull() ? StringTable->EmptyString() : mpAsset->getClassName(); } + virtual bool isAssetId( const char* pAssetId ) const { return pAssetId == NULL ? isNull() : getAssetId() == StringTable->insert(pAssetId); } + + /// Validity. + virtual bool isNull( void ) const { return mpAsset.isNull(); } + virtual bool notNull( void ) const { return !mpAsset.isNull(); } +}; + +#endif // _ASSET_PTR_H_ diff --git a/Engine/source/assets/assetQuery.cpp b/Engine/source/assets/assetQuery.cpp new file mode 100644 index 0000000000..7b66db6fc4 --- /dev/null +++ b/Engine/source/assets/assetQuery.cpp @@ -0,0 +1,121 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_QUERY_H_ +#include "assetQuery.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_CUSTOM_H_ +#include "persistence/taml/tamlCustom.h" +#endif + +// Script bindings. +#include "assetQuery_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( AssetQuery ); + +//----------------------------------------------------------------------------- + +void AssetQuery::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addProtectedField("Count", TypeS32, 0, &defaultProtectedSetFn, &getCount, &writeCount, "Gets the number of results in the asset query."); +} + +//----------------------------------------------------------------------------- + +void AssetQuery::onTamlCustomWrite( TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomWrite( customNodes ); + + // Add node. + TamlCustomNode* pCustomNode = customNodes.addNode( ASSETQUERY_RESULTS_NODE_NAME ); + + // Finish if no assets. + if (mAssetList.size() == 0) + return; + + // Iterate asset. + for (Vector::iterator assetItr = mAssetList.begin(); assetItr != mAssetList.end(); ++assetItr) + { + // Add asset node. + TamlCustomNode* pAssetNode = pCustomNode->addNode( ASSETQUERY_ASSETNODE_NAME ); + + // Add field. + pAssetNode->addField( ASSETQUERY_ASSETID_FIELD_NAME, *assetItr ); + } +} + +//----------------------------------------------------------------------------- + +void AssetQuery::onTamlCustomRead( const TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomRead( customNodes ); + + // Find custom node name. + const TamlCustomNode* pResultsNode = customNodes.findNode( ASSETQUERY_RESULTS_NODE_NAME ); + + // Finish if we don't have a results name. + if ( pResultsNode == NULL ) + return; + + // Fetch node name. + StringTableEntry assetNodeName = StringTable->insert( ASSETQUERY_ASSETNODE_NAME ); + + // Fetch children asset nodes. + const TamlCustomNodeVector& assetNodes = pResultsNode->getChildren(); + + // Iterate asset nodes. + for( TamlCustomNodeVector::const_iterator assetNodeItr = assetNodes.begin(); assetNodeItr != assetNodes.end(); ++assetNodeItr ) + { + // Fetch asset node. + const TamlCustomNode* pAssetNode = *assetNodeItr; + + // Skip if an unknown node name. + if ( pAssetNode->getNodeName() != assetNodeName ) + continue; + + // Fetch field. + const TamlCustomField* pField = pAssetNode->findField( ASSETQUERY_ASSETID_FIELD_NAME ); + + // Do we find the field? + if ( pField == NULL ) + { + // No, so warn. + Con::warnf( "AssetQuery::onTamlCustomRead() - Could not find '%s' field.", ASSETQUERY_ASSETID_FIELD_NAME ); + continue; + } + + // Store asset. + mAssetList.push_back(pField->getFieldValue()); + } +} \ No newline at end of file diff --git a/Engine/source/assets/assetQuery.h b/Engine/source/assets/assetQuery.h new file mode 100644 index 0000000000..86a7f744f8 --- /dev/null +++ b/Engine/source/assets/assetQuery.h @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_QUERY_H_ +#define _ASSET_QUERY_H_ + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tVector.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +#ifndef _TAML_CUSTOM_H_ +#include "persistence/taml/tamlCustom.h" +#endif + +//----------------------------------------------------------------------------- + +#define ASSETQUERY_RESULTS_NODE_NAME "Results" +#define ASSETQUERY_ASSETNODE_NAME "Asset" +#define ASSETQUERY_ASSETID_FIELD_NAME "AssetId" + +//----------------------------------------------------------------------------- + +class AssetQuery : public SimObject +{ +private: + typedef SimObject Parent; + +protected: + virtual void onTamlCustomWrite( TamlCustomNodes& customNodes ); + virtual void onTamlCustomRead( const TamlCustomNodes& customNodes ); + + static const char* getCount(void* obj, const char* data) { return Con::getIntArg(static_cast(obj)->mAssetList.size()); } + static bool writeCount( void* obj, StringTableEntry pFieldName ) { return false; } + +public: + AssetQuery() {} + virtual ~AssetQuery() {} + + /// SimObject overrides + static void initPersistFields(); + + Vector mAssetList; + + /// Whether asset is contained or not. + inline bool containsAsset( StringTableEntry assetId ) + { + for (Vector::const_iterator assetItr = mAssetList.begin(); assetItr != mAssetList.end(); ++assetItr) + { + if ( *assetItr == assetId ) + return true; + } + return false; + } + + /// Set assets. + inline void set( const AssetQuery& assetQuery ) { this->mAssetList = assetQuery.mAssetList; } + + /// Declare Console Object. + DECLARE_CONOBJECT( AssetQuery ); +}; + +#endif // _ASSET_QUERY_H_ + diff --git a/Engine/source/assets/assetQuery_ScriptBinding.h b/Engine/source/assets/assetQuery_ScriptBinding.h new file mode 100644 index 0000000000..3324054e11 --- /dev/null +++ b/Engine/source/assets/assetQuery_ScriptBinding.h @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_QUERY_H_ +#include "assets/assetQuery.h" +#endif + +#include "console/engineAPI.h" + +DefineConsoleMethod(AssetQuery, clear, void, (),,"Clears all asset Id results." + "Clears all asset Id results.\n" + "@return () No return value.\n") +{ + object->mAssetList.clear(); +} + +//----------------------------------------------------------------------------- + + +DefineConsoleMethod(AssetQuery, set, bool, (S32 queryId), , + "Sets the asset query to a copy of the specified asset query.\n" + "@param assetQuery The asset query to copy.\n" + "@return Whether the operation succeeded or not.\n") +{ + // Find asset query. + AssetQuery* pAssetQuery; + + if (!Sim::findObject(queryId, pAssetQuery)) + { + // No, so warn. + Con::warnf("AssetQuery::set() - Could not find asset query '%i'.", queryId); + return false; + } + + // Set asset query. + object->set( *pAssetQuery ); + + return true; +} + +//----------------------------------------------------------------------------- + +DefineConsoleMethod(AssetQuery, getCount, S32, (), , + "Gets the count of asset Id results.\n" + "@return (int)The count of asset Id results.\n") +{ + return object->mAssetList.size(); +} + +//----------------------------------------------------------------------------- + +DefineConsoleMethod(AssetQuery, getAsset, const char*, (S32 resultIndex), (-1), + "Gets the asset Id at the specified query result index.\n" + "@param resultIndex The query result index to use.\n" + "@return (assetId)The asset Id at the specified index or NULL if not valid.\n") +{ + // Is index within bounds? + if (resultIndex >= object->mAssetList.size()) + { + // No, so warn. + Con::warnf("AssetQuery::getAsset() - Result index '%s' is out of bounds.", resultIndex); + return StringTable->EmptyString(); + } + + return object->mAssetList[resultIndex]; +} diff --git a/Engine/source/assets/assetTagsManifest.cpp b/Engine/source/assets/assetTagsManifest.cpp new file mode 100644 index 0000000000..04d0ce7f13 --- /dev/null +++ b/Engine/source/assets/assetTagsManifest.cpp @@ -0,0 +1,564 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_TAGS_MANIFEST_H_ +#include "assetTagsManifest.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script binding. +#include "assetTagsManifest_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( AssetTagsManifest ); + +//----------------------------------------------------------------------------- + +AssetTagsManifest::AssetTagsManifest() +{ +} + +//----------------------------------------------------------------------------- + +AssetTagsManifest::~AssetTagsManifest() +{ + // Iterate tags. + for( typeTagNameHash::iterator tagNameItr = mTagNameDatabase.begin(); tagNameItr != mTagNameDatabase.end(); ++tagNameItr ) + { + // Delete asset tag. + delete tagNameItr->value; + } + + // Clear database. + mTagNameDatabase.clear(); + mAssetToTagDatabase.clear(); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetTagsManifest::fetchTagName( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + return StringTable->insert( pTagName, true ); +} + +//----------------------------------------------------------------------------- + +AssetTagsManifest::AssetTag* AssetTagsManifest::findAssetTag( const char* pTagName ) +{ + // Fetch tag name. + StringTableEntry tagName = fetchTagName( pTagName ); + + // Finish if the tag already exists. + typeTagNameHash::iterator tagNameItr = mTagNameDatabase.find( tagName ); + + return tagNameItr == mTagNameDatabase.end() ? NULL : tagNameItr->value; +} + +//----------------------------------------------------------------------------- + +void AssetTagsManifest::renameAssetId( const char* pAssetIdFrom, const char* pAssetIdTo ) +{ + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Cannot rename from NULL asset Id." ); + AssertFatal( pAssetIdTo != NULL, "Cannot rename to NULL asset Id." ); + + // Fetch asset Ids. + StringTableEntry assetIdFrom = StringTable->insert( pAssetIdFrom ); + StringTableEntry assetIdTo = StringTable->insert( pAssetIdTo ); + + while( true ) + { + // Find asset Id. + typeAssetToTagHash::Iterator assetIdItr = mAssetToTagDatabase.find( assetIdFrom ); + + // Finish if no asset Id to rename. + if ( assetIdItr == mAssetToTagDatabase.end() ) + return; + + // Fetch asset tag. + AssetTag* pAssetTag = assetIdItr->value; + + // Untag old asset Id. + untag( assetIdFrom, pAssetTag->mTagName ); + + // Tag new asset Id. + tag( assetIdTo, pAssetTag->mTagName ); + } +} + +//----------------------------------------------------------------------------- + +void AssetTagsManifest::onTamlCustomWrite( TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomWrite( customNodes ); + + // Finish if no tags. + if ( mTagNameDatabase.size() == 0 ) + return; + + // Add node. + TamlCustomNode* pTagsNode = customNodes.addNode( ASSETTAGS_TAGS_NODE_NAME ); + + // Iterate tags. + for( typeTagNameHash::iterator tagItr = mTagNameDatabase.begin(); tagItr != mTagNameDatabase.end(); ++tagItr ) + { + // Add tag node. + TamlCustomNode* pTagNode = pTagsNode->addNode( ASSETTAGS_TAGS_TYPE_NAME ); + + // Add fields. + pTagNode->addField( ASSETTAGS_TAGS_NAME_FIELD, tagItr->key ); + } + + // Add node. + TamlCustomNode* pAssetTagsNode = customNodes.addNode( ASSETTAGS_ASSETS_NODE_NAME ); + + // Iterate asset locations. + for( typeAssetToTagHash::Iterator assetTagItr = mAssetToTagDatabase.begin(); assetTagItr != mAssetToTagDatabase.end(); ++assetTagItr ) + { + // Add asset tag node. + TamlCustomNode* pAssetNode = pAssetTagsNode->addNode( ASSETTAGS_ASSETS_TYPE_NAME ); + + // Add fields. + pAssetNode->addField( ASSETTAGS_ASSETS_ASSETID_FIELD, assetTagItr->key ); + pAssetNode->addField( ASSETTAGS_ASSETS_TAG_FIELD, assetTagItr->value->mTagName ); + } +} + +//----------------------------------------------------------------------------- + +void AssetTagsManifest::onTamlCustomRead( const TamlCustomNodes& customNodes ) +{ + // Call parent. + Parent::onTamlCustomRead( customNodes ); + + // Find tags nodes. + const TamlCustomNode* pTagProperty = customNodes.findNode( ASSETTAGS_TAGS_NODE_NAME ); + + // Finish if we don't have a tags node name. + if ( pTagProperty == NULL ) + return; + + // Fetch node name. + StringTableEntry tagNodeName = StringTable->insert( ASSETTAGS_TAGS_TYPE_NAME ); + + // Fetch children asset nodes. + const TamlCustomNodeVector& tagNodes = pTagProperty->getChildren(); + + // Iterate tag nodes. + for( TamlCustomNodeVector::const_iterator tagNodeItr = tagNodes.begin(); tagNodeItr != tagNodes.end(); ++tagNodeItr ) + { + // Fetch tag node. + const TamlCustomNode* pTagNode = *tagNodeItr; + + // Skip if an unknown node name. + if ( pTagNode->getNodeName() != tagNodeName ) + continue; + + // Fetch "Name" field. + const TamlCustomField* pTagNameField = pTagNode->findField( ASSETTAGS_TAGS_NAME_FIELD ); + + // Do we find the field? + if ( pTagNameField == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Could not find '%s' field.", ASSETTAGS_TAGS_NAME_FIELD ); + continue; + } + + // Create the tag. + createTag( pTagNameField->getFieldValue() ); + } + + // Find asset tags node. + const TamlCustomNode* pAssetTagProperty = customNodes.findNode( ASSETTAGS_ASSETS_NODE_NAME ); + + // Finish if we don't have an asset tags node name. + if ( pAssetTagProperty == NULL ) + return; + + // Fetch node name. + StringTableEntry assetTagNodeName = StringTable->insert( ASSETTAGS_ASSETS_TYPE_NAME ); + + // Fetch children asset tag nodes. + const TamlCustomNodeVector& assetTagNodes = pAssetTagProperty->getChildren(); + + // Iterate property alias. + for( TamlCustomNodeVector::const_iterator assetTagNodeItr = assetTagNodes.begin(); assetTagNodeItr != assetTagNodes.end(); ++assetTagNodeItr ) + { + // Fetch asset node. + const TamlCustomNode* pAssetTagNode = *assetTagNodeItr; + + // Skip if an unknown node name. + if ( pAssetTagNode->getNodeName() != assetTagNodeName ) + continue; + + // Fetch "AssetId" field. + const TamlCustomField* pAssetIdField = pAssetTagNode->findField( ASSETTAGS_ASSETS_ASSETID_FIELD ); + + // Do we find the field? + if ( pAssetIdField == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Could not find '%s' field.", ASSETTAGS_ASSETS_ASSETID_FIELD ); + continue; + } + + // Fetch "Tag" field. + const TamlCustomField* pTagField = pAssetTagNode->findField( ASSETTAGS_ASSETS_TAG_FIELD ); + + // Do we find the field? + if ( pTagField == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Could not find '%s' field.", ASSETTAGS_ASSETS_TAG_FIELD ); + continue; + } + + // Tag the asset. + tag( pAssetIdField->getFieldValue(), pTagField->getFieldValue() ); + } +} + +//----------------------------------------------------------------------------- + +const AssetTagsManifest::AssetTag* AssetTagsManifest::createTag( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Finish if the tag already exists. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Return asset tag if already created. + if ( pAssetTag != NULL ) + return pAssetTag; + + // Fetch tag name. + StringTableEntry tagName = fetchTagName( pTagName ); + + // Generate the asset tag. + pAssetTag = new AssetTag( tagName ); + + // Add the tag. + mTagNameDatabase.insert( tagName, pAssetTag ); + + return pAssetTag; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::renameTag( const char* pOldTagName, const char* pNewTagName ) +{ + // Sanity! + AssertFatal( pOldTagName != NULL, "Cannot use a NULL tag name." ); + AssertFatal( pNewTagName != NULL, "Cannot use a NULL tag name." ); + + // Find old asset tags. + AssetTag* pOldAssetTag = findAssetTag( pOldTagName ); + + // Did we find the asset tag? + if ( pOldAssetTag == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Cannot rename tag '%s' as it does not exist.", pOldTagName ); + return false; + } + + // Are the old and new tags the same? + if ( pOldAssetTag->mTagName == fetchTagName( pNewTagName ) ) + { + // Yes, so warn. + Con::warnf( "AssetTagsManifest: Cannot rename tag '%s' to tag '%s' as they are the same.", pOldTagName, pNewTagName ); + return false; + } + + // Create new tag. + AssetTag* pNewAssetTag = const_cast( createTag( pNewTagName ) ); + + // Transfer asset tags. + for ( Vector::iterator assetIdItr = pOldAssetTag->mAssets.begin(); assetIdItr != pOldAssetTag->mAssets.end(); ++assetIdItr ) + { + pNewAssetTag->mAssets.push_back( *assetIdItr ); + } + + // Delete old tag. + deleteTag( pOldTagName ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::deleteTag( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Did we find the asset tag? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest: Cannot delete tag '%s' as it does not exist.", pTagName ); + return false; + } + + // Remove the tag. + mTagNameDatabase.erase( pAssetTag->mTagName ); + + // Remove the asset tags. + for ( Vector::iterator assetIdItr = pAssetTag->mAssets.begin(); assetIdItr != pAssetTag->mAssets.end(); ++assetIdItr ) + { + // Find asset Id tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find( *assetIdItr ); + + // Iterate asset Id tags. + while( assetItr != mAssetToTagDatabase.end() && assetItr->key == *assetIdItr ) + { + // Is this the asset tag? + if ( assetItr->value == pAssetTag ) + { + // Yes, so erase it. + mAssetToTagDatabase.erase( assetItr ); + break; + } + + // Next entry. + assetItr++; + } + } + + // Delete the asset tag. + delete pAssetTag; + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::isTag( const char* pTagName ) +{ + // Sanity! + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Check whether tag exists or not. + return findAssetTag( pTagName ) != NULL; +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetTagsManifest::getTag( const U32 tagIndex ) +{ + // Finish if invalid tag count. + AssertFatal( tagIndex < getTagCount(), "Tag index is out of bounds." ); + + // Fetch tag iterator. + typeTagNameHash::iterator tagItr = mTagNameDatabase.begin(); + + // Find asset tag by index. + // NOTE: Unfortunately this is slow as it's not the natural access method. + for( U32 index = 0; index < tagIndex; ++index, ++tagItr ) {}; + + // Return tag name. + return tagItr->value->mTagName; +} + +//----------------------------------------------------------------------------- + +U32 AssetTagsManifest::getAssetTagCount( const char* pAssetId ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + return (U32)mAssetToTagDatabase.count( assetId ); +} + +//----------------------------------------------------------------------------- + +StringTableEntry AssetTagsManifest::getAssetTag( const char* pAssetId, const U32 tagIndex ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + + // Fetch asset Id. + StringTableEntry assetId = StringTable->insert( pAssetId ); + + // Sanity! + AssertFatal( tagIndex < (U32)mAssetToTagDatabase.count( assetId ), "Asset tag index is out of bounds." ); + + // Find asset tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find( assetId ); + + // Find asset tag by index. + // NOTE: Unfortunately this is slow as it's not the natural access method. + for( U32 index = 0; index < tagIndex; ++index, ++assetItr ) {}; + + // Return tag name. + return assetItr->value->mTagName; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::tag( const char* pAssetId, const char* pTagName ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Does the tag exist? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot tag asset Id '%s' with tag name '%s' as tag name does not exist.", pAssetId, pTagName ); + return false; + } + + // Is the asset Id valid? + if ( !AssetDatabase.isDeclaredAsset( pAssetId ) ) + { + // No, so warn. + Con::warnf( "AssetTagsManifest::onTamlCustomRead() - Ignoring asset Id '%s' mapped to tag name '%s' as it is not a declared asset Id.", pAssetId, pTagName ); + return false; + } + + // Fetch asset Id. + typeAssetId assetId = StringTable->insert( pAssetId ); + + // Find asset Id tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find(assetId); + + // Iterate asset Id tags. + while( assetItr != mAssetToTagDatabase.end() && assetItr->key == assetId ) + { + // Is the asset already tagged appropriately? + if ( assetItr->value == pAssetTag ) + return true; + + // Next entry. + assetItr++; + } + + // No, so add tag. + mAssetToTagDatabase.insertEqual( assetId, pAssetTag ); + + // Add to asset tag. + pAssetTag->mAssets.push_back( assetId ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::untag( const char* pAssetId, const char* pTagName ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Does the tag exist? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot untag asset Id '%s' from tag name '%s' as tag name does not exist.", pAssetId, pTagName ); + return false; + } + + // Fetch asset Id. + typeAssetId assetId = StringTable->insert( pAssetId ); + + // Is the asset tagged? + if ( !pAssetTag->containsAsset( assetId ) ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot untag asset Id '%s' from tag name '%s' as the asset is not tagged with the tag name.", pAssetId, pTagName ); + return false; + } + + // Remove asset from assert tag. + pAssetTag->removeAsset( assetId ); + + // Find asset Id tag. + typeAssetToTagHash::Iterator assetItr = mAssetToTagDatabase.find(assetId); + + // Iterate asset Id tags. + while( assetItr != mAssetToTagDatabase.end() && assetItr->key == assetId ) + { + // Is this the asset tag? + if ( assetItr->value == pAssetTag ) + { + // Yes, so remove it. + mAssetToTagDatabase.erase( assetItr ); + break; + } + + // Next entry. + assetItr++; + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool AssetTagsManifest::hasTag( const char* pAssetId, const char* pTagName ) +{ + // Sanity! + AssertFatal( pAssetId != NULL, "Cannot use a NULL asset Id." ); + AssertFatal( pTagName != NULL, "Cannot use a NULL tag name." ); + + // Find asset tag. + AssetTag* pAssetTag = findAssetTag( pTagName ); + + // Does the tag exist? + if ( pAssetTag == NULL ) + { + // No, so warn. + Con::warnf("AssetTagsManifest: Cannot check if asset Id '%s' has tag name '%s' as tag name does not exist.", pAssetId, pTagName ); + return false; + } + + // Return whether asset Id is tagged. + return pAssetTag->containsAsset( StringTable->insert( pAssetId ) ); +} diff --git a/Engine/source/assets/assetTagsManifest.h b/Engine/source/assets/assetTagsManifest.h new file mode 100644 index 0000000000..82104bcfd2 --- /dev/null +++ b/Engine/source/assets/assetTagsManifest.h @@ -0,0 +1,148 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _ASSET_TAGS_MANIFEST_H_ +#define _ASSET_TAGS_MANIFEST_H_ + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TDICTIONARY_H_ +#include "core/util/tDictionary.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tvector.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +//----------------------------------------------------------------------------- + +#define ASSETTAGS_TAGS_NODE_NAME "Tags" +#define ASSETTAGS_TAGS_TYPE_NAME "Tag" +#define ASSETTAGS_TAGS_NAME_FIELD "Name" + +#define ASSETTAGS_ASSETS_NODE_NAME "Assets" +#define ASSETTAGS_ASSETS_TYPE_NAME "Tag" +#define ASSETTAGS_ASSETS_ASSETID_FIELD "AssetId" +#define ASSETTAGS_ASSETS_TAG_FIELD "Name" + +//----------------------------------------------------------------------------- + +class AssetManager; + +//----------------------------------------------------------------------------- + +class AssetTagsManifest : public SimObject +{ + friend class AssetManager; + +private: + typedef SimObject Parent; + typedef StringTableEntry typeAssetId; + typedef StringTableEntry typeAssetTagName; + +public: + /// Asset location. + class AssetTag + { + public: + AssetTag( StringTableEntry tagName ) + { + // Sanity! + AssertFatal( tagName != NULL, "Cannot use a NULL tag name." ); + + // Case sensitive tag name. + mTagName = tagName; + } + + bool containsAsset( typeAssetId assetId ) + { + for ( Vector::iterator assetIdItr = mAssets.begin(); assetIdItr != mAssets.end(); ++assetIdItr ) + { + if ( *assetIdItr == assetId ) + return true; + } + + return false; + } + + void removeAsset( typeAssetId assetId ) + { + for ( Vector::iterator assetIdItr = mAssets.begin(); assetIdItr != mAssets.end(); ++assetIdItr ) + { + if ( *assetIdItr == assetId ) + { + mAssets.erase( assetIdItr ); + return; + } + } + } + + typeAssetTagName mTagName; + Vector mAssets; + }; + + /// Asset/Tag database. + typedef HashMap typeTagNameHash; + typedef HashTable typeAssetToTagHash; + +private: + typeTagNameHash mTagNameDatabase; + typeAssetToTagHash mAssetToTagDatabase; + +private: + StringTableEntry fetchTagName( const char* pTagName ); + AssetTag* findAssetTag( const char* pTagName ); + void renameAssetId( const char* pAssetIdFrom, const char* pAssetIdTo ); + +protected: + virtual void onTamlCustomWrite( TamlCustomNodes& customNodes ); + virtual void onTamlCustomRead( const TamlCustomNodes& customNodes ); + +public: + AssetTagsManifest(); + virtual ~AssetTagsManifest(); + + /// Tagging. + const AssetTag* createTag( const char* pTagName ); + bool renameTag( const char* pOldTagName, const char* pNewTagName ); + bool deleteTag( const char* pTagName ); + bool isTag( const char* pTagName ); + inline U32 getTagCount( void ) const { return (U32)mTagNameDatabase.size(); } + StringTableEntry getTag( const U32 tagIndex ); + U32 getAssetTagCount( const char* pAssetId ); + StringTableEntry getAssetTag( const char* pAssetId, const U32 tagIndex ); + bool tag( const char* pAssetId, const char* pTagName ); + bool untag( const char* pAssetId, const char* pTagName ); + bool hasTag( const char* pAssetId, const char* pTagName ); + + /// Declare Console Object. + DECLARE_CONOBJECT( AssetTagsManifest ); +}; + +#endif // _ASSET_TAGS_MANIFEST_H_ + diff --git a/Engine/source/assets/assetTagsManifest_ScriptBinding.h b/Engine/source/assets/assetTagsManifest_ScriptBinding.h new file mode 100644 index 0000000000..52e8b2c408 --- /dev/null +++ b/Engine/source/assets/assetTagsManifest_ScriptBinding.h @@ -0,0 +1,151 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "console/engineAPI.h" +#include "assetTagsManifest.h" + +DefineEngineMethod(AssetTagsManifest, createTag, void, (const char* tagName), (""), + "Creates an asset tag.\n" + "@param tagName The tag name to create.\n" + "@return No return value.\n") +{ + object->createTag(tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, renameTag, bool, (const char* oldTagName, const char* newTagName),, + "Renames an existing asset tag.\n" + "@param tagName The tag name to rename.\n" + "@param newTagName The new tag name to assign.\n" + "@return Whether the asset tag was renamed or not.\n") +{ + return object->renameTag(oldTagName, newTagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, deleteTag, bool, (const char* tagName),, + "Deletes an asset tag.\n" + "@param tagName The tag name to delete.\n" + "@return Whether the asset tag was deleted or not.\n") +{ + return object->deleteTag(tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, isTag, bool, (const char* tagName),, + "Checks whether the specified asset tag exists or not.\n" + "@param tagName The tag name to check.\n" + "@return Whether the specified asset tag exists or not.\n") +{ + return object->isTag(tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getTagCount, S32, (),, + "Gets the total asset tag count.\n" + "@return The total asset tag count.\n") +{ + return object->getTagCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getTag, const char*, (S32 tagIndex),, + "Gets the asset tag at the specified index.\n" + "@param tagIndex The asset tag index.This must be 0 to the asset tag count less one.\n" + "@return The asset tag at the specified index or NULL if invalid.\n") +{ + // Is the tag index out-of-bounds? + if ( tagIndex >= object->getTagCount() ) + { + // Yes, so warn. + Con::warnf( "AssetTagsManifest: Asset tag index '%d' is out of bounds. Asset tag count is '%d'", tagIndex, object->getTagCount() ); + return StringTable->EmptyString(); + } + + return object->getTag( tagIndex ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getAssetTagCount, S32, (const char* assetId),, + "Gets the asset tag count on the specified asset Id.\n" + "@param assetId The asset Id to count tags on.\n" + "@return The asset tag count on the specified asset Id.\n") +{ + return object->getAssetTagCount(assetId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, getAssetTag, const char*, (const char* assetId, S32 tagIndex), , + "Gets the asset tag on the specified asset Id at the specified index.\n" + "@param assetId The asset Id to count tags on.\n" + "@param tagIndex The asset tag index.This must be 0 to the asset tag count less one.\n" + "@return The asset tag on the specified asset Id at the specified index or NULL if invalid.\n") +{ + // Is the tag index out-of-bounds? + if (tagIndex >= object->getAssetTagCount(assetId)) + { + // Yes, so warn. + Con::warnf("AssetTagsManifest: Asset tag index '%d' is out of bounds. Asset tag count is '%d'", tagIndex, object->getAssetTagCount(assetId)); + return StringTable->EmptyString(); + } + + return object->getAssetTag(assetId, tagIndex); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, tag, bool, (const char* assetId, const char* tagName),, + "Tags the asset Id with the specified asset tag.\n" + "@param assetId The asset Id to tag.\n" + "@param tagName The tag name to assign.\n" + "@return Whether the tag operation was successful or not.\n") +{ + return object->tag(assetId, tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, untag, bool, (const char* assetId, const char* tagName),, + "Un-tags the asset Id from the specified asset tag.\n" + "@param assetId The asset Id to un - tag.\n" + "@param tagName The tag name to un - assign.\n" + "@return Whether the un - tag operation was successful or not.\n") +{ + return object->untag(assetId, tagName); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(AssetTagsManifest, hasTag, bool, (const char* assetId, const char* tagName), , + "Checks whether the asset Id is tagged with the specified asset tag.\n" + "@param assetId The asset Id to check.\n" + "@param tagName The tag name to check.\n" + "@return Whether the asset Id is tagged with the specified asset tag or not.\n") +{ + return object->hasTag(assetId, tagName); +} diff --git a/Engine/source/assets/core.h b/Engine/source/assets/core.h new file mode 100644 index 0000000000..a9803396bc --- /dev/null +++ b/Engine/source/assets/core.h @@ -0,0 +1,12 @@ +#ifndef _ASSET_CORE_H_ +#define _ASSET_CORE_H_ + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assetDefinition.h" +#endif + +#endif \ No newline at end of file diff --git a/Engine/source/assets/declaredAssets.cpp b/Engine/source/assets/declaredAssets.cpp new file mode 100644 index 0000000000..d888093a6b --- /dev/null +++ b/Engine/source/assets/declaredAssets.cpp @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DECLARED_ASSETS_H_ +#include "assets/declaredAssets.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( DeclaredAssets ); + +//----------------------------------------------------------------------------- + +void DeclaredAssets::initPersistFields() +{ + // Call Parent. + Parent::initPersistFields(); + + addField("Path", TypeString, Offset(mPath, DeclaredAssets), "" ); + addField("Extension", TypeString, Offset(mExtension, DeclaredAssets), "" ); + addField("Recurse", TypeBool, Offset(mRecurse, DeclaredAssets), "" ); +} diff --git a/Engine/source/assets/declaredAssets.h b/Engine/source/assets/declaredAssets.h new file mode 100644 index 0000000000..44d6ea2a22 --- /dev/null +++ b/Engine/source/assets/declaredAssets.h @@ -0,0 +1,73 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DECLARED_ASSETS_H_ +#define _DECLARED_ASSETS_H_ + +#ifndef _SIM_H_ +#include "console/sim.h" +#endif + +#ifndef _SIMOBJECT_H_ +#include "console/simObject.h" +#endif + +#ifndef _CONSOLEOBJECT_H_ +#include "console/consoleObject.h" +#endif + +//----------------------------------------------------------------------------- + +class DeclaredAssets : public SimObject +{ + friend class AssetManager; + +private: + typedef SimObject Parent; + + StringTableEntry mPath; + StringTableEntry mExtension; + bool mRecurse; + +public: + DeclaredAssets() : + mPath( StringTable->EmptyString() ), + mExtension(StringTable->EmptyString()), + mRecurse( false ) + {} + virtual ~DeclaredAssets() {} + + static void initPersistFields(); + + inline void setPath( const char* pPath ) { mPath = StringTable->insert( pPath ); } + inline StringTableEntry getPath( void ) const { return mPath; } + inline void setExtension( const char* pPath ) { mExtension = StringTable->insert( pPath ); } + inline StringTableEntry getExtension( void ) const { return mExtension; } + inline void setRecurse( const bool recurse ) { mRecurse = recurse; } + inline bool getRecurse( void ) const { return mRecurse; } + + /// Declare Console Object. + DECLARE_CONOBJECT( DeclaredAssets ); +}; + +#endif // _DECLARED_ASSETS_H_ + diff --git a/Engine/source/assets/referencedAssets.cpp b/Engine/source/assets/referencedAssets.cpp new file mode 100644 index 0000000000..f5807de2be --- /dev/null +++ b/Engine/source/assets/referencedAssets.cpp @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _REFERENCED_ASSETS_H_ +#include "assets/referencedAssets.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ReferencedAssets ); + +//----------------------------------------------------------------------------- + +void ReferencedAssets::initPersistFields() +{ + // Call Parent. + Parent::initPersistFields(); + + addField("Path", TypeString, Offset(mPath, ReferencedAssets), "" ); + addField("Extension", TypeString, Offset(mExtension, ReferencedAssets), "" ); + addField("Recurse", TypeBool, Offset(mRecurse, ReferencedAssets), "" ); +} \ No newline at end of file diff --git a/Engine/source/assets/referencedAssets.h b/Engine/source/assets/referencedAssets.h new file mode 100644 index 0000000000..34053bc32d --- /dev/null +++ b/Engine/source/assets/referencedAssets.h @@ -0,0 +1,73 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _REFERENCED_ASSETS_H_ +#define _REFERENCED_ASSETS_H_ + +#ifndef _SIM_H_ +#include "console/sim.h" +#endif + +#ifndef _SIMOBJECT_H_ +#include "console/simObject.h" +#endif + +#ifndef _CONSOLEOBJECT_H_ +#include "console/consoleObject.h" +#endif + +//----------------------------------------------------------------------------- + +class ReferencedAssets : public SimObject +{ + friend class AssetManager; + +private: + typedef SimObject Parent; + + StringTableEntry mPath; + StringTableEntry mExtension; + bool mRecurse; + +public: + ReferencedAssets() : + mPath( StringTable->EmptyString() ), + mExtension(StringTable->EmptyString()), + mRecurse( false ) + {} + virtual ~ReferencedAssets() {} + + static void initPersistFields(); + + inline void setPath( const char* pPath ) { mPath = StringTable->insert( pPath ); } + inline StringTableEntry getPath( void ) const { return mPath; } + inline void setExtension( const char* pPath ) { mExtension = StringTable->insert( pPath ); } + inline StringTableEntry getExtension( void ) const { return mExtension; } + inline void setRecurse( const bool recurse ) { mRecurse = recurse; } + inline bool getRecurse( void ) const { return mRecurse; } + + /// Declare Console Object. + DECLARE_CONOBJECT( ReferencedAssets ); +}; + +#endif // _REFERENCED_ASSETS_H_ + diff --git a/Engine/source/assets/tamlAssetDeclaredUpdateVisitor.h b/Engine/source/assets/tamlAssetDeclaredUpdateVisitor.h new file mode 100644 index 0000000000..7a022d1d2d --- /dev/null +++ b/Engine/source/assets/tamlAssetDeclaredUpdateVisitor.h @@ -0,0 +1,132 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ +#define _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence\/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetDeclaredUpdateVisitor : public TamlVisitor +{ +private: + StringTableEntry mAssetIdFrom; + StringTableEntry mAssetIdTo; + StringTableEntry mAssetNameFrom; + StringTableEntry mAssetNameTo; + +public: + TamlAssetDeclaredUpdateVisitor() {} + virtual ~TamlAssetDeclaredUpdateVisitor() {} + + void setAssetIdFrom( const char* pAssetIdFrom ) + { + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Asset Id from cannot be NULL." ); + + // Reset asset Id. + mAssetIdFrom = StringTable->EmptyString(); + mAssetNameFrom = StringTable->EmptyString(); + + // Is asset Id the correct format? + if ( StringUnit::getUnitCount( pAssetIdFrom, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf( "TamlAssetDeclaredUpdateVisitor::setAssetIdFrom() - Cannot use asset Id '%s' as it is not the correct format.", pAssetIdFrom ); + return; + } + + // Set asset Id. + mAssetIdFrom = StringTable->insert( pAssetIdFrom ); + mAssetNameFrom = StringTable->insert( StringUnit::getUnit( pAssetIdFrom, 1, ASSET_SCOPE_TOKEN ) ); + } + StringTableEntry getAssetIdFrom( void ) const { return mAssetIdFrom; } + + void setAssetIdTo( const char* pAssetIdTo ) + { + // Sanity! + AssertFatal( pAssetIdTo != NULL, "Asset Id to cannot be NULL." ); + + // Reset asset Id. + mAssetIdTo = StringTable->EmptyString(); + mAssetNameTo = StringTable->EmptyString(); + + // Is asset Id the correct format? + if ( StringUnit::getUnitCount( pAssetIdTo, ASSET_SCOPE_TOKEN ) != 2 ) + { + // No, so warn. + Con::warnf( "TamlAssetDeclaredUpdateVisitor::setAssetIdTo() - Cannot use asset Id '%s' as it is not the correct format.", pAssetIdTo ); + return; + } + + // Set asset Id. + mAssetIdTo = StringTable->insert( pAssetIdTo ); + mAssetNameTo = StringTable->insert( StringUnit::getUnit( pAssetIdTo, 1, ASSET_SCOPE_TOKEN ) ); + } + const char* getAssetIdTo( void ) const { return mAssetIdTo; } + + virtual bool wantsPropertyChanges( void ) { return true; } + virtual bool wantsRootOnly( void ) { return true; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetDeclaredUpdateVisitor_Visit); + + // Finish if not the asset name field. + if ( propertyState.getPropertyName() != assetNameField ) + return true; + + // Is this the asset Id we're looking for? + if ( dStricmp( propertyState.getPropertyValue(), mAssetNameFrom ) != 0 ) + { + // No, so warn. + Con::warnf("Cannot rename asset Name '%s' to asset Name '%s' as the declared asset Name was %s", + mAssetNameFrom, mAssetNameTo, propertyState.getPropertyValue() ); + + // Stop processing! + return false; + } + + // Assign new value. + propertyState.updatePropertyValue( mAssetNameTo ); + + // Stop processing! + return false; + } +}; + +#endif // _TAML_ASSET_DECLARED_UPDATE_VISITOR_H_ diff --git a/Engine/source/assets/tamlAssetDeclaredVisitor.h b/Engine/source/assets/tamlAssetDeclaredVisitor.h new file mode 100644 index 0000000000..fd5b643f95 --- /dev/null +++ b/Engine/source/assets/tamlAssetDeclaredVisitor.h @@ -0,0 +1,189 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_DECLARED_VISITOR_H_ +#define _TAML_ASSET_DECLARED_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence\/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assetDefinition.h" +#endif + +#ifndef _ASSET_BASE_H_ +#include "assetBase.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetDeclaredVisitor : public TamlVisitor +{ +public: + typedef StringTableEntry typeAssetId; + typedef Vector typeAssetIdVector; + typedef Vector typeLooseFileVector; + +private: + AssetDefinition mAssetDefinition; + typeAssetIdVector mAssetDependencies; + typeLooseFileVector mAssetLooseFiles; + +public: + TamlAssetDeclaredVisitor() { mAssetDefinition.reset(); } + virtual ~TamlAssetDeclaredVisitor() {} + + + inline AssetDefinition& getAssetDefinition( void ) { return mAssetDefinition; } + inline typeAssetIdVector& getAssetDependencies( void ) { return mAssetDependencies; } + inline typeLooseFileVector& getAssetLooseFiles( void ) { return mAssetLooseFiles; } + + void clear( void ) { mAssetDefinition.reset(); mAssetDependencies.clear(); mAssetLooseFiles.clear(); } + + virtual bool wantsPropertyChanges( void ) { return false; } + virtual bool wantsRootOnly( void ) { return false; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetDeclaredVisitor_Visit); + + // Fetch property name and value. + StringTableEntry propertyName = propertyState.getPropertyName(); + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Is this the root object? + if ( propertyState.isRootObject() ) + { + // Yes, so is the asset type set yet? + if ( mAssetDefinition.mAssetType == StringTable->EmptyString() ) + { + // No, set set asset type and base file-path. + mAssetDefinition.mAssetType = propertyState.getObjectName(); + mAssetDefinition.mAssetBaseFilePath = parser.getParsingFilename(); + } + + // Asset name? + if ( propertyName == assetNameField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetName = StringTable->insert( pPropertyValue ); + return true; + } + // Asset description? + else if ( propertyName == assetDescriptionField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetDescription = StringTable->insert( pPropertyValue ); + return true; + } + // Asset description? + else if ( propertyName == assetCategoryField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetCategory = StringTable->insert( pPropertyValue ); + return true; + } + // Asset auto-unload? + else if ( propertyName == assetAutoUnloadField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetAutoUnload = dAtob( pPropertyValue ); + return true; + } + // Asset internal? + else if ( propertyName == assetInternalField ) + { + // Yes, so assign it. + mAssetDefinition.mAssetInternal = dAtob( pPropertyValue ); + return true; + } + } + + // Fetch property word count. + const U32 propertyWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if there's not two words. + if ( propertyWordCount != 2 ) + return true; + + // Fetch the asset signature. + StringTableEntry assetSignature = StringTable->insert( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN ) ); + + // Is this an asset Id signature? + if ( assetSignature == assetLooseIdSignature ) + { + // Yes, so get asset Id. + typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ) ); + + // Finish if the dependency is itself! + if ( mAssetDefinition.mAssetId == assetId ) + return true; + + // Iterate existing dependencies. + for( typeAssetIdVector::iterator dependencyItr = mAssetDependencies.begin(); dependencyItr != mAssetDependencies.end(); ++dependencyItr ) + { + // Finish if asset Id is already a dependency. + if ( *dependencyItr == assetId ) + return true; + } + + // Insert asset reference. + mAssetDependencies.push_back( assetId ); + } + // Is this a loose-file signature? + else if ( assetSignature == assetLooseFileSignature ) + { + // Yes, so get loose-file reference. + const char* pAssetLooseFile = StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ); + + // Fetch asset path only. + char assetBasePathBuffer[1024]; + dSprintf( assetBasePathBuffer, sizeof(assetBasePathBuffer), "%s", mAssetDefinition.mAssetBaseFilePath ); + char* pFinalSlash = dStrrchr( assetBasePathBuffer, '/' ); + if ( pFinalSlash != NULL ) *pFinalSlash = 0; + + // Expand the path in the usual way. + char assetFilePathBuffer[1024]; + Con::expandPath( assetFilePathBuffer, sizeof(assetFilePathBuffer), pAssetLooseFile, assetBasePathBuffer ); + + // Insert asset loose-file. + mAssetLooseFiles.push_back( StringTable->insert( assetFilePathBuffer ) ); + } + + return true; + } +}; + +#endif // _TAML_ASSET_DECLARED_VISITOR_H_ diff --git a/Engine/source/assets/tamlAssetReferencedUpdateVisitor.h b/Engine/source/assets/tamlAssetReferencedUpdateVisitor.h new file mode 100644 index 0000000000..3bf3623a4b --- /dev/null +++ b/Engine/source/assets/tamlAssetReferencedUpdateVisitor.h @@ -0,0 +1,127 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ +#define _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence\/taml/tamlParser.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _STRINGTABLE_H_ +#include "string/stringTable.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetReferencedUpdateVisitor : public TamlVisitor +{ +private: + StringTableEntry mAssetIdFrom; + StringTableEntry mAssetIdTo; + +public: + TamlAssetReferencedUpdateVisitor() {} + virtual ~TamlAssetReferencedUpdateVisitor() {} + + void setAssetIdFrom( const char* pAssetIdFrom ) + { + // Sanity! + AssertFatal( pAssetIdFrom != NULL, "Asset Id from cannot be NULL." ); + + mAssetIdFrom = StringTable->insert( pAssetIdFrom ); + } + StringTableEntry getAssetIdFrom( void ) const { return mAssetIdFrom; } + + void setAssetIdTo( const char* pAssetIdTo ) + { + // Sanity! + AssertFatal( pAssetIdTo != NULL, "Asset Id to cannot be NULL." ); + + mAssetIdTo = StringTable->insert( pAssetIdTo ); + } + const char* getAssetIdTo( void ) const { return mAssetIdTo; } + + virtual bool wantsPropertyChanges( void ) { return true; } + virtual bool wantsRootOnly( void ) { return false; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetReferencedUpdateVisitor_Visit); + + // Fetch the property value. + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Fetch property value word count. + const U32 valueWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if not two words. + if ( valueWordCount != 2 ) + return true; + + // Finish if this is not an asset signature. + if ( dStricmp( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN), assetLooseIdSignature ) != 0 ) + return true; + + // Get the asset value. + const char* pAssetValue = StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if not the asset Id we're looking for. + if ( dStricmp( pAssetValue, mAssetIdFrom ) != 0 ) + return true; + + // Is the target asset empty? + if ( mAssetIdTo == StringTable->EmptyString() ) + { + // Yes, so update the property as empty. + propertyState.updatePropertyValue(StringTable->EmptyString()); + return true; + } + + // Format asset. + char assetBuffer[1024]; + dSprintf( assetBuffer, sizeof(assetBuffer), "%s%s%s", assetLooseIdSignature, ASSET_ASSIGNMENT_TOKEN, mAssetIdTo ); + + // Assign new value. + propertyState.updatePropertyValue( assetBuffer ); + + return true; + } +}; + +#endif // _TAML_ASSET_REFERENCED_UPDATE_VISITOR_H_ diff --git a/Engine/source/assets/tamlAssetReferencedVisitor.h b/Engine/source/assets/tamlAssetReferencedVisitor.h new file mode 100644 index 0000000000..c744a880c7 --- /dev/null +++ b/Engine/source/assets/tamlAssetReferencedVisitor.h @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_ASSET_REFERENCED_VISITOR_H_ +#define _TAML_ASSET_REFERENCED_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlAssetReferencedVisitor : public TamlVisitor +{ +public: + typedef StringTableEntry typeAssetId; + typedef HashMap typeAssetReferencedHash; + +private: + typeAssetReferencedHash mAssetReferenced; + +public: + TamlAssetReferencedVisitor() {} + virtual ~TamlAssetReferencedVisitor() {} + + const typeAssetReferencedHash& getAssetReferencedMap( void ) const { return mAssetReferenced; } + + void clear( void ) { mAssetReferenced.clear(); } + + virtual bool wantsPropertyChanges( void ) { return false; } + virtual bool wantsRootOnly( void ) { return false; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlAssetReferencedVisitor_Visit); + + // Fetch property value. + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Fetch property word count. + const U32 propertyWordCount = StringUnit::getUnitCount( pPropertyValue, ASSET_ASSIGNMENT_TOKEN ); + + // Finish if there's not two words. + if ( propertyWordCount != 2 ) + return true; + + // Finish if the first word is not an asset signature. + if ( StringTable->insert( StringUnit::getUnit( pPropertyValue, 0, ASSET_ASSIGNMENT_TOKEN ) ) != assetLooseIdSignature ) + return true; + + // Get asset Id. + typeAssetId assetId = StringTable->insert( StringUnit::getUnit( pPropertyValue, 1, ASSET_ASSIGNMENT_TOKEN ) ); + + // Finish if we already have this asset Id. + if ( mAssetReferenced.contains( assetId ) ) + return true; + + // Insert asset reference. + mAssetReferenced.insert( assetId, StringTable->EmptyString() ); + + return true; + } +}; + +#endif // _TAML_ASSET_REFERENCED_VISITOR_H_ diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index 2eddf0873e..bd4a7a5d98 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -209,6 +209,13 @@ namespace Con return ret; } + char* getBoolArg(bool arg) + { + char *ret = STR.getArgBuffer(32); + dSprintf(ret, 32, "%d", arg); + return ret; + } + char *getStringArg( const char *arg ) { U32 len = dStrlen( arg ) + 1; diff --git a/Engine/source/console/console.cpp b/Engine/source/console/console.cpp index 9449abf83e..abd6cb249f 100644 --- a/Engine/source/console/console.cpp +++ b/Engine/source/console/console.cpp @@ -1566,6 +1566,494 @@ void popInstantGroup() } } + +typedef HashMap typePathExpandoMap; +static typePathExpandoMap PathExpandos; + +//----------------------------------------------------------------------------- + +void addPathExpando(const char* pExpandoName, const char* pPath) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + AssertFatal(pPath != NULL, "Expando path cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + // Fetch the length of the path. + S32 pathLength = dStrlen(pPath); + + char pathBuffer[1024]; + + // Sanity! + if (pathLength == 0 || pathLength >= sizeof(pathBuffer)) + { + Con::warnf("Cannot add path expando '%s' with path '%s' as the path is an invalid length.", pExpandoName, pPath); + return; + } + + // Strip repeat slashes. + if (!Con::stripRepeatSlashes(pathBuffer, pPath, sizeof(pathBuffer))) + { + Con::warnf("Cannot add path expando '%s' with path '%s' as the path is an invalid length.", pExpandoName, pPath); + return; + } + + // Fetch new path length. + pathLength = dStrlen(pathBuffer); + + // Sanity! + if (pathLength == 0) + { + Con::warnf("Cannot add path expando '%s' with path '%s' as the path is an invalid length.", pExpandoName, pPath); + return; + } + + // Remove any terminating slash. + if (pathBuffer[pathLength - 1] == '/') + pathBuffer[pathLength - 1] = 0; + + // Fetch expanded path. + StringTableEntry expandedPath = StringTable->insert(pathBuffer); + + // Info. +#if defined(TORQUE_DEBUG) + Con::printf("Adding path expando of '%s' as '%s'.", expandoName, expandedPath); +#endif + + // Find any existing path expando. + typePathExpandoMap::iterator expandoItr = PathExpandos.find(pExpandoName); + + // Does the expando exist? + if (expandoItr != PathExpandos.end()) + { + // Yes, so modify the path. + expandoItr->value = expandedPath; + return; + } + + // Insert expando. + PathExpandos.insert(expandoName, expandedPath); +} + +//----------------------------------------------------------------------------- + +StringTableEntry getPathExpando(const char* pExpandoName) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + // Find any existing path expando. + typePathExpandoMap::iterator expandoItr = PathExpandos.find(expandoName); + + // Does the expando exist? + if (expandoItr != PathExpandos.end()) + { + // Yes, so return it. + return expandoItr->value; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +void removePathExpando(const char* pExpandoName) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + // Find any existing path expando. + typePathExpandoMap::iterator expandoItr = PathExpandos.find(expandoName); + + // Does the expando exist? + if (expandoItr == PathExpandos.end()) + { + // No, so warn. +#if defined(TORQUE_DEBUG) + Con::warnf("Removing path expando of '%s' but it does not exist.", expandoName); +#endif + return; + } + + // Info. +#if defined(TORQUE_DEBUG) + Con::printf("Removing path expando of '%s' as '%s'.", expandoName, expandoItr->value); +#endif + // Remove expando. + PathExpandos.erase(expandoItr); +} + +//----------------------------------------------------------------------------- + +bool isPathExpando(const char* pExpandoName) +{ + // Sanity! + AssertFatal(pExpandoName != NULL, "Expando name cannot be NULL."); + + // Fetch expando name. + StringTableEntry expandoName = StringTable->insert(pExpandoName); + + return PathExpandos.contains(expandoName); +} + +//----------------------------------------------------------------------------- + +U32 getPathExpandoCount(void) +{ + return PathExpandos.size(); +} + +//----------------------------------------------------------------------------- + +StringTableEntry getPathExpandoKey(U32 expandoIndex) +{ + // Finish if index is out of range. + if (expandoIndex >= PathExpandos.size()) + return NULL; + + // Find indexed iterator. + typePathExpandoMap::iterator expandoItr = PathExpandos.begin(); + while (expandoIndex > 0) { ++expandoItr; --expandoIndex; } + + return expandoItr->key; +} + +//----------------------------------------------------------------------------- + +StringTableEntry getPathExpandoValue(U32 expandoIndex) +{ + // Finish if index is out of range. + if (expandoIndex >= PathExpandos.size()) + return NULL; + + // Find indexed iterator. + typePathExpandoMap::iterator expandoItr = PathExpandos.begin(); + while (expandoIndex > 0) { ++expandoItr; --expandoIndex; } + + return expandoItr->value; +} + +//----------------------------------------------------------------------------- + +bool expandPath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint, const bool ensureTrailingSlash) +{ + char pathBuffer[2048]; + const char* pSrc = pSrcPath; + char* pSlash; + + // Fetch leading character. + const char leadingToken = *pSrc; + + // Fetch following token. + const char followingToken = leadingToken != 0 ? pSrc[1] : 0; + + // Expando. + if (leadingToken == '^') + { + // Initial prefix search. + const char* pPrefixSrc = pSrc + 1; + char* pPrefixDst = pathBuffer; + + // Search for end of expando. + while (*pPrefixSrc != '/' && *pPrefixSrc != 0) + { + // Copy prefix character. + *pPrefixDst++ = *pPrefixSrc++; + } + + // Yes, so terminate the expando string. + *pPrefixDst = 0; + + // Fetch the expando path. + StringTableEntry expandoPath = getPathExpando(pathBuffer); + + // Does the expando exist? + if (expandoPath == NULL) + { + // No, so error. + Con::errorf("expandPath() : Could not find path expando '%s' for path '%s'.", pathBuffer, pSrcPath); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pDstPath, pSrcPath); + } + else + { + // No, so just use the source path. + dStrcpy(pDstPath, pSrcPath); + } + + return false; + } + + // Skip the expando and the following slash. + pSrc += dStrlen(pathBuffer) + 1; + + // Format the output path. + dSprintf(pathBuffer, sizeof(pathBuffer), "%s/%s", expandoPath, pSrc); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pathBuffer, pathBuffer); + } + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return true; + } + + // Script-Relative. + if (leadingToken == '.') + { + // Fetch the code-block file-path. + const StringTableEntry codeblockFullPath = CodeBlock::getCurrentCodeBlockFullPath(); + + // Do we have a code block full path? + if (codeblockFullPath == NULL) + { + // No, so error. + Con::errorf("expandPath() : Could not find relative path from code-block for path '%s'.", pSrcPath); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pDstPath, pSrcPath); + } + else + { + // No, so just use the source path. + dStrcpy(pDstPath, pSrcPath); + } + + return false; + } + + // Yes, so use it as the prefix. + dStrncpy(pathBuffer, codeblockFullPath, sizeof(pathBuffer) - 1); + + // Find the final slash in the code-block. + pSlash = dStrrchr(pathBuffer, '/'); + + // Is this a parent directory token? + if (followingToken == '.') + { + // Yes, so terminate after the slash so we include it. + pSlash[1] = 0; + } + else + { + // No, it's a current directory token so terminate at the slash so we don't include it. + pSlash[0] = 0; + + // Skip the current directory token. + pSrc++; + } + + // Format the output path. + dStrncat(pathBuffer, "/", sizeof(pathBuffer) - 1 - strlen(pathBuffer)); + dStrncat(pathBuffer, pSrc, sizeof(pathBuffer) - 1 - strlen(pathBuffer)); + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pathBuffer, pathBuffer); + } + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return true; + } + + // All else. + + //Using a special case here because the code below barfs on trying to build a full path for apk reading +#ifdef TORQUE_OS_ANDROID + if (leadingToken == '/' || strstr(pSrcPath, "/") == NULL) + Platform::makeFullPathName(pSrcPath, pathBuffer, sizeof(pathBuffer), pWorkingDirectoryHint); + else + dSprintf(pathBuffer, sizeof(pathBuffer), "/%s", pSrcPath); +#else + Platform::makeFullPathName(pSrcPath, pathBuffer, sizeof(pathBuffer), pWorkingDirectoryHint); +#endif + + // Are we ensuring the trailing slash? + if (ensureTrailingSlash) + { + // Yes, so ensure it. + Con::ensureTrailingSlash(pathBuffer, pathBuffer); + } + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return true; +} + +//----------------------------------------------------------------------------- + +bool isBasePath(const char* SrcPath, const char* pBasePath) +{ + char expandBuffer[1024]; + Con::expandPath(expandBuffer, sizeof(expandBuffer), SrcPath); + return dStrnicmp(pBasePath, expandBuffer, dStrlen(pBasePath)) == 0; +} + +//----------------------------------------------------------------------------- + +void collapsePath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint) +{ + // Check path against expandos. If there are multiple matches, choose the + // expando that produces the shortest relative path. + + char pathBuffer[2048]; + + // Fetch expando count. + const U32 expandoCount = getPathExpandoCount(); + + // Iterate expandos. + U32 expandoRelativePathLength = U32_MAX; + for (U32 expandoIndex = 0; expandoIndex < expandoCount; ++expandoIndex) + { + // Fetch expando value (path). + StringTableEntry expandoValue = getPathExpandoValue(expandoIndex); + + // Skip if not the base path. + if (!isBasePath(pSrcPath, expandoValue)) + continue; + + // Fetch path relative to expando path. + StringTableEntry relativePath = Platform::makeRelativePathName(pSrcPath, expandoValue); + + // If the relative path is simply a period + if (relativePath[0] == '.') + relativePath++; + + if (dStrlen(relativePath) > expandoRelativePathLength) + { + // This expando covers less of the path than any previous one found. + // We will keep the previous one. + continue; + } + + // Keep track of the relative path length + expandoRelativePathLength = dStrlen(relativePath); + + // Fetch expando key (name). + StringTableEntry expandoName = getPathExpandoKey(expandoIndex); + + // Format against expando. + dSprintf(pathBuffer, sizeof(pathBuffer), "^%s/%s", expandoName, relativePath); + } + + // Check if we've found a suitable expando + if (expandoRelativePathLength != U32_MAX) + { + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); + + return; + } + + // Fetch the working directory. + StringTableEntry workingDirectory = pWorkingDirectoryHint != NULL ? pWorkingDirectoryHint : Platform::getCurrentDirectory(); + + // Fetch path relative to current directory. + StringTableEntry relativePath = Platform::makeRelativePathName(pSrcPath, workingDirectory); + + // If the relative path is simply a period + if (relativePath[0] == '.' && relativePath[1] != '.') + relativePath++; + + // Format against expando. + dSprintf(pathBuffer, sizeof(pathBuffer), "%s/%s", workingDirectory, relativePath); + + // Strip repeat slashes. + Con::stripRepeatSlashes(pDstPath, pathBuffer, size); +} + + +void ensureTrailingSlash(char* pDstPath, const char* pSrcPath) +{ + // Copy to target. + dStrcpy(pDstPath, pSrcPath); + + // Find trailing character index. + S32 trailIndex = dStrlen(pDstPath); + + // Ignore if empty string. + if (trailIndex == 0) + return; + + // Finish if the trailing slash already exists. + if (pDstPath[trailIndex - 1] == '/') + return; + + // Add trailing slash. + pDstPath[trailIndex++] = '/'; + pDstPath[trailIndex] = 0; +} + +//----------------------------------------------------------------------------- + +bool stripRepeatSlashes(char* pDstPath, const char* pSrcPath, S32 dstSize) +{ + // Note original destination. + char* pOriginalDst = pDstPath; + + // Reset last source character. + char lastSrcChar = 0; + + // Search source... + while (dstSize > 0) + { + // Fetch characters. + const char srcChar = *pSrcPath++; + + // Do we have a repeat slash? + if (srcChar == '/' && lastSrcChar == '/') + { + // Yes, so skip it. + continue; + } + + // No, so copy character. + *pDstPath++ = srcChar; + + // Finish if end of source. + if (srcChar == 0) + return true; + + // Reduce room left in destination. + dstSize--; + + // Set last character. + lastSrcChar = srcChar; + } + + // Terminate the destination string as we ran out of room. + *pOriginalDst = 0; + + // Fail! + return false; +} + } // end of Console namespace #endif diff --git a/Engine/source/console/console.h b/Engine/source/console/console.h index 3a26bdc2d0..409323eab1 100644 --- a/Engine/source/console/console.h +++ b/Engine/source/console/console.h @@ -486,6 +486,20 @@ namespace Con bool expandToolScriptFilename(char *filename, U32 size, const char *src); bool collapseScriptFilename(char *filename, U32 size, const char *src); + bool expandPath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint = NULL, const bool ensureTrailingSlash = false); + void collapsePath(char* pDstPath, U32 size, const char* pSrcPath, const char* pWorkingDirectoryHint = NULL); + bool isBasePath(const char* SrcPath, const char* pBasePath); + void ensureTrailingSlash(char* pDstPath, const char* pSrcPath); + bool stripRepeatSlashes(char* pDstPath, const char* pSrcPath, S32 dstSize); + + void addPathExpando(const char* pExpandoName, const char* pPath); + void removePathExpando(const char* pExpandoName); + bool isPathExpando(const char* pExpandoName); + StringTableEntry getPathExpando(const char* pExpandoName); + U32 getPathExpandoCount(void); + StringTableEntry getPathExpandoKey(U32 expandoIndex); + StringTableEntry getPathExpandoValue(U32 expandoIndex); + bool isCurrentScriptToolScript(); StringTableEntry getModNameFromPath(const char *path); @@ -739,6 +753,13 @@ namespace Con /// @see Con::errorf() void errorf(ConsoleLogEntry::Type type, const char *_format, ...); + //some additions from t2d + /// Prints a separator to the console. + inline void printSeparator(void) { printf("--------------------------------------------------------------------------------"); } + + /// Prints a separator to the console. + inline void printBlankLine(void) { printf(""); } + /// @} /// Returns true when called from the main thread, false otherwise @@ -815,6 +836,7 @@ namespace Con char* getArgBuffer(U32 bufferSize); char* getFloatArg(F64 arg); char* getIntArg (S32 arg); + char* getBoolArg(bool arg); char* getStringArg( const char* arg ); char* getStringArg( const String& arg ); /// @} diff --git a/Engine/source/console/consoleObject.cpp b/Engine/source/console/consoleObject.cpp index b5ca031895..35acf96d1e 100644 --- a/Engine/source/console/consoleObject.cpp +++ b/Engine/source/console/consoleObject.cpp @@ -55,7 +55,25 @@ bool AbstractClassRep::initialized = false; //----------------------------------------------------------------------------- +AbstractClassRep* AbstractClassRep::findFieldRoot(StringTableEntry fieldName) +{ + // Find the field. + const Field* pField = findField(fieldName); + + // Finish if not found. + if (pField == NULL) + return NULL; + + // We're the root if we have no parent. + if (getParentClass() == NULL) + return this; + + // Find the field root via the parent. + AbstractClassRep* pFieldRoot = getParentClass()->findFieldRoot(fieldName); + // We're the root if the parent does not have it else return the field root. + return pFieldRoot == NULL ? this : pFieldRoot; +} void AbstractClassRep::init() { @@ -349,6 +367,7 @@ void ConsoleObject::addGroup(const char* in_pGroupname, const char* in_pGroupDoc f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; // Add to field list. sg_tempFieldList.push_back(f); @@ -371,6 +390,7 @@ void ConsoleObject::endGroup(const char* in_pGroupname) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; f.elementCount = 0; // Add to field list. @@ -393,6 +413,7 @@ void ConsoleObject::addArray( const char *arrayName, S32 count ) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; // Add to field list. sg_tempFieldList.push_back(f); @@ -412,6 +433,7 @@ void ConsoleObject::endArray( const char *arrayName ) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; f.elementCount = 0; // Add to field list. @@ -433,81 +455,159 @@ void ConsoleObject::addField(const char* in_pFieldname, flags ); } -void ConsoleObject::addProtectedField(const char* in_pFieldname, - const U32 in_fieldType, - const dsize_t in_fieldOffset, - AbstractClassRep::SetDataNotify in_setDataFn, - AbstractClassRep::GetDataNotify in_getDataFn, - const char* in_pFieldDocs, - U32 flags ) +void ConsoleObject::addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const char* in_pFieldDocs, + U32 flags) { - addProtectedField( + addField( in_pFieldname, in_fieldType, in_fieldOffset, - in_setDataFn, - in_getDataFn, + in_writeDataFn, 1, in_pFieldDocs, - flags ); + flags); } +void ConsoleObject::addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) +{ + addField(in_pFieldname, + in_fieldType, + in_fieldOffset, + &defaultProtectedWriteFn, + in_elementCount, + in_pFieldDocs, + flags); +} void ConsoleObject::addField(const char* in_pFieldname, - const U32 in_fieldType, - const dsize_t in_fieldOffset, - const U32 in_elementCount, - const char* in_pFieldDocs, - U32 flags ) + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) { AbstractClassRep::Field f; - f.pFieldname = StringTable->insert(in_pFieldname); + f.pFieldname = StringTable->insert(in_pFieldname); - if(in_pFieldDocs) - f.pFieldDocs = in_pFieldDocs; + if (in_pFieldDocs) + f.pFieldDocs = in_pFieldDocs; - f.type = in_fieldType; - f.offset = in_fieldOffset; + f.type = in_fieldType; + f.offset = in_fieldOffset; f.elementCount = in_elementCount; - f.validator = NULL; - f.flag = flags; + f.validator = NULL; + f.flag = flags; f.setDataFn = &defaultProtectedSetFn; - f.getDataFn = &defaultProtectedGetFn; + f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = in_writeDataFn; - ConsoleBaseType* conType = ConsoleBaseType::getType( in_fieldType ); - AssertFatal( conType, "ConsoleObject::addField - invalid console type" ); + ConsoleBaseType* conType = ConsoleBaseType::getType(in_fieldType); + AssertFatal(conType, "ConsoleObject::addField - invalid console type"); f.table = conType->getEnumTable(); sg_tempFieldList.push_back(f); } void ConsoleObject::addProtectedField(const char* in_pFieldname, - const U32 in_fieldType, - const dsize_t in_fieldOffset, - AbstractClassRep::SetDataNotify in_setDataFn, - AbstractClassRep::GetDataNotify in_getDataFn, - const U32 in_elementCount, - const char* in_pFieldDocs, - U32 flags ) + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + const char* in_pFieldDocs, + U32 flags) +{ + addProtectedField( + in_pFieldname, + in_fieldType, + in_fieldOffset, + in_setDataFn, + in_getDataFn, + &defaultProtectedWriteFn, + 1, + in_pFieldDocs, + flags); +} + +void ConsoleObject::addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const char* in_pFieldDocs, + U32 flags) +{ + addProtectedField( + in_pFieldname, + in_fieldType, + in_fieldOffset, + in_setDataFn, + in_getDataFn, + in_writeDataFn, + 1, + in_pFieldDocs, + flags); +} + +void ConsoleObject::addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) +{ + addProtectedField( + in_pFieldname, + in_fieldType, + in_fieldOffset, + in_setDataFn, + in_getDataFn, + &defaultProtectedWriteFn, + 1, + in_pFieldDocs, + flags); +} +void ConsoleObject::addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const U32 in_elementCount, + const char* in_pFieldDocs, + U32 flags) { AbstractClassRep::Field f; - f.pFieldname = StringTable->insert(in_pFieldname); + f.pFieldname = StringTable->insert(in_pFieldname); - if(in_pFieldDocs) - f.pFieldDocs = in_pFieldDocs; + if (in_pFieldDocs) + f.pFieldDocs = in_pFieldDocs; - f.type = in_fieldType; - f.offset = in_fieldOffset; + f.type = in_fieldType; + f.offset = in_fieldOffset; f.elementCount = in_elementCount; - f.validator = NULL; - f.flag = flags; + f.validator = NULL; + f.flag = flags; f.setDataFn = in_setDataFn; f.getDataFn = in_getDataFn; + f.writeDataFn = in_writeDataFn; - ConsoleBaseType* conType = ConsoleBaseType::getType( in_fieldType ); - AssertFatal( conType, "ConsoleObject::addProtectedField - invalid console type" ); + ConsoleBaseType* conType = ConsoleBaseType::getType(in_fieldType); + AssertFatal(conType, "ConsoleObject::addProtectedField - invalid console type"); f.table = conType->getEnumTable(); sg_tempFieldList.push_back(f); @@ -529,6 +629,7 @@ void ConsoleObject::addFieldV(const char* in_pFieldname, f.table = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; f.validator = v; v->fieldIndex = sg_tempFieldList.size(); @@ -546,6 +647,7 @@ void ConsoleObject::addDeprecatedField(const char *fieldName) f.validator = NULL; f.setDataFn = &defaultProtectedSetFn; f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; sg_tempFieldList.push_back(f); } diff --git a/Engine/source/console/consoleObject.h b/Engine/source/console/consoleObject.h index d4f389a96d..5e585247ef 100644 --- a/Engine/source/console/consoleObject.h +++ b/Engine/source/console/consoleObject.h @@ -47,7 +47,9 @@ #ifndef _SIMOBJECTREF_H_ #include "console/simObjectRef.h" #endif - +#ifndef TINYXML_INCLUDED + #include "tinyXML/tinyxml.h" +#endif /// @file /// Legacy console object system. @@ -201,6 +203,9 @@ class AbstractClassRep : public ConsoleBaseType typedef ConsoleBaseType Parent; + /// Allows the writing of a custom TAML schema. + typedef void(*WriteCustomTamlSchema)(const AbstractClassRep* pClassRep, TiXmlElement* pParentElement); + /// @name 'Tructors /// @{ @@ -321,6 +326,9 @@ class AbstractClassRep : public ConsoleBaseType /// Return the AbstractClassRep of the class that this class is derived from. AbstractClassRep* getParentClass() const { return parentClass; } + + virtual AbstractClassRep* getContainerChildClass(const bool recurse) = 0; + virtual WriteCustomTamlSchema getCustomTamlSchema(void) = 0; /// Return the size of instances of this class in bytes. S32 getSizeof() const { return mClassSizeof; } @@ -376,6 +384,8 @@ class AbstractClassRep : public ConsoleBaseType virtual ConsoleObject* create () const = 0; + AbstractClassRep* findFieldRoot(StringTableEntry fieldName); + protected: virtual void init(); @@ -421,6 +431,13 @@ class AbstractClassRep : public ConsoleBaseType typedef bool (*SetDataNotify)( void *obj, const char *array, const char *data ); typedef const char *(*GetDataNotify)( void *obj, const char *data ); + /// This is a function pointer typedef to support optional writing for fields. + typedef bool(*WriteDataNotify)(void* obj, StringTableEntry pFieldName); + + /// Allows the writing of a custom TAML schema. + typedef void(*WriteCustomTamlSchema)(const AbstractClassRep* pClassRep, TiXmlElement* pParentElement); + + /// These are special field type values used to mark /// groups and arrays in the field list. /// @see Field::type @@ -494,6 +511,7 @@ class AbstractClassRep : public ConsoleBaseType TypeValidator *validator; ///< Validator, if any. SetDataNotify setDataFn; ///< Set data notify Fn GetDataNotify getDataFn; ///< Get data notify Fn + WriteDataNotify writeDataFn; ///< Function to determine whether data should be written or not. }; typedef Vector FieldList; @@ -595,6 +613,27 @@ class ConcreteClassRep : public AbstractClassRep registerClassRep(this); }; + virtual AbstractClassRep* getContainerChildClass(const bool recurse) + { + // Fetch container children type. + AbstractClassRep* pChildren = T::getContainerChildStaticClassRep(); + if (!recurse || pChildren != NULL) + return pChildren; + + // Fetch parent type. + AbstractClassRep* pParent = T::getParentStaticClassRep(); + if (pParent == NULL) + return NULL; + + // Get parent container children. + return pParent->getContainerChildClass(recurse); + } + + virtual WriteCustomTamlSchema getCustomTamlSchema(void) + { + return T::getStaticWriteCustomTamlSchema(); + } + /// Perform class specific initialization tasks. /// /// Link namespaces, call initPersistFields() and consoleInit(). @@ -652,7 +691,7 @@ template< typename T > EnginePropertyTable& ConcreteClassRep< T >::smPropertyTab //------------------------------------------------------------------------------ // Forward declaration of this function so it can be used in the class const char *defaultProtectedGetFn( void *obj, const char *data ); - +bool defaultProtectedWriteFn(void* obj, StringTableEntry pFieldName); //============================================================================= // ConsoleObject. @@ -781,6 +820,14 @@ class ConsoleObject : public EngineObject const char* in_pFieldDocs = NULL, U32 flags = 0 ); + static void addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const U32 in_elementCount = 1, + const char* in_pFieldDocs = NULL, + U32 flags = 0); + /// Register a simple field. /// /// @param in_pFieldname Name of the field. @@ -793,6 +840,13 @@ class ConsoleObject : public EngineObject const char* in_pFieldDocs, U32 flags = 0 ); + static void addField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::WriteDataNotify in_writeDataFn, + const char* in_pFieldDocs, + U32 flags = 0); + /// Register a validated field. /// /// A validated field is just like a normal field except that you can't @@ -821,10 +875,20 @@ class ConsoleObject : public EngineObject const U32 in_fieldType, const dsize_t in_fieldOffset, AbstractClassRep::SetDataNotify in_setDataFn, - AbstractClassRep::GetDataNotify in_getDataFn, - const U32 in_elementCount, - const char* in_pFieldDocs = NULL, - U32 flags = 0 ); + AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + AbstractClassRep::WriteDataNotify in_writeDataFn = &defaultProtectedWriteFn, + const U32 in_elementCount = 1, + const char* in_pFieldDocs = NULL, + U32 flags = 0); + + static void addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + const U32 in_elementCount = 1, + const char* in_pFieldDocs = NULL, + U32 flags = 0); /// Register a simple protected field. /// @@ -839,8 +903,17 @@ class ConsoleObject : public EngineObject const dsize_t in_fieldOffset, AbstractClassRep::SetDataNotify in_setDataFn, AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + AbstractClassRep::WriteDataNotify in_writeDataFn = &defaultProtectedWriteFn, const char* in_pFieldDocs = NULL, - U32 flags = 0 ); + U32 flags = 0); + + static void addProtectedField(const char* in_pFieldname, + const U32 in_fieldType, + const dsize_t in_fieldOffset, + AbstractClassRep::SetDataNotify in_setDataFn, + AbstractClassRep::GetDataNotify in_getDataFn = &defaultProtectedGetFn, + const char* in_pFieldDocs = NULL, + U32 flags = 0); /// Add a deprecated field. /// @@ -1045,6 +1118,8 @@ inline bool& ConsoleObject::getDynamicGroupExpand() static AbstractClassRep* getParentStaticClassRep(); \ static AbstractClassRep* getStaticClassRep(); \ static SimObjectRefConsoleBaseType< className > ptrRefType; \ + static AbstractClassRep::WriteCustomTamlSchema getStaticWriteCustomTamlSchema(); \ + static AbstractClassRep* getContainerChildStaticClassRep(); \ virtual AbstractClassRep* getClassRep() const #define DECLARE_CATEGORY( string ) \ @@ -1061,6 +1136,44 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ + ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + +#define IMPLEMENT_CONOBJECT_CHILDREN( className ) \ + IMPLEMENT_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ + ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + +#define IMPLEMENT_CONOBJECT_SCHEMA( className, schema ) \ + IMPLEMENT_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return schema; } \ + ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + +#define IMPLEMENT_CONOBJECT_CHILDREN_SCHEMA( className, schema ) \ + IMPLEMENT_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return schema; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) #define IMPLEMENT_CO_NETOBJECT_V1( className ) \ @@ -1071,6 +1184,8 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, NetClassGroupGameMask, NetClassTypeObject, 0, className::getParentStaticClassRep(), &Parent::__description ) #define IMPLEMENT_CO_DATABLOCK_V1( className ) \ @@ -1081,6 +1196,8 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep(#className, "Type" #className, &_smTypeId, NetClassGroupGameMask, NetClassTypeDataBlock, 0, className::getParentStaticClassRep(), &Parent::__description ) // Support for adding properties to classes CONOBJECT style. @@ -1133,6 +1250,21 @@ inline const char *emptyStringProtectedGetFn( void *obj, const char *data ) return ""; } +inline bool defaultProtectedWriteFn(void* obj, StringTableEntry pFieldName) +{ + return true; +} + +inline bool defaultProtectedNotSetFn(void* obj, const char *array, const char* data) +{ + return false; +} + +inline bool defaultProtectedNotWriteFn(void* obj, StringTableEntry pFieldName) +{ + return false; +} + /// @} #endif //_CONSOLEOBJECT_H_ diff --git a/Engine/source/console/consoleTypes.cpp b/Engine/source/console/consoleTypes.cpp index 5f0abcbb6d..6c993c4466 100644 --- a/Engine/source/console/consoleTypes.cpp +++ b/Engine/source/console/consoleTypes.cpp @@ -34,7 +34,7 @@ //----------------------------------------------------------------------------- // TypeString //----------------------------------------------------------------------------- -ConsoleType( string, TypeString, const char* ) +ConsoleType( string, TypeString, const char*, "" ) ImplementConsoleTypeCasters( TypeString, const char* ); ConsoleGetType( TypeString ) @@ -53,7 +53,7 @@ ConsoleSetType( TypeString ) //----------------------------------------------------------------------------- // TypeCaseString //----------------------------------------------------------------------------- -ConsoleType( caseString, TypeCaseString, const char* ) +ConsoleType(caseString, TypeCaseString, const char*, "") ConsoleSetType( TypeCaseString ) { @@ -71,7 +71,7 @@ ConsoleGetType( TypeCaseString ) //----------------------------------------------------------------------------- // TypeRealString //----------------------------------------------------------------------------- -ConsoleType( string, TypeRealString, String ) +ConsoleType(string, TypeRealString, String, "") ImplementConsoleTypeCasters( TypeRealString, String ) ConsoleGetType( TypeRealString ) @@ -94,7 +94,7 @@ ConsoleSetType( TypeRealString ) //----------------------------------------------------------------------------- // TypeCommand //----------------------------------------------------------------------------- -ConsoleType( string, TypeCommand, String ) +ConsoleType(string, TypeCommand, String, "") ConsoleGetType( TypeCommand ) { @@ -284,7 +284,7 @@ ConsoleProcessData( TypeShapeFilename ) //----------------------------------------------------------------------------- // TypeS8 //----------------------------------------------------------------------------- -ConsoleType( char, TypeS8, S8 ) +ConsoleType(char, TypeS8, S8, "") ImplementConsoleTypeCasters( TypeS8, S8 ) ConsoleGetType( TypeS8 ) @@ -306,7 +306,7 @@ ConsoleSetType( TypeS8 ) //----------------------------------------------------------------------------- // TypeS32 //----------------------------------------------------------------------------- -ConsoleType( int, TypeS32, S32 ) +ConsoleType(int, TypeS32, S32, "") ImplementConsoleTypeCasters(TypeS32, S32) ConsoleGetType( TypeS32 ) @@ -329,7 +329,7 @@ ConsoleSetType( TypeS32 ) //----------------------------------------------------------------------------- // TypeS32Vector //----------------------------------------------------------------------------- -ConsoleType( intList, TypeS32Vector, Vector ) +ConsoleType(intList, TypeS32Vector, Vector, "") ImplementConsoleTypeCasters( TypeS32Vector, Vector< S32 > ) ConsoleGetType( TypeS32Vector ) @@ -386,7 +386,7 @@ ConsoleSetType( TypeS32Vector ) //----------------------------------------------------------------------------- // TypeF32 //----------------------------------------------------------------------------- -ConsoleType( float, TypeF32, F32 ) +ConsoleType(float, TypeF32, F32, "") ImplementConsoleTypeCasters(TypeF32, F32) ConsoleGetType( TypeF32 ) @@ -407,7 +407,7 @@ ConsoleSetType( TypeF32 ) //----------------------------------------------------------------------------- // TypeF32Vector //----------------------------------------------------------------------------- -ConsoleType( floatList, TypeF32Vector, Vector ) +ConsoleType(floatList, TypeF32Vector, Vector, "") ImplementConsoleTypeCasters( TypeF32Vector, Vector< F32 > ) ConsoleGetType( TypeF32Vector ) @@ -464,7 +464,7 @@ ConsoleSetType( TypeF32Vector ) //----------------------------------------------------------------------------- // TypeBool //----------------------------------------------------------------------------- -ConsoleType( bool, TypeBool, bool ) +ConsoleType(bool, TypeBool, bool, "") ImplementConsoleTypeCasters( TypeBool, bool ) ConsoleGetType( TypeBool ) @@ -484,7 +484,7 @@ ConsoleSetType( TypeBool ) //----------------------------------------------------------------------------- // TypeBoolVector //----------------------------------------------------------------------------- -ConsoleType( boolList, TypeBoolVector, Vector ) +ConsoleType(boolList, TypeBoolVector, Vector, "") ImplementConsoleTypeCasters( TypeBoolVector, Vector< bool > ) ConsoleGetType( TypeBoolVector ) @@ -541,7 +541,7 @@ ConsoleSetType( TypeBoolVector ) //----------------------------------------------------------------------------- // TypeFlag //----------------------------------------------------------------------------- -ConsoleType( flag, TypeFlag, S32 ) +ConsoleType(flag, TypeFlag, S32, "") ConsoleGetType( TypeFlag ) { @@ -567,7 +567,7 @@ ConsoleSetType( TypeFlag ) //----------------------------------------------------------------------------- // TypeColorF //----------------------------------------------------------------------------- -ConsoleType( ColorF, TypeColorF, ColorF ) +ConsoleType(ColorF, TypeColorF, ColorF, "") ImplementConsoleTypeCasters( TypeColorF, ColorF ) ConsoleGetType( TypeColorF ) @@ -640,7 +640,7 @@ ConsoleSetType( TypeColorF ) //----------------------------------------------------------------------------- // TypeColorI //----------------------------------------------------------------------------- -ConsoleType( ColorI, TypeColorI, ColorI ) +ConsoleType(ColorI, TypeColorI, ColorI, "") ImplementConsoleTypeCasters( TypeColorI, ColorI ) ConsoleGetType( TypeColorI ) @@ -713,7 +713,7 @@ ConsoleSetType( TypeColorI ) //----------------------------------------------------------------------------- // TypeSimObjectName //----------------------------------------------------------------------------- -ConsoleType( SimObject, TypeSimObjectName, SimObject* ) +ConsoleType(SimObject, TypeSimObjectName, SimObject*, "") ConsoleSetType( TypeSimObjectName ) { @@ -738,7 +738,7 @@ ConsoleGetType( TypeSimObjectName ) //----------------------------------------------------------------------------- // TypeName //----------------------------------------------------------------------------- -ConsoleType( string, TypeName, const char* ) +ConsoleType(string, TypeName, const char*, "") ConsoleGetType( TypeName ) { @@ -753,7 +753,7 @@ ConsoleSetType( TypeName ) //------------------------------------------------------------------------------ // TypeParticleParameterString //------------------------------------------------------------------------------ -ConsoleType( string, TypeParticleParameterString, const char* ) +ConsoleType(string, TypeParticleParameterString, const char*, "") ConsoleGetType( TypeParticleParameterString ) { @@ -772,7 +772,7 @@ ConsoleSetType( TypeParticleParameterString ) // TypeMaterialName //----------------------------------------------------------------------------- -ConsoleType( string, TypeMaterialName, String ) +ConsoleType(string, TypeMaterialName, String, "") ConsoleGetType( TypeMaterialName ) { @@ -794,7 +794,7 @@ ConsoleSetType( TypeMaterialName ) // TypeTerrainMaterialIndex //----------------------------------------------------------------------------- -ConsoleType( int, TypeTerrainMaterialIndex, S32 ) +ConsoleType(int, TypeTerrainMaterialIndex, S32, "") ConsoleGetType( TypeTerrainMaterialIndex ) { @@ -816,7 +816,7 @@ ConsoleSetType( TypeTerrainMaterialIndex ) // TypeTerrainMaterialName //----------------------------------------------------------------------------- -ConsoleType( string, TypeTerrainMaterialName, const char* ) +ConsoleType(string, TypeTerrainMaterialName, const char*, "") ConsoleGetType( TypeTerrainMaterialName ) { @@ -835,7 +835,7 @@ ConsoleSetType( TypeTerrainMaterialName ) // TypeCubemapName //----------------------------------------------------------------------------- -ConsoleType( string, TypeCubemapName, String ) +ConsoleType(string, TypeCubemapName, String, "") ConsoleGetType( TypeCubemapName ) { @@ -856,7 +856,7 @@ ConsoleSetType( TypeCubemapName ) //----------------------------------------------------------------------------- // TypeRectUV //----------------------------------------------------------------------------- -ConsoleType( RectF, TypeRectUV, RectF ) +ConsoleType(RectF, TypeRectUV, RectF, "") ConsoleGetType( TypeRectUV ) { @@ -882,7 +882,7 @@ ConsoleSetType( TypeRectUV ) //----------------------------------------------------------------------------- // TypeUUID //----------------------------------------------------------------------------- -ConsoleType( uuid, TypeUUID, Torque::UUID ) +ConsoleType(uuid, TypeUUID, Torque::UUID, "") ImplementConsoleTypeCasters( TypeUUID, Torque::UUID ) ConsoleGetType( TypeUUID ) @@ -906,7 +906,7 @@ ConsoleSetType( TypeUUID ) //----------------------------------------------------------------------------- // TypePID //----------------------------------------------------------------------------- -ConsoleType( pid, TypePID, SimPersistID* ) +ConsoleType(pid, TypePID, SimPersistID*, "") ImplementConsoleTypeCasters( TypePID, SimPersistID* ) ConsoleGetType( TypePID ) @@ -945,7 +945,7 @@ ConsoleSetType( TypePID ) //----------------------------------------------------------------------------- // TypeSimPersistId //----------------------------------------------------------------------------- -ConsoleType( SimPersistId, TypeSimPersistId, SimPersistID* ) +ConsoleType(SimPersistId, TypeSimPersistId, SimPersistID*, "") ConsoleGetType( TypeSimPersistId ) { diff --git a/Engine/source/console/dynamicTypes.h b/Engine/source/console/dynamicTypes.h index 58d69fef08..e06f3e6b3d 100644 --- a/Engine/source/console/dynamicTypes.h +++ b/Engine/source/console/dynamicTypes.h @@ -35,6 +35,9 @@ #include "console/engineTypeInfo.h" #endif +#ifndef _STRINGTABLE_H_ +#include "core/stringTable.h" +#endif /// @file /// Support for legacy TorqueScript console types. @@ -151,6 +154,8 @@ class ConsoleBaseType virtual const bool isDatablock() { return false; }; virtual const char* prepData( const char* data, char* buffer, U32 bufferLen ) { return data; }; + + virtual StringTableEntry getTypePrefix(void) const { return StringTable->EmptyString(); } /// @} }; @@ -259,7 +264,7 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); } DefineConsoleType( type, nativeType ) \ template<> inline const EngineTypeInfo* _MAPTYPE< nativeType >() { return NULL; } -#define ConsoleType( typeName, type, nativeType ) \ +#define ConsoleType( typeName, type, nativeType, typePrefix ) \ S32 type; \ class ConsoleType##type : public ConsoleBaseType \ { \ @@ -275,6 +280,7 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); } virtual const char *getTypeClassName() { return #typeName ; } \ virtual void *getNativeVariable() { T* var = new T; return (void*)var; } \ virtual void deleteNativeVariable(void* var) { T* nativeVar = reinterpret_cast(var); delete nativeVar; } \ + virtual StringTableEntry getTypePrefix( void ) const { return StringTable->insert( typePrefix ); } \ }; \ ConsoleType ## type gConsoleType ## type ## Instance; @@ -304,6 +310,9 @@ const EngineTypeInfo* _MAPTYPE() { return TYPE< T >(); } }; \ ConsoleType ## type gConsoleType ## type ## Instance; +#define ConsoleTypeFieldPrefix( type, typePrefix ) \ + StringTableEntry ConsoleType##type::getTypePrefix( void ) const { return StringTable->insert( typePrefix ); } + #define ConsoleSetType( type ) \ void ConsoleType##type::setData(void *dptr, S32 argc, const char **argv, const EnumTable *tbl, BitSet32 flag) diff --git a/Engine/source/console/runtimeClassRep.h b/Engine/source/console/runtimeClassRep.h index d7fd4a797f..d684652cf0 100644 --- a/Engine/source/console/runtimeClassRep.h +++ b/Engine/source/console/runtimeClassRep.h @@ -60,6 +60,27 @@ class RuntimeClassRep : public AbstractClassRep parentClass = parent; }; + virtual AbstractClassRep* getContainerChildClass(const bool recurse) + { + // Fetch container children type. + AbstractClassRep* pChildren = T::getContainerChildStaticClassRep(); + if (!recurse || pChildren != NULL) + return pChildren; + + // Fetch parent type. + AbstractClassRep* pParent = T::getParentStaticClassRep(); + if (pParent == NULL) + return NULL; + + // Get parent container children. + return pParent->getContainerChildClass(recurse); + } + + virtual WriteCustomTamlSchema getCustomTamlSchema(void) + { + return T::getStaticWriteCustomTamlSchema(); + } + /// Perform class specific initialization tasks. /// /// Link namespaces, call initPersistFields() and consoleInit(). diff --git a/Engine/source/console/scriptFilename.cpp b/Engine/source/console/scriptFilename.cpp index 649e109eb1..60c81f2005 100644 --- a/Engine/source/console/scriptFilename.cpp +++ b/Engine/source/console/scriptFilename.cpp @@ -230,6 +230,11 @@ bool expandOldScriptFilename(char *filename, U32 size, const char *src) else if (dStrncmp(src, "./", 2) == 0) // dot path means load from current codeblock/mod path slash = dStrrchr(cbName, '/'); + else if (dStrncmp(src, "^", 1) == 0) + { + Platform::makeFullPathName(src + 1, filename, size); + return true; + } else { // otherwise path must be fully specified diff --git a/Engine/source/console/simFieldDictionary.h b/Engine/source/console/simFieldDictionary.h index 7bd8cbbd72..bc865398c0 100644 --- a/Engine/source/console/simFieldDictionary.h +++ b/Engine/source/console/simFieldDictionary.h @@ -49,13 +49,13 @@ class SimFieldDictionary Entry *next; ConsoleBaseType *type; }; -private: enum { HashTableSize = 19 }; Entry *mHashTable[HashTableSize]; +private: static Entry *smFreeList; void freeEntry(Entry *entry); diff --git a/Engine/source/console/simObject.cpp b/Engine/source/console/simObject.cpp index 7ce937c6fd..b07bc68409 100644 --- a/Engine/source/console/simObject.cpp +++ b/Engine/source/console/simObject.cpp @@ -34,7 +34,7 @@ #include "core/frameAllocator.h" #include "core/stream/fileStream.h" #include "core/fileObject.h" - +#include "persistence/taml/tamlCustom.h" IMPLEMENT_CONOBJECT( SimObject ); @@ -437,6 +437,97 @@ SimPersistID* SimObject::getOrCreatePersistentId() return mPersistentId; } + + +void SimObject::onTamlCustomRead(TamlCustomNodes const& customNodes) +{ + // Debug Profiling. + //PROFILE_SCOPE(SimObject_OnTamlCustomRead); + + // Fetch field list. + const AbstractClassRep::FieldList& fieldList = getFieldList(); + const U32 fieldCount = fieldList.size(); + for (U32 index = 0; index < fieldCount; ++index) + { + // Fetch field. + const AbstractClassRep::Field* pField = &fieldList[index]; + + // Ignore if field not appropriate. + if (pField->type == AbstractClassRep::StartArrayFieldType || pField->elementCount > 1) + { + // Find cell custom node. + const TamlCustomNode* pCustomCellNodes = NULL; + if (pField->pGroupname != NULL) + pCustomCellNodes = customNodes.findNode(pField->pGroupname); + if (!pCustomCellNodes) + { + char* niceFieldName = const_cast(pField->pFieldname); + niceFieldName[0] = dToupper(niceFieldName[0]); + String str_niceFieldName = String(niceFieldName); + pCustomCellNodes = customNodes.findNode(str_niceFieldName + "s"); + } + + // Continue if we have explicit cells. + if (pCustomCellNodes != NULL) + { + // Fetch children cell nodes. + const TamlCustomNodeVector& cellNodes = pCustomCellNodes->getChildren(); + + U8 idx = 0; + // Iterate cells. + for (TamlCustomNodeVector::const_iterator cellNodeItr = cellNodes.begin(); cellNodeItr != cellNodes.end(); ++cellNodeItr) + { + char buf[5]; + dSprintf(buf, 5, "%d", idx); + + // Fetch cell node. + TamlCustomNode* pCellNode = *cellNodeItr; + + // Fetch node name. + StringTableEntry nodeName = pCellNode->getNodeName(); + + // Is this a valid alias? + if (nodeName != pField->pFieldname) + { + // No, so warn. + Con::warnf("SimObject::onTamlCustomRead() - Encountered an unknown custom name of '%s'. Only '%s' is valid.", nodeName, pField->pFieldname); + continue; + } + + // Fetch fields. + const TamlCustomFieldVector& fields = pCellNode->getFields(); + + // Iterate property fields. + for (TamlCustomFieldVector::const_iterator fieldItr = fields.begin(); fieldItr != fields.end(); ++fieldItr) + { + // Fetch field. + const TamlCustomField* pField = *fieldItr; + + // Fetch field name. + StringTableEntry fieldName = pField->getFieldName(); + + const AbstractClassRep::Field* field = findField(fieldName); + + // Check common fields. + if (field) + { + setDataField(fieldName, buf, pField->getFieldValue()); + } + else + { + // Unknown name so warn. + Con::warnf("SimObject::onTamlCustomRead() - Encountered an unknown custom field name of '%s'.", fieldName); + continue; + } + } + + idx++; + } + } + } + } +} + //----------------------------------------------------------------------------- bool SimObject::_setPersistentID( void* object, const char* index, const char* data ) @@ -925,6 +1016,220 @@ const char *SimObject::getDataField(StringTableEntry slotName, const char *array return ""; } + +const char *SimObject::getPrefixedDataField(StringTableEntry fieldName, const char *array) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot get field value with NULL field name."); + + // Fetch field value. + const char* pFieldValue = getDataField(fieldName, array); + + // Sanity. + //AssertFatal(pFieldValue != NULL, "Field value cannot be NULL."); + if (!pFieldValue) + return NULL; + + // Return without the prefix if there's no value. + if (*pFieldValue == 0) + return StringTable->EmptyString(); + + // Fetch the field prefix. + StringTableEntry fieldPrefix = getDataFieldPrefix(fieldName); + + // Sanity! + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Calculate a buffer size including prefix. + const U32 valueBufferSize = dStrlen(fieldPrefix) + dStrlen(pFieldValue) + 1; + + // Fetch a buffer. + char* pValueBuffer = Con::getReturnBuffer(valueBufferSize); + + // Format the value buffer. + dSprintf(pValueBuffer, valueBufferSize, "%s%s", fieldPrefix, pFieldValue); + + return pValueBuffer; +} + +//----------------------------------------------------------------------------- + +void SimObject::setPrefixedDataField(StringTableEntry fieldName, const char *array, const char *value) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot set object field value with NULL field name."); + AssertFatal(value != NULL, "Field value cannot be NULL."); + + // Set value without prefix if there's no value. + if (*value == 0) + { + setDataField(fieldName, NULL, value); + return; + } + + // Fetch the field prefix. + StringTableEntry fieldPrefix = getDataFieldPrefix(fieldName); + + // Sanity. + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Do we have a field prefix? + if (fieldPrefix == StringTable->EmptyString()) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so fetch the length of the field prefix. + const U32 fieldPrefixLength = dStrlen(fieldPrefix); + + // Yes, so does it start with the object field prefix? + if (dStrnicmp(value, fieldPrefix, fieldPrefixLength) != 0) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so set the data excluding the prefix. + setDataField(fieldName, NULL, value + fieldPrefixLength); +} + +//----------------------------------------------------------------------------- + +const char *SimObject::getPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const S32 fieldType) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot get field value with NULL field name."); + + // Fetch field value. + const char* pFieldValue = getDataField(fieldName, array); + + // Sanity. + AssertFatal(pFieldValue != NULL, "Field value cannot be NULL."); + + // Return the field if no field type is specified. + if (fieldType == -1) + return pFieldValue; + + // Return without the prefix if there's no value. + if (*pFieldValue == 0) + return StringTable->EmptyString(); + + // Fetch the console base type. + ConsoleBaseType* pConsoleBaseType = ConsoleBaseType::getType(fieldType); + + // Did we find the console base type? + if (pConsoleBaseType == NULL) + { + // No, so warn. + Con::warnf("getPrefixedDynamicDataField() - Invalid field type '%d' specified for field '%s' with value '%s'.", + fieldType, fieldName, pFieldValue); + } + + // Fetch the field prefix. + StringTableEntry fieldPrefix = pConsoleBaseType->getTypePrefix(); + + // Sanity! + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Calculate a buffer size including prefix. + const U32 valueBufferSize = dStrlen(fieldPrefix) + dStrlen(pFieldValue) + 1; + + // Fetch a buffer. + char* pValueBuffer = Con::getReturnBuffer(valueBufferSize); + + // Format the value buffer. + dSprintf(pValueBuffer, valueBufferSize, "%s%s", fieldPrefix, pFieldValue); + + return pValueBuffer; +} + +//----------------------------------------------------------------------------- + +void SimObject::setPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const char *value, const S32 fieldType) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot set object field value with NULL field name."); + AssertFatal(value != NULL, "Field value cannot be NULL."); + + // Set value without prefix if no field type was specified. + if (fieldType == -1) + { + setDataField(fieldName, NULL, value); + return; + } + + // Fetch the console base type. + ConsoleBaseType* pConsoleBaseType = ConsoleBaseType::getType(fieldType); + + // Did we find the console base type? + if (pConsoleBaseType == NULL) + { + // No, so warn. + Con::warnf("setPrefixedDynamicDataField() - Invalid field type '%d' specified for field '%s' with value '%s'.", + fieldType, fieldName, value); + } + + // Set value without prefix if there's no value or we didn't find the console base type. + if (*value == 0 || pConsoleBaseType == NULL) + { + setDataField(fieldName, NULL, value); + return; + } + + // Fetch the field prefix. + StringTableEntry fieldPrefix = pConsoleBaseType->getTypePrefix(); + + // Sanity. + AssertFatal(fieldPrefix != NULL, "Field prefix cannot be NULL."); + + // Do we have a field prefix? + if (fieldPrefix == StringTable->EmptyString()) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so fetch the length of the field prefix. + const U32 fieldPrefixLength = dStrlen(fieldPrefix); + + // Yes, so does it start with the object field prefix? + if (dStrnicmp(value, fieldPrefix, fieldPrefixLength) != 0) + { + // No, so set the data field in the usual way. + setDataField(fieldName, NULL, value); + return; + } + + // Yes, so set the data excluding the prefix. + setDataField(fieldName, NULL, value + fieldPrefixLength); +} + +//----------------------------------------------------------------------------- + +StringTableEntry SimObject::getDataFieldPrefix(StringTableEntry fieldName) +{ + // Sanity! + AssertFatal(fieldName != NULL, "Cannot get field prefix with NULL field name."); + + // Find the field. + const AbstractClassRep::Field* pField = findField(fieldName); + + // Return nothing if field was not found. + if (pField == NULL) + return StringTable->EmptyString(); + + // Yes, so fetch the console base type. + ConsoleBaseType* pConsoleBaseType = ConsoleBaseType::getType(pField->type); + + // Fetch the type prefix. + return pConsoleBaseType->getTypePrefix(); +} + + //----------------------------------------------------------------------------- U32 SimObject::getDataFieldType( StringTableEntry slotName, const char* array ) diff --git a/Engine/source/console/simObject.h b/Engine/source/console/simObject.h index 0ea3f155a7..eb6f3f0e0e 100644 --- a/Engine/source/console/simObject.h +++ b/Engine/source/console/simObject.h @@ -33,6 +33,9 @@ #include "core/bitSet.h" #endif +#ifndef _TAML_CALLBACKS_H_ +#include "persistence/taml/tamlCallbacks.h" +#endif class Stream; class LightManager; @@ -226,7 +229,7 @@ class SimPersistID; /// set automatically by the console constructor code. /// /// @nosubgrouping -class SimObject: public ConsoleObject +class SimObject: public ConsoleObject, public TamlCallbacks { public: @@ -298,6 +301,8 @@ class SimObject: public ConsoleObject /// Flags internal to the object management system. BitSet32 mFlags; + StringTableEntry mProgenitorFile; + /// Object we are copying fields from. SimObject* mCopySource; @@ -348,13 +353,42 @@ class SimObject: public ConsoleObject static bool setSuperClass(void *object, const char *index, const char *data) { static_cast(object)->setSuperClassNamespace(data); return false; }; + static bool writeObjectName(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->objectName != NULL && simObject->objectName != StringTable->EmptyString(); } + static bool writeCanSaveDynamicFields(void* obj, StringTableEntry pFieldName) + { return static_cast(obj)->mCanSaveFieldDictionary == false; } + static bool writeInternalName(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mInternalName != NULL && simObject->mInternalName != StringTable->EmptyString(); } + static bool setParentGroup(void* obj, const char* data); + static bool writeParentGroup(void* obj, StringTableEntry pFieldName) + { return static_cast(obj)->mGroup != NULL; } + static bool writeSuperclass(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mSuperClassName != NULL && simObject->mSuperClassName != StringTable->EmptyString(); } + static bool writeClass(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mClassName != NULL && simObject->mClassName != StringTable->EmptyString(); } + static bool writeClassName(void* obj, StringTableEntry pFieldName) + { SimObject* simObject = static_cast(obj); return simObject->mClassName != NULL && simObject->mClassName != StringTable->EmptyString(); } + + // Group hierarchy protected set method static bool setProtectedParent(void *object, const char *index, const char *data); // Object name protected set method static bool setProtectedName(void *object, const char *index, const char *data); + public: + inline void setProgenitorFile(const char* pFile) { mProgenitorFile = StringTable->insert(pFile); } + inline StringTableEntry getProgenitorFile(void) const { return mProgenitorFile; } + protected: + /// Taml callbacks. + virtual void onTamlPreWrite(void) {} + virtual void onTamlPostWrite(void) {} + virtual void onTamlPreRead(void) {} + virtual void onTamlPostRead(const TamlCustomNodes& customNodes) {} + virtual void onTamlAddParent(SimObject* pParentObject) {} + virtual void onTamlCustomWrite(TamlCustomNodes& customNodes) {} + virtual void onTamlCustomRead(const TamlCustomNodes& customNodes); /// Id number for this object. SimObjectId mId; @@ -461,6 +495,16 @@ class SimObject: public ConsoleObject /// @param value Value to store. void setDataField(StringTableEntry slotName, const char *array, const char *value); + const char *getPrefixedDataField(StringTableEntry fieldName, const char *array); + + void setPrefixedDataField(StringTableEntry fieldName, const char *array, const char *value); + + const char *getPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const S32 fieldType = -1); + + void setPrefixedDynamicDataField(StringTableEntry fieldName, const char *array, const char *value, const S32 fieldType = -1); + + StringTableEntry getDataFieldPrefix(StringTableEntry fieldName); + /// Get the type of a field on the object. /// /// @param slotName Field to access. diff --git a/Engine/source/console/simSet.h b/Engine/source/console/simSet.h index f5e634262d..9712e79451 100644 --- a/Engine/source/console/simSet.h +++ b/Engine/source/console/simSet.h @@ -39,6 +39,7 @@ #include "core/util/tSignal.h" #endif +#include "persistence/taml/tamlChildren.h" //--------------------------------------------------------------------------- /// A set of SimObjects. @@ -89,7 +90,7 @@ /// } /// @endcode /// -class SimSet: public SimObject +class SimSet : public SimObject, public TamlChildren { public: @@ -152,8 +153,10 @@ class SimSet: public SimObject iterator end() { return objectList.end(); } value operator[] (S32 index) { return objectList[U32(index)]; } - iterator find( iterator first, iterator last, SimObject *obj) + inline iterator find( iterator first, iterator last, SimObject *obj) { return ::find(first, last, obj); } + inline iterator find(SimObject *obj) + { return ::find(begin(), end(), obj); } /// Reorder the position of "obj" to either be the last object in the list or, if /// "target" is given, to come before "target" in the list of children. @@ -222,7 +225,7 @@ class SimSet: public SimObject /// @note The child sets themselves count towards the total too. U32 sizeRecursive(); - SimObject* findObjectByInternalName(StringTableEntry internalName, bool searchChildren = false); + virtual SimObject* findObjectByInternalName(StringTableEntry internalName, bool searchChildren = false); SimObject* findObjectByLineNumber(const char* fileName, S32 declarationLine, bool searchChildren = false); /// Find the given object in this set. Returns NULL if the object @@ -277,6 +280,32 @@ class SimSet: public SimObject virtual bool readObject(Stream *stream); virtual SimSet* clone(); + + // TamlChildren + virtual U32 getTamlChildCount(void) const + { + return (U32)size(); + } + + virtual SimObject* getTamlChild(const U32 childIndex) const + { + // Sanity! + AssertFatal(childIndex < (U32)size(), "SimSet::getTamlChild() - Child index is out of range."); + + // For when the assert is not used. + if (childIndex >= (U32)size()) + return NULL; + + return at(childIndex); + } + + virtual void addTamlChild(SimObject* pSimObject) + { + // Sanity! + AssertFatal(pSimObject != NULL, "SimSet::addTamlChild() - Cannot add a NULL child object."); + + addObject(pSimObject); + } }; #ifdef TORQUE_DEBUG_GUARD diff --git a/Engine/source/core/factoryCache.h b/Engine/source/core/factoryCache.h new file mode 100644 index 0000000000..dbecc152a6 --- /dev/null +++ b/Engine/source/core/factoryCache.h @@ -0,0 +1,86 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _FACTORY_CACHE_H_ +#define _FACTORY_CACHE_H_ + +#ifndef _TVECTOR_H_ +#include "core/util/tVector.h" +#endif + +//----------------------------------------------------------------------------- + +class IFactoryObjectReset +{ +public: + virtual void resetState( void ) = 0; +}; + +//----------------------------------------------------------------------------- + +template +class FactoryCache : private Vector +{ +public: + FactoryCache() + { + } + + virtual ~FactoryCache() + { + purgeCache(); + } + + T* createObject( void ) + { + // Create a new object if cache is empty. + if ( this->size() == 0 ) + return new T(); + + // Return a cached object. + T* pObject = this->back(); + this->pop_back(); + return pObject; + } + + void cacheObject( T* pObject ) + { + // Cache object. + this->push_back( pObject ); + + // Reset object state if available. + IFactoryObjectReset* pResetStateObject = dynamic_cast( pObject ); + if ( pResetStateObject != NULL ) + pResetStateObject->resetState(); + } + + void purgeCache( void ) + { + while( this->size() > 0 ) + { + delete this->back(); + this->pop_back(); + } + } +}; + +#endif // _FACTORY_CACHE_H_ \ No newline at end of file diff --git a/Engine/source/core/module.cpp b/Engine/source/core/module.cpp index f069cbcb42..52bdc54819 100644 --- a/Engine/source/core/module.cpp +++ b/Engine/source/core/module.cpp @@ -46,14 +46,14 @@ bool Module::_constrainedToComeBefore( Module* module, Mode mode ) Module* depModule = dependency->mModule; if( !depModule ) { - depModule = ModuleManager::findModule( dependency->mModuleName ); + depModule = EngineModuleManager::findModule( dependency->mModuleName ); if( !depModule ) { // Module does not exist. Only emit a warning here so that modules // can be omitted from a link without requiring the module definitions // to be adapted. - Platform::outputDebugString( "[ModuleManager] Module %s of '%s' depends on module '%s' which does not exist", + Platform::outputDebugString( "[EngineModuleManager] Module %s of '%s' depends on module '%s' which does not exist", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), dependency->mModuleName ); continue; @@ -86,14 +86,14 @@ bool Module::_constrainedToComeAfter( Module* module, Mode mode ) Module* depModule = dependency->mModule; if( !depModule ) { - depModule = ModuleManager::findModule( dependency->mModuleName ); + depModule = EngineModuleManager::findModule( dependency->mModuleName ); if( !depModule ) { // Module does not exist. Only emit a warning here so that modules // can be omitted from a link without requiring the module definitions // to be adapted. - Platform::outputDebugString( "[ModuleManager] Module %s of '%s' depends on module '%s' which does not exist", + Platform::outputDebugString( "[EngineModuleManager] Module %s of '%s' depends on module '%s' which does not exist", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), dependency->mModuleName ); continue; @@ -115,7 +115,7 @@ bool Module::_constrainedToComeAfter( Module* module, Mode mode ) //----------------------------------------------------------------------------- -String ModuleManager::_moduleListToString( Vector< Module* >& moduleList ) +String EngineModuleManager::_moduleListToString( Vector< Module* >& moduleList ) { StringBuilder str; @@ -136,14 +136,14 @@ String ModuleManager::_moduleListToString( Vector< Module* >& moduleList ) //----------------------------------------------------------------------------- -void ModuleManager::_printModuleList( Vector< Module* >& moduleList ) +void EngineModuleManager::_printModuleList( Vector< Module* >& moduleList ) { Platform::outputDebugString( _moduleListToString( moduleList ) ); } //----------------------------------------------------------------------------- -void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& moduleList, Module* module ) +void EngineModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& moduleList, Module* module ) { // If this module is being overridden, switch over to // the module overriding it. @@ -168,7 +168,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& if( !module->_getDependencies( mode ) ) { #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Appending '%s' to '%s'", + Platform::outputDebugString( "[EngineModuleManager] Appending '%s' to '%s'", module->getName(), _moduleListToString( moduleList ).c_str() ); #endif @@ -179,7 +179,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& // First make sure that all 'after' dependencies are in the list. #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Resolving %s dependencies of '%s'", + Platform::outputDebugString( "[EngineModuleManager] Resolving %s dependencies of '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName() ); #endif @@ -199,7 +199,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& } AssertFatal( _getIndexOfModuleInList( moduleList, module ) == -1, - avar( "ModuleManager::_insertModuleIntoList - Cycle in 'after' %s dependency chain of '%s'", + avar( "EngineModuleManager::_insertModuleIntoList - Cycle in 'after' %s dependency chain of '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName() ) ); @@ -212,7 +212,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& const bool currentAfterThis = moduleList[ i ]->_constrainedToComeAfter( module, mode ); AssertFatal( !( thisBeforeCurrent && currentAfterThis ), - avar( "ModuleManager::_insertModuleIntoList - Ambiguous %s placement of module '%s' relative to '%s'", + avar( "EngineModuleManager::_insertModuleIntoList - Ambiguous %s placement of module '%s' relative to '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), moduleList[ i ]->getName() ) ); @@ -232,7 +232,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& if( thisBeforeCurrent && !moduleList[ i ]->_getDependencies( mode ) && i != numModules - 1 ) { #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Pushing '%s' to back end of chain for resolving '%s'", + Platform::outputDebugString( "[EngineModuleManager] Pushing '%s' to back end of chain for resolving '%s'", moduleList[ i ]->getName(), module->getName() ); #endif @@ -251,7 +251,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& for( U32 n = i + 1; n < numModules; ++ n ) AssertFatal( !( moduleList[ n ]->_constrainedToComeBefore( module, mode ) || module->_constrainedToComeAfter( moduleList[ n ], mode ) ), - avar( "ModuleManager::_insertModuleIntoList - Ambiguous %s constraint on module '%s' to come before '%s' yet after '%s'", + avar( "EngineModuleManager::_insertModuleIntoList - Ambiguous %s constraint on module '%s' to come before '%s' yet after '%s'", mode == Module::ModeInitialize ? "init" : "shutdown", module->getName(), moduleList[ i ]->getName(), @@ -260,7 +260,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& // Add the module at this position. #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Inserting '%s' at index %i into '%s'", + Platform::outputDebugString( "[EngineModuleManager] Inserting '%s' at index %i into '%s'", module->getName(), i, _moduleListToString( moduleList ).c_str() ); #endif @@ -271,7 +271,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& // No constraint-based position. Just append. #if defined( DEBUG_SPEW ) && DEBUG_SPEW_LEVEL > 1 - Platform::outputDebugString( "[ModuleManager] Appending '%s' to '%s'", + Platform::outputDebugString( "[EngineModuleManager] Appending '%s' to '%s'", module->getName(), _moduleListToString( moduleList ).c_str() ); #endif @@ -280,7 +280,7 @@ void ModuleManager::_insertIntoModuleList( Module::Mode mode, Vector< Module* >& //----------------------------------------------------------------------------- -Module* ModuleManager::_findOverrideFor( Module* module ) +Module* EngineModuleManager::_findOverrideFor( Module* module ) { const char* name = module->getName(); @@ -294,7 +294,7 @@ Module* ModuleManager::_findOverrideFor( Module* module ) //----------------------------------------------------------------------------- -S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, Module* module ) +S32 EngineModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, Module* module ) { const U32 numModules = moduleList.size(); for( U32 i = 0; i < numModules; ++ i ) @@ -306,7 +306,7 @@ S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, Modul //----------------------------------------------------------------------------- -S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, const char* moduleName ) +S32 EngineModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, const char* moduleName ) { const U32 numModules = moduleList.size(); for( U32 i = 0; i < numModules; ++ i ) @@ -318,7 +318,7 @@ S32 ModuleManager::_getIndexOfModuleInList( Vector< Module* >& moduleList, const //----------------------------------------------------------------------------- -void ModuleManager::_createModuleList( Module::Mode mode, Vector< Module* >& moduleList ) +void EngineModuleManager::_createModuleList( Module::Mode mode, Vector< Module* >& moduleList ) { for( Module* module = Module::smFirst; module != NULL; module = module->mNext ) _insertIntoModuleList( mode, moduleList, module ); @@ -326,7 +326,7 @@ void ModuleManager::_createModuleList( Module::Mode mode, Vector< Module* >& mod //----------------------------------------------------------------------------- -void ModuleManager::initializeSystem() +void EngineModuleManager::initializeSystem() { Vector< Module* > modules; @@ -339,7 +339,7 @@ void ModuleManager::initializeSystem() if( !module->mIsInitialized ) { #ifdef DEBUG_SPEW - Platform::outputDebugString( "[ModuleManager] Initializing %s", + Platform::outputDebugString( "[EngineModuleManager] Initializing %s", module->getName() ); #endif @@ -351,7 +351,7 @@ void ModuleManager::initializeSystem() //----------------------------------------------------------------------------- -void ModuleManager::shutdownSystem() +void EngineModuleManager::shutdownSystem() { Vector< Module* > modules; @@ -363,7 +363,7 @@ void ModuleManager::shutdownSystem() if( modules[ i ]->mIsInitialized ) { #ifdef DEBUG_SPEW - Platform::outputDebugString( "[ModuleManager] Shutting down %s", + Platform::outputDebugString( "[EngineModuleManager] Shutting down %s", modules[ i ]->getName() ); #endif @@ -375,7 +375,7 @@ void ModuleManager::shutdownSystem() //----------------------------------------------------------------------------- -Module* ModuleManager::findModule( const char* name ) +Module* EngineModuleManager::findModule( const char* name ) { for( Module* module = Module::smFirst; module != NULL; module = module->mNext ) if( dStricmp( module->getName(), name ) == 0 ) diff --git a/Engine/source/core/module.h b/Engine/source/core/module.h index 10f842e6fd..49be0665eb 100644 --- a/Engine/source/core/module.h +++ b/Engine/source/core/module.h @@ -42,7 +42,7 @@ class Module public: typedef void Parent; - friend struct ModuleManager; + friend struct EngineModuleManager; protected: @@ -333,7 +333,7 @@ class Module void _AfterModuleInit::initialize() -struct ModuleManager +struct EngineModuleManager { /// Initialize all modules registered with the system. static void initializeSystem(); diff --git a/Engine/source/core/stream/stream.cpp b/Engine/source/core/stream/stream.cpp index 873bdeba61..da1b1dc82f 100644 --- a/Engine/source/core/stream/stream.cpp +++ b/Engine/source/core/stream/stream.cpp @@ -123,6 +123,19 @@ void Stream::writeString(const char *string, S32 maxLen) write(len, string); } +bool Stream::writeFormattedBuffer(const char *format, ...) +{ + char buffer[4096]; + va_list args; + va_start(args, format); + const S32 length = vsprintf(buffer, format, args); + + // Sanity! + AssertFatal(length <= sizeof(buffer), "writeFormattedBuffer - String format exceeded buffer size. This will cause corruption."); + + return write(length, buffer); +} + void Stream::readString(char buf[256]) { U8 len; diff --git a/Engine/source/core/stream/stream.h b/Engine/source/core/stream/stream.h index c50acb6599..bc2495d701 100644 --- a/Engine/source/core/stream/stream.h +++ b/Engine/source/core/stream/stream.h @@ -29,7 +29,9 @@ #ifndef _ENDIAN_H_ #include "core/util/endian.h" #endif - +#ifndef _STRINGFUNCTIONS_H_ +#include "core/strings/stringFunctions.h" +#endif /// @defgroup stream_overload Primitive Type Stream Operation Overloads /// These macros declare the read and write functions for all primitive types. @@ -130,12 +132,21 @@ class Stream /// writeString is safer. void writeLongString(U32 maxStringLen, const char *string); + inline bool Put(char character) { return write(character); } + /// Write raw text to the stream void writeText(const char *text); /// Writes a string to the stream. virtual void writeString(const char *stringBuf, S32 maxLen=255); + /// Writes a formatted buffer to the stream. + /// NOTE: A maximum string length of 4K is allowed. + bool writeFormattedBuffer(const char *format, ...); + + /// Writes a NULL terminated string buffer. + bool writeStringBuffer(const char* buffer) { return write(dStrlen(buffer), buffer); } + // read/write real strings void write(const String & str) { _write(str); } void read(String * str) { _read(str); } diff --git a/Engine/source/core/util/tDictionary.h b/Engine/source/core/util/tDictionary.h index 8f395fea75..a592acc1eb 100644 --- a/Engine/source/core/util/tDictionary.h +++ b/Engine/source/core/util/tDictionary.h @@ -863,5 +863,167 @@ inline Value& Map::operator[](const Key& key) return mMap.findOrInsert(key)->value; } + +//----------------------------------------------------------------------------- +// iterator class + +/// A HashMap template class. +/// The map class maps between a key and an associated value. Keys +/// are unique. +/// The hash table class is used as the default implementation so the +/// the key must be hashable, see util/hash.h for details. +/// @ingroup UtilContainers +template > +class HashMap : private Sequence +{ + typedef HashTable Parent; + +private: + Sequence mHashMap; + +public: + // types + typedef typename Parent::Pair Pair; + typedef Pair ValueType; + typedef Pair& Reference; + typedef const Pair& ConstReference; + + typedef typename Parent::Iterator iterator; + typedef typename Parent::ConstIterator const_iterator; + typedef S32 DifferenceType; + typedef U32 SizeType; + + // initialization + HashMap() {} + ~HashMap() {} + HashMap(const HashMap& p); + + // management + U32 size() const; ///< Return the number of elements + void clear(); ///< Empty the HashMap + bool isEmpty() const; ///< Returns true if the map is empty + + // insert & erase elements + iterator insert(const Key& key, const Value&); // Documented below... + void erase(iterator); ///< Erase the given entry + void erase(const Key& key); ///< Erase the key from the map + + // HashMap lookup + iterator find(const Key&); ///< Find entry for the given key + const_iterator find(const Key&) const; ///< Find entry for the given key + bool contains(const Key&a) + { + return mHashMap.count(a) > 0; + } + + // forward iterator access + iterator begin(); ///< iterator to first element + const_iterator begin() const; ///< iterator to first element + iterator end(); ///< IIterator to last element + 1 + const_iterator end() const; ///< iterator to last element + 1 + + // operators + Value& operator[](const Key&); ///< Index using the given key. If the key is not currently in the map it is added. +}; + +template HashMap::HashMap(const HashMap& p) +{ + *this = p; +} + + +//----------------------------------------------------------------------------- +// management + +template +inline U32 HashMap::size() const +{ + return mHashMap.size(); +} + +template +inline void HashMap::clear() +{ + mHashMap.clear(); +} + +template +inline bool HashMap::isEmpty() const +{ + return mHashMap.isEmpty(); +} + + +//----------------------------------------------------------------------------- +// add & remove elements + +/// Insert the key value pair but don't allow duplicates. +/// The map class does not allow duplicates keys. If the key already exists in +/// the map the function will fail and return end(). +template +typename HashMap::iterator HashMap::insert(const Key& key, const Value& x) +{ + return mHashMap.insertUnique(key, x); +} + +template +void HashMap::erase(const Key& key) +{ + mHashMap.erase(key); +} + +template +void HashMap::erase(iterator node) +{ + mHashMap.erase(node); +} + + +//----------------------------------------------------------------------------- +// Searching + +template +typename HashMap::iterator HashMap::find(const Key& key) +{ + return mHashMap.find(key); +} + +//----------------------------------------------------------------------------- +// iterator access + +template +inline typename HashMap::iterator HashMap::begin() +{ + return mHashMap.begin(); +} + +template +inline typename HashMap::const_iterator HashMap::begin() const +{ + return mHashMap.begin(); +} + +template +inline typename HashMap::iterator HashMap::end() +{ + return mHashMap.end(); +} + +template +inline typename HashMap::const_iterator HashMap::end() const +{ + return mHashMap.end(); +} + + +//----------------------------------------------------------------------------- +// operators + +template +inline Value& HashMap::operator[](const Key& key) +{ + return mHashMap.findOrInsert(key)->value; +} + #endif diff --git a/Engine/source/gui/core/guiTypes.cpp b/Engine/source/gui/core/guiTypes.cpp index dbf96c5177..4f96884bfd 100644 --- a/Engine/source/gui/core/guiTypes.cpp +++ b/Engine/source/gui/core/guiTypes.cpp @@ -717,7 +717,7 @@ IMPLEMENT_STRUCT( RectSpacingI, END_IMPLEMENT_STRUCT; -ConsoleType( RectSpacingI, TypeRectSpacingI, RectSpacingI ) +ConsoleType(RectSpacingI, TypeRectSpacingI, RectSpacingI, "") ImplementConsoleTypeCasters( TypeRectSpacingI, RectSpacingI ) ConsoleGetType( TypeRectSpacingI ) diff --git a/Engine/source/math/mathTypes.cpp b/Engine/source/math/mathTypes.cpp index 7498cc8fca..f205bf4267 100644 --- a/Engine/source/math/mathTypes.cpp +++ b/Engine/source/math/mathTypes.cpp @@ -37,6 +37,7 @@ #include "math/mEase.h" #include "math/mathUtils.h" +#include "core/strings/stringUnit.h" IMPLEMENT_SCOPE( MathTypes, Math,, "" ); @@ -117,7 +118,7 @@ END_IMPLEMENT_STRUCT; //----------------------------------------------------------------------------- // TypePoint2I //----------------------------------------------------------------------------- -ConsoleType( Point2I, TypePoint2I, Point2I ) +ConsoleType(Point2I, TypePoint2I, Point2I, "") ImplementConsoleTypeCasters( TypePoint2I, Point2I ) ConsoleGetType( TypePoint2I ) @@ -142,7 +143,7 @@ ConsoleSetType( TypePoint2I ) //----------------------------------------------------------------------------- // TypePoint2F //----------------------------------------------------------------------------- -ConsoleType( Point2F, TypePoint2F, Point2F ) +ConsoleType(Point2F, TypePoint2F, Point2F, "") ImplementConsoleTypeCasters( TypePoint2F, Point2F ) ConsoleGetType( TypePoint2F ) @@ -167,7 +168,7 @@ ConsoleSetType( TypePoint2F ) //----------------------------------------------------------------------------- // TypePoint3I //----------------------------------------------------------------------------- -ConsoleType( Point3I, TypePoint3I, Point3I ) +ConsoleType(Point3I, TypePoint3I, Point3I, "") ImplementConsoleTypeCasters(TypePoint3I, Point3I) ConsoleGetType( TypePoint3I ) @@ -192,7 +193,7 @@ ConsoleSetType( TypePoint3I ) //----------------------------------------------------------------------------- // TypePoint3F //----------------------------------------------------------------------------- -ConsoleType( Point3F, TypePoint3F, Point3F ) +ConsoleType(Point3F, TypePoint3F, Point3F, "") ImplementConsoleTypeCasters(TypePoint3F, Point3F) ConsoleGetType( TypePoint3F ) @@ -217,7 +218,7 @@ ConsoleSetType( TypePoint3F ) //----------------------------------------------------------------------------- // TypePoint4F //----------------------------------------------------------------------------- -ConsoleType( Point4F, TypePoint4F, Point4F ) +ConsoleType(Point4F, TypePoint4F, Point4F, "") ImplementConsoleTypeCasters( TypePoint4F, Point4F ) ConsoleGetType( TypePoint4F ) @@ -242,7 +243,7 @@ ConsoleSetType( TypePoint4F ) //----------------------------------------------------------------------------- // TypeRectI //----------------------------------------------------------------------------- -ConsoleType( RectI, TypeRectI, RectI ) +ConsoleType(RectI, TypeRectI, RectI, "") ImplementConsoleTypeCasters( TypeRectI, RectI ) ConsoleGetType( TypeRectI ) @@ -269,7 +270,7 @@ ConsoleSetType( TypeRectI ) //----------------------------------------------------------------------------- // TypeRectF //----------------------------------------------------------------------------- -ConsoleType( RectF, TypeRectF, RectF ) +ConsoleType(RectF, TypeRectF, RectF, "") ImplementConsoleTypeCasters( TypeRectF, RectF ) ConsoleGetType( TypeRectF ) @@ -296,7 +297,7 @@ ConsoleSetType( TypeRectF ) //----------------------------------------------------------------------------- // TypeMatrix //----------------------------------------------------------------------------- -ConsoleType( MatrixF, TypeMatrixF, MatrixF ) +ConsoleType(MatrixF, TypeMatrixF, MatrixF, "") ImplementConsoleTypeCasters( TypeMatrixF, MatrixF ) // Oh merry confusion. Torque stores matrices in row-major order yet to TorqueScript @@ -339,7 +340,7 @@ ConsoleSetType( TypeMatrixF ) //----------------------------------------------------------------------------- // TypeMatrixPosition //----------------------------------------------------------------------------- -ConsoleType( MatrixPosition, TypeMatrixPosition, MatrixF ) +ConsoleType(MatrixPosition, TypeMatrixPosition, MatrixF, "") ConsoleGetType( TypeMatrixPosition ) { @@ -374,7 +375,7 @@ ConsoleSetType( TypeMatrixPosition ) //----------------------------------------------------------------------------- // TypeMatrixRotation //----------------------------------------------------------------------------- -ConsoleType( MatrixRotation, TypeMatrixRotation, MatrixF ) +ConsoleType(MatrixRotation, TypeMatrixRotation, MatrixF, "") ConsoleGetType( TypeMatrixRotation ) { @@ -419,7 +420,7 @@ ConsoleSetType( TypeMatrixRotation ) //----------------------------------------------------------------------------- // TypeAngAxisF //----------------------------------------------------------------------------- -ConsoleType( AngAxisF, TypeAngAxisF, AngAxisF ) +ConsoleType(AngAxisF, TypeAngAxisF, AngAxisF, "") ImplementConsoleTypeCasters( TypeAngAxisF, AngAxisF ) ConsoleGetType( TypeAngAxisF ) @@ -458,7 +459,7 @@ ConsoleSetType( TypeAngAxisF ) const TransformF TransformF::Identity( Point3F::Zero, AngAxisF( Point3F( 0, 0, 1 ), 0) ); -ConsoleType( TransformF, TypeTransformF, TransformF ) +ConsoleType(TransformF, TypeTransformF, TransformF, "") ImplementConsoleTypeCasters( TypeTransformF, TransformF ) ConsoleGetType( TypeTransformF ) @@ -502,7 +503,7 @@ ConsoleSetType( TypeTransformF ) //----------------------------------------------------------------------------- // TypeBox3F //----------------------------------------------------------------------------- -ConsoleType( Box3F, TypeBox3F, Box3F ) +ConsoleType(Box3F, TypeBox3F, Box3F, "") ImplementConsoleTypeCasters( TypeBox3F, Box3F ) ConsoleGetType( TypeBox3F ) @@ -539,7 +540,7 @@ ConsoleSetType( TypeBox3F ) //----------------------------------------------------------------------------- // TypeEaseF //----------------------------------------------------------------------------- -ConsoleType( EaseF, TypeEaseF, EaseF ) +ConsoleType(EaseF, TypeEaseF, EaseF, "") ImplementConsoleTypeCasters( TypeEaseF, EaseF ) ConsoleGetType( TypeEaseF ) diff --git a/Engine/source/module/moduleCallbacks.h b/Engine/source/module/moduleCallbacks.h new file mode 100644 index 0000000000..e13d63cca0 --- /dev/null +++ b/Engine/source/module/moduleCallbacks.h @@ -0,0 +1,52 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_CALLBACKS_H_ +#define _MODULE_CALLBACKS_H_ + +#ifndef _MODULE_DEFINITION_H +#include "moduleDefinition.h" +#endif + +//----------------------------------------------------------------------------- + +/// @ingroup moduleGroup +/// @see moduleGroup +class ModuleCallbacks +{ + friend class ModuleManager; + +private: + // Called when a module is about to be loaded. + virtual void onModulePreLoad( ModuleDefinition* pModuleDefinition ) {} + + // Called when a module has been loaded. + virtual void onModulePostLoad( ModuleDefinition* pModuleDefinition ) {} + + // Called when a module is about to be unloaded. + virtual void onModulePreUnload( ModuleDefinition* pModuleDefinition ) {} + + // Called when a module has been unloaded. + virtual void onModulePostUnload( ModuleDefinition* pModuleDefinition ) {} +}; + +#endif // _MODULE_CALLBACKS_H_ diff --git a/Engine/source/module/moduleDefinition.cpp b/Engine/source/module/moduleDefinition.cpp new file mode 100644 index 0000000000..97c372c76f --- /dev/null +++ b/Engine/source/module/moduleDefinition.cpp @@ -0,0 +1,209 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "moduleDefinition.h" + +#ifndef _MODULE_MANAGER_H +#include "moduleManager.h" +#endif + +// Script bindings. +#include "moduleDefinition_ScriptBinding.h" + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ModuleDefinition ); + +//----------------------------------------------------------------------------- + +ModuleDefinition::ModuleDefinition() : +mModuleId(StringTable->EmptyString()), + mVersionId( 0 ), + mBuildId( 0 ), + mEnabled( true ), + mSynchronized( false ), + mDeprecated( false ), + mCriticalMerge( false ), + mModuleDescription( StringTable->EmptyString() ), + mAuthor(StringTable->EmptyString()), + mModuleGroup(StringTable->EmptyString()), + mModuleType(StringTable->EmptyString()), + mScriptFile(StringTable->EmptyString()), + mCreateFunction(StringTable->EmptyString()), + mDestroyFunction(StringTable->EmptyString()), + mAssetTagsManifest(StringTable->EmptyString()), + mModulePath(StringTable->EmptyString()), + mModuleFile(StringTable->EmptyString()), + mModuleFilePath(StringTable->EmptyString()), + mModuleScriptFilePath(StringTable->EmptyString()), + mSignature(StringTable->EmptyString()), + mLoadCount( 0 ), + mLocked( false ), + mScopeSet( 0 ), + mpModuleManager( NULL ) +{ + // Set Vector Associations. + VECTOR_SET_ASSOCIATION( mDependencies ); + VECTOR_SET_ASSOCIATION( mModuleAssets ); +} + +//----------------------------------------------------------------------------- + +void ModuleDefinition::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addProtectedField("ModuleId", TypeString, Offset(mModuleId, ModuleDefinition), &defaultProtectedSetFn, &defaultProtectedGetFn, ""); + + /// Module configuration. + addProtectedField( "ModuleId", TypeString, Offset(mModuleId, ModuleDefinition), &setModuleId, &defaultProtectedGetFn, "A unique string Id for the module. It can contain any characters except a comma or semi-colon (the asset scope character)." ); + addProtectedField( "VersionId", TypeS32, Offset(mVersionId, ModuleDefinition), &setVersionId, &defaultProtectedGetFn, "The version Id. Breaking changes to a module should use a higher version Id." ); + addProtectedField( "BuildId", TypeS32, Offset(mBuildId, ModuleDefinition), &setBuildId, &defaultProtectedGetFn, &writeBuildId, "The build Id. Non-breaking changes to a module should use a higher build Id. Optional: If not specified then the build Id will be zero." ); + addProtectedField( "Enabled", TypeBool, Offset(mEnabled, ModuleDefinition), &setEnabled, &defaultProtectedGetFn, &writeEnabled, "Whether the module is enabled or not. When disabled, it is effectively ignored. Optional: If not specified then the module is enabled." ); + addProtectedField( "Synchronized", TypeBool, Offset(mSynchronized, ModuleDefinition), &setSynchronized, &defaultProtectedGetFn, &writeSynchronized, "Whether the module should be synchronized or not. Optional: If not specified then the module is not synchronized." ); + addProtectedField( "Deprecated", TypeBool, Offset(mDeprecated, ModuleDefinition), &setDeprecated, &defaultProtectedGetFn, &writeDeprecated, "Whether the module is deprecated or not. Optional: If not specified then the module is not deprecated." ); + addProtectedField( "CriticalMerge", TypeBool, Offset(mCriticalMerge, ModuleDefinition), &setDeprecated, &defaultProtectedGetFn, &writeCriticalMerge, "Whether the merging of a module prior to a restart is critical or not. Optional: If not specified then the module is not merge critical." ); + addProtectedField( "Description", TypeString, Offset(mModuleDescription, ModuleDefinition), &setModuleDescription, &defaultProtectedGetFn, &writeModuleDescription, "The description typically used for debugging purposes but can be used for anything." ); + addProtectedField( "Author", TypeString, Offset(mAuthor, ModuleDefinition), &setAuthor, &defaultProtectedGetFn, &writeAuthor, "The author of the module." ); + addProtectedField( "Group", TypeString, Offset(mModuleGroup, ModuleDefinition), &setModuleGroup, &defaultProtectedGetFn, "The module group used typically when loading modules as a group." ); + addProtectedField( "Type", TypeString, Offset(mModuleType, ModuleDefinition), &setModuleType, &defaultProtectedGetFn, &writeModuleType, "The module type typically used to distinguish modules during module enumeration. Optional: If not specified then the type is empty although this can still be used as a pseudo 'global' type for instance." ); + addProtectedField( "Dependencies", TypeString, Offset(mDependencies, ModuleDefinition), &setDependencies, &getDependencies, &writeDependencies, "A comma-separated list of module Ids/VersionIds (=,=,etc) which this module depends upon. Optional: If not specified then no dependencies are assumed." ); + addProtectedField( "ScriptFile", TypeString, Offset(mScriptFile, ModuleDefinition), &setScriptFile, &defaultProtectedGetFn, &writeScriptFile, "The name of the script file to compile when loading the module. Optional." ); + addProtectedField( "CreateFunction", TypeString, Offset(mCreateFunction, ModuleDefinition), &setCreateFunction, &defaultProtectedGetFn, &writeCreateFunction, "The name of the function used to create the module. Optional: If not specified then no create function is called." ); + addProtectedField( "DestroyFunction", TypeString, Offset(mDestroyFunction, ModuleDefinition), &setDestroyFunction, &defaultProtectedGetFn, &writeDestroyFunction, "The name of the function used to destroy the module. Optional: If not specified then no destroy function is called." ); + addProtectedField( "AssetTagsManifest", TypeString, Offset(mAssetTagsManifest, ModuleDefinition), &setAssetTagsManifest, &defaultProtectedGetFn, &writeAssetTagsManifest, "The name of tags asset manifest file if this module contains asset tags. Optional: If not specified then no asset tags will be found for this module. Currently, only a single asset tag manifest should exist." ); + addProtectedField( "ScopeSet", TypeS32, Offset( mScopeSet, ModuleDefinition ), &defaultProtectedNotSetFn, &getScopeSet, &defaultProtectedNotWriteFn, "The scope set used to control the lifetime scope of objects that the module uses. Objects added to this set are destroyed automatically when the module is unloaded." ); + + /// Module location (Read-only). + addProtectedField( "ModulePath", TypeString, Offset(mModulePath, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The path of the module. This is read-only and is available only after the module has been registered by a module manager." ); + addProtectedField( "ModuleFile", TypeString, Offset(mModuleFile, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The file of the module. This is read-only and is available only after the module has been registered by a module manager." ); + addProtectedField( "ModuleFilePath", TypeString, Offset(mModuleFilePath, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The file-path of the module definition. This is read-only and is available only after the module has been registered by a module manager." ); + addProtectedField( "ModuleScriptFilePath", TypeString, Offset(mModuleScriptFilePath, ModuleDefinition), &defaultProtectedNotSetFn, &defaultProtectedGetFn, &defaultProtectedNotWriteFn, "The file-path of the script-file referenced in the module definition. This is read-only and is available only after the module has been registered by a module manager." ); + + /// Misc. + addProtectedField( "Signature", TypeString, 0, &defaultProtectedNotSetFn, &getSignature, &defaultProtectedNotWriteFn, "A unique signature of the module definition based upon its Id, version and build. This is read-only and is available only after the module has been registered by a module manager." ); +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::getDependency( const U32 dependencyIndex, ModuleDependency& dependency ) const +{ + // Is dependency index out of bounds? + if ( dependencyIndex >= (U32)mDependencies.size() ) + { + // Yes, so warn. + Con::warnf("Could not get module dependency '%d' as it is out of range.", dependencyIndex); + return false; + } + + // Fetch module dependency. + dependency = mDependencies[dependencyIndex]; + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::addDependency( const char* pModuleId, const U32 versionId ) +{ + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Do we have any existing dependencies? + if ( mDependencies.size() > 0 ) + { + // Yes, so is the module Id already a dependency? + for( typeModuleDependencyVector::iterator dependencyItr = mDependencies.begin(); dependencyItr != mDependencies.end(); ++dependencyItr ) + { + // Skip if not the same module Id. + if ( dependencyItr->mModuleId != moduleId ) + continue; + + // Dependency already exists so warn. + Con::warnf("Could not add dependency of module Id '%s' at version Id '%d' as the module Id is already a dependency.", pModuleId, versionId ); + return false; + } + } + + // Populate module dependency. + ModuleDefinition::ModuleDependency dependency( moduleId, versionId ); + + // Store dependency. + mDependencies.push_back( dependency ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::removeDependency( const char* pModuleId ) +{ + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Do we have any existing dependencies? + if ( mDependencies.size() > 0 ) + { + // Yes, so is the module Id a dependency? + for( typeModuleDependencyVector::iterator dependencyItr = mDependencies.begin(); dependencyItr != mDependencies.end(); ++dependencyItr ) + { + // Skip if not the same module Id. + if ( dependencyItr->mModuleId != moduleId ) + continue; + + // Remove dependency. + mDependencies.erase( dependencyItr ); + + return true; + } + } + + // No, so warn. + Con::warnf("Could not remove dependency of module Id '%s' as the module Id is not a dependency.", pModuleId ); + return false; +} + +//----------------------------------------------------------------------------- + +bool ModuleDefinition::save( void ) +{ + // Does the module have a file-path yet? + if (mModuleFilePath == StringTable->EmptyString()) + { + // No, so warn. + Con::warnf("Save() - Cannot save module definition '%s' as it does not have a file-path.", mModuleId ); + return false; + } + + // Save the module file. + Taml taml; + return taml.write( this, mModuleFilePath ); +} diff --git a/Engine/source/module/moduleDefinition.h b/Engine/source/module/moduleDefinition.h new file mode 100644 index 0000000000..c1c76d7930 --- /dev/null +++ b/Engine/source/module/moduleDefinition.h @@ -0,0 +1,329 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_DEFINITION_H +#define _MODULE_DEFINITION_H + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _SIMSET_H_ +#include "console/simSet.h" +#endif + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tVector.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "core/strings/stringUnit.h" +#endif + +//----------------------------------------------------------------------------- + +class ModuleManager; + +//----------------------------------------------------------------------------- + +/// @ingroup moduleGroup +/// @see moduleGroup +class ModuleDefinition : public SimSet +{ + friend class ModuleManager; + +private: + typedef SimSet Parent; + +public: + /// Module dependency. + struct ModuleDependency + { + ModuleDependency() : + mModuleId( StringTable->EmptyString() ), + mVersionId( 0 ) + { + } + + ModuleDependency( StringTableEntry moduleId, const U32 versionId ) : + mModuleId( moduleId ), + mVersionId( versionId ) + { + } + + StringTableEntry mModuleId; + U32 mVersionId; + }; + typedef Vector typeModuleDependencyVector; + typedef Vector typeModuleAssetsVector; + +private: + /// Module definition. + StringTableEntry mModuleId; + U32 mVersionId; + U32 mBuildId; + bool mEnabled; + bool mSynchronized; + bool mDeprecated; + bool mCriticalMerge; + StringTableEntry mModuleDescription; + StringTableEntry mAuthor;; + StringTableEntry mModuleGroup; + StringTableEntry mModuleType; + typeModuleDependencyVector mDependencies; + StringTableEntry mScriptFile; + StringTableEntry mCreateFunction; + StringTableEntry mDestroyFunction; + + /// Modules assets. + StringTableEntry mAssetTagsManifest; + typeModuleAssetsVector mModuleAssets; + + /// Module location. + StringTableEntry mModulePath; + StringTableEntry mModuleFile; + StringTableEntry mModuleFilePath; + StringTableEntry mModuleScriptFilePath; + + /// Miscellaneous. + StringTableEntry mSignature; + S32 mLoadCount; + SimObjectId mScopeSet; + bool mLocked; + ModuleManager* mpModuleManager; + +private: + inline bool checkUnlocked( void ) const { if ( mLocked ) { Con::warnf("Ignoring changes for locked module definition."); } return !mLocked; } + inline void setModuleManager( ModuleManager* pModuleManager ) { mpModuleManager = pModuleManager; } + +public: + ModuleDefinition(); + virtual ~ModuleDefinition() {} + + /// Engine. + static void initPersistFields(); + + /// Module definition. + inline void setModuleId( const char* pModuleId ) { if ( checkUnlocked() ) { mModuleId = StringTable->insert(pModuleId); } } + inline StringTableEntry getModuleId( void ) const { return mModuleId; } + inline void setVersionId( const U32 versionId ) { if ( checkUnlocked() ) { mVersionId = versionId; } } + inline U32 getVersionId( void ) const { return mVersionId; } + inline void setBuildId( const U32 buildId ) { if ( checkUnlocked() ) { mBuildId = buildId; } } + inline U32 getBuildId( void ) const { return mBuildId; } + inline void setEnabled( const bool enabled ) { if ( checkUnlocked() ) { mEnabled = enabled; } } + inline bool getEnabled( void ) const { return mEnabled; } + inline void setSynchronized( const bool synchronized ) { if ( checkUnlocked() ) { mSynchronized = synchronized; } } + inline bool getSynchronized( void ) const { return mSynchronized; } + inline void setDeprecated( const bool deprecated ) { if ( checkUnlocked() ) { mDeprecated = deprecated; } } + inline bool getDeprecated( void ) const { return mDeprecated; } + inline void setCriticalMerge( const bool mergeCritical ) { if ( checkUnlocked() ) { mCriticalMerge = mergeCritical; } } + inline bool getCriticalMerge( void ) const { return mCriticalMerge; } + inline void setModuleDescription( const char* pModuleDescription ) { if ( checkUnlocked() ) { mModuleDescription = StringTable->insert(pModuleDescription); } } + inline StringTableEntry getModuleDescription( void ) const { return mModuleDescription; } + inline void setAuthor( const char* pAuthor ) { if ( checkUnlocked() ) { mAuthor = StringTable->insert(pAuthor); } } + inline StringTableEntry getAuthor( void ) const { return mAuthor; } + inline void setModuleGroup( const char* pModuleGroup ) { if ( checkUnlocked() ) { mModuleGroup = StringTable->insert(pModuleGroup); } } + inline StringTableEntry getModuleGroup( void ) const { return mModuleGroup; } + inline void setModuleType( const char* pModuleType ) { if ( checkUnlocked() ) { mModuleType = StringTable->insert(pModuleType); } } + inline StringTableEntry getModuleType( void ) const { return mModuleType; } + inline void setDependencies( const typeModuleDependencyVector& dependencies ) { if ( checkUnlocked() ) { mDependencies.clear(); mDependencies.merge(dependencies); } } + inline const typeModuleDependencyVector& getDependencies( void ) const { return mDependencies; } + inline void setScriptFile( const char* pScriptFile ) { if ( checkUnlocked() ) { mScriptFile = StringTable->insert(pScriptFile); } } + inline StringTableEntry getScriptFile( void ) const { return mScriptFile; } + inline void setCreateFunction( const char* pCreateFunction ) { if ( checkUnlocked() ) { mCreateFunction = StringTable->insert(pCreateFunction); } } + inline StringTableEntry getCreateFunction( void ) const { return mCreateFunction; } + inline void setDestroyFunction( const char* pDestroyFunction ) { if ( checkUnlocked() ) { mDestroyFunction = StringTable->insert(pDestroyFunction); } } + inline StringTableEntry getDestroyFunction( void ) const { return mDestroyFunction; } + inline SimObjectId getScopeSet( void ) const { return mScopeSet; } + + /// Module assets. + inline void setAssetTagsManifest( const char* pTagsAssetManifest ) { if ( checkUnlocked() ) { mAssetTagsManifest = StringTable->insert(pTagsAssetManifest); } } + inline StringTableEntry getAssetTagsManifest( void ) const { return mAssetTagsManifest; } + inline typeModuleAssetsVector& getModuleAssets( void ) { return mModuleAssets; } + + /// Module location. + inline void setModulePath( const char* pModulePath ) { if ( checkUnlocked() ) { mModulePath = StringTable->insert(pModulePath); } } + inline StringTableEntry getModulePath( void ) const { return mModulePath; } + inline void setModuleFile( const char* pModuleDefinitionFile ) { if ( checkUnlocked() ) { mModuleFile = StringTable->insert(pModuleDefinitionFile); } } + inline StringTableEntry getModuleFile( void ) const { return mModuleFile; } + inline void setModuleFilePath( const char* pModuleDefinitionFilePath ) { if ( checkUnlocked() ) { mModuleFilePath = StringTable->insert(pModuleDefinitionFilePath); } } + inline StringTableEntry getModuleFilePath( void ) const { return mModuleFilePath; } + inline void setModuleScriptFilePath( const char* pModuleScriptFilePath ) { if ( checkUnlocked() ) { mModuleScriptFilePath = StringTable->insert(pModuleScriptFilePath); } } + inline StringTableEntry getModuleScriptFilePath( void ) const { return mModuleScriptFilePath; } + + /// Specialized dependency control. + inline U32 getDependencyCount( void ) const { return mDependencies.size(); } + bool getDependency( const U32 dependencyIndex, ModuleDependency& dependency ) const; + bool addDependency( const char* pModuleId, const U32 versionId ); + bool removeDependency( const char* pModuleId ); + + /// Miscellaneous. + inline void setSignature( const char* pSignature ) { if ( checkUnlocked() ) { mSignature = StringTable->insert(pSignature); } } + inline StringTableEntry getSignature( void ) const { return mSignature; } + inline void increaseLoadCount( void ) { ++mLoadCount; } + inline void reduceLoadCount( void ) { --mLoadCount; } + inline S32 getLoadCount( void ) const { return mLoadCount; } + inline void setLocked( const bool status ) { mLocked = status; } + inline bool getLocked( void ) const { return mLocked; } + inline ModuleManager* getModuleManager( void ) const { return mpModuleManager; } + bool save( void ); + + /// Declare Console Object. + DECLARE_CONOBJECT( ModuleDefinition ); + +protected: + static bool setModuleId(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleId( data ); return false; } + static bool setVersionId(void* obj, const char* index, const char* data) { static_cast(obj)->setVersionId((U32)dAtoi(data)); return false; } + static bool setBuildId(void* obj, const char* index, const char* data) { static_cast(obj)->setBuildId((U32)dAtoi(data)); return false; } + static bool writeBuildId( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getBuildId() != 0; } + static bool setEnabled(void* obj, const char* index, const char* data) { static_cast(obj)->setEnabled(dAtob(data)); return false; } + static bool writeEnabled( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getEnabled() == false; } + static bool setSynchronized(void* obj, const char* index, const char* data) { static_cast(obj)->setSynchronized(dAtob(data)); return false; } + static bool writeSynchronized( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getSynchronized() == true; } + static bool setDeprecated(void* obj, const char* index, const char* data) { static_cast(obj)->setDeprecated(dAtob(data)); return false; } + static bool writeDeprecated( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getDeprecated() == true; } + static bool writeCriticalMerge( void* obj, StringTableEntry pFieldName ){ return static_cast(obj)->getCriticalMerge() == true; } + static bool setModuleDescription(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleDescription(data); return false; } + static bool writeModuleDescription( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getModuleDescription() != StringTable->EmptyString(); } + static bool setAuthor(void* obj, const char* index, const char* data) { static_cast(obj)->setAuthor(data); return false; } + static bool writeAuthor(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAuthor() != StringTable->EmptyString(); } + static bool setModuleGroup(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleGroup(data); return false; } + static bool setModuleType(void* obj, const char* index, const char* data) { static_cast(obj)->setModuleType(data); return false; } + static bool writeModuleType(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getModuleType() != StringTable->EmptyString(); } + static bool setScriptFile(void* obj, const char* index, const char* data) { static_cast(obj)->setScriptFile(data); return false; } + static bool writeScriptFile(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getScriptFile() != StringTable->EmptyString(); } + static bool setCreateFunction(void* obj, const char* index, const char* data) { static_cast(obj)->setCreateFunction(data); return false; } + static bool writeCreateFunction(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getCreateFunction() != StringTable->EmptyString(); } + static bool setDestroyFunction(void* obj, const char* index, const char* data) { static_cast(obj)->setDestroyFunction(data); return false; } + static bool writeDestroyFunction(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getDestroyFunction() != StringTable->EmptyString(); } + + /// Asset manifest. + static bool setAssetTagsManifest(void* obj, const char* index, const char* data) { static_cast(obj)->setAssetTagsManifest(data); return false; } + static bool writeAssetTagsManifest(void* obj, StringTableEntry pFieldName) { return static_cast(obj)->getAssetTagsManifest() != StringTable->EmptyString(); } + static const char* getScopeSet(void* obj, const char* data) { return Con::getIntArg(static_cast(obj)->getScopeSet()); } + + static bool setDependencies(void* obj, const char* index, const char* data) + { + // Fetch module dependencies. + ModuleDefinition::typeModuleDependencyVector moduleDependencies; + + // Fetch dependency value. + const char* pDependencyValue = data; + + char slotUnit[256]; + char slotName[256]; + char slotValue[256]; + + // Fetch definition word count. + const U32 dependencyWordCount = StringUnit::getUnitCount( pDependencyValue, "," ); + + // Do we have any dependencies specified? + if ( dependencyWordCount > 0 ) + { + // Yes, so iterate dependencies. + for ( U32 dependencyIndex = 0; dependencyIndex < dependencyWordCount; ++dependencyIndex ) + { + // Fetch slot. + dStrcpy( slotUnit, StringUnit::getUnit( pDependencyValue, dependencyIndex, "," ) ); + + // Fetch slot name and value. + dStrcpy( slotName, StringUnit::getUnit( slotUnit, 0, "=" ) ); + dStrcpy( slotValue, StringUnit::getUnit( slotUnit, 1, "=" ) ); + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( slotName ); + + // Fetch version Id. + const U32 versionId = slotValue[0] == '*' ? 0 : dAtoi(slotValue); + + // Populate module dependency. + ModuleDefinition::ModuleDependency dependency( moduleId, versionId ); + + // Store dependency. + moduleDependencies.push_back( dependency ); + } + } + + // Set dependencies. + static_cast(obj)->setDependencies( moduleDependencies ); + + return false; + } + static const char* getDependencies(void* obj, const char* data) + { + // Fetch module dependencies. + const ModuleDefinition::typeModuleDependencyVector& moduleDependencies = static_cast(obj)->getDependencies(); + + // Finish if no dependencies. + if ( moduleDependencies.size() == 0 ) + return StringTable->EmptyString(); + + // Get a return buffer. + const S32 bufferSize = 1024; + char* pReturnBuffer = Con::getReturnBuffer(bufferSize); + pReturnBuffer[0] = '\0'; + + // Set buffer limits. + char* pValueBuffer = pReturnBuffer; + S32 bufferLeft = bufferSize; + U32 used; + + // Iterate module dependencies. + for ( ModuleDefinition::typeModuleDependencyVector::const_iterator dependencyItr = moduleDependencies.begin(); dependencyItr < moduleDependencies.end(); ++dependencyItr ) + { + // Fetch module dependency. + const ModuleDefinition::ModuleDependency* pDependency = dependencyItr; + + // Fetch version Id. + const char* pVersionId = pDependency->mVersionId == 0 ? "*" : avar("%d", pDependency->mVersionId ); + + if ( dependencyItr == moduleDependencies.begin() ) + { + // Write out a field/value pair + used = dSprintf( pValueBuffer, bufferLeft, "%s=%s", pDependency->mModuleId, pVersionId ); + pValueBuffer += used; + bufferLeft -= used; + } + else + { + // Write out a field/value pair + used = dSprintf( pValueBuffer, bufferLeft, ",%s=%s", pDependency->mModuleId, pVersionId ); + pValueBuffer += used; + bufferLeft -= used; + } + + // Sanity. + AssertFatal( bufferLeft > 0, "Cannot format module dependencies as we ran out of buffer." ); + } + + return pReturnBuffer; + } + static bool writeDependencies( void* obj, StringTableEntry pFieldName ) { return static_cast(obj)->getDependencies().size() > 0; } + static const char* getSignature(void* obj, const char* data) { return static_cast(obj)->getSignature(); } +}; + +#endif // _MODULE_DEFINITION_H + diff --git a/Engine/source/module/moduleDefinition_ScriptBinding.h b/Engine/source/module/moduleDefinition_ScriptBinding.h new file mode 100644 index 0000000000..fb6c57e297 --- /dev/null +++ b/Engine/source/module/moduleDefinition_ScriptBinding.h @@ -0,0 +1,96 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "console/engineAPI.h" +#include "moduleDefinition.h" +#include "moduleManager.h" + +DefineEngineMethod(ModuleDefinition, save, bool, (),, + "Saves the module definition to the file it was loaded from (if any).\n" + "@return (bool success) Whether the module definition was saved or not.\n") +{ + // Save. + return object->save(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, getModuleManager, S32, (),, + "Gets the module manager which this module definition is registered with (if any).\n" + "@return (moduleManager) The module manager which this module definition is registered with (zero if not registered).\n") +{ + // Fetch module manager. + ModuleManager* pModuleManager = object->getModuleManager(); + + return pModuleManager != NULL ? pModuleManager->getId() : 0; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, getDependencyCount, S32, (), , + "Gets the number of module dependencies this module definition has.\n" + "@return (int count) The number of module dependencies this module definition has.\n") +{ + // Get module dependency count. + return object->getDependencyCount(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, getDependency, String, (U32 dependencyIndex), (0), + "Gets the module dependency at the specified index.\n" + "@param dependencyIndex The module dependency index.\n" + "@return (module - dependency) The module dependency at the specified index.") +{ + // Get module dependency. + ModuleDefinition::ModuleDependency dependency; + if ( object->getDependency( dependencyIndex, dependency ) == false ) + return StringTable->EmptyString(); + + // Format module dependency. + char* pReturnBuffer = Con::getReturnBuffer( 256 ); + dSprintf( pReturnBuffer, 256, "%s %d", dependency.mModuleId, dependency.mVersionId ); + + return pReturnBuffer; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, addDependency, bool, (const char* pModuleId, U32 versionId), ("", 0), + "Adds the specified moduleId and vesionId as a dependency.\n" + "@param moduleId The module Id to add as a dependency.\n" + "@param versionId The version Id to add as a dependency. Using zero indicates any version." + "@return (bool success) Whether the module dependency was added or not.") +{ + // Add dependency. + return object->addDependency( pModuleId, versionId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleDefinition, removeDependency, bool, (const char* pModuleId), (""), + "Removes the specified moduleId as a dependency.\n" + "@param moduleId The module Id to remove as a dependency.\n" + "@return (bool success) Whether the module dependency was removed or not.") +{ + // Remove dependency. + return object->removeDependency( pModuleId ); +} diff --git a/Engine/source/module/moduleManager.cpp b/Engine/source/module/moduleManager.cpp new file mode 100644 index 0000000000..49cfeac9e2 --- /dev/null +++ b/Engine/source/module/moduleManager.cpp @@ -0,0 +1,2513 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "moduleManager.h" + +#ifndef _MODULE_MERGE_DEFINITION_H +#include "moduleMergeDefinition.h" +#endif + +#ifndef _TAML_MODULE_ID_UPDATE_VISITOR_H_ +#include "tamlModuleIdUpdateVisitor.h" +#endif + +#ifndef _MODULE_CALLBACKS_H_ +#include "moduleCallbacks.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +// Script bindings. +#include "moduleManager_ScriptBinding.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ModuleManager ); + +//----------------------------------------------------------------------------- + +ModuleManager ModuleDatabase; + +//----------------------------------------------------------------------------- + +S32 QSORT_CALLBACK moduleDefinitionVersionIdSort( const void* a, const void* b ) +{ + // Fetch module definitions. + ModuleDefinition* pDefinition1 = *(ModuleDefinition**)a; + ModuleDefinition* pDefinition2 = *(ModuleDefinition**)b; + + // Fetch version Ids. + const U32 versionId1 = pDefinition1->getVersionId(); + const U32 versionId2 = pDefinition2->getVersionId(); + + // We sort higher version Id first. + return versionId1 > versionId2 ? -1 : versionId1 < versionId2 ? 1 : 0; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleManager() : + mEnforceDependencies(true), + mEchoInfo(true), + mDatabaseLocks( 0 ) +{ + // Set module extension. + dStrcpy( mModuleExtension, MODULE_MANAGER_MODULE_DEFINITION_EXTENSION ); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::onAdd() +{ + if( !Parent::onAdd() ) + return false; + + // Register listeners. + mNotificationListeners.registerObject(); + + return true; +} + +//----------------------------------------------------------------------------- + +void ModuleManager::onRemove() +{ + // Clear database. + clearDatabase(); + + // Unregister object. + mNotificationListeners.unregisterObject(); + + // Call parent. + Parent::onRemove(); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField( "EnforceDependencies", TypeBool, Offset(mEnforceDependencies, ModuleManager), "Whether the module manager enforces any dependencies on module definitions it discovers or not." ); + addField( "EchoInfo", TypeBool, Offset(mEchoInfo, ModuleManager), "Whether the module manager echos extra information to the console or not." ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::onDeleteNotify( SimObject *object ) +{ + // Cast to a module definition. + ModuleDefinition* pModuleDefinition = dynamic_cast( object ); + + // Ignore if not appropriate. + if ( pModuleDefinition == NULL ) + return; + + // Warn. + Con::warnf( "Module Manager::onDeleteNotify() - Notified of a module definition deletion for module Id '%s' of version Id '%d' however this should not happen and can cause module database corruption.", + pModuleDefinition->getModuleId(), pModuleDefinition->getVersionId() ); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::setModuleExtension( const char* pExtension ) +{ + // Sanity! + AssertFatal( pExtension != NULL, "Cannot set module extension with NULL extension." ); + + // Did we find an extension period? + if ( *pExtension == '.' ) + { + // Yes, so warn. + Con::warnf("Module Manager: Failed to set extension as supplied extension contains an initial period: '%s'.", pExtension ); + return false; + } + + // Is the extension too large? + if ( dStrlen( pExtension ) > sizeof( mModuleExtension ) ) + { + // Yes, so warn. + Con::warnf("Module Manager: Failed to set extension as supplied extension is too large: '%s'.", pExtension ); + return false; + } + + // Set module extension. + dStrcpy( mModuleExtension, pExtension ); + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::scanModules( const char* pPath, const bool rootOnly ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pPath != NULL, "Cannot scan module with NULL path." ); + + // Expand module location. + char pathBuffer[1024]; + Con::expandPath( pathBuffer, sizeof(pathBuffer), pPath ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Started scanning '%s'...", pathBuffer ); + } + + Vector directories; + + // Find directories. + if ( !Platform::dumpDirectories( pathBuffer, directories, rootOnly ? 1 : -1 ) ) + { + // Failed so warn. + Con::warnf( "Module Manager: Failed to scan module directories in path '%s'.", pathBuffer ); + return false; + } + + // Fetch extension length. + const U32 extensionLength = dStrlen( mModuleExtension ); + + Vector files; + + // Iterate directories. + for( Vector::iterator basePathItr = directories.begin(); basePathItr != directories.end(); ++basePathItr ) + { + // Fetch base path. + StringTableEntry basePath = *basePathItr; + + // Skip if we're only processing the root and this is not the root. + if ( rootOnly && basePathItr != directories.begin() ) + continue; + + // Find files. + files.clear(); + if ( !Platform::dumpPath( basePath, files, 0 ) ) + { + // Failed so warn. + Con::warnf( "Module Manager: Failed to scan modules files in directory '%s'.", basePath ); + return false; + } + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo* pFileInfo = fileItr; + + // Fetch filename. + const char* pFilename = pFileInfo->pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength > filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, mModuleExtension ) != 0 ) + continue; + + // Register module. + registerModule( basePath, pFileInfo->pFileName ); + } + + // Stop processing if we're only processing the root. + if ( rootOnly ) + break; + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Finished scanning '%s'.", pathBuffer ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::loadModuleGroup( const char* pModuleGroup ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleGroup != NULL, "Cannot load module group with NULL group name." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module group. + StringTableEntry moduleGroup = StringTable->insert( pModuleGroup ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading group '%s':" ,moduleGroup ); + } + + // Is the module group already loaded? + if ( findGroupLoaded( moduleGroup ) != NULL ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot load group '%s' as it is already loaded.", moduleGroup ); + return false; + } + + // Find module group. + typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.find( moduleGroup ); + + // Did we find the module group? + if ( moduleGroupItr == mGroupModules.end() ) + { + // No, so info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: No modules found for module group '%s'.", moduleGroup ); + } + + return true; + } + + // Yes, so fetch the module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Iterate module groups. + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Fetch module Id. + StringTableEntry moduleId = *moduleIdItr; + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, 0, moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + } + + // Check the modules we want to load to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition;; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot load module group '%s' as the module Id '%s' at version Id '%d' is required but the module Id is already loaded but at version Id '%d'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Info. + if ( mEchoInfo ) + { + // Info. + Con::printf( "Module Manager: Group '%s' and its dependencies is comprised of the following '%d' module(s):", moduleGroup, moduleReadyQueue.size() ); + + // Iterate the modules echoing them. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleDefinition* pModuleDefinition = moduleReadyItr->mpModuleDefinition; + + // Info. + Con::printf( "> module Id '%s' at version Id '%d':", pModuleDefinition->getModuleId(), pModuleDefinition->getVersionId() ); + } + } + + // Add module group. + mGroupsLoaded.push_back( moduleGroup ); + + // Reset modules loaded count. + U32 modulesLoadedCount = 0; + + // Iterate the modules, executing their script files and call their create function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module already loaded. + if ( pLoadedEntry != NULL ) + { + // Yes, so increase load count. + pLoadedEntry->mpModuleDefinition->increaseLoadCount(); + + // Skip. + continue; + } + + // No, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading group '%s' : module Id '%s' at version Id '%d' in group '%s' using the script file '%s'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleGroup(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + + // Is the module deprecated? + if ( pLoadReadyModuleDefinition->getDeprecated() ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Caution: module Id '%s' at version Id '%d' in group '%s' is deprecated. You should use a newer version!", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleGroup() ); + } + + // Add the path expando for module. + Con::addPathExpando( pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getModulePath() ); + + // Create a scope set. + SimSet* pScopeSet = new SimSet; + pScopeSet->registerObject( pLoadReadyModuleDefinition->getModuleId() ); + pReadyEntry->mpModuleDefinition->mScopeSet = pScopeSet->getId(); + + // Increase load count. + pReadyEntry->mpModuleDefinition->increaseLoadCount(); + + // Queue module loaded. + mModulesLoaded.push_back( *pReadyEntry ); + + // Bump modules loaded count. + modulesLoadedCount++; + + // Raise notifications. + raiseModulePreLoadNotifications( pLoadReadyModuleDefinition ); + + // Do we have a script file-path specified? + if ( pLoadReadyModuleDefinition->getModuleScriptFilePath() != StringTable->EmptyString() ) + { + // Yes, so execute the script file. + const bool scriptFileExecuted = dAtob( Con::executef("exec", pLoadReadyModuleDefinition->getModuleScriptFilePath() ) ); + + // Did we execute the script file? + if ( scriptFileExecuted ) + { + // Yes, so is the create method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getCreateFunction() ) ) + { + // Yes, so call the create method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getCreateFunction() ); + } + } + else + { + // No, so warn. + Con::errorf( "Module Manager: Cannot load module group '%s' as the module Id '%s' at version Id '%d' as it failed to have the script file '%s' loaded.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + } + + // Raise notifications. + raiseModulePostLoadNotifications( pLoadReadyModuleDefinition ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish loading '%d' module(s) for group '%s'.", modulesLoadedCount, moduleGroup ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::unloadModuleGroup( const char* pModuleGroup ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleGroup != NULL, "Cannot unload module group with NULL group name." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module group. + StringTableEntry moduleGroup = StringTable->insert( pModuleGroup ); + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unloading group '%s':" , moduleGroup ); + } + + // Find the group loaded iterator. + typeGroupVector::iterator groupLoadedItr = findGroupLoaded( moduleGroup ); + + // Is the module group already unloaded? + if ( groupLoadedItr == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unload group '%s' as it is not loaded.", moduleGroup ); + return false; + } + + // Find module group. + typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.find( moduleGroup ); + + // Did we find the module group? + if ( moduleGroupItr == mGroupModules.end() ) + { + // No, so info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: No modules found for module group '%s'.", moduleGroup ); + return true; + } + } + + // Yes, so fetch the module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Iterate module groups. + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Fetch module Id. + StringTableEntry moduleId = *moduleIdItr; + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, 0, moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + } + + // Check the modules we want to load to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition;; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot unload module group '%s' as the module Id '%s' at version Id '%d' is required but the module Id is loaded but at version Id '%d'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Remove module group. + mGroupsLoaded.erase_fast( groupLoadedItr ); + + // Reset modules unloaded count. + U32 modulesUnloadedCount = 0; + + // Iterate the modules in reverse order calling their destroy function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.end()-1; moduleReadyItr >= moduleReadyQueue.begin(); --moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition;; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module loaded. + if ( pLoadedEntry == NULL ) + { + // No, so warn. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Unloading group '%s' but could not unload module Id '%s' at version Id '%d'.", + moduleGroup, pLoadedEntry->mpModuleDefinition->getModuleId(), pLoadedEntry->mpModuleDefinition->getVersionId() ); + } + // Skip. + continue; + } + + // Reduce load count. + pLoadedEntry->mpModuleDefinition->reduceLoadCount(); + + // Sanity! + AssertFatal( pLoadedEntry->mpModuleDefinition->getLoadCount() >= 0, "ModuleManager::unloadModuleGroup() - Encountered an invalid load count." ); + + // Do we need to unload? + if ( pLoadedEntry->mpModuleDefinition->getLoadCount() == 0 ) + { + // Yes, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unload group '%s' with module Id '%s' at version Id '%d' in group '%s'.", + moduleGroup, pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleGroup() ); + } + + // Raise notifications. + raiseModulePreUnloadNotifications( pLoadReadyModuleDefinition ); + + // Fetch the module Id loaded entry. + typeModuleLoadEntryVector::iterator moduleLoadedItr = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Sanity! + AssertFatal( moduleLoadedItr != NULL, "ModuleManager::unloadModuleGroup() - Cannot find module to unload it." ); + + // Dequeue module loaded. + mModulesLoaded.erase_fast( moduleLoadedItr ); + + // Fetch scope set. + SimSet* pScopeSet = dynamic_cast(Sim::findObject(pLoadReadyModuleDefinition->mScopeSet)); + + // Is the destroy method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getDestroyFunction() ) ) + { + // Yes, so call the destroy method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getDestroyFunction() ); + } + + // Remove scope set. + pScopeSet->deleteAllObjects(); + pScopeSet->unregisterObject(); + pLoadReadyModuleDefinition->mScopeSet = 0; + + // Remove path expando for module. + Con::removePathExpando( pLoadReadyModuleDefinition->getModuleId() ); + + // Bump modules unloaded count. + modulesUnloadedCount++; + + // Raise notifications. + raiseModulePostUnloadNotifications( pLoadReadyModuleDefinition ); + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish unloading '%d' module(s) for group '%s'.", modulesUnloadedCount, moduleGroup ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::loadModuleExplicit( const char* pModuleId, const U32 versionId ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot load explicit module Id with NULL module Id." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Did we find the module Id? + if ( pDefinitions == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot load explicit module Id '%s' as it does not exist.", moduleId ); + return false; + } + + // Fetch module group. + StringTableEntry moduleGroup = pDefinitions->mModuleGroup; + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading explicit module Id '%s' at version Id '%d':", moduleId, versionId ); + } + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, versionId, moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + + // Check the modules we want to load to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot load explicit module Id '%s' at version Id '%d' as the module Id is already loaded but at version Id '%d'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Info. + if ( mEchoInfo ) + { + // Info. + Con::printf( "Module Manager: Explicit load of module Id '%s' at version Id '%d' and its dependencies is comprised of the following '%d' module(s):", moduleId, versionId, moduleReadyQueue.size() ); + + // Iterate the modules echoing them. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleDefinition* pModuleDefinition = moduleReadyItr->mpModuleDefinition; + + // Info. + Con::printf( "> module Id '%s' at version Id '%d'", pModuleDefinition->getModuleId(), pModuleDefinition->getVersionId() ); + } + } + + // Reset modules loaded count. + U32 modulesLoadedCount = 0; + + // Iterate the modules, executing their script files and call their create function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module already loaded. + if ( pLoadedEntry != NULL ) + { + // Yes, so increase load count. + pLoadedEntry->mpModuleDefinition->increaseLoadCount(); + + // Skip. + continue; + } + + // No, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Loading explicit module Id '%s' at version Id '%d' using the script file '%s'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + + // Is the module deprecated? + if ( pLoadReadyModuleDefinition->getDeprecated() ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Caution: module Id '%s' at version Id '%d' is deprecated, You should use a newer version!", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId() ); + } + + // Add the path expando for module. + Con::addPathExpando( pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getModulePath() ); + + // Create a scope set. + SimSet* pScopeSet = new SimSet; + pScopeSet->registerObject( pLoadReadyModuleDefinition->getModuleId() ); + pReadyEntry->mpModuleDefinition->mScopeSet = pScopeSet->getId(); + + // Increase load count. + pReadyEntry->mpModuleDefinition->increaseLoadCount(); + + // Queue module loaded. + mModulesLoaded.push_back( *pReadyEntry ); + + // Bump modules loaded count. + modulesLoadedCount++; + + // Raise notifications. + raiseModulePreLoadNotifications( pLoadReadyModuleDefinition ); + + // Do we have a script file-path specified? + if ( pLoadReadyModuleDefinition->getModuleScriptFilePath() != StringTable->EmptyString() ) + { + // Yes, so execute the script file. + const bool scriptFileExecuted = dAtob( Con::executef("exec", pLoadReadyModuleDefinition->getModuleScriptFilePath() ) ); + + // Did we execute the script file? + if ( scriptFileExecuted ) + { + // Yes, so is the create method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getCreateFunction() ) ) + { + // Yes, so call the create method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getCreateFunction() ); + } + } + else + { + // No, so warn. + Con::errorf( "Module Manager: Cannot load explicit module Id '%s' at version Id '%d' as it failed to have the script file '%s' loaded.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadReadyModuleDefinition->getModuleScriptFilePath() ); + } + } + + // Raise notifications. + raiseModulePostLoadNotifications( pLoadReadyModuleDefinition ); + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish loading '%d' explicit module(s).", modulesLoadedCount ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::unloadModuleExplicit( const char* pModuleId ) +{ + // Lock database. + LockDatabase( this ); + + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot unload explicit module Id with NULL module Id." ); + + typeModuleLoadEntryVector moduleResolvingQueue; + typeModuleLoadEntryVector moduleReadyQueue; + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Did we find the module Id? + if ( pDefinitions == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unload explicit module Id '%s' as it does not exist.", moduleId ); + return false; + } + + // Find if the module is actually loaded. + ModuleDefinition* pLoadedModule = findLoadedModule( moduleId ); + + // Is the module loaded? + if ( pLoadedModule == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unload explicit module Id '%s' as it is not loaded.", moduleId ); + return false; + } + + // Fetch module group. + StringTableEntry moduleGroup = pDefinitions->mModuleGroup; + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unloading explicit module Id '%s':" , moduleId ); + } + + // Finish if we could not resolve the dependencies for module Id (of any version Id). + if ( !resolveModuleDependencies( moduleId, pLoadedModule->getVersionId(), moduleGroup, false, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + + // Check the modules we want to unload to ensure that we do not have incompatible modules loaded already. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.begin(); moduleReadyItr != moduleReadyQueue.end(); ++moduleReadyItr ) + { + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = moduleReadyItr->mpModuleDefinition;; + + // Fetch the module Id loaded entry. + ModuleLoadEntry* pLoadedModuleEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Did we find a loaded entry? + if ( pLoadedModuleEntry != NULL ) + { + // Yes, so is it the one we need to load? + if ( pLoadedModuleEntry->mpModuleDefinition != pLoadReadyModuleDefinition ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Cannot unload explicit module Id '%s' at version Id '%d' as the module Id is loaded but at version Id '%d'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId(), pLoadedModuleEntry->mpModuleDefinition->getVersionId() ); + return false; + } + } + } + + // Reset modules unloaded count. + U32 modulesUnloadedCount = 0; + + // Iterate the modules in reverse order calling their destroy function. + for ( typeModuleLoadEntryVector::iterator moduleReadyItr = moduleReadyQueue.end()-1; moduleReadyItr >= moduleReadyQueue.begin(); --moduleReadyItr ) + { + // Fetch the ready entry. + ModuleLoadEntry* pReadyEntry = moduleReadyItr; + + // Fetch load ready module definition. + ModuleDefinition* pLoadReadyModuleDefinition = pReadyEntry->mpModuleDefinition;; + + // Fetch any loaded entry for the module Id. + ModuleLoadEntry* pLoadedEntry = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Is the module loaded. + if ( pLoadedEntry == NULL ) + { + // No, so warn. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Unloading explicit module Id '%s' at version Id '%d' but ignoring as it is not loaded.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId() ); + } + + // Skip. + continue; + } + + // Reduce load count. + pLoadedEntry->mpModuleDefinition->reduceLoadCount(); + + // Sanity! + AssertFatal( pLoadedEntry->mpModuleDefinition->getLoadCount() >= 0, "ModuleManager::unloadModuleGroup() - Encountered an invalid load count." ); + + // Do we need to unload? + if ( pLoadedEntry->mpModuleDefinition->getLoadCount() == 0 ) + { + // Yes, so info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Unload explicit module Id '%s' at version Id '%d'.", + pLoadReadyModuleDefinition->getModuleId(), pLoadReadyModuleDefinition->getVersionId() ); + } + + // Raise notifications. + raiseModulePreUnloadNotifications( pLoadReadyModuleDefinition ); + + // Fetch the module Id loaded entry. + typeModuleLoadEntryVector::iterator moduleLoadedItr = findModuleLoaded( pLoadReadyModuleDefinition->getModuleId() ); + + // Sanity! + AssertFatal( moduleLoadedItr != NULL, "ModuleManager::unloadModuleExplicit() - Cannot find module to unload it." ); + + // Dequeue module loaded. + mModulesLoaded.erase_fast( moduleLoadedItr ); + + // Fetch scope set. + SimSet* pScopeSet = dynamic_cast(Sim::findObject(pLoadReadyModuleDefinition->mScopeSet)); + + // Is the destroy method available? + if ( pScopeSet->isMethod( pLoadReadyModuleDefinition->getDestroyFunction() ) ) + { + // Yes, so call the destroy method. + Con::executef( pScopeSet, pLoadReadyModuleDefinition->getDestroyFunction() ); + } + + // Remove scope set. + pScopeSet->deleteAllObjects(); + pScopeSet->unregisterObject(); + pLoadReadyModuleDefinition->mScopeSet = 0; + + // Remove path expando for module. + Con::removePathExpando( pLoadReadyModuleDefinition->getModuleId() ); + + // Bump modules unloaded count. + modulesUnloadedCount++; + + // Raise notifications. + raiseModulePostUnloadNotifications( pLoadReadyModuleDefinition ); + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printSeparator(); + Con::printf( "Module Manager: Finish unloading '%d' explicit module(s).", modulesUnloadedCount ); + Con::printSeparator(); + } + + return true; +} + +//----------------------------------------------------------------------------- + +ModuleDefinition* ModuleManager::findModule( const char* pModuleId, const U32 versionId ) +{ + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot find module with NULL module Id." ); + + // Find module definition. + ModuleDefinitionEntry::iterator moduleItr = findModuleDefinition( StringTable->insert( pModuleId ), versionId ); + + // Finish if module was not found. + if ( moduleItr == NULL ) + return NULL; + + return *moduleItr; +} + +//----------------------------------------------------------------------------- + +ModuleDefinition* ModuleManager::findLoadedModule( const char* pModuleId ) +{ + // Sanity! + AssertFatal( pModuleId != NULL, "Cannot find module with NULL module Id." ); + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Iterate loaded modules. + for ( typeModuleLoadEntryVector::iterator loadedModuleItr = mModulesLoaded.begin(); loadedModuleItr != mModulesLoaded.end(); ++loadedModuleItr ) + { + // Skip if not the module. + if ( loadedModuleItr->mpModuleDefinition->getModuleId() != moduleId ) + continue; + + return loadedModuleItr->mpModuleDefinition; + } + + return NULL; +} + +//----------------------------------------------------------------------------- + +void ModuleManager::findModules( const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ) +{ + // Iterate module Ids. + for( typeModuleIdDatabaseHash::iterator moduleIdItr = mModuleIdDatabase.begin(); moduleIdItr != mModuleIdDatabase.end(); ++moduleIdItr ) + { + // Fetch module definition entry. + ModuleDefinitionEntry* pModuleDefinitionEntry = moduleIdItr->value; + + // Iterate module definitions. + for ( typeModuleDefinitionVector::iterator moduleDefinitionItr = pModuleDefinitionEntry->begin(); moduleDefinitionItr != pModuleDefinitionEntry->end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Are we searching for loaded modules only? + if ( loadedOnly ) + { + // Yes, so skip if the module is not loaded. + if ( pModuleDefinition->getLoadCount() == 0 ) + continue; + + // Use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + + // Finish iterating module definitions as only a single module in this entry can be loaded concurrently. + break; + } + + // use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + } + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::findModuleTypes( const char* pModuleType, const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ) +{ + // Fetch module type. + StringTableEntry moduleType = StringTable->insert( pModuleType ); + + // Iterate module Ids. + for( typeModuleIdDatabaseHash::iterator moduleIdItr = mModuleIdDatabase.begin(); moduleIdItr != mModuleIdDatabase.end(); ++moduleIdItr ) + { + // Fetch module definition entry. + ModuleDefinitionEntry* pModuleDefinitionEntry = moduleIdItr->value; + + // Skip if note the module type we're searching for. + if ( pModuleDefinitionEntry->mModuleType != moduleType ) + continue; + + // Iterate module definitions. + for ( typeModuleDefinitionVector::iterator moduleDefinitionItr = pModuleDefinitionEntry->begin(); moduleDefinitionItr != pModuleDefinitionEntry->end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Are we searching for loaded modules only? + if ( loadedOnly ) + { + // Yes, so skip if the module is not loaded. + if ( pModuleDefinition->getLoadCount() == 0 ) + continue; + + // Use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + + // Finish iterating module definitions as only a single module in this entry can be loaded concurrently. + break; + } + + // use module definition. + moduleDefinitions.push_back( pModuleDefinition ); + } + } +} + +//----------------------------------------------------------------------------- + +StringTableEntry ModuleManager::copyModule( ModuleDefinition* pSourceModuleDefinition, const char* pTargetModuleId, const char* pTargetPath, const bool useVersionPathing ) +{ + // Sanity! + AssertFatal( pSourceModuleDefinition != NULL, "Cannot copy module using a NULL source module definition." ); + AssertFatal( pTargetModuleId != NULL, "Cannot copy module using a NULL target module Id." ); + AssertFatal( pTargetPath != NULL, "Cannot copy module using a NULL target path." ); + + // Fetch the source module Id. + StringTableEntry sourceModuleId = pSourceModuleDefinition->getModuleId(); + + // Is the source module definition registered with this module manager? + if ( pSourceModuleDefinition->getModuleManager() != this ) + { + // No, so warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' as it is not registered with this module manager.", sourceModuleId ); + return StringTable->EmptyString(); + } + + // Fetch the target module Id. + StringTableEntry targetModuleId = StringTable->insert( pTargetModuleId ); + + // Extend moduleId/VersionId pathing. + char versionPathBuffer[1024]; + + // Are we using version pathing? + if ( useVersionPathing ) + { + // Yes, so format it. + dSprintf( versionPathBuffer, sizeof(versionPathBuffer), "%s/%s/%d", + pTargetPath, targetModuleId, pSourceModuleDefinition->getVersionId() ); + } + else + { + // No, so a straight copy. + dSprintf( versionPathBuffer, sizeof(versionPathBuffer), "%s", pTargetPath ); + } + + // Expand the path. + char targetPathBuffer[1024]; + Con::expandPath( targetPathBuffer, sizeof(targetPathBuffer), versionPathBuffer ); + pTargetPath = targetPathBuffer; + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Started copying module Id '%s' to target directory '%s'.", sourceModuleId, pTargetPath ); + } + + // Is the target folder a directory? + if ( !Platform::isDirectory( pTargetPath ) ) + { + // No, so we have to ensure that there is a trailing slash as that indicates a folder (not a file) when creating a path in the platform code. + char createDirectoryBuffer[1024]; + Con::expandPath( createDirectoryBuffer, sizeof(createDirectoryBuffer), pTargetPath, NULL, true ); + + // No, so can we create it? + if ( !Platform::createPath( createDirectoryBuffer ) ) + { + // No, so warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as directory was not found and could not be created.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + } + + // Copy the source module to the target folder. + if ( !dPathCopy( pSourceModuleDefinition->getModulePath(), pTargetPath, false ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as directory copy failed.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + + // Format the new source module definition file-path. + char newModuleDefinitionSourceFileBuffer[1024]; + dSprintf( newModuleDefinitionSourceFileBuffer, sizeof(newModuleDefinitionSourceFileBuffer), "%s/%s", pTargetPath, pSourceModuleDefinition->getModuleFile() ); + + // Finish if source/target module Ids are identical. + if ( sourceModuleId == targetModuleId ) + return StringTable->insert( newModuleDefinitionSourceFileBuffer ); + + // Format the new target module definition file-path. + char newModuleDefinitionTargetFileBuffer[1024]; + dSprintf( newModuleDefinitionTargetFileBuffer, sizeof(newModuleDefinitionTargetFileBuffer), "%s/%s.%s", pTargetPath, targetModuleId, MODULE_MANAGER_MODULE_DEFINITION_EXTENSION ); + + // Rename the module definition. + if ( !dFileRename( newModuleDefinitionSourceFileBuffer, newModuleDefinitionTargetFileBuffer ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as renaming the module from '%s' to '%s' failed.", + sourceModuleId, pTargetPath, newModuleDefinitionSourceFileBuffer, newModuleDefinitionTargetFileBuffer ); + return StringTable->EmptyString(); + } + + Vector directories; + + // Find directories. + if ( !Platform::dumpDirectories( pTargetPath, directories, -1 ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as sub-folder scanning/renaming failed.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + + TamlModuleIdUpdateVisitor moduleIdUpdateVisitor; + moduleIdUpdateVisitor.setModuleIdFrom( sourceModuleId ); + moduleIdUpdateVisitor.setModuleIdTo( targetModuleId ); + + Vector files; + + const char* pExtension = (const char*)"Taml"; + const U32 extensionLength = dStrlen(pExtension); + + // Iterate directories. + for( Vector::iterator basePathItr = directories.begin(); basePathItr != directories.end(); ++basePathItr ) + { + // Fetch base path. + StringTableEntry basePath = *basePathItr; + + // Find files. + files.clear(); + if ( !Platform::dumpPath( basePath, files, 0 ) ) + { + // Warn. + Con::warnf("Module Manager: Cannot copy module Id '%s' using target directory '%s' as sub-folder scanning/renaming failed.", + sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + + // Iterate files. + for ( Vector::iterator fileItr = files.begin(); fileItr != files.end(); ++fileItr ) + { + // Fetch file info. + Platform::FileInfo* pFileInfo = fileItr; + + // Fetch filename. + const char* pFilename = pFileInfo->pFileName; + + // Find filename length. + const U32 filenameLength = dStrlen( pFilename ); + + // Skip if extension is longer than filename. + if ( extensionLength >= filenameLength ) + continue; + + // Skip if extension not found. + if ( dStricmp( pFilename + filenameLength - extensionLength, pExtension ) != 0 ) + continue; + + char parseFileBuffer[1024]; + dSprintf( parseFileBuffer, sizeof(parseFileBuffer), "%s/%s", pFileInfo->pFullPath, pFilename ); + + // Parse file. + if ( !mTaml.parse( parseFileBuffer, moduleIdUpdateVisitor ) ) + { + // Warn. + Con::warnf("Module Manager: Failed to parse file '%s' whilst copying module Id '%s' using target directory '%s'.", + parseFileBuffer, sourceModuleId, pTargetPath ); + return StringTable->EmptyString(); + } + } + } + + // Info. + if ( mEchoInfo ) + { + Con::printf( "Module Manager: Finished copying module Id '%s' to target directory '%s'.", sourceModuleId, pTargetPath ); + } + + return StringTable->insert( newModuleDefinitionTargetFileBuffer ); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::synchronizeDependencies( ModuleDefinition* pRootModuleDefinition, const char* pTargetDependencyPath ) +{ + // Sanity! + AssertFatal( pRootModuleDefinition != NULL, "Cannot synchronize dependencies with NULL root module definition." ); + AssertFatal( pTargetDependencyPath != NULL, "Cannot synchronize dependencies with NULL target dependency path." ); + + // Fetch the root module Id. + StringTableEntry rootModuleId = pRootModuleDefinition->getModuleId(); + + // Is the root module definition registered with this module manager? + if ( pRootModuleDefinition->getModuleManager() != this ) + { + // No, so warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' as it is not registered with this module manager.", rootModuleId ); + return false; + } + + // Expand the path. + char targetPathBuffer[1024]; + Con::expandPath( targetPathBuffer, sizeof(targetPathBuffer), pTargetDependencyPath ); + pTargetDependencyPath = targetPathBuffer; + + // Is the target dependency folder a directory? + if ( !Platform::isDirectory( pTargetDependencyPath ) ) + { + // No, so we have to ensure that there is a trailing slash as that indicates a folder (not a file) when creating a path in the platform code. + char createDirectoryBuffer[1024]; + Con::expandPath( createDirectoryBuffer, sizeof(createDirectoryBuffer), pTargetDependencyPath, NULL, true ); + + // No, so can we create it? + if ( !Platform::createPath( createDirectoryBuffer ) ) + { + // No, so warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' using target directory '%s' as directory was not found and could not be created.", + rootModuleId, pTargetDependencyPath ); + return false; + } + } + + typeModuleLoadEntryVector resolvingQueue; + typeModuleLoadEntryVector sourceModulesNeeded; + + // Could we resolve source dependencies? + if ( !resolveModuleDependencies( rootModuleId, pRootModuleDefinition->getVersionId(), pRootModuleDefinition->getModuleGroup(), true, resolvingQueue, sourceModulesNeeded ) ) + { + // No, so warn. + Con::warnf("Cannot synchronize dependencies for root module Id '%s' as its dependencies could not be resolved.", rootModuleId ); + return false; + } + + // Sanity! + AssertFatal( sourceModulesNeeded.size() > 0, "Cannot synchronize dependencies as no modules were returned." ); + + // Remove the root module definition. + sourceModulesNeeded.pop_back(); + + // Initialize the target module manager and scan the target folder for modules. + ModuleManager targetModuleManager; + targetModuleManager.mEnforceDependencies = true; + targetModuleManager.mEchoInfo = false; + targetModuleManager.scanModules( pTargetDependencyPath ); + + char targetFolderGenerateBuffer[1024]; + + // Iterate module definitions. + for ( typeModuleLoadEntryVector::iterator sourceModuleItr = sourceModulesNeeded.begin(); sourceModuleItr != sourceModulesNeeded.end(); ++sourceModuleItr ) + { + // Fetch module definition. + ModuleDefinition* pSourceModuleDefinition = sourceModuleItr->mpModuleDefinition; + + // Fetch the source module Id, + StringTableEntry sourceModuleId = pSourceModuleDefinition->getModuleId(); + + // Fetch the source module version Id. + const U32 sourceVersionId = pSourceModuleDefinition->getVersionId(); + + // Fetch the source module build Id. + const U32 sourceBuildId = pSourceModuleDefinition->getBuildId(); + + // Fetch module definition entry for this module Id in the target. + ModuleDefinitionEntry* pDefinitions = targetModuleManager.findModuleId( sourceModuleId ); + + // Is the module Id present in the target? + if ( pDefinitions == NULL ) + { + // No, so format module Id folder path. + dSprintf( targetFolderGenerateBuffer, sizeof(targetFolderGenerateBuffer), "%s/%s/", pTargetDependencyPath, sourceModuleId ); + + // Create module Id folder. + if ( !Platform::createPath( targetFolderGenerateBuffer ) ) + { + // Warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' as the target directory '%s' could not be created.", sourceModuleId, targetFolderGenerateBuffer ); + return false; + } + } + else + { + // Yes, so fetch the module definition for this module Id and version Id in the target. + ModuleDefinitionEntry::iterator definitionItr = targetModuleManager.findModuleDefinition( sourceModuleId, sourceVersionId ); + + // Is the specific module definition present in the target? + if ( definitionItr != NULL ) + { + // Yes, so fetch the module definition. + ModuleDefinition* pTargetModuleDefinition = *definitionItr; + + // Fetch the target module build Id. + const U32 targetBuildId = pTargetModuleDefinition->getBuildId(); + + // Fetch the target module path. + StringTableEntry targetModulePath = pTargetModuleDefinition->getModulePath(); + + // Remove the target module definition from the database. + targetModuleManager.removeModuleDefinition( pTargetModuleDefinition ); + + // Skip if the target definition is the same build Id. + if ( targetBuildId == sourceBuildId ) + continue; + + // Delete the target module definition folder. + if ( !Platform::deleteDirectory( targetModulePath ) ) + { + // Warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' at version Id '%d' as the old module at '%s' could not be deleted.", + sourceModuleId, sourceVersionId, targetModulePath ); + return false; + } + } + } + + // Format source module path. + char sourceFolderPath[1024]; + Con::expandPath( sourceFolderPath, sizeof(sourceFolderPath), pSourceModuleDefinition->getModulePath() ); + + // Format target module path. + dSprintf( targetFolderGenerateBuffer, sizeof(targetFolderGenerateBuffer), "%s/%s/%d", pTargetDependencyPath, sourceModuleId, sourceVersionId ); + + // Copy the source module to the target folder. + if (!dPathCopy(sourceFolderPath, targetFolderGenerateBuffer, false)) + { + // Warn. + Con::warnf("Cannot synchronize dependencies for module Id '%s' at version Id '%d' as the module could not be copied to '%s'.", + sourceModuleId, sourceVersionId, targetFolderGenerateBuffer ); + return false; + } + } + + // Find any target modules left, These are orphaned modules not depended upon by any other module. + typeConstModuleDefinitionVector orphanedTargetModules; + targetModuleManager.findModules( false, orphanedTargetModules ); + + // Iterate module definitions. + for ( typeConstModuleDefinitionVector::const_iterator moduleDefinitionItr = orphanedTargetModules.begin(); moduleDefinitionItr != orphanedTargetModules.end(); ++moduleDefinitionItr ) + { + // Fetch orphaned module definition. + const ModuleDefinition* pOrphanedModuleDefinition = *moduleDefinitionItr; + + // Delete the target module definition folder. + if ( !Platform::deleteDirectory( pOrphanedModuleDefinition->getModulePath() ) ) + { + // Warn. + Con::warnf("Cannot delete orphaned module Id '%s' at version Id '%d' from '%s'.", + pOrphanedModuleDefinition->getModuleId(), pOrphanedModuleDefinition->getVersionId(), pOrphanedModuleDefinition->getModulePath() ); + } + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::canMergeModules( const char* pMergeSourcePath ) +{ + // Sanity! + AssertFatal( pMergeSourcePath != NULL, "Cannot check merge modules with NULL source path." ); + + // Expand the source path. + char sourcePathBuffer[1024]; + Con::expandPath( sourcePathBuffer, sizeof(sourcePathBuffer), pMergeSourcePath ); + pMergeSourcePath = sourcePathBuffer; + + // Is the path a valid directory? + if ( !Platform::isDirectory( sourcePathBuffer ) ) + { + // No, so warn. + Con::warnf( "Cannot check merge modules as path is invalid '%s'.", sourcePathBuffer ); + return false; + } + + // Initialize the source module manager and scan the source folder for modules. + ModuleManager mergeModuleManager; + mergeModuleManager.mEnforceDependencies = false; + mergeModuleManager.mEchoInfo = false; + mergeModuleManager.scanModules( pMergeSourcePath ); + + // Find all the merge modules. + typeConstModuleDefinitionVector mergeModules; + mergeModuleManager.findModules( false, mergeModules ); + + // Iterate found merge module definitions. + for ( typeConstModuleDefinitionVector::const_iterator mergeModuleItr = mergeModules.begin(); mergeModuleItr != mergeModules.end(); ++mergeModuleItr ) + { + // Fetch module definition. + const ModuleDefinition* pMergeModuleDefinition = *mergeModuleItr; + + // Fetch module Id. + StringTableEntry moduleId = pMergeModuleDefinition->getModuleId(); + + // Fetch version Id. + const U32 versionId = pMergeModuleDefinition->getVersionId(); + + // Fetch module group. + StringTableEntry moduleGroup = pMergeModuleDefinition->getModuleGroup(); + + // Cannot merge if module already exists. + if ( findModuleDefinition( moduleId, versionId ) != NULL ) + return false; + + // Cannot merge if module is part of a loaded group. + if ( findGroupLoaded( moduleGroup ) != NULL ) + return false; + } + + // Can merge modules. + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::mergeModules( const char* pMergeTargetPath, const bool removeMergeDefinition, const bool registerNewModules ) +{ + // Sanity! + AssertFatal( pMergeTargetPath != NULL, "Cannot merge modules with a target path of NULL." ); + + // Is a module merge available? + if ( !isModuleMergeAvailable() ) + { + // No, so warn. + Con::warnf( "Cannot merge modules as a module merge is not available." ); + return false; + } + + // Expand the target path. + char targetPathBuffer[1024]; + Con::expandPath( targetPathBuffer, sizeof(targetPathBuffer), pMergeTargetPath ); + pMergeTargetPath = targetPathBuffer; + + // Fetch module merge file path. + StringTableEntry moduleMergeFilePath = getModuleMergeFilePath(); + + // Read module merge definition. + Taml taml; + ModuleMergeDefinition* pModuleMergeDefinition = taml.read( moduleMergeFilePath ); + + // Do we have a module merge definition. + if ( pModuleMergeDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Cannot merge modules as the module merge definition file failed to load '%s'.", moduleMergeFilePath ); + return false; + } + + // Fetch the merge source path. + StringTableEntry mergeSourcePath = pModuleMergeDefinition->getModuleMergePath(); + + // Remove the module merge definition. + pModuleMergeDefinition->deleteObject(); + pModuleMergeDefinition = NULL; + + // If we cannot merge the modules then we only process modules flagged as critical merge. + const bool criticalMergeOnly = !canMergeModules( mergeSourcePath ); + + // Initialize the target module manager and scan the target folder for modules. + ModuleManager targetModuleManager; + targetModuleManager.mEnforceDependencies = false; + targetModuleManager.mEchoInfo = false; + targetModuleManager.scanModules( pMergeTargetPath ); + + // Initialize the source module manager and scan the source folder for modules. + ModuleManager sourceModuleManager; + sourceModuleManager.mEnforceDependencies = false; + sourceModuleManager.mEchoInfo = false; + sourceModuleManager.scanModules( mergeSourcePath ); + + // Find all the source modules. + typeConstModuleDefinitionVector sourceModules; + sourceModuleManager.findModules( false, sourceModules ); + + // Iterate found merge module definitions. + for ( typeConstModuleDefinitionVector::const_iterator sourceModuleItr = sourceModules.begin(); sourceModuleItr != sourceModules.end(); ++sourceModuleItr ) + { + // Fetch the source module definition. + const ModuleDefinition* pSourceModuleDefinition = *sourceModuleItr; + + // Skip if we're performing a critical merge only and the module is not flagged as critical merge. + if ( criticalMergeOnly && pSourceModuleDefinition->getCriticalMerge() ) + continue; + + // Fetch source module Id. + const StringTableEntry sourceModuleId = pSourceModuleDefinition->getModuleId(); + + // Fetch source version Id. + const U32 sourceVersionId = pSourceModuleDefinition->getVersionId(); + + // Fetch source build Id. + const U32 sourceBuildId = pSourceModuleDefinition->getBuildId(); + + // Format module Id folder path. + char targetModuleIdBuffer[1024]; + dSprintf( targetModuleIdBuffer, sizeof(targetModuleIdBuffer), "%s/%s/", pMergeTargetPath, sourceModuleId ); + + // Flag to indicate if the merged module needs registering. + bool shouldRegisterModule; + + // Does the module Id exist? + if ( targetModuleManager.findModuleId( sourceModuleId ) == NULL ) + { + // No, so create module Id folder. + if ( !Platform::createPath( targetModuleIdBuffer ) ) + { + // Warn. + Con::warnf("Cannot merge modules for module '%s' as the path '%s' could not be created.", sourceModuleId, targetModuleIdBuffer ); + return false; + } + + // Module Should be registered. + shouldRegisterModule = true; + } + else + { + // Yes, so find the target module definition that matches the source module definition. + ModuleDefinitionEntry::iterator targetModuleDefinitionItr = targetModuleManager.findModuleDefinition( sourceModuleId, sourceVersionId ); + + // Is there an existing target module definition entry? + if ( targetModuleDefinitionItr != NULL ) + { + // Yes, so fetch the target module definition. + const ModuleDefinition* pTargetModuleDefinition = *targetModuleDefinitionItr; + + // Fetch target module path. + StringTableEntry targetModulePath = pTargetModuleDefinition->getModulePath(); + + // Yes, so we have to remove it first. + if ( !Platform::deleteDirectory( targetModulePath ) ) + { + // Module was not deleted so warn. + Con::warnf( "Failed to remove module folder located at '%s'. Module will be copied over.", targetModulePath ); + } + + // Is the build Id being downgraded? + if ( sourceBuildId < pTargetModuleDefinition->getBuildId() ) + { + // Yes, so warn. + Con::warnf( "Encountered a downgraded build Id for module Id '%s' at version Id '%d'.", sourceModuleId, sourceBuildId ); + } + + // Module should not be registered. + shouldRegisterModule = false; + } + else + { + // Module Should be registered. + shouldRegisterModule = true; + } + } + + // Fetch source module path. + StringTableEntry sourceModulePath = pSourceModuleDefinition->getModulePath(); + + // Format target version Id folder path. + char targetVersionIdBuffer[1024]; + dSprintf( targetVersionIdBuffer, sizeof(targetVersionIdBuffer), "%s%d", targetModuleIdBuffer, sourceVersionId ); + + // Copy module (allow overwrites as we may have failed to remove the old folder in which case this is likely to fail as well). + if (!dPathCopy(sourceModulePath, targetVersionIdBuffer, false)) + { + // Failed to copy module. + Con::warnf( "Failed to copy module folder located at '%s' to location '%s'. The modules may now be corrupted.", sourceModulePath, targetVersionIdBuffer ); + } + + // Are we registering new modules and the module needs registering? + if ( registerNewModules && shouldRegisterModule ) + { + // Yes, so scan module. + scanModules( targetVersionIdBuffer, true ); + } + + // Is the module part of a critical merge? + if ( criticalMergeOnly ) + { + // Yes, so we need to remove the source module definition. + if ( !Platform::deleteDirectory( sourceModulePath ) ) + { + // Module was not deleted so warn. + Con::warnf( "Failed to remove CRITICAL merge module folder located at '%s'. Module will be copied over.", sourceModulePath ); + } + } + } + + // Do we need to remove the module merge definition file? + if ( removeMergeDefinition ) + { + // Yes, so remove it. + dFileDelete( moduleMergeFilePath ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void ModuleManager::addListener( SimObject* pListener ) +{ + // Sanity! + AssertFatal( pListener != NULL, "Cannot add notifications to a NULL object." ); + + // Ignore if already added. + if (mNotificationListeners.find( pListener) != mNotificationListeners.end()) + return; + + // Add as a listener. + mNotificationListeners.addObject( pListener ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::removeListener( SimObject* pListener ) +{ + // Sanity! + AssertFatal( pListener != NULL, "Cannot remove notifications from a NULL object." ); + + // Remove as a listener. + mNotificationListeners.removeObject( pListener ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::clearDatabase( void ) +{ + // Lock database. + AssertFatal( mDatabaseLocks == 0, "Cannot clear database if database is locked." ); + + // Iterate groups loaded. + while ( mGroupsLoaded.size() > 0 ) + { + // Unload module group. + unloadModuleGroup( *mGroupsLoaded.begin() ); + } + + // Iterate any other explicit modules that are loaded. + while ( mModulesLoaded.size() > 0 ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = mModulesLoaded.begin()->mpModuleDefinition; + + // Unload explicit module. + unloadModuleExplicit( pModuleDefinition->getModuleId() ); + } + + // Iterate modules to delete module definitions. + for ( typeModuleIdDatabaseHash::iterator moduleItr = mModuleIdDatabase.begin(); moduleItr != mModuleIdDatabase.end(); ++moduleItr ) + { + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = moduleItr->value; + + // Iterate module definitions. + for ( ModuleDefinitionEntry::iterator definitionItr = pDefinitions->begin(); definitionItr != pDefinitions->end(); ++definitionItr ) + { + // Fetch module definition. + ModuleDefinition* pModuleDefinition = *definitionItr; + + // Remove notification before we delete it. + clearNotify( pModuleDefinition ); + + // Delete module definition. + pModuleDefinition->deleteObject(); + } + + // Clear definitions. + delete pDefinitions; + } + + // Clear database. + mModuleIdDatabase.clear(); + + // Iterate module groups. + for ( typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.begin(); moduleGroupItr != mGroupModules.end(); ++moduleGroupItr ) + { + // Delete module group vector. + delete moduleGroupItr->value; + } + + // Clear module groups. + mGroupModules.clear(); +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::removeModuleDefinition( ModuleDefinition* pModuleDefinition ) +{ + // Sanity! + AssertFatal( pModuleDefinition != NULL, "Cannot remove module definition if it is NULL." ); + + // Fetch module Id. + StringTableEntry moduleId = pModuleDefinition->getModuleId(); + + // Is the module definition registered with this module manager? + if ( pModuleDefinition->getModuleManager() != this ) + { + // No, so warn. + Con::warnf("Cannot remove module definition '%s' as it is not registered with this module manager.", moduleId ); + return false; + } + + // Is the module definition loaded? + if ( pModuleDefinition->getLoadCount() > 0 ) + { + // No, so warn. + Con::warnf("Cannot remove module definition '%s' as it is loaded.", moduleId ); + return false; + } + + // Find module Id. + typeModuleIdDatabaseHash::iterator moduleItr = mModuleIdDatabase.find( moduleId ); + + // Sanity! + AssertFatal( moduleItr != mModuleIdDatabase.end(), "Failed to find module definition." ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = moduleItr->value; + + // Fetch version Id. + const U32 versionId = pModuleDefinition->getVersionId(); + + // Iterate module definitions. + for ( ModuleDefinitionEntry::iterator definitionItr = pDefinitions->begin(); definitionItr != pDefinitions->end(); ++definitionItr ) + { + // Skip if this isn't the version Id we're searching for. + if ( versionId != (*definitionItr)->getVersionId() ) + continue; + + // Remove definition entry. + pDefinitions->erase( definitionItr ); + + // Remove notification before we delete it. + clearNotify( pModuleDefinition ); + + // Delete module definition. + pModuleDefinition->deleteObject(); + + // Are there any modules left for this module Id? + if ( findModuleId( moduleId ) == NULL ) + { + bool moduleIdFound = false; + + // No, so remove from groups. + for( typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.begin(); moduleGroupItr != mGroupModules.end(); ++moduleGroupItr ) + { + // Fetch module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Iterate module Id. + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Skip if this isn't the Id. + if ( *moduleIdItr != moduleId ) + continue; + + // Remove the module Id. + pModuleIds->erase( moduleIdItr ); + + // Flag as found. + moduleIdFound = true; + + break; + } + + // Finish if found. + if ( moduleIdFound ) + break; + } + } + + return true; + } + + // Sanity! + AssertFatal( false, "Failed to find module definition." ); + + return false; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::registerModule( const char* pModulePath, const char* pModuleFile ) +{ + // Sanity! + AssertFatal( pModulePath != NULL, "Cannot scan module with NULL module path." ); + AssertFatal( pModuleFile != NULL, "Cannot scan module with NULL module file." ); + + // Make the module path a full-path. + char fullPathBuffer[1024]; + Platform::makeFullPathName( pModulePath, fullPathBuffer, sizeof(fullPathBuffer) ); + pModulePath = fullPathBuffer; + + + char formatBuffer[1024]; + + // Fetch module path trail character. + char modulePathTrail = pModulePath[dStrlen(pModulePath) - 1]; + + // Format module file-path. + dSprintf( formatBuffer, sizeof(formatBuffer), modulePathTrail == '/' ? "%s%s" : "%s/%s", pModulePath, pModuleFile ); + + // Read the module file. + ModuleDefinition* pModuleDefinition = mTaml.read( formatBuffer ); + + // Did we read a module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Failed to read module definition in file '%s'.", formatBuffer ); + return false; + } + + // Set the module manager. + pModuleDefinition->setModuleManager( this ); + + // Set module definition path. + pModuleDefinition->setModulePath( pModulePath ); + + // Set module file. + pModuleDefinition->setModuleFile( pModuleFile ); + + // Set module file-path. + pModuleDefinition->setModuleFilePath( formatBuffer ); + + // Fetch module Id. + StringTableEntry moduleId = pModuleDefinition->getModuleId(); + + // Fetch module version Id. + const U32 versionId = pModuleDefinition->getVersionId(); + + // Fetch module group. + StringTableEntry moduleGroup = pModuleDefinition->getModuleGroup(); + + // Fetch module type. + StringTableEntry moduleType = pModuleDefinition->getModuleType(); + + // Is the module enabled? + if ( !pModuleDefinition->getEnabled() ) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it is disabled.", pModuleDefinition->getModuleFilePath() ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module Id valid? + if (moduleId == StringTable->EmptyString()) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it has an unspecified module Id.", + pModuleDefinition->getModuleFilePath() ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module version Id valid? + if ( versionId == 0 ) + { + // No, so warn. + Con::warnf( "Module Manager: Found Manager: Registering module: '%s' but it has an invalid Version Id of '0'.", + pModuleDefinition->getModuleFilePath() ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module group already loaded? + if ( findGroupLoaded( moduleGroup ) != NULL ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it is in a module group '%s' which has already been loaded.", + pModuleDefinition->getModuleFilePath(), + moduleGroup ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Was a script-file specified? + if ( pModuleDefinition->getScriptFile() != StringTable->EmptyString() ) + { + // Yes, so format module script file-path. + dSprintf( formatBuffer, sizeof(formatBuffer), modulePathTrail == '/' ? "%s%s" : "%s/%s", pModulePath, pModuleDefinition->getScriptFile() ); + pModuleDefinition->setModuleScriptFilePath( formatBuffer ); + } + + // Format module signature, + dSprintf( formatBuffer, sizeof(formatBuffer), "%s_%d_%d", moduleId, versionId, pModuleDefinition->getBuildId() ); + pModuleDefinition->setSignature( formatBuffer ); + + // Locked the module definition. + pModuleDefinition->setLocked( true ); + + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Did we find the module Id? + if ( pDefinitions != NULL ) + { + // Yes, so find the module definition. + ModuleDefinitionEntry::iterator definitionItr = findModuleDefinition( moduleId, versionId ); + + // Does this version Id already exist? + if ( definitionItr != NULL ) + { + // Yes, so warn. + Con::warnf( "Module Manager: Found module: '%s' but it is already registered as module Id '%s' at version Id '%d'.", + pModuleDefinition->getModuleFilePath(), moduleId, versionId ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module group the same as the module definitions we already have? + if ( moduleGroup != pDefinitions->mModuleGroup ) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but its module group '%s' is not the same as other module definitions of the same module Id.", + pModuleDefinition->getModuleFilePath(), moduleGroup ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + + // Is the module type the same as the module definitions we already have? + if ( moduleType != pDefinitions->mModuleType ) + { + // No, so warn. + Con::warnf( "Module Manager: Found module: '%s' but its module type '%s' is not the same as other module definitions of the same module Id.", + pModuleDefinition->getModuleFilePath(), moduleGroup ); + + // Destroy module definition and finish. + pModuleDefinition->deleteObject(); + return false; + } + } + else + { + // No, so create a vector of definitions. + pDefinitions = new ModuleDefinitionEntry( moduleId, moduleGroup, moduleType ); + + // Insert module Id definitions. + mModuleIdDatabase.insert( moduleId, pDefinitions ); + } + + // Add module definition. + pDefinitions->push_back( pModuleDefinition ); + + // Sort module definitions by version Id so that higher versions appear first. + dQsort( pDefinitions->address(), pDefinitions->size(), sizeof(ModuleDefinition*), moduleDefinitionVersionIdSort ); + + // Find module group. + typeGroupModuleHash::iterator moduleGroupItr = mGroupModules.find( moduleGroup ); + + // Did we find the module group? + if ( moduleGroupItr != mGroupModules.end() ) + { + // Yes, so fetch module Ids. + typeModuleIdVector* pModuleIds = moduleGroupItr->value; + + // Is the module Id already present? + bool moduleIdFound = false; + for( typeModuleIdVector::iterator moduleIdItr = pModuleIds->begin(); moduleIdItr != pModuleIds->end(); ++moduleIdItr ) + { + // Skip if this isn't the Id. + if ( *moduleIdItr != moduleId ) + continue; + + // Flag as found. + moduleIdFound = true; + break; + } + + // Add if module Id was not found. + if ( !moduleIdFound ) + pModuleIds->push_back( moduleId ); + } + else + { + // No, so insert a module Id vector. + moduleGroupItr = mGroupModules.insert( pModuleDefinition->getModuleGroup(), new typeModuleIdVector() ); + + // Add module Id. + moduleGroupItr->value->push_back( moduleId ); + } + + // Notify if the module definition is destroyed. + deleteNotify( pModuleDefinition ); + + // Info. + if ( mEchoInfo ) + { +#if 1 + Con::printf( "Module Manager: Registering: '%s' [ ID='%s', VersionId='%d', BuildId='%d', Description='%s' ].", + pModuleDefinition->getModuleFilePath(), + pModuleDefinition->getModuleId(), + pModuleDefinition->getVersionId(), + pModuleDefinition->getBuildId(), + pModuleDefinition->getModuleDescription() + ); +#else + Con::printf( "Module Manager: Registering: '%s' [ ID='%s', VersionId='%d', BuildId='%d', Description='%s', Group='%s', Dependencies='%s', ScriptFile='%s', CreateFunction='%s', DestroyFunction='%s' ].", + pModuleDefinition->getModuleFilePath(), + pModuleDefinition->getModuleId(), + pModuleDefinition->getVersionId(), + pModuleDefinition->getBuildId(), + pModuleDefinition->getModuleDescription(), + pModuleDefinition->getModuleGroup(), + pModuleDefinition->getDataField( StringTable->insert("Dependencies"), NULL ), + pModuleDefinition->getScriptFile(), + pModuleDefinition->getCreateFunction(), + pModuleDefinition->getDestroyFunction() + ); +#endif + } + + // Emit notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + Con::executef( *notifyItr, "onModuleRegister", pModuleDefinition->getIdString() ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::unregisterModule( const char* pModuleId, const U32 versionId ) +{ + // Sanity! + AssertFatal( pModuleId != NULL, "A module Id cannot be NULL." ); + + // Fetch module Id. + StringTableEntry moduleId = StringTable->insert( pModuleId ); + + // Find the module definition. + ModuleDefinition* pModuleDefinition = findModule( pModuleId, versionId ); + + // Did we find the module definition? + if ( pModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf( "Module Manager: Cannot unregister module Id '%s' as it is not registered.", moduleId ); + return false; + } + + // Remove the module definition. + return removeModuleDefinition( pModuleDefinition ); +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePreLoadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePreLoad( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePreLoad" ) ) + Con::executef( pListener, "onModulePreLoad", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePostLoadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePostLoad( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePostLoad" ) ) + Con::executef( pListener, "onModulePostLoad", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePreUnloadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePreUnload( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePreUnload" ) ) + Con::executef( pListener, "onModulePreUnload", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +void ModuleManager::raiseModulePostUnloadNotifications( ModuleDefinition* pModuleDefinition ) +{ + // Raise notifications. + for( SimSet::iterator notifyItr = mNotificationListeners.begin(); notifyItr != mNotificationListeners.end(); ++notifyItr ) + { + // Fetch listener object. + SimObject* pListener = *notifyItr; + + // Perform object callback. + ModuleCallbacks* pCallbacks = dynamic_cast( pListener ); + if ( pCallbacks != NULL ) + pCallbacks->onModulePostUnload( pModuleDefinition ); + + // Perform script callback. + if ( pListener->isMethod( "onModulePostUnload" ) ) + Con::executef( pListener, "onModulePostUnload", pModuleDefinition->getIdString() ); + } +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleDefinitionEntry* ModuleManager::findModuleId( StringTableEntry moduleId ) +{ + // Sanity! + AssertFatal( moduleId != NULL, "A module Id cannot be NULL." ); + + // Is the module Id valid? + if ( moduleId == StringTable->EmptyString() ) + { + // No, so warn. + Con::warnf( "Module Manager: Invalid Module Id." ); + return NULL; + } + + // Find module Id. + typeModuleIdDatabaseHash::iterator moduleItr = mModuleIdDatabase.find( moduleId ); + + // Return appropriately. + return moduleItr != mModuleIdDatabase.end() ? moduleItr->value : NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleDefinitionEntry::iterator ModuleManager::findModuleDefinition( StringTableEntry moduleId, const U32 versionId ) +{ + // Fetch modules definitions. + ModuleDefinitionEntry* pDefinitions = findModuleId( moduleId ); + + // Finish if no module definitions for the module Id. + if ( pDefinitions == NULL ) + return NULL; + + // Iterate module definitions. + for ( ModuleDefinitionEntry::iterator definitionItr = pDefinitions->begin(); definitionItr != pDefinitions->end(); ++definitionItr ) + { + // Skip if this isn't the version Id we're searching for. + if ( versionId != (*definitionItr)->getVersionId() ) + continue; + + // Return module definition iterator. + return definitionItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +bool ModuleManager::resolveModuleDependencies( StringTableEntry moduleId, const U32 versionId, StringTableEntry moduleGroup, bool synchronizedOnly, typeModuleLoadEntryVector& moduleResolvingQueue, typeModuleLoadEntryVector& moduleReadyQueue ) +{ + // Fetch the module Id ready entry. + ModuleLoadEntry* pLoadReadyEntry = findModuleReady( moduleId, moduleReadyQueue ); + + // Is there a load entry? + if ( pLoadReadyEntry ) + { + // Yes, so finish if the version Id is not important, + if ( versionId == 0 ) + return true; + + // Finish if the version Id are compatible. + if ( versionId == pLoadReadyEntry->mpModuleDefinition->getVersionId() ) + return true; + + // Is it a strict version Id? + if ( pLoadReadyEntry->mStrictVersionId ) + { + // Yes, so warn. + Con::warnf( "Module Manager: A module dependency was detected loading module Id '%s' at version Id '%d' in group '%s' but an version Id '%d' is also required.", + moduleId, versionId, pLoadReadyEntry->mpModuleDefinition->getVersionId(), moduleGroup ); + return false; + } + + // No, so find the required module version Id. + ModuleDefinitionEntry::iterator definitionItr = findModuleDefinition( moduleId, versionId ); + + // Did we find the requested module definition. + if ( definitionItr == NULL ) + { + // No, so we can safely ignore the missing dependency if we're not enforcing dependencies. + if ( !mEnforceDependencies ) + return true; + + // Warn! + Con::warnf( "Module Manager: A missing module dependency was detected loading module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Set the new module definition. + pLoadReadyEntry->mpModuleDefinition = *definitionItr; + + // Set strict version Id. + pLoadReadyEntry->mStrictVersionId = true; + + return true; + } + + // Is the module Id load resolving? + if ( findModuleResolving( moduleId, moduleResolvingQueue ) != NULL ) + { + // Yes, so a cycle has been detected so warn. + Con::warnf( "Module Manager: A cyclic dependency was detected resolving module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Reset selected module definition. + ModuleDefinition* pSelectedModuleDefinition = NULL; + + // Do we want the latest version Id? + if ( versionId == 0 ) + { + // Yes, so find the module Id. + typeModuleIdDatabaseHash::iterator moduleIdItr = mModuleIdDatabase.find( moduleId ); + + // Did we find the module Id? + if ( moduleIdItr == mModuleIdDatabase.end() ) + { + // No, so we can safely ignore the missing dependency if we're not enforcing dependencies. + if ( !mEnforceDependencies ) + return true; + + // Warn! + Con::warnf( "Module Manager: A missing module dependency was detected loading module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Fetch first module definition which should be the highest version Id. + pSelectedModuleDefinition = (*moduleIdItr->value)[0]; + } + else + { + // No, so find the module Id at the specific version Id. + ModuleDefinitionEntry::iterator definitionItr = findModuleDefinition( moduleId, versionId ); + + // Did we find the module definition? + if ( definitionItr == NULL ) + { + // No, so we can safely ignore the missing dependency if we're not enforcing dependencies. + if ( !mEnforceDependencies ) + return true; + + // Warn! + Con::warnf( "Module Manager: A missing module dependency was detected loading module Id '%s' at version Id '%d' in group '%s'.", + moduleId, versionId, moduleGroup ); + return false; + } + + // Select the module definition. + pSelectedModuleDefinition = *definitionItr; + } + + // If we're only resolving synchronized modules and the module is not synchronized then finish. + if ( synchronizedOnly && !pSelectedModuleDefinition->getSynchronized() ) + return true; + + // Create a load entry. + ModuleLoadEntry loadEntry( pSelectedModuleDefinition, false ); + + // Fetch module dependencies. + const ModuleDefinition::typeModuleDependencyVector& moduleDependencies = pSelectedModuleDefinition->getDependencies(); + + // Do we have any module dependencies? + if ( moduleDependencies.size() > 0 ) + { + // Yes, so queue this module as resolving. + moduleResolvingQueue.push_back( loadEntry ); + + // Iterate module dependencies. + for( ModuleDefinition::typeModuleDependencyVector::const_iterator dependencyItr = moduleDependencies.begin(); dependencyItr != moduleDependencies.end(); ++dependencyItr ) + { + // Finish if we could not the dependent module Id at the version Id. + if ( !resolveModuleDependencies( dependencyItr->mModuleId, dependencyItr->mVersionId, moduleGroup, synchronizedOnly, moduleResolvingQueue, moduleReadyQueue ) ) + return false; + } + + // Remove module as resolving. + moduleResolvingQueue.pop_back(); + } + + // Queue module as ready. + moduleReadyQueue.push_back( loadEntry ); + + return true; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleLoadEntry* ModuleManager::findModuleResolving( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleResolvingQueue ) +{ + // Iterate module load resolving queue. + for( typeModuleLoadEntryVector::iterator loadEntryItr = moduleResolvingQueue.begin(); loadEntryItr != moduleResolvingQueue.end(); ++loadEntryItr ) + { + // Finish if found. + if ( moduleId == loadEntryItr->mpModuleDefinition->getModuleId() ) + return loadEntryItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::ModuleLoadEntry* ModuleManager::findModuleReady( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleReadyQueue ) +{ + // Iterate module load ready queue. + for( typeModuleLoadEntryVector::iterator loadEntryItr = moduleReadyQueue.begin(); loadEntryItr != moduleReadyQueue.end(); ++loadEntryItr ) + { + // Finish if found. + if ( moduleId == loadEntryItr->mpModuleDefinition->getModuleId() ) + return loadEntryItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::typeModuleLoadEntryVector::iterator ModuleManager::findModuleLoaded( StringTableEntry moduleId, const U32 versionId ) +{ + // Iterate module loaded queue. + for( typeModuleLoadEntryVector::iterator loadEntryItr = mModulesLoaded.begin(); loadEntryItr != mModulesLoaded.end(); ++loadEntryItr ) + { + // Skip if not the module Id we're looking for. + if ( moduleId != loadEntryItr->mpModuleDefinition->getModuleId() ) + continue; + + // Skip if we are searching for a specific version and it does not match. + if ( versionId != 0 && versionId != loadEntryItr->mpModuleDefinition->getVersionId() ) + continue; + + return loadEntryItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +ModuleManager::typeGroupVector::iterator ModuleManager::findGroupLoaded( StringTableEntry moduleGroup ) +{ + // Iterate groups loaded queue. + for( typeGroupVector::iterator groupsLoadedItr = mGroupsLoaded.begin(); groupsLoadedItr != mGroupsLoaded.end(); ++groupsLoadedItr ) + { + // Finish if found. + if ( moduleGroup == *groupsLoadedItr ) + return groupsLoadedItr; + } + + // Not found. + return NULL; +} + +//----------------------------------------------------------------------------- + +StringTableEntry ModuleManager::getModuleMergeFilePath( void ) const +{ + // Format merge file path. + char filePathBuffer[1024]; + dSprintf( filePathBuffer, sizeof(filePathBuffer), "%s/%s", Platform::getExecutablePath(), MODULE_MANAGER_MERGE_FILE ); + + return StringTable->insert( filePathBuffer ); +} diff --git a/Engine/source/module/moduleManager.h b/Engine/source/module/moduleManager.h new file mode 100644 index 0000000000..9c71256103 --- /dev/null +++ b/Engine/source/module/moduleManager.h @@ -0,0 +1,215 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_MANAGER_H +#define _MODULE_MANAGER_H + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +#ifndef _TVECTOR_H_ +#include "core/util/tvector.h" +#endif + +#ifndef _TDICTIONARY_H_ +#include "core/util/tDictionary.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _MODULE_DEFINITION_H +#include "moduleDefinition.h" +#endif + +//----------------------------------------------------------------------------- + +#define MODULE_MANAGER_MERGE_FILE "module.merge" +#define MODULE_MANAGER_MODULE_DEFINITION_EXTENSION "module.taml" + +//----------------------------------------------------------------------------- + +/// @ingroup moduleGroup +/// @see moduleGroup +class ModuleManager : public SimObject +{ +private: + typedef SimObject Parent; + +public: + /// Module definitions. + typedef Vector typeModuleDefinitionVector; + typedef Vector typeConstModuleDefinitionVector; + +private: + /// Database locking. + struct LockDatabase + { + public: + LockDatabase( ModuleManager* pManager ) : + mpManager( pManager ) + { + mpManager->mDatabaseLocks++; + } + + ~LockDatabase() + { + mpManager->mDatabaseLocks--; + + // Sanity! + AssertFatal( mpManager->mDatabaseLocks >= 0, "Module Manager: Cannot unlock database as it is already unlocked." ); + } + + private: + ModuleManager* mpManager; + }; + + /// Loaded module entry. + struct ModuleLoadEntry + { + ModuleLoadEntry( ModuleDefinition* pModuleDefinition, const bool strictVersionId ) : + mpModuleDefinition( pModuleDefinition ), + mStrictVersionId( strictVersionId ) + { + } + + ModuleLoadEntry() + { + mpModuleDefinition = NULL; + mStrictVersionId = false; + } + + ModuleDefinition* mpModuleDefinition; + bool mStrictVersionId; + }; + + /// Module loading. + typedef Vector typeModuleIdVector; + typedef Vector typeGroupVector; + typedef HashMap typeGroupModuleHash; + typedef Vector typeModuleLoadEntryVector; + typeGroupModuleHash mGroupModules; + typeGroupVector mGroupsLoaded; + typeModuleLoadEntryVector mModulesLoaded; + + /// Miscellaneous. + bool mEnforceDependencies; + bool mEchoInfo; + S32 mDatabaseLocks; + char mModuleExtension[256]; + Taml mTaml; + SimSet mNotificationListeners; + + // Module definition entry. + struct ModuleDefinitionEntry : public typeModuleDefinitionVector + { + public: + ModuleDefinitionEntry( StringTableEntry moduleId, StringTableEntry moduleGroup, StringTableEntry moduleType ) : + mModuleId( moduleId ), + mModuleGroup( moduleGroup ), + mModuleType( moduleType ) + { + } + + const StringTableEntry mModuleId; + const StringTableEntry mModuleGroup; + const StringTableEntry mModuleType; + }; + + /// Module databases. + typedef HashMap typeModuleIdDatabaseHash; + typeModuleIdDatabaseHash mModuleIdDatabase; + +public: + ModuleManager(); + virtual ~ModuleManager() {} + + /// SimObject overrides + virtual bool onAdd(); + virtual void onRemove(); + virtual void onDeleteNotify( SimObject *object ); + static void initPersistFields(); + + /// Declare Console Object. + DECLARE_CONOBJECT( ModuleManager ); + + /// Module definitions. + bool setModuleExtension( const char* pExtension ); + + /// Module discovery. + bool scanModules( const char* pPath, const bool rootOnly = false ); + + /// Module unregister. + bool unregisterModule( const char* pModuleId, const U32 versionId ); + + /// Module (un)loading. + bool loadModuleGroup( const char* pModuleGroup ); + bool unloadModuleGroup( const char* pModuleGroup ); + bool loadModuleExplicit( const char* pModuleId, const U32 versionId = 0 ); + bool unloadModuleExplicit( const char* pModuleId ); + + /// Module type enumeration. + ModuleDefinition* findModule( const char* pModuleId, const U32 versionId ); + ModuleDefinition* findLoadedModule( const char* pModuleId ); + void findModules( const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ); + void findModuleTypes( const char* pModuleType, const bool loadedOnly, typeConstModuleDefinitionVector& moduleDefinitions ); + + /// Module synchronization. + StringTableEntry copyModule( ModuleDefinition* pSourceModuleDefinition, const char* pTargetModuleId, const char* pTargetPath, const bool useVersionPathing ); + bool synchronizeDependencies( ModuleDefinition* pRootModuleDefinition, const char* pTargetDependencyPath ); + + /// Module updates. + inline bool isModuleMergeAvailable( void ) const { return Platform::isFile( getModuleMergeFilePath() ); } + bool canMergeModules( const char* pMergeSourcePath ); + bool mergeModules( const char* pMergeTargetPath, const bool removeMergeDefinition, const bool registerNewModules ); + + /// Module notifications. + void addListener( SimObject* pListener ); + void removeListener( SimObject* pListener ); + +private: + void clearDatabase( void ); + bool removeModuleDefinition( ModuleDefinition* pModuleDefinition ); + bool registerModule( const char* pModulePath, const char* pModuleFile ); + + void raiseModulePreLoadNotifications( ModuleDefinition* pModuleDefinition ); + void raiseModulePostLoadNotifications( ModuleDefinition* pModuleDefinition ); + void raiseModulePreUnloadNotifications( ModuleDefinition* pModuleDefinition ); + void raiseModulePostUnloadNotifications( ModuleDefinition* pModuleDefinition ); + + ModuleDefinitionEntry* findModuleId( StringTableEntry moduleId ); + ModuleDefinitionEntry::iterator findModuleDefinition( StringTableEntry moduleId, const U32 versionId ); + bool resolveModuleDependencies( StringTableEntry moduleId, const U32 versionId, StringTableEntry moduleGroup, bool synchronizedOnly, typeModuleLoadEntryVector& moduleResolvingQueue, typeModuleLoadEntryVector& moduleReadyQueue ); + ModuleLoadEntry* findModuleResolving( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleResolvingQueue ); + ModuleLoadEntry* findModuleReady( StringTableEntry moduleId, typeModuleLoadEntryVector& moduleReadyQueue ); + typeModuleLoadEntryVector::iterator findModuleLoaded( StringTableEntry moduleId, const U32 versionId = 0 ); + typeGroupVector::iterator findGroupLoaded( StringTableEntry moduleGroup ); + StringTableEntry getModuleMergeFilePath( void ) const; +}; + +//----------------------------------------------------------------------------- + +extern ModuleManager ModuleDatabase; + +#endif // _MODULE_MANAGER_H \ No newline at end of file diff --git a/Engine/source/module/moduleManager_ScriptBinding.h b/Engine/source/module/moduleManager_ScriptBinding.h new file mode 100644 index 0000000000..dc560d29a7 --- /dev/null +++ b/Engine/source/module/moduleManager_ScriptBinding.h @@ -0,0 +1,344 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "console/engineAPI.h" +#include "moduleDefinition.h" +#include "moduleManager.h" + +DefineEngineMethod(ModuleManager, setModuleExtension, bool, (const char* moduleExtension), (""), + "Set the module extension used to scan for modules. The default is 'module'.\n" + "@param moduleExtension The module extension used to scan for modules.Do not use a period character.\n" + "@return Whether setting the module extension was successful or not.\n") +{ + // Set module extension. + return object->setModuleExtension(moduleExtension); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, scanModules, bool, (const char* pRootPath, bool rootOnly), ("", false), + "Scans for modules which are sub-directories of the specified path.\n" + "@param moduleRootPath The root directory to scan for sub - directories containing modules.\n" + "@param rootOnly[Optional] - Specifies whether to only scan the root path or not when searching for modules.\n" + "@return Whether the scan was successful or not.A successful scan can still find zero modules.\n") +{ + // Scan modules. + return object->scanModules( pRootPath, rootOnly ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, unregisterModule, bool, (const char* pModuleId, bool versionId), ("", false), + "Unregister the specified module.\n" + "@param moduleId The module Id to unregister.\n" + "@param versionId The version Id to unregister.\n" + "@return Whether the module was unregister or not.\n") +{ + // Unregister the module. + return object->unregisterModule( pModuleId, versionId ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, loadGroup, bool, (const char* pModuleGroup), (""), + "Load the specified module group.\n" + "@param moduleGroup The module group to load.\n" + "@return Whether the module group was loaded or not.\n") +{ + // Load module group. + return object->loadModuleGroup(pModuleGroup); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, unloadGroup, bool, (const char* pModuleGroup), (""), + "Unload the specified module group.\n" + "@param moduleGroup The module group to unload.\n" + "@return Whether the module group was unloaded or not.\n") +{ + // Unload module group. + return object->unloadModuleGroup(pModuleGroup); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, loadExplicit, bool, (const char* pModuleId, S32 pVersionId), ("", -1), + "Load the specified module explicitly.\n" + "@param moduleId The module Id to load.\n" + "@param versionId The version Id to load.Optional: Will load the latest version.\n" + "@return Whether the module Id was loaded or not.\n") +{ + if (pVersionId == -1) + return object->loadModuleExplicit(pModuleId); + else + return object->loadModuleExplicit(pModuleId, pVersionId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, unloadExplicit, bool, (const char* pModuleId), (""), + "Unload the specified module explicitly.\n" + "@param moduleId The module Id to unload.\n" + "@return Whether the module Id was unloaded or not.\n") +{ + // Unload module Id explicitly. + return object->unloadModuleExplicit(pModuleId); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, findModule, String, (const char* pModuleId, U32 pVersionId), ("", 0), + "Find the specific module Id optionally at the specified version Id.\n" + "@param moduleId The module Id to find.\n" + "@param versionId The version Id to find.\n" + "@return The module definition object or NULL if not found.\n") +{ + // Find module definition. + ModuleDefinition* pModuleDefinition = object->findModule(pModuleId, pVersionId); + + // Return nothing if not found. + if ( pModuleDefinition == NULL ) + return StringTable->EmptyString(); + + return pModuleDefinition->getIdString(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, findModules, String, (bool loadedOnly), (false), + "Find all the modules registered with the specified loaded state.\n" + "@param loadedOnly Whether to return only modules that are loaded or not.\n" + "@return A list of space - separated module definition object Ids.\n") +{ + // Find module type definitions. + Vector moduleDefinitions; + + // Find modules. + object->findModules( loadedOnly, moduleDefinitions ); + + // Fetch module definition count. + const U32 moduleDefinitionCount = (U32)moduleDefinitions.size(); + + // Finish if no module definition were found. + if ( moduleDefinitionCount == 0 ) + return StringTable->EmptyString(); + + // Create a return buffer. + S32 bufferSize = 4096; + char* pReturnBuffer = Con::getReturnBuffer( bufferSize ); + char* pBufferWrite = pReturnBuffer; + + // Iterate module definitions. + for ( ModuleManager::typeConstModuleDefinitionVector::const_iterator moduleDefinitionItr = moduleDefinitions.begin(); moduleDefinitionItr != moduleDefinitions.end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + const ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Format module definition. + const U32 offset = dSprintf( pBufferWrite, bufferSize, "%d ", pModuleDefinition->getId() ); + pBufferWrite += offset; + bufferSize -= offset; + + // Are we out of buffer space? + if ( bufferSize <= 0 ) + { + // Yes, so warn. + Con::warnf( "ModuleManager::findModules() - Ran out of buffer space." ); + break; + } + } + + return pReturnBuffer; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, findModuleTypes, String, (const char* pModuleType, bool loadedOnly), ("", false), + "Find the modules registered with the specified module type.\n" + "@param moduleType The module type to search for.\n" + "@param loadedOnly Whether to return only modules that are loaded or not.\n" + "@return A list of space - separated module definition object Ids.\n") +{ + // Find module type definitions. + Vector moduleDefinitions; + + // Find module types. + object->findModuleTypes( pModuleType, loadedOnly, moduleDefinitions ); + + // Fetch module definition count. + const U32 moduleDefinitionCount = (U32)moduleDefinitions.size(); + + // Finish if no module definition were found. + if ( moduleDefinitionCount == 0 ) + return StringTable->EmptyString(); + + // Create a return buffer. + S32 bufferSize = 4096; + char* pReturnBuffer = Con::getReturnBuffer( bufferSize ); + char* pBufferWrite = pReturnBuffer; + + // Iterate module definitions. + for ( ModuleManager::typeConstModuleDefinitionVector::const_iterator moduleDefinitionItr = moduleDefinitions.begin(); moduleDefinitionItr != moduleDefinitions.end(); ++moduleDefinitionItr ) + { + // Fetch module definition. + const ModuleDefinition* pModuleDefinition = *moduleDefinitionItr; + + // Format module definition. + const U32 offset = dSprintf( pBufferWrite, bufferSize, "%d ", pModuleDefinition->getId() ); + pBufferWrite += offset; + bufferSize -= offset; + + // Are we out of buffer space? + if ( bufferSize <= 0 ) + { + // Yes, so warn. + Con::warnf( "ModuleManager::findTypes() - Ran out of buffer space." ); + break; + } + } + + return pReturnBuffer; +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, copyModule, String, (const char* sourceModuleDefinition, const char* pTargetModuleId, const char* pTargetPath, const bool useVersionPathing), + ("", "", "", false), + "Copy the module to a new location with a new module Id.\n" + "@param sourceModuleDefinition The module definition to copy.\n" + "@param targetModuleId The module Id to rename the copied module to including all references to the source module Id.It is valid to specifiy the source module Id to produce an identical copy.\n" + "@param targetPath The target path to copy the module to.Addition folders will be created depending on whether 'useVersionPathing' is used or not.\n" + "@param useVersionPathing Whether to add a '/targetModuleId/versionId' folder to the target path or not.This allows copying multiple versions of the same module Id.\n" + "@return The new module definition file if copy was successful or NULL if not.\n") +{ + // Find the source module definition. + ModuleDefinition* pSourceModuleDefinition = dynamic_cast(Sim::findObject(sourceModuleDefinition)); + + // Was the module definition found? + if ( pSourceModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::copyModule() - Could not find source module definition '%s'.", sourceModuleDefinition); + return ""; + } + + // Copy module. + return object->copyModule( pSourceModuleDefinition, pTargetModuleId, pTargetPath, useVersionPathing ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, synchronizeDependencies, bool, (const char* rootModuleDefinition, const char* pTargetDependencyFolder), ("", ""), + "Synchronize the module dependencies of a module definition to a target dependency folder.\n" + "@param rootModuleDefinition The module definition used to determine dependencies.\n" + "@param targetDependencyPath The target dependency folder to copy dependencies to.\n" + "@return Whether the module dependencies were synchronized correctly or not.\n") +{ + // Find the root module definition. + ModuleDefinition* pRootModuleDefinition = dynamic_cast(Sim::findObject(rootModuleDefinition)); + + // Was the module definition found? + if ( pRootModuleDefinition == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::synchronizeModules() - Could not find root module definition '%s'.", rootModuleDefinition); + return false; + } + + // Synchronize dependencies. + return object->synchronizeDependencies( pRootModuleDefinition, pTargetDependencyFolder ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, isModuleMergeAvailable, bool, (),, + "Checks whether a module merge definition file is available or not.\n" + "@return Whether a module merge definition file is available or not.\n") +{ + // Check if module merge is available or not. + return object->isModuleMergeAvailable(); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, canMergeModules, bool, (const char* mergeSourcePath), (""), + "Checks whether a module merge using the modules in the source path can current happen or not.\n" + "@param mergeSourcePath The path where modules to be merged are located.\n" + "@return Whether a module merge using the modules in the source path can current happen or not.\n") +{ + // Check whether the merge modules can current happen or not. + return object->canMergeModules(mergeSourcePath); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, mergeModules, bool, (const char* pMergeTargetPath, bool removeMergeDefinition, bool registerNewModules), ("", false, false), + "Performs a module merge into the selected target path.\n" + "@param mergeTargetPath The path where modules will be merged into.\n" + "@param removeMergeDefinition Whether to remove any merge definition found or not if merge is successful.\n" + "@param registerNewModules Whether new (not replaced or updated) modules should be registered or not.\n" + "@return Whether the module merge was successful or not.Failure here could result in a corrupt module state.Reinstall is recommended or at least advised to the user is recommended.\n") +{ + // Merge modules. + return object->mergeModules( pMergeTargetPath, removeMergeDefinition, registerNewModules ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, addListener, void, (const char* listenerObject), (""), + "Registers the specified object as a listener for module notifications.\n" + "@param listenerObject The object to start receiving module notifications.\n" + "@return No return value.\n") +{ + // Find object. + SimObject* pListener = Sim::findObject(listenerObject); + + // Did we find the listener object? + if ( pListener == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::addNotifications() - Could not find the listener object '%s'.", listenerObject); + return; + } + + object->addListener( pListener ); +} + +//----------------------------------------------------------------------------- + +DefineEngineMethod(ModuleManager, removeListener, void, (const char* listenerObject), (""), + "Unregisters the specified object as a listener for module notifications.\n" + "@param listenerObject The object to stop receiving module notifications.\n" + "@return No return value.\n") +{ + // Find object. + SimObject* pListener = Sim::findObject(listenerObject); + + // Did we find the listener object? + if ( pListener == NULL ) + { + // No, so warn. + Con::warnf("ModuleManager::removeNotifications() - Could not find the listener object '%s'.", listenerObject); + return; + } + + object->removeListener( pListener ); +} diff --git a/Engine/source/module/moduleMergeDefinition.cpp b/Engine/source/module/moduleMergeDefinition.cpp new file mode 100644 index 0000000000..9172636e5e --- /dev/null +++ b/Engine/source/module/moduleMergeDefinition.cpp @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "moduleMergeDefinition.h" + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT( ModuleMergeDefinition ); + +//----------------------------------------------------------------------------- + +ModuleMergeDefinition::ModuleMergeDefinition() : + mModuleMergePath( StringTable->EmptyString() ) +{ +} + +//----------------------------------------------------------------------------- + +void ModuleMergeDefinition::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + /// Module merge. + addField( "MergePath", TypeString, Offset(mModuleMergePath, ModuleMergeDefinition), "The path where the modules to be merged can be found." ); +} diff --git a/Engine/source/module/moduleMergeDefinition.h b/Engine/source/module/moduleMergeDefinition.h new file mode 100644 index 0000000000..e706aaa4b6 --- /dev/null +++ b/Engine/source/module/moduleMergeDefinition.h @@ -0,0 +1,56 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _MODULE_MERGE_DEFINITION_H +#define _MODULE_MERGE_DEFINITION_H + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif + +//----------------------------------------------------------------------------- + +class ModuleMergeDefinition : public SimObject +{ +private: + typedef SimObject Parent; + + /// Module update + StringTableEntry mModuleMergePath; + +public: + ModuleMergeDefinition(); + virtual ~ModuleMergeDefinition() {} + + /// Engine. + static void initPersistFields(); + + /// Module merge. + inline void setModuleMergePath( const char* pModuleMergePath ) { mModuleMergePath = StringTable->insert(pModuleMergePath); } + inline StringTableEntry getModuleMergePath( void ) const { return mModuleMergePath; } + + /// Declare Console Object. + DECLARE_CONOBJECT( ModuleMergeDefinition ); +}; + +#endif // _MODULE_MERGE_DEFINITION_H + diff --git a/Engine/source/module/tamlModuleIdUpdateVisitor.h b/Engine/source/module/tamlModuleIdUpdateVisitor.h new file mode 100644 index 0000000000..36c4c2d047 --- /dev/null +++ b/Engine/source/module/tamlModuleIdUpdateVisitor.h @@ -0,0 +1,133 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_MODULE_ID_UPDATE_VISITOR_H_ +#define _TAML_MODULE_ID_UPDATE_VISITOR_H_ + +#ifndef _TAML_VISITOR_H_ +#include "persistence/taml/tamlVisitor.h" +#endif + +#ifndef _TAML_PARSER_H_ +#include "persistence/taml/tamlParser.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +class TamlModuleIdUpdateVisitor : public TamlVisitor +{ +private: + StringTableEntry mModuleIdFrom; + StringTableEntry mModuleIdTo; + U32 mModuleIdFromLength; + U32 mModuleIdToLength; + +public: + TamlModuleIdUpdateVisitor() : + mModuleIdFrom( StringTable->EmptyString() ), + mModuleIdTo(StringTable->EmptyString()), + mModuleIdFromLength( 0 ), + mModuleIdToLength( 0 ) + {} + virtual ~TamlModuleIdUpdateVisitor() {} + + virtual bool wantsPropertyChanges( void ) { return true; } + virtual bool wantsRootOnly( void ) { return true; } + + virtual bool visit( const TamlParser& parser, TamlVisitor::PropertyState& propertyState ) + { + // Debug Profiling. + PROFILE_SCOPE(TamlModuleIdUpdateVisitor_Visit); + + // Fetch property value. + const char* pPropertyValue = propertyState.getPropertyValue(); + + // Fetch value length. + const U32 valueLenth = dStrlen(pPropertyValue); + + char newAttributeValueBuffer[1024]; + + // Is this an expando? + if ( *pPropertyValue == '^' ) + { + // Yes, so finish if it's not the correct length. + if ( valueLenth < mModuleIdFromLength+1 ) + return true; + + // Is this the module Id? + if ( dStrnicmp( pPropertyValue+1, mModuleIdFrom, mModuleIdFromLength ) == 0 ) + { + // Yes, so format a new value. + dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "^%s%s", + mModuleIdTo, pPropertyValue+1+mModuleIdFromLength ); + + // Assign new value. + propertyState.updatePropertyValue( newAttributeValueBuffer ); + } + + return true; + } + + // Does the field start with the module Id? + if ( dStrnicmp( pPropertyValue, mModuleIdFrom, mModuleIdFromLength ) == 0 ) + { + // Yes, so format a new value. + dSprintf( newAttributeValueBuffer, sizeof(newAttributeValueBuffer), "%s%s", + mModuleIdTo, pPropertyValue+mModuleIdFromLength ); + + // Assign new value. + propertyState.updatePropertyValue( newAttributeValueBuffer ); + } + + return true; + } + + void setModuleIdFrom( const char* pModuleIdFrom ) + { + // Sanity! + AssertFatal( pModuleIdFrom != NULL, "Module Id from cannot be NULL." ); + + // Set module Id. + mModuleIdFrom = StringTable->insert( pModuleIdFrom ); + mModuleIdFromLength = dStrlen(mModuleIdFrom); + } + StringTableEntry getModuleIdFrom( void ) const { return mModuleIdFrom; } + + void setModuleIdTo( const char* pModuleIdTo ) + { + // Sanity! + AssertFatal( pModuleIdTo != NULL, "Module Id to cannot be NULL." ); + + // Set module Id. + mModuleIdTo = StringTable->insert( pModuleIdTo ); + mModuleIdToLength = dStrlen(mModuleIdTo); + } + const char* getModuleIdTo( void ) const { return mModuleIdTo; } +}; + +#endif // _TAML_MODULE_ID_UPDATE_VISITOR_H_ diff --git a/Engine/source/persistence/_tinyXML/tinystr.cpp b/Engine/source/persistence/_tinyXML/tinystr.cpp new file mode 100644 index 0000000000..0665768205 --- /dev/null +++ b/Engine/source/persistence/_tinyXML/tinystr.cpp @@ -0,0 +1,111 @@ +/* +www.sourceforge.net/projects/tinyxml + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + + +#ifndef TIXML_USE_STL + +#include "tinystr.h" + +// Error value for find primitive +const TiXmlString::size_type TiXmlString::npos = static_cast< TiXmlString::size_type >(-1); + + +// Null rep. +TiXmlString::Rep TiXmlString::nullrep_ = { 0, 0, { '\0' } }; + + +void TiXmlString::reserve (size_type cap) +{ + if (cap > capacity()) + { + TiXmlString tmp; + tmp.init(length(), cap); + memcpy(tmp.start(), data(), length()); + swap(tmp); + } +} + + +TiXmlString& TiXmlString::assign(const char* str, size_type len) +{ + size_type cap = capacity(); + if (len > cap || cap > 3*(len + 8)) + { + TiXmlString tmp; + tmp.init(len); + memcpy(tmp.start(), str, len); + swap(tmp); + } + else + { + memmove(start(), str, len); + set_size(len); + } + return *this; +} + + +TiXmlString& TiXmlString::append(const char* str, size_type len) +{ + size_type newsize = length() + len; + if (newsize > capacity()) + { + reserve (newsize + capacity()); + } + memmove(finish(), str, len); + set_size(newsize); + return *this; +} + + +TiXmlString operator + (const TiXmlString & a, const TiXmlString & b) +{ + TiXmlString tmp; + tmp.reserve(a.length() + b.length()); + tmp += a; + tmp += b; + return tmp; +} + +TiXmlString operator + (const TiXmlString & a, const char* b) +{ + TiXmlString tmp; + TiXmlString::size_type b_len = static_cast( strlen(b) ); + tmp.reserve(a.length() + b_len); + tmp += a; + tmp.append(b, b_len); + return tmp; +} + +TiXmlString operator + (const char* a, const TiXmlString & b) +{ + TiXmlString tmp; + TiXmlString::size_type a_len = static_cast( strlen(a) ); + tmp.reserve(a_len + b.length()); + tmp.append(a, a_len); + tmp += b; + return tmp; +} + + +#endif // TIXML_USE_STL diff --git a/Engine/source/persistence/_tinyXML/tinystr.h b/Engine/source/persistence/_tinyXML/tinystr.h new file mode 100644 index 0000000000..fea29c97df --- /dev/null +++ b/Engine/source/persistence/_tinyXML/tinystr.h @@ -0,0 +1,305 @@ +/* +www.sourceforge.net/projects/tinyxml + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + + +#ifndef TIXML_USE_STL + +#ifndef TIXML_STRING_INCLUDED +#define TIXML_STRING_INCLUDED + +#include +#include + +/* The support for explicit isn't that universal, and it isn't really + required - it is used to check that the TiXmlString class isn't incorrectly + used. Be nice to old compilers and macro it here: +*/ +#if defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + #define TIXML_EXPLICIT explicit +#elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + #define TIXML_EXPLICIT explicit +#else + #define TIXML_EXPLICIT +#endif + + +/* + TiXmlString is an emulation of a subset of the std::string template. + Its purpose is to allow compiling TinyXML on compilers with no or poor STL support. + Only the member functions relevant to the TinyXML project have been implemented. + The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase + a string and there's no more room, we allocate a buffer twice as big as we need. +*/ +class TiXmlString +{ + public : + // The size type used + typedef size_t size_type; + + // Error value for find primitive + static const size_type npos; // = -1; + + + // TiXmlString empty constructor + TiXmlString () : rep_(&nullrep_) + { + } + + // TiXmlString copy constructor + TiXmlString ( const TiXmlString & copy) : rep_(0) + { + init(copy.length()); + memcpy(start(), copy.data(), length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) + { + init( static_cast( strlen(copy) )); + memcpy(start(), copy, length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) + { + init(len); + memcpy(start(), str, len); + } + + // TiXmlString destructor + ~TiXmlString () + { + quit(); + } + + TiXmlString& operator = (const char * copy) + { + return assign( copy, (size_type)strlen(copy)); + } + + TiXmlString& operator = (const TiXmlString & copy) + { + return assign(copy.start(), copy.length()); + } + + + // += operator. Maps to append + TiXmlString& operator += (const char * suffix) + { + return append(suffix, static_cast( strlen(suffix) )); + } + + // += operator. Maps to append + TiXmlString& operator += (char single) + { + return append(&single, 1); + } + + // += operator. Maps to append + TiXmlString& operator += (const TiXmlString & suffix) + { + return append(suffix.data(), suffix.length()); + } + + + // Convert a TiXmlString into a null-terminated char * + const char * c_str () const { return rep_->str; } + + // Convert a TiXmlString into a char * (need not be null terminated). + const char * data () const { return rep_->str; } + + // Return the length of a TiXmlString + size_type length () const { return rep_->size; } + + // Alias for length() + size_type size () const { return rep_->size; } + + // Checks if a TiXmlString is empty + bool empty () const { return rep_->size == 0; } + + // Return capacity of string + size_type capacity () const { return rep_->capacity; } + + + // single char extraction + const char& at (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // [] operator + char& operator [] (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // find a char in a string. Return TiXmlString::npos if not found + size_type find (char lookup) const + { + return find(lookup, 0); + } + + // find a char in a string from an offset. Return TiXmlString::npos if not found + size_type find (char tofind, size_type offset) const + { + if (offset >= length()) return npos; + + for (const char* p = c_str() + offset; *p != '\0'; ++p) + { + if (*p == tofind) return static_cast< size_type >( p - c_str() ); + } + return npos; + } + + void clear () + { + //Lee: + //The original was just too strange, though correct: + // TiXmlString().swap(*this); + //Instead use the quit & re-init: + quit(); + init(0,0); + } + + /* Function to reserve a big amount of data when we know we'll need it. Be aware that this + function DOES NOT clear the content of the TiXmlString if any exists. + */ + void reserve (size_type cap); + + TiXmlString& assign (const char* str, size_type len); + + TiXmlString& append (const char* str, size_type len); + + void swap (TiXmlString& other) + { + Rep* r = rep_; + rep_ = other.rep_; + other.rep_ = r; + } + + private: + + void init(size_type sz) { init(sz, sz); } + void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; } + char* start() const { return rep_->str; } + char* finish() const { return rep_->str + rep_->size; } + + struct Rep + { + size_type size, capacity; + char str[1]; + }; + + void init(size_type sz, size_type cap) + { + if (cap) + { + // Lee: the original form: + // rep_ = static_cast(operator new(sizeof(Rep) + cap)); + // doesn't work in some cases of new being overloaded. Switching + // to the normal allocation, although use an 'int' for systems + // that are overly picky about structure alignment. + const size_type bytesNeeded = sizeof(Rep) + cap; + const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); + rep_ = reinterpret_cast( new int[ intsNeeded ] ); + + rep_->str[ rep_->size = sz ] = '\0'; + rep_->capacity = cap; + } + else + { + rep_ = &nullrep_; + } + } + + void quit() + { + if (rep_ != &nullrep_) + { + // The rep_ is really an array of ints. (see the allocator, above). + // Cast it back before delete, so the compiler won't incorrectly call destructors. + delete [] ( reinterpret_cast( rep_ ) ); + } + } + + Rep * rep_; + static Rep nullrep_; + +} ; + + +inline bool operator == (const TiXmlString & a, const TiXmlString & b) +{ + return ( a.length() == b.length() ) // optimization on some platforms + && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare +} +inline bool operator < (const TiXmlString & a, const TiXmlString & b) +{ + return strcmp(a.c_str(), b.c_str()) < 0; +} + +inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); } +inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; } +inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); } +inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); } + +inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; } +inline bool operator == (const char* a, const TiXmlString & b) { return b == a; } +inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); } +inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); } + +TiXmlString operator + (const TiXmlString & a, const TiXmlString & b); +TiXmlString operator + (const TiXmlString & a, const char* b); +TiXmlString operator + (const char* a, const TiXmlString & b); + + +/* + TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString. + Only the operators that we need for TinyXML have been developped. +*/ +class TiXmlOutStream : public TiXmlString +{ +public : + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const TiXmlString & in) + { + *this += in; + return *this; + } + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const char * in) + { + *this += in; + return *this; + } + +} ; + +#endif // TIXML_STRING_INCLUDED +#endif // TIXML_USE_STL diff --git a/Engine/source/persistence/_tinyXML/tinyxml.cpp b/Engine/source/persistence/_tinyXML/tinyxml.cpp new file mode 100644 index 0000000000..e772107bd4 --- /dev/null +++ b/Engine/source/persistence/_tinyXML/tinyxml.cpp @@ -0,0 +1,1725 @@ +/* +www.sourceforge.net/projects/tinyxml +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +/*#include + +#ifdef TIXML_USE_STL +#include +#include +#endif*/ + +#include "tinyxml.h" +#include "console/console.h" + +bool TiXmlBase::condenseWhiteSpace = true; + +void TiXmlBase::EncodeString( const TIXML_STRING& str, TIXML_STRING* outString ) +{ + int i=0; + + while( i<(int)str.length() ) + { + unsigned char c = (unsigned char) str[i]; + + if ( c == '&' + && i < ( (int)str.length() - 2 ) + && str[i+1] == '#' + && str[i+2] == 'x' ) + { + // Hexadecimal character reference. + // Pass through unchanged. + // © -- copyright symbol, for example. + // + // The -1 is a bug fix from Rob Laveaux. It keeps + // an overflow from happening if there is no ';'. + // There are actually 2 ways to exit this loop - + // while fails (error case) and break (semicolon found). + // However, there is no mechanism (currently) for + // this function to return an error. + while ( i<(int)str.length()-1 ) + { + outString->append( str.c_str() + i, 1 ); + ++i; + if ( str[i] == ';' ) + break; + } + } + else if ( c == '&' ) + { + outString->append( entity[0].str, entity[0].strLength ); + ++i; + } + else if ( c == '<' ) + { + outString->append( entity[1].str, entity[1].strLength ); + ++i; + } + else if ( c == '>' ) + { + outString->append( entity[2].str, entity[2].strLength ); + ++i; + } + else if ( c == '\"' ) + { + outString->append( entity[3].str, entity[3].strLength ); + ++i; + } + else if ( c == '\'' ) + { + outString->append( entity[4].str, entity[4].strLength ); + ++i; + } + else if ( c < 32 ) + { + // Easy pass at non-alpha/numeric/symbol + // Below 32 is symbolic. + char buf[ 32 ]; + + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF( buf, sizeof(buf), "&#x%02X;", (unsigned) ( c & 0xff ) ); + #else + sprintf( buf, "&#x%02X;", (unsigned) ( c & 0xff ) ); + #endif + + //*ME: warning C4267: convert 'size_t' to 'int' + //*ME: Int-Cast to make compiler happy ... + outString->append( buf, (int)strlen( buf ) ); + ++i; + } + else + { + //char realc = (char) c; + //outString->append( &realc, 1 ); + *outString += (char) c; // somewhat more efficient function call. + ++i; + } + } +} + + +TiXmlNode::TiXmlNode( NodeType _type ) : TiXmlBase() +{ + parent = 0; + type = _type; + firstChild = 0; + lastChild = 0; + prev = 0; + next = 0; +} + + +TiXmlNode::~TiXmlNode() +{ + TiXmlNode* node = firstChild; + TiXmlNode* temp = 0; + + while ( node ) + { + temp = node; + node = node->next; + delete temp; + } +} + + +void TiXmlNode::CopyTo( TiXmlNode* target ) const +{ + target->SetValue (value.c_str() ); + target->userData = userData; + target->location = location; +} + + +void TiXmlNode::Clear() +{ + TiXmlNode* node = firstChild; + TiXmlNode* temp = 0; + + while ( node ) + { + temp = node; + node = node->next; + delete temp; + } + + firstChild = 0; + lastChild = 0; +} + + +TiXmlNode* TiXmlNode::LinkEndChild( TiXmlNode* node ) +{ + assert( node->parent == 0 || node->parent == this ); + assert( node->GetDocument() == 0 || node->GetDocument() == this->GetDocument() ); + + if ( node->Type() == TiXmlNode::TINYXML_DOCUMENT ) + { + delete node; + if ( GetDocument() ) + GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + node->parent = this; + + node->prev = lastChild; + node->next = 0; + + if ( lastChild ) + lastChild->next = node; + else + firstChild = node; // it was an empty list. + + lastChild = node; + return node; +} + + +TiXmlNode* TiXmlNode::InsertEndChild( const TiXmlNode& addThis ) +{ + if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) + { + if ( GetDocument() ) + GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + TiXmlNode* node = addThis.Clone(); + if ( !node ) + return 0; + + return LinkEndChild( node ); +} + + +TiXmlNode* TiXmlNode::InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ) +{ + if ( !beforeThis || beforeThis->parent != this ) { + return 0; + } + if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) + { + if ( GetDocument() ) + GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + TiXmlNode* node = addThis.Clone(); + if ( !node ) + return 0; + node->parent = this; + + node->next = beforeThis; + node->prev = beforeThis->prev; + if ( beforeThis->prev ) + { + beforeThis->prev->next = node; + } + else + { + assert( firstChild == beforeThis ); + firstChild = node; + } + beforeThis->prev = node; + return node; +} + + +TiXmlNode* TiXmlNode::InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ) +{ + if ( !afterThis || afterThis->parent != this ) { + return 0; + } + if ( addThis.Type() == TiXmlNode::TINYXML_DOCUMENT ) + { + if ( GetDocument() ) + GetDocument()->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + TiXmlNode* node = addThis.Clone(); + if ( !node ) + return 0; + node->parent = this; + + node->prev = afterThis; + node->next = afterThis->next; + if ( afterThis->next ) + { + afterThis->next->prev = node; + } + else + { + assert( lastChild == afterThis ); + lastChild = node; + } + afterThis->next = node; + return node; +} + + +TiXmlNode* TiXmlNode::ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ) +{ + if ( !replaceThis ) + return 0; + + if ( replaceThis->parent != this ) + return 0; + + if ( withThis.ToDocument() ) { + // A document can never be a child. Thanks to Noam. + TiXmlDocument* document = GetDocument(); + if ( document ) + document->SetError( TIXML_ERROR_DOCUMENT_TOP_ONLY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + TiXmlNode* node = withThis.Clone(); + if ( !node ) + return 0; + + node->next = replaceThis->next; + node->prev = replaceThis->prev; + + if ( replaceThis->next ) + replaceThis->next->prev = node; + else + lastChild = node; + + if ( replaceThis->prev ) + replaceThis->prev->next = node; + else + firstChild = node; + + delete replaceThis; + node->parent = this; + return node; +} + + +bool TiXmlNode::RemoveChild( TiXmlNode* removeThis ) +{ + if ( !removeThis ) { + return false; + } + + if ( removeThis->parent != this ) + { + assert( 0 ); + return false; + } + + if ( removeThis->next ) + removeThis->next->prev = removeThis->prev; + else + lastChild = removeThis->prev; + + if ( removeThis->prev ) + removeThis->prev->next = removeThis->next; + else + firstChild = removeThis->next; + + delete removeThis; + return true; +} + +const TiXmlNode* TiXmlNode::FirstChild( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = firstChild; node; node = node->next ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +const TiXmlNode* TiXmlNode::LastChild( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = lastChild; node; node = node->prev ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +const TiXmlNode* TiXmlNode::IterateChildren( const TiXmlNode* previous ) const +{ + if ( !previous ) + { + return FirstChild(); + } + else + { + assert( previous->parent == this ); + return previous->NextSibling(); + } +} + + +const TiXmlNode* TiXmlNode::IterateChildren( const char * val, const TiXmlNode* previous ) const +{ + if ( !previous ) + { + return FirstChild( val ); + } + else + { + assert( previous->parent == this ); + return previous->NextSibling( val ); + } +} + + +const TiXmlNode* TiXmlNode::NextSibling( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = next; node; node = node->next ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +const TiXmlNode* TiXmlNode::PreviousSibling( const char * _value ) const +{ + const TiXmlNode* node; + for ( node = prev; node; node = node->prev ) + { + if ( strcmp( node->Value(), _value ) == 0 ) + return node; + } + return 0; +} + + +void TiXmlElement::RemoveAttribute( const char * name ) +{ + #ifdef TIXML_USE_STL + TIXML_STRING str( name ); + TiXmlAttribute* node = attributeSet.Find( str ); + #else + TiXmlAttribute* node = attributeSet.Find( name ); + #endif + if ( node ) + { + attributeSet.Remove( node ); + delete node; + } +} + +const TiXmlElement* TiXmlNode::FirstChildElement() const +{ + const TiXmlNode* node; + + for ( node = FirstChild(); + node; + node = node->NextSibling() ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlElement* TiXmlNode::FirstChildElement( const char * _value ) const +{ + const TiXmlNode* node; + + for ( node = FirstChild( _value ); + node; + node = node->NextSibling( _value ) ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlElement* TiXmlNode::NextSiblingElement() const +{ + const TiXmlNode* node; + + for ( node = NextSibling(); + node; + node = node->NextSibling() ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlElement* TiXmlNode::NextSiblingElement( const char * _value ) const +{ + const TiXmlNode* node; + + for ( node = NextSibling( _value ); + node; + node = node->NextSibling( _value ) ) + { + if ( node->ToElement() ) + return node->ToElement(); + } + return 0; +} + + +const TiXmlDocument* TiXmlNode::GetDocument() const +{ + const TiXmlNode* node; + + for( node = this; node; node = node->parent ) + { + if ( node->ToDocument() ) + return node->ToDocument(); + } + return 0; +} + + +TiXmlElement::TiXmlElement (const char * _value) + : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) +{ + firstChild = lastChild = 0; + value = _value; +} + + +#ifdef TIXML_USE_STL +TiXmlElement::TiXmlElement( const std::string& _value ) + : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) +{ + firstChild = lastChild = 0; + value = _value; +} +#endif + + +TiXmlElement::TiXmlElement( const TiXmlElement& copy) + : TiXmlNode( TiXmlNode::TINYXML_ELEMENT ) +{ + firstChild = lastChild = 0; + copy.CopyTo( this ); +} + + +TiXmlElement& TiXmlElement::operator=( const TiXmlElement& base ) +{ + ClearThis(); + base.CopyTo( this ); + return *this; +} + + +TiXmlElement::~TiXmlElement() +{ + ClearThis(); +} + + +void TiXmlElement::ClearThis() +{ + Clear(); + while( attributeSet.First() ) + { + TiXmlAttribute* node = attributeSet.First(); + attributeSet.Remove( node ); + delete node; + } +} + + +const char* TiXmlElement::Attribute( const char* name ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( node ) + return node->Value(); + return 0; +} + + +#ifdef TIXML_USE_STL +const std::string* TiXmlElement::Attribute( const std::string& name ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + if ( attrib ) + return &attrib->ValueStr(); + return 0; +} +#endif + + +const char* TiXmlElement::Attribute( const char* name, int* i ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + const char* result = 0; + + if ( attrib ) { + result = attrib->Value(); + if ( i ) { + attrib->QueryIntValue( i ); + } + } + return result; +} + + +#ifdef TIXML_USE_STL +const std::string* TiXmlElement::Attribute( const std::string& name, int* i ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + const std::string* result = 0; + + if ( attrib ) { + result = &attrib->ValueStr(); + if ( i ) { + attrib->QueryIntValue( i ); + } + } + return result; +} +#endif + + +const char* TiXmlElement::Attribute( const char* name, double* d ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + const char* result = 0; + + if ( attrib ) { + result = attrib->Value(); + if ( d ) { + attrib->QueryDoubleValue( d ); + } + } + return result; +} + + +#ifdef TIXML_USE_STL +const std::string* TiXmlElement::Attribute( const std::string& name, double* d ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + const std::string* result = 0; + + if ( attrib ) { + result = &attrib->ValueStr(); + if ( d ) { + attrib->QueryDoubleValue( d ); + } + } + return result; +} +#endif + + +int TiXmlElement::QueryIntAttribute( const char* name, int* ival ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + if ( !attrib ) + return TIXML_NO_ATTRIBUTE; + return attrib->QueryIntValue( ival ); +} + + +int TiXmlElement::QueryUnsignedAttribute( const char* name, unsigned* value ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + + int ival = 0; + int result = node->QueryIntValue( &ival ); + *value = (unsigned)ival; + return result; +} + + +int TiXmlElement::QueryBoolAttribute( const char* name, bool* bval ) const +{ + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + + int result = TIXML_WRONG_TYPE; + if ( StringEqual( node->Value(), "true", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "yes", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "1", true, TIXML_ENCODING_UNKNOWN ) ) + { + *bval = true; + result = TIXML_SUCCESS; + } + else if ( StringEqual( node->Value(), "false", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "no", true, TIXML_ENCODING_UNKNOWN ) + || StringEqual( node->Value(), "0", true, TIXML_ENCODING_UNKNOWN ) ) + { + *bval = false; + result = TIXML_SUCCESS; + } + return result; +} + + + +#ifdef TIXML_USE_STL +int TiXmlElement::QueryIntAttribute( const std::string& name, int* ival ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + if ( !attrib ) + return TIXML_NO_ATTRIBUTE; + return attrib->QueryIntValue( ival ); +} +#endif + + +int TiXmlElement::QueryDoubleAttribute( const char* name, double* dval ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + if ( !attrib ) + return TIXML_NO_ATTRIBUTE; + return attrib->QueryDoubleValue( dval ); +} + + +#ifdef TIXML_USE_STL +int TiXmlElement::QueryDoubleAttribute( const std::string& name, double* dval ) const +{ + const TiXmlAttribute* attrib = attributeSet.Find( name ); + if ( !attrib ) + return TIXML_NO_ATTRIBUTE; + return attrib->QueryDoubleValue( dval ); +} +#endif + + +void TiXmlElement::SetAttribute( const char * name, int val ) +{ + TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); + if ( attrib ) { + attrib->SetIntValue( val ); + } +} + + +#ifdef TIXML_USE_STL +void TiXmlElement::SetAttribute( const std::string& name, int val ) +{ + TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); + if ( attrib ) { + attrib->SetIntValue( val ); + } +} +#endif + + +void TiXmlElement::SetDoubleAttribute( const char * name, double val ) +{ + TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); + if ( attrib ) { + attrib->SetDoubleValue( val ); + } +} + + +#ifdef TIXML_USE_STL +void TiXmlElement::SetDoubleAttribute( const std::string& name, double val ) +{ + TiXmlAttribute* attrib = attributeSet.FindOrCreate( name ); + if ( attrib ) { + attrib->SetDoubleValue( val ); + } +} +#endif + + +void TiXmlElement::SetAttribute( const char * cname, const char * cvalue ) +{ + TiXmlAttribute* attrib = attributeSet.FindOrCreate( cname ); + if ( attrib ) { + attrib->SetValue( cvalue ); + } +} + + +#ifdef TIXML_USE_STL +void TiXmlElement::SetAttribute( const std::string& _name, const std::string& _value ) +{ + TiXmlAttribute* attrib = attributeSet.FindOrCreate( _name ); + if ( attrib ) { + attrib->SetValue( _value ); + } +} +#endif + + +void TiXmlElement::Print( FileStream& stream, int depth ) const +{ + int i; + for ( i=0; iNext() ) + { + stream.writeString("\n"); + attrib->Print( stream, depth+1 ); + } + + // There are 3 different formatting approaches: + // 1) An element without children is printed as a node + // 2) An element with only a text child is printed as text + // 3) An element with children is printed on multiple lines. + TiXmlNode* node; + if ( !firstChild ) + { + stream.writeString( " />" ); + } + else if ( firstChild == lastChild && firstChild->ToText() ) + { + stream.writeString(">"); + firstChild->Print( stream, depth + 1 ); + stream.writeFormattedBuffer( "", value.c_str() ); + } + else + { + stream.writeString(">"); + + for ( node = firstChild; node; node=node->NextSibling() ) + { + if ( !node->ToText() ) + { + stream.writeString("\n"); + } + node->Print( stream, depth+1 ); + } + stream.writeString("\n"); + for( i=0; i", value.c_str() ); + } +} + + +void TiXmlElement::CopyTo( TiXmlElement* target ) const +{ + // superclass: + TiXmlNode::CopyTo( target ); + + // Element class: + // Clone the attributes, then clone the children. + const TiXmlAttribute* attribute = 0; + for( attribute = attributeSet.First(); + attribute; + attribute = attribute->Next() ) + { + target->SetAttribute( attribute->Name(), attribute->Value() ); + } + + TiXmlNode* node = 0; + for ( node = firstChild; node; node = node->NextSibling() ) + { + target->LinkEndChild( node->Clone() ); + } +} + +bool TiXmlElement::Accept( TiXmlVisitor* visitor ) const +{ + if ( visitor->VisitEnter( *this, attributeSet.First() ) ) + { + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + if ( !node->Accept( visitor ) ) + break; + } + } + return visitor->VisitExit( *this ); +} + + +TiXmlNode* TiXmlElement::Clone() const +{ + TiXmlElement* clone = new TiXmlElement( Value() ); + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +const char* TiXmlElement::GetText() const +{ + const TiXmlNode* child = this->FirstChild(); + if ( child ) { + const TiXmlText* childText = child->ToText(); + if ( childText ) { + return childText->Value(); + } + } + return 0; +} + + +TiXmlDocument::TiXmlDocument() : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) +{ + tabsize = 4; + useMicrosoftBOM = false; + ClearError(); +} + +TiXmlDocument::TiXmlDocument( const char * documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) +{ + tabsize = 4; + useMicrosoftBOM = false; + value = documentName; + ClearError(); +} + + +#ifdef TIXML_USE_STL +TiXmlDocument::TiXmlDocument( const std::string& documentName ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) +{ + tabsize = 4; + useMicrosoftBOM = false; + value = documentName; + ClearError(); +} +#endif + + +TiXmlDocument::TiXmlDocument( const TiXmlDocument& copy ) : TiXmlNode( TiXmlNode::TINYXML_DOCUMENT ) +{ + copy.CopyTo( this ); +} + + +TiXmlDocument& TiXmlDocument::operator=( const TiXmlDocument& copy ) +{ + Clear(); + copy.CopyTo( this ); + return *this; +} + +bool TiXmlDocument::LoadFile( TiXmlEncoding encoding ) +{ + return LoadFile( Value(), encoding ); +} + + +bool TiXmlDocument::SaveFile() const +{ + return SaveFile( Value() ); +} + +bool TiXmlDocument::LoadFile( const char* _filename, TiXmlEncoding encoding ) +{ + TIXML_STRING filename( _filename ); + value = filename; + + // reading in binary mode so that tinyxml can normalize the EOL + FileStream stream; + const bool status = stream.open(_filename, Torque::FS::File::Read); + if ( status ) + { + bool result = LoadFile( stream, encoding ); + stream.close(); + return result; + } + else + { + SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } +} + +bool TiXmlDocument::LoadFile( FileStream &stream, TiXmlEncoding encoding ) +{ + // Delete the existing data: + Clear(); + location.Clear(); + + // Get the file size, so we can pre-allocate the string. HUGE speed impact. + long length = stream.getStreamSize(); + + // Strange case, but good to handle up front. + if ( length <= 0 ) + { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // Subtle bug here. TinyXml did use fgets. But from the XML spec: + // 2.11 End-of-Line Handling + // + // + // ...the XML processor MUST behave as if it normalized all line breaks in external + // parsed entities (including the document entity) on input, before parsing, by translating + // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to + // a single #xA character. + // + // + // It is not clear fgets does that, and certainly isn't clear it works cross platform. + // Generally, you expect fgets to translate from the convention of the OS to the c/unix + // convention, and not work generally. + + /* + while( fgets( buf, sizeof(buf), file ) ) + { + data += buf; + } + */ + + char* buf = new char[ length+1 ]; + buf[0] = 0; + + if ( !stream.read( (U32)length, buf ) ) { + delete [] buf; + SetError( TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // Process the buffer in place to normalize new lines. (See comment above.) + // Copies from the 'p' to 'q' pointer, where p can advance faster if + // a newline-carriage return is hit. + // + // Wikipedia: + // Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or + // CR (Carriage return, '\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, 0x0D 0x0A)... + // * LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others + // * CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS + // * CR: Commodore 8-bit machines, Apple II family, Mac OS up to version 9 and OS-9 + + const char* p = buf; // the read head + char* q = buf; // the write head + const char CR = 0x0d; + const char LF = 0x0a; + + buf[length] = 0; + while( *p ) { + assert( p < (buf+length) ); + assert( q <= (buf+length) ); + assert( q <= p ); + + if ( *p == CR ) { + *q++ = LF; + p++; + if ( *p == LF ) { // check for CR+LF (and skip LF) + p++; + } + } + else { + *q++ = *p++; + } + } + assert( q <= (buf+length) ); + *q = 0; + + Parse( buf, 0, encoding ); + + delete [] buf; + return !Error(); +} + + +bool TiXmlDocument::SaveFile( const char * filename ) const +{ + FileStream stream; + const bool status = stream.open( filename, Torque::FS::File::Write ); + if ( status ) + { + bool result = SaveFile( stream ); + stream.close(); + return result; + } + return false; +} + + +bool TiXmlDocument::SaveFile( FileStream &stream ) const +{ + if ( useMicrosoftBOM ) + { + const unsigned char TIXML_UTF_LEAD_0 = 0xefU; + const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; + const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + + stream.write( TIXML_UTF_LEAD_0 ); + stream.write( TIXML_UTF_LEAD_1 ); + stream.write( TIXML_UTF_LEAD_2 ); + } + Print( stream, 0 ); + return true; +} + + +void TiXmlDocument::CopyTo( TiXmlDocument* target ) const +{ + TiXmlNode::CopyTo( target ); + + target->error = error; + target->errorId = errorId; + target->errorDesc = errorDesc; + target->tabsize = tabsize; + target->errorLocation = errorLocation; + target->useMicrosoftBOM = useMicrosoftBOM; + + TiXmlNode* node = 0; + for ( node = firstChild; node; node = node->NextSibling() ) + { + target->LinkEndChild( node->Clone() ); + } +} + + +TiXmlNode* TiXmlDocument::Clone() const +{ + TiXmlDocument* clone = new TiXmlDocument(); + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +void TiXmlDocument::Print( FileStream& stream, int depth ) const +{ + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + node->Print( stream, depth ); + stream.writeString( "\n" ); + } +} + +bool TiXmlDocument::Accept( TiXmlVisitor* visitor ) const +{ + if ( visitor->VisitEnter( *this ) ) + { + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + if ( !node->Accept( visitor ) ) + break; + } + } + return visitor->VisitExit( *this ); +} + + +const TiXmlAttribute* TiXmlAttribute::Next() const +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( next->value.empty() && next->name.empty() ) + return 0; + return next; +} + +/* +TiXmlAttribute* TiXmlAttribute::Next() +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( next->value.empty() && next->name.empty() ) + return 0; + return next; +} +*/ + +const TiXmlAttribute* TiXmlAttribute::Previous() const +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( prev->value.empty() && prev->name.empty() ) + return 0; + return prev; +} + +/* +TiXmlAttribute* TiXmlAttribute::Previous() +{ + // We are using knowledge of the sentinel. The sentinel + // have a value or name. + if ( prev->value.empty() && prev->name.empty() ) + return 0; + return prev; +} +*/ + +void TiXmlAttribute::Print( FileStream& stream, int depth, TIXML_STRING* str ) const +{ + TIXML_STRING n, v; + + EncodeString( name, &n ); + EncodeString( value, &v ); + + for ( int i=0; i< depth; i++ ) { + stream.writeString( " " ); + } + + if (value.find ('\"') == TIXML_STRING::npos) { + const char* pValue = v.c_str(); + stream.writeFormattedBuffer( "%s=\"%s\"", n.c_str(), pValue ); + if ( str ) { + (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; + } + } + else { + stream.writeFormattedBuffer( "%s='%s'", n.c_str(), v.c_str() ); + if ( str ) { + (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; + } + } +} + + +int TiXmlAttribute::QueryIntValue( int* ival ) const +{ + if ( TIXML_SSCANF( value.c_str(), "%d", ival ) == 1 ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; +} + +int TiXmlAttribute::QueryDoubleValue( double* dval ) const +{ + if ( TIXML_SSCANF( value.c_str(), "%lf", dval ) == 1 ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; +} + +void TiXmlAttribute::SetIntValue( int _value ) +{ + char buf [64]; + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF(buf, sizeof(buf), "%d", _value); + #else + sprintf (buf, "%d", _value); + #endif + SetValue (buf); +} + +void TiXmlAttribute::SetDoubleValue( double _value ) +{ + char buf [256]; + #if defined(TIXML_SNPRINTF) + TIXML_SNPRINTF( buf, sizeof(buf), "%g", _value); + #else + sprintf (buf, "%g", _value); + #endif + SetValue (buf); +} + +int TiXmlAttribute::IntValue() const +{ + return atoi (value.c_str ()); +} + +double TiXmlAttribute::DoubleValue() const +{ + return atof (value.c_str ()); +} + + +TiXmlComment::TiXmlComment( const TiXmlComment& copy ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) +{ + copy.CopyTo( this ); +} + + +TiXmlComment& TiXmlComment::operator=( const TiXmlComment& base ) +{ + Clear(); + base.CopyTo( this ); + return *this; +} + + +void TiXmlComment::Print( FileStream& stream, int depth ) const +{ + for ( int i=0; i", value.c_str() ); +} + + +void TiXmlComment::CopyTo( TiXmlComment* target ) const +{ + TiXmlNode::CopyTo( target ); +} + + +bool TiXmlComment::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlComment::Clone() const +{ + TiXmlComment* clone = new TiXmlComment(); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +void TiXmlText::Print( FileStream& stream, int depth ) const +{ + if ( cdata ) + { + int i; + stream.writeString( "\n" ); + for ( i=0; i\n", value.c_str() ); // unformatted output + } + else + { + TIXML_STRING buffer; + EncodeString( value, &buffer ); + stream.writeFormattedBuffer( "%s", buffer.c_str() ); + } +} + + +void TiXmlText::CopyTo( TiXmlText* target ) const +{ + TiXmlNode::CopyTo( target ); + target->cdata = cdata; +} + + +bool TiXmlText::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlText::Clone() const +{ + TiXmlText* clone = 0; + clone = new TiXmlText( "" ); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +TiXmlDeclaration::TiXmlDeclaration( const char * _version, + const char * _encoding, + const char * _standalone ) + : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) +{ + version = _version; + encoding = _encoding; + standalone = _standalone; +} + + +#ifdef TIXML_USE_STL +TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, + const std::string& _encoding, + const std::string& _standalone ) + : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) +{ + version = _version; + encoding = _encoding; + standalone = _standalone; +} +#endif + + +TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) + : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) +{ + copy.CopyTo( this ); +} + + +TiXmlDeclaration& TiXmlDeclaration::operator=( const TiXmlDeclaration& copy ) +{ + Clear(); + copy.CopyTo( this ); + return *this; +} + + +void TiXmlDeclaration::Print( FileStream& stream, int /*depth*/, TIXML_STRING* str ) const +{ + stream.writeString( "" ); + if ( str ) (*str) += "?>"; +} + + +void TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const +{ + TiXmlNode::CopyTo( target ); + + target->version = version; + target->encoding = encoding; + target->standalone = standalone; +} + + +bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlDeclaration::Clone() const +{ + TiXmlDeclaration* clone = new TiXmlDeclaration(); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +void TiXmlUnknown::Print( FileStream& stream, int depth ) const +{ + for ( int i=0; i", value.c_str() ); +} + + +void TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const +{ + TiXmlNode::CopyTo( target ); +} + + +bool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const +{ + return visitor->Visit( *this ); +} + + +TiXmlNode* TiXmlUnknown::Clone() const +{ + TiXmlUnknown* clone = new TiXmlUnknown(); + + if ( !clone ) + return 0; + + CopyTo( clone ); + return clone; +} + + +TiXmlAttributeSet::TiXmlAttributeSet() +{ + sentinel.next = &sentinel; + sentinel.prev = &sentinel; +} + + +TiXmlAttributeSet::~TiXmlAttributeSet() +{ + assert( sentinel.next == &sentinel ); + assert( sentinel.prev == &sentinel ); +} + + +void TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) +{ + #ifdef TIXML_USE_STL + assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set. + #else + assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set. + #endif + + addMe->next = &sentinel; + addMe->prev = sentinel.prev; + + sentinel.prev->next = addMe; + sentinel.prev = addMe; +} + +void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) +{ + TiXmlAttribute* node; + + for( node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( node == removeMe ) + { + node->prev->next = node->next; + node->next->prev = node->prev; + node->next = 0; + node->prev = 0; + return; + } + } + assert( 0 ); // we tried to remove a non-linked attribute. +} + + +#ifdef TIXML_USE_STL +TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const +{ + for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( node->name == name ) + return node; + } + return 0; +} + +TiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const std::string& _name ) +{ + TiXmlAttribute* attrib = Find( _name ); + if ( !attrib ) { + attrib = new TiXmlAttribute(); + Add( attrib ); + attrib->SetName( _name ); + } + return attrib; +} +#endif + + +TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const +{ + for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) + { + if ( strcmp( node->name.c_str(), name ) == 0 ) + return node; + } + return 0; +} + + +TiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const char* _name ) +{ + TiXmlAttribute* attrib = Find( _name ); + if ( !attrib ) { + attrib = new TiXmlAttribute(); + Add( attrib ); + attrib->SetName( _name ); + } + return attrib; +} + + +#ifdef TIXML_USE_STL +std::istream& operator>> (std::istream & in, TiXmlNode & base) +{ + TIXML_STRING tag; + tag.reserve( 8 * 1000 ); + base.StreamIn( &in, &tag ); + + base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING ); + return in; +} +#endif + + +#ifdef TIXML_USE_STL +std::ostream& operator<< (std::ostream & out, const TiXmlNode & base) +{ + TiXmlPrinter printer; + printer.SetStreamPrinting(); + base.Accept( &printer ); + out << printer.Str(); + + return out; +} + + +std::string& operator<< (std::string& out, const TiXmlNode& base ) +{ + TiXmlPrinter printer; + printer.SetStreamPrinting(); + base.Accept( &printer ); + out.append( printer.Str() ); + + return out; +} +#endif + + +TiXmlHandle TiXmlHandle::FirstChild() const +{ + if ( node ) + { + TiXmlNode* child = node->FirstChild(); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::FirstChild( const char * value ) const +{ + if ( node ) + { + TiXmlNode* child = node->FirstChild( value ); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::FirstChildElement() const +{ + if ( node ) + { + TiXmlElement* child = node->FirstChildElement(); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const +{ + if ( node ) + { + TiXmlElement* child = node->FirstChildElement( value ); + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::Child( int count ) const +{ + if ( node ) + { + int i; + TiXmlNode* child = node->FirstChild(); + for ( i=0; + child && iNextSibling(), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::Child( const char* value, int count ) const +{ + if ( node ) + { + int i; + TiXmlNode* child = node->FirstChild( value ); + for ( i=0; + child && iNextSibling( value ), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::ChildElement( int count ) const +{ + if ( node ) + { + int i; + TiXmlElement* child = node->FirstChildElement(); + for ( i=0; + child && iNextSiblingElement(), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} + + +TiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const +{ + if ( node ) + { + int i; + TiXmlElement* child = node->FirstChildElement( value ); + for ( i=0; + child && iNextSiblingElement( value ), ++i ) + { + // nothing + } + if ( child ) + return TiXmlHandle( child ); + } + return TiXmlHandle( 0 ); +} diff --git a/Engine/source/persistence/_tinyXML/tinyxml.h b/Engine/source/persistence/_tinyXML/tinyxml.h new file mode 100644 index 0000000000..0835bd6da3 --- /dev/null +++ b/Engine/source/persistence/_tinyXML/tinyxml.h @@ -0,0 +1,1725 @@ +/* +www.sourceforge.net/projects/tinyxml +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + + +#ifndef TINYXML_INCLUDED +#define TINYXML_INCLUDED + +#ifndef _FILESTREAM_H_ +#include "core/stream/fileStream.h" +#endif + +#ifdef _MSC_VER +#pragma warning( push ) +#pragma warning( disable : 4530 ) +#pragma warning( disable : 4786 ) +#endif + +#include +#include +#include +#include +#include + +// Help out windows: +#if defined( _DEBUG ) && !defined( DEBUG ) +#define DEBUG +#endif + +#ifdef TIXML_USE_STL + #include + #include + #include + #define TIXML_STRING std::string +#else + #include "tinystr.h" + #define TIXML_STRING TiXmlString +#endif + +// Deprecated library function hell. Compilers want to use the +// new safe versions. This probably doesn't fully address the problem, +// but it gets closer. There are too many compilers for me to fully +// test. If you get compilation troubles, undefine TIXML_SAFE +#define TIXML_SAFE + +#ifdef TIXML_SAFE + #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) + // Microsoft visual studio, version 2005 and higher. + #define TIXML_SNPRINTF _snprintf_s + #define TIXML_SSCANF sscanf_s + #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + //#pragma message( "Using _sn* functions." ) + #define TIXML_SNPRINTF _snprintf + #define TIXML_SSCANF sscanf + #elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + //#warning( "Using sn* functions." ) + #define TIXML_SNPRINTF snprintf + #define TIXML_SSCANF sscanf + #else + #define TIXML_SNPRINTF snprintf + #define TIXML_SSCANF sscanf + #endif +#endif + +class TiXmlDocument; +class TiXmlElement; +class TiXmlComment; +class TiXmlUnknown; +class TiXmlAttribute; +class TiXmlText; +class TiXmlDeclaration; +class TiXmlParsingData; + +const int TIXML_MAJOR_VERSION = 2; +const int TIXML_MINOR_VERSION = 6; +const int TIXML_PATCH_VERSION = 2; + +/* Internal structure for tracking location of items + in the XML file. +*/ +struct TiXmlCursor +{ + TiXmlCursor() { Clear(); } + void Clear() { row = col = -1; } + + int row; // 0 based. + int col; // 0 based. +}; + + +/** + Implements the interface to the "Visitor pattern" (see the Accept() method.) + If you call the Accept() method, it requires being passed a TiXmlVisitor + class to handle callbacks. For nodes that contain other nodes (Document, Element) + you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves + are simply called with Visit(). + + If you return 'true' from a Visit method, recursive parsing will continue. If you return + false, no children of this node or its sibilings will be Visited. + + All flavors of Visit methods have a default implementation that returns 'true' (continue + visiting). You need to only override methods that are interesting to you. + + Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. + + You should never change the document from a callback. + + @sa TiXmlNode::Accept() +*/ +class TiXmlVisitor +{ +public: + virtual ~TiXmlVisitor() {} + + /// Visit a document. + virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } + /// Visit a document. + virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } + + /// Visit an element. + virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } + /// Visit an element. + virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } + + /// Visit a declaration + virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } + /// Visit a text node + virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } + /// Visit a comment node + virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } + /// Visit an unknown node + virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } +}; + +// Only used by Attribute::Query functions +enum +{ + TIXML_SUCCESS, + TIXML_NO_ATTRIBUTE, + TIXML_WRONG_TYPE +}; + + +// Used by the parsing routines. +enum TiXmlEncoding +{ + TIXML_ENCODING_UNKNOWN, + TIXML_ENCODING_UTF8, + TIXML_ENCODING_LEGACY +}; + +const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; + +/** TiXmlBase is a base class for every class in TinyXml. + It does little except to establish that TinyXml classes + can be printed and provide some utility functions. + + In XML, the document and elements can contain + other elements and other types of nodes. + + @verbatim + A Document can contain: Element (container or leaf) + Comment (leaf) + Unknown (leaf) + Declaration( leaf ) + + An Element can contain: Element (container or leaf) + Text (leaf) + Attributes (not on tree) + Comment (leaf) + Unknown (leaf) + + A Decleration contains: Attributes (not on tree) + @endverbatim +*/ +class TiXmlBase +{ + friend class TiXmlNode; + friend class TiXmlElement; + friend class TiXmlDocument; + +public: + TiXmlBase() : userData(0) {} + virtual ~TiXmlBase() {} + + /** All TinyXml classes can print themselves to a filestream + or the string class (TiXmlString in non-STL mode, std::string + in STL mode.) Either or both cfile and str can be null. + + This is a formatted print, and will insert + tabs and newlines. + + (For an unformatted stream, use the << operator.) + */ + virtual void Print( FileStream& stream, int depth ) const = 0; + + /** The world does not agree on whether white space should be kept or + not. In order to make everyone happy, these global, static functions + are provided to set whether or not TinyXml will condense all white space + into a single space or not. The default is to condense. Note changing this + value is not thread safe. + */ + static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } + + /// Return the current white space setting. + static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } + + /** Return the position, in the original source file, of this node or attribute. + The row and column are 1-based. (That is the first row and first column is + 1,1). If the returns values are 0 or less, then the parser does not have + a row and column value. + + Generally, the row and column value will be set when the TiXmlDocument::Load(), + TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set + when the DOM was created from operator>>. + + The values reflect the initial load. Once the DOM is modified programmatically + (by adding or changing nodes and attributes) the new values will NOT update to + reflect changes in the document. + + There is a minor performance cost to computing the row and column. Computation + can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. + + @sa TiXmlDocument::SetTabSize() + */ + int Row() const { return location.row + 1; } + int Column() const { return location.col + 1; } ///< See Row() + + void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. + void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. + const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. + + // Table that returs, for a given lead byte, the total number of bytes + // in the UTF-8 sequence. + static const int utf8ByteTable[256]; + + virtual const char* Parse( const char* p, + TiXmlParsingData* data, + TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; + + /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, + or they will be transformed into entities! + */ + static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); + + enum + { + TIXML_NO_ERROR = 0, + TIXML_ERROR, + TIXML_ERROR_OPENING_FILE, + TIXML_ERROR_PARSING_ELEMENT, + TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, + TIXML_ERROR_READING_ELEMENT_VALUE, + TIXML_ERROR_READING_ATTRIBUTES, + TIXML_ERROR_PARSING_EMPTY, + TIXML_ERROR_READING_END_TAG, + TIXML_ERROR_PARSING_UNKNOWN, + TIXML_ERROR_PARSING_COMMENT, + TIXML_ERROR_PARSING_DECLARATION, + TIXML_ERROR_DOCUMENT_EMPTY, + TIXML_ERROR_EMBEDDED_NULL, + TIXML_ERROR_PARSING_CDATA, + TIXML_ERROR_DOCUMENT_TOP_ONLY, + + TIXML_ERROR_STRING_COUNT + }; + +protected: + + static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); + + inline static bool IsWhiteSpace( char c ) + { + return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); + } + inline static bool IsWhiteSpace( int c ) + { + if ( c < 256 ) + return IsWhiteSpace( (char) c ); + return false; // Again, only truly correct for English/Latin...but usually works. + } + + #ifdef TIXML_USE_STL + static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); + static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); + #endif + + /* Reads an XML name into the string provided. Returns + a pointer just past the last character of the name, + or 0 if the function has an error. + */ + static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); + + /* Reads text. Returns a pointer past the given end tag. + Wickedly complex options, but it keeps the (sensitive) code in one place. + */ + static const char* ReadText( const char* in, // where to start + TIXML_STRING* text, // the string read + bool ignoreWhiteSpace, // whether to keep the white space + const char* endTag, // what ends this text + bool ignoreCase, // whether to ignore case in the end tag + TiXmlEncoding encoding ); // the current encoding + + // If an entity has been found, transform it into a character. + static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); + + // Get a character, while interpreting entities. + // The length can be from 0 to 4 bytes. + inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) + { + assert( p ); + if ( encoding == TIXML_ENCODING_UTF8 ) + { + *length = utf8ByteTable[ *((const unsigned char*)p) ]; + assert( *length >= 0 && *length < 5 ); + } + else + { + *length = 1; + } + + if ( *length == 1 ) + { + if ( *p == '&' ) + return GetEntity( p, _value, length, encoding ); + *_value = *p; + return p+1; + } + else if ( *length ) + { + //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), + // and the null terminator isn't needed + for( int i=0; p[i] && i<*length; ++i ) { + _value[i] = p[i]; + } + return p + (*length); + } + else + { + // Not valid text. + return 0; + } + } + + // Return true if the next characters in the stream are any of the endTag sequences. + // Ignore case only works for english, and should only be relied on when comparing + // to English words: StringEqual( p, "version", true ) is fine. + static bool StringEqual( const char* p, + const char* endTag, + bool ignoreCase, + TiXmlEncoding encoding ); + + static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; + + TiXmlCursor location; + + /// Field containing a generic user pointer + void* userData; + + // None of these methods are reliable for any language except English. + // Good for approximation, not great for accuracy. + static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); + static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); + inline static int ToLower( int v, TiXmlEncoding encoding ) + { + if ( encoding == TIXML_ENCODING_UTF8 ) + { + if ( v < 128 ) return tolower( v ); + return v; + } + else + { + return tolower( v ); + } + } + static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); + +private: + TiXmlBase( const TiXmlBase& ); // not implemented. + void operator=( const TiXmlBase& base ); // not allowed. + + struct Entity + { + const char* str; + unsigned int strLength; + char chr; + }; + enum + { + NUM_ENTITY = 5, + MAX_ENTITY_LENGTH = 6 + + }; + static Entity entity[ NUM_ENTITY ]; + static bool condenseWhiteSpace; +}; + + +/** The parent class for everything in the Document Object Model. + (Except for attributes). + Nodes have siblings, a parent, and children. A node can be + in a document, or stand on its own. The type of a TiXmlNode + can be queried, and it can be cast to its more defined type. +*/ +class TiXmlNode : public TiXmlBase +{ + friend class TiXmlDocument; + friend class TiXmlElement; + +public: + #ifdef TIXML_USE_STL + + /** An input stream operator, for every class. Tolerant of newlines and + formatting, but doesn't expect them. + */ + friend std::istream& operator >> (std::istream& in, TiXmlNode& base); + + /** An output stream operator, for every class. Note that this outputs + without any newlines or formatting, as opposed to Print(), which + includes tabs and new lines. + + The operator<< and operator>> are not completely symmetric. Writing + a node to a stream is very well defined. You'll get a nice stream + of output, without any extra whitespace or newlines. + + But reading is not as well defined. (As it always is.) If you create + a TiXmlElement (for example) and read that from an input stream, + the text needs to define an element or junk will result. This is + true of all input streams, but it's worth keeping in mind. + + A TiXmlDocument will read nodes until it reads a root element, and + all the children of that root element. + */ + friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); + + /// Appends the XML node or attribute to a std::string. + friend std::string& operator<< (std::string& out, const TiXmlNode& base ); + + #endif + + /** The types of XML nodes supported by TinyXml. (All the + unsupported types are picked up by UNKNOWN.) + */ + enum NodeType + { + TINYXML_DOCUMENT, + TINYXML_ELEMENT, + TINYXML_COMMENT, + TINYXML_UNKNOWN, + TINYXML_TEXT, + TINYXML_DECLARATION, + TINYXML_TYPECOUNT + }; + + virtual ~TiXmlNode(); + + /** The meaning of 'value' changes for the specific type of + TiXmlNode. + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + + The subclasses will wrap this function. + */ + const char *Value() const { return value.c_str (); } + + #ifdef TIXML_USE_STL + /** Return Value() as a std::string. If you only use STL, + this is more efficient than calling Value(). + Only available in STL mode. + */ + const std::string& ValueStr() const { return value; } + #endif + + const TIXML_STRING& ValueTStr() const { return value; } + + /** Changes the value of the node. Defined as: + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + */ + void SetValue(const char * _value) { value = _value;} + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Delete all the children of this node. Does not affect 'this'. + void Clear(); + + /// One step up the DOM. + TiXmlNode* Parent() { return parent; } + const TiXmlNode* Parent() const { return parent; } + + const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. + TiXmlNode* FirstChild() { return firstChild; } + const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. + /// The first child of this node with the matching 'value'. Will be null if none found. + TiXmlNode* FirstChild( const char * _value ) { + // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) + // call the method, cast the return back to non-const. + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); + } + const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. + TiXmlNode* LastChild() { return lastChild; } + + const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. + TiXmlNode* LastChild( const char * _value ) { + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. + #endif + + /** An alternate way to walk the children of a node. + One way to iterate over nodes is: + @verbatim + for( child = parent->FirstChild(); child; child = child->NextSibling() ) + @endverbatim + + IterateChildren does the same thing with the syntax: + @verbatim + child = 0; + while( child = parent->IterateChildren( child ) ) + @endverbatim + + IterateChildren takes the previous child as input and finds + the next one. If the previous child is null, it returns the + first. IterateChildren will return null when done. + */ + const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); + } + + /// This flavor of IterateChildren searches for children with a particular 'value' + const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + #endif + + /** Add a new node related to this. Adds a child past the LastChild. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); + + + /** Add a new node related to this. Adds a child past the LastChild. + + NOTE: the node to be added is passed by pointer, and will be + henceforth owned (and deleted) by tinyXml. This method is efficient + and avoids an extra copy, but should be used with care as it + uses a different memory model than the other insert functions. + + @sa InsertEndChild + */ + TiXmlNode* LinkEndChild( TiXmlNode* addThis ); + + /** Add a new node related to this. Adds a child before the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); + + /** Add a new node related to this. Adds a child after the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); + + /** Replace a child of this node. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); + + /// Delete a child of this node. + bool RemoveChild( TiXmlNode* removeThis ); + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling() const { return prev; } + TiXmlNode* PreviousSibling() { return prev; } + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling( const char * ) const; + TiXmlNode* PreviousSibling( const char *_prev ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Navigate to a sibling node. + const TiXmlNode* NextSibling() const { return next; } + TiXmlNode* NextSibling() { return next; } + + /// Navigate to a sibling node with the given 'value'. + const TiXmlNode* NextSibling( const char * ) const; + TiXmlNode* NextSibling( const char* _next ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement() const; + TiXmlElement* NextSiblingElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement( const char * ) const; + TiXmlElement* NextSiblingElement( const char *_next ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement() const; + TiXmlElement* FirstChildElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); + } + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement( const char * _value ) const; + TiXmlElement* FirstChildElement( const char * _value ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /** Query the type (as an enumerated value, above) of this node. + The possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, + TINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION. + */ + int Type() const { return type; } + + /** Return a pointer to the Document this node lives in. + Returns null if not in a document. + */ + const TiXmlDocument* GetDocument() const; + TiXmlDocument* GetDocument() { + return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); + } + + /// Returns true if this node has no children. + bool NoChildren() const { return !firstChild; } + + virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + /** Create an exact duplicate of this node and return it. The memory must be deleted + by the caller. + */ + virtual TiXmlNode* Clone() const = 0; + + /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the + XML tree will be conditionally visited and the host will be called back + via the TiXmlVisitor interface. + + This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse + the XML for the callbacks, so the performance of TinyXML is unchanged by using this + interface versus any other.) + + The interface has been based on ideas from: + + - http://www.saxproject.org/ + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + + Which are both good references for "visiting". + + An example of using Accept(): + @verbatim + TiXmlPrinter printer; + tinyxmlDoc.Accept( &printer ); + const char* xmlcstr = printer.CStr(); + @endverbatim + */ + virtual bool Accept( TiXmlVisitor* visitor ) const = 0; + +protected: + TiXmlNode( NodeType _type ); + + // Copy to the allocated object. Shared functionality between Clone, Copy constructor, + // and the assignment operator. + void CopyTo( TiXmlNode* target ) const; + + #ifdef TIXML_USE_STL + // The real work of the input operator. + virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; + #endif + + // Figure out what is at *p, and parse it. Returns null if it is not an xml node. + TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); + + TiXmlNode* parent; + NodeType type; + + TiXmlNode* firstChild; + TiXmlNode* lastChild; + + TIXML_STRING value; + + TiXmlNode* prev; + TiXmlNode* next; + +private: + TiXmlNode( const TiXmlNode& ); // not implemented. + void operator=( const TiXmlNode& base ); // not allowed. +}; + + +/** An attribute is a name-value pair. Elements have an arbitrary + number of attributes, each with a unique name. + + @note The attributes are not TiXmlNodes, since they are not + part of the tinyXML document object model. There are other + suggested ways to look at this problem. +*/ +class TiXmlAttribute : public TiXmlBase +{ + friend class TiXmlAttributeSet; + +public: + /// Construct an empty attribute. + TiXmlAttribute() : TiXmlBase() + { + document = 0; + prev = next = 0; + } + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlAttribute( const std::string& _name, const std::string& _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + #endif + + /// Construct an attribute with a name and value. + TiXmlAttribute( const char * _name, const char * _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + + const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. + const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. + #ifdef TIXML_USE_STL + const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. + #endif + int IntValue() const; ///< Return the value of this attribute, converted to an integer. + double DoubleValue() const; ///< Return the value of this attribute, converted to a double. + + // Get the tinyxml string representation + const TIXML_STRING& NameTStr() const { return name; } + + /** QueryIntValue examines the value string. It is an alternative to the + IntValue() method with richer error checking. + If the value is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. + + A specialized but useful call. Note that for success it returns 0, + which is the opposite of almost all other TinyXml calls. + */ + int QueryIntValue( int* _value ) const; + /// QueryDoubleValue examines the value string. See QueryIntValue(). + int QueryDoubleValue( double* _value ) const; + + void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. + void SetValue( const char* _value ) { value = _value; } ///< Set the value. + + void SetIntValue( int _value ); ///< Set the value from an integer. + void SetDoubleValue( double _value ); ///< Set the value from a double. + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetName( const std::string& _name ) { name = _name; } + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Get the next sibling attribute in the DOM. Returns null at end. + const TiXmlAttribute* Next() const; + TiXmlAttribute* Next() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); + } + + /// Get the previous sibling attribute in the DOM. Returns null at beginning. + const TiXmlAttribute* Previous() const; + TiXmlAttribute* Previous() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); + } + + bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } + bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } + bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } + + /* Attribute parsing starts: first letter of the name + returns: the next char after the value end quote + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + // Prints this Attribute to a FILE stream. + virtual void Print( FileStream& stream, int depth ) const { + Print( stream, depth, 0 ); + } + void Print( FileStream& stream, int depth, TIXML_STRING* str ) const; + + // [internal use] + // Set the document pointer so the attribute can report errors. + void SetDocument( TiXmlDocument* doc ) { document = doc; } + +private: + TiXmlAttribute( const TiXmlAttribute& ); // not implemented. + void operator=( const TiXmlAttribute& base ); // not allowed. + + TiXmlDocument* document; // A pointer back to a document, for error reporting. + TIXML_STRING name; + TIXML_STRING value; + TiXmlAttribute* prev; + TiXmlAttribute* next; +}; + + +/* A class used to manage a group of attributes. + It is only used internally, both by the ELEMENT and the DECLARATION. + + The set can be changed transparent to the Element and Declaration + classes that use it, but NOT transparent to the Attribute + which has to implement a next() and previous() method. Which makes + it a bit problematic and prevents the use of STL. + + This version is implemented with circular lists because: + - I like circular lists + - it demonstrates some independence from the (typical) doubly linked list. +*/ +class TiXmlAttributeSet +{ +public: + TiXmlAttributeSet(); + ~TiXmlAttributeSet(); + + void Add( TiXmlAttribute* attribute ); + void Remove( TiXmlAttribute* attribute ); + + const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + + TiXmlAttribute* Find( const char* _name ) const; + TiXmlAttribute* FindOrCreate( const char* _name ); + +# ifdef TIXML_USE_STL + TiXmlAttribute* Find( const std::string& _name ) const; + TiXmlAttribute* FindOrCreate( const std::string& _name ); +# endif + + +private: + //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), + //*ME: this class must be also use a hidden/disabled copy-constructor !!! + TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed + void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) + + TiXmlAttribute sentinel; +}; + + +/** The element is a container class. It has a value, the element name, + and can contain other elements, text, comments, and unknowns. + Elements also contain an arbitrary number of attributes. +*/ +class TiXmlElement : public TiXmlNode +{ +public: + /// Construct an element. + TiXmlElement (const char * in_value); + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlElement( const std::string& _value ); + #endif + + TiXmlElement( const TiXmlElement& ); + + TiXmlElement& operator=( const TiXmlElement& base ); + + virtual ~TiXmlElement(); + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + */ + const char* Attribute( const char* name ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an integer, + the integer value will be put in the return 'i', if 'i' + is non-null. + */ + const char* Attribute( const char* name, int* i ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an double, + the double value will be put in the return 'd', if 'd' + is non-null. + */ + const char* Attribute( const char* name, double* d ) const; + + /** QueryIntAttribute examines the attribute - it is an alternative to the + Attribute() method with richer error checking. + If the attribute is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. If the attribute + does not exist, then TIXML_NO_ATTRIBUTE is returned. + */ + int QueryIntAttribute( const char* name, int* _value ) const; + /// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute(). + int QueryUnsignedAttribute( const char* name, unsigned* _value ) const; + /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). + Note that '1', 'true', or 'yes' are considered true, while '0', 'false' + and 'no' are considered false. + */ + int QueryBoolAttribute( const char* name, bool* _value ) const; + /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). + int QueryDoubleAttribute( const char* name, double* _value ) const; + /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). + int QueryFloatAttribute( const char* name, float* _value ) const { + double d; + int result = QueryDoubleAttribute( name, &d ); + if ( result == TIXML_SUCCESS ) { + *_value = (float)d; + } + return result; + } + + #ifdef TIXML_USE_STL + /// QueryStringAttribute examines the attribute - see QueryIntAttribute(). + int QueryStringAttribute( const char* name, std::string* _value ) const { + const char* cstr = Attribute( name ); + if ( cstr ) { + *_value = std::string( cstr ); + return TIXML_SUCCESS; + } + return TIXML_NO_ATTRIBUTE; + } + + /** Template form of the attribute query which will try to read the + attribute into the specified type. Very easy, very powerful, but + be careful to make sure to call this with the correct type. + + NOTE: This method doesn't work correctly for 'string' types that contain spaces. + + @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE + */ + template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + + std::stringstream sstream( node->ValueStr() ); + sstream >> *outValue; + if ( !sstream.fail() ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; + } + + int QueryValueAttribute( const std::string& name, std::string* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + *outValue = node->ValueStr(); + return TIXML_SUCCESS; + } + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char* name, const char * _value ); + + #ifdef TIXML_USE_STL + const std::string* Attribute( const std::string& name ) const; + const std::string* Attribute( const std::string& name, int* i ) const; + const std::string* Attribute( const std::string& name, double* d ) const; + int QueryIntAttribute( const std::string& name, int* _value ) const; + int QueryDoubleAttribute( const std::string& name, double* _value ) const; + + /// STL std::string form. + void SetAttribute( const std::string& name, const std::string& _value ); + ///< STL std::string form. + void SetAttribute( const std::string& name, int _value ); + ///< STL std::string form. + void SetDoubleAttribute( const std::string& name, double value ); + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char * name, int value ); + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetDoubleAttribute( const char * name, double value ); + + /** Deletes an attribute with the given name. + */ + void RemoveAttribute( const char * name ); + #ifdef TIXML_USE_STL + void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. + #endif + + const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. + TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } + const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. + TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, GetText() is limited compared to getting the TiXmlText child + and accessing it directly. + + If the first child of 'this' is a TiXmlText, the GetText() + returns the character string of the Text node, else null is returned. + + This is a convenient method for getting the text of simple contained text: + @verbatim + This is text + const char* str = fooElement->GetText(); + @endverbatim + + 'str' will be a pointer to "This is text". + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then the value of str would be null. The first child node isn't a text node, it is + another element. From this XML: + @verbatim + This is text + @endverbatim + GetText() will return "This is ". + + WARNING: GetText() accesses a child node - don't become confused with the + similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are + safe type casts on the referenced node. + */ + const char* GetText() const; + + /// Creates a new Element and returns it - the returned element is a copy. + virtual TiXmlNode* Clone() const; + // Print the Element to a FILE stream. + virtual void Print( FileStream& stream, int depth ) const; + + /* Attribtue parsing starts: next char past '<' + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + + void CopyTo( TiXmlElement* target ) const; + void ClearThis(); // like clear, but initializes 'this' object as well + + // Used to be public [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + /* [internal use] + Reads the "value" of the element -- another element, or text. + This should terminate with the current end tag. + */ + const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + +private: + TiXmlAttributeSet attributeSet; +}; + + +/** An XML comment. +*/ +class TiXmlComment : public TiXmlNode +{ +public: + /// Constructs an empty comment. + TiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {} + /// Construct a comment from text. + TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) { + SetValue( _value ); + } + TiXmlComment( const TiXmlComment& ); + TiXmlComment& operator=( const TiXmlComment& base ); + + virtual ~TiXmlComment() {} + + /// Returns a copy of this Comment. + virtual TiXmlNode* Clone() const; + // Write this Comment to a FILE stream. + virtual void Print( FileStream& stream, int depth ) const; + + /* Attribtue parsing starts: at the ! of the !-- + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlComment* target ) const; + + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif +// virtual void StreamOut( TIXML_OSTREAM * out ) const; + +private: + +}; + + +/** XML text. A text node can have 2 ways to output the next. "normal" output + and CDATA. It will default to the mode it was parsed from the XML file and + you generally want to leave it alone, but you can change the output mode with + SetCDATA() and query it with CDATA(). +*/ +class TiXmlText : public TiXmlNode +{ + friend class TiXmlElement; +public: + /** Constructor for text element. By default, it is treated as + normal, encoded text. If you want it be output as a CDATA text + element, set the parameter _cdata to 'true' + */ + TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; + } + virtual ~TiXmlText() {} + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; + } + #endif + + TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); } + TiXmlText& operator=( const TiXmlText& base ) { base.CopyTo( this ); return *this; } + + // Write this text object to a FILE stream. + virtual void Print( FileStream& stream, int depth ) const; + + /// Queries whether this represents text using a CDATA section. + bool CDATA() const { return cdata; } + /// Turns on or off a CDATA representation of text. + void SetCDATA( bool _cdata ) { cdata = _cdata; } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + /// [internal use] Creates a new Element and returns it. + virtual TiXmlNode* Clone() const; + void CopyTo( TiXmlText* target ) const; + + bool Blank() const; // returns true if all white space and new lines + // [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + bool cdata; // true if this should be input and output as a CDATA style text element +}; + + +/** In correct XML the declaration is the first entry in the file. + @verbatim + + @endverbatim + + TinyXml will happily read or write files without a declaration, + however. There are 3 possible attributes to the declaration: + version, encoding, and standalone. + + Note: In this version of the code, the attributes are + handled as special cases, not generic attributes, simply + because there can only be at most 3 and they are always the same. +*/ +class TiXmlDeclaration : public TiXmlNode +{ +public: + /// Construct an empty declaration. + TiXmlDeclaration() : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {} + +#ifdef TIXML_USE_STL + /// Constructor. + TiXmlDeclaration( const std::string& _version, + const std::string& _encoding, + const std::string& _standalone ); +#endif + + /// Construct. + TiXmlDeclaration( const char* _version, + const char* _encoding, + const char* _standalone ); + + TiXmlDeclaration( const TiXmlDeclaration& copy ); + TiXmlDeclaration& operator=( const TiXmlDeclaration& copy ); + + virtual ~TiXmlDeclaration() {} + + /// Version. Will return an empty string if none was found. + const char *Version() const { return version.c_str (); } + /// Encoding. Will return an empty string if none was found. + const char *Encoding() const { return encoding.c_str (); } + /// Is this a standalone document? + const char *Standalone() const { return standalone.c_str (); } + + /// Creates a copy of this Declaration and returns it. + virtual TiXmlNode* Clone() const; + // Print this declaration to a FILE stream. + virtual void Print( FileStream& stream, int depth, TIXML_STRING* str ) const; + virtual void Print( FileStream& stream, int depth ) const { + Print( stream, depth, 0 ); + } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlDeclaration* target ) const; + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + + TIXML_STRING version; + TIXML_STRING encoding; + TIXML_STRING standalone; +}; + + +/** Any tag that tinyXml doesn't recognize is saved as an + unknown. It is a tag of text, but should not be modified. + It will be written back to the XML, unchanged, when the file + is saved. + + DTD tags get thrown into TiXmlUnknowns. +*/ +class TiXmlUnknown : public TiXmlNode +{ +public: + TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {} + virtual ~TiXmlUnknown() {} + + TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) { copy.CopyTo( this ); } + TiXmlUnknown& operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); return *this; } + + /// Creates a copy of this Unknown and returns it. + virtual TiXmlNode* Clone() const; + // Print this Unknown to a FILE stream. + virtual void Print( FileStream& stream, int depth ) const; + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected: + void CopyTo( TiXmlUnknown* target ) const; + + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + +}; + + +/** Always the top level node. A document binds together all the + XML pieces. It can be saved, loaded, and printed to the screen. + The 'value' of a document node is the xml file name. +*/ +class TiXmlDocument : public TiXmlNode +{ +public: + /// Create an empty document, that has no name. + TiXmlDocument(); + /// Create a document with a name. The name of the document is also the filename of the xml. + TiXmlDocument( const char * documentName ); + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlDocument( const std::string& documentName ); + #endif + + TiXmlDocument( const TiXmlDocument& copy ); + TiXmlDocument& operator=( const TiXmlDocument& copy ); + + virtual ~TiXmlDocument() {} + + /** Load a file using the current document value. + Returns true if successful. Will delete any existing + document data before loading. + */ + bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the current document value. Returns true if successful. + bool SaveFile() const; + /// Load a file using the given filename. Returns true if successful. + bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given filename. Returns true if successful. + bool SaveFile( const char * filename ) const; + /** Load a file using the given FILE*. Returns true if successful. Note that this method + doesn't stream - the entire object pointed at by the FILE* + will be interpreted as an XML file. TinyXML doesn't stream in XML from the current + file location. Streaming may be added in the future. + */ + bool LoadFile( FileStream& stream, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given FILE*. Returns true if successful. + bool SaveFile( FileStream& stream ) const; + + #ifdef TIXML_USE_STL + bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. + { + return LoadFile( filename.c_str(), encoding ); + } + bool SaveFile( const std::string& filename ) const ///< STL std::string version. + { + return SaveFile( filename.c_str() ); + } + #endif + + /** Parse the given null terminated block of xml data. Passing in an encoding to this + method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml + to use that encoding, regardless of what TinyXml might otherwise try to detect. + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + + /** Get the root element -- the only top level element -- of the document. + In well formed XML, there should only be one. TinyXml is tolerant of + multiple elements at the document level. + */ + const TiXmlElement* RootElement() const { return FirstChildElement(); } + TiXmlElement* RootElement() { return FirstChildElement(); } + + /** If an error occurs, Error will be set to true. Also, + - The ErrorId() will contain the integer identifier of the error (not generally useful) + - The ErrorDesc() method will return the name of the error. (very useful) + - The ErrorRow() and ErrorCol() will return the location of the error (if known) + */ + bool Error() const { return error; } + + /// Contains a textual (english) description of the error if one occurs. + const char * ErrorDesc() const { return errorDesc.c_str (); } + + /** Generally, you probably want the error string ( ErrorDesc() ). But if you + prefer the ErrorId, this function will fetch it. + */ + int ErrorId() const { return errorId; } + + /** Returns the location (if known) of the error. The first column is column 1, + and the first row is row 1. A value of 0 means the row and column wasn't applicable + (memory errors, for example, have no row/column) or the parser lost the error. (An + error in the error reporting, in that case.) + + @sa SetTabSize, Row, Column + */ + int ErrorRow() const { return errorLocation.row+1; } + int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() + + /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) + to report the correct values for row and column. It does not change the output + or input in any way. + + By calling this method, with a tab size + greater than 0, the row and column of each node and attribute is stored + when the file is loaded. Very useful for tracking the DOM back in to + the source file. + + The tab size is required for calculating the location of nodes. If not + set, the default of 4 is used. The tabsize is set per document. Setting + the tabsize to 0 disables row/column tracking. + + Note that row and column tracking is not supported when using operator>>. + + The tab size needs to be enabled before the parse or load. Correct usage: + @verbatim + TiXmlDocument doc; + doc.SetTabSize( 8 ); + doc.Load( "myfile.xml" ); + @endverbatim + + @sa Row, Column + */ + void SetTabSize( int _tabsize ) { tabsize = _tabsize; } + + int TabSize() const { return tabsize; } + + /** If you have handled the error, it can be reset with this call. The error + state is automatically cleared if you Parse a new XML block. + */ + void ClearError() { error = false; + errorId = 0; + errorDesc = ""; + errorLocation.row = errorLocation.col = 0; + //errorLocation.last = 0; + } + + /* Write the document to a string using formatted printing ("pretty print"). This + will allocate a character array (new char[]) and return it as a pointer. The + calling code pust call delete[] on the return char* to avoid a memory leak. + */ + //char* PrintToMemory() const; + + /// Print this Document to a FILE stream. + virtual void Print( FileStream& stream, int depth = 0 ) const; + + // [internal use] + void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + + virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + // [internal use] + virtual TiXmlNode* Clone() const; + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + void CopyTo( TiXmlDocument* target ) const; + + bool error; + int errorId; + TIXML_STRING errorDesc; + int tabsize; + TiXmlCursor errorLocation; + bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. +}; + + +/** + A TiXmlHandle is a class that wraps a node pointer with null checks; this is + an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml + DOM structure. It is a separate utility class. + + Take an example: + @verbatim + + + + + + + @endverbatim + + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + easy to write a *lot* of code that looks like: + + @verbatim + TiXmlElement* root = document.FirstChildElement( "Document" ); + if ( root ) + { + TiXmlElement* element = root->FirstChildElement( "Element" ); + if ( element ) + { + TiXmlElement* child = element->FirstChildElement( "Child" ); + if ( child ) + { + TiXmlElement* child2 = child->NextSiblingElement( "Child" ); + if ( child2 ) + { + // Finally do something useful. + @endverbatim + + And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity + of such code. A TiXmlHandle checks for null pointers so it is perfectly safe + and correct to use: + + @verbatim + TiXmlHandle docHandle( &document ); + TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); + if ( child2 ) + { + // do something useful + @endverbatim + + Which is MUCH more concise and useful. + + It is also safe to copy handles - internally they are nothing more than node pointers. + @verbatim + TiXmlHandle handleCopy = handle; + @endverbatim + + What they should not be used for is iteration: + + @verbatim + int i=0; + while ( true ) + { + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); + if ( !child ) + break; + // do something + ++i; + } + @endverbatim + + It seems reasonable, but it is in fact two embedded while loops. The Child method is + a linear walk to find the element, so this code would iterate much more than it needs + to. Instead, prefer: + + @verbatim + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); + + for( child; child; child=child->NextSiblingElement() ) + { + // do something + } + @endverbatim +*/ +class TiXmlHandle +{ +public: + /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. + TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } + /// Copy constructor + TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } + TiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; } + + /// Return a handle to the first child node. + TiXmlHandle FirstChild() const; + /// Return a handle to the first child node with the given name. + TiXmlHandle FirstChild( const char * value ) const; + /// Return a handle to the first child element. + TiXmlHandle FirstChildElement() const; + /// Return a handle to the first child element with the given name. + TiXmlHandle FirstChildElement( const char * value ) const; + + /** Return a handle to the "index" child with the given name. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( const char* value, int index ) const; + /** Return a handle to the "index" child. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( int index ) const; + /** Return a handle to the "index" child element with the given name. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( const char* value, int index ) const; + /** Return a handle to the "index" child element. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( int index ) const; + + #ifdef TIXML_USE_STL + TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } + TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } + + TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } + TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } + #endif + + /** Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* ToNode() const { return node; } + /** Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } + /** Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } + /** Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } + + /** @deprecated use ToNode. + Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* Node() const { return ToNode(); } + /** @deprecated use ToElement. + Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* Element() const { return ToElement(); } + /** @deprecated use ToText() + Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* Text() const { return ToText(); } + /** @deprecated use ToUnknown() + Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* Unknown() const { return ToUnknown(); } + +private: + TiXmlNode* node; +}; + + + +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + +#endif diff --git a/Engine/source/persistence/_tinyXML/tinyxmlerror.cpp b/Engine/source/persistence/_tinyXML/tinyxmlerror.cpp new file mode 100644 index 0000000000..538c21d0bd --- /dev/null +++ b/Engine/source/persistence/_tinyXML/tinyxmlerror.cpp @@ -0,0 +1,52 @@ +/* +www.sourceforge.net/projects/tinyxml +Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#include "tinyxml.h" + +// The goal of the seperate error file is to make the first +// step towards localization. tinyxml (currently) only supports +// english error messages, but the could now be translated. +// +// It also cleans up the code a bit. +// + +const char* TiXmlBase::errorString[ TiXmlBase::TIXML_ERROR_STRING_COUNT ] = +{ + "No error", + "Error", + "Failed to open file", + "Error parsing Element.", + "Failed to read Element name", + "Error reading Element value.", + "Error reading Attributes.", + "Error: empty tag.", + "Error reading end tag.", + "Error parsing Unknown.", + "Error parsing Comment.", + "Error parsing Declaration.", + "Error document empty.", + "Error null (0) or unexpected EOF found in input stream.", + "Error parsing CDATA.", + "Error when TiXmlDocument added to document, because TiXmlDocument can only be at the root.", +}; diff --git a/Engine/source/persistence/_tinyXML/tinyxmlparser.cpp b/Engine/source/persistence/_tinyXML/tinyxmlparser.cpp new file mode 100644 index 0000000000..cdc0d19e62 --- /dev/null +++ b/Engine/source/persistence/_tinyXML/tinyxmlparser.cpp @@ -0,0 +1,1638 @@ +/* +www.sourceforge.net/projects/tinyxml +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + +#include +#include + +#include "tinyxml.h" + +//#define DEBUG_PARSER +#if defined( DEBUG_PARSER ) +# if defined( DEBUG ) && defined( _MSC_VER ) +# include +# define TIXML_LOG OutputDebugString +# else +# define TIXML_LOG printf +# endif +#endif + +// Note tha "PutString" hardcodes the same list. This +// is less flexible than it appears. Changing the entries +// or order will break putstring. +TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = +{ + { "&", 5, '&' }, + { "<", 4, '<' }, + { ">", 4, '>' }, + { """, 6, '\"' }, + { "'", 6, '\'' } +}; + +// Bunch of unicode info at: +// http://www.unicode.org/faq/utf_bom.html +// Including the basic of this table, which determines the #bytes in the +// sequence from the lead byte. 1 placed for invalid sequences -- +// although the result will be junk, pass it through as much as possible. +// Beware of the non-characters in UTF-8: +// ef bb bf (Microsoft "lead bytes") +// ef bf be +// ef bf bf + +const unsigned char TIXML_UTF_LEAD_0 = 0xefU; +const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; +const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + +const int TiXmlBase::utf8ByteTable[256] = +{ + // 0 1 2 3 4 5 6 7 8 9 a b c d e f + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x30 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0 + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte + 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid +}; + + +void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) +{ + const unsigned long BYTE_MASK = 0xBF; + const unsigned long BYTE_MARK = 0x80; + const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + + if (input < 0x80) + *length = 1; + else if ( input < 0x800 ) + *length = 2; + else if ( input < 0x10000 ) + *length = 3; + else if ( input < 0x200000 ) + *length = 4; + else + { *length = 0; return; } // This code won't covert this correctly anyway. + + output += *length; + + // Scary scary fall throughs. + switch (*length) + { + case 4: + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + case 3: + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + case 2: + --output; + *output = (char)((input | BYTE_MARK) & BYTE_MASK); + input >>= 6; + case 1: + --output; + *output = (char)(input | FIRST_BYTE_MARK[*length]); + } +} + + +/*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) +{ + // This will only work for low-ascii, everything else is assumed to be a valid + // letter. I'm not sure this is the best approach, but it is quite tricky trying + // to figure out alhabetical vs. not across encoding. So take a very + // conservative approach. + +// if ( encoding == TIXML_ENCODING_UTF8 ) +// { + if ( anyByte < 127 ) + return isalpha( anyByte ); + else + return 1; // What else to do? The unicode set is huge...get the english ones right. +// } +// else +// { +// return isalpha( anyByte ); +// } +} + + +/*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) +{ + // This will only work for low-ascii, everything else is assumed to be a valid + // letter. I'm not sure this is the best approach, but it is quite tricky trying + // to figure out alhabetical vs. not across encoding. So take a very + // conservative approach. + +// if ( encoding == TIXML_ENCODING_UTF8 ) +// { + if ( anyByte < 127 ) + return isalnum( anyByte ); + else + return 1; // What else to do? The unicode set is huge...get the english ones right. +// } +// else +// { +// return isalnum( anyByte ); +// } +} + + +class TiXmlParsingData +{ + friend class TiXmlDocument; + public: + void Stamp( const char* now, TiXmlEncoding encoding ); + + const TiXmlCursor& Cursor() const { return cursor; } + + private: + // Only used by the document! + TiXmlParsingData( const char* start, int _tabsize, int row, int col ) + { + assert( start ); + stamp = start; + tabsize = _tabsize; + cursor.row = row; + cursor.col = col; + } + + TiXmlCursor cursor; + const char* stamp; + int tabsize; +}; + + +void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) +{ + assert( now ); + + // Do nothing if the tabsize is 0. + if ( tabsize < 1 ) + { + return; + } + + // Get the current row, column. + int row = cursor.row; + int col = cursor.col; + const char* p = stamp; + assert( p ); + + while ( p < now ) + { + // Treat p as unsigned, so we have a happy compiler. + const unsigned char* pU = (const unsigned char*)p; + + // Code contributed by Fletcher Dunn: (modified by lee) + switch (*pU) { + case 0: + // We *should* never get here, but in case we do, don't + // advance past the terminating null character, ever + return; + + case '\r': + // bump down to the next line + ++row; + col = 0; + // Eat the character + ++p; + + // Check for \r\n sequence, and treat this as a single character + if (*p == '\n') { + ++p; + } + break; + + case '\n': + // bump down to the next line + ++row; + col = 0; + + // Eat the character + ++p; + + // Check for \n\r sequence, and treat this as a single + // character. (Yes, this bizarre thing does occur still + // on some arcane platforms...) + if (*p == '\r') { + ++p; + } + break; + + case '\t': + // Eat the character + ++p; + + // Skip to next tab stop + col = (col / tabsize + 1) * tabsize; + break; + + case TIXML_UTF_LEAD_0: + if ( encoding == TIXML_ENCODING_UTF8 ) + { + if ( *(p+1) && *(p+2) ) + { + // In these cases, don't advance the column. These are + // 0-width spaces. + if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) + p += 3; + else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU ) + p += 3; + else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU ) + p += 3; + else + { p +=3; ++col; } // A normal character. + } + } + else + { + ++p; + ++col; + } + break; + + default: + if ( encoding == TIXML_ENCODING_UTF8 ) + { + // Eat the 1 to 4 byte utf8 character. + int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)]; + if ( step == 0 ) + step = 1; // Error case from bad encoding, but handle gracefully. + p += step; + + // Just advance one column, of course. + ++col; + } + else + { + ++p; + ++col; + } + break; + } + } + cursor.row = row; + cursor.col = col; + assert( cursor.row >= -1 ); + assert( cursor.col >= -1 ); + stamp = p; + assert( stamp ); +} + + +const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ) +{ + if ( !p || !*p ) + { + return 0; + } + if ( encoding == TIXML_ENCODING_UTF8 ) + { + while ( *p ) + { + const unsigned char* pU = (const unsigned char*)p; + + // Skip the stupid Microsoft UTF-8 Byte order marks + if ( *(pU+0)==TIXML_UTF_LEAD_0 + && *(pU+1)==TIXML_UTF_LEAD_1 + && *(pU+2)==TIXML_UTF_LEAD_2 ) + { + p += 3; + continue; + } + else if(*(pU+0)==TIXML_UTF_LEAD_0 + && *(pU+1)==0xbfU + && *(pU+2)==0xbeU ) + { + p += 3; + continue; + } + else if(*(pU+0)==TIXML_UTF_LEAD_0 + && *(pU+1)==0xbfU + && *(pU+2)==0xbfU ) + { + p += 3; + continue; + } + + if ( IsWhiteSpace( *p ) ) // Still using old rules for white space. + ++p; + else + break; + } + } + else + { + while ( *p && IsWhiteSpace( *p ) ) + ++p; + } + + return p; +} + +#ifdef TIXML_USE_STL +/*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ) +{ + for( ;; ) + { + if ( !in->good() ) return false; + + int c = in->peek(); + // At this scope, we can't get to a document. So fail silently. + if ( !IsWhiteSpace( c ) || c <= 0 ) + return true; + + *tag += (char) in->get(); + } +} + +/*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag ) +{ + //assert( character > 0 && character < 128 ); // else it won't work in utf-8 + while ( in->good() ) + { + int c = in->peek(); + if ( c == character ) + return true; + if ( c <= 0 ) // Silent failure: can't get document at this scope + return false; + + in->get(); + *tag += (char) c; + } + return false; +} +#endif + +// One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The +// "assign" optimization removes over 10% of the execution time. +// +const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding ) +{ + // Oddly, not supported on some comilers, + //name->clear(); + // So use this: + *name = ""; + assert( p ); + + // Names start with letters or underscores. + // Of course, in unicode, tinyxml has no idea what a letter *is*. The + // algorithm is generous. + // + // After that, they can be letters, underscores, numbers, + // hyphens, or colons. (Colons are valid ony for namespaces, + // but tinyxml can't tell namespaces from names.) + if ( p && *p + && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) + { + const char* start = p; + while( p && *p + && ( IsAlphaNum( (unsigned char ) *p, encoding ) + || *p == '_' + || *p == '-' + || *p == '.' + || *p == ':' ) ) + { + //(*name) += *p; // expensive + ++p; + } + if ( p-start > 0 ) { + name->assign( start, p-start ); + } + return p; + } + return 0; +} + +const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ) +{ + // Presume an entity, and pull it out. + TIXML_STRING ent; + int i; + *length = 0; + + if ( *(p+1) && *(p+1) == '#' && *(p+2) ) + { + unsigned long ucs = 0; + ptrdiff_t delta = 0; + unsigned mult = 1; + + if ( *(p+2) == 'x' ) + { + // Hexadecimal. + if ( !*(p+3) ) return 0; + + const char* q = p+3; + q = strchr( q, ';' ); + + if ( !q || !*q ) return 0; + + delta = q-p; + --q; + + while ( *q != 'x' ) + { + if ( *q >= '0' && *q <= '9' ) + ucs += mult * (*q - '0'); + else if ( *q >= 'a' && *q <= 'f' ) + ucs += mult * (*q - 'a' + 10); + else if ( *q >= 'A' && *q <= 'F' ) + ucs += mult * (*q - 'A' + 10 ); + else + return 0; + mult *= 16; + --q; + } + } + else + { + // Decimal. + if ( !*(p+2) ) return 0; + + const char* q = p+2; + q = strchr( q, ';' ); + + if ( !q || !*q ) return 0; + + delta = q-p; + --q; + + while ( *q != '#' ) + { + if ( *q >= '0' && *q <= '9' ) + ucs += mult * (*q - '0'); + else + return 0; + mult *= 10; + --q; + } + } + if ( encoding == TIXML_ENCODING_UTF8 ) + { + // convert the UCS to UTF-8 + ConvertUTF32ToUTF8( ucs, value, length ); + } + else + { + *value = (char)ucs; + *length = 1; + } + return p + delta + 1; + } + + // Now try to match it. + for( i=0; iappend( cArr, len ); + } + } + else + { + bool whitespace = false; + + // Remove leading white space: + p = SkipWhiteSpace( p, encoding ); + while ( p && *p + && !StringEqual( p, endTag, caseInsensitive, encoding ) ) + { + if ( *p == '\r' || *p == '\n' ) + { + whitespace = true; + ++p; + } + else if ( IsWhiteSpace( *p ) ) + { + whitespace = true; + ++p; + } + else + { + // If we've found whitespace, add it before the + // new character. Any whitespace just becomes a space. + if ( whitespace ) + { + (*text) += ' '; + whitespace = false; + } + int len; + char cArr[4] = { 0, 0, 0, 0 }; + p = GetChar( p, cArr, &len, encoding ); + if ( len == 1 ) + (*text) += cArr[0]; // more efficient + else + text->append( cArr, len ); + } + } + } + if ( p && *p ) + p += strlen( endTag ); + return ( p && *p ) ? p : 0; +} + +#ifdef TIXML_USE_STL + +void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) +{ + // The basic issue with a document is that we don't know what we're + // streaming. Read something presumed to be a tag (and hope), then + // identify it, and call the appropriate stream method on the tag. + // + // This "pre-streaming" will never read the closing ">" so the + // sub-tag can orient itself. + + if ( !StreamTo( in, '<', tag ) ) + { + SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + + while ( in->good() ) + { + int tagIndex = (int) tag->length(); + while ( in->good() && in->peek() != '>' ) + { + int c = in->get(); + if ( c <= 0 ) + { + SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); + break; + } + (*tag) += (char) c; + } + + if ( in->good() ) + { + // We now have something we presume to be a node of + // some sort. Identify it, and call the node to + // continue streaming. + TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING ); + + if ( node ) + { + node->StreamIn( in, tag ); + bool isElement = node->ToElement() != 0; + delete node; + node = 0; + + // If this is the root element, we're done. Parsing will be + // done by the >> operator. + if ( isElement ) + { + return; + } + } + else + { + SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + } + } + // We should have returned sooner. + SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); +} + +#endif + +const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding ) +{ + ClearError(); + + // Parse away, at the document level. Since a document + // contains nothing but other tags, most of what happens + // here is skipping white space. + if ( !p || !*p ) + { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + // Note that, for a document, this needs to come + // before the while space skip, so that parsing + // starts from the pointer we are given. + location.Clear(); + if ( prevData ) + { + location.row = prevData->cursor.row; + location.col = prevData->cursor.col; + } + else + { + location.row = 0; + location.col = 0; + } + TiXmlParsingData data( p, TabSize(), location.row, location.col ); + location = data.Cursor(); + + if ( encoding == TIXML_ENCODING_UNKNOWN ) + { + // Check for the Microsoft UTF-8 lead bytes. + const unsigned char* pU = (const unsigned char*)p; + if ( *(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0 + && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1 + && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 ) + { + encoding = TIXML_ENCODING_UTF8; + useMicrosoftBOM = true; + } + } + + p = SkipWhiteSpace( p, encoding ); + if ( !p ) + { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return 0; + } + + while ( p && *p ) + { + TiXmlNode* node = Identify( p, encoding ); + if ( node ) + { + p = node->Parse( p, &data, encoding ); + LinkEndChild( node ); + } + else + { + break; + } + + // Did we get encoding info? + if ( encoding == TIXML_ENCODING_UNKNOWN + && node->ToDeclaration() ) + { + TiXmlDeclaration* dec = node->ToDeclaration(); + const char* enc = dec->Encoding(); + assert( enc ); + + if ( *enc == 0 ) + encoding = TIXML_ENCODING_UTF8; + else if ( StringEqual( enc, "UTF-8", true, TIXML_ENCODING_UNKNOWN ) ) + encoding = TIXML_ENCODING_UTF8; + else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) ) + encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice + else + encoding = TIXML_ENCODING_LEGACY; + } + + p = SkipWhiteSpace( p, encoding ); + } + + // Was this empty? + if ( !firstChild ) { + SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding ); + return 0; + } + + // All is well. + return p; +} + +void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding ) +{ + // The first error in a chain is more accurate - don't set again! + if ( error ) + return; + + assert( err > 0 && err < TIXML_ERROR_STRING_COUNT ); + error = true; + errorId = err; + errorDesc = errorString[ errorId ]; + + errorLocation.Clear(); + if ( pError && data ) + { + data->Stamp( pError, encoding ); + errorLocation = data->Cursor(); + } +} + + +TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding ) +{ + TiXmlNode* returnNode = 0; + + p = SkipWhiteSpace( p, encoding ); + if( !p || !*p || *p != '<' ) + { + return 0; + } + + p = SkipWhiteSpace( p, encoding ); + + if ( !p || !*p ) + { + return 0; + } + + // What is this thing? + // - Elements start with a letter or underscore, but xml is reserved. + // - Comments: "; + + if ( !StringEqual( p, startTag, false, encoding ) ) + { + if ( document ) + document->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding ); + return 0; + } + p += strlen( startTag ); + + // [ 1475201 ] TinyXML parses entities in comments + // Oops - ReadText doesn't work, because we don't want to parse the entities. + // p = ReadText( p, &value, false, endTag, false, encoding ); + // + // from the XML spec: + /* + [Definition: Comments may appear anywhere in a document outside other markup; in addition, + they may appear within the document type declaration at places allowed by the grammar. + They are not part of the document's character data; an XML processor MAY, but need not, + make it possible for an application to retrieve the text of comments. For compatibility, + the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity + references MUST NOT be recognized within comments. + + An example of a comment: + + + */ + + value = ""; + // Keep all the white space. + while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) + { + value.append( p, 1 ); + ++p; + } + if ( p && *p ) + p += strlen( endTag ); + + return p; +} + + +const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) +{ + p = SkipWhiteSpace( p, encoding ); + if ( !p || !*p ) return 0; + + if ( data ) + { + data->Stamp( p, encoding ); + location = data->Cursor(); + } + // Read the name, the '=' and the value. + const char* pErr = p; + p = ReadName( p, &name, encoding ); + if ( !p || !*p ) + { + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding ); + return 0; + } + p = SkipWhiteSpace( p, encoding ); + if ( !p || !*p || *p != '=' ) + { + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); + return 0; + } + + ++p; // skip '=' + p = SkipWhiteSpace( p, encoding ); + if ( !p || !*p ) + { + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); + return 0; + } + + const char* end; + const char SINGLE_QUOTE = '\''; + const char DOUBLE_QUOTE = '\"'; + + if ( *p == SINGLE_QUOTE ) + { + ++p; + end = "\'"; // single quote in string + p = ReadText( p, &value, false, end, false, encoding ); + } + else if ( *p == DOUBLE_QUOTE ) + { + ++p; + end = "\""; // double quote in string + p = ReadText( p, &value, false, end, false, encoding ); + } + else + { + // All attribute values should be in single or double quotes. + // But this is such a common error that the parser will try + // its best, even without them. + value = ""; + while ( p && *p // existence + && !IsWhiteSpace( *p ) // whitespace + && *p != '/' && *p != '>' ) // tag end + { + if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) { + // [ 1451649 ] Attribute values with trailing quotes not handled correctly + // We did not have an opening quote but seem to have a + // closing one. Give up and throw an error. + if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); + return 0; + } + value += *p; + ++p; + } + } + return p; +} + +#ifdef TIXML_USE_STL +void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag ) +{ + while ( in->good() ) + { + int c = in->peek(); + if ( !cdata && (c == '<' ) ) + { + return; + } + if ( c <= 0 ) + { + TiXmlDocument* document = GetDocument(); + if ( document ) + document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + + (*tag) += (char) c; + in->get(); // "commits" the peek made above + + if ( cdata && c == '>' && tag->size() >= 3 ) { + size_t len = tag->size(); + if ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) { + // terminator of cdata. + return; + } + } + } +} +#endif + +const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) +{ + value = ""; + TiXmlDocument* document = GetDocument(); + + if ( data ) + { + data->Stamp( p, encoding ); + location = data->Cursor(); + } + + const char* const startTag = ""; + + if ( cdata || StringEqual( p, startTag, false, encoding ) ) + { + cdata = true; + + if ( !StringEqual( p, startTag, false, encoding ) ) + { + if ( document ) + document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding ); + return 0; + } + p += strlen( startTag ); + + // Keep all the white space, ignore the encoding, etc. + while ( p && *p + && !StringEqual( p, endTag, false, encoding ) + ) + { + value += *p; + ++p; + } + + TIXML_STRING dummy; + p = ReadText( p, &dummy, false, endTag, false, encoding ); + return p; + } + else + { + bool ignoreWhite = true; + + const char* end = "<"; + p = ReadText( p, &value, ignoreWhite, end, false, encoding ); + if ( p && *p ) + return p-1; // don't truncate the '<' + return 0; + } +} + +#ifdef TIXML_USE_STL +void TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag ) +{ + while ( in->good() ) + { + int c = in->get(); + if ( c <= 0 ) + { + TiXmlDocument* document = GetDocument(); + if ( document ) + document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); + return; + } + (*tag) += (char) c; + + if ( c == '>' ) + { + // All is well. + return; + } + } +} +#endif + +const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding ) +{ + p = SkipWhiteSpace( p, _encoding ); + // Find the beginning, find the end, and look for + // the stuff in-between. + TiXmlDocument* document = GetDocument(); + if ( !p || !*p || !StringEqual( p, "SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding ); + return 0; + } + if ( data ) + { + data->Stamp( p, _encoding ); + location = data->Cursor(); + } + p += 5; + + version = ""; + encoding = ""; + standalone = ""; + + while ( p && *p ) + { + if ( *p == '>' ) + { + ++p; + return p; + } + + p = SkipWhiteSpace( p, _encoding ); + if ( StringEqual( p, "version", true, _encoding ) ) + { + TiXmlAttribute attrib; + p = attrib.Parse( p, data, _encoding ); + version = attrib.Value(); + } + else if ( StringEqual( p, "encoding", true, _encoding ) ) + { + TiXmlAttribute attrib; + p = attrib.Parse( p, data, _encoding ); + encoding = attrib.Value(); + } + else if ( StringEqual( p, "standalone", true, _encoding ) ) + { + TiXmlAttribute attrib; + p = attrib.Parse( p, data, _encoding ); + standalone = attrib.Value(); + } + else + { + // Read over whatever it is. + while( p && *p && *p != '>' && !IsWhiteSpace( *p ) ) + ++p; + } + } + return 0; +} + +bool TiXmlText::Blank() const +{ + for ( unsigned i=0; i +class MemoryPoolAllocator { +public: + static const bool kNeedFree = false; //!< Tell users that no need to call Free() with this allocator. (concept Allocator) + + //! Constructor with chunkSize. + /*! \param chunkSize The size of memory chunk. The default is kDefaultChunkSize. + \param baseAllocator The allocator for allocating memory chunks. + */ + MemoryPoolAllocator(size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) : + chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(0), baseAllocator_(baseAllocator), ownBaseAllocator_(0) + { + if (!baseAllocator_) + ownBaseAllocator_ = baseAllocator_ = new BaseAllocator(); + AddChunk(chunk_capacity_); + } + + //! Constructor with user-supplied buffer. + /*! The user buffer will be used firstly. When it is full, memory pool allocates new chunk with chunk size. + + The user buffer will not be deallocated when this allocator is destructed. + + \param buffer User supplied buffer. + \param size Size of the buffer in bytes. It must at least larger than sizeof(ChunkHeader). + \param chunkSize The size of memory chunk. The default is kDefaultChunkSize. + \param baseAllocator The allocator for allocating memory chunks. + */ + MemoryPoolAllocator(char *buffer, size_t size, size_t chunkSize = kDefaultChunkCapacity, BaseAllocator* baseAllocator = 0) : + chunkHead_(0), chunk_capacity_(chunkSize), userBuffer_(buffer), baseAllocator_(baseAllocator), ownBaseAllocator_(0) + { + RAPIDJSON_ASSERT(buffer != 0); + RAPIDJSON_ASSERT(size > sizeof(ChunkHeader)); + chunkHead_ = (ChunkHeader*)buffer; + chunkHead_->capacity = size - sizeof(ChunkHeader); + chunkHead_->size = 0; + chunkHead_->next = 0; + } + + //! Destructor. + /*! This deallocates all memory chunks, excluding the user-supplied buffer. + */ + ~MemoryPoolAllocator() { + Clear(); + delete ownBaseAllocator_; + } + + //! Deallocates all memory chunks, excluding the user-supplied buffer. + void Clear() { + while(chunkHead_ != 0 && chunkHead_ != (ChunkHeader *)userBuffer_) { + ChunkHeader* next = chunkHead_->next; + baseAllocator_->Free(chunkHead_); + chunkHead_ = next; + } + } + + //! Computes the total capacity of allocated memory chunks. + /*! \return total capacity in bytes. + */ + size_t Capacity() { + size_t capacity = 0; + for (ChunkHeader* c = chunkHead_; c != 0; c = c->next) + capacity += c->capacity; + return capacity; + } + + //! Computes the memory blocks allocated. + /*! \return total used bytes. + */ + size_t Size() { + size_t size = 0; + for (ChunkHeader* c = chunkHead_; c != 0; c = c->next) + size += c->size; + return size; + } + + //! Allocates a memory block. (concept Allocator) + void* Malloc(size_t size) { + size = RAPIDJSON_ALIGN(size); + if (chunkHead_->size + size > chunkHead_->capacity) + AddChunk(chunk_capacity_ > size ? chunk_capacity_ : size); + + char *buffer = (char *)(chunkHead_ + 1) + chunkHead_->size; + chunkHead_->size += size; + return buffer; + } + + //! Resizes a memory block (concept Allocator) + void* Realloc(void* originalPtr, size_t originalSize, size_t newSize) { + if (originalPtr == 0) + return Malloc(newSize); + + // Do not shrink if new size is smaller than original + if (originalSize >= newSize) + return originalPtr; + + // Simply expand it if it is the last allocation and there is sufficient space + if (originalPtr == (char *)(chunkHead_ + 1) + chunkHead_->size - originalSize) { + size_t increment = newSize - originalSize; + increment = RAPIDJSON_ALIGN(increment); + if (chunkHead_->size + increment <= chunkHead_->capacity) { + chunkHead_->size += increment; + return originalPtr; + } + } + + // Realloc process: allocate and copy memory, do not free original buffer. + void* newBuffer = Malloc(newSize); + RAPIDJSON_ASSERT(newBuffer != 0); // Do not handle out-of-memory explicitly. + return memcpy(newBuffer, originalPtr, originalSize); + } + + //! Frees a memory block (concept Allocator) + static void Free(void *ptr) { (void)ptr; } // Do nothing + +private: + //! Creates a new chunk. + /*! \param capacity Capacity of the chunk in bytes. + */ + void AddChunk(size_t capacity) { + ChunkHeader* chunk = (ChunkHeader*)baseAllocator_->Malloc(sizeof(ChunkHeader) + capacity); + chunk->capacity = capacity; + chunk->size = 0; + chunk->next = chunkHead_; + chunkHead_ = chunk; + } + + static const int kDefaultChunkCapacity = 64 * 1024; //!< Default chunk capacity. + + //! Chunk header for perpending to each chunk. + /*! Chunks are stored as a singly linked list. + */ + struct ChunkHeader { + size_t capacity; //!< Capacity of the chunk in bytes (excluding the header itself). + size_t size; //!< Current size of allocated memory in bytes. + ChunkHeader *next; //!< Next chunk in the linked list. + }; + + ChunkHeader *chunkHead_; //!< Head of the chunk linked-list. Only the head chunk serves allocation. + size_t chunk_capacity_; //!< The minimum capacity of chunk when they are allocated. + char *userBuffer_; //!< User supplied buffer. + BaseAllocator* baseAllocator_; //!< base allocator for allocating memory chunks. + BaseAllocator* ownBaseAllocator_; //!< base allocator created by this object. +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_ENCODINGS_H_ diff --git a/Engine/source/persistence/rapidjson/document.h b/Engine/source/persistence/rapidjson/document.h new file mode 100644 index 0000000000..c68de6f786 --- /dev/null +++ b/Engine/source/persistence/rapidjson/document.h @@ -0,0 +1,843 @@ +#ifndef RAPIDJSON_DOCUMENT_H_ +#define RAPIDJSON_DOCUMENT_H_ + +#include "reader.h" +#include "internal/strfunc.h" +#include // placement new + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) // conditional expression is constant +#endif + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// GenericValue + +//! Represents a JSON value. Use Value for UTF8 encoding and default allocator. +/*! + A JSON value can be one of 7 types. This class is a variant type supporting + these types. + + Use the Value if UTF8 and default allocator + + \tparam Encoding Encoding of the value. (Even non-string values need to have the same encoding in a document) + \tparam Allocator Allocator type for allocating memory of object, array and string. +*/ +#pragma pack (push, 4) +template > +class GenericValue { +public: + //! Name-value pair in an object. + struct Member { + GenericValue name; //!< name of member (must be a string) + GenericValue value; //!< value of member. + }; + + typedef Encoding EncodingType; //!< Encoding type from template parameter. + typedef Allocator AllocatorType; //!< Allocator type from template parameter. + typedef typename Encoding::Ch Ch; //!< Character type derived from Encoding. + typedef Member* MemberIterator; //!< Member iterator for iterating in object. + typedef const Member* ConstMemberIterator; //!< Constant member iterator for iterating in object. + typedef GenericValue* ValueIterator; //!< Value iterator for iterating in array. + typedef const GenericValue* ConstValueIterator; //!< Constant value iterator for iterating in array. + + //!@name Constructors and destructor. + //@{ + + //! Default constructor creates a null value. + GenericValue() : flags_(kNullFlag) {} + + //! Copy constructor is not permitted. +private: + GenericValue(const GenericValue& rhs); + +public: + + //! Constructor with JSON value type. + /*! This creates a Value of specified type with default content. + \param type Type of the value. + \note Default content for number is zero. + */ + GenericValue(Type type) { + static const unsigned defaultFlags[7] = { + kNullFlag, kFalseFlag, kTrueFlag, kObjectFlag, kArrayFlag, kConstStringFlag, + kNumberFlag | kIntFlag | kUintFlag | kInt64Flag | kUint64Flag | kDoubleFlag + }; + RAPIDJSON_ASSERT(type <= kNumberType); + flags_ = defaultFlags[type]; + memset(&data_, 0, sizeof(data_)); + } + + //! Constructor for boolean value. + GenericValue(bool b) : flags_(b ? kTrueFlag : kFalseFlag) {} + + //! Constructor for int value. + GenericValue(int i) : flags_(kNumberIntFlag) { + data_.n.i64 = i; + if (i >= 0) + flags_ |= kUintFlag | kUint64Flag; + } + + //! Constructor for unsigned value. + GenericValue(unsigned u) : flags_(kNumberUintFlag) { + data_.n.u64 = u; + if (!(u & 0x80000000)) + flags_ |= kIntFlag | kInt64Flag; + } + + //! Constructor for int64_t value. + GenericValue(int64_t i64) : flags_(kNumberInt64Flag) { + data_.n.i64 = i64; + if (i64 >= 0) { + flags_ |= kNumberUint64Flag; + if (!(i64 & 0xFFFFFFFF00000000LL)) + flags_ |= kUintFlag; + if (!(i64 & 0xFFFFFFFF80000000LL)) + flags_ |= kIntFlag; + } + else if (i64 >= -2147483648LL) + flags_ |= kIntFlag; + } + + //! Constructor for uint64_t value. + GenericValue(uint64_t u64) : flags_(kNumberUint64Flag) { + data_.n.u64 = u64; + if (!(u64 & 0x8000000000000000ULL)) + flags_ |= kInt64Flag; + if (!(u64 & 0xFFFFFFFF00000000ULL)) + flags_ |= kUintFlag; + if (!(u64 & 0xFFFFFFFF80000000ULL)) + flags_ |= kIntFlag; + } + + //! Constructor for double value. + GenericValue(double d) : flags_(kNumberDoubleFlag) { data_.n.d = d; } + + //! Constructor for constant string (i.e. do not make a copy of string) + GenericValue(const Ch* s, SizeType length) { + RAPIDJSON_ASSERT(s != NULL); + flags_ = kConstStringFlag; + data_.s.str = s; + data_.s.length = length; + } + + //! Constructor for constant string (i.e. do not make a copy of string) + GenericValue(const Ch* s) { SetStringRaw(s, internal::StrLen(s)); } + + //! Constructor for copy-string (i.e. do make a copy of string) + GenericValue(const Ch* s, SizeType length, Allocator& allocator) { SetStringRaw(s, length, allocator); } + + //! Constructor for copy-string (i.e. do make a copy of string) + GenericValue(const Ch*s, Allocator& allocator) { SetStringRaw(s, internal::StrLen(s), allocator); } + + //! Destructor. + /*! Need to destruct elements of array, members of object, or copy-string. + */ + ~GenericValue() { + if (Allocator::kNeedFree) { // Shortcut by Allocator's trait + switch(flags_) { + case kArrayFlag: + for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v) + v->~GenericValue(); + Allocator::Free(data_.a.elements); + break; + + case kObjectFlag: + for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) { + m->name.~GenericValue(); + m->value.~GenericValue(); + } + Allocator::Free(data_.o.members); + break; + + case kCopyStringFlag: + Allocator::Free(const_cast(data_.s.str)); + break; + } + } + } + + //@} + + //!@name Assignment operators + //@{ + + //! Assignment with move semantics. + /*! \param rhs Source of the assignment. It will become a null value after assignment. + */ + GenericValue& operator=(GenericValue& rhs) { + RAPIDJSON_ASSERT(this != &rhs); + this->~GenericValue(); + memcpy(this, &rhs, sizeof(GenericValue)); + rhs.flags_ = kNullFlag; + return *this; + } + + //! Assignment with primitive types. + /*! \tparam T Either Type, int, unsigned, int64_t, uint64_t, const Ch* + \param value The value to be assigned. + */ + template + GenericValue& operator=(T value) { + this->~GenericValue(); + new (this) GenericValue(value); + return *this; + } + //@} + + //!@name Type + //@{ + + Type GetType() const { return static_cast(flags_ & kTypeMask); } + bool IsNull() const { return flags_ == kNullFlag; } + bool IsFalse() const { return flags_ == kFalseFlag; } + bool IsTrue() const { return flags_ == kTrueFlag; } + bool IsBool() const { return (flags_ & kBoolFlag) != 0; } + bool IsObject() const { return flags_ == kObjectFlag; } + bool IsArray() const { return flags_ == kArrayFlag; } + bool IsNumber() const { return (flags_ & kNumberFlag) != 0; } + bool IsInt() const { return (flags_ & kIntFlag) != 0; } + bool IsUint() const { return (flags_ & kUintFlag) != 0; } + bool IsInt64() const { return (flags_ & kInt64Flag) != 0; } + bool IsUint64() const { return (flags_ & kUint64Flag) != 0; } + bool IsDouble() const { return (flags_ & kDoubleFlag) != 0; } + bool IsString() const { return (flags_ & kStringFlag) != 0; } + + //@} + + //!@name Null + //@{ + + GenericValue& SetNull() { this->~GenericValue(); new (this) GenericValue(); return *this; } + + //@} + + //!@name Bool + //@{ + + bool GetBool() const { RAPIDJSON_ASSERT(IsBool()); return flags_ == kTrueFlag; } + GenericValue& SetBool(bool b) { this->~GenericValue(); new (this) GenericValue(b); return *this; } + + //@} + + //!@name Object + //@{ + + //! Set this value as an empty object. + GenericValue& SetObject() { this->~GenericValue(); new (this) GenericValue(kObjectType); return *this; } + + //! Get the value associated with the name. + /*! + \note In version 0.1x, if the member is not found, this function returns a null value. This makes issue 7. + Since 0.2, if the name is not correct, it will assert. + If user is unsure whether a member exists, user should use HasMember() first. + A better approach is to use the now public FindMember(). + */ + GenericValue& operator[](const Ch* name) { + if (Member* member = FindMember(name)) + return member->value; + else { + RAPIDJSON_ASSERT(false); // see above note + static GenericValue NullValue; + return NullValue; + } + } + const GenericValue& operator[](const Ch* name) const { return const_cast(*this)[name]; } + + //! Member iterators. + ConstMemberIterator MemberBegin() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.members; } + ConstMemberIterator MemberEnd() const { RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; } + MemberIterator MemberBegin() { RAPIDJSON_ASSERT(IsObject()); return data_.o.members; } + MemberIterator MemberEnd() { RAPIDJSON_ASSERT(IsObject()); return data_.o.members + data_.o.size; } + + //! Check whether a member exists in the object. + /*! + \note It is better to use FindMember() directly if you need the obtain the value as well. + */ + bool HasMember(const Ch* name) const { return FindMember(name) != 0; } + + //! Find member by name. + /*! + \return Return the member if exists. Otherwise returns null pointer. + */ + Member* FindMember(const Ch* name) { + RAPIDJSON_ASSERT(name); + RAPIDJSON_ASSERT(IsObject()); + + Object& o = data_.o; + for (Member* member = o.members; member != data_.o.members + data_.o.size; ++member) + if (name[member->name.data_.s.length] == '\0' && memcmp(member->name.data_.s.str, name, member->name.data_.s.length * sizeof(Ch)) == 0) + return member; + + return 0; + } + const Member* FindMember(const Ch* name) const { return const_cast(*this).FindMember(name); } + + //! Add a member (name-value pair) to the object. + /*! \param name A string value as name of member. + \param value Value of any type. + \param allocator Allocator for reallocating memory. + \return The value itself for fluent API. + \note The ownership of name and value will be transfered to this object if success. + */ + GenericValue& AddMember(GenericValue& name, GenericValue& value, Allocator& allocator) { + RAPIDJSON_ASSERT(IsObject()); + RAPIDJSON_ASSERT(name.IsString()); + Object& o = data_.o; + if (o.size >= o.capacity) { + if (o.capacity == 0) { + o.capacity = kDefaultObjectCapacity; + o.members = (Member*)allocator.Malloc(o.capacity * sizeof(Member)); + } + else { + SizeType oldCapacity = o.capacity; + o.capacity *= 2; + o.members = (Member*)allocator.Realloc(o.members, oldCapacity * sizeof(Member), o.capacity * sizeof(Member)); + } + } + o.members[o.size].name.RawAssign(name); + o.members[o.size].value.RawAssign(value); + o.size++; + return *this; + } + + GenericValue& AddMember(const Ch* name, Allocator& nameAllocator, GenericValue& value, Allocator& allocator) { + GenericValue n(name, internal::StrLen(name), nameAllocator); + return AddMember(n, value, allocator); + } + + GenericValue& AddMember(const Ch* name, GenericValue& value, Allocator& allocator) { + GenericValue n(name, internal::StrLen(name)); + return AddMember(n, value, allocator); + } + + template + GenericValue& AddMember(const Ch* name, T value, Allocator& allocator) { + GenericValue n(name, internal::StrLen(name)); + GenericValue v(value); + return AddMember(n, v, allocator); + } + + //! Remove a member in object by its name. + /*! \param name Name of member to be removed. + \return Whether the member existed. + \note Removing member is implemented by moving the last member. So the ordering of members is changed. + */ + bool RemoveMember(const Ch* name) { + RAPIDJSON_ASSERT(IsObject()); + if (Member* m = FindMember(name)) { + RAPIDJSON_ASSERT(data_.o.size > 0); + RAPIDJSON_ASSERT(data_.o.members != 0); + + Member* last = data_.o.members + (data_.o.size - 1); + if (data_.o.size > 1 && m != last) { + // Move the last one to this place + m->name = last->name; + m->value = last->value; + } + else { + // Only one left, just destroy + m->name.~GenericValue(); + m->value.~GenericValue(); + } + --data_.o.size; + return true; + } + return false; + } + + //@} + + //!@name Array + //@{ + + //! Set this value as an empty array. + GenericValue& SetArray() { this->~GenericValue(); new (this) GenericValue(kArrayType); return *this; } + + //! Get the number of elements in array. + SizeType Size() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size; } + + //! Get the capacity of array. + SizeType Capacity() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.capacity; } + + //! Check whether the array is empty. + bool Empty() const { RAPIDJSON_ASSERT(IsArray()); return data_.a.size == 0; } + + //! Remove all elements in the array. + /*! This function do not deallocate memory in the array, i.e. the capacity is unchanged. + */ + void Clear() { + RAPIDJSON_ASSERT(IsArray()); + for (SizeType i = 0; i < data_.a.size; ++i) + data_.a.elements[i].~GenericValue(); + data_.a.size = 0; + } + + //! Get an element from array by index. + /*! \param index Zero-based index of element. + \note +\code +Value a(kArrayType); +a.PushBack(123); +int x = a[0].GetInt(); // Error: operator[ is ambiguous, as 0 also mean a null pointer of const char* type. +int y = a[SizeType(0)].GetInt(); // Cast to SizeType will work. +int z = a[0u].GetInt(); // This works too. +\endcode + */ + GenericValue& operator[](SizeType index) { + RAPIDJSON_ASSERT(IsArray()); + RAPIDJSON_ASSERT(index < data_.a.size); + return data_.a.elements[index]; + } + const GenericValue& operator[](SizeType index) const { return const_cast(*this)[index]; } + + //! Element iterator + ValueIterator Begin() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements; } + ValueIterator End() { RAPIDJSON_ASSERT(IsArray()); return data_.a.elements + data_.a.size; } + ConstValueIterator Begin() const { return const_cast(*this).Begin(); } + ConstValueIterator End() const { return const_cast(*this).End(); } + + //! Request the array to have enough capacity to store elements. + /*! \param newCapacity The capacity that the array at least need to have. + \param allocator The allocator for allocating memory. It must be the same one use previously. + \return The value itself for fluent API. + */ + GenericValue& Reserve(SizeType newCapacity, Allocator &allocator) { + RAPIDJSON_ASSERT(IsArray()); + if (newCapacity > data_.a.capacity) { + data_.a.elements = (GenericValue*)allocator.Realloc(data_.a.elements, data_.a.capacity * sizeof(GenericValue), newCapacity * sizeof(GenericValue)); + data_.a.capacity = newCapacity; + } + return *this; + } + + //! Append a value at the end of the array. + /*! \param value The value to be appended. + \param allocator The allocator for allocating memory. It must be the same one use previously. + \return The value itself for fluent API. + \note The ownership of the value will be transfered to this object if success. + \note If the number of elements to be appended is known, calls Reserve() once first may be more efficient. + */ + GenericValue& PushBack(GenericValue& value, Allocator& allocator) { + RAPIDJSON_ASSERT(IsArray()); + if (data_.a.size >= data_.a.capacity) + Reserve(data_.a.capacity == 0 ? kDefaultArrayCapacity : data_.a.capacity * 2, allocator); + data_.a.elements[data_.a.size++].RawAssign(value); + return *this; + } + + template + GenericValue& PushBack(T value, Allocator& allocator) { + GenericValue v(value); + return PushBack(v, allocator); + } + + //! Remove the last element in the array. + GenericValue& PopBack() { + RAPIDJSON_ASSERT(IsArray()); + RAPIDJSON_ASSERT(!Empty()); + data_.a.elements[--data_.a.size].~GenericValue(); + return *this; + } + //@} + + //!@name Number + //@{ + + int GetInt() const { RAPIDJSON_ASSERT(flags_ & kIntFlag); return data_.n.i.i; } + unsigned GetUint() const { RAPIDJSON_ASSERT(flags_ & kUintFlag); return data_.n.u.u; } + int64_t GetInt64() const { RAPIDJSON_ASSERT(flags_ & kInt64Flag); return data_.n.i64; } + uint64_t GetUint64() const { RAPIDJSON_ASSERT(flags_ & kUint64Flag); return data_.n.u64; } + + double GetDouble() const { + RAPIDJSON_ASSERT(IsNumber()); + if ((flags_ & kDoubleFlag) != 0) return data_.n.d; // exact type, no conversion. + if ((flags_ & kIntFlag) != 0) return data_.n.i.i; // int -> double + if ((flags_ & kUintFlag) != 0) return data_.n.u.u; // unsigned -> double + if ((flags_ & kInt64Flag) != 0) return (double)data_.n.i64; // int64_t -> double (may lose precision) + RAPIDJSON_ASSERT((flags_ & kUint64Flag) != 0); return (double)data_.n.u64; // uint64_t -> double (may lose precision) + } + + GenericValue& SetInt(int i) { this->~GenericValue(); new (this) GenericValue(i); return *this; } + GenericValue& SetUint(unsigned u) { this->~GenericValue(); new (this) GenericValue(u); return *this; } + GenericValue& SetInt64(int64_t i64) { this->~GenericValue(); new (this) GenericValue(i64); return *this; } + GenericValue& SetUint64(uint64_t u64) { this->~GenericValue(); new (this) GenericValue(u64); return *this; } + GenericValue& SetDouble(double d) { this->~GenericValue(); new (this) GenericValue(d); return *this; } + + //@} + + //!@name String + //@{ + + const Ch* GetString() const { RAPIDJSON_ASSERT(IsString()); return data_.s.str; } + + //! Get the length of string. + /*! Since rapidjson permits "\u0000" in the json string, strlen(v.GetString()) may not equal to v.GetStringLength(). + */ + SizeType GetStringLength() const { RAPIDJSON_ASSERT(IsString()); return data_.s.length; } + + //! Set this value as a string without copying source string. + /*! This version has better performance with supplied length, and also support string containing null character. + \param s source string pointer. + \param length The length of source string, excluding the trailing null terminator. + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s, SizeType length) { this->~GenericValue(); SetStringRaw(s, length); return *this; } + + //! Set this value as a string without copying source string. + /*! \param s source string pointer. + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s) { return SetString(s, internal::StrLen(s)); } + + //! Set this value as a string by copying from source string. + /*! This version has better performance with supplied length, and also support string containing null character. + \param s source string. + \param length The length of source string, excluding the trailing null terminator. + \param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator(). + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s, SizeType length, Allocator& allocator) { this->~GenericValue(); SetStringRaw(s, length, allocator); return *this; } + + //! Set this value as a string by copying from source string. + /*! \param s source string. + \param allocator Allocator for allocating copied buffer. Commonly use document.GetAllocator(). + \return The value itself for fluent API. + */ + GenericValue& SetString(const Ch* s, Allocator& allocator) { SetString(s, internal::StrLen(s), allocator); return *this; } + + //@} + + //! Generate events of this value to a Handler. + /*! This function adopts the GoF visitor pattern. + Typical usage is to output this JSON value as JSON text via Writer, which is a Handler. + It can also be used to deep clone this value via GenericDocument, which is also a Handler. + \tparam Handler type of handler. + \param handler An object implementing concept Handler. + */ + template + const GenericValue& Accept(Handler& handler) const { + switch(GetType()) { + case kNullType: handler.Null(); break; + case kFalseType: handler.Bool(false); break; + case kTrueType: handler.Bool(true); break; + + case kObjectType: + handler.StartObject(); + for (Member* m = data_.o.members; m != data_.o.members + data_.o.size; ++m) { + handler.String(m->name.data_.s.str, m->name.data_.s.length, false); + m->value.Accept(handler); + } + handler.EndObject(data_.o.size); + break; + + case kArrayType: + handler.StartArray(); + for (GenericValue* v = data_.a.elements; v != data_.a.elements + data_.a.size; ++v) + v->Accept(handler); + handler.EndArray(data_.a.size); + break; + + case kStringType: + handler.String(data_.s.str, data_.s.length, false); + break; + + case kNumberType: + if (IsInt()) handler.Int(data_.n.i.i); + else if (IsUint()) handler.Uint(data_.n.u.u); + else if (IsInt64()) handler.Int64(data_.n.i64); + else if (IsUint64()) handler.Uint64(data_.n.u64); + else handler.Double(data_.n.d); + break; + } + return *this; + } + +private: + template + friend class GenericDocument; + + enum { + kBoolFlag = 0x100, + kNumberFlag = 0x200, + kIntFlag = 0x400, + kUintFlag = 0x800, + kInt64Flag = 0x1000, + kUint64Flag = 0x2000, + kDoubleFlag = 0x4000, + kStringFlag = 0x100000, + kCopyFlag = 0x200000, + + // Initial flags of different types. + kNullFlag = kNullType, + kTrueFlag = kTrueType | kBoolFlag, + kFalseFlag = kFalseType | kBoolFlag, + kNumberIntFlag = kNumberType | kNumberFlag | kIntFlag | kInt64Flag, + kNumberUintFlag = kNumberType | kNumberFlag | kUintFlag | kUint64Flag | kInt64Flag, + kNumberInt64Flag = kNumberType | kNumberFlag | kInt64Flag, + kNumberUint64Flag = kNumberType | kNumberFlag | kUint64Flag, + kNumberDoubleFlag = kNumberType | kNumberFlag | kDoubleFlag, + kConstStringFlag = kStringType | kStringFlag, + kCopyStringFlag = kStringType | kStringFlag | kCopyFlag, + kObjectFlag = kObjectType, + kArrayFlag = kArrayType, + + kTypeMask = 0xFF // bitwise-and with mask of 0xFF can be optimized by compiler + }; + + static const SizeType kDefaultArrayCapacity = 16; + static const SizeType kDefaultObjectCapacity = 16; + + struct String { + const Ch* str; + SizeType length; + unsigned hashcode; //!< reserved + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + // By using proper binary layout, retrieval of different integer types do not need conversions. + union Number { +#if RAPIDJSON_ENDIAN == RAPIDJSON_LITTLEENDIAN + struct I { + int i; + char padding[4]; + }i; + struct U { + unsigned u; + char padding2[4]; + }u; +#else + struct I { + char padding[4]; + int i; + }i; + struct U { + char padding2[4]; + unsigned u; + }u; +#endif + int64_t i64; + uint64_t u64; + double d; + }; // 8 bytes + + struct Object { + Member* members; + SizeType size; + SizeType capacity; + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + struct Array { + GenericValue* elements; + SizeType size; + SizeType capacity; + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + union Data { + String s; + Number n; + Object o; + Array a; + }; // 12 bytes in 32-bit mode, 16 bytes in 64-bit mode + + // Initialize this value as array with initial data, without calling destructor. + void SetArrayRaw(GenericValue* values, SizeType count, Allocator& alloctaor) { + flags_ = kArrayFlag; + data_.a.elements = (GenericValue*)alloctaor.Malloc(count * sizeof(GenericValue)); + memcpy(data_.a.elements, values, count * sizeof(GenericValue)); + data_.a.size = data_.a.capacity = count; + } + + //! Initialize this value as object with initial data, without calling destructor. + void SetObjectRaw(Member* members, SizeType count, Allocator& alloctaor) { + flags_ = kObjectFlag; + data_.o.members = (Member*)alloctaor.Malloc(count * sizeof(Member)); + memcpy(data_.o.members, members, count * sizeof(Member)); + data_.o.size = data_.o.capacity = count; + } + + //! Initialize this value as constant string, without calling destructor. + void SetStringRaw(const Ch* s, SizeType length) { + RAPIDJSON_ASSERT(s != NULL); + flags_ = kConstStringFlag; + data_.s.str = s; + data_.s.length = length; + } + + //! Initialize this value as copy string with initial data, without calling destructor. + void SetStringRaw(const Ch* s, SizeType length, Allocator& allocator) { + RAPIDJSON_ASSERT(s != NULL); + flags_ = kCopyStringFlag; + data_.s.str = (Ch *)allocator.Malloc((length + 1) * sizeof(Ch)); + data_.s.length = length; + memcpy(const_cast(data_.s.str), s, length * sizeof(Ch)); + const_cast(data_.s.str)[length] = '\0'; + } + + //! Assignment without calling destructor + void RawAssign(GenericValue& rhs) { + memcpy(this, &rhs, sizeof(GenericValue)); + rhs.flags_ = kNullFlag; + } + + Data data_; + unsigned flags_; +}; +#pragma pack (pop) + +//! Value with UTF8 encoding. +typedef GenericValue > Value; + +/////////////////////////////////////////////////////////////////////////////// +// GenericDocument + +//! A document for parsing JSON text as DOM. +/*! + \implements Handler + \tparam Encoding encoding for both parsing and string storage. + \tparam Alloactor allocator for allocating memory for the DOM, and the stack during parsing. +*/ +template > +class GenericDocument : public GenericValue { +public: + typedef typename Encoding::Ch Ch; //!< Character type derived from Encoding. + typedef GenericValue ValueType; //!< Value type of the document. + typedef Allocator AllocatorType; //!< Allocator type from template parameter. + + //! Constructor + /*! \param allocator Optional allocator for allocating stack memory. + \param stackCapacity Initial capacity of stack in bytes. + */ + GenericDocument(Allocator* allocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {} + + //! Parse JSON text from an input stream. + /*! \tparam parseFlags Combination of ParseFlag. + \param stream Input stream to be parsed. + \return The document itself for fluent API. + */ + template + GenericDocument& ParseStream(InputStream& is) { + ValueType::SetNull(); // Remove existing root if exist + GenericReader reader; + if (reader.template Parse(is, *this)) { + RAPIDJSON_ASSERT(stack_.GetSize() == sizeof(ValueType)); // Got one and only one root object + this->RawAssign(*stack_.template Pop(1)); // Add this-> to prevent issue 13. + parseError_ = 0; + errorOffset_ = 0; + } + else { + parseError_ = reader.GetParseError(); + errorOffset_ = reader.GetErrorOffset(); + ClearStack(); + } + return *this; + } + + //! Parse JSON text from a mutable string. + /*! \tparam parseFlags Combination of ParseFlag. + \param str Mutable zero-terminated string to be parsed. + \return The document itself for fluent API. + */ + template + GenericDocument& ParseInsitu(Ch* str) { + GenericInsituStringStream s(str); + return ParseStream(s); + } + + template + GenericDocument& ParseInsitu(Ch* str) { + return ParseInsitu(str); + } + + //! Parse JSON text from a read-only string. + /*! \tparam parseFlags Combination of ParseFlag (must not contain kParseInsituFlag). + \param str Read-only zero-terminated string to be parsed. + */ + template + GenericDocument& Parse(const Ch* str) { + RAPIDJSON_ASSERT(!(parseFlags & kParseInsituFlag)); + GenericStringStream s(str); + return ParseStream(s); + } + + template + GenericDocument& Parse(const Ch* str) { + return Parse(str); + } + + //! Whether a parse error was occured in the last parsing. + bool HasParseError() const { return parseError_ != 0; } + + //! Get the message of parsing error. + const char* GetParseError() const { return parseError_; } + + //! Get the offset in character of the parsing error. + size_t GetErrorOffset() const { return errorOffset_; } + + //! Get the allocator of this document. + Allocator& GetAllocator() { return stack_.GetAllocator(); } + + //! Get the capacity of stack in bytes. + size_t GetStackCapacity() const { return stack_.GetCapacity(); } + +//private: + //friend class GenericReader; // for Reader to call the following private handler functions + + // Implementation of Handler + void Null() { new (stack_.template Push()) ValueType(); } + void Bool(bool b) { new (stack_.template Push()) ValueType(b); } + void Int(int i) { new (stack_.template Push()) ValueType(i); } + void Uint(unsigned i) { new (stack_.template Push()) ValueType(i); } + void Int64(int64_t i) { new (stack_.template Push()) ValueType(i); } + void Uint64(uint64_t i) { new (stack_.template Push()) ValueType(i); } + void Double(double d) { new (stack_.template Push()) ValueType(d); } + + void String(const Ch* str, SizeType length, bool copy) { + if (copy) + new (stack_.template Push()) ValueType(str, length, GetAllocator()); + else + new (stack_.template Push()) ValueType(str, length); + } + + void StartObject() { new (stack_.template Push()) ValueType(kObjectType); } + + void EndObject(SizeType memberCount) { + typename ValueType::Member* members = stack_.template Pop(memberCount); + stack_.template Top()->SetObjectRaw(members, (SizeType)memberCount, GetAllocator()); + } + + void StartArray() { new (stack_.template Push()) ValueType(kArrayType); } + + void EndArray(SizeType elementCount) { + ValueType* elements = stack_.template Pop(elementCount); + stack_.template Top()->SetArrayRaw(elements, elementCount, GetAllocator()); + } + +private: + // Prohibit assignment + GenericDocument& operator=(const GenericDocument&); + + void ClearStack() { + if (Allocator::kNeedFree) + while (stack_.GetSize() > 0) // Here assumes all elements in stack array are GenericValue (Member is actually 2 GenericValue objects) + (stack_.template Pop(1))->~ValueType(); + else + stack_.Clear(); + } + + static const size_t kDefaultStackCapacity = 1024; + internal::Stack stack_; + const char* parseError_; + size_t errorOffset_; +}; + +typedef GenericDocument > Document; + +} // namespace rapidjson + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // RAPIDJSON_DOCUMENT_H_ diff --git a/Engine/source/persistence/rapidjson/encodedstream.h b/Engine/source/persistence/rapidjson/encodedstream.h new file mode 100644 index 0000000000..1f7bb5cf84 --- /dev/null +++ b/Engine/source/persistence/rapidjson/encodedstream.h @@ -0,0 +1,250 @@ +#ifndef RAPIDJSON_ENCODEDSTREAM_H_ +#define RAPIDJSON_ENCODEDSTREAM_H_ + +#include "rapidjson.h" + +namespace rapidjson { + +//! Input byte stream wrapper with a statically bound encoding. +/*! + \tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE. + \tparam InputByteStream Type of input byte stream. For example, FileReadStream. +*/ +template +class EncodedInputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); +public: + typedef typename Encoding::Ch Ch; + + EncodedInputStream(InputByteStream& is) : is_(is) { + current_ = Encoding::TakeBOM(is_); + } + + Ch Peek() const { return current_; } + Ch Take() { Ch c = current_; current_ = Encoding::Take(is_); return c; } + size_t Tell() const { return is_.Tell(); } + + // Not implemented + void Put(Ch c) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + // Prohibit assignment for VC C4512 warning + EncodedInputStream& operator=(const EncodedInputStream&); + + InputByteStream& is_; + Ch current_; +}; + +//! Output byte stream wrapper with statically bound encoding. +/*! + \tparam Encoding The interpretation of encoding of the stream. Either UTF8, UTF16LE, UTF16BE, UTF32LE, UTF32BE. + \tparam InputByteStream Type of input byte stream. For example, FileWriteStream. +*/ +template +class EncodedOutputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); +public: + typedef typename Encoding::Ch Ch; + + EncodedOutputStream(OutputByteStream& os, bool putBOM = true) : os_(os) { + if (putBOM) + Encoding::PutBOM(os_); + } + + void Put(Ch c) { Encoding::Put(os_, c); } + void Flush() { os_.Flush(); } + + // Not implemented + Ch Peek() const { RAPIDJSON_ASSERT(false); } + Ch Take() { RAPIDJSON_ASSERT(false); } + size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + // Prohibit assignment for VC C4512 warning + EncodedOutputStream& operator=(const EncodedOutputStream&); + + OutputByteStream& os_; +}; + +#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8::x, UTF16LE::x, UTF16BE::x, UTF32LE::x, UTF32BE::x + +//! Input stream wrapper with dynamically bound encoding and automatic encoding detection. +/*! + \tparam CharType Type of character for reading. + \tparam InputByteStream type of input byte stream to be wrapped. +*/ +template +class AutoUTFInputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); +public: + typedef CharType Ch; + + //! Constructor. + /*! + \param is input stream to be wrapped. + \param type UTF encoding type if it is not detected from the stream. + */ + AutoUTFInputStream(InputByteStream& is, UTFType type = kUTF8) : is_(&is), type_(type), hasBOM_(false) { + DetectType(); + static const TakeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Take) }; + takeFunc_ = f[type_]; + current_ = takeFunc_(*is_); + } + + UTFType GetType() const { return type_; } + bool HasBOM() const { return hasBOM_; } + + Ch Peek() const { return current_; } + Ch Take() { Ch c = current_; current_ = takeFunc_(*is_); return c; } + size_t Tell() const { return is_->Tell(); } + + // Not implemented + void Put(Ch) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + // Detect encoding type with BOM or RFC 4627 + void DetectType() { + // BOM (Byte Order Mark): + // 00 00 FE FF UTF-32BE + // FF FE 00 00 UTF-32LE + // FE FF UTF-16BE + // FF FE UTF-16LE + // EF BB BF UTF-8 + + const unsigned char* c = (const unsigned char *)is_->Peek4(); + if (!c) + return; + + unsigned bom = c[0] | (c[1] << 8) | (c[2] << 16) | (c[3] << 24); + hasBOM_ = false; + if (bom == 0xFFFE0000) { type_ = kUTF32BE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); } + else if (bom == 0x0000FEFF) { type_ = kUTF32LE; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); is_->Take(); } + else if ((bom & 0xFFFF) == 0xFFFE) { type_ = kUTF16BE; hasBOM_ = true; is_->Take(); is_->Take(); } + else if ((bom & 0xFFFF) == 0xFEFF) { type_ = kUTF16LE; hasBOM_ = true; is_->Take(); is_->Take(); } + else if ((bom & 0xFFFFFF) == 0xBFBBEF) { type_ = kUTF8; hasBOM_ = true; is_->Take(); is_->Take(); is_->Take(); } + + // RFC 4627: Section 3 + // "Since the first two characters of a JSON text will always be ASCII + // characters [RFC0020], it is possible to determine whether an octet + // stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking + // at the pattern of nulls in the first four octets." + // 00 00 00 xx UTF-32BE + // 00 xx 00 xx UTF-16BE + // xx 00 00 00 UTF-32LE + // xx 00 xx 00 UTF-16LE + // xx xx xx xx UTF-8 + + if (!hasBOM_) { + unsigned pattern = (c[0] ? 1 : 0) | (c[1] ? 2 : 0) | (c[2] ? 4 : 0) | (c[3] ? 8 : 0); + switch (pattern) { + case 0x08: type_ = kUTF32BE; break; + case 0x0A: type_ = kUTF16BE; break; + case 0x01: type_ = kUTF32LE; break; + case 0x05: type_ = kUTF16LE; break; + case 0x0F: type_ = kUTF8; break; + } + } + + // RUntime check whether the size of character type is sufficient. It only perform checks with assertion. + switch (type_) { + case kUTF8: + // Do nothing + break; + case kUTF16LE: + case kUTF16BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 2); + break; + case kUTF32LE: + case kUTF32BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 4); + break; + } + } + + typedef Ch (*TakeFunc)(InputByteStream& is); + InputByteStream* is_; + UTFType type_; + Ch current_; + TakeFunc takeFunc_; + bool hasBOM_; +}; + +//! Output stream wrapper with dynamically bound encoding and automatic encoding detection. +/*! + \tparam CharType Type of character for writing. + \tparam InputByteStream type of output byte stream to be wrapped. +*/ +template +class AutoUTFOutputStream { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); +public: + typedef CharType Ch; + + //! Constructor. + /*! + \param os output stream to be wrapped. + \param type UTF encoding type. + \param putBOM Whether to write BOM at the beginning of the stream. + */ + AutoUTFOutputStream(OutputByteStream& os, UTFType type, bool putBOM) : os_(&os), type_(type) { + // RUntime check whether the size of character type is sufficient. It only perform checks with assertion. + switch (type_) { + case kUTF16LE: + case kUTF16BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 2); + break; + case kUTF32LE: + case kUTF32BE: + RAPIDJSON_ASSERT(sizeof(Ch) >= 4); + break; + case kUTF8: + // Do nothing + break; + } + + static const PutFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Put) }; + putFunc_ = f[type_]; + + if (putBOM) + PutBOM(); + } + + UTFType GetType() const { return type_; } + + void Put(Ch c) { putFunc_(*os_, c); } + void Flush() { os_->Flush(); } + + // Not implemented + Ch Peek() const { RAPIDJSON_ASSERT(false); } + Ch Take() { RAPIDJSON_ASSERT(false); } + size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + void PutBOM() { + typedef void (*PutBOMFunc)(OutputByteStream&); + static const PutBOMFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(PutBOM) }; + f[type_](*os_); + } + + typedef void (*PutFunc)(OutputByteStream&, Ch); + + OutputByteStream* os_; + UTFType type_; + PutFunc putFunc_; +}; + +#undef RAPIDJSON_ENCODINGS_FUNC + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/encodings.h b/Engine/source/persistence/rapidjson/encodings.h new file mode 100644 index 0000000000..33fcc3c938 --- /dev/null +++ b/Engine/source/persistence/rapidjson/encodings.h @@ -0,0 +1,527 @@ +#ifndef RAPIDJSON_ENCODINGS_H_ +#define RAPIDJSON_ENCODINGS_H_ + +#include "rapidjson.h" + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// Encoding + +/*! \class rapidjson::Encoding + \brief Concept for encoding of Unicode characters. + +\code +concept Encoding { + typename Ch; //! Type of character. A "character" is actually a code unit in unicode's definition. + + //! \brief Encode a Unicode codepoint to an output stream. + //! \param os Output stream. + //! \param codepoint An unicode codepoint, ranging from 0x0 to 0x10FFFF inclusively. + template + static void Encode(OutputStream& os, unsigned codepoint); + + //! \brief Decode a Unicode codepoint from an input stream. + //! \param is Input stream. + //! \param codepoint Output of the unicode codepoint. + //! \return true if a valid codepoint can be decoded from the stream. + template + static bool Decode(InputStream& is, unsigned* codepoint); + + //! \brief Validate one Unicode codepoint from an encoded stream. + //! \param is Input stream to obtain codepoint. + //! \param os Output for copying one codepoint. + //! \return true if it is valid. + //! \note This function just validating and copying the codepoint without actually decode it. + template + static bool Validate(InputStream& is, OutputStream& os); + + // The following functions are deal with byte streams. + + //! Take a character from input byte stream, skip BOM if exist. + template + static CharType TakeBOM(InputByteStream& is); + + //! Take a character from input byte stream. + template + static Ch Take(InputByteStream& is); + + //! Put BOM to output byte stream. + template + static void PutBOM(OutputByteStream& os); + + //! Put a character to output byte stream. + template + static void Put(OutputByteStream& os, Ch c); +}; +\endcode +*/ + +/////////////////////////////////////////////////////////////////////////////// +// UTF8 + +//! UTF-8 encoding. +/*! http://en.wikipedia.org/wiki/UTF-8 + http://tools.ietf.org/html/rfc3629 + \tparam CharType Code unit for storing 8-bit UTF-8 data. Default is char. + \implements Encoding +*/ +template +struct UTF8 { + typedef CharType Ch; + + template + static void Encode(OutputStream& os, unsigned codepoint) { + if (codepoint <= 0x7F) + os.Put(codepoint & 0xFF); + else if (codepoint <= 0x7FF) { + os.Put(0xC0 | ((codepoint >> 6) & 0xFF)); + os.Put(0x80 | ((codepoint & 0x3F))); + } + else if (codepoint <= 0xFFFF) { + os.Put(0xE0 | ((codepoint >> 12) & 0xFF)); + os.Put(0x80 | ((codepoint >> 6) & 0x3F)); + os.Put(0x80 | (codepoint & 0x3F)); + } + else { + RAPIDJSON_ASSERT(codepoint <= 0x10FFFF); + os.Put(0xF0 | ((codepoint >> 18) & 0xFF)); + os.Put(0x80 | ((codepoint >> 12) & 0x3F)); + os.Put(0x80 | ((codepoint >> 6) & 0x3F)); + os.Put(0x80 | (codepoint & 0x3F)); + } + } + + template + static bool Decode(InputStream& is, unsigned* codepoint) { +#define COPY() c = is.Take(); *codepoint = (*codepoint << 6) | ((unsigned char)c & 0x3Fu) +#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0) +#define TAIL() COPY(); TRANS(0x70) + Ch c = is.Take(); + if (!(c & 0x80)) { + *codepoint = (unsigned char)c; + return true; + } + + unsigned char type = GetRange((unsigned char)c); + *codepoint = (0xFF >> type) & (unsigned char)c; + bool result = true; + switch (type) { + case 2: TAIL(); return result; + case 3: TAIL(); TAIL(); return result; + case 4: COPY(); TRANS(0x50); TAIL(); return result; + case 5: COPY(); TRANS(0x10); TAIL(); TAIL(); return result; + case 6: TAIL(); TAIL(); TAIL(); return result; + case 10: COPY(); TRANS(0x20); TAIL(); return result; + case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result; + default: return false; + } +#undef COPY +#undef TRANS +#undef TAIL + } + + template + static bool Validate(InputStream& is, OutputStream& os) { +#define COPY() os.Put(c = is.Take()) +#define TRANS(mask) result &= ((GetRange((unsigned char)c) & mask) != 0) +#define TAIL() COPY(); TRANS(0x70) + Ch c; + COPY(); + if (!(c & 0x80)) + return true; + + bool result = true; + switch (GetRange((unsigned char)c)) { + case 2: TAIL(); return result; + case 3: TAIL(); TAIL(); return result; + case 4: COPY(); TRANS(0x50); TAIL(); return result; + case 5: COPY(); TRANS(0x10); TAIL(); TAIL(); return result; + case 6: TAIL(); TAIL(); TAIL(); return result; + case 10: COPY(); TRANS(0x20); TAIL(); return result; + case 11: COPY(); TRANS(0x60); TAIL(); TAIL(); return result; + default: return false; + } +#undef COPY +#undef TRANS +#undef TAIL + } + + static unsigned char GetRange(unsigned char c) { + // Referring to DFA of http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ + // With new mapping 1 -> 0x10, 7 -> 0x20, 9 -> 0x40, such that AND operation can test multiple types. + static const unsigned char type[] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, + 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, + 8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3, 11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8, + }; + return type[c]; + } + + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + Ch c = Take(is); + if ((unsigned char)c != 0xEFu) return c; + c = is.Take(); + if ((unsigned char)c != 0xBBu) return c; + c = is.Take(); + if ((unsigned char)c != 0xBFu) return c; + c = is.Take(); + return c; + } + + template + static Ch Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + return is.Take(); + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xEFu); os.Put(0xBBu); os.Put(0xBFu); + } + + template + static void Put(OutputByteStream& os, Ch c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(static_cast(c)); + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// UTF16 + +//! UTF-16 encoding. +/*! http://en.wikipedia.org/wiki/UTF-16 + http://tools.ietf.org/html/rfc2781 + \tparam CharType Type for storing 16-bit UTF-16 data. Default is wchar_t. C++11 may use char16_t instead. + \implements Encoding + + \note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness. + For streaming, use UTF16LE and UTF16BE, which handle endianness. +*/ +template +struct UTF16 { + typedef CharType Ch; + RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 2); + + template + static void Encode(OutputStream& os, unsigned codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2); + if (codepoint <= 0xFFFF) { + RAPIDJSON_ASSERT(codepoint < 0xD800 || codepoint > 0xDFFF); // Code point itself cannot be surrogate pair + os.Put(static_cast(codepoint)); + } + else { + RAPIDJSON_ASSERT(codepoint <= 0x10FFFF); + unsigned v = codepoint - 0x10000; + os.Put(static_cast((v >> 10) | 0xD800)); + os.Put((v & 0x3FF) | 0xDC00); + } + } + + template + static bool Decode(InputStream& is, unsigned* codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2); + Ch c = is.Take(); + if (c < 0xD800 || c > 0xDFFF) { + *codepoint = c; + return true; + } + else if (c <= 0xDBFF) { + *codepoint = (c & 0x3FF) << 10; + c = is.Take(); + *codepoint |= (c & 0x3FF); + *codepoint += 0x10000; + return c >= 0xDC00 && c <= 0xDFFF; + } + return false; + } + + template + static bool Validate(InputStream& is, OutputStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 2); + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 2); + Ch c; + os.Put(c = is.Take()); + if (c < 0xD800 || c > 0xDFFF) + return true; + else if (c <= 0xDBFF) { + os.Put(c = is.Take()); + return c >= 0xDC00 && c <= 0xDFFF; + } + return false; + } +}; + +//! UTF-16 little endian encoding. +template +struct UTF16LE : UTF16 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned short)c == 0xFEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take(); + c |= (unsigned char)is.Take() << 8; + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xFFu); os.Put(0xFEu); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(c & 0xFFu); + os.Put((c >> 8) & 0xFFu); + } +}; + +//! UTF-16 big endian encoding. +template +struct UTF16BE : UTF16 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned short)c == 0xFEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take() << 8; + c |= (unsigned char)is.Take(); + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xFEu); os.Put(0xFFu); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put((c >> 8) & 0xFFu); + os.Put(c & 0xFFu); + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// UTF32 + +//! UTF-32 encoding. +/*! http://en.wikipedia.org/wiki/UTF-32 + \tparam Ch Type for storing 32-bit UTF-32 data. Default is unsigned. C++11 may use char32_t instead. + \implements Encoding + + \note For in-memory access, no need to concern endianness. The code units and code points are represented by CPU's endianness. + For streaming, use UTF32LE and UTF32BE, which handle endianness. +*/ +template +struct UTF32 { + typedef CharType Ch; + RAPIDJSON_STATIC_ASSERT(sizeof(Ch) >= 4); + + template + static void Encode(OutputStream& os, unsigned codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputStream::Ch) >= 4); + RAPIDJSON_ASSERT(codepoint <= 0x10FFFF); + os.Put(codepoint); + } + + template + static bool Decode(InputStream& is, unsigned* codepoint) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4); + Ch c = is.Take(); + *codepoint = c; + return c <= 0x10FFFF; + } + + template + static bool Validate(InputStream& is, OutputStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputStream::Ch) >= 4); + Ch c; + os.Put(c = is.Take()); + return c <= 0x10FFFF; + } +}; + +//! UTF-32 little endian enocoding. +template +struct UTF32LE : UTF32 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned)c == 0x0000FEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take(); + c |= (unsigned char)is.Take() << 8; + c |= (unsigned char)is.Take() << 16; + c |= (unsigned char)is.Take() << 24; + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0xFFu); os.Put(0xFEu); os.Put(0x00u); os.Put(0x00u); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(c & 0xFFu); + os.Put((c >> 8) & 0xFFu); + os.Put((c >> 16) & 0xFFu); + os.Put((c >> 24) & 0xFFu); + } +}; + +//! UTF-32 big endian encoding. +template +struct UTF32BE : UTF32 { + template + static CharType TakeBOM(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = Take(is); + return (unsigned)c == 0x0000FEFFu ? Take(is) : c; + } + + template + static CharType Take(InputByteStream& is) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename InputByteStream::Ch) == 1); + CharType c = (unsigned char)is.Take() << 24; + c |= (unsigned char)is.Take() << 16; + c |= (unsigned char)is.Take() << 8; + c |= (unsigned char)is.Take(); + return c; + } + + template + static void PutBOM(OutputByteStream& os) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put(0x00u); os.Put(0x00u); os.Put(0xFEu); os.Put(0xFFu); + } + + template + static void Put(OutputByteStream& os, CharType c) { + RAPIDJSON_STATIC_ASSERT(sizeof(typename OutputByteStream::Ch) == 1); + os.Put((c >> 24) & 0xFFu); + os.Put((c >> 16) & 0xFFu); + os.Put((c >> 8) & 0xFFu); + os.Put(c & 0xFFu); + } +}; + +/////////////////////////////////////////////////////////////////////////////// +// AutoUTF + +//! Runtime-specified UTF encoding type of a stream. +enum UTFType { + kUTF8 = 0, //!< UTF-8. + kUTF16LE = 1, //!< UTF-16 little endian. + kUTF16BE = 2, //!< UTF-16 big endian. + kUTF32LE = 3, //!< UTF-32 little endian. + kUTF32BE = 4, //!< UTF-32 big endian. +}; + +//! Dynamically select encoding according to stream's runtime-specified UTF encoding type. +/*! \note This class can be used with AutoUTFInputtStream and AutoUTFOutputStream, which provides GetType(). +*/ +template +struct AutoUTF { + typedef CharType Ch; + +#define RAPIDJSON_ENCODINGS_FUNC(x) UTF8::x, UTF16LE::x, UTF16BE::x, UTF32LE::x, UTF32BE::x + + template + RAPIDJSON_FORCEINLINE static void Encode(OutputStream& os, unsigned codepoint) { + typedef void (*EncodeFunc)(OutputStream&, unsigned); + static const EncodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Encode) }; + (*f[os.GetType()])(os, codepoint); + } + + template + RAPIDJSON_FORCEINLINE static bool Decode(InputStream& is, unsigned* codepoint) { + typedef bool (*DecodeFunc)(InputStream&, unsigned*); + static const DecodeFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Decode) }; + return (*f[is.GetType()])(is, codepoint); + } + + template + RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) { + typedef bool (*ValidateFunc)(InputStream&, OutputStream&); + static const ValidateFunc f[] = { RAPIDJSON_ENCODINGS_FUNC(Validate) }; + return (*f[is.GetType()])(is, os); + } + +#undef RAPIDJSON_ENCODINGS_FUNC +}; + +/////////////////////////////////////////////////////////////////////////////// +// Transcoder + +//! Encoding conversion. +template +struct Transcoder { + //! Take one Unicode codepoint from source encoding, convert it to target encoding and put it to the output stream. + template + RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) { + unsigned codepoint; + if (!SourceEncoding::Decode(is, &codepoint)) + return false; + TargetEncoding::Encode(os, codepoint); + return true; + } + + //! Validate one Unicode codepoint from an encoded stream. + template + RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) { + return Transcode(is, os); // Since source/target encoding is different, must transcode. + } +}; + +//! Specialization of Transcoder with same source and target encoding. +template +struct Transcoder { + template + RAPIDJSON_FORCEINLINE static bool Transcode(InputStream& is, OutputStream& os) { + os.Put(is.Take()); // Just copy one code unit. This semantic is different from primary template class. + return true; + } + + template + RAPIDJSON_FORCEINLINE static bool Validate(InputStream& is, OutputStream& os) { + return Encoding::Validate(is, os); // source/target encoding are the same + } +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_ENCODINGS_H_ diff --git a/Engine/source/persistence/rapidjson/filereadstream.h b/Engine/source/persistence/rapidjson/filereadstream.h new file mode 100644 index 0000000000..2c97c67047 --- /dev/null +++ b/Engine/source/persistence/rapidjson/filereadstream.h @@ -0,0 +1,74 @@ +#ifndef RAPIDJSON_FILEREADSTREAM_H_ +#define RAPIDJSON_FILEREADSTREAM_H_ + +#include "rapidjson.h" +#include + +namespace rapidjson { + +//! File byte stream for input using fread(). +/*! + \implements Stream +*/ +class FileReadStream { +public: + typedef char Ch; //!< Character type (byte). + + //! Constructor. + /*! + \param fp File pointer opened for read. + \param buffer user-supplied buffer. + \param bufferSize size of buffer in bytes. Must >=4 bytes. + */ + FileReadStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferSize_(bufferSize), bufferLast_(0), current_(buffer_), readCount_(0), count_(0), eof_(false) { + RAPIDJSON_ASSERT(fp_ != 0); + RAPIDJSON_ASSERT(bufferSize >= 4); + Read(); + } + + Ch Peek() const { return *current_; } + Ch Take() { Ch c = *current_; Read(); return c; } + size_t Tell() const { return count_ + (current_ - buffer_); } + + // Not implemented + void Put(Ch) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + + // For encoding detection only. + const Ch* Peek4() const { + return (current_ + 4 <= bufferLast_) ? current_ : 0; + } + +private: + void Read() { + if (current_ < bufferLast_) + ++current_; + else if (!eof_) { + count_ += readCount_; + readCount_ = fread(buffer_, 1, bufferSize_, fp_); + bufferLast_ = buffer_ + readCount_ - 1; + current_ = buffer_; + + if (readCount_ < bufferSize_) { + buffer_[readCount_] = '\0'; + ++bufferLast_; + eof_ = true; + } + } + } + + FILE* fp_; + Ch *buffer_; + size_t bufferSize_; + Ch *bufferLast_; + Ch *current_; + size_t readCount_; + size_t count_; //!< Number of characters read + bool eof_; +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/filestream.h b/Engine/source/persistence/rapidjson/filestream.h new file mode 100644 index 0000000000..d003029f89 --- /dev/null +++ b/Engine/source/persistence/rapidjson/filestream.h @@ -0,0 +1,49 @@ +#ifndef RAPIDJSON_FILESTREAM_H_ +#define RAPIDJSON_FILESTREAM_H_ + +#include "rapidjson.h" +#include + +namespace rapidjson { + +//! (Depreciated) Wrapper of C file stream for input or output. +/*! + This simple wrapper does not check the validity of the stream. + \implements Stream + \deprecated { This was only for basic testing in version 0.1, it is found that the performance is very low by using fgetc(). Use FileReadStream instead. } +*/ +class FileStream { +public: + typedef char Ch; //!< Character type. Only support char. + + FileStream(FILE* fp) : fp_(fp), count_(0) { Read(); } + char Peek() const { return current_; } + char Take() { char c = current_; Read(); return c; } + size_t Tell() const { return count_; } + void Put(char c) { fputc(c, fp_); } + void Flush() { fflush(fp_); } + + // Not implemented + char* PutBegin() { return 0; } + size_t PutEnd(char*) { return 0; } + +private: + void Read() { + RAPIDJSON_ASSERT(fp_ != 0); + int c = fgetc(fp_); + if (c != EOF) { + current_ = (char)c; + count_++; + } + else if (current_ != '\0') + current_ = '\0'; + } + + FILE* fp_; + char current_; + size_t count_; +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/filewritestream.h b/Engine/source/persistence/rapidjson/filewritestream.h new file mode 100644 index 0000000000..b3d9de3d56 --- /dev/null +++ b/Engine/source/persistence/rapidjson/filewritestream.h @@ -0,0 +1,73 @@ +#ifndef RAPIDJSON_FILEWRITESTREAM_H_ +#define RAPIDJSON_FILEWRITESTREAM_H_ + +#include "rapidjson.h" +#include + +namespace rapidjson { + +//! Wrapper of C file stream for input using fread(). +/*! + \implements Stream +*/ +class FileWriteStream { +public: + typedef char Ch; //!< Character type. Only support char. + + FileWriteStream(FILE* fp, char* buffer, size_t bufferSize) : fp_(fp), buffer_(buffer), bufferEnd_(buffer + bufferSize), current_(buffer_) { + RAPIDJSON_ASSERT(fp_ != 0); + } + + void Put(char c) { + if (current_ >= bufferEnd_) + Flush(); + + *current_++ = c; + } + + void PutN(char c, size_t n) { + size_t avail = bufferEnd_ - current_; + while (n > avail) { + memset(current_, c, avail); + current_ += avail; + Flush(); + n -= avail; + avail = bufferEnd_ - current_; + } + + if (n > 0) { + memset(current_, c, n); + current_ += n; + } + } + + void Flush() { + if (current_ != buffer_) { + fwrite(buffer_, 1, current_ - buffer_, fp_); + current_ = buffer_; + } + } + + // Not implemented + char Peek() const { RAPIDJSON_ASSERT(false); return 0; } + char Take() { RAPIDJSON_ASSERT(false); return 0; } + size_t Tell() const { RAPIDJSON_ASSERT(false); return 0; } + char* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + size_t PutEnd(char*) { RAPIDJSON_ASSERT(false); return 0; } + +private: + FILE* fp_; + char *buffer_; + char *bufferEnd_; + char *current_; +}; + +//! Implement specialized version of PutN() with memset() for better performance. +template<> +inline void PutN(FileWriteStream& stream, char c, size_t n) { + stream.PutN(c, n); +} + +} // namespace rapidjson + +#endif // RAPIDJSON_FILESTREAM_H_ diff --git a/Engine/source/persistence/rapidjson/internal/pow10.h b/Engine/source/persistence/rapidjson/internal/pow10.h new file mode 100644 index 0000000000..bf3a9afb04 --- /dev/null +++ b/Engine/source/persistence/rapidjson/internal/pow10.h @@ -0,0 +1,54 @@ +#ifndef RAPIDJSON_POW10_ +#define RAPIDJSON_POW10_ + +namespace rapidjson { +namespace internal { + +//! Computes integer powers of 10 in double (10.0^n). +/*! This function uses lookup table for fast and accurate results. + \param n positive/negative exponent. Must <= 308. + \return 10.0^n +*/ +inline double Pow10(int n) { + static const double e[] = { // 1e-308...1e308: 617 * 8 bytes = 4936 bytes + 1e-308,1e-307,1e-306,1e-305,1e-304,1e-303,1e-302,1e-301,1e-300, + 1e-299,1e-298,1e-297,1e-296,1e-295,1e-294,1e-293,1e-292,1e-291,1e-290,1e-289,1e-288,1e-287,1e-286,1e-285,1e-284,1e-283,1e-282,1e-281,1e-280, + 1e-279,1e-278,1e-277,1e-276,1e-275,1e-274,1e-273,1e-272,1e-271,1e-270,1e-269,1e-268,1e-267,1e-266,1e-265,1e-264,1e-263,1e-262,1e-261,1e-260, + 1e-259,1e-258,1e-257,1e-256,1e-255,1e-254,1e-253,1e-252,1e-251,1e-250,1e-249,1e-248,1e-247,1e-246,1e-245,1e-244,1e-243,1e-242,1e-241,1e-240, + 1e-239,1e-238,1e-237,1e-236,1e-235,1e-234,1e-233,1e-232,1e-231,1e-230,1e-229,1e-228,1e-227,1e-226,1e-225,1e-224,1e-223,1e-222,1e-221,1e-220, + 1e-219,1e-218,1e-217,1e-216,1e-215,1e-214,1e-213,1e-212,1e-211,1e-210,1e-209,1e-208,1e-207,1e-206,1e-205,1e-204,1e-203,1e-202,1e-201,1e-200, + 1e-199,1e-198,1e-197,1e-196,1e-195,1e-194,1e-193,1e-192,1e-191,1e-190,1e-189,1e-188,1e-187,1e-186,1e-185,1e-184,1e-183,1e-182,1e-181,1e-180, + 1e-179,1e-178,1e-177,1e-176,1e-175,1e-174,1e-173,1e-172,1e-171,1e-170,1e-169,1e-168,1e-167,1e-166,1e-165,1e-164,1e-163,1e-162,1e-161,1e-160, + 1e-159,1e-158,1e-157,1e-156,1e-155,1e-154,1e-153,1e-152,1e-151,1e-150,1e-149,1e-148,1e-147,1e-146,1e-145,1e-144,1e-143,1e-142,1e-141,1e-140, + 1e-139,1e-138,1e-137,1e-136,1e-135,1e-134,1e-133,1e-132,1e-131,1e-130,1e-129,1e-128,1e-127,1e-126,1e-125,1e-124,1e-123,1e-122,1e-121,1e-120, + 1e-119,1e-118,1e-117,1e-116,1e-115,1e-114,1e-113,1e-112,1e-111,1e-110,1e-109,1e-108,1e-107,1e-106,1e-105,1e-104,1e-103,1e-102,1e-101,1e-100, + 1e-99, 1e-98, 1e-97, 1e-96, 1e-95, 1e-94, 1e-93, 1e-92, 1e-91, 1e-90, 1e-89, 1e-88, 1e-87, 1e-86, 1e-85, 1e-84, 1e-83, 1e-82, 1e-81, 1e-80, + 1e-79, 1e-78, 1e-77, 1e-76, 1e-75, 1e-74, 1e-73, 1e-72, 1e-71, 1e-70, 1e-69, 1e-68, 1e-67, 1e-66, 1e-65, 1e-64, 1e-63, 1e-62, 1e-61, 1e-60, + 1e-59, 1e-58, 1e-57, 1e-56, 1e-55, 1e-54, 1e-53, 1e-52, 1e-51, 1e-50, 1e-49, 1e-48, 1e-47, 1e-46, 1e-45, 1e-44, 1e-43, 1e-42, 1e-41, 1e-40, + 1e-39, 1e-38, 1e-37, 1e-36, 1e-35, 1e-34, 1e-33, 1e-32, 1e-31, 1e-30, 1e-29, 1e-28, 1e-27, 1e-26, 1e-25, 1e-24, 1e-23, 1e-22, 1e-21, 1e-20, + 1e-19, 1e-18, 1e-17, 1e-16, 1e-15, 1e-14, 1e-13, 1e-12, 1e-11, 1e-10, 1e-9, 1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1e+0, + 1e+1, 1e+2, 1e+3, 1e+4, 1e+5, 1e+6, 1e+7, 1e+8, 1e+9, 1e+10, 1e+11, 1e+12, 1e+13, 1e+14, 1e+15, 1e+16, 1e+17, 1e+18, 1e+19, 1e+20, + 1e+21, 1e+22, 1e+23, 1e+24, 1e+25, 1e+26, 1e+27, 1e+28, 1e+29, 1e+30, 1e+31, 1e+32, 1e+33, 1e+34, 1e+35, 1e+36, 1e+37, 1e+38, 1e+39, 1e+40, + 1e+41, 1e+42, 1e+43, 1e+44, 1e+45, 1e+46, 1e+47, 1e+48, 1e+49, 1e+50, 1e+51, 1e+52, 1e+53, 1e+54, 1e+55, 1e+56, 1e+57, 1e+58, 1e+59, 1e+60, + 1e+61, 1e+62, 1e+63, 1e+64, 1e+65, 1e+66, 1e+67, 1e+68, 1e+69, 1e+70, 1e+71, 1e+72, 1e+73, 1e+74, 1e+75, 1e+76, 1e+77, 1e+78, 1e+79, 1e+80, + 1e+81, 1e+82, 1e+83, 1e+84, 1e+85, 1e+86, 1e+87, 1e+88, 1e+89, 1e+90, 1e+91, 1e+92, 1e+93, 1e+94, 1e+95, 1e+96, 1e+97, 1e+98, 1e+99, 1e+100, + 1e+101,1e+102,1e+103,1e+104,1e+105,1e+106,1e+107,1e+108,1e+109,1e+110,1e+111,1e+112,1e+113,1e+114,1e+115,1e+116,1e+117,1e+118,1e+119,1e+120, + 1e+121,1e+122,1e+123,1e+124,1e+125,1e+126,1e+127,1e+128,1e+129,1e+130,1e+131,1e+132,1e+133,1e+134,1e+135,1e+136,1e+137,1e+138,1e+139,1e+140, + 1e+141,1e+142,1e+143,1e+144,1e+145,1e+146,1e+147,1e+148,1e+149,1e+150,1e+151,1e+152,1e+153,1e+154,1e+155,1e+156,1e+157,1e+158,1e+159,1e+160, + 1e+161,1e+162,1e+163,1e+164,1e+165,1e+166,1e+167,1e+168,1e+169,1e+170,1e+171,1e+172,1e+173,1e+174,1e+175,1e+176,1e+177,1e+178,1e+179,1e+180, + 1e+181,1e+182,1e+183,1e+184,1e+185,1e+186,1e+187,1e+188,1e+189,1e+190,1e+191,1e+192,1e+193,1e+194,1e+195,1e+196,1e+197,1e+198,1e+199,1e+200, + 1e+201,1e+202,1e+203,1e+204,1e+205,1e+206,1e+207,1e+208,1e+209,1e+210,1e+211,1e+212,1e+213,1e+214,1e+215,1e+216,1e+217,1e+218,1e+219,1e+220, + 1e+221,1e+222,1e+223,1e+224,1e+225,1e+226,1e+227,1e+228,1e+229,1e+230,1e+231,1e+232,1e+233,1e+234,1e+235,1e+236,1e+237,1e+238,1e+239,1e+240, + 1e+241,1e+242,1e+243,1e+244,1e+245,1e+246,1e+247,1e+248,1e+249,1e+250,1e+251,1e+252,1e+253,1e+254,1e+255,1e+256,1e+257,1e+258,1e+259,1e+260, + 1e+261,1e+262,1e+263,1e+264,1e+265,1e+266,1e+267,1e+268,1e+269,1e+270,1e+271,1e+272,1e+273,1e+274,1e+275,1e+276,1e+277,1e+278,1e+279,1e+280, + 1e+281,1e+282,1e+283,1e+284,1e+285,1e+286,1e+287,1e+288,1e+289,1e+290,1e+291,1e+292,1e+293,1e+294,1e+295,1e+296,1e+297,1e+298,1e+299,1e+300, + 1e+301,1e+302,1e+303,1e+304,1e+305,1e+306,1e+307,1e+308 + }; + RAPIDJSON_ASSERT(n <= 308); + return n < -308 ? 0.0 : e[n + 308]; +} + +} // namespace internal +} // namespace rapidjson + +#endif // RAPIDJSON_POW10_ diff --git a/Engine/source/persistence/rapidjson/internal/stack.h b/Engine/source/persistence/rapidjson/internal/stack.h new file mode 100644 index 0000000000..d4b4b6449d --- /dev/null +++ b/Engine/source/persistence/rapidjson/internal/stack.h @@ -0,0 +1,83 @@ +#ifndef RAPIDJSON_INTERNAL_STACK_H_ +#define RAPIDJSON_INTERNAL_STACK_H_ + +namespace rapidjson { +namespace internal { + +/////////////////////////////////////////////////////////////////////////////// +// Stack + +//! A type-unsafe stack for storing different types of data. +/*! \tparam Allocator Allocator for allocating stack memory. +*/ +template +class Stack { +public: + Stack(Allocator* allocator, size_t stack_capacity) : allocator_(allocator), own_allocator_(0), stack_(0), stack_top_(0), stack_end_(0), stack_capacity_(stack_capacity) { + RAPIDJSON_ASSERT(stack_capacity_ > 0); + if (!allocator_) + own_allocator_ = allocator_ = new Allocator(); + stack_top_ = stack_ = (char*)allocator_->Malloc(stack_capacity_); + stack_end_ = stack_ + stack_capacity_; + } + + ~Stack() { + Allocator::Free(stack_); + delete own_allocator_; // Only delete if it is owned by the stack + } + + void Clear() { /*stack_top_ = 0;*/ stack_top_ = stack_; } + + template + T* Push(size_t count = 1) { + // Expand the stack if needed + if (stack_top_ + sizeof(T) * count >= stack_end_) { + size_t new_capacity = stack_capacity_ * 2; + size_t size = GetSize(); + size_t new_size = GetSize() + sizeof(T) * count; + if (new_capacity < new_size) + new_capacity = new_size; + stack_ = (char*)allocator_->Realloc(stack_, stack_capacity_, new_capacity); + stack_capacity_ = new_capacity; + stack_top_ = stack_ + size; + stack_end_ = stack_ + stack_capacity_; + } + T* ret = (T*)stack_top_; + stack_top_ += sizeof(T) * count; + return ret; + } + + template + T* Pop(size_t count) { + RAPIDJSON_ASSERT(GetSize() >= count * sizeof(T)); + stack_top_ -= count * sizeof(T); + return (T*)stack_top_; + } + + template + T* Top() { + RAPIDJSON_ASSERT(GetSize() >= sizeof(T)); + return (T*)(stack_top_ - sizeof(T)); + } + + template + T* Bottom() { return (T*)stack_; } + + Allocator& GetAllocator() { return *allocator_; } + bool Empty() const { return stack_top_ == stack_; } + size_t GetSize() const { return stack_top_ - stack_; } + size_t GetCapacity() const { return stack_capacity_; } + +private: + Allocator* allocator_; + Allocator* own_allocator_; + char *stack_; + char *stack_top_; + char *stack_end_; + size_t stack_capacity_; +}; + +} // namespace internal +} // namespace rapidjson + +#endif // RAPIDJSON_STACK_H_ diff --git a/Engine/source/persistence/rapidjson/internal/strfunc.h b/Engine/source/persistence/rapidjson/internal/strfunc.h new file mode 100644 index 0000000000..bbf444fe6d --- /dev/null +++ b/Engine/source/persistence/rapidjson/internal/strfunc.h @@ -0,0 +1,24 @@ +#ifndef RAPIDJSON_INTERNAL_STRFUNC_H_ +#define RAPIDJSON_INTERNAL_STRFUNC_H_ + +namespace rapidjson { +namespace internal { + +//! Custom strlen() which works on different character types. +/*! \tparam Ch Character type (e.g. char, wchar_t, short) + \param s Null-terminated input string. + \return Number of characters in the string. + \note This has the same semantics as strlen(), the return value is not number of Unicode codepoints. +*/ +template +inline SizeType StrLen(const Ch* s) { + const Ch* p = s; + while (*p != '\0') + ++p; + return SizeType(p - s); +} + +} // namespace internal +} // namespace rapidjson + +#endif // RAPIDJSON_INTERNAL_STRFUNC_H_ diff --git a/Engine/source/persistence/rapidjson/prettywriter.h b/Engine/source/persistence/rapidjson/prettywriter.h new file mode 100644 index 0000000000..7e2645de53 --- /dev/null +++ b/Engine/source/persistence/rapidjson/prettywriter.h @@ -0,0 +1,160 @@ +#ifndef RAPIDJSON_PRETTYWRITER_H_ +#define RAPIDJSON_PRETTYWRITER_H_ + +#include "writer.h" + +namespace rapidjson { + +//! Writer with indentation and spacing. +/*! + \tparam OutputStream Type of ouptut os. + \tparam Encoding Encoding of both source strings and output. + \tparam Allocator Type of allocator for allocating memory of stack. +*/ +template, typename TargetEncoding = UTF8<>, typename Allocator = MemoryPoolAllocator<> > +class PrettyWriter : public Writer { +public: + typedef Writer Base; + typedef typename Base::Ch Ch; + + //! Constructor + /*! \param os Output os. + \param allocator User supplied allocator. If it is null, it will create a private one. + \param levelDepth Initial capacity of + */ + PrettyWriter(OutputStream& os, Allocator* allocator = 0, size_t levelDepth = Base::kDefaultLevelDepth) : + Base(os, allocator, levelDepth), indentChar_(' '), indentCharCount_(4) {} + + //! Set custom indentation. + /*! \param indentChar Character for indentation. Must be whitespace character (' ', '\t', '\n', '\r'). + \param indentCharCount Number of indent characters for each indentation level. + \note The default indentation is 4 spaces. + */ + PrettyWriter& SetIndent(Ch indentChar, unsigned indentCharCount) { + RAPIDJSON_ASSERT(indentChar == ' ' || indentChar == '\t' || indentChar == '\n' || indentChar == '\r'); + indentChar_ = indentChar; + indentCharCount_ = indentCharCount; + return *this; + } + + //@name Implementation of Handler. + //@{ + + PrettyWriter& Null() { PrettyPrefix(kNullType); Base::WriteNull(); return *this; } + PrettyWriter& Bool(bool b) { PrettyPrefix(b ? kTrueType : kFalseType); Base::WriteBool(b); return *this; } + PrettyWriter& Int(int i) { PrettyPrefix(kNumberType); Base::WriteInt(i); return *this; } + PrettyWriter& Uint(unsigned u) { PrettyPrefix(kNumberType); Base::WriteUint(u); return *this; } + PrettyWriter& Int64(int64_t i64) { PrettyPrefix(kNumberType); Base::WriteInt64(i64); return *this; } + PrettyWriter& Uint64(uint64_t u64) { PrettyPrefix(kNumberType); Base::WriteUint64(u64); return *this; } + PrettyWriter& Double(double d) { PrettyPrefix(kNumberType); Base::WriteDouble(d); return *this; } + + PrettyWriter& String(const Ch* str, SizeType length, bool copy = false) { + (void)copy; + PrettyPrefix(kStringType); + Base::WriteString(str, length); + return *this; + } + + PrettyWriter& StartObject() { + PrettyPrefix(kObjectType); + new (Base::level_stack_.template Push()) typename Base::Level(false); + Base::WriteStartObject(); + return *this; + } + + PrettyWriter& EndObject(SizeType memberCount = 0) { + (void)memberCount; + RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level)); + RAPIDJSON_ASSERT(!Base::level_stack_.template Top()->inArray); + bool empty = Base::level_stack_.template Pop(1)->valueCount == 0; + + if (!empty) { + Base::os_.Put('\n'); + WriteIndent(); + } + Base::WriteEndObject(); + if (Base::level_stack_.Empty()) // end of json text + Base::os_.flush(); + return *this; + } + + PrettyWriter& StartArray() { + PrettyPrefix(kArrayType); + new (Base::level_stack_.template Push()) typename Base::Level(true); + Base::WriteStartArray(); + return *this; + } + + PrettyWriter& EndArray(SizeType memberCount = 0) { + (void)memberCount; + RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level)); + RAPIDJSON_ASSERT(Base::level_stack_.template Top()->inArray); + bool empty = Base::level_stack_.template Pop(1)->valueCount == 0; + + if (!empty) { + Base::os_.Put('\n'); + WriteIndent(); + } + Base::WriteEndArray(); + if (Base::level_stack_.Empty()) // end of json text + Base::os_.flush(); + return *this; + } + + //@} + + //! Simpler but slower overload. + PrettyWriter& String(const Ch* str) { return String(str, internal::StrLen(str)); } + +protected: + void PrettyPrefix(Type type) { + (void)type; + if (Base::level_stack_.GetSize() != 0) { // this value is not at root + typename Base::Level* level = Base::level_stack_.template Top(); + + if (level->inArray) { + if (level->valueCount > 0) { + Base::os_.Put(','); // add comma if it is not the first element in array + Base::os_.Put('\n'); + } + else + Base::os_.Put('\n'); + WriteIndent(); + } + else { // in object + if (level->valueCount > 0) { + if (level->valueCount % 2 == 0) { + Base::os_.Put(','); + Base::os_.Put('\n'); + } + else { + Base::os_.Put(':'); + Base::os_.Put(' '); + } + } + else + Base::os_.Put('\n'); + + if (level->valueCount % 2 == 0) + WriteIndent(); + } + if (!level->inArray && level->valueCount % 2 == 0) + RAPIDJSON_ASSERT(type == kStringType); // if it's in object, then even number should be a name + level->valueCount++; + } + else + RAPIDJSON_ASSERT(type == kObjectType || type == kArrayType); + } + + void WriteIndent() { + size_t count = (Base::level_stack_.GetSize() / sizeof(typename Base::Level)) * indentCharCount_; + PutN(Base::os_, indentChar_, count); + } + + Ch indentChar_; + unsigned indentCharCount_; +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_RAPIDJSON_H_ diff --git a/Engine/source/persistence/rapidjson/rapidjson.h b/Engine/source/persistence/rapidjson/rapidjson.h new file mode 100644 index 0000000000..753396d163 --- /dev/null +++ b/Engine/source/persistence/rapidjson/rapidjson.h @@ -0,0 +1,256 @@ +#ifndef RAPIDJSON_RAPIDJSON_H_ +#define RAPIDJSON_RAPIDJSON_H_ + +// Copyright (c) 2011 Milo Yip (miloyip@gmail.com) +// Version 0.1 + +#include // malloc(), realloc(), free() +#include // memcpy() + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_NO_INT64DEFINE + +// Here defines int64_t and uint64_t types in global namespace. +// If user have their own definition, can define RAPIDJSON_NO_INT64DEFINE to disable this. +#ifndef RAPIDJSON_NO_INT64DEFINE +#ifdef _MSC_VER +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#define RAPIDJSON_FORCEINLINE __forceinline +#else +#include +#define RAPIDJSON_FORCEINLINE +#endif +#endif // RAPIDJSON_NO_INT64TYPEDEF + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_ENDIAN +#define RAPIDJSON_LITTLEENDIAN 0 //!< Little endian machine +#define RAPIDJSON_BIGENDIAN 1 //!< Big endian machine + +//! Endianness of the machine. +/*! GCC provided macro for detecting endianness of the target machine. But other + compilers may not have this. User can define RAPIDJSON_ENDIAN to either + RAPIDJSON_LITTLEENDIAN or RAPIDJSON_BIGENDIAN. +*/ +#ifndef RAPIDJSON_ENDIAN +#ifdef __BYTE_ORDER__ +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN +#else +#define RAPIDJSON_ENDIAN RAPIDJSON_BIGENDIAN +#endif // __BYTE_ORDER__ +#else +#define RAPIDJSON_ENDIAN RAPIDJSON_LITTLEENDIAN // Assumes little endian otherwise. +#endif +#endif // RAPIDJSON_ENDIAN + + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_ALIGNSIZE + +//! Data alignment of the machine. +/*! + Some machine requires strict data alignment. + Currently the default uses 4 bytes alignment. User can customize this. +*/ +#ifndef RAPIDJSON_ALIGN +#define RAPIDJSON_ALIGN(x) ((x + 3) & ~3) +#endif + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_SSE2/RAPIDJSON_SSE42/RAPIDJSON_SIMD + +// Enable SSE2 optimization. +//#define RAPIDJSON_SSE2 + +// Enable SSE4.2 optimization. +//#define RAPIDJSON_SSE42 + +#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42) +#define RAPIDJSON_SIMD +#endif + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_NO_SIZETYPEDEFINE + +#ifndef RAPIDJSON_NO_SIZETYPEDEFINE +namespace rapidjson { +//! Use 32-bit array/string indices even for 64-bit platform, instead of using size_t. +/*! User may override the SizeType by defining RAPIDJSON_NO_SIZETYPEDEFINE. +*/ +typedef unsigned SizeType; +} // namespace rapidjson +#endif + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_ASSERT + +//! Assertion. +/*! By default, rapidjson uses C assert() for assertion. + User can override it by defining RAPIDJSON_ASSERT(x) macro. +*/ +#ifndef RAPIDJSON_ASSERT +#include +#define RAPIDJSON_ASSERT(x) assert(x) +#endif // RAPIDJSON_ASSERT + +/////////////////////////////////////////////////////////////////////////////// +// RAPIDJSON_STATIC_ASSERT + +// Adopt from boost +#ifndef RAPIDJSON_STATIC_ASSERT +namespace rapidjson { +template struct STATIC_ASSERTION_FAILURE; +template <> struct STATIC_ASSERTION_FAILURE { enum { value = 1 }; }; +template struct StaticAssertTest {}; +} // namespace rapidjson + +#define RAPIDJSON_JOIN(X, Y) RAPIDJSON_DO_JOIN(X, Y) +#define RAPIDJSON_DO_JOIN(X, Y) RAPIDJSON_DO_JOIN2(X, Y) +#define RAPIDJSON_DO_JOIN2(X, Y) X##Y + +#define RAPIDJSON_STATIC_ASSERT(x) typedef ::rapidjson::StaticAssertTest<\ + sizeof(::rapidjson::STATIC_ASSERTION_FAILURE)>\ + RAPIDJSON_JOIN(StaticAssertTypedef, __LINE__) +#endif + +/////////////////////////////////////////////////////////////////////////////// +// Helpers + +#define RAPIDJSON_MULTILINEMACRO_BEGIN do { +#define RAPIDJSON_MULTILINEMACRO_END \ +} while((void)0, 0) + +/////////////////////////////////////////////////////////////////////////////// +// Allocators and Encodings + +#include "allocators.h" +#include "encodings.h" + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// Stream + +/*! \class rapidjson::Stream + \brief Concept for reading and writing characters. + + For read-only stream, no need to implement PutBegin(), Put(), Flush() and PutEnd(). + + For write-only stream, only need to implement Put() and Flush(). + +\code +concept Stream { + typename Ch; //!< Character type of the stream. + + //! Read the current character from stream without moving the read cursor. + Ch Peek() const; + + //! Read the current character from stream and moving the read cursor to next character. + Ch Take(); + + //! Get the current read cursor. + //! \return Number of characters read from start. + size_t Tell(); + + //! Begin writing operation at the current read pointer. + //! \return The begin writer pointer. + Ch* PutBegin(); + + //! Write a character. + void Put(Ch c); + + //! Flush the buffer. + void Flush(); + + //! End the writing operation. + //! \param begin The begin write pointer returned by PutBegin(). + //! \return Number of characters written. + size_t PutEnd(Ch* begin); +} +\endcode +*/ + +//! Put N copies of a character to a stream. +template +inline void PutN(Stream& stream, Ch c, size_t n) { + for (size_t i = 0; i < n; i++) + stream.Put(c); +} + +/////////////////////////////////////////////////////////////////////////////// +// StringStream + +//! Read-only string stream. +/*! \implements Stream +*/ +template +struct GenericStringStream { + typedef typename Encoding::Ch Ch; + + GenericStringStream(const Ch *src) : src_(src), head_(src) {} + + Ch Peek() const { return *src_; } + Ch Take() { return *src_++; } + size_t Tell() const { return src_ - head_; } + + Ch* PutBegin() { RAPIDJSON_ASSERT(false); return 0; } + void Put(Ch) { RAPIDJSON_ASSERT(false); } + void Flush() { RAPIDJSON_ASSERT(false); } + size_t PutEnd(Ch*) { RAPIDJSON_ASSERT(false); return 0; } + + const Ch* src_; //!< Current read position. + const Ch* head_; //!< Original head of the string. +}; + +typedef GenericStringStream > StringStream; + +/////////////////////////////////////////////////////////////////////////////// +// InsituStringStream + +//! A read-write string stream. +/*! This string stream is particularly designed for in-situ parsing. + \implements Stream +*/ +template +struct GenericInsituStringStream { + typedef typename Encoding::Ch Ch; + + GenericInsituStringStream(Ch *src) : src_(src), dst_(0), head_(src) {} + + // Read + Ch Peek() { return *src_; } + Ch Take() { return *src_++; } + size_t Tell() { return src_ - head_; } + + // Write + Ch* PutBegin() { return dst_ = src_; } + void Put(Ch c) { RAPIDJSON_ASSERT(dst_ != 0); *dst_++ = c; } + void Flush() {} + size_t PutEnd(Ch* begin) { return dst_ - begin; } + + Ch* src_; + Ch* dst_; + Ch* head_; +}; + +typedef GenericInsituStringStream > InsituStringStream; + +/////////////////////////////////////////////////////////////////////////////// +// Type + +//! Type of JSON value +enum Type { + kNullType = 0, //!< null + kFalseType = 1, //!< false + kTrueType = 2, //!< true + kObjectType = 3, //!< object + kArrayType = 4, //!< array + kStringType = 5, //!< string + kNumberType = 6, //!< number +}; + +} // namespace rapidjson + +#endif // RAPIDJSON_RAPIDJSON_H_ diff --git a/Engine/source/persistence/rapidjson/reader.h b/Engine/source/persistence/rapidjson/reader.h new file mode 100644 index 0000000000..36f6d50c68 --- /dev/null +++ b/Engine/source/persistence/rapidjson/reader.h @@ -0,0 +1,669 @@ +#ifndef RAPIDJSON_READER_H_ +#define RAPIDJSON_READER_H_ + +// Copyright (c) 2011 Milo Yip (miloyip@gmail.com) +// Version 0.1 + +#include "rapidjson.h" +#include "encodings.h" +#include "internal/pow10.h" +#include "internal/stack.h" +#include + +#ifdef RAPIDJSON_SSE42 +#include +#elif defined(RAPIDJSON_SSE2) +#include +#endif + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) // conditional expression is constant +#endif + +#ifndef RAPIDJSON_PARSE_ERROR +#define RAPIDJSON_PARSE_ERROR(msg, offset) \ + RAPIDJSON_MULTILINEMACRO_BEGIN \ + parseError_ = msg; \ + errorOffset_ = offset; \ + longjmp(jmpbuf_, 1); \ + RAPIDJSON_MULTILINEMACRO_END +#endif + +namespace rapidjson { + +/////////////////////////////////////////////////////////////////////////////// +// ParseFlag + +//! Combination of parseFlags +enum ParseFlag { + kParseDefaultFlags = 0, //!< Default parse flags. Non-destructive parsing. Text strings are decoded into allocated buffer. + kParseInsituFlag = 1, //!< In-situ(destructive) parsing. + kParseValidateEncodingFlag = 2, //!< Validate encoding of JSON strings. +}; + +/////////////////////////////////////////////////////////////////////////////// +// Handler + +/*! \class rapidjson::Handler + \brief Concept for receiving events from GenericReader upon parsing. +\code +concept Handler { + typename Ch; + + void Null(); + void Bool(bool b); + void Int(int i); + void Uint(unsigned i); + void Int64(int64_t i); + void Uint64(uint64_t i); + void Double(double d); + void String(const Ch* str, SizeType length, bool copy); + void StartObject(); + void EndObject(SizeType memberCount); + void StartArray(); + void EndArray(SizeType elementCount); +}; +\endcode +*/ +/////////////////////////////////////////////////////////////////////////////// +// BaseReaderHandler + +//! Default implementation of Handler. +/*! This can be used as base class of any reader handler. + \implements Handler +*/ +template > +struct BaseReaderHandler { + typedef typename Encoding::Ch Ch; + + void Default() {} + void Null() { Default(); } + void Bool(bool) { Default(); } + void Int(int) { Default(); } + void Uint(unsigned) { Default(); } + void Int64(int64_t) { Default(); } + void Uint64(uint64_t) { Default(); } + void Double(double) { Default(); } + void String(const Ch*, SizeType, bool) { Default(); } + void StartObject() { Default(); } + void EndObject(SizeType) { Default(); } + void StartArray() { Default(); } + void EndArray(SizeType) { Default(); } +}; + +/////////////////////////////////////////////////////////////////////////////// +// SkipWhitespace + +//! Skip the JSON white spaces in a stream. +/*! \param stream A input stream for skipping white spaces. + \note This function has SSE2/SSE4.2 specialization. +*/ +template +void SkipWhitespace(InputStream& is) { + InputStream s = is; // Use a local copy for optimization + while (s.Peek() == ' ' || s.Peek() == '\n' || s.Peek() == '\r' || s.Peek() == '\t') + s.Take(); + is = s; +} + +#ifdef RAPIDJSON_SSE42 +//! Skip whitespace with SSE 4.2 pcmpistrm instruction, testing 16 8-byte characters at once. +inline const char *SkipWhitespace_SIMD(const char* p) { + static const char whitespace[16] = " \n\r\t"; + __m128i w = _mm_loadu_si128((const __m128i *)&whitespace[0]); + + for (;;) { + __m128i s = _mm_loadu_si128((const __m128i *)p); + unsigned r = _mm_cvtsi128_si32(_mm_cmpistrm(w, s, _SIDD_UBYTE_OPS | _SIDD_CMP_EQUAL_ANY | _SIDD_BIT_MASK | _SIDD_NEGATIVE_POLARITY)); + if (r == 0) // all 16 characters are whitespace + p += 16; + else { // some of characters may be non-whitespace +#ifdef _MSC_VER // Find the index of first non-whitespace + unsigned long offset; + if (_BitScanForward(&offset, r)) + return p + offset; +#else + if (r != 0) + return p + __builtin_ffs(r) - 1; +#endif + } + } +} + +#elif defined(RAPIDJSON_SSE2) + +//! Skip whitespace with SSE2 instructions, testing 16 8-byte characters at once. +inline const char *SkipWhitespace_SIMD(const char* p) { + static const char whitespaces[4][17] = { + " ", + "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n", + "\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r", + "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t"}; + + __m128i w0 = _mm_loadu_si128((const __m128i *)&whitespaces[0][0]); + __m128i w1 = _mm_loadu_si128((const __m128i *)&whitespaces[1][0]); + __m128i w2 = _mm_loadu_si128((const __m128i *)&whitespaces[2][0]); + __m128i w3 = _mm_loadu_si128((const __m128i *)&whitespaces[3][0]); + + for (;;) { + __m128i s = _mm_loadu_si128((const __m128i *)p); + __m128i x = _mm_cmpeq_epi8(s, w0); + x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w1)); + x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w2)); + x = _mm_or_si128(x, _mm_cmpeq_epi8(s, w3)); + unsigned short r = ~_mm_movemask_epi8(x); + if (r == 0) // all 16 characters are whitespace + p += 16; + else { // some of characters may be non-whitespace +#ifdef _MSC_VER // Find the index of first non-whitespace + unsigned long offset; + if (_BitScanForward(&offset, r)) + return p + offset; +#else + if (r != 0) + return p + __builtin_ffs(r) - 1; +#endif + } + } +} + +#endif // RAPIDJSON_SSE2 + +#ifdef RAPIDJSON_SIMD +//! Template function specialization for InsituStringStream +template<> inline void SkipWhitespace(InsituStringStream& is) { + is.src_ = const_cast(SkipWhitespace_SIMD(is.src_)); +} + +//! Template function specialization for StringStream +template<> inline void SkipWhitespace(StringStream& is) { + is.src_ = SkipWhitespace_SIMD(is.src_); +} +#endif // RAPIDJSON_SIMD + +/////////////////////////////////////////////////////////////////////////////// +// GenericReader + +//! SAX-style JSON parser. Use Reader for UTF8 encoding and default allocator. +/*! GenericReader parses JSON text from a stream, and send events synchronously to an + object implementing Handler concept. + + It needs to allocate a stack for storing a single decoded string during + non-destructive parsing. + + For in-situ parsing, the decoded string is directly written to the source + text string, no temporary buffer is required. + + A GenericReader object can be reused for parsing multiple JSON text. + + \tparam SourceEncoding Encoding of the input stream. + \tparam TargetEncoding Encoding of the parse output. + \tparam Allocator Allocator type for stack. +*/ +template > +class GenericReader { +public: + typedef typename SourceEncoding::Ch Ch; + + //! Constructor. + /*! \param allocator Optional allocator for allocating stack memory. (Only use for non-destructive parsing) + \param stackCapacity stack capacity in bytes for storing a single decoded string. (Only use for non-destructive parsing) + */ + GenericReader(Allocator* allocator = 0, size_t stackCapacity = kDefaultStackCapacity) : stack_(allocator, stackCapacity), parseError_(0), errorOffset_(0) {} + + //! Parse JSON text. + /*! \tparam parseFlags Combination of ParseFlag. + \tparam InputStream Type of input stream. + \tparam Handler Type of handler which must implement Handler concept. + \param stream Input stream to be parsed. + \param handler The handler to receive events. + \return Whether the parsing is successful. + */ + template + bool Parse(InputStream& is, Handler& handler) { + parseError_ = 0; + errorOffset_ = 0; + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4611) // interaction between '_setjmp' and C++ object destruction is non-portable +#endif + if (setjmp(jmpbuf_)) { +#ifdef _MSC_VER +#pragma warning(pop) +#endif + stack_.Clear(); + return false; + } + + SkipWhitespace(is); + + if (is.Peek() == '\0') + RAPIDJSON_PARSE_ERROR("Text only contains white space(s)", is.Tell()); + else { + switch (is.Peek()) { + case '{': ParseObject(is, handler); break; + case '[': ParseArray(is, handler); break; + default: RAPIDJSON_PARSE_ERROR("Expect either an object or array at root", is.Tell()); + } + SkipWhitespace(is); + + if (is.Peek() != '\0') + RAPIDJSON_PARSE_ERROR("Nothing should follow the root object or array.", is.Tell()); + } + + return true; + } + + bool HasParseError() const { return parseError_ != 0; } + const char* GetParseError() const { return parseError_; } + size_t GetErrorOffset() const { return errorOffset_; } + +private: + // Parse object: { string : value, ... } + template + void ParseObject(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == '{'); + is.Take(); // Skip '{' + handler.StartObject(); + SkipWhitespace(is); + + if (is.Peek() == '}') { + is.Take(); + handler.EndObject(0); // empty object + return; + } + + for (SizeType memberCount = 0;;) { + if (is.Peek() != '"') + RAPIDJSON_PARSE_ERROR("Name of an object member must be a string", is.Tell()); + + ParseString(is, handler); + SkipWhitespace(is); + + if (is.Take() != ':') + RAPIDJSON_PARSE_ERROR("There must be a colon after the name of object member", is.Tell()); + + SkipWhitespace(is); + + ParseValue(is, handler); + SkipWhitespace(is); + + ++memberCount; + + switch(is.Take()) { + case ',': SkipWhitespace(is); break; + case '}': handler.EndObject(memberCount); return; + default: RAPIDJSON_PARSE_ERROR("Must be a comma or '}' after an object member", is.Tell()); + } + } + } + + // Parse array: [ value, ... ] + template + void ParseArray(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == '['); + is.Take(); // Skip '[' + handler.StartArray(); + SkipWhitespace(is); + + if (is.Peek() == ']') { + is.Take(); + handler.EndArray(0); // empty array + return; + } + + for (SizeType elementCount = 0;;) { + ParseValue(is, handler); + ++elementCount; + SkipWhitespace(is); + + switch (is.Take()) { + case ',': SkipWhitespace(is); break; + case ']': handler.EndArray(elementCount); return; + default: RAPIDJSON_PARSE_ERROR("Must be a comma or ']' after an array element.", is.Tell()); + } + } + } + + template + void ParseNull(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == 'n'); + is.Take(); + + if (is.Take() == 'u' && is.Take() == 'l' && is.Take() == 'l') + handler.Null(); + else + RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell() - 1); + } + + template + void ParseTrue(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == 't'); + is.Take(); + + if (is.Take() == 'r' && is.Take() == 'u' && is.Take() == 'e') + handler.Bool(true); + else + RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell()); + } + + template + void ParseFalse(InputStream& is, Handler& handler) { + RAPIDJSON_ASSERT(is.Peek() == 'f'); + is.Take(); + + if (is.Take() == 'a' && is.Take() == 'l' && is.Take() == 's' && is.Take() == 'e') + handler.Bool(false); + else + RAPIDJSON_PARSE_ERROR("Invalid value", is.Tell() - 1); + } + + // Helper function to parse four hexidecimal digits in \uXXXX in ParseString(). + template + unsigned ParseHex4(InputStream& is) { + InputStream s = is; // Use a local copy for optimization + unsigned codepoint = 0; + for (int i = 0; i < 4; i++) { + Ch c = s.Take(); + codepoint <<= 4; + codepoint += c; + if (c >= '0' && c <= '9') + codepoint -= '0'; + else if (c >= 'A' && c <= 'F') + codepoint -= 'A' - 10; + else if (c >= 'a' && c <= 'f') + codepoint -= 'a' - 10; + else + RAPIDJSON_PARSE_ERROR("Incorrect hex digit after \\u escape", s.Tell() - 1); + } + is = s; // Restore is + return codepoint; + } + + class StackStream { + public: + typedef typename TargetEncoding::Ch Ch; + + StackStream(internal::Stack& stack) : stack_(stack), length_(0) {} + void Put(Ch c) { + *stack_.template Push() = c; + ++length_; + } + internal::Stack& stack_; + SizeType length_; + + private: + // Prohibit assignment for VC C4512 warning + StackStream& operator=(const StackStream&); + }; + + // Parse string and generate String event. Different code paths for kParseInsituFlag. + template + void ParseString(InputStream& is, Handler& handler) { + InputStream s = is; // Local copy for optimization + if (parseFlags & kParseInsituFlag) { + Ch *head = s.PutBegin(); + ParseStringToStream(s, s); + size_t length = s.PutEnd(head) - 1; + RAPIDJSON_ASSERT(length <= 0xFFFFFFFF); + handler.String((typename TargetEncoding::Ch*)head, SizeType(length), false); + } + else { + StackStream stackStream(stack_); + ParseStringToStream(s, stackStream); + handler.String(stack_.template Pop(stackStream.length_), stackStream.length_ - 1, true); + } + is = s; // Restore is + } + + // Parse string to an output is + // This function handles the prefix/suffix double quotes, escaping, and optional encoding validation. + template + RAPIDJSON_FORCEINLINE void ParseStringToStream(InputStream& is, OutputStream& os) { +#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + static const char escape[256] = { + Z16, Z16, 0, 0,'\"', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'/', + Z16, Z16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'\\', 0, 0, 0, + 0, 0,'\b', 0, 0, 0,'\f', 0, 0, 0, 0, 0, 0, 0,'\n', 0, + 0, 0,'\r', 0,'\t', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16 + }; +#undef Z16 + + RAPIDJSON_ASSERT(is.Peek() == '\"'); + is.Take(); // Skip '\"' + + for (;;) { + Ch c = is.Peek(); + if (c == '\\') { // Escape + is.Take(); + Ch e = is.Take(); + if ((sizeof(Ch) == 1 || unsigned(e) < 256) && escape[(unsigned char)e]) + os.Put(escape[(unsigned char)e]); + else if (e == 'u') { // Unicode + unsigned codepoint = ParseHex4(is); + if (codepoint >= 0xD800 && codepoint <= 0xDBFF) { + // Handle UTF-16 surrogate pair + if (is.Take() != '\\' || is.Take() != 'u') + RAPIDJSON_PARSE_ERROR("Missing the second \\u in surrogate pair", is.Tell() - 2); + unsigned codepoint2 = ParseHex4(is); + if (codepoint2 < 0xDC00 || codepoint2 > 0xDFFF) + RAPIDJSON_PARSE_ERROR("The second \\u in surrogate pair is invalid", is.Tell() - 2); + codepoint = (((codepoint - 0xD800) << 10) | (codepoint2 - 0xDC00)) + 0x10000; + } + TEncoding::Encode(os, codepoint); + } + else + RAPIDJSON_PARSE_ERROR("Unknown escape character", is.Tell() - 1); + } + else if (c == '"') { // Closing double quote + is.Take(); + os.Put('\0'); // null-terminate the string + return; + } + else if (c == '\0') + RAPIDJSON_PARSE_ERROR("lacks ending quotation before the end of string", is.Tell() - 1); + else if ((unsigned)c < 0x20) // RFC 4627: unescaped = %x20-21 / %x23-5B / %x5D-10FFFF + RAPIDJSON_PARSE_ERROR("Incorrect unescaped character in string", is.Tell() - 1); + else { + if (parseFlags & kParseValidateEncodingFlag ? + !Transcoder::Validate(is, os) : + !Transcoder::Transcode(is, os)) + RAPIDJSON_PARSE_ERROR("Invalid encoding", is.Tell()); + } + } + } + + template + void ParseNumber(InputStream& is, Handler& handler) { + InputStream s = is; // Local copy for optimization + // Parse minus + bool minus = false; + if (s.Peek() == '-') { + minus = true; + s.Take(); + } + + // Parse int: zero / ( digit1-9 *DIGIT ) + unsigned i; + bool try64bit = false; + if (s.Peek() == '0') { + i = 0; + s.Take(); + } + else if (s.Peek() >= '1' && s.Peek() <= '9') { + i = s.Take() - '0'; + + if (minus) + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i >= 214748364) { // 2^31 = 2147483648 + if (i != 214748364 || s.Peek() > '8') { + try64bit = true; + break; + } + } + i = i * 10 + (s.Take() - '0'); + } + else + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i >= 429496729) { // 2^32 - 1 = 4294967295 + if (i != 429496729 || s.Peek() > '5') { + try64bit = true; + break; + } + } + i = i * 10 + (s.Take() - '0'); + } + } + else + RAPIDJSON_PARSE_ERROR("Expect a value here.", is.Tell()); + + // Parse 64bit int + uint64_t i64 = 0; + bool useDouble = false; + if (try64bit) { + i64 = i; + if (minus) + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i64 >= 922337203685477580uLL) // 2^63 = 9223372036854775808 + if (i64 != 922337203685477580uLL || s.Peek() > '8') { + useDouble = true; + break; + } + i64 = i64 * 10 + (s.Take() - '0'); + } + else + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (i64 >= 1844674407370955161uLL) // 2^64 - 1 = 18446744073709551615 + if (i64 != 1844674407370955161uLL || s.Peek() > '5') { + useDouble = true; + break; + } + i64 = i64 * 10 + (s.Take() - '0'); + } + } + + // Force double for big integer + double d = 0.0; + if (useDouble) { + d = (double)i64; + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (d >= 1E307) + RAPIDJSON_PARSE_ERROR("Number too big to store in double", is.Tell()); + d = d * 10 + (s.Take() - '0'); + } + } + + // Parse frac = decimal-point 1*DIGIT + int expFrac = 0; + if (s.Peek() == '.') { + if (!useDouble) { + d = try64bit ? (double)i64 : (double)i; + useDouble = true; + } + s.Take(); + + if (s.Peek() >= '0' && s.Peek() <= '9') { + d = d * 10 + (s.Take() - '0'); + --expFrac; + } + else + RAPIDJSON_PARSE_ERROR("At least one digit in fraction part", is.Tell()); + + while (s.Peek() >= '0' && s.Peek() <= '9') { + if (expFrac > -16) { + d = d * 10 + (s.Peek() - '0'); + --expFrac; + } + s.Take(); + } + } + + // Parse exp = e [ minus / plus ] 1*DIGIT + int exp = 0; + if (s.Peek() == 'e' || s.Peek() == 'E') { + if (!useDouble) { + d = try64bit ? (double)i64 : (double)i; + useDouble = true; + } + s.Take(); + + bool expMinus = false; + if (s.Peek() == '+') + s.Take(); + else if (s.Peek() == '-') { + s.Take(); + expMinus = true; + } + + if (s.Peek() >= '0' && s.Peek() <= '9') { + exp = s.Take() - '0'; + while (s.Peek() >= '0' && s.Peek() <= '9') { + exp = exp * 10 + (s.Take() - '0'); + if (exp > 308) + RAPIDJSON_PARSE_ERROR("Number too big to store in double", is.Tell()); + } + } + else + RAPIDJSON_PARSE_ERROR("At least one digit in exponent", s.Tell()); + + if (expMinus) + exp = -exp; + } + + // Finish parsing, call event according to the type of number. + if (useDouble) { + d *= internal::Pow10(exp + expFrac); + handler.Double(minus ? -d : d); + } + else { + if (try64bit) { + if (minus) + handler.Int64(-(int64_t)i64); + else + handler.Uint64(i64); + } + else { + if (minus) + handler.Int(-(int)i); + else + handler.Uint(i); + } + } + + is = s; // restore is + } + + // Parse any JSON value + template + void ParseValue(InputStream& is, Handler& handler) { + switch (is.Peek()) { + case 'n': ParseNull (is, handler); break; + case 't': ParseTrue (is, handler); break; + case 'f': ParseFalse (is, handler); break; + case '"': ParseString(is, handler); break; + case '{': ParseObject(is, handler); break; + case '[': ParseArray (is, handler); break; + default : ParseNumber(is, handler); + } + } + + static const size_t kDefaultStackCapacity = 256; //!< Default stack capacity in bytes for storing a single decoded string. + internal::Stack stack_; //!< A stack for storing decoded string temporarily during non-destructive parsing. + jmp_buf jmpbuf_; //!< setjmp buffer for fast exit from nested parsing function calls. + const char* parseError_; + size_t errorOffset_; +}; // class GenericReader + +//! Reader with UTF8 encoding and default allocator. +typedef GenericReader, UTF8<> > Reader; + +} // namespace rapidjson + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // RAPIDJSON_READER_H_ diff --git a/Engine/source/persistence/rapidjson/stringbuffer.h b/Engine/source/persistence/rapidjson/stringbuffer.h new file mode 100644 index 0000000000..74415cbb83 --- /dev/null +++ b/Engine/source/persistence/rapidjson/stringbuffer.h @@ -0,0 +1,50 @@ +#ifndef RAPIDJSON_STRINGBUFFER_H_ +#define RAPIDJSON_STRINGBUFFER_H_ + +#include "rapidjson.h" +#include "internal/stack.h" + +namespace rapidjson { + +//! Represents an in-memory output stream. +/*! + \tparam Encoding Encoding of the stream. + \tparam Allocator type for allocating memory buffer. + \implements Stream +*/ +template +struct GenericStringBuffer { + typedef typename Encoding::Ch Ch; + + GenericStringBuffer(Allocator* allocator = 0, size_t capacity = kDefaultCapacity) : stack_(allocator, capacity) {} + + void Put(Ch c) { *stack_.template Push() = c; } + void Flush() {} + + void Clear() { stack_.Clear(); } + + const Ch* GetString() const { + // Push and pop a null terminator. This is safe. + *stack_.template Push() = '\0'; + stack_.template Pop(1); + + return stack_.template Bottom(); + } + + size_t GetSize() const { return stack_.GetSize(); } + + static const size_t kDefaultCapacity = 256; + mutable internal::Stack stack_; +}; + +typedef GenericStringBuffer > StringBuffer; + +//! Implement specialized version of PutN() with memset() for better performance. +template<> +inline void PutN(GenericStringBuffer >& stream, char c, size_t n) { + memset(stream.stack_.Push(n), c, n * sizeof(c)); +} + +} // namespace rapidjson + +#endif // RAPIDJSON_STRINGBUFFER_H_ diff --git a/Engine/source/persistence/rapidjson/writer.h b/Engine/source/persistence/rapidjson/writer.h new file mode 100644 index 0000000000..56d5804344 --- /dev/null +++ b/Engine/source/persistence/rapidjson/writer.h @@ -0,0 +1,249 @@ +#ifndef RAPIDJSON_WRITER_H_ +#define RAPIDJSON_WRITER_H_ + +#include "rapidjson.h" +#include "internal/stack.h" +#include "internal/strfunc.h" +#include // snprintf() or _sprintf_s() +#include // placement new + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) // conditional expression is constant +#endif + +namespace rapidjson { + +//! JSON writer +/*! Writer implements the concept Handler. + It generates JSON text by events to an output os. + + User may programmatically calls the functions of a writer to generate JSON text. + + On the other side, a writer can also be passed to objects that generates events, + + for example Reader::Parse() and Document::Accept(). + + \tparam OutputStream Type of output stream. + \tparam SourceEncoding Encoding of both source strings. + \tparam TargetEncoding Encoding of and output stream. + \implements Handler +*/ +template, typename TargetEncoding = UTF8<>, typename Allocator = MemoryPoolAllocator<> > +class Writer { +public: + typedef typename SourceEncoding::Ch Ch; + + Writer(OutputStream& os, Allocator* allocator = 0, size_t levelDepth = kDefaultLevelDepth) : + os_(os), level_stack_(allocator, levelDepth * sizeof(Level)) {} + + //@name Implementation of Handler + //@{ + Writer& Null() { Prefix(kNullType); WriteNull(); return *this; } + Writer& Bool(bool b) { Prefix(b ? kTrueType : kFalseType); WriteBool(b); return *this; } + Writer& Int(int i) { Prefix(kNumberType); WriteInt(i); return *this; } + Writer& Uint(unsigned u) { Prefix(kNumberType); WriteUint(u); return *this; } + Writer& Int64(int64_t i64) { Prefix(kNumberType); WriteInt64(i64); return *this; } + Writer& Uint64(uint64_t u64) { Prefix(kNumberType); WriteUint64(u64); return *this; } + Writer& Double(double d) { Prefix(kNumberType); WriteDouble(d); return *this; } + + Writer& String(const Ch* str, SizeType length, bool copy = false) { + (void)copy; + Prefix(kStringType); + WriteString(str, length); + return *this; + } + + Writer& StartObject() { + Prefix(kObjectType); + new (level_stack_.template Push()) Level(false); + WriteStartObject(); + return *this; + } + + Writer& EndObject(SizeType memberCount = 0) { + (void)memberCount; + RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level)); + RAPIDJSON_ASSERT(!level_stack_.template Top()->inArray); + level_stack_.template Pop(1); + WriteEndObject(); + if (level_stack_.Empty()) // end of json text + os_.Flush(); + return *this; + } + + Writer& StartArray() { + Prefix(kArrayType); + new (level_stack_.template Push()) Level(true); + WriteStartArray(); + return *this; + } + + Writer& EndArray(SizeType elementCount = 0) { + (void)elementCount; + RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level)); + RAPIDJSON_ASSERT(level_stack_.template Top()->inArray); + level_stack_.template Pop(1); + WriteEndArray(); + if (level_stack_.Empty()) // end of json text + os_.Flush(); + return *this; + } + //@} + + //! Simpler but slower overload. + Writer& String(const Ch* str) { return String(str, internal::StrLen(str)); } + +protected: + //! Information for each nested level + struct Level { + Level(bool inArray_) : inArray(inArray_), valueCount(0) {} + bool inArray; //!< true if in array, otherwise in object + size_t valueCount; //!< number of values in this level + }; + + static const size_t kDefaultLevelDepth = 32; + + void WriteNull() { + os_.Put('n'); os_.Put('u'); os_.Put('l'); os_.Put('l'); + } + + void WriteBool(bool b) { + if (b) { + os_.Put('t'); os_.Put('r'); os_.Put('u'); os_.Put('e'); + } + else { + os_.Put('f'); os_.Put('a'); os_.Put('l'); os_.Put('s'); os_.Put('e'); + } + } + + void WriteInt(int i) { + if (i < 0) { + os_.Put('-'); + i = -i; + } + WriteUint((unsigned)i); + } + + void WriteUint(unsigned u) { + char buffer[10]; + char *p = buffer; + do { + *p++ = (u % 10) + '0'; + u /= 10; + } while (u > 0); + + do { + --p; + os_.Put(*p); + } while (p != buffer); + } + + void WriteInt64(int64_t i64) { + if (i64 < 0) { + os_.Put('-'); + i64 = -i64; + } + WriteUint64((uint64_t)i64); + } + + void WriteUint64(uint64_t u64) { + char buffer[20]; + char *p = buffer; + do { + *p++ = char(u64 % 10) + '0'; + u64 /= 10; + } while (u64 > 0); + + do { + --p; + os_.Put(*p); + } while (p != buffer); + } + + //! \todo Optimization with custom double-to-string converter. + void WriteDouble(double d) { + char buffer[100]; +#if _MSC_VER + int ret = sprintf_s(buffer, sizeof(buffer), "%g", d); +#else + int ret = snprintf(buffer, sizeof(buffer), "%g", d); +#endif + RAPIDJSON_ASSERT(ret >= 1); + for (int i = 0; i < ret; i++) + os_.Put(buffer[i]); + } + + void WriteString(const Ch* str, SizeType length) { + static const char hexDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; + static const char escape[256] = { +#define Z16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + //0 1 2 3 4 5 6 7 8 9 A B C D E F + 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'b', 't', 'n', 'u', 'f', 'r', 'u', 'u', // 00 + 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', 'u', // 10 + 0, 0, '"', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20 + Z16, Z16, // 30~4F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,'\\', 0, 0, 0, // 50 + Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16, Z16 // 60~FF +#undef Z16 + }; + + os_.Put('\"'); + GenericStringStream is(str); + while (is.Tell() < length) { + const Ch c = is.Peek(); + if ((sizeof(Ch) == 1 || (unsigned)c < 256) && escape[(unsigned char)c]) { + is.Take(); + os_.Put('\\'); + os_.Put(escape[(unsigned char)c]); + if (escape[(unsigned char)c] == 'u') { + os_.Put('0'); + os_.Put('0'); + os_.Put(hexDigits[(unsigned char)c >> 4]); + os_.Put(hexDigits[(unsigned char)c & 0xF]); + } + } + else + Transcoder::Transcode(is, os_); + } + os_.Put('\"'); + } + + void WriteStartObject() { os_.Put('{'); } + void WriteEndObject() { os_.Put('}'); } + void WriteStartArray() { os_.Put('['); } + void WriteEndArray() { os_.Put(']'); } + + void Prefix(Type type) { + (void)type; + if (level_stack_.GetSize() != 0) { // this value is not at root + Level* level = level_stack_.template Top(); + if (level->valueCount > 0) { + if (level->inArray) + os_.Put(','); // add comma if it is not the first element in array + else // in object + os_.Put((level->valueCount % 2 == 0) ? ',' : ':'); + } + if (!level->inArray && level->valueCount % 2 == 0) + RAPIDJSON_ASSERT(type == kStringType); // if it's in object, then even number should be a name + level->valueCount++; + } + else + RAPIDJSON_ASSERT(type == kObjectType || type == kArrayType); + } + + OutputStream& os_; + internal::Stack level_stack_; + +private: + // Prohibit assignment for VC C4512 warning + Writer& operator=(const Writer& w); +}; + +} // namespace rapidjson + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // RAPIDJSON_RAPIDJSON_H_ diff --git a/Engine/source/persistence/taml/binary/tamlBinaryReader.cpp b/Engine/source/persistence/taml/binary/tamlBinaryReader.cpp new file mode 100644 index 0000000000..f703bbb7f4 --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryReader.cpp @@ -0,0 +1,429 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "persistence/taml/binary/tamlBinaryReader.h" + +#ifndef _ZIPSUBSTREAM_H_ +#include "core/util/zip/zipSubStream.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +SimObject* TamlBinaryReader::read( FileStream& stream ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_Read); + + // Read Taml signature. + StringTableEntry tamlSignature = stream.readSTString(); + + // Is the signature correct? + if ( tamlSignature != StringTable->insert( TAML_SIGNATURE ) ) + { + // Warn. + Con::warnf("Taml: Cannot read binary file as signature is incorrect '%s'.", tamlSignature ); + return NULL; + } + + // Read version Id. + U32 versionId; + stream.read( &versionId ); + + // Read compressed flag. + bool compressed; + stream.read( &compressed ); + + SimObject* pSimObject = NULL; + + // Is the stream compressed? + if ( compressed ) + { + // Yes, so attach zip stream. + ZipSubRStream zipStream; + zipStream.attachStream( &stream ); + + // Parse element. + pSimObject = parseElement( zipStream, versionId ); + + // Detach zip stream. + zipStream.detachStream(); + } + else + { + // No, so parse element. + pSimObject = parseElement( stream, versionId ); + } + + return pSimObject; +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::resetParse( void ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ResetParse); + + // Clear object reference map. + mObjectReferenceMap.clear(); +} + +//----------------------------------------------------------------------------- + +SimObject* TamlBinaryReader::parseElement( Stream& stream, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseElement); + + SimObject* pSimObject = NULL; + +#ifdef TORQUE_DEBUG + // Format the type location. + char typeLocationBuffer[64]; + dSprintf( typeLocationBuffer, sizeof(typeLocationBuffer), "Taml [format='binary' offset=%u]", stream.getPosition() ); +#endif + + // Fetch element name. + StringTableEntry typeName = stream.readSTString(); + + // Fetch object name. + StringTableEntry objectName = stream.readSTString(); + + // Read references. + U32 tamlRefId; + U32 tamlRefToId; + stream.read( &tamlRefId ); + stream.read( &tamlRefToId ); + + // Do we have a reference to Id? + if ( tamlRefToId != 0 ) + { + // Yes, so fetch reference. + typeObjectReferenceHash::Iterator referenceItr = mObjectReferenceMap.find( tamlRefToId ); + + // Did we find the reference? + if ( referenceItr == mObjectReferenceMap.end() ) + { + // No, so warn. + Con::warnf( "Taml: Could not find a reference Id of '%d'", tamlRefToId ); + return NULL; + } + + // Return object. + return referenceItr->value; + } + +#ifdef TORQUE_DEBUG + // Create type. + pSimObject = Taml::createType( typeName, mpTaml, typeLocationBuffer ); +#else + // Create type. + pSimObject = Taml::createType( typeName, mpTaml ); +#endif + + // Finish if we couldn't create the type. + if ( pSimObject == NULL ) + return NULL; + + // Find Taml callbacks. + TamlCallbacks* pCallbacks = dynamic_cast( pSimObject ); + + // Are there any Taml callbacks? + if ( pCallbacks != NULL ) + { + // Yes, so call it. + mpTaml->tamlPreRead( pCallbacks ); + } + + // Parse attributes. + parseAttributes( stream, pSimObject, versionId ); + + // Does the object require a name? + if ( objectName == StringTable->EmptyString() ) + { + // No, so just register anonymously. + pSimObject->registerObject(); + } + else + { + // Yes, so register a named object. + pSimObject->registerObject( objectName ); + + // Was the name assigned? + if ( pSimObject->getName() != objectName ) + { + // No, so warn that the name was rejected. +#ifdef TORQUE_DEBUG + Con::warnf( "Taml::parseElement() - Registered an instance of type '%s' but a request to name it '%s' was rejected. This is typically because an object of that name already exists. '%s'", typeName, objectName, typeLocationBuffer ); +#else + Con::warnf( "Taml::parseElement() - Registered an instance of type '%s' but a request to name it '%s' was rejected. This is typically because an object of that name already exists.", typeName, objectName ); +#endif + } + } + + // Do we have a reference Id? + if ( tamlRefId != 0 ) + { + // Yes, so insert reference. + mObjectReferenceMap.insertUnique( tamlRefId, pSimObject ); + } + + // Parse custom elements. + TamlCustomNodes customProperties; + + // Parse children. + parseChildren( stream, pCallbacks, pSimObject, versionId ); + + // Parse custom elements. + parseCustomElements( stream, pCallbacks, customProperties, versionId ); + + // Are there any Taml callbacks? + if ( pCallbacks != NULL ) + { + // Yes, so call it. + mpTaml->tamlPostRead( pCallbacks, customProperties ); + } + + // Return object. + return pSimObject; +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseAttributes( Stream& stream, SimObject* pSimObject, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseAttributes); + + // Sanity! + AssertFatal( pSimObject != NULL, "Taml: Cannot parse attributes on a NULL object." ); + + // Fetch attribute count. + U32 attributeCount; + stream.read( &attributeCount ); + + // Finish if no attributes. + if ( attributeCount == 0 ) + return; + + char valueBuffer[4096]; + + // Iterate attributes. + for ( U32 index = 0; index < attributeCount; ++index ) + { + // Fetch attribute. + StringTableEntry attributeName = stream.readSTString(); + stream.readLongString( 4096, valueBuffer ); + + // We can assume this is a field for now. + pSimObject->setPrefixedDataField(attributeName, NULL, valueBuffer); + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseChildren( Stream& stream, TamlCallbacks* pCallbacks, SimObject* pSimObject, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseChildren); + + // Sanity! + AssertFatal( pSimObject != NULL, "Taml: Cannot parse children on a NULL object." ); + + // Fetch children count. + U32 childrenCount; + stream.read( &childrenCount ); + + // Finish if no children. + if ( childrenCount == 0 ) + return; + + // Fetch the Taml children. + TamlChildren* pChildren = dynamic_cast( pSimObject ); + + // Is this a sim set? + if ( pChildren == NULL ) + { + // No, so warn. + Con::warnf("Taml: Child element found under parent but object cannot have children." ); + return; + } + + // Fetch any container child class specifier. + AbstractClassRep* pContainerChildClass = pSimObject->getClassRep()->getContainerChildClass( true ); + + // Iterate children. + for ( U32 index = 0; index < childrenCount; ++ index ) + { + // Parse child element. + SimObject* pChildSimObject = parseElement( stream, versionId ); + + // Finish if child failed. + if ( pChildSimObject == NULL ) + return; + + // Do we have a container child class? + if ( pContainerChildClass != NULL ) + { + // Yes, so is the child object the correctly derived type? + if ( !pChildSimObject->getClassRep()->isClass( pContainerChildClass ) ) + { + // No, so warn. + Con::warnf("Taml: Child element '%s' found under parent '%s' but object is restricted to children of type '%s'.", + pChildSimObject->getClassName(), + pSimObject->getClassName(), + pContainerChildClass->getClassName() ); + + // NOTE: We can't delete the object as it may be referenced elsewhere! + pChildSimObject = NULL; + + // Skip. + continue; + } + } + + // Add child. + pChildren->addTamlChild( pChildSimObject ); + + // Find Taml callbacks for child. + TamlCallbacks* pChildCallbacks = dynamic_cast( pChildSimObject ); + + // Do we have callbacks on the child? + if ( pChildCallbacks != NULL ) + { + // Yes, so perform callback. + mpTaml->tamlAddParent( pChildCallbacks, pSimObject ); + } + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseCustomElements( Stream& stream, TamlCallbacks* pCallbacks, TamlCustomNodes& customNodes, const U32 versionId ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryReader_ParseCustomElement); + + // Read custom node count. + U32 customNodeCount; + stream.read( &customNodeCount ); + + // Finish if no custom nodes. + if ( customNodeCount == 0 ) + return; + + // Iterate custom nodes. + for ( U32 nodeIndex = 0; nodeIndex < customNodeCount; ++nodeIndex ) + { + //Read custom node name. + StringTableEntry nodeName = stream.readSTString(); + + // Add custom node. + TamlCustomNode* pCustomNode = customNodes.addNode( nodeName ); + + // Parse the custom node. + parseCustomNode( stream, pCustomNode, versionId ); + } + + // Do we have callbacks? + if ( pCallbacks == NULL ) + { + // No, so warn. + Con::warnf( "Taml: Encountered custom data but object does not support custom data." ); + return; + } + + // Custom read callback. + mpTaml->tamlCustomRead( pCallbacks, customNodes ); +} + +//----------------------------------------------------------------------------- + +void TamlBinaryReader::parseCustomNode( Stream& stream, TamlCustomNode* pCustomNode, const U32 versionId ) +{ + // Fetch if a proxy object. + bool isProxyObject; + stream.read( &isProxyObject ); + + // Is this a proxy object? + if ( isProxyObject ) + { + // Yes, so parse proxy object. + SimObject* pProxyObject = parseElement( stream, versionId ); + + // Add child node. + pCustomNode->addNode( pProxyObject ); + + return; + } + + // No, so read custom node name. + StringTableEntry nodeName = stream.readSTString(); + + // Add child node. + TamlCustomNode* pChildNode = pCustomNode->addNode( nodeName ); + + // Read child node text. + char childNodeTextBuffer[MAX_TAML_NODE_FIELDVALUE_LENGTH]; + stream.readLongString( MAX_TAML_NODE_FIELDVALUE_LENGTH, childNodeTextBuffer ); + pChildNode->setNodeText( childNodeTextBuffer ); + + // Read child node count. + U32 childNodeCount; + stream.read( &childNodeCount ); + + // Do we have any children nodes? + if ( childNodeCount > 0 ) + { + // Yes, so parse children nodes. + for( U32 childIndex = 0; childIndex < childNodeCount; ++childIndex ) + { + // Parse child node. + parseCustomNode( stream, pChildNode, versionId ); + } + } + + // Read child field count. + U32 childFieldCount; + stream.read( &childFieldCount ); + + // Do we have any child fields? + if ( childFieldCount > 0 ) + { + // Yes, so parse child fields. + for( U32 childFieldIndex = 0; childFieldIndex < childFieldCount; ++childFieldIndex ) + { + // Read field name. + StringTableEntry fieldName = stream.readSTString(); + + // Read field value. + char valueBuffer[MAX_TAML_NODE_FIELDVALUE_LENGTH]; + stream.readLongString( MAX_TAML_NODE_FIELDVALUE_LENGTH, valueBuffer ); + + // Add field. + pChildNode->addField( fieldName, valueBuffer ); + } + } +} \ No newline at end of file diff --git a/Engine/source/persistence/taml/binary/tamlBinaryReader.h b/Engine/source/persistence/taml/binary/tamlBinaryReader.h new file mode 100644 index 0000000000..d6436e5da9 --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryReader.h @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_BINARYREADER_H_ +#define _TAML_BINARYREADER_H_ + +#ifndef _TDICTIONARY_H_ +#include "core/util/tDictionary.h" +#endif + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +//----------------------------------------------------------------------------- + +/// @ingroup tamlGroup +/// @see tamlGroup +class TamlBinaryReader +{ +public: + TamlBinaryReader( Taml* pTaml ) : + mpTaml( pTaml ) + { + } + + virtual ~TamlBinaryReader() {} + + /// Read. + SimObject* read( FileStream& stream ); + +private: + Taml* mpTaml; + + typedef HashTable typeObjectReferenceHash; + + typeObjectReferenceHash mObjectReferenceMap; + +private: + void resetParse( void ); + + SimObject* parseElement( Stream& stream, const U32 versionId ); + void parseAttributes( Stream& stream, SimObject* pSimObject, const U32 versionId ); + void parseChildren( Stream& stream, TamlCallbacks* pCallbacks, SimObject* pSimObject, const U32 versionId ); + void parseCustomElements( Stream& stream, TamlCallbacks* pCallbacks, TamlCustomNodes& customNodes, const U32 versionId ); + void parseCustomNode( Stream& stream, TamlCustomNode* pCustomNode, const U32 versionId ); +}; + +#endif // _TAML_BINARYREADER_H_ \ No newline at end of file diff --git a/Engine/source/persistence/taml/binary/tamlBinaryWriter.cpp b/Engine/source/persistence/taml/binary/tamlBinaryWriter.cpp new file mode 100644 index 0000000000..18c986822a --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryWriter.cpp @@ -0,0 +1,297 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "persistence/taml/binary/tamlBinaryWriter.h" + +#ifndef _ZIPSUBSTREAM_H_ +#include "core/util/zip/zipSubStream.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +bool TamlBinaryWriter::write( FileStream& stream, const TamlWriteNode* pTamlWriteNode, const bool compressed ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_Write); + + // Write Taml signature. + stream.writeString( StringTable->insert( TAML_SIGNATURE ) ); + + // Write version Id. + stream.write( mVersionId ); + + // Write compressed flag. + stream.write( compressed ); + + // Are we compressed? + if ( compressed ) + { + // yes, so attach zip stream. + ZipSubWStream zipStream; + zipStream.attachStream( &stream ); + + // Write element. + writeElement( zipStream, pTamlWriteNode ); + + // Detach zip stream. + zipStream.detachStream(); + } + else + { + // No, so write element. + writeElement( stream, pTamlWriteNode ); + } + + return true; +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeElement( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteElement); + + // Fetch object. + SimObject* pSimObject = pTamlWriteNode->mpSimObject; + + // Fetch element name. + const char* pElementName = pSimObject->getClassName(); + + // Write element name. + stream.writeString( pElementName ); + + // Fetch object name. + const char* pObjectName = pTamlWriteNode->mpObjectName; + + // Write object name. + stream.writeString( pObjectName != NULL ? pObjectName : StringTable->EmptyString() ); + + // Fetch reference Id. + const U32 tamlRefId = pTamlWriteNode->mRefId; + + // Write reference Id. + stream.write( tamlRefId ); + + // Do we have a reference to node? + if ( pTamlWriteNode->mRefToNode != NULL ) + { + // Yes, so fetch reference to Id. + const U32 tamlRefToId = pTamlWriteNode->mRefToNode->mRefId; + + // Sanity! + AssertFatal( tamlRefToId != 0, "Taml: Invalid reference to Id." ); + + // Write reference to Id. + stream.write( tamlRefToId ); + + // Finished. + return; + } + + // No, so write no reference to Id. + stream.write( 0 ); + + // Write attributes. + writeAttributes( stream, pTamlWriteNode ); + + // Write children. + writeChildren( stream, pTamlWriteNode ); + + // Write custom elements. + writeCustomElements( stream, pTamlWriteNode ); +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeAttributes( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteAttributes); + + // Fetch fields. + const Vector& fields = pTamlWriteNode->mFields; + + // Write placeholder attribute count. + stream.write( (U32)fields.size() ); + + // Finish if no fields. + if ( fields.size() == 0 ) + return; + + // Iterate fields. + for( Vector::const_iterator itr = fields.begin(); itr != fields.end(); ++itr ) + { + // Fetch field/value pair. + TamlWriteNode::FieldValuePair* pFieldValue = (*itr); + + // Write attribute. + stream.writeString( pFieldValue->mName ); + stream.writeLongString( 4096, pFieldValue->mpValue ); + } +} + +void TamlBinaryWriter::writeChildren( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteChildren); + + // Fetch children. + Vector* pChildren = pTamlWriteNode->mChildren; + + // Do we have any children? + if ( pChildren == NULL ) + { + // No, so write no children. + stream.write( (U32)0 ); + return; + } + + // Write children count. + stream.write( (U32)pChildren->size() ); + + // Iterate children. + for( Vector::iterator itr = pChildren->begin(); itr != pChildren->end(); ++itr ) + { + // Write child. + writeElement( stream, (*itr) ); + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeCustomElements( Stream& stream, const TamlWriteNode* pTamlWriteNode ) +{ + // Debug Profiling. + PROFILE_SCOPE(TamlBinaryWriter_WriteCustomElements); + + // Fetch custom nodes. + const TamlCustomNodes& customNodes = pTamlWriteNode->mCustomNodes; + + // Fetch custom nodes. + const TamlCustomNodeVector& nodes = customNodes.getNodes(); + + // Write custom node count. + stream.write( (U32)nodes.size() ); + + // Finish if there are no nodes. + if ( nodes.size() == 0 ) + return; + + // Iterate custom nodes. + for( TamlCustomNodeVector::const_iterator customNodesItr = nodes.begin(); customNodesItr != nodes.end(); ++customNodesItr ) + { + // Fetch the custom node. + TamlCustomNode* pCustomNode = *customNodesItr; + + // Write custom node name. + stream.writeString( pCustomNode->getNodeName() ); + + // Fetch node children. + const TamlCustomNodeVector& nodeChildren = pCustomNode->getChildren(); + + // Iterate children nodes. + for( TamlCustomNodeVector::const_iterator childNodeItr = nodeChildren.begin(); childNodeItr != nodeChildren.end(); ++childNodeItr ) + { + // Fetch child node. + const TamlCustomNode* pChildNode = *childNodeItr; + + // Write the custom node. + writeCustomNode( stream, pChildNode ); + } + } +} + +//----------------------------------------------------------------------------- + +void TamlBinaryWriter::writeCustomNode( Stream& stream, const TamlCustomNode* pCustomNode ) +{ + // Is the node a proxy object? + if ( pCustomNode->isProxyObject() ) + { + // Yes, so flag as proxy object. + stream.write( true ); + + // Write the element. + writeElement( stream, pCustomNode->getProxyWriteNode() ); + return; + } + + // No, so flag as custom node. + stream.write( false ); + + // Write custom node name. + stream.writeString( pCustomNode->getNodeName() ); + + // Write custom node text. + stream.writeLongString(MAX_TAML_NODE_FIELDVALUE_LENGTH, pCustomNode->getNodeTextField().getFieldValue()); + + // Fetch node children. + const TamlCustomNodeVector& nodeChildren = pCustomNode->getChildren(); + + // Fetch child node count. + const U32 childNodeCount = (U32)nodeChildren.size(); + + // Write custom node count. + stream.write( childNodeCount ); + + // Do we have any children nodes. + if ( childNodeCount > 0 ) + { + // Yes, so iterate children nodes. + for( TamlCustomNodeVector::const_iterator childNodeItr = nodeChildren.begin(); childNodeItr != nodeChildren.end(); ++childNodeItr ) + { + // Fetch child node. + const TamlCustomNode* pChildNode = *childNodeItr; + + // Write the custom node. + writeCustomNode( stream, pChildNode ); + } + } + + // Fetch fields. + const TamlCustomFieldVector& fields = pCustomNode->getFields(); + + // Fetch child field count. + const U32 childFieldCount = (U32)fields.size(); + + // Write custom field count. + stream.write( childFieldCount ); + + // Do we have any child fields? + if ( childFieldCount > 0 ) + { + // Yes, so iterate fields. + for ( TamlCustomFieldVector::const_iterator fieldItr = fields.begin(); fieldItr != fields.end(); ++fieldItr ) + { + // Fetch node field. + const TamlCustomField* pField = *fieldItr; + + // Write the node field. + stream.writeString( pField->getFieldName() ); + stream.writeLongString( MAX_TAML_NODE_FIELDVALUE_LENGTH, pField->getFieldValue() ); + } + } +} \ No newline at end of file diff --git a/Engine/source/persistence/taml/binary/tamlBinaryWriter.h b/Engine/source/persistence/taml/binary/tamlBinaryWriter.h new file mode 100644 index 0000000000..78fe0d4f1f --- /dev/null +++ b/Engine/source/persistence/taml/binary/tamlBinaryWriter.h @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TAML_BINARYWRITER_H_ +#define _TAML_BINARYWRITER_H_ + +#ifndef _TAML_H_ +#include "persistence/taml/taml.h" +#endif + +//----------------------------------------------------------------------------- + +/// @ingroup tamlGroup +/// @see tamlGroup +class TamlBinaryWriter +{ +public: + TamlBinaryWriter( Taml* pTaml ) : + mpTaml( pTaml ), + mVersionId(2) + { + } + virtual ~TamlBinaryWriter() {} + + /// Write. + bool write( FileStream& stream, const TamlWriteNode* pTamlWriteNode, const bool compressed ); + +private: + Taml* mpTaml; + const U32 mVersionId; + +private: + void writeElement( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeAttributes( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeChildren( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeCustomElements( Stream& stream, const TamlWriteNode* pTamlWriteNode ); + void writeCustomNode( Stream& stream, const TamlCustomNode* pCustomNode ); +}; + +#endif // _TAML_BINARYWRITER_H_ \ No newline at end of file diff --git a/Engine/source/persistence/taml/fsTinyXml.cpp b/Engine/source/persistence/taml/fsTinyXml.cpp new file mode 100644 index 0000000000..1fb97398b5 --- /dev/null +++ b/Engine/source/persistence/taml/fsTinyXml.cpp @@ -0,0 +1,747 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "fsTinyXml.h" +#include "console/console.h" + +bool fsTiXmlDocument::LoadFile( const char * pFilename, TiXmlEncoding encoding ) +{ + // Expand the file-path. + char filenameBuffer[1024]; + Con::expandToolScriptFilename( filenameBuffer, sizeof(filenameBuffer), pFilename ); + + FileStream stream; + +#ifdef TORQUE_OS_ANDROID + if (strlen(pFilename) > strlen(filenameBuffer)) { + strcpy(filenameBuffer, pFilename); + } +#endif + + // File open for read? + if ( !stream.open( filenameBuffer, Torque::FS::File::AccessMode::Read ) ) + { + // No, so warn. + Con::warnf("TamlXmlParser::parse() - Could not open filename '%s' for parse.", filenameBuffer ); + return false; + } + + // Load document from stream. + if ( !LoadFile( stream ) ) + { + // Warn! + Con::warnf("TamlXmlParser: Could not load Taml XML file from stream."); + return false; + } + + // Close the stream. + stream.close(); + return true; +} + +bool fsTiXmlDocument::SaveFile( const char * pFilename ) const +{ + // Expand the file-name into the file-path buffer. + char filenameBuffer[1024]; + Con::expandToolScriptFilename( filenameBuffer, sizeof(filenameBuffer), pFilename ); + + FileStream stream; + + // File opened? + if ( !stream.open( filenameBuffer, Torque::FS::File::AccessMode::Write ) ) + { + // No, so warn. + Con::warnf("Taml::writeFile() - Could not open filename '%s' for write.", filenameBuffer ); + return false; + } + + bool ret = SaveFile(stream); + + stream.close(); + return ret; +} + +bool fsTiXmlDocument::LoadFile( FileStream &stream, TiXmlEncoding encoding ) +{ + // Delete the existing data: + Clear(); + //TODO: Can't clear location, investigate if this gives issues. + //doc.location.Clear(); + + // Get the file size, so we can pre-allocate the string. HUGE speed impact. + long length = stream.getStreamSize(); + + // Strange case, but good to handle up front. + if ( length <= 0 ) + { + SetError( TiXmlDocument::TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // Subtle bug here. TinyXml did use fgets. But from the XML spec: + // 2.11 End-of-Line Handling + // + // + // ...the XML processor MUST behave as if it normalized all line breaks in external + // parsed entities (including the document entity) on input, before parsing, by translating + // both the two-character sequence #xD #xA and any #xD that is not followed by #xA to + // a single #xA character. + // + // + // It is not clear fgets does that, and certainly isn't clear it works cross platform. + // Generally, you expect fgets to translate from the convention of the OS to the c/unix + // convention, and not work generally. + + /* + while( fgets( buf, sizeof(buf), file ) ) + { + data += buf; + } + */ + + char* buf = new char[ length+1 ]; + buf[0] = 0; + + if ( !stream.read( length, buf ) ) { + delete [] buf; + SetError( TiXmlDocument::TIXML_ERROR_OPENING_FILE, 0, 0, TIXML_ENCODING_UNKNOWN ); + return false; + } + + // Process the buffer in place to normalize new lines. (See comment above.) + // Copies from the 'p' to 'q' pointer, where p can advance faster if + // a newline-carriage return is hit. + // + // Wikipedia: + // Systems based on ASCII or a compatible character set use either LF (Line feed, '\n', 0x0A, 10 in decimal) or + // CR (Carriage return, '\r', 0x0D, 13 in decimal) individually, or CR followed by LF (CR+LF, 0x0D 0x0A)... + // * LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others + // * CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS + // * CR: Commodore 8-bit machines, Apple II family, Mac OS up to version 9 and OS-9 + + const char* p = buf; // the read head + char* q = buf; // the write head + const char CR = 0x0d; + const char LF = 0x0a; + + buf[length] = 0; + while( *p ) { + assert( p < (buf+length) ); + assert( q <= (buf+length) ); + assert( q <= p ); + + if ( *p == CR ) { + *q++ = LF; + p++; + if ( *p == LF ) { // check for CR+LF (and skip LF) + p++; + } + } + else { + *q++ = *p++; + } + } + assert( q <= (buf+length) ); + *q = 0; + + Parse( buf, 0, encoding ); + + delete [] buf; + return !Error(); +} + +bool fsTiXmlDocument::SaveFile( FileStream &stream ) const +{ + if ( useMicrosoftBOM ) + { + const unsigned char TIXML_UTF_LEAD_0 = 0xefU; + const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; + const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; + + stream.write( TIXML_UTF_LEAD_0 ); + stream.write( TIXML_UTF_LEAD_1 ); + stream.write( TIXML_UTF_LEAD_2 ); + } + Print( stream, 0 ); + return true; +} + +void fsTiXmlDocument::Print( FileStream& stream, int depth ) const +{ + for ( const TiXmlNode* node=FirstChild(); node; node=node->NextSibling() ) + { + //AttemptPrintTiNode(const_cast(node), stream, depth); + dynamic_cast(node)->Print( stream, depth ); + stream.writeText( "\n" ); + } +} + +void fsTiXmlAttribute::Print( FileStream& stream, int depth, TIXML_STRING* str ) const +{ + TIXML_STRING n, v; + + TiXmlString value = TiXmlString(Value()); + + EncodeString( NameTStr(), &n ); + EncodeString( value, &v ); + + for ( int i=0; i< depth; i++ ) { + stream.writeText( " " ); + } + + if (value.find ('\"') == TIXML_STRING::npos) { + const char* pValue = v.c_str(); + char buffer[4096]; + const S32 length = dSprintf(buffer, sizeof(buffer), "%s=\"%s\"", n.c_str(), pValue); + stream.write(length, buffer); + if ( str ) { + (*str) += n; (*str) += "=\""; (*str) += v; (*str) += "\""; + } + } + else { + char buffer[4096]; + const S32 length = dSprintf(buffer, sizeof(buffer), "%s='%s'", n.c_str(), v.c_str()); + stream.write(length, buffer); + if ( str ) { + (*str) += n; (*str) += "='"; (*str) += v; (*str) += "'"; + } + } +} + +void fsTiXmlDeclaration::Print(FileStream& stream, int depth, TiXmlString* str) const +{ + stream.writeStringBuffer( "" ); + if ( str ) (*str) += "?>"; +} + +void fsTiXmlElement::Print(FileStream& stream, int depth) const +{ + int i; + for ( i=0; iNext() ) + { + stream.writeStringBuffer( "\n" ); + dynamic_cast(attrib)->Print( stream, depth+1 ); + } + + // There are 3 different formatting approaches: + // 1) An element without children is printed as a node + // 2) An element with only a text child is printed as text + // 3) An element with children is printed on multiple lines. + TiXmlNode* node; + if ( !firstChild ) + { + stream.writeStringBuffer( " />" ); + } + else if ( firstChild == lastChild && firstChild->ToText() ) + { + stream.writeStringBuffer( ">" ); + dynamic_cast(firstChild)->Print( stream, depth + 1 ); + stream.writeFormattedBuffer( "", value.c_str() ); + } + else + { + stream.writeStringBuffer( ">" ); + + for ( node = firstChild; node; node=node->NextSibling() ) + { + if ( !node->ToText() ) + { + stream.writeStringBuffer( "\n" ); + } + dynamic_cast(node)->Print( stream, depth+1 ); + } + stream.writeStringBuffer( "\n" ); + for( i=0; i", value.c_str() ); + } +} + +void fsTiXmlComment::Print(FileStream& stream, int depth) const +{ + for ( int i=0; i", value.c_str() ); +} + +void fsTiXmlText::Print(FileStream& stream, int depth) const +{ + if ( cdata ) + { + int i; + stream.writeStringBuffer( "\n" ); + for ( i=0; i\n", value.c_str() ); // unformatted output + } + else + { + TIXML_STRING buffer; + EncodeString( value, &buffer ); + stream.writeFormattedBuffer( "%s", buffer.c_str() ); + } +} + +void fsTiXmlUnknown::Print(FileStream& stream, int depth) const +{ + for ( int i=0; i", value.c_str() ); +} + +static TiXmlNode* TiNodeIdentify( TiXmlNode* parent, const char* p, TiXmlEncoding encoding ) +{ + TiXmlNode* returnNode = 0; + + p = TiXmlNode::SkipWhiteSpace( p, encoding ); + if( !p || !*p || *p != '<' ) + { + return 0; + } + + p = TiXmlNode::SkipWhiteSpace( p, encoding ); + + if ( !p || !*p ) + { + return 0; + } + + // What is this thing? + // - Elements start with a letter or underscore, but xml is reserved. + // - Comments: ", value.c_str() ); -} - - -void TiXmlComment::CopyTo( TiXmlComment* target ) const -{ - TiXmlNode::CopyTo( target ); -} - - -bool TiXmlComment::Accept( TiXmlVisitor* visitor ) const -{ - return visitor->Visit( *this ); -} - - -TiXmlNode* TiXmlComment::Clone() const -{ - TiXmlComment* clone = new TiXmlComment(); - - if ( !clone ) - return 0; - - CopyTo( clone ); - return clone; -} - - -void TiXmlText::Print( FileStream& stream, int depth ) const -{ - if ( cdata ) - { - int i; - stream.writeString( "\n" ); - for ( i=0; i\n", value.c_str() ); // unformatted output - } - else - { - TIXML_STRING buffer; - EncodeString( value, &buffer ); - stream.writeFormattedBuffer( "%s", buffer.c_str() ); - } -} - - -void TiXmlText::CopyTo( TiXmlText* target ) const -{ - TiXmlNode::CopyTo( target ); - target->cdata = cdata; -} - - -bool TiXmlText::Accept( TiXmlVisitor* visitor ) const -{ - return visitor->Visit( *this ); -} - - -TiXmlNode* TiXmlText::Clone() const -{ - TiXmlText* clone = 0; - clone = new TiXmlText( "" ); - - if ( !clone ) - return 0; - - CopyTo( clone ); - return clone; -} - - -TiXmlDeclaration::TiXmlDeclaration( const char * _version, - const char * _encoding, - const char * _standalone ) - : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) -{ - version = _version; - encoding = _encoding; - standalone = _standalone; -} - - -#ifdef TIXML_USE_STL -TiXmlDeclaration::TiXmlDeclaration( const std::string& _version, - const std::string& _encoding, - const std::string& _standalone ) - : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) -{ - version = _version; - encoding = _encoding; - standalone = _standalone; -} -#endif - - -TiXmlDeclaration::TiXmlDeclaration( const TiXmlDeclaration& copy ) - : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) -{ - copy.CopyTo( this ); -} - - -TiXmlDeclaration& TiXmlDeclaration::operator=( const TiXmlDeclaration& copy ) -{ - Clear(); - copy.CopyTo( this ); - return *this; -} - - -void TiXmlDeclaration::Print( FileStream& stream, int /*depth*/, TIXML_STRING* str ) const -{ - stream.writeString( "" ); - if ( str ) (*str) += "?>"; -} - - -void TiXmlDeclaration::CopyTo( TiXmlDeclaration* target ) const -{ - TiXmlNode::CopyTo( target ); - - target->version = version; - target->encoding = encoding; - target->standalone = standalone; -} - - -bool TiXmlDeclaration::Accept( TiXmlVisitor* visitor ) const -{ - return visitor->Visit( *this ); -} - - -TiXmlNode* TiXmlDeclaration::Clone() const -{ - TiXmlDeclaration* clone = new TiXmlDeclaration(); - - if ( !clone ) - return 0; - - CopyTo( clone ); - return clone; -} - - -void TiXmlUnknown::Print( FileStream& stream, int depth ) const -{ - for ( int i=0; i", value.c_str() ); -} - - -void TiXmlUnknown::CopyTo( TiXmlUnknown* target ) const -{ - TiXmlNode::CopyTo( target ); -} - - -bool TiXmlUnknown::Accept( TiXmlVisitor* visitor ) const -{ - return visitor->Visit( *this ); -} - - -TiXmlNode* TiXmlUnknown::Clone() const -{ - TiXmlUnknown* clone = new TiXmlUnknown(); - - if ( !clone ) - return 0; - - CopyTo( clone ); - return clone; -} - - -TiXmlAttributeSet::TiXmlAttributeSet() -{ - sentinel.next = &sentinel; - sentinel.prev = &sentinel; -} - - -TiXmlAttributeSet::~TiXmlAttributeSet() -{ - assert( sentinel.next == &sentinel ); - assert( sentinel.prev == &sentinel ); -} - - -void TiXmlAttributeSet::Add( TiXmlAttribute* addMe ) -{ - #ifdef TIXML_USE_STL - assert( !Find( TIXML_STRING( addMe->Name() ) ) ); // Shouldn't be multiply adding to the set. - #else - assert( !Find( addMe->Name() ) ); // Shouldn't be multiply adding to the set. - #endif - - addMe->next = &sentinel; - addMe->prev = sentinel.prev; - - sentinel.prev->next = addMe; - sentinel.prev = addMe; -} - -void TiXmlAttributeSet::Remove( TiXmlAttribute* removeMe ) -{ - TiXmlAttribute* node; - - for( node = sentinel.next; node != &sentinel; node = node->next ) - { - if ( node == removeMe ) - { - node->prev->next = node->next; - node->next->prev = node->prev; - node->next = 0; - node->prev = 0; - return; - } - } - assert( 0 ); // we tried to remove a non-linked attribute. -} - - -#ifdef TIXML_USE_STL -TiXmlAttribute* TiXmlAttributeSet::Find( const std::string& name ) const -{ - for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) - { - if ( node->name == name ) - return node; - } - return 0; -} - -TiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const std::string& _name ) -{ - TiXmlAttribute* attrib = Find( _name ); - if ( !attrib ) { - attrib = new TiXmlAttribute(); - Add( attrib ); - attrib->SetName( _name ); - } - return attrib; -} -#endif - - -TiXmlAttribute* TiXmlAttributeSet::Find( const char* name ) const -{ - for( TiXmlAttribute* node = sentinel.next; node != &sentinel; node = node->next ) - { - if ( strcmp( node->name.c_str(), name ) == 0 ) - return node; - } - return 0; -} - - -TiXmlAttribute* TiXmlAttributeSet::FindOrCreate( const char* _name ) -{ - TiXmlAttribute* attrib = Find( _name ); - if ( !attrib ) { - attrib = new TiXmlAttribute(); - Add( attrib ); - attrib->SetName( _name ); - } - return attrib; -} - - -#ifdef TIXML_USE_STL -std::istream& operator>> (std::istream & in, TiXmlNode & base) -{ - TIXML_STRING tag; - tag.reserve( 8 * 1000 ); - base.StreamIn( &in, &tag ); - - base.Parse( tag.c_str(), 0, TIXML_DEFAULT_ENCODING ); - return in; -} -#endif - - -#ifdef TIXML_USE_STL -std::ostream& operator<< (std::ostream & out, const TiXmlNode & base) -{ - TiXmlPrinter printer; - printer.SetStreamPrinting(); - base.Accept( &printer ); - out << printer.Str(); - - return out; -} - - -std::string& operator<< (std::string& out, const TiXmlNode& base ) -{ - TiXmlPrinter printer; - printer.SetStreamPrinting(); - base.Accept( &printer ); - out.append( printer.Str() ); - - return out; -} -#endif - - -TiXmlHandle TiXmlHandle::FirstChild() const -{ - if ( node ) - { - TiXmlNode* child = node->FirstChild(); - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} - - -TiXmlHandle TiXmlHandle::FirstChild( const char * value ) const -{ - if ( node ) - { - TiXmlNode* child = node->FirstChild( value ); - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} - - -TiXmlHandle TiXmlHandle::FirstChildElement() const -{ - if ( node ) - { - TiXmlElement* child = node->FirstChildElement(); - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} - - -TiXmlHandle TiXmlHandle::FirstChildElement( const char * value ) const -{ - if ( node ) - { - TiXmlElement* child = node->FirstChildElement( value ); - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} - - -TiXmlHandle TiXmlHandle::Child( int count ) const -{ - if ( node ) - { - int i; - TiXmlNode* child = node->FirstChild(); - for ( i=0; - child && iNextSibling(), ++i ) - { - // nothing - } - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} - - -TiXmlHandle TiXmlHandle::Child( const char* value, int count ) const -{ - if ( node ) - { - int i; - TiXmlNode* child = node->FirstChild( value ); - for ( i=0; - child && iNextSibling( value ), ++i ) - { - // nothing - } - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} - - -TiXmlHandle TiXmlHandle::ChildElement( int count ) const -{ - if ( node ) - { - int i; - TiXmlElement* child = node->FirstChildElement(); - for ( i=0; - child && iNextSiblingElement(), ++i ) - { - // nothing - } - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} - - -TiXmlHandle TiXmlHandle::ChildElement( const char* value, int count ) const -{ - if ( node ) - { - int i; - TiXmlElement* child = node->FirstChildElement( value ); - for ( i=0; - child && iNextSiblingElement( value ), ++i ) - { - // nothing - } - if ( child ) - return TiXmlHandle( child ); - } - return TiXmlHandle( 0 ); -} diff --git a/Engine/source/persistence/_tinyXML/tinyxml.h b/Engine/source/persistence/_tinyXML/tinyxml.h deleted file mode 100644 index 0835bd6da3..0000000000 --- a/Engine/source/persistence/_tinyXML/tinyxml.h +++ /dev/null @@ -1,1725 +0,0 @@ -/* -www.sourceforge.net/projects/tinyxml -Original code by Lee Thomason (www.grinninglizard.com) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - - -#ifndef TINYXML_INCLUDED -#define TINYXML_INCLUDED - -#ifndef _FILESTREAM_H_ -#include "core/stream/fileStream.h" -#endif - -#ifdef _MSC_VER -#pragma warning( push ) -#pragma warning( disable : 4530 ) -#pragma warning( disable : 4786 ) -#endif - -#include -#include -#include -#include -#include - -// Help out windows: -#if defined( _DEBUG ) && !defined( DEBUG ) -#define DEBUG -#endif - -#ifdef TIXML_USE_STL - #include - #include - #include - #define TIXML_STRING std::string -#else - #include "tinystr.h" - #define TIXML_STRING TiXmlString -#endif - -// Deprecated library function hell. Compilers want to use the -// new safe versions. This probably doesn't fully address the problem, -// but it gets closer. There are too many compilers for me to fully -// test. If you get compilation troubles, undefine TIXML_SAFE -#define TIXML_SAFE - -#ifdef TIXML_SAFE - #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) - // Microsoft visual studio, version 2005 and higher. - #define TIXML_SNPRINTF _snprintf_s - #define TIXML_SSCANF sscanf_s - #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) - // Microsoft visual studio, version 6 and higher. - //#pragma message( "Using _sn* functions." ) - #define TIXML_SNPRINTF _snprintf - #define TIXML_SSCANF sscanf - #elif defined(__GNUC__) && (__GNUC__ >= 3 ) - // GCC version 3 and higher.s - //#warning( "Using sn* functions." ) - #define TIXML_SNPRINTF snprintf - #define TIXML_SSCANF sscanf - #else - #define TIXML_SNPRINTF snprintf - #define TIXML_SSCANF sscanf - #endif -#endif - -class TiXmlDocument; -class TiXmlElement; -class TiXmlComment; -class TiXmlUnknown; -class TiXmlAttribute; -class TiXmlText; -class TiXmlDeclaration; -class TiXmlParsingData; - -const int TIXML_MAJOR_VERSION = 2; -const int TIXML_MINOR_VERSION = 6; -const int TIXML_PATCH_VERSION = 2; - -/* Internal structure for tracking location of items - in the XML file. -*/ -struct TiXmlCursor -{ - TiXmlCursor() { Clear(); } - void Clear() { row = col = -1; } - - int row; // 0 based. - int col; // 0 based. -}; - - -/** - Implements the interface to the "Visitor pattern" (see the Accept() method.) - If you call the Accept() method, it requires being passed a TiXmlVisitor - class to handle callbacks. For nodes that contain other nodes (Document, Element) - you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves - are simply called with Visit(). - - If you return 'true' from a Visit method, recursive parsing will continue. If you return - false, no children of this node or its sibilings will be Visited. - - All flavors of Visit methods have a default implementation that returns 'true' (continue - visiting). You need to only override methods that are interesting to you. - - Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. - - You should never change the document from a callback. - - @sa TiXmlNode::Accept() -*/ -class TiXmlVisitor -{ -public: - virtual ~TiXmlVisitor() {} - - /// Visit a document. - virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } - /// Visit a document. - virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } - - /// Visit an element. - virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } - /// Visit an element. - virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } - - /// Visit a declaration - virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } - /// Visit a text node - virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } - /// Visit a comment node - virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } - /// Visit an unknown node - virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } -}; - -// Only used by Attribute::Query functions -enum -{ - TIXML_SUCCESS, - TIXML_NO_ATTRIBUTE, - TIXML_WRONG_TYPE -}; - - -// Used by the parsing routines. -enum TiXmlEncoding -{ - TIXML_ENCODING_UNKNOWN, - TIXML_ENCODING_UTF8, - TIXML_ENCODING_LEGACY -}; - -const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; - -/** TiXmlBase is a base class for every class in TinyXml. - It does little except to establish that TinyXml classes - can be printed and provide some utility functions. - - In XML, the document and elements can contain - other elements and other types of nodes. - - @verbatim - A Document can contain: Element (container or leaf) - Comment (leaf) - Unknown (leaf) - Declaration( leaf ) - - An Element can contain: Element (container or leaf) - Text (leaf) - Attributes (not on tree) - Comment (leaf) - Unknown (leaf) - - A Decleration contains: Attributes (not on tree) - @endverbatim -*/ -class TiXmlBase -{ - friend class TiXmlNode; - friend class TiXmlElement; - friend class TiXmlDocument; - -public: - TiXmlBase() : userData(0) {} - virtual ~TiXmlBase() {} - - /** All TinyXml classes can print themselves to a filestream - or the string class (TiXmlString in non-STL mode, std::string - in STL mode.) Either or both cfile and str can be null. - - This is a formatted print, and will insert - tabs and newlines. - - (For an unformatted stream, use the << operator.) - */ - virtual void Print( FileStream& stream, int depth ) const = 0; - - /** The world does not agree on whether white space should be kept or - not. In order to make everyone happy, these global, static functions - are provided to set whether or not TinyXml will condense all white space - into a single space or not. The default is to condense. Note changing this - value is not thread safe. - */ - static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } - - /// Return the current white space setting. - static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } - - /** Return the position, in the original source file, of this node or attribute. - The row and column are 1-based. (That is the first row and first column is - 1,1). If the returns values are 0 or less, then the parser does not have - a row and column value. - - Generally, the row and column value will be set when the TiXmlDocument::Load(), - TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set - when the DOM was created from operator>>. - - The values reflect the initial load. Once the DOM is modified programmatically - (by adding or changing nodes and attributes) the new values will NOT update to - reflect changes in the document. - - There is a minor performance cost to computing the row and column. Computation - can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. - - @sa TiXmlDocument::SetTabSize() - */ - int Row() const { return location.row + 1; } - int Column() const { return location.col + 1; } ///< See Row() - - void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. - void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. - const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. - - // Table that returs, for a given lead byte, the total number of bytes - // in the UTF-8 sequence. - static const int utf8ByteTable[256]; - - virtual const char* Parse( const char* p, - TiXmlParsingData* data, - TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; - - /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, - or they will be transformed into entities! - */ - static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); - - enum - { - TIXML_NO_ERROR = 0, - TIXML_ERROR, - TIXML_ERROR_OPENING_FILE, - TIXML_ERROR_PARSING_ELEMENT, - TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, - TIXML_ERROR_READING_ELEMENT_VALUE, - TIXML_ERROR_READING_ATTRIBUTES, - TIXML_ERROR_PARSING_EMPTY, - TIXML_ERROR_READING_END_TAG, - TIXML_ERROR_PARSING_UNKNOWN, - TIXML_ERROR_PARSING_COMMENT, - TIXML_ERROR_PARSING_DECLARATION, - TIXML_ERROR_DOCUMENT_EMPTY, - TIXML_ERROR_EMBEDDED_NULL, - TIXML_ERROR_PARSING_CDATA, - TIXML_ERROR_DOCUMENT_TOP_ONLY, - - TIXML_ERROR_STRING_COUNT - }; - -protected: - - static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); - - inline static bool IsWhiteSpace( char c ) - { - return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); - } - inline static bool IsWhiteSpace( int c ) - { - if ( c < 256 ) - return IsWhiteSpace( (char) c ); - return false; // Again, only truly correct for English/Latin...but usually works. - } - - #ifdef TIXML_USE_STL - static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); - static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); - #endif - - /* Reads an XML name into the string provided. Returns - a pointer just past the last character of the name, - or 0 if the function has an error. - */ - static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); - - /* Reads text. Returns a pointer past the given end tag. - Wickedly complex options, but it keeps the (sensitive) code in one place. - */ - static const char* ReadText( const char* in, // where to start - TIXML_STRING* text, // the string read - bool ignoreWhiteSpace, // whether to keep the white space - const char* endTag, // what ends this text - bool ignoreCase, // whether to ignore case in the end tag - TiXmlEncoding encoding ); // the current encoding - - // If an entity has been found, transform it into a character. - static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); - - // Get a character, while interpreting entities. - // The length can be from 0 to 4 bytes. - inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) - { - assert( p ); - if ( encoding == TIXML_ENCODING_UTF8 ) - { - *length = utf8ByteTable[ *((const unsigned char*)p) ]; - assert( *length >= 0 && *length < 5 ); - } - else - { - *length = 1; - } - - if ( *length == 1 ) - { - if ( *p == '&' ) - return GetEntity( p, _value, length, encoding ); - *_value = *p; - return p+1; - } - else if ( *length ) - { - //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), - // and the null terminator isn't needed - for( int i=0; p[i] && i<*length; ++i ) { - _value[i] = p[i]; - } - return p + (*length); - } - else - { - // Not valid text. - return 0; - } - } - - // Return true if the next characters in the stream are any of the endTag sequences. - // Ignore case only works for english, and should only be relied on when comparing - // to English words: StringEqual( p, "version", true ) is fine. - static bool StringEqual( const char* p, - const char* endTag, - bool ignoreCase, - TiXmlEncoding encoding ); - - static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; - - TiXmlCursor location; - - /// Field containing a generic user pointer - void* userData; - - // None of these methods are reliable for any language except English. - // Good for approximation, not great for accuracy. - static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); - static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); - inline static int ToLower( int v, TiXmlEncoding encoding ) - { - if ( encoding == TIXML_ENCODING_UTF8 ) - { - if ( v < 128 ) return tolower( v ); - return v; - } - else - { - return tolower( v ); - } - } - static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); - -private: - TiXmlBase( const TiXmlBase& ); // not implemented. - void operator=( const TiXmlBase& base ); // not allowed. - - struct Entity - { - const char* str; - unsigned int strLength; - char chr; - }; - enum - { - NUM_ENTITY = 5, - MAX_ENTITY_LENGTH = 6 - - }; - static Entity entity[ NUM_ENTITY ]; - static bool condenseWhiteSpace; -}; - - -/** The parent class for everything in the Document Object Model. - (Except for attributes). - Nodes have siblings, a parent, and children. A node can be - in a document, or stand on its own. The type of a TiXmlNode - can be queried, and it can be cast to its more defined type. -*/ -class TiXmlNode : public TiXmlBase -{ - friend class TiXmlDocument; - friend class TiXmlElement; - -public: - #ifdef TIXML_USE_STL - - /** An input stream operator, for every class. Tolerant of newlines and - formatting, but doesn't expect them. - */ - friend std::istream& operator >> (std::istream& in, TiXmlNode& base); - - /** An output stream operator, for every class. Note that this outputs - without any newlines or formatting, as opposed to Print(), which - includes tabs and new lines. - - The operator<< and operator>> are not completely symmetric. Writing - a node to a stream is very well defined. You'll get a nice stream - of output, without any extra whitespace or newlines. - - But reading is not as well defined. (As it always is.) If you create - a TiXmlElement (for example) and read that from an input stream, - the text needs to define an element or junk will result. This is - true of all input streams, but it's worth keeping in mind. - - A TiXmlDocument will read nodes until it reads a root element, and - all the children of that root element. - */ - friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); - - /// Appends the XML node or attribute to a std::string. - friend std::string& operator<< (std::string& out, const TiXmlNode& base ); - - #endif - - /** The types of XML nodes supported by TinyXml. (All the - unsupported types are picked up by UNKNOWN.) - */ - enum NodeType - { - TINYXML_DOCUMENT, - TINYXML_ELEMENT, - TINYXML_COMMENT, - TINYXML_UNKNOWN, - TINYXML_TEXT, - TINYXML_DECLARATION, - TINYXML_TYPECOUNT - }; - - virtual ~TiXmlNode(); - - /** The meaning of 'value' changes for the specific type of - TiXmlNode. - @verbatim - Document: filename of the xml file - Element: name of the element - Comment: the comment text - Unknown: the tag contents - Text: the text string - @endverbatim - - The subclasses will wrap this function. - */ - const char *Value() const { return value.c_str (); } - - #ifdef TIXML_USE_STL - /** Return Value() as a std::string. If you only use STL, - this is more efficient than calling Value(). - Only available in STL mode. - */ - const std::string& ValueStr() const { return value; } - #endif - - const TIXML_STRING& ValueTStr() const { return value; } - - /** Changes the value of the node. Defined as: - @verbatim - Document: filename of the xml file - Element: name of the element - Comment: the comment text - Unknown: the tag contents - Text: the text string - @endverbatim - */ - void SetValue(const char * _value) { value = _value;} - - #ifdef TIXML_USE_STL - /// STL std::string form. - void SetValue( const std::string& _value ) { value = _value; } - #endif - - /// Delete all the children of this node. Does not affect 'this'. - void Clear(); - - /// One step up the DOM. - TiXmlNode* Parent() { return parent; } - const TiXmlNode* Parent() const { return parent; } - - const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. - TiXmlNode* FirstChild() { return firstChild; } - const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. - /// The first child of this node with the matching 'value'. Will be null if none found. - TiXmlNode* FirstChild( const char * _value ) { - // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) - // call the method, cast the return back to non-const. - return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); - } - const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. - TiXmlNode* LastChild() { return lastChild; } - - const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. - TiXmlNode* LastChild( const char * _value ) { - return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); - } - - #ifdef TIXML_USE_STL - const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. - const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. - #endif - - /** An alternate way to walk the children of a node. - One way to iterate over nodes is: - @verbatim - for( child = parent->FirstChild(); child; child = child->NextSibling() ) - @endverbatim - - IterateChildren does the same thing with the syntax: - @verbatim - child = 0; - while( child = parent->IterateChildren( child ) ) - @endverbatim - - IterateChildren takes the previous child as input and finds - the next one. If the previous child is null, it returns the - first. IterateChildren will return null when done. - */ - const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; - TiXmlNode* IterateChildren( const TiXmlNode* previous ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); - } - - /// This flavor of IterateChildren searches for children with a particular 'value' - const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; - TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. - TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. - #endif - - /** Add a new node related to this. Adds a child past the LastChild. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); - - - /** Add a new node related to this. Adds a child past the LastChild. - - NOTE: the node to be added is passed by pointer, and will be - henceforth owned (and deleted) by tinyXml. This method is efficient - and avoids an extra copy, but should be used with care as it - uses a different memory model than the other insert functions. - - @sa InsertEndChild - */ - TiXmlNode* LinkEndChild( TiXmlNode* addThis ); - - /** Add a new node related to this. Adds a child before the specified child. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); - - /** Add a new node related to this. Adds a child after the specified child. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); - - /** Replace a child of this node. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); - - /// Delete a child of this node. - bool RemoveChild( TiXmlNode* removeThis ); - - /// Navigate to a sibling node. - const TiXmlNode* PreviousSibling() const { return prev; } - TiXmlNode* PreviousSibling() { return prev; } - - /// Navigate to a sibling node. - const TiXmlNode* PreviousSibling( const char * ) const; - TiXmlNode* PreviousSibling( const char *_prev ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. - const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. - #endif - - /// Navigate to a sibling node. - const TiXmlNode* NextSibling() const { return next; } - TiXmlNode* NextSibling() { return next; } - - /// Navigate to a sibling node with the given 'value'. - const TiXmlNode* NextSibling( const char * ) const; - TiXmlNode* NextSibling( const char* _next ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); - } - - /** Convenience function to get through elements. - Calls NextSibling and ToElement. Will skip all non-Element - nodes. Returns 0 if there is not another element. - */ - const TiXmlElement* NextSiblingElement() const; - TiXmlElement* NextSiblingElement() { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); - } - - /** Convenience function to get through elements. - Calls NextSibling and ToElement. Will skip all non-Element - nodes. Returns 0 if there is not another element. - */ - const TiXmlElement* NextSiblingElement( const char * ) const; - TiXmlElement* NextSiblingElement( const char *_next ) { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. - TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. - #endif - - /// Convenience function to get through elements. - const TiXmlElement* FirstChildElement() const; - TiXmlElement* FirstChildElement() { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); - } - - /// Convenience function to get through elements. - const TiXmlElement* FirstChildElement( const char * _value ) const; - TiXmlElement* FirstChildElement( const char * _value ) { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. - TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. - #endif - - /** Query the type (as an enumerated value, above) of this node. - The possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, - TINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION. - */ - int Type() const { return type; } - - /** Return a pointer to the Document this node lives in. - Returns null if not in a document. - */ - const TiXmlDocument* GetDocument() const; - TiXmlDocument* GetDocument() { - return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); - } - - /// Returns true if this node has no children. - bool NoChildren() const { return !firstChild; } - - virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - - virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - - /** Create an exact duplicate of this node and return it. The memory must be deleted - by the caller. - */ - virtual TiXmlNode* Clone() const = 0; - - /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the - XML tree will be conditionally visited and the host will be called back - via the TiXmlVisitor interface. - - This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse - the XML for the callbacks, so the performance of TinyXML is unchanged by using this - interface versus any other.) - - The interface has been based on ideas from: - - - http://www.saxproject.org/ - - http://c2.com/cgi/wiki?HierarchicalVisitorPattern - - Which are both good references for "visiting". - - An example of using Accept(): - @verbatim - TiXmlPrinter printer; - tinyxmlDoc.Accept( &printer ); - const char* xmlcstr = printer.CStr(); - @endverbatim - */ - virtual bool Accept( TiXmlVisitor* visitor ) const = 0; - -protected: - TiXmlNode( NodeType _type ); - - // Copy to the allocated object. Shared functionality between Clone, Copy constructor, - // and the assignment operator. - void CopyTo( TiXmlNode* target ) const; - - #ifdef TIXML_USE_STL - // The real work of the input operator. - virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; - #endif - - // Figure out what is at *p, and parse it. Returns null if it is not an xml node. - TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); - - TiXmlNode* parent; - NodeType type; - - TiXmlNode* firstChild; - TiXmlNode* lastChild; - - TIXML_STRING value; - - TiXmlNode* prev; - TiXmlNode* next; - -private: - TiXmlNode( const TiXmlNode& ); // not implemented. - void operator=( const TiXmlNode& base ); // not allowed. -}; - - -/** An attribute is a name-value pair. Elements have an arbitrary - number of attributes, each with a unique name. - - @note The attributes are not TiXmlNodes, since they are not - part of the tinyXML document object model. There are other - suggested ways to look at this problem. -*/ -class TiXmlAttribute : public TiXmlBase -{ - friend class TiXmlAttributeSet; - -public: - /// Construct an empty attribute. - TiXmlAttribute() : TiXmlBase() - { - document = 0; - prev = next = 0; - } - - #ifdef TIXML_USE_STL - /// std::string constructor. - TiXmlAttribute( const std::string& _name, const std::string& _value ) - { - name = _name; - value = _value; - document = 0; - prev = next = 0; - } - #endif - - /// Construct an attribute with a name and value. - TiXmlAttribute( const char * _name, const char * _value ) - { - name = _name; - value = _value; - document = 0; - prev = next = 0; - } - - const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. - const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. - #ifdef TIXML_USE_STL - const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. - #endif - int IntValue() const; ///< Return the value of this attribute, converted to an integer. - double DoubleValue() const; ///< Return the value of this attribute, converted to a double. - - // Get the tinyxml string representation - const TIXML_STRING& NameTStr() const { return name; } - - /** QueryIntValue examines the value string. It is an alternative to the - IntValue() method with richer error checking. - If the value is an integer, it is stored in 'value' and - the call returns TIXML_SUCCESS. If it is not - an integer, it returns TIXML_WRONG_TYPE. - - A specialized but useful call. Note that for success it returns 0, - which is the opposite of almost all other TinyXml calls. - */ - int QueryIntValue( int* _value ) const; - /// QueryDoubleValue examines the value string. See QueryIntValue(). - int QueryDoubleValue( double* _value ) const; - - void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. - void SetValue( const char* _value ) { value = _value; } ///< Set the value. - - void SetIntValue( int _value ); ///< Set the value from an integer. - void SetDoubleValue( double _value ); ///< Set the value from a double. - - #ifdef TIXML_USE_STL - /// STL std::string form. - void SetName( const std::string& _name ) { name = _name; } - /// STL std::string form. - void SetValue( const std::string& _value ) { value = _value; } - #endif - - /// Get the next sibling attribute in the DOM. Returns null at end. - const TiXmlAttribute* Next() const; - TiXmlAttribute* Next() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); - } - - /// Get the previous sibling attribute in the DOM. Returns null at beginning. - const TiXmlAttribute* Previous() const; - TiXmlAttribute* Previous() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); - } - - bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } - bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } - bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } - - /* Attribute parsing starts: first letter of the name - returns: the next char after the value end quote - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - // Prints this Attribute to a FILE stream. - virtual void Print( FileStream& stream, int depth ) const { - Print( stream, depth, 0 ); - } - void Print( FileStream& stream, int depth, TIXML_STRING* str ) const; - - // [internal use] - // Set the document pointer so the attribute can report errors. - void SetDocument( TiXmlDocument* doc ) { document = doc; } - -private: - TiXmlAttribute( const TiXmlAttribute& ); // not implemented. - void operator=( const TiXmlAttribute& base ); // not allowed. - - TiXmlDocument* document; // A pointer back to a document, for error reporting. - TIXML_STRING name; - TIXML_STRING value; - TiXmlAttribute* prev; - TiXmlAttribute* next; -}; - - -/* A class used to manage a group of attributes. - It is only used internally, both by the ELEMENT and the DECLARATION. - - The set can be changed transparent to the Element and Declaration - classes that use it, but NOT transparent to the Attribute - which has to implement a next() and previous() method. Which makes - it a bit problematic and prevents the use of STL. - - This version is implemented with circular lists because: - - I like circular lists - - it demonstrates some independence from the (typical) doubly linked list. -*/ -class TiXmlAttributeSet -{ -public: - TiXmlAttributeSet(); - ~TiXmlAttributeSet(); - - void Add( TiXmlAttribute* attribute ); - void Remove( TiXmlAttribute* attribute ); - - const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } - TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } - const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } - TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } - - TiXmlAttribute* Find( const char* _name ) const; - TiXmlAttribute* FindOrCreate( const char* _name ); - -# ifdef TIXML_USE_STL - TiXmlAttribute* Find( const std::string& _name ) const; - TiXmlAttribute* FindOrCreate( const std::string& _name ); -# endif - - -private: - //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), - //*ME: this class must be also use a hidden/disabled copy-constructor !!! - TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed - void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) - - TiXmlAttribute sentinel; -}; - - -/** The element is a container class. It has a value, the element name, - and can contain other elements, text, comments, and unknowns. - Elements also contain an arbitrary number of attributes. -*/ -class TiXmlElement : public TiXmlNode -{ -public: - /// Construct an element. - TiXmlElement (const char * in_value); - - #ifdef TIXML_USE_STL - /// std::string constructor. - TiXmlElement( const std::string& _value ); - #endif - - TiXmlElement( const TiXmlElement& ); - - TiXmlElement& operator=( const TiXmlElement& base ); - - virtual ~TiXmlElement(); - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - */ - const char* Attribute( const char* name ) const; - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - If the attribute exists and can be converted to an integer, - the integer value will be put in the return 'i', if 'i' - is non-null. - */ - const char* Attribute( const char* name, int* i ) const; - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - If the attribute exists and can be converted to an double, - the double value will be put in the return 'd', if 'd' - is non-null. - */ - const char* Attribute( const char* name, double* d ) const; - - /** QueryIntAttribute examines the attribute - it is an alternative to the - Attribute() method with richer error checking. - If the attribute is an integer, it is stored in 'value' and - the call returns TIXML_SUCCESS. If it is not - an integer, it returns TIXML_WRONG_TYPE. If the attribute - does not exist, then TIXML_NO_ATTRIBUTE is returned. - */ - int QueryIntAttribute( const char* name, int* _value ) const; - /// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute(). - int QueryUnsignedAttribute( const char* name, unsigned* _value ) const; - /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). - Note that '1', 'true', or 'yes' are considered true, while '0', 'false' - and 'no' are considered false. - */ - int QueryBoolAttribute( const char* name, bool* _value ) const; - /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). - int QueryDoubleAttribute( const char* name, double* _value ) const; - /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). - int QueryFloatAttribute( const char* name, float* _value ) const { - double d; - int result = QueryDoubleAttribute( name, &d ); - if ( result == TIXML_SUCCESS ) { - *_value = (float)d; - } - return result; - } - - #ifdef TIXML_USE_STL - /// QueryStringAttribute examines the attribute - see QueryIntAttribute(). - int QueryStringAttribute( const char* name, std::string* _value ) const { - const char* cstr = Attribute( name ); - if ( cstr ) { - *_value = std::string( cstr ); - return TIXML_SUCCESS; - } - return TIXML_NO_ATTRIBUTE; - } - - /** Template form of the attribute query which will try to read the - attribute into the specified type. Very easy, very powerful, but - be careful to make sure to call this with the correct type. - - NOTE: This method doesn't work correctly for 'string' types that contain spaces. - - @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE - */ - template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const - { - const TiXmlAttribute* node = attributeSet.Find( name ); - if ( !node ) - return TIXML_NO_ATTRIBUTE; - - std::stringstream sstream( node->ValueStr() ); - sstream >> *outValue; - if ( !sstream.fail() ) - return TIXML_SUCCESS; - return TIXML_WRONG_TYPE; - } - - int QueryValueAttribute( const std::string& name, std::string* outValue ) const - { - const TiXmlAttribute* node = attributeSet.Find( name ); - if ( !node ) - return TIXML_NO_ATTRIBUTE; - *outValue = node->ValueStr(); - return TIXML_SUCCESS; - } - #endif - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetAttribute( const char* name, const char * _value ); - - #ifdef TIXML_USE_STL - const std::string* Attribute( const std::string& name ) const; - const std::string* Attribute( const std::string& name, int* i ) const; - const std::string* Attribute( const std::string& name, double* d ) const; - int QueryIntAttribute( const std::string& name, int* _value ) const; - int QueryDoubleAttribute( const std::string& name, double* _value ) const; - - /// STL std::string form. - void SetAttribute( const std::string& name, const std::string& _value ); - ///< STL std::string form. - void SetAttribute( const std::string& name, int _value ); - ///< STL std::string form. - void SetDoubleAttribute( const std::string& name, double value ); - #endif - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetAttribute( const char * name, int value ); - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetDoubleAttribute( const char * name, double value ); - - /** Deletes an attribute with the given name. - */ - void RemoveAttribute( const char * name ); - #ifdef TIXML_USE_STL - void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. - #endif - - const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. - TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } - const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. - TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } - - /** Convenience function for easy access to the text inside an element. Although easy - and concise, GetText() is limited compared to getting the TiXmlText child - and accessing it directly. - - If the first child of 'this' is a TiXmlText, the GetText() - returns the character string of the Text node, else null is returned. - - This is a convenient method for getting the text of simple contained text: - @verbatim - This is text - const char* str = fooElement->GetText(); - @endverbatim - - 'str' will be a pointer to "This is text". - - Note that this function can be misleading. If the element foo was created from - this XML: - @verbatim - This is text - @endverbatim - - then the value of str would be null. The first child node isn't a text node, it is - another element. From this XML: - @verbatim - This is text - @endverbatim - GetText() will return "This is ". - - WARNING: GetText() accesses a child node - don't become confused with the - similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are - safe type casts on the referenced node. - */ - const char* GetText() const; - - /// Creates a new Element and returns it - the returned element is a copy. - virtual TiXmlNode* Clone() const; - // Print the Element to a FILE stream. - virtual void Print( FileStream& stream, int depth ) const; - - /* Attribtue parsing starts: next char past '<' - returns: next char past '>' - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - - void CopyTo( TiXmlElement* target ) const; - void ClearThis(); // like clear, but initializes 'this' object as well - - // Used to be public [internal use] - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - /* [internal use] - Reads the "value" of the element -- another element, or text. - This should terminate with the current end tag. - */ - const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); - -private: - TiXmlAttributeSet attributeSet; -}; - - -/** An XML comment. -*/ -class TiXmlComment : public TiXmlNode -{ -public: - /// Constructs an empty comment. - TiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {} - /// Construct a comment from text. - TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) { - SetValue( _value ); - } - TiXmlComment( const TiXmlComment& ); - TiXmlComment& operator=( const TiXmlComment& base ); - - virtual ~TiXmlComment() {} - - /// Returns a copy of this Comment. - virtual TiXmlNode* Clone() const; - // Write this Comment to a FILE stream. - virtual void Print( FileStream& stream, int depth ) const; - - /* Attribtue parsing starts: at the ! of the !-- - returns: next char past '>' - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - void CopyTo( TiXmlComment* target ) const; - - // used to be public - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif -// virtual void StreamOut( TIXML_OSTREAM * out ) const; - -private: - -}; - - -/** XML text. A text node can have 2 ways to output the next. "normal" output - and CDATA. It will default to the mode it was parsed from the XML file and - you generally want to leave it alone, but you can change the output mode with - SetCDATA() and query it with CDATA(). -*/ -class TiXmlText : public TiXmlNode -{ - friend class TiXmlElement; -public: - /** Constructor for text element. By default, it is treated as - normal, encoded text. If you want it be output as a CDATA text - element, set the parameter _cdata to 'true' - */ - TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) - { - SetValue( initValue ); - cdata = false; - } - virtual ~TiXmlText() {} - - #ifdef TIXML_USE_STL - /// Constructor. - TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) - { - SetValue( initValue ); - cdata = false; - } - #endif - - TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); } - TiXmlText& operator=( const TiXmlText& base ) { base.CopyTo( this ); return *this; } - - // Write this text object to a FILE stream. - virtual void Print( FileStream& stream, int depth ) const; - - /// Queries whether this represents text using a CDATA section. - bool CDATA() const { return cdata; } - /// Turns on or off a CDATA representation of text. - void SetCDATA( bool _cdata ) { cdata = _cdata; } - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected : - /// [internal use] Creates a new Element and returns it. - virtual TiXmlNode* Clone() const; - void CopyTo( TiXmlText* target ) const; - - bool Blank() const; // returns true if all white space and new lines - // [internal use] - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - bool cdata; // true if this should be input and output as a CDATA style text element -}; - - -/** In correct XML the declaration is the first entry in the file. - @verbatim - - @endverbatim - - TinyXml will happily read or write files without a declaration, - however. There are 3 possible attributes to the declaration: - version, encoding, and standalone. - - Note: In this version of the code, the attributes are - handled as special cases, not generic attributes, simply - because there can only be at most 3 and they are always the same. -*/ -class TiXmlDeclaration : public TiXmlNode -{ -public: - /// Construct an empty declaration. - TiXmlDeclaration() : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {} - -#ifdef TIXML_USE_STL - /// Constructor. - TiXmlDeclaration( const std::string& _version, - const std::string& _encoding, - const std::string& _standalone ); -#endif - - /// Construct. - TiXmlDeclaration( const char* _version, - const char* _encoding, - const char* _standalone ); - - TiXmlDeclaration( const TiXmlDeclaration& copy ); - TiXmlDeclaration& operator=( const TiXmlDeclaration& copy ); - - virtual ~TiXmlDeclaration() {} - - /// Version. Will return an empty string if none was found. - const char *Version() const { return version.c_str (); } - /// Encoding. Will return an empty string if none was found. - const char *Encoding() const { return encoding.c_str (); } - /// Is this a standalone document? - const char *Standalone() const { return standalone.c_str (); } - - /// Creates a copy of this Declaration and returns it. - virtual TiXmlNode* Clone() const; - // Print this declaration to a FILE stream. - virtual void Print( FileStream& stream, int depth, TIXML_STRING* str ) const; - virtual void Print( FileStream& stream, int depth ) const { - Print( stream, depth, 0 ); - } - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - void CopyTo( TiXmlDeclaration* target ) const; - // used to be public - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - - TIXML_STRING version; - TIXML_STRING encoding; - TIXML_STRING standalone; -}; - - -/** Any tag that tinyXml doesn't recognize is saved as an - unknown. It is a tag of text, but should not be modified. - It will be written back to the XML, unchanged, when the file - is saved. - - DTD tags get thrown into TiXmlUnknowns. -*/ -class TiXmlUnknown : public TiXmlNode -{ -public: - TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {} - virtual ~TiXmlUnknown() {} - - TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) { copy.CopyTo( this ); } - TiXmlUnknown& operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); return *this; } - - /// Creates a copy of this Unknown and returns it. - virtual TiXmlNode* Clone() const; - // Print this Unknown to a FILE stream. - virtual void Print( FileStream& stream, int depth ) const; - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected: - void CopyTo( TiXmlUnknown* target ) const; - - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - -}; - - -/** Always the top level node. A document binds together all the - XML pieces. It can be saved, loaded, and printed to the screen. - The 'value' of a document node is the xml file name. -*/ -class TiXmlDocument : public TiXmlNode -{ -public: - /// Create an empty document, that has no name. - TiXmlDocument(); - /// Create a document with a name. The name of the document is also the filename of the xml. - TiXmlDocument( const char * documentName ); - - #ifdef TIXML_USE_STL - /// Constructor. - TiXmlDocument( const std::string& documentName ); - #endif - - TiXmlDocument( const TiXmlDocument& copy ); - TiXmlDocument& operator=( const TiXmlDocument& copy ); - - virtual ~TiXmlDocument() {} - - /** Load a file using the current document value. - Returns true if successful. Will delete any existing - document data before loading. - */ - bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the current document value. Returns true if successful. - bool SaveFile() const; - /// Load a file using the given filename. Returns true if successful. - bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the given filename. Returns true if successful. - bool SaveFile( const char * filename ) const; - /** Load a file using the given FILE*. Returns true if successful. Note that this method - doesn't stream - the entire object pointed at by the FILE* - will be interpreted as an XML file. TinyXML doesn't stream in XML from the current - file location. Streaming may be added in the future. - */ - bool LoadFile( FileStream& stream, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the given FILE*. Returns true if successful. - bool SaveFile( FileStream& stream ) const; - - #ifdef TIXML_USE_STL - bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. - { - return LoadFile( filename.c_str(), encoding ); - } - bool SaveFile( const std::string& filename ) const ///< STL std::string version. - { - return SaveFile( filename.c_str() ); - } - #endif - - /** Parse the given null terminated block of xml data. Passing in an encoding to this - method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml - to use that encoding, regardless of what TinyXml might otherwise try to detect. - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - - /** Get the root element -- the only top level element -- of the document. - In well formed XML, there should only be one. TinyXml is tolerant of - multiple elements at the document level. - */ - const TiXmlElement* RootElement() const { return FirstChildElement(); } - TiXmlElement* RootElement() { return FirstChildElement(); } - - /** If an error occurs, Error will be set to true. Also, - - The ErrorId() will contain the integer identifier of the error (not generally useful) - - The ErrorDesc() method will return the name of the error. (very useful) - - The ErrorRow() and ErrorCol() will return the location of the error (if known) - */ - bool Error() const { return error; } - - /// Contains a textual (english) description of the error if one occurs. - const char * ErrorDesc() const { return errorDesc.c_str (); } - - /** Generally, you probably want the error string ( ErrorDesc() ). But if you - prefer the ErrorId, this function will fetch it. - */ - int ErrorId() const { return errorId; } - - /** Returns the location (if known) of the error. The first column is column 1, - and the first row is row 1. A value of 0 means the row and column wasn't applicable - (memory errors, for example, have no row/column) or the parser lost the error. (An - error in the error reporting, in that case.) - - @sa SetTabSize, Row, Column - */ - int ErrorRow() const { return errorLocation.row+1; } - int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() - - /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) - to report the correct values for row and column. It does not change the output - or input in any way. - - By calling this method, with a tab size - greater than 0, the row and column of each node and attribute is stored - when the file is loaded. Very useful for tracking the DOM back in to - the source file. - - The tab size is required for calculating the location of nodes. If not - set, the default of 4 is used. The tabsize is set per document. Setting - the tabsize to 0 disables row/column tracking. - - Note that row and column tracking is not supported when using operator>>. - - The tab size needs to be enabled before the parse or load. Correct usage: - @verbatim - TiXmlDocument doc; - doc.SetTabSize( 8 ); - doc.Load( "myfile.xml" ); - @endverbatim - - @sa Row, Column - */ - void SetTabSize( int _tabsize ) { tabsize = _tabsize; } - - int TabSize() const { return tabsize; } - - /** If you have handled the error, it can be reset with this call. The error - state is automatically cleared if you Parse a new XML block. - */ - void ClearError() { error = false; - errorId = 0; - errorDesc = ""; - errorLocation.row = errorLocation.col = 0; - //errorLocation.last = 0; - } - - /* Write the document to a string using formatted printing ("pretty print"). This - will allocate a character array (new char[]) and return it as a pointer. The - calling code pust call delete[] on the return char* to avoid a memory leak. - */ - //char* PrintToMemory() const; - - /// Print this Document to a FILE stream. - virtual void Print( FileStream& stream, int depth = 0 ) const; - - // [internal use] - void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); - - virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected : - // [internal use] - virtual TiXmlNode* Clone() const; - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - void CopyTo( TiXmlDocument* target ) const; - - bool error; - int errorId; - TIXML_STRING errorDesc; - int tabsize; - TiXmlCursor errorLocation; - bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. -}; - - -/** - A TiXmlHandle is a class that wraps a node pointer with null checks; this is - an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml - DOM structure. It is a separate utility class. - - Take an example: - @verbatim - - - - - - - @endverbatim - - Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very - easy to write a *lot* of code that looks like: - - @verbatim - TiXmlElement* root = document.FirstChildElement( "Document" ); - if ( root ) - { - TiXmlElement* element = root->FirstChildElement( "Element" ); - if ( element ) - { - TiXmlElement* child = element->FirstChildElement( "Child" ); - if ( child ) - { - TiXmlElement* child2 = child->NextSiblingElement( "Child" ); - if ( child2 ) - { - // Finally do something useful. - @endverbatim - - And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity - of such code. A TiXmlHandle checks for null pointers so it is perfectly safe - and correct to use: - - @verbatim - TiXmlHandle docHandle( &document ); - TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); - if ( child2 ) - { - // do something useful - @endverbatim - - Which is MUCH more concise and useful. - - It is also safe to copy handles - internally they are nothing more than node pointers. - @verbatim - TiXmlHandle handleCopy = handle; - @endverbatim - - What they should not be used for is iteration: - - @verbatim - int i=0; - while ( true ) - { - TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); - if ( !child ) - break; - // do something - ++i; - } - @endverbatim - - It seems reasonable, but it is in fact two embedded while loops. The Child method is - a linear walk to find the element, so this code would iterate much more than it needs - to. Instead, prefer: - - @verbatim - TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); - - for( child; child; child=child->NextSiblingElement() ) - { - // do something - } - @endverbatim -*/ -class TiXmlHandle -{ -public: - /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. - TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } - /// Copy constructor - TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } - TiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; } - - /// Return a handle to the first child node. - TiXmlHandle FirstChild() const; - /// Return a handle to the first child node with the given name. - TiXmlHandle FirstChild( const char * value ) const; - /// Return a handle to the first child element. - TiXmlHandle FirstChildElement() const; - /// Return a handle to the first child element with the given name. - TiXmlHandle FirstChildElement( const char * value ) const; - - /** Return a handle to the "index" child with the given name. - The first child is 0, the second 1, etc. - */ - TiXmlHandle Child( const char* value, int index ) const; - /** Return a handle to the "index" child. - The first child is 0, the second 1, etc. - */ - TiXmlHandle Child( int index ) const; - /** Return a handle to the "index" child element with the given name. - The first child element is 0, the second 1, etc. Note that only TiXmlElements - are indexed: other types are not counted. - */ - TiXmlHandle ChildElement( const char* value, int index ) const; - /** Return a handle to the "index" child element. - The first child element is 0, the second 1, etc. Note that only TiXmlElements - are indexed: other types are not counted. - */ - TiXmlHandle ChildElement( int index ) const; - - #ifdef TIXML_USE_STL - TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } - TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } - - TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } - TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } - #endif - - /** Return the handle as a TiXmlNode. This may return null. - */ - TiXmlNode* ToNode() const { return node; } - /** Return the handle as a TiXmlElement. This may return null. - */ - TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } - /** Return the handle as a TiXmlText. This may return null. - */ - TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } - /** Return the handle as a TiXmlUnknown. This may return null. - */ - TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } - - /** @deprecated use ToNode. - Return the handle as a TiXmlNode. This may return null. - */ - TiXmlNode* Node() const { return ToNode(); } - /** @deprecated use ToElement. - Return the handle as a TiXmlElement. This may return null. - */ - TiXmlElement* Element() const { return ToElement(); } - /** @deprecated use ToText() - Return the handle as a TiXmlText. This may return null. - */ - TiXmlText* Text() const { return ToText(); } - /** @deprecated use ToUnknown() - Return the handle as a TiXmlUnknown. This may return null. - */ - TiXmlUnknown* Unknown() const { return ToUnknown(); } - -private: - TiXmlNode* node; -}; - - - -#ifdef _MSC_VER -#pragma warning( pop ) -#endif - -#endif diff --git a/Engine/source/persistence/_tinyXML/tinyxmlerror.cpp b/Engine/source/persistence/_tinyXML/tinyxmlerror.cpp deleted file mode 100644 index 538c21d0bd..0000000000 --- a/Engine/source/persistence/_tinyXML/tinyxmlerror.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* -www.sourceforge.net/projects/tinyxml -Original code (2.0 and earlier )copyright (c) 2000-2006 Lee Thomason (www.grinninglizard.com) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - -#include "tinyxml.h" - -// The goal of the seperate error file is to make the first -// step towards localization. tinyxml (currently) only supports -// english error messages, but the could now be translated. -// -// It also cleans up the code a bit. -// - -const char* TiXmlBase::errorString[ TiXmlBase::TIXML_ERROR_STRING_COUNT ] = -{ - "No error", - "Error", - "Failed to open file", - "Error parsing Element.", - "Failed to read Element name", - "Error reading Element value.", - "Error reading Attributes.", - "Error: empty tag.", - "Error reading end tag.", - "Error parsing Unknown.", - "Error parsing Comment.", - "Error parsing Declaration.", - "Error document empty.", - "Error null (0) or unexpected EOF found in input stream.", - "Error parsing CDATA.", - "Error when TiXmlDocument added to document, because TiXmlDocument can only be at the root.", -}; diff --git a/Engine/source/persistence/_tinyXML/tinyxmlparser.cpp b/Engine/source/persistence/_tinyXML/tinyxmlparser.cpp deleted file mode 100644 index cdc0d19e62..0000000000 --- a/Engine/source/persistence/_tinyXML/tinyxmlparser.cpp +++ /dev/null @@ -1,1638 +0,0 @@ -/* -www.sourceforge.net/projects/tinyxml -Original code by Lee Thomason (www.grinninglizard.com) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - -#include -#include - -#include "tinyxml.h" - -//#define DEBUG_PARSER -#if defined( DEBUG_PARSER ) -# if defined( DEBUG ) && defined( _MSC_VER ) -# include -# define TIXML_LOG OutputDebugString -# else -# define TIXML_LOG printf -# endif -#endif - -// Note tha "PutString" hardcodes the same list. This -// is less flexible than it appears. Changing the entries -// or order will break putstring. -TiXmlBase::Entity TiXmlBase::entity[ TiXmlBase::NUM_ENTITY ] = -{ - { "&", 5, '&' }, - { "<", 4, '<' }, - { ">", 4, '>' }, - { """, 6, '\"' }, - { "'", 6, '\'' } -}; - -// Bunch of unicode info at: -// http://www.unicode.org/faq/utf_bom.html -// Including the basic of this table, which determines the #bytes in the -// sequence from the lead byte. 1 placed for invalid sequences -- -// although the result will be junk, pass it through as much as possible. -// Beware of the non-characters in UTF-8: -// ef bb bf (Microsoft "lead bytes") -// ef bf be -// ef bf bf - -const unsigned char TIXML_UTF_LEAD_0 = 0xefU; -const unsigned char TIXML_UTF_LEAD_1 = 0xbbU; -const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; - -const int TiXmlBase::utf8ByteTable[256] = -{ - // 0 1 2 3 4 5 6 7 8 9 a b c d e f - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x00 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x10 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x20 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x30 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x40 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x50 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x60 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x70 End of ASCII range - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x80 0x80 to 0xc1 invalid - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x90 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xa0 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0xb0 - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xc0 0xc2 to 0xdf 2 byte - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xd0 - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xe0 0xe0 to 0xef 3 byte - 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // 0xf0 0xf0 to 0xf4 4 byte, 0xf5 and higher invalid -}; - - -void TiXmlBase::ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ) -{ - const unsigned long BYTE_MASK = 0xBF; - const unsigned long BYTE_MARK = 0x80; - const unsigned long FIRST_BYTE_MARK[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; - - if (input < 0x80) - *length = 1; - else if ( input < 0x800 ) - *length = 2; - else if ( input < 0x10000 ) - *length = 3; - else if ( input < 0x200000 ) - *length = 4; - else - { *length = 0; return; } // This code won't covert this correctly anyway. - - output += *length; - - // Scary scary fall throughs. - switch (*length) - { - case 4: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); - input >>= 6; - case 3: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); - input >>= 6; - case 2: - --output; - *output = (char)((input | BYTE_MARK) & BYTE_MASK); - input >>= 6; - case 1: - --output; - *output = (char)(input | FIRST_BYTE_MARK[*length]); - } -} - - -/*static*/ int TiXmlBase::IsAlpha( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) -{ - // This will only work for low-ascii, everything else is assumed to be a valid - // letter. I'm not sure this is the best approach, but it is quite tricky trying - // to figure out alhabetical vs. not across encoding. So take a very - // conservative approach. - -// if ( encoding == TIXML_ENCODING_UTF8 ) -// { - if ( anyByte < 127 ) - return isalpha( anyByte ); - else - return 1; // What else to do? The unicode set is huge...get the english ones right. -// } -// else -// { -// return isalpha( anyByte ); -// } -} - - -/*static*/ int TiXmlBase::IsAlphaNum( unsigned char anyByte, TiXmlEncoding /*encoding*/ ) -{ - // This will only work for low-ascii, everything else is assumed to be a valid - // letter. I'm not sure this is the best approach, but it is quite tricky trying - // to figure out alhabetical vs. not across encoding. So take a very - // conservative approach. - -// if ( encoding == TIXML_ENCODING_UTF8 ) -// { - if ( anyByte < 127 ) - return isalnum( anyByte ); - else - return 1; // What else to do? The unicode set is huge...get the english ones right. -// } -// else -// { -// return isalnum( anyByte ); -// } -} - - -class TiXmlParsingData -{ - friend class TiXmlDocument; - public: - void Stamp( const char* now, TiXmlEncoding encoding ); - - const TiXmlCursor& Cursor() const { return cursor; } - - private: - // Only used by the document! - TiXmlParsingData( const char* start, int _tabsize, int row, int col ) - { - assert( start ); - stamp = start; - tabsize = _tabsize; - cursor.row = row; - cursor.col = col; - } - - TiXmlCursor cursor; - const char* stamp; - int tabsize; -}; - - -void TiXmlParsingData::Stamp( const char* now, TiXmlEncoding encoding ) -{ - assert( now ); - - // Do nothing if the tabsize is 0. - if ( tabsize < 1 ) - { - return; - } - - // Get the current row, column. - int row = cursor.row; - int col = cursor.col; - const char* p = stamp; - assert( p ); - - while ( p < now ) - { - // Treat p as unsigned, so we have a happy compiler. - const unsigned char* pU = (const unsigned char*)p; - - // Code contributed by Fletcher Dunn: (modified by lee) - switch (*pU) { - case 0: - // We *should* never get here, but in case we do, don't - // advance past the terminating null character, ever - return; - - case '\r': - // bump down to the next line - ++row; - col = 0; - // Eat the character - ++p; - - // Check for \r\n sequence, and treat this as a single character - if (*p == '\n') { - ++p; - } - break; - - case '\n': - // bump down to the next line - ++row; - col = 0; - - // Eat the character - ++p; - - // Check for \n\r sequence, and treat this as a single - // character. (Yes, this bizarre thing does occur still - // on some arcane platforms...) - if (*p == '\r') { - ++p; - } - break; - - case '\t': - // Eat the character - ++p; - - // Skip to next tab stop - col = (col / tabsize + 1) * tabsize; - break; - - case TIXML_UTF_LEAD_0: - if ( encoding == TIXML_ENCODING_UTF8 ) - { - if ( *(p+1) && *(p+2) ) - { - // In these cases, don't advance the column. These are - // 0-width spaces. - if ( *(pU+1)==TIXML_UTF_LEAD_1 && *(pU+2)==TIXML_UTF_LEAD_2 ) - p += 3; - else if ( *(pU+1)==0xbfU && *(pU+2)==0xbeU ) - p += 3; - else if ( *(pU+1)==0xbfU && *(pU+2)==0xbfU ) - p += 3; - else - { p +=3; ++col; } // A normal character. - } - } - else - { - ++p; - ++col; - } - break; - - default: - if ( encoding == TIXML_ENCODING_UTF8 ) - { - // Eat the 1 to 4 byte utf8 character. - int step = TiXmlBase::utf8ByteTable[*((const unsigned char*)p)]; - if ( step == 0 ) - step = 1; // Error case from bad encoding, but handle gracefully. - p += step; - - // Just advance one column, of course. - ++col; - } - else - { - ++p; - ++col; - } - break; - } - } - cursor.row = row; - cursor.col = col; - assert( cursor.row >= -1 ); - assert( cursor.col >= -1 ); - stamp = p; - assert( stamp ); -} - - -const char* TiXmlBase::SkipWhiteSpace( const char* p, TiXmlEncoding encoding ) -{ - if ( !p || !*p ) - { - return 0; - } - if ( encoding == TIXML_ENCODING_UTF8 ) - { - while ( *p ) - { - const unsigned char* pU = (const unsigned char*)p; - - // Skip the stupid Microsoft UTF-8 Byte order marks - if ( *(pU+0)==TIXML_UTF_LEAD_0 - && *(pU+1)==TIXML_UTF_LEAD_1 - && *(pU+2)==TIXML_UTF_LEAD_2 ) - { - p += 3; - continue; - } - else if(*(pU+0)==TIXML_UTF_LEAD_0 - && *(pU+1)==0xbfU - && *(pU+2)==0xbeU ) - { - p += 3; - continue; - } - else if(*(pU+0)==TIXML_UTF_LEAD_0 - && *(pU+1)==0xbfU - && *(pU+2)==0xbfU ) - { - p += 3; - continue; - } - - if ( IsWhiteSpace( *p ) ) // Still using old rules for white space. - ++p; - else - break; - } - } - else - { - while ( *p && IsWhiteSpace( *p ) ) - ++p; - } - - return p; -} - -#ifdef TIXML_USE_STL -/*static*/ bool TiXmlBase::StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ) -{ - for( ;; ) - { - if ( !in->good() ) return false; - - int c = in->peek(); - // At this scope, we can't get to a document. So fail silently. - if ( !IsWhiteSpace( c ) || c <= 0 ) - return true; - - *tag += (char) in->get(); - } -} - -/*static*/ bool TiXmlBase::StreamTo( std::istream * in, int character, TIXML_STRING * tag ) -{ - //assert( character > 0 && character < 128 ); // else it won't work in utf-8 - while ( in->good() ) - { - int c = in->peek(); - if ( c == character ) - return true; - if ( c <= 0 ) // Silent failure: can't get document at this scope - return false; - - in->get(); - *tag += (char) c; - } - return false; -} -#endif - -// One of TinyXML's more performance demanding functions. Try to keep the memory overhead down. The -// "assign" optimization removes over 10% of the execution time. -// -const char* TiXmlBase::ReadName( const char* p, TIXML_STRING * name, TiXmlEncoding encoding ) -{ - // Oddly, not supported on some comilers, - //name->clear(); - // So use this: - *name = ""; - assert( p ); - - // Names start with letters or underscores. - // Of course, in unicode, tinyxml has no idea what a letter *is*. The - // algorithm is generous. - // - // After that, they can be letters, underscores, numbers, - // hyphens, or colons. (Colons are valid ony for namespaces, - // but tinyxml can't tell namespaces from names.) - if ( p && *p - && ( IsAlpha( (unsigned char) *p, encoding ) || *p == '_' ) ) - { - const char* start = p; - while( p && *p - && ( IsAlphaNum( (unsigned char ) *p, encoding ) - || *p == '_' - || *p == '-' - || *p == '.' - || *p == ':' ) ) - { - //(*name) += *p; // expensive - ++p; - } - if ( p-start > 0 ) { - name->assign( start, p-start ); - } - return p; - } - return 0; -} - -const char* TiXmlBase::GetEntity( const char* p, char* value, int* length, TiXmlEncoding encoding ) -{ - // Presume an entity, and pull it out. - TIXML_STRING ent; - int i; - *length = 0; - - if ( *(p+1) && *(p+1) == '#' && *(p+2) ) - { - unsigned long ucs = 0; - ptrdiff_t delta = 0; - unsigned mult = 1; - - if ( *(p+2) == 'x' ) - { - // Hexadecimal. - if ( !*(p+3) ) return 0; - - const char* q = p+3; - q = strchr( q, ';' ); - - if ( !q || !*q ) return 0; - - delta = q-p; - --q; - - while ( *q != 'x' ) - { - if ( *q >= '0' && *q <= '9' ) - ucs += mult * (*q - '0'); - else if ( *q >= 'a' && *q <= 'f' ) - ucs += mult * (*q - 'a' + 10); - else if ( *q >= 'A' && *q <= 'F' ) - ucs += mult * (*q - 'A' + 10 ); - else - return 0; - mult *= 16; - --q; - } - } - else - { - // Decimal. - if ( !*(p+2) ) return 0; - - const char* q = p+2; - q = strchr( q, ';' ); - - if ( !q || !*q ) return 0; - - delta = q-p; - --q; - - while ( *q != '#' ) - { - if ( *q >= '0' && *q <= '9' ) - ucs += mult * (*q - '0'); - else - return 0; - mult *= 10; - --q; - } - } - if ( encoding == TIXML_ENCODING_UTF8 ) - { - // convert the UCS to UTF-8 - ConvertUTF32ToUTF8( ucs, value, length ); - } - else - { - *value = (char)ucs; - *length = 1; - } - return p + delta + 1; - } - - // Now try to match it. - for( i=0; iappend( cArr, len ); - } - } - else - { - bool whitespace = false; - - // Remove leading white space: - p = SkipWhiteSpace( p, encoding ); - while ( p && *p - && !StringEqual( p, endTag, caseInsensitive, encoding ) ) - { - if ( *p == '\r' || *p == '\n' ) - { - whitespace = true; - ++p; - } - else if ( IsWhiteSpace( *p ) ) - { - whitespace = true; - ++p; - } - else - { - // If we've found whitespace, add it before the - // new character. Any whitespace just becomes a space. - if ( whitespace ) - { - (*text) += ' '; - whitespace = false; - } - int len; - char cArr[4] = { 0, 0, 0, 0 }; - p = GetChar( p, cArr, &len, encoding ); - if ( len == 1 ) - (*text) += cArr[0]; // more efficient - else - text->append( cArr, len ); - } - } - } - if ( p && *p ) - p += strlen( endTag ); - return ( p && *p ) ? p : 0; -} - -#ifdef TIXML_USE_STL - -void TiXmlDocument::StreamIn( std::istream * in, TIXML_STRING * tag ) -{ - // The basic issue with a document is that we don't know what we're - // streaming. Read something presumed to be a tag (and hope), then - // identify it, and call the appropriate stream method on the tag. - // - // This "pre-streaming" will never read the closing ">" so the - // sub-tag can orient itself. - - if ( !StreamTo( in, '<', tag ) ) - { - SetError( TIXML_ERROR_PARSING_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); - return; - } - - while ( in->good() ) - { - int tagIndex = (int) tag->length(); - while ( in->good() && in->peek() != '>' ) - { - int c = in->get(); - if ( c <= 0 ) - { - SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); - break; - } - (*tag) += (char) c; - } - - if ( in->good() ) - { - // We now have something we presume to be a node of - // some sort. Identify it, and call the node to - // continue streaming. - TiXmlNode* node = Identify( tag->c_str() + tagIndex, TIXML_DEFAULT_ENCODING ); - - if ( node ) - { - node->StreamIn( in, tag ); - bool isElement = node->ToElement() != 0; - delete node; - node = 0; - - // If this is the root element, we're done. Parsing will be - // done by the >> operator. - if ( isElement ) - { - return; - } - } - else - { - SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); - return; - } - } - } - // We should have returned sooner. - SetError( TIXML_ERROR, 0, 0, TIXML_ENCODING_UNKNOWN ); -} - -#endif - -const char* TiXmlDocument::Parse( const char* p, TiXmlParsingData* prevData, TiXmlEncoding encoding ) -{ - ClearError(); - - // Parse away, at the document level. Since a document - // contains nothing but other tags, most of what happens - // here is skipping white space. - if ( !p || !*p ) - { - SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); - return 0; - } - - // Note that, for a document, this needs to come - // before the while space skip, so that parsing - // starts from the pointer we are given. - location.Clear(); - if ( prevData ) - { - location.row = prevData->cursor.row; - location.col = prevData->cursor.col; - } - else - { - location.row = 0; - location.col = 0; - } - TiXmlParsingData data( p, TabSize(), location.row, location.col ); - location = data.Cursor(); - - if ( encoding == TIXML_ENCODING_UNKNOWN ) - { - // Check for the Microsoft UTF-8 lead bytes. - const unsigned char* pU = (const unsigned char*)p; - if ( *(pU+0) && *(pU+0) == TIXML_UTF_LEAD_0 - && *(pU+1) && *(pU+1) == TIXML_UTF_LEAD_1 - && *(pU+2) && *(pU+2) == TIXML_UTF_LEAD_2 ) - { - encoding = TIXML_ENCODING_UTF8; - useMicrosoftBOM = true; - } - } - - p = SkipWhiteSpace( p, encoding ); - if ( !p ) - { - SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, TIXML_ENCODING_UNKNOWN ); - return 0; - } - - while ( p && *p ) - { - TiXmlNode* node = Identify( p, encoding ); - if ( node ) - { - p = node->Parse( p, &data, encoding ); - LinkEndChild( node ); - } - else - { - break; - } - - // Did we get encoding info? - if ( encoding == TIXML_ENCODING_UNKNOWN - && node->ToDeclaration() ) - { - TiXmlDeclaration* dec = node->ToDeclaration(); - const char* enc = dec->Encoding(); - assert( enc ); - - if ( *enc == 0 ) - encoding = TIXML_ENCODING_UTF8; - else if ( StringEqual( enc, "UTF-8", true, TIXML_ENCODING_UNKNOWN ) ) - encoding = TIXML_ENCODING_UTF8; - else if ( StringEqual( enc, "UTF8", true, TIXML_ENCODING_UNKNOWN ) ) - encoding = TIXML_ENCODING_UTF8; // incorrect, but be nice - else - encoding = TIXML_ENCODING_LEGACY; - } - - p = SkipWhiteSpace( p, encoding ); - } - - // Was this empty? - if ( !firstChild ) { - SetError( TIXML_ERROR_DOCUMENT_EMPTY, 0, 0, encoding ); - return 0; - } - - // All is well. - return p; -} - -void TiXmlDocument::SetError( int err, const char* pError, TiXmlParsingData* data, TiXmlEncoding encoding ) -{ - // The first error in a chain is more accurate - don't set again! - if ( error ) - return; - - assert( err > 0 && err < TIXML_ERROR_STRING_COUNT ); - error = true; - errorId = err; - errorDesc = errorString[ errorId ]; - - errorLocation.Clear(); - if ( pError && data ) - { - data->Stamp( pError, encoding ); - errorLocation = data->Cursor(); - } -} - - -TiXmlNode* TiXmlNode::Identify( const char* p, TiXmlEncoding encoding ) -{ - TiXmlNode* returnNode = 0; - - p = SkipWhiteSpace( p, encoding ); - if( !p || !*p || *p != '<' ) - { - return 0; - } - - p = SkipWhiteSpace( p, encoding ); - - if ( !p || !*p ) - { - return 0; - } - - // What is this thing? - // - Elements start with a letter or underscore, but xml is reserved. - // - Comments: "; - - if ( !StringEqual( p, startTag, false, encoding ) ) - { - if ( document ) - document->SetError( TIXML_ERROR_PARSING_COMMENT, p, data, encoding ); - return 0; - } - p += strlen( startTag ); - - // [ 1475201 ] TinyXML parses entities in comments - // Oops - ReadText doesn't work, because we don't want to parse the entities. - // p = ReadText( p, &value, false, endTag, false, encoding ); - // - // from the XML spec: - /* - [Definition: Comments may appear anywhere in a document outside other markup; in addition, - they may appear within the document type declaration at places allowed by the grammar. - They are not part of the document's character data; an XML processor MAY, but need not, - make it possible for an application to retrieve the text of comments. For compatibility, - the string "--" (double-hyphen) MUST NOT occur within comments.] Parameter entity - references MUST NOT be recognized within comments. - - An example of a comment: - - - */ - - value = ""; - // Keep all the white space. - while ( p && *p && !StringEqual( p, endTag, false, encoding ) ) - { - value.append( p, 1 ); - ++p; - } - if ( p && *p ) - p += strlen( endTag ); - - return p; -} - - -const char* TiXmlAttribute::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) -{ - p = SkipWhiteSpace( p, encoding ); - if ( !p || !*p ) return 0; - - if ( data ) - { - data->Stamp( p, encoding ); - location = data->Cursor(); - } - // Read the name, the '=' and the value. - const char* pErr = p; - p = ReadName( p, &name, encoding ); - if ( !p || !*p ) - { - if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, pErr, data, encoding ); - return 0; - } - p = SkipWhiteSpace( p, encoding ); - if ( !p || !*p || *p != '=' ) - { - if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); - return 0; - } - - ++p; // skip '=' - p = SkipWhiteSpace( p, encoding ); - if ( !p || !*p ) - { - if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); - return 0; - } - - const char* end; - const char SINGLE_QUOTE = '\''; - const char DOUBLE_QUOTE = '\"'; - - if ( *p == SINGLE_QUOTE ) - { - ++p; - end = "\'"; // single quote in string - p = ReadText( p, &value, false, end, false, encoding ); - } - else if ( *p == DOUBLE_QUOTE ) - { - ++p; - end = "\""; // double quote in string - p = ReadText( p, &value, false, end, false, encoding ); - } - else - { - // All attribute values should be in single or double quotes. - // But this is such a common error that the parser will try - // its best, even without them. - value = ""; - while ( p && *p // existence - && !IsWhiteSpace( *p ) // whitespace - && *p != '/' && *p != '>' ) // tag end - { - if ( *p == SINGLE_QUOTE || *p == DOUBLE_QUOTE ) { - // [ 1451649 ] Attribute values with trailing quotes not handled correctly - // We did not have an opening quote but seem to have a - // closing one. Give up and throw an error. - if ( document ) document->SetError( TIXML_ERROR_READING_ATTRIBUTES, p, data, encoding ); - return 0; - } - value += *p; - ++p; - } - } - return p; -} - -#ifdef TIXML_USE_STL -void TiXmlText::StreamIn( std::istream * in, TIXML_STRING * tag ) -{ - while ( in->good() ) - { - int c = in->peek(); - if ( !cdata && (c == '<' ) ) - { - return; - } - if ( c <= 0 ) - { - TiXmlDocument* document = GetDocument(); - if ( document ) - document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); - return; - } - - (*tag) += (char) c; - in->get(); // "commits" the peek made above - - if ( cdata && c == '>' && tag->size() >= 3 ) { - size_t len = tag->size(); - if ( (*tag)[len-2] == ']' && (*tag)[len-3] == ']' ) { - // terminator of cdata. - return; - } - } - } -} -#endif - -const char* TiXmlText::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ) -{ - value = ""; - TiXmlDocument* document = GetDocument(); - - if ( data ) - { - data->Stamp( p, encoding ); - location = data->Cursor(); - } - - const char* const startTag = ""; - - if ( cdata || StringEqual( p, startTag, false, encoding ) ) - { - cdata = true; - - if ( !StringEqual( p, startTag, false, encoding ) ) - { - if ( document ) - document->SetError( TIXML_ERROR_PARSING_CDATA, p, data, encoding ); - return 0; - } - p += strlen( startTag ); - - // Keep all the white space, ignore the encoding, etc. - while ( p && *p - && !StringEqual( p, endTag, false, encoding ) - ) - { - value += *p; - ++p; - } - - TIXML_STRING dummy; - p = ReadText( p, &dummy, false, endTag, false, encoding ); - return p; - } - else - { - bool ignoreWhite = true; - - const char* end = "<"; - p = ReadText( p, &value, ignoreWhite, end, false, encoding ); - if ( p && *p ) - return p-1; // don't truncate the '<' - return 0; - } -} - -#ifdef TIXML_USE_STL -void TiXmlDeclaration::StreamIn( std::istream * in, TIXML_STRING * tag ) -{ - while ( in->good() ) - { - int c = in->get(); - if ( c <= 0 ) - { - TiXmlDocument* document = GetDocument(); - if ( document ) - document->SetError( TIXML_ERROR_EMBEDDED_NULL, 0, 0, TIXML_ENCODING_UNKNOWN ); - return; - } - (*tag) += (char) c; - - if ( c == '>' ) - { - // All is well. - return; - } - } -} -#endif - -const char* TiXmlDeclaration::Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding _encoding ) -{ - p = SkipWhiteSpace( p, _encoding ); - // Find the beginning, find the end, and look for - // the stuff in-between. - TiXmlDocument* document = GetDocument(); - if ( !p || !*p || !StringEqual( p, "SetError( TIXML_ERROR_PARSING_DECLARATION, 0, 0, _encoding ); - return 0; - } - if ( data ) - { - data->Stamp( p, _encoding ); - location = data->Cursor(); - } - p += 5; - - version = ""; - encoding = ""; - standalone = ""; - - while ( p && *p ) - { - if ( *p == '>' ) - { - ++p; - return p; - } - - p = SkipWhiteSpace( p, _encoding ); - if ( StringEqual( p, "version", true, _encoding ) ) - { - TiXmlAttribute attrib; - p = attrib.Parse( p, data, _encoding ); - version = attrib.Value(); - } - else if ( StringEqual( p, "encoding", true, _encoding ) ) - { - TiXmlAttribute attrib; - p = attrib.Parse( p, data, _encoding ); - encoding = attrib.Value(); - } - else if ( StringEqual( p, "standalone", true, _encoding ) ) - { - TiXmlAttribute attrib; - p = attrib.Parse( p, data, _encoding ); - standalone = attrib.Value(); - } - else - { - // Read over whatever it is. - while( p && *p && *p != '>' && !IsWhiteSpace( *p ) ) - ++p; - } - } - return 0; -} - -bool TiXmlText::Blank() const -{ - for ( unsigned i=0; i Date: Tue, 13 Oct 2015 18:12:19 -0500 Subject: [PATCH 058/324] shadow caching SPECIAL NOTE: highly suggest https://github.com/GarageGames/Torque3D/pull/1441 or a variation thereof to prevent debug spew and false-postives for occlusion results. With significant research, development and prototyping assistance from both @andr3wmac (shaders and partial hook work), and @LuisAntonRebollo (additional culling) System operates as follows: 1) materials are given an additional castDynamicShadows boolean entry. (Default at time of writing is true by request. Personal usage at time of writing defaults to false. value is default-initialized in materialDefinition.cpp. script/gui exposed) 2) lights are given a staticRefreshFreq and dynamicRefreshFreq (in milliseconds). script/gui exposed 3) materials are (effectively) sorted into dynamic and static shadowmap render lists based on flag. (see shadowMapPass.cpp) 4) initial shadowmaps are generated for each light and 'list'. 5) as each refreshFreq times out, the relevant shadowmap for a given light is refreshed. Special notes: dynamicRefreshFreq for all lights is set to a (script exposed) 8MS refresh timer. StaticRefreshFreq for the lions share of lights defaults to 250 MS (1/4 of a second) scattersky's embedded light, which is intended to operate in a mobile manner, defaults to 8 to reiterate, these are all customizable per-light via script/inspector gui in the case of alternate project needs. --- Engine/source/T3D/lightBase.cpp | 8 + Engine/source/T3D/lightBase.h | 3 +- Engine/source/T3D/lightDescription.cpp | 10 + Engine/source/T3D/lightDescription.h | 2 + Engine/source/T3D/pointLight.cpp | 2 + Engine/source/T3D/spotLight.cpp | 2 + Engine/source/environment/scatterSky.cpp | 11 + Engine/source/environment/scatterSky.h | 2 + Engine/source/environment/sun.cpp | 15 +- Engine/source/environment/sun.h | 2 + Engine/source/forest/forestCell.cpp | 3 + Engine/source/forest/forestRender.cpp | 4 + .../advanced/advancedLightBinManager.cpp | 8 +- .../advanced/advancedLightBinManager.h | 1 + .../advanced/advancedLightManager.cpp | 70 +++++- Engine/source/lighting/lightInfo.cpp | 4 + Engine/source/lighting/lightInfo.h | 9 + .../lighting/shadowMap/lightShadowMap.cpp | 120 ++++++++--- .../lighting/shadowMap/lightShadowMap.h | 49 +++-- .../lighting/shadowMap/pssmLightShadowMap.cpp | 145 ++++++++++++- .../lighting/shadowMap/pssmLightShadowMap.h | 1 + .../lighting/shadowMap/shadowMapManager.cpp | 7 + .../lighting/shadowMap/shadowMapManager.h | 3 + .../lighting/shadowMap/shadowMapPass.cpp | 94 ++++++-- .../source/lighting/shadowMap/shadowMapPass.h | 17 ++ .../source/materials/baseMaterialDefinition.h | 1 + .../source/materials/materialDefinition.cpp | 6 +- Engine/source/materials/materialDefinition.h | 5 +- .../materials/processedCustomMaterial.cpp | 8 + Engine/source/math/mPoint2.h | 8 + Engine/source/math/mathUtils.cpp | 51 +++++ Engine/source/math/mathUtils.h | 3 + .../scene/culling/sceneCullingState.cpp | 5 + .../source/scene/culling/sceneCullingState.h | 18 ++ .../client/lighting/advanced/shaders.cs | 22 +- .../lighting/advanced/gl/pointLightP.glsl | 22 +- .../lighting/advanced/gl/spotLightP.glsl | 24 ++- .../lighting/advanced/gl/vectorLightP.glsl | 202 ++++++++++++------ .../common/lighting/advanced/pointLightP.hlsl | 29 ++- .../common/lighting/advanced/softShadow.hlsl | 2 +- .../common/lighting/advanced/spotLightP.hlsl | 28 ++- .../lighting/advanced/vectorLightP.hlsl | 202 ++++++++++++------ .../gui/guiMaterialPropertiesWindow.ed.gui | 27 ++- .../scripts/materialEditor.ed.cs | 1 + .../client/lighting/advanced/shaders.cs | 22 +- .../lighting/advanced/gl/pointLightP.glsl | 15 +- .../lighting/advanced/gl/spotLightP.glsl | 19 +- .../lighting/advanced/gl/vectorLightP.glsl | 202 ++++++++++++------ .../common/lighting/advanced/pointLightP.hlsl | 24 ++- .../common/lighting/advanced/softShadow.hlsl | 2 +- .../common/lighting/advanced/spotLightP.hlsl | 23 +- .../lighting/advanced/vectorLightP.hlsl | 202 ++++++++++++------ .../gui/guiMaterialPropertiesWindow.ed.gui | 27 ++- .../scripts/materialEditor.ed.cs | 1 + 54 files changed, 1403 insertions(+), 390 deletions(-) diff --git a/Engine/source/T3D/lightBase.cpp b/Engine/source/T3D/lightBase.cpp index dd168a4835..8e351ed81f 100644 --- a/Engine/source/T3D/lightBase.cpp +++ b/Engine/source/T3D/lightBase.cpp @@ -60,6 +60,8 @@ LightBase::LightBase() mColor( ColorF::WHITE ), mBrightness( 1.0f ), mCastShadows( false ), + mStaticRefreshFreq( 250 ), + mDynamicRefreshFreq( 8 ), mPriority( 1.0f ), mAnimationData( NULL ), mFlareData( NULL ), @@ -90,6 +92,8 @@ void LightBase::initPersistFields() addField( "color", TypeColorF, Offset( mColor, LightBase ), "Changes the base color hue of the light." ); addField( "brightness", TypeF32, Offset( mBrightness, LightBase ), "Adjusts the lights power, 0 being off completely." ); addField( "castShadows", TypeBool, Offset( mCastShadows, LightBase ), "Enables/disabled shadow casts by this light." ); + addField( "staticRefreshFreq", TypeS32, Offset( mStaticRefreshFreq, LightBase ), "static shadow refresh rate (milliseconds)" ); + addField( "dynamicRefreshFreq", TypeS32, Offset( mDynamicRefreshFreq, LightBase ), "dynamic shadow refresh rate (milliseconds)" ); addField( "priority", TypeF32, Offset( mPriority, LightBase ), "Used for sorting of lights by the light manager. " "Priority determines if a light has a stronger effect than, those with a lower value" ); @@ -277,6 +281,8 @@ U32 LightBase::packUpdate( NetConnection *conn, U32 mask, BitStream *stream ) stream->write( mBrightness ); stream->writeFlag( mCastShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( mPriority ); @@ -322,6 +328,8 @@ void LightBase::unpackUpdate( NetConnection *conn, BitStream *stream ) stream->read( &mColor ); stream->read( &mBrightness ); mCastShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &mPriority ); diff --git a/Engine/source/T3D/lightBase.h b/Engine/source/T3D/lightBase.h index a01926edbe..2501c4ca89 100644 --- a/Engine/source/T3D/lightBase.h +++ b/Engine/source/T3D/lightBase.h @@ -56,7 +56,8 @@ class LightBase : public SceneObject, public ISceneLight, public virtual ITickab F32 mBrightness; bool mCastShadows; - + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; F32 mPriority; LightInfo *mLight; diff --git a/Engine/source/T3D/lightDescription.cpp b/Engine/source/T3D/lightDescription.cpp index 919f4418dc..d88d2a682b 100644 --- a/Engine/source/T3D/lightDescription.cpp +++ b/Engine/source/T3D/lightDescription.cpp @@ -36,6 +36,8 @@ LightDescription::LightDescription() brightness( 1.0f ), range( 5.0f ), castShadows( false ), + mStaticRefreshFreq( 250 ), + mDynamicRefreshFreq( 8 ), animationData( NULL ), animationDataId( 0 ), animationPeriod( 1.0f ), @@ -94,6 +96,8 @@ void LightDescription::initPersistFields() addField( "brightness", TypeF32, Offset( brightness, LightDescription ), "Adjusts the lights power, 0 being off completely." ); addField( "range", TypeF32, Offset( range, LightDescription ), "Controls the size (radius) of the light" ); addField( "castShadows", TypeBool, Offset( castShadows, LightDescription ), "Enables/disabled shadow casts by this light." ); + addField( "staticRefreshFreq", TypeS32, Offset( mStaticRefreshFreq, LightDescription ), "static shadow refresh rate (milliseconds)" ); + addField( "dynamicRefreshFreq", TypeS32, Offset( mDynamicRefreshFreq, LightDescription ), "dynamic shadow refresh rate (milliseconds)" ); endGroup( "Light" ); @@ -153,6 +157,8 @@ void LightDescription::packData( BitStream *stream ) stream->write( brightness ); stream->write( range ); stream->writeFlag( castShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( animationPeriod ); stream->write( animationPhase ); @@ -181,6 +187,8 @@ void LightDescription::unpackData( BitStream *stream ) stream->read( &brightness ); stream->read( &range ); castShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &animationPeriod ); stream->read( &animationPhase ); @@ -200,6 +208,8 @@ void LightDescription::submitLight( LightState *state, const MatrixF &xfm, Light li->setRange( range ); li->setColor( color ); li->setCastShadows( castShadows ); + li->setStaticRefreshFreq(mStaticRefreshFreq); + li->setDynamicRefreshFreq(mDynamicRefreshFreq); li->setTransform( xfm ); if ( animationData ) diff --git a/Engine/source/T3D/lightDescription.h b/Engine/source/T3D/lightDescription.h index b24ff895a9..fda00ebc27 100644 --- a/Engine/source/T3D/lightDescription.h +++ b/Engine/source/T3D/lightDescription.h @@ -101,6 +101,8 @@ class LightDescription : public SimDataBlock F32 brightness; F32 range; bool castShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; LightAnimData *animationData; S32 animationDataId; diff --git a/Engine/source/T3D/pointLight.cpp b/Engine/source/T3D/pointLight.cpp index 4b2a9d983b..7376e8adc4 100644 --- a/Engine/source/T3D/pointLight.cpp +++ b/Engine/source/T3D/pointLight.cpp @@ -116,6 +116,8 @@ void PointLight::_conformLights() mLight->setBrightness( mBrightness ); mLight->setCastShadows( mCastShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); mLight->setPriority( mPriority ); // Update the bounds and scale to fit our light. diff --git a/Engine/source/T3D/spotLight.cpp b/Engine/source/T3D/spotLight.cpp index 65e4a72aca..1ec22cd481 100644 --- a/Engine/source/T3D/spotLight.cpp +++ b/Engine/source/T3D/spotLight.cpp @@ -122,6 +122,8 @@ void SpotLight::_conformLights() mLight->setColor( mColor ); mLight->setBrightness( mBrightness ); mLight->setCastShadows( mCastShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); mLight->setPriority( mPriority ); mOuterConeAngle = getMax( 0.01f, mOuterConeAngle ); diff --git a/Engine/source/environment/scatterSky.cpp b/Engine/source/environment/scatterSky.cpp index 3e2d2d890a..36ff48dfb0 100644 --- a/Engine/source/environment/scatterSky.cpp +++ b/Engine/source/environment/scatterSky.cpp @@ -151,6 +151,8 @@ ScatterSky::ScatterSky() mBrightness = 1.0f; mCastShadows = true; + mStaticRefreshFreq = 8; + mDynamicRefreshFreq = 8; mDirty = true; mLight = LightManager::createLightInfo(); @@ -271,6 +273,8 @@ void ScatterSky::_conformLights() mLight->setAmbient( mAmbientColor ); mLight->setColor( mSunColor ); mLight->setCastShadows( mCastShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); FogData fog = getSceneManager()->getFogData(); fog.color = mFogColor; @@ -381,6 +385,9 @@ void ScatterSky::initPersistFields() addField( "castShadows", TypeBool, Offset( mCastShadows, ScatterSky ), "Enables/disables shadows cast by objects due to ScatterSky light." ); + addField("staticRefreshFreq", TypeS32, Offset(mStaticRefreshFreq, ScatterSky), "static shadow refresh rate (milliseconds)"); + addField("dynamicRefreshFreq", TypeS32, Offset(mDynamicRefreshFreq, ScatterSky), "dynamic shadow refresh rate (milliseconds)"); + addField( "brightness", TypeF32, Offset( mBrightness, ScatterSky ), "The brightness of the ScatterSky's light object." ); @@ -487,6 +494,8 @@ U32 ScatterSky::packUpdate(NetConnection *con, U32 mask, BitStream *stream) stream->write( mBrightness ); stream->writeFlag( mCastShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( mFlareScale ); @@ -588,6 +597,8 @@ void ScatterSky::unpackUpdate(NetConnection *con, BitStream *stream) stream->read( &mBrightness ); mCastShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &mFlareScale ); diff --git a/Engine/source/environment/scatterSky.h b/Engine/source/environment/scatterSky.h index 66177851da..4164a3725d 100644 --- a/Engine/source/environment/scatterSky.h +++ b/Engine/source/environment/scatterSky.h @@ -207,6 +207,8 @@ class ScatterSky : public SceneObject, public ISceneLight LightInfo *mLight; bool mCastShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; bool mDirty; LightFlareData *mFlareData; diff --git a/Engine/source/environment/sun.cpp b/Engine/source/environment/sun.cpp index 45181a27b5..d79d923d61 100644 --- a/Engine/source/environment/sun.cpp +++ b/Engine/source/environment/sun.cpp @@ -66,6 +66,8 @@ Sun::Sun() mSunAzimuth = 0.0f; mSunElevation = 35.0f; mCastShadows = true; + mStaticRefreshFreq = 250; + mDynamicRefreshFreq = 8; mAnimateSun = false; mTotalTime = 0.0f; @@ -163,7 +165,10 @@ void Sun::initPersistFields() "Adjust the Sun's global contrast/intensity"); addField( "castShadows", TypeBool, Offset( mCastShadows, Sun ), - "Enables/disables shadows cast by objects due to Sun light"); + "Enables/disables shadows cast by objects due to Sun light"); + + addField("staticRefreshFreq", TypeS32, Offset(mStaticRefreshFreq, Sun), "static shadow refresh rate (milliseconds)"); + addField("dynamicRefreshFreq", TypeS32, Offset(mDynamicRefreshFreq, Sun), "dynamic shadow refresh rate (milliseconds)"); endGroup( "Lighting" ); @@ -220,7 +225,9 @@ U32 Sun::packUpdate(NetConnection *conn, U32 mask, BitStream *stream ) stream->write( mLightColor ); stream->write( mLightAmbient ); stream->write( mBrightness ); - stream->writeFlag( mCastShadows ); + stream->writeFlag( mCastShadows ); + stream->write(mStaticRefreshFreq); + stream->write(mDynamicRefreshFreq); stream->write( mFlareScale ); if ( stream->writeFlag( mFlareData ) ) @@ -254,6 +261,8 @@ void Sun::unpackUpdate( NetConnection *conn, BitStream *stream ) stream->read( &mLightAmbient ); stream->read( &mBrightness ); mCastShadows = stream->readFlag(); + stream->read(&mStaticRefreshFreq); + stream->read(&mDynamicRefreshFreq); stream->read( &mFlareScale ); if ( stream->readFlag() ) @@ -426,6 +435,8 @@ void Sun::_conformLights() // directional color are the same. bool castShadows = mLightColor != mLightAmbient && mCastShadows; mLight->setCastShadows( castShadows ); + mLight->setStaticRefreshFreq(mStaticRefreshFreq); + mLight->setDynamicRefreshFreq(mDynamicRefreshFreq); } void Sun::_initCorona() diff --git a/Engine/source/environment/sun.h b/Engine/source/environment/sun.h index d82c457684..27ce97ae6f 100644 --- a/Engine/source/environment/sun.h +++ b/Engine/source/environment/sun.h @@ -65,6 +65,8 @@ class Sun : public SceneObject, public ISceneLight F32 mEndElevation; bool mCastShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; LightInfo *mLight; diff --git a/Engine/source/forest/forestCell.cpp b/Engine/source/forest/forestCell.cpp index a2a4f36e62..b72d585e2e 100644 --- a/Engine/source/forest/forestCell.cpp +++ b/Engine/source/forest/forestCell.cpp @@ -118,6 +118,9 @@ S32 ForestCell::renderBatches( SceneRenderState *state, Frustum *culler ) if ( culler && culler->isCulled( mBatches[i]->getWorldBox() ) ) continue; + if( state->getCullingState().isOccludedWithExtraPlanesCull( mBatches[i]->getWorldBox() ) ) + continue; + mBatches[i]->render( state ); renderedItems += mBatches[i]->getItemCount(); } diff --git a/Engine/source/forest/forestRender.cpp b/Engine/source/forest/forestRender.cpp index 3fa2b30479..cae86da3fc 100644 --- a/Engine/source/forest/forestRender.cpp +++ b/Engine/source/forest/forestRender.cpp @@ -197,6 +197,10 @@ void Forest::prepRenderImage( SceneRenderState *state ) if ( smDisableImposters ) continue; + // if cell are to far for largest item, then skip out. + if( TSShapeInstance::smLastPixelSize < TSShapeInstance::smSmallestVisiblePixelSize ) + continue; + PROFILE_SCOPE(Forest_RenderBatches); // Keep track of how many cells were batched. diff --git a/Engine/source/lighting/advanced/advancedLightBinManager.cpp b/Engine/source/lighting/advanced/advancedLightBinManager.cpp index 1f0286dd31..dd71afeb0e 100644 --- a/Engine/source/lighting/advanced/advancedLightBinManager.cpp +++ b/Engine/source/lighting/advanced/advancedLightBinManager.cpp @@ -191,10 +191,11 @@ void AdvancedLightBinManager::addLight( LightInfo *light ) // Find a shadow map for this light, if it has one ShadowMapParams *lsp = light->getExtended(); LightShadowMap *lsm = lsp->getShadowMap(); + LightShadowMap *dynamicShadowMap = lsp->getShadowMap(true); // Get the right shadow type. ShadowType shadowType = ShadowType_None; - if ( light->getCastShadows() && + if ( light->getCastShadows() && lsm && lsm->hasShadowTex() && !ShadowMapPass::smDisableShadows ) shadowType = lsm->getShadowType(); @@ -203,6 +204,7 @@ void AdvancedLightBinManager::addLight( LightInfo *light ) LightBinEntry lEntry; lEntry.lightInfo = light; lEntry.shadowMap = lsm; + lEntry.dynamicShadowMap = dynamicShadowMap; lEntry.lightMaterial = _getLightMaterial( lightType, shadowType, lsp->hasCookieTex() ); if( lightType == LightInfo::Spot ) @@ -325,10 +327,12 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) setupSGData( sgData, state, curLightInfo ); curLightMat->setLightParameters( curLightInfo, state, worldToCameraXfm ); mShadowManager->setLightShadowMap( curEntry.shadowMap ); + mShadowManager->setLightDynamicShadowMap( curEntry.dynamicShadowMap ); // Let the shadow know we're about to render from it. if ( curEntry.shadowMap ) curEntry.shadowMap->preLightRender(); + if ( curEntry.dynamicShadowMap ) curEntry.dynamicShadowMap->preLightRender(); // Set geometry GFX->setVertexBuffer( curEntry.vertBuffer ); @@ -351,10 +355,12 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) // Tell it we're done rendering. if ( curEntry.shadowMap ) curEntry.shadowMap->postLightRender(); + if ( curEntry.dynamicShadowMap ) curEntry.dynamicShadowMap->postLightRender(); } // Set NULL for active shadow map (so nothing gets confused) mShadowManager->setLightShadowMap(NULL); + mShadowManager->setLightDynamicShadowMap(NULL); GFX->setVertexBuffer( NULL ); GFX->setPrimitiveBuffer( NULL ); diff --git a/Engine/source/lighting/advanced/advancedLightBinManager.h b/Engine/source/lighting/advanced/advancedLightBinManager.h index ee20648854..879d62cbbb 100644 --- a/Engine/source/lighting/advanced/advancedLightBinManager.h +++ b/Engine/source/lighting/advanced/advancedLightBinManager.h @@ -185,6 +185,7 @@ class AdvancedLightBinManager : public RenderTexTargetBinManager { LightInfo* lightInfo; LightShadowMap* shadowMap; + LightShadowMap* dynamicShadowMap; LightMaterialInfo* lightMaterial; GFXPrimitiveBuffer* primBuffer; GFXVertexBuffer* vertBuffer; diff --git a/Engine/source/lighting/advanced/advancedLightManager.cpp b/Engine/source/lighting/advanced/advancedLightManager.cpp index ef4446a403..d82f4f69c5 100644 --- a/Engine/source/lighting/advanced/advancedLightManager.cpp +++ b/Engine/source/lighting/advanced/advancedLightManager.cpp @@ -357,10 +357,13 @@ void AdvancedLightManager::setLightInfo( ProcessedMaterial *pmat, LightingShaderConstants *lsc = getLightingShaderConstants(shaderConsts); LightShadowMap *lsm = SHADOWMGR->getCurrentShadowMap(); + LightShadowMap *dynamicShadowMap = SHADOWMGR->getCurrentDynamicShadowMap(); LightInfo *light; - if ( lsm ) + if (lsm) light = lsm->getLightInfo(); + else if ( dynamicShadowMap ) + light = dynamicShadowMap->getLightInfo(); else { light = sgData.lights[0]; @@ -385,10 +388,11 @@ void AdvancedLightManager::setLightInfo( ProcessedMaterial *pmat, lsc->mLightInvRadiusSqSC, lsc->mLightSpotDirSC, lsc->mLightSpotAngleSC, - lsc->mLightSpotFalloffSC, + lsc->mLightSpotFalloffSC, shaderConsts ); - if ( lsm && light->getCastShadows() ) + // Static + if (lsm && light->getCastShadows()) { if ( lsc->mWorldToLightProjSC->isValid() ) shaderConsts->set( lsc->mWorldToLightProjSC, @@ -426,6 +430,46 @@ void AdvancedLightManager::setLightInfo( ProcessedMaterial *pmat, lsc->mViewToLightProjSC->getType() ); } } + + // Dynamic + if ( dynamicShadowMap ) + { + if ( lsc->mDynamicWorldToLightProjSC->isValid() ) + shaderConsts->set( lsc->mDynamicWorldToLightProjSC, + dynamicShadowMap->getWorldToLightProj(), + lsc->mDynamicWorldToLightProjSC->getType() ); + + if ( lsc->mDynamicViewToLightProjSC->isValid() ) + { + // TODO: Should probably cache these results and + // not do this mul here on every material that needs + // this transform. + + shaderConsts->set( lsc->mDynamicViewToLightProjSC, + dynamicShadowMap->getWorldToLightProj() * state->getCameraTransform(), + lsc->mDynamicViewToLightProjSC->getType() ); + } + + shaderConsts->setSafe( lsc->mShadowMapSizeSC, 1.0f / (F32)dynamicShadowMap->getTexSize() ); + + // Do this last so that overrides can properly override parameters previously set + dynamicShadowMap->setShaderParameters(shaderConsts, lsc); + } + else + { + if ( lsc->mDynamicViewToLightProjSC->isValid() ) + { + // TODO: Should probably cache these results and + // not do this mul here on every material that needs + // this transform. + MatrixF proj; + light->getWorldToLightProj( &proj ); + + shaderConsts->set( lsc->mDynamicViewToLightProjSC, + proj * state->getCameraTransform(), + lsc->mDynamicViewToLightProjSC->getType() ); + } + } } void AdvancedLightManager::registerGlobalLight(LightInfo *light, SimObject *obj) @@ -454,22 +498,34 @@ bool AdvancedLightManager::setTextureStage( const SceneData &sgData, ShaderConstHandles *handles ) { LightShadowMap* lsm = SHADOWMGR->getCurrentShadowMap(); + LightShadowMap* dynamicShadowMap = SHADOWMGR->getCurrentDynamicShadowMap(); // Assign Shadowmap, if it exists LightingShaderConstants* lsc = getLightingShaderConstants(shaderConsts); if ( !lsc ) return false; - if ( lsm && lsm->getLightInfo()->getCastShadows() ) - return lsm->setTextureStage( currTexFlag, lsc ); - - if ( currTexFlag == Material::DynamicLight ) { + // Static + if ( lsm && lsm->getLightInfo()->getCastShadows() ) + return lsm->setTextureStage( currTexFlag, lsc ); + S32 reg = lsc->mShadowMapSC->getSamplerRegister(); if ( reg != -1 ) GFX->setTexture( reg, GFXTexHandle::ONE ); + return true; + } else if ( currTexFlag == Material::DynamicShadowMap ) + { + // Dynamic + if ( dynamicShadowMap ) + return dynamicShadowMap->setTextureStage( currTexFlag, lsc ); + + S32 reg = lsc->mDynamicShadowMapSC->getSamplerRegister(); + if ( reg != -1 ) + GFX->setTexture( reg, GFXTexHandle::ONE ); + return true; } else if ( currTexFlag == Material::DynamicLightMask ) diff --git a/Engine/source/lighting/lightInfo.cpp b/Engine/source/lighting/lightInfo.cpp index 1759ba24b6..2ea9588613 100644 --- a/Engine/source/lighting/lightInfo.cpp +++ b/Engine/source/lighting/lightInfo.cpp @@ -50,6 +50,8 @@ LightInfo::LightInfo() mOuterConeAngle( 90.0f ), mType( Vector ), mCastShadows( false ), + mStaticRefreshFreq( 250 ), + mDynamicRefreshFreq( 8 ), mPriority( 1.0f ), mScore( 0.0f ), mDebugRender( false ) @@ -72,6 +74,8 @@ void LightInfo::set( const LightInfo *light ) mOuterConeAngle = light->mOuterConeAngle; mType = light->mType; mCastShadows = light->mCastShadows; + mStaticRefreshFreq = light->mStaticRefreshFreq; + mDynamicRefreshFreq = light->mDynamicRefreshFreq; for ( U32 i=0; i < mExtended.size(); i++ ) { diff --git a/Engine/source/lighting/lightInfo.h b/Engine/source/lighting/lightInfo.h index 1dee8f0d0d..e485dba707 100644 --- a/Engine/source/lighting/lightInfo.h +++ b/Engine/source/lighting/lightInfo.h @@ -131,6 +131,9 @@ class LightInfo bool mCastShadows; + S32 mStaticRefreshFreq; + S32 mDynamicRefreshFreq; + ::Vector mExtended; /// The priority of this light used for @@ -190,6 +193,12 @@ class LightInfo bool getCastShadows() const { return mCastShadows; } void setCastShadows( bool castShadows ) { mCastShadows = castShadows; } + + S32 getStaticRefreshFreq() const { return mStaticRefreshFreq; } + void setStaticRefreshFreq(S32 _staticRefreshFreq) { mStaticRefreshFreq = _staticRefreshFreq; } + + S32 getDynamicRefreshFreq() const { return mDynamicRefreshFreq; } + void setDynamicRefreshFreq(S32 _dynamicRefreshFreq) { mDynamicRefreshFreq = _dynamicRefreshFreq; } void setPriority( F32 priority ) { mPriority = priority; } F32 getPriority() const { return mPriority; } diff --git a/Engine/source/lighting/shadowMap/lightShadowMap.cpp b/Engine/source/lighting/shadowMap/lightShadowMap.cpp index 3a85a0b409..53a6f4e8d1 100644 --- a/Engine/source/lighting/shadowMap/lightShadowMap.cpp +++ b/Engine/source/lighting/shadowMap/lightShadowMap.cpp @@ -92,14 +92,17 @@ LightShadowMap::LightShadowMap( LightInfo *light ) mVizQuery( NULL ), mWasOccluded( false ), mLastScreenSize( 0.0f ), - mLastPriority( 0.0f ) + mLastPriority( 0.0f ), + mIsDynamic( false ) { GFXTextureManager::addEventDelegate( this, &LightShadowMap::_onTextureEvent ); mTarget = GFX->allocRenderToTextureTarget(); mVizQuery = GFX->createOcclusionQuery(); - smShadowMaps.push_back( this ); + smShadowMaps.push_back(this); + mStaticRefreshTimer = PlatformTimer::create(); + mDynamicRefreshTimer = PlatformTimer::create(); } LightShadowMap::~LightShadowMap() @@ -268,11 +271,20 @@ GFXTextureObject* LightShadowMap::_getDepthTarget( U32 width, U32 height ) bool LightShadowMap::setTextureStage( U32 currTexFlag, LightingShaderConstants* lsc ) { - if ( currTexFlag == Material::DynamicLight ) + if ( currTexFlag == Material::DynamicLight && !isDynamic() ) { S32 reg = lsc->mShadowMapSC->getSamplerRegister(); - if ( reg != -1 ) - GFX->setTexture( reg, mShadowMapTex); + + if ( reg != -1 ) + GFX->setTexture( reg, mShadowMapTex); + + return true; + } else if ( currTexFlag == Material::DynamicShadowMap && isDynamic() ) + { + S32 reg = lsc->mDynamicShadowMapSC->getSamplerRegister(); + + if ( reg != -1 ) + GFX->setTexture( reg, mShadowMapTex); return true; } @@ -296,8 +308,18 @@ bool LightShadowMap::setTextureStage( U32 currTexFlag, LightingShaderConstants* } void LightShadowMap::render( RenderPassManager* renderPass, - const SceneRenderState *diffuseState ) + const SceneRenderState *diffuseState, + bool _dynamic) { + // control how often shadow maps are refreshed + if (!_dynamic && (mStaticRefreshTimer->getElapsedMs() < getLightInfo()->getStaticRefreshFreq())) + return; + mStaticRefreshTimer->reset(); + + if (_dynamic && (mDynamicRefreshTimer->getElapsedMs() < getLightInfo()->getDynamicRefreshFreq())) + return; + mDynamicRefreshTimer->reset(); + mDebugTarget.setTexture( NULL ); _render( renderPass, diffuseState ); mDebugTarget.setTexture( mShadowMapTex ); @@ -456,25 +478,35 @@ LightingShaderConstants::LightingShaderConstants() mLightInvRadiusSqSC(NULL), mLightSpotDirSC(NULL), mLightSpotAngleSC(NULL), - mLightSpotFalloffSC(NULL), + mLightSpotFalloffSC(NULL), mShadowMapSC(NULL), + mDynamicShadowMapSC(NULL), mShadowMapSizeSC(NULL), mCookieMapSC(NULL), mRandomDirsConst(NULL), mShadowSoftnessConst(NULL), + mAtlasXOffsetSC(NULL), + mAtlasYOffsetSC(NULL), + mAtlasScaleSC(NULL), + mFadeStartLength(NULL), + mOverDarkFactorPSSM(NULL), + mTapRotationTexSC(NULL), + mWorldToLightProjSC(NULL), mViewToLightProjSC(NULL), mScaleXSC(NULL), mScaleYSC(NULL), mOffsetXSC(NULL), mOffsetYSC(NULL), - mAtlasXOffsetSC(NULL), - mAtlasYOffsetSC(NULL), - mAtlasScaleSC(NULL), - mFadeStartLength(NULL), mFarPlaneScalePSSM(NULL), - mOverDarkFactorPSSM(NULL), - mTapRotationTexSC(NULL) + + mDynamicWorldToLightProjSC(NULL), + mDynamicViewToLightProjSC(NULL), + mDynamicScaleXSC(NULL), + mDynamicScaleYSC(NULL), + mDynamicOffsetXSC(NULL), + mDynamicOffsetYSC(NULL), + mDynamicFarPlaneScalePSSM(NULL) { } @@ -513,29 +545,35 @@ void LightingShaderConstants::init(GFXShader* shader) mLightSpotFalloffSC = shader->getShaderConstHandle( ShaderGenVars::lightSpotFalloff ); mShadowMapSC = shader->getShaderConstHandle("$shadowMap"); + mDynamicShadowMapSC = shader->getShaderConstHandle("$dynamicShadowMap"); mShadowMapSizeSC = shader->getShaderConstHandle("$shadowMapSize"); mCookieMapSC = shader->getShaderConstHandle("$cookieMap"); mShadowSoftnessConst = shader->getShaderConstHandle("$shadowSoftness"); + mAtlasXOffsetSC = shader->getShaderConstHandle("$atlasXOffset"); + mAtlasYOffsetSC = shader->getShaderConstHandle("$atlasYOffset"); + mAtlasScaleSC = shader->getShaderConstHandle("$atlasScale"); + + mFadeStartLength = shader->getShaderConstHandle("$fadeStartLength"); + mOverDarkFactorPSSM = shader->getShaderConstHandle("$overDarkPSSM"); + mTapRotationTexSC = shader->getShaderConstHandle( "$gTapRotationTex" ); mWorldToLightProjSC = shader->getShaderConstHandle("$worldToLightProj"); mViewToLightProjSC = shader->getShaderConstHandle("$viewToLightProj"); - mScaleXSC = shader->getShaderConstHandle("$scaleX"); mScaleYSC = shader->getShaderConstHandle("$scaleY"); mOffsetXSC = shader->getShaderConstHandle("$offsetX"); mOffsetYSC = shader->getShaderConstHandle("$offsetY"); - mAtlasXOffsetSC = shader->getShaderConstHandle("$atlasXOffset"); - mAtlasYOffsetSC = shader->getShaderConstHandle("$atlasYOffset"); - mAtlasScaleSC = shader->getShaderConstHandle("$atlasScale"); - - mFadeStartLength = shader->getShaderConstHandle("$fadeStartLength"); mFarPlaneScalePSSM = shader->getShaderConstHandle("$farPlaneScalePSSM"); - mOverDarkFactorPSSM = shader->getShaderConstHandle("$overDarkPSSM"); - - mTapRotationTexSC = shader->getShaderConstHandle( "$gTapRotationTex" ); + mDynamicWorldToLightProjSC = shader->getShaderConstHandle("$dynamicWorldToLightProj"); + mDynamicViewToLightProjSC = shader->getShaderConstHandle("$dynamicViewToLightProj"); + mDynamicScaleXSC = shader->getShaderConstHandle("$dynamicScaleX"); + mDynamicScaleYSC = shader->getShaderConstHandle("$dynamicScaleY"); + mDynamicOffsetXSC = shader->getShaderConstHandle("$dynamicOffsetX"); + mDynamicOffsetYSC = shader->getShaderConstHandle("$dynamicOffsetY"); + mDynamicFarPlaneScalePSSM = shader->getShaderConstHandle("$dynamicFarPlaneScalePSSM"); mInit = true; } @@ -558,7 +596,9 @@ LightInfoExType ShadowMapParams::Type( "" ); ShadowMapParams::ShadowMapParams( LightInfo *light ) : mLight( light ), - mShadowMap( NULL ) + mShadowMap( NULL ), + mDynamicShadowMap ( NULL ), + isDynamic ( true ) { attenuationRatio.set( 0.0f, 1.0f, 1.0f ); shadowType = ShadowType_Spot; @@ -576,6 +616,7 @@ ShadowMapParams::ShadowMapParams( LightInfo *light ) ShadowMapParams::~ShadowMapParams() { SAFE_DELETE( mShadowMap ); + SAFE_DELETE( mDynamicShadowMap ); } void ShadowMapParams::_validate() @@ -632,39 +673,55 @@ void ShadowMapParams::_validate() texSize = mClamp( texSize, 32, maxTexSize ); } -LightShadowMap* ShadowMapParams::getOrCreateShadowMap() +LightShadowMap* ShadowMapParams::getOrCreateShadowMap(bool _isDynamic) { - if ( mShadowMap ) + if (_isDynamic && mDynamicShadowMap) + return mDynamicShadowMap; + + if (!_isDynamic && mShadowMap) return mShadowMap; if ( !mLight->getCastShadows() ) return NULL; + LightShadowMap* newShadowMap = NULL; + switch ( mLight->getType() ) { case LightInfo::Spot: - mShadowMap = new SingleLightShadowMap( mLight ); + newShadowMap = new SingleLightShadowMap( mLight ); break; case LightInfo::Vector: - mShadowMap = new PSSMLightShadowMap( mLight ); + newShadowMap = new PSSMLightShadowMap( mLight ); break; case LightInfo::Point: if ( shadowType == ShadowType_CubeMap ) - mShadowMap = new CubeLightShadowMap( mLight ); + newShadowMap = new CubeLightShadowMap( mLight ); else if ( shadowType == ShadowType_Paraboloid ) - mShadowMap = new ParaboloidLightShadowMap( mLight ); + newShadowMap = new ParaboloidLightShadowMap( mLight ); else - mShadowMap = new DualParaboloidLightShadowMap( mLight ); + newShadowMap = new DualParaboloidLightShadowMap( mLight ); break; default: break; } - return mShadowMap; + if ( _isDynamic ) + { + newShadowMap->setDynamic( true ); + mDynamicShadowMap = newShadowMap; + return mDynamicShadowMap; + } + else + { + newShadowMap->setDynamic(false); + mShadowMap = newShadowMap; + return mShadowMap; + } } GFXTextureObject* ShadowMapParams::getCookieTex() @@ -739,6 +796,7 @@ void ShadowMapParams::unpackUpdate( BitStream *stream ) // map so it can be reallocated on the next render. shadowType = newType; SAFE_DELETE( mShadowMap ); + SAFE_DELETE( mDynamicShadowMap ); } mathRead( *stream, &attenuationRatio ); diff --git a/Engine/source/lighting/shadowMap/lightShadowMap.h b/Engine/source/lighting/shadowMap/lightShadowMap.h index af45b32fe8..2cbb2ca5e6 100644 --- a/Engine/source/lighting/shadowMap/lightShadowMap.h +++ b/Engine/source/lighting/shadowMap/lightShadowMap.h @@ -47,6 +47,9 @@ #ifndef _GFXSHADER_H_ #include "gfx/gfxShader.h" #endif +#ifndef _PLATFORM_PLATFORMTIMER_H_ +#include "platform/platformTimer.h" +#endif class ShadowMapManager; class SceneManager; @@ -88,20 +91,13 @@ struct LightingShaderConstants GFXShaderConstHandle *mLightSpotFalloffSC; GFXShaderConstHandle* mShadowMapSC; + GFXShaderConstHandle* mDynamicShadowMapSC; GFXShaderConstHandle* mShadowMapSizeSC; GFXShaderConstHandle* mCookieMapSC; GFXShaderConstHandle* mRandomDirsConst; GFXShaderConstHandle* mShadowSoftnessConst; - - GFXShaderConstHandle* mWorldToLightProjSC; - GFXShaderConstHandle* mViewToLightProjSC; - - GFXShaderConstHandle* mScaleXSC; - GFXShaderConstHandle* mScaleYSC; - GFXShaderConstHandle* mOffsetXSC; - GFXShaderConstHandle* mOffsetYSC; GFXShaderConstHandle* mAtlasXOffsetSC; GFXShaderConstHandle* mAtlasYOffsetSC; GFXShaderConstHandle* mAtlasScaleSC; @@ -109,11 +105,28 @@ struct LightingShaderConstants // fadeStartLength.x = Distance in eye space to start fading shadows // fadeStartLength.y = 1 / Length of fade GFXShaderConstHandle* mFadeStartLength; - GFXShaderConstHandle* mFarPlaneScalePSSM; GFXShaderConstHandle* mOverDarkFactorPSSM; GFXShaderConstHandle* mTapRotationTexSC; + // Static Specific: + GFXShaderConstHandle* mWorldToLightProjSC; + GFXShaderConstHandle* mViewToLightProjSC; + GFXShaderConstHandle* mScaleXSC; + GFXShaderConstHandle* mScaleYSC; + GFXShaderConstHandle* mOffsetXSC; + GFXShaderConstHandle* mOffsetYSC; + GFXShaderConstHandle* mFarPlaneScalePSSM; + + // Dynamic Specific: + GFXShaderConstHandle* mDynamicWorldToLightProjSC; + GFXShaderConstHandle* mDynamicViewToLightProjSC; + GFXShaderConstHandle* mDynamicScaleXSC; + GFXShaderConstHandle* mDynamicScaleYSC; + GFXShaderConstHandle* mDynamicOffsetXSC; + GFXShaderConstHandle* mDynamicOffsetYSC; + GFXShaderConstHandle* mDynamicFarPlaneScalePSSM; + LightingShaderConstants(); ~LightingShaderConstants(); @@ -147,7 +160,8 @@ class LightShadowMap virtual ~LightShadowMap(); void render( RenderPassManager* renderPass, - const SceneRenderState *diffuseState ); + const SceneRenderState *diffuseState, + bool _dynamic); U32 getLastUpdate() const { return mLastUpdate; } @@ -237,6 +251,8 @@ class LightShadowMap /// The time this shadow was last updated. U32 mLastUpdate; + PlatformTimer *mStaticRefreshTimer; + PlatformTimer *mDynamicRefreshTimer; /// The time this shadow was last culled and prioritized. U32 mLastCull; @@ -274,6 +290,13 @@ class LightShadowMap /// The callback used to get texture events. /// @see GFXTextureManager::addEventDelegate void _onTextureEvent( GFXTexCallbackCode code ); + + bool mIsDynamic; +public: + + bool isDynamic() { return mIsDynamic; } + void setDynamic(bool value) { mIsDynamic = value; } + }; GFX_DeclareTextureProfile( ShadowMapProfile ); @@ -296,9 +319,9 @@ class ShadowMapParams : public LightInfoEx virtual void packUpdate( BitStream *stream ) const; virtual void unpackUpdate( BitStream *stream ); - LightShadowMap* getShadowMap() const { return mShadowMap; } + LightShadowMap* getShadowMap(bool _isDynamic = false) const { return _isDynamic ? mDynamicShadowMap : mShadowMap; } - LightShadowMap* getOrCreateShadowMap(); + LightShadowMap* getOrCreateShadowMap(bool _isDynamic = false); bool hasCookieTex() const { return cookie.isNotEmpty(); } @@ -315,6 +338,7 @@ class ShadowMapParams : public LightInfoEx /// LightShadowMap *mShadowMap; + LightShadowMap *mDynamicShadowMap; LightInfo *mLight; @@ -376,6 +400,7 @@ class ShadowMapParams : public LightInfoEx bool lastSplitTerrainOnly; /// @} + bool isDynamic; }; #endif // _LIGHTSHADOWMAP_H_ diff --git a/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp b/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp index 15a338db9e..d276fe3a5d 100644 --- a/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp +++ b/Engine/source/lighting/shadowMap/pssmLightShadowMap.cpp @@ -37,6 +37,7 @@ #include "materials/shaderData.h" #include "ts/tsShapeInstance.h" #include "console/consoleTypes.h" +#include "math/mathUtils.h" AFTER_MODULE_INIT( Sim ) @@ -248,6 +249,9 @@ void PSSMLightShadowMap::_render( RenderPassManager* renderPass, TSShapeInstance::smDetailAdjust *= smDetailAdjustScale; TSShapeInstance::smSmallestVisiblePixelSize = smSmallestVisiblePixelSize; + Vector< Vector > _extraCull; + _calcPlanesCullForShadowCasters( _extraCull, fullFrustum, mLight->getDirection() ); + for (U32 i = 0; i < mNumSplits; i++) { GFXTransformSaver saver; @@ -365,12 +369,17 @@ void PSSMLightShadowMap::_render( RenderPassManager* renderPass, shadowRenderState.setDiffuseCameraTransform( diffuseState->getCameraTransform() ); shadowRenderState.setWorldToScreenScale( diffuseState->getWorldToScreenScale() ); + PlaneSetF planeSet( _extraCull[i].address(), _extraCull[i].size() ); + shadowRenderState.getCullingState().setExtraPlanesCull( planeSet ); + U32 objectMask = SHADOW_TYPEMASK; if ( i == mNumSplits-1 && params->lastSplitTerrainOnly ) objectMask = TerrainObjectType; sceneManager->renderSceneNoLights( &shadowRenderState, objectMask ); + shadowRenderState.getCullingState().clearExtraPlanesCull(); + _debugRender( &shadowRenderState ); } @@ -435,18 +444,28 @@ void PSSMLightShadowMap::setShaderParameters(GFXShaderConstBuffer* params, Light } } - params->setSafe(lsc->mScaleXSC, sx); - params->setSafe(lsc->mScaleYSC, sy); - params->setSafe(lsc->mOffsetXSC, ox); - params->setSafe(lsc->mOffsetYSC, oy); + // These values change based on static/dynamic. + if ( mIsDynamic ) + { + params->setSafe(lsc->mDynamicScaleXSC, sx); + params->setSafe(lsc->mDynamicScaleYSC, sy); + params->setSafe(lsc->mDynamicOffsetXSC, ox); + params->setSafe(lsc->mDynamicOffsetYSC, oy); + params->setSafe( lsc->mDynamicFarPlaneScalePSSM, mFarPlaneScalePSSM); + } else { + params->setSafe(lsc->mScaleXSC, sx); + params->setSafe(lsc->mScaleYSC, sy); + params->setSafe(lsc->mOffsetXSC, ox); + params->setSafe(lsc->mOffsetYSC, oy); + params->setSafe( lsc->mFarPlaneScalePSSM, mFarPlaneScalePSSM); + } + params->setSafe(lsc->mAtlasXOffsetSC, aXOff); params->setSafe(lsc->mAtlasYOffsetSC, aYOff); params->setSafe(lsc->mAtlasScaleSC, shadowMapAtlas); Point4F lightParams( mLight->getRange().x, p->overDarkFactor.x, 0.0f, 0.0f ); params->setSafe( lsc->mLightParamsSC, lightParams ); - - params->setSafe( lsc->mFarPlaneScalePSSM, mFarPlaneScalePSSM); Point2F fadeStartLength(p->fadeStartDist, 0.0f); if (fadeStartLength.x == 0.0f) @@ -462,3 +481,117 @@ void PSSMLightShadowMap::setShaderParameters(GFXShaderConstBuffer* params, Light // The softness is a factor of the texel size. params->setSafe( lsc->mShadowSoftnessConst, p->shadowSoftness * ( 1.0f / mTexSize ) ); } + +void PSSMLightShadowMap::_calcPlanesCullForShadowCasters(Vector< Vector > &out, const Frustum &viewFrustum, const Point3F &_ligthDir) +{ + +#define ENABLE_CULL_ASSERT + + PROFILE_SCOPE(PSSMLightShadowMap_render_getCullFrustrum); + + Point3F ligthDir = _ligthDir; + PlaneF lightFarPlane, lightNearPlane; + MatrixF lightFarPlaneMat(true); + MatrixF invLightFarPlaneMat(true); + + // init data + { + ligthDir.normalize(); + Point3F viewDir = viewFrustum.getTransform().getForwardVector(); + viewDir.normalize(); + const Point3F viewPosition = viewFrustum.getPosition(); + const F32 viewDistance = viewFrustum.getBounds().len(); + lightNearPlane = PlaneF(viewPosition + (viewDistance * -ligthDir), ligthDir); + + const Point3F lightFarPlanePos = viewPosition + (viewDistance * ligthDir); + lightFarPlane = PlaneF(lightFarPlanePos, -ligthDir); + + lightFarPlaneMat = MathUtils::createOrientFromDir(-ligthDir); + lightFarPlaneMat.setPosition(lightFarPlanePos); + lightFarPlaneMat.invertTo(&invLightFarPlaneMat); + } + + Vector projVertices; + + //project all frustum vertices into plane + // all vertices are 2d and local to far plane + projVertices.setSize(8); + for (int i = 0; i < 8; ++i) // + { + const Point3F &point = viewFrustum.getPoints()[i]; +#ifdef ENABLE_CULL_ASSERT + AssertFatal( PlaneF::Front == lightNearPlane.whichSide(point), "" ); + AssertFatal( PlaneF::Front == lightFarPlane.whichSide(point), "" ); +#endif + + Point3F localPoint(lightFarPlane.project(point)); + invLightFarPlaneMat.mulP(localPoint); + projVertices[i] = Point2F(localPoint.x, localPoint.z); + } + + //create hull arround projected proints + Vector hullVerts; + MathUtils::mBuildHull2D(projVertices, hullVerts); + + Vector planes; + planes.push_back(lightNearPlane); + planes.push_back(lightFarPlane); + + //build planes + for (int i = 0; i < (hullVerts.size() - 1); ++i) + { + Point2F pos2D = (hullVerts[i] + hullVerts[i + 1]) / 2; + Point3F pos3D(pos2D.x, 0, pos2D.y); + + Point3F pos3DA(hullVerts[i].x, 0, hullVerts[i].y); + Point3F pos3DB(hullVerts[i + 1].x, 0, hullVerts[i + 1].y); + + // move hull points to 3d space + lightFarPlaneMat.mulP(pos3D); + lightFarPlaneMat.mulP(pos3DA); + lightFarPlaneMat.mulP(pos3DB); + + PlaneF plane(pos3D, MathUtils::mTriangleNormal(pos3DB, pos3DA, (pos3DA - ligthDir))); + planes.push_back(plane); + } + + //recalculate planes for each splits + for (int split = 0; split < mNumSplits; ++split) + { + Frustum subFrustum(viewFrustum); + subFrustum.cropNearFar(mSplitDist[split], mSplitDist[split + 1]); + subFrustum.setFarDist(getMin(subFrustum.getFarDist()*2.5f, viewFrustum.getFarDist())); + subFrustum.update(); + + Vector subPlanes = planes; + + for (int planeIdx = 0; planeIdx < subPlanes.size(); ++planeIdx) + { + PlaneF &plane = subPlanes[planeIdx]; + F32 minDist = 0; + + //calculate near vertex distance + for (int vertexIdx = 0; vertexIdx < 8; ++vertexIdx) + { + Point3F point = subFrustum.getPoints()[vertexIdx]; + minDist = getMin(plane.distToPlane(point), minDist); + } + + // move plane to near vertex + Point3F newPos = plane.getPosition() + (plane.getNormal() * minDist); + plane = PlaneF(newPos, plane.getNormal()); + +#ifdef ENABLE_CULL_ASSERT + for(int x = 0; x < 8; ++x) + { + AssertFatal( PlaneF::Back != plane.whichSide( subFrustum.getPoints()[x] ), ""); + } +#endif + } + + out.push_back(subPlanes); + } + +#undef ENABLE_CULL_ASSERT + +} diff --git a/Engine/source/lighting/shadowMap/pssmLightShadowMap.h b/Engine/source/lighting/shadowMap/pssmLightShadowMap.h index d2fffde8ea..8ee8830188 100644 --- a/Engine/source/lighting/shadowMap/pssmLightShadowMap.h +++ b/Engine/source/lighting/shadowMap/pssmLightShadowMap.h @@ -56,6 +56,7 @@ class PSSMLightShadowMap : public LightShadowMap void _setNumSplits( U32 numSplits, U32 texSize ); void _calcSplitPos(const Frustum& currFrustum); Box3F _calcClipSpaceAABB(const Frustum& f, const MatrixF& transform, F32 farDist); + void _calcPlanesCullForShadowCasters(Vector< Vector > &out, const Frustum &viewFrustum, const Point3F &_ligthDir); void _roundProjection(const MatrixF& lightMat, const MatrixF& cropMatrix, Point3F &offset, U32 splitNum); static const S32 MAX_SPLITS = 4; diff --git a/Engine/source/lighting/shadowMap/shadowMapManager.cpp b/Engine/source/lighting/shadowMap/shadowMapManager.cpp index cfcf75f818..7fd50cd78b 100644 --- a/Engine/source/lighting/shadowMap/shadowMapManager.cpp +++ b/Engine/source/lighting/shadowMap/shadowMapManager.cpp @@ -86,6 +86,7 @@ Signal ShadowMapManager::smShadowDeactivateSignal; ShadowMapManager::ShadowMapManager() : mShadowMapPass(NULL), mCurrentShadowMap(NULL), + mCurrentDynamicShadowMap(NULL), mIsActive(false) { } @@ -98,9 +99,15 @@ void ShadowMapManager::setLightShadowMapForLight( LightInfo *light ) { ShadowMapParams *params = light->getExtended(); if ( params ) + { mCurrentShadowMap = params->getShadowMap(); + mCurrentDynamicShadowMap = params->getShadowMap(true); + } else + { mCurrentShadowMap = NULL; + mCurrentDynamicShadowMap = NULL; + } } void ShadowMapManager::activate() diff --git a/Engine/source/lighting/shadowMap/shadowMapManager.h b/Engine/source/lighting/shadowMap/shadowMapManager.h index 9319f3e365..a2e402e593 100644 --- a/Engine/source/lighting/shadowMap/shadowMapManager.h +++ b/Engine/source/lighting/shadowMap/shadowMapManager.h @@ -60,12 +60,14 @@ class ShadowMapManager : public ShadowManager /// Sets the current shadowmap (used in setLightInfo/setTextureStage calls) void setLightShadowMap( LightShadowMap *lm ) { mCurrentShadowMap = lm; } + void setLightDynamicShadowMap( LightShadowMap *lm ) { mCurrentDynamicShadowMap = lm; } /// Looks up the shadow map for the light then sets it. void setLightShadowMapForLight( LightInfo *light ); /// Return the current shadow map LightShadowMap* getCurrentShadowMap() const { return mCurrentShadowMap; } + LightShadowMap* getCurrentDynamicShadowMap() const { return mCurrentDynamicShadowMap; } ShadowMapPass* getShadowMapPass() const { return mShadowMapPass; } @@ -88,6 +90,7 @@ class ShadowMapManager : public ShadowManager ShadowMapPass *mShadowMapPass; LightShadowMap *mCurrentShadowMap; + LightShadowMap *mCurrentDynamicShadowMap; /// GFXTexHandle mTapRotationTex; diff --git a/Engine/source/lighting/shadowMap/shadowMapPass.cpp b/Engine/source/lighting/shadowMap/shadowMapPass.cpp index 67eebc40c3..7c17046e13 100644 --- a/Engine/source/lighting/shadowMap/shadowMapPass.cpp +++ b/Engine/source/lighting/shadowMap/shadowMapPass.cpp @@ -55,6 +55,11 @@ bool ShadowMapPass::smDisableShadows = false; bool ShadowMapPass::smDisableShadowsEditor = false; bool ShadowMapPass::smDisableShadowsPref = false; +/// milliseconds before static redraw +S32 ShadowMapPass::smStaticShadowUpdateFreq = 32; +/// milliseconds before dynamic redraw +S32 ShadowMapPass::smDynamicShadowUpdateFreq = 16; + /// We have a default 8ms render budget for shadow rendering. U32 ShadowMapPass::smRenderBudgetMs = 8; @@ -62,18 +67,27 @@ ShadowMapPass::ShadowMapPass(LightManager* lightManager, ShadowMapManager* shado { mLightManager = lightManager; mShadowManager = shadowManager; + + // Setup our render pass managers + + // Static mShadowRPM = new ShadowRenderPassManager(); mShadowRPM->assignName( "ShadowRenderPassManager" ); mShadowRPM->registerObject(); Sim::getRootGroup()->addObject( mShadowRPM ); - - // Setup our render pass manager - mShadowRPM->addManager( new RenderMeshMgr(RenderPassManager::RIT_Mesh, 0.3f, 0.3f) ); - //mShadowRPM->addManager( new RenderObjectMgr() ); mShadowRPM->addManager( new RenderTerrainMgr( 0.5f, 0.5f ) ); mShadowRPM->addManager( new RenderImposterMgr( 0.6f, 0.6f ) ); + // Dynamic + mDynamicShadowRPM = new DynamicShadowRenderPassManager(); + mDynamicShadowRPM->assignName( "DynamicShadowRenderPassManager" ); + mDynamicShadowRPM->registerObject(); + Sim::getRootGroup()->addObject( mDynamicShadowRPM ); + mDynamicShadowRPM->addManager( new RenderMeshMgr(RenderPassManager::RIT_Mesh, 0.3f, 0.3f) ); + mDynamicShadowRPM->addManager( new RenderTerrainMgr( 0.5f, 0.5f ) ); + mDynamicShadowRPM->addManager( new RenderImposterMgr( 0.6f, 0.6f ) ); + mActiveLights = 0; mTimer = PlatformTimer::create(); @@ -117,6 +131,9 @@ ShadowMapPass::~ShadowMapPass() if ( mShadowRPM ) mShadowRPM->deleteObject(); + + if ( mDynamicShadowRPM ) + mDynamicShadowRPM->deleteObject(); } void ShadowMapPass::render( SceneManager *sceneManager, @@ -147,7 +164,7 @@ void ShadowMapPass::render( SceneManager *sceneManager, // First do a loop thru the lights setting up the shadow // info array for this pass. Vector shadowMaps; - shadowMaps.reserve( mActiveLights ); + shadowMaps.reserve( mActiveLights * 2 ); for ( U32 i = 0; i < mActiveLights; i++ ) { ShadowMapParams *params = mLights[i]->getExtended(); @@ -155,12 +172,14 @@ void ShadowMapPass::render( SceneManager *sceneManager, // Before we do anything... skip lights without shadows. if ( !mLights[i]->getCastShadows() || smDisableShadows ) continue; - - LightShadowMap *lsm = params->getOrCreateShadowMap(); + + // --- Static Shadow Map --- + LightShadowMap *lsm = params->getOrCreateShadowMap(); + LightShadowMap *dlsm = params->getOrCreateShadowMap(true); // First check the visiblity query... if it wasn't // visible skip it. - if ( lsm->wasOccluded() ) + if (lsm->wasOccluded() || dlsm->wasOccluded()) continue; // Any shadow that is visible is counted as being @@ -168,13 +187,25 @@ void ShadowMapPass::render( SceneManager *sceneManager, ++smActiveShadowMaps; // Do a priority update for this shadow. - lsm->updatePriority( diffuseState, currTime ); + lsm->updatePriority(diffuseState, currTime); + + shadowMaps.push_back(lsm); + + // --- Dynamic Shadow Map --- - shadowMaps.push_back( lsm ); + // Any shadow that is visible is counted as being + // active regardless if we update it or not. + ++smActiveShadowMaps; + + // Do a priority update for this shadow. + dlsm->updatePriority(diffuseState, currTime); + + shadowMaps.push_back( dlsm ); } // Now sort the shadow info by priority. - shadowMaps.sort( LightShadowMap::cmpPriority ); + // andrewmac: tempoarily disabled until I find a better solution. + //shadowMaps.sort( LightShadowMap::cmpPriority ); GFXDEBUGEVENT_SCOPE( ShadowMapPass_Render, ColorI::RED ); @@ -183,22 +214,28 @@ void ShadowMapPass::render( SceneManager *sceneManager, mTimer->getElapsedMs(); mTimer->reset(); - for ( U32 i = 0; i < shadowMaps.size(); i++ ) + // 2 Shadow Maps per Light. This may fail. + for ( U32 i = 0; i < shadowMaps.size(); i += 2 ) { - LightShadowMap *lsm = shadowMaps[i]; + LightShadowMap *lsm = shadowMaps[i]; + LightShadowMap *dlsm = shadowMaps[i + 1]; { GFXDEBUGEVENT_SCOPE( ShadowMapPass_Render_Shadow, ColorI::RED ); - mShadowManager->setLightShadowMap( lsm ); - lsm->render( mShadowRPM, diffuseState ); + mShadowManager->setLightShadowMap(lsm); + mShadowManager->setLightDynamicShadowMap( dlsm ); + + lsm->render(mShadowRPM, diffuseState, false); + dlsm->render(mDynamicShadowRPM, diffuseState, true); + ++smUpdatedShadowMaps; } // View dependent shadows or ones that are covering the entire // screen are updated every frame no matter the time left in // our shadow rendering budget. - if ( lsm->isViewDependent() || lsm->getLastScreenSize() >= 1.0f ) + if ( dlsm->isViewDependent() || dlsm->getLastScreenSize() >= 1.0f ) { ++smNearShadowMaps; continue; @@ -224,6 +261,7 @@ void ShadowMapPass::render( SceneManager *sceneManager, // The NULL here is importaint as having it around // will cause extra work in AdvancedLightManager::setLightInfo(). mShadowManager->setLightShadowMap( NULL ); + mShadowManager->setLightDynamicShadowMap( NULL ); } void ShadowRenderPassManager::addInst( RenderInst *inst ) @@ -237,7 +275,29 @@ void ShadowRenderPassManager::addInst( RenderInst *inst ) return; const BaseMaterialDefinition *mat = meshRI->matInst->getMaterial(); - if ( !mat->castsShadows() || mat->isTranslucent() ) + if ( !mat->castsShadows() || mat->castsDynamicShadows() || mat->isTranslucent() ) + { + // Do not add this instance, return here and avoid the default behavior + // of calling up to Parent::addInst() + return; + } + } + + Parent::addInst(inst); +} + +void DynamicShadowRenderPassManager::addInst( RenderInst *inst ) +{ + PROFILE_SCOPE(DynamicShadowRenderPassManager_addInst); + + if ( inst->type == RIT_Mesh ) + { + MeshRenderInst *meshRI = static_cast( inst ); + if ( !meshRI->matInst ) + return; + + const BaseMaterialDefinition *mat = meshRI->matInst->getMaterial(); + if ( !mat->castsShadows() || !mat->castsDynamicShadows() || mat->isTranslucent() ) { // Do not add this instance, return here and avoid the default behavior // of calling up to Parent::addInst() diff --git a/Engine/source/lighting/shadowMap/shadowMapPass.h b/Engine/source/lighting/shadowMap/shadowMapPass.h index 8689153cfd..45e908c91b 100644 --- a/Engine/source/lighting/shadowMap/shadowMapPass.h +++ b/Engine/source/lighting/shadowMap/shadowMapPass.h @@ -45,6 +45,7 @@ class RenderObjectMgr; class RenderTerrainMgr; class PlatformTimer; class ShadowRenderPassManager; +class DynamicShadowRenderPassManager; /// ShadowMapPass, this is plugged into the SceneManager to generate /// ShadowMaps for the scene. @@ -83,6 +84,11 @@ class ShadowMapPass static bool smDisableShadowsEditor; static bool smDisableShadowsPref; + /// milliseconds before static redraw + static S32 smStaticShadowUpdateFreq; + /// milliseconds before dynamic redraw + static S32 smDynamicShadowUpdateFreq; + private: static U32 smActiveShadowMaps; @@ -103,6 +109,7 @@ class ShadowMapPass LightInfoList mLights; U32 mActiveLights; SimObjectPtr mShadowRPM; + SimObjectPtr mDynamicShadowRPM; LightManager* mLightManager; ShadowMapManager* mShadowManager; }; @@ -117,4 +124,14 @@ class ShadowRenderPassManager : public RenderPassManager virtual void addInst( RenderInst *inst ); }; +class DynamicShadowRenderPassManager : public RenderPassManager +{ + typedef RenderPassManager Parent; +public: + DynamicShadowRenderPassManager() : Parent() {} + + /// Add a RenderInstance to the list + virtual void addInst(RenderInst *inst); +}; + #endif // _SHADOWMAPPASS_H_ diff --git a/Engine/source/materials/baseMaterialDefinition.h b/Engine/source/materials/baseMaterialDefinition.h index c1c033015a..1022903c02 100644 --- a/Engine/source/materials/baseMaterialDefinition.h +++ b/Engine/source/materials/baseMaterialDefinition.h @@ -37,6 +37,7 @@ class BaseMaterialDefinition : public SimObject virtual bool isDoubleSided() const = 0; virtual bool isLightmapped() const = 0; virtual bool castsShadows() const = 0; + virtual bool castsDynamicShadows() const = 0; }; #endif // _BASEMATERIALDEFINITION_H_ diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index 7e069c8958..e27de0be22 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -182,6 +182,7 @@ Material::Material() mAlphaRef = 1; mCastShadows = true; + mCastDynamicShadows = true; mPlanarReflection = false; @@ -288,7 +289,7 @@ void Material::initPersistFields() addField( "useAnisotropic", TypeBool, Offset(mUseAnisotropic, Material), MAX_STAGES, "Use anisotropic filtering for the textures of this stage." ); - + addField("envMap", TypeImageFilename, Offset(mEnvMapFilename, Material), MAX_STAGES, "The name of an environment map cube map to apply to this material." ); @@ -390,6 +391,9 @@ void Material::initPersistFields() addField( "castShadows", TypeBool, Offset(mCastShadows, Material), "If set to false the lighting system will not cast shadows from this material." ); + addField( "castDynamicShadows", TypeBool, Offset(mCastDynamicShadows, Material), + "If set to false the lighting system will not cast dynamic shadows from this material." ); + addField("planarReflection", TypeBool, Offset(mPlanarReflection, Material), "@internal" ); addField("translucent", TypeBool, Offset(mTranslucent, Material), diff --git a/Engine/source/materials/materialDefinition.h b/Engine/source/materials/materialDefinition.h index 574472dbc8..491b56cf0f 100644 --- a/Engine/source/materials/materialDefinition.h +++ b/Engine/source/materials/materialDefinition.h @@ -89,6 +89,7 @@ class Material : public BaseMaterialDefinition NormalizeCube, TexTarget, AccuMap, + DynamicShadowMap, }; enum BlendOp @@ -219,7 +220,7 @@ class Material : public BaseMaterialDefinition /// The strength scalar for the detail normal map. F32 mDetailNormalMapStrength[MAX_STAGES]; - + FileName mEnvMapFilename[MAX_STAGES]; /// This color is the diffuse color of the material @@ -299,6 +300,7 @@ class Material : public BaseMaterialDefinition /// A generic setting which tells the system to skip /// generation of shadows from this material. bool mCastShadows; + bool mCastDynamicShadows; bool mAlphaTest; U32 mAlphaRef; @@ -355,6 +357,7 @@ class Material : public BaseMaterialDefinition virtual void setAutoGenerated(bool isAutoGenerated) { mAutoGenerated = isAutoGenerated; } virtual bool isLightmapped() const; virtual bool castsShadows() const { return mCastShadows; } + virtual bool castsDynamicShadows() const { return mCastDynamicShadows; } const String &getPath() const { return mPath; } void flush(); diff --git a/Engine/source/materials/processedCustomMaterial.cpp b/Engine/source/materials/processedCustomMaterial.cpp index 90994af69d..765675a214 100644 --- a/Engine/source/materials/processedCustomMaterial.cpp +++ b/Engine/source/materials/processedCustomMaterial.cpp @@ -85,6 +85,14 @@ void ProcessedCustomMaterial::_setStageData() continue; } + if(filename.equal(String("$dynamicShadowMap"), String::NoCase)) + { + rpd->mTexType[i] = Material::DynamicShadowMap; + rpd->mSamplerNames[i] = mCustomMaterial->mSamplerNames[i]; + mMaxTex = i+1; + continue; + } + if(filename.equal(String("$dynamiclightmask"), String::NoCase)) { rpd->mTexType[i] = Material::DynamicLightMask; diff --git a/Engine/source/math/mPoint2.h b/Engine/source/math/mPoint2.h index f814ddbbc5..d4c8180a12 100644 --- a/Engine/source/math/mPoint2.h +++ b/Engine/source/math/mPoint2.h @@ -908,6 +908,14 @@ inline bool mIsNaN( const Point2F &p ) return mIsNaN_F( p.x ) || mIsNaN_F( p.y ); } +/// Return 0 if points are colinear +/// Return positive if p0p1p2 are counter-clockwise +/// Return negative if p0p1p2 are clockwise +inline F64 mCross(const Point2F &p0, const Point2F &p1, const Point2F &pt2) +{ + return (p1.x - p0.x) * (pt2.y - p0.y) - (p1.y - p0.y) * (pt2.x - p0.x); +} + namespace DictHash { diff --git a/Engine/source/math/mathUtils.cpp b/Engine/source/math/mathUtils.cpp index 9f04b107e4..f6086c5e4f 100644 --- a/Engine/source/math/mathUtils.cpp +++ b/Engine/source/math/mathUtils.cpp @@ -1845,4 +1845,55 @@ U32 extrudePolygonEdgesFromPoint( const Point3F* vertices, U32 numVertices, cons return numPlanes; } +//----------------------------------------------------------------------------- + +void MathUtils::mBuildHull2D(const Vector _inPoints, Vector &hullPoints) +{ + /// Andrew's monotone chain convex hull algorithm implementation + + struct Util + { + //compare by x and then by y + static int CompareLexicographic( const Point2F *a, const Point2F *b) + { + return a->x < b->x || (a->x == b->x && a->y < b->y); + } + }; + + hullPoints.clear(); + hullPoints.setSize( _inPoints.size()*2 ); + + // sort in points by x and then by y + Vector inSortedPoints = _inPoints; + inSortedPoints.sort( &Util::CompareLexicographic ); + + Point2F* lowerHullPtr = hullPoints.address(); + U32 lowerHullIdx = 0; + + //lower part of hull + for( int i = 0; i < inSortedPoints.size(); ++i ) + { + while( lowerHullIdx >= 2 && mCross( lowerHullPtr[ lowerHullIdx - 2], lowerHullPtr[lowerHullIdx - 1], inSortedPoints[i] ) <= 0 ) + --lowerHullIdx; + + lowerHullPtr[lowerHullIdx++] = inSortedPoints[i]; + } + + --lowerHullIdx; // last point are the same as first in upperHullPtr + + Point2F* upperHullPtr = hullPoints.address() + lowerHullIdx; + U32 upperHullIdx = 0; + + //upper part of hull + for( int i = inSortedPoints.size()-1; i >= 0; --i ) + { + while( upperHullIdx >= 2 && mCross( upperHullPtr[ upperHullIdx - 2], upperHullPtr[upperHullIdx - 1], inSortedPoints[i] ) <= 0 ) + --upperHullIdx; + + upperHullPtr[upperHullIdx++] = inSortedPoints[i]; + } + + hullPoints.setSize( lowerHullIdx + upperHullIdx ); +} + } // namespace MathUtils diff --git a/Engine/source/math/mathUtils.h b/Engine/source/math/mathUtils.h index 86484c07b6..ee7be9c2a9 100644 --- a/Engine/source/math/mathUtils.h +++ b/Engine/source/math/mathUtils.h @@ -417,6 +417,9 @@ namespace MathUtils //void findFarthestPoint( const Point3F* points, U32 numPoints, const Point3F& fromPoint, ) + /// Build a convex hull from a cloud of 2D points, first and last hull point are the same. + void mBuildHull2D(const Vector inPoints, Vector &hullPoints); + } // namespace MathUtils #endif // _MATHUTILS_H_ diff --git a/Engine/source/scene/culling/sceneCullingState.cpp b/Engine/source/scene/culling/sceneCullingState.cpp index ea53639d29..260b5e33f6 100644 --- a/Engine/source/scene/culling/sceneCullingState.cpp +++ b/Engine/source/scene/culling/sceneCullingState.cpp @@ -88,6 +88,8 @@ SceneCullingState::SceneCullingState( SceneManager* sceneManager, const SceneCam SceneCullingVolume::Includer, PlaneSetF( planes, 4 ) ); + + clearExtraPlanesCull(); } //----------------------------------------------------------------------------- @@ -789,6 +791,9 @@ U32 SceneCullingState::cullObjects( SceneObject** objects, U32 numObjects, U32 c result == SceneZoneCullingState::CullingTestPositiveByOcclusion ); } + if( !isCulled ) + isCulled = isOccludedWithExtraPlanesCull( object->getWorldBox() ); + if( !isCulled ) objects[ numRemainingObjects ++ ] = object; } diff --git a/Engine/source/scene/culling/sceneCullingState.h b/Engine/source/scene/culling/sceneCullingState.h index b63b219c26..4361907ce1 100644 --- a/Engine/source/scene/culling/sceneCullingState.h +++ b/Engine/source/scene/culling/sceneCullingState.h @@ -106,6 +106,9 @@ class SceneCullingState /// The root culling frustum, which may be different from the camera frustum Frustum mCullingFrustum; + /// Extra planes for culling. + PlaneSetF mExtraPlanesCull; + /// Occluders that have been added to this render state. Adding an occluder does not /// necessarily result in an occluder volume being added. To not repeatedly try to /// process the same occluder object, all objects that are added are recorded here. @@ -301,6 +304,21 @@ class SceneCullingState /// (or, if no zone is selected, all volumes in the outdoor zone) to the debug drawer. void debugRenderCullingVolumes() const; + /// Set planes for extra culling + void setExtraPlanesCull( const PlaneSetF &cull) { mExtraPlanesCull = cull; } + + /// Clear planes for extra culling. + void clearExtraPlanesCull() { mExtraPlanesCull = PlaneSetF(NULL, 0); } + + /// Check extra planes culling + bool isOccludedWithExtraPlanesCull(const Box3F &box) const + { + if(mExtraPlanesCull.getNumPlanes()) + return mExtraPlanesCull.testPotentialIntersection( box ) == GeometryOutside; + + return false; + } + private: typedef SceneZoneCullingState::CullingTestResult CullingTestResult; diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs index 7fda56235a..2e73b65696 100644 --- a/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs @@ -62,9 +62,10 @@ OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/vectorLightP.glsl"; samplerNames[0] = "$prePassBuffer"; - samplerNames[1] = "$ShadowMap"; - samplerNames[2] = "$ssaoMask"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[1] = "$shadowMap"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$ssaoMask"; + samplerNames[4] = "$gTapRotationTex"; pixVersion = 3.0; }; @@ -75,7 +76,8 @@ stateBlock = AL_VectorLightState; sampler["prePassBuffer"] = "#prepass"; - sampler["ShadowMap"] = "$dynamiclight"; + sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["ssaoMask"] = "#ssaoMask"; target = "lightinfo"; @@ -128,8 +130,9 @@ samplerNames[0] = "$prePassBuffer"; samplerNames[1] = "$shadowMap"; - samplerNames[2] = "$cookieMap"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$cookieMap"; + samplerNames[4] = "$gTapRotationTex"; pixVersion = 3.0; }; @@ -141,6 +144,7 @@ sampler["prePassBuffer"] = "#prepass"; sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; target = "lightinfo"; @@ -159,8 +163,9 @@ samplerNames[0] = "$prePassBuffer"; samplerNames[1] = "$shadowMap"; - samplerNames[2] = "$cookieMap"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$cookieMap"; + samplerNames[4] = "$gTapRotationTex"; pixVersion = 3.0; }; @@ -172,6 +177,7 @@ sampler["prePassBuffer"] = "#prepass"; sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; target = "lightinfo"; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl index 3bfd94900d..92c9369a76 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl @@ -28,6 +28,7 @@ #include "../../../gl/lighting.glsl" #include "../../shadowMap/shadowMapIO_GLSL.h" #include "softShadow.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; @@ -107,6 +108,7 @@ uniform sampler2D prePassBuffer; uniform samplerCube shadowMap; #else uniform sampler2D shadowMap; + uniform sampler2D dynamicShadowMap; #endif uniform vec4 rtParams0; @@ -119,9 +121,10 @@ uniform vec2 lightAttenuation; uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat3 viewToLightProj; +uniform mat3 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; - + out vec4 OUT_col; void main() @@ -175,7 +178,7 @@ void main() vec2 shadowCoord = decodeShadowCoord( tMul( viewToLightProj, -lightVec ) ).xy; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -183,17 +186,28 @@ void main() nDotL, lightParams.y ); + vec2 dynamicShadowCoord = decodeShadowCoord( tMul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); #endif #endif // !NO_SHADOW + vec3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. vec4 cookie = texture( cookieMap, tMul( viewToLightProj, -lightVec ) ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -211,7 +225,7 @@ void main() normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - vec3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + vec3 lightColorOut = lightMapParams.rgb * lightcol; vec4 addToResult = vec4(0.0); // TODO: This needs to be removed when lightmapping is disabled diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl index b3920ec9a6..29c278508d 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl @@ -27,6 +27,7 @@ #include "shadergen:/autogenConditioners.h" #include "softShadow.glsl" #include "../../../gl/lighting.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; @@ -45,6 +46,7 @@ uniform sampler2D cookieMap; uniform sampler2D prePassBuffer; uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; uniform vec4 rtParams0; @@ -59,6 +61,7 @@ uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat4 viewToLightProj; +uniform mat4 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; @@ -70,7 +73,7 @@ void main() // Compute scene UV vec3 ssPos = IN_ssPos.xyz / IN_ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); - + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -102,6 +105,10 @@ void main() vec2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + vec4 dynpxlPosLightProj = tMul( dynamicViewToLightProj, vec4( viewSpacePos, 1 ) ); + vec2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; #ifdef NO_SHADOW float shadowed = 1.0; @@ -111,7 +118,7 @@ void main() // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -119,15 +126,24 @@ void main() nDotL, lightParams.y ); + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW + vec3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. vec4 cookie = texture( cookieMap, shadowCoord ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -145,7 +161,7 @@ void main() normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - vec3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + vec3 lightColorOut = lightMapParams.rgb * lightcol; vec4 addToResult = vec4(0.0); // TODO: This needs to be removed when lightmapping is disabled diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl index eab364cd5b..4eb4973a3c 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl @@ -34,81 +34,78 @@ in vec2 uv0; in vec3 wsEyeRay; in vec3 vsEyeRay; -uniform sampler2D ShadowMap ; +uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; #ifdef USE_SSAO_MASK uniform sampler2D ssaoMask ; uniform vec4 rtParams2; #endif -uniform sampler2D prePassBuffer; +uniform sampler2D prePassBuffer; uniform vec3 lightDirection; uniform vec4 lightColor; uniform float lightBrightness; uniform vec4 lightAmbient; uniform vec3 eyePosWorld; -uniform mat4x4 worldToLightProj; -uniform vec4 scaleX; -uniform vec4 scaleY; -uniform vec4 offsetX; -uniform vec4 offsetY; +uniform mat4x4 eyeMat; uniform vec4 atlasXOffset; uniform vec4 atlasYOffset; uniform vec2 atlasScale; uniform vec4 zNearFarInvNearFar; uniform vec4 lightMapParams; uniform vec2 fadeStartLength; -uniform vec4 farPlaneScalePSSM; uniform vec4 overDarkPSSM; uniform float shadowSoftness; - -out vec4 OUT_col; - -void main() -{ - // Sample/unpack the normal/z data - vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); - vec3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - vec3 debugColor = vec3(0); - #endif - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; +//static shadowMap +uniform mat4x4 worldToLightProj; +uniform vec4 scaleX; +uniform vec4 scaleY; +uniform vec4 offsetX; +uniform vec4 offsetY; +uniform vec4 farPlaneScalePSSM; - #ifdef PSSM_DEBUG_RENDER - debugColor = vec3(1.0); - #endif +//dynamic shadowMap +uniform mat4x4 dynamicWorldToLightProj; +uniform vec4 dynamicScaleX; +uniform vec4 dynamicScaleY; +uniform vec4 dynamicOffsetX; +uniform vec4 dynamicOffsetY; +uniform vec4 dynamicFarPlaneScalePSSM; - #else +vec4 AL_VectorLightShadowCast( sampler2D _sourceshadowMap, + vec2 _texCoord, + mat4 _worldToLightProj, + vec4 _worldPos, + vec4 _scaleX, vec4 _scaleY, + vec4 _offsetX, vec4 _offsetY, + vec4 _farPlaneScalePSSM, + vec4 _atlasXOffset, vec4 _atlasYOffset, + vec2 _atlasScale, + float _shadowSoftness, + float _dotNL , + vec4 _overDarkPSSM +) +{ // Compute shadow map coordinate - vec4 pxlPosLightProj = tMul(worldToLightProj, worldPos); + vec4 pxlPosLightProj = tMul(_worldToLightProj, _worldPos); vec2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; - // Distance to light, in shadowmap space + // Distance to light, in shadowMap space float distToLight = pxlPosLightProj.z / pxlPosLightProj.w; - // Figure out which split to sample from. Basically, we compute the shadowmap sample coord + // Figure out which split to sample from. Basically, we compute the shadowMap sample coord // for all of the splits and then check if its valid. vec4 shadowCoordX = vec4( baseShadowCoord.x ); vec4 shadowCoordY = vec4( baseShadowCoord.y ); vec4 farPlaneDists = vec4( distToLight ); - shadowCoordX *= scaleX; - shadowCoordY *= scaleY; - shadowCoordX += offsetX; - shadowCoordY += offsetY; - farPlaneDists *= farPlaneScalePSSM; + shadowCoordX *= _scaleX; + shadowCoordY *= _scaleY; + shadowCoordX += _offsetX; + shadowCoordY += _offsetY; + farPlaneDists *= _farPlaneScalePSSM; // If the shadow sample is within -1..1 and the distance // to the light for this pixel is less than the far plane @@ -132,6 +129,11 @@ void main() else finalMask = vec4(0, 0, 0, 1); + vec3 debugColor = vec3(0); + + #ifdef NO_SHADOW + debugColor = vec3(1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -144,50 +146,122 @@ void main() debugColor += vec3( 1, 1, 0 ); #endif - // Here we know what split we're sampling from, so recompute the texcoord location + // Here we know what split we're sampling from, so recompute the _texCoord location // Yes, we could just use the result from above, but doing it this way actually saves // shader instructions. vec2 finalScale; - finalScale.x = dot(finalMask, scaleX); - finalScale.y = dot(finalMask, scaleY); + finalScale.x = dot(finalMask, _scaleX); + finalScale.y = dot(finalMask, _scaleY); vec2 finalOffset; - finalOffset.x = dot(finalMask, offsetX); - finalOffset.y = dot(finalMask, offsetY); + finalOffset.x = dot(finalMask, _offsetX); + finalOffset.y = dot(finalMask, _offsetY); vec2 shadowCoord; shadowCoord = baseShadowCoord * finalScale; shadowCoord += finalOffset; - // Convert to texcoord space + // Convert to _texCoord space shadowCoord = 0.5 * shadowCoord + vec2(0.5, 0.5); shadowCoord.y = 1.0f - shadowCoord.y; // Move around inside of atlas vec2 aOffset; - aOffset.x = dot(finalMask, atlasXOffset); - aOffset.y = dot(finalMask, atlasYOffset); + aOffset.x = dot(finalMask, _atlasXOffset); + aOffset.y = dot(finalMask, _atlasYOffset); - shadowCoord *= atlasScale; + shadowCoord *= _atlasScale; shadowCoord += aOffset; // Each split has a different far plane, take this into account. - float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); + float farPlaneScale = dot( _farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; - float shadowed = softShadow_filter( ShadowMap, - uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); - + return vec4(debugColor, + softShadow_filter( _sourceshadowMap, + _texCoord, + shadowCoord, + farPlaneScale * _shadowSoftness, + distToLight, + _dotNL, + dot( finalMask, _overDarkPSSM ) ) ); +} + +out vec4 OUT_col; +void main() +{ + // Sample/unpack the normal/z data + vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); + vec3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + vec3 debugColor = vec3(0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = vec3(1.0); + #endif + + #else + + vec4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + + + vec4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif + // Fade out the shadow at the end of the range. vec4 zDist = vec4(zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = mix( shadowed, 1.0, saturate( fadeOutAmt ) ); - + + static_shadowed = mix( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = mix( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); + #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) debugColor = vec3(1.0); @@ -228,7 +302,7 @@ void main() #ifdef PSSM_DEBUG_RENDER lightColorOut = debugColor; #endif - + OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl index fbfced0978..48c0d76e3c 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -27,7 +27,7 @@ #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { @@ -40,7 +40,7 @@ struct ConvexConnectP #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform samplerCUBE cookieMap : register(S2); +uniform samplerCUBE cookieMap : register(S3); #endif @@ -114,6 +114,7 @@ float4 main( ConvexConnectP IN, uniform samplerCUBE shadowMap : register(S1), #else uniform sampler2D shadowMap : register(S1), + uniform sampler2D dynamicShadowMap : register(S2), #endif uniform float4 rtParams0, @@ -127,6 +128,7 @@ float4 main( ConvexConnectP IN, uniform float4 vsFarPlane, uniform float3x3 viewToLightProj, + uniform float3x3 dynamicViewToLightProj, uniform float4 lightParams, uniform float shadowSoftness ) : COLOR0 @@ -134,7 +136,7 @@ float4 main( ConvexConnectP IN, // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); - + // Sample/unpack the normal/z data float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; @@ -178,9 +180,9 @@ float4 main( ConvexConnectP IN, #else + // Static float2 shadowCoord = decodeShadowCoord( mul( viewToLightProj, -lightVec ) ).xy; - - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -188,17 +190,30 @@ float4 main( ConvexConnectP IN, nDotL, lightParams.y ); + // Dynamic + float2 dynamicShadowCoord = decodeShadowCoord( mul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); + #endif #endif // !NO_SHADOW + float3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. float4 cookie = texCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -216,7 +231,7 @@ float4 main( ConvexConnectP IN, normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float3 lightColorOut = lightMapParams.rgb * lightcol; float4 addToResult = 0.0; // TODO: This needs to be removed when lightmapping is disabled diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl index 0e8ecabaae..36bffbfd97 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl @@ -69,7 +69,7 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] = /// The texture used to do per-pixel pseudorandom /// rotations of the filter taps. -uniform sampler2D gTapRotationTex : register(S3); +uniform sampler2D gTapRotationTex : register(S4); float softShadow_sampleTaps( sampler2D shadowMap, diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl index 88e35ad3aa..33c7f333e1 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -27,7 +27,7 @@ #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { @@ -39,7 +39,7 @@ struct ConvexConnectP #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform sampler2D cookieMap : register(S2); +uniform sampler2D cookieMap : register(S3); #endif @@ -48,6 +48,7 @@ float4 main( ConvexConnectP IN, uniform sampler2D prePassBuffer : register(S0), uniform sampler2D shadowMap : register(S1), + uniform sampler2D dynamicShadowMap : register(S2), uniform float4 rtParams0, @@ -62,6 +63,7 @@ float4 main( ConvexConnectP IN, uniform float4 vsFarPlane, uniform float4x4 viewToLightProj, + uniform float4x4 dynamicViewToLightProj, uniform float4 lightParams, uniform float shadowSoftness ) : COLOR0 @@ -101,6 +103,11 @@ float4 main( ConvexConnectP IN, float2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + float4 dynpxlPosLightProj = mul( dynamicViewToLightProj, float4( viewSpacePos, 1 ) ); + float2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; + #ifdef NO_SHADOW float shadowed = 1.0; @@ -110,23 +117,32 @@ float4 main( ConvexConnectP IN, // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, distToLight, nDotL, lightParams.y ); - + + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW + float3 lightcol = lightColor.rgb; #ifdef USE_COOKIE_TEX // Lookup the cookie sample. float4 cookie = tex2D( cookieMap, shadowCoord ); // Multiply the light with the cookie tex. - lightColor.rgb *= cookie.rgb; + lightcol *= cookie.rgb; // Use a maximum channel luminance to attenuate // the lighting else we get specular in the dark @@ -144,7 +160,7 @@ float4 main( ConvexConnectP IN, normalize( -eyeRay ) ) * lightBrightness * atten * shadowed; float Sat_NL_Att = saturate( nDotL * atten * shadowed ) * lightBrightness; - float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float3 lightColorOut = lightMapParams.rgb * lightcol; float4 addToResult = 0.0; // TODO: This needs to be removed when lightmapping is disabled diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 266cc64384..1b45485754 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -30,68 +30,31 @@ #include "softShadow.hlsl" -uniform sampler2D ShadowMap : register(S1); +uniform sampler2D shadowMap : register(S1); +uniform sampler2D dynamicShadowMap : register(S2); #ifdef USE_SSAO_MASK -uniform sampler2D ssaoMask : register(S2); +uniform sampler2D ssaoMask : register(S3); uniform float4 rtParams2; #endif - -float4 main( FarFrustumQuadConnectP IN, - - uniform sampler2D prePassBuffer : register(S0), - - uniform float3 lightDirection, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float4 lightAmbient, - - uniform float3 eyePosWorld, - - uniform float4x4 worldToLightProj, - - uniform float4 scaleX, - uniform float4 scaleY, - uniform float4 offsetX, - uniform float4 offsetY, - uniform float4 atlasXOffset, - uniform float4 atlasYOffset, - uniform float2 atlasScale, - uniform float4 zNearFarInvNearFar, - uniform float4 lightMapParams, - - uniform float2 fadeStartLength, - uniform float4 farPlaneScalePSSM, - uniform float4 overDarkPSSM, - uniform float shadowSoftness ) : COLOR0 +float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, + float2 texCoord, + float4x4 worldToLightProj, + float4 worldPos, + float4 scaleX, + float4 scaleY, + float4 offsetX, + float4 offsetY, + float4 farPlaneScalePSSM, + float4 atlasXOffset, + float4 atlasYOffset, + float2 atlasScale, + float shadowSoftness, + float dotNL , + float4 overDarkPSSM +) { - // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); - float3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - float3 debugColor = 0; - #endif - - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; - - #ifdef PSSM_DEBUG_RENDER - debugColor = 1.0; - #endif - - #else - // Compute shadow map coordinate float4 pxlPosLightProj = mul(worldToLightProj, worldPos); float2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; @@ -132,6 +95,11 @@ float4 main( FarFrustumQuadConnectP IN, else finalMask = float4(0, 0, 0, 1); + float3 debugColor = float3(0,0,0); + + #ifdef NO_SHADOW + debugColor = float3(1.0,1.0,1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -174,19 +142,125 @@ float4 main( FarFrustumQuadConnectP IN, // Each split has a different far plane, take this into account. float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; + + return float4(debugColor, + softShadow_filter( sourceShadowMap, + texCoord, + shadowCoord, + farPlaneScale * shadowSoftness, + distToLight, + dotNL, + dot( finalMask, overDarkPSSM ) ) ); +}; + +float4 main( FarFrustumQuadConnectP IN, + + uniform sampler2D prePassBuffer : register(S0), + + uniform float3 lightDirection, + uniform float4 lightColor, + uniform float lightBrightness, + uniform float4 lightAmbient, + uniform float4x4 eyeMat, + + uniform float3 eyePosWorld, + uniform float4 atlasXOffset, + uniform float4 atlasYOffset, + uniform float2 atlasScale, + uniform float4 zNearFarInvNearFar, + uniform float4 lightMapParams, + uniform float2 fadeStartLength, + uniform float4 overDarkPSSM, + uniform float shadowSoftness, + + // Static Shadows + uniform float4x4 worldToLightProj, + uniform float4 scaleX, + uniform float4 scaleY, + uniform float4 offsetX, + uniform float4 offsetY, + uniform float4 farPlaneScalePSSM, + + // Dynamic Shadows + uniform float4x4 dynamicWorldToLightProj, + uniform float4 dynamicScaleX, + uniform float4 dynamicScaleY, + uniform float4 dynamicOffsetX, + uniform float4 dynamicOffsetY, + uniform float4 dynamicFarPlaneScalePSSM + + ) : COLOR0 +{ + // Sample/unpack the normal/z data + float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); + float3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + float3 debugColor = float3(0,0,0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = float3(1.0,1.0,1.0); + #endif + + #else + + float4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + IN.uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + + float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + IN.uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); - float shadowed = softShadow_filter( ShadowMap, - IN.uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif // Fade out the shadow at the end of the range. float4 zDist = (zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = lerp( shadowed, 1.0, saturate( fadeOutAmt ) ); + + static_shadowed = lerp( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = lerp( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) diff --git a/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index b4b006904f..2062f43f30 100644 --- a/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -3309,7 +3309,7 @@ HorizSizing = "width"; VertSizing = "bottom"; Position = "0 0"; - Extent = "210 71"; + Extent = "210 89"; new GuiPopUpMenuCtrl() { internalName = "blendingTypePopUp"; @@ -3480,7 +3480,7 @@ Visible = "1"; Command = "MaterialEditorGui.updateActiveMaterial(\"castShadows\", $ThisControl.getValue());"; tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Alows object to cast shadows."; + ToolTip = "Object casts shadows."; hovertime = "1000"; text = "Cast Shadows"; groupNum = "-1"; @@ -3488,6 +3488,29 @@ useMouseEvents = "0"; useInactiveState = "0"; }; + new GuiCheckBoxCtrl() { + canSaveDynamicFields = "0"; + internalName = "castDynamicShadows"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiCheckBoxProfile"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "3 70"; + Extent = "112 16"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "MaterialEditorGui.updateActiveMaterial(\"castDynamicShadows\", $ThisControl.getValue());"; + tooltipprofile = "ToolsGuiDefaultProfile"; + ToolTip = "Object casts dynamic shadows."; + hovertime = "1000"; + text = "Dynamic Shadows"; + groupNum = "-1"; + buttonType = "ToggleButton"; + useMouseEvents = "0"; + useInactiveState = "0"; + }; new GuiCheckBoxCtrl() { canSaveDynamicFields = "0"; internalName = "doubleSidedCheckBox"; diff --git a/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs b/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs index 6b055d05c5..be7d55c393 100644 --- a/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs +++ b/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs @@ -754,6 +754,7 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->transZWriteCheckBox.setValue((%material).translucentZWrite); MaterialEditorPropertiesWindow-->alphaTestCheckBox.setValue((%material).alphaTest); MaterialEditorPropertiesWindow-->castShadows.setValue((%material).castShadows); + MaterialEditorPropertiesWindow-->castDynamicShadows.setValue((%material).castDynamicShadows); MaterialEditorPropertiesWindow-->translucentCheckbox.setValue((%material).translucent); switch$((%material).translucentBlendOp) diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs index 7fda56235a..2e73b65696 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs @@ -62,9 +62,10 @@ OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/vectorLightP.glsl"; samplerNames[0] = "$prePassBuffer"; - samplerNames[1] = "$ShadowMap"; - samplerNames[2] = "$ssaoMask"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[1] = "$shadowMap"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$ssaoMask"; + samplerNames[4] = "$gTapRotationTex"; pixVersion = 3.0; }; @@ -75,7 +76,8 @@ stateBlock = AL_VectorLightState; sampler["prePassBuffer"] = "#prepass"; - sampler["ShadowMap"] = "$dynamiclight"; + sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["ssaoMask"] = "#ssaoMask"; target = "lightinfo"; @@ -128,8 +130,9 @@ samplerNames[0] = "$prePassBuffer"; samplerNames[1] = "$shadowMap"; - samplerNames[2] = "$cookieMap"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$cookieMap"; + samplerNames[4] = "$gTapRotationTex"; pixVersion = 3.0; }; @@ -141,6 +144,7 @@ sampler["prePassBuffer"] = "#prepass"; sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; target = "lightinfo"; @@ -159,8 +163,9 @@ samplerNames[0] = "$prePassBuffer"; samplerNames[1] = "$shadowMap"; - samplerNames[2] = "$cookieMap"; - samplerNames[3] = "$gTapRotationTex"; + samplerNames[2] = "$dynamicShadowMap"; + samplerNames[3] = "$cookieMap"; + samplerNames[4] = "$gTapRotationTex"; pixVersion = 3.0; }; @@ -172,6 +177,7 @@ sampler["prePassBuffer"] = "#prepass"; sampler["shadowMap"] = "$dynamiclight"; + sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; target = "lightinfo"; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl index 2c8e43736b..92c9369a76 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl @@ -28,6 +28,7 @@ #include "../../../gl/lighting.glsl" #include "../../shadowMap/shadowMapIO_GLSL.h" #include "softShadow.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; @@ -107,6 +108,7 @@ uniform sampler2D prePassBuffer; uniform samplerCube shadowMap; #else uniform sampler2D shadowMap; + uniform sampler2D dynamicShadowMap; #endif uniform vec4 rtParams0; @@ -119,6 +121,7 @@ uniform vec2 lightAttenuation; uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat3 viewToLightProj; +uniform mat3 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; @@ -175,7 +178,7 @@ void main() vec2 shadowCoord = decodeShadowCoord( tMul( viewToLightProj, -lightVec ) ).xy; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -183,6 +186,16 @@ void main() nDotL, lightParams.y ); + vec2 dynamicShadowCoord = decodeShadowCoord( tMul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); #endif #endif // !NO_SHADOW diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl index 91bc5915ab..29c278508d 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl @@ -27,6 +27,7 @@ #include "shadergen:/autogenConditioners.h" #include "softShadow.glsl" #include "../../../gl/lighting.glsl" +#include "../../../gl/torque.glsl" in vec4 wsEyeDir; in vec4 ssPos; @@ -45,6 +46,7 @@ uniform sampler2D cookieMap; uniform sampler2D prePassBuffer; uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; uniform vec4 rtParams0; @@ -59,6 +61,7 @@ uniform vec4 lightMapParams; uniform vec4 vsFarPlane; uniform mat4 viewToLightProj; +uniform mat4 dynamicViewToLightProj; uniform vec4 lightParams; uniform float shadowSoftness; @@ -70,7 +73,7 @@ void main() // Compute scene UV vec3 ssPos = IN_ssPos.xyz / IN_ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); - + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -102,6 +105,10 @@ void main() vec2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + vec4 dynpxlPosLightProj = tMul( dynamicViewToLightProj, vec4( viewSpacePos, 1 ) ); + vec2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + vec2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; #ifdef NO_SHADOW float shadowed = 1.0; @@ -111,7 +118,7 @@ void main() // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -119,6 +126,14 @@ void main() nDotL, lightParams.y ); + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW vec3 lightcol = lightColor.rgb; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl index eab364cd5b..4eb4973a3c 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl @@ -34,81 +34,78 @@ in vec2 uv0; in vec3 wsEyeRay; in vec3 vsEyeRay; -uniform sampler2D ShadowMap ; +uniform sampler2D shadowMap; +uniform sampler2D dynamicShadowMap; #ifdef USE_SSAO_MASK uniform sampler2D ssaoMask ; uniform vec4 rtParams2; #endif -uniform sampler2D prePassBuffer; +uniform sampler2D prePassBuffer; uniform vec3 lightDirection; uniform vec4 lightColor; uniform float lightBrightness; uniform vec4 lightAmbient; uniform vec3 eyePosWorld; -uniform mat4x4 worldToLightProj; -uniform vec4 scaleX; -uniform vec4 scaleY; -uniform vec4 offsetX; -uniform vec4 offsetY; +uniform mat4x4 eyeMat; uniform vec4 atlasXOffset; uniform vec4 atlasYOffset; uniform vec2 atlasScale; uniform vec4 zNearFarInvNearFar; uniform vec4 lightMapParams; uniform vec2 fadeStartLength; -uniform vec4 farPlaneScalePSSM; uniform vec4 overDarkPSSM; uniform float shadowSoftness; - -out vec4 OUT_col; - -void main() -{ - // Sample/unpack the normal/z data - vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); - vec3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - vec3 debugColor = vec3(0); - #endif - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; +//static shadowMap +uniform mat4x4 worldToLightProj; +uniform vec4 scaleX; +uniform vec4 scaleY; +uniform vec4 offsetX; +uniform vec4 offsetY; +uniform vec4 farPlaneScalePSSM; - #ifdef PSSM_DEBUG_RENDER - debugColor = vec3(1.0); - #endif +//dynamic shadowMap +uniform mat4x4 dynamicWorldToLightProj; +uniform vec4 dynamicScaleX; +uniform vec4 dynamicScaleY; +uniform vec4 dynamicOffsetX; +uniform vec4 dynamicOffsetY; +uniform vec4 dynamicFarPlaneScalePSSM; - #else +vec4 AL_VectorLightShadowCast( sampler2D _sourceshadowMap, + vec2 _texCoord, + mat4 _worldToLightProj, + vec4 _worldPos, + vec4 _scaleX, vec4 _scaleY, + vec4 _offsetX, vec4 _offsetY, + vec4 _farPlaneScalePSSM, + vec4 _atlasXOffset, vec4 _atlasYOffset, + vec2 _atlasScale, + float _shadowSoftness, + float _dotNL , + vec4 _overDarkPSSM +) +{ // Compute shadow map coordinate - vec4 pxlPosLightProj = tMul(worldToLightProj, worldPos); + vec4 pxlPosLightProj = tMul(_worldToLightProj, _worldPos); vec2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; - // Distance to light, in shadowmap space + // Distance to light, in shadowMap space float distToLight = pxlPosLightProj.z / pxlPosLightProj.w; - // Figure out which split to sample from. Basically, we compute the shadowmap sample coord + // Figure out which split to sample from. Basically, we compute the shadowMap sample coord // for all of the splits and then check if its valid. vec4 shadowCoordX = vec4( baseShadowCoord.x ); vec4 shadowCoordY = vec4( baseShadowCoord.y ); vec4 farPlaneDists = vec4( distToLight ); - shadowCoordX *= scaleX; - shadowCoordY *= scaleY; - shadowCoordX += offsetX; - shadowCoordY += offsetY; - farPlaneDists *= farPlaneScalePSSM; + shadowCoordX *= _scaleX; + shadowCoordY *= _scaleY; + shadowCoordX += _offsetX; + shadowCoordY += _offsetY; + farPlaneDists *= _farPlaneScalePSSM; // If the shadow sample is within -1..1 and the distance // to the light for this pixel is less than the far plane @@ -132,6 +129,11 @@ void main() else finalMask = vec4(0, 0, 0, 1); + vec3 debugColor = vec3(0); + + #ifdef NO_SHADOW + debugColor = vec3(1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -144,50 +146,122 @@ void main() debugColor += vec3( 1, 1, 0 ); #endif - // Here we know what split we're sampling from, so recompute the texcoord location + // Here we know what split we're sampling from, so recompute the _texCoord location // Yes, we could just use the result from above, but doing it this way actually saves // shader instructions. vec2 finalScale; - finalScale.x = dot(finalMask, scaleX); - finalScale.y = dot(finalMask, scaleY); + finalScale.x = dot(finalMask, _scaleX); + finalScale.y = dot(finalMask, _scaleY); vec2 finalOffset; - finalOffset.x = dot(finalMask, offsetX); - finalOffset.y = dot(finalMask, offsetY); + finalOffset.x = dot(finalMask, _offsetX); + finalOffset.y = dot(finalMask, _offsetY); vec2 shadowCoord; shadowCoord = baseShadowCoord * finalScale; shadowCoord += finalOffset; - // Convert to texcoord space + // Convert to _texCoord space shadowCoord = 0.5 * shadowCoord + vec2(0.5, 0.5); shadowCoord.y = 1.0f - shadowCoord.y; // Move around inside of atlas vec2 aOffset; - aOffset.x = dot(finalMask, atlasXOffset); - aOffset.y = dot(finalMask, atlasYOffset); + aOffset.x = dot(finalMask, _atlasXOffset); + aOffset.y = dot(finalMask, _atlasYOffset); - shadowCoord *= atlasScale; + shadowCoord *= _atlasScale; shadowCoord += aOffset; // Each split has a different far plane, take this into account. - float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); + float farPlaneScale = dot( _farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; - float shadowed = softShadow_filter( ShadowMap, - uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); - + return vec4(debugColor, + softShadow_filter( _sourceshadowMap, + _texCoord, + shadowCoord, + farPlaneScale * _shadowSoftness, + distToLight, + _dotNL, + dot( finalMask, _overDarkPSSM ) ) ); +} + +out vec4 OUT_col; +void main() +{ + // Sample/unpack the normal/z data + vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); + vec3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + vec4 worldPos = vec4(eyePosWorld + wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + vec3 debugColor = vec3(0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = vec3(1.0); + #endif + + #else + + vec4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + + + vec4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif + // Fade out the shadow at the end of the range. vec4 zDist = vec4(zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = mix( shadowed, 1.0, saturate( fadeOutAmt ) ); - + + static_shadowed = mix( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = mix( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); + #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) debugColor = vec3(1.0); @@ -228,7 +302,7 @@ void main() #ifdef PSSM_DEBUG_RENDER lightColorOut = debugColor; #endif - + OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl index ff1f3d437e..48c0d76e3c 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -27,7 +27,7 @@ #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { @@ -40,7 +40,7 @@ struct ConvexConnectP #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform samplerCUBE cookieMap : register(S2); +uniform samplerCUBE cookieMap : register(S3); #endif @@ -114,6 +114,7 @@ float4 main( ConvexConnectP IN, uniform samplerCUBE shadowMap : register(S1), #else uniform sampler2D shadowMap : register(S1), + uniform sampler2D dynamicShadowMap : register(S2), #endif uniform float4 rtParams0, @@ -127,6 +128,7 @@ float4 main( ConvexConnectP IN, uniform float4 vsFarPlane, uniform float3x3 viewToLightProj, + uniform float3x3 dynamicViewToLightProj, uniform float4 lightParams, uniform float shadowSoftness ) : COLOR0 @@ -134,7 +136,7 @@ float4 main( ConvexConnectP IN, // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); - + // Sample/unpack the normal/z data float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; @@ -178,9 +180,9 @@ float4 main( ConvexConnectP IN, #else + // Static float2 shadowCoord = decodeShadowCoord( mul( viewToLightProj, -lightVec ) ).xy; - - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, @@ -188,6 +190,18 @@ float4 main( ConvexConnectP IN, nDotL, lightParams.y ); + // Dynamic + float2 dynamicShadowCoord = decodeShadowCoord( mul( dynamicViewToLightProj, -lightVec ) ).xy; + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynamicShadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + + float shadowed = min(static_shadowed, dynamic_shadowed); + #endif #endif // !NO_SHADOW diff --git a/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl index 0e8ecabaae..36bffbfd97 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl @@ -69,7 +69,7 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] = /// The texture used to do per-pixel pseudorandom /// rotations of the filter taps. -uniform sampler2D gTapRotationTex : register(S3); +uniform sampler2D gTapRotationTex : register(S4); float softShadow_sampleTaps( sampler2D shadowMap, diff --git a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl index 1f1c8e1408..33c7f333e1 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -27,7 +27,7 @@ #include "../../lighting.hlsl" #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - +#include "../../torque.hlsl" struct ConvexConnectP { @@ -39,7 +39,7 @@ struct ConvexConnectP #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform sampler2D cookieMap : register(S2); +uniform sampler2D cookieMap : register(S3); #endif @@ -48,6 +48,7 @@ float4 main( ConvexConnectP IN, uniform sampler2D prePassBuffer : register(S0), uniform sampler2D shadowMap : register(S1), + uniform sampler2D dynamicShadowMap : register(S2), uniform float4 rtParams0, @@ -62,6 +63,7 @@ float4 main( ConvexConnectP IN, uniform float4 vsFarPlane, uniform float4x4 viewToLightProj, + uniform float4x4 dynamicViewToLightProj, uniform float4 lightParams, uniform float shadowSoftness ) : COLOR0 @@ -101,6 +103,11 @@ float4 main( ConvexConnectP IN, float2 shadowCoord = ( ( pxlPosLightProj.xy / pxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); shadowCoord.y = 1.0f - shadowCoord.y; + // Get the dynamic shadow texture coordinate + float4 dynpxlPosLightProj = mul( dynamicViewToLightProj, float4( viewSpacePos, 1 ) ); + float2 dynshadowCoord = ( ( dynpxlPosLightProj.xy / dynpxlPosLightProj.w ) * 0.5 ) + float2( 0.5, 0.5 ); + dynshadowCoord.y = 1.0f - dynshadowCoord.y; + #ifdef NO_SHADOW float shadowed = 1.0; @@ -110,14 +117,22 @@ float4 main( ConvexConnectP IN, // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( shadowMap, ssPos.xy, shadowCoord, shadowSoftness, distToLight, nDotL, lightParams.y ); - + + float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + ssPos.xy, + dynshadowCoord, + shadowSoftness, + distToLight, + nDotL, + lightParams.y ); + float shadowed = min(static_shadowed, dynamic_shadowed); #endif // !NO_SHADOW float3 lightcol = lightColor.rgb; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 266cc64384..1b45485754 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -30,68 +30,31 @@ #include "softShadow.hlsl" -uniform sampler2D ShadowMap : register(S1); +uniform sampler2D shadowMap : register(S1); +uniform sampler2D dynamicShadowMap : register(S2); #ifdef USE_SSAO_MASK -uniform sampler2D ssaoMask : register(S2); +uniform sampler2D ssaoMask : register(S3); uniform float4 rtParams2; #endif - -float4 main( FarFrustumQuadConnectP IN, - - uniform sampler2D prePassBuffer : register(S0), - - uniform float3 lightDirection, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float4 lightAmbient, - - uniform float3 eyePosWorld, - - uniform float4x4 worldToLightProj, - - uniform float4 scaleX, - uniform float4 scaleY, - uniform float4 offsetX, - uniform float4 offsetY, - uniform float4 atlasXOffset, - uniform float4 atlasYOffset, - uniform float2 atlasScale, - uniform float4 zNearFarInvNearFar, - uniform float4 lightMapParams, - - uniform float2 fadeStartLength, - uniform float4 farPlaneScalePSSM, - uniform float4 overDarkPSSM, - uniform float shadowSoftness ) : COLOR0 +float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, + float2 texCoord, + float4x4 worldToLightProj, + float4 worldPos, + float4 scaleX, + float4 scaleY, + float4 offsetX, + float4 offsetY, + float4 farPlaneScalePSSM, + float4 atlasXOffset, + float4 atlasYOffset, + float2 atlasScale, + float shadowSoftness, + float dotNL , + float4 overDarkPSSM +) { - // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); - float3 normal = prepassSample.rgb; - float depth = prepassSample.a; - - // Use eye ray to get ws pos - float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); - - // Get the light attenuation. - float dotNL = dot(-lightDirection, normal); - - #ifdef PSSM_DEBUG_RENDER - float3 debugColor = 0; - #endif - - #ifdef NO_SHADOW - - // Fully unshadowed. - float shadowed = 1.0; - - #ifdef PSSM_DEBUG_RENDER - debugColor = 1.0; - #endif - - #else - // Compute shadow map coordinate float4 pxlPosLightProj = mul(worldToLightProj, worldPos); float2 baseShadowCoord = pxlPosLightProj.xy / pxlPosLightProj.w; @@ -132,6 +95,11 @@ float4 main( FarFrustumQuadConnectP IN, else finalMask = float4(0, 0, 0, 1); + float3 debugColor = float3(0,0,0); + + #ifdef NO_SHADOW + debugColor = float3(1.0,1.0,1.0); + #endif #ifdef PSSM_DEBUG_RENDER if ( finalMask.x > 0 ) @@ -174,19 +142,125 @@ float4 main( FarFrustumQuadConnectP IN, // Each split has a different far plane, take this into account. float farPlaneScale = dot( farPlaneScalePSSM, finalMask ); distToLight *= farPlaneScale; + + return float4(debugColor, + softShadow_filter( sourceShadowMap, + texCoord, + shadowCoord, + farPlaneScale * shadowSoftness, + distToLight, + dotNL, + dot( finalMask, overDarkPSSM ) ) ); +}; + +float4 main( FarFrustumQuadConnectP IN, + + uniform sampler2D prePassBuffer : register(S0), + + uniform float3 lightDirection, + uniform float4 lightColor, + uniform float lightBrightness, + uniform float4 lightAmbient, + uniform float4x4 eyeMat, + + uniform float3 eyePosWorld, + uniform float4 atlasXOffset, + uniform float4 atlasYOffset, + uniform float2 atlasScale, + uniform float4 zNearFarInvNearFar, + uniform float4 lightMapParams, + uniform float2 fadeStartLength, + uniform float4 overDarkPSSM, + uniform float shadowSoftness, + + // Static Shadows + uniform float4x4 worldToLightProj, + uniform float4 scaleX, + uniform float4 scaleY, + uniform float4 offsetX, + uniform float4 offsetY, + uniform float4 farPlaneScalePSSM, + + // Dynamic Shadows + uniform float4x4 dynamicWorldToLightProj, + uniform float4 dynamicScaleX, + uniform float4 dynamicScaleY, + uniform float4 dynamicOffsetX, + uniform float4 dynamicOffsetY, + uniform float4 dynamicFarPlaneScalePSSM + + ) : COLOR0 +{ + // Sample/unpack the normal/z data + float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); + float3 normal = prepassSample.rgb; + float depth = prepassSample.a; + + // Use eye ray to get ws pos + float4 worldPos = float4(eyePosWorld + IN.wsEyeRay * depth, 1.0f); + + // Get the light attenuation. + float dotNL = dot(-lightDirection, normal); + + #ifdef PSSM_DEBUG_RENDER + float3 debugColor = float3(0,0,0); + #endif + + #ifdef NO_SHADOW + + // Fully unshadowed. + float shadowed = 1.0; + + #ifdef PSSM_DEBUG_RENDER + debugColor = float3(1.0,1.0,1.0); + #endif + + #else + + float4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + IN.uv0.xy, + worldToLightProj, + worldPos, + scaleX, scaleY, + offsetX, offsetY, + farPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); + + float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + IN.uv0.xy, + dynamicWorldToLightProj, + worldPos, + dynamicScaleX, dynamicScaleY, + dynamicOffsetX, dynamicOffsetY, + dynamicFarPlaneScalePSSM, + atlasXOffset, atlasYOffset, + atlasScale, + shadowSoftness, + dotNL, + overDarkPSSM); - float shadowed = softShadow_filter( ShadowMap, - IN.uv0.xy, - shadowCoord, - farPlaneScale * shadowSoftness, - distToLight, - dotNL, - dot( finalMask, overDarkPSSM ) ); + float static_shadowed = static_shadowed_colors.a; + float dynamic_shadowed = dynamic_shadowed_colors.a; + + #ifdef PSSM_DEBUG_RENDER + debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; + #endif // Fade out the shadow at the end of the range. float4 zDist = (zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; - shadowed = lerp( shadowed, 1.0, saturate( fadeOutAmt ) ); + + static_shadowed = lerp( static_shadowed, 1.0, saturate( fadeOutAmt ) ); + dynamic_shadowed = lerp( dynamic_shadowed, 1.0, saturate( fadeOutAmt ) ); + + // temp for debugging. uncomment one or the other. + //float shadowed = static_shadowed; + //float shadowed = dynamic_shadowed; + float shadowed = min(static_shadowed, dynamic_shadowed); #ifdef PSSM_DEBUG_RENDER if ( fadeOutAmt > 1.0 ) diff --git a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index b4b006904f..2062f43f30 100644 --- a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -3309,7 +3309,7 @@ HorizSizing = "width"; VertSizing = "bottom"; Position = "0 0"; - Extent = "210 71"; + Extent = "210 89"; new GuiPopUpMenuCtrl() { internalName = "blendingTypePopUp"; @@ -3480,7 +3480,7 @@ Visible = "1"; Command = "MaterialEditorGui.updateActiveMaterial(\"castShadows\", $ThisControl.getValue());"; tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Alows object to cast shadows."; + ToolTip = "Object casts shadows."; hovertime = "1000"; text = "Cast Shadows"; groupNum = "-1"; @@ -3488,6 +3488,29 @@ useMouseEvents = "0"; useInactiveState = "0"; }; + new GuiCheckBoxCtrl() { + canSaveDynamicFields = "0"; + internalName = "castDynamicShadows"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiCheckBoxProfile"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "3 70"; + Extent = "112 16"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "MaterialEditorGui.updateActiveMaterial(\"castDynamicShadows\", $ThisControl.getValue());"; + tooltipprofile = "ToolsGuiDefaultProfile"; + ToolTip = "Object casts dynamic shadows."; + hovertime = "1000"; + text = "Dynamic Shadows"; + groupNum = "-1"; + buttonType = "ToggleButton"; + useMouseEvents = "0"; + useInactiveState = "0"; + }; new GuiCheckBoxCtrl() { canSaveDynamicFields = "0"; internalName = "doubleSidedCheckBox"; diff --git a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs index 6b055d05c5..be7d55c393 100644 --- a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs +++ b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs @@ -754,6 +754,7 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->transZWriteCheckBox.setValue((%material).translucentZWrite); MaterialEditorPropertiesWindow-->alphaTestCheckBox.setValue((%material).alphaTest); MaterialEditorPropertiesWindow-->castShadows.setValue((%material).castShadows); + MaterialEditorPropertiesWindow-->castDynamicShadows.setValue((%material).castDynamicShadows); MaterialEditorPropertiesWindow-->translucentCheckbox.setValue((%material).translucent); switch$((%material).translucentBlendOp) From dd3c20ece6a3f9d7124a7cd3c97b64e99c0ed0a3 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 14 Oct 2015 10:11:58 -0500 Subject: [PATCH 059/324] transcription error was messing with addProtectedField for arrays --- Engine/source/console/consoleObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/console/consoleObject.cpp b/Engine/source/console/consoleObject.cpp index 35acf96d1e..43ffda2933 100644 --- a/Engine/source/console/consoleObject.cpp +++ b/Engine/source/console/consoleObject.cpp @@ -576,7 +576,7 @@ void ConsoleObject::addProtectedField(const char* in_pFieldname, in_setDataFn, in_getDataFn, &defaultProtectedWriteFn, - 1, + in_elementCount, in_pFieldDocs, flags); } From 246785a8bf73ae3bc0445823e1d7c0fdcb9a6855 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Fri, 16 Oct 2015 21:30:39 +1000 Subject: [PATCH 060/324] Removed unused vertex formats from ScatterSky --- Engine/source/environment/scatterSky.cpp | 2 -- Engine/source/environment/scatterSky.h | 2 -- Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl | 5 ----- Templates/Empty/game/shaders/common/scatterSkyV.hlsl | 4 ---- Templates/Full/game/shaders/common/gl/scatterSkyV.glsl | 5 ----- Templates/Full/game/shaders/common/scatterSkyV.hlsl | 4 ---- 6 files changed, 22 deletions(-) diff --git a/Engine/source/environment/scatterSky.cpp b/Engine/source/environment/scatterSky.cpp index 3e2d2d890a..1db1afc43a 100644 --- a/Engine/source/environment/scatterSky.cpp +++ b/Engine/source/environment/scatterSky.cpp @@ -85,8 +85,6 @@ const F32 ScatterSky::smViewerHeight = 1.0f; GFXImplementVertexFormat( ScatterSkyVertex ) { addElement( "POSITION", GFXDeclType_Float3 ); - addElement( "NORMAL", GFXDeclType_Float3 ); - addElement( "COLOR", GFXDeclType_Color ); } ScatterSky::ScatterSky() diff --git a/Engine/source/environment/scatterSky.h b/Engine/source/environment/scatterSky.h index 66177851da..d6c252e1bd 100644 --- a/Engine/source/environment/scatterSky.h +++ b/Engine/source/environment/scatterSky.h @@ -61,8 +61,6 @@ class MatrixSet; GFXDeclareVertexFormat( ScatterSkyVertex ) { Point3F point; - VectorF normal; - GFXVertexColor color; }; class ScatterSky : public SceneObject, public ISceneLight diff --git a/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl b/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl index 61580d785d..252a2b1210 100644 --- a/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl +++ b/Templates/Empty/game/shaders/common/gl/scatterSkyV.glsl @@ -36,14 +36,9 @@ float vernierScale(float fCos) } in vec4 vPosition; -in vec3 vNormal; -in vec4 vColor; -in vec2 vTexCoord0; // This is the shader input vertex structure. #define IN_position vPosition -#define IN_normal vNormal -#define IN_color vColor // This is the shader output data. out vec4 rayleighColor; diff --git a/Templates/Empty/game/shaders/common/scatterSkyV.hlsl b/Templates/Empty/game/shaders/common/scatterSkyV.hlsl index dfec25d910..9f6f3ffc87 100644 --- a/Templates/Empty/game/shaders/common/scatterSkyV.hlsl +++ b/Templates/Empty/game/shaders/common/scatterSkyV.hlsl @@ -39,10 +39,6 @@ struct Vert { // .xyz = point float4 position : POSITION; - - float3 normal : NORMAL; - - float4 color : TEXCOORD0; }; // This is the shader output data. diff --git a/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl b/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl index 61580d785d..252a2b1210 100644 --- a/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl +++ b/Templates/Full/game/shaders/common/gl/scatterSkyV.glsl @@ -36,14 +36,9 @@ float vernierScale(float fCos) } in vec4 vPosition; -in vec3 vNormal; -in vec4 vColor; -in vec2 vTexCoord0; // This is the shader input vertex structure. #define IN_position vPosition -#define IN_normal vNormal -#define IN_color vColor // This is the shader output data. out vec4 rayleighColor; diff --git a/Templates/Full/game/shaders/common/scatterSkyV.hlsl b/Templates/Full/game/shaders/common/scatterSkyV.hlsl index dfec25d910..9f6f3ffc87 100644 --- a/Templates/Full/game/shaders/common/scatterSkyV.hlsl +++ b/Templates/Full/game/shaders/common/scatterSkyV.hlsl @@ -39,10 +39,6 @@ struct Vert { // .xyz = point float4 position : POSITION; - - float3 normal : NORMAL; - - float4 color : TEXCOORD0; }; // This is the shader output data. From 348a0f20d908aec7064e87a3b1bd67f69c7d8967 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sun, 18 Oct 2015 23:48:29 -0500 Subject: [PATCH 061/324] Looks like according to reports, they also weren't checking for physicsshapes. --- Templates/Full/game/scripts/server/radiusDamage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Templates/Full/game/scripts/server/radiusDamage.cs b/Templates/Full/game/scripts/server/radiusDamage.cs index db2573459c..91255f25c5 100644 --- a/Templates/Full/game/scripts/server/radiusDamage.cs +++ b/Templates/Full/game/scripts/server/radiusDamage.cs @@ -29,7 +29,7 @@ function radiusDamage(%sourceObject, %position, %radius, %damage, %damageType, % // Use the container system to iterate through all the objects // within our explosion radius. We'll apply damage to all ShapeBase // objects. - InitContainerRadiusSearch(%position, %radius, $TypeMasks::ShapeBaseObjectType); + InitContainerRadiusSearch(%position, %radius, $TypeMasks::ShapeBaseObjectType | $TypeMasks::DynamicShapeObjectType); %halfRadius = %radius / 2; while ((%targetObject = containerSearchNext()) != 0) From af9ad17ad6faeb258fee9ab5a580776185d3283f Mon Sep 17 00:00:00 2001 From: rextimmy Date: Mon, 19 Oct 2015 21:15:59 +1000 Subject: [PATCH 062/324] Replaced ScatterSkyVertex declaration with default GFXVertexP in ScatterSky. --- Engine/source/environment/scatterSky.cpp | 7 +------ Engine/source/environment/scatterSky.h | 8 +------- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/Engine/source/environment/scatterSky.cpp b/Engine/source/environment/scatterSky.cpp index 1db1afc43a..aebf9c6173 100644 --- a/Engine/source/environment/scatterSky.cpp +++ b/Engine/source/environment/scatterSky.cpp @@ -82,11 +82,6 @@ const F32 ScatterSky::smEarthRadius = (6378.0f * 1000.0f); const F32 ScatterSky::smAtmosphereRadius = 200000.0f; const F32 ScatterSky::smViewerHeight = 1.0f; -GFXImplementVertexFormat( ScatterSkyVertex ) -{ - addElement( "POSITION", GFXDeclType_Float3 ); -} - ScatterSky::ScatterSky() { mPrimCount = 0; @@ -759,7 +754,7 @@ void ScatterSky::_initVBIB() F32 zOffset = -( mCos( mSqrt( 1.0f ) ) + 0.01f ); mVB.set( GFX, mVertCount, GFXBufferTypeStatic ); - ScatterSkyVertex *pVert = mVB.lock(); + GFXVertexP *pVert = mVB.lock(); if(!pVert) return; for ( U32 y = 0; y < vertStride; y++ ) diff --git a/Engine/source/environment/scatterSky.h b/Engine/source/environment/scatterSky.h index d6c252e1bd..287f6db1a3 100644 --- a/Engine/source/environment/scatterSky.h +++ b/Engine/source/environment/scatterSky.h @@ -57,12 +57,6 @@ class TimeOfDay; class CubemapData; class MatrixSet; - -GFXDeclareVertexFormat( ScatterSkyVertex ) -{ - Point3F point; -}; - class ScatterSky : public SceneObject, public ISceneLight { typedef SceneObject Parent; @@ -226,7 +220,7 @@ class ScatterSky : public SceneObject, public ISceneLight // Prim buffer, vertex buffer and shader for rendering. GFXPrimitiveBufferHandle mPrimBuffer; - GFXVertexBufferHandle mVB; + GFXVertexBufferHandle mVB; GFXShaderRef mShader; GFXStateBlockRef mStateBlock; From 9c6ff1775b11c56f21980ea574c6f6ea450808fd Mon Sep 17 00:00:00 2001 From: rextimmy Date: Thu, 22 Oct 2015 21:54:35 +1000 Subject: [PATCH 063/324] Removed unused vertex colors from GFXWaterVertex --- Engine/source/environment/waterBlock.cpp | 3 --- Engine/source/environment/waterObject.cpp | 1 - Engine/source/environment/waterObject.h | 1 - Engine/source/environment/waterPlane.cpp | 6 ------ .../Empty/game/shaders/common/water/gl/waterBasicV.glsl | 1 - .../Full/game/shaders/common/water/gl/waterBasicV.glsl | 1 - 6 files changed, 13 deletions(-) diff --git a/Engine/source/environment/waterBlock.cpp b/Engine/source/environment/waterBlock.cpp index df692fad0d..1d2fa8f300 100644 --- a/Engine/source/environment/waterBlock.cpp +++ b/Engine/source/environment/waterBlock.cpp @@ -205,8 +205,6 @@ void WaterBlock::setupVertexBlock( U32 width, U32 height, U32 rowOffset ) U32 numVerts = width * height; GFXWaterVertex *verts = new GFXWaterVertex[ numVerts ]; - ColorI waterColor(31, 56, 64, 127); - GFXVertexColor vertCol(waterColor); U32 index = 0; for( U32 i=0; ipoint.x = vertX; vert->point.y = vertY; vert->point.z = 0.0; - vert->color = vertCol; vert->normal.set(0,0,1); vert->undulateData.set( vertX, vertY ); vert->horizonFactor.set( 0, 0, 0, 0 ); diff --git a/Engine/source/environment/waterObject.cpp b/Engine/source/environment/waterObject.cpp index beb4bc8a6b..e96857bc1b 100644 --- a/Engine/source/environment/waterObject.cpp +++ b/Engine/source/environment/waterObject.cpp @@ -50,7 +50,6 @@ GFXImplementVertexFormat( GFXWaterVertex ) { addElement( "POSITION", GFXDeclType_Float3 ); addElement( "NORMAL", GFXDeclType_Float3 ); - addElement( "COLOR", GFXDeclType_Color ); addElement( "TEXCOORD", GFXDeclType_Float2, 0 ); addElement( "TEXCOORD", GFXDeclType_Float4, 1 ); } diff --git a/Engine/source/environment/waterObject.h b/Engine/source/environment/waterObject.h index f391a20946..f5939bf0ad 100644 --- a/Engine/source/environment/waterObject.h +++ b/Engine/source/environment/waterObject.h @@ -49,7 +49,6 @@ GFXDeclareVertexFormat( GFXWaterVertex ) { Point3F point; Point3F normal; - GFXVertexColor color; Point2F undulateData; Point4F horizonFactor; }; diff --git a/Engine/source/environment/waterPlane.cpp b/Engine/source/environment/waterPlane.cpp index 261ba7f099..cd94a52918 100644 --- a/Engine/source/environment/waterPlane.cpp +++ b/Engine/source/environment/waterPlane.cpp @@ -175,9 +175,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) { const Frustum &frustum = state->getCullingFrustum(); - // Water base-color, assigned as color for all verts. - const GFXVertexColor vertCol(mWaterFogData.color); - // World-Up vector, assigned as normal for all verts. const Point3F worldUp( 0.0f, 0.0f, 1.0f ); @@ -250,7 +247,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) xVal = cornerPosition.x + (F32)( j * squareSize ); vertPtr->point.set( xVal, yVal, 0.0f ); - vertPtr->color = vertCol; vertPtr->normal = worldUp; vertPtr->undulateData.set( xVal, yVal ); vertPtr->horizonFactor.set( 0, 0, 0, 0 ); @@ -404,7 +400,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) vertPtr->point.set( pos.x, pos.y, 0.0f ); vertPtr->undulateData.set( pos.x, pos.y ); vertPtr->horizonFactor.set( 0, 0, 0, 0 ); - vertPtr->color = vertCol; vertPtr->normal = worldUp; vertPtr++; } @@ -427,7 +422,6 @@ void WaterPlane::setupVBIB( SceneRenderState *state ) vertPtr->point.set( pos.x, pos.y, 50.0f ); vertPtr->undulateData.set( pos.x, pos.y ); vertPtr->horizonFactor.set( 1, 0, 0, 0 ); - vertPtr->color = vertCol; vertPtr->normal = worldUp; vertPtr++; } diff --git a/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl b/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl index 1634fd2de3..e92c948e9c 100644 --- a/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl +++ b/Templates/Empty/game/shaders/common/water/gl/waterBasicV.glsl @@ -72,7 +72,6 @@ uniform float undulateMaxDist; in vec4 vPosition; in vec3 vNormal; -in vec4 vColor; in vec2 vTexCoord0; in vec4 vTexCoord1; diff --git a/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl b/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl index 1634fd2de3..e92c948e9c 100644 --- a/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl +++ b/Templates/Full/game/shaders/common/water/gl/waterBasicV.glsl @@ -72,7 +72,6 @@ uniform float undulateMaxDist; in vec4 vPosition; in vec3 vNormal; -in vec4 vColor; in vec2 vTexCoord0; in vec4 vTexCoord1; From ea1931d2153ece144f5e3de810bab289db437c48 Mon Sep 17 00:00:00 2001 From: blackwc Date: Fri, 23 Oct 2015 20:37:22 -0400 Subject: [PATCH 064/324] improved radio button --- .../game/core/art/gui/images/radioButton.png | Bin 843 -> 769 bytes .../game/tools/classIcons/GuiRadioCtrl.png | Bin 505 -> 538 bytes .../game/core/art/gui/images/radioButton.png | Bin 843 -> 769 bytes .../Full/game/tools/classIcons/GuiRadioCtrl.png | Bin 505 -> 538 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Templates/Empty/game/core/art/gui/images/radioButton.png b/Templates/Empty/game/core/art/gui/images/radioButton.png index d5ecc98534ef4cd9e716337a68ab54ca69b31687..77bf29ca47880293fc5c93aaf022b13d5f23baea 100644 GIT binary patch delta 745 zcmV_P;85Cb!eeth&31`Pk=5f3kM96P{Usp~fg;R0aHA6jz+d%*Lrzjqm#a zkp+1DexJWS-EB=qYxVG5p7nWAe^sm!m=#5V5R#^8H;xdJq9_1n61d3ooStpdG|k4b zZJRvL0WKtPo~CIznM`=@ICLzFrfq22hK^@b!8HAUv#c&!Yeu6HuIu8uE~C*1t@U<% zRaFs15%c++`Fu_kMJT1VkYyPFL1GYae0;pZm!@eXAMh!)LDO00000NkvXXu0mjfJAhf8 delta 820 zcmV-41Izq@2FnJJB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0008* zNkl`}_6o?rtgs}N8n6llnV<>*O>w}x zd0t&z#VuWj&@`9@Q!d`~*++^IW{a_)22;muT=vMox$Dxn zf#TcW+r#GO7i4n>5JH86s4W#AC(I5H59>k|*v@3Iu%zvWzgwW6u3Sn$)Oa^v$chTG13y;TBS$s_K#KZ(rsT6j0cJQdDNB-j~iqA`R z8-_su7fw#T!yxeQ#8=(mZh-g%(Z@G`V)4adF%p{~AG&}^Y`KW7aJUUVpU=Ivw$_(S zCg-Yjz80Rg{s+#N|L=U&4DLob-`|T*s4AQ;mw&VzwoJpwR~DZ|?I+*8M`!1K#N$tp z-p*7OA3NXP{#PUt337~+qPe}EnIY$^Es9UQqKhSvA#c3`^OH`e$&_>DosVtZ@Ap$F zaT%zoslnjjpmgt2@p02W^3Mn1a9GxQx2+A)jt&eA3?S0pj;5w2c)ebBZcx)NwM+3m yqb(ZsXf!I_FK{~mhr>a?QY*dn--_>t00RK8C<{sqwO-8t0000-vG6F$b zb?MR=5zqmA2A#kM5QIhBx)r1_0f8ZIOz;IFr5DkrvG>`2lYhnr6MIRyQw=}NH$VRj zymhI6g(OJ^z_ercpHWH!Ao9z0+%Lc^%d+-WK$0ZyfNxP04Z<*FI2;1dG!120QWQlC ze8{rw#}(kT`R8OZ83aMV;jqUZj{tPKT^z?{xm=Rxc?CS2opde?Ort0o1i^b=c3WK6 z#k=q0-S=@_mw%VtmLLd-qR0oP=b=kL9EKr#v*)hok>^kNzK`$wzcZ*iQ^b!44&svmLtJFo9M*I}9_HaQ$NJb%trLnf0E*p=f9^%xGv zj%75>CxdgHvaeFPT%IiB9m^xI;5~L-rBW#&9*-j!3|jWlXoPybj#{lo!3Qi!>qmll zWhtFb3!*4O(^MF`{yitp!|8OP(P*GjsZf&WqLXC~a#UFq_wn(rV9@WQ)w;p`!y|^n zp=BcD+8KvBlB V%a|8`PDlU%002ovPDHLkV1mcL;;sMy diff --git a/Templates/Full/game/core/art/gui/images/radioButton.png b/Templates/Full/game/core/art/gui/images/radioButton.png index d5ecc98534ef4cd9e716337a68ab54ca69b31687..77bf29ca47880293fc5c93aaf022b13d5f23baea 100644 GIT binary patch delta 745 zcmV_P;85Cb!eeth&31`Pk=5f3kM96P{Usp~fg;R0aHA6jz+d%*Lrzjqm#a zkp+1DexJWS-EB=qYxVG5p7nWAe^sm!m=#5V5R#^8H;xdJq9_1n61d3ooStpdG|k4b zZJRvL0WKtPo~CIznM`=@ICLzFrfq22hK^@b!8HAUv#c&!Yeu6HuIu8uE~C*1t@U<% zRaFs15%c++`Fu_kMJT1VkYyPFL1GYae0;pZm!@eXAMh!)LDO00000NkvXXu0mjfJAhf8 delta 820 zcmV-41Izq@2FnJJB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0008* zNkl`}_6o?rtgs}N8n6llnV<>*O>w}x zd0t&z#VuWj&@`9@Q!d`~*++^IW{a_)22;muT=vMox$Dxn zf#TcW+r#GO7i4n>5JH86s4W#AC(I5H59>k|*v@3Iu%zvWzgwW6u3Sn$)Oa^v$chTG13y;TBS$s_K#KZ(rsT6j0cJQdDNB-j~iqA`R z8-_su7fw#T!yxeQ#8=(mZh-g%(Z@G`V)4adF%p{~AG&}^Y`KW7aJUUVpU=Ivw$_(S zCg-Yjz80Rg{s+#N|L=U&4DLob-`|T*s4AQ;mw&VzwoJpwR~DZ|?I+*8M`!1K#N$tp z-p*7OA3NXP{#PUt337~+qPe}EnIY$^Es9UQqKhSvA#c3`^OH`e$&_>DosVtZ@Ap$F zaT%zoslnjjpmgt2@p02W^3Mn1a9GxQx2+A)jt&eA3?S0pj;5w2c)ebBZcx)NwM+3m yqb(ZsXf!I_FK{~mhr>a?QY*dn--_>t00RK8C<{sqwO-8t0000-vG6F$b zb?MR=5zqmA2A#kM5QIhBx)r1_0f8ZIOz;IFr5DkrvG>`2lYhnr6MIRyQw=}NH$VRj zymhI6g(OJ^z_ercpHWH!Ao9z0+%Lc^%d+-WK$0ZyfNxP04Z<*FI2;1dG!120QWQlC ze8{rw#}(kT`R8OZ83aMV;jqUZj{tPKT^z?{xm=Rxc?CS2opde?Ort0o1i^b=c3WK6 z#k=q0-S=@_mw%VtmLLd-qR0oP=b=kL9EKr#v*)hok>^kNzK`$wzcZ*iQ^b!44&svmLtJFo9M*I}9_HaQ$NJb%trLnf0E*p=f9^%xGv zj%75>CxdgHvaeFPT%IiB9m^xI;5~L-rBW#&9*-j!3|jWlXoPybj#{lo!3Qi!>qmll zWhtFb3!*4O(^MF`{yitp!|8OP(P*GjsZf&WqLXC~a#UFq_wn(rV9@WQ)w;p`!y|^n zp=BcD+8KvBlB V%a|8`PDlU%002ovPDHLkV1mcL;;sMy From 27720cb7865e65a8d2147c63aeb0672048b808a9 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Mon, 26 Oct 2015 21:08:12 +1000 Subject: [PATCH 065/324] Corrected SkyBox vertex format --- Engine/source/environment/skyBox.cpp | 10 +++++----- Engine/source/environment/skyBox.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Engine/source/environment/skyBox.cpp b/Engine/source/environment/skyBox.cpp index 5adb28b98e..6ed2174e58 100644 --- a/Engine/source/environment/skyBox.cpp +++ b/Engine/source/environment/skyBox.cpp @@ -252,7 +252,7 @@ void SkyBox::_renderObject( ObjectRenderInst *ri, SceneRenderState *state, BaseM void SkyBox::_initRender() { - GFXVertexPNTT *tmpVerts = NULL; + GFXVertexPNT *tmpVerts = NULL; U32 vertCount = 36; @@ -264,7 +264,7 @@ void SkyBox::_initRender() // Create temp vertex pointer // so we can read from it // for generating the normals below. - tmpVerts = new GFXVertexPNTT[vertCount]; + tmpVerts = new GFXVertexPNT[vertCount]; // We don't bother sharing // vertices here, in order to @@ -400,14 +400,14 @@ void SkyBox::_initRender() mIsVBDirty = false; } - GFXVertexPNTT *vertPtr = mVB.lock(); + GFXVertexPNT *vertPtr = mVB.lock(); if (!vertPtr) { delete[] tmpVerts; return; } - dMemcpy( vertPtr, tmpVerts, sizeof ( GFXVertexPNTT ) * vertCount ); + dMemcpy(vertPtr, tmpVerts, sizeof( GFXVertexPNT) * vertCount); mVB.unlock(); @@ -609,7 +609,7 @@ void SkyBox::_initMaterial() features.removeFeature( MFT_Visibility ); // Now initialize the material. - mMatInstance->init( features, getGFXVertexFormat() ); + mMatInstance->init(features, getGFXVertexFormat()); } void SkyBox::_updateMaterial() diff --git a/Engine/source/environment/skyBox.h b/Engine/source/environment/skyBox.h index 997088eb98..eeb2c24b5a 100644 --- a/Engine/source/environment/skyBox.h +++ b/Engine/source/environment/skyBox.h @@ -105,7 +105,7 @@ class SkyBox : public SceneObject SimObjectPtr mMaterial; - GFXVertexBufferHandle mVB; + GFXVertexBufferHandle mVB; GFXVertexBufferHandle mFogBandVB; Material *mFogBandMat; From bba604a0430e8e628bbcbc6968fe1bba7264106d Mon Sep 17 00:00:00 2001 From: blackwc Date: Wed, 28 Oct 2015 22:46:17 -0400 Subject: [PATCH 066/324] playJournal fix and removed depcrecated command line options --- Templates/Empty/game/core/parseArgs.cs | 14 +------------- Templates/Empty/game/main.cs | 2 -- Templates/Empty/game/main.cs.in | 2 -- Templates/Full/game/core/parseArgs.cs | 14 +------------- Templates/Full/game/main.cs | 2 -- Templates/Full/game/main.cs.in | 2 -- 6 files changed, 2 insertions(+), 34 deletions(-) diff --git a/Templates/Empty/game/core/parseArgs.cs b/Templates/Empty/game/core/parseArgs.cs index bd3f8d3826..373964c3d5 100644 --- a/Templates/Empty/game/core/parseArgs.cs +++ b/Templates/Empty/game/core/parseArgs.cs @@ -160,7 +160,7 @@ function defaultParseArgs() $argUsed[$i]++; if ($hasNextArg) { - playJournal($nextArg,false); + playJournal($nextArg); $argUsed[$i+1]++; $i++; } @@ -240,18 +240,6 @@ function defaultParseArgs() else error("Error: Missing Command Line argument. Usage: -vidCapHeight "); - //-------------------- - case "-jDebug": - $argUsed[$i]++; - if ($hasNextArg) - { - playJournal($nextArg,true); - $argUsed[$i+1]++; - $i++; - } - else - error("Error: Missing Command Line argument. Usage: -jDebug "); - //-------------------- case "-level": $argUsed[$i]++; diff --git a/Templates/Empty/game/main.cs b/Templates/Empty/game/main.cs index b6218c8cda..90d6203a89 100644 --- a/Templates/Empty/game/main.cs +++ b/Templates/Empty/game/main.cs @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } diff --git a/Templates/Empty/game/main.cs.in b/Templates/Empty/game/main.cs.in index 06f3e88547..bb82501566 100644 --- a/Templates/Empty/game/main.cs.in +++ b/Templates/Empty/game/main.cs.in @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } diff --git a/Templates/Full/game/core/parseArgs.cs b/Templates/Full/game/core/parseArgs.cs index bd3f8d3826..373964c3d5 100644 --- a/Templates/Full/game/core/parseArgs.cs +++ b/Templates/Full/game/core/parseArgs.cs @@ -160,7 +160,7 @@ function defaultParseArgs() $argUsed[$i]++; if ($hasNextArg) { - playJournal($nextArg,false); + playJournal($nextArg); $argUsed[$i+1]++; $i++; } @@ -240,18 +240,6 @@ function defaultParseArgs() else error("Error: Missing Command Line argument. Usage: -vidCapHeight "); - //-------------------- - case "-jDebug": - $argUsed[$i]++; - if ($hasNextArg) - { - playJournal($nextArg,true); - $argUsed[$i+1]++; - $i++; - } - else - error("Error: Missing Command Line argument. Usage: -jDebug "); - //-------------------- case "-level": $argUsed[$i]++; diff --git a/Templates/Full/game/main.cs b/Templates/Full/game/main.cs index 7c34f350d1..3eb802d9f5 100644 --- a/Templates/Full/game/main.cs +++ b/Templates/Full/game/main.cs @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } diff --git a/Templates/Full/game/main.cs.in b/Templates/Full/game/main.cs.in index 06f3e88547..bb82501566 100644 --- a/Templates/Full/game/main.cs.in +++ b/Templates/Full/game/main.cs.in @@ -186,10 +186,8 @@ function displayHelp() { " Works like the -game argument\n"@ " -dir Add to list of directories\n"@ " -console Open a separate console\n"@ - " -show Deprecated\n"@ " -jSave Record a journal\n"@ " -jPlay Play back a journal\n"@ - " -jDebug Play back a journal and issue an int3 at the end\n"@ " -help Display this help message\n" ); } From ca37e9f84eeddd04b11070c49ec4b3cb45746f37 Mon Sep 17 00:00:00 2001 From: blackwc Date: Wed, 28 Oct 2015 22:52:16 -0400 Subject: [PATCH 067/324] fix playJournal instruction in comments --- Templates/Empty/game/main.cs | 2 +- Templates/Empty/game/main.cs.in | 2 +- Templates/Full/game/main.cs | 2 +- Templates/Full/game/main.cs.in | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Templates/Empty/game/main.cs b/Templates/Empty/game/main.cs index 90d6203a89..47f0ab2759 100644 --- a/Templates/Empty/game/main.cs +++ b/Templates/Empty/game/main.cs @@ -57,7 +57,7 @@ function createCanvas(%windowTitle) // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. diff --git a/Templates/Empty/game/main.cs.in b/Templates/Empty/game/main.cs.in index bb82501566..a541cf3b79 100644 --- a/Templates/Empty/game/main.cs.in +++ b/Templates/Empty/game/main.cs.in @@ -57,7 +57,7 @@ $displayHelp = false; // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. diff --git a/Templates/Full/game/main.cs b/Templates/Full/game/main.cs index 3eb802d9f5..3febb4f1e1 100644 --- a/Templates/Full/game/main.cs +++ b/Templates/Full/game/main.cs @@ -57,7 +57,7 @@ function createCanvas(%windowTitle) // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. diff --git a/Templates/Full/game/main.cs.in b/Templates/Full/game/main.cs.in index bb82501566..a541cf3b79 100644 --- a/Templates/Full/game/main.cs.in +++ b/Templates/Full/game/main.cs.in @@ -57,7 +57,7 @@ $displayHelp = false; // Use these to record and play back crashes //saveJournal("editorOnFileQuitCrash.jrn"); -//playJournal("editorOnFileQuitCrash.jrn", false); +//playJournal("editorOnFileQuitCrash.jrn"); //------------------------------------------------------------------------------ // Check if a script file exists, compiled or not. From fd56496e616a670b0d5fbe9a584b656a8a2e70e7 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 2 Nov 2015 14:24:50 -0600 Subject: [PATCH 068/324] recolor and rescale for path marker representations to make those easier toi distinguish and interact with --- Engine/source/scene/simPath.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Engine/source/scene/simPath.cpp b/Engine/source/scene/simPath.cpp index c25764ad11..eaad906d33 100644 --- a/Engine/source/scene/simPath.cpp +++ b/Engine/source/scene/simPath.cpp @@ -296,11 +296,11 @@ void Marker::initGFXResources() smVertexBuffer.set(GFX, 4, GFXBufferTypeStatic); GFXVertexPC* verts = smVertexBuffer.lock(); - verts[0].point = wedgePoints[0] * 0.25f; - verts[1].point = wedgePoints[1] * 0.25f; - verts[2].point = wedgePoints[2] * 0.25f; - verts[3].point = wedgePoints[3] * 0.25f; - verts[0].color = verts[1].color = verts[2].color = verts[3].color = GFXVertexColor(ColorI(0, 255, 0, 255)); + verts[0].point = wedgePoints[0] * 1.25f; + verts[1].point = wedgePoints[1] * 1.25f; + verts[2].point = wedgePoints[2] * 1.25f; + verts[3].point = wedgePoints[3] * 1.25f; + verts[0].color = verts[1].color = verts[2].color = verts[3].color = GFXVertexColor(ColorI(255, 0, 0, 255)); smVertexBuffer.unlock(); smPrimitiveBuffer.set(GFX, 24, 12, GFXBufferTypeStatic); @@ -417,7 +417,7 @@ bool Marker::onAdd() if(!Parent::onAdd()) return false; - mObjBox = Box3F(Point3F(-.25, -.25, -.25), Point3F(.25, .25, .25)); + mObjBox = Box3F(Point3F(-1.25, -1.25, -1.25), Point3F(1.25, 1.25, 1.25)); resetWorldBox(); if(gEditingMission) From aacbd5d2bce3ab4bf7ffaec1d5504a5977aeb587 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 2 Nov 2015 14:57:26 -0600 Subject: [PATCH 069/324] red to blue so you can easier tell which way the triangle is pointing at a glance --- Engine/source/scene/simPath.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Engine/source/scene/simPath.cpp b/Engine/source/scene/simPath.cpp index eaad906d33..edf7b1051d 100644 --- a/Engine/source/scene/simPath.cpp +++ b/Engine/source/scene/simPath.cpp @@ -300,7 +300,9 @@ void Marker::initGFXResources() verts[1].point = wedgePoints[1] * 1.25f; verts[2].point = wedgePoints[2] * 1.25f; verts[3].point = wedgePoints[3] * 1.25f; - verts[0].color = verts[1].color = verts[2].color = verts[3].color = GFXVertexColor(ColorI(255, 0, 0, 255)); + verts[1].color = GFXVertexColor(ColorI(255, 0, 0, 255)); + verts[0].color = verts[2].color = verts[3].color = GFXVertexColor(ColorI(0, 0, 255, 255)); + smVertexBuffer.unlock(); smPrimitiveBuffer.set(GFX, 24, 12, GFXBufferTypeStatic); From 1c23583fbadd0ee47850f93b4deef6861def237c Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 2 Nov 2015 15:12:49 -0600 Subject: [PATCH 070/324] world editor spline lerp display. advancedist controls size between steps. highlighted the tip of the arrows --- Engine/source/gui/worldEditor/worldEditor.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Engine/source/gui/worldEditor/worldEditor.cpp b/Engine/source/gui/worldEditor/worldEditor.cpp index 0273ffeb4b..0ff5ff8c79 100644 --- a/Engine/source/gui/worldEditor/worldEditor.cpp +++ b/Engine/source/gui/worldEditor/worldEditor.cpp @@ -1303,7 +1303,7 @@ void WorldEditor::renderObjectFace(SceneObject * obj, const VectorF & normal, co PrimBuild::color( col ); - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); for(U32 k = 0; k < 4; k++) { PrimBuild::vertex3f(projPnts[k].x, projPnts[k].y, projPnts[k].z); @@ -1492,7 +1492,7 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) F32 tmpT = t; while (tmpT < size - 1) { - tmpT = spline.advanceDist(tmpT, 4.0f); + tmpT = spline.advanceDist(tmpT, 1.0f); vCount++; } @@ -1514,7 +1514,7 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) { CameraSpline::Knot k; spline.value(t, &k); - t = spline.advanceDist(t, 4.0f); + t = spline.advanceDist(t, 1.0f); k.mRotation.mulP(a, &vb[vIdx+0].point); k.mRotation.mulP(b, &vb[vIdx+1].point); @@ -1524,9 +1524,9 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) vb[vIdx+1].point += k.mPosition; vb[vIdx+2].point += k.mPosition; - vb[vIdx+0].color.set(0, 255, 0, 100); - vb[vIdx+1].color.set(0, 255, 0, 100); - vb[vIdx+2].color.set(0, 255, 0, 100); + vb[vIdx+0].color.set(0, 255, 0, 0); + vb[vIdx+1].color.set(0, 255, 0, 255); + vb[vIdx+2].color.set(0, 255, 0, 0); // vb[vIdx+3] = vb[vIdx+1]; From 24f7dc83141fd6a6c2e36560aea743a7885ece2b Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 2 Nov 2015 23:01:43 -0600 Subject: [PATCH 071/324] rtparams(#) needs to match the ssaomask register --- .../game/shaders/common/lighting/advanced/vectorLightP.hlsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 1b45485754..2d719587e9 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -35,7 +35,7 @@ uniform sampler2D dynamicShadowMap : register(S2); #ifdef USE_SSAO_MASK uniform sampler2D ssaoMask : register(S3); -uniform float4 rtParams2; +uniform float4 rtParams3; #endif float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, @@ -295,7 +295,7 @@ float4 main( FarFrustumQuadConnectP IN, // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - tex2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - tex2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif From b778121fc4498d8df74e1c929561e1caa546a846 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 2 Nov 2015 23:06:51 -0600 Subject: [PATCH 072/324] castDynamicShadows defaults to false, flipped it over to true for materials on mobile/animated assets. --- Engine/source/materials/materialDefinition.cpp | 2 +- Templates/Full/game/art/shapes/Cheetah/materials.cs | 1 + Templates/Full/game/art/shapes/actors/Soldier/materials.cs | 2 ++ Templates/Full/game/art/shapes/weapons/Grenade/materials.cs | 1 + Templates/Full/game/art/shapes/weapons/Lurker/materials.cs | 1 + Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs | 1 + Templates/Full/game/art/shapes/weapons/Ryder/materials.cs | 2 ++ Templates/Full/game/art/shapes/weapons/Turret/materials.cs | 3 +++ 8 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index e27de0be22..408df976f7 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -182,7 +182,7 @@ Material::Material() mAlphaRef = 1; mCastShadows = true; - mCastDynamicShadows = true; + mCastDynamicShadows = false; mPlanarReflection = false; diff --git a/Templates/Full/game/art/shapes/Cheetah/materials.cs b/Templates/Full/game/art/shapes/Cheetah/materials.cs index 68b3e7b5be..a8eed41be2 100644 --- a/Templates/Full/game/art/shapes/Cheetah/materials.cs +++ b/Templates/Full/game/art/shapes/Cheetah/materials.cs @@ -29,6 +29,7 @@ singleton Material(Cheetah_Main) translucentBlendOp = "None"; normalMap[0] = "art/shapes/Cheetah/Cheetah_N"; specularMap[0] = "art/shapes/Cheetah/Cheetah_S"; + castDynamicShadows = true; }; singleton Material(Cheetah_TailLights) diff --git a/Templates/Full/game/art/shapes/actors/Soldier/materials.cs b/Templates/Full/game/art/shapes/actors/Soldier/materials.cs index d87ec620d2..6eb3eb8067 100644 --- a/Templates/Full/game/art/shapes/actors/Soldier/materials.cs +++ b/Templates/Full/game/art/shapes/actors/Soldier/materials.cs @@ -35,6 +35,7 @@ singleton Material(Mat_Soldier_Main) doubleSided = false; translucent = false; showFootprints = "0"; + castDynamicShadows = true; materialTag0 = "Player"; }; @@ -55,6 +56,7 @@ singleton Material(Mat_Soldier_Dazzle) emissive[0] = "1"; castShadows = "0"; showFootprints = "0"; + castDynamicShadows = true; materialTag0 = "Player"; }; diff --git a/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs b/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs index 3cf3b1c626..569f28ed0b 100644 --- a/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Grenade/materials.cs @@ -38,6 +38,7 @@ singleton Material(grenade_grenade) doubleSided = false; translucent = false; translucentBlendOp = "None"; + castDynamicShadows = true; materialTag0 = "Weapon"; }; diff --git a/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs b/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs index c5004f8f04..983afeb729 100644 --- a/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Lurker/materials.cs @@ -41,6 +41,7 @@ singleton Material(Lurker_Base) specularPower[0] = "10"; translucentBlendOp = "None"; useAnisotropic[0] = "1"; + castDynamicShadows = true; }; singleton Material(Lurker_MuzzleFlash_Base) diff --git a/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs b/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs index 4e1ea57570..e16b0b4b68 100644 --- a/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/ProxMine/materials.cs @@ -31,6 +31,7 @@ singleton Material(ProxMine_Base) pixelSpecular[0] = "1"; specularMap[0] = "ProxMine_S.dds"; useAnisotropic[0] = "1"; + castDynamicShadows = true; }; singleton Material(ProxMine_Glow_Base) diff --git a/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs b/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs index bdac68e3b3..3661bcae19 100644 --- a/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Ryder/materials.cs @@ -31,6 +31,7 @@ singleton Material(FP_Ryder_Base) translucentBlendOp = "None"; pixelSpecular[0] = "1"; useAnisotropic[0] = "1"; + castDynamicShadows = true; }; singleton Material(TP_Ryder_Base) @@ -43,6 +44,7 @@ singleton Material(TP_Ryder_Base) specularPower[0] = "10"; translucentBlendOp = "None"; pixelSpecular[0] = "1"; + castDynamicShadows = true; }; singleton Material(Ryder_MuzzleFlash_Base) diff --git a/Templates/Full/game/art/shapes/weapons/Turret/materials.cs b/Templates/Full/game/art/shapes/weapons/Turret/materials.cs index 1088e53c76..4ed4768d9a 100644 --- a/Templates/Full/game/art/shapes/weapons/Turret/materials.cs +++ b/Templates/Full/game/art/shapes/weapons/Turret/materials.cs @@ -31,6 +31,7 @@ singleton Material(Turret_Base) pixelSpecular[0] = "1"; specularMap[0] = "art/shapes/weapons/Turret/Turret_D.dds"; useAnisotropic[0] = "1"; + castDynamicShadows = true; materialTag0 = "Weapon"; }; @@ -53,6 +54,7 @@ singleton Material(Turret_Lazer_Base) waveFreq[0] = "0"; waveAmp[0] = "0"; castShadows = "1"; + castDynamicShadows = true; translucentZWrite = "0"; materialTag0 = "Weapon"; materialTag1 = "FX"; @@ -68,6 +70,7 @@ singleton Material(Turret_Lazer_Base) glow[0] = "1"; emissive[0] = "1"; translucentBlendOp = "Add"; + castDynamicShadows = true; }; singleton Material(CollisionMat) From f4d40bf1b0c4a3eb2449b3f95c5898b26aa9d125 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 5 Nov 2015 10:18:17 -0600 Subject: [PATCH 073/324] hooks meshroads up to the material system for castrays (at a minimum, sound playback) --- Engine/source/environment/meshRoad.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/environment/meshRoad.cpp b/Engine/source/environment/meshRoad.cpp index e395458f1f..0d30267e5e 100644 --- a/Engine/source/environment/meshRoad.cpp +++ b/Engine/source/environment/meshRoad.cpp @@ -1552,7 +1552,7 @@ bool MeshRoad::castRay( const Point3F &s, const Point3F &e, RayInfo *info ) info->point.interpolate(start, end, out); info->face = -1; info->object = this; - + info->material = this->mMatInst[0]; return true; } From b1fccc848c6bd45364b6cb7bbe109a117cb179cd Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sat, 7 Nov 2015 09:04:47 -0600 Subject: [PATCH 074/324] corrects ghosted decal datablock lookup flaw --- Engine/source/T3D/decal/decalData.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Engine/source/T3D/decal/decalData.cpp b/Engine/source/T3D/decal/decalData.cpp index 67436e9912..e517d2897b 100644 --- a/Engine/source/T3D/decal/decalData.cpp +++ b/Engine/source/T3D/decal/decalData.cpp @@ -284,6 +284,7 @@ void DecalData::unpackData( BitStream *stream ) Parent::unpackData( stream ); stream->read( &lookupName ); + assignName(lookupName); stream->read( &size ); stream->read( &materialName ); _updateMaterial(); From f719731c529feea4fd77b2c4f2d4122af1fd9f65 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 9 Nov 2015 19:40:30 -0600 Subject: [PATCH 075/324] fillin for fallbacks for filesystem funcs --- Engine/source/console/fileSystemFunctions.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Engine/source/console/fileSystemFunctions.cpp b/Engine/source/console/fileSystemFunctions.cpp index 00ae10f69d..d5ee048caf 100644 --- a/Engine/source/console/fileSystemFunctions.cpp +++ b/Engine/source/console/fileSystemFunctions.cpp @@ -137,7 +137,7 @@ static S32 buildFileList(const char* pattern, bool recurse, bool multiMatch) //----------------------------------------------------------------------------- -DefineEngineFunction( findFirstFile, String, ( const char* pattern, bool recurse ), ( true ), +DefineEngineFunction( findFirstFile, String, ( const char* pattern, bool recurse ), ( "", true ), "@brief Returns the first file in the directory system matching the given pattern.\n\n" "Use the corresponding findNextFile() to step through " @@ -209,7 +209,7 @@ DefineEngineFunction( findNextFile, String, ( const char* pattern ), ( "" ), //----------------------------------------------------------------------------- -DefineEngineFunction( getFileCount, S32, ( const char* pattern, bool recurse ), ( true ), +DefineEngineFunction( getFileCount, S32, ( const char* pattern, bool recurse ), ( "", true ), "@brief Returns the number of files in the directory tree that match the given patterns\n\n" "This function differs from getFileCountMultiExpr() in that it supports a single search " @@ -245,7 +245,7 @@ DefineEngineFunction( getFileCount, S32, ( const char* pattern, bool recurse ), //----------------------------------------------------------------------------- -DefineEngineFunction(findFirstFileMultiExpr, String, ( const char* pattern, bool recurse ), (true), +DefineEngineFunction(findFirstFileMultiExpr, String, ( const char* pattern, bool recurse ), ( "", true), "@brief Returns the first file in the directory system matching the given patterns.\n\n" "Use the corresponding findNextFileMultiExpr() to step through " @@ -327,7 +327,7 @@ DefineEngineFunction(findNextFileMultiExpr, String, ( const char* pattern ), ("" return sgFindFilesResults[sgFindFilesPos++]; } -DefineEngineFunction(getFileCountMultiExpr, S32, ( const char* pattern, bool recurse ), (true), +DefineEngineFunction(getFileCountMultiExpr, S32, ( const char* pattern, bool recurse ), ( "", true), "@brief Returns the number of files in the directory tree that match the given patterns\n\n" "If you're interested in a list of files that match the given patterns and not just " @@ -452,7 +452,7 @@ DefineEngineFunction(stopFileChangeNotifications, void, (),, } -DefineEngineFunction(getDirectoryList, String, ( const char* path, S32 depth ), ( 0 ), +DefineEngineFunction(getDirectoryList, String, ( const char* path, S32 depth ), ( "", 0 ), "@brief Gathers a list of directories starting at the given path.\n\n" "@param path String containing the path of the directory\n" @@ -686,7 +686,7 @@ DefineEngineFunction(getWorkingDirectory, String, (),, // are just string processing functions. They are needed by the 3D tools which // are not currently built with TORQUE_TOOLS defined. -DefineEngineFunction(makeFullPath, String, ( const char* path, const char* cwd ), (""), +DefineEngineFunction(makeFullPath, String, ( const char* path, const char* cwd ), ( "", ""), "@brief Converts a relative file path to a full path\n\n" "For example, \"./console.log\" becomes \"C:/Torque/t3d/examples/FPS Example/game/console.log\"\n" @@ -701,7 +701,7 @@ DefineEngineFunction(makeFullPath, String, ( const char* path, const char* cwd ) return buf; } -DefineEngineFunction(makeRelativePath, String, ( const char* path, const char* to ), (""), +DefineEngineFunction(makeRelativePath, String, ( const char* path, const char* to ), ( "", ""), "@brief Turns a full or local path to a relative one\n\n" "For example, \"./game/art\" becomes \"game/art\"\n" @@ -714,7 +714,7 @@ DefineEngineFunction(makeRelativePath, String, ( const char* path, const char* t return Platform::makeRelativePathName( path, dStrlen(to) > 1 ? to : NULL ); } -DefineEngineFunction(pathConcat, String, ( const char* path, const char* file),, +DefineEngineFunction(pathConcat, String, ( const char* path, const char* file), ( "", ""), "@brief Combines two separate strings containing a file path and file name together into a single string\n\n" "@param path String containing file path\n" @@ -783,7 +783,7 @@ DefineEngineFunction( openFile, void, ( const char* file ),, //----------------------------------------------------------------------------- -DefineEngineFunction( pathCopy, bool, ( const char* fromFile, const char* toFile, bool noOverwrite ), ( true ), +DefineEngineFunction( pathCopy, bool, ( const char* fromFile, const char* toFile, bool noOverwrite ), ( "", "", true ), "@brief Copy a file to a new location.\n" "@param fromFile %Path of the file to copy.\n" "@param toFile %Path where to copy @a fromFile to.\n" From ce2964d2d019f9e0cb2fcb93d290efd10358bc7f Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 11 Nov 2015 13:52:46 -0600 Subject: [PATCH 076/324] diffuse/albedo texture linearization http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html --- .../advanced/advancedLightManager.cpp | 2 +- .../source/materials/materialFeatureTypes.cpp | 1 + .../source/materials/materialFeatureTypes.h | 1 + .../source/shaderGen/GLSL/accuFeatureGLSL.cpp | 2 + .../shaderGen/GLSL/shaderFeatureGLSL.cpp | 43 ++-- .../source/shaderGen/GLSL/shaderFeatureGLSL.h | 5 + .../shaderGen/GLSL/shaderGenGLSLInit.cpp | 1 + .../source/shaderGen/HLSL/accuFeatureHLSL.cpp | 2 + .../shaderGen/HLSL/shaderFeatureHLSL.cpp | 42 ++-- .../source/shaderGen/HLSL/shaderFeatureHLSL.h | 5 + .../shaderGen/HLSL/shaderGenHLSLInit.cpp | 1 + .../source/terrain/glsl/terrFeatureGLSL.cpp | 7 + Engine/source/terrain/glsl/terrFeatureGLSL.h | 3 + .../source/terrain/hlsl/terrFeatureHLSL.cpp | 7 + Engine/source/terrain/hlsl/terrFeatureHLSL.h | 4 + Engine/source/util/imposterCapture.cpp | 1 + Templates/Full/game/art/gui/optionsDlg.gui | 216 ++++++++++++++---- .../Full/game/core/scripts/client/defaults.cs | 4 +- .../core/scripts/client/postFx/GammaPostFX.cs | 6 +- .../game/core/scripts/client/postFx/hdr.cs | 15 +- .../game/core/scripts/client/renderManager.cs | 33 +-- .../Full/game/shaders/common/gl/torque.glsl | 33 +++ .../game/shaders/common/postFx/gammaP.hlsl | 9 +- .../game/shaders/common/postFx/gl/gammaP.glsl | 8 + .../common/postFx/hdr/finalPassCombineP.hlsl | 8 + .../postFx/hdr/gl/finalPassCombineP.glsl | 8 + .../Full/game/shaders/common/torque.hlsl | 32 +++ .../shaders/common/water/gl/waterBasicP.glsl | 1 + .../game/shaders/common/water/gl/waterP.glsl | 1 + .../shaders/common/water/waterBasicP.hlsl | 1 + .../game/shaders/common/water/waterP.hlsl | 1 + 31 files changed, 396 insertions(+), 107 deletions(-) diff --git a/Engine/source/lighting/advanced/advancedLightManager.cpp b/Engine/source/lighting/advanced/advancedLightManager.cpp index ef4446a403..d7db83a6b2 100644 --- a/Engine/source/lighting/advanced/advancedLightManager.cpp +++ b/Engine/source/lighting/advanced/advancedLightManager.cpp @@ -105,7 +105,7 @@ void AdvancedLightManager::activate( SceneManager *sceneManager ) // we prefer the floating point format if it works. Vector formats; formats.push_back( GFXFormatR16G16B16A16F ); - formats.push_back( GFXFormatR16G16B16A16 ); + //formats.push_back( GFXFormatR16G16B16A16 ); GFXFormat blendTargetFormat = GFX->selectSupportedFormat( &GFXDefaultRenderTargetProfile, formats, true, diff --git a/Engine/source/materials/materialFeatureTypes.cpp b/Engine/source/materials/materialFeatureTypes.cpp index f7a63815b0..9cdc574156 100644 --- a/Engine/source/materials/materialFeatureTypes.cpp +++ b/Engine/source/materials/materialFeatureTypes.cpp @@ -46,6 +46,7 @@ ImplementFeatureType( MFT_AlphaTest, MFG_Texture, 7.0f, true ); ImplementFeatureType( MFT_SpecularMap, MFG_Texture, 8.0f, true ); ImplementFeatureType( MFT_NormalMap, MFG_Texture, 9.0f, true ); ImplementFeatureType( MFT_DetailNormalMap, MFG_Texture, 10.0f, true ); +ImplementFeatureType( MFT_Imposter, U32(-1), -1, true ); ImplementFeatureType( MFT_AccuMap, MFG_PreLighting, 2.0f, true ); diff --git a/Engine/source/materials/materialFeatureTypes.h b/Engine/source/materials/materialFeatureTypes.h index 55b52506c6..c302045c2d 100644 --- a/Engine/source/materials/materialFeatureTypes.h +++ b/Engine/source/materials/materialFeatureTypes.h @@ -94,6 +94,7 @@ DeclareFeatureType( MFT_OverlayMap ); DeclareFeatureType( MFT_DetailMap ); DeclareFeatureType( MFT_DiffuseColor ); DeclareFeatureType( MFT_DetailNormalMap ); +DeclareFeatureType( MFT_Imposter ); DeclareFeatureType( MFT_AccuMap ); DeclareFeatureType( MFT_AccuScale ); diff --git a/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp index c663b93eaf..04a280e096 100644 --- a/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp @@ -144,6 +144,8 @@ void AccuTexFeatGLSL::processPix(Vector &componentList, // get the accu pixel color meta->addStatement( new GenOp( " @ = tex2D(@, @ * @);\r\n", colorAccuDecl, accuMap, inTex, accuScale ) ); + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", accuColor, accuColor)); // scale up normals meta->addStatement( new GenOp( " @.xyz = @.xyz * 2.0 - 0.5;\r\n", bumpNorm, bumpNorm ) ); diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index 7567b55163..eed42dd682 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -828,6 +828,12 @@ Var* ShaderFeatureGLSL::addOutDetailTexCoord( Vector &compon // Base Texture //**************************************************************************** +DiffuseMapFeatGLSL::DiffuseMapFeatGLSL() +: mTorqueDep("shaders/common/gl/torque.glsl") +{ + addDependency(&mTorqueDep); +} + void DiffuseMapFeatGLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { @@ -855,20 +861,23 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, diffuseMap->sampler = true; diffuseMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + // create sample color var + Var *diffColor = new Var; + diffColor->setType("vec4"); + diffColor->setName("diffuseColor"); + LangElement *colorDecl = new DecOp( diffColor ); + + MultiLine * meta = new MultiLine; + output = meta; + if ( fd.features[MFT_CubeMap] ) { - MultiLine * meta = new MultiLine; - - // create sample color - Var *diffColor = new Var; - diffColor->setType( "vec4" ); - diffColor->setName( "diffuseColor" ); - LangElement *colorDecl = new DecOp( diffColor ); - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex ) ); + if (!fd.features[MFT_Imposter]) + meta->addStatement( new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor) ); meta->addStatement( new GenOp( " @;\r\n", assignColor( diffColor, Material::Mul ) ) ); output = meta; @@ -877,8 +886,6 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, { // Handle atlased textures // http://www.infinity-universe.com/Infinity/index.php?option=com_content&task=view&id=65&Itemid=47 - MultiLine * meta = new MultiLine; - output = meta; Var *atlasedTex = new Var; atlasedTex->setName("atlasedTexCoord"); @@ -934,11 +941,6 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, // For the rest of the feature... inTex = atlasedTex; - // create sample color var - Var *diffColor = new Var; - diffColor->setType("vec4"); - diffColor->setName("diffuseColor"); - // To dump out UV coords... //#define DEBUG_ATLASED_UV_COORDS #ifdef DEBUG_ATLASED_UV_COORDS @@ -954,21 +956,26 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, { meta->addStatement(new GenOp( " @ = tex2Dlod(@, float4(@, 0.0, mipLod));\r\n", new DecOp(diffColor), diffuseMap, inTex)); + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); } else { meta->addStatement(new GenOp( " @ = tex2D(@, @);\r\n", new DecOp(diffColor), diffuseMap, inTex)); + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); } meta->addStatement(new GenOp( " @;\r\n", assignColor(diffColor, Material::Mul))); } else { - LangElement *statement = new GenOp( "tex2D(@, @)", diffuseMap, inTex ); - output = new GenOp( " @;\r\n", assignColor( statement, Material::Mul ) ); + meta->addStatement(new GenOp("@ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex)); + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul))); } - } ShaderFeature::Resources DiffuseMapFeatGLSL::getResources( const MaterialFeatureData &fd ) diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h index a0e831e931..276183d998 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h @@ -236,7 +236,12 @@ class RTLightingFeatGLSL : public ShaderFeatureGLSL /// Base texture class DiffuseMapFeatGLSL : public ShaderFeatureGLSL { + +protected: + + ShaderIncludeDependency mTorqueDep; public: + DiffuseMapFeatGLSL(); virtual void processVert( Vector &componentList, const MaterialFeatureData &fd ); diff --git a/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp b/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp index 3c4065d44d..ef15793a58 100644 --- a/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp +++ b/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp @@ -68,6 +68,7 @@ void _initShaderGenGLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_IsTranslucent, new NamedFeatureGLSL( "Translucent" ) ); FEATUREMGR->registerFeature( MFT_Visibility, new VisibilityFeatGLSL ); FEATUREMGR->registerFeature( MFT_Fog, new FogFeatGLSL ); + FEATUREMGR->registerFeature( MFT_Imposter, new NamedFeatureGLSL( "Imposter" ) ); FEATUREMGR->registerFeature( MFT_NormalsOut, new NormalsOutFeatGLSL ); diff --git a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp index 63161c2586..1e90faa12e 100644 --- a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp @@ -141,6 +141,8 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, // get the accu pixel color meta->addStatement( new GenOp( " @ = tex2D(@, @ * @);\r\n", colorAccuDecl, accuMap, inTex, accuScale ) ); + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", accuColor, accuColor)); // scale up normals meta->addStatement( new GenOp( " @.xyz = @.xyz * 2.0 - 0.5;\r\n", bumpNorm, bumpNorm ) ); diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 8f8b5918a8..17cf6333c3 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -826,6 +826,12 @@ Var* ShaderFeatureHLSL::addOutDetailTexCoord( Vector &compon // Base Texture //**************************************************************************** +DiffuseMapFeatHLSL::DiffuseMapFeatHLSL() +: mTorqueDep("shaders/common/torque.hlsl") +{ + addDependency(&mTorqueDep); +} + void DiffuseMapFeatHLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { @@ -853,30 +859,30 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, diffuseMap->sampler = true; diffuseMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + // create sample color + Var *diffColor = new Var; + diffColor->setType("float4"); + diffColor->setName("diffuseColor"); + LangElement *colorDecl = new DecOp(diffColor); + + MultiLine * meta = new MultiLine; + output = meta; + if ( fd.features[MFT_CubeMap] ) { - MultiLine * meta = new MultiLine; - - // create sample color - Var *diffColor = new Var; - diffColor->setType( "float4" ); - diffColor->setName( "diffuseColor" ); - LangElement *colorDecl = new DecOp( diffColor ); - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex ) ); + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); meta->addStatement( new GenOp( " @;\r\n", assignColor( diffColor, Material::Mul ) ) ); - output = meta; } else if(fd.features[MFT_DiffuseMapAtlas]) { // Handle atlased textures // http://www.infinity-universe.com/Infinity/index.php?option=com_content&task=view&id=65&Itemid=47 - MultiLine * meta = new MultiLine; - output = meta; Var *atlasedTex = new Var; atlasedTex->setName("atlasedTexCoord"); @@ -932,11 +938,6 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, // For the rest of the feature... inTex = atlasedTex; - // create sample color var - Var *diffColor = new Var; - diffColor->setType("float4"); - diffColor->setName("diffuseColor"); - // To dump out UV coords... //#define DEBUG_ATLASED_UV_COORDS #ifdef DEBUG_ATLASED_UV_COORDS @@ -958,15 +959,18 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, meta->addStatement(new GenOp( " @ = tex2D(@, @);\r\n", new DecOp(diffColor), diffuseMap, inTex)); } + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); meta->addStatement(new GenOp( " @;\r\n", assignColor(diffColor, Material::Mul))); } else { - LangElement *statement = new GenOp( "tex2D(@, @)", diffuseMap, inTex ); - output = new GenOp( " @;\r\n", assignColor( statement, Material::Mul ) ); + meta->addStatement(new GenOp("@ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex)); + if (!fd.features[MFT_Imposter]) + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul))); } - } ShaderFeature::Resources DiffuseMapFeatHLSL::getResources( const MaterialFeatureData &fd ) diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h index 3c2fc821e9..4f77c175a7 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h @@ -236,7 +236,12 @@ class RTLightingFeatHLSL : public ShaderFeatureHLSL /// Base texture class DiffuseMapFeatHLSL : public ShaderFeatureHLSL { +protected: + + ShaderIncludeDependency mTorqueDep; + public: + DiffuseMapFeatHLSL(); virtual void processVert( Vector &componentList, const MaterialFeatureData &fd ); diff --git a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp index c754e1b25d..a5c6165e07 100644 --- a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp +++ b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp @@ -70,6 +70,7 @@ void _initShaderGenHLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_GlossMap, new NamedFeatureHLSL( "Gloss Map" ) ); FEATUREMGR->registerFeature( MFT_LightbufferMRT, new NamedFeatureHLSL( "Lightbuffer MRT" ) ); FEATUREMGR->registerFeature( MFT_RenderTarget1_Zero, new RenderTargetZeroHLSL( ShaderFeature::RenderTarget1 ) ); + FEATUREMGR->registerFeature( MFT_Imposter, new NamedFeatureHLSL( "Imposter" ) ); FEATUREMGR->registerFeature( MFT_DiffuseMapAtlas, new NamedFeatureHLSL( "Diffuse Map Atlas" ) ); FEATUREMGR->registerFeature( MFT_NormalMapAtlas, new NamedFeatureHLSL( "Normal Map Atlas" ) ); diff --git a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp index ebe052e001..5f32359a8c 100644 --- a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp +++ b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp @@ -64,6 +64,12 @@ MODULE_BEGIN( TerrainFeatGLSL ) MODULE_END; +TerrainFeatGLSL::TerrainFeatGLSL() + : mTorqueDep( "shaders/common/gl/torque.glsl" ) + { + addDependency( &mTorqueDep ); + } + Var* TerrainFeatGLSL::_getUniformVar( const char *name, const char *type, ConstantSortPosition csp ) { Var *theVar = (Var*)LangElement::find( name ); @@ -262,6 +268,7 @@ void TerrainBaseMapFeatGLSL::processPix( Vector &componentLis baseColor->setType( "vec4" ); baseColor->setName( "baseColor" ); meta->addStatement( new GenOp( " @ = tex2D( @, @.xy );\r\n", new DecOp( baseColor ), diffuseMap, texCoord ) ); + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", baseColor, baseColor)); meta->addStatement( new GenOp( " @;\r\n", assignColor( baseColor, Material::Mul ) ) ); output = meta; diff --git a/Engine/source/terrain/glsl/terrFeatureGLSL.h b/Engine/source/terrain/glsl/terrFeatureGLSL.h index 790a8a342a..6cb3a3c0c2 100644 --- a/Engine/source/terrain/glsl/terrFeatureGLSL.h +++ b/Engine/source/terrain/glsl/terrFeatureGLSL.h @@ -36,7 +36,10 @@ class TerrainFeatGLSL : public ShaderFeatureGLSL { protected: + ShaderIncludeDependency mTorqueDep; +public: + TerrainFeatGLSL(); Var* _getInDetailCoord(Vector &componentList ); Var* _getInMacroCoord(Vector &componentList ); diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp index 7190d7f821..6ef1c20091 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp @@ -64,6 +64,12 @@ MODULE_BEGIN( TerrainFeatHLSL ) MODULE_END; +TerrainFeatHLSL::TerrainFeatHLSL() + : mTorqueDep( "shaders/common/torque.hlsl" ) + { + addDependency( &mTorqueDep ); + } + Var* TerrainFeatHLSL::_getUniformVar( const char *name, const char *type, ConstantSortPosition csp ) { Var *theVar = (Var*)LangElement::find( name ); @@ -262,6 +268,7 @@ void TerrainBaseMapFeatHLSL::processPix( Vector &componentLis baseColor->setType( "float4" ); baseColor->setName( "baseColor" ); meta->addStatement( new GenOp( " @ = tex2D( @, @.xy );\r\n", new DecOp( baseColor ), diffuseMap, texCoord ) ); + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", baseColor, baseColor)); meta->addStatement( new GenOp( " @;\r\n", assignColor( baseColor, Material::Mul ) ) ); output = meta; diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.h b/Engine/source/terrain/hlsl/terrFeatureHLSL.h index 85f75a29e1..e6297f3b43 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.h +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.h @@ -37,6 +37,10 @@ class TerrainFeatHLSL : public ShaderFeatureHLSL { protected: + ShaderIncludeDependency mTorqueDep; + +public: + TerrainFeatHLSL(); Var* _getInDetailCoord(Vector &componentList ); Var* _getInMacroCoord(Vector &componentList ); diff --git a/Engine/source/util/imposterCapture.cpp b/Engine/source/util/imposterCapture.cpp index fb07863901..f6bcba23ff 100644 --- a/Engine/source/util/imposterCapture.cpp +++ b/Engine/source/util/imposterCapture.cpp @@ -136,6 +136,7 @@ void ImposterCaptureMaterialHook::_overrideFeatures( ProcessedMaterial *mat, fd.features.addFeature( MFT_NormalsOut ); fd.features.addFeature( MFT_ForwardShading ); + fd.features.addFeature( MFT_Imposter ); } ImposterCaptureMaterialHook* ImposterCaptureMaterialHook::_getOrCreateHook( BaseMatInstance *inMat ) diff --git a/Templates/Full/game/art/gui/optionsDlg.gui b/Templates/Full/game/art/gui/optionsDlg.gui index fcff1cb956..9f12a272ab 100644 --- a/Templates/Full/game/art/gui/optionsDlg.gui +++ b/Templates/Full/game/art/gui/optionsDlg.gui @@ -33,7 +33,7 @@ anchorLeft = "1"; anchorRight = "0"; position = "323 232"; - extent = "377 303"; + extent = "377 355"; minExtent = "8 8"; horizSizing = "center"; vertSizing = "center"; @@ -51,7 +51,7 @@ groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - position = "306 271"; + position = "304 319"; extent = "60 23"; minExtent = "8 8"; horizSizing = "right"; @@ -179,47 +179,49 @@ canSave = "1"; canSaveDynamicFields = "0"; }; - - new GuiSliderCtrl(OptMouseSensitivity) { - range = "0.02 2"; - ticks = "10"; - value = "0.75"; - isContainer = "0"; - Profile = "GuiSliderProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "105 182"; - Extent = "244 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "OptMouseSetSensitivity(OptMouseSensitivity.value);"; - tooltipprofile = "GuiToolTipProfile"; - hovertime = "1000"; - canSaveDynamicFields = "0"; - }; - new GuiTextCtrl() { - text = "Mouse Sensitivity:"; - maxLength = "255"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - isContainer = "0"; - Profile = "GuiTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "15 182"; - Extent = "85 18"; - MinExtent = "8 8"; - canSave = "1"; - Visible = "1"; - tooltipprofile = "GuiToolTipProfile"; - hovertime = "1000"; - canSaveDynamicFields = "0"; - }; + new GuiSliderCtrl(OptMouseSensitivity) { + range = "0.02 2"; + ticks = "10"; + snap = "0"; + value = "1"; + position = "105 182"; + extent = "244 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + command = "OptMouseSetSensitivity(OptMouseSensitivity.value);"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Mouse Sensitivity:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "15 182"; + extent = "85 18"; + minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; new GuiBitmapBorderCtrl() { position = "9 55"; @@ -601,7 +603,7 @@ }; new GuiBitmapBorderCtrl() { position = "9 55"; - extent = "358 210"; + extent = "358 252"; minExtent = "8 8"; horizSizing = "right"; vertSizing = "bottom"; @@ -1253,7 +1255,7 @@ canSaveDynamicFields = "0"; }; new GuiControl() { - position = "0 190"; + position = "0 227"; extent = "352 15"; minExtent = "8 2"; horizSizing = "width"; @@ -1269,7 +1271,7 @@ canSaveDynamicFields = "0"; new GuiSliderCtrl() { - range = "0.001 2.2"; + range = "0.5 1.5"; ticks = "0"; snap = "0"; value = "1"; @@ -1281,6 +1283,66 @@ profile = "GuiSliderProfile"; visible = "1"; active = "1"; + variable = "$pref::Video::Contrast"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Contrast:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "18 -4"; + extent = "105 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; + new GuiControl() { + position = "0 190"; + extent = "352 15"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "GammaSliderContainer"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl() { + range = "2.0 2.5"; + ticks = "0"; + snap = "0"; + value = "2.2"; + position = "76 -1"; + extent = "268 15"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; variable = "$pref::Video::Gamma"; tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; @@ -1312,6 +1374,66 @@ canSaveDynamicFields = "0"; }; }; + new GuiControl() { + position = "0 208"; + extent = "352 15"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + internalName = "GammaSliderContainer"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiSliderCtrl() { + range = "-0.5 0.5"; + ticks = "0"; + snap = "0"; + value = "0"; + position = "76 -1"; + extent = "268 15"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiSliderProfile"; + visible = "1"; + active = "1"; + variable = "$pref::Video::Brightness"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Brightness:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "6 -3"; + extent = "105 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + }; }; new GuiControl() { position = "9 55"; @@ -1396,7 +1518,7 @@ groupNum = "-1"; buttonType = "PushButton"; useMouseEvents = "0"; - position = "241 271"; + position = "239 319"; extent = "60 23"; minExtent = "8 8"; horizSizing = "right"; diff --git a/Templates/Full/game/core/scripts/client/defaults.cs b/Templates/Full/game/core/scripts/client/defaults.cs index 0142a94108..d1805d337d 100644 --- a/Templates/Full/game/core/scripts/client/defaults.cs +++ b/Templates/Full/game/core/scripts/client/defaults.cs @@ -73,7 +73,9 @@ /// $pref::Video::disableParallaxMapping = false; -$pref::Video::Gamma = 1.0; +$pref::Video::Gamma = 2.2; +$pref::Video::Contrast = 1.0; +$pref::Video::Brightness = 0; // Console-friendly defaults if($platform $= "xenon") diff --git a/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs b/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs index 383a0c8cda..b88f313057 100644 --- a/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs +++ b/Templates/Full/game/core/scripts/client/postFx/GammaPostFX.cs @@ -44,7 +44,7 @@ singleton GFXStateBlockData( GammaStateBlock : PFX_DefaultStateBlock ) singleton PostEffect( GammaPostFX ) { isEnabled = true; - allowReflectPass = false; + allowReflectPass = true; renderTime = "PFXBeforeBin"; renderBin = "EditorBin"; @@ -65,6 +65,8 @@ singleton PostEffect( GammaPostFX ) function GammaPostFX::setShaderConsts( %this ) { - %clampedGamma = mClamp( $pref::Video::Gamma, 0.001, 2.2); + %clampedGamma = mClamp( $pref::Video::Gamma, 2.0, 2.5); %this.setShaderConst( "$OneOverGamma", 1 / %clampedGamma ); + %this.setShaderConst( "$Brightness", $pref::Video::Brightness ); + %this.setShaderConst( "$Contrast", $pref::Video::Contrast ); } \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/client/postFx/hdr.cs b/Templates/Full/game/core/scripts/client/postFx/hdr.cs index a5c450799a..136a5ca95b 100644 --- a/Templates/Full/game/core/scripts/client/postFx/hdr.cs +++ b/Templates/Full/game/core/scripts/client/postFx/hdr.cs @@ -253,8 +253,10 @@ singleton GFXStateBlockData( HDRStateBlock ) %combinePass.setShaderConst( "$g_fEnableBlueShift", $HDRPostFX::enableBlueShift ); %combinePass.setShaderConst( "$g_fBlueShiftColor", $HDRPostFX::blueShiftColor ); - %clampedGamma = mClamp( $pref::Video::Gamma, 0.001, 2.2); + %clampedGamma = mClamp( $pref::Video::Gamma, 2.0, 2.5); %combinePass.setShaderConst( "$g_fOneOverGamma", 1 / %clampedGamma ); + %combinePass.setShaderConst( "$Brightness", $pref::Video::Brightness ); + %combinePass.setShaderConst( "$Contrast", $pref::Video::Contrast ); %whiteCutoff = ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ) * ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ); @@ -329,7 +331,7 @@ singleton GFXStateBlockData( HDRStateBlock ) singleton PostEffect( HDRPostFX ) { isEnabled = false; - allowReflectPass = false; + allowReflectPass = true; // Resolve the HDR before we render any editor stuff // and before we resolve the scene to the backbuffer. @@ -355,6 +357,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownScale4x4Shader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -365,6 +368,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomH"; shader = HDR_BloomGaussBlurHShader; @@ -376,6 +380,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomV"; shader = HDR_BloomGaussBlurVShader; @@ -390,6 +395,7 @@ singleton PostEffect( HDRPostFX ) // Now calculate the adapted luminance. new PostEffect() { + allowReflectPass = true; internalName = "adaptLum"; shader = HDR_SampleLumShader; @@ -401,6 +407,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -411,6 +418,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -421,6 +429,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -434,6 +443,7 @@ singleton PostEffect( HDRPostFX ) // one... PostEffect takes care to manage that. new PostEffect() { + allowReflectPass = true; internalName = "finalLum"; shader = HDR_CalcAdaptedLumShader; stateBlock = HDR_DownSampleStateBlock; @@ -450,6 +460,7 @@ singleton PostEffect( HDRPostFX ) // version of the scene. new PostEffect() { + allowReflectPass = true; internalName = "combinePass"; shader = HDR_CombineShader; diff --git a/Templates/Full/game/core/scripts/client/renderManager.cs b/Templates/Full/game/core/scripts/client/renderManager.cs index dcd1628fe4..5559fd70ac 100644 --- a/Templates/Full/game/core/scripts/client/renderManager.cs +++ b/Templates/Full/game/core/scripts/client/renderManager.cs @@ -33,7 +33,7 @@ function initRenderManager() { enabled = "false"; - format = "GFXFormatR8G8B8A8"; + format = "GFXFormatR16G16B16A16F"; depthFormat = "GFXFormatD24S8"; aaLevel = 0; // -1 = match backbuffer @@ -49,20 +49,21 @@ function initRenderManager() // We really need to fix the sky to render after all the // meshes... but that causes issues in reflections. - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(SkyBin) { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); //DiffuseRenderPassManager.addManager( new RenderVistaMgr() { bintype = "Vista"; renderOrder = 0.15; processAddOrder = 0.15; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(BeginBin) { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); // Normal mesh rendering. - DiffuseRenderPassManager.addManager( new RenderTerrainMgr() { renderOrder = 0.4; processAddOrder = 0.4; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; } ); - DiffuseRenderPassManager.addManager( new RenderImposterMgr() { renderOrder = 0.56; processAddOrder = 0.56; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); - - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Decal"; renderOrder = 0.8; processAddOrder = 0.8; } ); - DiffuseRenderPassManager.addManager( new RenderOcclusionMgr() { bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); + DiffuseRenderPassManager.addManager( new RenderTerrainMgr(TerrainBin) { renderOrder = 0.4; processAddOrder = 0.4; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(MeshBin) { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; } ); + DiffuseRenderPassManager.addManager( new RenderImposterMgr(ImposterBin) { renderOrder = 0.56; processAddOrder = 0.56; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjectBin) { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); + + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ShadowBin) { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalRoadBin) { bintype = "DecalRoad"; renderOrder = 0.8; processAddOrder = 0.8; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalBin) { bintype = "Decal"; renderOrder = 0.81; processAddOrder = 0.81; } ); + DiffuseRenderPassManager.addManager( new RenderOcclusionMgr(OccluderBin){ bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); // We now render translucent objects that should handle // their own fogging and lighting. @@ -70,10 +71,10 @@ function initRenderManager() // Note that the fog effect is triggered before this bin. DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjTranslucentBin) { bintype = "ObjectTranslucent"; renderOrder = 1.0; processAddOrder = 1.0; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); - DiffuseRenderPassManager.addManager( new RenderParticleMgr() { renderOrder = 1.35; processAddOrder = 1.35; } ); - DiffuseRenderPassManager.addManager( new RenderTranslucentMgr() { renderOrder = 1.4; processAddOrder = 1.4; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(WaterBin) { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(FoliageBin) { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); + DiffuseRenderPassManager.addManager( new RenderParticleMgr(ParticleBin) { renderOrder = 1.35; processAddOrder = 1.35; } ); + DiffuseRenderPassManager.addManager( new RenderTranslucentMgr(TranslucentBin){ renderOrder = 1.4; processAddOrder = 1.4; } ); // Note that the GlowPostFx is triggered after this bin. DiffuseRenderPassManager.addManager( new RenderGlowMgr(GlowBin) { renderOrder = 1.5; processAddOrder = 1.5; } ); @@ -83,7 +84,7 @@ function initRenderManager() DiffuseRenderPassManager.addManager( new RenderObjectMgr(EditorBin) { bintype = "Editor"; renderOrder = 1.6; processAddOrder = 1.6; } ); // Resolve format change token last. - DiffuseRenderPassManager.addManager( new RenderPassStateBin() { renderOrder = 1.7; stateToken = AL_FormatToken; } ); + DiffuseRenderPassManager.addManager( new RenderPassStateBin(FinalBin) { renderOrder = 1.7; stateToken = AL_FormatToken; } ); } /// This post effect is used to copy data from the non-MSAA back-buffer to the diff --git a/Templates/Full/game/shaders/common/gl/torque.glsl b/Templates/Full/game/shaders/common/gl/torque.glsl index 9032a57f77..65580cb7b4 100644 --- a/Templates/Full/game/shaders/common/gl/torque.glsl +++ b/Templates/Full/game/shaders/common/gl/torque.glsl @@ -284,4 +284,37 @@ void fizzle(vec2 vpos, float visibility) /// @note This macro will only work in the void main() method of a pixel shader. #define assert(condition, color) { if(!any(condition)) { OUT_col = color; return; } } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, int num) +{ + float process = round(flags * 255); + float squareNum = pow(2, num); + return (mod(process, pow(2, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return tex; +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(2.2)), tex.a); +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(1.0/2.2)), tex.a); +} +#endif // + #endif // _TORQUE_GLSL_ diff --git a/Templates/Full/game/shaders/common/postFx/gammaP.hlsl b/Templates/Full/game/shaders/common/postFx/gammaP.hlsl index dedfe8eb5a..20196548b1 100644 --- a/Templates/Full/game/shaders/common/postFx/gammaP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/gammaP.hlsl @@ -28,7 +28,8 @@ uniform sampler2D backBuffer : register(S0); uniform sampler1D colorCorrectionTex : register( s1 ); uniform float OneOverGamma; - +uniform float Brightness; +uniform float Contrast; float4 main( PFXVertToPix IN ) : COLOR0 { @@ -42,5 +43,11 @@ float4 main( PFXVertToPix IN ) : COLOR0 // Apply gamma correction color.rgb = pow( abs(color.rgb), OneOverGamma ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + return color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl b/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl index 414a277d34..1bf5d1b8f1 100644 --- a/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl +++ b/Templates/Full/game/shaders/common/postFx/gl/gammaP.glsl @@ -28,6 +28,8 @@ uniform sampler2D backBuffer; uniform sampler1D colorCorrectionTex; uniform float OneOverGamma; +uniform float Brightness; +uniform float Contrast; in vec2 uv0; @@ -45,5 +47,11 @@ void main() // Apply gamma correction color.rgb = pow( abs(color.rgb), vec3(OneOverGamma) ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + OUT_col = color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl index 7ac71bebd5..9541f39cb1 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl @@ -41,6 +41,8 @@ uniform float3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; float4 main( PFXVertToPix IN ) : COLOR0 @@ -90,6 +92,12 @@ float4 main( PFXVertToPix IN ) : COLOR0 // Apply gamma correction sample.rgb = pow( abs(sample.rgb), g_fOneOverGamma ); + + // Apply contrast + sample.rgb = ((sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + sample.rgb += Brightness; return sample; } diff --git a/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl b/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl index 38762baa5e..123c831f32 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl @@ -42,6 +42,8 @@ uniform vec3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; out vec4 OUT_col; @@ -93,6 +95,12 @@ void main() // Apply gamma correction _sample.rgb = pow( abs(_sample.rgb), vec3(g_fOneOverGamma) ); + + // Apply contrast + _sample.rgb = ((_sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + _sample.rgb += Brightness; OUT_col = _sample; } diff --git a/Templates/Full/game/shaders/common/torque.hlsl b/Templates/Full/game/shaders/common/torque.hlsl index 1d253936b6..f50832cb8f 100644 --- a/Templates/Full/game/shaders/common/torque.hlsl +++ b/Templates/Full/game/shaders/common/torque.hlsl @@ -277,5 +277,37 @@ void fizzle(float2 vpos, float visibility) clip( visibility - frac( determinant( m ) ) ); } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, int num) +{ + int process = round(flags * 255); + int squareNum = pow(2, num); + return (fmod(process, pow(2, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +// Encodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return float4(pow(abs(tex.rgb), 2.2), tex.a); +} +// Encodes gamma. +float4 toGamma(float4 tex) +{ + return float4(pow(abs(tex.rgb), 1.0/2.2), tex.a); +} +#endif // #endif // _TORQUE_HLSL_ diff --git a/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl b/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl index 82c4210316..1d5a07c3f2 100644 --- a/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl +++ b/Templates/Full/game/shaders/common/water/gl/waterBasicP.glsl @@ -120,6 +120,7 @@ void main() { // Modulate baseColor by the ambientColor. vec4 waterBaseColor = baseColor * vec4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... vec3 bumpNorm = ( texture( bumpMap, IN_rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; diff --git a/Templates/Full/game/shaders/common/water/gl/waterP.glsl b/Templates/Full/game/shaders/common/water/gl/waterP.glsl index af151020aa..15002849f6 100644 --- a/Templates/Full/game/shaders/common/water/gl/waterP.glsl +++ b/Templates/Full/game/shaders/common/water/gl/waterP.glsl @@ -324,6 +324,7 @@ void main() // Calculate the water "base" color based on depth. vec4 waterBaseColor = baseColor * texture( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= vec4( ambientColor.rgb, 1 ); diff --git a/Templates/Full/game/shaders/common/water/waterBasicP.hlsl b/Templates/Full/game/shaders/common/water/waterBasicP.hlsl index d27b28c675..7ae933f6f1 100644 --- a/Templates/Full/game/shaders/common/water/waterBasicP.hlsl +++ b/Templates/Full/game/shaders/common/water/waterBasicP.hlsl @@ -117,6 +117,7 @@ float4 main( ConnectData IN ) : COLOR { // Modulate baseColor by the ambientColor. float4 waterBaseColor = baseColor * float4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; diff --git a/Templates/Full/game/shaders/common/water/waterP.hlsl b/Templates/Full/game/shaders/common/water/waterP.hlsl index 851fb471f6..2b40357555 100644 --- a/Templates/Full/game/shaders/common/water/waterP.hlsl +++ b/Templates/Full/game/shaders/common/water/waterP.hlsl @@ -311,6 +311,7 @@ float4 main( ConnectData IN ) : COLOR // Calculate the water "base" color based on depth. float4 waterBaseColor = baseColor * tex1D( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= float4( ambientColor.rgb, 1 ); From 74a194a27795356f902bdbbaa3f57516675cc8c2 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sat, 14 Nov 2015 11:26:42 -0600 Subject: [PATCH 077/324] missed a convexSweepTest early-out check. --- Engine/source/T3D/physics/bullet/btPlayer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Engine/source/T3D/physics/bullet/btPlayer.cpp b/Engine/source/T3D/physics/bullet/btPlayer.cpp index c7625e2bba..6e22b0cf81 100644 --- a/Engine/source/T3D/physics/bullet/btPlayer.cpp +++ b/Engine/source/T3D/physics/bullet/btPlayer.cpp @@ -341,7 +341,8 @@ void BtPlayer::_stepForward( btVector3 *inOutCurrPos, const btVector3 &displacem callback.m_collisionFilterGroup = mGhostObject->getBroadphaseHandle()->m_collisionFilterGroup; callback.m_collisionFilterMask = mGhostObject->getBroadphaseHandle()->m_collisionFilterMask; - mGhostObject->convexSweepTest( mColShape, start, end, callback, 0.0f ); + if (disp.length()>0.0001) + mGhostObject->convexSweepTest( mColShape, start, end, callback, 0.0f ); // Subtract from the travel fraction. fraction -= callback.m_closestHitFraction; From b48802c6c4e9643655864d91e9ef256c872a6adc Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sat, 14 Nov 2015 11:28:21 -0600 Subject: [PATCH 078/324] bullet module verified extract from https://github.com/GarageGames/Torque3D/pull/1146 --- Tools/CMake/libraries/libbullet.cmake | 50 +++++++++++++++++++++++++ Tools/CMake/modules/module_bullet.cmake | 37 ++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 Tools/CMake/libraries/libbullet.cmake create mode 100644 Tools/CMake/modules/module_bullet.cmake diff --git a/Tools/CMake/libraries/libbullet.cmake b/Tools/CMake/libraries/libbullet.cmake new file mode 100644 index 0000000000..215f4a87e5 --- /dev/null +++ b/Tools/CMake/libraries/libbullet.cmake @@ -0,0 +1,50 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2015 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +project(libbullet) + +addPath( "${libDir}/bullet/src" ) +addPath( "${libDir}/bullet/src/BulletCollision" ) +addPath( "${libDir}/bullet/src/BulletCollision/BroadphaseCollision" ) +addPath( "${libDir}/bullet/src/BulletCollision/CollisionDispatch" ) +addPath( "${libDir}/bullet/src/BulletCollision/CollisionShapes" ) +addPath( "${libDir}/bullet/src/BulletCollision/Gimpact" ) +addPath( "${libDir}/bullet/src/BulletCollision/NarrowPhaseCollision" ) +addPath( "${libDir}/bullet/src/BulletDynamics" ) +addPath( "${libDir}/bullet/src/BulletDynamics/Character" ) +addPath( "${libDir}/bullet/src/BulletDynamics/ConstraintSolver" ) +addPath( "${libDir}/bullet/src/BulletDynamics/Dynamics" ) +addPath( "${libDir}/bullet/src/BulletDynamics/Vehicle" ) +addPath( "${libDir}/bullet/src/LinearMath" ) + +if( WIN32 ) + addDef( "WIN32" ) + + addPath( "${libDir}/bullet/src/BulletMultiThreaded" ) + addPath( "${libDir}/bullet/src/BulletMultiThreaded/MiniCLTask" ) + addPath( "${libDir}/bullet/src/BulletMultiThreaded/SpuNarrowPhaseCollisionTask" ) + addInclude( "${libDir}/bullet/src/BulletMultiThreaded/vectormath/scalar/cpp" ) +endif() + +addInclude( "${libDir}/bullet/src" ) + +finishLibrary() \ No newline at end of file diff --git a/Tools/CMake/modules/module_bullet.cmake b/Tools/CMake/modules/module_bullet.cmake new file mode 100644 index 0000000000..10391a171f --- /dev/null +++ b/Tools/CMake/modules/module_bullet.cmake @@ -0,0 +1,37 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2015 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +# Bullet module + +option(TORQUE_PHYSICS_BULLET "Use Bullet physics" OFF) + +if( NOT TORQUE_PHYSICS_BULLET ) + return() +endif() + +addDef( "TORQUE_PHYSICS_BULLET" ) +addDef( "TORQUE_PHYSICS_ENABLED" ) + +addPath( "${srcDir}/T3D/physics/bullet" ) +addInclude( "${libDir}/bullet/src" ) + +addLib( "libbullet" ) \ No newline at end of file From b6bd8c863c4c31c0532a0623ca7a2719b044bf17 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 20 Nov 2015 10:52:57 -0600 Subject: [PATCH 079/324] removes StaticObjectType flag from water objects. https://github.com/GarageGames/Torque3D/issues/1458 --- Engine/source/environment/waterObject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/environment/waterObject.cpp b/Engine/source/environment/waterObject.cpp index e96857bc1b..9b527e4c8d 100644 --- a/Engine/source/environment/waterObject.cpp +++ b/Engine/source/environment/waterObject.cpp @@ -206,7 +206,7 @@ WaterObject::WaterObject() mEmissive( false ), mUnderwaterColor(9, 6, 5, 240) { - mTypeMask = WaterObjectType | StaticObjectType; + mTypeMask = WaterObjectType; for( U32 i=0; i < MAX_WAVES; i++ ) { From d3c7edfe4290a6b87182dc9a79f410b684b67093 Mon Sep 17 00:00:00 2001 From: Robert MacGregor Date: Sun, 22 Nov 2015 02:45:25 -0500 Subject: [PATCH 080/324] Fix TinyXML Build errors --- Engine/source/console/consoleObject.h | 110 +++++++++++++------------- 1 file changed, 53 insertions(+), 57 deletions(-) diff --git a/Engine/source/console/consoleObject.h b/Engine/source/console/consoleObject.h index 5e585247ef..5f04435aa2 100644 --- a/Engine/source/console/consoleObject.h +++ b/Engine/source/console/consoleObject.h @@ -48,7 +48,7 @@ #include "console/simObjectRef.h" #endif #ifndef TINYXML_INCLUDED - #include "tinyXML/tinyxml.h" + #include "tinyxml.h" #endif /// @file @@ -212,7 +212,7 @@ class AbstractClassRep : public ConsoleBaseType /// /// @param conIdPtr Pointer to the static S32 console ID. /// @param conTypeName Console type name. - AbstractClassRep( S32* conIdPtr, const char* typeName ) + AbstractClassRep( S32* conIdPtr, const char* typeName ) : Parent( sizeof( void* ), conIdPtr, typeName ) { VECTOR_SET_ASSOCIATION( mFieldList ); @@ -323,13 +323,13 @@ class AbstractClassRep : public ConsoleBaseType /// Return the namespace that contains the methods of this class. Namespace* getNameSpace() const { return mNamespace; } - + /// Return the AbstractClassRep of the class that this class is derived from. AbstractClassRep* getParentClass() const { return parentClass; } virtual AbstractClassRep* getContainerChildClass(const bool recurse) = 0; virtual WriteCustomTamlSchema getCustomTamlSchema(void) = 0; - + /// Return the size of instances of this class in bytes. S32 getSizeof() const { return mClassSizeof; } @@ -396,7 +396,7 @@ class AbstractClassRep : public ConsoleBaseType Namespace * mNamespace; /// @} - + public: bool mIsRenderEnabled; @@ -404,23 +404,23 @@ class AbstractClassRep : public ConsoleBaseType bool isRenderEnabled() const { return mIsRenderEnabled; } bool isSelectionEnabled() const { return mIsSelectionEnabled; } - + /// @name Categories /// @{ - + protected: const char* mCategory; const char* mDescription; - + public: /// Return the space separated category path for the class. const char* getCategory() const { return mCategory; } - + /// Return a short description string suitable for displaying in tooltips. const char* getDescription() const { return mDescription; } - + /// @} /// @name Fields @@ -434,16 +434,12 @@ class AbstractClassRep : public ConsoleBaseType /// This is a function pointer typedef to support optional writing for fields. typedef bool(*WriteDataNotify)(void* obj, StringTableEntry pFieldName); - /// Allows the writing of a custom TAML schema. - typedef void(*WriteCustomTamlSchema)(const AbstractClassRep* pClassRep, TiXmlElement* pParentElement); - - /// These are special field type values used to mark /// groups and arrays in the field list. /// @see Field::type /// @see addArray, endArray - /// @see addGroup, endGroup - /// @see addGroup, endGroup + /// @see addGroup, endGroup + /// @see addGroup, endGroup /// @see addDeprecatedField enum ACRFieldTypes { @@ -451,35 +447,35 @@ class AbstractClassRep : public ConsoleBaseType /// types greater or equal to this one are not /// console data types. ARCFirstCustomField = 0xFFFFFFFB, - + /// Marks the start of a fixed size array of fields. /// @see addArray StartArrayFieldType = 0xFFFFFFFB, - + /// Marks the end of a fixed size array of fields. /// @see endArray EndArrayFieldType = 0xFFFFFFFC, - + /// Marks the beginning of a group of fields. /// @see addGroup StartGroupFieldType = 0xFFFFFFFD, - + /// Marks the beginning of a group of fields. /// @see endGroup EndGroupFieldType = 0xFFFFFFFE, - - /// Marks a field that is depreciated and no + + /// Marks a field that is depreciated and no /// longer stores a value. /// @see addDeprecatedField DeprecatedFieldType = 0xFFFFFFFF }; - + enum FieldFlags { FIELD_HideInInspectors = BIT( 0 ), ///< Do not show the field in inspectors. }; - struct Field + struct Field { Field() : pFieldname( NULL ), @@ -525,10 +521,10 @@ class AbstractClassRep : public ConsoleBaseType /// @name Console Type Interface /// @{ - + virtual void* getNativeVariable() { return new ( AbstractClassRep* ); } // Any pointer-sized allocation will do. virtual void deleteNativeVariable( void* var ) { delete reinterpret_cast< AbstractClassRep** >( var ); } - + /// @} /// @name Abstract Class Database @@ -574,10 +570,10 @@ template< class T > class ConcreteClassRep : public AbstractClassRep { public: - + static EnginePropertyTable _smPropertyTable; static EnginePropertyTable& smPropertyTable; - + ConcreteClassRep( const char* name, const char* conTypeName, S32* conTypeIdPtr, @@ -591,10 +587,10 @@ class ConcreteClassRep : public AbstractClassRep mClassName = StringTable->insert( name ); mCategory = T::__category(); mTypeInfo = _MAPTYPE< T >(); - + if( mTypeInfo ) const_cast< EngineTypeInfo* >( mTypeInfo )->mPropertyTable = &smPropertyTable; - + if( &T::__description != parentDesc ) mDescription = T::__description(); @@ -642,7 +638,7 @@ class ConcreteClassRep : public AbstractClassRep // Get handle to our parent class, if any, and ourselves (we are our parent's child). AbstractClassRep *parent = T::getParentStaticClassRep(); AbstractClassRep *child = T::getStaticClassRep(); - + // If we got reps, then link those namespaces! (To get proper inheritance.) if(parent && child) Con::classLinkNamespaces(parent->getNameSpace(), child->getNameSpace()); @@ -657,7 +653,7 @@ class ConcreteClassRep : public AbstractClassRep /// Wrap constructor. ConsoleObject* create() const { return new T; } - + /// @name Console Type Interface /// @{ @@ -671,16 +667,16 @@ class ConcreteClassRep : public AbstractClassRep else Con::errorf( "Cannot set multiple args to a single ConsoleObject*."); } - + virtual const char* getData( void* dptr, const EnumTable* tbl, BitSet32 flag ) { T** obj = ( T** ) dptr; return Con::getReturnBuffer( T::__getObjectId( *obj ) ); } - + virtual const char* getTypeClassName() { return mClassName; } virtual const bool isDatablock() { return T::__smIsDatablock; }; - + /// @} }; @@ -751,7 +747,7 @@ bool defaultProtectedWriteFn(void* obj, StringTableEntry pFieldName); class ConsoleObject : public EngineObject { DECLARE_ABSTRACT_CLASS( ConsoleObject, EngineObject ); - + protected: /// @deprecated This is disallowed. @@ -760,7 +756,7 @@ class ConsoleObject : public EngineObject public: ConsoleObject() {} - + /// Get a reference to a field by name. const AbstractClassRep::Field *findField(StringTableEntry fieldName) const; @@ -769,7 +765,7 @@ class ConsoleObject : public EngineObject /// Set the value of a field. bool setField(const char *fieldName, const char *value); - + public: /// @name Object Creation @@ -799,11 +795,11 @@ class ConsoleObject : public EngineObject static void endGroup(const char* in_pGroupname); /// Marks the start of a fixed size array of fields. - /// @see console_autodoc + /// @see console_autodoc static void addArray( const char *arrayName, S32 count ); /// Marks the end of an array of fields. - /// @see console_autodoc + /// @see console_autodoc static void endArray( const char *arrayName ); /// Register a complex field. @@ -928,16 +924,16 @@ class ConsoleObject : public EngineObject static bool removeField(const char* in_pFieldname); /// @} - + /// @name Logging /// @{ - + /// Overload this in subclasses to change the message formatting. /// @param fmt A printf style format string. /// @param args A va_list containing the args passed ot a log function. /// @note It is suggested that you use String::VToString. virtual String _getLogMessage(const char* fmt, va_list args) const; - + /// @} public: @@ -946,16 +942,16 @@ class ConsoleObject : public EngineObject /// These functions will try to print out a message along the lines /// of "ObjectClass - ObjectName(ObjectId) - formatted message" /// @{ - + /// Logs with Con::printf. void logMessage(const char* fmt, ...) const; - + /// Logs with Con::warnf. void logWarning(const char* fmt, ...) const; - + /// Logs with Con::errorf. void logError(const char* fmt, ...) const; - + /// @} /// Register dynamic fields in a subclass of ConsoleObject. @@ -1016,16 +1012,16 @@ class ConsoleObject : public EngineObject static const char* __category() { return ""; } static const char* __description() { return ""; } - + /// Subclasses of ConsoleObjects that are datablocks should redefine this static member variable /// and set it to true. static const bool __smIsDatablock = false; - + /// @name Object IDs and lookup. /// For a subclass hierarchy based on ConsoleObject to become functional for use as a console object type, /// the hierarchy must implement a naming scheme and indexing function for looking up objects by name. /// @{ - + static ConsoleObject* __findObject( const char* ) { return NULL; } static const char* __getObjectId( ConsoleObject* ) { return ""; } }; @@ -1120,11 +1116,11 @@ inline bool& ConsoleObject::getDynamicGroupExpand() static SimObjectRefConsoleBaseType< className > ptrRefType; \ static AbstractClassRep::WriteCustomTamlSchema getStaticWriteCustomTamlSchema(); \ static AbstractClassRep* getContainerChildStaticClassRep(); \ - virtual AbstractClassRep* getClassRep() const - + virtual AbstractClassRep* getClassRep() const + #define DECLARE_CATEGORY( string ) \ static const char* __category() { return string; } - + #define DECLARE_DESCRIPTION( string ) \ static const char* __description() { return string; } @@ -1199,7 +1195,7 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep(#className, "Type" #className, &_smTypeId, NetClassGroupGameMask, NetClassTypeDataBlock, 0, className::getParentStaticClassRep(), &Parent::__description ) - + // Support for adding properties to classes CONOBJECT style. #define PROPERTY_TABLE( className ) \ namespace { namespace _ ## className { \ @@ -1209,13 +1205,13 @@ inline bool& ConsoleObject::getDynamicGroupExpand() ConcreteClassRep< className >::smPropertyTable = _ ## className::_propTable; \ namespace { namespace _ ## className { \ EnginePropertyTable::Property _props[] = { - + #define END_PROPERTY_TABLE \ { NULL } \ }; \ EnginePropertyTable _propTable( sizeof( _props ) / sizeof( _props[ 0 ] ) - 1, _props ); \ } } - + /// Add an auto-doc for a class. #define ConsoleDocClass( className, docString ) \ CLASSDOC( className, docString ) @@ -1225,7 +1221,7 @@ inline bool& ConsoleObject::getDynamicGroupExpand() //------------------------------------------------------------------------------ // Protected field default get/set functions // -// The reason for these functions is that it will save one branch per console +// The reason for these functions is that it will save one branch per console // data request and script functions will still execute at the same speed as // before the modifications to allow protected static fields. These will just // inline and the code should be roughly the same size, and just as fast as From b0b39b5f83cb55f79da537bcd854f4a44da64631 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 27 Nov 2015 16:17:30 -0600 Subject: [PATCH 081/324] mDirtyTiles changed from std::queue to a vector allows us to leverage .push_back_unique(&foo); and .clear(); --- Engine/source/navigation/navMesh.cpp | 16 ++++++++-------- Engine/source/navigation/navMesh.h | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index 7df05ee2e6..02de1b071c 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -637,7 +637,7 @@ DefineEngineMethod(NavMesh, build, bool, (bool background, bool save), (true, fa void NavMesh::cancelBuild() { - while(!mDirtyTiles.empty()) mDirtyTiles.pop(); + mDirtyTiles.clear(); ctx->stopTimer(RC_TIMER_TOTAL); mBuilding = false; } @@ -707,7 +707,7 @@ void NavMesh::updateTiles(bool dirty) mTiles.clear(); mTileData.clear(); - while(!mDirtyTiles.empty()) mDirtyTiles.pop(); + mDirtyTiles.clear(); const Box3F &box = DTStoRC(getWorldBox()); if(box.isEmpty()) @@ -741,7 +741,7 @@ void NavMesh::updateTiles(bool dirty) tileBmin, tileBmax)); if(dirty) - mDirtyTiles.push(mTiles.size() - 1); + mDirtyTiles.push_back_unique(mTiles.size() - 1); if(mSaveIntermediates) mTileData.increment(); @@ -760,7 +760,7 @@ void NavMesh::buildNextTile() { // Pop a single dirty tile and process it. U32 i = mDirtyTiles.front(); - mDirtyTiles.pop(); + mDirtyTiles.pop_front(); const Tile &tile = mTiles[i]; // Intermediate data for tile build. TileData tempdata; @@ -844,7 +844,7 @@ unsigned char *NavMesh::buildTileData(const Tile &tile, TileData &data, U32 &dat // Check for no geometry. if(!data.geom.getVertCount()) - return false; + return NULL; // Figure out voxel dimensions of this tile. U32 width = 0, height = 0; @@ -1066,7 +1066,7 @@ void NavMesh::buildTiles(const Box3F &box) if(!tile.box.isOverlapped(box)) continue; // Mark as dirty. - mDirtyTiles.push(i); + mDirtyTiles.push_back_unique(i); } if(mDirtyTiles.size()) ctx->startTimer(RC_TIMER_TOTAL); @@ -1082,7 +1082,7 @@ void NavMesh::buildTile(const U32 &tile) { if(tile < mTiles.size()) { - mDirtyTiles.push(tile); + mDirtyTiles.push_back_unique(tile); ctx->startTimer(RC_TIMER_TOTAL); } } @@ -1104,7 +1104,7 @@ void NavMesh::buildLinks() mLinksUnsynced[j]) { // Mark tile for build. - mDirtyTiles.push(i); + mDirtyTiles.push_back_unique(i); // Delete link if necessary if(mDeleteLinks[j]) { diff --git a/Engine/source/navigation/navMesh.h b/Engine/source/navigation/navMesh.h index 1d9eba1b1f..ff279c3be2 100644 --- a/Engine/source/navigation/navMesh.h +++ b/Engine/source/navigation/navMesh.h @@ -325,7 +325,7 @@ class NavMesh : public SceneObject { Vector mTileData; /// List of indices to the tile array which are dirty. - std::queue mDirtyTiles; + Vector mDirtyTiles; /// Update tile dimensions. void updateTiles(bool dirty = false); From e63c0a78a3b924b2de3baae41d54d25abb14a928 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 27 Nov 2015 17:43:08 -0600 Subject: [PATCH 082/324] NavMeshUpdateAll leak suppression (not 100% preventative) 1) Reset the build when adding potential dirties to the list to ensure it isn't trying to kill off a dirty entry that it's passed by. 2) mSaveIntermediates = true; causes leakage even with all this. still tracking that end. 3) Need to remove a dead tile whether there's new data to replace it with or not. Empty tiles are an entirely possible case. Even a probable one if you have high verticality in a level. 4) Likewise you don't want to re-feed the same geometry list for a given tile in case the conditions have changed. 5) If no vertcount then clear all geometry entries. (that one might be paranoia) --- Engine/source/navigation/navMesh.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index 7df05ee2e6..5575327e8b 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -113,7 +113,11 @@ DefineConsoleFunction(NavMeshUpdateAll, void, (S32 objid, bool remove), (0, fals for(U32 i = 0; i < set->size(); i++) { NavMesh *m = static_cast(set->at(i)); - m->buildTiles(obj->getWorldBox()); + if (m) + { + m->cancelBuild(); + m->buildTiles(obj->getWorldBox()); + } } if(remove) obj->enableCollision(); @@ -147,7 +151,7 @@ NavMesh::NavMesh() mFileName = StringTable->insert(""); mNetFlags.clear(Ghostable); - mSaveIntermediates = true; + mSaveIntermediates = false; nm = NULL; ctx = NULL; @@ -765,13 +769,15 @@ void NavMesh::buildNextTile() // Intermediate data for tile build. TileData tempdata; TileData &tdata = mSaveIntermediates ? mTileData[i] : tempdata; + + // Remove any previous data. + nm->removeTile(nm->getTileRefAt(tile.x, tile.y, 0), 0, 0); + // Generate navmesh for this tile. U32 dataSize = 0; unsigned char* data = buildTileData(tile, tdata, dataSize); if(data) { - // Remove any previous data. - nm->removeTile(nm->getTileRefAt(tile.x, tile.y, 0), 0, 0); // Add new data (navmesh owns and deletes the data). dtStatus status = nm->addTile(data, dataSize, DT_TILE_FREE_DATA, 0, 0); int success = 1; @@ -830,6 +836,7 @@ unsigned char *NavMesh::buildTileData(const Tile &tile, TileData &data, U32 &dat SceneContainer::CallbackInfo info; info.context = PLC_Navigation; info.boundingBox = box; + data.geom.clear(); info.polyList = &data.geom; info.key = this; getContainer()->findObjects(box, StaticShapeObjectType | TerrainObjectType, buildCallback, &info); @@ -843,8 +850,11 @@ unsigned char *NavMesh::buildTileData(const Tile &tile, TileData &data, U32 &dat } // Check for no geometry. - if(!data.geom.getVertCount()) - return false; + if (!data.geom.getVertCount()) + { + data.geom.clear(); + return NULL; + } // Figure out voxel dimensions of this tile. U32 width = 0, height = 0; From 45055f8f3e638b2fed977f54157f8798eea28e91 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 27 Nov 2015 18:18:21 -0600 Subject: [PATCH 083/324] formatting --- Engine/source/navigation/navMesh.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index 5575327e8b..738348d2f0 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -113,8 +113,8 @@ DefineConsoleFunction(NavMeshUpdateAll, void, (S32 objid, bool remove), (0, fals for(U32 i = 0; i < set->size(); i++) { NavMesh *m = static_cast(set->at(i)); - if (m) - { + if (m) + { m->cancelBuild(); m->buildTiles(obj->getWorldBox()); } From a90eb9762b4bff4e3fb90576d1b653ce78d0e0b4 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 1 Dec 2015 00:10:13 -0600 Subject: [PATCH 084/324] Re-submission of the Volumetric Fog PR, with cleanup. --- Engine/source/gui/core/guiCanvas.cpp | 3 + Engine/source/gui/core/guiCanvas.h | 10 + .../renderInstance/renderPassManager.cpp | 1 + .../source/renderInstance/renderPassManager.h | 1 + .../renderInstance/renderTranslucentMgr.cpp | 10 + .../source/windowManager/platformWindow.cpp | 7 +- Engine/source/windowManager/platformWindow.h | 11 +- .../windowManager/win32/win32Window.cpp | 2 + .../game/art/environment/FogMod_heavy.dds | Bin 0 -> 131200 bytes .../game/art/environment/FogMod_light.dds | Bin 0 -> 131200 bytes .../Empty/game/art/environment/FogMod_med.dds | Bin 0 -> 131200 bytes .../Empty/game/art/environment/Fog_Cube.DAE | 177 ++++++++ .../Empty/game/art/environment/Fog_Cube.cs | 8 + .../game/core/scripts/client/postFx/glow.cs | 76 ++++ .../postFx/postFxManager.gui.settings.cs | 1 + .../game/core/scripts/client/renderManager.cs | 2 + .../game/scripts/server/VolumetricFog.cs | 106 +++++ .../Empty/game/scripts/server/scriptExec.cs | 1 + .../shaders/common/VolumetricFog/VFogP.hlsl | 87 ++++ .../common/VolumetricFog/VFogPreP.hlsl | 39 ++ .../common/VolumetricFog/VFogPreV.hlsl | 46 ++ .../common/VolumetricFog/VFogRefl.hlsl | 36 ++ .../shaders/common/VolumetricFog/VFogV.hlsl | 45 ++ .../common/VolumetricFog/gl/VFogP.glsl | 87 ++++ .../common/VolumetricFog/gl/VFogPreP.glsl | 37 ++ .../common/VolumetricFog/gl/VFogPreV.glsl | 42 ++ .../common/VolumetricFog/gl/VFogRefl.glsl | 33 ++ .../common/VolumetricFog/gl/VFogV.glsl | 38 ++ .../shaders/common/postFx/VolFogGlowP.hlsl | 74 +++ .../shaders/common/postFx/gl/VolFogGlowP.glsl | 67 +++ .../game/tools/classIcons/VolumetricFog.png | Bin 0 -> 3642 bytes .../worldEditor/gui/objectBuilderGui.ed.gui | 14 +- .../worldEditor/scripts/editors/creator.ed.cs | 1 + .../game/art/environment/FogMod_heavy.dds | Bin 0 -> 131200 bytes .../game/art/environment/FogMod_light.dds | Bin 0 -> 131200 bytes .../Full/game/art/environment/FogMod_med.dds | Bin 0 -> 131200 bytes .../Full/game/art/environment/Fog_Cube.DAE | 177 ++++++++ .../Full/game/art/environment/Fog_Cube.cs | 8 + .../art/environment/LightVolume_Sphere.DAE | 423 ++++++++++++++++++ .../art/environment/LightVolume_Sphere.cs | 8 + .../art/environment/LightVolume_Sphere.dts | Bin 0 -> 12883 bytes .../game/core/scripts/client/postFx/glow.cs | 76 ++++ .../postFx/postFxManager.gui.settings.cs | 1 + .../game/core/scripts/client/renderManager.cs | 2 + .../Full/game/core/scripts/client/shaders.cs | 36 ++ .../Full/game/scripts/server/VolumetricFog.cs | 106 +++++ .../Full/game/scripts/server/scriptExec.cs | 1 + .../shaders/common/VolumetricFog/VFogP.hlsl | 87 ++++ .../common/VolumetricFog/VFogPreP.hlsl | 39 ++ .../common/VolumetricFog/VFogPreV.hlsl | 46 ++ .../common/VolumetricFog/VFogRefl.hlsl | 37 ++ .../shaders/common/VolumetricFog/VFogV.hlsl | 45 ++ .../common/VolumetricFog/gl/VFogP.glsl | 87 ++++ .../common/VolumetricFog/gl/VFogPreP.glsl | 37 ++ .../common/VolumetricFog/gl/VFogPreV.glsl | 42 ++ .../common/VolumetricFog/gl/VFogRefl.glsl | 33 ++ .../common/VolumetricFog/gl/VFogV.glsl | 38 ++ .../shaders/common/postFx/VolFogGlowP.hlsl | 74 +++ .../shaders/common/postFx/gl/VolFogGlowP.glsl | 67 +++ .../game/tools/classIcons/VolumetricFog.png | Bin 0 -> 3642 bytes .../worldEditor/gui/objectBuilderGui.ed.gui | 14 +- .../worldEditor/scripts/editors/creator.ed.cs | 1 + 62 files changed, 2541 insertions(+), 6 deletions(-) create mode 100644 Templates/Empty/game/art/environment/FogMod_heavy.dds create mode 100644 Templates/Empty/game/art/environment/FogMod_light.dds create mode 100644 Templates/Empty/game/art/environment/FogMod_med.dds create mode 100644 Templates/Empty/game/art/environment/Fog_Cube.DAE create mode 100644 Templates/Empty/game/art/environment/Fog_Cube.cs create mode 100644 Templates/Empty/game/scripts/server/VolumetricFog.cs create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogP.glsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl create mode 100644 Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogV.glsl create mode 100644 Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl create mode 100644 Templates/Empty/game/shaders/common/postFx/gl/VolFogGlowP.glsl create mode 100644 Templates/Empty/game/tools/classIcons/VolumetricFog.png create mode 100644 Templates/Full/game/art/environment/FogMod_heavy.dds create mode 100644 Templates/Full/game/art/environment/FogMod_light.dds create mode 100644 Templates/Full/game/art/environment/FogMod_med.dds create mode 100644 Templates/Full/game/art/environment/Fog_Cube.DAE create mode 100644 Templates/Full/game/art/environment/Fog_Cube.cs create mode 100644 Templates/Full/game/art/environment/LightVolume_Sphere.DAE create mode 100644 Templates/Full/game/art/environment/LightVolume_Sphere.cs create mode 100644 Templates/Full/game/art/environment/LightVolume_Sphere.dts create mode 100644 Templates/Full/game/scripts/server/VolumetricFog.cs create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/gl/VFogP.glsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl create mode 100644 Templates/Full/game/shaders/common/VolumetricFog/gl/VFogV.glsl create mode 100644 Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl create mode 100644 Templates/Full/game/shaders/common/postFx/gl/VolFogGlowP.glsl create mode 100644 Templates/Full/game/tools/classIcons/VolumetricFog.png diff --git a/Engine/source/gui/core/guiCanvas.cpp b/Engine/source/gui/core/guiCanvas.cpp index 84fe6e0c26..a3f2344f2b 100644 --- a/Engine/source/gui/core/guiCanvas.cpp +++ b/Engine/source/gui/core/guiCanvas.cpp @@ -321,8 +321,11 @@ void GuiCanvas::setWindowTitle(const char *newTitle) mPlatformWindow->setCaption(newTitle); } +CanvasSizeChangeSignal GuiCanvas::smCanvasSizeChangeSignal; + void GuiCanvas::handleResize( WindowId did, S32 width, S32 height ) { + getCanvasSizeChangeSignal().trigger(this); if (Journal::IsPlaying() && mPlatformWindow) { mPlatformWindow->lockSize(false); diff --git a/Engine/source/gui/core/guiCanvas.h b/Engine/source/gui/core/guiCanvas.h index b1444ce320..0a2e44fa58 100644 --- a/Engine/source/gui/core/guiCanvas.h +++ b/Engine/source/gui/core/guiCanvas.h @@ -33,6 +33,10 @@ #include "platform/platformInput.h" #endif +#ifndef _SIGNAL_H_ +#include "core/util/tSignal.h" +#endif + #include "component/interfaces/IProcessInput.h" #include "windowManager/platformWindowMgr.h" #include "gfx/gfxFence.h" @@ -74,6 +78,8 @@ /// screen will be painted normally. If you are making an animated GuiControl /// you need to add your control to the dirty areas of the canvas. /// +class guiCanvas; +typedef Signal CanvasSizeChangeSignal; class GuiCanvas : public GuiControl, public IProcessInput { @@ -183,6 +189,8 @@ class GuiCanvas : public GuiControl, public IProcessInput virtual void setupFences(); void checkLockMouseMove( const GuiEvent& event ); + //Signal used to let others know this canvas has changed size. + static CanvasSizeChangeSignal smCanvasSizeChangeSignal; GuiControl *mMenuBarCtrl; @@ -200,6 +208,8 @@ class GuiCanvas : public GuiControl, public IProcessInput static void initPersistFields(); + static CanvasSizeChangeSignal& getCanvasSizeChangeSignal() { return smCanvasSizeChangeSignal; } + /// @name Rendering methods /// /// @{ diff --git a/Engine/source/renderInstance/renderPassManager.cpp b/Engine/source/renderInstance/renderPassManager.cpp index 236cccd9b6..68daed77e9 100644 --- a/Engine/source/renderInstance/renderPassManager.cpp +++ b/Engine/source/renderInstance/renderPassManager.cpp @@ -53,6 +53,7 @@ const RenderInstType RenderPassManager::RIT_ObjectTranslucent("ObjectTranslucent const RenderInstType RenderPassManager::RIT_Decal("Decal"); const RenderInstType RenderPassManager::RIT_Water("Water"); const RenderInstType RenderPassManager::RIT_Foliage("Foliage"); +const RenderInstType RenderPassManager::RIT_VolumetricFog("ObjectVolumetricFog"); const RenderInstType RenderPassManager::RIT_Translucent("Translucent"); const RenderInstType RenderPassManager::RIT_Begin("Begin"); const RenderInstType RenderPassManager::RIT_Custom("Custom"); diff --git a/Engine/source/renderInstance/renderPassManager.h b/Engine/source/renderInstance/renderPassManager.h index b7f72b06c1..b192fdb0ea 100644 --- a/Engine/source/renderInstance/renderPassManager.h +++ b/Engine/source/renderInstance/renderPassManager.h @@ -110,6 +110,7 @@ class RenderPassManager : public SimObject static const RenderInstType RIT_Decal; static const RenderInstType RIT_Water; static const RenderInstType RIT_Foliage; + static const RenderInstType RIT_VolumetricFog; static const RenderInstType RIT_Translucent; static const RenderInstType RIT_Begin; static const RenderInstType RIT_Custom; diff --git a/Engine/source/renderInstance/renderTranslucentMgr.cpp b/Engine/source/renderInstance/renderTranslucentMgr.cpp index b755e12c93..7ad324a268 100644 --- a/Engine/source/renderInstance/renderTranslucentMgr.cpp +++ b/Engine/source/renderInstance/renderTranslucentMgr.cpp @@ -51,6 +51,7 @@ RenderTranslucentMgr::RenderTranslucentMgr() { notifyType( RenderPassManager::RIT_ObjectTranslucent ); notifyType( RenderPassManager::RIT_Particle ); + notifyType( RenderPassManager::RIT_VolumetricFog); } RenderTranslucentMgr::~RenderTranslucentMgr() @@ -187,6 +188,15 @@ void RenderTranslucentMgr::render( SceneRenderState *state ) j++; continue; } + else if (baseRI->type == RenderPassManager::RIT_VolumetricFog) + { + ObjectRenderInst* objRI = static_cast(baseRI); + objRI->renderDelegate(objRI, state, NULL); + lastVB = NULL; + lastPB = NULL; + j++; + continue; + } else if ( baseRI->type == RenderPassManager::RIT_Particle ) { ParticleRenderInst *ri = static_cast(baseRI); diff --git a/Engine/source/windowManager/platformWindow.cpp b/Engine/source/windowManager/platformWindow.cpp index 8a7ad65fbf..b11ac0bb70 100644 --- a/Engine/source/windowManager/platformWindow.cpp +++ b/Engine/source/windowManager/platformWindow.cpp @@ -22,7 +22,7 @@ #include "windowManager/platformWindow.h" - +ScreenResChangeSignal PlatformWindow::smScreenResChangeSignal; //----------------------------------------------------------------------------- void PlatformWindow::setFullscreen( const bool fullscreen ) @@ -48,3 +48,8 @@ bool PlatformWindow::shouldNotTranslate( U32 modifiers, U32 keyCode ) const else return false; } +void PlatformWindow::setVideoMode(const GFXVideoMode &mode) +{ + _setVideoMode(mode); + getScreenResChangeSignal().trigger(this, true); +} \ No newline at end of file diff --git a/Engine/source/windowManager/platformWindow.h b/Engine/source/windowManager/platformWindow.h index 6db7ce4237..df1b51595f 100644 --- a/Engine/source/windowManager/platformWindow.h +++ b/Engine/source/windowManager/platformWindow.h @@ -28,6 +28,9 @@ #include "core/util/safeDelete.h" #include "windowManager/platformCursorController.h" #include "windowManager/windowInputGenerator.h" +#ifndef _SIGNAL_H_ //Volumetric Fog +#include "core/util/tSignal.h" +#endif //forward decl's class PlatformWindowManager; @@ -35,7 +38,7 @@ class GFXDevice; struct GFXVideoMode; class GFXWindowTarget; class IProcessInput; - +typedef Signal ScreenResChangeSignal; /// Abstract representation of a native OS window. /// /// Every windowing system has its own representations and conventions as @@ -110,7 +113,7 @@ class PlatformWindow // This controller maps window input (Mouse/Keyboard) to a generic input consumer mWindowInputGenerator = new WindowInputGenerator( this ); } - + static ScreenResChangeSignal smScreenResChangeSignal; public: /// To get rid of a window, just delete it. Make sure the GFXDevice is @@ -158,7 +161,7 @@ class PlatformWindow virtual GFXWindowTarget *getGFXTarget()=0; /// Set the video mode for this window. - virtual void setVideoMode(const GFXVideoMode &mode)=0; + virtual void setVideoMode(const GFXVideoMode &mode); /// Get our current video mode - if the window has been resized, it will /// reflect this. @@ -497,6 +500,7 @@ class PlatformWindow IdleEvent idleEvent; /// @} + static ScreenResChangeSignal& getScreenResChangeSignal() { return smScreenResChangeSignal; } /// Get the platform specific object needed to create or attach an accelerated /// graohics drawing context on or to the window @@ -507,6 +511,7 @@ class PlatformWindow virtual void* getPlatformDrawable() const = 0; protected: virtual void _setFullscreen(const bool fullScreen) {}; + virtual void _setVideoMode(const GFXVideoMode &mode) {}; }; #endif diff --git a/Engine/source/windowManager/win32/win32Window.cpp b/Engine/source/windowManager/win32/win32Window.cpp index 88be80cf12..5c9b8ed11f 100644 --- a/Engine/source/windowManager/win32/win32Window.cpp +++ b/Engine/source/windowManager/win32/win32Window.cpp @@ -287,6 +287,8 @@ void Win32Window::setVideoMode( const GFXVideoMode &mode ) mOwningManager->raiseCurtain(); SetForegroundWindow(getHWND()); + + getScreenResChangeSignal().trigger(this, true); } bool Win32Window::clearFullscreen() diff --git a/Templates/Empty/game/art/environment/FogMod_heavy.dds b/Templates/Empty/game/art/environment/FogMod_heavy.dds new file mode 100644 index 0000000000000000000000000000000000000000..197dd43327352716bc08bd069209499bf6b5a8f1 GIT binary patch literal 131200 zcmb5X!EYniweGtg{SKa8M8DiWp>O~L4he>M0}s!;H8_931#%b~$8B-rIfJ0(L8H|{ z1WF+{Bn<*dZz8n^krZHCQUgqt*af&n+@RfTZXj{bu4hb-PP}nPL>VW2CWMLdW!3$y zQZl-4@&vS2SCK4M?Y+KleQT{|H!|)U-F;-Uq2!5{@?lc z&maBE|Mma*!T{S^vco*(`GEHN3;m?C0sD&5mV%DhD^hJ2FoKDC3I=W~EwZPu!>oF(nZtcxD zNsc@=P1{X1^|$lo_{ZVYzie?m(bwU0Jef?)*U{IlR(oc@Hd9p#n(k}+^?UX9Oucqr zr{nP?daYi!TdkJ)CVHKwX=1+7uVa4fH~O0tI`ICOBR9wjWd&9D{FWqgnSghQw z8m~M**v@j6a=kaNX0vrTQRC#RG*y#uEW^w8&f@dQv8GMay^-d4Im8vrHh;CbgsT~ zaSU&S@BscY4Zl*)<3_U`eHDK7{$$<}{I@2{x%s1p2b%DK`>M#Tg%6%*d6t>4Y*OS| zY@VB>JIoiF>o0^Cu;pa(PcAWu_?>_5lJ%@vW1N!t@9S7~v07zWg?r)9i|`58RjP|f zY$5m`kJGlf))&w~i_yOZt}Ve2=Q&docLV$z;!n%8QNvFr4JJ04hSSy*{7<9l3@i9= zkCz?$wVlSrw;lD`PT`Gq_>Fp9Z#J9yoA4XxA&vfQzFC%UWBX_Q4TqmPw(Ibn|HgjP zNZyw2wRvs9wcs9l9h%qCYc_k)YyY+Em*cMb{oGFVbit3FMiczdX#BVjKMMYf!Jxwb z3f{2beuSe4?z5~YqidMYSR282#%6`V%5~~%^CSlU=0ZPFK{l`#Y|pqJEWDfwAH=hD z2mD`H99(#y43rZ8j`Lm*|Gr`TYyLJI*W$EPoJV(Il)rViUO#*&_)Y$O*)d|vZe@dJ zyQRT7!!Xg{pJ9#lpF**D#Qu$5uV-FrcpzxY=lb}!9PeKJop-P|CdNPDoz5^H@qIV7 zpaCB+PwVwkY`tEqi8aP7#Kz^DId*IymXPy194%Ji)ZM~cJ^#|&0{22}{Hp9aY@QFh z_Ev-cUQgeGKovg|yw~u2!9QVdXl^5LPW-DZJawaQ;&i&ik8W!9I{xIZ;pLGB&#Dp6 zteo$3~A`0bC>jY}4*ybyl} z=HMVq{9@txUE$t=LwI0iVtv`|79+uT|KUR&#o^_!$e)Srlw}rzXLvOi`|GkyLf+pi zvRHVa%wsE`dobAO3U7!yknQDsJ~zBSg}^oV&iJu>A2g%vr8|q8jfQ3anjagx%d*Hf z95%ooga?S1bFm6uP|tlVeic4f&(Sq4c;I@QdH65o78JG2R-1g5y__ruS#%n%l|DRam+G3%u!zaYMqQX6X9>D{Q zZ)`52i^*i#vV#94NgQzv`fGT27#R?VUp2v}_)jfacOvj#mgzVo?xKJ42)hDzdTJ&w z3g#ahz-x*)&Cf*e|KsuW^XSjvH(Wnff0K)!gZuu-D*b2sO|j0X40 zKm0HJer;ES4F&%7FYwQ=-E@#IyoP6x9~1CD1Pt36*zzGioO?VOfFC|W)3mT0e zP*45!9J*Cw^*h0RI95+p952;GJrzA5elEN&R>j#`EdH<-Jhvv3D*jK`^G<{gVAxtA zJW!T-re8)c@7){oKK-&inY=IWUo5P#Fa0fkYQ-+`V~5_rJq_1;%lX3B{2(J={$_NXOrdnP{5c2ws`o~$vfO}3?i7jU_e93+jGcNE19&D@c%X{`V zy7l?6qi@68Q9kHKx9ZkpMNjelWo%V=>l3D}aL;|RoQ}s196eJqQ06S@}r^ zi=G01PlX3c*}i}W(6j1k(42un;$7M6_#4j1Z*SOJchee=OTl$An=TD_$Bn(J@IPG& z4{#X+*)MsLeQ91I;OAl)FY*I-JH)RYpT~Vi!UMsxSO3Ga-5O6P{-v6rAC1`Vu!w~( z=JVxLzOS>Kl8>0%3}UG8UUUU_H_F<)vJjV8o0Y$e@FU{>3vhiMm%skRkS~#+j?J~c z_WrwH3oj5Br`79+iQxY_5PpXTM$b}oJjZRsSjF-4JKIQ?hT|hU_+E7r7w{DLR-?GY zKDROY6l<7ov2ottP`B;C zi-_%@p3cHAb^KL={>CzV!V7UhK#JfCyI5qJIG=!9!GCMaaV7qTqauPgpr2CqTLcHk zJwvxm4ROCHik`jnXYt={Nxmf8uV(N7mh18G0s6A==mXqDc;K=Lz{14G?G|}5_)p4C zM~h9#58<_1kW39cK$_UG&-L?Wo4kta=i9A?2MN1<#w&q7W?{wC{l1JhawZ9x7iglV zufyxvvlxFT?q#tt688!GqH~$10DBQrVsXU(6x{o3cinpLz4yTVHF@w_c!2kjSNiLO zdV?B=PnEHGG!Do2?%jJYn&@%a?RG7eys2~(Ge#b+-Na66wR#J@PU;euz<-1MApEoc zZ}s+c8U0y(6PIhY)i<@nG!^@sEE|YkP%-wkpYlB!aerz@cX3}4u!K)YM>|gPf4@!s zA5BSD2NM4!9)!d>rm^t1_Sz#9E!RcdT8Slp?U`#WxX<;I@Cj+-B771auLiwtc&v_# z%qYP>a0CDPIA2*~j-%s7lC~ZAXFN)G0S^%8?|7g&b{GB$^Dqd1=NZ>@?JvU5n@Rji z_#jD>6nky-M_q7#jXR^O+|9 zMAw6Ja2H|8lLirZ%+Ukkjk>OpA7U>Ijuc(1iq9g+pMvoek2dC%&m#{Pu5F@c!J4@}7Hc zo+CdhyT}c`lDRKSTtn3Q@(c{xl@Xb$1y`T{jFWDB|A~r)e+B1Ddy4-SS_Us*g{FysL z7uEflI#mcU2kwWQkcS^+zAQE!PuC6}2!c5G!UyEL@YN+@bIEyM%IBg)!3y{T*F$)z z_<-?TYxscIr<(CW&MyT2{lUgY$oPs55!|EyTL#{pqU-gIrOuTP@%ua71=T?p7=iKahxgiUgiD9uLSoK^kG+%_Y1B=a1Y)G{+288S?-DZc`+CeuP!QH7kxh( zEh^r7yB3{)?Ek}ieH$wu z6L*YkYpc%%|H*e^iI=7Noxkv_;#Z!!VS6@R`WvYqCNsgmAEg~feudi^)WD5gmnL7C zt{K;t=B5GB3J)CeJ^E#IOS!gY{)9d!kQnf*!UpkNQzys@iynxV@B_BWx50TvytMEN zdVeH*Fk7#G?Z~gQj5-#&dqsUz{DrSwfp_AB;M`xCQ5-A5FMJA`uk)2R3fxoX8~Lm7 zf_yV(KRl4EBWyrixWm2gh1dRE_!@gPDtaAt?XE0(N^F+*y6(zc!QX{gla(Dyy_)i7 z4~w_X*04j;p5ZrG{GqZY!+)RiI(`um=hsP66I>{p{Sb*AWu;j3aVG*dTnBgxuYgw> zf~Nri&&BGh0l-{rL>FuuBK=^%brbhTtL=x_%RTrfBF>{K!FhODd+%OLEPMt2^%>(- zXl(h0x;;7{9oG~5w<$2%Gk?O%g*tU7%zvWJ{R#7&V$U}6xar^n@G-NO{v?@+wP!I6 z0LyVy5TqVnYNzNm_zInbE(ov4hZW}^TYw*OUCe7;qZFW{wv1P+1LK_~ zDPYTdQkQR5xaWKvc|3Ii>QtUO7X?#rJ?Qr{dtoj%?r(ds@4w$_I`RM}fc(}!q2O6q z^4j&9_=-JzyR2-j0YCG3$`)yeu7#hb!UMSZ+sZZ?Khf|2bI%zbSp_-%=u)|#`W=y|5QBRWChPY%3O7GXbi#92A?;GVbhc|A3Ye8W_Dryhu+ zMi!Le#8WSZFD6dve1(Via_TmgcyB2n8t@Mu(E0jFpC7@o<%5Fj!LZxa#CPvks|Y?o zfR*S1@&NSjoh?G%N4+Sf9>D%`E}u)$ANE)ulODGHu|2NW$#Xt;$KrqR0r)@stA|&a z-?s3;Sn|Sa^*iz-s)X*EVOm>kOhB-lZ!CEjmb9v+se6^>axRwq>BoZqS_AzpahnSi z{6p8|4f=L8YBY7F2RhUf?XBcT2L2FTYx#Vw#=L@eGeYOGP5$_;K^LN{vk-oS=4T4M zj$MYt>vGuJ0N>ZRTT3kbu~OjL^5d`kIrEmQYj z(p}kec<`;*1^BgB`aFYI%vE$Aqc8MTcpk>_Ta!fR4eIG8(dUW*w$!u4U)a8qc#Ge| zOQRf|Uy0vD=zM6U46!5rBlv(%h@asV{hp18en4kEZbw(@s$>{E_;0tTQ;+_~{TGHf z58o~{xE~BQ1|fX_+=RHU&Y%r!cq#RoNbqU%(ws$S>skC81KuapCGD9xn}2w(F1R=3 zOJWDTUKjiyg8NvV`jb8KZQ%iiwIkcxEBxZbo=~5#=FFWi-fII7Aph3z(wW422mYb^ zrH2m!0;ob4G}_~-TvvZE>@i+fP5jLY4~$s^_s8PbZF*I)EEdiXu_nNBVE zh5j=K{&9;Jp6x#4=D_i=%)HnR1tfQ2FY3VuBk@@Zf!7@dM$D(PAO-UU2?*+z& z*(LbD9Sny<`8@Tu3jdS~W`^Sswt8B05%JjIC!OxfXmoo{n2*3aWfZT7-;@(=Wk={3 zwylj55B~EJ{fsMjUKV}&ZvI@3@2YrSRPh~ozqD889KTzz|D4nB*>io4Ea;o_=$v-T zFgg#<4_^aoZeOFdwK4v4@#w7(slg=gJvITK4C z5?0V>O8iseG&)A`P8*@Z{jxzl54}HMrfrYjZ`Ij8aVLs`0Kbpu&y75mIw1Q!d|>7E zL-p>cA@B3n_uYv(q3u$bGkYTaL08oc(LY$hlNH|i03ATS&}4xC=YNL(EF;DvXtyRB zK9x3*#|HK0IAVV4&GwjiBrj_uusi*}Ja<@N3J-YrxhOn%C$42;(KAEvd@))T-(#PQ z(0vxX_dZz@zw9w#UgFp>;ie=zka(EO`}i8F+U|n7+f;#na5R){{GGa&m;CUDXzZy2 zua}^Gtm5y6m8FgWFN~q@Pbv$+iw(fJ@BwYr4wm>|#rcWUK`itCc49z_3ik#_rhc z3ePcq2g1KHesMw_m3-j6A2(}^&gYbi+Wx{_Y;0`&%rXx(Cf0HtjMv=4VTh-LkHdo<1@+stGLW|Z#d|q4{oSS6~Y6^fkKW) zmyr6qk$Qa97s(k10}l+c48IAlSzfUS@h8EF2j4X&2)qj);BVM><5K)?A)muic551N zW=4O=u~+D}nFW8M`wh6K9^lP+cuKuFkFX;O(-FAOa{6jm+MdhkG(4>ZvkvG#rK~iN z{ge+nA=a?|BCPZ@Jaq2Jzq5h5a%Z0W--FM_v$8AOjdU`P;0MC$Ts}|!fT{@3SF3)H z&!2hvzk;U~pVNGf^5{~7cdpWeXZj@0i2rBin1 z#2(y#*rKn_ad*CBeZ{#up?)~xtPbff@Hu}1-Ns@&G!g~(LAvaC;y<_>SnyAscO-Tq z{Cs8(@vosd(}&FOjO`QJxJxhJD|IyT2k5REmnMKV@F?qP#_rsl*NL<0!kyD^`7ols zN4f1oLwy^!OD+2T9t#WHh538`ntI<|yw5}*%YJxXUT1%gd=`ri0q?J90E(6QH~2A) z{6z3i-DK{s-IFHz#K9}y|B5<4{>*W-Wt)CP1Ae&GZIsvi`gVzAMJziDBZf$0p8)5%He+9|-Q{^X5SB<~ze~gl#luv*;iKzi}BIN4v;ntUee$ zqy7rcJ1Oge#P+?B_w)Io2Jg5*EXU#fSi4Jlti*~wf(H&{o{0a)v+;QBpQ!(rWh?=s z^m(;D1m0D~D8}=mc!pkvb$2-YAq4mI6)K&qR`-7#6haX#^|cb2+3h0WW;?(drM5 z>l*lb0=;OeY13o z1GF)OACKAq-=LGm?R0F<%_%UNs0({aIc^gN^4Q!E=hY#)p6jL_+KbTbF~Ti84iBh%px^Z_ zx#Y{Q*jB6)-9|Y0bMXHMgvhxif6oj2 z?%WdCE%9CI3=w#r&)2^eOF4ZB51i8IDm3vIy6r{ap7c%P@Co^UPl0c9m@dK5$*d%g z1D`SVF|iyj_u!8FXXa1rp+Pr*??cA9a3}hZ&kxN>bjaa{nr-_69yrv8P5ca09g=sh z!P%jzCG*O@dv~0e<67_*Fb|bwUd$QaTlU}&OPppMQe{QY3tr=fobQxIxH=C{8?zscUZd zLwDHO*fyN^9&~N(p4sCxl-YBA9l5^5%kW6;2lduJnbYWqcEQq~>Z7Lc zz^OaxQy>VB{SoU)CQ{FaccunBx2M!muu3(Wg7@`$Jat&;x)jTBNCjQ|K`Qu{`4QX$f6-HnQ^g0@hWtcupOn9Z2Us_Qqk((Y%{78b_kcUG8yolk zhu}Dk8?4WAx72x?(&rDPp7PS)W(D=IDS80iCV3Of!4rQ=zSU@_!UGbYEx1Q7Ei~iq z7v#gtleMFaQNF0wTbzea8Zmht`jR^OLhuh?MkY!2wp{od@T_XJSdGoCkN70)fLSl?}zZ#js<+Kf^LGhtZ+*-SuI( zHzMB?%XFmXQ14NWnZpKqlJ8jX6rfMBhbpK~+@U?J)$jcS-*Z^$BfdW)kn`<_jkHr) z8>dg@^*9LXiu3LKKs^LqBJ1NoJ#`6V1pn!j^VGz39(y#1 zLdH3cNo>GBG_f-1|0N4Wt?2u~pl8tcqZl3q_l5$YSl}>FSY&Y$3hqf9)F}vr;Kgz} zOR@0B(1SPCNS2;>jf^X76}KCy;GK9BSGZ^X!2OgL*v$t;Z^(t|qwV#Esy5 zXXg{c_KfwEVyR0Fqrc%_gZp22YlybTJ%poJ>P?yBIOOr@1b2+?Y#7$bavizg5?&sJ z7yjG}{_q>7xhHXhI6Jtr6&!ow3HVMfFEY)D$xaudrR^IcvtEJQU^#X+Xw>9 zI4{?;G{SPbMAa{3_@@SaG@nfAv)YUI|KT3^ryuYEagS~26a6Fg*(4S#d4*W?Y9{!v z*Wam89eE1Rmi{Kh=HyG^Q{mOhqJPzdZSWW3@d@r~U4ima2Fb5|r zcB9C?6aL_SBn=N-lLu$$u!|yFj0`-$G7sti>S8z?3>QiVJFoIj@_d#JCyQdx_23%!9ysE%;sh%k?xBOgV-TZr$#?T1 zb@mg}=VkP{;ni{}aUEC@?<4du^SKxGOX>s~i@#1ac<1dsvG5N2HLnv_Wd97E2dW%|xx{&v&DSjWH>(Zm4TiiY?{i%ztkZeLI2_W? zt;WHlQ#rp!@Lz7g|27G%eqa5ONlzW3AzCM?-G{COQVB(t#-?hmo}(F82pm){k49APHo6~mZ-{0E6e#*mQ@E> z$p^rDbWA+N3f}K5%Oq3b0s0)7MOTQQYSz)QzGf9Z@u!}JCHCB(F1ex5QJ(f zcEjl0p3+B+4RHe+E-Opn#axBw0S+xz@NMxg@Hw~gK6Hb;&k*;q)M37#yHkA{v}Y54 zWRJ-6)(YK&oLKrD^%!>nwN`Q3Jq zE+e)Dm)QHHo$!GAIXa|_IIhfl1i#c<(+T6dOBz5P5FSXLFSwtihpZclj#*#Z))x`$ zhGd;(bir^_FVz>MKji-~!d^Tx)JZy>`O;x=_m0@OlzNH3AUzp+)(gnEhtvgTX}cNG zUzIvx^fY|ReVdi-OP)i&b@pxVlMuYi{dbBL2FPI6Ke-zfZ*(iG>K_X3vy63DQ)j2YX2HXd8&4had{y+i7CcKm1ApIB@4VN-61NvC3tmNciOnScWWV^QVcU=p zfcHm~0rIFHJ!*&__M<+x7qoR>KVm*pwjbfHv0;Ce=b@JsALRItn6{GW$|#}pIqsOk z3HXNxf;w@3kMicyABMya`i11z$m>aT6donir(_%dki7dSi$73esroBL{>}XKLM&yZ zS%}UdJMw~i=zeU^G z>v7%>%mdtP;vd)ttPh@sTmC`4*&OSwaH~lk?sm);ZGbT?TOF4ePzKZY1^&_xA1ihm~~_^bM)U*6@1^FL8Td zUe#CrR=?>FhCP23QlFTP75LA3`=1@~eb@R3-lw>xkq>jOOBpQcGu?Sp^#S)r$a z-6-5wI}H}Df%6^sJOSPNqRTXv_ct`WP{w;o_(5nuc!2uNG?e^?>-W?vSXSA$Tz8cp zo#>Mf;6=;zGweg`UPc@g{4WqJa=qKD?5~FNM#nF}|AW!UD6!Pt7ZU%`|1$><)JgmW z|Fn~);D3`ev}L!<)_Xs0z3+D{d;tEyKd%%2)h^{HbSZHOhY>4zOaw2GKL{UCuR=FT zeW0XI4-bg{MAQvOyYye+0fwa!iXW4B3lG$}Z&`Ri@=n<%UJexXH`WjFJb~y*nI?hY zpXGH!!T)M|up#*09t=u-8l7(6zrQW`=d!DKfu8Gy_zSwKs{aE2Z$&T0)Pq62^n0YA za)OQn|Nf*-ohBqdBQBJT|32l1jzI@C+vGtzZfmtzjO>=*B!6A`P4}s1ArQYm=KFi# z{bS0@pZkx&Ip6Dl3a)9eSJv9x|J1?*P`%s`xZW z(zWn_)X_rG0YAFe0{^?fGi9`nNe|wSF4U8>O?=|M!jw9z2KUnU5<6bLd1ERbK>xrG z!pD`x;Y1fu2Uvqo^Z@-Q(E}8E!T$yFZ5eT2(RUP@L-3Ex<-Vinclc!zq6;iKQ}O|s zcfo(LasQ(V|4wgPa8Ep{))jTS-~Sc7Uz@lXg7<61z>6h)9ER|~ENSw*i0EQo&XSON z4ZGn1*835^-MInhtARm}Q7`;Ra4+?f5S|_}p)!9Qu9`REMODXJaYGh<4-cRd!9V+n zf2J>1{C|x<2>u(5(Mq<#`%rLiY~HDG%<~Ckd)V*)An)5o-f8giZi6_6#jQKCjURn4 zmi8d^GqxFc`FyqBmTlZVaDCgKPwv&-p6`R#q2CL42t&ExUi>%0rYU-BKic8`v?g(8 ze@-7DI8<<~RK#wFz+=wWT-vtT!-Q z(H8ywiQ6$d^oggAI>3MhTH%4;$4@8V`CvkQIRxh{LkPhCLC{`y;D-a5f5rZ8neEBz z^OQOWabNmQVjC2;M9){c2#bCwWm}Pud+NeGKcS{BysYm`v8U7nH~4*|5Crbj998qp zw&2)+|AO<<#P2@sYofo@Q@lGN&te^{W8Cm_EaO&`(vKl8jPV~=<%{s@p472C^-}5M zdgg6_U{X7J3rAYnt!R_DJT>4R+1dA>x=*RUzazLMo@_`Qhu+Ex@0_sMYUaJL^|E#NJ5Sw|^;y^9?Z!Y6ex9NBpYq(7Sn&VwKUN!p|7{+mf(oD> z5X4gF!%au<(lz&0f23LO6T^pW!3Sj*ykFS`b(?E@HOh*f0r#CA{X}qY7I{x_Z$|ls z2KUH}N~f_bPx$)`8rbmEy#yx~-hRV61qYA!`-6c+|8@&94)ib2dD%ALpR{pdz&qjl zMI=11UeAc*ee%vl1Om8^DK^CQ03d<;N9ZN+46frt-tDN97VJ?+f5QtQR`^qJk6xy(7VUTDlZN1)xRz+}4xP>I zk=g$)%bpo5ZlDDJ3+b1j3l>=x`@?WQXf&y3c>I-m7Ih8s;=ZNc@o=@hVW?Mdxr+$A zBmYXVoPI~HoAA^TJv1B+yYRpxnIEw|)>X@OeEwlQaF6UGsq4GG+QRK~sRJyRlX0{Y zZsF&Ffv?yq8@u!Zy=e>y~uP0rd`E$!UaPWv#CM#tBx}@MtA95B4fvGIK z4G&}tnAkMlt7-UvVH%5$>X9c%-G%$Ksy+xhoPLepgRiHkslAx>ACB>1JiB7Un00mZ zN19V~`Hp`S#zjYgd-UZZ+BBb%etGw)`Bdstg40_3RVg@*Mel-d#&soe9)78KAo=%S zcKpX|qxY~M%l)6~=k8;!ufjdgNlL)~ry4yc$Kx>tO5#6tyqVyiI6YIl;b+LMnL=;1 zS`&Cy9W>EjA$&@?iFF8?x#t-bvdB_R^op zeG!&*b@SzNW?5GUtYp31S<^83%BmGk=1Ud0~~<9tU*n zr*1Cq>rc3$Rq(#1U@ex@Ce9P@+l@e@|It0fd%ZuOk~f3?KzQv0DvW*e?cF}o_1L9$h%HgG*raK2nj1X0K#{ySD>ui z7yPq+c@e^&^szV8zTYc39mZi#@N5~c5%nh-FYsS#u3zfY!uRl8+dc9RSnoFoH>rp4 zBlrjY75?ZG0ih5ujov(KN*1N=O(E-)-E6`cEQ&Uq9l=+CLm+&|T@~nuu zN`pF!^wq0+E9)4jXS1K%gxGJ68_fINHhvHOr|Y*bEOz!*@&)$)ob?ppwS_;U8+9YN4#7Qb^{%?H+>hHII_@JQjq62;y;_sT zY3?tPb=DE<*@Tb9R{fXD@O)mr;OQ0Nx%jQ%ev&4K4!kqJL1hi=5?IM9dP(@8Hz+C| zusDK)4}zff4)#PI%VAmXD(hvf=z)#F%8(a-OJZs0?_p5QTBbV|KUkM(Q}D#|EgFIk z;+5cmxGlH`AvUgfAdBOX>wEZsbt!w6xL@%?ADybgeb;Atn}T;9euhf8ez22)>J$ z^{RsNn03zV$4}7dyzaMIXK0RwrSJhqg!r*i=S<{%xb0ewJ8q$u(1W00^fw#G{z0Gn zPvC))I-JF#Ylgx@z%H@y=VFoN;D5hQo-X4CEm*%7?r^^m^HySK7AQ*^<{ESsKq^gVL3!aM7H>VkWz&x#$5;!JQ)`#%=EbDC?v6^i{q zwwvg#@UeP4pU)c6u6o>P20_TWfI`+8VyRcGHF+3^sp=~xE6ER{V{VJ+h%H!88u2>A zXf^8vNE<3XAU|wH;CwhNC2x@YVTk2^+miJU>__*?wvzq`I$rodgLiB<5KnZ37eMs82Am?KJ1WKTk>T-2ma08y?gDSfP2aR<_^E0U7k7eca|9p)DCzNoa_*k z=1E<)3+i)%cVvGYRk%qLvA~G!a34GbV&{{(GU$CCmsNM*8a%-RZlC&O&+XfN=Uim> z$*Z5eDzN)3bL*OYy-&Yl5%GS~@)W9)qeK}1kjP^x@=`>|5UFF&k6qJe)W*L z7%+*$b9G8OI*rcxU#&R_sn0SW@IZKuUz8zrba*1sr(wkdpj|BMrS++lS*!g71W`)t}yLQTN=mpW?Tr)B~hXDSQw#@}5P%sd$`7QUku|F@~R6KBqqoWUw$tze_1@5^|Phsa2qN59s z9-~ik;iXU7`ClygJJUw~?yvB>o=eo-bKHpUlx5`ku=3ovZO#31$fw%6Y&2r)*qq9L(Q1y!i{}etf_3;J+%GOB-2NfP5j`>weX&Z4e+F@9K2}*aE$A-qg*4%~@f@AoTIBj;+=+#VckE{qR zcpf(!%7Smc{sVBo!v&O%_gU&syuL$uur%^{96?vF&)AOk@oy`BOgUV5g!32-BJ%Qn ze|w>}+=DD9k4LBSG4fRRV9I$*{!SV<=lsDxKu7m3c|fq>y@I6UehkFfjbEA+lPnu#tTE|Z@$LvYId7#&pGDLhseoi-GqL_eMSrIBs&fHahT z8vO2fA98{FnA9om9{98Hl(fu<<^G+K;yw!6!+B+cW-9wT5VBZw;y)^Qq~wOt=p25a zAR3V;lK(9wU!-oHTJnQ;{x|x&=kAEQ2Xz5+1Rsvj7e}l!8_2kQ^wCH6W!^~J;AQ5q zCw%Vv+7p)s@0*J|H^X zzypkeGFufN1orvLO6ddP2reEMmgKEkw39ejs)U%*3K68G^h z`iceP6=G*88Gx)K%lY7rtXLd@|9YK14tc^u1}dbV@PhlW)rC8SP6i%b1rJmfzm$CJ^zZlO z#pnko>!=_I5AH>0p!2UX*5NQeJTI5^P*;jN-zs-_h&)G6;yUrDDL5yJC`(4qI^UwQ zv!tPUel_|y(LDEhI!M>}T%Mur3~6h6hR<+0i$f&Kk1*{*d-wWj6->+<|}e`=vj0)CpjI^6P24!u>w5 zsS!W+Cm*(If^*{H$Y6;Ru?3GzS1j>*1Ah`bc|Q=lgF94sfB)XSBYOm{8Gj?Vj)Oq# zfcB5rvi!cnJ?-!={ICOVmtt|(T#iG2pKGy;jQ8oSJRb}-eo2|nM(EPsAhVL6mW)eC z-wwBoL->K`$}~g#o$HeLz0dRZY8CFmkJvPAkbg%<@M%-@crWMt(cwJ53>{zb0qc=9 zbu@GXxF=2iNbt<_UZ=45iPWt<`By-I5v$Z5EUeDqLGVkyhA=g(Q-B^uRxC6k^T4Fj zw=pM#pC#`*K`w9~l$Z4z)#q@hU&`m@ek4Wxr!gb`z$Xp*QxW>2F6)hn|2z++X~941 z5?HT89w7Zf>=M6_>yq#ef9*4VE5-rdrLVwvuvsupC^~%1WzP4jFk)yHMa?Fdj7CTGHcX(gU zW6&J^(>9;;TXrjsn@zvNx&h|Jv5uf4*DdQR;NNi9Q*WJCI{*FF_&vcr^IAlog`Xk6 zl-RPj@v{g$5K}k8a^Dc^#NYurFZn!e{8%jEk98XKXaDo(9lsy$cIIp9hv6>iR4qLA z`|-216iXgLKQZEY1dTvZx53>89zA8r#~gJP;&*nJj}g~ooJk;M{25MJCv|7xf3|sU zgyMc&)<0t54epC)CP#6hcwV;LCocGJHj`BFZ&(p0kzI}AjSBbES!%$$@U7u_SpdJN zECG!DUj`o#(XsSjc%O}lBhRYOD{#p1zRRe~zyn=*J|Uhsm-`^#fng55@uyjO?>)}u zBuRp5y`aP`4-XVE52T~7-eE$BkB9Shnu_1dC9WTlw-Y}r{SELVbmfqB1K@DKNnOSf z&)397u}tHo*dcLKEb$F~F#EWn796XQg*UK4Abi0#mhb5r zULSFKV#}=Zv#q@Nq+{sIQP$qoo8hM`o;N1?w9_pNe!JD_#VXnfx2E`CB>6{)ZYO`B ztX=i9o74jYAF|#;;-oyr6C8o-^sV5B{!psVxvv6TpaaAf9^BKf7&|Ow%7);bIy|$< zbHpKR)%flW1<;%(HHhipMi7wG}w&#?pZ{>H|#{a ze9{;1`8{~MEON#85HCk+NAN!wvR%b_!9DJkiY4!_;y*GokoZqO(Hr`p^v9!GIP zWf6Tr>K8Hi-=f+F57@0C{%2Sx!0;H${&<9c(l@QAuU`2b%esl_)bINp>i=ucdLrh1 zqz>H9a!EeBA3nzI3!?es`e8Oy#Cz#uMXW291#Kbq0rDEw8T!piPe1ls+y_+Q9YNhy zyKakoy0Vl{=Ca*j9XNJ}`_oSA)UlI#Q)THJlx!b?`<|sv!+KBZH`G)AiasYU zpyz+UPfj0xB=^Z{?o%PIpvTYw&tyJ;`S4Ef6{Uiw;n|+>Htm`o(f^G4ZO;>z4FOQ_ zS@8yVP1|kayNQ?634h-LT_1xl@Zb4ly^ds?i4xp@K1u$&d7-}q7Vw|vBe>sE2Azo&o;LVVRt$TFcp`NP z^e1-E)tiyjjbiNP5PlH;na*JL!Z zHe%k@#n9Cf2Jc-`{7-G zleoVpIsklg-NO)Gg|BA9qkZNtgdaL@hzr;j4jS%6Tisqi3z-+%P;n$Y!u?I;8O$5& zn}o-U!GL+&k;4k^XPD{*^lL``!PVQqT80+`qX}yMD_EzQMJu z2Mp2wz-B0T2UipInG@XiLH{OscOiO$ep*lT1?!}~6+0q7b6a{#c(mG2p%32Ks`UB3 zfe+r6PV}g(|G|%WY*NSIx5#7qC;I3&@QCJWEi@^qe*G9wQeSPDD9#V@dW*ub3O8WES`r650pQAmk9plbHt0Ip!NPF1TRbrbvRA@0H0Xa-A)bl zJE;o`-YLtmzQvO-!@qZy@%8(_Z|>lM4W8@D{O>>f4_oB}oi}%NfHJ^8@P|q-f>+`r zILB{3Xv{4B#b!yI-wOCKTQc9HSYw|7Xu*G14vg*mlILvVx3nJ{!V}ABtF1ZibTXeu z*tkJFrhiAhfxf+_zgTbT(`dgDKP#|Dd*tav&7%N9#h#-3s=A!dilIN_KE$LcdWq+m z(6@K?t5o=zG+T94%}ZFCOQQ7gn1QS z`rlU1&HO^0L05qn%Vqd4cs>&Oc?1uz4sI=cP}PIs1N@oi7)DiIU^oxf=_++@tGqzY zvn%(hVbKMP5Zz+9pHu3U*`OHsL$#kyCeB0CTCVks?u%gRj!9UBT zmAo!^75s|>hTuJ;ASyhN#z8Hjo`_H_Bl5v^dpeczmiyW?R`L+byb{M=Shh*Kn-Uke z9j_^V!fgwwXI(@O0U-F7d`0pA_}wnY>&ENRWEq=1FYS&EKG8nW-~4ZJpB()M z!YRTp@?ozN9fe2AdLIf8(3p^Mb=29w{Ym_`{9f<_-1~wj>=2xt*v0S@jpYIDi2?t` zn>TL+|BVK5FV>gT*T!NQzM9~eI#Y#bbYpCZ`=tMsWw_r8-p$Ca#5O1ZiteWmN8V3; zAWakdrKfC`7Y@sTN)P@A{r<|pFB=3JOT3ch7@XHxv3qx)z@CX=1qc4)OwPNVQWqe; zQ753z#dYPZLlGXRaE}hC|EPW!KcA5g80z*#71y~Pe(d3a8TaQ4-U;7XHLviDV_t!& z=&F6zpX9=`Jse#u*P97{ARklwVxRkNrQW|&{N*p-YVa%Zoq63Ve~4q@Z}O4Y68B?y zE{o)y<#)Vp@QbV_mb$gUZgn~k0-tZz>6cMgfTm^<^Nj5OH?gcg0spKwytDhn#Ub;{ zHtQSF$M}Wx_2{3MYtMMh|7|)E+@o{4GJa|?_!;;$_%GZS%58sC*>~=}FZgFZV}(xW z(zq4d!~Y|BULxyv#WpAiMEH}e^ON|(pD&`$XwCwj^JU@p-e6_%Qh9C*>-?x+GH{M{ zf9U9c1^@d!bPDl*XT={93BiM`mk|7u&eg<1PfF|t5AGLS_0Vm?1JLIT9w4rp!lNT3 zPZJA#!9P5}>zdA8M5dqV>6sUui;nK-{0FIL-@x}!m;OC3V`>EwT#@_ee0x{ndvK>bqvq}yft5sy=r z{j6uBf5LSjkLISj4&uiS@gOUIE$0gi3hX}PJJd&5=0AiFD68QYdY?9B8~-?Bodfr! z!l!bcjH~#QCx3<>7KZhd`18!L&HEcf{S$D3j?-r)GRH7q=+1`WxtL?=x5g%x$67h? z+IiEid2rp4h4@&Ok-6c>5o@@Frt5`SU*a>2oF%F zl)5;&w_X=r)L9dugeT+Qu>OU(zOhmD@2H;yGOyHi+A^PI(rkp(S9!ni`abKJc&ox%|f29B>oW7 z$7er0LH)RTzmoj2( z0ZrzWx_kkyPM}+KlcAsb_9?jL?+}zd!5jLts{2u2miW&&zFk}Rfa4_={PSn1JoqOM zqyG+W3AZD`fBYIv$Ofh;gmcm)GOX3?@E7n!eT2AC=cV^B73{g#As{bHfLqwy*Ga^iVAV{~6CyRMf{%Z+{WH@zF;cp66Xq z)++?}$otgLS4$<2z;DnuQ~ZE>TO$4-I13#3pF+rjPs&Dh^2WIJUcDxE+u`5v!S=#X zA~x~;Z9|F!p5Y^do<|=KJg*Cm1osOHh3dIyG~644R$^-cyu=@PM2b+h?Pnw79QUof>0C;W^Ls3L4Fbx){&TTUhEL>v8Kt z>^^bF3V!)I@&PBhzta2Yj=m@E56d_7Sv-6|ykPx1x4HjP_S5cLiVcJ}`P{}vpSpmN z`|2&aaOX{lpX^WvYLdrrf2qu)+I3s}J(Y|&u=VQyhDaZ?UE+6Gshfqn9(|Am*d64P zQP_=zReWxTbvc=#zJxqk8je3JSxI@SM!ItOfm~(c`T9WLz6bI)PVtF2P2}zymY-RhoID{MXRJ_igH9^8Dk> znktUR{QWd|K%SdJ^sk;r?7wio9cAPXU-;h+WgOrGrC!Zd?7rZ9O80xk-$_hj_j~`v z5MqQUzJTz%!Us%q#Rt7X4!@YQ4G70Dzrf!*`aK`KqOT18iTfKNe$1aQY=!8cocvAi z5U(lki7sY+Xd$?-^LGk##i!Gj=z}o@u@JnhR)6@w?-4gy2PJryb#xq$`YQc$Ed59< z&r4}E0@2aj4;_I2BijA{HExPmURn<@U`PUZg~6!eDEM(f_UE} zWM0+h?0j3~z8`KS&4#RRdj!w0?fUh9`g|@tKsvm{5)XzwMIUU$1$+8piUoFJ8$4(k zi-)938CP^sV(F{P-@(w}zVmPEDgGhPot}w*Q2!Y_aM)@!>lS=Uo^L@Y?)QUAAFu{-L`OEGA{S2O2KSRFHe(>h8=sTXr>tpcqkk6AB(9dN*vMJ`c zXT%qd=7<-u;`8K-L|(Sh&+w5u>-_RAKVaU6f`9((**(c0Szfn@s4J0ASNKOyEHrg- z=3`)4UrIi)a!2;)eFTh?`Q&~Sb#NEonaBO_&@Ez{KV}^;_~-aN*(OTVWZp@$I`V#W z0XaeFEFCqAbd{4;Kgkoo5FR?P0sde#mc>!A2M67oEw zy_i0-VSSXWQ`7K3@Z;8mx}4l6C-pg=FY*>$5Xn6MjTclygFkK`sB0Aah&XPr=-|rY z-kIRvTWbaX-JhYu&)jcw8gdr=qnCcL;D43`f&abz0$Bp?{TDOvVzCTM&Hdi~UhWgD zw$nJUzjt4-j>`)lG||_JI%6NllKLU{Rka;{nM$3Ae9p=`6!3qqP6Q*a_2B~z|8B^A zq2Qe5x76)LM-_$O9~saN!TFLtQp9-iJj+n8eOi5VBMV-_x(NFRmX$8+58f@_IjT8`(5b6Ts#2p zzZCv~R|&qapB^)xmAX~RBb!|J+?;qJ_{R^Uo|XR9(dbE}4r&Pidg|Uzr=v#L@;!Lu zDU#^gNhgpeXI%Jlz}^Rr=!I~fa+w_K@ILvYru2g1>XPi&H-!J?R=p-1k}t`ToRdjB z1H5y47rItn(s3WG1o7XkbXTrS$ z_mXV0LQ?0R>ht7pi)Z>uxWglak9|O*hMebnp(eSGyItZ=$zI%TLe!Q#v-~yT-o@F% z3I8}0p88VV7u`qIF$C@-_D>bRks)IK5LCx=qWg)vn;ZHy%vSbuB>&3&h6j?{sQ>Em zEPKx5Msu9Y1l%5+u%T@}YivRtolo{t)iIxpe@HGkXQK0@JJ=0U=zZAblQ zw}U=|7kVg^cq`G|m{aTk<+m4}xKg9pY(G2*I+ z{gXNBqS>D{%YA2AMk)1^!28e&_nh02!t<(M&^6^GnZ+LWnx}`|KOX1xlt%`?r|yhv z>Ky-v@GpK%i2t4RI$hx%cQ_aR@n@F8Bmbz=#m@uRz#Y81@07Rl-?>MaQxoKOCMmj- zZbscSyx_P&2K=|cqv8b})kA}S@C#p&-{F49pVJ(N1bi;~{S)CI_;(!m@9XvGTj>qf zr&_NR++p93?5*_HDgn9_9vDG%DeHzEirr*yk)O!1BNPul6#l8BJtO=#sf%$)eP8ha zcFV|8mqfUwE4vXhv54?KeNfW~FB=963ioEIY{S~O{1E+(|3=$ESAIJDsCutksGVMN zD{f#1EX>ug0iE^0{bkm(ken67^^tt7QMex90p@*U7tCq=56DKAwE{dqAM3Z`7+;ZP#$FLuIa~@|u^lA+fIY`F~r5A`})@4`49=`|NPbT<#((^g>4#);( zD){2u>l{5BcMJH(9FQj_u4fM7e)}bkza)e16C`e3tHO1S`V4UWR*O0Z`UBd>k?rTd4`Q>VVfcul%w>Jaz5S;UISmD1wzkeO>j&bPB z*OC0*9NgpAHL}N&w0k}kt{J=8HLA~4U8d@@u%Cs0j&*Je@73>@{Qs6J{jGX2@O%4o z3f`&Xgtv+mT(jQ>DL5w{+x55I?J>(InL(S9_+cM7cwsi1&xL<}ANk{WV}{=vz`g2P zJQ7~3X+HtK6T|+6zUvWQ_xO?AU-bTeE+l!`f6@KME%6SSJtlyrI%ynmyOXMq&WQ(P zPulzG{rQHq>25;2jW{BHIQ^5t|85h4kR%;@Dyi2C|IF|0S9+iC>A*el;A8*DJ#;h< zA|KVV`Bm`!sLDrvXCFc5r9;-p%OSsW)K%L5%YE1Fc0U(SY<}!3`=C2OzdlNK!B>TU z(o_@SU+Z9q2Xc;NZXP6e|EYg_Q~2)_C$`u_gn7N&M(!sNL@VM-OyUZ(Xi3iS}J)BfLK;X&Y2P~O??O5VQ1Liq; z;(_qRVbI@4PYLhvTVPlMg_S^g4Jz z@YmzA!*mUd8jk+xDT>8oSGm~>;wjxt0fSy){Kr-_5^-IwHMK*NnAc-mmIAvMi;}aK^#(7RmRhS?UWHCnx`z zf>V93l+PirXC#?7h#im|6x=rh4>WkccmVyhug6u7BD-Kvj&|UMeaZouL}f-}?D>TH zMdp8Y^mqQsd^bmZIpvF+5&W0(KdFz1Y)Ii>{;2R@6un-=&Ze(IJa9|j*PzD{59s3XJM2?f-$(QnagV9| zfWGny4~TD5PnyC5>I<{1OZk+!Kj6B(3a`PFjHT|Tw~`x65HRwVajY+O1B7M3XF@#X z_;cYO^YC9}2hz55Rj>Ud@H)M&G0Vsr&NCMh(3L?)jB2p#SId*--fBZ8al2vk}qXd&(mVulVVO z;kv)^=Y2iT?^z^BXpMTp>YDyQyC*wB*U${}0n-EG3e8GVhvG-+0r{B1f^*EhlN8(! z$X5vegii(ue`h>ie%$-bq(XtQUq`)SYU>wc<_M0Q;l;*mW1 zn`E4t5$<^u2`}UgB=Ml()2Di0lZ_+%;}$rkLMV`@W2LU&jj3Wc-2Q?Kd?aJx^gXw& ziQJ!yN0507BEYVm9CAOvf1X!*dQbaY_y-2^5Dc5_bfxHrzvBne-w3jeGRar{7^&M*`HDPNgK;(hSW zTs%;gzh6ycr{jnEoAxI2gqMYT!lJc^JzxF|kZzja(HGe$Vy1`FrH279PA)pM5IaYrh6??`PP%_xv4r zCUfAQ?{9>E=wxairT0*4WeN{4XLypr16p_41>mT(k38|hq94FNX3dfz{-^kOeC7Y6 z_Y?BG)Dsh*s1fgS%!SKF|9A)w?C|$X?O)u|((}8HW!Lb#%6aDXyA5#*;nTsh9$cVz z<^d$OUoK7}d3DX{GvHtNLTle>j-C(12Sf61u@|lzKP-eR%pdB5u%DSHAbWa<-uKL( zL60o>ujVh96sdD`e9sbRpARf{K6Nme1*gObPSDzywZEMF{Q11JNYweUcmVr0v)KFX zZf{e#CoVmdr0u?@$HxSe{bhT3!dzFc_fY^E_*~)`$H?o`CifZt{^)2tL2h+BCtk9B zJZ*XOJ@7dW$gHunrTfk8ezi|Z&ZlJEn#@B*FWevJkF6jGavxQ9e z-pCe}zK3q4hYvPs$d3ET9$%kp`3Em5+-rX%;J(ajMzYbU;(&YOyeWTwk8Rly?z5d* zO?sa^K{J9=)OjYnx)7Y_dBQn9#ee6V4tPWH0`gFb7mx^)-sc!-&hK{gCoVYeH{c&& zS4rac>T`~!@Ef?tye`atOE~B4mEI@*zbf3%$yb5fvbCdK3c{@*ho_&dzs&Q4P1MYEsEq?#W=T<==A;)dAQ)Qw>t96Rbs zNIw(5qW^?~6X`d?;$!V|`eSbk@6IvTAAMK?JjqeLwj}*H2bj9QW;l$(2YhzE$ft|kxdz3JriG)2-^m{qt3w_f%Dff#WAkZ~N%K>fgsg%R#q_A(*9 z$jj(2NbdLhed3b|af!o;1@94pPLcE{7hds8=HH1AYW&mhq>O2`;spY7mfzE6kck5y zY%D?LO!9f85i{&~^f~@FIM(Z>*P+$E za8CI51L0o0gmv(tXP~x4*4UU8{z=q%cw|Cdc!mEl=YsP6G(SJUZ-j{&5!|Cs;H$8O z8TCuu-|<*HAEfV>v|l0#oWM2apU%Y5j){A;W)ic_mgM$PUZK5d)T$c>-U%+a%z#I264v&d(dwG^cZ{} zEYk7=l42`nsM0gRUQV3-*c*K;!q3TcYuEjzTE--t`Y8;7f#=D z+{29m$3cS)u8?mA3ycf2{QhZ zcpv?z%=I?-sgub&@IctXZHU4-%l?%8zmsP>*mcCo8jUE)UG7T8+4LJdUu!+B^nRl; z!cT}>@LA^B4>@zCEwYK-o)9lU-7Y6P@eb}qKirFVq;DLu@+0rLuUO{_|CF<}9r$NC zCgA=K)}^=i(mSsWhZ*u-rw=bbOz+7Kb?`tP%RM}F4;6=T=|0Sbm4{A9ly} z`ot$3dU}8(;o$?u#^RSJsvGpe|8x4@@!GGVUNt{tLvd@_*SL9|6g=Y}9Sh&6k$$>m zum{TDCtLB0KXT(F**`CnUi^Z%LW%s$U>Do#$#v}Xv4saHTgMKtmvL7s9zb2q|Av2f zAcY5rizA7b4#nB{lxtb$R9=UFFua@*Z~*VC}T%B8R z4xJUkv17r&?;dVTb$-iS_8iZP_apevn$4#9ZxO%!1?cA7rv~#Jd7kb1nyxbn1tXH< zmdi?VK3pX+xRIP!Q}8*-KeK(i3Ao1$puflb!Qi+F@6Mk{k|*MIiy@ z22#p@U-C4Zie>&9#T8t!=$tN+?~eEO03ZCFPSPR(!Qisysk zn&+GdKMRs<2+7U0PRFmMYiiIca#B(8!yhKPMtr9UqmxaZu5u5ivisqj9; z74+;AU@`yS`v&`#uzPe{$(F+K@lFCC93ICzhVzf;7r5i^%w|NG@7S+!UuW))y+hc3 z$Tj%q?}C5U`R5b~AB=?m3`JzY{iy7=Eq(+1Ht-MQy&-;5e3%HY{X}_3eutzZ@R8m( z)FWgy1Mac6%k+K%zu`w9^|?su(y5b>U7)@}B+Dy1L3PjYgW?+OGyEFN**f^&;`n0n zBDSYGr$FAU!NN!E0ru6g;sHAu{dL6G9fTnKi@z=MaKhZC>*Yc$@7?33r@ttCkla!yUeetJGl=m#pP?-2fr@^m6e7@(9?JxGH7 z#?5FNH2m>|eq`{EekU#%cUkUXCDHGO*UhB&kh)(9c6^@%t=l8sm)Bnh^?T&M4u$ji zV(_I$Vm80<@Bnd0c){;sHx->sa!EWDlE9r{-y#)LNfAF8IVZKiSJb<5656q!jU`TuB&S-ym z>PRd9g19#I0LMo0YWhLUgXAteu^gy-ZjKHok$6s7)y@A62jqME5Hx;56$h5&_bSJoL0~%})i+zAuHV?!LG(XJ{Ph=ioJq72Koseh1ug@0b86?ZD#oup# z-m@uq#tj6|75)oJ;z8}?zS%M8DakkZeAx${K)coR5QO7e@jT(bHG1B4I^WIRJ#@^8 zg_fDGXnRc(GY&r;x5o$kXzF|APj47U{~LH?ombJz;GVfH8_5R#TsOIHE<1jgxo$Rw z^e3a`H*o7F=6d{$IrJOCKe#&8HGb3~uis$1w$lx>QL8sw!Z~S-S9SpQ3OK)9ES_e1 zoUcusFGa5-`TKd^sPcSg&a|EezUMJKB)-ZqoXvK;j(*LMns?SfGVg|f7kVDGF1Z6u zRFb-%Sp@IY&o2`47l;4xWz`o)-fJH3>)aY}!~P*Z(-7XL(-$MNmps56gb$JjO#-4R zc%I9PsPG1-MVDx_sdtUg#$DWn*_WQt&^SwrY-e z{Dgr{X#e%$qI~9%oa=j0@6AVX4Zn0G{QHFU|0t~B z?q#MORv1qDtQ)}ctztN%pr_?`L=1^fi zk5c+X&l3Mlw$;x%As?0AYI1`T)vM9K6L;zJrB2wx1026`?C|r^Pp85;bJePR0ebaS ze5n2G4dGsMl#rF(7{NVia~{x>lv&Q@?-CA}VDDll%zR}JKsXUQfT&J(;4Hh#!bo6XJ?|@1{lHPwCG};VaT$mHp1P=KPnG zxv%gLdR_HADLChI=4kgFhXEp4K6^HmL_Ziyyh8p(6~8?m1#`8?pYuDN=Nu)<_)a}~cZmN9E;qubowjh#pPPf<%eW!^WF!7Y@j!#r z=NcZTthyCHOE%XGHy7Bqg`P5${Yy8vSqy8wm>vn_q zXYTPg@XM<6C^DY+*ekW=Z;vDQgZ0kAcaL~e6Vz_ERXC0w;Pnlz?+*UY7cY_r;GII= z1pQ7~!8}Oc^M+S)J~uqh@>g|K*nfoq|BMMQ^}gC`;1_#ieVrDQjhp1NC<(I^mvrx>ZLVrR;D=JvB5~ zy1h!Cdg^kiznO2)W1O6|tuNGk?UTET9 z$_|JpYeWJ33b#9VYw21CJISo4Ya<5Q$E#+Ycpp~?WV@#LIClPk?-Pj=!M?*+5_^@rmHgR&oDydZ zdY<^F^h~z{;L(%B$4*lCK=z36uY7~>Kf^J$;Gc(^2LB$lcbq&-?hQ~(3HE-Ujpbzj zqpyPWzWgNgzWT}1-AI0r`$=A}+85;Y$Zw22l4{N+`SIM}C?23~DzoTyaOzX=zLUECKh@$Kd{QqtR?i-!qT94$iM*M=6hR9le3q!ra$U zW62Z0z)i<*^INCnw>`YxrlBlB&+~rxKVc5!v;>X9c_xXw0FI;9_axpAs-IGv=zgQ| zJ$X~=8EBM<_mjJ9tC{f6_OAGVa+fUG|Zg zxb4WW?dI%TT|4S*zYcfNi{q5@nn%hXG2e_odnBCe=SbFnnOC^yehpG^kGTeK7|u~= z-TyiAyC^7RUMerQDe?SiPTYt%o<|)x<}XeOs5tEU)eo>Il$YbiDLzlW;AtRU4=)}E zu6MHMr?2>cxCM_(59o1Vc8tDXtN$Z;Htc-IKk5IfF93aS+}8g>?_VHXF?Zl!ddhK4 z-f+pm0L*<^P5C_Bidsq@05vy@SCe%;?}`88Z!Tl^GskMNNa-I{el?}8^=I%5{>fWU zCfEbFz<)itYi>Ds27N#s19N(*Yndw_ft{Ewl)s8Se&4BZpAF$xo?kE@!l)i*h~KJs zIB`^iKip%(JL1drW^0;&e~wQbCtLBW%@018!nfl0!hQC*{7Cp7HK+?gKf>1yT{E?W>y&yYJ#IN43cCXQW49G4 zlCu0&`SbY44TFDAIl3|M0QH*l1l$k3Gm`MUlU$%kgnO*I;oqb&JP!Qf3qxKmYY5lq z|EXS2{J9rDA&&>&$zI@d-VjfmJ^T6@yOChuV-KVE$uAt@Z(OhTA?q!D2JU;)cb4l8 z24If8@W0b~{mdE9dQ5WqY{4-vn*{7U=B%K<>4%tejuSYBH;h4Fb51DzoaO;x+lk+e z_tlT%i3<&I1jPqBPb$I#J=ML#7qo3`8Q#zLoD28drV96@HvTUYp=W(=b;3o_&iYO zmT`b`+z#8M@9W_I4}`^zQ*d144}try`7_Kz2j}ctaQ?vIC`e`m6pfzepCtQz!27-) zb6&6I9J~LxyR?-4LG^mXW2oaH&f4+U+_f?F%zoXipRf&(YXikCz$b3X++&|hKS&bZ zDS4cDUM1`Eqxd(xLOo1!6|?I|l5;J~NM9=c>nP$E z5BmMvDgGyR*kSxC?colL<5&JGPU|!Q|G!TnC4K1bjPNrod4GeWWUIPA=Gl|q9}K`5 z{egrx#*ug*G}agXM@{0%;Qs^q2ps;p;eJ{6H@9Wskie>x)Vx3Kf705{q5l*obl@I% z8cFWcrtm$)AaL0C*k4nN&#qefJN{Ghb?xKPNVvx>9Hi3cP3qRf7mB-~@0%GokLuXJU6fFdt|~Oqe#5FR;xD?;&$wB=A0#e zct$=~_B{6&e4DS!$@o~ZR;x7(_(vLeKs+`w*bC^>x$uvjdMNxeSAz4GEp`2!j_{9I zbvMJh_NDYWUbhS2AG+@g=cMxrN$nqpzs`Q_5VyNf!vK)~&biX39z3&8a@qB*`k6Dr z{d9~S4en>`OAqd$rJT6mh2iiG{ z#s@e60Uqc_>Y3nyF8e)Y-PCVq!S|v#87BAxa}4~1b*$=bc%1a%YJw#GcxuE0_57t| zJQ;LT@?EM2Oz1~PPjw}y#CuZaQIMA&M)F{&twZ6TKfmeNsr6VN16*Ner!_a(st-_MB$zE8nD zV`EB-zhCV~q}^OysDz?h^ih{V@B>ix-w_c)aGQ)1i+U`$7Iae$Iy35Z?&@bicwYX5+2D>HjAG z9Qa3&&v(~beDNTAtJP|G?6f-nqu-sep~3x5wSTaaP{&K)pE--1U%pR2E_Qa<*E~h| zoxEF{x%TkE9&|f3)bT7JB11m^c=`1@@;*~29K3Kp$FIQ7e}G+3`TOJ6E8G)@VQw7y zUU;S7$?tD1NeWjEyko!5BnbmZZ*MDL?9kVSIITl}Gfz~wM~}1a_@{2T7&z=x)Xb`7 zpE{nf>{D+4s`Q!sN6&tKie0MxO}=Epe!q%6Iu-sEKR17%@BQ?s>bK`(t9hrS{f@;0 z@Fh4$-}5@*9-ia;s^n{KJJ;rG*&m7WemtJgk2e#*>Bk}7e%4aQ(?>r=@_68Bgd~1X zyhQjHKY(lLaY=q|Tln9!(Fy;oYhjT~wMJ7s0Pp7(oDc9fi0`5A$!miDMx#*|FVMvo zJh(s2M>`(7f@O>;e@FWO{I8?-4~2iWRgCEWWdg3?|LSZ$^nv*?&{<3CLmIhYRheH) zUYYfzucVVof15Y56dcPQ;+oe{e{;j|xUX=|T)9qyAAz4$N>ZlQ1^ri8mpoR_9cGC*jMp@*(?zcuy5lX@`H!$zk6nfaQCsnzo!o-^AF8^ zzD604n3MDgB$_K%NbeK>8##CYdjb6p56qwczu5O%_**?Ie3!@HSmAqwf50{7s`NMU zJM?`O$B&!BJ?%?vhkZ|-@FK;YCoG+%;9op#k=j>04-c>(!98l-r1;geK{tedZmT!F z@LBW#v*$nK{Ha;^%zeVkhyF8|4+t8FFkSFI=t$!gX+x|cD%peB#3QICBp#q{ zF^}M$v7{sU378KbI_wPQ_&2fp*Wu}JQ}C~FPYV9ALkdG&Qu{c-11#?}!iU_x!XsIR zpB$2Mywj9*su6Dl?^iMuDCoc9;8z15OjrlWUKf82Tx*|L=FQ<98Vl|z7hDMcRXl-t zbXm@Ml<+`4B`=H}u(laP#16m@sq6sMWntN$`QbA80O5Z`{N2(=NPi~wdo#!XBcDfD zjJh1jxfkvU>$DAe-opb45>cke#bVHxUq6fXV+YQ$3pPFYuIx4Oz;rrs`1yRlsdxap zb}sz)e@|QqT%&KiWSoO<@K2b~+noykBL^?wW@Wry_-{x8)1f5yabdCi=K?9)ypZ`saXZ<`*!?zgN6`P6!yQX}z5uX}xE$vC!ht(@WZ}VKvFLYw z)#nT!qtA((&m8z>z0ps}4d}j~N)k9{e}eCv`3GQGoeR<73vqR=!`w7;4gJps3grLPFXE-Ihr>+L!)G4c7Cm_CN}_yWG*=VO ztuIe?jbCw?2-hTXQ@yU}wjJkPasEkNQhLf>b(dI{lIu&{mdssAuP9%XzyoKNC-6Yr z==bsTsXI~pC7`GHJK)Y!M??KJxTO4`4Nl3wF}Daj<9?SGKERKl&zw9y0YSz2F$bti zO3CMu@8){GC|8Al>XNYQJ@I@TQ~0FX7y4Z4E-aF~+_88-aom*W2?wl#d*)clzbB8^ z5dJN)kqP&}e#_G5%JR$|IFel;$-Y{6UWflo{y$}267ei}fV{#yp`HgV5Y6=n{?XUh z!zaW&2Jw^d32xNCNYY1A6OQ?~Ji-IL9)64PkKN`rQtJ7Y&rdIFpIQ8W{ycs_{0%hY z^gh~FhR9E_qie!Hw2J^pd1fnTNk{LIoXN?x9DSXcOG{DiUe<#CQ% zBPCAnun#Tq{Z@;3DfsVn`h{>$9(U%|9|P_KxaWH=Ja{L*bW-6SfTy>Zy8vMe_iUpq zfd|SG{SWS|^B9rbm!a@Zya8ON!uMR)+Aq2uJ;!cC$_~{v{3kxRVgCGO+lyCt9el$a z2XF)*5Ef|~;sTnBm4fdkbr>o3Jv>vUI!96Y9P~Z@axbBNpZzjRsN=2ddhoy5`*`Mw z`w=%^7XIHFk6Xe&VX-1O-E%}=q1(EF=6;IjMS%glm%wllbQ=lR@1@{LAT z`t$BQbr{ZF@aKUWS$}_?^hoLP18N*psn6RVETa> zfAK*=T>^3V&2YtoPrezFIOH>T)n8H_3@pGk@=|&Un9h3L|t@cc#TWnIgk=5sDVv(xm7xzZsQiOxX&`l7Z^~&mEr;LL=Shlu*hzw-${l4lX;drf{kej@CU@H>@X6t6C!=)CHhiHCXSb7-zYpf4KtD5qk6pY3%d z{Ih+TryDZDHm&$WG8$6QmW;3iaB~uHkGVdxNalQ%lI-7S4*XNk#(XUI05xC5^&b;g z_t^cct8>`<>c95V_W(!uGu$}go_P=Gcjhg2;bSD9SLLPHmTmA`&ApR8FCUY?1jnm= z>@RRlm=7MXSHThZh6lJ27RmQ$$ex8>r@C$s=g{YqRz8;O4hG=g5)WYi-U>GcKNp3$ z9c~c*J5Fvh7fbqxynchkV@jVcJaC$VcXmY-?&lPir}Whmr+Lk(et-PUHxB*Z+a#cg z{g2xJG~A5qm`UXI{o1GWHwmx8JNEnvI2=0kx$HUVce#JUy>RZ&+w+(!jc^{^CwScF z7@yll^@jvM6NV3*=QYMN65YGYsYlciV_`ftm zpU@9*sjv0t9BQ_ADM@%Asq^W(ZGX{T>=!39d(piwJ^K+?UXnd(@H22{^4Lpm$X@cq zsc=`(&w>5{<>vza0DO*Q{i(zAJJJJAb}RO@yB~JMGhTH`^9Auf=1p@0+21?pm8y=v z#E%ZV?`V?OBF}$BJUentdtIi-b?#_@FS^tP!6I8kx75eH1wUk5_fYS1@lwV{s^rtB zPc3{<=_h3NSh)8+)k}*9x)4CxORmo%4EsfLU3Lz3z-JlT0z2R{`OEMC*VNO(0|f*m zJh!B0@#6=4zXW+o*h5nJxCFmm^*9DSe|q|a_nQs+&#U^Nl841J&~R?>Ta>3W;-jC5 z!|x>Y?d40!edR4PB)o?~Z+DYw?g{pj&P$;`*DCJMyu831{_$A)UgvmgjxJ$W=5Qw? z@f`T)v}n!+VqQjf&@Y60_9uSBxOg{{CnLO5AN~Pm~#&= zP)EW0t`@Ul#S8Emet^5$QXT-lppC01N!e{K`+~S~h5tj<-|)GLYX{;3<`-wi5kH{; zk(!(FYQ06C`nI`Nqn-;MVD1KfDfRp4>CBSvhgY{GmzWRh;eio`gYXYM&V%v*@U-wR znwP)c9w3R|wZCadULY5PhwDbWLG{hvFCr{X9)vU#fo<_xZDZGzewczR^>$mSO zhWE4L6x@e*@v}_uo^CMTcb0ete0h{&e>X-|f6w(U_?11N`Id>|0t4b_Ur^_t)#`!zUiya0 z_!)V^482Nye>OU^EdFS>C%GhFGc(oo=cRCt-CTIycXT{Hl*HcghP(rMfI7;gM_oh~ z@0qRB>1c$6@18ai>LZux)C+<8_Ubd@CFZ{FBRsHMBj8oxKhImj|5*a621}oG-%|3U z`tq|8a?}CvdfdG6^#3-aVARW1^%k%_2BV^aNg57t4Q5{$w;2eBlY>Zb`DLBtkopF;s`T7=PG3ijYyoFJagC3 zH(TwmYw-$oBV}^atg~*%7Q1@XME_y;H*_8~(q%7>C3^($ydG~+=Yt=xwA55R?>c_+ z>qzwfjQ*Xt!aSaz$m?C`_gJ3`{sQqa=fU-AhxzpAeZ~&g!-a6Z%MX`iZek-`a2K$r z3+a9O8t@xZ@&XxlL`q)(@q6&E{%1@5U!Yzw1^@j{w@lWI@($jt#ETmpig<-`^nvAYdVhLA2nOy{uskEAwLBy z6sLYL!k$i%ivQ?ZWjgS{uI!z-8}8%C&jRm9%mQ&T%B%ab3+6NW+rfXS{RA&y=X~zr z0nE4Px5D*mpM!sHXBF2R(O7AT2hy(iM+<%lH)P@g{to#;`go|b3}1m?{spep_pZm` z2k@R=7Y`-m6==7l|CfHizm#3!ocq-k?lEg>;Vb_I{kGGHY&ILUc*kr#efoVP&{s*_ zUmouT%}1PPc!=pb6{SW@}7sB1RE#5?Go;-ar{+8AUeBZ+UJ+Z{| z|DXS4?j5+rJ}8{*aX#2#k9(F?cqi;ILf(q=7oU3`&xR+wKdRrRh+K1y^m9FaIK>~; z^V#TU@j=Ort|SXt$-MST0s~z`$A6dJbFKIVe-(crn+NsDni_Vpzk+%E414*CS$gZ6 zgnoL|%OUt*=k^^s>im{|apsIuJwE{>uGfb{0`JILje0x$f8yesSOfIwF9wmm{i5j5 zzZ+M&gWgQ|*KIM>^9s)q9w5wZkmupWOwYF&3+a)Ran^|ct?;`S;D3el>`yGXXRZs` zzjOt&|0pG{IBqp+=^BXV2MGV#Uy@xMo)jJ+pEyre%u2iS!6rQLF6%xw7s9*1z7yW{ zZ!5nSz&rL?H@@xP*7Kgnfo0pj>)swd{i*HWcW)~$2+rRn3~(&G`@ga;rS}OKRdSK- z%U<9--kQf>$n*S#@Na2YlpVkvqC6$8h*@M3;)6>~=4Fvz7*VH{Qcu9xekVSl?@IQ; z4e);|X_iIu5iU-MdP9ILZpWa>K#--Gq9i3tz6OU%!>YQNu zQF7|g=`+b|HOU_5RS5sAYhU;$f3qq4E5C;wumf+-B0PY3J3`7YaPYzw@us0CF32{V z2kM(it1w5`UzeHdd-ghJy|>r_``PGwCp;4ewcua&V8kyVyphK*!WZDfNkXp;1J3!G zW69BX*x$nal(}wS#V>?s|5f;c`uu;8oIKBl!auZT!2ehECi&qz@vCq1M$J<{p?=Ny zFx*rAK$0{i^^)-+a2lC?&QTh42M($FYvI31;Mg4aef-KpJ2D4{I?rYYd;cShfe3hKk8xNiMuN; z4Bl@ISVl?g9OIGfpUh(?;Qvs^^M7on*m%)$>Op#G8S0oaPztV$Lgpd3YcrFyX0>$Br9V;^bcv z;1v)2y`N6~bt(3A4F%=a)Agp}V8q==IHuwO!h~(fDqgql*E!#y5x_lWeUVVd51-{o z`gPDhNcIK&JaGm3fd}FR!dG5=fH^ueA9-Gf|3JK-bd&e!cm6z*`XT98aNmb7>{_xi z#SB1V@6R&}-cRY{u+;z4M^=gtc(qG-o%+zsilJ_3R+tO%UH1D)1mDoDm!4;wP&>RG ze?^#W5#A2JGDG46$QpL7t0Z$%-u1r%|JVoq?Rsl@0{Y)=0zBa!Gau=n)zBGWI@frW zKm9bGMDpM)$4MYAUM%{=6T=RA-+ST<+`f6_8iPNB2k0BfB(VdsEZ_(9d-OLW+c*{h ze*kj=9&o)j_Ja7Jr}|>~1uRsGURS@Pq0gW1<;_+A_XO&=o)RF8Um3+A8{qkiQ;5e= zA3bJXp1tG0>hk?{O&)$Bxe8#a>z^SWu2rTN=%Z*hc|W+v52)&;H0L8>4$ARl)J*o% zU7`~)CGLlsE-L(!?~cstYBs5lMZc4VY^LDdI3Fb)1eyx>_>;mrd9PkX--FZ4gL_{r z(EpLTy#@95VOw=zf%!MGtA&5m`+}=mi(aqi;DMty`v;uU-$woq$q$j76qJH z{^@y@?UZ|;VF4BJsz&OD^216SOKc%nI&uV(}R2AjCAPO z6K@-7t}1@FsnriXeLT#CBkv#A$e>WyAIbltpQ?Ty>{WQc+&xx54|=*buB89#2gns* zU6X{@eO$v+*j)Rkz~`|}>JNYi*l*c;tkp3vg`2! z_}w$v2ffV>|1}p_R_Xr>ee`_-{`r{;b3VK+-U#o;U+H%X|BK&qZtJhYuNL?Vl7koU zGWf6T0Axl(V8A|5ox6WOyp4X(9rz!QzrpW!7b!=X_)G2*_URaTku=(pu9*k6X^9&) zsqc5>2NnN<53a2CH$RnKU>td4@`%uTDSl8rPzo<_-IgRCFctm>Un(waud04c`-Aij z`>8sYs!_$8ft6F=7sTa>N42{#5TAO`?f3c?J`mr_EM@yk_W^X}6y*A-CGy!WriK>Gcu6K=F!zT`>L^>VS~^8^8mU zJyuO-?)L!j>?BIa~ z@k7ZRz20@;<|9Xp}S;TQM;9FxC0I+{#{bIjhh@Xzg?81i=XEgU7x)gQBA zkvGZD5buwby^kG0{(yWWc#r%O?g^hwv@feUHsr-lW-tbE^Qu2$EwFzN$MF*Smw&>S z^pis`(+9DPzFs@?`q{VS?<*gJT*GanpT~puM(N=LeP77|cE9-Ha~)j!+d$nub{zJ? zY4x~Y$NtHy*JI|2S9rL}Cr+tX4dA@LSdd?U2V@U$O**#iu@?-6kn9EK+zc#n0)CcD zFC-WG;5oUFoTq)aYtARcw|&$w5kH`+<3<1DW_aO#BtP|%zr@%%6Tm<5?|t#Wan3oN z$ZoIKcf}@s%c}kf_*(i(`hevq1A2ur%x^t* zXX9!46I$smc$|CcPRM(mI_!ek$*{2WrJ$F*`~%vBdPe%6c$VMS+^NYVpa;P@(J-A8 zS5^{xnseg9?(&&4^|)&||BX3c56oR1H;CK@?%+ReDb5>rLQi42h=0IxVILsB$Nxm) zuMkI|?g$IPk&mNoPyNX|Z9d=9m&i77$u4q)BF9hX_0G`e#4*zaJa7*?W9I08UO)hn zIqJgGCow*|{Cc22LOc+4ZW4972HYPX;aKzjP>(OWHefOD_#!|&2pclPW!GXDxa zG8Yc{bIijDw@ThG{A2gR1L2mZ-cB+bHEO~$RSd)h{dW6kv=qQUaS+7`x53A20Ulr< z4J$d#838e%PfLC$e-GNLMfKwr1^Ig6f0Rk`a%44cmwFv|iGRXBZb@JI ze+cmi|BC{D1>CC-)q#7=z#_epTzW0Tu13-(g1_o7b+H5erFc>IAJnfb(}0n#Bo~OE z<-*xgjkpfDgFnXL9X?E#%;rzTD&gKw_WoFGa3Vd(!jke9gJ1 ze+YjZ{qENNNoTdXuGN>laL)G@9}GI3j_d^V&*QL0guoBy$}fDtf!nT%FBGLE&oH78 z&rw&@C%oj&r{{5tTyox?qaCho&zW=2*k|cE^QQcvx)%1a&x;*0Pdc0eQ_$nPT02;Vn!U2Bl9 zB`%o#d`zCuUnGox3>Q82qj+I_$i7Be8<6%Ae<$@MQDwSS20uX=rXqWyw@L*0qz+_mMF@L!NmuJAuB76w1yn{SABf&Y&`4%J-x76nL= z`qy?l#~zkkye6snkLG|mcHIJ&NFHe4C%k|4r!tq+?@s7*m0mXw;tt1+bKbD*19)SH zyajXkkUKqoPfG;di$3CQ*KPfC4Q`oCJ4_{#%%i1~8A^B>T+4s~@8l19?8;!>s`CqW>2W zyaSV=@HxP-k)%u@3q0OreFOKUfBVEql5Y4f+^_A^X8jkuZX16aJacXyH#mZGrhrvA z=lI*DgmZK%I|(UT)HUs)Iv?u~#ATOEbuLa>CdfI8Bt_D;+P38H`94`fy&iVS_rgEs zZwLHe1@@hYJ|Rq5pm(kir=Ymr^%%$4wv*4;lDhh--wee$BPMd`k!3$@$5O)vbDFIV0Gbxa*m zIIsAvKkv_p=lnT)PV=AaIsYd5F}LTEHz{M8r*9^2t`Z*<4|Ldel1B^nA^br9O%0wn zhkv@1Vm}_2 z!VBRd>4w#cFZex@(8N^sLz_g8zY;Dn7Un1rk2(3*;U9J1SjIe%uW7Z=bJzit`HtCV z)OE=pV81o%O$+{W3Ty4%^e*9tkkH@S;sM$J)%PY2u-cy)=|8Tkc~qajs4XRfEVQ9bu$JvoTF!;&YW1fG&{U@Jj9!M?0E8uy4f+X(_{z0pgz3Imy`3Tyst`g-I!KKk|}Dze`+!@8forr!@y* zmpV3h!0i1QhcSU4Yl_Dp!B44mKbuj9wG!VK{^CXSEB_pJ0CYNq2UbX%Oda?a z4}fBL0R4~T^K*Csy18g?J+RE?kJ`S)X>Go`AZ{ZanADY2Q||m_>Nt zP0YTbJD0vmzG^5QAin5R zfjNex2Z+P?D-MT7`v33v#|{{gx4rTD>n-xe@y7U@8q@w>{O1Ml$2F!`a98S*>f%y2y?juF2z zoU7aKzylBI8Zs$%1>q9rAzS)+*yq>-sQujI57e5iR^WTe-xUv_cS=dsZN+`f@$C*^ zfd?J@kQD!kKCMX#{z;Q~*#UJDxE}nkqHv_wT5WM)ZI>RQ{K?@x9x4*%v#`_E5(r|OZJ^Wz5w}a%=J1jwub}v8N?Z|tqLO@#qXZtn9@N}`HS&)57pBcBI^q5K zX!#q-oc(3m$*-N8_0nIPUn}lyex1H2`yqKRo|jn_&!_K*Z<2Q+_$SWvPB_==5vM*E zrTrqZG;Q zou=TQW%&oK3(I?=^t?SmrAtNF5QpQ98UV@_+{^g-smkz8f{Qt%H>nHQfNbbIqGAy2m2#U7||Ec{36 zXP-Tb{NLc`=X1m7c<&v2^0zs5oO9R4@8W%v!%?RC8ti}7+5EWLi7tI&epH^XlKOj3 z;t%*0K6w&;z&{wq$LAwj7+z#p`k_VlBpLI>{!lM(9e>LKK2zNJZ7p$A)>Yz_NAdr`t9wUkWp(o}4 z^M_%F+sw1-rr>{)H);;Np0Xg|o_W}H&cSduF%LNBF5JY7Z%6uTS$=pR-fS{w!2coK zX1g7W4{VHu_+ma|Fwbomg$D3)f3AK)??Jn z^8oJ2S5M;AaFuP{lig4HtFr$y>eZCT)&9aRxH0@bf8pVQI)%`IIFt5~;sCAXvt!|( zyyaWM|1msK*#Q_FDgG{Da_ZR<&WFJ6IY`0lYQK`FrynUFUgoW)@GpNJIl}6d9?w(` zARb`5y*h8Y_^<=+Igf(88&dTp3Gb7?lu}QJzRuDglOM+|{MRSRk9xm-l00EvWYhhd zebWBudFGy^Pr9tX9_KiZC>{WBC*cS8!(aiz!GCcA!8}gEIq^fu5`XS-@|bYMFa`f| zM-%Ztmpl)41M$NM{`ZxKNRb>HpCwtkul+zgKy4ip2i_~bCLdD8uepAK9t!)BISY$H z0RO1NuGve-^B0ShIf2}s(lR#?bNAGdhh_Znk^HW~06Ua;UR7s|y-(b*F1rBwMbbZi zQuKsZ@^(wYZ{B=`d%hMp4>#xR0}tNO!(98DoGV!Af3(JCkljz-QFegrGQEE`V~!v8 zgXR2M;U7Pvh&PgJm_wQLJ#m`_`{xpV^j!GYJOvNFi$#Hd?=Cv_xg_e0z8C7)8HAyF z_;T?$lWaB{$oM{fRMb93&sF-2{kkOl6W5(3Jl>GMgd|>)rz^=yojhRz{;8*KrsU(z zQqFw-bdB4#WRT=9NAME<2F!ZJtnqWG+l$yCdDCJKROj>&H;8dKlOKS;HSoee_IrZ< zuh(0Xq@Dh{(EUd5W3SHbd+B@4=JHwho_()PUtL`p8H>T{0q`BBgGe%-;u-* zBA}nZgTU)pa{2^3lXrwB3~acvD!oQM683|WY@w%xcZUIEs8is!4=V{S#fL5Ife8Mq zI2HJx|Bv8=|0(~d+qmk7L*^O#tK=yZ7on<-i8N0 z@Ztk=&?PP}i8`1YUO(t|b*|(Av|i`^cxS?M3jWF4KS_T)=Kgd2qt?ZP`=c@I_iusK z0yqEWz<*ijbtlm~c;m;;CU!RU_~_?D@j$mv1m&^+p;l`&-G6tF`JP?(*ghuB8pQ*$ zf7#mM1;{e~xiIT0=KfKKORhV{Q&r`{cTAN%ep z`u{#SJ|(VsAG7`}(ZIWN_Nf8)xXHtG+ib%FQ^&b-E#^r$;`e%=2mkfu@i(#uh!0Bt zZxf$AYw*)?<6;VqaZft3@2NW&3HQKYD2dy>kp3TmAD+iQcwFJ!5wCOL-C)p54j0@H z{Co1p3;5*b41bubo7n3e#rG*oF2Mbj>@oHS_-ETL!WDlJ_q}lF^^*GIpu82tBe_bT z#Uq(-WsunSMd6S&1`|8#+Ir|S@xUsERjlmT`q{{}N8bf_pyC_wUn5_VvcC_BZzHkq zSwG>K0hS4N2;&p+^UXT@_PJ!IhkXtY@Vko?z0Z8}T==gy(C6SES~rsIZl?&?5e*32 z;}4M6J~8P3O#&JT`X6(<2fo37vn9OOYPC!}z#N=^mvq5)#Sif1BIS9-{ly3R{kk4C zYPFPW^hd=9e10L^tKSRUpZg1jRUn?w;)6Z7Cm&n)#2IJm!=q*(1qVr$F|g%mX16Z z>B3n`zMI!gC6{)x$KZSqK58NlYBg~FqZ_fkP8~b|E!NzR;5i$52OrRvQk^%8I<5SK zms9W#{^7SJH?pHHWdi<3`=jc)-IMSmW8O;t#66+T(*z{-?wJSw!0PwmiGR{L;d?%@ zKN6*J{GA^;|D@sp(f}s;5qm)X+vE5HYIWH^c8^iRFFia!Jo<(E@Afh4>%;@S&Dku) zFUV0;!ha_J206g+5dPusnq+Ib7|IT4;m4*`To8f=_lpzk#A;69;bElD!vB@I(%@g` zASC}kQ}6fN)|KUZ?qM)MOv0#tVWWTmE)puDUC6^#rl(KKRS#uX0e$7Lm6jawMD_&| z$q$b0;3~9D?sgQQU@I?W`K6-(8~y>X&#_FP6X7(2?{Qts_#rEYq{#DQf7kl1?^=6r>YiitFAM%pFW?ur---(v0Siofk$thI0NFFY26=q$z_;%!&fD8( zICJ6MVae}rYF%pSd;M(ugLwZ5yk0tgx7%BhUYw0b<@{Ibe)E8?9RK{@s#jhQ5CVBU z6Pzlt&^3d-z;%rM1$TkvE4};x;jD0aof`-rAifiCIA$9b^gn+Ay#dR78pfIY0dBq? z$!p=QLqj~5-&Q;u@*Eh~m+M*IX)!|JkAsQween3T!(%*w`@(|&FedTz< z@o(Udz;mP>Im;SbdUG8M_Q-oUFy^2enqO^IrNNHFBs)R2H}CL(shnr*2Y3ICcWF8l-kns85A(T%qQ>*@2m%%`C~H%^&f%g6H+oR|4L@tt+5&RBFk z^}7i7e7?ugRrjZrmiWG-QBhX?EyDkHr$>K@y9iyRj!#6_bzz4?^l{=n^(N}p{z4!B zB8xn+BK&*i)A$Q1^W^4p{t7-o-!Jb|SAZAz3vK=p{nh{85dNVt=-PZ^>~tb}wsdjq zn#qq_=1N#Y4}k~7%joB&rOY+tcnuuj7ZT|KWAJ~4^+HGD0pNEo9zfhF`}`?OYTdAR zfsN`6%Bzb&{4MKizcasqK8)h8?O#t>Cj$KbHK%(li+^g%f+zfg{SE$jmVkdA-%z+8 zFurBSV|d8#Q(hl568yl)_)h~_{KS~Q`VIXB*UazZuW2uyYu-W^z7#kQ;=L0ufyUNl z6$gcTcz)k=O!%iB65#g*^-6RQ^0EX!2922{e2)223-XUgPoF-G=zYK=lOLe{pdOir zfp;{*KhL4yxo#1^;Qet+^MU0L-bS~#`1=+QLU|vG7<~ceCi(uMM{ic2kcWrjFDDNC zD?fn;;0J2C{6Ld`r61Vt(g){=`$PD9`gr9I>k!}xhR*>Eah$N#kR=UW7rxooX+?N9 zZp!D9oavU|rSJmu{wxLe=taUU=+7GAYyb5z6J`9j@oUA$fQ3Kj!h4MqiQk%UT)*Fs zdY|W_*P-*S^cOt#6y6{nlcF1};+GTh0_7d?h5cIl2b*uh3-SyfUwCluOh7l3{-=C_ z{)ImEgnvQLbdI`$bbANxr9UX{^E~bf_qf@W!1@3zqcHH`zsr2xKp!-?c_IAc=Y;=z z1M(qr-+Y#N9t?Rv2Vf?j+0R(t?0+f!K)p_%PpUfK0Q}#o*BjIUbpM+_v+#d->UKi@ z-lZW`JYV~xmAL2m68Eoizs8RFwETHN{J%Pf&s!|+WhmUUK1$CrFOPQhIk;zET+WL) z0lYiHJ@9QYYSw^r*R!5QpMm4o(u?#f6UWmF_=k?Wm|P%jSdpzaU*ozh0UX>Lck&wd zFW?>EpQ|+Pf@A($y{`9b6iNg5r|&W^ao<$j5BLxKI`O|=XZ*q^aMM}94-jw2XTzG- zw|+go`8&op*C{^0IvjZ}yeqC)`~Z)c*X<=}FM0raApX(9qqT0I1#jYS>Ff1^8Y%OJ zx}EU|J?_`=jG=ToPr=_4r_p~h4}ZtaXNLHVo5{r!m^U+_UhtcoeYu2hcaPu4aymoR z5pa)%Ea8e{^u=kfXF0wWP1XKB((i!&-HN|Eo)s?xbw|#xsXn9vKUeNM0iN*#`2hR4isN!v%y-J?DI?9v?{hbr&vh(aLAaN`FWi&Ij)Z&l zqq(m=pJ!eimgm!qUx%;h*MCF!&(%*V{MV{k0RPavvH7?7HGH9t{dO~YulKtjf@kuC zF0f7E1@*@8C?P-if%uZ5Cw8?i5PCtCyj}hP9j;}_6ME!d;a_4_$-ZlOY!wB={Y!Wx zKkPF9XheNox?i7T;r?h)HU6I>>n?(K@ZWB)cZGY!KlL>Yna3mi*Z+q8DXefI{Db4J zy`S8|JroIe$96ro$^4>-4nrP?wdDQqS@=6N;2=fUn?f)Z=b>Z668ArF9^il6>8*Iy z)giBEehmsZ0+?lfU4y=0%Q53&Al#qKyXYW9(Vos z!a4Dqe)WWTtJ7X`!Jb3+@26Pmb^~`IxuE&y;`h^e?|u1+DeHr##C_F2h5H|V$bXJK z*JxDxiu?GdvYxGVOoe;!I*}h3WaDpzf5Nx&jf-!dsjJStw!pl1jqApMbw}X?46icp z=W7oBC;nyie1!i3f+_rympFJb_?n|HCaSBUuUl|c`5%^gn{+itJ)S&Z=F#H~ee8fEI;O16R=4HSt`Jf3eyeT}%4^*oS^uTzl)@U@PM^Tn4d4T*#iVjE`&;tJt?h$vy z|BqR(Ko)w1bze%yw&4HhDfuyZJ!#;Z$=B$DdA$z)@tdzK8yE{Ep{)=r_^tkI@}CAFevWN^<$>nAyj5CR7DF6>zjT0juh)gw!uR1R@BsT+pLJs``$TY? zrV7O^vtp_9N&j=KpHbGuz`y#TJ@aY}jtfga z%=|U(Gvc$JGk%Ka%zjz(o}NFW@c*{p9=U5hqUW3bbUmo9*KN1_S^~cxchj|mdFtaL z1@H99e3uH}#=MC=r~aPgLVAuq)uzP`b99jl_JXOseXP%U`U>PHaO=!#P2u#Zo7lWS(|KN5IF9cq%RAjlTC_j+FTRm}qqWQDv0E|=hv$4(&c^g(d0zZI%z>nbv z_?lr-#{W_m6fbxr`~&|o{>M>2Gt$q-kBmh}uQZ0o2Az#E74!M*uh*y9oACnuI2r)- z;lcMt@(V2zb|;>IKk>XSzv6ivdVEaY@ar1!5ex3e^V0Huq;Hsd@Wg;v@(lJRG01Xl z`i-p0Etz@WvRxc{!2724qw1d2A)Kq%Wmird{vpzL$oP_f7|K7G-)F-k_y9biT5o#r z&ngmWLfnUT!)weXwgcG~{ zSKSqpz5I8__$hUH#!~~~Px&I3ABBI~GLJM4X$v|I;Gg~=tP`Idt1bXQ3+mVpwBEk_ z0rjj>7hpO~RroK^H{=g$je1@9f0GXg|M-=G;y&wwpa-O1!g4uE$8Cf9qV{x{5P z<$7_m;9v1?$ouHy$CFuHv+t@NVBQTES>C?jzrQ;!=&QJBeodIk?C;y^i56?_W3=+#~Mi%|rY>_(Rv3;0LsB26zmQIge?493J!c z3+73De9&mrh5s2mLss*a?X&n8nJc%?>=X2$+-4xU4FgVnPTo^DfZr6<^HbL8rmizq9Up%&RNpeo zd)?vqf##dYq8lAX>ixLILiisHYV7loFnPPdiMA^Hus!9sB_qi98{_csOLuJ#eumM&B~?^U2?_B-r6fymSYL z6PdR-<~%I>l}pbS{#l1^EWa@LMXegp14K7vhtIP&_4kx3w^QnWzVy71?Uv|);Q?PmeK4?pHS4N^ zC*>vb1M-LNar#*Gn-XUb@dPEYd_KHBLH~2Pf6U*vh5u={*EUbW;|UYCwx@&33d5^T6I`oz73v`}V%p1x@IyMt56J$nUAQvp&DSF(TmN1=#nAI1AoYpA!DZuYS4} zw%iuF6ZKoSW&S|^i5^e7zhbU>ba2++);KTP8t-cv{S~h*`o$&c_4LPTym!198Sx+w{?*PXPyuXv(Gd?+&zC-+| zmVQC;g1=#{!5)lID{X| zPvKS%&7~+ma=_?)S2~>Rj6^zKHt!A^XzqS=FE8ioZxs1Ob zDzBk_kDft)fa;Iv2h0;5abMOv`zr|d&~f?}z5Gq4WA%r7_y+xQqbPqc8hKgzKc1JC z_3Pyqh}SQy`g5{s&4T;R7+oH}V18b$r&m~CjK++VzJuq)Z+JF-0HGg$p!73f>)b!{ zUjqA&fT#ar-)9;@KjIHslgUxQQV(f(`~>)XZE1V*#BE>?&rdJu{m6Zwf4c}+@o+u= zDSR%fZbCqle_+`q{1AF5`3mQSAIj*9)cKI#$Pe&>yP96f*nmj!e+a>sy;os9q}%SM z@(ja#P{nbh`cqb|MsTlvWo4nw>;n_-_Xw<>dF}AIB4C+@NnQ}a3A!Qq!IXJ{T` z;hynYC;EQ|{^lu`<wnv|E98VI0@+VkLE=$Wn51f;3?z1g>LHC64s@je=nTNZ^&w%Z;Bny=c5GNzK-|F zxp>m)mhl}v3GUyy2SA1Yl^*dOzrbm>^nSe7T}j{rtPeH7FPtNM{G9K-P`$_ZgL~E$ zVm>Orhl5JNKXjb_Uw5&^gemzS{BbV@_Y6BPe*oO+6XJDv2j`1FA|42T1YrDt>i$O> zzodmn7XC`zY+#A^{N1An-={1z5bnqNdvMQVKbA!}(t2c<+beDKOn(+&Z4k zxL=p$e;oZxTvz6}U&jdix{v4*x#zfm*T_Gx9mFu;2h=YnOC1mWLAFO8f?wkAE&aHJ zKl<-2^9S4G1gn0O1e~!he4a8Nk#a#fKdH>Culg&(iMtx$CF8LN=iH~h@ZRS8WaWnf zxX&BaN+3QHKZ=yUD|o@7)3FS}3ipA2Y{h+}dCh+i?n{2eI2cV!zPH9>DE$Jz7ZdIu z`SnqPAKM}3Jxs6iNeZY=bpYvh;2)e(f3~+-Z}3p~SG>3Mp+Nf% zW!I@M$q&>T!*ah^_+1w7gAn=>g&XA`vaDnHp7;S@U)BxTC!Kr&PeC9Q-sZ&l!1@@~ zy5f8Ia)y9p!Ts!2o+;iN1Wj3<_qt`jY2Y!HRbFcLlf7yUKgxd8;;)77G%V+k&eJ+Rn?!x^x zecrOrlX`f-zE zv|=8J|K!DO;hyyX*TFr{mGQBaT!xnyDOT}1-LmjnX7=)a8-M7SZ;ReO!>-|H1}Wp0 zam{#6)}~$J`I?oEmn9c%IbS5jRykoT>)4Lr_vm$wzD#h;_M7X9?{)S^af-k2Nw0bDjJvnS z_@>|8U;crHz3Sh4O!Xer}nUM&AeX#pw%xUmL8cS8Im-pOB@F4S50Q&H5Jpv;Jt*2lt=V zd0xW*_VzgUtS?lDuqv+haagj9v+wZ&_su=leJIz*dB0`$BYg!8;=9?WKG85w*k7K2 zDI6a%@daG(kro+__oO2U@5qmt#d`myN%$Q5I}9Cohqg@Ie!Bky1$Ku&=<Y_`fWE8o@c?f9$bG@Yodm z&-fqi?-qRXM_JsT?(-J9{U<4YfN{_X;J-nD4&Vp56rCWf5g)4@<1gkXeBT=MpziqI zvM+$&W1q>BxP|_RplGksk9d68OsKQ)STfEIf?iuY%#5i)C$1z{vxK4P?z-_rT z_(bNoZ+t&_P2f25x<4#4F^*dnzZ1RTyjUM+WU<^v`T&wE4fGpBf5?o)Mg2g+8+y|X z!@}X9oW637@dJ$R2<~s-9!fu;_$hu+&9fX7?-XU709^o~x*Y!mT>Js++UIrgf=Lsd zNBCf4l6c?l@cr{hJbi>NAS?f4*hh|W@u!6SmUN<}HFX8NWn2**m z^zC%{N4%%L*V%T&d;G^Fz2&yXbH?Ef*3W>yg6B2Id_1h`-tb@xkK_J=3-Gc4J}y%} zdn<(xFb;o6@B`&~J@|`WZ$1TgYc7ODe}@|s9@pZv_twGJMMKAe#UHfW#oVIri_ZxE z-TC+r$pusP-x~Y?=~O+QH|JXKx7W?NxWw~`7OT7nws5XmYaU?f(=io8-Cyg8>)2F= z$FP3Zr^yFp97k`HZOxcph2P=vu9UCiSQ79~|Ik#pkE)Mu*fl*Td)cg^GY<{-0Un;| zI!LRIJ=axh(uV>cpbdCp#B+1{KE!)99`Os@AL72b!k=TK^uM8S!Pho~ZJ&^<7^ryTd39$tjw1tJa5wM=yF(nD z3qMtaFN+_@ek#iS=FuxF!as2b+@tRiU&ZH-(Q^~woqwzOv zf#aR-nDrPrZ~BFOg3ZR+Nas)8Vms2eLpehC>((dAiCGda3*paO3Q%B|R$p>D_3fC#08}Wj{YCToqi}==(rC+NC z?%@OUdEyV~KN#7IaoJ__p1lyyLoek$#W<*aiI#ZCq2s^$fClr97`6$=`V&x5R!Hk^NeA zeQ_23#(BrpDt@o@2V?Rqt^<6{F|Q1Z+(aG7T%7>K01n~5m4LswQ{?R96t>_Ob=cz;ZV8J&!e0g~!zK5;4*h>r zTGbu&I(1>sx}S~bSeim6T zq;~r4hm2>wFUy60`AaOkmi|$24=%bY8mtb_H`(6jr(|C_@1-TiExjC(D}UzOrn8o2B@H{1x?sJ-dgVP*t4o!DDQR``N^T_c_A5te%?% z?^E(@;a|s!|Foe^h5r!ZiSR#yt|!tFh>!9s?H-@oOZMO=m1NKDQU+Mz-Ce?I&+Ua> za|Yd-*9TP`Ij{45x7=>n!F>%lx#ecn?TyEVd zrV0Gu+OGZit>>==U2ml^WFuG3tN;A}9F70(wA!KvoqY|-8@@XW_!T5&}>5orN^ zVgA;_b`sbFp%=Cw$Ecs0bylnXFWkDR>F#g(mW-Dxr;f--4 zY?zndt$?cy`YX+NpZBuM(HU$6avO)Kg^*mRg2tHvhWcL6%xM!W7mVs|5t|{KrXSdB+v7YU0rr+0n zlwYWbms~b$$gnNWat)be7B^q)-&64V4axwemHr--FX#0tIKF`#&=-yw z*YIgi9~bx{u5#L(U));ZdFvS6ZY&Fb8S?op{2KE={Vna&<{znjm| zmeS^Pm;aEBUnE%4k*SWK)4wi%q5Z}pf7fUp959}@a-QGo`+%;_b(7Av4LSn#zq$OP z@(4>GQI&O5Wz8e}B7Ftq_XG8_leXmv^IG&AWa)Em2>*&FiSSQ+weWA;$e}E-fUny< zuCodL_bOSx%;PDC%ni72-wEgA z_WeG7w`v{+@&V>ifOFlR0PcZ%C+>#b$$t!f8F&3IaiQ;t|50&A^YXoO4*PPBj>`PJ z?1lVVdK);D>uJIRMhX6s=QJg*!2fXsjAN$%fdAz3blT}8;M}+mxAC@@xotfQUbs&1 zZ_xY6>#-vW3E*hMIQFFg=c*6r_(1j84Zop$B5b&gGw?mP88)P^^Qny{>rMI+U&NCQ zw@SZa&u^sg@9v6QO_uxAne1wcA0U5TPL`=pAGzi9e1F9K!Vj>Hcc=6NE9>jx0n9^a z3jbRF4_)!%;X(u6Pu{})mu1<{f&2jB0Q~_!!2W%*?M^yU{D=ReN0j`3&edF0+?VAt z3;Bm;v-)OH)nmYOLzul+TB>9>*_ z(lHbENtzVJx0d6{tav5Myo7clKkz&|!{@i^jXL~3y-}l}A)LOBW0Cz(?vy$h@oUU@ z7rqVxM@OBHRoAj7I19KHLm`Amw-QYuL!X zGP=Gget`H<>K=+Cp7F0^)|og2-&>XY)C0Jm$Zmx!ar(LJeBSNI(!Rxh$H`^+~gi%Sdbq8pF`mueP?9Idop;3m1TZMB0KL9^i`D}@ha6hczsKeFJ!WBHzjdlLCvw`abJ`%E*e*stQA^fmJ^?zJ_K za4+so=Xc&G3;3MJJ(Y!C6y}StBU}XHzi^#0FAu+v%O8x#=-{lgF}_!8I)`XmOWNB5wvi8>hmC-L z$l%eQ_)i}?7XJ;d-NrhB!Lu(i!*2zgZ?Jx3fn6nz_1s1x+fG;QDtxae+)FRE_yP2k zX}WBex!=PSKVaUhHt_??;Nq9U|9ZFECA&XA800xR!ubXXNlM(u&opGq^&qg*UJu=m zx}f?;r9~>Uj(I%&fSnBL@N|%fKP>Uc z>uJf`iL3lRJbLP}3~wFZqE0hU!RsjYiU05u@^R1aQir*df`8fwG6&un&gHx?OrGEm zm``!fv0e;c*GsXqIZaYtZ+Evx`W??d+4c2am+N7FCgLC0hwL!_pZHI~z3K#d9ltoX zT=z;(_tRdc3*`^Ie_6a+8)aQYdg-uG9Alge4EP@~ATVqt~1Gw-g@0e2D`KUhp3?aDSU{(bqA{Kn;ZdgM(%* z1^*1UlBXZf^1H%6U+2O79@|us$5Y2APcq<}(;29~|LPTfK(Dhvh44>3u<6MA)rXfp z@%!Arw&FhSBMaca3ohdm^A*!<@B`-Ih&XB?;=C|MbG!Z>QkA*&NJdxz2Hdc{^vMh2GVZEZ zTKp3_!ZQ7bZF4b@caXQNdd_D$$C8iG_qZCCIffU6RpbZqn6PTH{1x|Qqtbv+-iVvP zXJT%I&ARfU8}WLz$@l^PT8}BYg&&ymIq<)}zE0eCTNwj7A^xk*pz+@pPs0*#kA=qu z8)Sj!8&xKV1oCe4#z8A$p?jsRLr8SomtF_%M+6#=C0tI0Kl%>);ve`~`nxUohmUcr z^Gx~PNA!W}n6#n;4tXCu%epb2vp0~FCcLlTYlCyv-rf#Tz|R+UI*NV%Nkc2 zkLb@CxWBw`_#OIkvX<3({_s_nr8@T18S(!O@V^C|8V3AB2OElS;54_yd%{FdxNn>~ z^$S^ejgjrL1E}MD>uW;TOij|2ln=if`0y`?Bg2v+@U6 zgJqcn_;T2|b}hzG`T^$aVvmm}pM+Jn+U<5u+-kbYHkX$YaF2g0WXIE@ElZjEI064t z`X-BJ)9KE|1By;}J%RUo7S>3?`?SOT1OMF~ycb)`(GxC)^W@=q z0?yIl(d&r!L*g_202u@*fgk9)^*N>$uITTG*XRebIp2excqSWTmnj#t!?FYa)Aax! z0k3Tb?on%u$CCd#u5TG#`Z;`OS^5rkwVr)j#7)1Ubv@$sutB`W55&!CPQ6KZlx{9O!neRVmiSQ~ zBXp$T4*U_e_uj&F4F+ZKzTnaD!ResbWF?K>y@&JE>jeESx(IU0T!IW^;3 z_&j>*t#}>Y*R!|6b>$ECv)G~U{1|(eb`kI&?vnq^jQjxOz4Qyz^{}_(=k$B{hZFfV zcy+^pbM>v@-?nD(+f;rKy;}GmBGBu;35(7E@i(fku@6^6y1VxClRgK(_TYF=^D>C%dp{OgRdIbl{Xl#kefNcqSNI;g z@AmMY6a5|eRKx9uJ@S$wD9=BjjD*k6 zTg*2|Bloe}L22TC)ArI$x!<%IgMUYTD}#T*2k0l1r5`<7@DES$ihq>Z`vE?X6+gB- zR(eMuZnDlyTH>F)C0&K*!;c(Rd|j`1HaGDCc2)U`a8KRY#ecBGocTg2@t^cP zSKiO^0eycy1?TY7^X@!#pd;n~@UBcEqIPwaN5yAsa3 zCHhrQ`1>W*4>&%rda%O}Oz3}+-UzJP(jD*v#p}FdzQTEm_YXP$WzEy};Gg>ck^BPw zUAo39;p14gTCLV}KWJ|o#?7!%YaW(@(04Z{DFt~DQ_TrOf0zn@g;rSjCRjNx&iHhgL#9;n7?8JMdSmlsM!*B)4LRAHfs(9d5%xdc#u}q~QSk zjO# zN2KsvbUkds`m>Bb)}hNX`hBtFfkSsYz51Ly7JIXJ1wOFksb#+0V_!db^bS7*{@qRk zzazb!=@bL(Uc1w|MpqAgzr~RU-=tl}5yuI06Y+Uu-7M^5Nz|}=_{B`0@AlZ&fxmD5 ztXAS3z4m+I-Z4=a-A{g^(C@(8#-4c3`10U<7yo(${&yHR9LJpjL@4gs&%OHNI35m& z%U?wD{qYzca9i~~;h*KX+Ftl40pfmKjelmomg>7F+n0p@lsp3dgzm>WL)_Q(_tX#I z*F14pw$$CR8utm$0lDN@et>pZ4=?NY zxJtnd@>olGe7e2;q44$hf4{zMSCjL?Z35m~U1wyqPgTkL58$cG$@#KB>3p(uCd&rt zdA~#&IS*LcaXtz32QZ(ZZRitvlJrCUCJ2e z*z<;d7K?vDE<<0m%cYJ9&RZ0`lT}m3|I+eY^?rkiEcmbG2IuARV|DUF`~mt$r53?I zdQVx`;BD!k%6H%eVS{BVCZK-Pyh)##EC50`-K;*R&ulAfaDNAO3;zJ2m-T*JzE8f< z4cE;U{;3|X`|Df>`%#ALoNhg`KP5OCn$JQ9et;hc9g7Z0yzW%k$IHO~X}5dL!^P{t zJ@I!YOId9tcI*w-AJ1dQ;BTgd0r$j(G3UGK;`V#|ca#0fyKXbx^e6MKzn*Ras{(sH zgU34d$F9GCm)uP{l^Xkou|FQTKMr@@U1J&toX_1Rx}na8pXGd#8`Pbm<-EH11Ni~< z$2;m9(w_r7z75Y}Jfa5-N?s2Scr(yf#r+zCbLLM_u#jb;1lgk_`Zun|%e5MHHO6;Q zd|zmslQ#^7`?r5lF|wL>s`$=h|4}>`Jthb5x6PTCE5iNgWd6PE@W&GW@(=Z}%euDk zF~1jfR5unbIn0IM*soTI-{^k$BjWf%lln6Fr@S=t((#l}J`MXUw2+&xWHW<>FHoT+ zzN5R=Wskp~#`62FU3*Xb!c?e(($~ZIZR2-#IgO!oeq^8{;eAZq)O?YAu5oI=u%F|9 zvF7vX2!8u{yzL;$=1#axThS=q_N>ndu(_^oXB2f`&=rPv-%g z(?$}7`$E^D{>@@i&hJrP=BRU{hYa<;^zM{;_&WR5S@d*#2n9qiJt4f&Lu& zV}=1_PeWRA-V*1{&#_DNqjl3I zyTouW+)}crI2xARBH?HTz8A@pC$f%ytbm2*w`HNHEzjrr;uF|kG#Dq~{}3LW^1X!N zZgSq7=YIBx^5?ali|`IjYMbTwpH24irN!ohCOQOsgaMI)f2QY8X$HnFIgaHukUAarR19e^*-kO5~Wlp)j|6Y4Hk*_bh2>ZvdOVEcLw{ zykGDCviaYHd*V$d%djYa7ukE8^W3CAY%2VByR6rY#r?Mu_&~Ec$SwG%E_jsOwb#kJ ziWEP98#^rh0gborZs=&e``8JcQzSg{1I+>X&nl6Q2Lr!2{OS|Bfy3Mg6hO zLNkodtyadmEc6Q#ALp`!3G_bfka5rZ6KX}uuyJ^J$)=L6y{mU#o?d4i=M z>>#;qZ`QN1)}Os8za{IrpGk?2?Gxd@c$E)i8|X?N-K^0d-cw)4?=J-EZw>w_UZdX) z$k+FVBoM+q`eh-DDTI5jV<;W3OMY&@GGEQ|{Lp?C_t4+b^TQt7JL3oZp69xV{=1`2 zx97++%$bw9tbZ|I@mSg=XYvR5$%O#^OWhv)^D{3E_-8&y+kS5DupUldmV9g7+=2AvJI{G}J1t<0jya}B!(!XjRWrGN=UB91|_#gfG&%*a?#`p&Rt;y_t zzvkAM4#R%X9{rqotjwo_N3T0@KcBC!C-n12?azT_nVuH5&UH`2p)@iNEmqnJmi&JtF=uLk}jxKeQj66aE9Sb=XFgJeInL^bPQ{ zLD+4j8_8de6ZC?-^b4H#EQKeK=4P^ljf&e$HcfwASn#Gi*63BOZYKGxg}4O&n^V?tqTd4D=_FFN}nL{3+|on5(r)<&A{- z4fw%Kc97Sr!aM5}xa79Esye3?j=Re96Rl5mjrUo1dNk(!o77`g40u1DF#mw{geWf$ z?d^DjesOGC;>3~n6XpgE+@lW+h`;m&(8me>n-F$zzk9^E5&o4A2=A{l?#R>dguJUR z-0S>g;b-^-`xW7o3< zf!0$5|4g4g3gr3lroQ+-JdV1b{k#WVGoRZ#$f{2G$K6cL9s3C~dS>whQ|3j2|En6m zukk+`CCtAf?dszP*19^MOOgJV&SqR=zijS1-e67offL?cHj~9qPW(l8u~K8)G2d<^ zJz4X2NiZyZ_~`t7**^YNb~^9%%mvH*9rBqa^G>5V{N69cMbfT`TMCQn<4VuFMc!@+ zmv!aI#C7ID4-9yB#4n2--)gVe#rU73gC&c0@vXNH-%1ygMfKsOi|#DHo0YawuM5}0 zB|KpfSPk{P_{W~(^Huyu%HN}N&GkEj96$bByClCY{IhIyi+KOrN~PYw{%7ZSuHfB4 z#0|UzKh;a5L$JOtxIfSB%}V?H`Ev*EwGO6(4=@UZ_f?+HP?q6amp|Zq21I{euV)E< zK>JmJrw!7#9yq5yO26i&+hCe@HQlrueQr#$X*Z4UtQv4eI+7*V!I@siQf`&qgm(?n z>-M_Faf*L%EY#+R%jk@UDLjCEVyYhevmMc~hc|fdoa~D7Qr;KuapD)_><_%V2@NcH z$(VoQE!UKjqkFJ~*Ael_ay~z6{?eo!@c^!~lXU8hTE%tJ4rQ6Q z$Ok&&P2m47Wwr%_E~sIjqEjFPlsbj<0k8UFqe=fmlrB)})74r7T|Ys`W85+?p~7QH zI6i7N8wos~w&r>Qt_4FKQ?9}v5XWC;eZ7v{FcR)52i7g?ha663b3^|hebKos?d%6W zcU$M_(ECchzsr6$gS-Jg*`Jm?M0tO+RwaJ#^LthMlz5I!o|>n8&AsG6_ElyNqV#_7 zAD_^!<1Cij0UxkmaX!uv|GmZ)R`XpW_y_h=;h(a+7yjGp^Gx_Z91=IcKY!l@|EfRa z5#68u_56-91H(v>e*Db?DLi$(8%yhb~9sNFmQkU;Y0iyw)Btu-sy$IxBXpy zm*;2D2M-Qsv&j0By;2 zd$v6)b^2o_{-?z2?_Pp?>fN~U0^Hp0A$SYV=FR@da(q1dA+yx;C$k~e+#Y0AK2M*2 zk=OM)!{4V^)ek*-AG)IE)$APPRps@&(EOqK3cU`$q&R+xM8-Z%zRH_*lN{Km@QR7- zIA*#00Dfy6pXv3ZBXba+Xx>945BTsy`fb3yaW0nepM2fJBPMr%X(S|=~;WW{QX6HmUQbN{wH&mI64FWf5kY=vi-Y>?VA2n23iA^O|g42S?zXeydD)N8c(f{m<}# zq?1+fY~cQIp;`C$oOu5*QYWC?I1&E0<+sYdf%SE#zJgk{5~yDe@t=YIV*1(W+KDcpH1dLumF32$Y*$3M__kG_Wj1@_Whv)7sCCzbQ0n|@r3vvwZG07{8R6nPl^9mkyo;K zHC#O&o-q+W06+4foacFRBK-4fMpo<0;s@UCoQ%AEH{I?h_<;L275>#v1-?JvHVy6d_z^gIF5J_;5)E-) zenhyRkblTB&9M?c4WIUCAoHKbk9qug{5X7UYKQQJ@KKe#(c({t^E0CV2JYY(l)vU7 z_3g!^HhRfTi5yD<(+KUXHa_uwUt{9kz2apmV( z=BWoDySyd*YaX;=-TAjpzrnim>1W)Asb`-FXje0^&m`+=4uyZw&G1>gMgJE2&Y9b7 zh^gI)>_=5^*j@GMmU!P`otER2I4M3~;<|Wbm_N6R-um3h&W6{~9{IZP zHGyZFhkmzp3_o}nc3E%lFZx{82d{fSA*2bnt@e9==byy=VOFolC;myjIT(az<|*w? z%J-kBuj;iWFXwnXEy{i#WH}5x&pq&BIxLmix6r{6C8f z(oM+YX`3p9{~CEtQpWXuU$))jd%*d8``X`u`(H>u2mM?%>k;Dz(BrC#|0RC|=PX-y z;K2VN$Ir_TWIs3Ql3mjIne%pu_Rbk<-rs7zmBEr<%yo=xHxd4UXBGaB9(a(;-mBLu zmOKErbK>y_(2J(0j`3!_-}m5N{Ld5r>-?RQ-q)ZX3@bb&_ygsGivR1~;=d~XU)p9} zckoa8Ys3QvMw_a-<&cQ@Bx70iSG z3;rXxr#-DH+@GwjuZK_lr^Fp2{14&J;p6ZT^dN?h{71%|Y{!rM2jm4mnhp2`=gaTo zciTDDI!v}i432~q0wHCnnCbYPb+)b~~iornmh9?g^_~tR^vOK1_#cCh1l=p{6 z^lMTNtRN5u@UOl+@qfOiY44lQhFP_m-naJ&Z+XJ{JjhNy+;^<&&w5z+fok)(CHy}p zzC`w&loy1yN7;vdpu(pD~`X1 zK2$w;N6*i(OSrGDL*K{WOf8l$O+C>pf#b22Wg|@CUu_EH{eMgQNoK%1^Xp68^H>z8 z(fQeDkGda^p$Y%jIsHL;+eePL02}i(0Rk_cbm)~48(mN zOAh|;p<_=h@xNNFH7)B?GVf?JVf|X#&N?Z6fON_^Ec?2i1T5)8C9v-w;V=si;%DHz z9v_&USK!<1v92fo64uSYEf0kI1srAy&VkcZ@sx1_-=?pIX%o^lJWX}^7qcW!(_ ze{EhTpZO|zNMC<7A3d2)v==S8I)Cc!r)wgJJw8JY$>B9=LyI`v3YeeB+4s z=seG`-SxJ6l0HF?YI^X0z=oy{|G+%`LdTBvb>tT~tpWIdLOh{P81}h+sv|IOi25LX z0_d?0wcv}+d+e)F>ivv=?7Y*N3-2u3(U0`^3@P*n>iqh>0M79n;6G6R!>_PE&v?vz zmveY?wJz3mdW&T_l|1)pN`x)ka@qaD@z90XJ;aQbmnBc(mxmpcf5Zt#JAbu%@ zzc&W%yk8>DR1@lqz%rxGe;z-WCB%Qij2Hf4M+SSo$8Ar9d;Z)?_aooqczMu-SAc)M zwr{~VehnQUUDi6^rOj)+FCAb;Utp^KzyWrZKBSi7yOEx!`3>_P{myoEa!B0*yf+&B z9lD?LBE?-`c}ciyO^zBKoVF0QWZ&|zKQS9S^0yz1v0n4=kB(?XMGTG zU%YHIIKIa^KZo(2zX#npGVDXOaQaj&WxZY^8^OMBIPx z@2*`7&)hTOlW_k`>+ZW}=@V$?SQfeYrToF<2!9FwCzJ13_scy|JFjf53O{=mp0scM z^ppGwdFkAs8{ijD@q3(4y9@u=1s?SEG2fp)pFkeK{OqZCKn(C{@Grk3{5PBEmEa$^ zOkd-l=gu+1uM6+Lnla!4mT9&vFCCEa99Vx@^JX3Uxr#4h-=%$MBp#rBJ%xXU>4_o! zmvQ7`An)gSkO!pcwRMO7uW_8PE*Ix{V!*xgM2mPymrZ7TYt@#kr z`B%$%Dd_1%PJV&a_gdoY_Q^>mT&{H4Sp(dceDz}wzGLdZajz(T3fLq1+)O8YO!)^J zKW5n14IY5Jb|^dH#Dsrn&s_M=JiHmJI0&vk;`ZVX@FxR!FvlIjjBKm*J@5OEi0Ac4 zzA(YDM)?`><+d$+c%z~?kAKemy>J)* zR1JT0_u8D7$MQIgj%zippM7cgx+C*t@&LVbp0KY4b!;yyp6Xbqo4)CmXPn2KMbuO`7!%kH z=cVa5_=7#_9_t2Of<9{WfWOT9BOj2SApB3^DFHsfvV#R)fjH0eCf>vEM)9Vn-|1x` z{Ieh5`{8Q1B3(PM?z?euEd0-@*Oj=Z;N#funRQs(;{W6|9q|8`{6AdikN7^;$?u}W z5&!WA^lgEE^qXx9{+XsE{4e2ULZHr189p!LJ=ZJS>CXS8d>^_na%YpXBmN2h=aw?otulv7b7f5g&pJQ6?QHt&T^vDVK($B>2j~EaMcs>pB6du95 z7f$h`?}@j=gM3QVf86cjH$QbB4~Kjo$Bh4h@aP?mns`s#tyyr7d*})O zh4ex2FZ@~F*Zy+y7phMLaNTade@A&k@w{H;ef&!KxsS{J$M_unK9&!ATxDWpy4n2OLNdWTTA2(9-fAsebsfWtq4SbMQ0RJ-l z5%)4M;2(NbO};b_=zlMgFYN>R&~jVuZ$teXzmVbZ9mjmE;@Jm-tFFYyo_&1S$NsU| z=l-97|9zGZKbE{io7z+_N8k z7(7j|)J1X~ue3WS4t%qGYZTsB+C?r)AM*>@yiu=%|7WKc78VTr;tlwSIWS)#kB^D} zd)vxSng2T;k&j?m{<&kx1H`w;|99x08b$CAj~mMm^vExDOn*T)-1cQ3l?VST>mBm_ zaHaL#eCokHahm#HO8kGF_v4lNDf?0z&v+L8A-uvreHZ9|M0^H9r2aRacguZs;q$E9 z>(24q8^S;Bh0(A+Uw6H`9+$$>_DPlp`h40vDB(Zj@k{sHPEo#y|6K|V%Jb2`sQ07r z0UY6;KAN&_U+Uf9d_L`TgmbleeqI@zQR4_tzG^fT;r@_rp(2d87xga1#tALRJ~T-M$e{u#FivebQg!ae%sar{S%4mZ~Kc4GKp z!hb*ZT)%9=^;;~rZ&<$X!JGI4_X$7o>6CxrAH$~;5+(nS@zZt}U6k*K_a9mEdB)Qe z9k4TKo<8NI^Gycmf9mUL)`b5m|HS*N)i;geeKqT6#QQ%|1}Wk{`9B^Z>_zsYMGmY9 z|5fl5AK3?*Cu6@fU&6zW@B?4ghxBK%KM%{~jT83ekiMRR`}Tb7!ejTiDtxeCPMJqM zvHMdJQ_Fn2dAHk5%6T_MPx!~bs6T%{uho7g`~&x#D7;U8C4HWCxf%^{_H;(VV-L+! z{6m%;f^UGCf^+rx$P!Nb@&^nXQy%{?9t;1he>^RD0P)YE2k^WH{+sj}FdU~?Xv(qh zKOzB?e_+{*A;bxhWyaL@I7ct69q5dH~omH5m&JvrH)8uAX{*vCJ8)rJ6=uk05L zH|i3}7vvjbTlV`$Z$FPaU3ioH0Dj(s`<<1Q`M;KV0lFFZ*Zyf8ul;zL5QOe`g`XXR z|0}HDcFjrmhySDZiw|_A`-AUx0{+J|P;T~z-)e#9?@*SbG`02z-wAU%uxI90u0@x-FvX?_TC{%nQBMDd>G zbDJstfbmNIZUWwk6X3qvB@Zv-eomgBE&;Ey52y3t|J&2s{J3?U>AnjU9Ka@FJVrklK>aJPiEI=(s00(AiIkT&KVfW#BH~6%2Z4)mF=KivI0bw3`CZU<@yll z%_?oQRMhQLDvAqNA9vuSC#MSnE^fzbash%yN0|^V&`t9Eo~_(l1HIZT7P&vx^Ssad zvDUH{+|!>=o(dd_KXP!|>9jk-d8_;H%F~@2ai4>9d%s`Dl6S-Jg6pzG|Gq)rE$bX` z{06tv1#A^3^Lym73FoUme)4?bT#xb#_V_7dV}m6v3t4=WtT_B!}{k3JakdEvc{vuFQS_;)YVqyye#|Jf>^Ut_;V9V5HZ z2Gd^MAm49N>Qwe^omC{>e3XgE*hRT5(sx zR-ZqB2d;1)>__ddl)L~BTvt9E9=HyVy%e|ObzWz8+sZcbo#b=qq;7ZeofFm5UwgaZq~p>*IWCp>KBadgFZ8><+0jB;cMhPDi*`pI#uZKAnHt7yirJ=wmGBRg2`= zl>fue?o!tn2>%*CIsaq0Wp*W;Y|1!>>_ai>ntcQ_z$%6jfH>i zmkZ?m6lW{%-|loemVGR6Guj{Gb@r)QH{gHm8*~r*)AlCcejC|ehWK@e|Nq&B)*q_+ z06;AG2Ul(TU+MQJju-x!ztD-~-69k90{M5YXW{VwJiiJ4|0ndNFI|=QgZJ?J9rUfG z?vMYPC?1ebFz~<q|@ay&R zV34B&7>2~@`8mdC1Al*x;WrfSvCQ9%uR?pQQxvJ+Ex!q@W2Aa*#8MY~YJL&lSl_T4 z;sNNqC)}gwYqG%BdF)KWfMr&H<(YkVd$4(I?P;po_J;s`u>9d`1j~daFnQC zwvPb)4n(l@45FFZ!_2c9H$N8e}!?S-w*kmaM6SJ zE`JA4^hd*r7fhP*y~O9<%Q7sM!v6||V(|_7WvK7vy1{+Y#vS~{R_Ae%We?Wk$MIst z3m+TudW%WEWj1kdrQJ$48Mc|l&$r<}w`I4`?MsgZR+)4@<7Mu_Ke$i*l`q8y&+!j0 z3;)YeSvNZ#+{^!)&(j|j!v8kuzB1o2JDS%e+?T9#AzP$r&9g5j!*CebmsfqihJ7TkpaDL4ySXQ#qHaetQJ$BX{zD!8ZZ zWVP;xcChScSs1zj^_QA#8{zE+_JDkw(ff$=Vgmkw&jz2jzeXdR@Xx-w9pQe&g<0^< zeeXKz0BNI9@cUi$0|xwiJl%jdl0Efz%ikB@zu%1HBRutRS=w})`1@|k-Fm8Tq ze`fwGddDX}i?0CxjQ}2d1>LrCa=T8+Hp zU*{?5inhU)%*P=bpdTc<=d_3g-*sDJl9(MG>(!bbF=#wFyNQHmm`b_!rf&~u}aEI(CZZ_(VS+T-D z-!J_0F;TjGwlO20AKoMUCJqSiRre7*_jr85ePqE0*)wODenpDeoG3pr7<;GS?UqW3vQXJ7GGmVBTr z>#MB?{J-#KJ`dLqRx|J)uOp*-vMj$|V7J8+dEe|1{>?4>b0Z&0$3DEx>FSFC{0}*A z&%W8c0{?P1*>6*4OTd}dO$+4H2LL#LAI2qhcXJc@Hwy3p17{hjv%%j^{#Jb=2LCU4 zBm6i1GxZE`Ek7dsXZ1Sx_ro9jp#DSfKjblwop^v@Eq$Q4jDPnP7n?!Y#|^fHfB2x| z_Ved{AKWXi;jxPMbbf^QnV~O8pP!I-fJcYen}pFF@O_hTil`ri^Smm&|HVQhEnd9_ z-__;!X#=X_fRr1}>#PreGNnF%o<3DS6Z5p0KS*8x$HlAU2PdopLOy_eka%F7{ee8| zp3HFL?jLgI0Zo`smHapST}YS@u#Rqs%nKy%HUvR_E?`3|*wjyug|6f^ueWO}m1O03qdSDG*0WbW7u(GJ^4F3f$;P0b&fbp^6 z(mW-c*vM0pGOlK_mA?V^^MBu)3jfHbn&thq8hv>3|K)H95ByYmQgMLlW3n2*R(!w) z6UyuJz0c!)aPGlBa*Vh?zKZ|m_4w*jbX_=SxSomD14R#vmhiyOYJHx^FOt{zxKTWB zSch)78krZ*dU@-CdAsDd;Cx3_i?l20h70Tj1QexmTqxgoGHRo=Y@=zCs_I&PYf0w zRUYx;@=wGm;Qr)H&E!|i7W%iyuOwH_45sU{=7q+r z{3A!aPki6=*W(o~i~Z=s^?Dt>&c5~1zt|o2r60>qX}}f!spDnfANZpmz&-PE8u6}| z%_6wxGEU85zCR-o4c_*FbKMbF<9<8By~Yn-mU(zc4_U$z1K!EEl-T{3epst;zbsZ( za&S-DrV##X=t@7#2U*rAg?r$&^w4E#|=2ygCYHgSk{L=D;{8!s{h~` zZ38pmpXHRMvZ}kt#yIIF^e<6=SyCUkicFjY`kxq%V-FA1SI;ye^8^&<~H zK7;T8kJUNm{jWoWhIM$>Pg%!@K3VdkGq3e^aPN-105~f=cD7h=1@J#1ZzKHE4!QBuVohInR1l@B;C4v%-IdKS2L8Kae;g{|WxAo1+728G4jFAnO%OWm5#c z^8LuisdT|gS}(cwI=Ug*~ z;jZTSC5Q1Y^iZ>h$svzJarHiK|0PfSOggS(D*sAd6~Brsk=;A{7WWgqUCfr>81i^d z>nLG0&s4ZyE_vR>_kE2_nGi7zoEFk z4KRdv`dXV7TP$1XdPlus)Q^fkvUDZx=F}O-rwR2&=I1T!UUGAd@t)sIZnCbHjqq1f zan5dXP5EWa1cUXF-cs0%>v%Xq_FV?3~4cwl|OIOgB0_@|zS2U5n7*LuP7 zbMzB34;FpkKRk<0@yu_g{dMeE|0K_IYndO(_+O9jux^6#rtA;WVjVYGwwW#h>nt^! z>of6yXrtl*@QMz24VkxL!M|ulxB&-ac;Hp(`v4EH&(Ihi_^E~;dBC4gC-B0*@TNR~ z{Fm|oTaJP!c;~#f!Tpa|r!^7o(GT7HuMKm-$^yIp^g5Q$8&U$KHvz=U@GjT52HrMsQ>~^xv z^U8c-x7D}ciTD{Wr^5d#FXX~Iy4&@0;(Fp5aL+PqM*g1p3?;a)Ue6EBq55)!`{`hG z+a2bI=)=^Kcc0DhJJjQ=xB^_C{zqrsVypLKEB>N>S1jLe=G5~~ZdZBy>h+v_Uj2uQ zb>W#ZXUBm5JqA?%*bI@AO;}*4`KpQX0<=XMS>iliAAr9#LmcoXdN86t7|*RhKYzh< zCf|4!9w{UFhdufY;H4V{H^k6aMEFcz-_l=5zZsVEV?MFHsr{U!4>YgFNVjO+KzOV< z{dQZrK=F~R%|kVh7&uk)h{fZ=KcD-Lk?*B#LHW+BvoU?k*rqm)X8tnr#Cz~B8b%-d zY67n~<{2}**bl(`O8VQd9zut@W_%~S^T!2!q?(7#7jevbEZwDe0Qt$jAztf*wmtiX zFis1{x~yGz3?6um`vecfS3#8%540cv@c{kAJ`fMEK6I?~Ke}J|mu^uWpusx(^arKX zVP`J2>EZ?AL5_jhD)|5Fbh-9(ga2o^r8(;YP*$2^f4V{*#mN5ySWx~`^Z@G$B(H$0 zCA{!TE#-5-zv6tWzMko{DIS3SM;81qm)&l_4oM`D4`7{d>Q!%OpOBLEcnte}5I^Jp z>px&zqW_Usi`Wk5$s?6m@@Y#KS?7Yc6zr`)V@T*Z&9n&!RzJ}0!ldMc24}q@gnWA)9|r_7w}`h^&dlTqxjqK@i#Mo zvK2qpdX!jrgmDAztGWV~@|6+(3td0>r>&rnC13PM^nd$=1$c#j+L+Xzw@F!Dc5B@- zKFH@ut~u=4*I)k?e6Y1az$5$_ifeflgj1KznGmBsCvyhyg^%HI|F_G$)? z6n=ZQAU}+izEAqGpdYG%zwb91S*G~Dx}V^F{;Z!>{(e~2rSm-lB%z+xo2|EU>S?4a zzp+@YM}*(qN2fg3^{fYxE1ri>@&mWmJ0jnKrEb)6d(`ot70lPQ;GT7Uv8?CuL!-Pt z_2+n)5MK1Ncx>oesIA1~aO~dfbj>gv*I8F88OCGsB+YnCeL%n)hC}@KGQvN&k69qE zh%OupZ;`%S4<7mYmT)hf7qIzX{yvOENdR(q-@jDE18j*9v@RpK7az2`lZpp$|6cJlbmGMW{M|S*Z)RORy3H28nwSnzIsieKo1 z`=3I$HR*tFC+PnQ|J*m?0{m7VUGOUD*lHb5^2vShPai-wP+hP2-Ke3we~o@s^ULr? zHDB?3U>0XK0Iw{{>Lojprlm3$a*URrPio{OA# zn)}*Iz$-e3_&Q!}aRY^a%3y`~;RFJZ?V{7oR=B9=o?M9^t545d2_K*E+~aS}miOfC zf17O0a723lZ5}(Hzlk0&4!uD*-3Q;BteZIj_nXi_#RK?-o`nZE|I|~*E6deJ0RLr{ zQm^-0-}d|D@g3*O^Th9Wd9LCy`d7xfjuRSNlIwYu?~h+5*BRcWDdO)6&fkE0jThk` znl8Y9!F2hi@K3xPh5ziYz*~{;s7?(2cj~noc|F_D_`&brt)8=VK0m@e`RNVeUV7J~ z_u-F*L+>-smAIP`&i-C;Ki>mi^y}C?>T>vhx5xTLYi`fqbiIF`$+BGYNIW3@k)sEo zufFiFzQ%ZHV9~D*!f`w#-kgSG@J-`FIQEBTi}?50AJ_Dp;f0>+r~Do_KNkLHRs0`_ z@4?G%xFNlYKfWhKZSbAU`peN+nISq6`pih9l7UBWY4c?Q-qaV8G z=nEhZKwp4Q3;J$6$IU5BtN4K7XXytxC2?UC?=wI&Z|58O#N+>-{8W7L9RHId0r#V_ zP&@$6(-fS)qJA^w1E2@+?_Qx!HW&VJL#e~>!xM#7e@}PG`W)e0qelEge{MtlDysJ} z@dez!QCnGI{k?d8c<@ynzyCIFqXhqLqV( z(gEVv9E)sFerv%((^L>eM*8(*5CkTS*B~v!Y5po z(dU9UaBsJotS2qI$~eGoihjZGW>*aj*d~Pr@dEy~!aaHOEN=NNcw;kyfANrbK)OLZ z0F66cM~6S>IOaE5jL^E*i~<$l5gMan`BdEvH6 z_iQ-yf2Y%F=T)A6cp&`K#z=k7_1XSsApB<}HVpVDPk6?F|2E^sl2@mEPhE{Tn*2t!2&VdhiFEdS8o#fp}sG59NG5_j#f3TU$UBoX1*gLcE}PMZV$z`Q^a8 z$h8(ipLx<8NAUj%IP92D!UxKu#!LPJp7mm>FR)%?XMMfx z(E(x1`_KW!WHuB2k-anJ19*3o4rnXC0RGXz;GaGLemwO+&+u}p2OwNz8Ta%HVM+Mt zc<|lwwjHj^Mjxzas?u!%NXFMlM{IMV( zBTJiH)58bItD5jnUVq@|6N2|o!~+@p;^^y<9}4H)8(G#U74Ng&L>X9r*Ywt#q3zoy zVI4m3PnfV0wwTw7@C@Ldy7{*r%VX<#)x$^x3qR6rUig$y;#lj~T5yg|tMcpLXx%1` zmt~D(GHkxxN-CVQZY!^kj`ThU{u$@kQ?18IoIzfrqtDg)Qi0dG4@(DrmrL^T=#Zxm zdX=8%c@-5Oz%#smQ|n8~@8f@K@k-nxKd$=Rmg+QE>UXnAB!7?JDZ+Jkh2i3r*Uz}l zWILyhw|WM=Z;$$0Ccnd^Vg69KKcT@Xxs#(Zi+*y)7L0?ALkX~M+er9_2TpVH{VeZN z)%UY{cA&VQ+r0|@i39MH#QpH^2>riHx^b3}S8sJXElVDad=2wr@UH`Sg?LzTM80RQ zQ4eU@o9tkg>bMb9!QHN`oSEq zUcXC->oq1A2q(naAnbwPV;VPI3dx?HlkiVDxzP8`iWlG&^uynMKgrP_%I_rP5A`t-Js_R# znK#K}i8=d@%bHK(rL!BJeUPhpmp$`gxF9}^!~@i&oou^Jy#f5USx{K`@9_)I{sBC$ ziSUnGX1@mf|9ZQst5GKO=C$}rm&PRWZLg?qro5o~Y-PJRe(8d_#vA-VpLJTgmY zaI~emnQ-5nlb5FN&1B490gsF`{J#hP@FmBpdttA1#Rt^OloxTt(HciNmj0}z@Xzuc z*fW|2p-{#~K*ZSUlFnt%8HTs$BhmxF)hmB9ZtqxuC`gl%|y9162T9%yXQ0sXA8 zD*V$HP>=mU-j8}q-|VtI_C`*BPosgKq`&u+c-5j~nOC-MsCTKJo>K>F@RMJ2mrv=( zbJzUkmwStrtSP=(L;YVvH?2ANfPVF*bV8LEB@YMRlnHn+ENBKkZc@e=C9Lel^_AeB zdLZ~E-X|T8--id_H{l<*Hj@tEG+Ob{?-vM(pn1SAvtBQ8Nw>p*!gBu#gDwyc8ZrRr zI%B{gVGMZ*{4{+~4$JMV@LLc^IB@L7ldkYicvg!C;h_0<;NT$c!S`$CR@hr(;6(UL z&odl^J@TZy%N?|Z-+?2KF(gZw93a=F2M)9@x#fFiJWdPm2}jtQYwMl1^Z+mcc10TGjdXaeG=jWn}@BnoT@&fE5LRnCJ&}@G9 zCwSl&$WCwBCqQ~5`9(a};(g{9;Z>a1liBxD@Bhh zg9qTdarL?AKF8-Uj`9DFeLsbJM?WupHsBuErEb%`t?_|vb2=*)|JnSvW#PeB13w}> zYh6yKI`~%6(s6-q7yc&`{IGa|Mt4`$#g{YrRcN~K*Yhj7Klpj@&wBl`%YN$7+vu58 zd_kUX#V~(XMi1EHT!%V6?xU{I5c+XvJY(ME zZrm9jto|_B&2RLyA0^{6vL6=z(&qw?Uyh%wzW9R`dpWs0*kk_iW%rR+ogG`t&=Z%# zN5l(tf6ZP7o{RjZyG*)wlrz77h5Mg?f7)~AIXEEBPG$RB@KuHXtd1S%zQ*Hxz-1m7 z7=XM_?=SeD2>-2CryUO6q3Q#Q~-eSs@|_CujAfj?pXkYV1?fNX;~ z(Dj2y+7{B91?Qx{+a5b?WHk?-)$i>O%q{YZ-H2s5=e6WkR2*Q;E%QaM*DDOiy1#+n z_t_sV9{7Vcab6hM!8!^4eBci#Kg>PfDBeO(pfB)~=!!{nPCT$N9*+~{2RfY%@P7lH zb?TTmIiuk;hX#Qw(S6ZC>lt|~7;0pyc-VN$>YSmHo<06t({Ce;nrTFXC~f1pmF zd_VaBl}jo;fF5z|Z^PSr_Lt@tozCpk{4%~lT|zu?4jDfd&KZ>^(vMT!cW}%wWd2Qf zj^8)@t6dsWsMo)GJLPrF$Gg^$eHB{c@4~D2zi4k%dAovi&e(%@h7I_4 z+gbJ;-?Ujw!8@aozmpC~^}6E--Xs49AEZ|KfBI&;>VGuIh*zMmm4q`OobUP_yHiI8 z;PrRlTWo&glt7g6$oe>0-I7n&{f_8W{C*=|HJ5)*Jegd!A2B;E+K=q}Oe>%HkKFt9 zzgpc3ANh~)XI*#Mf3(6nefFCBC{tfKJW%zAq6Nj1NK=~DDJ@I8vFJpNibEa1PP<5YN7zEgN7tTg#8b8E=D49P9~1&XRnz`yi| zelLHS+%~t6n^|%@;_q44XJBsEve6(6+<<9RhY!%1D>?J4n~X1b;1lS;Bv<1Hk%Ha_tQX+@+>CLq`dy2H1ATn24VZrm z{?8S?@g$-HgbV2b(gfuH!mCqoAl!=|Jbqt&de}GUbL?9DKZmTZoxdI5eDlqus+Ujy z&2A-a#h2iJi%!K8t2mvXT(~6wPOyY)g_VEje){X~dh7dsUv_Zv^p6f5eZu^kKtDYF z@>5yb@oL1~^vkfm1@ZTEbo+&PJ^A!>)@>!MlLPM?;Wv73a%@?qY5u9Z#Bf|V*2`F1 zYt-GP96oSHc8%+-_yHW-PvHlMBFBzy_e{=wTZZ9^1NZp1(%rQ?xTU%*a>?Z6;~E*d z`mVW4*{>7tc;ViAa821(dLDEWh=Fg0<08k;cmIw)KwhuoU>*FxI%0qF`2CVVTDbS* z>yv)iCfsf0)cvacw(n|w&j|G&c9>Sv5&r47s3+3<8^o2&=bz5M?wj$ZgDoNPE4hA^k@!RLGve=rCKj*Xh-ziI196L35ru1szxw~$TC z{1%AkMqcOTbuzA*_elPtGiyiksvU^l!2_KM;|Ko5O?!)-FN-Z5vyS$}!UOufWxW;f z?{oM-^E2~mJ>`k)ue#4l_F;$@7$@U+!CgQOj6M5MqL*ft{h!biF~4B6?{iN)K>cED z&;?!YpP|o&by#NVx0h}S=L43!7RRI&e8g6|1KuFdRZ^cj$8}YFFe(rR;t$5T@DKgJ zU*VnrO?7?x^=BTQm=A}eK;Iwh-p)VL~sZh#Jd z9l6!>ST55vdd@aM&`%U&ovYN7dTW8{!0Rq z$ohHEa1ky!*3Icv>*y@>y{xOFbxyq2*Jv#!cE@TxjfTVj5^sZh*C(u4arfQbs_uYg z-QI)bzPU>`s5ke+9p!5R_?HX-*MzIHUe1+}E+NnFwkOO(lAj;*pRnz=c|557xLquk zT?6is0r-2<|M8hdYVRf*#*IMTkGw;}><8xe9AvSd)5k}Dp8OHQz@tlnOWogytdrSp zhpWkD@`=lw{V<24KKo+kAHn-;7Q9nVG7cTUX{?C{8jVI7-uLe>4_Vrkm`$t*orA0XOhjjp}{NQS%ECcm~Zfku#NB39pB=~~|GU1M7tqO|#4m14n}c2mhSX$YF-b;AA@d3j80o0Z@dm+C0~Qjv+5_>X@&@FzI>C zU*J5j^drIJJQvz?#!hhpaFwNRaf5i_!w!LA{z;;~LMJ}xF!0TX{z8Xg9@v+X@qX%9 z=edKwvh4f7*UsPp`U}tx@ByFSGZ*4{Xkwx|8}Y%!u>U0aarUJm{|*ko`}uyK`vm@l zi-dW4{M|}r`E^2`ftSfMU}>-t56sI(Dt$07(OuY4@uL;IJM(^v6r7(^{3pCuc{}QU zxT_lTd)}BR&ISKGPM3iHs$R=J8=U?E9q@JrfD-h7#!pVXuJr&D;`oD%aZW!>tya$x z`d`@RtxUiN^_iX{Z>D`uJosRJo0Gun_`lN77hC1AiMtu@S>CswBVP);lQZvqab)2G z@t%&EUbnR17`Ybgr~VS{F*AQDe8Ab-h%M38*h_84IQ-Oqiahe+bN4A9*9$w?XZ^x6 zuYOS0j0gAA!9m@F_jx}x*!u(4iT3yHef&Yp@0;)zY^qr0Zh<)Sx|zUJY$yM})LSts62_Hmov z80viZ_4S-QKf_}Z!2gIq$J6IJBW^IvfBDsVtCbV?_ZzEq3;ubI#t{clKbk2HfL43L zzv?j&{PQ(6^XvG&;+uHc{5r$K$7}I&o%y5TX1tb`^gn`s!UIs@=m$_7kPMn@Kd*2? zKlohuZ=*{iet%4U47?w6b*8e3_p${I#euqDF(IA>|G=iIE3!SF^6_+8u`e3<#}Zxm z1N`nJpvR$sy15dS_!y|KbpT;<&Cu;sj^N zYYLyjKm6YF%x4(k2Ln7nnh*T@8$5RBsB7@?9J{N$TsYzc#znMO6Z(qC$6w7q)HqG( zD*`WB@=5%Fada9#a36Hg0m47u=PmocaGS;n$1MtZ;sNRfKDiLV*MxmyBkRedBY0i7 ztSpTz(hI^-f?g<6;)!1-zj#*EjQvIO3*KInZMA3U3HtWAVUfPQ>2UC4;)XZ$`2pKn z%&?Am{)O@9-T4K6L$=X)eyr!J`F+G$6ZwDq+(iDrUM}Yr{4bdwh5siH$iTZopFBUH zf2&SBY_^jt6p%;Q>qVOVFyR%=LzJzNkFfN`)U$f#DqY;K3;(2-N`rqS0L11y?Ngo$ zetF4*v#f(595`@KJ#Hra!x!M+eMRedD({f^S4k$U@*e2#w@?$0TN#fSbrdB2I}nA0ik!{k0Pd?P^z0IOPl zKi(lbt7QTRgW%2j$FL6En>!mC@q$kT`xGnrEA7Ih_s@r)KzxsU*eji=6 zn(v$aB?35Myuk;|m$A&xFEd9S9k<_!;Q#g4+h=p;yOsSkb(izY12+El;2yrODes4$ zF#aPQlL!0AeWZMv`E_`oX@{x#wdug?#{4>dG-1ox9(n-O_prO94Oq|6@3J04-@yaOe`B#rctH5~{5a}| zq+e#}fKTG->6;0C1gs0(5&qF@i^zJ;q7~0N@1$!Y_~-aJ{#6$j4}8Y}%Haj}Q(uY? zls`l#yi?UTD_gKnd_vu!FxX#?Zo~WRCr=+>L4NU-gquiT9Q@Ze+wsfv=#Nhm`eSNYqjc28l;85`=dxd05q>D& zl(7f}dJsPu3+=Ng9zcfma(ICCx!{4EynL~h!v|G7fMuRvC$KISI_@B{KHhLt7Q(yg zrtx!g_4^6_f5%+Svb1LQ0d zpSXwleQ0Ht-%svOOXsk6DZ8W=J`fKicVj_ylYD_;o^GkUVV`kXv()vFiM<3p^YlUT zyq*969oMD&O6a?O2B3t0VArtw$v(Gb)$iMV^y(iaqNQb!{X==Tmrb5y@QSlt_(uHjN`H5e@?IC zu;6y-hy$SMnI|7mD89qe=eusn3y_{7FKG72cSTEoUcJHo@$~Pgf8A5hhi?XP&+lby zkYcFwF;C^h+=@31`>ufcFB+_a0}p(`yn>~L2l&2ej{k>lYdP`1@xA{@@cT@gT1mkD z96mNr@_WdJ!hnC$ChKt+hHnAC01r_1VqSAjo{;tEb$#Gb*F}2(ae&|NfzyBvP(H(f ze`u!fcrL0}xqYkkiVH_v(Ba1t2eb+IbMgVgwZWnT+VPV4koJ$3`7nHd+!+US0QXTk zfMf6q52*ev+>g+s9A8-8PFMK-1^Q~d`@mLpM#sKTONOnlEV_h!W2<%g*e~*AkQ)Dv z{Ux;JD?V7z-zr`>LXXH6%twPaI=HPI{ZMjSWM{LU&*1^Z8{{3%^Lf2Uoxjtb^a6N? z##!gmpI3Zf$^YZGY6#@R~og9lqpk z2L}98Ca5{^FMmfIeJ88e`{-%vX84giu~UGCFUhps63;(Rk z5%!D|7rcFyG+ced$6&zHHov zSIFy6Cf|3_%ZH5Tj&Od04s^%(&1c{l9bL?pEl>aAtle#amwl~c>gW@KPJ79o-({Q( zbbTxR(bQ6pBX2+V@B#DLr(w_S)f%gVuxGwtc>1uHd_kN~-5-m*iwDUqbnqm2L|fL zPRIv9Uy}%5aa|i8ynEJ(7XBG;nQSjQt#`WHZ8I>ye;XnO|2Nq0Xg$A?d@=*i3HT@f z7tsM9b~~L7>V)7P9fuBpE;ghC_@2VE|H~TJC0pT{*O9HMhbO2vINoIr0qX`|&uiZ*CVl@yzSfbvVtBJK_)V`xD#;c2j-Q3G;6}8~KFank~|) zE9QFmU7vYl;mhzl5|7rKyz_tSVc$j^I@`{`Iga0~Vf~Irv~X z=K5uyZ5d0y9_u;@@BJnG?T9PljD0SMGng*|{=?@h3`BTp2RLf|&YdX}4U_%AIv*u| z-|WL*wE#}wg@z$tPQ9is+?82Yx9DWzznY^zkL#)lpWJ5?$=lKYP!BiFXJZ>BD0e9CT}hG(DkEdFtr{LJx16+u?wh zPa^p}+Cz-F7Y5{6*8*`qZK{O_=gm3u#2)*{;s@~mm^8;gJWw#ZRQPYt*tdRYhrm(! zfWawgf&|NY49six$^%q7K>MeH_x)4#>0!&;r_*MAwME4)tfCj+-SLA=oggUwOGCXhxTsQoYyYoGPw?_{!o?iCgf83+ccQ?={ zQ)UVEw`*G84*a7Z(Ah~}c@Kv!z+aI+3w@p=xc7IZJHYqdli|T0w$JT%<}mct&!6x* zX^ByCoE+jGvgFttccOFgp*d#R<+*tj?sq!W*T8?9{3ibY{?n)ERd5e&-46Ht-8NyP zyC2X6qq*$%WYN|4Bk!64ozYu-vle!UJot~tR^yI!JE55ZeL|h#AWP`$nUB&HaL;-@ z*@~0j2hYMkW#U>qOb(>$?E!UiejGZSe#g31zO377Y5ddw(~kH-$A9uK%xAd$75iE8 z8QUk++-Lc3#Ot!ee_OIV?;`ok{ziSv;)`mXAoyd0M54dxZvOLw<$4bOrvxSmJoDU| z1J@h3BXRr5$$W0``^=xCP8JyVJ@61&x3k|5;DPPSW)A;e%&3c!zobopKIMFu`*0#$ zI9D9y_({!QwB*mlFJ9}Dj;KfIctqX>%kyJBpm2kH0cT;*0py#|1?-zJ&527`=8yHq z`~iO7JL(4AXVk^WD3W1XR(7jD3andX%4SpeE@^c4e+Y!Bqh){xR_0d(26Zk-R05e=F@k^Y8{$?Je>KYUB9e#f~0awHYlp7}S-~Mz8p5TEtf5`PS z?}7N7>z$BJe9i;2(}a8gv|`|aOTtyGa7~;Bu2F|3U?=d3j`jDIEsGlOyVPvbw|Xgl zFr&UJ{V@N2HWB_k!x~n(fJ~vj=&>{ACHM>4?@sn)u=-M9z7ke$kcWtE#V7E|?6 z{HIy{#fT129AU_>Wy%NNjl2$Tptl*vFX!lO9zXiq-PJmD4qPsu(a*rK=975zJkP5a zu_wxRfP4G`NAYg0Rx7~$VLfC2TJRreu$BKu<`|CdYkrsVe=Q!g@&NxGeMw&MF5%xI zfOpI?z%zP#0Qao-xGvmdyAeO{#C0sqOo7UF4-{)ayg^8?mp>^S;l@aNRYEXz6bcZ_%Cj|_f~IQ<}^e-UQu34JjO zh{1m0KO^rn^Iy2nn(vMZ+4r?hFIITA@I;41miZ#wRKI7W?%%>8Io1Cgjhg%|I$)NA zH|A}!u3tj`ZKEOF_lGB(A9$b4mJ!^a@_m8%N5R_Q<=^>*aId;$&U(bIH(SWoQsQ;+ zFzdFSN*~u>dg+V<_dj62LRp5rQ) zY8m-MDikZ|1IPU_q+WEN$S0Pbb;`E3827~YwR$~u`1@svo__2e8&{sVKlsOtqts#* zKiNOH$I7?4KiDDVjfsT^*3knAc~0JE4D+8gjIf8&PZ9i23WOo?57SX65gtHiqlc&$ z@*mv~`Ax_5cf=?33;c=1Oinx?yvq_7s&5EB@LsmL_8>J^v3x*epBLiSrCwiSd|=rp zE){=#&_y_y=kpPy2QEa9{{qLjt0V9Zu8W#%i4K*;>lopFMnjNrKbds9vBLlJ<2j8J ziYqD}BJSuC7(98s^B#(v9uP|vbPPM;t9#IG9q^sn*Y40S$+*D!o# zwvmAc;j8#1X|-DXC$cuh){40k|7nxFQ2Za}&e}KR=xJ z;sNS)&v}3kOwj$fouvWyT5nzczd2uy%%ga}>L=w`{mP!dUowA4ejjh=1Gw+qCXY=# z;bQ!Aq+chF&$k1(*Lpx6+oBLJ{6mNJ@D<+iyz^l{6aFc~ za=u==eOCGX5q-AI?*VUfPhEnq&vLFu&)>pp@MDGh1;RH0_oPLdjQ<<(p%MOR3+C8f z?eIQFzKnEQ279m`X}>1i91PK`=!t56D!kZTmNkd}Ri4@%$3y&5FW{Gjvq)d^8UrAq zlGtTpw#U+D2!rm-EP=Z_ie%aqz!Lp7a&x>R3gLvTsG;2ir(dSs9*^@&=F*t_sJY~~;OkRMAAh~xXe9Lc)YY$A;h(q){F5&pfcLMO zj8oxWx6d5Kf8wyHEcnCzk1S1jJ-Ner>@$lFplmR-;2zk{0ybk{f&U|8W^2jAa70~b zoKiG4%`nAT48AJk%p&!mE1d>wLAGea~l>hId!g9tF`WK`&;;}H~p>f1^uYr ziwEQ{v8(7b@J}86bZp3%mwcWHj=medrf!Khm|t+3DBt%M{WIkIkO8dg<5`bq zM&91<4hb{@`ky|7iLOUHv!74^w@ zT&v5v0p&X{+-D8^33fbY9D{4z&reetMdi-+l0i=8Za!F>-<3#f#R2Mz$(x)W+(+;gZf?b|NAs(PTXoLH7 zgFez3*L_udZ<${Joq==viRvG+^ktRsCHt{*j9o4}-JJKa{=rmyK>JapADZ38M90*d zUPc$t?@AyKFYtNrLi~VuG39mQ3HXY*Vfn0I!@>hF7Oyj3xQN6ROJFJd*T7GZ?znbs z1pYsrF}}e6rwsd!{nUI4?$4P|!<7y{o<4r)ASU$nW(agcoqs+bR`?%GnKuspaa)-z zb=uS%q4((%GvJ*(82Hcc81`pNIOedHA0S7pTvC?H-aREM)12OXJt!>%lNHvVaz)|1g`+nr^*?TY1aOdv%+k^vu z6c2#=RCZ3-mD3M1osSv`Isx6WV(5!Ixi(l0=m^q>-y`gV_JRv-TRk}*Npm;;LZ?oRG?DV_Ny7-_uoiBCV zXZ>sJC)`H8pMBBLG4vat>s&&;;XwhfV2_G~{h^Z&!Ff%;hyJU&1mmM7oiQospb_pN z3`hSA_bbh*qgQz<`s+^S{grq<|5W`Wk@-5LeaDvhI_ShKm;bN9995q$`V{|979u$$>yWQy+ z>h?2qCUys1-Z$j+D9f09SL^XN8jOF{@8N$7?nk8u|MJ)J4-EG#Vchh&5b&>ZU)__3 z?(=%Uk0A@vDBLSPco6vOvP{5#h1Unk1M)33_rTxthl=g9WFTsU}O34d6Q zoB#IR?Hr4~tLOL3y)lhN5&Zyv)E#+p>JNSC4d{F$XFNys8G!!+{YK_?WLe+pec>K|;&Pq`s{XlM zNuNGH?v+?@KWTG+_JP4E_h;YviRy%hAx`LnqTdl74e*kuV9LLTq)W%1=goYmv1ffW z{@w@rhUo7<@8JRT#LQo{=zyXJA6%vEw!wY6+Fd^V4j#SAW3A>JkndDI;VNY#^&8)q z^8odGc*5!Ziuc4LU3fs2zW9axM0UC=%XFNICxBhWzwg4|#HXK<=s%74dmiJ4{Qa!m zUYEa*tREGacSHU&HO$9R|AOBR`1$3?U$@r@15WMr{5tVXG^~SxJ|D)f63vS*LHqUy z;F%(RRVa@S4`@BY1RX%%&z@|twP|v2e=<08#$rnZLk`}-@5CS3D*qSp{~1Cqq3;$s z-LMbMeQ=PuhxtR^Pkzq92h^RwH8j2y{u$mg;otKk%jxvZ@59%~+!^@4-y=^I$>;Gk zv#5L?LWd*p-z#L%3*_};pZ#Bo*!O+v#ieY;=UA56eJR2Nxa|ye06$D-hWb6z@M~s2 z*&Q=)wetJ)@5rAK&PvDblef6WxZP*CvVN8){%8pQ$MU-l-KmW?6sOKe=mqlEv{U^s z630Hcon;2x4_4D!{=huY`z?NdrIx1tfqlR*FZ}~|&v{=9Sn9|Vf6v{UjmnATcsgaB zKP>NS=j z-7XCdt|R=XJhTb24hhee!aM8Sty=gsB`~n?tziKi`FF=c;`z`Fz2*mDiT|cL zhMtz#!GuNz;a+}FmURr4;C~<5;=JM^GIiB+KBQ~r;nDwJH#h|U%#(iJM_BQ|gn)k6 zQzs;lhX;m@8o0Dqm4~z7x`yKuKa!U$b)V2({mSCcWaq@|y5IC+a$n(%8TS$X(Bp?k zK3VTDLkZiYpeze5B)ND3fuCSU=t^*eX89@-gK7;}N%Y)zXKz#|8kh+W*Ka?kDaO{_#6K z;a_=@_&?1fV0T;iFYsfL--A=>fcxNm62QHOpd)cT!}_V`n6M4M?(f3;;NSNNTe|_g z*Bhg!*qvUncu*bJYBk}XpSi*R_c>AUze8D}Z}4A=uhFx+EW^3#I4&tvGH&;;4g1EU zXB*%*;vcZ7{1tjv_-SK>#y@fQ@QX$M#68fuKjujeUr?u^{#DhB!2^%|6n{DFFn~19 z73U_5^8(^dhU$lhAJxZ;`^WAxeUUx@Po8o#ukb&asD8K0_L=l6yBqWu)fm^RgUfOJFXG-Y6rwK{^&3>^`F}#K9vt=DEeD+)=mB{rWL@AP+E@&fgX8i)gLx-$?mo zaIg8+vc#A5_$WMDVS}sid-IsO!G!zzD1CsQdqn;Y$8X?Q=;;(5P`p0L!8`0m{m>4~ z3j1YX-`ZeZEap3~4#C901KfV*Kf!?dffu1Q^gdUN+zQk~%W~e7oy@w;h^2w85x~Em zWB3dHBj?9(Q{52$WL`2n(LQBg0C)htB#)wfP}^+>o}p1MyViYHpd0^EM--ouALqWw z&v2h_Alp}D3v_?vb<%n(W)D3900KO+zQJ?9;pjUo9K7&};!%!?8DKa2cpTlSw+AGi73U&kG^Jh(sAJS*_c<67p-YtedGj@MUc@Nv)a&+GPj z1`rZ-0LzBd4gLK*$9__nqS0Xf29|iPpVRjb6>edO)>KKKXyzL!i)(?~K!5CNnWpA(IA$D| zjML*R<36BI#{kk}aYs|}0RFWT9-9Z~vbKGafPdEa0LRetdcblU%lN=QpuZ0r9!y{S zfieGAcrb_P!xR5Nve080{yxW6{{M-2vfkM^HBbEGjuO)3!%lIu(jSy}B0MnAI7^62 z&|%WIhv)!GCi;*XNLrp6YWJ3N-Y2#pVijpRzi2QNN!y$^*-N8))Ab@_#H0R>l7-EI<(+ zx#L>D|GoQtc%=UL@O$@r(|fS=zmJc)Bzn!`@CZLcUVwUDdjjswaFZ8uIvhCf1$aLo z9$h}S#V7~=E)WO7f55#PkEQpC1Hr%6Pt3{Jpwr3!ldmm{YJD`^3iTW25AqYy|NX39 z<9mrmCX?`p`I4Q^La)Qeiu1Uup76+wr=t!-4BD#4g+`Pn%bGXTCVPU-5ip{plZba4-Fx zF!O(eHO%*8e(*eDeh>Y9qZ~fKEv#7je((nkN4<}9Lt()`@x;<$%Vn$S=m&I;dGpMp z?-dXsglO;9qfy1OK?|I(XR!r$@5lJNW^4a-{K5QYb~AK31Mk_$SXg zc3AoAfK_~8o`lD%KO`UaBzdCvz=Gp3MCQRixLWZ~;)6DNBVy^xti>lr%NUvXBs^hx z0`bHX(wj5)B!7b18Ry_%JfqK*-{*TCgM0D7km1|0!~vu=+QL8gi@qPfAIFSiEYk?q zgiG4Yh-2Mu_5IigUuwLf6aOF2cr7?@jaT9$@E>kaU!g8e-+=lm!F#98{e%zXR)v4o zXCp5Xz*>A8s)*l&DYzX!KI=l7gnmH$JI*Anng-yCrh>mpF5jC>y-*VXrux0r(eW8x6_ z1U=R6k|*@6o78GK^%LPxJ=aZ~-_w1itwsHWyVL`{S6sz@XWUQLO~Y^OQ8z+)B&=6L zxZF?Zk7^LF8rCtHQ#s;#SQl~m%)kTH{M6leqs(e6j_0r>-;={1^xYJO=adl-8uHaV z&r`RP>_i5H*t$@=z_U@m^{Sa9C+dY^ub*DfBeNz{+{|!N!&n6N<4JYwPw~GMFDyCsJK)9#`gK?8FEP)6cxeVMcFc`pv1}RD_fxK) z`o8?JRlZ;OG@c*Z9@GQl7g^T-3;tP0%d@UFby4!w&;z(P==?0j|2_uqs~$WOHm^kV zxz_Va{v|#}-kb=x(xbw$?gRLLVjTMGU&52F@=5;^pL7@S0JfUfP~o2we-hw{tgpYr zy`uxn6W;X}_(yNdW_-_($Gq-|d>4yZ8~iiw$KV5h#yE)Jup_=i?|0rDk6ne+{z&7r zR-pH}&I$XZ+FkAd{Z8P2w?SYK7_X#F&;fWN3JJnLwA~E+{h~`>xbW}zLI0kRpWyTM z+19n;_&({xK)k^|(W}A<^B<(2k6Y(A;ZJwW{Ty3x&wU(O{6BK1<{st8$dkhU-W@BS zFFqhWZu}#MO^+OUTx)s~=Ma2WP^yTB6 z`_iI*mB16IC8PI21O7Qb81)MdIB%Y7PG6F2Jnn34oE7frdn7N&H`a3o$;V} zO8j=nT_^$;nYk1XKu_>1c@^?z-1ps+`DhWbe0&+`hax09^PlZoIe)Klnee=(0F7Y n;hV-7aDAP}zDS literal 0 HcmV?d00001 diff --git a/Templates/Empty/game/art/environment/FogMod_light.dds b/Templates/Empty/game/art/environment/FogMod_light.dds new file mode 100644 index 0000000000000000000000000000000000000000..d726795fa1de24d57dc54259c7c57f984e3d6704 GIT binary patch literal 131200 zcmbrn&yFKUwx{VgFu(}ZrXRs)RswS&%p0(Q`vxNRfA!+C?@HP(%X_dDJSx6X@((1XPzokn?@V%t(*ORMnlC0Hj|YbNg@SckI|7 zcmCr){_pkwRaMph{2xB6sx$uKf9Zez1FUK!lj73v**W1g7hlfXTvstgIo9*S{aM*O$)w?Bs)lGM~0=w(_ z-Lmid>c;TRp$3U}#Ohs_^D}&UZaklx5BVR=XG}f7Yl+IAuC_J_4dy1lsG zY&Ig}b7p+1^&r0guwIMnHSGtjpE#l&qV=insgLcrt8NeT`MkcbZqKQ(NdBAZz815* z@9W#@c0Qj@Bi{M>c}05{{E0jMx~{u6{x;!xkrQsHPwJ-=RyV0$)y;mtUz(5d5D)u4 z)jus4ZB@Uk-mTV$M{zuU@uk@ECmQd$ z9x5-F>veTgC;cSeXmoZqc~`%?y1F_SN8{BS@TZFOBGA|GCO^>~JLTPO{~^hT!{n#> zr+&AeiwDL_oPwnOiEe5G;h7lq0UbwWhH;az7wun>Es-E=Yj;PrSsf@i^h_!|6& zuhq?Zy@FSv&#%zm?(p-)g*d%9KkuIK{_%Xs{~h|I9hg&Y2QN1nd+bKyHTn#{@A`fz zt{}8%cV#>i&#=*^zq)z|{zv< z73l-p7J0z`J>`WR=nW@X^iwLo@V(f9B%7c5E3Q`KvG~e4hxC-5aoHr9kW}72mqY&D zHRek_pdNRvh?-7^Ja14qQ9k-$yWqWg z5&Q??efJi+jwCGrjec-%Glq z3f>=TmzXng}wbop++1uX|Pn~L}=h5zgN&vm3TJk{%jrmx^X^@r~renRH`dbN`0#2+VQ zzCsQ?0Qb9HUxC)Ay6w8QA)nysvK2Ag!OsKZrK}$1=i`j>xMN;7es^F#5TkzdOUc*j z8U75Te+j?d=X{+fl&2UFk#3ly7uPR$ZL{sL17z4He3b9jSHzA7nt!narlTJp#Do0^ zt}wXZ<>Ir?K2sl}o}m4qEWgyV%KC`-VF}4Nw3R6NX+A3!s& zlvgXt12F^Zgo*$915bEwhrxT?(U|usX5Phozk%=A1OB?q{7V(2~Xa~!IV@!Dy-x@CS}p#Q8J&T*^)sd(V|H0;NSXtDml&SiY~ zM1Gyw5q`adw~;UP5qs<9c(7pdxqgK9*M4rrv>v*iP7nAC@*967cs`vM-WN3d;cNUg z`F{xBU#~3hrn|Pkz{>*@jYzTh1!-PUzm&yMM(B9dyP{7;zeJ{8^pAA?F8tH5mxhzR zyT(2^&SJ>PKeasVS>T-X>g`qXFGeGHi(FMB`~i84o?-{o8|D4W`84x*k#SUb9rl2X zjQ2o8#refN>;dcHlCCj6%Y~)Lx`O#W)(QCe-P@@5fd31o4S31=K)!F^E?)<4<$s&` zAN)psVh@}zB7R2oRo*-N&yoBuzyJRG2NAtE1K+Yf0Bt`O;~oCkIE{_?LamH|CS{js1q?_lF;FW_j>|X(aUckqKYEMf{A~hXW3c zJdXZBrn$lQPh)xBX)ku#5A#ExJDVjoO%rJP`mX-3qTvHPQ^p&LdH(?gm;X%r!FTLH z`2EJ0-ve9>A$OTK1aO$J-gz1 z!TpA^Zg`50gY~JB9l#&hUSk&Qhww|b*)Av>PdvZK$Ui!Ge|6>l(f0bq3+y;(|2poN z$qjh9{Fd=eO&tTp^&i|MA8%+lb+?-?E;n+K%+l^qT?y-|AoMSG3W-l%Mr6U)yWG74=jWaSKLZ*pY(Rxp(+^ z!T*b|zy7*rd|2*>T@JtUI9}TKFFs>jj{ax#4|+y7qDR#Y(%Xfwcp4VX?Cg2qnEVAkJtIUsJ>;QI+jH*%} z(w|S6cd{KYKgRz-yuxr*x3&9*^z&2x6aP3qksq@8cbWHz|BqMM4*Xo~LBjdGgYU~% z*i(?{BzS+G=KX8T{n!rt19kxYI_~>xpY>;oosMx! zb|3vZ`Ty!$_=)nKKlvZ$1n4b#8oWnu!XIc`@<(j}iYPJlcah+<5&1F!>27 zemozWe*XjI$$JdT7UY=X$aiJOsk&!B5kDh%&-qAq7kq<CNYG_%USbEzb)w zJ%>zwCH%_g*gx#UbN-ics2LCTcN70(T=cioc%9Y<-O(S2{lnnD(;a*}&imh|{om{G z>x%vV8+JhdEZc!i#$*>Zj2FB`-`$@=Z`3#TNBBpCk6-_D;ro_&?z>WtBk%3!-;=l4 ziNkL_b|L(am3Tf+e5*K^fG6nvNPKHMkYZgRk38?`-fo@e&*b@mb%3~JgCKZ+cnJGJ z_hVPKZ}$v*M>^Lf^6EgpGOM2WZ#^joh;r{TatshM!}fAZyIB5(Jz#yDaXSB3>M0Mc zFZ;IXfeaUTjX%?hyO%GgMQ@TmQ9pPe^~p$h@cTJ-@Xz(N81au-?7@luJcsAoyCwd* z7aeo_mpVAYbWe(3nCYJg3r{{&A?5p#j8t~Qh)qS1$2;X+gb#qt$+3><^@Sc6< zCgJN*!ZZE%d+juMyI6ejMV<4RfGnGX_vWLV@|z5CoZ~M{PkX|jaGWdC|HAnq{3cy1 zx-SxZXWz5BKk;4v^2C4nzU;GKfZYw*ba_3H&~e%v9`(!MUz|7SA2=^x&oi=rI929+ z$@RYW-SuDcD-ymM%3}&fKI#kf4}YBC%y%(8@6h{Z^jaQcU&i8*--u7-lpcR%xx}8F z;^lDC?e_9qc{_N{G1tNPK%jO~{;c7%xX13uBWfM~GyS_DJk9H22RQdk_Mplb^KImJ z=LE7gmA!c@O#ujjhfi{S{A=OMdqV>k=1gzSTb97uiXFXT1; zgD5|$ci2BRvVI{BVeK0sGDPqV_lS7w0uBl&YH)K0wZa`tT!}4j%Ov9}oD8 zV5C3s{yKOj|Jfi3{*!T_=Q_-{??2GKyU=gu?}7t9Lx{rX!h6!)S*}R;g#Bo&H|bf| zfF*s(k9Zy33cn*f*8Abl!Y|yp%nCZuw z{1)+ia!a;HzVkfzn~{7cNB+A%YdZZQ(fP6hW1khgIR854dHliPzvrVo5BsVeU>SKK z20!7s<;rv5h>8E}P2qpRD%*ov{&SF_J#gF^=c64!`nZmP3y4X3zq z!gi4`od;Nt!guF!+^i$7GhfHu^_F@6;Y!SWy)d-cZgR-EZoZIfjUE^MB5J z_Ag`KaSN~LuDxixS`d52yx9gn62^L4IsEC!FZj-Bp`zC5QM)LVZ~89!(&Qf%0faNKe8Qw=V_jR z|M)w<$$R%t<)`U_mzE1J8E))A;cdZf=RRq72Wpq|yifc)jtd?{{Rfe2F~M)#%EEIo z`~{J23BG#%AaAc8IVT259?0`o!Dq%#gvTQgo-V>3knK30=X~tmN#gyLNHf+MdvX2c zmtTUnW5#=u`L0YpTG4%ck!d0L9r-2x zF9;7iApavjkYxb&SNp;FX6ApDG5GJeFuvi>g6<puN`jH<9Tp?40#CzW%ysdqukONxtf*5l6O zwnJOXqgnK8clnP~VJup4|jrlDw?8V&!3wFa->LgvT-8iTe5=`;6{8C_7#v^VqJ1R}5Fb1)X=`pLQVD z-6RVcwS|wL;D3HzRV7_u%-7^|+$VIMD?c|;|1>W@w-3K3n~(kObN7eEY0gJKBBe{~ z4(9>-GwfhTJgTQZ7xx8E{Ktb}{0P6cU&Zhv7>6hao|EliXa@@a>4rFGGhX6APj`~*DzW&g<^Sp5}YUJIS8Ertq*6-fw~b`f=4K z?7-Z0A>&*zQHs{*BfQOge}>w9vJHJW|8I$}BoDuRPk|kJ6Mi6w|MH;B@X6EAr?yLW zLH?T$`f{y(5sS=q#%YN!YWL+i{#x+gervN{8*Vz0?e^fmvV3-2ws-Be$cXS$rWAxo4QdcL_JEVYqfpnR`fKpSkzwdjr?Fb1~0z|0(>y zIi}{}Y4sZc)#qg{1xqPt$)jjur;MY_B zQy=(#_3*e6*G_bx>m2#Zb**zT-P>b7o`RL}U&n!a{NyA@IP+tqv)=FyyK(gx$oZl1 z3@@0T!!zPNJZ!?h*M2B_Z&hTwAo4L^<&tl~C4PnBBwG&f$bYuSV*YphK3*3jJ5j-V zmOI$J8h=0S2S)zb0rm;b^`xqzwA841n=lt~v|D(Lj`{D%$Y?rts~x_ju6*c+I{RdPMki8?xyV&ogc^`d&!z zUwKXfd2jUwcu9XN$9yL0SBXS-p1)+9D)FCwYZDI_&-h=liimS`(Qy;ybB>?*&p~&x z1M*B$4vQ7LC?B0&E%)Dgy6aH5>+~;L|C$j$P6ORv5 z`Yqa7&~Wv0s~rgJE;$wpdx6;yQ~wc<>FmsS_MhSK=t@lYvAgRBCYb7`i}lzLIfjh) zSb$iUMfyDMj=$%7;?ng`@SgEuet&#S>wd?fgo|;Hk>?Q(x~|Op51!**ujM<(Ys`c2 zog}glRf6fG}%sM6e0Uu-i=O*-`W*v`u_2Qh3W|4mIy__4a5&uy=pc&Z?Jmo)T z3A>NJ@b{eeTlkv7KZ(4*72*4gh40Ij{2cdf*M|Sm=6r_8`eA4XE?M@V|0n)4U&EIZ z|EVVDYHh58wFk^A;Rm3uXY#yaArX8Zy_Wa#Yb5d-td(F*vBrSh+tOvrbDm&c2i;R!!MaO;PIYY;JKmAbM zdf!hy6VET?v*QnM!4Ip1lsDkL&z0#;{D1D*Vld@7?lAY^^!J%yNe_;dtykjzRrvM! zzFzqC6?~ok!h8yvU*d1#^N06^$Mg9_KDLRMJ;f<=&7g_+>t)yr?P*Cr#$t`!Dtfrtmz)Px#-J zM{&OI`ajtLacBpq*6;Ga#FOWCZ<5(BK^|jn#ogWAf?C~RMzG)2@tk1kdBlzP1*Wkd z6nX?t_4Bt+c<+0e@*KZ3^LdD8qcP#(H@5Pgar-D<8|nA^g!u0z|C1lU{2%@Rd}ykn z9q>F&c~1T1J?n?Lh+V}GfWNG_<-PqT-xvQJGWX{bI?l%99&g*i(*^r(q<_Z$Hs*1| ztA+LeB){#^UL>A}9l-v}cgq{%nC?f;^K#-l{VV^!%V>W;u?Mh}_bP+8;qP?tmi08_ zA-^AD9|d~HcwqkKJ|{T%&b`#^7wme&z4s=vJdbep8PAk$|Lt|By$HLZEbqxS^dZ`T zUWgUEk9$=jj)=Tv{#{r7>}UsEpQZ4_K4Z2Ihu}Zigq?`|;5);>{$AIO$6wSH{2229 zo-iNBJ>7ebMMlaI58lte`TAV`TffZTjr>(FMdqvNB=fgm=5aia`*?Z2FT4*#(Q~{% zh+J#D5-msEY!X`k2;cX;=zfXis6L|SSfcx%b=ZMLo6vrl$nPA!{Lb*GcjCY6_FI+} zjp+W9Nb!4lOSW_} z|EwSC$zpN$*RJp~a2@kI(|GVX=I0atyQ+C@c;~t^kYN^~SA?@X3ZC08!ov^fK&G1y z>NoWp&i`dSa9O<~e)0qGbM*)MI3Hm7YJBd`%#$5po>Eq?3(9}hEn|}rKOpYqE!rcW zu^ZNl@P8kk_)axe^4|I7H2+sWX*a5OoXeruRpNP|`FDeJdE1?z%h$_qJtqf!9}{GK zMf*zsWOQ7-KXw|Q)A;p$O2^~9>DkU?+`8*u2@ub--LPNez59yQt>^v;5ARpr?~CyP zJGR%yf$ST1ccGubZ`&b{3S$oub}hL`8ynD{Z@n{G7XKnec)9KO3>w#vMRKRm%; zWvqt$-%!uO;|aX89h1!OS;53()(eTxCH@f6|M@Wf&*VFlwQKSnbG#FGyTd&AkA7Kh zW4Yim?+YAgcMadi(Vlc~KpAm4p?!IMGB_7V_JU%=4y1K|#rXm6oo4Tu@J3?>2v%i*pmO0=OWjXvK z_BsFQhZFCQ{BIX&{<7fU9~yql|IGV| zxLI#zrsupn5XFyh`l;ZM_hcXQKh@eK-jfdg`<{oWUT1vBc&Z2UI{u_~fqrQ+%Kzvm z{e@f1ddO6xuaO-u_{=(qbIX|jd-f;NJT0$BBgf(Bj|FeK4&Kuq;veU8=fi9V_9y;N zvL7+;EOuh1L_}s!8rW+tA{t94^l4g!87mEi{8(9dr#pl}TtDFau6j2{u5R?tFQ)PodmQU>>sff4 z#_3Sr_c-!Chkqn@c^nhEpT{_(h!s44&jL+6^4@v+w(DFkiQKd1UT)%j!8&-(Iw0xw z5|+k1_c3ZWYUX)T`u7py|JH^FKbG>H_Q$!texowoapZrp1Du;>dr-sg3mlt|c%1oP zcwL_V9+r4Vgy$RXrO0oV8Nqk=SrXr`g7^4K@0A&rwK(M;ll$4N^P_0JpW}>ndhd4< z?d5%TkYeB~4ChZin@*W!MK6*qyf&N&j8j3Z0&;p!SoD1fc}+TSlKq6j`-0@d1Zq6@ zjTzl|ud72p;CHM3=-(sreWp2j)OM6oJ;(NL+g&|;GZ&{nKRk%%yjPp!kx$I~!FTWf zDmz~e!!4(!T;Pa2PwRk$Kf`lm?xzGE9^^aGM;VXjf*;G+2O>7vE{GR6%;MMXZ{+YJ z!hh#8?Eu?{XQJ(v=d7=T?+L|g?%`H9wd;HQefaLWI3e-6sBZ->m!DN2{KR2lywxj_d;@_a29J>oI(}RO$L|8! z5ZOAul*4#NKN}C3@r`iwr0ZUM`Q?|Q?R|<(+ueQ4dzL!`z9-&Rq0hlr^fmF;ddgp> z&G~cQ8_sdvMzp_5`hvlG>|r4LpTYb2NBaP$b-**e2aof7ZGD5E^D^)A9#6!7xJvl3 z{V3sy?}hhiU-0qGI{0os`h0+`vhzDA|6gS+@>!M_Gx{sVlmDDo+;Sc;PwyE!4Dy~^ zKY<^5_7jljM69s0=k)8-adO-kPv+U`wr0G;k0^G;_qN8SFZnhQv1Yv8w=|!Z{B_+H zeq!fAg7+PKcKiy;Z@(86NVqu9h#gGdZ}}MCa~{WgT>Bq}ytluyJQCeMX^(cGjqfeB z@ZbC!5O?c8aVsG90}3|S0nf!+cx--cvI_$&;Y~c3_lNm(YJ9Q{e`1KHS57#ecF6Q| z@czpYgoo#tfmPx=6F#!$S6;JS9N#N=vwks>&xeP@RUr8lO#ENN^Wc5h1?OACt$)TZ zz?=E5N9NvDpLlwB~s*gzGQxoMX06@l}0yy&m%(c)#D>Ekx$GPx7B-SJ(&AEh9b$Rzv>tJi;-@ zmCx1R$-U?I4-X<{?S+VSIQsuX-fpO0pl0VOSa~AgC@#sek^FjY2 z-Xr^iWj?R_bbrbGR1eYmeFAUCnDg0v_ybKw>k<7l!w&S+k9M#xnD7@WSRVY9tU-*FMc zp9V?BeVT2?JfFko6rQk6@iy|D_jZ0L_CcBZ&ECi9v~wLuHTfP?;40gX*dK7+(;oR> z{DC&~SpLsRSa|;ljPtRN?Lgtb>jdme;{9g(N&au}zqJdSb<6r2e=qjoSPtojYZo@% zwevUkHRL-JmUuuruvuBaN8r&ed>4cG-0~e!@L#g@k=f5#Q)$S_j38OT(b?n za{omBv0jRGJImXVGWY)EW#(J#k@%FjvaQV;i>UpvQhx|Mt-5>J9)kXOCOzW>q zhaVT^c)p_SzISs!qaUswMUF{c1TJ4!BGY@Ho}1sy`Yf!M=k&CL`997Q;Jf{i>RS`; zFwsi(6`0pSrU#xge`ln6VF&C_dO7TOMLcEW4>59o0)jOCLO#-_PkyGS2x?(7nJwxGxV_YU5tz9 z{wnDDMFd7qc+UbtS$8aj%kRYd$&LOQb{?GT_kp|?b_hffYy7t>*83GmHMHNy{T5q26{X=E?PyNN;_dYx_=b$2LGZrx;5l?+UzHPF; zTR-I``X(>f{#{Z|@L7a*XY!AEdMa+-JU)upk0luI?}_GPIOPVPaeIQle#gb|%_fES z$9VhiB0di4FdfNPDSpZia~S1YZ~4vl+5RMcj^iShaP?amy^rz?H=mAh@nZVbOZ#t8 zCwtoG`vsKu!En~sF)rAFw#x0V=oe^$Hu*N<(o<7%)NGQ+i7*FFlu3hGN_YqH@ z@E&_0-?a;|?{`*s{`*+cC%)JD{cFo{KJLiJ^P(*>?JN5R+5zS#EaAWopw9ay?7-uL zhu1DIzw3tjo9AE(Fhe+N(XFTyaAObUdejR-*Gz2meVA2CrlOSC;>x zeCNDim3R*ykliP%;k)`9JVp@{K0J!J3qOkXw`e{h?&xxocn+^8!SgKtR_E~Q_*^?c z`Pu^vlt?!Oru#X?PRRfC{x^?O(e)Zsc)dT)>P@!IMEIzH#8$OruqP{=! z?EdkvelbB0*UQ9z%t6?JvF#>YdnfMtMI&-AbSXm1eZu4)w8STW&dm}sOp)%KiQ9No zJKf*IkXR4Zp@P4t4fkvkkBJALSF6cUo)v!Iu9Dw>l&b{=l$Tl@q_Pd9Ev3SB4om=yXw!!=Q*C=4^R0SFO^@=au2`pK5X#+nIE8m z8}Q%tLmT{epCI`I@ca7V4g2*V`|#cixR!tNoq3~m9@j1ezZtj0bH6(V-#7a6%>O^e zeVP2-u}|@SJgRP3=aVr!zj^e#Z)LuRm(ZN|Il-$(cnC58laQ|h5o2EW{j|jUMLXj; z!JCBaOC@VoJ;v`|5hn}@LqdRWKn;lA|CnoU6<^E^S$*bet_ZT zQ_y*zWx+~>hM`xu(GS&qefu)}fWn(P=3n*H{f@w^wC{aBJ;Z#b9ZJv7<2(#{haNAX z??hfRjN+VyuE=|s3E3x&=j-LG?O&_^V*Mgs_z5-hz3=T%K7aL*$IN5!b#jzvg_q)r zdfe*YiCoLv1oGe$c;vbH^Zef}7r%pMR-fWO`%UxV{BJyE?w^F;9Uh#MB81k z@Kavf@0s85*!drR-L+JPu1@!xg)HQQ~$d;4PxpA&YMk^VT3vo65Fl<%fLVc~nh<9yHgNAUhS_yF&D zU1Tl)V;>5h`TlARI_gd7~_3Fio;0YZRNQa9ovlgOuNn}5}7u^?7f7Nr*>IITs)NYHGFA^<1 z&j>9RHRXRxLJ?RJFTOW4Im!`Ec{R_uCwxB(|5h|U^|&QC+kqZF5q_NSliecSrtZ_e z-g6}VM|OegMZ3ib^FH^gzE1Q1!Q4!ZLu4sXZn6T?mu7$ z=IGVwzCz7C$AkXReTBau(k$#E`ztH}2(_Jy>Ynkmy?H+F?hNO=_r$Zi%=2il+b-!z5q35$QQ4F7|BXG`LD z>AoBOMU(6RYP--Lkgewi*S2rlZDXA)djA(*drolCDO(==Z?JEo@lU)z*?}?pL&e{( z*l$mB z*atNJQ~uxGDLe1Ue~#Ca$l#FXLk$V*O%w~Jwx^bbNK(*-d*_|#J@XiMK(giEgM04gCWB2K<7I%9Nk>12VSYuh>QT@BUNpAAW4%x#u|@ z_^b5m27g`0h`=c0w_uu|z&<@kZ}<8Id=H9y?I$~Mdw0ir z5E-7lq<%;K=lb3@sovz5zAwdg(#yi{0meGX^q9%`9*us?M82~wkyk(<_G~$|(Z`g<&&;(gcw+`Ns? zaVK{2-ulS>c=BHT6<18~qVH>h_yLPHA@Aw4zlVDe-$B70cAbCC zw9kB4-C(})@8Li77g6`Iy!-ymn>S*X32&UIGv5QhRmQCt#e7b^zg=_TSDdp^DKcNqEq8&REwX*IP;dR+i9p(2BisH8y!w^jJ-LtjBF+!D z-pi8j+*`Cgd=Il<8gBfI_{;eFRMh<32Nk0oPkAptB0TtReR+;~2b){2=>|qSkPEsG zRCuDk`yNvxe<)wH9wO#0_|&pcFuvz4^1ykI`rJqRLAqyAXTFL|15sbgQ#QYX_LujE zXS8QSxR~aD#u0)Y;}LFp+wFH`#p;W|#P2i@ALr*uuJ`QU(z(to+X36>dzzx(L9$&@ zZngtQ-VfSMwQ~FCVOOC0aUBr$@9~>&s1N6;e~kGaEe-zv@sEG~YxS3keObr7JMtgB z3jXi-psRdB%?JB?W!~L(mHc>O53qB{+MVb8Z<8JPrpo&>@|pJqgV*>=3E_|7*zu;N zT>BHbt{UAmQjeg2@SkaKne?hU z%Lp$gysynV(D@w&9`c`VID^O9iAp{@enVtA*G%A%^?r`%mEp1e_W2CG1VW$Fy*A}O z^p$0I*agp*s)*-%DwXl~Nlx~`e4fh_;?v%Z=(tTXzbs#SAcoxnT_4S;uWB}f=jdB2 znhw1eS7M*!d+x0m&b+zbiI0>c@_d~65Pa#GSqx`A7k0q)ALYimqNx8#{Z9J>M9B4B zlzP|H&-N8GJjn?|<|41-hFZQU@d}oF#L>9$e-z&fI6wbG@ynmv0qzrGzi>nYu~+im za);>eP=$=1mhf4QS8#&tIzYQ;dg>AONBryET`%J2PYJ!hyNmk(_dhef%1ra&2dGaK z_Ta0j-)T6_w+sh-Ed1N@{?%v%FT-vaE?>5H|JtdadERH;UY?&&J8U@Fc@7ZYWgNs~ zpD*kH{9d?Dh~Iw_Ex*Oz55JxAY@hXub2m``SlRufvQH55`x4H10le3LbiOygZCAmo zewTQE{QZOAKklgW{xkj;zu$d*6dC?6H;?K2NPI9u-m9OY`Gdh%_2tc*$A_XPBFi?` z1;pU5pu9fEfe_bg_Q{TXpT+$i#yQp%r|?NiFaOzipNRa;)MMu9Ksv;5Xq7S6rF@SX zzk+zybB4ag`XcmwM?Cf2@7as;L8M(EbdGS-X&*L$@_!xapykN&zWw%F%lAF}k!U-E zpD0{l@HFv$7X0sn|DHqe+`v-%ft zwfZgix5QyUzUQ+^f%rQwtjCM>o9|Pq|!^3o1cs%>JCeDisHqUro;+alAuE-6% z$Nw&NCj9^Z#sx~tr~ho9{!s8=p4a!T1N{C#75j`8yw@I!&|m&*Re66yKYrhD;TQe1 zkdF)Or%1O1j(MP5jRLb>XnzmMXVjQqN{62j>ATL~wNB-@|Im8>_xb(csn6~2F6yIy z&<*6}YvuPmFX4gQ+wYj)9d{AGW+_r^Aknc8Y5w1W)9Kfz_uG$l0N$HE%hfIS>iO%i zBXcsSk;!g_o`fG?wt6W-fjDPH2g^-7pE)?Xe}gfonrigtM(8GLV-@%vrwdnq%#@jG5DM@NpA{<=sy z{H4IK^VXwACK~-x-yi;v{R!ujoaoHw& z0H*nQh$99N`RE@oOc7sudrBAfN7;Tp`VbS^_);I%KK-r$R~_@Jh#g@hch4UCs3Z> z-4rojx%{(ZJ*aowzZY%ir*Ovt((pBofM|Il>!z`2dp?Ct4(I&S{vlo8izPqx-g;5Z zc0#)sfv0wHJqUZ8WcU!@;dLCXXTb`4ZherC==W-TPVr}^S8qkOuh-((_#n@n2k!s$ zr#Elpm+`^CEiS`@JIfH`!;YLw_ddll-jFJGv!!#WDqXrre91PX+JOK3eb^ ze_@7SFujoXZ{oeN#@~-3UK9IK=r{R)=#|YE`M3{eKdJ9e5dG4RAe{Ag=07}8HoeIF zn9jGCqmlYzda%^{m|v_@$e(`LSPs<+p0f-HeMEkr^l{C1w_Lvu^qG3{b6Bx%|60EW z`QhO(7l{`9_j_o{rCsCKuU;ubvuG#P%Ge~NAAR0%E-mi%FE2!YPs;k0eqb!`l;uIR z3q3fsuZnh7wAXdCuOjNbrz?4RwN=leem^|Br>cU{Y|&8Wf${#1=lm`Cusn_UO?yn| zzCY>p+gbNx0OdJ)!1rgu4pbfGp>N^$vt1GhUpObMyx-YBt8Z^Ti5B~Pj!Sps|F%nV z*nzfV{Hpn%|8LJr6xqw%#E7T+4+> zw7ob@@!jv4s|U7My`o;)nIj)u-zk%A+{4?k-u;ir+6nc=bkEWF9CJK~nBB;aYOIQ0 zip~e3^&5uIEkEmT1L7{kewN|N+BXr{1jhF_n&3?iFVBPL{9a7hk3EjwuwBt!>IZ7y zy!R6J2{nm!VpcC456_dus3&$>J*to&AHNCy8=maIeqP1=&k9g! zG`>6&=ku50|2I_7@qGEmIRB%)u6sV_zwPesl0DplzIQJF_8$(xE9$|z`^0~K7bf-r z@E2l#!1To)w8W!2;m@Ncs~n!O&*AzJE%UeU5w#IN<39M$MS06NpCS65g7P@(OHAyL zvgH^2`*uM7bIt+(Bb}%oz;opjR{5SR|3ZO@=g8Wy6IfKpt{b7nfJ5|wVhC3!_^~bAH0uxk&g4YIBza8_A2tzeuZ9UKNP$F zThU9A;^xh>`h~n%{U%}_kM(XszpZE3g;akW?TPtJqd%$dGW5M-0Q-jo7C;PtJIlM=3>hCmuaqlSl>0}>L z{;A!lbAPM{_4(t=ufAfGqutdJyUZKHInV9x%JV#rI&V|3eA)yC&thI*GGOx6e$2RQ z2fVkwh6BHC?;7LvZI0g}R}iB zQ2(6&HI4tO46eym5|SgzwVVSKy~Fr&Y4 zr>5e=_ka46?U=JKrA)FD@BfC(^wj3|XS{2}Pdsct=@BU49v;*b4 z>1E!R=ZW_s;~ui;xxT!|EHB}Egb#WD@co-Vxj&ElHxk(ns6@xx^}KdL+%SR2WAA$u zo{Qe=6n#Hv7;Zlr-}($N#uYh!k6LuR#T;L}P<9?0>fPPl-9p)W&_n&Oo<;UK$C8l_ zb4z_r{6h@=qdLJ$)+%*#{b&^c8=Xe4-rqa85pn*R)H1(;uSiMZ;sg z1R_#i#(_Swjtu`ct*4ScQ~&5E+rjkmok%?ohBIu-!E%?GppWIczQv#hBn-2hhZKVkQ(kh{Co?&{wCG}Z^VybrwM_g_HQP4eXq z11z#_anZ_0_H#OT=zYX(@KJuY*zt-pcH3>JO<%`_^ex2<=-;iJ5>qj&`-)xPC zJ_KS9683q&V0b^M&Gut!I-Zjc3fO_`4k8kW@}KcO@}7LL z14q8ccTwTJ&&Lz&!P#r=!7P4%6~5n$cp&;6vl-!@o5*|ZrHK2u7Jo$lM56!8EYJ79 zhwwPYX^561zkAH6=@8Mg6LL>!G$S2)SM)FD9sSDC5Bg&QKZ1`L4G;f5@O-XbagQbJ z0MUO{W|U@{t~bdJFf1$O;kl@?{hqNAUB^D}kLR-eLw><`?$bp-qwaq&J#-1X zv&Z41e&&xqB#x~wh&mGU_T6p&G zIKOhejv3%y4Sb(tAG)R^8Rz{?*aLY^^{@vsc&a^Ufk@!zO0Vxe&_k; z^Z&{3pTK+cekqa+oCV5v|I{zKDf9j5_w65kJp_Lb zzy4gldowk@{a$dA<${(I>ke>C#nfllV}>v8(tdT(TYheg{qB+<{3c%7KTrDXIHI?~ zn;Lyay&BQ>KF0}qt-q<>>raS4!C2qhZgRQh_`4A!ACY~%D#d>YWWuYFnck1(M1DDc z(i8NdOU$bsnie%GoIT!PO z13bH~m`LOs;TutZ0^W1qre4T@Zuag(?8scc+yA0=Q6$~Ef#*~+>;Mq__Z(HeV@~#B zO7}6&d61vaE#G@K;)n}cV&(lrkw5U-cGC{-8Ss1KAjkEeSG04@4`qYLeLu!&R0Y53 zAN&C28h+E<#fkSdc49nw&VOa=I|DZ${0%wb`{it42edQBb3MXy^z$n2`iC)k5@Phg@x_LGROKCn*Z9SyOny8ku=uD$>6XBI}E3PJcCv_zx%jCBNN%8t3yYPmX@7=?;fq+)um5JcNIb z-*ADRX5NGJn|jN8ZD1WddxGpsDO+#y2`n<>8SP6rUWyIVk4XP8&K3QV>_XyE73VlP z|5Z)@5HI+oA7}nWR!=6!=d%c>{qTPkc3@0I`=jE*T*Bl0AM1R!H=}>ntGv%)zej%@ zaX!g1(A%f0sXla-a9UT3$>RGyq^wt5@?InLMjltR({$jG|Ks3$b^9mo<0d^(A3j?5-;78< ziFu!S4D|lt1U@sbPUUsfH{%T67n$vm-{AMrPEft2@i7Bo2mEd%&lwlj%dI~)-@#r`pRAuv#!*J{H9x*DNj&!fMEwNATP7}1e^M;>SD5ZA_0@U}G1ZUtEa|J~ zd@nM*ro4sY+0a0dY{sYY^?Bia#k!%2{x11VD0gE$6Teo}E7IF<*5_lKMY#Q*_9sFf zBi}DKju-0z*0rMj9pU}%<&1uym~-U=^E>6p^X$i0loN8nD%V39|0Dgr;DQX5_4Ddn zzZ2Hfr{7mRrySbD{-;QP(9h@cp~W8(U-H+%6X!j7VGM(i78^Mh^3 zeSCk5@F#X)!v{FvaeSv=-ntDb`o6dLp7^4AD>@!STr9?8W%phGZ+OkLcwU}UpAPf# z*d}{a>h}rcJwWoeUE{#+$a~fm%bIp;f9wzFJ(BlyN1NyU{xttjLO&+(mTZ>tpXP6r zp}+Tcj(oRYsz2A6@68coeVF_K{DsDR0>dAI=X27{$cN^hk$>oCM$1#q*f8FS{{_*X zf&Qrvp?`k^Q~XIzmvFaNkLZW7h#HVS^iRD@^H0*(!t)ePL*jWxpjQT+FYlM~I^Bzz zCUhM_I3FSpT0FGZ&B)GwUJhrEpONZ&E0KRnMQTt8+ZT92CWrxCQld_QW~bUgt7G1Mj8c-B*N{sW^PpF)md!XBuH@tlQ7iMNISzMs(!`0qM`@SH#I{q{Zf zV2kYffcw8}+;m4fknMf+!`YeR|M}-HzMS0V^Ig^hBwr%S)6oRJgFAQ#pEoh@(;vZC z@j3rzdH(--WG>M)VdQ*6J@P zFR2&#>=Jr^iusCxs|dHBGfoq-KOm3!OPJR6&R5FhGtSs%Ea3@VHxN%hLj3jD!!M%k z7cs+UlU%Ntz7qoe=sY@!?*j!=kk9qAMg0ws_7?j&%5pVI;c0&7C0Ok(c2K)lML&bL zX}y!|-!OlQF`wXh!StN(%UB=&>ik^vT&@DY!5_ChcXxab1Y~&?^S=F7-FCq-j=kXfT=ct$T5iNK^%wm;uflV2xkz@vb9dyZulU)>c&6uG0*KurziswQ63Tz| zM)bV81D)SG>>R~?Tfu+7(`LVX`6cT+_>Vh&m3hCMB;E(2hME8HB<6eeIRfQn%=7z< zMLx9g{Qdh9Ui~@w1tnd=->@HHUzYIv2L0_Pr1L$TVfi!{nVRx9VZ3dZ$Tngi?Lj|6 z50GbBPiFGm^C9oO1e#9yQ)qg_i++jY$X9*-cwY0l{$icVMgNi>5`KTczf5|~e2jj# z!RzXN`Ca0%^{q&+-4QJ};XL>~{pBjo>CoS);}hk8ET@;sRA-d20Ub}nKSIj=D7;E` zo&B%6#J~MzIz5;l_f3NT>V^Hy^2>Sp_VA1Qk*S`dEQpR_7%Rzce92V zyyd&O+VS>?{J!QFt?~84E0Ntcc-&qen83Fp>sjR$dMw&*k!(Qr7sm;kECUfvaKuw@ zaz2IsS1mO*JmGY@MdtM!&jGbFE89u(Wp(TOJnWCsKiIKY2ZWw8?k`^Oow%$Y@~|hq z{EYQBs2!OlKc4U=f4>Jiz`!U+`S93%f+9cV{n2muWk$TTKA7CZJRIdXFHPcim{0Yf zrcAi%W%!*UJSe=K-QyR~(C`Z=_xF%?s9#mWbZ^1$=$YPno8KlQ-4)*#7?Hqmzw4#` zeG&50c`E6l`iLI$CoUX#^^(5|8R!kSo#OI`-xBZVzXt!DcWG7Fxr~jd-ihWTa=tbO z<2*;q;s1Xz?rnY|KkCE#-?W2j2ha4AYx=`->5rowz`qW^96)ozHVSk65R6=YA~xJn?zvJL}7W-jN;Uy^vweatQP=>-dV5&ayu@SJ0|ueX6|{*Qaa$d22P z|Im0<$#dS5aoj(P{lH1|--&lcp51tEsU6VYlegAyh|aU}-1|P_u7CeQw0(gnNZ>c< z2jT8xnBNaPpHUCvS#Gie^$o{EAydriR3G#Kdxf07Ly_!2@Y(h~<-O-=GxYZ1T)x}? zl<)h-^I3$mFHd;OxQo5*L9eYxLjCXw`bRwi6aTZ{pY_t`@}7F309k*7=jb(hS;hKA zL|x-K5dJ&nYD2%L^q~7aj)V4IjC}tNR=MB)y;$e|6gR`}l~I}rZA=QGOoch{BoflhkncUkMC56g-A!QbR4&obXbUzYIYcVzh9 z$Nv7!2l^}c&bZ9rJKa5<-Ed!sKM{9-Cw_&$JmI_ln2+9a{XLWID>ZRVSM5e8AAo1iq@Abs}171T~DNnK6K8OBIPG`GJ-(xpY`_ONi5&TEL zunV>K$&l-~hal3tX$3wWI1fbs;v5S6ij6MxtfTlU;}@Zq=vkHfm-tc6@1TB}&-;w< zHQCAkZ#e(DPU#;r!fU?IO2ew?XTJ0MtUi`Q`D4QI3!V3Eulz4|fPP@UlCKs2kk^Ih z%ea5UJRk8-nEjs<|1lu;pYu>4`H1WH{c}6e8{VgK=zr^x{VD3_y?{Y~U$d_Gi1*3Q zPxC!m;dih2-R@odz75$TJCFCs+xWek7PP(o?xo*@5yKvUzQ@~MHgCzN1^v$UIAhz8 z57Tql0sR_f^KbA6M&o1$)|}7FXZ?!6@E@G_S09wQU!C_CvfUuP;iHU{cc!d*(F*n> z-o&{8)t$<7-?I=Y9=|_$&-%ZU|EzZs|GO^n&T(h@WL|Y2lzXg>d%xO<&i9kd!wEbl z{W#+yBhL*_=Yu20bB63bjA;K2d0#b)rSgu2mb|z7#HIWPF%vQGKj7C{zWo>Vq2Q-j z&Ls_>g+DBRH=EUak!mkR`=^2LkNN%)>yoMUY8KRkcImGhFV~;>W6pDUKj%Jzh@lms zGxHnrfqLDehs2}bj{ds&C?BvZgvNbH^pSITz?N@rw@hG@bj&&V~S!>ht(dd7nUzsjQU*B*JO!{O;o?~?kk9@5c z_Acs|-t$K0Iz{l4&mBFPf73aE_AhvOk6FCH8t6BSviSMS9_pS%LuN?c4 zVOPRF(ck4cxb`{GBA)#~KX;CE?(f3;nCGE0d|_oQV0`1S>KND5U?_O8DFeCp>FD{oq5Z=J^UHq;#Fm2%bhWfSFGk#Z#d$6GG zFub7qI?C=J1UA9*%kSW0o8x@~ujLuxNB%Rc*sT`7V)S_j-#!1>M!W5wvJVjJ9sA3D zflVD4`#$hYgopf1KV4UiAAL;>DrQ;p;%x@wt9~3oXazN5p|ocH&h{QnvI}R*7W*8n z_Z5zTXnCbQ1H5gy=!%^7FG1$h`H+W+|H1o};n5HBl?{`VT*95dxsO+Pe44+z2E*0e zC4LWaZa<{>bM(2h9Rrl_q1XKniT~06^z-iJJbu@nZAbZ%`7i4Ci!pD;?_R?5qrZ=P za4z4`2Y9}H%Qi>lJfCFddkj|M{p(lq-ttd4dpi#Ki5+ONJqY`d;?JzlD#E!~UF?PY zb{rb&Cl2|~J)&d>K zR!~nc@py>*Te8i35yfXO8djysHaD}H&(0N=wU-8~&;dStLvD}OD zFrodK{ewXI4P?LUg=oEph#jVWr}=(|13|xD_xsFy9R9>}_ubO(S+?*B^TRp*fbXoY z694D$zKQu8e2bd6zJH53hPV0wPkG+(7~UHGI%Acwgv<9xH@j=LjwA9V^TCgzew)wT zA5^w^me0MZN0D{;rpfgzs6D{_$N$%UB|Cr{7k1#w7c1@qZJqCf|IWMg7qagIRl(zm zarHUl$b4_VGw%F}b8rHB|8{~OUY(6sHT>bV-CyL7@e0=P+x-HOWn$O???=pXyn@LN zr1{_W$=@a;(?j9?SiU2-vzz9f>t=CGzA5}@9|+fe@ID|2t@eR9a;3cA!wK~wyWs!b zUB9QD%wycUN1v^i$ox}y-rGOU6A5F#-t_whCu9!E^Lc zG#ow6<5#_7Un%SW!9DRWf1sZW-#>-(`E<(Ygk2C(6ZZk$ZAd4Y{{XG`7#SS!{<%L8 zdf+|rqz|@}YSFIXKfi-s-}v6Y?JV~Z=5ymC`}d5Wq`!U8J`BQ}#iCcHndlq$Z*08cEUU*&wgb@){QBIUXxABz^Okn6SM&$=&vk*wGJAwR#eRVO zMRxRSLdHk=F(cuO`~2c-^~8RW|IG6nk$czhVsdlwhlgKh#Df;_VnX`OYJ$8WBhhxq zGsMFzkoV}|sr#HF_C&t3?r#IRW;lv)$~$56j;~!dGx%?QC)7SDPo5z5C3s+Z9xsx; zDdi`7Rq7Y>A@!m^S?AO@j+5;--;C&I9kR%B27S{XQvXij3}?jWaXe4^dG;svmj34W zs1bP_{Kww!67TVEGw(mfF8ol^>Gy4(@qS*t>q1}ach$Rd4m8C0PFuDE73%@}y&&Uw zv;(+N+JjH}|2e$LcxF4J9rjbq%Od-X^i$79ZR!WsDa3ni`*Q!u%YXjoC;Oe9dL(Zd z&PK%Ve<>b*PJH*CfZyK$;=NU)cipxdV#JU4Tr29)@?6Az;@>9R^4-h3zT@1i=T9Eo z@z+K_ziQg!JPD6bga-M67qH|N{!lNr@H}`%d)vfI!r^E5`N7k*eC3+n802^K_yZ|_ zAGq7k1DS|<8g?QfdL44xBpmX8BL7YQmSXh_lqtvb$qpQNp`fLHerLmWIKCpZ9Pod8 z>38Y3gkuK4EqXF?eu4j=e~v!Id4L%9fblXP$IX3F$9?mL^D7Yh7W0JtFYmqADEd7* zk!|bgB=p1eu+Oyvgl`i6_5YGxNXXCZ%uQ#0^3!vV%+pxMQ=hRicKs7}VCL_UgdJeo z{Nm&XeA*6}&tgIUqPNzo;6#}X4(n~dTEDc?SZ=lPkC+{}y=APpIEve>bA@x0u%f?-u+p3!_u)1a^KD?Z#bvsE_SR?HjhU z&+P?%QIEVA08hQ|_MK=yi`pIe>-t;#>Z`BVkB6`PiB-amS~tjDh5r=@FGS~GafE__ zasDMXIsL1Q&hv@?yFEO(_PgLB?uGYvqko&iANT}&_3QBuGS6@%+r+h~7+dJQH&CF;+*0DR7Wsu%oEnDj}#@?1|uJ;Dzdy~z7Z`cdd-Redo|nEb*Qo3yXY zJRQI9OZCy0O8$mk_}!kN9?1J7@B4{*Kzr(=-b~VZBKV*7`^l#YJFwZj5ywPh-S)5x1@52rh-Y1-}UWop~A8JJvJB|F3Sg*z*sJgSh_A zaNFZN&#~vS%=fVSC#?UXdRPC{p!o9Kcp}5wiKpa4-r5h*^tO}F2`4-M;C!teKtJdQ^Og60&$H|JeW(ZQ%`N9j5f1-0KYNQ^#Q!(F_GI=}yCDMF4RIr`F*GfR9avc}%T4^}U?p%~LzTx-;6&gl~#d#O~Td_T4KU-eLUSvODU-(|oaO*4YiM|5gR$nZ}X!cPCr7Nlke$yibpTM%k3!h|2xhVioLIFpW`q@=FLW#>hHvp zo#Xxvdc!>YV+G$S4n2VP91vEqKi9|mHS(Z?-z<|Z0`dC?Jnty3NwU9V$@jCE|Has+ zhu^jzd5C_G2bukR&~gX7k9$D!zwdk2$qoHp*3$`l*0D|Yx8)zvGEc=x@K5x+C)pk> zh{yP>j^}v|{O|kstSe@5AK2$K>taTJt@@htSEk$cqV+7;AUjURGu-;$@zR;KU8vbM0MbnG;Bfo63+=1q|&GU=;W~lYx7;C)Mz69TFv=Kw zM-OA4AoP^@1O9KmllR(9F}_bTd4fBd1p6ZbFYQ|Ej8bvr<|vBq2GYxaG( zr`pPQWJUq0Yy4I??C27_)dTBMav0f0X5`5+d*yOKmI-Z zk9hFNeFyn81?8Xqx!BXr83<(lJAY5``_V_j@w3LnBOmVngNdiy@7e9(tKo;(4*)l_ zfnBj&o+p04oxSyUm>Tek?*@zU9Aq40{x{z?>amjdWgQUpvflJt+)HAAV7=wsl5L4` zd%aEV8{qjj$qyiZ{Dm%_S2wXP*mU6seEZ7r(w>R5<2RAw@gK@~YbQ4G95Wj@e!=`h zJnK<09}+$I5r|&kZfw*K*Yy+lxPJ3+C073rV{fqANRp*%IlV zY<;8Mf{kyu{#i8suRid)_%ivppLFlb^H%gaYX4k3`TqOp1MlPc@*Goe9hv^E>DYy$ zAGXeq!hfI7a(%9fZwck~&I^{^`0vJ@^Buak?>~NopUf-#7J1z*4|Y8~?^f);k^aEG zyWhd_cc{9)?U`N6fFe&cfd-S zX@y;G-RB?8Z|B*kJ0Sc|9IEJn(HvfSKFs@wle`w0$B}(+8#z2ZMy5~rZd@sR|GA*? zZ)NpV!IDlp*jH#T9EZyP=mGm#*>j%qe$DT$iOzeG=Zaoj^%AZ7yIZxSaw@&nYL z&d=yk5%=u0Uhka0sOu)z6IViCV26}x26m$1_rW<&R{0^iei3mewHxsxr|N<8^B+Xp zC$E2a&F{K{`ro24ER#E611eNPocpr(7Jx;K>TR4gYzt zDLkfl&NmG_AMAg@$Mj?Vzf4@zak2djD|Q=uNdtQNgY!x7tf#+;Yk_UIgs1X=b2&-p z0Y8HsVepb~#d;opU<-dhewH+d`X3<^Ct7_Mw7$#c4Ph7REBqg@=mX9xyh(aR*6ZeT zA78#Rff{&DH$)G_-zQx?OjoZS1 z`^EWi%lCcyx0~1nv0L84W_ZsZ{Kn42fA5)I*!A$c4d3tiZZtWuhtIx)rCo1(^bdBv z_5N)^>@DT(w(zCu0eL?mgUGaqzYher;Jop6PBc_D9C7!naN@{9%if%l*2fx$1} zT)7Dn}Z)h?7gWoFB&dmkQ z-gTh$75=mDFaO&jyH63Bf(K+g5;qjRPt>muaszl6H{0_hA4E_ejOfmWao!W45=SU1 z(fsm6eJ`SBv=_zC2J>Dy{QTjEb>(OLdE-Xe4`8~+AHWT{5C2#DMR2>%b-MATyhjha zF9F}TyK(fu=tNXKS)c9Ty8Z?6zryDM)d$b` z;~Vzp*r?}ev)+fFr61v^y|bW1>76SJ^LE|Kiyyb7q zeb6)f$Bj5O-Fe!)AuizG0h?bQWzNBx?m7K>UH!23{Ui`Kbzk*Gkk4O752W1G3$MXZ zX&?0%ckE+V4p{U6eh~emA3?v^Ui(G+*&od#+Es0cmadwk0v?d#s+2Y@Y@-;n^L zKfnbAR6Vd3@t@)k$PaleuSE5V2!!_^2p|mnPdep@wDV;v^4DFo7YklI6ZyG>o&0vZ zihP&r+LOoxg2nswWF-EP4TP@nA3q>^AgI6DRsKIm_tL2~D&_OnWqr_0&PsZhbS@Wt(X2}Tf8l%huS@wOsQ z4*o`X&2ta@AJBB#kAEP-TlB$xTl9eaRLY4y!M}L2KXye}6Mh`{fM3XdH$07AsCs~_ zgFZ-H+3To*lfr8hSmn3rBR7bUITwTe815VRU-?ct&DvY8`c+=ju4Uo*Xi|9|-ghV- z-m-VF6jI!?T%g>^w%ePzpON>a*(a+!<~iZ<8D>)4wuSe5>QO$&4HT_UWR^6Wiw-?;y$@1>NcrdD zjD>{!CV4+#mv*hz6p1%Uo2Wh!iNj5roBr(&tmnaUUtjGZGGRKdW1ry#Ji>mKIKYVV2VPC#ujPts-rKC{ zCz08A7LETTAM@e~GEs(dMD)~Fj9&}-eSk)L&YyVtHGHn}w4(Al*YyL?Pw$GKVt(Ae z_xT@ZsH- z|By~HyaTZ-rfZ*a9edPNJy7`_{*zz6!}IMn=|2Bc{wr@L$%mhSUm)L4zxnp-<_&V& z{x!$}FYl9o)}#OA^FXKjV?A)RzR9}KdD&z4^{1Q{^jqdj*Rj9HeBpRW;&=D=`v2N% z{Q>MWfBNmV>%e>Xj~-kqyKWrP$=@eV$9?LRw%#xQss2pa@g^VV;R`BTK0kB4koP{8 zc*_U=#g{LCCtlyV?$7#w?hP*Z4_1@-z4jHn*DvTUzPFv){jKYTHv4z-zO47#3*18d z@kjpKAM!c%4t$l@_(9<{6&!i8q-@c$e zF!zbv$2^cXk0?J^9Q+X*?XEal{TxJ*i%h?>A~*Q+P5k(R__Odb@hsCPynhDb*W`Qx z=i?X3+AVqP^O^s1DDO=lF!=~ng#SLr(RK7d%60rGpXZ65$$r@}|4|Rv^FIA8!q=Zg z<5QyVFM!b(@R)td)kr?uKLvR&FEaHM{kLgxN%X=1so8U14v*JdemW{uUlzo@r%KoEWpXny(c`#xgom;c^(#DC24wd2civojHQ zex%-CEnDIQ1K%I@faNrgdLep5p1RHtUul5Iba)>m&LK_+*I9>rl27|T=z)q9nCHQdtk1OuFUxyLeVs@BC6CAaiT;n@sGsiq@tB?b zCk{4~m-qMh%krPUfxmNP%p;$M$?!S7;(|DNOUer`Kp7uoOQCjI_c z4_sdtz3|&?HVf|=SCRGCNymI&F4YHJ;yW#f+Xx0z8xDm!uAHds_Rl&pq(VMSd%l{G2CpwSizwJ5F1Aa$Y z{xgn~k!ZdF=DADH?XW;l9^|5e` z9>8(+exB!G*D1H!|K{f7$B%yF$M2W_i<$ht;8YKOGI74;a#VOh z$`SAFM_4}CdCn)W&OjcmTn9|ww4L^U`ewxfcv|he=zXGoas%?1-yHZq=z$~t+pY4r zuKPFgQW-bxOiVk#5&wDA1LUXvvj#mhOeae?sr!v}ag51;3i?_RfExh~I4 zXM9b!zV<23Sl4Hs$?Lx{zmEBDe$(wPv8`x7A?H2J4T!nPx?o{`_#Z!|@PDZuFwR4| zejfH!-V?t#;y>ZL@ZNS0{yjXs@O?fJ`k#r$!$jM&x!7!QBRkRiDsBsI(Ho@yc>dw> zdPhFi8;AVeh4xCm=Q%;^=`J@HZTnU1KijIOUE%$G3o@_r{letuxhJ;Qe!xCCUY_d| ztABvrJ!75MF&;Tj3>H7Y_RCKmk9e^AJgh&%dps*J@occXzDFkh)D%9)etUgfR*fcyCQaNBLDgQmiYa)FZ?h5q32+>9s0oi-0tm0e^P!Oc;|jV zc+2}dUFG|<@OUlnEl+g+QFMITnqDzHXPpaA=af4!o^Scff&T+q?|OZYy^9`6J5F$* zOM6C{@A^;3@q6Wk^(%Xx7+#m}fPqPe=h*G=-hNgeB>kejV3yQ4URyEozK!dp4m-_s zh1c>nXg`jWX?MH1*kl~Va(xp$-XmMS>0(cQ)RTTh!93(vOyYPN%KFr-r<`~L z&AGIcubwNs_xtaqo|MZCLwUz&e+~76i4WOs{cthuL=Tkxc=pX1$4CCheybq|F^e%XAIKg{^{CwaoeOVdg|er5Aw|Gd7el9 z^F9sFRrw_v=TQ$V_QW}l^nvvk``<3XjpN(NSJcgs9@wD1(F+6b%Xli|SL_N_-qWCZ z-vd@1J%JyB9zZQezf^sK-X^|CJJSEyfAx?2XW6sp4t$6A*y;NGRSy>a>))A=Vpkh@ z{~AJz@VOCvuKw-j?Q8zT(PVN0UV0v>k%#oNi2D&9QB3>+?oV9r^!hq>Kku&<-Y5RY z_dlW+i{Dujp7X{XuD0##!Judf?l^55VsqzrjuD+g!{NwL9y5$UJ*qVWh3ep3(pS5LxspF>=7Ko;p2_;ax1{l(+DK5<9%!e~OAf&8ey z+^_%F!27;0{C8d}>u2?q_ZxVAO~=dkHP;L8(WjS9{F?#8|M&0T7d^m!-{mIpO_BA` z?S}ba`OFvmfd}~6UB2eIMf8(A&3bz-KUvVrf3!g(GL6Qd@8y!tbvj0DLGN>3%?odp z%Q^tW-8fffxF+V~y|&~>>wMQ9@|Ss?cCdhdod2f#-mrXUT~9l0zt@BCpZ8X>9=N~f zz1zzF7JhLX>jC@##_hoWBR#NW+~hyapLForc_Jbo`2&O8*L3WEuB!)1zW5{D7yqN) zFaIfaf?l|o(NNL&gZwY;rhS%E;(xo%;kk_W`CX9>&%NFk-0{4nf4Zb^li&KhPyfPk zZ6g=E*eBl#{lC#~I0NNd{C@PnT?2p6Lr?hc{FmRPuSL&4ikaV!nEeCO7Y|$a5qZz# zW%L01RjuXz<<+ZKwLbMx?6k=8W#skqAMT@v8sdn9eJ^}3Jhy+8*A>_hWIy*l@(uT)7a~Uwuze%{FO7$Z061J9u)8GQlJ-!3Q2pn; z&pPAKPWk`ajHmE?X5JGfyMF&A{?G*Ud3j%;^L?J(MwtSXaZ7@y44`~unR{LEh@YgR zuFgo$_-zjQVDn67-Ov^O`#k2~pPv^$qR5O3=K&~hPkmjjUzA^I7rfjs4m$#EBJZ0< zFZ=xRnrRB}H|ei}oXaMC;Jx+g&!OhFo0@NfY;_@9-&RwAgwD-*Kis3&KQPl1h{x1rW&vsMX8R+x=Rb)Qk&-XlM*1`B! zUo9W`kAKc}`TuVpwU6UBv)?F3{&OB)d+c*o#4jIbKkidxU;Zn~(a!T=jrpvv@Yr>{ zd=9cb#`Q;D)6U4i_ojo}f?M@gc>D>HkH>vkdB3js@JYUd9!R;zytkg8dibAn|I9P! zpL3_|V?+t&8*kw38ozz z^gIeI`uXH!6aK$`Ee`xfy{>(J^xBy`XS(b*@F?|@E}FgtOFH@{*WDjTzOx~JU*rjR z;J^O3_IE*hTz}gy^8Lk&v*G&!C*yaXyP4&@&pqv*dOnDCsr*$?LM;lzVA1&^P=yws256miarSM)4pf&4f>1cZa~6Dd2bI9 z{Zirp@FVl&k^k}I5B9(K0qP6<`PnSzZJAE4$1Cp(PL-)&)DG3_Kg;{n55^BU;yr4x z3$KYw25rB5pD?jN^lD4%5YKFizh-)}diJnV|= z9Qq;iig`i)^b7oFnG;^|oZ)|4@y~yLwUbAG`3IVv^L1VqmlzI_>UN^%JVf?&&nnN? zgPy3k2>PB-?7Qp#)_ICPaK7rtqA$+Z!}@m8IzI@g9P`}Yfe0VY;g`JFuG+$npLrhF z%dZ}6ukBRUE_Lv$rNN@l+xq-Wz!uqltcc%GK-SUxO@+w!4X zu^(Xi7xX~Z0a+hV@7ei}pW(mjfA-D8=V)xOD;eXl%KN*Lt)2*j3Jl)UVHvg~f8RUV_)xI-tdhEqL`I*Pb z*B|gX|J?^WzHhy@o^oIK?|fxmWnKrz%VT->kAK|Cr^h@P^f3b<31~(5sGM^5-CvJnI3%}6|$9e+( zv+kAmxZ(1+@O?N>G{_*2eb!PhG&z&^=?C#g+ufG&p&#(W?+fqkpGRJs-}JUcFO~j_ zJfx5KkNyCkxrsi=`osHi^vgPc`3C>UCNGT}jzpiox#{2XIkFeV<5>>g$$$F|p8H+N zq6c^pbPUgy5TFVFEsyV5Kz#0xei5CYJ?$_a+gm?>N65KQ-kYIbj&=U`;GS_Ue*b;N z!vDI@XgiMizrY_+KP*hA-MJ1Lw?nqRiS3)Az~K9pdKj%G|DWgq{VI4(di;LuKIfv3 zc+F+6|6=(AHj&};#rPNXd4oO}Q80M$`=NiUyshcy54&9FSjt1v@vlYf&RKKSXTA(r zc>i1Y&$%4zfpI|j+-Lp_`3k-t?%#RccA9@c^l#(|?btByGJoMq>>7A-@?GXDZYB1A zL;LwXYv$qZwrBlZ=4a)<{($wzFL1gHydTi}m^Rqq7XMX0Uw+;bR}dFj$J?$h@*_Hr z)7}ATm+^miRN`4+X+KP6;+g&cU*s9>`7C0lbloWLy)G_qZ%aK?{G@(5prbw751uOR{tTA=eV&hH zc)lOv`dmKy{a*X2sR+=Ig;(NsEAKbN4NE@1>!LjLEBT`j#GZ6`68>xN8hAt4Kk+#H ze%I596Uuws_t;k+?>o{H_Z1n2Cw#{o%0uEeyP$SY{_lQDJ@E0nuBYCi{)*8%qzC2w zw>Wb0`VOSLyq6|Y+=s}-zeVUD{`-8n{%dJ}>@50doA$X5cyNCogufM=>IaA{&*b&6 z?tkLD8ix~spSzMi z5hsMx*ZJ9s#<@*DUA)?9|G6AJz*7dHN&JSt{q6M+=Hok0)i1xkqn@187YTn` zFaCS@ae0m3SNXp%-RC?;+BZTzv>SP7_ZP6!KS+L`2ij4tXt^K?w~u@tzU!ALqZYv4 z`wsosT=npK!M^?@|9x)dE$chcxQV>i-xJe5kYUUEKlLKBte&;Bi+IDZ4*8rONF3k( zvmX0JKdyr}DF>Nh&UeJD$8=yB#4qW%ev}@4amId`<(R&y{5$dk4t!MaH}Hz;!n@Jg zI=muXp1(cA??)@(?|1PNSPvI@LVv(>+aYfGPjf@N?C0dCU(59)V+qI z!1|2KiuVv&#NF76_Jg>n$nTCsrdyNm`~`fwK|d|&z$5>}`{e)n{7)~yH%{}Q?L`mF zemm%aYX6t<|LyNV56FMAKjFROE}v^U_M-5;rFzp{7Kmh9ivEs*^NQw#w_vs3AGQO} zo2yOEi7UhFA%EUmCO>`*_cJj>_m{;7H)vBX`_k$Q4nkQD*?0ZrhW7m@{<8SUpRURx z?l%0+{EZ$U8@w<1YkK&9+Y|U@e!hIUe>m0yKBnnE{E7E^hxrSi?{To;BjZgxEx76` z-z(48@|gL}dNsH&{yc$0WZIi`zy;%_|8M&b{C<3%($42{Py6k!ij>!L|1PrqVE-13 zUs(Ik?>cd=d+6tnrC(>*5%Z_K3z&|3*Mo~!o&zB6!1EXWcR_x)I{Lu;rW5v3jFcPwGVovh z*U+9V4=xTeZboGGfpQM9`u(nF$~lI7&u5(P5#h&NVK#qiZpK#&76fDX&iJ(h|3#LQ z@dIe~x&8p#UD#>u|77&Yd-<>2$KMODaiqnc>35O+&B^igw(BO&CoVJZo?`Rw^USB_ z>d1ccV9vAnXLWvhy?jrs%s*wswuNe)ll=XHManojFFe>QVI>h~L`ZaKG7*5h~gh4&NmA@v;M4$!9R zfwmz1<@KR_+k4!;(S+~m(GJ2lNe7Ou5ADixkskahxaIvu+KqY7^Oy1&SL4l$1M-i} zRq``FV`c0^`gc`vTk!q%xSunQ@ZM?KgDe-9;%t$9zIslW_#l7sKKqZLaaXhiexd#n z{mLKxn0`G%cwO|UU;M}Ix#eRt3Utl#q- z4LsH#@_wK5fW3CV`u*3~FY>wmEm+dokB?u#{oy})BFH(YtXn+K?7D^5A=jeuD*4aj z;FrLE{@{CkzbE^FOXL#&8xa2c`=W)%ZTQW(HSPX^_qJP^c^Uifx$=39=b7GeaATM^ zU&744pNW$&AN50(9p?e%vF#pkNEg))VxH>=x5=OR&3y%%E7q+^XTGkmOP3<^gn3xx z=z(ol(+4cqi5tOB=JA8LpnWa#%5zI1_Kb7r@SgRv^9{9h)-fN*_R{=z(?7$n>UH&r z`SA00NA)AKk7YS5tZKWl|3mu=_QFD=09V9Xg(XXD9KJdNzPY0QPHBQul8Mh;Q?>wO2-?IBH-`~0plTXkn`oa1( zea0hvy}N(C_ImUpxT<`oT<^1d{P>OgvBdA;JqFKl<-3&Vkz7CMk7GSzySxv5KMDV_ z>&JZOai93_zQ5bRZ`ygyeNXhjkpAxNqdp+to$1#sAVtcnSk5oKKyjJw^U8a=>rB-D zuKXX3;XmQGtOJ@h_P^+btMQv3c}~Zh?bz^!;@8fX)WdkM_eCF^yf}Yd<`4Cg&SOSD z`25ODU*=7@Z^-v0G#_qB$?yHhTk6mKA4)qWzQ@6QU8-N5-}O4#lMlcBgx~c_eA4?? z5Gk1FalZ0Gy6MS}9@tt=5FVk=MiY3`<-U$|^F2rTCyxrUewXL;PeIa^egB>Dx4#CY z9`@zR@2N3gLe&l^~#rqtzTeSVtVh0%i@f()U_xgj-*EkUV66J!sUjM&* zuc1HizQltz$fFVc0sm=l)&azE&=0Hw7W5DOZ9U=|?9%W0S&RdJ`U9L>`9n*;@_Jd` z3zDxLa{5936L6>BIZrwIgJ^&D@aPUhDEj>3f`JpSu}`9(uM>gbaNhxO>$qO|AHHXN z(Pu&5m)~$*KjyRiM*%c9tRMIjZMO*U9iPfu5cB=JvgaX0!g-1J)7~KdWcbZzAPUbh zke2hlmWP|z9?B)1T8rH$jv4-=7c1|%Z+f+R_!&Q7OdRmTwh3nZ!~Ze`@tmuCZ+$+HZeNP@(}d@7 z9z6sDS0zP^Xw5J@z@adcq8c)X>1 zKH<51!@ZuFk7<+hcMEPXf5(G}ER*yf7#H;NW4-8~ug0cxY;_|4b$`j9{TlDnPit=E ze~I7u{)hEZ`~i*cAIrn_A$>s0S@S3Q+@k)4*!tigj~5i=J@M7o@?O0&@PEL{`$ffX z8UF+SS&qz_t3KyqMf?QjZ|}H84_Lo4_G!y?{7CgdnLh){e?I>{ImqN=n3Lc8z3(YD z`L3t)aY;a4nb5#FxG|K4WaC~x@_UH4c& z`VIb<^2+o1T+ToBg1me{A9M#^T8-&`7pV`wGf(jI_4oTr+~eQJXLznP4xCu} zYrw~T+ipw$(#{9^~D@{S>&%NmUtVsSM9}xa;Z*Ona1GZm3V1;3p|Frun z(0IU3)c=w99qsREH{FFFB>%VJx%HUNG>;yb6#WptsgwU)aDC--!Mnn5`G5A}kILzn zepAvbujF<1i{HXW|KQ2Bb{4cg`NnjJp0NMSZ#v`4cORn1k%?LJbIFR_FLh7 z`uSh;JT-l|F0RSfUykATj{4cRBV%&~&zA+gPkF$}q{tn9e@!P|HGbp1o#=bAJjEeD zp9y2#ir&-j$#bCxj*#c}yC)eh@iz7L@bAyBdghR&* zsQhNW^!SO+oABLniQZ`_|MYHeKl%P4?F?>%d5-~0j$!F3pLO8FhWSLX!#>x2_f$r| zlkZMkzT?mFsayGOIimVOWS=DahsI4e^t0s`M1K~0ub#8r(R0QNJ9q_M>F4gy zFFu$3BFaO|Krr>ezqRKDj`(jq^5_~~Ht=PTAF+J@oy+$<_oKI5_p>fI=|s$iejMLn zn=J}17-!-N`f=cbf+C+5yr;o^j~?L9c5wYcp2sgN{2qAz3EEDdOFfWv81l}2H_-A9 zc%xkW0m2s9r||jZKd(z3{QZIN1Il~LL544UCkS42o>yR;srIkVn-+ig`TXfGGjC$& zQ4^ood#|T`j6dflv(ImPoDV|1elIT2FJtO4e(U`6c?WFL4&s-=$MoU)G44O`{K@yz z(Ek6@eLT1I<^4#WQ@^bhUoqiC)(10rtll2@{9nc9=8^ZTm-voqe~FoQ{Svz#c~#^+ zA4=#iu`B5x^b8Y^d6aoR;6~Z=Kj3@U^|}7x%=C5jrWS$M-lpm|Gc-ExM27K@0YGq zK_+E(1&7CitRUOE2y$<*g}#24~iQ4Am8yX9{{t|+^;+E|HTXVhHQEA3Yv0`_o*H@=D+8B)dRRG zvFEmH{2$}!4a-4Hc|Kp?!*BBi&*AZ=+V|vZl#?H1b!Pp2t-s&D=bRfdxBo2u=>-$@ zoqj*_FIeFUMDU{zRLUONV!9OxR>fb+Odd!XuZI7)X=SndZ3>-$zS=s7O6IR zg=+F%sr!r8t3F~@eEOYN;tQ4secI;V=LbDun80+aeMHBfc}Kr*eNOwI-??h&_tIZr z9Upn&xO)45=DQ|N;C)>FFlHVZ-=}=fX+Ow&^Rvn+_8*>;FZ`$Z@ZNc6oXGXhv-h!B z5UK|rUj2F2!hfo{llN=yFZ@4KKTynCobaC>o)TZp`kQ6JnX>iw)&748H(b}>6M+N& zy`N%JE@pP*_1}*3A!mF*vcY42AAY8v?(f9Ev_9)scKk){p2&Fc`}J7*ay{#qf&ZkJ zdizKIa||cz{SiNm?D*R*=Uu@kyytr)xt{Lz)_-C3c;8vc(QLPq2@z$ngsJJ|@1j_+|M&y$Fmdp3D#FbLO4bAN7LIZ9exU27MupCq*`1Fr<_3YX2emulOw4miAw{?iOdW z{e%6(Iz8`m;O8;k=}*sD=e&pdbGf8E{3|}YyKU0%`U|E1Nw;4;XCbCM`>VDeAlurj?(HT#kpH7e zvG=UM(VOn?5l4W3Y@6LT@37Aw3cqLEZ~Ez?AoKRXd(#mQvgN2YMYL&CujB8R{XG5j zzv8IK<6pT?^!|#2oe$rk$B+GO^Dfu_Uh$FtJ>z0I;eExd``xE+Zc4jE%;y?B=KnVH z3_oy~Z_ba@Q_*=&|Es4DzrSn0XWR(ni@vAWJmdLu*?g4yzG8T<{$>_&9T<=W0# zo&{1a{St&0L8~!cVEnE)H%Htc`Zn|6487*K{`7BWXCmV|qMx!(qu&^((%<`!+w^;> zuY4!U{Lx>*W4j^mx9F2cJ)oc6!+W}Gw>jqjL_N^izE-@w-EPGh9VPGYIe#nftyk1< zl=sjf_8&Dj>EY@6haY|rPY4jp*JFP7_~VX)$bQX%=g)cnM7}=dd$98F{_7spPUU_& z2<+|8M&AE^ecJrJ^1tAE;QQzB^qa-Lq!+)ybp_?fe|~?Obv*x3rkPLp&*R1q&x^qXzDe#7e(oUe|a;JZ&j?t}jfNG+f5L)h=^dzSj1@Za|otcUI;e;J?tE&7TC z(fRFtR2RJh4l?8KerC}JWaE0df8h6k{oA43r`Mei&@lFT^&{s(>wKtKcu$4&pW`yA zILPFmntnFrK6w1lU#cHG2ZA4mL)>4g4`>&>XE_jg#e_cIXQlZ$zeG9kzW05R*#FpB zc+c~3UA`ARKzYXb!vBily?j(g&yD2$5ByN4NOI2qoHHQswD|R3!jd08d0){Z+6(zk zz32;(bLQN?`~z{u%KHK3J?o%-<^TK7@jc}n>_7fLc4o-epg%Z=vIP0v8TCu{0iW=n zbDQXY^#kjM*njsa@_rxltNQnK9x#qa-~ZcZKb-E1UOzv_e`Q=_kHY7|d*d_mnf{F5 zPAx&zoB7!meiHvNc?`dyd*M3{vV2E;juUxr{sS_9?2l>qz6QhdpO`=Y!~2i<%{c<( zx!*4huUpEg*Cz!BxggWP>sPm3$%|m>*2cdL%Rt^?^c|Q8E1+=@O)Z$ zjvT%xJ*GvE|?^*#LnuQ5N(6yDFs zFB%^RRvD4<`JHGEl8Wg+?sqw#a#pK zE2KM*MP4_FAFxJ|j0^9#j<9R~+JED@=mX=Rd0zte zGW>_n;Xl+KaTricjUe6pW*hQ`U}6od-Mo?{TKLeT#)Lb2To7Fp2>Ip zVA1+S*R$e+eCXZdb>6)^C!6!6j?W|iogeZO+TV-!oSSa`$0l(bWy=>SHhjmw-pcpo z>L=qszw9|6Db{=y_5UZM`J3sRZ&~n(@a4VyrJTzD^_lZ(kiEb1|A~M9n9lF47e65U zzrSCvTX>INJ`=Ue!453EU$yW)zfW|e2XIT#57YG9XYl6Lwr%F`rZ=ZN?;PH%AEwB* z^PeH{F!ai_ejkqVQ3TUkkLY?=OgRo@iKz52p>oalF5S+#u?Id%xdbmH+4Kzh!@t{7>w^aiYF&IL}*8l^` z$p0<%%YWNLKi4=g`}^4GhHfEe}BJUi$2%1@SXYgDerxsVqWK2)dMFLm!f{X{I;E<^^1goC!Kbk zg{LUrgBT?B0Mj)70MlYUN46bvco%(fGsn;0uiJOQy@-2qK7H5T=qI${{dQGwzndfH zelY%n*ZGg>WPhj_J%C*}x1Q(^>LrXjYn9`l1n~=k@HBWog`d8EJ%yKdzrLJ_d|txy zxZYQI%I}0e;s1y@Yt;wx8n=~mZppuYj^mm>9guQ4M)<<=S0nr$<^yIQoM+yMdEW4R zyBlQlVFm{Nuc)8=hwn&ao_SwGz7q)D9PEyM0E+60xB&C!pZfu`h5T2obzk89m(q;~ zSpP;nz+Vr)b1t{~|Hu4aVE=k}Kby&~5-$|#@92w^gDk2C_P_HzR`{Ij(F5cwJU^?5 z9+3AuUvOQn?{)>z^YWhiw-v3Y=P}(6q@HbE2jrYUt+zSYf9^wHG=68C_xBa_PcF!^g{F;vhT?%b9;Di_gDS!FeROG z!hbGL;D6q`v>p1@rT+cL=m9p$x$gHE=nojgpLl!Qb>fTzwWJ=>@A;02>Aauex-R_m zx^`>GH}LyQc;NjJ{|VowUhB8NT`xK=oU1vk%N#eKcUtT{SnSCdS^sN{>~-74^f>Up z$~)U zKlf2yu7lB2*!d!J{&$Psj6OL0EBX&r!>FdK16zQ4hGjQZ`@1xDZC^90&R{ z<3jQ${CE6FUcg`YTI_$;v+|w4@ctRD*FPuSc%|3FbCBhE?EY&A>b$YOitB>wW1chq z7mXW;bn_9f<-dGyvknk#Z+p}Ey=8Ea2b^>L4_P0eH^s#F zxDP*o?@<*!aKNe;;Jdt+?;wsrP=Df(j()&!7yjR$ik@e&d_Kz%eWO1(KeT7+exZ7T z_CGxM+&t%O3cp#_wW8-~9k*u5zKX~OhvQ^B1~eaWiH|}1`H0th`pI^jwGHvH}0D zcO7ujFz)u7NHN5bn(%^gxZ?e^k>g>yM&_#~{4dkCp$NM;ys#?bY8_ zqjui&4IlOROt;B(5a*cE$@-(S*? zk!qp`cDBcSOaRgNo4ohjj%a&=_+N9LM_Jwv=y>|vo(p6=!v8V-H5z>%K9O&GJbu}) zsQu~qS&sLy&pHuT#&JdZPqZIDhwV|i^)v0i7US=L6#L$B#6KDx-EVzM+h@JwM}F7z z=FR($KmBBTQ3tjkKa6tsN_hhwprMaT)$^ZY> zf&Y`$>V-(Vnt}h~!>fk}``u&^zsvLHoVVqV@r3v1XO5%md3nEb{RaYI_}{_jUr^&` z;+A%a`=2ZFfXLAw1$W`M=hg=Px0H`QIGfjbG-qDfo`Qw<#PvtYn5mjxcn?j(dp_>~ zkLTfw=)7tx&j*CRxqgH<{BGa_GW_1D58&h3MC9~r^nm-D%C@I{*YQ2~yXzqJKGy^C zo@o}o1J7_#)(eYb@8wI$R&}Rs28A$6wlUSCQvQe%d20 z`Q2I(HHQBP|0nSK@5F!kbAD+r#MSPn@P74k_7`(5iu9|6`LIjS7M?b=&+|u~e|B98 z|1tFX0d&u^^+53hoJaB>|JLiV^YB=d&zu9ouFCiGe4kI=pGD?B16F^)bo_v%qYrqW z4W3cX0XOoFzfIrqehqO*koWmVrpI5A|M%G!=wHz9+~52B&w2h_Rv*Mq2=DoxHRWOc z+Q<4H>ussO<2vD<1?AITeh*3g#Drh=0_&?}@BZMc8gFIL7h!j6+pYgqY*VcR;eB$?Q%60iY=mG5RvX$Swh8O!T z-#0fMe*Woo2jAHb`(3oY0mFX|#&z&L?Wi~}IK&0w*V~`+TeKd^oelCaa*P$ew~WIm z{Krr0!hZ~-NH;B}^gGi)p7CB?;kEOmL8dwP^qP8hUB>Ux?wa3qr#N9;f1NDY7pf84s7&w7mue60D4ACUIIuVV}!aV+IMbc!Be`hta@@{wY*E;#us`xo$e z#ezJ>jcuf{`Md8pW}G&zU!Gi@LnwCTORU3?Jo{m(RwABa6*K9LUx6|8myJzzWvUb9V1 zT#xl1arMIQcHnu?a!eo4eW#L-{qnlr*WS~twdlG~Tumk;(feA~@tzwO7w+4K_dgdz zFDn}t5Y=BT{Bay2qezsgHoSZN8ot6mrvFH^{O2gIPZx#f`V|A;2Mq5?AFzY(&Px&h z^JNQiS-n*Jg(KdlJnCKKdUw@~OFKKp&-SX1MT+Bo*8RI}^ni9xo-PWn-l!KG4~8$} zVq8FeS+D8VGe%E1F9tN-c?llI*XRF|EbrM4j~=jGW!ANp|Hb=nZ;AJEUH_b1hkS$! zq6hBzj>nKL(!8bUbBLaE5O)vQE%ur(!u!8y%rlS``%NbB!R=HnuAL%{&S?2GV zz0ni9SFb2XzPr!(h%5YZW#>m%%SAru0h*b5C^q~TZMWq#@*lqy%=0~B#vyt@zezn1 zI|F*Z-+nG-~T(bUYhmLR^HFk9_}x^S1%p(4C}*d>nqREIsf5%cjbBHIfz}V z&$p`a{}S(GN!ZIjdBr%u|7CdZ{mR-+(Q*eIe}@11uUw~|GOi;gta9^R(F;oyuktA4 zOuFMpz4v#6pa1P$^%qi(-;>GxP1%Qtp5lJO%?o+#{hvqIElu>a$YVraQGjyxt&jNs z57Om(({|ba=QX7G{iyk%{Q$o&ep)l{OMGx5-|3ETMB^0V?$xY*U$tF!2mW{1!=ew0 zKhRy$pE(y`xtppFdU&+vJG$Z!hx z`Lj*sefPgg`O2vMZu7soYTvsW4|wE%+MD*ozbNgZy~DnyMTK41l;7WMLI=Z5~LJiCg@=-c&@!h~X z(fJ_y`*}g0Q{2!27eB&OUz^9@`G4=gxW=x7dBxY4RR7UVBb?CzB_7VDSy> zf{t@P+Ix_{*5_j4bqD)Dzj{S^^3Q>v(r+|Re%fEliiQ6Kz?H3k3=(EqigQzchU;@g2vd6Bj$yfRR>>MEX!}H{; z`eAc~p378rf2cp$Z)6m6(g{3@*0 z{9iDxVB+|dpUUJ*`V*ua{Je8{ea(D7=J&^skNHif8Hf14<#`Ur`YcbL!~RY*pExOa z)i8fso(Cv=Uu}1^U%zHydhVwmqCdb__<{B_#liRV6Z~+Ubbc<6-A|Ce(C^^?kDu~? zr(EoQ#!jQ(JrpG_kl#RUgFz_{D4X+`IO{i$6*?QKQQ8AR_mUY1+%3Gc&y z+}H5i_Q-eNPZg1AXG6PKht_uWmnB|-9=ISbs{OuTK61_%p3|Z57+x3Tc_I&J|9V}y zJLm)XzL=4I>38ab=%?WR+u#}pd6V;joYNI~Zc(0Ysvl6|g5OWzSM*2p0fuSd`+x)g zp5UVJUOl-9Kkq8;<0sh9rmw-y>-6)c@cw;JdqsMl3!L!RRlP8z*Zk;-e1GVm2YSon z&-RWc=fm%joTvxR)^~{yG~s=7^O|*E(F1>c;dpOviPwVoWe?#$>j=^Hj`P#@h@R7& zKjn4!4!z|!`LL^X9v3Y3-TBg8wb+ZCJeK>%AnxV8ytV!T<)89DLud!@%D8!- z;|HeSspsnSTifUPo~OLO#*cCyq(1q--B$lF_3QV~#-w9rsJ}VbeR-?QvK&3t*efQleydv9!JkyU5@pFPS zJIFF_CO@ez{I_2DdH-#Z-AC-?EB(EJ->x%6`=Kj*KdVUGulNP#kKRM3StpjC_8uXx zmwr|s@cG?|dH`BS5AfX(c;DRo>Gf;IyU~9=aoqi0i^%cyoI|DAGv^EDXf663<2n3C z&v(w_35KQ4>#XPHdCT<)*oE(Rdy#o|Ch~aO7GC(A2fz4T7rBG?-&Oy7q=Bsb@19{z z|788%!BhJ~G+t&t_rr?($m4k_k96!e^Kf4It?ci@C7t#SD9^D&v>V=|5JdSYVm4mR zc^>OUzS53}uJh~{%-v~lyT1?C{=(he&FLr9DSBYwY4NL+?VmA-dOYxc%6=?yo5b03 z{SD`U_`@1MLHWL4^B&?O?+5+uxv4vOk9)N)SoDD9O_RP4-+7$aeb-O%1Kv9y#u=vu z)ISiv{<@q$?v}T^!gDM@tyiAo*C6vfI123HyY&ocy8WoVw_QDa-sy)S8!y^C<^Q(G zXCFk%>FRa(ebIcS9suzdg5MXMQ18J10bBTu`^a~hTjB=Pk8F7&*~9;W@IP{IdJBIa z{ek4~)ej^253TZE0m*mD3;rYe-89P8A8#v8DmG%*-R?HwJ--7RWd2lCW*xhh_h}C@ zIFa|=cl`d-Cvk?7k9Iy;mkhG`q4P{V@TWih=?8hwdf-|d{ZV}|b{==~pYulX2eSSv z^Flx1YBG88V$S@&=J}lGz<``@Z?C>#g0_X<+HtO*pUZReMdtTlN;>E4N%y&s3va>E z_jGjS`!UWI^0D{>1LiskZOGSE{wrJVBVxxRs~3LGxjm-udS3Gn*s2du2qOFqLhqM6 z=Z*Rrz9eqo^S4ZBkz&yc)2!>K$iBZ}KQZ31=S)ZVJUMk#)jLd7u37+jWyXN8Mrf2RmQ%K$Rcl zKXkm8|CZas>#To|_|Ni(e1-R${5}|dvez--^4#KffZd~un|1#+lE*oK2k{zSjcA4*;#F&VR6V-oR_m;}*Vqy(9fOI=;uehla1oceCQb zg4{6h`8jr<;s4P(KI?k+DWCA(`sH(1F?JhSoP)M!K=U2TJa6Uu0qb*@=Wp!?0?P89 z&-~oUFY7zP!S2GplfSA5P#4(!dDiu!^-V#hzw50h{MX(um$#g|H2%LR?^|O~{zCKu`dZ#%-|zXIhE6?kqz9Cr z`UR-le1GI=dh&(W#yKeGt>e_GA0{VFN4d;{6VvxN)@X(3i2=iZ>_>+l;AgM14$x2Q zuWHU44WkA072H|G5zx(&TB=A1g` zPj2|W1#x@lf#p5o{K@=xzMw89b9nCgMpza*&>>r%=>0|B?%LRU;`;D?#<>Ua_5F1a zJ$~06{P33ZdFYYP@tyI0OeY_I^W-}Z&;1TqWY62e=cVmB_ytq!`<8V9h=HGS-F0km zroAue^P&e9Jl_%jIiJY$raaJj8UEb6-$8oWFL~tuBKev#Mk7=OX^mg}r*Ovezkm-Cc!jKqJF?(Yhk zPCrf51AG?cRGgf@{@W(&f;IeY;k`J#Ph9vdpKXWfG?U*Sgx~aMkc3C-m8tGbbiWVmxlcXt)^n1Psb3j&|A)`Xr2p^ah`i-uu&p`L-NN+RmTkOe%{B3yN zH68pmz9K#>X5l%sKb)7F!%O$=+sgX^J7m8M7FIf@0;+xTW(*Cd7skXA(YSE5FNKykpC}O5JV54AZ_28gFm(1XBG3DuD_=|ug^CI*Xu{#I}b{FMR;$R zruhFkw+H|89rMb6c#NKu_qb)O|5*=I%sD)G&b(b}_etjZ=7QH-u=jnH;c@l*)l0|x zw;l3cEWAgrBD=n6pYnbinYfPEttT=Qv*crbk$+OsJ&$w(ANhX3>$?_yXWa=}&*liB zd*n48B;Pq!bHsb}0R>u4H~uR8_k4pq&-{NoKiK`X>sR<{`CY}$5!(OCbYoE7Dbw8W z92ix(70Y)HJAMaf!u3z>KlVD`8UE9s{y2j7@3PN(&;#Qe_Z6pu9;i6RE*dwG59PhJ z>CFr0dErL`@3GhGy~tyqiN;|HHWg1|huxo?!&8PSxL6c44&A{=dEd%={st`eyx4dB zoR)m$dT?ub#(}3G<8U_Dj_YR!Er05{`yka0XdDdv@_vvH`XTA)k01-QDLl8n0Z9)J z=J3dMw&-d{FC2oAH%zAQB?LWL`odOZ$J$Mpy-KzWt(cc3pNcjgn zFz|na9jAMiqVNB0;IH*}Aa3hJ3#MPe%%>xn^z#;8lWi>`Kg>afb3X-{hWE;Z|DqRu z^Z_sDem8g``h3v?e4mZ_E>A{(;&;f}nqKrlccc#}Ch@&*yl=z*4ahKkRu7Q9@V_E%SwE6-o&bP6vK`t@-a~*l_|K<{@P5z!s=Q=*34g^| zu3wYC$e*ITOSOJ;2L{BFZn_Etepm#k2}%!j?%x2X&EdWEi~6;5c)~F&??31R#v}HW*(1LW z_TP5M``yEBEx?O-=Z&=_Gc|JVX3n&eCAvRXn!3e z)u123`&@VZGOzL!ByR9O=WnO~>V2kbcjoAip&ZO-^Z}1|BJW@0FNq`Kb|U@#Ld1=~ z)=!{#{dr{kO=Rb58(A#&{($h@ewY8=H(=ERq<4waZ9vcS1}*)SJ~04O^n!Y33Xitv z2T^?>vb`Oi)4cEyw>;^r&(EY!kIFEn(E&Vyr00^!QKxTdyaiC@*@uE2j25L8JUJQu;`~ct32g_yQKkY^jcuu#4zZCm~|E@DkXFGd42Yvqk3c4RS|5OjqucH<9 zUnXt`p5tgye%dY1Eq}l{vUa_FJ4YYTj?eJ_?)v()@*e-c=mGi9YiPf>@_t|T0bb6& zz3(E+|L*OYdNv^Hx?6N43wi(ghZlcr{$6=MAiQVT;YGez zIQRpNyutqp|5@ix=I^Gg7x*p&$UIt4|E?bRGQY_OkGI(2@c5)6-`APGqxoM4wXfxR z^oq|>?)wsMw`clhsf%YWh=>*xXM zFZ$p_yy{lV$aLp}vie=#+fLDSsc3m3(^j6LKRgFVoZshxZ`z+JcHeOk>6WbTQK!W7 z2i^}@c&`2D_1XCUn8Q*0fBa#24sG@So%h5A`il{9B++5k54d~%Lw>i1Y4r7&`dO#0 z#|M7|{&OSk#1Ek#)86tPfb)Bh2b`l9;$QQ8`WJJMlgXnV z=vWUx|F1=s4e*<|z;E)q>H*R{7vgpF&ZzMJj`Kq5g~I;F$ZvW4S^o1m46kz;o{RWz@Ebq*HoQln zz^B+XWrpp=G5`O>-*~96qV2J~0p&N#mGXWN1FPI%Uq#fE`k}@%SSR4H&d~$B4)#I* z=Q#!>-)&#k1sr?(^AkOQ{#5pNzvVylZN%;Nwin62=;6D`BKq~Vcm2$taW&%2_v(S| z?Q$uSf7Ze4E$wTu|KC>xu+Q_0_mSK5OG`e>nIG!`m%=v_|Lwn>k0gO z_Z3?70Pn3l<9`RwZD07$1e5n{o2^Cb6V*En{Qnz&Vp->h|JU-I+h!ug+>5S*MD*I3 zXua}FyDyGLfBYkS5AO^Ai3=dp-2Jqs%iH(xMbuu5N%wnNqJEKR|A?M5v|Q^kf8I|A z*DQRLS#Hh5SMoIZ@SnkD{EG3r2Z&VKDerA>vjT5ewgl~m2EBkAh&*OpK>Vue0kEvk z;Wy1>oi7siD)Q-ntB7}zeLyh05K}IEr};StbIO0lmH%b_=lwU!KSxeI&A>zKbJ`jF z3jR00OpLpL`tv~)pSYskmDjC!iz5tgSif?f`-uNFK6tSIFZde|^??~z&~}fb2PWY= z#|Eya@OM)6fa?Ke^NB1IMsw}I`vvfwZgT%8{2y?PeE0ir(SuCu{W1Ujd0OT4yLte7 zPrENW^r%Spx$k%2|Lu0Q9Qfa}j@G}D_qYwWqH&B4Ug8EVMdN|$0o$u=c>}gpo`d(r zAAiDk)5*S&_v)WxTq4)&(I1w3EU)+be^aJ=Ci0)*$a=uvS7;0Wf3H~m0nW+7|Fjc6 zTb{foOt}i;pB8yY|Mgd8{p|LL_dG`80Kj4czb!|ei~9Y8Y(1t=P*C#zZ?Es~MVk9U z^m$ze%(y|`xUVOAzi7Q8%l?UI_UYfp@N$1Y{kwLW{XvjwwsX=wCn}#$f8&19azOn? z5jddb@cEbr@gaI+{O+9c%%@+O`&k%H3*Ytc-?i+QiRgpq0rf#?7d(USEe#O~zrt@Z z?az9k$X>_)-xj1f50rN^yZ`++`EEN!rq|0OzQcR;i2TPOiqK;R=A4X}brYE9V}4I) zp!5Bf=V}hThyPp7(;<_*hu83sb%e-*Gdy4Yj2}PN-j9Nu7a8oi2wlQ|zjL8%`^EDY z#V>GtET6bb$~8V@`F{6$e542T7nS9;{AT|({z}F(yf1ozS(A0XabkJ?cy1UTJmJ6n zRr~|`uk^!!^h0gef&cD*$@`XdW#Ru~R`}2F=%NRf=ymzOSa41rzI(q&_ia0P-m(GG z!Mo*>_b^mTOJp8D{s8^O`oHLf=UDT{?psgcKOK!e=ooL2?mPGg<$m60 zr9Asr5!; zh5y7u)C24F>mFn|7dvmc@_az|d6aFJsQvHJ3q_U}%rE&rIy(>Y-0_u?0v4w3epeo zo^yVz^BcYcQtZ9`*}!|2m0K~-%Y5gUL*}>bWPUqOo#&Y+{UyJTtbT)+Y%3*BZ@(Y$ zeAA#{A~Vs0)&tL(jyn?Zr0rt z-kEG{k847+Wq4nJ2Bs>hX2q%_FsE0@6m4Y z|M?76*8ixt-R5$GT_&Cd&vDyW|99!fuJTSay#;NT2rbS;o*P~Uw_?s+fv)$Ihy20V z|H6A7V=M2qXTi1Q&MCK`_G4bkr5^I79{qjZH$e|9C{VoKuYVNJ&n81$VA0BZuFHGZ z=c4z22H`7~2mTM}xP<@S53d*Yo4j{@RPFwNrV|#edf<3HQ1pPjr=P-q&-Wq9=!fv#=auikuHqmMIGMu#Eg6bF zKo8XNQ$PJ65+`1YyH|gn4efr!r~H@46j$}YInT{{!1r4J3IFf0qsRP*_P@%19`9G@ zb;`TxGk*Qs#`hTS;W_q-{(OS;>kc`|~y;Sgs|L~q^mGghv_XfV-eT#htF*n%#>B0YJ9T@v>9B2yf*#?Qf?>rm!{j~F_ zr_(_;pVyDEWgwL84>9LQKz`okY<%Pg5FWfO{Xzls4{Qs*dd2f0TKkymeAM}BCTmIX=4d;a& zClR-U_X0P@51!b4pRZRRJi|2#r|1RzEd2od19+17py=~}J#PLJ{3QK zZ|Z4Uamjv=$S}RM{rU+(0;fJ#c=*f@kk8v~)dSS?|2K9vyKN*{7G`TD=qa=`C^YI7 z_!5S9RzF7pEhcJNPm!nn&CUm5^Y{Xp7-wV_dhc4TaS*o##i{y-(R%!gI(zB`-kEGCj5tQ{hsI80|tDx zm*GDfh(ndDKQNc~K2Kh_A1qQ#cmkX$Q>y&o+#vG?df)g%GtT}3&rq-DCB4kQEZ4J7 z5Wkq~l(UtOtT%5a@b>wo{3l+pEOvnFna>-(;-AWY;t25vn*10?^o;A)-}0e(Co;}k z>O0uarT(=&i+#J&zA4W+TtD~)?#sz{&mU1<-Ukrbx2K;n&tp#~9|&6#->dcn-uF1V z$c5Lz@ss?wey02VF7?^b%lqedWxroL1kd7MOx_nepiFZU2WY7In88=7y_wZ{S{b)s zDq8Nhko}ei(=k_b5pxqeV!tV0R6Ej9@#I@;2aJ~_{(*mRy`c23>;Sv^+JVaZQeXRl z?U>DqezAY)eQ~?0yzd|L-}5=i_f5p#O}gKOX!+p3>&mXm6_*v^cSnDJHQzVhPvLj! zD=yGG^D{1I@>jm}@}7XVNWF7@(0E_td60N$U+lr$eD-_2&ig?mkNTm^_o8vvRh5TeSr^PnpL~?}n~nOMeiXT&o>N@(UA-{hq(i@xUggupg7m?9 z@i2u)glJ-%{Y6nVv7y6gfyS1yK@i5!bWTu<6SG_tn9Yq$=@9>^u_rdEbbNPjQ z$84U6K5e1HA=bNqlQ`5ONl%5!epRLuO39D6`^_&*7+8_G}KgHPPve9G6qE`#(-!M-5s z9T_(!sGT!E&ACfCI8LJb<)Z$Hh&K1)%d4xa_FQqz#4o;>*Yg3-U)XPN(CSX4{oBd= z74tve@rM6Q|M*XCZFT6A>0N@AjVS{S2S#dq92m@l3a! z4Rf7-5$zw*d7-77&-AWdKjM2kC+ziKl0M~omgIx}C*1#zZIboRj|Ct%!GeP9C1ubwc?6N?Ctf{f-+&5OWrp>TXT9-cNBwI&@j0 z&+mE+jyPgiq?#Yv0*eS7|&?)k@jk2>u4D`#!~ z7qM6J)i{}GyuRI+^e6Hi{gQOb1K(c%N?Zucdt+cvd&+gri&`Fzek)JxXpqRP4DY$0 zzjOG{xskt=^ZjmVIk&fbw+p;xUJ@J6d+T>3 zTi+FY4_`sLaj8t$A3uWkib#<6`s|Fv`S9vXJX{KvlX+-46_|6i;J<*+{hx-JK4=O2-s$7$C{2GQR! zk@xnW{WiBB<-gZs2XL5aAL<`FK=Oig_OTXTuXbSd?k6tDZ*Jd;`d^Lz;r(W_G{5g7 zu0ZmI|7^p@FHnAD2QY+<|03nhC-4I|`$pt(_zSTEmy;*_hgX$PlbrY6f3LIh{rr0f zA2WXcPn6g051g0yg7dx4E%tzasvQ0s|1dw@vlcHIhja3?P10Lm^-8oKhO~>gD)#OQ zJ0S0^SL^@*w*lU}u8{v%+i@W>J?up7n>YvMIneNva^mm!5zrd`!|%fP%)|22=YVgX zJv;kZ`NtpE>#pz}{ujP?+}Cy5fxhuS?>U+uHy}K>oK@!Y=Nr@a^4%u${D$>_*Qs83 zfBOU9_dpK6tA3~_`c)#`7ky;8_Xm2!JVieZ&i6a~`@;Xi`<-#I_yOXQ_0KuTHW>4L z;lHweYxJKAn9uSbA^PX_JQrR(#v{J5f9HMEa{u5t7UY3t;B*3?DL(uchX;5}d(Zz% zewrShF2i>eQg`c%Gy zjGw$`zU4bi1Mg=Y_EYR%nv?#tLlevx`z_j~(gH;KGW!ZU)urv!K5$3(|ix^kk99qxB<%$pOfEv5UsDz zK#czLyckmu%-p=l{eJ^aI8(@%QCv_&+UiM*U{x@xOh}xpv?T>%cl>3J$}=!$a&( z%16eZXTDzzbg%p$Cirn++L?YM<5RR>;r$uw_B!tu{!@OF-w`(L91palm+#i2;$pQQ zFUFbjdt{b{LF=X5&~uRLf%Q8e8r)G|^yn4^5UCFGf&V-YzDHhEY;v;$iMLHJe)wSq z-wet6JcoH_d0Z}Z zN?eg?Wz=6dJ+qwHhj9W@jqGFC55_gGe18z$(+!D#Fzx4D1jm41%74s4FM6Iz1=a;6_|;qABie@Lesc-zC{1?`mQJf;&leifNG-ml7Bj$P0WYX=B>oLLU` zjP&vx$J4l9!R>FN@nO+8$$;H|{&^FgzDK`6Mw;)JOg^B8 zcb}I*4FU4z7X1gAjnVTm&jBpCUT*0@ zc=1RkAN-=+!f%nl!0^!czJl+pvym-N{@?I>X7XR&>o1JspL>5np2MF@k+4qU3w0gv z(RHf4=V=q4$8ZN3mOQ`NA@t>PkoWw7d@sdzh5us^eHVGWc30j{#pJJOzj|IS$UGT* zF?YV_JC4K!K-BWebz1j}_5j}VC$ewFydU}IINj@gwFByd&wGmMhyI`F^~w8zbz%9v zJeEnk=QDV&{3Mv`+JmyLCVZarHy6Ya8;@u5pNT)X`@LdW_urOz`~CV$u?O_q-21Zc z624!H0Au^UZIA{2%4*N{q= zs+D|H7i{_9^|TBBd3^X@@^ze7EbIKUQ`ZYEKX!=>J}2w;nvRS<^ci2m3j1*$9N&wx z%p2}E%X9ldgm&;h{VmU1N^^P=6BItzsP^vD;l?L{z6+f>=Az3 zF52^N(fEM*(1%fEdYIc@)bCL}NB*c^^^*?#pI)%uB0ui~%X&>sop5y2J;UUO&X3p`I z_X!SmV2Z&sAI}f}H=AAd0i5S3ulfJ=d9%0rL#F%wS-~RnI>%@E&-tNIH14Av*#2wi z&f&f1izXo3h@EKMPo8%?SH$cU?7M;l@=PC5@S*VE{)Oj$XQ1%)7;&?lpX)vV_X8`qT8q;`Fqqe9Xh*xIAue@|5&P_C4duI(YKIapyd*eCLJ(^r-$Sf82M_)Mb^t@r z?0|U5^~ra5uV28j`S1Dxw&y5ctw*zCtv%L{@u$8NOTWPT?Uz4;O$HCwOFqhdw4Q3R z{Z96g@w~?a=|qmRz0?l4&n4eomy4L|J@1e00QP+B!~bpb2l!r;dOlV3l8 zVT~OiUEV8;oEnN9AnvzSMi2J;B=X*DBI=!W6yg zI`(xc?=4THxL}hD9+$&7%XjQUkPMDv;*ySQUDx9t!S6D!%Wvkyq@c2J<#p>?_-_!f6BgoPdykJ^3jYo z-#7n_aVPFWT-ovBG4bOPm;S&wVgTeZ_l=Gl$a`jv<0r<`{@$*Sc@J+Wr;J0xcAv;_ zPr>|-xcZ)UReZt+csuw#(!|L)#&L(<4z{aeAM6(4_mq6f&-h1NFkoQim;ArHtURBH z+%}4wdxcN^z-xzouWVmFVd%nt2HNs)Z_Do_Q(^7F9NgQ1kN5+xU-Ldr;ss~b4kR8x zF?nxUzefIh-czJH+5!2tw*$&tW}RR7y7~@MpUQvs2Qd`hXFu-oKmT?t|7rU2=z1%E z@^NLpt>q=Y2k*PC*a6(-N#TE2@o~I>?k@Jh@3_Vuc;AqDXF!i!SBmC4%pXO6)B~Oy zKfw2TC-3Wd!8)H$3O~=ndmOF*ga7KK_QLlaAM+l)oqRao&;Km@PvQIf_V$u`$?Kd80+~Lpm4UG!aY2kNs zl|riutrS{WBs6%K6Y>l}Fd0#V+%i{Et|URAQbUopbX-hjZ-Po(xZ8X_$2_F0>Yjmd zkiL2Cw_UrRbIv{Yn#Di<$|F!?~AOF98DO>+f{P&N){NMkV z|8&Ry@*kJhkLvdde)Xf|aI;#ilE?LXB|r4hPA4mq4_K3CWqq7{uwJj59kv))+guZ=d=2(KE1iTyQ|NtQ;$<$RHqpmpl3V$l27Z4*_7j7C!aR_ zQgu3=s`JmvQr*mFph0~iDbDh<@!{%?+V3~b(CyZ@eRVpU&-07n#d!6m9$pPEI9|Vp-rcR&!>iuKa?>=u ztMsbomtG|olXAIC(6Z!u(bc9Iq!-D>PG|Qg=|%61%P-Z}`cY9NiOT+qx~M*Ccz*Sy`iRFottNGG!vQEyc0MRK>VNxhhokDLPit8gPxGhT zW>P%MpU!wdYB`&QW?8nISH&~iq1x^4?&hE8mCsT2`1$9G$}+nR*t%NrV27U<6_0UKRYkS7eO1-75x@Fb#eJOLC0EtcWz&r7r`3dtxUQbo z6Q0+go+PI}-+Gds(jGUx)AaNgzj*MV$8#_0#cFt(pDf<2-sC66v71#W)p1uH7sp<2 zbzC2JfOC>ip*BQvMg5xaEI3lYh1g{&~D}>;U^yhX1CS z&y$bqqxoz)MUT<4K21K3c7W2}Iu&+cP6cQOIsjY4TemyAN#LKuWO6wk_xo}^JHNbB zSsr%4^K8q1ty$J#`E^43P$x7O^>92MB`=a|xm7uBqaC0+!w!@*%=)Unz@Dt&|H69F z4tT%nV05^u&Wba5$kl^it(G~%6dX}((T9nHsMcIEU_g-(0vi7b=c`(L) zUNzvq_KZ-@|uVf0P`TQ+UP>l-W*F74=8Ack4U3=RQiy z+|HD8!F`Y6y_kOAG!+`_C&k3)QPA$GzDA{8&hlr)Q#iks|9P`1Q8?*z*D-ahaBruP0AJA!#^7qRbE~G;=$j^eZl_d(MJ>=nNH*%{8zoxxcewuuGce}L%v-vu~zx#aQT6+-uvwf>ss}%prE-bMp+JXN5roQL@ z2PF>3saO5K@eRCRP|j5jvqbT)n~mIqby86F{Az~5Qn{V7g75ut^S#?eJaCqu7VMxs zV7JgWMXLh<%+H2r`gu4#TTsFBn@wjkc)l2n9@hBzvwSki<({zMcj|aRJ)qhVwmYMm z%OT3;%(VyF%idXf%H=280sQpRIDpfYL-e+3Rzt3fb~EDYPA1q1)%wcep5x4hsQy!> zjM9$ad8<(lJHzr@pZfZE!{;I}zTmEyor`it- z{63q{stJvS>ruTf72Gnp=Xk%90~Sxvrz0vRhYy;eoIfS(2=2N5-^xA3wVGw!tbntI zc8Y$^^T98}`*b>Mx!n5w$@`OGaN6?EWp;-6Y23<=+|zy=IR8?AChtV6N%6=0k9`bj z4);kh3GP=sr~FIKRFrX^&4zdi|IXIL9bD03waKetmC`P}zJv|c)n+q>{%5nBJM3EZ zG};~a$!5v+zRQYwD9hEVg8y-|Y2?4)fvX22xPbrNy$Ao0p7u@-4h~nuYbR9CdPw|c zyDN@|$8w7uI7%`c(Q$FK84U*T{|GnKpb_6!kBUc0l4a<7<#M^H-YecqI@yeP;JxPV z?v^;=J=)*Af_s`rSz|XkR7mhoyszIU-anUrpJPq@Z(Nf+siIv~lzE;&Oj!~^+OY4$(Zfi?~xzJ`DN z)zUbC%i7fNzocPS@Qp+qu)mLAqU?1S=xla#qjG!n1GE#YhkvYh9`?ZPDX+Qlf;fk; z(>URDvRF)p==sgfx`*<78tuS_YDkF>D6ZwX{G_>)b9ln9r}QWGL+|c*&a7{m{eA5Q zm(%}W*`IdUmwO$iO7qfxD<3D%g zo@N{T9~$?{`(%=$wC@Q~e{dfBbGaSM+!k>_J<(6gKlhi&$#iypuI_YL4nKW5Bpe?8 z*K7Rhv$B&V@;CRn!9UeNJYIZ0{X=uBa<~jX{UwWy(~Z|B>iGX$8K-~Qzr7^>&%b2% z;GFgFUwnz5Ua7e8U#p+sFFoF5H6E*jeeA&JRn_|aqI#`8`n-5n(y(&;ym4QvT$k|+ z4K?RJma8Rv7f*Nj$$i1E<=*Ahgk}c!)dauWm3ykOP#gLS$!U5L{u;&35vQf_Kb!aH z=k1S1t0CMUK76x~f4U$2;wXQV{C!r+|Aq^$9_890+an;a zumjlT9s3J(-)HtC)?OD%7`7w-gqz|2tuO5W?O-MMn2&zT|F~bbb^yCjpU^#?CuMCr zo1ydz*bn}>{wDb}W$|hS_t*pc`+s5w*6Z;=-dTu?H|J`Dx#?j~UJ=+2(E;b-d}lj9pxa) zKgFHT<9asVUwb`GGv&O)Q=aP*&aodY?^`{MxIgRz@jv`GoG=X~J~>I^dE<{x{`89a zEYcIg{8@5Z7u-jw?jMXs6@H(7{GI+k{0W>-Aia`*c&KUb`d8ci-P*WU|5tY8gXb6g zTc2?M)VKnDw&Hc-_w$`VZQ#97ExK#P;&Px0lKP1PkDOb6XqhBRGTqUHOB1{K?Y#6uX4_ z#=dN!w9=|Id<&XBx@A@cyp8E^_X}4Ro z3=aK5{+s63<;I`J2|UhO1^;m!^dl%w>y!HU4hK<__v854z5iF2EKqSDolrYYaL@fV zE&r`{so(l6dBSNL?EsHuCnZAI-QC$qu>-7b(ocKk6L{=>+V%(3{{DC@_ct_%@c-qX zH}alr>{7x6xu zPor!y_)}QQhlio!qzp9&)(%x%gX_j?ETm3~G3p+7Go-X|{rx1HVH;JW#Sj{3J8>){`8%L=8w8?LKb6x=U%iOZVEKZl{;Pn^&CTJGl@ zhx;L&jJ>;$`>P4nM!XaKpRx7R-39csdUAPr{y_d$oBjQSdM=8(R+}+p`d?lbdbC(B zSIKeji0=Ptc$6N2?W~92r@YJ`4IjbRY=~cPa8Lz&M_ho;o7;Z=-taw|bC$<);#m2& zzKIv^?k>;CBRraRyPf)^qTf#*;G{anFYU;G=K0~B`)%U@I|v^qA5twWPd<$CgIGU_ z?dX=Rv;%YML*+4%7f7CvZn#ZRIB0rhTF!6o?%*BkMVyQs@F)Lc>eK$f`sSQ`K5+mC zkn;&3sVnSQ@SYGa!8sMXQAq?g73y&c^lm*xiwpR~|I>eW`HyOTuoHGc%S?O_&jEXMy;EVmy3c=G?cS^p^yJ3zk(&grJERSw(w zdnzWl_xZy8?Rvh4e*Q^W?o?mapX2r$H8}pf`uyNm4;OMzyI9o~{Oh+-`X$(b`dJQ` zl%MVY54q=lxKW}4+8^t=FU(ZG#?CdH33-m1W<*{}?!mq$PD%g>{tKEx)L(ype<1gZ z1?^n!`Pu(!n$ae~@6-O5s_nA}|GRthb&CHV^E`)-di3*my4ZpDmMi>1@IJk3HJhu% z_rwK5{Qi7Sf8jms?aY1y-RuthAK6clf0`T7dwq->`-5sdZ{q;@KF$bmlaEv40vrhC zf`+G-pUlYvBp*`UO_be_d?Cek@`UjMIwES)A-?2D9eM<5nLgR!!n6Z(8c<5VAf;aA z{)PYm-WfkD>Ce;u@9cEytBQF4-SF>LDCG<#f-dT;N}fz&UXdycZ|5R(L9~o8+5_uZd@490xNToE2QKydn7KA>5MZhTGe9%RTme8r)-V z^X>H&VF$Da;s0Zt^6t0zMfUSJZ|lR~EPiABV7v+U(VtNVgYm%g;pU=Wz-34LfzH$I zb@a|s@{OBig3{huo<#p96oVAH!LGA@N`r}Z%y1++S(Ov=A2spq4DORNI(i-XUy%lt z587YwLcJ|3xQTkl?|c0PJl*i%<^CE&U(xT6ei=%)D(pak!Iyvf{p8_WJD?i(7w!1p z6npR`c52!B`{r)z?_2KgZsh*UUHc{Y`DpKQPyeq*sfRJk8P8iaHT>gWgZs^BG?stz zkGt|uSQmDH?!$h~eNEoH*{JN_c)tuI82?27riOppi}lkdpsTT$?7uO7;{HEFKYCJf zo&vw`{&1hm6@H)QAKcp?l7H8yN4-a+X>-+j>^(~H|GTpueD7-y-s|D-cgo>=!~gzn zMtfnol^72xpdF{x5hhKe+-|tS(E4U{Q4#ySt2m7QQpg{)zZ5+V$@!a7a z_uKOR-S=#F&wuh^~q#yg-d&UKnQ~CvTeM`Lw>k zUoGs%<9Ak2AL9h_?|wC$Q!gv|W%zfa;s*u=%e`K?XSYzxL&^-#hsJvN_j+=+hlgo;t-3+kR2PLiL2SeW}LzRmKIi z17%h|Mo*VHyrN_Nk;5H+^gC7iGKB9rc2oW_&socV_Rg07DfZ^~H&18zyYF~j zsQrC))6BIGjGJs$DZDd%;ty)`-4gyC*JM2DS$e_!z9r*2v*t7U1L(kh zICfyMz^=l-^_GYJ1$&S`!$H7%@yzyPJTStr%RTNh>_A4nVHZB1b&31&>-tr=|J>~> z>;dL9)4%hSi1RDf!y#ok+;ZPfzNkMpPLX@-OKk{9!{1LP3w1RbH8o1y-}inn^JQ{X zKh^(*;(+Df{n5#WhNu$mY^Y7BVL7@w9F621yqEIN?Q9bAtT#90+n9Gj-huH~$6ao2 z(4!?A()))~;)0{(QNfYYqx6ySiu@CH^wUSZ_ef7HdMN$q20QTIJ>O9N*TkVH)ujJ_ zba{7qgB~%i`V;x*F){zAI=-Q!W&BTdueAdlKKLgdga3+nptTEh^X6~I1?_e%|Mzy_ zt$5(X_%o$HfSYSl?En{oJ}J2oy#A9tz^^ZolDO?w-NR7TOit+%>l@*Pp6L zhGM77G`(v5qP(2*+-l2Z7(mjf~}A zeqXI`l@^EfD+bmhBGg@lf=^OWgVb05Pq z<9f?khj9pazUQCo4Lg8cTN(#23=!iB&G&6wfJA&ixV{7b7r6a}94{x6LXHRH74w+n zx(ME_57&F16#l`TxS#cp8K-4?&v&oMRf@gFj}Qk;r}OZWn5p1LKPUftd)RaGXW+0b zP%bCt0~I;-iyasr9Q-nWHVnHkgnQh?ZEFXn^MZJw+s!&{eh|*9qPo0!@StcpZYos! zsXr&o?Z|ob--G*di5)P%H%^|*J>yyQL-bcF?Q7)q6$FIZE3eD4aieiPS2vM+<3-i= z33(3_-11MeEaiX6ucqIRtZK$jv1$wXAB{$Xgm|AaOW}XL?(6r>U&y`oLBCJ$D$(zI zd^vZ2%Z^XA+-LJG|C1i;^^fvTHj4dvkH{~OHyA!*{y;gz|1Zn({o-h7zJHd({g~r8 zkBF;hJ|UcczwWD9Lw%yfs?|=mcOLNp?X`k`#wW+x0d~K)1O0?~!yEQfS$v~i;Bv?x zGM)fmD$|1S`q%*iW9YC#}?_V-_H)IIv&^37?3cdzSj%H#`%@Yv2z#2vA|7d&$R7tL$N zC(wcZAMMleP?2$p62E`fgID5~%{{+r&V{RX^Fy(VYQc$AR_~CkEaAB^pA4>S=T&fz!J+JY@}ji^s~pX`d(0OcJ_WZ4`a^th zdHG;3kAA|KxS)Dwd<6f`aCg%-ZZAK9`*w<@QP{C=n7xToboU;gQKYX=JQON^r? zCv^8m34WjOERp}k!n_~+W6$N^=leGQY}NUJf4GnM40U|Bem_O&e_19_H$E8f>(MU& zvw4p)=bsKya6uVAB#qBJBJ%z7W(fbBZc{Lypp(&X&>TOja-G_@@;sVpn71ME&dpupZRuMOTQnjgTA zEGH`c;MqOzZ!68F$*~Jz&*8sdV09Z0tWd{6#?}MXG^ZXe7{0eYwsx?0;d=!=IA!rf z_5QY8|CJxtP8!cINeBerfF6onazCamOn*EM+fi`|%el=B`^7x#g!tI|s-7i3Uj}Df5OY;*X1Ggonlt&t}ZuR--+_GxZVu zb(&2B=g-)D)#_)lT>B{Zn3XN}!TB@u)bdVv>3IE9?AnbwCcr``-0n=iIo`76oOoao z@jv!XYV$u*}>)M@zyt#dCx{+DP<*>>al0rj2W_mNExyHH|K<^J;W?pC$ml*51YXHnd8 zaBh9cJC7~m0uCGY0DBkx0`R}o4q)zgP`PXi?aR3*p9f;+_vuvx1%jq6OT+qd!gx_c4eXHI_!~xoYi)I?*iWh^W z@lSry$ryh`8IPDoyx#d2yto^K5-^K6MaY&ZjvOuXA1S9`hHTJV|!8+}qFB->=|%;`rT`cgFdQ^EZwC{M%dR(ZD_3 zLdv0I{XSQP-zU$^Wx-v{^aV>X)l{pb(8v(<_A zfV9Z`ukFBQ**i+%{_;-sJqr2n(B5+96R>@w9YEH`1Gazp_d4>(2Qa??B^@%ZSZ+KG z|3`3%+FvNK3l(t#d0zN;zNE_V-I{hz9+7+xnz5nn9(x-+5Y9NyfcMgt!T$mK1rO|} z!e>YRN&EG+2e@y>!wSd8)^LAj93cO1=ojR)W4cT5o?mpy8|KgRE4h+;t62q;L2C!d zmk|fJe9M2QjT0LDqWJ{!&m8wBKXKfxIvdmeybjz0<9t8n{qzqN*U9Ef)qHD>-cfJW zY0dnN@i-x_u^x?c7>)`%NS+|-f$_w|`)B@bQLw%JW9`eqVFCZusd?=p@&Sw|nD1kp zKxKRggjhMZ9Xu!U zZ#pl%=l`N6zCJwEpB5Mtbp_uw^W}UF6-qppp!6502Y8>(sh6+=%x6Qvm3*9bf_jB_ z=kuss7W^A$6a{6*;fnC*EN&G~3EwUMtcOp=AF8K>>-`G9o&di5>sP$4XutI5pD>|Y z?u{QqjStA^P2T4`DCXi&-mxF@|53?L?mf<1+;90$7(avS;2vK7hJWJ#!k)+jlp3<* z`hELN_3!KVc|4_xeID2E69-HtxpsipYa<@;`dT|sPUW6_Lh!%4$9REuAnEK4;h+BZ zx(D~hhvWsBSGac>{L3A@&uy2X;s1|F>qVY`+X?O8y1w8&1pIRw7i1N@H#o4${9xJH zX*J^D1qEt<9)Q_GtxP< z>tVbeX`ZJ?SS)}A|5dBF83Syb+!ESOM?Ho#d*v~=D?-$eu?uhMFdLC>y zXQDCt5tr}ns`fX%zj-rXYwse?fb%8u_2E{(y^RBw;n&TpVl6LxZ@c##yTF0vna8r@ z_SaO5y!)J0{eS)(J3zm*NBx=?clqFOQLrEJ1^Gmdw^_Y;2tQAq#;!j#&XzlH4*q7e z1Gyt#`xt$?KUxOI##QpnIK(ED>j{o$ymti8Jdg1Er1ASL-;=!6E$`Mp`^%%eZ^nZ` z@Seag=ewSL$Gp9kdsRD(^@u!vjZ(xOsIT_b*G;oVi4Ql%_op0gKi%@4GJhJol&Hjs z6BYlkQk@@|oTTtU%b?#spTjHh0FN!oQPnZW#|Nh{g$Wy>Qk11D;r&~KP zUTFvDZrU$+pZD6jP=54)pK(OLKW5%Q0{6sc@V|$jm;akfxG)aDUPZrvi3Hk#&d(lP znje&>f^h=gH=I={W#<<-oAp9V4alXKR;}6X@3~AT5RHQoX?skUoPFQfKMxG<= zK-(_8UwOa1<-MBV9XqH}|2fKYd?o+*h20!~h#y+W$Q0lM-7K(Ot0?i|KVez zayuLSwa2gEmS$DT|A=;+1oznUcK#FngXCk$GjW9v`uIX>5CI}F9$8z=DHf@aFqpAnAHU&7Dh|3k4m1)Nh~GgU4N z?z6LZVbohdxt;NWnPh9BkqB9z;SIGSOE#CUpHFh2mkvM%ijwV$FLu=-T8 zMu}Wg4{%(^cLdao1}N8=eg&Q2kk!clqvUT!wTc7aD7-9H6otI=0yxJdPY2KR<5`@e z%*V&Fay_?~=gfDiBMwl#4z9}gtnm9OeqVo|GJlsBpy1!@l5;mx^R2EH#6gss*JU26 zf%w4=ggwaEE9`>y0JCD;@O$FPQT_WW@&odo699%C@WC8c@B6%r4~&E4znf+6yv@J$ z+k<~OP2oMR52gKW;{iCKUvPejy(Vw)4tc{I?Et*?AW4`{$oK(yxfOQdk@Xp6IuynU zT{;dbIOG4r4y;4jKXf|%u7Y>MomGKO7QE4bmgLja6%Rxu{kB!E1OEGc#s5#Y4*!u_^0jqgyYgacYprihG^m9 zU@#sSS2)iQe&h`9bIRB;>`#aD>zC&&5B{A$1;56bDtJb}pK6{b*a2=o#y!oqInH4| zJY_k@jd{{M7y1pv|E!mPB>2bgX9f0$xSIJ1m3h5s#r61|0+s!!hvE#gO@1`4Gp-jL zlZyLbntNG2FO2hv_lt`Xzbx<8gIY|kH|hw$3;Ij;U#y42hl`f~cZ?J8qB-#sZTuyxt6U7b`;mVAzEn<`vU_!0g`0zvn^C4|e39e(k!TKfvW?@@@0UiSzAG7H~b_f(qY5 z<$8yd$Ha4OnfAl-Pl&Hv-eqFi5dH~k@c)d5GyXE9-5dY*@LPoOcPgg|zqESQ#+{k* zKkb&+gKmTSaohiI?k+F26UKq=$2g|kUv&27mmb&lU|h}hM!%ceyOV$Jqs-x-FmGS} znYNP2eN7y%aya_&$;V4Nb_tx%9FIZm_sc)KcPO9cI11JIn{a=MJ&*ZD-{4>?#v8hw z4F6sE-tn#epZiK$h3_ac&WI8=W+;Ao0{6uA7!veqN}yjnukgpWYwW-k-E!5zRj6uMd`>PWIx~+z-oA-^qW+Nbq|%9oT(VJ3^n7bC!R^{<8$$>1T%D$FGHQyJO=3`!VwEb;&(xc$vM9@z3)AK4xkn_wr|%?SgxrawuWxL_5G?I&w}un_HD}`91pw4f88dIDd_u=sm)1H_Ri7c?Co40>`Dl zFyy^q=3x;Z>^^vKlf(aX+U?4JXAfS8>z%i$?lAr!|FpJc0nhHQPB9om`~Ccel);5E z_JICw552=qFi$@Ck$+atdhma9c{#WJQ2!hK3Vz{t#+SS<*ce~3JmS_Qf846`T8Uq2 zE|XZF{5{KQkDJj*dxBLeRCfDJ?sul^J9Nvt+>@t#ts#JyC{m5 zfB34g1IBH&c0h39obTuOezeECu9@G!Jb|oINi0_vHSg!n%lfQ}JRRk;n>FJs&VMSi zvS$7R@8u8bE46>umiwA@y$qkrcrzNOa8G?Q{*Xj}2Y)-^a|F5Ea+%DlGm7K-!*646 zEgSD^5BNu{r=3(!u_MO+s(CE-|1A3J)nq)z|HD0xjV7UAXFC-BM{@SO_y<*;kjI90V?)A0A)$7u@B^SQjwu+M7#nD&Tjx7G3Y zOYA{%jF~Qbe2-qim-gP?IB;Z=l|Jgw8KI;xi00wJkHQ$WJ@Ku)^FpfWu)AAB zO^(uB23$Y+hrI{EKOK+?{<*E!D#NLr3htNSpi-^m3v1d1^G)#YG?Q+PU&nq-*-rgD)|V)GOyXM9?|D?uYj~e# zl%IbyFFPuqk(giyp5q0u55*PcHL1~kz6)TyKz=P(8LupJjuZU~%iovA6^y5rlhC_u zna$em_eXLb&l_dlU~ZYm)K!gtQQpg1ZieXm=7xS2c9#bs|2_wwAMsDFjsP=-f9wSD zetPz&U*kvNpW)br{K|g?_dZAYEipGL#f|(E7Ty$W$MJ)E4)45s-aCHsq-MG8v7S_u zgM)(+`{4~Hsr;|F;ku{_@=KlY_gp}5zWnn_<@hl^XM40ieyI%6@+GvVPuQH?NbI)pIs0LznnP?7(JG zzy={z&mbaCI8gdxQEVpKsnEY^2X;z`>s=XPx1-<{`8FI&?G4D5jQM7d-yM-QE~?N z*nyVc(UxE0E>0Eoh#kl>>`lu*+?&s%{{{bCM(KX?ryi~r{J$=8ObF$I%h*uCv9%|pZmNlBU!7D!!8i_m&pt4gMs~vn)sgh?;2&px_!^`ldVSC?{T@l zzn-_czgc>Hgw0_e2E0fR_JIDf{8KxHdT?;~uz+(8`vdV;*R4NFc^{s6guy@gM9Sp(BCe+0 zhB6$Af5$#xZ{(dcR@edUw!GgmQCZbI%RBpjCjWEpQ|`_Gs&s1(<=^Kdk2xP=Fb=q* zfy)1!hNTjws>l1U8uJIotjEsi@5w{LJBPy#aGm_P9+yv3&dcY2BEH}<68YC4qUH@_ zT##0wn)eIdY2Q)ixwcAk;yRs2c&8Hf?#MacjUEr-z9dcwjr+;9Qxn&ByWAh~0OqiZ z9XKH`aFfeD+-VOm5BGlm2ku+`$@}r1{BM5q@KFBqs$RgmemD46Q|$qH2$qvCzj+Yt zsM+t!H|Jlf@M*ko5%-I}>wUvH{ncw#dp`{R;r?wU&y+_#kampj!&^??Z6Eud8@KB> z;2ZbGI9!E2Aiie2zVZEwlT;|Pl+nrv@PWSv%duu*0OI(EDaJCL)vI%1+k+y{9l@8dVWSu6_p*I(=ZaidG> z_2OMBUVX!YA^k7-Bo9d3Mmvq?R<`dGk)9y$&-;hiIjqBk`VIa^qXYRiZg2fIJXrR= zwF8;+PopgF_Up5(hJUL`?zxLlHlMg1r{#T|*gvc2@0Wln_m`J@St8H;}PX7|#tv}Uqd-af?Jmv+wq4d)x zss5S!+A4lLIpP75C-Ay>9-NQYhKT!n$2`vHZy@FyC=;)9T*uK=>ob&z1FG{3dUDH8 zzuxD7q5I8Ly`zJ#j+VSn;`#x3dilSBSJeEse2>Y?dOU6??n8C?`5o`Aalh8z5T)N> zJiy-(xQV=eEQf#NBzfn#F7)?clF2=BzRUf7&aYD9fBPZ5Gv{0IcLUzG1KbzmDb_&O3M{bD|_&xw!(~$_p z@D(hl{ZNK$>do!`M1`u&AIhoQdA;&Z^IggVTsLZ$8dj+^^{;d{JBx z55Rlz9CO)$^DpQgtgEl;FUIU&qcN{|t8&hH=Ji*}OIA0@*D4c^zfND2%W|2#R9CC? zMe+hKo+K}NG#~oi@f~&A5jw_>X$STLWKINhJMQvdR7-!%?<*j`q-R?R%0DDkgQ;%|w zz0>b^n9nT#g#VG(!=3NQKjr~@07s+IM$WAUHE;EZynFPcIZa1@dh=j!SMCW{hWlFcernt|aXiZO=~&KYg=O&R=>Ma?0QV&oE&t2St3l5) z_A-=y1b*N5gi6%!VHa|4J8yL}cln<6fPEnBnaTfb%K6~;=H>?fiyiR#TAo|(X<)5g zkbCU}_LB9^)1h6$ZSWs{T7I!7H|p*#HvrdJ_CY519F}=^x$_VwYBOIh#|QV9^I2AZRef>G#1mC}n0#G*!EvVYkH1gU zCFgay*IR#;zQi0Y;r=D3m;aagnH0b8_>lbjeB@uAdM{EakbiZv>hYb`0e|pA?)8)E z4Bk~%uM)n?Z|4IIQRaE@ zp4E`=GcC-&FfTZ7;{XBy?EvBTKs&%`CMx+A`tvn;yN9*hyS-|7((+ys2h>};0N>?j zloQ_{3ANv9c`~7X&T9Jm@(E;m!*uNj|>rY)DoH;+C zZU5K>Ik*lUJ&zpFUgU%K-CBPO&fifs{~rF6%ZmATv>UgNyu3U{URy44Tc|QDr#=h0b~F;5^jZonTq zPv8eX4)^%)54g^^?0_7|KjySiF?X5mayr}FwY~P&%x8)AI;9_LyTwn#wI484nNA-5 zo#zgWw=hhuD>#_Qq8xw{4az50SS%Zznr{#&wmR4d}n7llzaB;QI2|s z{|ys$v;6nKw}9T+h($?-fTFewIKYl*j0P4dWj<+nJ}2GKs8K z?Z?aIAl4Jcn|~wDCw_;=oc+}gP?jI9$|cKl`s>*=&bz&?6(2?!#&KG%xtzJ%-|`RD zII>mRi^tJVqv2;m+qlB&d)wc4sXux5I^=uceWHDjiy}X$%PprU9O}<4Z-Rdk9+tV> zsq1M5E8~KU1=x#I?spm7!};)jygt5j$@%oh{ImmX9`<1KXX>FX<8OK{pY$ke=WTx- z>OZHydc%hZa@r?&?$A!JI1KL>=*K3^BP=dfo*&h3+KySz{M!8DwprfWiBQk$@`6az z{(S$I_!G5W(dYANCn@aLbNm|au?MB`{+bj2=8tSN*EEmYe(dsIBh5W zI{Er`eZGgj%qVFSvw&2+5v>|{lw?WJYBhO{knS3`@OoJ?Hs=^xZR}Xeyg#d4p+x4PMk4)pgvH?_;Sa|(}``ArWsepP9nq4po5%yvVUf7j}= zX?|@!4|kZWwllZmHrDd)b*dcZmCATAoRU}Pm%AOn$sxl|!QXGMSKdOgv88f-J zJ@wfBv(LB=_~-h_`wh4Kff%n}k*{y#cND+dY3+b{fIQ-I+nMt}<(=mre&_nL`K$-` zxJ%{>>aRKebLO)WZ>!j?Whni0>;r#qfCvO-esPjVyM8yJJzsVA_V#Sov~tV$?Y$iz zhx_pFXbG?t+~3}=8x^c)a!*`EykCFO@Z9103(VS7zG>Y_8r;*vL%qKG+vIEFpFwcX zapXSZJ*Cw6f4LgN`%Ch&1Nmq3iOTpbe!us^e33f)zt_K251A0DJ&1lM-0N56KkTh` zz;=z2<{zZ=1N^&T$#s3Usf*3+CU^U!t4`_rWoKyWlwbEssYnz;}Ms{Dt$Y3^=*o@dfs$tlcS$ z7dmWz?0ij?&rpP2`Gf&&{}0^TpO%08@Hap3{ucMt|91XP7W_wjVF%zFyYOSbpXqmh(H`t} zI=g9bN&W~suw)07I0C;Y_v7&A>p$J@zs)}sO(;Jy|KmKmqFgRi-1}7iJ+J)px>0Ay z@#RH6H#~usH_uaGf8Yt_b_d!4%nRT1k@t5q^q8+%6b1Y1uicKr&RuUiQ zcYngnXybYU3GIOU{is8@&tn{Ff1e&F+|y5AtK4@s zaSvrqdBpgGO4ze;yQRm2^CfN(?j5J!$%*HUYog2qLF0X<5B2Teb6;>@JomZl|EZ^l z`ycFejpx6(VSF@2yWQ?ofA0Gty|2@+$K-ud_-FUN+!vh4<;+*TOW_}US8`9hovYTL z-248B+`}DlLGOjPW8)${Tr*Of1yMwL2U&}qG-zE#`S*hVhW~~Be(~mTR2O_lpNU&4c*Nh;U^tlZF*5f_ z%Q??;uD`e5_4mxf;d^xX@2!_4=Ij2bt|xtyw03|zsr>KKKY_2sVp6K^x7GPD^7h6J zJ(sUi^!B#>ZvTYwPdV=}%q#bc|ZsVI0@^LatYv&}B2;@(*_f z_J;P=+JRLb-{Y{HA7Mvxl{95pp@hpHRJ@;id)rXPZmh`5s8r+IO8v+8|3-(4IzOqH z_kbOTbMp@<-?wQta?ftq2kZ>yLv8qw^AOE;83%!H^LzMZ`GtG*HU5O<@q9xk@NQY2 zhbIhkquPNYSC_UymJNUJf0tA(}B>U_11^n<4EIcfTwDv%T)F+^;cQs{L#g$+QDpXOUCp{=*KC zKgx3L0~KAw`u}h3aG=WV%$s8e{NADdpYmDoPh67_&(n>(>!IO~u>;(1N8Z6(?q4pM zZl^|m2<5O@4?94+Fb<&KUli%fA^x9!G>ZRg^!Mk}@&lFl!Et~Wm=U>m`&8BcvNV?e zsN@Ck^YV|quT}E&eM-?Ex}P_s9nen5J?R4MaK$`r$4hwF{^8dV7j~zG|@xmbd)4q$h`CkB%{M$dQi-hm8Y*yy;yf3*g zFlZ`nkbXXTO&k>vJxZiku z2&X*0;F{YbjwkM?-=TUQxi`O}8V?rQfzPx9C=+e!{b{ zMAKH`-u6vJoix^^YY-2c{pG&l7H&0q5Ykax0qFJ`L%YS+nw>=aE$Nuhvenu487ug zrLKIhaTLM5{R7Gw&57lV$75H}&hGi0%3|$6Xn|r^=GcKR__HiGDqO8vyFfp-sFC-mQM*KhMrcmn^um%eu*_Z&A=dpx9U9(u@n?E(J% zWq-WE?+;%@-UJ=v59MAiRodUgIKcc(s`A}5`9By1;)B=*Tl1T?Xg0Be}O7Y*qiieIGZGYvTaNp|K_!TT)hR4kA8J5+dY`6qwe+5!A_&Uha4o%HM24HYSq59{Op z9p5id*)jRJK7NH`wTwAg*2l>Qwk!Ex@Lqle?_O_lQrn+@?R&g5rxHD3`fF017UuJp z6})@=0%ba8F=RRJ7oOqO_7(i*Du35_HBsr8ZdBuFb@oZ9^_*FzJ@UTP@Wk;umHuVe zkrjU0GR@-NZp8Ms5B)xVn(;s0)3HB_LpvP>$~+!2cfpTRT8~ z%;evECRX5i`N0R|`|~gO`$K!xSH%~17{(g4KU9(Tqdz>>|6||D`#Fz?d7W?jf392Z z@gqBM{x$j1wb~Fz^uEqth9CWU_>$L8`*KZ~l7y1b8^XVNxgOfbKg&Pk0*m3+-^;zj zeBu8AOf|mj5eK-R+;jTi-?+iDc6aOl7tRCVHnNKNANLsi7xiLg{o~h}A7OldOri0a%S3F3Szu(;Q|4uRqJHT;&umkYl;riv4)8nTT z-Y1)Va?k%?>sNJvnB#?^UkDINf=N z5wFj%7nY$o;&jY==pFvp<(QZ7<9Ezg(XZ2==*T&brK_@AQpexv;qUQb2RP44d+-mf0x4@ucz>SJo)%f$PW^i6An*? zmN7#^%IHLY&3QMiGX5yPl;xkxOVAU{OepTDh_d@@SFjWL>Ckb%GW2d9<-a38Cifh- zQT5~UUp^*YK{FbL{L^jjSF}Isg>mV^zYBCz&|Y!(nf>=0CL$E{-)-MHepr@4$agm6p4%lJXf?+!cz^Q0U;?C^d%Pa~ee;`^jSqS+)9diZ^!sruS@3VZ z&pZGZmcYODE&m*6so!5L7Pa+Bb=_9@f6{#8;2%RH|HjQd>L0U4Ubc6(z)u_B69&}k z7<=+I|JaW=$yM6=XZRoUJ|w(rrs6w6Th+YCE&heSGX<~Cr;^`>9pu{Yf$8@#gGmDS zT*s2-w*RqZ?CqTGosX{)-*R6ZXZgBShFJ#kZ+kEf;5M4z-}`}o@=@X6xs1$mNqdv` zJ`=c9?V{>(c_%LMy?Olq-*+Jv06YWx{KI zHaz<+_7puO?^lE}03+7}>{{?W-`!D(R-)X^-VM#UEzWn^|82`VY3bLN8Ll?&ClAmn z%{KG;*xKtoV>$g$-oKg8%}d8PVaq@Lck=T*_Q=;Q3jKQVyo>*qV@{W72VTEk|JE}6 z9BKy`MjQn9+AI0zI??AH>T^i^fJDE*`5^Akbv8N5??&F&YsPI*?Od+n|MRbhUtI3Rh@!yoN{_JH-+0j9q=?nj=G_!r)bd;<5_1Ag*PSRDKl zZy(A({gH{>Yd_FaiwU=ia+CG(vUIi^9Y^lRX}CLh4{Gq3LhuAkEJt5@0wzMlhd z+5zf+r{{jn8at3iKS1umb&hI>3Y7SM5&oas3jS#}!N1?#lmBQh@P6)hCFQ+;v!~w9 zqYU@0zsKDN{|@iK`4N{fgJ1ds%~YLkIreyRO||m%nipMFUHAfx>8V97x8J9X<73~n1NblOLJ|JICeA0k=6%-c z^!)t6-j=6%p?|f4h^tBW4s!a{eG&n~RwLizY2=@@75zf&19`UsJJ50q=Ny2taYAqm zF5%CuU-}uRysx;D@4Ic>VLV^SJvSQ4emU1gUOko*Kh5CYc!2fvKX($^XYfA{KZUGBkcvtJNdWyS3ZXdmEYpq>Z>s~UVU4CwWMAu#`PT+k$+xiyiL(A7t&+A56oxj zzxBSx?Ci^bx0`k3o^jCg{Of{z01r_APlc)+cUj0kiAwpWR`cP@{KW@c2xa5@HV&v= z-sS=1okaQ@)i_Tbk47W;hpUOYS{)wf_jAsdyr_xy@uSx<-nXfl4|FgZ4dkD=V5L96 z&5v6C;e_X|pC%q8zqfiL_p}P;bti1Mf@`>EppB(xT*gY?ttXfBxT7Di`~ZK(db_d7 zS<3S+my}Ow4~!pU2eeCYOjxq4i-h;i@9yNE?K*0Q?a|*aX((#O^Gb;m<^;fM#6j}E zzWc5G&-V8A94qB^o zxQ6DV2E(nNr~e1<_B^!Y^Hs@8y@Xd`zO!?V5Ra*LDHt_zBdwhxS4kvy^YP z@;y4^`S{+J?=8wdPn&*4!E*9%p}*_PH`~E`VLQ;z^L`NRKkPtTcD$VB^fSrJ!9V;o z+5z*C6@H7)6HVnlzE6T;$EWho<60N3A79FUG2uRNzvF#*N`HXEP34_DU2reYmN7r({T=^z9#Hi6<(@d+@0u`w|KPyqN&5=^Nhhv| z@6Na_^EGD&hs>XWf6`46_xt{@cEIm$$@PSZ)N+qm8HB&bUZ~$wudXM5GE3-Ba(zqr zU(vsodk$~^|J1*mB>&WMsQEJO0J~!sf_vkDkMx(S{xN}T;+F#c_4APrjN=jSFDT1D z=HxYTKk@edSni4U$?qkOtCOcs>95ltgZt@>@h^0T2d>}$#U+2Q4BmO2ds?8lgEnsu z5Av^l(|f;zqejz%WrUxJ?PZ-+pTw&b6fm<9h9HjZ#Fako`(GdxNZLqXKES0 z2j|4|+z-4j%g2vZ%+*Tntq*nV`N9sMAJ-=wK36gO2NmD5!ClSdUw>e^WBdwF364UZ zXn)v&{Gwhg_`Xx&{14{OlIP{TDl*AgPW9$FywQx773Bd20FAi8_JTDvZX}*#o{Suq z6aFqAd@s2#6+32mN(IDn`W0=tRl@x!W49i=oX>4yPr@!_l+We_)}ANhf>h$`O#ZEZ zt^;SvlFL-{v{BGIWfdYHb`@)W?{9`w6tGswwy~r3)%h8wz^|E-;;qNi!!~w=n`HSI; z#ezHw{O4YO%m*N!jUDi~;rGp_!~JO7j`!)Wlk3Xoy9)ltgMr-hc#DemKpYbF>-FW- zGu6J%wey}2{^e8tYnqwb-~Xor`RDcik$kV1z#7~)o6p*Lzhu1N-~C-ryuOxy9xr}B z4g1gjj05#=<=^L~+D~uoK-o!|4@7e*EgK)H^iyNKfA<&ePyXQ_!p}Q?ePcg=!u6~C zd0+Yo%m<{xz_Is#ufaF=15ULAeouO95AOF*Ka?|g z{}3)Zav${)+|NI2`KKN%V;@8LNBX3W`Fa)KuL~~VecFXTzH4Luq&V|CHpH#`T^{05 z{CUCn4t_}P`Ke{b1zj<3)_(pK^JMv1z9jHNFT#Gn8{swm?T8z(2Ni#3aEcwa<^z8EMQ#jvCJs*HP~! z&m)KT@kl$s^s9&R|EpjA@|W_@?Go>&ejjBj|6G3-c7XP&j`dsczi#Fk>hqq+zwusc z2lx&OPrK>CJ^hrWYCUQP zRM#_ol{mpN^LyYQbLM+D5y#8D-3_?M4-=oE&I^`%%=uk)f;Qy&7+=Fr;J1ro+)ft! z6Ib2aftG*fJIa6X9(DlklMmSqO+S26et>_kkLOf~Wki4f;S65n9yBqPQ{Cuk4 zkGP-BI@p0H^bh%e`Z00FPV%HawI7*4e82x|xr;ns)pFmJAM%&H|7JgWnicTQxEUPf z7xs5iz7LZp@WcH1W~TD}NZ*sWBL2xJ$NO*gx4jPIZt|=9^3UJlUD%F{GfGjm&;JhNGRPh>{ZJ@+;jb{y`o-jx$284{&mRp z-V$%-i~|y-Q(AF$;gzVG9Lzp?}Hx-b7e-!1=7^d z404pq=&Rt5-_O6A@`um059GIa൏u$o87pO_E*IzlWcQhKlOkZMNW<&fqwN}9Y zi`V39l*5)}!+MUh+ut&pb)(0DmWaDfga6efW^`!vDjE|Hr}q zL)Y89Mv|rJo`!mp6IO1(*G5Lpp$NvnVX9}BqA42TRo$KB`md(D-Zbw9L-Cyu#& z96RSc&-q^1$Nj8-cu%_uj5v{T0E#920My9&0Z%jH!t$Tf zA|2-&4`3j`-^aYaNPX0~2;n?G^aNcXUrGKneaiZb{nT-0%BMgF7>0WX5*P3JFTZm5 z4*XjF+aERE@!TSGprap<|2Z4*qF)q$W?pSm1kb4l@OuQXGL1hVVh(=t${70G>=y~5TU!HaE+wIu%$wlmkgF8-tApC)_D}&kj zo$U%U7XBsMd5%0`T2vtq7F1o!*_#9zH4JYpZP%OLJr1$Dj=^zoIsrE4_qye80V!Qz~eIc-w^nd z|IeO;{bycKJx2$wrgcA#NZcXP&Py$s2T+z(UEP#72M6>MLFbD(PWV6JA1;_5aQM5& zkLCaI(JJQo{@woH|GjZ7z@0OJ4SI5-Y~j>J5GV;lwfzow(0{Wsn$@70yyKYoO`*}i`talj3_#Cbfn&OyRW z??vXPZvCC{Vdf1c{5}uuL=AnWU=HA`F?lKes17A zqrK9v#{P}v|9}pHyoYzg1fDv79G?F3XBbkE_}CdV;u_CSXF z@iWi`x>2q#!QEqj8Gb*;zWDnc&jbI+3)|i-hXuUmeto=OT_WA_SP?ToTAkoNoKHJE zE_olC-+2KBpHB<&MP%wCKZUMacu#)?Jtw~Jx=%4Lu><_?y#-;oH13}U>p9QG@X}zu2FX%6p?DK~JF#iwx zx+=lnA}|H>|5xm@Du0*AL<(Z{g7@a6h>XWFD$<3FevLHwKQjX9YZGo70$w!u-nA zG`E|Up#$8Pd2kbmTzOPs7pD%#(_w*=ilw@`VXvY3j2=kf$OmIdGMR`v(=KgE*SHe z;eW;Bk~)2c-}^|rAJ4*SkpNr)rZ3Jg?BmeVR(|Ir@8HG3vc=EFm?`m@9j;GMxVv;ST{nhXeSo{ebtybNE|{G?OlLfc9-V=C6TcPB1;%{wT(HbRarcq6^wT zc>na1ed_IL#eOwY(iQ$fS6Ao&_N88k&fDSmnirJ!KY$D3YQ_;0_^y8vsDXypoW3Wb z8dZ;Yu93#C4@B=k=nZ?*f95ffHVy#4|9OssQNVMbPda#B@IT^en-ttqk11Cg{}dbR z6`T);nfAW4z(LA!8vLKnzm)&{4dg%chyN}1k@tf4s2sYmkRR}Raf$3zMARMxW{TH}ZbxPXr6X&G4e1;BO$iEc+qu(p^fO$o;c?k~q0p8nxAT81k zcX~i?;OgLD$T|Vul>YeQs=dHmVvk$=j~6czct~wc;p3%o!4#gVFF88ky2upX6A!s7 zz;pW5IlMVK!T#Cg)xehm5lx_Vx!3lV>&zhQhS=A{PWuM#&iJ%{&C=g?aI zX9^O$CvFzJr+J1yPCc#R_p>|VhzY-7?-~(11v`^xgstbn|BUi~_Oo55_%nHazPc~3dkJ#M>{Q?kqV;YW#t<7`lZ0w;iAZ zFOP`}FW}dw+*f>o&{)6G9|u=k=Fz}=^`z(h>=!x!V=)V~;tR|P{4W_dhmT?z?coA< zU}Jhi|Gp&NPVv*9?hzhbSRekb{pD`qcT_yDTP>H|_Y}8uQ-ZF$?(wci@@qQo2fBX+ z?U3;YTAIACYwQyCp1&gO6Z3XRBd2`Nwv7G5X-B7ozYb}Krz|V|AnzM)m|i5IU*N^Z zv=jJm8lL}z7i_nL9}qfF=NBpYKWIc=U%%j@#;;Zf-0!gGzw3k00qs8T&HZNbpM9v< zuXl0r4{R8kTrMv7xk)bDczyyumsQ&(@D^Ew|H&C)lo`CegQUy#-q-*IyO zkoB>@&wdQl4>A|ucY`oy=jUgvHs<;I?<;^ z`0jBEl=EMXaA@H@x-cKef3g*ECT>3<&SAWPI46h>!u#i=S1;z`4D;O*H|H*;2pzGm z*nb`bK64)$`DcGwq?qV;C(q{iDd~=vJq{9iOPFI0{xg>cuN@cbdC&O5vx58GzbNEC ze|aF^#SMHvGu<@j>lD8jXm4}!!+jdZ?d3my8^7zKK0<{?E2Qq@ZyId5Dgza}Zv|{vGk0pX@ojryo+lTZ-|&>~OO~{erXZ z$L)P_mY-4G;~bu=cOu=)Mx5;rVm~m#1L#e9<~#$Ri~N!w?Ei!~)&=7P@YDS1?|%${=b31HUY=6SVYlb?lP5WLy`uu<^9F&I_xhhA?>`V3ZQ&C>#j`a! zSJdS*+Q&Kvk=q7;pvFBrN>6g`yKY4PxpnZ$QM0+GoX{cHZT`?xLeexXi+ zmDqvy^Y|U49okMQ&b8PyeHt1zq%V$eVCAp<2$AW@@LYZ~Ziv6jb*_)SA}%=jr5{W< zYvggvXZ%hWts#9uwoHe91R_x0k8)5KxNjL~cdaBpp%=CXHZm$j+J)_Ja?E@*c#b>$ zL7c7*gZ~@+W7{D*)r#f|7RSC9;@t6N`0jkfK!id5`yROXkD9S72X34F)8HjXpTZX~~x!9m!2WHmGW;RE|bgV>`;Q%$Am zp6}@y%goLbdGGszW3Yw)nB$R1lJlRAQKQmz!7NHg^K#lb=LQGtFEce=-)isRhp0v$aUx&5B^pZQ%d>YIH+ zO-KJR5JO?Rz)ueTL$}0sj2Rt@W7pS3J0B#J_o?gVlgkDDh%WfAAJD>!dccL3?J4U~ z8Zh*O`k?>G3GfKsV^{U3IWLg^Xm1_QKS}G!n0g5N`%b&>S)l`>{I?uMnnU>ajL$6P z|9Cv!%6G>DMD;@SI(g4xuMC2{}ZFh42kE#;rX``K`?m!G63>M+kg3I7XZ zI+pXh<@eXLs*@pq@_#U>XMK4*@c+rca#C+-r_t`Kz&`$GzD+YvXhwNkA64)kJ&@0b zIEco-Jx`o~1&H~5;Qw@|1KRZ~?TVKJk&}AfY`^K4U+c-SZ0crlEa`1IB*}?9G&c_kwmeo*YjsZ}r9a z<&ge`2+uS5@BStU{D z9B`LLm(T&qABW%aR}a7w-z)j4e9;45B!y?q!2rJ-=QtC!!(9y@<$K_G%sfMQPqyH* zNPWQLn)zJ?yym=(d}sT%*#qw@e%D_T`CSbCC{D`y6@o3&-y0Ms`3d96AFOY}L+3f| zfcCsfwEJ8A8|^>34f0;m-pJrHb+o~1;#iVdH@fOsYmwRa2_5y!i8Qp{qXp)I5>FmN}k{I z-ts^64z#?yAM^Uq1Lox;m<8>F*X-nb)qM!wZ#Ls`PTJ?obDBjdve~?GrqhV0f@I@3 zrC*A>1MgFKiGL5Gt8;k%pLlQi4h|}h6Itm*cr+7@yK{HvKN7b}PY=++oc=DYa+C&@=y^|E}<_Fv4ypx?=TD*Q{@AN|dkzu4yW=s(85dYZ9FXs=ZEWA$@3~&& zuhrg@4kYbynvFcUU|g?+Kg54FEBJJQoj;_V*sqJY(D>*-E~^W5pvEt&PGdd>_M6>) zk`f$^Tl_e9{?2|OxYGglyNmUf#?fpCpJ1MCC-j3^w;^uB&Kw*Ju^&DU`+if!^$XJ6 z#{E~kFSv;BqP15G+Cg2DPueevLH=3KL%g-U2#5SSxrATy1PnhOoN$5Z&%hLwQ$RYx^vtUvyTUpqupX%9Hc+`7l2#PMR710MDnJ zQl+6!*&glS>>m#w7q%Ok{OD27*M6TJ!d}D$3)a=|?FS}2fb`?z zp4azx=oTC7>cAYwuh)Ya z{9e4YoC9f5@_&VJiS<|TRh{RrJxxz0v^RACa~u8ub^@J9ev13oHStfpK&wJvK@RD@2hvd4w81n$y%>}~&OZi4pyK&K0jvrU-rx^Y7iLWbLLUe9>quadBj`Lg}P7&Y^T^`=0|rqemd_vmH+lP0^Mi=th~ zf1)R)Xxx%|g!dFQ=zAuY=sAYe`qUnY%vbNM$CCRks6YD?)Dygi|AEv?k7uR)=kI5< zetCcDISb4$lDZ0>YA;LmorUs6)Gu))_{_YO#0U{gdzqXl6UUGoHio&pu=R3}`$wJgTXxf1I8J}?4h49n7>-sPry%UPb+jB z{xL6a@X4!@NcVU@A--$eF!X>2wCKQtzxp*qmhXdldnbNajUUN-%SGPP&5wRQe)zrZ zf_&LN7zbrsi*ZR_m+zEfFLB&FetgtTZ6`~bmB_r{sXE|!)eaZhWBo{Q4iQDW(csmV zaYy-kcg{FE2w&Jo0epuYlIPgb(zLo_8pppPt$h^9-jwxK9B<}a7xS^<{muQW7ylst zF<*Q?rS-m9U`M-V-u0Lp!DsekW8NJ|w^?3a6Q?`K*^kNjeSut!*{A(1EY8?*+PGJW@ki^C_z&Y+3&yGS^NGjJ$REgiWTNjG z$9WIY`JV7w{@dRVT`55CD{3zbbR+zJ`25b})Nh6^^t>;p@}71$OF`>5eVyNYii4Kl zq*r?%KdV#b9T|G7uYfEf7=kTBMpB32o<d}kWPR^;))e~P`%U#B z6>&%S|3#Dohzv0AtYjZ_{6BS|S<_#T|JyrtVNjz7V2me5zX9EV|D*4>_u(&K@6`h? zpS9{jR)Y)u0^$ki!M344(Gpic_wfU9I3vzTwt784VB~+47wsaWKLhW>PKchT4$w_o z$^UycP8AssxYxhtx<>xf?566$p7*_4;J4!_!+XYu;CIhI_o)gQ}e{OvCI?fv1q_E_EOVs;45& z>ab)UHqB~Up#x*|u!4v9%fU~|rGwYZv)D{Uo+rv@CQW;wwCluw*>%UVG(v_>bzq*YFa&9OL-sAp4G~1D8ClOyNB; z>A0?Ov_75#FDmMhValci(U0Ig=05BBUM>Tx&7;72`&}RtRQun#GyJ9*RHW5|x(fSW zbDu~*6LCw_gDd8rY~+8;W56G<-`w+_@A$kQ&;d|;AMrb0GZ0zU?mx%MOmh%9g5U5QUdwm<`}^QM z6)5lN_F&&Z{^a{wyP+S?hL^#6;)tZN<6YQ!RF(PV`4{Bd^S&TovEOM$+T$fBsskJz zsRKM#e}L;7zOy1yo?u2GrexkJ(=+KmR2*mD6Lf&^-dEuB^225<4l?2gp$mIMbpUr@ ztqyoU;|J%j?jnwWKN0aoWGMVUczoAhJn;Sj9Yz z3GsYTyCUC>52^z^c9y;=ZjEo29LEium!$2-6mQB~wkH`?=s@_r?9Z@VG7t8;WPeB2 z1;GCa9cuV_xvhe?XA>5#%KMVXiuQlx_1&w31Cd@h{z7#&x!*ooz+3OzBk>RIJsA{% zjN_Nub?&boS0c10UC{5?A=ek2Z#ynI-ogL!GQXtXJazu)=uh-xL0)UF-KYH%*X;Rk zf1hkd+;6!$I?|q>V}IpqANMb=K5UqeewAzY*-t|pWb&8l3wy4gE3XN2sTa{63hrY* zAJYC#{v)2xbtA9Gj)eWE8*(K7U!0#e@*XoeO<%X)LYEb+|28Svr$VeZ6aJ0+wBIBb zOYH_Yp&yi@1MUw1p7I#_=ZW*tR@(gzLoFiH6ZubEvr6DQ`Pc^Dj{_%@@ksuAT>g{R zuYZmkq+kD><~5N2o9`K?#LnZ5u(mAQLI?IT`V9;6zp$T`Yt#d7Go$`l=W)lppVsw}4ZJ>MT3U}mh$F(et^*APp}QGcMJoX`Wd zhn}ee%%eaDQsQUKW4vyu4;nbw$un?H`)lDne(Al)W4Gu5ex3YIZXHL_UX#qkj@OsJ zG-K>{`x?JG5dRLIx3BScwu`?eZ@f>B^;Z5j5Txa}>z}+%H$a|Ow0n`_<2y^~t^JG? zT|ia`;2YwvANNT8y-DBj-S0v1CVxY}=LL9c{G)>Z#vjW!)h)N*R=4Htd$L)^el3ja zg7^*Z7uVHg$ATkq0#DI{u*>q4xWH8OJr<^$2CQ6%ITxLWB$B-Wcsb^^tINgNlyWdl zv+e?kV{;$ucj(Ilo*D0p=TMM=Tvu{G+XFgq`M9m(`w{2rF8p`iM)1EPu#ewg0>S^1 zm0cGl^Lg84fgK;w|C6tWe0L?sKKJWobN0cXuH-+>W9xBVBlgR}jfCep?SSucaJ}{K z_0UE8f5pB$o!D*Qm-oXy;P<9rRxe0Tuvei2yk~OJE?7rI#B%C_En+>83K+D{F%>3HX!|jWWPiY)a{bE0o8LPIuB6( z&)8Q@%rbr_Zg{S45Rb^P_rwwC7wiq>zkW?0Kb)xp#z*#O2aM;=*Qs$o2%f<6F@N&@ z9>-Z+O+b$07i$0Qe`et2$^iB?>z11JIwhVq`hIF0{rY~6e+_Ei;`n$;T)j0O7yBU^ zj!)q`ez1Ie!(;pon)qFh_VU_&<5Kuf@q`Y%qnWD*@CDwd=s~^mJhq=0_1B|o z-0uY+UIyX2{N_IBggj>%QWr>IL40)%@8708XFHewpA3hC@@?@3y3DIL;-m)LdV|kekK1xWRz2^cE$QJP2`?i-0 z{Bzlg0`o`~HE)(qk@$riJ-PHy2LR#%L&F7W;{p4VOAkT4=r)lsUzbWEx^v?r7h5zzB z8|3hpe8;|7n`K)Dzu{jI*TJLSPgr@JX$Et#nP-F4-@nZEa{T%VKU&`7*H3!8U(XZL zzPCDn-CHO41FnCR|MW7@f%Y5XoSpoyN+$YzgS{u6VE+#f9q0c=yl+DLAl|2akoUfq zcK^Fa_v0M?t78d#M<#l^Pkn~nKR6ivlK1>Pk$>Yc^K9WYy7jP*9Dm?vzn*!ucki)_=ivIrIner!me5;x`P; z*F7Cr`R}~Yl67vO6Y!s(o#*~?|5v{{Sit{RG-z>vU6B7wGeQs00fZ*e57-jlCqD2w zev>$$9f`3H3En$TI0wCdN_>fU!kO&}`VLa;3hNcuIdSqW1)LHu!@V2j#?PQ@t{*P( zv8&8um7lk>fjWRaw?4ql$NVRFct6VD%6s~Offz)Nqoa2zX~NBMUc!fYJw9DgUmVw8 z5Rs{sXn!K-ckFqSzRgL~uLq4E2L5OGZu$rG9Ar2G-sf-h6Xd_~>hf**1~+G;4iJw- z52{<5^#;3tOS2e)*A~+P{&(~{Mg7ar0otdC|2q{ij{|u-;Jp{}mcPYiduIMy(p;}D zz$cqvb3_~$9>*69a>HSJdZtLO5*!VrnZt3=w< zzSnh3o5)}5A22RTd~fFbRF2oYKX(2~Jx=V`-^uILcrJ1O_FH6NBi|=nsNJW#QTNFC zq>qk{Hyow^QBFyJL;rl0T(#dYuX|4&ApMW>Kl&5F|18U~``m7VU3a_=`=7F}5cv;3 zpK%6wul*IHonY_p*k~w+S7Dz)bYU#-UB@aPD+nvr^o%*qepBB~4JC)Zq`@zxs{- z|AhD$yg#G5hB-Q5f3JZ5xN|Q=`~&tcmH&B)-Z4vzE{YCu1Kz}z)gBIaa7ir6h^!E(h^=aypH1h|* zKYsR^$4kn!Kfl+HF$;n?$~sWu6T|`JbxvCUHYGjePyQEwc>MbX@f!{|74bg0&5ZX| z7s%RBKR&L5=lH`-F7F|Nyr;aL1>z6G_8a;O9|HIG5AxS(#Cvk%_wc?){5;b5`@6V) z6KSdi9l+jWZ{$68bS3Y(E_ja{@TisNRfSH#^Zt1F{T{E?P0-`%RYHH_?moFnF9^#V zC;0!X++s~&-ar8PctfHrvr)h-*H{}|C`_Z=6`m4dEFcw*p66d zw9P?eX{LRFZhOUb0ir{<1>Y~ee+A+<7HcoV3@AYy6H^i|h8%b|Bwrm+(IM3V)7t@)i7q-^o|>$C^q#n3=BF zCxUTLkmVEM7wqp3_S6xd@9}tUpngDg23_b67$0=r0OJEOKAE3kSLwgyXG7j2h5x_* zNA`cg{{QZGM@JR$Tm3ruuRa9-*+(wd&XX_s?l@rZoCof(6hAQWR;2yh=kQrwl<#x+ zAd;K1NBWJX!~Q3)&3F15X18sX!hhm)o%VgXT-NfMnU7uYoDNWrtFZg|2yi<`8nmZTJG$B9oR6Az;SMaKfwOg%jL8PyWjJFjy;q2o6Qg5 z&lB&6@jA;}o?{huJm-I;&BxDJ2JcIFPd#&f3BR#};F{}m5V;NB^E3MJGyjcC$$LJ# z`$4|@ycE>#hzv(11^e64KIZZtv$HSn&-oBhY5Z@%Jng>!zZM4^koPmt@j%*N%q#T1 zk!GAnB)pZ0^%LUQ=)q10UfREa|L8 z=!u%I}hVhrJ&?I{aI{ z_jaGRTY7xDnT+K<(@%o;WP3%uoNbP=U)0-lN*tW}YG^MB{WzNWZ~^Zrk5|F};Qa&t zi>u%No_$^M1CE$qDF4+5cz*RUx&_`W=}-55Ir+nGkJb(S_4ZrG&E+-Q=!`_?`=yL;&Uo?LrbO(z+*W9=O`90!({9NbZFVL<*#^nR{Ab_W^b6eVjPz6dr*o0@^3E%GI=8;yKYlplgXL5F#)$v3JZT8;pWidFuLY3{ z<9+%C!F!5TzCQ=c9jXs8t|9*!USNME*O5@Z@E^T$9N@(J;O(Cb5e(at>5}#YfW;Yd zF{t4GJspzrmVHb41Fw0n?1BFk@pH^=A|4-o=;XiqJ*o@XjctJrSnuVV;tk7L&I@=A z&FHt6Z;+MH1Nxu$c^qe-RnKeYVV~)ig}*)=9=v$qyJ&lpzkWBUQYZL(z~J>5JIe12 z1FzKqe_wE32ZlbtL(kJ*VE5nP{xtHQpS#7I7F=!R|0@Cr^1kcpC-S}?zzccLU)X&b zq&%kIwFl2H&zqj_{x0wTE4*a>e(U*k11iyYtN7@6SuN=A%O`oi`tbMihloUb>?{8RofCbg#Z7c zXxrZYpPwf;>D4)Z^0Y(-;rln3r&|8chgnAYFAZ@ok$NA(>(`$U_XhC;X3XbF!tN)3 zO&PBx&P>|(^LLu(QG&kEul~^U{?p()<^x_Qj89Td*mv|T5cisSfb{ompRpcb8}kBj zGrOF5fx{v8lzG9%0dw|+m{P!ncAxkV_Fkm_Ul0e_#5g{$Qx))Obv%BgpZ|pOOL$Lu zT*7zagQmTLx}&d5?jU|3io<|Mdr)Pi%fGbO741k4?!qMHala zU)S?oe}F>dJDqJ{J#X0;k^{Br&%uOw#9QMsU_4*`^B(eFp38skAM1(e_x_#ji}#vU z*nfYQ|LPt5Hr;^N+;%1oc(lm;?JSPdT)^AOW?2>Z)42ceAAKMWDXOOxdf<2re7)ti zq{}yK=l8kDHX-yY=$FH@1?c=Xc}hIvPRuM9up$E@y0QHw?@2})_j@AWo9%WjQal{5 z-q^p9{~V7rX6R7`-zyA!3;#Jjk@wubUfd@Ch7PP+>_5$NEB|e_zvMr+G0t}x?fGBZ zOTyXfr04x$he=?TnZB&N0r==}8Mw5g|F7x+{R{dBoHkfs@9|HU^1tT&sRwjK-s|@h zuLJ2G?aP0b3uUQszsE;M`u$7oEb)J)FL#yxf77f>;sBxR!T+{3UiXTD!vfyZjPcKN z_QPac1^$y>Euz2P%-g?Ux9N|zf8mIK@So+d_oD4rp1n`e!uGY z!%Mh2)(^O97bScYxx7w6y4~CM8|M2`zUqK+y0G`83)3{bd}sd)){`?{`D4zy(-mLPvm#+ z^Gjs8?68dfL0PINjMu<(#sSwn4}NdHoXKPS{LlfvfBs1OZt;mV8SJqhr0|{FuT%Aj zdXWFtQxX13=lmeX1-fY^^0xr-?*_4d&5ZVRvfw)j=rla%`Yrrs-{d*-1l5D!dz6F6 zAJRK?|D?U(zd8&5G3S}~pT~#&R}W}!m#kZwmBIfe_AgI<{j9EHeoXyO`T^ws(E|QA z+jm{n$IaD++miPcYltBpwPhf2ylI6FaNSCr&1a6s-SYTMJ8axo#NGH(^!f$7ov6E@ z{g|Eop2>giL%K(G039cdZouObKZ0z0#Qopw578}<^q%*{t=BKOrTL*h?XCWzyr()w z`ujBkAG|*rkCT6EnHMPk;V(SY?(?}P^?-4__l)1cXZG{(_X+ot-bPjrah6?RE06pV4mQKhF<8;*kEk_TTkC!GF%P9^eh*ed+*y72`AJH;4DO-{d;I zWZmFAy>6YK&v>u%e~*q@<^gyg`Hz`7ui(Fav;4oqj})nA`u~jA4+mKa|Do$ryFb`x z{ujK5t@Hza=0DekA22+a+b;-RNWr)d{I~rk^b0ol8}R<7Wg?#Zr&u=f-tbHNO%i+; zIey>spZ-Gd|H0nx_`hu$`OkS<`A>a~g8#^yNStO{;0Ms{TH4d5^oY{y;#w^d; z=Phx;jNK^O=Onf3abJ1Qcv|=Yz*ycR4_(jyFGC-EZo+;R_AB5$QN7tLhyU7R+Liu* zaXq@f^|Ti35=HVt#IkU%>Vk zBhh>=;QyS0lb7fCNg~BT{BA-2obOqH=0l`g7Jj|+#!J$^ulAkh)u{u-*Bbe+&R6gq zJ&Eyt;)Q#pwd?d-wC^+^c#nPGm>!Qmh4;q$r_&akzkmN8eqZB`&*incEz*sLw+rHZ zU7+*yOgG%v-}STPHK*0^-+6kS=`sC`U-185$#&?5^KaVA#U<19cX5ESmH)^1tMH$B z$W>ywk3OAja}axeUch(lw7f^gUWv1P9547!KBpq~wp(ETn}+>W;6LqpApglu%-1GX5heX~b9B>fkLD;U2c4#0g(+ipb01qaDr zlh>2UXP;^Rd94v%zzvUC$^V89tNja#Lp@-A@EALvFn@4~9}xVvzaRV-XASG)wfE>$ zDx$;rj{o}q%4d%MU*qSI0{R-Jc^E1!*3~dI9?ZeZSxDPsx8?^8o9V_IU!muvgDhkoXV#(G9qf zdN81TQuw{ruEf4I4|*^jnZ})p;~DkJc_+gG^JMk^d68ZG?-Tuhs<+nekj-Jw`-b@{ zB|LyX*VSc4JCOgl8&Bjv`Ig_;?{-L>4&Gx&YxvA@4hR3aoN@K)_ISnjqTyZGTl)$8 zAn&c;1-vHv@cL)o`#$oY!}tM#5#Muugnohhl{9_xSwhA!8`+zc0N%D2q%RO@Vu@5z<7tQQar1)j?1PfYf6O!Xy}f1| znUUu?Z%Ewu0dDR8^mw!&&A18IEzs4;r~;Y(Gp9V!mu_bHI*%%l3|sEb2Q0vYPlo?c z!1q`W%(yJoz&wrQn&E^J-e2LB_VYE-hxTf5Rq(gCs)+mj_HlJpvd;d)v}E4SngNy^ zoS$P~(E;a!Ha>5Vj{rLx!_x0Dz&jvHzU-Y#fFpaqXD)^7Pu;V}L zmBJ6$;0L4^6@MxI0L_5xNSy?>GoN=Xc8A{V1s@k=w(6bbt#|{)f5w%rwuhdd%WD>({sH zgLXc5pBo;SGY&8tqHDzeKS2=mGrd3jXMS6@uN`U*_W#cI*zjk2^?BNL;!nf{7$4{F z7d*fA_g%UZGuo*07ZEO_6UFP?{)j^n_dX^J_{XI-uD;kY09MF%jbg*p|4!@zJUi{SICN-`loKlK-o{MjlqaCvMTY#ec}^%~+&=4DUlPu;(D_+bl=i zou20i3D4ztqYhl_Us!Imw^a$Q*OWWsEOTGn6MeircEahM9EBT<#`eu;lkFpuYPOTQUE;D3Ky5Eo4F2l$>1yg#QN zdfv}s9DsHcd?(wfe5d@T!F&3X+I@?)xBu!w%=g*Q3t+xa!hA#G{~hf$#`*RJ@*ew+ z-w*HS4Z48+=LYHn5Xg8OYo5Y?-2V;s|MY+lp4$&#cr*L}=L?tm z0XQ1+9~~%nIzT_5V!RIlg3r{$Mt&f%U7HGfzu;9MLmzzAW zx8L|JVdqN%i@)SMx9uW*w*5YZ*B$Gedj9v<)iu21xbN+Kr_*Q8D$>C>(%Eo0l>f&o z^zzvv;)D7D`oZ!$%B#mc(^SW=MdM@%`_uY+%Kv5=^E2ST?Ko#&n{y_f!26T)1|0&S z=|JAE@0;@~bYMQSABvl|7xoAp7I7D1p4>a;LD){wL)vHPz(!QZMW5^M*A)s=X!WevkjzPHm1pL=m2u?s3J}BI}!fV zpQzqEV&IPR>|gA3fViZ3pg$eDV7fBy7xRDBb*}S#`T^DL5XV(an2=?D(f0$9b}Y|t z&lyh<>5l{w=Dcsw1M-VL^z())bO1U>IoL0d*PK2o;r*ESM@c!3=$KT*Q;36a%i#N` zlge`Zn)U|T?5c>jPD}ZZeXiv{#o_wp+e5Z*&(Q&<{Z3Q(&tZ7qUPV9VrVYQlW!?3} zazh8Wo%=Mn?)C^BfaiZ`OTK&ednXRUf9^lc;XiKo621}-q}^c8jc0{F;JOg|2mA%^ z2Q(z@|Ht$@IG!Y*KM^t0{{C&Jf69G`zkbKB4{?BR?B50dJI;gm#=k{wI|%+$FTd0Q z+WkiUGp@PLuVNjrY4$r|+zK6t{Z!$9g+VV)OZ)-+KH>nl{ZH%<;Py`n`~kXq8~J;G z_vnYvfsXR+d0m^P{G@b=M;W73%if~&oZ6^|1+Q0di`<% z@4Zh_w=pj;`33)t{F$bkGD!I!(+6iFt>An$9MamqSX_ zvVpwka|Y-D{6_$6uefvfv{(5*=-Vy+de|r9X14F`eFfqkZEe5YF8E*1*>|3F%twSr z%qzuCFX;F4{dag*Qeg5mbOZj=Pr?4%pQpd^wtb_+Vw(5v#PL{OM?4Q6|Ag{$D*su| z%sArD$7xR3`;zC16}Xv*ygvCYZxhTzAo>@`jd&mC1OF=cKb*ZdSFex>^4o^4w1MzK zq@jqD&h&!$#FJyMZ$kDl#H)-_IE+15Bwv3z-`za=3`^#KgfTk->?q5=l|kHUFgo*o5jsh(Xt;) zb%SiMA47RVa|H{=>4`tPUY`b>M?64e{0;{wd7a*{{WSf0`UBM0&dvwF2NY)#dSJgH z?0=TLUZ@WdFChEO^KZX3?v}*(Kk@5tnRkqEr;PVc7}pbH-rjEf|AF@$C;s2-0OdJ> z_ZQwz9oR50NdI4*lm8yq51_v~%i%xr%D5o*pMHS+KR%vBJb-)!pP-$HA3z#@(+$wB zf1zCrv|sSFjJUnL|7=1%fK+oPV!sluf6i!b>;3PT0HfYKnnWD``7!mZ9*joE^bc~* zuh0SbT~E;q`A`2LunRpP8`Bcr+h3~s@eAkwx{pCTXCDGDc1Su-8R{=Ki4iJ0%O_kQn6zT;2M3;2)Bun!gM)_F0p&WL})|9CFE zKR?Is1l1w=k2`1_;5wO3yPp4bpJoHJKK=2RJ;ERDoxBD22ZJZ-!5sw;FN~|r%9r`rL*5*RKFs4iIqw*G%@&_^scA)(=3R(E;M{-G6tVhC>F>)q%r9;sWTv@$usiB|7li$HhV&I6Sgn zklsZ6n)!Xy$DQ;1pcnkljSJuhq@*+Bfbbp1s^>jA5d5zf@ZRzg`7GF@ME=vEOo#_! zhF9`lJDD06z|j%;elGoi}i=>pndmei=x<2JrkTW;}Rk``|pjzc`+h&d1^Xj5pA% zn-bnGtuMwQcwEds>PV{tO#dB-$P4p))B*OJ>hW2@{n_RNJ%InO4hH6T!aS@BwETRI z`sZ`W_CGl8@BF|R_v@xp(fto{cuqd%B5r5wTZyjj74+{3pEV-(JuBh=1K&xP@}6oL zRA=QG=WWGzG5%MbZMQ%CP%{6N<~W4cu}?@9^MSQrVaL#glJA*uBlH2tZ z;6M9(zmoUd{(BLBS-Wq$hsW~j2hxjM@5Aw42mThru9uXb=R^0i3SRW{3FJBbf73V& z@`u}VUyjdq$bRaiuQ5B?Q^xmtd+T{+pD&KnPszexxqb8}=lxZ;&~h#kAKUY}kH()) z%x6P@u8rr-)dS`g@Sfzi{lnwK>P#$cmpJs;LhxeE_5q~%- zIsg2;c`wp@y&nIE{P`Trz1UGc-dDTkc@qp>4l1S*C zb^m|Amj z^JnZw&3oqBdHkGQyN+Sf?q{4x|GxM0vFpSGSMuHYO4#`m$|d+u{!P386#LGo1K20V z1Cna_9|P;=t_&U6j(2!3;@{8Y|0n0K>?dI7_G*xE?`($&c9wAi79NW5bp~(H2lhLH zS2XuK((w2UJs>VfN1;#m{RH{$`M%ErUdDW0>?>|qTkd!-(k&#u5C3LO_|M$-u7r0> z;)LdlW-A+}vLsGm9H$^{{|z0uVjp4m^|)bM@xFf$d@o!N5IR70hYmdc!@svJ;|1vFd|^L; zicHW0+j)!qpHNWpA6m@7Z^%BpPa-}c@B4Iq)y45#U0|L;@w_wZWY4F>dQcDyHF*Ci9{ z%%AxXDTYk`|LR~k6eC|fR_2e_-{}Bxd7l5_X!6K>t?AfQJcn_EK#HR?T_I3Dw`9VZ zh+h97vL0X~;&+dCyf4L!eC*O;|Dj#Xmo$IB)B)NH&s7h0^C;{3NdfOYFXy>5t3gV7 zuHW}2HU6+o^#gDNk~c~CL+P9L#&$0MYhRQ&K}WGAx5NhtXsH8WSLqLQ%->W8LJ!JV zA6#%8zHjvh{sZ^bAK+*D0jvYYV5IZ|;8mUc)E{vDPoKt*j^pSxcE0`A{u=nr0OBOU zfBXyL4H@lObUt;;yd?O>IHBW(tSitDaGZm60Js_0efU4EpN0J=FjT;QzTa`D{byZ_ z{eYO~Uf>6WzXTuYHy^-T_S1AfjgtMo@oT{>8^}-A&&s>%<%{8PC^C$kRIH+S3pRUmOxkndLF&{RCf`Kp04`VAcC=UA_cnGgPFY1x0Dt|9&qy2Jg{1Fj3Ce$<0{ zz;okw+CBLonK0k~CA^4z|L*ZW(=+Dv)4&pWU!#Md?HT@`9k78%;e387sD!WZ_gvoJ zbD@0Z^eJp0{)|1jW?m@;)bpJ0Qt~_ZLoag9qrVyGb$P5eDVT4LJIOjho=81{*!P5S zL&l@`ho8tRwjV(UO2@g35BQzqCa{KY@QOGB_J46rK4v@Qc&R*wLXs-t`K43YSwtw8>Cy=c!;X2BBCGQUo(2?MOf*$0= z2b?F6xIbB}1JbX`)dBwUu>T$3`N~hfH_iUwo|eNyuao~gZcvc+x>A1fCoeIBYq23+ z!sGAaIK0L`k>|>wXk1)ujLU*-D<68WsoC$I>nwloL%Slaj-Vf>)#>QfC;KA34ATA{ z{D!|x&vRygw(_2GkoW#x_4D>S?L66WT@M)k{>#xTZhRK{!@8d&_K!}^TAoLogmt`p z2IGZ@UX>!nu%`|XFBr;O=6}A>ej~#*I>3C<;63xnwyx`AAJCrP(ayB%)#}lX=c^w5 zet8<}O>>a=?IdTt8P(jF=KDsC{D1MneXQ9p0Ds=+5YHOQGj&sb;RhQhL@x&LU4A-# zSTf&Ep6M5_KzRzkdn7K#csPPDYS+Bp{`JnkXhi$%9A~_(3ID#{i+;y-w_KiioM}DB z^1h^CD$sf@xlidI*LOUS^LoF4IDJFM$LrYdN1G$$#2UDgW_v3-G(`1f5~s z6DNvflXyfS-_Cnv{z;_Yz4LeG5gmCQ#e}~vkBQ5|YocSIY56Yp{AYWp!yJAS@7(lQ z2j45c51+nee}wO8|NOpjpF0ruhkcXMTgQ_`_&rTP^0kHkmJ9uXaO{i2Xm{$1ov2 zP{K#CM!)5KJs8CLLP|aKA>%z;`VaX1p#!+9`zd|_dLQEhR2%$HFOJCoyuWbYtrXtF zyN^gm{QrUf@cxwbF|Wj!*98B#4BiL-@eBA4IqhA(8V3`3e2--07ish){g;yO-sl%| zJoM#%gz|kp8w^CkIofN!hgnxG&qEgL1^Qup6JFCV7_rYUo<4s&{^Q?=4v>cT2#);6 zTxQ7$cHVvyd?&lR^}7fW_Fg{$>&yBt`d9Gq{)h2I{_}X|_2CEnujj7{jzhb-{N(VS ze3y>}2+VeRyWjcv65F?WyE` zKm+T14)&V$M8T^#c%ALH_XAd){HGf` z74`enfd+wSZ<1^Et;PN$57h$u|G@!45II<@1IC%ltK!Q16!-&FFYyBWfaP+T!hfm< z{2uH+xp|NqlzqWtjJ%|&i3$%02M<&WtKcF#Qkn$ZE{21;3 zpl05XcAx9O@dO=XKL9@3UMJ`Pw+TPMafYH#qZ6?{;JAR_WN%u6xYu=c5qi+bV|gl; zxXv&6j`@-EO8ML-d`>R43*Hxcth}H3 z6$#^xeJ-^b&lkCWd{?j&z+zHh0o`&^7&v1;;+xe$_#m2 z|DE&peoC`%B5A?{BUl^phl;plQZa9ab+hQq+~b@sk6Fjur~{^F)$Vx@JU7kb{2fI9 z<9Uo9^w0m%=a8-O?z%hE!=ZkQ{EYrR$o=7a#(zZe-HEmD(W5$WU2_7+dg$tze4oMB z;63Fd?<@9!7mtsbufjeEqr30e9|goA%|V7Anj9X}Zl>~?_L!vXgT!-I32Ev*OZqhY zkK?gl8gwF^qYK`L`2qZ)1GmS=?2{}1wa3gG;y(EQiMUN}+t?3CKVZX&6*_>Qe7|7c zu7@*V4fp&fC8)(7L)wyqOk zf2zRkSfp9Sx&gv7_yO!YfLE8ZcX@|?@y_k#EW9RQGO3jWu$bAD$( z0{TZHe+>a;L<(eiNlLY@BoV9(r zPO$fsqkLz)o_U5KvL6`l2hZ;KA%~~V7fV6isX#v4kih2=LXd-V%jq`XeFqEwmm9(R z>-zork2(CW8R+pmvKhR`?o{4qLqiaMxWk`>_u2f_y%@a5zrc_ESr5n$_l^7vAQn1+ zzcJ)FDLm8P;5qD1D9?T*{#jn)53oL8)c$*%%l{;HccAE)2 zKY?yr#w|`_T;Z%VKV^AYaU5Qw3k~ynMC1P=`ZD7>?mvOo1@}cag6H&Ccpmlr@cgm) z*<*f^$aQg?+pftE@6qd~`(be1HT~X^NcY?GuC;r?d(P_-o`-+Hb@~Af_L6na6hG^j z3+5?NE^kZbJI!aJ{WJNG+1bmx0{+g~A0>SY-P)u}+2>@vhW~Gm2_y#J@&5v?kl;V{ z-|N7y)eG7kH#J;ML+FCO@x!h887|8es-E$aqa47SL;ha=i|-`=mv3%b!8 z`EP#Yy?hceFZ((6+vlVpuaU`nvn3KGNK*LU|DL$tJAOe*oNo|lzbPdyU_U)^z94_# zH_yNp{`(%BeRVj-|Ahav)14o1e4INT$X~(wK=nnO&xZr>G^2b9p%avh6-x=*r%nh}ll$y|33J{h-i;0l(wVBOpC;0{kbNgM@fK?gR0B z*6ZW9>etggYW?#lPmpFelW+QG^8S9^(4R~3^Jzcm{QWE1&23Jz=M|7J3VweYqI-X9-M{NB)MlH#}Vd}N_Y!NI`wgUlB;A3Hrrdj7AuUVf23u5eum z`5IuKMcadZ!5;gUgJ*u9B@jQUfZxvNDTq^a8{*xJQ)*{DjvS0i`CfIC@~k@XJCqgQ z)r#*e@?9(B)V3gRDhn~Li<%%|{vPdE`IfA&v82RiVwd&l=0z!4Mid>;B2 z`S8Z(m-495uXwNgI&=!Yqi0k=VE7a8-|yhjPq1F#{dGpi0L0I?UoY>`JM8_@5j=wD z>bbnv4i>)I$-}f=@Rxc>Za}gle~qeV|f3TZkYP; zM!VJXf3qcO@WyfnV_t&jdx_&QIs)(Q4+Q^L*k^dp>7~fN0>{|@3*!YP?ces;^S@$# zAnS)3_!jq+ z?8XBfCnP_lEziVt1GKw9-v=G2dC`>d!NX(vPx9V=o!_Np|0D7let_vcUx@dBo?H1# zvCn-U+38w_)w~|W_wTs9dKrGn0^TEI zU2>^kK)x^AQ`Vspr^g@QI?~vA){g|=sYiZyo`JvfSb2|bQNi$xT1is)b#P#u&+kt4 z{d!KDrN7|+Y>s`0ziR{#HecJ{Lg%ly2$h&|frvfB-^=ay)t;x>3}mAz@UlCaj1zcE zJ($n%huVt-otZ@baCefO9!=BTI3xMP4k!P$4)EUjnR*WI`F;(4tcc%QfYEOFeTE;H z!$XQ`T!7GiRKRoE$4cC6m}hlT!1I#t>A`m#0C~^6!0$lK!z|KYGmlptXyDyh<>7f1 z^B!1F4bt2;1?YNSpMzUF67>%PxuPULUMT;;%ryGF$vv+g{wgOu;0N;$Mm(ivBXx8E zKZbqN&;@=Tl=uPEA9kPkVfX{pHPyK%|K%tAzx|SWk@vU(nY>@2PX&CZ`kDfs<0npc z{Lk_(?Ti!UT|#MM2f;^=4v&(q{VVQf=)i;umH*q>lRf!QKBn^D_6N^@;y=fO_cia; z^Pl~`^HVL9&6{(hf1`(TlW9vbnJfnP1kW9$2Z&Wf6@WLY-z(+)mtprW>R%JLzbP-Y?-lV4`lrEf zw$+sPSL}NNpDW6PeDFJd(+-K>J3hjFMR{a7QLS^lri-qdb}joZ3|&|&|BcVUqlV|E zAk%sxZGXz+asLbXMR`Pe7IxEh>sTF+Yd7(;_4CuSKT>{Rd`HeSzc(rElJ+)8X@^V) zq8_pL_jh;leK6p;AlVK6i~b(Zga0M-VG?x1dP=U7OTq{6AKq&ZMEKg0KMseVKU%LH zXE>qx%6IJZ-(u_&*ZTumLjJ}C%F{ld6aAKqj=A~u`KH}hx?tTQ^KU+ppTv7t@IB@+ z6!5(3urJ_N`_1>XkpaIv3-6hq6j<-D+s5yXD{%gdc$N3D9gEQ}xj$~un&+ACSv)s0 zzFCl;HRBzOk2LK64)Xh4{yR?P@53Sb%6s^}JA4A_&kTD0pPz%*yifT3?zfHIzaDTt zsK1@b|DB(|!-9Pd@C)EQ`rq^ZOUC`=KYw7y{Gp@Z|Ds)r`giglb6knvv9AH>`B{nr zFg~}E|F~&o&;LIDXPhd>-W%_uJ>35G_r2X`yX}bkSs%$Y^8vb};6K|=Jg#Wpw8P-V z;o*2B|B->?65i8|SmofF{){Lea&%x2n7V#w)$`qWp#6d-bYQckePQSEr^3%?IAdgb zdbS%=AGF8qLVVBnbtBzS9>hK9c#H37ZX&uE<09lQewSt*?^p+r-1_^r zQ3seNjBfB9O*VF=Ji~s%qYK6}(1YX*Ll*YF+M)gRWY?}}O^nZF19{(|8@4n2^(?S{ zl8Bbi1HyOOZ8O8}J6?}H#~-C#i_GJM_vtk>xEJ-K?wMt>6G zbQ9uz_FsDbBd4AI2b_XGC@<9hVKbseV3hdOrR{$H@1^+S7mIef?6 zTZ^1G*PmH3a4jF%R|;MhC&$Er3hX`c$Q699vl;UY;kg!FL=d{b8U1_G9qp-n#&Paz zn)3tgSE?JxaS7mmsC?N4zhvqm20|P^8%#!gZFdBNrLz2zxJNX!ryN&Jo4WDWX{ed+9CPQ`>jND za#sAmc{icq$$P>^*#ESH23vV=^Z6O+4=|rF4c%ZrSK^>`A_jh z|6e`S-g8||I|V!YukOF!R8EqQjrP6$_YcSNoBL|tznykRhwZlu(#%^I)t^YiE3m@91L6OdXFYmczks*|$YUn@ z|2ldi!&w7$!1#mwR~L&bbZGzYKY{;O!vo??`YW7Qk?-?!=5c|zqmA!}{{_!Q?Eb@g z$=3_NkC3&m+Z+5b=1nkP^3mA%=*?(7(@)}i#>8EFjCoYlW1b`+g7T@&n@lDg1}`8+jk?1BAZOA2F@nS69RS zJVVTTUTFjDn^1A*ue{6ArO@5FV80~R(Hd^gv9PUL;nt&T-#J^KII zI-3?bt~B2V)thz}&3uKR;esaKyQdct_R6OBwHDA0P$qiw}0{cMM;ZPz?c>9|CEw?B;6LhqAm8D4DWVqV*^fD15A6hEUKja~X{%k! zK={1waXe8U(0>==Hyw7^yZ{x*&;y7q|MDFb9D(e+gn7c)WAcB9({0a!_xx{@ zmnq)~8xE6~@SYC=%V+Zd%~vJ-#jotKt2g#u#LNsh?<<;N2kpRf+I0=@FRwoNsQI#~ z)g#T9$$65NmHZ!InB>3T!?7Ma7?Ki+8uU}Au_+eoAe6&3nG`weZ z8-M-lT0f;qUe_&+|kB>2Vfe_rt%kZ^$ZYy7@l-;QjskkXFO8@)ihjiUw6UhG~n zP6J-f2Z7zHi8y;ah7bPE{ulC*+koja()VEGq1zlDzej9vzh5MMJ_3aVuPX#9cwM!@ zfAs%4Wgn4{FV+`tZP5-O@q4U8jC!#yA*t|3I39Wk{*|S_XBFY!o_2Y?&$unT)gH*# zPq~ntQ|@~`e7{e>7xJET-l5ob#LJ-L@cHN2=R@M}LOsBH2J#<&_j%qIKjaGj-!IDh zXo37bW`2PFsRkqfGI(#il!xCk(=TAZgIU;pJ z`a6Fc{_kDefB6qh=c4_Zaeta0{j$mb6A!3A$O3HU0VS>*3VTMHszv@^mdl$r<-@Y2 z-Q_(mQcyl7uT;Pv(kGJ)-e@N?d4(cN;XB*UWA9V;6`~*EJ?efe|5t15$xG}u2O9W` z|9J_ozr_6S)nAs_?PR#Yq~tiy`>4msM>Xd=p5k>VxZUQ?)5gL))W9~cKwzMvi=5d0r< zBjtzB<7vNNoSp3qbNoik%RGOPz3@3X`T(~N%$|`iC^-+FmoZMKo$)%-CeyT+#|>g9 zIM3(kCyd8?Vb{6cHQ#>=?_=JssGNwtPmkz3%F%D<33)Q=jUFKVjXp>oVoo;v=ltI8 zck-X=x&GMO{LFjx0Npr|_wM^5-zZ*Y>_oDd4H9|CHuo#}Ijy>J0WKJ~lmGg6mhnsW zVx}y-f5h>9}44r z)aO3adZS*yC!Y|02?3LcyEsgrWvqj^Io$cf!OL-!TSz5-S8j1kaC>( zJ^TRVXcGqn{}KKB1L&334KBQK@$O?74o_KxRt@ZjZ==hYzl z-yD|kT%N(3m&{IMo=^6?oKBbWtDq<4IcgfeKOsJ#9>I6~JM8eG`%b}2^?35Uu6;lF zTbI)(EBIdH_E#c@+a6b4kMPdp^oQr8mf087>t|6Ol8*`A^FAr}hhOuAxZnHx+(BAS ztsi>yEbaMk{_i={0B;oPE&dAl&alxg@4NB)Yx%!`|BOTONBbatXDN7vgP^{|Yz^i8 z?|!$vo#M~Ye1%AuqTfe5R-cN_Z%L7Zs1H2uu`gfifpn9H<9ybcEoLd_S+ATjkDJMV z?8_)8Z-hA97Q>GNFCij&;KlwS^By>l@eSg7;!RFa58y|t51zFx@)mvt^SUU1#Qotl z@=AUrcy3&uK7p6y=gBYhzX$&b)7;%?ywM0~#z53$?u=plZ|Ecjob zXF?C)_XOW*C-_cWGZLAuGL-k_v|7u@*l+B94!^Ni`0t2EU^Nu;&lBWC{vw{8yw`sh zt$%hu{Ve7yp$CQtP7WfDo=2H>P(KU;@dJ{A^FRMRiU_>FTr=MUe?U8&P*3u8bL!1F z264Q84he#k_8?t!X8S1~wyW!N`u2tI^c(ZtuHZfWho27r^(*B)>$6Ajo$r>Q4}yOY&5!5>&qGmxcRww($SuyTijn`JewG z_62%AMNwqL^HZLjXlJY6$9H-zI%dQhhgXYT`JUXTJ$v3it+Cg{Jy-IW&pqtI^T)i# z8f{R&TOW?gx_qpEMw#QR{{#oLS6w%c%c@mxJVp=5f3M@d@ScGi?fumi{Q}~S1^=fX z(m<Wv7=pamkGvAABJHZ+x)5U6S{^@w?ysPTnKW@V$(DrFNgk4S&Ud^Z{`#{11Pt z=Rf7-^??3Q>0jkk{;vAMu?e@E>{X#5sO#f*-JhV+iZ3WB4oo=a1O0 z61_GbjRv+Ca=`cn`AY(Y^u@+cqJ521?bmKW{*``LUgUou{Ezq(yMKm27A=1M*(~_Z zwwc89MT5oaf;6+9F)2Ro> zI7}(Lx8FqCCHNm@zORg*!Mwrd75VgW^9sAaY}*>-HpIzTO6)znC!WX9F`mc%`D=LZ zJiI1>Uo+YzA)bGCbCbs-aH#RqyEQX~;ko@G?_DR<)G+xU4i4pY0dYj?zb?U9$9Mv0 z{N{0*F+F;&v_X*@&Ws_v#IJZ~i0le8}+?`q6cav!4IR5&XA4V#KZVFXx+2)qmW?azayW@&4&NK_Wz$O>2Lh@u>T@yF#G`Qeaz>_@9(-R z%M;#9WL@&!hWFU}EGmlLrUYx8cGv#sF&;o)Sg zJ)hpEzQOk~<^RZg{djIufS>)TqJ1duBd^+Xm{=lX5s0k@O5KXtwFAp6dFJ*;DHH|zJ&1L{}xK0419KKKKz?AZ6oA-tHROBFeS^GWTNlpHa^H#>~ z)N5SBf8=td9(WJG<@2w3Z`pP!AD0h!?37<0xNl(n82&Tf;_vj|MIVOR^BeYUk^fA9m;dwmY$*R}SNZ>P zgkF&MSNPu|W|}-7@&4J_mB?xHS)1?|rVnS5y4d&;!UX$ZG~(;kd|u+!gW!`3q=lp76!8BrgW; z?y+t+>^*tkK<0gklkqr3ev4vSY473pMBeir@L9eh=YdJ#am*w6`sB&};bbBYVjo9& zkNhRrN&2l!;5(PMBHg}c9?$huIb|ID;C;n|K*#^Hp6}g;_jCD;9LaBx=YN)b7IIEm{|@^eDDTU6<6YSPIpO$RB;B)> zRLwo6>0N?H$ZN;?iX+^H8Ga7mR~(A2^QuzkKk#1ie>g<`;r%6s;@A9F&Xfc61mk)j z4uJfp+dA|9i02UAJC9Gh|DExHeCKfs^}$olvmEWGUoe#S@LxOeWA{w2!{6;U@ZRI{pJCO#QoGNA8vh>k zRh94+=wazI=`-dJNe?!@JyGHpxAP~|1cax8ucNXhe`S%%a$(r)BgO>a~ zNSyR<8F?%8$10Wg_+#?l?_9`l^hP4GFFJmGN?won3Zy>BKV>=;^!5I#z2DPr!tVlm zMHat0J7b&&w4e0v8Gqf;&f7oop0pi#HuHPa$iKt)@axe7k#wob_$tM%-JL605dcI@Nd%jOMSoK&QB=CPegQuT2cWI7JzF&2Vp7*2Spt)DO zAN#asA63T7;yY>NTdx|{UDG}C{^XLsg!!2a4=+I0m9Wp9dY~Hi{J%OQ|M!diA0apP z{}~feME!=y`?25}{LcMO3*!G71}#SqI6flp*~a67alr3ujg*Yw1bM*T_rJq`;-O0ZkH1Av!Fa_fK~h)i!-;&?jtB48J@1>FH}~Z` z$Co1QJSmCu(GTRu@|XF|@ot75s0R2k`2E@$?EaTPi`@@wzAT-mw<^ikDJSrrd|cS= zxx!JvFyu+EEpK1C)Lc${h6u?}>+e|V6?dma;h0p@xV{GX7|hWGkw z1&H7Ao)YVH;g{ov5Ih4BtE-%ODtmhq=B=hr_#Sp4Iv-0U4HNvQdh(z7JU#EBCwY48 zJd74`TOxm_{7|M@Km&=_qe&6e8znJt3cy= zc<=AY{pRj_?$_LF*uNQn5#FN@#wENb?alrwd_Q5xcah=!n0cM`X>)|zFb7ZQ&$kVT znBf02Z*y@*JmmZ>^a{L(j`&sZA3q_*|7Tt7nY_oH;QOUN`vI?sBk>0^cqs3kw}16X z_aHQ}7=}3br)MI{mTv zKJ0tjd{6r;$8QSu1*qR7uNPn7=f0_5t@roG`1!2IA^!&co%8u#<&p0z!2SKhL+n1| zfU868K6-`u{Rw_@%Qzq7dHVg&;XnU@|25qk`FqzbmvvFoZPU6gu>0D35QF|}J5Ji} zB6v^#h{$*FpM4Npw88^kYaybBd;a79$bZ^9@&NKbIjy0w{rO2 za=(;utf&|B?qdFE@V+eNKmFTk?y>t`T* zpU>QH!Fd2R>#?xEqsDbw^Tk=s`i zT$(4sJ}Dm*jR#&cj1cl*{s?*a?$IN@Qvuq}%7ydNGW5Zs>;4V?e}^2#d;l(o_t}r6 zxh}N-h$r?x`EiQ9h423^?-P(b8UBC${S*bzd|!W0vzGPu&6`~u0#*lT&)OP%r`>&3 zxE`+%i{<*TfcKb_s(6(-4!Fv}H3MY9|B`-?|Mmm<{pFH*0{HpJ#k2;=H$)zv>A>>; zF^^w~Z1cY-@2UPzBL2=yd+xZO{H`E0yq53A0}oo-M}0th^}pkw%X`e}HzM^X{tx@V z*zkWY|Mkl<*8hU@9RAxr@}KjaufTep#a!N-&#B34s4vWO=*MaIFWHAj{_AgvnEPRa zzU2C;`V*|=J!bksJ#cnLKf{0PP5rK<1_h|d{wen&=lRm%?%wM;T z>$=_pLtKF5Z&oFUd)vW#^})~lr>y-C{>xYSKXrX>@E<=Kgh%85%zt@LdOQ({6H4$& z%b$9{e604L%f|BFew6q61t}QsMgA`GeG$)-PulqR*L)W-XJPkI^F3D8dm`ogE8B(N z?MM0VI9bj(oAw|h-(EoE6#mC^;6MBP_3?b$M*g1H?b6S(+g0`3BzUi%0q=dDh}bOP z`z`L%CZE-OmmUB9PJM@UiR2V9BVj&Z{LH9Wbn%=W;e&;t-2`~RKeUK#N|pAls~ zVEW@Bal3Z^CKLDN{d9G>-~79L|5GI*e^~$e`?9*+1>dX=d4G5hzsvef5qhAY%s%3C zcpvL>LHvL9K=yKVaH!oUA6T&eMi%)o`LA6`@VD_hrww`iXm|LJJ26HZn9px(cprWM ze8;`qmG_rmA@2*~8+neMt|{vm$$RDC8h`N%&<_LpEc{4eZr< z^LWI-P3rpp-~8q`^51@u|HfbN|M?^0>=GOe8Bb(h!@u14+YjLVOT=JaziD1|>@O+r z?cauS75;wn<_y8<`Hy1@?@=Rj?LNb8p%2j4zmfOOqZe1*Wguy1{Dkla3XgBGpDg`~ zzCVNi#DQDz`@8%*(v8~%``D{y6^Vo^~ zUtH98n>!<32!EgNF<)KCf4YBA>hHr-?LN~0FX8(U)m(t^e>M}L?GQBYm(=jz_fQYO zzhn77!XT&4=jJ}W{YNi^|GzL#%=kZYLma?1`Tf3I3~ZqX+~14&0pxAuGyTbH9P<;<15`is0B%l~>JK1y85#ZN=ApcA|HOo8c~2g23E#!0`S%h(V70D6^DHHL zfPBuXmjCT?3IE?9P4K^b!#sff@=YG{{tN%v-+Q@ibNIhMK45%5eOYtc6#pOdANGGe zArB1y9ZwM1erVj(b2uyyvYAU>_{p9`4F-gaqZ*$0n;gll=15q@V(f?`M=^n z9V*{ZGur+CpcgFj^Sm(*u%DP0FvcHF;lKR}|Cx_M-aPC-{D<%AZ}~qQFz!!&gY8J> z+WpyR#5iC5itY1{<@*&k4&F17P9z*mTl|618T|_;><_WQ zi@>dF5r~42|2y#9c#m}ASpn*&6!hy1g;bLFLA=)R9=*W+A?O2|Z)H4i^W8G`lXM?N zq5|@N-|oVD@=E9rc#qzgss~#7M`S-S_U*~o53ihNAnTW>IsWN}@6XDH_^|f_&32lzBtFRwL5SkJYpRv5hc)riu2k&p@`t#Z=u|l6U@SJ98YY=~Y zAzpN|VFT~6C!PFVljc8Az?^niX>@Lj*Z-sJt{|9aIQU&L|Vcii;x!7Mp#9`kwM8}gpv`m2^S4L5UyKLHe|WFo|LVq#e>twP_m_;bH{th_7kX2_QBLH0M}LXf zSJ>XX84RkK2%W3ud-4Dqzkq&--)Zjf6A+gw`~(7d`^$Ym(A&guj0b^p^p<)6HMJ%G zF*C!WEx*HWTFHMO55CqOg33jU9{9RlQf8mIO9psE$9L2N3Hn^#b6Q&v7Z9G2_eajS zVFs4(){_K1pd7$=5c>=7wFklXBzY%lXJP+C`-jmk=kGZVc9N95A4qr^<6_*$?}=mA zd)|LD;XHT`pV0=*yaLS6>HzdosqH$x9h10z0A50Hc%; z6+47q|9#W&Jzw};Hvj9U{5QWS|L63NNdBWMzegVoMsx5D)oRN(c>ZlSDX{?g!U#qdm%CpVItBmySBgmy*Y2X!7YDxeXU5fMk$(sep@8)9W%)~PWew>f->e~ zE647y4#wk+{T~PaQPc(YpLwin?LW=$_w0xVdfu;4fWdq0^?%_#@-&4H^1f)6tPe__ z(Y?rB@{De0+z&ad){Or*rzHm{J(=(#uwOs-L-0f%%YP0B|F!e*ouj{CKTb{=yC3Jl zdwz!RbJHuZQn68~%QCcR^VsoQu3X&l@E08~Lk5?=R9$YkAM<#QE5NUO+_b z$Hw&vwYc zf9y2=e{&MQ!++gd^Z;^%9D_p~F6}8oA8g;)!TOLd!2iHM zMIBYJAOC#@uj@CXzdbvX=eCc$fA2o1-{;sXj)3Z4`7eLqJIBjqj{R?$mzl$V_W{V? zVE3`xVgJeR%X_Y$2LBJp3&H;e`!4@IPyTD4lk=wDolFiI#^q_ZX#@YgAAEkifB3E` z;eUxD;ok=||G={A-NfS^5>p`Wo78pq`{V_}?*FxZP(DD-Ck_0+>dqF)DSBWruNwFd zuPXTOIAA6J9p@8i&msIj-`OG0j{V=>xxsw@ob|u68TmivHL}kfun{)7?w)a7Be31@zuoYEoxuOLZHcqP?&}Be{p6nK=$TdI;R%#`?8`h)JrMR; z^gQ$S&R+}cD)a-qr-H`u4C`IVf0}1i8{c~z-oww(2i6li@A3EQfgyh-eBZseJgbk& zyN>m6hM9VS>**hlui-o6haLULyun4sx}k(Pf%8HAOb~ydIc#3J zPM3Ly%uAUrmu(IIotGfue_+4LH^@yK#r)sk z(^B4hJOd|G2;N72Q2rmncX`ixGyMNF@_zE)=g5EhTmC=xdijr?xSuc{*G9R1JV7rs z@EJuu$KA5jm;bCB0DzJI*?Q77LYGhS{U@bL;qpoH%$I$k7h*sHbolQDjO^MH2h z67)bk7ye`BvH$1+95w29eullxK)N;f|G@`0jtlsYI9`g3?}r{>dH1gRfVjO=4-DXW z4WdsM#s|sPcEkthgR2@nV85at-pDuGJDDw z40|LEeD*wk{jBqR z_-woyxGAfj{2c(BJ690E-(BBRi;M${`X{Aj2Jl4lgu#0jQiyyOHolX3#e!IPe}r5N z&HIsFyO96fp6@H52Ye3W0MvIV|Bd4t#{VuZFCWQwf-) z;FtV|-bv;-0PP{~d;gzxeaMUaFPhc5=YP-p;eZFgKjd*LhTMSUX*>17m_#|hK6ZcU zK=;j|Jm<2$Jlhn?0x=CjU9j#r{9L~O zq`rpl^zTQMzt%s_;e845wd4$^4%xwlPs=C6gTjHxP!k6FALuvq}c+2u^X2_wXS5C9?_G3rd9B@_%lr6!gYur{;d@I3dVu@G z|Iyi_3;91nPssn{*Qq<_xf z`LpD=zrEe_J*`BhG46{`881rw-F59R*(ZW{LDWBJ*oOmuWK^^NjCS8~tNS#7`RjId zIIbz1pH)7|V_p=<<$~*T5O-!FqOMn^Jjd@SK>Lxr*emipt$0N_kNAI+|HHqB|LoJ* z+y6uIbs798jfCCr`6b`RlZpO6em`~wG#+Rem*aNupYr?nbFu@c>Y3!U#_m(^$Ms{s zLsCCZ(6iVjct6DPslnBIzHbFOe&+GG54>mm-+bQ#rgaSZ`?H@6{=RXX`Utwttq)?f z5VhCx-*`MnkMVP-9^mJN{71fm{~j-#2gslPz?>f4_yaQ$b5McU^JHMV()_!k^(t*w z=BG9w?Mz&T{r`cyOz49ZaYW&r@_q@k{ zsPAgOMdWYdb(pQh=ki$e6Lz0J`ClOj@_)|r{|o=|2M+iv&;!ur;}ShUT#z)x|6Xr< z7}qznkKYUJc|V`Ycf#m#AOpXBnY<9~@AKjPpa8D19+Jby+$piAg4+Mx{`Rx^43 z;ShVu@vVp(n((ue7Y%+lc~AHs^uDpr7mj3F?ME!@oqV+56m+N}qd!d|u zyg~hfSF~5~9(hjSJ>S>BFVOF$#+EsMjUVu`WnN|m(!5;;U$Dzlc{IU(h92Piq2M|8 z*!cT=y)1(NEfq@OWygiVQ}$g*LoZ;L@z*;}Xdb60x2bmn|4SUFw$U$Fv{(=X*uWlLCpOw$Wp(2O5oh z51JFbR`?#PTz`P^i9+P>XFWiBIBr|^`Y`kW-4ywP0)oN+`0nvWFC@16Xf%p>#7LoW zz)SU=`WboNNr>CX2OX!bBf`FdUsG-NVNbrkjY3inaC_`N{9kp>@B12hGj4>$pxD8$ zm+$01ej$WNwforD6nR-LH+en!Q@IOyK|XgcE-r)b)K{ExUGjwQ80eoM*Gct+cz|-J z9;i>p;|csX-^KV4@=rLi@rQ>oPKN#u-dE^(`45{C`LDkR@9$wIBF|RwCl48q-ztp1 zKS594EsO)20zI&MHLt`mj(<&_&O8C^-PrT;F8#!D^uQJus0Wx=QFA}nKL=u{MD2k{ zGn3b2d>_Li&S%7r)Jr=l|4HXp;F0|zvRq*$(k$^^=cqsYzwmr;jzOS(PF!CiZt*@1 z`jGs5w4?Wv@8fazEv%O3pY*7H_=We(Z;f@rL-IHD%d@5Pb-+vWR1p_o7hV`IkQbpJ zuTgugJ|Mk^UTE~Yga0gtW&gc~eQQQL&R@|kBX|0*$Yrcghxd$Yzo$KsU(|3Rt}8wP zfj*$s6Omz(z{#pea?W4y0tNH@=^x6>i$m}Wqh#rzvuUKXICzOkAIMlAQ3pnnb*uZv{?T zuDTkW4)B~;m-^_9k1I){?op({s+5w2=8msCY}7Jxi3Nw49UO4|G#lvI{Y7v z=5zHI-8oYa_x+_p-$fAGJ3buz&)~W92m*(+m-#*ZQtds4 zp7UO;R@fKhgZ`Z=Hy<+)f?TnluPjCRFW+rv5%+2>uC-V2p3_QkA4jBw_q5|h&G$~I zzP$JRz4EkR+>gH#Fd1~(O}xG&>?aB!_%vMby<&Ma*pY9$yAya>-Yc;i<-OuA!$9}} zh4y=$qX)P>ywA}C&vcwrzotj*4dbVi$qzG;@yD_KaP+g%$clHU6dx;*f9`HT(+ZXjSdql4x zpB)ZL8T^*d*dz5UW%G+s=7b{7V;(+!ulm1$7vv$PCHg>nO8F(-4lnYTZ;Kv(xL;7t z;`={2`Slg^P;>PF?XMmf<9En={jr4aZQ!;}vQzjkzxm!?iKCJ79ZnAKW+&-M_x5%Y zI3EN~TJjGZ-yN@(^55IYf99`$D*u)1rcTMn&=2Pg^A7h98|EQ8zf`0emHan;OX0uk z(&az-c-Apx+W8CX%{J4q9{AA(@i+V@4?izhC*b_6lJ&tX(~0@Q*yAznb z|Mg$xJA91stpn$SofednX?b3pnC~yp1N!#`-$~~9Q+n^nd5?vNLslOVHzTj|jni8A zL>z#e-7D_dP367(9`uL*#a-ORM8q6a`Mvxu%bX6;2juCiKj|MZUFb?Zz-xp)z-=EC z@SWRX*U8tT7kge4H}JeY?0r0!#FB{kwx#h2@g;gH=Jm^O(rKZmCX=4;A2XrAJRk~;rm0szfHE~A-Ab0;}`5j zo&`M+ae-+6pk@O*?2cu`G0NtZEc@Q}AL?qBQ1<ue$1@|fLw`=8m zRU#qaWQ{@xquCzHb#KAkTqi{=M%zQ5x>Mc}FJoAcdGw#hBQ_}*Q9l40+M ziMWdb31q!`c9I{({73lT6wEuoU+A7b!TzW4pY{#@V^`t-VzGelNv{X6|GcjDA3ZRe zi?(0zpSUtZ572*%3#7d7_Ky4?9iN3BAU+t#f6}|?gM$14{{8bZkXAUyzgUMp&|Zcf zAP)#)w-z->b9MeszYOi4YR))P^hdYBIr*Dj?>5A5TcfjGkn`c|*Y*$k{_7_CsYmkd z_pFG5Vq(2T0`q z+&F+d2=3NY{%dDM=I1*us$Lu>=mE?z`-6r3*H1u?ay}S(8Dw@+pMSC6<9Dy~ygqK@ zwtfEaEY=&J^Liz6a31+q_K!clx+j&pE7v;gVonHp;={K>&F&7UGCVK_`Kl!h#^0YWz zE|=31`%ks8|9Q*@5=p;@AAs5H&AcgijWh(`y}vvs-7|sh_z48eQLensdBoRxAmTOs3;U7! zFy5$KVDCWEemCX6^OVJy*Bo|ghP>71tNs14@)aqDF7{VI<28TP;N76@LQ6 zF)zVK+)xbvpugW2>IM6)Mo!V^!GCUpK0uE+9?tPS7KkY4hwqv~p3p4tJdgT<`kzy= zjpG^Lx$E`81VNJj%cd-qE51`6a)nzqQ4h4_5yKx~I+1z+^G)0z{GS;|I3M&{4~Pd1 zo&x%SW@I0r^!x|jAHHw&K)(*qvi^~X+dh>4v7VB8AF$3zUbF4|Y{UC5hsV6;mB(!t z%Tyo!XXir_0C8OX$M5&!`1S9l=MB^coEP60GaniH;v@A%@qEDd2WoJr{}Ao{MfA@C zJ#9aurbhNZ{3+ydRsCy>FWIlDW$GiEcksM1a;+Q@FED?%#(tx3$XBC3JNeCcU?s9G z`+j{|a6jxGWz_U;3GYc0#`jLSJ=Yb^2SEM{zLSdmmH%bmPZ1Ab|JTgB%*m6Z?&+rj zepSC!AE4J}BJRT~2Y3IGc2f`F7l?c|r2WMY&>twKl8TB9{kF_#R>g&)F~POn*T=BJX2-6}^Dn{YUvuwT8vd zdV>3KK)s>7^!lRPi{GiJ?X|tLL;Dug7e3lcCTblSexbrb9Y7XsBOb zrl08LrTv8YU#piXz7w}dBt;p4>@nF=ACUJ)FXTs#*JR+B`^taZf$#$;UgJuAFtnZY z4+u<+7qrhkQlBV;=mGs8dB1>fqW*gA^KbzFGyml?&v6{^sA{#_<}0v=+Ia-3=y^Yb z??)AWd_lYudBf9!ycBV-dVs)R{=@5IG4dzyUOAKh!};Pu)Q^<^s2TPNR1f^Z|0t6{ z>f^Ag-5}*_y+GW+`M;F8U(x4h)D!l9yhkAU8qoNoR!$aTgWj)Z^gsSKW!B(8GD?U6E>r9vH9C zC-B_7l6*HF$;kt7{n|2aL6x0Hxl<2JCafbf-++yag|F=i8xqLr^H7^S;6V4eqo4>-Oh>`z1Kgy9e;C%fKd957E^V>W~B&?qJ zzUB0Gyf=qK53>IS{Nw%MukBSmSzOV6r*p;^K;^Bs+wcnh(k>{)5%(tD3WRTK{D4eHm z$z!hX`Q2h~&m?CkYdY{k9 z74n$rt_y#6-g`p4h&gO6Q@wJ7Tp#(x>Kf}P_xgisA$Qz&*L)@Vg@x0ehaTX*vClF7 z!{&O&BRt+Cyej5*cEt=yvX;Q z_8(99?s~5W3d`u@@IMa`K;ejO|kR&veYdA$B<- z|DZk1!at~n^55}gd2Kuco_@-UiCedOOnx8ec)-l#m2oV5C{VbT)h{_^$A#g^`G61C zhMixbKc46DJo$qdzV|$;v+H}4?hXAnKyGZ0W8*mxy>l5jL=RKe&j7V2ZHYXXKNm@_ zm7C)$&e#4_VB|$;|I@d;PbuFKblacSr$4+O@*X&U3mX58MfxTD5$9W3U-De^7jYX6 zZ+%g#=-mvvRF=x4x|9F%$ueo{p~$Mv#Phnzq5a0VVf!QlxeUH%j2~=}>cM~Y z#8ezJpnx7YLhhbg=DULvu*=gugldAmg;B<;h3P`xnViPvkd` z)1N=0eLj@;6gU2TMci+@^<~yctqa-_IS6^9T`1?)cjb9!_K)Xpjr1Q*Sg(80>jAz? zh5aAlI3`b;&3vJsJ2}6 zut>iJV(8;{?5#*WLmzM(;#Bm2^@9J(v&d^OzRCCQLk|#FkRVYG5j*6rR*tXaKhsPv zO60U@%0e8oKGFXA6BR0GfAq*I2MP1=`wR7O^oQfG@_)H3%S^fAF9n%SbDW+gA@|oP z|KoRfjvw2{1rzKJ$C)m5mBCx}s%3bs|G@P_c%0fk^WZrKHbedq>)<>67|82){=S$! zjo*EaeeN}+(iKpO0)DyWP-ex~O-jB<8?_8XTgWG+Xeud8-CqKh^ z=nM2ieuCNwIY$kZwp)yI#eIhVf&Y=mi+1NYe22H_r_%QuQa&dwxNBTOJuXFF1OFgD zFP4Y!KSO?)7tVW?CGSPO^+QF9;;;BmJ5evv{K0$uO#LvViE`-cQryKMa6FfKEK|y# zZ2UL#eewIQzh}rf`D68i&jFdP56Z*dA3Qrl9^m`3jXXmyAC$Lu=JVY4K(W|f`p34< z9yhYg`w?fB*j4(&^SJ*n=KPZ^)QWI~Vl1N;OZ zuK$XkOquqI<1z2X^Vpcu;}h(;xVyK1kdSA_-C+Mijtr}r{6~x~k{66q@P|Lb{2%p4 zZQgGs|Bd5o{8ff~-<9wl`AEQ%YN}l;P8c2zIk$f5S;mtNZFlXK$oS%c{4c1lxW8Ub zQ{)bPH&>o;dtzRY_f3DL4-iM>F*zlFIa4lg?2LvPavkjex-VW9ykCSqKrDzCveOAC zT%VW6`OF{QT$jOTufIl*FDQ$>Kak__qy;sxIu1v z@OO1N$qaO;;__#m*GY%=AFkCkk*902g&%AT)bJtI! ztbMbcq2-zU|K0CC2>#E=8> z$V&#_cRi2wXqO=CCTDNe58)qx+%DE%cG$1vVRHoS<{-}-3=-!bFkUKh8u3QLyrcp7 z;PfGRgf^v2v&wJ3XFNU8<2%O{=Vx9&3*^K=F68?l2#o5_H zq=>(f@*R{R^A#HN0TFLZdC`a`Fhs^F`}+q=<+3T{eF?8i+PMt5mhaOKu~Q)NLg3+H zpAV!x3;F+U*?uAJPMALi|LF$g2)jePn<6LXX+`aLh8z;cjC+LNl+Q@ah~#gSyU;&k zQL=wDh`t@G2bdmp8TtUdEw*BR{vb#G@n0@QmUY9&?3CeE^8n%3i*xNfh#MdFUjAm( zv$vn{mG;UhqZZd9KTrI9clQE0%{VUKL5QNBB$NFo@X-Y$gROcFhrLP(H!4FM& z&+f@I?mO7tnfu(?ao?Up=5t$SokX-h^Ot!p{KTK|xbh#rm%aYoy`mk@8E@tU-yixUFOt`283#DcPfI!sJeha%Cn9=@_b#H{bKiHx2!+2#``0Jq!}Utu&m33B zk6)pPs$&s7vV}%r z-1Gwdkl-G`H~7CG{uk-@3z6}OA#8t0o|x}0@Vyc?v`dZNao8;rM_h=#zR1i^tTXfg z?$r%;X}{+q9p z|CsSa++%zPEpTG|p#Ee(uzh)do8QF&23~BdPm2=1Uylnce)?%qgdd2#58%fJugks<=L2A>-5jRKDa(3x;Q>7FdGCGWdivYvcz#Cz z(+(hZj|TSlVp^@^JQTY~%Oi(8mwM#Zix28}-K5*w3tksR;O}@s9*gtAbzIjy<#={VGrf)Wf@dD@^+uxqFimX7&Gjwl zeQnP`^lJRx&4z(<`~%PLssZCO@|E+wz6||Ck^50!exQBPAMGUS@vVBu@&G?UOpu4b zE#H&o2z`vbUZ@AC#sI#H!wnW9{Ezr;k32Q)cDg{0MCcRxfoju!y}wq1{7$(%8RHn$ z$}QvSCA=rRAYV`)IX=Dd?~7|czeW#e548J++hweiWS>~ou<4~*wU=LJ%teVuO>e#dNspJ97=UWA>)D>!n!J7wfso|nwWs%8apO@$*40R98+|IhzFtujz)rDf)i3PB}k#58{uM{2ubT!Fk5GLhs+E#<$2<_A~#jpJlqU z(_bYY-oP&G1NQ}~=FsEY+sBt1e>Qkb2kmAXJ(dyQh8{Ud%};TDc0`zN+)EyfJTyqR zM*IscJ$_{Si9TN(ZVVLw3gSb@ah=z(+c+hyFhT#ch19PaD0(J%1T^0i*T?+Sm9ZJ0w(u#I8(CA8xx zC%)l(QTjjU#?|m1zh`#YqyB(;pfxT!z5JJaM&FF3AT* z9&!7||9FHRpkG)=zU4k?1e<-7HhyU7ytRA9>HHPw}b9c4Hpbj=}Hrn1a*R29+FLC`XaY#JZ@p?!16N90d738!+F7??svqY{UtA$90^y-|i;Q>w1d7dA}j!aiV@sqdsw< zfqLPNOvOD0lJyht7tk*vM|_uULW$9eJ`cPtf|=Otn{ zry|ve_<`!T31#j_-XVP$d4SFJNucwalJGAY?Eiv+%j980+_W-II$4(32inbcRc{_1 z9Ng^N&v>9j&bup-G|UX%AE90J4^CqI0E~4A>S6x!(-=3vzLB3{eSZ%Bc@KD}1ix8V3(u&pygJg) zv%L3B&wIL+<5}nhk#Gb(@k{ye@Bn$rxPCFqkSFb~WlmfFTxML%`6oH!-(lw+Co7tp zj+d>OpO77;9G^0;CcVdWfG#^pW1bAlJ+Sd(1PjAYK*2A3cYM#J7}d_a$<@1=YR^o-?0Nyx@K%c;!4J z(EPf`UFKc#eMr{}mVPG|!peW?EE*Pgoctg9q5KkeBks3G4!wR%8mOsjo{x0%{H@XP zh5T1e6Z8}Q2FHnOB7eaVCb}ojQ}k8rU%`0qVxB(F&Y8FJ_v!)i_}jsIHnx=ai1(^T z{eQ-(h^q_aYPrNtAx{iTu5N8)MQLTaj)bCi4A)e*C=WKUV&8+ynfB>;2Y@ z69)Z$%;pE+Juef&@>nNBt&?Jn6nD3MS zH*do1BlIPXgk|KlD~P9Xi}bUCKRwRF?{a;S`hexZt;je5er^$Qau(R32ej9%cKj6S z2z&21MW)^0@4q1DxsOxIb-c!~$KFq%nZ{TPkFQerKfxf&C!}I3zfcF`^a%bV$m)f~ zLf)rGgd>4m_cQM^j$fB!JPsa{My}-Z6lMmm%~w(OJP>(Wtpky>%rf~O`97^y6SToS z)KDklK24~Hzh4C+Z`9Mcu}h8`!_NektFJCa^4Ft=eU{K4ZS%N(u!Y_P<^2MlJtiGI zYwG0Gc{}nAxt_>F>{QS9OYM471A*PYGC!AchvQj)S#m!8^krSc%K_ytjZ@|SoCIS1 zRr%Fmez_|qCD(&3`3Qf9zDWUU&wE5qaQznZr@bHgV@>^PKCAG^da&QKoc zC*WV~c5~th-T(nlpSuoZur2@p{@@?l?0J4ZMgbcKuwC?7eqQ2NFdt1lz<9JsINz10 z>IMCQg1l54egNhq?7#AFKhdnrQ?j2pk9mzWBa+S^)bif^SnPMgcv`>T3HqRk^W;C~kf`5%RlBkLcOE;D_~*8B%0BCS9_AyF zJb3Wm@!*6jj5k5*IbfV3sdjNV(uWOxD)IsH^Gu!=%T@6IDG!jx@UhC^|D*5^%=gdE z(r5C24ezsuU+~-nq+UNH@ZbFhuJu7m8NcDZh`T)T{AqV&Yge5bP$9)Rl!MT1xjFXA@q2rwX;dMI^v95CbcEl)2&&lg7 zdcLcVdfu~-$*=XmWIV~>KYI0(6n-651&q^Pg$QI_H^CBGum&l zkZ;9rIgc{EUMBFIc=CtL^Yq((w)@x%94O_6&k<~c_o|-v$jvq1$@6ji2@XLX^2B%n z^W{0M&F-bh(|VnP)bBmk|Lzq2Cvlwq0QDEF55p0=@V=z}3(@m&m@fN z2k0;+ZrAS5%6TCCAB-CIaV2bn|21}hSb;Uo8Fm=)Aa1W~?WIDfq7JO1^>aON2fM ze?mPlp3u{zw19f0i$T<=|xU6ZR=bZVwLd*VqST-S<=X%}?}~dHqWML;G>8b42g3 zs`1XWTDI~ZKLnnaci`Wpyr=tOKU3S+eNNpU9RA;ema$Lj)fqhgyg`4^f9L_CF*0!I zfwQwSF^+>VZa_SMoXB_N3H=ZlW%(212&j#&F>BoRW&HQB(+rCMJ1a!U`d^he3{(F9cKA;~xezHc<;5YNuWvTsio|=4L z%y+iso9A0@NK>dE7Wl>TA2o{|&S-!9CFI8ZqWotY+E^dsbs2smj|n+KKdj`v@|Vf; zqAW$+fG!1{ua^YE@4(BC)dOB{ncJ-r$_&rWsm-6gKi2;q=_9b$1I@Ia<~RRtzkEUNTI9QO~qpMS;U;CucR_IoJ*rE};5 z90U=)5#O7~3@;n}1FE|)j@TvO2*fVPe~up~&(#Oj6g_Y*Kh*=6{{!X2JZ=&45%a-A zPSgjSA9`SHJvaG);6Dbipg(#4Ry~dVYUw}n`RvmI@9Ex2&i)33i%a-_N58VX1CkFY z@5KJ(bN4T19pj~_zOMO>0pf}tXl_Br_|5_QJWt^JE#vHl{ZJA6};C^5Bo3LzYN3S??->m)C18^!TYxQ zHUCLx?aF`Dd?MeyUjD~>VE55u>)=1}ru^4`?|DCi_o?lyKhU>7ak&1R`apG^5s&Zu z4e=(tKW4wuJmN(1P9XIO-W$fs`?f_tX+QYO;B&cLhTTV;_tLxR9lBwSR=}RnA9oXe zUypaojC7)oR7eYWwkyO`Fzfz1gRFs>n|NID2*5R zPi_3bU*r>L*am$t;W_F7*YzaN(^#*Xz<>RGeI zu);hOyq_X}zwn>@@05NeuZJF>-!KzhhMh-^uL^k2HZ*7Xo#GbeVgmnfh5Z+Ch~WP% z!mO^o)%-E?F}Lbl#7kQZsN5uc?`%Gw9gAC^B9G_;-wzCbpfMi!>En+>56~dNf8HCG z1^=6VzTr$n?+xU?@|?gwx;z{+>}rU9;a2_I<(m@)!Y1LoaNw?Xf>U zCBC18y@!VVctS^>4Bqn=rFd{~a47$^Z`6-GO0(SXKm7j^2TT9|;1GWfWIE4EzLU<_ z4b;A<4+zw9j_cRUf3lU~2l#y=`9J-T?|)$bQTJ2(6?M$`KJ!V4dvkdIbWNN?8GX^` z0oLnPrvKlyOOf@FC!TWZK ze1YFm!31Pp=w}Z`EI{;-`ZdBAHjhCw@?eM{D=Nsd8@dE7+#8u zw{O+A%3Jf!Xc6%f)LJyD! zD#g7?8-4)c$A$V}J|B(XKjYlZQam_hemj1^!uo^Cv#38MMt$g4)Oh6mOAg3)pb#52 z@J``7^dsJ9+#tr!k{D-5;XUIlQ<1~i^^|-&W%++N8Dpp2f38j8EAk9~@xz}4-s|Rr z#NT(e@%ORs*n=JUj+?wK;%;o#zZ2geKk7&P#=FpbH@}GZ<{|ScaGU0M#R32nm^Znc03@Eiq!CaOnW5v>OZrO1A3r_`>Syc@9p0j`;XW! zYk1FT!GGM;8RZ8QFX1=eY3r^;JJdVf;4OB0p=C0$j_1YTafoBFNdJX|NMU~ zvF5#BuH7D!*Ob3>ODDelfp}ZKo96@BPP)bZ|K;-X1pOk&;nD52B4tTZ$-_ZlJd3F;1XZUZZsX{-Fc|jBP_i~9m;`g`6hxXt8 zwkcmEX9(J7Kgl`{D;<;@cxguI}6x;dx2ls z+)Zx(D;*^N<2>R4E+Za@?=3LzAo(1+59Ph>ojlYZSZME$t{8s?{odISUOwcz*q6!A zJjU+R|2?mXo8vffEB2qq^?Kmv-_;Yr`>^xqgYffdpO{}Tz|zbAo5Y7chwaYyd~V5K zV|Fe45tv<;vHpqfs_H&2Y1IeNpq2NwugK5j{cCtn|C0B+dGil{koPwa_xI)Z?kCOz z$yvuS`9#DIxy<``U}jml%qXkB=~sCl{HK4m>}S-`TJ$~bZ(t#^f6OXH-8NyApZ$>KFUDEiFiG~i`%4sk3Y_RDX%dE@*Mp;6YaMgx$(L3 zzHO`9@;>3c#nl>p3-8rWqTf}P|9|+y|NX!6UVjVL-+_J$`2J7cNB&pr69wP@9A(h_ zNNr>DSHk~q@Xz!E;PWE%0PapnK0uzA=mXsHVTm80pHcGNHq=Udw~5Q~2gnb&ZW;W7 zg{bh}d?EI~u7~&&1-!o?4iQJA9pnD5u)4(U=Jk3W1M|Eo!k){2!!Yco+L9fx#p21owk^ zJITW)lmGHqKD*yr@EyY~&$&E!uAPRzcjwMi1nC{@f9|}Fi{L*Eo^N=+!HN9$ zJqmcQ|0@3v_xJXCyWg$h{jH?D-=YovY083C`A`47ZT{T+ll6r6|3ug`mH+GY;Q?;? zpP|7n9u|n6C`;mlA$~!x2kPKIdKZ1*II#SuoACpR>4)=vpD7t1V{u#Vlp|Js?FY*PBb+L83LpR1hJdPE=D_Y6gb3L3>XSz_neoG)1eyj zn2N;Dd)}{mb+2`S?FJH2f5+EgpNQ`-lRvRj@ZZ#o7ig=ZsT24gO%v)q4C~qqtpCuC z2jqQ(vG$`nUNgpRec}0L)N!ca{UZO*p0Umxb!$$W_^mi+IKf>3|16+h6!?9bS&@_H zQ@%OY?{6oQU*-Piet)ld+q~8q2k$;VxCe{v;9c`N{54voT-c1kmb=|b{=JP62VigE zo_<5@M8|*lef^5uGjGjWUEt>v^6khIiqok!+tOS?)T9t`wRZ-hIz8Hx$#IgAI?us?l$oMUasXo z>L>8ebUd$;bN#(_fFJy)oR9pE$CGJ|J+R%@X9anI5oUe1CSa(s13rJbx4o#~w^x%7 zSPn0&2LNt?9jJQyv3?`*%ToTS^sF1wPiQ@%so|gB6`@hjXsB;u&ZiCQ&TKY!cM0R8de!n1 z^j{DlwenB=wA22x4(Lk$!5;22))DRZbNFYTluZHue!rk!k3{Q^e_8KjS()d5I^_P6 z-@A^k{Cj=!uibd$zf9zvm&)@<2k+pX4mbJdey!ynFGxROGUNHM&UrImt$6;dmxMWp zae=-M?@#r=hy$YTNB&^H9|48@^-|i&A8_vRb?;H>4-@pk15Q-_)BV#^`6nL^|4(^{eBXS)-w7EHkk`O} z$#YW4%Z|18m>0Om?(<5p1AKle_f)kDm9pRy|3i)sp5gDw^T_Y1`!Era-1B^LIL02} zui(9E8DEBK&(-CE`OZ-LadWuGZXIRlOMbvhTtM9z?*GF-S^f+8FKJ&1dT@BSOyHk# z=L@;#`)hdrP5Y>N+?w~vuoi5eIo__*qht9ePrI(+AM2ll|6h>r!#&M0;(zvs|F3yW zaE|}y?K1p6`+fBLy&UfO9Q@~>jU#jN|7+?&D&Z{K*%fvt#p_?0ufpRM^HA#V=?8f7 z`}%YI^)~pI=PdYLELHH`8_K_RCY0eBN7@59<$M1SMs@apI8!@9)U)|+U*zBQoC}U? z9B)0M|NPUn_KEs&)Gde)p4+csp01KMupTArO!I0OA7On5J5W~bH|jl2DPO}2#!c~u z&!5n#$cX#NTiP7mj;Es>{xQ2F`M-lF`ImG1_r~V4@ZWemRDUA>6?b0#i57x?+}>LL zQ|`CiM_oSnUmnOk+qbIYe^leP20LKCYw|nega}+~#{bdGmkqx^+UGvVnLOcdV?1ec zY5foT0sqF?^16k)0lN11a_sLcLLZ0^+Q;{v5!-i94$Tk`vk{{r3<>Psr)!$zw0;R5cB z^W?w!2|oe<%awT<{Q=m`;Gg@R!FxB~gmr=2+acQri(Tukh|X8I8Pip0h`7 zRhrpI?h9Tj@xXoO|LLF8|MMc=kGg*b|7_mLFZa#*9r|#iJ@9_H9dR(+b6QDpo}X)% zRQo5i2fR(bpU=~opEvK<|5NwJ;Sc7+_wbkw@c(7GpBVq+$2Rh>U;WPg|L7UbaEp6} z`wi_pKNo}@U^jW#0d9zPfViW}2XfX`gVQbNp;G=U<(})=sXWJC$31l&?Z7eh zHPn7u`9H!z`MJC(jW7Ocoxg|u%)EabhwELt($)z5Lrg bRO-0LHU0XoSI+pJx4tj`BkL3><($#K7P0$f literal 0 HcmV?d00001 diff --git a/Templates/Empty/game/art/environment/Fog_Cube.DAE b/Templates/Empty/game/art/environment/Fog_Cube.DAE new file mode 100644 index 0000000000..34cad9f48d --- /dev/null +++ b/Templates/Empty/game/art/environment/Fog_Cube.DAE @@ -0,0 +1,177 @@ + + + + + Richard + OpenCOLLADA for 3ds Max; Version: 1.4.1; Revision: exported; Platform: x64; Configuration: Release_Max2011_static + file:///G:/Documents%20and%20Settings/Richard/Mijn%20documenten/3dsmax/scenes/FogVolumes.max + + 2014-08-16T10:10:23 + 2014-08-16T10:10:23 + + Z_UP + + + + + + + + 0 0 0 1 + + + 0.588 0.588 0.588 1 + + + 0.588 0.588 0.588 1 + + + 0.9 0.9 0.9 1 + + + 0 + + + 0 0 0 1 + + + 1 1 1 1 + + + 1 + + + + + + + + 0 + 0 + 0 + 1.5 + 0 + 3 + 1 + 0 + + + 1 + 1 + 0 + 0.1 + 0 + + + + + + + + + + + + + + + -0.85 -1 -0.85 0.85 -0.85 -1 -1 0.85 -0.85 0.85 0.85 -1 -0.85 -1 0.85 1 -0.85 0.85 -1 0.85 0.85 0.85 1 0.85 -1 -0.85 -0.85 -0.85 -0.85 -1 1 -0.85 -0.85 0.85 -1 -0.85 -0.85 1 -0.85 -0.85 0.85 -1 0.85 1 -0.85 1 0.85 -0.85 -0.85 -0.85 1 -1 -0.85 0.85 0.85 -0.85 1 0.85 -1 0.85 -0.85 0.85 1 -0.85 1 0.85 0.85 0.85 1 1 0.85 0.85 + + + + + + + + + + -0.341586 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 0.341586 0.341586 -0.8755788 0.341586 -0.341586 -0.8755788 -0.341586 -0.341586 0.8755786 0.341586 -0.341586 0.8755788 0.341586 0.341586 0.8755788 -0.341586 0.341586 0.8755788 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 -0.341586 0.341586 -0.8755786 0.341586 -0.341586 -0.8755788 0.341586 0.8755786 -0.341586 -0.341586 0.8755788 0.341586 -0.341586 0.8755786 0.341586 0.341586 0.8755788 -0.341586 0.341586 0.341586 0.8755786 -0.341586 -0.341586 0.8755788 -0.341586 -0.341586 0.8755786 0.341586 0.341586 0.8755788 0.341586 -0.8755786 0.341586 -0.341586 -0.8755788 -0.341586 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 0.341586 0.341586 + + + + + + + + + + 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0.07542458 0.07542461 4.99755e-4 0.07542479 0.07542461 4.99547e-4 0.07542455 0.07542461 4.99755e-4 0.07542461 0.9245752 4.99547e-4 0.07542458 0.9245754 4.99755e-4 0.07542458 0.9245754 0.9995003 0.07542455 0.9245754 4.99755e-4 0.07542455 0.9245754 0.9995003 0.9245752 0.07542461 4.99576e-4 0.9245754 0.07542479 4.99547e-4 0.07542458 0.07542461 0.9995003 0.9245752 0.07542461 4.99576e-4 0.9245752 0.07542461 0.9995004 0.9245752 0.9245754 4.99547e-4 0.07542455 0.07542461 0.9995003 0.9245752 0.07542461 0.9995004 0.07542461 0.07542479 0.9995005 0.9245752 0.9245754 4.99576e-4 0.9245752 0.07542461 0.9995005 0.9245752 0.9245754 4.99576e-4 0.07542479 0.9245754 0.9995005 0.9245752 0.9245754 0.9995004 0.9245754 0.9245752 0.9995005 0.9245752 0.9245754 0.9995004 0.9995003 0.07542461 0.07542458 0.9245752 4.99547e-4 0.07542461 0.9245752 4.99547e-4 0.07542461 0.9995003 0.07542461 0.07542458 0.9995003 0.07542461 0.9245754 0.9245752 4.99547e-4 0.9245754 0.9245752 4.99547e-4 0.9245754 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.07542458 0.9245752 0.9995005 0.07542461 0.9995003 0.9245754 0.07542458 0.9245752 0.9995005 0.07542461 0.9995003 0.9245754 0.9245754 0.9245752 0.9995005 0.9245754 0.9995003 0.9245754 0.9245754 0.9245752 0.9995005 0.9245754 0.9995004 0.07542482 0.07542461 0.9995003 0.9245754 0.07542461 0.9245752 0.9995004 0.07542461 0.07542455 0.9995003 0.07542461 4.99606e-4 0.9245752 0.07542461 4.99725e-4 0.07542458 0.07542461 0.07542479 4.99576e-4 0.07542461 0.9245754 4.99755e-4 0.07542461 0.07542458 4.99755e-4 0.9245754 0.9245752 4.99576e-4 0.9245754 0.9995003 0.07542458 0.9245754 0.9995004 0.9245752 0.9245754 0.9245754 0.9995003 0.9245754 0.07542482 0.9995004 0.9245754 4.99755e-4 0.9245754 0.9245754 4.99576e-4 0.07542482 0.9245754 0.9995003 0.07542461 0.07542458 0.9995003 0.9245754 0.07542458 0.9995003 0.9245754 0.07542458 0.9995003 0.07542461 0.07542458 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.9245754 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.9245754 + + + + + + + + + + -0.8644259 0.01841655 0.3300502 -0.8715108 -0.05526615 0.3184382 -0.8644259 0.01841664 -0.3300501 -0.8715108 -0.05526611 -0.3184382 0.8738725 -0.06754867 0.3145678 0.8597026 -0.006149054 -0.3377912 0.8738725 -0.06754874 -0.3145678 0.8597026 -0.006148929 0.3377911 0.883319 -0.2990854 -0.116681 0.8478944 0.3571441 -0.06756432 0.8597026 0.3377913 0.00614921 0.883319 -0.2990854 0.116681 0.2990854 0.883319 -0.116681 -0.3571441 0.8478944 -0.06756432 -0.3377913 0.8597026 0.00614921 0.2990854 0.883319 0.116681 -0.883319 0.2990854 -0.116681 -0.8478944 -0.3571441 -0.06756432 -0.8597026 -0.3377913 0.00614921 -0.883319 0.2990854 0.116681 -0.2990854 -0.883319 -0.116681 0.3571441 -0.8478944 -0.06756432 0.3377913 -0.8597026 0.00614921 -0.2990854 -0.883319 0.116681 0.8360862 -0.3764972 0.1289794 0.7071068 -0.7071068 0 0.7071068 0.7071068 0 0.3764972 0.8360862 0.1289794 -0.3764972 -0.8360862 0.1289794 -0.7071068 -0.7071068 0 -0.7071068 0.7071068 0 -0.8360862 0.3764972 0.1289794 0.8360862 -0.3764971 -0.1289794 0.7071068 -0.7071068 0 0.3764971 0.8360862 -0.1289794 0.7071068 0.7071068 0 -0.3764971 -0.8360862 -0.1289794 -0.7071068 -0.7071068 0 -0.8360862 0.3764971 -0.1289794 -0.7071068 0.7071068 0 -0.376497 0.1289792 0.8360862 -0.3764973 -0.1289798 0.8360861 -0.8833191 -0.2990855 0.1166808 -0.883319 0.2990853 -0.1166812 -0.3764971 0.1289794 -0.8360862 -0.3764972 -0.1289795 -0.8360862 -0.8833191 -0.2990855 -0.1166807 -0.883319 0.2990853 0.1166812 0.883319 -0.2990853 0.1166812 0.8833191 0.2990855 -0.1166807 0.3764971 0.1289797 -0.8360862 0.3764971 -0.1289793 -0.8360862 0.883319 -0.2990853 -0.1166811 0.8833191 0.2990855 0.1166808 0.3764972 0.1289799 0.8360861 0.3764971 -0.128979 0.8360862 0.3764972 0.8360862 0.1289794 0.3764971 0.8360862 -0.1289794 0.8360862 -0.3764971 -0.1289794 0.8360862 -0.3764972 0.1289794 -0.8360862 0.3764972 0.1289794 -0.8360862 0.3764971 -0.1289794 -0.3764972 -0.8360862 0.1289794 -0.3764971 -0.8360862 -0.1289794 + + + + + + + + + + 0.1043954 -0.9396398 0.3258505 -0.06496345 -0.9379679 -0.3405817 0.1043953 -0.9396398 -0.3258505 -0.06496349 -0.937968 0.3405817 0.05187585 -0.9370471 -0.3453283 -0.1307439 -0.939827 -0.3156443 0.05187577 -0.9370471 0.3453283 -0.1307438 -0.939827 0.3156443 0 0.3634471 -0.9316148 -0.196368 0.2889368 -0.9369926 0.1307441 -0.3156442 -0.939827 0 -0.3634471 -0.9316148 -0.3634471 0 -0.9316148 -0.2889368 -0.196368 -0.9369926 0.3156442 0.1307441 -0.939827 0.3634471 0 -0.9316148 0 -0.3634471 -0.9316148 0.196368 -0.2889368 -0.9369926 -0.1307441 0.3156442 -0.939827 0 0.3634471 -0.9316148 0.3634471 0 -0.9316148 0.2889368 0.196368 -0.9369926 -0.3156442 -0.1307441 -0.939827 -0.3634471 0 -0.9316148 0.2608475 0.2608475 -0.9294714 0.6191276 0.6191276 -0.4830755 -0.6191276 0.6191276 -0.4830755 -0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 0.6191276 -0.6191276 -0.4830755 -0.6191276 -0.6191276 -0.4830755 -0.2608475 -0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 -0.6191276 -0.6191276 -0.4830755 0.2608475 -0.2608475 -0.9294714 0.6191276 -0.6191276 -0.4830755 -0.2608475 0.2608475 -0.9294714 -0.6191276 0.6191276 -0.4830755 0.2608475 0.2608475 -0.9294714 0.6191276 0.6191276 -0.4830755 0.2608476 -0.9294715 0.2608473 -0.2608474 -0.9294714 -0.2608479 1.81809e-7 -0.363447 -0.9316149 2.27262e-7 -0.3634472 -0.9316148 0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608477 2.72714e-7 -0.363447 0.9316149 2.72714e-7 -0.3634472 0.9316148 2.72714e-7 -0.3634472 -0.9316148 2.72714e-7 -0.363447 -0.9316149 -0.2608474 -0.9294714 -0.2608478 0.2608476 -0.9294714 0.2608474 1.81809e-7 -0.3634472 0.9316148 2.27262e-7 -0.3634471 0.9316149 -0.2608473 -0.9294714 0.260848 0.2608477 -0.9294715 -0.2608472 -0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608475 0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 -0.2608475 0.2608475 -0.9294714 + + + + + + + + + + + + + + + + + +

9 0 21 0 13 1 25 1 3 2 15 2 3 2 15 2 1 3 13 3 9 0 21 0 16 4 28 4 18 5 30 5 22 6 34 6 22 6 34 6 20 7 32 7 16 4 28 4 0 8 12 8 11 9 23 9 19 10 31 10 19 10 31 10 4 11 16 11 0 8 12 8 10 12 22 12 15 13 27 13 23 14 35 14 23 14 35 14 5 15 17 15 10 12 22 12 14 16 26 16 12 17 24 17 21 18 33 18 21 18 33 18 7 19 19 19 14 16 26 16 2 20 14 20 8 21 20 21 17 22 29 22 17 22 29 22 6 23 18 23 2 20 14 20 0 8 36 24 8 21 20 21 9 0 37 25 1 3 38 26 10 12 39 27 11 9 23 9 2 20 40 28 12 17 24 17 13 1 41 29 3 2 42 30 14 16 43 31 15 13 27 13 4 11 44 32 16 4 45 33 17 22 29 22 5 15 46 34 18 5 47 35 19 10 31 10 6 23 48 36 20 7 49 37 21 18 33 18 7 19 50 38 22 6 51 39 23 14 35 14 9 0 21 0 8 21 52 40 2 20 53 41 2 20 53 41 13 1 25 1 9 0 21 0 13 1 25 1 12 17 54 42 14 16 55 43 14 16 55 43 3 2 15 2 13 1 25 1 3 2 15 2 15 13 56 44 10 12 57 45 10 12 57 45 1 3 13 3 3 2 15 2 1 3 13 3 11 9 58 46 0 8 59 47 0 8 59 47 9 0 21 0 1 3 13 3 16 4 28 4 4 11 60 48 19 10 61 49 19 10 61 49 18 5 30 5 16 4 28 4 18 5 30 5 5 15 62 50 23 14 63 51 23 14 63 51 22 6 34 6 18 5 30 5 22 6 34 6 7 19 64 52 21 18 65 53 21 18 65 53 20 7 32 7 22 6 34 6 20 7 32 7 6 23 66 54 17 22 67 55 17 22 67 55 16 4 28 4 20 7 32 7 11 9 23 9 10 12 68 56 5 15 69 57 5 15 69 57 19 10 31 10 11 9 23 9 4 11 70 58 17 22 29 22 8 21 20 21 8 21 20 21 0 8 71 59 4 11 70 58 15 13 27 13 14 16 72 60 7 19 73 61 7 19 73 61 23 14 35 14 15 13 27 13 12 17 24 17 2 20 74 62 6 23 75 63 6 23 75 63 21 18 33 18 12 17 24 17

+
+
+
+
+ + + + + 0 0 0 + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + +
\ No newline at end of file diff --git a/Templates/Empty/game/art/environment/Fog_Cube.cs b/Templates/Empty/game/art/environment/Fog_Cube.cs new file mode 100644 index 0000000000..3c686032c6 --- /dev/null +++ b/Templates/Empty/game/art/environment/Fog_Cube.cs @@ -0,0 +1,8 @@ + +singleton TSShapeConstructor(Fog_CubeDAE) +{ + baseShape = "./Fog_Cube.DAE"; + lodType = "TrailingNumber"; + neverImport = "env*"; + loadLights = "0"; +}; diff --git a/Templates/Empty/game/core/scripts/client/postFx/glow.cs b/Templates/Empty/game/core/scripts/client/postFx/glow.cs index 3cc946b04e..78c46e56dd 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/glow.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/glow.cs @@ -106,3 +106,79 @@ singleton PostEffect( GlowPostFx ) target = "$backBuffer"; }; }; + +singleton ShaderData( PFX_VolFogGlowBlurVertShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/glowBlurV.hlsl"; + DXPixelShaderFile = "shaders/common/postFx/VolFogGlowP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/glowBlurV.glsl"; + OGLPixelShaderFile = "shaders/common/postFx/gl/VolFogGlowP.glsl"; + + defines = "BLUR_DIR=float2(0.0,1.0)"; + samplerNames[0] = "$diffuseMap"; + pixVersion = 2.0; +}; +singleton ShaderData( PFX_VolFogGlowBlurHorzShader : PFX_VolFogGlowBlurVertShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/glowBlurV.hlsl"; + DXPixelShaderFile = "shaders/common/postFx/VolFogGlowP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/glowBlurV.glsl"; + OGLPixelShaderFile = "shaders/common/postFx/gl/VolFogGlowP.glsl"; + + defines = "BLUR_DIR=float2(1.0,0.0)"; +}; + +$VolFogGlowPostFx::glowStrength = 0.3; + +singleton PostEffect( VolFogGlowPostFx ) +{ + // Do not allow the glow effect to work in reflection + // passes by default so we don't do the extra drawing. + allowReflectPass = false; + renderTime = "PFXAfterBin"; + renderBin = "FogBin"; + renderPriority = 1; + // First we down sample the glow buffer. + shader = PFX_PassthruShader; + stateBlock = PFX_DefaultStateBlock; + texture[0] = "$backbuffer"; + target = "$outTex"; + targetScale = "0.5 0.5"; + isEnabled = true; + // Blur vertically + new PostEffect() + { + shader = PFX_VolFogGlowBlurVertShader; + stateBlock = PFX_DefaultStateBlock; + internalName = "vert"; + texture[0] = "$inTex"; + target = "$outTex"; + }; + // Blur horizontally + new PostEffect() + { + shader = PFX_VolFogGlowBlurHorzShader; + stateBlock = PFX_DefaultStateBlock; + internalName = "hor"; + texture[0] = "$inTex"; + target = "$outTex"; + }; + // Upsample and combine with the back buffer. + new PostEffect() + { + shader = PFX_PassthruShader; + stateBlock = PFX_GlowCombineStateBlock; + texture[0] = "$inTex"; + target = "$backBuffer"; + }; +}; + +function VolFogGlowPostFx::setShaderConsts( %this ) +{ + %vp=%this-->vert; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); + %vp=%this-->hor; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); +} \ No newline at end of file diff --git a/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs b/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs index d30d2314ba..77d664f416 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/postFxManager.gui.settings.cs @@ -70,6 +70,7 @@ postVerbose("% - PostFX Manager - PostFX disabled"); } + VolFogGlowPostFx.disable(); } function PostFXManager::settingsEffectSetEnabled(%this, %sName, %bEnable) diff --git a/Templates/Empty/game/core/scripts/client/renderManager.cs b/Templates/Empty/game/core/scripts/client/renderManager.cs index dcd1628fe4..5734bbce60 100644 --- a/Templates/Empty/game/core/scripts/client/renderManager.cs +++ b/Templates/Empty/game/core/scripts/client/renderManager.cs @@ -75,6 +75,8 @@ function initRenderManager() DiffuseRenderPassManager.addManager( new RenderParticleMgr() { renderOrder = 1.35; processAddOrder = 1.35; } ); DiffuseRenderPassManager.addManager( new RenderTranslucentMgr() { renderOrder = 1.4; processAddOrder = 1.4; } ); + DiffuseRenderPassManager.addManager(new RenderObjectMgr(FogBin){ bintype = "ObjectVolumetricFog"; renderOrder = 1.45; processAddOrder = 1.45; } ); + // Note that the GlowPostFx is triggered after this bin. DiffuseRenderPassManager.addManager( new RenderGlowMgr(GlowBin) { renderOrder = 1.5; processAddOrder = 1.5; } ); diff --git a/Templates/Empty/game/scripts/server/VolumetricFog.cs b/Templates/Empty/game/scripts/server/VolumetricFog.cs new file mode 100644 index 0000000000..53e03adf30 --- /dev/null +++ b/Templates/Empty/game/scripts/server/VolumetricFog.cs @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function VolumetricFog::onEnterFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj enters the fog area. + + // echo("Control Object " @ %obj @ " enters fog " @ %this); +} + +function VolumetricFog::onLeaveFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj leaves the fog area. + + // echo("Control Object " @ %obj @ " left fog " @ %this); +} + +function VolumetricFog::Dissolve(%this,%speed,%delete) +{ + // This method dissolves the fog at speed milliseconds + %this.isBuilding = true; + if (%this.FogDensity > 0) + { + %this.setFogDensity(%this.FogDensity - 0.005); + %this.schedule(%speed,Dissolve,%speed,%delete); + } + else + { + %this.isBuilding = false; + %this.SetFogDensity(0.0); + if (%delete !$= "" && %delete !$="0" && %delete !$="false") + %this.schedule(250,delete); + } +} + +function VolumetricFog::Thicken(%this,%speed, %end_density) +{ + // This method thickens the fog at speed milliseconds to a density of %end_density + + %this.isBuilding = true; + if (%this.FogDensity + 0.005 < %end_density) + { + %this.setFogDensity(%this.FogDensity + 0.005); + %this.schedule(%speed,Thicken,%speed, %end_density); + } + else + { + %this.setFogDensity(%end_density); + %this.isBuilding = false; + } +} + +function GenerateFog(%pos,%scale,%color,%density) +{ + // This function can be used to generate some fog caused by massive gunfire etc. + // Change shape and modulation data to your likings. + + %fog=new VolumetricFog() { + shapeName = "art/environment/Fog_Sphere.dts"; + fogColor = %color; + fogDensity = "0.0"; + ignoreWater = "0"; + MinSize = "250"; + FadeSize = "750"; + texture = "art/environment/FogMod_heavy.dds"; + tiles = "1"; + modStrength = "0.2"; + PrimSpeed = "-0.01 0.04"; + SecSpeed = "0.02 0.02"; + position = %pos; + rotation = "0 0 1 20.354"; + scale = %scale; + canSave = "1"; + canSaveDynamicFields = "1"; + }; + + if (isObject(%fog)) + { + MissionCleanup.add(%fog); + + %fog.Thicken(500,%density); + } + + return %fog; +} \ No newline at end of file diff --git a/Templates/Empty/game/scripts/server/scriptExec.cs b/Templates/Empty/game/scripts/server/scriptExec.cs index f2f2d1f586..77a5d8d27c 100644 --- a/Templates/Empty/game/scripts/server/scriptExec.cs +++ b/Templates/Empty/game/scripts/server/scriptExec.cs @@ -22,3 +22,4 @@ // Load up all scripts. This function is called when // a server is constructed. +exec("./VolumetricFog.cs"); \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl new file mode 100644 index 0000000000..aaadbf4793 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final pixel shader V2.00 + +#include "shadergen:/autogenConditioners.h" +#include "../torque.hlsl" + +uniform sampler2D prepassTex : register(S0); +uniform sampler2D depthBuffer : register(S1); +uniform sampler2D frontBuffer : register(S2); +uniform sampler2D density : register(S3); + +uniform float accumTime; +uniform float4 fogColor; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform float2 viewpoint; +uniform float2 texscale; +uniform float3 ambientColor; +uniform float numtiles; +uniform float fadesize; +uniform float2 PixelSize; + +struct ConnectData +{ + float4 hpos : POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +float4 main( ConnectData IN ) : COLOR0 +{ + float2 uvscreen=((IN.htpos.xy/IN.htpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; + float depth = tex2D(depthBuffer,uvscreen).r; + float front = tex2D(frontBuffer,uvscreen).r; + + if (depth <= front) + return float4(0,0,0,0); + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + float3 col = fogColor.rgb; + if (textured != 0.0) + { + float2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + float2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; + float2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + float4 resultColor = float4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + return hdrEncode(resultColor); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl new file mode 100644 index 0000000000..bb06f5f7c4 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl @@ -0,0 +1,39 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass pixel shader V1.00 + +struct ConnectData +{ + float4 hpos : POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : COLOR0 +{ + float OUT; + + clip( IN.pos.w ); + OUT = IN.pos.w; + + return float4(OUT,0,0,1); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl new file mode 100644 index 0000000000..2d13cdf015 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass vertex shader V1.00 + +#include "shaders/common/hlslstructs.h" + +struct ConnectData +{ + float4 hpos : POSITION; + float4 pos : TEXCOORD0; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_P IN) +{ + ConnectData OUT; + + float4 inPos = IN.pos; + inPos.w = 1.0; + + OUT.hpos = mul( modelView, inPos ); + OUT.pos = OUT.hpos; + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl new file mode 100644 index 0000000000..87226a1ac5 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +uniform float4 fogColor; +uniform float fogDensity; +uniform float reflStrength; + +struct ConnectData +{ + float4 hpos : POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : COLOR0 +{ + return float4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl new file mode 100644 index 0000000000..7f86802b54 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final vertex shader V1.00 + +#include "shaders/common/hlslstructs.h" + +struct ConnectData +{ + float4 hpos : POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_PNT IN) +{ + ConnectData OUT; + + OUT.hpos = mul(modelView, IN.pos); + OUT.htpos = OUT.hpos; + OUT.uv0 = IN.uv0; + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogP.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogP.glsl new file mode 100644 index 0000000000..7895d9e2d1 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogP.glsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../gl/torque.glsl" + +uniform sampler2D prepassTex; +uniform sampler2D depthBuffer; +uniform sampler2D frontBuffer; +uniform sampler2D density; + +uniform float accumTime; +uniform vec4 fogColor; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform vec4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform vec2 viewpoint; +uniform vec2 texscale; +uniform vec3 ambientColor; +uniform float numtiles; +uniform float fadesize; +uniform vec2 PixelSize; + +in vec4 _hpos; +#define IN_hpos _hpos +out vec4 OUT_col; + +void main() +{ + vec2 uvscreen=((IN_hpos.xy/IN_hpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; + float depth = tex2D(depthBuffer,uvscreen).r; + float front = tex2D(frontBuffer,uvscreen).r; + + if (depth <= front) + { + OUT_col = vec4(0,0,0,0); + return; + } + + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + vec3 col = fogColor.rgb; + if (textured != 0.0) + { + vec2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + vec2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; + vec2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + vec4 returnColor = vec4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + OUT_col = hdrEncode(returnColor); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl new file mode 100644 index 0000000000..017ea6ef8e --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +in vec4 _hpos; +#define IN_hpos _hpos + +out vec4 OUT_col; + +void main() +{ + float OUT; + clip( IN_hpos.w ); + OUT = IN_hpos.w; + + OUT_col = vec4(OUT,0,0,1); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl new file mode 100644 index 0000000000..2f2a1318ac --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + vec4 inPos = IN_position; + inPos.w = 1.0; + + OUT_hpos = tMul( modelView, inPos ); + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl new file mode 100644 index 0000000000..78e149fbf5 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +uniform vec4 fogColor; +uniform float fogDensity; +uniform float reflStrength; +out vec4 OUT_col; + +void main() +{ + OUT_col = vec4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogV.glsl b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogV.glsl new file mode 100644 index 0000000000..57b3ba87e7 --- /dev/null +++ b/Templates/Empty/game/shaders/common/VolumetricFog/gl/VFogV.glsl @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + OUT_hpos = tMul(modelView, IN_position); + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl b/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl new file mode 100644 index 0000000000..8a61b5928a --- /dev/null +++ b/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +#include "./postFx.hlsl" + +uniform sampler2D diffuseMap : register(S0); +uniform float strength; + +struct VertToPix +{ + float4 hpos : POSITION; + + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + + float2 uv4 : TEXCOORD4; + float2 uv5 : TEXCOORD5; + float2 uv6 : TEXCOORD6; + float2 uv7 : TEXCOORD7; +}; + +float4 main( VertToPix IN ) : COLOR +{ + float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + float4 OUT = 0; + OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + float3 rgb2lum = float3( 0.30, 0.59, 0.11 ); + OUT.a = dot( OUT.rgb, rgb2lum ); + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/postFx/gl/VolFogGlowP.glsl b/Templates/Empty/game/shaders/common/postFx/gl/VolFogGlowP.glsl new file mode 100644 index 0000000000..01b072dd99 --- /dev/null +++ b/Templates/Empty/game/shaders/common/postFx/gl/VolFogGlowP.glsl @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +uniform sampler2D diffuseMap; +uniform float strength; + +out vec4 OUT_col; + +in vec2 uv0; +in vec2 uv1; +in vec2 uv2; +in vec2 uv3; + +in vec2 uv4; +in vec2 uv5; +in vec2 uv6; +in vec2 uv7; + +void main() +{ + vec4 kernel = vec4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + OUT_col = vec4(0); + OUT_col += texture( diffuseMap, uv0 ) * kernel.x; + OUT_col += texture( diffuseMap, uv1 ) * kernel.y; + OUT_col += texture( diffuseMap, uv2 ) * kernel.z; + OUT_col += texture( diffuseMap, uv3 ) * kernel.w; + + OUT_col += texture( diffuseMap, uv4 ) * kernel.x; + OUT_col += texture( diffuseMap, uv5 ) * kernel.y; + OUT_col += texture( diffuseMap, uv6 ) * kernel.z; + OUT_col += texture( diffuseMap, uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + vec3 rgb2lum = vec3( 0.30, 0.59, 0.11 ); + OUT_col.a = dot( OUT_col.rgb, rgb2lum ); +} diff --git a/Templates/Empty/game/tools/classIcons/VolumetricFog.png b/Templates/Empty/game/tools/classIcons/VolumetricFog.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc516cb53d99e0ae0d125507d6d95c9a2942107 GIT binary patch literal 3642 zcmV-A4#n|_P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000AJNkl9kNXb9;;<2!NH znsiy4Zgt--Ts3J^cd%(1u`#6(l!CQskx~@vbJU9r;0%Z}-nldP{@pZ<@$A0jJIfD{)_^I^O+{5a?kaZ= zQ1QH@C8J3IT;+bCP#^WI>8aTM(st)^=CTvfBP(4kU3SNw4!Nyzn?IM%#jJvrP^d~n z8c!8!MN3ALDAYkAMDNkfM;q6lY+U7`^zna2<4gX>yRzZ=&WF{h&WojAWU=Mh`F9iV z`2tq?ru+7NO%vKR9oT1kcJGl5M_!re_^skh-z9&e(M)ZqhVX_UuWxB1U2k!F;;;5Q z*&FRw(qnwM>)}wEx)g{gkUH*6b2f?j+0kWfF;(soz|O zUC1#zcb9>)gNGV|tzXaQ7MrE5=Xcs|Pq*F4P5bRa9@Fq)2K>}E*I?&u(oUM9Tfiw6 z@H~&2wT(2z>oCLe@UkznOLt_UX5G4a>e~+DxHbxf^h?SUA&S!_@@^hy!68r^!ZS-~ z(x7+mex{eNM#cxnj_Lw|%0Wo{amOFSH~`19T*Rq+Tp*WvBm zZxL&0LJW%*T_|zu?)Zb|ja!-sR#$NEl11rant`dG$mMM8l;T3wFlJQZ-7L_ws)_7K zmboYQ(S?rI5qcvQEk!F;QB<0bd|bcqH$UGRLOwHiGulaKcRMW)Hsa5g^Z3ydrmY#S zTi2MJnZZ{K%;vUaZPkO;@su>V4IintAQpulf#4zl^$1-NnpE=Iq3Y zi9P4$&t*KkD?aHv#cRIuZDMoua?!9O~L4he>M0}s!;H8_931#%b~$8B-rIfJ0(L8H|{ z1WF+{Bn<*dZz8n^krZHCQUgqt*af&n+@RfTZXj{bu4hb-PP}nPL>VW2CWMLdW!3$y zQZl-4@&vS2SCK4M?Y+KleQT{|H!|)U-F;-Uq2!5{@?lc z&maBE|Mma*!T{S^vco*(`GEHN3;m?C0sD&5mV%DhD^hJ2FoKDC3I=W~EwZPu!>oF(nZtcxD zNsc@=P1{X1^|$lo_{ZVYzie?m(bwU0Jef?)*U{IlR(oc@Hd9p#n(k}+^?UX9Oucqr zr{nP?daYi!TdkJ)CVHKwX=1+7uVa4fH~O0tI`ICOBR9wjWd&9D{FWqgnSghQw z8m~M**v@j6a=kaNX0vrTQRC#RG*y#uEW^w8&f@dQv8GMay^-d4Im8vrHh;CbgsT~ zaSU&S@BscY4Zl*)<3_U`eHDK7{$$<}{I@2{x%s1p2b%DK`>M#Tg%6%*d6t>4Y*OS| zY@VB>JIoiF>o0^Cu;pa(PcAWu_?>_5lJ%@vW1N!t@9S7~v07zWg?r)9i|`58RjP|f zY$5m`kJGlf))&w~i_yOZt}Ve2=Q&docLV$z;!n%8QNvFr4JJ04hSSy*{7<9l3@i9= zkCz?$wVlSrw;lD`PT`Gq_>Fp9Z#J9yoA4XxA&vfQzFC%UWBX_Q4TqmPw(Ibn|HgjP zNZyw2wRvs9wcs9l9h%qCYc_k)YyY+Em*cMb{oGFVbit3FMiczdX#BVjKMMYf!Jxwb z3f{2beuSe4?z5~YqidMYSR282#%6`V%5~~%^CSlU=0ZPFK{l`#Y|pqJEWDfwAH=hD z2mD`H99(#y43rZ8j`Lm*|Gr`TYyLJI*W$EPoJV(Il)rViUO#*&_)Y$O*)d|vZe@dJ zyQRT7!!Xg{pJ9#lpF**D#Qu$5uV-FrcpzxY=lb}!9PeKJop-P|CdNPDoz5^H@qIV7 zpaCB+PwVwkY`tEqi8aP7#Kz^DId*IymXPy194%Ji)ZM~cJ^#|&0{22}{Hp9aY@QFh z_Ev-cUQgeGKovg|yw~u2!9QVdXl^5LPW-DZJawaQ;&i&ik8W!9I{xIZ;pLGB&#Dp6 zteo$3~A`0bC>jY}4*ybyl} z=HMVq{9@txUE$t=LwI0iVtv`|79+uT|KUR&#o^_!$e)Srlw}rzXLvOi`|GkyLf+pi zvRHVa%wsE`dobAO3U7!yknQDsJ~zBSg}^oV&iJu>A2g%vr8|q8jfQ3anjagx%d*Hf z95%ooga?S1bFm6uP|tlVeic4f&(Sq4c;I@QdH65o78JG2R-1g5y__ruS#%n%l|DRam+G3%u!zaYMqQX6X9>D{Q zZ)`52i^*i#vV#94NgQzv`fGT27#R?VUp2v}_)jfacOvj#mgzVo?xKJ42)hDzdTJ&w z3g#ahz-x*)&Cf*e|KsuW^XSjvH(Wnff0K)!gZuu-D*b2sO|j0X40 zKm0HJer;ES4F&%7FYwQ=-E@#IyoP6x9~1CD1Pt36*zzGioO?VOfFC|W)3mT0e zP*45!9J*Cw^*h0RI95+p952;GJrzA5elEN&R>j#`EdH<-Jhvv3D*jK`^G<{gVAxtA zJW!T-re8)c@7){oKK-&inY=IWUo5P#Fa0fkYQ-+`V~5_rJq_1;%lX3B{2(J={$_NXOrdnP{5c2ws`o~$vfO}3?i7jU_e93+jGcNE19&D@c%X{`V zy7l?6qi@68Q9kHKx9ZkpMNjelWo%V=>l3D}aL;|RoQ}s196eJqQ06S@}r^ zi=G01PlX3c*}i}W(6j1k(42un;$7M6_#4j1Z*SOJchee=OTl$An=TD_$Bn(J@IPG& z4{#X+*)MsLeQ91I;OAl)FY*I-JH)RYpT~Vi!UMsxSO3Ga-5O6P{-v6rAC1`Vu!w~( z=JVxLzOS>Kl8>0%3}UG8UUUU_H_F<)vJjV8o0Y$e@FU{>3vhiMm%skRkS~#+j?J~c z_WrwH3oj5Br`79+iQxY_5PpXTM$b}oJjZRsSjF-4JKIQ?hT|hU_+E7r7w{DLR-?GY zKDROY6l<7ov2ottP`B;C zi-_%@p3cHAb^KL={>CzV!V7UhK#JfCyI5qJIG=!9!GCMaaV7qTqauPgpr2CqTLcHk zJwvxm4ROCHik`jnXYt={Nxmf8uV(N7mh18G0s6A==mXqDc;K=Lz{14G?G|}5_)p4C zM~h9#58<_1kW39cK$_UG&-L?Wo4kta=i9A?2MN1<#w&q7W?{wC{l1JhawZ9x7iglV zufyxvvlxFT?q#tt688!GqH~$10DBQrVsXU(6x{o3cinpLz4yTVHF@w_c!2kjSNiLO zdV?B=PnEHGG!Do2?%jJYn&@%a?RG7eys2~(Ge#b+-Na66wR#J@PU;euz<-1MApEoc zZ}s+c8U0y(6PIhY)i<@nG!^@sEE|YkP%-wkpYlB!aerz@cX3}4u!K)YM>|gPf4@!s zA5BSD2NM4!9)!d>rm^t1_Sz#9E!RcdT8Slp?U`#WxX<;I@Cj+-B771auLiwtc&v_# z%qYP>a0CDPIA2*~j-%s7lC~ZAXFN)G0S^%8?|7g&b{GB$^Dqd1=NZ>@?JvU5n@Rji z_#jD>6nky-M_q7#jXR^O+|9 zMAw6Ja2H|8lLirZ%+Ukkjk>OpA7U>Ijuc(1iq9g+pMvoek2dC%&m#{Pu5F@c!J4@}7Hc zo+CdhyT}c`lDRKSTtn3Q@(c{xl@Xb$1y`T{jFWDB|A~r)e+B1Ddy4-SS_Us*g{FysL z7uEflI#mcU2kwWQkcS^+zAQE!PuC6}2!c5G!UyEL@YN+@bIEyM%IBg)!3y{T*F$)z z_<-?TYxscIr<(CW&MyT2{lUgY$oPs55!|EyTL#{pqU-gIrOuTP@%ua71=T?p7=iKahxgiUgiD9uLSoK^kG+%_Y1B=a1Y)G{+288S?-DZc`+CeuP!QH7kxh( zEh^r7yB3{)?Ek}ieH$wu z6L*YkYpc%%|H*e^iI=7Noxkv_;#Z!!VS6@R`WvYqCNsgmAEg~feudi^)WD5gmnL7C zt{K;t=B5GB3J)CeJ^E#IOS!gY{)9d!kQnf*!UpkNQzys@iynxV@B_BWx50TvytMEN zdVeH*Fk7#G?Z~gQj5-#&dqsUz{DrSwfp_AB;M`xCQ5-A5FMJA`uk)2R3fxoX8~Lm7 zf_yV(KRl4EBWyrixWm2gh1dRE_!@gPDtaAt?XE0(N^F+*y6(zc!QX{gla(Dyy_)i7 z4~w_X*04j;p5ZrG{GqZY!+)RiI(`um=hsP66I>{p{Sb*AWu;j3aVG*dTnBgxuYgw> zf~Nri&&BGh0l-{rL>FuuBK=^%brbhTtL=x_%RTrfBF>{K!FhODd+%OLEPMt2^%>(- zXl(h0x;;7{9oG~5w<$2%Gk?O%g*tU7%zvWJ{R#7&V$U}6xar^n@G-NO{v?@+wP!I6 z0LyVy5TqVnYNzNm_zInbE(ov4hZW}^TYw*OUCe7;qZFW{wv1P+1LK_~ zDPYTdQkQR5xaWKvc|3Ii>QtUO7X?#rJ?Qr{dtoj%?r(ds@4w$_I`RM}fc(}!q2O6q z^4j&9_=-JzyR2-j0YCG3$`)yeu7#hb!UMSZ+sZZ?Khf|2bI%zbSp_-%=u)|#`W=y|5QBRWChPY%3O7GXbi#92A?;GVbhc|A3Ye8W_Dryhu+ zMi!Le#8WSZFD6dve1(Via_TmgcyB2n8t@Mu(E0jFpC7@o<%5Fj!LZxa#CPvks|Y?o zfR*S1@&NSjoh?G%N4+Sf9>D%`E}u)$ANE)ulODGHu|2NW$#Xt;$KrqR0r)@stA|&a z-?s3;Sn|Sa^*iz-s)X*EVOm>kOhB-lZ!CEjmb9v+se6^>axRwq>BoZqS_AzpahnSi z{6p8|4f=L8YBY7F2RhUf?XBcT2L2FTYx#Vw#=L@eGeYOGP5$_;K^LN{vk-oS=4T4M zj$MYt>vGuJ0N>ZRTT3kbu~OjL^5d`kIrEmQYj z(p}kec<`;*1^BgB`aFYI%vE$Aqc8MTcpk>_Ta!fR4eIG8(dUW*w$!u4U)a8qc#Ge| zOQRf|Uy0vD=zM6U46!5rBlv(%h@asV{hp18en4kEZbw(@s$>{E_;0tTQ;+_~{TGHf z58o~{xE~BQ1|fX_+=RHU&Y%r!cq#RoNbqU%(ws$S>skC81KuapCGD9xn}2w(F1R=3 zOJWDTUKjiyg8NvV`jb8KZQ%iiwIkcxEBxZbo=~5#=FFWi-fII7Aph3z(wW422mYb^ zrH2m!0;ob4G}_~-TvvZE>@i+fP5jLY4~$s^_s8PbZF*I)EEdiXu_nNBVE zh5j=K{&9;Jp6x#4=D_i=%)HnR1tfQ2FY3VuBk@@Zf!7@dM$D(PAO-UU2?*+z& z*(LbD9Sny<`8@Tu3jdS~W`^Sswt8B05%JjIC!OxfXmoo{n2*3aWfZT7-;@(=Wk={3 zwylj55B~EJ{fsMjUKV}&ZvI@3@2YrSRPh~ozqD889KTzz|D4nB*>io4Ea;o_=$v-T zFgg#<4_^aoZeOFdwK4v4@#w7(slg=gJvITK4C z5?0V>O8iseG&)A`P8*@Z{jxzl54}HMrfrYjZ`Ij8aVLs`0Kbpu&y75mIw1Q!d|>7E zL-p>cA@B3n_uYv(q3u$bGkYTaL08oc(LY$hlNH|i03ATS&}4xC=YNL(EF;DvXtyRB zK9x3*#|HK0IAVV4&GwjiBrj_uusi*}Ja<@N3J-YrxhOn%C$42;(KAEvd@))T-(#PQ z(0vxX_dZz@zw9w#UgFp>;ie=zka(EO`}i8F+U|n7+f;#na5R){{GGa&m;CUDXzZy2 zua}^Gtm5y6m8FgWFN~q@Pbv$+iw(fJ@BwYr4wm>|#rcWUK`itCc49z_3ik#_rhc z3ePcq2g1KHesMw_m3-j6A2(}^&gYbi+Wx{_Y;0`&%rXx(Cf0HtjMv=4VTh-LkHdo<1@+stGLW|Z#d|q4{oSS6~Y6^fkKW) zmyr6qk$Qa97s(k10}l+c48IAlSzfUS@h8EF2j4X&2)qj);BVM><5K)?A)muic551N zW=4O=u~+D}nFW8M`wh6K9^lP+cuKuFkFX;O(-FAOa{6jm+MdhkG(4>ZvkvG#rK~iN z{ge+nA=a?|BCPZ@Jaq2Jzq5h5a%Z0W--FM_v$8AOjdU`P;0MC$Ts}|!fT{@3SF3)H z&!2hvzk;U~pVNGf^5{~7cdpWeXZj@0i2rBin1 z#2(y#*rKn_ad*CBeZ{#up?)~xtPbff@Hu}1-Ns@&G!g~(LAvaC;y<_>SnyAscO-Tq z{Cs8(@vosd(}&FOjO`QJxJxhJD|IyT2k5REmnMKV@F?qP#_rsl*NL<0!kyD^`7ols zN4f1oLwy^!OD+2T9t#WHh538`ntI<|yw5}*%YJxXUT1%gd=`ri0q?J90E(6QH~2A) z{6z3i-DK{s-IFHz#K9}y|B5<4{>*W-Wt)CP1Ae&GZIsvi`gVzAMJziDBZf$0p8)5%He+9|-Q{^X5SB<~ze~gl#luv*;iKzi}BIN4v;ntUee$ zqy7rcJ1Oge#P+?B_w)Io2Jg5*EXU#fSi4Jlti*~wf(H&{o{0a)v+;QBpQ!(rWh?=s z^m(;D1m0D~D8}=mc!pkvb$2-YAq4mI6)K&qR`-7#6haX#^|cb2+3h0WW;?(drM5 z>l*lb0=;OeY13o z1GF)OACKAq-=LGm?R0F<%_%UNs0({aIc^gN^4Q!E=hY#)p6jL_+KbTbF~Ti84iBh%px^Z_ zx#Y{Q*jB6)-9|Y0bMXHMgvhxif6oj2 z?%WdCE%9CI3=w#r&)2^eOF4ZB51i8IDm3vIy6r{ap7c%P@Co^UPl0c9m@dK5$*d%g z1D`SVF|iyj_u!8FXXa1rp+Pr*??cA9a3}hZ&kxN>bjaa{nr-_69yrv8P5ca09g=sh z!P%jzCG*O@dv~0e<67_*Fb|bwUd$QaTlU}&OPppMQe{QY3tr=fobQxIxH=C{8?zscUZd zLwDHO*fyN^9&~N(p4sCxl-YBA9l5^5%kW6;2lduJnbYWqcEQq~>Z7Lc zz^OaxQy>VB{SoU)CQ{FaccunBx2M!muu3(Wg7@`$Jat&;x)jTBNCjQ|K`Qu{`4QX$f6-HnQ^g0@hWtcupOn9Z2Us_Qqk((Y%{78b_kcUG8yolk zhu}Dk8?4WAx72x?(&rDPp7PS)W(D=IDS80iCV3Of!4rQ=zSU@_!UGbYEx1Q7Ei~iq z7v#gtleMFaQNF0wTbzea8Zmht`jR^OLhuh?MkY!2wp{od@T_XJSdGoCkN70)fLSl?}zZ#js<+Kf^LGhtZ+*-SuI( zHzMB?%XFmXQ14NWnZpKqlJ8jX6rfMBhbpK~+@U?J)$jcS-*Z^$BfdW)kn`<_jkHr) z8>dg@^*9LXiu3LKKs^LqBJ1NoJ#`6V1pn!j^VGz39(y#1 zLdH3cNo>GBG_f-1|0N4Wt?2u~pl8tcqZl3q_l5$YSl}>FSY&Y$3hqf9)F}vr;Kgz} zOR@0B(1SPCNS2;>jf^X76}KCy;GK9BSGZ^X!2OgL*v$t;Z^(t|qwV#Esy5 zXXg{c_KfwEVyR0Fqrc%_gZp22YlybTJ%poJ>P?yBIOOr@1b2+?Y#7$bavizg5?&sJ z7yjG}{_q>7xhHXhI6Jtr6&!ow3HVMfFEY)D$xaudrR^IcvtEJQU^#X+Xw>9 zI4{?;G{SPbMAa{3_@@SaG@nfAv)YUI|KT3^ryuYEagS~26a6Fg*(4S#d4*W?Y9{!v z*Wam89eE1Rmi{Kh=HyG^Q{mOhqJPzdZSWW3@d@r~U4ima2Fb5|r zcB9C?6aL_SBn=N-lLu$$u!|yFj0`-$G7sti>S8z?3>QiVJFoIj@_d#JCyQdx_23%!9ysE%;sh%k?xBOgV-TZr$#?T1 zb@mg}=VkP{;ni{}aUEC@?<4du^SKxGOX>s~i@#1ac<1dsvG5N2HLnv_Wd97E2dW%|xx{&v&DSjWH>(Zm4TiiY?{i%ztkZeLI2_W? zt;WHlQ#rp!@Lz7g|27G%eqa5ONlzW3AzCM?-G{COQVB(t#-?hmo}(F82pm){k49APHo6~mZ-{0E6e#*mQ@E> z$p^rDbWA+N3f}K5%Oq3b0s0)7MOTQQYSz)QzGf9Z@u!}JCHCB(F1ex5QJ(f zcEjl0p3+B+4RHe+E-Opn#axBw0S+xz@NMxg@Hw~gK6Hb;&k*;q)M37#yHkA{v}Y54 zWRJ-6)(YK&oLKrD^%!>nwN`Q3Jq zE+e)Dm)QHHo$!GAIXa|_IIhfl1i#c<(+T6dOBz5P5FSXLFSwtihpZclj#*#Z))x`$ zhGd;(bir^_FVz>MKji-~!d^Tx)JZy>`O;x=_m0@OlzNH3AUzp+)(gnEhtvgTX}cNG zUzIvx^fY|ReVdi-OP)i&b@pxVlMuYi{dbBL2FPI6Ke-zfZ*(iG>K_X3vy63DQ)j2YX2HXd8&4had{y+i7CcKm1ApIB@4VN-61NvC3tmNciOnScWWV^QVcU=p zfcHm~0rIFHJ!*&__M<+x7qoR>KVm*pwjbfHv0;Ce=b@JsALRItn6{GW$|#}pIqsOk z3HXNxf;w@3kMicyABMya`i11z$m>aT6donir(_%dki7dSi$73esroBL{>}XKLM&yZ zS%}UdJMw~i=zeU^G z>v7%>%mdtP;vd)ttPh@sTmC`4*&OSwaH~lk?sm);ZGbT?TOF4ePzKZY1^&_xA1ihm~~_^bM)U*6@1^FL8Td zUe#CrR=?>FhCP23QlFTP75LA3`=1@~eb@R3-lw>xkq>jOOBpQcGu?Sp^#S)r$a z-6-5wI}H}Df%6^sJOSPNqRTXv_ct`WP{w;o_(5nuc!2uNG?e^?>-W?vSXSA$Tz8cp zo#>Mf;6=;zGweg`UPc@g{4WqJa=qKD?5~FNM#nF}|AW!UD6!Pt7ZU%`|1$><)JgmW z|Fn~);D3`ev}L!<)_Xs0z3+D{d;tEyKd%%2)h^{HbSZHOhY>4zOaw2GKL{UCuR=FT zeW0XI4-bg{MAQvOyYye+0fwa!iXW4B3lG$}Z&`Ri@=n<%UJexXH`WjFJb~y*nI?hY zpXGH!!T)M|up#*09t=u-8l7(6zrQW`=d!DKfu8Gy_zSwKs{aE2Z$&T0)Pq62^n0YA za)OQn|Nf*-ohBqdBQBJT|32l1jzI@C+vGtzZfmtzjO>=*B!6A`P4}s1ArQYm=KFi# z{bS0@pZkx&Ip6Dl3a)9eSJv9x|J1?*P`%s`xZW z(zWn_)X_rG0YAFe0{^?fGi9`nNe|wSF4U8>O?=|M!jw9z2KUnU5<6bLd1ERbK>xrG z!pD`x;Y1fu2Uvqo^Z@-Q(E}8E!T$yFZ5eT2(RUP@L-3Ex<-Vinclc!zq6;iKQ}O|s zcfo(LasQ(V|4wgPa8Ep{))jTS-~Sc7Uz@lXg7<61z>6h)9ER|~ENSw*i0EQo&XSON z4ZGn1*835^-MInhtARm}Q7`;Ra4+?f5S|_}p)!9Qu9`REMODXJaYGh<4-cRd!9V+n zf2J>1{C|x<2>u(5(Mq<#`%rLiY~HDG%<~Ckd)V*)An)5o-f8giZi6_6#jQKCjURn4 zmi8d^GqxFc`FyqBmTlZVaDCgKPwv&-p6`R#q2CL42t&ExUi>%0rYU-BKic8`v?g(8 ze@-7DI8<<~RK#wFz+=wWT-vtT!-Q z(H8ywiQ6$d^oggAI>3MhTH%4;$4@8V`CvkQIRxh{LkPhCLC{`y;D-a5f5rZ8neEBz z^OQOWabNmQVjC2;M9){c2#bCwWm}Pud+NeGKcS{BysYm`v8U7nH~4*|5Crbj998qp zw&2)+|AO<<#P2@sYofo@Q@lGN&te^{W8Cm_EaO&`(vKl8jPV~=<%{s@p472C^-}5M zdgg6_U{X7J3rAYnt!R_DJT>4R+1dA>x=*RUzazLMo@_`Qhu+Ex@0_sMYUaJL^|E#NJ5Sw|^;y^9?Z!Y6ex9NBpYq(7Sn&VwKUN!p|7{+mf(oD> z5X4gF!%au<(lz&0f23LO6T^pW!3Sj*ykFS`b(?E@HOh*f0r#CA{X}qY7I{x_Z$|ls z2KUH}N~f_bPx$)`8rbmEy#yx~-hRV61qYA!`-6c+|8@&94)ib2dD%ALpR{pdz&qjl zMI=11UeAc*ee%vl1Om8^DK^CQ03d<;N9ZN+46frt-tDN97VJ?+f5QtQR`^qJk6xy(7VUTDlZN1)xRz+}4xP>I zk=g$)%bpo5ZlDDJ3+b1j3l>=x`@?WQXf&y3c>I-m7Ih8s;=ZNc@o=@hVW?Mdxr+$A zBmYXVoPI~HoAA^TJv1B+yYRpxnIEw|)>X@OeEwlQaF6UGsq4GG+QRK~sRJyRlX0{Y zZsF&Ffv?yq8@u!Zy=e>y~uP0rd`E$!UaPWv#CM#tBx}@MtA95B4fvGIK z4G&}tnAkMlt7-UvVH%5$>X9c%-G%$Ksy+xhoPLepgRiHkslAx>ACB>1JiB7Un00mZ zN19V~`Hp`S#zjYgd-UZZ+BBb%etGw)`Bdstg40_3RVg@*Mel-d#&soe9)78KAo=%S zcKpX|qxY~M%l)6~=k8;!ufjdgNlL)~ry4yc$Kx>tO5#6tyqVyiI6YIl;b+LMnL=;1 zS`&Cy9W>EjA$&@?iFF8?x#t-bvdB_R^op zeG!&*b@SzNW?5GUtYp31S<^83%BmGk=1Ud0~~<9tU*n zr*1Cq>rc3$Rq(#1U@ex@Ce9P@+l@e@|It0fd%ZuOk~f3?KzQv0DvW*e?cF}o_1L9$h%HgG*raK2nj1X0K#{ySD>ui z7yPq+c@e^&^szV8zTYc39mZi#@N5~c5%nh-FYsS#u3zfY!uRl8+dc9RSnoFoH>rp4 zBlrjY75?ZG0ih5ujov(KN*1N=O(E-)-E6`cEQ&Uq9l=+CLm+&|T@~nuu zN`pF!^wq0+E9)4jXS1K%gxGJ68_fINHhvHOr|Y*bEOz!*@&)$)ob?ppwS_;U8+9YN4#7Qb^{%?H+>hHII_@JQjq62;y;_sT zY3?tPb=DE<*@Tb9R{fXD@O)mr;OQ0Nx%jQ%ev&4K4!kqJL1hi=5?IM9dP(@8Hz+C| zusDK)4}zff4)#PI%VAmXD(hvf=z)#F%8(a-OJZs0?_p5QTBbV|KUkM(Q}D#|EgFIk z;+5cmxGlH`AvUgfAdBOX>wEZsbt!w6xL@%?ADybgeb;Atn}T;9euhf8ez22)>J$ z^{RsNn03zV$4}7dyzaMIXK0RwrSJhqg!r*i=S<{%xb0ewJ8q$u(1W00^fw#G{z0Gn zPvC))I-JF#Ylgx@z%H@y=VFoN;D5hQo-X4CEm*%7?r^^m^HySK7AQ*^<{ESsKq^gVL3!aM7H>VkWz&x#$5;!JQ)`#%=EbDC?v6^i{q zwwvg#@UeP4pU)c6u6o>P20_TWfI`+8VyRcGHF+3^sp=~xE6ER{V{VJ+h%H!88u2>A zXf^8vNE<3XAU|wH;CwhNC2x@YVTk2^+miJU>__*?wvzq`I$rodgLiB<5KnZ37eMs82Am?KJ1WKTk>T-2ma08y?gDSfP2aR<_^E0U7k7eca|9p)DCzNoa_*k z=1E<)3+i)%cVvGYRk%qLvA~G!a34GbV&{{(GU$CCmsNM*8a%-RZlC&O&+XfN=Uim> z$*Z5eDzN)3bL*OYy-&Yl5%GS~@)W9)qeK}1kjP^x@=`>|5UFF&k6qJe)W*L z7%+*$b9G8OI*rcxU#&R_sn0SW@IZKuUz8zrba*1sr(wkdpj|BMrS++lS*!g71W`)t}yLQTN=mpW?Tr)B~hXDSQw#@}5P%sd$`7QUku|F@~R6KBqqoWUw$tze_1@5^|Phsa2qN59s z9-~ik;iXU7`ClygJJUw~?yvB>o=eo-bKHpUlx5`ku=3ovZO#31$fw%6Y&2r)*qq9L(Q1y!i{}etf_3;J+%GOB-2NfP5j`>weX&Z4e+F@9K2}*aE$A-qg*4%~@f@AoTIBj;+=+#VckE{qR zcpf(!%7Smc{sVBo!v&O%_gU&syuL$uur%^{96?vF&)AOk@oy`BOgUV5g!32-BJ%Qn ze|w>}+=DD9k4LBSG4fRRV9I$*{!SV<=lsDxKu7m3c|fq>y@I6UehkFfjbEA+lPnu#tTE|Z@$LvYId7#&pGDLhseoi-GqL_eMSrIBs&fHahT z8vO2fA98{FnA9om9{98Hl(fu<<^G+K;yw!6!+B+cW-9wT5VBZw;y)^Qq~wOt=p25a zAR3V;lK(9wU!-oHTJnQ;{x|x&=kAEQ2Xz5+1Rsvj7e}l!8_2kQ^wCH6W!^~J;AQ5q zCw%Vv+7p)s@0*J|H^X zzypkeGFufN1orvLO6ddP2reEMmgKEkw39ejs)U%*3K68G^h z`iceP6=G*88Gx)K%lY7rtXLd@|9YK14tc^u1}dbV@PhlW)rC8SP6i%b1rJmfzm$CJ^zZlO z#pnko>!=_I5AH>0p!2UX*5NQeJTI5^P*;jN-zs-_h&)G6;yUrDDL5yJC`(4qI^UwQ zv!tPUel_|y(LDEhI!M>}T%Mur3~6h6hR<+0i$f&Kk1*{*d-wWj6->+<|}e`=vj0)CpjI^6P24!u>w5 zsS!W+Cm*(If^*{H$Y6;Ru?3GzS1j>*1Ah`bc|Q=lgF94sfB)XSBYOm{8Gj?Vj)Oq# zfcB5rvi!cnJ?-!={ICOVmtt|(T#iG2pKGy;jQ8oSJRb}-eo2|nM(EPsAhVL6mW)eC z-wwBoL->K`$}~g#o$HeLz0dRZY8CFmkJvPAkbg%<@M%-@crWMt(cwJ53>{zb0qc=9 zbu@GXxF=2iNbt<_UZ=45iPWt<`By-I5v$Z5EUeDqLGVkyhA=g(Q-B^uRxC6k^T4Fj zw=pM#pC#`*K`w9~l$Z4z)#q@hU&`m@ek4Wxr!gb`z$Xp*QxW>2F6)hn|2z++X~941 z5?HT89w7Zf>=M6_>yq#ef9*4VE5-rdrLVwvuvsupC^~%1WzP4jFk)yHMa?Fdj7CTGHcX(gU zW6&J^(>9;;TXrjsn@zvNx&h|Jv5uf4*DdQR;NNi9Q*WJCI{*FF_&vcr^IAlog`Xk6 zl-RPj@v{g$5K}k8a^Dc^#NYurFZn!e{8%jEk98XKXaDo(9lsy$cIIp9hv6>iR4qLA z`|-216iXgLKQZEY1dTvZx53>89zA8r#~gJP;&*nJj}g~ooJk;M{25MJCv|7xf3|sU zgyMc&)<0t54epC)CP#6hcwV;LCocGJHj`BFZ&(p0kzI}AjSBbES!%$$@U7u_SpdJN zECG!DUj`o#(XsSjc%O}lBhRYOD{#p1zRRe~zyn=*J|Uhsm-`^#fng55@uyjO?>)}u zBuRp5y`aP`4-XVE52T~7-eE$BkB9Shnu_1dC9WTlw-Y}r{SELVbmfqB1K@DKNnOSf z&)397u}tHo*dcLKEb$F~F#EWn796XQg*UK4Abi0#mhb5r zULSFKV#}=Zv#q@Nq+{sIQP$qoo8hM`o;N1?w9_pNe!JD_#VXnfx2E`CB>6{)ZYO`B ztX=i9o74jYAF|#;;-oyr6C8o-^sV5B{!psVxvv6TpaaAf9^BKf7&|Ow%7);bIy|$< zbHpKR)%flW1<;%(HHhipMi7wG}w&#?pZ{>H|#{a ze9{;1`8{~MEON#85HCk+NAN!wvR%b_!9DJkiY4!_;y*GokoZqO(Hr`p^v9!GIP zWf6Tr>K8Hi-=f+F57@0C{%2Sx!0;H${&<9c(l@QAuU`2b%esl_)bINp>i=ucdLrh1 zqz>H9a!EeBA3nzI3!?es`e8Oy#Cz#uMXW291#Kbq0rDEw8T!piPe1ls+y_+Q9YNhy zyKakoy0Vl{=Ca*j9XNJ}`_oSA)UlI#Q)THJlx!b?`<|sv!+KBZH`G)AiasYU zpyz+UPfj0xB=^Z{?o%PIpvTYw&tyJ;`S4Ef6{Uiw;n|+>Htm`o(f^G4ZO;>z4FOQ_ zS@8yVP1|kayNQ?634h-LT_1xl@Zb4ly^ds?i4xp@K1u$&d7-}q7Vw|vBe>sE2Azo&o;LVVRt$TFcp`NP z^e1-E)tiyjjbiNP5PlH;na*JL!Z zHe%k@#n9Cf2Jc-`{7-G zleoVpIsklg-NO)Gg|BA9qkZNtgdaL@hzr;j4jS%6Tisqi3z-+%P;n$Y!u?I;8O$5& zn}o-U!GL+&k;4k^XPD{*^lL``!PVQqT80+`qX}yMD_EzQMJu z2Mp2wz-B0T2UipInG@XiLH{OscOiO$ep*lT1?!}~6+0q7b6a{#c(mG2p%32Ks`UB3 zfe+r6PV}g(|G|%WY*NSIx5#7qC;I3&@QCJWEi@^qe*G9wQeSPDD9#V@dW*ub3O8WES`r650pQAmk9plbHt0Ip!NPF1TRbrbvRA@0H0Xa-A)bl zJE;o`-YLtmzQvO-!@qZy@%8(_Z|>lM4W8@D{O>>f4_oB}oi}%NfHJ^8@P|q-f>+`r zILB{3Xv{4B#b!yI-wOCKTQc9HSYw|7Xu*G14vg*mlILvVx3nJ{!V}ABtF1ZibTXeu z*tkJFrhiAhfxf+_zgTbT(`dgDKP#|Dd*tav&7%N9#h#-3s=A!dilIN_KE$LcdWq+m z(6@K?t5o=zG+T94%}ZFCOQQ7gn1QS z`rlU1&HO^0L05qn%Vqd4cs>&Oc?1uz4sI=cP}PIs1N@oi7)DiIU^oxf=_++@tGqzY zvn%(hVbKMP5Zz+9pHu3U*`OHsL$#kyCeB0CTCVks?u%gRj!9UBT zmAo!^75s|>hTuJ;ASyhN#z8Hjo`_H_Bl5v^dpeczmiyW?R`L+byb{M=Shh*Kn-Uke z9j_^V!fgwwXI(@O0U-F7d`0pA_}wnY>&ENRWEq=1FYS&EKG8nW-~4ZJpB()M z!YRTp@?ozN9fe2AdLIf8(3p^Mb=29w{Ym_`{9f<_-1~wj>=2xt*v0S@jpYIDi2?t` zn>TL+|BVK5FV>gT*T!NQzM9~eI#Y#bbYpCZ`=tMsWw_r8-p$Ca#5O1ZiteWmN8V3; zAWakdrKfC`7Y@sTN)P@A{r<|pFB=3JOT3ch7@XHxv3qx)z@CX=1qc4)OwPNVQWqe; zQ753z#dYPZLlGXRaE}hC|EPW!KcA5g80z*#71y~Pe(d3a8TaQ4-U;7XHLviDV_t!& z=&F6zpX9=`Jse#u*P97{ARklwVxRkNrQW|&{N*p-YVa%Zoq63Ve~4q@Z}O4Y68B?y zE{o)y<#)Vp@QbV_mb$gUZgn~k0-tZz>6cMgfTm^<^Nj5OH?gcg0spKwytDhn#Ub;{ zHtQSF$M}Wx_2{3MYtMMh|7|)E+@o{4GJa|?_!;;$_%GZS%58sC*>~=}FZgFZV}(xW z(zq4d!~Y|BULxyv#WpAiMEH}e^ON|(pD&`$XwCwj^JU@p-e6_%Qh9C*>-?x+GH{M{ zf9U9c1^@d!bPDl*XT={93BiM`mk|7u&eg<1PfF|t5AGLS_0Vm?1JLIT9w4rp!lNT3 zPZJA#!9P5}>zdA8M5dqV>6sUui;nK-{0FIL-@x}!m;OC3V`>EwT#@_ee0x{ndvK>bqvq}yft5sy=r z{j6uBf5LSjkLISj4&uiS@gOUIE$0gi3hX}PJJd&5=0AiFD68QYdY?9B8~-?Bodfr! z!l!bcjH~#QCx3<>7KZhd`18!L&HEcf{S$D3j?-r)GRH7q=+1`WxtL?=x5g%x$67h? z+IiEid2rp4h4@&Ok-6c>5o@@Frt5`SU*a>2oF%F zl)5;&w_X=r)L9dugeT+Qu>OU(zOhmD@2H;yGOyHi+A^PI(rkp(S9!ni`abKJc&ox%|f29B>oW7 z$7er0LH)RTzmoj2( z0ZrzWx_kkyPM}+KlcAsb_9?jL?+}zd!5jLts{2u2miW&&zFk}Rfa4_={PSn1JoqOM zqyG+W3AZD`fBYIv$Ofh;gmcm)GOX3?@E7n!eT2AC=cV^B73{g#As{bHfLqwy*Ga^iVAV{~6CyRMf{%Z+{WH@zF;cp66Xq z)++?}$otgLS4$<2z;DnuQ~ZE>TO$4-I13#3pF+rjPs&Dh^2WIJUcDxE+u`5v!S=#X zA~x~;Z9|F!p5Y^do<|=KJg*Cm1osOHh3dIyG~644R$^-cyu=@PM2b+h?Pnw79QUof>0C;W^Ls3L4Fbx){&TTUhEL>v8Kt z>^^bF3V!)I@&PBhzta2Yj=m@E56d_7Sv-6|ykPx1x4HjP_S5cLiVcJ}`P{}vpSpmN z`|2&aaOX{lpX^WvYLdrrf2qu)+I3s}J(Y|&u=VQyhDaZ?UE+6Gshfqn9(|Am*d64P zQP_=zReWxTbvc=#zJxqk8je3JSxI@SM!ItOfm~(c`T9WLz6bI)PVtF2P2}zymY-RhoID{MXRJ_igH9^8Dk> znktUR{QWd|K%SdJ^sk;r?7wio9cAPXU-;h+WgOrGrC!Zd?7rZ9O80xk-$_hj_j~`v z5MqQUzJTz%!Us%q#Rt7X4!@YQ4G70Dzrf!*`aK`KqOT18iTfKNe$1aQY=!8cocvAi z5U(lki7sY+Xd$?-^LGk##i!Gj=z}o@u@JnhR)6@w?-4gy2PJryb#xq$`YQc$Ed59< z&r4}E0@2aj4;_I2BijA{HExPmURn<@U`PUZg~6!eDEM(f_UE} zWM0+h?0j3~z8`KS&4#RRdj!w0?fUh9`g|@tKsvm{5)XzwMIUU$1$+8piUoFJ8$4(k zi-)938CP^sV(F{P-@(w}zVmPEDgGhPot}w*Q2!Y_aM)@!>lS=Uo^L@Y?)QUAAFu{-L`OEGA{S2O2KSRFHe(>h8=sTXr>tpcqkk6AB(9dN*vMJ`c zXT%qd=7<-u;`8K-L|(Sh&+w5u>-_RAKVaU6f`9((**(c0Szfn@s4J0ASNKOyEHrg- z=3`)4UrIi)a!2;)eFTh?`Q&~Sb#NEonaBO_&@Ez{KV}^;_~-aN*(OTVWZp@$I`V#W z0XaeFEFCqAbd{4;Kgkoo5FR?P0sde#mc>!A2M67oEw zy_i0-VSSXWQ`7K3@Z;8mx}4l6C-pg=FY*>$5Xn6MjTclygFkK`sB0Aah&XPr=-|rY z-kIRvTWbaX-JhYu&)jcw8gdr=qnCcL;D43`f&abz0$Bp?{TDOvVzCTM&Hdi~UhWgD zw$nJUzjt4-j>`)lG||_JI%6NllKLU{Rka;{nM$3Ae9p=`6!3qqP6Q*a_2B~z|8B^A zq2Qe5x76)LM-_$O9~saN!TFLtQp9-iJj+n8eOi5VBMV-_x(NFRmX$8+58f@_IjT8`(5b6Ts#2p zzZCv~R|&qapB^)xmAX~RBb!|J+?;qJ_{R^Uo|XR9(dbE}4r&Pidg|Uzr=v#L@;!Lu zDU#^gNhgpeXI%Jlz}^Rr=!I~fa+w_K@ILvYru2g1>XPi&H-!J?R=p-1k}t`ToRdjB z1H5y47rItn(s3WG1o7XkbXTrS$ z_mXV0LQ?0R>ht7pi)Z>uxWglak9|O*hMebnp(eSGyItZ=$zI%TLe!Q#v-~yT-o@F% z3I8}0p88VV7u`qIF$C@-_D>bRks)IK5LCx=qWg)vn;ZHy%vSbuB>&3&h6j?{sQ>Em zEPKx5Msu9Y1l%5+u%T@}YivRtolo{t)iIxpe@HGkXQK0@JJ=0U=zZAblQ zw}U=|7kVg^cq`G|m{aTk<+m4}xKg9pY(G2*I+ z{gXNBqS>D{%YA2AMk)1^!28e&_nh02!t<(M&^6^GnZ+LWnx}`|KOX1xlt%`?r|yhv z>Ky-v@GpK%i2t4RI$hx%cQ_aR@n@F8Bmbz=#m@uRz#Y81@07Rl-?>MaQxoKOCMmj- zZbscSyx_P&2K=|cqv8b})kA}S@C#p&-{F49pVJ(N1bi;~{S)CI_;(!m@9XvGTj>qf zr&_NR++p93?5*_HDgn9_9vDG%DeHzEirr*yk)O!1BNPul6#l8BJtO=#sf%$)eP8ha zcFV|8mqfUwE4vXhv54?KeNfW~FB=963ioEIY{S~O{1E+(|3=$ESAIJDsCutksGVMN zD{f#1EX>ug0iE^0{bkm(ken67^^tt7QMex90p@*U7tCq=56DKAwE{dqAM3Z`7+;ZP#$FLuIa~@|u^lA+fIY`F~r5A`})@4`49=`|NPbT<#((^g>4#);( zD){2u>l{5BcMJH(9FQj_u4fM7e)}bkza)e16C`e3tHO1S`V4UWR*O0Z`UBd>k?rTd4`Q>VVfcul%w>Jaz5S;UISmD1wzkeO>j&bPB z*OC0*9NgpAHL}N&w0k}kt{J=8HLA~4U8d@@u%Cs0j&*Je@73>@{Qs6J{jGX2@O%4o z3f`&Xgtv+mT(jQ>DL5w{+x55I?J>(InL(S9_+cM7cwsi1&xL<}ANk{WV}{=vz`g2P zJQ7~3X+HtK6T|+6zUvWQ_xO?AU-bTeE+l!`f6@KME%6SSJtlyrI%ynmyOXMq&WQ(P zPulzG{rQHq>25;2jW{BHIQ^5t|85h4kR%;@Dyi2C|IF|0S9+iC>A*el;A8*DJ#;h< zA|KVV`Bm`!sLDrvXCFc5r9;-p%OSsW)K%L5%YE1Fc0U(SY<}!3`=C2OzdlNK!B>TU z(o_@SU+Z9q2Xc;NZXP6e|EYg_Q~2)_C$`u_gn7N&M(!sNL@VM-OyUZ(Xi3iS}J)BfLK;X&Y2P~O??O5VQ1Liq; z;(_qRVbI@4PYLhvTVPlMg_S^g4Jz z@YmzA!*mUd8jk+xDT>8oSGm~>;wjxt0fSy){Kr-_5^-IwHMK*NnAc-mmIAvMi;}aK^#(7RmRhS?UWHCnx`z zf>V93l+PirXC#?7h#im|6x=rh4>WkccmVyhug6u7BD-Kvj&|UMeaZouL}f-}?D>TH zMdp8Y^mqQsd^bmZIpvF+5&W0(KdFz1Y)Ii>{;2R@6un-=&Ze(IJa9|j*PzD{59s3XJM2?f-$(QnagV9| zfWGny4~TD5PnyC5>I<{1OZk+!Kj6B(3a`PFjHT|Tw~`x65HRwVajY+O1B7M3XF@#X z_;cYO^YC9}2hz55Rj>Ud@H)M&G0Vsr&NCMh(3L?)jB2p#SId*--fBZ8al2vk}qXd&(mVulVVO z;kv)^=Y2iT?^z^BXpMTp>YDyQyC*wB*U${}0n-EG3e8GVhvG-+0r{B1f^*EhlN8(! z$X5vegii(ue`h>ie%$-bq(XtQUq`)SYU>wc<_M0Q;l;*mW1 zn`E4t5$<^u2`}UgB=Ml()2Di0lZ_+%;}$rkLMV`@W2LU&jj3Wc-2Q?Kd?aJx^gXw& ziQJ!yN0507BEYVm9CAOvf1X!*dQbaY_y-2^5Dc5_bfxHrzvBne-w3jeGRar{7^&M*`HDPNgK;(hSW zTs%;gzh6ycr{jnEoAxI2gqMYT!lJc^JzxF|kZzja(HGe$Vy1`FrH279PA)pM5IaYrh6??`PP%_xv4r zCUfAQ?{9>E=wxairT0*4WeN{4XLypr16p_41>mT(k38|hq94FNX3dfz{-^kOeC7Y6 z_Y?BG)Dsh*s1fgS%!SKF|9A)w?C|$X?O)u|((}8HW!Lb#%6aDXyA5#*;nTsh9$cVz z<^d$OUoK7}d3DX{GvHtNLTle>j-C(12Sf61u@|lzKP-eR%pdB5u%DSHAbWa<-uKL( zL60o>ujVh96sdD`e9sbRpARf{K6Nme1*gObPSDzywZEMF{Q11JNYweUcmVr0v)KFX zZf{e#CoVmdr0u?@$HxSe{bhT3!dzFc_fY^E_*~)`$H?o`CifZt{^)2tL2h+BCtk9B zJZ*XOJ@7dW$gHunrTfk8ezi|Z&ZlJEn#@B*FWevJkF6jGavxQ9e z-pCe}zK3q4hYvPs$d3ET9$%kp`3Em5+-rX%;J(ajMzYbU;(&YOyeWTwk8Rly?z5d* zO?sa^K{J9=)OjYnx)7Y_dBQn9#ee6V4tPWH0`gFb7mx^)-sc!-&hK{gCoVYeH{c&& zS4rac>T`~!@Ef?tye`atOE~B4mEI@*zbf3%$yb5fvbCdK3c{@*ho_&dzs&Q4P1MYEsEq?#W=T<==A;)dAQ)Qw>t96Rbs zNIw(5qW^?~6X`d?;$!V|`eSbk@6IvTAAMK?JjqeLwj}*H2bj9QW;l$(2YhzE$ft|kxdz3JriG)2-^m{qt3w_f%Dff#WAkZ~N%K>fgsg%R#q_A(*9 z$jj(2NbdLhed3b|af!o;1@94pPLcE{7hds8=HH1AYW&mhq>O2`;spY7mfzE6kck5y zY%D?LO!9f85i{&~^f~@FIM(Z>*P+$E za8CI51L0o0gmv(tXP~x4*4UU8{z=q%cw|Cdc!mEl=YsP6G(SJUZ-j{&5!|Cs;H$8O z8TCuu-|<*HAEfV>v|l0#oWM2apU%Y5j){A;W)ic_mgM$PUZK5d)T$c>-U%+a%z#I264v&d(dwG^cZ{} zEYk7=l42`nsM0gRUQV3-*c*K;!q3TcYuEjzTE--t`Y8;7f#=D z+{29m$3cS)u8?mA3ycf2{QhZ zcpv?z%=I?-sgub&@IctXZHU4-%l?%8zmsP>*mcCo8jUE)UG7T8+4LJdUu!+B^nRl; z!cT}>@LA^B4>@zCEwYK-o)9lU-7Y6P@eb}qKirFVq;DLu@+0rLuUO{_|CF<}9r$NC zCgA=K)}^=i(mSsWhZ*u-rw=bbOz+7Kb?`tP%RM}F4;6=T=|0Sbm4{A9ly} z`ot$3dU}8(;o$?u#^RSJsvGpe|8x4@@!GGVUNt{tLvd@_*SL9|6g=Y}9Sh&6k$$>m zum{TDCtLB0KXT(F**`CnUi^Z%LW%s$U>Do#$#v}Xv4saHTgMKtmvL7s9zb2q|Av2f zAcY5rizA7b4#nB{lxtb$R9=UFFua@*Z~*VC}T%B8R z4xJUkv17r&?;dVTb$-iS_8iZP_apevn$4#9ZxO%!1?cA7rv~#Jd7kb1nyxbn1tXH< zmdi?VK3pX+xRIP!Q}8*-KeK(i3Ao1$puflb!Qi+F@6Mk{k|*MIiy@ z22#p@U-C4Zie>&9#T8t!=$tN+?~eEO03ZCFPSPR(!Qisysk zn&+GdKMRs<2+7U0PRFmMYiiIca#B(8!yhKPMtr9UqmxaZu5u5ivisqj9; z74+;AU@`yS`v&`#uzPe{$(F+K@lFCC93ICzhVzf;7r5i^%w|NG@7S+!UuW))y+hc3 z$Tj%q?}C5U`R5b~AB=?m3`JzY{iy7=Eq(+1Ht-MQy&-;5e3%HY{X}_3eutzZ@R8m( z)FWgy1Mac6%k+K%zu`w9^|?su(y5b>U7)@}B+Dy1L3PjYgW?+OGyEFN**f^&;`n0n zBDSYGr$FAU!NN!E0ru6g;sHAu{dL6G9fTnKi@z=MaKhZC>*Yc$@7?33r@ttCkla!yUeetJGl=m#pP?-2fr@^m6e7@(9?JxGH7 z#?5FNH2m>|eq`{EekU#%cUkUXCDHGO*UhB&kh)(9c6^@%t=l8sm)Bnh^?T&M4u$ji zV(_I$Vm80<@Bnd0c){;sHx->sa!EWDlE9r{-y#)LNfAF8IVZKiSJb<5656q!jU`TuB&S-ym z>PRd9g19#I0LMo0YWhLUgXAteu^gy-ZjKHok$6s7)y@A62jqME5Hx;56$h5&_bSJoL0~%})i+zAuHV?!LG(XJ{Ph=ioJq72Koseh1ug@0b86?ZD#oup# z-m@uq#tj6|75)oJ;z8}?zS%M8DakkZeAx${K)coR5QO7e@jT(bHG1B4I^WIRJ#@^8 zg_fDGXnRc(GY&r;x5o$kXzF|APj47U{~LH?ombJz;GVfH8_5R#TsOIHE<1jgxo$Rw z^e3a`H*o7F=6d{$IrJOCKe#&8HGb3~uis$1w$lx>QL8sw!Z~S-S9SpQ3OK)9ES_e1 zoUcusFGa5-`TKd^sPcSg&a|EezUMJKB)-ZqoXvK;j(*LMns?SfGVg|f7kVDGF1Z6u zRFb-%Sp@IY&o2`47l;4xWz`o)-fJH3>)aY}!~P*Z(-7XL(-$MNmps56gb$JjO#-4R zc%I9PsPG1-MVDx_sdtUg#$DWn*_WQt&^SwrY-e z{Dgr{X#e%$qI~9%oa=j0@6AVX4Zn0G{QHFU|0t~B z?q#MORv1qDtQ)}ctztN%pr_?`L=1^fi zk5c+X&l3Mlw$;x%As?0AYI1`T)vM9K6L;zJrB2wx1026`?C|r^Pp85;bJePR0ebaS ze5n2G4dGsMl#rF(7{NVia~{x>lv&Q@?-CA}VDDll%zR}JKsXUQfT&J(;4Hh#!bo6XJ?|@1{lHPwCG};VaT$mHp1P=KPnG zxv%gLdR_HADLChI=4kgFhXEp4K6^HmL_Ziyyh8p(6~8?m1#`8?pYuDN=Nu)<_)a}~cZmN9E;qubowjh#pPPf<%eW!^WF!7Y@j!#r z=NcZTthyCHOE%XGHy7Bqg`P5${Yy8vSqy8wm>vn_q zXYTPg@XM<6C^DY+*ekW=Z;vDQgZ0kAcaL~e6Vz_ERXC0w;Pnlz?+*UY7cY_r;GII= z1pQ7~!8}Oc^M+S)J~uqh@>g|K*nfoq|BMMQ^}gC`;1_#ieVrDQjhp1NC<(I^mvrx>ZLVrR;D=JvB5~ zy1h!Cdg^kiznO2)W1O6|tuNGk?UTET9 z$_|JpYeWJ33b#9VYw21CJISo4Ya<5Q$E#+Ycpp~?WV@#LIClPk?-Pj=!M?*+5_^@rmHgR&oDydZ zdY<^F^h~z{;L(%B$4*lCK=z36uY7~>Kf^J$;Gc(^2LB$lcbq&-?hQ~(3HE-Ujpbzj zqpyPWzWgNgzWT}1-AI0r`$=A}+85;Y$Zw22l4{N+`SIM}C?23~DzoTyaOzX=zLUECKh@$Kd{QqtR?i-!qT94$iM*M=6hR9le3q!ra$U zW62Z0z)i<*^INCnw>`YxrlBlB&+~rxKVc5!v;>X9c_xXw0FI;9_axpAs-IGv=zgQ| zJ$X~=8EBM<_mjJ9tC{f6_OAGVa+fUG|Zg zxb4WW?dI%TT|4S*zYcfNi{q5@nn%hXG2e_odnBCe=SbFnnOC^yehpG^kGTeK7|u~= z-TyiAyC^7RUMerQDe?SiPTYt%o<|)x<}XeOs5tEU)eo>Il$YbiDLzlW;AtRU4=)}E zu6MHMr?2>cxCM_(59o1Vc8tDXtN$Z;Htc-IKk5IfF93aS+}8g>?_VHXF?Zl!ddhK4 z-f+pm0L*<^P5C_Bidsq@05vy@SCe%;?}`88Z!Tl^GskMNNa-I{el?}8^=I%5{>fWU zCfEbFz<)itYi>Ds27N#s19N(*Yndw_ft{Ewl)s8Se&4BZpAF$xo?kE@!l)i*h~KJs zIB`^iKip%(JL1drW^0;&e~wQbCtLBW%@018!nfl0!hQC*{7Cp7HK+?gKf>1yT{E?W>y&yYJ#IN43cCXQW49G4 zlCu0&`SbY44TFDAIl3|M0QH*l1l$k3Gm`MUlU$%kgnO*I;oqb&JP!Qf3qxKmYY5lq z|EXS2{J9rDA&&>&$zI@d-VjfmJ^T6@yOChuV-KVE$uAt@Z(OhTA?q!D2JU;)cb4l8 z24If8@W0b~{mdE9dQ5WqY{4-vn*{7U=B%K<>4%tejuSYBH;h4Fb51DzoaO;x+lk+e z_tlT%i3<&I1jPqBPb$I#J=ML#7qo3`8Q#zLoD28drV96@HvTUYp=W(=b;3o_&iYO zmT`b`+z#8M@9W_I4}`^zQ*d144}try`7_Kz2j}ctaQ?vIC`e`m6pfzepCtQz!27-) zb6&6I9J~LxyR?-4LG^mXW2oaH&f4+U+_f?F%zoXipRf&(YXikCz$b3X++&|hKS&bZ zDS4cDUM1`Eqxd(xLOo1!6|?I|l5;J~NM9=c>nP$E z5BmMvDgGyR*kSxC?colL<5&JGPU|!Q|G!TnC4K1bjPNrod4GeWWUIPA=Gl|q9}K`5 z{egrx#*ug*G}agXM@{0%;Qs^q2ps;p;eJ{6H@9Wskie>x)Vx3Kf705{q5l*obl@I% z8cFWcrtm$)AaL0C*k4nN&#qefJN{Ghb?xKPNVvx>9Hi3cP3qRf7mB-~@0%GokLuXJU6fFdt|~Oqe#5FR;xD?;&$wB=A0#e zct$=~_B{6&e4DS!$@o~ZR;x7(_(vLeKs+`w*bC^>x$uvjdMNxeSAz4GEp`2!j_{9I zbvMJh_NDYWUbhS2AG+@g=cMxrN$nqpzs`Q_5VyNf!vK)~&biX39z3&8a@qB*`k6Dr z{d9~S4en>`OAqd$rJT6mh2iiG{ z#s@e60Uqc_>Y3nyF8e)Y-PCVq!S|v#87BAxa}4~1b*$=bc%1a%YJw#GcxuE0_57t| zJQ;LT@?EM2Oz1~PPjw}y#CuZaQIMA&M)F{&twZ6TKfmeNsr6VN16*Ner!_a(st-_MB$zE8nD zV`EB-zhCV~q}^OysDz?h^ih{V@B>ix-w_c)aGQ)1i+U`$7Iae$Iy35Z?&@bicwYX5+2D>HjAG z9Qa3&&v(~beDNTAtJP|G?6f-nqu-sep~3x5wSTaaP{&K)pE--1U%pR2E_Qa<*E~h| zoxEF{x%TkE9&|f3)bT7JB11m^c=`1@@;*~29K3Kp$FIQ7e}G+3`TOJ6E8G)@VQw7y zUU;S7$?tD1NeWjEyko!5BnbmZZ*MDL?9kVSIITl}Gfz~wM~}1a_@{2T7&z=x)Xb`7 zpE{nf>{D+4s`Q!sN6&tKie0MxO}=Epe!q%6Iu-sEKR17%@BQ?s>bK`(t9hrS{f@;0 z@Fh4$-}5@*9-ia;s^n{KJJ;rG*&m7WemtJgk2e#*>Bk}7e%4aQ(?>r=@_68Bgd~1X zyhQjHKY(lLaY=q|Tln9!(Fy;oYhjT~wMJ7s0Pp7(oDc9fi0`5A$!miDMx#*|FVMvo zJh(s2M>`(7f@O>;e@FWO{I8?-4~2iWRgCEWWdg3?|LSZ$^nv*?&{<3CLmIhYRheH) zUYYfzucVVof15Y56dcPQ;+oe{e{;j|xUX=|T)9qyAAz4$N>ZlQ1^ri8mpoR_9cGC*jMp@*(?zcuy5lX@`H!$zk6nfaQCsnzo!o-^AF8^ zzD604n3MDgB$_K%NbeK>8##CYdjb6p56qwczu5O%_**?Ie3!@HSmAqwf50{7s`NMU zJM?`O$B&!BJ?%?vhkZ|-@FK;YCoG+%;9op#k=j>04-c>(!98l-r1;geK{tedZmT!F z@LBW#v*$nK{Ha;^%zeVkhyF8|4+t8FFkSFI=t$!gX+x|cD%peB#3QICBp#q{ zF^}M$v7{sU378KbI_wPQ_&2fp*Wu}JQ}C~FPYV9ALkdG&Qu{c-11#?}!iU_x!XsIR zpB$2Mywj9*su6Dl?^iMuDCoc9;8z15OjrlWUKf82Tx*|L=FQ<98Vl|z7hDMcRXl-t zbXm@Ml<+`4B`=H}u(laP#16m@sq6sMWntN$`QbA80O5Z`{N2(=NPi~wdo#!XBcDfD zjJh1jxfkvU>$DAe-opb45>cke#bVHxUq6fXV+YQ$3pPFYuIx4Oz;rrs`1yRlsdxap zb}sz)e@|QqT%&KiWSoO<@K2b~+noykBL^?wW@Wry_-{x8)1f5yabdCi=K?9)ypZ`saXZ<`*!?zgN6`P6!yQX}z5uX}xE$vC!ht(@WZ}VKvFLYw z)#nT!qtA((&m8z>z0ps}4d}j~N)k9{e}eCv`3GQGoeR<73vqR=!`w7;4gJps3grLPFXE-Ihr>+L!)G4c7Cm_CN}_yWG*=VO ztuIe?jbCw?2-hTXQ@yU}wjJkPasEkNQhLf>b(dI{lIu&{mdssAuP9%XzyoKNC-6Yr z==bsTsXI~pC7`GHJK)Y!M??KJxTO4`4Nl3wF}Daj<9?SGKERKl&zw9y0YSz2F$bti zO3CMu@8){GC|8Al>XNYQJ@I@TQ~0FX7y4Z4E-aF~+_88-aom*W2?wl#d*)clzbB8^ z5dJN)kqP&}e#_G5%JR$|IFel;$-Y{6UWflo{y$}267ei}fV{#yp`HgV5Y6=n{?XUh z!zaW&2Jw^d32xNCNYY1A6OQ?~Ji-IL9)64PkKN`rQtJ7Y&rdIFpIQ8W{ycs_{0%hY z^gh~FhR9E_qie!Hw2J^pd1fnTNk{LIoXN?x9DSXcOG{DiUe<#CQ% zBPCAnun#Tq{Z@;3DfsVn`h{>$9(U%|9|P_KxaWH=Ja{L*bW-6SfTy>Zy8vMe_iUpq zfd|SG{SWS|^B9rbm!a@Zya8ON!uMR)+Aq2uJ;!cC$_~{v{3kxRVgCGO+lyCt9el$a z2XF)*5Ef|~;sTnBm4fdkbr>o3Jv>vUI!96Y9P~Z@axbBNpZzjRsN=2ddhoy5`*`Mw z`w=%^7XIHFk6Xe&VX-1O-E%}=q1(EF=6;IjMS%glm%wllbQ=lR@1@{LAT z`t$BQbr{ZF@aKUWS$}_?^hoLP18N*psn6RVETa> zfAK*=T>^3V&2YtoPrezFIOH>T)n8H_3@pGk@=|&Un9h3L|t@cc#TWnIgk=5sDVv(xm7xzZsQiOxX&`l7Z^~&mEr;LL=Shlu*hzw-${l4lX;drf{kej@CU@H>@X6t6C!=)CHhiHCXSb7-zYpf4KtD5qk6pY3%d z{Ih+TryDZDHm&$WG8$6QmW;3iaB~uHkGVdxNalQ%lI-7S4*XNk#(XUI05xC5^&b;g z_t^cct8>`<>c95V_W(!uGu$}go_P=Gcjhg2;bSD9SLLPHmTmA`&ApR8FCUY?1jnm= z>@RRlm=7MXSHThZh6lJ27RmQ$$ex8>r@C$s=g{YqRz8;O4hG=g5)WYi-U>GcKNp3$ z9c~c*J5Fvh7fbqxynchkV@jVcJaC$VcXmY-?&lPir}Whmr+Lk(et-PUHxB*Z+a#cg z{g2xJG~A5qm`UXI{o1GWHwmx8JNEnvI2=0kx$HUVce#JUy>RZ&+w+(!jc^{^CwScF z7@yll^@jvM6NV3*=QYMN65YGYsYlciV_`ftm zpU@9*sjv0t9BQ_ADM@%Asq^W(ZGX{T>=!39d(piwJ^K+?UXnd(@H22{^4Lpm$X@cq zsc=`(&w>5{<>vza0DO*Q{i(zAJJJJAb}RO@yB~JMGhTH`^9Auf=1p@0+21?pm8y=v z#E%ZV?`V?OBF}$BJUentdtIi-b?#_@FS^tP!6I8kx75eH1wUk5_fYS1@lwV{s^rtB zPc3{<=_h3NSh)8+)k}*9x)4CxORmo%4EsfLU3Lz3z-JlT0z2R{`OEMC*VNO(0|f*m zJh!B0@#6=4zXW+o*h5nJxCFmm^*9DSe|q|a_nQs+&#U^Nl841J&~R?>Ta>3W;-jC5 z!|x>Y?d40!edR4PB)o?~Z+DYw?g{pj&P$;`*DCJMyu831{_$A)UgvmgjxJ$W=5Qw? z@f`T)v}n!+VqQjf&@Y60_9uSBxOg{{CnLO5AN~Pm~#&= zP)EW0t`@Ul#S8Emet^5$QXT-lppC01N!e{K`+~S~h5tj<-|)GLYX{;3<`-wi5kH{; zk(!(FYQ06C`nI`Nqn-;MVD1KfDfRp4>CBSvhgY{GmzWRh;eio`gYXYM&V%v*@U-wR znwP)c9w3R|wZCadULY5PhwDbWLG{hvFCr{X9)vU#fo<_xZDZGzewczR^>$mSO zhWE4L6x@e*@v}_uo^CMTcb0ete0h{&e>X-|f6w(U_?11N`Id>|0t4b_Ur^_t)#`!zUiya0 z_!)V^482Nye>OU^EdFS>C%GhFGc(oo=cRCt-CTIycXT{Hl*HcghP(rMfI7;gM_oh~ z@0qRB>1c$6@18ai>LZux)C+<8_Ubd@CFZ{FBRsHMBj8oxKhImj|5*a621}oG-%|3U z`tq|8a?}CvdfdG6^#3-aVARW1^%k%_2BV^aNg57t4Q5{$w;2eBlY>Zb`DLBtkopF;s`T7=PG3ijYyoFJagC3 zH(TwmYw-$oBV}^atg~*%7Q1@XME_y;H*_8~(q%7>C3^($ydG~+=Yt=xwA55R?>c_+ z>qzwfjQ*Xt!aSaz$m?C`_gJ3`{sQqa=fU-AhxzpAeZ~&g!-a6Z%MX`iZek-`a2K$r z3+a9O8t@xZ@&XxlL`q)(@q6&E{%1@5U!Yzw1^@j{w@lWI@($jt#ETmpig<-`^nvAYdVhLA2nOy{uskEAwLBy z6sLYL!k$i%ivQ?ZWjgS{uI!z-8}8%C&jRm9%mQ&T%B%ab3+6NW+rfXS{RA&y=X~zr z0nE4Px5D*mpM!sHXBF2R(O7AT2hy(iM+<%lH)P@g{to#;`go|b3}1m?{spep_pZm` z2k@R=7Y`-m6==7l|CfHizm#3!ocq-k?lEg>;Vb_I{kGGHY&ILUc*kr#efoVP&{s*_ zUmouT%}1PPc!=pb6{SW@}7sB1RE#5?Go;-ar{+8AUeBZ+UJ+Z{| z|DXS4?j5+rJ}8{*aX#2#k9(F?cqi;ILf(q=7oU3`&xR+wKdRrRh+K1y^m9FaIK>~; z^V#TU@j=Ort|SXt$-MST0s~z`$A6dJbFKIVe-(crn+NsDni_Vpzk+%E414*CS$gZ6 zgnoL|%OUt*=k^^s>im{|apsIuJwE{>uGfb{0`JILje0x$f8yesSOfIwF9wmm{i5j5 zzZ+M&gWgQ|*KIM>^9s)q9w5wZkmupWOwYF&3+a)Ran^|ct?;`S;D3el>`yGXXRZs` zzjOt&|0pG{IBqp+=^BXV2MGV#Uy@xMo)jJ+pEyre%u2iS!6rQLF6%xw7s9*1z7yW{ zZ!5nSz&rL?H@@xP*7Kgnfo0pj>)swd{i*HWcW)~$2+rRn3~(&G`@ga;rS}OKRdSK- z%U<9--kQf>$n*S#@Na2YlpVkvqC6$8h*@M3;)6>~=4Fvz7*VH{Qcu9xekVSl?@IQ; z4e);|X_iIu5iU-MdP9ILZpWa>K#--Gq9i3tz6OU%!>YQNu zQF7|g=`+b|HOU_5RS5sAYhU;$f3qq4E5C;wumf+-B0PY3J3`7YaPYzw@us0CF32{V z2kM(it1w5`UzeHdd-ghJy|>r_``PGwCp;4ewcua&V8kyVyphK*!WZDfNkXp;1J3!G zW69BX*x$nal(}wS#V>?s|5f;c`uu;8oIKBl!auZT!2ehECi&qz@vCq1M$J<{p?=Ny zFx*rAK$0{i^^)-+a2lC?&QTh42M($FYvI31;Mg4aef-KpJ2D4{I?rYYd;cShfe3hKk8xNiMuN; z4Bl@ISVl?g9OIGfpUh(?;Qvs^^M7on*m%)$>Op#G8S0oaPztV$Lgpd3YcrFyX0>$Br9V;^bcv z;1v)2y`N6~bt(3A4F%=a)Agp}V8q==IHuwO!h~(fDqgql*E!#y5x_lWeUVVd51-{o z`gPDhNcIK&JaGm3fd}FR!dG5=fH^ueA9-Gf|3JK-bd&e!cm6z*`XT98aNmb7>{_xi z#SB1V@6R&}-cRY{u+;z4M^=gtc(qG-o%+zsilJ_3R+tO%UH1D)1mDoDm!4;wP&>RG ze?^#W5#A2JGDG46$QpL7t0Z$%-u1r%|JVoq?Rsl@0{Y)=0zBa!Gau=n)zBGWI@frW zKm9bGMDpM)$4MYAUM%{=6T=RA-+ST<+`f6_8iPNB2k0BfB(VdsEZ_(9d-OLW+c*{h ze*kj=9&o)j_Ja7Jr}|>~1uRsGURS@Pq0gW1<;_+A_XO&=o)RF8Um3+A8{qkiQ;5e= zA3bJXp1tG0>hk?{O&)$Bxe8#a>z^SWu2rTN=%Z*hc|W+v52)&;H0L8>4$ARl)J*o% zU7`~)CGLlsE-L(!?~cstYBs5lMZc4VY^LDdI3Fb)1eyx>_>;mrd9PkX--FZ4gL_{r z(EpLTy#@95VOw=zf%!MGtA&5m`+}=mi(aqi;DMty`v;uU-$woq$q$j76qJH z{^@y@?UZ|;VF4BJsz&OD^216SOKc%nI&uV(}R2AjCAPO z6K@-7t}1@FsnriXeLT#CBkv#A$e>WyAIbltpQ?Ty>{WQc+&xx54|=*buB89#2gns* zU6X{@eO$v+*j)Rkz~`|}>JNYi*l*c;tkp3vg`2! z_}w$v2ffV>|1}p_R_Xr>ee`_-{`r{;b3VK+-U#o;U+H%X|BK&qZtJhYuNL?Vl7koU zGWf6T0Axl(V8A|5ox6WOyp4X(9rz!QzrpW!7b!=X_)G2*_URaTku=(pu9*k6X^9&) zsqc5>2NnN<53a2CH$RnKU>td4@`%uTDSl8rPzo<_-IgRCFctm>Un(waud04c`-Aij z`>8sYs!_$8ft6F=7sTa>N42{#5TAO`?f3c?J`mr_EM@yk_W^X}6y*A-CGy!WriK>Gcu6K=F!zT`>L^>VS~^8^8mU zJyuO-?)L!j>?BIa~ z@k7ZRz20@;<|9Xp}S;TQM;9FxC0I+{#{bIjhh@Xzg?81i=XEgU7x)gQBA zkvGZD5buwby^kG0{(yWWc#r%O?g^hwv@feUHsr-lW-tbE^Qu2$EwFzN$MF*Smw&>S z^pis`(+9DPzFs@?`q{VS?<*gJT*GanpT~puM(N=LeP77|cE9-Ha~)j!+d$nub{zJ? zY4x~Y$NtHy*JI|2S9rL}Cr+tX4dA@LSdd?U2V@U$O**#iu@?-6kn9EK+zc#n0)CcD zFC-WG;5oUFoTq)aYtARcw|&$w5kH`+<3<1DW_aO#BtP|%zr@%%6Tm<5?|t#Wan3oN z$ZoIKcf}@s%c}kf_*(i(`hevq1A2ur%x^t* zXX9!46I$smc$|CcPRM(mI_!ek$*{2WrJ$F*`~%vBdPe%6c$VMS+^NYVpa;P@(J-A8 zS5^{xnseg9?(&&4^|)&||BX3c56oR1H;CK@?%+ReDb5>rLQi42h=0IxVILsB$Nxm) zuMkI|?g$IPk&mNoPyNX|Z9d=9m&i77$u4q)BF9hX_0G`e#4*zaJa7*?W9I08UO)hn zIqJgGCow*|{Cc22LOc+4ZW4972HYPX;aKzjP>(OWHefOD_#!|&2pclPW!GXDxa zG8Yc{bIijDw@ThG{A2gR1L2mZ-cB+bHEO~$RSd)h{dW6kv=qQUaS+7`x53A20Ulr< z4J$d#838e%PfLC$e-GNLMfKwr1^Ig6f0Rk`a%44cmwFv|iGRXBZb@JI ze+cmi|BC{D1>CC-)q#7=z#_epTzW0Tu13-(g1_o7b+H5erFc>IAJnfb(}0n#Bo~OE z<-*xgjkpfDgFnXL9X?E#%;rzTD&gKw_WoFGa3Vd(!jke9gJ1 ze+YjZ{qENNNoTdXuGN>laL)G@9}GI3j_d^V&*QL0guoBy$}fDtf!nT%FBGLE&oH78 z&rw&@C%oj&r{{5tTyox?qaCho&zW=2*k|cE^QQcvx)%1a&x;*0Pdc0eQ_$nPT02;Vn!U2Bl9 zB`%o#d`zCuUnGox3>Q82qj+I_$i7Be8<6%Ae<$@MQDwSS20uX=rXqWyw@L*0qz+_mMF@L!NmuJAuB76w1yn{SABf&Y&`4%J-x76nL= z`qy?l#~zkkye6snkLG|mcHIJ&NFHe4C%k|4r!tq+?@s7*m0mXw;tt1+bKbD*19)SH zyajXkkUKqoPfG;di$3CQ*KPfC4Q`oCJ4_{#%%i1~8A^B>T+4s~@8l19?8;!>s`CqW>2W zyaSV=@HxP-k)%u@3q0OreFOKUfBVEql5Y4f+^_A^X8jkuZX16aJacXyH#mZGrhrvA z=lI*DgmZK%I|(UT)HUs)Iv?u~#ATOEbuLa>CdfI8Bt_D;+P38H`94`fy&iVS_rgEs zZwLHe1@@hYJ|Rq5pm(kir=Ymr^%%$4wv*4;lDhh--wee$BPMd`k!3$@$5O)vbDFIV0Gbxa*m zIIsAvKkv_p=lnT)PV=AaIsYd5F}LTEHz{M8r*9^2t`Z*<4|Ldel1B^nA^br9O%0wn zhkv@1Vm}_2 z!VBRd>4w#cFZex@(8N^sLz_g8zY;Dn7Un1rk2(3*;U9J1SjIe%uW7Z=bJzit`HtCV z)OE=pV81o%O$+{W3Ty4%^e*9tkkH@S;sM$J)%PY2u-cy)=|8Tkc~qajs4XRfEVQ9bu$JvoTF!;&YW1fG&{U@Jj9!M?0E8uy4f+X(_{z0pgz3Imy`3Tyst`g-I!KKk|}Dze`+!@8forr!@y* zmpV3h!0i1QhcSU4Yl_Dp!B44mKbuj9wG!VK{^CXSEB_pJ0CYNq2UbX%Oda?a z4}fBL0R4~T^K*Csy18g?J+RE?kJ`S)X>Go`AZ{ZanADY2Q||m_>Nt zP0YTbJD0vmzG^5QAin5R zfjNex2Z+P?D-MT7`v33v#|{{gx4rTD>n-xe@y7U@8q@w>{O1Ml$2F!`a98S*>f%y2y?juF2z zoU7aKzylBI8Zs$%1>q9rAzS)+*yq>-sQujI57e5iR^WTe-xUv_cS=dsZN+`f@$C*^ zfd?J@kQD!kKCMX#{z;Q~*#UJDxE}nkqHv_wT5WM)ZI>RQ{K?@x9x4*%v#`_E5(r|OZJ^Wz5w}a%=J1jwub}v8N?Z|tqLO@#qXZtn9@N}`HS&)57pBcBI^q5K zX!#q-oc(3m$*-N8_0nIPUn}lyex1H2`yqKRo|jn_&!_K*Z<2Q+_$SWvPB_==5vM*E zrTrqZG;Q zou=TQW%&oK3(I?=^t?SmrAtNF5QpQ98UV@_+{^g-smkz8f{Qt%H>nHQfNbbIqGAy2m2#U7||Ec{36 zXP-Tb{NLc`=X1m7c<&v2^0zs5oO9R4@8W%v!%?RC8ti}7+5EWLi7tI&epH^XlKOj3 z;t%*0K6w&;z&{wq$LAwj7+z#p`k_VlBpLI>{!lM(9e>LKK2zNJZ7p$A)>Yz_NAdr`t9wUkWp(o}4 z^M_%F+sw1-rr>{)H);;Np0Xg|o_W}H&cSduF%LNBF5JY7Z%6uTS$=pR-fS{w!2coK zX1g7W4{VHu_+ma|Fwbomg$D3)f3AK)??Jn z^8oJ2S5M;AaFuP{lig4HtFr$y>eZCT)&9aRxH0@bf8pVQI)%`IIFt5~;sCAXvt!|( zyyaWM|1msK*#Q_FDgG{Da_ZR<&WFJ6IY`0lYQK`FrynUFUgoW)@GpNJIl}6d9?w(` zARb`5y*h8Y_^<=+Igf(88&dTp3Gb7?lu}QJzRuDglOM+|{MRSRk9xm-l00EvWYhhd zebWBudFGy^Pr9tX9_KiZC>{WBC*cS8!(aiz!GCcA!8}gEIq^fu5`XS-@|bYMFa`f| zM-%Ztmpl)41M$NM{`ZxKNRb>HpCwtkul+zgKy4ip2i_~bCLdD8uepAK9t!)BISY$H z0RO1NuGve-^B0ShIf2}s(lR#?bNAGdhh_Znk^HW~06Ua;UR7s|y-(b*F1rBwMbbZi zQuKsZ@^(wYZ{B=`d%hMp4>#xR0}tNO!(98DoGV!Af3(JCkljz-QFegrGQEE`V~!v8 zgXR2M;U7Pvh&PgJm_wQLJ#m`_`{xpV^j!GYJOvNFi$#Hd?=Cv_xg_e0z8C7)8HAyF z_;T?$lWaB{$oM{fRMb93&sF-2{kkOl6W5(3Jl>GMgd|>)rz^=yojhRz{;8*KrsU(z zQqFw-bdB4#WRT=9NAME<2F!ZJtnqWG+l$yCdDCJKROj>&H;8dKlOKS;HSoee_IrZ< zuh(0Xq@Dh{(EUd5W3SHbd+B@4=JHwho_()PUtL`p8H>T{0q`BBgGe%-;u-* zBA}nZgTU)pa{2^3lXrwB3~acvD!oQM683|WY@w%xcZUIEs8is!4=V{S#fL5Ife8Mq zI2HJx|Bv8=|0(~d+qmk7L*^O#tK=yZ7on<-i8N0 z@Ztk=&?PP}i8`1YUO(t|b*|(Av|i`^cxS?M3jWF4KS_T)=Kgd2qt?ZP`=c@I_iusK z0yqEWz<*ijbtlm~c;m;;CU!RU_~_?D@j$mv1m&^+p;l`&-G6tF`JP?(*ghuB8pQ*$ zf7#mM1;{e~xiIT0=KfKKORhV{Q&r`{cTAN%ep z`u{#SJ|(VsAG7`}(ZIWN_Nf8)xXHtG+ib%FQ^&b-E#^r$;`e%=2mkfu@i(#uh!0Bt zZxf$AYw*)?<6;VqaZft3@2NW&3HQKYD2dy>kp3TmAD+iQcwFJ!5wCOL-C)p54j0@H z{Co1p3;5*b41bubo7n3e#rG*oF2Mbj>@oHS_-ETL!WDlJ_q}lF^^*GIpu82tBe_bT z#Uq(-WsunSMd6S&1`|8#+Ir|S@xUsERjlmT`q{{}N8bf_pyC_wUn5_VvcC_BZzHkq zSwG>K0hS4N2;&p+^UXT@_PJ!IhkXtY@Vko?z0Z8}T==gy(C6SES~rsIZl?&?5e*32 z;}4M6J~8P3O#&JT`X6(<2fo37vn9OOYPC!}z#N=^mvq5)#Sif1BIS9-{ly3R{kk4C zYPFPW^hd=9e10L^tKSRUpZg1jRUn?w;)6Z7Cm&n)#2IJm!=q*(1qVr$F|g%mX16Z z>B3n`zMI!gC6{)x$KZSqK58NlYBg~FqZ_fkP8~b|E!NzR;5i$52OrRvQk^%8I<5SK zms9W#{^7SJH?pHHWdi<3`=jc)-IMSmW8O;t#66+T(*z{-?wJSw!0PwmiGR{L;d?%@ zKN6*J{GA^;|D@sp(f}s;5qm)X+vE5HYIWH^c8^iRFFia!Jo<(E@Afh4>%;@S&Dku) zFUV0;!ha_J206g+5dPusnq+Ib7|IT4;m4*`To8f=_lpzk#A;69;bElD!vB@I(%@g` zASC}kQ}6fN)|KUZ?qM)MOv0#tVWWTmE)puDUC6^#rl(KKRS#uX0e$7Lm6jawMD_&| z$q$b0;3~9D?sgQQU@I?W`K6-(8~y>X&#_FP6X7(2?{Qts_#rEYq{#DQf7kl1?^=6r>YiitFAM%pFW?ur---(v0Siofk$thI0NFFY26=q$z_;%!&fD8( zICJ6MVae}rYF%pSd;M(ugLwZ5yk0tgx7%BhUYw0b<@{Ibe)E8?9RK{@s#jhQ5CVBU z6Pzlt&^3d-z;%rM1$TkvE4};x;jD0aof`-rAifiCIA$9b^gn+Ay#dR78pfIY0dBq? z$!p=QLqj~5-&Q;u@*Eh~m+M*IX)!|JkAsQween3T!(%*w`@(|&FedTz< z@o(Udz;mP>Im;SbdUG8M_Q-oUFy^2enqO^IrNNHFBs)R2H}CL(shnr*2Y3ICcWF8l-kns85A(T%qQ>*@2m%%`C~H%^&f%g6H+oR|4L@tt+5&RBFk z^}7i7e7?ugRrjZrmiWG-QBhX?EyDkHr$>K@y9iyRj!#6_bzz4?^l{=n^(N}p{z4!B zB8xn+BK&*i)A$Q1^W^4p{t7-o-!Jb|SAZAz3vK=p{nh{85dNVt=-PZ^>~tb}wsdjq zn#qq_=1N#Y4}k~7%joB&rOY+tcnuuj7ZT|KWAJ~4^+HGD0pNEo9zfhF`}`?OYTdAR zfsN`6%Bzb&{4MKizcasqK8)h8?O#t>Cj$KbHK%(li+^g%f+zfg{SE$jmVkdA-%z+8 zFurBSV|d8#Q(hl568yl)_)h~_{KS~Q`VIXB*UazZuW2uyYu-W^z7#kQ;=L0ufyUNl z6$gcTcz)k=O!%iB65#g*^-6RQ^0EX!2922{e2)223-XUgPoF-G=zYK=lOLe{pdOir zfp;{*KhL4yxo#1^;Qet+^MU0L-bS~#`1=+QLU|vG7<~ceCi(uMM{ic2kcWrjFDDNC zD?fn;;0J2C{6Ld`r61Vt(g){=`$PD9`gr9I>k!}xhR*>Eah$N#kR=UW7rxooX+?N9 zZp!D9oavU|rSJmu{wxLe=taUU=+7GAYyb5z6J`9j@oUA$fQ3Kj!h4MqiQk%UT)*Fs zdY|W_*P-*S^cOt#6y6{nlcF1};+GTh0_7d?h5cIl2b*uh3-SyfUwCluOh7l3{-=C_ z{)ImEgnvQLbdI`$bbANxr9UX{^E~bf_qf@W!1@3zqcHH`zsr2xKp!-?c_IAc=Y;=z z1M(qr-+Y#N9t?Rv2Vf?j+0R(t?0+f!K)p_%PpUfK0Q}#o*BjIUbpM+_v+#d->UKi@ z-lZW`JYV~xmAL2m68Eoizs8RFwETHN{J%Pf&s!|+WhmUUK1$CrFOPQhIk;zET+WL) z0lYiHJ@9QYYSw^r*R!5QpMm4o(u?#f6UWmF_=k?Wm|P%jSdpzaU*ozh0UX>Lck&wd zFW?>EpQ|+Pf@A($y{`9b6iNg5r|&W^ao<$j5BLxKI`O|=XZ*q^aMM}94-jw2XTzG- zw|+go`8&op*C{^0IvjZ}yeqC)`~Z)c*X<=}FM0raApX(9qqT0I1#jYS>Ff1^8Y%OJ zx}EU|J?_`=jG=ToPr=_4r_p~h4}ZtaXNLHVo5{r!m^U+_UhtcoeYu2hcaPu4aymoR z5pa)%Ea8e{^u=kfXF0wWP1XKB((i!&-HN|Eo)s?xbw|#xsXn9vKUeNM0iN*#`2hR4isN!v%y-J?DI?9v?{hbr&vh(aLAaN`FWi&Ij)Z&l zqq(m=pJ!eimgm!qUx%;h*MCF!&(%*V{MV{k0RPavvH7?7HGH9t{dO~YulKtjf@kuC zF0f7E1@*@8C?P-if%uZ5Cw8?i5PCtCyj}hP9j;}_6ME!d;a_4_$-ZlOY!wB={Y!Wx zKkPF9XheNox?i7T;r?h)HU6I>>n?(K@ZWB)cZGY!KlL>Yna3mi*Z+q8DXefI{Db4J zy`S8|JroIe$96ro$^4>-4nrP?wdDQqS@=6N;2=fUn?f)Z=b>Z668ArF9^il6>8*Iy z)giBEehmsZ0+?lfU4y=0%Q53&Al#qKyXYW9(Vos z!a4Dqe)WWTtJ7X`!Jb3+@26Pmb^~`IxuE&y;`h^e?|u1+DeHr##C_F2h5H|V$bXJK z*JxDxiu?GdvYxGVOoe;!I*}h3WaDpzf5Nx&jf-!dsjJStw!pl1jqApMbw}X?46icp z=W7oBC;nyie1!i3f+_rympFJb_?n|HCaSBUuUl|c`5%^gn{+itJ)S&Z=F#H~ee8fEI;O16R=4HSt`Jf3eyeT}%4^*oS^uTzl)@U@PM^Tn4d4T*#iVjE`&;tJt?h$vy z|BqR(Ko)w1bze%yw&4HhDfuyZJ!#;Z$=B$DdA$z)@tdzK8yE{Ep{)=r_^tkI@}CAFevWN^<$>nAyj5CR7DF6>zjT0juh)gw!uR1R@BsT+pLJs``$TY? zrV7O^vtp_9N&j=KpHbGuz`y#TJ@aY}jtfga z%=|U(Gvc$JGk%Ka%zjz(o}NFW@c*{p9=U5hqUW3bbUmo9*KN1_S^~cxchj|mdFtaL z1@H99e3uH}#=MC=r~aPgLVAuq)uzP`b99jl_JXOseXP%U`U>PHaO=!#P2u#Zo7lWS(|KN5IF9cq%RAjlTC_j+FTRm}qqWQDv0E|=hv$4(&c^g(d0zZI%z>nbv z_?lr-#{W_m6fbxr`~&|o{>M>2Gt$q-kBmh}uQZ0o2Az#E74!M*uh*y9oACnuI2r)- z;lcMt@(V2zb|;>IKk>XSzv6ivdVEaY@ar1!5ex3e^V0Huq;Hsd@Wg;v@(lJRG01Xl z`i-p0Etz@WvRxc{!2724qw1d2A)Kq%Wmird{vpzL$oP_f7|K7G-)F-k_y9biT5o#r z&ngmWLfnUT!)weXwgcG~{ zSKSqpz5I8__$hUH#!~~~Px&I3ABBI~GLJM4X$v|I;Gg~=tP`Idt1bXQ3+mVpwBEk_ z0rjj>7hpO~RroK^H{=g$je1@9f0GXg|M-=G;y&wwpa-O1!g4uE$8Cf9qV{x{5P z<$7_m;9v1?$ouHy$CFuHv+t@NVBQTES>C?jzrQ;!=&QJBeodIk?C;y^i56?_W3=+#~Mi%|rY>_(Rv3;0LsB26zmQIge?493J!c z3+73De9&mrh5s2mLss*a?X&n8nJc%?>=X2$+-4xU4FgVnPTo^DfZr6<^HbL8rmizq9Up%&RNpeo zd)?vqf##dYq8lAX>ixLILiisHYV7loFnPPdiMA^Hus!9sB_qi98{_csOLuJ#eumM&B~?^U2?_B-r6fymSYL z6PdR-<~%I>l}pbS{#l1^EWa@LMXegp14K7vhtIP&_4kx3w^QnWzVy71?Uv|);Q?PmeK4?pHS4N^ zC*>vb1M-LNar#*Gn-XUb@dPEYd_KHBLH~2Pf6U*vh5u={*EUbW;|UYCwx@&33d5^T6I`oz73v`}V%p1x@IyMt56J$nUAQvp&DSF(TmN1=#nAI1AoYpA!DZuYS4} zw%iuF6ZKoSW&S|^i5^e7zhbU>ba2++);KTP8t-cv{S~h*`o$&c_4LPTym!198Sx+w{?*PXPyuXv(Gd?+&zC-+| zmVQC;g1=#{!5)lID{X| zPvKS%&7~+ma=_?)S2~>Rj6^zKHt!A^XzqS=FE8ioZxs1Ob zDzBk_kDft)fa;Iv2h0;5abMOv`zr|d&~f?}z5Gq4WA%r7_y+xQqbPqc8hKgzKc1JC z_3Pyqh}SQy`g5{s&4T;R7+oH}V18b$r&m~CjK++VzJuq)Z+JF-0HGg$p!73f>)b!{ zUjqA&fT#ar-)9;@KjIHslgUxQQV(f(`~>)XZE1V*#BE>?&rdJu{m6Zwf4c}+@o+u= zDSR%fZbCqle_+`q{1AF5`3mQSAIj*9)cKI#$Pe&>yP96f*nmj!e+a>sy;os9q}%SM z@(ja#P{nbh`cqb|MsTlvWo4nw>;n_-_Xw<>dF}AIB4C+@NnQ}a3A!Qq!IXJ{T` z;hynYC;EQ|{^lu`<wnv|E98VI0@+VkLE=$Wn51f;3?z1g>LHC64s@je=nTNZ^&w%Z;Bny=c5GNzK-|F zxp>m)mhl}v3GUyy2SA1Yl^*dOzrbm>^nSe7T}j{rtPeH7FPtNM{G9K-P`$_ZgL~E$ zVm>Orhl5JNKXjb_Uw5&^gemzS{BbV@_Y6BPe*oO+6XJDv2j`1FA|42T1YrDt>i$O> zzodmn7XC`zY+#A^{N1An-={1z5bnqNdvMQVKbA!}(t2c<+beDKOn(+&Z4k zxL=p$e;oZxTvz6}U&jdix{v4*x#zfm*T_Gx9mFu;2h=YnOC1mWLAFO8f?wkAE&aHJ zKl<-2^9S4G1gn0O1e~!he4a8Nk#a#fKdH>Culg&(iMtx$CF8LN=iH~h@ZRS8WaWnf zxX&BaN+3QHKZ=yUD|o@7)3FS}3ipA2Y{h+}dCh+i?n{2eI2cV!zPH9>DE$Jz7ZdIu z`SnqPAKM}3Jxs6iNeZY=bpYvh;2)e(f3~+-Z}3p~SG>3Mp+Nf% zW!I@M$q&>T!*ah^_+1w7gAn=>g&XA`vaDnHp7;S@U)BxTC!Kr&PeC9Q-sZ&l!1@@~ zy5f8Ia)y9p!Ts!2o+;iN1Wj3<_qt`jY2Y!HRbFcLlf7yUKgxd8;;)77G%V+k&eJ+Rn?!x^x zecrOrlX`f-zE zv|=8J|K!DO;hyyX*TFr{mGQBaT!xnyDOT}1-LmjnX7=)a8-M7SZ;ReO!>-|H1}Wp0 zam{#6)}~$J`I?oEmn9c%IbS5jRykoT>)4Lr_vm$wzD#h;_M7X9?{)S^af-k2Nw0bDjJvnS z_@>|8U;crHz3Sh4O!Xer}nUM&AeX#pw%xUmL8cS8Im-pOB@F4S50Q&H5Jpv;Jt*2lt=V zd0xW*_VzgUtS?lDuqv+haagj9v+wZ&_su=leJIz*dB0`$BYg!8;=9?WKG85w*k7K2 zDI6a%@daG(kro+__oO2U@5qmt#d`myN%$Q5I}9Cohqg@Ie!Bky1$Ku&=<Y_`fWE8o@c?f9$bG@Yodm z&-fqi?-qRXM_JsT?(-J9{U<4YfN{_X;J-nD4&Vp56rCWf5g)4@<1gkXeBT=MpziqI zvM+$&W1q>BxP|_RplGksk9d68OsKQ)STfEIf?iuY%#5i)C$1z{vxK4P?z-_rT z_(bNoZ+t&_P2f25x<4#4F^*dnzZ1RTyjUM+WU<^v`T&wE4fGpBf5?o)Mg2g+8+y|X z!@}X9oW637@dJ$R2<~s-9!fu;_$hu+&9fX7?-XU709^o~x*Y!mT>Js++UIrgf=Lsd zNBCf4l6c?l@cr{hJbi>NAS?f4*hh|W@u!6SmUN<}HFX8NWn2**m z^zC%{N4%%L*V%T&d;G^Fz2&yXbH?Ef*3W>yg6B2Id_1h`-tb@xkK_J=3-Gc4J}y%} zdn<(xFb;o6@B`&~J@|`WZ$1TgYc7ODe}@|s9@pZv_twGJMMKAe#UHfW#oVIri_ZxE z-TC+r$pusP-x~Y?=~O+QH|JXKx7W?NxWw~`7OT7nws5XmYaU?f(=io8-Cyg8>)2F= z$FP3Zr^yFp97k`HZOxcph2P=vu9UCiSQ79~|Ik#pkE)Mu*fl*Td)cg^GY<{-0Un;| zI!LRIJ=axh(uV>cpbdCp#B+1{KE!)99`Os@AL72b!k=TK^uM8S!Pho~ZJ&^<7^ryTd39$tjw1tJa5wM=yF(nD z3qMtaFN+_@ek#iS=FuxF!as2b+@tRiU&ZH-(Q^~woqwzOv zf#aR-nDrPrZ~BFOg3ZR+Nas)8Vms2eLpehC>((dAiCGda3*paO3Q%B|R$p>D_3fC#08}Wj{YCToqi}==(rC+NC z?%@OUdEyV~KN#7IaoJ__p1lyyLoek$#W<*aiI#ZCq2s^$fClr97`6$=`V&x5R!Hk^NeA zeQ_23#(BrpDt@o@2V?Rqt^<6{F|Q1Z+(aG7T%7>K01n~5m4LswQ{?R96t>_Ob=cz;ZV8J&!e0g~!zK5;4*h>r zTGbu&I(1>sx}S~bSeim6T zq;~r4hm2>wFUy60`AaOkmi|$24=%bY8mtb_H`(6jr(|C_@1-TiExjC(D}UzOrn8o2B@H{1x?sJ-dgVP*t4o!DDQR``N^T_c_A5te%?% z?^E(@;a|s!|Foe^h5r!ZiSR#yt|!tFh>!9s?H-@oOZMO=m1NKDQU+Mz-Ce?I&+Ua> za|Yd-*9TP`Ij{45x7=>n!F>%lx#ecn?TyEVd zrV0Gu+OGZit>>==U2ml^WFuG3tN;A}9F70(wA!KvoqY|-8@@XW_!T5&}>5orN^ zVgA;_b`sbFp%=Cw$Ecs0bylnXFWkDR>F#g(mW-Dxr;f--4 zY?zndt$?cy`YX+NpZBuM(HU$6avO)Kg^*mRg2tHvhWcL6%xM!W7mVs|5t|{KrXSdB+v7YU0rr+0n zlwYWbms~b$$gnNWat)be7B^q)-&64V4axwemHr--FX#0tIKF`#&=-yw z*YIgi9~bx{u5#L(U));ZdFvS6ZY&Fb8S?op{2KE={Vna&<{znjm| zmeS^Pm;aEBUnE%4k*SWK)4wi%q5Z}pf7fUp959}@a-QGo`+%;_b(7Av4LSn#zq$OP z@(4>GQI&O5Wz8e}B7Ftq_XG8_leXmv^IG&AWa)Em2>*&FiSSQ+weWA;$e}E-fUny< zuCodL_bOSx%;PDC%ni72-wEgA z_WeG7w`v{+@&V>ifOFlR0PcZ%C+>#b$$t!f8F&3IaiQ;t|50&A^YXoO4*PPBj>`PJ z?1lVVdK);D>uJIRMhX6s=QJg*!2fXsjAN$%fdAz3blT}8;M}+mxAC@@xotfQUbs&1 zZ_xY6>#-vW3E*hMIQFFg=c*6r_(1j84Zop$B5b&gGw?mP88)P^^Qny{>rMI+U&NCQ zw@SZa&u^sg@9v6QO_uxAne1wcA0U5TPL`=pAGzi9e1F9K!Vj>Hcc=6NE9>jx0n9^a z3jbRF4_)!%;X(u6Pu{})mu1<{f&2jB0Q~_!!2W%*?M^yU{D=ReN0j`3&edF0+?VAt z3;Bm;v-)OH)nmYOLzul+TB>9>*_ z(lHbENtzVJx0d6{tav5Myo7clKkz&|!{@i^jXL~3y-}l}A)LOBW0Cz(?vy$h@oUU@ z7rqVxM@OBHRoAj7I19KHLm`Amw-QYuL!X zGP=Gget`H<>K=+Cp7F0^)|og2-&>XY)C0Jm$Zmx!ar(LJeBSNI(!Rxh$H`^+~gi%Sdbq8pF`mueP?9Idop;3m1TZMB0KL9^i`D}@ha6hczsKeFJ!WBHzjdlLCvw`abJ`%E*e*stQA^fmJ^?zJ_K za4+so=Xc&G3;3MJJ(Y!C6y}StBU}XHzi^#0FAu+v%O8x#=-{lgF}_!8I)`XmOWNB5wvi8>hmC-L z$l%eQ_)i}?7XJ;d-NrhB!Lu(i!*2zgZ?Jx3fn6nz_1s1x+fG;QDtxae+)FRE_yP2k zX}WBex!=PSKVaUhHt_??;Nq9U|9ZFECA&XA800xR!ubXXNlM(u&opGq^&qg*UJu=m zx}f?;r9~>Uj(I%&fSnBL@N|%fKP>Uc z>uJf`iL3lRJbLP}3~wFZqE0hU!RsjYiU05u@^R1aQir*df`8fwG6&un&gHx?OrGEm zm``!fv0e;c*GsXqIZaYtZ+Evx`W??d+4c2am+N7FCgLC0hwL!_pZHI~z3K#d9ltoX zT=z;(_tRdc3*`^Ie_6a+8)aQYdg-uG9Alge4EP@~ATVqt~1Gw-g@0e2D`KUhp3?aDSU{(bqA{Kn;ZdgM(%* z1^*1UlBXZf^1H%6U+2O79@|us$5Y2APcq<}(;29~|LPTfK(Dhvh44>3u<6MA)rXfp z@%!Arw&FhSBMaca3ohdm^A*!<@B`-Ih&XB?;=C|MbG!Z>QkA*&NJdxz2Hdc{^vMh2GVZEZ zTKp3_!ZQ7bZF4b@caXQNdd_D$$C8iG_qZCCIffU6RpbZqn6PTH{1x|Qqtbv+-iVvP zXJT%I&ARfU8}WLz$@l^PT8}BYg&&ymIq<)}zE0eCTNwj7A^xk*pz+@pPs0*#kA=qu z8)Sj!8&xKV1oCe4#z8A$p?jsRLr8SomtF_%M+6#=C0tI0Kl%>);ve`~`nxUohmUcr z^Gx~PNA!W}n6#n;4tXCu%epb2vp0~FCcLlTYlCyv-rf#Tz|R+UI*NV%Nkc2 zkLb@CxWBw`_#OIkvX<3({_s_nr8@T18S(!O@V^C|8V3AB2OElS;54_yd%{FdxNn>~ z^$S^ejgjrL1E}MD>uW;TOij|2ln=if`0y`?Bg2v+@U6 zgJqcn_;T2|b}hzG`T^$aVvmm}pM+Jn+U<5u+-kbYHkX$YaF2g0WXIE@ElZjEI064t z`X-BJ)9KE|1By;}J%RUo7S>3?`?SOT1OMF~ycb)`(GxC)^W@=q z0?yIl(d&r!L*g_202u@*fgk9)^*N>$uITTG*XRebIp2excqSWTmnj#t!?FYa)Aax! z0k3Tb?on%u$CCd#u5TG#`Z;`OS^5rkwVr)j#7)1Ubv@$sutB`W55&!CPQ6KZlx{9O!neRVmiSQ~ zBXp$T4*U_e_uj&F4F+ZKzTnaD!ResbWF?K>y@&JE>jeESx(IU0T!IW^;3 z_&j>*t#}>Y*R!|6b>$ECv)G~U{1|(eb`kI&?vnq^jQjxOz4Qyz^{}_(=k$B{hZFfV zcy+^pbM>v@-?nD(+f;rKy;}GmBGBu;35(7E@i(fku@6^6y1VxClRgK(_TYF=^D>C%dp{OgRdIbl{Xl#kefNcqSNI;g z@AmMY6a5|eRKx9uJ@S$wD9=BjjD*k6 zTg*2|Bloe}L22TC)ArI$x!<%IgMUYTD}#T*2k0l1r5`<7@DES$ihq>Z`vE?X6+gB- zR(eMuZnDlyTH>F)C0&K*!;c(Rd|j`1HaGDCc2)U`a8KRY#ecBGocTg2@t^cP zSKiO^0eycy1?TY7^X@!#pd;n~@UBcEqIPwaN5yAsa3 zCHhrQ`1>W*4>&%rda%O}Oz3}+-UzJP(jD*v#p}FdzQTEm_YXP$WzEy};Gg>ck^BPw zUAo39;p14gTCLV}KWJ|o#?7!%YaW(@(04Z{DFt~DQ_TrOf0zn@g;rSjCRjNx&iHhgL#9;n7?8JMdSmlsM!*B)4LRAHfs(9d5%xdc#u}q~QSk zjO# zN2KsvbUkds`m>Bb)}hNX`hBtFfkSsYz51Ly7JIXJ1wOFksb#+0V_!db^bS7*{@qRk zzazb!=@bL(Uc1w|MpqAgzr~RU-=tl}5yuI06Y+Uu-7M^5Nz|}=_{B`0@AlZ&fxmD5 ztXAS3z4m+I-Z4=a-A{g^(C@(8#-4c3`10U<7yo(${&yHR9LJpjL@4gs&%OHNI35m& z%U?wD{qYzca9i~~;h*KX+Ftl40pfmKjelmomg>7F+n0p@lsp3dgzm>WL)_Q(_tX#I z*F14pw$$CR8utm$0lDN@et>pZ4=?NY zxJtnd@>olGe7e2;q44$hf4{zMSCjL?Z35m~U1wyqPgTkL58$cG$@#KB>3p(uCd&rt zdA~#&IS*LcaXtz32QZ(ZZRitvlJrCUCJ2e z*z<;d7K?vDE<<0m%cYJ9&RZ0`lT}m3|I+eY^?rkiEcmbG2IuARV|DUF`~mt$r53?I zdQVx`;BD!k%6H%eVS{BVCZK-Pyh)##EC50`-K;*R&ulAfaDNAO3;zJ2m-T*JzE8f< z4cE;U{;3|X`|Df>`%#ALoNhg`KP5OCn$JQ9et;hc9g7Z0yzW%k$IHO~X}5dL!^P{t zJ@I!YOId9tcI*w-AJ1dQ;BTgd0r$j(G3UGK;`V#|ca#0fyKXbx^e6MKzn*Ras{(sH zgU34d$F9GCm)uP{l^Xkou|FQTKMr@@U1J&toX_1Rx}na8pXGd#8`Pbm<-EH11Ni~< z$2;m9(w_r7z75Y}Jfa5-N?s2Scr(yf#r+zCbLLM_u#jb;1lgk_`Zun|%e5MHHO6;Q zd|zmslQ#^7`?r5lF|wL>s`$=h|4}>`Jthb5x6PTCE5iNgWd6PE@W&GW@(=Z}%euDk zF~1jfR5unbIn0IM*soTI-{^k$BjWf%lln6Fr@S=t((#l}J`MXUw2+&xWHW<>FHoT+ zzN5R=Wskp~#`62FU3*Xb!c?e(($~ZIZR2-#IgO!oeq^8{;eAZq)O?YAu5oI=u%F|9 zvF7vX2!8u{yzL;$=1#axThS=q_N>ndu(_^oXB2f`&=rPv-%g z(?$}7`$E^D{>@@i&hJrP=BRU{hYa<;^zM{;_&WR5S@d*#2n9qiJt4f&Lu& zV}=1_PeWRA-V*1{&#_DNqjl3I zyTouW+)}crI2xARBH?HTz8A@pC$f%ytbm2*w`HNHEzjrr;uF|kG#Dq~{}3LW^1X!N zZgSq7=YIBx^5?ali|`IjYMbTwpH24irN!ohCOQOsgaMI)f2QY8X$HnFIgaHukUAarR19e^*-kO5~Wlp)j|6Y4Hk*_bh2>ZvdOVEcLw{ zykGDCviaYHd*V$d%djYa7ukE8^W3CAY%2VByR6rY#r?Mu_&~Ec$SwG%E_jsOwb#kJ ziWEP98#^rh0gborZs=&e``8JcQzSg{1I+>X&nl6Q2Lr!2{OS|Bfy3Mg6hO zLNkodtyadmEc6Q#ALp`!3G_bfka5rZ6KX}uuyJ^J$)=L6y{mU#o?d4i=M z>>#;qZ`QN1)}Os8za{IrpGk?2?Gxd@c$E)i8|X?N-K^0d-cw)4?=J-EZw>w_UZdX) z$k+FVBoM+q`eh-DDTI5jV<;W3OMY&@GGEQ|{Lp?C_t4+b^TQt7JL3oZp69xV{=1`2 zx97++%$bw9tbZ|I@mSg=XYvR5$%O#^OWhv)^D{3E_-8&y+kS5DupUldmV9g7+=2AvJI{G}J1t<0jya}B!(!XjRWrGN=UB91|_#gfG&%*a?#`p&Rt;y_t zzvkAM4#R%X9{rqotjwo_N3T0@KcBC!C-n12?azT_nVuH5&UH`2p)@iNEmqnJmi&JtF=uLk}jxKeQj66aE9Sb=XFgJeInL^bPQ{ zLD+4j8_8de6ZC?-^b4H#EQKeK=4P^ljf&e$HcfwASn#Gi*63BOZYKGxg}4O&n^V?tqTd4D=_FFN}nL{3+|on5(r)<&A{- z4fw%Kc97Sr!aM5}xa79Esye3?j=Re96Rl5mjrUo1dNk(!o77`g40u1DF#mw{geWf$ z?d^DjesOGC;>3~n6XpgE+@lW+h`;m&(8me>n-F$zzk9^E5&o4A2=A{l?#R>dguJUR z-0S>g;b-^-`xW7o3< zf!0$5|4g4g3gr3lroQ+-JdV1b{k#WVGoRZ#$f{2G$K6cL9s3C~dS>whQ|3j2|En6m zukk+`CCtAf?dszP*19^MOOgJV&SqR=zijS1-e67offL?cHj~9qPW(l8u~K8)G2d<^ zJz4X2NiZyZ_~`t7**^YNb~^9%%mvH*9rBqa^G>5V{N69cMbfT`TMCQn<4VuFMc!@+ zmv!aI#C7ID4-9yB#4n2--)gVe#rU73gC&c0@vXNH-%1ygMfKsOi|#DHo0YawuM5}0 zB|KpfSPk{P_{W~(^Huyu%HN}N&GkEj96$bByClCY{IhIyi+KOrN~PYw{%7ZSuHfB4 z#0|UzKh;a5L$JOtxIfSB%}V?H`Ev*EwGO6(4=@UZ_f?+HP?q6amp|Zq21I{euV)E< zK>JmJrw!7#9yq5yO26i&+hCe@HQlrueQr#$X*Z4UtQv4eI+7*V!I@siQf`&qgm(?n z>-M_Faf*L%EY#+R%jk@UDLjCEVyYhevmMc~hc|fdoa~D7Qr;KuapD)_><_%V2@NcH z$(VoQE!UKjqkFJ~*Ael_ay~z6{?eo!@c^!~lXU8hTE%tJ4rQ6Q z$Ok&&P2m47Wwr%_E~sIjqEjFPlsbj<0k8UFqe=fmlrB)})74r7T|Ys`W85+?p~7QH zI6i7N8wos~w&r>Qt_4FKQ?9}v5XWC;eZ7v{FcR)52i7g?ha663b3^|hebKos?d%6W zcU$M_(ECchzsr6$gS-Jg*`Jm?M0tO+RwaJ#^LthMlz5I!o|>n8&AsG6_ElyNqV#_7 zAD_^!<1Cij0UxkmaX!uv|GmZ)R`XpW_y_h=;h(a+7yjGp^Gx_Z91=IcKY!l@|EfRa z5#68u_56-91H(v>e*Db?DLi$(8%yhb~9sNFmQkU;Y0iyw)Btu-sy$IxBXpy zm*;2D2M-Qsv&j0By;2 zd$v6)b^2o_{-?z2?_Pp?>fN~U0^Hp0A$SYV=FR@da(q1dA+yx;C$k~e+#Y0AK2M*2 zk=OM)!{4V^)ek*-AG)IE)$APPRps@&(EOqK3cU`$q&R+xM8-Z%zRH_*lN{Km@QR7- zIA*#00Dfy6pXv3ZBXba+Xx>945BTsy`fb3yaW0nepM2fJBPMr%X(S|=~;WW{QX6HmUQbN{wH&mI64FWf5kY=vi-Y>?VA2n23iA^O|g42S?zXeydD)N8c(f{m<}# zq?1+fY~cQIp;`C$oOu5*QYWC?I1&E0<+sYdf%SE#zJgk{5~yDe@t=YIV*1(W+KDcpH1dLumF32$Y*$3M__kG_Wj1@_Whv)7sCCzbQ0n|@r3vvwZG07{8R6nPl^9mkyo;K zHC#O&o-q+W06+4foacFRBK-4fMpo<0;s@UCoQ%AEH{I?h_<;L275>#v1-?JvHVy6d_z^gIF5J_;5)E-) zenhyRkblTB&9M?c4WIUCAoHKbk9qug{5X7UYKQQJ@KKe#(c({t^E0CV2JYY(l)vU7 z_3g!^HhRfTi5yD<(+KUXHa_uwUt{9kz2apmV( z=BWoDySyd*YaX;=-TAjpzrnim>1W)Asb`-FXje0^&m`+=4uyZw&G1>gMgJE2&Y9b7 zh^gI)>_=5^*j@GMmU!P`otER2I4M3~;<|Wbm_N6R-um3h&W6{~9{IZP zHGyZFhkmzp3_o}nc3E%lFZx{82d{fSA*2bnt@e9==byy=VOFolC;myjIT(az<|*w? z%J-kBuj;iWFXwnXEy{i#WH}5x&pq&BIxLmix6r{6C8f z(oM+YX`3p9{~CEtQpWXuU$))jd%*d8``X`u`(H>u2mM?%>k;Dz(BrC#|0RC|=PX-y z;K2VN$Ir_TWIs3Ql3mjIne%pu_Rbk<-rs7zmBEr<%yo=xHxd4UXBGaB9(a(;-mBLu zmOKErbK>y_(2J(0j`3!_-}m5N{Ld5r>-?RQ-q)ZX3@bb&_ygsGivR1~;=d~XU)p9} zckoa8Ys3QvMw_a-<&cQ@Bx70iSG z3;rXxr#-DH+@GwjuZK_lr^Fp2{14&J;p6ZT^dN?h{71%|Y{!rM2jm4mnhp2`=gaTo zciTDDI!v}i432~q0wHCnnCbYPb+)b~~iornmh9?g^_~tR^vOK1_#cCh1l=p{6 z^lMTNtRN5u@UOl+@qfOiY44lQhFP_m-naJ&Z+XJ{JjhNy+;^<&&w5z+fok)(CHy}p zzC`w&loy1yN7;vdpu(pD~`X1 zK2$w;N6*i(OSrGDL*K{WOf8l$O+C>pf#b22Wg|@CUu_EH{eMgQNoK%1^Xp68^H>z8 z(fQeDkGda^p$Y%jIsHL;+eePL02}i(0Rk_cbm)~48(mN zOAh|;p<_=h@xNNFH7)B?GVf?JVf|X#&N?Z6fON_^Ec?2i1T5)8C9v-w;V=si;%DHz z9v_&USK!<1v92fo64uSYEf0kI1srAy&VkcZ@sx1_-=?pIX%o^lJWX}^7qcW!(_ ze{EhTpZO|zNMC<7A3d2)v==S8I)Cc!r)wgJJw8JY$>B9=LyI`v3YeeB+4s z=seG`-SxJ6l0HF?YI^X0z=oy{|G+%`LdTBvb>tT~tpWIdLOh{P81}h+sv|IOi25LX z0_d?0wcv}+d+e)F>ivv=?7Y*N3-2u3(U0`^3@P*n>iqh>0M79n;6G6R!>_PE&v?vz zmveY?wJz3mdW&T_l|1)pN`x)ka@qaD@z90XJ;aQbmnBc(mxmpcf5Zt#JAbu%@ zzc&W%yk8>DR1@lqz%rxGe;z-WCB%Qij2Hf4M+SSo$8Ar9d;Z)?_aooqczMu-SAc)M zwr{~VehnQUUDi6^rOj)+FCAb;Utp^KzyWrZKBSi7yOEx!`3>_P{myoEa!B0*yf+&B z9lD?LBE?-`c}ciyO^zBKoVF0QWZ&|zKQS9S^0yz1v0n4=kB(?XMGTG zU%YHIIKIa^KZo(2zX#npGVDXOaQaj&WxZY^8^OMBIPx z@2*`7&)hTOlW_k`>+ZW}=@V$?SQfeYrToF<2!9FwCzJ13_scy|JFjf53O{=mp0scM z^ppGwdFkAs8{ijD@q3(4y9@u=1s?SEG2fp)pFkeK{OqZCKn(C{@Grk3{5PBEmEa$^ zOkd-l=gu+1uM6+Lnla!4mT9&vFCCEa99Vx@^JX3Uxr#4h-=%$MBp#rBJ%xXU>4_o! zmvQ7`An)gSkO!pcwRMO7uW_8PE*Ix{V!*xgM2mPymrZ7TYt@#kr z`B%$%Dd_1%PJV&a_gdoY_Q^>mT&{H4Sp(dceDz}wzGLdZajz(T3fLq1+)O8YO!)^J zKW5n14IY5Jb|^dH#Dsrn&s_M=JiHmJI0&vk;`ZVX@FxR!FvlIjjBKm*J@5OEi0Ac4 zzA(YDM)?`><+d$+c%z~?kAKemy>J)* zR1JT0_u8D7$MQIgj%zippM7cgx+C*t@&LVbp0KY4b!;yyp6Xbqo4)CmXPn2KMbuO`7!%kH z=cVa5_=7#_9_t2Of<9{WfWOT9BOj2SApB3^DFHsfvV#R)fjH0eCf>vEM)9Vn-|1x` z{Ieh5`{8Q1B3(PM?z?euEd0-@*Oj=Z;N#funRQs(;{W6|9q|8`{6AdikN7^;$?u}W z5&!WA^lgEE^qXx9{+XsE{4e2ULZHr189p!LJ=ZJS>CXS8d>^_na%YpXBmN2h=aw?otulv7b7f5g&pJQ6?QHt&T^vDVK($B>2j~EaMcs>pB6du95 z7f$h`?}@j=gM3QVf86cjH$QbB4~Kjo$Bh4h@aP?mns`s#tyyr7d*})O zh4ex2FZ@~F*Zy+y7phMLaNTade@A&k@w{H;ef&!KxsS{J$M_unK9&!ATxDWpy4n2OLNdWTTA2(9-fAsebsfWtq4SbMQ0RJ-l z5%)4M;2(NbO};b_=zlMgFYN>R&~jVuZ$teXzmVbZ9mjmE;@Jm-tFFYyo_&1S$NsU| z=l-97|9zGZKbE{io7z+_N8k z7(7j|)J1X~ue3WS4t%qGYZTsB+C?r)AM*>@yiu=%|7WKc78VTr;tlwSIWS)#kB^D} zd)vxSng2T;k&j?m{<&kx1H`w;|99x08b$CAj~mMm^vExDOn*T)-1cQ3l?VST>mBm_ zaHaL#eCokHahm#HO8kGF_v4lNDf?0z&v+L8A-uvreHZ9|M0^H9r2aRacguZs;q$E9 z>(24q8^S;Bh0(A+Uw6H`9+$$>_DPlp`h40vDB(Zj@k{sHPEo#y|6K|V%Jb2`sQ07r z0UY6;KAN&_U+Uf9d_L`TgmbleeqI@zQR4_tzG^fT;r@_rp(2d87xga1#tALRJ~T-M$e{u#FivebQg!ae%sar{S%4mZ~Kc4GKp z!hb*ZT)%9=^;;~rZ&<$X!JGI4_X$7o>6CxrAH$~;5+(nS@zZt}U6k*K_a9mEdB)Qe z9k4TKo<8NI^Gycmf9mUL)`b5m|HS*N)i;geeKqT6#QQ%|1}Wk{`9B^Z>_zsYMGmY9 z|5fl5AK3?*Cu6@fU&6zW@B?4ghxBK%KM%{~jT83ekiMRR`}Tb7!ejTiDtxeCPMJqM zvHMdJQ_Fn2dAHk5%6T_MPx!~bs6T%{uho7g`~&x#D7;U8C4HWCxf%^{_H;(VV-L+! z{6m%;f^UGCf^+rx$P!Nb@&^nXQy%{?9t;1he>^RD0P)YE2k^WH{+sj}FdU~?Xv(qh zKOzB?e_+{*A;bxhWyaL@I7ct69q5dH~omH5m&JvrH)8uAX{*vCJ8)rJ6=uk05L zH|i3}7vvjbTlV`$Z$FPaU3ioH0Dj(s`<<1Q`M;KV0lFFZ*Zyf8ul;zL5QOe`g`XXR z|0}HDcFjrmhySDZiw|_A`-AUx0{+J|P;T~z-)e#9?@*SbG`02z-wAU%uxI90u0@x-FvX?_TC{%nQBMDd>G zbDJstfbmNIZUWwk6X3qvB@Zv-eomgBE&;Ey52y3t|J&2s{J3?U>AnjU9Ka@FJVrklK>aJPiEI=(s00(AiIkT&KVfW#BH~6%2Z4)mF=KivI0bw3`CZU<@yll z%_?oQRMhQLDvAqNA9vuSC#MSnE^fzbash%yN0|^V&`t9Eo~_(l1HIZT7P&vx^Ssad zvDUH{+|!>=o(dd_KXP!|>9jk-d8_;H%F~@2ai4>9d%s`Dl6S-Jg6pzG|Gq)rE$bX` z{06tv1#A^3^Lym73FoUme)4?bT#xb#_V_7dV}m6v3t4=WtT_B!}{k3JakdEvc{vuFQS_;)YVqyye#|Jf>^Ut_;V9V5HZ z2Gd^MAm49N>Qwe^omC{>e3XgE*hRT5(sx zR-ZqB2d;1)>__ddl)L~BTvt9E9=HyVy%e|ObzWz8+sZcbo#b=qq;7ZeofFm5UwgaZq~p>*IWCp>KBadgFZ8><+0jB;cMhPDi*`pI#uZKAnHt7yirJ=wmGBRg2`= zl>fue?o!tn2>%*CIsaq0Wp*W;Y|1!>>_ai>ntcQ_z$%6jfH>i zmkZ?m6lW{%-|loemVGR6Guj{Gb@r)QH{gHm8*~r*)AlCcejC|ehWK@e|Nq&B)*q_+ z06;AG2Ul(TU+MQJju-x!ztD-~-69k90{M5YXW{VwJiiJ4|0ndNFI|=QgZJ?J9rUfG z?vMYPC?1ebFz~<q|@ay&R zV34B&7>2~@`8mdC1Al*x;WrfSvCQ9%uR?pQQxvJ+Ex!q@W2Aa*#8MY~YJL&lSl_T4 z;sNNqC)}gwYqG%BdF)KWfMr&H<(YkVd$4(I?P;po_J;s`u>9d`1j~daFnQC zwvPb)4n(l@45FFZ!_2c9H$N8e}!?S-w*kmaM6SJ zE`JA4^hd*r7fhP*y~O9<%Q7sM!v6||V(|_7WvK7vy1{+Y#vS~{R_Ae%We?Wk$MIst z3m+TudW%WEWj1kdrQJ$48Mc|l&$r<}w`I4`?MsgZR+)4@<7Mu_Ke$i*l`q8y&+!j0 z3;)YeSvNZ#+{^!)&(j|j!v8kuzB1o2JDS%e+?T9#AzP$r&9g5j!*CebmsfqihJ7TkpaDL4ySXQ#qHaetQJ$BX{zD!8ZZ zWVP;xcChScSs1zj^_QA#8{zE+_JDkw(ff$=Vgmkw&jz2jzeXdR@Xx-w9pQe&g<0^< zeeXKz0BNI9@cUi$0|xwiJl%jdl0Efz%ikB@zu%1HBRutRS=w})`1@|k-Fm8Tq ze`fwGddDX}i?0CxjQ}2d1>LrCa=T8+Hp zU*{?5inhU)%*P=bpdTc<=d_3g-*sDJl9(MG>(!bbF=#wFyNQHmm`b_!rf&~u}aEI(CZZ_(VS+T-D z-!J_0F;TjGwlO20AKoMUCJqSiRre7*_jr85ePqE0*)wODenpDeoG3pr7<;GS?UqW3vQXJ7GGmVBTr z>#MB?{J-#KJ`dLqRx|J)uOp*-vMj$|V7J8+dEe|1{>?4>b0Z&0$3DEx>FSFC{0}*A z&%W8c0{?P1*>6*4OTd}dO$+4H2LL#LAI2qhcXJc@Hwy3p17{hjv%%j^{#Jb=2LCU4 zBm6i1GxZE`Ek7dsXZ1Sx_ro9jp#DSfKjblwop^v@Eq$Q4jDPnP7n?!Y#|^fHfB2x| z_Ved{AKWXi;jxPMbbf^QnV~O8pP!I-fJcYen}pFF@O_hTil`ri^Smm&|HVQhEnd9_ z-__;!X#=X_fRr1}>#PreGNnF%o<3DS6Z5p0KS*8x$HlAU2PdopLOy_eka%F7{ee8| zp3HFL?jLgI0Zo`smHapST}YS@u#Rqs%nKy%HUvR_E?`3|*wjyug|6f^ueWO}m1O03qdSDG*0WbW7u(GJ^4F3f$;P0b&fbp^6 z(mW-c*vM0pGOlK_mA?V^^MBu)3jfHbn&thq8hv>3|K)H95ByYmQgMLlW3n2*R(!w) z6UyuJz0c!)aPGlBa*Vh?zKZ|m_4w*jbX_=SxSomD14R#vmhiyOYJHx^FOt{zxKTWB zSch)78krZ*dU@-CdAsDd;Cx3_i?l20h70Tj1QexmTqxgoGHRo=Y@=zCs_I&PYf0w zRUYx;@=wGm;Qr)H&E!|i7W%iyuOwH_45sU{=7q+r z{3A!aPki6=*W(o~i~Z=s^?Dt>&c5~1zt|o2r60>qX}}f!spDnfANZpmz&-PE8u6}| z%_6wxGEU85zCR-o4c_*FbKMbF<9<8By~Yn-mU(zc4_U$z1K!EEl-T{3epst;zbsZ( za&S-DrV##X=t@7#2U*rAg?r$&^w4E#|=2ygCYHgSk{L=D;{8!s{h~` zZ38pmpXHRMvZ}kt#yIIF^e<6=SyCUkicFjY`kxq%V-FA1SI;ye^8^&<~H zK7;T8kJUNm{jWoWhIM$>Pg%!@K3VdkGq3e^aPN-105~f=cD7h=1@J#1ZzKHE4!QBuVohInR1l@B;C4v%-IdKS2L8Kae;g{|WxAo1+728G4jFAnO%OWm5#c z^8LuisdT|gS}(cwI=Ug*~ z;jZTSC5Q1Y^iZ>h$svzJarHiK|0PfSOggS(D*sAd6~Brsk=;A{7WWgqUCfr>81i^d z>nLG0&s4ZyE_vR>_kE2_nGi7zoEFk z4KRdv`dXV7TP$1XdPlus)Q^fkvUDZx=F}O-rwR2&=I1T!UUGAd@t)sIZnCbHjqq1f zan5dXP5EWa1cUXF-cs0%>v%Xq_FV?3~4cwl|OIOgB0_@|zS2U5n7*LuP7 zbMzB34;FpkKRk<0@yu_g{dMeE|0K_IYndO(_+O9jux^6#rtA;WVjVYGwwW#h>nt^! z>of6yXrtl*@QMz24VkxL!M|ulxB&-ac;Hp(`v4EH&(Ihi_^E~;dBC4gC-B0*@TNR~ z{Fm|oTaJP!c;~#f!Tpa|r!^7o(GT7HuMKm-$^yIp^g5Q$8&U$KHvz=U@GjT52HrMsQ>~^xv z^U8c-x7D}ciTD{Wr^5d#FXX~Iy4&@0;(Fp5aL+PqM*g1p3?;a)Ue6EBq55)!`{`hG z+a2bI=)=^Kcc0DhJJjQ=xB^_C{zqrsVypLKEB>N>S1jLe=G5~~ZdZBy>h+v_Uj2uQ zb>W#ZXUBm5JqA?%*bI@AO;}*4`KpQX0<=XMS>iliAAr9#LmcoXdN86t7|*RhKYzh< zCf|4!9w{UFhdufY;H4V{H^k6aMEFcz-_l=5zZsVEV?MFHsr{U!4>YgFNVjO+KzOV< z{dQZrK=F~R%|kVh7&uk)h{fZ=KcD-Lk?*B#LHW+BvoU?k*rqm)X8tnr#Cz~B8b%-d zY67n~<{2}**bl(`O8VQd9zut@W_%~S^T!2!q?(7#7jevbEZwDe0Qt$jAztf*wmtiX zFis1{x~yGz3?6um`vecfS3#8%540cv@c{kAJ`fMEK6I?~Ke}J|mu^uWpusx(^arKX zVP`J2>EZ?AL5_jhD)|5Fbh-9(ga2o^r8(;YP*$2^f4V{*#mN5ySWx~`^Z@G$B(H$0 zCA{!TE#-5-zv6tWzMko{DIS3SM;81qm)&l_4oM`D4`7{d>Q!%OpOBLEcnte}5I^Jp z>px&zqW_Usi`Wk5$s?6m@@Y#KS?7Yc6zr`)V@T*Z&9n&!RzJ}0!ldMc24}q@gnWA)9|r_7w}`h^&dlTqxjqK@i#Mo zvK2qpdX!jrgmDAztGWV~@|6+(3td0>r>&rnC13PM^nd$=1$c#j+L+Xzw@F!Dc5B@- zKFH@ut~u=4*I)k?e6Y1az$5$_ifeflgj1KznGmBsCvyhyg^%HI|F_G$)? z6n=ZQAU}+izEAqGpdYG%zwb91S*G~Dx}V^F{;Z!>{(e~2rSm-lB%z+xo2|EU>S?4a zzp+@YM}*(qN2fg3^{fYxE1ri>@&mWmJ0jnKrEb)6d(`ot70lPQ;GT7Uv8?CuL!-Pt z_2+n)5MK1Ncx>oesIA1~aO~dfbj>gv*I8F88OCGsB+YnCeL%n)hC}@KGQvN&k69qE zh%OupZ;`%S4<7mYmT)hf7qIzX{yvOENdR(q-@jDE18j*9v@RpK7az2`lZpp$|6cJlbmGMW{M|S*Z)RORy3H28nwSnzIsieKo1 z`=3I$HR*tFC+PnQ|J*m?0{m7VUGOUD*lHb5^2vShPai-wP+hP2-Ke3we~o@s^ULr? zHDB?3U>0XK0Iw{{>Lojprlm3$a*URrPio{OA# zn)}*Iz$-e3_&Q!}aRY^a%3y`~;RFJZ?V{7oR=B9=o?M9^t545d2_K*E+~aS}miOfC zf17O0a723lZ5}(Hzlk0&4!uD*-3Q;BteZIj_nXi_#RK?-o`nZE|I|~*E6deJ0RLr{ zQm^-0-}d|D@g3*O^Th9Wd9LCy`d7xfjuRSNlIwYu?~h+5*BRcWDdO)6&fkE0jThk` znl8Y9!F2hi@K3xPh5ziYz*~{;s7?(2cj~noc|F_D_`&brt)8=VK0m@e`RNVeUV7J~ z_u-F*L+>-smAIP`&i-C;Ki>mi^y}C?>T>vhx5xTLYi`fqbiIF`$+BGYNIW3@k)sEo zufFiFzQ%ZHV9~D*!f`w#-kgSG@J-`FIQEBTi}?50AJ_Dp;f0>+r~Do_KNkLHRs0`_ z@4?G%xFNlYKfWhKZSbAU`peN+nISq6`pih9l7UBWY4c?Q-qaV8G z=nEhZKwp4Q3;J$6$IU5BtN4K7XXytxC2?UC?=wI&Z|58O#N+>-{8W7L9RHId0r#V_ zP&@$6(-fS)qJA^w1E2@+?_Qx!HW&VJL#e~>!xM#7e@}PG`W)e0qelEge{MtlDysJ} z@dez!QCnGI{k?d8c<@ynzyCIFqXhqLqV( z(gEVv9E)sFerv%((^L>eM*8(*5CkTS*B~v!Y5po z(dU9UaBsJotS2qI$~eGoihjZGW>*aj*d~Pr@dEy~!aaHOEN=NNcw;kyfANrbK)OLZ z0F66cM~6S>IOaE5jL^E*i~<$l5gMan`BdEvH6 z_iQ-yf2Y%F=T)A6cp&`K#z=k7_1XSsApB<}HVpVDPk6?F|2E^sl2@mEPhE{Tn*2t!2&VdhiFEdS8o#fp}sG59NG5_j#f3TU$UBoX1*gLcE}PMZV$z`Q^a8 z$h8(ipLx<8NAUj%IP92D!UxKu#!LPJp7mm>FR)%?XMMfx z(E(x1`_KW!WHuB2k-anJ19*3o4rnXC0RGXz;GaGLemwO+&+u}p2OwNz8Ta%HVM+Mt zc<|lwwjHj^Mjxzas?u!%NXFMlM{IMV( zBTJiH)58bItD5jnUVq@|6N2|o!~+@p;^^y<9}4H)8(G#U74Ng&L>X9r*Ywt#q3zoy zVI4m3PnfV0wwTw7@C@Ldy7{*r%VX<#)x$^x3qR6rUig$y;#lj~T5yg|tMcpLXx%1` zmt~D(GHkxxN-CVQZY!^kj`ThU{u$@kQ?18IoIzfrqtDg)Qi0dG4@(DrmrL^T=#Zxm zdX=8%c@-5Oz%#smQ|n8~@8f@K@k-nxKd$=Rmg+QE>UXnAB!7?JDZ+Jkh2i3r*Uz}l zWILyhw|WM=Z;$$0Ccnd^Vg69KKcT@Xxs#(Zi+*y)7L0?ALkX~M+er9_2TpVH{VeZN z)%UY{cA&VQ+r0|@i39MH#QpH^2>riHx^b3}S8sJXElVDad=2wr@UH`Sg?LzTM80RQ zQ4eU@o9tkg>bMb9!QHN`oSEq zUcXC->oq1A2q(naAnbwPV;VPI3dx?HlkiVDxzP8`iWlG&^uynMKgrP_%I_rP5A`t-Js_R# znK#K}i8=d@%bHK(rL!BJeUPhpmp$`gxF9}^!~@i&oou^Jy#f5USx{K`@9_)I{sBC$ ziSUnGX1@mf|9ZQst5GKO=C$}rm&PRWZLg?qro5o~Y-PJRe(8d_#vA-VpLJTgmY zaI~emnQ-5nlb5FN&1B490gsF`{J#hP@FmBpdttA1#Rt^OloxTt(HciNmj0}z@Xzuc z*fW|2p-{#~K*ZSUlFnt%8HTs$BhmxF)hmB9ZtqxuC`gl%|y9162T9%yXQ0sXA8 zD*V$HP>=mU-j8}q-|VtI_C`*BPosgKq`&u+c-5j~nOC-MsCTKJo>K>F@RMJ2mrv=( zbJzUkmwStrtSP=(L;YVvH?2ANfPVF*bV8LEB@YMRlnHn+ENBKkZc@e=C9Lel^_AeB zdLZ~E-X|T8--id_H{l<*Hj@tEG+Ob{?-vM(pn1SAvtBQ8Nw>p*!gBu#gDwyc8ZrRr zI%B{gVGMZ*{4{+~4$JMV@LLc^IB@L7ldkYicvg!C;h_0<;NT$c!S`$CR@hr(;6(UL z&odl^J@TZy%N?|Z-+?2KF(gZw93a=F2M)9@x#fFiJWdPm2}jtQYwMl1^Z+mcc10TGjdXaeG=jWn}@BnoT@&fE5LRnCJ&}@G9 zCwSl&$WCwBCqQ~5`9(a};(g{9;Z>a1liBxD@Bhh zg9qTdarL?AKF8-Uj`9DFeLsbJM?WupHsBuErEb%`t?_|vb2=*)|JnSvW#PeB13w}> zYh6yKI`~%6(s6-q7yc&`{IGa|Mt4`$#g{YrRcN~K*Yhj7Klpj@&wBl`%YN$7+vu58 zd_kUX#V~(XMi1EHT!%V6?xU{I5c+XvJY(ME zZrm9jto|_B&2RLyA0^{6vL6=z(&qw?Uyh%wzW9R`dpWs0*kk_iW%rR+ogG`t&=Z%# zN5l(tf6ZP7o{RjZyG*)wlrz77h5Mg?f7)~AIXEEBPG$RB@KuHXtd1S%zQ*Hxz-1m7 z7=XM_?=SeD2>-2CryUO6q3Q#Q~-eSs@|_CujAfj?pXkYV1?fNX;~ z(Dj2y+7{B91?Qx{+a5b?WHk?-)$i>O%q{YZ-H2s5=e6WkR2*Q;E%QaM*DDOiy1#+n z_t_sV9{7Vcab6hM!8!^4eBci#Kg>PfDBeO(pfB)~=!!{nPCT$N9*+~{2RfY%@P7lH zb?TTmIiuk;hX#Qw(S6ZC>lt|~7;0pyc-VN$>YSmHo<06t({Ce;nrTFXC~f1pmF zd_VaBl}jo;fF5z|Z^PSr_Lt@tozCpk{4%~lT|zu?4jDfd&KZ>^(vMT!cW}%wWd2Qf zj^8)@t6dsWsMo)GJLPrF$Gg^$eHB{c@4~D2zi4k%dAovi&e(%@h7I_4 z+gbJ;-?Ujw!8@aozmpC~^}6E--Xs49AEZ|KfBI&;>VGuIh*zMmm4q`OobUP_yHiI8 z;PrRlTWo&glt7g6$oe>0-I7n&{f_8W{C*=|HJ5)*Jegd!A2B;E+K=q}Oe>%HkKFt9 zzgpc3ANh~)XI*#Mf3(6nefFCBC{tfKJW%zAq6Nj1NK=~DDJ@I8vFJpNibEa1PP<5YN7zEgN7tTg#8b8E=D49P9~1&XRnz`yi| zelLHS+%~t6n^|%@;_q44XJBsEve6(6+<<9RhY!%1D>?J4n~X1b;1lS;Bv<1Hk%Ha_tQX+@+>CLq`dy2H1ATn24VZrm z{?8S?@g$-HgbV2b(gfuH!mCqoAl!=|Jbqt&de}GUbL?9DKZmTZoxdI5eDlqus+Ujy z&2A-a#h2iJi%!K8t2mvXT(~6wPOyY)g_VEje){X~dh7dsUv_Zv^p6f5eZu^kKtDYF z@>5yb@oL1~^vkfm1@ZTEbo+&PJ^A!>)@>!MlLPM?;Wv73a%@?qY5u9Z#Bf|V*2`F1 zYt-GP96oSHc8%+-_yHW-PvHlMBFBzy_e{=wTZZ9^1NZp1(%rQ?xTU%*a>?Z6;~E*d z`mVW4*{>7tc;ViAa821(dLDEWh=Fg0<08k;cmIw)KwhuoU>*FxI%0qF`2CVVTDbS* z>yv)iCfsf0)cvacw(n|w&j|G&c9>Sv5&r47s3+3<8^o2&=bz5M?wj$ZgDoNPE4hA^k@!RLGve=rCKj*Xh-ziI196L35ru1szxw~$TC z{1%AkMqcOTbuzA*_elPtGiyiksvU^l!2_KM;|Ko5O?!)-FN-Z5vyS$}!UOufWxW;f z?{oM-^E2~mJ>`k)ue#4l_F;$@7$@U+!CgQOj6M5MqL*ft{h!biF~4B6?{iN)K>cED z&;?!YpP|o&by#NVx0h}S=L43!7RRI&e8g6|1KuFdRZ^cj$8}YFFe(rR;t$5T@DKgJ zU*VnrO?7?x^=BTQm=A}eK;Iwh-p)VL~sZh#Jd z9l6!>ST55vdd@aM&`%U&ovYN7dTW8{!0Rq z$ohHEa1ky!*3Icv>*y@>y{xOFbxyq2*Jv#!cE@TxjfTVj5^sZh*C(u4arfQbs_uYg z-QI)bzPU>`s5ke+9p!5R_?HX-*MzIHUe1+}E+NnFwkOO(lAj;*pRnz=c|557xLquk zT?6is0r-2<|M8hdYVRf*#*IMTkGw;}><8xe9AvSd)5k}Dp8OHQz@tlnOWogytdrSp zhpWkD@`=lw{V<24KKo+kAHn-;7Q9nVG7cTUX{?C{8jVI7-uLe>4_Vrkm`$t*orA0XOhjjp}{NQS%ECcm~Zfku#NB39pB=~~|GU1M7tqO|#4m14n}c2mhSX$YF-b;AA@d3j80o0Z@dm+C0~Qjv+5_>X@&@FzI>C zU*J5j^drIJJQvz?#!hhpaFwNRaf5i_!w!LA{z;;~LMJ}xF!0TX{z8Xg9@v+X@qX%9 z=edKwvh4f7*UsPp`U}tx@ByFSGZ*4{Xkwx|8}Y%!u>U0aarUJm{|*ko`}uyK`vm@l zi-dW4{M|}r`E^2`ftSfMU}>-t56sI(Dt$07(OuY4@uL;IJM(^v6r7(^{3pCuc{}QU zxT_lTd)}BR&ISKGPM3iHs$R=J8=U?E9q@JrfD-h7#!pVXuJr&D;`oD%aZW!>tya$x z`d`@RtxUiN^_iX{Z>D`uJosRJo0Gun_`lN77hC1AiMtu@S>CswBVP);lQZvqab)2G z@t%&EUbnR17`Ybgr~VS{F*AQDe8Ab-h%M38*h_84IQ-Oqiahe+bN4A9*9$w?XZ^x6 zuYOS0j0gAA!9m@F_jx}x*!u(4iT3yHef&Yp@0;)zY^qr0Zh<)Sx|zUJY$yM})LSts62_Hmov z80viZ_4S-QKf_}Z!2gIq$J6IJBW^IvfBDsVtCbV?_ZzEq3;ubI#t{clKbk2HfL43L zzv?j&{PQ(6^XvG&;+uHc{5r$K$7}I&o%y5TX1tb`^gn`s!UIs@=m$_7kPMn@Kd*2? zKlohuZ=*{iet%4U47?w6b*8e3_p${I#euqDF(IA>|G=iIE3!SF^6_+8u`e3<#}Zxm z1N`nJpvR$sy15dS_!y|KbpT;<&Cu;sj^N zYYLyjKm6YF%x4(k2Ln7nnh*T@8$5RBsB7@?9J{N$TsYzc#znMO6Z(qC$6w7q)HqG( zD*`WB@=5%Fada9#a36Hg0m47u=PmocaGS;n$1MtZ;sNRfKDiLV*MxmyBkRedBY0i7 ztSpTz(hI^-f?g<6;)!1-zj#*EjQvIO3*KInZMA3U3HtWAVUfPQ>2UC4;)XZ$`2pKn z%&?Am{)O@9-T4K6L$=X)eyr!J`F+G$6ZwDq+(iDrUM}Yr{4bdwh5siH$iTZopFBUH zf2&SBY_^jt6p%;Q>qVOVFyR%=LzJzNkFfN`)U$f#DqY;K3;(2-N`rqS0L11y?Ngo$ zetF4*v#f(595`@KJ#Hra!x!M+eMRedD({f^S4k$U@*e2#w@?$0TN#fSbrdB2I}nA0ik!{k0Pd?P^z0IOPl zKi(lbt7QTRgW%2j$FL6En>!mC@q$kT`xGnrEA7Ih_s@r)KzxsU*eji=6 zn(v$aB?35Myuk;|m$A&xFEd9S9k<_!;Q#g4+h=p;yOsSkb(izY12+El;2yrODes4$ zF#aPQlL!0AeWZMv`E_`oX@{x#wdug?#{4>dG-1ox9(n-O_prO94Oq|6@3J04-@yaOe`B#rctH5~{5a}| zq+e#}fKTG->6;0C1gs0(5&qF@i^zJ;q7~0N@1$!Y_~-aJ{#6$j4}8Y}%Haj}Q(uY? zls`l#yi?UTD_gKnd_vu!FxX#?Zo~WRCr=+>L4NU-gquiT9Q@Ze+wsfv=#Nhm`eSNYqjc28l;85`=dxd05q>D& zl(7f}dJsPu3+=Ng9zcfma(ICCx!{4EynL~h!v|G7fMuRvC$KISI_@B{KHhLt7Q(yg zrtx!g_4^6_f5%+Svb1LQ0d zpSXwleQ0Ht-%svOOXsk6DZ8W=J`fKicVj_ylYD_;o^GkUVV`kXv()vFiM<3p^YlUT zyq*969oMD&O6a?O2B3t0VArtw$v(Gb)$iMV^y(iaqNQb!{X==Tmrb5y@QSlt_(uHjN`H5e@?IC zu;6y-hy$SMnI|7mD89qe=eusn3y_{7FKG72cSTEoUcJHo@$~Pgf8A5hhi?XP&+lby zkYcFwF;C^h+=@31`>ufcFB+_a0}p(`yn>~L2l&2ej{k>lYdP`1@xA{@@cT@gT1mkD z96mNr@_WdJ!hnC$ChKt+hHnAC01r_1VqSAjo{;tEb$#Gb*F}2(ae&|NfzyBvP(H(f ze`u!fcrL0}xqYkkiVH_v(Ba1t2eb+IbMgVgwZWnT+VPV4koJ$3`7nHd+!+US0QXTk zfMf6q52*ev+>g+s9A8-8PFMK-1^Q~d`@mLpM#sKTONOnlEV_h!W2<%g*e~*AkQ)Dv z{Ux;JD?V7z-zr`>LXXH6%twPaI=HPI{ZMjSWM{LU&*1^Z8{{3%^Lf2Uoxjtb^a6N? z##!gmpI3Zf$^YZGY6#@R~og9lqpk z2L}98Ca5{^FMmfIeJ88e`{-%vX84giu~UGCFUhps63;(Rk z5%!D|7rcFyG+ced$6&zHHov zSIFy6Cf|3_%ZH5Tj&Od04s^%(&1c{l9bL?pEl>aAtle#amwl~c>gW@KPJ79o-({Q( zbbTxR(bQ6pBX2+V@B#DLr(w_S)f%gVuxGwtc>1uHd_kN~-5-m*iwDUqbnqm2L|fL zPRIv9Uy}%5aa|i8ynEJ(7XBG;nQSjQt#`WHZ8I>ye;XnO|2Nq0Xg$A?d@=*i3HT@f z7tsM9b~~L7>V)7P9fuBpE;ghC_@2VE|H~TJC0pT{*O9HMhbO2vINoIr0qX`|&uiZ*CVl@yzSfbvVtBJK_)V`xD#;c2j-Q3G;6}8~KFank~|) zE9QFmU7vYl;mhzl5|7rKyz_tSVc$j^I@`{`Iga0~Vf~Irv~X z=K5uyZ5d0y9_u;@@BJnG?T9PljD0SMGng*|{=?@h3`BTp2RLf|&YdX}4U_%AIv*u| z-|WL*wE#}wg@z$tPQ9is+?82Yx9DWzznY^zkL#)lpWJ5?$=lKYP!BiFXJZ>BD0e9CT}hG(DkEdFtr{LJx16+u?wh zPa^p}+Cz-F7Y5{6*8*`qZK{O_=gm3u#2)*{;s@~mm^8;gJWw#ZRQPYt*tdRYhrm(! zfWawgf&|NY49six$^%q7K>MeH_x)4#>0!&;r_*MAwME4)tfCj+-SLA=oggUwOGCXhxTsQoYyYoGPw?_{!o?iCgf83+ccQ?={ zQ)UVEw`*G84*a7Z(Ah~}c@Kv!z+aI+3w@p=xc7IZJHYqdli|T0w$JT%<}mct&!6x* zX^ByCoE+jGvgFttccOFgp*d#R<+*tj?sq!W*T8?9{3ibY{?n)ERd5e&-46Ht-8NyP zyC2X6qq*$%WYN|4Bk!64ozYu-vle!UJot~tR^yI!JE55ZeL|h#AWP`$nUB&HaL;-@ z*@~0j2hYMkW#U>qOb(>$?E!UiejGZSe#g31zO377Y5ddw(~kH-$A9uK%xAd$75iE8 z8QUk++-Lc3#Ot!ee_OIV?;`ok{ziSv;)`mXAoyd0M54dxZvOLw<$4bOrvxSmJoDU| z1J@h3BXRr5$$W0``^=xCP8JyVJ@61&x3k|5;DPPSW)A;e%&3c!zobopKIMFu`*0#$ zI9D9y_({!QwB*mlFJ9}Dj;KfIctqX>%kyJBpm2kH0cT;*0py#|1?-zJ&527`=8yHq z`~iO7JL(4AXVk^WD3W1XR(7jD3andX%4SpeE@^c4e+Y!Bqh){xR_0d(26Zk-R05e=F@k^Y8{$?Je>KYUB9e#f~0awHYlp7}S-~Mz8p5TEtf5`PS z?}7N7>z$BJe9i;2(}a8gv|`|aOTtyGa7~;Bu2F|3U?=d3j`jDIEsGlOyVPvbw|Xgl zFr&UJ{V@N2HWB_k!x~n(fJ~vj=&>{ACHM>4?@sn)u=-M9z7ke$kcWtE#V7E|?6 z{HIy{#fT129AU_>Wy%NNjl2$Tptl*vFX!lO9zXiq-PJmD4qPsu(a*rK=975zJkP5a zu_wxRfP4G`NAYg0Rx7~$VLfC2TJRreu$BKu<`|CdYkrsVe=Q!g@&NxGeMw&MF5%xI zfOpI?z%zP#0Qao-xGvmdyAeO{#C0sqOo7UF4-{)ayg^8?mp>^S;l@aNRYEXz6bcZ_%Cj|_f~IQ<}^e-UQu34JjO zh{1m0KO^rn^Iy2nn(vMZ+4r?hFIITA@I;41miZ#wRKI7W?%%>8Io1Cgjhg%|I$)NA zH|A}!u3tj`ZKEOF_lGB(A9$b4mJ!^a@_m8%N5R_Q<=^>*aId;$&U(bIH(SWoQsQ;+ zFzdFSN*~u>dg+V<_dj62LRp5rQ) zY8m-MDikZ|1IPU_q+WEN$S0Pbb;`E3827~YwR$~u`1@svo__2e8&{sVKlsOtqts#* zKiNOH$I7?4KiDDVjfsT^*3knAc~0JE4D+8gjIf8&PZ9i23WOo?57SX65gtHiqlc&$ z@*mv~`Ax_5cf=?33;c=1Oinx?yvq_7s&5EB@LsmL_8>J^v3x*epBLiSrCwiSd|=rp zE){=#&_y_y=kpPy2QEa9{{qLjt0V9Zu8W#%i4K*;>lopFMnjNrKbds9vBLlJ<2j8J ziYqD}BJSuC7(98s^B#(v9uP|vbPPM;t9#IG9q^sn*Y40S$+*D!o# zwvmAc;j8#1X|-DXC$cuh){40k|7nxFQ2Za}&e}KR=xJ z;sNS)&v}3kOwj$fouvWyT5nzczd2uy%%ga}>L=w`{mP!dUowA4ejjh=1Gw+qCXY=# z;bQ!Aq+chF&$k1(*Lpx6+oBLJ{6mNJ@D<+iyz^l{6aFc~ za=u==eOCGX5q-AI?*VUfPhEnq&vLFu&)>pp@MDGh1;RH0_oPLdjQ<<(p%MOR3+C8f z?eIQFzKnEQ279m`X}>1i91PK`=!t56D!kZTmNkd}Ri4@%$3y&5FW{Gjvq)d^8UrAq zlGtTpw#U+D2!rm-EP=Z_ie%aqz!Lp7a&x>R3gLvTsG;2ir(dSs9*^@&=F*t_sJY~~;OkRMAAh~xXe9Lc)YY$A;h(q){F5&pfcLMO zj8oxWx6d5Kf8wyHEcnCzk1S1jJ-Ner>@$lFplmR-;2zk{0ybk{f&U|8W^2jAa70~b zoKiG4%`nAT48AJk%p&!mE1d>wLAGea~l>hId!g9tF`WK`&;;}H~p>f1^uYr ziwEQ{v8(7b@J}86bZp3%mwcWHj=medrf!Khm|t+3DBt%M{WIkIkO8dg<5`bq zM&91<4hb{@`ky|7iLOUHv!74^w@ zT&v5v0p&X{+-D8^33fbY9D{4z&reetMdi-+l0i=8Za!F>-<3#f#R2Mz$(x)W+(+;gZf?b|NAs(PTXoLH7 zgFez3*L_udZ<${Joq==viRvG+^ktRsCHt{*j9o4}-JJKa{=rmyK>JapADZ38M90*d zUPc$t?@AyKFYtNrLi~VuG39mQ3HXY*Vfn0I!@>hF7Oyj3xQN6ROJFJd*T7GZ?znbs z1pYsrF}}e6rwsd!{nUI4?$4P|!<7y{o<4r)ASU$nW(agcoqs+bR`?%GnKuspaa)-z zb=uS%q4((%GvJ*(82Hcc81`pNIOedHA0S7pTvC?H-aREM)12OXJt!>%lNHvVaz)|1g`+nr^*?TY1aOdv%+k^vu z6c2#=RCZ3-mD3M1osSv`Isx6WV(5!Ixi(l0=m^q>-y`gV_JRv-TRk}*Npm;;LZ?oRG?DV_Ny7-_uoiBCV zXZ>sJC)`H8pMBBLG4vat>s&&;;XwhfV2_G~{h^Z&!Ff%;hyJU&1mmM7oiQospb_pN z3`hSA_bbh*qgQz<`s+^S{grq<|5W`Wk@-5LeaDvhI_ShKm;bN9995q$`V{|979u$$>yWQy+ z>h?2qCUys1-Z$j+D9f09SL^XN8jOF{@8N$7?nk8u|MJ)J4-EG#Vchh&5b&>ZU)__3 z?(=%Uk0A@vDBLSPco6vOvP{5#h1Unk1M)33_rTxthl=g9WFTsU}O34d6Q zoB#IR?Hr4~tLOL3y)lhN5&Zyv)E#+p>JNSC4d{F$XFNys8G!!+{YK_?WLe+pec>K|;&Pq`s{XlM zNuNGH?v+?@KWTG+_JP4E_h;YviRy%hAx`LnqTdl74e*kuV9LLTq)W%1=goYmv1ffW z{@w@rhUo7<@8JRT#LQo{=zyXJA6%vEw!wY6+Fd^V4j#SAW3A>JkndDI;VNY#^&8)q z^8odGc*5!Ziuc4LU3fs2zW9axM0UC=%XFNICxBhWzwg4|#HXK<=s%74dmiJ4{Qa!m zUYEa*tREGacSHU&HO$9R|AOBR`1$3?U$@r@15WMr{5tVXG^~SxJ|D)f63vS*LHqUy z;F%(RRVa@S4`@BY1RX%%&z@|twP|v2e=<08#$rnZLk`}-@5CS3D*qSp{~1Cqq3;$s z-LMbMeQ=PuhxtR^Pkzq92h^RwH8j2y{u$mg;otKk%jxvZ@59%~+!^@4-y=^I$>;Gk zv#5L?LWd*p-z#L%3*_};pZ#Bo*!O+v#ieY;=UA56eJR2Nxa|ye06$D-hWb6z@M~s2 z*&Q=)wetJ)@5rAK&PvDblef6WxZP*CvVN8){%8pQ$MU-l-KmW?6sOKe=mqlEv{U^s z630Hcon;2x4_4D!{=huY`z?NdrIx1tfqlR*FZ}~|&v{=9Sn9|Vf6v{UjmnATcsgaB zKP>NS=j z-7XCdt|R=XJhTb24hhee!aM8Sty=gsB`~n?tziKi`FF=c;`z`Fz2*mDiT|cL zhMtz#!GuNz;a+}FmURr4;C~<5;=JM^GIiB+KBQ~r;nDwJH#h|U%#(iJM_BQ|gn)k6 zQzs;lhX;m@8o0Dqm4~z7x`yKuKa!U$b)V2({mSCcWaq@|y5IC+a$n(%8TS$X(Bp?k zK3VTDLkZiYpeze5B)ND3fuCSU=t^*eX89@-gK7;}N%Y)zXKz#|8kh+W*Ka?kDaO{_#6K z;a_=@_&?1fV0T;iFYsfL--A=>fcxNm62QHOpd)cT!}_V`n6M4M?(f3;;NSNNTe|_g z*Bhg!*qvUncu*bJYBk}XpSi*R_c>AUze8D}Z}4A=uhFx+EW^3#I4&tvGH&;;4g1EU zXB*%*;vcZ7{1tjv_-SK>#y@fQ@QX$M#68fuKjujeUr?u^{#DhB!2^%|6n{DFFn~19 z73U_5^8(^dhU$lhAJxZ;`^WAxeUUx@Po8o#ukb&asD8K0_L=l6yBqWu)fm^RgUfOJFXG-Y6rwK{^&3>^`F}#K9vt=DEeD+)=mB{rWL@AP+E@&fgX8i)gLx-$?mo zaIg8+vc#A5_$WMDVS}sid-IsO!G!zzD1CsQdqn;Y$8X?Q=;;(5P`p0L!8`0m{m>4~ z3j1YX-`ZeZEap3~4#C901KfV*Kf!?dffu1Q^gdUN+zQk~%W~e7oy@w;h^2w85x~Em zWB3dHBj?9(Q{52$WL`2n(LQBg0C)htB#)wfP}^+>o}p1MyViYHpd0^EM--ouALqWw z&v2h_Alp}D3v_?vb<%n(W)D3900KO+zQJ?9;pjUo9K7&};!%!?8DKa2cpTlSw+AGi73U&kG^Jh(sAJS*_c<67p-YtedGj@MUc@Nv)a&+GPj z1`rZ-0LzBd4gLK*$9__nqS0Xf29|iPpVRjb6>edO)>KKKXyzL!i)(?~K!5CNnWpA(IA$D| zjML*R<36BI#{kk}aYs|}0RFWT9-9Z~vbKGafPdEa0LRetdcblU%lN=QpuZ0r9!y{S zfieGAcrb_P!xR5Nve080{yxW6{{M-2vfkM^HBbEGjuO)3!%lIu(jSy}B0MnAI7^62 z&|%WIhv)!GCi;*XNLrp6YWJ3N-Y2#pVijpRzi2QNN!y$^*-N8))Ab@_#H0R>l7-EI<(+ zx#L>D|GoQtc%=UL@O$@r(|fS=zmJc)Bzn!`@CZLcUVwUDdjjswaFZ8uIvhCf1$aLo z9$h}S#V7~=E)WO7f55#PkEQpC1Hr%6Pt3{Jpwr3!ldmm{YJD`^3iTW25AqYy|NX39 z<9mrmCX?`p`I4Q^La)Qeiu1Uup76+wr=t!-4BD#4g+`Pn%bGXTCVPU-5ip{plZba4-Fx zF!O(eHO%*8e(*eDeh>Y9qZ~fKEv#7je((nkN4<}9Lt()`@x;<$%Vn$S=m&I;dGpMp z?-dXsglO;9qfy1OK?|I(XR!r$@5lJNW^4a-{K5QYb~AK31Mk_$SXg zc3AoAfK_~8o`lD%KO`UaBzdCvz=Gp3MCQRixLWZ~;)6DNBVy^xti>lr%NUvXBs^hx z0`bHX(wj5)B!7b18Ry_%JfqK*-{*TCgM0D7km1|0!~vu=+QL8gi@qPfAIFSiEYk?q zgiG4Yh-2Mu_5IigUuwLf6aOF2cr7?@jaT9$@E>kaU!g8e-+=lm!F#98{e%zXR)v4o zXCp5Xz*>A8s)*l&DYzX!KI=l7gnmH$JI*Anng-yCrh>mpF5jC>y-*VXrux0r(eW8x6_ z1U=R6k|*@6o78GK^%LPxJ=aZ~-_w1itwsHWyVL`{S6sz@XWUQLO~Y^OQ8z+)B&=6L zxZF?Zk7^LF8rCtHQ#s;#SQl~m%)kTH{M6leqs(e6j_0r>-;={1^xYJO=adl-8uHaV z&r`RP>_i5H*t$@=z_U@m^{Sa9C+dY^ub*DfBeNz{+{|!N!&n6N<4JYwPw~GMFDyCsJK)9#`gK?8FEP)6cxeVMcFc`pv1}RD_fxK) z`o8?JRlZ;OG@c*Z9@GQl7g^T-3;tP0%d@UFby4!w&;z(P==?0j|2_uqs~$WOHm^kV zxz_Va{v|#}-kb=x(xbw$?gRLLVjTMGU&52F@=5;^pL7@S0JfUfP~o2we-hw{tgpYr zy`uxn6W;X}_(yNdW_-_($Gq-|d>4yZ8~iiw$KV5h#yE)Jup_=i?|0rDk6ne+{z&7r zR-pH}&I$XZ+FkAd{Z8P2w?SYK7_X#F&;fWN3JJnLwA~E+{h~`>xbW}zLI0kRpWyTM z+19n;_&({xK)k^|(W}A<^B<(2k6Y(A;ZJwW{Ty3x&wU(O{6BK1<{st8$dkhU-W@BS zFFqhWZu}#MO^+OUTx)s~=Ma2WP^yTB6 z`_iI*mB16IC8PI21O7Qb81)MdIB%Y7PG6F2Jnn34oE7frdn7N&H`a3o$;V} zO8j=nT_^$;nYk1XKu_>1c@^?z-1ps+`DhWbe0&+`hax09^PlZoIe)Klnee=(0F7Y n;hV-7aDAP}zDS literal 0 HcmV?d00001 diff --git a/Templates/Full/game/art/environment/FogMod_light.dds b/Templates/Full/game/art/environment/FogMod_light.dds new file mode 100644 index 0000000000000000000000000000000000000000..d726795fa1de24d57dc54259c7c57f984e3d6704 GIT binary patch literal 131200 zcmbrn&yFKUwx{VgFu(}ZrXRs)RswS&%p0(Q`vxNRfA!+C?@HP(%X_dDJSx6X@((1XPzokn?@V%t(*ORMnlC0Hj|YbNg@SckI|7 zcmCr){_pkwRaMph{2xB6sx$uKf9Zez1FUK!lj73v**W1g7hlfXTvstgIo9*S{aM*O$)w?Bs)lGM~0=w(_ z-Lmid>c;TRp$3U}#Ohs_^D}&UZaklx5BVR=XG}f7Yl+IAuC_J_4dy1lsG zY&Ig}b7p+1^&r0guwIMnHSGtjpE#l&qV=insgLcrt8NeT`MkcbZqKQ(NdBAZz815* z@9W#@c0Qj@Bi{M>c}05{{E0jMx~{u6{x;!xkrQsHPwJ-=RyV0$)y;mtUz(5d5D)u4 z)jus4ZB@Uk-mTV$M{zuU@uk@ECmQd$ z9x5-F>veTgC;cSeXmoZqc~`%?y1F_SN8{BS@TZFOBGA|GCO^>~JLTPO{~^hT!{n#> zr+&AeiwDL_oPwnOiEe5G;h7lq0UbwWhH;az7wun>Es-E=Yj;PrSsf@i^h_!|6& zuhq?Zy@FSv&#%zm?(p-)g*d%9KkuIK{_%Xs{~h|I9hg&Y2QN1nd+bKyHTn#{@A`fz zt{}8%cV#>i&#=*^zq)z|{zv< z73l-p7J0z`J>`WR=nW@X^iwLo@V(f9B%7c5E3Q`KvG~e4hxC-5aoHr9kW}72mqY&D zHRek_pdNRvh?-7^Ja14qQ9k-$yWqWg z5&Q??efJi+jwCGrjec-%Glq z3f>=TmzXng}wbop++1uX|Pn~L}=h5zgN&vm3TJk{%jrmx^X^@r~renRH`dbN`0#2+VQ zzCsQ?0Qb9HUxC)Ay6w8QA)nysvK2Ag!OsKZrK}$1=i`j>xMN;7es^F#5TkzdOUc*j z8U75Te+j?d=X{+fl&2UFk#3ly7uPR$ZL{sL17z4He3b9jSHzA7nt!narlTJp#Do0^ zt}wXZ<>Ir?K2sl}o}m4qEWgyV%KC`-VF}4Nw3R6NX+A3!s& zlvgXt12F^Zgo*$915bEwhrxT?(U|usX5Phozk%=A1OB?q{7V(2~Xa~!IV@!Dy-x@CS}p#Q8J&T*^)sd(V|H0;NSXtDml&SiY~ zM1Gyw5q`adw~;UP5qs<9c(7pdxqgK9*M4rrv>v*iP7nAC@*967cs`vM-WN3d;cNUg z`F{xBU#~3hrn|Pkz{>*@jYzTh1!-PUzm&yMM(B9dyP{7;zeJ{8^pAA?F8tH5mxhzR zyT(2^&SJ>PKeasVS>T-X>g`qXFGeGHi(FMB`~i84o?-{o8|D4W`84x*k#SUb9rl2X zjQ2o8#refN>;dcHlCCj6%Y~)Lx`O#W)(QCe-P@@5fd31o4S31=K)!F^E?)<4<$s&` zAN)psVh@}zB7R2oRo*-N&yoBuzyJRG2NAtE1K+Yf0Bt`O;~oCkIE{_?LamH|CS{js1q?_lF;FW_j>|X(aUckqKYEMf{A~hXW3c zJdXZBrn$lQPh)xBX)ku#5A#ExJDVjoO%rJP`mX-3qTvHPQ^p&LdH(?gm;X%r!FTLH z`2EJ0-ve9>A$OTK1aO$J-gz1 z!TpA^Zg`50gY~JB9l#&hUSk&Qhww|b*)Av>PdvZK$Ui!Ge|6>l(f0bq3+y;(|2poN z$qjh9{Fd=eO&tTp^&i|MA8%+lb+?-?E;n+K%+l^qT?y-|AoMSG3W-l%Mr6U)yWG74=jWaSKLZ*pY(Rxp(+^ z!T*b|zy7*rd|2*>T@JtUI9}TKFFs>jj{ax#4|+y7qDR#Y(%Xfwcp4VX?Cg2qnEVAkJtIUsJ>;QI+jH*%} z(w|S6cd{KYKgRz-yuxr*x3&9*^z&2x6aP3qksq@8cbWHz|BqMM4*Xo~LBjdGgYU~% z*i(?{BzS+G=KX8T{n!rt19kxYI_~>xpY>;oosMx! zb|3vZ`Ty!$_=)nKKlvZ$1n4b#8oWnu!XIc`@<(j}iYPJlcah+<5&1F!>27 zemozWe*XjI$$JdT7UY=X$aiJOsk&!B5kDh%&-qAq7kq<CNYG_%USbEzb)w zJ%>zwCH%_g*gx#UbN-ics2LCTcN70(T=cioc%9Y<-O(S2{lnnD(;a*}&imh|{om{G z>x%vV8+JhdEZc!i#$*>Zj2FB`-`$@=Z`3#TNBBpCk6-_D;ro_&?z>WtBk%3!-;=l4 ziNkL_b|L(am3Tf+e5*K^fG6nvNPKHMkYZgRk38?`-fo@e&*b@mb%3~JgCKZ+cnJGJ z_hVPKZ}$v*M>^Lf^6EgpGOM2WZ#^joh;r{TatshM!}fAZyIB5(Jz#yDaXSB3>M0Mc zFZ;IXfeaUTjX%?hyO%GgMQ@TmQ9pPe^~p$h@cTJ-@Xz(N81au-?7@luJcsAoyCwd* z7aeo_mpVAYbWe(3nCYJg3r{{&A?5p#j8t~Qh)qS1$2;X+gb#qt$+3><^@Sc6< zCgJN*!ZZE%d+juMyI6ejMV<4RfGnGX_vWLV@|z5CoZ~M{PkX|jaGWdC|HAnq{3cy1 zx-SxZXWz5BKk;4v^2C4nzU;GKfZYw*ba_3H&~e%v9`(!MUz|7SA2=^x&oi=rI929+ z$@RYW-SuDcD-ymM%3}&fKI#kf4}YBC%y%(8@6h{Z^jaQcU&i8*--u7-lpcR%xx}8F z;^lDC?e_9qc{_N{G1tNPK%jO~{;c7%xX13uBWfM~GyS_DJk9H22RQdk_Mplb^KImJ z=LE7gmA!c@O#ujjhfi{S{A=OMdqV>k=1gzSTb97uiXFXT1; zgD5|$ci2BRvVI{BVeK0sGDPqV_lS7w0uBl&YH)K0wZa`tT!}4j%Ov9}oD8 zV5C3s{yKOj|Jfi3{*!T_=Q_-{??2GKyU=gu?}7t9Lx{rX!h6!)S*}R;g#Bo&H|bf| zfF*s(k9Zy33cn*f*8Abl!Y|yp%nCZuw z{1)+ia!a;HzVkfzn~{7cNB+A%YdZZQ(fP6hW1khgIR854dHliPzvrVo5BsVeU>SKK z20!7s<;rv5h>8E}P2qpRD%*ov{&SF_J#gF^=c64!`nZmP3y4X3zq z!gi4`od;Nt!guF!+^i$7GhfHu^_F@6;Y!SWy)d-cZgR-EZoZIfjUE^MB5J z_Ag`KaSN~LuDxixS`d52yx9gn62^L4IsEC!FZj-Bp`zC5QM)LVZ~89!(&Qf%0faNKe8Qw=V_jR z|M)w<$$R%t<)`U_mzE1J8E))A;cdZf=RRq72Wpq|yifc)jtd?{{Rfe2F~M)#%EEIo z`~{J23BG#%AaAc8IVT259?0`o!Dq%#gvTQgo-V>3knK30=X~tmN#gyLNHf+MdvX2c zmtTUnW5#=u`L0YpTG4%ck!d0L9r-2x zF9;7iApavjkYxb&SNp;FX6ApDG5GJeFuvi>g6<puN`jH<9Tp?40#CzW%ysdqukONxtf*5l6O zwnJOXqgnK8clnP~VJup4|jrlDw?8V&!3wFa->LgvT-8iTe5=`;6{8C_7#v^VqJ1R}5Fb1)X=`pLQVD z-6RVcwS|wL;D3HzRV7_u%-7^|+$VIMD?c|;|1>W@w-3K3n~(kObN7eEY0gJKBBe{~ z4(9>-GwfhTJgTQZ7xx8E{Ktb}{0P6cU&Zhv7>6hao|EliXa@@a>4rFGGhX6APj`~*DzW&g<^Sp5}YUJIS8Ertq*6-fw~b`f=4K z?7-Z0A>&*zQHs{*BfQOge}>w9vJHJW|8I$}BoDuRPk|kJ6Mi6w|MH;B@X6EAr?yLW zLH?T$`f{y(5sS=q#%YN!YWL+i{#x+gervN{8*Vz0?e^fmvV3-2ws-Be$cXS$rWAxo4QdcL_JEVYqfpnR`fKpSkzwdjr?Fb1~0z|0(>y zIi}{}Y4sZc)#qg{1xqPt$)jjur;MY_B zQy=(#_3*e6*G_bx>m2#Zb**zT-P>b7o`RL}U&n!a{NyA@IP+tqv)=FyyK(gx$oZl1 z3@@0T!!zPNJZ!?h*M2B_Z&hTwAo4L^<&tl~C4PnBBwG&f$bYuSV*YphK3*3jJ5j-V zmOI$J8h=0S2S)zb0rm;b^`xqzwA841n=lt~v|D(Lj`{D%$Y?rts~x_ju6*c+I{RdPMki8?xyV&ogc^`d&!z zUwKXfd2jUwcu9XN$9yL0SBXS-p1)+9D)FCwYZDI_&-h=liimS`(Qy;ybB>?*&p~&x z1M*B$4vQ7LC?B0&E%)Dgy6aH5>+~;L|C$j$P6ORv5 z`Yqa7&~Wv0s~rgJE;$wpdx6;yQ~wc<>FmsS_MhSK=t@lYvAgRBCYb7`i}lzLIfjh) zSb$iUMfyDMj=$%7;?ng`@SgEuet&#S>wd?fgo|;Hk>?Q(x~|Op51!**ujM<(Ys`c2 zog}glRf6fG}%sM6e0Uu-i=O*-`W*v`u_2Qh3W|4mIy__4a5&uy=pc&Z?Jmo)T z3A>NJ@b{eeTlkv7KZ(4*72*4gh40Ij{2cdf*M|Sm=6r_8`eA4XE?M@V|0n)4U&EIZ z|EVVDYHh58wFk^A;Rm3uXY#yaArX8Zy_Wa#Yb5d-td(F*vBrSh+tOvrbDm&c2i;R!!MaO;PIYY;JKmAbM zdf!hy6VET?v*QnM!4Ip1lsDkL&z0#;{D1D*Vld@7?lAY^^!J%yNe_;dtykjzRrvM! zzFzqC6?~ok!h8yvU*d1#^N06^$Mg9_KDLRMJ;f<=&7g_+>t)yr?P*Cr#$t`!Dtfrtmz)Px#-J zM{&OI`ajtLacBpq*6;Ga#FOWCZ<5(BK^|jn#ogWAf?C~RMzG)2@tk1kdBlzP1*Wkd z6nX?t_4Bt+c<+0e@*KZ3^LdD8qcP#(H@5Pgar-D<8|nA^g!u0z|C1lU{2%@Rd}ykn z9q>F&c~1T1J?n?Lh+V}GfWNG_<-PqT-xvQJGWX{bI?l%99&g*i(*^r(q<_Z$Hs*1| ztA+LeB){#^UL>A}9l-v}cgq{%nC?f;^K#-l{VV^!%V>W;u?Mh}_bP+8;qP?tmi08_ zA-^AD9|d~HcwqkKJ|{T%&b`#^7wme&z4s=vJdbep8PAk$|Lt|By$HLZEbqxS^dZ`T zUWgUEk9$=jj)=Tv{#{r7>}UsEpQZ4_K4Z2Ihu}Zigq?`|;5);>{$AIO$6wSH{2229 zo-iNBJ>7ebMMlaI58lte`TAV`TffZTjr>(FMdqvNB=fgm=5aia`*?Z2FT4*#(Q~{% zh+J#D5-msEY!X`k2;cX;=zfXis6L|SSfcx%b=ZMLo6vrl$nPA!{Lb*GcjCY6_FI+} zjp+W9Nb!4lOSW_} z|EwSC$zpN$*RJp~a2@kI(|GVX=I0atyQ+C@c;~t^kYN^~SA?@X3ZC08!ov^fK&G1y z>NoWp&i`dSa9O<~e)0qGbM*)MI3Hm7YJBd`%#$5po>Eq?3(9}hEn|}rKOpYqE!rcW zu^ZNl@P8kk_)axe^4|I7H2+sWX*a5OoXeruRpNP|`FDeJdE1?z%h$_qJtqf!9}{GK zMf*zsWOQ7-KXw|Q)A;p$O2^~9>DkU?+`8*u2@ub--LPNez59yQt>^v;5ARpr?~CyP zJGR%yf$ST1ccGubZ`&b{3S$oub}hL`8ynD{Z@n{G7XKnec)9KO3>w#vMRKRm%; zWvqt$-%!uO;|aX89h1!OS;53()(eTxCH@f6|M@Wf&*VFlwQKSnbG#FGyTd&AkA7Kh zW4Yim?+YAgcMadi(Vlc~KpAm4p?!IMGB_7V_JU%=4y1K|#rXm6oo4Tu@J3?>2v%i*pmO0=OWjXvK z_BsFQhZFCQ{BIX&{<7fU9~yql|IGV| zxLI#zrsupn5XFyh`l;ZM_hcXQKh@eK-jfdg`<{oWUT1vBc&Z2UI{u_~fqrQ+%Kzvm z{e@f1ddO6xuaO-u_{=(qbIX|jd-f;NJT0$BBgf(Bj|FeK4&Kuq;veU8=fi9V_9y;N zvL7+;EOuh1L_}s!8rW+tA{t94^l4g!87mEi{8(9dr#pl}TtDFau6j2{u5R?tFQ)PodmQU>>sff4 z#_3Sr_c-!Chkqn@c^nhEpT{_(h!s44&jL+6^4@v+w(DFkiQKd1UT)%j!8&-(Iw0xw z5|+k1_c3ZWYUX)T`u7py|JH^FKbG>H_Q$!texowoapZrp1Du;>dr-sg3mlt|c%1oP zcwL_V9+r4Vgy$RXrO0oV8Nqk=SrXr`g7^4K@0A&rwK(M;ll$4N^P_0JpW}>ndhd4< z?d5%TkYeB~4ChZin@*W!MK6*qyf&N&j8j3Z0&;p!SoD1fc}+TSlKq6j`-0@d1Zq6@ zjTzl|ud72p;CHM3=-(sreWp2j)OM6oJ;(NL+g&|;GZ&{nKRk%%yjPp!kx$I~!FTWf zDmz~e!!4(!T;Pa2PwRk$Kf`lm?xzGE9^^aGM;VXjf*;G+2O>7vE{GR6%;MMXZ{+YJ z!hh#8?Eu?{XQJ(v=d7=T?+L|g?%`H9wd;HQefaLWI3e-6sBZ->m!DN2{KR2lywxj_d;@_a29J>oI(}RO$L|8! z5ZOAul*4#NKN}C3@r`iwr0ZUM`Q?|Q?R|<(+ueQ4dzL!`z9-&Rq0hlr^fmF;ddgp> z&G~cQ8_sdvMzp_5`hvlG>|r4LpTYb2NBaP$b-**e2aof7ZGD5E^D^)A9#6!7xJvl3 z{V3sy?}hhiU-0qGI{0os`h0+`vhzDA|6gS+@>!M_Gx{sVlmDDo+;Sc;PwyE!4Dy~^ zKY<^5_7jljM69s0=k)8-adO-kPv+U`wr0G;k0^G;_qN8SFZnhQv1Yv8w=|!Z{B_+H zeq!fAg7+PKcKiy;Z@(86NVqu9h#gGdZ}}MCa~{WgT>Bq}ytluyJQCeMX^(cGjqfeB z@ZbC!5O?c8aVsG90}3|S0nf!+cx--cvI_$&;Y~c3_lNm(YJ9Q{e`1KHS57#ecF6Q| z@czpYgoo#tfmPx=6F#!$S6;JS9N#N=vwks>&xeP@RUr8lO#ENN^Wc5h1?OACt$)TZ zz?=E5N9NvDpLlwB~s*gzGQxoMX06@l}0yy&m%(c)#D>Ekx$GPx7B-SJ(&AEh9b$Rzv>tJi;-@ zmCx1R$-U?I4-X<{?S+VSIQsuX-fpO0pl0VOSa~AgC@#sek^FjY2 z-Xr^iWj?R_bbrbGR1eYmeFAUCnDg0v_ybKw>k<7l!w&S+k9M#xnD7@WSRVY9tU-*FMc zp9V?BeVT2?JfFko6rQk6@iy|D_jZ0L_CcBZ&ECi9v~wLuHTfP?;40gX*dK7+(;oR> z{DC&~SpLsRSa|;ljPtRN?Lgtb>jdme;{9g(N&au}zqJdSb<6r2e=qjoSPtojYZo@% zwevUkHRL-JmUuuruvuBaN8r&ed>4cG-0~e!@L#g@k=f5#Q)$S_j38OT(b?n za{omBv0jRGJImXVGWY)EW#(J#k@%FjvaQV;i>UpvQhx|Mt-5>J9)kXOCOzW>q zhaVT^c)p_SzISs!qaUswMUF{c1TJ4!BGY@Ho}1sy`Yf!M=k&CL`997Q;Jf{i>RS`; zFwsi(6`0pSrU#xge`ln6VF&C_dO7TOMLcEW4>59o0)jOCLO#-_PkyGS2x?(7nJwxGxV_YU5tz9 z{wnDDMFd7qc+UbtS$8aj%kRYd$&LOQb{?GT_kp|?b_hffYy7t>*83GmHMHNy{T5q26{X=E?PyNN;_dYx_=b$2LGZrx;5l?+UzHPF; zTR-I``X(>f{#{Z|@L7a*XY!AEdMa+-JU)upk0luI?}_GPIOPVPaeIQle#gb|%_fES z$9VhiB0di4FdfNPDSpZia~S1YZ~4vl+5RMcj^iShaP?amy^rz?H=mAh@nZVbOZ#t8 zCwtoG`vsKu!En~sF)rAFw#x0V=oe^$Hu*N<(o<7%)NGQ+i7*FFlu3hGN_YqH@ z@E&_0-?a;|?{`*s{`*+cC%)JD{cFo{KJLiJ^P(*>?JN5R+5zS#EaAWopw9ay?7-uL zhu1DIzw3tjo9AE(Fhe+N(XFTyaAObUdejR-*Gz2meVA2CrlOSC;>x zeCNDim3R*ykliP%;k)`9JVp@{K0J!J3qOkXw`e{h?&xxocn+^8!SgKtR_E~Q_*^?c z`Pu^vlt?!Oru#X?PRRfC{x^?O(e)Zsc)dT)>P@!IMEIzH#8$OruqP{=! z?EdkvelbB0*UQ9z%t6?JvF#>YdnfMtMI&-AbSXm1eZu4)w8STW&dm}sOp)%KiQ9No zJKf*IkXR4Zp@P4t4fkvkkBJALSF6cUo)v!Iu9Dw>l&b{=l$Tl@q_Pd9Ev3SB4om=yXw!!=Q*C=4^R0SFO^@=au2`pK5X#+nIE8m z8}Q%tLmT{epCI`I@ca7V4g2*V`|#cixR!tNoq3~m9@j1ezZtj0bH6(V-#7a6%>O^e zeVP2-u}|@SJgRP3=aVr!zj^e#Z)LuRm(ZN|Il-$(cnC58laQ|h5o2EW{j|jUMLXj; z!JCBaOC@VoJ;v`|5hn}@LqdRWKn;lA|CnoU6<^E^S$*bet_ZT zQ_y*zWx+~>hM`xu(GS&qefu)}fWn(P=3n*H{f@w^wC{aBJ;Z#b9ZJv7<2(#{haNAX z??hfRjN+VyuE=|s3E3x&=j-LG?O&_^V*Mgs_z5-hz3=T%K7aL*$IN5!b#jzvg_q)r zdfe*YiCoLv1oGe$c;vbH^Zef}7r%pMR-fWO`%UxV{BJyE?w^F;9Uh#MB81k z@Kavf@0s85*!drR-L+JPu1@!xg)HQQ~$d;4PxpA&YMk^VT3vo65Fl<%fLVc~nh<9yHgNAUhS_yF&D zU1Tl)V;>5h`TlARI_gd7~_3Fio;0YZRNQa9ovlgOuNn}5}7u^?7f7Nr*>IITs)NYHGFA^<1 z&j>9RHRXRxLJ?RJFTOW4Im!`Ec{R_uCwxB(|5h|U^|&QC+kqZF5q_NSliecSrtZ_e z-g6}VM|OegMZ3ib^FH^gzE1Q1!Q4!ZLu4sXZn6T?mu7$ z=IGVwzCz7C$AkXReTBau(k$#E`ztH}2(_Jy>Ynkmy?H+F?hNO=_r$Zi%=2il+b-!z5q35$QQ4F7|BXG`LD z>AoBOMU(6RYP--Lkgewi*S2rlZDXA)djA(*drolCDO(==Z?JEo@lU)z*?}?pL&e{( z*l$mB z*atNJQ~uxGDLe1Ue~#Ca$l#FXLk$V*O%w~Jwx^bbNK(*-d*_|#J@XiMK(giEgM04gCWB2K<7I%9Nk>12VSYuh>QT@BUNpAAW4%x#u|@ z_^b5m27g`0h`=c0w_uu|z&<@kZ}<8Id=H9y?I$~Mdw0ir z5E-7lq<%;K=lb3@sovz5zAwdg(#yi{0meGX^q9%`9*us?M82~wkyk(<_G~$|(Z`g<&&;(gcw+`Ns? zaVK{2-ulS>c=BHT6<18~qVH>h_yLPHA@Aw4zlVDe-$B70cAbCC zw9kB4-C(})@8Li77g6`Iy!-ymn>S*X32&UIGv5QhRmQCt#e7b^zg=_TSDdp^DKcNqEq8&REwX*IP;dR+i9p(2BisH8y!w^jJ-LtjBF+!D z-pi8j+*`Cgd=Il<8gBfI_{;eFRMh<32Nk0oPkAptB0TtReR+;~2b){2=>|qSkPEsG zRCuDk`yNvxe<)wH9wO#0_|&pcFuvz4^1ykI`rJqRLAqyAXTFL|15sbgQ#QYX_LujE zXS8QSxR~aD#u0)Y;}LFp+wFH`#p;W|#P2i@ALr*uuJ`QU(z(to+X36>dzzx(L9$&@ zZngtQ-VfSMwQ~FCVOOC0aUBr$@9~>&s1N6;e~kGaEe-zv@sEG~YxS3keObr7JMtgB z3jXi-psRdB%?JB?W!~L(mHc>O53qB{+MVb8Z<8JPrpo&>@|pJqgV*>=3E_|7*zu;N zT>BHbt{UAmQjeg2@SkaKne?hU z%Lp$gysynV(D@w&9`c`VID^O9iAp{@enVtA*G%A%^?r`%mEp1e_W2CG1VW$Fy*A}O z^p$0I*agp*s)*-%DwXl~Nlx~`e4fh_;?v%Z=(tTXzbs#SAcoxnT_4S;uWB}f=jdB2 znhw1eS7M*!d+x0m&b+zbiI0>c@_d~65Pa#GSqx`A7k0q)ALYimqNx8#{Z9J>M9B4B zlzP|H&-N8GJjn?|<|41-hFZQU@d}oF#L>9$e-z&fI6wbG@ynmv0qzrGzi>nYu~+im za);>eP=$=1mhf4QS8#&tIzYQ;dg>AONBryET`%J2PYJ!hyNmk(_dhef%1ra&2dGaK z_Ta0j-)T6_w+sh-Ed1N@{?%v%FT-vaE?>5H|JtdadERH;UY?&&J8U@Fc@7ZYWgNs~ zpD*kH{9d?Dh~Iw_Ex*Oz55JxAY@hXub2m``SlRufvQH55`x4H10le3LbiOygZCAmo zewTQE{QZOAKklgW{xkj;zu$d*6dC?6H;?K2NPI9u-m9OY`Gdh%_2tc*$A_XPBFi?` z1;pU5pu9fEfe_bg_Q{TXpT+$i#yQp%r|?NiFaOzipNRa;)MMu9Ksv;5Xq7S6rF@SX zzk+zybB4ag`XcmwM?Cf2@7as;L8M(EbdGS-X&*L$@_!xapykN&zWw%F%lAF}k!U-E zpD0{l@HFv$7X0sn|DHqe+`v-%ft zwfZgix5QyUzUQ+^f%rQwtjCM>o9|Pq|!^3o1cs%>JCeDisHqUro;+alAuE-6% z$Nw&NCj9^Z#sx~tr~ho9{!s8=p4a!T1N{C#75j`8yw@I!&|m&*Re66yKYrhD;TQe1 zkdF)Or%1O1j(MP5jRLb>XnzmMXVjQqN{62j>ATL~wNB-@|Im8>_xb(csn6~2F6yIy z&<*6}YvuPmFX4gQ+wYj)9d{AGW+_r^Aknc8Y5w1W)9Kfz_uG$l0N$HE%hfIS>iO%i zBXcsSk;!g_o`fG?wt6W-fjDPH2g^-7pE)?Xe}gfonrigtM(8GLV-@%vrwdnq%#@jG5DM@NpA{<=sy z{H4IK^VXwACK~-x-yi;v{R!ujoaoHw& z0H*nQh$99N`RE@oOc7sudrBAfN7;Tp`VbS^_);I%KK-r$R~_@Jh#g@hch4UCs3Z> z-4rojx%{(ZJ*aowzZY%ir*Ovt((pBofM|Il>!z`2dp?Ct4(I&S{vlo8izPqx-g;5Z zc0#)sfv0wHJqUZ8WcU!@;dLCXXTb`4ZherC==W-TPVr}^S8qkOuh-((_#n@n2k!s$ zr#Elpm+`^CEiS`@JIfH`!;YLw_ddll-jFJGv!!#WDqXrre91PX+JOK3eb^ ze_@7SFujoXZ{oeN#@~-3UK9IK=r{R)=#|YE`M3{eKdJ9e5dG4RAe{Ag=07}8HoeIF zn9jGCqmlYzda%^{m|v_@$e(`LSPs<+p0f-HeMEkr^l{C1w_Lvu^qG3{b6Bx%|60EW z`QhO(7l{`9_j_o{rCsCKuU;ubvuG#P%Ge~NAAR0%E-mi%FE2!YPs;k0eqb!`l;uIR z3q3fsuZnh7wAXdCuOjNbrz?4RwN=leem^|Br>cU{Y|&8Wf${#1=lm`Cusn_UO?yn| zzCY>p+gbNx0OdJ)!1rgu4pbfGp>N^$vt1GhUpObMyx-YBt8Z^Ti5B~Pj!Sps|F%nV z*nzfV{Hpn%|8LJr6xqw%#E7T+4+> zw7ob@@!jv4s|U7My`o;)nIj)u-zk%A+{4?k-u;ir+6nc=bkEWF9CJK~nBB;aYOIQ0 zip~e3^&5uIEkEmT1L7{kewN|N+BXr{1jhF_n&3?iFVBPL{9a7hk3EjwuwBt!>IZ7y zy!R6J2{nm!VpcC456_dus3&$>J*to&AHNCy8=maIeqP1=&k9g! zG`>6&=ku50|2I_7@qGEmIRB%)u6sV_zwPesl0DplzIQJF_8$(xE9$|z`^0~K7bf-r z@E2l#!1To)w8W!2;m@Ncs~n!O&*AzJE%UeU5w#IN<39M$MS06NpCS65g7P@(OHAyL zvgH^2`*uM7bIt+(Bb}%oz;opjR{5SR|3ZO@=g8Wy6IfKpt{b7nfJ5|wVhC3!_^~bAH0uxk&g4YIBza8_A2tzeuZ9UKNP$F zThU9A;^xh>`h~n%{U%}_kM(XszpZE3g;akW?TPtJqd%$dGW5M-0Q-jo7C;PtJIlM=3>hCmuaqlSl>0}>L z{;A!lbAPM{_4(t=ufAfGqutdJyUZKHInV9x%JV#rI&V|3eA)yC&thI*GGOx6e$2RQ z2fVkwh6BHC?;7LvZI0g}R}iB zQ2(6&HI4tO46eym5|SgzwVVSKy~Fr&Y4 zr>5e=_ka46?U=JKrA)FD@BfC(^wj3|XS{2}Pdsct=@BU49v;*b4 z>1E!R=ZW_s;~ui;xxT!|EHB}Egb#WD@co-Vxj&ElHxk(ns6@xx^}KdL+%SR2WAA$u zo{Qe=6n#Hv7;Zlr-}($N#uYh!k6LuR#T;L}P<9?0>fPPl-9p)W&_n&Oo<;UK$C8l_ zb4z_r{6h@=qdLJ$)+%*#{b&^c8=Xe4-rqa85pn*R)H1(;uSiMZ;sg z1R_#i#(_Swjtu`ct*4ScQ~&5E+rjkmok%?ohBIu-!E%?GppWIczQv#hBn-2hhZKVkQ(kh{Co?&{wCG}Z^VybrwM_g_HQP4eXq z11z#_anZ_0_H#OT=zYX(@KJuY*zt-pcH3>JO<%`_^ex2<=-;iJ5>qj&`-)xPC zJ_KS9683q&V0b^M&Gut!I-Zjc3fO_`4k8kW@}KcO@}7LL z14q8ccTwTJ&&Lz&!P#r=!7P4%6~5n$cp&;6vl-!@o5*|ZrHK2u7Jo$lM56!8EYJ79 zhwwPYX^561zkAH6=@8Mg6LL>!G$S2)SM)FD9sSDC5Bg&QKZ1`L4G;f5@O-XbagQbJ z0MUO{W|U@{t~bdJFf1$O;kl@?{hqNAUB^D}kLR-eLw><`?$bp-qwaq&J#-1X zv&Z41e&&xqB#x~wh&mGU_T6p&G zIKOhejv3%y4Sb(tAG)R^8Rz{?*aLY^^{@vsc&a^Ufk@!zO0Vxe&_k; z^Z&{3pTK+cekqa+oCV5v|I{zKDf9j5_w65kJp_Lb zzy4gldowk@{a$dA<${(I>ke>C#nfllV}>v8(tdT(TYheg{qB+<{3c%7KTrDXIHI?~ zn;Lyay&BQ>KF0}qt-q<>>raS4!C2qhZgRQh_`4A!ACY~%D#d>YWWuYFnck1(M1DDc z(i8NdOU$bsnie%GoIT!PO z13bH~m`LOs;TutZ0^W1qre4T@Zuag(?8scc+yA0=Q6$~Ef#*~+>;Mq__Z(HeV@~#B zO7}6&d61vaE#G@K;)n}cV&(lrkw5U-cGC{-8Ss1KAjkEeSG04@4`qYLeLu!&R0Y53 zAN&C28h+E<#fkSdc49nw&VOa=I|DZ${0%wb`{it42edQBb3MXy^z$n2`iC)k5@Phg@x_LGROKCn*Z9SyOny8ku=uD$>6XBI}E3PJcCv_zx%jCBNN%8t3yYPmX@7=?;fq+)um5JcNIb z-*ADRX5NGJn|jN8ZD1WddxGpsDO+#y2`n<>8SP6rUWyIVk4XP8&K3QV>_XyE73VlP z|5Z)@5HI+oA7}nWR!=6!=d%c>{qTPkc3@0I`=jE*T*Bl0AM1R!H=}>ntGv%)zej%@ zaX!g1(A%f0sXla-a9UT3$>RGyq^wt5@?InLMjltR({$jG|Ks3$b^9mo<0d^(A3j?5-;78< ziFu!S4D|lt1U@sbPUUsfH{%T67n$vm-{AMrPEft2@i7Bo2mEd%&lwlj%dI~)-@#r`pRAuv#!*J{H9x*DNj&!fMEwNATP7}1e^M;>SD5ZA_0@U}G1ZUtEa|J~ zd@nM*ro4sY+0a0dY{sYY^?Bia#k!%2{x11VD0gE$6Teo}E7IF<*5_lKMY#Q*_9sFf zBi}DKju-0z*0rMj9pU}%<&1uym~-U=^E>6p^X$i0loN8nD%V39|0Dgr;DQX5_4Ddn zzZ2Hfr{7mRrySbD{-;QP(9h@cp~W8(U-H+%6X!j7VGM(i78^Mh^3 zeSCk5@F#X)!v{FvaeSv=-ntDb`o6dLp7^4AD>@!STr9?8W%phGZ+OkLcwU}UpAPf# z*d}{a>h}rcJwWoeUE{#+$a~fm%bIp;f9wzFJ(BlyN1NyU{xttjLO&+(mTZ>tpXP6r zp}+Tcj(oRYsz2A6@68coeVF_K{DsDR0>dAI=X27{$cN^hk$>oCM$1#q*f8FS{{_*X zf&Qrvp?`k^Q~XIzmvFaNkLZW7h#HVS^iRD@^H0*(!t)ePL*jWxpjQT+FYlM~I^Bzz zCUhM_I3FSpT0FGZ&B)GwUJhrEpONZ&E0KRnMQTt8+ZT92CWrxCQld_QW~bUgt7G1Mj8c-B*N{sW^PpF)md!XBuH@tlQ7iMNISzMs(!`0qM`@SH#I{q{Zf zV2kYffcw8}+;m4fknMf+!`YeR|M}-HzMS0V^Ig^hBwr%S)6oRJgFAQ#pEoh@(;vZC z@j3rzdH(--WG>M)VdQ*6J@P zFR2&#>=Jr^iusCxs|dHBGfoq-KOm3!OPJR6&R5FhGtSs%Ea3@VHxN%hLj3jD!!M%k z7cs+UlU%Ntz7qoe=sY@!?*j!=kk9qAMg0ws_7?j&%5pVI;c0&7C0Ok(c2K)lML&bL zX}y!|-!OlQF`wXh!StN(%UB=&>ik^vT&@DY!5_ChcXxab1Y~&?^S=F7-FCq-j=kXfT=ct$T5iNK^%wm;uflV2xkz@vb9dyZulU)>c&6uG0*KurziswQ63Tz| zM)bV81D)SG>>R~?Tfu+7(`LVX`6cT+_>Vh&m3hCMB;E(2hME8HB<6eeIRfQn%=7z< zMLx9g{Qdh9Ui~@w1tnd=->@HHUzYIv2L0_Pr1L$TVfi!{nVRx9VZ3dZ$Tngi?Lj|6 z50GbBPiFGm^C9oO1e#9yQ)qg_i++jY$X9*-cwY0l{$icVMgNi>5`KTczf5|~e2jj# z!RzXN`Ca0%^{q&+-4QJ};XL>~{pBjo>CoS);}hk8ET@;sRA-d20Ub}nKSIj=D7;E` zo&B%6#J~MzIz5;l_f3NT>V^Hy^2>Sp_VA1Qk*S`dEQpR_7%Rzce92V zyyd&O+VS>?{J!QFt?~84E0Ntcc-&qen83Fp>sjR$dMw&*k!(Qr7sm;kECUfvaKuw@ zaz2IsS1mO*JmGY@MdtM!&jGbFE89u(Wp(TOJnWCsKiIKY2ZWw8?k`^Oow%$Y@~|hq z{EYQBs2!OlKc4U=f4>Jiz`!U+`S93%f+9cV{n2muWk$TTKA7CZJRIdXFHPcim{0Yf zrcAi%W%!*UJSe=K-QyR~(C`Z=_xF%?s9#mWbZ^1$=$YPno8KlQ-4)*#7?Hqmzw4#` zeG&50c`E6l`iLI$CoUX#^^(5|8R!kSo#OI`-xBZVzXt!DcWG7Fxr~jd-ihWTa=tbO z<2*;q;s1Xz?rnY|KkCE#-?W2j2ha4AYx=`->5rowz`qW^96)ozHVSk65R6=YA~xJn?zvJL}7W-jN;Uy^vweatQP=>-dV5&ayu@SJ0|ueX6|{*Qaa$d22P z|Im0<$#dS5aoj(P{lH1|--&lcp51tEsU6VYlegAyh|aU}-1|P_u7CeQw0(gnNZ>c< z2jT8xnBNaPpHUCvS#Gie^$o{EAydriR3G#Kdxf07Ly_!2@Y(h~<-O-=GxYZ1T)x}? zl<)h-^I3$mFHd;OxQo5*L9eYxLjCXw`bRwi6aTZ{pY_t`@}7F309k*7=jb(hS;hKA zL|x-K5dJ&nYD2%L^q~7aj)V4IjC}tNR=MB)y;$e|6gR`}l~I}rZA=QGOoch{BoflhkncUkMC56g-A!QbR4&obXbUzYIYcVzh9 z$Nv7!2l^}c&bZ9rJKa5<-Ed!sKM{9-Cw_&$JmI_ln2+9a{XLWID>ZRVSM5e8AAo1iq@Abs}171T~DNnK6K8OBIPG`GJ-(xpY`_ONi5&TEL zunV>K$&l-~hal3tX$3wWI1fbs;v5S6ij6MxtfTlU;}@Zq=vkHfm-tc6@1TB}&-;w< zHQCAkZ#e(DPU#;r!fU?IO2ew?XTJ0MtUi`Q`D4QI3!V3Eulz4|fPP@UlCKs2kk^Ih z%ea5UJRk8-nEjs<|1lu;pYu>4`H1WH{c}6e8{VgK=zr^x{VD3_y?{Y~U$d_Gi1*3Q zPxC!m;dih2-R@odz75$TJCFCs+xWek7PP(o?xo*@5yKvUzQ@~MHgCzN1^v$UIAhz8 z57Tql0sR_f^KbA6M&o1$)|}7FXZ?!6@E@G_S09wQU!C_CvfUuP;iHU{cc!d*(F*n> z-o&{8)t$<7-?I=Y9=|_$&-%ZU|EzZs|GO^n&T(h@WL|Y2lzXg>d%xO<&i9kd!wEbl z{W#+yBhL*_=Yu20bB63bjA;K2d0#b)rSgu2mb|z7#HIWPF%vQGKj7C{zWo>Vq2Q-j z&Ls_>g+DBRH=EUak!mkR`=^2LkNN%)>yoMUY8KRkcImGhFV~;>W6pDUKj%Jzh@lms zGxHnrfqLDehs2}bj{ds&C?BvZgvNbH^pSITz?N@rw@hG@bj&&V~S!>ht(dd7nUzsjQU*B*JO!{O;o?~?kk9@5c z_Acs|-t$K0Iz{l4&mBFPf73aE_AhvOk6FCH8t6BSviSMS9_pS%LuN?c4 zVOPRF(ck4cxb`{GBA)#~KX;CE?(f3;nCGE0d|_oQV0`1S>KND5U?_O8DFeCp>FD{oq5Z=J^UHq;#Fm2%bhWfSFGk#Z#d$6GG zFub7qI?C=J1UA9*%kSW0o8x@~ujLuxNB%Rc*sT`7V)S_j-#!1>M!W5wvJVjJ9sA3D zflVD4`#$hYgopf1KV4UiAAL;>DrQ;p;%x@wt9~3oXazN5p|ocH&h{QnvI}R*7W*8n z_Z5zTXnCbQ1H5gy=!%^7FG1$h`H+W+|H1o};n5HBl?{`VT*95dxsO+Pe44+z2E*0e zC4LWaZa<{>bM(2h9Rrl_q1XKniT~06^z-iJJbu@nZAbZ%`7i4Ci!pD;?_R?5qrZ=P za4z4`2Y9}H%Qi>lJfCFddkj|M{p(lq-ttd4dpi#Ki5+ONJqY`d;?JzlD#E!~UF?PY zb{rb&Cl2|~J)&d>K zR!~nc@py>*Te8i35yfXO8djysHaD}H&(0N=wU-8~&;dStLvD}OD zFrodK{ewXI4P?LUg=oEph#jVWr}=(|13|xD_xsFy9R9>}_ubO(S+?*B^TRp*fbXoY z694D$zKQu8e2bd6zJH53hPV0wPkG+(7~UHGI%Acwgv<9xH@j=LjwA9V^TCgzew)wT zA5^w^me0MZN0D{;rpfgzs6D{_$N$%UB|Cr{7k1#w7c1@qZJqCf|IWMg7qagIRl(zm zarHUl$b4_VGw%F}b8rHB|8{~OUY(6sHT>bV-CyL7@e0=P+x-HOWn$O???=pXyn@LN zr1{_W$=@a;(?j9?SiU2-vzz9f>t=CGzA5}@9|+fe@ID|2t@eR9a;3cA!wK~wyWs!b zUB9QD%wycUN1v^i$ox}y-rGOU6A5F#-t_whCu9!E^Lc zG#ow6<5#_7Un%SW!9DRWf1sZW-#>-(`E<(Ygk2C(6ZZk$ZAd4Y{{XG`7#SS!{<%L8 zdf+|rqz|@}YSFIXKfi-s-}v6Y?JV~Z=5ymC`}d5Wq`!U8J`BQ}#iCcHndlq$Z*08cEUU*&wgb@){QBIUXxABz^Okn6SM&$=&vk*wGJAwR#eRVO zMRxRSLdHk=F(cuO`~2c-^~8RW|IG6nk$czhVsdlwhlgKh#Df;_VnX`OYJ$8WBhhxq zGsMFzkoV}|sr#HF_C&t3?r#IRW;lv)$~$56j;~!dGx%?QC)7SDPo5z5C3s+Z9xsx; zDdi`7Rq7Y>A@!m^S?AO@j+5;--;C&I9kR%B27S{XQvXij3}?jWaXe4^dG;svmj34W zs1bP_{Kww!67TVEGw(mfF8ol^>Gy4(@qS*t>q1}ach$Rd4m8C0PFuDE73%@}y&&Uw zv;(+N+JjH}|2e$LcxF4J9rjbq%Od-X^i$79ZR!WsDa3ni`*Q!u%YXjoC;Oe9dL(Zd z&PK%Ve<>b*PJH*CfZyK$;=NU)cipxdV#JU4Tr29)@?6Az;@>9R^4-h3zT@1i=T9Eo z@z+K_ziQg!JPD6bga-M67qH|N{!lNr@H}`%d)vfI!r^E5`N7k*eC3+n802^K_yZ|_ zAGq7k1DS|<8g?QfdL44xBpmX8BL7YQmSXh_lqtvb$qpQNp`fLHerLmWIKCpZ9Pod8 z>38Y3gkuK4EqXF?eu4j=e~v!Id4L%9fblXP$IX3F$9?mL^D7Yh7W0JtFYmqADEd7* zk!|bgB=p1eu+Oyvgl`i6_5YGxNXXCZ%uQ#0^3!vV%+pxMQ=hRicKs7}VCL_UgdJeo z{Nm&XeA*6}&tgIUqPNzo;6#}X4(n~dTEDc?SZ=lPkC+{}y=APpIEve>bA@x0u%f?-u+p3!_u)1a^KD?Z#bvsE_SR?HjhU z&+P?%QIEVA08hQ|_MK=yi`pIe>-t;#>Z`BVkB6`PiB-amS~tjDh5r=@FGS~GafE__ zasDMXIsL1Q&hv@?yFEO(_PgLB?uGYvqko&iANT}&_3QBuGS6@%+r+h~7+dJQH&CF;+*0DR7Wsu%oEnDj}#@?1|uJ;Dzdy~z7Z`cdd-Redo|nEb*Qo3yXY zJRQI9OZCy0O8$mk_}!kN9?1J7@B4{*Kzr(=-b~VZBKV*7`^l#YJFwZj5ywPh-S)5x1@52rh-Y1-}UWop~A8JJvJB|F3Sg*z*sJgSh_A zaNFZN&#~vS%=fVSC#?UXdRPC{p!o9Kcp}5wiKpa4-r5h*^tO}F2`4-M;C!teKtJdQ^Og60&$H|JeW(ZQ%`N9j5f1-0KYNQ^#Q!(F_GI=}yCDMF4RIr`F*GfR9avc}%T4^}U?p%~LzTx-;6&gl~#d#O~Td_T4KU-eLUSvODU-(|oaO*4YiM|5gR$nZ}X!cPCr7Nlke$yibpTM%k3!h|2xhVioLIFpW`q@=FLW#>hHvp zo#Xxvdc!>YV+G$S4n2VP91vEqKi9|mHS(Z?-z<|Z0`dC?Jnty3NwU9V$@jCE|Has+ zhu^jzd5C_G2bukR&~gX7k9$D!zwdk2$qoHp*3$`l*0D|Yx8)zvGEc=x@K5x+C)pk> zh{yP>j^}v|{O|kstSe@5AK2$K>taTJt@@htSEk$cqV+7;AUjURGu-;$@zR;KU8vbM0MbnG;Bfo63+=1q|&GU=;W~lYx7;C)Mz69TFv=Kw zM-OA4AoP^@1O9KmllR(9F}_bTd4fBd1p6ZbFYQ|Ej8bvr<|vBq2GYxaG( zr`pPQWJUq0Yy4I??C27_)dTBMav0f0X5`5+d*yOKmI-Z zk9hFNeFyn81?8Xqx!BXr83<(lJAY5``_V_j@w3LnBOmVngNdiy@7e9(tKo;(4*)l_ zfnBj&o+p04oxSyUm>Tek?*@zU9Aq40{x{z?>amjdWgQUpvflJt+)HAAV7=wsl5L4` zd%aEV8{qjj$qyiZ{Dm%_S2wXP*mU6seEZ7r(w>R5<2RAw@gK@~YbQ4G95Wj@e!=`h zJnK<09}+$I5r|&kZfw*K*Yy+lxPJ3+C073rV{fqANRp*%IlV zY<;8Mf{kyu{#i8suRid)_%ivppLFlb^H%gaYX4k3`TqOp1MlPc@*Goe9hv^E>DYy$ zAGXeq!hfI7a(%9fZwck~&I^{^`0vJ@^Buak?>~NopUf-#7J1z*4|Y8~?^f);k^aEG zyWhd_cc{9)?U`N6fFe&cfd-S zX@y;G-RB?8Z|B*kJ0Sc|9IEJn(HvfSKFs@wle`w0$B}(+8#z2ZMy5~rZd@sR|GA*? zZ)NpV!IDlp*jH#T9EZyP=mGm#*>j%qe$DT$iOzeG=Zaoj^%AZ7yIZxSaw@&nYL z&d=yk5%=u0Uhka0sOu)z6IViCV26}x26m$1_rW<&R{0^iei3mewHxsxr|N<8^B+Xp zC$E2a&F{K{`ro24ER#E611eNPocpr(7Jx;K>TR4gYzt zDLkfl&NmG_AMAg@$Mj?Vzf4@zak2djD|Q=uNdtQNgY!x7tf#+;Yk_UIgs1X=b2&-p z0Y8HsVepb~#d;opU<-dhewH+d`X3<^Ct7_Mw7$#c4Ph7REBqg@=mX9xyh(aR*6ZeT zA78#Rff{&DH$)G_-zQx?OjoZS1 z`^EWi%lCcyx0~1nv0L84W_ZsZ{Kn42fA5)I*!A$c4d3tiZZtWuhtIx)rCo1(^bdBv z_5N)^>@DT(w(zCu0eL?mgUGaqzYher;Jop6PBc_D9C7!naN@{9%if%l*2fx$1} zT)7Dn}Z)h?7gWoFB&dmkQ z-gTh$75=mDFaO&jyH63Bf(K+g5;qjRPt>muaszl6H{0_hA4E_ejOfmWao!W45=SU1 z(fsm6eJ`SBv=_zC2J>Dy{QTjEb>(OLdE-Xe4`8~+AHWT{5C2#DMR2>%b-MATyhjha zF9F}TyK(fu=tNXKS)c9Ty8Z?6zryDM)d$b` z;~Vzp*r?}ev)+fFr61v^y|bW1>76SJ^LE|Kiyyb7q zeb6)f$Bj5O-Fe!)AuizG0h?bQWzNBx?m7K>UH!23{Ui`Kbzk*Gkk4O752W1G3$MXZ zX&?0%ckE+V4p{U6eh~emA3?v^Ui(G+*&od#+Es0cmadwk0v?d#s+2Y@Y@-;n^L zKfnbAR6Vd3@t@)k$PaleuSE5V2!!_^2p|mnPdep@wDV;v^4DFo7YklI6ZyG>o&0vZ zihP&r+LOoxg2nswWF-EP4TP@nA3q>^AgI6DRsKIm_tL2~D&_OnWqr_0&PsZhbS@Wt(X2}Tf8l%huS@wOsQ z4*o`X&2ta@AJBB#kAEP-TlB$xTl9eaRLY4y!M}L2KXye}6Mh`{fM3XdH$07AsCs~_ zgFZ-H+3To*lfr8hSmn3rBR7bUITwTe815VRU-?ct&DvY8`c+=ju4Uo*Xi|9|-ghV- z-m-VF6jI!?T%g>^w%ePzpON>a*(a+!<~iZ<8D>)4wuSe5>QO$&4HT_UWR^6Wiw-?;y$@1>NcrdD zjD>{!CV4+#mv*hz6p1%Uo2Wh!iNj5roBr(&tmnaUUtjGZGGRKdW1ry#Ji>mKIKYVV2VPC#ujPts-rKC{ zCz08A7LETTAM@e~GEs(dMD)~Fj9&}-eSk)L&YyVtHGHn}w4(Al*YyL?Pw$GKVt(Ae z_xT@ZsH- z|By~HyaTZ-rfZ*a9edPNJy7`_{*zz6!}IMn=|2Bc{wr@L$%mhSUm)L4zxnp-<_&V& z{x!$}FYl9o)}#OA^FXKjV?A)RzR9}KdD&z4^{1Q{^jqdj*Rj9HeBpRW;&=D=`v2N% z{Q>MWfBNmV>%e>Xj~-kqyKWrP$=@eV$9?LRw%#xQss2pa@g^VV;R`BTK0kB4koP{8 zc*_U=#g{LCCtlyV?$7#w?hP*Z4_1@-z4jHn*DvTUzPFv){jKYTHv4z-zO47#3*18d z@kjpKAM!c%4t$l@_(9<{6&!i8q-@c$e zF!zbv$2^cXk0?J^9Q+X*?XEal{TxJ*i%h?>A~*Q+P5k(R__Odb@hsCPynhDb*W`Qx z=i?X3+AVqP^O^s1DDO=lF!=~ng#SLr(RK7d%60rGpXZ65$$r@}|4|Rv^FIA8!q=Zg z<5QyVFM!b(@R)td)kr?uKLvR&FEaHM{kLgxN%X=1so8U14v*JdemW{uUlzo@r%KoEWpXny(c`#xgom;c^(#DC24wd2civojHQ zex%-CEnDIQ1K%I@faNrgdLep5p1RHtUul5Iba)>m&LK_+*I9>rl27|T=z)q9nCHQdtk1OuFUxyLeVs@BC6CAaiT;n@sGsiq@tB?b zCk{4~m-qMh%krPUfxmNP%p;$M$?!S7;(|DNOUer`Kp7uoOQCjI_c z4_sdtz3|&?HVf|=SCRGCNymI&F4YHJ;yW#f+Xx0z8xDm!uAHds_Rl&pq(VMSd%l{G2CpwSizwJ5F1Aa$Y z{xgn~k!ZdF=DADH?XW;l9^|5e` z9>8(+exB!G*D1H!|K{f7$B%yF$M2W_i<$ht;8YKOGI74;a#VOh z$`SAFM_4}CdCn)W&OjcmTn9|ww4L^U`ewxfcv|he=zXGoas%?1-yHZq=z$~t+pY4r zuKPFgQW-bxOiVk#5&wDA1LUXvvj#mhOeae?sr!v}ag51;3i?_RfExh~I4 zXM9b!zV<23Sl4Hs$?Lx{zmEBDe$(wPv8`x7A?H2J4T!nPx?o{`_#Z!|@PDZuFwR4| zejfH!-V?t#;y>ZL@ZNS0{yjXs@O?fJ`k#r$!$jM&x!7!QBRkRiDsBsI(Ho@yc>dw> zdPhFi8;AVeh4xCm=Q%;^=`J@HZTnU1KijIOUE%$G3o@_r{letuxhJ;Qe!xCCUY_d| ztABvrJ!75MF&;Tj3>H7Y_RCKmk9e^AJgh&%dps*J@occXzDFkh)D%9)etUgfR*fcyCQaNBLDgQmiYa)FZ?h5q32+>9s0oi-0tm0e^P!Oc;|jV zc+2}dUFG|<@OUlnEl+g+QFMITnqDzHXPpaA=af4!o^Scff&T+q?|OZYy^9`6J5F$* zOM6C{@A^;3@q6Wk^(%Xx7+#m}fPqPe=h*G=-hNgeB>kejV3yQ4URyEozK!dp4m-_s zh1c>nXg`jWX?MH1*kl~Va(xp$-XmMS>0(cQ)RTTh!93(vOyYPN%KFr-r<`~L z&AGIcubwNs_xtaqo|MZCLwUz&e+~76i4WOs{cthuL=Tkxc=pX1$4CCheybq|F^e%XAIKg{^{CwaoeOVdg|er5Aw|Gd7el9 z^F9sFRrw_v=TQ$V_QW}l^nvvk``<3XjpN(NSJcgs9@wD1(F+6b%Xli|SL_N_-qWCZ z-vd@1J%JyB9zZQezf^sK-X^|CJJSEyfAx?2XW6sp4t$6A*y;NGRSy>a>))A=Vpkh@ z{~AJz@VOCvuKw-j?Q8zT(PVN0UV0v>k%#oNi2D&9QB3>+?oV9r^!hq>Kku&<-Y5RY z_dlW+i{Dujp7X{XuD0##!Judf?l^55VsqzrjuD+g!{NwL9y5$UJ*qVWh3ep3(pS5LxspF>=7Ko;p2_;ax1{l(+DK5<9%!e~OAf&8ey z+^_%F!27;0{C8d}>u2?q_ZxVAO~=dkHP;L8(WjS9{F?#8|M&0T7d^m!-{mIpO_BA` z?S}ba`OFvmfd}~6UB2eIMf8(A&3bz-KUvVrf3!g(GL6Qd@8y!tbvj0DLGN>3%?odp z%Q^tW-8fffxF+V~y|&~>>wMQ9@|Ss?cCdhdod2f#-mrXUT~9l0zt@BCpZ8X>9=N~f zz1zzF7JhLX>jC@##_hoWBR#NW+~hyapLForc_Jbo`2&O8*L3WEuB!)1zW5{D7yqN) zFaIfaf?l|o(NNL&gZwY;rhS%E;(xo%;kk_W`CX9>&%NFk-0{4nf4Zb^li&KhPyfPk zZ6g=E*eBl#{lC#~I0NNd{C@PnT?2p6Lr?hc{FmRPuSL&4ikaV!nEeCO7Y|$a5qZz# zW%L01RjuXz<<+ZKwLbMx?6k=8W#skqAMT@v8sdn9eJ^}3Jhy+8*A>_hWIy*l@(uT)7a~Uwuze%{FO7$Z061J9u)8GQlJ-!3Q2pn; z&pPAKPWk`ajHmE?X5JGfyMF&A{?G*Ud3j%;^L?J(MwtSXaZ7@y44`~unR{LEh@YgR zuFgo$_-zjQVDn67-Ov^O`#k2~pPv^$qR5O3=K&~hPkmjjUzA^I7rfjs4m$#EBJZ0< zFZ=xRnrRB}H|ei}oXaMC;Jx+g&!OhFo0@NfY;_@9-&RwAgwD-*Kis3&KQPl1h{x1rW&vsMX8R+x=Rb)Qk&-XlM*1`B! zUo9W`kAKc}`TuVpwU6UBv)?F3{&OB)d+c*o#4jIbKkidxU;Zn~(a!T=jrpvv@Yr>{ zd=9cb#`Q;D)6U4i_ojo}f?M@gc>D>HkH>vkdB3js@JYUd9!R;zytkg8dibAn|I9P! zpL3_|V?+t&8*kw38ozz z^gIeI`uXH!6aK$`Ee`xfy{>(J^xBy`XS(b*@F?|@E}FgtOFH@{*WDjTzOx~JU*rjR z;J^O3_IE*hTz}gy^8Lk&v*G&!C*yaXyP4&@&pqv*dOnDCsr*$?LM;lzVA1&^P=yws256miarSM)4pf&4f>1cZa~6Dd2bI9 z{Zirp@FVl&k^k}I5B9(K0qP6<`PnSzZJAE4$1Cp(PL-)&)DG3_Kg;{n55^BU;yr4x z3$KYw25rB5pD?jN^lD4%5YKFizh-)}diJnV|= z9Qq;iig`i)^b7oFnG;^|oZ)|4@y~yLwUbAG`3IVv^L1VqmlzI_>UN^%JVf?&&nnN? zgPy3k2>PB-?7Qp#)_ICPaK7rtqA$+Z!}@m8IzI@g9P`}Yfe0VY;g`JFuG+$npLrhF z%dZ}6ukBRUE_Lv$rNN@l+xq-Wz!uqltcc%GK-SUxO@+w!4X zu^(Xi7xX~Z0a+hV@7ei}pW(mjfA-D8=V)xOD;eXl%KN*Lt)2*j3Jl)UVHvg~f8RUV_)xI-tdhEqL`I*Pb z*B|gX|J?^WzHhy@o^oIK?|fxmWnKrz%VT->kAK|Cr^h@P^f3b<31~(5sGM^5-CvJnI3%}6|$9e+( zv+kAmxZ(1+@O?N>G{_*2eb!PhG&z&^=?C#g+ufG&p&#(W?+fqkpGRJs-}JUcFO~j_ zJfx5KkNyCkxrsi=`osHi^vgPc`3C>UCNGT}jzpiox#{2XIkFeV<5>>g$$$F|p8H+N zq6c^pbPUgy5TFVFEsyV5Kz#0xei5CYJ?$_a+gm?>N65KQ-kYIbj&=U`;GS_Ue*b;N z!vDI@XgiMizrY_+KP*hA-MJ1Lw?nqRiS3)Az~K9pdKj%G|DWgq{VI4(di;LuKIfv3 zc+F+6|6=(AHj&};#rPNXd4oO}Q80M$`=NiUyshcy54&9FSjt1v@vlYf&RKKSXTA(r zc>i1Y&$%4zfpI|j+-Lp_`3k-t?%#RccA9@c^l#(|?btByGJoMq>>7A-@?GXDZYB1A zL;LwXYv$qZwrBlZ=4a)<{($wzFL1gHydTi}m^Rqq7XMX0Uw+;bR}dFj$J?$h@*_Hr z)7}ATm+^miRN`4+X+KP6;+g&cU*s9>`7C0lbloWLy)G_qZ%aK?{G@(5prbw751uOR{tTA=eV&hH zc)lOv`dmKy{a*X2sR+=Ig;(NsEAKbN4NE@1>!LjLEBT`j#GZ6`68>xN8hAt4Kk+#H ze%I596Uuws_t;k+?>o{H_Z1n2Cw#{o%0uEeyP$SY{_lQDJ@E0nuBYCi{)*8%qzC2w zw>Wb0`VOSLyq6|Y+=s}-zeVUD{`-8n{%dJ}>@50doA$X5cyNCogufM=>IaA{&*b&6 z?tkLD8ix~spSzMi z5hsMx*ZJ9s#<@*DUA)?9|G6AJz*7dHN&JSt{q6M+=Hok0)i1xkqn@187YTn` zFaCS@ae0m3SNXp%-RC?;+BZTzv>SP7_ZP6!KS+L`2ij4tXt^K?w~u@tzU!ALqZYv4 z`wsosT=npK!M^?@|9x)dE$chcxQV>i-xJe5kYUUEKlLKBte&;Bi+IDZ4*8rONF3k( zvmX0JKdyr}DF>Nh&UeJD$8=yB#4qW%ev}@4amId`<(R&y{5$dk4t!MaH}Hz;!n@Jg zI=muXp1(cA??)@(?|1PNSPvI@LVv(>+aYfGPjf@N?C0dCU(59)V+qI z!1|2KiuVv&#NF76_Jg>n$nTCsrdyNm`~`fwK|d|&z$5>}`{e)n{7)~yH%{}Q?L`mF zemm%aYX6t<|LyNV56FMAKjFROE}v^U_M-5;rFzp{7Kmh9ivEs*^NQw#w_vs3AGQO} zo2yOEi7UhFA%EUmCO>`*_cJj>_m{;7H)vBX`_k$Q4nkQD*?0ZrhW7m@{<8SUpRURx z?l%0+{EZ$U8@w<1YkK&9+Y|U@e!hIUe>m0yKBnnE{E7E^hxrSi?{To;BjZgxEx76` z-z(48@|gL}dNsH&{yc$0WZIi`zy;%_|8M&b{C<3%($42{Py6k!ij>!L|1PrqVE-13 zUs(Ik?>cd=d+6tnrC(>*5%Z_K3z&|3*Mo~!o&zB6!1EXWcR_x)I{Lu;rW5v3jFcPwGVovh z*U+9V4=xTeZboGGfpQM9`u(nF$~lI7&u5(P5#h&NVK#qiZpK#&76fDX&iJ(h|3#LQ z@dIe~x&8p#UD#>u|77&Yd-<>2$KMODaiqnc>35O+&B^igw(BO&CoVJZo?`Rw^USB_ z>d1ccV9vAnXLWvhy?jrs%s*wswuNe)ll=XHManojFFe>QVI>h~L`ZaKG7*5h~gh4&NmA@v;M4$!9R zfwmz1<@KR_+k4!;(S+~m(GJ2lNe7Ou5ADixkskahxaIvu+KqY7^Oy1&SL4l$1M-i} zRq``FV`c0^`gc`vTk!q%xSunQ@ZM?KgDe-9;%t$9zIslW_#l7sKKqZLaaXhiexd#n z{mLKxn0`G%cwO|UU;M}Ix#eRt3Utl#q- z4LsH#@_wK5fW3CV`u*3~FY>wmEm+dokB?u#{oy})BFH(YtXn+K?7D^5A=jeuD*4aj z;FrLE{@{CkzbE^FOXL#&8xa2c`=W)%ZTQW(HSPX^_qJP^c^Uifx$=39=b7GeaATM^ zU&744pNW$&AN50(9p?e%vF#pkNEg))VxH>=x5=OR&3y%%E7q+^XTGkmOP3<^gn3xx z=z(ol(+4cqi5tOB=JA8LpnWa#%5zI1_Kb7r@SgRv^9{9h)-fN*_R{=z(?7$n>UH&r z`SA00NA)AKk7YS5tZKWl|3mu=_QFD=09V9Xg(XXD9KJdNzPY0QPHBQul8Mh;Q?>wO2-?IBH-`~0plTXkn`oa1( zea0hvy}N(C_ImUpxT<`oT<^1d{P>OgvBdA;JqFKl<-3&Vkz7CMk7GSzySxv5KMDV_ z>&JZOai93_zQ5bRZ`ygyeNXhjkpAxNqdp+to$1#sAVtcnSk5oKKyjJw^U8a=>rB-D zuKXX3;XmQGtOJ@h_P^+btMQv3c}~Zh?bz^!;@8fX)WdkM_eCF^yf}Yd<`4Cg&SOSD z`25ODU*=7@Z^-v0G#_qB$?yHhTk6mKA4)qWzQ@6QU8-N5-}O4#lMlcBgx~c_eA4?? z5Gk1FalZ0Gy6MS}9@tt=5FVk=MiY3`<-U$|^F2rTCyxrUewXL;PeIa^egB>Dx4#CY z9`@zR@2N3gLe&l^~#rqtzTeSVtVh0%i@f()U_xgj-*EkUV66J!sUjM&* zuc1HizQltz$fFVc0sm=l)&azE&=0Hw7W5DOZ9U=|?9%W0S&RdJ`U9L>`9n*;@_Jd` z3zDxLa{5936L6>BIZrwIgJ^&D@aPUhDEj>3f`JpSu}`9(uM>gbaNhxO>$qO|AHHXN z(Pu&5m)~$*KjyRiM*%c9tRMIjZMO*U9iPfu5cB=JvgaX0!g-1J)7~KdWcbZzAPUbh zke2hlmWP|z9?B)1T8rH$jv4-=7c1|%Z+f+R_!&Q7OdRmTwh3nZ!~Ze`@tmuCZ+$+HZeNP@(}d@7 z9z6sDS0zP^Xw5J@z@adcq8c)X>1 zKH<51!@ZuFk7<+hcMEPXf5(G}ER*yf7#H;NW4-8~ug0cxY;_|4b$`j9{TlDnPit=E ze~I7u{)hEZ`~i*cAIrn_A$>s0S@S3Q+@k)4*!tigj~5i=J@M7o@?O0&@PEL{`$ffX z8UF+SS&qz_t3KyqMf?QjZ|}H84_Lo4_G!y?{7CgdnLh){e?I>{ImqN=n3Lc8z3(YD z`L3t)aY;a4nb5#FxG|K4WaC~x@_UH4c& z`VIb<^2+o1T+ToBg1me{A9M#^T8-&`7pV`wGf(jI_4oTr+~eQJXLznP4xCu} zYrw~T+ipw$(#{9^~D@{S>&%NmUtVsSM9}xa;Z*Ona1GZm3V1;3p|Frun z(0IU3)c=w99qsREH{FFFB>%VJx%HUNG>;yb6#WptsgwU)aDC--!Mnn5`G5A}kILzn zepAvbujF<1i{HXW|KQ2Bb{4cg`NnjJp0NMSZ#v`4cORn1k%?LJbIFR_FLh7 z`uSh;JT-l|F0RSfUykATj{4cRBV%&~&zA+gPkF$}q{tn9e@!P|HGbp1o#=bAJjEeD zp9y2#ir&-j$#bCxj*#c}yC)eh@iz7L@bAyBdghR&* zsQhNW^!SO+oABLniQZ`_|MYHeKl%P4?F?>%d5-~0j$!F3pLO8FhWSLX!#>x2_f$r| zlkZMkzT?mFsayGOIimVOWS=DahsI4e^t0s`M1K~0ub#8r(R0QNJ9q_M>F4gy zFFu$3BFaO|Krr>ezqRKDj`(jq^5_~~Ht=PTAF+J@oy+$<_oKI5_p>fI=|s$iejMLn zn=J}17-!-N`f=cbf+C+5yr;o^j~?L9c5wYcp2sgN{2qAz3EEDdOFfWv81l}2H_-A9 zc%xkW0m2s9r||jZKd(z3{QZIN1Il~LL544UCkS42o>yR;srIkVn-+ig`TXfGGjC$& zQ4^ood#|T`j6dflv(ImPoDV|1elIT2FJtO4e(U`6c?WFL4&s-=$MoU)G44O`{K@yz z(Ek6@eLT1I<^4#WQ@^bhUoqiC)(10rtll2@{9nc9=8^ZTm-voqe~FoQ{Svz#c~#^+ zA4=#iu`B5x^b8Y^d6aoR;6~Z=Kj3@U^|}7x%=C5jrWS$M-lpm|Gc-ExM27K@0YGq zK_+E(1&7CitRUOE2y$<*g}#24~iQ4Am8yX9{{t|+^;+E|HTXVhHQEA3Yv0`_o*H@=D+8B)dRRG zvFEmH{2$}!4a-4Hc|Kp?!*BBi&*AZ=+V|vZl#?H1b!Pp2t-s&D=bRfdxBo2u=>-$@ zoqj*_FIeFUMDU{zRLUONV!9OxR>fb+Odd!XuZI7)X=SndZ3>-$zS=s7O6IR zg=+F%sr!r8t3F~@eEOYN;tQ4secI;V=LbDun80+aeMHBfc}Kr*eNOwI-??h&_tIZr z9Upn&xO)45=DQ|N;C)>FFlHVZ-=}=fX+Ow&^Rvn+_8*>;FZ`$Z@ZNc6oXGXhv-h!B z5UK|rUj2F2!hfo{llN=yFZ@4KKTynCobaC>o)TZp`kQ6JnX>iw)&748H(b}>6M+N& zy`N%JE@pP*_1}*3A!mF*vcY42AAY8v?(f9Ev_9)scKk){p2&Fc`}J7*ay{#qf&ZkJ zdizKIa||cz{SiNm?D*R*=Uu@kyytr)xt{Lz)_-C3c;8vc(QLPq2@z$ngsJJ|@1j_+|M&y$Fmdp3D#FbLO4bAN7LIZ9exU27MupCq*`1Fr<_3YX2emulOw4miAw{?iOdW z{e%6(Iz8`m;O8;k=}*sD=e&pdbGf8E{3|}YyKU0%`U|E1Nw;4;XCbCM`>VDeAlurj?(HT#kpH7e zvG=UM(VOn?5l4W3Y@6LT@37Aw3cqLEZ~Ez?AoKRXd(#mQvgN2YMYL&CujB8R{XG5j zzv8IK<6pT?^!|#2oe$rk$B+GO^Dfu_Uh$FtJ>z0I;eExd``xE+Zc4jE%;y?B=KnVH z3_oy~Z_ba@Q_*=&|Es4DzrSn0XWR(ni@vAWJmdLu*?g4yzG8T<{$>_&9T<=W0# zo&{1a{St&0L8~!cVEnE)H%Htc`Zn|6487*K{`7BWXCmV|qMx!(qu&^((%<`!+w^;> zuY4!U{Lx>*W4j^mx9F2cJ)oc6!+W}Gw>jqjL_N^izE-@w-EPGh9VPGYIe#nftyk1< zl=sjf_8&Dj>EY@6haY|rPY4jp*JFP7_~VX)$bQX%=g)cnM7}=dd$98F{_7spPUU_& z2<+|8M&AE^ecJrJ^1tAE;QQzB^qa-Lq!+)ybp_?fe|~?Obv*x3rkPLp&*R1q&x^qXzDe#7e(oUe|a;JZ&j?t}jfNG+f5L)h=^dzSj1@Za|otcUI;e;J?tE&7TC z(fRFtR2RJh4l?8KerC}JWaE0df8h6k{oA43r`Mei&@lFT^&{s(>wKtKcu$4&pW`yA zILPFmntnFrK6w1lU#cHG2ZA4mL)>4g4`>&>XE_jg#e_cIXQlZ$zeG9kzW05R*#FpB zc+c~3UA`ARKzYXb!vBily?j(g&yD2$5ByN4NOI2qoHHQswD|R3!jd08d0){Z+6(zk zz32;(bLQN?`~z{u%KHK3J?o%-<^TK7@jc}n>_7fLc4o-epg%Z=vIP0v8TCu{0iW=n zbDQXY^#kjM*njsa@_rxltNQnK9x#qa-~ZcZKb-E1UOzv_e`Q=_kHY7|d*d_mnf{F5 zPAx&zoB7!meiHvNc?`dyd*M3{vV2E;juUxr{sS_9?2l>qz6QhdpO`=Y!~2i<%{c<( zx!*4huUpEg*Cz!BxggWP>sPm3$%|m>*2cdL%Rt^?^c|Q8E1+=@O)Z$ zjvT%xJ*GvE|?^*#LnuQ5N(6yDFs zFB%^RRvD4<`JHGEl8Wg+?sqw#a#pK zE2KM*MP4_FAFxJ|j0^9#j<9R~+JED@=mX=Rd0zte zGW>_n;Xl+KaTricjUe6pW*hQ`U}6od-Mo?{TKLeT#)Lb2To7Fp2>Ip zVA1+S*R$e+eCXZdb>6)^C!6!6j?W|iogeZO+TV-!oSSa`$0l(bWy=>SHhjmw-pcpo z>L=qszw9|6Db{=y_5UZM`J3sRZ&~n(@a4VyrJTzD^_lZ(kiEb1|A~M9n9lF47e65U zzrSCvTX>INJ`=Ue!453EU$yW)zfW|e2XIT#57YG9XYl6Lwr%F`rZ=ZN?;PH%AEwB* z^PeH{F!ai_ejkqVQ3TUkkLY?=OgRo@iKz52p>oalF5S+#u?Id%xdbmH+4Kzh!@t{7>w^aiYF&IL}*8l^` z$p0<%%YWNLKi4=g`}^4GhHfEe}BJUi$2%1@SXYgDerxsVqWK2)dMFLm!f{X{I;E<^^1goC!Kbk zg{LUrgBT?B0Mj)70MlYUN46bvco%(fGsn;0uiJOQy@-2qK7H5T=qI${{dQGwzndfH zelY%n*ZGg>WPhj_J%C*}x1Q(^>LrXjYn9`l1n~=k@HBWog`d8EJ%yKdzrLJ_d|txy zxZYQI%I}0e;s1y@Yt;wx8n=~mZppuYj^mm>9guQ4M)<<=S0nr$<^yIQoM+yMdEW4R zyBlQlVFm{Nuc)8=hwn&ao_SwGz7q)D9PEyM0E+60xB&C!pZfu`h5T2obzk89m(q;~ zSpP;nz+Vr)b1t{~|Hu4aVE=k}Kby&~5-$|#@92w^gDk2C_P_HzR`{Ij(F5cwJU^?5 z9+3AuUvOQn?{)>z^YWhiw-v3Y=P}(6q@HbE2jrYUt+zSYf9^wHG=68C_xBa_PcF!^g{F;vhT?%b9;Di_gDS!FeROG z!hbGL;D6q`v>p1@rT+cL=m9p$x$gHE=nojgpLl!Qb>fTzwWJ=>@A;02>Aauex-R_m zx^`>GH}LyQc;NjJ{|VowUhB8NT`xK=oU1vk%N#eKcUtT{SnSCdS^sN{>~-74^f>Up z$~)U zKlf2yu7lB2*!d!J{&$Psj6OL0EBX&r!>FdK16zQ4hGjQZ`@1xDZC^90&R{ z<3jQ${CE6FUcg`YTI_$;v+|w4@ctRD*FPuSc%|3FbCBhE?EY&A>b$YOitB>wW1chq z7mXW;bn_9f<-dGyvknk#Z+p}Ey=8Ea2b^>L4_P0eH^s#F zxDP*o?@<*!aKNe;;Jdt+?;wsrP=Df(j()&!7yjR$ik@e&d_Kz%eWO1(KeT7+exZ7T z_CGxM+&t%O3cp#_wW8-~9k*u5zKX~OhvQ^B1~eaWiH|}1`H0th`pI^jwGHvH}0D zcO7ujFz)u7NHN5bn(%^gxZ?e^k>g>yM&_#~{4dkCp$NM;ys#?bY8_ zqjui&4IlOROt;B(5a*cE$@-(S*? zk!qp`cDBcSOaRgNo4ohjj%a&=_+N9LM_Jwv=y>|vo(p6=!v8V-H5z>%K9O&GJbu}) zsQu~qS&sLy&pHuT#&JdZPqZIDhwV|i^)v0i7US=L6#L$B#6KDx-EVzM+h@JwM}F7z z=FR($KmBBTQ3tjkKa6tsN_hhwprMaT)$^ZY> zf&Y`$>V-(Vnt}h~!>fk}``u&^zsvLHoVVqV@r3v1XO5%md3nEb{RaYI_}{_jUr^&` z;+A%a`=2ZFfXLAw1$W`M=hg=Px0H`QIGfjbG-qDfo`Qw<#PvtYn5mjxcn?j(dp_>~ zkLTfw=)7tx&j*CRxqgH<{BGa_GW_1D58&h3MC9~r^nm-D%C@I{*YQ2~yXzqJKGy^C zo@o}o1J7_#)(eYb@8wI$R&}Rs28A$6wlUSCQvQe%d20 z`Q2I(HHQBP|0nSK@5F!kbAD+r#MSPn@P74k_7`(5iu9|6`LIjS7M?b=&+|u~e|B98 z|1tFX0d&u^^+53hoJaB>|JLiV^YB=d&zu9ouFCiGe4kI=pGD?B16F^)bo_v%qYrqW z4W3cX0XOoFzfIrqehqO*koWmVrpI5A|M%G!=wHz9+~52B&w2h_Rv*Mq2=DoxHRWOc z+Q<4H>ussO<2vD<1?AITeh*3g#Drh=0_&?}@BZMc8gFIL7h!j6+pYgqY*VcR;eB$?Q%60iY=mG5RvX$Swh8O!T z-#0fMe*Woo2jAHb`(3oY0mFX|#&z&L?Wi~}IK&0w*V~`+TeKd^oelCaa*P$ew~WIm z{Krr0!hZ~-NH;B}^gGi)p7CB?;kEOmL8dwP^qP8hUB>Ux?wa3qr#N9;f1NDY7pf84s7&w7mue60D4ACUIIuVV}!aV+IMbc!Be`hta@@{wY*E;#us`xo$e z#ezJ>jcuf{`Md8pW}G&zU!Gi@LnwCTORU3?Jo{m(RwABa6*K9LUx6|8myJzzWvUb9V1 zT#xl1arMIQcHnu?a!eo4eW#L-{qnlr*WS~twdlG~Tumk;(feA~@tzwO7w+4K_dgdz zFDn}t5Y=BT{Bay2qezsgHoSZN8ot6mrvFH^{O2gIPZx#f`V|A;2Mq5?AFzY(&Px&h z^JNQiS-n*Jg(KdlJnCKKdUw@~OFKKp&-SX1MT+Bo*8RI}^ni9xo-PWn-l!KG4~8$} zVq8FeS+D8VGe%E1F9tN-c?llI*XRF|EbrM4j~=jGW!ANp|Hb=nZ;AJEUH_b1hkS$! zq6hBzj>nKL(!8bUbBLaE5O)vQE%ur(!u!8y%rlS``%NbB!R=HnuAL%{&S?2GV zz0ni9SFb2XzPr!(h%5YZW#>m%%SAru0h*b5C^q~TZMWq#@*lqy%=0~B#vyt@zezn1 zI|F*Z-+nG-~T(bUYhmLR^HFk9_}x^S1%p(4C}*d>nqREIsf5%cjbBHIfz}V z&$p`a{}S(GN!ZIjdBr%u|7CdZ{mR-+(Q*eIe}@11uUw~|GOi;gta9^R(F;oyuktA4 zOuFMpz4v#6pa1P$^%qi(-;>GxP1%Qtp5lJO%?o+#{hvqIElu>a$YVraQGjyxt&jNs z57Om(({|ba=QX7G{iyk%{Q$o&ep)l{OMGx5-|3ETMB^0V?$xY*U$tF!2mW{1!=ew0 zKhRy$pE(y`xtppFdU&+vJG$Z!hx z`Lj*sefPgg`O2vMZu7soYTvsW4|wE%+MD*ozbNgZy~DnyMTK41l;7WMLI=Z5~LJiCg@=-c&@!h~X z(fJ_y`*}g0Q{2!27eB&OUz^9@`G4=gxW=x7dBxY4RR7UVBb?CzB_7VDSy> zf{t@P+Ix_{*5_j4bqD)Dzj{S^^3Q>v(r+|Re%fEliiQ6Kz?H3k3=(EqigQzchU;@g2vd6Bj$yfRR>>MEX!}H{; z`eAc~p378rf2cp$Z)6m6(g{3@*0 z{9iDxVB+|dpUUJ*`V*ua{Je8{ea(D7=J&^skNHif8Hf14<#`Ur`YcbL!~RY*pExOa z)i8fso(Cv=Uu}1^U%zHydhVwmqCdb__<{B_#liRV6Z~+Ubbc<6-A|Ce(C^^?kDu~? zr(EoQ#!jQ(JrpG_kl#RUgFz_{D4X+`IO{i$6*?QKQQ8AR_mUY1+%3Gc&y z+}H5i_Q-eNPZg1AXG6PKht_uWmnB|-9=ISbs{OuTK61_%p3|Z57+x3Tc_I&J|9V}y zJLm)XzL=4I>38ab=%?WR+u#}pd6V;joYNI~Zc(0Ysvl6|g5OWzSM*2p0fuSd`+x)g zp5UVJUOl-9Kkq8;<0sh9rmw-y>-6)c@cw;JdqsMl3!L!RRlP8z*Zk;-e1GVm2YSon z&-RWc=fm%joTvxR)^~{yG~s=7^O|*E(F1>c;dpOviPwVoWe?#$>j=^Hj`P#@h@R7& zKjn4!4!z|!`LL^X9v3Y3-TBg8wb+ZCJeK>%AnxV8ytV!T<)89DLud!@%D8!- z;|HeSspsnSTifUPo~OLO#*cCyq(1q--B$lF_3QV~#-w9rsJ}VbeR-?QvK&3t*efQleydv9!JkyU5@pFPS zJIFF_CO@ez{I_2DdH-#Z-AC-?EB(EJ->x%6`=Kj*KdVUGulNP#kKRM3StpjC_8uXx zmwr|s@cG?|dH`BS5AfX(c;DRo>Gf;IyU~9=aoqi0i^%cyoI|DAGv^EDXf663<2n3C z&v(w_35KQ4>#XPHdCT<)*oE(Rdy#o|Ch~aO7GC(A2fz4T7rBG?-&Oy7q=Bsb@19{z z|788%!BhJ~G+t&t_rr?($m4k_k96!e^Kf4It?ci@C7t#SD9^D&v>V=|5JdSYVm4mR zc^>OUzS53}uJh~{%-v~lyT1?C{=(he&FLr9DSBYwY4NL+?VmA-dOYxc%6=?yo5b03 z{SD`U_`@1MLHWL4^B&?O?+5+uxv4vOk9)N)SoDD9O_RP4-+7$aeb-O%1Kv9y#u=vu z)ISiv{<@q$?v}T^!gDM@tyiAo*C6vfI123HyY&ocy8WoVw_QDa-sy)S8!y^C<^Q(G zXCFk%>FRa(ebIcS9suzdg5MXMQ18J10bBTu`^a~hTjB=Pk8F7&*~9;W@IP{IdJBIa z{ek4~)ej^253TZE0m*mD3;rYe-89P8A8#v8DmG%*-R?HwJ--7RWd2lCW*xhh_h}C@ zIFa|=cl`d-Cvk?7k9Iy;mkhG`q4P{V@TWih=?8hwdf-|d{ZV}|b{==~pYulX2eSSv z^Flx1YBG88V$S@&=J}lGz<``@Z?C>#g0_X<+HtO*pUZReMdtTlN;>E4N%y&s3va>E z_jGjS`!UWI^0D{>1LiskZOGSE{wrJVBVxxRs~3LGxjm-udS3Gn*s2du2qOFqLhqM6 z=Z*Rrz9eqo^S4ZBkz&yc)2!>K$iBZ}KQZ31=S)ZVJUMk#)jLd7u37+jWyXN8Mrf2RmQ%K$Rcl zKXkm8|CZas>#To|_|Ni(e1-R${5}|dvez--^4#KffZd~un|1#+lE*oK2k{zSjcA4*;#F&VR6V-oR_m;}*Vqy(9fOI=;uehla1oceCQb zg4{6h`8jr<;s4P(KI?k+DWCA(`sH(1F?JhSoP)M!K=U2TJa6Uu0qb*@=Wp!?0?P89 z&-~oUFY7zP!S2GplfSA5P#4(!dDiu!^-V#hzw50h{MX(um$#g|H2%LR?^|O~{zCKu`dZ#%-|zXIhE6?kqz9Cr z`UR-le1GI=dh&(W#yKeGt>e_GA0{VFN4d;{6VvxN)@X(3i2=iZ>_>+l;AgM14$x2Q zuWHU44WkA072H|G5zx(&TB=A1g` zPj2|W1#x@lf#p5o{K@=xzMw89b9nCgMpza*&>>r%=>0|B?%LRU;`;D?#<>Ua_5F1a zJ$~06{P33ZdFYYP@tyI0OeY_I^W-}Z&;1TqWY62e=cVmB_ytq!`<8V9h=HGS-F0km zroAue^P&e9Jl_%jIiJY$raaJj8UEb6-$8oWFL~tuBKev#Mk7=OX^mg}r*Ovezkm-Cc!jKqJF?(Yhk zPCrf51AG?cRGgf@{@W(&f;IeY;k`J#Ph9vdpKXWfG?U*Sgx~aMkc3C-m8tGbbiWVmxlcXt)^n1Psb3j&|A)`Xr2p^ah`i-uu&p`L-NN+RmTkOe%{B3yN zH68pmz9K#>X5l%sKb)7F!%O$=+sgX^J7m8M7FIf@0;+xTW(*Cd7skXA(YSE5FNKykpC}O5JV54AZ_28gFm(1XBG3DuD_=|ug^CI*Xu{#I}b{FMR;$R zruhFkw+H|89rMb6c#NKu_qb)O|5*=I%sD)G&b(b}_etjZ=7QH-u=jnH;c@l*)l0|x zw;l3cEWAgrBD=n6pYnbinYfPEttT=Qv*crbk$+OsJ&$w(ANhX3>$?_yXWa=}&*liB zd*n48B;Pq!bHsb}0R>u4H~uR8_k4pq&-{NoKiK`X>sR<{`CY}$5!(OCbYoE7Dbw8W z92ix(70Y)HJAMaf!u3z>KlVD`8UE9s{y2j7@3PN(&;#Qe_Z6pu9;i6RE*dwG59PhJ z>CFr0dErL`@3GhGy~tyqiN;|HHWg1|huxo?!&8PSxL6c44&A{=dEd%={st`eyx4dB zoR)m$dT?ub#(}3G<8U_Dj_YR!Er05{`yka0XdDdv@_vvH`XTA)k01-QDLl8n0Z9)J z=J3dMw&-d{FC2oAH%zAQB?LWL`odOZ$J$Mpy-KzWt(cc3pNcjgn zFz|na9jAMiqVNB0;IH*}Aa3hJ3#MPe%%>xn^z#;8lWi>`Kg>afb3X-{hWE;Z|DqRu z^Z_sDem8g``h3v?e4mZ_E>A{(;&;f}nqKrlccc#}Ch@&*yl=z*4ahKkRu7Q9@V_E%SwE6-o&bP6vK`t@-a~*l_|K<{@P5z!s=Q=*34g^| zu3wYC$e*ITOSOJ;2L{BFZn_Etepm#k2}%!j?%x2X&EdWEi~6;5c)~F&??31R#v}HW*(1LW z_TP5M``yEBEx?O-=Z&=_Gc|JVX3n&eCAvRXn!3e z)u123`&@VZGOzL!ByR9O=WnO~>V2kbcjoAip&ZO-^Z}1|BJW@0FNq`Kb|U@#Ld1=~ z)=!{#{dr{kO=Rb58(A#&{($h@ewY8=H(=ERq<4waZ9vcS1}*)SJ~04O^n!Y33Xitv z2T^?>vb`Oi)4cEyw>;^r&(EY!kIFEn(E&Vyr00^!QKxTdyaiC@*@uE2j25L8JUJQu;`~ct32g_yQKkY^jcuu#4zZCm~|E@DkXFGd42Yvqk3c4RS|5OjqucH<9 zUnXt`p5tgye%dY1Eq}l{vUa_FJ4YYTj?eJ_?)v()@*e-c=mGi9YiPf>@_t|T0bb6& zz3(E+|L*OYdNv^Hx?6N43wi(ghZlcr{$6=MAiQVT;YGez zIQRpNyutqp|5@ix=I^Gg7x*p&$UIt4|E?bRGQY_OkGI(2@c5)6-`APGqxoM4wXfxR z^oq|>?)wsMw`clhsf%YWh=>*xXM zFZ$p_yy{lV$aLp}vie=#+fLDSsc3m3(^j6LKRgFVoZshxZ`z+JcHeOk>6WbTQK!W7 z2i^}@c&`2D_1XCUn8Q*0fBa#24sG@So%h5A`il{9B++5k54d~%Lw>i1Y4r7&`dO#0 z#|M7|{&OSk#1Ek#)86tPfb)Bh2b`l9;$QQ8`WJJMlgXnV z=vWUx|F1=s4e*<|z;E)q>H*R{7vgpF&ZzMJj`Kq5g~I;F$ZvW4S^o1m46kz;o{RWz@Ebq*HoQln zz^B+XWrpp=G5`O>-*~96qV2J~0p&N#mGXWN1FPI%Uq#fE`k}@%SSR4H&d~$B4)#I* z=Q#!>-)&#k1sr?(^AkOQ{#5pNzvVylZN%;Nwin62=;6D`BKq~Vcm2$taW&%2_v(S| z?Q$uSf7Ze4E$wTu|KC>xu+Q_0_mSK5OG`e>nIG!`m%=v_|Lwn>k0gO z_Z3?70Pn3l<9`RwZD07$1e5n{o2^Cb6V*En{Qnz&Vp->h|JU-I+h!ug+>5S*MD*I3 zXua}FyDyGLfBYkS5AO^Ai3=dp-2Jqs%iH(xMbuu5N%wnNqJEKR|A?M5v|Q^kf8I|A z*DQRLS#Hh5SMoIZ@SnkD{EG3r2Z&VKDerA>vjT5ewgl~m2EBkAh&*OpK>Vue0kEvk z;Wy1>oi7siD)Q-ntB7}zeLyh05K}IEr};StbIO0lmH%b_=lwU!KSxeI&A>zKbJ`jF z3jR00OpLpL`tv~)pSYskmDjC!iz5tgSif?f`-uNFK6tSIFZde|^??~z&~}fb2PWY= z#|Eya@OM)6fa?Ke^NB1IMsw}I`vvfwZgT%8{2y?PeE0ir(SuCu{W1Ujd0OT4yLte7 zPrENW^r%Spx$k%2|Lu0Q9Qfa}j@G}D_qYwWqH&B4Ug8EVMdN|$0o$u=c>}gpo`d(r zAAiDk)5*S&_v)WxTq4)&(I1w3EU)+be^aJ=Ci0)*$a=uvS7;0Wf3H~m0nW+7|Fjc6 zTb{foOt}i;pB8yY|Mgd8{p|LL_dG`80Kj4czb!|ei~9Y8Y(1t=P*C#zZ?Es~MVk9U z^m$ze%(y|`xUVOAzi7Q8%l?UI_UYfp@N$1Y{kwLW{XvjwwsX=wCn}#$f8&19azOn? z5jddb@cEbr@gaI+{O+9c%%@+O`&k%H3*Ytc-?i+QiRgpq0rf#?7d(USEe#O~zrt@Z z?az9k$X>_)-xj1f50rN^yZ`++`EEN!rq|0OzQcR;i2TPOiqK;R=A4X}brYE9V}4I) zp!5Bf=V}hThyPp7(;<_*hu83sb%e-*Gdy4Yj2}PN-j9Nu7a8oi2wlQ|zjL8%`^EDY z#V>GtET6bb$~8V@`F{6$e542T7nS9;{AT|({z}F(yf1ozS(A0XabkJ?cy1UTJmJ6n zRr~|`uk^!!^h0gef&cD*$@`XdW#Ru~R`}2F=%NRf=ymzOSa41rzI(q&_ia0P-m(GG z!Mo*>_b^mTOJp8D{s8^O`oHLf=UDT{?psgcKOK!e=ooL2?mPGg<$m60 zr9Asr5!; zh5y7u)C24F>mFn|7dvmc@_az|d6aFJsQvHJ3q_U}%rE&rIy(>Y-0_u?0v4w3epeo zo^yVz^BcYcQtZ9`*}!|2m0K~-%Y5gUL*}>bWPUqOo#&Y+{UyJTtbT)+Y%3*BZ@(Y$ zeAA#{A~Vs0)&tL(jyn?Zr0rt z-kEG{k847+Wq4nJ2Bs>hX2q%_FsE0@6m4Y z|M?76*8ixt-R5$GT_&Cd&vDyW|99!fuJTSay#;NT2rbS;o*P~Uw_?s+fv)$Ihy20V z|H6A7V=M2qXTi1Q&MCK`_G4bkr5^I79{qjZH$e|9C{VoKuYVNJ&n81$VA0BZuFHGZ z=c4z22H`7~2mTM}xP<@S53d*Yo4j{@RPFwNrV|#edf<3HQ1pPjr=P-q&-Wq9=!fv#=auikuHqmMIGMu#Eg6bF zKo8XNQ$PJ65+`1YyH|gn4efr!r~H@46j$}YInT{{!1r4J3IFf0qsRP*_P@%19`9G@ zb;`TxGk*Qs#`hTS;W_q-{(OS;>kc`|~y;Sgs|L~q^mGghv_XfV-eT#htF*n%#>B0YJ9T@v>9B2yf*#?Qf?>rm!{j~F_ zr_(_;pVyDEWgwL84>9LQKz`okY<%Pg5FWfO{Xzls4{Qs*dd2f0TKkymeAM}BCTmIX=4d;a& zClR-U_X0P@51!b4pRZRRJi|2#r|1RzEd2od19+17py=~}J#PLJ{3QK zZ|Z4Uamjv=$S}RM{rU+(0;fJ#c=*f@kk8v~)dSS?|2K9vyKN*{7G`TD=qa=`C^YI7 z_!5S9RzF7pEhcJNPm!nn&CUm5^Y{Xp7-wV_dhc4TaS*o##i{y-(R%!gI(zB`-kEGCj5tQ{hsI80|tDx zm*GDfh(ndDKQNc~K2Kh_A1qQ#cmkX$Q>y&o+#vG?df)g%GtT}3&rq-DCB4kQEZ4J7 z5Wkq~l(UtOtT%5a@b>wo{3l+pEOvnFna>-(;-AWY;t25vn*10?^o;A)-}0e(Co;}k z>O0uarT(=&i+#J&zA4W+TtD~)?#sz{&mU1<-Ukrbx2K;n&tp#~9|&6#->dcn-uF1V z$c5Lz@ss?wey02VF7?^b%lqedWxroL1kd7MOx_nepiFZU2WY7In88=7y_wZ{S{b)s zDq8Nhko}ei(=k_b5pxqeV!tV0R6Ej9@#I@;2aJ~_{(*mRy`c23>;Sv^+JVaZQeXRl z?U>DqezAY)eQ~?0yzd|L-}5=i_f5p#O}gKOX!+p3>&mXm6_*v^cSnDJHQzVhPvLj! zD=yGG^D{1I@>jm}@}7XVNWF7@(0E_td60N$U+lr$eD-_2&ig?mkNTm^_o8vvRh5TeSr^PnpL~?}n~nOMeiXT&o>N@(UA-{hq(i@xUggupg7m?9 z@i2u)glJ-%{Y6nVv7y6gfyS1yK@i5!bWTu<6SG_tn9Yq$=@9>^u_rdEbbNPjQ z$84U6K5e1HA=bNqlQ`5ONl%5!epRLuO39D6`^_&*7+8_G}KgHPPve9G6qE`#(-!M-5s z9T_(!sGT!E&ACfCI8LJb<)Z$Hh&K1)%d4xa_FQqz#4o;>*Yg3-U)XPN(CSX4{oBd= z74tve@rM6Q|M*XCZFT6A>0N@AjVS{S2S#dq92m@l3a! z4Rf7-5$zw*d7-77&-AWdKjM2kC+ziKl0M~omgIx}C*1#zZIboRj|Ct%!GeP9C1ubwc?6N?Ctf{f-+&5OWrp>TXT9-cNBwI&@j0 z&+mE+jyPgiq?#Yv0*eS7|&?)k@jk2>u4D`#!~ z7qM6J)i{}GyuRI+^e6Hi{gQOb1K(c%N?Zucdt+cvd&+gri&`Fzek)JxXpqRP4DY$0 zzjOG{xskt=^ZjmVIk&fbw+p;xUJ@J6d+T>3 zTi+FY4_`sLaj8t$A3uWkib#<6`s|Fv`S9vXJX{KvlX+-46_|6i;J<*+{hx-JK4=O2-s$7$C{2GQR! zk@xnW{WiBB<-gZs2XL5aAL<`FK=Oig_OTXTuXbSd?k6tDZ*Jd;`d^Lz;r(W_G{5g7 zu0ZmI|7^p@FHnAD2QY+<|03nhC-4I|`$pt(_zSTEmy;*_hgX$PlbrY6f3LIh{rr0f zA2WXcPn6g051g0yg7dx4E%tzasvQ0s|1dw@vlcHIhja3?P10Lm^-8oKhO~>gD)#OQ zJ0S0^SL^@*w*lU}u8{v%+i@W>J?up7n>YvMIneNva^mm!5zrd`!|%fP%)|22=YVgX zJv;kZ`NtpE>#pz}{ujP?+}Cy5fxhuS?>U+uHy}K>oK@!Y=Nr@a^4%u${D$>_*Qs83 zfBOU9_dpK6tA3~_`c)#`7ky;8_Xm2!JVieZ&i6a~`@;Xi`<-#I_yOXQ_0KuTHW>4L z;lHweYxJKAn9uSbA^PX_JQrR(#v{J5f9HMEa{u5t7UY3t;B*3?DL(uchX;5}d(Zz% zewrShF2i>eQg`c%Gy zjGw$`zU4bi1Mg=Y_EYR%nv?#tLlevx`z_j~(gH;KGW!ZU)urv!K5$3(|ix^kk99qxB<%$pOfEv5UsDz zK#czLyckmu%-p=l{eJ^aI8(@%QCv_&+UiM*U{x@xOh}xpv?T>%cl>3J$}=!$a&( z%16eZXTDzzbg%p$Cirn++L?YM<5RR>;r$uw_B!tu{!@OF-w`(L91palm+#i2;$pQQ zFUFbjdt{b{LF=X5&~uRLf%Q8e8r)G|^yn4^5UCFGf&V-YzDHhEY;v;$iMLHJe)wSq z-wet6JcoH_d0Z}Z zN?eg?Wz=6dJ+qwHhj9W@jqGFC55_gGe18z$(+!D#Fzx4D1jm41%74s4FM6Iz1=a;6_|;qABie@Lesc-zC{1?`mQJf;&leifNG-ml7Bj$P0WYX=B>oLLU` zjP&vx$J4l9!R>FN@nO+8$$;H|{&^FgzDK`6Mw;)JOg^B8 zcb}I*4FU4z7X1gAjnVTm&jBpCUT*0@ zc=1RkAN-=+!f%nl!0^!czJl+pvym-N{@?I>X7XR&>o1JspL>5np2MF@k+4qU3w0gv z(RHf4=V=q4$8ZN3mOQ`NA@t>PkoWw7d@sdzh5us^eHVGWc30j{#pJJOzj|IS$UGT* zF?YV_JC4K!K-BWebz1j}_5j}VC$ewFydU}IINj@gwFByd&wGmMhyI`F^~w8zbz%9v zJeEnk=QDV&{3Mv`+JmyLCVZarHy6Ya8;@u5pNT)X`@LdW_urOz`~CV$u?O_q-21Zc z624!H0Au^UZIA{2%4*N{q= zs+D|H7i{_9^|TBBd3^X@@^ze7EbIKUQ`ZYEKX!=>J}2w;nvRS<^ci2m3j1*$9N&wx z%p2}E%X9ldgm&;h{VmU1N^^P=6BItzsP^vD;l?L{z6+f>=Az3 zF52^N(fEM*(1%fEdYIc@)bCL}NB*c^^^*?#pI)%uB0ui~%X&>sop5y2J;UUO&X3p`I z_X!SmV2Z&sAI}f}H=AAd0i5S3ulfJ=d9%0rL#F%wS-~RnI>%@E&-tNIH14Av*#2wi z&f&f1izXo3h@EKMPo8%?SH$cU?7M;l@=PC5@S*VE{)Oj$XQ1%)7;&?lpX)vV_X8`qT8q;`Fqqe9Xh*xIAue@|5&P_C4duI(YKIapyd*eCLJ(^r-$Sf82M_)Mb^t@r z?0|U5^~ra5uV28j`S1Dxw&y5ctw*zCtv%L{@u$8NOTWPT?Uz4;O$HCwOFqhdw4Q3R z{Z96g@w~?a=|qmRz0?l4&n4eomy4L|J@1e00QP+B!~bpb2l!r;dOlV3l8 zVT~OiUEV8;oEnN9AnvzSMi2J;B=X*DBI=!W6yg zI`(xc?=4THxL}hD9+$&7%XjQUkPMDv;*ySQUDx9t!S6D!%Wvkyq@c2J<#p>?_-_!f6BgoPdykJ^3jYo z-#7n_aVPFWT-ovBG4bOPm;S&wVgTeZ_l=Gl$a`jv<0r<`{@$*Sc@J+Wr;J0xcAv;_ zPr>|-xcZ)UReZt+csuw#(!|L)#&L(<4z{aeAM6(4_mq6f&-h1NFkoQim;ArHtURBH z+%}4wdxcN^z-xzouWVmFVd%nt2HNs)Z_Do_Q(^7F9NgQ1kN5+xU-Ldr;ss~b4kR8x zF?nxUzefIh-czJH+5!2tw*$&tW}RR7y7~@MpUQvs2Qd`hXFu-oKmT?t|7rU2=z1%E z@^NLpt>q=Y2k*PC*a6(-N#TE2@o~I>?k@Jh@3_Vuc;AqDXF!i!SBmC4%pXO6)B~Oy zKfw2TC-3Wd!8)H$3O~=ndmOF*ga7KK_QLlaAM+l)oqRao&;Km@PvQIf_V$u`$?Kd80+~Lpm4UG!aY2kNs zl|riutrS{WBs6%K6Y>l}Fd0#V+%i{Et|URAQbUopbX-hjZ-Po(xZ8X_$2_F0>Yjmd zkiL2Cw_UrRbIv{Yn#Di<$|F!?~AOF98DO>+f{P&N){NMkV z|8&Ry@*kJhkLvdde)Xf|aI;#ilE?LXB|r4hPA4mq4_K3CWqq7{uwJj59kv))+guZ=d=2(KE1iTyQ|NtQ;$<$RHqpmpl3V$l27Z4*_7j7C!aR_ zQgu3=s`JmvQr*mFph0~iDbDh<@!{%?+V3~b(CyZ@eRVpU&-07n#d!6m9$pPEI9|Vp-rcR&!>iuKa?>=u ztMsbomtG|olXAIC(6Z!u(bc9Iq!-D>PG|Qg=|%61%P-Z}`cY9NiOT+qx~M*Ccz*Sy`iRFottNGG!vQEyc0MRK>VNxhhokDLPit8gPxGhT zW>P%MpU!wdYB`&QW?8nISH&~iq1x^4?&hE8mCsT2`1$9G$}+nR*t%NrV27U<6_0UKRYkS7eO1-75x@Fb#eJOLC0EtcWz&r7r`3dtxUQbo z6Q0+go+PI}-+Gds(jGUx)AaNgzj*MV$8#_0#cFt(pDf<2-sC66v71#W)p1uH7sp<2 zbzC2JfOC>ip*BQvMg5xaEI3lYh1g{&~D}>;U^yhX1CS z&y$bqqxoz)MUT<4K21K3c7W2}Iu&+cP6cQOIsjY4TemyAN#LKuWO6wk_xo}^JHNbB zSsr%4^K8q1ty$J#`E^43P$x7O^>92MB`=a|xm7uBqaC0+!w!@*%=)Unz@Dt&|H69F z4tT%nV05^u&Wba5$kl^it(G~%6dX}((T9nHsMcIEU_g-(0vi7b=c`(L) zUNzvq_KZ-@|uVf0P`TQ+UP>l-W*F74=8Ack4U3=RQiy z+|HD8!F`Y6y_kOAG!+`_C&k3)QPA$GzDA{8&hlr)Q#iks|9P`1Q8?*z*D-ahaBruP0AJA!#^7qRbE~G;=$j^eZl_d(MJ>=nNH*%{8zoxxcewuuGce}L%v-vu~zx#aQT6+-uvwf>ss}%prE-bMp+JXN5roQL@ z2PF>3saO5K@eRCRP|j5jvqbT)n~mIqby86F{Az~5Qn{V7g75ut^S#?eJaCqu7VMxs zV7JgWMXLh<%+H2r`gu4#TTsFBn@wjkc)l2n9@hBzvwSki<({zMcj|aRJ)qhVwmYMm z%OT3;%(VyF%idXf%H=280sQpRIDpfYL-e+3Rzt3fb~EDYPA1q1)%wcep5x4hsQy!> zjM9$ad8<(lJHzr@pZfZE!{;I}zTmEyor`it- z{63q{stJvS>ruTf72Gnp=Xk%90~Sxvrz0vRhYy;eoIfS(2=2N5-^xA3wVGw!tbntI zc8Y$^^T98}`*b>Mx!n5w$@`OGaN6?EWp;-6Y23<=+|zy=IR8?AChtV6N%6=0k9`bj z4);kh3GP=sr~FIKRFrX^&4zdi|IXIL9bD03waKetmC`P}zJv|c)n+q>{%5nBJM3EZ zG};~a$!5v+zRQYwD9hEVg8y-|Y2?4)fvX22xPbrNy$Ao0p7u@-4h~nuYbR9CdPw|c zyDN@|$8w7uI7%`c(Q$FK84U*T{|GnKpb_6!kBUc0l4a<7<#M^H-YecqI@yeP;JxPV z?v^;=J=)*Af_s`rSz|XkR7mhoyszIU-anUrpJPq@Z(Nf+siIv~lzE;&Oj!~^+OY4$(Zfi?~xzJ`DN z)zUbC%i7fNzocPS@Qp+qu)mLAqU?1S=xla#qjG!n1GE#YhkvYh9`?ZPDX+Qlf;fk; z(>URDvRF)p==sgfx`*<78tuS_YDkF>D6ZwX{G_>)b9ln9r}QWGL+|c*&a7{m{eA5Q zm(%}W*`IdUmwO$iO7qfxD<3D%g zo@N{T9~$?{`(%=$wC@Q~e{dfBbGaSM+!k>_J<(6gKlhi&$#iypuI_YL4nKW5Bpe?8 z*K7Rhv$B&V@;CRn!9UeNJYIZ0{X=uBa<~jX{UwWy(~Z|B>iGX$8K-~Qzr7^>&%b2% z;GFgFUwnz5Ua7e8U#p+sFFoF5H6E*jeeA&JRn_|aqI#`8`n-5n(y(&;ym4QvT$k|+ z4K?RJma8Rv7f*Nj$$i1E<=*Ahgk}c!)dauWm3ykOP#gLS$!U5L{u;&35vQf_Kb!aH z=k1S1t0CMUK76x~f4U$2;wXQV{C!r+|Aq^$9_890+an;a zumjlT9s3J(-)HtC)?OD%7`7w-gqz|2tuO5W?O-MMn2&zT|F~bbb^yCjpU^#?CuMCr zo1ydz*bn}>{wDb}W$|hS_t*pc`+s5w*6Z;=-dTu?H|J`Dx#?j~UJ=+2(E;b-d}lj9pxa) zKgFHT<9asVUwb`GGv&O)Q=aP*&aodY?^`{MxIgRz@jv`GoG=X~J~>I^dE<{x{`89a zEYcIg{8@5Z7u-jw?jMXs6@H(7{GI+k{0W>-Aia`*c&KUb`d8ci-P*WU|5tY8gXb6g zTc2?M)VKnDw&Hc-_w$`VZQ#97ExK#P;&Px0lKP1PkDOb6XqhBRGTqUHOB1{K?Y#6uX4_ z#=dN!w9=|Id<&XBx@A@cyp8E^_X}4Ro z3=aK5{+s63<;I`J2|UhO1^;m!^dl%w>y!HU4hK<__v854z5iF2EKqSDolrYYaL@fV zE&r`{so(l6dBSNL?EsHuCnZAI-QC$qu>-7b(ocKk6L{=>+V%(3{{DC@_ct_%@c-qX zH}alr>{7x6xu zPor!y_)}QQhlio!qzp9&)(%x%gX_j?ETm3~G3p+7Go-X|{rx1HVH;JW#Sj{3J8>){`8%L=8w8?LKb6x=U%iOZVEKZl{;Pn^&CTJGl@ zhx;L&jJ>;$`>P4nM!XaKpRx7R-39csdUAPr{y_d$oBjQSdM=8(R+}+p`d?lbdbC(B zSIKeji0=Ptc$6N2?W~92r@YJ`4IjbRY=~cPa8Lz&M_ho;o7;Z=-taw|bC$<);#m2& zzKIv^?k>;CBRraRyPf)^qTf#*;G{anFYU;G=K0~B`)%U@I|v^qA5twWPd<$CgIGU_ z?dX=Rv;%YML*+4%7f7CvZn#ZRIB0rhTF!6o?%*BkMVyQs@F)Lc>eK$f`sSQ`K5+mC zkn;&3sVnSQ@SYGa!8sMXQAq?g73y&c^lm*xiwpR~|I>eW`HyOTuoHGc%S?O_&jEXMy;EVmy3c=G?cS^p^yJ3zk(&grJERSw(w zdnzWl_xZy8?Rvh4e*Q^W?o?mapX2r$H8}pf`uyNm4;OMzyI9o~{Oh+-`X$(b`dJQ` zl%MVY54q=lxKW}4+8^t=FU(ZG#?CdH33-m1W<*{}?!mq$PD%g>{tKEx)L(ype<1gZ z1?^n!`Pu(!n$ae~@6-O5s_nA}|GRthb&CHV^E`)-di3*my4ZpDmMi>1@IJk3HJhu% z_rwK5{Qi7Sf8jms?aY1y-RuthAK6clf0`T7dwq->`-5sdZ{q;@KF$bmlaEv40vrhC zf`+G-pUlYvBp*`UO_be_d?Cek@`UjMIwES)A-?2D9eM<5nLgR!!n6Z(8c<5VAf;aA z{)PYm-WfkD>Ce;u@9cEytBQF4-SF>LDCG<#f-dT;N}fz&UXdycZ|5R(L9~o8+5_uZd@490xNToE2QKydn7KA>5MZhTGe9%RTme8r)-V z^X>H&VF$Da;s0Zt^6t0zMfUSJZ|lR~EPiABV7v+U(VtNVgYm%g;pU=Wz-34LfzH$I zb@a|s@{OBig3{huo<#p96oVAH!LGA@N`r}Z%y1++S(Ov=A2spq4DORNI(i-XUy%lt z587YwLcJ|3xQTkl?|c0PJl*i%<^CE&U(xT6ei=%)D(pak!Iyvf{p8_WJD?i(7w!1p z6npR`c52!B`{r)z?_2KgZsh*UUHc{Y`DpKQPyeq*sfRJk8P8iaHT>gWgZs^BG?stz zkGt|uSQmDH?!$h~eNEoH*{JN_c)tuI82?27riOppi}lkdpsTT$?7uO7;{HEFKYCJf zo&vw`{&1hm6@H)QAKcp?l7H8yN4-a+X>-+j>^(~H|GTpueD7-y-s|D-cgo>=!~gzn zMtfnol^72xpdF{x5hhKe+-|tS(E4U{Q4#ySt2m7QQpg{)zZ5+V$@!a7a z_uKOR-S=#F&wuh^~q#yg-d&UKnQ~CvTeM`Lw>k zUoGs%<9Ak2AL9h_?|wC$Q!gv|W%zfa;s*u=%e`K?XSYzxL&^-#hsJvN_j+=+hlgo;t-3+kR2PLiL2SeW}LzRmKIi z17%h|Mo*VHyrN_Nk;5H+^gC7iGKB9rc2oW_&socV_Rg07DfZ^~H&18zyYF~j zsQrC))6BIGjGJs$DZDd%;ty)`-4gyC*JM2DS$e_!z9r*2v*t7U1L(kh zICfyMz^=l-^_GYJ1$&S`!$H7%@yzyPJTStr%RTNh>_A4nVHZB1b&31&>-tr=|J>~> z>;dL9)4%hSi1RDf!y#ok+;ZPfzNkMpPLX@-OKk{9!{1LP3w1RbH8o1y-}inn^JQ{X zKh^(*;(+Df{n5#WhNu$mY^Y7BVL7@w9F621yqEIN?Q9bAtT#90+n9Gj-huH~$6ao2 z(4!?A()))~;)0{(QNfYYqx6ySiu@CH^wUSZ_ef7HdMN$q20QTIJ>O9N*TkVH)ujJ_ zba{7qgB~%i`V;x*F){zAI=-Q!W&BTdueAdlKKLgdga3+nptTEh^X6~I1?_e%|Mzy_ zt$5(X_%o$HfSYSl?En{oJ}J2oy#A9tz^^ZolDO?w-NR7TOit+%>l@*Pp6L zhGM77G`(v5qP(2*+-l2Z7(mjf~}A zeqXI`l@^EfD+bmhBGg@lf=^OWgVb05Pq z<9f?khj9pazUQCo4Lg8cTN(#23=!iB&G&6wfJA&ixV{7b7r6a}94{x6LXHRH74w+n zx(ME_57&F16#l`TxS#cp8K-4?&v&oMRf@gFj}Qk;r}OZWn5p1LKPUftd)RaGXW+0b zP%bCt0~I;-iyasr9Q-nWHVnHkgnQh?ZEFXn^MZJw+s!&{eh|*9qPo0!@StcpZYos! zsXr&o?Z|ob--G*di5)P%H%^|*J>yyQL-bcF?Q7)q6$FIZE3eD4aieiPS2vM+<3-i= z33(3_-11MeEaiX6ucqIRtZK$jv1$wXAB{$Xgm|AaOW}XL?(6r>U&y`oLBCJ$D$(zI zd^vZ2%Z^XA+-LJG|C1i;^^fvTHj4dvkH{~OHyA!*{y;gz|1Zn({o-h7zJHd({g~r8 zkBF;hJ|UcczwWD9Lw%yfs?|=mcOLNp?X`k`#wW+x0d~K)1O0?~!yEQfS$v~i;Bv?x zGM)fmD$|1S`q%*iW9YC#}?_V-_H)IIv&^37?3cdzSj%H#`%@Yv2z#2vA|7d&$R7tL$N zC(wcZAMMleP?2$p62E`fgID5~%{{+r&V{RX^Fy(VYQc$AR_~CkEaAB^pA4>S=T&fz!J+JY@}ji^s~pX`d(0OcJ_WZ4`a^th zdHG;3kAA|KxS)Dwd<6f`aCg%-ZZAK9`*w<@QP{C=n7xToboU;gQKYX=JQON^r? zCv^8m34WjOERp}k!n_~+W6$N^=leGQY}NUJf4GnM40U|Bem_O&e_19_H$E8f>(MU& zvw4p)=bsKya6uVAB#qBJBJ%z7W(fbBZc{Lypp(&X&>TOja-G_@@;sVpn71ME&dpupZRuMOTQnjgTA zEGH`c;MqOzZ!68F$*~Jz&*8sdV09Z0tWd{6#?}MXG^ZXe7{0eYwsx?0;d=!=IA!rf z_5QY8|CJxtP8!cINeBerfF6onazCamOn*EM+fi`|%el=B`^7x#g!tI|s-7i3Uj}Df5OY;*X1Ggonlt&t}ZuR--+_GxZVu zb(&2B=g-)D)#_)lT>B{Zn3XN}!TB@u)bdVv>3IE9?AnbwCcr``-0n=iIo`76oOoao z@jv!XYV$u*}>)M@zyt#dCx{+DP<*>>al0rj2W_mNExyHH|K<^J;W?pC$ml*51YXHnd8 zaBh9cJC7~m0uCGY0DBkx0`R}o4q)zgP`PXi?aR3*p9f;+_vuvx1%jq6OT+qd!gx_c4eXHI_!~xoYi)I?*iWh^W z@lSry$ryh`8IPDoyx#d2yto^K5-^K6MaY&ZjvOuXA1S9`hHTJV|!8+}qFB->=|%;`rT`cgFdQ^EZwC{M%dR(ZD_3 zLdv0I{XSQP-zU$^Wx-v{^aV>X)l{pb(8v(<_A zfV9Z`ukFBQ**i+%{_;-sJqr2n(B5+96R>@w9YEH`1Gazp_d4>(2Qa??B^@%ZSZ+KG z|3`3%+FvNK3l(t#d0zN;zNE_V-I{hz9+7+xnz5nn9(x-+5Y9NyfcMgt!T$mK1rO|} z!e>YRN&EG+2e@y>!wSd8)^LAj93cO1=ojR)W4cT5o?mpy8|KgRE4h+;t62q;L2C!d zmk|fJe9M2QjT0LDqWJ{!&m8wBKXKfxIvdmeybjz0<9t8n{qzqN*U9Ef)qHD>-cfJW zY0dnN@i-x_u^x?c7>)`%NS+|-f$_w|`)B@bQLw%JW9`eqVFCZusd?=p@&Sw|nD1kp zKxKRggjhMZ9Xu!U zZ#pl%=l`N6zCJwEpB5Mtbp_uw^W}UF6-qppp!6502Y8>(sh6+=%x6Qvm3*9bf_jB_ z=kuss7W^A$6a{6*;fnC*EN&G~3EwUMtcOp=AF8K>>-`G9o&di5>sP$4XutI5pD>|Y z?u{QqjStA^P2T4`DCXi&-mxF@|53?L?mf<1+;90$7(avS;2vK7hJWJ#!k)+jlp3<* z`hELN_3!KVc|4_xeID2E69-HtxpsipYa<@;`dT|sPUW6_Lh!%4$9REuAnEK4;h+BZ zx(D~hhvWsBSGac>{L3A@&uy2X;s1|F>qVY`+X?O8y1w8&1pIRw7i1N@H#o4${9xJH zX*J^D1qEt<9)Q_GtxP< z>tVbeX`ZJ?SS)}A|5dBF83Syb+!ESOM?Ho#d*v~=D?-$eu?uhMFdLC>y zXQDCt5tr}ns`fX%zj-rXYwse?fb%8u_2E{(y^RBw;n&TpVl6LxZ@c##yTF0vna8r@ z_SaO5y!)J0{eS)(J3zm*NBx=?clqFOQLrEJ1^Gmdw^_Y;2tQAq#;!j#&XzlH4*q7e z1Gyt#`xt$?KUxOI##QpnIK(ED>j{o$ymti8Jdg1Er1ASL-;=!6E$`Mp`^%%eZ^nZ` z@Seag=ewSL$Gp9kdsRD(^@u!vjZ(xOsIT_b*G;oVi4Ql%_op0gKi%@4GJhJol&Hjs z6BYlkQk@@|oTTtU%b?#spTjHh0FN!oQPnZW#|Nh{g$Wy>Qk11D;r&~KP zUTFvDZrU$+pZD6jP=54)pK(OLKW5%Q0{6sc@V|$jm;akfxG)aDUPZrvi3Hk#&d(lP znje&>f^h=gH=I={W#<<-oAp9V4alXKR;}6X@3~AT5RHQoX?skUoPFQfKMxG<= zK-(_8UwOa1<-MBV9XqH}|2fKYd?o+*h20!~h#y+W$Q0lM-7K(Ot0?i|KVez zayuLSwa2gEmS$DT|A=;+1oznUcK#FngXCk$GjW9v`uIX>5CI}F9$8z=DHf@aFqpAnAHU&7Dh|3k4m1)Nh~GgU4N z?z6LZVbohdxt;NWnPh9BkqB9z;SIGSOE#CUpHFh2mkvM%ijwV$FLu=-T8 zMu}Wg4{%(^cLdao1}N8=eg&Q2kk!clqvUT!wTc7aD7-9H6otI=0yxJdPY2KR<5`@e z%*V&Fay_?~=gfDiBMwl#4z9}gtnm9OeqVo|GJlsBpy1!@l5;mx^R2EH#6gss*JU26 zf%w4=ggwaEE9`>y0JCD;@O$FPQT_WW@&odo699%C@WC8c@B6%r4~&E4znf+6yv@J$ z+k<~OP2oMR52gKW;{iCKUvPejy(Vw)4tc{I?Et*?AW4`{$oK(yxfOQdk@Xp6IuynU zT{;dbIOG4r4y;4jKXf|%u7Y>MomGKO7QE4bmgLja6%Rxu{kB!E1OEGc#s5#Y4*!u_^0jqgyYgacYprihG^m9 zU@#sSS2)iQe&h`9bIRB;>`#aD>zC&&5B{A$1;56bDtJb}pK6{b*a2=o#y!oqInH4| zJY_k@jd{{M7y1pv|E!mPB>2bgX9f0$xSIJ1m3h5s#r61|0+s!!hvE#gO@1`4Gp-jL zlZyLbntNG2FO2hv_lt`Xzbx<8gIY|kH|hw$3;Ij;U#y42hl`f~cZ?J8qB-#sZTuyxt6U7b`;mVAzEn<`vU_!0g`0zvn^C4|e39e(k!TKfvW?@@@0UiSzAG7H~b_f(qY5 z<$8yd$Ha4OnfAl-Pl&Hv-eqFi5dH~k@c)d5GyXE9-5dY*@LPoOcPgg|zqESQ#+{k* zKkb&+gKmTSaohiI?k+F26UKq=$2g|kUv&27mmb&lU|h}hM!%ceyOV$Jqs-x-FmGS} znYNP2eN7y%aya_&$;V4Nb_tx%9FIZm_sc)KcPO9cI11JIn{a=MJ&*ZD-{4>?#v8hw z4F6sE-tn#epZiK$h3_ac&WI8=W+;Ao0{6uA7!veqN}yjnukgpWYwW-k-E!5zRj6uMd`>PWIx~+z-oA-^qW+Nbq|%9oT(VJ3^n7bC!R^{<8$$>1T%D$FGHQyJO=3`!VwEb;&(xc$vM9@z3)AK4xkn_wr|%?SgxrawuWxL_5G?I&w}un_HD}`91pw4f88dIDd_u=sm)1H_Ri7c?Co40>`Dl zFyy^q=3x;Z>^^vKlf(aX+U?4JXAfS8>z%i$?lAr!|FpJc0nhHQPB9om`~Ccel);5E z_JICw552=qFi$@Ck$+atdhma9c{#WJQ2!hK3Vz{t#+SS<*ce~3JmS_Qf846`T8Uq2 zE|XZF{5{KQkDJj*dxBLeRCfDJ?sul^J9Nvt+>@t#ts#JyC{m5 zfB34g1IBH&c0h39obTuOezeECu9@G!Jb|oINi0_vHSg!n%lfQ}JRRk;n>FJs&VMSi zvS$7R@8u8bE46>umiwA@y$qkrcrzNOa8G?Q{*Xj}2Y)-^a|F5Ea+%DlGm7K-!*646 zEgSD^5BNu{r=3(!u_MO+s(CE-|1A3J)nq)z|HD0xjV7UAXFC-BM{@SO_y<*;kjI90V?)A0A)$7u@B^SQjwu+M7#nD&Tjx7G3Y zOYA{%jF~Qbe2-qim-gP?IB;Z=l|Jgw8KI;xi00wJkHQ$WJ@Ku)^FpfWu)AAB zO^(uB23$Y+hrI{EKOK+?{<*E!D#NLr3htNSpi-^m3v1d1^G)#YG?Q+PU&nq-*-rgD)|V)GOyXM9?|D?uYj~e# zl%IbyFFPuqk(giyp5q0u55*PcHL1~kz6)TyKz=P(8LupJjuZU~%iovA6^y5rlhC_u zna$em_eXLb&l_dlU~ZYm)K!gtQQpg1ZieXm=7xS2c9#bs|2_wwAMsDFjsP=-f9wSD zetPz&U*kvNpW)br{K|g?_dZAYEipGL#f|(E7Ty$W$MJ)E4)45s-aCHsq-MG8v7S_u zgM)(+`{4~Hsr;|F;ku{_@=KlY_gp}5zWnn_<@hl^XM40ieyI%6@+GvVPuQH?NbI)pIs0LznnP?7(JG zzy={z&mbaCI8gdxQEVpKsnEY^2X;z`>s=XPx1-<{`8FI&?G4D5jQM7d-yM-QE~?N z*nyVc(UxE0E>0Eoh#kl>>`lu*+?&s%{{{bCM(KX?ryi~r{J$=8ObF$I%h*uCv9%|pZmNlBU!7D!!8i_m&pt4gMs~vn)sgh?;2&px_!^`ldVSC?{T@l zzn-_czgc>Hgw0_e2E0fR_JIDf{8KxHdT?;~uz+(8`vdV;*R4NFc^{s6guy@gM9Sp(BCe+0 zhB6$Af5$#xZ{(dcR@edUw!GgmQCZbI%RBpjCjWEpQ|`_Gs&s1(<=^Kdk2xP=Fb=q* zfy)1!hNTjws>l1U8uJIotjEsi@5w{LJBPy#aGm_P9+yv3&dcY2BEH}<68YC4qUH@_ zT##0wn)eIdY2Q)ixwcAk;yRs2c&8Hf?#MacjUEr-z9dcwjr+;9Qxn&ByWAh~0OqiZ z9XKH`aFfeD+-VOm5BGlm2ku+`$@}r1{BM5q@KFBqs$RgmemD46Q|$qH2$qvCzj+Yt zsM+t!H|Jlf@M*ko5%-I}>wUvH{ncw#dp`{R;r?wU&y+_#kampj!&^??Z6Eud8@KB> z;2ZbGI9!E2Aiie2zVZEwlT;|Pl+nrv@PWSv%duu*0OI(EDaJCL)vI%1+k+y{9l@8dVWSu6_p*I(=ZaidG> z_2OMBUVX!YA^k7-Bo9d3Mmvq?R<`dGk)9y$&-;hiIjqBk`VIa^qXYRiZg2fIJXrR= zwF8;+PopgF_Up5(hJUL`?zxLlHlMg1r{#T|*gvc2@0Wln_m`J@St8H;}PX7|#tv}Uqd-af?Jmv+wq4d)x zss5S!+A4lLIpP75C-Ay>9-NQYhKT!n$2`vHZy@FyC=;)9T*uK=>ob&z1FG{3dUDH8 zzuxD7q5I8Ly`zJ#j+VSn;`#x3dilSBSJeEse2>Y?dOU6??n8C?`5o`Aalh8z5T)N> zJiy-(xQV=eEQf#NBzfn#F7)?clF2=BzRUf7&aYD9fBPZ5Gv{0IcLUzG1KbzmDb_&O3M{bD|_&xw!(~$_p z@D(hl{ZNK$>do!`M1`u&AIhoQdA;&Z^IggVTsLZ$8dj+^^{;d{JBx z55Rlz9CO)$^DpQgtgEl;FUIU&qcN{|t8&hH=Ji*}OIA0@*D4c^zfND2%W|2#R9CC? zMe+hKo+K}NG#~oi@f~&A5jw_>X$STLWKINhJMQvdR7-!%?<*j`q-R?R%0DDkgQ;%|w zz0>b^n9nT#g#VG(!=3NQKjr~@07s+IM$WAUHE;EZynFPcIZa1@dh=j!SMCW{hWlFcernt|aXiZO=~&KYg=O&R=>Ma?0QV&oE&t2St3l5) z_A-=y1b*N5gi6%!VHa|4J8yL}cln<6fPEnBnaTfb%K6~;=H>?fiyiR#TAo|(X<)5g zkbCU}_LB9^)1h6$ZSWs{T7I!7H|p*#HvrdJ_CY519F}=^x$_VwYBOIh#|QV9^I2AZRef>G#1mC}n0#G*!EvVYkH1gU zCFgay*IR#;zQi0Y;r=D3m;aagnH0b8_>lbjeB@uAdM{EakbiZv>hYb`0e|pA?)8)E z4Bk~%uM)n?Z|4IIQRaE@ zp4E`=GcC-&FfTZ7;{XBy?EvBTKs&%`CMx+A`tvn;yN9*hyS-|7((+ys2h>};0N>?j zloQ_{3ANv9c`~7X&T9Jm@(E;m!*uNj|>rY)DoH;+C zZU5K>Ik*lUJ&zpFUgU%K-CBPO&fifs{~rF6%ZmATv>UgNyu3U{URy44Tc|QDr#=h0b~F;5^jZonTq zPv8eX4)^%)54g^^?0_7|KjySiF?X5mayr}FwY~P&%x8)AI;9_LyTwn#wI484nNA-5 zo#zgWw=hhuD>#_Qq8xw{4az50SS%Zznr{#&wmR4d}n7llzaB;QI2|s z{|ys$v;6nKw}9T+h($?-fTFewIKYl*j0P4dWj<+nJ}2GKs8K z?Z?aIAl4Jcn|~wDCw_;=oc+}gP?jI9$|cKl`s>*=&bz&?6(2?!#&KG%xtzJ%-|`RD zII>mRi^tJVqv2;m+qlB&d)wc4sXux5I^=uceWHDjiy}X$%PprU9O}<4Z-Rdk9+tV> zsq1M5E8~KU1=x#I?spm7!};)jygt5j$@%oh{ImmX9`<1KXX>FX<8OK{pY$ke=WTx- z>OZHydc%hZa@r?&?$A!JI1KL>=*K3^BP=dfo*&h3+KySz{M!8DwprfWiBQk$@`6az z{(S$I_!G5W(dYANCn@aLbNm|au?MB`{+bj2=8tSN*EEmYe(dsIBh5W zI{Er`eZGgj%qVFSvw&2+5v>|{lw?WJYBhO{knS3`@OoJ?Hs=^xZR}Xeyg#d4p+x4PMk4)pgvH?_;Sa|(}``ArWsepP9nq4po5%yvVUf7j}= zX?|@!4|kZWwllZmHrDd)b*dcZmCATAoRU}Pm%AOn$sxl|!QXGMSKdOgv88f-J zJ@wfBv(LB=_~-h_`wh4Kff%n}k*{y#cND+dY3+b{fIQ-I+nMt}<(=mre&_nL`K$-` zxJ%{>>aRKebLO)WZ>!j?Whni0>;r#qfCvO-esPjVyM8yJJzsVA_V#Sov~tV$?Y$iz zhx_pFXbG?t+~3}=8x^c)a!*`EykCFO@Z9103(VS7zG>Y_8r;*vL%qKG+vIEFpFwcX zapXSZJ*Cw6f4LgN`%Ch&1Nmq3iOTpbe!us^e33f)zt_K251A0DJ&1lM-0N56KkTh` zz;=z2<{zZ=1N^&T$#s3Usf*3+CU^U!t4`_rWoKyWlwbEssYnz;}Ms{Dt$Y3^=*o@dfs$tlcS$ z7dmWz?0ij?&rpP2`Gf&&{}0^TpO%08@Hap3{ucMt|91XP7W_wjVF%zFyYOSbpXqmh(H`t} zI=g9bN&W~suw)07I0C;Y_v7&A>p$J@zs)}sO(;Jy|KmKmqFgRi-1}7iJ+J)px>0Ay z@#RH6H#~usH_uaGf8Yt_b_d!4%nRT1k@t5q^q8+%6b1Y1uicKr&RuUiQ zcYngnXybYU3GIOU{is8@&tn{Ff1e&F+|y5AtK4@s zaSvrqdBpgGO4ze;yQRm2^CfN(?j5J!$%*HUYog2qLF0X<5B2Teb6;>@JomZl|EZ^l z`ycFejpx6(VSF@2yWQ?ofA0Gty|2@+$K-ud_-FUN+!vh4<;+*TOW_}US8`9hovYTL z-248B+`}DlLGOjPW8)${Tr*Of1yMwL2U&}qG-zE#`S*hVhW~~Be(~mTR2O_lpNU&4c*Nh;U^tlZF*5f_ z%Q??;uD`e5_4mxf;d^xX@2!_4=Ij2bt|xtyw03|zsr>KKKY_2sVp6K^x7GPD^7h6J zJ(sUi^!B#>ZvTYwPdV=}%q#bc|ZsVI0@^LatYv&}B2;@(*_f z_J;P=+JRLb-{Y{HA7Mvxl{95pp@hpHRJ@;id)rXPZmh`5s8r+IO8v+8|3-(4IzOqH z_kbOTbMp@<-?wQta?ftq2kZ>yLv8qw^AOE;83%!H^LzMZ`GtG*HU5O<@q9xk@NQY2 zhbIhkquPNYSC_UymJNUJf0tA(}B>U_11^n<4EIcfTwDv%T)F+^;cQs{L#g$+QDpXOUCp{=*KC zKgx3L0~KAw`u}h3aG=WV%$s8e{NADdpYmDoPh67_&(n>(>!IO~u>;(1N8Z6(?q4pM zZl^|m2<5O@4?94+Fb<&KUli%fA^x9!G>ZRg^!Mk}@&lFl!Et~Wm=U>m`&8BcvNV?e zsN@Ck^YV|quT}E&eM-?Ex}P_s9nen5J?R4MaK$`r$4hwF{^8dV7j~zG|@xmbd)4q$h`CkB%{M$dQi-hm8Y*yy;yf3*g zFlZ`nkbXXTO&k>vJxZiku z2&X*0;F{YbjwkM?-=TUQxi`O}8V?rQfzPx9C=+e!{b{ zMAKH`-u6vJoix^^YY-2c{pG&l7H&0q5Ykax0qFJ`L%YS+nw>=aE$Nuhvenu487ug zrLKIhaTLM5{R7Gw&57lV$75H}&hGi0%3|$6Xn|r^=GcKR__HiGDqO8vyFfp-sFC-mQM*KhMrcmn^um%eu*_Z&A=dpx9U9(u@n?E(J% zWq-WE?+;%@-UJ=v59MAiRodUgIKcc(s`A}5`9By1;)B=*Tl1T?Xg0Be}O7Y*qiieIGZGYvTaNp|K_!TT)hR4kA8J5+dY`6qwe+5!A_&Uha4o%HM24HYSq59{Op z9p5id*)jRJK7NH`wTwAg*2l>Qwk!Ex@Lqle?_O_lQrn+@?R&g5rxHD3`fF017UuJp z6})@=0%ba8F=RRJ7oOqO_7(i*Du35_HBsr8ZdBuFb@oZ9^_*FzJ@UTP@Wk;umHuVe zkrjU0GR@-NZp8Ms5B)xVn(;s0)3HB_LpvP>$~+!2cfpTRT8~ z%;evECRX5i`N0R|`|~gO`$K!xSH%~17{(g4KU9(Tqdz>>|6||D`#Fz?d7W?jf392Z z@gqBM{x$j1wb~Fz^uEqth9CWU_>$L8`*KZ~l7y1b8^XVNxgOfbKg&Pk0*m3+-^;zj zeBu8AOf|mj5eK-R+;jTi-?+iDc6aOl7tRCVHnNKNANLsi7xiLg{o~h}A7OldOri0a%S3F3Szu(;Q|4uRqJHT;&umkYl;riv4)8nTT z-Y1)Va?k%?>sNJvnB#?^UkDINf=N z5wFj%7nY$o;&jY==pFvp<(QZ7<9Ezg(XZ2==*T&brK_@AQpexv;qUQb2RP44d+-mf0x4@ucz>SJo)%f$PW^i6An*? zmN7#^%IHLY&3QMiGX5yPl;xkxOVAU{OepTDh_d@@SFjWL>Ckb%GW2d9<-a38Cifh- zQT5~UUp^*YK{FbL{L^jjSF}Isg>mV^zYBCz&|Y!(nf>=0CL$E{-)-MHepr@4$agm6p4%lJXf?+!cz^Q0U;?C^d%Pa~ee;`^jSqS+)9diZ^!sruS@3VZ z&pZGZmcYODE&m*6so!5L7Pa+Bb=_9@f6{#8;2%RH|HjQd>L0U4Ubc6(z)u_B69&}k z7<=+I|JaW=$yM6=XZRoUJ|w(rrs6w6Th+YCE&heSGX<~Cr;^`>9pu{Yf$8@#gGmDS zT*s2-w*RqZ?CqTGosX{)-*R6ZXZgBShFJ#kZ+kEf;5M4z-}`}o@=@X6xs1$mNqdv` zJ`=c9?V{>(c_%LMy?Olq-*+Jv06YWx{KI zHaz<+_7puO?^lE}03+7}>{{?W-`!D(R-)X^-VM#UEzWn^|82`VY3bLN8Ll?&ClAmn z%{KG;*xKtoV>$g$-oKg8%}d8PVaq@Lck=T*_Q=;Q3jKQVyo>*qV@{W72VTEk|JE}6 z9BKy`MjQn9+AI0zI??AH>T^i^fJDE*`5^Akbv8N5??&F&YsPI*?Od+n|MRbhUtI3Rh@!yoN{_JH-+0j9q=?nj=G_!r)bd;<5_1Ag*PSRDKl zZy(A({gH{>Yd_FaiwU=ia+CG(vUIi^9Y^lRX}CLh4{Gq3LhuAkEJt5@0wzMlhd z+5zf+r{{jn8at3iKS1umb&hI>3Y7SM5&oas3jS#}!N1?#lmBQh@P6)hCFQ+;v!~w9 zqYU@0zsKDN{|@iK`4N{fgJ1ds%~YLkIreyRO||m%nipMFUHAfx>8V97x8J9X<73~n1NblOLJ|JICeA0k=6%-c z^!)t6-j=6%p?|f4h^tBW4s!a{eG&n~RwLizY2=@@75zf&19`UsJJ50q=Ny2taYAqm zF5%CuU-}uRysx;D@4Ic>VLV^SJvSQ4emU1gUOko*Kh5CYc!2fvKX($^XYfA{KZU
GBkcvtJNdWyS3ZXdmEYpq>Z>s~UVU4CwWMAu#`PT+k$+xiyiL(A7t&+A56oxj zzxBSx?Ci^bx0`k3o^jCg{Of{z01r_APlc)+cUj0kiAwpWR`cP@{KW@c2xa5@HV&v= z-sS=1okaQ@)i_Tbk47W;hpUOYS{)wf_jAsdyr_xy@uSx<-nXfl4|FgZ4dkD=V5L96 z&5v6C;e_X|pC%q8zqfiL_p}P;bti1Mf@`>EppB(xT*gY?ttXfBxT7Di`~ZK(db_d7 zS<3S+my}Ow4~!pU2eeCYOjxq4i-h;i@9yNE?K*0Q?a|*aX((#O^Gb;m<^;fM#6j}E zzWc5G&-V8A94qB^o zxQ6DV2E(nNr~e1<_B^!Y^Hs@8y@Xd`zO!?V5Ra*LDHt_zBdwhxS4kvy^YP z@;y4^`S{+J?=8wdPn&*4!E*9%p}*_PH`~E`VLQ;z^L`NRKkPtTcD$VB^fSrJ!9V;o z+5z*C6@H7)6HVnlzE6T;$EWho<60N3A79FUG2uRNzvF#*N`HXEP34_DU2reYmN7r({T=^z9#Hi6<(@d+@0u`w|KPyqN&5=^Nhhv| z@6Na_^EGD&hs>XWf6`46_xt{@cEIm$$@PSZ)N+qm8HB&bUZ~$wudXM5GE3-Ba(zqr zU(vsodk$~^|J1*mB>&WMsQEJO0J~!sf_vkDkMx(S{xN}T;+F#c_4APrjN=jSFDT1D z=HxYTKk@edSni4U$?qkOtCOcs>95ltgZt@>@h^0T2d>}$#U+2Q4BmO2ds?8lgEnsu z5Av^l(|f;zqejz%WrUxJ?PZ-+pTw&b6fm<9h9HjZ#Fako`(GdxNZLqXKES0 z2j|4|+z-4j%g2vZ%+*Tntq*nV`N9sMAJ-=wK36gO2NmD5!ClSdUw>e^WBdwF364UZ zXn)v&{Gwhg_`Xx&{14{OlIP{TDl*AgPW9$FywQx773Bd20FAi8_JTDvZX}*#o{Suq z6aFqAd@s2#6+32mN(IDn`W0=tRl@x!W49i=oX>4yPr@!_l+We_)}ANhf>h$`O#ZEZ zt^;SvlFL-{v{BGIWfdYHb`@)W?{9`w6tGswwy~r3)%h8wz^|E-;;qNi!!~w=n`HSI; z#ezHw{O4YO%m*N!jUDi~;rGp_!~JO7j`!)Wlk3Xoy9)ltgMr-hc#DemKpYbF>-FW- zGu6J%wey}2{^e8tYnqwb-~Xor`RDcik$kV1z#7~)o6p*Lzhu1N-~C-ryuOxy9xr}B z4g1gjj05#=<=^L~+D~uoK-o!|4@7e*EgK)H^iyNKfA<&ePyXQ_!p}Q?ePcg=!u6~C zd0+Yo%m<{xz_Is#ufaF=15ULAeouO95AOF*Ka?|g z{}3)Zav${)+|NI2`KKN%V;@8LNBX3W`Fa)KuL~~VecFXTzH4Luq&V|CHpH#`T^{05 z{CUCn4t_}P`Ke{b1zj<3)_(pK^JMv1z9jHNFT#Gn8{swm?T8z(2Ni#3aEcwa<^z8EMQ#jvCJs*HP~! z&m)KT@kl$s^s9&R|EpjA@|W_@?Go>&ejjBj|6G3-c7XP&j`dsczi#Fk>hqq+zwusc z2lx&OPrK>CJ^hrWYCUQP zRM#_ol{mpN^LyYQbLM+D5y#8D-3_?M4-=oE&I^`%%=uk)f;Qy&7+=Fr;J1ro+)ft! z6Ib2aftG*fJIa6X9(DlklMmSqO+S26et>_kkLOf~Wki4f;S65n9yBqPQ{Cuk4 zkGP-BI@p0H^bh%e`Z00FPV%HawI7*4e82x|xr;ns)pFmJAM%&H|7JgWnicTQxEUPf z7xs5iz7LZp@WcH1W~TD}NZ*sWBL2xJ$NO*gx4jPIZt|=9^3UJlUD%F{GfGjm&;JhNGRPh>{ZJ@+;jb{y`o-jx$284{&mRp z-V$%-i~|y-Q(AF$;gzVG9Lzp?}Hx-b7e-!1=7^d z404pq=&Rt5-_O6A@`um059GIa൏u$o87pO_E*IzlWcQhKlOkZMNW<&fqwN}9Y zi`V39l*5)}!+MUh+ut&pb)(0DmWaDfga6efW^`!vDjE|Hr}q zL)Y89Mv|rJo`!mp6IO1(*G5Lpp$NvnVX9}BqA42TRo$KB`md(D-Zbw9L-Cyu#& z96RSc&-q^1$Nj8-cu%_uj5v{T0E#920My9&0Z%jH!t$Tf zA|2-&4`3j`-^aYaNPX0~2;n?G^aNcXUrGKneaiZb{nT-0%BMgF7>0WX5*P3JFTZm5 z4*XjF+aERE@!TSGprap<|2Z4*qF)q$W?pSm1kb4l@OuQXGL1hVVh(=t${70G>=y~5TU!HaE+wIu%$wlmkgF8-tApC)_D}&kj zo$U%U7XBsMd5%0`T2vtq7F1o!*_#9zH4JYpZP%OLJr1$Dj=^zoIsrE4_qye80V!Qz~eIc-w^nd z|IeO;{bycKJx2$wrgcA#NZcXP&Py$s2T+z(UEP#72M6>MLFbD(PWV6JA1;_5aQM5& zkLCaI(JJQo{@woH|GjZ7z@0OJ4SI5-Y~j>J5GV;lwfzow(0{Wsn$@70yyKYoO`*}i`talj3_#Cbfn&OyRW z??vXPZvCC{Vdf1c{5}uuL=AnWU=HA`F?lKes17A zqrK9v#{P}v|9}pHyoYzg1fDv79G?F3XBbkE_}CdV;u_CSXF z@iWi`x>2q#!QEqj8Gb*;zWDnc&jbI+3)|i-hXuUmeto=OT_WA_SP?ToTAkoNoKHJE zE_olC-+2KBpHB<&MP%wCKZUMacu#)?Jtw~Jx=%4Lu><_?y#-;oH13}U>p9QG@X}zu2FX%6p?DK~JF#iwx zx+=lnA}|H>|5xm@Du0*AL<(Z{g7@a6h>XWFD$<3FevLHwKQjX9YZGo70$w!u-nA zG`E|Up#$8Pd2kbmTzOPs7pD%#(_w*=ilw@`VXvY3j2=kf$OmIdGMR`v(=KgE*SHe z;eW;Bk~)2c-}^|rAJ4*SkpNr)rZ3Jg?BmeVR(|Ir@8HG3vc=EFm?`m@9j;GMxVv;ST{nhXeSo{ebtybNE|{G?OlLfc9-V=C6TcPB1;%{wT(HbRarcq6^wT zc>na1ed_IL#eOwY(iQ$fS6Ao&_N88k&fDSmnirJ!KY$D3YQ_;0_^y8vsDXypoW3Wb z8dZ;Yu93#C4@B=k=nZ?*f95ffHVy#4|9OssQNVMbPda#B@IT^en-ttqk11Cg{}dbR z6`T);nfAW4z(LA!8vLKnzm)&{4dg%chyN}1k@tf4s2sYmkRR}Raf$3zMARMxW{TH}ZbxPXr6X&G4e1;BO$iEc+qu(p^fO$o;c?k~q0p8nxAT81k zcX~i?;OgLD$T|Vul>YeQs=dHmVvk$=j~6czct~wc;p3%o!4#gVFF88ky2upX6A!s7 zz;pW5IlMVK!T#Cg)xehm5lx_Vx!3lV>&zhQhS=A{PWuM#&iJ%{&C=g?aI zX9^O$CvFzJr+J1yPCc#R_p>|VhzY-7?-~(11v`^xgstbn|BUi~_Oo55_%nHazPc~3dkJ#M>{Q?kqV;YW#t<7`lZ0w;iAZ zFOP`}FW}dw+*f>o&{)6G9|u=k=Fz}=^`z(h>=!x!V=)V~;tR|P{4W_dhmT?z?coA< zU}Jhi|Gp&NPVv*9?hzhbSRekb{pD`qcT_yDTP>H|_Y}8uQ-ZF$?(wci@@qQo2fBX+ z?U3;YTAIACYwQyCp1&gO6Z3XRBd2`Nwv7G5X-B7ozYb}Krz|V|AnzM)m|i5IU*N^Z zv=jJm8lL}z7i_nL9}qfF=NBpYKWIc=U%%j@#;;Zf-0!gGzw3k00qs8T&HZNbpM9v< zuXl0r4{R8kTrMv7xk)bDczyyumsQ&(@D^Ew|H&C)lo`CegQUy#-q-*IyO zkoB>@&wdQl4>A|ucY`oy=jUgvHs<;I?<;^ z`0jBEl=EMXaA@H@x-cKef3g*ECT>3<&SAWPI46h>!u#i=S1;z`4D;O*H|H*;2pzGm z*nb`bK64)$`DcGwq?qV;C(q{iDd~=vJq{9iOPFI0{xg>cuN@cbdC&O5vx58GzbNEC ze|aF^#SMHvGu<@j>lD8jXm4}!!+jdZ?d3my8^7zKK0<{?E2Qq@ZyId5Dgza}Zv|{vGk0pX@ojryo+lTZ-|&>~OO~{erXZ z$L)P_mY-4G;~bu=cOu=)Mx5;rVm~m#1L#e9<~#$Ri~N!w?Ei!~)&=7P@YDS1?|%${=b31HUY=6SVYlb?lP5WLy`uu<^9F&I_xhhA?>`V3ZQ&C>#j`a! zSJdS*+Q&Kvk=q7;pvFBrN>6g`yKY4PxpnZ$QM0+GoX{cHZT`?xLeexXi+ zmDqvy^Y|U49okMQ&b8PyeHt1zq%V$eVCAp<2$AW@@LYZ~Ziv6jb*_)SA}%=jr5{W< zYvggvXZ%hWts#9uwoHe91R_x0k8)5KxNjL~cdaBpp%=CXHZm$j+J)_Ja?E@*c#b>$ zL7c7*gZ~@+W7{D*)r#f|7RSC9;@t6N`0jkfK!id5`yROXkD9S72X34F)8HjXpTZX~~x!9m!2WHmGW;RE|bgV>`;Q%$Am zp6}@y%goLbdGGszW3Yw)nB$R1lJlRAQKQmz!7NHg^K#lb=LQGtFEce=-)isRhp0v$aUx&5B^pZQ%d>YIH+ zO-KJR5JO?Rz)ueTL$}0sj2Rt@W7pS3J0B#J_o?gVlgkDDh%WfAAJD>!dccL3?J4U~ z8Zh*O`k?>G3GfKsV^{U3IWLg^Xm1_QKS}G!n0g5N`%b&>S)l`>{I?uMnnU>ajL$6P z|9Cv!%6G>DMD;@SI(g4xuMC2{}ZFh42kE#;rX``K`?m!G63>M+kg3I7XZ zI+pXh<@eXLs*@pq@_#U>XMK4*@c+rca#C+-r_t`Kz&`$GzD+YvXhwNkA64)kJ&@0b zIEco-Jx`o~1&H~5;Qw@|1KRZ~?TVKJk&}AfY`^K4U+c-SZ0crlEa`1IB*}?9G&c_kwmeo*YjsZ}r9a z<&ge`2+uS5@BStU{D z9B`LLm(T&qABW%aR}a7w-z)j4e9;45B!y?q!2rJ-=QtC!!(9y@<$K_G%sfMQPqyH* zNPWQLn)zJ?yym=(d}sT%*#qw@e%D_T`CSbCC{D`y6@o3&-y0Ms`3d96AFOY}L+3f| zfcCsfwEJ8A8|^>34f0;m-pJrHb+o~1;#iVdH@fOsYmwRa2_5y!i8Qp{qXp)I5>FmN}k{I z-ts^64z#?yAM^Uq1Lox;m<8>F*X-nb)qM!wZ#Ls`PTJ?obDBjdve~?GrqhV0f@I@3 zrC*A>1MgFKiGL5Gt8;k%pLlQi4h|}h6Itm*cr+7@yK{HvKN7b}PY=++oc=DYa+C&@=y^|E}<_Fv4ypx?=TD*Q{@AN|dkzu4yW=s(85dYZ9FXs=ZEWA$@3~&& zuhrg@4kYbynvFcUU|g?+Kg54FEBJJQoj;_V*sqJY(D>*-E~^W5pvEt&PGdd>_M6>) zk`f$^Tl_e9{?2|OxYGglyNmUf#?fpCpJ1MCC-j3^w;^uB&Kw*Ju^&DU`+if!^$XJ6 z#{E~kFSv;BqP15G+Cg2DPueevLH=3KL%g-U2#5SSxrATy1PnhOoN$5Z&%hLwQ$RYx^vtUvyTUpqupX%9Hc+`7l2#PMR710MDnJ zQl+6!*&glS>>m#w7q%Ok{OD27*M6TJ!d}D$3)a=|?FS}2fb`?z zp4azx=oTC7>cAYwuh)Ya z{9e4YoC9f5@_&VJiS<|TRh{RrJxxz0v^RACa~u8ub^@J9ev13oHStfpK&wJvK@RD@2hvd4w81n$y%>}~&OZi4pyK&K0jvrU-rx^Y7iLWbLLUe9>quadBj`Lg}P7&Y^T^`=0|rqemd_vmH+lP0^Mi=th~ zf1)R)Xxx%|g!dFQ=zAuY=sAYe`qUnY%vbNM$CCRks6YD?)Dygi|AEv?k7uR)=kI5< zetCcDISb4$lDZ0>YA;LmorUs6)Gu))_{_YO#0U{gdzqXl6UUGoHio&pu=R3}`$wJgTXxf1I8J}?4h49n7>-sPry%UPb+jB z{xL6a@X4!@NcVU@A--$eF!X>2wCKQtzxp*qmhXdldnbNajUUN-%SGPP&5wRQe)zrZ zf_&LN7zbrsi*ZR_m+zEfFLB&FetgtTZ6`~bmB_r{sXE|!)eaZhWBo{Q4iQDW(csmV zaYy-kcg{FE2w&Jo0epuYlIPgb(zLo_8pppPt$h^9-jwxK9B<}a7xS^<{muQW7ylst zF<*Q?rS-m9U`M-V-u0Lp!DsekW8NJ|w^?3a6Q?`K*^kNjeSut!*{A(1EY8?*+PGJW@ki^C_z&Y+3&yGS^NGjJ$REgiWTNjG z$9WIY`JV7w{@dRVT`55CD{3zbbR+zJ`25b})Nh6^^t>;p@}71$OF`>5eVyNYii4Kl zq*r?%KdV#b9T|G7uYfEf7=kTBMpB32o<d}kWPR^;))e~P`%U#B z6>&%S|3#Dohzv0AtYjZ_{6BS|S<_#T|JyrtVNjz7V2me5zX9EV|D*4>_u(&K@6`h? zpS9{jR)Y)u0^$ki!M344(Gpic_wfU9I3vzTwt784VB~+47wsaWKLhW>PKchT4$w_o z$^UycP8AssxYxhtx<>xf?566$p7*_4;J4!_!+XYu;CIhI_o)gQ}e{OvCI?fv1q_E_EOVs;45& z>ab)UHqB~Up#x*|u!4v9%fU~|rGwYZv)D{Uo+rv@CQW;wwCluw*>%UVG(v_>bzq*YFa&9OL-sAp4G~1D8ClOyNB; z>A0?Ov_75#FDmMhValci(U0Ig=05BBUM>Tx&7;72`&}RtRQun#GyJ9*RHW5|x(fSW zbDu~*6LCw_gDd8rY~+8;W56G<-`w+_@A$kQ&;d|;AMrb0GZ0zU?mx%MOmh%9g5U5QUdwm<`}^QM z6)5lN_F&&Z{^a{wyP+S?hL^#6;)tZN<6YQ!RF(PV`4{Bd^S&TovEOM$+T$fBsskJz zsRKM#e}L;7zOy1yo?u2GrexkJ(=+KmR2*mD6Lf&^-dEuB^225<4l?2gp$mIMbpUr@ ztqyoU;|J%j?jnwWKN0aoWGMVUczoAhJn;Sj9Yz z3GsYTyCUC>52^z^c9y;=ZjEo29LEium!$2-6mQB~wkH`?=s@_r?9Z@VG7t8;WPeB2 z1;GCa9cuV_xvhe?XA>5#%KMVXiuQlx_1&w31Cd@h{z7#&x!*ooz+3OzBk>RIJsA{% zjN_Nub?&boS0c10UC{5?A=ek2Z#ynI-ogL!GQXtXJazu)=uh-xL0)UF-KYH%*X;Rk zf1hkd+;6!$I?|q>V}IpqANMb=K5UqeewAzY*-t|pWb&8l3wy4gE3XN2sTa{63hrY* zAJYC#{v)2xbtA9Gj)eWE8*(K7U!0#e@*XoeO<%X)LYEb+|28Svr$VeZ6aJ0+wBIBb zOYH_Yp&yi@1MUw1p7I#_=ZW*tR@(gzLoFiH6ZubEvr6DQ`Pc^Dj{_%@@ksuAT>g{R zuYZmkq+kD><~5N2o9`K?#LnZ5u(mAQLI?IT`V9;6zp$T`Yt#d7Go$`l=W)lppVsw}4ZJ>MT3U}mh$F(et^*APp}QGcMJoX`Wd zhn}ee%%eaDQsQUKW4vyu4;nbw$un?H`)lDne(Al)W4Gu5ex3YIZXHL_UX#qkj@OsJ zG-K>{`x?JG5dRLIx3BScwu`?eZ@f>B^;Z5j5Txa}>z}+%H$a|Ow0n`_<2y^~t^JG? zT|ia`;2YwvANNT8y-DBj-S0v1CVxY}=LL9c{G)>Z#vjW!)h)N*R=4Htd$L)^el3ja zg7^*Z7uVHg$ATkq0#DI{u*>q4xWH8OJr<^$2CQ6%ITxLWB$B-Wcsb^^tINgNlyWdl zv+e?kV{;$ucj(Ilo*D0p=TMM=Tvu{G+XFgq`M9m(`w{2rF8p`iM)1EPu#ewg0>S^1 zm0cGl^Lg84fgK;w|C6tWe0L?sKKJWobN0cXuH-+>W9xBVBlgR}jfCep?SSucaJ}{K z_0UE8f5pB$o!D*Qm-oXy;P<9rRxe0Tuvei2yk~OJE?7rI#B%C_En+>83K+D{F%>3HX!|jWWPiY)a{bE0o8LPIuB6( z&)8Q@%rbr_Zg{S45Rb^P_rwwC7wiq>zkW?0Kb)xp#z*#O2aM;=*Qs$o2%f<6F@N&@ z9>-Z+O+b$07i$0Qe`et2$^iB?>z11JIwhVq`hIF0{rY~6e+_Ei;`n$;T)j0O7yBU^ zj!)q`ez1Ie!(;pon)qFh_VU_&<5Kuf@q`Y%qnWD*@CDwd=s~^mJhq=0_1B|o z-0uY+UIyX2{N_IBggj>%QWr>IL40)%@8708XFHewpA3hC@@?@3y3DIL;-m)LdV|kekK1xWRz2^cE$QJP2`?i-0 z{Bzlg0`o`~HE)(qk@$riJ-PHy2LR#%L&F7W;{p4VOAkT4=r)lsUzbWEx^v?r7h5zzB z8|3hpe8;|7n`K)Dzu{jI*TJLSPgr@JX$Et#nP-F4-@nZEa{T%VKU&`7*H3!8U(XZL zzPCDn-CHO41FnCR|MW7@f%Y5XoSpoyN+$YzgS{u6VE+#f9q0c=yl+DLAl|2akoUfq zcK^Fa_v0M?t78d#M<#l^Pkn~nKR6ivlK1>Pk$>Yc^K9WYy7jP*9Dm?vzn*!ucki)_=ivIrIner!me5;x`P; z*F7Cr`R}~Yl67vO6Y!s(o#*~?|5v{{Sit{RG-z>vU6B7wGeQs00fZ*e57-jlCqD2w zev>$$9f`3H3En$TI0wCdN_>fU!kO&}`VLa;3hNcuIdSqW1)LHu!@V2j#?PQ@t{*P( zv8&8um7lk>fjWRaw?4ql$NVRFct6VD%6s~Offz)Nqoa2zX~NBMUc!fYJw9DgUmVw8 z5Rs{sXn!K-ckFqSzRgL~uLq4E2L5OGZu$rG9Ar2G-sf-h6Xd_~>hf**1~+G;4iJw- z52{<5^#;3tOS2e)*A~+P{&(~{Mg7ar0otdC|2q{ij{|u-;Jp{}mcPYiduIMy(p;}D zz$cqvb3_~$9>*69a>HSJdZtLO5*!VrnZt3=w< zzSnh3o5)}5A22RTd~fFbRF2oYKX(2~Jx=V`-^uILcrJ1O_FH6NBi|=nsNJW#QTNFC zq>qk{Hyow^QBFyJL;rl0T(#dYuX|4&ApMW>Kl&5F|18U~``m7VU3a_=`=7F}5cv;3 zpK%6wul*IHonY_p*k~w+S7Dz)bYU#-UB@aPD+nvr^o%*qepBB~4JC)Zq`@zxs{- z|AhD$yg#G5hB-Q5f3JZ5xN|Q=`~&tcmH&B)-Z4vzE{YCu1Kz}z)gBIaa7ir6h^!E(h^=aypH1h|* zKYsR^$4kn!Kfl+HF$;n?$~sWu6T|`JbxvCUHYGjePyQEwc>MbX@f!{|74bg0&5ZX| z7s%RBKR&L5=lH`-F7F|Nyr;aL1>z6G_8a;O9|HIG5AxS(#Cvk%_wc?){5;b5`@6V) z6KSdi9l+jWZ{$68bS3Y(E_ja{@TisNRfSH#^Zt1F{T{E?P0-`%RYHH_?moFnF9^#V zC;0!X++s~&-ar8PctfHrvr)h-*H{}|C`_Z=6`m4dEFcw*p66d zw9P?eX{LRFZhOUb0ir{<1>Y~ee+A+<7HcoV3@AYy6H^i|h8%b|Bwrm+(IM3V)7t@)i7q-^o|>$C^q#n3=BF zCxUTLkmVEM7wqp3_S6xd@9}tUpngDg23_b67$0=r0OJEOKAE3kSLwgyXG7j2h5x_* zNA`cg{{QZGM@JR$Tm3ruuRa9-*+(wd&XX_s?l@rZoCof(6hAQWR;2yh=kQrwl<#x+ zAd;K1NBWJX!~Q3)&3F15X18sX!hhm)o%VgXT-NfMnU7uYoDNWrtFZg|2yi<`8nmZTJG$B9oR6Az;SMaKfwOg%jL8PyWjJFjy;q2o6Qg5 z&lB&6@jA;}o?{huJm-I;&BxDJ2JcIFPd#&f3BR#};F{}m5V;NB^E3MJGyjcC$$LJ# z`$4|@ycE>#hzv(11^e64KIZZtv$HSn&-oBhY5Z@%Jng>!zZM4^koPmt@j%*N%q#T1 zk!GAnB)pZ0^%LUQ=)q10UfREa|L8 z=!u%I}hVhrJ&?I{aI{ z_jaGRTY7xDnT+K<(@%o;WP3%uoNbP=U)0-lN*tW}YG^MB{WzNWZ~^Zrk5|F};Qa&t zi>u%No_$^M1CE$qDF4+5cz*RUx&_`W=}-55Ir+nGkJb(S_4ZrG&E+-Q=!`_?`=yL;&Uo?LrbO(z+*W9=O`90!({9NbZFVL<*#^nR{Ab_W^b6eVjPz6dr*o0@^3E%GI=8;yKYlplgXL5F#)$v3JZT8;pWidFuLY3{ z<9+%C!F!5TzCQ=c9jXs8t|9*!USNME*O5@Z@E^T$9N@(J;O(Cb5e(at>5}#YfW;Yd zF{t4GJspzrmVHb41Fw0n?1BFk@pH^=A|4-o=;XiqJ*o@XjctJrSnuVV;tk7L&I@=A z&FHt6Z;+MH1Nxu$c^qe-RnKeYVV~)ig}*)=9=v$qyJ&lpzkWBUQYZL(z~J>5JIe12 z1FzKqe_wE32ZlbtL(kJ*VE5nP{xtHQpS#7I7F=!R|0@Cr^1kcpC-S}?zzccLU)X&b zq&%kIwFl2H&zqj_{x0wTE4*a>e(U*k11iyYtN7@6SuN=A%O`oi`tbMihloUb>?{8RofCbg#Z7c zXxrZYpPwf;>D4)Z^0Y(-;rln3r&|8chgnAYFAZ@ok$NA(>(`$U_XhC;X3XbF!tN)3 zO&PBx&P>|(^LLu(QG&kEul~^U{?p()<^x_Qj89Td*mv|T5cisSfb{ompRpcb8}kBj zGrOF5fx{v8lzG9%0dw|+m{P!ncAxkV_Fkm_Ul0e_#5g{$Qx))Obv%BgpZ|pOOL$Lu zT*7zagQmTLx}&d5?jU|3io<|Mdr)Pi%fGbO741k4?!qMHala zU)S?oe}F>dJDqJ{J#X0;k^{Br&%uOw#9QMsU_4*`^B(eFp38skAM1(e_x_#ji}#vU z*nfYQ|LPt5Hr;^N+;%1oc(lm;?JSPdT)^AOW?2>Z)42ceAAKMWDXOOxdf<2re7)ti zq{}yK=l8kDHX-yY=$FH@1?c=Xc}hIvPRuM9up$E@y0QHw?@2})_j@AWo9%WjQal{5 z-q^p9{~V7rX6R7`-zyA!3;#Jjk@wubUfd@Ch7PP+>_5$NEB|e_zvMr+G0t}x?fGBZ zOTyXfr04x$he=?TnZB&N0r==}8Mw5g|F7x+{R{dBoHkfs@9|HU^1tT&sRwjK-s|@h zuLJ2G?aP0b3uUQszsE;M`u$7oEb)J)FL#yxf77f>;sBxR!T+{3UiXTD!vfyZjPcKN z_QPac1^$y>Euz2P%-g?Ux9N|zf8mIK@So+d_oD4rp1n`e!uGY z!%Mh2)(^O97bScYxx7w6y4~CM8|M2`zUqK+y0G`83)3{bd}sd)){`?{`D4zy(-mLPvm#+ z^Gjs8?68dfL0PINjMu<(#sSwn4}NdHoXKPS{LlfvfBs1OZt;mV8SJqhr0|{FuT%Aj zdXWFtQxX13=lmeX1-fY^^0xr-?*_4d&5ZVRvfw)j=rla%`Yrrs-{d*-1l5D!dz6F6 zAJRK?|D?U(zd8&5G3S}~pT~#&R}W}!m#kZwmBIfe_AgI<{j9EHeoXyO`T^ws(E|QA z+jm{n$IaD++miPcYltBpwPhf2ylI6FaNSCr&1a6s-SYTMJ8axo#NGH(^!f$7ov6E@ z{g|Eop2>giL%K(G039cdZouObKZ0z0#Qopw578}<^q%*{t=BKOrTL*h?XCWzyr()w z`ujBkAG|*rkCT6EnHMPk;V(SY?(?}P^?-4__l)1cXZG{(_X+ot-bPjrah6?RE06pV4mQKhF<8;*kEk_TTkC!GF%P9^eh*ed+*y72`AJH;4DO-{d;I zWZmFAy>6YK&v>u%e~*q@<^gyg`Hz`7ui(Fav;4oqj})nA`u~jA4+mKa|Do$ryFb`x z{ujK5t@Hza=0DekA22+a+b;-RNWr)d{I~rk^b0ol8}R<7Wg?#Zr&u=f-tbHNO%i+; zIey>spZ-Gd|H0nx_`hu$`OkS<`A>a~g8#^yNStO{;0Ms{TH4d5^oY{y;#w^d; z=Phx;jNK^O=Onf3abJ1Qcv|=Yz*ycR4_(jyFGC-EZo+;R_AB5$QN7tLhyU7R+Liu* zaXq@f^|Ti35=HVt#IkU%>Vk zBhh>=;QyS0lb7fCNg~BT{BA-2obOqH=0l`g7Jj|+#!J$^ulAkh)u{u-*Bbe+&R6gq zJ&Eyt;)Q#pwd?d-wC^+^c#nPGm>!Qmh4;q$r_&akzkmN8eqZB`&*incEz*sLw+rHZ zU7+*yOgG%v-}STPHK*0^-+6kS=`sC`U-185$#&?5^KaVA#U<19cX5ESmH)^1tMH$B z$W>ywk3OAja}axeUch(lw7f^gUWv1P9547!KBpq~wp(ETn}+>W;6LqpApglu%-1GX5heX~b9B>fkLD;U2c4#0g(+ipb01qaDr zlh>2UXP;^Rd94v%zzvUC$^V89tNja#Lp@-A@EALvFn@4~9}xVvzaRV-XASG)wfE>$ zDx$;rj{o}q%4d%MU*qSI0{R-Jc^E1!*3~dI9?ZeZSxDPsx8?^8o9V_IU!muvgDhkoXV#(G9qf zdN81TQuw{ruEf4I4|*^jnZ})p;~DkJc_+gG^JMk^d68ZG?-Tuhs<+nekj-Jw`-b@{ zB|LyX*VSc4JCOgl8&Bjv`Ig_;?{-L>4&Gx&YxvA@4hR3aoN@K)_ISnjqTyZGTl)$8 zAn&c;1-vHv@cL)o`#$oY!}tM#5#Muugnohhl{9_xSwhA!8`+zc0N%D2q%RO@Vu@5z<7tQQar1)j?1PfYf6O!Xy}f1| znUUu?Z%Ewu0dDR8^mw!&&A18IEzs4;r~;Y(Gp9V!mu_bHI*%%l3|sEb2Q0vYPlo?c z!1q`W%(yJoz&wrQn&E^J-e2LB_VYE-hxTf5Rq(gCs)+mj_HlJpvd;d)v}E4SngNy^ zoS$P~(E;a!Ha>5Vj{rLx!_x0Dz&jvHzU-Y#fFpaqXD)^7Pu;V}L zmBJ6$;0L4^6@MxI0L_5xNSy?>GoN=Xc8A{V1s@k=w(6bbt#|{)f5w%rwuhdd%WD>({sH zgLXc5pBo;SGY&8tqHDzeKS2=mGrd3jXMS6@uN`U*_W#cI*zjk2^?BNL;!nf{7$4{F z7d*fA_g%UZGuo*07ZEO_6UFP?{)j^n_dX^J_{XI-uD;kY09MF%jbg*p|4!@zJUi{SICN-`loKlK-o{MjlqaCvMTY#ec}^%~+&=4DUlPu;(D_+bl=i zou20i3D4ztqYhl_Us!Imw^a$Q*OWWsEOTGn6MeircEahM9EBT<#`eu;lkFpuYPOTQUE;D3Ky5Eo4F2l$>1yg#QN zdfv}s9DsHcd?(wfe5d@T!F&3X+I@?)xBu!w%=g*Q3t+xa!hA#G{~hf$#`*RJ@*ew+ z-w*HS4Z48+=LYHn5Xg8OYo5Y?-2V;s|MY+lp4$&#cr*L}=L?tm z0XQ1+9~~%nIzT_5V!RIlg3r{$Mt&f%U7HGfzu;9MLmzzAW zx8L|JVdqN%i@)SMx9uW*w*5YZ*B$Gedj9v<)iu21xbN+Kr_*Q8D$>C>(%Eo0l>f&o z^zzvv;)D7D`oZ!$%B#mc(^SW=MdM@%`_uY+%Kv5=^E2ST?Ko#&n{y_f!26T)1|0&S z=|JAE@0;@~bYMQSABvl|7xoAp7I7D1p4>a;LD){wL)vHPz(!QZMW5^M*A)s=X!WevkjzPHm1pL=m2u?s3J}BI}!fV zpQzqEV&IPR>|gA3fViZ3pg$eDV7fBy7xRDBb*}S#`T^DL5XV(an2=?D(f0$9b}Y|t z&lyh<>5l{w=Dcsw1M-VL^z())bO1U>IoL0d*PK2o;r*ESM@c!3=$KT*Q;36a%i#N` zlge`Zn)U|T?5c>jPD}ZZeXiv{#o_wp+e5Z*&(Q&<{Z3Q(&tZ7qUPV9VrVYQlW!?3} zazh8Wo%=Mn?)C^BfaiZ`OTK&ednXRUf9^lc;XiKo621}-q}^c8jc0{F;JOg|2mA%^ z2Q(z@|Ht$@IG!Y*KM^t0{{C&Jf69G`zkbKB4{?BR?B50dJI;gm#=k{wI|%+$FTd0Q z+WkiUGp@PLuVNjrY4$r|+zK6t{Z!$9g+VV)OZ)-+KH>nl{ZH%<;Py`n`~kXq8~J;G z_vnYvfsXR+d0m^P{G@b=M;W73%if~&oZ6^|1+Q0di`<% z@4Zh_w=pj;`33)t{F$bkGD!I!(+6iFt>An$9MamqSX_ zvVpwka|Y-D{6_$6uefvfv{(5*=-Vy+de|r9X14F`eFfqkZEe5YF8E*1*>|3F%twSr z%qzuCFX;F4{dag*Qeg5mbOZj=Pr?4%pQpd^wtb_+Vw(5v#PL{OM?4Q6|Ag{$D*su| z%sArD$7xR3`;zC16}Xv*ygvCYZxhTzAo>@`jd&mC1OF=cKb*ZdSFex>^4o^4w1MzK zq@jqD&h&!$#FJyMZ$kDl#H)-_IE+15Bwv3z-`za=3`^#KgfTk->?q5=l|kHUFgo*o5jsh(Xt;) zb%SiMA47RVa|H{=>4`tPUY`b>M?64e{0;{wd7a*{{WSf0`UBM0&dvwF2NY)#dSJgH z?0=TLUZ@WdFChEO^KZX3?v}*(Kk@5tnRkqEr;PVc7}pbH-rjEf|AF@$C;s2-0OdJ> z_ZQwz9oR50NdI4*lm8yq51_v~%i%xr%D5o*pMHS+KR%vBJb-)!pP-$HA3z#@(+$wB zf1zCrv|sSFjJUnL|7=1%fK+oPV!sluf6i!b>;3PT0HfYKnnWD``7!mZ9*joE^bc~* zuh0SbT~E;q`A`2LunRpP8`Bcr+h3~s@eAkwx{pCTXCDGDc1Su-8R{=Ki4iJ0%O_kQn6zT;2M3;2)Bun!gM)_F0p&WL})|9CFE zKR?Is1l1w=k2`1_;5wO3yPp4bpJoHJKK=2RJ;ERDoxBD22ZJZ-!5sw;FN~|r%9r`rL*5*RKFs4iIqw*G%@&_^scA)(=3R(E;M{-G6tVhC>F>)q%r9;sWTv@$usiB|7li$HhV&I6Sgn zklsZ6n)!Xy$DQ;1pcnkljSJuhq@*+Bfbbp1s^>jA5d5zf@ZRzg`7GF@ME=vEOo#_! zhF9`lJDD06z|j%;elGoi}i=>pndmei=x<2JrkTW;}Rk``|pjzc`+h&d1^Xj5pA% zn-bnGtuMwQcwEds>PV{tO#dB-$P4p))B*OJ>hW2@{n_RNJ%InO4hH6T!aS@BwETRI z`sZ`W_CGl8@BF|R_v@xp(fto{cuqd%B5r5wTZyjj74+{3pEV-(JuBh=1K&xP@}6oL zRA=QG=WWGzG5%MbZMQ%CP%{6N<~W4cu}?@9^MSQrVaL#glJA*uBlH2tZ z;6M9(zmoUd{(BLBS-Wq$hsW~j2hxjM@5Aw42mThru9uXb=R^0i3SRW{3FJBbf73V& z@`u}VUyjdq$bRaiuQ5B?Q^xmtd+T{+pD&KnPszexxqb8}=lxZ;&~h#kAKUY}kH()) z%x6P@u8rr-)dS`g@Sfzi{lnwK>P#$cmpJs;LhxeE_5q~%- zIsg2;c`wp@y&nIE{P`Trz1UGc-dDTkc@qp>4l1S*C zb^m|Amj z^JnZw&3oqBdHkGQyN+Sf?q{4x|GxM0vFpSGSMuHYO4#`m$|d+u{!P386#LGo1K20V z1Cna_9|P;=t_&U6j(2!3;@{8Y|0n0K>?dI7_G*xE?`($&c9wAi79NW5bp~(H2lhLH zS2XuK((w2UJs>VfN1;#m{RH{$`M%ErUdDW0>?>|qTkd!-(k&#u5C3LO_|M$-u7r0> z;)LdlW-A+}vLsGm9H$^{{|z0uVjp4m^|)bM@xFf$d@o!N5IR70hYmdc!@svJ;|1vFd|^L; zicHW0+j)!qpHNWpA6m@7Z^%BpPa-}c@B4Iq)y45#U0|L;@w_wZWY4F>dQcDyHF*Ci9{ z%%AxXDTYk`|LR~k6eC|fR_2e_-{}Bxd7l5_X!6K>t?AfQJcn_EK#HR?T_I3Dw`9VZ zh+h97vL0X~;&+dCyf4L!eC*O;|Dj#Xmo$IB)B)NH&s7h0^C;{3NdfOYFXy>5t3gV7 zuHW}2HU6+o^#gDNk~c~CL+P9L#&$0MYhRQ&K}WGAx5NhtXsH8WSLqLQ%->W8LJ!JV zA6#%8zHjvh{sZ^bAK+*D0jvYYV5IZ|;8mUc)E{vDPoKt*j^pSxcE0`A{u=nr0OBOU zfBXyL4H@lObUt;;yd?O>IHBW(tSitDaGZm60Js_0efU4EpN0J=FjT;QzTa`D{byZ_ z{eYO~Uf>6WzXTuYHy^-T_S1AfjgtMo@oT{>8^}-A&&s>%<%{8PC^C$kRIH+S3pRUmOxkndLF&{RCf`Kp04`VAcC=UA_cnGgPFY1x0Dt|9&qy2Jg{1Fj3Ce$<0{ zz;okw+CBLonK0k~CA^4z|L*ZW(=+Dv)4&pWU!#Md?HT@`9k78%;e387sD!WZ_gvoJ zbD@0Z^eJp0{)|1jW?m@;)bpJ0Qt~_ZLoag9qrVyGb$P5eDVT4LJIOjho=81{*!P5S zL&l@`ho8tRwjV(UO2@g35BQzqCa{KY@QOGB_J46rK4v@Qc&R*wLXs-t`K43YSwtw8>Cy=c!;X2BBCGQUo(2?MOf*$0= z2b?F6xIbB}1JbX`)dBwUu>T$3`N~hfH_iUwo|eNyuao~gZcvc+x>A1fCoeIBYq23+ z!sGAaIK0L`k>|>wXk1)ujLU*-D<68WsoC$I>nwloL%Slaj-Vf>)#>QfC;KA34ATA{ z{D!|x&vRygw(_2GkoW#x_4D>S?L66WT@M)k{>#xTZhRK{!@8d&_K!}^TAoLogmt`p z2IGZ@UX>!nu%`|XFBr;O=6}A>ej~#*I>3C<;63xnwyx`AAJCrP(ayB%)#}lX=c^w5 zet8<}O>>a=?IdTt8P(jF=KDsC{D1MneXQ9p0Ds=+5YHOQGj&sb;RhQhL@x&LU4A-# zSTf&Ep6M5_KzRzkdn7K#csPPDYS+Bp{`JnkXhi$%9A~_(3ID#{i+;y-w_KiioM}DB z^1h^CD$sf@xlidI*LOUS^LoF4IDJFM$LrYdN1G$$#2UDgW_v3-G(`1f5~s z6DNvflXyfS-_Cnv{z;_Yz4LeG5gmCQ#e}~vkBQ5|YocSIY56Yp{AYWp!yJAS@7(lQ z2j45c51+nee}wO8|NOpjpF0ruhkcXMTgQ_`_&rTP^0kHkmJ9uXaO{i2Xm{$1ov2 zP{K#CM!)5KJs8CLLP|aKA>%z;`VaX1p#!+9`zd|_dLQEhR2%$HFOJCoyuWbYtrXtF zyN^gm{QrUf@cxwbF|Wj!*98B#4BiL-@eBA4IqhA(8V3`3e2--07ish){g;yO-sl%| zJoM#%gz|kp8w^CkIofN!hgnxG&qEgL1^Qup6JFCV7_rYUo<4s&{^Q?=4v>cT2#);6 zTxQ7$cHVvyd?&lR^}7fW_Fg{$>&yBt`d9Gq{)h2I{_}X|_2CEnujj7{jzhb-{N(VS ze3y>}2+VeRyWjcv65F?WyE` zKm+T14)&V$M8T^#c%ALH_XAd){HGf` z74`enfd+wSZ<1^Et;PN$57h$u|G@!45II<@1IC%ltK!Q16!-&FFYyBWfaP+T!hfm< z{2uH+xp|NqlzqWtjJ%|&i3$%02M<&WtKcF#Qkn$ZE{21;3 zpl05XcAx9O@dO=XKL9@3UMJ`Pw+TPMafYH#qZ6?{;JAR_WN%u6xYu=c5qi+bV|gl; zxXv&6j`@-EO8ML-d`>R43*Hxcth}H3 z6$#^xeJ-^b&lkCWd{?j&z+zHh0o`&^7&v1;;+xe$_#m2 z|DE&peoC`%B5A?{BUl^phl;plQZa9ab+hQq+~b@sk6Fjur~{^F)$Vx@JU7kb{2fI9 z<9Uo9^w0m%=a8-O?z%hE!=ZkQ{EYrR$o=7a#(zZe-HEmD(W5$WU2_7+dg$tze4oMB z;63Fd?<@9!7mtsbufjeEqr30e9|goA%|V7Anj9X}Zl>~?_L!vXgT!-I32Ev*OZqhY zkK?gl8gwF^qYK`L`2qZ)1GmS=?2{}1wa3gG;y(EQiMUN}+t?3CKVZX&6*_>Qe7|7c zu7@*V4fp&fC8)(7L)wyqOk zf2zRkSfp9Sx&gv7_yO!YfLE8ZcX@|?@y_k#EW9RQGO3jWu$bAD$( z0{TZHe+>a;L<(eiNlLY@BoV9(r zPO$fsqkLz)o_U5KvL6`l2hZ;KA%~~V7fV6isX#v4kih2=LXd-V%jq`XeFqEwmm9(R z>-zork2(CW8R+pmvKhR`?o{4qLqiaMxWk`>_u2f_y%@a5zrc_ESr5n$_l^7vAQn1+ zzcJ)FDLm8P;5qD1D9?T*{#jn)53oL8)c$*%%l{;HccAE)2 zKY?yr#w|`_T;Z%VKV^AYaU5Qw3k~ynMC1P=`ZD7>?mvOo1@}cag6H&Ccpmlr@cgm) z*<*f^$aQg?+pftE@6qd~`(be1HT~X^NcY?GuC;r?d(P_-o`-+Hb@~Af_L6na6hG^j z3+5?NE^kZbJI!aJ{WJNG+1bmx0{+g~A0>SY-P)u}+2>@vhW~Gm2_y#J@&5v?kl;V{ z-|N7y)eG7kH#J;ML+FCO@x!h887|8es-E$aqa47SL;ha=i|-`=mv3%b!8 z`EP#Yy?hceFZ((6+vlVpuaU`nvn3KGNK*LU|DL$tJAOe*oNo|lzbPdyU_U)^z94_# zH_yNp{`(%BeRVj-|Ahav)14o1e4INT$X~(wK=nnO&xZr>G^2b9p%avh6-x=*r%nh}ll$y|33J{h-i;0l(wVBOpC;0{kbNgM@fK?gR0B z*6ZW9>etggYW?#lPmpFelW+QG^8S9^(4R~3^Jzcm{QWE1&23Jz=M|7J3VweYqI-X9-M{NB)MlH#}Vd}N_Y!NI`wgUlB;A3Hrrdj7AuUVf23u5eum z`5IuKMcadZ!5;gUgJ*u9B@jQUfZxvNDTq^a8{*xJQ)*{DjvS0i`CfIC@~k@XJCqgQ z)r#*e@?9(B)V3gRDhn~Li<%%|{vPdE`IfA&v82RiVwd&l=0z!4Mid>;B2 z`S8Z(m-495uXwNgI&=!Yqi0k=VE7a8-|yhjPq1F#{dGpi0L0I?UoY>`JM8_@5j=wD z>bbnv4i>)I$-}f=@Rxc>Za}gle~qeV|f3TZkYP; zM!VJXf3qcO@WyfnV_t&jdx_&QIs)(Q4+Q^L*k^dp>7~fN0>{|@3*!YP?ces;^S@$# zAnS)3_!jq+ z?8XBfCnP_lEziVt1GKw9-v=G2dC`>d!NX(vPx9V=o!_Np|0D7let_vcUx@dBo?H1# zvCn-U+38w_)w~|W_wTs9dKrGn0^TEI zU2>^kK)x^AQ`Vspr^g@QI?~vA){g|=sYiZyo`JvfSb2|bQNi$xT1is)b#P#u&+kt4 z{d!KDrN7|+Y>s`0ziR{#HecJ{Lg%ly2$h&|frvfB-^=ay)t;x>3}mAz@UlCaj1zcE zJ($n%huVt-otZ@baCefO9!=BTI3xMP4k!P$4)EUjnR*WI`F;(4tcc%QfYEOFeTE;H z!$XQ`T!7GiRKRoE$4cC6m}hlT!1I#t>A`m#0C~^6!0$lK!z|KYGmlptXyDyh<>7f1 z^B!1F4bt2;1?YNSpMzUF67>%PxuPULUMT;;%ryGF$vv+g{wgOu;0N;$Mm(ivBXx8E zKZbqN&;@=Tl=uPEA9kPkVfX{pHPyK%|K%tAzx|SWk@vU(nY>@2PX&CZ`kDfs<0npc z{Lk_(?Ti!UT|#MM2f;^=4v&(q{VVQf=)i;umH*q>lRf!QKBn^D_6N^@;y=fO_cia; z^Pl~`^HVL9&6{(hf1`(TlW9vbnJfnP1kW9$2Z&Wf6@WLY-z(+)mtprW>R%JLzbP-Y?-lV4`lrEf zw$+sPSL}NNpDW6PeDFJd(+-K>J3hjFMR{a7QLS^lri-qdb}joZ3|&|&|BcVUqlV|E zAk%sxZGXz+asLbXMR`Pe7IxEh>sTF+Yd7(;_4CuSKT>{Rd`HeSzc(rElJ+)8X@^V) zq8_pL_jh;leK6p;AlVK6i~b(Zga0M-VG?x1dP=U7OTq{6AKq&ZMEKg0KMseVKU%LH zXE>qx%6IJZ-(u_&*ZTumLjJ}C%F{ld6aAKqj=A~u`KH}hx?tTQ^KU+ppTv7t@IB@+ z6!5(3urJ_N`_1>XkpaIv3-6hq6j<-D+s5yXD{%gdc$N3D9gEQ}xj$~un&+ACSv)s0 zzFCl;HRBzOk2LK64)Xh4{yR?P@53Sb%6s^}JA4A_&kTD0pPz%*yifT3?zfHIzaDTt zsK1@b|DB(|!-9Pd@C)EQ`rq^ZOUC`=KYw7y{Gp@Z|Ds)r`giglb6knvv9AH>`B{nr zFg~}E|F~&o&;LIDXPhd>-W%_uJ>35G_r2X`yX}bkSs%$Y^8vb};6K|=Jg#Wpw8P-V z;o*2B|B->?65i8|SmofF{){Lea&%x2n7V#w)$`qWp#6d-bYQckePQSEr^3%?IAdgb zdbS%=AGF8qLVVBnbtBzS9>hK9c#H37ZX&uE<09lQewSt*?^p+r-1_^r zQ3seNjBfB9O*VF=Ji~s%qYK6}(1YX*Ll*YF+M)gRWY?}}O^nZF19{(|8@4n2^(?S{ zl8Bbi1HyOOZ8O8}J6?}H#~-C#i_GJM_vtk>xEJ-K?wMt>6G zbQ9uz_FsDbBd4AI2b_XGC@<9hVKbseV3hdOrR{$H@1^+S7mIef?6 zTZ^1G*PmH3a4jF%R|;MhC&$Er3hX`c$Q699vl;UY;kg!FL=d{b8U1_G9qp-n#&Paz zn)3tgSE?JxaS7mmsC?N4zhvqm20|P^8%#!gZFdBNrLz2zxJNX!ryN&Jo4WDWX{ed+9CPQ`>jND za#sAmc{icq$$P>^*#ESH23vV=^Z6O+4=|rF4c%ZrSK^>`A_jh z|6e`S-g8||I|V!YukOF!R8EqQjrP6$_YcSNoBL|tznykRhwZlu(#%^I)t^YiE3m@91L6OdXFYmczks*|$YUn@ z|2ldi!&w7$!1#mwR~L&bbZGzYKY{;O!vo??`YW7Qk?-?!=5c|zqmA!}{{_!Q?Eb@g z$=3_NkC3&m+Z+5b=1nkP^3mA%=*?(7(@)}i#>8EFjCoYlW1b`+g7T@&n@lDg1}`8+jk?1BAZOA2F@nS69RS zJVVTTUTFjDn^1A*ue{6ArO@5FV80~R(Hd^gv9PUL;nt&T-#J^KII zI-3?bt~B2V)thz}&3uKR;esaKyQdct_R6OBwHDA0P$qiw}0{cMM;ZPz?c>9|CEw?B;6LhqAm8D4DWVqV*^fD15A6hEUKja~X{%k! zK={1waXe8U(0>==Hyw7^yZ{x*&;y7q|MDFb9D(e+gn7c)WAcB9({0a!_xx{@ zmnq)~8xE6~@SYC=%V+Zd%~vJ-#jotKt2g#u#LNsh?<<;N2kpRf+I0=@FRwoNsQI#~ z)g#T9$$65NmHZ!InB>3T!?7Ma7?Ki+8uU}Au_+eoAe6&3nG`weZ z8-M-lT0f;qUe_&+|kB>2Vfe_rt%kZ^$ZYy7@l-;QjskkXFO8@)ihjiUw6UhG~n zP6J-f2Z7zHi8y;ah7bPE{ulC*+koja()VEGq1zlDzej9vzh5MMJ_3aVuPX#9cwM!@ zfAs%4Wgn4{FV+`tZP5-O@q4U8jC!#yA*t|3I39Wk{*|S_XBFY!o_2Y?&$unT)gH*# zPq~ntQ|@~`e7{e>7xJET-l5ob#LJ-L@cHN2=R@M}LOsBH2J#<&_j%qIKjaGj-!IDh zXo37bW`2PFsRkqfGI(#il!xCk(=TAZgIU;pJ z`a6Fc{_kDefB6qh=c4_Zaeta0{j$mb6A!3A$O3HU0VS>*3VTMHszv@^mdl$r<-@Y2 z-Q_(mQcyl7uT;Pv(kGJ)-e@N?d4(cN;XB*UWA9V;6`~*EJ?efe|5t15$xG}u2O9W` z|9J_ozr_6S)nAs_?PR#Yq~tiy`>4msM>Xd=p5k>VxZUQ?)5gL))W9~cKwzMvi=5d0r< zBjtzB<7vNNoSp3qbNoik%RGOPz3@3X`T(~N%$|`iC^-+FmoZMKo$)%-CeyT+#|>g9 zIM3(kCyd8?Vb{6cHQ#>=?_=JssGNwtPmkz3%F%D<33)Q=jUFKVjXp>oVoo;v=ltI8 zck-X=x&GMO{LFjx0Npr|_wM^5-zZ*Y>_oDd4H9|CHuo#}Ijy>J0WKJ~lmGg6mhnsW zVx}y-f5h>9}44r z)aO3adZS*yC!Y|02?3LcyEsgrWvqj^Io$cf!OL-!TSz5-S8j1kaC>( zJ^TRVXcGqn{}KKB1L&334KBQK@$O?74o_KxRt@ZjZ==hYzl z-yD|kT%N(3m&{IMo=^6?oKBbWtDq<4IcgfeKOsJ#9>I6~JM8eG`%b}2^?35Uu6;lF zTbI)(EBIdH_E#c@+a6b4kMPdp^oQr8mf087>t|6Ol8*`A^FAr}hhOuAxZnHx+(BAS ztsi>yEbaMk{_i={0B;oPE&dAl&alxg@4NB)Yx%!`|BOTONBbatXDN7vgP^{|Yz^i8 z?|!$vo#M~Ye1%AuqTfe5R-cN_Z%L7Zs1H2uu`gfifpn9H<9ybcEoLd_S+ATjkDJMV z?8_)8Z-hA97Q>GNFCij&;KlwS^By>l@eSg7;!RFa58y|t51zFx@)mvt^SUU1#Qotl z@=AUrcy3&uK7p6y=gBYhzX$&b)7;%?ywM0~#z53$?u=plZ|Ecjob zXF?C)_XOW*C-_cWGZLAuGL-k_v|7u@*l+B94!^Ni`0t2EU^Nu;&lBWC{vw{8yw`sh zt$%hu{Ve7yp$CQtP7WfDo=2H>P(KU;@dJ{A^FRMRiU_>FTr=MUe?U8&P*3u8bL!1F z264Q84he#k_8?t!X8S1~wyW!N`u2tI^c(ZtuHZfWho27r^(*B)>$6Ajo$r>Q4}yOY&5!5>&qGmxcRww($SuyTijn`JewG z_62%AMNwqL^HZLjXlJY6$9H-zI%dQhhgXYT`JUXTJ$v3it+Cg{Jy-IW&pqtI^T)i# z8f{R&TOW?gx_qpEMw#QR{{#oLS6w%c%c@mxJVp=5f3M@d@ScGi?fumi{Q}~S1^=fX z(m<Wv7=pamkGvAABJHZ+x)5U6S{^@w?ysPTnKW@V$(DrFNgk4S&Ud^Z{`#{11Pt z=Rf7-^??3Q>0jkk{;vAMu?e@E>{X#5sO#f*-JhV+iZ3WB4oo=a1O0 z61_GbjRv+Ca=`cn`AY(Y^u@+cqJ521?bmKW{*``LUgUou{Ezq(yMKm27A=1M*(~_Z zwwc89MT5oaf;6+9F)2Ro> zI7}(Lx8FqCCHNm@zORg*!Mwrd75VgW^9sAaY}*>-HpIzTO6)znC!WX9F`mc%`D=LZ zJiI1>Uo+YzA)bGCbCbs-aH#RqyEQX~;ko@G?_DR<)G+xU4i4pY0dYj?zb?U9$9Mv0 z{N{0*F+F;&v_X*@&Ws_v#IJZ~i0le8}+?`q6cav!4IR5&XA4V#KZVFXx+2)qmW?azayW@&4&NK_Wz$O>2Lh@u>T@yF#G`Qeaz>_@9(-R z%M;#9WL@&!hWFU}EGmlLrUYx8cGv#sF&;o)Sg zJ)hpEzQOk~<^RZg{djIufS>)TqJ1duBd^+Xm{=lX5s0k@O5KXtwFAp6dFJ*;DHH|zJ&1L{}xK0419KKKKz?AZ6oA-tHROBFeS^GWTNlpHa^H#>~ z)N5SBf8=td9(WJG<@2w3Z`pP!AD0h!?37<0xNl(n82&Tf;_vj|MIVOR^BeYUk^fA9m;dwmY$*R}SNZ>P zgkF&MSNPu|W|}-7@&4J_mB?xHS)1?|rVnS5y4d&;!UX$ZG~(;kd|u+!gW!`3q=lp76!8BrgW; z?y+t+>^*tkK<0gklkqr3ev4vSY473pMBeir@L9eh=YdJ#am*w6`sB&};bbBYVjo9& zkNhRrN&2l!;5(PMBHg}c9?$huIb|ID;C;n|K*#^Hp6}g;_jCD;9LaBx=YN)b7IIEm{|@^eDDTU6<6YSPIpO$RB;B)> zRLwo6>0N?H$ZN;?iX+^H8Ga7mR~(A2^QuzkKk#1ie>g<`;r%6s;@A9F&Xfc61mk)j z4uJfp+dA|9i02UAJC9Gh|DExHeCKfs^}$olvmEWGUoe#S@LxOeWA{w2!{6;U@ZRI{pJCO#QoGNA8vh>k zRh94+=wazI=`-dJNe?!@JyGHpxAP~|1cax8ucNXhe`S%%a$(r)BgO>a~ zNSyR<8F?%8$10Wg_+#?l?_9`l^hP4GFFJmGN?won3Zy>BKV>=;^!5I#z2DPr!tVlm zMHat0J7b&&w4e0v8Gqf;&f7oop0pi#HuHPa$iKt)@axe7k#wob_$tM%-JL605dcI@Nd%jOMSoK&QB=CPegQuT2cWI7JzF&2Vp7*2Spt)DO zAN#asA63T7;yY>NTdx|{UDG}C{^XLsg!!2a4=+I0m9Wp9dY~Hi{J%OQ|M!diA0apP z{}~feME!=y`?25}{LcMO3*!G71}#SqI6flp*~a67alr3ujg*Yw1bM*T_rJq`;-O0ZkH1Av!Fa_fK~h)i!-;&?jtB48J@1>FH}~Z` z$Co1QJSmCu(GTRu@|XF|@ot75s0R2k`2E@$?EaTPi`@@wzAT-mw<^ikDJSrrd|cS= zxx!JvFyu+EEpK1C)Lc${h6u?}>+e|V6?dma;h0p@xV{GX7|hWGkw z1&H7Ao)YVH;g{ov5Ih4BtE-%ODtmhq=B=hr_#Sp4Iv-0U4HNvQdh(z7JU#EBCwY48 zJd74`TOxm_{7|M@Km&=_qe&6e8znJt3cy= zc<=AY{pRj_?$_LF*uNQn5#FN@#wENb?alrwd_Q5xcah=!n0cM`X>)|zFb7ZQ&$kVT znBf02Z*y@*JmmZ>^a{L(j`&sZA3q_*|7Tt7nY_oH;QOUN`vI?sBk>0^cqs3kw}16X z_aHQ}7=}3br)MI{mTv zKJ0tjd{6r;$8QSu1*qR7uNPn7=f0_5t@roG`1!2IA^!&co%8u#<&p0z!2SKhL+n1| zfU868K6-`u{Rw_@%Qzq7dHVg&;XnU@|25qk`FqzbmvvFoZPU6gu>0D35QF|}J5Ji} zB6v^#h{$*FpM4Npw88^kYaybBd;a79$bZ^9@&NKbIjy0w{rO2 za=(;utf&|B?qdFE@V+eNKmFTk?y>t`T* zpU>QH!Fd2R>#?xEqsDbw^Tk=s`i zT$(4sJ}Dm*jR#&cj1cl*{s?*a?$IN@Qvuq}%7ydNGW5Zs>;4V?e}^2#d;l(o_t}r6 zxh}N-h$r?x`EiQ9h423^?-P(b8UBC${S*bzd|!W0vzGPu&6`~u0#*lT&)OP%r`>&3 zxE`+%i{<*TfcKb_s(6(-4!Fv}H3MY9|B`-?|Mmm<{pFH*0{HpJ#k2;=H$)zv>A>>; zF^^w~Z1cY-@2UPzBL2=yd+xZO{H`E0yq53A0}oo-M}0th^}pkw%X`e}HzM^X{tx@V z*zkWY|Mkl<*8hU@9RAxr@}KjaufTep#a!N-&#B34s4vWO=*MaIFWHAj{_AgvnEPRa zzU2C;`V*|=J!bksJ#cnLKf{0PP5rK<1_h|d{wen&=lRm%?%wM;T z>$=_pLtKF5Z&oFUd)vW#^})~lr>y-C{>xYSKXrX>@E<=Kgh%85%zt@LdOQ({6H4$& z%b$9{e604L%f|BFew6q61t}QsMgA`GeG$)-PulqR*L)W-XJPkI^F3D8dm`ogE8B(N z?MM0VI9bj(oAw|h-(EoE6#mC^;6MBP_3?b$M*g1H?b6S(+g0`3BzUi%0q=dDh}bOP z`z`L%CZE-OmmUB9PJM@UiR2V9BVj&Z{LH9Wbn%=W;e&;t-2`~RKeUK#N|pAls~ zVEW@Bal3Z^CKLDN{d9G>-~79L|5GI*e^~$e`?9*+1>dX=d4G5hzsvef5qhAY%s%3C zcpvL>LHvL9K=yKVaH!oUA6T&eMi%)o`LA6`@VD_hrww`iXm|LJJ26HZn9px(cprWM ze8;`qmG_rmA@2*~8+neMt|{vm$$RDC8h`N%&<_LpEc{4eZr< z^LWI-P3rpp-~8q`^51@u|HfbN|M?^0>=GOe8Bb(h!@u14+YjLVOT=JaziD1|>@O+r z?cauS75;wn<_y8<`Hy1@?@=Rj?LNb8p%2j4zmfOOqZe1*Wguy1{Dkla3XgBGpDg`~ zzCVNi#DQDz`@8%*(v8~%``D{y6^Vo^~ zUtH98n>!<32!EgNF<)KCf4YBA>hHr-?LN~0FX8(U)m(t^e>M}L?GQBYm(=jz_fQYO zzhn77!XT&4=jJ}W{YNi^|GzL#%=kZYLma?1`Tf3I3~ZqX+~14&0pxAuGyTbH9P<;<15`is0B%l~>JK1y85#ZN=ApcA|HOo8c~2g23E#!0`S%h(V70D6^DHHL zfPBuXmjCT?3IE?9P4K^b!#sff@=YG{{tN%v-+Q@ibNIhMK45%5eOYtc6#pOdANGGe zArB1y9ZwM1erVj(b2uyyvYAU>_{p9`4F-gaqZ*$0n;gll=15q@V(f?`M=^n z9V*{ZGur+CpcgFj^Sm(*u%DP0FvcHF;lKR}|Cx_M-aPC-{D<%AZ}~qQFz!!&gY8J> z+WpyR#5iC5itY1{<@*&k4&F17P9z*mTl|618T|_;><_WQ zi@>dF5r~42|2y#9c#m}ASpn*&6!hy1g;bLFLA=)R9=*W+A?O2|Z)H4i^W8G`lXM?N zq5|@N-|oVD@=E9rc#qzgss~#7M`S-S_U*~o53ihNAnTW>IsWN}@6XDH_^|f_&32lzBtFRwL5SkJYpRv5hc)riu2k&p@`t#Z=u|l6U@SJ98YY=~Y zAzpN|VFT~6C!PFVljc8Az?^niX>@Lj*Z-sJt{|9aIQU&L|Vcii;x!7Mp#9`kwM8}gpv`m2^S4L5UyKLHe|WFo|LVq#e>twP_m_;bH{th_7kX2_QBLH0M}LXf zSJ>XX84RkK2%W3ud-4Dqzkq&--)Zjf6A+gw`~(7d`^$Ym(A&guj0b^p^p<)6HMJ%G zF*C!WEx*HWTFHMO55CqOg33jU9{9RlQf8mIO9psE$9L2N3Hn^#b6Q&v7Z9G2_eajS zVFs4(){_K1pd7$=5c>=7wFklXBzY%lXJP+C`-jmk=kGZVc9N95A4qr^<6_*$?}=mA zd)|LD;XHT`pV0=*yaLS6>HzdosqH$x9h10z0A50Hc%; z6+47q|9#W&Jzw};Hvj9U{5QWS|L63NNdBWMzegVoMsx5D)oRN(c>ZlSDX{?g!U#qdm%CpVItBmySBgmy*Y2X!7YDxeXU5fMk$(sep@8)9W%)~PWew>f->e~ zE647y4#wk+{T~PaQPc(YpLwin?LW=$_w0xVdfu;4fWdq0^?%_#@-&4H^1f)6tPe__ z(Y?rB@{De0+z&ad){Or*rzHm{J(=(#uwOs-L-0f%%YP0B|F!e*ouj{CKTb{=yC3Jl zdwz!RbJHuZQn68~%QCcR^VsoQu3X&l@E08~Lk5?=R9$YkAM<#QE5NUO+_b z$Hw&vwYc zf9y2=e{&MQ!++gd^Z;^%9D_p~F6}8oA8g;)!TOLd!2iHM zMIBYJAOC#@uj@CXzdbvX=eCc$fA2o1-{;sXj)3Z4`7eLqJIBjqj{R?$mzl$V_W{V? zVE3`xVgJeR%X_Y$2LBJp3&H;e`!4@IPyTD4lk=wDolFiI#^q_ZX#@YgAAEkifB3E` z;eUxD;ok=||G={A-NfS^5>p`Wo78pq`{V_}?*FxZP(DD-Ck_0+>dqF)DSBWruNwFd zuPXTOIAA6J9p@8i&msIj-`OG0j{V=>xxsw@ob|u68TmivHL}kfun{)7?w)a7Be31@zuoYEoxuOLZHcqP?&}Be{p6nK=$TdI;R%#`?8`h)JrMR; z^gQ$S&R+}cD)a-qr-H`u4C`IVf0}1i8{c~z-oww(2i6li@A3EQfgyh-eBZseJgbk& zyN>m6hM9VS>**hlui-o6haLULyun4sx}k(Pf%8HAOb~ydIc#3J zPM3Ly%uAUrmu(IIotGfue_+4LH^@yK#r)sk z(^B4hJOd|G2;N72Q2rmncX`ixGyMNF@_zE)=g5EhTmC=xdijr?xSuc{*G9R1JV7rs z@EJuu$KA5jm;bCB0DzJI*?Q77LYGhS{U@bL;qpoH%$I$k7h*sHbolQDjO^MH2h z67)bk7ye`BvH$1+95w29eullxK)N;f|G@`0jtlsYI9`g3?}r{>dH1gRfVjO=4-DXW z4WdsM#s|sPcEkthgR2@nV85at-pDuGJDDw z40|LEeD*wk{jBqR z_-woyxGAfj{2c(BJ690E-(BBRi;M${`X{Aj2Jl4lgu#0jQiyyOHolX3#e!IPe}r5N z&HIsFyO96fp6@H52Ye3W0MvIV|Bd4t#{VuZFCWQwf-) z;FtV|-bv;-0PP{~d;gzxeaMUaFPhc5=YP-p;eZFgKjd*LhTMSUX*>17m_#|hK6ZcU zK=;j|Jm<2$Jlhn?0x=CjU9j#r{9L~O zq`rpl^zTQMzt%s_;e845wd4$^4%xwlPs=C6gTjHxP!k6FALuvq}c+2u^X2_wXS5C9?_G3rd9B@_%lr6!gYur{;d@I3dVu@G z|Iyi_3;91nPssn{*Qq<_xf z`LpD=zrEe_J*`BhG46{`881rw-F59R*(ZW{LDWBJ*oOmuWK^^NjCS8~tNS#7`RjId zIIbz1pH)7|V_p=<<$~*T5O-!FqOMn^Jjd@SK>Lxr*emipt$0N_kNAI+|HHqB|LoJ* z+y6uIbs798jfCCr`6b`RlZpO6em`~wG#+Rem*aNupYr?nbFu@c>Y3!U#_m(^$Ms{s zLsCCZ(6iVjct6DPslnBIzHbFOe&+GG54>mm-+bQ#rgaSZ`?H@6{=RXX`Utwttq)?f z5VhCx-*`MnkMVP-9^mJN{71fm{~j-#2gslPz?>f4_yaQ$b5McU^JHMV()_!k^(t*w z=BG9w?Mz&T{r`cyOz49ZaYW&r@_q@k{ zsPAgOMdWYdb(pQh=ki$e6Lz0J`ClOj@_)|r{|o=|2M+iv&;!ur;}ShUT#z)x|6Xr< z7}qznkKYUJc|V`Ycf#m#AOpXBnY<9~@AKjPpa8D19+Jby+$piAg4+Mx{`Rx^43 z;ShVu@vVp(n((ue7Y%+lc~AHs^uDpr7mj3F?ME!@oqV+56m+N}qd!d|u zyg~hfSF~5~9(hjSJ>S>BFVOF$#+EsMjUVu`WnN|m(!5;;U$Dzlc{IU(h92Piq2M|8 z*!cT=y)1(NEfq@OWygiVQ}$g*LoZ;L@z*;}Xdb60x2bmn|4SUFw$U$Fv{(=X*uWlLCpOw$Wp(2O5oh z51JFbR`?#PTz`P^i9+P>XFWiBIBr|^`Y`kW-4ywP0)oN+`0nvWFC@16Xf%p>#7LoW zz)SU=`WboNNr>CX2OX!bBf`FdUsG-NVNbrkjY3inaC_`N{9kp>@B12hGj4>$pxD8$ zm+$01ej$WNwforD6nR-LH+en!Q@IOyK|XgcE-r)b)K{ExUGjwQ80eoM*Gct+cz|-J z9;i>p;|csX-^KV4@=rLi@rQ>oPKN#u-dE^(`45{C`LDkR@9$wIBF|RwCl48q-ztp1 zKS594EsO)20zI&MHLt`mj(<&_&O8C^-PrT;F8#!D^uQJus0Wx=QFA}nKL=u{MD2k{ zGn3b2d>_Li&S%7r)Jr=l|4HXp;F0|zvRq*$(k$^^=cqsYzwmr;jzOS(PF!CiZt*@1 z`jGs5w4?Wv@8fazEv%O3pY*7H_=We(Z;f@rL-IHD%d@5Pb-+vWR1p_o7hV`IkQbpJ zuTgugJ|Mk^UTE~Yga0gtW&gc~eQQQL&R@|kBX|0*$Yrcghxd$Yzo$KsU(|3Rt}8wP zfj*$s6Omz(z{#pea?W4y0tNH@=^x6>i$m}Wqh#rzvuUKXICzOkAIMlAQ3pnnb*uZv{?T zuDTkW4)B~;m-^_9k1I){?op({s+5w2=8msCY}7Jxi3Nw49UO4|G#lvI{Y7v z=5zHI-8oYa_x+_p-$fAGJ3buz&)~W92m*(+m-#*ZQtds4 zp7UO;R@fKhgZ`Z=Hy<+)f?TnluPjCRFW+rv5%+2>uC-V2p3_QkA4jBw_q5|h&G$~I zzP$JRz4EkR+>gH#Fd1~(O}xG&>?aB!_%vMby<&Ma*pY9$yAya>-Yc;i<-OuA!$9}} zh4y=$qX)P>ywA}C&vcwrzotj*4dbVi$qzG;@yD_KaP+g%$clHU6dx;*f9`HT(+ZXjSdql4x zpB)ZL8T^*d*dz5UW%G+s=7b{7V;(+!ulm1$7vv$PCHg>nO8F(-4lnYTZ;Kv(xL;7t z;`={2`Slg^P;>PF?XMmf<9En={jr4aZQ!;}vQzjkzxm!?iKCJ79ZnAKW+&-M_x5%Y zI3EN~TJjGZ-yN@(^55IYf99`$D*u)1rcTMn&=2Pg^A7h98|EQ8zf`0emHan;OX0uk z(&az-c-Apx+W8CX%{J4q9{AA(@i+V@4?izhC*b_6lJ&tX(~0@Q*yAznb z|Mg$xJA91stpn$SofednX?b3pnC~yp1N!#`-$~~9Q+n^nd5?vNLslOVHzTj|jni8A zL>z#e-7D_dP367(9`uL*#a-ORM8q6a`Mvxu%bX6;2juCiKj|MZUFb?Zz-xp)z-=EC z@SWRX*U8tT7kge4H}JeY?0r0!#FB{kwx#h2@g;gH=Jm^O(rKZmCX=4;A2XrAJRk~;rm0szfHE~A-Ab0;}`5j zo&`M+ae-+6pk@O*?2cu`G0NtZEc@Q}AL?qBQ1<ue$1@|fLw`=8m zRU#qaWQ{@xquCzHb#KAkTqi{=M%zQ5x>Mc}FJoAcdGw#hBQ_}*Q9l40+M ziMWdb31q!`c9I{({73lT6wEuoU+A7b!TzW4pY{#@V^`t-VzGelNv{X6|GcjDA3ZRe zi?(0zpSUtZ572*%3#7d7_Ky4?9iN3BAU+t#f6}|?gM$14{{8bZkXAUyzgUMp&|Zcf zAP)#)w-z->b9MeszYOi4YR))P^hdYBIr*Dj?>5A5TcfjGkn`c|*Y*$k{_7_CsYmkd z_pFG5Vq(2T0`q z+&F+d2=3NY{%dDM=I1*us$Lu>=mE?z`-6r3*H1u?ay}S(8Dw@+pMSC6<9Dy~ygqK@ zwtfEaEY=&J^Liz6a31+q_K!clx+j&pE7v;gVonHp;={K>&F&7UGCVK_`Kl!h#^0YWz zE|=31`%ks8|9Q*@5=p;@AAs5H&AcgijWh(`y}vvs-7|sh_z48eQLensdBoRxAmTOs3;U7! zFy5$KVDCWEemCX6^OVJy*Bo|ghP>71tNs14@)aqDF7{VI<28TP;N76@LQ6 zF)zVK+)xbvpugW2>IM6)Mo!V^!GCUpK0uE+9?tPS7KkY4hwqv~p3p4tJdgT<`kzy= zjpG^Lx$E`81VNJj%cd-qE51`6a)nzqQ4h4_5yKx~I+1z+^G)0z{GS;|I3M&{4~Pd1 zo&x%SW@I0r^!x|jAHHw&K)(*qvi^~X+dh>4v7VB8AF$3zUbF4|Y{UC5hsV6;mB(!t z%Tyo!XXir_0C8OX$M5&!`1S9l=MB^coEP60GaniH;v@A%@qEDd2WoJr{}Ao{MfA@C zJ#9aurbhNZ{3+ydRsCy>FWIlDW$GiEcksM1a;+Q@FED?%#(tx3$XBC3JNeCcU?s9G z`+j{|a6jxGWz_U;3GYc0#`jLSJ=Yb^2SEM{zLSdmmH%bmPZ1Ab|JTgB%*m6Z?&+rj zepSC!AE4J}BJRT~2Y3IGc2f`F7l?c|r2WMY&>twKl8TB9{kF_#R>g&)F~POn*T=BJX2-6}^Dn{YUvuwT8vd zdV>3KK)s>7^!lRPi{GiJ?X|tLL;Dug7e3lcCTblSexbrb9Y7XsBOb zrl08LrTv8YU#piXz7w}dBt;p4>@nF=ACUJ)FXTs#*JR+B`^taZf$#$;UgJuAFtnZY z4+u<+7qrhkQlBV;=mGs8dB1>fqW*gA^KbzFGyml?&v6{^sA{#_<}0v=+Ia-3=y^Yb z??)AWd_lYudBf9!ycBV-dVs)R{=@5IG4dzyUOAKh!};Pu)Q^<^s2TPNR1f^Z|0t6{ z>f^Ag-5}*_y+GW+`M;F8U(x4h)D!l9yhkAU8qoNoR!$aTgWj)Z^gsSKW!B(8GD?U6E>r9vH9C zC-B_7l6*HF$;kt7{n|2aL6x0Hxl<2JCafbf-++yag|F=i8xqLr^H7^S;6V4eqo4>-Oh>`z1Kgy9e;C%fKd957E^V>W~B&?qJ zzUB0Gyf=qK53>IS{Nw%MukBSmSzOV6r*p;^K;^Bs+wcnh(k>{)5%(tD3WRTK{D4eHm z$z!hX`Q2h~&m?CkYdY{k9 z74n$rt_y#6-g`p4h&gO6Q@wJ7Tp#(x>Kf}P_xgisA$Qz&*L)@Vg@x0ehaTX*vClF7 z!{&O&BRt+Cyej5*cEt=yvX;Q z_8(99?s~5W3d`u@@IMa`K;ejO|kR&veYdA$B<- z|DZk1!at~n^55}gd2Kuco_@-UiCedOOnx8ec)-l#m2oV5C{VbT)h{_^$A#g^`G61C zhMixbKc46DJo$qdzV|$;v+H}4?hXAnKyGZ0W8*mxy>l5jL=RKe&j7V2ZHYXXKNm@_ zm7C)$&e#4_VB|$;|I@d;PbuFKblacSr$4+O@*X&U3mX58MfxTD5$9W3U-De^7jYX6 zZ+%g#=-mvvRF=x4x|9F%$ueo{p~$Mv#Phnzq5a0VVf!QlxeUH%j2~=}>cM~Y z#8ezJpnx7YLhhbg=DULvu*=gugldAmg;B<;h3P`xnViPvkd` z)1N=0eLj@;6gU2TMci+@^<~yctqa-_IS6^9T`1?)cjb9!_K)Xpjr1Q*Sg(80>jAz? zh5aAlI3`b;&3vJsJ2}6 zut>iJV(8;{?5#*WLmzM(;#Bm2^@9J(v&d^OzRCCQLk|#FkRVYG5j*6rR*tXaKhsPv zO60U@%0e8oKGFXA6BR0GfAq*I2MP1=`wR7O^oQfG@_)H3%S^fAF9n%SbDW+gA@|oP z|KoRfjvw2{1rzKJ$C)m5mBCx}s%3bs|G@P_c%0fk^WZrKHbedq>)<>67|82){=S$! zjo*EaeeN}+(iKpO0)DyWP-ex~O-jB<8?_8XTgWG+Xeud8-CqKh^ z=nM2ieuCNwIY$kZwp)yI#eIhVf&Y=mi+1NYe22H_r_%QuQa&dwxNBTOJuXFF1OFgD zFP4Y!KSO?)7tVW?CGSPO^+QF9;;;BmJ5evv{K0$uO#LvViE`-cQryKMa6FfKEK|y# zZ2UL#eewIQzh}rf`D68i&jFdP56Z*dA3Qrl9^m`3jXXmyAC$Lu=JVY4K(W|f`p34< z9yhYg`w?fB*j4(&^SJ*n=KPZ^)QWI~Vl1N;OZ zuK$XkOquqI<1z2X^Vpcu;}h(;xVyK1kdSA_-C+Mijtr}r{6~x~k{66q@P|Lb{2%p4 zZQgGs|Bd5o{8ff~-<9wl`AEQ%YN}l;P8c2zIk$f5S;mtNZFlXK$oS%c{4c1lxW8Ub zQ{)bPH&>o;dtzRY_f3DL4-iM>F*zlFIa4lg?2LvPavkjex-VW9ykCSqKrDzCveOAC zT%VW6`OF{QT$jOTufIl*FDQ$>Kak__qy;sxIu1v z@OO1N$qaO;;__#m*GY%=AFkCkk*902g&%AT)bJtI! ztbMbcq2-zU|K0CC2>#E=8> z$V&#_cRi2wXqO=CCTDNe58)qx+%DE%cG$1vVRHoS<{-}-3=-!bFkUKh8u3QLyrcp7 z;PfGRgf^v2v&wJ3XFNU8<2%O{=Vx9&3*^K=F68?l2#o5_H zq=>(f@*R{R^A#HN0TFLZdC`a`Fhs^F`}+q=<+3T{eF?8i+PMt5mhaOKu~Q)NLg3+H zpAV!x3;F+U*?uAJPMALi|LF$g2)jePn<6LXX+`aLh8z;cjC+LNl+Q@ah~#gSyU;&k zQL=wDh`t@G2bdmp8TtUdEw*BR{vb#G@n0@QmUY9&?3CeE^8n%3i*xNfh#MdFUjAm( zv$vn{mG;UhqZZd9KTrI9clQE0%{VUKL5QNBB$NFo@X-Y$gROcFhrLP(H!4FM& z&+f@I?mO7tnfu(?ao?Up=5t$SokX-h^Ot!p{KTK|xbh#rm%aYoy`mk@8E@tU-yixUFOt`283#DcPfI!sJeha%Cn9=@_b#H{bKiHx2!+2#``0Jq!}Utu&m33B zk6)pPs$&s7vV}%r z-1Gwdkl-G`H~7CG{uk-@3z6}OA#8t0o|x}0@Vyc?v`dZNao8;rM_h=#zR1i^tTXfg z?$r%;X}{+q9p z|CsSa++%zPEpTG|p#Ee(uzh)do8QF&23~BdPm2=1Uylnce)?%qgdd2#58%fJugks<=L2A>-5jRKDa(3x;Q>7FdGCGWdivYvcz#Cz z(+(hZj|TSlVp^@^JQTY~%Oi(8mwM#Zix28}-K5*w3tksR;O}@s9*gtAbzIjy<#={VGrf)Wf@dD@^+uxqFimX7&Gjwl zeQnP`^lJRx&4z(<`~%PLssZCO@|E+wz6||Ck^50!exQBPAMGUS@vVBu@&G?UOpu4b zE#H&o2z`vbUZ@AC#sI#H!wnW9{Ezr;k32Q)cDg{0MCcRxfoju!y}wq1{7$(%8RHn$ z$}QvSCA=rRAYV`)IX=Dd?~7|czeW#e548J++hweiWS>~ou<4~*wU=LJ%teVuO>e#dNspJ97=UWA>)D>!n!J7wfso|nwWs%8apO@$*40R98+|IhzFtujz)rDf)i3PB}k#58{uM{2ubT!Fk5GLhs+E#<$2<_A~#jpJlqU z(_bYY-oP&G1NQ}~=FsEY+sBt1e>Qkb2kmAXJ(dyQh8{Ud%};TDc0`zN+)EyfJTyqR zM*IscJ$_{Si9TN(ZVVLw3gSb@ah=z(+c+hyFhT#ch19PaD0(J%1T^0i*T?+Sm9ZJ0w(u#I8(CA8xx zC%)l(QTjjU#?|m1zh`#YqyB(;pfxT!z5JJaM&FF3AT* z9&!7||9FHRpkG)=zU4k?1e<-7HhyU7ytRA9>HHPw}b9c4Hpbj=}Hrn1a*R29+FLC`XaY#JZ@p?!16N90d738!+F7??svqY{UtA$90^y-|i;Q>w1d7dA}j!aiV@sqdsw< zfqLPNOvOD0lJyht7tk*vM|_uULW$9eJ`cPtf|=Otn{ zry|ve_<`!T31#j_-XVP$d4SFJNucwalJGAY?Eiv+%j980+_W-II$4(32inbcRc{_1 z9Ng^N&v>9j&bup-G|UX%AE90J4^CqI0E~4A>S6x!(-=3vzLB3{eSZ%Bc@KD}1ix8V3(u&pygJg) zv%L3B&wIL+<5}nhk#Gb(@k{ye@Bn$rxPCFqkSFb~WlmfFTxML%`6oH!-(lw+Co7tp zj+d>OpO77;9G^0;CcVdWfG#^pW1bAlJ+Sd(1PjAYK*2A3cYM#J7}d_a$<@1=YR^o-?0Nyx@K%c;!4J z(EPf`UFKc#eMr{}mVPG|!peW?EE*Pgoctg9q5KkeBks3G4!wR%8mOsjo{x0%{H@XP zh5T1e6Z8}Q2FHnOB7eaVCb}ojQ}k8rU%`0qVxB(F&Y8FJ_v!)i_}jsIHnx=ai1(^T z{eQ-(h^q_aYPrNtAx{iTu5N8)MQLTaj)bCi4A)e*C=WKUV&8+ynfB>;2Y@ z69)Z$%;pE+Juef&@>nNBt&?Jn6nD3MS zH*do1BlIPXgk|KlD~P9Xi}bUCKRwRF?{a;S`hexZt;je5er^$Qau(R32ej9%cKj6S z2z&21MW)^0@4q1DxsOxIb-c!~$KFq%nZ{TPkFQerKfxf&C!}I3zfcF`^a%bV$m)f~ zLf)rGgd>4m_cQM^j$fB!JPsa{My}-Z6lMmm%~w(OJP>(Wtpky>%rf~O`97^y6SToS z)KDklK24~Hzh4C+Z`9Mcu}h8`!_NektFJCa^4Ft=eU{K4ZS%N(u!Y_P<^2MlJtiGI zYwG0Gc{}nAxt_>F>{QS9OYM471A*PYGC!AchvQj)S#m!8^krSc%K_ytjZ@|SoCIS1 zRr%Fmez_|qCD(&3`3Qf9zDWUU&wE5qaQznZr@bHgV@>^PKCAG^da&QKoc zC*WV~c5~th-T(nlpSuoZur2@p{@@?l?0J4ZMgbcKuwC?7eqQ2NFdt1lz<9JsINz10 z>IMCQg1l54egNhq?7#AFKhdnrQ?j2pk9mzWBa+S^)bif^SnPMgcv`>T3HqRk^W;C~kf`5%RlBkLcOE;D_~*8B%0BCS9_AyF zJb3Wm@!*6jj5k5*IbfV3sdjNV(uWOxD)IsH^Gu!=%T@6IDG!jx@UhC^|D*5^%=gdE z(r5C24ezsuU+~-nq+UNH@ZbFhuJu7m8NcDZh`T)T{AqV&Yge5bP$9)Rl!MT1xjFXA@q2rwX;dMI^v95CbcEl)2&&lg7 zdcLcVdfu~-$*=XmWIV~>KYI0(6n-651&q^Pg$QI_H^CBGum&l zkZ;9rIgc{EUMBFIc=CtL^Yq((w)@x%94O_6&k<~c_o|-v$jvq1$@6ji2@XLX^2B%n z^W{0M&F-bh(|VnP)bBmk|Lzq2Cvlwq0QDEF55p0=@V=z}3(@m&m@fN z2k0;+ZrAS5%6TCCAB-CIaV2bn|21}hSb;Uo8Fm=)Aa1W~?WIDfq7JO1^>aON2fM ze?mPlp3u{zw19f0i$T<=|xU6ZR=bZVwLd*VqST-S<=X%}?}~dHqWML;G>8b42g3 zs`1XWTDI~ZKLnnaci`Wpyr=tOKU3S+eNNpU9RA;ema$Lj)fqhgyg`4^f9L_CF*0!I zfwQwSF^+>VZa_SMoXB_N3H=ZlW%(212&j#&F>BoRW&HQB(+rCMJ1a!U`d^he3{(F9cKA;~xezHc<;5YNuWvTsio|=4L z%y+iso9A0@NK>dE7Wl>TA2o{|&S-!9CFI8ZqWotY+E^dsbs2smj|n+KKdj`v@|Vf; zqAW$+fG!1{ua^YE@4(BC)dOB{ncJ-r$_&rWsm-6gKi2;q=_9b$1I@Ia<~RRtzkEUNTI9QO~qpMS;U;CucR_IoJ*rE};5 z90U=)5#O7~3@;n}1FE|)j@TvO2*fVPe~up~&(#Oj6g_Y*Kh*=6{{!X2JZ=&45%a-A zPSgjSA9`SHJvaG);6Dbipg(#4Ry~dVYUw}n`RvmI@9Ex2&i)33i%a-_N58VX1CkFY z@5KJ(bN4T19pj~_zOMO>0pf}tXl_Br_|5_QJWt^JE#vHl{ZJA6};C^5Bo3LzYN3S??->m)C18^!TYxQ zHUCLx?aF`Dd?MeyUjD~>VE55u>)=1}ru^4`?|DCi_o?lyKhU>7ak&1R`apG^5s&Zu z4e=(tKW4wuJmN(1P9XIO-W$fs`?f_tX+QYO;B&cLhTTV;_tLxR9lBwSR=}RnA9oXe zUypaojC7)oR7eYWwkyO`Fzfz1gRFs>n|NID2*5R zPi_3bU*r>L*am$t;W_F7*YzaN(^#*Xz<>RGeI zu);hOyq_X}zwn>@@05NeuZJF>-!KzhhMh-^uL^k2HZ*7Xo#GbeVgmnfh5Z+Ch~WP% z!mO^o)%-E?F}Lbl#7kQZsN5uc?`%Gw9gAC^B9G_;-wzCbpfMi!>En+>56~dNf8HCG z1^=6VzTr$n?+xU?@|?gwx;z{+>}rU9;a2_I<(m@)!Y1LoaNw?Xf>U zCBC18y@!VVctS^>4Bqn=rFd{~a47$^Z`6-GO0(SXKm7j^2TT9|;1GWfWIE4EzLU<_ z4b;A<4+zw9j_cRUf3lU~2l#y=`9J-T?|)$bQTJ2(6?M$`KJ!V4dvkdIbWNN?8GX^` z0oLnPrvKlyOOf@FC!TWZK ze1YFm!31Pp=w}Z`EI{;-`ZdBAHjhCw@?eM{D=Nsd8@dE7+#8u zw{O+A%3Jf!Xc6%f)LJyD! zD#g7?8-4)c$A$V}J|B(XKjYlZQam_hemj1^!uo^Cv#38MMt$g4)Oh6mOAg3)pb#52 z@J``7^dsJ9+#tr!k{D-5;XUIlQ<1~i^^|-&W%++N8Dpp2f38j8EAk9~@xz}4-s|Rr z#NT(e@%ORs*n=JUj+?wK;%;o#zZ2geKk7&P#=FpbH@}GZ<{|ScaGU0M#R32nm^Znc03@Eiq!CaOnW5v>OZrO1A3r_`>Syc@9p0j`;XW! zYk1FT!GGM;8RZ8QFX1=eY3r^;JJdVf;4OB0p=C0$j_1YTafoBFNdJX|NMU~ zvF5#BuH7D!*Ob3>ODDelfp}ZKo96@BPP)bZ|K;-X1pOk&;nD52B4tTZ$-_ZlJd3F;1XZUZZsX{-Fc|jBP_i~9m;`g`6hxXt8 zwkcmEX9(J7Kgl`{D;<;@cxguI}6x;dx2ls z+)Zx(D;*^N<2>R4E+Za@?=3LzAo(1+59Ph>ojlYZSZME$t{8s?{odISUOwcz*q6!A zJjU+R|2?mXo8vffEB2qq^?Kmv-_;Yr`>^xqgYffdpO{}Tz|zbAo5Y7chwaYyd~V5K zV|Fe45tv<;vHpqfs_H&2Y1IeNpq2NwugK5j{cCtn|C0B+dGil{koPwa_xI)Z?kCOz z$yvuS`9#DIxy<``U}jml%qXkB=~sCl{HK4m>}S-`TJ$~bZ(t#^f6OXH-8NyApZ$>KFUDEiFiG~i`%4sk3Y_RDX%dE@*Mp;6YaMgx$(L3 zzHO`9@;>3c#nl>p3-8rWqTf}P|9|+y|NX!6UVjVL-+_J$`2J7cNB&pr69wP@9A(h_ zNNr>DSHk~q@Xz!E;PWE%0PapnK0uzA=mXsHVTm80pHcGNHq=Udw~5Q~2gnb&ZW;W7 zg{bh}d?EI~u7~&&1-!o?4iQJA9pnD5u)4(U=Jk3W1M|Eo!k){2!!Yco+L9fx#p21owk^ zJITW)lmGHqKD*yr@EyY~&$&E!uAPRzcjwMi1nC{@f9|}Fi{L*Eo^N=+!HN9$ zJqmcQ|0@3v_xJXCyWg$h{jH?D-=YovY083C`A`47ZT{T+ll6r6|3ug`mH+GY;Q?;? zpP|7n9u|n6C`;mlA$~!x2kPKIdKZ1*II#SuoACpR>4)=vpD7t1V{u#Vlp|Js?FY*PBb+L83LpR1hJdPE=D_Y6gb3L3>XSz_neoG)1eyj zn2N;Dd)}{mb+2`S?FJH2f5+EgpNQ`-lRvRj@ZZ#o7ig=ZsT24gO%v)q4C~qqtpCuC z2jqQ(vG$`nUNgpRec}0L)N!ca{UZO*p0Umxb!$$W_^mi+IKf>3|16+h6!?9bS&@_H zQ@%OY?{6oQU*-Piet)ld+q~8q2k$;VxCe{v;9c`N{54voT-c1kmb=|b{=JP62VigE zo_<5@M8|*lef^5uGjGjWUEt>v^6khIiqok!+tOS?)T9t`wRZ-hIz8Hx$#IgAI?us?l$oMUasXo z>L>8ebUd$;bN#(_fFJy)oR9pE$CGJ|J+R%@X9anI5oUe1CSa(s13rJbx4o#~w^x%7 zSPn0&2LNt?9jJQyv3?`*%ToTS^sF1wPiQ@%so|gB6`@hjXsB;u&ZiCQ&TKY!cM0R8de!n1 z^j{DlwenB=wA22x4(Lk$!5;22))DRZbNFYTluZHue!rk!k3{Q^e_8KjS()d5I^_P6 z-@A^k{Cj=!uibd$zf9zvm&)@<2k+pX4mbJdey!ynFGxROGUNHM&UrImt$6;dmxMWp zae=-M?@#r=hy$YTNB&^H9|48@^-|i&A8_vRb?;H>4-@pk15Q-_)BV#^`6nL^|4(^{eBXS)-w7EHkk`O} z$#YW4%Z|18m>0Om?(<5p1AKle_f)kDm9pRy|3i)sp5gDw^T_Y1`!Era-1B^LIL02} zui(9E8DEBK&(-CE`OZ-LadWuGZXIRlOMbvhTtM9z?*GF-S^f+8FKJ&1dT@BSOyHk# z=L@;#`)hdrP5Y>N+?w~vuoi5eIo__*qht9ePrI(+AM2ll|6h>r!#&M0;(zvs|F3yW zaE|}y?K1p6`+fBLy&UfO9Q@~>jU#jN|7+?&D&Z{K*%fvt#p_?0ufpRM^HA#V=?8f7 z`}%YI^)~pI=PdYLELHH`8_K_RCY0eBN7@59<$M1SMs@apI8!@9)U)|+U*zBQoC}U? z9B)0M|NPUn_KEs&)Gde)p4+csp01KMupTArO!I0OA7On5J5W~bH|jl2DPO}2#!c~u z&!5n#$cX#NTiP7mj;Es>{xQ2F`M-lF`ImG1_r~V4@ZWemRDUA>6?b0#i57x?+}>LL zQ|`CiM_oSnUmnOk+qbIYe^leP20LKCYw|nega}+~#{bdGmkqx^+UGvVnLOcdV?1ec zY5foT0sqF?^16k)0lN11a_sLcLLZ0^+Q;{v5!-i94$Tk`vk{{r3<>Psr)!$zw0;R5cB z^W?w!2|oe<%awT<{Q=m`;Gg@R!FxB~gmr=2+acQri(Tukh|X8I8Pip0h`7 zRhrpI?h9Tj@xXoO|LLF8|MMc=kGg*b|7_mLFZa#*9r|#iJ@9_H9dR(+b6QDpo}X)% zRQo5i2fR(bpU=~opEvK<|5NwJ;Sc7+_wbkw@c(7GpBVq+$2Rh>U;WPg|L7UbaEp6} z`wi_pKNo}@U^jW#0d9zPfViW}2XfX`gVQbNp;G=U<(})=sXWJC$31l&?Z7eh zHPn7u`9H!z`MJC(jW7Ocoxg|u%)EabhwELt($)z5Lrg bRO-0LHU0XoSI+pJx4tj`BkL3><($#K7P0$f literal 0 HcmV?d00001 diff --git a/Templates/Full/game/art/environment/Fog_Cube.DAE b/Templates/Full/game/art/environment/Fog_Cube.DAE new file mode 100644 index 0000000000..34cad9f48d --- /dev/null +++ b/Templates/Full/game/art/environment/Fog_Cube.DAE @@ -0,0 +1,177 @@ + + + + + Richard + OpenCOLLADA for 3ds Max; Version: 1.4.1; Revision: exported; Platform: x64; Configuration: Release_Max2011_static + file:///G:/Documents%20and%20Settings/Richard/Mijn%20documenten/3dsmax/scenes/FogVolumes.max + + 2014-08-16T10:10:23 + 2014-08-16T10:10:23 + + Z_UP + + + + + + + + 0 0 0 1 + + + 0.588 0.588 0.588 1 + + + 0.588 0.588 0.588 1 + + + 0.9 0.9 0.9 1 + + + 0 + + + 0 0 0 1 + + + 1 1 1 1 + + + 1 + + + + + + + + 0 + 0 + 0 + 1.5 + 0 + 3 + 1 + 0 + + + 1 + 1 + 0 + 0.1 + 0 + + + + + + + + + + + + + + + -0.85 -1 -0.85 0.85 -0.85 -1 -1 0.85 -0.85 0.85 0.85 -1 -0.85 -1 0.85 1 -0.85 0.85 -1 0.85 0.85 0.85 1 0.85 -1 -0.85 -0.85 -0.85 -0.85 -1 1 -0.85 -0.85 0.85 -1 -0.85 -0.85 1 -0.85 -0.85 0.85 -1 0.85 1 -0.85 1 0.85 -0.85 -0.85 -0.85 1 -1 -0.85 0.85 0.85 -0.85 1 0.85 -1 0.85 -0.85 0.85 1 -0.85 1 0.85 0.85 0.85 1 1 0.85 0.85 + + + + + + + + + + -0.341586 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 0.341586 0.341586 -0.8755788 0.341586 -0.341586 -0.8755788 -0.341586 -0.341586 0.8755786 0.341586 -0.341586 0.8755788 0.341586 0.341586 0.8755788 -0.341586 0.341586 0.8755788 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 -0.341586 0.341586 -0.8755786 0.341586 -0.341586 -0.8755788 0.341586 0.8755786 -0.341586 -0.341586 0.8755788 0.341586 -0.341586 0.8755786 0.341586 0.341586 0.8755788 -0.341586 0.341586 0.341586 0.8755786 -0.341586 -0.341586 0.8755788 -0.341586 -0.341586 0.8755786 0.341586 0.341586 0.8755788 0.341586 -0.8755786 0.341586 -0.341586 -0.8755788 -0.341586 -0.341586 -0.8755786 -0.341586 0.341586 -0.8755788 0.341586 0.341586 + + + + + + + + + + 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0.07542458 0.07542461 4.99755e-4 0.07542479 0.07542461 4.99547e-4 0.07542455 0.07542461 4.99755e-4 0.07542461 0.9245752 4.99547e-4 0.07542458 0.9245754 4.99755e-4 0.07542458 0.9245754 0.9995003 0.07542455 0.9245754 4.99755e-4 0.07542455 0.9245754 0.9995003 0.9245752 0.07542461 4.99576e-4 0.9245754 0.07542479 4.99547e-4 0.07542458 0.07542461 0.9995003 0.9245752 0.07542461 4.99576e-4 0.9245752 0.07542461 0.9995004 0.9245752 0.9245754 4.99547e-4 0.07542455 0.07542461 0.9995003 0.9245752 0.07542461 0.9995004 0.07542461 0.07542479 0.9995005 0.9245752 0.9245754 4.99576e-4 0.9245752 0.07542461 0.9995005 0.9245752 0.9245754 4.99576e-4 0.07542479 0.9245754 0.9995005 0.9245752 0.9245754 0.9995004 0.9245754 0.9245752 0.9995005 0.9245752 0.9245754 0.9995004 0.9995003 0.07542461 0.07542458 0.9245752 4.99547e-4 0.07542461 0.9245752 4.99547e-4 0.07542461 0.9995003 0.07542461 0.07542458 0.9995003 0.07542461 0.9245754 0.9245752 4.99547e-4 0.9245754 0.9245752 4.99547e-4 0.9245754 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.07542458 0.9245752 0.9995005 0.07542461 0.9995003 0.9245754 0.07542458 0.9245752 0.9995005 0.07542461 0.9995003 0.9245754 0.9245754 0.9245752 0.9995005 0.9245754 0.9995003 0.9245754 0.9245754 0.9245752 0.9995005 0.9245754 0.9995004 0.07542482 0.07542461 0.9995003 0.9245754 0.07542461 0.9245752 0.9995004 0.07542461 0.07542455 0.9995003 0.07542461 4.99606e-4 0.9245752 0.07542461 4.99725e-4 0.07542458 0.07542461 0.07542479 4.99576e-4 0.07542461 0.9245754 4.99755e-4 0.07542461 0.07542458 4.99755e-4 0.9245754 0.9245752 4.99576e-4 0.9245754 0.9995003 0.07542458 0.9245754 0.9995004 0.9245752 0.9245754 0.9245754 0.9995003 0.9245754 0.07542482 0.9995004 0.9245754 4.99755e-4 0.9245754 0.9245754 4.99576e-4 0.07542482 0.9245754 0.9995003 0.07542461 0.07542458 0.9995003 0.9245754 0.07542458 0.9995003 0.9245754 0.07542458 0.9995003 0.07542461 0.07542458 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.9245754 0.9995003 0.07542461 0.9245754 0.9995003 0.9245754 0.9245754 + + + + + + + + + + -0.8644259 0.01841655 0.3300502 -0.8715108 -0.05526615 0.3184382 -0.8644259 0.01841664 -0.3300501 -0.8715108 -0.05526611 -0.3184382 0.8738725 -0.06754867 0.3145678 0.8597026 -0.006149054 -0.3377912 0.8738725 -0.06754874 -0.3145678 0.8597026 -0.006148929 0.3377911 0.883319 -0.2990854 -0.116681 0.8478944 0.3571441 -0.06756432 0.8597026 0.3377913 0.00614921 0.883319 -0.2990854 0.116681 0.2990854 0.883319 -0.116681 -0.3571441 0.8478944 -0.06756432 -0.3377913 0.8597026 0.00614921 0.2990854 0.883319 0.116681 -0.883319 0.2990854 -0.116681 -0.8478944 -0.3571441 -0.06756432 -0.8597026 -0.3377913 0.00614921 -0.883319 0.2990854 0.116681 -0.2990854 -0.883319 -0.116681 0.3571441 -0.8478944 -0.06756432 0.3377913 -0.8597026 0.00614921 -0.2990854 -0.883319 0.116681 0.8360862 -0.3764972 0.1289794 0.7071068 -0.7071068 0 0.7071068 0.7071068 0 0.3764972 0.8360862 0.1289794 -0.3764972 -0.8360862 0.1289794 -0.7071068 -0.7071068 0 -0.7071068 0.7071068 0 -0.8360862 0.3764972 0.1289794 0.8360862 -0.3764971 -0.1289794 0.7071068 -0.7071068 0 0.3764971 0.8360862 -0.1289794 0.7071068 0.7071068 0 -0.3764971 -0.8360862 -0.1289794 -0.7071068 -0.7071068 0 -0.8360862 0.3764971 -0.1289794 -0.7071068 0.7071068 0 -0.376497 0.1289792 0.8360862 -0.3764973 -0.1289798 0.8360861 -0.8833191 -0.2990855 0.1166808 -0.883319 0.2990853 -0.1166812 -0.3764971 0.1289794 -0.8360862 -0.3764972 -0.1289795 -0.8360862 -0.8833191 -0.2990855 -0.1166807 -0.883319 0.2990853 0.1166812 0.883319 -0.2990853 0.1166812 0.8833191 0.2990855 -0.1166807 0.3764971 0.1289797 -0.8360862 0.3764971 -0.1289793 -0.8360862 0.883319 -0.2990853 -0.1166811 0.8833191 0.2990855 0.1166808 0.3764972 0.1289799 0.8360861 0.3764971 -0.128979 0.8360862 0.3764972 0.8360862 0.1289794 0.3764971 0.8360862 -0.1289794 0.8360862 -0.3764971 -0.1289794 0.8360862 -0.3764972 0.1289794 -0.8360862 0.3764972 0.1289794 -0.8360862 0.3764971 -0.1289794 -0.3764972 -0.8360862 0.1289794 -0.3764971 -0.8360862 -0.1289794 + + + + + + + + + + 0.1043954 -0.9396398 0.3258505 -0.06496345 -0.9379679 -0.3405817 0.1043953 -0.9396398 -0.3258505 -0.06496349 -0.937968 0.3405817 0.05187585 -0.9370471 -0.3453283 -0.1307439 -0.939827 -0.3156443 0.05187577 -0.9370471 0.3453283 -0.1307438 -0.939827 0.3156443 0 0.3634471 -0.9316148 -0.196368 0.2889368 -0.9369926 0.1307441 -0.3156442 -0.939827 0 -0.3634471 -0.9316148 -0.3634471 0 -0.9316148 -0.2889368 -0.196368 -0.9369926 0.3156442 0.1307441 -0.939827 0.3634471 0 -0.9316148 0 -0.3634471 -0.9316148 0.196368 -0.2889368 -0.9369926 -0.1307441 0.3156442 -0.939827 0 0.3634471 -0.9316148 0.3634471 0 -0.9316148 0.2889368 0.196368 -0.9369926 -0.3156442 -0.1307441 -0.939827 -0.3634471 0 -0.9316148 0.2608475 0.2608475 -0.9294714 0.6191276 0.6191276 -0.4830755 -0.6191276 0.6191276 -0.4830755 -0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 0.6191276 -0.6191276 -0.4830755 -0.6191276 -0.6191276 -0.4830755 -0.2608475 -0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 -0.6191276 -0.6191276 -0.4830755 0.2608475 -0.2608475 -0.9294714 0.6191276 -0.6191276 -0.4830755 -0.2608475 0.2608475 -0.9294714 -0.6191276 0.6191276 -0.4830755 0.2608475 0.2608475 -0.9294714 0.6191276 0.6191276 -0.4830755 0.2608476 -0.9294715 0.2608473 -0.2608474 -0.9294714 -0.2608479 1.81809e-7 -0.363447 -0.9316149 2.27262e-7 -0.3634472 -0.9316148 0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608477 2.72714e-7 -0.363447 0.9316149 2.72714e-7 -0.3634472 0.9316148 2.72714e-7 -0.3634472 -0.9316148 2.72714e-7 -0.363447 -0.9316149 -0.2608474 -0.9294714 -0.2608478 0.2608476 -0.9294714 0.2608474 1.81809e-7 -0.3634472 0.9316148 2.27262e-7 -0.3634471 0.9316149 -0.2608473 -0.9294714 0.260848 0.2608477 -0.9294715 -0.2608472 -0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608475 0.2608475 -0.9294714 -0.2608475 -0.2608475 -0.9294714 0.2608475 0.2608475 -0.9294714 0.2608475 -0.2608475 -0.9294714 -0.2608475 0.2608475 -0.9294714 + + + + + + + + + + + + + + + + + +

9 0 21 0 13 1 25 1 3 2 15 2 3 2 15 2 1 3 13 3 9 0 21 0 16 4 28 4 18 5 30 5 22 6 34 6 22 6 34 6 20 7 32 7 16 4 28 4 0 8 12 8 11 9 23 9 19 10 31 10 19 10 31 10 4 11 16 11 0 8 12 8 10 12 22 12 15 13 27 13 23 14 35 14 23 14 35 14 5 15 17 15 10 12 22 12 14 16 26 16 12 17 24 17 21 18 33 18 21 18 33 18 7 19 19 19 14 16 26 16 2 20 14 20 8 21 20 21 17 22 29 22 17 22 29 22 6 23 18 23 2 20 14 20 0 8 36 24 8 21 20 21 9 0 37 25 1 3 38 26 10 12 39 27 11 9 23 9 2 20 40 28 12 17 24 17 13 1 41 29 3 2 42 30 14 16 43 31 15 13 27 13 4 11 44 32 16 4 45 33 17 22 29 22 5 15 46 34 18 5 47 35 19 10 31 10 6 23 48 36 20 7 49 37 21 18 33 18 7 19 50 38 22 6 51 39 23 14 35 14 9 0 21 0 8 21 52 40 2 20 53 41 2 20 53 41 13 1 25 1 9 0 21 0 13 1 25 1 12 17 54 42 14 16 55 43 14 16 55 43 3 2 15 2 13 1 25 1 3 2 15 2 15 13 56 44 10 12 57 45 10 12 57 45 1 3 13 3 3 2 15 2 1 3 13 3 11 9 58 46 0 8 59 47 0 8 59 47 9 0 21 0 1 3 13 3 16 4 28 4 4 11 60 48 19 10 61 49 19 10 61 49 18 5 30 5 16 4 28 4 18 5 30 5 5 15 62 50 23 14 63 51 23 14 63 51 22 6 34 6 18 5 30 5 22 6 34 6 7 19 64 52 21 18 65 53 21 18 65 53 20 7 32 7 22 6 34 6 20 7 32 7 6 23 66 54 17 22 67 55 17 22 67 55 16 4 28 4 20 7 32 7 11 9 23 9 10 12 68 56 5 15 69 57 5 15 69 57 19 10 31 10 11 9 23 9 4 11 70 58 17 22 29 22 8 21 20 21 8 21 20 21 0 8 71 59 4 11 70 58 15 13 27 13 14 16 72 60 7 19 73 61 7 19 73 61 23 14 35 14 15 13 27 13 12 17 24 17 2 20 74 62 6 23 75 63 6 23 75 63 21 18 33 18 12 17 24 17

+
+
+
+
+ + + + + 0 0 0 + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + +
\ No newline at end of file diff --git a/Templates/Full/game/art/environment/Fog_Cube.cs b/Templates/Full/game/art/environment/Fog_Cube.cs new file mode 100644 index 0000000000..3c686032c6 --- /dev/null +++ b/Templates/Full/game/art/environment/Fog_Cube.cs @@ -0,0 +1,8 @@ + +singleton TSShapeConstructor(Fog_CubeDAE) +{ + baseShape = "./Fog_Cube.DAE"; + lodType = "TrailingNumber"; + neverImport = "env*"; + loadLights = "0"; +}; diff --git a/Templates/Full/game/art/environment/LightVolume_Sphere.DAE b/Templates/Full/game/art/environment/LightVolume_Sphere.DAE new file mode 100644 index 0000000000..81c93d8e03 --- /dev/null +++ b/Templates/Full/game/art/environment/LightVolume_Sphere.DAE @@ -0,0 +1,423 @@ + + + + + Richard + OpenCOLLADA for 3ds Max; Version: 1.4.1; Revision: exported; Platform: x64; Configuration: Release_Max2011_static + file:///G:/Documents%20and%20Settings/Richard/Mijn%20documenten/3dsmax/scenes/lightfog.max + + 2014-08-22T22:51:35 + 2014-08-22T22:51:35 + + Z_UP + + + + + + + + 0 0 0 1 + + + 0.588 0.588 0.588 1 + + + 0.588 0.588 0.588 1 + + + 0.9 0.9 0.9 1 + + + 0 + + + 0 0 0 1 + + + 1 1 1 1 + + + 1 + + + + + + + + 0 + 0 + 0 + 1.5 + 0 + 3 + 1 + 0 + + + 1 + 1 + 0 + 0.1 + 0 + + + + + + + + + + + + + + + 0 0 5 -9.48283e-8 2.169419 4.504844 -0.9412758 1.954579 4.504844 -1.69612 1.35261 4.504844 -2.115027 0.4827411 4.504844 -2.115027 -0.482741 4.504844 -1.69612 -1.35261 4.504844 -0.9412759 -1.954579 4.504844 2.58701e-8 -2.169419 4.504844 0.9412759 -1.954579 4.504844 1.696121 -1.35261 4.504844 2.115027 -0.4827399 4.504844 2.115026 0.4827427 4.504844 1.696119 1.352612 4.504844 0.9412734 1.95458 4.504844 -1.70875e-7 3.909158 3.117449 -1.69612 3.522029 3.117449 -3.056303 2.43732 3.117449 -3.811147 0.8698694 3.117449 -3.811147 -0.8698691 3.117449 -3.056303 -2.43732 3.117449 -1.696121 -3.522029 3.117449 4.66162e-8 -3.909158 3.117449 1.696121 -3.522029 3.117449 3.056304 -2.437319 3.117449 3.811147 -0.8698672 3.117449 3.811146 0.8698722 3.117449 3.0563 2.437323 3.117449 1.696116 3.522031 3.117449 -2.13077e-7 4.87464 1.112604 -2.115027 4.391898 1.112604 -3.811147 3.039288 1.112604 -4.752422 1.084709 1.112604 -4.752422 -1.084709 1.112604 -3.811147 -3.039288 1.112604 -2.115028 -4.391898 1.112604 5.81295e-8 -4.87464 1.112604 2.115028 -4.391898 1.112604 3.811148 -3.039287 1.112604 4.752423 -1.084707 1.112604 4.752421 1.084713 1.112604 3.811144 3.039291 1.112604 2.115022 4.391901 1.112604 -2.13077e-7 4.87464 -1.112605 -2.115027 4.391898 -1.112605 -3.811147 3.039288 -1.112605 -4.752422 1.084709 -1.112605 -4.752422 -1.084709 -1.112605 -3.811147 -3.039288 -1.112605 -2.115028 -4.391898 -1.112605 5.81295e-8 -4.87464 -1.112605 2.115028 -4.391898 -1.112605 3.811148 -3.039287 -1.112605 4.752423 -1.084707 -1.112605 4.752421 1.084713 -1.112605 3.811144 3.039291 -1.112605 2.115022 4.391901 -1.112605 -1.70875e-7 3.909157 -3.11745 -1.69612 3.522028 -3.11745 -3.056302 2.437319 -3.11745 -3.811146 0.8698692 -3.11745 -3.811146 -0.869869 -3.11745 -3.056302 -2.437319 -3.11745 -1.69612 -3.522028 -3.11745 4.66162e-8 -3.909157 -3.11745 1.69612 -3.522028 -3.11745 3.056303 -2.437318 -3.11745 3.811146 -0.8698671 -3.11745 3.811145 0.8698721 -3.11745 3.0563 2.437322 -3.11745 1.696116 3.52203 -3.11745 -9.48283e-8 2.169418 -4.504845 -0.9412755 1.954578 -4.504845 -1.696119 1.35261 -4.504845 -2.115026 0.4827409 -4.504845 -2.115026 -0.4827408 -4.504845 -1.69612 -1.35261 -4.504845 -0.9412756 -1.954578 -4.504845 2.58701e-8 -2.169418 -4.504845 0.9412756 -1.954578 -4.504845 1.69612 -1.352609 -4.504845 2.115026 -0.4827397 -4.504845 2.115026 0.4827425 -4.504845 1.696118 1.352612 -4.504845 0.9412731 1.954579 -4.504845 0 0 -5 + + + + + + + + + + 3.34297e-8 3.12427e-8 1 -1.46401e-7 0.4589442 0.8884651 -0.1991285 0.4134944 0.888465 -0.358817 0.286147 0.8884651 -0.4474375 0.1021247 0.888465 -0.4474375 -0.1021246 0.8884651 -0.358817 -0.286147 0.888465 -0.1991284 -0.4134944 0.8884651 -4.96273e-9 -0.4589442 0.888465 0.1991285 -0.4134944 0.888465 0.3588171 -0.2861469 0.888465 0.4474375 -0.1021244 0.8884651 0.4474374 0.102125 0.888465 0.3588168 0.2861473 0.8884651 0.1991281 0.4134945 0.8884651 -2.38195e-7 0.7935484 0.6085071 -0.3443078 0.7149624 0.6085071 -0.6204212 0.4947692 0.6085072 -0.7736526 0.1765811 0.6085071 -0.7736526 -0.176581 0.608507 -0.6204212 -0.4947692 0.6085072 -0.3443078 -0.7149624 0.6085071 -1.26699e-8 -0.7935485 0.6085071 0.3443078 -0.7149624 0.6085072 0.6204213 -0.4947691 0.6085071 0.7736526 -0.1765807 0.6085072 0.7736524 0.1765818 0.6085072 0.6204207 0.4947699 0.608507 0.3443072 0.7149627 0.6085071 -2.56849e-7 0.9764001 0.2159697 -0.4236442 0.879706 0.2159697 -0.7633804 0.6087754 0.2159697 -0.9519197 0.2172694 0.2159697 -0.9519197 -0.2172693 0.2159698 -0.7633804 -0.6087753 0.2159698 -0.4236441 -0.8797061 0.2159698 2.56849e-9 -0.9764001 0.2159697 0.4236443 -0.879706 0.2159698 0.7633805 -0.6087751 0.2159698 0.9519198 -0.2172689 0.2159698 0.9519196 0.2172702 0.2159698 0.7633796 0.6087762 0.2159697 0.4236434 0.8797064 0.2159697 -2.56849e-7 0.9764 -0.2159699 -0.4236442 0.8797059 -0.2159699 -0.7633803 0.6087754 -0.2159699 -0.9519196 0.2172694 -0.2159698 -0.9519197 -0.2172693 -0.2159699 -0.7633804 -0.6087753 -0.2159699 -0.4236442 -0.879706 -0.2159699 2.31164e-8 -0.9764 -0.2159699 0.4236442 -0.8797059 -0.2159699 0.7633805 -0.6087751 -0.2159699 0.9519197 -0.2172689 -0.2159699 0.9519195 0.2172701 -0.2159699 0.7633796 0.6087762 -0.2159699 0.4236434 0.8797063 -0.2159699 -1.95117e-7 0.7935483 -0.6085073 -0.3443078 0.7149623 -0.6085073 -0.6204211 0.4947692 -0.6085073 -0.7736524 0.1765811 -0.6085073 -0.7736524 -0.1765811 -0.6085073 -0.6204211 -0.4947692 -0.6085073 -0.3443078 -0.7149622 -0.6085073 1.77379e-8 -0.7935483 -0.6085073 0.3443078 -0.7149622 -0.6085073 0.6204212 -0.494769 -0.6085073 0.7736525 -0.1765806 -0.6085073 0.7736523 0.1765817 -0.6085073 0.6204206 0.4947698 -0.6085073 0.3443071 0.7149625 -0.6085073 -1.16624e-7 0.4589441 -0.8884652 -0.1991284 0.4134943 -0.8884652 -0.358817 0.2861468 -0.8884652 -0.4474374 0.1021247 -0.8884652 -0.4474373 -0.1021246 -0.8884652 -0.3588169 -0.2861468 -0.8884652 -0.1991284 -0.4134943 -0.8884652 -9.92546e-9 -0.4589441 -0.8884651 0.1991285 -0.4134943 -0.8884651 0.358817 -0.2861468 -0.8884652 0.4474374 -0.1021244 -0.8884651 0.4474373 0.102125 -0.8884652 0.3588167 0.2861473 -0.8884651 0.1991281 0.4134944 -0.8884652 2.59315e-8 -2.62439e-8 -1 + + + + + + + + + + -0.03571416 1 0.999001 3.79455e-8 0.8571429 0.999001 0.0714286 0.8571428 0.9990011 0.1428572 0.8571428 0.9990011 0.2142857 0.8571428 0.9990011 0.2857142 0.8571428 0.9990011 0.3571428 0.8571428 0.9990011 0.4285714 0.8571428 0.9990011 0.4999999 0.8571429 0.999001 0.5714285 0.8571429 0.999001 0.6428571 0.8571429 0.999001 0.7142857 0.8571429 0.999001 0.7857143 0.8571429 0.999001 0.857143 0.8571429 0.999001 0.9285716 0.8571429 0.999001 1 0.7142857 0.9990011 0.0714286 0.7142857 0.9990011 0.1428572 0.7142857 0.9990011 0.2142857 0.7142857 0.9990011 0.2857142 0.7142857 0.9990011 0.3571428 0.7142857 0.9990011 0.4285714 0.7142857 0.9990011 0.5 0.7142857 0.9990011 0.5714285 0.7142857 0.999001 0.6428571 0.7142857 0.999001 0.7142857 0.7142857 0.9990009 0.7857143 0.7142857 0.999001 0.857143 0.7142857 0.999001 0.9285716 0.7142857 0.999001 0.9999999 0.5714285 0.999001 0.0714286 0.5714285 0.999001 0.1428572 0.5714285 0.9990011 0.2142857 0.5714285 0.9990011 0.2857142 0.5714285 0.9990011 0.3571428 0.5714285 0.9990011 0.4285714 0.5714285 0.9990011 0.5 0.5714285 0.999001 0.5714285 0.5714285 0.999001 0.6428571 0.5714285 0.999001 0.7142857 0.5714285 0.9990009 0.7857143 0.5714285 0.9990009 0.8571429 0.5714285 0.999001 0.9285716 0.5714285 0.999001 0.9999999 0.4285714 0.999001 0.0714286 0.4285714 0.999001 0.1428572 0.4285714 0.9990011 0.2142857 0.4285714 0.9990011 0.2857142 0.4285714 0.9990011 0.3571428 0.4285714 0.9990011 0.4285714 0.4285714 0.9990011 0.5 0.4285714 0.999001 0.5714285 0.4285714 0.999001 0.6428571 0.4285714 0.999001 0.7142857 0.4285714 0.999001 0.7857143 0.4285714 0.999001 0.8571429 0.4285714 0.999001 0.9285716 0.4285714 0.999001 1 0.2857142 0.999001 0.0714286 0.2857142 0.9990011 0.1428572 0.2857142 0.9990011 0.2142857 0.2857142 0.9990011 0.2857142 0.2857143 0.9990011 0.3571428 0.2857143 0.9990011 0.4285714 0.2857142 0.9990011 0.5 0.2857142 0.999001 0.5714285 0.2857142 0.999001 0.6428571 0.2857142 0.999001 0.7142857 0.2857142 0.999001 0.7857143 0.2857142 0.999001 0.857143 0.2857142 0.999001 0.9285716 0.2857142 0.999001 3.79455e-8 0.1428571 0.999001 0.0714286 0.1428572 0.9990011 0.1428572 0.1428571 0.999001 0.2142857 0.1428572 0.9990011 0.2857142 0.1428572 0.9990011 0.3571428 0.1428572 0.9990011 0.4285714 0.1428572 0.9990011 0.4999999 0.1428571 0.999001 0.5714285 0.1428571 0.999001 0.6428571 0.1428571 0.999001 0.7142857 0.1428571 0.999001 0.7857143 0.1428571 0.999001 0.857143 0.1428571 0.999001 0.9285716 0.1428571 0.999001 -0.03571416 0 0.999001 0.03571432 1 0.999001 0.1071429 1 0.999001 0.1785714 1 0.999001 0.25 1 0.999001 0.3214285 1 0.999001 0.3928571 1 0.999001 0.4642856 1 0.999001 0.5357142 1 0.999001 0.6071428 1 0.999001 0.6785715 1 0.999001 0.75 1 0.999001 0.8214287 1 0.999001 0.8928573 1 0.999001 -0.07142836 0.8571429 0.999001 0 0.7142857 0.9990011 -0.07142836 0.8571429 0.999001 0 0.7142857 0.9990011 0 0.7142857 0.9990011 -5.96046e-8 0.5714285 0.999001 0 0.7142857 0.9990011 -5.96046e-8 0.5714285 0.999001 -5.96046e-8 0.4285714 0.999001 -5.96046e-8 0.5714285 0.999001 -5.96046e-8 0.4285714 0.999001 0 0.2857142 0.999001 -5.96046e-8 0.4285714 0.999001 0 0.2857142 0.999001 0 0.2857142 0.999001 -0.07142836 0.2857142 0.999001 -0.07142836 0.1428571 0.999001 -0.07142836 0.2857142 0.999001 0 0.2857142 0.999001 0.03571432 0 0.999001 0.1071429 0 0.999001 0.1785714 0 0.999001 0.25 0 0.999001 0.3214285 0 0.999001 0.3928571 0 0.999001 0.4642856 0 0.999001 0.5357142 0 0.999001 0.6071428 0 0.999001 0.6785715 0 0.999001 0.75 0 0.999001 0.8214287 0 0.999001 0.8928573 0 0.999001 -0.07142836 0.1428571 0.999001 + + + + + + + + + + -0.9749277 -0.2225218 3.95437e-8 -0.9749279 -0.03513084 0.01814697 -0.8631371 -0.4546571 0.01814702 -0.7818314 -0.6234899 4.56159e-8 -0.5803916 -0.7841328 0.01814686 -0.4338837 -0.9009689 4.26533e-8 -0.1826924 -0.9583017 0.01814685 1.04443e-15 -1 3.12427e-8 0.2511913 -0.9426673 0.01814685 0.4338836 -0.900969 1.36441e-8 0.6353235 -0.740326 0.01814683 0.7818314 -0.6234899 -6.65688e-9 0.8936221 -0.3913545 0.01814665 0.9749277 -0.2225219 -2.56394e-8 0.9749278 0.03512998 0.01814669 0.9749279 0.222521 -3.95437e-8 0.8631371 0.4546568 0.01814684 0.7818313 0.62349 -4.56159e-8 0.5803913 0.7841329 0.01814687 0.4338832 0.9009691 -4.26533e-8 0.1826917 0.9583018 0.01814686 -7.40827e-7 1 -3.12427e-8 -0.2511921 0.942667 0.01814683 -0.4338844 0.9009686 -1.36441e-8 -0.6353242 0.7403254 0.01814688 -0.7818321 0.623489 6.65693e-9 -0.852976 0.4757568 -0.03024468 -0.974928 0.2225204 2.56394e-8 -0.9545922 0.2647484 0.09073415 -0.974928 -0.08239544 0.1074507 -0.8783796 -0.4230055 1.2098e-7 -0.6078575 -0.7622294 -2.40103e-8 -0.2169419 -0.9504844 3.08126e-9 0.2169418 -0.9504845 1.00124e-8 0.6078575 -0.7622294 -1.22219e-8 0.8783796 -0.4230055 2.27489e-8 0.9749279 -1.0315e-7 -1.14217e-7 0.8783796 0.4230055 2.7348e-8 0.6078573 0.7622295 2.9091e-8 0.2169413 0.9504846 1.53869e-8 -0.2169426 0.9504843 -1.74207e-8 -0.6078583 0.7622288 -1.32728e-8 -0.8783801 0.4230047 1.08194e-8 -0.974928 0.08239487 -0.1074508 -0.9545922 0.2647484 0.09073415 -0.974928 0.08239487 -0.1074508 -0.9749279 -0.08239547 0.1074508 -0.9749279 -0.01037927 0.04692359 -0.8783797 -0.4230054 1.38382e-9 -0.974928 -0.08239544 0.1074507 -0.6078575 -0.7622294 -2.5756e-9 -0.2169418 -0.9504845 -4.34778e-9 0.2169417 -0.9504845 7.21083e-10 0.6078575 -0.7622294 2.68537e-9 0.8783797 -0.4230054 -1.49521e-8 0.9749279 9.89275e-9 3.31305e-8 0.8783796 0.4230055 6.33846e-10 0.6078573 0.7622295 2.8277e-9 0.2169413 0.9504845 1.9462e-9 -0.2169426 0.9504842 3.51617e-9 -0.6078584 0.7622287 -1.28249e-8 -0.8783801 0.4230047 -3.55722e-8 -0.974928 0.01037875 -0.04692358 -0.9749279 -0.01037927 0.04692359 -0.9749279 -0.01037929 -0.04692363 -0.8783796 -0.4230055 7.11577e-9 -0.9749279 -0.01037927 0.04692359 -0.6078576 -0.7622294 -5.38627e-9 -0.2169418 -0.9504845 -4.0761e-8 0.2169417 -0.9504845 -6.37691e-9 0.6078574 -0.7622295 4.32713e-8 0.8783797 -0.4230054 4.91462e-8 0.9749279 7.86884e-9 6.87766e-8 0.8783796 0.4230055 7.54338e-8 0.6078573 0.7622295 -3.74104e-9 0.2169413 0.9504845 -6.87179e-10 -0.2169426 0.9504843 -5.06594e-9 -0.6078584 0.7622287 1.11192e-8 -0.8783801 0.4230047 -7.55682e-8 -0.974928 0.01037875 0.04692348 -0.9749279 -0.01037935 -0.04692387 -0.9749279 -0.08239562 -0.107451 -0.8783797 -0.4230055 5.99473e-9 -0.9749279 -0.01037929 -0.04692363 -0.6078575 -0.7622295 -5.14789e-8 -0.2169418 -0.9504844 -6.99784e-8 0.2169419 -0.9504845 -6.77193e-8 0.6078575 -0.7622295 8.75301e-8 0.8783796 -0.4230056 2.38485e-7 0.9749279 -3.58523e-8 7.51737e-8 0.8783796 0.4230055 1.39721e-9 0.6078573 0.7622295 6.92574e-8 0.2169412 0.9504845 -5.31509e-8 -0.2169425 0.9504843 -5.50918e-9 -0.6078583 0.7622288 -2.65355e-8 -0.8605051 0.4601225 0.05372539 -0.974928 0.08239491 0.1074507 -0.9749278 -0.08239586 -0.1074513 -0.9749279 0.03512977 0.0181467 -0.8936222 -0.3913543 0.01814683 -0.9749279 -0.08239562 -0.107451 -0.6353234 -0.740326 0.01814686 -0.2511912 -0.9426673 0.01814672 0.1826924 -0.9583017 0.01814681 0.5803915 -0.7841328 0.01814685 0.8631371 -0.454657 0.01814701 0.9749278 -0.03513059 0.01814698 0.8936221 0.3913542 0.01814686 0.6353234 0.7403261 0.01814691 0.2511908 0.9426673 0.01814683 -0.1826932 0.9583015 0.01814677 -0.5803923 0.7841322 0.01814686 -0.802168 0.5812611 0.09073409 -0.91413 0.3487692 -0.1074508 -0.9545922 0.2647484 -0.09073412 -0.91413 0.3487692 -0.1074508 -0.974928 0.08239496 0.1074508 -0.9749278 -0.2225216 -1.94415e-8 -0.7818317 -0.6234895 -3.91125e-9 -0.4338831 -0.9009692 1.23937e-8 -6.80542e-16 -1 2.62439e-8 0.4338836 -0.9009689 3.48962e-8 0.7818314 -0.6234899 3.66368e-8 0.9749278 -0.2225216 3.11211e-8 0.9749279 0.222521 1.94415e-8 0.7818313 0.6234901 3.91122e-9 0.4338837 0.9009689 -1.23937e-8 -1.19783e-6 1 -2.62439e-8 -0.4338844 0.9009685 -3.48962e-8 -0.7818321 0.623489 -3.66368e-8 -0.974928 0.2225205 -3.11211e-8 -0.9545922 0.2647484 -0.09073412 + + + + + + + + + + -0.2225218 0.9749277 -2.30205e-8 -0.04052453 0.8877353 -0.4585672 -0.4216851 0.7822389 -0.4585672 -0.6234899 0.7818314 -3.58345e-9 -0.7193257 0.5218109 -0.4585672 -0.9009689 0.4338837 1.65634e-8 -0.8744953 0.1580317 -0.4585672 -1 0 3.34297e-8 -0.8564605 -0.2370475 -0.4585672 -0.900969 -0.4338836 4.36748e-8 -0.6687932 -0.5851767 -0.4585672 -0.6234899 -0.7818314 4.52696e-8 -0.3486635 -0.8174044 -0.4585672 -0.2225219 -0.9749277 3.78982e-8 0.04052361 -0.8877353 -0.4585672 0.222521 -0.9749279 2.30206e-8 0.4216849 -0.7822391 -0.4585672 0.62349 -0.7818313 3.58345e-9 0.7193259 -0.5218107 -0.4585672 0.9009691 -0.4338832 -1.65634e-8 0.8744955 -0.1580312 -0.4585672 1 7.40827e-7 -3.34297e-8 0.8564603 0.2370483 -0.4585672 0.9009686 0.4338844 -4.36748e-8 0.6687926 0.5851774 -0.4585672 0.623489 0.7818321 -4.52696e-8 0.445375 0.7693955 -0.4578992 0.2225204 0.974928 -3.78982e-8 0.1987407 0.8707421 -0.4497891 -0.1375673 0.6027217 -0.7860037 -0.2640215 0.5482458 -0.7935484 -0.4757501 0.3793979 -0.7935484 -0.5932505 0.1354056 -0.7935484 -0.5932505 -0.1354055 -0.7935485 -0.4757501 -0.3793979 -0.7935484 -0.2640214 -0.5482459 -0.7935484 -1.5735e-7 -0.6085071 -0.7935484 0.2640215 -0.5482459 -0.7935484 0.4757502 -0.3793978 -0.7935484 0.5932507 -0.1354052 -0.7935484 0.5932505 0.135406 -0.7935484 0.4757496 0.3793984 -0.7935485 0.2640209 0.5482461 -0.7935484 0.1375669 0.6027217 -0.7860037 0.1987407 0.8707421 -0.4497891 0.137567 0.6027217 -0.7860037 -0.1375673 0.6027217 -0.7860037 -0.04923392 0.2157078 -0.975216 -0.09370578 0.194582 -0.9764001 -0.1375673 0.6027217 -0.7860037 -0.168852 0.1346549 -0.9764001 -0.2105549 0.04805777 -0.9764001 -0.2105549 -0.04805776 -0.9764001 -0.168852 -0.1346549 -0.9764001 -0.09370578 -0.194582 -0.9764001 3.5372e-8 -0.2159697 -0.9764001 0.09370579 -0.194582 -0.9764001 0.168852 -0.1346549 -0.9764 0.210555 -0.04805767 -0.9764 0.2105549 0.04805796 -0.9764 0.1688518 0.1346551 -0.9764001 0.09370564 0.1945821 -0.9764001 0.04923379 0.2157078 -0.975216 -0.04923392 0.2157078 -0.975216 0.04923396 -0.215708 -0.9752159 0.09370587 -0.1945822 -0.9764 -0.04923392 0.2157078 -0.975216 0.1688521 -0.134655 -0.9764 0.2105551 -0.04805776 -0.9764 0.210555 0.04805779 -0.9764 0.1688521 0.134655 -0.9764 0.0937059 0.1945822 -0.9764 6.71373e-8 0.2159699 -0.9764 -0.09370582 0.1945822 -0.9764 -0.1688522 0.134655 -0.9764 -0.2105552 0.04805771 -0.9764 -0.210555 -0.04805798 -0.9764 -0.1688519 -0.1346552 -0.9764 -0.09370562 -0.1945823 -0.9764 -0.0492337 -0.215708 -0.9752159 0.04923421 -0.215708 -0.9752159 0.1375676 -0.6027218 -0.7860035 0.2640215 -0.5482461 -0.7935483 0.04923396 -0.215708 -0.9752159 0.4757503 -0.379398 -0.7935483 0.5932507 -0.1354055 -0.7935483 0.5932507 0.1354057 -0.7935483 0.4757503 0.379398 -0.7935482 0.2640218 0.548246 -0.7935483 8.35655e-8 0.6085073 -0.7935483 -0.2640215 0.5482461 -0.7935483 -0.4757503 0.379398 -0.7935483 -0.5932509 0.1354052 -0.7935483 -0.5932507 -0.135406 -0.7935483 -0.4757498 -0.3793985 -0.7935483 -0.3258031 -0.5168711 -0.7916417 -0.1375669 -0.6027219 -0.7860036 0.137568 -0.6027218 -0.7860035 -0.04052343 -0.8877354 -0.458567 0.3486632 -0.8174045 -0.4585671 0.1375676 -0.6027218 -0.7860035 0.6687933 -0.5851768 -0.458567 0.8564606 -0.2370474 -0.4585671 0.8744955 0.1580318 -0.458567 0.7193258 0.5218109 -0.458567 0.4216851 0.782239 -0.458567 0.04052431 0.8877353 -0.4585671 -0.3486632 0.8174045 -0.4585671 -0.6687933 0.5851767 -0.458567 -0.8564607 0.2370471 -0.4585671 -0.8744953 -0.1580326 -0.458567 -0.7193253 -0.5218116 -0.4585671 -0.5568597 -0.6982815 -0.449789 -0.137567 -0.6027219 -0.7860035 -0.1987408 -0.8707422 -0.449789 -0.137567 -0.6027219 -0.7860035 -0.137567 -0.6027219 -0.7860036 0.2225216 -0.9749278 3.13562e-8 0.6234895 -0.7818317 3.66863e-8 0.9009692 -0.4338831 3.47502e-8 1 0 2.59315e-8 0.9009689 0.4338836 1.19766e-8 0.6234899 0.7818314 -4.35029e-9 0.2225216 0.9749278 -1.98156e-8 -0.222521 0.9749279 -3.13562e-8 -0.6234901 0.7818313 -3.66863e-8 -0.9009689 0.4338837 -3.47502e-8 -1 -1.19783e-6 -2.59314e-8 -0.9009685 -0.4338844 -1.19766e-8 -0.623489 -0.7818321 4.35033e-9 -0.2225205 -0.974928 1.98156e-8 -0.1987408 -0.8707422 -0.449789 + + + + + + + + + + + + + + + + + +

0 0 86 0 1 1 1 1 2 2 2 2 0 0 87 3 2 2 2 2 3 3 3 4 0 0 88 5 3 3 3 4 4 4 4 6 0 0 89 7 4 4 4 6 5 5 5 8 0 0 90 9 5 5 5 8 6 6 6 10 0 0 91 11 6 6 6 10 7 7 7 12 0 0 92 13 7 7 7 12 8 8 8 14 0 0 93 15 8 8 8 14 9 9 9 16 0 0 94 17 9 9 9 16 10 10 10 18 0 0 95 19 10 10 10 18 11 11 11 20 0 0 96 21 11 11 11 20 12 12 12 22 0 0 97 23 12 12 12 22 13 13 13 24 0 0 98 25 13 13 13 24 14 14 14 26 0 0 0 27 14 14 99 28 1 1 1 1 1 1 1 1 15 15 100 29 16 16 16 30 1 1 1 1 16 16 16 30 2 2 2 2 2 2 2 2 16 16 16 30 17 17 17 31 2 2 2 2 17 17 17 31 3 3 3 4 3 3 3 4 17 17 17 31 18 18 18 32 3 3 3 4 18 18 18 32 4 4 4 6 4 4 4 6 18 18 18 32 19 19 19 33 4 4 4 6 19 19 19 33 5 5 5 8 5 5 5 8 19 19 19 33 20 20 20 34 5 5 5 8 20 20 20 34 6 6 6 10 6 6 6 10 20 20 20 34 21 21 21 35 6 6 6 10 21 21 21 35 7 7 7 12 7 7 7 12 21 21 21 35 22 22 22 36 7 7 7 12 22 22 22 36 8 8 8 14 8 8 8 14 22 22 22 36 23 23 23 37 8 8 8 14 23 23 23 37 9 9 9 16 9 9 9 16 23 23 23 37 24 24 24 38 9 9 9 16 24 24 24 38 10 10 10 18 10 10 10 18 24 24 24 38 25 25 25 39 10 10 10 18 25 25 25 39 11 11 11 20 11 11 11 20 25 25 25 39 26 26 26 40 11 11 11 20 26 26 26 40 12 12 12 22 12 12 12 22 26 26 26 40 27 27 27 41 12 12 12 22 27 27 27 41 13 13 13 24 13 13 13 24 27 27 27 41 28 28 28 42 13 13 13 24 28 28 28 42 14 14 14 26 14 14 14 26 28 28 28 42 15 15 15 43 14 14 101 44 15 15 102 45 1 1 1 1 15 15 103 46 29 29 104 47 30 30 30 48 15 15 105 49 30 30 30 48 16 16 16 30 16 16 16 30 30 30 30 48 31 31 31 50 16 16 16 30 31 31 31 50 17 17 17 31 17 17 17 31 31 31 31 50 32 32 32 51 17 17 17 31 32 32 32 51 18 18 18 32 18 18 18 32 32 32 32 51 33 33 33 52 18 18 18 32 33 33 33 52 19 19 19 33 19 19 19 33 33 33 33 52 34 34 34 53 19 19 19 33 34 34 34 53 20 20 20 34 20 20 20 34 34 34 34 53 35 35 35 54 20 20 20 34 35 35 35 54 21 21 21 35 21 21 21 35 35 35 35 54 36 36 36 55 21 21 21 35 36 36 36 55 22 22 22 36 22 22 22 36 36 36 36 55 37 37 37 56 22 22 22 36 37 37 37 56 23 23 23 37 23 23 23 37 37 37 37 56 38 38 38 57 23 23 23 37 38 38 38 57 24 24 24 38 24 24 24 38 38 38 38 57 39 39 39 58 24 24 24 38 39 39 39 58 25 25 25 39 25 25 25 39 39 39 39 58 40 40 40 59 25 25 25 39 40 40 40 59 26 26 26 40 26 26 26 40 40 40 40 59 41 41 41 60 26 26 26 40 41 41 41 60 27 27 27 41 27 27 27 41 41 41 41 60 42 42 42 61 27 27 27 41 42 42 42 61 28 28 28 42 28 28 28 42 42 42 42 61 29 29 29 62 28 28 28 42 29 29 29 62 15 15 15 43 29 29 106 63 43 43 107 64 44 44 44 65 29 29 108 66 44 44 44 65 30 30 30 48 30 30 30 48 44 44 44 65 45 45 45 67 30 30 30 48 45 45 45 67 31 31 31 50 31 31 31 50 45 45 45 67 46 46 46 68 31 31 31 50 46 46 46 68 32 32 32 51 32 32 32 51 46 46 46 68 47 47 47 69 32 32 32 51 47 47 47 69 33 33 33 52 33 33 33 52 47 47 47 69 48 48 48 70 33 33 33 52 48 48 48 70 34 34 34 53 34 34 34 53 48 48 48 70 49 49 49 71 34 34 34 53 49 49 49 71 35 35 35 54 35 35 35 54 49 49 49 71 50 50 50 72 35 35 35 54 50 50 50 72 36 36 36 55 36 36 36 55 50 50 50 72 51 51 51 73 36 36 36 55 51 51 51 73 37 37 37 56 37 37 37 56 51 51 51 73 52 52 52 74 37 37 37 56 52 52 52 74 38 38 38 57 38 38 38 57 52 52 52 74 53 53 53 75 38 38 38 57 53 53 53 75 39 39 39 58 39 39 39 58 53 53 53 75 54 54 54 76 39 39 39 58 54 54 54 76 40 40 40 59 40 40 40 59 54 54 54 76 55 55 55 77 40 40 40 59 55 55 55 77 41 41 41 60 41 41 41 60 55 55 55 77 56 56 56 78 41 41 41 60 56 56 56 78 42 42 42 61 42 42 42 61 56 56 56 78 43 43 43 79 42 42 42 61 43 43 43 79 29 29 29 62 43 43 109 80 57 57 110 81 58 58 58 82 43 43 111 83 58 58 58 82 44 44 44 65 44 44 44 65 58 58 58 82 59 59 59 84 44 44 44 65 59 59 59 84 45 45 45 67 45 45 45 67 59 59 59 84 60 60 60 85 45 45 45 67 60 60 60 85 46 46 46 68 46 46 46 68 60 60 60 85 61 61 61 86 46 46 46 68 61 61 61 86 47 47 47 69 47 47 47 69 61 61 61 86 62 62 62 87 47 47 47 69 62 62 62 87 48 48 48 70 48 48 48 70 62 62 62 87 63 63 63 88 48 48 48 70 63 63 63 88 49 49 49 71 49 49 49 71 63 63 63 88 64 64 64 89 49 49 49 71 64 64 64 89 50 50 50 72 50 50 50 72 64 64 64 89 65 65 65 90 50 50 50 72 65 65 65 90 51 51 51 73 51 51 51 73 65 65 65 90 66 66 66 91 51 51 51 73 66 66 66 91 52 52 52 74 52 52 52 74 66 66 66 91 67 67 67 92 52 52 52 74 67 67 67 92 53 53 53 75 53 53 53 75 67 67 67 92 68 68 68 93 53 53 53 75 68 68 68 93 54 54 54 76 54 54 54 76 68 68 68 93 69 69 69 94 54 54 54 76 69 69 69 94 55 55 55 77 55 55 55 77 69 69 69 94 70 70 70 95 55 55 55 77 70 70 70 95 56 56 56 78 56 56 56 78 70 70 70 95 57 57 57 96 56 56 56 78 57 57 57 96 43 43 43 79 57 57 112 97 71 71 71 98 72 72 72 99 57 57 113 100 72 72 72 99 58 58 58 82 58 58 58 82 72 72 72 99 73 73 73 101 58 58 58 82 73 73 73 101 59 59 59 84 59 59 59 84 73 73 73 101 74 74 74 102 59 59 59 84 74 74 74 102 60 60 60 85 60 60 60 85 74 74 74 102 75 75 75 103 60 60 60 85 75 75 75 103 61 61 61 86 61 61 61 86 75 75 75 103 76 76 76 104 61 61 61 86 76 76 76 104 62 62 62 87 62 62 62 87 76 76 76 104 77 77 77 105 62 62 62 87 77 77 77 105 63 63 63 88 63 63 63 88 77 77 77 105 78 78 78 106 63 63 63 88 78 78 78 106 64 64 64 89 64 64 64 89 78 78 78 106 79 79 79 107 64 64 64 89 79 79 79 107 65 65 65 90 65 65 65 90 79 79 79 107 80 80 80 108 65 65 65 90 80 80 80 108 66 66 66 91 66 66 66 91 80 80 80 108 81 81 81 109 66 66 66 91 81 81 81 109 67 67 67 92 67 67 67 92 81 81 81 109 82 82 82 110 67 67 67 92 82 82 82 110 68 68 68 93 68 68 68 93 82 82 82 110 83 83 83 111 68 68 68 93 83 83 83 111 69 69 69 94 69 69 69 94 83 83 83 111 84 84 84 112 69 69 69 94 84 84 84 112 70 70 70 95 70 70 114 113 84 84 115 114 71 71 71 98 70 70 116 115 71 71 71 98 57 57 117 116 85 85 118 117 72 72 72 99 71 71 71 98 85 85 119 118 73 73 73 101 72 72 72 99 85 85 120 119 74 74 74 102 73 73 73 101 85 85 121 120 75 75 75 103 74 74 74 102 85 85 122 121 76 76 76 104 75 75 75 103 85 85 123 122 77 77 77 105 76 76 76 104 85 85 124 123 78 78 78 106 77 77 77 105 85 85 125 124 79 79 79 107 78 78 78 106 85 85 126 125 80 80 80 108 79 79 79 107 85 85 127 126 81 81 81 109 80 80 80 108 85 85 128 127 82 82 82 110 81 81 81 109 85 85 129 128 83 83 83 111 82 82 82 110 85 85 130 129 84 84 84 112 83 83 83 111 85 85 85 130 71 71 71 98 84 84 131 131

+
+
+
+ + + + 0 0 5 -1.28465e-7 2.938926 4.045085 -1.727457 2.377641 4.045085 -2.795085 0.9081783 4.045085 -2.795085 -0.9081781 4.045085 -1.727458 -2.377641 4.045085 3.50463e-8 -2.938926 4.045085 1.727458 -2.377641 4.045085 2.795085 -0.9081767 4.045085 2.795084 0.9081804 4.045085 1.727455 2.377643 4.045085 -2.0786e-7 4.755283 1.545085 -2.795085 3.847105 1.545085 -4.522542 1.469463 1.545085 -4.522543 -1.469463 1.545085 -2.795086 -3.847104 1.545085 5.67062e-8 -4.755283 1.545085 2.795086 -3.847104 1.545085 4.522543 -1.469461 1.545085 4.522542 1.469467 1.545085 2.795081 3.847108 1.545085 -2.0786e-7 4.755282 -1.545085 -2.795084 3.847104 -1.545085 -4.522542 1.469463 -1.545085 -4.522542 -1.469463 -1.545085 -2.795086 -3.847103 -1.545085 5.67062e-8 -4.755282 -1.545085 2.795086 -3.847103 -1.545085 4.522543 -1.469461 -1.545085 4.522542 1.469467 -1.545085 2.795081 3.847107 -1.545085 -1.28465e-7 2.938926 -4.045085 -1.727457 2.377641 -4.045085 -2.795085 0.9081782 -4.045085 -2.795085 -0.908178 -4.045085 -1.727458 -2.37764 -4.045085 3.50463e-8 -2.938926 -4.045085 1.727458 -2.37764 -4.045085 2.795085 -0.9081766 -4.045085 2.795084 0.9081803 -4.045085 1.727455 2.377643 -4.045085 0 0 -5 + + + + + + + + + + 0 -2.11156e-8 1 -2.11354e-7 0.6252257 0.780444 -0.3674984 0.5058182 0.780444 -0.5946249 0.1932054 0.780444 -0.594625 -0.1932053 0.780444 -0.3674985 -0.5058182 0.780444 1.05677e-8 -0.6252257 0.780444 0.3674986 -0.5058181 0.780444 0.5946251 -0.1932051 0.780444 0.5946248 0.1932058 0.780444 0.3674981 0.5058185 0.780444 -2.70626e-7 0.9562714 0.2924812 -0.5620822 0.7736397 0.2924811 -0.909468 0.2955042 0.2924811 -0.9094681 -0.295504 0.2924812 -0.5620822 -0.7736397 0.2924811 5.52297e-9 -0.9562714 0.2924811 0.5620824 -0.7736396 0.2924811 0.9094682 -0.2955036 0.2924811 0.9094678 0.2955048 0.2924812 0.5620816 0.7736402 0.2924811 -2.70626e-7 0.9562712 -0.2924812 -0.5620822 0.7736397 -0.2924812 -0.909468 0.2955042 -0.2924812 -0.9094681 -0.295504 -0.2924812 -0.5620822 -0.7736396 -0.2924812 2.76149e-9 -0.9562712 -0.2924812 0.5620824 -0.7736395 -0.2924812 0.9094682 -0.2955037 -0.2924812 0.9094678 0.2955048 -0.2924812 0.5620815 0.7736402 -0.2924812 -1.638e-7 0.6252257 -0.780444 -0.3674985 0.5058182 -0.780444 -0.594625 0.1932054 -0.780444 -0.594625 -0.1932053 -0.780444 -0.3674985 -0.5058182 -0.780444 -3.17032e-8 -0.6252257 -0.780444 0.3674986 -0.5058181 -0.780444 0.5946251 -0.1932051 -0.780444 0.5946248 0.1932058 -0.780444 0.3674981 0.5058185 -0.780444 1.51768e-8 -4.22312e-8 -1 + + + + + + + + + + 0.95 1 0.999001 0.9999999 0.8 0.9990011 0.09999996 0.8 0.999001 0.2 0.8 0.999001 0.3 0.8 0.999001 0.3999999 0.8 0.999001 0.5 0.8 0.9990011 0.6 0.8 0.9990011 0.7 0.8 0.9990011 0.8000001 0.8 0.9990011 0.9000001 0.8 0.9990011 0.9999999 0.6 0.9990011 0.09999996 0.6 0.999001 0.2 0.6 0.999001 0.3 0.6 0.9990011 0.3999999 0.6 0.999001 0.5 0.6 0.9990011 0.6 0.6 0.9990011 0.7 0.6 0.9990011 0.8000001 0.6 0.9990011 0.9000001 0.6 0.9990011 0.9999999 0.4 0.9990011 0.09999996 0.4 0.999001 0.2 0.4 0.9990009 0.3 0.4 0.999001 0.3999999 0.4 0.999001 0.5 0.4 0.9990011 0.6 0.4 0.999001 0.7 0.4 0.9990011 0.8000001 0.4 0.9990011 0.9000001 0.4 0.999001 0.9999999 0.2 0.9990011 0.09999996 0.2 0.999001 0.2 0.2 0.999001 0.3 0.2 0.999001 0.3999999 0.2 0.999001 0.5 0.2 0.9990011 0.6 0.2 0.9990011 0.7 0.2 0.9990011 0.8000001 0.2 0.9990011 0.9000001 0.2 0.9990011 0.95 0 0.999001 0.04999995 1 0.999001 -5.96046e-8 0.8 0.9990011 0.15 1 0.999001 0.25 1 0.999001 0.35 1 0.999001 0.45 1 0.999001 0.55 1 0.999001 0.65 1 0.999001 0.7500001 1 0.999001 0.8500001 1 0.999001 -5.96046e-8 0.8 0.9990011 -5.96046e-8 0.6 0.9990011 -5.96046e-8 0.8 0.9990011 -5.96046e-8 0.6 0.9990011 -5.96046e-8 0.4 0.9990011 -5.96046e-8 0.6 0.9990011 -5.96046e-8 0.4 0.9990011 -5.96046e-8 0.2 0.9990011 -5.96046e-8 0.4 0.9990011 0.04999995 0 0.999001 -5.96046e-8 0.2 0.9990011 0.15 0 0.999001 0.25 0 0.999001 0.35 0 0.999001 0.45 0 0.999001 0.55 0 0.999001 0.65 0 0.999001 0.7500001 0 0.999001 0.8500001 0 0.999001 + + + + + + + + + + -0.9510565 -0.3090171 -6.52508e-9 -0.9510565 -0.1882202 0.1507859 -0.7472943 -0.5894716 0.03015721 -0.5877853 -0.809017 -1.70829e-8 -0.2580911 -0.9161411 0.03015718 -1.31262e-7 -1 -2.11156e-8 0.3296941 -0.8928759 0.0301572 0.5877852 -0.809017 -1.70829e-8 0.7915474 -0.5285625 0.03015717 0.9510565 -0.3090172 -6.52508e-9 0.9510565 0.03764403 0.0301572 0.9510565 0.3090172 6.52508e-9 0.7472941 0.5894718 0.03015722 0.587785 0.8090172 1.70829e-8 0.2580906 0.9161412 0.03015722 -6.5631e-7 1 2.11156e-8 -0.3296949 0.8928756 0.0301572 -0.587786 0.8090165 1.70829e-8 -0.7915479 0.5285618 0.03015718 -0.9510567 0.3090165 6.52507e-9 -0.9510567 0.1882196 -0.1507859 -0.9510565 -0.1882202 0.1507858 -0.9510566 -0.02643514 0.08642931 -0.7694209 -0.559017 7.9155e-10 -0.9510565 -0.1882202 0.1507859 -0.2938927 -0.9045085 -4.0073e-9 0.2938925 -0.9045085 -7.41231e-10 0.7694209 -0.5590171 -6.34775e-9 0.9510565 4.77085e-9 -2.3606e-9 0.7694207 0.5590172 -6.72929e-9 0.2938922 0.9045086 -2.86915e-9 -0.2938933 0.9045082 -2.409e-9 -0.7694214 0.5590164 -1.96186e-8 -0.9510566 0.0264346 -0.0864293 -0.9510566 -0.02643514 0.08642932 -0.9510566 -0.02643521 -0.08642933 -0.7694209 -0.559017 1.17386e-8 -0.9510566 -0.02643514 0.08642931 -0.2938927 -0.9045085 -3.27196e-9 0.2938926 -0.9045085 1.16709e-8 0.7694209 -0.5590171 -4.67655e-8 0.9510565 2.37408e-9 1.21738e-9 0.7694207 0.5590172 1.66922e-8 0.2938922 0.9045086 -7.07564e-9 -0.2938933 0.9045082 1.75192e-8 -0.7694214 0.5590164 1.41495e-8 -0.9510566 0.02643467 0.08642932 -0.9510567 -0.0264351 -0.08642897 -0.9510566 -0.1882199 -0.1507856 -0.7915475 -0.5285623 0.03015731 -0.9510566 -0.02643521 -0.08642933 -0.3296942 -0.8928758 0.03015721 0.258091 -0.9161412 0.03015719 0.7472943 -0.5894716 0.03015712 0.9510565 -0.03764394 0.03015711 0.7915473 0.5285625 0.03015719 0.3296938 0.892876 0.03015719 -0.2580917 0.9161409 0.03015721 -0.7472948 0.5894711 0.03015717 -0.9510567 0.1882196 0.1507858 -0.9510566 -0.3090166 -1.38389e-9 -0.9510567 -0.1882199 -0.1507856 -0.5877853 -0.8090169 2.5245e-8 -6.40936e-16 -1 4.22312e-8 0.5877852 -0.809017 4.30865e-8 0.9510566 -0.3090169 2.74842e-8 0.9510565 0.3090172 1.38386e-9 0.587785 0.8090172 -2.5245e-8 -6.5631e-7 1 -4.22312e-8 -0.587786 0.8090165 -4.30865e-8 -0.9510567 0.3090165 -2.74842e-8 + + + + + + + + + + -0.3090171 0.9510565 2.00821e-8 -0.2458018 0.7565 -0.6060439 -0.4991224 0.60081 -0.6244231 -0.809017 0.5877853 1.24114e-8 -0.7569457 0.1926888 -0.6244232 -1 1.31262e-7 2.77168e-15 -0.7256415 -0.289033 -0.6244231 -0.809017 -0.5877852 -1.24114e-8 -0.417167 -0.660354 -0.6244232 -0.3090172 -0.9510565 -2.00821e-8 0.05065125 -0.7794422 -0.6244232 0.3090172 -0.9510565 -2.00821e-8 0.4991225 -0.6008098 -0.6244231 0.8090172 -0.587785 -1.24114e-8 0.7569458 -0.1926883 -0.6244232 1 6.5631e-7 1.38584e-14 0.7256413 0.2890337 -0.6244231 0.8090165 0.587786 1.24115e-8 0.4171665 0.6603543 -0.6244232 0.3090165 0.9510567 2.00821e-8 0.2458013 0.7565002 -0.6060439 -0.2458018 0.7565 -0.6060439 -0.09460663 0.2911693 -0.9519822 -0.1719161 0.2366222 -0.9562713 -0.2458018 0.7565 -0.6060439 -0.2781661 0.09038166 -0.9562713 -0.2781661 -0.09038162 -0.9562713 -0.1719161 -0.2366222 -0.9562713 -9.06353e-10 -0.2924811 -0.9562713 0.1719161 -0.2366221 -0.9562713 0.2781661 -0.09038149 -0.9562713 0.2781661 0.09038187 -0.9562713 0.1719159 0.2366223 -0.9562713 0.09460646 0.2911693 -0.9519822 -0.09460664 0.2911693 -0.9519822 0.09460667 -0.2911693 -0.9519821 0.1719161 -0.2366223 -0.9562713 -0.09460663 0.2911693 -0.9519822 0.2781661 -0.09038168 -0.9562713 0.2781662 0.09038165 -0.9562713 0.1719161 0.2366223 -0.9562713 4.93948e-10 0.2924813 -0.9562713 -0.1719162 0.2366222 -0.9562713 -0.2781662 0.09038154 -0.9562713 -0.2781661 -0.09038187 -0.9562713 -0.171916 -0.2366224 -0.9562713 -0.09460649 -0.2911694 -0.9519821 0.09460628 -0.2911694 -0.9519822 0.2458014 -0.7565001 -0.6060439 0.4171668 -0.6603542 -0.6244231 0.09460667 -0.2911693 -0.9519821 0.7256415 -0.2890331 -0.6244232 0.7569457 0.1926887 -0.6244231 0.4991223 0.60081 -0.6244231 0.05065112 0.7794422 -0.6244232 -0.4171671 0.6603539 -0.6244232 -0.7256416 0.2890327 -0.6244232 -0.7569456 -0.1926893 -0.6244231 -0.4991219 -0.6008104 -0.6244231 -0.2458013 -0.7565002 -0.6060439 0.3090166 -0.9510566 4.48541e-8 0.2458014 -0.7565001 -0.6060439 0.8090169 -0.5877853 3.71012e-8 1 0 1.51768e-8 0.809017 0.5877852 -1.25446e-8 0.3090169 0.9510566 -3.54744e-8 -0.3090172 0.9510565 -4.48541e-8 -0.8090172 0.587785 -3.71012e-8 -1 -6.5631e-7 -1.51768e-8 -0.8090165 -0.587786 1.25446e-8 -0.3090165 -0.9510567 3.54744e-8 + + + + + + + + + + + + + + + + + +

0 0 42 0 1 1 43 1 2 2 2 2 0 0 44 3 2 2 2 2 3 3 3 4 0 0 45 5 3 3 3 4 4 4 4 6 0 0 46 7 4 4 4 6 5 5 5 8 0 0 47 9 5 5 5 8 6 6 6 10 0 0 48 11 6 6 6 10 7 7 7 12 0 0 49 13 7 7 7 12 8 8 8 14 0 0 50 15 8 8 8 14 9 9 9 16 0 0 51 17 9 9 9 16 10 10 10 18 0 0 0 19 10 10 10 18 1 1 1 20 1 1 52 21 11 11 53 22 12 12 12 23 1 1 54 24 12 12 12 23 2 2 2 2 2 2 2 2 12 12 12 23 13 13 13 25 2 2 2 2 13 13 13 25 3 3 3 4 3 3 3 4 13 13 13 25 14 14 14 26 3 3 3 4 14 14 14 26 4 4 4 6 4 4 4 6 14 14 14 26 15 15 15 27 4 4 4 6 15 15 15 27 5 5 5 8 5 5 5 8 15 15 15 27 16 16 16 28 5 5 5 8 16 16 16 28 6 6 6 10 6 6 6 10 16 16 16 28 17 17 17 29 6 6 6 10 17 17 17 29 7 7 7 12 7 7 7 12 17 17 17 29 18 18 18 30 7 7 7 12 18 18 18 30 8 8 8 14 8 8 8 14 18 18 18 30 19 19 19 31 8 8 8 14 19 19 19 31 9 9 9 16 9 9 9 16 19 19 19 31 20 20 20 32 9 9 9 16 20 20 20 32 10 10 10 18 10 10 10 18 20 20 20 32 11 11 11 33 10 10 10 18 11 11 11 33 1 1 1 20 11 11 55 34 21 21 56 35 22 22 22 36 11 11 57 37 22 22 22 36 12 12 12 23 12 12 12 23 22 22 22 36 23 23 23 38 12 12 12 23 23 23 23 38 13 13 13 25 13 13 13 25 23 23 23 38 24 24 24 39 13 13 13 25 24 24 24 39 14 14 14 26 14 14 14 26 24 24 24 39 25 25 25 40 14 14 14 26 25 25 25 40 15 15 15 27 15 15 15 27 25 25 25 40 26 26 26 41 15 15 15 27 26 26 26 41 16 16 16 28 16 16 16 28 26 26 26 41 27 27 27 42 16 16 16 28 27 27 27 42 17 17 17 29 17 17 17 29 27 27 27 42 28 28 28 43 17 17 17 29 28 28 28 43 18 18 18 30 18 18 18 30 28 28 28 43 29 29 29 44 18 18 18 30 29 29 29 44 19 19 19 31 19 19 19 31 29 29 29 44 30 30 30 45 19 19 19 31 30 30 30 45 20 20 20 32 20 20 20 32 30 30 30 45 21 21 21 46 20 20 20 32 21 21 21 46 11 11 11 33 21 21 58 47 31 31 59 48 32 32 32 49 21 21 60 50 32 32 32 49 22 22 22 36 22 22 22 36 32 32 32 49 33 33 33 51 22 22 22 36 33 33 33 51 23 23 23 38 23 23 23 38 33 33 33 51 34 34 34 52 23 23 23 38 34 34 34 52 24 24 24 39 24 24 24 39 34 34 34 52 35 35 35 53 24 24 24 39 35 35 35 53 25 25 25 40 25 25 25 40 35 35 35 53 36 36 36 54 25 25 25 40 36 36 36 54 26 26 26 41 26 26 26 41 36 36 36 54 37 37 37 55 26 26 26 41 37 37 37 55 27 27 27 42 27 27 27 42 37 37 37 55 38 38 38 56 27 27 27 42 38 38 38 56 28 28 28 43 28 28 28 43 38 38 38 56 39 39 39 57 28 28 28 43 39 39 39 57 29 29 29 44 29 29 29 44 39 39 39 57 40 40 40 58 29 29 29 44 40 40 40 58 30 30 30 45 30 30 30 45 40 40 40 58 31 31 31 59 30 30 30 45 31 31 31 59 21 21 21 46 41 41 61 60 32 32 32 49 31 31 62 61 41 41 63 62 33 33 33 51 32 32 32 49 41 41 64 63 34 34 34 52 33 33 33 51 41 41 65 64 35 35 35 53 34 34 34 52 41 41 66 65 36 36 36 54 35 35 35 53 41 41 67 66 37 37 37 55 36 36 36 54 41 41 68 67 38 38 38 56 37 37 37 55 41 41 69 68 39 39 39 57 38 38 38 56 41 41 70 69 40 40 40 58 39 39 39 57 41 41 41 70 31 31 31 59 40 40 40 58

+
+
+
+ + + + 0 0 5 -1.54543e-7 3.535534 3.535534 -2.5 2.5 3.535534 -3.535534 -3.09086e-7 3.535534 -2.5 -2.5 3.535534 4.21608e-8 -3.535534 3.535534 2.5 -2.5 3.535534 3.535534 -1.0677e-6 3.535534 2.500001 2.499999 3.535534 -2.18557e-7 5 -2.18557e-7 -3.535534 3.535534 -2.18557e-7 -5 -4.37114e-7 -2.18557e-7 -3.535533 -3.535534 -2.18557e-7 5.96244e-8 -5 -2.18557e-7 3.535533 -3.535534 -2.18557e-7 5 -1.50996e-6 -2.18557e-7 3.535536 3.535532 -2.18557e-7 -1.54543e-7 3.535534 -3.535534 -2.5 2.5 -3.535534 -3.535534 -3.09086e-7 -3.535534 -2.5 -2.5 -3.535534 4.21608e-8 -3.535534 -3.535534 2.5 -2.5 -3.535534 3.535534 -1.0677e-6 -3.535534 2.500001 2.499999 -3.535534 0 0 -5 + + + + + + + + + + 9.88537e-9 3.95415e-8 1 6.9026e-8 0.7486158 0.6630041 -0.5293514 0.5293513 0.6630041 -0.7486159 -8.05304e-8 0.6630041 -0.5293513 -0.5293514 0.663004 1.15043e-8 -0.7486158 0.6630041 0.5293513 -0.5293514 0.6630041 0.7486158 -2.01326e-7 0.6630041 0.5293515 0.5293512 0.6630041 7.27742e-8 1 -1.2129e-8 -0.7071067 0.7071068 -3.63871e-8 -1 -9.70323e-8 -1.81936e-8 -0.7071068 -0.7071068 -1.2129e-8 0 -1 3.03226e-8 0.7071066 -0.7071069 0 1 -3.21419e-7 -4.24516e-8 0.7071069 0.7071065 -1.2129e-8 6.32739e-8 0.7486157 -0.6630041 -0.5293513 0.5293513 -0.6630042 -0.7486158 -6.9026e-8 -0.6630042 -0.5293512 -0.5293514 -0.663004 2.30087e-8 -0.7486158 -0.6630041 0.5293512 -0.5293514 -0.6630041 0.7486158 -1.86945e-7 -0.6630042 0.5293514 0.5293511 -0.6630041 9.88537e-9 2.82439e-8 -1 + + + + + + + + + + 0.5 0.5 5.5 0.5000007 4.035534 4.035534 -2 3 4.035534 -3.035534 0.5000005 4.035534 -2 -2 4.035534 0.4999992 -3.035534 4.035534 2.999999 -2.000001 4.035534 4.035534 0.4999981 4.035534 3.000002 2.999998 4.035534 0.500001 5.5 0.4999998 -3.035533 4.035535 0.4999998 -4.5 0.5000008 0.4999998 -3.035534 -3.035533 0.4999998 0.4999989 -4.5 0.4999998 4.035532 -3.035535 0.4999998 5.5 0.4999973 0.4999998 4.035537 4.035532 0.4999998 0.5000007 4.035534 -3.035534 -2 3 -3.035534 -3.035534 0.5000005 -3.035534 -2 -2 -3.035534 0.4999992 -3.035534 -3.035534 2.999999 -2.000001 -3.035534 4.035534 0.4999981 -3.035534 3.000002 2.999998 -3.035534 0.5 0.5 -4.5 + + + + + + + + + + 0.954739 2.15833e-7 -9.43795e-9 0.8185035 -0.07019225 0.07925587 0.7049205 -0.02852993 0.5855967 0.6144843 1.61232e-7 0.6938309 0.7364077 -0.004867014 0.5840719 0.8185036 -0.07019225 -0.07925597 0.7049205 -0.02852995 -0.5855966 0.6144844 1.36677e-7 -0.6938309 0.7364076 -0.004866982 -0.584072 0.7071067 -5.4318e-8 -0.2357023 0.2724478 0.2724477 -0.03612882 -1.08617e-14 7.48297e-8 -5.34923e-9 0.2724474 -0.2724474 0.03612879 0.7071068 7.1471e-9 0.2357022 0.2724478 0.2724477 0.03612882 3.23075e-14 2.23624e-7 1.56345e-8 0.2724472 -0.2724473 -0.03612873 0.8185034 0.07019258 0.07925641 0.7364079 0.004867376 -0.5840717 0.6144844 1.60997e-7 -0.6938308 0.7049204 0.02853028 -0.5855968 0.8185035 0.07019259 -0.07925631 0.736408 0.004867405 0.5840716 0.6144844 1.54593e-7 0.6938308 0.7049204 0.02853028 0.5855969 0.954739 2.15833e-7 9.43795e-9 + + + + + + + + + + 2.26065e-7 -1 3.95415e-8 -0.1282771 -0.6575266 0.742431 -0.3587224 -0.8478319 0.3905115 1.75624e-7 -1 7.68394e-8 0.3255071 -0.8483869 -0.4174744 -0.1282772 -0.6575266 -0.742431 -0.3587225 -0.8478319 -0.3905116 -5.29431e-8 -1 -2.43878e-7 0.325507 -0.848387 0.4174741 0.3162278 -1.15066e-8 0.9486833 0.06601453 0.06601457 0.9956325 -2.5066e-8 0.07130344 0.9974547 0.06601458 -0.06601456 -0.9956325 0.3162277 -2.87665e-8 -0.9486833 0.06601455 0.06601453 -0.9956325 -1.99311e-8 0.06974413 -0.9975649 0.06601449 -0.06601451 0.9956325 -0.1282779 0.6575266 0.7424309 0.3255066 0.848387 0.4174746 -1.66844e-7 1 8.42766e-8 -0.3587228 0.8478319 -0.3905113 -0.1282778 0.6575265 -0.7424309 0.3255067 0.8483869 -0.4174747 2.93614e-8 1 -2.48815e-7 -0.3587227 0.847832 0.3905111 -2.26065e-7 1 2.82439e-8 + + + + + + + + + + + + + + + + + +

0 0 0 0 1 1 1 1 2 2 2 2 0 0 0 0 2 2 2 2 3 3 3 3 0 0 0 0 3 3 3 3 4 4 4 4 0 0 0 0 4 4 4 4 5 5 5 5 0 0 0 0 5 5 5 5 6 6 6 6 0 0 0 0 6 6 6 6 7 7 7 7 0 0 0 0 7 7 7 7 8 8 8 8 0 0 0 0 8 8 8 8 1 1 1 1 1 1 1 1 9 9 9 9 10 10 10 10 1 1 1 1 10 10 10 10 2 2 2 2 2 2 2 2 10 10 10 10 11 11 11 11 2 2 2 2 11 11 11 11 3 3 3 3 3 3 3 3 11 11 11 11 12 12 12 12 3 3 3 3 12 12 12 12 4 4 4 4 4 4 4 4 12 12 12 12 13 13 13 13 4 4 4 4 13 13 13 13 5 5 5 5 5 5 5 5 13 13 13 13 14 14 14 14 5 5 5 5 14 14 14 14 6 6 6 6 6 6 6 6 14 14 14 14 15 15 15 15 6 6 6 6 15 15 15 15 7 7 7 7 7 7 7 7 15 15 15 15 16 16 16 16 7 7 7 7 16 16 16 16 8 8 8 8 8 8 8 8 16 16 16 16 9 9 9 9 8 8 8 8 9 9 9 9 1 1 1 1 9 9 9 9 17 17 17 17 18 18 18 18 9 9 9 9 18 18 18 18 10 10 10 10 10 10 10 10 18 18 18 18 19 19 19 19 10 10 10 10 19 19 19 19 11 11 11 11 11 11 11 11 19 19 19 19 20 20 20 20 11 11 11 11 20 20 20 20 12 12 12 12 12 12 12 12 20 20 20 20 21 21 21 21 12 12 12 12 21 21 21 21 13 13 13 13 13 13 13 13 21 21 21 21 22 22 22 22 13 13 13 13 22 22 22 22 14 14 14 14 14 14 14 14 22 22 22 22 23 23 23 23 14 14 14 14 23 23 23 23 15 15 15 15 15 15 15 15 23 23 23 23 24 24 24 24 15 15 15 15 24 24 24 24 16 16 16 16 16 16 16 16 24 24 24 24 17 17 17 17 16 16 16 16 17 17 17 17 9 9 9 9 25 25 25 25 18 18 18 18 17 17 17 17 25 25 25 25 19 19 19 19 18 18 18 18 25 25 25 25 20 20 20 20 19 19 19 19 25 25 25 25 21 21 21 21 20 20 20 20 25 25 25 25 22 22 22 22 21 21 21 21 25 25 25 25 23 23 23 23 22 22 22 22 25 25 25 25 24 24 24 24 23 23 23 23 25 25 25 25 17 17 17 17 24 24 24 24

+
+
+
+ + + + 0 0 5 -1.89276e-7 4.330127 2.5 -3.75 2.165064 2.5 -3.75 -2.165064 2.5 5.16362e-8 -4.330127 2.5 3.75 -2.165064 2.5 3.750001 2.165062 2.5 -1.89276e-7 4.330127 -2.5 -3.75 2.165064 -2.5 -3.75 -2.165063 -2.5 5.16362e-8 -4.330127 -2.5 3.75 -2.165064 -2.5 3.750001 2.165062 -2.5 0 0 -5 + + + + + + + + + + -1.99952e-8 1.33301e-8 1 7.03834e-8 0.8973439 0.441332 -0.7771226 0.448672 0.441332 -0.7771226 -0.448672 0.441332 -3.51917e-8 -0.8973439 0.441332 0.7771224 -0.4486721 0.441332 0.7771227 0.4486718 0.441332 8.44601e-8 0.8973438 -0.4413321 -0.7771226 0.4486719 -0.4413322 -0.7771226 -0.4486719 -0.4413321 -4.92684e-8 -0.8973439 -0.4413321 0.7771225 -0.4486721 -0.4413321 0.7771227 0.4486717 -0.4413321 -6.66506e-9 1.33301e-8 -1 + + + + + + + + + + 0.9166666 1 0.999001 0.9999999 0.6666667 0.9990011 0.1666667 0.6666666 0.9990012 0.3333333 0.6666667 0.9990011 0.5 0.6666667 0.9990011 0.6666666 0.6666667 0.999001 0.8333333 0.6666667 0.999001 0.9999999 0.3333333 0.999001 0.1666666 0.3333333 0.9990011 0.3333333 0.3333333 0.9990011 0.5 0.3333333 0.999001 0.6666666 0.3333333 0.999001 0.8333332 0.3333333 0.9990009 0.9166666 0 0.999001 0.08333331 1 0.999001 -5.96046e-8 0.6666667 0.9990011 0.25 1 0.999001 0.4166666 1 0.999001 0.5833333 1 0.999001 0.7499999 1 0.999001 -5.96046e-8 0.6666667 0.9990011 -5.96046e-8 0.3333333 0.999001 -5.96046e-8 0.6666667 0.9990011 0.08333328 0 0.999001 -5.96046e-8 0.3333333 0.999001 0.25 0 0.999001 0.4166666 0 0.999001 0.5833333 0 0.999001 0.7499999 0 0.999001 + + + + + + + + + + -0.8660253 -0.5000002 -1.06513e-8 -0.8660252 -0.09738706 0.1980136 -0.4161448 -0.7597387 0.03960266 -3.09715e-7 -1 1.33301e-8 0.4498806 -0.7402613 0.03960252 0.8660254 -0.5 2.39814e-8 0.8660254 0.01947738 0.03960269 0.8660254 0.4999999 1.06513e-8 0.416145 0.7597387 0.03960266 3.30363e-7 1 -1.33301e-8 -0.4498804 0.7402614 0.03960264 -0.8660253 0.5000001 -2.39814e-8 -0.8660254 0.09738707 -0.1980133 -0.8660254 -0.09738693 0.1980133 -0.8660254 -0.09738697 -0.1980133 -0.4498806 -0.7402613 0.03960274 -0.8660254 -0.09738709 0.1980137 0.4161448 -0.7597387 0.03960259 0.8660254 -0.01947747 0.03960272 0.4498808 0.7402612 0.03960273 -0.4161446 0.7597387 0.0396026 -0.8660254 0.09738708 0.1980132 -0.8660254 -0.5 -8.92948e-10 -0.8660254 -0.09738697 -0.1980133 0 -1 -1.33301e-8 0.8660254 -0.5 -1.24372e-8 0.8660255 0.4999998 8.92944e-10 2.75302e-7 1 1.33301e-8 -0.8660254 0.5 1.24372e-8 + + + + + + + + + + -0.5000002 0.8660253 -2.15418e-8 -0.2469142 0.4276673 -0.8695597 -0.4071567 0.176304 -0.896181 -1 3.09715e-7 -1.99952e-8 -0.3562622 -0.2644559 -0.896181 -0.5 -0.8660254 1.54663e-9 0.05089461 -0.4407601 -0.896181 0.4999999 -0.8660254 2.15418e-8 0.4071567 -0.1763041 -0.8961809 1 -3.30363e-7 1.99952e-8 0.3562622 0.2644559 -0.896181 0.5000001 0.8660253 -1.54663e-9 0.2469139 0.4276673 -0.8695598 -0.2469138 0.4276673 -0.8695598 0.2469139 -0.4276674 -0.8695598 0.3562622 -0.2644562 -0.8961809 -0.2469142 0.4276672 -0.8695597 0.4071568 0.1763041 -0.8961809 0.05089469 0.4407602 -0.8961809 -0.3562621 0.2644562 -0.8961809 -0.4071568 -0.176304 -0.8961809 -0.2469138 -0.4276673 -0.8695598 0.5 -0.8660254 -1.48767e-8 0.2469139 -0.4276674 -0.8695598 1 0 -6.66506e-9 0.5 0.8660254 8.21169e-9 -0.4999998 0.8660255 1.48767e-8 -1 2.75302e-7 6.66506e-9 -0.5 -0.8660254 -8.21169e-9 + + + + + + + + + + + + + + + + + +

0 0 14 0 1 1 15 1 2 2 2 2 0 0 16 3 2 2 2 2 3 3 3 4 0 0 17 5 3 3 3 4 4 4 4 6 0 0 18 7 4 4 4 6 5 5 5 8 0 0 19 9 5 5 5 8 6 6 6 10 0 0 0 11 6 6 6 10 1 1 1 12 1 1 20 13 7 7 21 14 8 8 8 15 1 1 22 16 8 8 8 15 2 2 2 2 2 2 2 2 8 8 8 15 9 9 9 17 2 2 2 2 9 9 9 17 3 3 3 4 3 3 3 4 9 9 9 17 10 10 10 18 3 3 3 4 10 10 10 18 4 4 4 6 4 4 4 6 10 10 10 18 11 11 11 19 4 4 4 6 11 11 11 19 5 5 5 8 5 5 5 8 11 11 11 19 12 12 12 20 5 5 5 8 12 12 12 20 6 6 6 10 6 6 6 10 12 12 12 20 7 7 7 21 6 6 6 10 7 7 7 21 1 1 1 12 13 13 23 22 8 8 8 15 7 7 24 23 13 13 25 24 9 9 9 17 8 8 8 15 13 13 26 25 10 10 10 18 9 9 9 17 13 13 27 26 11 11 11 19 10 10 10 18 13 13 28 27 12 12 12 20 11 11 11 19 13 13 13 28 7 7 7 21 12 12 12 20

+
+
+
+
+ + + + + 0 0 0 + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + + + + + + + + +
\ No newline at end of file diff --git a/Templates/Full/game/art/environment/LightVolume_Sphere.cs b/Templates/Full/game/art/environment/LightVolume_Sphere.cs new file mode 100644 index 0000000000..475da3bee9 --- /dev/null +++ b/Templates/Full/game/art/environment/LightVolume_Sphere.cs @@ -0,0 +1,8 @@ + +singleton TSShapeConstructor(LightVolume_SphereDAE) +{ + baseShape = "./LightVolume_Sphere.DAE"; + lodType = "TrailingNumber"; + neverImport = "env*"; + loadLights = "0"; +}; diff --git a/Templates/Full/game/art/environment/LightVolume_Sphere.dts b/Templates/Full/game/art/environment/LightVolume_Sphere.dts new file mode 100644 index 0000000000000000000000000000000000000000..223993dd637b8baf3e81194b0aa8598c58df0429 GIT binary patch literal 12883 zcmd6ud309gwZ=c@K?oS80HTpOfDrOAIPsmMNFWld3Mir=C?MbmB9k+I6ujQz0HU`l zdTq4Qr4dDvK-I!`PK$~|v_+-B!lAeX(c9~dR%>gE+~@b6_a(<9f84veR#%T}v!CbL z``vq==}mIF+AVQw;?6dSL^s(GS<^%!(MZPOe8lSi8;`RNYbBc{Ya-*gW?k!Zu!y;T z%fdwBxcS1yT)ksD$i#D?N2vDS#tmrntj&lJd2TjAa}YVNppi#Dv1XBc{NLtQck{G3 z9{In6mP+MXv^GmJo?Cf>fG%^Qt?Y+=Z$2-P$OPC^F1Z2EY#h;SLyoVxFp?Ym*Uith zNF-hx?fMipm>r4C&k^0n*Uoio@*=sxe{-zbPM-PPecRjNp|I`IM?&uT{tgfM!hUqm z6T_8e4z9%w7DukkpZDaOl{@#g_BZ!i=P&toQLu5ycOJMlt;}EEZGSMa=d<1_wppMQbs%xd6#$A7!Xd$xh=6W4d%G_q>rkemII)nmxyfLea=jFHa?)A8L3)kFjFtb&xI@e&HuVC*Qj~t5wu+0gf8wHIel*Lny8NOA8h^Cm6Nr7@6bJ3YUhd1>G0lp_Xcie zu$vj|W{%+?mJ@>A%wRXO)y>RcH?zTZX7C<6GuX`xb~A(Hb8^ie*RwHU_1KVi;fU@9 zc&VNZ-A99U@4`U$4jsH*_cWFh#?~6lv!R+!_f*qhJxhKwJsY-;|ER6=mac7$tl%=v^D_q zUaMwkbx$>ou6%F2-d}Xy&8KV~aC5z<=(Fv+2`<+A$bJQm&mY%g`&js|jM*t2yJxkUbK6d?+hNll~GyJ~Z zuiN|shVR?<--aJOb}U7o`+B!BKRbJs5td-G5$}-Zm)c40oP#tsL1E0@btyg7f;_vKVUq4;q=AR z7f)Y2eeo}-FP^^m?~mPXJbn9UEqx=Oo5Ir#nTthb;i>d&vnN0{4x`L)k{9t zTpRkr>5Hc?p1ydVN7m67PhUKJ@$|*h7yqI9;#=yuqAwmEy+;`@dT%o7!~4SThrA~l zFM2;RUi4mMyy$&^^B!b056^$bi=KPd@w{ie=sC}L(es`0nwaOBcyvs8pj~p?kmgBp zuPN$Lwf(!#Q%e?K?Ol3ge0I&&cT?93$8$c|_RH-1E7zNxxPE8nL)l;V-94&qK6+K( z-8-lm&$o55b@MNZ`ey6qKe4)ei)O2ruQ^kiv!4EkZNE(IU%9@Xu6a@qH!#m?>7O+) z|L;}ja0BN%N`3Fq^{G2&T)*o#w^tqQGu}I8S9h;R$@AG=Ek+vr$9GQ-uDQw1n zbBcp!cMnUE1OCPCVc8zSHYZDtT^o?|+w#jQj`bODu=JE_2IPG4?#bSai;re)9dEtr zpm)kC_TE>0@F&W-MSZE?N^7g_Jn=c(9r{Vt<=@=o74(~yI`rwj?EGOf4L+P69aQb> zZgAr*OM;JXnVupCyziFj*+OA*D))5{zz4PV+F>&dzIogMXc36Q2`2RWpz5H!aJ|bCm=B#Lf&>O*6A< zX5Gx_Zf3WZ*}$3mUM*5hgH$x$6MGx*r^OS~M-40bbvnfW?9Pkhd)D=(`0 zo1TrHySfM5-&b@m!2e~R4Y2N=c{XA=8_O}6wLA3;pyy0~s7N&p=Gkz%o+WRZo(*!k z=y|wH&jz@o@E$!I;E$Daqn-_LGp&8i&J&;W#l_!MzNr0S+2X4M-qU~6^AF}--lKN} ztoO+51K^B(_rd$4oGjR`HTa3u11eOL_dVcUR!xIdGo_j)hj-Jyv(z;2DRthheK!N% zJN7H|`22DGufc~!UoAXXp}j8nSH}E(%<-29nxV?-# zzN7S!5rd<{!NX+a6GMZ8b7kb6DC;XD21kd3`RGDEF*G>1ql~-`vVJmRaCA6$gp7P* zXmD_68F`&#{bj`9=y32z8TrJ};9$Nfk=I35AR`7xhl5X-kxvW_4(=u+udBraEXR{a zY@iHIF8EB#(aw;OhX!^U^_^Z~WB73vlM5yfeTwDyOD!foRz?mO-ElnUgLaA4!E<7~ zSeP7g$#EP%LPqXv88JM3ndOt^$#XHs$4Fx>F*L{V!)4T&B_oE1FSUG(b9}Tk))GT=9G{d?=PDU7Jbba`7t539Vve6HjkUzk z9LE>Qs54VW3=hBF@{8ojb1}!yk;YnLXpZBD%BV9#Mhp*MB!gclBhSSg_ocCx7@9AG z;|paoWLL_F;b+LMlfi!^^DQRkxF^h7-)fHIhsemCZew`(Ld!3ZCy!dh98U?emKd7j z_`#O*vjNPyX)^Ng@CBAnkY|mHIgV%j6*AVOt%noCN@e7L(H+P0^9Rq*9x(CCWoQ_f z7@pX*7EhH&#}k_$Kxjn(JMgYo1omvP(>IkOi7Pn0#X#{V|4>4kOS z*ntm)d@mRFg?; zoUvlAM^0V+iWPH%y84u;PFPp}-5s5i>QzryzNfzRboKSeG*JI3>8l!;$5WjP8kj$R zj;9n}S;e)P^2#e7=k=En%MC8q^_$jZyJz$W2jJ(G^Yw`3Avph@B}uNa)qSUPy-T}n zH~FgL-)`$XqB)z6jOxexg2zNN1UeV$GeZ!Y!C`6!%uo}}5HN$*G6TBr^waq5!GdE=>zr!JnlcZ+Ehi>EH0x_Ij1sT=90x2X%KE}pu0>f)pOm7#~um2Xthx3B1a zWW4A;WR%PGhjZOCUUa=PUUZ!^>cjP|{l=v^5*0JIR-oNob5+%wIr-k;H^+Km|Lxfc zw>2_2o^#0=dBM;3j!BUd*QZE-bnlpKU43U%C#b8Reb4YB^{S`u>c2fzdRwD<`qVS> zytNI~pDaDwz&zVj=i&zDkDuec=igT~?Cqsq*YH15kA2cE@Y@!9orDj)GdGx2`d|wD zsqlo-2eYx90DbMtJBDhl!B2eB&hy$98+_!Qxt^zday}NGt2(TGKshD0e!MTZFq$Fj zW>9|C%>a(gU~=e%zVYQzL$%gmW*B94W*8mKoQ=(pz2DBj+IZi@!6ELx2ljq(-vjQc zz1IfY`|EPJM?tFrEi3JP3}W{#h~2Lsc8`MCeF@@ydrkjwQN_&Rm3j_?eNcba%CMXKE-nU$uZ2|J&v~*=64d-p}~n4SPtg*eaCwUlS3|=<2l0ZWW>5(BRbMcYN~j@Ra5Kb{n#l+Td`?=6|>+KGwZAtuGsW>6?jmji_fomzja2hQ<=fisbMfR_B{Q@ zR&vge-d_fe&Cl#^e)_oioo=+){3e$*ZZ1227@J=??kEfGwPUODv>$kd#pi~?#=tfD z-v=Y^`-g<{dacxT@N_+VADpi>ErpdAoM^VZb>Seb8)oXP3lD1zbvi5efT{Jo-%+@m zERlHL*R$uHEZko?|7d^BY0g9592dP;P;}{g1-kYbZ}C|VBuh4W-p^ku@a|vLBDil= z3xmgR^n#q4O_k`<0%DH~FMe`Nk@5qpn>Ao+(cS#ydu@L;u8Mq}t9NfSf55f+ z{?V_rEoTDWL5_8i%f~mCv7Zyev%iDUT|OS2eHo1B;AahM$YtNdbAXA#$z@OHK)A$OSu1&!N$YfmuVGJob7tIJlz>-SvdK9QJM2;#q^PXVk1AAB^Wb zSjV174jxXNJswXE7|+pGMjkP+%SB`Fr4AlWyqS#k9AGqfbIaw-HG*^G$lN+KIP37# zCB`*vCnJt02IidM#NGMB`8mT{@*D?qeTbnE2QxpO7?{KD(_9-4&W+~;i}w3P;hc4A zLhXxT)5IcQ*cX4V4Ck$DEf01FHH;qC)i=C4EgAK! zm+z}iy?o}H(Lnw93^AL^+k8R%z4}T;ScL1>`|tCcl`e`*Y2tEa(=Zl z-xbQs%Tv#m4@hm2PuTAWXxPNbd)WIqJox0vo!DO!<>dnm|NfX~_~glx4KFXBZ#aJs zlh5DT&nWj7s*gv*Q!nBJjGw6WaMt0UH1pN|{T$7a@uL12<^1B$F3;^fomvAQZ#u5uey&(Ybm*IDQ4CsIf4j-7QC@)93r6O9@- zY1*uLiBsfonf!O@vOYhXwz$#LJD$Dj zoT-(UE-l-1>c@BH&$+eqv5$WLlch)6SMRL%oiSxclWbFa7=fySkt7 zx6@xdJYx0gFV4T@^PAf|c+U;Dyz|ZBZwCJ0Xn$gQ`>b^D^q%zA^abh8>HX>F(vp^z zo%-=@;g|pO(UzropX}U~TQK{zCmzUaw(o8H{UrE~I{Tv<@@YF@OqbC>1UrI#(3 zJ+!c}FcHC#$I-CkNMRdI%$mJ)=Df7Yk0ALGBL8?;*O&iqg6vert; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); + %vp=%this-->hor; + %vp.setShaderConst( "$strength", $VolFogGlowPostFx::glowStrength ); +} \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs b/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs index d30d2314ba..77d664f416 100644 --- a/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs +++ b/Templates/Full/game/core/scripts/client/postFx/postFxManager.gui.settings.cs @@ -70,6 +70,7 @@ postVerbose("% - PostFX Manager - PostFX disabled"); } + VolFogGlowPostFx.disable(); } function PostFXManager::settingsEffectSetEnabled(%this, %sName, %bEnable) diff --git a/Templates/Full/game/core/scripts/client/renderManager.cs b/Templates/Full/game/core/scripts/client/renderManager.cs index dcd1628fe4..5734bbce60 100644 --- a/Templates/Full/game/core/scripts/client/renderManager.cs +++ b/Templates/Full/game/core/scripts/client/renderManager.cs @@ -75,6 +75,8 @@ function initRenderManager() DiffuseRenderPassManager.addManager( new RenderParticleMgr() { renderOrder = 1.35; processAddOrder = 1.35; } ); DiffuseRenderPassManager.addManager( new RenderTranslucentMgr() { renderOrder = 1.4; processAddOrder = 1.4; } ); + DiffuseRenderPassManager.addManager(new RenderObjectMgr(FogBin){ bintype = "ObjectVolumetricFog"; renderOrder = 1.45; processAddOrder = 1.45; } ); + // Note that the GlowPostFx is triggered after this bin. DiffuseRenderPassManager.addManager( new RenderGlowMgr(GlowBin) { renderOrder = 1.5; processAddOrder = 1.5; } ); diff --git a/Templates/Full/game/core/scripts/client/shaders.cs b/Templates/Full/game/core/scripts/client/shaders.cs index 98d0529ebe..002053a1ac 100644 --- a/Templates/Full/game/core/scripts/client/shaders.cs +++ b/Templates/Full/game/core/scripts/client/shaders.cs @@ -101,4 +101,40 @@ singleton ShaderData( OffscreenParticleCompositeShaderData ) samplerNames[1] = "$alphaMap"; pixVersion = 1.4; +}; + +singleton ShaderData( VolumetricFogPrePassShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogPreP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogPreP.glsl"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogP.glsl"; + + samplerNames[0] = "$prepassTex"; + samplerNames[1] = "$depthBuffer"; + samplerNames[2] = "$frontBuffer"; + samplerNames[3] = "$density"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogReflectionShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogRefl.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogRefl.glsl"; + + pixVersion = 3.0; }; \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/VolumetricFog.cs b/Templates/Full/game/scripts/server/VolumetricFog.cs new file mode 100644 index 0000000000..53e03adf30 --- /dev/null +++ b/Templates/Full/game/scripts/server/VolumetricFog.cs @@ -0,0 +1,106 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function VolumetricFog::onEnterFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj enters the fog area. + + // echo("Control Object " @ %obj @ " enters fog " @ %this); +} + +function VolumetricFog::onLeaveFog(%this,%obj) +{ + // This method is called whenever the control object (Camera or Player) + // %obj leaves the fog area. + + // echo("Control Object " @ %obj @ " left fog " @ %this); +} + +function VolumetricFog::Dissolve(%this,%speed,%delete) +{ + // This method dissolves the fog at speed milliseconds + %this.isBuilding = true; + if (%this.FogDensity > 0) + { + %this.setFogDensity(%this.FogDensity - 0.005); + %this.schedule(%speed,Dissolve,%speed,%delete); + } + else + { + %this.isBuilding = false; + %this.SetFogDensity(0.0); + if (%delete !$= "" && %delete !$="0" && %delete !$="false") + %this.schedule(250,delete); + } +} + +function VolumetricFog::Thicken(%this,%speed, %end_density) +{ + // This method thickens the fog at speed milliseconds to a density of %end_density + + %this.isBuilding = true; + if (%this.FogDensity + 0.005 < %end_density) + { + %this.setFogDensity(%this.FogDensity + 0.005); + %this.schedule(%speed,Thicken,%speed, %end_density); + } + else + { + %this.setFogDensity(%end_density); + %this.isBuilding = false; + } +} + +function GenerateFog(%pos,%scale,%color,%density) +{ + // This function can be used to generate some fog caused by massive gunfire etc. + // Change shape and modulation data to your likings. + + %fog=new VolumetricFog() { + shapeName = "art/environment/Fog_Sphere.dts"; + fogColor = %color; + fogDensity = "0.0"; + ignoreWater = "0"; + MinSize = "250"; + FadeSize = "750"; + texture = "art/environment/FogMod_heavy.dds"; + tiles = "1"; + modStrength = "0.2"; + PrimSpeed = "-0.01 0.04"; + SecSpeed = "0.02 0.02"; + position = %pos; + rotation = "0 0 1 20.354"; + scale = %scale; + canSave = "1"; + canSaveDynamicFields = "1"; + }; + + if (isObject(%fog)) + { + MissionCleanup.add(%fog); + + %fog.Thicken(500,%density); + } + + return %fog; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/scriptExec.cs b/Templates/Full/game/scripts/server/scriptExec.cs index 64d4adc066..26f4f82805 100644 --- a/Templates/Full/game/scripts/server/scriptExec.cs +++ b/Templates/Full/game/scripts/server/scriptExec.cs @@ -24,6 +24,7 @@ // a server is constructed. exec("./camera.cs"); exec("./triggers.cs"); +exec("./VolumetricFog.cs"); exec("./inventory.cs"); exec("./shapeBase.cs"); exec("./item.cs"); diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl new file mode 100644 index 0000000000..aaadbf4793 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final pixel shader V2.00 + +#include "shadergen:/autogenConditioners.h" +#include "../torque.hlsl" + +uniform sampler2D prepassTex : register(S0); +uniform sampler2D depthBuffer : register(S1); +uniform sampler2D frontBuffer : register(S2); +uniform sampler2D density : register(S3); + +uniform float accumTime; +uniform float4 fogColor; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform float2 viewpoint; +uniform float2 texscale; +uniform float3 ambientColor; +uniform float numtiles; +uniform float fadesize; +uniform float2 PixelSize; + +struct ConnectData +{ + float4 hpos : POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +float4 main( ConnectData IN ) : COLOR0 +{ + float2 uvscreen=((IN.htpos.xy/IN.htpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; + float depth = tex2D(depthBuffer,uvscreen).r; + float front = tex2D(frontBuffer,uvscreen).r; + + if (depth <= front) + return float4(0,0,0,0); + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + float3 col = fogColor.rgb; + if (textured != 0.0) + { + float2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + float2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; + float2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + float4 resultColor = float4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + return hdrEncode(resultColor); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl new file mode 100644 index 0000000000..bb06f5f7c4 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl @@ -0,0 +1,39 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass pixel shader V1.00 + +struct ConnectData +{ + float4 hpos : POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : COLOR0 +{ + float OUT; + + clip( IN.pos.w ); + OUT = IN.pos.w; + + return float4(OUT,0,0,1); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl new file mode 100644 index 0000000000..2d13cdf015 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog prepass vertex shader V1.00 + +#include "shaders/common/hlslstructs.h" + +struct ConnectData +{ + float4 hpos : POSITION; + float4 pos : TEXCOORD0; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_P IN) +{ + ConnectData OUT; + + float4 inPos = IN.pos; + inPos.w = 1.0; + + OUT.hpos = mul( modelView, inPos ); + OUT.pos = OUT.hpos; + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl new file mode 100644 index 0000000000..bd9866cf8d --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Reflection pixel shader V1.00 +uniform float4 fogColor; +uniform float fogDensity; +uniform float reflStrength; + +struct ConnectData +{ + float4 hpos : POSITION; + float4 pos : TEXCOORD0; +}; + +float4 main( ConnectData IN ) : COLOR0 +{ + return float4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl new file mode 100644 index 0000000000..7f86802b54 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl @@ -0,0 +1,45 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog final vertex shader V1.00 + +#include "shaders/common/hlslstructs.h" + +struct ConnectData +{ + float4 hpos : POSITION; + float4 htpos : TEXCOORD0; + float2 uv0 : TEXCOORD1; +}; + +uniform float4x4 modelView; + +ConnectData main( VertexIn_PNT IN) +{ + ConnectData OUT; + + OUT.hpos = mul(modelView, IN.pos); + OUT.htpos = OUT.hpos; + OUT.uv0 = IN.uv0; + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogP.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogP.glsl new file mode 100644 index 0000000000..7895d9e2d1 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogP.glsl @@ -0,0 +1,87 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../gl/torque.glsl" + +uniform sampler2D prepassTex; +uniform sampler2D depthBuffer; +uniform sampler2D frontBuffer; +uniform sampler2D density; + +uniform float accumTime; +uniform vec4 fogColor; +uniform float fogDensity; +uniform float preBias; +uniform float textured; +uniform float modstrength; +uniform vec4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform vec2 viewpoint; +uniform vec2 texscale; +uniform vec3 ambientColor; +uniform float numtiles; +uniform float fadesize; +uniform vec2 PixelSize; + +in vec4 _hpos; +#define IN_hpos _hpos +out vec4 OUT_col; + +void main() +{ + vec2 uvscreen=((IN_hpos.xy/IN_hpos.w) + 1.0 ) / 2.0; + uvscreen.y = 1.0 - uvscreen.y; + + float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; + float depth = tex2D(depthBuffer,uvscreen).r; + float front = tex2D(frontBuffer,uvscreen).r; + + if (depth <= front) + { + OUT_col = vec4(0,0,0,0); + return; + } + + else if ( obj_test < depth ) + depth = obj_test; + if ( front >= 0.0) + depth -= front; + + float diff = 1.0; + vec3 col = fogColor.rgb; + if (textured != 0.0) + { + vec2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); + + vec2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; + vec2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + diff = (mod2.r + mod1.r) * modstrength; + col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; + } + + col *= ambientColor; + + vec4 returnColor = vec4(col, 1.0 - saturate(exp(-fogDensity * depth * diff * fadesize))); + + OUT_col = hdrEncode(returnColor); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl new file mode 100644 index 0000000000..017ea6ef8e --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +in vec4 _hpos; +#define IN_hpos _hpos + +out vec4 OUT_col; + +void main() +{ + float OUT; + clip( IN_hpos.w ); + OUT = IN_hpos.w; + + OUT_col = vec4(OUT,0,0,1); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl new file mode 100644 index 0000000000..2f2a1318ac --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogPreV.glsl @@ -0,0 +1,42 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + vec4 inPos = IN_position; + inPos.w = 1.0; + + OUT_hpos = tMul( modelView, inPos ); + + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl new file mode 100644 index 0000000000..78e149fbf5 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogRefl.glsl @@ -0,0 +1,33 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +uniform vec4 fogColor; +uniform float fogDensity; +uniform float reflStrength; +out vec4 OUT_col; + +void main() +{ + OUT_col = vec4(fogColor.rgb,saturate(fogDensity*reflStrength)); +} diff --git a/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogV.glsl b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogV.glsl new file mode 100644 index 0000000000..57b3ba87e7 --- /dev/null +++ b/Templates/Full/game/shaders/common/VolumetricFog/gl/VFogV.glsl @@ -0,0 +1,38 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../gl/hlslCompat.glsl" + +in vec4 vPosition; +#define IN_position vPosition + +out vec4 _hpos; +#define OUT_hpos _hpos + +uniform mat4 modelView; + +void main() +{ + OUT_hpos = tMul(modelView, IN_position); + gl_Position = OUT_hpos; + correctSSP(gl_Position); +} diff --git a/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl b/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl new file mode 100644 index 0000000000..8a61b5928a --- /dev/null +++ b/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +#include "./postFx.hlsl" + +uniform sampler2D diffuseMap : register(S0); +uniform float strength; + +struct VertToPix +{ + float4 hpos : POSITION; + + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; + float2 uv3 : TEXCOORD3; + + float2 uv4 : TEXCOORD4; + float2 uv5 : TEXCOORD5; + float2 uv6 : TEXCOORD6; + float2 uv7 : TEXCOORD7; +}; + +float4 main( VertToPix IN ) : COLOR +{ + float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + float4 OUT = 0; + OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + float3 rgb2lum = float3( 0.30, 0.59, 0.11 ); + OUT.a = dot( OUT.rgb, rgb2lum ); + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/postFx/gl/VolFogGlowP.glsl b/Templates/Full/game/shaders/common/postFx/gl/VolFogGlowP.glsl new file mode 100644 index 0000000000..01b072dd99 --- /dev/null +++ b/Templates/Full/game/shaders/common/postFx/gl/VolFogGlowP.glsl @@ -0,0 +1,67 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2014 R.G.S. - Richards Game Studio, the Netherlands +// http://www.richardsgamestudio.com/ +// +// If you find this code useful or you are feeling particularly generous I +// would ask that you please go to http://www.richardsgamestudio.com/ then +// choose Donations from the menu on the left side and make a donation to +// Richards Game Studio. It will be highly appreciated. +// +// The MIT License: +// +// 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. +//----------------------------------------------------------------------------- + +// Volumetric Fog Glow postFx pixel shader V1.00 + +uniform sampler2D diffuseMap; +uniform float strength; + +out vec4 OUT_col; + +in vec2 uv0; +in vec2 uv1; +in vec2 uv2; +in vec2 uv3; + +in vec2 uv4; +in vec2 uv5; +in vec2 uv6; +in vec2 uv7; + +void main() +{ + vec4 kernel = vec4( 0.175, 0.275, 0.375, 0.475 ) * strength; + + OUT_col = vec4(0); + OUT_col += texture( diffuseMap, uv0 ) * kernel.x; + OUT_col += texture( diffuseMap, uv1 ) * kernel.y; + OUT_col += texture( diffuseMap, uv2 ) * kernel.z; + OUT_col += texture( diffuseMap, uv3 ) * kernel.w; + + OUT_col += texture( diffuseMap, uv4 ) * kernel.x; + OUT_col += texture( diffuseMap, uv5 ) * kernel.y; + OUT_col += texture( diffuseMap, uv6 ) * kernel.z; + OUT_col += texture( diffuseMap, uv7 ) * kernel.w; + + // Calculate a lumenance value in the alpha so we + // can use alpha test to save fillrate. + vec3 rgb2lum = vec3( 0.30, 0.59, 0.11 ); + OUT_col.a = dot( OUT_col.rgb, rgb2lum ); +} diff --git a/Templates/Full/game/tools/classIcons/VolumetricFog.png b/Templates/Full/game/tools/classIcons/VolumetricFog.png new file mode 100644 index 0000000000000000000000000000000000000000..5dc516cb53d99e0ae0d125507d6d95c9a2942107 GIT binary patch literal 3642 zcmV-A4#n|_P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000AJNkl9kNXb9;;<2!NH znsiy4Zgt--Ts3J^cd%(1u`#6(l!CQskx~@vbJU9r;0%Z}-nldP{@pZ<@$A0jJIfD{)_^I^O+{5a?kaZ= zQ1QH@C8J3IT;+bCP#^WI>8aTM(st)^=CTvfBP(4kU3SNw4!Nyzn?IM%#jJvrP^d~n z8c!8!MN3ALDAYkAMDNkfM;q6lY+U7`^zna2<4gX>yRzZ=&WF{h&WojAWU=Mh`F9iV z`2tq?ru+7NO%vKR9oT1kcJGl5M_!re_^skh-z9&e(M)ZqhVX_UuWxB1U2k!F;;;5Q z*&FRw(qnwM>)}wEx)g{gkUH*6b2f?j+0kWfF;(soz|O zUC1#zcb9>)gNGV|tzXaQ7MrE5=Xcs|Pq*F4P5bRa9@Fq)2K>}E*I?&u(oUM9Tfiw6 z@H~&2wT(2z>oCLe@UkznOLt_UX5G4a>e~+DxHbxf^h?SUA&S!_@@^hy!68r^!ZS-~ z(x7+mex{eNM#cxnj_Lw|%0Wo{amOFSH~`19T*Rq+Tp*WvBm zZxL&0LJW%*T_|zu?)Zb|ja!-sR#$NEl11rant`dG$mMM8l;T3wFlJQZ-7L_ws)_7K zmboYQ(S?rI5qcvQEk!F;QB<0bd|bcqH$UGRLOwHiGulaKcRMW)Hsa5g^Z3ydrmY#S zTi2MJnZZ{K%;vUaZPkO;@su>V4IintAQpulf#4zl^$1-NnpE=Iq3Y zi9P4$&t*KkD?aHv#cRIuZDMoua?!9 Date: Tue, 1 Dec 2015 00:49:37 -0600 Subject: [PATCH 085/324] Missed a few files. --- Engine/source/environment/VolumetricFog.cpp | 1319 +++++++++++++++++ Engine/source/environment/VolumetricFog.h | 243 +++ .../environment/VolumetricFogRTManager.cpp | 299 ++++ .../environment/VolumetricFogRTManager.h | 92 ++ 4 files changed, 1953 insertions(+) create mode 100644 Engine/source/environment/VolumetricFog.cpp create mode 100644 Engine/source/environment/VolumetricFog.h create mode 100644 Engine/source/environment/VolumetricFogRTManager.cpp create mode 100644 Engine/source/environment/VolumetricFogRTManager.h diff --git a/Engine/source/environment/VolumetricFog.cpp b/Engine/source/environment/VolumetricFog.cpp new file mode 100644 index 0000000000..e6be112dc5 --- /dev/null +++ b/Engine/source/environment/VolumetricFog.cpp @@ -0,0 +1,1319 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "environment/VolumetricFog.h" +#include "windowManager/platformWindowMgr.h" +#include "gfx/gfxTransformSaver.h" +#include "renderInstance/renderPassManager.h" +#include "math/mathIO.h" +#include "materials/shaderData.h" +#include "math/util/matrixSet.h" +#include "core/resourceManager.h" +#include "core/stream/bitStream.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/shapeBase.h" +#include "ts/tsShapeInstance.h" +#include "console/engineAPI.h" +#include "gui/core/guiCanvas.h" +#include "VolumetricFogRTManager.h" +#include "lighting/lightInfo.h" +#include "lighting/lightManager.h" + +#define COLBOX_SCALE Point3F(1.02f, 1.02f, 1.02f) + +IMPLEMENT_CO_NETOBJECT_V1(VolumetricFog); + +ConsoleDocClass(VolumetricFog, +"@brief Volumetric Fog Object class. Main class defining the Volumetric\n" +"Fog objects in the scene. Used in conjunction with the VolumetricFogRTManager\n" +"class which is responsible for the required rendertargets.\n\n" +"Methods (exposed to script):\n" +" setFogColorF(color) Changes the overall fog color (color.rgba range 0.0 - 1.0).\n;" +" setFogColor(color) Changes the overall fog color color.rgba range 0 - 255).\n;" +" setFogDensity(density) Changes the overall fog density.\n" +" setFogModulation(strength, speed1, speed2) changes the strength\n" +" and the speeds of the 2 animation layers.\n\n" +"Callbacks:\n" +"onEnterFog triggered whenever the controlobject (Player or Camera) enters the Fog.\n" +" (current Fog object and the controlobject are exposed to script.\n" +"onLeaveFog triggered whenever the controlobject (Player or Camera) left the Fog.\n" +" (current Fog object and the controlobject are exposed to script.\n\n" +"@tsexample\n" +" new VolumetricFog()\n" +" {\n" +" shapeName = \"art/environment/FogRCube.dts\";\n" +" fogColor = \"200 200 200 128\";\n" +" fogDensity = \"0.2\";\n" +" ignoreWater = \"0\";\n" +" MinSize = \"250\";\n" +" FadeSize = \"750\";\n" +" texture = \"art/environment/FogMod_heavy.dds\";\n" +" tiles = \"1.5\";\n" +" modStrength = \"0.2\";\n" +" PrimSpeed = \"-0.01 0.04\";\n" +" SecSpeed = \"0.02 -0.02\";\n" +" position = \"748.644 656.371 65.3506\"; \n" +" rotation = \"0 0 1 20.354\";\n" +" scale = \"40 30 6\";\n" +" };\n" +"@endtsexample\n" +); + +IMPLEMENT_CALLBACK(VolumetricFog, onEnterFog, void, (SimObjectId obj), (obj), +"@brief Called when an object enters the volume of the Fog instance.\n\n" + +"@param obj the controlobject entering the fog."); + +IMPLEMENT_CALLBACK(VolumetricFog, onLeaveFog, void, (SimObjectId obj), (obj), +"@brief Called when an object left the volume of the Fog instance.\n\n" + +"@param obj the controlobject leaving the fog."); + + +VolumetricFog::VolumetricFog() +{ + AssertFatal(VFRTM != NULL, "VolumetricFog Fatal Error: No Manager found"); + + if (!VFRTM->IsInitialized()) + VFRTM->Init(); + + mNetFlags.set(Ghostable | ScopeAlways); + + mTypeMask |= EnvironmentObjectType | StaticObjectType; + + mPrepassTarget = NULL; + mDepthBufferTarget = NULL; + mFrontBufferTarget = NULL; + + z_buf = NULL; + mTexture = NULL; + + mIsVBDirty = false; + mIsPBDirty = false; + + mFogColor.set(200, 200, 200, 255); + mFogDensity = 0.3f; + mIgnoreWater = false; + mReflect = false; + mCamInFog = false; + mResizing = false; + mFogReflStrength = 20.0; + mUseGlow = false; + mGlowStrength = 0.3f; + mGlowing = 0; + mModifLightRays = false; + mLightRayMod = 1.0f; + mOldLightRayStrength = 0.1f; + + mShapeName = ""; + mShapeLoaded = false; + mMinDisplaySize = 10.0f; + mFadeSize = 0.0f; + mCurDetailLevel = 0; + mNumDetailLevels = 0; + det_size.clear(); + + mTextureName = ""; + mIsTextured = false; + mStrength = 0.5f; + mTexTiles = 1.0f; + mSpeed1.set(0.5f, 0.0f); + mSpeed2.set(0.1f, 0.1f); +} + +VolumetricFog::~VolumetricFog() +{ + if (isClientObject()) + return; + + for (S32 i = 0; i < det_size.size(); i++) + { + if (det_size[i].indices != NULL) + delete(det_size[i].indices); + if (det_size[i].piArray != NULL) + delete(det_size[i].piArray); + if (det_size[i].verts != NULL) + delete(det_size[i].verts); + } + det_size.clear(); + + if (z_buf.isValid()) + SAFE_DELETE(z_buf); + + if (!mTexture.isNull()) + mTexture.free(); +} + +void VolumetricFog::initPersistFields() +{ + addGroup("VolumetricFogData"); + addField("shapeName", TypeShapeFilename, Offset(mShapeName, VolumetricFog), + "Path and filename of the model file (.DTS, .DAE) to use for this Volume."); + addField("FogColor", TypeColorI, Offset(mFogColor, VolumetricFog), + "Fog color RGBA (Alpha is ignored)"); + addField("FogDensity", TypeF32, Offset(mFogDensity, VolumetricFog), + "Overal fog density value (0 disables the fog)."); + addField("IgnoreWater", TypeBool, Offset(mIgnoreWater, VolumetricFog), + "Set to true if volumetric fog should continue while submerged."); + addField("MinSize", TypeF32, Offset(mMinDisplaySize, VolumetricFog), + "Min size (in pixels) for fog to be rendered."); + addField("FadeSize", TypeF32, Offset(mFadeSize, VolumetricFog), + "Object size in pixels at which the FX-fading kicks in (0 disables fading)."); + endGroup("VolumetricFogData"); + + addGroup("VolumetricFogModulation"); + addField("texture", TypeImageFilename, Offset(mTextureName, VolumetricFog), + "A texture which contains Fogdensity modulator in the red channel and color with 1-green channel. No texture disables modulation."); + addField("tiles", TypeF32, Offset(mTexTiles, VolumetricFog), + "How many times the texture is mapped to the object."); + addField("modStrength", TypeF32, Offset(mStrength, VolumetricFog), + "Overall strength of the density modulation (0 disables modulation)."); + addField("PrimSpeed", TypePoint2F, Offset(mSpeed1, VolumetricFog), + "Overall primary speed of the density modulation (x-speed(u) y-speed(v))"); + addField("SecSpeed", TypePoint2F, Offset(mSpeed2, VolumetricFog), + "Overall secundary speed of the density modulation (x-speed(u) y-speed(v))"); + endGroup("VolumetricFogModulation"); + + addGroup("Reflections"); + addField("Reflectable", TypeBool, Offset(mReflect, VolumetricFog), + "Set to true if volumetric fog should be reflected."); + addField("ReflectStrength", TypeF32, Offset(mFogReflStrength, VolumetricFog), + "Strength of the reflections (0 disables the fog)."); + endGroup("Reflections"); + + addGroup("PostFX"); + addField("useGlow", TypeBool, Offset(mUseGlow, VolumetricFog), + "Set to true if volumetric fog should use glow PostFX."); + addField("glowStrength", TypeF32, Offset(mGlowStrength, VolumetricFog), + "Overall strength of the glow PostFX."); + addField("modLightRay", TypeBool, Offset(mModifLightRays, VolumetricFog), + "Set to true if volumetric fog should modify the brightness of the Lightrays."); + addField("lightRayMod", TypeF32, Offset(mLightRayMod, VolumetricFog), + "Modifier for LightRay PostFX when inside Fog."); + endGroup("PostFX"); + Parent::initPersistFields(); +} + +void VolumetricFog::inspectPostApply() +{ + Parent::inspectPostApply(); + mSpeed.set(mSpeed1.x, mSpeed1.y, mSpeed2.x, mSpeed2.y); + setMaskBits(VolumetricFogMask | FogColorMask | FogDensityMask | FogModulationMask | FogPostFXMask | FogShapeMask); +} + +bool VolumetricFog::onAdd() +{ + if (!Parent::onAdd()) + return false; + + if (!VFRTM->IsInitialized()) + { + Con::errorf("No VolumetricFogRTManager present!!"); + return false; + } + + resetWorldBox(); + + mShapeLoaded = LoadShape(); + + setRenderTransform(mObjToWorld); + + addToScene(); + ColBox.set(getTransform(), (mObjBox.getExtents() * getScale() * COLBOX_SCALE)); + mObjSize = mWorldBox.getGreatestDiagonalLength(); + mObjScale = getScale(); + mTexTiles = mAbs(mTexTiles); + mSpeed.set(mSpeed1.x, mSpeed1.y, mSpeed2.x, mSpeed2.y); + mInvScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z)); + + if (isClientObject()) + { + conn = GameConnection::getConnectionToServer(); + if (!conn) + { + Con::errorf("VolumetricFog::onAdd - No Serverconnection"); + return false; + } + + glowFX = static_cast(Sim::findObject("VolFogGlowPostFx")); + + mOldLightRayStrength = Con::getFloatVariable("$LightRayPostFX::brightScalar",1.0f); + + GuiCanvas* cv = dynamic_cast(Sim::findObject("Canvas")); + if (cv == NULL) + { + Con::errorf("VolumetricFog::onAdd - Canvas not found!!"); + return false; + } + mPlatformWindow = cv->getPlatformWindow(); + VolumetricFogRTManager::getVolumetricFogRTMResizeSignal().notify(this, &VolumetricFog::handleResize); + GuiCanvas::getCanvasSizeChangeSignal().notify(this, &VolumetricFog::handleCanvasResize); + + InitTexture(); + return setupRenderer(); + } + + VFRTM->IncFogObjects(); + + return true; +} + +void VolumetricFog::onRemove() +{ + if (isClientObject()) + { + if (isTicking()) + { + setProcessTick(false); + if (mGlowing != 0) + { + mGlowing = 0; + glowFX->disable(); + } + _leaveFog(static_cast(conn->getControlObject())); + } + VolumetricFogRTManager::getVolumetricFogRTMResizeSignal().remove(this, &VolumetricFog::handleResize); + GuiCanvas::getCanvasSizeChangeSignal().remove(this, &VolumetricFog::handleCanvasResize); + } + removeFromScene(); + VFRTM->DecFogObjects(); + Parent::onRemove(); +} +void VolumetricFog::handleCanvasResize(GuiCanvas* canvas) +{ + UpdateBuffers(0,true); +} + +void VolumetricFog::handleResize(VolumetricFogRTManager *RTM, bool resize) +{ + if (resize) + { + mResizing = true; + RTM->FogAnswered(); + } + else + mResizing = false; + + if (mIsTextured) + { + F32 width = (F32)mPlatformWindow->getClientExtent().x; + F32 height = (F32)mPlatformWindow->getClientExtent().y; + if (!mPlatformWindow->isFullscreen()) + height -= 20;//subtract caption bar from rendertarget size. + mTexScale.x = 2.0f - ((F32)mTexture.getWidth() / width); + mTexScale.y = 2.0f - ((F32)mTexture.getHeight() / height); + } + + UpdateBuffers(0,true); +} + +//----------------------------------------------------------------------------- +// Loadshape extracted from TSMesh and TSShapeInstance +//----------------------------------------------------------------------------- + +bool VolumetricFog::LoadShape() +{ + GFXPrimitiveType GFXdrawTypes[] = { GFXTriangleList, GFXTriangleStrip }; + if (!mShapeName || mShapeName[0] == '\0') + { + Con::errorf("VolumetricFog::LoadShape() - No shape name! Volumetric Fog will not be rendered!"); + return false; + } + + // Load shape, server side only reads bounds and radius + + Resource mShape; + mShape = ResourceManager::get().load(mShapeName); + if (bool(mShape) == false) + { + Con::errorf("VolumetricFog::LoadShape() - Unable to load shape: %s", mShapeName); + return false; + } + + mObjBox = mShape->bounds; + mRadius = mShape->radius; + resetWorldBox(); + + if (!isClientObject()) + return false; + + TSShapeInstance *mShapeInstance = new TSShapeInstance(mShape, false); + meshes mesh_detail; + + for (S32 i = 0; i < det_size.size(); i++) + { + if (det_size[i].indices != NULL) + delete(det_size[i].indices); + if (det_size[i].piArray != NULL) + delete(det_size[i].piArray); + if (det_size[i].verts != NULL) + delete(det_size[i].verts); + } + det_size.clear(); + + // browsing model for detail levels + + for (U32 i = 0; i < mShape->details.size(); i++) + { + const TSDetail *detail = &mShape->details[i]; + mesh_detail.det_size = detail->size; + mesh_detail.sub_shape = detail->subShapeNum; + mesh_detail.obj_det = detail->objectDetailNum; + mesh_detail.verts = NULL; + mesh_detail.piArray = NULL; + mesh_detail.indices = NULL; + if (detail->size >= 0.0f && detail->subShapeNum >= 0) + det_size.push_back(mesh_detail); + } + + for (U32 i = 0; i < det_size.size(); i++) + { + const S32 ss = det_size[i].sub_shape; + if (ss >= 0) + { + const S32 start = mShape->subShapeFirstObject[ss]; + const S32 end = start + mShape->subShapeNumObjects[ss]; + for (S32 j = start; j < end; j++) + { + // Loading shape, only the first mesh for each detail will be used! + TSShapeInstance::MeshObjectInstance *meshObj = &mShapeInstance->mMeshObjects[j]; + if (!meshObj) + continue; + TSMesh *mesh = meshObj->getMesh(det_size[i].obj_det); + if (mesh != NULL) + { + const U32 numNrms = mesh->mNumVerts; + GFXVertexPNTT *tmpVerts = NULL; + tmpVerts = new GFXVertexPNTT[numNrms]; + mIsVBDirty = true; + for (U32 k = 0; k < numNrms; k++) + { + Point3F norm = mesh->mVertexData[k].normal(); + Point3F vert = mesh->mVertexData[k].vert(); + Point2F uv = mesh->mVertexData[k].tvert(); + tmpVerts[k].point = vert; + tmpVerts[k].texCoord = uv; + tmpVerts[k].normal = norm; + } + det_size[i].verts = tmpVerts; + det_size[i].num_verts = numNrms; + + det_size[i].piArray = new Vector(); + GFXPrimitive pInfo; + + det_size[i].indices = new Vector(); + + for (U32 k = 0; k < mesh->indices.size(); k++) + det_size[i].indices->push_back(mesh->indices[k]); + + U32 primitivesSize = mesh->primitives.size(); + for (U32 k = 0; k < primitivesSize; k++) + { + const TSDrawPrimitive & draw = mesh->primitives[k]; + GFXPrimitiveType drawType = GFXdrawTypes[draw.matIndex >> 30]; + switch (drawType) + { + case GFXTriangleList: + pInfo.type = drawType; + pInfo.numPrimitives = draw.numElements / 3; + pInfo.startIndex = draw.start; + // Use the first index to determine which 16-bit address space we are operating in + pInfo.startVertex = mesh->indices[draw.start] & 0xFFFF0000; + pInfo.minIndex = pInfo.startVertex; + pInfo.numVertices = getMin((U32)0x10000, mesh->mNumVerts - pInfo.startVertex); + break; + case GFXTriangleStrip: + pInfo.type = drawType; + pInfo.numPrimitives = draw.numElements - 2; + pInfo.startIndex = draw.start; + // Use the first index to determine which 16-bit address space we are operating in + pInfo.startVertex = mesh->indices[draw.start] & 0xFFFF0000; + pInfo.minIndex = pInfo.startVertex; + pInfo.numVertices = getMin((U32)0x10000, mesh->mNumVerts - pInfo.startVertex); + break; + default: + Con::errorf("VolumetricFog::LoadShape Unknown drawtype!?!"); + return false; + break; + } + det_size[i].piArray->push_back(pInfo); + j = end; + } + } + else + { + Con::errorf("VolumetricFog::LoadShape Error loading mesh from shape!"); + delete mShapeInstance; + return false; + } + mIsVBDirty = true; + mIsPBDirty = true; + } + } + } + + mNumDetailLevels = det_size.size(); + mCurDetailLevel = 0; + UpdateBuffers(mCurDetailLevel); + delete mShapeInstance; + + return true; +} + +//----------------------------------------------------------------------------- +// UpdateBuffers called whenever detaillevel changes (LOD) +//----------------------------------------------------------------------------- + + +bool VolumetricFog::UpdateBuffers(U32 dl, bool force) +{ + if (mVB.isNull() || mIsVBDirty || dl != mCurDetailLevel || force) + { + mVB.set(GFX, det_size[dl].num_verts, GFXBufferTypeDynamic); + mIsVBDirty = false; + } + GFXVertexPNTT *vertPtr = mVB.lock(); + if (!vertPtr) + { + mVB.unlock(); + return false; + } + dMemcpy(vertPtr, det_size[dl].verts, sizeof (GFXVertexPNTT)* det_size[dl].num_verts); + mVB.unlock(); + + if (mIsPBDirty || mPB.isNull() || dl != mCurDetailLevel || force) + { + #ifdef TORQUE_DEBUG + mPB.set(GFX, det_size[dl].indices->size(), det_size[dl].piArray->size(), GFXBufferTypeDynamic, avar("%s() - VolFogPrimBuffer (line %d)", __FUNCTION__, __LINE__)); + #else + mPB.set(GFX, det_size[dl].indices->size(), det_size[dl].piArray->size(), GFXBufferTypeDynamic); + #endif + U16 *ibIndices = NULL; + GFXPrimitive *piInput = NULL; + mPB.lock(&ibIndices, &piInput); + dCopyArray(ibIndices, det_size[dl].indices->address(), det_size[dl].indices->size()); + dMemcpy(piInput, det_size[dl].piArray->address(), det_size[dl].piArray->size() * sizeof(GFXPrimitive)); + mPB.unlock(); + mIsPBDirty = false; + } + mCurDetailLevel = dl; + return true; +} + +U32 VolumetricFog::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + if (stream->writeFlag(mask & FogColorMask)) + stream->write(mFogColor); + if (stream->writeFlag(mask & FogDensityMask)) + stream->write(mFogDensity); + if (stream->writeFlag(mask & FogModulationMask)) + { + stream->write(mTextureName); + mTexTiles = mFabs(mTexTiles); + stream->write(mTexTiles); + stream->write(mStrength); + mathWrite(*stream, mSpeed); + } + if (stream->writeFlag(mask & FogPostFXMask)) + { + stream->writeFlag(mUseGlow); + stream->write(mGlowStrength); + stream->writeFlag(mModifLightRays); + stream->write(mLightRayMod); + } + if (stream->writeFlag(mask & VolumetricFogMask)) + { + stream->writeFlag(mIgnoreWater); + stream->writeFlag(mReflect); + stream->write(mFogReflStrength); + stream->writeFlag(mResizing); + stream->write(mMinDisplaySize); + stream->write(mFadeSize); + } + if (stream->writeFlag(mask & FogShapeMask)) + { + stream->writeString(mShapeName); + mathWrite(*stream, getTransform()); + mathWrite(*stream, getScale()); + if (!mShapeName || mShapeName[0] == '\0') + return retMask; + Resource mShape; + mShape = ResourceManager::get().load(mShapeName); + if (bool(mShape) == false) + return retMask; + mObjBox = mShape->bounds; + mRadius = mShape->radius; + resetWorldBox(); + mObjSize = mWorldBox.getGreatestDiagonalLength(); + mObjScale = getScale(); + mInvScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z)); + } + return retMask; +} + +void VolumetricFog::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + MatrixF mat; + VectorF scale; + VectorF mOldScale = getScale(); + String oldTextureName = mTextureName; + StringTableEntry oldShape = mShapeName; + + if (stream->readFlag())// Fog color + stream->read(&mFogColor); + if (stream->readFlag())// Fog Density + { + stream->read(&mFogDensity); + if (isTicking()) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mFogDensity); + Con::setVariable("$VolumetricFog::density", buf); + } + } + if (stream->readFlag())// Fog Modulation + { + stream->read(&mTextureName); + stream->read(&mTexTiles); + mTexTiles = mFabs(mTexTiles); + stream->read(&mStrength); + mathRead(*stream, &mSpeed); + mSpeed1.set(mSpeed.x, mSpeed.y); + mSpeed2.set(mSpeed.z, mSpeed.w); + + if (isProperlyAdded()) + { + if (oldTextureName != mTextureName) + InitTexture(); + if (oldTextureName.isNotEmpty() && mTextureName.isEmpty()) + { + mIsTextured = false; + mTexture.free(); + } + } + } + if (stream->readFlag())//Fog PostFX + { + mUseGlow = stream->readFlag(); + stream->read(&mGlowStrength); + mModifLightRays = stream->readFlag(); + stream->read(&mLightRayMod); + if (isTicking()) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mGlowStrength); + Con::setVariable("$VolFogGlowPostFx::glowStrength", buf); + if (mUseGlow && !glowFX->isEnabled()) + glowFX->enable(); + if (!mUseGlow && glowFX->isEnabled()) + glowFX->disable(); + if (mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength * mLightRayMod); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + if (!mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + } + } + if (stream->readFlag())//Volumetric Fog + { + mIgnoreWater = stream->readFlag(); + mReflect = stream->readFlag(); + stream->read(&mFogReflStrength); + mResizing = stream->readFlag(); + stream->read(&mMinDisplaySize); + stream->read(&mFadeSize); + } + if (stream->readFlag())//Fog shape + { + mShapeName = stream->readSTString(); + mathRead(*stream, &mat); + mathRead(*stream, &scale); + if (strcmp(oldShape, mShapeName) != 0) + { + mIsVBDirty = true; + mShapeLoaded = LoadShape(); + } + setScale(scale); + setTransform(mat); + ColBox.set(getTransform(), (mObjBox.getExtents() * getScale() * COLBOX_SCALE)); + mObjSize = mWorldBox.getGreatestDiagonalLength(); + mObjScale = getScale(); + mInvScale = (1.0f / getMax(getMax(mObjScale.x, mObjScale.y), mObjScale.z)); + } +} + +void VolumetricFog::processTick(const Move* move) +{ + Parent::processTick(move); + mCounter++; + if ( mGlowing==1 && mCurGlow < mGlowStrength ) + { + mCurGlow += (mGlowStrength / 10.0); + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mCurGlow); + Con::setVariable("$VolFogGlowPostFx::glowStrength", buf); + } + else if ( mGlowing == 2 && mCurGlow > 0.0f ) + { + mCurGlow -= (mGlowStrength / 5.0f); + if (mCurGlow <= 0.0f) + { + glowFX->disable(); + mGlowing = 0; + setProcessTick(false); + return; + } + else + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mCurGlow); + Con::setVariable("$VolFogGlowPostFx::glowStrength", buf); + } + } + if (mCounter == 3) + { + ShapeBase* control = static_cast(conn->getControlObject()); + MatrixF xfm; + control->getRenderEyeTransform(&xfm); + Point3F pos = xfm.getPosition(); + if (!ColBox.isContained(pos)) + _leaveFog(control); + mCounter = 0; + } +} + +void VolumetricFog::_enterFog(ShapeBase *control) +{ + if (mUseGlow) + { + if (glowFX) + { + mCurGlow = 0.0f; + Con::setVariable("$VolFogGlowPostFx::glowStrength", "0.0"); + glowFX->enable(); + mGlowing = 1; + } + } + if (mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength * mLightRayMod); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + mCounter = 0; + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mFogDensity); + Con::setVariable("$VolumetricFog::density", buf); + setProcessTick(true); + if (control) + onEnterFog_callback(control->getId()); +} + +void VolumetricFog::_leaveFog(ShapeBase *control) +{ + mCamInFog = false; + Con::setVariable("$VolumetricFog::density", "0.0"); + if (mModifLightRays) + { + char buf[20]; + dSprintf(buf, sizeof(buf), "%3.7f", mOldLightRayStrength); + Con::setVariable("$LightRayPostFX::brightScalar", buf); + } + if (mUseGlow) + { + if (glowFX && mGlowing != 2) + { + mCurGlow = mGlowStrength; + mGlowing = 2; + if (control) + onLeaveFog_callback(control->getId()); + } + } + else + { + setProcessTick(false); + if (control) + onLeaveFog_callback(control->getId()); + } +} + +//----------------------------------------------------------------------------- +// Setting up the renderers +//----------------------------------------------------------------------------- + +bool VolumetricFog::setupRenderer() +{ + // Search for the prepass rendertarget and shadermacros. + mPrepassTarget = NamedTexTarget::find("prepass"); + if (!mPrepassTarget.isValid()) + { + Con::errorf("VolumetricFog::setupRenderer - could not find PrepassTarget"); + return false; + } + + Vector macros; + if (mPrepassTarget) + mPrepassTarget->getShaderMacros(¯os); + + // Search the depth and frontbuffers which are created by the VolumetricFogRTManager + + mDepthBufferTarget = NamedTexTarget::find("volfogdepth"); + if (!mDepthBufferTarget.isValid()) + { + Con::errorf("VolumetricFog::setupRenderer - could not find depthbuffer"); + return false; + } + + mFrontBufferTarget = NamedTexTarget::find("volfogfront"); + if (!mFrontBufferTarget.isValid()) + { + Con::errorf("VolumetricFog::setupRenderer - could not find frontbuffer"); + return false; + } + + // Find and setup the prepass Shader + + ShaderData *shaderData; + mPrePassShader = Sim::findObject("VolumetricFogPrePassShader", shaderData) ? + shaderData->getShader() : NULL; + if (!mPrePassShader) + { + Con::errorf("VolumetricFog::setupRenderer - could not find VolumetricFogPrePassShader"); + return false; + } + + // Create ShaderConstBuffer and Handles + + mPPShaderConsts = mPrePassShader->allocConstBuffer(); + if (mPPShaderConsts.isNull()) + { + Con::errorf("VolumetricFog::setupRenderer - could not allocate ShaderConstants 1."); + return false; + } + + mPPModelViewProjSC = mPrePassShader->getShaderConstHandle("$modelView"); + + // Find and setup the VolumetricFog Shader + + shaderData = NULL; + mShader = Sim::findObject("VolumetricFogShader", shaderData) ? + shaderData->getShader(macros) : NULL; + if (!mShader) + { + Con::errorf("VolumetricFog::setupRenderer - could not find VolumetricFogShader"); + return false; + } + + // Create ShaderConstBuffer and Handles + + mShaderConsts = mShader->allocConstBuffer(); + if (mShaderConsts.isNull()) + { + Con::errorf("VolumetricFog::setupRenderer - could not allocate ShaderConstants 2."); + return false; + } + + mModelViewProjSC = mShader->getShaderConstHandle("$modelView"); + mFadeSizeSC = mShader->getShaderConstHandle("$fadesize"); + mFogColorSC = mShader->getShaderConstHandle("$fogColor"); + mFogDensitySC = mShader->getShaderConstHandle("$fogDensity"); + mPreBias = mShader->getShaderConstHandle("$preBias"); + mAccumTime = mShader->getShaderConstHandle("$accumTime"); + mIsTexturedSC = mShader->getShaderConstHandle("$textured"); + mTexTilesSC = mShader->getShaderConstHandle("$numtiles"); + mModStrengthSC = mShader->getShaderConstHandle("$modstrength"); + mModSpeedSC = mShader->getShaderConstHandle("$modspeed"); + mViewPointSC = mShader->getShaderConstHandle("$viewpoint"); + mTexScaleSC = mShader->getShaderConstHandle("$texscale"); + mAmbientColorSC = mShader->getShaderConstHandle("$ambientColor"); + + // Find and setup the reflection Shader + + shaderData = NULL; + mReflectionShader = Sim::findObject("VolumetricFogReflectionShader", shaderData) ? + shaderData->getShader() : NULL; + if (!mReflectionShader) + { + Con::errorf("VolumetricFog::setupRenderer - could not find VolumetricFogReflectionShader"); + return false; + } + + mReflShaderConsts = mReflectionShader->allocConstBuffer(); + if (mReflShaderConsts.isNull()) + { + Con::errorf("VolumetricFog::setupRenderer - could not allocate ShaderConstants for VolumetricFogReflectionShader."); + return false; + } + + mReflModelViewProjSC = mReflectionShader->getShaderConstHandle("$modelView"); + mReflFogColorSC = mReflectionShader->getShaderConstHandle("$fogColor"); + mReflFogDensitySC = mReflectionShader->getShaderConstHandle("$fogDensity"); + mReflFogStrengthSC = mReflectionShader->getShaderConstHandle("$reflStrength"); + + // Create the prepass StateBlock + + desc_preD.setCullMode(GFXCullCW); + desc_preD.setBlend(true); + desc_preD.setZReadWrite(false, false); + desc_preD.stencilEnable = false; + desc_preF.setCullMode(GFXCullCCW); + desc_preF.setBlend(true); + desc_preF.setZReadWrite(true, false); + desc_preF.stencilEnable = false; + + // Create the VolumetricFog StateBlock + + descD.setCullMode(GFXCullCW); + descD.setBlend(true); + descD.setZReadWrite(false, false);// desc.setZReadWrite(true, false); + + // prepassBuffer sampler + descD.samplersDefined = true; + descD.samplers[0].addressModeU = GFXAddressClamp; + descD.samplers[0].addressModeV = GFXAddressClamp; + descD.samplers[0].addressModeW = GFXAddressClamp; + descD.samplers[0].magFilter = GFXTextureFilterLinear; + descD.samplers[0].minFilter = GFXTextureFilterLinear; + descD.samplers[0].mipFilter = GFXTextureFilterLinear; + descD.samplers[0].textureColorOp = GFXTOPDisable; + + // DepthBuffer sampler + descD.samplers[1].addressModeU = GFXAddressClamp; + descD.samplers[1].addressModeV = GFXAddressClamp; + descD.samplers[1].addressModeW = GFXAddressClamp; + descD.samplers[1].magFilter = GFXTextureFilterLinear; + descD.samplers[1].minFilter = GFXTextureFilterLinear; + descD.samplers[1].mipFilter = GFXTextureFilterLinear; + descD.samplers[1].textureColorOp = GFXTOPModulate; + + // FrontBuffer sampler + descD.samplers[2].addressModeU = GFXAddressClamp; + descD.samplers[2].addressModeV = GFXAddressClamp; + descD.samplers[2].addressModeW = GFXAddressClamp; + descD.samplers[2].magFilter = GFXTextureFilterLinear; + descD.samplers[2].minFilter = GFXTextureFilterLinear; + descD.samplers[2].mipFilter = GFXTextureFilterLinear; + descD.samplers[2].textureColorOp = GFXTOPModulate; + + // animated density modifier map sampler + descD.samplers[3].addressModeU = GFXAddressWrap; + descD.samplers[3].addressModeV = GFXAddressWrap; + descD.samplers[3].addressModeW = GFXAddressWrap; + descD.samplers[3].magFilter = GFXTextureFilterLinear; + descD.samplers[3].minFilter = GFXTextureFilterLinear; + descD.samplers[3].mipFilter = GFXTextureFilterLinear; + descD.samplers[3].textureColorOp = GFXTOPModulate; + + dMemcpy(&descF, &descD, sizeof(GFXStateBlockDesc)); + descF.setCullMode(GFXCullCCW); + descF.setBlend(true); + descF.setZReadWrite(true, false); + + desc_refl.setCullMode(GFXCullCCW); + desc_refl.setBlend(true); + desc_refl.setZReadWrite(true, false); + + mStateblock_preD = GFX->createStateBlock(desc_preD); + mStateblock_preF = GFX->createStateBlock(desc_preF); + mStateblockD = GFX->createStateBlock(descD); + mStateblockF = GFX->createStateBlock(descF); + mStateblock_refl = GFX->createStateBlock(desc_refl); + + // Create Rendertarget + + z_buf = GFX->allocRenderToTextureTarget(); + if (z_buf == NULL) + { + Con::errorf("VolumetricFog::setupRenderer - Could not create Render Target"); + return false; + } + + return true; +} + +void VolumetricFog::prepRenderImage(SceneRenderState *state) +{ + if (!mShapeLoaded || mFogDensity <= 0.0f || mResizing) + return; + + if (!state->isDiffusePass()) + { + if (!state->isReflectPass()) + return; + } + + PROFILE_SCOPE(VolumetricFog_prepRenderImage); + + // Time critical therefore static_cast + ShapeBase* control = static_cast(conn->getControlObject()); + if (control->getWaterCoverage() >= 0.9f && !mIgnoreWater) + return; + + camPos = state->getCameraPosition(); + F32 dist = (camPos - getBoxCenter()).len(); + F32 scaleFactor = dist * mInvScale; + if (scaleFactor <= 0.0f) + { + if (mCurDetailLevel != 0) + UpdateBuffers(0); + } + const F32 pixelScale = state->getViewport().extent.y / 300.0f; + + mPixelSize = (mRadius / scaleFactor) * state->getWorldToScreenScale().y * pixelScale; + if (mPixelSize < mMinDisplaySize) + return; + if (mNumDetailLevels > 1) + { + if ((det_size[mCurDetailLevel].det_size > mPixelSize) && (mCurDetailLevel < mNumDetailLevels - 1)) + UpdateBuffers(mCurDetailLevel + 1); + else if (mCurDetailLevel > 0) + { + if (mPixelSize >= det_size[mCurDetailLevel - 1].det_size) + UpdateBuffers(mCurDetailLevel - 1); + } + } + + if (state->isReflectPass() && mReflect) + { + ObjectRenderInst *ri = state->getRenderPass()->allocInst(); + ri->renderDelegate.bind(this, &VolumetricFog::reflect_render); + ri->type = RenderPassManager::RIT_VolumetricFog; + ri->translucentSort = true; + ri->sortDistSq = getRenderWorldBox().getSqDistanceToPoint(camPos); + if (dist < 1.0f) + ri->defaultKey = 1; + else + ri->defaultKey = U32(dist); + state->getRenderPass()->addInst(ri); + return; + } + else if (state->isDiffusePass()) + { + viewDist = state->getFarPlane(); + mFOV = state->getCameraFrustum().getFov() / M_PI_F; + Point3F mEyeVec = state->getVectorEye() * viewDist; + + mViewPoint.x = ((mAtan2(mEyeVec.x, mEyeVec.y) / M_PI_F) + 1.0f) * mTexTiles; + mViewPoint.y = (0.5f - (mAsin(mEyeVec.z) / M_PI_F)) * mTexTiles; + + bool isInside = ColBox.isContained(camPos); + if (isInside && !mCamInFog) + { + mCamInFog = true; + _enterFog(control); + } + else if (!isInside && mCamInFog) + mCamInFog = false; + + ObjectRenderInst *ri = state->getRenderPass()->allocInst(); + ri->renderDelegate.bind(this, &VolumetricFog::render); + ri->type = RenderPassManager::RIT_VolumetricFog; + ri->translucentSort = true; + ri->sortDistSq = getRenderWorldBox().getSqDistanceToPoint(camPos); + if (dist < 1.0f) + ri->defaultKey = 1; + else + ri->defaultKey = U32(dist); + state->getRenderPass()->addInst(ri); + return; + } + return; +} + +void VolumetricFog::render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) +{ + if (overrideMat || !mShapeLoaded || !isClientObject() || mResizing) + return; + + PROFILE_SCOPE(VolumetricFog_Render); + + GFXTransformSaver saver; + GFX->setVertexBuffer(mVB); + GFX->setPrimitiveBuffer(mPB); + + MatrixF mat = getRenderTransform(); + mat.scale(mObjScale); + GFX->multWorld(mat); + + GFX->setShader(mPrePassShader); + GFX->setShaderConstBuffer(mPPShaderConsts); + GFX->setStateBlock(mStateblock_preD); + + // Set all the shader consts... + + MatrixF xform(GFX->getProjectionMatrix()); + xform *= GFX->getViewMatrix(); + xform *= GFX->getWorldMatrix(); + + mPPShaderConsts->setSafe(mPPModelViewProjSC, xform); + + LightInfo *lightinfo = LIGHTMGR->getSpecialLight(LightManager::slSunLightType); + const ColorF &sunlight = state->getAmbientLightColor(); + + Point3F ambientColor(sunlight.red, sunlight.green, sunlight.blue); + mShaderConsts->setSafe(mAmbientColorSC, ambientColor); + + GFXTextureObject *mDepthBuffer = mDepthBufferTarget ? mDepthBufferTarget->getTexture(0) : NULL; + GFXTextureObject *mFrontBuffer = mFrontBufferTarget ? mFrontBufferTarget->getTexture(0) : NULL; + + GFX->pushActiveRenderTarget(); + + //render backside to target mDepthBuffer + z_buf->attachTexture(GFXTextureTarget::DepthStencil, GFXTextureTarget::sDefaultDepthStencil); + z_buf->attachTexture(GFXTextureTarget::Color0, mDepthBuffer); + + GFX->setActiveRenderTarget(z_buf); + GFX->clear(GFXClearStencil | GFXClearTarget , ColorI(0,0,0,0), 1.0f, 0); + + GFX->drawPrimitive(0); + z_buf->resolve(); + + //render frontside to target mFrontBuffer + z_buf->attachTexture(GFXTextureTarget::DepthStencil, GFXTextureTarget::sDefaultDepthStencil); + z_buf->attachTexture(GFXTextureTarget::Color0, mFrontBuffer); + GFX->clear(GFXClearStencil | GFXClearTarget, ColorI(0, 0, 0, 0), 1.0f, 0); + + GFX->setStateBlock(mStateblock_preF); + + GFX->drawPrimitive(0); + z_buf->resolve(); + + GFX->popActiveRenderTarget(); + z_buf->attachTexture(GFXTextureTarget::Color0, NULL); + + //render Volumetric Fog + GFX->setShader(mShader); + GFX->setShaderConstBuffer(mShaderConsts); + + mShaderConsts->setSafe(mModelViewProjSC, xform); + if (mFadeSize > 0.0f) + mShaderConsts->setSafe(mFadeSizeSC, mClampF(mPixelSize / mFadeSize, 0.0f, 1.0f)); + else + mShaderConsts->setSafe(mFadeSizeSC, 1.0f); + mShaderConsts->setSafe(mFogColorSC, mFogColor); + mShaderConsts->setSafe(mFogDensitySC, mFogDensity); + mShaderConsts->setSafe(mPreBias, viewDist); + mShaderConsts->setSafe(mAccumTime, (F32)Sim::getCurrentTime() / 1000.0f); + mShaderConsts->setSafe(mModStrengthSC, mStrength); + mShaderConsts->setSafe(mModSpeedSC, mSpeed); + mShaderConsts->setSafe(mViewPointSC, mViewPoint); + mShaderConsts->setSafe(mTexScaleSC, mTexScale * mFOV); + mShaderConsts->setSafe(mTexTilesSC, mTexTiles); + + GFXTextureObject *prepasstex = mPrepassTarget ? mPrepassTarget->getTexture(0) : NULL; + + GFX->setTexture(0, prepasstex); + GFX->setTexture(1, mDepthBuffer); + GFX->setTexture(2, mFrontBuffer); + + if (mIsTextured && mStrength > 0.0f) + { + GFX->setTexture(3, mTexture); + mShaderConsts->setSafe(mIsTexturedSC, 1.0f); + } + else + mShaderConsts->setSafe(mIsTexturedSC, 0.0f); + + if (mCamInFog) + { + /*GFXLockedRect *rect=mDepthBuffer->lock(); + U32 pixoffset = 0;// 1572864 + (512 * 4); + U8 red = rect->bits[pixoffset]; + U8 green = rect->bits[pixoffset+1]; + U8 blue = rect->bits[pixoffset+2]; + U8 alpha = rect->bits[pixoffset+3]; + mDepthBuffer->unlock(); + S32 lval = ((alpha << 24) + (blue << 16) + (green << 8) + (red)); + F32 fval = ((F32)lval / S32_MAX); + Con::printf("Color %d %d %d %d %d %f", red, green, blue, alpha, lval, fval);*/ + GFX->setStateBlock(mStateblockD); + } + else + GFX->setStateBlock(mStateblockF); + + GFX->drawPrimitive(0); +} + +void VolumetricFog::reflect_render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) +{ + if (overrideMat || !mShapeLoaded || !isClientObject() || mResizing || (mFogReflStrength==0.0f)) + return; + + GFXTransformSaver saver; + GFX->setVertexBuffer(mVB); + GFX->setPrimitiveBuffer(mPB); + + MatrixF mat = getRenderTransform(); + mat.scale(mObjScale); + GFX->multWorld(mat); + + GFX->setShader(mReflectionShader); + GFX->setShaderConstBuffer(mReflShaderConsts); + GFX->setStateBlock(mStateblock_refl); + + // Set all the shader consts... + MatrixF xform(GFX->getProjectionMatrix()); + xform *= GFX->getViewMatrix(); + xform *= GFX->getWorldMatrix(); + + mReflShaderConsts->setSafe(mReflModelViewProjSC, xform); + mReflShaderConsts->setSafe(mReflFogColorSC, mFogColor); + mReflShaderConsts->setSafe(mReflFogDensitySC, mFogDensity); + mReflShaderConsts->setSafe(mReflFogStrengthSC, mFogReflStrength); + + GFX->drawPrimitive(0); +} + +//----------------------------------------------------------------------------- +// InitTexture is called whenever a modulation texture is added to the object +//----------------------------------------------------------------------------- + +void VolumetricFog::InitTexture() +{ + mIsTextured = false; + + if (mTextureName.isNotEmpty()) + mTexture.set(mTextureName, &GFXDefaultStaticDiffuseProfile, "VolumetricFogMod"); + + if (!mTexture.isNull()) + { + mIsTextured = true; + + F32 width = (F32)mPlatformWindow->getClientExtent().x; + F32 height = (F32)mPlatformWindow->getClientExtent().y; + + if (!mPlatformWindow->isFullscreen()) + height -= 20;//subtract caption bar from rendertarget size. + + mTexScale.x = 2.0f - ((F32)mTexture.getWidth() / width); + mTexScale.y = 2.0f - ((F32)mTexture.getHeight() / height); + } +} + +void VolumetricFog::setFogColor(ColorF color) +{ + mFogColor.set(255 * color.red,255 * color.green,255 * color.blue); + setMaskBits(FogColorMask); +} + +void VolumetricFog::setFogColor(ColorI color) +{ + mFogColor = color; + setMaskBits(FogColorMask); +} + +void VolumetricFog::setFogDensity(F32 density) +{ + if (density < 0.0f) + density = 0.0f; + mFogDensity = density; + setMaskBits(FogDensityMask); +} + +void VolumetricFog::setFogModulation(F32 strength,Point2F speed1,Point2F speed2) +{ + mStrength = strength; + mSpeed1 = speed1; + mSpeed2 = speed2; + mSpeed.set(speed1.x, speed1.y, speed2.x, speed2.y); + setMaskBits(FogModulationMask); +} + +void VolumetricFog::setFogGlow(bool on_off, F32 strength) +{ + mUseGlow = on_off; + mGlowStrength = strength; + setMaskBits(FogPostFXMask); +} + +void VolumetricFog::setFogLightray(bool on_off, F32 strength) +{ + mModifLightRays = on_off; + mLightRayMod = strength; + setMaskBits(FogPostFXMask); +} + +bool VolumetricFog::isInsideFog() +{ + return mCamInFog; +} + +DefineEngineMethod(VolumetricFog, SetFogColorF, void, (ColorF new_color), , +"@brief Changes the color of the fog\n\n." +"@params new_color the new fog color (rgb 0.0 - 1.0, a is ignored.") +{ + object->setFogColor(new_color); +} + +DefineEngineMethod(VolumetricFog, SetFogColor, void, (ColorI new_color), , +"@brief Changes the color of the fog\n\n." +"@params new_color the new fog color (rgb 0-255, a is ignored.") +{ + object->setFogColor(new_color); +} + +DefineEngineMethod(VolumetricFog, SetFogDensity, void, (F32 new_density), , +"@brief Changes the density of the fog\n\n." +"@params new_density the new fog density.") +{ + object->setFogDensity(new_density); +} + +DefineEngineMethod(VolumetricFog, SetFogModulation, void, (F32 new_strenght, Point2F new_speed1, Point2F new_speed2), , +"@brief Changes the modulation of the fog\n\n." +"@params new_strenght the new strength of the modulation.\n" +"@params new_speed1 the new speed (x y) of the modulation layer 1.\n" +"@params new_speed2 the new speed (x y) of the modulation layer 2.\n") +{ + object->setFogModulation(new_strenght, new_speed1, new_speed2); +} + +DefineEngineMethod(VolumetricFog, SetFogGlow, void, (bool on_off,F32 strength), , +"@brief Changes the glow postfx when inside the fog\n\n." +"@params on_off set to true to enable glow.\n" +"@params strength glow strength.\n") +{ + object->setFogGlow(on_off, strength); +} + +DefineEngineMethod(VolumetricFog, SetFogLightray, void, (bool on_off, F32 strength), , +"@brief Changes the lightrays postfx when inside the fog\n\n." +"@params on_off set to true to modification of the lightray postfx.\n" +"@params strength lightray strength.\n") +{ + object->setFogLightray(on_off, strength); +} + +DefineEngineMethod(VolumetricFog, isInsideFog, bool, (), , +"@brief returns true if control object is inside the fog\n\n.") +{ + return object->isInsideFog(); +} \ No newline at end of file diff --git a/Engine/source/environment/VolumetricFog.h b/Engine/source/environment/VolumetricFog.h new file mode 100644 index 0000000000..ef2f39929a --- /dev/null +++ b/Engine/source/environment/VolumetricFog.h @@ -0,0 +1,243 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _VolumetricFog_H_ +#define _VolumetricFog_H_ + +#ifndef _SCENEOBJECT_H_ +#include "scene/sceneObject.h" +#endif +#ifndef _MATTEXTURETARGET_H_ +#include "materials/matTextureTarget.h" +#endif +#ifndef _GFXSHADER_H_ +#include "gfx/gfxShader.h" +#endif +#ifndef _GFXTARGET_H_ +#include "gfx/gfxTarget.h" +#endif +#ifndef _GFXVERTEXBUFFER_H_ +#include "gfx/gfxVertexBuffer.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _POST_EFFECT_H_ +#include "postFx/postEffect.h" +#endif + +#include "gui/core/guiCanvas.h" + +class VolumetricFogRTManager; + +class VolumetricFog : public SceneObject +{ + typedef SceneObject Parent; + + // Maskbits for updating + enum + { + VolumetricFogMask = Parent::NextFreeMask, + FogColorMask = Parent::NextFreeMask << 1, + FogDensityMask = Parent::NextFreeMask << 2, + FogModulationMask = Parent::NextFreeMask << 3, + FogPostFXMask = Parent::NextFreeMask << 4, + FogShapeMask = Parent::NextFreeMask << 5, + NextFreeMask = Parent::NextFreeMask << 6 + }; + +// Struct which holds the shape details + struct meshes + { + F32 det_size; + S32 sub_shape; + S32 obj_det; + U32 num_verts; + GFXVertexPNTT *verts; + Vector *piArray; + Vector *indices; + }; + + protected: + // Rendertargets; + GFXTextureTargetRef z_buf; + NamedTexTargetRef mPrepassTarget; + NamedTexTargetRef mDepthBufferTarget; + NamedTexTargetRef mFrontBufferTarget; + + // Fog Modulation texture + GFXTexHandle mTexture; + + // Shaders + GFXShaderRef mShader; + GFXShaderRef mPrePassShader; + GFXShaderRef mReflectionShader; + + // Stateblocks + GFXStateBlockDesc descD; + GFXStateBlockDesc descF; + GFXStateBlockDesc desc_preD; + GFXStateBlockDesc desc_preF; + GFXStateBlockDesc desc_refl; + + GFXStateBlockRef mStateblockD; + GFXStateBlockRef mStateblockF; + GFXStateBlockRef mStateblock_preD; + GFXStateBlockRef mStateblock_preF; + GFXStateBlockRef mStateblock_refl; + + // Shaderconstants + GFXShaderConstBufferRef mShaderConsts; + GFXShaderConstHandle *mModelViewProjSC; + GFXShaderConstHandle *mFadeSizeSC; + GFXShaderConstHandle *mFogColorSC; + GFXShaderConstHandle *mFogDensitySC; + GFXShaderConstHandle *mPreBias; + GFXShaderConstHandle *mAccumTime; + GFXShaderConstHandle *mIsTexturedSC; + GFXShaderConstHandle *mModSpeedSC; + GFXShaderConstHandle *mModStrengthSC; + GFXShaderConstHandle *mViewPointSC; + GFXShaderConstHandle *mTexScaleSC; + GFXShaderConstHandle *mTexTilesSC; + + GFXShaderConstBufferRef mPPShaderConsts; + GFXShaderConstHandle *mPPModelViewProjSC; + + GFXShaderConstHandle *mAmbientColorSC; + + GFXShaderConstBufferRef mReflShaderConsts; + GFXShaderConstHandle *mReflModelViewProjSC; + GFXShaderConstHandle *mReflFogColorSC; + GFXShaderConstHandle *mReflFogDensitySC; + GFXShaderConstHandle *mReflFogStrengthSC; + + // Vertex and Prim. Buffer + GFXVertexBufferHandle mVB; + GFXPrimitiveBufferHandle mPB; + + // Fog volume data; + StringTableEntry mShapeName; + ColorI mFogColor; + F32 mFogDensity; + bool mIgnoreWater; + bool mReflect; + Vector det_size; + bool mShapeLoaded; + F32 mPixelSize; + F32 mFadeSize; + U32 mCurDetailLevel; + U32 mNumDetailLevels; + F32 mObjSize; + F32 mRadius; + OrientedBox3F ColBox; + VectorF mObjScale; + F32 mMinDisplaySize; + F32 mInvScale; + + // Fog Modulation data + String mTextureName; + bool mIsTextured; + F32 mTexTiles; + F32 mStrength; + Point2F mSpeed1; + Point2F mSpeed2; + Point4F mSpeed; + Point2F mTexScale; + + // Fog Rendering data + Point3F camPos; + Point2F mViewPoint; + F32 mFOV; + F32 viewDist; + bool mIsVBDirty; + bool mIsPBDirty; + bool mCamInFog; + bool mResizing; + PlatformWindow *mPlatformWindow; + + // Reflections + F32 mFogReflStrength; + + // PostFX + PostEffect *glowFX; + bool mUseGlow; + F32 mGlowStrength; + U8 mGlowing; + F32 mCurGlow; + + bool mModifLightRays; + F32 mLightRayMod; + F32 mOldLightRayStrength; + + GameConnection* conn; + U32 mCounter; + + void ResizeRT(PlatformWindow *win, bool resize); + + protected: + // Protected methods + bool onAdd(); + void onRemove(); + void handleResize(VolumetricFogRTManager *RTM, bool resize); + void handleCanvasResize(GuiCanvas* canvas); + + bool LoadShape(); + bool setupRenderer(); + void InitTexture(); + bool UpdateBuffers(U32 dl,bool force=true); + + void processTick(const Move *move); + void _enterFog(ShapeBase *control); + void _leaveFog(ShapeBase *control); + + public: + // Public methods + VolumetricFog(); + ~VolumetricFog(); + + static void initPersistFields(); + virtual void inspectPostApply(); + + U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream); + void unpackUpdate(NetConnection *conn, BitStream *stream); + + void prepRenderImage(SceneRenderState* state); + void render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat); + void reflect_render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat); + + // Methods for modifying & networking various fog elements + // Used in script + void setFogColor(ColorF color); + void setFogColor(ColorI color); + void setFogDensity(F32 density); + void setFogModulation(F32 strength, Point2F speed1, Point2F speed2); + void setFogGlow(bool on_off, F32 strength); + void setFogLightray(bool on_off, F32 strength); + bool isInsideFog(); + + DECLARE_CONOBJECT(VolumetricFog); + + DECLARE_CALLBACK(void, onEnterFog, (SimObjectId obj)); + DECLARE_CALLBACK(void, onLeaveFog, (SimObjectId obj)); +}; +#endif \ No newline at end of file diff --git a/Engine/source/environment/VolumetricFogRTManager.cpp b/Engine/source/environment/VolumetricFogRTManager.cpp new file mode 100644 index 0000000000..2a927cc090 --- /dev/null +++ b/Engine/source/environment/VolumetricFogRTManager.cpp @@ -0,0 +1,299 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//----------------------------------------------------------------------------- +// Volumetric Fog Rendertarget Manager +// +// Creates and maintains one set of rendertargets to be used by every +// VolumetricFog object in the scene. +// +// Will be loaded at startup end removed when ending game. +// +//----------------------------------------------------------------------------- + +#include "VolumetricFogRTManager.h" +#include "core/module.h" +#include "scene/sceneManager.h" +#include "windowManager/platformWindowMgr.h" +#include "console/engineAPI.h" +#include "gui/core/guiCanvas.h" + +MODULE_BEGIN(VolumetricFogRTManager) + +MODULE_INIT_AFTER(Scene) +MODULE_SHUTDOWN_BEFORE(Scene) + +MODULE_INIT +{ + gVolumetricFogRTManager = new VolumetricFogRTManager; + gClientSceneGraph->addObjectToScene(gVolumetricFogRTManager); +} + +MODULE_SHUTDOWN +{ + gClientSceneGraph->removeObjectFromScene(gVolumetricFogRTManager); + SAFE_DELETE(gVolumetricFogRTManager); +} + +MODULE_END; + +ConsoleDocClass( VolumetricFogRTManager, +"@brief Creates and maintains one set of rendertargets to be used by every\n" +"VolumetricFog object in the scene.\n\n" +"Will be loaded at startup end removed when ending game.\n\n" +"Methods:\n" +" get() returns the currently loaded VolumetricFogRTManager, also accessible\n" +" through VFRTM define.\n" +" Init() Initializes the rendertargets, called when a VolumetricFog object is\n" +" added to the scene.\n" +" isInitialed() returns true if Rendertargets are present, false if not, then\n" +" Init() should be called to create the rendertargets.\n" +" setQuality(U32 Quality) Normally a rendertarget has the same size as the view,\n" +" with this method you can scale down the size of it.\n" +" Be aware that scaling down will introduce renderartefacts.\n" +"@ingroup Atmosphere" +); + +VolumetricFogRTMResizeSignal VolumetricFogRTManager::smVolumetricFogRTMResizeSignal; + +VolumetricFogRTManager *gVolumetricFogRTManager = NULL; + +S32 VolumetricFogRTManager::mTargetScale = 1; + +IMPLEMENT_CONOBJECT(VolumetricFogRTManager); + +VolumetricFogRTManager::VolumetricFogRTManager() +{ + setGlobalBounds(); + mTypeMask |= EnvironmentObjectType; + mNetFlags.set(IsGhost); + mIsInitialized = false; + mNumFogObjects = 0; +} + +VolumetricFogRTManager::~VolumetricFogRTManager() +{ + if (mFrontTarget.isRegistered()) + mFrontTarget.unregister(); + + if (mDepthTarget.isRegistered()) + mDepthTarget.unregister(); + + if (mDepthBuffer.isValid()) + mDepthBuffer->kill(); + + if (mFrontBuffer.isValid()) + mFrontBuffer->kill(); +} + +void VolumetricFogRTManager::onSceneRemove() +{ + if (mIsInitialized) + mPlatformWindow->getScreenResChangeSignal().remove(this, &VolumetricFogRTManager::ResizeRT); +} + +void VolumetricFogRTManager::onRemove() +{ + removeFromScene(); + Parent::onRemove(); +} + +void VolumetricFogRTManager::consoleInit() +{ + Con::addVariable("$pref::VolumetricFog::Quality", TypeS32, &mTargetScale, + "The scale of the rendertargets.\n" + "@ingroup Rendering\n"); +} + +bool VolumetricFogRTManager::Init() +{ + if (mIsInitialized) + { + Con::errorf("VolumetricFogRTManager allready initialized!!"); + return true; + } + + GuiCanvas* cv = dynamic_cast(Sim::findObject("Canvas")); + if (cv == NULL) + { + Con::errorf("VolumetricFogRTManager::Init() - Canvas not found!!"); + return false; + } + + mPlatformWindow = cv->getPlatformWindow(); + mPlatformWindow->getScreenResChangeSignal().notify(this,&VolumetricFogRTManager::ResizeRT); + + if (mTargetScale < 1) + mTargetScale = 1; + + mWidth = mFloor(mPlatformWindow->getClientExtent().x / mTargetScale); + mHeight = mPlatformWindow->getClientExtent().y; + mFullScreen = mPlatformWindow->isFullscreen(); + if (!mFullScreen) + mHeight -= 20;//subtract caption bar from rendertarget size. + mHeight = mFloor(mHeight / mTargetScale); + + mDepthBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mDepthBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mDepthBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager Fatal Error: Unable to create Depthbuffer"); + return false; + } + if (!mDepthTarget.registerWithName("volfogdepth")) + { + Con::errorf("VolumetricFogRTManager Fatal Error : Unable to register Depthbuffer"); + return false; + } + mDepthTarget.setTexture(mDepthBuffer); + + mFrontBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mFrontBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mFrontBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager Fatal Error: Unable to create front buffer"); + return false; + } + if (!mFrontTarget.registerWithName("volfogfront")) + { + Con::errorf("VolumetricFogRTManager Fatal Error : Unable to register Frontbuffer"); + return false; + } + + mFrontTarget.setTexture(mFrontBuffer); + + Con::setVariable("$VolumetricFog::density", "0.0"); + + mIsInitialized = true; + + return true; +} + +U32 VolumetricFogRTManager::IncFogObjects() +{ + mNumFogObjects++; + return mNumFogObjects; +} + +U32 VolumetricFogRTManager::DecFogObjects() +{ + if (mNumFogObjects > 0) + mNumFogObjects--; + return mNumFogObjects; +} + +void VolumetricFogRTManager::ResizeRT(PlatformWindow* win,bool resize) +{ + mFogHasAnswered = 0; + smVolumetricFogRTMResizeSignal.trigger(this, true); +} + +void VolumetricFogRTManager::FogAnswered() +{ + mFogHasAnswered++; + if (mFogHasAnswered == mNumFogObjects) + { + if (Resize()) + smVolumetricFogRTMResizeSignal.trigger(this, false); + else + Con::errorf("VolumetricFogRTManager::FogAnswered - Error resizing rendertargets!"); + } +} + +bool VolumetricFogRTManager::Resize() +{ + if (mTargetScale < 1) + mTargetScale = 1; + mWidth = mFloor(mPlatformWindow->getClientExtent().x / mTargetScale); + mHeight = mPlatformWindow->getClientExtent().y; + + if (!mPlatformWindow->isFullscreen()) + mHeight -= 20;//subtract caption bar from rendertarget size. + mHeight = mFloor(mHeight / mTargetScale); + + if (mWidth < 16 || mHeight < 16) + return false; + + if (mFrontTarget.isRegistered()) + mFrontTarget.setTexture(NULL); + + if (mDepthTarget.isRegistered()) + mDepthTarget.setTexture(NULL); + + if (mDepthBuffer.isValid()) + mDepthBuffer->kill(); + + if (mFrontBuffer.isValid()) + mFrontBuffer->kill(); + + mFrontBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mFrontBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mFrontBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager::Resize() Fatal Error: Unable to create front buffer"); + return false; + } + mFrontTarget.setTexture(mFrontBuffer); + + mDepthBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, + &GFXDefaultRenderTargetProfile, avar("%s() - mDepthBuffer (line %d)", __FUNCTION__, __LINE__)); + if (!mDepthBuffer.isValid()) + { + Con::errorf("VolumetricFogRTManager::Resize() Fatal Error: Unable to create Depthbuffer"); + return false; + } + mDepthTarget.setTexture(mDepthBuffer); + return true; +} + +S32 VolumetricFogRTManager::setQuality(U32 Quality) +{ + if (!mIsInitialized) + return (mTargetScale = Quality); + + if (Quality < 1) + Quality = 1; + + if (Quality == mTargetScale) + return mTargetScale; + + mTargetScale = Quality; + + mFogHasAnswered = 0; + smVolumetricFogRTMResizeSignal.trigger(this, true); + + return mTargetScale; +} + +VolumetricFogRTManager* VolumetricFogRTManager::get() +{ + return gVolumetricFogRTManager; +} + +DefineConsoleFunction(SetFogVolumeQuality, S32, (U32 new_quality), , +"@brief Resizes the rendertargets of the Volumetric Fog object.\n" +"@params new_quality new quality for the rendertargets 1 = full size, 2 = halfsize, 3 = 1/3, 4 = 1/4 ...") +{ + if (VFRTM == NULL) + return -1; + return VFRTM->setQuality(new_quality); +} \ No newline at end of file diff --git a/Engine/source/environment/VolumetricFogRTManager.h b/Engine/source/environment/VolumetricFogRTManager.h new file mode 100644 index 0000000000..d69bed6bd9 --- /dev/null +++ b/Engine/source/environment/VolumetricFogRTManager.h @@ -0,0 +1,92 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _VolumetricFogRTManager_H_ +#define _VolumetricFogRTManager_H_ + +#ifndef _SCENEOBJECT_H_ +#include "scene/sceneObject.h" +#endif +#ifndef _MATTEXTURETARGET_H_ +#include "materials/matTextureTarget.h" +#endif +#ifndef _GFXTARGET_H_ +#include "gfx/gfxTarget.h" +#endif +#ifndef _SIGNAL_H_ +#include "core/util/tSignal.h" +#endif + +class VolumetricFogRTManager; + +typedef Signal VolumetricFogRTMResizeSignal; + +#define VFRTM VolumetricFogRTManager::get() + +class VolumetricFogRTManager : public SceneObject +{ + public: + typedef SceneObject Parent; + + protected: + GFXTexHandle mDepthBuffer; + GFXTexHandle mFrontBuffer; + + NamedTexTarget mDepthTarget; + NamedTexTarget mFrontTarget; + + PlatformWindow* mPlatformWindow; + + static S32 mTargetScale; + bool mIsInitialized; + U32 mNumFogObjects; + U32 mFogHasAnswered; + U32 mWidth; + U32 mHeight; + bool mFullScreen; + + void onRemove(); + void onSceneRemove(); + void ResizeRT(PlatformWindow *win, bool resize); + + static VolumetricFogRTMResizeSignal smVolumetricFogRTMResizeSignal; + + public: + VolumetricFogRTManager(); + ~VolumetricFogRTManager(); + static VolumetricFogRTManager *get(); + bool Init(); + bool IsInitialized() { return mIsInitialized; } + static void consoleInit(); + static VolumetricFogRTMResizeSignal& getVolumetricFogRTMResizeSignal() { return smVolumetricFogRTMResizeSignal; } + void FogAnswered(); + S32 setQuality(U32 Quality); + bool Resize(); + U32 IncFogObjects(); + U32 DecFogObjects(); + + DECLARE_CONOBJECT(VolumetricFogRTManager); +}; + +extern VolumetricFogRTManager* gVolumetricFogRTManager; + +#endif \ No newline at end of file From d6226a71caab12be53a0854d8816b0742d243c4d Mon Sep 17 00:00:00 2001 From: Robert MacGregor Date: Wed, 2 Dec 2015 01:47:29 -0500 Subject: [PATCH 086/324] Fix NULL pointer deref crashes in WorldEditor::selectObject & WorldEditor::unSelectObject --- Engine/source/gui/worldEditor/worldEditor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/gui/worldEditor/worldEditor.cpp b/Engine/source/gui/worldEditor/worldEditor.cpp index 0273ffeb4b..6065b233ee 100644 --- a/Engine/source/gui/worldEditor/worldEditor.cpp +++ b/Engine/source/gui/worldEditor/worldEditor.cpp @@ -2810,7 +2810,7 @@ void WorldEditor::clearSelection() void WorldEditor::selectObject( SimObject *obj ) { - if ( mSelectionLocked || !mSelected ) + if ( mSelectionLocked || !mSelected || !obj ) return; // Don't check isSelectionEnabled of SceneObjects here as we @@ -2833,7 +2833,7 @@ void WorldEditor::selectObject( const char* obj ) void WorldEditor::unselectObject( SimObject *obj ) { - if ( mSelectionLocked || !mSelected ) + if ( mSelectionLocked || !mSelected || !obj ) return; if ( !objClassIgnored( obj ) && mSelected->objInSet( obj ) ) From f06db00255c85f4ea7f2d230570bc58c3f1c1a35 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 3 Dec 2015 18:34:53 -0600 Subject: [PATCH 087/324] dynamic_cast check for regeneration for paranoias sake + an alias method. --- Engine/source/navigation/navMesh.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index 738348d2f0..74d71dc77b 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -112,7 +112,7 @@ DefineConsoleFunction(NavMeshUpdateAll, void, (S32 objid, bool remove), (0, fals SimSet *set = NavMesh::getServerSet(); for(U32 i = 0; i < set->size(); i++) { - NavMesh *m = static_cast(set->at(i)); + NavMesh *m = dynamic_cast(set->at(i)); if (m) { m->cancelBuild(); @@ -123,6 +123,28 @@ DefineConsoleFunction(NavMeshUpdateAll, void, (S32 objid, bool remove), (0, fals obj->enableCollision(); } +DefineConsoleFunction(NavMeshUpdateAroundObject, void, (S32 objid, bool remove), (0, false), + "@brief Update all NavMesh tiles that intersect the given object's world box.") +{ + SceneObject *obj; + if (!Sim::findObject(objid, obj)) + return; + if (remove) + obj->disableCollision(); + SimSet *set = NavMesh::getServerSet(); + for (U32 i = 0; i < set->size(); i++) + { + NavMesh *m = dynamic_cast(set->at(i)); + if (m) + { + m->cancelBuild(); + m->buildTiles(obj->getWorldBox()); + } + } + if (remove) + obj->enableCollision(); +} + DefineConsoleFunction(NavMeshUpdateOne, void, (S32 meshid, S32 objid, bool remove), (0, 0, false), "@brief Update all tiles in a given NavMesh that intersect the given object's world box.") { From ee83c8b66c4cf66a62b4102635578d3967664aae Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 4 Dec 2015 11:24:20 -0600 Subject: [PATCH 088/324] Extacted AI tweaks: attackradius - seperate value/callbacks to allow AI to be coded to move and shoot. slowdown triggered by 2x movetolerance rather than a fixed 5 untis. void AIPlayer::updateMove(const Move* move) - 'lag' correction. getTargetDistance - c side distance calculation with enabled option. --- Engine/source/T3D/aiPlayer.cpp | 91 ++++++++++++++++++++++++++-------- Engine/source/T3D/aiPlayer.h | 15 +++--- 2 files changed, 79 insertions(+), 27 deletions(-) diff --git a/Engine/source/T3D/aiPlayer.cpp b/Engine/source/T3D/aiPlayer.cpp index 8992c2c558..bf00484e49 100644 --- a/Engine/source/T3D/aiPlayer.cpp +++ b/Engine/source/T3D/aiPlayer.cpp @@ -145,6 +145,9 @@ void AIPlayer::initPersistFields() "to accelerate to full speed without its initial slow start being considered as stuck.\n" "@note Set to zero to have the stuck test start immediately.\n"); + addField( "AttackRadius", TypeF32, Offset( mAttackRadius, AIPlayer ), + "@brief Distance considered in firing range for callback purposes."); + endGroup( "AI" ); #ifdef TORQUE_NAVIGATION_ENABLED @@ -372,6 +375,11 @@ bool AIPlayer::getAIMove(Move *movePtr) { clearPath(); mMoveState = ModeStop; + throwCallback("onTargetInRange"); + } + else if((getPosition() - mFollowData.object->getPosition()).len() < mAttackRadius) + { + throwCallback("onTargetInFiringRange"); } } } @@ -499,7 +507,7 @@ bool AIPlayer::getAIMove(Move *movePtr) { F32 speed = mMoveSpeed; F32 dist = mSqrt(xDiff*xDiff + yDiff*yDiff); - F32 maxDist = 5.0f; + F32 maxDist = mMoveTolerance*2; if (dist < maxDist) speed *= dist / maxDist; movePtr->x *= speed; @@ -539,29 +547,22 @@ bool AIPlayer::getAIMove(Move *movePtr) // Test for target location in sight if it's an object. The LOS is // run from the eye position to the center of the object's bounding, // which is not very accurate. - if (mAimObject) { - MatrixF eyeMat; - getEyeTransform(&eyeMat); - eyeMat.getColumn(3,&location); - Point3F targetLoc = mAimObject->getBoxCenter(); - - // This ray ignores non-static shapes. Cast Ray returns true - // if it hit something. - RayInfo dummy; - if (getContainer()->castRay( location, targetLoc, - StaticShapeObjectType | StaticObjectType | - TerrainObjectType, &dummy)) { - if (mTargetInLOS) { - throwCallback( "onTargetExitLOS" ); - mTargetInLOS = false; - } - } - else - if (!mTargetInLOS) { + if (mAimObject) + { + if (checkInLos(mAimObject.getPointer())) + { + if (!mTargetInLOS) + { throwCallback( "onTargetEnterLOS" ); mTargetInLOS = true; } } + else if (mTargetInLOS) + { + throwCallback( "onTargetExitLOS" ); + mTargetInLOS = false; + } + } // Replicate the trigger state into the move so that // triggers can be controlled from scripts. @@ -591,6 +592,14 @@ bool AIPlayer::getAIMove(Move *movePtr) return true; } +void AIPlayer::updateMove(const Move* move) +{ + if (!getControllingClient() && isGhost()) + return; + + Parent::updateMove(move); +} + /** * Utility function to throw callbacks. Callbacks always occure * on the datablock class. @@ -720,6 +729,7 @@ bool AIPlayer::setPathDestination(const Point3F &pos) if(!getNavMesh()) { //setMoveDestination(pos); + throwCallback("onPathFailed"); return false; } @@ -751,6 +761,7 @@ bool AIPlayer::setPathDestination(const Point3F &pos) mPathData.owned = true; // Skip node 0, which we are currently standing on. moveToNode(1); + throwCallback("onPathSuccess"); return true; } else @@ -758,7 +769,7 @@ bool AIPlayer::setPathDestination(const Point3F &pos) // Just move normally if we can't path. //setMoveDestination(pos, true); //return; - //throwCallback("onPathFailed"); + throwCallback("onPathFailed"); path->deleteObject(); return false; } @@ -846,6 +857,10 @@ DefineEngineMethod(AIPlayer, followObject, void, (SimObjectId obj, F32 radius),, "@param radius Maximum distance we let the target escape to.") { SceneObject *follow; + object->clearPath(); + object->clearCover(); + object->clearFollow(); + if(Sim::findObject(obj, follow)) object->followObject(follow, radius); } @@ -1348,3 +1363,37 @@ DefineEngineMethod( AIPlayer, clearMoveTriggers, void, ( ),, { object->clearMoveTriggers(); } + +F32 AIPlayer::getTargetDistance(GameBase* target, bool _checkEnabled) +{ + if (!isServerObject()) return false; + if (!target) + { + target = mAimObject.getPointer(); + if (!target) + return F32_MAX; + } + + if (_checkEnabled) + { + if (target->getTypeMask() & ShapeBaseObjectType) + { + ShapeBase *shapeBaseCheck = static_cast(target); + if (shapeBaseCheck) + if (shapeBaseCheck->getDamageState() != Enabled) return false; + } + else + return F32_MAX; + } + + return (getPosition() - target->getPosition()).len(); +} + +DefineEngineMethod(AIPlayer, getTargetDistance, bool, (ShapeBase* obj, bool checkEnabled), (NULL, false), + "@brief Check whether an object is within a specified veiw cone.\n" + "@obj Object to check. (If blank, it will check the current target).\n" + "@fov view angle in degrees.(Defaults to 45)\n" + "@checkEnabled check whether the object can take damage and if so is still alive.(Defaults to false)\n") +{ + return object->getTargetDistance(obj, checkEnabled); +} diff --git a/Engine/source/T3D/aiPlayer.h b/Engine/source/T3D/aiPlayer.h index d693314eb2..08707c0b8f 100644 --- a/Engine/source/T3D/aiPlayer.h +++ b/Engine/source/T3D/aiPlayer.h @@ -49,6 +49,7 @@ class AIPlayer : public Player { MoveState mMoveState; F32 mMoveSpeed; F32 mMoveTolerance; // Distance from destination before we stop + F32 mAttackRadius; // Distance to trigger weaponry calcs Point3F mMoveDestination; // Destination for movement Point3F mLastLocation; // For stuck check F32 mMoveStuckTolerance; // Distance tolerance on stuck check @@ -96,8 +97,6 @@ class AIPlayer : public Player { /// Path we are currently following. PathData mPathData; - /// Clear out the current path. - void clearPath(); /// Get the current path we're following. NavPath *getPath() { return mPathData.path; } @@ -113,8 +112,6 @@ class AIPlayer : public Player { /// Current cover we're trying to get to. CoverData mCoverData; - /// Stop searching for cover. - void clearCover(); /// Information about a target we're following. struct FollowData { @@ -134,8 +131,6 @@ class AIPlayer : public Player { /// Current object we're following. FollowData mFollowData; - /// Stop following me! - void clearFollow(); /// NavMesh we pathfind on. SimObjectPtr mNavMesh; @@ -160,6 +155,13 @@ class AIPlayer : public Player { void onRemove(); virtual bool getAIMove( Move *move ); + virtual void updateMove(const Move *move); + /// Clear out the current path. + void clearPath(); + /// Stop searching for cover. + void clearCover(); + /// Stop following me! + void clearFollow(); // Targeting and aiming sets/gets void setAimObject( GameBase *targetObject ); @@ -170,6 +172,7 @@ class AIPlayer : public Player { void clearAim(); bool checkInLos(GameBase* target = NULL, bool _useMuzzle = false, bool _checkEnabled = false); bool checkInFoV(GameBase* target = NULL, F32 camFov = 45.0f, bool _checkEnabled = false); + F32 getTargetDistance(GameBase* target, bool _checkEnabled); // Movement sets/gets void setMoveSpeed( const F32 speed ); From ac7d6e66912425b259685aad7584110e4aaea516 Mon Sep 17 00:00:00 2001 From: Marc Chapman Date: Sun, 13 Dec 2015 03:33:39 +0000 Subject: [PATCH 089/324] Updated paths for collada tdictionary.h --- Engine/source/ts/collada/colladaAppMesh.h | 2 +- Engine/source/ts/collada/colladaAppNode.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/ts/collada/colladaAppMesh.h b/Engine/source/ts/collada/colladaAppMesh.h index 17ac1cad15..72c16e56d7 100644 --- a/Engine/source/ts/collada/colladaAppMesh.h +++ b/Engine/source/ts/collada/colladaAppMesh.h @@ -24,7 +24,7 @@ #define _COLLADA_APPMESH_H_ #ifndef _TDICTIONARY_H_ -#include "core/tDictionary.h" +#include "core/util/tDictionary.h" #endif #ifndef _APPMESH_H_ #include "ts/loader/appMesh.h" diff --git a/Engine/source/ts/collada/colladaAppNode.h b/Engine/source/ts/collada/colladaAppNode.h index 472ec505c7..f633e7be65 100644 --- a/Engine/source/ts/collada/colladaAppNode.h +++ b/Engine/source/ts/collada/colladaAppNode.h @@ -24,7 +24,7 @@ #define _COLLADA_APPNODE_H_ #ifndef _TDICTIONARY_H_ -#include "core/tDictionary.h" +#include "core/util/tDictionary.h" #endif #ifndef _APPNODE_H_ #include "ts/loader/appNode.h" From e3b228db8bf7c34f205724a55505f9294b2c41bf Mon Sep 17 00:00:00 2001 From: rextimmy Date: Mon, 28 Dec 2015 09:17:14 +1000 Subject: [PATCH 090/324] Fix for OpenGL/D3D11 bottom border offset --- Engine/source/gfx/gfxDrawUtil.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Engine/source/gfx/gfxDrawUtil.cpp b/Engine/source/gfx/gfxDrawUtil.cpp index 1e677685e2..34b1c88722 100644 --- a/Engine/source/gfx/gfxDrawUtil.cpp +++ b/Engine/source/gfx/gfxDrawUtil.cpp @@ -526,10 +526,10 @@ void GFXDrawUtil::drawRectFill( const Point2F &upperLeft, const Point2F &lowerRi F32 ulOffset = 0.5f - mDevice->getFillConventionOffset(); - verts[0].point.set( upperLeft.x+nw.x+ulOffset, upperLeft.y+nw.y+ulOffset, 0.0f ); - verts[1].point.set( lowerRight.x+ne.x, upperLeft.y+ne.y+ulOffset, 0.0f ); - verts[2].point.set( upperLeft.x-ne.x+ulOffset, lowerRight.y-ne.y, 0.0f ); - verts[3].point.set( lowerRight.x-nw.x, lowerRight.y-nw.y, 0.0f ); + verts[0].point.set( upperLeft.x + nw.x + ulOffset, upperLeft.y + nw.y + ulOffset, 0.0f); + verts[1].point.set( lowerRight.x + ne.x + ulOffset, upperLeft.y + ne.y + ulOffset, 0.0f); + verts[2].point.set( upperLeft.x - ne.x + ulOffset, lowerRight.y - ne.y + ulOffset, 0.0f); + verts[3].point.set( lowerRight.x - nw.x + ulOffset, lowerRight.y - nw.y + ulOffset, 0.0f); for (S32 i=0; i<4; i++) verts[i].color = color; From c2da755dc26b5d4e904785cdb72d9f4ca7a05c98 Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 8 Jan 2016 00:19:11 -0600 Subject: [PATCH 091/324] Fix for the directory scan for modules so it doesn't trim off characters in the path. Resubmitted to clear the excess history entries. --- Engine/source/platformWin32/winFileio.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Engine/source/platformWin32/winFileio.cpp b/Engine/source/platformWin32/winFileio.cpp index d5fdde104a..85f8676a36 100644 --- a/Engine/source/platformWin32/winFileio.cpp +++ b/Engine/source/platformWin32/winFileio.cpp @@ -1321,6 +1321,7 @@ static bool recurseDumpDirectories(const char *basePath, const char *subPath, Ve dsize_t subtrLen = subPath ? dStrlen(subPath) : 0; char trail = trLen > 0 ? basePath[ trLen - 1 ] : '\0'; char subTrail = subtrLen > 0 ? subPath[ subtrLen - 1 ] : '\0'; + char subLead = subtrLen > 0 ? subPath[0] : '\0'; if( trail == '/' ) { @@ -1380,13 +1381,23 @@ static bool recurseDumpDirectories(const char *basePath, const char *subPath, Ve { if( ( subPath && ( dStrncmp( subPath, "", 1 ) != 0 ) ) ) { - char szPath [ 1024 ]; - dMemset( szPath, 0, 1024 ); - if( trail != '/' ) - dSprintf( szPath, 1024, "%s%s", basePath, subPath ); + char szPath[1024]; + dMemset(szPath, 0, 1024); + if (trail == '/') + { + if (subLead == '/') + dSprintf(szPath, 1024, "%s%s", basePath, &subPath[1]); + else + dSprintf(szPath, 1024, "%s%s", basePath, subPath); + } else - dSprintf( szPath, 1024, "%s%s", basePath, &subPath[1] ); - directoryVector.push_back( StringTable->insert( szPath ) ); + { + if (subLead == '/') + dSprintf(szPath, 1024, "%s%s", basePath, subPath); + else + dSprintf(szPath, 1024, "%s/%s", basePath, subPath); + } + directoryVector.push_back(StringTable->insert(szPath)); } else directoryVector.push_back( StringTable->insert( basePath ) ); From 4c17d4bb499ad78de05c49d0c609669e21a193de Mon Sep 17 00:00:00 2001 From: Cameron Porter Date: Sat, 9 Jan 2016 00:37:41 -0600 Subject: [PATCH 092/324] Fix case sensitivity and Platform::fileDelete for linux and OSX. Correct a couple of warnings and errors preventing builds on linux. --- Engine/source/T3D/assets/ShapeAsset.h | 2 +- Engine/source/core/stream/stream.cpp | 2 +- Engine/source/gfx/gfxDevice.cpp | 2 +- Engine/source/math/mathUtils.cpp | 2 +- Engine/source/persistence/taml/fsTinyXml.cpp | 6 +++--- Engine/source/persistence/taml/fsTinyXml.h | 4 ++-- Engine/source/persistence/taml/xml/tamlXmlParser.h | 4 ++-- Engine/source/persistence/taml/xml/tamlXmlReader.cpp | 2 +- Engine/source/persistence/taml/xml/tamlXmlWriter.cpp | 2 +- Engine/source/platformMac/macCarbFileio.mm | 5 +++++ Engine/source/platformX86UNIX/x86UNIXFileio.cpp | 7 ++++++- 11 files changed, 24 insertions(+), 14 deletions(-) diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h index 81b716d084..7c87cf8dec 100644 --- a/Engine/source/T3D/assets/ShapeAsset.h +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -39,7 +39,7 @@ #endif #ifndef _TSSHAPE_H_ -#include "ts/TSShape.h" +#include "ts/tsShape.h" #endif #ifndef __RESOURCE_H__ #include "core/resource.h" diff --git a/Engine/source/core/stream/stream.cpp b/Engine/source/core/stream/stream.cpp index da1b1dc82f..8a7fb2b40a 100644 --- a/Engine/source/core/stream/stream.cpp +++ b/Engine/source/core/stream/stream.cpp @@ -128,7 +128,7 @@ bool Stream::writeFormattedBuffer(const char *format, ...) char buffer[4096]; va_list args; va_start(args, format); - const S32 length = vsprintf(buffer, format, args); + const S32 length = dVsprintf(buffer, sizeof(buffer), format, args); // Sanity! AssertFatal(length <= sizeof(buffer), "writeFormattedBuffer - String format exceeded buffer size. This will cause corruption."); diff --git a/Engine/source/gfx/gfxDevice.cpp b/Engine/source/gfx/gfxDevice.cpp index c72c109d0e..3f63fb884a 100644 --- a/Engine/source/gfx/gfxDevice.cpp +++ b/Engine/source/gfx/gfxDevice.cpp @@ -148,7 +148,7 @@ GFXDevice::GFXDevice() mGlobalAmbientColor = ColorF(0.0f, 0.0f, 0.0f, 1.0f); mLightMaterialDirty = false; - dMemset(&mCurrentLightMaterial, NULL, sizeof(GFXLightMaterial)); + dMemset(&mCurrentLightMaterial, 0, sizeof(GFXLightMaterial)); // State block mStateBlockDirty = false; diff --git a/Engine/source/math/mathUtils.cpp b/Engine/source/math/mathUtils.cpp index f6086c5e4f..5ffd9a8707 100644 --- a/Engine/source/math/mathUtils.cpp +++ b/Engine/source/math/mathUtils.cpp @@ -1847,7 +1847,7 @@ U32 extrudePolygonEdgesFromPoint( const Point3F* vertices, U32 numVertices, cons //----------------------------------------------------------------------------- -void MathUtils::mBuildHull2D(const Vector _inPoints, Vector &hullPoints) +void mBuildHull2D(const Vector _inPoints, Vector &hullPoints) { /// Andrew's monotone chain convex hull algorithm implementation diff --git a/Engine/source/persistence/taml/fsTinyXml.cpp b/Engine/source/persistence/taml/fsTinyXml.cpp index 1fb97398b5..4411697425 100644 --- a/Engine/source/persistence/taml/fsTinyXml.cpp +++ b/Engine/source/persistence/taml/fsTinyXml.cpp @@ -38,7 +38,7 @@ bool fsTiXmlDocument::LoadFile( const char * pFilename, TiXmlEncoding encoding ) #endif // File open for read? - if ( !stream.open( filenameBuffer, Torque::FS::File::AccessMode::Read ) ) + if ( !stream.open( filenameBuffer, Torque::FS::File::Read ) ) { // No, so warn. Con::warnf("TamlXmlParser::parse() - Could not open filename '%s' for parse.", filenameBuffer ); @@ -67,7 +67,7 @@ bool fsTiXmlDocument::SaveFile( const char * pFilename ) const FileStream stream; // File opened? - if ( !stream.open( filenameBuffer, Torque::FS::File::AccessMode::Write ) ) + if ( !stream.open( filenameBuffer, Torque::FS::File::Write ) ) { // No, so warn. Con::warnf("Taml::writeFile() - Could not open filename '%s' for write.", filenameBuffer ); @@ -744,4 +744,4 @@ return 0; // All is well. return p; } -*/ \ No newline at end of file +*/ diff --git a/Engine/source/persistence/taml/fsTinyXml.h b/Engine/source/persistence/taml/fsTinyXml.h index f2fb14129f..864abec099 100644 --- a/Engine/source/persistence/taml/fsTinyXml.h +++ b/Engine/source/persistence/taml/fsTinyXml.h @@ -25,7 +25,7 @@ #ifndef TINYXML_INCLUDED -#include "tinyXML/tinyxml.h" +#include "tinyxml/tinyxml.h" #endif #include "platform/platform.h" @@ -245,4 +245,4 @@ static bool AttemptPrintTiNode(class fsTiXmlDocument* node, FileStream& stream, } return false; } -#endif //_FSTINYXML_H_ \ No newline at end of file +#endif //_FSTINYXML_H_ diff --git a/Engine/source/persistence/taml/xml/tamlXmlParser.h b/Engine/source/persistence/taml/xml/tamlXmlParser.h index 85b34079de..28b51a472d 100644 --- a/Engine/source/persistence/taml/xml/tamlXmlParser.h +++ b/Engine/source/persistence/taml/xml/tamlXmlParser.h @@ -28,7 +28,7 @@ #endif #ifndef TINYXML_INCLUDED -#include "tinyXML/tinyxml.h" +#include "tinyxml/tinyxml.h" #endif //----------------------------------------------------------------------------- @@ -54,4 +54,4 @@ class TamlXmlParser : public TamlParser bool mDocumentDirty; }; -#endif // _TAML_XMLPARSER_H_ \ No newline at end of file +#endif // _TAML_XMLPARSER_H_ diff --git a/Engine/source/persistence/taml/xml/tamlXmlReader.cpp b/Engine/source/persistence/taml/xml/tamlXmlReader.cpp index 04b43a5d24..aa8be618fb 100644 --- a/Engine/source/persistence/taml/xml/tamlXmlReader.cpp +++ b/Engine/source/persistence/taml/xml/tamlXmlReader.cpp @@ -24,7 +24,7 @@ // Debug Profiling. #include "platform/profiler.h" -#include "persistence/taml/fsTinyxml.h" +#include "persistence/taml/fsTinyXml.h" //----------------------------------------------------------------------------- diff --git a/Engine/source/persistence/taml/xml/tamlXmlWriter.cpp b/Engine/source/persistence/taml/xml/tamlXmlWriter.cpp index 4ffad7223c..e8481cb876 100644 --- a/Engine/source/persistence/taml/xml/tamlXmlWriter.cpp +++ b/Engine/source/persistence/taml/xml/tamlXmlWriter.cpp @@ -24,7 +24,7 @@ // Debug Profiling. #include "platform/profiler.h" -#include "persistence/taml/fsTinyxml.h" +#include "persistence/taml/fsTinyXml.h" //----------------------------------------------------------------------------- diff --git a/Engine/source/platformMac/macCarbFileio.mm b/Engine/source/platformMac/macCarbFileio.mm index 7a913986e5..a1961d7100 100644 --- a/Engine/source/platformMac/macCarbFileio.mm +++ b/Engine/source/platformMac/macCarbFileio.mm @@ -724,6 +724,11 @@ inline bool isGoodDirectory(dirent* entry) return false; // either this dir had no subdirectories, or they were all on the exclude list. } + bool Platform::fileDelete(const char * name) + { + return dFileDelete(name); + } + //----------------------------------------------------------------------------- bool recurseDumpDirectories(const char *basePath, const char *path, Vector &directoryVector, S32 depth, bool noBasePath) { diff --git a/Engine/source/platformX86UNIX/x86UNIXFileio.cpp b/Engine/source/platformX86UNIX/x86UNIXFileio.cpp index 22c40a1875..6c2dd69559 100644 --- a/Engine/source/platformX86UNIX/x86UNIXFileio.cpp +++ b/Engine/source/platformX86UNIX/x86UNIXFileio.cpp @@ -325,7 +325,7 @@ bool dPathCopy(const char *fromName, const char *toName, bool nooverwrite) if (modType == TOUCH) return(utime(prefPathName, 0) != -1); else if (modType == DELETE) - return (remove(prefPathName) != -1); + return (remove(prefPathName) == 0); else AssertFatal(false, "Unknown File Mod type"); return false; @@ -1140,6 +1140,11 @@ bool dPathCopy(const char *fromName, const char *toName, bool nooverwrite) return false; } + bool Platform::fileDelete(const char * name) + { + return ModifyFile(name, DELETE); + } + static bool recurseDumpDirectories(const char *basePath, const char *subPath, Vector &directoryVector, S32 currentDepth, S32 recurseDepth, bool noBasePath) { char Path[1024]; From 62506214d0d29ebda1de1446dd8ea23da1d763b3 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 11 Jan 2016 22:23:13 -0600 Subject: [PATCH 093/324] footstep and impact enum extension support Removes hardcoded case statements in favor of an offset-driven approach. --- Engine/source/T3D/player.cpp | 51 ++++-------------------------------- Engine/source/T3D/player.h | 3 ++- 2 files changed, 7 insertions(+), 47 deletions(-) diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 3c258c3743..32da4703db 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -6878,26 +6878,8 @@ void Player::playFootstepSound( bool triggeredLeft, Material* contactMaterial, S else if( contactObject && contactObject->getTypeMask() & VehicleObjectType ) sound = 2; - switch ( sound ) - { - case 0: // Soft - SFX->playOnce( mDataBlock->sound[PlayerData::FootSoft], &footMat ); - break; - case 1: // Hard - SFX->playOnce( mDataBlock->sound[PlayerData::FootHard], &footMat ); - break; - case 2: // Metal - SFX->playOnce( mDataBlock->sound[PlayerData::FootMetal], &footMat ); - break; - case 3: // Snow - SFX->playOnce( mDataBlock->sound[PlayerData::FootSnow], &footMat ); - break; - /* - default: //Hard - SFX->playOnce( mDataBlock->sound[PlayerData::FootHard], &footMat ); - break; - */ - } + if (sound>=0) + SFX->playOnce(mDataBlock->sound[sound], &footMat); } } @@ -6922,36 +6904,13 @@ void Player:: playImpactSound() else { S32 sound = -1; - if( material && material->mImpactSoundId ) + if( material && (material->mImpactSoundId>=0) ) sound = material->mImpactSoundId; else if( rInfo.object->getTypeMask() & VehicleObjectType ) sound = 2; // Play metal; - switch( sound ) - { - case 0: - //Soft - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactSoft ], &getTransform() ); - break; - case 1: - //Hard - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactHard ], &getTransform() ); - break; - case 2: - //Metal - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactMetal ], &getTransform() ); - break; - case 3: - //Snow - SFX->playOnce( mDataBlock->sound[ PlayerData::ImpactSnow ], &getTransform() ); - break; - /* - default: - //Hard - alxPlay(mDataBlock->sound[PlayerData::ImpactHard], &getTransform()); - break; - */ - } + if (sound >= 0) + SFX->playOnce(mDataBlock->sound[PlayerData::ImpactStart + sound], &getTransform()); } } } diff --git a/Engine/source/T3D/player.h b/Engine/source/T3D/player.h index eb1a394435..b2947c4dc3 100644 --- a/Engine/source/T3D/player.h +++ b/Engine/source/T3D/player.h @@ -196,7 +196,8 @@ struct PlayerData: public ShapeBaseData { FootBubbles, MoveBubbles, WaterBreath, - ImpactSoft, + ImpactStart, + ImpactSoft = ImpactStart, ImpactHard, ImpactMetal, ImpactSnow, From c60be9a17eb31172a89fb604a36659d93b3c69f5 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 13 Jan 2016 15:08:21 -0600 Subject: [PATCH 094/324] suggested revisions --- Engine/source/T3D/player.cpp | 4 ++-- Engine/source/T3D/player.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 32da4703db..21ba1af7ab 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -6873,7 +6873,7 @@ void Player::playFootstepSound( bool triggeredLeft, Material* contactMaterial, S // Play default sound. S32 sound = -1; - if( contactMaterial && contactMaterial->mFootstepSoundId != -1 ) + if (contactMaterial && (contactMaterial->mImpactSoundId>-1 && contactMaterial->mImpactSoundIdmFootstepSoundId; else if( contactObject && contactObject->getTypeMask() & VehicleObjectType ) sound = 2; @@ -6904,7 +6904,7 @@ void Player:: playImpactSound() else { S32 sound = -1; - if( material && (material->mImpactSoundId>=0) ) + if (material && (material->mImpactSoundId>-1 && material->mImpactSoundIdmImpactSoundId; else if( rInfo.object->getTypeMask() & VehicleObjectType ) sound = 2; // Play metal; diff --git a/Engine/source/T3D/player.h b/Engine/source/T3D/player.h index b2947c4dc3..4ffd6c95d7 100644 --- a/Engine/source/T3D/player.h +++ b/Engine/source/T3D/player.h @@ -190,6 +190,7 @@ struct PlayerData: public ShapeBaseData { FootHard, FootMetal, FootSnow, + MaxSoundOffsets, FootShallowSplash, FootWading, FootUnderWater, From cae97cac37a1aed5849d27eb7a3b48b35000740a Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 14 Jan 2016 23:51:35 +0100 Subject: [PATCH 095/324] Glow buffer graphic corruption fix on OpenGL. Caused by a wrong target size. (probably it was ok on the very old OpenGL 1.5 version) Before fix, wrong behaviour: http://goo.gl/dik7Ia After fix, all right: http://goo.gl/IsrckM --- Engine/source/renderInstance/renderTexTargetBinManager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Engine/source/renderInstance/renderTexTargetBinManager.cpp b/Engine/source/renderInstance/renderTexTargetBinManager.cpp index c262311520..5353f45661 100644 --- a/Engine/source/renderInstance/renderTexTargetBinManager.cpp +++ b/Engine/source/renderInstance/renderTexTargetBinManager.cpp @@ -107,8 +107,7 @@ void RenderTexTargetBinManager::initPersistFields() bool RenderTexTargetBinManager::setTargetSize(const Point2I &newTargetSize) { - if( GFX->getAdapterType() != OpenGL && // Targets need to match up exactly in size on OpenGL. - mTargetSize.x >= newTargetSize.x && + if( mTargetSize.x >= newTargetSize.x && mTargetSize.y >= newTargetSize.y ) return true; From 58a604d363cac4cabf9148d402e3a17c44e28008 Mon Sep 17 00:00:00 2001 From: Anis Date: Mon, 18 Jan 2016 05:49:05 +0100 Subject: [PATCH 096/324] Update gfxGLCircularVolatileBuffer.h --- Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h index c291cb229c..6d7d0e4b11 100644 --- a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h +++ b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h @@ -143,6 +143,11 @@ class GLCircularVolatileBuffer init(); } + ~GLCircularVolatileBuffer() + { + glDeleteBuffers(1, &mBufferName); + } + void init() { glGenBuffers(1, &mBufferName); @@ -290,4 +295,4 @@ class GLCircularVolatileBuffer }; -#endif \ No newline at end of file +#endif From 07282822870c6a86de7da7f42a1de4e85c15c402 Mon Sep 17 00:00:00 2001 From: Anis Date: Mon, 18 Jan 2016 05:55:36 +0100 Subject: [PATCH 097/324] Update gfxGLTextureTarget.cpp --- Engine/source/gfx/gl/gfxGLTextureTarget.cpp | 23 ++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp index 1569b9a857..2022651072 100644 --- a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp @@ -163,6 +163,10 @@ void _GFXGLTextureTargetFBOImpl::applyState() PRESERVE_FRAMEBUFFER(); glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); + bool drawbufs[16]; + int bufsize = 0; + for (int i = 0; i < 16; i++) + drawbufs[i] = false; bool hasColor = false; for(int i = 0; i < GFXGL->getNumRenderTargets(); ++i) { @@ -200,6 +204,20 @@ void _GFXGLTextureTargetFBOImpl::applyState() glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0); } + GLenum *buf = new GLenum[bufsize]; + int count = 0; + for (int i = 0; i < bufsize; i++) + { + if (drawbufs[i]) + { + buf[count] = GL_COLOR_ATTACHMENT0 + i; + count++; + } + } + + glDrawBuffers(bufsize, buf); + + delete[] buf; CHECK_FRAMEBUFFER_STATUS(); } @@ -260,7 +278,10 @@ GFXGLTextureTarget::GFXGLTextureTarget() : mCopyFboSrc(0), mCopyFboDst(0) GFXGLTextureTarget::~GFXGLTextureTarget() { - GFXTextureManager::removeEventDelegate( this, &GFXGLTextureTarget::_onTextureEvent ); + GFXTextureManager::removeEventDelegate(this, &GFXGLTextureTarget::_onTextureEvent); + + glDeleteFramebuffers(1, &mCopyFboSrc); + glDeleteFramebuffers(1, &mCopyFboDst); } const Point2I GFXGLTextureTarget::getSize() From c3ef59e39c9784812810d7c24c17b775a91f0e48 Mon Sep 17 00:00:00 2001 From: Anis Date: Mon, 18 Jan 2016 05:55:48 +0100 Subject: [PATCH 098/324] Update gfxGLWindowTarget.cpp --- Engine/source/gfx/gl/gfxGLWindowTarget.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp index c02ff1bc3f..5f8808cae0 100644 --- a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp @@ -42,6 +42,14 @@ GFXGLWindowTarget::GFXGLWindowTarget(PlatformWindow *win, GFXDevice *d) win->appEvent.notify(this, &GFXGLWindowTarget::_onAppSignal); } +GFXGLWindowTarget::~GFXGLWindowTarget() +{ + if(glIsFramebuffer(mCopyFBO)) + { + glDeleteFramebuffers(1, &mCopyFBO); + } +} + void GFXGLWindowTarget::resetMode() { if(mWindow->getVideoMode().fullScreen != mWindow->isFullscreen()) @@ -49,6 +57,7 @@ void GFXGLWindowTarget::resetMode() _teardownCurrentMode(); _setupNewMode(); } + GFX->beginReset(); } void GFXGLWindowTarget::_onAppSignal(WindowId wnd, S32 event) From 500a237892db6fa6a445aa646815f20cec7ccbfa Mon Sep 17 00:00:00 2001 From: Anis Date: Mon, 18 Jan 2016 05:56:00 +0100 Subject: [PATCH 099/324] Update gfxGLWindowTarget.h --- Engine/source/gfx/gl/gfxGLWindowTarget.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/gfxGLWindowTarget.h b/Engine/source/gfx/gl/gfxGLWindowTarget.h index 4baa6a53f1..af368e192b 100644 --- a/Engine/source/gfx/gl/gfxGLWindowTarget.h +++ b/Engine/source/gfx/gl/gfxGLWindowTarget.h @@ -30,6 +30,8 @@ class GFXGLWindowTarget : public GFXWindowTarget public: GFXGLWindowTarget(PlatformWindow *win, GFXDevice *d); + ~GFXGLWindowTarget(); + const Point2I getSize() { return mWindow->getClientExtent(); @@ -64,4 +66,4 @@ class GFXGLWindowTarget : public GFXWindowTarget void _WindowPresent(); }; -#endif \ No newline at end of file +#endif From ca31ef3f1aef7c3f0643246c788beeb980474b43 Mon Sep 17 00:00:00 2001 From: Anis Date: Mon, 18 Jan 2016 06:15:07 +0100 Subject: [PATCH 100/324] Update gfxGLWindowTarget.cpp --- Engine/source/gfx/gl/gfxGLWindowTarget.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp index 5f8808cae0..c00506835e 100644 --- a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp @@ -57,7 +57,6 @@ void GFXGLWindowTarget::resetMode() _teardownCurrentMode(); _setupNewMode(); } - GFX->beginReset(); } void GFXGLWindowTarget::_onAppSignal(WindowId wnd, S32 event) From e2d789e87de69d1b525763ca99aa5daef15b8e74 Mon Sep 17 00:00:00 2001 From: Anis Date: Mon, 18 Jan 2016 06:17:20 +0100 Subject: [PATCH 101/324] Update gfxGLTextureTarget.cpp --- Engine/source/gfx/gl/gfxGLTextureTarget.cpp | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp index 2022651072..ddb308adc8 100644 --- a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp @@ -163,10 +163,6 @@ void _GFXGLTextureTargetFBOImpl::applyState() PRESERVE_FRAMEBUFFER(); glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); - bool drawbufs[16]; - int bufsize = 0; - for (int i = 0; i < 16; i++) - drawbufs[i] = false; bool hasColor = false; for(int i = 0; i < GFXGL->getNumRenderTargets(); ++i) { @@ -204,20 +200,6 @@ void _GFXGLTextureTargetFBOImpl::applyState() glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0); } - GLenum *buf = new GLenum[bufsize]; - int count = 0; - for (int i = 0; i < bufsize; i++) - { - if (drawbufs[i]) - { - buf[count] = GL_COLOR_ATTACHMENT0 + i; - count++; - } - } - - glDrawBuffers(bufsize, buf); - - delete[] buf; CHECK_FRAMEBUFFER_STATUS(); } From 23c4b52e1f69fbec2594ffde6bd2952e55bb2e3b Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 18 Jan 2016 00:28:09 -0600 Subject: [PATCH 102/324] courtessy @Lopuska: opengl occlusion query fix --- .../advanced/advancedLightBinManager.cpp | 14 +++------ .../lighting/shadowMap/lightShadowMap.cpp | 31 +++++-------------- .../lighting/shadowMap/lightShadowMap.h | 22 ++++--------- .../lighting/shadowMap/shadowMapPass.cpp | 14 ++++----- 4 files changed, 25 insertions(+), 56 deletions(-) diff --git a/Engine/source/lighting/advanced/advancedLightBinManager.cpp b/Engine/source/lighting/advanced/advancedLightBinManager.cpp index dd71afeb0e..98330a5dec 100644 --- a/Engine/source/lighting/advanced/advancedLightBinManager.cpp +++ b/Engine/source/lighting/advanced/advancedLightBinManager.cpp @@ -318,6 +318,8 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) const U32 numPrims = curEntry.numPrims; const U32 numVerts = curEntry.vertBuffer->mNumVerts; + ShadowMapParams *lsp = curLightInfo->getExtended(); + // Skip lights which won't affect the scene. if ( !curLightMat || curLightInfo->getBrightness() <= 0.001f ) continue; @@ -329,15 +331,12 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) mShadowManager->setLightShadowMap( curEntry.shadowMap ); mShadowManager->setLightDynamicShadowMap( curEntry.dynamicShadowMap ); - // Let the shadow know we're about to render from it. - if ( curEntry.shadowMap ) - curEntry.shadowMap->preLightRender(); - if ( curEntry.dynamicShadowMap ) curEntry.dynamicShadowMap->preLightRender(); - // Set geometry GFX->setVertexBuffer( curEntry.vertBuffer ); GFX->setPrimitiveBuffer( curEntry.primBuffer ); + lsp->getOcclusionQuery()->begin(); + // Render the material passes while( curLightMat->matInstance->setupPass( state, sgData ) ) { @@ -352,10 +351,7 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) GFX->drawPrimitive(GFXTriangleList, 0, numPrims); } - // Tell it we're done rendering. - if ( curEntry.shadowMap ) - curEntry.shadowMap->postLightRender(); - if ( curEntry.dynamicShadowMap ) curEntry.dynamicShadowMap->postLightRender(); + lsp->getOcclusionQuery()->end(); } // Set NULL for active shadow map (so nothing gets confused) diff --git a/Engine/source/lighting/shadowMap/lightShadowMap.cpp b/Engine/source/lighting/shadowMap/lightShadowMap.cpp index 53a6f4e8d1..984f6cbc6f 100644 --- a/Engine/source/lighting/shadowMap/lightShadowMap.cpp +++ b/Engine/source/lighting/shadowMap/lightShadowMap.cpp @@ -89,8 +89,6 @@ LightShadowMap::LightShadowMap( LightInfo *light ) mLastUpdate( 0 ), mLastCull( 0 ), mIsViewDependent( false ), - mVizQuery( NULL ), - mWasOccluded( false ), mLastScreenSize( 0.0f ), mLastPriority( 0.0f ), mIsDynamic( false ) @@ -98,9 +96,7 @@ LightShadowMap::LightShadowMap( LightInfo *light ) GFXTextureManager::addEventDelegate( this, &LightShadowMap::_onTextureEvent ); mTarget = GFX->allocRenderToTextureTarget(); - mVizQuery = GFX->createOcclusionQuery(); - - smShadowMaps.push_back(this); + smShadowMaps.push_back( this ); mStaticRefreshTimer = PlatformTimer::create(); mDynamicRefreshTimer = PlatformTimer::create(); } @@ -108,8 +104,9 @@ LightShadowMap::LightShadowMap( LightInfo *light ) LightShadowMap::~LightShadowMap() { mTarget = NULL; - SAFE_DELETE( mVizQuery ); - + SAFE_DELETE(mStaticRefreshTimer); + SAFE_DELETE(mDynamicRefreshTimer); + releaseTextures(); smShadowMaps.remove( this ); @@ -334,23 +331,6 @@ void LightShadowMap::render( RenderPassManager* renderPass, mLastUpdate = Sim::getCurrentTime(); } -void LightShadowMap::preLightRender() -{ - PROFILE_SCOPE( LightShadowMap_prepLightRender ); - - if ( mVizQuery ) - { - mWasOccluded = mVizQuery->getStatus( true ) == GFXOcclusionQuery::Occluded; - mVizQuery->begin(); - } -} - -void LightShadowMap::postLightRender() -{ - if ( mVizQuery ) - mVizQuery->end(); -} - BaseMatInstance* LightShadowMap::getShadowMaterial( BaseMatInstance *inMat ) const { // See if we have an existing material hook. @@ -610,11 +590,14 @@ ShadowMapParams::ShadowMapParams( LightInfo *light ) shadowSoftness = 0.15f; fadeStartDist = 0.0f; lastSplitTerrainOnly = false; + mQuery = GFX->createOcclusionQuery(); + _validate(); } ShadowMapParams::~ShadowMapParams() { + SAFE_DELETE( mQuery ); SAFE_DELETE( mShadowMap ); SAFE_DELETE( mDynamicShadowMap ); } diff --git a/Engine/source/lighting/shadowMap/lightShadowMap.h b/Engine/source/lighting/shadowMap/lightShadowMap.h index 2cbb2ca5e6..d964811926 100644 --- a/Engine/source/lighting/shadowMap/lightShadowMap.h +++ b/Engine/source/lighting/shadowMap/lightShadowMap.h @@ -47,6 +47,9 @@ #ifndef _GFXSHADER_H_ #include "gfx/gfxShader.h" #endif +#ifndef _GFXOCCLUSIONQUERY_H_ +#include "gfx/gfxOcclusionQuery.h" +#endif #ifndef _PLATFORM_PLATFORMTIMER_H_ #include "platform/platformTimer.h" #endif @@ -61,7 +64,6 @@ struct SceneData; class GFXShaderConstBuffer; class GFXShaderConstHandle; class GFXShader; -class GFXOcclusionQuery; class LightManager; class RenderPassManager; @@ -169,12 +171,6 @@ class LightShadowMap bool isViewDependent() const { return mIsViewDependent; } - bool wasOccluded() const { return mWasOccluded; } - - void preLightRender(); - - void postLightRender(); - void updatePriority( const SceneRenderState *state, U32 currTimeMs ); F32 getLastScreenSize() const { return mLastScreenSize; } @@ -257,15 +253,6 @@ class LightShadowMap /// The time this shadow was last culled and prioritized. U32 mLastCull; - /// The shadow occlusion query used when the light is - /// rendered to determine if any pixel of it is visible. - GFXOcclusionQuery *mVizQuery; - - /// If true the light was occluded by geometry the - /// last frame it was updated. - //the last frame. - bool mWasOccluded; - F32 mLastScreenSize; F32 mLastPriority; @@ -325,6 +312,8 @@ class ShadowMapParams : public LightInfoEx bool hasCookieTex() const { return cookie.isNotEmpty(); } + GFXOcclusionQuery* getOcclusionQuery() const { return mQuery; } + GFXTextureObject* getCookieTex(); GFXCubemap* getCookieCubeTex(); @@ -339,6 +328,7 @@ class ShadowMapParams : public LightInfoEx /// LightShadowMap *mShadowMap; LightShadowMap *mDynamicShadowMap; + GFXOcclusionQuery* mQuery; LightInfo *mLight; diff --git a/Engine/source/lighting/shadowMap/shadowMapPass.cpp b/Engine/source/lighting/shadowMap/shadowMapPass.cpp index 7c17046e13..dea7305b50 100644 --- a/Engine/source/lighting/shadowMap/shadowMapPass.cpp +++ b/Engine/source/lighting/shadowMap/shadowMapPass.cpp @@ -174,12 +174,12 @@ void ShadowMapPass::render( SceneManager *sceneManager, continue; // --- Static Shadow Map --- - LightShadowMap *lsm = params->getOrCreateShadowMap(); - LightShadowMap *dlsm = params->getOrCreateShadowMap(true); + LightShadowMap *lsm = params->getOrCreateShadowMap(); + LightShadowMap *dlsm = params->getOrCreateShadowMap(true); // First check the visiblity query... if it wasn't // visible skip it. - if (lsm->wasOccluded() || dlsm->wasOccluded()) + if(params->getOcclusionQuery()->getStatus(true) == GFXOcclusionQuery::Occluded) continue; // Any shadow that is visible is counted as being @@ -187,9 +187,9 @@ void ShadowMapPass::render( SceneManager *sceneManager, ++smActiveShadowMaps; // Do a priority update for this shadow. - lsm->updatePriority(diffuseState, currTime); + lsm->updatePriority(diffuseState, currTime); - shadowMaps.push_back(lsm); + shadowMaps.push_back(lsm); // --- Dynamic Shadow Map --- @@ -198,7 +198,7 @@ void ShadowMapPass::render( SceneManager *sceneManager, ++smActiveShadowMaps; // Do a priority update for this shadow. - dlsm->updatePriority(diffuseState, currTime); + dlsm->updatePriority(diffuseState, currTime); shadowMaps.push_back( dlsm ); } @@ -306,4 +306,4 @@ void DynamicShadowRenderPassManager::addInst( RenderInst *inst ) } Parent::addInst(inst); -} \ No newline at end of file +} From 0f173df0d4c81f0e9a66b5724c918b082161b4ed Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 28 Jan 2016 00:42:08 -0600 Subject: [PATCH 103/324] setDetailFromDistance aspect ratio friendly adjustment --- Engine/source/ts/tsShapeInstance.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/ts/tsShapeInstance.cpp b/Engine/source/ts/tsShapeInstance.cpp index 821e02dba1..03b8c79c3b 100644 --- a/Engine/source/ts/tsShapeInstance.cpp +++ b/Engine/source/ts/tsShapeInstance.cpp @@ -593,7 +593,7 @@ S32 TSShapeInstance::setDetailFromDistance( const SceneRenderState *state, F32 s // 4:3 aspect ratio, we've changed the reference value // to 300 to be more compatible with legacy shapes. // - const F32 pixelScale = state->getViewport().extent.y / 300.0f; + const F32 pixelScale = (state->getViewport().extent.x / state->getViewport().extent.y); // This is legacy DTS support for older "multires" based // meshes. The original crossbow weapon uses this. From 7924f056bdfcabb4152c2b55c79695dac8534e27 Mon Sep 17 00:00:00 2001 From: RoundedIcon Date: Mon, 1 Feb 2016 16:58:39 -0700 Subject: [PATCH 104/324] Fix for collision issues with scaled players Players scaled after their creation have collision issues with terrain. Changing this bit of code fixes those issues for downsized players, even when shrunk to 10% of their original size. --- Engine/source/T3D/player.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 3c258c3743..6e33284a60 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -4659,9 +4659,9 @@ Point3F Player::_move( const F32 travelTime, Collision *outCol ) } Point3F distance = end - start; - if (mFabs(distance.x) < mObjBox.len_x() && - mFabs(distance.y) < mObjBox.len_y() && - mFabs(distance.z) < mObjBox.len_z()) + if (mFabs(distance.x) < mScaledBox.len_x() && + mFabs(distance.y) < mScaledBox.len_y() && + mFabs(distance.z) < mScaledBox.len_z()) { // We can potentially early out of this. If there are no polys in the clipped polylist at our // end position, then we can bail, and just set start = end; From f3ff1995549cda16929d761a0131214452e5187f Mon Sep 17 00:00:00 2001 From: Anis Date: Sat, 13 Feb 2016 18:50:11 +0100 Subject: [PATCH 105/324] Update navMesh.cpp --- Engine/source/navigation/navMesh.cpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index 74d71dc77b..22a47a9f37 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -123,28 +123,6 @@ DefineConsoleFunction(NavMeshUpdateAll, void, (S32 objid, bool remove), (0, fals obj->enableCollision(); } -DefineConsoleFunction(NavMeshUpdateAroundObject, void, (S32 objid, bool remove), (0, false), - "@brief Update all NavMesh tiles that intersect the given object's world box.") -{ - SceneObject *obj; - if (!Sim::findObject(objid, obj)) - return; - if (remove) - obj->disableCollision(); - SimSet *set = NavMesh::getServerSet(); - for (U32 i = 0; i < set->size(); i++) - { - NavMesh *m = dynamic_cast(set->at(i)); - if (m) - { - m->cancelBuild(); - m->buildTiles(obj->getWorldBox()); - } - } - if (remove) - obj->enableCollision(); -} - DefineConsoleFunction(NavMeshUpdateOne, void, (S32 meshid, S32 objid, bool remove), (0, 0, false), "@brief Update all tiles in a given NavMesh that intersect the given object's world box.") { From 7aeec65a3ba207ff97922bea3b92b75d69e27859 Mon Sep 17 00:00:00 2001 From: Anis Date: Sat, 13 Feb 2016 20:27:30 +0100 Subject: [PATCH 106/324] Update win32Window.cpp --- .../windowManager/win32/win32Window.cpp | 173 ++++++++---------- 1 file changed, 81 insertions(+), 92 deletions(-) diff --git a/Engine/source/windowManager/win32/win32Window.cpp b/Engine/source/windowManager/win32/win32Window.cpp index 5c9b8ed11f..c714586b98 100644 --- a/Engine/source/windowManager/win32/win32Window.cpp +++ b/Engine/source/windowManager/win32/win32Window.cpp @@ -26,8 +26,10 @@ #include #include #include "math/mMath.h" +#include "gfx/gfxDevice.h" #include "gfx/gfxStructs.h" +#include "windowManager/platformWindowMgr.h" #include "windowManager/win32/win32Window.h" #include "windowManager/win32/win32WindowMgr.h" #include "windowManager/win32/win32CursorController.h" @@ -39,11 +41,6 @@ // for winState structure #include "platformWin32/platformWin32.h" -#include -#include "gfx/gfxDevice.h" - -#include - const UTF16* _MainWindowClassName = L"TorqueJuggernaughtWindow"; const UTF16* _CurtainWindowClassName = L"TorqueJuggernaughtCurtainWindow"; @@ -148,96 +145,93 @@ const GFXVideoMode & Win32Window::getVideoMode() void Win32Window::setVideoMode( const GFXVideoMode &mode ) { - bool needCurtain = (mVideoMode.fullScreen != mode.fullScreen); + bool needCurtain = ( mVideoMode.fullScreen != mode.fullScreen ); - if(needCurtain) + if( needCurtain ) { - Con::errorf("Win32Window::setVideoMode - invoking curtain"); + Con::printf( "Win32Window::setVideoMode - invoking curtain" ); mOwningManager->lowerCurtain(); } - mVideoMode = mode; - mSuppressReset = true; + mVideoMode = mode; + mSuppressReset = true; // Can't switch to fullscreen while a child of another window - if(mode.fullScreen && !Platform::getWebDeployment() && mOwningManager->getParentWindow()) + if( mode.fullScreen && !Platform::getWebDeployment() && mOwningManager->getParentWindow() ) { - mOldParent = (HWND)mOwningManager->getParentWindow(); - mOwningManager->setParentWindow(NULL); + mOldParent = reinterpret_cast( mOwningManager->getParentWindow() ); + mOwningManager->setParentWindow( NULL ); } - else if(!mode.fullScreen && mOldParent) + else if( !mode.fullScreen && mOldParent ) { - mOwningManager->setParentWindow(mOldParent); + mOwningManager->setParentWindow( mOldParent ); mOldParent = NULL; } - // Set our window to have the right style based on the mode - if(mode.fullScreen && !Platform::getWebDeployment() && !mOffscreenRender) + // Set our window to have the right style based on the mode + if( mode.fullScreen && !Platform::getWebDeployment() && !mOffscreenRender ) { - WINDOWPLACEMENT wplacement = { sizeof(wplacement) }; - DWORD dwStyle = GetWindowLong(getHWND(), GWL_STYLE); - MONITORINFO mi = { sizeof(mi) }; - - if (GetWindowPlacement(getHWND(), &wplacement) && GetMonitorInfo(MonitorFromWindow(getHWND(), MONITOR_DEFAULTTOPRIMARY), &mi)) - { - DISPLAY_DEVICE dd = GetPrimaryDevice(); - DEVMODE dv; - ZeroMemory(&dv, sizeof(dv)); - dv.dmSize = sizeof(DEVMODE); - EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dv); - dv.dmPelsWidth = mode.resolution.x; - dv.dmPelsHeight = mode.resolution.y; - dv.dmBitsPerPel = mode.bitDepth; - dv.dmDisplayFrequency = mode.refreshRate; - dv.dmFields = (DM_PELSWIDTH | DM_PELSHEIGHT); - ChangeDisplaySettings(&dv, CDS_FULLSCREEN); - SetWindowLong(getHWND(), GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW); - SetWindowPos(getHWND(), HWND_TOP, - mi.rcMonitor.left, - mi.rcMonitor.top, - mi.rcMonitor.right - mi.rcMonitor.left, - mi.rcMonitor.bottom - mi.rcMonitor.top, - SWP_NOOWNERZORDER | SWP_FRAMECHANGED); - } - - if(mDisplayWindow) - ShowWindow(getHWND(), SW_SHOWNORMAL); + WINDOWPLACEMENT wplacement = { sizeof( wplacement ) }; + DWORD dwStyle = GetWindowLong( getHWND(), GWL_STYLE ); + MONITORINFO mi = { sizeof(mi) }; - // Clear the menu bar from the window for full screen - HMENU menu = GetMenu(getHWND()); - if(menu) + if ( GetWindowPlacement( getHWND(), &wplacement ) && GetMonitorInfo( MonitorFromWindow( getHWND(), MONITOR_DEFAULTTOPRIMARY ), &mi ) ) { - SetMenu(getHWND(), NULL); + DISPLAY_DEVICE dd = GetPrimaryDevice(); + DEVMODE dv; + ZeroMemory( &dv, sizeof( dv ) ); + dv.dmSize = sizeof( DEVMODE ); + EnumDisplaySettings( dd.DeviceName, ENUM_CURRENT_SETTINGS, &dv ); + dv.dmPelsWidth = mode.resolution.x; + dv.dmPelsHeight = mode.resolution.y; + dv.dmBitsPerPel = mode.bitDepth; + dv.dmDisplayFrequency = mode.refreshRate; + dv.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; + ChangeDisplaySettings( &dv, CDS_FULLSCREEN ); + SetWindowLong( getHWND(), GWL_STYLE, dwStyle & ~WS_OVERLAPPEDWINDOW ); + SetWindowPos( getHWND(), HWND_TOP, mi.rcMonitor.left, + mi.rcMonitor.top, + mi.rcMonitor.right - mi.rcMonitor.left, + mi.rcMonitor.bottom - mi.rcMonitor.top, + SWP_NOOWNERZORDER | SWP_FRAMECHANGED ); } + if( mDisplayWindow ) + ShowWindow( getHWND(), SW_SHOWNORMAL ); + + // Clear the menu bar from the window for full screen + if( GetMenu( getHWND() ) ) + SetMenu( getHWND(), NULL ); + // When switching to Fullscreen, reset device after setting style - if(mTarget.isValid()) - mTarget->resetMode(); + if( mTarget.isValid() ) + mTarget->resetMode(); mFullscreen = true; - } - else - { - DISPLAY_DEVICE dd = GetPrimaryDevice(); - DEVMODE dv; - ZeroMemory(&dv, sizeof(dv)); - dv.dmSize = sizeof(DEVMODE); - EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dv); + } + else + { + DISPLAY_DEVICE dd = GetPrimaryDevice(); + DEVMODE dv; + ZeroMemory( &dv, sizeof( dv ) ); + dv.dmSize = sizeof( DEVMODE ); + EnumDisplaySettings( dd.DeviceName, ENUM_CURRENT_SETTINGS, &dv ); - if ((mode.resolution.x != dv.dmPelsWidth) || (mode.resolution.y != dv.dmPelsHeight)) - ChangeDisplaySettings(NULL, 0); + if ( ( WindowManager->getDesktopResolution() != mode.resolution || + ( mode.resolution.x != dv.dmPelsWidth ) || ( mode.resolution.y != dv.dmPelsHeight ) ) ) + ChangeDisplaySettings( NULL, 0 ); - // Reset device *first*, so that when we call setSize() and let it - // access the monitor settings, it won't end up with our fullscreen - // geometry that is just about to change. + // Reset device *first*, so that when we call setSize() and let it + // access the monitor settings, it won't end up with our fullscreen + // geometry that is just about to change. - if(mTarget.isValid()) - mTarget->resetMode(); + if( mTarget.isValid() ) + mTarget->resetMode(); - if (!mOffscreenRender) + if ( !mOffscreenRender ) { - SetWindowLong( getHWND(), GWL_STYLE, mWindowedWindowStyle); - SetWindowPos( getHWND(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); + SetWindowLong( getHWND(), GWL_STYLE, mWindowedWindowStyle); + SetWindowPos( getHWND(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); // Put back the menu bar, if any if(mMenuHandle) @@ -253,42 +247,37 @@ void Win32Window::setVideoMode( const GFXVideoMode &mode ) } else { - HWND parentWin = (HWND)mOwningManager->getParentWindow(); + HWND parentWin = reinterpret_cast( mOwningManager->getParentWindow() ); RECT windowRect; - GetClientRect(parentWin, &windowRect); - Point2I res(windowRect.right-windowRect.left, windowRect.bottom-windowRect.top); - if (res.x == 0 || res.y == 0) - { - // Must be too early in the window set up to obtain the parent's size. - setSize(mode.resolution); - } + GetClientRect( parentWin, &windowRect ); + Point2I res( windowRect.right - windowRect.left, windowRect.bottom - windowRect.top ); + + if ( res.x == 0 || res.y == 0 ) + setSize( mode.resolution ); // Must be too early in the window set up to obtain the parent's size. else - { - setSize(res); - } + setSize( res ); } - if (!mOffscreenRender) + if ( !mOffscreenRender ) { - // We have to force Win32 to update the window frame and make the window - // visible and no longer topmost - this code might be possible to simplify. - SetWindowPos( getHWND(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED); + // We have to force Win32 to update the window frame and make the window + // visible and no longer topmost - this code might be possible to simplify. + SetWindowPos( getHWND(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_FRAMECHANGED ); if(mDisplayWindow) - ShowWindow( getHWND(), SW_SHOWNORMAL); + ShowWindow( getHWND(), SW_SHOWNORMAL ); } mFullscreen = false; - } - - mSuppressReset = false; + } - if(needCurtain) - mOwningManager->raiseCurtain(); + mSuppressReset = false; - SetForegroundWindow(getHWND()); + if( needCurtain ) + mOwningManager->raiseCurtain(); - getScreenResChangeSignal().trigger(this, true); + SetForegroundWindow( getHWND() ); + getScreenResChangeSignal().trigger( this, true ); } bool Win32Window::clearFullscreen() From 39613c0d87ace06e9648b3fb0d886f3c7758475c Mon Sep 17 00:00:00 2001 From: irei1as Date: Mon, 15 Feb 2016 18:43:56 +0100 Subject: [PATCH 107/324] Optimized You're right. If the normalized quaternions are in a variable or something for normal uses it's just a waste to force the change hidden inside again. --- Engine/source/math/mQuat.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Engine/source/math/mQuat.h b/Engine/source/math/mQuat.h index 628e298ba5..10efb06191 100644 --- a/Engine/source/math/mQuat.h +++ b/Engine/source/math/mQuat.h @@ -227,12 +227,8 @@ inline F32 QuatF::dot( const QuatF &q ) const inline F32 QuatF::angleBetween( const QuatF & q ) { - // angle between two quaternions - QuatF base(x,y,z,w); - base.normalize(); - QuatF q_norm=q; - q_norm.normalize(); - return 2.0f*mAcos(base.dot(q_norm)); + // angle between two quaternions. + return mAcos(q.dot(*this)) * 2.0f; } #endif // _MQUAT_H_ From 6891d348af015f5695d568aac6976c77b0890212 Mon Sep 17 00:00:00 2001 From: irei1as Date: Mon, 15 Feb 2016 18:50:18 +0100 Subject: [PATCH 108/324] Update mQuat.h --- Engine/source/math/mQuat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/math/mQuat.h b/Engine/source/math/mQuat.h index 10efb06191..ca6ed5d82a 100644 --- a/Engine/source/math/mQuat.h +++ b/Engine/source/math/mQuat.h @@ -227,7 +227,7 @@ inline F32 QuatF::dot( const QuatF &q ) const inline F32 QuatF::angleBetween( const QuatF & q ) { - // angle between two quaternions. + // angle between two normalized quaternions. return mAcos(q.dot(*this)) * 2.0f; } From d25b03cd5278d75c04a204d05d55dcc81d5a7942 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 15 Feb 2016 18:12:56 -0600 Subject: [PATCH 109/324] vsprintf replacement with engine vairant resolves first issue in https://github.com/GarageGames/Torque3D/issues/1515#issuecomment-184446719 --- Engine/source/core/stream/stream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/core/stream/stream.cpp b/Engine/source/core/stream/stream.cpp index da1b1dc82f..8a7fb2b40a 100644 --- a/Engine/source/core/stream/stream.cpp +++ b/Engine/source/core/stream/stream.cpp @@ -128,7 +128,7 @@ bool Stream::writeFormattedBuffer(const char *format, ...) char buffer[4096]; va_list args; va_start(args, format); - const S32 length = vsprintf(buffer, format, args); + const S32 length = dVsprintf(buffer, sizeof(buffer), format, args); // Sanity! AssertFatal(length <= sizeof(buffer), "writeFormattedBuffer - String format exceeded buffer size. This will cause corruption."); From db4755a00f75e1627552b9a0e2530a1dc7ecebbb Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 15 Feb 2016 19:05:09 -0600 Subject: [PATCH 110/324] namespace conflict resolution --- Engine/source/persistence/taml/fsTinyXml.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/persistence/taml/fsTinyXml.cpp b/Engine/source/persistence/taml/fsTinyXml.cpp index 1fb97398b5..a4fdafb57d 100644 --- a/Engine/source/persistence/taml/fsTinyXml.cpp +++ b/Engine/source/persistence/taml/fsTinyXml.cpp @@ -38,7 +38,7 @@ bool fsTiXmlDocument::LoadFile( const char * pFilename, TiXmlEncoding encoding ) #endif // File open for read? - if ( !stream.open( filenameBuffer, Torque::FS::File::AccessMode::Read ) ) + if ( !stream.open( filenameBuffer, Torque::FS::File::Read ) ) { // No, so warn. Con::warnf("TamlXmlParser::parse() - Could not open filename '%s' for parse.", filenameBuffer ); @@ -67,7 +67,7 @@ bool fsTiXmlDocument::SaveFile( const char * pFilename ) const FileStream stream; // File opened? - if ( !stream.open( filenameBuffer, Torque::FS::File::AccessMode::Write ) ) + if ( !stream.open( filenameBuffer, Torque::FS::File::Write ) ) { // No, so warn. Con::warnf("Taml::writeFile() - Could not open filename '%s' for write.", filenameBuffer ); From f8c4dd9d1d4cf8c72eaa77e3875ee1a1073a7da3 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 15 Feb 2016 19:08:03 -0600 Subject: [PATCH 111/324] http://stackoverflow.com/questions/8461832/explicit-qualification-in-declaration --- Engine/source/math/mathUtils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/math/mathUtils.cpp b/Engine/source/math/mathUtils.cpp index f6086c5e4f..5ffd9a8707 100644 --- a/Engine/source/math/mathUtils.cpp +++ b/Engine/source/math/mathUtils.cpp @@ -1847,7 +1847,7 @@ U32 extrudePolygonEdgesFromPoint( const Point3F* vertices, U32 numVertices, cons //----------------------------------------------------------------------------- -void MathUtils::mBuildHull2D(const Vector _inPoints, Vector &hullPoints) +void mBuildHull2D(const Vector _inPoints, Vector &hullPoints) { /// Andrew's monotone chain convex hull algorithm implementation From 5b5c6b9907d4b83ddc45335cac03da48a3738a36 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 16 Feb 2016 01:50:58 -0600 Subject: [PATCH 112/324] Deferred Shading Phase 1: buffers engine: provides the following hooks and methods A) render target "color", and "matinfo". these correspond to texture[0] = "#color"; texture[2] = "#matinfo"; entries in scripts B) utilizes the independentMrtBitDepth method added GarageGames#857 to set color to an 8RGBA if cards support it C) adds an RenderPrePassMgr::_initShaders() method to support void RenderPrePassMgr::clearBuffers(). This operates as a pseudo-postfx by rendering a veiwspace plane which fills the screen, then calls a shader which fills both the introduced rendertarget buffers and the prepass buffer to relevant defaults (white with full alpha for prepass, black with full alpha for color and material respectively) script: \game\tools\worldEditor\main.cs adds additional hooks similar to GarageGames#863 for colorbuffer, specular map, and backbuffer display \game\core\scripts\client\lighting\advanced\deferredShading.cs adds the clearbuffer shader, visualizers, and the ShaderData( AL_DeferredShader ) + PostEffect( AL_DeferredShading ) which combine the various buffers into the output which reaches the screen under normal conditions, as well as the extended debug visualizers. again, note the lines texture[0] = "#color"; texture[1] = "#lightinfo"; texture[2] = "#matinfo"; target = "$backBuffer"; in particular for the core tie-in. shader: \game\shaders\common\lighting\advanced\deferredColorShaderP.hlsl \game\shaders\common\lighting\advanced\gl\deferredClearGBufferP.glsl the previously mentioned shaders which clear the buffers to specified colors \game\shaders\common\lighting\advanced\deferredShadingP.hlsl \game\shaders\common\lighting\advanced\gl\deferredShadingP.glsl the tie-in shaders the rest are visualizers purpose: to expose methodology that allows one to render color, lighting and material information such as specular and gloss which effect the result of both when combined long term intent: the previous prepass lighting methodology while serviceable, unfortunately had the side effect of throwing out raw color information required by more modern pipelines and methodologies. This preserves that data while also allowing the manipulation to occur only on a screenspace (or reflected speudo-screenspace) basis. --- .../renderInstance/renderPrePassMgr.cpp | 321 +++++++++++++++++- .../source/renderInstance/renderPrePassMgr.h | 20 ++ .../lighting/advanced/deferredShading.cs | 147 ++++++++ .../client/lighting/advanced/lightViz.cs | 21 +- .../lighting/advanced/dbgColorBufferP.hlsl | 31 ++ .../advanced/dbgSpecMapVisualizeP.hlsl | 32 ++ .../advanced/deferredClearGBufferP.hlsl | 47 +++ .../lighting/advanced/deferredShadingP.hlsl | 54 +++ .../lighting/advanced/gl/dbgColorBufferP.glsl | 34 ++ .../advanced/gl/dbgSpecMapVisualizeP.glsl | 34 ++ .../advanced/gl/deferredClearGBufferP.glsl | 40 +++ .../advanced/gl/deferredShadingP.glsl | 59 ++++ Templates/Full/game/tools/worldEditor/main.cs | 3 + 13 files changed, 824 insertions(+), 19 deletions(-) create mode 100644 Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl diff --git a/Engine/source/renderInstance/renderPrePassMgr.cpp b/Engine/source/renderInstance/renderPrePassMgr.cpp index 326f346a0b..4f08dc6ea1 100644 --- a/Engine/source/renderInstance/renderPrePassMgr.cpp +++ b/Engine/source/renderInstance/renderPrePassMgr.cpp @@ -36,6 +36,7 @@ #include "scene/sceneRenderState.h" #include "gfx/gfxStringEnumTranslate.h" #include "gfx/gfxDebugEvent.h" +#include "gfx/gfxCardProfile.h" #include "materials/customMaterialDefinition.h" #include "lighting/advanced/advancedLightManager.h" #include "lighting/advanced/advancedLightBinManager.h" @@ -44,10 +45,17 @@ #include "terrain/terrCellMaterial.h" #include "math/mathUtils.h" #include "math/util/matrixSet.h" +#include "gfx/gfxTextureManager.h" +#include "gfx/primBuilder.h" +#include "gfx/gfxDrawUtil.h" +#include "materials/shaderData.h" +#include "gfx/sim/cubemapData.h" const MatInstanceHookType PrePassMatInstanceHook::Type( "PrePass" ); const String RenderPrePassMgr::BufferName("prepass"); const RenderInstType RenderPrePassMgr::RIT_PrePass("PrePass"); +const String RenderPrePassMgr::ColorBufferName("color"); +const String RenderPrePassMgr::MatInfoBufferName("matinfo"); IMPLEMENT_CONOBJECT(RenderPrePassMgr); @@ -79,6 +87,7 @@ RenderPrePassMgr::RenderPrePassMgr( bool gatherDepth, mPrePassMatInstance( NULL ) { notifyType( RenderPassManager::RIT_Decal ); + notifyType( RenderPassManager::RIT_DecalRoad ); notifyType( RenderPassManager::RIT_Mesh ); notifyType( RenderPassManager::RIT_Terrain ); notifyType( RenderPassManager::RIT_Object ); @@ -90,6 +99,10 @@ RenderPrePassMgr::RenderPrePassMgr( bool gatherDepth, GFXShader::addGlobalMacro( "TORQUE_LINEAR_DEPTH" ); mNamedTarget.registerWithName( BufferName ); + mColorTarget.registerWithName( ColorBufferName ); + mMatInfoTarget.registerWithName( MatInfoBufferName ); + + mClearGBufferShader = NULL; _registerFeatures(); } @@ -98,6 +111,8 @@ RenderPrePassMgr::~RenderPrePassMgr() { GFXShader::removeGlobalMacro( "TORQUE_LINEAR_DEPTH" ); + mColorTarget.release(); + mMatInfoTarget.release(); _unregisterFeatures(); SAFE_DELETE( mPrePassMatInstance ); } @@ -119,6 +134,8 @@ bool RenderPrePassMgr::setTargetSize(const Point2I &newTargetSize) { bool ret = Parent::setTargetSize( newTargetSize ); mNamedTarget.setViewport( GFX->getViewport() ); + mColorTarget.setViewport( GFX->getViewport() ); + mMatInfoTarget.setViewport( GFX->getViewport() ); return ret; } @@ -135,6 +152,40 @@ bool RenderPrePassMgr::_updateTargets() // reload materials, the conditioner needs to alter the generated shaders } + GFXFormat colorFormat = mTargetFormat; + bool independentMrtBitDepth = GFX->getCardProfiler()->queryProfile("independentMrtBitDepth", false); + //If independent bit depth on a MRT is supported than just use 8bit channels for the albedo color. + if(independentMrtBitDepth) + colorFormat = GFXFormatR8G8B8A8; + + // andrewmac: Deferred Shading Color Buffer + if (mColorTex.getFormat() != colorFormat || mColorTex.getWidthHeight() != mTargetSize || GFX->recentlyReset()) + { + mColorTarget.release(); + mColorTex.set(mTargetSize.x, mTargetSize.y, colorFormat, + &GFXDefaultRenderTargetProfile, avar("%s() - (line %d)", __FUNCTION__, __LINE__), + 1, GFXTextureManager::AA_MATCH_BACKBUFFER); + mColorTarget.setTexture(mColorTex); + + for (U32 i = 0; i < mTargetChainLength; i++) + mTargetChain[i]->attachTexture(GFXTextureTarget::Color1, mColorTarget.getTexture()); + } + + // andrewmac: Deferred Shading Material Info Buffer + if (mMatInfoTex.getFormat() != colorFormat || mMatInfoTex.getWidthHeight() != mTargetSize || GFX->recentlyReset()) + { + mMatInfoTarget.release(); + mMatInfoTex.set(mTargetSize.x, mTargetSize.y, colorFormat, + &GFXDefaultRenderTargetProfile, avar("%s() - (line %d)", __FUNCTION__, __LINE__), + 1, GFXTextureManager::AA_MATCH_BACKBUFFER); + mMatInfoTarget.setTexture(mMatInfoTex); + + for (U32 i = 0; i < mTargetChainLength; i++) + mTargetChain[i]->attachTexture(GFXTextureTarget::Color2, mMatInfoTarget.getTexture()); + } + + GFX->finalizeReset(); + // Attach the light info buffer as a second render target, if there is // lightmapped geometry in the scene. AdvancedLightBinManager *lightBin; @@ -154,11 +205,13 @@ bool RenderPrePassMgr::_updateTargets() for ( U32 i = 0; i < mTargetChainLength; i++ ) { GFXTexHandle lightInfoTex = lightBin->getTargetTexture(0, i); - mTargetChain[i]->attachTexture(GFXTextureTarget::Color1, lightInfoTex); + mTargetChain[i]->attachTexture(GFXTextureTarget::Color3, lightInfoTex); } } } + _initShaders(); + return ret; } @@ -191,7 +244,7 @@ void RenderPrePassMgr::addElement( RenderInst *inst ) return; // First what type of render instance is it? - const bool isDecalMeshInst = inst->type == RenderPassManager::RIT_Decal; + const bool isDecalMeshInst = ((inst->type == RenderPassManager::RIT_Decal)||(inst->type == RenderPassManager::RIT_DecalRoad)); const bool isMeshInst = inst->type == RenderPassManager::RIT_Mesh; @@ -280,9 +333,8 @@ void RenderPrePassMgr::render( SceneRenderState *state ) // Tell the superclass we're about to render const bool isRenderingToTarget = _onPreRender(state); - // Clear all the buffers to white so that the - // default depth is to the far plane. - GFX->clear( GFXClearTarget | GFXClearZBuffer | GFXClearStencil, ColorI::WHITE, 1.0f, 0); + // Clear all z-buffer, and g-buffer. + clearBuffers(); // Restore transforms MatrixSet &matrixSet = getRenderPass()->getMatrixSet(); @@ -329,7 +381,13 @@ void RenderPrePassMgr::render( SceneRenderState *state ) GFX->drawPrimitive( ri->prim ); } - + // init loop data + GFXTextureObject *lastLM = NULL; + GFXCubemap *lastCubemap = NULL; + GFXTextureObject *lastReflectTex = NULL; + GFXTextureObject *lastMiscTex = NULL; + GFXTextureObject *lastAccuTex = NULL; + // Next render all the meshes. itr = mElementList.begin(); for ( ; itr != mElementList.end(); ) @@ -363,12 +421,11 @@ void RenderPrePassMgr::render( SceneRenderState *state ) // Set up SG data for this instance. setupSGData( passRI, sgData ); + mat->setSceneInfo(state, sgData); matrixSet.setWorld(*passRI->objectToWorld); matrixSet.setView(*passRI->worldToCamera); matrixSet.setProjection(*passRI->projection); - - mat->setSceneInfo(state, sgData); mat->setTransforms(matrixSet, state); // If we're instanced then don't render yet. @@ -385,6 +442,43 @@ void RenderPrePassMgr::render( SceneRenderState *state ) continue; } + bool dirty = false; + + // set the lightmaps if different + if( passRI->lightmap && passRI->lightmap != lastLM ) + { + sgData.lightmap = passRI->lightmap; + lastLM = passRI->lightmap; + dirty = true; + } + + // set the cubemap if different. + if ( passRI->cubemap != lastCubemap ) + { + sgData.cubemap = passRI->cubemap; + lastCubemap = passRI->cubemap; + dirty = true; + } + + if ( passRI->reflectTex != lastReflectTex ) + { + sgData.reflectTex = passRI->reflectTex; + lastReflectTex = passRI->reflectTex; + dirty = true; + } + + // Update accumulation texture if it changed. + // Note: accumulation texture can be NULL, and must be updated. + if (passRI->accuTex != lastAccuTex) + { + sgData.accuTex = passRI->accuTex; + lastAccuTex = lastAccuTex; + dirty = true; + } + + if ( dirty ) + mat->setTextureStages( state, sgData ); + // Setup the vertex and index buffers. mat->setBuffers( passRI->vertBuff, passRI->primBuff ); @@ -525,6 +619,31 @@ void ProcessedPrePassMaterial::_determineFeatures( U32 stageNum, #ifndef TORQUE_DEDICATED + //tag all materials running through prepass as deferred + newFeatures.addFeature(MFT_isDeferred); + + // Deferred Shading : Diffuse + if (mStages[stageNum].getTex( MFT_DiffuseMap )) + { + newFeatures.addFeature(MFT_DiffuseMap); + } + newFeatures.addFeature( MFT_DiffuseColor ); + + // Deferred Shading : Specular + if( mStages[stageNum].getTex( MFT_SpecularMap ) ) + { + newFeatures.addFeature( MFT_DeferredSpecMap ); + } + else if ( mMaterial->mPixelSpecular[stageNum] ) + { + newFeatures.addFeature( MFT_DeferredSpecVars ); + } + else + newFeatures.addFeature(MFT_DeferredEmptySpec); + + // Deferred Shading : Material Info Flags + newFeatures.addFeature( MFT_DeferredMatInfoFlags ); + for ( U32 i=0; i < fd.features.getCount(); i++ ) { const FeatureType &type = fd.features.getAt( i ); @@ -553,7 +672,10 @@ void ProcessedPrePassMaterial::_determineFeatures( U32 stageNum, type == MFT_InterlacedPrePass || type == MFT_Visibility || type == MFT_UseInstancing || - type == MFT_DiffuseVertColor ) + type == MFT_DiffuseVertColor || + type == MFT_DetailMap || + type == MFT_DetailNormalMap || + type == MFT_DiffuseMapAtlas) newFeatures.addFeature( type ); // Add any transform features. @@ -563,11 +685,39 @@ void ProcessedPrePassMaterial::_determineFeatures( U32 stageNum, newFeatures.addFeature( type ); } + if (mMaterial->mAccuEnabled[stageNum]) + { + newFeatures.addFeature(MFT_AccuMap); + mHasAccumulation = true; + } + + // we need both diffuse and normal maps + sm3 to have an accu map + if (newFeatures[MFT_AccuMap] && + (!newFeatures[MFT_DiffuseMap] || + !newFeatures[MFT_NormalMap] || + GFX->getPixelShaderVersion() < 3.0f)) { + AssertWarn(false, "SAHARA: Using an Accu Map requires SM 3.0 and a normal map."); + newFeatures.removeFeature(MFT_AccuMap); + mHasAccumulation = false; + } + + // if we still have the AccuMap feature, we add all accu constant features + if (newFeatures[MFT_AccuMap]) { + // add the dependencies of the accu map + newFeatures.addFeature(MFT_AccuScale); + newFeatures.addFeature(MFT_AccuDirection); + newFeatures.addFeature(MFT_AccuStrength); + newFeatures.addFeature(MFT_AccuCoverage); + newFeatures.addFeature(MFT_AccuSpecular); + // now remove some features that are not compatible with this + newFeatures.removeFeature(MFT_UseInstancing); + } + // If there is lightmapped geometry support, add the MRT light buffer features if(bEnableMRTLightmap) { // If this material has a lightmap, pass it through, and flag it to - // send it's output to RenderTarget1 + // send it's output to RenderTarget3 if( fd.features.hasFeature( MFT_ToneMap ) ) { newFeatures.addFeature( MFT_ToneMap ); @@ -590,10 +740,16 @@ void ProcessedPrePassMaterial::_determineFeatures( U32 stageNum, else { // If this object isn't lightmapped, add a zero-output feature to it - newFeatures.addFeature( MFT_RenderTarget1_Zero ); + newFeatures.addFeature( MFT_RenderTarget3_Zero ); } } + // cubemaps only available on stage 0 for now - bramage + if ( stageNum < 1 && + ( ( mMaterial->mCubemapData && mMaterial->mCubemapData->mCubemap ) || + mMaterial->mDynamicCubemap ) ) + newFeatures.addFeature( MFT_CubeMap ); + #endif // Set the new features. @@ -602,8 +758,54 @@ void ProcessedPrePassMaterial::_determineFeatures( U32 stageNum, U32 ProcessedPrePassMaterial::getNumStages() { - // Return 1 stage so this material gets processed for sure - return 1; + // Loops through all stages to determine how many + // stages we actually use. + // + // The first stage is always active else we shouldn't be + // creating the material to begin with. + U32 numStages = 1; + + U32 i; + for( i=1; imCubemapData || mMaterial->mDynamicCubemap ) + { + numStages++; + continue; + } + } + + // If we have a texture for the a feature the + // stage is active. + if ( mStages[i].hasValidTex() ) + stageActive = true; + + // If this stage has specular lighting, it's active + if ( mMaterial->mPixelSpecular[i] ) + stageActive = true; + + // If this stage has diffuse color, it's active + if ( mMaterial->mDiffuse[i].alpha > 0 && + mMaterial->mDiffuse[i] != ColorF::WHITE ) + stageActive = true; + + // If we have a Material that is vertex lit + // then it may not have a texture + if( mMaterial->mVertLit[i] ) + stageActive = true; + + // Increment the number of active stages + numStages += stageActive; + } + + return numStages; } void ProcessedPrePassMaterial::addStateBlockDesc(const GFXStateBlockDesc& desc) @@ -633,7 +835,7 @@ void ProcessedPrePassMaterial::addStateBlockDesc(const GFXStateBlockDesc& desc) if ( isTranslucent ) { prePassStateBlock.setBlend( true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha ); - prePassStateBlock.setColorWrites( true, true, false, false ); + prePassStateBlock.setColorWrites(false, false, false, true); } // Enable z reads, but only enable zwrites if we're not translucent. @@ -663,7 +865,22 @@ ProcessedMaterial* PrePassMatInstance::getShaderMaterial() bool PrePassMatInstance::init( const FeatureSet &features, const GFXVertexFormat *vertexFormat ) { - return Parent::init( features, vertexFormat ); + bool vaild = Parent::init(features, vertexFormat); + + if (mMaterial && mMaterial->mDiffuseMapFilename[0].isNotEmpty() && mMaterial->mDiffuseMapFilename[0].substr(0, 1).equal("#")) + { + String texTargetBufferName = mMaterial->mDiffuseMapFilename[0].substr(1, mMaterial->mDiffuseMapFilename[0].length() - 1); + NamedTexTarget *texTarget = NamedTexTarget::find(texTargetBufferName); + RenderPassData* rpd = getPass(0); + + if (rpd) + { + rpd->mTexSlot[0].texTarget = texTarget; + rpd->mTexType[0] = Material::TexTarget; + rpd->mSamplerNames[0] = "diffuseMap"; + } + } + return vaild; } PrePassMatInstanceHook::PrePassMatInstanceHook( MatInstance *baseMatInst, @@ -850,3 +1067,77 @@ Var* LinearEyeDepthConditioner::printMethodHeader( MethodType methodType, const return retVal; } + +void RenderPrePassMgr::_initShaders() +{ + if ( mClearGBufferShader ) return; + + // Find ShaderData + ShaderData *shaderData; + mClearGBufferShader = Sim::findObject( "ClearGBufferShader", shaderData ) ? shaderData->getShader() : NULL; + if ( !mClearGBufferShader ) + Con::errorf( "RenderPrePassMgr::_initShaders - could not find ClearGBufferShader" ); + + // Create StateBlocks + GFXStateBlockDesc desc; + desc.setCullMode( GFXCullNone ); + desc.setBlend( true ); + desc.setZReadWrite( false, false ); + desc.samplersDefined = true; + desc.samplers[0].addressModeU = GFXAddressWrap; + desc.samplers[0].addressModeV = GFXAddressWrap; + desc.samplers[0].addressModeW = GFXAddressWrap; + desc.samplers[0].magFilter = GFXTextureFilterLinear; + desc.samplers[0].minFilter = GFXTextureFilterLinear; + desc.samplers[0].mipFilter = GFXTextureFilterLinear; + desc.samplers[0].textureColorOp = GFXTOPModulate; + + mStateblock = GFX->createStateBlock( desc ); + + // Set up shader constants. + mShaderConsts = mClearGBufferShader->allocConstBuffer(); + mSpecularStrengthSC = mClearGBufferShader->getShaderConstHandle( "$specularStrength" ); + mSpecularPowerSC = mClearGBufferShader->getShaderConstHandle( "$specularPower" ); +} + +void RenderPrePassMgr::clearBuffers() +{ + // Clear z-buffer. + GFX->clear( GFXClearTarget | GFXClearZBuffer | GFXClearStencil, ColorI::ZERO, 1.0f, 0); + + if ( !mClearGBufferShader ) + return; + + GFXTransformSaver saver; + + // Clear the g-buffer. + RectI box(-1, -1, 3, 3); + GFX->setWorldMatrix( MatrixF::Identity ); + GFX->setViewMatrix( MatrixF::Identity ); + GFX->setProjectionMatrix( MatrixF::Identity ); + + GFX->setShader(mClearGBufferShader); + GFX->setStateBlock(mStateblock); + + Point2F nw(-0.5,-0.5); + Point2F ne(0.5,-0.5); + + GFXVertexBufferHandle verts(GFX, 4, GFXBufferTypeVolatile); + verts.lock(); + + F32 ulOffset = 0.5f - GFX->getFillConventionOffset(); + + Point2F upperLeft(-1.0, -1.0); + Point2F lowerRight(1.0, 1.0); + + verts[0].point.set( upperLeft.x+nw.x+ulOffset, upperLeft.y+nw.y+ulOffset, 0.0f ); + verts[1].point.set( lowerRight.x+ne.x, upperLeft.y+ne.y+ulOffset, 0.0f ); + verts[2].point.set( upperLeft.x-ne.x+ulOffset, lowerRight.y-ne.y, 0.0f ); + verts[3].point.set( lowerRight.x-nw.x, lowerRight.y-nw.y, 0.0f ); + + verts.unlock(); + + GFX->setVertexBuffer( verts ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); + GFX->setShader(NULL); +} diff --git a/Engine/source/renderInstance/renderPrePassMgr.h b/Engine/source/renderInstance/renderPrePassMgr.h index 70a36eb84e..bf36c6218c 100644 --- a/Engine/source/renderInstance/renderPrePassMgr.h +++ b/Engine/source/renderInstance/renderPrePassMgr.h @@ -43,6 +43,10 @@ class RenderPrePassMgr : public RenderTexTargetBinManager // registered buffer name static const String BufferName; + // andremwac: Deferred Rendering + static const String ColorBufferName; + static const String MatInfoBufferName; + // Generic PrePass Render Instance Type static const RenderInstType RIT_PrePass; @@ -93,6 +97,22 @@ class RenderPrePassMgr : public RenderTexTargetBinManager virtual void _createPrePassMaterial(); bool _lightManagerActivate(bool active); + + // Deferred Shading + GFXVertexBufferHandle mClearGBufferVerts; + GFXShaderRef mClearGBufferShader; + GFXStateBlockRef mStateblock; + NamedTexTarget mColorTarget; + NamedTexTarget mMatInfoTarget; + GFXTexHandle mColorTex; + GFXTexHandle mMatInfoTex; + GFXShaderConstBufferRef mShaderConsts; + GFXShaderConstHandle *mSpecularStrengthSC; + GFXShaderConstHandle *mSpecularPowerSC; + +public: + void clearBuffers(); + void _initShaders(); }; //------------------------------------------------------------------------------ diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs new file mode 100644 index 0000000000..8a1df2c67d --- /dev/null +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs @@ -0,0 +1,147 @@ +singleton ShaderData( ClearGBufferShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl"; + + pixVersion = 2.0; +}; + +singleton ShaderData( DeferredColorShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredColorShaderP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl"; + + pixVersion = 2.0; +}; + +// Primary Deferred Shader +new GFXStateBlockData( AL_DeferredShadingState : PFX_DefaultStateBlock ) +{ + cullMode = GFXCullNone; + + blendDefined = true; + blendEnable = true; + blendSrc = GFXBlendSrcAlpha; + blendDest = GFXBlendInvSrcAlpha; + + samplersDefined = true; + samplerStates[0] = SamplerWrapLinear; + samplerStates[1] = SamplerWrapLinear; + samplerStates[2] = SamplerWrapLinear; + samplerStates[3] = SamplerWrapLinear; +}; + +new ShaderData( AL_DeferredShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredShadingP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredShadingP.glsl"; + + samplerNames[0] = "colorBufferTex"; + samplerNames[1] = "lightPrePassTex"; + samplerNames[2] = "matInfoTex"; + samplerNames[3] = "prepassTex"; + + pixVersion = 2.0; +}; + +singleton PostEffect( AL_DeferredShading ) +{ + renderTime = "PFXBeforeBin"; + renderBin = "SkyBin"; + shader = AL_DeferredShader; + stateBlock = AL_DeferredShadingState; + texture[0] = "#color"; + texture[1] = "#lightinfo"; + texture[2] = "#matinfo"; + texture[3] = "#prepass"; + + target = "$backBuffer"; + renderPriority = 10000; + allowReflectPass = true; +}; + +// Debug Shaders. +new ShaderData( AL_ColorBufferShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/dbgColorBufferP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl"; + + samplerNames[0] = "colorBufferTex"; + pixVersion = 2.0; +}; + +singleton PostEffect( AL_ColorBufferVisualize ) +{ + shader = AL_ColorBufferShader; + stateBlock = AL_DefaultVisualizeState; + texture[0] = "#color"; + target = "$backBuffer"; + renderPriority = 9999; +}; + +/// Toggles the visualization of the AL lighting specular power buffer. +function toggleColorBufferViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_ColorBufferShaderVar = AL_ColorBufferVisualize.isEnabled() ? false : true; + AL_ColorBufferVisualize.toggle(); + } + else if ( %enable ) + { + AL_DeferredShading.disable(); + AL_ColorBufferVisualize.enable(); + } + else if ( !%enable ) + { + AL_ColorBufferVisualize.disable(); + AL_DeferredShading.enable(); + } +} + +new ShaderData( AL_SpecMapShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl"; + + samplerNames[0] = "matinfoTex"; + pixVersion = 2.0; +}; + +singleton PostEffect( AL_SpecMapVisualize ) +{ + shader = AL_SpecMapShader; + stateBlock = AL_DefaultVisualizeState; + texture[0] = "#matinfo"; + target = "$backBuffer"; + renderPriority = 9999; +}; + +/// Toggles the visualization of the AL lighting specular power buffer. +function toggleSpecMapViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_SpecMapShaderVar = AL_SpecMapVisualize.isEnabled() ? false : true; + AL_SpecMapVisualize.toggle(); + } + else if ( %enable ) + AL_SpecMapVisualize.enable(); + else if ( !%enable ) + AL_SpecMapVisualize.disable(); +} \ No newline at end of file diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs index 22665120df..fcaf72942b 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/lightViz.cs @@ -56,7 +56,7 @@ OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl"; - samplerNames[0] = "prepassBuffer"; + samplerNames[0] = "prepassTex"; samplerNames[1] = "depthViz"; pixVersion = 2.0; @@ -113,7 +113,7 @@ singleton PostEffect( AL_GlowVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl"; - samplerNames[0] = "prepassBuffer"; + samplerNames[0] = "prepassTex"; pixVersion = 2.0; }; @@ -149,7 +149,7 @@ singleton PostEffect( AL_NormalsVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl"; - samplerNames[0] = "lightInfoBuffer"; + samplerNames[0] = "lightPrePassTex"; pixVersion = 2.0; }; @@ -184,7 +184,7 @@ singleton PostEffect( AL_LightColorVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl"; - samplerNames[0] = "lightInfoBuffer"; + samplerNames[0] = "lightPrePassTex"; pixVersion = 2.0; }; @@ -280,3 +280,16 @@ function toggleLightSpecularViz( %enable ) AL_LightSpecularVisualize.disable(); } +function toggleBackbufferViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_BackbufferVisualizeVar = AL_DeferredShading.isEnabled() ? true : false; + AL_DeferredShading.toggle(); + } + else if ( %enable ) + AL_DeferredShading.disable(); + else if ( !%enable ) + AL_DeferredShading.enable(); +} + diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl new file mode 100644 index 0000000000..349c943f9d --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl @@ -0,0 +1,31 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "shadergen:/autogenConditioners.h" +#include "../../postfx/postFx.hlsl" + + +float4 main( PFXVertToPix IN, + uniform sampler2D colorBufferTex : register(S0) ) : COLOR0 +{ + return float4(tex2D( colorBufferTex, IN.uv0 ).rgb, 1.0); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl new file mode 100644 index 0000000000..ba5f2c0e18 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl @@ -0,0 +1,32 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "shadergen:/autogenConditioners.h" +#include "../../postfx/postFx.hlsl" + + +float4 main( PFXVertToPix IN, + uniform sampler2D matinfoTex : register(S0) ) : COLOR0 +{ + float specular = tex2D( matinfoTex, IN.uv0 ).b; + return float4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl new file mode 100644 index 0000000000..df98702480 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl @@ -0,0 +1,47 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +struct Fragout +{ + float4 col : COLOR0; + float4 col1 : COLOR1; + float4 col2 : COLOR2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( ) +{ + Fragout OUT; + + // Clear Prepass Buffer ( Normals/Depth ); + OUT.col = float4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT.col1 = float4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT.col2 = float4(0.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl new file mode 100644 index 0000000000..80e6acde07 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "shadergen:/autogenConditioners.h" +#include "../../postfx/postFx.hlsl" +#include "shaders/common/torque.hlsl" + + +float4 main( PFXVertToPix IN, + uniform sampler2D colorBufferTex : register(S0), + uniform sampler2D lightPrePassTex : register(S1), + uniform sampler2D matInfoTex : register(S2), + uniform sampler2D prepassTex : register(S3)) : COLOR0 +{ + float4 lightBuffer = tex2D( lightPrePassTex, IN.uv0 ); + float4 colorBuffer = tex2D( colorBufferTex, IN.uv0 ); + float4 matInfo = tex2D( matInfoTex, IN.uv0 ); + float specular = saturate(lightBuffer.a); + float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + + if (depth>0.9999) + return float4(0,0,0,0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= float4(lightBuffer.rgb, 1.0); + colorBuffer += float4(specular, specular, specular, 1.0); + + return hdrEncode( float4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl new file mode 100644 index 0000000000..48a96d47df --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl @@ -0,0 +1,34 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postfx/gl/postFx.glsl" + +uniform sampler2D colorBufferTex; + +out vec4 OUT_FragColor0; + +void main() +{ + OUT_FragColor0 = vec4(texture( colorBufferTex, uv0 ).rgb, 1.0); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl new file mode 100644 index 0000000000..4ba9f67347 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl @@ -0,0 +1,34 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postfx/gl/postFx.glsl" + +uniform sampler2D matinfoTex; + +out vec4 OUT_FragColor0; + +void main() +{ + float specular = texture( matinfoTex, uv0 ).a; + OUT_FragColor0 = vec4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl new file mode 100644 index 0000000000..39dc0dc9fd --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +out vec4 OUT_col; +out vec4 OUT_col1; +out vec4 OUT_col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + // Clear Prepass Buffer ( Normals/Depth ); + OUT_col = vec4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT_col1 = vec4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT_col2 = vec4(0.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl new file mode 100644 index 0000000000..4ee4b1d81f --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postfx/gl/postFx.glsl" +#include "../../../gl/torque.glsl" + +uniform sampler2D colorBufferTex; +uniform sampler2D lightPrePassTex; +uniform sampler2D matInfoTex; +uniform sampler2D prepassTex; + +out vec4 OUT_col; + +void main() +{ + float depth = prepassUncondition( prepassTex, uv0 ).w; + if (depth>0.9999) + { + OUT_col = vec4(0.0); + return; + } + vec4 lightBuffer = texture( lightPrePassTex, uv0 ); + vec4 colorBuffer = texture( colorBufferTex, uv0 ); + vec4 matInfo = texture( matInfoTex, uv0 ); + float specular = clamp(lightBuffer.a,0.0,1.0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= vec4(lightBuffer.rgb, 1.0); + colorBuffer += vec4(specular, specular, specular, 1.0); + + OUT_col = hdrEncode( vec4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Full/game/tools/worldEditor/main.cs b/Templates/Full/game/tools/worldEditor/main.cs index a6ecb2872b..59301ea53d 100644 --- a/Templates/Full/game/tools/worldEditor/main.cs +++ b/Templates/Full/game/tools/worldEditor/main.cs @@ -120,6 +120,9 @@ function initializeWorldEditor() EVisibility.addOption( "AL: Light Specular Viz", "$AL_LightSpecularVisualizeVar", "toggleLightSpecularViz" ); EVisibility.addOption( "AL: Normals Viz", "$AL_NormalsVisualizeVar", "toggleNormalsViz" ); EVisibility.addOption( "AL: Depth Viz", "$AL_DepthVisualizeVar", "toggleDepthViz" ); + EVisibility.addOption( "AL: Color Buffer", "$AL_ColorBufferShaderVar", "toggleColorBufferViz" ); + EVisibility.addOption( "AL: Spec Map", "$AL_SpecMapShaderVar", "toggleSpecMapViz"); + EVisibility.addOption( "AL: Backbuffer", "$AL_BackbufferVisualizeVar", "toggleBackbufferViz" ); EVisibility.addOption( "AL: Glow Buffer", "$AL_GlowVisualizeVar", "toggleGlowViz" ); EVisibility.addOption( "AL: PSSM Cascade Viz", "$AL::PSSMDebugRender", "" ); EVisibility.addOption( "Frustum Lock", "$Scene::lockCull", "" ); From 196b214eae6d27abcdbdb94fe689938b69821e18 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 16 Feb 2016 02:23:23 -0600 Subject: [PATCH 113/324] engine: defines and alters a series of material features for deferred shading in order to define a fully fleshed out multiple render target gbuffer patterned after the general principles outlined http://www.catalinzima.com/xna/tutorials/deferred-rendering-in-xna/creating-the-g-buffer/ (though I cannot stress enough *not* using the identical layout) script: removes dead material features (ie: those that never functioned to begin with) shader: bool getFlag(float flags, int num) definition for retreiving data from the 3rd (matinfo) gbuffer slot's red channel (more on that shortly) purpose: _A)_ Small primer on how material features function: When a https://github.com/GarageGames/Torque3D/search?utf8=%E2%9C%93&q=_determineFeatures call is executed, certain conditions trigger a given .addFeature(MFT_SOMEFEATURE) call based upon material definition entries, be it a value, a texture reference, or even the presence or lack thereof for another feature. In general terms, the first to be executed is ProcessedShaderMaterial::_determineFeatures followed by ProcessedPrePassMaterial::_determineFeatures. The next commit will provide the bindings there. For now it's enough to understand that one of those two will trigger the shadergen subsystem, when rendering a material, to check it's associated list of features and spit out a shader if one is not already defined, or reference a pre-existing one that includes codelines determined by that list of features. Relevant execution of this is as follows: DeclareFeatureType( MFT_DeferredDiffuseMap ); - Name ImplementFeatureType( MFT_DeferredDiffuseMap, MFG_Texture, 2.0f, false ); - Codeline Insertion Order FEATUREMGR->registerFeature( MFT_DeferredDiffuseMap, new DeferredDiffuseMapHLSL ); - Hook to class which actually generates code alternately FEATUREMGR->registerFeature( MFT_Imposter, new NamedFeatureHLSL( "Imposter" ) ); - a simple feature that serves no purpose further than as a test of it's existence (to modify other features for instance) class DeferredDiffuseMapHLSL : public ShaderFeatureHLSL - Class definition { getName -embeded in the proceedural shader as a remline both up top and before actual code insertions processPix - pixel shader codeline insertions getOutputTargets - used to determine which buffer is written to (assumes only one. depending on branched logic, older features that may be run for either forward or deferred rendering depending on circumstance may have a logical switch based on additional feature flags. as an example: TerrainBaseMapFeatHLSL::getOutputTargets) getResources - associated with the Resources struct, closely aligned with the hardware regestry getBlendOp - used to determine what blend operation to use if a material requires a second pass (defaults to overwriting) setTexData - ??? processVert - vertex shader codeline insertions }; _B)_ The resultant Gbuffer layout defined by the previous commit therefore is as follows: defaultrendertarget (referred to in shaders as out.col or col depending on GFX plugin) contains either lighting and normal data, or color data depending on if it is used in a deferred or forward lit manner (note for forward lit, this data is replaced as a second step with color. why custommaterials have traditionally had problems with lighting) color1 (referred to in shaders as out.col1 or col1 depending on GFX plugin) RGB color data and an A for blending operations (including transparency) color2 (referred to in shaders as out.col2 or col2 depending on GFX plugin) contains: red channel comprising material flags such as metalness, emissive, ect, green channel for translucency (light shining through, as oposed to see-through transparency), blue for blue for specular strength (how much light influences net color) alpha for specular power (generally how reflective/glossy an object is) long term purpose: further down the line, these will be used to condition data for use with a PBR subsystem, with further corrections to the underlying mathematics, strength being replaced by roughness, and power by metalness --- .../glsl/deferredShadingFeaturesGLSL.cpp | 190 +++++++++++++ .../glsl/deferredShadingFeaturesGLSL.h | 85 ++++++ .../hlsl/deferredShadingFeaturesHLSL.cpp | 187 +++++++++++++ .../hlsl/deferredShadingFeaturesHLSL.h | 84 ++++++ .../source/materials/materialFeatureTypes.cpp | 20 +- .../source/materials/materialFeatureTypes.h | 12 +- .../shaderGen/GLSL/shaderFeatureGLSL.cpp | 184 +++++++++---- .../source/shaderGen/GLSL/shaderFeatureGLSL.h | 11 + Engine/source/shaderGen/GLSL/shaderGenGLSL.h | 5 +- .../shaderGen/GLSL/shaderGenGLSLInit.cpp | 21 +- .../shaderGen/HLSL/shaderFeatureHLSL.cpp | 152 ++++++++-- .../source/shaderGen/HLSL/shaderFeatureHLSL.h | 11 + .../shaderGen/HLSL/shaderGenHLSLInit.cpp | 12 + Engine/source/shaderGen/shaderFeature.cpp | 18 +- Engine/source/shaderGen/shaderGenVars.cpp | 5 +- Engine/source/shaderGen/shaderGenVars.h | 3 + .../source/terrain/glsl/terrFeatureGLSL.cpp | 259 ++++++++++++------ Engine/source/terrain/glsl/terrFeatureGLSL.h | 17 ++ .../source/terrain/hlsl/terrFeatureHLSL.cpp | 179 ++++++------ Engine/source/terrain/hlsl/terrFeatureHLSL.h | 17 ++ Engine/source/terrain/terrCellMaterial.cpp | 30 +- Engine/source/terrain/terrFeatureTypes.cpp | 6 +- Engine/source/terrain/terrFeatureTypes.h | 6 + .../game/shaders/common/terrain/terrain.glsl | 1 + .../gui/guiMaterialPropertiesWindow.ed.gui | 228 +-------------- 25 files changed, 1257 insertions(+), 486 deletions(-) create mode 100644 Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp create mode 100644 Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h create mode 100644 Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp create mode 100644 Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp new file mode 100644 index 0000000000..e457b9eaba --- /dev/null +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp @@ -0,0 +1,190 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "lighting/advanced/glsl/deferredShadingFeaturesGLSL.h" + +#include "lighting/advanced/advancedLightBinManager.h" +#include "shaderGen/langElement.h" +#include "shaderGen/shaderOp.h" +#include "shaderGen/conditionerFeature.h" +#include "renderInstance/renderPrePassMgr.h" +#include "materials/processedMaterial.h" +#include "materials/materialFeatureTypes.h" + + +//**************************************************************************** +// Deferred Shading Features +//**************************************************************************** + +// Specular Map -> Blue of Material Buffer ( greyscaled ) +// Gloss Map (Alpha Channel of Specular Map) -> Alpha ( Spec Power ) of Material Info Buffer. +void DeferredSpecMapGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // Get the texture coord. + Var *texCoord = getInTexCoord( "texCoord", "vec2", true, componentList ); + + // search for color var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + MultiLine * meta = new MultiLine; + if ( !material ) + { + // create color var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + // create texture var + Var *specularMap = new Var; + specularMap->setType( "sampler2D" ); + specularMap->setName( "specularMap" ); + specularMap->uniform = true; + specularMap->sampler = true; + specularMap->constNum = Var::getTexUnitNum(); + LangElement *texOp = new GenOp( "tex2D(@, @)", specularMap, texCoord ); + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.b = dot(tex2D(@, @).rgb, vec3(0.3, 0.59, 0.11));\r\n", material, specularMap, texCoord)); + meta->addStatement(new GenOp(" @.a = tex2D(@, @).a;\r\n", material, specularMap, texCoord)); + output = meta; +} + +ShaderFeature::Resources DeferredSpecMapGLSL::getResources( const MaterialFeatureData &fd ) +{ + Resources res; + res.numTex = 1; + res.numTexReg = 1; + + return res; +} + +void DeferredSpecMapGLSL::setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ) +{ + GFXTextureObject *tex = stageDat.getTex( MFT_SpecularMap ); + if ( tex ) + { + passData.mTexType[ texIndex ] = Material::Standard; + passData.mSamplerNames[ texIndex ] = "specularMap"; + passData.mTexSlot[ texIndex++ ].texObject = tex; + } +} + +void DeferredSpecMapGLSL::processVert( Vector &componentList, + const MaterialFeatureData &fd ) +{ + MultiLine *meta = new MultiLine; + getOutTexCoord( "texCoord", + "vec2", + true, + fd.features[MFT_TexAnim], + meta, + componentList ); + output = meta; +} + +// Material Info Flags -> Red ( Flags ) of Material Info Buffer. +void DeferredMatInfoFlagsGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + MultiLine *meta = new MultiLine; + + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + Var *matInfoFlags = new Var; + matInfoFlags->setType( "float" ); + matInfoFlags->setName( "matInfoFlags" ); + matInfoFlags->uniform = true; + matInfoFlags->constSortPos = cspPotentialPrimitive; + + meta->addStatement(output = new GenOp(" @.r = @;\r\n", material, matInfoFlags)); + output = meta; +} + +// Spec Strength -> Blue Channel of Material Info Buffer. +// Spec Power -> Alpha Channel ( of Material Info Buffer. +void DeferredSpecVarsGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + Var *specStrength = new Var; + specStrength->setType( "float" ); + specStrength->setName( "specularStrength" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + + Var *specPower = new Var; + specPower->setType("float"); + specPower->setName("specularPower"); + specPower->uniform = true; + specPower->constSortPos = cspPotentialPrimitive; + + MultiLine *meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.b = @/128;\r\n", material, specStrength)); + meta->addStatement(new GenOp(" @.a = @/5;\r\n", material, specPower)); + output = meta; +} + +// Black -> Blue and Alpha of Color Buffer (representing no specular) +void DeferredEmptySpecGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "vec4" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName("OUT"); + } + + MultiLine * meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.ba = vec2(0.0);\r\n", material)); + output = meta; +} diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h new file mode 100644 index 0000000000..f687bd9171 --- /dev/null +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.h @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DEFERREDSHADINGGLSL_H_ +#define _DEFERREDSHADINGGLSL_H_ + +#include "shaderGen/GLSL/shaderFeatureGLSL.h" +#include "shaderGen/GLSL/bumpGLSL.h" +#include "shaderGen/GLSL/pixSpecularGLSL.h" + +// Specular Outputs +class DeferredSpecMapGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Map"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual Resources getResources( const MaterialFeatureData &fd ); + + // Sets textures and texture flags for current pass + virtual void setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ); + + virtual void processVert( Vector &componentList, + const MaterialFeatureData &fd ); +}; + +class DeferredMatInfoFlagsGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Mat Info Flags"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +class DeferredSpecVarsGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Explicit Numbers"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + + +class DeferredEmptySpecGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Empty Specular"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +#endif \ No newline at end of file diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp new file mode 100644 index 0000000000..6b8b990a05 --- /dev/null +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp @@ -0,0 +1,187 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h" + +#include "lighting/advanced/advancedLightBinManager.h" +#include "shaderGen/langElement.h" +#include "shaderGen/shaderOp.h" +#include "shaderGen/conditionerFeature.h" +#include "renderInstance/renderPrePassMgr.h" +#include "materials/processedMaterial.h" +#include "materials/materialFeatureTypes.h" + + +//**************************************************************************** +// Deferred Shading Features +//**************************************************************************** + +// Specular Map -> Blue of Material Buffer ( greyscaled ) +// Gloss Map (Alpha Channel of Specular Map) -> Alpha ( Spec Power ) of Material Info Buffer. +void DeferredSpecMapHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // Get the texture coord. + Var *texCoord = getInTexCoord( "texCoord", "float2", true, componentList ); + + // search for color var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + MultiLine * meta = new MultiLine; + if ( !material ) + { + // create color var + material = new Var; + material->setType( "fragout" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName( "OUT" ); + } + + // create texture var + Var *specularMap = new Var; + specularMap->setType( "sampler2D" ); + specularMap->setName( "specularMap" ); + specularMap->uniform = true; + specularMap->sampler = true; + specularMap->constNum = Var::getTexUnitNum(); + LangElement *texOp = new GenOp( "tex2D(@, @)", specularMap, texCoord ); + + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.b = dot(tex2D(@, @).rgb, float3(0.3, 0.59, 0.11));\r\n", material, specularMap, texCoord)); + meta->addStatement(new GenOp(" @.a = tex2D(@, @).a;\r\n", material, specularMap, texCoord)); + output = meta; +} + +ShaderFeature::Resources DeferredSpecMapHLSL::getResources( const MaterialFeatureData &fd ) +{ + Resources res; + res.numTex = 1; + res.numTexReg = 1; + + return res; +} + +void DeferredSpecMapHLSL::setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ) +{ + GFXTextureObject *tex = stageDat.getTex( MFT_SpecularMap ); + if ( tex ) + { + passData.mTexType[ texIndex ] = Material::Standard; + passData.mSamplerNames[ texIndex ] = "specularMap"; + passData.mTexSlot[ texIndex++ ].texObject = tex; + } +} + +void DeferredSpecMapHLSL::processVert( Vector &componentList, + const MaterialFeatureData &fd ) +{ + MultiLine *meta = new MultiLine; + getOutTexCoord( "texCoord", + "float2", + true, + fd.features[MFT_TexAnim], + meta, + componentList ); + output = meta; +} + +// Material Info Flags -> Red ( Flags ) of Material Info Buffer. +void DeferredMatInfoFlagsHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "fragout" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName( "OUT" ); + } + + Var *matInfoFlags = new Var; + matInfoFlags->setType( "float" ); + matInfoFlags->setName( "matInfoFlags" ); + matInfoFlags->uniform = true; + matInfoFlags->constSortPos = cspPotentialPrimitive; + + output = new GenOp( " @.r = @;\r\n", material, matInfoFlags ); +} + +// Spec Strength -> Blue Channel of Material Info Buffer. +// Spec Power -> Alpha Channel ( of Material Info Buffer. +void DeferredSpecVarsHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + if ( !material ) + { + // create material var + material = new Var; + material->setType( "fragout" ); + material->setName( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + material->setStructName( "OUT" ); + } + + Var *specStrength = new Var; + specStrength->setType( "float" ); + specStrength->setName( "specularStrength" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + + Var *specPower = new Var; + specPower->setType( "float" ); + specPower->setName( "specularPower" ); + specPower->uniform = true; + specPower->constSortPos = cspPotentialPrimitive; + + MultiLine * meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.b = @/128;\r\n", material, specStrength)); + meta->addStatement(new GenOp(" @.a = @/5;\r\n", material, specPower)); + output = meta; +} + +// Black -> Blue and Alpha of matinfo Buffer (representing no specular), White->G (representing No AO) +void DeferredEmptySpecHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) +{ + // search for material var + Var *material = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget2)); + if (!material) + { + // create color var + material = new Var; + material->setType("fragout"); + material->setName(getOutputTargetVarName(ShaderFeature::RenderTarget2)); + material->setStructName("OUT"); + } + + MultiLine * meta = new MultiLine; + //matinfo.g slot reserved for AO later + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); + meta->addStatement(new GenOp(" @.ba = 0.0;\r\n", material)); + output = meta; +} diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h new file mode 100644 index 0000000000..9f43321b79 --- /dev/null +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h @@ -0,0 +1,84 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _DEFERREDSHADINGHLSL_H_ +#define _DEFERREDSHADINGHLSL_H_ + +#include "shaderGen/HLSL/shaderFeatureHLSL.h" +#include "shaderGen/HLSL/bumpHLSL.h" +#include "shaderGen/HLSL/pixSpecularHLSL.h" + +// Specular Outputs +class DeferredSpecMapHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Map"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual Resources getResources( const MaterialFeatureData &fd ); + + // Sets textures and texture flags for current pass + virtual void setTexData( Material::StageData &stageDat, + const MaterialFeatureData &fd, + RenderPassData &passData, + U32 &texIndex ); + + virtual void processVert( Vector &componentList, + const MaterialFeatureData &fd ); +}; + +class DeferredMatInfoFlagsHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Mat Info Flags"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +class DeferredSpecVarsHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Specular Explicit Numbers"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +class DeferredEmptySpecHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Empty Specular"; } + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd ); + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const { return ShaderFeature::RenderTarget2; } +}; + +#endif \ No newline at end of file diff --git a/Engine/source/materials/materialFeatureTypes.cpp b/Engine/source/materials/materialFeatureTypes.cpp index 9cdc574156..8ea7fbe8c7 100644 --- a/Engine/source/materials/materialFeatureTypes.cpp +++ b/Engine/source/materials/materialFeatureTypes.cpp @@ -56,10 +56,9 @@ ImplementFeatureType( MFT_LightMap, MFG_Lighting, 4.0f, true ); ImplementFeatureType( MFT_ToneMap, MFG_Lighting, 5.0f, true ); ImplementFeatureType( MFT_VertLitTone, MFG_Lighting, 6.0f, false ); ImplementFeatureType( MFT_VertLit, MFG_Lighting, 7.0f, true ); -ImplementFeatureType( MFT_EnvMap, MFG_Lighting, 8.0f, true ); -ImplementFeatureType( MFT_CubeMap, MFG_Lighting, 9.0f, true ); -ImplementFeatureType( MFT_PixSpecular, MFG_Lighting, 10.0f, true ); -ImplementFeatureType( MFT_MinnaertShading, MFG_Lighting, 12.0f, true ); +ImplementFeatureType( MFT_PixSpecular, MFG_Lighting, 9.0f, true ); +ImplementFeatureType( MFT_MinnaertShading, MFG_Lighting, 10.0f, true ); +ImplementFeatureType( MFT_CubeMap, MFG_Lighting, 11.0f, true ); ImplementFeatureType( MFT_GlowMask, MFG_PostLighting, 1.0f, true ); ImplementFeatureType( MFT_Visibility, MFG_PostLighting, 2.0f, true ); @@ -85,6 +84,8 @@ ImplementFeatureType( MFT_NormalsOut, MFG_PreLighting, 1.0f, false ); ImplementFeatureType( MFT_LightbufferMRT, MFG_PreLighting, 1.0f, false ); ImplementFeatureType( MFT_RenderTarget1_Zero, MFG_PreTexture, 1.0f, false ); +ImplementFeatureType( MFT_RenderTarget2_Zero, MFG_PreTexture, 1.0f, false ); +ImplementFeatureType( MFT_RenderTarget3_Zero, MFG_PreTexture, 1.0f, false ); ImplementFeatureType( MFT_Foliage, MFG_PreTransform, 1.0f, false ); @@ -92,4 +93,13 @@ ImplementFeatureType( MFT_ParticleNormal, MFG_PreTransform, 2.0f, false ); ImplementFeatureType( MFT_ForwardShading, U32(-1), -1, true ); -ImplementFeatureType( MFT_ImposterVert, MFG_PreTransform, 1.0, false ); \ No newline at end of file +ImplementFeatureType( MFT_ImposterVert, MFG_PreTransform, 1.0, false ); + +// Deferred Shading +ImplementFeatureType( MFT_isDeferred, U32(-1), -1, true ); +ImplementFeatureType( MFT_SkyBox, MFG_Transform, 1.0f, true ); +ImplementFeatureType( MFT_DeferredEmptySpec, MFG_Texture, 8.01f, false ); + +ImplementFeatureType( MFT_DeferredSpecMap, MFG_Texture, 8.2f, false ); +ImplementFeatureType( MFT_DeferredSpecVars, MFG_Texture, 8.5f, false ); +ImplementFeatureType( MFT_DeferredMatInfoFlags, MFG_Texture, 8.7f, false ); diff --git a/Engine/source/materials/materialFeatureTypes.h b/Engine/source/materials/materialFeatureTypes.h index c302045c2d..a002cd190d 100644 --- a/Engine/source/materials/materialFeatureTypes.h +++ b/Engine/source/materials/materialFeatureTypes.h @@ -121,7 +121,6 @@ DeclareFeatureType( MFT_ToneMap ); DeclareFeatureType( MFT_VertLit ); DeclareFeatureType( MFT_VertLitTone ); -DeclareFeatureType( MFT_EnvMap ); DeclareFeatureType( MFT_CubeMap ); DeclareFeatureType( MFT_PixSpecular ); DeclareFeatureType( MFT_SpecularMap ); @@ -158,8 +157,10 @@ DeclareFeatureType( MFT_InterlacedPrePass ); /// to the second render-target DeclareFeatureType( MFT_LightbufferMRT ); -/// This feature outputs black to RenderTarget1 +/// This feature outputs black to RenderTarget3 DeclareFeatureType( MFT_RenderTarget1_Zero ); +DeclareFeatureType( MFT_RenderTarget2_Zero ); +DeclareFeatureType( MFT_RenderTarget3_Zero ); DeclareFeatureType( MFT_Foliage ); @@ -179,4 +180,11 @@ DeclareFeatureType( MFT_ForwardShading ); DeclareFeatureType( MFT_ImposterVert ); +// Deferred Shading +DeclareFeatureType( MFT_isDeferred ); +DeclareFeatureType( MFT_SkyBox ); +DeclareFeatureType( MFT_DeferredSpecMap ); +DeclareFeatureType( MFT_DeferredSpecVars ); +DeclareFeatureType( MFT_DeferredMatInfoFlags ); +DeclareFeatureType( MFT_DeferredEmptySpec ); #endif // _MATERIALFEATURETYPES_H_ diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index eed42dd682..ffd67b45da 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -156,10 +156,10 @@ LangElement *ShaderFeatureGLSL::expandNormalMap( LangElement *sampleNormalOp, } else { - // DXT Swizzle trick - meta->addStatement( new GenOp( " @ = float4( @.ag * 2.0 - 1.0, 0.0, 0.0 ); // DXTnm\r\n", normalDecl, sampleNormalOp ) ); - meta->addStatement( new GenOp( " @.z = sqrt( 1.0 - dot( @.xy, @.xy ) ); // DXTnm\r\n", normalVar, normalVar, normalVar ) ); - } + // DXT Swizzle trick + meta->addStatement( new GenOp( " @ = float4( @.ag * 2.0 - 1.0, 0.0, 0.0 ); // DXTnm\r\n", normalDecl, sampleNormalOp ) ); + meta->addStatement( new GenOp( " @.z = sqrt( 1.0 - dot( @.xy, @.xy ) ); // DXTnm\r\n", normalVar, normalVar, normalVar ) ); + } } else { @@ -708,7 +708,7 @@ void ShaderFeatureGLSL::getWsPosition( Vector &componentList, Var *objTrans = getObjTrans( componentList, useInstancing, meta ); - meta->addStatement( new GenOp( " @ = tMul( @, float4( @.xyz, 1 ) ).xyz;\r\n", + meta->addStatement( new GenOp( " @ = tMul( @, vec4( @.xyz, 1 ) ).xyz;\r\n", wsPosition, objTrans, inPosition ) ); } @@ -847,12 +847,22 @@ void DiffuseMapFeatGLSL::processVert( Vector &componentList, output = meta; } +U32 DiffuseMapFeatGLSL::getOutputTargets(const MaterialFeatureData &fd) const +{ + return fd.features[MFT_isDeferred] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + void DiffuseMapFeatGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { // grab connector texcoord register Var *inTex = getInTexCoord( "texCoord", "vec2", true, componentList ); + //determine output target + ShaderFeature::OutputTarget targ = ShaderFeature::DefaultTarget; + if (fd.features[MFT_isDeferred]) + targ = ShaderFeature::RenderTarget1; + // create texture var Var *diffuseMap = new Var; diffuseMap->setType( "sampler2D" ); @@ -869,7 +879,6 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, MultiLine * meta = new MultiLine; output = meta; - if ( fd.features[MFT_CubeMap] ) { meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", @@ -878,9 +887,8 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, inTex ) ); if (!fd.features[MFT_Imposter]) meta->addStatement( new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor) ); - - meta->addStatement( new GenOp( " @;\r\n", assignColor( diffColor, Material::Mul ) ) ); - output = meta; + + meta->addStatement( new GenOp( " @;\r\n", assignColor( diffColor, Material::Mul, NULL, targ) ) ); } else if(fd.features[MFT_DiffuseMapAtlas]) { @@ -946,8 +954,8 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, #ifdef DEBUG_ATLASED_UV_COORDS if(!fd.features[MFT_PrePassConditioner]) { - meta->addStatement(new GenOp(" @ = float4(@.xy, mipLod / @.w, 1.0);\r\n", new DecOp(diffColor), inTex, atParams)); - meta->addStatement(new GenOp(" @; return OUT;\r\n", assignColor(diffColor, Material::Mul))); + meta->addStatement(new GenOp(" @ = vec4(@.xy, mipLod / @.w, 1.0);\r\n", new DecOp(diffColor), inTex, atParams)); + meta->addStatement(new GenOp(" @; return OUT;\r\n", assignColor(diffColor, Material::Mul, NULL, targ) ) ); return; } #endif @@ -961,20 +969,20 @@ void DiffuseMapFeatGLSL::processPix( Vector &componentList, } else { - meta->addStatement(new GenOp( " @ = tex2D(@, @);\r\n", - new DecOp(diffColor), diffuseMap, inTex)); + meta->addStatement(new GenOp( " @ = tex2D(@, @);\r\n", + new DecOp(diffColor), diffuseMap, inTex)); if (!fd.features[MFT_Imposter]) meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); } - meta->addStatement(new GenOp( " @;\r\n", assignColor(diffColor, Material::Mul))); + meta->addStatement(new GenOp( " @;\r\n", assignColor(diffColor, Material::Mul, NULL, targ) ) ); } else { meta->addStatement(new GenOp("@ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex)); if (!fd.features[MFT_Imposter]) meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); - meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul))); + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul, NULL, targ))); } } @@ -1089,6 +1097,11 @@ void OverlayTexFeatGLSL::setTexData( Material::StageData &stageDat, // Diffuse color //**************************************************************************** +U32 DiffuseFeatureGLSL::getOutputTargets(const MaterialFeatureData &fd) const +{ + return fd.features[MFT_isDeferred] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + void DiffuseFeatureGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { @@ -1099,7 +1112,33 @@ void DiffuseFeatureGLSL::processPix( Vector &componentList, diffuseMaterialColor->constSortPos = cspPotentialPrimitive; MultiLine* meta = new MultiLine; - meta->addStatement( new GenOp( " @;\r\n", assignColor( diffuseMaterialColor, Material::Mul ) ) ); + Var *col = (Var*)LangElement::find("col"); + ShaderFeature::OutputTarget targ = ShaderFeature::DefaultTarget; + if (fd.features[MFT_isDeferred]) + { + targ = ShaderFeature::RenderTarget1; + + col = (Var*)LangElement::find("col1"); + MultiLine * meta = new MultiLine; + if (!col) + { + // create color var + col = new Var; + col->setType("vec4"); + col->setName(getOutputTargetVarName(targ)); + col->setStructName("OUT"); + meta->addStatement(new GenOp(" @ = vec4(1.0);\r\n", col)); + } + } + + Material::BlendOp op; + + if (fd.features[MFT_DiffuseMap]) + op = Material::Mul; + else + op = Material::None; + + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffuseMaterialColor, op, NULL, targ))); output = meta; } @@ -1231,9 +1270,9 @@ void LightmapFeatGLSL::processPix( Vector &componentList, // Lightmap has already been included in the advanced light bin, so // no need to do any sampling or anything if(bPreProcessedLighting) - statement = new GenOp( "float4(@, 1.0)", inColor ); + statement = new GenOp( "vec4(@, 1.0)", inColor ); else - statement = new GenOp( "tex2D(@, @) + float4(@.rgb, 0.0)", lightMap, inTex, inColor ); + statement = new GenOp( "tex2D(@, @) + vec4(@.rgb, 0.0)", lightMap, inTex, inColor ); } } @@ -1245,8 +1284,8 @@ void LightmapFeatGLSL::processPix( Vector &componentList, MultiLine *meta = new MultiLine; if( fd.features[MFT_LightbufferMRT] ) { - meta->addStatement( new GenOp( " @;\r\n", assignColor( statement, Material::None, NULL, ShaderFeature::RenderTarget1 ) ) ); - meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( statement, Material::None, NULL, ShaderFeature::RenderTarget3 ) ) ); + meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget3) ) ) ); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( statement, Material::Mul ) ) ); @@ -1278,7 +1317,7 @@ void LightmapFeatGLSL::setTexData( Material::StageData &stageDat, U32 LightmapFeatGLSL::getOutputTargets( const MaterialFeatureData &fd ) const { - return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; + return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget3 : ShaderFeature::DefaultTarget; } //**************************************************************************** @@ -1372,8 +1411,8 @@ void TonemapFeatGLSL::processPix( Vector &componentList, // Assign to proper render target if( fd.features[MFT_LightbufferMRT] ) { - meta->addStatement( new GenOp( " @;\r\n", assignColor( toneMapColor, Material::None, NULL, ShaderFeature::RenderTarget1 ) ) ); - meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( toneMapColor, Material::None, NULL, ShaderFeature::RenderTarget3 ) ) ); + meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget3) ) ) ); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( toneMapColor, blendOp ) ) ); @@ -1406,7 +1445,7 @@ void TonemapFeatGLSL::setTexData( Material::StageData &stageDat, U32 TonemapFeatGLSL::getOutputTargets( const MaterialFeatureData &fd ) const { - return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; + return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget3 : ShaderFeature::DefaultTarget; } //**************************************************************************** @@ -1512,17 +1551,17 @@ void VertLitGLSL::processPix( Vector &componentList, // the dynamic light buffer, and it already has the baked-vertex-color // included in it if(bPreProcessedLighting) - outColor = new GenOp( "float4(@.rgb, 1.0)", rtLightingColor ); + outColor = new GenOp( "vec4(@.rgb, 1.0)", rtLightingColor ); else - outColor = new GenOp( "float4(@.rgb + @.rgb, 1.0)", rtLightingColor, outColor ); + outColor = new GenOp( "vec4(@.rgb + @.rgb, 1.0)", rtLightingColor, outColor ); } } // Output the color if ( fd.features[MFT_LightbufferMRT] ) { - meta->addStatement( new GenOp( " @;\r\n", assignColor( outColor, Material::None, NULL, ShaderFeature::RenderTarget1 ) ) ); - meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( outColor, Material::None, NULL, ShaderFeature::RenderTarget3 ) ) ); + meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget3) ) ) ); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( outColor, blendOp ) ) ); @@ -1532,7 +1571,7 @@ void VertLitGLSL::processPix( Vector &componentList, U32 VertLitGLSL::getOutputTargets( const MaterialFeatureData &fd ) const { - return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; + return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget3 : ShaderFeature::DefaultTarget; } //**************************************************************************** @@ -1571,7 +1610,10 @@ void DetailFeatGLSL::processPix( Vector &componentList, // and a simple multiplication with the detail map. LangElement *statement = new GenOp( "( tex2D(@, @) * 2.0 ) - 1.0", detailMap, inTex ); - output = new GenOp( " @;\r\n", assignColor( statement, Material::Add ) ); + if ( fd.features[MFT_isDeferred]) + output = new GenOp( " @;\r\n", assignColor( statement, Material::Add, NULL, ShaderFeature::RenderTarget1 ) ); + else + output = new GenOp( " @;\r\n", assignColor( statement, Material::Add ) ); } ShaderFeature::Resources DetailFeatGLSL::getResources( const MaterialFeatureData &fd ) @@ -1630,7 +1672,7 @@ void VertPositionGLSL::processVert( Vector &componentList, Var *modelview = getModelView( componentList, fd.features[MFT_UseInstancing], meta ); - meta->addStatement( new GenOp( " @ = tMul(@, float4(@.xyz,1));\r\n", + meta->addStatement( new GenOp( " @ = tMul(@, vec4(@.xyz,1));\r\n", outPosition, modelview, inPosition ) ); output = meta; @@ -1694,8 +1736,8 @@ void ReflectCubeFeatGLSL::processVert( Vector &componentList, cubeNormal->setName( "cubeNormal" ); cubeNormal->setType( "vec3" ); LangElement *cubeNormDecl = new DecOp( cubeNormal ); - - meta->addStatement( new GenOp( " @ = ( tMul( (@), vec4(@, 0) ) ).xyz;\r\n", + + meta->addStatement( new GenOp( " @ = ( tMul( (@), vec4(@, 0) ) ).xyz;\r\n", cubeNormDecl, cubeTrans, inNormal ) ); meta->addStatement( new GenOp( " @ = bool(length(@)) ? normalize(@) : @;\r\n", @@ -1771,9 +1813,14 @@ void ReflectCubeFeatGLSL::processPix( Vector &componentList, } else { - glossColor = (Var*) LangElement::find( "diffuseColor" ); - if( !glossColor ) - glossColor = (Var*) LangElement::find( "bumpNormal" ); + if (fd.features[MFT_isDeferred]) + glossColor = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget1)); + if (!glossColor) + glossColor = (Var*)LangElement::find("specularColor"); + if (!glossColor) + glossColor = (Var*)LangElement::find("diffuseColor"); + if (!glossColor) + glossColor = (Var*)LangElement::find("bumpNormal"); } // grab connector texcoord register @@ -1786,7 +1833,7 @@ void ReflectCubeFeatGLSL::processPix( Vector &componentList, // create cubemap var Var *cubeMap = new Var; - cubeMap->setType( "samplerCUBE" ); + cubeMap->setType( "samplerCube" ); cubeMap->setName( "cubeMap" ); cubeMap->uniform = true; cubeMap->sampler = true; @@ -1800,14 +1847,36 @@ void ReflectCubeFeatGLSL::processPix( Vector &componentList, if ( fd.materialFeatures[MFT_RTLighting] ) attn =(Var*)LangElement::find("d_NL_Att"); - LangElement *texCube = new GenOp( "texCUBE( @, @ )", cubeMap, reflectVec ); + LangElement *texCube = NULL; + Var* matinfo = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + //first try and grab the gbuffer + if (fd.features[MFT_isDeferred] && matinfo) + { + + if (fd.features[MFT_DeferredSpecMap]) + texCube = new GenOp("textureLod( @, @, (@.a*5) )", cubeMap, reflectVec, matinfo); + else + texCube = new GenOp("textureLod( @, @, (@.a/4) )", cubeMap, reflectVec, matinfo); + } + else if(glossColor) //failing that, rtry and find color data + texCube = new GenOp("textureLod( @, @, @.a*5)", cubeMap, reflectVec, glossColor); + else + texCube = new GenOp("texture( @, @)", cubeMap, reflectVec); + LangElement *lerpVal = NULL; Material::BlendOp blendOp = Material::LerpAlpha; // Note that the lerpVal needs to be a float4 so that // it will work with the LerpAlpha blend. - - if ( glossColor ) + + if (matinfo) + { + if (attn) + lerpVal = new GenOp("@ * saturate( @ )", matinfo, attn); + else + lerpVal = new GenOp("@", matinfo); + } + else if ( glossColor ) { if ( attn ) lerpVal = new GenOp( "@ * saturate( @ )", glossColor, attn ); @@ -1821,8 +1890,16 @@ void ReflectCubeFeatGLSL::processPix( Vector &componentList, else blendOp = Material::Mul; } - - meta->addStatement( new GenOp( " @;\r\n", assignColor( texCube, blendOp, lerpVal ) ) ); + if (fd.features[MFT_isDeferred]) + { + Var* targ = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget1)); + if (fd.features[MFT_DeferredSpecMap]) + meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); + else + meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b*128/5));\r\n", targ, targ, texCube, lerpVal)); + } + else + meta->addStatement( new GenOp( " @;\r\n", assignColor( texCube, blendOp, lerpVal ) ) ); output = meta; } @@ -1967,7 +2044,7 @@ void RTLightingFeatGLSL::processVert( Vector &componentList, Var *objTrans = getObjTrans( componentList, fd.features[MFT_UseInstancing], meta ); // Transform the normal to world space. - meta->addStatement( new GenOp( " @ = tMul( @, float4( normalize( @ ), 0.0 ) ).xyz;\r\n", outNormal, objTrans, inNormal ) ); + meta->addStatement( new GenOp( " @ = tMul( @, vec4( normalize( @ ), 0.0 ) ).xyz;\r\n", outNormal, objTrans, inNormal ) ); } addOutWsPosition( componentList, fd.features[MFT_UseInstancing], meta ); @@ -2025,7 +2102,7 @@ void RTLightingFeatGLSL::processPix( Vector &componentList, // feature (this is done for BL terrain lightmaps). LangElement *lightMask = LangElement::find( "lightMask" ); if ( !lightMask ) - lightMask = new GenOp( "float4( 1, 1, 1, 1 )" ); + lightMask = new GenOp( "vec4( 1, 1, 1, 1 )" ); // Get all the light constants. Var *inLightPos = new Var( "inLightPos", "vec4" ); @@ -2080,7 +2157,7 @@ void RTLightingFeatGLSL::processPix( Vector &componentList, rtShading, specular ) ); // Apply the lighting to the diffuse color. - LangElement *lighting = new GenOp( "float4( @.rgb + @.rgb, 1 )", rtShading, ambient ); + LangElement *lighting = new GenOp( "vec4( @.rgb + @.rgb, 1 )", rtShading, ambient ); meta->addStatement( new GenOp( " @;\r\n", assignColor( lighting, Material::Mul ) ) ); output = meta; } @@ -2351,7 +2428,9 @@ void AlphaTestGLSL::processPix( Vector &componentList, } // If we don't have a color var then we cannot do an alpha test. - Var *color = (Var*)LangElement::find( "col" ); + Var *color = (Var*)LangElement::find( "col1" ); + if ( !color ) + color = (Var*)LangElement::find("col"); if ( !color ) { output = NULL; @@ -2718,3 +2797,16 @@ void ImposterVertFeatureGLSL::determineFeature( Material *material, outFeatureData->features.addFeature( MFT_ImposterVert ); } +//**************************************************************************** +// Vertex position +//**************************************************************************** +void DeferredSkyGLSL::processVert( Vector &componentList, + const MaterialFeatureData &fd ) +{ + Var *outPosition = (Var*)LangElement::find( "gl_Position" ); + MultiLine *meta = new MultiLine; + meta->addStatement( new GenOp( " @.w = @.z;\r\n", outPosition, outPosition ) ); + + output = meta; +} + diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h index 276183d998..c0d5ba832e 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.h @@ -248,6 +248,8 @@ class DiffuseMapFeatGLSL : public ShaderFeatureGLSL virtual void processPix( Vector &componentList, const MaterialFeatureData &fd ); + virtual U32 getOutputTargets(const MaterialFeatureData &fd) const; + virtual Material::BlendOp getBlendOp(){ return Material::LerpAlpha; } virtual Resources getResources( const MaterialFeatureData &fd ); @@ -301,6 +303,8 @@ class DiffuseFeatureGLSL : public ShaderFeatureGLSL virtual Material::BlendOp getBlendOp(){ return Material::None; } + virtual U32 getOutputTargets(const MaterialFeatureData &fd) const; + virtual String getName() { return "Diffuse Color"; @@ -656,4 +660,11 @@ class ImposterVertFeatureGLSL : public ShaderFeatureGLSL }; +class DeferredSkyGLSL : public ShaderFeatureGLSL +{ +public: + virtual String getName() { return "Deferred Shading: Sky"; } + virtual void processVert( Vector &componentList, + const MaterialFeatureData &fd ); +}; #endif // _SHADERGEN_GLSL_SHADERFEATUREGLSL_H_ diff --git a/Engine/source/shaderGen/GLSL/shaderGenGLSL.h b/Engine/source/shaderGen/GLSL/shaderGenGLSL.h index c144028751..77305b8e7f 100644 --- a/Engine/source/shaderGen/GLSL/shaderGenGLSL.h +++ b/Engine/source/shaderGen/GLSL/shaderGenGLSL.h @@ -30,8 +30,11 @@ class ShaderGenPrinterGLSL : public ShaderGenPrinter { + bool extraRTs[3]; + public: - + ShaderGenPrinterGLSL() { for (int i = 0; i < 3; i++) extraRTs[i] = false; } + // ShaderGenPrinter virtual void printShaderHeader(Stream& stream); virtual void printMainComment(Stream& stream); diff --git a/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp b/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp index ef15793a58..020b68d438 100644 --- a/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp +++ b/Engine/source/shaderGen/GLSL/shaderGenGLSLInit.cpp @@ -34,6 +34,8 @@ #include "core/module.h" #include "shaderGen/GLSL/accuFeatureGLSL.h" +// Deferred Shading +#include "lighting/advanced/glsl/deferredShadingFeaturesGLSL.h" static ShaderGen::ShaderGenInitDelegate sInitDelegate; @@ -66,8 +68,13 @@ void _initShaderGenGLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_AccuMap, new AccuTexFeatGLSL ); FEATUREMGR->registerFeature( MFT_GlossMap, new NamedFeatureGLSL( "Gloss Map" ) ); FEATUREMGR->registerFeature( MFT_IsTranslucent, new NamedFeatureGLSL( "Translucent" ) ); + FEATUREMGR->registerFeature( MFT_IsTranslucentZWrite, new NamedFeatureGLSL( "Translucent ZWrite" ) ); FEATUREMGR->registerFeature( MFT_Visibility, new VisibilityFeatGLSL ); FEATUREMGR->registerFeature( MFT_Fog, new FogFeatGLSL ); + FEATUREMGR->registerFeature( MFT_LightbufferMRT, new NamedFeatureGLSL( "Lightbuffer MRT" ) ); + FEATUREMGR->registerFeature( MFT_RenderTarget1_Zero, new RenderTargetZeroGLSL( ShaderFeature::RenderTarget1 ) ); + FEATUREMGR->registerFeature( MFT_RenderTarget2_Zero, new RenderTargetZeroGLSL( ShaderFeature::RenderTarget2 ) ); + FEATUREMGR->registerFeature( MFT_RenderTarget3_Zero, new RenderTargetZeroGLSL( ShaderFeature::RenderTarget3 ) ); FEATUREMGR->registerFeature( MFT_Imposter, new NamedFeatureGLSL( "Imposter" ) ); FEATUREMGR->registerFeature( MFT_NormalsOut, new NormalsOutFeatGLSL ); @@ -80,9 +87,6 @@ void _initShaderGenGLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_ParaboloidVertTransform, new ParaboloidVertTransformGLSL ); FEATUREMGR->registerFeature( MFT_IsSinglePassParaboloid, new NamedFeatureGLSL( "Single Pass Paraboloid" ) ); FEATUREMGR->registerFeature( MFT_UseInstancing, new NamedFeatureGLSL( "Hardware Instancing" ) ); - - FEATUREMGR->registerFeature( MFT_RenderTarget1_Zero, new RenderTargetZeroGLSL - ( ShaderFeature::RenderTarget1 ) ); FEATUREMGR->registerFeature( MFT_DiffuseMapAtlas, new NamedFeatureGLSL( "Diffuse Map Atlas" ) ); FEATUREMGR->registerFeature( MFT_NormalMapAtlas, new NamedFeatureGLSL( "Normal Map Atlas" ) ); @@ -94,10 +98,13 @@ void _initShaderGenGLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_ImposterVert, new ImposterVertFeatureGLSL ); - FEATUREMGR->registerFeature( MFT_LightbufferMRT, new NamedFeatureGLSL( "Lightbuffer MRT" ) ); - //FEATUREMGR->registerFeature( MFT_IsTranslucentZWrite, new NamedFeatureGLSL( "Translucent ZWrite" ) ); - //FEATUREMGR->registerFeature( MFT_InterlacedPrePass, new NamedFeatureGLSL( "Interlaced Pre Pass" ) ); - + // Deferred Shading + FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureGLSL( "Deferred Material" ) ); + FEATUREMGR->registerFeature( MFT_DeferredSpecMap, new DeferredSpecMapGLSL ); + FEATUREMGR->registerFeature( MFT_DeferredSpecVars, new DeferredSpecVarsGLSL ); + FEATUREMGR->registerFeature( MFT_DeferredMatInfoFlags, new DeferredMatInfoFlagsGLSL ); + FEATUREMGR->registerFeature( MFT_DeferredEmptySpec, new DeferredEmptySpecGLSL ); + FEATUREMGR->registerFeature( MFT_SkyBox, new DeferredSkyGLSL ); } MODULE_BEGIN( ShaderGenGLSL ) diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 17cf6333c3..59264c3a9f 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -845,12 +845,22 @@ void DiffuseMapFeatHLSL::processVert( Vector &componentList, output = meta; } +U32 DiffuseMapFeatHLSL::getOutputTargets(const MaterialFeatureData &fd) const +{ + return fd.features[MFT_isDeferred] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + void DiffuseMapFeatHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { // grab connector texcoord register Var *inTex = getInTexCoord( "texCoord", "float2", true, componentList ); + //determine output target + ShaderFeature::OutputTarget targ = ShaderFeature::DefaultTarget; + if (fd.features[MFT_isDeferred]) + targ = ShaderFeature::RenderTarget1; + // create texture var Var *diffuseMap = new Var; diffuseMap->setType( "sampler2D" ); @@ -877,7 +887,7 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, if (!fd.features[MFT_Imposter]) meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); - meta->addStatement( new GenOp( " @;\r\n", assignColor( diffColor, Material::Mul ) ) ); + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul, NULL, targ))); } else if(fd.features[MFT_DiffuseMapAtlas]) { @@ -944,7 +954,7 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, if(!fd.features[MFT_PrePassConditioner]) { meta->addStatement(new GenOp(" @ = float4(@.xy, mipLod / @.w, 1.0);\r\n", new DecOp(diffColor), inTex, atParams)); - meta->addStatement(new GenOp(" @; return OUT;\r\n", assignColor(diffColor, Material::Mul))); + meta->addStatement(new GenOp(" @; return OUT;\r\n", assignColor(diffColor, Material::Mul, NULL, targ) ) ); return; } #endif @@ -962,15 +972,15 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, if (!fd.features[MFT_Imposter]) meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); - meta->addStatement(new GenOp( " @;\r\n", assignColor(diffColor, Material::Mul))); + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul, NULL, targ) ) ); } else { meta->addStatement(new GenOp("@ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex)); if (!fd.features[MFT_Imposter]) meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); - meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul))); - } + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul, NULL, targ))); + } } ShaderFeature::Resources DiffuseMapFeatHLSL::getResources( const MaterialFeatureData &fd ) @@ -1087,6 +1097,11 @@ void OverlayTexFeatHLSL::setTexData( Material::StageData &stageDat, // Diffuse color //**************************************************************************** +U32 DiffuseFeatureHLSL::getOutputTargets(const MaterialFeatureData &fd) const +{ + return fd.features[MFT_isDeferred] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + void DiffuseFeatureHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { @@ -1096,8 +1111,34 @@ void DiffuseFeatureHLSL::processPix( Vector &componentList, diffuseMaterialColor->uniform = true; diffuseMaterialColor->constSortPos = cspPotentialPrimitive; - MultiLine * meta = new MultiLine; - meta->addStatement( new GenOp( " @;\r\n", assignColor( diffuseMaterialColor, Material::Mul ) ) ); + MultiLine* meta = new MultiLine; + Var *col = (Var*)LangElement::find("col"); + ShaderFeature::OutputTarget targ = ShaderFeature::DefaultTarget; + if (fd.features[MFT_isDeferred]) + { + targ = ShaderFeature::RenderTarget1; + + col = (Var*)LangElement::find("col1"); + MultiLine * meta = new MultiLine; + if (!col) + { + // create color var + col = new Var; + col->setType("fragout"); + col->setName(getOutputTargetVarName(targ)); + col->setStructName("OUT"); + meta->addStatement(new GenOp(" @ = float4(1.0);\r\n", col)); + } + } + + Material::BlendOp op; + + if (fd.features[MFT_DiffuseMap]) + op = Material::Mul; + else + op = Material::None; + + meta->addStatement( new GenOp( " @;\r\n", assignColor( diffuseMaterialColor, op, NULL, targ ) ) ); output = meta; } @@ -1243,8 +1284,8 @@ void LightmapFeatHLSL::processPix( Vector &componentList, MultiLine *meta = new MultiLine; if( fd.features[MFT_LightbufferMRT] ) { - meta->addStatement( new GenOp( " @;\r\n", assignColor( statement, Material::None, NULL, ShaderFeature::RenderTarget1 ) ) ); - meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( statement, Material::None, NULL, ShaderFeature::RenderTarget3 ) ) ); + meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget3) ) ) ); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( statement, Material::Mul ) ) ); @@ -1276,7 +1317,7 @@ void LightmapFeatHLSL::setTexData( Material::StageData &stageDat, U32 LightmapFeatHLSL::getOutputTargets( const MaterialFeatureData &fd ) const { - return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; + return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget3 : ShaderFeature::DefaultTarget; } //**************************************************************************** @@ -1370,8 +1411,8 @@ void TonemapFeatHLSL::processPix( Vector &componentList, // Assign to proper render target if( fd.features[MFT_LightbufferMRT] ) { - meta->addStatement( new GenOp( " @;\r\n", assignColor( toneMapColor, Material::None, NULL, ShaderFeature::RenderTarget1 ) ) ); - meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( toneMapColor, Material::None, NULL, ShaderFeature::RenderTarget3 ) ) ); + meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget3) ) ) ); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( toneMapColor, blendOp ) ) ); @@ -1404,7 +1445,7 @@ void TonemapFeatHLSL::setTexData( Material::StageData &stageDat, U32 TonemapFeatHLSL::getOutputTargets( const MaterialFeatureData &fd ) const { - return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; + return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget3 : ShaderFeature::DefaultTarget; } //**************************************************************************** @@ -1519,8 +1560,8 @@ void VertLitHLSL::processPix( Vector &componentList, // Output the color if ( fd.features[MFT_LightbufferMRT] ) { - meta->addStatement( new GenOp( " @;\r\n", assignColor( outColor, Material::None, NULL, ShaderFeature::RenderTarget1 ) ) ); - meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( outColor, Material::None, NULL, ShaderFeature::RenderTarget3 ) ) ); + meta->addStatement( new GenOp( " @.a = 0.0001;\r\n", LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget3) ) ) ); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( outColor, blendOp ) ) ); @@ -1530,7 +1571,7 @@ void VertLitHLSL::processPix( Vector &componentList, U32 VertLitHLSL::getOutputTargets( const MaterialFeatureData &fd ) const { - return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; + return fd.features[MFT_LightbufferMRT] ? ShaderFeature::RenderTarget3 : ShaderFeature::DefaultTarget; } //**************************************************************************** @@ -1569,7 +1610,10 @@ void DetailFeatHLSL::processPix( Vector &componentList, // and a simple multiplication with the detail map. LangElement *statement = new GenOp( "( tex2D(@, @) * 2.0 ) - 1.0", detailMap, inTex ); - output = new GenOp( " @;\r\n", assignColor( statement, Material::Add ) ); + if ( fd.features[MFT_isDeferred]) + output = new GenOp( " @;\r\n", assignColor( statement, Material::Add, NULL, ShaderFeature::RenderTarget1 ) ); + else + output = new GenOp( " @;\r\n", assignColor( statement, Material::Add ) ); } ShaderFeature::Resources DetailFeatHLSL::getResources( const MaterialFeatureData &fd ) @@ -1694,7 +1738,7 @@ void ReflectCubeFeatHLSL::processVert( Vector &componentList, cubeNormal->setType( "float3" ); LangElement *cubeNormDecl = new DecOp( cubeNormal ); - meta->addStatement( new GenOp( " @ = normalize( mul(@, float4(normalize(@),0.0)).xyz );\r\n", + meta->addStatement( new GenOp( " @ = normalize( mul(@, float4(normalize(@),0.0)).xyz );\r\n", cubeNormDecl, cubeTrans, inNormal ) ); // grab the eye position @@ -1767,9 +1811,14 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, } else { - glossColor = (Var*) LangElement::find( "diffuseColor" ); - if( !glossColor ) - glossColor = (Var*) LangElement::find( "bumpNormal" ); + if (fd.features[MFT_isDeferred]) + glossColor = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget1)); + if (!glossColor) + glossColor = (Var*)LangElement::find("specularColor"); + if (!glossColor) + glossColor = (Var*)LangElement::find("diffuseColor"); + if (!glossColor) + glossColor = (Var*)LangElement::find("bumpNormal"); } // grab connector texcoord register @@ -1795,15 +1844,41 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, //else if ( fd.materialFeatures[MFT_RTLighting] ) attn =(Var*)LangElement::find("d_NL_Att"); + + LangElement *texCube = NULL; + Var* matinfo = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget2) ); + //first try and grab the gbuffer + if (fd.features[MFT_isDeferred] && matinfo) + { + // Cube LOD level = (1.0 - Roughness) * 8 + // mip_levle = min((1.0 - u_glossiness)*11.0 + 1.0, 8.0) + //LangElement *texCube = new GenOp( "texCUBElod( @, float4(@, min((1.0 - (@ / 128.0)) * 11.0 + 1.0, 8.0)) )", cubeMap, reflectVec, specPower ); + + if (fd.features[MFT_DeferredSpecMap]) + texCube = new GenOp("texCUBElod( @, float4(@, (@.a*5)) )", cubeMap, reflectVec, matinfo); + else + texCube = new GenOp("texCUBElod( @, float4(@, (@.a/4)) )", cubeMap, reflectVec, matinfo); + } + else + if (glossColor) //failing that, rtry and find color data + texCube = new GenOp("texCUBElod( @, float4(@, @.a*5))", cubeMap, reflectVec, glossColor); + else //failing *that*, just draw the cubemap + texCube = new GenOp("texCUBE( @, @)", cubeMap, reflectVec); - LangElement *texCube = new GenOp( "texCUBE( @, @ )", cubeMap, reflectVec ); LangElement *lerpVal = NULL; Material::BlendOp blendOp = Material::LerpAlpha; // Note that the lerpVal needs to be a float4 so that // it will work with the LerpAlpha blend. - if ( glossColor ) + if (matinfo) + { + if (attn) + lerpVal = new GenOp("@ * saturate( @ )", matinfo, attn); + else + lerpVal = new GenOp("@", matinfo); + } + else if ( glossColor ) { if ( attn ) lerpVal = new GenOp( "@ * saturate( @ )", glossColor, attn ); @@ -1817,8 +1892,16 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, else blendOp = Material::Mul; } - - meta->addStatement( new GenOp( " @;\r\n", assignColor( texCube, blendOp, lerpVal ) ) ); + if (fd.features[MFT_isDeferred]) + { + Var* targ = (Var*)LangElement::find(getOutputTargetVarName(ShaderFeature::RenderTarget1)); + if (fd.features[MFT_DeferredSpecMap]) + meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); + else + meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b*128/5));\r\n", targ, targ, texCube, lerpVal)); + } + else + meta->addStatement( new GenOp( " @;\r\n", assignColor( texCube, blendOp, lerpVal ) ) ); output = meta; } @@ -1865,9 +1948,9 @@ void ReflectCubeFeatHLSL::setTexData( Material::StageData &stageDat, { passData.mSamplerNames[ texIndex ] = "bumpMap"; passData.mTexSlot[ texIndex++ ].texObject = tex; + } } } - } if( stageDat.getCubemap() ) { @@ -2347,7 +2430,9 @@ void AlphaTestHLSL::processPix( Vector &componentList, } // If we don't have a color var then we cannot do an alpha test. - Var *color = (Var*)LangElement::find( "col" ); + Var *color = (Var*)LangElement::find( "col1" ); + if (!color) + color = (Var*)LangElement::find("col"); if ( !color ) { output = NULL; @@ -2714,3 +2799,16 @@ void ImposterVertFeatureHLSL::determineFeature( Material *material, outFeatureData->features.addFeature( MFT_ImposterVert ); } + +//**************************************************************************** +// Vertex position +//**************************************************************************** +void DeferredSkyHLSL::processVert( Vector &componentList, + const MaterialFeatureData &fd ) +{ + Var *outPosition = (Var*)LangElement::find( "hpos" ); + MultiLine *meta = new MultiLine; + meta->addStatement( new GenOp( " @.w = @.z;\r\n", outPosition, outPosition ) ); + + output = meta; +} diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h index 4f77c175a7..b09d4d561a 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h @@ -248,6 +248,8 @@ class DiffuseMapFeatHLSL : public ShaderFeatureHLSL virtual void processPix( Vector &componentList, const MaterialFeatureData &fd ); + virtual U32 getOutputTargets(const MaterialFeatureData &fd) const; + virtual Material::BlendOp getBlendOp(){ return Material::LerpAlpha; } virtual Resources getResources( const MaterialFeatureData &fd ); @@ -301,6 +303,7 @@ class DiffuseFeatureHLSL : public ShaderFeatureHLSL virtual Material::BlendOp getBlendOp(){ return Material::None; } + virtual U32 getOutputTargets(const MaterialFeatureData &fd) const; virtual String getName() { return "Diffuse Color"; @@ -656,4 +659,12 @@ class ImposterVertFeatureHLSL : public ShaderFeatureHLSL }; +class DeferredSkyHLSL : public ShaderFeatureHLSL +{ +public: + virtual String getName() { return "Deferred Shading: Sky"; } + virtual void processVert( Vector &componentList, + const MaterialFeatureData &fd ); +}; + #endif // _SHADERGEN_HLSL_SHADERFEATUREHLSL_H_ diff --git a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp index a5c6165e07..fd30656bd0 100644 --- a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp +++ b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp @@ -32,6 +32,8 @@ #include "shaderGen/HLSL/paraboloidHLSL.h" #include "materials/materialFeatureTypes.h" #include "core/module.h" +// Deferred Shading +#include "lighting/advanced/hlsl/deferredShadingFeaturesHLSL.h" #include "shaderGen/HLSL/accuFeatureHLSL.h" static ShaderGen::ShaderGenInitDelegate sInitDelegate; @@ -70,6 +72,8 @@ void _initShaderGenHLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_GlossMap, new NamedFeatureHLSL( "Gloss Map" ) ); FEATUREMGR->registerFeature( MFT_LightbufferMRT, new NamedFeatureHLSL( "Lightbuffer MRT" ) ); FEATUREMGR->registerFeature( MFT_RenderTarget1_Zero, new RenderTargetZeroHLSL( ShaderFeature::RenderTarget1 ) ); + FEATUREMGR->registerFeature( MFT_RenderTarget2_Zero, new RenderTargetZeroHLSL( ShaderFeature::RenderTarget2 ) ); + FEATUREMGR->registerFeature( MFT_RenderTarget3_Zero, new RenderTargetZeroHLSL( ShaderFeature::RenderTarget3 ) ); FEATUREMGR->registerFeature( MFT_Imposter, new NamedFeatureHLSL( "Imposter" ) ); FEATUREMGR->registerFeature( MFT_DiffuseMapAtlas, new NamedFeatureHLSL( "Diffuse Map Atlas" ) ); @@ -95,6 +99,14 @@ void _initShaderGenHLSL( ShaderGen *shaderGen ) FEATUREMGR->registerFeature( MFT_ForwardShading, new NamedFeatureHLSL( "Forward Shaded Material" ) ); FEATUREMGR->registerFeature( MFT_ImposterVert, new ImposterVertFeatureHLSL ); + + // Deferred Shading + FEATUREMGR->registerFeature( MFT_isDeferred, new NamedFeatureHLSL( "Deferred Material" ) ); + FEATUREMGR->registerFeature( MFT_DeferredSpecMap, new DeferredSpecMapHLSL ); + FEATUREMGR->registerFeature( MFT_DeferredSpecVars, new DeferredSpecVarsHLSL ); + FEATUREMGR->registerFeature( MFT_DeferredMatInfoFlags, new DeferredMatInfoFlagsHLSL ); + FEATUREMGR->registerFeature( MFT_DeferredEmptySpec, new DeferredEmptySpecHLSL ); + FEATUREMGR->registerFeature( MFT_SkyBox, new DeferredSkyHLSL ); } MODULE_BEGIN( ShaderGenHLSL ) diff --git a/Engine/source/shaderGen/shaderFeature.cpp b/Engine/source/shaderGen/shaderFeature.cpp index 9c1d8d9554..7e22f72adb 100644 --- a/Engine/source/shaderGen/shaderFeature.cpp +++ b/Engine/source/shaderGen/shaderFeature.cpp @@ -47,10 +47,24 @@ ShaderFeature::Resources ShaderFeature::getResources( const MaterialFeatureData const char* ShaderFeature::getOutputTargetVarName( OutputTarget target ) const { const char* targName = "col"; - if ( target != DefaultTarget ) + + switch(target) { + case DefaultTarget: + targName = "col"; + break; + + case RenderTarget1: targName = "col1"; - AssertFatal(target == RenderTarget1, "yeah Pat is lame and didn't want to do bit math stuff, TODO"); + break; + + case RenderTarget2: + targName = "col2"; + break; + + case RenderTarget3: + targName = "col3"; + break; } return targName; diff --git a/Engine/source/shaderGen/shaderGenVars.cpp b/Engine/source/shaderGen/shaderGenVars.cpp index 3e5a577ee4..f4aca6cf5b 100644 --- a/Engine/source/shaderGen/shaderGenVars.cpp +++ b/Engine/source/shaderGen/shaderGenVars.cpp @@ -80,4 +80,7 @@ const String ShaderGenVars::cubeMap("$cubeMap"); const String ShaderGenVars::dLightMap("$dlightMap"); const String ShaderGenVars::dLightMapSec("$dlightMapSec"); const String ShaderGenVars::dLightMask("$dlightMask"); -const String ShaderGenVars::toneMap("$toneMap"); \ No newline at end of file +const String ShaderGenVars::toneMap("$toneMap"); + +// Deferred shading +const String ShaderGenVars::matInfoFlags("$matInfoFlags"); \ No newline at end of file diff --git a/Engine/source/shaderGen/shaderGenVars.h b/Engine/source/shaderGen/shaderGenVars.h index a98940101f..52ff016d04 100644 --- a/Engine/source/shaderGen/shaderGenVars.h +++ b/Engine/source/shaderGen/shaderGenVars.h @@ -94,6 +94,9 @@ struct ShaderGenVars const static String dLightMapSec; const static String dLightMask; const static String toneMap; + + // Deferred Shading + const static String matInfoFlags; }; #endif diff --git a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp index 5f32359a8c..95acfc773c 100644 --- a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp +++ b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp @@ -26,6 +26,7 @@ #include "terrain/terrFeatureTypes.h" #include "materials/materialFeatureTypes.h" #include "materials/materialFeatureData.h" +#include "materials/processedMaterial.h" #include "gfx/gfxDevice.h" #include "shaderGen/langElement.h" #include "shaderGen/shaderOp.h" @@ -48,6 +49,10 @@ namespace FEATUREMGR->registerFeature( MFT_TerrainLightMap, new TerrainLightMapFeatGLSL ); FEATUREMGR->registerFeature( MFT_TerrainSideProject, new NamedFeatureGLSL( "Terrain Side Projection" ) ); FEATUREMGR->registerFeature( MFT_TerrainAdditive, new TerrainAdditiveFeatGLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainBaseMap, new TerrainBaseMapFeatGLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainMacroMap, new TerrainMacroMapFeatGLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainDetailMap, new TerrainDetailMapFeatGLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainBlankInfoMap, new TerrainBlankInfoMapFeatGLSL ); } }; @@ -250,10 +255,6 @@ void TerrainBaseMapFeatGLSL::processPix( Vector &componentLis // grab connector texcoord register Var *texCoord = getInTexCoord( "texCoord", "vec3", true, componentList ); - // We do nothing more if this is a prepass. - if ( fd.features.hasFeature( MFT_PrePassConditioner ) ) - return; - // create texture var Var *diffuseMap = new Var; diffuseMap->setType( "sampler2D" ); @@ -269,7 +270,14 @@ void TerrainBaseMapFeatGLSL::processPix( Vector &componentLis baseColor->setName( "baseColor" ); meta->addStatement( new GenOp( " @ = tex2D( @, @.xy );\r\n", new DecOp( baseColor ), diffuseMap, texCoord ) ); meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", baseColor, baseColor)); - meta->addStatement( new GenOp( " @;\r\n", assignColor( baseColor, Material::Mul ) ) ); + + ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; + + if(fd.features.hasFeature(MFT_isDeferred)) + { + target= ShaderFeature::RenderTarget1; + } + meta->addStatement( new GenOp( " @;\r\n", assignColor( baseColor, Material::Mul,NULL,target ) ) ); output = meta; } @@ -278,14 +286,16 @@ ShaderFeature::Resources TerrainBaseMapFeatGLSL::getResources( const MaterialFea { Resources res; res.numTexReg = 1; - - // We only sample from the base map during a diffuse pass. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) res.numTex = 1; return res; } +U32 TerrainBaseMapFeatGLSL::getOutputTargets( const MaterialFeatureData &fd ) const +{ + return fd.features[MFT_isDeferred] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + TerrainDetailMapFeatGLSL::TerrainDetailMapFeatGLSL() : mTorqueDep( "shaders/common/gl/torque.glsl" ), mTerrainDep( "shaders/common/terrain/terrain.glsl" ) @@ -386,6 +396,9 @@ void TerrainDetailMapFeatGLSL::processPix( Vector &component const U32 detailIndex = getProcessIndex(); Var *inTex = getVertTexCoord( "texCoord" ); + // new terrain + bool hasNormal = fd.features.hasFeature(MFT_TerrainNormalMap, detailIndex); + MultiLine *meta = new MultiLine; // We need the negative tangent space view vector @@ -454,6 +467,100 @@ void TerrainDetailMapFeatGLSL::processPix( Vector &component meta->addStatement( new GenOp( " @ = calcBlend( @.x, @.xy, @, @ );\r\n", new DecOp( detailBlend ), detailInfo, inTex, layerSize, layerSample ) ); + // New terrain + + Var *lerpBlend = (Var*)LangElement::find("lerpBlend"); + if (!lerpBlend) + { + lerpBlend = new Var; + lerpBlend->setType("float"); + lerpBlend->setName("lerpBlend"); + lerpBlend->uniform = true; + lerpBlend->constSortPos = cspPrimitive; + } + + + Var *blendDepth = (Var*)LangElement::find(String::ToString("blendDepth%d", detailIndex)); + if (!blendDepth) + { + blendDepth = new Var; + blendDepth->setType("float"); + blendDepth->setName(String::ToString("blendDepth%d", detailIndex)); + blendDepth->uniform = true; + blendDepth->constSortPos = cspPrimitive; + } + + Var *baseColor = (Var*)LangElement::find("baseColor"); + ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; + + if(fd.features.hasFeature( MFT_DeferredTerrainDetailMap )) + target= ShaderFeature::RenderTarget1; + + Var *outColor = (Var*)LangElement::find( getOutputTargetVarName(target) ); + + if (!outColor) + { + // create color var + outColor = new Var; + outColor->setType("float4"); + outColor->setName("col"); + outColor->setStructName("OUT"); + meta->addStatement(new GenOp(" @;\r\n", outColor)); + } + + Var *detailColor = (Var*)LangElement::find("detailColor"); + if (!detailColor) + { + detailColor = new Var; + detailColor->setType("float4"); + detailColor->setName("detailColor"); + meta->addStatement(new GenOp(" @;\r\n", new DecOp(detailColor))); + } + + // Get the detail texture. + Var *detailMap = new Var; + detailMap->setType("sampler2D"); + detailMap->setName(String::ToString("detailMap%d", detailIndex)); + detailMap->uniform = true; + detailMap->sampler = true; + detailMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + + // Get the normal map texture. + Var *normalMap = _getNormalMapTex(); + + // Issue happens somewhere here ----- + + // Sample the normal map. + // + // We take two normal samples and lerp between them for + // side projection layers... else a single sample. + LangElement *texOp; + + // Note that we're doing the standard greyscale detail + // map technique here which can darken and lighten the + // diffuse texture. + // + // We take two color samples and lerp between them for + // side projection layers... else a single sample. + // + if (fd.features.hasFeature(MFT_TerrainSideProject, detailIndex)) + { + meta->addStatement(new GenOp(" @ = ( lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z ) * 2.0 ) - 1.0;\r\n", + detailColor, detailMap, inDet, detailMap, inDet, inTex)); + + texOp = new GenOp("lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z )", + normalMap, inDet, normalMap, inDet, inTex); + } + else + { + meta->addStatement(new GenOp(" @ = ( tex2D( @, @.xy ) * 2.0 ) - 1.0;\r\n", + detailColor, detailMap, inDet)); + + texOp = new GenOp("tex2D(@, @.xy)", normalMap, inDet); + } + + // New terrain + // Get a var and accumulate the blend amount. Var *blendTotal = (Var*)LangElement::find( "blendTotal" ); if ( !blendTotal ) @@ -487,46 +594,6 @@ void TerrainDetailMapFeatGLSL::processPix( Vector &component } } - // If this is a prepass then we skip color. - if ( fd.features.hasFeature( MFT_PrePassConditioner ) ) - { - // Check to see if we have a gbuffer normal. - Var *gbNormal = (Var*)LangElement::find( "gbNormal" ); - - // If we have a gbuffer normal and we don't have a - // normal map feature then we need to lerp in a - // default normal else the normals below this layer - // will show thru. - if ( gbNormal && - !fd.features.hasFeature( MFT_TerrainNormalMap, detailIndex ) ) - { - Var *viewToTangent = getInViewToTangent( componentList ); - - meta->addStatement( new GenOp( " @ = lerp( @, tGetMatrix3Row(@, 2), min( @, @.w ) );\r\n", - gbNormal, gbNormal, viewToTangent, detailBlend, inDet ) ); - } - - output = meta; - return; - } - - Var *detailColor = (Var*)LangElement::find( "detailColor" ); - if ( !detailColor ) - { - detailColor = new Var; - detailColor->setType( "vec4" ); - detailColor->setName( "detailColor" ); - meta->addStatement( new GenOp( " @;\r\n", new DecOp( detailColor ) ) ); - } - - // Get the detail texture. - Var *detailMap = new Var; - detailMap->setType( "sampler2D" ); - detailMap->setName( String::ToString( "detailMap%d", detailIndex ) ); - detailMap->uniform = true; - detailMap->sampler = true; - detailMap->constNum = Var::getTexUnitNum(); // used as texture unit num here - // If we're using SM 3.0 then take advantage of // dynamic branching to skip layers per-pixel. @@ -557,9 +624,6 @@ void TerrainDetailMapFeatGLSL::processPix( Vector &component meta->addStatement( new GenOp( " @ *= @.y * @.w;\r\n", detailColor, detailInfo, inDet ) ); - Var *baseColor = (Var*)LangElement::find( "baseColor" ); - Var *outColor = (Var*)LangElement::find( "col" ); - meta->addStatement( new GenOp( " @ = lerp( @, @ + @, @ );\r\n", outColor, outColor, baseColor, detailColor, detailBlend ) ); @@ -585,9 +649,7 @@ ShaderFeature::Resources TerrainDetailMapFeatGLSL::getResources( const MaterialF res.numTexReg += 4; } - // If this isn't the prepass then we sample - // from the detail texture for diffuse coloring. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) + // sample from the detail texture for diffuse coloring. res.numTex += 1; // If we have parallax for this layer then we'll also @@ -602,6 +664,11 @@ ShaderFeature::Resources TerrainDetailMapFeatGLSL::getResources( const MaterialF return res; } +U32 TerrainDetailMapFeatGLSL::getOutputTargets( const MaterialFeatureData &fd ) const +{ + return fd.features[MFT_DeferredTerrainDetailMap] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + TerrainMacroMapFeatGLSL::TerrainMacroMapFeatGLSL() : mTorqueDep( "shaders/common/gl/torque.glsl" ), @@ -759,29 +826,6 @@ void TerrainMacroMapFeatGLSL::processPix( Vector &componentL // Add to the blend total. meta->addStatement( new GenOp( " @ = max( @, @ );\r\n", blendTotal, blendTotal, detailBlend ) ); - // If this is a prepass then we skip color. - if ( fd.features.hasFeature( MFT_PrePassConditioner ) ) - { - // Check to see if we have a gbuffer normal. - Var *gbNormal = (Var*)LangElement::find( "gbNormal" ); - - // If we have a gbuffer normal and we don't have a - // normal map feature then we need to lerp in a - // default normal else the normals below this layer - // will show thru. - if ( gbNormal && - !fd.features.hasFeature( MFT_TerrainNormalMap, detailIndex ) ) - { - Var *viewToTangent = getInViewToTangent( componentList ); - - meta->addStatement( new GenOp( " @ = lerp( @, tGetMatrix3Row(@, 2), min( @, @.w ) );\r\n", - gbNormal, gbNormal, viewToTangent, detailBlend, inDet ) ); - } - - output = meta; - return; - } - Var *detailColor = (Var*)LangElement::find( "macroColor" ); if ( !detailColor ) { @@ -826,8 +870,12 @@ void TerrainMacroMapFeatGLSL::processPix( Vector &componentL meta->addStatement( new GenOp( " @ *= @.y * @.w;\r\n", detailColor, detailInfo, inDet ) ); + ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; - Var *outColor = (Var*)LangElement::find( "col" ); + if(fd.features.hasFeature(MFT_DeferredTerrainMacroMap)) + target= ShaderFeature::RenderTarget1; + + Var *outColor = (Var*)LangElement::find( getOutputTargetVarName(target) ); meta->addStatement( new GenOp( " @ = lerp( @, @ + @, @ );\r\n", outColor, outColor, outColor, detailColor, detailBlend ) ); @@ -850,9 +898,6 @@ ShaderFeature::Resources TerrainMacroMapFeatGLSL::getResources( const MaterialFe res.numTex += 1; } - // If this isn't the prepass then we sample - // from the detail texture for diffuse coloring. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) res.numTex += 1; // Finally we always send the detail texture @@ -862,6 +907,11 @@ ShaderFeature::Resources TerrainMacroMapFeatGLSL::getResources( const MaterialFe return res; } +U32 TerrainMacroMapFeatGLSL::getOutputTargets( const MaterialFeatureData &fd ) const +{ + return fd.features[MFT_DeferredTerrainMacroMap] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + void TerrainNormalMapFeatGLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { @@ -881,9 +931,6 @@ void TerrainNormalMapFeatGLSL::processVert( Vector &component void TerrainNormalMapFeatGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - // We only need to process normals during the prepass. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) - return; MultiLine *meta = new MultiLine; @@ -1023,7 +1070,12 @@ ShaderFeature::Resources TerrainLightMapFeatGLSL::getResources( const MaterialFe void TerrainAdditiveFeatGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - Var *color = (Var*) LangElement::find( "col" ); + Var *color = NULL; + if (fd.features[MFT_DeferredTerrainDetailMap]) + color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ); + else + color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) ); + Var *blendTotal = (Var*)LangElement::find( "blendTotal" ); if ( !color || !blendTotal ) return; @@ -1035,3 +1087,40 @@ void TerrainAdditiveFeatGLSL::processPix( Vector &componentLis output = meta; } + +//standard matInfo map contains data of the form .r = bitflags, .g = (will contain AO), +//.b = specular strength, a= spec power. +//here, it's merely a cutout for now, so that lightmapping (target3) doesn't get mangled. +//we'll most likely revisit that later. possibly several ways... + +U32 TerrainBlankInfoMapFeatGLSL::getOutputTargets(const MaterialFeatureData &fd) const +{ + return fd.features[MFT_isDeferred] ? ShaderFeature::RenderTarget2 : ShaderFeature::RenderTarget1; +} + +void TerrainBlankInfoMapFeatGLSL::processPix(Vector &componentList, + const MaterialFeatureData &fd) +{ + // search for material var + Var *material; + OutputTarget targ = RenderTarget1; + if (fd.features[MFT_isDeferred]) + { + targ = RenderTarget2; + } + material = (Var*)LangElement::find(getOutputTargetVarName(targ)); + + MultiLine * meta = new MultiLine; + if (!material) + { + // create color var + material = new Var; + material->setType("vec4"); + material->setName(getOutputTargetVarName(targ)); + material->setStructName("OUT"); + } + + meta->addStatement(new GenOp(" @ = float4(0.0,0.0,0.0,0.0001);\r\n", material)); + + output = meta; +} diff --git a/Engine/source/terrain/glsl/terrFeatureGLSL.h b/Engine/source/terrain/glsl/terrFeatureGLSL.h index 6cb3a3c0c2..7839558b19 100644 --- a/Engine/source/terrain/glsl/terrFeatureGLSL.h +++ b/Engine/source/terrain/glsl/terrFeatureGLSL.h @@ -67,6 +67,8 @@ class TerrainBaseMapFeatGLSL : public TerrainFeatGLSL virtual Resources getResources( const MaterialFeatureData &fd ); virtual String getName() { return "Terrain Base Texture"; } + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const; }; @@ -90,6 +92,8 @@ class TerrainDetailMapFeatGLSL : public TerrainFeatGLSL virtual Resources getResources( const MaterialFeatureData &fd ); virtual String getName() { return "Terrain Detail Texture"; } + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const; }; @@ -113,6 +117,8 @@ class TerrainMacroMapFeatGLSL : public TerrainFeatGLSL virtual Resources getResources( const MaterialFeatureData &fd ); virtual String getName() { return "Terrain Macro Texture"; } + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const; }; @@ -154,4 +160,15 @@ class TerrainAdditiveFeatGLSL : public TerrainFeatGLSL virtual String getName() { return "Terrain Additive"; } }; +class TerrainBlankInfoMapFeatGLSL : public ShaderFeatureGLSL +{ +public: + + virtual void processPix(Vector &componentList, + const MaterialFeatureData &fd); + + virtual U32 getOutputTargets(const MaterialFeatureData &fd) const; + virtual String getName() { return "Blank Matinfo map"; } +}; + #endif // _TERRFEATUREGLSL_H_ diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp index 6ef1c20091..c9ae13414d 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp @@ -26,6 +26,7 @@ #include "terrain/terrFeatureTypes.h" #include "materials/materialFeatureTypes.h" #include "materials/materialFeatureData.h" +#include "materials/processedMaterial.h" #include "gfx/gfxDevice.h" #include "shaderGen/langElement.h" #include "shaderGen/shaderOp.h" @@ -47,9 +48,12 @@ namespace FEATUREMGR->registerFeature( MFT_TerrainMacroMap, new TerrainMacroMapFeatHLSL ); FEATUREMGR->registerFeature( MFT_TerrainLightMap, new TerrainLightMapFeatHLSL ); FEATUREMGR->registerFeature( MFT_TerrainSideProject, new NamedFeatureHLSL( "Terrain Side Projection" ) ); - FEATUREMGR->registerFeature( MFT_TerrainAdditive, new TerrainAdditiveFeatHLSL ); + FEATUREMGR->registerFeature( MFT_TerrainAdditive, new TerrainAdditiveFeatHLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainBaseMap, new TerrainBaseMapFeatHLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainMacroMap, new TerrainMacroMapFeatHLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainDetailMap, new TerrainDetailMapFeatHLSL ); + FEATUREMGR->registerFeature( MFT_DeferredTerrainBlankInfoMap, new TerrainBlankInfoMapFeatHLSL ); } - }; MODULE_BEGIN( TerrainFeatHLSL ) @@ -250,10 +254,6 @@ void TerrainBaseMapFeatHLSL::processPix( Vector &componentLis // grab connector texcoord register Var *texCoord = getInTexCoord( "texCoord", "float3", true, componentList ); - // We do nothing more if this is a prepass. - if ( fd.features.hasFeature( MFT_PrePassConditioner ) ) - return; - // create texture var Var *diffuseMap = new Var; diffuseMap->setType( "sampler2D" ); @@ -269,8 +269,15 @@ void TerrainBaseMapFeatHLSL::processPix( Vector &componentLis baseColor->setName( "baseColor" ); meta->addStatement( new GenOp( " @ = tex2D( @, @.xy );\r\n", new DecOp( baseColor ), diffuseMap, texCoord ) ); meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", baseColor, baseColor)); - meta->addStatement( new GenOp( " @;\r\n", assignColor( baseColor, Material::Mul ) ) ); + ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; + + if (fd.features.hasFeature(MFT_isDeferred)) + { + target= ShaderFeature::RenderTarget1; + } + + meta->addStatement( new GenOp( " @;\r\n", assignColor( baseColor, Material::Mul,NULL,target ) ) ); output = meta; } @@ -278,14 +285,16 @@ ShaderFeature::Resources TerrainBaseMapFeatHLSL::getResources( const MaterialFea { Resources res; res.numTexReg = 1; - - // We only sample from the base map during a diffuse pass. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) res.numTex = 1; return res; } +U32 TerrainBaseMapFeatHLSL::getOutputTargets( const MaterialFeatureData &fd ) const +{ + return fd.features[MFT_DeferredTerrainBaseMap] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + TerrainDetailMapFeatHLSL::TerrainDetailMapFeatHLSL() : mTorqueDep( "shaders/common/torque.hlsl" ), mTerrainDep( "shaders/common/terrain/terrain.hlsl" ) @@ -477,7 +486,7 @@ void TerrainDetailMapFeatHLSL::processPix( Vector &component // Call the library function to do the rest. if(fd.features.hasFeature( MFT_IsDXTnm, detailIndex ) ) { - meta->addStatement( new GenOp( " @.xy += parallaxOffsetDxtnm( @, @.xy, @, @.z * @ );\r\n", + meta->addStatement( new GenOp( " @.xy += parallaxOffsetDxtnm( @, @.xy, @, @.z * @ );\r\n", inDet, normalMap, inDet, negViewTS, detailInfo, detailBlend ) ); } else @@ -487,29 +496,6 @@ void TerrainDetailMapFeatHLSL::processPix( Vector &component } } - // If this is a prepass then we skip color. - if ( fd.features.hasFeature( MFT_PrePassConditioner ) ) - { - // Check to see if we have a gbuffer normal. - Var *gbNormal = (Var*)LangElement::find( "gbNormal" ); - - // If we have a gbuffer normal and we don't have a - // normal map feature then we need to lerp in a - // default normal else the normals below this layer - // will show thru. - if ( gbNormal && - !fd.features.hasFeature( MFT_TerrainNormalMap, detailIndex ) ) - { - Var *viewToTangent = getInViewToTangent( componentList ); - - meta->addStatement( new GenOp( " @ = lerp( @, @[2], min( @, @.w ) );\r\n", - gbNormal, gbNormal, viewToTangent, detailBlend, inDet ) ); - } - - output = meta; - return; - } - Var *detailColor = (Var*)LangElement::find( "detailColor" ); if ( !detailColor ) { @@ -543,21 +529,35 @@ void TerrainDetailMapFeatHLSL::processPix( Vector &component // We take two color samples and lerp between them for // side projection layers... else a single sample. // + + //Sampled detail texture that is not expanded + Var *detailTex = new Var; + detailTex->setType("float4"); + detailTex->setName("detailTex"); + meta->addStatement( new GenOp( " @;\r\n", new DecOp( detailTex ) ) ); + if ( fd.features.hasFeature( MFT_TerrainSideProject, detailIndex ) ) { - meta->addStatement( new GenOp( " @ = ( lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z ) * 2.0 ) - 1.0;\r\n", - detailColor, detailMap, inDet, detailMap, inDet, inTex ) ); + meta->addStatement( new GenOp(" @ = lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z);\r\n",detailTex,detailMap,inDet,detailMap,inDet,inTex)); + meta->addStatement( new GenOp( " @ = ( @ * 2.0 ) - 1.0;\r\n", detailColor, detailTex) ); } else { - meta->addStatement( new GenOp( " @ = ( tex2D( @, @.xy ) * 2.0 ) - 1.0;\r\n", - detailColor, detailMap, inDet ) ); + meta->addStatement( new GenOp(" @ = tex2D(@,@.xy);\r\n",detailTex,detailMap,inDet)); + meta->addStatement( new GenOp( " @ = ( @ * 2.0 ) - 1.0;\r\n", + detailColor, detailTex) ); } meta->addStatement( new GenOp( " @ *= @.y * @.w;\r\n", detailColor, detailInfo, inDet ) ); - Var *outColor = (Var*)LangElement::find( "col" ); + Var *baseColor = (Var*)LangElement::find( "baseColor" ); + ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; + + if(fd.features.hasFeature( MFT_DeferredTerrainDetailMap )) + target= ShaderFeature::RenderTarget1; + + Var *outColor = (Var*)LangElement::find( getOutputTargetVarName(target) ); meta->addStatement( new GenOp( " @ += @ * @;\r\n", outColor, detailColor, detailBlend)); @@ -584,9 +584,7 @@ ShaderFeature::Resources TerrainDetailMapFeatHLSL::getResources( const MaterialF res.numTexReg += 4; } - // If this isn't the prepass then we sample - // from the detail texture for diffuse coloring. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) + // sample from the detail texture for diffuse coloring. res.numTex += 1; // If we have parallax for this layer then we'll also @@ -601,6 +599,11 @@ ShaderFeature::Resources TerrainDetailMapFeatHLSL::getResources( const MaterialF return res; } +U32 TerrainDetailMapFeatHLSL::getOutputTargets( const MaterialFeatureData &fd ) const +{ + return fd.features[MFT_DeferredTerrainDetailMap] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + TerrainMacroMapFeatHLSL::TerrainMacroMapFeatHLSL() : mTorqueDep( "shaders/common/torque.hlsl" ), @@ -758,29 +761,6 @@ void TerrainMacroMapFeatHLSL::processPix( Vector &componentL // Add to the blend total. meta->addStatement( new GenOp( " @ += @;\r\n", blendTotal, detailBlend ) ); - // If this is a prepass then we skip color. - if ( fd.features.hasFeature( MFT_PrePassConditioner ) ) - { - // Check to see if we have a gbuffer normal. - Var *gbNormal = (Var*)LangElement::find( "gbNormal" ); - - // If we have a gbuffer normal and we don't have a - // normal map feature then we need to lerp in a - // default normal else the normals below this layer - // will show thru. - if ( gbNormal && - !fd.features.hasFeature( MFT_TerrainNormalMap, detailIndex ) ) - { - Var *viewToTangent = getInViewToTangent( componentList ); - - meta->addStatement( new GenOp( " @ = lerp( @, @[2], min( @, @.w ) );\r\n", - gbNormal, gbNormal, viewToTangent, detailBlend, inDet ) ); - } - - output = meta; - return; - } - Var *detailColor = (Var*)LangElement::find( "macroColor" ); if ( !detailColor ) { @@ -826,8 +806,14 @@ void TerrainMacroMapFeatHLSL::processPix( Vector &componentL meta->addStatement( new GenOp( " @ *= @.y * @.w;\r\n", detailColor, detailInfo, inDet ) ); - //Var *baseColor = (Var*)LangElement::find( "baseColor" ); - Var *outColor = (Var*)LangElement::find( "col" ); + Var *baseColor = (Var*)LangElement::find( "baseColor" ); + + ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; + + if(fd.features.hasFeature(MFT_DeferredTerrainMacroMap)) + target= ShaderFeature::RenderTarget1; + + Var *outColor = (Var*)LangElement::find( getOutputTargetVarName(target) ); meta->addStatement(new GenOp(" @ += @ * @;\r\n", outColor, detailColor, detailBlend)); @@ -837,8 +823,6 @@ void TerrainMacroMapFeatHLSL::processPix( Vector &componentL output = meta; } - - ShaderFeature::Resources TerrainMacroMapFeatHLSL::getResources( const MaterialFeatureData &fd ) { Resources res; @@ -850,9 +834,6 @@ ShaderFeature::Resources TerrainMacroMapFeatHLSL::getResources( const MaterialFe res.numTex += 1; } - // If this isn't the prepass then we sample - // from the detail texture for diffuse coloring. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) res.numTex += 1; // Finally we always send the detail texture @@ -862,6 +843,11 @@ ShaderFeature::Resources TerrainMacroMapFeatHLSL::getResources( const MaterialFe return res; } +U32 TerrainMacroMapFeatHLSL::getOutputTargets( const MaterialFeatureData &fd ) const +{ + return fd.features[MFT_DeferredTerrainMacroMap] ? ShaderFeature::RenderTarget1 : ShaderFeature::DefaultTarget; +} + void TerrainNormalMapFeatHLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { @@ -881,9 +867,6 @@ void TerrainNormalMapFeatHLSL::processVert( Vector &component void TerrainNormalMapFeatHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - // We only need to process normals during the prepass. - if ( !fd.features.hasFeature( MFT_PrePassConditioner ) ) - return; MultiLine *meta = new MultiLine; @@ -1019,11 +1002,15 @@ ShaderFeature::Resources TerrainLightMapFeatHLSL::getResources( const MaterialFe return res; } - void TerrainAdditiveFeatHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - Var *color = (Var*) LangElement::find( "col" ); + Var *color = NULL; + if (fd.features[MFT_DeferredTerrainDetailMap]) + color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::RenderTarget1) ); + else + color = (Var*) LangElement::find( getOutputTargetVarName(ShaderFeature::DefaultTarget) ); + Var *blendTotal = (Var*)LangElement::find( "blendTotal" ); if ( !color || !blendTotal ) return; @@ -1033,5 +1020,43 @@ void TerrainAdditiveFeatHLSL::processPix( Vector &componentLis meta->addStatement( new GenOp( " clip( @ - 0.0001 );\r\n", blendTotal ) ); meta->addStatement( new GenOp( " @.a = @;\r\n", color, blendTotal ) ); + + output = meta; +} + +//standard matInfo map contains data of the form .r = bitflags, .g = (will contain AO), +//.b = specular strength, a= spec power. +//here, it's merely a cutout for now, so that lightmapping (target3) doesn't get mangled. +//we'll most likely revisit that later. possibly several ways... + +U32 TerrainBlankInfoMapFeatHLSL::getOutputTargets(const MaterialFeatureData &fd) const +{ + return fd.features[MFT_DeferredTerrainBaseMap] ? ShaderFeature::RenderTarget2 : ShaderFeature::RenderTarget1; +} + +void TerrainBlankInfoMapFeatHLSL::processPix(Vector &componentList, + const MaterialFeatureData &fd) +{ + // search for material var + Var *material; + OutputTarget targ = RenderTarget1; + if (fd.features[MFT_isDeferred]) + { + targ = RenderTarget2; + } + material = (Var*)LangElement::find(getOutputTargetVarName(targ)); + + MultiLine * meta = new MultiLine; + if (!material) + { + // create color var + material = new Var; + material->setType("fragout"); + material->setName(getOutputTargetVarName(targ)); + material->setStructName("OUT"); + } + + meta->addStatement(new GenOp(" @ = float4(0.0,0.0,0.0,0.0001);\r\n", material)); + output = meta; } diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.h b/Engine/source/terrain/hlsl/terrFeatureHLSL.h index e6297f3b43..2effbdc367 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.h +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.h @@ -68,6 +68,8 @@ class TerrainBaseMapFeatHLSL : public TerrainFeatHLSL virtual Resources getResources( const MaterialFeatureData &fd ); virtual String getName() { return "Terrain Base Texture"; } + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const; }; @@ -91,6 +93,8 @@ class TerrainDetailMapFeatHLSL : public TerrainFeatHLSL virtual Resources getResources( const MaterialFeatureData &fd ); virtual String getName() { return "Terrain Detail Texture"; } + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const; }; @@ -114,6 +118,8 @@ class TerrainMacroMapFeatHLSL : public TerrainFeatHLSL virtual Resources getResources( const MaterialFeatureData &fd ); virtual String getName() { return "Terrain Macro Texture"; } + + virtual U32 getOutputTargets( const MaterialFeatureData &fd ) const; }; @@ -155,4 +161,15 @@ class TerrainAdditiveFeatHLSL : public TerrainFeatHLSL virtual String getName() { return "Terrain Additive"; } }; +class TerrainBlankInfoMapFeatHLSL : public TerrainFeatHLSL +{ +public: + + virtual void processPix(Vector &componentList, + const MaterialFeatureData &fd); + + virtual U32 getOutputTargets(const MaterialFeatureData &fd) const; + virtual String getName() { return "Blank Matinfo map"; } +}; + #endif // _TERRFEATUREHLSL_H_ diff --git a/Engine/source/terrain/terrCellMaterial.cpp b/Engine/source/terrain/terrCellMaterial.cpp index 101c21f0c5..3b96a13183 100644 --- a/Engine/source/terrain/terrCellMaterial.cpp +++ b/Engine/source/terrain/terrCellMaterial.cpp @@ -37,6 +37,7 @@ #include "gfx/util/screenspace.h" #include "lighting/advanced/advancedLightBinManager.h" +S32 sgMaxTerrainMaterialsPerPass = 3; AFTER_MODULE_INIT( MaterialManager ) { @@ -310,12 +311,12 @@ bool TerrainCellMaterial::_createPass( Vector *materials, if ( GFX->getPixelShaderVersion() < 3.0f ) baseOnly = true; - // NOTE: At maximum we only try to combine 3 materials + // NOTE: At maximum we only try to combine sgMaxTerrainMaterialsPerPass materials // into a single pass. This is sub-optimal for the simplest // cases, but the most common case results in much fewer // shader generation failures and permutations leading to // faster load time and less hiccups during gameplay. - U32 matCount = getMin( 3, materials->size() ); + U32 matCount = getMin( sgMaxTerrainMaterialsPerPass, materials->size() ); Vector normalMaps; @@ -349,24 +350,27 @@ bool TerrainCellMaterial::_createPass( Vector *materials, { FeatureSet features; features.addFeature( MFT_VertTransform ); - features.addFeature( MFT_TerrainBaseMap ); if ( prePassMat ) { features.addFeature( MFT_EyeSpaceDepthOut ); features.addFeature( MFT_PrePassConditioner ); + features.addFeature( MFT_DeferredTerrainBaseMap ); + features.addFeature(MFT_isDeferred); if ( advancedLightmapSupport ) - features.addFeature( MFT_RenderTarget1_Zero ); + features.addFeature( MFT_RenderTarget3_Zero ); } else { + features.addFeature( MFT_TerrainBaseMap ); features.addFeature( MFT_RTLighting ); // The HDR feature is always added... it will compile out // if HDR is not enabled in the engine. features.addFeature( MFT_HDROut ); } + features.addFeature(MFT_DeferredTerrainBlankInfoMap); // Enable lightmaps and fogging if we're in BL. if ( reflectMat || useBLM ) @@ -405,8 +409,16 @@ bool TerrainCellMaterial::_createPass( Vector *materials, // check for macro detail texture if ( !(mat->getMacroSize() <= 0 || mat->getMacroDistance() <= 0 || mat->getMacroMap().isEmpty() ) ) + { + if(prePassMat) + features.addFeature( MFT_DeferredTerrainMacroMap, featureIndex ); + else features.addFeature( MFT_TerrainMacroMap, featureIndex ); + } + if(prePassMat) + features.addFeature( MFT_DeferredTerrainDetailMap, featureIndex ); + else features.addFeature( MFT_TerrainDetailMap, featureIndex ); pass->materials.push_back( (*materials)[i] ); @@ -536,8 +548,8 @@ bool TerrainCellMaterial::_createPass( Vector *materials, // MFT_TerrainAdditive feature to lerp the // output normal with the previous pass. // - if ( prePassMat ) - desc.setColorWrites( true, true, false, false ); + //if ( prePassMat ) + //desc.setColorWrites( true, true, false, false ); } // We write to the zbuffer if this is a prepass @@ -656,9 +668,9 @@ bool TerrainCellMaterial::_createPass( Vector *materials, if ( prePassMat ) desc.addDesc( RenderPrePassMgr::getOpaqueStenciWriteDesc( false ) ); - // Flip the cull for reflection materials. - if ( reflectMat ) - desc.setCullMode( GFXCullCW ); + // Shut off culling for prepass materials (reflection support). + if ( prePassMat ) + desc.setCullMode( GFXCullNone ); pass->stateBlock = GFX->createStateBlock( desc ); diff --git a/Engine/source/terrain/terrFeatureTypes.cpp b/Engine/source/terrain/terrFeatureTypes.cpp index b65085916c..5eb8ff0e0e 100644 --- a/Engine/source/terrain/terrFeatureTypes.cpp +++ b/Engine/source/terrain/terrFeatureTypes.cpp @@ -34,4 +34,8 @@ ImplementFeatureType( MFT_TerrainMacroMap, MFG_Texture, 104.0f, false ); ImplementFeatureType( MFT_TerrainLightMap, MFG_Texture, 105.0f, false ); ImplementFeatureType( MFT_TerrainSideProject, MFG_Texture, 106.0f, false ); ImplementFeatureType( MFT_TerrainAdditive, MFG_PostProcess, 999.0f, false ); - +//Deferred Shading +ImplementFeatureType( MFT_DeferredTerrainBaseMap, MFG_Texture, 100.1f, false ); +ImplementFeatureType( MFT_DeferredTerrainDetailMap, MFG_Texture, 102.1f, false ); +ImplementFeatureType( MFT_DeferredTerrainMacroMap, MFG_Texture, 104.1f, false ); +ImplementFeatureType( MFT_DeferredTerrainBlankInfoMap, MFG_Texture, 104.1f, false); diff --git a/Engine/source/terrain/terrFeatureTypes.h b/Engine/source/terrain/terrFeatureTypes.h index 0d2826da95..6246c5fa66 100644 --- a/Engine/source/terrain/terrFeatureTypes.h +++ b/Engine/source/terrain/terrFeatureTypes.h @@ -35,6 +35,12 @@ DeclareFeatureType( MFT_TerrainParallaxMap ); DeclareFeatureType( MFT_TerrainLightMap ); DeclareFeatureType( MFT_TerrainSideProject ); DeclareFeatureType( MFT_TerrainAdditive ); +//Deferred Shading +DeclareFeatureType( MFT_DeferredTerrainBaseMap ); +DeclareFeatureType( MFT_DeferredTerrainDetailMap ); +DeclareFeatureType( MFT_DeferredTerrainMacroMap ); +DeclareFeatureType( MFT_DeferredTerrainBlankInfoMap ); + #endif // _TERRFEATURETYPES_H_ diff --git a/Templates/Full/game/shaders/common/terrain/terrain.glsl b/Templates/Full/game/shaders/common/terrain/terrain.glsl index 79f80888c8..756edd553c 100644 --- a/Templates/Full/game/shaders/common/terrain/terrain.glsl +++ b/Templates/Full/game/shaders/common/terrain/terrain.glsl @@ -32,6 +32,7 @@ float calcBlend( float texId, vec2 layerCoord, float layerSize, vec4 layerSample vec4 diff = clamp( abs( layerSample - texId ), 0.0, 1.0 ); float noBlend = float(any( bvec4(1 - diff) )); + // Check if any of the layer samples // match the current texture id. vec4 factors = vec4(0); for(int i = 0; i < 4; i++) diff --git a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index 2062f43f30..63ce28e2a8 100644 --- a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -1354,132 +1354,6 @@ bitmap = "tools/gui/images/delete"; }; }; - new GuiBitmapCtrl(){ - position="6 357"; - extent ="175 2"; - HorizSizing = "width"; - bitmap ="tools/gui/images/separator-v"; - }; - new GuiContainer(){ // Environment Map - profile="ToolsGuiDefaultProfile"; - isContainer = "1"; - position = "6 359"; - Extent = "185 52"; - HorizSizing = "width"; - - new GuiBitmapCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapDisplayBitmap"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; - wrap = "0"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "EditorTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "56 -3"; - Extent = "72 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "Env Map"; - maxLength = "1024"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 1);"; - tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Change the active Environment Map for this layer."; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/materialEditor/gui/cubemapBtnBorder"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapNameText"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "width"; - VertSizing = "bottom"; - position = "56 16"; - Extent = "143 17"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "None"; - maxLength = "1024"; - }; - new GuiButtonCtrl(){ - profile="ToolsGuiButtonProfile"; - text ="Edit"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "134 34"; - Extent = "40 16"; - buttonType = "PushButton"; - command="MaterialEditorGui.updateTextureMap(\"env\", 1);"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "177 34"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 0);"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/gui/images/delete"; - }; - }; }; }; new GuiRolloutCtrl() { @@ -1491,6 +1365,7 @@ Position = "0 0"; Extent = "195 0"; Caption = "Accumulation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -1967,6 +1842,7 @@ Position = "0 0"; Extent = "185 0"; Caption = "Lighting Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -2364,101 +2240,6 @@ useMouseEvents = "0"; useInactiveState = "0"; }; - new GuiCheckBoxCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceCheckbox"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiCheckBoxProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "8 46"; - Extent = "79 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateActiveMaterial(\"subSurface[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getValue());"; - tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Enables the use of subsurface scattering for this layer."; - hovertime = "1000"; - text = "Sub Surface"; - groupNum = "-1"; - buttonType = "ToggleButton"; - useMouseEvents = "0"; - useInactiveState = "0"; - }; - new GuiSwatchButtonCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceColorSwatch"; - Enabled = "1"; - isContainer = "0"; - Profile = "GuiInspectorSwatchButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "90 46"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "getColorF(materialEd_PreviewMaterial.subSurfaceColor[MaterialEditorGui.currentLayer], \"MaterialEditorGui.updateSubSurfaceColor\");"; - tooltip = "Set the subsurface scattering color"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceRolloffTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 45"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltip = "Set the subsurface rolloff factor"; - Command = "MaterialEditorGui.updateActiveMaterial(\"subSurfaceRolloff[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "5"; - }; - new GuiTextCtrl() { - HorizSizing = "right"; - VertSizing = "bottom"; - position = "9 65"; - Extent = "89 16"; - text = "Minnaert constant"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "minnaertTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 65"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateActiveMaterial(\"minnaertConstant[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "3"; - }; }; }; }; @@ -2471,9 +2252,9 @@ Position = "0 0"; Extent = "185 0"; Caption = "Animation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; - Expanded = false; container = true; parentRollout = %this.rollout; object = %behavior; @@ -3283,6 +3064,7 @@ Position = "0 0"; Extent = "202 0"; Caption = "Advanced (all layers)"; + Expanded = false; Margin = "4 4 4 0"; DragSizable = false; container = true; @@ -3519,7 +3301,7 @@ Profile = "ToolsGuiCheckBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = "100 56"; + position = "105 55"; Extent = "85 16"; MinExtent = "8 2"; canSave = "1"; From 5ed06fff9d1bb7fd5efe4648375ef50962456adf Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 16 Feb 2016 02:29:54 -0600 Subject: [PATCH 114/324] Script: by and large, Opengl branch compatibility alterations, though do again note the inclusion of sampler["lightBuffer"] = "#lightinfo"; sampler["colorBuffer"] = "#color"; sampler["matInfoBuffer"] = "#matinfo"; and samplerNames[5] = "$lightBuffer"; samplerNames[6] = "$colorBuffer"; samplerNames[7] = "$matInfoBuffer"; entries. This is where the engine knows to pass along a given rendertarget for input into a predefined shader, as opposed to the prior phase's output to targets within procedural ones. Shader: the XXXLight.hlsl/glsls account for alterations in inputs, check for emissive and translucency, apply Felix's Normal Mapped Ambient. and pass the results along to AL_DeferredOutput for final computation before returning the result. the lighting.hlsl/.glsl consissts of removal of the overridden engine-specific phong specular variant, and defines the AL_DeferredOutput method, which equates to the previously used pixspecular feature defined along the lines of http://books.google.com/books?id=GY-AAwAAQBAJ&pg=PA112&lpg=PA112&dq=blinn+phong+specular+gloss+hlsl&source=bl&ots=q9SKJkmWHB&sig=uLIHX10Zul0X0LL2ehSMq7IFBIM&hl=en&sa=X&ei=DbcsVPeWEdW1yASDy4LYDw&ved=0CB4Q6AEwAA#v=onepage&q=gloss%20&f=false also includes visualizers Long term impact: This area, along with the \game\shaders\common\lighting\advanced\lightingUtils.hlsl/.glsl pair will be where we plug in properly attenuated Cook-Torrence later, presuming the impact is not to hefty. --- .../client/lighting/advanced/shaders.cs | 26 ++++++++++- .../Full/game/shaders/common/gl/lighting.glsl | 43 ++++++++++++++++--- .../Full/game/shaders/common/lighting.hlsl | 43 ++++++++++++++++--- .../advanced/dbgLightColorVisualizeP.hlsl | 6 +-- .../advanced/dbgLightSpecularVisualizeP.hlsl | 4 +- .../advanced/gl/dbgLightColorVisualizeP.glsl | 8 ++-- .../gl/dbgLightSpecularVisualizeP.glsl | 6 +-- .../lighting/advanced/gl/pointLightP.glsl | 17 +++++++- .../lighting/advanced/gl/spotLightP.glsl | 18 +++++++- .../lighting/advanced/gl/vectorLightP.glsl | 29 ++++++++----- .../common/lighting/advanced/pointLightP.hlsl | 18 +++++++- .../common/lighting/advanced/spotLightP.hlsl | 16 ++++++- .../lighting/advanced/vectorLightP.hlsl | 19 ++++++-- 13 files changed, 203 insertions(+), 50 deletions(-) diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs index 2e73b65696..eaf7f70b8e 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs @@ -36,8 +36,11 @@ samplersDefined = true; samplerStates[0] = SamplerClampPoint; // G-buffer + mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) + mSamplerNames[1] = "shadowMap"; samplerStates[2] = SamplerClampLinear; // SSAO Mask + mSamplerNames[2] = "ssaoMask"; samplerStates[3] = SamplerWrapPoint; // Random Direction Map cullDefined = true; @@ -66,7 +69,9 @@ samplerNames[2] = "$dynamicShadowMap"; samplerNames[3] = "$ssaoMask"; samplerNames[4] = "$gTapRotationTex"; - + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -78,7 +83,10 @@ sampler["prePassBuffer"] = "#prepass"; sampler["shadowMap"] = "$dynamiclight"; sampler["dynamicShadowMap"] = "$dynamicShadowMap"; - sampler["ssaoMask"] = "#ssaoMask"; + sampler["ssaoMask"] = "#ssaoMask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; @@ -103,7 +111,9 @@ samplersDefined = true; samplerStates[0] = SamplerClampPoint; // G-buffer + mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) + mSamplerNames[1] = "shadowMap"; samplerStates[2] = SamplerClampLinear; // Cookie Map samplerStates[3] = SamplerWrapPoint; // Random Direction Map @@ -133,6 +143,9 @@ samplerNames[2] = "$dynamicShadowMap"; samplerNames[3] = "$cookieMap"; samplerNames[4] = "$gTapRotationTex"; + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -146,6 +159,9 @@ sampler["shadowMap"] = "$dynamiclight"; sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; @@ -166,6 +182,9 @@ samplerNames[2] = "$dynamicShadowMap"; samplerNames[3] = "$cookieMap"; samplerNames[4] = "$gTapRotationTex"; + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -179,6 +198,9 @@ sampler["shadowMap"] = "$dynamiclight"; sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; diff --git a/Templates/Full/game/shaders/common/gl/lighting.glsl b/Templates/Full/game/shaders/common/gl/lighting.glsl index eb1c9b3553..804ab1e3b3 100644 --- a/Templates/Full/game/shaders/common/gl/lighting.glsl +++ b/Templates/Full/game/shaders/common/gl/lighting.glsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.glsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( vec3 wsView, /// float AL_CalcSpecular( vec3 toLight, vec3 normal, vec3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +vec4 AL_DeferredOutput( + vec3 lightColor, + vec3 diffuseColor, + vec4 matInfo, + vec4 ambient, + float specular, + float shadowAttenuation) +{ + vec3 specularColor = vec3(specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(max(specular,1.0f), max((matInfo.a / AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= vec3(shadowAttenuation); + lightColor += ambient.rgb; + return vec4(lightColor.rgb, specularOut); +} diff --git a/Templates/Full/game/shaders/common/lighting.hlsl b/Templates/Full/game/shaders/common/lighting.hlsl index ec8129e944..a2c753618b 100644 --- a/Templates/Full/game/shaders/common/lighting.hlsl +++ b/Templates/Full/game/shaders/common/lighting.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.hlsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( float3 wsView, /// float AL_CalcSpecular( float3 toLight, float3 normal, float3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +float4 AL_DeferredOutput( + float3 lightColor, + float3 diffuseColor, + float4 matInfo, + float4 ambient, + float specular, + float shadowAttenuation) +{ + float3 specularColor = float3(specular, specular, specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(specular, max(( matInfo.a/ AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= shadowAttenuation; + lightColor += ambient.rgb; + return float4(lightColor.rgb, specularOut); +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl index 487b4c7405..e037ad8b95 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl @@ -27,8 +27,6 @@ float4 main( PFXVertToPix IN, uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); - return float4( lightcolor, 1.0 ); + float4 lightColor = tex2D( lightPrePassTex, IN.uv0 ); + return float4( lightColor.rgb, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl index edc25ed037..8e1074add9 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl @@ -27,8 +27,6 @@ float4 main( PFXVertToPix IN, uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); + float specular = tex2D( lightPrePassTex, IN.uv0 ).a; return float4( specular, specular, specular, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl index 05645e1932..501e261cad 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); - OUT_col = vec4( lightcolor, 1.0 ); + vec4 lightColor = texture( lightPrePassTex, uv0 ); + OUT_col = vec4( lightColor.rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl index 7e3e41ee98..c21c9b60f5 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); + float specular = texture( lightPrePassTex, uv0 ).a; OUT_col = vec4( specular, specular, specular, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl index 92c9369a76..8a1aae3ca5 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl @@ -33,6 +33,7 @@ in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #ifdef USE_COOKIE_TEX @@ -111,6 +112,10 @@ uniform sampler2D prePassBuffer; uniform sampler2D dynamicShadowMap; #endif +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; + uniform vec4 rtParams0; uniform vec3 lightPosition; @@ -133,6 +138,15 @@ void main() vec3 ssPos = ssPos.xyz / ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -244,5 +258,6 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + vec4 colorSample = texture( colorBuffer, uvScene ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl index 29c278508d..e7f3e88a72 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl @@ -32,10 +32,12 @@ in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #define IN_wsEyeDir wsEyeDir #define IN_ssPos ssPos #define IN_vsEyeDir vsEyeDir +#define IN_color color #ifdef USE_COOKIE_TEX @@ -48,6 +50,10 @@ uniform sampler2D prePassBuffer; uniform sampler2D shadowMap; uniform sampler2D dynamicShadowMap; +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; + uniform vec4 rtParams0; uniform vec3 lightPosition; @@ -74,6 +80,15 @@ void main() vec3 ssPos = IN_ssPos.xyz / IN_ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -180,5 +195,6 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + vec4 colorSample = texture( colorBuffer, uvScene ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl index 4eb4973a3c..608524a5a6 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl @@ -39,10 +39,13 @@ uniform sampler2D dynamicShadowMap; #ifdef USE_SSAO_MASK uniform sampler2D ssaoMask ; -uniform vec4 rtParams2; +uniform vec4 rtParams3; #endif -uniform sampler2D prePassBuffer; +uniform sampler2D prePassBuffer; +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; uniform vec3 lightDirection; uniform vec4 lightColor; uniform float lightBrightness; @@ -189,7 +192,16 @@ vec4 AL_VectorLightShadowCast( sampler2D _sourceshadowMap, out vec4 OUT_col; void main() -{ +{ + // Emissive. + float4 matInfo = texture( matInfoBuffer, uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(1.0, 1.0, 1.0, 0.0); + return; + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); vec3 normal = prepassSample.rgb; @@ -228,8 +240,6 @@ void main() shadowSoftness, dotNL, overDarkPSSM); - - vec4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, uv0.xy, dynamicWorldToLightProj, @@ -242,14 +252,13 @@ void main() shadowSoftness, dotNL, overDarkPSSM); - float static_shadowed = static_shadowed_colors.a; float dynamic_shadowed = dynamic_shadowed_colors.a; #ifdef PSSM_DEBUG_RENDER debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; #endif - + // Fade out the shadow at the end of the range. vec4 zDist = vec4(zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; @@ -295,7 +304,7 @@ void main() // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif @@ -303,6 +312,6 @@ void main() lightColorOut = debugColor; #endif - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); - + vec4 colorSample = texture( colorBuffer, uv0 ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl index 48c0d76e3c..9051ff09d8 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -34,6 +34,7 @@ struct ConvexConnectP float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; + float4 color : COLOR0; }; @@ -117,6 +118,10 @@ float4 main( ConvexConnectP IN, uniform sampler2D dynamicShadowMap : register(S2), #endif + uniform sampler2D lightBuffer : register(S5), + uniform sampler2D colorBuffer : register(S6), + uniform sampler2D matInfoBuffer : register(S7), + uniform float4 rtParams0, uniform float3 lightPosition, @@ -136,7 +141,15 @@ float4 main( ConvexConnectP IN, // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); - + + // Emissive. + float4 matInfo = tex2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + // Sample/unpack the normal/z data float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; @@ -250,5 +263,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = tex2D( colorBuffer, uvScene ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl index 33c7f333e1..226b9cfea4 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -34,6 +34,7 @@ struct ConvexConnectP float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; + float4 color : COLOR0; }; #ifdef USE_COOKIE_TEX @@ -50,6 +51,10 @@ float4 main( ConvexConnectP IN, uniform sampler2D shadowMap : register(S1), uniform sampler2D dynamicShadowMap : register(S2), + uniform sampler2D lightBuffer : register(S5), + uniform sampler2D colorBuffer : register(S6), + uniform sampler2D matInfoBuffer : register(S7), + uniform float4 rtParams0, uniform float3 lightPosition, @@ -72,6 +77,14 @@ float4 main( ConvexConnectP IN, float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + float4 matInfo = tex2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + // Sample/unpack the normal/z data float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; @@ -179,5 +192,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = tex2D( colorBuffer, uvScene ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 2d719587e9..8965765642 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -157,6 +157,10 @@ float4 main( FarFrustumQuadConnectP IN, uniform sampler2D prePassBuffer : register(S0), + uniform sampler2D lightBuffer : register(S5), + uniform sampler2D colorBuffer : register(S6), + uniform sampler2D matInfoBuffer : register(S7), + uniform float3 lightDirection, uniform float4 lightColor, uniform float lightBrightness, @@ -190,7 +194,15 @@ float4 main( FarFrustumQuadConnectP IN, uniform float4 dynamicFarPlaneScalePSSM ) : COLOR0 -{ +{ + // Emissive. + float4 matInfo = tex2D( matInfoBuffer, IN.uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(1.0, 1.0, 1.0, 0.0); + } + // Sample/unpack the normal/z data float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); float3 normal = prepassSample.rgb; @@ -229,7 +241,6 @@ float4 main( FarFrustumQuadConnectP IN, shadowSoftness, dotNL, overDarkPSSM); - float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, IN.uv0.xy, dynamicWorldToLightProj, @@ -276,6 +287,7 @@ float4 main( FarFrustumQuadConnectP IN, float Sat_NL_Att = saturate( dotNL * shadowed ) * lightBrightness; float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float4 addToResult = (lightAmbient * (1 - ambientCameraFactor)) + ( lightAmbient * ambientCameraFactor * saturate(dot(normalize(-IN.vsEyeRay), normal)) ); // TODO: This needs to be removed when lightmapping is disabled @@ -303,5 +315,6 @@ float4 main( FarFrustumQuadConnectP IN, lightColorOut = debugColor; #endif - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = tex2D( colorBuffer, IN.uv0 ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } From 8c5810adad0a828234f634eee1891690ba60f598 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 16 Feb 2016 02:50:49 -0600 Subject: [PATCH 115/324] The final step (barring any overlooked missing bits, requested refactors, and of course, rolling in dependencies already submitted as PRs) consists of: renderPrePassMgr.cpp related: A) shifting .addFeature( MFT_XYZ); calls from ProcessedShaderMaterial::_determineFeatures to ProcessedPrePassMaterial::_determineFeatures B) mimicking the "// set the XXX if different" entries from RenderMeshMgr::render in RenderPrePassMgr::render C) fleshing out ProcessedPrePassMaterial::getNumStages() so that it shares a 1:1 correlation with ProcessedShaderMaterial::getNumStages() D) causing inline void Swizzle::ToBuffer( void *destination, const void *source, const dsize_t size ) to silently fail rather than fatally assert if a source or destination buffer is not yet ready to be filled. (support for #customTarget scripted render targets) Reflections: A) removing reflectRenderState.disableAdvancedLightingBins(true); entries. this would otherwise early out from prepass and provide no color data whatsoever. B) removing the fd.features.addFeature( MFT_ForwardShading ); entry forcing all materials to be forward lit when reflected. C) 2 things best described bluntly as working hacks: C1) when reflected, a scattersky is rotated PI along it's z then x axis in order to draw properly. C2) along similar lines, in terraincellmaterial, we shut off culling if it's a prepass material. Skies: scattersky is given a pair of rotations for reflection purposes, all sky objects are given a z value for depth testing. --- Engine/source/core/util/swizzle.h | 3 +- Engine/source/environment/basicClouds.cpp | 2 +- Engine/source/environment/cloudLayer.cpp | 2 +- Engine/source/environment/decalRoad.cpp | 2 +- Engine/source/environment/scatterSky.cpp | 11 +++- Engine/source/environment/skyBox.cpp | 3 +- .../source/gfx/D3D9/gfxD3D9CardProfiler.cpp | 2 + Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp | 5 ++ Engine/source/gfx/gfxDevice.h | 5 ++ Engine/source/gfx/gl/gfxGLStateBlock.cpp | 8 +++ Engine/source/gfx/gl/gfxGLTextureTarget.cpp | 18 ++++++ Engine/source/gfx/gl/gfxGLWindowTarget.cpp | 1 + .../glsl/advancedLightingFeaturesGLSL.cpp | 30 +++++----- .../advanced/glsl/gBufferConditionerGLSL.cpp | 4 +- .../hlsl/advancedLightingFeaturesHLSL.cpp | 16 ++--- .../advanced/hlsl/gBufferConditionerHLSL.cpp | 2 +- Engine/source/materials/matTextureTarget.cpp | 11 +++- .../source/materials/materialDefinition.cpp | 20 ++++--- Engine/source/materials/materialDefinition.h | 8 ++- Engine/source/materials/processedMaterial.cpp | 8 --- .../materials/processedShaderMaterial.cpp | 58 ++++++------------- .../materials/processedShaderMaterial.h | 3 + .../renderInstance/renderBinManager.cpp | 6 +- .../source/renderInstance/renderBinManager.h | 3 + .../source/renderInstance/renderGlowMgr.cpp | 2 + .../source/renderInstance/renderMeshMgr.cpp | 8 +++ .../source/renderInstance/renderObjectMgr.cpp | 6 ++ .../renderInstance/renderPassManager.cpp | 1 + .../source/renderInstance/renderPassManager.h | 1 + .../renderInstance/renderTerrainMgr.cpp | 5 ++ Engine/source/scene/reflectionManager.cpp | 2 +- Engine/source/scene/reflectionMatHook.cpp | 2 - Engine/source/scene/reflector.cpp | 3 - .../source/shaderGen/GLSL/accuFeatureGLSL.cpp | 4 +- .../source/shaderGen/HLSL/accuFeatureHLSL.cpp | 4 +- .../postFx/hdr/gl/finalPassCombineP.glsl | 9 ++- Templates/Full/game/art/prefabs/fire.prefab | 49 ++++++++++++++++ .../art/shapes/trees/defaulttree/materials.cs | 7 ++- .../game/art/skies/Desert_Sky/materials.cs | 1 + .../Full/game/art/skies/night/materials.cs | 2 + .../game/core/art/skies/blank/materials.cs | 3 + .../scripts/client/lighting/advanced/init.cs | 7 +++ .../core/scripts/client/postFx/caustics.cs | 2 +- .../game/core/scripts/client/postFx/hdr.cs | 3 + .../core/scripts/client/postFx/turbulence.cs | 2 +- .../game/core/scripts/client/scatterSky.cs | 4 +- .../game/shaders/common/basicCloudsV.hlsl | 1 + .../Full/game/shaders/common/cloudLayerV.hlsl | 2 +- .../game/shaders/common/gl/basicCloudsV.glsl | 1 + .../game/shaders/common/gl/cloudLayerV.glsl | 1 + .../game/shaders/common/gl/scatterSkyP.glsl | 3 + .../advanced/deferredColorShaderP.hlsl | 44 ++++++++++++++ .../advanced/gl/dbgDepthVisualizeP.glsl | 4 +- .../advanced/gl/dbgNormalVisualizeP.glsl | 4 +- .../advanced/gl/deferredColorShaderP.glsl | 37 ++++++++++++ .../common/postFx/hdr/finalPassCombineP.hlsl | 7 ++- .../postFx/hdr/gl/finalPassCombineP.glsl | 6 +- .../Full/game/shaders/common/scatterSkyP.hlsl | 2 +- 58 files changed, 353 insertions(+), 117 deletions(-) create mode 100644 Templates/Full/game/art/prefabs/fire.prefab create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl diff --git a/Engine/source/core/util/swizzle.h b/Engine/source/core/util/swizzle.h index abbff288f2..0f1d583f63 100644 --- a/Engine/source/core/util/swizzle.h +++ b/Engine/source/core/util/swizzle.h @@ -120,8 +120,7 @@ inline void Swizzle::ToBuffer( void *destination, const void *sour { // TODO: OpenMP? AssertFatal( size % ( sizeof( T ) * mapLength ) == 0, "Bad buffer size for swizzle, see docs." ); - AssertFatal( destination != NULL, "Swizzle::ToBuffer - got a NULL destination pointer!" ); - AssertFatal( source != NULL, "Swizzle::ToBuffer - got a NULL source pointer!" ); + if (!destination || !source) return; T *dest = reinterpret_cast( destination ); const T *src = reinterpret_cast( source ); diff --git a/Engine/source/environment/basicClouds.cpp b/Engine/source/environment/basicClouds.cpp index 185aa3a97e..979579c2f2 100644 --- a/Engine/source/environment/basicClouds.cpp +++ b/Engine/source/environment/basicClouds.cpp @@ -141,7 +141,7 @@ bool BasicClouds::onAdd() GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); - desc.setZReadWrite( false, false ); + desc.setZReadWrite( true, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; diff --git a/Engine/source/environment/cloudLayer.cpp b/Engine/source/environment/cloudLayer.cpp index dca9faf006..3fe02368fd 100644 --- a/Engine/source/environment/cloudLayer.cpp +++ b/Engine/source/environment/cloudLayer.cpp @@ -161,7 +161,7 @@ bool CloudLayer::onAdd() GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); - desc.setZReadWrite( false, false ); + desc.setZReadWrite( true, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; diff --git a/Engine/source/environment/decalRoad.cpp b/Engine/source/environment/decalRoad.cpp index 3cde83149b..1cea7ed4a8 100644 --- a/Engine/source/environment/decalRoad.cpp +++ b/Engine/source/environment/decalRoad.cpp @@ -732,7 +732,7 @@ void DecalRoad::prepRenderImage( SceneRenderState* state ) MathUtils::getZBiasProjectionMatrix( gDecalBias, frustum, tempMat ); coreRI.projection = tempMat; - coreRI.type = RenderPassManager::RIT_Decal; + coreRI.type = RenderPassManager::RIT_DecalRoad; coreRI.vertBuff = &mVB; coreRI.primBuff = &mPB; coreRI.matInst = matInst; diff --git a/Engine/source/environment/scatterSky.cpp b/Engine/source/environment/scatterSky.cpp index 328a641877..dbdeef48b1 100644 --- a/Engine/source/environment/scatterSky.cpp +++ b/Engine/source/environment/scatterSky.cpp @@ -955,12 +955,21 @@ void ScatterSky::_render( ObjectRenderInst *ri, SceneRenderState *state, BaseMat Point3F camPos2 = state->getCameraPosition(); MatrixF xfm(true); - xfm.setPosition(camPos2 - Point3F( 0, 0, mZOffset)); + GFX->multWorld(xfm); MatrixF xform(proj);//GFX->getProjectionMatrix()); xform *= GFX->getViewMatrix(); xform *= GFX->getWorldMatrix(); + if(state->isReflectPass()) + { + static MatrixF rotMat(EulerF(0.0, 0.0, M_PI_F)); + xform.mul(rotMat); + rotMat.set(EulerF(M_PI_F, 0.0, 0.0)); + xform.mul(rotMat); + } + xform.setPosition(xform.getPosition() - Point3F(0, 0, mZOffset)); + mShaderConsts->setSafe( mModelViewProjSC, xform ); mShaderConsts->setSafe( mMiscSC, miscParams ); mShaderConsts->setSafe( mSphereRadiiSC, sphereRadii ); diff --git a/Engine/source/environment/skyBox.cpp b/Engine/source/environment/skyBox.cpp index 6ed2174e58..83c9bb6e79 100644 --- a/Engine/source/environment/skyBox.cpp +++ b/Engine/source/environment/skyBox.cpp @@ -599,7 +599,8 @@ void SkyBox::_initMaterial() // We want to disable culling and z write. GFXStateBlockDesc desc; - desc.setCullMode( GFXCullCW ); + desc.setCullMode( GFXCullNone ); + desc.setBlend( true ); desc.setZReadWrite( true, false ); mMatInstance->addStateBlockDesc( desc ); diff --git a/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp b/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp index 988e3a4e22..c6b1696140 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9CardProfiler.cpp @@ -87,9 +87,11 @@ void GFXD3D9CardProfiler::setupCardCapabilities() bool canDoFourStageDetailBlend = ( caps.TextureOpCaps & D3DTEXOPCAPS_SUBTRACT ) && ( caps.PrimitiveMiscCaps & D3DPMISCCAPS_TSSARGTEMP ) && ( caps.MaxTextureBlendStages > 3 ); + bool canDoIndependentMrtBitDepth = (caps.PrimitiveMiscCaps & D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS ? 1 : 0 ); setCapability( "lerpDetailBlend", canDoLERPDetailBlend ); setCapability( "fourStageDetailBlend", canDoFourStageDetailBlend ); + setCapability( "independentMrtBitDepth", canDoIndependentMrtBitDepth); } bool GFXD3D9CardProfiler::_queryCardCap(const String &query, U32 &foundResult) diff --git a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp index d545b5ba2b..4158012635 100644 --- a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Target.cpp @@ -31,6 +31,9 @@ #include "gfx/gfxDebugEvent.h" #include "windowManager/win32/win32Window.h" +#ifndef _GFXDEVICE_H_ +#include "gfx/gfxDevice.h" +#endif GFXPCD3D9TextureTarget::GFXPCD3D9TextureTarget() : mTargetSize( Point2I::Zero ), @@ -451,6 +454,7 @@ void GFXPCD3D9WindowTarget::createAdditionalSwapChain() void GFXPCD3D9WindowTarget::resetMode() { + GFX->beginReset(); mWindow->setSuppressReset(true); if (mSwapChain) @@ -509,6 +513,7 @@ void GFXPCD3D9WindowTarget::zombify() void GFXPCD3D9WindowTarget::resurrect() { + GFX->beginReset(); if(mImplicit) { setImplicitSwapChain(); diff --git a/Engine/source/gfx/gfxDevice.h b/Engine/source/gfx/gfxDevice.h index b9ff01e8cc..44ca1d7676 100644 --- a/Engine/source/gfx/gfxDevice.h +++ b/Engine/source/gfx/gfxDevice.h @@ -302,6 +302,7 @@ class GFXDevice /// This will allow querying to see if a device is initialized and ready to /// have operations performed on it. bool mInitialized; + bool mReset; /// This is called before this, or any other device, is deleted in the global destroy() /// method. It allows the device to clean up anything while everything is still valid. @@ -326,6 +327,10 @@ class GFXDevice /// @see endScene bool canCurrentlyRender() const { return mCanCurrentlyRender; } + bool recentlyReset(){ return mReset; } + void beginReset(){ mReset = true; } + void finalizeReset(){ mReset = false; } + void setAllowRender( bool render ) { mAllowRender = render; } inline bool allowRender() const { return mAllowRender; } diff --git a/Engine/source/gfx/gl/gfxGLStateBlock.cpp b/Engine/source/gfx/gl/gfxGLStateBlock.cpp index a1af2910c4..34f816dc90 100644 --- a/Engine/source/gfx/gl/gfxGLStateBlock.cpp +++ b/Engine/source/gfx/gl/gfxGLStateBlock.cpp @@ -107,6 +107,14 @@ void GFXGLStateBlock::activate(const GFXGLStateBlock* oldState) if(STATE_CHANGE(blendOp)) glBlendEquation(GFXGLBlendOp[mDesc.blendOp]); + if (mDesc.separateAlphaBlendEnable == true) + { + if (STATE_CHANGE(separateAlphaBlendSrc) || STATE_CHANGE(separateAlphaBlendDest)) + glBlendFuncSeparate(GFXGLBlend[mDesc.blendSrc], GFXGLBlend[mDesc.blendDest], GFXGLBlend[mDesc.separateAlphaBlendSrc], GFXGLBlend[mDesc.separateAlphaBlendDest]); + if (STATE_CHANGE(separateAlphaBlendOp)) + glBlendEquationSeparate(GFXGLBlendOp[mDesc.blendOp], GFXGLBlendOp[mDesc.separateAlphaBlendOp]); + } + // Color write masks if(STATE_CHANGE(colorWriteRed) || STATE_CHANGE(colorWriteBlue) || STATE_CHANGE(colorWriteGreen) || STATE_CHANGE(colorWriteAlpha)) glColorMask(mDesc.colorWriteRed, mDesc.colorWriteBlue, mDesc.colorWriteGreen, mDesc.colorWriteAlpha); diff --git a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp index ddb308adc8..2022651072 100644 --- a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp @@ -163,6 +163,10 @@ void _GFXGLTextureTargetFBOImpl::applyState() PRESERVE_FRAMEBUFFER(); glBindFramebuffer(GL_FRAMEBUFFER, mFramebuffer); + bool drawbufs[16]; + int bufsize = 0; + for (int i = 0; i < 16; i++) + drawbufs[i] = false; bool hasColor = false; for(int i = 0; i < GFXGL->getNumRenderTargets(); ++i) { @@ -200,6 +204,20 @@ void _GFXGLTextureTargetFBOImpl::applyState() glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 0, 0); } + GLenum *buf = new GLenum[bufsize]; + int count = 0; + for (int i = 0; i < bufsize; i++) + { + if (drawbufs[i]) + { + buf[count] = GL_COLOR_ATTACHMENT0 + i; + count++; + } + } + + glDrawBuffers(bufsize, buf); + + delete[] buf; CHECK_FRAMEBUFFER_STATUS(); } diff --git a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp index c00506835e..5f8808cae0 100644 --- a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp @@ -57,6 +57,7 @@ void GFXGLWindowTarget::resetMode() _teardownCurrentMode(); _setupNewMode(); } + GFX->beginReset(); } void GFXGLWindowTarget::_onAppSignal(WindowId wnd, S32 event) diff --git a/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp b/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp index ce90bcc39c..c97fbbcf59 100644 --- a/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/advancedLightingFeaturesGLSL.cpp @@ -156,8 +156,8 @@ void DeferredRTLightingFeatGLSL::processPix( Vector &component oneOverTargetSize->constSortPos = cspPass; } - meta->addStatement( new GenOp( " float id_NL_Att, id_specular;\r\n float3 id_lightcolor;\r\n" ) ); - meta->addStatement( new GenOp( avar( " %s(tex2D(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", + meta->addStatement( new GenOp( " float id_NL_Att, id_specular;\r\n vec3 id_lightcolor;\r\n" ) ); + meta->addStatement( new GenOp( avar( " %s(tex2D(@, @ + vec2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", unconditionLightInfo.c_str() ), lightInfoBuffer, uvScene, oneOverTargetSize ) ); meta->addStatement( new GenOp(" @ = lerp(@, id_lightcolor, 0.5);\r\n", d_lightcolor, d_lightcolor ) ); @@ -167,7 +167,7 @@ void DeferredRTLightingFeatGLSL::processPix( Vector &component // This is kind of weak sauce if( !fd.features[MFT_VertLit] && !fd.features[MFT_ToneMap] && !fd.features[MFT_LightMap] && !fd.features[MFT_SubSurface] ) - meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(@, 1.0)", d_lightcolor ), Material::Mul ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "vec4(@, 1.0)", d_lightcolor ), Material::Mul ) ) ); output = meta; } @@ -311,7 +311,7 @@ void DeferredBumpFeatGLSL::processPix( Vector &componentList, meta->addStatement( new GenOp( " @.xy += @.xy * @;\r\n", bumpNorm, detailBump, detailBumpScale ) ); } - // This var is read from GBufferConditionerHLSL and + // This var is read from GBufferConditionerGLSL and // used in the prepass output. // // By using the 'half' type here we get a bunch of partial @@ -533,11 +533,13 @@ void DeferredPixelSpecularGLSL::processPix( Vector &component specPow->constSortPos = cspPotentialPrimitive; } - Var *specStrength = new Var; - specStrength->setType( "float" ); - specStrength->setName( "specularStrength" ); - specStrength->uniform = true; - specStrength->constSortPos = cspPotentialPrimitive; + Var *specStrength = (Var*)LangElement::find( "specularStrength" ); + if (!specStrength) + { + specStrength = new Var( "specularStrength", "float" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + } Var *lightInfoSamp = (Var *)LangElement::find( "lightInfoSample" ); Var *d_specular = (Var*)LangElement::find( "d_specular" ); @@ -555,10 +557,10 @@ void DeferredPixelSpecularGLSL::processPix( Vector &component meta->addStatement(new GenOp(" @ = clamp( lerp( @, @ * @, @.a), 0, 1);\r\n", d_specular, d_specular, accuSpecular, d_specular, accuPlc)); } // (a^m)^n = a^(m*n) - meta->addStatement( new GenOp( " @ = pow( abs(@), max((@ / AL_ConstantSpecularPower),1.0f)) * @;\r\n", + meta->addStatement( new GenOp( " @ = pow( abs(@), max((@ / AL_ConstantSpecularPower),1.0f)) * @;\r\n", specDecl, d_specular, specPow, specStrength ) ); - LangElement *specMul = new GenOp( "float4( @.rgb, 0 ) * @", specCol, specular ); + LangElement *specMul = new GenOp( "vec4( @.rgb, 0 ) * @", specCol, specular ); LangElement *final = specMul; // We we have a normal map then mask the specular @@ -682,10 +684,10 @@ void DeferredMinnaertGLSL::processPix( Vector &componentList, Var *d_NL_Att = (Var*)LangElement::find( "d_NL_Att" ); - meta->addStatement( new GenOp( avar( " float4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str() ), prepassBuffer, uvScene ) ); + meta->addStatement( new GenOp( avar( " vec4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str() ), prepassBuffer, uvScene ) ); meta->addStatement( new GenOp( " float vDotN = dot(normalDepth.xyz, @);\r\n", wsViewVec ) ); meta->addStatement( new GenOp( " float Minnaert = pow( @, @) * pow(vDotN, 1.0 - @);\r\n", d_NL_Att, minnaertConstant, minnaertConstant ) ); - meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(Minnaert, Minnaert, Minnaert, 1.0)" ), Material::Mul ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "vec4(Minnaert, Minnaert, Minnaert, 1.0)" ), Material::Mul ) ) ); output = meta; } @@ -713,7 +715,7 @@ void DeferredSubSurfaceGLSL::processPix( Vector &componentLis MultiLine *meta = new MultiLine; meta->addStatement( new GenOp( " float subLamb = smoothstep(-@.a, 1.0, @) - smoothstep(0.0, 1.0, @);\r\n", subSurfaceParams, d_NL_Att, d_NL_Att ) ); meta->addStatement( new GenOp( " subLamb = max(0.0, subLamb);\r\n" ) ); - meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(@ + (subLamb * @.rgb), 1.0)", d_lightcolor, subSurfaceParams ), Material::Mul ) ) ); + meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "vec4(@ + (subLamb * @.rgb), 1.0)", d_lightcolor, subSurfaceParams ), Material::Mul ) ) ); output = meta; } diff --git a/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp b/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp index 6e5795e832..d2d3831487 100644 --- a/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp @@ -170,7 +170,7 @@ void GBufferConditionerGLSL::processPix( Vector &componentLis if ( fd.features[ MFT_IsTranslucentZWrite ] ) { alphaVal = new Var( "outAlpha", "float" ); - meta->addStatement( new GenOp( " @ = col.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); + meta->addStatement( new GenOp( " @ = OUT_col1.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); } // If using interlaced normals, invert the normal @@ -397,7 +397,7 @@ Var* GBufferConditionerGLSL::_unconditionInput( Var *conditionedInput, MultiLine // Recover depth from encoding if(mNormalStorageType != CartesianXYZ) { - const U64 maxValPerChannel = 1 << mBitsPerChannel; + const U64 maxValPerChannel = (U64)1 << mBitsPerChannel; meta->addStatement( new GenOp( " \r\n // Decode depth\r\n" ) ); meta->addStatement( new GenOp( avar( " @.w = dot( @.zw, float2(1.0, 1.0/%llu.0));\r\n", maxValPerChannel - 1 ), retVar, conditionedInput ) ); diff --git a/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp index deda7cbaef..0bfbed42a2 100644 --- a/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp @@ -227,7 +227,7 @@ void DeferredBumpFeatHLSL::processVert( Vector &componentLis const bool useTexAnim = fd.features[MFT_TexAnim]; // Make sure there are texcoords - if( !fd.features[MFT_Parallax] && !fd.features[MFT_DiffuseMap] ) + if( !fd.features[MFT_Parallax] && !fd.features[MFT_DiffuseMap]) { getOutTexCoord( "texCoord", @@ -532,11 +532,13 @@ void DeferredPixelSpecularHLSL::processPix( Vector &component specPow->constSortPos = cspPotentialPrimitive; } - Var *specStrength = new Var; - specStrength->setType( "float" ); - specStrength->setName( "specularStrength" ); - specStrength->uniform = true; - specStrength->constSortPos = cspPotentialPrimitive; + Var *specStrength = (Var*)LangElement::find( "specularStrength" ); + if (!specStrength) + { + specStrength = new Var( "specularStrength", "float" ); + specStrength->uniform = true; + specStrength->constSortPos = cspPotentialPrimitive; + } Var *lightInfoSamp = (Var *)LangElement::find( "lightInfoSample" ); Var *d_specular = (Var*)LangElement::find( "d_specular" ); @@ -556,7 +558,7 @@ void DeferredPixelSpecularHLSL::processPix( Vector &component // (a^m)^n = a^(m*n) meta->addStatement( new GenOp( " @ = pow( abs(@), max((@ / AL_ConstantSpecularPower),1.0f)) * @;\r\n", - specDecl, d_specular, specPow, specStrength ) ); + specDecl, d_specular, specPow, specStrength)); LangElement *specMul = new GenOp( "float4( @.rgb, 0 ) * @", specCol, specular ); LangElement *final = specMul; diff --git a/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp b/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp index 93f9477e99..6f99d035c7 100644 --- a/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp @@ -170,7 +170,7 @@ void GBufferConditionerHLSL::processPix( Vector &componentLis if ( fd.features[ MFT_IsTranslucentZWrite ] ) { alphaVal = new Var( "outAlpha", "float" ); - meta->addStatement( new GenOp( " @ = OUT.col.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); + meta->addStatement( new GenOp( " @ = OUT.col1.a; // MFT_IsTranslucentZWrite\r\n", new DecOp( alphaVal ) ) ); } // If using interlaced normals, invert the normal diff --git a/Engine/source/materials/matTextureTarget.cpp b/Engine/source/materials/matTextureTarget.cpp index ba84142f6c..f6770c83b0 100644 --- a/Engine/source/materials/matTextureTarget.cpp +++ b/Engine/source/materials/matTextureTarget.cpp @@ -47,9 +47,16 @@ bool NamedTexTarget::registerWithName( const String &name ) } // Make sure the target name isn't empty or already taken. - if ( name.isEmpty() || smTargets.contains( name ) ) + if ( name.isEmpty()) + { + Con::errorf("NamedTexTarget::registerWithName( const String &name ) No name given!"); + return false; + } + if (smTargets.contains( name ) ) + { + Con::errorf("NamedTexTarget::registerWithName( %s ) Already used!", name.c_str()); return false; - + } mName = name; mIsRegistered = true; smTargets.insert( mName, this ); diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index 408df976f7..883d4b7ab9 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -162,6 +162,9 @@ Material::Material() mSeqFramePerSec[i] = 0.0f; mSeqSegSize[i] = 0.0f; + + // Deferred Shading + mMatInfoFlags[i] = 0.0f; } dMemset(mCellIndex, 0, sizeof(mCellIndex)); @@ -170,6 +173,9 @@ Material::Material() dMemset(mNormalMapAtlas, 0, sizeof(mNormalMapAtlas)); dMemset(mUseAnisotropic, 0, sizeof(mUseAnisotropic)); + // Deferred Shading : Metalness + dMemset(mUseMetalness, 0, sizeof(mUseMetalness)); + mImposterLimits = Point4F::Zero; mDoubleSided = false; @@ -204,6 +210,9 @@ Material::Material() mDirectSoundOcclusion = 1.f; mReverbSoundOcclusion = 1.0; + + // Deferred Shading + mIsSky = false; } void Material::initPersistFields() @@ -289,10 +298,7 @@ void Material::initPersistFields() addField( "useAnisotropic", TypeBool, Offset(mUseAnisotropic, Material), MAX_STAGES, "Use anisotropic filtering for the textures of this stage." ); - - addField("envMap", TypeImageFilename, Offset(mEnvMapFilename, Material), MAX_STAGES, - "The name of an environment map cube map to apply to this material." ); - + addField("vertLit", TypeBool, Offset(mVertLit, Material), MAX_STAGES, "If true the vertex color is used for lighting." ); @@ -379,9 +385,6 @@ void Material::initPersistFields() addProtectedField("bumpTex", TypeImageFilename, Offset(mNormalMapFilename, Material), defaultProtectedSetNotEmptyFn, emptyStringProtectedGetFn, MAX_STAGES, "For backwards compatibility.\n@see normalMap\n"); - addProtectedField("envTex", TypeImageFilename, Offset(mEnvMapFilename, Material), - defaultProtectedSetNotEmptyFn, emptyStringProtectedGetFn, MAX_STAGES, - "For backwards compatibility.\n@see envMap\n"); addProtectedField("colorMultiply", TypeColorF, Offset(mDiffuse, Material), defaultProtectedSetNotEmptyFn, emptyStringProtectedGetFn, MAX_STAGES, "For backwards compatibility.\n@see diffuseColor\n"); @@ -417,6 +420,9 @@ void Material::initPersistFields() addField("dynamicCubemap", TypeBool, Offset(mDynamicCubemap, Material), "Enables the material to use the dynamic cubemap from the ShapeBase object its applied to." ); + addField("isSky", TypeBool, Offset(mIsSky, Material), + "Sky support. Alters draw dimensions." ); + addGroup( "Behavioral" ); addField( "showFootprints", TypeBool, Offset( mShowFootprints, Material ), diff --git a/Engine/source/materials/materialDefinition.h b/Engine/source/materials/materialDefinition.h index 491b56cf0f..d676c8f02b 100644 --- a/Engine/source/materials/materialDefinition.h +++ b/Engine/source/materials/materialDefinition.h @@ -221,8 +221,6 @@ class Material : public BaseMaterialDefinition /// The strength scalar for the detail normal map. F32 mDetailNormalMapStrength[MAX_STAGES]; - FileName mEnvMapFilename[MAX_STAGES]; - /// This color is the diffuse color of the material /// or if it has a texture it is multiplied against /// the diffuse texture color. @@ -287,12 +285,18 @@ class Material : public BaseMaterialDefinition /// If the stage should use anisotropic filtering. bool mUseAnisotropic[MAX_STAGES]; + // Deferred Shading: Metalness + bool mUseMetalness[MAX_STAGES]; + bool mDoubleSided; String mCubemapName; CubemapData* mCubemapData; bool mDynamicCubemap; + // Deferred Shading + bool mIsSky; + F32 mMatInfoFlags[MAX_STAGES]; bool mTranslucent; BlendOp mTranslucentBlendOp; bool mTranslucentZWrite; diff --git a/Engine/source/materials/processedMaterial.cpp b/Engine/source/materials/processedMaterial.cpp index 10181179ef..00a3b8ec26 100644 --- a/Engine/source/materials/processedMaterial.cpp +++ b/Engine/source/materials/processedMaterial.cpp @@ -455,14 +455,6 @@ void ProcessedMaterial::_setStageData() if(!mStages[i].getTex( MFT_SpecularMap )) mMaterial->logError("Failed to load specular map %s for stage %i", _getTexturePath(mMaterial->mSpecularMapFilename[i]).c_str(), i); } - - // EnironmentMap - if( mMaterial->mEnvMapFilename[i].isNotEmpty() ) - { - mStages[i].setTex( MFT_EnvMap, _createTexture( mMaterial->mEnvMapFilename[i], &GFXDefaultStaticDiffuseProfile ) ); - if(!mStages[i].getTex( MFT_EnvMap )) - mMaterial->logError("Failed to load environment map %s for stage %i", _getTexturePath(mMaterial->mEnvMapFilename[i]).c_str(), i); - } } mMaterial->mCubemapData = dynamic_cast(Sim::findObject( mMaterial->mCubemapName )); diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 431e3bce65..37f7452537 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -106,6 +106,9 @@ void ShaderConstHandles::init( GFXShader *shader, CustomMaterial* mat /*=NULL*/ for (S32 i = 0; i < Material::MAX_TEX_PER_PASS; ++i) mTexHandlesSC[i] = shader->getShaderConstHandle(mat->mSamplerNames[i]); } + + // Deferred Shading + mMatInfoFlagsSC = shader->getShaderConstHandle(ShaderGenVars::matInfoFlags); } /// @@ -208,28 +211,6 @@ bool ProcessedShaderMaterial::init( const FeatureSet &features, mInstancingState = new InstancingState(); mInstancingState->setFormat( &_getRPD( 0 )->shader->mInstancingFormat, mVertexFormat ); } - - // Check for a RenderTexTargetBin assignment - // *IMPORTANT NOTE* - // This is a temporary solution for getting diffuse mapping working with tex targets for standard materials - // It should be removed once this is done properly, at that time the sAllowTextureTargetAssignment should also be removed - // from Material (it is necessary for catching shadow maps/post effect this shouldn't be applied to) - if (Material::sAllowTextureTargetAssignment) - if (mMaterial && mMaterial->mDiffuseMapFilename[0].isNotEmpty() && mMaterial->mDiffuseMapFilename[0].substr( 0, 1 ).equal("#")) - { - String texTargetBufferName = mMaterial->mDiffuseMapFilename[0].substr(1, mMaterial->mDiffuseMapFilename[0].length() - 1); - NamedTexTarget *texTarget = NamedTexTarget::find( texTargetBufferName ); - - RenderPassData* rpd = getPass(0); - - if (rpd) - { - rpd->mTexSlot[0].texTarget = texTarget; - rpd->mTexType[0] = Material::TexTarget; - rpd->mSamplerNames[0] = "diffuseMap"; - } - } - return true; } @@ -353,11 +334,18 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, fd.features.addFeature( MFT_VertLit ); // cubemaps only available on stage 0 for now - bramage - if ( stageNum < 1 && + if ( stageNum < 1 && mMaterial->isTranslucent() && ( ( mMaterial->mCubemapData && mMaterial->mCubemapData->mCubemap ) || mMaterial->mDynamicCubemap ) ) - fd.features.addFeature( MFT_CubeMap ); + { + fd.features.addFeature( MFT_CubeMap ); + } + if (mMaterial->mIsSky) + { + fd.features.addFeature(MFT_CubeMap); + fd.features.addFeature(MFT_SkyBox); + } fd.features.addFeature( MFT_Visibility ); if ( lastStage && @@ -428,7 +416,6 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, if ( mMaterial->mAccuEnabled[stageNum] ) { - fd.features.addFeature( MFT_AccuMap ); mHasAccumulation = true; } @@ -441,19 +428,7 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, fd.features.removeFeature( MFT_AccuMap ); mHasAccumulation = false; } - - // if we still have the AccuMap feature, we add all accu constant features - if ( fd.features[ MFT_AccuMap ] ) { - // add the dependencies of the accu map - fd.features.addFeature( MFT_AccuScale ); - fd.features.addFeature( MFT_AccuDirection ); - fd.features.addFeature( MFT_AccuStrength ); - fd.features.addFeature( MFT_AccuCoverage ); - fd.features.addFeature( MFT_AccuSpecular ); - // now remove some features that are not compatible with this - fd.features.removeFeature( MFT_UseInstancing ); - } - + // Without a base texture use the diffuse color // feature to ensure some sort of output. if (!fd.features[MFT_DiffuseMap]) @@ -1175,7 +1150,12 @@ void ProcessedShaderMaterial::_setShaderConstants(SceneRenderState * state, cons 0.0f, 0.0f ); // TODO: Wrap mode flags? shaderConsts->setSafe(handles->mBumpAtlasTileSC, atlasTileParams); } - + + // Deferred Shading: Determine Material Info Flags + S32 matInfoFlags = + (mMaterial->mEmissive[stageNum] ? 1 : 0); + mMaterial->mMatInfoFlags[stageNum] = matInfoFlags / 255.0f; + shaderConsts->setSafe(handles->mMatInfoFlagsSC, mMaterial->mMatInfoFlags[stageNum]); if( handles->mAccuScaleSC->isValid() ) shaderConsts->set( handles->mAccuScaleSC, mMaterial->mAccuScale[stageNum] ); if( handles->mAccuDirectionSC->isValid() ) diff --git a/Engine/source/materials/processedShaderMaterial.h b/Engine/source/materials/processedShaderMaterial.h index dc5dbf8722..9bcc0eec7e 100644 --- a/Engine/source/materials/processedShaderMaterial.h +++ b/Engine/source/materials/processedShaderMaterial.h @@ -87,6 +87,9 @@ class ShaderConstHandles GFXShaderConstHandle *mImposterUVs; GFXShaderConstHandle *mImposterLimits; + // Deferred Shading : Material Info Flags + GFXShaderConstHandle* mMatInfoFlagsSC; + GFXShaderConstHandle* mTexHandlesSC[Material::MAX_TEX_PER_PASS]; GFXShaderConstHandle* mRTParamsSC[TEXTURE_STAGE_COUNT]; diff --git a/Engine/source/renderInstance/renderBinManager.cpp b/Engine/source/renderInstance/renderBinManager.cpp index 8ebe693342..c3b3f135d6 100644 --- a/Engine/source/renderInstance/renderBinManager.cpp +++ b/Engine/source/renderInstance/renderBinManager.cpp @@ -36,7 +36,8 @@ RenderBinManager::RenderBinManager( const RenderInstType& ritype, F32 renderOrde mRenderInstType( ritype ), mRenderOrder( renderOrder ), mProcessAddOrder( processAddOrder ), - mRenderPass( NULL ) + mRenderPass( NULL ), + mBasicOnly ( false ) { VECTOR_SET_ASSOCIATION( mElementList ); mElementList.reserve( 2048 ); @@ -60,6 +61,9 @@ void RenderBinManager::initPersistFields() addField("processAddOrder", TypeF32, Offset(mProcessAddOrder, RenderBinManager), "Defines the order for adding instances in relation to other bins." ); + addField( "basicOnly", TypeBool, Offset(mBasicOnly, RenderBinManager), + "Limites the render bin to basic lighting only." ); + Parent::initPersistFields(); } diff --git a/Engine/source/renderInstance/renderBinManager.h b/Engine/source/renderInstance/renderBinManager.h index cc5bbe6c30..2a1a4cbb52 100644 --- a/Engine/source/renderInstance/renderBinManager.h +++ b/Engine/source/renderInstance/renderBinManager.h @@ -128,6 +128,8 @@ class RenderBinManager : public SimObject /// RenderInst if available, otherwise, return NULL. inline BaseMatInstance* getMaterial( RenderInst *inst ) const; + // Limits bin to rendering in basic lighting only. + bool mBasicOnly; }; @@ -160,6 +162,7 @@ inline BaseMatInstance* RenderBinManager::getMaterial( RenderInst *inst ) const { if ( inst->type == RenderPassManager::RIT_Mesh || inst->type == RenderPassManager::RIT_Decal || + inst->type == RenderPassManager::RIT_DecalRoad || inst->type == RenderPassManager::RIT_Translucent ) return static_cast(inst)->matInst; diff --git a/Engine/source/renderInstance/renderGlowMgr.cpp b/Engine/source/renderInstance/renderGlowMgr.cpp index ed48c095fb..14e6ce0164 100644 --- a/Engine/source/renderInstance/renderGlowMgr.cpp +++ b/Engine/source/renderInstance/renderGlowMgr.cpp @@ -79,6 +79,7 @@ void RenderGlowMgr::GlowMaterialHook::_overrideFeatures( ProcessedMaterial *mat, // the glow materials. fd.features.removeFeature( MFT_Fog ); fd.features.removeFeature( MFT_HDROut ); + fd.features.addFeature( MFT_Imposter ); } RenderGlowMgr::RenderGlowMgr() @@ -89,6 +90,7 @@ RenderGlowMgr::RenderGlowMgr() Point2I( 512, 512 ) ) { notifyType( RenderPassManager::RIT_Decal ); + notifyType( RenderPassManager::RIT_DecalRoad ); notifyType( RenderPassManager::RIT_Translucent ); notifyType( RenderPassManager::RIT_Particle ); diff --git a/Engine/source/renderInstance/renderMeshMgr.cpp b/Engine/source/renderInstance/renderMeshMgr.cpp index 67114329db..b224e5469e 100644 --- a/Engine/source/renderInstance/renderMeshMgr.cpp +++ b/Engine/source/renderInstance/renderMeshMgr.cpp @@ -144,6 +144,14 @@ void RenderMeshMgr::render(SceneRenderState * state) if( !mat ) mat = MATMGR->getWarningMatInstance(); + // Check if bin is disabled in advanced lighting. + // Allow forward rendering pass on custom materials. + + if ( ( MATMGR->getPrePassEnabled() && mBasicOnly && !mat->isCustomMaterial() ) ) + { + j++; + continue; + } U32 matListEnd = j; lastMiscTex = sgData.miscTex; diff --git a/Engine/source/renderInstance/renderObjectMgr.cpp b/Engine/source/renderInstance/renderObjectMgr.cpp index 6f79f9128d..6cfab0abab 100644 --- a/Engine/source/renderInstance/renderObjectMgr.cpp +++ b/Engine/source/renderInstance/renderObjectMgr.cpp @@ -22,6 +22,8 @@ #include "renderObjectMgr.h" #include "console/consoleTypes.h" #include "scene/sceneObject.h" +#include "materials/materialManager.h" +#include "scene/sceneRenderState.h" IMPLEMENT_CONOBJECT(RenderObjectMgr); @@ -66,6 +68,10 @@ void RenderObjectMgr::render( SceneRenderState *state ) if(!mElementList.size()) return; + // Check if bin is disabled in advanced lighting. + if ( MATMGR->getPrePassEnabled() && mBasicOnly ) + return; + for( U32 i=0; i(mElementList[i].inst); diff --git a/Engine/source/renderInstance/renderPassManager.cpp b/Engine/source/renderInstance/renderPassManager.cpp index 68daed77e9..f620a627b5 100644 --- a/Engine/source/renderInstance/renderPassManager.cpp +++ b/Engine/source/renderInstance/renderPassManager.cpp @@ -51,6 +51,7 @@ const RenderInstType RenderPassManager::RIT_Terrain("Terrain"); const RenderInstType RenderPassManager::RIT_Object("Object"); const RenderInstType RenderPassManager::RIT_ObjectTranslucent("ObjectTranslucent"); const RenderInstType RenderPassManager::RIT_Decal("Decal"); +const RenderInstType RenderPassManager::RIT_DecalRoad("DecalRoad"); const RenderInstType RenderPassManager::RIT_Water("Water"); const RenderInstType RenderPassManager::RIT_Foliage("Foliage"); const RenderInstType RenderPassManager::RIT_VolumetricFog("ObjectVolumetricFog"); diff --git a/Engine/source/renderInstance/renderPassManager.h b/Engine/source/renderInstance/renderPassManager.h index b192fdb0ea..2aa1e37ee2 100644 --- a/Engine/source/renderInstance/renderPassManager.h +++ b/Engine/source/renderInstance/renderPassManager.h @@ -108,6 +108,7 @@ class RenderPassManager : public SimObject static const RenderInstType RIT_Object; // objects that do their own rendering static const RenderInstType RIT_ObjectTranslucent;// self rendering; but sorted with static const RenderInstType RIT_Translucent static const RenderInstType RIT_Decal; + static const RenderInstType RIT_DecalRoad; static const RenderInstType RIT_Water; static const RenderInstType RIT_Foliage; static const RenderInstType RIT_VolumetricFog; diff --git a/Engine/source/renderInstance/renderTerrainMgr.cpp b/Engine/source/renderInstance/renderTerrainMgr.cpp index f298ff51c0..4a67e686f3 100644 --- a/Engine/source/renderInstance/renderTerrainMgr.cpp +++ b/Engine/source/renderInstance/renderTerrainMgr.cpp @@ -35,6 +35,7 @@ #include "terrain/terrCell.h" #include "terrain/terrCellMaterial.h" #include "math/util/matrixSet.h" +#include "materials/materialManager.h" bool RenderTerrainMgr::smRenderWireframe = false; @@ -117,6 +118,10 @@ void RenderTerrainMgr::render( SceneRenderState *state ) if ( mInstVector.empty() ) return; + // Check if bin is disabled in advanced lighting. + if ( MATMGR->getPrePassEnabled() && mBasicOnly ) + return; + PROFILE_SCOPE( RenderTerrainMgr_Render ); GFXTransformSaver saver; diff --git a/Engine/source/scene/reflectionManager.cpp b/Engine/source/scene/reflectionManager.cpp index 057c72c0a1..323e11c8af 100644 --- a/Engine/source/scene/reflectionManager.cpp +++ b/Engine/source/scene/reflectionManager.cpp @@ -58,7 +58,7 @@ MODULE_END; GFX_ImplementTextureProfile( ReflectRenderTargetProfile, GFXTextureProfile::DiffuseMap, - GFXTextureProfile::PreserveSize | GFXTextureProfile::NoMipmap | GFXTextureProfile::RenderTarget | GFXTextureProfile::Pooled, + GFXTextureProfile::PreserveSize | GFXTextureProfile::RenderTarget | GFXTextureProfile::Pooled, GFXTextureProfile::NONE ); GFX_ImplementTextureProfile( RefractTextureProfile, diff --git a/Engine/source/scene/reflectionMatHook.cpp b/Engine/source/scene/reflectionMatHook.cpp index b869cabc93..646b0145c5 100644 --- a/Engine/source/scene/reflectionMatHook.cpp +++ b/Engine/source/scene/reflectionMatHook.cpp @@ -89,8 +89,6 @@ void ReflectionMaterialHook::_overrideFeatures( ProcessedMaterial *mat, return; } - // Forward shading on materials in reflections - fd.features.addFeature( MFT_ForwardShading ); fd.features.addFeature( MFT_Fog ); } diff --git a/Engine/source/scene/reflector.cpp b/Engine/source/scene/reflector.cpp index 254839813e..1addaf1915 100644 --- a/Engine/source/scene/reflector.cpp +++ b/Engine/source/scene/reflector.cpp @@ -419,7 +419,6 @@ void CubeReflector::updateFace( const ReflectParams ¶ms, U32 faceidx ) reflectRenderState.getMaterialDelegate().bind( REFLECTMGR, &ReflectionManager::getReflectionMaterial ); reflectRenderState.setDiffuseCameraTransform( params.query->cameraMatrix ); - reflectRenderState.disableAdvancedLightingBins(true); // render scene LIGHTMGR->registerGlobalLights( &reflectRenderState.getCullingFrustum(), false ); @@ -633,7 +632,6 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms ) renderStateLeft.setSceneRenderField(0); renderStateLeft.getMaterialDelegate().bind( REFLECTMGR, &ReflectionManager::getReflectionMaterial ); renderStateLeft.setDiffuseCameraTransform( params.query->eyeTransforms[0] ); - renderStateLeft.disableAdvancedLightingBins(true); gClientSceneGraph->renderSceneNoLights( &renderStateLeft, objTypeFlag ); @@ -672,7 +670,6 @@ void PlaneReflector::updateReflection( const ReflectParams ¶ms ) reflectRenderState.getMaterialDelegate().bind( REFLECTMGR, &ReflectionManager::getReflectionMaterial ); reflectRenderState.setDiffuseCameraTransform( params.query->cameraMatrix ); - reflectRenderState.disableAdvancedLightingBins(true); gClientSceneGraph->renderSceneNoLights( &reflectRenderState, objTypeFlag ); } diff --git a/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp index 04a280e096..aa2eda41d0 100644 --- a/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/accuFeatureGLSL.cpp @@ -56,7 +56,7 @@ void AccuTexFeatGLSL::processPix(Vector &componentList, output = meta; // OUT.col - Var *color = (Var*) LangElement::find( "col" ); + Var *color = (Var*) LangElement::find( "col1" ); if (!color) { output = new GenOp(" //NULL COLOR!"); @@ -144,8 +144,6 @@ void AccuTexFeatGLSL::processPix(Vector &componentList, // get the accu pixel color meta->addStatement( new GenOp( " @ = tex2D(@, @ * @);\r\n", colorAccuDecl, accuMap, inTex, accuScale ) ); - if (!fd.features[MFT_Imposter]) - meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", accuColor, accuColor)); // scale up normals meta->addStatement( new GenOp( " @.xyz = @.xyz * 2.0 - 0.5;\r\n", bumpNorm, bumpNorm ) ); diff --git a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp index 1e90faa12e..2bafc06f46 100644 --- a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp @@ -56,7 +56,7 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, output = meta; // OUT.col - Var *color = (Var*) LangElement::find( "col" ); + Var *color = (Var*) LangElement::find( "col1" ); if (!color) { output = new GenOp(" //NULL COLOR!"); @@ -141,8 +141,6 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, // get the accu pixel color meta->addStatement( new GenOp( " @ = tex2D(@, @ * @);\r\n", colorAccuDecl, accuMap, inTex, accuScale ) ); - if (!fd.features[MFT_Imposter]) - meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", accuColor, accuColor)); // scale up normals meta->addStatement( new GenOp( " @.xyz = @.xyz * 2.0 - 0.5;\r\n", bumpNorm, bumpNorm ) ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl b/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl index 38762baa5e..f34cff1efd 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl @@ -42,10 +42,11 @@ uniform vec3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; out vec4 OUT_col; - void main() { vec4 _sample = hdrDecode( texture( sceneTex, IN_uv0 ) ); @@ -94,5 +95,11 @@ void main() // Apply gamma correction _sample.rgb = pow( abs(_sample.rgb), vec3(g_fOneOverGamma) ); + // Apply contrast + _sample.rgb = ((_sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + _sample.rgb += Brightness; + OUT_col = _sample; } diff --git a/Templates/Full/game/art/prefabs/fire.prefab b/Templates/Full/game/art/prefabs/fire.prefab new file mode 100644 index 0000000000..6213e33a86 --- /dev/null +++ b/Templates/Full/game/art/prefabs/fire.prefab @@ -0,0 +1,49 @@ +//--- OBJECT WRITE BEGIN --- +$ThisPrefab = new SimGroup() { + canSave = "1"; + canSaveDynamicFields = "1"; + + new ParticleEmitterNode() { + active = "1"; + emitter = "FireEmitter"; + velocity = "1"; + dataBlock = "EmberNode"; + position = "0 0 0"; + rotation = "1 0 0 0"; + scale = "1 1 1"; + canSave = "1"; + canSaveDynamicFields = "1"; + }; + new PointLight() { + radius = "10"; + isEnabled = "1"; + color = "1 0.603922 0 1"; + brightness = "1"; + castShadows = "1"; + staticRefreshFreq = "250"; + dynamicRefreshFreq = "8"; + priority = "1"; + animate = "1"; + animationPeriod = "1"; + animationPhase = "1"; + flareScale = "1"; + attenuationRatio = "0 1 1"; + shadowType = "DualParaboloidSinglePass"; + texSize = "512"; + overDarkFactor = "2000 1000 500 100"; + shadowDistance = "400"; + shadowSoftness = "0.15"; + numSplits = "1"; + logWeight = "0.91"; + fadeStartDistance = "0"; + lastSplitTerrainOnly = "0"; + representedInLightmap = "0"; + shadowDarkenColor = "0 0 0 -1"; + includeLightmappedGeometryInShadow = "0"; + position = "0 0 0"; + rotation = "1 0 0 0"; + canSave = "1"; + canSaveDynamicFields = "1"; + }; +}; +//--- OBJECT WRITE END --- diff --git a/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs b/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs index f82946ccbb..c17ea71eb2 100644 --- a/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs +++ b/Templates/Full/game/art/shapes/trees/defaulttree/materials.cs @@ -27,7 +27,6 @@ singleton Material(defaultTree_bark_material) diffuseMap[0] = "art/shapes/trees/defaulttree/defaulttree_bark_diffuse.dds"; normalMap[0] = "art/shapes/trees/defaulttree/defaulttree_bark_normal_specular.dds"; - specularMap[0] = ""; diffuseColor[0] = "1 1 1 1"; specular[0] = "0.9 0.9 0.9 1"; @@ -37,6 +36,7 @@ singleton Material(defaultTree_bark_material) translucent = false; translucentBlendOp = "None"; pixelSpecular[0] = "1"; + castDynamicShadows = "0"; }; singleton Material(defaulttree_material) @@ -45,7 +45,6 @@ singleton Material(defaulttree_material) diffuseMap[0] = "art/shapes/trees/defaulttree/defaulttree_diffuse_transparency.dds"; normalMap[0] = "art/shapes/trees/defaulttree/defaulttree_normal_specular.dds"; - specularMap[0] = ""; diffuseColor[0] = "1 1 1 1"; specular[0] = "0.9 0.9 0.9 1"; @@ -57,6 +56,7 @@ singleton Material(defaulttree_material) pixelSpecular[0] = "1"; alphaTest = "1"; alphaRef = "127"; + castDynamicShadows = "0"; }; singleton Material(defaultTree_fronds_material) @@ -71,6 +71,7 @@ singleton Material(defaultTree_fronds_material) alphaTest = "1"; alphaRef = "114"; translucent = "1"; + castDynamicShadows = "0"; }; singleton Material(defaulttree_ColorEffectR27G177B88_material) @@ -79,4 +80,6 @@ singleton Material(defaulttree_ColorEffectR27G177B88_material) diffuseColor[0] = "0.105882 0.694118 0.345098 1"; specularPower[0] = "10"; translucentBlendOp = "None"; + castDynamicShadows = "0"; + castShadows = "0"; }; diff --git a/Templates/Full/game/art/skies/Desert_Sky/materials.cs b/Templates/Full/game/art/skies/Desert_Sky/materials.cs index af6a979c8f..0ee4080d87 100644 --- a/Templates/Full/game/art/skies/Desert_Sky/materials.cs +++ b/Templates/Full/game/art/skies/Desert_Sky/materials.cs @@ -34,4 +34,5 @@ singleton Material( DesertSkyMat ) { cubemap = DesertSkyCubemap; materialTag0 = "Skies"; + isSky = true; }; diff --git a/Templates/Full/game/art/skies/night/materials.cs b/Templates/Full/game/art/skies/night/materials.cs index 79cc050fc6..11f9f63487 100644 --- a/Templates/Full/game/art/skies/night/materials.cs +++ b/Templates/Full/game/art/skies/night/materials.cs @@ -34,6 +34,7 @@ singleton Material( NightSkyMat ) { cubemap = NightCubemap; materialTag0 = "Skies"; + isSky = true; }; singleton Material( Moon_Glow_Mat ) @@ -50,4 +51,5 @@ singleton Material( Moon_Mat ) emissive = true; translucent = true; vertColor[ 0 ] = true; + isSky = true; }; diff --git a/Templates/Full/game/core/art/skies/blank/materials.cs b/Templates/Full/game/core/art/skies/blank/materials.cs index 179eafcf2c..39f268866c 100644 --- a/Templates/Full/game/core/art/skies/blank/materials.cs +++ b/Templates/Full/game/core/art/skies/blank/materials.cs @@ -34,6 +34,7 @@ singleton Material( BlackSkyMat ) { cubemap = BlackSkyCubemap; materialTag0 = "Skies"; + isSky = true; }; singleton CubemapData( BlueSkyCubemap ) @@ -50,6 +51,7 @@ singleton Material( BlueSkyMat ) { cubemap = BlueSkyCubemap; materialTag0 = "Skies"; + isSky = true; }; singleton CubemapData( GreySkyCubemap ) @@ -66,4 +68,5 @@ singleton Material( GreySkyMat ) { cubemap = GreySkyCubemap; materialTag0 = "Skies"; + isSky = true; }; diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs index 2c78e9ca42..d74aff69a9 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/init.cs @@ -43,6 +43,7 @@ exec( "./lightViz.cs" ); exec( "./shadowViz.cs" ); exec( "./shadowViz.gui" ); +exec( "./deferredShading.cs" ); function onActivateAdvancedLM() { @@ -58,12 +59,18 @@ function onActivateAdvancedLM() // Enable the offscreen target so that AL will work // with MSAA back buffers and for HDR rendering. AL_FormatToken.enable(); + + // Activate Deferred Shading + AL_DeferredShading.enable(); } function onDeactivateAdvancedLM() { // Disable the offscreen render target. AL_FormatToken.disable(); + + // Deactivate Deferred Shading + AL_DeferredShading.disable(); } function setAdvancedLighting() diff --git a/Templates/Full/game/core/scripts/client/postFx/caustics.cs b/Templates/Full/game/core/scripts/client/postFx/caustics.cs index 3e8b14de0b..11fda80836 100644 --- a/Templates/Full/game/core/scripts/client/postFx/caustics.cs +++ b/Templates/Full/game/core/scripts/client/postFx/caustics.cs @@ -51,7 +51,7 @@ singleton ShaderData( PFX_CausticsShader ) singleton PostEffect( CausticsPFX ) { isEnabled = false; - renderTime = "PFXBeforeBin"; + renderTime = "PFXAfterDiffuse"; renderBin = "ObjTranslucentBin"; //renderPriority = 0.1; diff --git a/Templates/Full/game/core/scripts/client/postFx/hdr.cs b/Templates/Full/game/core/scripts/client/postFx/hdr.cs index 136a5ca95b..6c8e870d0e 100644 --- a/Templates/Full/game/core/scripts/client/postFx/hdr.cs +++ b/Templates/Full/game/core/scripts/client/postFx/hdr.cs @@ -172,6 +172,8 @@ singleton ShaderData( HDR_CombineShader ) samplerNames[2] = "$bloomTex"; samplerNames[3] = "$colorCorrectionTex"; + samplerNames[4] = "prepassTex"; + pixVersion = 3.0; }; @@ -469,6 +471,7 @@ singleton PostEffect( HDRPostFX ) texture[1] = "#adaptedLum"; texture[2] = "#bloomFinal"; texture[3] = $HDRPostFX::colorCorrectionRamp; + texture[4] = "#prepass"; target = "$backBuffer"; }; }; diff --git a/Templates/Full/game/core/scripts/client/postFx/turbulence.cs b/Templates/Full/game/core/scripts/client/postFx/turbulence.cs index c2309f8086..dd8c0e2dc1 100644 --- a/Templates/Full/game/core/scripts/client/postFx/turbulence.cs +++ b/Templates/Full/game/core/scripts/client/postFx/turbulence.cs @@ -47,7 +47,7 @@ singleton PostEffect( TurbulenceFx ) isEnabled = false; allowReflectPass = true; - renderTime = "PFXAfterBin"; + renderTime = "PFXAfterDiffuse"; renderBin = "GlowBin"; renderPriority = 0.5; // Render after the glows themselves diff --git a/Templates/Full/game/core/scripts/client/scatterSky.cs b/Templates/Full/game/core/scripts/client/scatterSky.cs index 7701b0adfc..a2b19ab23a 100644 --- a/Templates/Full/game/core/scripts/client/scatterSky.cs +++ b/Templates/Full/game/core/scripts/client/scatterSky.cs @@ -22,13 +22,13 @@ new GFXStateBlockData( ScatterSkySBData ) { - cullDefined = true; + //cullDefined = true; cullMode = "GFXCullNone"; zDefined = true; zEnable = true; zWriteEnable = false; - zFunc = "GFXCmpLessEqual"; + //zFunc = "GFXCmpLessEqual"; samplersDefined = true; samplerStates[0] = SamplerClampLinear; diff --git a/Templates/Full/game/shaders/common/basicCloudsV.hlsl b/Templates/Full/game/shaders/common/basicCloudsV.hlsl index 49842fd37b..a3d4bb5fe6 100644 --- a/Templates/Full/game/shaders/common/basicCloudsV.hlsl +++ b/Templates/Full/game/shaders/common/basicCloudsV.hlsl @@ -46,6 +46,7 @@ ConnectData main( CloudVert IN ) ConnectData OUT; OUT.hpos = mul(modelview, IN.pos); + OUT.hpos.w = OUT.hpos.z; float2 uv = IN.uv0; uv += texOffset; diff --git a/Templates/Full/game/shaders/common/cloudLayerV.hlsl b/Templates/Full/game/shaders/common/cloudLayerV.hlsl index 8c1cc555f0..c34a57c052 100644 --- a/Templates/Full/game/shaders/common/cloudLayerV.hlsl +++ b/Templates/Full/game/shaders/common/cloudLayerV.hlsl @@ -60,8 +60,8 @@ uniform float3 texScale; ConnectData main( CloudVert IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos.w = OUT.hpos.z; // Offset the uv so we don't have a seam directly over our head. float2 uv = IN.uv0 + float2( 0.5, 0.5 ); diff --git a/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl b/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl index cccbafa8ca..40c597120e 100644 --- a/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl +++ b/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl @@ -41,6 +41,7 @@ out vec2 texCoord; void main() { gl_Position = tMul(modelview, IN_pos); + gl_Position.w = gl_Position.z; vec2 uv = IN_uv0; uv += texOffset; diff --git a/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl b/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl index 395c6f286e..cba5c009ad 100644 --- a/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl +++ b/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl @@ -62,6 +62,7 @@ void main() vec2 IN_uv0 = vTexCoord0.st; gl_Position = modelview * IN_pos; + gl_Position.w = gl_Position.z; // Offset the uv so we don't have a seam directly over our head. vec2 uv = IN_uv0 + vec2( 0.5, 0.5 ); diff --git a/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl b/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl index d9fa80bcf1..b4e70f9028 100644 --- a/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl +++ b/Templates/Full/game/shaders/common/gl/scatterSkyP.glsl @@ -73,5 +73,8 @@ void main() discard; OUT_col.a = 1; + + OUT_col = clamp(OUT_col, 0.0, 1.0); + OUT_col = hdrEncode( OUT_col ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl new file mode 100644 index 0000000000..5e6d0a9842 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl @@ -0,0 +1,44 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +struct Fragout +{ + float4 col : COLOR0; + float4 col1 : COLOR1; + float4 col2 : COLOR2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( ) +{ + Fragout OUT; + + OUT.col = float4(0.0, 0.0, 0.0, 0.0); + OUT.col1 = float4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + OUT.col2 = float4(1.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl index 7c17540975..eb3d6f7612 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl @@ -24,13 +24,13 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; uniform sampler1D depthViz; out vec4 OUT_col; void main() { - float depth = prepassUncondition( prepassBuffer, uv0 ).w; + float depth = prepassUncondition( prepassTex, uv0 ).w; OUT_col = vec4( texture( depthViz, depth ).rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl index dfc611e886..84ea4d3fb1 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl @@ -24,12 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; out vec4 OUT_col; void main() { - vec3 normal = prepassUncondition( prepassBuffer, uv0 ).xyz; + vec3 normal = prepassUncondition( prepassTex, uv0 ).xyz; OUT_col = vec4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl new file mode 100644 index 0000000000..85c5530895 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +layout (location = 0) out vec4 col; +layout (location = 1) out vec4 col1; +layout (location = 2) out vec4 col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + col = vec4(0.0, 0.0, 0.0, 0.0); + col1 = vec4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + col2 = vec4(1.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl index 9541f39cb1..cb71f01c2f 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shadergen:/autogenConditioners.h" #include "../../torque.hlsl" #include "../postFx.hlsl" @@ -27,6 +28,7 @@ uniform sampler2D sceneTex : register( s0 ); uniform sampler2D luminanceTex : register( s1 ); uniform sampler2D bloomTex : register( s2 ); uniform sampler1D colorCorrectionTex : register( s3 ); +uniform sampler2D prepassTex : register(S4); uniform float2 texSize0; uniform float2 texSize2; @@ -83,13 +85,16 @@ float4 main( PFXVertToPix IN ) : COLOR0 } // Add the bloom effect. - sample += g_fBloomScale * bloom; + float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + if (depth>0.9999) + sample += g_fBloomScale * bloom; // Apply the color correction. sample.r = tex1D( colorCorrectionTex, sample.r ).r; sample.g = tex1D( colorCorrectionTex, sample.g ).g; sample.b = tex1D( colorCorrectionTex, sample.b ).b; + // Apply gamma correction sample.rgb = pow( abs(sample.rgb), g_fOneOverGamma ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl b/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl index 123c831f32..24a516e79c 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl @@ -23,11 +23,13 @@ #include "../../../gl/torque.glsl" #include "../../../gl/hlslCompat.glsl" #include "../../gl/postFX.glsl" +#include "shadergen:/autogenConditioners.h" uniform sampler2D sceneTex; uniform sampler2D luminanceTex; uniform sampler2D bloomTex; uniform sampler1D colorCorrectionTex; +uniform sampler2D prepassTex; uniform vec2 texSize0; uniform vec2 texSize2; @@ -86,7 +88,9 @@ void main() } // Add the bloom effect. - _sample += g_fBloomScale * bloom; + float depth = prepassUncondition( prepassTex, IN_uv0 ).w; + if (depth>0.9999) + _sample += g_fBloomScale * bloom; // Apply the color correction. _sample.r = texture( colorCorrectionTex, _sample.r ).r; diff --git a/Templates/Full/game/shaders/common/scatterSkyP.hlsl b/Templates/Full/game/shaders/common/scatterSkyP.hlsl index 572abdd741..1a9433c730 100644 --- a/Templates/Full/game/shaders/common/scatterSkyP.hlsl +++ b/Templates/Full/game/shaders/common/scatterSkyP.hlsl @@ -62,6 +62,6 @@ float4 main( Conn In ) : COLOR0 Out = lerp( color, nightSkyColor, nightInterpAndExposure.y ); Out.a = 1; - + Out = saturate(Out); return hdrEncode( Out ); } From 9a2a5b2a90515eda9684fc9d042deda5a0d77cb4 Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 18 Feb 2016 16:49:06 +0100 Subject: [PATCH 116/324] compile fix. --- Engine/source/gfx/sim/debugDraw.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Engine/source/gfx/sim/debugDraw.h b/Engine/source/gfx/sim/debugDraw.h index c650417b0b..a07f52ca4f 100644 --- a/Engine/source/gfx/sim/debugDraw.h +++ b/Engine/source/gfx/sim/debugDraw.h @@ -124,7 +124,10 @@ class DebugDrawer : public SimObject void drawLine(const Point3F &a, const Point3F &b, const ColorF &color = ColorF(1.0f,1.0f,1.0f)); void drawTri(const Point3F &a, const Point3F &b, const Point3F &c, const ColorF &color = ColorF(1.0f,1.0f,1.0f)); void drawText(const Point3F& pos, const String& text, const ColorF &color = ColorF(1.0f,1.0f,1.0f)); - + void drawCapsule(const Point3F &a, const F32 &radius, const F32 &height, const ColorF &color = ColorF(1.0f, 1.0f, 1.0f)); + void drawDirectionLine(const Point3F &a, const Point3F &b, const ColorF &color = ColorF(1.0f, 1.0f, 1.0f)); + void drawOutlinedText(const Point3F& pos, const String& text, const ColorF &color = ColorF(1.0f, 1.0f, 1.0f), const ColorF &colorOutline = ColorF(0.0f, 0.0f, 0.0f)); + /// Render a wireframe view of the given polyhedron. void drawPolyhedron( const AnyPolyhedron& polyhedron, const ColorF& color = ColorF( 1.f, 1.f, 1.f ) ); From c4590f6e3db39b57e08e56501dbd62f08cf18a2d Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 18 Feb 2016 23:30:09 +0100 Subject: [PATCH 117/324] Update guiTextEditCtrl.cpp --- Engine/source/gui/controls/guiTextEditCtrl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/gui/controls/guiTextEditCtrl.cpp b/Engine/source/gui/controls/guiTextEditCtrl.cpp index 7224f3eb86..6c1935bb1a 100644 --- a/Engine/source/gui/controls/guiTextEditCtrl.cpp +++ b/Engine/source/gui/controls/guiTextEditCtrl.cpp @@ -1260,7 +1260,7 @@ void GuiTextEditCtrl::onRender(Point2I offset, const RectI &updateRect) if ( mProfile->mOpaque ) { if (!mTextValid) - GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorNA); + GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorERR); else if (isFirstResponder()) GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorHL); else @@ -1272,7 +1272,7 @@ void GuiTextEditCtrl::onRender(Point2I offset, const RectI &updateRect) { renderBorder(ctrlRect, mProfile); if (!mTextValid) - GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorNA); + GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorERR); } drawText( ctrlRect, isFirstResponder() ); From 3ca67b31487dc44a72fbdff2ca4abadb276e66bb Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 18 Feb 2016 23:32:19 +0100 Subject: [PATCH 118/324] Update guiTypes.h --- Engine/source/gui/core/guiTypes.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Engine/source/gui/core/guiTypes.h b/Engine/source/gui/core/guiTypes.h index c9dc36badc..51f33d21b1 100644 --- a/Engine/source/gui/core/guiTypes.h +++ b/Engine/source/gui/core/guiTypes.h @@ -385,6 +385,7 @@ class GuiControlProfile : public SimObject ColorI mFillColor; ///< Fill color, this is used to fill the bounds of the control if it is opaque ColorI mFillColorHL; ///< This is used instead of mFillColor if the object is highlighted ColorI mFillColorNA; ///< This is used instead of mFillColor if the object is not active or disabled + ColorI mFillColorERR; ///< This is used instead of mFillColor if the object has an error or is invalid ColorI mFillColorSEL; ///< This is used instead of mFillColor if the object is selected S32 mBorder; ///< For most controls, if mBorder is > 0 a border will be drawn, some controls use this to draw different types of borders however @see guiDefaultControlRender.cc From df283a270999683a0507c4a4b3cfe1a6d6583f04 Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 18 Feb 2016 23:33:46 +0100 Subject: [PATCH 119/324] Update guiTypes.cpp --- Engine/source/gui/core/guiTypes.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Engine/source/gui/core/guiTypes.cpp b/Engine/source/gui/core/guiTypes.cpp index dbf96c5177..08c647f36d 100644 --- a/Engine/source/gui/core/guiTypes.cpp +++ b/Engine/source/gui/core/guiTypes.cpp @@ -269,6 +269,7 @@ GuiControlProfile::GuiControlProfile(void) : mFillColor(255,0,255,255), mFillColorHL(255,0,255,255), mFillColorNA(255,0,255,255), + mFillColorERR(255,0,0,255), mFillColorSEL(255,0,255,255), mBorderColor(255,0,255,255), mBorderColorHL(255,0,255,255), @@ -334,6 +335,7 @@ GuiControlProfile::GuiControlProfile(void) : mFillColor = def->mFillColor; mFillColorHL = def->mFillColorHL; mFillColorNA = def->mFillColorNA; + mFillColorERR = def->mFillColorERR; mFillColorSEL = def->mFillColorSEL; mBorder = def->mBorder; @@ -398,6 +400,7 @@ void GuiControlProfile::initPersistFields() addField("fillColor", TypeColorI, Offset(mFillColor, GuiControlProfile)); addField("fillColorHL", TypeColorI, Offset(mFillColorHL, GuiControlProfile)); addField("fillColorNA", TypeColorI, Offset(mFillColorNA, GuiControlProfile)); + addField("fillColorERR", TypeColorI, Offset(mFillColorERR, GuiControlProfile)); addField("fillColorSEL", TypeColorI, Offset(mFillColorSEL, GuiControlProfile)); addField("border", TypeS32, Offset(mBorder, GuiControlProfile), "Border type (0=no border)." ); From 6f47cb7dfae34f43d88cd520310f4649005cea34 Mon Sep 17 00:00:00 2001 From: Anis Date: Fri, 19 Feb 2016 00:34:07 +0100 Subject: [PATCH 120/324] Update guiControl.h --- Engine/source/gui/core/guiControl.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Engine/source/gui/core/guiControl.h b/Engine/source/gui/core/guiControl.h index dc2653ff93..ca873878dd 100644 --- a/Engine/source/gui/core/guiControl.h +++ b/Engine/source/gui/core/guiControl.h @@ -121,9 +121,9 @@ class GuiControl : public SimGroup horizResizeLeft, ///< fixed on the right and width horizResizeCenter, horizResizeRelative, ///< resize relative - horizResizeAspectLeft, ///< resize relative to hieght delta (offset Left) - horizResizeAspectRight, ///< resize relative to hieght delta (offset Right) - horizResizeAspectCenter, ///< resize relative to hieght delta (Centered) + horizResizeAspectLeft, ///< resize relative to height delta (offset Left) + horizResizeAspectRight, ///< resize relative to height delta (offset Right) + horizResizeAspectCenter, ///< resize relative to height delta (Centered) horizResizeWindowRelative ///< resize window relative }; enum vertSizingOptions From 612d932372efa0b54d730317e15bba49812a3a57 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 19 Feb 2016 17:34:27 -0600 Subject: [PATCH 121/324] Revert "Update navMesh.cpp" This reverts commit f3ff1995549cda16929d761a0131214452e5187f. --- Engine/source/navigation/navMesh.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index 22a47a9f37..74d71dc77b 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -123,6 +123,28 @@ DefineConsoleFunction(NavMeshUpdateAll, void, (S32 objid, bool remove), (0, fals obj->enableCollision(); } +DefineConsoleFunction(NavMeshUpdateAroundObject, void, (S32 objid, bool remove), (0, false), + "@brief Update all NavMesh tiles that intersect the given object's world box.") +{ + SceneObject *obj; + if (!Sim::findObject(objid, obj)) + return; + if (remove) + obj->disableCollision(); + SimSet *set = NavMesh::getServerSet(); + for (U32 i = 0; i < set->size(); i++) + { + NavMesh *m = dynamic_cast(set->at(i)); + if (m) + { + m->cancelBuild(); + m->buildTiles(obj->getWorldBox()); + } + } + if (remove) + obj->enableCollision(); +} + DefineConsoleFunction(NavMeshUpdateOne, void, (S32 meshid, S32 objid, bool remove), (0, 0, false), "@brief Update all tiles in a given NavMesh that intersect the given object's world box.") { From 28d303c5eaa0f2fb41bf75770ee4e3a1c4122b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Joci=C4=87?= Date: Sat, 20 Feb 2016 21:28:18 +0100 Subject: [PATCH 122/324] Added immutable vertex and index buffers. --- Engine/source/gfx/D3D9/gfxD3D9Device.cpp | 28 ++++++++++++-- Engine/source/gfx/D3D9/gfxD3D9Device.h | 6 ++- .../gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp | 1 + Engine/source/gfx/Null/gfxNullDevice.cpp | 6 ++- Engine/source/gfx/Null/gfxNullDevice.h | 6 ++- Engine/source/gfx/gfxDevice.h | 6 ++- Engine/source/gfx/gfxEnums.h | 7 ++-- Engine/source/gfx/gfxPrimitiveBuffer.cpp | 13 +++++++ Engine/source/gfx/gfxPrimitiveBuffer.h | 2 + Engine/source/gfx/gl/gfxGLDevice.cpp | 37 +++++++++++++++---- Engine/source/gfx/gl/gfxGLDevice.h | 5 ++- Engine/source/gfx/gl/gfxGLEnumTranslate.cpp | 1 + .../renderInstance/renderParticleMgr.cpp | 12 ++---- 13 files changed, 98 insertions(+), 32 deletions(-) diff --git a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp index 2ad550064c..d3eb8ed8a6 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp @@ -731,7 +731,8 @@ void GFXD3D9Device::setShader( GFXShader *shader, bool force ) //----------------------------------------------------------------------------- GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data ) { // Allocate a buffer to return GFXD3D9PrimitiveBuffer * res = new GFXD3D9PrimitiveBuffer(this, numIndices, numPrimitives, bufferType); @@ -741,12 +742,13 @@ GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, D3DPOOL pool = D3DPOOL_DEFAULT; // Assumptions: - // - static buffers are write once, use many + // - static buffers are write rarely, use many // - dynamic buffers are write many, use many // - volatile buffers are write once, use once // You may never read from a buffer. switch(bufferType) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: pool = isD3D9Ex() ? D3DPOOL_DEFAULT : D3DPOOL_MANAGED; break; @@ -781,6 +783,14 @@ GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, D3D9Assert(mD3DDevice->CreateIndexBuffer( sizeof(U16) * numIndices , usage, GFXD3D9IndexFormat[GFXIndexFormat16], pool, &res->ib, 0), "Failed to allocate an index buffer."); } + + if(data) + { + void* dest; + res->lock(0, numIndices, &dest); + dMemcpy(dest, data, sizeof(U16) * numIndices); + res->unlock(); + } return res; } @@ -791,7 +801,8 @@ GFXPrimitiveBuffer * GFXD3D9Device::allocPrimitiveBuffer( U32 numIndices, GFXVertexBuffer * GFXD3D9Device::allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data) { PROFILE_SCOPE( GFXD3D9Device_allocVertexBuffer ); @@ -808,7 +819,7 @@ GFXVertexBuffer * GFXD3D9Device::allocVertexBuffer( U32 numVerts, res->mNumVerts = 0; // Assumptions: - // - static buffers are write once, use many + // - static buffers are write rarely, use many // - dynamic buffers are write many, use many // - volatile buffers are write once, use once // You may never read from a buffer. @@ -850,6 +861,15 @@ GFXVertexBuffer * GFXD3D9Device::allocVertexBuffer( U32 numVerts, } res->mNumVerts = numVerts; + + if(data) + { + void* dest; + res->lock(0, numVerts, &dest); + dMemcpy(dest, data, vertSize * numVerts); + res->unlock(); + } + return res; } diff --git a/Engine/source/gfx/D3D9/gfxD3D9Device.h b/Engine/source/gfx/D3D9/gfxD3D9Device.h index c928b1a0d0..ef1c9be5dd 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Device.h +++ b/Engine/source/gfx/D3D9/gfxD3D9Device.h @@ -298,10 +298,12 @@ class GFXD3D9Device : public GFXDevice virtual GFXVertexBuffer* allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual void deallocVertexBuffer( GFXD3D9VertexBuffer *vertBuff ); virtual GFXVertexDecl* allocVertexDecl( const GFXVertexFormat *vertexFormat ); virtual void setVertexDecl( const GFXVertexDecl *decl ); diff --git a/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp b/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp index 21bb586bbb..32251438db 100644 --- a/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxD3D9PrimitiveBuffer.pc.cpp @@ -31,6 +31,7 @@ void GFXD3D9PrimitiveBuffer::lock(U32 indexStart, U32 indexEnd, void **indexPtr) U32 flags=0; switch(mBufferType) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: // flags |= D3DLOCK_DISCARD; break; diff --git a/Engine/source/gfx/Null/gfxNullDevice.cpp b/Engine/source/gfx/Null/gfxNullDevice.cpp index 315336c248..f22e3bc7a2 100644 --- a/Engine/source/gfx/Null/gfxNullDevice.cpp +++ b/Engine/source/gfx/Null/gfxNullDevice.cpp @@ -276,14 +276,16 @@ GFXNullDevice::~GFXNullDevice() GFXVertexBuffer *GFXNullDevice::allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data ) { return new GFXNullVertexBuffer(GFX, numVerts, vertexFormat, vertSize, bufferType); } GFXPrimitiveBuffer *GFXNullDevice::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType) + GFXBufferType bufferType, + void* data ) { return new GFXNullPrimitiveBuffer(GFX, numIndices, numPrimitives, bufferType); } diff --git a/Engine/source/gfx/Null/gfxNullDevice.h b/Engine/source/gfx/Null/gfxNullDevice.h index 5e137cf016..28d6ad4e94 100644 --- a/Engine/source/gfx/Null/gfxNullDevice.h +++ b/Engine/source/gfx/Null/gfxNullDevice.h @@ -115,10 +115,12 @@ class GFXNullDevice : public GFXDevice virtual GFXVertexBuffer *allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL ); virtual GFXVertexDecl* allocVertexDecl( const GFXVertexFormat *vertexFormat ) { return NULL; } virtual void setVertexDecl( const GFXVertexDecl *decl ) { } diff --git a/Engine/source/gfx/gfxDevice.h b/Engine/source/gfx/gfxDevice.h index b9ff01e8cc..e8ca6739be 100644 --- a/Engine/source/gfx/gfxDevice.h +++ b/Engine/source/gfx/gfxDevice.h @@ -637,7 +637,8 @@ class GFXDevice virtual GFXVertexBuffer *allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) = 0; + GFXBufferType bufferType, + void* data = NULL ) = 0; /// Called from GFXVertexFormat to allocate the hardware /// specific vertex declaration for rendering. @@ -674,7 +675,8 @@ class GFXDevice /// @note All index buffers use unsigned 16-bit indices. virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, - GFXBufferType bufferType ) = 0; + GFXBufferType bufferType, + void* data = NULL ) = 0; /// @} diff --git a/Engine/source/gfx/gfxEnums.h b/Engine/source/gfx/gfxEnums.h index 9dfba2f73a..e0c560ac86 100644 --- a/Engine/source/gfx/gfxEnums.h +++ b/Engine/source/gfx/gfxEnums.h @@ -39,8 +39,8 @@ enum GFXBufferType { - GFXBufferTypeStatic, ///< Static vertex buffers are created and filled one time. - ///< incur a performance penalty. Resizing a static vertex buffer is not + GFXBufferTypeStatic, ///< Static vertex buffers are created and rarely updated. + ///< Updating might incur a performance penalty. Resizing a static vertex buffer is not ///< allowed. GFXBufferTypeDynamic, ///< Dynamic vertex buffers are meant for vertices that can be changed ///< often. Vertices written into dynamic vertex buffers will remain valid @@ -48,7 +48,8 @@ enum GFXBufferType ///< allowed. GFXBufferTypeVolatile, ///< Volatile vertex or index buffers are meant for vertices or indices that are essentially ///< only used once. They can be resized without any performance penalty. - + GFXBufferTypeImmutable, ///< Immutable buffers must specify the data when creating the buffer. Cannot be modified. + GFXBufferType_COUNT ///< Number of buffer types. }; diff --git a/Engine/source/gfx/gfxPrimitiveBuffer.cpp b/Engine/source/gfx/gfxPrimitiveBuffer.cpp index 9a0a091197..2a06f53e23 100644 --- a/Engine/source/gfx/gfxPrimitiveBuffer.cpp +++ b/Engine/source/gfx/gfxPrimitiveBuffer.cpp @@ -80,3 +80,16 @@ void GFXPrimitiveBufferHandle::set(GFXDevice *theDevice, U32 indexCount, U32 pri getPointer()->mDebugCreationPath = desc; #endif } + +//----------------------------------------------------------------------------- +// immutable +//----------------------------------------------------------------------------- +void GFXPrimitiveBufferHandle::immutable(GFXDevice *theDevice, U32 indexCount, U32 primitiveCount, void* data, String desc) +{ + StrongRefPtr::operator=( theDevice->allocPrimitiveBuffer(indexCount, primitiveCount, GFXBufferTypeImmutable, data) ); + +#ifdef TORQUE_DEBUG + if( desc.isNotEmpty() ) + getPointer()->mDebugCreationPath = desc; +#endif +} diff --git a/Engine/source/gfx/gfxPrimitiveBuffer.h b/Engine/source/gfx/gfxPrimitiveBuffer.h index c2955786c0..9fa6ed14fc 100644 --- a/Engine/source/gfx/gfxPrimitiveBuffer.h +++ b/Engine/source/gfx/gfxPrimitiveBuffer.h @@ -140,6 +140,8 @@ class GFXPrimitiveBufferHandle : public StrongRefPtr } void set(GFXDevice *theDevice, U32 indexCount, U32 primitiveCount, GFXBufferType bufferType, String desc = String::EmptyString ); + + void immutable(GFXDevice *theDevice, U32 indexCount, U32 primitiveCount, void* data, String desc = String::EmptyString ); void lock(U16 **indexBuffer, GFXPrimitive **primitiveBuffer = NULL, U32 indexStart = 0, U32 indexEnd = 0) { diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 9cec609d19..b6227faad8 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -355,23 +355,46 @@ GFXPrimitiveBuffer* GFXGLDevice::findVolatilePBO(U32 numIndices, U32 numPrimitiv GFXVertexBuffer *GFXGLDevice::allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ) + GFXBufferType bufferType, + void* data = NULL ) { if(bufferType == GFXBufferTypeVolatile) return findVolatileVBO(numVerts, vertexFormat, vertSize); GFXGLVertexBuffer* buf = new GFXGLVertexBuffer( GFX, numVerts, vertexFormat, vertSize, bufferType ); - buf->registerResourceWithDevice(this); + buf->registerResourceWithDevice(this); + + if(data) + { + void* dest; + buf->lock(0, numVerts, &dest); + dMemcpy(dest, data, vertSize * numVerts); + buf->unlock(); + } + return buf; } -GFXPrimitiveBuffer *GFXGLDevice::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType ) +GFXPrimitiveBuffer *GFXGLDevice::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType, void* data ) { + GFXPrimitiveBuffer* buf if(bufferType == GFXBufferTypeVolatile) - return findVolatilePBO(numIndices, numPrimitives); - - GFXGLPrimitiveBuffer* buf = new GFXGLPrimitiveBuffer(GFX, numIndices, numPrimitives, bufferType); - buf->registerResourceWithDevice(this); + { + buf = findVolatilePBO(numIndices, numPrimitives); + } + else + { + buf = new GFXGLPrimitiveBuffer(GFX, numIndices, numPrimitives, bufferType); + buf->registerResourceWithDevice(this); + } + + if(data) + { + void* dest; + buf->lock(0, numIndices, &dest); + dMemcpy(dest, data, sizeof(U16) * numIndices); + buf->unlock(); + } return buf; } diff --git a/Engine/source/gfx/gl/gfxGLDevice.h b/Engine/source/gfx/gl/gfxGLDevice.h index 72193835d7..902bfb3f6c 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.h +++ b/Engine/source/gfx/gl/gfxGLDevice.h @@ -173,8 +173,9 @@ class GFXGLDevice : public GFXDevice virtual GFXVertexBuffer *allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, - GFXBufferType bufferType ); - virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType ); + GFXBufferType bufferType, + void* data = NULL); + virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType, void* data = NULL ); // NOTE: The GL device doesn't need a vertex declaration at // this time, but we need to return something to keep the system diff --git a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp index 19f6e1c691..e78d807c19 100644 --- a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp +++ b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp @@ -45,6 +45,7 @@ void GFXGLEnumTranslate::init() GFXGLBufferType[GFXBufferTypeStatic] = GL_STATIC_DRAW; GFXGLBufferType[GFXBufferTypeDynamic] = GL_DYNAMIC_DRAW; GFXGLBufferType[GFXBufferTypeVolatile] = GL_STREAM_DRAW; + GFXGLBufferType[GFXBufferTypeImmutable] = GL_STATIC_DRAW; // Primitives GFXGLPrimType[GFXPointList] = GL_POINTS; diff --git a/Engine/source/renderInstance/renderParticleMgr.cpp b/Engine/source/renderInstance/renderParticleMgr.cpp index 2b475ab7fb..dcae9756c7 100644 --- a/Engine/source/renderInstance/renderParticleMgr.cpp +++ b/Engine/source/renderInstance/renderParticleMgr.cpp @@ -338,14 +338,10 @@ void RenderParticleMgr::render( SceneRenderState *state ) void RenderParticleMgr::_initGFXResources() { // Screen quad - U16 *prims = NULL; - mScreenQuadPrimBuff.set(GFX, 4, 2, GFXBufferTypeStatic); - mScreenQuadPrimBuff.lock(&prims); - (*prims++) = 0; - (*prims++) = 1; - (*prims++) = 2; - (*prims++) = 3; - mScreenQuadPrimBuff.unlock(); + U16 prims [] = { + 0, 1, 2, 3, + }; + mScreenQuadPrimBuff.immutable(GFX, 4, 2, prims); mScreenQuadVertBuff.set(GFX, 4, GFXBufferTypeStatic); CompositeQuadVert *verts = mScreenQuadVertBuff.lock(); From 36daca8d8e4b641e1d653fb0ebc581cb97b5ada5 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sun, 21 Feb 2016 15:10:58 +1000 Subject: [PATCH 123/324] Corrected FeatureSet::getNextFeatureIndex and ShaderFeature::getProcessIndex signed mismatch. --- Engine/source/shaderGen/featureSet.cpp | 2 +- Engine/source/shaderGen/featureSet.h | 2 +- Engine/source/shaderGen/shaderFeature.h | 2 +- Engine/source/terrain/hlsl/terrFeatureHLSL.cpp | 10 +++++----- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Engine/source/shaderGen/featureSet.cpp b/Engine/source/shaderGen/featureSet.cpp index 7189beacc3..2eff50e1c5 100644 --- a/Engine/source/shaderGen/featureSet.cpp +++ b/Engine/source/shaderGen/featureSet.cpp @@ -170,7 +170,7 @@ void FeatureSet::removeFeature( const FeatureType &type ) } } -U32 FeatureSet::getNextFeatureIndex( const FeatureType &type, S32 index ) const +S32 FeatureSet::getNextFeatureIndex( const FeatureType &type, S32 index ) const { for ( U32 i=0; i < mFeatures.size(); i++ ) { diff --git a/Engine/source/shaderGen/featureSet.h b/Engine/source/shaderGen/featureSet.h index e8920dc674..03b46f62a3 100644 --- a/Engine/source/shaderGen/featureSet.h +++ b/Engine/source/shaderGen/featureSet.h @@ -106,7 +106,7 @@ class FeatureSet void removeFeature( const FeatureType &type ); /// - U32 getNextFeatureIndex( const FeatureType &type, S32 index ) const; + S32 getNextFeatureIndex( const FeatureType &type, S32 index ) const; /// Removes features that are not in the input set. void filter( const FeatureSet &features ); diff --git a/Engine/source/shaderGen/shaderFeature.h b/Engine/source/shaderGen/shaderFeature.h index f18fae7f9a..c6ac4955db 100644 --- a/Engine/source/shaderGen/shaderFeature.h +++ b/Engine/source/shaderGen/shaderFeature.h @@ -153,7 +153,7 @@ class ShaderFeature void setProcessIndex( S32 index ) { mProcessIndex = index; } /// - U32 getProcessIndex() const { return mProcessIndex; } + S32 getProcessIndex() const { return mProcessIndex; } //----------------------------------------------------------------------- // Virtual Functions diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp index 6ef1c20091..d993f4bd87 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp @@ -298,7 +298,7 @@ TerrainDetailMapFeatHLSL::TerrainDetailMapFeatHLSL() void TerrainDetailMapFeatHLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); // Grab incoming texture coords... the base map feature // made sure this was created. @@ -383,7 +383,7 @@ void TerrainDetailMapFeatHLSL::processVert( Vector &component void TerrainDetailMapFeatHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); Var *inTex = getVertTexCoord( "texCoord" ); MultiLine *meta = new MultiLine; @@ -615,7 +615,7 @@ TerrainMacroMapFeatHLSL::TerrainMacroMapFeatHLSL() void TerrainMacroMapFeatHLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); // Grab incoming texture coords... the base map feature // made sure this was created. @@ -673,7 +673,7 @@ void TerrainMacroMapFeatHLSL::processVert( Vector &componentL void TerrainMacroMapFeatHLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); Var *inTex = getVertTexCoord( "texCoord" ); MultiLine *meta = new MultiLine; @@ -900,7 +900,7 @@ void TerrainNormalMapFeatHLSL::processPix( Vector &component meta->addStatement( new GenOp( " @ = @[2];\r\n", new DecOp( gbNormal ), viewToTangent ) ); } - const U32 normalIndex = getProcessIndex(); + const S32 normalIndex = getProcessIndex(); Var *detailBlend = (Var*)LangElement::find( String::ToString( "detailBlend%d", normalIndex ) ); AssertFatal( detailBlend, "The detail blend is missing!" ); From 2383e8e43e306f902e234049ef0731482067e6dd Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sun, 21 Feb 2016 22:24:05 +1000 Subject: [PATCH 124/324] Fix for TerrainFeatGLSL getProcessIndex() signed mismatch --- Engine/source/terrain/glsl/terrFeatureGLSL.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp index 5f32359a8c..dd67124c60 100644 --- a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp +++ b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp @@ -298,7 +298,7 @@ TerrainDetailMapFeatGLSL::TerrainDetailMapFeatGLSL() void TerrainDetailMapFeatGLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); // Grab incoming texture coords... the base map feature // made sure this was created. @@ -383,7 +383,7 @@ void TerrainDetailMapFeatGLSL::processVert( Vector &component void TerrainDetailMapFeatGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); Var *inTex = getVertTexCoord( "texCoord" ); MultiLine *meta = new MultiLine; @@ -616,7 +616,7 @@ TerrainMacroMapFeatGLSL::TerrainMacroMapFeatGLSL() void TerrainMacroMapFeatGLSL::processVert( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); // Grab incoming texture coords... the base map feature // made sure this was created. @@ -674,7 +674,7 @@ void TerrainMacroMapFeatGLSL::processVert( Vector &componentL void TerrainMacroMapFeatGLSL::processPix( Vector &componentList, const MaterialFeatureData &fd ) { - const U32 detailIndex = getProcessIndex(); + const S32 detailIndex = getProcessIndex(); Var *inTex = getVertTexCoord( "texCoord" ); MultiLine *meta = new MultiLine; @@ -900,7 +900,7 @@ void TerrainNormalMapFeatGLSL::processPix( Vector &component meta->addStatement( new GenOp( " @ = tGetMatrix3Row(@, 2);\r\n", new DecOp( gbNormal ), viewToTangent ) ); } - const U32 normalIndex = getProcessIndex(); + const S32 normalIndex = getProcessIndex(); Var *detailBlend = (Var*)LangElement::find( String::ToString( "detailBlend%d", normalIndex ) ); AssertFatal( detailBlend, "The detail blend is missing!" ); From 494922d9ed066f0a8117dacceb7ca3ca4fb56924 Mon Sep 17 00:00:00 2001 From: Anis Date: Sun, 21 Feb 2016 18:14:41 +0100 Subject: [PATCH 125/324] fixed the not working text edit RGB field on color picker. --- Engine/source/console/consoleFunctions.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 1e72f05b83..3a79a99e17 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -879,9 +879,11 @@ DefineConsoleFunction(ColorHEXToRGB, ColorI, (const char* hex), , "@endtsexample\n" "@ingroup Strings") { - ColorI color; - color.set(hex); - return color; + S32 rgb = dAtoui(hex, 16); + + ColorI color; + color.set(rgb & 0x000000FF, (rgb & 0x0000FF00) >> 8, (rgb & 0x00FF0000) >> 16); + return color; } DefineConsoleFunction(ColorHSBToRGB, ColorI, (Point3I hsb), , From aed2e0b5b63d5dfc46a23fb692b712910bae32ae Mon Sep 17 00:00:00 2001 From: Anis Date: Sun, 21 Feb 2016 22:09:14 +0100 Subject: [PATCH 126/324] Update guiColorPicker.cpp --- Engine/source/gui/controls/guiColorPicker.cpp | 536 +++++++++--------- 1 file changed, 256 insertions(+), 280 deletions(-) diff --git a/Engine/source/gui/controls/guiColorPicker.cpp b/Engine/source/gui/controls/guiColorPicker.cpp index 39c1404346..97a8470d82 100644 --- a/Engine/source/gui/controls/guiColorPicker.cpp +++ b/Engine/source/gui/controls/guiColorPicker.cpp @@ -39,13 +39,13 @@ ColorF colorAlpha(0.0f, 0.0f, 0.0f, 0.0f); ColorF colorAlphaW(1.0f, 1.0f, 1.0f, 0.0f); ColorI GuiColorPickerCtrl::mColorRange[7] = { - ColorI(255,0,0), // Red - ColorI(255,0,255), // Pink - ColorI(0,0,255), // Blue - ColorI(0,255,255), // Light blue - ColorI(0,255,0), // Green - ColorI(255,255,0), // Yellow - ColorI(255,0,0), // Red + ColorI(255,0,0), // Red + ColorI(255,0,255), // Pink + ColorI(0,0,255), // Blue + ColorI(0,255,255), // Light blue + ColorI(0,255,0), // Green + ColorI(255,255,0), // Yellow + ColorI(255,0,0), // Red }; /// @} @@ -57,7 +57,6 @@ ConsoleDocClass( GuiColorPickerCtrl, "@internal" ); -//-------------------------------------------------------------------------- GuiColorPickerCtrl::GuiColorPickerCtrl() { setExtent(140, 30); @@ -70,56 +69,50 @@ GuiColorPickerCtrl::GuiColorPickerCtrl() mPositionChanged = false; mSelectorGap = 1; mActionOnMove = false; - mShowReticle = true; - mSelectColor = false; - mSetColor = mSetColor.BLACK; - mBitmap = NULL; + mShowReticle = true; + mSelectColor = false; + mSetColor = mSetColor.BLACK; + mBitmap = NULL; } GuiColorPickerCtrl::~GuiColorPickerCtrl() { - if (mBitmap) - { - delete mBitmap; - mBitmap = NULL; - } + if (mBitmap) + { + delete mBitmap; + mBitmap = NULL; + } } -//-------------------------------------------------------------------------- - ImplementEnumType( GuiColorPickMode, "\n\n" "@ingroup GuiUtil" "@internal" ) - { GuiColorPickerCtrl::pPallet, "Pallete" }, - { GuiColorPickerCtrl::pHorizColorRange, "HorizColor"}, - { GuiColorPickerCtrl::pVertColorRange, "VertColor" }, - { GuiColorPickerCtrl::pHorizColorBrightnessRange, "HorizBrightnessColor"}, - { GuiColorPickerCtrl::pVertColorBrightnessRange, "VertBrightnessColor" }, - { GuiColorPickerCtrl::pBlendColorRange, "BlendColor"}, - { GuiColorPickerCtrl::pHorizAlphaRange, "HorizAlpha"}, - { GuiColorPickerCtrl::pVertAlphaRange, "VertAlpha" }, - { GuiColorPickerCtrl::pDropperBackground, "Dropper" }, + { GuiColorPickerCtrl::pPallet, "Pallete" }, + { GuiColorPickerCtrl::pHorizColorRange, "HorizColor"}, + { GuiColorPickerCtrl::pVertColorRange, "VertColor" }, + { GuiColorPickerCtrl::pHorizColorBrightnessRange, "HorizBrightnessColor" }, + { GuiColorPickerCtrl::pVertColorBrightnessRange, "VertBrightnessColor" }, + { GuiColorPickerCtrl::pBlendColorRange, "BlendColor" }, + { GuiColorPickerCtrl::pHorizAlphaRange, "HorizAlpha" }, + { GuiColorPickerCtrl::pVertAlphaRange, "VertAlpha" }, + { GuiColorPickerCtrl::pDropperBackground, "Dropper" }, EndImplementEnumType; -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::initPersistFields() { addGroup("ColorPicker"); - addField("baseColor", TypeColorF, Offset(mBaseColor, GuiColorPickerCtrl)); addField("pickColor", TypeColorF, Offset(mPickColor, GuiColorPickerCtrl)); addField("selectorGap", TypeS32, Offset(mSelectorGap, GuiColorPickerCtrl)); addField("displayMode", TYPEID< PickMode >(), Offset(mDisplayMode, GuiColorPickerCtrl) ); addField("actionOnMove", TypeBool,Offset(mActionOnMove, GuiColorPickerCtrl)); addField("showReticle", TypeBool, Offset(mShowReticle, GuiColorPickerCtrl)); - endGroup("ColorPicker"); Parent::initPersistFields(); } -//-------------------------------------------------------------------------- // Function to draw a box which can have 4 different colors in each corner blended together void GuiColorPickerCtrl::drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, ColorF &c3, ColorF &c4) { @@ -131,54 +124,54 @@ void GuiColorPickerCtrl::drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, Col //A couple of checks to determine if color blend if(c1 == colorWhite && c3 == colorAlpha && c4 == colorBlack) { - //Color - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( r, t ); + //Color + PrimBuild::begin(GFXTriangleFan, 4); + PrimBuild::color( c2 ); + PrimBuild::vertex2i( r, t ); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( r, b ); + PrimBuild::color( c2 ); + PrimBuild::vertex2i( r, b ); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color( c2 ); + PrimBuild::vertex2i( l, b ); - PrimBuild::color( c2 ); - PrimBuild::vertex2i( l, t ); - PrimBuild::end(); + PrimBuild::color( c2 ); + PrimBuild::vertex2i( l, t ); + PrimBuild::end(); - //White - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color( colorAlphaW ); - PrimBuild::vertex2i( r, t ); + //White + PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::color( colorAlphaW ); + PrimBuild::vertex2i( r, t ); - PrimBuild::color( colorAlphaW ); - PrimBuild::vertex2i( r, b ); + PrimBuild::color( colorAlphaW ); + PrimBuild::vertex2i( r, b ); - PrimBuild::color( c1 ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color( c1 ); + PrimBuild::vertex2i( l, b ); - PrimBuild::color( c1 ); - PrimBuild::vertex2i( l, t ); - PrimBuild::end(); + PrimBuild::color( c1 ); + PrimBuild::vertex2i( l, t ); + PrimBuild::end(); - //Black - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color( c3 ); - PrimBuild::vertex2i( r, t ); + //Black + PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::color( c3 ); + PrimBuild::vertex2i( r, t ); - PrimBuild::color( c4 ); - PrimBuild::vertex2i( r, b ); + PrimBuild::color( c4 ); + PrimBuild::vertex2i( r, b ); - PrimBuild::color( c4 ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color( c4 ); + PrimBuild::vertex2i( l, b ); - PrimBuild::color( c3 ); - PrimBuild::vertex2i( l, t ); - PrimBuild::end(); + PrimBuild::color( c3 ); + PrimBuild::vertex2i( l, t ); + PrimBuild::end(); } else { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleFan, 4 ); PrimBuild::color( c1 ); PrimBuild::vertex2i( l, t ); @@ -245,31 +238,29 @@ void GuiColorPickerCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, U8 numC void GuiColorPickerCtrl::drawSelector(RectI &bounds, Point2I &selectorPos, SelectorMode mode) { - if( !mShowReticle ) - return; - - U16 sMax = mSelectorGap*2; - switch (mode) - { - case sVertical: - // Now draw the vertical selector - // Up -> Pos - if (selectorPos.y != bounds.point.y+1) - GFX->getDrawUtil()->drawLine(selectorPos.x, bounds.point.y, selectorPos.x, selectorPos.y-sMax-1, colorWhiteBlend); - // Down -> Pos - if (selectorPos.y != bounds.point.y+bounds.extent.y) - GFX->getDrawUtil()->drawLine(selectorPos.x, selectorPos.y + sMax, selectorPos.x, bounds.point.y + bounds.extent.y, colorWhiteBlend); - break; - case sHorizontal: - // Now draw the horizontal selector - // Left -> Pos - if (selectorPos.x != bounds.point.x) + if( !mShowReticle ) + return; + + U16 sMax = mSelectorGap*2; + switch (mode) + { + case sVertical: + // Now draw the vertical selector Up -> Pos + if (selectorPos.y != bounds.point.y+1) + GFX->getDrawUtil()->drawLine(selectorPos.x, bounds.point.y, selectorPos.x, selectorPos.y-sMax-1, colorWhiteBlend); + // Down -> Pos + if (selectorPos.y != bounds.point.y+bounds.extent.y) + GFX->getDrawUtil()->drawLine(selectorPos.x, selectorPos.y + sMax, selectorPos.x, bounds.point.y + bounds.extent.y, colorWhiteBlend); + break; + case sHorizontal: + // Now draw the horizontal selector Left -> Pos + if (selectorPos.x != bounds.point.x) GFX->getDrawUtil()->drawLine(bounds.point.x, selectorPos.y-1, selectorPos.x-sMax, selectorPos.y-1, colorWhiteBlend); - // Right -> Pos - if (selectorPos.x != bounds.point.x) + // Right -> Pos + if (selectorPos.x != bounds.point.x) GFX->getDrawUtil()->drawLine(bounds.point.x+mSelectorPos.x+sMax, selectorPos.y-1, bounds.point.x + bounds.extent.x, selectorPos.y-1, colorWhiteBlend); - break; - } + break; + } } //-------------------------------------------------------------------------- @@ -281,10 +272,10 @@ void GuiColorPickerCtrl::renderColorBox(RectI &bounds) pickerBounds.point.y = bounds.point.y+1; pickerBounds.extent.x = bounds.extent.x-1; pickerBounds.extent.y = bounds.extent.y-1; - + if (mProfile->mBorder) GFX->getDrawUtil()->drawRect(bounds, mProfile->mBorderColor); - + Point2I selectorPos = Point2I(bounds.point.x+mSelectorPos.x+1, bounds.point.y+mSelectorPos.y+1); // Draw color box differently depending on mode @@ -343,183 +334,176 @@ void GuiColorPickerCtrl::renderColorBox(RectI &bounds) void GuiColorPickerCtrl::onRender(Point2I offset, const RectI& updateRect) { - if (mStateBlock.isNull()) - { - GFXStateBlockDesc desc; - desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); - desc.setZReadWrite(false); - desc.zWriteEnable = false; - desc.setCullMode(GFXCullNone); - mStateBlock = GFX->createStateBlock(desc); - } - - RectI boundsRect(offset, getExtent()); - renderColorBox(boundsRect); - - if (mPositionChanged || mBitmap == NULL) - { - bool nullBitmap = false; - - if (mPositionChanged == false && mBitmap == NULL) - nullBitmap = true; - - mPositionChanged = false; - Point2I extent = getRoot()->getExtent(); - // If we are anything but a pallete, change the pick color - if (mDisplayMode != pPallet) - { - Point2I resolution = getRoot()->getExtent(); - - U32 buf_x = offset.x + mSelectorPos.x + 1; - U32 buf_y = resolution.y - (extent.y - (offset.y + mSelectorPos.y + 1)); - - GFXTexHandle bb(resolution.x, - resolution.y, - GFXFormatR8G8B8A8, &GFXDefaultRenderTargetProfile, avar("%s() - bb (line %d)", __FUNCTION__, __LINE__)); - - Point2I tmpPt(buf_x, buf_y); - - GFXTarget *targ = GFX->getActiveRenderTarget(); - targ->resolveTo(bb); - - if (mBitmap) - { - delete mBitmap; - mBitmap = NULL; - } - - mBitmap = new GBitmap(bb.getWidth(), bb.getHeight()); - - bb.copyToBmp(mBitmap); - - //bmp.writePNGDebug( "foo.png" ); - - if (!nullBitmap) - { - if (mSelectColor) - { - Point2I pos = findColor(mSetColor, offset, resolution, *mBitmap); - mSetColor = mSetColor.BLACK; - mSelectColor = false; - - setSelectorPos(pos); - } - else - { - ColorI tmp; - mBitmap->getColor(buf_x, buf_y, tmp); - - mPickColor = (ColorF)tmp; - - // Now do onAction() if we are allowed - if (mActionOnMove) - onAction(); - } - } - } - - } - - //render the children - renderChildControls(offset, updateRect); + if (mStateBlock.isNull()) + { + GFXStateBlockDesc desc; + desc.setBlend(true, GFXBlendSrcAlpha, GFXBlendInvSrcAlpha); + desc.setZReadWrite(false); + desc.zWriteEnable = false; + desc.setCullMode(GFXCullNone); + mStateBlock = GFX->createStateBlock(desc); + } + + RectI boundsRect(offset, getExtent()); + renderColorBox(boundsRect); + + if (mPositionChanged || mBitmap == NULL) + { + bool nullBitmap = false; + + if (mPositionChanged == false && mBitmap == NULL) + nullBitmap = true; + + mPositionChanged = false; + Point2I extent = getRoot()->getExtent(); + + // If we are anything but a pallete, change the pick color + if (mDisplayMode != pPallet) + { + Point2I resolution = getRoot()->getExtent(); + + U32 buf_x = offset.x + mSelectorPos.x + 1; + U32 buf_y = resolution.y - (extent.y - (offset.y + mSelectorPos.y + 1)); + + GFXTexHandle bb( resolution.x, resolution.y, GFXFormatR8G8B8A8, &GFXDefaultRenderTargetProfile, avar("%s() - bb (line %d)", __FUNCTION__, __LINE__) ); + + Point2I tmpPt(buf_x, buf_y); + + GFXTarget *targ = GFX->getActiveRenderTarget(); + targ->resolveTo(bb); + + if (mBitmap) + { + delete mBitmap; + mBitmap = NULL; + } + + mBitmap = new GBitmap(bb.getWidth(), bb.getHeight()); + + bb.copyToBmp(mBitmap); + + if (!nullBitmap) + { + if (mSelectColor) + { + Point2I pos = findColor(mSetColor, offset, resolution, *mBitmap); + mSetColor = mSetColor.BLACK; + mSelectColor = false; + setSelectorPos(pos); + } + else + { + ColorI tmp; + mBitmap->getColor(buf_x, buf_y, tmp); + + mPickColor = (ColorF)tmp; + + // Now do onAction() if we are allowed + if (mActionOnMove) + onAction(); + } + } + } + } + + //render the children + renderChildControls(offset, updateRect); } void GuiColorPickerCtrl::setSelectorPos(const ColorF & color) { - if (mBitmap && !mPositionChanged) - { - Point2I resolution = getRoot() ? getRoot()->getExtent() : Point2I(1024, 768); - RectI rect(getGlobalBounds()); - Point2I pos = findColor(color, rect.point, resolution, *mBitmap); - mSetColor = mSetColor.BLACK; - mSelectColor = false; - - setSelectorPos(pos); - } - else - { - mSetColor = color; - mSelectColor = true; - mPositionChanged = true; - } + if (mBitmap && !mPositionChanged) + { + Point2I resolution = getRoot() ? getRoot()->getExtent() : Point2I(1024, 768); + RectI rect(getGlobalBounds()); + Point2I pos = findColor(color, rect.point, resolution, *mBitmap); + mSetColor = mSetColor.BLACK; + mSelectColor = false; + + setSelectorPos(pos); + } + else + { + mSetColor = color; + mSelectColor = true; + mPositionChanged = true; + } } Point2I GuiColorPickerCtrl::findColor(const ColorF & color, const Point2I& offset, const Point2I& resolution, GBitmap& bmp) { - RectI rect; - Point2I ext = getExtent(); - if (mDisplayMode != pDropperBackground) - { - ext.x -= 3; - ext.y -= 2; - rect = RectI(Point2I(1, 1), ext); - } - else - { - rect = RectI(Point2I(0, 0), ext); - } - - Point2I closestPos(-1, -1); - - /* Debugging - char filename[256]; - dSprintf( filename, 256, "%s.%s", "colorPickerTest", "png" ); - - // Open up the file on disk. - FileStream fs; - if ( !fs.open( filename, Torque::FS::File::Write ) ) - Con::errorf( "GuiObjectView::saveAsImage() - Failed to open output file '%s'!", filename ); - else - { - // Write it and close. - bmp.writeBitmap( "png", fs ); - - fs.close(); - } - */ - - ColorI tmp; - U32 buf_x; - U32 buf_y; - ColorF curColor; - F32 val(10000.0f); - F32 closestVal(10000.0f); - bool closestSet = false; - - for (S32 x = rect.point.x; x <= rect.extent.x; x++) - { - for (S32 y = rect.point.y; y <= rect.extent.y; y++) - { - buf_x = offset.x + x + 1; - buf_y = (resolution.y - (offset.y + y + 1)); - if (GFX->getAdapterType() != OpenGL) - buf_y = resolution.y - buf_y; - - //Get the color at that position - bmp.getColor(buf_x, buf_y, tmp); - curColor = (ColorF)tmp; - - //Evaluate how close the color is to our desired color - val = mFabs(color.red - curColor.red) + mFabs(color.green - curColor.green) + mFabs(color.blue - curColor.blue); - - if (!closestSet) - { - closestVal = val; - closestPos.set(x, y); - closestSet = true; - } - else if (val < closestVal) - { - closestVal = val; - closestPos.set(x, y); - } - } - } - - return closestPos; + RectI rect; + Point2I ext = getExtent(); + if (mDisplayMode != pDropperBackground) + { + ext.x -= 3; + ext.y -= 2; + rect = RectI(Point2I(1, 1), ext); + } + else + { + rect = RectI(Point2I(0, 0), ext); + } + + Point2I closestPos(-1, -1); + + /* Debugging + char filename[256]; + dSprintf( filename, 256, "%s.%s", "colorPickerTest", "png" ); + + // Open up the file on disk. + FileStream fs; + if ( !fs.open( filename, Torque::FS::File::Write ) ) + Con::errorf( "GuiObjectView::saveAsImage() - Failed to open output file '%s'!", filename ); + else + { + // Write it and close. + bmp.writeBitmap( "png", fs ); + + fs.close(); + } + */ + + ColorI tmp; + U32 buf_x; + U32 buf_y; + ColorF curColor; + F32 val(10000.0f); + F32 closestVal(10000.0f); + bool closestSet = false; + + for (S32 x = rect.point.x; x <= rect.extent.x; x++) + { + for (S32 y = rect.point.y; y <= rect.extent.y; y++) + { + buf_x = offset.x + x + 1; + buf_y = (resolution.y - (offset.y + y + 1)); + buf_y = resolution.y - buf_y; + + //Get the color at that position + bmp.getColor(buf_x, buf_y, tmp); + curColor = (ColorF)tmp; + + //Evaluate how close the color is to our desired color + val = mFabs(color.red - curColor.red) + mFabs(color.green - curColor.green) + mFabs(color.blue - curColor.blue); + + if (!closestSet) + { + closestVal = val; + closestPos.set(x, y); + closestSet = true; + } + else if (val < closestVal) + { + closestVal = val; + closestPos.set(x, y); + } + } + } + + return closestPos; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::setSelectorPos(const Point2I &pos) { Point2I extent = getExtent(); @@ -564,7 +548,6 @@ void GuiColorPickerCtrl::setSelectorPos(const Point2I &pos) } } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseDown(const GuiEvent &event) { if (!mActive) @@ -577,14 +560,14 @@ void GuiColorPickerCtrl::onMouseDown(const GuiEvent &event) if (mProfile->mCanKeyFocus) setFirstResponder(); - - if (mActive && (mDisplayMode != pDropperBackground)) + + if (mActive && (mDisplayMode != pDropperBackground)) onAction(); // Update the picker cross position if (mDisplayMode != pPallet) - setSelectorPos(globalToLocalCoord(event.mousePoint)); - + setSelectorPos(globalToLocalCoord(event.mousePoint)); + mMouseDown = true; } @@ -600,10 +583,8 @@ void GuiColorPickerCtrl::onMouseDragged(const GuiEvent &event) if( !mActionOnMove ) execAltConsoleCallback(); - } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseMove(const GuiEvent &event) { // Only for dropper mode @@ -611,45 +592,40 @@ void GuiColorPickerCtrl::onMouseMove(const GuiEvent &event) setSelectorPos(globalToLocalCoord(event.mousePoint)); } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseEnter(const GuiEvent &event) { mMouseOver = true; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseLeave(const GuiEvent &) { // Reset state mMouseOver = false; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::onMouseUp(const GuiEvent &) { //if we released the mouse within this control, perform the action - if (mActive && mMouseDown && (mDisplayMode != pDropperBackground)) + if (mActive && mMouseDown && (mDisplayMode != pDropperBackground)) mMouseDown = false; - if (mActive && (mDisplayMode == pDropperBackground)) + if (mActive && (mDisplayMode == pDropperBackground)) { // In a dropper, the alt command executes the mouse up action (to signal stopping) execAltConsoleCallback(); } - + mouseUnlock(); } -//-------------------------------------------------------------------------- const char *GuiColorPickerCtrl::getScriptValue() { static char temp[256]; ColorF color = getValue(); - dSprintf(temp,256,"%f %f %f %f",color.red, color.green, color.blue, color.alpha); - return temp; + dSprintf( temp, 256, "%f %f %f %f", color.red, color.green, color.blue, color.alpha ); + return temp; } -//-------------------------------------------------------------------------- void GuiColorPickerCtrl::setScriptValue(const char *value) { ColorF newValue; @@ -669,12 +645,12 @@ DefineConsoleMethod(GuiColorPickerCtrl, setSelectorPos, void, (Point2I newPos), DefineConsoleMethod(GuiColorPickerCtrl, updateColor, void, (), , "Forces update of pick color") { - object->updateColor(); + object->updateColor(); } DefineEngineMethod(GuiColorPickerCtrl, setSelectorColor, void, (ColorF color), , - "Sets the current position of the selector based on a color.n" - "@param color Color to look for.n") + "Sets the current position of the selector based on a color.n" + "@param color Color to look for.n") { - object->setSelectorPos(color); -} \ No newline at end of file + object->setSelectorPos(color); +} From 5c2bfbf82eaec500f2e2b7138a6697d762205240 Mon Sep 17 00:00:00 2001 From: Anis Date: Sun, 21 Feb 2016 22:10:17 +0100 Subject: [PATCH 127/324] Update guiColorPicker.h --- Engine/source/gui/controls/guiColorPicker.h | 37 ++++++++++----------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/Engine/source/gui/controls/guiColorPicker.h b/Engine/source/gui/controls/guiColorPicker.h index 202a2b5ca6..42531c3bbf 100644 --- a/Engine/source/gui/controls/guiColorPicker.h +++ b/Engine/source/gui/controls/guiColorPicker.h @@ -59,29 +59,28 @@ class GuiColorPickerCtrl : public GuiControl public: enum PickMode { - pPallet = 0, ///< We just have a solid color; We just act like a pallet - pHorizColorRange, ///< We have a range of base colors going horizontally - pVertColorRange, ///< We have a range of base colors going vertically + pPallet = 0, ///< We just have a solid color; We just act like a pallet + pHorizColorRange, ///< We have a range of base colors going horizontally + pVertColorRange, ///< We have a range of base colors going vertically pHorizColorBrightnessRange, ///< HorizColorRange with brightness - pVertColorBrightnessRange, ///< VertColorRange with brightness - pBlendColorRange, ///< We have a box which shows a range in brightness of the color - pHorizAlphaRange, ///< We have a box which shows a range in alpha going horizontally - pVertAlphaRange, ///< We have a box which shows a range in alpha going vertically - pDropperBackground ///< The control does not draw anything; Only does something when you click, or move the mouse (when active) + pVertColorBrightnessRange, ///< VertColorRange with brightness + pBlendColorRange, ///< We have a box which shows a range in brightness of the color + pHorizAlphaRange, ///< We have a box which shows a range in alpha going horizontally + pVertAlphaRange, ///< We have a box which shows a range in alpha going vertically + pDropperBackground ///< The control does not draw anything; Only does something when you click, or move the mouse (when active) }; enum SelectorMode { - sHorizontal = 0, ///< Horizontal selector with small gap - sVertical, ///< Vertical selector with small gap + sHorizontal = 0, ///< Horizontal selector with small gap + sVertical, ///< Vertical selector with small gap }; - + protected: - /// @name Core Rendering functions /// @{ - void renderColorBox(RectI &bounds); ///< Function that draws the actual color box - void drawSelector(RectI &bounds, Point2I &selectorPos, SelectorMode mode); ///< Function that draws the selection indicator + void renderColorBox(RectI &bounds); ///< Function that draws the actual color box + void drawSelector(RectI &bounds, Point2I &selectorPos, SelectorMode mode); /// < Function that draws the selection indicator void drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, ColorF &c3, ColorF &c4); void drawBlendRangeBox(RectI &bounds, bool vertical, U8 numColors, ColorI *colors); /// @} @@ -111,8 +110,8 @@ class GuiColorPickerCtrl : public GuiControl static ColorI mColorRange[7]; ///< Color range for pHorizColorRange and pVertColorRange /// @} - public: - + public: + DECLARE_CONOBJECT(GuiColorPickerCtrl); DECLARE_CATEGORY( "Gui Editor" ); @@ -127,19 +126,19 @@ class GuiColorPickerCtrl : public GuiControl /// NOTE: setValue only sets baseColor, since setting pickColor wouldn't be useful void setValue(ColorF &value) {mBaseColor = value;} /// NOTE: getValue() returns baseColor if pallet (since pallet controls can't "pick" colours themselves) - ColorF getValue() {return mDisplayMode == pPallet ? mBaseColor : mPickColor;} + ColorF getValue() { return mDisplayMode == pPallet ? mBaseColor : mPickColor; } const char *getScriptValue(); void setScriptValue(const char *value); void updateColor() {mPositionChanged = true;} /// @} - + /// @name Selector Functions /// @{ void setSelectorPos(const Point2I &pos); ///< Set new pos (in local coords) void setSelectorPos(const ColorF & color); Point2I getSelectorPos() {return mSelectorPos;} /// @} - + /// @name Input Events /// @{ void onMouseDown(const GuiEvent &); From 8ec2e534dc1c617a0b350179d948adba539236f5 Mon Sep 17 00:00:00 2001 From: Anis Date: Sun, 21 Feb 2016 22:36:27 +0100 Subject: [PATCH 128/324] removed tabs --- Engine/source/console/consoleFunctions.cpp | 86 +++++++++++----------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index 3a79a99e17..3e9466a167 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -833,51 +833,51 @@ DefineConsoleFunction(ColorFloatToInt, ColorI, (ColorF color), , } DefineConsoleFunction(ColorIntToFloat, ColorF, (ColorI color), , - "Convert from a integer color to an float color (0 to 255 to 0.0 - 1.0).\n" - "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha.\n" - "@return Converted color value (0.0 - 1.0)\n\n" - "@tsexample\n" - "ColorIntToFloat( \"0 0 255 128\" ) // Returns \"0 0 1 0.5\".\n" - "@endtsexample\n" - "@ingroup Strings") + "Convert from a integer color to an float color (0 to 255 to 0.0 - 1.0).\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha.\n" + "@return Converted color value (0.0 - 1.0)\n\n" + "@tsexample\n" + "ColorIntToFloat( \"0 0 255 128\" ) // Returns \"0 0 1 0.5\".\n" + "@endtsexample\n" + "@ingroup Strings") { - return (ColorF)color; + return (ColorF)color; } DefineConsoleFunction(ColorRGBToHEX, const char*, (ColorI color), , - "Convert from a integer RGB (red, green, blue) color to hex color value (0 to 255 to 00 - FF).\n" - "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" - "@return Hex color value (#000000 - #FFFFFF), alpha isn't handled/converted so it is only the RGB value\n\n" - "@tsexample\n" - "ColorRBGToHEX( \"0 0 255 128\" ) // Returns \"#0000FF\".\n" - "@endtsexample\n" - "@ingroup Strings") + "Convert from a integer RGB (red, green, blue) color to hex color value (0 to 255 to 00 - FF).\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" + "@return Hex color value (#000000 - #FFFFFF), alpha isn't handled/converted so it is only the RGB value\n\n" + "@tsexample\n" + "ColorRBGToHEX( \"0 0 255 128\" ) // Returns \"#0000FF\".\n" + "@endtsexample\n" + "@ingroup Strings") { - return Con::getReturnBuffer(color.getHex()); + return Con::getReturnBuffer(color.getHex()); } DefineConsoleFunction(ColorRGBToHSB, const char*, (ColorI color), , - "Convert from a integer RGB (red, green, blue) color to HSB (hue, saturation, brightness). HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" - "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" - "@return HSB color value, alpha isn't handled/converted so it is only the RGB value\n\n" - "@tsexample\n" - "ColorRBGToHSB( \"0 0 255 128\" ) // Returns \"240 100 100\".\n" - "@endtsexample\n" - "@ingroup Strings") + "Convert from a integer RGB (red, green, blue) color to HSB (hue, saturation, brightness). HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" + "@param color Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. It excepts an alpha, but keep in mind this will not be converted.\n" + "@return HSB color value, alpha isn't handled/converted so it is only the RGB value\n\n" + "@tsexample\n" + "ColorRBGToHSB( \"0 0 255 128\" ) // Returns \"240 100 100\".\n" + "@endtsexample\n" + "@ingroup Strings") { - ColorI::Hsb hsb(color.getHSB()); - String s(String::ToString(hsb.hue) + " " + String::ToString(hsb.sat) + " " + String::ToString(hsb.brightness)); - return Con::getReturnBuffer(s); + ColorI::Hsb hsb(color.getHSB()); + String s(String::ToString(hsb.hue) + " " + String::ToString(hsb.sat) + " " + String::ToString(hsb.brightness)); + return Con::getReturnBuffer(s); } DefineConsoleFunction(ColorHEXToRGB, ColorI, (const char* hex), , - "Convert from a hex color value to an integer RGB (red, green, blue) color (00 - FF to 0 to 255).\n" - "@param hex Hex color value (#000000 - #FFFFFF) to be converted to an RGB (red, green, blue) value.\n" - "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" - "@tsexample\n" - "ColorHEXToRGB( \"#0000FF\" ) // Returns \"0 0 255 0\".\n" - "@endtsexample\n" - "@ingroup Strings") + "Convert from a hex color value to an integer RGB (red, green, blue) color (00 - FF to 0 to 255).\n" + "@param hex Hex color value (#000000 - #FFFFFF) to be converted to an RGB (red, green, blue) value.\n" + "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" + "@tsexample\n" + "ColorHEXToRGB( \"#0000FF\" ) // Returns \"0 0 255 0\".\n" + "@endtsexample\n" + "@ingroup Strings") { S32 rgb = dAtoui(hex, 16); @@ -887,17 +887,17 @@ DefineConsoleFunction(ColorHEXToRGB, ColorI, (const char* hex), , } DefineConsoleFunction(ColorHSBToRGB, ColorI, (Point3I hsb), , - "Convert from a HSB (hue, saturation, brightness) to an integer RGB (red, green, blue) color. HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" - "@param hsb HSB (hue, saturation, brightness) value to be converted.\n" - "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" - "@tsexample\n" - "ColorHSBToRGB( \"240 100 100\" ) // Returns \"0 0 255 0\".\n" - "@endtsexample\n" - "@ingroup Strings") + "Convert from a HSB (hue, saturation, brightness) to an integer RGB (red, green, blue) color. HSB is also know as HSL or HSV as well, with the last letter standing for lightness or value.\n" + "@param hsb HSB (hue, saturation, brightness) value to be converted.\n" + "@return Integer color value to be converted in the form \"R G B A\", where R is red, G is green, B is blue, and A is alpha. Alpha isn't handled/converted so only pay attention to the RGB value\n\n" + "@tsexample\n" + "ColorHSBToRGB( \"240 100 100\" ) // Returns \"0 0 255 0\".\n" + "@endtsexample\n" + "@ingroup Strings") { - ColorI color; - color.set(ColorI::Hsb(hsb.x, hsb.y, hsb.z)); - return color; + ColorI color; + color.set(ColorI::Hsb(hsb.x, hsb.y, hsb.z)); + return color; } //============================================================================= From 4c0d3bbc3492b699b2f6d11e6c0c7858fa2bed8d Mon Sep 17 00:00:00 2001 From: Anis Date: Sun, 21 Feb 2016 22:41:35 +0100 Subject: [PATCH 129/324] removed tabs --- Engine/source/core/color.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Engine/source/core/color.h b/Engine/source/core/color.h index ddb98c8a83..63e69921be 100644 --- a/Engine/source/core/color.h +++ b/Engine/source/core/color.h @@ -127,12 +127,12 @@ class ColorI struct Hsb { - Hsb() :hue(0), sat(0), brightness(0){}; - Hsb(U32 h, U32 s, U32 b) :hue(h), sat(s), brightness(b){}; + Hsb() :hue(0), sat(0), brightness(0){}; + Hsb(U32 h, U32 s, U32 b) :hue(h), sat(s), brightness(b){}; - U32 hue; ///Hue - U32 sat; ///Saturation - U32 brightness; //Brightness/Value/Lightness + U32 hue; ///Hue + U32 sat; ///Saturation + U32 brightness; //Brightness/Value/Lightness }; public: From 2a1f81d3aaaab268f2129d69da274273a4f3c185 Mon Sep 17 00:00:00 2001 From: Anis Date: Sun, 21 Feb 2016 22:48:10 +0100 Subject: [PATCH 130/324] removed tabs --- Engine/source/math/mConsoleFunctions.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Engine/source/math/mConsoleFunctions.cpp b/Engine/source/math/mConsoleFunctions.cpp index df380da1b1..1d57743e66 100644 --- a/Engine/source/math/mConsoleFunctions.cpp +++ b/Engine/source/math/mConsoleFunctions.cpp @@ -104,16 +104,16 @@ DefineConsoleFunction( mRound, S32, ( F32 v ),, } DefineConsoleFunction( mRoundColour, F32, ( F32 v, S32 n ), (0), - "Round v to the nth decimal place or the nearest whole number by default." - "@param v Value to roundn" - "@param n Number of decimal places to round to, 0 by defaultn" - "@return The rounded value as a S32." - "@ingroup Math") + "Round v to the nth decimal place or the nearest whole number by default." + "@param v Value to roundn" + "@param n Number of decimal places to round to, 0 by defaultn" + "@return The rounded value as a S32." + "@ingroup Math") { - if (n <= 0) - return mRound(v); - else - return mRound(v, n); + if (n <= 0) + return mRound(v); + else + return mRound(v, n); } DefineConsoleFunction( mCeil, S32, ( F32 v ),, From 304c33e525947c4aebd72d2bb515a2584817a76d Mon Sep 17 00:00:00 2001 From: Anis Date: Sun, 21 Feb 2016 22:55:45 +0100 Subject: [PATCH 131/324] removed tabs --- .../source/gui/controls/guiTextEditCtrl.cpp | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Engine/source/gui/controls/guiTextEditCtrl.cpp b/Engine/source/gui/controls/guiTextEditCtrl.cpp index 6c1935bb1a..0cdf7ade6f 100644 --- a/Engine/source/gui/controls/guiTextEditCtrl.cpp +++ b/Engine/source/gui/controls/guiTextEditCtrl.cpp @@ -1252,27 +1252,27 @@ void GuiTextEditCtrl::onLoseFirstResponder() Parent::onLoseFirstResponder(); } -void GuiTextEditCtrl::onRender(Point2I offset, const RectI &updateRect) +void GuiTextEditCtrl::onRender( Point2I offset, const RectI &updateRect ) { RectI ctrlRect( offset, getExtent() ); //if opaque, fill the update rect with the fill color if ( mProfile->mOpaque ) { - if (!mTextValid) - GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorERR); - else if (isFirstResponder()) - GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorHL); - else - GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColor); + if ( !mTextValid ) + GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColorERR ); + else if ( isFirstResponder() ) + GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColorHL ); + else + GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColor ); } //if there's a border, draw the border - if (mProfile->mBorder) + if ( mProfile->mBorder ) { - renderBorder(ctrlRect, mProfile); - if (!mTextValid) - GFX->getDrawUtil()->drawRectFill(ctrlRect, mProfile->mFillColorERR); + renderBorder( ctrlRect, mProfile ); + if ( !mTextValid ) + GFX->getDrawUtil()->drawRectFill( ctrlRect, mProfile->mFillColorERR ); } drawText( ctrlRect, isFirstResponder() ); @@ -1496,25 +1496,25 @@ void GuiTextEditCtrl::drawText( const RectI &drawRect, bool isFocused ) bool GuiTextEditCtrl::hasText() { - return (mTextBuffer.length()); + return ( mTextBuffer.length() ); } void GuiTextEditCtrl::invalidText(bool playSound) { - mTextValid = false; + mTextValid = false; - if (playSound) - playDeniedSound(); + if ( playSound ) + playDeniedSound(); } void GuiTextEditCtrl::validText() { - mTextValid = true; + mTextValid = true; } bool GuiTextEditCtrl::isValidText() { - return mTextValid; + return mTextValid; } void GuiTextEditCtrl::playDeniedSound() From c3b1aaae5a09837871bb7e88e836cc534acd70c6 Mon Sep 17 00:00:00 2001 From: irei1as Date: Tue, 23 Feb 2016 17:17:54 +0100 Subject: [PATCH 132/324] New script function to edit created decals TorqueScript function to edit decals created with decalManagerAddDecal. --- Engine/source/T3D/decal/decalManager.cpp | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/Engine/source/T3D/decal/decalManager.cpp b/Engine/source/T3D/decal/decalManager.cpp index 6db06a521d..d733a78dda 100644 --- a/Engine/source/T3D/decal/decalManager.cpp +++ b/Engine/source/T3D/decal/decalManager.cpp @@ -1744,3 +1744,44 @@ DefineEngineFunction( decalManagerRemoveDecal, bool, ( S32 decalID ),, gDecalManager->removeDecal(inst); return true; } + +DefineEngineFunction( decalManagerEditDecal, bool, ( S32 decalID, Point3F pos, Point3F normal, F32 rotAroundNormal, F32 decalScale ),, + "Edit specified decal of the decal manager.\n" + "@param decalID ID of the decal to edit.\n" + "@param pos World position for the decal.\n" + "@param normal Decal normal vector (if the decal was a tire lying flat on a " + "surface, this is the vector pointing in the direction of the axle).\n" + "@param rotAroundNormal Angle (in radians) to rotate this decal around its normal vector.\n" + "@param decalScale Scale factor applied to the decal.\n" + "@return Returns true if successful, false if decalID not found.\n" + "" ) +{ + DecalInstance *decalInstance = gDecalManager->getDecal( decalID ); + if( !decalInstance ) + return false; + + //Internally we need Point3F tangent instead of the user friendly F32 rotAroundNormal + MatrixF mat( true ); + MathUtils::getMatrixFromUpVector( normal, &mat ); + + AngAxisF rot( normal, rotAroundNormal ); + MatrixF rotmat; + rot.setMatrix( &rotmat ); + mat.mul( rotmat ); + + Point3F tangent; + mat.getColumn( 1, &tangent ); + + //if everything is unchanged just do nothing and return "everything is ok" + if ( pos.equal(decalInstance->mPosition) && normal.equal(decalInstance->mNormal) && tangent.equal(decalInstance->mTangent) && mFabs( decalInstance->mSize - (decalInstance->mDataBlock->size * decalScale) ) < POINT_EPSILON ) return true; + + decalInstance->mPosition = pos; + decalInstance->mNormal = normal; + decalInstance->mTangent = tangent; + decalInstance->mSize = decalInstance->mDataBlock->size * decalScale; + + gDecalManager->clipDecal( decalInstance, NULL, NULL); + + gDecalManager->notifyDecalModified( decalInstance ); + return true; +} From 988bd47d5279d36b11f30c8bc815d9361b6dcd68 Mon Sep 17 00:00:00 2001 From: irei1as Date: Wed, 24 Feb 2016 09:02:07 +0100 Subject: [PATCH 133/324] Visibility change as sugested by dottools --- Engine/source/T3D/decal/decalManager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Engine/source/T3D/decal/decalManager.cpp b/Engine/source/T3D/decal/decalManager.cpp index d733a78dda..f992705d1d 100644 --- a/Engine/source/T3D/decal/decalManager.cpp +++ b/Engine/source/T3D/decal/decalManager.cpp @@ -1773,7 +1773,11 @@ DefineEngineFunction( decalManagerEditDecal, bool, ( S32 decalID, Point3F pos, P mat.getColumn( 1, &tangent ); //if everything is unchanged just do nothing and return "everything is ok" - if ( pos.equal(decalInstance->mPosition) && normal.equal(decalInstance->mNormal) && tangent.equal(decalInstance->mTangent) && mFabs( decalInstance->mSize - (decalInstance->mDataBlock->size * decalScale) ) < POINT_EPSILON ) return true; + if ( pos.equal(decalInstance->mPosition) && + normal.equal(decalInstance->mNormal) && + tangent.equal(decalInstance->mTangent) && + mFabs( decalInstance->mSize - (decalInstance->mDataBlock->size * decalScale) ) < POINT_EPSILON ) + return true; decalInstance->mPosition = pos; decalInstance->mNormal = normal; From f39f7a80c8e50732d3daac9a718a7b22f842aac0 Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 25 Feb 2016 15:26:25 +0100 Subject: [PATCH 134/324] Update gfxGLDevice.cpp --- Engine/source/gfx/gl/gfxGLDevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index b6227faad8..cb5ead9129 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -356,7 +356,7 @@ GFXVertexBuffer *GFXGLDevice::allocVertexBuffer( U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, GFXBufferType bufferType, - void* data = NULL ) + void* data ) { if(bufferType == GFXBufferTypeVolatile) return findVolatileVBO(numVerts, vertexFormat, vertSize); From 740c999c19f7353ba1ccf2344ddee5640c02cce9 Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 25 Feb 2016 15:26:52 +0100 Subject: [PATCH 135/324] compile fix --- Engine/source/gfx/gl/gfxGLDevice.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index cb5ead9129..01bbd02ea4 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -377,7 +377,8 @@ GFXVertexBuffer *GFXGLDevice::allocVertexBuffer( U32 numVerts, GFXPrimitiveBuffer *GFXGLDevice::allocPrimitiveBuffer( U32 numIndices, U32 numPrimitives, GFXBufferType bufferType, void* data ) { - GFXPrimitiveBuffer* buf + GFXPrimitiveBuffer* buf; + if(bufferType == GFXBufferTypeVolatile) { buf = findVolatilePBO(numIndices, numPrimitives); From 7418fbfbbdd2a7bebedd8f80a9a732de6544c036 Mon Sep 17 00:00:00 2001 From: Anis Date: Thu, 25 Feb 2016 18:26:15 +0100 Subject: [PATCH 136/324] fixed memory leak in proper way --- Engine/source/platform/profiler.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Engine/source/platform/profiler.cpp b/Engine/source/platform/profiler.cpp index fb60453fce..c978b9ac26 100644 --- a/Engine/source/platform/profiler.cpp +++ b/Engine/source/platform/profiler.cpp @@ -214,12 +214,22 @@ Profiler::~Profiler() void Profiler::reset() { mEnabled = false; // in case we're in a profiler call. - while (mProfileList) + ProfilerData * head = mProfileList; + ProfilerData * curr = head; + + while ( curr ) { - free(mProfileList); - mProfileList = NULL; + head = curr->mNextProfilerData; + free( curr ); + + if ( head ) + curr = head; + else + curr = NULL; } + mProfileList = NULL; + for(ProfilerRootData *walk = ProfilerRootData::sRootList; walk; walk = walk->mNextRoot) { walk->mFirstProfilerData = 0; From 496b6a3ea853a2e4fa6f80ef36fd78624a1c5a74 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 26 Feb 2016 00:21:01 -0600 Subject: [PATCH 137/324] truncation warning cleanups dx side (was also causing cornercase crashes gl side) --- Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp | 4 ++-- Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index ffd67b45da..cea0ca5db1 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -365,7 +365,7 @@ Var* ShaderFeatureGLSL::getOutTexCoord( const char *name, // Statement allows for casting of different types which // eliminates vector truncation problems. - String statement = String::ToString( " @ = %s(tMul(@, @));\r\n", type ); + String statement = String::ToString( " @ = %s(tMul(@, @).xy);\r\n", type ); meta->addStatement( new GenOp( statement , texCoord, texMat, inTex ) ); } else @@ -813,7 +813,7 @@ Var* ShaderFeatureGLSL::addOutDetailTexCoord( Vector &compon texMat->constSortPos = cspPass; } - meta->addStatement( new GenOp( " @ = tMul(@, @) * @;\r\n", outTex, texMat, inTex, detScale ) ); + meta->addStatement( new GenOp( " @ = tMul(@, @).xy * @;\r\n", outTex, texMat, inTex, detScale ) ); } else { diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 59264c3a9f..0b40cfac38 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -365,7 +365,7 @@ Var* ShaderFeatureHLSL::getOutTexCoord( const char *name, // Statement allows for casting of different types which // eliminates vector truncation problems. - String statement = String::ToString( " @ = (%s)mul(@, @);\r\n", type ); + String statement = String::ToString( " @ = (%s)mul(@, @).xy;\r\n", type ); meta->addStatement( new GenOp( statement, texCoord, texMat, inTex ) ); } else @@ -811,7 +811,7 @@ Var* ShaderFeatureHLSL::addOutDetailTexCoord( Vector &compon texMat->constSortPos = cspPass; } - meta->addStatement( new GenOp( " @ = mul(@, @) * @;\r\n", outTex, texMat, inTex, detScale ) ); + meta->addStatement( new GenOp( " @ = mul(@, @).xy * @;\r\n", outTex, texMat, inTex, detScale ) ); } else { From f701228a37bdd24fe8ca22f6480498fd69ad37f7 Mon Sep 17 00:00:00 2001 From: "Anis A. Hireche" Date: Fri, 26 Feb 2016 15:53:20 +0100 Subject: [PATCH 138/324] Steve Acaster's Ai Poses --- Engine/source/T3D/aiPlayer.cpp | 40 +++++++++++++++++++++++++++++++++ Engine/source/T3D/aiPlayer.h | 4 +++- Engine/source/T3D/player.cpp | 35 +++++++++++++++++++---------- Engine/source/T3D/shapeBase.cpp | 1 + Engine/source/T3D/shapeBase.h | 1 + 5 files changed, 68 insertions(+), 13 deletions(-) diff --git a/Engine/source/T3D/aiPlayer.cpp b/Engine/source/T3D/aiPlayer.cpp index 8992c2c558..8b35e478e1 100644 --- a/Engine/source/T3D/aiPlayer.cpp +++ b/Engine/source/T3D/aiPlayer.cpp @@ -563,6 +563,21 @@ bool AIPlayer::getAIMove(Move *movePtr) } } + Pose desiredPose = mPose; + + if ( mSwimming ) + desiredPose = SwimPose; + else if ( mAiPose == 1 && canCrouch() ) + desiredPose = CrouchPose; + else if ( mAiPose == 2 && canProne() ) + desiredPose = PronePose; + else if ( mAiPose == 3 && canSprint() ) + desiredPose = SprintPose; + else if ( canStand() ) + desiredPose = StandPose; + + setPose( desiredPose ); + // Replicate the trigger state into the move so that // triggers can be controlled from scripts. for( U32 i = 0; i < MaxTriggerKeys; i++ ) @@ -591,6 +606,16 @@ bool AIPlayer::getAIMove(Move *movePtr) return true; } +void AIPlayer::setAiPose( S32 pose ) +{ + mAiPose = pose; +} + +S32 AIPlayer::getAiPose() +{ + return mAiPose; +} + /** * Utility function to throw callbacks. Callbacks always occure * on the datablock class. @@ -1348,3 +1373,18 @@ DefineEngineMethod( AIPlayer, clearMoveTriggers, void, ( ),, { object->clearMoveTriggers(); } + +DefineEngineMethod( AIPlayer, setAiPose, void, ( S32 pose ),, + "@brief Sets the AiPose for an AI object.\n" + "@param pose StandPose=0, CrouchPose=1, PronePose=2, SprintPose=3.\n" + "Uses the new AiPose variable from shapebase (as defined in its PlayerData datablock).\n") +{ + object->setAiPose(pose); +} + +DefineEngineMethod( AIPlayer, getAiPose, S32, (),, + "@brief Get the object's current AiPose.\n" + "@return StandPose=0, CrouchPose=1, PronePose=2, SprintPose=3.\n") +{ + return object->getAiPose(); +} diff --git a/Engine/source/T3D/aiPlayer.h b/Engine/source/T3D/aiPlayer.h index d693314eb2..f072d2423d 100644 --- a/Engine/source/T3D/aiPlayer.h +++ b/Engine/source/T3D/aiPlayer.h @@ -179,7 +179,9 @@ class AIPlayer : public Player { void setMoveDestination( const Point3F &location, bool slowdown ); Point3F getMoveDestination() const { return mMoveDestination; } void stopMove(); - + void setAiPose( S32 pose ); + S32 getAiPose(); + // Trigger sets/gets void setMoveTrigger( U32 slot, const bool isSet = true ); bool getMoveTrigger( U32 slot ) const; diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 6e33284a60..d05609523d 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -3173,18 +3173,21 @@ void Player::updateMove(const Move* move) // Update the PlayerPose Pose desiredPose = mPose; - if ( mSwimming ) - desiredPose = SwimPose; - else if ( runSurface && move->trigger[sCrouchTrigger] && canCrouch() ) - desiredPose = CrouchPose; - else if ( runSurface && move->trigger[sProneTrigger] && canProne() ) - desiredPose = PronePose; - else if ( move->trigger[sSprintTrigger] && canSprint() ) - desiredPose = SprintPose; - else if ( canStand() ) - desiredPose = StandPose; + if ( !mIsAiControlled ) + { + if ( mSwimming ) + desiredPose = SwimPose; + else if ( runSurface && move->trigger[sCrouchTrigger] && canCrouch() ) + desiredPose = CrouchPose; + else if ( runSurface && move->trigger[sProneTrigger] && canProne() ) + desiredPose = PronePose; + else if ( move->trigger[sSprintTrigger] && canSprint() ) + desiredPose = SprintPose; + else if ( canStand() ) + desiredPose = StandPose; - setPose( desiredPose ); + setPose( desiredPose ); + } } @@ -6186,6 +6189,10 @@ U32 Player::packUpdate(NetConnection *con, U32 mask, BitStream *stream) { stream->writeFlag(mFalling); + stream->writeFlag(mSwimming); + stream->writeFlag(mJetting); + stream->writeInt(mPose, NumPoseBits); + stream->writeInt(mState,NumStateBits); if (stream->writeFlag(mState == RecoverState)) stream->writeInt(mRecoverTicks,PlayerData::RecoverDelayBits); @@ -6282,7 +6289,11 @@ void Player::unpackUpdate(NetConnection *con, BitStream *stream) if (stream->readFlag()) { mPredictionCount = sMaxPredictionTicks; mFalling = stream->readFlag(); - + + mSwimming = stream->readFlag(); + mJetting = stream->readFlag(); + mPose = (Pose)(stream->readInt(NumPoseBits)); + ActionState actionState = (ActionState)stream->readInt(NumStateBits); if (stream->readFlag()) { mRecoverTicks = stream->readInt(PlayerData::RecoverDelayBits); diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index 55b258a72a..52ea070e37 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -879,6 +879,7 @@ IMPLEMENT_CALLBACK( ShapeBase, validateCameraFov, F32, (F32 fov), (fov), ShapeBase::ShapeBase() : mDataBlock( NULL ), mIsAiControlled( false ), + mAiPose( 0 ), mControllingObject( NULL ), mMoveMotion( false ), mShapeBaseMount( NULL ), diff --git a/Engine/source/T3D/shapeBase.h b/Engine/source/T3D/shapeBase.h index fcada642b5..5a7ff5eb12 100644 --- a/Engine/source/T3D/shapeBase.h +++ b/Engine/source/T3D/shapeBase.h @@ -874,6 +874,7 @@ class ShapeBase : public GameBase, public ISceneLight /// @name Physical Properties /// @{ + S32 mAiPose; ///< Current pose. F32 mEnergy; ///< Current enery level. F32 mRechargeRate; ///< Energy recharge rate (in units/tick). From 0fb62de4b8faa711d8fe544516fed653cb409701 Mon Sep 17 00:00:00 2001 From: "Anis A. Hireche" Date: Fri, 26 Feb 2016 18:41:29 +0100 Subject: [PATCH 139/324] restored old signature of mRound as it's used from scripts. --- Engine/source/math/mConsoleFunctions.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/Engine/source/math/mConsoleFunctions.cpp b/Engine/source/math/mConsoleFunctions.cpp index 679dad3e2e..1a11fe23e4 100644 --- a/Engine/source/math/mConsoleFunctions.cpp +++ b/Engine/source/math/mConsoleFunctions.cpp @@ -94,18 +94,13 @@ DefineConsoleFunction( mFloor, S32, ( F32 v ),, return (S32)mFloor( v ); } - -DefineConsoleFunction( mRound, F32, ( F32 v, S32 n ), (0), +DefineConsoleFunction( mRound, S32, ( F32 v ),, "Round v to the nth decimal place or the nearest whole number by default." - "@param v Value to round\n" - "@param n Number of decimal places to round to, 0 by default\n" - "@return The rounded value as a S32." - "@ingroup Math" ) + "@param v Value to roundn" + "@return The rounded value as a S32." + "@ingroup Math" ) { - if(n <= 0) - return mRound(v); - else - return mRound(v, n); + return mRound(v); } DefineConsoleFunction( mCeil, S32, ( F32 v ),, From 973e5a6c0209502ec036dc6bcf7fb64f470dc3f6 Mon Sep 17 00:00:00 2001 From: Anis Date: Fri, 26 Feb 2016 20:11:27 +0100 Subject: [PATCH 140/324] Update consoleFunctions.cpp --- Engine/source/console/consoleFunctions.cpp | 472 +++++++++++++++++++++ 1 file changed, 472 insertions(+) diff --git a/Engine/source/console/consoleFunctions.cpp b/Engine/source/console/consoleFunctions.cpp index c03c680463..be265add82 100644 --- a/Engine/source/console/consoleFunctions.cpp +++ b/Engine/source/console/consoleFunctions.cpp @@ -25,6 +25,11 @@ #include "console/consoleInternal.h" #include "console/engineAPI.h" #include "console/ast.h" + +#ifndef _CONSOLFUNCTIONS_H_ +#include "console/consoleFunctions.h" +#endif + #include "core/strings/findMatch.h" #include "core/strings/stringUnit.h" #include "core/strings/unicode.h" @@ -32,6 +37,7 @@ #include "console/compiler.h" #include "platform/platformInput.h" #include "core/util/journal/journal.h" +#include "gfx/gfxEnums.h" #include "core/util/uuid.h" #include "core/color.h" #include "math/mPoint3.h" @@ -44,6 +50,132 @@ bool LinkConsoleFunctions = false; // Buffer for expanding script filenames. static char scriptFilenameBuffer[1024]; +bool isInt(const char* str) +{ + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ignore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + for(int i = start; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(i != 0) + return false; + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; +} + +bool isFloat(const char* str, bool sciOk = false) +{ + int len = dStrlen(str); + if(len <= 0) + return false; + + // Ingore whitespace + int start = 0; + for(int i = start; i < len; i++) + if(str[i] != ' ') + { + start = i; + break; + } + + bool seenDot = false; + int eLoc = -1; + for(int i = 0; i < len; i++) + switch(str[i]) + { + case '+': case '-': + if(sciOk) + { + //Haven't found e or scientific notation symbol + if(eLoc == -1) + { + //only allowed in beginning + if(i != 0) + return false; + } + else + { + //if not right after the e + if(i != (eLoc + 1)) + return false; + } + } + else + { + //only allowed in beginning + if(i != 0) + return false; + } + break; + case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '0': + break; + case 'e': case 'E': + if(!sciOk) + return false; + else + { + //already saw it so can't have 2 + if(eLoc != -1) + return false; + + eLoc = i; + } + break; + case '.': + if(seenDot | (sciOk && eLoc != -1)) + return false; + seenDot = true; + break; + case ' ': // ignore whitespace + for(int j = i+1; j < len; j++) + if(str[j] != ' ') + return false; + return true; + break; + default: + return false; + } + return true; +} + +bool isValidIP(const char* ip) +{ + unsigned b1, b2, b3, b4; + unsigned char c; + int rc = dSscanf(ip, "%3u.%3u.%3u.%3u%c", &b1, &b2, &b3, &b4, &c); + if (rc != 4 && rc != 5) return false; + if ((b1 | b2 | b3 | b4) > 255) return false; + if (dStrspn(ip, "0123456789.") < dStrlen(ip)) return false; + return true; +} + +bool isValidPort(U16 port) +{ + return (port >= 0 && port <=65535); +} //============================================================================= // String Functions. @@ -238,6 +370,40 @@ DefineConsoleFunction( strlen, S32, ( const char* str ),, return dStrlen( str ); } +//----------------------------------------------------------------------------- +DefineConsoleFunction( strlenskip, S32, ( const char* str, const char* first, const char* last ),, + "Calculate the length of a string in characters, skipping everything between and including first and last.\n" + "@param str A string.\n" + "@param first First character to look for to skip block of text.\n" + "@param last Second character to look for to skip block of text.\n" + "@return The length of the given string skipping blocks of text between characters.\n" + "@ingroup Strings" ) +{ + const UTF8* pos = str; + U32 size = 0; + U32 length = dStrlen(str); + bool count = true; + + //loop through each character counting each character, skipping tags (anything with < followed by >) + for(U32 i = 0; i < length; i++, pos++) + { + if(count) + { + if(*pos == first[0]) + count = false; + else + size++; + } + else + { + if(*pos == last[0]) + count = true; + } + } + + return S32(size); +} + //----------------------------------------------------------------------------- DefineConsoleFunction( strstr, S32, ( const char* string, const char* substring ),, @@ -284,6 +450,33 @@ DefineConsoleFunction( strpos, S32, ( const char* haystack, const char* needle, //----------------------------------------------------------------------------- +DefineConsoleFunction( strposr, S32, ( const char* haystack, const char* needle, S32 offset ), ( 0 ), + "Find the start of @a needle in @a haystack searching from right to left beginning at the given offset.\n" + "@param haystack The string to search.\n" + "@param needle The string to search for.\n" + "@return The index at which the first occurrence of @a needle was found in @a heystack or -1 if no match was found.\n\n" + "@tsexample\n" + "strposr( \"b ab\", \"b\", 1 ) // Returns 2.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + U32 sublen = dStrlen( needle ); + U32 strlen = dStrlen( haystack ); + S32 start = strlen - offset; + + if(start < 0 || start > strlen) + return -1; + + if (start + sublen > strlen) + start = strlen - sublen; + for(; start >= 0; start--) + if(!dStrncmp(haystack + start, needle, sublen)) + return start; + return -1; +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( ltrim, const char*, ( const char* str ),, "Remove leading whitespace from the string.\n" "@param str A string.\n" @@ -630,6 +823,18 @@ DefineConsoleFunction( stripTrailingNumber, String, ( const char* str ),, return String::GetTrailingNumber( str, suffix ); } +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getFirstNumber, String, ( const char* str ),, + "Get the first occuring number from @a str.\n" + "@param str The string from which to read out the first number.\n" + "@return String representation of the number or "" if no number.\n\n") +{ + U32 start; + U32 end; + return String::GetFirstNumber(str, start, end); +} + //---------------------------------------------------------------- DefineConsoleFunction( isspace, bool, ( const char* str, S32 index ),, @@ -896,6 +1101,110 @@ DefineConsoleFunction(ColorHSBToRGB, ColorI, (Point3I hsb), , return color; } +//---------------------------------------------------------------- + +DefineConsoleFunction( strToggleCaseToWords, const char*, ( const char* str ),, + "Parse a Toggle Case word into separate words.\n" + "@param str The string to parse.\n" + "@return new string space separated.\n\n" + "@tsexample\n" + "strToggleCaseToWords( \"HelloWorld\" ) // Returns \"Hello World\".\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + String newStr; + for(S32 i = 0; str[i]; i++) + { + //If capitol add a space + if(i != 0 && str[i] >= 65 && str[i] <= 90) + newStr += " "; + + newStr += str[i]; + } + + return Con::getReturnBuffer(newStr); +} + +//---------------------------------------------------------------- + +// Warning: isInt and isFloat are very 'strict' and might need to be adjusted to allow other values. //seanmc +DefineConsoleFunction( isInt, bool, ( const char* str),, + "Returns true if the string is an integer.\n" + "@param str The string to test.\n" + "@return true if @a str is an integer and false if not\n\n" + "@tsexample\n" + "isInt( \"13\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + return isInt(str); +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isFloat, bool, ( const char* str, bool sciOk), (false), + "Returns true if the string is a float.\n" + "@param str The string to test.\n" + "@param sciOk Test for correct scientific notation and accept it (ex. 1.2e+14)" + "@return true if @a str is a float and false if not\n\n" + "@tsexample\n" + "isFloat( \"13.5\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + return isFloat(str, sciOk); +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isValidPort, bool, ( const char* str),, + "Returns true if the string is a valid port number.\n" + "@param str The string to test.\n" + "@return true if @a str is a port and false if not\n\n" + "@tsexample\n" + "isValidPort( \"8080\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + if(isInt(str)) + { + U16 port = dAtous(str); + return isValidPort(port); + } + else + return false; +} + +//---------------------------------------------------------------- + +DefineConsoleFunction( isValidIP, bool, ( const char* str),, + "Returns true if the string is a valid ip address, excepts localhost.\n" + "@param str The string to test.\n" + "@return true if @a str is a valid ip address and false if not\n\n" + "@tsexample\n" + "isValidIP( \"localhost\" ) // Returns true.\n" + "@endtsexample\n" + "@ingroup Strings" ) +{ + if(dStrcmp(str, "localhost") == 0) + { + return true; + } + else + return isValidIP(str); +} + +//---------------------------------------------------------------- + +// Torque won't normally add another string if it already exists with another casing, +// so this forces the addition. It should be called once near the start, such as in main.cs. +ConsoleFunction(addCaseSensitiveStrings,void,2,0,"[string1, string2, ...]" + "Adds case sensitive strings to the StringTable.") +{ + for(int i = 1; i < argc; i++) + StringTable->insert(argv[i], true); +} + //============================================================================= // Field Manipulators. //============================================================================= @@ -914,6 +1223,7 @@ DefineConsoleFunction( getWord, const char*, ( const char* text, S32 index ),, "@endtsexample\n\n" "@see getWords\n" "@see getWordCount\n" + "@see getToken\n" "@see getField\n" "@see getRecord\n" "@ingroup FieldManip" ) @@ -937,6 +1247,7 @@ DefineConsoleFunction( getWords, const char*, ( const char* text, S32 startIndex "@endtsexample\n\n" "@see getWord\n" "@see getWordCount\n" + "@see getTokens\n" "@see getFields\n" "@see getRecords\n" "@ingroup FieldManip" ) @@ -961,6 +1272,7 @@ DefineConsoleFunction( setWord, const char*, ( const char* text, S32 index, cons "setWord( \"a b c d\", 2, \"f\" ) // Returns \"a b f d\"\n" "@endtsexample\n\n" "@see getWord\n" + "@see setToken\n" "@see setField\n" "@see setRecord\n" "@ingroup FieldManip" ) @@ -980,6 +1292,7 @@ DefineConsoleFunction( removeWord, const char*, ( const char* text, S32 index ), "@tsexample\n" "removeWord( \"a b c d\", 2 ) // Returns \"a b d\"\n" "@endtsexample\n\n" + "@see removeToken\n" "@see removeField\n" "@see removeRecord\n" "@ingroup FieldManip" ) @@ -997,6 +1310,7 @@ DefineConsoleFunction( getWordCount, S32, ( const char* text ),, "@tsexample\n" "getWordCount( \"a b c d e\" ) // Returns 5\n" "@endtsexample\n\n" + "@see getTokenCount\n" "@see getFieldCount\n" "@see getRecordCount\n" "@ingroup FieldManip" ) @@ -1006,6 +1320,49 @@ DefineConsoleFunction( getWordCount, S32, ( const char* text ),, //----------------------------------------------------------------------------- +DefineEngineFunction( monthNumToStr, String, ( S32 num, bool abbreviate ), (false), + "@brief returns month as a word given a number or \"\" if number is bad" + "@return month as a word given a number or \"\" if number is bad" + "@ingroup FileSystem") +{ + switch(num) + { + case 1: return abbreviate ? "Jan" : "January"; break; + case 2: return abbreviate ? "Feb" : "February"; break; + case 3: return abbreviate ? "Mar" : "March"; break; + case 4: return abbreviate ? "Apr" : "April"; break; + case 5: return "May"; break; + case 6: return abbreviate ? "Jun" : "June"; break; + case 7: return abbreviate ? "Jul" : "July"; break; + case 8: return abbreviate ? "Aug" : "August"; break; + case 9: return abbreviate ? "Sep" : "September"; break; + case 10: return abbreviate ? "Oct" : "October"; break; + case 11: return abbreviate ? "Nov" : "November"; break; + case 12: return abbreviate ? "Dec" : "December"; break; + default: return ""; + } +} + +DefineEngineFunction( weekdayNumToStr, String, ( S32 num, bool abbreviate ), (false), + "@brief returns weekday as a word given a number or \"\" if number is bad" + "@return weekday as a word given a number or \"\" if number is bad" + "@ingroup FileSystem") +{ + switch(num) + { + case 0: return abbreviate ? "Sun" : "Sunday"; break; + case 1: return abbreviate ? "Mon" : "Monday"; break; + case 2: return abbreviate ? "Tue" : "Tuesday"; break; + case 3: return abbreviate ? "Wed" : "Wednesday"; break; + case 4: return abbreviate ? "Thu" : "Thursday"; break; + case 5: return abbreviate ? "Fri" : "Friday"; break; + case 6: return abbreviate ? "Sat" : "Saturday"; break; + default: return ""; + } +} + +//----------------------------------------------------------------------------- + DefineConsoleFunction( getField, const char*, ( const char* text, S32 index ),, "Extract the field at the given @a index in the newline and/or tab separated list in @a text.\n" "Fields in @a text must be separated by newlines and/or tabs.\n" @@ -1327,6 +1684,114 @@ DefineConsoleFunction( nextToken, const char*, ( const char* str1, const char* t return ret; } +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getToken, const char*, ( const char* text, const char* delimiters, S32 index ),, + "Extract the substring at the given @a index in the @a delimiters separated list in @a text.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the substring to extract.\n" + "@return The substring at the given index or \"\" if the index is out of range.\n\n" + "@tsexample\n" + "getToken( \"a b c d\", \" \", 2 ) // Returns \"c\"\n" + "@endtsexample\n\n" + "@see getTokens\n" + "@see getTokenCount\n" + "@see getWord\n" + "@see getField\n" + "@see getRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::getUnit(text, index, delimiters)); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getTokens, const char*, ( const char* text, const char* delimiters, S32 startIndex, S32 endIndex ), ( -1 ), + "Extract a range of substrings separated by @a delimiters at the given @a startIndex onwards thru @a endIndex.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param startIndex The zero-based index of the first substring to extract from @a text.\n" + "@param endIndex The zero-based index of the last substring to extract from @a text. If this is -1, all words beginning " + "with @a startIndex are extracted from @a text.\n" + "@return A string containing the specified range of substrings from @a text or \"\" if @a startIndex " + "is out of range or greater than @a endIndex.\n\n" + "@tsexample\n" + "getTokens( \"a b c d\", \" \", 1, 2, ) // Returns \"b c\"\n" + "@endtsexample\n\n" + "@see getToken\n" + "@see getTokenCount\n" + "@see getWords\n" + "@see getFields\n" + "@see getRecords\n" + "@ingroup FieldManip" ) +{ + if( endIndex < 0 ) + endIndex = 1000000; + + return Con::getReturnBuffer( StringUnit::getUnits( text, startIndex, endIndex, delimiters ) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( setToken, const char*, ( const char* text, const char* delimiters, S32 index, const char* replacement ),, + "Replace the substring in @a text separated by @a delimiters at the given @a index with @a replacement.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the substring to replace.\n" + "@param replacement The string with which to replace the substring.\n" + "@return A new string with the substring at the given @a index replaced by @a replacement or the original " + "string if @a index is out of range.\n\n" + "@tsexample\n" + "setToken( \"a b c d\", \" \", 2, \"f\" ) // Returns \"a b f d\"\n" + "@endtsexample\n\n" + "@see getToken\n" + "@see setWord\n" + "@see setField\n" + "@see setRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::setUnit( text, index, replacement, delimiters) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( removeToken, const char*, ( const char* text, const char* delimiters, S32 index ),, + "Remove the substring in @a text separated by @a delimiters at the given @a index.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@param index The zero-based index of the word in @a text.\n" + "@return A new string with the substring at the given index removed or the original string if @a index is " + "out of range.\n\n" + "@tsexample\n" + "removeToken( \"a b c d\", \" \", 2 ) // Returns \"a b d\"\n" + "@endtsexample\n\n" + "@see removeWord\n" + "@see removeField\n" + "@see removeRecord\n" + "@ingroup FieldManip" ) +{ + return Con::getReturnBuffer( StringUnit::removeUnit( text, index, delimiters ) ); +} + +//----------------------------------------------------------------------------- + +DefineConsoleFunction( getTokenCount, S32, ( const char* text, const char* delimiters),, + "Return the number of @a delimiters substrings in @a text.\n" + "@param text A @a delimiters list of substrings.\n" + "@param delimiters Character or characters that separate the list of substrings in @a text.\n" + "@return The number of @a delimiters substrings in @a text.\n\n" + "@tsexample\n" + "getTokenCount( \"a b c d e\", \" \" ) // Returns 5\n" + "@endtsexample\n\n" + "@see getWordCount\n" + "@see getFieldCount\n" + "@see getRecordCount\n" + "@ingroup FieldManip" ) +{ + return StringUnit::getUnitCount( text, delimiters ); +} + //============================================================================= // Tagged Strings. //============================================================================= @@ -2682,3 +3147,10 @@ DefineEngineFunction( isToolBuild, bool, (),, return false; #endif } + +DefineEngineFunction( getMaxDynamicVerts, S32, (),, + "Get max number of allowable dynamic vertices in a single vertex buffer.\n\n" + "@return the max number of allowable dynamic vertices in a single vertex buffer" ) +{ + return MAX_DYNAMIC_VERTS / 2; +} From 49443d3167f581d60ff1a03d3314d7ac1f7c013f Mon Sep 17 00:00:00 2001 From: "Anis A. Hireche" Date: Sat, 27 Feb 2016 02:16:07 +0100 Subject: [PATCH 141/324] conflict resolution --- Engine/source/console/consoleObject.h | 264 ++++++++++++++----------- Engine/source/console/engineTypeInfo.h | 2 +- 2 files changed, 152 insertions(+), 114 deletions(-) diff --git a/Engine/source/console/consoleObject.h b/Engine/source/console/consoleObject.h index 5f04435aa2..8ecbb80317 100644 --- a/Engine/source/console/consoleObject.h +++ b/Engine/source/console/consoleObject.h @@ -567,122 +567,141 @@ extern AbstractClassRep::FieldList sg_tempFieldList; /// @see AbtractClassRep /// @see ConsoleObject template< class T > -class ConcreteClassRep : public AbstractClassRep +class ConcreteAbstractClassRep : public AbstractClassRep { - public: - - static EnginePropertyTable _smPropertyTable; - static EnginePropertyTable& smPropertyTable; - - ConcreteClassRep( const char* name, - const char* conTypeName, - S32* conTypeIdPtr, - S32 netClassGroupMask, - S32 netClassType, - S32 netEventDir, - AbstractClassRep* parent, - const char* ( *parentDesc )() ) - : AbstractClassRep( conTypeIdPtr, conTypeName ) - { - mClassName = StringTable->insert( name ); - mCategory = T::__category(); - mTypeInfo = _MAPTYPE< T >(); - - if( mTypeInfo ) - const_cast< EngineTypeInfo* >( mTypeInfo )->mPropertyTable = &smPropertyTable; - - if( &T::__description != parentDesc ) - mDescription = T::__description(); - - // Clean up mClassId - for(U32 i = 0; i < NetClassGroupsCount; i++) - mClassId[i] = -1; - - // Set properties for this ACR - mClassType = netClassType; - mClassGroupMask = netClassGroupMask; - mNetEventDir = netEventDir; - parentClass = parent; - mClassSizeof = sizeof(T); - - // Finally, register ourselves. - registerClassRep(this); - }; - - virtual AbstractClassRep* getContainerChildClass(const bool recurse) - { - // Fetch container children type. - AbstractClassRep* pChildren = T::getContainerChildStaticClassRep(); - if (!recurse || pChildren != NULL) - return pChildren; - - // Fetch parent type. - AbstractClassRep* pParent = T::getParentStaticClassRep(); - if (pParent == NULL) - return NULL; - - // Get parent container children. - return pParent->getContainerChildClass(recurse); - } - - virtual WriteCustomTamlSchema getCustomTamlSchema(void) - { - return T::getStaticWriteCustomTamlSchema(); - } - - /// Perform class specific initialization tasks. - /// - /// Link namespaces, call initPersistFields() and consoleInit(). - void init() - { - // Get handle to our parent class, if any, and ourselves (we are our parent's child). - AbstractClassRep *parent = T::getParentStaticClassRep(); - AbstractClassRep *child = T::getStaticClassRep(); - - // If we got reps, then link those namespaces! (To get proper inheritance.) - if(parent && child) - Con::classLinkNamespaces(parent->getNameSpace(), child->getNameSpace()); - - // Finally, do any class specific initialization... - T::initPersistFields(); - T::consoleInit(); - - // Let the base finish up. - AbstractClassRep::init(); - } +public: - /// Wrap constructor. - ConsoleObject* create() const { return new T; } + virtual AbstractClassRep* getContainerChildClass(const bool recurse) + { + // Fetch container children type. + AbstractClassRep* pChildren = T::getContainerChildStaticClassRep(); + if (!recurse || pChildren != NULL) + return pChildren; + + // Fetch parent type. + AbstractClassRep* pParent = T::getParentStaticClassRep(); + if (pParent == NULL) + return NULL; + + // Get parent container children. + return pParent->getContainerChildClass(recurse); + } - /// @name Console Type Interface - /// @{ + virtual WriteCustomTamlSchema getCustomTamlSchema(void) + { + return T::getStaticWriteCustomTamlSchema(); + } - virtual void setData( void* dptr, S32 argc, const char** argv, const EnumTable* tbl, BitSet32 flag ) - { - if( argc == 1 ) - { - T** obj = ( T** ) dptr; - *obj = dynamic_cast< T* >( T::__findObject( argv[ 0 ] ) ); - } - else - Con::errorf( "Cannot set multiple args to a single ConsoleObject*."); - } + static EnginePropertyTable _smPropertyTable; + static EnginePropertyTable& smPropertyTable; + + ConcreteAbstractClassRep(const char* name, + const char* conTypeName, + S32* conTypeIdPtr, + S32 netClassGroupMask, + S32 netClassType, + S32 netEventDir, + AbstractClassRep* parent, + const char* (*parentDesc)()) + : AbstractClassRep(conTypeIdPtr, conTypeName) + { + mClassName = StringTable->insert(name); + mCategory = T::__category(); + mTypeInfo = _MAPTYPE< T >(); + + if (mTypeInfo) + const_cast< EngineTypeInfo* >(mTypeInfo)->mPropertyTable = &smPropertyTable; + + if (&T::__description != parentDesc) + mDescription = T::__description(); + + // Clean up mClassId + for (U32 i = 0; i < NetClassGroupsCount; i++) + mClassId[i] = -1; + + // Set properties for this ACR + mClassType = netClassType; + mClassGroupMask = netClassGroupMask; + mNetEventDir = netEventDir; + parentClass = parent; + mClassSizeof = sizeof(T); + + // Finally, register ourselves. + registerClassRep(this); + }; + + /// Wrap constructor. + ConsoleObject* create() const { return NULL; } - virtual const char* getData( void* dptr, const EnumTable* tbl, BitSet32 flag ) + /// Perform class specific initialization tasks. + /// + /// Link namespaces, call initPersistFields() and consoleInit(). + void init() + { + // Get handle to our parent class, if any, and ourselves (we are our parent's child). + AbstractClassRep *parent = T::getParentStaticClassRep(); + AbstractClassRep *child = T::getStaticClassRep(); + + // If we got reps, then link those namespaces! (To get proper inheritance.) + if (parent && child) + Con::classLinkNamespaces(parent->getNameSpace(), child->getNameSpace()); + + // Finally, do any class specific initialization... + T::initPersistFields(); + T::consoleInit(); + + // Let the base finish up. + AbstractClassRep::init(); + } + + /// @name Console Type Interface + /// @{ + + virtual void setData(void* dptr, S32 argc, const char** argv, const EnumTable* tbl, BitSet32 flag) + { + if (argc == 1) { - T** obj = ( T** ) dptr; - return Con::getReturnBuffer( T::__getObjectId( *obj ) ); + T** obj = (T**)dptr; + *obj = dynamic_cast< T* >(T::__findObject(argv[0])); } + else + Con::errorf("Cannot set multiple args to a single ConsoleObject*."); + } + + virtual const char* getData(void* dptr, const EnumTable* tbl, BitSet32 flag) + { + T** obj = (T**)dptr; + return Con::getReturnBuffer(T::__getObjectId(*obj)); + } + + virtual const char* getTypeClassName() { return mClassName; } + virtual const bool isDatablock() { return T::__smIsDatablock; }; - virtual const char* getTypeClassName() { return mClassName; } - virtual const bool isDatablock() { return T::__smIsDatablock; }; - - /// @} + /// @} + }; + + template< class T > + class ConcreteClassRep : public ConcreteAbstractClassRep + { + public: + ConcreteClassRep(const char* name, + const char* conTypeName, + S32* conTypeIdPtr, + S32 netClassGroupMask, + S32 netClassType, + S32 netEventDir, + AbstractClassRep* parent, + const char* (*parentDesc)()) + : ConcreteAbstractClassRep(name, conTypeName, conTypeIdPtr, netClassGroupMask, netClassType, netEventDir, parent, parentDesc) + { + } + + /// Wrap constructor. + ConsoleObject* create() const { return new T; } }; -template< typename T > EnginePropertyTable ConcreteClassRep< T >::_smPropertyTable( 0, NULL ); -template< typename T > EnginePropertyTable& ConcreteClassRep< T >::smPropertyTable = ConcreteClassRep< T >::_smPropertyTable; - +template< typename T > EnginePropertyTable ConcreteAbstractClassRep< T >::_smPropertyTable(0, NULL); +template< typename T > EnginePropertyTable& ConcreteAbstractClassRep< T >::smPropertyTable = ConcreteAbstractClassRep< T >::_smPropertyTable; //------------------------------------------------------------------------------ // Forward declaration of this function so it can be used in the class @@ -763,6 +782,15 @@ class ConsoleObject : public EngineObject /// Gets the ClassRep. virtual AbstractClassRep* getClassRep() const; +#define DECLARE_ABSTRACT_CONOBJECT( className ) \ + DECLARE_ABSTRACT_CLASS( className, Parent ); \ + static S32 _smTypeId; \ + static ConcreteAbstractClassRep< className > dynClassRep; \ + static AbstractClassRep* getParentStaticClassRep(); \ + static AbstractClassRep* getStaticClassRep(); \ + static SimObjectRefConsoleBaseType< className > ptrRefType; \ + virtual AbstractClassRep* getClassRep() const + /// Set the value of a field. bool setField(const char *fieldName, const char *value); @@ -1136,7 +1164,7 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) -#define IMPLEMENT_CONOBJECT_CHILDREN( className ) \ +#define IMPLEMENT_CONOBJECT_CHILDREN( className ) \ IMPLEMENT_CLASS( className, NULL ) \ END_IMPLEMENT_CLASS; \ S32 className::_smTypeId; \ @@ -1144,11 +1172,11 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ - AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) -#define IMPLEMENT_CONOBJECT_SCHEMA( className, schema ) \ +#define IMPLEMENT_CONOBJECT_SCHEMA( className, schema ) \ IMPLEMENT_CLASS( className, NULL ) \ END_IMPLEMENT_CLASS; \ S32 className::_smTypeId; \ @@ -1160,7 +1188,7 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return schema; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) -#define IMPLEMENT_CONOBJECT_CHILDREN_SCHEMA( className, schema ) \ +#define IMPLEMENT_CONOBJECT_CHILDREN_SCHEMA( className, schema ) \ IMPLEMENT_CLASS( className, NULL ) \ END_IMPLEMENT_CLASS; \ S32 className::_smTypeId; \ @@ -1168,10 +1196,20 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ - AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ + AbstractClassRep* className::getContainerChildStaticClassRep() { return Children::getStaticClassRep(); } \ AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return schema; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) +#define IMPLEMENT_ABSTRACT_CONOBJECT( className ) \ + IMPLEMENT_NONINSTANTIABLE_CLASS( className, NULL ) \ + END_IMPLEMENT_CLASS; \ + S32 className::_smTypeId; \ + SimObjectRefConsoleBaseType< className > className::ptrRefType( "Type" #className "Ref" ); \ + AbstractClassRep* className::getClassRep() const { return &className::dynClassRep; } \ + AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ + AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ + ConcreteAbstractClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, 0, -1, 0, className::getParentStaticClassRep(), &Parent::__description ) + #define IMPLEMENT_CO_NETOBJECT_V1( className ) \ IMPLEMENT_CLASS( className, NULL ) \ END_IMPLEMENT_CLASS; \ @@ -1181,7 +1219,7 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ - AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep( #className, "Type" #className, &_smTypeId, NetClassGroupGameMask, NetClassTypeObject, 0, className::getParentStaticClassRep(), &Parent::__description ) #define IMPLEMENT_CO_DATABLOCK_V1( className ) \ @@ -1193,7 +1231,7 @@ inline bool& ConsoleObject::getDynamicGroupExpand() AbstractClassRep* className::getStaticClassRep() { return &dynClassRep; } \ AbstractClassRep* className::getParentStaticClassRep() { return Parent::getStaticClassRep(); } \ AbstractClassRep* className::getContainerChildStaticClassRep() { return NULL; } \ - AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ + AbstractClassRep::WriteCustomTamlSchema className::getStaticWriteCustomTamlSchema() { return NULL; } \ ConcreteClassRep className::dynClassRep(#className, "Type" #className, &_smTypeId, NetClassGroupGameMask, NetClassTypeDataBlock, 0, className::getParentStaticClassRep(), &Parent::__description ) // Support for adding properties to classes CONOBJECT style. diff --git a/Engine/source/console/engineTypeInfo.h b/Engine/source/console/engineTypeInfo.h index 88d78eed75..52d713e9eb 100644 --- a/Engine/source/console/engineTypeInfo.h +++ b/Engine/source/console/engineTypeInfo.h @@ -362,7 +362,7 @@ class EngineTypeInfo : public EngineExportScope // them to retroactively install property tables. Will be removed // when the console interop is removed and all classes are migrated // to the new system. - template< typename T > friend class ConcreteClassRep; + template< typename T > friend class ConcreteAbstractClassRep; protected: From c0e29d4a223cdb8ae88faa8a50d79771545672d3 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 27 Feb 2016 13:13:12 -0600 Subject: [PATCH 142/324] Correction for 2 of the render bin settings, as well as correcting the water shader over-exposing it's reflections. --- Templates/Full/game/core/scripts/client/renderManager.cs | 4 ++-- Templates/Full/game/shaders/common/water/gl/waterP.glsl | 2 +- Templates/Full/game/shaders/common/water/waterP.hlsl | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Templates/Full/game/core/scripts/client/renderManager.cs b/Templates/Full/game/core/scripts/client/renderManager.cs index 71200ad49b..a14287db18 100644 --- a/Templates/Full/game/core/scripts/client/renderManager.cs +++ b/Templates/Full/game/core/scripts/client/renderManager.cs @@ -55,8 +55,8 @@ function initRenderManager() DiffuseRenderPassManager.addManager( new RenderObjectMgr(BeginBin) { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); // Normal mesh rendering. - DiffuseRenderPassManager.addManager( new RenderTerrainMgr(TerrainBin) { renderOrder = 0.4; processAddOrder = 0.4; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr(MeshBin) { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; } ); + DiffuseRenderPassManager.addManager( new RenderTerrainMgr(TerrainBin) { renderOrder = 0.4; processAddOrder = 0.4; basicOnly = true; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(MeshBin) { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; basicOnly = true; } ); DiffuseRenderPassManager.addManager( new RenderImposterMgr(ImposterBin) { renderOrder = 0.56; processAddOrder = 0.56; } ); DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjectBin) { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); diff --git a/Templates/Full/game/shaders/common/water/gl/waterP.glsl b/Templates/Full/game/shaders/common/water/gl/waterP.glsl index 15002849f6..a68ede84e6 100644 --- a/Templates/Full/game/shaders/common/water/gl/waterP.glsl +++ b/Templates/Full/game/shaders/common/water/gl/waterP.glsl @@ -295,7 +295,7 @@ void main() foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - vec4 refMapColor = hdrDecode( texture( reflectMap, reflectCoord ) ); + vec4 refMapColor = texture( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. refMapColor = mix( refMapColor, texture( skyMap, reflectionVec ), NO_REFLECT ); diff --git a/Templates/Full/game/shaders/common/water/waterP.hlsl b/Templates/Full/game/shaders/common/water/waterP.hlsl index 2b40357555..c4edff0d7d 100644 --- a/Templates/Full/game/shaders/common/water/waterP.hlsl +++ b/Templates/Full/game/shaders/common/water/waterP.hlsl @@ -282,7 +282,7 @@ float4 main( ConnectData IN ) : COLOR foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - float4 refMapColor = hdrDecode( tex2D( reflectMap, reflectCoord ) ); + float4 refMapColor = tex2D( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); From 1c854b6009b6e1fed7a27d3e55dd2ddb41994d46 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 29 Feb 2016 04:17:42 -0600 Subject: [PATCH 143/324] opengl crashfix pow(x,y) needed to be passed matching vartypes. --- Templates/Full/game/shaders/common/gl/torque.glsl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Templates/Full/game/shaders/common/gl/torque.glsl b/Templates/Full/game/shaders/common/gl/torque.glsl index 65580cb7b4..d4a7c45381 100644 --- a/Templates/Full/game/shaders/common/gl/torque.glsl +++ b/Templates/Full/game/shaders/common/gl/torque.glsl @@ -285,11 +285,11 @@ void fizzle(vec2 vpos, float visibility) #define assert(condition, color) { if(!any(condition)) { OUT_col = color; return; } } // Deferred Shading: Material Info Flag Check -bool getFlag(float flags, int num) +bool getFlag(float flags, float num) { float process = round(flags * 255); - float squareNum = pow(2, num); - return (mod(process, pow(2, squareNum)) >= squareNum); + float squareNum = pow(2.0, num); + return (mod(process, pow(2.0, squareNum)) >= squareNum); } // #define TORQUE_STOCK_GAMMA From 9472bfd3ca4fed4282bca7625401713a891881f6 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 1 Mar 2016 20:25:52 -0600 Subject: [PATCH 144/324] addresses https://github.com/GarageGames/Torque3D/issues/1537 via the following: https://github.com/GarageGames/Torque3D/blob/908be4818f7e5de23f2070d18ed4df0f4dfc5ddf/Engine/source/materials/materialDefinition.cpp#L261 denotes power as sharpness, reflected in the size/falloff of a highlight halo * https://github.com/GarageGames/Torque3D/blob/908be4818f7e5de23f2070d18ed4df0f4dfc5ddf/Engine/source/materials/materialDefinition.cpp#L264 denotes strength as overall brightness of highlights. ** *and sharpness of reflection if using a cubemap. ** reflected in cubemapped objects as also degree of 'reflection' vs diffuse/albedo coloration. --- .../lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp | 4 ++-- .../lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp | 4 ++-- Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp | 4 ++-- Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp index e457b9eaba..1dc9069893 100644 --- a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp @@ -163,8 +163,8 @@ void DeferredSpecVarsGLSL::processPix( Vector &componentList, MultiLine *meta = new MultiLine; //matinfo.g slot reserved for AO later meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); - meta->addStatement(new GenOp(" @.b = @/128;\r\n", material, specStrength)); - meta->addStatement(new GenOp(" @.a = @/5;\r\n", material, specPower)); + meta->addStatement(new GenOp(" @.a = @/128;\r\n", material, specPower)); + meta->addStatement(new GenOp(" @.b = @/5;\r\n", material, specStrength)); output = meta; } diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp index 6b8b990a05..3e42af9531 100644 --- a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp @@ -160,8 +160,8 @@ void DeferredSpecVarsHLSL::processPix( Vector &componentList, MultiLine * meta = new MultiLine; //matinfo.g slot reserved for AO later meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); - meta->addStatement(new GenOp(" @.b = @/128;\r\n", material, specStrength)); - meta->addStatement(new GenOp(" @.a = @/5;\r\n", material, specPower)); + meta->addStatement(new GenOp(" @.a = @/128;\r\n", material, specPower)); + meta->addStatement(new GenOp(" @.b = @/5;\r\n", material, specStrength)); output = meta; } diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index cea0ca5db1..78c45a09cd 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -1856,7 +1856,7 @@ void ReflectCubeFeatGLSL::processPix( Vector &componentList, if (fd.features[MFT_DeferredSpecMap]) texCube = new GenOp("textureLod( @, @, (@.a*5) )", cubeMap, reflectVec, matinfo); else - texCube = new GenOp("textureLod( @, @, (@.a/4) )", cubeMap, reflectVec, matinfo); + texCube = new GenOp("textureLod( @, @, ((1.0-@.a)*6) )", cubeMap, reflectVec, matinfo); } else if(glossColor) //failing that, rtry and find color data texCube = new GenOp("textureLod( @, @, @.a*5)", cubeMap, reflectVec, glossColor); @@ -1896,7 +1896,7 @@ void ReflectCubeFeatGLSL::processPix( Vector &componentList, if (fd.features[MFT_DeferredSpecMap]) meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); else - meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b*128/5));\r\n", targ, targ, texCube, lerpVal)); + meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( texCube, blendOp, lerpVal ) ) ); diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 0b40cfac38..2ab6a75f00 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -1857,7 +1857,7 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, if (fd.features[MFT_DeferredSpecMap]) texCube = new GenOp("texCUBElod( @, float4(@, (@.a*5)) )", cubeMap, reflectVec, matinfo); else - texCube = new GenOp("texCUBElod( @, float4(@, (@.a/4)) )", cubeMap, reflectVec, matinfo); + texCube = new GenOp("texCUBElod( @, float4(@, ((1.0-@.a)*6)) )", cubeMap, reflectVec, matinfo); } else if (glossColor) //failing that, rtry and find color data @@ -1898,7 +1898,7 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, if (fd.features[MFT_DeferredSpecMap]) meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); else - meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b*128/5));\r\n", targ, targ, texCube, lerpVal)); + meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( texCube, blendOp, lerpVal ) ) ); From d2d5b8d8343e1ebc568f75da9e537a033d187390 Mon Sep 17 00:00:00 2001 From: Alex Piola Date: Fri, 4 Mar 2016 10:45:55 +0100 Subject: [PATCH 145/324] Fix zipped dts loading --- Engine/source/ts/collada/colladaShapeLoader.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Engine/source/ts/collada/colladaShapeLoader.cpp b/Engine/source/ts/collada/colladaShapeLoader.cpp index f376b78da0..afb53fdaf2 100644 --- a/Engine/source/ts/collada/colladaShapeLoader.cpp +++ b/Engine/source/ts/collada/colladaShapeLoader.cpp @@ -529,6 +529,16 @@ bool ColladaShapeLoader::canLoadCachedDTS(const Torque::Path& path) } } + //assume the dts is good since it was zipped on purpose + Torque::FS::FileSystemRef ref = Torque::FS::GetFileSystem(cachedPath); + if (ref && !dStrcmp("Zip", ref->getTypeStr())) + { + bool forceLoadDAE = Con::getBoolVariable("$collada::forceLoadDAE", false); + + if (!forceLoadDAE && Torque::FS::IsFile(cachedPath)) + return true; + } + return false; } @@ -709,11 +719,17 @@ TSShape* loadColladaShape(const Torque::Path &path) #ifndef DAE2DTS_TOOL // Cache the Collada model to a DTS file for faster loading next time. FileStream dtsStream; + if (dtsStream.open(cachedPath.getFullPath(), Torque::FS::File::Write)) { + Torque::FS::FileSystemRef ref = Torque::FS::GetFileSystem(daePath); + if (ref && !dStrcmp("Zip", ref->getTypeStr())) + Con::errorf("No cached dts file found in archive for %s. Forcing cache to disk.", daePath.getFullFileName().c_str()); + Con::printf("Writing cached COLLADA shape to %s", cachedPath.getFullPath().c_str()); tss->write(&dtsStream); } + #endif // DAE2DTS_TOOL // Add collada materials to materials.cs From 07cf85143b562753a5eba26db10f49cbdcb90152 Mon Sep 17 00:00:00 2001 From: Alex Piola Date: Fri, 4 Mar 2016 18:03:21 +0100 Subject: [PATCH 146/324] fixes crash when callOnChildren Anis and me managed to fix this: #1508 --- Engine/source/console/console.cpp | 6 ++++-- Engine/source/console/simSet.cpp | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Engine/source/console/console.cpp b/Engine/source/console/console.cpp index abd6cb249f..9fa6ad5c28 100644 --- a/Engine/source/console/console.cpp +++ b/Engine/source/console/console.cpp @@ -1252,7 +1252,7 @@ ConsoleValueRef _internalExecute(SimObject *object, S32 argc, ConsoleValueRef ar if(object->getNamespace()) { U32 ident = object->getId(); - ConsoleValueRef oldIdent = argv[1]; + ConsoleValueRef oldIdent(argv[1]); StringTableEntry funcName = StringTable->insert(argv[0]); Namespace::Entry *ent = object->getNamespace()->lookup(funcName); @@ -1266,7 +1266,9 @@ ConsoleValueRef _internalExecute(SimObject *object, S32 argc, ConsoleValueRef ar } // Twiddle %this argument - argv[1] = (S32)ident; + ConsoleValue func_ident; + func_ident.setIntValue((S32)ident); + argv[1] = ConsoleValueRef::fromValue(&func_ident); SimObject *save = gEvalState.thisObject; gEvalState.thisObject = object; diff --git a/Engine/source/console/simSet.cpp b/Engine/source/console/simSet.cpp index f1f77ee4f4..c44b09c36e 100644 --- a/Engine/source/console/simSet.cpp +++ b/Engine/source/console/simSet.cpp @@ -233,8 +233,11 @@ void SimSet::callOnChildren( const String &method, S32 argc, ConsoleValueRef arg { // Prep the arguments for the console exec... // Make sure and leave args[1] empty. - ConsoleValueRef args[21]; - args[0] = method.c_str(); + ConsoleValueRef args[21] = { }; + ConsoleValue name_method; + name_method.setStackStringValue(method.c_str()); + args[0] = ConsoleValueRef::fromValue(&name_method); + for (S32 i = 0; i < argc; i++) args[i + 2] = argv[i]; From 87f62c427c03fb1a221da43173f9066d0c5bf9c2 Mon Sep 17 00:00:00 2001 From: Anis Date: Fri, 4 Mar 2016 22:18:12 +0100 Subject: [PATCH 147/324] removed triangle fan draw on color picker --- Engine/source/gui/controls/guiColorPicker.cpp | 87 +++++++++++-------- 1 file changed, 49 insertions(+), 38 deletions(-) diff --git a/Engine/source/gui/controls/guiColorPicker.cpp b/Engine/source/gui/controls/guiColorPicker.cpp index 97a8470d82..2fad6aa69a 100644 --- a/Engine/source/gui/controls/guiColorPicker.cpp +++ b/Engine/source/gui/controls/guiColorPicker.cpp @@ -121,68 +121,76 @@ void GuiColorPickerCtrl::drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, Col S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y; + //A couple of checks to determine if color blend //A couple of checks to determine if color blend if(c1 == colorWhite && c3 == colorAlpha && c4 == colorBlack) { //Color - PrimBuild::begin(GFXTriangleFan, 4); + PrimBuild::begin(GFXTriangleStrip, 4); + PrimBuild::color( c2 ); - PrimBuild::vertex2i( r, t ); + PrimBuild::vertex2i(l, t); PrimBuild::color( c2 ); - PrimBuild::vertex2i( r, b ); + PrimBuild::vertex2i(r, t); PrimBuild::color( c2 ); PrimBuild::vertex2i( l, b ); PrimBuild::color( c2 ); - PrimBuild::vertex2i( l, t ); + PrimBuild::vertex2i(r, b); + PrimBuild::end(); //White - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color( colorAlphaW ); - PrimBuild::vertex2i( r, t ); + PrimBuild::begin(GFXTriangleStrip, 4); + + PrimBuild::color(c1); + PrimBuild::vertex2i(l, t); PrimBuild::color( colorAlphaW ); - PrimBuild::vertex2i( r, b ); + PrimBuild::vertex2i(r, t); PrimBuild::color( c1 ); PrimBuild::vertex2i( l, b ); - PrimBuild::color( c1 ); - PrimBuild::vertex2i( l, t ); + PrimBuild::color(colorAlphaW); + PrimBuild::vertex2i(r, b); + PrimBuild::end(); - //Black - PrimBuild::begin( GFXTriangleFan, 4 ); + //Black + PrimBuild::begin(GFXTriangleStrip, 4); + + PrimBuild::color(c3); + PrimBuild::vertex2i(l, t); PrimBuild::color( c3 ); PrimBuild::vertex2i( r, t ); PrimBuild::color( c4 ); - PrimBuild::vertex2i( r, b ); + PrimBuild::vertex2i(l, b); PrimBuild::color( c4 ); - PrimBuild::vertex2i( l, b ); + PrimBuild::vertex2i(r, b); - PrimBuild::color( c3 ); - PrimBuild::vertex2i( l, t ); PrimBuild::end(); } else { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin(GFXTriangleStrip, 4); + PrimBuild::color( c1 ); PrimBuild::vertex2i( l, t ); PrimBuild::color( c2 ); PrimBuild::vertex2i( r, t ); + PrimBuild::color(c4); + PrimBuild::vertex2i(l, b); + PrimBuild::color( c3 ); PrimBuild::vertex2i( r, b ); - PrimBuild::color( c4 ); - PrimBuild::vertex2i( l, b ); PrimBuild::end(); } } @@ -191,45 +199,48 @@ void GuiColorPickerCtrl::drawBlendBox(RectI &bounds, ColorF &c1, ColorF &c2, Col /// Function to draw a set of boxes blending throughout an array of colors void GuiColorPickerCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, U8 numColors, ColorI *colors) { - GFX->setStateBlock(mStateBlock); - + S32 l = bounds.point.x, r = bounds.point.x + bounds.extent.x + 4; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y + 4; - + // Calculate increment value - S32 x_inc = int(mFloor((r - l) / F32(numColors-1))); - S32 y_inc = int(mFloor((b - t) / F32(numColors-1))); + S32 x_inc = int(mFloor((r - l) / F32(numColors - 1))); + S32 y_inc = int(mFloor((b - t) / F32(numColors - 1))); - for( U16 i = 0;i < numColors - 1; i++ ) + for (U16 i = 0; i < numColors - 1; i++) { // This is not efficent, but then again it doesn't really need to be. -pw - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin(GFXTriangleStrip, 4); if (!vertical) // Horizontal (+x) { // First color - PrimBuild::color( colors[i] ); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( l, b ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(l, t); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(l + x_inc, t); // Second color - PrimBuild::color( colors[i+1] ); - PrimBuild::vertex2i( l + x_inc, b ); - PrimBuild::vertex2i( l + x_inc, t ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(l, b); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(l + x_inc, b); l += x_inc; } else // Vertical (+y) { // First color - PrimBuild::color( colors[i] ); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( r, t ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(l, t); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(l, t + y_inc); // Second color - PrimBuild::color( colors[i+1] ); - PrimBuild::vertex2i( r, t + y_inc ); - PrimBuild::vertex2i( l, t + y_inc ); + PrimBuild::color(colors[i]); + PrimBuild::vertex2i(r, t); + PrimBuild::color(colors[i + 1]); + PrimBuild::vertex2i(r, t + y_inc); t += y_inc; } PrimBuild::end(); From 7bba3ee2de610c2757bc70eba10db869bab72a85 Mon Sep 17 00:00:00 2001 From: Anis Date: Fri, 4 Mar 2016 22:51:09 +0100 Subject: [PATCH 148/324] pushed a forgotten feature on OpenGL terrrain. added this: https://github.com/GarageGames/Torque3D/commit/69f2efab8f86718914b3bbe5f6f6789be87b6c60 on OpenGL --- Engine/source/terrain/glsl/terrFeatureGLSL.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp index b9105cdd24..7761a8545d 100644 --- a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp +++ b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp @@ -624,8 +624,8 @@ void TerrainDetailMapFeatGLSL::processPix( Vector &component meta->addStatement( new GenOp( " @ *= @.y * @.w;\r\n", detailColor, detailInfo, inDet ) ); - meta->addStatement( new GenOp( " @ = lerp( @, @ + @, @ );\r\n", - outColor, outColor, baseColor, detailColor, detailBlend ) ); + meta->addStatement( new GenOp( " @ += @ * @;\r\n", + outColor, detailColor, detailBlend)); meta->addStatement( new GenOp( " }\r\n" ) ); @@ -824,7 +824,7 @@ void TerrainMacroMapFeatGLSL::processPix( Vector &componentL } // Add to the blend total. - meta->addStatement( new GenOp( " @ = max( @, @ );\r\n", blendTotal, blendTotal, detailBlend ) ); + meta->addStatement( new GenOp( " @ += @;\r\n", blendTotal, detailBlend ) ); Var *detailColor = (Var*)LangElement::find( "macroColor" ); if ( !detailColor ) @@ -877,8 +877,8 @@ void TerrainMacroMapFeatGLSL::processPix( Vector &componentL Var *outColor = (Var*)LangElement::find( getOutputTargetVarName(target) ); - meta->addStatement( new GenOp( " @ = lerp( @, @ + @, @ );\r\n", - outColor, outColor, outColor, detailColor, detailBlend ) ); + meta->addStatement(new GenOp(" @ += @ * @;\r\n", + outColor, detailColor, detailBlend)); meta->addStatement( new GenOp( " }\r\n" ) ); From 76228f2d0c789f740251c98d946c22e24cc3c8b4 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 9 Mar 2016 20:02:39 -0600 Subject: [PATCH 149/324] alpha masking for buttons. original attribution @dottools --- .../gui/buttons/guiBitmapButtonCtrl.cpp | 41 +++++++++++++++++++ .../source/gui/buttons/guiBitmapButtonCtrl.h | 4 ++ 2 files changed, 45 insertions(+) diff --git a/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp b/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp index ce95475f2e..29d81231fd 100644 --- a/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp +++ b/Engine/source/gui/buttons/guiBitmapButtonCtrl.cpp @@ -124,6 +124,7 @@ GuiBitmapButtonCtrl::GuiBitmapButtonCtrl() mUseModifiers = false; mUseStates = true; setExtent( 140, 30 ); + mMasked = false; } //----------------------------------------------------------------------------- @@ -157,6 +158,7 @@ void GuiBitmapButtonCtrl::initPersistFields() "Defaults to true.\n\n" "If you do not use per-state images on this button set this to false to speed up the loading process " "by inhibiting searches for the individual images." ); + addField("masked", TypeBool, Offset(mMasked, GuiBitmapButtonCtrl),"Use alpha masking for interaction."); endGroup( "Bitmap" ); @@ -551,3 +553,42 @@ void GuiBitmapButtonTextCtrl::renderButton( GFXTexHandle &texture, const Point2I GFX->getDrawUtil()->setBitmapModulation( mProfile->mFontColor ); renderJustifiedText(textPos, getExtent(), mButtonText); } + +bool GuiBitmapButtonCtrl::pointInControl(const Point2I& parentCoordPoint) +{ + if (mMasked && getTextureForCurrentState()) + { + ColorI rColor(0, 0, 0, 0); + GBitmap* bmp; + + const RectI &bounds = getBounds(); + S32 xt = parentCoordPoint.x - bounds.point.x; + S32 yt = parentCoordPoint.y - bounds.point.y; + + bmp = getTextureForCurrentState().getBitmap(); + if (!bmp) + { + setBitmap(mBitmapName); + bmp = getTextureForCurrentState().getBitmap(); + } + + S32 relativeXRange = this->getExtent().x; + S32 relativeYRange = this->getExtent().y; + S32 fileXRange = bmp->getHeight(0); + S32 fileYRange = bmp->getWidth(0); + //Con::errorf("xRange:[%i -- %i], Range:[%i -- %i] pos:(%i,%i)",relativeXRange,fileXRange,relativeYRange,fileYRange,xt,yt); + + S32 fileX = (xt*fileXRange) / relativeXRange; + S32 fileY = (yt*fileYRange) / relativeYRange; + //Con::errorf("Checking %s @ (%i,%i)",this->getName(),fileX,fileY); + + bmp->getColor(fileX, fileY, rColor); + + if (rColor.alpha) + return true; + else + return false; + } + else + return Parent::pointInControl(parentCoordPoint); +} \ No newline at end of file diff --git a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h index c42b4f3f45..2a9d464e7e 100644 --- a/Engine/source/gui/buttons/guiBitmapButtonCtrl.h +++ b/Engine/source/gui/buttons/guiBitmapButtonCtrl.h @@ -113,6 +113,9 @@ class GuiBitmapButtonCtrl : public GuiButtonCtrl /// File name for bitmap. String mBitmapName; + /// alpha masking + bool mMasked; + /// Textures mTextures[ NumModifiers ]; @@ -163,6 +166,7 @@ class GuiBitmapButtonCtrl : public GuiButtonCtrl virtual void onRender(Point2I offset, const RectI &updateRect); static void initPersistFields(); + bool pointInControl(const Point2I& parentCoordPoint); DECLARE_CONOBJECT(GuiBitmapButtonCtrl); DECLARE_DESCRIPTION( "A button control rendered entirely from bitmaps.\n" From 4b983cf23e36d04dde0fcdc676704f33759711f6 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 11 Mar 2016 23:36:00 -0600 Subject: [PATCH 150/324] exposes several datablock entries to the particle editor gui subsystem windCoefficient, animateTexture, framesPerSec, animTexFrames*, animTexTiling *at time of writing, it will read and write this entry to disk, but will not update in realtime. --- .../particleEditor/ParticleEditor.ed.gui | 191 ++++++++++++++++++ .../particleParticleEditor.ed.cs | 14 ++ 2 files changed, 205 insertions(+) diff --git a/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui b/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui index 3ec447504f..5d337b80f6 100644 --- a/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui +++ b/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui @@ -2343,6 +2343,52 @@ $PE_guielement_ext_colorpicker = "18 18"; Extent = $PE_guielement_ext_value; altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"dragCoefficient\", $ThisControl.getText());"; }; + }; //End Particle Drag + new GuiControl(){ // Particle Wind + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container ; + Extent = $PE_guielement_ext_single_container ; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "Wind Coeff"; + }; + new GuiSliderCtrl(PEP_windCoefficient) { + internalName = "PEP_windCoefficient_slider"; + canSaveDynamicFields = "0"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiSliderProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_slider; + Extent = $PE_guielement_ext_slider; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "PE_ParticleEditor.updateParticle( \"windCoefficient\", $ThisControl.getValue(), true, true );"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"windCoefficient\", $ThisControl.getValue(), true, false );"; + hovertime = "1000"; + range = "0 1"; + ticks = "0"; + value = "0.298143"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_windCoefficient_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_value; + Extent = $PE_guielement_ext_value; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"windCoefficient\", $ThisControl.getText());"; + }; }; }; // end stack }; // end "motion" rollout @@ -2548,6 +2594,151 @@ $PE_guielement_ext_colorpicker = "18 18"; }; }; // end stack }; // end "Spin" rollout + new GuiRolloutCtrl() { + class = "BehaviorQuickEditRollout"; + superclass = LBQuickEditRollout; + Profile = "GuiRolloutProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = "0 0"; + Extent = "197 0"; + Caption = "Animation"; + Margin = "4 4 4 0"; + DragSizable = false; + container = true; + parentRollout = %this.rollout; + object = %behavior; + + new GuiStackControl() { + StackingType = "Vertical"; + HorizStacking = "Left to Right"; + VertStacking = "Top to Bottom"; + Padding = "0"; + canSaveDynamicFields = "0"; + Enabled = "1"; + isContainer = "1"; + Profile = "ToolsGuiDefaultProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = "1 3"; + Extent = "197 16"; + MinExtent = "16 16"; + canSave = "1"; + isDecoy = "0"; + Visible = "1"; + tooltipprofile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + + new GuiCheckBoxCtrl() { + internalName = "PEP_animateTexture"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = "55 14"; + Extent = "84 18"; + MinExtent = "8 2"; + text = "Animate Texture"; + command = "PE_ParticleEditor.updateParticle( \"animateTexture\", $ThisControl.getValue());"; + }; + new GuiControl(){ // Particle framesPerSec + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container ; + Extent = $PE_guielement_ext_single_container ; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "framesPerSec"; + }; + new GuiSliderCtrl(PEP_framesPerSec) { + internalName = "PEP_framesPerSec_slider"; + canSaveDynamicFields = "0"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiSliderProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_slider; + Extent = $PE_guielement_ext_slider; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + range = "0 60"; + ticks = "0"; + value = "0"; + Command = "PE_ParticleEditor.updateParticle( \"framesPerSec\", $ThisControl.getValue(), true, true );"; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"framesPerSec\", $ThisControl.getValue(), true, false );"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_framesPerSec_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_value; + Extent = $PE_guielement_ext_value; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"framesPerSec\", $ThisControl.getText());"; + }; + }; // end framesPerSec + new GuiControl(){ // Particle animTexFramesList + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container; + Extent = $PE_guielement_ext_single_container; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "animTexFrames"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_animTexFramesList_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_textedit; + Extent = $PE_guielement_ext_textedit; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"animTexFrames\", $ThisControl.getText());"; + }; + }; // end animTexFramesList + new GuiControl(){ // Particle animTileCount + class = "AggregateControl"; + isContainer = "1"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = $PE_guielement_pos_single_container; + Extent = $PE_guielement_ext_single_container; + + new GuiTextCtrl() { + Profile = "ToolsGuiTextProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = $PE_guielement_pos_name; + Extent = $PE_guielement_ext_name; + text = "TileCount (X Y)"; + }; + new GuiTextEditCtrl() { + internalName = "PEP_animTileCount_textEdit"; + Profile = "ToolsGuiTextEditProfile"; + HorizSizing = "left"; + VertSizing = "bottom"; + position = $PE_guielement_pos_value; + Extent = $PE_guielement_ext_value; + altCommand = "$ThisControl.getParent().updateFromChild($ThisControl); PE_ParticleEditor.updateParticle( \"animTexTiling\", $ThisControl.getText());"; + }; + }; // end animTileCount + }; // end stack + }; // end "Anim" rollout new GuiRolloutCtrl() { class = "BehaviorQuickEditRollout"; superclass = LBQuickEditRollout; diff --git a/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs b/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs index 373e69de3a..00a27e5d43 100644 --- a/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs +++ b/Templates/Full/game/tools/particleEditor/particleParticleEditor.ed.cs @@ -91,6 +91,9 @@ PE_ParticleEditor-->PEP_dragCoefficient_slider.setValue( %data.dragCoefficient ); PE_ParticleEditor-->PEP_dragCoefficient_textEdit.setText( %data.dragCoefficient ); + PE_ParticleEditor-->PEP_windCoefficient_slider.setValue( %data.windCoefficient ); + PE_ParticleEditor-->PEP_windCoefficient_textEdit.setText( %data.windCoefficient ); + PE_ParticleEditor-->PEP_spinRandomMin_slider.setValue( %data.spinRandomMin ); PE_ParticleEditor-->PEP_spinRandomMin_textEdit.setText( %data.spinRandomMin ); @@ -131,6 +134,17 @@ PE_ParticleEditor-->PEP_pointTime_slider3.setValue( %data.times[ 3 ] ); PE_ParticleEditor-->PEP_pointTime_textEdit3.setText( %data.times[ 3 ] ); + + //particle animation + PE_ParticleEditor-->PEP_animateTexture.setValue( %data.animateTexture ); + + PE_ParticleEditor-->PEP_framesPerSec_slider.setValue( %data.framesPerSec ); + PE_ParticleEditor-->PEP_framesPerSec_textEdit.setText( %data.framesPerSec ); + + PE_ParticleEditor-->PEP_animTexFramesList_textEdit.setText( %data.animTexFrames ); + + PE_ParticleEditor-->PEP_animTileCount_textEdit.setText( %data.animTexTiling ); + } //--------------------------------------------------------------------------------------------- From cc618ce2e092f139aef6bee1fd5f50b999a204eb Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 15 Mar 2016 18:04:11 -0500 Subject: [PATCH 151/324] new method: ResetGFX(); exposes the GFX->beginReset(); method to script to allow folks to force the gbuffer to reinitialize (if, say a custom element is holding on to data in a buffer and it needs a cleaning, to name one example) --- Engine/source/gfx/gfxDevice.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Engine/source/gfx/gfxDevice.cpp b/Engine/source/gfx/gfxDevice.cpp index 3f63fb884a..24cde0bcf6 100644 --- a/Engine/source/gfx/gfxDevice.cpp +++ b/Engine/source/gfx/gfxDevice.cpp @@ -1329,3 +1329,8 @@ DefineEngineFunction( getBestHDRFormat, GFXFormat, (),, return format; } + +DefineConsoleFunction(ResetGFX, void, (), , "") +{ + GFX->beginReset(); +} \ No newline at end of file From 067caec4a4223a9fcc211de696295f1962a5f054 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 15 Mar 2016 19:19:12 -0500 Subject: [PATCH 152/324] docstring. do note best practices is to internally trigger this kind of thing, but this way folks have a test-case to see if that is in fact the flaw for their derivatives. --- Engine/source/gfx/gfxDevice.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/gfx/gfxDevice.cpp b/Engine/source/gfx/gfxDevice.cpp index 24cde0bcf6..08e14f12f1 100644 --- a/Engine/source/gfx/gfxDevice.cpp +++ b/Engine/source/gfx/gfxDevice.cpp @@ -1330,7 +1330,7 @@ DefineEngineFunction( getBestHDRFormat, GFXFormat, (),, return format; } -DefineConsoleFunction(ResetGFX, void, (), , "") +DefineConsoleFunction(ResetGFX, void, (), , "forces the gbuffer to be reinitialized in cases of improper/lack of buffer clears.") { GFX->beginReset(); } \ No newline at end of file From fd961db2151fef23a314b67d3adad68bf1a5cbba Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 15 Mar 2016 22:33:32 -0500 Subject: [PATCH 153/324] should actually let HDR have a say for glows. --- Engine/source/renderInstance/renderGlowMgr.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Engine/source/renderInstance/renderGlowMgr.cpp b/Engine/source/renderInstance/renderGlowMgr.cpp index 14e6ce0164..a5c31c5d62 100644 --- a/Engine/source/renderInstance/renderGlowMgr.cpp +++ b/Engine/source/renderInstance/renderGlowMgr.cpp @@ -78,7 +78,6 @@ void RenderGlowMgr::GlowMaterialHook::_overrideFeatures( ProcessedMaterial *mat, // Don't allow fog or HDR encoding on // the glow materials. fd.features.removeFeature( MFT_Fog ); - fd.features.removeFeature( MFT_HDROut ); fd.features.addFeature( MFT_Imposter ); } From 74e3ee52143c643f92cb291f3d509fbb64a38f91 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 16 Mar 2016 00:45:57 -0500 Subject: [PATCH 154/324] turns out independent sized render targets was causing lighting artifacting. --- Engine/source/renderInstance/renderPrePassMgr.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Engine/source/renderInstance/renderPrePassMgr.cpp b/Engine/source/renderInstance/renderPrePassMgr.cpp index 4f08dc6ea1..32d5204b21 100644 --- a/Engine/source/renderInstance/renderPrePassMgr.cpp +++ b/Engine/source/renderInstance/renderPrePassMgr.cpp @@ -153,11 +153,14 @@ bool RenderPrePassMgr::_updateTargets() } GFXFormat colorFormat = mTargetFormat; + + /* bool independentMrtBitDepth = GFX->getCardProfiler()->queryProfile("independentMrtBitDepth", false); //If independent bit depth on a MRT is supported than just use 8bit channels for the albedo color. if(independentMrtBitDepth) colorFormat = GFXFormatR8G8B8A8; - + */ + // andrewmac: Deferred Shading Color Buffer if (mColorTex.getFormat() != colorFormat || mColorTex.getWidthHeight() != mTargetSize || GFX->recentlyReset()) { From ed264e4e12909c417f450014ac699b4813fcfaec Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 16 Mar 2016 18:10:07 -0500 Subject: [PATCH 155/324] from @rextimmy automatically adds a sky feature to skies. (render sorting and orientation. previously required setting in script.) --- Engine/source/environment/skyBox.cpp | 1 + Engine/source/materials/materialFeatureTypes.cpp | 2 +- Engine/source/materials/processedShaderMaterial.cpp | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Engine/source/environment/skyBox.cpp b/Engine/source/environment/skyBox.cpp index 83c9bb6e79..00d0a6b4d7 100644 --- a/Engine/source/environment/skyBox.cpp +++ b/Engine/source/environment/skyBox.cpp @@ -608,6 +608,7 @@ void SkyBox::_initMaterial() FeatureSet features = MATMGR->getDefaultFeatures(); features.removeFeature( MFT_RTLighting ); features.removeFeature( MFT_Visibility ); + features.addFeature(MFT_SkyBox); // Now initialize the material. mMatInstance->init(features, getGFXVertexFormat()); diff --git a/Engine/source/materials/materialFeatureTypes.cpp b/Engine/source/materials/materialFeatureTypes.cpp index 8ea7fbe8c7..85fbd2895b 100644 --- a/Engine/source/materials/materialFeatureTypes.cpp +++ b/Engine/source/materials/materialFeatureTypes.cpp @@ -97,7 +97,7 @@ ImplementFeatureType( MFT_ImposterVert, MFG_PreTransform, 1.0, false ); // Deferred Shading ImplementFeatureType( MFT_isDeferred, U32(-1), -1, true ); -ImplementFeatureType( MFT_SkyBox, MFG_Transform, 1.0f, true ); +ImplementFeatureType( MFT_SkyBox, MFG_Transform, 1.0f, false ); ImplementFeatureType( MFT_DeferredEmptySpec, MFG_Texture, 8.01f, false ); ImplementFeatureType( MFT_DeferredSpecMap, MFG_Texture, 8.2f, false ); diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 37f7452537..7d0e965fa0 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -341,7 +341,7 @@ void ProcessedShaderMaterial::_determineFeatures( U32 stageNum, fd.features.addFeature( MFT_CubeMap ); } - if (mMaterial->mIsSky) + if (features.hasFeature(MFT_SkyBox)) { fd.features.addFeature(MFT_CubeMap); fd.features.addFeature(MFT_SkyBox); From 7f4bfad10a11e6b9bf8a3813a30cb1e77e34ae4f Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 16 Mar 2016 23:54:47 -0500 Subject: [PATCH 156/324] fix for broken caustics reference --- Templates/Full/game/core/scripts/client/postFx/caustics.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Templates/Full/game/core/scripts/client/postFx/caustics.cs b/Templates/Full/game/core/scripts/client/postFx/caustics.cs index 11fda80836..a712ef82a5 100644 --- a/Templates/Full/game/core/scripts/client/postFx/caustics.cs +++ b/Templates/Full/game/core/scripts/client/postFx/caustics.cs @@ -38,7 +38,7 @@ singleton ShaderData( PFX_CausticsShader ) DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; DXPixelShaderFile = "shaders/common/postFx/caustics/causticsP.hlsl"; - OGLVertexShaderFile = "shaders/common/postFx/gl//postFxV.glsl"; + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/postFx/caustics/gl/causticsP.glsl"; samplerNames[0] = "$prepassTex"; From 47b68f482e5992b0ecc9353c877e5b08eec1112b Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Fri, 18 Mar 2016 00:35:37 -0400 Subject: [PATCH 157/324] This commits adds the testSpacials() and setSpacials() functions to test for overlaps and update the controllers capsule dimensions when the player pose changes. --- .../source/T3D/physics/physx3/px3Player.cpp | 30 +++++++++++++++++++ Engine/source/T3D/physics/physx3/px3Player.h | 4 +-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/physics/physx3/px3Player.cpp b/Engine/source/T3D/physics/physx3/px3Player.cpp index e831c939c4..10dc65e86c 100644 --- a/Engine/source/T3D/physics/physx3/px3Player.cpp +++ b/Engine/source/T3D/physics/physx3/px3Player.cpp @@ -329,3 +329,33 @@ Box3F Px3Player::getWorldBounds() return px3Cast( bounds ); } +bool Px3Player::testSpacials(const Point3F &nPos, const Point3F &nSize) const +{ + F32 offset = nSize.z * 0.5f; + F32 radius = getMax(nSize.x, nSize.y) * 0.5f - mSkinWidth; + F32 height = (nSize.z - (radius * 2.0f)) * 0.5f; + height -= mSkinWidth * 2.0f; + physx::PxCapsuleGeometry geom(radius, height); + + physx::PxVec3 pos(nPos.x, nPos.y, nPos.z + offset); + physx::PxQuat orientation(Float_HalfPi, physx::PxVec3(0.0f, 1.0f, 0.0f)); + + physx::PxOverlapBuffer hit; + physx::PxQueryFilterData queryFilter(physx::PxQueryFlag::eANY_HIT | physx::PxQueryFlag::eSTATIC | physx::PxQueryFlag::eDYNAMIC); + queryFilter.data.word0 = PX3_DEFAULT; + bool hasHit = mWorld->getScene()->overlap(geom, physx::PxTransform(pos, orientation), hit, queryFilter); + + return !hasHit; // Return true if there are no overlapping objects +} + +void Px3Player::setSpacials(const Point3F &nPos, const Point3F &nSize) +{ + mOriginOffset = nSize.z * 0.5f; + F32 radius = getMax(nSize.x, nSize.y) * 0.5f - mSkinWidth; + F32 height = nSize.z - (radius * 2.0f); + height -= mSkinWidth * 2.0f; + + mWorld->releaseWriteLock(); + mController->resize(height); + px3GetFirstShape(mController->getActor())->getCapsuleGeometry(mGeometry); +} \ No newline at end of file diff --git a/Engine/source/T3D/physics/physx3/px3Player.h b/Engine/source/T3D/physics/physx3/px3Player.h index 55a1409cdb..bd0546663e 100644 --- a/Engine/source/T3D/physics/physx3/px3Player.h +++ b/Engine/source/T3D/physics/physx3/px3Player.h @@ -94,8 +94,8 @@ class Px3Player : public PhysicsPlayer, public physx::PxUserControllerHitReport PhysicsWorld *world ); virtual Point3F move( const VectorF &displacement, CollisionList &outCol ); virtual void findContact( SceneObject **contactObject, VectorF *contactNormal, Vector *outOverlapObjects ) const; - virtual bool testSpacials( const Point3F &nPos, const Point3F &nSize ) const { return true; } - virtual void setSpacials( const Point3F &nPos, const Point3F &nSize ) {} + virtual bool testSpacials( const Point3F &nPos, const Point3F &nSize ) const; + virtual void setSpacials( const Point3F &nPos, const Point3F &nSize ); virtual void enableCollision(); virtual void disableCollision(); }; From 1ff6f221fb2a1963fadb48e786ec87d1a9c02fcd Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sun, 20 Mar 2016 21:48:52 +1000 Subject: [PATCH 158/324] Direct3D11 GFX device. --- .../source/gfx/D3D11/gfxD3D11CardProfiler.cpp | 72 + .../source/gfx/D3D11/gfxD3D11CardProfiler.h | 46 + Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp | 352 ++++ Engine/source/gfx/D3D11/gfxD3D11Cubemap.h | 80 + Engine/source/gfx/D3D11/gfxD3D11Device.cpp | 1721 +++++++++++++++++ Engine/source/gfx/D3D11/gfxD3D11Device.h | 295 +++ .../gfx/D3D11/gfxD3D11EnumTranslate.cpp | 155 ++ .../source/gfx/D3D11/gfxD3D11EnumTranslate.h | 51 + .../gfx/D3D11/gfxD3D11OcclusionQuery.cpp | 177 ++ .../source/gfx/D3D11/gfxD3D11OcclusionQuery.h | 58 + .../gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp | 222 +++ .../gfx/D3D11/gfxD3D11PrimitiveBuffer.h | 83 + .../source/gfx/D3D11/gfxD3D11QueryFence.cpp | 110 ++ Engine/source/gfx/D3D11/gfxD3D11QueryFence.h | 49 + Engine/source/gfx/D3D11/gfxD3D11Shader.cpp | 1542 +++++++++++++++ Engine/source/gfx/D3D11/gfxD3D11Shader.h | 471 +++++ .../source/gfx/D3D11/gfxD3D11StateBlock.cpp | 285 +++ Engine/source/gfx/D3D11/gfxD3D11StateBlock.h | 76 + Engine/source/gfx/D3D11/gfxD3D11Target.cpp | 409 ++++ Engine/source/gfx/D3D11/gfxD3D11Target.h | 110 ++ .../gfx/D3D11/gfxD3D11TextureManager.cpp | 587 ++++++ .../source/gfx/D3D11/gfxD3D11TextureManager.h | 62 + .../gfx/D3D11/gfxD3D11TextureObject.cpp | 280 +++ .../source/gfx/D3D11/gfxD3D11TextureObject.h | 89 + .../source/gfx/D3D11/gfxD3D11VertexBuffer.cpp | 233 +++ .../source/gfx/D3D11/gfxD3D11VertexBuffer.h | 95 + Engine/source/gfx/D3D11/screenshotD3D11.cpp | 98 + Engine/source/gfx/D3D11/screenshotD3D11.h | 39 + 28 files changed, 7847 insertions(+) create mode 100644 Engine/source/gfx/D3D11/gfxD3D11CardProfiler.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11CardProfiler.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Cubemap.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Device.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Device.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11QueryFence.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11QueryFence.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Shader.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Shader.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11StateBlock.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Target.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11Target.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11TextureManager.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11TextureManager.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11TextureObject.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11TextureObject.h create mode 100644 Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.cpp create mode 100644 Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.h create mode 100644 Engine/source/gfx/D3D11/screenshotD3D11.cpp create mode 100644 Engine/source/gfx/D3D11/screenshotD3D11.h diff --git a/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.cpp b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.cpp new file mode 100644 index 0000000000..14c37c63a6 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.cpp @@ -0,0 +1,72 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11CardProfiler.h" +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "platformWin32/videoInfo/wmiVideoInfo.h" +#include "console/console.h" +#include "gfx/primBuilder.h" + + +GFXD3D11CardProfiler::GFXD3D11CardProfiler() : GFXCardProfiler() +{ +} + +GFXD3D11CardProfiler::~GFXD3D11CardProfiler() +{ + +} + +void GFXD3D11CardProfiler::init() +{ + U32 adapterIndex = D3D11->getAdaterIndex(); + WMIVideoInfo wmiVidInfo; + if (wmiVidInfo.profileAdapters()) + { + const PlatformVideoInfo::PVIAdapter &adapter = wmiVidInfo.getAdapterInformation(adapterIndex); + + mCardDescription = adapter.description; + mChipSet = adapter.chipSet; + mVersionString = adapter.driverVersion; + mVideoMemory = adapter.vram; + } + Parent::init(); +} + +void GFXD3D11CardProfiler::setupCardCapabilities() +{ + setCapability("maxTextureWidth", D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION); + setCapability("maxTextureHeight", D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION); + setCapability("maxTextureSize", D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION); +} + +bool GFXD3D11CardProfiler::_queryCardCap(const String &query, U32 &foundResult) +{ + return false; +} + +bool GFXD3D11CardProfiler::_queryFormat( const GFXFormat fmt, const GFXTextureProfile *profile, bool &inOutAutogenMips ) +{ + // D3D11 feature level should guarantee that any format is valid! + return GFXD3D11TextureFormat[fmt] != DXGI_FORMAT_UNKNOWN; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.h b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.h new file mode 100644 index 0000000000..c264329282 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11CardProfiler.h @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11CARDPROFILER_H_ +#define _GFXD3D11CARDPROFILER_H_ + +#include "gfx/gfxCardProfile.h" + +class GFXD3D11CardProfiler : public GFXCardProfiler +{ +private: + typedef GFXCardProfiler Parent; + +public: + GFXD3D11CardProfiler(); + ~GFXD3D11CardProfiler(); + void init(); + +protected: + const String &getRendererString() const { static String sRS("Direct3D11"); return sRS; } + + void setupCardCapabilities(); + bool _queryCardCap(const String &query, U32 &foundResult); + bool _queryFormat(const GFXFormat fmt, const GFXTextureProfile *profile, bool &inOutAutogenMips); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp new file mode 100644 index 0000000000..281e7e786d --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.cpp @@ -0,0 +1,352 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11Cubemap.h" +#include "gfx/gfxCardProfile.h" +#include "gfx/gfxTextureManager.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" + +GFXD3D11Cubemap::GFXD3D11Cubemap() : mTexture(NULL), mSRView(NULL), mDSView(NULL) +{ + mDynamic = false; + mAutoGenMips = false; + mFaceFormat = GFXFormatR8G8B8A8; + + for (U32 i = 0; i < CubeFaces; i++) + { + mRTView[i] = NULL; + } +} + +GFXD3D11Cubemap::~GFXD3D11Cubemap() +{ + releaseSurfaces(); +} + +void GFXD3D11Cubemap::releaseSurfaces() +{ + if (mDynamic) + GFXTextureManager::removeEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent); + + for (U32 i = 0; i < CubeFaces; i++) + { + SAFE_RELEASE(mRTView[i]); + } + + SAFE_RELEASE(mDSView); + SAFE_RELEASE(mSRView); + SAFE_RELEASE(mTexture); +} + +void GFXD3D11Cubemap::_onTextureEvent(GFXTexCallbackCode code) +{ + if (code == GFXZombify) + releaseSurfaces(); + else if (code == GFXResurrect) + initDynamic(mTexSize); +} + +bool GFXD3D11Cubemap::isCompressed(GFXFormat format) +{ + if (format >= GFXFormatDXT1 && format <= GFXFormatDXT5) + return true; + + return false; +} + +void GFXD3D11Cubemap::initStatic(GFXTexHandle *faces) +{ + AssertFatal( faces, "GFXD3D11Cubemap::initStatic - Got null GFXTexHandle!" ); + AssertFatal( *faces, "empty texture passed to CubeMap::create" ); + + // NOTE - check tex sizes on all faces - they MUST be all same size + mTexSize = faces->getWidth(); + mFaceFormat = faces->getFormat(); + bool compressed = isCompressed(mFaceFormat); + + UINT bindFlags = D3D11_BIND_SHADER_RESOURCE; + UINT miscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE; + if (!compressed) + { + bindFlags |= D3D11_BIND_RENDER_TARGET; + miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; + } + + U32 mipLevels = faces->getPointer()->getMipLevels(); + if (mipLevels > 1) + mAutoGenMips = true; + + D3D11_TEXTURE2D_DESC desc; + ZeroMemory(&desc, sizeof(D3D11_TEXTURE2D_DESC)); + desc.Width = mTexSize; + desc.Height = mTexSize; + desc.MipLevels = mAutoGenMips ? 0 : mipLevels; + desc.ArraySize = 6; + desc.Format = GFXD3D11TextureFormat[mFaceFormat]; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.BindFlags = bindFlags; + desc.MiscFlags = miscFlags; + desc.CPUAccessFlags = 0; + + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture); + + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap:initStatic(GFXTexhandle *faces) - failed to create texcube texture"); + } + + for (U32 i = 0; i < CubeFaces; i++) + { + GFXD3D11TextureObject *texObj = static_cast((GFXTextureObject*)faces[i]); + U32 subResource = D3D11CalcSubresource(0, i, mipLevels); + D3D11DEVICECONTEXT->CopySubresourceRegion(mTexture, subResource, 0, 0, 0, texObj->get2DTex(), 0, NULL); + } + + D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc; + SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat]; + SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; + SMViewDesc.TextureCube.MipLevels = mAutoGenMips ? -1 : mipLevels; + SMViewDesc.TextureCube.MostDetailedMip = 0; + + hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView); + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initStatic(GFXTexHandle *faces) - texcube shader resource view creation failure"); + } + + if (mAutoGenMips && !compressed) + D3D11DEVICECONTEXT->GenerateMips(mSRView); +} + +void GFXD3D11Cubemap::initStatic(DDSFile *dds) +{ + AssertFatal(dds, "GFXD3D11Cubemap::initStatic - Got null DDS file!"); + AssertFatal(dds->isCubemap(), "GFXD3D11Cubemap::initStatic - Got non-cubemap DDS file!"); + AssertFatal(dds->mSurfaces.size() == 6, "GFXD3D11Cubemap::initStatic - DDS has less than 6 surfaces!"); + + // NOTE - check tex sizes on all faces - they MUST be all same size + mTexSize = dds->getWidth(); + mFaceFormat = dds->getFormat(); + U32 levels = dds->getMipLevels(); + + D3D11_TEXTURE2D_DESC desc; + + desc.Width = mTexSize; + desc.Height = mTexSize; + desc.MipLevels = levels; + desc.ArraySize = 6; + desc.Format = GFXD3D11TextureFormat[mFaceFormat]; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D11_USAGE_IMMUTABLE; + desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE | D3D11_RESOURCE_MISC_GENERATE_MIPS; + + D3D11_SUBRESOURCE_DATA* pData = new D3D11_SUBRESOURCE_DATA[6 + levels]; + + for (U32 i = 0; imSurfaces[i]) + continue; + + for(U32 j = 0; j < levels; j++) + { + pData[i + j].pSysMem = dds->mSurfaces[i]->mMips[j]; + pData[i + j].SysMemPitch = dds->getSurfacePitch(j); + pData[i + j].SysMemSlicePitch = dds->getSurfaceSize(j); + } + } + + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, pData, &mTexture); + + delete [] pData; + + D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc; + SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat]; + SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; + SMViewDesc.TextureCube.MipLevels = levels; + SMViewDesc.TextureCube.MostDetailedMip = 0; + + hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initStatic(DDSFile *dds) - CreateTexture2D call failure"); + } +} + +void GFXD3D11Cubemap::initDynamic(U32 texSize, GFXFormat faceFormat) +{ + if(!mDynamic) + GFXTextureManager::addEventDelegate(this, &GFXD3D11Cubemap::_onTextureEvent); + + mDynamic = true; + mAutoGenMips = true; + mTexSize = texSize; + mFaceFormat = faceFormat; + bool compressed = isCompressed(mFaceFormat); + + UINT bindFlags = D3D11_BIND_SHADER_RESOURCE; + UINT miscFlags = D3D11_RESOURCE_MISC_TEXTURECUBE; + if (!compressed) + { + bindFlags |= D3D11_BIND_RENDER_TARGET; + miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; + } + + D3D11_TEXTURE2D_DESC desc; + + desc.Width = mTexSize; + desc.Height = mTexSize; + desc.MipLevels = 0; + desc.ArraySize = 6; + desc.Format = GFXD3D11TextureFormat[mFaceFormat]; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = 0; + desc.MiscFlags = miscFlags; + + + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &mTexture); + + D3D11_SHADER_RESOURCE_VIEW_DESC SMViewDesc; + SMViewDesc.Format = GFXD3D11TextureFormat[mFaceFormat]; + SMViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURECUBE; + SMViewDesc.TextureCube.MipLevels = -1; + SMViewDesc.TextureCube.MostDetailedMip = 0; + + hr = D3D11DEVICE->CreateShaderResourceView(mTexture, &SMViewDesc, &mSRView); + + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D call failure"); + } + + D3D11_RENDER_TARGET_VIEW_DESC viewDesc; + viewDesc.Format = desc.Format; + viewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY; + viewDesc.Texture2DArray.ArraySize = 1; + viewDesc.Texture2DArray.MipSlice = 0; + + for (U32 i = 0; i < CubeFaces; i++) + { + viewDesc.Texture2DArray.FirstArraySlice = i; + hr = D3D11DEVICE->CreateRenderTargetView(mTexture, &viewDesc, &mRTView[i]); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateRenderTargetView call failure"); + } + } + + D3D11_TEXTURE2D_DESC depthTexDesc; + depthTexDesc.Width = mTexSize; + depthTexDesc.Height = mTexSize; + depthTexDesc.MipLevels = 1; + depthTexDesc.ArraySize = 1; + depthTexDesc.SampleDesc.Count = 1; + depthTexDesc.SampleDesc.Quality = 0; + depthTexDesc.Format = DXGI_FORMAT_D32_FLOAT; + depthTexDesc.Usage = D3D11_USAGE_DEFAULT; + depthTexDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; + depthTexDesc.CPUAccessFlags = 0; + depthTexDesc.MiscFlags = 0; + + ID3D11Texture2D* depthTex = 0; + hr = D3D11DEVICE->CreateTexture2D(&depthTexDesc, 0, &depthTex); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateTexture2D for depth stencil call failure"); + } + + // Create the depth stencil view for the entire cube + D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc; + dsvDesc.Format = depthTexDesc.Format; //The format must match the depth texture we created above + dsvDesc.Flags = 0; + dsvDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + dsvDesc.Texture2D.MipSlice = 0; + hr = D3D11DEVICE->CreateDepthStencilView(depthTex, &dsvDesc, &mDSView); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Cubemap::initDynamic - CreateDepthStencilView call failure"); + } + + SAFE_RELEASE(depthTex); + +} + +//----------------------------------------------------------------------------- +// Set the cubemap to the specified texture unit num +//----------------------------------------------------------------------------- +void GFXD3D11Cubemap::setToTexUnit(U32 tuNum) +{ + D3D11DEVICECONTEXT->PSSetShaderResources(tuNum, 1, &mSRView); +} + +void GFXD3D11Cubemap::zombify() +{ + // Static cubemaps are handled by D3D + if( mDynamic ) + releaseSurfaces(); +} + +void GFXD3D11Cubemap::resurrect() +{ + // Static cubemaps are handled by D3D + if( mDynamic ) + initDynamic( mTexSize, mFaceFormat ); +} + +ID3D11ShaderResourceView* GFXD3D11Cubemap::getSRView() +{ + return mSRView; +} + +ID3D11RenderTargetView* GFXD3D11Cubemap::getRTView(U32 faceIdx) +{ + AssertFatal(faceIdx < CubeFaces, "GFXD3D11Cubemap::getRTView - face index out of bounds"); + + return mRTView[faceIdx]; +} + +ID3D11RenderTargetView** GFXD3D11Cubemap::getRTViewArray() +{ + return mRTView; +} + +ID3D11DepthStencilView* GFXD3D11Cubemap::getDSView() +{ + return mDSView; +} + +ID3D11Texture2D* GFXD3D11Cubemap::get2DTex() +{ + return mTexture; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Cubemap.h b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.h new file mode 100644 index 0000000000..f24933d081 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Cubemap.h @@ -0,0 +1,80 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11CUBEMAP_H_ +#define _GFXD3D11CUBEMAP_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxCubemap.h" +#include "gfx/gfxResource.h" +#include "gfx/gfxTarget.h" + +const U32 CubeFaces = 6; + +class GFXD3D11Cubemap : public GFXCubemap +{ +public: + virtual void initStatic( GFXTexHandle *faces ); + virtual void initStatic( DDSFile *dds ); + virtual void initDynamic( U32 texSize, GFXFormat faceFormat = GFXFormatR8G8B8A8 ); + virtual void setToTexUnit( U32 tuNum ); + virtual U32 getSize() const { return mTexSize; } + virtual GFXFormat getFormat() const { return mFaceFormat; } + + GFXD3D11Cubemap(); + virtual ~GFXD3D11Cubemap(); + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); + + // Get functions + ID3D11ShaderResourceView* getSRView(); + ID3D11RenderTargetView* getRTView(U32 faceIdx); + ID3D11RenderTargetView** getRTViewArray(); + ID3D11DepthStencilView* getDSView(); + ID3D11Texture2D* get2DTex(); + +private: + + friend class GFXD3D11TextureTarget; + friend class GFXD3D11Device; + + ID3D11Texture2D* mTexture; + ID3D11ShaderResourceView* mSRView; // for shader resource input + ID3D11RenderTargetView* mRTView[CubeFaces]; // for render targets, 6 faces of the cubemap + ID3D11DepthStencilView* mDSView; //render target view for depth stencil + + bool mAutoGenMips; + bool mDynamic; + U32 mTexSize; + GFXFormat mFaceFormat; + + void releaseSurfaces(); + + bool isCompressed(GFXFormat format); + /// The callback used to get texture events. + /// @see GFXTextureManager::addEventDelegate + void _onTextureEvent(GFXTexCallbackCode code); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11Device.cpp b/Engine/source/gfx/D3D11/gfxD3D11Device.cpp new file mode 100644 index 0000000000..e38ff546ce --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Device.cpp @@ -0,0 +1,1721 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "console/console.h" +#include "core/stream/fileStream.h" +#include "core/strings/unicode.h" +#include "core/util/journal/process.h" +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11CardProfiler.h" +#include "gfx/D3D11/gfxD3D11VertexBuffer.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/D3D11/gfxD3D11QueryFence.h" +#include "gfx/D3D11/gfxD3D11OcclusionQuery.h" +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "gfx/D3D11/gfxD3D11Target.h" +#include "platformWin32/platformWin32.h" +#include "windowManager/win32/win32Window.h" +#include "windowManager/platformWindow.h" +#include "gfx/D3D11/screenshotD3D11.h" +#include "materials/shaderData.h" + +#ifdef TORQUE_DEBUG +#include "d3d11sdklayers.h" +#endif + +#pragma comment(lib, "dxgi.lib") +#pragma comment(lib, "d3d11.lib") + +GFXAdapter::CreateDeviceInstanceDelegate GFXD3D11Device::mCreateDeviceInstance(GFXD3D11Device::createInstance); + +GFXDevice *GFXD3D11Device::createInstance(U32 adapterIndex) +{ + GFXD3D11Device* dev = new GFXD3D11Device(adapterIndex); + return dev; +} + +GFXFormat GFXD3D11Device::selectSupportedFormat(GFXTextureProfile *profile, const Vector &formats, bool texture, bool mustblend, bool mustfilter) +{ + U32 features = 0; + if(texture) + features |= D3D11_FORMAT_SUPPORT_TEXTURE2D; + if(mustblend) + features |= D3D11_FORMAT_SUPPORT_BLENDABLE; + if(mustfilter) + features |= D3D11_FORMAT_SUPPORT_SHADER_SAMPLE; + + for(U32 i = 0; i < formats.size(); i++) + { + if(GFXD3D11TextureFormat[formats[i]] == DXGI_FORMAT_UNKNOWN) + continue; + + U32 supportFlag = 0; + mD3DDevice->CheckFormatSupport(GFXD3D11TextureFormat[formats[i]],&supportFlag); + if(supportFlag & features) + return formats[i]; + } + + return GFXFormatR8G8B8A8; +} + +DXGI_SWAP_CHAIN_DESC GFXD3D11Device::setupPresentParams(const GFXVideoMode &mode, const HWND &hwnd) +{ + DXGI_SWAP_CHAIN_DESC d3dpp; + ZeroMemory(&d3dpp, sizeof(d3dpp)); + + DXGI_SAMPLE_DESC sampleDesc; + sampleDesc.Count = 1; + sampleDesc.Quality = 0; + + mMultisampleDesc = sampleDesc; + + d3dpp.BufferCount = !smDisableVSync ? 2 : 1; // triple buffering when vsync is on. + d3dpp.BufferDesc.Width = mode.resolution.x; + d3dpp.BufferDesc.Height = mode.resolution.y; + d3dpp.BufferDesc.Format = GFXD3D11TextureFormat[GFXFormatR8G8B8A8]; + d3dpp.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + d3dpp.OutputWindow = hwnd; + d3dpp.SampleDesc = sampleDesc; + d3dpp.Windowed = !mode.fullScreen; + d3dpp.BufferDesc.RefreshRate.Numerator = mode.refreshRate; + d3dpp.BufferDesc.RefreshRate.Denominator = 1; + d3dpp.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; + + if (mode.fullScreen) + { + d3dpp.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; + d3dpp.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; + d3dpp.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; + } + + return d3dpp; +} + +void GFXD3D11Device::enumerateAdapters(Vector &adapterList) +{ + IDXGIAdapter1* EnumAdapter; + IDXGIFactory1* DXGIFactory; + + CreateDXGIFactory1(__uuidof(IDXGIFactory1), reinterpret_cast(&DXGIFactory)); + + for(U32 adapterIndex = 0; DXGIFactory->EnumAdapters1(adapterIndex, &EnumAdapter) != DXGI_ERROR_NOT_FOUND; ++adapterIndex) + { + GFXAdapter *toAdd = new GFXAdapter; + toAdd->mType = Direct3D11; + toAdd->mIndex = adapterIndex; + toAdd->mCreateDeviceInstanceDelegate = mCreateDeviceInstance; + + toAdd->mShaderModel = 5.0f; + DXGI_ADAPTER_DESC1 desc; + EnumAdapter->GetDesc1(&desc); + + size_t size=wcslen(desc.Description); + char *str = new char[size+1]; + + wcstombs(str, desc.Description,size); + str[size]='\0'; + String Description=str; + SAFE_DELETE_ARRAY(str); + + dStrncpy(toAdd->mName, Description.c_str(), GFXAdapter::MaxAdapterNameLen); + dStrncat(toAdd->mName, " (D3D11)", GFXAdapter::MaxAdapterNameLen); + + IDXGIOutput* pOutput = NULL; + HRESULT hr; + + hr = EnumAdapter->EnumOutputs(adapterIndex, &pOutput); + + if(hr == DXGI_ERROR_NOT_FOUND) + { + SAFE_RELEASE(EnumAdapter); + break; + } + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateAdapters -> EnumOutputs call failure"); + + UINT numModes = 0; + DXGI_MODE_DESC* displayModes = NULL; + DXGI_FORMAT format = DXGI_FORMAT_B8G8R8A8_UNORM; + + // Get the number of elements + hr = pOutput->GetDisplayModeList(format, 0, &numModes, NULL); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateAdapters -> GetDisplayModeList call failure"); + + displayModes = new DXGI_MODE_DESC[numModes]; + + // Get the list + hr = pOutput->GetDisplayModeList(format, 0, &numModes, displayModes); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateAdapters -> GetDisplayModeList call failure"); + + for(U32 numMode = 0; numMode < numModes; ++numMode) + { + GFXVideoMode vmAdd; + + vmAdd.fullScreen = true; + vmAdd.bitDepth = 32; + vmAdd.refreshRate = displayModes[numMode].RefreshRate.Numerator / displayModes[numMode].RefreshRate.Denominator; + vmAdd.resolution.x = displayModes[numMode].Width; + vmAdd.resolution.y = displayModes[numMode].Height; + toAdd->mAvailableModes.push_back(vmAdd); + } + + delete[] displayModes; + SAFE_RELEASE(pOutput); + SAFE_RELEASE(EnumAdapter); + adapterList.push_back(toAdd); + } + + SAFE_RELEASE(DXGIFactory); +} + +void GFXD3D11Device::enumerateVideoModes() +{ + mVideoModes.clear(); + + IDXGIAdapter1* EnumAdapter; + IDXGIFactory1* DXGIFactory; + HRESULT hr; + + hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), reinterpret_cast(&DXGIFactory)); + + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> CreateDXGIFactory1 call failure"); + + for(U32 adapterIndex = 0; DXGIFactory->EnumAdapters1(adapterIndex, &EnumAdapter) != DXGI_ERROR_NOT_FOUND; ++adapterIndex) + { + IDXGIOutput* pOutput = NULL; + + hr = EnumAdapter->EnumOutputs(adapterIndex, &pOutput); + + if(hr == DXGI_ERROR_NOT_FOUND) + { + SAFE_RELEASE(EnumAdapter); + break; + } + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> EnumOutputs call failure"); + + UINT numModes = 0; + DXGI_MODE_DESC* displayModes = NULL; + DXGI_FORMAT format = GFXD3D11TextureFormat[GFXFormatR8G8B8A8]; + + // Get the number of elements + hr = pOutput->GetDisplayModeList(format, 0, &numModes, NULL); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> GetDisplayModeList call failure"); + + displayModes = new DXGI_MODE_DESC[numModes]; + + // Get the list + hr = pOutput->GetDisplayModeList(format, 0, &numModes, displayModes); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::enumerateVideoModes -> GetDisplayModeList call failure"); + + for(U32 numMode = 0; numMode < numModes; ++numMode) + { + GFXVideoMode toAdd; + + toAdd.fullScreen = false; + toAdd.bitDepth = 32; + toAdd.refreshRate = displayModes[numMode].RefreshRate.Numerator / displayModes[numMode].RefreshRate.Denominator; + toAdd.resolution.x = displayModes[numMode].Width; + toAdd.resolution.y = displayModes[numMode].Height; + mVideoModes.push_back(toAdd); + } + + delete[] displayModes; + SAFE_RELEASE(pOutput); + SAFE_RELEASE(EnumAdapter); + } + + SAFE_RELEASE(DXGIFactory); +} + +IDXGISwapChain* GFXD3D11Device::getSwapChain() +{ + return mSwapChain; +} + +void GFXD3D11Device::init(const GFXVideoMode &mode, PlatformWindow *window) +{ + AssertFatal(window, "GFXD3D11Device::init - must specify a window!"); + + HWND winHwnd = (HWND)window->getSystemWindow( PlatformWindow::WindowSystem_Windows ); + + UINT createDeviceFlags = D3D11_CREATE_DEVICE_SINGLETHREADED | D3D11_CREATE_DEVICE_BGRA_SUPPORT; +#ifdef TORQUE_DEBUG + createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; + mDebugLayers = true; +#endif + + DXGI_SWAP_CHAIN_DESC d3dpp = setupPresentParams(mode, winHwnd); + + D3D_FEATURE_LEVEL deviceFeature; + D3D_DRIVER_TYPE driverType = D3D_DRIVER_TYPE_HARDWARE;// use D3D_DRIVER_TYPE_REFERENCE for reference device + // create a device, device context and swap chain using the information in the d3dpp struct + HRESULT hres = D3D11CreateDeviceAndSwapChain(NULL, + driverType, + NULL, + createDeviceFlags, + NULL, + 0, + D3D11_SDK_VERSION, + &d3dpp, + &mSwapChain, + &mD3DDevice, + &deviceFeature, + &mD3DDeviceContext); + + if(FAILED(hres)) + { + #ifdef TORQUE_DEBUG + //try again without debug device layer enabled + createDeviceFlags &= ~D3D11_CREATE_DEVICE_DEBUG; + HRESULT hres = D3D11CreateDeviceAndSwapChain(NULL, driverType,NULL,createDeviceFlags,NULL, 0, + D3D11_SDK_VERSION, + &d3dpp, + &mSwapChain, + &mD3DDevice, + &deviceFeature, + &mD3DDeviceContext); + //if we failed again than we definitely have a problem + if (FAILED(hres)) + AssertFatal(false, "GFXD3D11Device::init - D3D11CreateDeviceAndSwapChain failed!"); + + Con::warnf("GFXD3D11Device::init - Debug layers not detected!"); + mDebugLayers = false; + #else + AssertFatal(false, "GFXD3D11Device::init - D3D11CreateDeviceAndSwapChain failed!"); + #endif + } + + //set the fullscreen state here if we need to + if(mode.fullScreen) + { + hres = mSwapChain->SetFullscreenState(TRUE, NULL); + if(FAILED(hres)) + { + AssertFatal(false, "GFXD3D11Device::init- Failed to set fullscreen state!"); + } + } + + mTextureManager = new GFXD3D11TextureManager(); + + // Now reacquire all the resources we trashed earlier + reacquireDefaultPoolResources(); + //TODO implement feature levels? + if (deviceFeature >= D3D_FEATURE_LEVEL_11_0) + mPixVersion = 5.0f; + else + AssertFatal(false, "GFXD3D11Device::init - We don't support anything below feature level 11."); + + D3D11_QUERY_DESC queryDesc; + queryDesc.Query = D3D11_QUERY_OCCLUSION; + queryDesc.MiscFlags = 0; + + ID3D11Query *testQuery = NULL; + + // detect occlusion query support + if (SUCCEEDED(mD3DDevice->CreateQuery(&queryDesc, &testQuery))) mOcclusionQuerySupported = true; + + SAFE_RELEASE(testQuery); + + Con::printf("Hardware occlusion query detected: %s", mOcclusionQuerySupported ? "Yes" : "No"); + + mCardProfiler = new GFXD3D11CardProfiler(); + mCardProfiler->init(); + + D3D11_TEXTURE2D_DESC desc; + desc.BindFlags = D3D11_BIND_DEPTH_STENCIL; + desc.CPUAccessFlags = 0; + desc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.Width = mode.resolution.x; + desc.Height = mode.resolution.y; + desc.SampleDesc.Count =1; + desc.SampleDesc.Quality =0; + desc.MiscFlags = 0; + + HRESULT hr = mD3DDevice->CreateTexture2D(&desc, NULL, &mDeviceDepthStencil); + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::init - couldn't create device's depth-stencil surface."); + } + + D3D11_DEPTH_STENCIL_VIEW_DESC depthDesc; + depthDesc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + depthDesc.Flags =0 ; + depthDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + depthDesc.Texture2D.MipSlice = 0; + + hr = mD3DDevice->CreateDepthStencilView(mDeviceDepthStencil, &depthDesc, &mDeviceDepthStencilView); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::init - couldn't create depth stencil view"); + } + + hr = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mDeviceBackbuffer); + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::init - coudln't retrieve backbuffer ref"); + + //create back buffer view + D3D11_RENDER_TARGET_VIEW_DESC RTDesc; + + RTDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + RTDesc.Texture2D.MipSlice = 0; + RTDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + + hr = mD3DDevice->CreateRenderTargetView(mDeviceBackbuffer, &RTDesc, &mDeviceBackBufferView); + + if(FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::init - couldn't create back buffer target view"); + +#ifdef TORQUE_DEBUG + String backBufferName = "MainBackBuffer"; + String depthSteniclName = "MainDepthStencil"; + String backBuffViewName = "MainBackBuffView"; + String depthStencViewName = "MainDepthView"; + mDeviceBackbuffer->SetPrivateData(WKPDID_D3DDebugObjectName, backBufferName.size(), backBufferName.c_str()); + mDeviceDepthStencil->SetPrivateData(WKPDID_D3DDebugObjectName, depthSteniclName.size(), depthSteniclName.c_str()); + mDeviceDepthStencilView->SetPrivateData(WKPDID_D3DDebugObjectName, depthStencViewName.size(), depthStencViewName.c_str()); + mDeviceBackBufferView->SetPrivateData(WKPDID_D3DDebugObjectName, backBuffViewName.size(), backBuffViewName.c_str()); + + _suppressDebugMessages(); + +#endif + + gScreenShot = new ScreenShotD3D11; + + mInitialized = true; + deviceInited(); +} + +// Supress any debug layer messages we don't want to see +void GFXD3D11Device::_suppressDebugMessages() +{ + if (mDebugLayers) + { + ID3D11Debug *pDebug = NULL; + if (SUCCEEDED(mD3DDevice->QueryInterface(__uuidof(ID3D11Debug), (void**)&pDebug))) + { + ID3D11InfoQueue *pInfoQueue = NULL; + if (SUCCEEDED(pDebug->QueryInterface(__uuidof(ID3D11InfoQueue), (void**)&pInfoQueue))) + { + //Disable breaking on error or corruption, this can be handy when using VS graphics debugging + pInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_CORRUPTION, false); + pInfoQueue->SetBreakOnSeverity(D3D11_MESSAGE_SEVERITY_ERROR, false); + + D3D11_MESSAGE_ID hide[] = + { + //this is harmless and no need to spam the console + D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + }; + + D3D11_INFO_QUEUE_FILTER filter; + memset(&filter, 0, sizeof(filter)); + filter.DenyList.NumIDs = _countof(hide); + filter.DenyList.pIDList = hide; + pInfoQueue->AddStorageFilterEntries(&filter); + SAFE_RELEASE(pInfoQueue); + } + SAFE_RELEASE(pDebug); + } + } +} + +bool GFXD3D11Device::beginSceneInternal() +{ + mCanCurrentlyRender = true; + return mCanCurrentlyRender; +} + +GFXWindowTarget * GFXD3D11Device::allocWindowTarget(PlatformWindow *window) +{ + AssertFatal(window,"GFXD3D11Device::allocWindowTarget - no window provided!"); + + // Allocate the device. + init(window->getVideoMode(), window); + + // Set up a new window target... + GFXD3D11WindowTarget *gdwt = new GFXD3D11WindowTarget(); + gdwt->mWindow = window; + gdwt->mSize = window->getClientExtent(); + gdwt->initPresentationParams(); + gdwt->registerResourceWithDevice(this); + + return gdwt; +} + +GFXTextureTarget* GFXD3D11Device::allocRenderToTextureTarget() +{ + GFXD3D11TextureTarget *targ = new GFXD3D11TextureTarget(); + targ->registerResourceWithDevice(this); + + return targ; +} + +void GFXD3D11Device::reset(DXGI_SWAP_CHAIN_DESC &d3dpp) +{ + if (!mD3DDevice) + return; + + mInitialized = false; + + // Clean up some commonly dangling state. This helps prevents issues with + // items that are destroyed by the texture manager callbacks and recreated + // later, but still left bound. + setVertexBuffer(NULL); + setPrimitiveBuffer(NULL); + for (S32 i = 0; iClearState(); + + DXGI_MODE_DESC displayModes; + displayModes.Format = d3dpp.BufferDesc.Format; + displayModes.Height = d3dpp.BufferDesc.Height; + displayModes.Width = d3dpp.BufferDesc.Width; + displayModes.RefreshRate = d3dpp.BufferDesc.RefreshRate; + displayModes.Scaling = d3dpp.BufferDesc.Scaling; + displayModes.ScanlineOrdering = d3dpp.BufferDesc.ScanlineOrdering; + + HRESULT hr; + if (!d3dpp.Windowed) + { + hr = mSwapChain->ResizeTarget(&displayModes); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to resize target!"); + } + } + + // First release all the stuff we allocated from D3DPOOL_DEFAULT + releaseDefaultPoolResources(); + + //release the backbuffer, depthstencil, and their views + SAFE_RELEASE(mDeviceBackBufferView); + SAFE_RELEASE(mDeviceBackbuffer); + SAFE_RELEASE(mDeviceDepthStencilView); + SAFE_RELEASE(mDeviceDepthStencil); + + hr = mSwapChain->ResizeBuffers(d3dpp.BufferCount, d3dpp.BufferDesc.Width, d3dpp.BufferDesc.Height, d3dpp.BufferDesc.Format, d3dpp.Windowed ? 0 : DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to resize back buffer!"); + } + + //recreate backbuffer view. depth stencil view and texture + D3D11_TEXTURE2D_DESC desc; + desc.BindFlags = D3D11_BIND_DEPTH_STENCIL; + desc.CPUAccessFlags = 0; + desc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + desc.MipLevels = 1; + desc.ArraySize = 1; + desc.Usage = D3D11_USAGE_DEFAULT; + desc.Width = d3dpp.BufferDesc.Width; + desc.Height = d3dpp.BufferDesc.Height; + desc.SampleDesc.Count = 1; + desc.SampleDesc.Quality = 0; + desc.MiscFlags = 0; + + hr = mD3DDevice->CreateTexture2D(&desc, NULL, &mDeviceDepthStencil); + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::reset - couldn't create device's depth-stencil surface."); + } + + D3D11_DEPTH_STENCIL_VIEW_DESC depthDesc; + depthDesc.Format = GFXD3D11TextureFormat[GFXFormatD24S8]; + depthDesc.Flags = 0; + depthDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + depthDesc.Texture2D.MipSlice = 0; + + hr = mD3DDevice->CreateDepthStencilView(mDeviceDepthStencil, &depthDesc, &mDeviceDepthStencilView); + + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::reset - couldn't create depth stencil view"); + } + + hr = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mDeviceBackbuffer); + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::reset - coudln't retrieve backbuffer ref"); + + //create back buffer view + D3D11_RENDER_TARGET_VIEW_DESC RTDesc; + + RTDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; + RTDesc.Texture2D.MipSlice = 0; + RTDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + + hr = mD3DDevice->CreateRenderTargetView(mDeviceBackbuffer, &RTDesc, &mDeviceBackBufferView); + + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11Device::reset - couldn't create back buffer target view"); + + mD3DDeviceContext->OMSetRenderTargets(1, &mDeviceBackBufferView, mDeviceDepthStencilView); + + hr = mSwapChain->SetFullscreenState(!d3dpp.Windowed, NULL); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to change screen states!"); + } + + //Microsoft recommend this, see DXGI documentation + if (!d3dpp.Windowed) + { + displayModes.RefreshRate.Numerator = 0; + displayModes.RefreshRate.Denominator = 0; + hr = mSwapChain->ResizeTarget(&displayModes); + + if (FAILED(hr)) + { + AssertFatal(false, "D3D11Device::reset - failed to resize target!"); + } + } + + mInitialized = true; + + // Now re aquire all the resources we trashed earlier + reacquireDefaultPoolResources(); + + // Mark everything dirty and flush to card, for sanity. + updateStates(true); +} + +class GFXPCD3D11RegisterDevice +{ +public: + GFXPCD3D11RegisterDevice() + { + GFXInit::getRegisterDeviceSignal().notify(&GFXD3D11Device::enumerateAdapters); + } +}; + +static GFXPCD3D11RegisterDevice pPCD3D11RegisterDevice; + +//----------------------------------------------------------------------------- +/// Parse command line arguments for window creation +//----------------------------------------------------------------------------- +static void sgPCD3D11DeviceHandleCommandLine(S32 argc, const char **argv) +{ + // useful to pass parameters by command line for d3d (e.g. -dx9 -dx11) + for (U32 i = 1; i < argc; i++) + { + argv[i]; + } +} + +// Register the command line parsing hook +static ProcessRegisterCommandLine sgCommandLine( sgPCD3D11DeviceHandleCommandLine ); + +GFXD3D11Device::GFXD3D11Device(U32 index) +{ + mDeviceSwizzle32 = &Swizzles::bgra; + GFXVertexColor::setSwizzle( mDeviceSwizzle32 ); + + mDeviceSwizzle24 = &Swizzles::bgr; + + mAdapterIndex = index; + mD3DDevice = NULL; + mVolatileVB = NULL; + + mCurrentPB = NULL; + mDynamicPB = NULL; + + mLastVertShader = NULL; + mLastPixShader = NULL; + + mCanCurrentlyRender = false; + mTextureManager = NULL; + mCurrentStateBlock = NULL; + mResourceListHead = NULL; + + mPixVersion = 0.0; + + mDrawInstancesCount = 0; + + mCardProfiler = NULL; + + mDeviceDepthStencil = NULL; + mDeviceBackbuffer = NULL; + mDeviceBackBufferView = NULL; + mDeviceDepthStencilView = NULL; + + mCreateFenceType = -1; // Unknown, test on first allocate + + mCurrentConstBuffer = NULL; + + mOcclusionQuerySupported = false; + + mDebugLayers = false; + + for(U32 i = 0; i < GS_COUNT; ++i) + mModelViewProjSC[i] = NULL; + + // Set up the Enum translation tables + GFXD3D11EnumTranslate::init(); +} + +GFXD3D11Device::~GFXD3D11Device() +{ + // Release our refcount on the current stateblock object + mCurrentStateBlock = NULL; + + releaseDefaultPoolResources(); + + mD3DDeviceContext->ClearState(); + mD3DDeviceContext->Flush(); + + // Free the vertex declarations. + VertexDeclMap::Iterator iter = mVertexDecls.begin(); + for ( ; iter != mVertexDecls.end(); iter++ ) + delete iter->value; + + // Forcibly clean up the pools + mVolatileVBList.setSize(0); + mDynamicPB = NULL; + + // And release our D3D resources. + SAFE_RELEASE(mDeviceDepthStencilView); + SAFE_RELEASE(mDeviceBackBufferView); + SAFE_RELEASE(mDeviceDepthStencil); + SAFE_RELEASE(mDeviceBackbuffer); + SAFE_RELEASE(mD3DDeviceContext); + + SAFE_DELETE(mCardProfiler); + SAFE_DELETE(gScreenShot); + +#ifdef TORQUE_DEBUG + if (mDebugLayers) + { + ID3D11Debug *pDebug = NULL; + mD3DDevice->QueryInterface(IID_PPV_ARGS(&pDebug)); + AssertFatal(pDebug, "~GFXD3D11Device- Failed to get debug layer"); + pDebug->ReportLiveDeviceObjects(D3D11_RLDO_DETAIL); + SAFE_RELEASE(pDebug); + } +#endif + + SAFE_RELEASE(mSwapChain); + SAFE_RELEASE(mD3DDevice); +} + +void GFXD3D11Device::setupGenericShaders(GenericShaderType type) +{ + AssertFatal(type != GSTargetRestore, ""); //not used + + if(mGenericShader[GSColor] == NULL) + { + ShaderData *shaderData; + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/colorV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/colorP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSColor] = shaderData->getShader(); + mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer(); + mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/modColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/modColorTextureP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSModColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/addColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/addColorTextureP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSAddColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/textureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/textureP.hlsl"); + shaderData->setField("pixVersion", "5.0"); + shaderData->registerObject(); + mGenericShader[GSTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer(); + mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + //Force an update + mViewportDirty = true; + _updateRenderTargets(); + } + + MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize]; + mGenericShaderBuffer[type]->setSafe(mModelViewProjSC[type], tempMatrix); + + setShader(mGenericShader[type]); + setShaderConstBuffer(mGenericShaderBuffer[type]); +} + +//----------------------------------------------------------------------------- +/// Creates a state block object based on the desc passed in. This object +/// represents an immutable state. +GFXStateBlockRef GFXD3D11Device::createStateBlockInternal(const GFXStateBlockDesc& desc) +{ + return GFXStateBlockRef(new GFXD3D11StateBlock(desc)); +} + +/// Activates a stateblock +void GFXD3D11Device::setStateBlockInternal(GFXStateBlock* block, bool force) +{ + AssertFatal(static_cast(block), "Incorrect stateblock type for this device!"); + GFXD3D11StateBlock* d3dBlock = static_cast(block); + GFXD3D11StateBlock* d3dCurrent = static_cast(mCurrentStateBlock.getPointer()); + + if (force) + d3dCurrent = NULL; + + d3dBlock->activate(d3dCurrent); +} + +/// Called by base GFXDevice to actually set a const buffer +void GFXD3D11Device::setShaderConstBufferInternal(GFXShaderConstBuffer* buffer) +{ + if (buffer) + { + PROFILE_SCOPE(GFXD3D11Device_setShaderConstBufferInternal); + AssertFatal(static_cast(buffer), "Incorrect shader const buffer type for this device!"); + GFXD3D11ShaderConstBuffer* d3dBuffer = static_cast(buffer); + + d3dBuffer->activate(mCurrentConstBuffer); + mCurrentConstBuffer = d3dBuffer; + } + else + { + mCurrentConstBuffer = NULL; + } +} + +//----------------------------------------------------------------------------- + +void GFXD3D11Device::clear(U32 flags, ColorI color, F32 z, U32 stencil) +{ + // Make sure we have flushed our render target state. + _updateRenderTargets(); + + UINT depthstencilFlag = 0; + + ID3D11RenderTargetView* rtView = NULL; + ID3D11DepthStencilView* dsView = NULL; + + mD3DDeviceContext->OMGetRenderTargets(1, &rtView, &dsView); + + const FLOAT clearColor[4] = { + static_cast(color.red) * (1.0f / 255.0f), + static_cast(color.green) * (1.0f / 255.0f), + static_cast(color.blue) * (1.0f / 255.0f), + static_cast(color.alpha) * (1.0f / 255.0f) + }; + + if (flags & GFXClearTarget && rtView) + mD3DDeviceContext->ClearRenderTargetView(rtView, clearColor); + + if (flags & GFXClearZBuffer) + depthstencilFlag |= D3D11_CLEAR_DEPTH; + + if (flags & GFXClearStencil) + depthstencilFlag |= D3D11_CLEAR_STENCIL; + + if (depthstencilFlag && dsView) + mD3DDeviceContext->ClearDepthStencilView(dsView, depthstencilFlag, z, stencil); + + SAFE_RELEASE(rtView); + SAFE_RELEASE(dsView); +} + +void GFXD3D11Device::endSceneInternal() +{ + mCanCurrentlyRender = false; +} + +void GFXD3D11Device::_updateRenderTargets() +{ + if (mRTDirty || (mCurrentRT && mCurrentRT->isPendingState())) + { + if (mRTDeactivate) + { + mRTDeactivate->deactivate(); + mRTDeactivate = NULL; + } + + // NOTE: The render target changes are not really accurate + // as the GFXTextureTarget supports MRT internally. So when + // we activate a GFXTarget it could result in multiple calls + // to SetRenderTarget on the actual device. + mDeviceStatistics.mRenderTargetChanges++; + + mCurrentRT->activate(); + + mRTDirty = false; + } + + if (mViewportDirty) + { + D3D11_VIEWPORT viewport; + + viewport.TopLeftX = mViewport.point.x; + viewport.TopLeftY = mViewport.point.y; + viewport.Width = mViewport.extent.x; + viewport.Height = mViewport.extent.y; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + + mD3DDeviceContext->RSSetViewports(1, &viewport); + + mViewportDirty = false; + } +} + +void GFXD3D11Device::releaseDefaultPoolResources() +{ + // Release all the dynamic vertex buffer arrays + // Forcibly clean up the pools + for(U32 i=0; ivb); + mVolatileVBList[i] = NULL; + } + mVolatileVBList.setSize(0); + + // We gotta clear the current const buffer else the next + // activate may erroneously think the device is still holding + // this state and fail to set it. + mCurrentConstBuffer = NULL; + + // Set current VB to NULL and set state dirty + for (U32 i=0; i < VERTEX_STREAM_COUNT; i++) + { + mCurrentVertexBuffer[i] = NULL; + mVertexBufferDirty[i] = true; + mVertexBufferFrequency[i] = 0; + mVertexBufferFrequencyDirty[i] = true; + } + + // Release dynamic index buffer + if(mDynamicPB != NULL) + { + SAFE_RELEASE(mDynamicPB->ib); + } + + // Set current PB/IB to NULL and set state dirty + mCurrentPrimitiveBuffer = NULL; + mCurrentPB = NULL; + mPrimitiveBufferDirty = true; + + // Zombify texture manager (for D3D this only modifies default pool textures) + if( mTextureManager ) + mTextureManager->zombify(); + + // Set global dirty state so the IB/PB and VB get reset + mStateDirty = true; + + // Walk the resource list and zombify everything. + GFXResource *walk = mResourceListHead; + while(walk) + { + walk->zombify(); + walk = walk->getNextResource(); + } +} + +void GFXD3D11Device::reacquireDefaultPoolResources() +{ + // Now do the dynamic index buffers + if( mDynamicPB == NULL ) + mDynamicPB = new GFXD3D11PrimitiveBuffer(this, 0, 0, GFXBufferTypeDynamic); + + D3D11_BUFFER_DESC desc; + desc.ByteWidth = sizeof(U16) * MAX_DYNAMIC_INDICES; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_INDEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &mDynamicPB->ib); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate dynamic IB"); + } + + // Walk the resource list and zombify everything. + GFXResource *walk = mResourceListHead; + while(walk) + { + walk->resurrect(); + walk = walk->getNextResource(); + } + + if(mTextureManager) + mTextureManager->resurrect(); +} + +GFXD3D11VertexBuffer* GFXD3D11Device::findVBPool( const GFXVertexFormat *vertexFormat, U32 vertsNeeded ) +{ + PROFILE_SCOPE( GFXD3D11Device_findVBPool ); + + for( U32 i=0; imVertexFormat.isEqual( *vertexFormat ) ) + return mVolatileVBList[i]; + + return NULL; +} + +GFXD3D11VertexBuffer * GFXD3D11Device::createVBPool( const GFXVertexFormat *vertexFormat, U32 vertSize ) +{ + PROFILE_SCOPE( GFXD3D11Device_createVBPool ); + + // this is a bit funky, but it will avoid problems with (lack of) copy constructors + // with a push_back() situation + mVolatileVBList.increment(); + StrongRefPtr newBuff; + mVolatileVBList.last() = new GFXD3D11VertexBuffer(); + newBuff = mVolatileVBList.last(); + + newBuff->mNumVerts = 0; + newBuff->mBufferType = GFXBufferTypeVolatile; + newBuff->mVertexFormat.copy( *vertexFormat ); + newBuff->mVertexSize = vertSize; + newBuff->mDevice = this; + + // Requesting it will allocate it. + vertexFormat->getDecl(); + + D3D11_BUFFER_DESC desc; + desc.ByteWidth = vertSize * MAX_DYNAMIC_VERTS; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &newBuff->vb); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate dynamic VB"); + } + + return newBuff; +} + +//----------------------------------------------------------------------------- + +void GFXD3D11Device::setClipRect( const RectI &inRect ) +{ + // We transform the incoming rect by the view + // matrix first, so that it can be used to pan + // and scale the clip rect. + // + // This is currently used to take tiled screenshots. + Point3F pos( inRect.point.x, inRect.point.y, 0.0f ); + Point3F extent( inRect.extent.x, inRect.extent.y, 0.0f ); + getViewMatrix().mulP( pos ); + getViewMatrix().mulV( extent ); + RectI rect( pos.x, pos.y, extent.x, extent.y ); + + // Clip the rect against the renderable size. + Point2I size = mCurrentRT->getSize(); + + RectI maxRect(Point2I(0,0), size); + rect.intersect(maxRect); + + mClipRect = rect; + + F32 l = F32( mClipRect.point.x ); + F32 r = F32( mClipRect.point.x + mClipRect.extent.x ); + F32 b = F32( mClipRect.point.y + mClipRect.extent.y ); + F32 t = F32( mClipRect.point.y ); + + // Set up projection matrix, + static Point4F pt; + pt.set(2.0f / (r - l), 0.0f, 0.0f, 0.0f); + mTempMatrix.setColumn(0, pt); + + pt.set(0.0f, 2.0f/(t - b), 0.0f, 0.0f); + mTempMatrix.setColumn(1, pt); + + pt.set(0.0f, 0.0f, 1.0f, 0.0f); + mTempMatrix.setColumn(2, pt); + + pt.set((l+r)/(l-r), (t+b)/(b-t), 1.0f, 1.0f); + mTempMatrix.setColumn(3, pt); + + setProjectionMatrix( mTempMatrix ); + + // Set up world/view matrix + mTempMatrix.identity(); + setWorldMatrix( mTempMatrix ); + + setViewport( mClipRect ); +} + +void GFXD3D11Device::setVertexStream( U32 stream, GFXVertexBuffer *buffer ) +{ + GFXD3D11VertexBuffer *d3dBuffer = static_cast( buffer ); + + if ( stream == 0 ) + { + // Set the volatile buffer which is used to + // offset the start index when doing draw calls. + if ( d3dBuffer && d3dBuffer->mVolatileStart > 0 ) + mVolatileVB = d3dBuffer; + else + mVolatileVB = NULL; + } + + // NOTE: We do not use the stream offset here for stream 0 + // as that feature is *supposedly* not as well supported as + // using the start index in drawPrimitive. + // + // If we can verify that this is not the case then we should + // start using this method exclusively for all streams. + + U32 strides[1] = { d3dBuffer ? d3dBuffer->mVertexSize : 0 }; + U32 offset = d3dBuffer && stream != 0 ? d3dBuffer->mVolatileStart * d3dBuffer->mVertexSize : 0; + ID3D11Buffer* buff = d3dBuffer ? d3dBuffer->vb : NULL; + + getDeviceContext()->IASetVertexBuffers(stream, 1, &buff, strides, &offset); +} + +void GFXD3D11Device::setVertexStreamFrequency( U32 stream, U32 frequency ) +{ + if (stream == 0) + mDrawInstancesCount = frequency; // instances count +} + +void GFXD3D11Device::_setPrimitiveBuffer( GFXPrimitiveBuffer *buffer ) +{ + mCurrentPB = static_cast( buffer ); + + mD3DDeviceContext->IASetIndexBuffer(mCurrentPB->ib, DXGI_FORMAT_R16_UINT, 0); +} + +U32 GFXD3D11Device::primCountToIndexCount(GFXPrimitiveType primType, U32 primitiveCount) +{ + switch (primType) + { + case GFXPointList: + return primitiveCount; + break; + case GFXLineList: + return primitiveCount * 2; + break; + case GFXLineStrip: + return primitiveCount + 1; + break; + case GFXTriangleList: + return primitiveCount * 3; + break; + case GFXTriangleStrip: + return 2 + primitiveCount; + break; + default: + AssertFatal(false, "GFXGLDevice::primCountToIndexCount - unrecognized prim type"); + break; + + } + return 0; +} + + +void GFXD3D11Device::drawPrimitive( GFXPrimitiveType primType, U32 vertexStart, U32 primitiveCount ) +{ + // This is done to avoid the function call overhead if possible + if( mStateDirty ) + updateStates(); + if (mCurrentShaderConstBuffer) + setShaderConstBufferInternal(mCurrentShaderConstBuffer); + + if ( mVolatileVB ) + vertexStart += mVolatileVB->mVolatileStart; + + mD3DDeviceContext->IASetPrimitiveTopology(GFXD3D11PrimType[primType]); + + if ( mDrawInstancesCount ) + mD3DDeviceContext->DrawInstanced(primCountToIndexCount(primType, primitiveCount), mDrawInstancesCount, vertexStart, 0); + else + mD3DDeviceContext->Draw(primCountToIndexCount(primType, primitiveCount), vertexStart); + + mDeviceStatistics.mDrawCalls++; + if ( mVertexBufferFrequency[0] > 1 ) + mDeviceStatistics.mPolyCount += primitiveCount * mVertexBufferFrequency[0]; + else + mDeviceStatistics.mPolyCount += primitiveCount; +} + +void GFXD3D11Device::drawIndexedPrimitive( GFXPrimitiveType primType, + U32 startVertex, + U32 minIndex, + U32 numVerts, + U32 startIndex, + U32 primitiveCount ) +{ + // This is done to avoid the function call overhead if possible + if( mStateDirty ) + updateStates(); + if (mCurrentShaderConstBuffer) + setShaderConstBufferInternal(mCurrentShaderConstBuffer); + + AssertFatal( mCurrentPB != NULL, "Trying to call drawIndexedPrimitive with no current index buffer, call setIndexBuffer()" ); + + if ( mVolatileVB ) + startVertex += mVolatileVB->mVolatileStart; + + mD3DDeviceContext->IASetPrimitiveTopology(GFXD3D11PrimType[primType]); + + if ( mDrawInstancesCount ) + mD3DDeviceContext->DrawIndexedInstanced(primCountToIndexCount(primType, primitiveCount), mDrawInstancesCount, mCurrentPB->mVolatileStart + startIndex, startVertex, 0); + else + mD3DDeviceContext->DrawIndexed(primCountToIndexCount(primType,primitiveCount), mCurrentPB->mVolatileStart + startIndex, startVertex); + + mDeviceStatistics.mDrawCalls++; + if ( mVertexBufferFrequency[0] > 1 ) + mDeviceStatistics.mPolyCount += primitiveCount * mVertexBufferFrequency[0]; + else + mDeviceStatistics.mPolyCount += primitiveCount; +} + +GFXShader* GFXD3D11Device::createShader() +{ + GFXD3D11Shader* shader = new GFXD3D11Shader(); + shader->registerResourceWithDevice( this ); + return shader; +} + +//----------------------------------------------------------------------------- +// Set shader - this function exists to make sure this is done in one place, +// and to make sure redundant shader states are not being +// sent to the card. +//----------------------------------------------------------------------------- +void GFXD3D11Device::setShader(GFXShader *shader, bool force) +{ + if(shader) + { + GFXD3D11Shader *d3dShader = static_cast(shader); + + if (d3dShader->mPixShader != mLastPixShader || force) + { + mD3DDeviceContext->PSSetShader( d3dShader->mPixShader, NULL, 0); + mLastPixShader = d3dShader->mPixShader; + } + + if (d3dShader->mVertShader != mLastVertShader || force) + { + mD3DDeviceContext->VSSetShader( d3dShader->mVertShader, NULL, 0); + mLastVertShader = d3dShader->mVertShader; + } + } + else + { + setupGenericShaders(); + } +} + +GFXPrimitiveBuffer * GFXD3D11Device::allocPrimitiveBuffer(U32 numIndices, U32 numPrimitives, GFXBufferType bufferType, void *data ) +{ + // Allocate a buffer to return + GFXD3D11PrimitiveBuffer * res = new GFXD3D11PrimitiveBuffer(this, numIndices, numPrimitives, bufferType); + + // Determine usage flags + D3D11_USAGE usage = D3D11_USAGE_DEFAULT; + + // Assumptions: + // - static buffers are write once, use many + // - dynamic buffers are write many, use many + // - volatile buffers are write once, use once + // You may never read from a buffer. + //TODO: enable proper support for D3D11_USAGE_IMMUTABLE + switch(bufferType) + { + case GFXBufferTypeImmutable: + case GFXBufferTypeStatic: + usage = D3D11_USAGE_DEFAULT; //D3D11_USAGE_IMMUTABLE; + break; + + case GFXBufferTypeDynamic: + case GFXBufferTypeVolatile: + usage = D3D11_USAGE_DYNAMIC; + break; + } + + // Register resource + res->registerResourceWithDevice(this); + + // Create d3d index buffer + if(bufferType == GFXBufferTypeVolatile) + { + // Get it from the pool if it's a volatile... + AssertFatal(numIndices < MAX_DYNAMIC_INDICES, "Cannot allocate that many indices in a volatile buffer, increase MAX_DYNAMIC_INDICES."); + + res->ib = mDynamicPB->ib; + res->mVolatileBuffer = mDynamicPB; + } + else + { + // Otherwise, get it as a seperate buffer... + D3D11_BUFFER_DESC desc; + desc.ByteWidth = sizeof(U16) * numIndices; + desc.Usage = usage; + if(bufferType == GFXBufferTypeDynamic) + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; // We never allow reading from a primitive buffer. + else + desc.CPUAccessFlags = 0; + desc.BindFlags = D3D11_BIND_INDEX_BUFFER; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &res->ib); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate an index buffer."); + } + } + + if (data) + { + void* dest; + res->lock(0, numIndices, &dest); + dMemcpy(dest, data, sizeof(U16) * numIndices); + res->unlock(); + } + + return res; +} + +GFXVertexBuffer * GFXD3D11Device::allocVertexBuffer(U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize, GFXBufferType bufferType, void *data) +{ + PROFILE_SCOPE( GFXD3D11Device_allocVertexBuffer ); + + GFXD3D11VertexBuffer *res = new GFXD3D11VertexBuffer( this, + numVerts, + vertexFormat, + vertSize, + bufferType ); + + // Determine usage flags + D3D11_USAGE usage = D3D11_USAGE_DEFAULT; + + res->mNumVerts = 0; + + // Assumptions: + // - static buffers are write once, use many + // - dynamic buffers are write many, use many + // - volatile buffers are write once, use once + // You may never read from a buffer. + //TODO: enable proper support for D3D11_USAGE_IMMUTABLE + switch(bufferType) + { + case GFXBufferTypeImmutable: + case GFXBufferTypeStatic: + usage = D3D11_USAGE_DEFAULT; + break; + + case GFXBufferTypeDynamic: + case GFXBufferTypeVolatile: + usage = D3D11_USAGE_DYNAMIC; + break; + } + + // Register resource + res->registerResourceWithDevice(this); + + // Create vertex buffer + if(bufferType == GFXBufferTypeVolatile) + { + // NOTE: Volatile VBs are pooled and will be allocated at lock time. + AssertFatal(numVerts <= MAX_DYNAMIC_VERTS, "GFXD3D11Device::allocVertexBuffer - Volatile vertex buffer is too big... see MAX_DYNAMIC_VERTS!"); + } + else + { + // Requesting it will allocate it. + vertexFormat->getDecl(); //-ALEX disabled to postpone until after shader is actually set... + + // Get a new buffer... + D3D11_BUFFER_DESC desc; + desc.ByteWidth = vertSize * numVerts; + desc.Usage = usage; + desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + if(bufferType == GFXBufferTypeDynamic) + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; // We never allow reading from a vertex buffer. + else + desc.CPUAccessFlags = 0; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &res->vb); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to allocate VB"); + } + } + + res->mNumVerts = numVerts; + + if (data) + { + void* dest; + res->lock(0, numVerts, &dest); + dMemcpy(dest, data, vertSize * numVerts); + res->unlock(); + } + + return res; +} + +String GFXD3D11Device::_createTempShaderInternal(const GFXVertexFormat *vertexFormat) +{ + U32 elemCount = vertexFormat->getElementCount(); + //Input data + StringBuilder inputData; + inputData.append("struct VertIn {"); + //Output data + StringBuilder outputData; + outputData.append("struct VertOut {"); + // Shader main body data + StringBuilder mainBodyData; + //make shader + mainBodyData.append("VertOut main(VertIn IN){VertOut OUT;"); + for (U32 i = 0; i < elemCount; i++) + { + const GFXVertexElement &element = vertexFormat->getElement(i); + String semantic = element.getSemantic(); + String semanticOut = semantic; + String type; + + if (element.isSemantic(GFXSemantic::POSITION)) + { + semantic = "POSITION"; + semanticOut = "SV_Position"; + } + else if (element.isSemantic(GFXSemantic::NORMAL)) + { + semantic = "NORMAL"; + semanticOut = semantic; + } + else if (element.isSemantic(GFXSemantic::COLOR)) + { + semantic = "COLOR"; + semanticOut = semantic; + } + else if (element.isSemantic(GFXSemantic::TANGENT)) + { + semantic = "TANGENT"; + semanticOut = semantic; + } + else if (element.isSemantic(GFXSemantic::BINORMAL)) + { + semantic = "BINORMAL"; + semanticOut = semantic; + } + else + { + //Anything that falls thru to here will be a texture coord. + semantic = String::ToString("TEXCOORD%d", element.getSemanticIndex()); + semanticOut = semantic; + } + + switch (GFXD3D11DeclType[element.getType()]) + { + case DXGI_FORMAT_R32_FLOAT: + type = "float"; + break; + case DXGI_FORMAT_R32G32_FLOAT: + type = "float2"; + break; + case DXGI_FORMAT_R32G32B32_FLOAT: + type = "float3"; + break; + case DXGI_FORMAT_R32G32B32A32_FLOAT: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM: + type = "float4"; + break; + } + + StringBuilder in; + in.format("%s %s%d : %s;", type.c_str(), "var", i, semantic.c_str()); + inputData.append(in.data()); + + //SV_Position must be float4 + if (semanticOut == String("SV_Position")) + { + StringBuilder out; + out.format("float4 %s%d : %s;", "var", i, semanticOut.c_str()); + outputData.append(out.data()); + StringBuilder body; + body.format("OUT.%s%d = float4(IN.%s%d.xyz,1);", "var", i, "var", i); + mainBodyData.append(body.data()); + } + else + { + StringBuilder out; + out.format("%s %s%d : %s;", type.c_str(), "var", i, semanticOut.c_str()); + outputData.append(out.data()); + StringBuilder body; + body.format("OUT.%s%d = IN.%s%d;", "var", i, "var", i); + mainBodyData.append(body.data()); + } + } + + inputData.append("};"); + outputData.append("};"); + mainBodyData.append("return OUT;}"); + + //final data + StringBuilder finalData; + finalData.append(inputData.data()); + finalData.append(outputData.data()); + finalData.append(mainBodyData.data()); + + return String(finalData.data()); +} + +GFXVertexDecl* GFXD3D11Device::allocVertexDecl( const GFXVertexFormat *vertexFormat ) +{ + PROFILE_SCOPE( GFXD3D11Device_allocVertexDecl ); + + // First check the map... you shouldn't allocate VBs very often + // if you want performance. The map lookup should never become + // a performance bottleneck. + D3D11VertexDecl *decl = mVertexDecls[vertexFormat->getDescription()]; + if ( decl ) + return decl; + + U32 elemCount = vertexFormat->getElementCount(); + + ID3DBlob* code = NULL; + + // We have to generate a temporary shader here for now since the input layout creation + // expects a shader to be already compiled to verify the vertex layout structure. The problem + // is that most of the time the regular shaders are compiled AFTER allocVertexDecl is called. + if(!decl) + { + //TODO: Perhaps save/cache the ID3DBlob for later use on identical vertex formats,save creating/compiling the temp shader everytime + String shaderData = _createTempShaderInternal(vertexFormat); + +#ifdef TORQUE_DEBUG + U32 flags = D3DCOMPILE_DEBUG | D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_WARNINGS_ARE_ERRORS; +#else + U32 flags = D3DCOMPILE_ENABLE_STRICTNESS; +#endif + + ID3DBlob *errorBlob = NULL; + HRESULT hr = D3DCompile(shaderData.c_str(), shaderData.length(), NULL, NULL, NULL, "main", "vs_5_0", flags, 0, &code, &errorBlob); + StringBuilder error; + + if(errorBlob) + { + error.append((char*)errorBlob->GetBufferPointer(), errorBlob->GetBufferSize()); + AssertFatal(hr, error.data()); + } + + SAFE_RELEASE(errorBlob); + } + + AssertFatal(code, "D3D11Device::allocVertexDecl - compiled vert shader code missing!"); + + // Setup the declaration struct. + + U32 stream; + D3D11_INPUT_ELEMENT_DESC *vd = new D3D11_INPUT_ELEMENT_DESC[ elemCount]; + + for ( U32 i=0; i < elemCount; i++ ) + { + + const GFXVertexElement &element = vertexFormat->getElement( i ); + + stream = element.getStreamIndex(); + + vd[i].InputSlot = stream; + + vd[i].AlignedByteOffset = D3D11_APPEND_ALIGNED_ELEMENT; + vd[i].Format = GFXD3D11DeclType[element.getType()]; + // If instancing is enabled, the per instance data is only used on stream 1. + if (vertexFormat->hasInstancing() && stream == 1) + { + vd[i].InputSlotClass = D3D11_INPUT_PER_INSTANCE_DATA; + vd[i].InstanceDataStepRate = 1; + } + else + { + vd[i].InputSlotClass = D3D11_INPUT_PER_VERTEX_DATA; + vd[i].InstanceDataStepRate = 0; + } + // We force the usage index of 0 for everything but + // texture coords for now... this may change later. + vd[i].SemanticIndex = 0; + + if ( element.isSemantic( GFXSemantic::POSITION ) ) + vd[i].SemanticName = "POSITION"; + else if ( element.isSemantic( GFXSemantic::NORMAL ) ) + vd[i].SemanticName = "NORMAL"; + else if ( element.isSemantic( GFXSemantic::COLOR ) ) + vd[i].SemanticName = "COLOR"; + else if ( element.isSemantic( GFXSemantic::TANGENT ) ) + vd[i].SemanticName = "TANGENT"; + else if ( element.isSemantic( GFXSemantic::BINORMAL ) ) + vd[i].SemanticName = "BINORMAL"; + else + { + //Anything that falls thru to here will be a texture coord. + vd[i].SemanticName = "TEXCOORD"; + vd[i].SemanticIndex = element.getSemanticIndex(); + } + + } + + decl = new D3D11VertexDecl(); + HRESULT hr = mD3DDevice->CreateInputLayout(vd, elemCount,code->GetBufferPointer(), code->GetBufferSize(), &decl->decl); + + if (FAILED(hr)) + { + AssertFatal(false, "GFXD3D11Device::allocVertexDecl - Failed to create vertex input layout!"); + } + + delete [] vd; + SAFE_RELEASE(code); + + // Store it in the cache. + mVertexDecls[vertexFormat->getDescription()] = decl; + + return decl; +} + +void GFXD3D11Device::setVertexDecl( const GFXVertexDecl *decl ) +{ + ID3D11InputLayout *dx11Decl = NULL; + if (decl) + dx11Decl = static_cast(decl)->decl; + + mD3DDeviceContext->IASetInputLayout(dx11Decl); +} + +//----------------------------------------------------------------------------- +// This function should ONLY be called from GFXDevice::updateStates() !!! +//----------------------------------------------------------------------------- +void GFXD3D11Device::setTextureInternal( U32 textureUnit, const GFXTextureObject *texture) +{ + if( texture == NULL ) + { + ID3D11ShaderResourceView *pView = NULL; + mD3DDeviceContext->PSSetShaderResources(textureUnit, 1, &pView); + return; + } + + GFXD3D11TextureObject *tex = (GFXD3D11TextureObject*)(texture); + mD3DDeviceContext->PSSetShaderResources(textureUnit, 1, tex->getSRViewPtr()); +} + +GFXFence *GFXD3D11Device::createFence() +{ + // Figure out what fence type we should be making if we don't know + if( mCreateFenceType == -1 ) + { + D3D11_QUERY_DESC desc; + desc.MiscFlags = 0; + desc.Query = D3D11_QUERY_EVENT; + + ID3D11Query *testQuery = NULL; + + HRESULT hRes = mD3DDevice->CreateQuery(&desc, &testQuery); + + if(FAILED(hRes)) + { + mCreateFenceType = true; + } + + else + { + mCreateFenceType = false; + } + + SAFE_RELEASE(testQuery); + } + + // Cool, use queries + if(!mCreateFenceType) + { + GFXFence* fence = new GFXD3D11QueryFence( this ); + fence->registerResourceWithDevice(this); + return fence; + } + + // CodeReview: At some point I would like a specialized implementation of + // the method used by the general fence, only without the overhead incurred + // by using the GFX constructs. Primarily the lock() method on texture handles + // will do a data copy, and this method doesn't require a copy, just a lock + // [5/10/2007 Pat] + GFXFence* fence = new GFXGeneralFence( this ); + fence->registerResourceWithDevice(this); + return fence; +} + +GFXOcclusionQuery* GFXD3D11Device::createOcclusionQuery() +{ + GFXOcclusionQuery *query; + if (mOcclusionQuerySupported) + query = new GFXD3D11OcclusionQuery( this ); + else + return NULL; + + query->registerResourceWithDevice(this); + return query; +} + +GFXCubemap * GFXD3D11Device::createCubemap() +{ + GFXD3D11Cubemap* cube = new GFXD3D11Cubemap(); + cube->registerResourceWithDevice(this); + return cube; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Device.h b/Engine/source/gfx/D3D11/gfxD3D11Device.h new file mode 100644 index 0000000000..97418d373c --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Device.h @@ -0,0 +1,295 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11DEVICE_H_ +#define _GFXD3D11DEVICE_H_ + +#include + +#include "platform/tmm_off.h" +#include "platformWin32/platformWin32.h" +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "gfx/D3D11/gfxD3D11StateBlock.h" +#include "gfx/D3D11/gfxD3D11TextureManager.h" +#include "gfx/D3D11/gfxD3D11Cubemap.h" +#include "gfx/D3D11/gfxD3D11PrimitiveBuffer.h" +#include "gfx/gfxInit.h" +#include "gfx/gfxResource.h" +#include "platform/tmm_on.h" + +#define D3D11 static_cast(GFX) +#define D3D11DEVICE D3D11->getDevice() +#define D3D11DEVICECONTEXT D3D11->getDeviceContext() + +class PlatformWindow; +class GFXD3D11ShaderConstBuffer; + +//------------------------------------------------------------------------------ + +class GFXD3D11Device : public GFXDevice +{ + friend class GFXResource; + friend class GFXD3D11PrimitiveBuffer; + friend class GFXD3D11VertexBuffer; + friend class GFXD3D11TextureObject; + friend class GFXD3D11TextureTarget; + friend class GFXD3D11WindowTarget; + + virtual GFXFormat selectSupportedFormat(GFXTextureProfile *profile, + const Vector &formats, bool texture, bool mustblend, bool mustfilter); + + virtual void enumerateVideoModes(); + + virtual GFXWindowTarget *allocWindowTarget(PlatformWindow *window); + virtual GFXTextureTarget *allocRenderToTextureTarget(); + + virtual void enterDebugEvent(ColorI color, const char *name){}; + virtual void leaveDebugEvent(){}; + virtual void setDebugMarker(ColorI color, const char *name){}; + +protected: + + class D3D11VertexDecl : public GFXVertexDecl + { + public: + virtual ~D3D11VertexDecl() + { + SAFE_RELEASE( decl ); + } + + ID3D11InputLayout *decl; + }; + + virtual void initStates() { }; + + static GFXAdapter::CreateDeviceInstanceDelegate mCreateDeviceInstance; + + MatrixF mTempMatrix; ///< Temporary matrix, no assurances on value at all + RectI mClipRect; + + typedef StrongRefPtr RPGDVB; + Vector mVolatileVBList; + + /// Used to lookup a vertex declaration for the vertex format. + /// @see allocVertexDecl + typedef Map VertexDeclMap; + VertexDeclMap mVertexDecls; + + ID3D11RenderTargetView* mDeviceBackBufferView; + ID3D11DepthStencilView* mDeviceDepthStencilView; + + ID3D11Texture2D *mDeviceBackbuffer; + ID3D11Texture2D *mDeviceDepthStencil; + + /// The stream 0 vertex buffer used for volatile VB offseting. + GFXD3D11VertexBuffer *mVolatileVB; + + //----------------------------------------------------------------------- + StrongRefPtr mDynamicPB; + GFXD3D11PrimitiveBuffer *mCurrentPB; + + ID3D11VertexShader *mLastVertShader; + ID3D11PixelShader *mLastPixShader; + + S32 mCreateFenceType; + + IDXGISwapChain *mSwapChain; + ID3D11Device* mD3DDevice; + ID3D11DeviceContext* mD3DDeviceContext; + + GFXShader* mCurrentShader; + GFXShaderRef mGenericShader[GS_COUNT]; + GFXShaderConstBufferRef mGenericShaderBuffer[GS_COUNT]; + GFXShaderConstHandle *mModelViewProjSC[GS_COUNT]; + + U32 mAdapterIndex; + + F32 mPixVersion; + + bool mDebugLayers; + + DXGI_SAMPLE_DESC mMultisampleDesc; + + bool mOcclusionQuerySupported; + + U32 mDrawInstancesCount; + + /// To manage creating and re-creating of these when device is aquired + void reacquireDefaultPoolResources(); + + /// To release all resources we control from D3DPOOL_DEFAULT + void releaseDefaultPoolResources(); + + virtual GFXD3D11VertexBuffer* findVBPool( const GFXVertexFormat *vertexFormat, U32 numVertsNeeded ); + virtual GFXD3D11VertexBuffer* createVBPool( const GFXVertexFormat *vertexFormat, U32 vertSize ); + + IDXGISwapChain* getSwapChain(); + // State overrides + // { + + /// + virtual void setTextureInternal(U32 textureUnit, const GFXTextureObject* texture); + + /// Called by GFXDevice to create a device specific stateblock + virtual GFXStateBlockRef createStateBlockInternal(const GFXStateBlockDesc& desc); + /// Called by GFXDevice to actually set a stateblock. + virtual void setStateBlockInternal(GFXStateBlock* block, bool force); + + /// Track the last const buffer we've used. Used to notify new constant buffers that + /// they should send all of their constants up + StrongRefPtr mCurrentConstBuffer; + /// Called by base GFXDevice to actually set a const buffer + virtual void setShaderConstBufferInternal(GFXShaderConstBuffer* buffer); + + virtual void setMatrix( GFXMatrixType /*mtype*/, const MatrixF &/*mat*/ ) { }; + virtual void setLightInternal(U32 /*lightStage*/, const GFXLightInfo /*light*/, bool /*lightEnable*/) { }; + virtual void setLightMaterialInternal(const GFXLightMaterial /*mat*/) { }; + virtual void setGlobalAmbientInternal(ColorF /*color*/) { }; + + // } + + // Index buffer management + // { + virtual void _setPrimitiveBuffer( GFXPrimitiveBuffer *buffer ); + virtual void drawIndexedPrimitive( GFXPrimitiveType primType, + U32 startVertex, + U32 minIndex, + U32 numVerts, + U32 startIndex, + U32 primitiveCount ); + // } + + virtual GFXShader* createShader(); + + /// Device helper function + virtual DXGI_SWAP_CHAIN_DESC setupPresentParams( const GFXVideoMode &mode, const HWND &hwnd ); + + String _createTempShaderInternal(const GFXVertexFormat *vertexFormat); + // Supress any debug layer messages we don't want to see + void _suppressDebugMessages(); + +public: + + static GFXDevice *createInstance( U32 adapterIndex ); + + static void enumerateAdapters( Vector &adapterList ); + + GFXTextureObject* createRenderSurface( U32 width, U32 height, GFXFormat format, U32 mipLevel ); + + ID3D11DepthStencilView* getDepthStencilView() { return mDeviceDepthStencilView; } + ID3D11RenderTargetView* getRenderTargetView() { return mDeviceBackBufferView; } + ID3D11Texture2D* getBackBufferTexture() { return mDeviceBackbuffer; } + + /// Constructor + /// @param d3d Direct3D object to instantiate this device with + /// @param index Adapter index since D3D can use multiple graphics adapters + GFXD3D11Device( U32 index ); + virtual ~GFXD3D11Device(); + + // Activate/deactivate + // { + virtual void init( const GFXVideoMode &mode, PlatformWindow *window = NULL ); + + virtual void preDestroy() { GFXDevice::preDestroy(); if(mTextureManager) mTextureManager->kill(); } + + GFXAdapterType getAdapterType(){ return Direct3D11; } + + U32 getAdaterIndex() const { return mAdapterIndex; } + + virtual GFXCubemap *createCubemap(); + + virtual F32 getPixelShaderVersion() const { return mPixVersion; } + virtual void setPixelShaderVersion( F32 version ){ mPixVersion = version;} + + virtual void setShader(GFXShader *shader, bool force = false); + virtual U32 getNumSamplers() const { return 16; } + virtual U32 getNumRenderTargets() const { return 8; } + // } + + // Misc rendering control + // { + virtual void clear( U32 flags, ColorI color, F32 z, U32 stencil ); + virtual bool beginSceneInternal(); + virtual void endSceneInternal(); + + virtual void setClipRect( const RectI &rect ); + virtual const RectI& getClipRect() const { return mClipRect; } + + // } + + + + /// @name Render Targets + /// @{ + virtual void _updateRenderTargets(); + /// @} + + // Vertex/Index buffer management + // { + virtual GFXVertexBuffer* allocVertexBuffer( U32 numVerts, + const GFXVertexFormat *vertexFormat, + U32 vertSize, + GFXBufferType bufferType, + void* data = NULL); + + virtual GFXPrimitiveBuffer *allocPrimitiveBuffer( U32 numIndices, + U32 numPrimitives, + GFXBufferType bufferType, + void* data = NULL); + + virtual GFXVertexDecl* allocVertexDecl( const GFXVertexFormat *vertexFormat ); + virtual void setVertexDecl( const GFXVertexDecl *decl ); + + virtual void setVertexStream( U32 stream, GFXVertexBuffer *buffer ); + virtual void setVertexStreamFrequency( U32 stream, U32 frequency ); + // } + + virtual U32 getMaxDynamicVerts() { return MAX_DYNAMIC_VERTS; } + virtual U32 getMaxDynamicIndices() { return MAX_DYNAMIC_INDICES; } + + inline U32 primCountToIndexCount(GFXPrimitiveType primType, U32 primitiveCount); + + // Rendering + // { + virtual void drawPrimitive( GFXPrimitiveType primType, U32 vertexStart, U32 primitiveCount ); + // } + + ID3D11DeviceContext* getDeviceContext(){ return mD3DDeviceContext; } + ID3D11Device* getDevice(){ return mD3DDevice; } + + /// Reset + void reset( DXGI_SWAP_CHAIN_DESC &d3dpp ); + + virtual void setupGenericShaders( GenericShaderType type = GSColor ); + + inline virtual F32 getFillConventionOffset() const { return 0.0f; } + virtual void doParanoidStateCheck() {}; + + GFXFence *createFence(); + + GFXOcclusionQuery* createOcclusionQuery(); + + // Default multisample parameters + DXGI_SAMPLE_DESC getMultisampleType() const { return mMultisampleDesc; } +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp new file mode 100644 index 0000000000..24f1952478 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp @@ -0,0 +1,155 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "console/console.h" + +//------------------------------------------------------------------------------ + +DXGI_FORMAT GFXD3D11TextureFormat[GFXFormat_COUNT]; +D3D11_FILTER GFXD3D11TextureFilter[GFXTextureFilter_COUNT]; +D3D11_BLEND GFXD3D11Blend[GFXBlend_COUNT]; +D3D11_BLEND_OP GFXD3D11BlendOp[GFXBlendOp_COUNT]; +D3D11_STENCIL_OP GFXD3D11StencilOp[GFXStencilOp_COUNT]; +D3D11_COMPARISON_FUNC GFXD3D11CmpFunc[GFXCmp_COUNT]; +D3D11_CULL_MODE GFXD3D11CullMode[GFXCull_COUNT]; +D3D11_FILL_MODE GFXD3D11FillMode[GFXFill_COUNT]; +D3D11_PRIMITIVE_TOPOLOGY GFXD3D11PrimType[GFXPT_COUNT]; +D3D11_TEXTURE_ADDRESS_MODE GFXD3D11TextureAddress[GFXAddress_COUNT]; +DXGI_FORMAT GFXD3D11DeclType[GFXDeclType_COUNT]; + +//------------------------------------------------------------------------------ + +void GFXD3D11EnumTranslate::init() +{ + GFXD3D11TextureFormat[GFXFormatR8G8B8] = DXGI_FORMAT_B8G8R8X8_UNORM; + GFXD3D11TextureFormat[GFXFormatR8G8B8A8] = DXGI_FORMAT_B8G8R8A8_UNORM; + GFXD3D11TextureFormat[GFXFormatR8G8B8X8] = DXGI_FORMAT_B8G8R8X8_UNORM; + GFXD3D11TextureFormat[GFXFormatB8G8R8A8] = DXGI_FORMAT_B8G8R8A8_UNORM; + GFXD3D11TextureFormat[GFXFormatR5G6B5] = DXGI_FORMAT_B5G6R5_UNORM; + GFXD3D11TextureFormat[GFXFormatR5G5B5A1] = DXGI_FORMAT_B5G5R5A1_UNORM; + GFXD3D11TextureFormat[GFXFormatR5G5B5X1] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatR32F] = DXGI_FORMAT_R32_FLOAT; + GFXD3D11TextureFormat[GFXFormatA4L4] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatA8L8] = DXGI_FORMAT_R8G8_UNORM; + GFXD3D11TextureFormat[GFXFormatA8] = DXGI_FORMAT_A8_UNORM; + GFXD3D11TextureFormat[GFXFormatL8] = DXGI_FORMAT_R8_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT1] = DXGI_FORMAT_BC1_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT2] = DXGI_FORMAT_BC1_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT3] = DXGI_FORMAT_BC2_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT4] = DXGI_FORMAT_BC2_UNORM; + GFXD3D11TextureFormat[GFXFormatDXT5] = DXGI_FORMAT_BC3_UNORM; + GFXD3D11TextureFormat[GFXFormatR32G32B32A32F] = DXGI_FORMAT_R32G32B32A32_FLOAT; + GFXD3D11TextureFormat[GFXFormatR16G16B16A16F] = DXGI_FORMAT_R16G16B16A16_FLOAT; + GFXD3D11TextureFormat[GFXFormatL16] = DXGI_FORMAT_R16_UNORM; + GFXD3D11TextureFormat[GFXFormatR16G16B16A16] = DXGI_FORMAT_R16G16B16A16_UNORM; + GFXD3D11TextureFormat[GFXFormatR16G16] = DXGI_FORMAT_R16G16_UNORM; + GFXD3D11TextureFormat[GFXFormatR16F] = DXGI_FORMAT_R16_FLOAT; + GFXD3D11TextureFormat[GFXFormatR16G16F] = DXGI_FORMAT_R16G16_FLOAT; + GFXD3D11TextureFormat[GFXFormatR10G10B10A2] = DXGI_FORMAT_R10G10B10A2_UNORM; + GFXD3D11TextureFormat[GFXFormatD32] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatD24X8] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatD24S8] = DXGI_FORMAT_D24_UNORM_S8_UINT; + GFXD3D11TextureFormat[GFXFormatD24FS8] = DXGI_FORMAT_UNKNOWN; + GFXD3D11TextureFormat[GFXFormatD16] = DXGI_FORMAT_D16_UNORM; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11TextureFilter[GFXTextureFilterNone] = D3D11_FILTER_MIN_MAG_MIP_POINT; + GFXD3D11TextureFilter[GFXTextureFilterPoint] = D3D11_FILTER_MIN_MAG_MIP_POINT; + GFXD3D11TextureFilter[GFXTextureFilterLinear] = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + GFXD3D11TextureFilter[GFXTextureFilterAnisotropic] = D3D11_FILTER_ANISOTROPIC; + GFXD3D11TextureFilter[GFXTextureFilterPyramidalQuad] = D3D11_FILTER_ANISOTROPIC; + GFXD3D11TextureFilter[GFXTextureFilterGaussianQuad] = D3D11_FILTER_ANISOTROPIC; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11Blend[GFXBlendZero] = D3D11_BLEND_ZERO; + GFXD3D11Blend[GFXBlendOne] = D3D11_BLEND_ONE; + GFXD3D11Blend[GFXBlendSrcColor] = D3D11_BLEND_SRC_COLOR; + GFXD3D11Blend[GFXBlendInvSrcColor] = D3D11_BLEND_INV_SRC_COLOR; + GFXD3D11Blend[GFXBlendSrcAlpha] = D3D11_BLEND_SRC_ALPHA; + GFXD3D11Blend[GFXBlendInvSrcAlpha] = D3D11_BLEND_INV_SRC_ALPHA; + GFXD3D11Blend[GFXBlendDestAlpha] = D3D11_BLEND_DEST_ALPHA; + GFXD3D11Blend[GFXBlendInvDestAlpha] = D3D11_BLEND_INV_DEST_ALPHA; + GFXD3D11Blend[GFXBlendDestColor] = D3D11_BLEND_DEST_COLOR; + GFXD3D11Blend[GFXBlendInvDestColor] = D3D11_BLEND_INV_DEST_COLOR; + GFXD3D11Blend[GFXBlendSrcAlphaSat] = D3D11_BLEND_SRC_ALPHA_SAT; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11BlendOp[GFXBlendOpAdd] = D3D11_BLEND_OP_ADD; + GFXD3D11BlendOp[GFXBlendOpSubtract] = D3D11_BLEND_OP_SUBTRACT; + GFXD3D11BlendOp[GFXBlendOpRevSubtract] = D3D11_BLEND_OP_REV_SUBTRACT; + GFXD3D11BlendOp[GFXBlendOpMin] = D3D11_BLEND_OP_MIN; + GFXD3D11BlendOp[GFXBlendOpMax] = D3D11_BLEND_OP_MAX; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11StencilOp[GFXStencilOpKeep] = D3D11_STENCIL_OP_KEEP; + GFXD3D11StencilOp[GFXStencilOpZero] = D3D11_STENCIL_OP_ZERO; + GFXD3D11StencilOp[GFXStencilOpReplace] = D3D11_STENCIL_OP_REPLACE; + GFXD3D11StencilOp[GFXStencilOpIncrSat] = D3D11_STENCIL_OP_INCR_SAT; + GFXD3D11StencilOp[GFXStencilOpDecrSat] = D3D11_STENCIL_OP_DECR_SAT; + GFXD3D11StencilOp[GFXStencilOpInvert] = D3D11_STENCIL_OP_INVERT; + GFXD3D11StencilOp[GFXStencilOpIncr] = D3D11_STENCIL_OP_INCR; + GFXD3D11StencilOp[GFXStencilOpDecr] = D3D11_STENCIL_OP_DECR; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11CmpFunc[GFXCmpNever] = D3D11_COMPARISON_NEVER; + GFXD3D11CmpFunc[GFXCmpLess] = D3D11_COMPARISON_LESS; + GFXD3D11CmpFunc[GFXCmpEqual] = D3D11_COMPARISON_EQUAL; + GFXD3D11CmpFunc[GFXCmpLessEqual] = D3D11_COMPARISON_LESS_EQUAL; + GFXD3D11CmpFunc[GFXCmpGreater] = D3D11_COMPARISON_GREATER; + GFXD3D11CmpFunc[GFXCmpNotEqual] = D3D11_COMPARISON_NOT_EQUAL; + GFXD3D11CmpFunc[GFXCmpGreaterEqual] = D3D11_COMPARISON_GREATER_EQUAL; + GFXD3D11CmpFunc[GFXCmpAlways] = D3D11_COMPARISON_ALWAYS; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11CullMode[GFXCullNone] = D3D11_CULL_NONE; + GFXD3D11CullMode[GFXCullCW] = D3D11_CULL_FRONT; + GFXD3D11CullMode[GFXCullCCW] = D3D11_CULL_BACK; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11FillMode[GFXFillPoint] = D3D11_FILL_SOLID; + GFXD3D11FillMode[GFXFillWireframe] = D3D11_FILL_WIREFRAME; + GFXD3D11FillMode[GFXFillSolid] = D3D11_FILL_SOLID; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11PrimType[GFXPointList] = D3D_PRIMITIVE_TOPOLOGY_POINTLIST; + GFXD3D11PrimType[GFXLineList] = D3D_PRIMITIVE_TOPOLOGY_LINELIST; + GFXD3D11PrimType[GFXLineStrip] = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP; + GFXD3D11PrimType[GFXTriangleList] = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST; + GFXD3D11PrimType[GFXTriangleStrip] = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11TextureAddress[GFXAddressWrap] = D3D11_TEXTURE_ADDRESS_WRAP; + GFXD3D11TextureAddress[GFXAddressMirror] = D3D11_TEXTURE_ADDRESS_MIRROR; + GFXD3D11TextureAddress[GFXAddressClamp] = D3D11_TEXTURE_ADDRESS_CLAMP; + GFXD3D11TextureAddress[GFXAddressBorder] = D3D11_TEXTURE_ADDRESS_BORDER; + GFXD3D11TextureAddress[GFXAddressMirrorOnce] = D3D11_TEXTURE_ADDRESS_MIRROR_ONCE; +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ + GFXD3D11DeclType[GFXDeclType_Float] = DXGI_FORMAT_R32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Float2] = DXGI_FORMAT_R32G32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Float3] = DXGI_FORMAT_R32G32B32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Float4] = DXGI_FORMAT_R32G32B32A32_FLOAT; + GFXD3D11DeclType[GFXDeclType_Color] = DXGI_FORMAT_B8G8R8A8_UNORM; // DXGI_FORMAT_R8G8B8A8_UNORM; +} + diff --git a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h new file mode 100644 index 0000000000..daede2a1c8 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.h @@ -0,0 +1,51 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + + +#ifndef _GFXD3D11ENUMTRANSLATE_H_ +#define _GFXD3D11ENUMTRANSLATE_H_ + +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "gfx/gfxEnums.h" + +//------------------------------------------------------------------------------ + +namespace GFXD3D11EnumTranslate +{ + void init(); +}; + +//------------------------------------------------------------------------------ + +extern DXGI_FORMAT GFXD3D11TextureFormat[GFXFormat_COUNT]; +extern D3D11_FILTER GFXD3D11TextureFilter[GFXTextureFilter_COUNT]; +extern D3D11_BLEND GFXD3D11Blend[GFXBlend_COUNT]; +extern D3D11_BLEND_OP GFXD3D11BlendOp[GFXBlendOp_COUNT]; +extern D3D11_STENCIL_OP GFXD3D11StencilOp[GFXStencilOp_COUNT]; +extern D3D11_COMPARISON_FUNC GFXD3D11CmpFunc[GFXCmp_COUNT]; +extern D3D11_CULL_MODE GFXD3D11CullMode[GFXCull_COUNT]; +extern D3D11_FILL_MODE GFXD3D11FillMode[GFXFill_COUNT]; +extern D3D11_PRIMITIVE_TOPOLOGY GFXD3D11PrimType[GFXPT_COUNT]; +extern D3D11_TEXTURE_ADDRESS_MODE GFXD3D11TextureAddress[GFXAddress_COUNT]; +extern DXGI_FORMAT GFXD3D11DeclType[GFXDeclType_COUNT]; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.cpp b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.cpp new file mode 100644 index 0000000000..6df92c68a9 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.cpp @@ -0,0 +1,177 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11OcclusionQuery.h" + +#include "gui/3d/guiTSControl.h" + +#ifdef TORQUE_GATHER_METRICS +// For TickMs define +#include "T3D/gameBase/processList.h" +#endif + +GFXD3D11OcclusionQuery::GFXD3D11OcclusionQuery(GFXDevice *device) + : GFXOcclusionQuery(device), + mQuery(NULL) +{ +#ifdef TORQUE_GATHER_METRICS + mTimer = PlatformTimer::create(); + mTimer->getElapsedMs(); + + mTimeSinceEnd = 0; + mBeginFrame = 0; +#endif +} + +GFXD3D11OcclusionQuery::~GFXD3D11OcclusionQuery() +{ + SAFE_RELEASE(mQuery); + +#ifdef TORQUE_GATHER_METRICS + SAFE_DELETE(mTimer); +#endif +} + +bool GFXD3D11OcclusionQuery::begin() +{ + if(GFXDevice::getDisableOcclusionQuery()) + return true; + + if (mQuery == NULL) + { + D3D11_QUERY_DESC queryDesc; + queryDesc.Query = D3D11_QUERY_OCCLUSION; + queryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&queryDesc, &mQuery); + + if(FAILED(hRes)) + { + AssertFatal(false, "GFXD3D11OcclusionQuery::begin - Hardware does not support D3D11 Occlusion-Queries, this should be caught before this type is created"); + } + + AssertISV(hRes != E_OUTOFMEMORY, "GFXD3D11OcclusionQuery::begin - Out of memory"); + } + + // Add a begin marker to the command buffer queue. + D3D11DEVICECONTEXT->Begin(mQuery); + +#ifdef TORQUE_GATHER_METRICS + mBeginFrame = GuiTSCtrl::getFrameCount(); +#endif + + return true; +} + +void GFXD3D11OcclusionQuery::end() +{ + if (GFXDevice::getDisableOcclusionQuery()) + return; + + // Add an end marker to the command buffer queue. + D3D11DEVICECONTEXT->End(mQuery); + +#ifdef TORQUE_GATHER_METRICS + AssertFatal( mBeginFrame == GuiTSCtrl::getFrameCount(), "GFXD3D11OcclusionQuery::end - ended query on different frame than begin!" ); + mTimer->getElapsedMs(); + mTimer->reset(); +#endif +} + +GFXD3D11OcclusionQuery::OcclusionQueryStatus GFXD3D11OcclusionQuery::getStatus(bool block, U32 *data) +{ + // If this ever shows up near the top of a profile then your system is + // GPU bound or you are calling getStatus too soon after submitting it. + // + // To test if you are GPU bound resize your window very small and see if + // this profile no longer appears at the top. + // + // To test if you are calling getStatus to soon after submitting it, + // check the value of mTimeSinceEnd in a debug build. If it is < half the length + // of time to render an individual frame you could have problems. + PROFILE_SCOPE(GFXD3D11OcclusionQuery_getStatus); + + if ( GFXDevice::getDisableOcclusionQuery() ) + return NotOccluded; + + if ( mQuery == NULL ) + return Unset; + +#ifdef TORQUE_GATHER_METRICS + //AssertFatal( mBeginFrame < GuiTSCtrl::getFrameCount(), "GFXD3D11OcclusionQuery::getStatus - called on the same frame as begin!" ); + + //U32 mTimeSinceEnd = mTimer->getElapsedMs(); + //AssertFatal( mTimeSinceEnd >= 5, "GFXD3DOcculsionQuery::getStatus - less than TickMs since called ::end!" ); +#endif + + HRESULT hRes; + U64 dwOccluded = 0; + + if ( block ) + { + while ((hRes = D3D11DEVICECONTEXT->GetData(mQuery, &dwOccluded, sizeof(U64), 0)) == S_FALSE); + } + else + { + hRes = D3D11DEVICECONTEXT->GetData(mQuery, &dwOccluded, sizeof(U64), 0); + } + + if (hRes == S_OK) + { + if (data != NULL) + *data = (U32)dwOccluded; + + return dwOccluded > 0 ? NotOccluded : Occluded; + } + + if (hRes == S_FALSE) + return Waiting; + + return Error; +} + +void GFXD3D11OcclusionQuery::zombify() +{ + SAFE_RELEASE( mQuery ); +} + +void GFXD3D11OcclusionQuery::resurrect() +{ + // Recreate the query + if( mQuery == NULL ) + { + D3D11_QUERY_DESC queryDesc; + queryDesc.Query = D3D11_QUERY_OCCLUSION; + queryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&queryDesc, &mQuery); + + AssertISV( hRes != E_OUTOFMEMORY, "GFXD3D9QueryFence::resurrect - Out of memory" ); + } +} + +const String GFXD3D11OcclusionQuery::describeSelf() const +{ + // We've got nothing + return String(); +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.h b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.h new file mode 100644 index 0000000000..9ec3774b91 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11OcclusionQuery.h @@ -0,0 +1,58 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFX_D3D11_OCCLUSIONQUERY_H_ +#define _GFX_D3D11_OCCLUSIONQUERY_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxOcclusionQuery.h" + +#ifdef TORQUE_GATHER_METRICS + #include "platform/platformTimer.h" +#endif + +class GFXD3D11OcclusionQuery : public GFXOcclusionQuery +{ +private: + mutable ID3D11Query *mQuery; + +#ifdef TORQUE_GATHER_METRICS + U32 mBeginFrame; + U32 mTimeSinceEnd; + PlatformTimer *mTimer; +#endif + +public: + GFXD3D11OcclusionQuery(GFXDevice *device); + virtual ~GFXD3D11OcclusionQuery(); + + virtual bool begin(); + virtual void end(); + virtual OcclusionQueryStatus getStatus(bool block, U32 *data = NULL); + + // GFXResource + virtual void zombify(); + virtual void resurrect(); + virtual const String describeSelf() const; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp new file mode 100644 index 0000000000..74e5dbc4e1 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.cpp @@ -0,0 +1,222 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/D3D11/gfxD3D11PrimitiveBuffer.h" +#include "core/util/safeRelease.h" + +void GFXD3D11PrimitiveBuffer::prepare() +{ + D3D11->_setPrimitiveBuffer(this); +} + +void GFXD3D11PrimitiveBuffer::lock(U32 indexStart, U32 indexEnd, void **indexPtr) +{ + AssertFatal(!mLocked, "GFXD3D11PrimitiveBuffer::lock - Can't lock a primitive buffer more than once!"); + + mLocked = true; + D3D11_MAP flags = D3D11_MAP_WRITE_DISCARD; + + switch(mBufferType) + { + case GFXBufferTypeImmutable: + case GFXBufferTypeStatic: + case GFXBufferTypeDynamic: + flags = D3D11_MAP_WRITE_DISCARD; + break; + + case GFXBufferTypeVolatile: + // Get our range now... + AssertFatal(indexStart == 0, "Cannot get a subrange on a volatile buffer."); + AssertFatal(indexEnd < MAX_DYNAMIC_INDICES, "Cannot get more than MAX_DYNAMIC_INDICES in a volatile buffer. Up the constant!"); + + // Get the primtive buffer + mVolatileBuffer = D3D11->mDynamicPB; + + AssertFatal( mVolatileBuffer, "GFXD3D11PrimitiveBuffer::lock - No dynamic primitive buffer was available!"); + + // We created the pool when we requested this volatile buffer, so assume it exists... + if(mVolatileBuffer->mIndexCount + indexEnd > MAX_DYNAMIC_INDICES) + { + flags = D3D11_MAP_WRITE_DISCARD; + mVolatileStart = indexStart = 0; + indexEnd = indexEnd; + } + else + { + flags = D3D11_MAP_WRITE_NO_OVERWRITE; + mVolatileStart = indexStart = mVolatileBuffer->mIndexCount; + indexEnd += mVolatileBuffer->mIndexCount; + } + + mVolatileBuffer->mIndexCount = indexEnd + 1; + ib = mVolatileBuffer->ib; + + break; + } + + + mIndexStart = indexStart; + mIndexEnd = indexEnd; + + if (mBufferType == GFXBufferTypeStatic || mBufferType == GFXBufferTypeImmutable) + { + U32 sizeToLock = (indexEnd - indexStart) * sizeof(U16); + *indexPtr = new U8[sizeToLock]; + mLockedBuffer = *indexPtr; + } + else + { + D3D11_MAPPED_SUBRESOURCE pIndexData; + ZeroMemory(&pIndexData, sizeof(D3D11_MAPPED_SUBRESOURCE)); + + HRESULT hr = D3D11DEVICECONTEXT->Map(ib, 0, flags, 0, &pIndexData); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11PrimitiveBuffer::lock - Could not lock primitive buffer."); + } + + *indexPtr = (U8*)pIndexData.pData + (indexStart * sizeof(U16)) ; + } + + #ifdef TORQUE_DEBUG + + // Allocate a debug buffer large enough for the lock + // plus space for over and under run guard strings. + mLockedSize = (indexEnd - indexStart) * sizeof(U16); + const U32 guardSize = sizeof( _PBGuardString ); + mDebugGuardBuffer = new U8[mLockedSize+(guardSize*2)]; + + // Setup the guard strings. + dMemcpy( mDebugGuardBuffer, _PBGuardString, guardSize ); + dMemcpy( mDebugGuardBuffer + mLockedSize + guardSize, _PBGuardString, guardSize ); + + // Store the real lock pointer and return our debug pointer. + mLockedBuffer = *indexPtr; + *indexPtr = (U16*)( mDebugGuardBuffer + guardSize ); + + #endif // TORQUE_DEBUG +} + +void GFXD3D11PrimitiveBuffer::unlock() +{ + #ifdef TORQUE_DEBUG + + if ( mDebugGuardBuffer ) + { + const U32 guardSize = sizeof( _PBGuardString ); + + // First check the guard areas for overwrites. + AssertFatal( dMemcmp( mDebugGuardBuffer, _PBGuardString, guardSize ) == 0, + "GFXD3D11PrimitiveBuffer::unlock - Caught lock memory underrun!" ); + AssertFatal( dMemcmp( mDebugGuardBuffer + mLockedSize + guardSize, _PBGuardString, guardSize ) == 0, + "GFXD3D11PrimitiveBuffer::unlock - Caught lock memory overrun!" ); + + // Copy the debug content down to the real PB. + dMemcpy( mLockedBuffer, mDebugGuardBuffer + guardSize, mLockedSize ); + + // Cleanup. + delete [] mDebugGuardBuffer; + mDebugGuardBuffer = NULL; + //mLockedBuffer = NULL; + mLockedSize = 0; + } + + #endif // TORQUE_DEBUG + + const U32 totalSize = this->mIndexCount * sizeof(U16); + + if (mBufferType == GFXBufferTypeStatic || mBufferType == GFXBufferTypeImmutable) + { + //set up the update region of the buffer + D3D11_BOX box; + box.back = 1; + box.front = 0; + box.top = 0; + box.bottom =1; + box.left = mIndexStart *sizeof(U16); + box.right = mIndexEnd * sizeof(U16); + //update the real ib buffer + D3D11DEVICECONTEXT->UpdateSubresource(ib, 0, &box,mLockedBuffer,totalSize, 0); + //clean up the old buffer + delete[] mLockedBuffer; + mLockedBuffer = NULL; + } + else + { + D3D11DEVICECONTEXT->Unmap(ib,0); + } + + mLocked = false; + mIsFirstLock = false; + mVolatileBuffer = NULL; +} + +GFXD3D11PrimitiveBuffer::~GFXD3D11PrimitiveBuffer() +{ + if( mBufferType != GFXBufferTypeVolatile ) + { + SAFE_RELEASE(ib); + } +} + +void GFXD3D11PrimitiveBuffer::zombify() +{ + if (mBufferType == GFXBufferTypeStatic || mBufferType == GFXBufferTypeImmutable) + return; + + AssertFatal(!mLocked, "GFXD3D11PrimitiveBuffer::zombify - Cannot zombify a locked buffer!"); + + if (mBufferType == GFXBufferTypeVolatile) + { + // We must null the volatile buffer else we're holding + // a dead pointer which can be set on the device. + ib = NULL; + return; + } + + // Dynamic buffers get released. + SAFE_RELEASE(ib); +} + +void GFXD3D11PrimitiveBuffer::resurrect() +{ + if ( mBufferType != GFXBufferTypeDynamic ) + return; + + D3D11_BUFFER_DESC desc; + desc.ByteWidth = sizeof(U16) * mIndexCount; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_INDEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &ib); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11PrimitiveBuffer::resurrect - Failed to allocate an index buffer."); + } +} diff --git a/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.h b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.h new file mode 100644 index 0000000000..1be1952d46 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11PrimitiveBuffer.h @@ -0,0 +1,83 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11PRIMITIVEBUFFER_H_ +#define _GFXD3D11PRIMITIVEBUFFER_H_ + +#include "gfx/gfxPrimitiveBuffer.h" + +class GFXD3D11PrimitiveBuffer : public GFXPrimitiveBuffer +{ +public: + ID3D11Buffer *ib; + StrongRefPtr mVolatileBuffer; + U32 mVolatileStart; + U32 mIndexStart; + U32 mIndexEnd; + +#ifdef TORQUE_DEBUG + #define _PBGuardString "GFX_PRIMTIVE_BUFFER_GUARD_STRING" + U8 *mDebugGuardBuffer; + U32 mLockedSize; +#endif TORQUE_DEBUG + + void *mLockedBuffer; + bool mLocked; + bool mIsFirstLock; + + GFXD3D11PrimitiveBuffer( GFXDevice *device, + U32 indexCount, + U32 primitiveCount, + GFXBufferType bufferType ); + + virtual ~GFXD3D11PrimitiveBuffer(); + + virtual void lock(U32 indexStart, U32 indexEnd, void **indexPtr); + virtual void unlock(); + + virtual void prepare(); + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); +}; + +inline GFXD3D11PrimitiveBuffer::GFXD3D11PrimitiveBuffer( GFXDevice *device, + U32 indexCount, + U32 primitiveCount, + GFXBufferType bufferType ) + : GFXPrimitiveBuffer( device, indexCount, primitiveCount, bufferType ) +{ + mVolatileStart = 0; + ib = NULL; + mIsFirstLock = true; + mLocked = false; +#ifdef TORQUE_DEBUG + mDebugGuardBuffer = NULL; + mLockedBuffer = NULL; + mLockedSize = 0; + mIndexStart = 0; + mIndexEnd = 0; +#endif +} + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11QueryFence.cpp b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.cpp new file mode 100644 index 0000000000..f111ce4327 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.cpp @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11QueryFence.h" + +GFXD3D11QueryFence::~GFXD3D11QueryFence() +{ + SAFE_RELEASE(mQuery); +} + +void GFXD3D11QueryFence::issue() +{ + PROFILE_START(GFXD3D11QueryFence_issue); + + // Create the query if we need to + if(mQuery == NULL) + { + D3D11_QUERY_DESC QueryDesc; + QueryDesc.Query = D3D11_QUERY_EVENT; + QueryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&QueryDesc, &mQuery); + + if(FAILED(hRes)) + { + AssertFatal(false, "Hardware does not support D3D11 Queries, this should be caught before this fence type is created" ); + } + + AssertISV(hRes != E_OUTOFMEMORY, "Out of memory"); + } + + // Issue the query + D3D11DEVICECONTEXT->End(mQuery); + PROFILE_END(); +} + +GFXFence::FenceStatus GFXD3D11QueryFence::getStatus() const +{ + if(mQuery == NULL) + return GFXFence::Unset; + + HRESULT hRes = D3D11DEVICECONTEXT->GetData(mQuery, NULL, 0, 0); + + return (hRes == S_OK ? GFXFence::Processed : GFXFence::Pending); +} + +void GFXD3D11QueryFence::block() +{ + PROFILE_SCOPE(GFXD3D11QueryFence_block); + + // Calling block() before issue() is valid, catch this case + if( mQuery == NULL ) + return; + + HRESULT hRes; + while((hRes = D3D11DEVICECONTEXT->GetData(mQuery, NULL, 0, 0)) == S_FALSE); //D3DGETDATA_FLUSH + +} + +void GFXD3D11QueryFence::zombify() +{ + // Release our query + SAFE_RELEASE( mQuery ); +} + +void GFXD3D11QueryFence::resurrect() +{ + // Recreate the query + if(mQuery == NULL) + { + D3D11_QUERY_DESC QueryDesc; + QueryDesc.Query = D3D11_QUERY_EVENT; + QueryDesc.MiscFlags = 0; + + HRESULT hRes = D3D11DEVICE->CreateQuery(&QueryDesc, &mQuery); + + if(FAILED(hRes)) + { + AssertFatal(false, "GFXD3D11QueryFence::resurrect - Hardware does not support D3D11 Queries, this should be caught before this fence type is created"); + } + + AssertISV(hRes != E_OUTOFMEMORY, "GFXD3D11QueryFence::resurrect - Out of memory"); + } +} + +const String GFXD3D11QueryFence::describeSelf() const +{ + // We've got nothing + return String(); +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11QueryFence.h b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.h new file mode 100644 index 0000000000..5113651c9d --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11QueryFence.h @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFX_D3D11_QUERYFENCE_H_ +#define _GFX_D3D11_QUERYFENCE_H_ + +#include "gfx/gfxFence.h" +#include "gfx/gfxResource.h" +#include "gfx/D3D11/gfxD3D11Device.h" + +class GFXD3D11QueryFence : public GFXFence +{ +private: + mutable ID3D11Query *mQuery; + +public: + GFXD3D11QueryFence( GFXDevice *device ) : GFXFence( device ), mQuery( NULL ) {}; + virtual ~GFXD3D11QueryFence(); + + virtual void issue(); + virtual FenceStatus getStatus() const; + virtual void block(); + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); + virtual const String describeSelf() const; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp b/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp new file mode 100644 index 0000000000..a5273a93eb --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Shader.cpp @@ -0,0 +1,1542 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "gfx/D3D11/gfxD3D11Shader.h" +#include "core/frameAllocator.h" +#include "core/stream/fileStream.h" +#include "core/util/safeDelete.h" +#include "console/console.h" + +extern bool gDisassembleAllShaders; + +#pragma comment(lib, "d3dcompiler.lib") + +gfxD3DIncludeRef GFXD3D11Shader::smD3DInclude = NULL; + +class gfxD3D11Include : public ID3DInclude, public StrongRefBase +{ +private: + + Vector mLastPath; + +public: + + void setPath(const String &path) + { + mLastPath.clear(); + mLastPath.push_back(path); + } + + gfxD3D11Include() {} + virtual ~gfxD3D11Include() {} + + STDMETHOD(Open)(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes); + STDMETHOD(Close)(THIS_ LPCVOID pData); +}; + +HRESULT gfxD3D11Include::Open(THIS_ D3D_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) +{ + using namespace Torque; + // First try making the path relative to the parent. + Torque::Path path = Torque::Path::Join( mLastPath.last(), '/', pFileName ); + path = Torque::Path::CompressPath( path ); + + if ( !Torque::FS::ReadFile( path, (void *&)*ppData, *pBytes, true ) ) + { + // Ok... now try using the path as is. + path = String( pFileName ); + path = Torque::Path::CompressPath( path ); + + if ( !Torque::FS::ReadFile( path, (void *&)*ppData, *pBytes, true ) ) + { + AssertISV(false, avar( "Failed to open include '%s'.", pFileName)); + return E_FAIL; + } + } + + // If the data was of zero size then we cannot recurse + // into this file and DX won't call Close() below. + // + // So in this case don't push on the path. + if ( *pBytes > 0 ) + mLastPath.push_back( path.getRootAndPath() ); + + return S_OK; +} + +HRESULT gfxD3D11Include::Close( THIS_ LPCVOID pData ) +{ + // Free the data file and pop its path off the stack. + delete [] (U8*)pData; + mLastPath.pop_back(); + + return S_OK; +} + +GFXD3D11ShaderConstHandle::GFXD3D11ShaderConstHandle() +{ + clear(); +} + +const String& GFXD3D11ShaderConstHandle::getName() const +{ + if ( mVertexConstant ) + return mVertexHandle.name; + else + return mPixelHandle.name; +} + +GFXShaderConstType GFXD3D11ShaderConstHandle::getType() const +{ + if ( mVertexConstant ) + return mVertexHandle.constType; + else + return mPixelHandle.constType; +} + +U32 GFXD3D11ShaderConstHandle::getArraySize() const +{ + if ( mVertexConstant ) + return mVertexHandle.arraySize; + else + return mPixelHandle.arraySize; +} + +S32 GFXD3D11ShaderConstHandle::getSamplerRegister() const +{ + if ( !mValid || !isSampler() ) + return -1; + + // We always store sampler type and register index in the pixelHandle, + // sampler registers are shared between vertex and pixel shaders anyway. + + return mPixelHandle.offset; +} + +GFXD3D11ConstBufferLayout::GFXD3D11ConstBufferLayout() +{ + mSubBuffers.reserve(CBUFFER_MAX); +} + +bool GFXD3D11ConstBufferLayout::set(const ParamDesc& pd, const GFXShaderConstType constType, const U32 inSize, const void* data, U8* basePointer) +{ + PROFILE_SCOPE(GenericConstBufferLayout_set); + S32 size = inSize; + // Shader compilers like to optimize float4x4 uniforms into float3x3s. + // So long as the real paramater is a matrix of-some-type and the data + // passed in is a MatrixF ( which is will be ), we DO NOT have a + // mismatched const type. + AssertFatal(pd.constType == constType || + ( + (pd.constType == GFXSCT_Float2x2 || + pd.constType == GFXSCT_Float3x3 || + pd.constType == GFXSCT_Float4x4) && + (constType == GFXSCT_Float2x2 || + constType == GFXSCT_Float3x3 || + constType == GFXSCT_Float4x4) + ), "Mismatched const type!"); + + // This "cute" bit of code allows us to support 2x3 and 3x3 matrices in shader constants but use our MatrixF class. Yes, a hack. -BTR + switch (pd.constType) + { + case GFXSCT_Float2x2: + case GFXSCT_Float3x3: + case GFXSCT_Float4x4: + return setMatrix(pd, constType, size, data, basePointer); + break; + // TODO add other AlignedVector here + case GFXSCT_Float2: + if (size > sizeof(Point2F)) + size = pd.size; + default: + break; + } + + AssertFatal(pd.size >= size, "Not enough room in the buffer for this data!"); + + // Ok, we only set data if it's different than the data we already have, this maybe more expensive than just setting the data, but + // we'll have to do some timings to see. For example, the lighting shader constants rarely change, but we can't assume that at the + // renderInstMgr level, but we can check down here. -BTR + if (dMemcmp(basePointer + pd.offset, data, size) != 0) + { + dMemcpy(basePointer + pd.offset, data, size); + return true; + } + return false; +} + +bool GFXD3D11ConstBufferLayout::setMatrix(const ParamDesc& pd, const GFXShaderConstType constType, const U32 size, const void* data, U8* basePointer) +{ + PROFILE_SCOPE(GFXD3D11ConstBufferLayout_setMatrix); + + if (pd.constType == GFXSCT_Float4x4) + { + // Special case, we can just blast this guy. + AssertFatal(pd.size >= size, "Not enough room in the buffer for this data!"); + if (dMemcmp(basePointer+pd.offset, data, size) != 0) + { + dMemcpy(basePointer+pd.offset, data, size); + return true; + } + + return false; + } + else + { + PROFILE_SCOPE(GFXD3D11ConstBufferLayout_setMatrix_not4x4); + + // Figure out how big of a chunk we are copying. We're going to copy 4 columns by N rows of data + U32 csize; + switch (pd.constType) + { + case GFXSCT_Float2x2 : + csize = 24; //this takes up 16+8 + break; + case GFXSCT_Float3x3 : + csize = 44; //This takes up 16+16+12 + break; + default: + AssertFatal(false, "Unhandled case!"); + return false; + break; + } + + // Loop through and copy + bool ret = false; + U8* currDestPointer = basePointer+pd.offset; + const U8* currSourcePointer = static_cast(data); + const U8* endData = currSourcePointer + size; + while (currSourcePointer < endData) + { + if (dMemcmp(currDestPointer, currSourcePointer, csize) != 0) + { + dMemcpy(currDestPointer, currSourcePointer, csize); + ret = true; + } + + currDestPointer += csize; + currSourcePointer += sizeof(MatrixF); + } + + return ret; + } +} + +//------------------------------------------------------------------------------ +GFXD3D11ShaderConstBuffer::GFXD3D11ShaderConstBuffer( GFXD3D11Shader* shader, + GFXD3D11ConstBufferLayout* vertexLayout, + GFXD3D11ConstBufferLayout* pixelLayout) +{ + AssertFatal( shader, "GFXD3D11ShaderConstBuffer() - Got a null shader!" ); + + // We hold on to this so we don't have to call + // this virtual method during activation. + mShader = shader; + + for (U32 i = 0; i < CBUFFER_MAX; ++i) + { + mConstantBuffersV[i] = NULL; + mConstantBuffersP[i] = NULL; + } + + // TODO: Remove buffers and layouts that don't exist for performance? + //Mandatory + mVertexConstBufferLayout = vertexLayout; + mVertexConstBuffer = new GenericConstBuffer(vertexLayout); + + mPixelConstBufferLayout = pixelLayout; + mPixelConstBuffer = new GenericConstBuffer(pixelLayout); + + _createBuffers(); + +} + +GFXD3D11ShaderConstBuffer::~GFXD3D11ShaderConstBuffer() +{ + // release constant buffer + for (U32 i = 0; i < CBUFFER_MAX; ++i) + { + SAFE_RELEASE(mConstantBuffersP[i]); + SAFE_RELEASE(mConstantBuffersV[i]); + } + + SAFE_DELETE(mVertexConstBuffer); + SAFE_DELETE(mPixelConstBuffer); + + + if ( mShader ) + mShader->_unlinkBuffer( this ); +} + +void GFXD3D11ShaderConstBuffer::_createBuffers() +{ + HRESULT hr; + // Create a vertex constant buffer + if (mVertexConstBufferLayout->getBufferSize() > 0) + { + const Vector &subBuffers = mVertexConstBufferLayout->getSubBufferDesc(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + D3D11_BUFFER_DESC cbDesc; + cbDesc.ByteWidth = subBuffers[i].size; + cbDesc.Usage = D3D11_USAGE_DEFAULT; + cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + cbDesc.CPUAccessFlags = 0; + cbDesc.MiscFlags = 0; + cbDesc.StructureByteStride = 0; + + hr = D3D11DEVICE->CreateBuffer(&cbDesc, NULL, &mConstantBuffersV[i]); + + if (FAILED(hr)) + { + AssertFatal(false, "can't create constant mConstantBuffersV!"); + } + } + } + + // Create a pixel constant buffer + if (mPixelConstBufferLayout->getBufferSize()) + { + const Vector &subBuffers = mPixelConstBufferLayout->getSubBufferDesc(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + // Create a pixel float constant buffer + D3D11_BUFFER_DESC cbDesc; + cbDesc.ByteWidth = subBuffers[i].size; + cbDesc.Usage = D3D11_USAGE_DEFAULT; + cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; + cbDesc.CPUAccessFlags = 0; + cbDesc.MiscFlags = 0; + cbDesc.StructureByteStride = 0; + + hr = D3D11DEVICE->CreateBuffer(&cbDesc, NULL, &mConstantBuffersP[i]); + + if (FAILED(hr)) + { + AssertFatal(false, "can't create constant mConstantBuffersP!"); + } + } + } +} + +GFXShader* GFXD3D11ShaderConstBuffer::getShader() +{ + return mShader; +} + +// This is kind of cheesy, but I don't think templates would work well here because +// these functions potentially need to be handled differently by other derived types +template +inline void GFXD3D11ShaderConstBuffer::SET_CONSTANT( GFXShaderConstHandle* handle, const T& fv, + GenericConstBuffer *vBuffer, GenericConstBuffer *pBuffer ) +{ + AssertFatal(static_cast(handle), "Incorrect const buffer type!"); + const GFXD3D11ShaderConstHandle* h = static_cast(handle); + AssertFatal(h, "Handle is NULL!" ); + AssertFatal(h->isValid(), "Handle is not valid!" ); + AssertFatal(!h->isSampler(), "Handle is sampler constant!" ); + AssertFatal(!mShader.isNull(), "Buffer's shader is null!" ); + AssertFatal(!h->mShader.isNull(), "Handle's shader is null!" ); + AssertFatal(h->mShader.getPointer() == mShader.getPointer(), "Mismatched shaders!"); + + if ( h->mInstancingConstant ) + { + dMemcpy( mInstPtr+h->mPixelHandle.offset, &fv, sizeof( fv ) ); + return; + } + if (h->mVertexConstant) + vBuffer->set(h->mVertexHandle, fv); + if (h->mPixelConstant) + pBuffer->set(h->mPixelHandle, fv); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const F32 fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point2F& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point3F& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point4F& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const PlaneF& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const ColorF& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const S32 f) +{ + // This is the only type that is allowed to be used + // with a sampler shader constant type, but it is only + // allowed to be set from GLSL. + // + // So we ignore it here... all other cases will assert. + // + if ( ((GFXD3D11ShaderConstHandle*)handle)->isSampler() ) + return; + + SET_CONSTANT(handle, f, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point2I& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point3I& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const Point4I& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const AlignedArray& fv) +{ + SET_CONSTANT(handle, fv, mVertexConstBuffer, mPixelConstBuffer); +} +#undef SET_CONSTANT + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const MatrixF& mat, const GFXShaderConstType matrixType) +{ + AssertFatal(handle, "Handle is NULL!" ); + AssertFatal(handle->isValid(), "Handle is not valid!" ); + + AssertFatal(static_cast(handle), "Incorrect const buffer type!"); + const GFXD3D11ShaderConstHandle* h = static_cast(handle); + AssertFatal(!h->isSampler(), "Handle is sampler constant!" ); + AssertFatal(h->mShader == mShader, "Mismatched shaders!"); + + MatrixF transposed; + mat.transposeTo(transposed); + + if (h->mInstancingConstant) + { + if ( matrixType == GFXSCT_Float4x4 ) + dMemcpy( mInstPtr+h->mPixelHandle.offset, mat, sizeof( mat ) ); + + // TODO: Support 3x3 and 2x2 matricies? + return; + } + + if (h->mVertexConstant) + mVertexConstBuffer->set(h->mVertexHandle, transposed, matrixType); + if (h->mPixelConstant) + mPixelConstBuffer->set(h->mPixelHandle, transposed, matrixType); +} + +void GFXD3D11ShaderConstBuffer::set(GFXShaderConstHandle* handle, const MatrixF* mat, const U32 arraySize, const GFXShaderConstType matrixType) +{ + AssertFatal(handle, "Handle is NULL!" ); + AssertFatal(handle->isValid(), "Handle is not valid!" ); + + AssertFatal(static_cast(handle), "Incorrect const buffer type!"); + const GFXD3D11ShaderConstHandle* h = static_cast(handle); + AssertFatal(!h->isSampler(), "Handle is sampler constant!" ); + AssertFatal(h->mShader == mShader, "Mismatched shaders!"); + + static Vector transposed; + if (arraySize > transposed.size()) + transposed.setSize(arraySize); + for (U32 i = 0; i < arraySize; i++) + mat[i].transposeTo(transposed[i]); + + // TODO: Maybe support this in the future? + if (h->mInstancingConstant) + return; + + if (h->mVertexConstant) + mVertexConstBuffer->set(h->mVertexHandle, transposed.begin(), arraySize, matrixType); + if (h->mPixelConstant) + mPixelConstBuffer->set(h->mPixelHandle, transposed.begin(), arraySize, matrixType); +} + +const String GFXD3D11ShaderConstBuffer::describeSelf() const +{ + String ret; + ret = String(" GFXD3D11ShaderConstBuffer\n"); + + for (U32 i = 0; i < mVertexConstBufferLayout->getParameterCount(); i++) + { + GenericConstBufferLayout::ParamDesc pd; + mVertexConstBufferLayout->getDesc(i, pd); + + ret += String::ToString(" Constant name: %s", pd.name); + } + + return ret; +} + +void GFXD3D11ShaderConstBuffer::zombify() +{ +} + +void GFXD3D11ShaderConstBuffer::resurrect() +{ +} + +bool GFXD3D11ShaderConstBuffer::isDirty() +{ + bool ret = mVertexConstBuffer->isDirty(); + ret |= mPixelConstBuffer->isDirty(); + + return ret; +} + +void GFXD3D11ShaderConstBuffer::activate( GFXD3D11ShaderConstBuffer *prevShaderBuffer ) +{ + PROFILE_SCOPE(GFXD3D11ShaderConstBuffer_activate); + + // NOTE: This is a really critical function as it gets + // called between every draw call to update the constants. + // + // Alot of the calls here are inlined... be careful + // what you change. + + // If the buffer has changed we need to compare it + // with the new buffer to see if we can skip copying + // equal buffer content. + // + // If the buffer hasn't changed then we only will + // be copying the changes that have occured since + // the last activate call. + if ( prevShaderBuffer != this ) + { + // If the previous buffer is dirty, than we can't compare + // against it, because it hasn't sent its contents to the + // card yet and must be copied. + if ( prevShaderBuffer && !prevShaderBuffer->isDirty() ) + { + PROFILE_SCOPE(GFXD3D11ShaderConstBuffer_activate_dirty_check_1); + // If the buffer content is equal then we set the dirty + // flag to false knowing the current state of the card matches + // the new buffer. + // + // If the content is not equal we set the dirty flag to + // true which causes the full content of the buffer to be + // copied to the card. + // + mVertexConstBuffer->setDirty( !prevShaderBuffer->mVertexConstBuffer->isEqual( mVertexConstBuffer ) ); + mPixelConstBuffer->setDirty( !prevShaderBuffer->mPixelConstBuffer->isEqual( mPixelConstBuffer ) ); + } + else + { + // This happens rarely... but it can happen. + // We copy the entire dirty state to the card. + PROFILE_SCOPE(GFXD3D11ShaderConstBuffer_activate_dirty_check_2); + + mVertexConstBuffer->setDirty( true ); + mPixelConstBuffer->setDirty( true ); + } + } + + ID3D11DeviceContext* devCtx = D3D11DEVICECONTEXT; + + D3D11_MAPPED_SUBRESOURCE pConstData; + ZeroMemory(&pConstData, sizeof(D3D11_MAPPED_SUBRESOURCE)); + + const U8* buf; + HRESULT hr; + U32 nbBuffers = 0; + if(mVertexConstBuffer->isDirty()) + { + const Vector &subBuffers = mVertexConstBufferLayout->getSubBufferDesc(); + // TODO: This is not very effecient updating the whole lot, re-implement the dirty system to work with multiple constant buffers. + // TODO: Implement DX 11.1 UpdateSubresource1 which supports updating ranges with constant buffers + buf = mVertexConstBuffer->getEntireBuffer(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + const ConstSubBufferDesc &desc = subBuffers[i]; + devCtx->UpdateSubresource(mConstantBuffersV[i], 0, NULL, buf + desc.start, desc.size, 0); + nbBuffers++; + } + + devCtx->VSSetConstantBuffers(0, nbBuffers, mConstantBuffersV); + } + + nbBuffers = 0; + + if(mPixelConstBuffer->isDirty()) + { + const Vector &subBuffers = mPixelConstBufferLayout->getSubBufferDesc(); + // TODO: This is not very effecient updating the whole lot, re-implement the dirty system to work with multiple constant buffers. + // TODO: Implement DX 11.1 UpdateSubresource1 which supports updating ranges with constant buffers + buf = mPixelConstBuffer->getEntireBuffer(); + for (U32 i = 0; i < subBuffers.size(); ++i) + { + const ConstSubBufferDesc &desc = subBuffers[i]; + devCtx->UpdateSubresource(mConstantBuffersP[i], 0, NULL, buf + desc.start, desc.size, 0); + nbBuffers++; + } + + devCtx->PSSetConstantBuffers(0, nbBuffers, mConstantBuffersP); + } + + #ifdef TORQUE_DEBUG + // Make sure all the constants for this buffer were assigned. + if(mWasLost) + { + mVertexConstBuffer->assertUnassignedConstants( mShader->getVertexShaderFile().c_str() ); + mPixelConstBuffer->assertUnassignedConstants( mShader->getPixelShaderFile().c_str() ); + } + #endif + + // Clear the lost state. + mWasLost = false; +} + +void GFXD3D11ShaderConstBuffer::onShaderReload( GFXD3D11Shader *shader ) +{ + AssertFatal( shader == mShader, "GFXD3D11ShaderConstBuffer::onShaderReload is hosed!" ); + + // release constant buffers + for (U32 i = 0; i < CBUFFER_MAX; ++i) + { + SAFE_RELEASE(mConstantBuffersP[i]); + SAFE_RELEASE(mConstantBuffersV[i]); + } + + SAFE_DELETE( mVertexConstBuffer ); + SAFE_DELETE( mPixelConstBuffer ); + + AssertFatal( mVertexConstBufferLayout == shader->mVertexConstBufferLayout, "GFXD3D11ShaderConstBuffer::onShaderReload is hosed!" ); + AssertFatal( mPixelConstBufferLayout == shader->mPixelConstBufferLayout, "GFXD3D11ShaderConstBuffer::onShaderReload is hosed!" ); + + mVertexConstBuffer = new GenericConstBuffer( mVertexConstBufferLayout ); + mPixelConstBuffer = new GenericConstBuffer( mPixelConstBufferLayout ); + + _createBuffers(); + + // Set the lost state. + mWasLost = true; +} + +//------------------------------------------------------------------------------ + +GFXD3D11Shader::GFXD3D11Shader() +{ + VECTOR_SET_ASSOCIATION( mShaderConsts ); + + AssertFatal(D3D11DEVICE, "Invalid device for shader."); + mVertShader = NULL; + mPixShader = NULL; + mVertexConstBufferLayout = NULL; + mPixelConstBufferLayout = NULL; + + if( smD3DInclude == NULL ) + smD3DInclude = new gfxD3D11Include; +} + +//------------------------------------------------------------------------------ + +GFXD3D11Shader::~GFXD3D11Shader() +{ + for (HandleMap::Iterator i = mHandles.begin(); i != mHandles.end(); i++) + delete i->value; + + // delete const buffer layouts + SAFE_DELETE(mVertexConstBufferLayout); + SAFE_DELETE(mPixelConstBufferLayout); + + // release shaders + SAFE_RELEASE(mVertShader); + SAFE_RELEASE(mPixShader); + //maybe add SAFE_RELEASE(mVertexCode) ? +} + +bool GFXD3D11Shader::_init() +{ + PROFILE_SCOPE( GFXD3D11Shader_Init ); + + SAFE_RELEASE(mVertShader); + SAFE_RELEASE(mPixShader); + + // Create the macro array including the system wide macros. + const U32 macroCount = smGlobalMacros.size() + mMacros.size() + 2; + FrameTemp d3dMacros( macroCount ); + + for ( U32 i=0; i < smGlobalMacros.size(); i++ ) + { + d3dMacros[i].Name = smGlobalMacros[i].name.c_str(); + d3dMacros[i].Definition = smGlobalMacros[i].value.c_str(); + } + + for ( U32 i=0; i < mMacros.size(); i++ ) + { + d3dMacros[i+smGlobalMacros.size()].Name = mMacros[i].name.c_str(); + d3dMacros[i+smGlobalMacros.size()].Definition = mMacros[i].value.c_str(); + } + + //TODO support D3D_FEATURE_LEVEL properly with shaders instead of hard coding at hlsl 5 + d3dMacros[macroCount - 2].Name = "TORQUE_SM"; + d3dMacros[macroCount - 2].Definition = "50"; + + memset(&d3dMacros[macroCount - 1], 0, sizeof(D3D_SHADER_MACRO)); + + if ( !mVertexConstBufferLayout ) + mVertexConstBufferLayout = new GFXD3D11ConstBufferLayout(); + else + mVertexConstBufferLayout->clear(); + + if ( !mPixelConstBufferLayout ) + mPixelConstBufferLayout = new GFXD3D11ConstBufferLayout(); + else + mPixelConstBufferLayout->clear(); + + + mSamplerDescriptions.clear(); + mShaderConsts.clear(); + + if ( !Con::getBoolVariable( "$shaders::forceLoadCSF", false ) ) + { + if (!mVertexFile.isEmpty() && !_compileShader( mVertexFile, "vs_5_0", d3dMacros, mVertexConstBufferLayout, mSamplerDescriptions ) ) + return false; + + if (!mPixelFile.isEmpty() && !_compileShader( mPixelFile, "ps_5_0", d3dMacros, mPixelConstBufferLayout, mSamplerDescriptions ) ) + return false; + + } + else + { + if ( !_loadCompiledOutput( mVertexFile, "vs_5_0", mVertexConstBufferLayout, mSamplerDescriptions ) ) + { + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::init - Unable to load precompiled vertex shader for '%s'.", mVertexFile.getFullPath().c_str() ); + + return false; + } + + if ( !_loadCompiledOutput( mPixelFile, "ps_5_0", mPixelConstBufferLayout, mSamplerDescriptions ) ) + { + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::init - Unable to load precompiled pixel shader for '%s'.", mPixelFile.getFullPath().c_str() ); + + return false; + } + } + + // Existing handles are resored to an uninitialized state. + // Those that are found when parsing the layout parameters + // will then be re-initialized. + HandleMap::Iterator iter = mHandles.begin(); + for ( ; iter != mHandles.end(); iter++ ) + (iter->value)->clear(); + + _buildShaderConstantHandles(mVertexConstBufferLayout, true); + _buildShaderConstantHandles(mPixelConstBufferLayout, false); + + _buildSamplerShaderConstantHandles( mSamplerDescriptions ); + _buildInstancingShaderConstantHandles(); + + // Notify any existing buffers that the buffer + // layouts have changed and they need to update. + Vector::iterator biter = mActiveBuffers.begin(); + for ( ; biter != mActiveBuffers.end(); biter++ ) + ((GFXD3D11ShaderConstBuffer*)(*biter))->onShaderReload( this ); + + return true; +} + +bool GFXD3D11Shader::_compileShader( const Torque::Path &filePath, + const String& target, + const D3D_SHADER_MACRO *defines, + GenericConstBufferLayout* bufferLayout, + Vector &samplerDescriptions ) +{ + PROFILE_SCOPE( GFXD3D11Shader_CompileShader ); + + using namespace Torque; + + HRESULT res = E_FAIL; + ID3DBlob* code = NULL; + ID3DBlob* errorBuff = NULL; + ID3D11ShaderReflection* reflectionTable = NULL; + +#ifdef TORQUE_DEBUG + U32 flags = D3DCOMPILE_DEBUG | D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_WARNINGS_ARE_ERRORS; +#else + U32 flags = D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_OPTIMIZATION_LEVEL3; //TODO double check load times with D3DCOMPILE_OPTIMIZATION_LEVEL3 + //recommended flags for NSight, uncomment to use. NSight should be used in release mode only. *Still works with above flags however + //flags = D3DCOMPILE_DEBUG | D3DCOMPILE_ENABLE_STRICTNESS | D3DCOMPILE_PREFER_FLOW_CONTROL | D3DCOMPILE_SKIP_OPTIMIZATION; +#endif + +#ifdef D3D11_DEBUG_SPEW + Con::printf( "Compiling Shader: '%s'", filePath.getFullPath().c_str() ); +#endif + + // Is it an HLSL shader? + if(filePath.getExtension().equal("hlsl", String::NoCase)) + { + // Set this so that the D3DInclude::Open will have this + // information for relative paths. + smD3DInclude->setPath(filePath.getRootAndPath()); + + FileStream s; + if (!s.open(filePath, Torque::FS::File::Read)) + { + AssertISV(false, avar("GFXD3D11Shader::initShader - failed to open shader '%s'.", filePath.getFullPath().c_str())); + + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::_compileShader - Failed to open shader file '%s'.", filePath.getFullPath().c_str() ); + + return false; + } + + // Convert the path which might have virtualized + // mount paths to a real file system path. + Torque::Path realPath; + if (!FS::GetFSPath( filePath, realPath)) + realPath = filePath; + + U32 bufSize = s.getStreamSize(); + + FrameAllocatorMarker fam; + char *buffer = NULL; + + buffer = (char*)fam.alloc(bufSize + 1); + s.read(bufSize, buffer); + buffer[bufSize] = 0; + + res = D3DCompile(buffer, bufSize, realPath.getFullPath().c_str(), defines, smD3DInclude, "main", target, flags, 0, &code, &errorBuff); + + } + + // Is it a precompiled obj shader? + else if(filePath.getExtension().equal("obj", String::NoCase)) + { + FileStream s; + if(!s.open(filePath, Torque::FS::File::Read)) + { + AssertISV(false, avar("GFXD3D11Shader::initShader - failed to open shader '%s'.", filePath.getFullPath().c_str())); + + if ( smLogErrors ) + Con::errorf( "GFXD3D11Shader::_compileShader - Failed to open shader file '%s'.", filePath.getFullPath().c_str() ); + + return false; + } + + res = D3DCreateBlob(s.getStreamSize(), &code); + AssertISV(SUCCEEDED(res), "Unable to create buffer!"); + s.read(s.getStreamSize(), code->GetBufferPointer()); + } + else + { + if (smLogErrors) + Con::errorf("GFXD3D11Shader::_compileShader - Unsupported shader file type '%s'.", filePath.getFullPath().c_str()); + + return false; + } + + if(errorBuff) + { + // remove \n at end of buffer + U8 *buffPtr = (U8*) errorBuff->GetBufferPointer(); + U32 len = dStrlen( (const char*) buffPtr ); + buffPtr[len-1] = '\0'; + + if(FAILED(res)) + { + if(smLogErrors) + Con::errorf("failed to compile shader: %s", buffPtr); + } + else + { + if(smLogWarnings) + Con::errorf("shader compiled with warning(s): %s", buffPtr); + } + } + else if (code == NULL && smLogErrors) + Con::errorf( "GFXD3D11Shader::_compileShader - no compiled code produced; possibly missing file '%s'.", filePath.getFullPath().c_str() ); + + AssertISV(SUCCEEDED(res), "Unable to compile shader!"); + + if(code != NULL) + { +#ifndef TORQUE_SHIPPING + + if(gDisassembleAllShaders) + { + ID3DBlob* disassem = NULL; + D3DDisassemble(code->GetBufferPointer(), code->GetBufferSize(), 0, NULL, &disassem); + mDissasembly = (const char*)disassem->GetBufferPointer(); + + String filename = filePath.getFullPath(); + filename.replace( ".hlsl", "_dis.txt" ); + + FileStream *fstream = FileStream::createAndOpen( filename, Torque::FS::File::Write ); + if ( fstream ) + { + fstream->write( mDissasembly ); + fstream->close(); + delete fstream; + } + + SAFE_RELEASE(disassem); + } + +#endif + + if (target.compare("ps_", 3) == 0) + res = D3D11DEVICE->CreatePixelShader(code->GetBufferPointer(), code->GetBufferSize(), NULL, &mPixShader); + else if (target.compare("vs_", 3) == 0) + res = D3D11DEVICE->CreateVertexShader(code->GetBufferPointer(), code->GetBufferSize(), NULL, &mVertShader); + + if (FAILED(res)) + { + AssertFatal(false, "D3D11Shader::_compilershader- failed to create shader"); + } + + if(res == S_OK){ + HRESULT reflectionResult = D3DReflect(code->GetBufferPointer(), code->GetBufferSize(), IID_ID3D11ShaderReflection, (void**)&reflectionTable); + if(FAILED(reflectionResult)) + AssertFatal(false, "D3D11Shader::_compilershader - Failed to get shader reflection table interface"); + } + + if(res == S_OK) + _getShaderConstants(reflectionTable, bufferLayout, samplerDescriptions); + +#ifdef TORQUE_ENABLE_CSF_GENERATION + + // Ok, we've got a valid shader and constants, let's write them all out. + if (!_saveCompiledOutput(filePath, code, bufferLayout) && smLogErrors) + Con::errorf( "GFXD3D11Shader::_compileShader - Unable to save shader compile output for: %s", + filePath.getFullPath().c_str()); +#endif + + if(FAILED(res) && smLogErrors) + Con::errorf("GFXD3D11Shader::_compileShader - Unable to create shader for '%s'.", filePath.getFullPath().c_str()); + } + + //bool result = code && SUCCEEDED(res) && HasValidConstants; + bool result = code && SUCCEEDED(res); + +#ifdef TORQUE_DEBUG + if (target.compare("vs_", 3) == 0) + { + String vertShader = mVertexFile.getFileName(); + mVertShader->SetPrivateData(WKPDID_D3DDebugObjectName, vertShader.size(), vertShader.c_str()); + } + else if (target.compare("ps_", 3) == 0) + { + String pixelShader = mPixelFile.getFileName(); + mPixShader->SetPrivateData(WKPDID_D3DDebugObjectName, pixelShader.size(), pixelShader.c_str()); + } +#endif + + SAFE_RELEASE(code); + SAFE_RELEASE(reflectionTable); + SAFE_RELEASE(errorBuff); + + return result; +} +void GFXD3D11Shader::_getShaderConstants( ID3D11ShaderReflection *table, + GenericConstBufferLayout *bufferLayoutIn, + Vector &samplerDescriptions ) +{ + PROFILE_SCOPE( GFXD3D11Shader_GetShaderConstants ); + + AssertFatal(table, "NULL constant table not allowed, is this an assembly shader?"); + + GFXD3D11ConstBufferLayout *bufferLayout = (GFXD3D11ConstBufferLayout*)bufferLayoutIn; + Vector &subBuffers = bufferLayout->getSubBufferDesc(); + subBuffers.clear(); + + D3D11_SHADER_DESC tableDesc; + HRESULT hr = table->GetDesc(&tableDesc); + if (FAILED(hr)) + { + AssertFatal(false, "Shader Reflection table unable to be created"); + } + + //offset for sub constant buffers + U32 bufferOffset = 0; + for (U32 i = 0; i < tableDesc.ConstantBuffers; i++) + { + ID3D11ShaderReflectionConstantBuffer* constantBuffer = table->GetConstantBufferByIndex(i); + D3D11_SHADER_BUFFER_DESC constantBufferDesc; + + if (constantBuffer->GetDesc(&constantBufferDesc) == S_OK) + { + + #ifdef TORQUE_DEBUG + AssertFatal(constantBufferDesc.Type == D3D_CT_CBUFFER, "Only scalar cbuffers supported for now."); + + if (dStrcmp(constantBufferDesc.Name, "$Globals") != 0 && dStrcmp(constantBufferDesc.Name, "$Params") != 0) + AssertFatal(false, "Only $Global and $Params cbuffer supported for now."); + #endif + #ifdef D3D11_DEBUG_SPEW + Con::printf("Constant Buffer Name: %s", constantBufferDesc.Name); + #endif + + for(U32 j =0; j< constantBufferDesc.Variables; j++) + { + GFXShaderConstDesc desc; + ID3D11ShaderReflectionVariable* variable = constantBuffer->GetVariableByIndex(j); + D3D11_SHADER_VARIABLE_DESC variableDesc; + D3D11_SHADER_TYPE_DESC variableTypeDesc; + + variable->GetDesc(&variableDesc); + + ID3D11ShaderReflectionType* variableType =variable->GetType(); + + variableType->GetDesc(&variableTypeDesc); + desc.name = String(variableDesc.Name); + // Prepend a "$" if it doesn't exist. Just to make things consistent. + if (desc.name.find("$") != 0) + desc.name = String::ToString("$%s", desc.name.c_str()); + + bool unusedVar = variableDesc.uFlags & D3D_SVF_USED ? false : true; + + if (variableTypeDesc.Elements == 0) + desc.arraySize = 1; + else + desc.arraySize = variableTypeDesc.Elements; + + #ifdef D3D11_DEBUG_SPEW + Con::printf("Variable Name %s:, offset: %d, size: %d, constantDesc.Elements: %d", desc.name.c_str(), variableDesc.StartOffset, variableDesc.Size, desc.arraySize); + #endif + if (_convertShaderVariable(variableTypeDesc, desc)) + { + //The HLSL compiler for 4.0 and above doesn't strip out unused registered constants. We'll have to do it manually + if (!unusedVar) + { + mShaderConsts.push_back(desc); + U32 alignBytes = getAlignmentValue(desc.constType); + U32 paramSize = variableDesc.Size; + bufferLayout->addParameter( desc.name, + desc.constType, + variableDesc.StartOffset + bufferOffset, + paramSize, + desc.arraySize, + alignBytes); + + } //unusedVar + } //_convertShaderVariable + } //constantBufferDesc.Variables + + // fill out our const sub buffer sizes etc + ConstSubBufferDesc subBufferDesc; + subBufferDesc.size = constantBufferDesc.Size; + subBufferDesc.start = bufferOffset; + subBuffers.push_back(subBufferDesc); + // increase our bufferOffset by the constant buffer size + bufferOffset += constantBufferDesc.Size; + + } + else + AssertFatal(false, "Unable to get shader constant description! (may need more elements of constantDesc"); + } + + // Set buffer size to the aligned size + bufferLayout->setSize(bufferOffset); + + + //get the sampler descriptions from the resource binding description + U32 resourceCount = tableDesc.BoundResources; + for (U32 i = 0; i < resourceCount; i++) + { + GFXShaderConstDesc desc; + D3D11_SHADER_INPUT_BIND_DESC bindDesc; + table->GetResourceBindingDesc(i, &bindDesc); + + switch (bindDesc.Type) + { + case D3D_SIT_SAMPLER: + // Prepend a "$" if it doesn't exist. Just to make things consistent. + desc.name = String(bindDesc.Name); + if (desc.name.find("$") != 0) + desc.name = String::ToString("$%s", desc.name.c_str()); + desc.constType = GFXSCT_Sampler; + desc.arraySize = bindDesc.BindPoint; + samplerDescriptions.push_back(desc); + break; + + } + } + +} + +bool GFXD3D11Shader::_convertShaderVariable(const D3D11_SHADER_TYPE_DESC &typeDesc, GFXShaderConstDesc &desc) +{ + switch (typeDesc.Type) + { + case D3D_SVT_INT: + { + switch (typeDesc.Class) + { + case D3D_SVC_SCALAR: + desc.constType = GFXSCT_Int; + break; + case D3D_SVC_VECTOR: + { + switch (typeDesc.Columns) + { + case 1: + desc.constType = GFXSCT_Int; + break; + case 2: + desc.constType = GFXSCT_Int2; + break; + case 3: + desc.constType = GFXSCT_Int3; + break; + case 4: + desc.constType = GFXSCT_Int4; + break; + } + } + break; + } + break; + } + case D3D_SVT_FLOAT: + { + switch (typeDesc.Class) + { + case D3D_SVC_SCALAR: + desc.constType = GFXSCT_Float; + break; + case D3D_SVC_VECTOR: + { + switch (typeDesc.Columns) + { + case 1: + desc.constType = GFXSCT_Float; + break; + case 2: + desc.constType = GFXSCT_Float2; + break; + case 3: + desc.constType = GFXSCT_Float3; + break; + case 4: + desc.constType = GFXSCT_Float4; + break; + } + } + break; + case D3D_SVC_MATRIX_ROWS: + case D3D_SVC_MATRIX_COLUMNS: + { + switch (typeDesc.Columns) + { + case 3: + if (typeDesc.Rows == 3) + { + desc.constType = GFXSCT_Float3x3; + } + break; + case 4: + if (typeDesc.Rows == 4) + { + desc.constType = GFXSCT_Float4x4; + } + break; + } + } + break; + case D3D_SVC_OBJECT: + case D3D_SVC_STRUCT: + return false; + } + } + break; + + default: + AssertFatal(false, "Unknown shader constant class enum"); + break; + } + + return true; +} + +const U32 GFXD3D11Shader::smCompiledShaderTag = MakeFourCC('t','c','s','f'); + +bool GFXD3D11Shader::_saveCompiledOutput( const Torque::Path &filePath, + ID3DBlob *buffer, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ) +{ + Torque::Path outputPath(filePath); + outputPath.setExtension("csf"); // "C"ompiled "S"hader "F"ile (fancy!) + + FileStream f; + if (!f.open(outputPath, Torque::FS::File::Write)) + return false; + if (!f.write(smCompiledShaderTag)) + return false; + // We could reverse engineer the structure in the compiled output, but this + // is a bit easier because we can just read it into the struct that we want. + if (!bufferLayout->write(&f)) + return false; + + U32 bufferSize = buffer->GetBufferSize(); + if (!f.write(bufferSize)) + return false; + if (!f.write(bufferSize, buffer->GetBufferPointer())) + return false; + + // Write out sampler descriptions. + + f.write( samplerDescriptions.size() ); + + for ( U32 i = 0; i < samplerDescriptions.size(); i++ ) + { + f.write( samplerDescriptions[i].name ); + f.write( (U32)(samplerDescriptions[i].constType) ); + f.write( samplerDescriptions[i].arraySize ); + } + + f.close(); + + return true; +} + +bool GFXD3D11Shader::_loadCompiledOutput( const Torque::Path &filePath, + const String &target, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ) +{ + Torque::Path outputPath(filePath); + outputPath.setExtension("csf"); // "C"ompiled "S"hader "F"ile (fancy!) + + FileStream f; + if (!f.open(outputPath, Torque::FS::File::Read)) + return false; + U32 fileTag; + if (!f.read(&fileTag)) + return false; + if (fileTag != smCompiledShaderTag) + return false; + if (!bufferLayout->read(&f)) + return false; + U32 bufferSize; + if (!f.read(&bufferSize)) + return false; + U32 waterMark = FrameAllocator::getWaterMark(); + DWORD* buffer = static_cast(FrameAllocator::alloc(bufferSize)); + if (!f.read(bufferSize, buffer)) + return false; + + // Read sampler descriptions. + + U32 samplerCount; + f.read( &samplerCount ); + + for ( U32 i = 0; i < samplerCount; i++ ) + { + GFXShaderConstDesc samplerDesc; + f.read( &(samplerDesc.name) ); + f.read( (U32*)&(samplerDesc.constType) ); + f.read( &(samplerDesc.arraySize) ); + + samplerDescriptions.push_back( samplerDesc ); + } + + f.close(); + + HRESULT res; + if (target.compare("ps_", 3) == 0) + res = D3D11DEVICE->CreatePixelShader(buffer, bufferSize, NULL, &mPixShader); + else + res = D3D11DEVICE->CreateVertexShader(buffer, bufferSize, NULL, &mVertShader); + AssertFatal(SUCCEEDED(res), "Unable to load shader!"); + + FrameAllocator::setWaterMark(waterMark); + return SUCCEEDED(res); +} + +void GFXD3D11Shader::_buildShaderConstantHandles(GenericConstBufferLayout* layout, bool vertexConst) +{ + for (U32 i = 0; i < layout->getParameterCount(); i++) + { + GenericConstBufferLayout::ParamDesc pd; + layout->getDesc(i, pd); + + GFXD3D11ShaderConstHandle* handle; + HandleMap::Iterator j = mHandles.find(pd.name); + + if (j != mHandles.end()) + { + handle = j->value; + handle->mShader = this; + handle->setValid( true ); + } + else + { + handle = new GFXD3D11ShaderConstHandle(); + handle->mShader = this; + mHandles[pd.name] = handle; + handle->setValid( true ); + } + + if (vertexConst) + { + handle->mVertexConstant = true; + handle->mVertexHandle = pd; + } + else + { + handle->mPixelConstant = true; + handle->mPixelHandle = pd; + } + } +} + +void GFXD3D11Shader::_buildSamplerShaderConstantHandles( Vector &samplerDescriptions ) +{ + Vector::iterator iter = samplerDescriptions.begin(); + for ( ; iter != samplerDescriptions.end(); iter++ ) + { + const GFXShaderConstDesc &desc = *iter; + + AssertFatal( desc.constType == GFXSCT_Sampler || + desc.constType == GFXSCT_SamplerCube, + "GFXD3D11Shader::_buildSamplerShaderConstantHandles - Invalid samplerDescription type!" ); + + GFXD3D11ShaderConstHandle *handle; + HandleMap::Iterator j = mHandles.find(desc.name); + + if ( j != mHandles.end() ) + handle = j->value; + else + { + handle = new GFXD3D11ShaderConstHandle(); + mHandles[desc.name] = handle; + } + + handle->mShader = this; + handle->setValid( true ); + handle->mPixelConstant = true; + handle->mPixelHandle.name = desc.name; + handle->mPixelHandle.constType = desc.constType; + handle->mPixelHandle.offset = desc.arraySize; + } +} + +void GFXD3D11Shader::_buildInstancingShaderConstantHandles() +{ + // If we have no instancing than just return + if (!mInstancingFormat) + return; + + U32 offset = 0; + for ( U32 i=0; i < mInstancingFormat->getElementCount(); i++ ) + { + const GFXVertexElement &element = mInstancingFormat->getElement( i ); + + String constName = String::ToString( "$%s", element.getSemantic().c_str() ); + + GFXD3D11ShaderConstHandle *handle; + HandleMap::Iterator j = mHandles.find( constName ); + + if ( j != mHandles.end() ) + handle = j->value; + else + { + handle = new GFXD3D11ShaderConstHandle(); + mHandles[ constName ] = handle; + } + + handle->mShader = this; + handle->setValid( true ); + handle->mInstancingConstant = true; + + // We shouldn't have an instancing constant that is also + // a vertex or pixel constant! This means the shader features + // are confused as to what is instanced. + // + AssertFatal( !handle->mVertexConstant && + !handle->mPixelConstant, + "GFXD3D11Shader::_buildInstancingShaderConstantHandles - Bad instanced constant!" ); + + // HACK: The GFXD3D11ShaderConstHandle will check mVertexConstant then + // fall back to reading the mPixelHandle values. We depend on this here + // and store the data we need in the mPixelHandle constant although its + // not a pixel shader constant. + // + handle->mPixelHandle.name = constName; + handle->mPixelHandle.offset = offset; + + // If this is a matrix we will have 2 or 3 more of these + // semantics with the same name after it. + for ( ; i < mInstancingFormat->getElementCount(); i++ ) + { + const GFXVertexElement &nextElement = mInstancingFormat->getElement( i ); + if ( nextElement.getSemantic() != element.getSemantic() ) + { + i--; + break; + } + offset += nextElement.getSizeInBytes(); + } + } +} + +GFXShaderConstBufferRef GFXD3D11Shader::allocConstBuffer() +{ + if (mVertexConstBufferLayout && mPixelConstBufferLayout) + { + GFXD3D11ShaderConstBuffer* buffer = new GFXD3D11ShaderConstBuffer(this, mVertexConstBufferLayout, mPixelConstBufferLayout); + mActiveBuffers.push_back( buffer ); + buffer->registerResourceWithDevice(getOwningDevice()); + return buffer; + } + + return NULL; +} + +/// Returns a shader constant handle for name, if the variable doesn't exist NULL is returned. +GFXShaderConstHandle* GFXD3D11Shader::getShaderConstHandle(const String& name) +{ + HandleMap::Iterator i = mHandles.find(name); + if ( i != mHandles.end() ) + { + return i->value; + } + else + { + GFXD3D11ShaderConstHandle *handle = new GFXD3D11ShaderConstHandle(); + handle->setValid( false ); + handle->mShader = this; + mHandles[name] = handle; + + return handle; + } +} + +GFXShaderConstHandle* GFXD3D11Shader::findShaderConstHandle(const String& name) +{ + HandleMap::Iterator i = mHandles.find(name); + if(i != mHandles.end()) + return i->value; + else + { + return NULL; + } +} + +const Vector& GFXD3D11Shader::getShaderConstDesc() const +{ + return mShaderConsts; +} + +U32 GFXD3D11Shader::getAlignmentValue(const GFXShaderConstType constType) const +{ + const U32 mRowSizeF = 16; + const U32 mRowSizeI = 16; + + switch (constType) + { + case GFXSCT_Float : + case GFXSCT_Float2 : + case GFXSCT_Float3 : + case GFXSCT_Float4 : + return mRowSizeF; + break; + // Matrices + case GFXSCT_Float2x2 : + return mRowSizeF * 2; + break; + case GFXSCT_Float3x3 : + return mRowSizeF * 3; + break; + case GFXSCT_Float4x4 : + return mRowSizeF * 4; + break; + //// Scalar + case GFXSCT_Int : + case GFXSCT_Int2 : + case GFXSCT_Int3 : + case GFXSCT_Int4 : + return mRowSizeI; + break; + default: + AssertFatal(false, "Unsupported type!"); + return 0; + break; + } +} + +void GFXD3D11Shader::zombify() +{ + // Shaders don't need zombification +} + +void GFXD3D11Shader::resurrect() +{ + // Shaders are never zombies, and therefore don't have to be brought back. +} diff --git a/Engine/source/gfx/D3D11/gfxD3D11Shader.h b/Engine/source/gfx/D3D11/gfxD3D11Shader.h new file mode 100644 index 0000000000..2e4074a8f5 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Shader.h @@ -0,0 +1,471 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11SHADER_H_ +#define _GFXD3D11SHADER_H_ + +#include + +#include "core/util/path.h" +#include "core/util/tDictionary.h" +#include "gfx/gfxShader.h" +#include "gfx/gfxResource.h" +#include "gfx/genericConstBuffer.h" +#include "gfx/D3D11/gfxD3D11Device.h" + +class GFXD3D11Shader; + +enum CONST_CLASS +{ + D3DPC_SCALAR, + D3DPC_VECTOR, + D3DPC_MATRIX_ROWS, + D3DPC_MATRIX_COLUMNS, + D3DPC_OBJECT, + D3DPC_STRUCT +}; + +enum CONST_TYPE +{ + D3DPT_VOID, + D3DPT_BOOL, + D3DPT_INT, + D3DPT_FLOAT, + D3DPT_STRING, + D3DPT_TEXTURE, + D3DPT_TEXTURE1D, + D3DPT_TEXTURE2D, + D3DPT_TEXTURE3D, + D3DPT_TEXTURECUBE, + D3DPT_SAMPLER, + D3DPT_SAMPLER1D, + D3DPT_SAMPLER2D, + D3DPT_SAMPLER3D, + D3DPT_SAMPLERCUBE, + D3DPT_PIXELSHADER, + D3DPT_VERTEXSHADER, + D3DPT_PIXELFRAGMENT, + D3DPT_VERTEXFRAGMENT +}; + +enum REGISTER_TYPE +{ + D3DRS_BOOL, + D3DRS_INT4, + D3DRS_FLOAT4, + D3DRS_SAMPLER +}; + +struct ConstantDesc +{ + String Name; + S32 RegisterIndex; + S32 RegisterCount; + S32 Rows; + S32 Columns; + S32 Elements; + S32 StructMembers; + REGISTER_TYPE RegisterSet; + CONST_CLASS Class; + CONST_TYPE Type; + U32 Bytes; +}; + +class ConstantTable +{ +public: + bool Create(const void* data); + + U32 GetConstantCount() const { return m_constants.size(); } + const String& GetCreator() const { return m_creator; } + + const ConstantDesc* GetConstantByIndex(U32 i) const { return &m_constants[i]; } + const ConstantDesc* GetConstantByName(const String& name) const; + + void ClearConstants() { m_constants.clear(); } + +private: + Vector m_constants; + String m_creator; +}; + +// Structs +struct CTHeader +{ + U32 Size; + U32 Creator; + U32 Version; + U32 Constants; + U32 ConstantInfo; + U32 Flags; + U32 Target; +}; + +struct CTInfo +{ + U32 Name; + U16 RegisterSet; + U16 RegisterIndex; + U16 RegisterCount; + U16 Reserved; + U32 TypeInfo; + U32 DefaultValue; +}; + +struct CTType +{ + U16 Class; + U16 Type; + U16 Rows; + U16 Columns; + U16 Elements; + U16 StructMembers; + U32 StructMemberInfo; +}; + +// Shader instruction opcodes +const U32 SIO_COMMENT = 0x0000FFFE; +const U32 SIO_END = 0x0000FFFF; +const U32 SI_OPCODE_MASK = 0x0000FFFF; +const U32 SI_COMMENTSIZE_MASK = 0x7FFF0000; +const U32 CTAB_CONSTANT = 0x42415443; + +// Member functions +inline bool ConstantTable::Create(const void* data) +{ + const U32* ptr = static_cast(data); + while(*++ptr != SIO_END) + { + if((*ptr & SI_OPCODE_MASK) == SIO_COMMENT) + { + // Check for CTAB comment + U32 comment_size = (*ptr & SI_COMMENTSIZE_MASK) >> 16; + if(*(ptr+1) != CTAB_CONSTANT) + { + ptr += comment_size; + continue; + } + + // Read header + const char* ctab = reinterpret_cast(ptr+2); + size_t ctab_size = (comment_size-1)*4; + + const CTHeader* header = reinterpret_cast(ctab); + if(ctab_size < sizeof(*header) || header->Size != sizeof(*header)) + return false; + m_creator = ctab + header->Creator; + + // Read constants + m_constants.reserve(header->Constants); + const CTInfo* info = reinterpret_cast(ctab + header->ConstantInfo); + for(U32 i = 0; i < header->Constants; ++i) + { + const CTType* type = reinterpret_cast(ctab + info[i].TypeInfo); + + // Fill struct + ConstantDesc desc; + desc.Name = ctab + info[i].Name; + desc.RegisterSet = static_cast(info[i].RegisterSet); + desc.RegisterIndex = info[i].RegisterIndex; + desc.RegisterCount = info[i].RegisterCount; + desc.Rows = type->Rows; + desc.Class = static_cast(type->Class); + desc.Type = static_cast(type->Type); + desc.Columns = type->Columns; + desc.Elements = type->Elements; + desc.StructMembers = type->StructMembers; + desc.Bytes = 4 * desc.Elements * desc.Rows * desc.Columns; + m_constants.push_back(desc); + } + + return true; + } + } + return false; +} + +inline const ConstantDesc* ConstantTable::GetConstantByName(const String& name) const +{ + Vector::const_iterator it; + for(it = m_constants.begin(); it != m_constants.end(); ++it) + { + if(it->Name == name) + return &(*it); + } + return NULL; +} + +/////////////////// Constant Buffers ///////////////////////////// + +// Maximum number of CBuffers ($Globals & $Params) +const U32 CBUFFER_MAX = 2; + +struct ConstSubBufferDesc +{ + U32 start; + U32 size; + + ConstSubBufferDesc() : start(0), size(0){} +}; + +class GFXD3D11ConstBufferLayout : public GenericConstBufferLayout +{ +public: + GFXD3D11ConstBufferLayout(); + /// Get our constant sub buffer data + Vector &getSubBufferDesc(){ return mSubBuffers; } + + /// We need to manually set the size due to D3D11 alignment + void setSize(U32 size){ mBufferSize = size;} + + /// Set a parameter, given a base pointer + virtual bool set(const ParamDesc& pd, const GFXShaderConstType constType, const U32 size, const void* data, U8* basePointer); + +protected: + /// Set a matrix, given a base pointer + virtual bool setMatrix(const ParamDesc& pd, const GFXShaderConstType constType, const U32 size, const void* data, U8* basePointer); + + Vector mSubBuffers; +}; + +class GFXD3D11ShaderConstHandle : public GFXShaderConstHandle +{ +public: + + // GFXShaderConstHandle + const String& getName() const; + GFXShaderConstType getType() const; + U32 getArraySize() const; + + WeakRefPtr mShader; + + bool mVertexConstant; + GenericConstBufferLayout::ParamDesc mVertexHandle; + bool mPixelConstant; + GenericConstBufferLayout::ParamDesc mPixelHandle; + + /// Is true if this constant is for hardware mesh instancing. + /// + /// Note: We currently store its settings in mPixelHandle. + /// + bool mInstancingConstant; + + void setValid( bool valid ) { mValid = valid; } + S32 getSamplerRegister() const; + + // Returns true if this is a handle to a sampler register. + bool isSampler() const + { + return ( mPixelConstant && mPixelHandle.constType >= GFXSCT_Sampler ) || ( mVertexConstant && mVertexHandle.constType >= GFXSCT_Sampler ); + } + + /// Restore to uninitialized state. + void clear() + { + mShader = NULL; + mVertexConstant = false; + mPixelConstant = false; + mInstancingConstant = false; + mVertexHandle.clear(); + mPixelHandle.clear(); + mValid = false; + } + + GFXD3D11ShaderConstHandle(); +}; + +/// The D3D11 implementation of a shader constant buffer. +class GFXD3D11ShaderConstBuffer : public GFXShaderConstBuffer +{ + friend class GFXD3D11Shader; + +public: + + GFXD3D11ShaderConstBuffer(GFXD3D11Shader* shader, + GFXD3D11ConstBufferLayout* vertexLayout, + GFXD3D11ConstBufferLayout* pixelLayout); + + virtual ~GFXD3D11ShaderConstBuffer(); + + /// Called by GFXD3D11Device to activate this buffer. + /// @param mPrevShaderBuffer The previously active buffer + void activate(GFXD3D11ShaderConstBuffer *prevShaderBuffer); + + /// Used internally by GXD3D11ShaderConstBuffer to determine if it's dirty. + bool isDirty(); + + /// Called from GFXD3D11Shader when constants have changed and need + /// to be the shader this buffer references is reloaded. + void onShaderReload(GFXD3D11Shader *shader); + + // GFXShaderConstBuffer + virtual GFXShader* getShader(); + virtual void set(GFXShaderConstHandle* handle, const F32 fv); + virtual void set(GFXShaderConstHandle* handle, const Point2F& fv); + virtual void set(GFXShaderConstHandle* handle, const Point3F& fv); + virtual void set(GFXShaderConstHandle* handle, const Point4F& fv); + virtual void set(GFXShaderConstHandle* handle, const PlaneF& fv); + virtual void set(GFXShaderConstHandle* handle, const ColorF& fv); + virtual void set(GFXShaderConstHandle* handle, const S32 f); + virtual void set(GFXShaderConstHandle* handle, const Point2I& fv); + virtual void set(GFXShaderConstHandle* handle, const Point3I& fv); + virtual void set(GFXShaderConstHandle* handle, const Point4I& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const AlignedArray& fv); + virtual void set(GFXShaderConstHandle* handle, const MatrixF& mat, const GFXShaderConstType matType = GFXSCT_Float4x4); + virtual void set(GFXShaderConstHandle* handle, const MatrixF* mat, const U32 arraySize, const GFXShaderConstType matrixType = GFXSCT_Float4x4); + + // GFXResource + virtual const String describeSelf() const; + virtual void zombify(); + virtual void resurrect(); + +protected: + + void _createBuffers(); + + template + inline void SET_CONSTANT(GFXShaderConstHandle* handle, + const T& fv, + GenericConstBuffer *vBuffer, + GenericConstBuffer *pBuffer); + + // Constant buffers, VSSetConstantBuffers1 has issues on win 7. So unfortunately for now we have multiple constant buffers + ID3D11Buffer* mConstantBuffersV[CBUFFER_MAX]; + ID3D11Buffer* mConstantBuffersP[CBUFFER_MAX]; + + /// We keep a weak reference to the shader + /// because it will often be deleted. + WeakRefPtr mShader; + + //vertex + GFXD3D11ConstBufferLayout* mVertexConstBufferLayout; + GenericConstBuffer* mVertexConstBuffer; + //pixel + GFXD3D11ConstBufferLayout* mPixelConstBufferLayout; + GenericConstBuffer* mPixelConstBuffer; +}; + +class gfxD3D11Include; +typedef StrongRefPtr gfxD3DIncludeRef; + +/////////////////// GFXShader implementation ///////////////////////////// + +class GFXD3D11Shader : public GFXShader +{ + friend class GFXD3D11Device; + friend class GFXD3D11ShaderConstBuffer; + +public: + typedef Map HandleMap; + + GFXD3D11Shader(); + virtual ~GFXD3D11Shader(); + + // GFXShader + virtual GFXShaderConstBufferRef allocConstBuffer(); + virtual const Vector& getShaderConstDesc() const; + virtual GFXShaderConstHandle* getShaderConstHandle(const String& name); + virtual GFXShaderConstHandle* findShaderConstHandle(const String& name); + virtual U32 getAlignmentValue(const GFXShaderConstType constType) const; + virtual bool getDisassembly( String &outStr ) const; + + // GFXResource + virtual void zombify(); + virtual void resurrect(); + +protected: + + virtual bool _init(); + + static const U32 smCompiledShaderTag; + + ConstantTable table; + + ID3D11VertexShader *mVertShader; + ID3D11PixelShader *mPixShader; + + GFXD3D11ConstBufferLayout* mVertexConstBufferLayout; + GFXD3D11ConstBufferLayout* mPixelConstBufferLayout; + + static gfxD3DIncludeRef smD3DInclude; + + HandleMap mHandles; + + /// The shader disassembly from DX when this shader is compiled. + /// We only store this data in non-release builds. + String mDissasembly; + + /// Vector of sampler type descriptions consolidated from _compileShader. + Vector mSamplerDescriptions; + + /// Vector of descriptions (consolidated for the getShaderConstDesc call) + Vector mShaderConsts; + + // These two functions are used when compiling shaders from hlsl + virtual bool _compileShader( const Torque::Path &filePath, + const String &target, + const D3D_SHADER_MACRO *defines, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ); + + void _getShaderConstants( ID3D11ShaderReflection* table, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ); + + bool _convertShaderVariable(const D3D11_SHADER_TYPE_DESC &typeDesc, GFXShaderConstDesc &desc); + + + bool _saveCompiledOutput( const Torque::Path &filePath, + ID3DBlob *buffer, + GenericConstBufferLayout *bufferLayout, + Vector &samplerDescriptions ); + + // Loads precompiled shaders + bool _loadCompiledOutput( const Torque::Path &filePath, + const String &target, + GenericConstBufferLayout *bufferLayoutF, + Vector &samplerDescriptions ); + + // This is used in both cases + virtual void _buildShaderConstantHandles(GenericConstBufferLayout *layout, bool vertexConst); + + virtual void _buildSamplerShaderConstantHandles( Vector &samplerDescriptions ); + + /// Used to build the instancing shader constants from + /// the instancing vertex format. + void _buildInstancingShaderConstantHandles(); +}; + +inline bool GFXD3D11Shader::getDisassembly(String &outStr) const +{ + outStr = mDissasembly; + return (outStr.isNotEmpty()); +} + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp new file mode 100644 index 0000000000..fb5f439361 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.cpp @@ -0,0 +1,285 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/gfxDevice.h" +#include "gfx/D3D11/gfxD3D11StateBlock.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" + +GFXD3D11StateBlock::GFXD3D11StateBlock(const GFXStateBlockDesc& desc) +{ + AssertFatal(D3D11DEVICE, "Invalid D3DDevice!"); + + mDesc = desc; + mCachedHashValue = desc.getHashValue(); + + // Color writes + mColorMask = 0; + mColorMask |= (mDesc.colorWriteRed ? D3D11_COLOR_WRITE_ENABLE_RED : 0); + mColorMask |= (mDesc.colorWriteGreen ? D3D11_COLOR_WRITE_ENABLE_GREEN : 0); + mColorMask |= (mDesc.colorWriteBlue ? D3D11_COLOR_WRITE_ENABLE_BLUE : 0); + mColorMask |= (mDesc.colorWriteAlpha ? D3D11_COLOR_WRITE_ENABLE_ALPHA : 0); + + mBlendState = NULL; + for (U32 i = 0; i < GFX->getNumSamplers(); i++) + { + mSamplerStates[i] = NULL; + } + + mDepthStencilState = NULL; + mRasterizerState = NULL; + + mBlendDesc.AlphaToCoverageEnable = false; + mBlendDesc.IndependentBlendEnable = false; + + mBlendDesc.RenderTarget[0].BlendEnable = mDesc.blendEnable; + mBlendDesc.RenderTarget[0].BlendOp = GFXD3D11BlendOp[mDesc.blendOp]; + mBlendDesc.RenderTarget[0].BlendOpAlpha = GFXD3D11BlendOp[mDesc.separateAlphaBlendOp]; + mBlendDesc.RenderTarget[0].DestBlend = GFXD3D11Blend[mDesc.blendDest]; + mBlendDesc.RenderTarget[0].DestBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendDest]; + mBlendDesc.RenderTarget[0].SrcBlend = GFXD3D11Blend[mDesc.blendSrc]; + mBlendDesc.RenderTarget[0].SrcBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendSrc]; + mBlendDesc.RenderTarget[0].RenderTargetWriteMask = mColorMask; + + HRESULT hr = D3D11DEVICE->CreateBlendState(&mBlendDesc, &mBlendState); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateBlendState call failure."); + } + + mDepthStencilDesc.DepthWriteMask = mDesc.zWriteEnable ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO; + mDepthStencilDesc.DepthEnable = mDesc.zEnable; + mDepthStencilDesc.DepthFunc = GFXD3D11CmpFunc[mDesc.zFunc]; + mDepthStencilDesc.StencilWriteMask = mDesc.stencilWriteMask; + mDepthStencilDesc.StencilReadMask = mDesc.stencilMask; + mDepthStencilDesc.StencilEnable = mDesc.stencilEnable; + + mDepthStencilDesc.FrontFace.StencilFunc = GFXD3D11CmpFunc[mDesc.stencilFunc]; + mDepthStencilDesc.FrontFace.StencilFailOp = GFXD3D11StencilOp[mDesc.stencilFailOp]; + mDepthStencilDesc.FrontFace.StencilDepthFailOp = GFXD3D11StencilOp[mDesc.stencilZFailOp]; + mDepthStencilDesc.FrontFace.StencilPassOp = GFXD3D11StencilOp[mDesc.stencilPassOp]; + mDepthStencilDesc.BackFace = mDepthStencilDesc.FrontFace; + + hr = D3D11DEVICE->CreateDepthStencilState(&mDepthStencilDesc, &mDepthStencilState); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateDepthStencilState call failure."); + } + + mRasterizerDesc.CullMode = GFXD3D11CullMode[mDesc.cullMode]; + mRasterizerDesc.FillMode = GFXD3D11FillMode[mDesc.fillMode]; + mRasterizerDesc.DepthBias = mDesc.zBias; + mRasterizerDesc.SlopeScaledDepthBias = mDesc.zSlopeBias; + mRasterizerDesc.AntialiasedLineEnable = FALSE; + mRasterizerDesc.MultisampleEnable = FALSE; + mRasterizerDesc.ScissorEnable = FALSE; + mRasterizerDesc.DepthClipEnable = TRUE; + mRasterizerDesc.FrontCounterClockwise = FALSE; + mRasterizerDesc.DepthBiasClamp = D3D11_DEFAULT_DEPTH_BIAS_CLAMP; + + hr = D3D11DEVICE->CreateRasterizerState(&mRasterizerDesc, &mRasterizerState); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateDepthStencilState call failure."); + } + + for ( U32 i = 0; i < GFX->getNumSamplers(); i++ ) + { + mSamplerDesc[i].AddressU = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeU]; + mSamplerDesc[i].AddressV = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeV]; + mSamplerDesc[i].AddressW = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeW]; + mSamplerDesc[i].MaxAnisotropy = mDesc.samplers[i].maxAnisotropy; + + mSamplerDesc[i].MipLODBias = mDesc.samplers[i].mipLODBias; + mSamplerDesc[i].MinLOD = 0; + mSamplerDesc[i].MaxLOD = FLT_MAX; + + if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + else + mSamplerDesc[i].Filter = D3D11_FILTER_ANISOTROPIC; + + mSamplerDesc[i].BorderColor[0] = 1.0f; + mSamplerDesc[i].BorderColor[1] = 1.0f; + mSamplerDesc[i].BorderColor[2] = 1.0f; + mSamplerDesc[i].BorderColor[3] = 1.0f; + mSamplerDesc[i].ComparisonFunc = D3D11_COMPARISON_NEVER; + + hr = D3D11DEVICE->CreateSamplerState(&mSamplerDesc[i], &mSamplerStates[i]); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11StateBlock::GFXD3D11StateBlock - CreateSamplerState call failure."); + } + } +} + +GFXD3D11StateBlock::~GFXD3D11StateBlock() +{ + SAFE_RELEASE(mBlendState); + SAFE_RELEASE(mRasterizerState); + SAFE_RELEASE(mDepthStencilState); + + //Use TEXTURE_STAGE_COUNT here, not safe to rely on GFX pointer + for (U32 i = 0; i < TEXTURE_STAGE_COUNT; ++i) + { + SAFE_RELEASE(mSamplerStates[i]); + } +} + +/// Returns the hash value of the desc that created this block +U32 GFXD3D11StateBlock::getHashValue() const +{ + return mCachedHashValue; +} + +/// Returns a GFXStateBlockDesc that this block represents +const GFXStateBlockDesc& GFXD3D11StateBlock::getDesc() const +{ + return mDesc; +} + +/// Called by D3D11 device to active this state block. +/// @param oldState The current state, used to make sure we don't set redundant states on the device. Pass NULL to reset all states. +void GFXD3D11StateBlock::activate(GFXD3D11StateBlock* oldState) +{ + PROFILE_SCOPE( GFXD3D11StateBlock_Activate ); + + ID3D11DeviceContext* pDevCxt = D3D11DEVICECONTEXT; + + mBlendDesc.AlphaToCoverageEnable = false; + mBlendDesc.IndependentBlendEnable = mDesc.separateAlphaBlendEnable; + + mBlendDesc.RenderTarget[0].BlendEnable = mDesc.blendEnable; + mBlendDesc.RenderTarget[0].BlendOp = GFXD3D11BlendOp[mDesc.blendOp]; + mBlendDesc.RenderTarget[0].BlendOpAlpha = GFXD3D11BlendOp[mDesc.separateAlphaBlendOp]; + mBlendDesc.RenderTarget[0].DestBlend = GFXD3D11Blend[mDesc.blendDest]; + mBlendDesc.RenderTarget[0].DestBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendDest]; + mBlendDesc.RenderTarget[0].SrcBlend = GFXD3D11Blend[mDesc.blendSrc]; + mBlendDesc.RenderTarget[0].SrcBlendAlpha = GFXD3D11Blend[mDesc.separateAlphaBlendSrc]; + mBlendDesc.RenderTarget[0].RenderTargetWriteMask = mColorMask; + + float blendFactor[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + + pDevCxt->OMSetBlendState(mBlendState, blendFactor, 0xFFFFFFFF); + + mDepthStencilDesc.DepthWriteMask = mDesc.zWriteEnable ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO; + mDepthStencilDesc.DepthEnable = mDesc.zEnable; + mDepthStencilDesc.DepthFunc = GFXD3D11CmpFunc[mDesc.zFunc]; + mDepthStencilDesc.StencilWriteMask = mDesc.stencilWriteMask; + mDepthStencilDesc.StencilReadMask = mDesc.stencilMask; + mDepthStencilDesc.StencilEnable = mDesc.stencilEnable; + + mDepthStencilDesc.FrontFace.StencilFunc = GFXD3D11CmpFunc[mDesc.stencilFunc]; + mDepthStencilDesc.FrontFace.StencilFailOp = GFXD3D11StencilOp[mDesc.stencilFailOp]; + mDepthStencilDesc.FrontFace.StencilDepthFailOp = GFXD3D11StencilOp[mDesc.stencilZFailOp]; + mDepthStencilDesc.FrontFace.StencilPassOp = GFXD3D11StencilOp[mDesc.stencilPassOp]; + + if (mDesc.stencilEnable) + mDepthStencilDesc.BackFace = mDepthStencilDesc.FrontFace; + else + { + mDepthStencilDesc.BackFace.StencilFunc = GFXD3D11CmpFunc[GFXCmpAlways]; + mDepthStencilDesc.BackFace.StencilFailOp = GFXD3D11StencilOp[GFXStencilOpKeep]; + mDepthStencilDesc.BackFace.StencilDepthFailOp = GFXD3D11StencilOp[GFXStencilOpKeep]; + mDepthStencilDesc.BackFace.StencilPassOp = GFXD3D11StencilOp[GFXStencilOpKeep]; + } + + pDevCxt->OMSetDepthStencilState(mDepthStencilState, mDesc.stencilRef); + + mRasterizerDesc.CullMode = GFXD3D11CullMode[mDesc.cullMode]; + mRasterizerDesc.FillMode = GFXD3D11FillMode[mDesc.fillMode]; + mRasterizerDesc.DepthBias = mDesc.zBias; + mRasterizerDesc.SlopeScaledDepthBias = mDesc.zSlopeBias; + mRasterizerDesc.AntialiasedLineEnable = FALSE; + mRasterizerDesc.MultisampleEnable = FALSE; + mRasterizerDesc.ScissorEnable = FALSE; + + if (mDesc.zEnable) + mRasterizerDesc.DepthClipEnable = true; + else + mRasterizerDesc.DepthClipEnable = false; + + mRasterizerDesc.FrontCounterClockwise = FALSE; + mRasterizerDesc.DepthBiasClamp = 0.0f; + + pDevCxt->RSSetState(mRasterizerState); + + U32 numSamplers = GFX->getNumSamplers(); + for (U32 i = 0; i < numSamplers; i++) + { + mSamplerDesc[i].AddressU = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeU]; + mSamplerDesc[i].AddressV = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeV]; + mSamplerDesc[i].AddressW = GFXD3D11TextureAddress[mDesc.samplers[i].addressModeW]; + mSamplerDesc[i].MaxAnisotropy = mDesc.samplers[i].maxAnisotropy; + + mSamplerDesc[i].MipLODBias = mDesc.samplers[i].mipLODBias; + mSamplerDesc[i].MinLOD = 0; + mSamplerDesc[i].MaxLOD = FLT_MAX; + + if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterPoint && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterPoint && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterPoint) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT; + else if(mDesc.samplers[i].magFilter == GFXTextureFilterLinear && mDesc.samplers[i].minFilter == GFXTextureFilterLinear && mDesc.samplers[i].mipFilter == GFXTextureFilterLinear) + mSamplerDesc[i].Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + else + mSamplerDesc[i].Filter = D3D11_FILTER_ANISOTROPIC; + + mSamplerDesc[i].BorderColor[0] = 0.0f; + mSamplerDesc[i].BorderColor[1] = 0.0f; + mSamplerDesc[i].BorderColor[2] = 0.0f; + mSamplerDesc[i].BorderColor[3] = 0.0f; + mSamplerDesc[i].ComparisonFunc = D3D11_COMPARISON_NEVER; + } + + //TODO samplers for vertex shader + // Set all the samplers with one call + //pDevCxt->VSSetSamplers(0, numSamplers, &mSamplerStates[0]); + pDevCxt->PSSetSamplers(0, numSamplers, &mSamplerStates[0]); +} diff --git a/Engine/source/gfx/D3D11/gfxD3D11StateBlock.h b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.h new file mode 100644 index 0000000000..6e55b962fc --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11StateBlock.h @@ -0,0 +1,76 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11STATEBLOCK_H_ +#define _GFXD3D11STATEBLOCK_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxStateBlock.h" + +class GFXD3D11StateBlock : public GFXStateBlock +{ +public: + + GFXD3D11StateBlock(const GFXStateBlockDesc& desc); + virtual ~GFXD3D11StateBlock(); + + /// Called by D3D11 device to active this state block. + /// @param oldState The current state, used to make sure we don't set redundant states on the device. Pass NULL to reset all states. + void activate(GFXD3D11StateBlock* oldState); + + // + // GFXStateBlock interface + // + + /// Returns the hash value of the desc that created this block + virtual U32 getHashValue() const; + + /// Returns a GFXStateBlockDesc that this block represents + virtual const GFXStateBlockDesc& getDesc() const; + + // + // GFXResource + // + virtual void zombify() { } + /// When called the resource should restore all device sensitive information destroyed by zombify() + virtual void resurrect() { } +private: + + D3D11_BLEND_DESC mBlendDesc; + D3D11_RASTERIZER_DESC mRasterizerDesc; + D3D11_DEPTH_STENCIL_DESC mDepthStencilDesc; + D3D11_SAMPLER_DESC mSamplerDesc[TEXTURE_STAGE_COUNT]; + + ID3D11BlendState* mBlendState; + ID3D11DepthStencilState* mDepthStencilState; + ID3D11RasterizerState* mRasterizerState; + ID3D11SamplerState* mSamplerStates[TEXTURE_STAGE_COUNT]; + + GFXStateBlockDesc mDesc; + U32 mCachedHashValue; + // Cached D3D specific things, these are "calculated" from GFXStateBlock + U32 mColorMask; +}; + +typedef StrongRefPtr GFXD3D11StateBlockRef; + +#endif \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Target.cpp b/Engine/source/gfx/D3D11/gfxD3D11Target.cpp new file mode 100644 index 0000000000..a74b3e54d8 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Target.cpp @@ -0,0 +1,409 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "gfx/D3D11/gfxD3D11Target.h" +#include "gfx/D3D11/gfxD3D11Cubemap.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/gfxDebugEvent.h" +#include "gfx/gfxStringEnumTranslate.h" +#include "windowManager/win32/win32Window.h" + +GFXD3D11TextureTarget::GFXD3D11TextureTarget() + : mTargetSize( Point2I::Zero ), + mTargetFormat( GFXFormatR8G8B8A8 ) +{ + for(S32 i=0; imDeviceDepthStencil; + mTargetViews[slot] = D3D11->mDeviceDepthStencilView; + mTargets[slot]->AddRef(); + mTargetViews[slot]->AddRef(); + } + else + { + // Cast the texture object to D3D... + AssertFatal(static_cast(tex), "GFXD3D11TextureTarget::attachTexture - invalid texture object."); + + GFXD3D11TextureObject *d3dto = static_cast(tex); + + // Grab the surface level. + if( slot == DepthStencil ) + { + mTargets[slot] = d3dto->getSurface(); + if ( mTargets[slot] ) + mTargets[slot]->AddRef(); + + mTargetViews[slot] = d3dto->getDSView(); + if( mTargetViews[slot]) + mTargetViews[slot]->AddRef(); + + } + else + { + // getSurface will almost always return NULL. It will only return non-NULL + // if the surface that it needs to render to is different than the mip level + // in the actual texture. This will happen with MSAA. + if( d3dto->getSurface() == NULL ) + { + + mTargets[slot] = d3dto->get2DTex(); + mTargets[slot]->AddRef(); + mTargetViews[slot] = d3dto->getRTView(); + mTargetViews[slot]->AddRef(); + } + else + { + mTargets[slot] = d3dto->getSurface(); + mTargets[slot]->AddRef(); + mTargetViews[slot]->AddRef(); + // Only assign resolve target if d3dto has a surface to give us. + // + // That usually means there is an MSAA target involved, which is why + // the resolve is needed to get the data out of the target. + mResolveTargets[slot] = d3dto; + + if ( tex && slot == Color0 ) + { + mTargetSize.set( tex->getSize().x, tex->getSize().y ); + mTargetFormat = tex->getFormat(); + } + } + } + + // Update surface size + if(slot == Color0) + { + ID3D11Texture2D *surface = mTargets[Color0]; + if ( surface ) + { + D3D11_TEXTURE2D_DESC sd; + surface->GetDesc(&sd); + mTargetSize = Point2I(sd.Width, sd.Height); + + S32 format = sd.Format; + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, format ); + mTargetFormat = (GFXFormat)format; + } + } + } + +} + + +void GFXD3D11TextureTarget::attachTexture( RenderSlot slot, GFXCubemap *tex, U32 face, U32 mipLevel/*=0*/ ) +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_attachTexture_Cubemap, ColorI::RED ); + + AssertFatal(slot < MaxRenderSlotId, "GFXD3D11TextureTarget::attachTexture - out of range slot."); + + // Mark state as dirty so device can know to update. + invalidateState(); + + // Release what we had, it's definitely going to change. + SAFE_RELEASE(mTargetViews[slot]); + SAFE_RELEASE(mTargets[slot]); + SAFE_RELEASE(mTargetSRViews[slot]); + + mResolveTargets[slot] = NULL; + + // Cast the texture object to D3D... + AssertFatal(!tex || static_cast(tex), "GFXD3DTextureTarget::attachTexture - invalid cubemap object."); + + if(slot == Color0) + { + mTargetSize = Point2I::Zero; + mTargetFormat = GFXFormatR8G8B8A8; + } + + // Are we clearing? + if(!tex) + { + // Yup - just exit, it'll stay NULL. + return; + } + + GFXD3D11Cubemap *cube = static_cast(tex); + + mTargets[slot] = cube->get2DTex(); + mTargets[slot]->AddRef(); + mTargetViews[slot] = cube->getRTView(face); + mTargetViews[slot]->AddRef(); + mTargetSRViews[slot] = cube->getSRView(); + mTargetSRViews[slot]->AddRef(); + + // Update surface size + if(slot == Color0) + { + ID3D11Texture2D *surface = mTargets[Color0]; + if ( surface ) + { + D3D11_TEXTURE2D_DESC sd; + surface->GetDesc(&sd); + mTargetSize = Point2I(sd.Width, sd.Height); + + S32 format = sd.Format; + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, format ); + mTargetFormat = (GFXFormat)format; + } + } + +} + +void GFXD3D11TextureTarget::activate() +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_activate, ColorI::RED ); + + AssertFatal( mTargets[GFXTextureTarget::Color0], "GFXD3D11TextureTarget::activate() - You can never have a NULL primary render target!" ); + + // Clear the state indicator. + stateApplied(); + + // Now set all the new surfaces into the appropriate slots. + ID3D11RenderTargetView* rtViews[MaxRenderSlotId] = { NULL, NULL, NULL, NULL, NULL, NULL}; + + ID3D11DepthStencilView* dsView = (ID3D11DepthStencilView*)(mTargetViews[GFXTextureTarget::DepthStencil]); + for (U32 i = 0; i < 4; i++) + { + rtViews[i] = (ID3D11RenderTargetView*)mTargetViews[GFXTextureTarget::Color0 + i]; + } + + D3D11DEVICECONTEXT->OMSetRenderTargets(MaxRenderSlotId, rtViews, dsView); + +} + +void GFXD3D11TextureTarget::deactivate() +{ + //re-gen mip maps + for (U32 i = 0; i < 4; i++) + { + ID3D11ShaderResourceView* pSRView = mTargetSRViews[GFXTextureTarget::Color0 + i]; + if (pSRView) + D3D11DEVICECONTEXT->GenerateMips(pSRView); + } + +} + +void GFXD3D11TextureTarget::resolve() +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_resolve, ColorI::RED ); + + for (U32 i = 0; i < MaxRenderSlotId; i++) + { + // We use existance @ mResolveTargets as a flag that we need to copy + // data from the rendertarget into the texture. + if (mResolveTargets[i]) + { + D3D11_TEXTURE2D_DESC desc; + mTargets[i]->GetDesc(&desc); + D3D11DEVICECONTEXT->CopySubresourceRegion(mResolveTargets[i]->get2DTex(), 0, 0, 0, 0, mTargets[i], 0, NULL); + } + } +} + +void GFXD3D11TextureTarget::resolveTo( GFXTextureObject *tex ) +{ + GFXDEBUGEVENT_SCOPE( GFXPCD3D11TextureTarget_resolveTo, ColorI::RED ); + + if ( mTargets[Color0] == NULL ) + return; + + D3D11_TEXTURE2D_DESC desc; + mTargets[Color0]->GetDesc(&desc); + D3D11DEVICECONTEXT->CopySubresourceRegion(((GFXD3D11TextureObject*)(tex))->get2DTex(), 0, 0, 0, 0, mTargets[Color0], 0, NULL); + +} + +void GFXD3D11TextureTarget::zombify() +{ + for(U32 i = 0; i < MaxRenderSlotId; i++) + attachTexture(RenderSlot(i), NULL); +} + +void GFXD3D11TextureTarget::resurrect() +{ +} + +GFXD3D11WindowTarget::GFXD3D11WindowTarget() +{ + mWindow = NULL; + mBackbuffer = NULL; +} + +GFXD3D11WindowTarget::~GFXD3D11WindowTarget() +{ + SAFE_RELEASE(mBackbuffer); +} + +void GFXD3D11WindowTarget::initPresentationParams() +{ + // Get some video mode related info. + GFXVideoMode vm = mWindow->getVideoMode(); + Win32Window* win = static_cast(mWindow); + HWND hwnd = win->getHWND(); + + mPresentationParams = D3D11->setupPresentParams(vm, hwnd); +} + +const Point2I GFXD3D11WindowTarget::getSize() +{ + return mWindow->getVideoMode().resolution; +} + +GFXFormat GFXD3D11WindowTarget::getFormat() +{ + S32 format = mPresentationParams.BufferDesc.Format; + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, format ); + return (GFXFormat)format; +} + +bool GFXD3D11WindowTarget::present() +{ + return (D3D11->getSwapChain()->Present(!D3D11->smDisableVSync, 0) == S_OK); +} + +void GFXD3D11WindowTarget::setImplicitSwapChain() +{ + if (!mBackbuffer) + D3D11->mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mBackbuffer); +} + +void GFXD3D11WindowTarget::resetMode() +{ + mWindow->setSuppressReset(true); + + // Setup our presentation params. + initPresentationParams(); + + // Otherwise, we have to reset the device, if we're the implicit swapchain. + D3D11->reset(mPresentationParams); + + // Update our size, too. + mSize = Point2I(mPresentationParams.BufferDesc.Width, mPresentationParams.BufferDesc.Height); + + mWindow->setSuppressReset(false); + GFX->beginReset(); +} + +void GFXD3D11WindowTarget::zombify() +{ + SAFE_RELEASE(mBackbuffer); +} + +void GFXD3D11WindowTarget::resurrect() +{ + setImplicitSwapChain(); +} + +void GFXD3D11WindowTarget::activate() +{ + GFXDEBUGEVENT_SCOPE(GFXPCD3D11WindowTarget_activate, ColorI::RED); + + //clear ther rendertargets first + ID3D11RenderTargetView* rtViews[8] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; + + D3D11DEVICECONTEXT->OMSetRenderTargets(8, rtViews, NULL); + D3D11DEVICECONTEXT->OMSetRenderTargets(1, &D3D11->mDeviceBackBufferView, D3D11->mDeviceDepthStencilView); + + DXGI_SWAP_CHAIN_DESC pp; + D3D11->mSwapChain->GetDesc(&pp); + + // Update our video mode here, too. + GFXVideoMode vm; + vm = mWindow->getVideoMode(); + vm.resolution.x = pp.BufferDesc.Width; + vm.resolution.y = pp.BufferDesc.Height; + vm.fullScreen = !pp.Windowed; + mSize = vm.resolution; +} + +void GFXD3D11WindowTarget::resolveTo(GFXTextureObject *tex) +{ + GFXDEBUGEVENT_SCOPE(GFXPCD3D11WindowTarget_resolveTo, ColorI::RED); + + D3D11_TEXTURE2D_DESC desc; + ID3D11Texture2D* surf = ((GFXD3D11TextureObject*)(tex))->get2DTex(); + surf->GetDesc(&desc); + D3D11DEVICECONTEXT->ResolveSubresource(surf, 0, D3D11->mDeviceBackbuffer, 0, desc.Format); +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11Target.h b/Engine/source/gfx/D3D11/gfxD3D11Target.h new file mode 100644 index 0000000000..ff4b193d6a --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11Target.h @@ -0,0 +1,110 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFX_D3D_GFXD3D11TARGET_H_ +#define _GFX_D3D_GFXD3D11TARGET_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11TextureObject.h" +#include "gfx/gfxTarget.h" +#include "math/mPoint3.h" +#include "math/mPoint2.h" + +class GFXD3D11TextureTarget : public GFXTextureTarget +{ + friend class GFXD3D11Device; + + // Array of target surfaces, this is given to us by attachTexture + ID3D11Texture2D* mTargets[MaxRenderSlotId]; + + // Array of shader resource views + ID3D11ShaderResourceView* mTargetSRViews[MaxRenderSlotId]; + + //ID3D11DepthStencilView* mDepthTargetView; + ID3D11View* mTargetViews[MaxRenderSlotId]; + // Array of texture objects which correspond to the target surfaces above, + // needed for copy from RenderTarget to texture situations. Current only valid in those situations + GFXD3D11TextureObject* mResolveTargets[MaxRenderSlotId]; + + Point2I mTargetSize; + + GFXFormat mTargetFormat; + +public: + + GFXD3D11TextureTarget(); + ~GFXD3D11TextureTarget(); + + // Public interface. + virtual const Point2I getSize() { return mTargetSize; } + virtual GFXFormat getFormat() { return mTargetFormat; } + virtual void attachTexture(RenderSlot slot, GFXTextureObject *tex, U32 mipLevel=0, U32 zOffset = 0); + virtual void attachTexture(RenderSlot slot, GFXCubemap *tex, U32 face, U32 mipLevel=0); + virtual void resolve(); + + /// Note we always copy the Color0 RenderSlot. + virtual void resolveTo( GFXTextureObject *tex ); + + virtual void activate(); + virtual void deactivate(); + + void zombify(); + void resurrect(); +}; + +class GFXD3D11WindowTarget : public GFXWindowTarget +{ + friend class GFXD3D11Device; + + /// Our backbuffer + ID3D11Texture2D *mBackbuffer; + + /// Maximum size we can render to. + Point2I mSize; + + /// D3D presentation info. + DXGI_SWAP_CHAIN_DESC mPresentationParams; + + /// Internal interface that notifies us we need to reset our video mode. + void resetMode(); + +public: + + GFXD3D11WindowTarget(); + ~GFXD3D11WindowTarget(); + + virtual const Point2I getSize(); + virtual GFXFormat getFormat(); + virtual bool present(); + + void initPresentationParams(); + void setImplicitSwapChain(); + + virtual void activate(); + + void zombify(); + void resurrect(); + + virtual void resolveTo( GFXTextureObject *tex ); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureManager.cpp b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.cpp new file mode 100644 index 0000000000..ba90c40646 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.cpp @@ -0,0 +1,587 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11EnumTranslate.h" +#include "gfx/bitmap/bitmapUtils.h" +#include "gfx/gfxCardProfile.h" +#include "gfx/gfxStringEnumTranslate.h" +#include "core/strings/unicode.h" +#include "core/util/swizzle.h" +#include "core/util/safeDelete.h" +#include "console/console.h" +#include "core/resourceManager.h" + +GFXD3D11TextureManager::GFXD3D11TextureManager() +{ + ZeroMemory(mCurTexSet, sizeof(mCurTexSet)); +} + +GFXD3D11TextureManager::~GFXD3D11TextureManager() +{ + // Destroy texture table now so just in case some texture objects + // are still left, we don't crash on a pure virtual method call. + SAFE_DELETE_ARRAY( mHashTable ); +} + +void GFXD3D11TextureManager::_innerCreateTexture( GFXD3D11TextureObject *retTex, + U32 height, + U32 width, + U32 depth, + GFXFormat format, + GFXTextureProfile *profile, + U32 numMipLevels, + bool forceMips, + S32 antialiasLevel) +{ + U32 usage = 0; + U32 bindFlags = 0; + U32 miscFlags = 0; + + if(!retTex->mProfile->isZTarget() && !retTex->mProfile->isSystemMemory()) + bindFlags = D3D11_BIND_SHADER_RESOURCE; + + U32 cpuFlags = 0; + + retTex->mProfile = profile; + retTex->isManaged = false; + DXGI_FORMAT d3dTextureFormat = GFXD3D11TextureFormat[format]; + + if( retTex->mProfile->isDynamic() ) + { + usage = D3D11_USAGE_DYNAMIC; + cpuFlags |= D3D11_CPU_ACCESS_WRITE; + retTex->isManaged = false; + } + else if ( retTex->mProfile->isSystemMemory() ) + { + usage |= D3D11_USAGE_STAGING; + cpuFlags |= D3D11_CPU_ACCESS_READ; + } + else + { + usage = D3D11_USAGE_DEFAULT; + retTex->isManaged = true; + } + + if( retTex->mProfile->isRenderTarget() ) + { + bindFlags |= D3D11_BIND_RENDER_TARGET; + //need to check to make sure this format supports render targets + U32 supportFlag = 0; + + D3D11DEVICE->CheckFormatSupport(d3dTextureFormat, &supportFlag); + //if it doesn't support render targets then default to R8G8B8A8 + if(!(supportFlag & D3D11_FORMAT_SUPPORT_RENDER_TARGET)) + d3dTextureFormat = DXGI_FORMAT_R8G8B8A8_UNORM; + + retTex->isManaged =false; + } + + if( retTex->mProfile->isZTarget() ) + { + bindFlags |= D3D11_BIND_DEPTH_STENCIL; + retTex->isManaged = false; + } + + if( !forceMips && !retTex->mProfile->isSystemMemory() && + numMipLevels == 0 && + !(depth > 0) ) + { + miscFlags |= D3D11_RESOURCE_MISC_GENERATE_MIPS; + bindFlags |= D3D11_BIND_RENDER_TARGET; // in order to automatically generate mips. Resource needs to be a rendertarget and shader resource + } + + if( depth > 0 ) + { + D3D11_TEXTURE3D_DESC desc; + ZeroMemory(&desc, sizeof(D3D11_TEXTURE3D_DESC)); + + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuFlags; + desc.Depth = depth; + desc.Width = width; + desc.Height = height; + desc.Format = d3dTextureFormat; + desc.Usage = (D3D11_USAGE)usage; + desc.MipLevels = numMipLevels; + + HRESULT hr = D3D11DEVICE->CreateTexture3D(&desc, NULL, retTex->get3DTexPtr()); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11TextureManager::_createTexture - failed to create volume texture!"); + } + + retTex->mTextureSize.set(width, height, depth); + retTex->get3DTex()->GetDesc(&desc); + retTex->mMipLevels = numMipLevels; + retTex->mFormat = format; + } + else + { + UINT numQualityLevels = 0; + + switch (antialiasLevel) + { + case 0: + case AA_MATCH_BACKBUFFER: + antialiasLevel = 1; + break; + + default: + { + antialiasLevel = 0; + UINT numQualityLevels; + D3D11DEVICE->CheckMultisampleQualityLevels(d3dTextureFormat, antialiasLevel, &numQualityLevels); + AssertFatal(numQualityLevels, "Invalid AA level!"); + break; + } + } + + if(retTex->mProfile->isZTarget()) + { + D3D11_TEXTURE2D_DESC desc; + + ZeroMemory(&desc, sizeof(D3D11_TEXTURE2D_DESC)); + desc.ArraySize = 1; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuFlags; + //depth stencil must be a typeless format if it is bound on render target and shader resource simultaneously + // we'll send the real format for the creation of the views + desc.Format = DXGI_FORMAT_R24G8_TYPELESS; + desc.MipLevels = numMipLevels; + desc.SampleDesc.Count = antialiasLevel; + desc.SampleDesc.Quality = numQualityLevels; + desc.Height = height; + desc.Width = width; + desc.Usage = (D3D11_USAGE)usage; + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, retTex->getSurfacePtr()); + + if(FAILED(hr)) + { + AssertFatal(false, "Failed to create Zbuffer texture"); + } + + retTex->mFormat = format; // Assigning format like this should be fine. + } + else + { + D3D11_TEXTURE2D_DESC desc; + + ZeroMemory(&desc, sizeof(D3D11_TEXTURE2D_DESC)); + desc.ArraySize = 1; + desc.BindFlags = bindFlags; + desc.CPUAccessFlags = cpuFlags; + desc.Format = d3dTextureFormat; + desc.MipLevels = numMipLevels; + desc.SampleDesc.Count = antialiasLevel; + desc.SampleDesc.Quality = numQualityLevels; + desc.Height = height; + desc.Width = width; + desc.Usage = (D3D11_USAGE)usage; + desc.MiscFlags = miscFlags; + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, retTex->get2DTexPtr()); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11TextureManager::_createTexture - failed to create texture!"); + } + + retTex->get2DTex()->GetDesc(&desc); + retTex->mMipLevels = desc.MipLevels; + } + + // start creating the resource views... + // don't bother creating views for system memory/staging textures + // they are just used for copying + + if (!retTex->mProfile->isSystemMemory()) + { + createResourceView(height, width, depth, d3dTextureFormat, numMipLevels, bindFlags, retTex); + } + + // Get the actual size of the texture... + D3D11_TEXTURE2D_DESC probeDesc; + ZeroMemory(&probeDesc, sizeof(D3D11_TEXTURE2D_DESC)); + + if( retTex->get2DTex() != NULL ) + { + retTex->get2DTex()->GetDesc(&probeDesc); + } + else if( retTex->getSurface() != NULL ) + { + retTex->getSurface()->GetDesc(&probeDesc); + } + + retTex->mTextureSize.set(probeDesc.Width, probeDesc.Height, 0); + S32 fmt = 0; + + if(!profile->isZTarget()) + fmt = probeDesc.Format; + else + fmt = DXGI_FORMAT_D24_UNORM_S8_UINT; // we need to assign this manually. + + GFXREVERSE_LOOKUP( GFXD3D11TextureFormat, GFXFormat, fmt ); + retTex->mFormat = (GFXFormat)fmt; + } +} + +//----------------------------------------------------------------------------- +// createTexture +//----------------------------------------------------------------------------- +GFXTextureObject *GFXD3D11TextureManager::_createTextureObject( U32 height, + U32 width, + U32 depth, + GFXFormat format, + GFXTextureProfile *profile, + U32 numMipLevels, + bool forceMips, + S32 antialiasLevel, + GFXTextureObject *inTex ) +{ + GFXD3D11TextureObject *retTex; + if ( inTex ) + { + AssertFatal(static_cast( inTex ), "GFXD3D11TextureManager::_createTexture() - Bad inTex type!"); + retTex = static_cast( inTex ); + retTex->release(); + } + else + { + retTex = new GFXD3D11TextureObject(GFX, profile); + retTex->registerResourceWithDevice(GFX); + } + + _innerCreateTexture(retTex, height, width, depth, format, profile, numMipLevels, forceMips, antialiasLevel); + + return retTex; +} + +bool GFXD3D11TextureManager::_loadTexture(GFXTextureObject *aTexture, GBitmap *pDL) +{ + PROFILE_SCOPE(GFXD3D11TextureManager_loadTexture); + + GFXD3D11TextureObject *texture = static_cast(aTexture); + + // Check with profiler to see if we can do automatic mipmap generation. + const bool supportsAutoMips = GFX->getCardProfiler()->queryProfile("autoMipMapLevel", true); + + // Helper bool + const bool isCompressedTexFmt = aTexture->mFormat >= GFXFormatDXT1 && aTexture->mFormat <= GFXFormatDXT5; + + // Settings for mipmap generation + U32 maxDownloadMip = pDL->getNumMipLevels(); + U32 nbMipMapLevel = pDL->getNumMipLevels(); + + if( supportsAutoMips && !isCompressedTexFmt ) + { + maxDownloadMip = 1; + nbMipMapLevel = aTexture->mMipLevels; + } + GFXD3D11Device* dev = D3D11; + + bool isDynamic = texture->mProfile->isDynamic(); + // Fill the texture... + for( U32 i = 0; i < maxDownloadMip; i++ ) + { + U32 subResource = D3D11CalcSubresource(i, 0, aTexture->mMipLevels); + + if(!isDynamic) + { + U8* copyBuffer = NULL; + + switch(texture->mFormat) + { + case GFXFormatR8G8B8: + { + PROFILE_SCOPE(Swizzle24_Upload); + AssertFatal(pDL->getFormat() == GFXFormatR8G8B8, "Assumption failed"); + + U8* Bits = new U8[pDL->getWidth(i) * pDL->getHeight(i) * 4]; + dMemcpy(Bits, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * 3); + bitmapConvertRGB_to_RGBX(&Bits, pDL->getWidth(i) * pDL->getHeight(i)); + copyBuffer = new U8[pDL->getWidth(i) * pDL->getHeight(i) * 4]; + + dev->getDeviceSwizzle32()->ToBuffer(copyBuffer, Bits, pDL->getWidth(i) * pDL->getHeight(i) * 4); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subResource, NULL, copyBuffer, pDL->getWidth() * 4, pDL->getHeight() *4); + SAFE_DELETE_ARRAY(Bits); + break; + } + + case GFXFormatR8G8B8A8: + case GFXFormatR8G8B8X8: + { + PROFILE_SCOPE(Swizzle32_Upload); + copyBuffer = new U8[pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()]; + dev->getDeviceSwizzle32()->ToBuffer(copyBuffer, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subResource, NULL, copyBuffer, pDL->getWidth() * pDL->getBytesPerPixel(), pDL->getHeight() *pDL->getBytesPerPixel()); + break; + } + + default: + { + // Just copy the bits in no swizzle or padding + PROFILE_SCOPE(SwizzleNull_Upload); + AssertFatal( pDL->getFormat() == texture->mFormat, "Format mismatch"); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subResource, NULL, pDL->getBits(i), pDL->getWidth() *pDL->getBytesPerPixel(), pDL->getHeight() *pDL->getBytesPerPixel()); + } + } + + SAFE_DELETE_ARRAY(copyBuffer); + } + + else + { + D3D11_MAPPED_SUBRESOURCE mapping; + HRESULT res = dev->getDeviceContext()->Map(texture->get2DTex(), subResource, D3D11_MAP_WRITE, 0, &mapping); + + AssertFatal(res, "tex2d map call failure"); + + switch( texture->mFormat ) + { + case GFXFormatR8G8B8: + { + PROFILE_SCOPE(Swizzle24_Upload); + AssertFatal(pDL->getFormat() == GFXFormatR8G8B8, "Assumption failed"); + + U8* Bits = new U8[pDL->getWidth(i) * pDL->getHeight(i) * 4]; + dMemcpy(Bits, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * 3); + bitmapConvertRGB_to_RGBX(&Bits, pDL->getWidth(i) * pDL->getHeight(i)); + + dev->getDeviceSwizzle32()->ToBuffer(mapping.pData, Bits, pDL->getWidth(i) * pDL->getHeight(i) * 4); + SAFE_DELETE_ARRAY(Bits); + } + break; + + case GFXFormatR8G8B8A8: + case GFXFormatR8G8B8X8: + { + PROFILE_SCOPE(Swizzle32_Upload); + dev->getDeviceSwizzle32()->ToBuffer(mapping.pData, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()); + } + break; + + default: + { + // Just copy the bits in no swizzle or padding + PROFILE_SCOPE(SwizzleNull_Upload); + AssertFatal( pDL->getFormat() == texture->mFormat, "Format mismatch"); + dMemcpy(mapping.pData, pDL->getBits(i), pDL->getWidth(i) * pDL->getHeight(i) * pDL->getBytesPerPixel()); + } + } + + dev->getDeviceContext()->Unmap(texture->get2DTex(), subResource); + } + } + + D3D11_TEXTURE2D_DESC desc; + // if the texture asked for mip generation. lets generate it. + texture->get2DTex()->GetDesc(&desc); + if (desc.MiscFlags &D3D11_RESOURCE_MISC_GENERATE_MIPS) + { + dev->getDeviceContext()->GenerateMips(texture->getSRView()); + //texture->mMipLevels = desc.MipLevels; + } + + return true; +} + +bool GFXD3D11TextureManager::_loadTexture(GFXTextureObject *inTex, void *raw) +{ + PROFILE_SCOPE(GFXD3D11TextureManager_loadTextureRaw); + + GFXD3D11TextureObject *texture = (GFXD3D11TextureObject *) inTex; + GFXD3D11Device* dev = static_cast(GFX); + // currently only for volume textures... + if(texture->getDepth() < 1) return false; + + U8* Bits = NULL; + + if(texture->mFormat == GFXFormatR8G8B8) + { + // convert 24 bit to 32 bit + Bits = new U8[texture->getWidth() * texture->getHeight() * texture->getDepth() * 4]; + dMemcpy(Bits, raw, texture->getWidth() * texture->getHeight() * texture->getDepth() * 3); + bitmapConvertRGB_to_RGBX(&Bits, texture->getWidth() * texture->getHeight() * texture->getDepth()); + } + + U32 bytesPerPix = 1; + + switch(texture->mFormat) + { + case GFXFormatR8G8B8: + case GFXFormatR8G8B8A8: + case GFXFormatR8G8B8X8: + bytesPerPix = 4; + break; + } + + D3D11_BOX box; + box.left = 0; + box.right = texture->getWidth(); + box.front = 0; + box.back = texture->getDepth(); + box.top = 0; + box.bottom = texture->getHeight(); + + if(texture->mFormat == GFXFormatR8G8B8) // converted format also for volume textures + dev->getDeviceContext()->UpdateSubresource(texture->get3DTex(), 0, &box, Bits, texture->getWidth() * bytesPerPix, texture->getHeight() * bytesPerPix); + else + dev->getDeviceContext()->UpdateSubresource(texture->get3DTex(), 0, &box, raw, texture->getWidth() * bytesPerPix, texture->getHeight() * bytesPerPix); + + SAFE_DELETE_ARRAY(Bits); + + return true; +} + +bool GFXD3D11TextureManager::_refreshTexture(GFXTextureObject *texture) +{ + U32 usedStrategies = 0; + GFXD3D11TextureObject *realTex = static_cast(texture); + + if(texture->mProfile->doStoreBitmap()) + { + if(texture->mBitmap) + _loadTexture(texture, texture->mBitmap); + + if(texture->mDDS) + _loadTexture(texture, texture->mDDS); + + usedStrategies++; + } + + if(texture->mProfile->isRenderTarget() || texture->mProfile->isDynamic() || texture->mProfile->isZTarget()) + { + realTex->release(); + _innerCreateTexture(realTex, texture->getHeight(), texture->getWidth(), texture->getDepth(), texture->mFormat, texture->mProfile, texture->mMipLevels, false, texture->mAntialiasLevel); + usedStrategies++; + } + + AssertFatal(usedStrategies < 2, "GFXD3D11TextureManager::_refreshTexture - Inconsistent profile flags!"); + + return true; +} + +bool GFXD3D11TextureManager::_freeTexture(GFXTextureObject *texture, bool zombify) +{ + AssertFatal(dynamic_cast(texture),"Not an actual d3d texture object!"); + GFXD3D11TextureObject *tex = static_cast( texture ); + + // If it's a managed texture and we're zombifying, don't blast it, D3D allows + // us to keep it. + if(zombify && tex->isManaged) + return true; + + tex->release(); + + return true; +} + +/// Load a texture from a proper DDSFile instance. +bool GFXD3D11TextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) +{ + PROFILE_SCOPE(GFXD3D11TextureManager_loadTextureDDS); + + GFXD3D11TextureObject *texture = static_cast(aTexture); + GFXD3D11Device* dev = static_cast(GFX); + // Fill the texture... + for( U32 i = 0; i < aTexture->mMipLevels; i++ ) + { + PROFILE_SCOPE(GFXD3DTexMan_loadSurface); + + AssertFatal( dds->mSurfaces.size() > 0, "Assumption failed. DDSFile has no surfaces." ); + + U32 subresource = D3D11CalcSubresource(i, 0, aTexture->mMipLevels); + dev->getDeviceContext()->UpdateSubresource(texture->get2DTex(), subresource, 0, dds->mSurfaces[0]->mMips[i], dds->getSurfacePitch(i), 0); + } + + D3D11_TEXTURE2D_DESC desc; + // if the texture asked for mip generation. lets generate it. + texture->get2DTex()->GetDesc(&desc); + if (desc.MiscFlags & D3D11_RESOURCE_MISC_GENERATE_MIPS) + dev->getDeviceContext()->GenerateMips(texture->getSRView()); + + return true; +} + +void GFXD3D11TextureManager::createResourceView(U32 height, U32 width, U32 depth, DXGI_FORMAT format, U32 numMipLevels,U32 usageFlags, GFXTextureObject *inTex) +{ + GFXD3D11TextureObject *tex = static_cast(inTex); + ID3D11Resource* resource = NULL; + + if(tex->get2DTex()) + resource = tex->get2DTex(); + else if(tex->getSurface()) + resource = tex->getSurface(); + else + resource = tex->get3DTex(); + + HRESULT hr; + //TODO: add MSAA support later. + if(usageFlags & D3D11_BIND_SHADER_RESOURCE) + { + D3D11_SHADER_RESOURCE_VIEW_DESC desc; + + if(usageFlags & D3D11_BIND_DEPTH_STENCIL) + desc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS; // reads the depth + else + desc.Format = format; + + if(depth > 0) + { + desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE3D; + desc.Texture3D.MipLevels = -1; + desc.Texture3D.MostDetailedMip = 0; + } + else + { + desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipLevels = -1; + desc.Texture2D.MostDetailedMip = 0; + } + + hr = D3D11DEVICE->CreateShaderResourceView(resource,&desc, tex->getSRViewPtr()); + AssertFatal(SUCCEEDED(hr), "CreateShaderResourceView:: failed to create view!"); + } + + if(usageFlags & D3D11_BIND_RENDER_TARGET) + { + D3D11_RENDER_TARGET_VIEW_DESC desc; + desc.Format = format; + desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipSlice = 0; + hr = D3D11DEVICE->CreateRenderTargetView(resource, &desc, tex->getRTViewPtr()); + AssertFatal(SUCCEEDED(hr), "CreateRenderTargetView:: failed to create view!"); + } + + if(usageFlags & D3D11_BIND_DEPTH_STENCIL) + { + D3D11_DEPTH_STENCIL_VIEW_DESC desc; + desc.Format = format; + desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; + desc.Texture2D.MipSlice = 0; + desc.Flags = 0; + hr = D3D11DEVICE->CreateDepthStencilView(resource,&desc, tex->getDSViewPtr()); + AssertFatal(SUCCEEDED(hr), "CreateDepthStencilView:: failed to create view!"); + } +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureManager.h b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.h new file mode 100644 index 0000000000..fa32941d8c --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureManager.h @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3DTEXTUREMANAGER_H_ +#define _GFXD3DTEXTUREMANAGER_H_ + +#include "gfx/D3D11/gfxD3D11TextureObject.h" +#include "core/util/safeRelease.h" + +class GFXD3D11TextureManager : public GFXTextureManager +{ + friend class GFXD3D11TextureObject; + +public: + GFXD3D11TextureManager(); + virtual ~GFXD3D11TextureManager(); + void createResourceView(U32 height, U32 width, U32 depth, DXGI_FORMAT format, U32 numMipLevels,U32 usageFlags, GFXTextureObject *inTex); +protected: + + // GFXTextureManager + GFXTextureObject *_createTextureObject( U32 height, + U32 width, + U32 depth, + GFXFormat format, + GFXTextureProfile *profile, + U32 numMipLevels, + bool forceMips = false, + S32 antialiasLevel = 0, + GFXTextureObject *inTex = NULL ); + + bool _loadTexture(GFXTextureObject *texture, DDSFile *dds); + bool _loadTexture(GFXTextureObject *texture, GBitmap *bmp); + bool _loadTexture(GFXTextureObject *texture, void *raw); + bool _refreshTexture(GFXTextureObject *texture); + bool _freeTexture(GFXTextureObject *texture, bool zombify = false); + +private: + U32 mCurTexSet[TEXTURE_STAGE_COUNT]; + + void _innerCreateTexture(GFXD3D11TextureObject *obj, U32 height, U32 width, U32 depth, GFXFormat format, GFXTextureProfile *profile, U32 numMipLevels, bool forceMips = false, S32 antialiasLevel = 0); +}; + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureObject.cpp b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.cpp new file mode 100644 index 0000000000..8f15cf550f --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.cpp @@ -0,0 +1,280 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/D3D11/gfxD3D11TextureObject.h" +#include "platform/profiler.h" +#include "console/console.h" + +#ifdef TORQUE_DEBUG +U32 GFXD3D11TextureObject::mTexCount = 0; +#endif + + +// GFXFormatR8G8B8 has now the same behaviour as GFXFormatR8G8B8X8. +// This is because 24 bit format are now deprecated by microsoft, for data alignment reason there's no changes beetween 24 and 32 bit formats. +// DirectX 10-11 both have 24 bit format no longer. + + +GFXD3D11TextureObject::GFXD3D11TextureObject( GFXDevice * d, GFXTextureProfile *profile) : GFXTextureObject( d, profile ) +{ +#ifdef D3D11_DEBUG_SPEW + mTexCount++; + Con::printf("+ texMake %d %x", mTexCount, this); +#endif + + mD3DTexture = NULL; + mLocked = false; + + mD3DSurface = NULL; + mLockedSubresource = 0; + mDSView = NULL; + mRTView = NULL; + mSRView = NULL; +} + +GFXD3D11TextureObject::~GFXD3D11TextureObject() +{ + kill(); +#ifdef D3D11_DEBUG_SPEW + mTexCount--; + Con::printf("+ texkill %d %x", mTexCount, this); +#endif +} + +GFXLockedRect *GFXD3D11TextureObject::lock(U32 mipLevel /*= 0*/, RectI *inRect /*= NULL*/) +{ + AssertFatal( !mLocked, "GFXD3D11TextureObject::lock - The texture is already locked!" ); + + D3D11_MAPPED_SUBRESOURCE mapInfo; + + if( mProfile->isRenderTarget() ) + { + //AssertFatal( 0, "GFXD3D11TextureObject::lock - Need to handle mapping render targets" ); + if( !mLockTex || + mLockTex->getWidth() != getWidth() || + mLockTex->getHeight() != getHeight() ) + { + mLockTex.set( getWidth(), getHeight(), mFormat, &GFXSystemMemProfile, avar("%s() - mLockTex (line %d)", __FUNCTION__, __LINE__) ); + } + + PROFILE_START(GFXD3D11TextureObject_lockRT); + + GFXD3D11Device* dev = D3D11; + + GFXD3D11TextureObject* to = (GFXD3D11TextureObject*) &(*mLockTex); + dev->getDeviceContext()->CopyResource(to->get2DTex(), mD3DTexture); + + mLockedSubresource = D3D11CalcSubresource(0, 0, 1); + HRESULT hr = dev->getDeviceContext()->Map(to->get2DTex(), mLockedSubresource, D3D11_MAP_READ, 0, &mapInfo); + + if (FAILED(hr)) + AssertFatal(false, "GFXD3D11TextureObject:lock- failed to map render target resource!"); + + mLocked = true; + + + PROFILE_END(); + } + else + { + RECT r; + + if(inRect) + { + r.top = inRect->point.y; + r.left = inRect->point.x; + r.bottom = inRect->point.y + inRect->extent.y; + r.right = inRect->point.x + inRect->extent.x; + } + + mLockedSubresource = D3D11CalcSubresource(mipLevel, 0, getMipLevels()); + HRESULT hr = D3D11DEVICECONTEXT->Map(mD3DTexture, mLockedSubresource, D3D11_MAP_WRITE_DISCARD, 0, &mapInfo); + + if ( FAILED(hr) ) + AssertFatal(false, "GFXD3D11TextureObject::lock - Failed to map subresource."); + + mLocked = true; + + } + + mLockRect.pBits = static_cast(mapInfo.pData); + mLockRect.Pitch = mapInfo.RowPitch; + + return (GFXLockedRect*)&mLockRect; +} + +void GFXD3D11TextureObject::unlock(U32 mipLevel) +{ + AssertFatal( mLocked, "GFXD3D11TextureObject::unlock - Attempting to unlock a surface that has not been locked" ); + + if( mProfile->isRenderTarget() ) + { + //AssertFatal( 0, "GFXD3D11TextureObject::unlock - Need to handle mapping render targets" ); + GFXD3D11TextureObject* to = (GFXD3D11TextureObject*)&(*mLockTex); + + D3D11->getDeviceContext()->Unmap(to->get2DTex(), mLockedSubresource); + + mLockedSubresource = 0; + mLocked = false; + } + else + { + D3D11DEVICECONTEXT->Unmap(get2DTex(), mLockedSubresource); + mLockedSubresource = 0; + mLocked = false; + } +} + +void GFXD3D11TextureObject::release() +{ + SAFE_RELEASE(mSRView); + SAFE_RELEASE(mRTView); + SAFE_RELEASE(mDSView); + SAFE_RELEASE(mD3DTexture); + SAFE_RELEASE(mD3DSurface); +} + +void GFXD3D11TextureObject::zombify() +{ + // Managed textures are managed by D3D + AssertFatal(!mLocked, "GFXD3D11TextureObject::zombify - Cannot zombify a locked texture!"); + if(isManaged) + return; + release(); +} + +void GFXD3D11TextureObject::resurrect() +{ + // Managed textures are managed by D3D + if(isManaged) + return; + + static_cast(TEXMGR)->refreshTexture(this); +} + +bool GFXD3D11TextureObject::copyToBmp(GBitmap* bmp) +{ + if (!bmp) + return false; + + // check format limitations + // at the moment we only support RGBA for the source (other 4 byte formats should + // be easy to add though) + AssertFatal(mFormat == GFXFormatR8G8B8A8, "copyToBmp: invalid format"); + if (mFormat != GFXFormatR8G8B8A8) + return false; + + PROFILE_START(GFXD3D11TextureObject_copyToBmp); + + AssertFatal(bmp->getWidth() == getWidth(), "doh"); + AssertFatal(bmp->getHeight() == getHeight(), "doh"); + U32 width = getWidth(); + U32 height = getHeight(); + + bmp->setHasTransparency(mHasTransparency); + + // set some constants + const U32 sourceBytesPerPixel = 4; + U32 destBytesPerPixel = 0; + + if(bmp->getFormat() == GFXFormatR8G8B8A8) + destBytesPerPixel = 4; + else if(bmp->getFormat() == GFXFormatR8G8B8) + destBytesPerPixel = 3; + else + // unsupported + AssertFatal(false, "unsupported bitmap format"); + + + // lock the texture + DXGI_MAPPED_RECT* lockRect = (DXGI_MAPPED_RECT*) lock(); + + // set pointers + U8* srcPtr = (U8*)lockRect->pBits; + U8* destPtr = bmp->getWritableBits(); + + // we will want to skip over any D3D cache data in the source texture + const S32 sourceCacheSize = lockRect->Pitch - width * sourceBytesPerPixel; + AssertFatal(sourceCacheSize >= 0, "copyToBmp: cache size is less than zero?"); + + PROFILE_START(GFXD3D11TextureObject_copyToBmp_pixCopy); + // copy data into bitmap + for (U32 row = 0; row < height; ++row) + { + for (U32 col = 0; col < width; ++col) + { + destPtr[0] = srcPtr[2]; // red + destPtr[1] = srcPtr[1]; // green + destPtr[2] = srcPtr[0]; // blue + if (destBytesPerPixel == 4) + destPtr[3] = srcPtr[3]; // alpha + + // go to next pixel in src + srcPtr += sourceBytesPerPixel; + + // go to next pixel in dest + destPtr += destBytesPerPixel; + } + // skip past the cache data for this row (if any) + srcPtr += sourceCacheSize; + } + PROFILE_END(); + + // assert if we stomped or underran memory + AssertFatal(U32(destPtr - bmp->getWritableBits()) == width * height * destBytesPerPixel, "copyToBmp: doh, memory error"); + AssertFatal(U32(srcPtr - (U8*)lockRect->pBits) == height * lockRect->Pitch, "copyToBmp: doh, memory error"); + + // unlock + unlock(); + + PROFILE_END(); + + return true; +} + +ID3D11ShaderResourceView* GFXD3D11TextureObject::getSRView() +{ + return mSRView; +} +ID3D11RenderTargetView* GFXD3D11TextureObject::getRTView() +{ + return mRTView; +} +ID3D11DepthStencilView* GFXD3D11TextureObject::getDSView() +{ + return mDSView; +} + +ID3D11ShaderResourceView** GFXD3D11TextureObject::getSRViewPtr() +{ + return &mSRView; +} +ID3D11RenderTargetView** GFXD3D11TextureObject::getRTViewPtr() +{ + return &mRTView; +} + +ID3D11DepthStencilView** GFXD3D11TextureObject::getDSViewPtr() +{ + return &mDSView; +} \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/gfxD3D11TextureObject.h b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.h new file mode 100644 index 0000000000..b50cc24655 --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11TextureObject.h @@ -0,0 +1,89 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D11TEXTUREOBJECT_H_ +#define _GFXD3D11TEXTUREOBJECT_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "gfx/gfxTextureHandle.h" +#include "gfx/gfxTextureManager.h" + +class GFXD3D11TextureObject : public GFXTextureObject +{ +protected: + static U32 mTexCount; + GFXTexHandle mLockTex; + DXGI_MAPPED_RECT mLockRect; + bool mLocked; + + U32 mLockedSubresource; + ID3D11Resource *mD3DTexture; + + // used for z buffers... + ID3D11Texture2D *mD3DSurface; + + ID3D11ShaderResourceView* mSRView; // for shader resource input + ID3D11RenderTargetView* mRTView; // for render targets + ID3D11DepthStencilView* mDSView; //render target view for depth stencil + +public: + + GFXD3D11TextureObject( GFXDevice * d, GFXTextureProfile *profile); + ~GFXD3D11TextureObject(); + + ID3D11Resource* getResource(){ return mD3DTexture; } + ID3D11Texture2D* get2DTex(){ return (ID3D11Texture2D*) mD3DTexture; } + ID3D11Texture2D** get2DTexPtr(){ return (ID3D11Texture2D**) &mD3DTexture; } + ID3D11Texture3D* get3DTex(){ return (ID3D11Texture3D*) mD3DTexture; } + ID3D11Texture3D** get3DTexPtr(){ return (ID3D11Texture3D**) &mD3DTexture; } + + ID3D11ShaderResourceView* getSRView(); + ID3D11RenderTargetView* getRTView(); + ID3D11DepthStencilView* getDSView(); + + ID3D11ShaderResourceView** getSRViewPtr(); + ID3D11RenderTargetView** getRTViewPtr(); + ID3D11DepthStencilView** getDSViewPtr(); + + + void release(); + + bool isManaged; //setting to true tells this texture not to be released from being zombify + + virtual GFXLockedRect * lock(U32 mipLevel = 0, RectI *inRect = NULL); + virtual void unlock(U32 mipLevel = 0 ); + + virtual bool copyToBmp(GBitmap* bmp); + ID3D11Texture2D* getSurface() {return mD3DSurface;} + ID3D11Texture2D** getSurfacePtr() {return &mD3DSurface;} + + // GFXResource + void zombify(); + void resurrect(); + +#ifdef TORQUE_DEBUG + virtual void pureVirtualCrash() {}; +#endif +}; + + +#endif diff --git a/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.cpp b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.cpp new file mode 100644 index 0000000000..1a8729e76e --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.cpp @@ -0,0 +1,233 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "gfx/D3D11/gfxD3D11VertexBuffer.h" +#include "console/console.h" + +GFXD3D11VertexBuffer::~GFXD3D11VertexBuffer() +{ + if(getOwningDevice() != NULL) + { + if(mBufferType != GFXBufferTypeVolatile) + { + SAFE_RELEASE(vb); + } + } +} + +void GFXD3D11VertexBuffer::lock(U32 vertexStart, U32 vertexEnd, void **vertexPtr) +{ + PROFILE_SCOPE(GFXD3D11VertexBuffer_lock); + + AssertFatal(lockedVertexStart == 0 && lockedVertexEnd == 0, "Cannot lock a buffer more than once!"); + + D3D11_MAP flags = D3D11_MAP_WRITE_DISCARD; + + switch(mBufferType) + { + case GFXBufferTypeStatic: + case GFXBufferTypeDynamic: + flags = D3D11_MAP_WRITE_DISCARD; + break; + + case GFXBufferTypeVolatile: + + // Get or create the volatile buffer... + mVolatileBuffer = D3D11->findVBPool( &mVertexFormat, vertexEnd ); + + if( !mVolatileBuffer ) + mVolatileBuffer = D3D11->createVBPool( &mVertexFormat, mVertexSize ); + + vb = mVolatileBuffer->vb; + + // Get our range now... + AssertFatal(vertexStart == 0, "Cannot get a subrange on a volatile buffer."); + AssertFatal(vertexEnd <= MAX_DYNAMIC_VERTS, "Cannot get more than MAX_DYNAMIC_VERTS in a volatile buffer. Up the constant!"); + AssertFatal(mVolatileBuffer->lockedVertexStart == 0 && mVolatileBuffer->lockedVertexEnd == 0, "Got more than one lock on the volatile pool."); + + // We created the pool when we requested this volatile buffer, so assume it exists... + if( mVolatileBuffer->mNumVerts + vertexEnd > MAX_DYNAMIC_VERTS ) + { + flags = D3D11_MAP_WRITE_DISCARD; + mVolatileStart = vertexStart = 0; + vertexEnd = vertexEnd; + } + else + { + flags = D3D11_MAP_WRITE_NO_OVERWRITE; + mVolatileStart = vertexStart = mVolatileBuffer->mNumVerts; + vertexEnd += mVolatileBuffer->mNumVerts; + } + + mVolatileBuffer->mNumVerts = vertexEnd+1; + + mVolatileBuffer->lockedVertexStart = vertexStart; + mVolatileBuffer->lockedVertexEnd = vertexEnd; + break; + } + + lockedVertexStart = vertexStart; + lockedVertexEnd = vertexEnd; + + // uncomment it for debugging purpose. called many times per frame... spammy! + //Con::printf("%x: Locking %s range (%d, %d)", this, (mBufferType == GFXBufferTypeVolatile ? "volatile" : "static"), lockedVertexStart, lockedVertexEnd); + + U32 sizeToLock = (vertexEnd - vertexStart) * mVertexSize; + if(mBufferType == GFXBufferTypeStatic) + { + *vertexPtr = new U8[sizeToLock]; + mLockedBuffer = *vertexPtr; + } + else + { + D3D11_MAPPED_SUBRESOURCE pVertexData; + ZeroMemory(&pVertexData, sizeof(D3D11_MAPPED_SUBRESOURCE)); + + HRESULT hr = D3D11DEVICECONTEXT->Map(vb, 0, flags, 0, &pVertexData); + + if(FAILED(hr)) + { + AssertFatal(false, "Unable to lock vertex buffer."); + } + + *vertexPtr = (U8*)pVertexData.pData + (vertexStart * mVertexSize); + } + + + + #ifdef TORQUE_DEBUG + + // Allocate a debug buffer large enough for the lock + // plus space for over and under run guard strings. + const U32 guardSize = sizeof( _VBGuardString ); + mDebugGuardBuffer = new U8[sizeToLock+(guardSize*2)]; + + // Setup the guard strings. + dMemcpy( mDebugGuardBuffer, _VBGuardString, guardSize ); + dMemcpy( mDebugGuardBuffer + sizeToLock + guardSize, _VBGuardString, guardSize ); + + // Store the real lock pointer and return our debug pointer. + mLockedBuffer = *vertexPtr; + *vertexPtr = mDebugGuardBuffer + guardSize; + + #endif // TORQUE_DEBUG +} + +void GFXD3D11VertexBuffer::unlock() +{ + PROFILE_SCOPE(GFXD3D11VertexBuffer_unlock); + + #ifdef TORQUE_DEBUG + + if ( mDebugGuardBuffer ) + { + const U32 guardSize = sizeof( _VBGuardString ); + const U32 sizeLocked = (lockedVertexEnd - lockedVertexStart) * mVertexSize; + + // First check the guard areas for overwrites. + AssertFatal(dMemcmp( mDebugGuardBuffer, _VBGuardString, guardSize) == 0, + "GFXD3D11VertexBuffer::unlock - Caught lock memory underrun!" ); + AssertFatal(dMemcmp( mDebugGuardBuffer + sizeLocked + guardSize, _VBGuardString, guardSize) == 0, + "GFXD3D11VertexBuffer::unlock - Caught lock memory overrun!" ); + + // Copy the debug content down to the real VB. + dMemcpy(mLockedBuffer, mDebugGuardBuffer + guardSize, sizeLocked); + + // Cleanup. + delete [] mDebugGuardBuffer; + mDebugGuardBuffer = NULL; + //mLockedBuffer = NULL; + } + + #endif // TORQUE_DEBUG + + if(mBufferType == GFXBufferTypeStatic) + { + const U32 sizeLocked = (lockedVertexEnd - lockedVertexStart) * mVertexSize; + //set up the update region of the buffer + D3D11_BOX box; + box.back = 1; + box.front = 0; + box.top = 0; + box.bottom = 1; + box.left = lockedVertexStart * mVertexSize; + box.right = lockedVertexEnd * mVertexSize; + //update the real vb buffer + D3D11DEVICECONTEXT->UpdateSubresource(vb, 0, &box,mLockedBuffer,sizeLocked, 0); + //clean up the old buffer + delete[] mLockedBuffer; + mLockedBuffer = NULL; + } + else + { + D3D11DEVICECONTEXT->Unmap(vb,0); + } + + + mIsFirstLock = false; + + //uncomment it for debugging purpose. called many times per frame... spammy! + //Con::printf("%x: Unlocking %s range (%d, %d)", this, (mBufferType == GFXBufferTypeVolatile ? "volatile" : "static"), lockedVertexStart, lockedVertexEnd); + + lockedVertexEnd = lockedVertexStart = 0; + + if(mVolatileBuffer.isValid()) + { + mVolatileBuffer->lockedVertexStart = 0; + mVolatileBuffer->lockedVertexEnd = 0; + mVolatileBuffer = NULL; + } +} + +void GFXD3D11VertexBuffer::zombify() +{ + AssertFatal(lockedVertexStart == 0 && lockedVertexEnd == 0, "GFXD3D11VertexBuffer::zombify - Cannot zombify a locked buffer!"); + // Static buffers are managed by D3D11 so we don't deal with them. + if(mBufferType == GFXBufferTypeDynamic) + { + SAFE_RELEASE(vb); + } +} + +void GFXD3D11VertexBuffer::resurrect() +{ + // Static buffers are managed by D3D11 so we don't deal with them. + if(mBufferType == GFXBufferTypeDynamic) + { + D3D11_BUFFER_DESC desc; + desc.ByteWidth = mVertexSize * mNumVerts; + desc.Usage = D3D11_USAGE_DYNAMIC; + desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; + desc.MiscFlags = 0; + desc.StructureByteStride = 0; + + HRESULT hr = D3D11DEVICE->CreateBuffer(&desc, NULL, &vb); + + if(FAILED(hr)) + { + AssertFatal(false, "GFXD3D11VertexBuffer::resurrect - Failed to allocate VB"); + } + } +} + diff --git a/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.h b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.h new file mode 100644 index 0000000000..380a0f93bd --- /dev/null +++ b/Engine/source/gfx/D3D11/gfxD3D11VertexBuffer.h @@ -0,0 +1,95 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GFXD3D_VERTEXBUFFER_H_ +#define _GFXD3D_VERTEXBUFFER_H_ + +#include "gfx/D3D11/gfxD3D11Device.h" +#include "core/util/safeDelete.h" + +class GFXD3D11VertexBuffer : public GFXVertexBuffer +{ +public: + ID3D11Buffer *vb; + StrongRefPtr mVolatileBuffer; + void *mLockedBuffer; +#ifdef TORQUE_DEBUG + #define _VBGuardString "GFX_VERTEX_BUFFER_GUARD_STRING" + U8 *mDebugGuardBuffer; + +#endif TORQUE_DEBUG + + bool mIsFirstLock; + bool mClearAtFrameEnd; + + GFXD3D11VertexBuffer(); + GFXD3D11VertexBuffer( GFXDevice *device, + U32 numVerts, + const GFXVertexFormat *vertexFormat, + U32 vertexSize, + GFXBufferType bufferType ); + virtual ~GFXD3D11VertexBuffer(); + + void lock(U32 vertexStart, U32 vertexEnd, void **vertexPtr); + void unlock(); + void prepare() {} + + // GFXResource interface + virtual void zombify(); + virtual void resurrect(); +}; + +//----------------------------------------------------------------------------- +// This is for debugging vertex buffers and trying to track down which vbs +// aren't getting free'd + +inline GFXD3D11VertexBuffer::GFXD3D11VertexBuffer() : GFXVertexBuffer(0,0,0,0,(GFXBufferType)0) +{ + vb = NULL; + mIsFirstLock = true; + lockedVertexEnd = lockedVertexStart = 0; + mClearAtFrameEnd = false; + +#ifdef TORQUE_DEBUG + mDebugGuardBuffer = NULL; + mLockedBuffer = NULL; +#endif +} + +inline GFXD3D11VertexBuffer::GFXD3D11VertexBuffer( GFXDevice *device, + U32 numVerts, + const GFXVertexFormat *vertexFormat, + U32 vertexSize, + GFXBufferType bufferType ) + : GFXVertexBuffer( device, numVerts, vertexFormat, vertexSize, bufferType ) +{ + vb = NULL; + mIsFirstLock = true; + mClearAtFrameEnd = false; + lockedVertexEnd = lockedVertexStart = 0; + mLockedBuffer = NULL; +#ifdef TORQUE_DEBUG + mDebugGuardBuffer = NULL; +#endif +} + +#endif // _GFXD3D_VERTEXBUFFER_H_ \ No newline at end of file diff --git a/Engine/source/gfx/D3D11/screenshotD3D11.cpp b/Engine/source/gfx/D3D11/screenshotD3D11.cpp new file mode 100644 index 0000000000..89fa5f90cd --- /dev/null +++ b/Engine/source/gfx/D3D11/screenshotD3D11.cpp @@ -0,0 +1,98 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2016 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "gfx/D3D11/screenshotD3D11.h" +#include "gfx/D3D11/gfxD3D11Device.h" + +//Note if MSAA is ever enabled this will need fixing +GBitmap* ScreenShotD3D11::_captureBackBuffer() +{ + ID3D11Texture2D* backBuf = D3D11->getBackBufferTexture(); + D3D11_TEXTURE2D_DESC desc; + backBuf->GetDesc(&desc); + desc.BindFlags = 0; + desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; + desc.Usage = D3D11_USAGE_STAGING; + + //create temp texure + ID3D11Texture2D* pNewTexture = NULL; + HRESULT hr = D3D11DEVICE->CreateTexture2D(&desc, NULL, &pNewTexture); + if (FAILED(hr)) + return NULL; + + U32 width = desc.Width; + U32 height = desc.Height; + // pixel data + U8 *pData = new U8[width * height * 4]; + + D3D11DEVICECONTEXT->CopyResource(pNewTexture, backBuf); + D3D11_MAPPED_SUBRESOURCE Resource; + + hr = D3D11DEVICECONTEXT->Map(pNewTexture, 0, D3D11_MAP_READ, 0, &Resource); + if (FAILED(hr)) + { + //cleanup + SAFE_DELETE(pData); + SAFE_RELEASE(pNewTexture); + return NULL; + } + + const U32 pitch = width << 2; + const U8* pSource = (U8*)Resource.pData; + U32 totalPitch = 0; + for (U32 i = 0; i < height; ++i) + { + dMemcpy(pData, pSource, width * 4); + pSource += Resource.RowPitch; + pData += pitch; + totalPitch += pitch; + } + + D3D11DEVICECONTEXT->Unmap(pNewTexture, 0); + pData -= totalPitch; + GBitmap *gb = new GBitmap(width, height); + + //Set GBitmap data and convert from bgr to rgb + ColorI c; + for (S32 i = 0; isetColor(j, i, c); + } + } + + //cleanup + SAFE_DELETE(pData); + SAFE_RELEASE(pNewTexture); + + + return gb; + +} + diff --git a/Engine/source/gfx/D3D11/screenshotD3D11.h b/Engine/source/gfx/D3D11/screenshotD3D11.h new file mode 100644 index 0000000000..1a3de23b73 --- /dev/null +++ b/Engine/source/gfx/D3D11/screenshotD3D11.h @@ -0,0 +1,39 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2016 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef _SCREENSHOTD3D11_H_ +#define _SCREENSHOTD3D11_H_ + +#include "gfx/screenshot.h" + +//************************************************************************** +// D3D implementation of screenshot +//************************************************************************** +class ScreenShotD3D11 : public ScreenShot +{ +protected: + + GBitmap* _captureBackBuffer(); + +}; + + +#endif // _SCREENSHOTD3D11_H_ From 3a9b50f702563d99317c8bd45f28146f67df362c Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sun, 20 Mar 2016 21:50:21 +1000 Subject: [PATCH 159/324] Direct3D11 common shader changes. --- .../shaders/common/VolumetricFog/VFogP.hlsl | 34 ++--- .../common/VolumetricFog/VFogPreP.hlsl | 5 +- .../common/VolumetricFog/VFogPreV.hlsl | 14 +- .../common/VolumetricFog/VFogRefl.hlsl | 6 +- .../shaders/common/VolumetricFog/VFogV.hlsl | 13 +- .../game/shaders/common/basicCloudsP.hlsl | 8 +- .../game/shaders/common/basicCloudsV.hlsl | 27 ++-- .../game/shaders/common/cloudLayerP.hlsl | 15 ++- .../game/shaders/common/cloudLayerV.hlsl | 11 +- .../fixedFunction/addColorTextureP.hlsl | 17 ++- .../fixedFunction/addColorTextureV.hlsl | 14 +- .../shaders/common/fixedFunction/colorP.hlsl | 12 +- .../shaders/common/fixedFunction/colorV.hlsl | 14 +- .../fixedFunction/modColorTextureP.hlsl | 17 ++- .../fixedFunction/modColorTextureV.hlsl | 14 +- .../common/fixedFunction/textureP.hlsl | 36 ++++++ .../common/fixedFunction/textureV.hlsl | 46 +++++++ .../Empty/game/shaders/common/foliage.hlsl | 4 +- .../shaders/common/fxFoliageReplicatorP.hlsl | 25 ++-- .../shaders/common/fxFoliageReplicatorV.hlsl | 39 +++--- .../game/shaders/common/gl/basicCloudsV.glsl | 1 + .../game/shaders/common/gl/cloudLayerV.glsl | 1 + .../game/shaders/common/gl/lighting.glsl | 43 +++++- .../game/shaders/common/gl/scatterSkyP.glsl | 3 + .../Empty/game/shaders/common/gl/torque.glsl | 33 +++++ .../game/shaders/common/guiMaterialV.hlsl | 12 +- .../game/shaders/common/hlslStructs.hlsl | 114 ++++++++++++++++ .../Empty/game/shaders/common/lighting.hlsl | 43 +++++- .../lighting/advanced/convexGeometryV.hlsl | 19 ++- .../lighting/advanced/dbgColorBufferP.hlsl | 30 +++++ .../lighting/advanced/dbgDepthVisualizeP.hlsl | 12 +- .../lighting/advanced/dbgGlowVisualizeP.hlsl | 7 +- .../advanced/dbgLightColorVisualizeP.hlsl | 12 +- .../advanced/dbgLightSpecularVisualizeP.hlsl | 11 +- .../advanced/dbgNormalVisualizeP.hlsl | 8 +- .../advanced/dbgShadowVisualizeP.hlsl | 14 +- .../advanced/dbgSpecMapVisualizeP.hlsl | 31 +++++ .../advanced/deferredClearGBufferP.hlsl | 54 ++++++++ .../advanced/deferredClearGBufferV.hlsl | 43 ++++++ .../advanced/deferredColorShaderP.hlsl | 46 +++++++ .../lighting/advanced/deferredShadingP.hlsl | 54 ++++++++ .../lighting/advanced/farFrustumQuad.hlsl | 4 +- .../lighting/advanced/farFrustumQuadV.hlsl | 6 +- .../lighting/advanced/gl/dbgColorBufferP.glsl | 34 +++++ .../advanced/gl/dbgDepthVisualizeP.glsl | 4 +- .../advanced/gl/dbgLightColorVisualizeP.glsl | 8 +- .../gl/dbgLightSpecularVisualizeP.glsl | 6 +- .../advanced/gl/dbgNormalVisualizeP.glsl | 4 +- .../advanced/gl/dbgSpecMapVisualizeP.glsl | 34 +++++ .../advanced/gl/deferredClearGBufferP.glsl | 40 ++++++ .../advanced/gl/deferredColorShaderP.glsl | 37 ++++++ .../advanced/gl/deferredShadingP.glsl | 59 +++++++++ .../lighting/advanced/gl/pointLightP.glsl | 17 ++- .../lighting/advanced/gl/spotLightP.glsl | 18 ++- .../lighting/advanced/gl/vectorLightP.glsl | 29 +++-- .../advanced/particlePointLightP.hlsl | 25 ++-- .../advanced/particlePointLightV.hlsl | 20 +-- .../common/lighting/advanced/pointLightP.hlsl | 76 ++++++----- .../common/lighting/advanced/softShadow.hlsl | 19 ++- .../common/lighting/advanced/spotLightP.hlsl | 66 ++++++---- .../lighting/advanced/vectorLightP.hlsl | 122 ++++++++++-------- .../common/lighting/basic/shadowFilterP.hlsl | 12 +- .../common/lighting/basic/shadowFilterV.hlsl | 4 +- .../common/lighting/shadowMap/boxFilterP.hlsl | 22 ++-- .../common/lighting/shadowMap/boxFilterV.hlsl | 11 +- .../shaders/common/particleCompositeP.hlsl | 20 ++- .../shaders/common/particleCompositeV.hlsl | 18 ++- .../Empty/game/shaders/common/particlesP.hlsl | 22 ++-- .../Empty/game/shaders/common/particlesV.hlsl | 10 +- .../shaders/common/planarReflectBumpP.hlsl | 26 ++-- .../shaders/common/planarReflectBumpV.hlsl | 15 ++- .../game/shaders/common/planarReflectP.hlsl | 21 +-- .../game/shaders/common/planarReflectV.hlsl | 13 +- .../shaders/common/postFx/VolFogGlowP.hlsl | 22 ++-- .../common/postFx/caustics/causticsP.hlsl | 21 +-- .../shaders/common/postFx/chromaticLens.hlsl | 7 +- .../common/postFx/dof/DOF_CalcCoC_P.hlsl | 11 +- .../common/postFx/dof/DOF_CalcCoC_V.hlsl | 2 +- .../common/postFx/dof/DOF_DownSample_P.hlsl | 80 ++++++------ .../common/postFx/dof/DOF_DownSample_V.hlsl | 6 +- .../common/postFx/dof/DOF_Final_P.hlsl | 41 +++--- .../common/postFx/dof/DOF_Final_V.hlsl | 2 +- .../common/postFx/dof/DOF_Gausian_P.hlsl | 24 ++-- .../common/postFx/dof/DOF_Gausian_V.hlsl | 6 +- .../common/postFx/dof/DOF_Passthrough_V.hlsl | 2 +- .../common/postFx/dof/DOF_SmallBlur_P.hlsl | 15 ++- .../common/postFx/dof/DOF_SmallBlur_V.hlsl | 6 +- .../common/postFx/dof/gl/DOF_CalcCoC_P.glsl | 2 +- .../common/postFx/edgeaa/dbgEdgeDisplayP.hlsl | 8 +- .../shaders/common/postFx/edgeaa/edgeAAP.hlsl | 14 +- .../common/postFx/edgeaa/edgeDetectP.hlsl | 17 ++- .../game/shaders/common/postFx/flashP.hlsl | 6 +- .../game/shaders/common/postFx/fogP.hlsl | 9 +- .../shaders/common/postFx/fxaa/fxaaP.hlsl | 29 ++++- .../shaders/common/postFx/fxaa/fxaaV.hlsl | 4 +- .../game/shaders/common/postFx/gammaP.hlsl | 23 ++-- .../game/shaders/common/postFx/gl/gammaP.glsl | 8 ++ .../shaders/common/postFx/gl/glowBlurP.glsl | 4 +- .../game/shaders/common/postFx/glowBlurP.hlsl | 24 ++-- .../game/shaders/common/postFx/glowBlurV.hlsl | 4 +- .../common/postFx/hdr/bloomGaussBlurHP.hlsl | 7 +- .../common/postFx/hdr/bloomGaussBlurVP.hlsl | 7 +- .../common/postFx/hdr/brightPassFilterP.hlsl | 11 +- .../postFx/hdr/calculateAdaptedLumP.hlsl | 11 +- .../common/postFx/hdr/downScale4x4P.hlsl | 11 +- .../common/postFx/hdr/downScale4x4V.hlsl | 9 +- .../common/postFx/hdr/finalPassCombineP.hlsl | 41 +++--- .../postFx/hdr/gl/finalPassCombineP.glsl | 11 +- .../common/postFx/hdr/luminanceVisP.hlsl | 7 +- .../common/postFx/hdr/sampleLumInitialP.hlsl | 6 +- .../postFx/hdr/sampleLumIterativeP.hlsl | 6 +- .../postFx/lightRay/lightRayOccludeP.hlsl | 12 +- .../common/postFx/lightRay/lightRayP.hlsl | 17 +-- .../shaders/common/postFx/motionBlurP.hlsl | 15 +-- .../oculusvr/barrelDistortionChromaP.hlsl | 10 +- .../postFx/oculusvr/barrelDistortionP.hlsl | 7 +- .../common/postFx/oculusvr/monoToStereoP.hlsl | 7 +- .../game/shaders/common/postFx/passthruP.hlsl | 6 +- .../game/shaders/common/postFx/postFx.hlsl | 5 +- .../game/shaders/common/postFx/postFxV.hlsl | 2 +- .../common/postFx/ssao/SSAO_Blur_P.hlsl | 24 ++-- .../common/postFx/ssao/SSAO_Blur_V.hlsl | 6 +- .../shaders/common/postFx/ssao/SSAO_P.hlsl | 20 +-- .../common/postFx/ssao/SSAO_PowerTable_P.hlsl | 2 +- .../common/postFx/ssao/SSAO_PowerTable_V.hlsl | 2 +- .../shaders/common/postFx/turbulenceP.hlsl | 6 +- .../shaders/common/postFx/underwaterFogP.hlsl | 20 +-- .../common/postFx/vignette/VignetteP.hlsl | 7 +- .../Empty/game/shaders/common/precipP.hlsl | 16 ++- .../Empty/game/shaders/common/precipV.hlsl | 21 +-- .../game/shaders/common/projectedShadowP.hlsl | 11 +- .../game/shaders/common/projectedShadowV.hlsl | 18 +-- .../common/ribbons/basicRibbonShaderP.hlsl | 7 +- .../common/ribbons/basicRibbonShaderV.hlsl | 23 ++-- .../common/ribbons/texRibbonShaderP.hlsl | 13 +- .../common/ribbons/texRibbonShaderV.hlsl | 23 ++-- .../game/shaders/common/scatterSkyP.hlsl | 10 +- .../game/shaders/common/scatterSkyV.hlsl | 35 +++-- .../game/shaders/common/shaderModel.hlsl | 97 ++++++++++++++ .../shaders/common/shaderModelAutoGen.hlsl | 35 +++++ .../game/shaders/common/terrain/blendP.hlsl | 19 +-- .../game/shaders/common/terrain/blendV.hlsl | 11 +- .../game/shaders/common/terrain/terrain.glsl | 1 + .../game/shaders/common/terrain/terrain.hlsl | 1 + .../Empty/game/shaders/common/torque.hlsl | 51 ++++++-- .../shaders/common/water/gl/waterBasicP.glsl | 1 + .../game/shaders/common/water/gl/waterP.glsl | 3 +- .../shaders/common/water/waterBasicP.hlsl | 29 +++-- .../shaders/common/water/waterBasicV.hlsl | 23 ++-- .../game/shaders/common/water/waterP.hlsl | 49 +++---- .../game/shaders/common/water/waterV.hlsl | 18 +-- .../Empty/game/shaders/common/wavesP.hlsl | 29 +++-- .../Empty/game/shaders/common/wavesV.hlsl | 17 ++- .../lighting/advanced/deferredShading.cs | 2 +- .../shaders/common/VolumetricFog/VFogP.hlsl | 34 ++--- .../common/VolumetricFog/VFogPreP.hlsl | 5 +- .../common/VolumetricFog/VFogPreV.hlsl | 14 +- .../common/VolumetricFog/VFogRefl.hlsl | 5 +- .../shaders/common/VolumetricFog/VFogV.hlsl | 13 +- .../game/shaders/common/basicCloudsP.hlsl | 8 +- .../game/shaders/common/basicCloudsV.hlsl | 26 ++-- .../Full/game/shaders/common/cloudLayerP.hlsl | 15 ++- .../Full/game/shaders/common/cloudLayerV.hlsl | 11 +- .../fixedFunction/addColorTextureP.hlsl | 17 ++- .../fixedFunction/addColorTextureV.hlsl | 14 +- .../shaders/common/fixedFunction/colorP.hlsl | 12 +- .../shaders/common/fixedFunction/colorV.hlsl | 14 +- .../fixedFunction/modColorTextureP.hlsl | 17 ++- .../fixedFunction/modColorTextureV.hlsl | 14 +- .../common/fixedFunction/textureP.hlsl | 36 ++++++ .../common/fixedFunction/textureV.hlsl | 46 +++++++ .../Full/game/shaders/common/foliage.hlsl | 4 +- .../shaders/common/fxFoliageReplicatorP.hlsl | 25 ++-- .../shaders/common/fxFoliageReplicatorV.hlsl | 39 +++--- .../game/shaders/common/guiMaterialV.hlsl | 12 +- .../Full/game/shaders/common/hlslStructs.hlsl | 114 ++++++++++++++++ .../Full/game/shaders/common/lighting.hlsl | 2 +- .../lighting/advanced/convexGeometryV.hlsl | 19 ++- .../lighting/advanced/dbgColorBufferP.hlsl | 7 +- .../lighting/advanced/dbgDepthVisualizeP.hlsl | 12 +- .../lighting/advanced/dbgGlowVisualizeP.hlsl | 7 +- .../advanced/dbgLightColorVisualizeP.hlsl | 8 +- .../advanced/dbgLightSpecularVisualizeP.hlsl | 9 +- .../advanced/dbgNormalVisualizeP.hlsl | 8 +- .../advanced/dbgShadowVisualizeP.hlsl | 14 +- .../advanced/dbgSpecMapVisualizeP.hlsl | 7 +- .../advanced/deferredClearGBufferP.hlsl | 15 ++- .../advanced/deferredClearGBufferV.hlsl | 43 ++++++ .../advanced/deferredColorShaderP.hlsl | 8 +- .../lighting/advanced/deferredShadingP.hlsl | 20 +-- .../lighting/advanced/farFrustumQuad.hlsl | 4 +- .../lighting/advanced/farFrustumQuadV.hlsl | 6 +- .../advanced/particlePointLightP.hlsl | 25 ++-- .../advanced/particlePointLightV.hlsl | 20 +-- .../common/lighting/advanced/pointLightP.hlsl | 70 +++++----- .../common/lighting/advanced/softShadow.hlsl | 19 ++- .../common/lighting/advanced/spotLightP.hlsl | 62 ++++----- .../lighting/advanced/vectorLightP.hlsl | 113 ++++++++-------- .../common/lighting/basic/shadowFilterP.hlsl | 12 +- .../common/lighting/basic/shadowFilterV.hlsl | 4 +- .../common/lighting/shadowMap/boxFilterP.hlsl | 22 ++-- .../common/lighting/shadowMap/boxFilterV.hlsl | 11 +- .../shaders/common/particleCompositeP.hlsl | 20 ++- .../shaders/common/particleCompositeV.hlsl | 18 ++- .../Full/game/shaders/common/particlesP.hlsl | 22 ++-- .../Full/game/shaders/common/particlesV.hlsl | 10 +- .../shaders/common/planarReflectBumpP.hlsl | 26 ++-- .../shaders/common/planarReflectBumpV.hlsl | 15 ++- .../game/shaders/common/planarReflectP.hlsl | 21 +-- .../game/shaders/common/planarReflectV.hlsl | 13 +- .../shaders/common/postFx/VolFogGlowP.hlsl | 22 ++-- .../common/postFx/caustics/causticsP.hlsl | 21 +-- .../shaders/common/postFx/chromaticLens.hlsl | 7 +- .../common/postFx/dof/DOF_CalcCoC_P.hlsl | 11 +- .../common/postFx/dof/DOF_CalcCoC_V.hlsl | 2 +- .../common/postFx/dof/DOF_DownSample_P.hlsl | 80 ++++++------ .../common/postFx/dof/DOF_DownSample_V.hlsl | 6 +- .../common/postFx/dof/DOF_Final_P.hlsl | 41 +++--- .../common/postFx/dof/DOF_Final_V.hlsl | 2 +- .../common/postFx/dof/DOF_Gausian_P.hlsl | 24 ++-- .../common/postFx/dof/DOF_Gausian_V.hlsl | 6 +- .../common/postFx/dof/DOF_Passthrough_V.hlsl | 2 +- .../common/postFx/dof/DOF_SmallBlur_P.hlsl | 15 ++- .../common/postFx/dof/DOF_SmallBlur_V.hlsl | 6 +- .../common/postFx/edgeaa/dbgEdgeDisplayP.hlsl | 8 +- .../shaders/common/postFx/edgeaa/edgeAAP.hlsl | 14 +- .../common/postFx/edgeaa/edgeDetectP.hlsl | 17 ++- .../game/shaders/common/postFx/flashP.hlsl | 6 +- .../Full/game/shaders/common/postFx/fogP.hlsl | 9 +- .../shaders/common/postFx/fxaa/fxaaP.hlsl | 29 ++++- .../shaders/common/postFx/fxaa/fxaaV.hlsl | 4 +- .../game/shaders/common/postFx/gammaP.hlsl | 14 +- .../game/shaders/common/postFx/glowBlurP.hlsl | 24 ++-- .../game/shaders/common/postFx/glowBlurV.hlsl | 4 +- .../common/postFx/hdr/bloomGaussBlurHP.hlsl | 7 +- .../common/postFx/hdr/bloomGaussBlurVP.hlsl | 7 +- .../common/postFx/hdr/brightPassFilterP.hlsl | 11 +- .../postFx/hdr/calculateAdaptedLumP.hlsl | 11 +- .../common/postFx/hdr/downScale4x4P.hlsl | 11 +- .../common/postFx/hdr/downScale4x4V.hlsl | 9 +- .../common/postFx/hdr/finalPassCombineP.hlsl | 32 +++-- .../common/postFx/hdr/luminanceVisP.hlsl | 7 +- .../common/postFx/hdr/sampleLumInitialP.hlsl | 6 +- .../postFx/hdr/sampleLumIterativeP.hlsl | 6 +- .../postFx/lightRay/lightRayOccludeP.hlsl | 12 +- .../common/postFx/lightRay/lightRayP.hlsl | 17 +-- .../shaders/common/postFx/motionBlurP.hlsl | 15 +-- .../oculusvr/barrelDistortionChromaP.hlsl | 10 +- .../postFx/oculusvr/barrelDistortionP.hlsl | 7 +- .../common/postFx/oculusvr/monoToStereoP.hlsl | 7 +- .../game/shaders/common/postFx/passthruP.hlsl | 6 +- .../game/shaders/common/postFx/postFx.hlsl | 5 +- .../game/shaders/common/postFx/postFxV.hlsl | 2 +- .../common/postFx/ssao/SSAO_Blur_P.hlsl | 24 ++-- .../common/postFx/ssao/SSAO_Blur_V.hlsl | 6 +- .../shaders/common/postFx/ssao/SSAO_P.hlsl | 20 +-- .../common/postFx/ssao/SSAO_PowerTable_P.hlsl | 2 +- .../common/postFx/ssao/SSAO_PowerTable_V.hlsl | 2 +- .../shaders/common/postFx/turbulenceP.hlsl | 6 +- .../shaders/common/postFx/underwaterFogP.hlsl | 20 +-- .../common/postFx/vignette/VignetteP.hlsl | 7 +- .../Full/game/shaders/common/precipP.hlsl | 16 ++- .../Full/game/shaders/common/precipV.hlsl | 21 +-- .../game/shaders/common/projectedShadowP.hlsl | 11 +- .../game/shaders/common/projectedShadowV.hlsl | 18 +-- .../common/ribbons/basicRibbonShaderP.hlsl | 7 +- .../common/ribbons/basicRibbonShaderV.hlsl | 23 ++-- .../common/ribbons/texRibbonShaderP.hlsl | 13 +- .../common/ribbons/texRibbonShaderV.hlsl | 23 ++-- .../Full/game/shaders/common/scatterSkyP.hlsl | 10 +- .../Full/game/shaders/common/scatterSkyV.hlsl | 35 +++-- .../Full/game/shaders/common/shaderModel.hlsl | 97 ++++++++++++++ .../shaders/common/shaderModelAutoGen.hlsl | 35 +++++ .../game/shaders/common/terrain/blendP.hlsl | 19 +-- .../game/shaders/common/terrain/blendV.hlsl | 11 +- .../game/shaders/common/terrain/terrain.hlsl | 1 + .../Full/game/shaders/common/torque.hlsl | 19 +-- .../shaders/common/water/waterBasicP.hlsl | 28 ++-- .../shaders/common/water/waterBasicV.hlsl | 23 ++-- .../game/shaders/common/water/waterP.hlsl | 48 +++---- .../game/shaders/common/water/waterV.hlsl | 18 +-- .../Full/game/shaders/common/wavesP.hlsl | 29 +++-- .../Full/game/shaders/common/wavesV.hlsl | 17 ++- 283 files changed, 3555 insertions(+), 1842 deletions(-) create mode 100644 Templates/Empty/game/shaders/common/fixedFunction/textureP.hlsl create mode 100644 Templates/Empty/game/shaders/common/fixedFunction/textureV.hlsl create mode 100644 Templates/Empty/game/shaders/common/hlslStructs.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/deferredShadingP.hlsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl create mode 100644 Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl create mode 100644 Templates/Empty/game/shaders/common/shaderModel.hlsl create mode 100644 Templates/Empty/game/shaders/common/shaderModelAutoGen.hlsl create mode 100644 Templates/Full/game/shaders/common/fixedFunction/textureP.hlsl create mode 100644 Templates/Full/game/shaders/common/fixedFunction/textureV.hlsl create mode 100644 Templates/Full/game/shaders/common/hlslStructs.hlsl create mode 100644 Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl create mode 100644 Templates/Full/game/shaders/common/shaderModel.hlsl create mode 100644 Templates/Full/game/shaders/common/shaderModelAutoGen.hlsl diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl index aaadbf4793..e900f7548b 100644 --- a/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogP.hlsl @@ -21,44 +21,44 @@ //----------------------------------------------------------------------------- // Volumetric Fog final pixel shader V2.00 - -#include "shadergen:/autogenConditioners.h" +#include "../shaderModel.hlsl" +#include "../shaderModelAutoGen.hlsl" #include "../torque.hlsl" -uniform sampler2D prepassTex : register(S0); -uniform sampler2D depthBuffer : register(S1); -uniform sampler2D frontBuffer : register(S2); -uniform sampler2D density : register(S3); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(depthBuffer, 1); +TORQUE_UNIFORM_SAMPLER2D(frontBuffer, 2); +TORQUE_UNIFORM_SAMPLER2D(density, 3); +uniform float3 ambientColor; uniform float accumTime; uniform float4 fogColor; +uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform float2 viewpoint; +uniform float2 texscale; uniform float fogDensity; uniform float preBias; uniform float textured; uniform float modstrength; -uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 -uniform float2 viewpoint; -uniform float2 texscale; -uniform float3 ambientColor; uniform float numtiles; uniform float fadesize; uniform float2 PixelSize; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 htpos : TEXCOORD0; float2 uv0 : TEXCOORD1; }; -float4 main( ConnectData IN ) : COLOR0 +float4 main( ConnectData IN ) : TORQUE_TARGET0 { float2 uvscreen=((IN.htpos.xy/IN.htpos.w) + 1.0 ) / 2.0; uvscreen.y = 1.0 - uvscreen.y; - float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; - float depth = tex2D(depthBuffer,uvscreen).r; - float front = tex2D(frontBuffer,uvscreen).r; + float obj_test = TORQUE_PREPASS_UNCONDITION(prepassTex, uvscreen).w * preBias; + float depth = TORQUE_TEX2D(depthBuffer, uvscreen).r; + float front = TORQUE_TEX2D(frontBuffer, uvscreen).r; if (depth <= front) return float4(0,0,0,0); @@ -73,8 +73,8 @@ float4 main( ConnectData IN ) : COLOR0 { float2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); - float2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; - float2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + float2 mod1 = TORQUE_TEX2D(density, (offset + (modspeed.xy*accumTime))).rg; + float2 mod2 = TORQUE_TEX2D(density, (offset + (modspeed.zw*accumTime))).rg; diff = (mod2.r + mod1.r) * modstrength; col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; } diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl index bb06f5f7c4..fdc839507d 100644 --- a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreP.hlsl @@ -21,14 +21,15 @@ //----------------------------------------------------------------------------- // Volumetric Fog prepass pixel shader V1.00 +#include "../shaderModel.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 pos : TEXCOORD0; }; -float4 main( ConnectData IN ) : COLOR0 +float4 main( ConnectData IN ) : TORQUE_TARGET0 { float OUT; diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl index 2d13cdf015..aba7a745db 100644 --- a/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogPreV.hlsl @@ -22,11 +22,12 @@ // Volumetric Fog prepass vertex shader V1.00 -#include "shaders/common/hlslstructs.h" +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 pos : TEXCOORD0; }; @@ -35,12 +36,9 @@ uniform float4x4 modelView; ConnectData main( VertexIn_P IN) { ConnectData OUT; - - float4 inPos = IN.pos; - inPos.w = 1.0; - OUT.hpos = mul( modelView, inPos ); - OUT.pos = OUT.hpos; + OUT.hpos = mul(modelView, float4(IN.pos, 1.0)); + OUT.pos = OUT.hpos; - return OUT; + return OUT; } diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl index 87226a1ac5..380233b5fe 100644 --- a/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogRefl.hlsl @@ -20,17 +20,19 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +// Volumetric Fog Reflection pixel shader V1.00 +#include "../shaderModel.hlsl" uniform float4 fogColor; uniform float fogDensity; uniform float reflStrength; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 pos : TEXCOORD0; }; -float4 main( ConnectData IN ) : COLOR0 +float4 main( ConnectData IN ) : TORQUE_TARGET0 { return float4(fogColor.rgb,saturate(fogDensity*reflStrength)); } diff --git a/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl b/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl index 7f86802b54..167f83946e 100644 --- a/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl +++ b/Templates/Empty/game/shaders/common/VolumetricFog/VFogV.hlsl @@ -22,24 +22,25 @@ // Volumetric Fog final vertex shader V1.00 -#include "shaders/common/hlslstructs.h" +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 htpos : TEXCOORD0; float2 uv0 : TEXCOORD1; }; uniform float4x4 modelView; -ConnectData main( VertexIn_PNT IN) +ConnectData main( VertexIn_PNTT IN) { - ConnectData OUT; + ConnectData OUT; - OUT.hpos = mul(modelView, IN.pos); + OUT.hpos = mul(modelView, float4(IN.pos,1.0)); OUT.htpos = OUT.hpos; OUT.uv0 = IN.uv0; - return OUT; + return OUT; } diff --git a/Templates/Empty/game/shaders/common/basicCloudsP.hlsl b/Templates/Empty/game/shaders/common/basicCloudsP.hlsl index 53b88d8b76..4b40e5e8cd 100644 --- a/Templates/Empty/game/shaders/common/basicCloudsP.hlsl +++ b/Templates/Empty/game/shaders/common/basicCloudsP.hlsl @@ -24,14 +24,14 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 col = tex2D( diffuseMap, IN.texCoord ); + float4 col = TORQUE_TEX2D(diffuseMap, IN.texCoord); return hdrEncode( col ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/basicCloudsV.hlsl b/Templates/Empty/game/shaders/common/basicCloudsV.hlsl index 49842fd37b..477f17d508 100644 --- a/Templates/Empty/game/shaders/common/basicCloudsV.hlsl +++ b/Templates/Empty/game/shaders/common/basicCloudsV.hlsl @@ -20,39 +20,40 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct CloudVert { - float4 pos : POSITION; - float3 normal : NORMAL; - float3 binormal : BINORMAL; - float3 tangent : TANGENT; + float3 pos : POSITION; float2 uv0 : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; uniform float4x4 modelview; -uniform float accumTime; -uniform float texScale; uniform float2 texDirection; uniform float2 texOffset; +uniform float accumTime; +uniform float texScale; + ConnectData main( CloudVert IN ) -{ +{ ConnectData OUT; - - OUT.hpos = mul(modelview, IN.pos); - + + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); + OUT.hpos.w = OUT.hpos.z; + float2 uv = IN.uv0; uv += texOffset; uv *= texScale; uv += accumTime * texDirection; - OUT.texCoord = uv; - + OUT.texCoord = uv; + return OUT; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/cloudLayerP.hlsl b/Templates/Empty/game/shaders/common/cloudLayerP.hlsl index a3c2d06e89..efa8fe0b4d 100644 --- a/Templates/Empty/game/shaders/common/cloudLayerP.hlsl +++ b/Templates/Empty/game/shaders/common/cloudLayerP.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" #include "torque.hlsl" //----------------------------------------------------------------------------- @@ -27,7 +28,7 @@ //----------------------------------------------------------------------------- struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -38,7 +39,7 @@ struct ConnectData //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler2D normalHeightMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(normalHeightMap, 0); uniform float3 ambientColor; uniform float3 sunColor; uniform float cloudCoverage; @@ -99,7 +100,7 @@ float3 ComputeIllumination( float2 texCoord, return finalColor; } -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Normalize the interpolated vectors: float3 vViewTS = normalize( IN.vViewTS ); @@ -109,11 +110,11 @@ float4 main( ConnectData IN ) : COLOR float2 texSample = IN.texCoord12.xy; - float4 noise1 = tex2D( normalHeightMap, IN.texCoord12.zw ); + float4 noise1 = TORQUE_TEX2D( normalHeightMap, IN.texCoord12.zw ); noise1 = normalize( ( noise1 - 0.5 ) * 2.0 ); //return noise1; - float4 noise2 = tex2D( normalHeightMap, IN.texCoord34.xy ); + float4 noise2 = TORQUE_TEX2D(normalHeightMap, IN.texCoord34.xy); noise2 = normalize( ( noise2 - 0.5 ) * 2.0 ); //return noise2; @@ -122,7 +123,7 @@ float4 main( ConnectData IN ) : COLOR float noiseHeight = noise1.a * noise2.a * ( cloudCoverage / 2.0 + 0.5 ); - float3 vNormalTS = normalize( tex2D( normalHeightMap, texSample ).xyz * 2.0 - 1.0 ); + float3 vNormalTS = normalize( TORQUE_TEX2D(normalHeightMap, texSample).xyz * 2.0 - 1.0); vNormalTS += noiseNormal; vNormalTS = normalize( vNormalTS ); @@ -130,7 +131,7 @@ float4 main( ConnectData IN ) : COLOR cResultColor.rgb = ComputeIllumination( texSample, vLightTS, vViewTS, vNormalTS ); float coverage = ( cloudCoverage - 0.5 ) * 2.0; - cResultColor.a = tex2D( normalHeightMap, texSample ).a + coverage + noiseHeight; + cResultColor.a = TORQUE_TEX2D(normalHeightMap, texSample).a + coverage + noiseHeight; if ( cloudCoverage > -1.0 ) cResultColor.a /= 1.0 + coverage; diff --git a/Templates/Empty/game/shaders/common/cloudLayerV.hlsl b/Templates/Empty/game/shaders/common/cloudLayerV.hlsl index 8c1cc555f0..94f8b62cb6 100644 --- a/Templates/Empty/game/shaders/common/cloudLayerV.hlsl +++ b/Templates/Empty/game/shaders/common/cloudLayerV.hlsl @@ -23,10 +23,11 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" struct CloudVert { - float4 pos : POSITION; + float3 pos : POSITION; float3 normal : NORMAL; float3 binormal : BINORMAL; float3 tangent : TANGENT; @@ -35,7 +36,7 @@ struct CloudVert struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -61,8 +62,8 @@ ConnectData main( CloudVert IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); - + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); + OUT.hpos.w = OUT.hpos.z; // Offset the uv so we don't have a seam directly over our head. float2 uv = IN.uv0 + float2( 0.5, 0.5 ); @@ -85,7 +86,7 @@ ConnectData main( CloudVert IN ) float3 vBinormalWS = -IN.binormal; // Compute position in world space: - float4 vPositionWS = IN.pos + float4( eyePosWorld, 1 ); //mul( IN.pos, objTrans ); + float4 vPositionWS = float4(IN.pos, 1.0) + float4(eyePosWorld, 1); //mul( IN.pos, objTrans ); // Compute and output the world view vector (unnormalized): float3 vViewWS = eyePosWorld - vPositionWS.xyz; diff --git a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl index 52ae4e9557..d0577428fe 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return float4(color_in.rgb, color_in.a * tex2D(diffuseMap, texCoord_in).a); + return float4(IN.color.rgb, IN.color.a * TORQUE_TEX2D(diffuseMap, IN.texCoord).a); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/addColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl index 90bb081128..dd9990e070 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/colorP.hlsl @@ -20,7 +20,15 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 { - return color_in; + return IN.color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl index f0efe1493b..d16dfb8632 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/colorV.hlsl @@ -20,20 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; return Out; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl index ccf22845cd..63afec2a45 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return tex2D(diffuseMap, texCoord_in) * color_in; + return TORQUE_TEX2D(diffuseMap, IN.texCoord) * IN.color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl +++ b/Templates/Empty/game/shaders/common/fixedFunction/modColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Empty/game/shaders/common/fixedFunction/textureP.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/textureP.hlsl new file mode 100644 index 0000000000..82dbd4ce97 --- /dev/null +++ b/Templates/Empty/game/shaders/common/fixedFunction/textureP.hlsl @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../shaderModel.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 +{ + return TORQUE_TEX2D(diffuseMap, IN.texCoord); +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/fixedFunction/textureV.hlsl b/Templates/Empty/game/shaders/common/fixedFunction/textureV.hlsl new file mode 100644 index 0000000000..204cf95141 --- /dev/null +++ b/Templates/Empty/game/shaders/common/fixedFunction/textureV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../shaderModel.hlsl" + +struct Appdata +{ + float3 position : POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = mul(modelview, float4(In.position, 1.0)); + Out.texCoord = In.texCoord; + return Out; +} \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/foliage.hlsl b/Templates/Empty/game/shaders/common/foliage.hlsl index e875bb23fe..9952c29d69 100644 --- a/Templates/Empty/game/shaders/common/foliage.hlsl +++ b/Templates/Empty/game/shaders/common/foliage.hlsl @@ -30,11 +30,11 @@ #define MAX_COVERTYPES 8 +uniform float2 gc_fadeParams; +uniform float2 gc_windDir; uniform float3 gc_camRight; uniform float3 gc_camUp; uniform float4 gc_typeRects[MAX_COVERTYPES]; -uniform float2 gc_fadeParams; -uniform float2 gc_windDir; // .x = gust length // .y = premultiplied simulation time and gust frequency diff --git a/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl b/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl index dfa2e4de01..a8bb68e284 100644 --- a/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl +++ b/Templates/Empty/game/shaders/common/fxFoliageReplicatorP.hlsl @@ -21,36 +21,39 @@ //----------------------------------------------------------------------------- #include "shdrConsts.h" - +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 lum : COLOR0; + float4 hpos : TORQUE_POSITION; + float2 outTexCoord : TEXCOORD0; + float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(alphaMap, 1); + +uniform float4 groundAlpha; +uniform float4 ambient; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D diffuseMap : register(S0), - uniform sampler2D alphaMap : register(S1), - uniform float4 groundAlpha, - uniform float4 ambient ) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 alpha = tex2D(alphaMap, IN.alphaLookup); - OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * tex2D(diffuseMap, IN.texCoord); + float4 alpha = TORQUE_TEX2D(alphaMap, IN.alphaLookup); + OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * TORQUE_TEX2D(diffuseMap, IN.texCoord); OUT.col.a = OUT.col.a * min(alpha, groundAlpha + IN.groundAlphaCoeff.x).x; return OUT; diff --git a/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl b/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl index 06a9cf5e52..70ec9ff4cb 100644 --- a/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl +++ b/Templates/Empty/game/shaders/common/fxFoliageReplicatorV.hlsl @@ -23,39 +23,42 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float2 waveScale : TEXCOORD1; + float3 position : POSITION; float3 normal : NORMAL; - float4 position : POSITION; + float2 texCoord : TEXCOORD0; + float2 waveScale : TEXCOORD1; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 outTexCoord : TEXCOORD0; float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; +uniform float4x4 projection : register(C0); +uniform float4x4 world : register(C4); +uniform float GlobalSwayPhase : register(C8); +uniform float SwayMagnitudeSide : register(C9); +uniform float SwayMagnitudeFront : register(C10); +uniform float GlobalLightPhase : register(C11); +uniform float LuminanceMagnitude : register(C12); +uniform float LuminanceMidpoint : register(C13); +uniform float DistanceRange : register(C14); +uniform float3 CameraPos : register(C15); +uniform float TrueBillboard : register(C16); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 projection : register(C0), - uniform float4x4 world : register(C4), - uniform float GlobalSwayPhase : register(C8), - uniform float SwayMagnitudeSide : register(C9), - uniform float SwayMagnitudeFront : register(C10), - uniform float GlobalLightPhase : register(C11), - uniform float LuminanceMagnitude : register(C12), - uniform float LuminanceMidpoint : register(C13), - uniform float DistanceRange : register(C14), - uniform float3 CameraPos : register(C15), - uniform float TrueBillboard : register(C16) -) +ConnectData main( VertData IN ) { ConnectData OUT; @@ -113,7 +116,7 @@ ConnectData main( VertData IN, float Luminance = LuminanceMidpoint + LuminanceMagnitude * cos(GlobalLightPhase + IN.normal.y); // Alpha - float3 worldPos = float3(IN.position.x, IN.position.y, IN.position.z); + float3 worldPos = IN.position; float alpha = abs(distance(worldPos, CameraPos)) / DistanceRange; alpha = clamp(alpha, 0.0f, 1.0f); //pass it through diff --git a/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl b/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl index cccbafa8ca..40c597120e 100644 --- a/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl +++ b/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl @@ -41,6 +41,7 @@ out vec2 texCoord; void main() { gl_Position = tMul(modelview, IN_pos); + gl_Position.w = gl_Position.z; vec2 uv = IN_uv0; uv += texOffset; diff --git a/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl b/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl index 395c6f286e..cba5c009ad 100644 --- a/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl +++ b/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl @@ -62,6 +62,7 @@ void main() vec2 IN_uv0 = vTexCoord0.st; gl_Position = modelview * IN_pos; + gl_Position.w = gl_Position.z; // Offset the uv so we don't have a seam directly over our head. vec2 uv = IN_uv0 + vec2( 0.5, 0.5 ); diff --git a/Templates/Empty/game/shaders/common/gl/lighting.glsl b/Templates/Empty/game/shaders/common/gl/lighting.glsl index eb1c9b3553..804ab1e3b3 100644 --- a/Templates/Empty/game/shaders/common/gl/lighting.glsl +++ b/Templates/Empty/game/shaders/common/gl/lighting.glsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.glsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( vec3 wsView, /// float AL_CalcSpecular( vec3 toLight, vec3 normal, vec3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +vec4 AL_DeferredOutput( + vec3 lightColor, + vec3 diffuseColor, + vec4 matInfo, + vec4 ambient, + float specular, + float shadowAttenuation) +{ + vec3 specularColor = vec3(specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(max(specular,1.0f), max((matInfo.a / AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= vec3(shadowAttenuation); + lightColor += ambient.rgb; + return vec4(lightColor.rgb, specularOut); +} diff --git a/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl b/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl index d9fa80bcf1..b4e70f9028 100644 --- a/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl +++ b/Templates/Empty/game/shaders/common/gl/scatterSkyP.glsl @@ -73,5 +73,8 @@ void main() discard; OUT_col.a = 1; + + OUT_col = clamp(OUT_col, 0.0, 1.0); + OUT_col = hdrEncode( OUT_col ); } diff --git a/Templates/Empty/game/shaders/common/gl/torque.glsl b/Templates/Empty/game/shaders/common/gl/torque.glsl index 9032a57f77..d4a7c45381 100644 --- a/Templates/Empty/game/shaders/common/gl/torque.glsl +++ b/Templates/Empty/game/shaders/common/gl/torque.glsl @@ -284,4 +284,37 @@ void fizzle(vec2 vpos, float visibility) /// @note This macro will only work in the void main() method of a pixel shader. #define assert(condition, color) { if(!any(condition)) { OUT_col = color; return; } } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, float num) +{ + float process = round(flags * 255); + float squareNum = pow(2.0, num); + return (mod(process, pow(2.0, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return tex; +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +vec4 toLinear(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(2.2)), tex.a); +} +// Encodes gamma. +vec4 toGamma(vec4 tex) +{ + return vec4(pow(abs(tex.rgb), vec3(1.0/2.2)), tex.a); +} +#endif // + #endif // _TORQUE_GLSL_ diff --git a/Templates/Empty/game/shaders/common/guiMaterialV.hlsl b/Templates/Empty/game/shaders/common/guiMaterialV.hlsl index 425da5da4c..5d725338f7 100644 --- a/Templates/Empty/game/shaders/common/guiMaterialV.hlsl +++ b/Templates/Empty/game/shaders/common/guiMaterialV.hlsl @@ -20,23 +20,25 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" struct MaterialDecoratorConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; +uniform float4x4 modelview : register(C0); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -MaterialDecoratorConnectV main( VertexIn_PCT IN, - uniform float4x4 modelview : register(C0) ) +MaterialDecoratorConnectV main( VertexIn_PCT IN ) { MaterialDecoratorConnectV OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); OUT.uv0 = IN.uv0; return OUT; diff --git a/Templates/Empty/game/shaders/common/hlslStructs.hlsl b/Templates/Empty/game/shaders/common/hlslStructs.hlsl new file mode 100644 index 0000000000..ce0ca305c6 --- /dev/null +++ b/Templates/Empty/game/shaders/common/hlslStructs.hlsl @@ -0,0 +1,114 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// The purpose of this file is to get all of our HLSL structures into one place. +// Please use the structures here instead of redefining input and output structures +// in each shader file. If structures are added, please adhere to the naming convention. + +//------------------------------------------------------------------------------ +// Vertex Input Structures +// +// These structures map to FVFs/Vertex Declarations in Torque. See gfxStructs.h +//------------------------------------------------------------------------------ + +// Notes +// +// Position should be specified as a float3 as our vertex structures in +// the engine output float3s for position. + +struct VertexIn_P +{ + float3 pos : POSITION; +}; + +struct VertexIn_PT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PTTT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; +}; + +struct VertexIn_PC +{ + float3 pos : POSITION; + float4 color : DIFFUSE; +}; + +struct VertexIn_PNC +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; +}; + +struct VertexIn_PCT +{ + float3 pos : POSITION; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PN +{ + float3 pos : POSITION; + float3 normal : NORMAL; +}; + +struct VertexIn_PNT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float3 tangent : TANGENT; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNCT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTTTB +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float3 T : TEXCOORD2; + float3 B : TEXCOORD3; +}; \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting.hlsl b/Templates/Empty/game/shaders/common/lighting.hlsl index ec8129e944..a41b8a8734 100644 --- a/Templates/Empty/game/shaders/common/lighting.hlsl +++ b/Templates/Empty/game/shaders/common/lighting.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "./torque.hlsl" #ifndef TORQUE_SHADERGEN @@ -207,14 +208,42 @@ void compute4Lights( float3 wsView, /// float AL_CalcSpecular( float3 toLight, float3 normal, float3 toEye ) { - #ifdef PHONG_SPECULAR - // (R.V)^c - float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); - #else - // (N.H)^c [Blinn-Phong, TGEA style, default] - float specVal = dot( normal, normalize( toLight + toEye ) ); - #endif + // (R.V)^c + float specVal = dot( normalize( -reflect( toLight, normal ) ), toEye ); // Return the specular factor. return pow( max( specVal, 0.00001f ), AL_ConstantSpecularPower ); } + +/// The output for Deferred Lighting +/// +/// @param toLight Normalized vector representing direction from the pixel +/// being lit, to the light source, in world space. +/// +/// @param normal Normalized surface normal. +/// +/// @param toEye The normalized vector representing direction from the pixel +/// being lit to the camera. +/// +float4 AL_DeferredOutput( + float3 lightColor, + float3 diffuseColor, + float4 matInfo, + float4 ambient, + float specular, + float shadowAttenuation) +{ + float3 specularColor = float3(specular, specular, specular); + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + specularColor = 0.04 * (1 - specular) + diffuseColor * specular; + } + + //specular = color * map * spec^gloss + float specularOut = (specularColor * matInfo.b * min(pow(abs(specular), max(( matInfo.a/ AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + + lightColor *= shadowAttenuation; + lightColor += ambient.rgb; + return float4(lightColor.rgb, specularOut); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl index c86cd4e890..064fcffa64 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/convexGeometryV.hlsl @@ -20,17 +20,24 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" + +struct VertData +{ + float3 pos : POSITION; + float4 color : COLOR; +}; struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; }; -ConvexConnectV main( VertexIn_P IN, +ConvexConnectV main( VertData IN, uniform float4x4 modelview, uniform float4x4 objTrans, uniform float4x4 worldViewOnly, @@ -38,9 +45,9 @@ ConvexConnectV main( VertexIn_P IN, { ConvexConnectV OUT; - OUT.hpos = mul( modelview, IN.pos ); - OUT.wsEyeDir = mul( objTrans, IN.pos ) - float4( eyePosWorld, 0.0 ); - OUT.vsEyeDir = mul( worldViewOnly, IN.pos ); + OUT.hpos = mul( modelview, float4(IN.pos,1.0) ); + OUT.wsEyeDir = mul(objTrans, float4(IN.pos, 1.0)) - float4(eyePosWorld, 0.0); + OUT.vsEyeDir = mul(worldViewOnly, float4(IN.pos, 1.0)); OUT.ssPos = OUT.hpos; return OUT; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl new file mode 100644 index 0000000000..ad3debbaf4 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl @@ -0,0 +1,30 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + return float4(TORQUE_TEX2D( colorBufferTex, IN.uv0 ).rgb, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl index a2b2b5d7d7..68df09a78c 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; - return float4( tex1D( depthViz, depth ).rgb, 1.0 ); + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1.0 ); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl index 3c31c897e8..2573836592 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl @@ -20,12 +20,11 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(glowBuffer, 0); -float4 main( PFXVertToPix IN, - uniform sampler2D glowBuffer : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return tex2D(glowBuffer, IN.uv0); + return TORQUE_TEX2D(glowBuffer, IN.uv0); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl index 487b4c7405..ca6d8d677c 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl @@ -20,15 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); - return float4( lightcolor, 1.0 ); + float4 lightColor = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); + return float4( lightColor.rgb, 1.0 ); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl index edc25ed037..072f07e00e 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl @@ -20,15 +20,12 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); - -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( tex2D( lightPrePassTex, IN.uv0 ), lightcolor, nl_Att, specular ); + float specular = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ).a; return float4( specular, specular, specular, 1.0 ); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl index c160045b4a..4f31d2c531 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl @@ -20,13 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 normal = prepassUncondition( prepassTex, IN.uv0 ).xyz; + float3 normal = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).xyz; return float4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl index b1f2bca29f..b548334991 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl @@ -20,15 +20,19 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + struct MaterialDecoratorConnectV { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -float4 main( MaterialDecoratorConnectV IN, - uniform sampler2D shadowMap : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); + +float4 main( MaterialDecoratorConnectV IN ) : TORQUE_TARGET0 { - float depth = saturate( tex2D( shadowMap, IN.uv0 ).r ); - return float4( tex1D( depthViz, depth ).rgb, 1 ); + float depth = saturate( TORQUE_TEX2D( shadowMap, IN.uv0 ).r ); + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl new file mode 100644 index 0000000000..eba38a8799 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl @@ -0,0 +1,31 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(matinfoTex,0); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + float specular = TORQUE_TEX2D( matinfoTex, IN.uv0 ).b; + return float4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl new file mode 100644 index 0000000000..cefebe8c70 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../shaderModel.hlsl" + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + +struct Fragout +{ + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( Conn IN ) +{ + Fragout OUT; + + // Clear Prepass Buffer ( Normals/Depth ); + OUT.col = float4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT.col1 = float4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT.col2 = float4(0.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl new file mode 100644 index 0000000000..20ba4d5097 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../shaderModel.hlsl" + +struct Appdata +{ + float3 pos : POSITION; + float4 color : COLOR; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = float4(In.pos,1.0); + return Out; +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl new file mode 100644 index 0000000000..d91d2eb38a --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../shaderModel.hlsl" + +struct Fragout +{ + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; +}; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +Fragout main( ) +{ + Fragout OUT; + + OUT.col = float4(0.0, 0.0, 0.0, 0.0); + OUT.col1 = float4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + OUT.col2 = float4(1.0, 0.0, 0.0, 1.0); + + return OUT; +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/deferredShadingP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/deferredShadingP.hlsl new file mode 100644 index 0000000000..c710656f87 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/deferredShadingP.hlsl @@ -0,0 +1,54 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../shaderModelAutoGen.hlsl" +#include "../../postfx/postFx.hlsl" +#include "shaders/common/torque.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,1); +TORQUE_UNIFORM_SAMPLER2D(matInfoTex,2); +TORQUE_UNIFORM_SAMPLER2D(prepassTex,3); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 +{ + float4 lightBuffer = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); + float4 colorBuffer = TORQUE_TEX2D( colorBufferTex, IN.uv0 ); + float4 matInfo = TORQUE_TEX2D( matInfoTex, IN.uv0 ); + float specular = saturate(lightBuffer.a); + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + + if (depth>0.9999) + return float4(0,0,0,0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= float4(lightBuffer.rgb, 1.0); + colorBuffer += float4(specular, specular, specular, 1.0); + + return hdrEncode( float4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl index 567dd11ce2..543e216772 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl @@ -19,10 +19,11 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" struct FarFrustumQuadConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; @@ -30,6 +31,7 @@ struct FarFrustumQuadConnectV struct FarFrustumQuadConnectP { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl index 08cf612850..0167d901a0 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" #include "farFrustumQuad.hlsl" @@ -36,8 +36,8 @@ FarFrustumQuadConnectV main( VertexIn_PNTT IN, // Interpolators will generate eye rays the // from far-frustum corners. - OUT.wsEyeRay = IN.tangent.xyz; - OUT.vsEyeRay = IN.normal.xyz; + OUT.wsEyeRay = IN.tangent; + OUT.vsEyeRay = IN.normal; return OUT; } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl new file mode 100644 index 0000000000..48a96d47df --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl @@ -0,0 +1,34 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postfx/gl/postFx.glsl" + +uniform sampler2D colorBufferTex; + +out vec4 OUT_FragColor0; + +void main() +{ + OUT_FragColor0 = vec4(texture( colorBufferTex, uv0 ).rgb, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl index 7c17540975..eb3d6f7612 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl @@ -24,13 +24,13 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; uniform sampler1D depthViz; out vec4 OUT_col; void main() { - float depth = prepassUncondition( prepassBuffer, uv0 ).w; + float depth = prepassUncondition( prepassTex, uv0 ).w; OUT_col = vec4( texture( depthViz, depth ).rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl index 05645e1932..501e261cad 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); - OUT_col = vec4( lightcolor, 1.0 ); + vec4 lightColor = texture( lightPrePassTex, uv0 ); + OUT_col = vec4( lightColor.rgb, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl index 7e3e41ee98..c21c9b60f5 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl @@ -24,14 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D lightInfoBuffer; +uniform sampler2D lightPrePassTex; out vec4 OUT_col; void main() { - vec3 lightcolor; - float nl_Att, specular; - lightinfoUncondition( texture( lightInfoBuffer, uv0 ), lightcolor, nl_Att, specular ); + float specular = texture( lightPrePassTex, uv0 ).a; OUT_col = vec4( specular, specular, specular, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl index dfc611e886..84ea4d3fb1 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl @@ -24,12 +24,12 @@ #include "shadergen:/autogenConditioners.h" in vec2 uv0; -uniform sampler2D prepassBuffer; +uniform sampler2D prepassTex; out vec4 OUT_col; void main() { - vec3 normal = prepassUncondition( prepassBuffer, uv0 ).xyz; + vec3 normal = prepassUncondition( prepassTex, uv0 ).xyz; OUT_col = vec4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl new file mode 100644 index 0000000000..4ba9f67347 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl @@ -0,0 +1,34 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postfx/gl/postFx.glsl" + +uniform sampler2D matinfoTex; + +out vec4 OUT_FragColor0; + +void main() +{ + float specular = texture( matinfoTex, uv0 ).a; + OUT_FragColor0 = vec4( specular, specular, specular, 1.0 ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl new file mode 100644 index 0000000000..39dc0dc9fd --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl @@ -0,0 +1,40 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +out vec4 OUT_col; +out vec4 OUT_col1; +out vec4 OUT_col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + // Clear Prepass Buffer ( Normals/Depth ); + OUT_col = vec4(1.0, 1.0, 1.0, 1.0); + + // Clear Color Buffer. + OUT_col1 = vec4(0.0, 0.0, 0.0, 1.0); + + // Clear Material Info Buffer. + OUT_col2 = vec4(0.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl new file mode 100644 index 0000000000..85c5530895 --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl @@ -0,0 +1,37 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +layout (location = 0) out vec4 col; +layout (location = 1) out vec4 col1; +layout (location = 2) out vec4 col2; + +//----------------------------------------------------------------------------- +// Main +//----------------------------------------------------------------------------- +void main() +{ + col = vec4(0.0, 0.0, 0.0, 0.0); + col1 = vec4(1.0, 1.0, 1.0, 1.0); + + // Draw on color buffer. + col2 = vec4(1.0, 0.0, 0.0, 1.0); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl new file mode 100644 index 0000000000..4ee4b1d81f --- /dev/null +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl @@ -0,0 +1,59 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../../gl/hlslCompat.glsl" +#include "shadergen:/autogenConditioners.h" +#include "../../../postfx/gl/postFx.glsl" +#include "../../../gl/torque.glsl" + +uniform sampler2D colorBufferTex; +uniform sampler2D lightPrePassTex; +uniform sampler2D matInfoTex; +uniform sampler2D prepassTex; + +out vec4 OUT_col; + +void main() +{ + float depth = prepassUncondition( prepassTex, uv0 ).w; + if (depth>0.9999) + { + OUT_col = vec4(0.0); + return; + } + vec4 lightBuffer = texture( lightPrePassTex, uv0 ); + vec4 colorBuffer = texture( colorBufferTex, uv0 ); + vec4 matInfo = texture( matInfoTex, uv0 ); + float specular = clamp(lightBuffer.a,0.0,1.0); + + // Diffuse Color Altered by Metalness + bool metalness = getFlag(matInfo.r, 3); + if ( metalness ) + { + colorBuffer *= (1.0 - colorBuffer.a); + } + + colorBuffer *= vec4(lightBuffer.rgb, 1.0); + colorBuffer += vec4(specular, specular, specular, 1.0); + + OUT_col = hdrEncode( vec4(colorBuffer.rgb, 1.0) ); +} diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl index 92c9369a76..8a1aae3ca5 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/pointLightP.glsl @@ -33,6 +33,7 @@ in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #ifdef USE_COOKIE_TEX @@ -111,6 +112,10 @@ uniform sampler2D prePassBuffer; uniform sampler2D dynamicShadowMap; #endif +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; + uniform vec4 rtParams0; uniform vec3 lightPosition; @@ -133,6 +138,15 @@ void main() vec3 ssPos = ssPos.xyz / ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -244,5 +258,6 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + vec4 colorSample = texture( colorBuffer, uvScene ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl index 29c278508d..e7f3e88a72 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/spotLightP.glsl @@ -32,10 +32,12 @@ in vec4 wsEyeDir; in vec4 ssPos; in vec4 vsEyeDir; +in vec4 color; #define IN_wsEyeDir wsEyeDir #define IN_ssPos ssPos #define IN_vsEyeDir vsEyeDir +#define IN_color color #ifdef USE_COOKIE_TEX @@ -48,6 +50,10 @@ uniform sampler2D prePassBuffer; uniform sampler2D shadowMap; uniform sampler2D dynamicShadowMap; +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; + uniform vec4 rtParams0; uniform vec3 lightPosition; @@ -74,6 +80,15 @@ void main() vec3 ssPos = IN_ssPos.xyz / IN_ssPos.w; vec2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + vec4 matInfo = texture( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(0.0, 0.0, 0.0, 0.0); + return; + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -180,5 +195,6 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + vec4 colorSample = texture( colorBuffer, uvScene ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl index 4eb4973a3c..608524a5a6 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl @@ -39,10 +39,13 @@ uniform sampler2D dynamicShadowMap; #ifdef USE_SSAO_MASK uniform sampler2D ssaoMask ; -uniform vec4 rtParams2; +uniform vec4 rtParams3; #endif -uniform sampler2D prePassBuffer; +uniform sampler2D prePassBuffer; +uniform sampler2D lightBuffer; +uniform sampler2D colorBuffer; +uniform sampler2D matInfoBuffer; uniform vec3 lightDirection; uniform vec4 lightColor; uniform float lightBrightness; @@ -189,7 +192,16 @@ vec4 AL_VectorLightShadowCast( sampler2D _sourceshadowMap, out vec4 OUT_col; void main() -{ +{ + // Emissive. + float4 matInfo = texture( matInfoBuffer, uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + OUT_col = vec4(1.0, 1.0, 1.0, 0.0); + return; + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); vec3 normal = prepassSample.rgb; @@ -228,8 +240,6 @@ void main() shadowSoftness, dotNL, overDarkPSSM); - - vec4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, uv0.xy, dynamicWorldToLightProj, @@ -242,14 +252,13 @@ void main() shadowSoftness, dotNL, overDarkPSSM); - float static_shadowed = static_shadowed_colors.a; float dynamic_shadowed = dynamic_shadowed_colors.a; #ifdef PSSM_DEBUG_RENDER debugColor = static_shadowed_colors.rgb*0.5+dynamic_shadowed_colors.rgb*0.5; #endif - + // Fade out the shadow at the end of the range. vec4 zDist = vec4(zNearFarInvNearFar.x + zNearFarInvNearFar.y * depth); float fadeOutAmt = ( zDist.x - fadeStartLength.x ) * fadeStartLength.y; @@ -295,7 +304,7 @@ void main() // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - texture( ssaoMask, viewportCoordToRenderTarget( uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif @@ -303,6 +312,6 @@ void main() lightColorOut = debugColor; #endif - OUT_col = lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); - + vec4 colorSample = texture( colorBuffer, uv0 ); + OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl index bc47849804..7ff5d50d27 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightP.hlsl @@ -20,35 +20,36 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" - #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -float4 main( ConvexConnectP IN, - uniform sampler2D prePassBuffer : register(S0), - - uniform float4 lightPosition, - uniform float4 lightColor, - uniform float lightRange, - - uniform float4 vsFarPlane, - uniform float4 rtParams0 ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); + +uniform float4 lightPosition; +uniform float4 lightColor; +uniform float lightRange; +uniform float4 vsFarPlane; +uniform float4 rtParams0; + +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos(ssPos, rtParams0); // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition(prePassBuffer, uvScene); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION(prePassBuffer, uvScene); float3 normal = prepassSample.rgb; float depth = prepassSample.a; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl index f5dc9e4442..faa2ec1155 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/particlePointLightV.hlsl @@ -20,24 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -ConvexConnectV main( VertexIn_P IN, - uniform float4x4 viewProj, - uniform float4x4 view, - uniform float3 particlePosWorld, - uniform float lightRange ) +uniform float4x4 viewProj; +uniform float4x4 view; +uniform float3 particlePosWorld; +uniform float lightRange; + +ConvexConnectV main( VertexIn_P IN ) { ConvexConnectV OUT; - - float4 vPosWorld = IN.pos + float4(particlePosWorld, 0.0) + float4(IN.pos.xyz, 0.0) * lightRange; + float4 pos = float4(IN.pos, 0.0); + float4 vPosWorld = pos + float4(particlePosWorld, 0.0) + pos * lightRange; OUT.hpos = mul(viewProj, vPosWorld); OUT.vsEyeDir = mul(view, vPosWorld); OUT.ssPos = OUT.hpos; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl index 48c0d76e3c..540fd65c71 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" @@ -31,6 +31,7 @@ struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; @@ -40,7 +41,7 @@ struct ConvexConnectP #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform samplerCUBE cookieMap : register(S3); +TORQUE_UNIFORM_SAMPLERCUBE(cookieMap, 3); #endif @@ -52,9 +53,9 @@ uniform samplerCUBE cookieMap : register(S3); return shadowCoord; } - float4 shadowSample( samplerCUBE shadowMap, float3 shadowCoord ) + float4 shadowSample( TORQUE_SAMPLERCUBE(shadowMap), float3 shadowCoord ) { - return texCUBE( shadowMap, shadowCoord ); + return TORQUE_TEXCUBE( shadowMap, shadowCoord ); } #else @@ -105,40 +106,52 @@ uniform samplerCUBE cookieMap : register(S3); #endif +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); -float4 main( ConvexConnectP IN, +#ifdef SHADOW_CUBE +TORQUE_UNIFORM_SAMPLERCUBE(shadowMap, 1); +#else +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); +#endif - uniform sampler2D prePassBuffer : register(S0), +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); - #ifdef SHADOW_CUBE - uniform samplerCUBE shadowMap : register(S1), - #else - uniform sampler2D shadowMap : register(S1), - uniform sampler2D dynamicShadowMap : register(S2), - #endif +uniform float4 rtParams0; +uniform float4 lightColor; - uniform float4 rtParams0, +uniform float lightBrightness; +uniform float3 lightPosition; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float4 lightMapParams, +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4 lightParams; - uniform float4 vsFarPlane, - uniform float3x3 viewToLightProj, - uniform float3x3 dynamicViewToLightProj, +uniform float lightRange; +uniform float shadowSoftness; +uniform float2 lightAttenuation; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +uniform float3x3 viewToLightProj; +uniform float3x3 dynamicViewToLightProj; + +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); - + + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -175,14 +188,14 @@ float4 main( ConvexConnectP IN, #ifdef SHADOW_CUBE // TODO: We need to fix shadow cube to handle soft shadows! - float occ = texCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; + float occ = TORQUE_TEXCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; float shadowed = saturate( exp( lightParams.y * ( occ - distToLight ) ) ); #else // Static float2 shadowCoord = decodeShadowCoord( mul( viewToLightProj, -lightVec ) ).xy; - float static_shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, @@ -192,7 +205,7 @@ float4 main( ConvexConnectP IN, // Dynamic float2 dynamicShadowCoord = decodeShadowCoord( mul( dynamicViewToLightProj, -lightVec ) ).xy; - float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), ssPos.xy, dynamicShadowCoord, shadowSoftness, @@ -210,7 +223,7 @@ float4 main( ConvexConnectP IN, #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = texCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); + float4 cookie = TORQUE_TEXCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); // Multiply the light with the cookie tex. lightcol *= cookie.rgb; @@ -250,5 +263,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl index 36bffbfd97..0faf3e1fb7 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/softShadow.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" #if defined( SOFTSHADOW ) && defined( SOFTSHADOW_HIGH_QUALITY ) @@ -69,10 +70,9 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] = /// The texture used to do per-pixel pseudorandom /// rotations of the filter taps. -uniform sampler2D gTapRotationTex : register(S4); +TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 4); - -float softShadow_sampleTaps( sampler2D shadowMap, +float softShadow_sampleTaps( TORQUE_SAMPLER2D(shadowMap1), float2 sinCos, float2 shadowPos, float filterRadius, @@ -88,7 +88,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, { tap.x = ( sNonUniformTaps[t].x * sinCos.y - sNonUniformTaps[t].y * sinCos.x ) * filterRadius; tap.y = ( sNonUniformTaps[t].y * sinCos.y + sNonUniformTaps[t].x * sinCos.x ) * filterRadius; - float occluder = tex2Dlod( shadowMap, float4( shadowPos + tap, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD( shadowMap1, float4( shadowPos + tap, 0, 0 ) ).r; float esm = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); shadow += esm / float( endTap - startTap ); @@ -98,7 +98,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, } -float softShadow_filter( sampler2D shadowMap, +float softShadow_filter( TORQUE_SAMPLER2D(shadowMap), float2 vpos, float2 shadowPos, float filterRadius, @@ -111,16 +111,15 @@ float softShadow_filter( sampler2D shadowMap, // If softshadow is undefined then we skip any complex // filtering... just do a single sample ESM. - float occluder = tex2Dlod( shadowMap, float4( shadowPos, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD(shadowMap, float4(shadowPos, 0, 0)).r; float shadow = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); #else - // Lookup the random rotation for this screen pixel. - float2 sinCos = ( tex2Dlod( gTapRotationTex, float4( vpos * 16, 0, 0 ) ).rg - 0.5 ) * 2; + float2 sinCos = ( TORQUE_TEX2DLOD(gTapRotationTex, float4(vpos * 16, 0, 0)).rg - 0.5) * 2; // Do the prediction taps first. - float shadow = softShadow_sampleTaps( shadowMap, + float shadow = softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, @@ -137,7 +136,7 @@ float softShadow_filter( sampler2D shadowMap, // in a partially shadowed area. if ( shadow * ( 1.0 - shadow ) * max( dotNL, 0 ) > 0.06 ) { - shadow += softShadow_sampleTaps( shadowMap, + shadow += softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl index 33c7f333e1..e1f3baf931 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -20,7 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" @@ -31,49 +32,63 @@ struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; }; +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap,2); + #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform sampler2D cookieMap : register(S3); +TORQUE_UNIFORM_SAMPLER2D(cookieMap, 3); #endif +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); + +uniform float4 rtParams0; -float4 main( ConvexConnectP IN, +uniform float lightBrightness; +uniform float3 lightPosition; - uniform sampler2D prePassBuffer : register(S0), - uniform sampler2D shadowMap : register(S1), - uniform sampler2D dynamicShadowMap : register(S2), +uniform float4 lightColor; - uniform float4 rtParams0, +uniform float lightRange; +uniform float3 lightDirection; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float3 lightDirection, - uniform float4 lightSpotParams, - uniform float4 lightMapParams, +uniform float4 lightSpotParams; +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4x4 viewToLightProj; +uniform float4 lightParams; +uniform float4x4 dynamicViewToLightProj; - uniform float4 vsFarPlane, - uniform float4x4 viewToLightProj, - uniform float4x4 dynamicViewToLightProj, +uniform float2 lightAttenuation; +uniform float shadowSoftness; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(0.0, 0.0, 0.0, 0.0); + } + // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -117,7 +132,7 @@ float4 main( ConvexConnectP IN, // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float static_shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, @@ -125,7 +140,7 @@ float4 main( ConvexConnectP IN, nDotL, lightParams.y ); - float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), ssPos.xy, dynshadowCoord, shadowSoftness, @@ -139,7 +154,7 @@ float4 main( ConvexConnectP IN, #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = tex2D( cookieMap, shadowCoord ); + float4 cookie = TORQUE_TEX2D( cookieMap, shadowCoord ); // Multiply the light with the cookie tex. lightcol *= cookie.rgb; @@ -179,5 +194,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 1b45485754..1a97261718 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -20,7 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "../../torque.hlsl" @@ -29,16 +30,55 @@ #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - -uniform sampler2D shadowMap : register(S1); -uniform sampler2D dynamicShadowMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); #ifdef USE_SSAO_MASK -uniform sampler2D ssaoMask : register(S3); -uniform float4 rtParams2; +TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 3); +uniform float4 rtParams3; #endif - -float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, +//register 4? +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); + +uniform float lightBrightness; +uniform float3 lightDirection; + +uniform float4 lightColor; +uniform float4 lightAmbient; + +uniform float shadowSoftness; +uniform float3 eyePosWorld; + +uniform float4 atlasXOffset; +uniform float4 atlasYOffset; +uniform float4 zNearFarInvNearFar; +uniform float4 lightMapParams; +uniform float4 farPlaneScalePSSM; +uniform float4 overDarkPSSM; + +uniform float2 fadeStartLength; +uniform float2 atlasScale; + +uniform float4x4 eyeMat; + +// Static Shadows +uniform float4x4 worldToLightProj; +uniform float4 scaleX; +uniform float4 scaleY; +uniform float4 offsetX; +uniform float4 offsetY; +// Dynamic Shadows +uniform float4x4 dynamicWorldToLightProj; +uniform float4 dynamicScaleX; +uniform float4 dynamicScaleY; +uniform float4 dynamicOffsetX; +uniform float4 dynamicOffsetY; +uniform float4 dynamicFarPlaneScalePSSM; + +float4 AL_VectorLightShadowCast( TORQUE_SAMPLER2D(sourceShadowMap), float2 texCoord, float4x4 worldToLightProj, float4 worldPos, @@ -52,8 +92,7 @@ float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, float2 atlasScale, float shadowSoftness, float dotNL , - float4 overDarkPSSM -) + float4 overDarkPSSM) { // Compute shadow map coordinate float4 pxlPosLightProj = mul(worldToLightProj, worldPos); @@ -144,7 +183,7 @@ float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, distToLight *= farPlaneScale; return float4(debugColor, - softShadow_filter( sourceShadowMap, + softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(sourceShadowMap), texCoord, shadowCoord, farPlaneScale * shadowSoftness, @@ -153,46 +192,18 @@ float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, dot( finalMask, overDarkPSSM ) ) ); }; -float4 main( FarFrustumQuadConnectP IN, - - uniform sampler2D prePassBuffer : register(S0), - - uniform float3 lightDirection, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float4 lightAmbient, - uniform float4x4 eyeMat, - - uniform float3 eyePosWorld, - uniform float4 atlasXOffset, - uniform float4 atlasYOffset, - uniform float2 atlasScale, - uniform float4 zNearFarInvNearFar, - uniform float4 lightMapParams, - uniform float2 fadeStartLength, - uniform float4 overDarkPSSM, - uniform float shadowSoftness, - - // Static Shadows - uniform float4x4 worldToLightProj, - uniform float4 scaleX, - uniform float4 scaleY, - uniform float4 offsetX, - uniform float4 offsetY, - uniform float4 farPlaneScalePSSM, - - // Dynamic Shadows - uniform float4x4 dynamicWorldToLightProj, - uniform float4 dynamicScaleX, - uniform float4 dynamicScaleY, - uniform float4 dynamicOffsetX, - uniform float4 dynamicOffsetY, - uniform float4 dynamicFarPlaneScalePSSM - - ) : COLOR0 -{ +float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 +{ + // Emissive. + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, IN.uv0 ); + bool emissive = getFlag( matInfo.r, 0 ); + if ( emissive ) + { + return float4(1.0, 1.0, 1.0, 0.0); + } + // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, IN.uv0 ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -217,7 +228,7 @@ float4 main( FarFrustumQuadConnectP IN, #else - float4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + float4 static_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(shadowMap), IN.uv0.xy, worldToLightProj, worldPos, @@ -229,8 +240,7 @@ float4 main( FarFrustumQuadConnectP IN, shadowSoftness, dotNL, overDarkPSSM); - - float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), IN.uv0.xy, dynamicWorldToLightProj, worldPos, @@ -276,6 +286,7 @@ float4 main( FarFrustumQuadConnectP IN, float Sat_NL_Att = saturate( dotNL * shadowed ) * lightBrightness; float3 lightColorOut = lightMapParams.rgb * lightColor.rgb; + float4 addToResult = (lightAmbient * (1 - ambientCameraFactor)) + ( lightAmbient * ambientCameraFactor * saturate(dot(normalize(-IN.vsEyeRay), normal)) ); // TODO: This needs to be removed when lightmapping is disabled @@ -295,7 +306,7 @@ float4 main( FarFrustumQuadConnectP IN, // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - tex2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams2 ) ).r; + float ao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif @@ -303,5 +314,6 @@ float4 main( FarFrustumQuadConnectP IN, lightColorOut = debugColor; #endif - return lightinfoCondition( lightColorOut, Sat_NL_Att, specular, addToResult ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, IN.uv0 ); + return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl index f161fb5d39..b56aade8d4 100644 --- a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterP.hlsl @@ -22,11 +22,11 @@ #include "shaders/common/postFx/postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,15 +35,15 @@ static float weight[3] = { 0.2270270270, 0.3162162162, 0.0702702703 }; uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { - float4 OUT = tex2D( diffuseMap, IN.uv ) * weight[0]; + float4 OUT = TORQUE_TEX2D( diffuseMap, IN.uv ) * weight[0]; for ( int i=1; i < 3; i++ ) { float2 sample = (BLUR_DIR * offset[i]) * oneOverTargetSize; - OUT += tex2D( diffuseMap, IN.uv + sample ) * weight[i]; - OUT += tex2D( diffuseMap, IN.uv - sample ) * weight[i]; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv + sample ) * weight[i]; + OUT += TORQUE_TEX2D(diffuseMap, IN.uv - sample) * weight[i]; } return OUT; diff --git a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl index bf6a362492..c89af7357e 100644 --- a/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/basic/shadowFilterV.hlsl @@ -27,7 +27,7 @@ float4 rtParams0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl index dd691de23c..a187c3c63e 100644 --- a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl @@ -23,10 +23,12 @@ //***************************************************************************** // Box Filter //***************************************************************************** +#include "../ShaderModel.hlsl" struct ConnectData { - float2 tex0 : TEXCOORD0; + float4 hpos : TORQUE_POSITION; + float2 tex0 : TEXCOORD0; }; // If not defined from ShaderData then define @@ -40,12 +42,12 @@ float log_conv ( float x0, float X, float y0, float Y ) return (X + log(x0 + (y0 * exp(Y - X)))); } -float4 main( ConnectData IN, - uniform sampler2D diffuseMap0 : register(S0), - uniform float texSize : register(C0), - uniform float2 blurDimension : register(C2), - uniform float2 blurBoundaries : register(C3) - ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(diffuseMap0, 0); +uniform float texSize : register(C0); +uniform float2 blurDimension : register(C2); +uniform float2 blurBoundaries : register(C3); + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // 5x5 if (IN.tex0.x <= blurBoundaries.x) @@ -56,8 +58,8 @@ float4 main( ConnectData IN, float2 texCoord = IN.tex0; - float accum = log_conv(0.3125, tex2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); - accum = log_conv(1, accum, 0.3125, tex2D(diffuseMap0, texCoord + sampleOffset)); + float accum = log_conv(0.3125, TORQUE_TEX2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); + accum = log_conv(1, accum, 0.3125, TORQUE_TEX2D(diffuseMap0, texCoord + sampleOffset)); return accum; } else { @@ -73,7 +75,7 @@ float4 main( ConnectData IN, return accum; } else { - return tex2D(diffuseMap0, IN.tex0); + return TORQUE_TEX2D(diffuseMap0, IN.tex0); } } } diff --git a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl index 75d9af0000..3679e41bb4 100644 --- a/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl +++ b/Templates/Empty/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl @@ -26,15 +26,18 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "../ShaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float4 position : POSITION; + float3 position : POSITION; + float2 texCoord : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 tex0 : TEXCOORD0; }; @@ -47,7 +50,7 @@ ConnectData main( VertData IN, { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); OUT.tex0 = IN.texCoord; return OUT; diff --git a/Templates/Empty/game/shaders/common/particleCompositeP.hlsl b/Templates/Empty/game/shaders/common/particleCompositeP.hlsl index 35c2cb4c54..6e26ddbdbf 100644 --- a/Templates/Empty/game/shaders/common/particleCompositeP.hlsl +++ b/Templates/Empty/game/shaders/common/particleCompositeP.hlsl @@ -20,22 +20,30 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- #include "torque.hlsl" +#include "shaderModel.hlsl" -uniform sampler2D colorSource : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorSource, 0); uniform float4 offscreenTargetParams; #ifdef TORQUE_LINEAR_DEPTH #define REJECT_EDGES -uniform sampler2D edgeSource : register(S1); +TORQUE_UNIFORM_SAMPLER2D(edgeSource, 1); uniform float4 edgeTargetParams; #endif +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float4 offscreenPos : TEXCOORD0; + float4 backbufferPos : TEXCOORD1; +}; -float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) : COLOR + +float4 main(Conn IN) : TORQUE_TARGET0 { // Off-screen particle source screenspace position in XY // Back-buffer screenspace position in ZW - float4 ssPos = float4(offscreenPos.xy / offscreenPos.w, backbufferPos.xy / backbufferPos.w); + float4 ssPos = float4(IN.offscreenPos.xy / IN.offscreenPos.w, IN.backbufferPos.xy / IN.backbufferPos.w); float4 uvScene = ( ssPos + 1.0 ) / 2.0; uvScene.yw = 1.0 - uvScene.yw; @@ -44,10 +52,10 @@ float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) #ifdef REJECT_EDGES // Cut out particles along the edges, this will create the stencil mask uvScene.zw = viewportCoordToRenderTarget(uvScene.zw, edgeTargetParams); - float edge = tex2D( edgeSource, uvScene.zw ).r; + float edge = TORQUE_TEX2D( edgeSource, uvScene.zw ).r; clip( -edge ); #endif // Sample offscreen target and return - return tex2D( colorSource, uvScene.xy ); + return TORQUE_TEX2D( colorSource, uvScene.xy ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/particleCompositeV.hlsl b/Templates/Empty/game/shaders/common/particleCompositeV.hlsl index 87fac0d940..c4c51204a6 100644 --- a/Templates/Empty/game/shaders/common/particleCompositeV.hlsl +++ b/Templates/Empty/game/shaders/common/particleCompositeV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "shaderModel.hlsl" -struct VertOut +struct Vertex { - float4 hpos : POSITION; + float3 pos : POSITION; + float4 uvCoord : COLOR0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; float4 offscreenPos : TEXCOORD0; float4 backbufferPos : TEXCOORD1; }; uniform float4 screenRect; // point, extent -VertOut main( float4 uvCoord : COLOR ) +Conn main(Vertex IN) { - VertOut OUT; + Conn OUT; - OUT.hpos = float4(uvCoord.xy, 1.0, 1.0); + OUT.hpos = float4(IN.uvCoord.xy, 1.0, 1.0); OUT.hpos.xy *= screenRect.zw; OUT.hpos.xy += screenRect.xy; diff --git a/Templates/Empty/game/shaders/common/particlesP.hlsl b/Templates/Empty/game/shaders/common/particlesP.hlsl index 80e3c71054..37439c59a1 100644 --- a/Templates/Empty/game/shaders/common/particlesP.hlsl +++ b/Templates/Empty/game/shaders/common/particlesP.hlsl @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "torque.hlsl" - +#include "shaderModel.hlsl" // With advanced lighting we get soft particles. #ifdef TORQUE_LINEAR_DEPTH #define SOFTPARTICLES @@ -29,11 +29,11 @@ #ifdef SOFTPARTICLES - #include "shadergen:/autogenConditioners.h" + #include "shaderModelAutoGen.hlsl" uniform float oneOverSoftness; uniform float oneOverFar; - uniform sampler2D prepassTex : register(S1); + TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); //uniform float3 vEye; uniform float4 prePassTargetParams; #endif @@ -42,14 +42,14 @@ struct Conn { + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; - float4 pos : TEXCOORD2; + float4 pos : TEXCOORD2; }; -uniform sampler2D diffuseMap : register(S0); - -uniform sampler2D paraboloidLightMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(paraboloidLightMap, 2); float4 lmSample( float3 nrm ) { @@ -69,14 +69,14 @@ float4 lmSample( float3 nrm ) // Atlasing front and back maps, so scale lmCoord.x *= 0.5; - return tex2D(paraboloidLightMap, lmCoord); + return TORQUE_TEX2D(paraboloidLightMap, lmCoord); } uniform float alphaFactor; uniform float alphaScale; -float4 main( Conn IN ) : COLOR +float4 main( Conn IN ) : TORQUE_TARGET0 { float softBlend = 1; @@ -84,7 +84,7 @@ float4 main( Conn IN ) : COLOR float2 tc = IN.pos.xy * float2(1.0, -1.0) / IN.pos.w; tc = viewportCoordToRenderTarget(saturate( ( tc + 1.0 ) * 0.5 ), prePassTargetParams); - float sceneDepth = prepassUncondition( prepassTex, tc ).w; + float sceneDepth = TORQUE_PREPASS_UNCONDITION(prepassTex, tc).w; float depth = IN.pos.w * oneOverFar; float diff = sceneDepth - depth; #ifdef CLIP_Z @@ -96,7 +96,7 @@ float4 main( Conn IN ) : COLOR softBlend = saturate( diff * oneOverSoftness ); #endif - float4 diffuse = tex2D( diffuseMap, IN.uv0 ); + float4 diffuse = TORQUE_TEX2D( diffuseMap, IN.uv0 ); //return float4( lmSample(float3(0, 0, -1)).rgb, IN.color.a * diffuse.a * softBlend * alphaScale); diff --git a/Templates/Empty/game/shaders/common/particlesV.hlsl b/Templates/Empty/game/shaders/common/particlesV.hlsl index f096042372..dbeff0cc2e 100644 --- a/Templates/Empty/game/shaders/common/particlesV.hlsl +++ b/Templates/Empty/game/shaders/common/particlesV.hlsl @@ -20,16 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct Vertex { - float4 pos : POSITION; + float3 pos : POSITION; float4 color : COLOR0; float2 uv0 : TEXCOORD0; }; struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; float4 pos : TEXCOORD2; @@ -43,8 +45,8 @@ Conn main( Vertex In ) { Conn Out; - Out.hpos = mul( modelViewProj, In.pos ); - Out.pos = mul( fsModelViewProj, In.pos ); + Out.hpos = mul( modelViewProj, float4(In.pos,1.0) ); + Out.pos = mul(fsModelViewProj, float4(In.pos, 1.0) ); Out.color = In.color; Out.uv0 = In.uv0; diff --git a/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl b/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl index a5057db504..d18331fb69 100644 --- a/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectBumpP.hlsl @@ -23,18 +23,26 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float4 texCoord : TEXCOORD0; - float2 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); +TORQUE_UNIFORM_SAMPLER2D(bumpMap, 2); + //----------------------------------------------------------------------------- // Fade edges of axis for texcoord passed in @@ -54,15 +62,11 @@ float fadeAxis( float val ) //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D refractMap : register(S1), - uniform sampler2D texMap : register(S0), - uniform sampler2D bumpMap : register(S2) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float3 bumpNorm = tex2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; + float3 bumpNorm = TORQUE_TEX2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; float2 offset = float2( bumpNorm.x, bumpNorm.y ); float4 texIndex = IN.texCoord; @@ -74,8 +78,8 @@ Fragout main( ConnectData IN, const float distortion = 0.2; texIndex.xy += offset * distortion * fadeVal; - float4 reflectColor = tex2Dproj( refractMap, texIndex ); - float4 diffuseColor = tex2D( texMap, IN.tex2 ); + float4 reflectColor = TORQUE_TEX2DPROJ( refractMap, texIndex ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.tex2 ); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl b/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl index 108f918cea..d45adb5744 100644 --- a/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectBumpV.hlsl @@ -22,36 +22,37 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { + float3 position : POSITION; + float3 normal : NORMAL; float2 texCoord : TEXCOORD0; float2 lmCoord : TEXCOORD1; float3 T : TEXCOORD2; - float3 B : TEXCOORD3; - float3 normal : NORMAL; - float4 position : POSITION; + float3 B : TEXCOORD3; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord : TEXCOORD0; float2 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 modelview ) +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Empty/game/shaders/common/planarReflectP.hlsl b/Templates/Empty/game/shaders/common/planarReflectP.hlsl index 981cc316d9..43b420544b 100644 --- a/Templates/Empty/game/shaders/common/planarReflectP.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectP.hlsl @@ -23,31 +23,34 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D texMap : register(S0), - uniform sampler2D refractMap : register(S1) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 diffuseColor = tex2D( texMap, IN.texCoord ); - float4 reflectColor = tex2Dproj( refractMap, IN.tex2 ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.texCoord ); + float4 reflectColor = TORQUE_TEX2DPROJ(refractMap, IN.tex2); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Empty/game/shaders/common/planarReflectV.hlsl b/Templates/Empty/game/shaders/common/planarReflectV.hlsl index cd8cb2d96d..1f2ca9d4f1 100644 --- a/Templates/Empty/game/shaders/common/planarReflectV.hlsl +++ b/Templates/Empty/game/shaders/common/planarReflectV.hlsl @@ -21,7 +21,8 @@ //----------------------------------------------------------------------------- #define IN_HLSL -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures @@ -29,20 +30,20 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; float4 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertexIn_PNTTTB IN, - uniform float4x4 modelview : register(C0) -) +ConnectData main( VertexIn_PNTTTB IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl b/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl index 8a61b5928a..c3adb3b55b 100644 --- a/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/VolFogGlowP.hlsl @@ -32,12 +32,12 @@ #include "./postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); uniform float strength; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -50,20 +50,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * strength; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl b/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl index c7635027db..d2f4a058a7 100644 --- a/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/caustics/causticsP.hlsl @@ -21,25 +21,26 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" +uniform float accumTime; uniform float3 eyePosWorld; uniform float4 rtParams0; uniform float4 waterFogPlane; -uniform float accumTime; + +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(causticsTex0, 1); +TORQUE_UNIFORM_SAMPLER2D(causticsTex1, 2); float distanceToPlane(float4 plane, float3 pos) { return (plane.x * pos.x + plane.y * pos.y + plane.z * pos.z) + plane.w; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex :register(S0), - uniform sampler2D causticsTex0 :register(S1), - uniform sampler2D causticsTex1 :register(S2) ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //Sample the pre-pass - float4 prePass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prePass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); //Get depth float depth = prePass.w; @@ -65,12 +66,12 @@ float4 main( PFXVertToPix IN, causticsUV1.xy -= float2(accumTime*0.15, timeSin*0.15); //Sample caustics texture - float4 caustics = tex2D(causticsTex0, causticsUV0); - caustics *= tex2D(causticsTex1, causticsUV1); + float4 caustics = TORQUE_TEX2D(causticsTex0, causticsUV0); + caustics *= TORQUE_TEX2D(causticsTex1, causticsUV1); //Use normal Z to modulate caustics //float waterDepth = 1 - saturate(pos.z + waterFogPlane.w + 1); - caustics *= saturate(prePass.z) * pow(1-depth, 64) * waterDepth; + caustics *= saturate(prePass.z) * pow(abs(1-depth), 64) * waterDepth; return caustics; } diff --git a/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl b/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl index 5916e985a9..8fdca72b72 100644 --- a/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/chromaticLens.hlsl @@ -26,14 +26,13 @@ #include "./postFx.hlsl" #include "./../torque.hlsl" - -uniform sampler2D backBuffer : register( s0 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); uniform float distCoeff; uniform float cubeDistort; uniform float3 colorDistort; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tex = IN.uv0; @@ -54,7 +53,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 { float x = distort[i] * ( tex.x - 0.5 ) + 0.5; float y = distort[i] * ( tex.y - 0.5 ) + 0.5; - outColor[i] = tex2Dlod( backBuffer, float4(x,y,0,0) )[i]; + outColor[i] = TORQUE_TEX2DLOD( backBuffer, float4(x,y,0,0) )[i]; } return float4( outColor.rgb, 1 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl index bc17a2c04c..2f5835fc24 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl @@ -23,21 +23,22 @@ #include "./../postFx.hlsl" // These are set by the game engine. -uniform sampler2D shrunkSampler : register(S0); // Output of DofDownsample() -uniform sampler2D blurredSampler : register(S1); // Blurred version of the shrunk sampler +TORQUE_UNIFORM_SAMPLER2D(shrunkSampler, 0); // Output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(blurredSampler, 1); // Blurred version of the shrunk sampler + // This is the pixel shader function that calculates the actual // value used for the near circle of confusion. // "texCoords" are 0 at the bottom left pixel and 1 at the top right. -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float3 color; float coc; half4 blurred; half4 shrunk; - shrunk = tex2D( shrunkSampler, IN.uv0 ); - blurred = tex2D( blurredSampler, IN.uv1 ); + shrunk = half4(TORQUE_TEX2D( shrunkSampler, IN.uv0 )); + blurred = half4(TORQUE_TEX2D( blurredSampler, IN.uv1 )); color = shrunk.rgb; //coc = shrunk.a; //coc = blurred.a; diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl index 37e591f256..8c9028654f 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl @@ -20,22 +20,23 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" // These are set by the game engine. // The render target size is one-quarter the scene rendering size. -uniform sampler2D colorSampler : register(S0); -uniform sampler2D depthSampler : register(S1); -uniform float2 dofEqWorld; -uniform float depthOffset; +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(depthSampler, 1); +uniform float2 dofEqWorld; uniform float2 targetSize; +uniform float depthOffset; uniform float maxWorldCoC; //uniform float2 dofEqWeapon; //uniform float2 dofRowDelta; // float2( 0, 0.25 / renderTargetHeight ) struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -44,7 +45,7 @@ struct Pixel float2 tcDepth3 : TEXCOORD5; }; -half4 main( Pixel IN ) : COLOR +half4 main( Pixel IN ) : TORQUE_TARGET0 { //return float4( 1.0, 0.0, 1.0, 1.0 ); @@ -69,57 +70,64 @@ half4 main( Pixel IN ) : COLOR // Use bilinear filtering to average 4 color samples for free. color = 0; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[2] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[2] ).rgb; + color += half3(TORQUE_TEX2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[0]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor0.xy + rowOfs[2]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[2]).rgb); color /= 4; + //declare thse here to save doing it in each loop below + half4 zero4 = half4(0, 0, 0, 0); + coc = zero4; + half4 dofEqWorld4X = half4(dofEqWorld.xxxx); + half4 dofEqWorld4Y = half4(dofEqWorld.yyyy); + half4 maxWorldCoC4 = half4(maxWorldCoC, maxWorldCoC, maxWorldCoC, maxWorldCoC); // Process 4 samples at a time to use vector hardware efficiently. // The CoC will be 1 if the depth is negative, so use "min" to pick - // between "sceneCoc" and "viewCoc". - - for ( int i = 0; i < 4; i++ ) + // between "sceneCoc" and "viewCoc". + [unroll] // coc[i] causes this anyway + for (int i = 0; i < 4; i++) { - depth[0] = prepassUncondition( depthSampler, float4( IN.tcDepth0.xy + rowOfs[i], 0, 0 ) ).w; - depth[1] = prepassUncondition( depthSampler, float4( IN.tcDepth1.xy + rowOfs[i], 0, 0 ) ).w; - depth[2] = prepassUncondition( depthSampler, float4( IN.tcDepth2.xy + rowOfs[i], 0, 0 ) ).w; - depth[3] = prepassUncondition( depthSampler, float4( IN.tcDepth3.xy + rowOfs[i], 0, 0 ) ).w; - coc[i] = clamp( dofEqWorld.x * depth + dofEqWorld.y, 0.0, maxWorldCoC ); - } + depth[0] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth0.xy + rowOfs[i])).w; + depth[1] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth1.xy + rowOfs[i])).w; + depth[2] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth2.xy + rowOfs[i])).w; + depth[3] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth3.xy + rowOfs[i])).w; + + coc = max(coc, clamp(dofEqWorld4X * half4(depth)+dofEqWorld4Y, zero4, maxWorldCoC4)); + } /* - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = curCoc; - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl index da2a79fb45..0b3ec01e23 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl @@ -25,14 +25,14 @@ struct Vert { - float4 pos : POSITION; + float3 pos : POSITION; float2 tc : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -47,7 +47,7 @@ uniform float2 oneOverTargetSize; Pixel main( Vert IN ) { Pixel OUT; - OUT.position = IN.pos; + OUT.position = float4(IN.pos,1.0); float2 uv = viewportCoordToRenderTarget( IN.tc, rtParams0 ); //OUT.position = mul( IN.pos, modelView ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl index 36622495c5..cb7342d409 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_P.hlsl @@ -20,13 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "./../postFx.hlsl" -uniform sampler2D colorSampler : register(S0); // Original source image -uniform sampler2D smallBlurSampler : register(S1); // Output of SmallBlurPS() -uniform sampler2D largeBlurSampler : register(S2); // Blurred output of DofDownsample() -uniform sampler2D depthSampler : register(S3); // +TORQUE_UNIFORM_SAMPLER2D(colorSampler,0); // Original source image +TORQUE_UNIFORM_SAMPLER2D(smallBlurSampler,1); // Output of SmallBlurPS() +TORQUE_UNIFORM_SAMPLER2D(largeBlurSampler,2); // Blurred output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(depthSampler,3); + uniform float2 oneOverTargetSize; uniform float4 dofLerpScale; uniform float4 dofLerpBias; @@ -40,9 +41,9 @@ uniform float maxFarCoC; //static float4 dofLerpBias = float4( 1.0, (1.0 - d2) / d1, 1.0 / d2, (d2 - 1.0) / d2 ); //static float3 dofEqFar = float3( 2.0, 0.0, 1.0 ); -float4 tex2Doffset( sampler2D s, float2 tc, float2 offset ) +float4 tex2Doffset(TORQUE_SAMPLER2D(s), float2 tc, float2 offset) { - return tex2D( s, tc + offset * oneOverTargetSize ); + return TORQUE_TEX2D( s, tc + offset * oneOverTargetSize ); } half3 GetSmallBlurSample( float2 tc ) @@ -51,10 +52,10 @@ half3 GetSmallBlurSample( float2 tc ) const half weight = 4.0 / 17; sum = 0; // Unblurred sample done by alpha blending //sum += weight * tex2Doffset( colorSampler, tc, float2( 0, 0 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +0.5, -1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -1.5, -0.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -0.5, +1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +1.5, +0.5 ) ).rgb; + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+0.5, -1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-1.5, -0.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-0.5, +1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+1.5, +0.5)).rgb); return sum; } @@ -72,7 +73,7 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) //float4 dofLerpScale = float4( -1 / d0, -1 / d1, -1 / d2, 1 / d2 ); //float4 dofLerpBias = float4( 1, (1 – d2) / d1, 1 / d2, (d2 – 1) / d2 ); - weights = saturate( t * dofLerpScale + dofLerpBias ); + weights = half4(saturate( t * dofLerpScale + dofLerpBias )); weights.yz = min( weights.yz, 1 - weights.xy ); // Unblurred sample with weight "weights.x" done by alpha blending @@ -84,11 +85,11 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) return half4( color, alpha ); } -half4 main( PFXVertToPix IN ) : COLOR +half4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //return half4( 1,0,1,1 ); - //return half4( tex2D( colorSampler, IN.uv0 ).rgb, 1.0 ); - //return half4( tex2D( colorSampler, texCoords ).rgb, 0 ); + //return half4( TORQUE_TEX2D( colorSampler, IN.uv0 ).rgb, 1.0 ); + //return half4( TORQUE_TEX2D( colorSampler, texCoords ).rgb, 0 ); half3 small; half4 med; half3 large; @@ -100,10 +101,10 @@ half4 main( PFXVertToPix IN ) : COLOR small = GetSmallBlurSample( IN.uv0 ); //small = half3( 1,0,0 ); //return half4( small, 1.0 ); - med = tex2D( smallBlurSampler, IN.uv1 ); + med = half4(TORQUE_TEX2D( smallBlurSampler, IN.uv1 )); //med.rgb = half3( 0,1,0 ); //return half4(med.rgb, 0.0); - large = tex2D( largeBlurSampler, IN.uv2 ).rgb; + large = half3(TORQUE_TEX2D(largeBlurSampler, IN.uv2).rgb); //large = half3( 0,0,1 ); //return large; //return half4(large.rgb,1.0); @@ -114,7 +115,7 @@ half4 main( PFXVertToPix IN ) : COLOR //med.rgb = large; //nearCoc = 0; - depth = prepassUncondition( depthSampler, float4( IN.uv3, 0, 0 ) ).w; + depth = half(TORQUE_PREPASS_UNCONDITION( depthSampler, IN.uv3 ).w); //return half4(depth.rrr,1); //return half4(nearCoc.rrr,1.0); @@ -128,8 +129,8 @@ half4 main( PFXVertToPix IN ) : COLOR // dofEqFar.x and dofEqFar.y specify the linear ramp to convert // to depth for the distant out-of-focus region. // dofEqFar.z is the ratio of the far to the near blur radius. - farCoc = clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC ); - coc = max( nearCoc, farCoc * dofEqFar.z ); + farCoc = half(clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC )); + coc = half(max( nearCoc, farCoc * dofEqFar.z )); //coc = nearCoc; } diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl index 91dfba0a2d..86c93701ad 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Final_V.hlsl @@ -59,7 +59,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); // + float2( -5, 1 ) * oneOverTargetSize; OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl index 084a2c014a..f4d29f3e1e 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl @@ -22,11 +22,11 @@ #include "./../postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5 / 1.3; //25f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl index e29746e961..b2d4582e02 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl @@ -24,13 +24,13 @@ #include "./../../torque.hlsl" -uniform float2 texSize0; uniform float4 rtParams0; +uniform float2 texSize0; uniform float2 oneOverTargetSize; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -47,7 +47,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); IN.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl index 6d41445769..175525a91e 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl @@ -24,22 +24,23 @@ // colorMapSampler, which is the same size as the render target. // The sample weights are 1/16 in the corners, 2/16 on the edges, // and 4/16 in the center. +#include "../../shaderModel.hlsl" -uniform sampler2D colorSampler; // Output of DofNearCoc() +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); // Output of DofNearCoc() struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; -float4 main( Pixel IN ) : COLOR +float4 main( Pixel IN ) : TORQUE_TARGET0 { float4 color; color = 0.0; - color += tex2D( colorSampler, IN.texCoords.xz ); - color += tex2D( colorSampler, IN.texCoords.yz ); - color += tex2D( colorSampler, IN.texCoords.xw ); - color += tex2D( colorSampler, IN.texCoords.yw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yw ); return color / 4.0; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl index 204f4639db..3edb1ec2a3 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl @@ -30,13 +30,13 @@ struct Vert { - float4 position : POSITION; + float3 position : POSITION; float2 texCoords : TEXCOORD0; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; @@ -47,7 +47,7 @@ Pixel main( Vert IN ) { Pixel OUT; const float4 halfPixel = { -0.5, 0.5, -0.5, 0.5 }; - OUT.position = IN.position; //Transform_ObjectToClip( IN.position ); + OUT.position = float4(IN.position,1.0); //Transform_ObjectToClip( IN.position ); //float2 uv = IN.texCoords + rtParams0.xy; float2 uv = viewportCoordToRenderTarget( IN.texCoords, rtParams0 ); diff --git a/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl b/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl index 9bfad955c7..38cb099c45 100644 --- a/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl +++ b/Templates/Empty/game/shaders/common/postFx/dof/gl/DOF_CalcCoC_P.glsl @@ -25,7 +25,7 @@ // These are set by the game engine. uniform sampler2D shrunkSampler; // Output of DofDownsample() -uniform sampler2D blurredSampler; // Blurred version of the shrunk sampler +uniform sampler2D blurredSampler; // Blurred version of the shrunk sampler out vec4 OUT_col; diff --git a/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl b/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl index 90cf391dc8..fbd5290317 100644 --- a/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl @@ -21,10 +21,10 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer :register(S0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return float4( tex2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); + return float4( TORQUE_TEX2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl index e45684199c..f5a71687d5 100644 --- a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl @@ -21,17 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer : register(S0), - uniform sampler2D backBuffer : register(S1), - uniform float2 targetSize : register(C0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer,0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = 1.0 / targetSize; // Sample edge buffer, bail if not on an edge - float edgeSample = tex2D(edgeBuffer, IN.uv0).r; + float edgeSample = TORQUE_TEX2D(edgeBuffer, IN.uv0).r; clip(edgeSample - 1e-6); // Ok we're on an edge, so multi-tap sample, average, and return @@ -58,7 +58,7 @@ float4 main( PFXVertToPix IN, float2 offsetUV = IN.uv1 + edgeSample * ( offsets[i] * 0.5 ) * pixelSize;//rtWidthHeightInvWidthNegHeight.zw; //offsetUV *= 0.999; - accumColor+= tex2D(backBuffer, offsetUV); + accumColor += TORQUE_TEX2D(backBuffer, offsetUV); } accumColor /= 9.0; diff --git a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl index bc79516ee3..2277126a8b 100644 --- a/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl @@ -21,10 +21,12 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(prepassBuffer,0); // GPU Gems 3, pg 443-444 -float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize) +float GetEdgeWeight(float2 uv0, in float2 targetSize) { float2 offsets[9] = { float2( 0.0, 0.0), @@ -44,10 +46,11 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize float Depth[9]; float3 Normal[9]; + [unroll] //no getting around this, may as well save the annoying warning message for(int i = 0; i < 9; i++) { float2 uv = uv0 + offsets[i] * PixelSize; - float4 gbSample = prepassUncondition( prepassBuffer, uv ); + float4 gbSample = TORQUE_PREPASS_UNCONDITION( prepassBuffer, uv ); Depth[i] = gbSample.a; Normal[i] = gbSample.rgb; } @@ -82,9 +85,9 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize return dot(normalResults, float4(1.0, 1.0, 1.0, 1.0)) * 0.25; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassBuffer :register(S0), - uniform float2 targetSize : register(C0) ) : COLOR0 +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return GetEdgeWeight(IN.uv0, prepassBuffer, targetSize );//rtWidthHeightInvWidthNegHeight.zw); + return GetEdgeWeight(IN.uv0, targetSize);//rtWidthHeightInvWidthNegHeight.zw); } diff --git a/Templates/Empty/game/shaders/common/postFx/flashP.hlsl b/Templates/Empty/game/shaders/common/postFx/flashP.hlsl index 3d9c6c7447..93daf3c26e 100644 --- a/Templates/Empty/game/shaders/common/postFx/flashP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/flashP.hlsl @@ -25,11 +25,11 @@ uniform float damageFlash; uniform float whiteOut; -uniform sampler2D backBuffer : register(S0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { - float4 color1 = tex2D(backBuffer, IN.uv0); + float4 color1 = TORQUE_TEX2D(backBuffer, IN.uv0); float4 color2 = color1 * MUL_COLOR; float4 damage = lerp(color1,color2,damageFlash); return lerp(damage,WHITE_COLOR,whiteOut); diff --git a/Templates/Empty/game/shaders/common/postFx/fogP.hlsl b/Templates/Empty/game/shaders/common/postFx/fogP.hlsl index 0eba9a7b7a..b54eea97af 100644 --- a/Templates/Empty/game/shaders/common/postFx/fogP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/fogP.hlsl @@ -20,20 +20,21 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" + #include "./postFx.hlsl" #include "./../torque.hlsl" +#include "./../shaderModelAutoGen.hlsl" -uniform sampler2D prepassTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); uniform float3 eyePosWorld; uniform float4 fogColor; uniform float3 fogData; uniform float4 rtParams0; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //float2 prepassCoord = ( IN.uv0.xy * rtParams0.zw ) + rtParams0.xy; - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; //return float4( depth, 0, 0, 0.7 ); float factor = computeSceneFog( eyePosWorld, diff --git a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl index 357b794e4f..269bfea673 100644 --- a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaP.hlsl @@ -20,38 +20,53 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + #define FXAA_PC 1 +#if (TORQUE_SM <= 30) #define FXAA_HLSL_3 1 +#elif TORQUE_SM < 49 +#define FXAA_HLSL_4 1 +#elif TORQUE_SM >=50 +#define FXAA_HLSL_5 1 +#endif #define FXAA_QUALITY__PRESET 12 #define FXAA_GREEN_AS_LUMA 1 #include "Fxaa3_11.h" -#include "../postFx.hlsl" struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -uniform sampler2D colorTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorTex, 0); uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + FxaaTex tex = colorTex; +#elif TORQUE_SM >=40 + FxaaTex tex; + tex.smpl = colorTex; + tex.tex = texture_colorTex; +#endif + return FxaaPixelShader( IN.uv0, // vertex position 0, // Unused... console stuff - colorTex, // The color back buffer + tex, // The color back buffer - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization oneOverTargetSize, diff --git a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl index ea2c3d106a..3bef0a4d36 100644 --- a/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/fxaa/fxaaV.hlsl @@ -25,7 +25,7 @@ struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl b/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl index dedfe8eb5a..6e284eb88a 100644 --- a/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/gammaP.hlsl @@ -24,23 +24,30 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -uniform sampler2D backBuffer : register(S0); -uniform sampler1D colorCorrectionTex : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 1); uniform float OneOverGamma; +uniform float Brightness; +uniform float Contrast; - -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 color = tex2D(backBuffer, IN.uv0.xy); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0.xy); // Apply the color correction. - color.r = tex1D( colorCorrectionTex, color.r ).r; - color.g = tex1D( colorCorrectionTex, color.g ).g; - color.b = tex1D( colorCorrectionTex, color.b ).b; + color.r = TORQUE_TEX1D( colorCorrectionTex, color.r ).r; + color.g = TORQUE_TEX1D( colorCorrectionTex, color.g ).g; + color.b = TORQUE_TEX1D( colorCorrectionTex, color.b ).b; // Apply gamma correction color.rgb = pow( abs(color.rgb), OneOverGamma ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + return color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl b/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl index 414a277d34..1bf5d1b8f1 100644 --- a/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl +++ b/Templates/Empty/game/shaders/common/postFx/gl/gammaP.glsl @@ -28,6 +28,8 @@ uniform sampler2D backBuffer; uniform sampler1D colorCorrectionTex; uniform float OneOverGamma; +uniform float Brightness; +uniform float Contrast; in vec2 uv0; @@ -45,5 +47,11 @@ void main() // Apply gamma correction color.rgb = pow( abs(color.rgb), vec3(OneOverGamma) ); + // Apply contrast + color.rgb = ((color.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + color.rgb += Brightness; + OUT_col = color; } \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl b/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl index d00bee26f9..9ebca32fa4 100644 --- a/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl +++ b/Templates/Empty/game/shaders/common/postFx/gl/glowBlurP.glsl @@ -39,7 +39,7 @@ out vec4 OUT_col; void main() { vec4 kernel = vec4( 0.175, 0.275, 0.375, 0.475 ) * 0.5f; - + OUT_col = vec4(0); OUT_col += texture( diffuseMap, uv0 ) * kernel.x; OUT_col += texture( diffuseMap, uv1 ) * kernel.y; @@ -55,5 +55,5 @@ void main() // can use alpha test to save fillrate. vec3 rgb2lum = vec3( 0.30, 0.59, 0.11 ); OUT_col.a = dot( OUT_col.rgb, rgb2lum ); - + } diff --git a/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl b/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl index 65ae96c6fb..80f8ed02d4 100644 --- a/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/glowBlurP.hlsl @@ -22,11 +22,11 @@ #include "./postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl b/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl index c9c9052ec9..b8f5cf9c28 100644 --- a/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/glowBlurV.hlsl @@ -28,7 +28,7 @@ uniform float2 texSize0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -45,7 +45,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); float2 uv = IN.uv + (0.5f / texSize0); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl index c28f9eb83f..77f4b9915a 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -48,7 +47,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -62,7 +61,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (i - 4.0) * oneOverTargetSize.x; x = (i - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl index 93e6b83821..8381f6a5dc 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -47,7 +46,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -61,7 +60,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (fI - 4.0) * oneOverTargetSize.y; x = (fI - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl index c438a51539..9a8a93e979 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl @@ -21,12 +21,11 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" #include "../../torque.hlsl" -uniform sampler2D inputTex : register(S0); -uniform sampler2D luminanceTex : register(S1); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); uniform float2 oneOverTargetSize; uniform float brightPassThreshold; uniform float g_fMiddleGray; @@ -40,17 +39,17 @@ static float2 gTapOffsets[4] = { -0.5, -0.5 }, { 0.5, 0.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 average = { 0.0f, 0.0f, 0.0f, 0.0f }; // Combine and average 4 samples from the source HDR texture. for( int i = 0; i < 4; i++ ) - average += hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); + average += hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); average *= 0.25f; // Determine the brightness of this particular pixel. - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; float lum = (g_fMiddleGray / (adaptedLum + 0.0001)) * hdrLuminance( average.rgb ); //float lum = hdrLuminance( average.rgb ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl index 3f443611c7..0f895070af 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl @@ -21,18 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D currLum : register( S0 ); -uniform sampler2D lastAdaptedLum : register( S1 ); +TORQUE_UNIFORM_SAMPLER2D(currLum, 0); +TORQUE_UNIFORM_SAMPLER2D(lastAdaptedLum, 1); uniform float adaptRate; uniform float deltaTime; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float fAdaptedLum = tex2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; - float fCurrentLum = tex2D( currLum, float2(0.5f, 0.5f) ).r; + float fAdaptedLum = TORQUE_TEX2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; + float fCurrentLum = TORQUE_TEX2D( currLum, float2(0.5f, 0.5f) ).r; // The user's adapted luminance level is simulated by closing the gap between // adapted luminance and current luminance by 2% every frame, based on a diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl index 3ce68452c5..01998af0ba 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4P.hlsl @@ -29,23 +29,24 @@ //----------------------------------------------------------------------------- struct VertIn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; + +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( VertIn IN, - uniform sampler2D inputTex : register(S0) ) : COLOR +float4 main( VertIn IN) : TORQUE_TARGET0 { // We calculate the texture coords // in the vertex shader as an optimization. float4 sample = 0.0f; for ( int i = 0; i < 8; i++ ) { - sample += tex2D( inputTex, IN.texCoords[i].xy ); - sample += tex2D( inputTex, IN.texCoords[i].zw ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].xy ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].zw ); } return sample / 16; diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl index 88794204ef..c9a34b7f4c 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/downScale4x4V.hlsl @@ -29,19 +29,20 @@ struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; +uniform float2 targetSize; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( PFXVert In, - uniform float2 targetSize : register(C0) ) +Conn main( PFXVert In ) { Conn Out; - Out.hpos = In.pos; + Out.hpos = float4(In.pos,1.0); // Sample from the 16 surrounding points. Since the center point will be in // the exact center of 16 texels, a 0.5f offset is needed to specify a texel diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl index 7ac71bebd5..b786b3f6a9 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl @@ -22,11 +22,13 @@ #include "../../torque.hlsl" #include "../postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" -uniform sampler2D sceneTex : register( s0 ); -uniform sampler2D luminanceTex : register( s1 ); -uniform sampler2D bloomTex : register( s2 ); -uniform sampler1D colorCorrectionTex : register( s3 ); +TORQUE_UNIFORM_SAMPLER2D(sceneTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); +TORQUE_UNIFORM_SAMPLER2D(bloomTex, 2); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 3); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 4); uniform float2 texSize0; uniform float2 texSize2; @@ -34,20 +36,20 @@ uniform float2 texSize2; uniform float g_fEnableToneMapping; uniform float g_fMiddleGray; uniform float g_fWhiteCutoff; - uniform float g_fEnableBlueShift; -uniform float3 g_fBlueShiftColor; +uniform float3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; +uniform float Brightness; +uniform float Contrast; - -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( sceneTex, IN.uv0 ) ); - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; - float4 bloom = tex2D( bloomTex, IN.uv0 ); + float4 sample = hdrDecode( TORQUE_TEX2D( sceneTex, IN.uv0 ) ); + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float4 bloom = TORQUE_TEX2D( bloomTex, IN.uv0 ); // For very low light conditions, the rods will dominate the perception // of light, and therefore color will be desaturated and shifted @@ -81,15 +83,24 @@ float4 main( PFXVertToPix IN ) : COLOR0 } // Add the bloom effect. - sample += g_fBloomScale * bloom; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + if (depth>0.9999) + sample += g_fBloomScale * bloom; // Apply the color correction. - sample.r = tex1D( colorCorrectionTex, sample.r ).r; - sample.g = tex1D( colorCorrectionTex, sample.g ).g; - sample.b = tex1D( colorCorrectionTex, sample.b ).b; + sample.r = TORQUE_TEX1D( colorCorrectionTex, sample.r ).r; + sample.g = TORQUE_TEX1D( colorCorrectionTex, sample.g ).g; + sample.b = TORQUE_TEX1D( colorCorrectionTex, sample.b ).b; + // Apply gamma correction sample.rgb = pow( abs(sample.rgb), g_fOneOverGamma ); + + // Apply contrast + sample.rgb = ((sample.rgb - 0.5f) * Contrast) + 0.5f; + + // Apply brightness + sample.rgb += Brightness; return sample; } diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl b/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl index f34cff1efd..24a516e79c 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/gl/finalPassCombineP.glsl @@ -23,11 +23,13 @@ #include "../../../gl/torque.glsl" #include "../../../gl/hlslCompat.glsl" #include "../../gl/postFX.glsl" +#include "shadergen:/autogenConditioners.h" uniform sampler2D sceneTex; uniform sampler2D luminanceTex; uniform sampler2D bloomTex; uniform sampler1D colorCorrectionTex; +uniform sampler2D prepassTex; uniform vec2 texSize0; uniform vec2 texSize2; @@ -47,6 +49,7 @@ uniform float Contrast; out vec4 OUT_col; + void main() { vec4 _sample = hdrDecode( texture( sceneTex, IN_uv0 ) ); @@ -85,7 +88,9 @@ void main() } // Add the bloom effect. - _sample += g_fBloomScale * bloom; + float depth = prepassUncondition( prepassTex, IN_uv0 ).w; + if (depth>0.9999) + _sample += g_fBloomScale * bloom; // Apply the color correction. _sample.r = texture( colorCorrectionTex, _sample.r ).r; @@ -94,12 +99,12 @@ void main() // Apply gamma correction _sample.rgb = pow( abs(_sample.rgb), vec3(g_fOneOverGamma) ); - + // Apply contrast _sample.rgb = ((_sample.rgb - 0.5f) * Contrast) + 0.5f; // Apply brightness _sample.rgb += Brightness; - + OUT_col = _sample; } diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl index 593a24e7b1..505d1b825f 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/luminanceVisP.hlsl @@ -22,15 +22,14 @@ #include "../postFx.hlsl" #include "../../torque.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float brightPassThreshold; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( inputTex, IN.uv0 ) ); + float4 sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 ) ); // Determine the brightness of this particular pixel. float lum = hdrLuminance( sample.rgb ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl index 39fd9dccca..2e23ece1f2 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl @@ -23,7 +23,7 @@ #include "../../torque.hlsl" #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 texSize0; uniform float g_fMinLuminace; @@ -36,7 +36,7 @@ static float2 gTapOffsets[9] = }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tsize = 1.0 / texSize0; @@ -46,7 +46,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 9; i++ ) { // Decode the hdr value. - sample = hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); + sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); // Get the luminance and add it to the average. float lum = max( hdrLuminance( sample ), g_fMinLuminace ); diff --git a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl index 59e91f0db3..46ed6fc70c 100644 --- a/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl @@ -22,7 +22,7 @@ #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; @@ -34,7 +34,7 @@ static float2 gTapOffsets[16] = { -1.5, 1.5 }, { -0.5, 1.5 }, { 0.5, 1.5 }, { 1.5, 1.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = oneOverTargetSize; @@ -42,7 +42,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 16; i++ ) { - float lum = tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; + float lum = TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; average += lum; } diff --git a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl index e8870b3c42..b70bafa98c 100644 --- a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl @@ -20,29 +20,29 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../postFx.hlsl" -uniform sampler2D backBuffer : register( s0 ); // The original backbuffer. -uniform sampler2D prepassTex : register( s1 ); // The pre-pass depth and normals. +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); uniform float brightScalar; static const float3 LUMINANCE_VECTOR = float3(0.3125f, 0.6154f, 0.0721f); -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 col = float4( 0, 0, 0, 1 ); // Get the depth at this pixel. - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; // If the depth is equal to 1.0, read from the backbuffer // and perform the exposure calculation on the result. if ( depth >= 0.999 ) { - col = tex2D( backBuffer, IN.uv0 ); + col = TORQUE_TEX2D( backBuffer, IN.uv0 ); //col = 1 - exp(-120000 * col); col += dot( col.rgb, LUMINANCE_VECTOR ) + 0.0001f; diff --git a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl index ff44abfae5..0328947101 100644 --- a/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/lightRay/lightRayP.hlsl @@ -22,28 +22,29 @@ #include "../postFx.hlsl" -uniform sampler2D frameSampler : register( s0 ); -uniform sampler2D backBuffer : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(frameSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); + uniform float3 camForward; +uniform int numSamples; uniform float3 lightDirection; +uniform float density; uniform float2 screenSunPos; uniform float2 oneOverTargetSize; -uniform int numSamples; -uniform float density; uniform float weight; uniform float decay; uniform float exposure; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 texCoord = float4( IN.uv0.xy, 0, 0 ); // Store initial sample. - half3 color = (half3)tex2D( frameSampler, texCoord.xy ).rgb; + half3 color = (half3)TORQUE_TEX2D( frameSampler, texCoord.xy ).rgb; // Store original bb color. - float4 bbCol = tex2D( backBuffer, IN.uv1 ); + float4 bbCol = TORQUE_TEX2D( backBuffer, IN.uv1 ); // Set up illumination decay factor. half illuminationDecay = 1.0; @@ -68,7 +69,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 texCoord.xy -= deltaTexCoord; // Retrieve sample at new location. - half3 sample = (half3)tex2Dlod( frameSampler, texCoord ); + half3 sample = (half3)TORQUE_TEX2DLOD( frameSampler, texCoord ); // Apply sample attenuation scale/decay factors. sample *= half(illuminationDecay * weight); diff --git a/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl b/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl index 348484f4de..8bc65fbc69 100644 --- a/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl +++ b/Templates/Empty/game/shaders/common/postFx/motionBlurP.hlsl @@ -22,23 +22,22 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" uniform float4x4 matPrevScreenToWorld; uniform float4x4 matWorldToScreen; // Passed in from setShaderConsts() uniform float velocityMultiplier; +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); -uniform sampler2D backBuffer : register(S0); -uniform sampler2D prepassTex : register(S1); - -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { float samples = 5; // First get the prepass texture for uv channel 0 - float4 prepass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prepass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); // Next extract the depth float depth = prepass.a; @@ -58,12 +57,12 @@ float4 main(PFXVertToPix IN) : COLOR0 float2 velocity = ((screenPos - previousPos) / velocityMultiplier).xy; // Generate the motion blur - float4 color = tex2D(backBuffer, IN.uv0); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0); IN.uv0 += velocity; for(int i = 1; i= 10 && TORQUE_SM <=30) + // Semantics + #define TORQUE_POSITION POSITION + #define TORQUE_DEPTH DEPTH + #define TORQUE_TARGET0 COLOR0 + #define TORQUE_TARGET1 COLOR1 + #define TORQUE_TARGET2 COLOR2 + #define TORQUE_TARGET3 COLOR3 + + // Sampler uniforms + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform sampler1D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform sampler2D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform sampler3D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform samplerCUBE tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) tex1D(tex,coords) + #define TORQUE_TEX2D(tex,coords) tex2D(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) tex2Dproj(tex,coords) //this really is sm 2 or later + #define TORQUE_TEX3D(tex,coords) tex3D(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texCUBE(tex,coords) + + //Shader model 3.0 only + #if TORQUE_SM == 30 + #define TORQUE_VPOS VPOS // This is a float2 + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) tex2Dlod(tex,coords) + #endif + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) sampler2D tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) samplerCUBE tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) tex +// Shader model 4.0+ +#elif TORQUE_SM >= 40 + #define TORQUE_POSITION SV_Position + #define TORQUE_DEPTH SV_Depth + #define TORQUE_VPOS SV_Position //note float4 compared to SM 3 where it is a float2 + #define TORQUE_TARGET0 SV_Target0 + #define TORQUE_TARGET1 SV_Target1 + #define TORQUE_TARGET2 SV_Target2 + #define TORQUE_TARGET3 SV_Target3 + // Sampler uniforms + //1D is emulated to a 2D for now + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform Texture3D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform TextureCube texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) texture_##tex.Sample(tex,coords.xy / coords.w) + #define TORQUE_TEX3D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texture_##tex.Sample(tex,coords) + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) texture_##tex.SampleLevel(tex,coords.xy,coords.w) + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) Texture2D texture_##tex, SamplerState tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) texture_##tex, tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) TextureCube texture_##tex, SamplerState tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) texture_##tex, tex +#endif + +#endif // _TORQUE_SHADERMODEL_ + diff --git a/Templates/Empty/game/shaders/common/shaderModelAutoGen.hlsl b/Templates/Empty/game/shaders/common/shaderModelAutoGen.hlsl new file mode 100644 index 0000000000..4f2d8803f4 --- /dev/null +++ b/Templates/Empty/game/shaders/common/shaderModelAutoGen.hlsl @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TORQUE_SHADERMODEL_AUTOGEN_ +#define _TORQUE_SHADERMODEL_AUTOGEN_ + +#include "shadergen:/autogenConditioners.h" + +// Portability helpers for autogenConditioners +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, coords) +#elif TORQUE_SM >= 40 + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, texture_##tex, coords) +#endif + +#endif //_TORQUE_SHADERMODEL_AUTOGEN_ diff --git a/Templates/Empty/game/shaders/common/terrain/blendP.hlsl b/Templates/Empty/game/shaders/common/terrain/blendP.hlsl index f710889288..aeef9d6e3d 100644 --- a/Templates/Empty/game/shaders/common/terrain/blendP.hlsl +++ b/Templates/Empty/game/shaders/common/terrain/blendP.hlsl @@ -21,25 +21,28 @@ //----------------------------------------------------------------------------- #include "terrain.hlsl" +#include "../shaderModel.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -float4 main( ConnectData IN, - uniform sampler2D layerTex : register(S0), - uniform sampler2D textureMap : register(S1), - uniform float texId, - uniform float layerSize ) : COLOR +TORQUE_UNIFORM_SAMPLER2D(layerTex, 0); +TORQUE_UNIFORM_SAMPLER2D(textureMap, 1); + +uniform float texId; +uniform float layerSize; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 layerSample = round( tex2D( layerTex, IN.layerCoord ) * 255.0f ); + float4 layerSample = round( TORQUE_TEX2D( layerTex, IN.layerCoord ) * 255.0f ); float blend = calcBlend( texId, IN.layerCoord, layerSize, layerSample ); clip( blend - 0.0001 ); - return float4( tex2D( textureMap, IN.texCoord ).rgb, blend ); + return float4( TORQUE_TEX2D(textureMap, IN.texCoord).rgb, blend); } diff --git a/Templates/Empty/game/shaders/common/terrain/blendV.hlsl b/Templates/Empty/game/shaders/common/terrain/blendV.hlsl index 7a79d2de4d..9ccd33301b 100644 --- a/Templates/Empty/game/shaders/common/terrain/blendV.hlsl +++ b/Templates/Empty/game/shaders/common/terrain/blendV.hlsl @@ -23,6 +23,8 @@ /// The vertex shader used in the generation and caching of the /// base terrain texture. +#include "../shaderModel.hlsl" + struct VertData { float3 position : POSITION; @@ -31,17 +33,18 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -ConnectData main( VertData IN, - uniform float2 texScale : register(C0) ) +uniform float2 texScale; + +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = float4( IN.position.xyz, 1 ); + OUT.hpos = float4( IN.position, 1 ); OUT.layerCoord = IN.texCoord; OUT.texCoord = IN.texCoord * texScale; diff --git a/Templates/Empty/game/shaders/common/terrain/terrain.glsl b/Templates/Empty/game/shaders/common/terrain/terrain.glsl index 79f80888c8..756edd553c 100644 --- a/Templates/Empty/game/shaders/common/terrain/terrain.glsl +++ b/Templates/Empty/game/shaders/common/terrain/terrain.glsl @@ -32,6 +32,7 @@ float calcBlend( float texId, vec2 layerCoord, float layerSize, vec4 layerSample vec4 diff = clamp( abs( layerSample - texId ), 0.0, 1.0 ); float noBlend = float(any( bvec4(1 - diff) )); + // Check if any of the layer samples // match the current texture id. vec4 factors = vec4(0); for(int i = 0; i < 4; i++) diff --git a/Templates/Empty/game/shaders/common/terrain/terrain.hlsl b/Templates/Empty/game/shaders/common/terrain/terrain.hlsl index 8ce497012c..b7c87e6180 100644 --- a/Templates/Empty/game/shaders/common/terrain/terrain.hlsl +++ b/Templates/Empty/game/shaders/common/terrain/terrain.hlsl @@ -35,6 +35,7 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa // Check if any of the layer samples // match the current texture id. float4 factors = 0; + [unroll] for(int i = 0; i < 4; i++) if(layerSample[i] == texId) factors[i] = 1; diff --git a/Templates/Empty/game/shaders/common/torque.hlsl b/Templates/Empty/game/shaders/common/torque.hlsl index 1d253936b6..3521042d4a 100644 --- a/Templates/Empty/game/shaders/common/torque.hlsl +++ b/Templates/Empty/game/shaders/common/torque.hlsl @@ -23,6 +23,7 @@ #ifndef _TORQUE_HLSL_ #define _TORQUE_HLSL_ +#include "./shaderModel.hlsl" static float M_HALFPI_F = 1.57079632679489661923f; static float M_PI_F = 3.14159265358979323846f; @@ -137,29 +138,29 @@ float3x3 quatToMat( float4 quat ) /// @param negViewTS The negative view vector in tangent space. /// @param depthScale The parallax factor used to scale the depth result. /// -float2 parallaxOffset( sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale ) +float2 parallaxOffset(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D( texMap, texCoord ).a; - float2 offset = negViewTS.xy * ( depth * depthScale ); + float depth = TORQUE_TEX2D(texMap, texCoord).a; + float2 offset = negViewTS.xy * (depth * depthScale); - for ( int i=0; i < PARALLAX_REFINE_STEPS; i++ ) + for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = ( depth + tex2D( texMap, texCoord + offset ).a ) * 0.5; - offset = negViewTS.xy * ( depth * depthScale ); + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).a) * 0.5; + offset = negViewTS.xy * (depth * depthScale); } return offset; } /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha -float2 parallaxOffsetDxtnm(sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale) +float2 parallaxOffsetDxtnm(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D(texMap, texCoord).r; + float depth = TORQUE_TEX2D(texMap, texCoord).r; float2 offset = negViewTS.xy * (depth * depthScale); for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = (depth + tex2D(texMap, texCoord + offset).r) * 0.5; + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).r) * 0.5; offset = negViewTS.xy * (depth * depthScale); } @@ -277,5 +278,37 @@ void fizzle(float2 vpos, float visibility) clip( visibility - frac( determinant( m ) ) ); } +// Deferred Shading: Material Info Flag Check +bool getFlag(float flags, int num) +{ + int process = round(flags * 255); + int squareNum = pow(2, num); + return (fmod(process, pow(2, squareNum)) >= squareNum); +} + +// #define TORQUE_STOCK_GAMMA +#ifdef TORQUE_STOCK_GAMMA +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +// Encodes gamma. +float4 toLinear(float4 tex) +{ + return tex; +} +#else +// Sample in linear space. Decodes gamma. +float4 toLinear(float4 tex) +{ + return float4(pow(abs(tex.rgb), 2.2), tex.a); +} +// Encodes gamma. +float4 toGamma(float4 tex) +{ + return float4(pow(abs(tex.rgb), 1.0/2.2), tex.a); +} +#endif // #endif // _TORQUE_HLSL_ diff --git a/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl b/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl index 82c4210316..1d5a07c3f2 100644 --- a/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl +++ b/Templates/Empty/game/shaders/common/water/gl/waterBasicP.glsl @@ -120,6 +120,7 @@ void main() { // Modulate baseColor by the ambientColor. vec4 waterBaseColor = baseColor * vec4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... vec3 bumpNorm = ( texture( bumpMap, IN_rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; diff --git a/Templates/Empty/game/shaders/common/water/gl/waterP.glsl b/Templates/Empty/game/shaders/common/water/gl/waterP.glsl index af151020aa..a68ede84e6 100644 --- a/Templates/Empty/game/shaders/common/water/gl/waterP.glsl +++ b/Templates/Empty/game/shaders/common/water/gl/waterP.glsl @@ -295,7 +295,7 @@ void main() foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - vec4 refMapColor = hdrDecode( texture( reflectMap, reflectCoord ) ); + vec4 refMapColor = texture( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. refMapColor = mix( refMapColor, texture( skyMap, reflectionVec ), NO_REFLECT ); @@ -324,6 +324,7 @@ void main() // Calculate the water "base" color based on depth. vec4 waterBaseColor = baseColor * texture( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= vec4( ambientColor.rgb, 1 ); diff --git a/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl b/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl index d27b28c675..efb4377799 100644 --- a/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterBasicP.hlsl @@ -57,7 +57,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -92,11 +92,11 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); //uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); +TORQUE_UNIFORM_SAMPLER2D(reflectMap,2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff,3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap,4); //uniform sampler foamMap : register( S5 ); uniform float4 baseColor; uniform float4 miscParams; @@ -113,15 +113,16 @@ uniform float4x4 modelMat; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Modulate baseColor by the ambientColor. float4 waterBaseColor = baseColor * float4( ambientColor.rgb, 1 ); + waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -135,7 +136,7 @@ float4 main( ConnectData IN ) : COLOR distortPos.xy += bumpNorm.xy * distortAmt; #ifdef UNDERWATER - return hdrEncode( tex2Dproj( refractBuff, distortPos ) ); + return hdrEncode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); #else float3 eyeVec = IN.objPos.xyz - eyePos; @@ -153,16 +154,16 @@ float4 main( ConnectData IN ) : COLOR float fakeColorAmt = ang; // Get reflection map color - float4 refMapColor = hdrDecode( tex2Dproj( reflectMap, distortPos ) ); + float4 refMapColor = hdrDecode( TORQUE_TEX2DPROJ( reflectMap, distortPos ) ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); //return refMapColor; // Get refract color - float4 refractColor = hdrDecode( tex2Dproj( refractBuff, distortPos ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); // calc "diffuse" color by lerping from the water color // to refraction image based on the water clarity. @@ -197,7 +198,7 @@ float4 main( ConnectData IN ) : COLOR // Fog it. float factor = computeSceneFog( eyePos, - IN.objPos, + IN.objPos.xyz, WORLD_Z, fogData.x, fogData.y, diff --git a/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl b/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl index 2c201e6752..310647c902 100644 --- a/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterBasicV.hlsl @@ -20,12 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -33,7 +34,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -95,21 +96,21 @@ ConnectData main( VertData IN ) // IN.position.xy += offsetXY; // IN.undulateData += offsetXY; // } - - float4 worldPos = mul( modelMat, IN.position ); + float4 inPos = float4(IN.position, 1.0); + float4 worldPos = mul(modelMat, inPos); IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); //OUT.objPos = worldPos; - OUT.objPos.xyz = IN.position.xyz; + OUT.objPos.xyz = IN.position; OUT.objPos.w = worldPos.z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. - float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 ) ); + float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 )).xy; //if ( undulatePos.x < 0 ) // undulatePos = IN.position.xy; @@ -128,12 +129,12 @@ ConnectData main( VertData IN ) float undulateFade = 1; // Scale down wave magnitude amount based on distance from the camera. - float dist = distance( IN.position.xyz, eyePos ); + float dist = distance( IN.position, eyePos ); dist = clamp( dist, 1.0, undulateMaxDist ); undulateFade *= ( 1 - dist / undulateMaxDist ); // Also scale down wave magnitude if the camera is very very close. - undulateFade *= saturate( ( distance( IN.position.xyz, eyePos ) - 0.5 ) / 10.0 ); + undulateFade *= saturate( ( distance( IN.position, eyePos ) - 0.5 ) / 10.0 ); undulateAmt *= undulateFade; @@ -141,7 +142,7 @@ ConnectData main( VertData IN ) //undulateAmt = 0; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Save worldSpace position of this pixel/vert @@ -210,7 +211,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); } binormal = normalize( binormal ); diff --git a/Templates/Empty/game/shaders/common/water/waterP.hlsl b/Templates/Empty/game/shaders/common/water/waterP.hlsl index 851fb471f6..ac66e9b28d 100644 --- a/Templates/Empty/game/shaders/common/water/waterP.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterP.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" #include "../torque.hlsl" //----------------------------------------------------------------------------- @@ -69,7 +69,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -105,13 +105,13 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); -uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); -uniform sampler foamMap : register( S5 ); -uniform sampler1D depthGradMap : register( S6 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); +TORQUE_UNIFORM_SAMPLER2D(reflectMap, 2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff, 3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap, 4); +TORQUE_UNIFORM_SAMPLER2D(foamMap, 5); +TORQUE_UNIFORM_SAMPLER1D(depthGradMap, 6); uniform float4 specularParams; uniform float4 baseColor; uniform float4 miscParams; @@ -138,12 +138,12 @@ uniform float reflectivity; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -155,7 +155,7 @@ float4 main( ConnectData IN ) : COLOR float2 prepassCoord = viewportCoordToRenderTarget( IN.posPostWave, rtParams1 ); - float startDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float startDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; // The water depth in world units of the undistorted pixel. float startDelta = ( startDepth - pixelDepth ); @@ -180,7 +180,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - float prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; @@ -212,7 +212,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; delta = ( prepassDepth - pixelDepth ) * farPlaneDist; @@ -260,8 +260,8 @@ float4 main( ConnectData IN ) : COLOR IN.foamTexCoords.xy += foamRippleOffset; IN.foamTexCoords.zw += foamRippleOffset; - float4 foamColor = tex2D( foamMap, IN.foamTexCoords.xy ); - foamColor += tex2D( foamMap, IN.foamTexCoords.zw ); + float4 foamColor = TORQUE_TEX2D( foamMap, IN.foamTexCoords.xy ); + foamColor += TORQUE_TEX2D( foamMap, IN.foamTexCoords.zw ); foamColor = saturate( foamColor ); // Modulate foam color by ambient color @@ -282,18 +282,18 @@ float4 main( ConnectData IN ) : COLOR foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - float4 refMapColor = hdrDecode( tex2D( reflectMap, reflectCoord ) ); + float4 refMapColor = TORQUE_TEX2D( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); - fakeColor = ( texCUBE( skyMap, reflectionVec ) ); + fakeColor = ( TORQUE_TEXCUBE( skyMap, reflectionVec ) ); fakeColor.a = 1; // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); // Get refract color - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); // We darken the refraction color a bit to make underwater // elements look wet. We fade out this darkening near the @@ -310,7 +310,8 @@ float4 main( ConnectData IN ) : COLOR float fogAmt = 1.0 - saturate( exp( -FOG_DENSITY * fogDelta ) ); // Calculate the water "base" color based on depth. - float4 waterBaseColor = baseColor * tex1D( depthGradMap, saturate( delta / depthGradMax ) ); + float4 waterBaseColor = baseColor * TORQUE_TEX1D( depthGradMap, saturate( delta / depthGradMax ) ); + waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. waterBaseColor *= float4( ambientColor.rgb, 1 ); @@ -353,7 +354,7 @@ float4 main( ConnectData IN ) : COLOR #else - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); float4 OUT = refractColor; #endif diff --git a/Templates/Empty/game/shaders/common/water/waterV.hlsl b/Templates/Empty/game/shaders/common/water/waterV.hlsl index d2b097bc54..c869f0e9fa 100644 --- a/Templates/Empty/game/shaders/common/water/waterV.hlsl +++ b/Templates/Empty/game/shaders/common/water/waterV.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -35,7 +35,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -94,12 +94,12 @@ ConnectData main( VertData IN ) 0.0, 0.0, 0.0, 1.0 }; IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); - - OUT.objPos = IN.position; - OUT.objPos.w = mul( modelMat, IN.position ).z; + float4 inPos = float4( IN.position, 1.0); + OUT.objPos = inPos; + OUT.objPos.w = mul( modelMat, inPos ).z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. @@ -132,7 +132,7 @@ ConnectData main( VertData IN ) OUT.rippleTexCoord2.w = saturate( OUT.rippleTexCoord2.w - 0.2 ) / 0.8; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Convert to screen @@ -197,7 +197,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); } binormal = binormal; diff --git a/Templates/Empty/game/shaders/common/wavesP.hlsl b/Templates/Empty/game/shaders/common/wavesP.hlsl index 265842f1fb..c51eb4b895 100644 --- a/Templates/Empty/game/shaders/common/wavesP.hlsl +++ b/Templates/Empty/game/shaders/common/wavesP.hlsl @@ -22,13 +22,14 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Data //----------------------------------------------------------------------------- struct v2f { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float2 TEX0 : TEXCOORD0; float4 tangentToCube0 : TEXCOORD1; float4 tangentToCube1 : TEXCOORD2; @@ -42,21 +43,23 @@ struct v2f struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +// Uniforms +TORQUE_UNIFORM_SAMPLER2D(diffMap,0); +//TORQUE_UNIFORM_SAMPLERCUBE(cubeMap, 1); not used? +TORQUE_UNIFORM_SAMPLER2D(bumpMap,2); + +uniform float4 specularColor : register(PC_MAT_SPECCOLOR); +uniform float4 ambient : register(PC_AMBIENT_COLOR); +uniform float specularPower : register(PC_MAT_SPECPOWER); +uniform float accumTime : register(PC_ACCUM_TIME); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main(v2f IN, - uniform sampler2D diffMap : register(S0), - uniform sampler2D bumpMap : register(S2), - uniform samplerCUBE cubeMap : register(S1), - uniform float4 specularColor : register(PC_MAT_SPECCOLOR), - uniform float specularPower : register(PC_MAT_SPECPOWER), - uniform float4 ambient : register(PC_AMBIENT_COLOR), - uniform float accumTime : register(PC_ACCUM_TIME) -) +Fragout main(v2f IN) { Fragout OUT; @@ -68,8 +71,8 @@ Fragout main(v2f IN, texOffset.y = IN.TEX0.y + cos( accumTime * 3.0 + IN.TEX0.x * 6.28319 * 2.0 ) * 0.05; - float4 bumpNorm = tex2D( bumpMap, texOffset ) * 2.0 - 1.0; - float4 diffuse = tex2D( diffMap, texOffset ); + float4 bumpNorm = TORQUE_TEX2D( bumpMap, texOffset ) * 2.0 - 1.0; + float4 diffuse = TORQUE_TEX2D( diffMap, texOffset ); OUT.col = diffuse * (saturate( dot( IN.lightVec, bumpNorm.xyz ) ) + ambient); diff --git a/Templates/Empty/game/shaders/common/wavesV.hlsl b/Templates/Empty/game/shaders/common/wavesV.hlsl index 6580daa5b4..fccef9d257 100644 --- a/Templates/Empty/game/shaders/common/wavesV.hlsl +++ b/Templates/Empty/game/shaders/common/wavesV.hlsl @@ -22,7 +22,7 @@ #define IN_HLSL #include "shdrConsts.h" -#include "hlslStructs.h" +#include "hlslStructs.hlsl" //----------------------------------------------------------------------------- // Constants @@ -42,21 +42,20 @@ struct Conn }; +uniform float4x4 modelview : register(VC_WORLD_PROJ); +uniform float3x3 cubeTrans : register(VC_CUBE_TRANS); +uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS); +uniform float3 inLightVec : register(VC_LIGHT_DIR1); +uniform float3 eyePos : register(VC_EYE_POS); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( VertexIn_PNTTTB In, - uniform float4x4 modelview : register(VC_WORLD_PROJ), - uniform float3x3 cubeTrans : register(VC_CUBE_TRANS), - uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS), - uniform float3 inLightVec : register(VC_LIGHT_DIR1), - uniform float3 eyePos : register(VC_EYE_POS) -) +Conn main( VertexIn_PNTTTB In) { Conn Out; - Out.HPOS = mul(modelview, In.pos); + Out.HPOS = mul(modelview, float4(In.pos,1.0)); Out.TEX0 = In.uv0; diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs index 8a1df2c67d..d53e6965f6 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs @@ -1,6 +1,6 @@ singleton ShaderData( ClearGBufferShader ) { - DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXVertexShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferV.hlsl"; DXPixelShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferP.hlsl"; OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl index aaadbf4793..e900f7548b 100644 --- a/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogP.hlsl @@ -21,44 +21,44 @@ //----------------------------------------------------------------------------- // Volumetric Fog final pixel shader V2.00 - -#include "shadergen:/autogenConditioners.h" +#include "../shaderModel.hlsl" +#include "../shaderModelAutoGen.hlsl" #include "../torque.hlsl" -uniform sampler2D prepassTex : register(S0); -uniform sampler2D depthBuffer : register(S1); -uniform sampler2D frontBuffer : register(S2); -uniform sampler2D density : register(S3); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(depthBuffer, 1); +TORQUE_UNIFORM_SAMPLER2D(frontBuffer, 2); +TORQUE_UNIFORM_SAMPLER2D(density, 3); +uniform float3 ambientColor; uniform float accumTime; uniform float4 fogColor; +uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 +uniform float2 viewpoint; +uniform float2 texscale; uniform float fogDensity; uniform float preBias; uniform float textured; uniform float modstrength; -uniform float4 modspeed;//xy speed layer 1, zw speed layer 2 -uniform float2 viewpoint; -uniform float2 texscale; -uniform float3 ambientColor; uniform float numtiles; uniform float fadesize; uniform float2 PixelSize; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 htpos : TEXCOORD0; float2 uv0 : TEXCOORD1; }; -float4 main( ConnectData IN ) : COLOR0 +float4 main( ConnectData IN ) : TORQUE_TARGET0 { float2 uvscreen=((IN.htpos.xy/IN.htpos.w) + 1.0 ) / 2.0; uvscreen.y = 1.0 - uvscreen.y; - float obj_test = prepassUncondition( prepassTex, uvscreen).w * preBias; - float depth = tex2D(depthBuffer,uvscreen).r; - float front = tex2D(frontBuffer,uvscreen).r; + float obj_test = TORQUE_PREPASS_UNCONDITION(prepassTex, uvscreen).w * preBias; + float depth = TORQUE_TEX2D(depthBuffer, uvscreen).r; + float front = TORQUE_TEX2D(frontBuffer, uvscreen).r; if (depth <= front) return float4(0,0,0,0); @@ -73,8 +73,8 @@ float4 main( ConnectData IN ) : COLOR0 { float2 offset = viewpoint + ((-0.5 + (texscale * uvscreen)) * numtiles); - float2 mod1 = tex2D(density,(offset + (modspeed.xy*accumTime))).rg; - float2 mod2= tex2D(density,(offset + (modspeed.zw*accumTime))).rg; + float2 mod1 = TORQUE_TEX2D(density, (offset + (modspeed.xy*accumTime))).rg; + float2 mod2 = TORQUE_TEX2D(density, (offset + (modspeed.zw*accumTime))).rg; diff = (mod2.r + mod1.r) * modstrength; col *= (2.0 - ((mod1.g + mod2.g) * fadesize))/2.0; } diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl index bb06f5f7c4..fdc839507d 100644 --- a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreP.hlsl @@ -21,14 +21,15 @@ //----------------------------------------------------------------------------- // Volumetric Fog prepass pixel shader V1.00 +#include "../shaderModel.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 pos : TEXCOORD0; }; -float4 main( ConnectData IN ) : COLOR0 +float4 main( ConnectData IN ) : TORQUE_TARGET0 { float OUT; diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl index 2d13cdf015..aba7a745db 100644 --- a/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogPreV.hlsl @@ -22,11 +22,12 @@ // Volumetric Fog prepass vertex shader V1.00 -#include "shaders/common/hlslstructs.h" +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 pos : TEXCOORD0; }; @@ -35,12 +36,9 @@ uniform float4x4 modelView; ConnectData main( VertexIn_P IN) { ConnectData OUT; - - float4 inPos = IN.pos; - inPos.w = 1.0; - OUT.hpos = mul( modelView, inPos ); - OUT.pos = OUT.hpos; + OUT.hpos = mul(modelView, float4(IN.pos, 1.0)); + OUT.pos = OUT.hpos; - return OUT; + return OUT; } diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl index bd9866cf8d..380233b5fe 100644 --- a/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogRefl.hlsl @@ -21,17 +21,18 @@ //----------------------------------------------------------------------------- // Volumetric Fog Reflection pixel shader V1.00 +#include "../shaderModel.hlsl" uniform float4 fogColor; uniform float fogDensity; uniform float reflStrength; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 pos : TEXCOORD0; }; -float4 main( ConnectData IN ) : COLOR0 +float4 main( ConnectData IN ) : TORQUE_TARGET0 { return float4(fogColor.rgb,saturate(fogDensity*reflStrength)); } diff --git a/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl b/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl index 7f86802b54..167f83946e 100644 --- a/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl +++ b/Templates/Full/game/shaders/common/VolumetricFog/VFogV.hlsl @@ -22,24 +22,25 @@ // Volumetric Fog final vertex shader V1.00 -#include "shaders/common/hlslstructs.h" +#include "../shaderModel.hlsl" +#include "../hlslStructs.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 htpos : TEXCOORD0; float2 uv0 : TEXCOORD1; }; uniform float4x4 modelView; -ConnectData main( VertexIn_PNT IN) +ConnectData main( VertexIn_PNTT IN) { - ConnectData OUT; + ConnectData OUT; - OUT.hpos = mul(modelView, IN.pos); + OUT.hpos = mul(modelView, float4(IN.pos,1.0)); OUT.htpos = OUT.hpos; OUT.uv0 = IN.uv0; - return OUT; + return OUT; } diff --git a/Templates/Full/game/shaders/common/basicCloudsP.hlsl b/Templates/Full/game/shaders/common/basicCloudsP.hlsl index 53b88d8b76..4b40e5e8cd 100644 --- a/Templates/Full/game/shaders/common/basicCloudsP.hlsl +++ b/Templates/Full/game/shaders/common/basicCloudsP.hlsl @@ -24,14 +24,14 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 col = tex2D( diffuseMap, IN.texCoord ); + float4 col = TORQUE_TEX2D(diffuseMap, IN.texCoord); return hdrEncode( col ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/basicCloudsV.hlsl b/Templates/Full/game/shaders/common/basicCloudsV.hlsl index a3d4bb5fe6..477f17d508 100644 --- a/Templates/Full/game/shaders/common/basicCloudsV.hlsl +++ b/Templates/Full/game/shaders/common/basicCloudsV.hlsl @@ -20,40 +20,40 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct CloudVert { - float4 pos : POSITION; - float3 normal : NORMAL; - float3 binormal : BINORMAL; - float3 tangent : TANGENT; + float3 pos : POSITION; float2 uv0 : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; }; uniform float4x4 modelview; -uniform float accumTime; -uniform float texScale; uniform float2 texDirection; uniform float2 texOffset; +uniform float accumTime; +uniform float texScale; + ConnectData main( CloudVert IN ) -{ +{ ConnectData OUT; - - OUT.hpos = mul(modelview, IN.pos); + + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); OUT.hpos.w = OUT.hpos.z; - + float2 uv = IN.uv0; uv += texOffset; uv *= texScale; uv += accumTime * texDirection; - OUT.texCoord = uv; - + OUT.texCoord = uv; + return OUT; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/cloudLayerP.hlsl b/Templates/Full/game/shaders/common/cloudLayerP.hlsl index a3c2d06e89..efa8fe0b4d 100644 --- a/Templates/Full/game/shaders/common/cloudLayerP.hlsl +++ b/Templates/Full/game/shaders/common/cloudLayerP.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" #include "torque.hlsl" //----------------------------------------------------------------------------- @@ -27,7 +28,7 @@ //----------------------------------------------------------------------------- struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -38,7 +39,7 @@ struct ConnectData //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler2D normalHeightMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(normalHeightMap, 0); uniform float3 ambientColor; uniform float3 sunColor; uniform float cloudCoverage; @@ -99,7 +100,7 @@ float3 ComputeIllumination( float2 texCoord, return finalColor; } -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Normalize the interpolated vectors: float3 vViewTS = normalize( IN.vViewTS ); @@ -109,11 +110,11 @@ float4 main( ConnectData IN ) : COLOR float2 texSample = IN.texCoord12.xy; - float4 noise1 = tex2D( normalHeightMap, IN.texCoord12.zw ); + float4 noise1 = TORQUE_TEX2D( normalHeightMap, IN.texCoord12.zw ); noise1 = normalize( ( noise1 - 0.5 ) * 2.0 ); //return noise1; - float4 noise2 = tex2D( normalHeightMap, IN.texCoord34.xy ); + float4 noise2 = TORQUE_TEX2D(normalHeightMap, IN.texCoord34.xy); noise2 = normalize( ( noise2 - 0.5 ) * 2.0 ); //return noise2; @@ -122,7 +123,7 @@ float4 main( ConnectData IN ) : COLOR float noiseHeight = noise1.a * noise2.a * ( cloudCoverage / 2.0 + 0.5 ); - float3 vNormalTS = normalize( tex2D( normalHeightMap, texSample ).xyz * 2.0 - 1.0 ); + float3 vNormalTS = normalize( TORQUE_TEX2D(normalHeightMap, texSample).xyz * 2.0 - 1.0); vNormalTS += noiseNormal; vNormalTS = normalize( vNormalTS ); @@ -130,7 +131,7 @@ float4 main( ConnectData IN ) : COLOR cResultColor.rgb = ComputeIllumination( texSample, vLightTS, vViewTS, vNormalTS ); float coverage = ( cloudCoverage - 0.5 ) * 2.0; - cResultColor.a = tex2D( normalHeightMap, texSample ).a + coverage + noiseHeight; + cResultColor.a = TORQUE_TEX2D(normalHeightMap, texSample).a + coverage + noiseHeight; if ( cloudCoverage > -1.0 ) cResultColor.a /= 1.0 + coverage; diff --git a/Templates/Full/game/shaders/common/cloudLayerV.hlsl b/Templates/Full/game/shaders/common/cloudLayerV.hlsl index c34a57c052..94f8b62cb6 100644 --- a/Templates/Full/game/shaders/common/cloudLayerV.hlsl +++ b/Templates/Full/game/shaders/common/cloudLayerV.hlsl @@ -23,10 +23,11 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" struct CloudVert { - float4 pos : POSITION; + float3 pos : POSITION; float3 normal : NORMAL; float3 binormal : BINORMAL; float3 tangent : TANGENT; @@ -35,7 +36,7 @@ struct CloudVert struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord12 : TEXCOORD0; float4 texCoord34 : TEXCOORD1; float3 vLightTS : TEXCOORD2; // light vector in tangent space, denormalized @@ -60,9 +61,9 @@ uniform float3 texScale; ConnectData main( CloudVert IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); + + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); OUT.hpos.w = OUT.hpos.z; - // Offset the uv so we don't have a seam directly over our head. float2 uv = IN.uv0 + float2( 0.5, 0.5 ); @@ -85,7 +86,7 @@ ConnectData main( CloudVert IN ) float3 vBinormalWS = -IN.binormal; // Compute position in world space: - float4 vPositionWS = IN.pos + float4( eyePosWorld, 1 ); //mul( IN.pos, objTrans ); + float4 vPositionWS = float4(IN.pos, 1.0) + float4(eyePosWorld, 1); //mul( IN.pos, objTrans ); // Compute and output the world view vector (unnormalized): float3 vViewWS = eyePosWorld - vPositionWS.xyz; diff --git a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl index 52ae4e9557..d0577428fe 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return float4(color_in.rgb, color_in.a * tex2D(diffuseMap, texCoord_in).a); + return float4(IN.color.rgb, IN.color.a * TORQUE_TEX2D(diffuseMap, IN.texCoord).a); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/addColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl index 90bb081128..dd9990e070 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/colorP.hlsl @@ -20,7 +20,15 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 { - return color_in; + return IN.color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl index f0efe1493b..d16dfb8632 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/colorV.hlsl @@ -20,20 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; return Out; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl index ccf22845cd..63afec2a45 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureP.hlsl @@ -20,9 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -float4 main( float4 color_in : COLOR0, - float2 texCoord_in : TEXCOORD0, - uniform sampler2D diffuseMap : register(S0) ) : COLOR0 +#include "../shaderModel.hlsl" + +struct Conn +{ + float4 HPOS : TORQUE_POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +float4 main( Conn IN ) : TORQUE_TARGET0 { - return tex2D(diffuseMap, texCoord_in) * color_in; + return TORQUE_TEX2D(diffuseMap, IN.texCoord) * IN.color; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl index 43a82dca64..8bf4e88d8b 100644 --- a/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl +++ b/Templates/Full/game/shaders/common/fixedFunction/modColorTextureV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" + struct Appdata { - float4 position : POSITION; + float3 position : POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; + struct Conn { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float4 color : COLOR; float2 texCoord : TEXCOORD0; }; -Conn main( Appdata In, uniform float4x4 modelview : register(C0) ) + +uniform float4x4 modelview; + +Conn main( Appdata In ) { Conn Out; - Out.HPOS = mul(modelview, In.position); + Out.HPOS = mul(modelview, float4(In.position,1.0)); Out.color = In.color; Out.texCoord = In.texCoord; return Out; diff --git a/Templates/Full/game/shaders/common/fixedFunction/textureP.hlsl b/Templates/Full/game/shaders/common/fixedFunction/textureP.hlsl new file mode 100644 index 0000000000..82dbd4ce97 --- /dev/null +++ b/Templates/Full/game/shaders/common/fixedFunction/textureP.hlsl @@ -0,0 +1,36 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../shaderModel.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +float4 main(Conn IN) : TORQUE_TARGET0 +{ + return TORQUE_TEX2D(diffuseMap, IN.texCoord); +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/fixedFunction/textureV.hlsl b/Templates/Full/game/shaders/common/fixedFunction/textureV.hlsl new file mode 100644 index 0000000000..204cf95141 --- /dev/null +++ b/Templates/Full/game/shaders/common/fixedFunction/textureV.hlsl @@ -0,0 +1,46 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../shaderModel.hlsl" + +struct Appdata +{ + float3 position : POSITION; + float4 color : COLOR; + float2 texCoord : TEXCOORD0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = mul(modelview, float4(In.position, 1.0)); + Out.texCoord = In.texCoord; + return Out; +} \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/foliage.hlsl b/Templates/Full/game/shaders/common/foliage.hlsl index e875bb23fe..9952c29d69 100644 --- a/Templates/Full/game/shaders/common/foliage.hlsl +++ b/Templates/Full/game/shaders/common/foliage.hlsl @@ -30,11 +30,11 @@ #define MAX_COVERTYPES 8 +uniform float2 gc_fadeParams; +uniform float2 gc_windDir; uniform float3 gc_camRight; uniform float3 gc_camUp; uniform float4 gc_typeRects[MAX_COVERTYPES]; -uniform float2 gc_fadeParams; -uniform float2 gc_windDir; // .x = gust length // .y = premultiplied simulation time and gust frequency diff --git a/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl b/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl index dfa2e4de01..a8bb68e284 100644 --- a/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl +++ b/Templates/Full/game/shaders/common/fxFoliageReplicatorP.hlsl @@ -21,36 +21,39 @@ //----------------------------------------------------------------------------- #include "shdrConsts.h" - +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 lum : COLOR0; + float4 hpos : TORQUE_POSITION; + float2 outTexCoord : TEXCOORD0; + float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(alphaMap, 1); + +uniform float4 groundAlpha; +uniform float4 ambient; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D diffuseMap : register(S0), - uniform sampler2D alphaMap : register(S1), - uniform float4 groundAlpha, - uniform float4 ambient ) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 alpha = tex2D(alphaMap, IN.alphaLookup); - OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * tex2D(diffuseMap, IN.texCoord); + float4 alpha = TORQUE_TEX2D(alphaMap, IN.alphaLookup); + OUT.col = float4( ambient.rgb * IN.lum.rgb, 1.0 ) * TORQUE_TEX2D(diffuseMap, IN.texCoord); OUT.col.a = OUT.col.a * min(alpha, groundAlpha + IN.groundAlphaCoeff.x).x; return OUT; diff --git a/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl b/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl index 06a9cf5e52..70ec9ff4cb 100644 --- a/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl +++ b/Templates/Full/game/shaders/common/fxFoliageReplicatorV.hlsl @@ -23,39 +23,42 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float2 waveScale : TEXCOORD1; + float3 position : POSITION; float3 normal : NORMAL; - float4 position : POSITION; + float2 texCoord : TEXCOORD0; + float2 waveScale : TEXCOORD1; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 outTexCoord : TEXCOORD0; float4 color : COLOR0; float4 groundAlphaCoeff : COLOR1; float2 alphaLookup : TEXCOORD1; }; +uniform float4x4 projection : register(C0); +uniform float4x4 world : register(C4); +uniform float GlobalSwayPhase : register(C8); +uniform float SwayMagnitudeSide : register(C9); +uniform float SwayMagnitudeFront : register(C10); +uniform float GlobalLightPhase : register(C11); +uniform float LuminanceMagnitude : register(C12); +uniform float LuminanceMidpoint : register(C13); +uniform float DistanceRange : register(C14); +uniform float3 CameraPos : register(C15); +uniform float TrueBillboard : register(C16); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 projection : register(C0), - uniform float4x4 world : register(C4), - uniform float GlobalSwayPhase : register(C8), - uniform float SwayMagnitudeSide : register(C9), - uniform float SwayMagnitudeFront : register(C10), - uniform float GlobalLightPhase : register(C11), - uniform float LuminanceMagnitude : register(C12), - uniform float LuminanceMidpoint : register(C13), - uniform float DistanceRange : register(C14), - uniform float3 CameraPos : register(C15), - uniform float TrueBillboard : register(C16) -) +ConnectData main( VertData IN ) { ConnectData OUT; @@ -113,7 +116,7 @@ ConnectData main( VertData IN, float Luminance = LuminanceMidpoint + LuminanceMagnitude * cos(GlobalLightPhase + IN.normal.y); // Alpha - float3 worldPos = float3(IN.position.x, IN.position.y, IN.position.z); + float3 worldPos = IN.position; float alpha = abs(distance(worldPos, CameraPos)) / DistanceRange; alpha = clamp(alpha, 0.0f, 1.0f); //pass it through diff --git a/Templates/Full/game/shaders/common/guiMaterialV.hlsl b/Templates/Full/game/shaders/common/guiMaterialV.hlsl index 425da5da4c..5d725338f7 100644 --- a/Templates/Full/game/shaders/common/guiMaterialV.hlsl +++ b/Templates/Full/game/shaders/common/guiMaterialV.hlsl @@ -20,23 +20,25 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" struct MaterialDecoratorConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; +uniform float4x4 modelview : register(C0); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -MaterialDecoratorConnectV main( VertexIn_PCT IN, - uniform float4x4 modelview : register(C0) ) +MaterialDecoratorConnectV main( VertexIn_PCT IN ) { MaterialDecoratorConnectV OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); OUT.uv0 = IN.uv0; return OUT; diff --git a/Templates/Full/game/shaders/common/hlslStructs.hlsl b/Templates/Full/game/shaders/common/hlslStructs.hlsl new file mode 100644 index 0000000000..ce0ca305c6 --- /dev/null +++ b/Templates/Full/game/shaders/common/hlslStructs.hlsl @@ -0,0 +1,114 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +// The purpose of this file is to get all of our HLSL structures into one place. +// Please use the structures here instead of redefining input and output structures +// in each shader file. If structures are added, please adhere to the naming convention. + +//------------------------------------------------------------------------------ +// Vertex Input Structures +// +// These structures map to FVFs/Vertex Declarations in Torque. See gfxStructs.h +//------------------------------------------------------------------------------ + +// Notes +// +// Position should be specified as a float3 as our vertex structures in +// the engine output float3s for position. + +struct VertexIn_P +{ + float3 pos : POSITION; +}; + +struct VertexIn_PT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PTTT +{ + float3 pos : POSITION; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float2 uv2 : TEXCOORD2; +}; + +struct VertexIn_PC +{ + float3 pos : POSITION; + float4 color : DIFFUSE; +}; + +struct VertexIn_PNC +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; +}; + +struct VertexIn_PCT +{ + float3 pos : POSITION; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PN +{ + float3 pos : POSITION; + float3 normal : NORMAL; +}; + +struct VertexIn_PNT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float3 tangent : TANGENT; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNCT +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float4 color : DIFFUSE; + float2 uv0 : TEXCOORD0; +}; + +struct VertexIn_PNTTTB +{ + float3 pos : POSITION; + float3 normal : NORMAL; + float2 uv0 : TEXCOORD0; + float2 uv1 : TEXCOORD1; + float3 T : TEXCOORD2; + float3 B : TEXCOORD3; +}; \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting.hlsl b/Templates/Full/game/shaders/common/lighting.hlsl index a2c753618b..a41b8a8734 100644 --- a/Templates/Full/game/shaders/common/lighting.hlsl +++ b/Templates/Full/game/shaders/common/lighting.hlsl @@ -241,7 +241,7 @@ float4 AL_DeferredOutput( } //specular = color * map * spec^gloss - float specularOut = (specularColor * matInfo.b * min(pow(specular, max(( matInfo.a/ AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; + float specularOut = (specularColor * matInfo.b * min(pow(abs(specular), max(( matInfo.a/ AL_ConstantSpecularPower),1.0f)),matInfo.a)).r; lightColor *= shadowAttenuation; lightColor += ambient.rgb; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl index c86cd4e890..064fcffa64 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/convexGeometryV.hlsl @@ -20,17 +20,24 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" + +struct VertData +{ + float3 pos : POSITION; + float4 color : COLOR; +}; struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; }; -ConvexConnectV main( VertexIn_P IN, +ConvexConnectV main( VertData IN, uniform float4x4 modelview, uniform float4x4 objTrans, uniform float4x4 worldViewOnly, @@ -38,9 +45,9 @@ ConvexConnectV main( VertexIn_P IN, { ConvexConnectV OUT; - OUT.hpos = mul( modelview, IN.pos ); - OUT.wsEyeDir = mul( objTrans, IN.pos ) - float4( eyePosWorld, 0.0 ); - OUT.vsEyeDir = mul( worldViewOnly, IN.pos ); + OUT.hpos = mul( modelview, float4(IN.pos,1.0) ); + OUT.wsEyeDir = mul(objTrans, float4(IN.pos, 1.0)) - float4(eyePosWorld, 0.0); + OUT.vsEyeDir = mul(worldViewOnly, float4(IN.pos, 1.0)); OUT.ssPos = OUT.hpos; return OUT; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl index 349c943f9d..ad3debbaf4 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgColorBufferP.hlsl @@ -20,12 +20,11 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); -float4 main( PFXVertToPix IN, - uniform sampler2D colorBufferTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return float4(tex2D( colorBufferTex, IN.uv0 ).rgb, 1.0); + return float4(TORQUE_TEX2D( colorBufferTex, IN.uv0 ).rgb, 1.0); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl index a2b2b5d7d7..68df09a78c 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgDepthVisualizeP.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; - return float4( tex1D( depthViz, depth ).rgb, 1.0 ); + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl index 3c31c897e8..2573836592 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgGlowVisualizeP.hlsl @@ -20,12 +20,11 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(glowBuffer, 0); -float4 main( PFXVertToPix IN, - uniform sampler2D glowBuffer : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return tex2D(glowBuffer, IN.uv0); + return TORQUE_TEX2D(glowBuffer, IN.uv0); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl index e037ad8b95..ca6d8d677c 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightColorVisualizeP.hlsl @@ -20,13 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 lightColor = tex2D( lightPrePassTex, IN.uv0 ); + float4 lightColor = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); return float4( lightColor.rgb, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl index 8e1074add9..072f07e00e 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgLightSpecularVisualizeP.hlsl @@ -20,13 +20,12 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,0); - -float4 main( PFXVertToPix IN, - uniform sampler2D lightPrePassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float specular = tex2D( lightPrePassTex, IN.uv0 ).a; + float specular = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ).a; return float4( specular, specular, specular, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl index c160045b4a..4f31d2c531 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl @@ -20,13 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float3 normal = prepassUncondition( prepassTex, IN.uv0 ).xyz; + float3 normal = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).xyz; return float4( ( normal + 1.0 ) * 0.5, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl index b1f2bca29f..b548334991 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgShadowVisualizeP.hlsl @@ -20,15 +20,19 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + struct MaterialDecoratorConnectV { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -float4 main( MaterialDecoratorConnectV IN, - uniform sampler2D shadowMap : register(S0), - uniform sampler1D depthViz : register(S1) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 0); +TORQUE_UNIFORM_SAMPLER1D(depthViz, 1); + +float4 main( MaterialDecoratorConnectV IN ) : TORQUE_TARGET0 { - float depth = saturate( tex2D( shadowMap, IN.uv0 ).r ); - return float4( tex1D( depthViz, depth ).rgb, 1 ); + float depth = saturate( TORQUE_TEX2D( shadowMap, IN.uv0 ).r ); + return float4( TORQUE_TEX1D( depthViz, depth ).rgb, 1 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl index ba5f2c0e18..eba38a8799 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl @@ -20,13 +20,12 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../postfx/postFx.hlsl" +TORQUE_UNIFORM_SAMPLER2D(matinfoTex,0); -float4 main( PFXVertToPix IN, - uniform sampler2D matinfoTex : register(S0) ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float specular = tex2D( matinfoTex, IN.uv0 ).b; + float specular = TORQUE_TEX2D( matinfoTex, IN.uv0 ).b; return float4( specular, specular, specular, 1.0 ); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl index df98702480..cefebe8c70 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferP.hlsl @@ -20,17 +20,24 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + struct Fragout { - float4 col : COLOR0; - float4 col1 : COLOR1; - float4 col2 : COLOR2; + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; }; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ) +Fragout main( Conn IN ) { Fragout OUT; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl new file mode 100644 index 0000000000..20ba4d5097 --- /dev/null +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredClearGBufferV.hlsl @@ -0,0 +1,43 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "../../shaderModel.hlsl" + +struct Appdata +{ + float3 pos : POSITION; + float4 color : COLOR; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; +}; + +uniform float4x4 modelview; + +Conn main( Appdata In ) +{ + Conn Out; + Out.hpos = float4(In.pos,1.0); + return Out; +} diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl index 5e6d0a9842..d91d2eb38a 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredColorShaderP.hlsl @@ -20,11 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + struct Fragout { - float4 col : COLOR0; - float4 col1 : COLOR1; - float4 col2 : COLOR2; + float4 col : TORQUE_TARGET0; + float4 col1 : TORQUE_TARGET1; + float4 col2 : TORQUE_TARGET2; }; //----------------------------------------------------------------------------- diff --git a/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl index 80e6acde07..c710656f87 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/deferredShadingP.hlsl @@ -20,22 +20,22 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../../postfx/postFx.hlsl" #include "shaders/common/torque.hlsl" +TORQUE_UNIFORM_SAMPLER2D(colorBufferTex,0); +TORQUE_UNIFORM_SAMPLER2D(lightPrePassTex,1); +TORQUE_UNIFORM_SAMPLER2D(matInfoTex,2); +TORQUE_UNIFORM_SAMPLER2D(prepassTex,3); -float4 main( PFXVertToPix IN, - uniform sampler2D colorBufferTex : register(S0), - uniform sampler2D lightPrePassTex : register(S1), - uniform sampler2D matInfoTex : register(S2), - uniform sampler2D prepassTex : register(S3)) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 lightBuffer = tex2D( lightPrePassTex, IN.uv0 ); - float4 colorBuffer = tex2D( colorBufferTex, IN.uv0 ); - float4 matInfo = tex2D( matInfoTex, IN.uv0 ); + float4 lightBuffer = TORQUE_TEX2D( lightPrePassTex, IN.uv0 ); + float4 colorBuffer = TORQUE_TEX2D( colorBufferTex, IN.uv0 ); + float4 matInfo = TORQUE_TEX2D( matInfoTex, IN.uv0 ); float specular = saturate(lightBuffer.a); - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; if (depth>0.9999) return float4(0,0,0,0); diff --git a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl index 567dd11ce2..543e216772 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuad.hlsl @@ -19,10 +19,11 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" struct FarFrustumQuadConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; @@ -30,6 +31,7 @@ struct FarFrustumQuadConnectV struct FarFrustumQuadConnectP { + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; float3 vsEyeRay : TEXCOORD2; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl index 08cf612850..0167d901a0 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/farFrustumQuadV.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" #include "farFrustumQuad.hlsl" @@ -36,8 +36,8 @@ FarFrustumQuadConnectV main( VertexIn_PNTT IN, // Interpolators will generate eye rays the // from far-frustum corners. - OUT.wsEyeRay = IN.tangent.xyz; - OUT.vsEyeRay = IN.normal.xyz; + OUT.wsEyeRay = IN.tangent; + OUT.vsEyeRay = IN.normal; return OUT; } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl index bc47849804..7ff5d50d27 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightP.hlsl @@ -20,35 +20,36 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" - #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" #include "../../lighting.hlsl" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -float4 main( ConvexConnectP IN, - uniform sampler2D prePassBuffer : register(S0), - - uniform float4 lightPosition, - uniform float4 lightColor, - uniform float lightRange, - - uniform float4 vsFarPlane, - uniform float4 rtParams0 ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); + +uniform float4 lightPosition; +uniform float4 lightColor; +uniform float lightRange; +uniform float4 vsFarPlane; +uniform float4 rtParams0; + +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos(ssPos, rtParams0); // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition(prePassBuffer, uvScene); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION(prePassBuffer, uvScene); float3 normal = prepassSample.rgb; float depth = prepassSample.a; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl index f5dc9e4442..faa2ec1155 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/particlePointLightV.hlsl @@ -20,24 +20,26 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "../../hlslStructs.h" +#include "../../hlslStructs.hlsl" +#include "../../shaderModel.hlsl" struct ConvexConnectV { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 ssPos : TEXCOORD0; float3 vsEyeDir : TEXCOORD1; }; -ConvexConnectV main( VertexIn_P IN, - uniform float4x4 viewProj, - uniform float4x4 view, - uniform float3 particlePosWorld, - uniform float lightRange ) +uniform float4x4 viewProj; +uniform float4x4 view; +uniform float3 particlePosWorld; +uniform float lightRange; + +ConvexConnectV main( VertexIn_P IN ) { ConvexConnectV OUT; - - float4 vPosWorld = IN.pos + float4(particlePosWorld, 0.0) + float4(IN.pos.xyz, 0.0) * lightRange; + float4 pos = float4(IN.pos, 0.0); + float4 vPosWorld = pos + float4(particlePosWorld, 0.0) + pos * lightRange; OUT.hpos = mul(viewProj, vPosWorld); OUT.vsEyeDir = mul(view, vPosWorld); OUT.ssPos = OUT.hpos; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl index 9051ff09d8..540fd65c71 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" @@ -31,17 +31,17 @@ struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; - float4 color : COLOR0; }; #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform samplerCUBE cookieMap : register(S3); +TORQUE_UNIFORM_SAMPLERCUBE(cookieMap, 3); #endif @@ -53,9 +53,9 @@ uniform samplerCUBE cookieMap : register(S3); return shadowCoord; } - float4 shadowSample( samplerCUBE shadowMap, float3 shadowCoord ) + float4 shadowSample( TORQUE_SAMPLERCUBE(shadowMap), float3 shadowCoord ) { - return texCUBE( shadowMap, shadowCoord ); + return TORQUE_TEXCUBE( shadowMap, shadowCoord ); } #else @@ -106,44 +106,44 @@ uniform samplerCUBE cookieMap : register(S3); #endif +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); -float4 main( ConvexConnectP IN, +#ifdef SHADOW_CUBE +TORQUE_UNIFORM_SAMPLERCUBE(shadowMap, 1); +#else +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); +#endif - uniform sampler2D prePassBuffer : register(S0), +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); - #ifdef SHADOW_CUBE - uniform samplerCUBE shadowMap : register(S1), - #else - uniform sampler2D shadowMap : register(S1), - uniform sampler2D dynamicShadowMap : register(S2), - #endif +uniform float4 rtParams0; +uniform float4 lightColor; - uniform sampler2D lightBuffer : register(S5), - uniform sampler2D colorBuffer : register(S6), - uniform sampler2D matInfoBuffer : register(S7), +uniform float lightBrightness; +uniform float3 lightPosition; - uniform float4 rtParams0, +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4 lightParams; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float4 lightMapParams, +uniform float lightRange; +uniform float shadowSoftness; +uniform float2 lightAttenuation; - uniform float4 vsFarPlane, - uniform float3x3 viewToLightProj, - uniform float3x3 dynamicViewToLightProj, +uniform float3x3 viewToLightProj; +uniform float3x3 dynamicViewToLightProj; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); // Emissive. - float4 matInfo = tex2D( matInfoBuffer, uvScene ); + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); bool emissive = getFlag( matInfo.r, 0 ); if ( emissive ) { @@ -151,7 +151,7 @@ float4 main( ConvexConnectP IN, } // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -188,14 +188,14 @@ float4 main( ConvexConnectP IN, #ifdef SHADOW_CUBE // TODO: We need to fix shadow cube to handle soft shadows! - float occ = texCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; + float occ = TORQUE_TEXCUBE( shadowMap, mul( viewToLightProj, -lightVec ) ).r; float shadowed = saturate( exp( lightParams.y * ( occ - distToLight ) ) ); #else // Static float2 shadowCoord = decodeShadowCoord( mul( viewToLightProj, -lightVec ) ).xy; - float static_shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, @@ -205,7 +205,7 @@ float4 main( ConvexConnectP IN, // Dynamic float2 dynamicShadowCoord = decodeShadowCoord( mul( dynamicViewToLightProj, -lightVec ) ).xy; - float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), ssPos.xy, dynamicShadowCoord, shadowSoftness, @@ -223,7 +223,7 @@ float4 main( ConvexConnectP IN, #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = texCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); + float4 cookie = TORQUE_TEXCUBE( cookieMap, mul( viewToLightProj, -lightVec ) ); // Multiply the light with the cookie tex. lightcol *= cookie.rgb; @@ -263,6 +263,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - float4 colorSample = tex2D( colorBuffer, uvScene ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl index 36bffbfd97..0faf3e1fb7 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/softShadow.hlsl @@ -20,6 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" #if defined( SOFTSHADOW ) && defined( SOFTSHADOW_HIGH_QUALITY ) @@ -69,10 +70,9 @@ static float2 sNonUniformTaps[NUM_PRE_TAPS] = /// The texture used to do per-pixel pseudorandom /// rotations of the filter taps. -uniform sampler2D gTapRotationTex : register(S4); +TORQUE_UNIFORM_SAMPLER2D(gTapRotationTex, 4); - -float softShadow_sampleTaps( sampler2D shadowMap, +float softShadow_sampleTaps( TORQUE_SAMPLER2D(shadowMap1), float2 sinCos, float2 shadowPos, float filterRadius, @@ -88,7 +88,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, { tap.x = ( sNonUniformTaps[t].x * sinCos.y - sNonUniformTaps[t].y * sinCos.x ) * filterRadius; tap.y = ( sNonUniformTaps[t].y * sinCos.y + sNonUniformTaps[t].x * sinCos.x ) * filterRadius; - float occluder = tex2Dlod( shadowMap, float4( shadowPos + tap, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD( shadowMap1, float4( shadowPos + tap, 0, 0 ) ).r; float esm = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); shadow += esm / float( endTap - startTap ); @@ -98,7 +98,7 @@ float softShadow_sampleTaps( sampler2D shadowMap, } -float softShadow_filter( sampler2D shadowMap, +float softShadow_filter( TORQUE_SAMPLER2D(shadowMap), float2 vpos, float2 shadowPos, float filterRadius, @@ -111,16 +111,15 @@ float softShadow_filter( sampler2D shadowMap, // If softshadow is undefined then we skip any complex // filtering... just do a single sample ESM. - float occluder = tex2Dlod( shadowMap, float4( shadowPos, 0, 0 ) ).r; + float occluder = TORQUE_TEX2DLOD(shadowMap, float4(shadowPos, 0, 0)).r; float shadow = saturate( exp( esmFactor * ( occluder - distToLight ) ) ); #else - // Lookup the random rotation for this screen pixel. - float2 sinCos = ( tex2Dlod( gTapRotationTex, float4( vpos * 16, 0, 0 ) ).rg - 0.5 ) * 2; + float2 sinCos = ( TORQUE_TEX2DLOD(gTapRotationTex, float4(vpos * 16, 0, 0)).rg - 0.5) * 2; // Do the prediction taps first. - float shadow = softShadow_sampleTaps( shadowMap, + float shadow = softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, @@ -137,7 +136,7 @@ float softShadow_filter( sampler2D shadowMap, // in a partially shadowed area. if ( shadow * ( 1.0 - shadow ) * max( dotNL, 0 ) > 0.06 ) { - shadow += softShadow_sampleTaps( shadowMap, + shadow += softShadow_sampleTaps( TORQUE_SAMPLER2D_MAKEARG(shadowMap), sinCos, shadowPos, filterRadius, diff --git a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl index 226b9cfea4..e1f3baf931 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -20,7 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "lightingUtils.hlsl" @@ -31,54 +32,55 @@ struct ConvexConnectP { + float4 pos : TORQUE_POSITION; float4 wsEyeDir : TEXCOORD0; float4 ssPos : TEXCOORD1; float4 vsEyeDir : TEXCOORD2; - float4 color : COLOR0; }; +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap,2); + #ifdef USE_COOKIE_TEX /// The texture for cookie rendering. -uniform sampler2D cookieMap : register(S3); +TORQUE_UNIFORM_SAMPLER2D(cookieMap, 3); #endif +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); -float4 main( ConvexConnectP IN, +uniform float4 rtParams0; - uniform sampler2D prePassBuffer : register(S0), - uniform sampler2D shadowMap : register(S1), - uniform sampler2D dynamicShadowMap : register(S2), +uniform float lightBrightness; +uniform float3 lightPosition; - uniform sampler2D lightBuffer : register(S5), - uniform sampler2D colorBuffer : register(S6), - uniform sampler2D matInfoBuffer : register(S7), +uniform float4 lightColor; - uniform float4 rtParams0, +uniform float lightRange; +uniform float3 lightDirection; - uniform float3 lightPosition, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float lightRange, - uniform float2 lightAttenuation, - uniform float3 lightDirection, - uniform float4 lightSpotParams, - uniform float4 lightMapParams, +uniform float4 lightSpotParams; +uniform float4 lightMapParams; +uniform float4 vsFarPlane; +uniform float4x4 viewToLightProj; +uniform float4 lightParams; +uniform float4x4 dynamicViewToLightProj; - uniform float4 vsFarPlane, - uniform float4x4 viewToLightProj, - uniform float4x4 dynamicViewToLightProj, +uniform float2 lightAttenuation; +uniform float shadowSoftness; - uniform float4 lightParams, - uniform float shadowSoftness ) : COLOR0 +float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { // Compute scene UV float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; float2 uvScene = getUVFromSSPos( ssPos, rtParams0 ); // Emissive. - float4 matInfo = tex2D( matInfoBuffer, uvScene ); + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, uvScene ); bool emissive = getFlag( matInfo.r, 0 ); if ( emissive ) { @@ -86,7 +88,7 @@ float4 main( ConvexConnectP IN, } // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -130,7 +132,7 @@ float4 main( ConvexConnectP IN, // Get a linear depth from the light source. float distToLight = pxlPosLightProj.z / lightRange; - float static_shadowed = softShadow_filter( shadowMap, + float static_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(shadowMap), ssPos.xy, shadowCoord, shadowSoftness, @@ -138,7 +140,7 @@ float4 main( ConvexConnectP IN, nDotL, lightParams.y ); - float dynamic_shadowed = softShadow_filter( dynamicShadowMap, + float dynamic_shadowed = softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), ssPos.xy, dynshadowCoord, shadowSoftness, @@ -152,7 +154,7 @@ float4 main( ConvexConnectP IN, #ifdef USE_COOKIE_TEX // Lookup the cookie sample. - float4 cookie = tex2D( cookieMap, shadowCoord ); + float4 cookie = TORQUE_TEX2D( cookieMap, shadowCoord ); // Multiply the light with the cookie tex. lightcol *= cookie.rgb; @@ -192,6 +194,6 @@ float4 main( ConvexConnectP IN, addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - float4 colorSample = tex2D( colorBuffer, uvScene ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 8965765642..1a97261718 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -20,7 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" #include "farFrustumQuad.hlsl" #include "../../torque.hlsl" @@ -29,16 +30,55 @@ #include "../shadowMap/shadowMapIO_HLSL.h" #include "softShadow.hlsl" - -uniform sampler2D shadowMap : register(S1); -uniform sampler2D dynamicShadowMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(prePassBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(shadowMap, 1); +TORQUE_UNIFORM_SAMPLER2D(dynamicShadowMap, 2); #ifdef USE_SSAO_MASK -uniform sampler2D ssaoMask : register(S3); +TORQUE_UNIFORM_SAMPLER2D(ssaoMask, 3); uniform float4 rtParams3; #endif - -float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, +//register 4? +TORQUE_UNIFORM_SAMPLER2D(lightBuffer, 5); +TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 6); +TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 7); + +uniform float lightBrightness; +uniform float3 lightDirection; + +uniform float4 lightColor; +uniform float4 lightAmbient; + +uniform float shadowSoftness; +uniform float3 eyePosWorld; + +uniform float4 atlasXOffset; +uniform float4 atlasYOffset; +uniform float4 zNearFarInvNearFar; +uniform float4 lightMapParams; +uniform float4 farPlaneScalePSSM; +uniform float4 overDarkPSSM; + +uniform float2 fadeStartLength; +uniform float2 atlasScale; + +uniform float4x4 eyeMat; + +// Static Shadows +uniform float4x4 worldToLightProj; +uniform float4 scaleX; +uniform float4 scaleY; +uniform float4 offsetX; +uniform float4 offsetY; +// Dynamic Shadows +uniform float4x4 dynamicWorldToLightProj; +uniform float4 dynamicScaleX; +uniform float4 dynamicScaleY; +uniform float4 dynamicOffsetX; +uniform float4 dynamicOffsetY; +uniform float4 dynamicFarPlaneScalePSSM; + +float4 AL_VectorLightShadowCast( TORQUE_SAMPLER2D(sourceShadowMap), float2 texCoord, float4x4 worldToLightProj, float4 worldPos, @@ -52,8 +92,7 @@ float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, float2 atlasScale, float shadowSoftness, float dotNL , - float4 overDarkPSSM -) + float4 overDarkPSSM) { // Compute shadow map coordinate float4 pxlPosLightProj = mul(worldToLightProj, worldPos); @@ -144,7 +183,7 @@ float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, distToLight *= farPlaneScale; return float4(debugColor, - softShadow_filter( sourceShadowMap, + softShadow_filter( TORQUE_SAMPLER2D_MAKEARG(sourceShadowMap), texCoord, shadowCoord, farPlaneScale * shadowSoftness, @@ -153,50 +192,10 @@ float4 AL_VectorLightShadowCast( sampler2D sourceShadowMap, dot( finalMask, overDarkPSSM ) ) ); }; -float4 main( FarFrustumQuadConnectP IN, - - uniform sampler2D prePassBuffer : register(S0), - - uniform sampler2D lightBuffer : register(S5), - uniform sampler2D colorBuffer : register(S6), - uniform sampler2D matInfoBuffer : register(S7), - - uniform float3 lightDirection, - uniform float4 lightColor, - uniform float lightBrightness, - uniform float4 lightAmbient, - uniform float4x4 eyeMat, - - uniform float3 eyePosWorld, - uniform float4 atlasXOffset, - uniform float4 atlasYOffset, - uniform float2 atlasScale, - uniform float4 zNearFarInvNearFar, - uniform float4 lightMapParams, - uniform float2 fadeStartLength, - uniform float4 overDarkPSSM, - uniform float shadowSoftness, - - // Static Shadows - uniform float4x4 worldToLightProj, - uniform float4 scaleX, - uniform float4 scaleY, - uniform float4 offsetX, - uniform float4 offsetY, - uniform float4 farPlaneScalePSSM, - - // Dynamic Shadows - uniform float4x4 dynamicWorldToLightProj, - uniform float4 dynamicScaleX, - uniform float4 dynamicScaleY, - uniform float4 dynamicOffsetX, - uniform float4 dynamicOffsetY, - uniform float4 dynamicFarPlaneScalePSSM - - ) : COLOR0 +float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 { // Emissive. - float4 matInfo = tex2D( matInfoBuffer, IN.uv0 ); + float4 matInfo = TORQUE_TEX2D( matInfoBuffer, IN.uv0 ); bool emissive = getFlag( matInfo.r, 0 ); if ( emissive ) { @@ -204,7 +203,7 @@ float4 main( FarFrustumQuadConnectP IN, } // Sample/unpack the normal/z data - float4 prepassSample = prepassUncondition( prePassBuffer, IN.uv0 ); + float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, IN.uv0 ); float3 normal = prepassSample.rgb; float depth = prepassSample.a; @@ -229,7 +228,7 @@ float4 main( FarFrustumQuadConnectP IN, #else - float4 static_shadowed_colors = AL_VectorLightShadowCast( shadowMap, + float4 static_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(shadowMap), IN.uv0.xy, worldToLightProj, worldPos, @@ -241,7 +240,7 @@ float4 main( FarFrustumQuadConnectP IN, shadowSoftness, dotNL, overDarkPSSM); - float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( dynamicShadowMap, + float4 dynamic_shadowed_colors = AL_VectorLightShadowCast( TORQUE_SAMPLER2D_MAKEARG(dynamicShadowMap), IN.uv0.xy, dynamicWorldToLightProj, worldPos, @@ -307,7 +306,7 @@ float4 main( FarFrustumQuadConnectP IN, // Sample the AO texture. #ifdef USE_SSAO_MASK - float ao = 1.0 - tex2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r; + float ao = 1.0 - TORQUE_TEX2D( ssaoMask, viewportCoordToRenderTarget( IN.uv0.xy, rtParams3 ) ).r; addToResult *= ao; #endif @@ -315,6 +314,6 @@ float4 main( FarFrustumQuadConnectP IN, lightColorOut = debugColor; #endif - float4 colorSample = tex2D( colorBuffer, IN.uv0 ); + float4 colorSample = TORQUE_TEX2D( colorBuffer, IN.uv0 ); return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl index f161fb5d39..b56aade8d4 100644 --- a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterP.hlsl @@ -22,11 +22,11 @@ #include "shaders/common/postFx/postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,15 +35,15 @@ static float weight[3] = { 0.2270270270, 0.3162162162, 0.0702702703 }; uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { - float4 OUT = tex2D( diffuseMap, IN.uv ) * weight[0]; + float4 OUT = TORQUE_TEX2D( diffuseMap, IN.uv ) * weight[0]; for ( int i=1; i < 3; i++ ) { float2 sample = (BLUR_DIR * offset[i]) * oneOverTargetSize; - OUT += tex2D( diffuseMap, IN.uv + sample ) * weight[i]; - OUT += tex2D( diffuseMap, IN.uv - sample ) * weight[i]; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv + sample ) * weight[i]; + OUT += TORQUE_TEX2D(diffuseMap, IN.uv - sample) * weight[i]; } return OUT; diff --git a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl index bf6a362492..c89af7357e 100644 --- a/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/basic/shadowFilterV.hlsl @@ -27,7 +27,7 @@ float4 rtParams0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl index dd691de23c..a187c3c63e 100644 --- a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterP.hlsl @@ -23,10 +23,12 @@ //***************************************************************************** // Box Filter //***************************************************************************** +#include "../ShaderModel.hlsl" struct ConnectData { - float2 tex0 : TEXCOORD0; + float4 hpos : TORQUE_POSITION; + float2 tex0 : TEXCOORD0; }; // If not defined from ShaderData then define @@ -40,12 +42,12 @@ float log_conv ( float x0, float X, float y0, float Y ) return (X + log(x0 + (y0 * exp(Y - X)))); } -float4 main( ConnectData IN, - uniform sampler2D diffuseMap0 : register(S0), - uniform float texSize : register(C0), - uniform float2 blurDimension : register(C2), - uniform float2 blurBoundaries : register(C3) - ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(diffuseMap0, 0); +uniform float texSize : register(C0); +uniform float2 blurDimension : register(C2); +uniform float2 blurBoundaries : register(C3); + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // 5x5 if (IN.tex0.x <= blurBoundaries.x) @@ -56,8 +58,8 @@ float4 main( ConnectData IN, float2 texCoord = IN.tex0; - float accum = log_conv(0.3125, tex2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); - accum = log_conv(1, accum, 0.3125, tex2D(diffuseMap0, texCoord + sampleOffset)); + float accum = log_conv(0.3125, TORQUE_TEX2D(diffuseMap0, texCoord - sampleOffset), 0.375, tex2D(diffuseMap0, texCoord)); + accum = log_conv(1, accum, 0.3125, TORQUE_TEX2D(diffuseMap0, texCoord + sampleOffset)); return accum; } else { @@ -73,7 +75,7 @@ float4 main( ConnectData IN, return accum; } else { - return tex2D(diffuseMap0, IN.tex0); + return TORQUE_TEX2D(diffuseMap0, IN.tex0); } } } diff --git a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl index 75d9af0000..3679e41bb4 100644 --- a/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl +++ b/Templates/Full/game/shaders/common/lighting/shadowMap/boxFilterV.hlsl @@ -26,15 +26,18 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "../ShaderModel.hlsl" + struct VertData { - float2 texCoord : TEXCOORD0; - float4 position : POSITION; + float3 position : POSITION; + float2 texCoord : TEXCOORD0; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 tex0 : TEXCOORD0; }; @@ -47,7 +50,7 @@ ConnectData main( VertData IN, { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); OUT.tex0 = IN.texCoord; return OUT; diff --git a/Templates/Full/game/shaders/common/particleCompositeP.hlsl b/Templates/Full/game/shaders/common/particleCompositeP.hlsl index 35c2cb4c54..6e26ddbdbf 100644 --- a/Templates/Full/game/shaders/common/particleCompositeP.hlsl +++ b/Templates/Full/game/shaders/common/particleCompositeP.hlsl @@ -20,22 +20,30 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- #include "torque.hlsl" +#include "shaderModel.hlsl" -uniform sampler2D colorSource : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorSource, 0); uniform float4 offscreenTargetParams; #ifdef TORQUE_LINEAR_DEPTH #define REJECT_EDGES -uniform sampler2D edgeSource : register(S1); +TORQUE_UNIFORM_SAMPLER2D(edgeSource, 1); uniform float4 edgeTargetParams; #endif +struct Conn +{ + float4 hpos : TORQUE_POSITION; + float4 offscreenPos : TEXCOORD0; + float4 backbufferPos : TEXCOORD1; +}; -float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) : COLOR + +float4 main(Conn IN) : TORQUE_TARGET0 { // Off-screen particle source screenspace position in XY // Back-buffer screenspace position in ZW - float4 ssPos = float4(offscreenPos.xy / offscreenPos.w, backbufferPos.xy / backbufferPos.w); + float4 ssPos = float4(IN.offscreenPos.xy / IN.offscreenPos.w, IN.backbufferPos.xy / IN.backbufferPos.w); float4 uvScene = ( ssPos + 1.0 ) / 2.0; uvScene.yw = 1.0 - uvScene.yw; @@ -44,10 +52,10 @@ float4 main( float4 offscreenPos : TEXCOORD0, float4 backbufferPos : TEXCOORD1 ) #ifdef REJECT_EDGES // Cut out particles along the edges, this will create the stencil mask uvScene.zw = viewportCoordToRenderTarget(uvScene.zw, edgeTargetParams); - float edge = tex2D( edgeSource, uvScene.zw ).r; + float edge = TORQUE_TEX2D( edgeSource, uvScene.zw ).r; clip( -edge ); #endif // Sample offscreen target and return - return tex2D( colorSource, uvScene.xy ); + return TORQUE_TEX2D( colorSource, uvScene.xy ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/particleCompositeV.hlsl b/Templates/Full/game/shaders/common/particleCompositeV.hlsl index 87fac0d940..c4c51204a6 100644 --- a/Templates/Full/game/shaders/common/particleCompositeV.hlsl +++ b/Templates/Full/game/shaders/common/particleCompositeV.hlsl @@ -20,22 +20,28 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "hlslStructs.h" +#include "shaderModel.hlsl" -struct VertOut +struct Vertex { - float4 hpos : POSITION; + float3 pos : POSITION; + float4 uvCoord : COLOR0; +}; + +struct Conn +{ + float4 hpos : TORQUE_POSITION; float4 offscreenPos : TEXCOORD0; float4 backbufferPos : TEXCOORD1; }; uniform float4 screenRect; // point, extent -VertOut main( float4 uvCoord : COLOR ) +Conn main(Vertex IN) { - VertOut OUT; + Conn OUT; - OUT.hpos = float4(uvCoord.xy, 1.0, 1.0); + OUT.hpos = float4(IN.uvCoord.xy, 1.0, 1.0); OUT.hpos.xy *= screenRect.zw; OUT.hpos.xy += screenRect.xy; diff --git a/Templates/Full/game/shaders/common/particlesP.hlsl b/Templates/Full/game/shaders/common/particlesP.hlsl index 80e3c71054..37439c59a1 100644 --- a/Templates/Full/game/shaders/common/particlesP.hlsl +++ b/Templates/Full/game/shaders/common/particlesP.hlsl @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "torque.hlsl" - +#include "shaderModel.hlsl" // With advanced lighting we get soft particles. #ifdef TORQUE_LINEAR_DEPTH #define SOFTPARTICLES @@ -29,11 +29,11 @@ #ifdef SOFTPARTICLES - #include "shadergen:/autogenConditioners.h" + #include "shaderModelAutoGen.hlsl" uniform float oneOverSoftness; uniform float oneOverFar; - uniform sampler2D prepassTex : register(S1); + TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); //uniform float3 vEye; uniform float4 prePassTargetParams; #endif @@ -42,14 +42,14 @@ struct Conn { + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; - float4 pos : TEXCOORD2; + float4 pos : TEXCOORD2; }; -uniform sampler2D diffuseMap : register(S0); - -uniform sampler2D paraboloidLightMap : register(S2); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); +TORQUE_UNIFORM_SAMPLER2D(paraboloidLightMap, 2); float4 lmSample( float3 nrm ) { @@ -69,14 +69,14 @@ float4 lmSample( float3 nrm ) // Atlasing front and back maps, so scale lmCoord.x *= 0.5; - return tex2D(paraboloidLightMap, lmCoord); + return TORQUE_TEX2D(paraboloidLightMap, lmCoord); } uniform float alphaFactor; uniform float alphaScale; -float4 main( Conn IN ) : COLOR +float4 main( Conn IN ) : TORQUE_TARGET0 { float softBlend = 1; @@ -84,7 +84,7 @@ float4 main( Conn IN ) : COLOR float2 tc = IN.pos.xy * float2(1.0, -1.0) / IN.pos.w; tc = viewportCoordToRenderTarget(saturate( ( tc + 1.0 ) * 0.5 ), prePassTargetParams); - float sceneDepth = prepassUncondition( prepassTex, tc ).w; + float sceneDepth = TORQUE_PREPASS_UNCONDITION(prepassTex, tc).w; float depth = IN.pos.w * oneOverFar; float diff = sceneDepth - depth; #ifdef CLIP_Z @@ -96,7 +96,7 @@ float4 main( Conn IN ) : COLOR softBlend = saturate( diff * oneOverSoftness ); #endif - float4 diffuse = tex2D( diffuseMap, IN.uv0 ); + float4 diffuse = TORQUE_TEX2D( diffuseMap, IN.uv0 ); //return float4( lmSample(float3(0, 0, -1)).rgb, IN.color.a * diffuse.a * softBlend * alphaScale); diff --git a/Templates/Full/game/shaders/common/particlesV.hlsl b/Templates/Full/game/shaders/common/particlesV.hlsl index f096042372..dbeff0cc2e 100644 --- a/Templates/Full/game/shaders/common/particlesV.hlsl +++ b/Templates/Full/game/shaders/common/particlesV.hlsl @@ -20,16 +20,18 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "shaderModel.hlsl" + struct Vertex { - float4 pos : POSITION; + float3 pos : POSITION; float4 color : COLOR0; float2 uv0 : TEXCOORD0; }; struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 color : TEXCOORD0; float2 uv0 : TEXCOORD1; float4 pos : TEXCOORD2; @@ -43,8 +45,8 @@ Conn main( Vertex In ) { Conn Out; - Out.hpos = mul( modelViewProj, In.pos ); - Out.pos = mul( fsModelViewProj, In.pos ); + Out.hpos = mul( modelViewProj, float4(In.pos,1.0) ); + Out.pos = mul(fsModelViewProj, float4(In.pos, 1.0) ); Out.color = In.color; Out.uv0 = In.uv0; diff --git a/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl b/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl index a5057db504..d18331fb69 100644 --- a/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectBumpP.hlsl @@ -23,18 +23,26 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float4 texCoord : TEXCOORD0; - float2 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); +TORQUE_UNIFORM_SAMPLER2D(bumpMap, 2); + //----------------------------------------------------------------------------- // Fade edges of axis for texcoord passed in @@ -54,15 +62,11 @@ float fadeAxis( float val ) //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D refractMap : register(S1), - uniform sampler2D texMap : register(S0), - uniform sampler2D bumpMap : register(S2) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float3 bumpNorm = tex2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; + float3 bumpNorm = TORQUE_TEX2D( bumpMap, IN.tex2 ) * 2.0 - 1.0; float2 offset = float2( bumpNorm.x, bumpNorm.y ); float4 texIndex = IN.texCoord; @@ -74,8 +78,8 @@ Fragout main( ConnectData IN, const float distortion = 0.2; texIndex.xy += offset * distortion * fadeVal; - float4 reflectColor = tex2Dproj( refractMap, texIndex ); - float4 diffuseColor = tex2D( texMap, IN.tex2 ); + float4 reflectColor = TORQUE_TEX2DPROJ( refractMap, texIndex ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.tex2 ); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl b/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl index 108f918cea..d45adb5744 100644 --- a/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectBumpV.hlsl @@ -22,36 +22,37 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { + float3 position : POSITION; + float3 normal : NORMAL; float2 texCoord : TEXCOORD0; float2 lmCoord : TEXCOORD1; float3 T : TEXCOORD2; - float3 B : TEXCOORD3; - float3 normal : NORMAL; - float4 position : POSITION; + float3 B : TEXCOORD3; }; struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoord : TEXCOORD0; float2 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertData IN, - uniform float4x4 modelview ) +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.position); + OUT.hpos = mul(modelview, float4(IN.position,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Full/game/shaders/common/planarReflectP.hlsl b/Templates/Full/game/shaders/common/planarReflectP.hlsl index 981cc316d9..43b420544b 100644 --- a/Templates/Full/game/shaders/common/planarReflectP.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectP.hlsl @@ -23,31 +23,34 @@ //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- + +#include "shaderModel.hlsl" + struct ConnectData { - float2 texCoord : TEXCOORD0; - float4 tex2 : TEXCOORD1; + float4 hpos : TORQUE_POSITION; + float2 texCoord : TEXCOORD0; + float4 tex2 : TEXCOORD1; }; struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +TORQUE_UNIFORM_SAMPLER2D(texMap, 0); +TORQUE_UNIFORM_SAMPLER2D(refractMap, 1); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main( ConnectData IN, - uniform sampler2D texMap : register(S0), - uniform sampler2D refractMap : register(S1) -) +Fragout main( ConnectData IN ) { Fragout OUT; - float4 diffuseColor = tex2D( texMap, IN.texCoord ); - float4 reflectColor = tex2Dproj( refractMap, IN.tex2 ); + float4 diffuseColor = TORQUE_TEX2D( texMap, IN.texCoord ); + float4 reflectColor = TORQUE_TEX2DPROJ(refractMap, IN.tex2); OUT.col = diffuseColor + reflectColor * diffuseColor.a; diff --git a/Templates/Full/game/shaders/common/planarReflectV.hlsl b/Templates/Full/game/shaders/common/planarReflectV.hlsl index cd8cb2d96d..1f2ca9d4f1 100644 --- a/Templates/Full/game/shaders/common/planarReflectV.hlsl +++ b/Templates/Full/game/shaders/common/planarReflectV.hlsl @@ -21,7 +21,8 @@ //----------------------------------------------------------------------------- #define IN_HLSL -#include "hlslStructs.h" +#include "hlslStructs.hlsl" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures @@ -29,20 +30,20 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 texCoord : TEXCOORD0; float4 tex2 : TEXCOORD1; }; +uniform float4x4 modelview; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -ConnectData main( VertexIn_PNTTTB IN, - uniform float4x4 modelview : register(C0) -) +ConnectData main( VertexIn_PNTTTB IN ) { ConnectData OUT; - OUT.hpos = mul(modelview, IN.pos); + OUT.hpos = mul(modelview, float4(IN.pos,1.0)); float4x4 texGenTest = { 0.5, 0.0, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, diff --git a/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl b/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl index 8a61b5928a..c3adb3b55b 100644 --- a/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/VolFogGlowP.hlsl @@ -32,12 +32,12 @@ #include "./postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); uniform float strength; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -50,20 +50,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * strength; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl b/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl index c7635027db..d2f4a058a7 100644 --- a/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/caustics/causticsP.hlsl @@ -21,25 +21,26 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" +uniform float accumTime; uniform float3 eyePosWorld; uniform float4 rtParams0; uniform float4 waterFogPlane; -uniform float accumTime; + +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); +TORQUE_UNIFORM_SAMPLER2D(causticsTex0, 1); +TORQUE_UNIFORM_SAMPLER2D(causticsTex1, 2); float distanceToPlane(float4 plane, float3 pos) { return (plane.x * pos.x + plane.y * pos.y + plane.z * pos.z) + plane.w; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassTex :register(S0), - uniform sampler2D causticsTex0 :register(S1), - uniform sampler2D causticsTex1 :register(S2) ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //Sample the pre-pass - float4 prePass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prePass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); //Get depth float depth = prePass.w; @@ -65,12 +66,12 @@ float4 main( PFXVertToPix IN, causticsUV1.xy -= float2(accumTime*0.15, timeSin*0.15); //Sample caustics texture - float4 caustics = tex2D(causticsTex0, causticsUV0); - caustics *= tex2D(causticsTex1, causticsUV1); + float4 caustics = TORQUE_TEX2D(causticsTex0, causticsUV0); + caustics *= TORQUE_TEX2D(causticsTex1, causticsUV1); //Use normal Z to modulate caustics //float waterDepth = 1 - saturate(pos.z + waterFogPlane.w + 1); - caustics *= saturate(prePass.z) * pow(1-depth, 64) * waterDepth; + caustics *= saturate(prePass.z) * pow(abs(1-depth), 64) * waterDepth; return caustics; } diff --git a/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl b/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl index 5916e985a9..8fdca72b72 100644 --- a/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl +++ b/Templates/Full/game/shaders/common/postFx/chromaticLens.hlsl @@ -26,14 +26,13 @@ #include "./postFx.hlsl" #include "./../torque.hlsl" - -uniform sampler2D backBuffer : register( s0 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); uniform float distCoeff; uniform float cubeDistort; uniform float3 colorDistort; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tex = IN.uv0; @@ -54,7 +53,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 { float x = distort[i] * ( tex.x - 0.5 ) + 0.5; float y = distort[i] * ( tex.y - 0.5 ) + 0.5; - outColor[i] = tex2Dlod( backBuffer, float4(x,y,0,0) )[i]; + outColor[i] = TORQUE_TEX2DLOD( backBuffer, float4(x,y,0,0) )[i]; } return float4( outColor.rgb, 1 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl index bc17a2c04c..2f5835fc24 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_P.hlsl @@ -23,21 +23,22 @@ #include "./../postFx.hlsl" // These are set by the game engine. -uniform sampler2D shrunkSampler : register(S0); // Output of DofDownsample() -uniform sampler2D blurredSampler : register(S1); // Blurred version of the shrunk sampler +TORQUE_UNIFORM_SAMPLER2D(shrunkSampler, 0); // Output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(blurredSampler, 1); // Blurred version of the shrunk sampler + // This is the pixel shader function that calculates the actual // value used for the near circle of confusion. // "texCoords" are 0 at the bottom left pixel and 1 at the top right. -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float3 color; float coc; half4 blurred; half4 shrunk; - shrunk = tex2D( shrunkSampler, IN.uv0 ); - blurred = tex2D( blurredSampler, IN.uv1 ); + shrunk = half4(TORQUE_TEX2D( shrunkSampler, IN.uv0 )); + blurred = half4(TORQUE_TEX2D( blurredSampler, IN.uv1 )); color = shrunk.rgb; //coc = shrunk.a; //coc = blurred.a; diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_CalcCoC_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl index 37e591f256..8c9028654f 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_P.hlsl @@ -20,22 +20,23 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModel.hlsl" +#include "../../shaderModelAutoGen.hlsl" // These are set by the game engine. // The render target size is one-quarter the scene rendering size. -uniform sampler2D colorSampler : register(S0); -uniform sampler2D depthSampler : register(S1); -uniform float2 dofEqWorld; -uniform float depthOffset; +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(depthSampler, 1); +uniform float2 dofEqWorld; uniform float2 targetSize; +uniform float depthOffset; uniform float maxWorldCoC; //uniform float2 dofEqWeapon; //uniform float2 dofRowDelta; // float2( 0, 0.25 / renderTargetHeight ) struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -44,7 +45,7 @@ struct Pixel float2 tcDepth3 : TEXCOORD5; }; -half4 main( Pixel IN ) : COLOR +half4 main( Pixel IN ) : TORQUE_TARGET0 { //return float4( 1.0, 0.0, 1.0, 1.0 ); @@ -69,57 +70,64 @@ half4 main( Pixel IN ) : COLOR // Use bilinear filtering to average 4 color samples for free. color = 0; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[0] ).rgb; - color += tex2D( colorSampler, IN.tcColor0.xy + rowOfs[2] ).rgb; - color += tex2D( colorSampler, IN.tcColor1.xy + rowOfs[2] ).rgb; + color += half3(TORQUE_TEX2D( colorSampler, IN.tcColor0.xy + rowOfs[0] ).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[0]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor0.xy + rowOfs[2]).rgb); + color += half3(TORQUE_TEX2D(colorSampler, IN.tcColor1.xy + rowOfs[2]).rgb); color /= 4; + //declare thse here to save doing it in each loop below + half4 zero4 = half4(0, 0, 0, 0); + coc = zero4; + half4 dofEqWorld4X = half4(dofEqWorld.xxxx); + half4 dofEqWorld4Y = half4(dofEqWorld.yyyy); + half4 maxWorldCoC4 = half4(maxWorldCoC, maxWorldCoC, maxWorldCoC, maxWorldCoC); // Process 4 samples at a time to use vector hardware efficiently. // The CoC will be 1 if the depth is negative, so use "min" to pick - // between "sceneCoc" and "viewCoc". - - for ( int i = 0; i < 4; i++ ) + // between "sceneCoc" and "viewCoc". + [unroll] // coc[i] causes this anyway + for (int i = 0; i < 4; i++) { - depth[0] = prepassUncondition( depthSampler, float4( IN.tcDepth0.xy + rowOfs[i], 0, 0 ) ).w; - depth[1] = prepassUncondition( depthSampler, float4( IN.tcDepth1.xy + rowOfs[i], 0, 0 ) ).w; - depth[2] = prepassUncondition( depthSampler, float4( IN.tcDepth2.xy + rowOfs[i], 0, 0 ) ).w; - depth[3] = prepassUncondition( depthSampler, float4( IN.tcDepth3.xy + rowOfs[i], 0, 0 ) ).w; - coc[i] = clamp( dofEqWorld.x * depth + dofEqWorld.y, 0.0, maxWorldCoC ); - } + depth[0] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth0.xy + rowOfs[i])).w; + depth[1] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth1.xy + rowOfs[i])).w; + depth[2] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth2.xy + rowOfs[i])).w; + depth[3] = TORQUE_PREPASS_UNCONDITION(depthSampler, (IN.tcDepth3.xy + rowOfs[i])).w; + + coc = max(coc, clamp(dofEqWorld4X * half4(depth)+dofEqWorld4Y, zero4, maxWorldCoC4)); + } /* - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[0] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[0] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[0] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[0] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = curCoc; - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[1] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[1] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[1] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[1] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[2] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[2] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[2] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[2] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); coc = max( coc, curCoc ); - depth[0] = tex2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; - depth[1] = tex2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; - depth[2] = tex2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; - depth[3] = tex2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; + depth[0] = TORQUE_TEX2D( depthSampler, pixel.tcDepth0.xy + rowOfs[3] ).r; + depth[1] = TORQUE_TEX2D( depthSampler, pixel.tcDepth1.xy + rowOfs[3] ).r; + depth[2] = TORQUE_TEX2D( depthSampler, pixel.tcDepth2.xy + rowOfs[3] ).r; + depth[3] = TORQUE_TEX2D( depthSampler, pixel.tcDepth3.xy + rowOfs[3] ).r; viewCoc = saturate( dofEqWeapon.x * -depth + dofEqWeapon.y ); sceneCoc = saturate( dofEqWorld.x * depth + dofEqWorld.y ); curCoc = min( viewCoc, sceneCoc ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl index da2a79fb45..0b3ec01e23 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_DownSample_V.hlsl @@ -25,14 +25,14 @@ struct Vert { - float4 pos : POSITION; + float3 pos : POSITION; float2 tc : TEXCOORD0; float3 wsEyeRay : TEXCOORD1; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float2 tcColor0 : TEXCOORD0; float2 tcColor1 : TEXCOORD1; float2 tcDepth0 : TEXCOORD2; @@ -47,7 +47,7 @@ uniform float2 oneOverTargetSize; Pixel main( Vert IN ) { Pixel OUT; - OUT.position = IN.pos; + OUT.position = float4(IN.pos,1.0); float2 uv = viewportCoordToRenderTarget( IN.tc, rtParams0 ); //OUT.position = mul( IN.pos, modelView ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl index 36622495c5..cb7342d409 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_P.hlsl @@ -20,13 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "./../postFx.hlsl" -uniform sampler2D colorSampler : register(S0); // Original source image -uniform sampler2D smallBlurSampler : register(S1); // Output of SmallBlurPS() -uniform sampler2D largeBlurSampler : register(S2); // Blurred output of DofDownsample() -uniform sampler2D depthSampler : register(S3); // +TORQUE_UNIFORM_SAMPLER2D(colorSampler,0); // Original source image +TORQUE_UNIFORM_SAMPLER2D(smallBlurSampler,1); // Output of SmallBlurPS() +TORQUE_UNIFORM_SAMPLER2D(largeBlurSampler,2); // Blurred output of DofDownsample() +TORQUE_UNIFORM_SAMPLER2D(depthSampler,3); + uniform float2 oneOverTargetSize; uniform float4 dofLerpScale; uniform float4 dofLerpBias; @@ -40,9 +41,9 @@ uniform float maxFarCoC; //static float4 dofLerpBias = float4( 1.0, (1.0 - d2) / d1, 1.0 / d2, (d2 - 1.0) / d2 ); //static float3 dofEqFar = float3( 2.0, 0.0, 1.0 ); -float4 tex2Doffset( sampler2D s, float2 tc, float2 offset ) +float4 tex2Doffset(TORQUE_SAMPLER2D(s), float2 tc, float2 offset) { - return tex2D( s, tc + offset * oneOverTargetSize ); + return TORQUE_TEX2D( s, tc + offset * oneOverTargetSize ); } half3 GetSmallBlurSample( float2 tc ) @@ -51,10 +52,10 @@ half3 GetSmallBlurSample( float2 tc ) const half weight = 4.0 / 17; sum = 0; // Unblurred sample done by alpha blending //sum += weight * tex2Doffset( colorSampler, tc, float2( 0, 0 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +0.5, -1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -1.5, -0.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( -0.5, +1.5 ) ).rgb; - sum += weight * tex2Doffset( colorSampler, tc, float2( +1.5, +0.5 ) ).rgb; + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+0.5, -1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-1.5, -0.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(-0.5, +1.5)).rgb); + sum += weight * half3(tex2Doffset(TORQUE_SAMPLER2D_MAKEARG(colorSampler), tc, float2(+1.5, +0.5)).rgb); return sum; } @@ -72,7 +73,7 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) //float4 dofLerpScale = float4( -1 / d0, -1 / d1, -1 / d2, 1 / d2 ); //float4 dofLerpBias = float4( 1, (1 – d2) / d1, 1 / d2, (d2 – 1) / d2 ); - weights = saturate( t * dofLerpScale + dofLerpBias ); + weights = half4(saturate( t * dofLerpScale + dofLerpBias )); weights.yz = min( weights.yz, 1 - weights.xy ); // Unblurred sample with weight "weights.x" done by alpha blending @@ -84,11 +85,11 @@ half4 InterpolateDof( half3 small, half3 med, half3 large, half t ) return half4( color, alpha ); } -half4 main( PFXVertToPix IN ) : COLOR +half4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //return half4( 1,0,1,1 ); - //return half4( tex2D( colorSampler, IN.uv0 ).rgb, 1.0 ); - //return half4( tex2D( colorSampler, texCoords ).rgb, 0 ); + //return half4( TORQUE_TEX2D( colorSampler, IN.uv0 ).rgb, 1.0 ); + //return half4( TORQUE_TEX2D( colorSampler, texCoords ).rgb, 0 ); half3 small; half4 med; half3 large; @@ -100,10 +101,10 @@ half4 main( PFXVertToPix IN ) : COLOR small = GetSmallBlurSample( IN.uv0 ); //small = half3( 1,0,0 ); //return half4( small, 1.0 ); - med = tex2D( smallBlurSampler, IN.uv1 ); + med = half4(TORQUE_TEX2D( smallBlurSampler, IN.uv1 )); //med.rgb = half3( 0,1,0 ); //return half4(med.rgb, 0.0); - large = tex2D( largeBlurSampler, IN.uv2 ).rgb; + large = half3(TORQUE_TEX2D(largeBlurSampler, IN.uv2).rgb); //large = half3( 0,0,1 ); //return large; //return half4(large.rgb,1.0); @@ -114,7 +115,7 @@ half4 main( PFXVertToPix IN ) : COLOR //med.rgb = large; //nearCoc = 0; - depth = prepassUncondition( depthSampler, float4( IN.uv3, 0, 0 ) ).w; + depth = half(TORQUE_PREPASS_UNCONDITION( depthSampler, IN.uv3 ).w); //return half4(depth.rrr,1); //return half4(nearCoc.rrr,1.0); @@ -128,8 +129,8 @@ half4 main( PFXVertToPix IN ) : COLOR // dofEqFar.x and dofEqFar.y specify the linear ramp to convert // to depth for the distant out-of-focus region. // dofEqFar.z is the ratio of the far to the near blur radius. - farCoc = clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC ); - coc = max( nearCoc, farCoc * dofEqFar.z ); + farCoc = half(clamp( dofEqFar.x * depth + dofEqFar.y, 0.0, maxFarCoC )); + coc = half(max( nearCoc, farCoc * dofEqFar.z )); //coc = nearCoc; } diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl index 91dfba0a2d..86c93701ad 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Final_V.hlsl @@ -59,7 +59,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); // + float2( -5, 1 ) * oneOverTargetSize; OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl index 084a2c014a..f4d29f3e1e 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_P.hlsl @@ -22,11 +22,11 @@ #include "./../postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5 / 1.3; //25f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl index e29746e961..b2d4582e02 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Gausian_V.hlsl @@ -24,13 +24,13 @@ #include "./../../torque.hlsl" -uniform float2 texSize0; uniform float4 rtParams0; +uniform float2 texSize0; uniform float2 oneOverTargetSize; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -47,7 +47,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); IN.uv = viewportCoordToRenderTarget( IN.uv, rtParams0 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl index 40cec49deb..8131e45cd5 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_Passthrough_V.hlsl @@ -57,7 +57,7 @@ PFXVertToPix main( PFXVert IN ) */ - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); OUT.uv1 = viewportCoordToRenderTarget( IN.uv, rtParams1 ); OUT.uv2 = viewportCoordToRenderTarget( IN.uv, rtParams2 ); diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl index 6d41445769..175525a91e 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_P.hlsl @@ -24,22 +24,23 @@ // colorMapSampler, which is the same size as the render target. // The sample weights are 1/16 in the corners, 2/16 on the edges, // and 4/16 in the center. +#include "../../shaderModel.hlsl" -uniform sampler2D colorSampler; // Output of DofNearCoc() +TORQUE_UNIFORM_SAMPLER2D(colorSampler, 0); // Output of DofNearCoc() struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; -float4 main( Pixel IN ) : COLOR +float4 main( Pixel IN ) : TORQUE_TARGET0 { float4 color; color = 0.0; - color += tex2D( colorSampler, IN.texCoords.xz ); - color += tex2D( colorSampler, IN.texCoords.yz ); - color += tex2D( colorSampler, IN.texCoords.xw ); - color += tex2D( colorSampler, IN.texCoords.yw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yz ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.xw ); + color += TORQUE_TEX2D( colorSampler, IN.texCoords.yw ); return color / 4.0; } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl index 204f4639db..3edb1ec2a3 100644 --- a/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/dof/DOF_SmallBlur_V.hlsl @@ -30,13 +30,13 @@ struct Vert { - float4 position : POSITION; + float3 position : POSITION; float2 texCoords : TEXCOORD0; }; struct Pixel { - float4 position : POSITION; + float4 position : TORQUE_POSITION; float4 texCoords : TEXCOORD0; }; @@ -47,7 +47,7 @@ Pixel main( Vert IN ) { Pixel OUT; const float4 halfPixel = { -0.5, 0.5, -0.5, 0.5 }; - OUT.position = IN.position; //Transform_ObjectToClip( IN.position ); + OUT.position = float4(IN.position,1.0); //Transform_ObjectToClip( IN.position ); //float2 uv = IN.texCoords + rtParams0.xy; float2 uv = viewportCoordToRenderTarget( IN.texCoords, rtParams0 ); diff --git a/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl b/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl index 90cf391dc8..fbd5290317 100644 --- a/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/edgeaa/dbgEdgeDisplayP.hlsl @@ -21,10 +21,10 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer :register(S0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer); + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return float4( tex2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); + return float4( TORQUE_TEX2D( edgeBuffer, IN.uv0 ).rrr, 1.0 ); } \ No newline at end of file diff --git a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl index e45684199c..f5a71687d5 100644 --- a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeAAP.hlsl @@ -21,17 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -float4 main( PFXVertToPix IN, - uniform sampler2D edgeBuffer : register(S0), - uniform sampler2D backBuffer : register(S1), - uniform float2 targetSize : register(C0) ) : COLOR0 +TORQUE_UNIFORM_SAMPLER2D(edgeBuffer,0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = 1.0 / targetSize; // Sample edge buffer, bail if not on an edge - float edgeSample = tex2D(edgeBuffer, IN.uv0).r; + float edgeSample = TORQUE_TEX2D(edgeBuffer, IN.uv0).r; clip(edgeSample - 1e-6); // Ok we're on an edge, so multi-tap sample, average, and return @@ -58,7 +58,7 @@ float4 main( PFXVertToPix IN, float2 offsetUV = IN.uv1 + edgeSample * ( offsets[i] * 0.5 ) * pixelSize;//rtWidthHeightInvWidthNegHeight.zw; //offsetUV *= 0.999; - accumColor+= tex2D(backBuffer, offsetUV); + accumColor += TORQUE_TEX2D(backBuffer, offsetUV); } accumColor /= 9.0; diff --git a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl index bc79516ee3..2277126a8b 100644 --- a/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/edgeaa/edgeDetectP.hlsl @@ -21,10 +21,12 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" + +TORQUE_UNIFORM_SAMPLER2D(prepassBuffer,0); // GPU Gems 3, pg 443-444 -float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize) +float GetEdgeWeight(float2 uv0, in float2 targetSize) { float2 offsets[9] = { float2( 0.0, 0.0), @@ -44,10 +46,11 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize float Depth[9]; float3 Normal[9]; + [unroll] //no getting around this, may as well save the annoying warning message for(int i = 0; i < 9; i++) { float2 uv = uv0 + offsets[i] * PixelSize; - float4 gbSample = prepassUncondition( prepassBuffer, uv ); + float4 gbSample = TORQUE_PREPASS_UNCONDITION( prepassBuffer, uv ); Depth[i] = gbSample.a; Normal[i] = gbSample.rgb; } @@ -82,9 +85,9 @@ float GetEdgeWeight(float2 uv0, in sampler2D prepassBuffer, in float2 targetSize return dot(normalResults, float4(1.0, 1.0, 1.0, 1.0)) * 0.25; } -float4 main( PFXVertToPix IN, - uniform sampler2D prepassBuffer :register(S0), - uniform float2 targetSize : register(C0) ) : COLOR0 +uniform float2 targetSize; + +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - return GetEdgeWeight(IN.uv0, prepassBuffer, targetSize );//rtWidthHeightInvWidthNegHeight.zw); + return GetEdgeWeight(IN.uv0, targetSize);//rtWidthHeightInvWidthNegHeight.zw); } diff --git a/Templates/Full/game/shaders/common/postFx/flashP.hlsl b/Templates/Full/game/shaders/common/postFx/flashP.hlsl index 3d9c6c7447..93daf3c26e 100644 --- a/Templates/Full/game/shaders/common/postFx/flashP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/flashP.hlsl @@ -25,11 +25,11 @@ uniform float damageFlash; uniform float whiteOut; -uniform sampler2D backBuffer : register(S0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { - float4 color1 = tex2D(backBuffer, IN.uv0); + float4 color1 = TORQUE_TEX2D(backBuffer, IN.uv0); float4 color2 = color1 * MUL_COLOR; float4 damage = lerp(color1,color2,damageFlash); return lerp(damage,WHITE_COLOR,whiteOut); diff --git a/Templates/Full/game/shaders/common/postFx/fogP.hlsl b/Templates/Full/game/shaders/common/postFx/fogP.hlsl index 0eba9a7b7a..b54eea97af 100644 --- a/Templates/Full/game/shaders/common/postFx/fogP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/fogP.hlsl @@ -20,20 +20,21 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" + #include "./postFx.hlsl" #include "./../torque.hlsl" +#include "./../shaderModelAutoGen.hlsl" -uniform sampler2D prepassTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 0); uniform float3 eyePosWorld; uniform float4 fogColor; uniform float3 fogData; uniform float4 rtParams0; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { //float2 prepassCoord = ( IN.uv0.xy * rtParams0.zw ) + rtParams0.xy; - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; //return float4( depth, 0, 0, 0.7 ); float factor = computeSceneFog( eyePosWorld, diff --git a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl index 357b794e4f..269bfea673 100644 --- a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaP.hlsl @@ -20,38 +20,53 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../../shaderModel.hlsl" + #define FXAA_PC 1 +#if (TORQUE_SM <= 30) #define FXAA_HLSL_3 1 +#elif TORQUE_SM < 49 +#define FXAA_HLSL_4 1 +#elif TORQUE_SM >=50 +#define FXAA_HLSL_5 1 +#endif #define FXAA_QUALITY__PRESET 12 #define FXAA_GREEN_AS_LUMA 1 #include "Fxaa3_11.h" -#include "../postFx.hlsl" struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; -uniform sampler2D colorTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(colorTex, 0); uniform float2 oneOverTargetSize; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + FxaaTex tex = colorTex; +#elif TORQUE_SM >=40 + FxaaTex tex; + tex.smpl = colorTex; + tex.tex = texture_colorTex; +#endif + return FxaaPixelShader( IN.uv0, // vertex position 0, // Unused... console stuff - colorTex, // The color back buffer + tex, // The color back buffer - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization - colorTex, // Used for 360 optimization + tex, // Used for 360 optimization oneOverTargetSize, diff --git a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl index ea2c3d106a..3bef0a4d36 100644 --- a/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl +++ b/Templates/Full/game/shaders/common/postFx/fxaa/fxaaV.hlsl @@ -25,7 +25,7 @@ struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; }; @@ -35,7 +35,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1); OUT.uv0 = viewportCoordToRenderTarget( IN.uv, rtParams0 ); return OUT; diff --git a/Templates/Full/game/shaders/common/postFx/gammaP.hlsl b/Templates/Full/game/shaders/common/postFx/gammaP.hlsl index 20196548b1..6e284eb88a 100644 --- a/Templates/Full/game/shaders/common/postFx/gammaP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/gammaP.hlsl @@ -24,21 +24,21 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -uniform sampler2D backBuffer : register(S0); -uniform sampler1D colorCorrectionTex : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 1); uniform float OneOverGamma; uniform float Brightness; uniform float Contrast; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 color = tex2D(backBuffer, IN.uv0.xy); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0.xy); // Apply the color correction. - color.r = tex1D( colorCorrectionTex, color.r ).r; - color.g = tex1D( colorCorrectionTex, color.g ).g; - color.b = tex1D( colorCorrectionTex, color.b ).b; + color.r = TORQUE_TEX1D( colorCorrectionTex, color.r ).r; + color.g = TORQUE_TEX1D( colorCorrectionTex, color.g ).g; + color.b = TORQUE_TEX1D( colorCorrectionTex, color.b ).b; // Apply gamma correction color.rgb = pow( abs(color.rgb), OneOverGamma ); diff --git a/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl b/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl index 65ae96c6fb..80f8ed02d4 100644 --- a/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/glowBlurP.hlsl @@ -22,11 +22,11 @@ #include "./postFx.hlsl" -uniform sampler2D diffuseMap : register(S0); +TORQUE_UNIFORM_SAMPLER2D(diffuseMap, 0); struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -39,20 +39,20 @@ struct VertToPix float2 uv7 : TEXCOORD7; }; -float4 main( VertToPix IN ) : COLOR +float4 main( VertToPix IN ) : TORQUE_TARGET0 { float4 kernel = float4( 0.175, 0.275, 0.375, 0.475 ) * 0.5f; float4 OUT = 0; - OUT += tex2D( diffuseMap, IN.uv0 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv1 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv2 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv3 ) * kernel.w; - - OUT += tex2D( diffuseMap, IN.uv4 ) * kernel.x; - OUT += tex2D( diffuseMap, IN.uv5 ) * kernel.y; - OUT += tex2D( diffuseMap, IN.uv6 ) * kernel.z; - OUT += tex2D( diffuseMap, IN.uv7 ) * kernel.w; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv0 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv1 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv2 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv3 ) * kernel.w; + + OUT += TORQUE_TEX2D( diffuseMap, IN.uv4 ) * kernel.x; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv5 ) * kernel.y; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv6 ) * kernel.z; + OUT += TORQUE_TEX2D( diffuseMap, IN.uv7 ) * kernel.w; // Calculate a lumenance value in the alpha so we // can use alpha test to save fillrate. diff --git a/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl b/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl index c9c9052ec9..b8f5cf9c28 100644 --- a/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl +++ b/Templates/Full/game/shaders/common/postFx/glowBlurV.hlsl @@ -28,7 +28,7 @@ uniform float2 texSize0; struct VertToPix { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 uv0 : TEXCOORD0; float2 uv1 : TEXCOORD1; @@ -45,7 +45,7 @@ VertToPix main( PFXVert IN ) { VertToPix OUT; - OUT.hpos = IN.pos; + OUT.hpos = float4(IN.pos,1.0); float2 uv = IN.uv + (0.5f / texSize0); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl index c28f9eb83f..77f4b9915a 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurHP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -48,7 +47,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -62,7 +61,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (i - 4.0) * oneOverTargetSize.x; x = (i - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( offset, 0.0f ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl index 93e6b83821..8381f6a5dc 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/bloomGaussBlurVP.hlsl @@ -21,9 +21,8 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; uniform float gaussMultiplier; uniform float gaussMean; @@ -47,7 +46,7 @@ float computeGaussianValue( float x, float mean, float std_deviation ) return tmp * tmp2; } -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 color = { 0.0f, 0.0f, 0.0f, 0.0f }; float offset = 0; @@ -61,7 +60,7 @@ float4 main( PFXVertToPix IN ) : COLOR offset = (fI - 4.0) * oneOverTargetSize.y; x = (fI - 4.0) / 4.0; weight = gaussMultiplier * computeGaussianValue( x, gaussMean, gaussStdDev ); - color += (tex2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); + color += (TORQUE_TEX2D( inputTex, IN.uv0 + float2( 0.0f, offset ) ) * weight ); } return float4( color.rgb, 1.0f ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl index c438a51539..9a8a93e979 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/brightPassFilterP.hlsl @@ -21,12 +21,11 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" #include "../../torque.hlsl" -uniform sampler2D inputTex : register(S0); -uniform sampler2D luminanceTex : register(S1); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); uniform float2 oneOverTargetSize; uniform float brightPassThreshold; uniform float g_fMiddleGray; @@ -40,17 +39,17 @@ static float2 gTapOffsets[4] = { -0.5, -0.5 }, { 0.5, 0.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 average = { 0.0f, 0.0f, 0.0f, 0.0f }; // Combine and average 4 samples from the source HDR texture. for( int i = 0; i < 4; i++ ) - average += hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); + average += hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * oneOverTargetSize ) ) ); average *= 0.25f; // Determine the brightness of this particular pixel. - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; float lum = (g_fMiddleGray / (adaptedLum + 0.0001)) * hdrLuminance( average.rgb ); //float lum = hdrLuminance( average.rgb ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl index 3f443611c7..0f895070af 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/calculateAdaptedLumP.hlsl @@ -21,18 +21,17 @@ //----------------------------------------------------------------------------- #include "../postFx.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D currLum : register( S0 ); -uniform sampler2D lastAdaptedLum : register( S1 ); +TORQUE_UNIFORM_SAMPLER2D(currLum, 0); +TORQUE_UNIFORM_SAMPLER2D(lastAdaptedLum, 1); uniform float adaptRate; uniform float deltaTime; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float fAdaptedLum = tex2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; - float fCurrentLum = tex2D( currLum, float2(0.5f, 0.5f) ).r; + float fAdaptedLum = TORQUE_TEX2D( lastAdaptedLum, float2(0.5f, 0.5f) ).r; + float fCurrentLum = TORQUE_TEX2D( currLum, float2(0.5f, 0.5f) ).r; // The user's adapted luminance level is simulated by closing the gap between // adapted luminance and current luminance by 2% every frame, based on a diff --git a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl index 3ce68452c5..01998af0ba 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4P.hlsl @@ -29,23 +29,24 @@ //----------------------------------------------------------------------------- struct VertIn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; + +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( VertIn IN, - uniform sampler2D inputTex : register(S0) ) : COLOR +float4 main( VertIn IN) : TORQUE_TARGET0 { // We calculate the texture coords // in the vertex shader as an optimization. float4 sample = 0.0f; for ( int i = 0; i < 8; i++ ) { - sample += tex2D( inputTex, IN.texCoords[i].xy ); - sample += tex2D( inputTex, IN.texCoords[i].zw ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].xy ); + sample += TORQUE_TEX2D( inputTex, IN.texCoords[i].zw ); } return sample / 16; diff --git a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl index 88794204ef..c9a34b7f4c 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/downScale4x4V.hlsl @@ -29,19 +29,20 @@ struct Conn { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float4 texCoords[8] : TEXCOORD0; }; +uniform float2 targetSize; + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( PFXVert In, - uniform float2 targetSize : register(C0) ) +Conn main( PFXVert In ) { Conn Out; - Out.hpos = In.pos; + Out.hpos = float4(In.pos,1.0); // Sample from the 16 surrounding points. Since the center point will be in // the exact center of 16 texels, a 0.5f offset is needed to specify a texel diff --git a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl index cb71f01c2f..b786b3f6a9 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/finalPassCombineP.hlsl @@ -20,15 +20,15 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" #include "../../torque.hlsl" #include "../postFx.hlsl" +#include "../../shaderModelAutoGen.hlsl" -uniform sampler2D sceneTex : register( s0 ); -uniform sampler2D luminanceTex : register( s1 ); -uniform sampler2D bloomTex : register( s2 ); -uniform sampler1D colorCorrectionTex : register( s3 ); -uniform sampler2D prepassTex : register(S4); +TORQUE_UNIFORM_SAMPLER2D(sceneTex, 0); +TORQUE_UNIFORM_SAMPLER2D(luminanceTex, 1); +TORQUE_UNIFORM_SAMPLER2D(bloomTex, 2); +TORQUE_UNIFORM_SAMPLER1D(colorCorrectionTex, 3); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 4); uniform float2 texSize0; uniform float2 texSize2; @@ -36,22 +36,20 @@ uniform float2 texSize2; uniform float g_fEnableToneMapping; uniform float g_fMiddleGray; uniform float g_fWhiteCutoff; - uniform float g_fEnableBlueShift; -uniform float3 g_fBlueShiftColor; +uniform float3 g_fBlueShiftColor; uniform float g_fBloomScale; uniform float g_fOneOverGamma; uniform float Brightness; uniform float Contrast; - -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( sceneTex, IN.uv0 ) ); - float adaptedLum = tex2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; - float4 bloom = tex2D( bloomTex, IN.uv0 ); + float4 sample = hdrDecode( TORQUE_TEX2D( sceneTex, IN.uv0 ) ); + float adaptedLum = TORQUE_TEX2D( luminanceTex, float2( 0.5f, 0.5f ) ).r; + float4 bloom = TORQUE_TEX2D( bloomTex, IN.uv0 ); // For very low light conditions, the rods will dominate the perception // of light, and therefore color will be desaturated and shifted @@ -85,14 +83,14 @@ float4 main( PFXVertToPix IN ) : COLOR0 } // Add the bloom effect. - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; if (depth>0.9999) sample += g_fBloomScale * bloom; // Apply the color correction. - sample.r = tex1D( colorCorrectionTex, sample.r ).r; - sample.g = tex1D( colorCorrectionTex, sample.g ).g; - sample.b = tex1D( colorCorrectionTex, sample.b ).b; + sample.r = TORQUE_TEX1D( colorCorrectionTex, sample.r ).r; + sample.g = TORQUE_TEX1D( colorCorrectionTex, sample.g ).g; + sample.b = TORQUE_TEX1D( colorCorrectionTex, sample.b ).b; // Apply gamma correction diff --git a/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl index 593a24e7b1..505d1b825f 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/luminanceVisP.hlsl @@ -22,15 +22,14 @@ #include "../postFx.hlsl" #include "../../torque.hlsl" -#include "shadergen:/autogenConditioners.h" -uniform sampler2D inputTex : register(S0); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float brightPassThreshold; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { - float4 sample = hdrDecode( tex2D( inputTex, IN.uv0 ) ); + float4 sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 ) ); // Determine the brightness of this particular pixel. float lum = hdrLuminance( sample.rgb ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl index 39fd9dccca..2e23ece1f2 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumInitialP.hlsl @@ -23,7 +23,7 @@ #include "../../torque.hlsl" #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 texSize0; uniform float g_fMinLuminace; @@ -36,7 +36,7 @@ static float2 gTapOffsets[9] = }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 tsize = 1.0 / texSize0; @@ -46,7 +46,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 9; i++ ) { // Decode the hdr value. - sample = hdrDecode( tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); + sample = hdrDecode( TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * tsize ) ).rgb ); // Get the luminance and add it to the average. float lum = max( hdrLuminance( sample ), g_fMinLuminace ); diff --git a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl index 59e91f0db3..46ed6fc70c 100644 --- a/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/hdr/sampleLumIterativeP.hlsl @@ -22,7 +22,7 @@ #include "../postFx.hlsl" -uniform sampler2D inputTex : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(inputTex, 0); uniform float2 oneOverTargetSize; @@ -34,7 +34,7 @@ static float2 gTapOffsets[16] = { -1.5, 1.5 }, { -0.5, 1.5 }, { 0.5, 1.5 }, { 1.5, 1.5 } }; -float4 main( PFXVertToPix IN ) : COLOR +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float2 pixelSize = oneOverTargetSize; @@ -42,7 +42,7 @@ float4 main( PFXVertToPix IN ) : COLOR for ( int i = 0; i < 16; i++ ) { - float lum = tex2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; + float lum = TORQUE_TEX2D( inputTex, IN.uv0 + ( gTapOffsets[i] * pixelSize ) ).r; average += lum; } diff --git a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl index e8870b3c42..b70bafa98c 100644 --- a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayOccludeP.hlsl @@ -20,29 +20,29 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../../shaderModelAutoGen.hlsl" #include "../postFx.hlsl" -uniform sampler2D backBuffer : register( s0 ); // The original backbuffer. -uniform sampler2D prepassTex : register( s1 ); // The pre-pass depth and normals. +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); uniform float brightScalar; static const float3 LUMINANCE_VECTOR = float3(0.3125f, 0.6154f, 0.0721f); -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 col = float4( 0, 0, 0, 1 ); // Get the depth at this pixel. - float depth = prepassUncondition( prepassTex, IN.uv0 ).w; + float depth = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ).w; // If the depth is equal to 1.0, read from the backbuffer // and perform the exposure calculation on the result. if ( depth >= 0.999 ) { - col = tex2D( backBuffer, IN.uv0 ); + col = TORQUE_TEX2D( backBuffer, IN.uv0 ); //col = 1 - exp(-120000 * col); col += dot( col.rgb, LUMINANCE_VECTOR ) + 0.0001f; diff --git a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl index ff44abfae5..0328947101 100644 --- a/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/lightRay/lightRayP.hlsl @@ -22,28 +22,29 @@ #include "../postFx.hlsl" -uniform sampler2D frameSampler : register( s0 ); -uniform sampler2D backBuffer : register( s1 ); +TORQUE_UNIFORM_SAMPLER2D(frameSampler, 0); +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 1); + uniform float3 camForward; +uniform int numSamples; uniform float3 lightDirection; +uniform float density; uniform float2 screenSunPos; uniform float2 oneOverTargetSize; -uniform int numSamples; -uniform float density; uniform float weight; uniform float decay; uniform float exposure; -float4 main( PFXVertToPix IN ) : COLOR0 +float4 main( PFXVertToPix IN ) : TORQUE_TARGET0 { float4 texCoord = float4( IN.uv0.xy, 0, 0 ); // Store initial sample. - half3 color = (half3)tex2D( frameSampler, texCoord.xy ).rgb; + half3 color = (half3)TORQUE_TEX2D( frameSampler, texCoord.xy ).rgb; // Store original bb color. - float4 bbCol = tex2D( backBuffer, IN.uv1 ); + float4 bbCol = TORQUE_TEX2D( backBuffer, IN.uv1 ); // Set up illumination decay factor. half illuminationDecay = 1.0; @@ -68,7 +69,7 @@ float4 main( PFXVertToPix IN ) : COLOR0 texCoord.xy -= deltaTexCoord; // Retrieve sample at new location. - half3 sample = (half3)tex2Dlod( frameSampler, texCoord ); + half3 sample = (half3)TORQUE_TEX2DLOD( frameSampler, texCoord ); // Apply sample attenuation scale/decay factors. sample *= half(illuminationDecay * weight); diff --git a/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl b/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl index 348484f4de..8bc65fbc69 100644 --- a/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl +++ b/Templates/Full/game/shaders/common/postFx/motionBlurP.hlsl @@ -22,23 +22,22 @@ #include "./postFx.hlsl" #include "../torque.hlsl" -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" uniform float4x4 matPrevScreenToWorld; uniform float4x4 matWorldToScreen; // Passed in from setShaderConsts() uniform float velocityMultiplier; +TORQUE_UNIFORM_SAMPLER2D(backBuffer, 0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); -uniform sampler2D backBuffer : register(S0); -uniform sampler2D prepassTex : register(S1); - -float4 main(PFXVertToPix IN) : COLOR0 +float4 main(PFXVertToPix IN) : TORQUE_TARGET0 { float samples = 5; // First get the prepass texture for uv channel 0 - float4 prepass = prepassUncondition( prepassTex, IN.uv0 ); + float4 prepass = TORQUE_PREPASS_UNCONDITION( prepassTex, IN.uv0 ); // Next extract the depth float depth = prepass.a; @@ -58,12 +57,12 @@ float4 main(PFXVertToPix IN) : COLOR0 float2 velocity = ((screenPos - previousPos) / velocityMultiplier).xy; // Generate the motion blur - float4 color = tex2D(backBuffer, IN.uv0); + float4 color = TORQUE_TEX2D(backBuffer, IN.uv0); IN.uv0 += velocity; for(int i = 1; i= 10 && TORQUE_SM <=30) + // Semantics + #define TORQUE_POSITION POSITION + #define TORQUE_DEPTH DEPTH + #define TORQUE_TARGET0 COLOR0 + #define TORQUE_TARGET1 COLOR1 + #define TORQUE_TARGET2 COLOR2 + #define TORQUE_TARGET3 COLOR3 + + // Sampler uniforms + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform sampler1D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform sampler2D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform sampler3D tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform samplerCUBE tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) tex1D(tex,coords) + #define TORQUE_TEX2D(tex,coords) tex2D(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) tex2Dproj(tex,coords) //this really is sm 2 or later + #define TORQUE_TEX3D(tex,coords) tex3D(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texCUBE(tex,coords) + + //Shader model 3.0 only + #if TORQUE_SM == 30 + #define TORQUE_VPOS VPOS // This is a float2 + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) tex2Dlod(tex,coords) + #endif + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) sampler2D tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) samplerCUBE tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) tex +// Shader model 4.0+ +#elif TORQUE_SM >= 40 + #define TORQUE_POSITION SV_Position + #define TORQUE_DEPTH SV_Depth + #define TORQUE_VPOS SV_Position //note float4 compared to SM 3 where it is a float2 + #define TORQUE_TARGET0 SV_Target0 + #define TORQUE_TARGET1 SV_Target1 + #define TORQUE_TARGET2 SV_Target2 + #define TORQUE_TARGET3 SV_Target3 + // Sampler uniforms + //1D is emulated to a 2D for now + #define TORQUE_UNIFORM_SAMPLER1D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER2D(tex,regist) uniform Texture2D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLER3D(tex,regist) uniform Texture3D texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + #define TORQUE_UNIFORM_SAMPLERCUBE(tex,regist) uniform TextureCube texture_##tex : register(T##regist); uniform SamplerState tex : register(S##regist) + // Sampling functions + #define TORQUE_TEX1D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEX2DPROJ(tex,coords) texture_##tex.Sample(tex,coords.xy / coords.w) + #define TORQUE_TEX3D(tex,coords) texture_##tex.Sample(tex,coords) + #define TORQUE_TEXCUBE(tex,coords) texture_##tex.Sample(tex,coords) + // The mipmap LOD is specified in coord.w + #define TORQUE_TEX2DLOD(tex,coords) texture_##tex.SampleLevel(tex,coords.xy,coords.w) + + //helper if you want to pass sampler/texture in a function + //2D + #define TORQUE_SAMPLER2D(tex) Texture2D texture_##tex, SamplerState tex + #define TORQUE_SAMPLER2D_MAKEARG(tex) texture_##tex, tex + //Cube + #define TORQUE_SAMPLERCUBE(tex) TextureCube texture_##tex, SamplerState tex + #define TORQUE_SAMPLERCUBE_MAKEARG(tex) texture_##tex, tex +#endif + +#endif // _TORQUE_SHADERMODEL_ + diff --git a/Templates/Full/game/shaders/common/shaderModelAutoGen.hlsl b/Templates/Full/game/shaders/common/shaderModelAutoGen.hlsl new file mode 100644 index 0000000000..4f2d8803f4 --- /dev/null +++ b/Templates/Full/game/shaders/common/shaderModelAutoGen.hlsl @@ -0,0 +1,35 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2015 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _TORQUE_SHADERMODEL_AUTOGEN_ +#define _TORQUE_SHADERMODEL_AUTOGEN_ + +#include "shadergen:/autogenConditioners.h" + +// Portability helpers for autogenConditioners +#if (TORQUE_SM >= 10 && TORQUE_SM <=30) + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, coords) +#elif TORQUE_SM >= 40 + #define TORQUE_PREPASS_UNCONDITION(tex, coords) prepassUncondition(tex, texture_##tex, coords) +#endif + +#endif //_TORQUE_SHADERMODEL_AUTOGEN_ diff --git a/Templates/Full/game/shaders/common/terrain/blendP.hlsl b/Templates/Full/game/shaders/common/terrain/blendP.hlsl index f710889288..aeef9d6e3d 100644 --- a/Templates/Full/game/shaders/common/terrain/blendP.hlsl +++ b/Templates/Full/game/shaders/common/terrain/blendP.hlsl @@ -21,25 +21,28 @@ //----------------------------------------------------------------------------- #include "terrain.hlsl" +#include "../shaderModel.hlsl" struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -float4 main( ConnectData IN, - uniform sampler2D layerTex : register(S0), - uniform sampler2D textureMap : register(S1), - uniform float texId, - uniform float layerSize ) : COLOR +TORQUE_UNIFORM_SAMPLER2D(layerTex, 0); +TORQUE_UNIFORM_SAMPLER2D(textureMap, 1); + +uniform float texId; +uniform float layerSize; + +float4 main( ConnectData IN ) : TORQUE_TARGET0 { - float4 layerSample = round( tex2D( layerTex, IN.layerCoord ) * 255.0f ); + float4 layerSample = round( TORQUE_TEX2D( layerTex, IN.layerCoord ) * 255.0f ); float blend = calcBlend( texId, IN.layerCoord, layerSize, layerSample ); clip( blend - 0.0001 ); - return float4( tex2D( textureMap, IN.texCoord ).rgb, blend ); + return float4( TORQUE_TEX2D(textureMap, IN.texCoord).rgb, blend); } diff --git a/Templates/Full/game/shaders/common/terrain/blendV.hlsl b/Templates/Full/game/shaders/common/terrain/blendV.hlsl index 7a79d2de4d..9ccd33301b 100644 --- a/Templates/Full/game/shaders/common/terrain/blendV.hlsl +++ b/Templates/Full/game/shaders/common/terrain/blendV.hlsl @@ -23,6 +23,8 @@ /// The vertex shader used in the generation and caching of the /// base terrain texture. +#include "../shaderModel.hlsl" + struct VertData { float3 position : POSITION; @@ -31,17 +33,18 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; float2 layerCoord : TEXCOORD0; float2 texCoord : TEXCOORD1; }; -ConnectData main( VertData IN, - uniform float2 texScale : register(C0) ) +uniform float2 texScale; + +ConnectData main( VertData IN ) { ConnectData OUT; - OUT.hpos = float4( IN.position.xyz, 1 ); + OUT.hpos = float4( IN.position, 1 ); OUT.layerCoord = IN.texCoord; OUT.texCoord = IN.texCoord * texScale; diff --git a/Templates/Full/game/shaders/common/terrain/terrain.hlsl b/Templates/Full/game/shaders/common/terrain/terrain.hlsl index 8ce497012c..b7c87e6180 100644 --- a/Templates/Full/game/shaders/common/terrain/terrain.hlsl +++ b/Templates/Full/game/shaders/common/terrain/terrain.hlsl @@ -35,6 +35,7 @@ float calcBlend( float texId, float2 layerCoord, float layerSize, float4 layerSa // Check if any of the layer samples // match the current texture id. float4 factors = 0; + [unroll] for(int i = 0; i < 4; i++) if(layerSample[i] == texId) factors[i] = 1; diff --git a/Templates/Full/game/shaders/common/torque.hlsl b/Templates/Full/game/shaders/common/torque.hlsl index f50832cb8f..3521042d4a 100644 --- a/Templates/Full/game/shaders/common/torque.hlsl +++ b/Templates/Full/game/shaders/common/torque.hlsl @@ -23,6 +23,7 @@ #ifndef _TORQUE_HLSL_ #define _TORQUE_HLSL_ +#include "./shaderModel.hlsl" static float M_HALFPI_F = 1.57079632679489661923f; static float M_PI_F = 3.14159265358979323846f; @@ -137,29 +138,29 @@ float3x3 quatToMat( float4 quat ) /// @param negViewTS The negative view vector in tangent space. /// @param depthScale The parallax factor used to scale the depth result. /// -float2 parallaxOffset( sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale ) +float2 parallaxOffset(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D( texMap, texCoord ).a; - float2 offset = negViewTS.xy * ( depth * depthScale ); + float depth = TORQUE_TEX2D(texMap, texCoord).a; + float2 offset = negViewTS.xy * (depth * depthScale); - for ( int i=0; i < PARALLAX_REFINE_STEPS; i++ ) + for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = ( depth + tex2D( texMap, texCoord + offset ).a ) * 0.5; - offset = negViewTS.xy * ( depth * depthScale ); + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).a) * 0.5; + offset = negViewTS.xy * (depth * depthScale); } return offset; } /// Same as parallaxOffset but for dxtnm where depth is stored in the red channel instead of the alpha -float2 parallaxOffsetDxtnm(sampler2D texMap, float2 texCoord, float3 negViewTS, float depthScale) +float2 parallaxOffsetDxtnm(TORQUE_SAMPLER2D(texMap), float2 texCoord, float3 negViewTS, float depthScale) { - float depth = tex2D(texMap, texCoord).r; + float depth = TORQUE_TEX2D(texMap, texCoord).r; float2 offset = negViewTS.xy * (depth * depthScale); for (int i = 0; i < PARALLAX_REFINE_STEPS; i++) { - depth = (depth + tex2D(texMap, texCoord + offset).r) * 0.5; + depth = (depth + TORQUE_TEX2D(texMap, texCoord + offset).r) * 0.5; offset = negViewTS.xy * (depth * depthScale); } diff --git a/Templates/Full/game/shaders/common/water/waterBasicP.hlsl b/Templates/Full/game/shaders/common/water/waterBasicP.hlsl index 7ae933f6f1..efb4377799 100644 --- a/Templates/Full/game/shaders/common/water/waterBasicP.hlsl +++ b/Templates/Full/game/shaders/common/water/waterBasicP.hlsl @@ -57,7 +57,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -92,11 +92,11 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); //uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); +TORQUE_UNIFORM_SAMPLER2D(reflectMap,2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff,3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap,4); //uniform sampler foamMap : register( S5 ); uniform float4 baseColor; uniform float4 miscParams; @@ -113,16 +113,16 @@ uniform float4x4 modelMat; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Modulate baseColor by the ambientColor. float4 waterBaseColor = baseColor * float4( ambientColor.rgb, 1 ); waterBaseColor = toLinear(waterBaseColor); // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2 ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -136,7 +136,7 @@ float4 main( ConnectData IN ) : COLOR distortPos.xy += bumpNorm.xy * distortAmt; #ifdef UNDERWATER - return hdrEncode( tex2Dproj( refractBuff, distortPos ) ); + return hdrEncode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); #else float3 eyeVec = IN.objPos.xyz - eyePos; @@ -154,16 +154,16 @@ float4 main( ConnectData IN ) : COLOR float fakeColorAmt = ang; // Get reflection map color - float4 refMapColor = hdrDecode( tex2Dproj( reflectMap, distortPos ) ); + float4 refMapColor = hdrDecode( TORQUE_TEX2DPROJ( reflectMap, distortPos ) ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); //return refMapColor; // Get refract color - float4 refractColor = hdrDecode( tex2Dproj( refractBuff, distortPos ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2DPROJ( refractBuff, distortPos ) ); // calc "diffuse" color by lerping from the water color // to refraction image based on the water clarity. @@ -198,7 +198,7 @@ float4 main( ConnectData IN ) : COLOR // Fog it. float factor = computeSceneFog( eyePos, - IN.objPos, + IN.objPos.xyz, WORLD_Z, fogData.x, fogData.y, diff --git a/Templates/Full/game/shaders/common/water/waterBasicV.hlsl b/Templates/Full/game/shaders/common/water/waterBasicV.hlsl index 2c201e6752..310647c902 100644 --- a/Templates/Full/game/shaders/common/water/waterBasicV.hlsl +++ b/Templates/Full/game/shaders/common/water/waterBasicV.hlsl @@ -20,12 +20,13 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -33,7 +34,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -95,21 +96,21 @@ ConnectData main( VertData IN ) // IN.position.xy += offsetXY; // IN.undulateData += offsetXY; // } - - float4 worldPos = mul( modelMat, IN.position ); + float4 inPos = float4(IN.position, 1.0); + float4 worldPos = mul(modelMat, inPos); IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); //OUT.objPos = worldPos; - OUT.objPos.xyz = IN.position.xyz; + OUT.objPos.xyz = IN.position; OUT.objPos.w = worldPos.z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. - float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 ) ); + float2 undulatePos = mul( modelMat, float4( IN.undulateData.xy, 0, 1 )).xy; //if ( undulatePos.x < 0 ) // undulatePos = IN.position.xy; @@ -128,12 +129,12 @@ ConnectData main( VertData IN ) float undulateFade = 1; // Scale down wave magnitude amount based on distance from the camera. - float dist = distance( IN.position.xyz, eyePos ); + float dist = distance( IN.position, eyePos ); dist = clamp( dist, 1.0, undulateMaxDist ); undulateFade *= ( 1 - dist / undulateMaxDist ); // Also scale down wave magnitude if the camera is very very close. - undulateFade *= saturate( ( distance( IN.position.xyz, eyePos ) - 0.5 ) / 10.0 ); + undulateFade *= saturate( ( distance( IN.position, eyePos ) - 0.5 ) / 10.0 ); undulateAmt *= undulateFade; @@ -141,7 +142,7 @@ ConnectData main( VertData IN ) //undulateAmt = 0; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Save worldSpace position of this pixel/vert @@ -210,7 +211,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * IN.undulateData.x + waveDir[i].y * IN.undulateData.y + elapsedTime * waveData[i].x ); } binormal = normalize( binormal ); diff --git a/Templates/Full/game/shaders/common/water/waterP.hlsl b/Templates/Full/game/shaders/common/water/waterP.hlsl index c4edff0d7d..ac66e9b28d 100644 --- a/Templates/Full/game/shaders/common/water/waterP.hlsl +++ b/Templates/Full/game/shaders/common/water/waterP.hlsl @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModelAutoGen.hlsl" #include "../torque.hlsl" //----------------------------------------------------------------------------- @@ -69,7 +69,7 @@ struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -105,13 +105,13 @@ float fresnel(float NdotV, float bias, float power) //----------------------------------------------------------------------------- // Uniforms //----------------------------------------------------------------------------- -uniform sampler bumpMap : register( S0 ); -uniform sampler2D prepassTex : register( S1 ); -uniform sampler2D reflectMap : register( S2 ); -uniform sampler refractBuff : register( S3 ); -uniform samplerCUBE skyMap : register( S4 ); -uniform sampler foamMap : register( S5 ); -uniform sampler1D depthGradMap : register( S6 ); +TORQUE_UNIFORM_SAMPLER2D(bumpMap,0); +TORQUE_UNIFORM_SAMPLER2D(prepassTex, 1); +TORQUE_UNIFORM_SAMPLER2D(reflectMap, 2); +TORQUE_UNIFORM_SAMPLER2D(refractBuff, 3); +TORQUE_UNIFORM_SAMPLERCUBE(skyMap, 4); +TORQUE_UNIFORM_SAMPLER2D(foamMap, 5); +TORQUE_UNIFORM_SAMPLER1D(depthGradMap, 6); uniform float4 specularParams; uniform float4 baseColor; uniform float4 miscParams; @@ -138,12 +138,12 @@ uniform float reflectivity; //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -float4 main( ConnectData IN ) : COLOR +float4 main( ConnectData IN ) : TORQUE_TARGET0 { // Get the bumpNorm... - float3 bumpNorm = ( tex2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; - bumpNorm += ( tex2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; + float3 bumpNorm = ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.x; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord01.zw ).rgb * 2.0 - 1.0 ) * rippleMagnitude.y; + bumpNorm += ( TORQUE_TEX2D( bumpMap, IN.rippleTexCoord2.xy ).rgb * 2.0 - 1.0 ) * rippleMagnitude.z; bumpNorm = normalize( bumpNorm ); bumpNorm = lerp( bumpNorm, float3(0,0,1), 1.0 - rippleMagnitude.w ); @@ -155,7 +155,7 @@ float4 main( ConnectData IN ) : COLOR float2 prepassCoord = viewportCoordToRenderTarget( IN.posPostWave, rtParams1 ); - float startDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float startDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; // The water depth in world units of the undistorted pixel. float startDelta = ( startDepth - pixelDepth ); @@ -180,7 +180,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - float prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + float prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; @@ -212,7 +212,7 @@ float4 main( ConnectData IN ) : COLOR prepassCoord = viewportCoordToRenderTarget( distortPos, rtParams1 ); // Get prepass depth at the position of this distorted pixel. - prepassDepth = prepassUncondition( prepassTex, prepassCoord ).w; + prepassDepth = TORQUE_PREPASS_UNCONDITION( prepassTex, prepassCoord ).w; if ( prepassDepth > 0.99 ) prepassDepth = 5.0; delta = ( prepassDepth - pixelDepth ) * farPlaneDist; @@ -260,8 +260,8 @@ float4 main( ConnectData IN ) : COLOR IN.foamTexCoords.xy += foamRippleOffset; IN.foamTexCoords.zw += foamRippleOffset; - float4 foamColor = tex2D( foamMap, IN.foamTexCoords.xy ); - foamColor += tex2D( foamMap, IN.foamTexCoords.zw ); + float4 foamColor = TORQUE_TEX2D( foamMap, IN.foamTexCoords.xy ); + foamColor += TORQUE_TEX2D( foamMap, IN.foamTexCoords.zw ); foamColor = saturate( foamColor ); // Modulate foam color by ambient color @@ -282,18 +282,18 @@ float4 main( ConnectData IN ) : COLOR foamColor.rgb *= FOAM_OPACITY * foamAmt * foamColor.a; // Get reflection map color. - float4 refMapColor = tex2D( reflectMap, reflectCoord ); + float4 refMapColor = TORQUE_TEX2D( reflectMap, reflectCoord ); // If we do not have a reflection texture then we use the cubemap. - refMapColor = lerp( refMapColor, texCUBE( skyMap, reflectionVec ), NO_REFLECT ); + refMapColor = lerp( refMapColor, TORQUE_TEXCUBE( skyMap, reflectionVec ), NO_REFLECT ); - fakeColor = ( texCUBE( skyMap, reflectionVec ) ); + fakeColor = ( TORQUE_TEXCUBE( skyMap, reflectionVec ) ); fakeColor.a = 1; // Combine reflection color and fakeColor. float4 reflectColor = lerp( refMapColor, fakeColor, fakeColorAmt ); // Get refract color - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); // We darken the refraction color a bit to make underwater // elements look wet. We fade out this darkening near the @@ -310,7 +310,7 @@ float4 main( ConnectData IN ) : COLOR float fogAmt = 1.0 - saturate( exp( -FOG_DENSITY * fogDelta ) ); // Calculate the water "base" color based on depth. - float4 waterBaseColor = baseColor * tex1D( depthGradMap, saturate( delta / depthGradMax ) ); + float4 waterBaseColor = baseColor * TORQUE_TEX1D( depthGradMap, saturate( delta / depthGradMax ) ); waterBaseColor = toLinear(waterBaseColor); // Modulate baseColor by the ambientColor. @@ -354,7 +354,7 @@ float4 main( ConnectData IN ) : COLOR #else - float4 refractColor = hdrDecode( tex2D( refractBuff, refractCoord ) ); + float4 refractColor = hdrDecode( TORQUE_TEX2D( refractBuff, refractCoord ) ); float4 OUT = refractColor; #endif diff --git a/Templates/Full/game/shaders/common/water/waterV.hlsl b/Templates/Full/game/shaders/common/water/waterV.hlsl index d2b097bc54..c869f0e9fa 100644 --- a/Templates/Full/game/shaders/common/water/waterV.hlsl +++ b/Templates/Full/game/shaders/common/water/waterV.hlsl @@ -20,14 +20,14 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "shadergen:/autogenConditioners.h" +#include "../shaderModel.hlsl" //----------------------------------------------------------------------------- // Structures //----------------------------------------------------------------------------- struct VertData { - float4 position : POSITION; + float3 position : POSITION; float3 normal : NORMAL; float2 undulateData : TEXCOORD0; float4 horizonFactor : TEXCOORD1; @@ -35,7 +35,7 @@ struct VertData struct ConnectData { - float4 hpos : POSITION; + float4 hpos : TORQUE_POSITION; // TexCoord 0 and 1 (xy,zw) for ripple texture lookup float4 rippleTexCoord01 : TEXCOORD0; @@ -94,12 +94,12 @@ ConnectData main( VertData IN ) 0.0, 0.0, 0.0, 1.0 }; IN.position.z = lerp( IN.position.z, eyePos.z, IN.horizonFactor.x ); - - OUT.objPos = IN.position; - OUT.objPos.w = mul( modelMat, IN.position ).z; + float4 inPos = float4( IN.position, 1.0); + OUT.objPos = inPos; + OUT.objPos.w = mul( modelMat, inPos ).z; // Send pre-undulation screenspace position - OUT.posPreWave = mul( modelview, IN.position ); + OUT.posPreWave = mul( modelview, inPos ); OUT.posPreWave = mul( texGen, OUT.posPreWave ); // Calculate the undulation amount for this vertex. @@ -132,7 +132,7 @@ ConnectData main( VertData IN ) OUT.rippleTexCoord2.w = saturate( OUT.rippleTexCoord2.w - 0.2 ) / 0.8; // Apply wave undulation to the vertex. - OUT.posPostWave = IN.position; + OUT.posPostWave = inPos; OUT.posPostWave.xyz += IN.normal.xyz * undulateAmt; // Convert to screen @@ -197,7 +197,7 @@ ConnectData main( VertData IN ) for ( int i = 0; i < 3; i++ ) { binormal.z += undulateFade * waveDir[i].x * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); - tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); + tangent.z += undulateFade * waveDir[i].y * waveData[i].y * cos( waveDir[i].x * undulatePos.x + waveDir[i].y * undulatePos.y + elapsedTime * waveData[i].x ); } binormal = binormal; diff --git a/Templates/Full/game/shaders/common/wavesP.hlsl b/Templates/Full/game/shaders/common/wavesP.hlsl index 265842f1fb..c51eb4b895 100644 --- a/Templates/Full/game/shaders/common/wavesP.hlsl +++ b/Templates/Full/game/shaders/common/wavesP.hlsl @@ -22,13 +22,14 @@ #define IN_HLSL #include "shdrConsts.h" +#include "shaderModel.hlsl" //----------------------------------------------------------------------------- // Data //----------------------------------------------------------------------------- struct v2f { - float4 HPOS : POSITION; + float4 HPOS : TORQUE_POSITION; float2 TEX0 : TEXCOORD0; float4 tangentToCube0 : TEXCOORD1; float4 tangentToCube1 : TEXCOORD2; @@ -42,21 +43,23 @@ struct v2f struct Fragout { - float4 col : COLOR0; + float4 col : TORQUE_TARGET0; }; +// Uniforms +TORQUE_UNIFORM_SAMPLER2D(diffMap,0); +//TORQUE_UNIFORM_SAMPLERCUBE(cubeMap, 1); not used? +TORQUE_UNIFORM_SAMPLER2D(bumpMap,2); + +uniform float4 specularColor : register(PC_MAT_SPECCOLOR); +uniform float4 ambient : register(PC_AMBIENT_COLOR); +uniform float specularPower : register(PC_MAT_SPECPOWER); +uniform float accumTime : register(PC_ACCUM_TIME); + //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Fragout main(v2f IN, - uniform sampler2D diffMap : register(S0), - uniform sampler2D bumpMap : register(S2), - uniform samplerCUBE cubeMap : register(S1), - uniform float4 specularColor : register(PC_MAT_SPECCOLOR), - uniform float specularPower : register(PC_MAT_SPECPOWER), - uniform float4 ambient : register(PC_AMBIENT_COLOR), - uniform float accumTime : register(PC_ACCUM_TIME) -) +Fragout main(v2f IN) { Fragout OUT; @@ -68,8 +71,8 @@ Fragout main(v2f IN, texOffset.y = IN.TEX0.y + cos( accumTime * 3.0 + IN.TEX0.x * 6.28319 * 2.0 ) * 0.05; - float4 bumpNorm = tex2D( bumpMap, texOffset ) * 2.0 - 1.0; - float4 diffuse = tex2D( diffMap, texOffset ); + float4 bumpNorm = TORQUE_TEX2D( bumpMap, texOffset ) * 2.0 - 1.0; + float4 diffuse = TORQUE_TEX2D( diffMap, texOffset ); OUT.col = diffuse * (saturate( dot( IN.lightVec, bumpNorm.xyz ) ) + ambient); diff --git a/Templates/Full/game/shaders/common/wavesV.hlsl b/Templates/Full/game/shaders/common/wavesV.hlsl index 6580daa5b4..fccef9d257 100644 --- a/Templates/Full/game/shaders/common/wavesV.hlsl +++ b/Templates/Full/game/shaders/common/wavesV.hlsl @@ -22,7 +22,7 @@ #define IN_HLSL #include "shdrConsts.h" -#include "hlslStructs.h" +#include "hlslStructs.hlsl" //----------------------------------------------------------------------------- // Constants @@ -42,21 +42,20 @@ struct Conn }; +uniform float4x4 modelview : register(VC_WORLD_PROJ); +uniform float3x3 cubeTrans : register(VC_CUBE_TRANS); +uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS); +uniform float3 inLightVec : register(VC_LIGHT_DIR1); +uniform float3 eyePos : register(VC_EYE_POS); //----------------------------------------------------------------------------- // Main //----------------------------------------------------------------------------- -Conn main( VertexIn_PNTTTB In, - uniform float4x4 modelview : register(VC_WORLD_PROJ), - uniform float3x3 cubeTrans : register(VC_CUBE_TRANS), - uniform float3 cubeEyePos : register(VC_CUBE_EYE_POS), - uniform float3 inLightVec : register(VC_LIGHT_DIR1), - uniform float3 eyePos : register(VC_EYE_POS) -) +Conn main( VertexIn_PNTTTB In) { Conn Out; - Out.HPOS = mul(modelview, In.pos); + Out.HPOS = mul(modelview, float4(In.pos,1.0)); Out.TEX0 = In.uv0; From 41e5caf22b6332c96197e8a83c0ac2e279a1af4c Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sun, 20 Mar 2016 21:52:11 +1000 Subject: [PATCH 160/324] Direct3D11 Engine/source changes --- Engine/source/T3D/cameraSpline.cpp | 2 +- Engine/source/T3D/fx/precipitation.cpp | 2 +- Engine/source/T3D/fx/precipitation.h | 2 +- Engine/source/environment/VolumetricFog.cpp | 12 +- .../environment/VolumetricFogRTManager.cpp | 34 +-- .../environment/VolumetricFogRTManager.h | 1 - Engine/source/environment/scatterSky.cpp | 12 +- Engine/source/environment/sun.cpp | 10 +- Engine/source/environment/waterObject.cpp | 14 +- Engine/source/gfx/D3D9/gfxD3D9Device.cpp | 1 + Engine/source/gfx/D3D9/gfxD3D9Shader.cpp | 13 +- .../source/gfx/D3D9/gfxD3D9VertexBuffer.cpp | 3 +- .../gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp | 1 - Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp | 2 +- Engine/source/gfx/D3D9/screenshotD3D9.cpp | 2 +- Engine/source/gfx/D3D9/screenshotD3D9.h | 8 +- Engine/source/gfx/genericConstBuffer.h | 12 +- Engine/source/gfx/gfxAPI.cpp | 2 +- Engine/source/gfx/gfxDevice.cpp | 2 + Engine/source/gfx/gfxDrawUtil.cpp | 151 +++++++--- Engine/source/gfx/gfxEnums.h | 3 +- Engine/source/gfx/gfxInit.cpp | 47 +-- Engine/source/gfx/gfxShader.cpp | 15 +- Engine/source/gfx/gfxShader.h | 13 +- Engine/source/gfx/gfxStringEnumTranslate.cpp | 1 - Engine/source/gfx/gfxVertexFormat.cpp | 15 + Engine/source/gfx/gfxVertexFormat.h | 11 +- Engine/source/gfx/gl/gfxGLDevice.cpp | 13 +- Engine/source/gfx/gl/gfxGLEnumTranslate.cpp | 1 - Engine/source/gfx/gl/gfxGLShader.cpp | 12 +- Engine/source/gfx/primBuilder.cpp | 2 - Engine/source/gui/3d/guiTSControl.cpp | 2 +- .../source/gui/controls/guiGradientCtrl.cpp | 132 +++++---- .../gui/controls/guiTextEditSliderCtrl.cpp | 2 +- Engine/source/gui/editor/guiEditCtrl.h | 2 +- Engine/source/gui/editor/guiFilterCtrl.cpp | 2 +- Engine/source/gui/editor/guiGraphCtrl.cpp | 2 +- Engine/source/gui/worldEditor/editTSCtrl.cpp | 2 +- Engine/source/gui/worldEditor/gizmo.cpp | 6 +- .../gui/worldEditor/guiTerrPreviewCtrl.cpp | 24 +- .../source/gui/worldEditor/terrainEditor.cpp | 26 +- Engine/source/gui/worldEditor/terrainEditor.h | 2 +- Engine/source/gui/worldEditor/worldEditor.cpp | 4 +- .../advanced/advancedLightBinManager.cpp | 38 +-- .../glsl/deferredShadingFeaturesGLSL.cpp | 1 - .../advanced/glsl/gBufferConditionerGLSL.cpp | 2 +- .../hlsl/advancedLightingFeaturesHLSL.cpp | 131 +++++++-- .../hlsl/deferredShadingFeaturesHLSL.cpp | 29 +- .../advanced/hlsl/gBufferConditionerHLSL.cpp | 35 ++- Engine/source/lighting/common/blobShadow.cpp | 2 +- Engine/source/materials/miscShdrDat.h | 7 +- .../materials/processedShaderMaterial.cpp | 2 +- .../materials/processedShaderMaterial.h | 2 + Engine/source/materials/shaderData.cpp | 1 + .../platformWin32/videoInfo/wmiVideoInfo.cpp | 120 ++++---- .../platformWin32/videoInfo/wmiVideoInfo.h | 5 +- Engine/source/postFx/postEffect.cpp | 24 +- .../renderInstance/renderPrePassMgr.cpp | 1 - Engine/source/scene/reflectionManager.cpp | 14 +- Engine/source/scene/simPath.cpp | 4 +- Engine/source/scene/simPath.h | 2 +- .../source/shaderGen/HLSL/accuFeatureHLSL.cpp | 31 +- Engine/source/shaderGen/HLSL/bumpHLSL.cpp | 61 +++- .../source/shaderGen/HLSL/paraboloidHLSL.cpp | 10 +- .../source/shaderGen/HLSL/pixSpecularHLSL.cpp | 34 ++- .../source/shaderGen/HLSL/shaderCompHLSL.cpp | 108 +++---- Engine/source/shaderGen/HLSL/shaderCompHLSL.h | 2 + .../shaderGen/HLSL/shaderFeatureHLSL.cpp | 274 +++++++++++++++--- .../source/shaderGen/HLSL/shaderFeatureHLSL.h | 5 + .../source/shaderGen/HLSL/shaderGenHLSL.cpp | 36 ++- .../shaderGen/HLSL/shaderGenHLSLInit.cpp | 1 + Engine/source/shaderGen/langElement.cpp | 4 + Engine/source/shaderGen/langElement.h | 2 + Engine/source/shaderGen/shaderFeature.cpp | 5 + Engine/source/shaderGen/shaderFeature.h | 7 +- Engine/source/shaderGen/shaderGen.cpp | 7 +- .../source/terrain/glsl/terrFeatureGLSL.cpp | 4 - .../source/terrain/hlsl/terrFeatureHLSL.cpp | 254 +++++++++++++--- Engine/source/terrain/terrRender.cpp | 18 +- Engine/source/ts/tsMesh.cpp | 14 +- .../windowManager/win32/win32Window.cpp | 2 + 81 files changed, 1299 insertions(+), 625 deletions(-) diff --git a/Engine/source/T3D/cameraSpline.cpp b/Engine/source/T3D/cameraSpline.cpp index 1444150156..9b0f93d5bc 100644 --- a/Engine/source/T3D/cameraSpline.cpp +++ b/Engine/source/T3D/cameraSpline.cpp @@ -188,7 +188,7 @@ void CameraSpline::renderTimeMap() gBuilding = true; // Build vertex buffer - GFXVertexBufferHandle vb; + GFXVertexBufferHandle vb; vb.set(GFX, mTimeMap.size(), GFXBufferTypeVolatile); void *ptr = vb.lock(); if(!ptr) return; diff --git a/Engine/source/T3D/fx/precipitation.cpp b/Engine/source/T3D/fx/precipitation.cpp index d7067c0636..0cbcf7c7fc 100644 --- a/Engine/source/T3D/fx/precipitation.cpp +++ b/Engine/source/T3D/fx/precipitation.cpp @@ -1557,7 +1557,7 @@ void Precipitation::renderObject(ObjectRenderInst *ri, SceneRenderState *state, Point3F pos; VectorF orthoDir, velocity, right, up, rightUp(0.0f, 0.0f, 0.0f), leftUp(0.0f, 0.0f, 0.0f); F32 distance = 0; - GFXVertexPT* vertPtr = NULL; + GFXVertexPCT* vertPtr = NULL; const Point2F *tc; // Do this here and we won't have to in the loop! diff --git a/Engine/source/T3D/fx/precipitation.h b/Engine/source/T3D/fx/precipitation.h index 908d7005f5..80f76f2bb0 100644 --- a/Engine/source/T3D/fx/precipitation.h +++ b/Engine/source/T3D/fx/precipitation.h @@ -239,7 +239,7 @@ class Precipitation : public GameBase void destroySplash(Raindrop *drop); ///< Removes a drop from the splash list GFXPrimitiveBufferHandle mRainIB; - GFXVertexBufferHandle mRainVB; + GFXVertexBufferHandle mRainVB; bool onAdd(); void onRemove(); diff --git a/Engine/source/environment/VolumetricFog.cpp b/Engine/source/environment/VolumetricFog.cpp index e6be112dc5..9087effeed 100644 --- a/Engine/source/environment/VolumetricFog.cpp +++ b/Engine/source/environment/VolumetricFog.cpp @@ -317,8 +317,7 @@ void VolumetricFog::handleResize(VolumetricFogRTManager *RTM, bool resize) { F32 width = (F32)mPlatformWindow->getClientExtent().x; F32 height = (F32)mPlatformWindow->getClientExtent().y; - if (!mPlatformWindow->isFullscreen()) - height -= 20;//subtract caption bar from rendertarget size. + mTexScale.x = 2.0f - ((F32)mTexture.getWidth() / width); mTexScale.y = 2.0f - ((F32)mTexture.getHeight() / height); } @@ -1075,7 +1074,6 @@ void VolumetricFog::render(ObjectRenderInst *ri, SceneRenderState *state, BaseMa mPPShaderConsts->setSafe(mPPModelViewProjSC, xform); - LightInfo *lightinfo = LIGHTMGR->getSpecialLight(LightManager::slSunLightType); const ColorF &sunlight = state->getAmbientLightColor(); Point3F ambientColor(sunlight.red, sunlight.green, sunlight.blue); @@ -1160,6 +1158,11 @@ void VolumetricFog::render(ObjectRenderInst *ri, SceneRenderState *state, BaseMa GFX->setStateBlock(mStateblockF); GFX->drawPrimitive(0); + + // Ensure these two textures are bound to the pixel shader input on the second run as they are used as pixel shader outputs (render targets). + GFX->setTexture(1, NULL); //mDepthBuffer + GFX->setTexture(2, NULL); //mFrontBuffer + GFX->updateStates(); //update the dirty texture state we set above } void VolumetricFog::reflect_render(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat) @@ -1210,9 +1213,6 @@ void VolumetricFog::InitTexture() F32 width = (F32)mPlatformWindow->getClientExtent().x; F32 height = (F32)mPlatformWindow->getClientExtent().y; - if (!mPlatformWindow->isFullscreen()) - height -= 20;//subtract caption bar from rendertarget size. - mTexScale.x = 2.0f - ((F32)mTexture.getWidth() / width); mTexScale.y = 2.0f - ((F32)mTexture.getHeight() / height); } diff --git a/Engine/source/environment/VolumetricFogRTManager.cpp b/Engine/source/environment/VolumetricFogRTManager.cpp index 2a927cc090..8c98983b21 100644 --- a/Engine/source/environment/VolumetricFogRTManager.cpp +++ b/Engine/source/environment/VolumetricFogRTManager.cpp @@ -36,6 +36,7 @@ #include "windowManager/platformWindowMgr.h" #include "console/engineAPI.h" #include "gui/core/guiCanvas.h" +#include "gfx/gfxDevice.h" MODULE_BEGIN(VolumetricFogRTManager) @@ -127,10 +128,10 @@ void VolumetricFogRTManager::consoleInit() bool VolumetricFogRTManager::Init() { if (mIsInitialized) - { + { Con::errorf("VolumetricFogRTManager allready initialized!!"); return true; - } + } GuiCanvas* cv = dynamic_cast(Sim::findObject("Canvas")); if (cv == NULL) @@ -142,15 +143,11 @@ bool VolumetricFogRTManager::Init() mPlatformWindow = cv->getPlatformWindow(); mPlatformWindow->getScreenResChangeSignal().notify(this,&VolumetricFogRTManager::ResizeRT); - if (mTargetScale < 1) + if (mTargetScale < 1 || GFX->getAdapterType() == Direct3D11) mTargetScale = 1; mWidth = mFloor(mPlatformWindow->getClientExtent().x / mTargetScale); - mHeight = mPlatformWindow->getClientExtent().y; - mFullScreen = mPlatformWindow->isFullscreen(); - if (!mFullScreen) - mHeight -= 20;//subtract caption bar from rendertarget size. - mHeight = mFloor(mHeight / mTargetScale); + mHeight = mFloor(mPlatformWindow->getClientExtent().y / mTargetScale); mDepthBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, &GFXDefaultRenderTargetProfile, avar("%s() - mDepthBuffer (line %d)", __FUNCTION__, __LINE__)); @@ -221,14 +218,11 @@ void VolumetricFogRTManager::FogAnswered() bool VolumetricFogRTManager::Resize() { - if (mTargetScale < 1) + if (mTargetScale < 1 || GFX->getAdapterType() == Direct3D11) mTargetScale = 1; + mWidth = mFloor(mPlatformWindow->getClientExtent().x / mTargetScale); - mHeight = mPlatformWindow->getClientExtent().y; - - if (!mPlatformWindow->isFullscreen()) - mHeight -= 20;//subtract caption bar from rendertarget size. - mHeight = mFloor(mHeight / mTargetScale); + mHeight = mFloor(mPlatformWindow->getClientExtent().y / mTargetScale); if (mWidth < 16 || mHeight < 16) return false; @@ -248,19 +242,19 @@ bool VolumetricFogRTManager::Resize() mFrontBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, &GFXDefaultRenderTargetProfile, avar("%s() - mFrontBuffer (line %d)", __FUNCTION__, __LINE__)); if (!mFrontBuffer.isValid()) - { + { Con::errorf("VolumetricFogRTManager::Resize() Fatal Error: Unable to create front buffer"); return false; - } + } mFrontTarget.setTexture(mFrontBuffer); mDepthBuffer = GFXTexHandle(mWidth, mHeight, GFXFormatR32F, &GFXDefaultRenderTargetProfile, avar("%s() - mDepthBuffer (line %d)", __FUNCTION__, __LINE__)); if (!mDepthBuffer.isValid()) - { - Con::errorf("VolumetricFogRTManager::Resize() Fatal Error: Unable to create Depthbuffer"); - return false; - } + { + Con::errorf("VolumetricFogRTManager::Resize() Fatal Error: Unable to create Depthbuffer"); + return false; + } mDepthTarget.setTexture(mDepthBuffer); return true; } diff --git a/Engine/source/environment/VolumetricFogRTManager.h b/Engine/source/environment/VolumetricFogRTManager.h index d69bed6bd9..8000a4447b 100644 --- a/Engine/source/environment/VolumetricFogRTManager.h +++ b/Engine/source/environment/VolumetricFogRTManager.h @@ -62,7 +62,6 @@ class VolumetricFogRTManager : public SceneObject U32 mFogHasAnswered; U32 mWidth; U32 mHeight; - bool mFullScreen; void onRemove(); void onSceneRemove(); diff --git a/Engine/source/environment/scatterSky.cpp b/Engine/source/environment/scatterSky.cpp index dbdeef48b1..7607246f47 100644 --- a/Engine/source/environment/scatterSky.cpp +++ b/Engine/source/environment/scatterSky.cpp @@ -1067,17 +1067,17 @@ void ScatterSky::_renderMoon( ObjectRenderInst *ri, SceneRenderState *state, Bas // Initialize points with basic info Point3F points[4]; - points[0] = Point3F(-BBRadius, 0.0, -BBRadius); + points[0] = Point3F( -BBRadius, 0.0, -BBRadius); points[1] = Point3F( -BBRadius, 0.0, BBRadius); - points[2] = Point3F( BBRadius, 0.0, BBRadius); - points[3] = Point3F( BBRadius, 0.0, -BBRadius); + points[2] = Point3F( BBRadius, 0.0, -BBRadius); + points[3] = Point3F( BBRadius, 0.0, BBRadius); static const Point2F sCoords[4] = { Point2F( 0.0f, 0.0f ), Point2F( 0.0f, 1.0f ), - Point2F( 1.0f, 1.0f ), - Point2F( 1.0f, 0.0f ) + Point2F( 1.0f, 0.0f ), + Point2F( 1.0f, 1.0f ) }; // Get info we need to adjust points @@ -1126,7 +1126,7 @@ void ScatterSky::_renderMoon( ObjectRenderInst *ri, SceneRenderState *state, Bas mMoonMatInst->setSceneInfo( state, sgData ); GFX->setVertexBuffer( vb ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); } } diff --git a/Engine/source/environment/sun.cpp b/Engine/source/environment/sun.cpp index d79d923d61..729e3b57bc 100644 --- a/Engine/source/environment/sun.cpp +++ b/Engine/source/environment/sun.cpp @@ -467,15 +467,15 @@ void Sun::_renderCorona( ObjectRenderInst *ri, SceneRenderState *state, BaseMatI Point3F points[4]; points[0] = Point3F(-BBRadius, 0.0, -BBRadius); points[1] = Point3F( -BBRadius, 0.0, BBRadius); - points[2] = Point3F( BBRadius, 0.0, BBRadius); - points[3] = Point3F( BBRadius, 0.0, -BBRadius); + points[2] = Point3F( BBRadius, 0.0, -BBRadius); + points[3] = Point3F(BBRadius, 0.0, BBRadius); static const Point2F sCoords[4] = { Point2F( 0.0f, 0.0f ), Point2F( 0.0f, 1.0f ), - Point2F( 1.0f, 1.0f ), - Point2F( 1.0f, 0.0f ) + Point2F( 1.0f, 0.0f ), + Point2F(1.0f, 1.0f) }; // Get info we need to adjust points @@ -525,7 +525,7 @@ void Sun::_renderCorona( ObjectRenderInst *ri, SceneRenderState *state, BaseMatI mCoronaMatInst->setSceneInfo( state, sgData ); GFX->setVertexBuffer( vb ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); } } diff --git a/Engine/source/environment/waterObject.cpp b/Engine/source/environment/waterObject.cpp index 9b527e4c8d..1dab7ca746 100644 --- a/Engine/source/environment/waterObject.cpp +++ b/Engine/source/environment/waterObject.cpp @@ -826,25 +826,25 @@ void WaterObject::drawUnderwaterFilter( SceneRenderState *state ) // draw quad - GFXVertexBufferHandle verts( GFX, 4, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( GFX, 4, GFXBufferTypeVolatile ); verts.lock(); - verts[0].point.set( -1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0 ); + verts[0].point.set(1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0); verts[0].color = mUnderwaterColor; - verts[1].point.set( -1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0 ); + verts[1].point.set(1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0); verts[1].color = mUnderwaterColor; - verts[2].point.set( 1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0 ); + verts[2].point.set(-1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0); verts[2].color = mUnderwaterColor; - verts[3].point.set( 1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0 ); + verts[3].point.set(-1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0); verts[3].color = mUnderwaterColor; verts.unlock(); GFX->setVertexBuffer( verts ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); // reset states / transforms GFX->setProjectionMatrix( proj ); @@ -1141,7 +1141,7 @@ bool WaterObject::initMaterial( S32 idx ) else mat = MATMGR->createMatInstance( mSurfMatName[idx] ); - const GFXVertexFormat *flags = getGFXVertexFormat(); + const GFXVertexFormat *flags = getGFXVertexFormat(); if ( mat && mat->init( MATMGR->getDefaultFeatures(), flags ) ) { diff --git a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp index d3eb8ed8a6..c6610ed14a 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp @@ -826,6 +826,7 @@ GFXVertexBuffer * GFXD3D9Device::allocVertexBuffer( U32 numVerts, switch(bufferType) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: pool = isD3D9Ex() ? D3DPOOL_DEFAULT : D3DPOOL_MANAGED; break; diff --git a/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp b/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp index 2af7a9abd3..6577973190 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9Shader.cpp @@ -1307,10 +1307,15 @@ void GFXD3D9Shader::_buildSamplerShaderConstantHandles( VectorgetElementCount(); i++ ) { - const GFXVertexElement &element = mInstancingFormat.getElement( i ); + const GFXVertexElement &element = mInstancingFormat->getElement( i ); String constName = String::ToString( "$%s", element.getSemantic().c_str() ); @@ -1347,9 +1352,9 @@ void GFXD3D9Shader::_buildInstancingShaderConstantHandles() // If this is a matrix we will have 2 or 3 more of these // semantics with the same name after it. - for ( ; i < mInstancingFormat.getElementCount(); i++ ) + for ( ; i < mInstancingFormat->getElementCount(); i++ ) { - const GFXVertexElement &nextElement = mInstancingFormat.getElement( i ); + const GFXVertexElement &nextElement = mInstancingFormat->getElement( i ); if ( nextElement.getSemantic() != element.getSemantic() ) { i--; diff --git a/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp b/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp index d31e938700..0da7a38953 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9VertexBuffer.cpp @@ -55,6 +55,7 @@ void GFXD3D9VertexBuffer::lock(U32 vertexStart, U32 vertexEnd, void **vertexPtr) switch( mBufferType ) { + case GFXBufferTypeImmutable: case GFXBufferTypeStatic: break; @@ -203,7 +204,7 @@ void GFXD3D9VertexBuffer::zombify() { AssertFatal(lockedVertexStart == 0 && lockedVertexEnd == 0, "GFXD3D9VertexBuffer::zombify - Cannot zombify a locked buffer!"); // Static buffers are managed by D3D9 so we don't deal with them. - if(mBufferType == GFXBufferTypeDynamic) + if(mBufferType == GFXBufferTypeDynamic || mBufferType == GFXBufferTypeImmutable) { SAFE_RELEASE(vb); } diff --git a/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp b/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp index 29063f4e43..77ea67041d 100644 --- a/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp @@ -302,7 +302,6 @@ void GFXD3D9EnumTranslate::init() GFXD3D9PrimType[GFXLineStrip] = D3DPT_LINESTRIP; GFXD3D9PrimType[GFXTriangleList] = D3DPT_TRIANGLELIST; GFXD3D9PrimType[GFXTriangleStrip] = D3DPT_TRIANGLESTRIP; - GFXD3D9PrimType[GFXTriangleFan] = D3DPT_TRIANGLEFAN; VALIDATE_LOOKUPTABLE( GFXD3D9PrimType, GFXPT ); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ diff --git a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp index 3dfcfe1d4f..d113bf70b8 100644 --- a/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxPCD3D9Device.cpp @@ -514,7 +514,7 @@ void GFXPCD3D9Device::init( const GFXVideoMode &mode, PlatformWindow *window /* mCardProfiler = new GFXD3D9CardProfiler(mAdapterIndex); mCardProfiler->init(); - gScreenShot = new ScreenShotD3D; + gScreenShot = new ScreenShotD3D9; // Set the video capture frame grabber. mVideoFrameGrabber = new VideoFrameGrabberD3D9(); diff --git a/Engine/source/gfx/D3D9/screenshotD3D9.cpp b/Engine/source/gfx/D3D9/screenshotD3D9.cpp index b6b5e05009..c7d3ff3cbe 100644 --- a/Engine/source/gfx/D3D9/screenshotD3D9.cpp +++ b/Engine/source/gfx/D3D9/screenshotD3D9.cpp @@ -30,7 +30,7 @@ #include -GBitmap* ScreenShotD3D::_captureBackBuffer() +GBitmap* ScreenShotD3D9::_captureBackBuffer() { #ifdef TORQUE_OS_XENON return NULL; diff --git a/Engine/source/gfx/D3D9/screenshotD3D9.h b/Engine/source/gfx/D3D9/screenshotD3D9.h index d017591d62..023fa15627 100644 --- a/Engine/source/gfx/D3D9/screenshotD3D9.h +++ b/Engine/source/gfx/D3D9/screenshotD3D9.h @@ -19,15 +19,15 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#ifndef _SCREENSHOTD3D_H_ -#define _SCREENSHOTD3D_H_ +#ifndef _SCREENSHOTD3D9_H_ +#define _SCREENSHOTD3D9_H_ #include "gfx/screenshot.h" //************************************************************************** // D3D implementation of screenshot //************************************************************************** -class ScreenShotD3D : public ScreenShot +class ScreenShotD3D9 : public ScreenShot { protected: @@ -36,4 +36,4 @@ class ScreenShotD3D : public ScreenShot }; -#endif // _SCREENSHOTD3D_H_ +#endif // _SCREENSHOTD3D9_H_ diff --git a/Engine/source/gfx/genericConstBuffer.h b/Engine/source/gfx/genericConstBuffer.h index b8a012159e..c38947541e 100644 --- a/Engine/source/gfx/genericConstBuffer.h +++ b/Engine/source/gfx/genericConstBuffer.h @@ -106,7 +106,7 @@ class GenericConstBufferLayout virtual ~GenericConstBufferLayout() {} /// Add a parameter to the buffer - void addParameter(const String& name, const GFXShaderConstType constType, const U32 offset, const U32 size, const U32 arraySize, const U32 alignValue); + virtual void addParameter(const String& name, const GFXShaderConstType constType, const U32 offset, const U32 size, const U32 arraySize, const U32 alignValue); /// Get the size of the buffer inline U32 getBufferSize() const { return mBufferSize; } @@ -210,6 +210,9 @@ class GenericConstBuffer /// state at the same time. inline const U8* getDirtyBuffer( U32 *start, U32 *size ); + /// Gets the entire buffer ignoring dirty range + inline const U8* getEntireBuffer(); + /// Sets the entire buffer as dirty or clears the dirty state. inline void setDirty( bool dirty ); @@ -348,6 +351,13 @@ inline const U8* GenericConstBuffer::getDirtyBuffer( U32 *start, U32 *size ) return buffer; } +inline const U8* GenericConstBuffer::getEntireBuffer() +{ + AssertFatal(mBuffer, "GenericConstBuffer::getDirtyBuffer() - Buffer is empty!"); + + return mBuffer; +} + inline bool GenericConstBuffer::isEqual( const GenericConstBuffer *buffer ) const { U32 bsize = mLayout->getBufferSize(); diff --git a/Engine/source/gfx/gfxAPI.cpp b/Engine/source/gfx/gfxAPI.cpp index 91a9974df3..b41b1297ba 100644 --- a/Engine/source/gfx/gfxAPI.cpp +++ b/Engine/source/gfx/gfxAPI.cpp @@ -41,7 +41,7 @@ ImplementEnumType( GFXAdapterType, "Back-end graphics API used by the GFX subsystem.\n\n" "@ingroup GFX" ) { OpenGL, "OpenGL", "OpenGL." }, - { Direct3D8, "D3D8", "Direct3D 8." }, + { Direct3D11, "D3D11", "Direct3D 11." }, { Direct3D9, "D3D9", "Direct3D 9." }, { NullDevice, "NullDevice", "Null device for dedicated servers." }, { Direct3D9_360, "Xenon", "Direct3D 9 on Xbox 360." } diff --git a/Engine/source/gfx/gfxDevice.cpp b/Engine/source/gfx/gfxDevice.cpp index 3f63fb884a..5158f2992f 100644 --- a/Engine/source/gfx/gfxDevice.cpp +++ b/Engine/source/gfx/gfxDevice.cpp @@ -514,6 +514,8 @@ void GFXDevice::updateStates(bool forceSetAll /*=false*/) mStateBlockDirty = false; } + _updateRenderTargets(); + if( mTexturesDirty ) { mTexturesDirty = false; diff --git a/Engine/source/gfx/gfxDrawUtil.cpp b/Engine/source/gfx/gfxDrawUtil.cpp index 34b1c88722..3adbfb7b7b 100644 --- a/Engine/source/gfx/gfxDrawUtil.cpp +++ b/Engine/source/gfx/gfxDrawUtil.cpp @@ -458,7 +458,7 @@ void GFXDrawUtil::drawRect( const Point2F &upperLeft, const Point2F &lowerRight, Point2F nw(-0.5f,-0.5f); /* \ */ Point2F ne(0.5f,-0.5f); /* / */ - GFXVertexBufferHandle verts (mDevice, 10, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts (mDevice, 10, GFXBufferTypeVolatile ); verts.lock(); F32 ulOffset = 0.5f - mDevice->getFillConventionOffset(); @@ -521,12 +521,12 @@ void GFXDrawUtil::drawRectFill( const Point2F &upperLeft, const Point2F &lowerRi Point2F nw(-0.5,-0.5); /* \ */ Point2F ne(0.5,-0.5); /* / */ - GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); verts.lock(); F32 ulOffset = 0.5f - mDevice->getFillConventionOffset(); - verts[0].point.set( upperLeft.x + nw.x + ulOffset, upperLeft.y + nw.y + ulOffset, 0.0f); + verts[0].point.set( upperLeft.x+nw.x + ulOffset, upperLeft.y+nw.y + ulOffset, 0.0f ); verts[1].point.set( lowerRight.x + ne.x + ulOffset, upperLeft.y + ne.y + ulOffset, 0.0f); verts[2].point.set( upperLeft.x - ne.x + ulOffset, lowerRight.y - ne.y + ulOffset, 0.0f); verts[3].point.set( lowerRight.x - nw.x + ulOffset, lowerRight.y - nw.y + ulOffset, 0.0f); @@ -548,7 +548,7 @@ void GFXDrawUtil::draw2DSquare( const Point2F &screenPoint, F32 width, F32 spinA Point3F offset( screenPoint.x, screenPoint.y, 0.0 ); - GFXVertexBufferHandle verts( mDevice, 4, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, 4, GFXBufferTypeVolatile ); verts.lock(); verts[0].point.set( -width, -width, 0.0f ); @@ -608,7 +608,7 @@ void GFXDrawUtil::drawLine( F32 x1, F32 y1, F32 x2, F32 y2, const ColorI &color void GFXDrawUtil::drawLine( F32 x1, F32 y1, F32 z1, F32 x2, F32 y2, F32 z2, const ColorI &color ) { - GFXVertexBufferHandle verts( mDevice, 2, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, 2, GFXBufferTypeVolatile ); verts.lock(); verts[0].point.set( x1, y1, z1 ); @@ -647,7 +647,7 @@ void GFXDrawUtil::drawSphere( const GFXStateBlockDesc &desc, F32 radius, const P const SphereMesh::TriangleMesh * sphereMesh = gSphere.getMesh(2); S32 numPoly = sphereMesh->numPoly; S32 totalPoly = 0; - GFXVertexBufferHandle verts(mDevice, numPoly*3, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoly*3, GFXBufferTypeVolatile); verts.lock(); S32 vertexIndex = 0; for (S32 i=0; i verts(mDevice, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); verts.lock(); // Set up the line strip @@ -745,7 +745,7 @@ void GFXDrawUtil::_drawWireTriangle( const GFXStateBlockDesc &desc, const Point3 void GFXDrawUtil::_drawSolidTriangle( const GFXStateBlockDesc &desc, const Point3F &p0, const Point3F &p1, const Point3F &p2, const ColorI &color, const MatrixF *xfm ) { - GFXVertexBufferHandle verts(mDevice, 3, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 3, GFXBufferTypeVolatile); verts.lock(); // Set up the line strip @@ -778,7 +778,7 @@ void GFXDrawUtil::drawPolygon( const GFXStateBlockDesc& desc, const Point3F* poi { const bool isWireframe = ( desc.fillMode == GFXFillWireframe ); const U32 numVerts = isWireframe ? numPoints + 1 : numPoints; - GFXVertexBufferHandle< GFXVertexPC > verts( mDevice, numVerts, GFXBufferTypeVolatile ); + GFXVertexBufferHandle< GFXVertexPCT > verts( mDevice, numVerts, GFXBufferTypeVolatile ); verts.lock(); for( U32 i = 0; i < numPoints; ++ i ) @@ -809,7 +809,7 @@ void GFXDrawUtil::drawPolygon( const GFXStateBlockDesc& desc, const Point3F* poi if( desc.fillMode == GFXFillWireframe ) mDevice->drawPrimitive( GFXLineStrip, 0, numPoints ); else - mDevice->drawPrimitive( GFXTriangleFan, 0, numPoints - 2 ); + mDevice->drawPrimitive( GFXTriangleStrip, 0, numPoints - 2 ); } void GFXDrawUtil::drawCube( const GFXStateBlockDesc &desc, const Box3F &box, const ColorI &color, const MatrixF *xfm ) @@ -827,7 +827,7 @@ void GFXDrawUtil::drawCube( const GFXStateBlockDesc &desc, const Point3F &size, void GFXDrawUtil::_drawWireCube( const GFXStateBlockDesc &desc, const Point3F &size, const Point3F &pos, const ColorI &color, const MatrixF *xfm ) { - GFXVertexBufferHandle verts(mDevice, 30, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 30, GFXBufferTypeVolatile); verts.lock(); Point3F halfSize = size * 0.5f; @@ -870,7 +870,7 @@ void GFXDrawUtil::_drawWireCube( const GFXStateBlockDesc &desc, const Point3F &s void GFXDrawUtil::_drawSolidCube( const GFXStateBlockDesc &desc, const Point3F &size, const Point3F &pos, const ColorI &color, const MatrixF *xfm ) { - GFXVertexBufferHandle verts(mDevice, 36, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 36, GFXBufferTypeVolatile); verts.lock(); Point3F halfSize = size * 0.5f; @@ -950,7 +950,7 @@ void GFXDrawUtil::_drawWirePolyhedron( const GFXStateBlockDesc &desc, const AnyP // Allocate a temporary vertex buffer. - GFXVertexBufferHandle< GFXVertexPC > verts( mDevice, numEdges * 2, GFXBufferTypeVolatile); + GFXVertexBufferHandle< GFXVertexPCT > verts( mDevice, numEdges * 2, GFXBufferTypeVolatile); // Fill it with the vertices for the edges. @@ -997,7 +997,7 @@ void GFXDrawUtil::_drawSolidPolyhedron( const GFXStateBlockDesc &desc, const Any // Create a temp buffer for the vertices and // put all the polyhedron's points in there. - GFXVertexBufferHandle< GFXVertexPC > verts( mDevice, numPoints, GFXBufferTypeVolatile ); + GFXVertexBufferHandle< GFXVertexPCT > verts( mDevice, numPoints, GFXBufferTypeVolatile ); verts.lock(); for( U32 i = 0; i < numPoints; ++ i ) @@ -1071,7 +1071,7 @@ void GFXDrawUtil::_drawSolidPolyhedron( const GFXStateBlockDesc &desc, const Any for( U32 i = 0; i < numPolys; ++ i ) { U32 numVerts = numIndicesForPoly[ i ]; - mDevice->drawIndexedPrimitive( GFXTriangleFan, 0, 0, numPoints, startIndex, numVerts - 2 ); + mDevice->drawIndexedPrimitive( GFXTriangleStrip, 0, 0, numPoints, startIndex, numVerts - 2 ); startIndex += numVerts; } } @@ -1119,7 +1119,7 @@ void GFXDrawUtil::drawObjectBox( const GFXStateBlockDesc &desc, const Point3F &s PrimBuild::end(); } -static const Point2F circlePoints[] = +static const Point2F circlePoints[] = { Point2F(0.707107f, 0.707107f), Point2F(0.923880f, 0.382683f), @@ -1156,7 +1156,7 @@ void GFXDrawUtil::_drawSolidCapsule( const GFXStateBlockDesc &desc, const Point3 mat = MatrixF::Identity; S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints * 2 + 2, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoints * 2 + 2, GFXBufferTypeVolatile); verts.lock(); for (S32 i=0; imultWorld(mat); S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoints, GFXBufferTypeVolatile); verts.lock(); for (S32 i=0; i< numPoints; i++) { @@ -1268,27 +1268,57 @@ void GFXDrawUtil::drawCone( const GFXStateBlockDesc &desc, const Point3F &basePn mDevice->multWorld(mat); S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints + 2, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, numPoints * 3 + 2, GFXBufferTypeVolatile); verts.lock(); - verts[0].point = Point3F(0.0f,0.0f,1.0f); - verts[0].color = color; - for (S32 i=0; isetStateBlockByDesc( desc ); mDevice->setVertexBuffer( verts ); - mDevice->setupGenericShaders( GFXDevice::GSModColorTexture ); + mDevice->setupGenericShaders(); - mDevice->drawPrimitive( GFXTriangleFan, 0, numPoints ); - mDevice->drawPrimitive( GFXTriangleFan, 1, numPoints-1 ); + mDevice->drawPrimitive(GFXTriangleStrip, 0, numPoints - 2); + mDevice->drawPrimitive(GFXTriangleStrip, numPoints, numPoints * 2); mDevice->popWorldMatrix(); + } void GFXDrawUtil::drawCylinder( const GFXStateBlockDesc &desc, const Point3F &basePnt, const Point3F &tipPnt, F32 radius, const ColorI &color ) @@ -1307,32 +1337,59 @@ void GFXDrawUtil::drawCylinder( const GFXStateBlockDesc &desc, const Point3F &ba mDevice->pushWorldMatrix(); mDevice->multWorld(mat); - S32 numPoints = sizeof(circlePoints)/sizeof(Point2F); - GFXVertexBufferHandle verts(mDevice, numPoints * 4 + 4, GFXBufferTypeVolatile); + S32 numPoints = sizeof(circlePoints) / sizeof(Point2F); + GFXVertexBufferHandle verts(mDevice, numPoints *4 + 2, GFXBufferTypeVolatile); verts.lock(); - for (S32 i=0; isetStateBlockByDesc( desc ); mDevice->setVertexBuffer( verts ); - mDevice->setupGenericShaders( GFXDevice::GSModColorTexture ); + mDevice->setupGenericShaders(); - mDevice->drawPrimitive( GFXTriangleFan, 0, numPoints ); - mDevice->drawPrimitive( GFXTriangleFan, numPoints + 1, numPoints ); - mDevice->drawPrimitive( GFXTriangleStrip, 2 * numPoints + 2, 2 * numPoints); + mDevice->drawPrimitive( GFXTriangleStrip, 0, numPoints-2 ); + mDevice->drawPrimitive( GFXTriangleStrip, numPoints, numPoints - 2); + mDevice->drawPrimitive( GFXTriangleStrip, numPoints*2, numPoints * 2); mDevice->popWorldMatrix(); } @@ -1393,7 +1450,7 @@ void GFXDrawUtil::drawFrustum( const Frustum &f, const ColorI &color ) void GFXDrawUtil::drawSolidPlane( const GFXStateBlockDesc &desc, const Point3F &pos, const Point2F &size, const ColorI &color ) { - GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(mDevice, 4, GFXBufferTypeVolatile); verts.lock(); verts[0].point = pos + Point3F( -size.x / 2.0f, -size.y / 2.0f, 0 ); @@ -1412,7 +1469,7 @@ void GFXDrawUtil::drawSolidPlane( const GFXStateBlockDesc &desc, const Point3F & mDevice->setVertexBuffer( verts ); mDevice->setupGenericShaders(); - mDevice->drawPrimitive( GFXTriangleFan, 0, 2 ); + mDevice->drawPrimitive( GFXTriangleStrip, 0, 2 ); } void GFXDrawUtil::drawPlaneGrid( const GFXStateBlockDesc &desc, const Point3F &pos, const Point2F &size, const Point2F &step, const ColorI &color, Plane plane ) @@ -1449,7 +1506,7 @@ void GFXDrawUtil::drawPlaneGrid( const GFXStateBlockDesc &desc, const Point3F &p break; } - GFXVertexBufferHandle verts( mDevice, numVertices, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, numVertices, GFXBufferTypeVolatile ); verts.lock(); U32 vertCount = 0; @@ -1541,7 +1598,7 @@ void GFXDrawUtil::drawTransform( const GFXStateBlockDesc &desc, const MatrixF &m GFX->multWorld( mat ); - GFXVertexBufferHandle verts( mDevice, 6, GFXBufferTypeVolatile ); + GFXVertexBufferHandle verts( mDevice, 6, GFXBufferTypeVolatile ); verts.lock(); const static ColorI defColors[3] = diff --git a/Engine/source/gfx/gfxEnums.h b/Engine/source/gfx/gfxEnums.h index e0c560ac86..0e38781540 100644 --- a/Engine/source/gfx/gfxEnums.h +++ b/Engine/source/gfx/gfxEnums.h @@ -68,7 +68,6 @@ enum GFXPrimitiveType GFXLineStrip, GFXTriangleList, GFXTriangleStrip, - GFXTriangleFan, GFXPT_COUNT }; @@ -277,8 +276,8 @@ enum GFXBlend enum GFXAdapterType { OpenGL = 0, + Direct3D11, Direct3D9, - Direct3D8, NullDevice, Direct3D9_360, GFXAdapterType_Count diff --git a/Engine/source/gfx/gfxInit.cpp b/Engine/source/gfx/gfxInit.cpp index 3b0ef44e15..09d503d10e 100644 --- a/Engine/source/gfx/gfxInit.cpp +++ b/Engine/source/gfx/gfxInit.cpp @@ -77,8 +77,8 @@ inline static void _GFXInitReportAdapters(Vector &adapters) case NullDevice: Con::printf(" Null device found"); break; - case Direct3D8: - Con::printf(" Direct 3D (version 8.1) device found"); + case Direct3D11: + Con::printf(" Direct 3D (version 11.x) device found"); break; default : Con::printf(" Unknown device found"); @@ -221,7 +221,8 @@ GFXAdapter* GFXInit::chooseAdapter( GFXAdapterType type, const char* outputDevic const char* GFXInit::getAdapterNameFromType(GFXAdapterType type) { - static const char* _names[] = { "OpenGL", "D3D9", "D3D8", "NullDevice", "Xenon" }; + // must match GFXAdapterType order + static const char* _names[] = { "OpenGL", "D3D11", "D3D9", "NullDevice", "Xenon" }; if( type < 0 || type >= GFXAdapterType_Count ) { @@ -268,51 +269,53 @@ GFXAdapter *GFXInit::getBestAdapterChoice() // // If D3D is unavailable, we're not on windows, so GL is de facto the // best choice! - F32 highestSM9 = 0.f, highestSMGL = 0.f; - GFXAdapter *foundAdapter8 = NULL, *foundAdapter9 = NULL, - *foundAdapterGL = NULL; + F32 highestSMDX = 0.f, highestSMGL = 0.f; + GFXAdapter *foundAdapter9 = NULL, *foundAdapterGL = NULL, *foundAdapter11 = NULL; - for(S32 i=0; imType) + switch (currAdapter->mType) { + case Direct3D11: + if (currAdapter->mShaderModel > highestSMDX) + { + highestSMDX = currAdapter->mShaderModel; + foundAdapter11 = currAdapter; + } + break; + case Direct3D9: - if(currAdapter->mShaderModel > highestSM9) + if (currAdapter->mShaderModel > highestSMDX) { - highestSM9 = currAdapter->mShaderModel; + highestSMDX = currAdapter->mShaderModel; foundAdapter9 = currAdapter; } break; case OpenGL: - if(currAdapter->mShaderModel > highestSMGL) + if (currAdapter->mShaderModel > highestSMGL) { highestSMGL = currAdapter->mShaderModel; foundAdapterGL = currAdapter; } break; - case Direct3D8: - if(!foundAdapter8) - foundAdapter8 = currAdapter; - break; - default: break; } } - // Return best found in order DX9, GL, DX8. - if(foundAdapter9) + // Return best found in order DX11,DX9, GL + if (foundAdapter11) + return foundAdapter11; + + if (foundAdapter9) return foundAdapter9; - if(foundAdapterGL) + if (foundAdapterGL) return foundAdapterGL; - if(foundAdapter8) - return foundAdapter8; - // Uh oh - we didn't find anything. Grab whatever we can that's not Null... for(S32 i=0; imType != NullDevice) diff --git a/Engine/source/gfx/gfxShader.cpp b/Engine/source/gfx/gfxShader.cpp index 5e81d8a109..54f1893e63 100644 --- a/Engine/source/gfx/gfxShader.cpp +++ b/Engine/source/gfx/gfxShader.cpp @@ -35,7 +35,8 @@ bool GFXShader::smLogWarnings = true; GFXShader::GFXShader() : mPixVersion( 0.0f ), - mReloadKey( 0 ) + mReloadKey( 0 ), + mInstancingFormat( NULL ) { } @@ -43,6 +44,8 @@ GFXShader::~GFXShader() { Torque::FS::RemoveChangeNotification( mVertexFile, this, &GFXShader::_onFileChanged ); Torque::FS::RemoveChangeNotification( mPixelFile, this, &GFXShader::_onFileChanged ); + + SAFE_DELETE(mInstancingFormat); } #ifndef TORQUE_OPENGL @@ -60,8 +63,16 @@ bool GFXShader::init( const Torque::Path &vertFile, const Torque::Path &pixFile, F32 pixVersion, const Vector ¯os, - const Vector &samplerNames) + const Vector &samplerNames, + GFXVertexFormat *instanceFormat) { + // Take care of instancing + if (instanceFormat) + { + mInstancingFormat = new GFXVertexFormat; + mInstancingFormat->copy(*instanceFormat); + } + // Store the inputs for use in reloading. mVertexFile = vertFile; mPixelFile = pixFile; diff --git a/Engine/source/gfx/gfxShader.h b/Engine/source/gfx/gfxShader.h index 318ab5ec0d..f9059fbc08 100644 --- a/Engine/source/gfx/gfxShader.h +++ b/Engine/source/gfx/gfxShader.h @@ -262,13 +262,12 @@ class GFXShader : public StrongRefBase, public GFXResource /// their destructor. Vector mActiveBuffers; + GFXVertexFormat *mInstancingFormat; + /// A protected constructor so it cannot be instantiated. GFXShader(); -public: - - // TODO: Add this into init(). - GFXVertexFormat mInstancingFormat; +public: /// Adds a global shader macro which will be merged with /// the script defined macros on every shader reload. @@ -312,7 +311,8 @@ class GFXShader : public StrongRefBase, public GFXResource const Torque::Path &pixFile, F32 pixVersion, const Vector ¯os, - const Vector &samplerNames); + const Vector &samplerNames, + GFXVertexFormat *instanceFormat = NULL ); /// Reloads the shader from disk. bool reload(); @@ -358,6 +358,9 @@ class GFXShader : public StrongRefBase, public GFXResource // GFXResource const String describeSelf() const { return mDescription; } + // Get instancing vertex format + GFXVertexFormat *getInstancingFormat() { return mInstancingFormat; } + protected: /// Called when the shader files change on disk. diff --git a/Engine/source/gfx/gfxStringEnumTranslate.cpp b/Engine/source/gfx/gfxStringEnumTranslate.cpp index 38fe29c7a3..c564fbb292 100644 --- a/Engine/source/gfx/gfxStringEnumTranslate.cpp +++ b/Engine/source/gfx/gfxStringEnumTranslate.cpp @@ -347,7 +347,6 @@ void GFXStringEnumTranslate::init() GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXLineStrip ); GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXTriangleList ); GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXTriangleStrip ); - GFX_STRING_ASSIGN_MACRO( GFXStringPrimType, GFXTriangleFan ); VALIDATE_LOOKUPTABLE( GFXStringPrimType, GFXPT ); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ diff --git a/Engine/source/gfx/gfxVertexFormat.cpp b/Engine/source/gfx/gfxVertexFormat.cpp index fe1a2cf460..15f16a4d4e 100644 --- a/Engine/source/gfx/gfxVertexFormat.cpp +++ b/Engine/source/gfx/gfxVertexFormat.cpp @@ -70,6 +70,7 @@ GFXVertexFormat::GFXVertexFormat() mHasColor( false ), mHasNormal( false ), mHasTangent( false ), + mHasInstancing( false ), mTexCoordCount( 0 ), mSizeInBytes( 0 ), mDecl( NULL ) @@ -83,6 +84,7 @@ void GFXVertexFormat::copy( const GFXVertexFormat &format ) mHasNormal = format.mHasNormal; mHasTangent = format.mHasTangent; mHasColor = format.mHasColor; + mHasInstancing = format.mHasInstancing; mTexCoordCount = format.mTexCoordCount; mSizeInBytes = format.mSizeInBytes; mDescription = format.mDescription; @@ -161,6 +163,14 @@ bool GFXVertexFormat::hasColor() const return mHasColor; } +bool GFXVertexFormat::hasInstancing() const +{ + if (mDirty) + const_cast(this)->_updateDirty(); + + return mHasInstancing; +} + U32 GFXVertexFormat::getTexCoordCount() const { if ( mDirty ) @@ -177,6 +187,11 @@ U32 GFXVertexFormat::getSizeInBytes() const return mSizeInBytes; } +void GFXVertexFormat::enableInstancing() +{ + mHasInstancing = true; +} + void GFXVertexFormat::_updateDirty() { PROFILE_SCOPE( GFXVertexFormat_updateDirty ); diff --git a/Engine/source/gfx/gfxVertexFormat.h b/Engine/source/gfx/gfxVertexFormat.h index 0f32e085e9..09934e0dfc 100644 --- a/Engine/source/gfx/gfxVertexFormat.h +++ b/Engine/source/gfx/gfxVertexFormat.h @@ -153,6 +153,9 @@ class GFXVertexFormat /// The copy constructor. GFXVertexFormat( const GFXVertexFormat &format ) { copy( format ); } + /// Tell this format it has instancing + void enableInstancing(); + /// Copy the other vertex format. void copy( const GFXVertexFormat &format ); @@ -163,7 +166,7 @@ class GFXVertexFormat const String& getDescription() const; /// Clears all the vertex elements. - void clear(); + void clear(); /// Adds a vertex element to the format. /// @@ -182,6 +185,9 @@ class GFXVertexFormat /// Returns true if there is a COLOR semantic in this vertex format. bool hasColor() const; + /// Return true if instancing is used with this vertex format. + bool hasInstancing() const; + /// Returns the texture coordinate count by /// counting the number of TEXCOORD semantics. U32 getTexCoordCount() const; @@ -225,6 +231,9 @@ class GFXVertexFormat /// Is true if there is a COLOR semantic in this vertex format. bool mHasColor; + /// Is instaning used with this vertex format. + bool mHasInstancing; + /// The texture coordinate count by counting the /// number of "TEXCOORD" semantics. U32 mTexCoordCount; diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 01bbd02ea4..8d3b8e93ab 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -513,9 +513,6 @@ inline GLsizei GFXGLDevice::primCountToIndexCount(GFXPrimitiveType primType, U32 case GFXTriangleStrip : return 2 + primitiveCount; break; - case GFXTriangleFan : - return 2 + primitiveCount; - break; default: AssertFatal(false, "GFXGLDevice::primCountToIndexCount - unrecognized prim type"); break; @@ -789,7 +786,8 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) shaderData->registerObject(); mGenericShader[GSColor] = shaderData->getShader(); mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer(); - mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle( "$modelView" ); + mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/modColorTextureV.glsl"); @@ -799,7 +797,8 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) shaderData->registerObject(); mGenericShader[GSModColorTexture] = shaderData->getShader(); mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer(); - mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle( "$modelView" ); + mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/addColorTextureV.glsl"); @@ -809,7 +808,8 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) shaderData->registerObject(); mGenericShader[GSAddColorTexture] = shaderData->getShader(); mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer(); - mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle( "$modelView" ); + mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/textureV.glsl"); @@ -820,6 +820,7 @@ void GFXGLDevice::setupGenericShaders( GenericShaderType type ) mGenericShader[GSTexture] = shaderData->getShader(); mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer(); mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle( "$modelView" ); + Sim::getRootGroup()->addObject(shaderData); } MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize]; diff --git a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp index e78d807c19..7955590e1d 100644 --- a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp +++ b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp @@ -53,7 +53,6 @@ void GFXGLEnumTranslate::init() GFXGLPrimType[GFXLineStrip] = GL_LINE_STRIP; GFXGLPrimType[GFXTriangleList] = GL_TRIANGLES; GFXGLPrimType[GFXTriangleStrip] = GL_TRIANGLE_STRIP; - GFXGLPrimType[GFXTriangleFan] = GL_TRIANGLE_FAN; // Blend GFXGLBlend[GFXBlendZero] = GL_ZERO; diff --git a/Engine/source/gfx/gl/gfxGLShader.cpp b/Engine/source/gfx/gl/gfxGLShader.cpp index 8de562d9d2..2e63c61fea 100644 --- a/Engine/source/gfx/gl/gfxGLShader.cpp +++ b/Engine/source/gfx/gl/gfxGLShader.cpp @@ -664,10 +664,14 @@ void GFXGLShader::initHandles() glUseProgram(0); //instancing + if (!mInstancingFormat) + return; + U32 offset = 0; - for ( U32 i=0; i < mInstancingFormat.getElementCount(); i++ ) + + for ( U32 i=0; i < mInstancingFormat->getElementCount(); i++ ) { - const GFXVertexElement &element = mInstancingFormat.getElement( i ); + const GFXVertexElement &element = mInstancingFormat->getElement( i ); String constName = String::ToString( "$%s", element.getSemantic().c_str() ); @@ -702,9 +706,9 @@ void GFXGLShader::initHandles() // If this is a matrix we will have 2 or 3 more of these // semantics with the same name after it. - for ( ; i < mInstancingFormat.getElementCount(); i++ ) + for ( ; i < mInstancingFormat->getElementCount(); i++ ) { - const GFXVertexElement &nextElement = mInstancingFormat.getElement( i ); + const GFXVertexElement &nextElement = mInstancingFormat->getElement( i ); if ( nextElement.getSemantic() != element.getSemantic() ) { i--; diff --git a/Engine/source/gfx/primBuilder.cpp b/Engine/source/gfx/primBuilder.cpp index af33d3a41a..0c661a8e8d 100644 --- a/Engine/source/gfx/primBuilder.cpp +++ b/Engine/source/gfx/primBuilder.cpp @@ -117,7 +117,6 @@ GFXVertexBuffer * endToBuffer( U32 &numPrims ) } case GFXTriangleStrip: - case GFXTriangleFan: { numPrims = mCurVertIndex - 2; break; @@ -171,7 +170,6 @@ void end( bool useGenericShaders ) } case GFXTriangleStrip: - case GFXTriangleFan: { stripStart = 2; vertStride = 1; diff --git a/Engine/source/gui/3d/guiTSControl.cpp b/Engine/source/gui/3d/guiTSControl.cpp index cbb5204332..02d93690f7 100644 --- a/Engine/source/gui/3d/guiTSControl.cpp +++ b/Engine/source/gui/3d/guiTSControl.cpp @@ -110,7 +110,7 @@ namespace start -= lineVec; end += lineVec; - GFXVertexBufferHandle verts(GFX, 4, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(GFX, 4, GFXBufferTypeVolatile); verts.lock(); verts[0].point.set( start.x+perp.x, start.y+perp.y, z1 ); diff --git a/Engine/source/gui/controls/guiGradientCtrl.cpp b/Engine/source/gui/controls/guiGradientCtrl.cpp index e137fabd9c..cf29e3996e 100644 --- a/Engine/source/gui/controls/guiGradientCtrl.cpp +++ b/Engine/source/gui/controls/guiGradientCtrl.cpp @@ -319,81 +319,79 @@ void GuiGradientCtrl::renderColorBox(RectI &bounds) void GuiGradientCtrl::drawBlendRangeBox(RectI &bounds, bool vertical, Vector colorRange) { GFX->setStateBlock(mStateBlock); - - // Create new global dimensions + + // Create new global dimensions S32 l = bounds.point.x + mSwatchFactor, r = bounds.point.x + bounds.extent.x - mSwatchFactor; S32 t = bounds.point.y, b = bounds.point.y + bounds.extent.y - mSwatchFactor; - - // Draw border using new global dimensions - if (mProfile->mBorder) - GFX->getDrawUtil()->drawRect( RectI( Point2I(l,t),Point2I(r,b) ), mProfile->mBorderColor); - - // Update local dimensions - mBlendRangeBox.point = globalToLocalCoord(Point2I(l, t)); - mBlendRangeBox.extent = globalToLocalCoord(Point2I(r, b)); - - ColorRange& firstColorRange = colorRange.first(); - - if(colorRange.size() == 1) // Only one color to draw - { - PrimBuild::begin( GFXTriangleFan, 4 ); - - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( l, b ); - - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i( r, b ); - PrimBuild::vertex2i( r, t ); - - PrimBuild::end(); - } - else - { - PrimBuild::begin( GFXTriangleFan, 4 ); - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i( l, t ); - PrimBuild::vertex2i( l, b ); + // Draw border using new global dimensions + if (mProfile->mBorder) + GFX->getDrawUtil()->drawRect(RectI(Point2I(l, t), Point2I(r, b)), mProfile->mBorderColor); - PrimBuild::color(firstColorRange.swatch->getColor()); - PrimBuild::vertex2i(l + firstColorRange.swatch->getPosition().x, b); - PrimBuild::vertex2i(l + firstColorRange.swatch->getPosition().x, t); + // Update local dimensions + mBlendRangeBox.point = globalToLocalCoord(Point2I(l, t)); + mBlendRangeBox.extent = globalToLocalCoord(Point2I(r, b)); - PrimBuild::end(); - - for( U16 i = 0;i < colorRange.size() - 1; i++ ) - { - PrimBuild::begin( GFXTriangleFan, 4 ); - if (!vertical) // Horizontal (+x) - { - // First color - PrimBuild::color( colorRange[i].swatch->getColor() ); - PrimBuild::vertex2i( l + colorRange[i].swatch->getPosition().x, t ); - PrimBuild::vertex2i( l + colorRange[i].swatch->getPosition().x, b ); - - // First color - PrimBuild::color( colorRange[i+1].swatch->getColor() ); - PrimBuild::vertex2i( l + colorRange[i+1].swatch->getPosition().x, b ); - PrimBuild::vertex2i( l + colorRange[i+1].swatch->getPosition().x, t ); - } - PrimBuild::end(); - } - - ColorRange& lastColorRange = colorRange.last(); + if (colorRange.size() == 1) // Only one color to draw + { + PrimBuild::begin(GFXTriangleStrip, 4); - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, t); + PrimBuild::vertex2i(r, t); - PrimBuild::color(lastColorRange.swatch->getColor()); - PrimBuild::vertex2i(l + lastColorRange.swatch->getPosition().x, t); - PrimBuild::vertex2i(l + lastColorRange.swatch->getPosition().x, b); - - PrimBuild::color(lastColorRange.swatch->getColor()); - PrimBuild::vertex2i( r, b ); - PrimBuild::vertex2i( r, t ); + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, b); + PrimBuild::vertex2i(r, b); - PrimBuild::end(); - } + PrimBuild::end(); + } + else + { + PrimBuild::begin(GFXTriangleStrip, 4); + + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, t); + PrimBuild::vertex2i(l + colorRange.first().swatch->getPosition().x, t); + + PrimBuild::color(colorRange.first().swatch->getColor()); + PrimBuild::vertex2i(l, b); + PrimBuild::vertex2i(l + colorRange.first().swatch->getPosition().x, b); + + PrimBuild::end(); + + for (U16 i = 0; i < colorRange.size() - 1; i++) + { + PrimBuild::begin(GFXTriangleStrip, 4); + if (!vertical) // Horizontal (+x) + { + // First color + PrimBuild::color(colorRange[i].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i].swatch->getPosition().x, t); + PrimBuild::color(colorRange[i + 1].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i + 1].swatch->getPosition().x, t); + + // First color + PrimBuild::color(colorRange[i].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i].swatch->getPosition().x, b); + PrimBuild::color(colorRange[i + 1].swatch->getColor()); + PrimBuild::vertex2i(l + colorRange[i + 1].swatch->getPosition().x, b); + } + PrimBuild::end(); + } + + PrimBuild::begin(GFXTriangleStrip, 4); + + PrimBuild::color(colorRange.last().swatch->getColor()); + PrimBuild::vertex2i(l + colorRange.last().swatch->getPosition().x, t); + PrimBuild::vertex2i(r, t); + + PrimBuild::color(colorRange.last().swatch->getColor()); + PrimBuild::vertex2i(l + colorRange.last().swatch->getPosition().x, b); + PrimBuild::vertex2i(r, b); + + PrimBuild::end(); + } } void GuiGradientCtrl::onMouseDown(const GuiEvent &event) diff --git a/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp b/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp index 5d89ec0e29..a3e9c884ff 100644 --- a/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp +++ b/Engine/source/gui/controls/guiTextEditSliderCtrl.cpp @@ -355,7 +355,7 @@ void GuiTextEditSliderCtrl::onRender(Point2I offset, const RectI &updateRect) Point2I(start.x+14,midPoint.y), mProfile->mFontColor); - GFXVertexBufferHandle verts(GFX, 6, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(GFX, 6, GFXBufferTypeVolatile); verts.lock(); verts[0].color.set( 0, 0, 0 ); diff --git a/Engine/source/gui/editor/guiEditCtrl.h b/Engine/source/gui/editor/guiEditCtrl.h index 7731545f13..38a1ddf34e 100644 --- a/Engine/source/gui/editor/guiEditCtrl.h +++ b/Engine/source/gui/editor/guiEditCtrl.h @@ -114,7 +114,7 @@ class GuiEditCtrl : public GuiControl SimSet* mSelectedSet; // grid drawing - GFXVertexBufferHandle mDots; + GFXVertexBufferHandle mDots; GFXStateBlockRef mDotSB; mouseModes mMouseDownMode; diff --git a/Engine/source/gui/editor/guiFilterCtrl.cpp b/Engine/source/gui/editor/guiFilterCtrl.cpp index a3ea707e85..39f16a99b7 100644 --- a/Engine/source/gui/editor/guiFilterCtrl.cpp +++ b/Engine/source/gui/editor/guiFilterCtrl.cpp @@ -196,7 +196,7 @@ void GuiFilterCtrl::onRender(Point2I offset, const RectI &updateRect) } // draw the curv - GFXVertexBufferHandle verts(GFX, ext.x, GFXBufferTypeVolatile); + GFXVertexBufferHandle verts(GFX, ext.x, GFXBufferTypeVolatile); verts.lock(); diff --git a/Engine/source/gui/editor/guiGraphCtrl.cpp b/Engine/source/gui/editor/guiGraphCtrl.cpp index e00998b0b3..6dc2243658 100644 --- a/Engine/source/gui/editor/guiGraphCtrl.cpp +++ b/Engine/source/gui/editor/guiGraphCtrl.cpp @@ -177,7 +177,7 @@ void GuiGraphCtrl::onRender(Point2I offset, const RectI &updateRect) for( S32 sample = 0; sample < numSamples; ++ sample ) { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); PrimBuild::color( mGraphColor[ k ] ); F32 offset = F32( getExtent().x ) / F32( MaxDataPoints ) * F32( sample + 1 ); diff --git a/Engine/source/gui/worldEditor/editTSCtrl.cpp b/Engine/source/gui/worldEditor/editTSCtrl.cpp index 7781525c6f..928cbfbf17 100644 --- a/Engine/source/gui/worldEditor/editTSCtrl.cpp +++ b/Engine/source/gui/worldEditor/editTSCtrl.cpp @@ -1315,7 +1315,7 @@ DefineEngineMethod( EditTSCtrl, renderCircle, void, ( Point3F pos, Point3F norma { PrimBuild::color( object->mConsoleFillColor ); - PrimBuild::begin( GFXTriangleFan, points.size() + 2 ); + PrimBuild::begin( GFXTriangleStrip, points.size() + 2 ); // Center point PrimBuild::vertex3fv( pos ); diff --git a/Engine/source/gui/worldEditor/gizmo.cpp b/Engine/source/gui/worldEditor/gizmo.cpp index 7ae32519c8..c95533bd60 100644 --- a/Engine/source/gui/worldEditor/gizmo.cpp +++ b/Engine/source/gui/worldEditor/gizmo.cpp @@ -1403,7 +1403,7 @@ void Gizmo::renderGizmo(const MatrixF &cameraTransform, F32 cameraFOV ) for(U32 j = 0; j < 6; j++) { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][0]] * tipScale); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][1]] * tipScale); @@ -1599,7 +1599,7 @@ void Gizmo::_renderAxisBoxes() for(U32 j = 0; j < 6; j++) { - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][0]] * tipScale + sgAxisVectors[axisIdx] * pos ); PrimBuild::vertex3fv( sgCenterBoxPnts[sgBoxVerts[j][1]] * tipScale + sgAxisVectors[axisIdx] * pos ); @@ -1663,7 +1663,7 @@ void Gizmo::_renderAxisCircles() ColorI color = mProfile->inActiveColor; color.alpha = 100; PrimBuild::color( color ); - PrimBuild::begin( GFXTriangleFan, segments+2 ); + PrimBuild::begin( GFXTriangleStrip, segments+2 ); PrimBuild::vertex3fv( Point3F(0,0,0) ); diff --git a/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp b/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp index b5d5d25249..37dd689521 100644 --- a/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp +++ b/Engine/source/gui/worldEditor/guiTerrPreviewCtrl.cpp @@ -265,18 +265,18 @@ void GuiTerrPreviewCtrl::onRender(Point2I offset, const RectI &updateRect) // the texture if flipped horz to reflect how the terrain is really drawn PrimBuild::color3f(1.0f, 1.0f, 1.0f); - PrimBuild::begin(GFXTriangleFan, 4); - PrimBuild::texCoord2f(textureP1.x, textureP2.y); - PrimBuild::vertex2f(screenP1.x, screenP2.y); // left bottom - - - PrimBuild::texCoord2f(textureP2.x, textureP2.y); - PrimBuild::vertex2f(screenP2.x, screenP2.y); // right bottom - PrimBuild::texCoord2f(textureP2.x, textureP1.y); - PrimBuild::vertex2f(screenP2.x, screenP1.y); // right top - - PrimBuild::texCoord2f(textureP1.x, textureP1.y); - PrimBuild::vertex2f(screenP1.x, screenP1.y); // left top + PrimBuild::begin(GFXTriangleStrip, 4); + PrimBuild::texCoord2f(textureP1.x, textureP1.y); + PrimBuild::vertex2f(screenP1.x, screenP1.y); // left top + + PrimBuild::texCoord2f(textureP2.x, textureP1.y); + PrimBuild::vertex2f(screenP2.x, screenP1.y); // right top + + PrimBuild::texCoord2f(textureP1.x, textureP2.y); + PrimBuild::vertex2f(screenP1.x, screenP2.y); // left bottom + + PrimBuild::texCoord2f(textureP2.x, textureP2.y); + PrimBuild::vertex2f(screenP2.x, screenP2.y); // right bottom PrimBuild::end(); } } diff --git a/Engine/source/gui/worldEditor/terrainEditor.cpp b/Engine/source/gui/worldEditor/terrainEditor.cpp index 0ff51f37a9..cf80218e32 100644 --- a/Engine/source/gui/worldEditor/terrainEditor.cpp +++ b/Engine/source/gui/worldEditor/terrainEditor.cpp @@ -658,7 +658,7 @@ void SelectionBrush::rebuild() //... move the selection } -void SelectionBrush::render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const +void SelectionBrush::render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const { //... render the selection } @@ -1342,8 +1342,8 @@ void TerrainEditor::renderPoints( const Vector &pointList ) U32 vertsThisDrawCall = getMin( (U32)vertsLeft, (U32)MAX_DYNAMIC_VERTS ); vertsLeft -= vertsThisDrawCall; - GFXVertexBufferHandle vbuff( GFX, vertsThisDrawCall, GFXBufferTypeVolatile ); - GFXVertexPC *vert = vbuff.lock(); + GFXVertexBufferHandle vbuff( GFX, vertsThisDrawCall, GFXBufferTypeVolatile ); + GFXVertexPCT *vert = vbuff.lock(); const U32 loops = vertsThisDrawCall / 6; @@ -1394,7 +1394,7 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol if(sel.size() == 0) return; - Vector vertexBuffer; + Vector vertexBuffer; ColorF color; ColorI iColor; @@ -1430,15 +1430,15 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol // iColor = color; - GFXVertexPC *verts = &(vertexBuffer[i * 5]); + GFXVertexPCT *verts = &(vertexBuffer[i * 5]); - verts[0].point = wPos + Point3F(-squareSize, -squareSize, 0); + verts[0].point = wPos + Point3F(-squareSize, squareSize, 0); verts[0].color = iColor; - verts[1].point = wPos + Point3F( squareSize, -squareSize, 0); + verts[1].point = wPos + Point3F( squareSize, squareSize, 0); verts[1].color = iColor; - verts[2].point = wPos + Point3F( squareSize, squareSize, 0); + verts[2].point = wPos + Point3F( -squareSize, -squareSize, 0); verts[2].color = iColor; - verts[3].point = wPos + Point3F(-squareSize, squareSize, 0); + verts[3].point = wPos + Point3F( squareSize, -squareSize, 0); verts[3].color = iColor; verts[4].point = verts[0].point; verts[4].color = iColor; @@ -1452,7 +1452,7 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol GridPoint selectedGridPoint = sel[i].mGridPoint; Point2I gPos = selectedGridPoint.gridPos; - GFXVertexPC *verts = &(vertexBuffer[i * 5]); + GFXVertexPCT *verts = &(vertexBuffer[i * 5]); bool center = gridToWorld(selectedGridPoint, verts[0].point); gridToWorld(Point2I(gPos.x + 1, gPos.y), verts[1].point, selectedGridPoint.terrainBlock); @@ -1503,12 +1503,12 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol // Render this bad boy, by stuffing everything into a volatile buffer // and rendering... - GFXVertexBufferHandle selectionVB(GFX, vertexBuffer.size(), GFXBufferTypeStatic); + GFXVertexBufferHandle selectionVB(GFX, vertexBuffer.size(), GFXBufferTypeStatic); selectionVB.lock(0, vertexBuffer.size()); // Copy stuff - dMemcpy((void*)&selectionVB[0], (void*)&vertexBuffer[0], sizeof(GFXVertexPC) * vertexBuffer.size()); + dMemcpy((void*)&selectionVB[0], (void*)&vertexBuffer[0], sizeof(GFXVertexPCT) * vertexBuffer.size()); selectionVB.unlock(); @@ -1518,7 +1518,7 @@ void TerrainEditor::renderSelection( const Selection & sel, const ColorF & inCol if(renderFill) for(U32 i=0; i < sel.size(); i++) - GFX->drawPrimitive( GFXTriangleFan, i*5, 4); + GFX->drawPrimitive( GFXTriangleStrip, i*5, 4); if(renderFrame) for(U32 i=0; i < sel.size(); i++) diff --git a/Engine/source/gui/worldEditor/terrainEditor.h b/Engine/source/gui/worldEditor/terrainEditor.h index 1b5d7cc15b..53c2aa79d0 100644 --- a/Engine/source/gui/worldEditor/terrainEditor.h +++ b/Engine/source/gui/worldEditor/terrainEditor.h @@ -173,7 +173,7 @@ class SelectionBrush : public Brush const char *getType() const { return "selection"; } void rebuild(); - void render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const; + void render(Vector & vertexBuffer, S32 & verts, S32 & elems, S32 & prims, const ColorF & inColorFull, const ColorF & inColorNone, const ColorF & outColorFull, const ColorF & outColorNone) const; void setSize(const Point2I &){} protected: diff --git a/Engine/source/gui/worldEditor/worldEditor.cpp b/Engine/source/gui/worldEditor/worldEditor.cpp index 6065b233ee..7f39a598b6 100644 --- a/Engine/source/gui/worldEditor/worldEditor.cpp +++ b/Engine/source/gui/worldEditor/worldEditor.cpp @@ -1303,7 +1303,7 @@ void WorldEditor::renderObjectFace(SceneObject * obj, const VectorF & normal, co PrimBuild::color( col ); - PrimBuild::begin( GFXTriangleFan, 4 ); + PrimBuild::begin( GFXTriangleStrip, 4 ); for(U32 k = 0; k < 4; k++) { PrimBuild::vertex3f(projPnts[k].x, projPnts[k].y, projPnts[k].z); @@ -1503,7 +1503,7 @@ void WorldEditor::renderSplinePath(SimPath::Path *path) if(vCount > 4000) batchSize = 4000; - GFXVertexBufferHandle vb; + GFXVertexBufferHandle vb; vb.set(GFX, 3*batchSize, GFXBufferTypeVolatile); void *lockPtr = vb.lock(); if(!lockPtr) return; diff --git a/Engine/source/lighting/advanced/advancedLightBinManager.cpp b/Engine/source/lighting/advanced/advancedLightBinManager.cpp index 98330a5dec..bec9afb8a4 100644 --- a/Engine/source/lighting/advanced/advancedLightBinManager.cpp +++ b/Engine/source/lighting/advanced/advancedLightBinManager.cpp @@ -305,7 +305,7 @@ void AdvancedLightBinManager::render( SceneRenderState *state ) { vectorMatInfo->matInstance->setSceneInfo( state, sgData ); vectorMatInfo->matInstance->setTransforms( matrixSet, state ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); } } @@ -482,24 +482,24 @@ void AdvancedLightBinManager::_setupPerFrameParameters( const SceneRenderState * // passes.... this is a volatile VB and updates every frame. FarFrustumQuadVert verts[4]; { - verts[0].point.set( wsFrustumPoints[Frustum::FarBottomLeft] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarBottomLeft], &verts[0].normal ); - verts[0].texCoord.set( -1.0, -1.0 ); - verts[0].tangent.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos); - - verts[1].point.set( wsFrustumPoints[Frustum::FarTopLeft] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarTopLeft], &verts[1].normal ); - verts[1].texCoord.set( -1.0, 1.0 ); - verts[1].tangent.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraOffsetPos); - - verts[2].point.set( wsFrustumPoints[Frustum::FarTopRight] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarTopRight], &verts[2].normal ); - verts[2].texCoord.set( 1.0, 1.0 ); - verts[2].tangent.set(wsFrustumPoints[Frustum::FarTopRight] - cameraOffsetPos); - - verts[3].point.set( wsFrustumPoints[Frustum::FarBottomRight] - cameraPos ); - invCam.mulP( wsFrustumPoints[Frustum::FarBottomRight], &verts[3].normal ); - verts[3].texCoord.set( 1.0, -1.0 ); + verts[0].point.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarTopLeft], &verts[0].normal); + verts[0].texCoord.set(-1.0, 1.0); + verts[0].tangent.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraOffsetPos); + + verts[1].point.set(wsFrustumPoints[Frustum::FarTopRight] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarTopRight], &verts[1].normal); + verts[1].texCoord.set(1.0, 1.0); + verts[1].tangent.set(wsFrustumPoints[Frustum::FarTopRight] - cameraOffsetPos); + + verts[2].point.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarBottomLeft], &verts[2].normal); + verts[2].texCoord.set(-1.0, -1.0); + verts[2].tangent.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos); + + verts[3].point.set(wsFrustumPoints[Frustum::FarBottomRight] - cameraPos); + invCam.mulP(wsFrustumPoints[Frustum::FarBottomRight], &verts[3].normal); + verts[3].texCoord.set(1.0, -1.0); verts[3].tangent.set(wsFrustumPoints[Frustum::FarBottomRight] - cameraOffsetPos); } mFarFrustumQuadVerts.set( GFX, 4 ); diff --git a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp index 1dc9069893..bfa39779e6 100644 --- a/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/deferredShadingFeaturesGLSL.cpp @@ -62,7 +62,6 @@ void DeferredSpecMapGLSL::processPix( Vector &componentList, c specularMap->uniform = true; specularMap->sampler = true; specularMap->constNum = Var::getTexUnitNum(); - LangElement *texOp = new GenOp( "tex2D(@, @)", specularMap, texCoord ); //matinfo.g slot reserved for AO later meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); meta->addStatement(new GenOp(" @.b = dot(tex2D(@, @).rgb, vec3(0.3, 0.59, 0.11));\r\n", material, specularMap, texCoord)); diff --git a/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp b/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp index d2d3831487..095f4ea9e2 100644 --- a/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp +++ b/Engine/source/lighting/advanced/glsl/gBufferConditionerGLSL.cpp @@ -114,7 +114,7 @@ void GBufferConditionerGLSL::processVert( Vector &componentLis // TODO: Total hack because Conditioner is directly derived // from ShaderFeature and not from ShaderFeatureGLSL. NamedFeatureGLSL dummy( String::EmptyString ); - dummy.mInstancingFormat = mInstancingFormat; + dummy.setInstancingFormat( mInstancingFormat ); Var *worldViewOnly = dummy.getWorldView( componentList, fd.features[MFT_UseInstancing], meta ); meta->addStatement( new GenOp(" @ = tMul(@, float4( normalize(@), 0.0 ) ).xyz;\r\n", diff --git a/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp index 0bfbed42a2..172eb65c8f 100644 --- a/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/advancedLightingFeaturesHLSL.cpp @@ -126,6 +126,18 @@ void DeferredRTLightingFeatHLSL::processPix( Vector &component lightInfoBuffer->sampler = true; lightInfoBuffer->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var* lightBufferTex = NULL; + if (mIsDirect3D11) + { + lightInfoBuffer->setType("SamplerState"); + lightBufferTex = new Var; + lightBufferTex->setName("lightInfoBufferTex"); + lightBufferTex->setType("Texture2D"); + lightBufferTex->uniform = true; + lightBufferTex->texture = true; + lightBufferTex->constNum = lightInfoBuffer->constNum; + } + // Declare the RTLighting variables in this feature, they will either be assigned // in this feature, or in the tonemap/lightmap feature Var *d_lightcolor = new Var( "d_lightcolor", "float3" ); @@ -140,8 +152,12 @@ void DeferredRTLightingFeatHLSL::processPix( Vector &component // Perform the uncondition here. String unconditionLightInfo = String::ToLower( AdvancedLightBinManager::smBufferName ) + "Uncondition"; - meta->addStatement( new GenOp( avar( " %s(tex2D(@, @), @, @, @);\r\n", - unconditionLightInfo.c_str() ), lightInfoBuffer, uvScene, d_lightcolor, d_NL_Att, d_specular ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(avar(" %s(@.Sample(@, @), @, @, @);\r\n", + unconditionLightInfo.c_str()), lightBufferTex, lightInfoBuffer, uvScene, d_lightcolor, d_NL_Att, d_specular)); + else + meta->addStatement(new GenOp(avar(" %s(tex2D(@, @), @, @, @);\r\n", + unconditionLightInfo.c_str()), lightInfoBuffer, uvScene, d_lightcolor, d_NL_Att, d_specular)); // If this has an interlaced pre-pass, do averaging here if( fd.features[MFT_InterlacedPrePass] ) @@ -157,8 +173,12 @@ void DeferredRTLightingFeatHLSL::processPix( Vector &component } meta->addStatement( new GenOp( " float id_NL_Att, id_specular;\r\n float3 id_lightcolor;\r\n" ) ); - meta->addStatement( new GenOp( avar( " %s(tex2D(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", - unconditionLightInfo.c_str() ), lightInfoBuffer, uvScene, oneOverTargetSize ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(avar(" %s(@.Sample(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", + unconditionLightInfo.c_str()), lightBufferTex, lightInfoBuffer, uvScene, oneOverTargetSize)); + else + meta->addStatement(new GenOp(avar(" %s(tex2D(@, @ + float2(0.0, @.y)), id_lightcolor, id_NL_Att, id_specular);\r\n", + unconditionLightInfo.c_str()), lightInfoBuffer, uvScene, oneOverTargetSize)); meta->addStatement( new GenOp(" @ = lerp(@, id_lightcolor, 0.5);\r\n", d_lightcolor, d_lightcolor ) ); meta->addStatement( new GenOp(" @ = lerp(@, id_NL_Att, 0.5);\r\n", d_NL_Att, d_NL_Att ) ); @@ -272,8 +292,17 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, // create texture var Var *bumpMap = getNormalMapTex(); - Var *texCoord = getInTexCoord( "texCoord", "float2", true, componentList ); - LangElement *texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + Var *texCoord = getInTexCoord("texCoord", "float2", true, componentList); + + LangElement *texOp = NULL; + + if (mIsDirect3D11) + { + Var *bumpMapTex = (Var*)LangElement::find("bumpMapTex"); + texOp = new GenOp("@.Sample(@, @)", bumpMapTex, bumpMap, texCoord); + } + else + texOp = new GenOp("tex2D(@, @)", bumpMap, texCoord); // create bump normal Var *bumpNorm = new Var; @@ -295,8 +324,25 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, bumpMap->sampler = true; bumpMap->constNum = Var::getTexUnitNum(); - texCoord = getInTexCoord( "detCoord", "float2", true, componentList ); - texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + Var* detailNormalTex = NULL; + if (mIsDirect3D11) + { + bumpMap->setType("SamplerState"); + detailNormalTex = new Var; + detailNormalTex->setName("detailBumpMapTex"); + detailNormalTex->setType("Texture2D"); + detailNormalTex->uniform = true; + detailNormalTex->texture = true; + detailNormalTex->constNum = bumpMap->constNum; + } + + + texCoord = getInTexCoord("detCoord", "float2", true, componentList); + + if (mIsDirect3D11) + texOp = new GenOp("@.Sample(@, @)", detailNormalTex, bumpMap, texCoord); + else + texOp = new GenOp("tex2D(@, @)", bumpMap, texCoord); Var *detailBump = new Var; detailBump->setName( "detailBump" ); @@ -333,25 +379,32 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, else if (fd.features[MFT_AccuMap]) { Var *bumpSample = (Var *)LangElement::find( "bumpSample" ); - if( bumpSample == NULL ) + if (bumpSample == NULL) { MultiLine *meta = new MultiLine; - Var *texCoord = getInTexCoord( "texCoord", "float2", true, componentList ); + Var *texCoord = getInTexCoord("texCoord", "float2", true, componentList); Var *bumpMap = getNormalMapTex(); bumpSample = new Var; - bumpSample->setType( "float4" ); - bumpSample->setName( "bumpSample" ); - LangElement *bumpSampleDecl = new DecOp( bumpSample ); + bumpSample->setType("float4"); + bumpSample->setName("bumpSample"); + LangElement *bumpSampleDecl = new DecOp(bumpSample); - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord ) ); + if (mIsDirect3D11) + { + Var *bumpMapTex = (Var *)LangElement::find("bumpMapTex"); + output = new GenOp(" @ = @.Sample(@, @);\r\n", bumpSampleDecl, bumpMapTex, bumpMap, texCoord); + } + else + output = new GenOp(" @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord); if ( fd.features.hasFeature( MFT_DetailNormalMap ) ) { Var *bumpMap = (Var*)LangElement::find( "detailBumpMap" ); - if ( !bumpMap ) { + if ( !bumpMap ) + { bumpMap = new Var; bumpMap->setType( "sampler2D" ); bumpMap->setName( "detailBumpMap" ); @@ -360,8 +413,24 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, bumpMap->constNum = Var::getTexUnitNum(); } + Var* bumpMapTex = (Var*)LangElement::find("detailBumpMap"); + if (mIsDirect3D11 && !bumpMapTex) + { + bumpMap->setType("SamplerState"); + bumpMapTex = new Var; + bumpMapTex->setName("detailBumpMapTex"); + bumpMapTex->setType("Texture2D"); + bumpMapTex->uniform = true; + bumpMapTex->texture = true; + bumpMapTex->constNum = bumpMap->constNum; + } + texCoord = getInTexCoord( "detCoord", "float2", true, componentList ); - LangElement *texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + LangElement *texOp = NULL; + if (mIsDirect3D11) + texOp = new GenOp("@.Sample(@, @)", bumpMap, bumpMapTex, texCoord); + else + texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); Var *detailBump = new Var; detailBump->setName( "detailBump" ); @@ -402,7 +471,14 @@ void DeferredBumpFeatHLSL::processPix( Vector &componentList, bumpSample->setName( "bumpSample" ); LangElement *bumpSampleDecl = new DecOp( bumpSample ); - output = new GenOp( " @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord ); + if (mIsDirect3D11) + { + Var *bumpMapTex = (Var *)LangElement::find("bumpMapTex"); + output = new GenOp(" @ = @.Sample(@, @);\r\n", bumpSampleDecl, bumpMapTex, bumpMap, texCoord); + } + else + output = new GenOp(" @ = tex2D(@, @);\r\n", bumpSampleDecl, bumpMap, texCoord); + return; } } @@ -547,7 +623,8 @@ void DeferredPixelSpecularHLSL::processPix( Vector &component AssertFatal( lightInfoSamp && d_specular && d_NL_Att, "DeferredPixelSpecularHLSL::processPix - Something hosed the deferred features!" ); - if (fd.features[ MFT_AccuMap ]) { + if (fd.features[ MFT_AccuMap ]) + { // change specularity where the accu texture is applied Var *accuPlc = (Var*) LangElement::find( "plc" ); Var *accuSpecular = (Var*)LangElement::find( "accuSpecular" ); @@ -671,6 +748,18 @@ void DeferredMinnaertHLSL::processPix( Vector &componentList, prepassBuffer->sampler = true; prepassBuffer->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var* prePassTex = NULL; + if (mIsDirect3D11) + { + prepassBuffer->setType("SamplerState"); + prePassTex = new Var; + prePassTex->setName("prePassTex"); + prePassTex->setType("Texture2D"); + prePassTex->uniform = true; + prePassTex->texture = true; + prePassTex->constNum = prepassBuffer->constNum; + } + // Texture coord Var *uvScene = (Var*) LangElement::find( "uvScene" ); AssertFatal(uvScene != NULL, "Unable to find UVScene, no RTLighting feature?"); @@ -684,7 +773,11 @@ void DeferredMinnaertHLSL::processPix( Vector &componentList, Var *d_NL_Att = (Var*)LangElement::find( "d_NL_Att" ); - meta->addStatement( new GenOp( avar( " float4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str() ), prepassBuffer, uvScene ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(avar(" float4 normalDepth = %s(@, ,@, @);\r\n", unconditionPrePassMethod.c_str()), prepassBuffer, prePassTex, uvScene)); + else + meta->addStatement(new GenOp(avar(" float4 normalDepth = %s(@, @);\r\n", unconditionPrePassMethod.c_str()), prepassBuffer, uvScene)); + meta->addStatement( new GenOp( " float vDotN = dot(normalDepth.xyz, @);\r\n", wsViewVec ) ); meta->addStatement( new GenOp( " float Minnaert = pow( @, @) * pow(vDotN, 1.0 - @);\r\n", d_NL_Att, minnaertConstant, minnaertConstant ) ); meta->addStatement( new GenOp( " @;\r\n", assignColor( new GenOp( "float4(Minnaert, Minnaert, Minnaert, 1.0)" ), Material::Mul ) ) ); diff --git a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp index 3e42af9531..25c86b7bc0 100644 --- a/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/deferredShadingFeaturesHLSL.cpp @@ -62,12 +62,35 @@ void DeferredSpecMapHLSL::processPix( Vector &componentList, c specularMap->uniform = true; specularMap->sampler = true; specularMap->constNum = Var::getTexUnitNum(); - LangElement *texOp = new GenOp( "tex2D(@, @)", specularMap, texCoord ); + + Var* specularMapTex = NULL; + if (mIsDirect3D11) + { + specularMap->setType("SamplerState"); + specularMapTex = new Var; + specularMapTex->setName("specularMapTex"); + specularMapTex->setType("Texture2D"); + specularMapTex->uniform = true; + specularMapTex->texture = true; + specularMapTex->constNum = specularMap->constNum; + } //matinfo.g slot reserved for AO later + Var* specColor = new Var; + specColor->setName("specColor"); + specColor->setType("float4"); + LangElement *specColorElem = new DecOp(specColor); + meta->addStatement(new GenOp(" @.g = 1.0;\r\n", material)); - meta->addStatement(new GenOp(" @.b = dot(tex2D(@, @).rgb, float3(0.3, 0.59, 0.11));\r\n", material, specularMap, texCoord)); - meta->addStatement(new GenOp(" @.a = tex2D(@, @).a;\r\n", material, specularMap, texCoord)); + //sample specular map + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @ = @.Sample(@, @);\r\n", specColorElem, specularMapTex, specularMap, texCoord)); + else + meta->addStatement(new GenOp(" @ = tex2D(@, @);\r\n", specColorElem, specularMap, texCoord)); + + meta->addStatement(new GenOp(" @.b = dot(@.rgb, float3(0.3, 0.59, 0.11));\r\n", material, specColor)); + meta->addStatement(new GenOp(" @.a = @.a;\r\n", material, specColor)); + output = meta; } diff --git a/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp b/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp index 6f99d035c7..d03a40ecd7 100644 --- a/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp +++ b/Engine/source/lighting/advanced/hlsl/gBufferConditionerHLSL.cpp @@ -28,7 +28,7 @@ #include "materials/materialFeatureTypes.h" #include "materials/materialFeatureData.h" #include "shaderGen/hlsl/shaderFeatureHLSL.h" - +#include "gfx/gfxDevice.h" GBufferConditionerHLSL::GBufferConditionerHLSL( const GFXFormat bufferFormat, const NormalSpace nrmSpace ) : Parent( bufferFormat ) @@ -114,7 +114,7 @@ void GBufferConditionerHLSL::processVert( Vector &componentLis // TODO: Total hack because Conditioner is directly derived // from ShaderFeature and not from ShaderFeatureHLSL. NamedFeatureHLSL dummy( String::EmptyString ); - dummy.mInstancingFormat = mInstancingFormat; + dummy.setInstancingFormat( mInstancingFormat ); Var *worldViewOnly = dummy.getWorldView( componentList, fd.features[MFT_UseInstancing], meta ); meta->addStatement( new GenOp(" @ = mul(@, float4( normalize(@), 0.0 ) ).xyz;\r\n", @@ -222,6 +222,7 @@ Var* GBufferConditionerHLSL::printMethodHeader( MethodType methodType, const Str retVal = Parent::printMethodHeader( methodType, methodName, stream, meta ); else { + const bool isDirect3D11 = GFX->getAdapterType() == Direct3D11; Var *methodVar = new Var; methodVar->setName(methodName); methodVar->setType("inline float4"); @@ -237,12 +238,28 @@ Var* GBufferConditionerHLSL::printMethodHeader( MethodType methodType, const Str screenUV->setType("float2"); DecOp *screenUVDecl = new DecOp(screenUV); + Var *prepassTex = NULL; + DecOp *prepassTexDecl = NULL; + if (isDirect3D11) + { + prepassSampler->setType("SamplerState"); + prepassTex = new Var; + prepassTex->setName("prepassTexVar"); + prepassTex->setType("Texture2D"); + prepassTex->texture = true; + prepassTex->constNum = prepassSampler->constNum; + prepassTexDecl = new DecOp(prepassTex); + } + Var *bufferSample = new Var; bufferSample->setName("bufferSample"); bufferSample->setType("float4"); DecOp *bufferSampleDecl = new DecOp(bufferSample); - meta->addStatement( new GenOp( "@(@, @)\r\n", methodDecl, prepassSamplerDecl, screenUVDecl ) ); + if (isDirect3D11) + meta->addStatement(new GenOp("@(@, @, @)\r\n", methodDecl, prepassSamplerDecl, prepassTexDecl, screenUVDecl)); + else + meta->addStatement( new GenOp( "@(@, @)\r\n", methodDecl, prepassSamplerDecl, screenUVDecl ) ); meta->addStatement( new GenOp( "{\r\n" ) ); @@ -255,10 +272,14 @@ Var* GBufferConditionerHLSL::printMethodHeader( MethodType methodType, const Str // The gbuffer has no mipmaps, so use tex2dlod when // possible so that the shader compiler can optimize. meta->addStatement( new GenOp( " #if TORQUE_SM >= 30\r\n" ) ); - meta->addStatement( new GenOp( " @ = tex2Dlod(@, float4(@,0,0));\r\n", bufferSampleDecl, prepassSampler, screenUV ) ); - meta->addStatement( new GenOp( " #else\r\n" ) ); - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", bufferSampleDecl, prepassSampler, screenUV ) ); - meta->addStatement( new GenOp( " #endif\r\n\r\n" ) ); + if (isDirect3D11) + meta->addStatement(new GenOp(" @ = @.SampleLevel(@, @,0);\r\n", bufferSampleDecl, prepassTex, prepassSampler, screenUV)); + else + meta->addStatement(new GenOp(" @ = tex2Dlod(@, float4(@,0,0));\r\n", bufferSampleDecl, prepassSampler, screenUV)); + + meta->addStatement(new GenOp(" #else\r\n")); + meta->addStatement(new GenOp(" @ = tex2D(@, @);\r\n", bufferSampleDecl, prepassSampler, screenUV)); + meta->addStatement(new GenOp(" #endif\r\n\r\n")); #endif // We don't use this way of passing var's around, so this should cause a crash diff --git a/Engine/source/lighting/common/blobShadow.cpp b/Engine/source/lighting/common/blobShadow.cpp index 9756757e93..48bfb1e529 100644 --- a/Engine/source/lighting/common/blobShadow.cpp +++ b/Engine/source/lighting/common/blobShadow.cpp @@ -338,7 +338,7 @@ void BlobShadow::render( F32 camDist, const TSRenderState &rdata ) GFX->setVertexBuffer(mShadowBuffer); for(U32 p=0; pdrawPrimitive(GFXTriangleFan, mPartition[p].vertexStart, (mPartition[p].vertexCount - 2)); + GFX->drawPrimitive(GFXTriangleStrip, mPartition[p].vertexStart, (mPartition[p].vertexCount - 2)); // This is a bad nasty hack which forces the shadow to reconstruct itself every frame. mPartition.clear(); diff --git a/Engine/source/materials/miscShdrDat.h b/Engine/source/materials/miscShdrDat.h index 25422008d1..9ebaa6f467 100644 --- a/Engine/source/materials/miscShdrDat.h +++ b/Engine/source/materials/miscShdrDat.h @@ -22,10 +22,6 @@ #ifndef _MISCSHDRDAT_H_ #define _MISCSHDRDAT_H_ -#ifndef _PLATFORM_H_ -#include "platform/platform.h" -#endif - //************************************************************************** // This file is an attempt to keep certain classes from having to know about // the ShaderGen class @@ -45,6 +41,7 @@ enum RegisterType RT_COLOR, RT_TEXCOORD, RT_VPOS, + RT_SVPOSITION }; enum Components @@ -52,7 +49,7 @@ enum Components C_VERT_STRUCT = 0, C_CONNECTOR, C_VERT_MAIN, - C_PIX_MAIN, + C_PIX_MAIN }; #endif // _MISCSHDRDAT_H_ diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 37f7452537..185c9f0b99 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -209,7 +209,7 @@ bool ProcessedShaderMaterial::init( const FeatureSet &features, if ( mFeatures.hasFeature( MFT_UseInstancing ) ) { mInstancingState = new InstancingState(); - mInstancingState->setFormat( &_getRPD( 0 )->shader->mInstancingFormat, mVertexFormat ); + mInstancingState->setFormat( _getRPD( 0 )->shader->getInstancingFormat(), mVertexFormat ); } return true; } diff --git a/Engine/source/materials/processedShaderMaterial.h b/Engine/source/materials/processedShaderMaterial.h index 9bcc0eec7e..4f7c670237 100644 --- a/Engine/source/materials/processedShaderMaterial.h +++ b/Engine/source/materials/processedShaderMaterial.h @@ -167,6 +167,8 @@ class ProcessedShaderMaterial : public ProcessedMaterial mInstFormat = instFormat; mDeclFormat.copy( *vertexFormat ); mDeclFormat.append( *mInstFormat, 1 ); + // Let the declaration know we have instancing. + mDeclFormat.enableInstancing(); mDeclFormat.getDecl(); delete [] mBuffer; diff --git a/Engine/source/materials/shaderData.cpp b/Engine/source/materials/shaderData.cpp index 36e0a39949..e8c1dbb3bb 100644 --- a/Engine/source/materials/shaderData.cpp +++ b/Engine/source/materials/shaderData.cpp @@ -236,6 +236,7 @@ GFXShader* ShaderData::_createShader( const Vector ¯os ) { case Direct3D9_360: case Direct3D9: + case Direct3D11: { success = shader->init( mDXVertexShaderName, mDXPixelShaderName, diff --git a/Engine/source/platformWin32/videoInfo/wmiVideoInfo.cpp b/Engine/source/platformWin32/videoInfo/wmiVideoInfo.cpp index 23f63635dc..b4fecbba37 100644 --- a/Engine/source/platformWin32/videoInfo/wmiVideoInfo.cpp +++ b/Engine/source/platformWin32/videoInfo/wmiVideoInfo.cpp @@ -25,6 +25,7 @@ //#include #include //#include +#include #pragma comment(lib, "comsuppw.lib") #pragma comment(lib, "wbemuuid.lib") @@ -53,58 +54,6 @@ struct MYGUID : public GUID } }; -//------------------------------------------------------------------------------ -// DXGI decls for retrieving device info on Vista. We manually declare that -// stuff here, so we don't depend on headers and compile on any setup. At -// run-time, it depends on whether we can successfully load the DXGI DLL; if -// not, nothing of this here will be used. - -struct IDXGIObject; -struct IDXGIFactory; -struct IDXGIAdapter; -struct IDXGIOutput; - -struct DXGI_SWAP_CHAIN_DESC; -struct DXGI_ADAPTER_DESC; - -struct IDXGIObject : public IUnknown -{ - virtual HRESULT STDMETHODCALLTYPE SetPrivateData( REFGUID, UINT, const void* ) = 0; - virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( REFGUID, const IUnknown* ) = 0; - virtual HRESULT STDMETHODCALLTYPE GetPrivateData( REFGUID, UINT*, void* ) = 0; - virtual HRESULT STDMETHODCALLTYPE GetParent( REFIID, void** ) = 0; -}; - -struct IDXGIFactory : public IDXGIObject -{ - virtual HRESULT STDMETHODCALLTYPE EnumAdapters( UINT, IDXGIAdapter** ) = 0; - virtual HRESULT STDMETHODCALLTYPE MakeWindowAssociation( HWND, UINT ) = 0; - virtual HRESULT STDMETHODCALLTYPE GetWindowAssociation( HWND ) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateSwapChain( IUnknown*, DXGI_SWAP_CHAIN_DESC* ) = 0; - virtual HRESULT STDMETHODCALLTYPE CreateSoftwareAdapter( HMODULE, IDXGIAdapter** ) = 0; -}; - -struct IDXGIAdapter : public IDXGIObject -{ - virtual HRESULT STDMETHODCALLTYPE EnumOutputs( UINT, IDXGIOutput** ) = 0; - virtual HRESULT STDMETHODCALLTYPE GetDesc( DXGI_ADAPTER_DESC* ) = 0; - virtual HRESULT STDMETHODCALLTYPE CheckInterfaceSupport( REFGUID, LARGE_INTEGER* ) = 0; -}; - -struct DXGI_ADAPTER_DESC -{ - WCHAR Description[ 128 ]; - UINT VendorId; - UINT DeviceId; - UINT SubSysId; - UINT Revision; - SIZE_T DedicatedVideoMemory; - SIZE_T DedicatedSystemMemory; - SIZE_T SharedSystemMemory; - LUID AdapterLuid; -}; - -static MYGUID IID_IDXGIFactory( 0x7b7166ec, 0x21c7, 0x44ae, 0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69 ); //------------------------------------------------------------------------------ // DXDIAG declarations. @@ -184,6 +133,26 @@ WMIVideoInfo::~WMIVideoInfo() //------------------------------------------------------------------------------ +String WMIVideoInfo::_lookUpVendorId(U32 vendorId) +{ + String vendor; + switch (vendorId) + { + case 0x10DE: + vendor = "NVIDIA"; + break; + case 0x1002: + vendor = "AMD"; + break; + case 0x8086: + vendor = "INTEL"; + break; + } + return vendor; +} + +//------------------------------------------------------------------------------ + bool WMIVideoInfo::_initialize() { // Init COM @@ -282,16 +251,15 @@ bool WMIVideoInfo::_initializeWMI() bool WMIVideoInfo::_initializeDXGI() { - // Try going for DXGI. Will only succeed on Vista. -#if 0 + // Try using for DXGI 1.1, will only succeed on Windows 7+. mDXGIModule = ( HMODULE ) LoadLibrary( L"dxgi.dll" ); if( mDXGIModule != 0 ) { - typedef HRESULT (* CreateDXGIFactoryFuncType )( REFIID, void** ); + typedef HRESULT (WINAPI* CreateDXGIFactoryFuncType )( REFIID, void** ); CreateDXGIFactoryFuncType factoryFunction = - ( CreateDXGIFactoryFuncType ) GetProcAddress( ( HMODULE ) mDXGIModule, "CreateDXGIFactory" ); + ( CreateDXGIFactoryFuncType ) GetProcAddress( ( HMODULE ) mDXGIModule, "CreateDXGIFactory1" ); - if( factoryFunction && factoryFunction( IID_IDXGIFactory, ( void** ) &mDXGIFactory ) == S_OK ) + if( factoryFunction && factoryFunction( IID_IDXGIFactory1, ( void** ) &mDXGIFactory ) == S_OK ) return true; else { @@ -299,7 +267,7 @@ bool WMIVideoInfo::_initializeDXGI() mDXGIModule = 0; } } -#endif + return false; } @@ -483,20 +451,36 @@ bool WMIVideoInfo::_queryPropertyDxDiag( const PVIQueryType queryType, const U32 bool WMIVideoInfo::_queryPropertyDXGI( const PVIQueryType queryType, const U32 adapterId, String *outValue ) { -#if 0 + if( mDXGIFactory ) { - IDXGIAdapter* adapter; - if( mDXGIFactory->EnumAdapters( adapterId, &adapter ) != S_OK ) + // Special case to deal with PVI_NumAdapters + if (queryType == PVI_NumAdapters) + { + U32 count = 0; + IDXGIAdapter1 *adapter; + while (mDXGIFactory->EnumAdapters1(count, &adapter) != DXGI_ERROR_NOT_FOUND) + { + ++count; + adapter->Release(); + } + + String value = String::ToString("%d", count); + *outValue = value; + return true; + } + + IDXGIAdapter1* adapter; + if( mDXGIFactory->EnumAdapters1( adapterId, &adapter ) != S_OK ) return false; - DXGI_ADAPTER_DESC desc; - if( adapter->GetDesc( &desc ) != S_OK ) + DXGI_ADAPTER_DESC1 desc; + if( adapter->GetDesc1( &desc ) != S_OK ) { adapter->Release(); return false; } - + String value; switch( queryType ) { @@ -511,15 +495,17 @@ bool WMIVideoInfo::_queryPropertyDXGI( const PVIQueryType queryType, const U32 a case PVI_VRAM: value = String( avar( "%i", desc.DedicatedVideoMemory / 1048576 ) ); break; - - //RDTODO + case PVI_ChipSet: + value = _lookUpVendorId(desc.VendorId); + break; + //TODO PVI_DriverVersion } adapter->Release(); *outValue = value; return true; } -#endif + return false; } diff --git a/Engine/source/platformWin32/videoInfo/wmiVideoInfo.h b/Engine/source/platformWin32/videoInfo/wmiVideoInfo.h index 6d54570394..3b71d97fcd 100644 --- a/Engine/source/platformWin32/videoInfo/wmiVideoInfo.h +++ b/Engine/source/platformWin32/videoInfo/wmiVideoInfo.h @@ -28,7 +28,7 @@ struct IWbemLocator; struct IWbemServices; -struct IDXGIFactory; +struct IDXGIFactory1; struct IDxDiagProvider; class WMIVideoInfo : public PlatformVideoInfo @@ -39,7 +39,7 @@ class WMIVideoInfo : public PlatformVideoInfo bool mComInitialized; void* mDXGIModule; - IDXGIFactory* mDXGIFactory; + IDXGIFactory1* mDXGIFactory; IDxDiagProvider* mDxDiagProvider; bool _initializeDXGI(); @@ -54,6 +54,7 @@ class WMIVideoInfo : public PlatformVideoInfo static WCHAR *smPVIQueryTypeToWMIString []; bool _queryProperty( const PVIQueryType queryType, const U32 adapterId, String *outValue ); bool _initialize(); + String _lookUpVendorId(U32 vendorId); public: WMIVideoInfo(); diff --git a/Engine/source/postFx/postEffect.cpp b/Engine/source/postFx/postEffect.cpp index 62c35baf60..c388e0abe1 100644 --- a/Engine/source/postFx/postEffect.cpp +++ b/Engine/source/postFx/postEffect.cpp @@ -510,23 +510,23 @@ void PostEffect::_updateScreenGeometry( const Frustum &frustum, PFXVertex *vert = outVB->lock(); - vert->point.set( -1.0, -1.0, 0.0 ); - vert->texCoord.set( 0.0f, 1.0f ); - vert->wsEyeRay = frustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos; - vert++; - - vert->point.set( -1.0, 1.0, 0.0 ); - vert->texCoord.set( 0.0f, 0.0f ); + vert->point.set(-1.0, 1.0, 0.0); + vert->texCoord.set(0.0f, 0.0f); vert->wsEyeRay = frustumPoints[Frustum::FarTopLeft] - cameraOffsetPos; vert++; - vert->point.set( 1.0, 1.0, 0.0 ); - vert->texCoord.set( 1.0f, 0.0f ); + vert->point.set(1.0, 1.0, 0.0); + vert->texCoord.set(1.0f, 0.0f); vert->wsEyeRay = frustumPoints[Frustum::FarTopRight] - cameraOffsetPos; vert++; - vert->point.set( 1.0, -1.0, 0.0 ); - vert->texCoord.set( 1.0f, 1.0f ); + vert->point.set(-1.0, -1.0, 0.0); + vert->texCoord.set(0.0f, 1.0f); + vert->wsEyeRay = frustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos; + vert++; + + vert->point.set(1.0, -1.0, 0.0); + vert->texCoord.set(1.0f, 1.0f); vert->wsEyeRay = frustumPoints[Frustum::FarBottomRight] - cameraOffsetPos; vert++; @@ -1275,7 +1275,7 @@ void PostEffect::process( const SceneRenderState *state, // Draw it. GFX->setVertexBuffer( vb ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); // Allow PostEffecVis to hook in. PFXVIS->onPFXProcessed( this ); diff --git a/Engine/source/renderInstance/renderPrePassMgr.cpp b/Engine/source/renderInstance/renderPrePassMgr.cpp index 4f08dc6ea1..6e7a8f3ef4 100644 --- a/Engine/source/renderInstance/renderPrePassMgr.cpp +++ b/Engine/source/renderInstance/renderPrePassMgr.cpp @@ -385,7 +385,6 @@ void RenderPrePassMgr::render( SceneRenderState *state ) GFXTextureObject *lastLM = NULL; GFXCubemap *lastCubemap = NULL; GFXTextureObject *lastReflectTex = NULL; - GFXTextureObject *lastMiscTex = NULL; GFXTextureObject *lastAccuTex = NULL; // Next render all the meshes. diff --git a/Engine/source/scene/reflectionManager.cpp b/Engine/source/scene/reflectionManager.cpp index 323e11c8af..5536b4fa5c 100644 --- a/Engine/source/scene/reflectionManager.cpp +++ b/Engine/source/scene/reflectionManager.cpp @@ -248,8 +248,18 @@ GFXTextureObject* ReflectionManager::getRefractTex( bool forceUpdate ) const U32 desWidth = targetSize.x; const U32 desHeight = targetSize.y; #else - const U32 desWidth = mFloor( (F32)targetSize.x * smRefractTexScale ); - const U32 desHeight = mFloor( ( F32)targetSize.y * smRefractTexScale ); + U32 desWidth, desHeight; + // D3D11 needs to be the same size as the active target + if (GFX->getAdapterType() == Direct3D11) + { + desWidth = targetSize.x; + desHeight = targetSize.y; + } + else + { + desWidth = mFloor((F32)targetSize.x * smRefractTexScale); + desHeight = mFloor((F32)targetSize.y * smRefractTexScale); + } #endif if ( mRefractTex.isNull() || diff --git a/Engine/source/scene/simPath.cpp b/Engine/source/scene/simPath.cpp index c25764ad11..d38ea914f8 100644 --- a/Engine/source/scene/simPath.cpp +++ b/Engine/source/scene/simPath.cpp @@ -273,7 +273,7 @@ DefineEngineMethod( Path, getPathId, S32, (),, //-------------------------------------------------------------------------- GFXStateBlockRef Marker::smStateBlock; -GFXVertexBufferHandle Marker::smVertexBuffer; +GFXVertexBufferHandle Marker::smVertexBuffer; GFXPrimitiveBufferHandle Marker::smPrimitiveBuffer; static Point3F wedgePoints[4] = { @@ -295,7 +295,7 @@ void Marker::initGFXResources() smStateBlock = GFX->createStateBlock(d); smVertexBuffer.set(GFX, 4, GFXBufferTypeStatic); - GFXVertexPC* verts = smVertexBuffer.lock(); + GFXVertexPCT* verts = smVertexBuffer.lock(); verts[0].point = wedgePoints[0] * 0.25f; verts[1].point = wedgePoints[1] * 0.25f; verts[2].point = wedgePoints[2] * 0.25f; diff --git a/Engine/source/scene/simPath.h b/Engine/source/scene/simPath.h index 9e172bdf48..4633e0a109 100644 --- a/Engine/source/scene/simPath.h +++ b/Engine/source/scene/simPath.h @@ -132,7 +132,7 @@ class Marker : public SceneObject static void initGFXResources(); static GFXStateBlockRef smStateBlock; - static GFXVertexBufferHandle smVertexBuffer; + static GFXVertexBufferHandle smVertexBuffer; static GFXPrimitiveBufferHandle smPrimitiveBuffer; public: diff --git a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp index 2bafc06f46..6010c82831 100644 --- a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp @@ -85,7 +85,8 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, // accu constants Var *accuScale = (Var*)LangElement::find( "accuScale" ); - if ( !accuScale ) { + if ( !accuScale ) + { accuScale = new Var; accuScale->setType( "float" ); accuScale->setName( "accuScale" ); @@ -94,7 +95,8 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, accuScale->constSortPos = cspPotentialPrimitive; } Var *accuDirection = (Var*)LangElement::find( "accuDirection" ); - if ( !accuDirection ) { + if ( !accuDirection ) + { accuDirection = new Var; accuDirection->setType( "float" ); accuDirection->setName( "accuDirection" ); @@ -103,7 +105,8 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, accuDirection->constSortPos = cspPotentialPrimitive; } Var *accuStrength = (Var*)LangElement::find( "accuStrength" ); - if ( !accuStrength ) { + if ( !accuStrength ) + { accuStrength = new Var; accuStrength->setType( "float" ); accuStrength->setName( "accuStrength" ); @@ -112,7 +115,8 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, accuStrength->constSortPos = cspPotentialPrimitive; } Var *accuCoverage = (Var*)LangElement::find( "accuCoverage" ); - if ( !accuCoverage ) { + if ( !accuCoverage ) + { accuCoverage = new Var; accuCoverage->setType( "float" ); accuCoverage->setName( "accuCoverage" ); @@ -121,7 +125,8 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, accuCoverage->constSortPos = cspPotentialPrimitive; } Var *accuSpecular = (Var*)LangElement::find( "accuSpecular" ); - if ( !accuSpecular ) { + if ( !accuSpecular ) + { accuSpecular = new Var; accuSpecular->setType( "float" ); accuSpecular->setName( "accuSpecular" ); @@ -133,14 +138,26 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, Var *inTex = getInTexCoord( "texCoord", "float2", true, componentList ); Var *accuVec = getInTexCoord( "accuVec", "float3", true, componentList ); Var *bumpNorm = (Var *)LangElement::find( "bumpSample" ); - if( bumpNorm == NULL ) { + if( bumpNorm == NULL ) + { bumpNorm = (Var *)LangElement::find( "bumpNormal" ); if (!bumpNorm) return; } // get the accu pixel color - meta->addStatement( new GenOp( " @ = tex2D(@, @ * @);\r\n", colorAccuDecl, accuMap, inTex, accuScale ) ); + if (mIsDirect3D11) + { + Var *accuMapTex = new Var; + accuMapTex->setType("Texture2D"); + accuMapTex->setName("accuMapTex"); + accuMapTex->uniform = true; + accuMapTex->texture = true; + accuMapTex->constNum = accuMap->constNum; + meta->addStatement(new GenOp(" @ = @.Sample(@, @ * @);\r\n", colorAccuDecl, accuMapTex, accuMap, inTex, accuScale)); + } + else + meta->addStatement(new GenOp(" @ = tex2D(@, @ * @);\r\n", colorAccuDecl, accuMap, inTex, accuScale)); // scale up normals meta->addStatement( new GenOp( " @.xyz = @.xyz * 2.0 - 0.5;\r\n", bumpNorm, bumpNorm ) ); diff --git a/Engine/source/shaderGen/HLSL/bumpHLSL.cpp b/Engine/source/shaderGen/HLSL/bumpHLSL.cpp index 327e7ad6f0..ee34f3e66b 100644 --- a/Engine/source/shaderGen/HLSL/bumpHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/bumpHLSL.cpp @@ -70,6 +70,13 @@ void BumpFeatHLSL::processPix( Vector &componentList, Var *bumpMap = getNormalMapTex(); LangElement *texOp = NULL; + //if it's D3D11 let's create the texture object + Var* bumpMapTex = NULL; + if (mIsDirect3D11) + { + bumpMapTex = (Var*)LangElement::find("bumpMapTex"); + } + // Handle atlased textures // http://www.infinity-universe.com/Infinity/index.php?option=com_content&task=view&id=65&Itemid=47 if(fd.features[MFT_NormalMapAtlas]) @@ -127,18 +134,25 @@ void BumpFeatHLSL::processPix( Vector &componentList, // Add a newline meta->addStatement( new GenOp( "\r\n" ) ); - if(is_sm3) + if (mIsDirect3D11) { - texOp = new GenOp( "tex2Dlod(@, float4(@, 0.0, mipLod_bump))", bumpMap, texCoord ); + texOp = new GenOp("@.SampleLevel(@, @, mipLod_bump)", bumpMapTex, bumpMap, texCoord); + } + else if (is_sm3) + { + texOp = new GenOp("tex2Dlod(@, float4(@, 0.0, mipLod_bump))", bumpMap, texCoord); } else { - texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + texOp = new GenOp("tex2D(@, @)", bumpMap, texCoord); } } else { - texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + if (mIsDirect3D11) + texOp = new GenOp("@.Sample(@, @)", bumpMapTex, bumpMap, texCoord); + else + texOp = new GenOp("tex2D(@, @)", bumpMap, texCoord); } Var *bumpNorm = new Var( "bumpNormal", "float4" ); @@ -156,8 +170,26 @@ void BumpFeatHLSL::processPix( Vector &componentList, bumpMap->sampler = true; bumpMap->constNum = Var::getTexUnitNum(); + Var* detailBumpTex = NULL; + if (mIsDirect3D11) + { + bumpMap->setType("SamplerState"); + detailBumpTex = new Var; + detailBumpTex->setName("detailBumpTex"); + detailBumpTex->setType("Texture2D"); + detailBumpTex->uniform = true; + detailBumpTex->texture = true; + detailBumpTex->constNum = bumpMap->constNum; + } + else + bumpMap->setType("sampler2D"); + texCoord = getInTexCoord( "detCoord", "float2", true, componentList ); - texOp = new GenOp( "tex2D(@, @)", bumpMap, texCoord ); + + if (mIsDirect3D11) + texOp = new GenOp("@.Sample(@, @)", detailBumpTex, bumpMap, texCoord); + else + texOp = new GenOp("tex2D(@, @)", bumpMap, texCoord); Var *detailBump = new Var; detailBump->setName( "detailBump" ); @@ -345,17 +377,26 @@ void ParallaxFeatHLSL::processPix( Vector &componentList, // Get the rest of our inputs. Var *parallaxInfo = _getUniformVar( "parallaxInfo", "float", cspPotentialPrimitive ); Var *normalMap = getNormalMapTex(); + Var *bumpMapTexture = (Var*)LangElement::find("bumpMapTex"); // Call the library function to do the rest. - if(fd.features.hasFeature( MFT_IsDXTnm, getProcessIndex() )) + if (fd.features.hasFeature(MFT_IsDXTnm, getProcessIndex())) { - meta->addStatement( new GenOp( " @.xy += parallaxOffsetDxtnm( @, @.xy, @, @ );\r\n", - texCoord, normalMap, texCoord, negViewTS, parallaxInfo ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @.xy += parallaxOffsetDxtnm( @, @, @.xy, @, @ );\r\n", + texCoord, bumpMapTexture, normalMap, texCoord, negViewTS, parallaxInfo)); + else + meta->addStatement(new GenOp(" @.xy += parallaxOffsetDxtnm( @, @.xy, @, @ );\r\n", + texCoord, normalMap, texCoord, negViewTS, parallaxInfo)); } else { - meta->addStatement( new GenOp( " @.xy += parallaxOffset( @, @.xy, @, @ );\r\n", - texCoord, normalMap, texCoord, negViewTS, parallaxInfo ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @.xy += parallaxOffset( @, @, @.xy, @, @ );\r\n", + texCoord, bumpMapTexture, normalMap, texCoord, negViewTS, parallaxInfo)); + else + meta->addStatement(new GenOp(" @.xy += parallaxOffset( @, @.xy, @, @ );\r\n", + texCoord, normalMap, texCoord, negViewTS, parallaxInfo)); } // TODO: Fix second UV maybe? diff --git a/Engine/source/shaderGen/HLSL/paraboloidHLSL.cpp b/Engine/source/shaderGen/HLSL/paraboloidHLSL.cpp index a5afa00e0c..105e3c1005 100644 --- a/Engine/source/shaderGen/HLSL/paraboloidHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/paraboloidHLSL.cpp @@ -46,9 +46,13 @@ void ParaboloidVertTransformHLSL::processVert( Vector &compon ShaderConnector *connectComp = dynamic_cast( componentList[C_CONNECTOR] ); // Grab connector out position. - Var *outPosition = connectComp->getElement( RT_POSITION ); - outPosition->setName( "hpos" ); - outPosition->setStructName( "OUT" ); + RegisterType type = RT_POSITION; + if (mIsDirect3D11) + type = RT_SVPOSITION; + + Var *outPosition = connectComp->getElement(type); + outPosition->setName("hpos"); + outPosition->setStructName("OUT"); // Get the atlas scale. Var *atlasScale = new Var; diff --git a/Engine/source/shaderGen/HLSL/pixSpecularHLSL.cpp b/Engine/source/shaderGen/HLSL/pixSpecularHLSL.cpp index 8b65a9491a..b5a5a98b1d 100644 --- a/Engine/source/shaderGen/HLSL/pixSpecularHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/pixSpecularHLSL.cpp @@ -77,8 +77,12 @@ void PixelSpecularHLSL::processPix( Vector &componentList, { LangElement * lightMap = LangElement::find( "lightMap" ); LangElement * lmCoord = LangElement::find( "texCoord2" ); + LangElement * lightMapTex = LangElement::find("lightMapTex"); //used only DX11 shaders - lmColor = new GenOp( "tex2D(@, @)", lightMap, lmCoord ); + if (lightMapTex) + lmColor = new GenOp("@.Sample(@, @)", lightMapTex, lightMap, lmCoord); + else + lmColor = new GenOp("tex2D(@, @)", lightMap, lmCoord); } final = new GenOp( "@ * float4(@.rgb,0)", specMul, lmColor ); @@ -138,11 +142,33 @@ void SpecularMapHLSL::processPix( Vector &componentList, const specularMap->uniform = true; specularMap->sampler = true; specularMap->constNum = Var::getTexUnitNum(); - LangElement *texOp = new GenOp( "tex2D(@, @)", specularMap, texCoord ); + Var *specularMapTex = NULL; - Var *specularColor = new Var( "specularColor", "float4" ); + if (mIsDirect3D11) + { + specularMap->setType("SamplerState"); + specularMapTex = new Var; + specularMapTex->setName("specularMapTex"); + specularMapTex->setType("Texture2D"); + specularMapTex->uniform = true; + specularMapTex->texture = true; + specularMapTex->constNum = specularMap->constNum; + } + else + { + specularMap->setType("sampler2D"); + } + + LangElement *texOp = NULL; + + if (specularMapTex) + texOp = new GenOp("@.Sample(@, @)", specularMapTex, specularMap, texCoord); + else + texOp = new GenOp("tex2D(@, @)", specularMap, texCoord); + + Var *specularColor = new Var("specularColor", "float4"); - output = new GenOp( " @ = @;\r\n", new DecOp( specularColor ), texOp ); + output = new GenOp(" @ = @;\r\n", new DecOp(specularColor), texOp); } ShaderFeature::Resources SpecularMapHLSL::getResources( const MaterialFeatureData &fd ) diff --git a/Engine/source/shaderGen/HLSL/shaderCompHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderCompHLSL.cpp index 2d7b80bc9c..6aece4ef0c 100644 --- a/Engine/source/shaderGen/HLSL/shaderCompHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderCompHLSL.cpp @@ -55,6 +55,25 @@ Var * ShaderConnectorHLSL::getIndexedElement( U32 index, RegisterType type, U32 Var *newVar = new Var; mElementList.push_back( newVar ); newVar->setConnectName( "POSITION" ); + newVar->rank = 0; + return newVar; + } + + case RT_VPOS: + { + Var *newVar = new Var; + mElementList.push_back(newVar); + newVar->setConnectName("VPOS"); + newVar->rank = 0; + return newVar; + } + + case RT_SVPOSITION: + { + Var *newVar = new Var; + mElementList.push_back(newVar); + newVar->setConnectName("SV_Position"); + newVar->rank = 0; return newVar; } @@ -63,6 +82,7 @@ Var * ShaderConnectorHLSL::getIndexedElement( U32 index, RegisterType type, U32 Var *newVar = new Var; mElementList.push_back( newVar ); newVar->setConnectName( "NORMAL" ); + newVar->rank = 1; return newVar; } @@ -71,6 +91,7 @@ Var * ShaderConnectorHLSL::getIndexedElement( U32 index, RegisterType type, U32 Var *newVar = new Var; mElementList.push_back( newVar ); newVar->setConnectName( "BINORMAL" ); + newVar->rank = 2; return newVar; } @@ -79,6 +100,7 @@ Var * ShaderConnectorHLSL::getIndexedElement( U32 index, RegisterType type, U32 Var *newVar = new Var; mElementList.push_back( newVar ); newVar->setConnectName( "TANGENT" ); + newVar->rank = 3; return newVar; } @@ -87,14 +109,7 @@ Var * ShaderConnectorHLSL::getIndexedElement( U32 index, RegisterType type, U32 Var *newVar = new Var; mElementList.push_back( newVar ); newVar->setConnectName( "COLOR" ); - return newVar; - } - - case RT_VPOS: - { - Var *newVar = new Var; - mElementList.push_back( newVar ); - newVar->setConnectName( "VPOS" ); + newVar->rank = 4; return newVar; } @@ -113,6 +128,7 @@ Var * ShaderConnectorHLSL::getIndexedElement( U32 index, RegisterType type, U32 newVar->setConnectName( out ); newVar->constNum = index; newVar->arraySize = numElements; + newVar->rank = 5 + index; return newVar; } @@ -124,67 +140,27 @@ Var * ShaderConnectorHLSL::getIndexedElement( U32 index, RegisterType type, U32 return NULL; } + + +S32 QSORT_CALLBACK ShaderConnectorHLSL::_hlsl4VarSort(const void* e1, const void* e2) +{ + Var* a = *((Var **)e1); + Var* b = *((Var **)e2); + + return a->rank - b->rank; +} + void ShaderConnectorHLSL::sortVars() { - if ( GFX->getPixelShaderVersion() >= 2.0 ) - return; - // Sort connector variables - They must be sorted on hardware that is running - // ps 1.4 and below. The reason is that texture coordinate registers MUST - // map exactly to their respective texture stage. Ie. if you have fog - // coordinates being passed into a pixel shader in texture coordinate register - // number 4, the fog texture MUST reside in texture stage 4 for it to work. - // The problem is solved by pushing non-texture coordinate data to the end - // of the structure so that the texture coodinates are all at the "top" of the - // structure in the order that the features are processed. - - // create list of just the texCoords, sorting by 'mapsToSampler' - Vector< Var * > texCoordList; - - // - first pass is just coords mapped to a sampler - for( U32 i=0; imapsToSampler ) - { - texCoordList.push_back( var ); - } - } - - // - next pass is for the others - for( U32 i=0; igetPixelShaderVersion() >= 4.f) { - Var *var = mElementList[i]; - if( dStrstr( (const char *)var->connectName, "TEX" ) && - !var->mapsToSampler ) - { - texCoordList.push_back( var ); - } - } - - // rename the connectNames - for( U32 i=0; isetConnectName( out ); + dQsort((void *)&mElementList[0], mElementList.size(), sizeof(Var *), _hlsl4VarSort); + return; } - // write new, sorted list over old one - if( texCoordList.size() ) - { - U32 index = 0; - - for( U32 i=0; iconnectName, "TEX" ) ) - { - mElementList[i] = texCoordList[index]; - index++; - } - } - } + return; } void ShaderConnectorHLSL::setName( char *newName ) @@ -246,7 +222,7 @@ void ParamsDefHLSL::assignConstantNumbers() Var *var = dynamic_cast(LangElement::elementList[i]); if( var ) { - bool shaderConst = var->uniform && !var->sampler; + bool shaderConst = var->uniform && !var->sampler && !var->texture; AssertFatal((!shaderConst) || var->constSortPos != cspUninit, "Const sort position has not been set, variable will not receive a constant number!!"); if( shaderConst && var->constSortPos == bin) { @@ -328,6 +304,10 @@ void PixelParamsDefHLSL::print( Stream &stream, bool isVerterShader ) { dSprintf( (char*)varNum, sizeof(varNum), ": register(S%d)", var->constNum ); } + else if (var->texture) + { + dSprintf((char*)varNum, sizeof(varNum), ": register(T%d)", var->constNum); + } else { dSprintf( (char*)varNum, sizeof(varNum), ": register(C%d)", var->constNum ); diff --git a/Engine/source/shaderGen/HLSL/shaderCompHLSL.h b/Engine/source/shaderGen/HLSL/shaderCompHLSL.h index 0a3ead4eda..cb4ae5ad15 100644 --- a/Engine/source/shaderGen/HLSL/shaderCompHLSL.h +++ b/Engine/source/shaderGen/HLSL/shaderCompHLSL.h @@ -30,6 +30,8 @@ class ShaderConnectorHLSL : public ShaderConnector { +private: + static S32 QSORT_CALLBACK _hlsl4VarSort(const void* e1, const void* e2); public: // ShaderConnector diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 2ab6a75f00..8878f26004 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -173,6 +173,7 @@ LangElement *ShaderFeatureHLSL::expandNormalMap( LangElement *sampleNormalOp, ShaderFeatureHLSL::ShaderFeatureHLSL() { output = NULL; + mIsDirect3D11 = GFX->getAdapterType() == Direct3D11; } Var * ShaderFeatureHLSL::getVertTexCoord( const String &name ) @@ -354,7 +355,7 @@ Var* ShaderFeatureHLSL::getOutTexCoord( const char *name, if ( useTexAnim ) { - inTex->setType( "float4" ); + inTex->setType( "float2" ); // create texture mat var Var *texMat = new Var; @@ -365,7 +366,7 @@ Var* ShaderFeatureHLSL::getOutTexCoord( const char *name, // Statement allows for casting of different types which // eliminates vector truncation problems. - String statement = String::ToString( " @ = (%s)mul(@, @).xy;\r\n", type ); + String statement = String::ToString(" @ = (%s)mul(@, float4(@,1,1));\r\n", type); meta->addStatement( new GenOp( statement, texCoord, texMat, inTex ) ); } else @@ -464,7 +465,17 @@ Var* ShaderFeatureHLSL::getInVpos( MultiLine *meta, ShaderConnector *connectComp = dynamic_cast( componentList[C_CONNECTOR] ); - if ( GFX->getPixelShaderVersion() >= 3.0f ) + F32 pixelShaderVer = GFX->getPixelShaderVersion(); + + if ( pixelShaderVer >= 4.0f ) + { + inVpos = connectComp->getElement( RT_SVPOSITION ); + inVpos->setName( "vpos" ); + inVpos->setStructName( "IN" ); + inVpos->setType( "float4" ); + return inVpos; + } + else if ( pixelShaderVer >= 3.0f ) { inVpos = connectComp->getElement( RT_VPOS ); inVpos->setName( "vpos" ); @@ -516,15 +527,30 @@ Var* ShaderFeatureHLSL::getInViewToTangent( Vector &componentL Var* ShaderFeatureHLSL::getNormalMapTex() { - Var *normalMap = (Var*)LangElement::find( "bumpMap" ); - if ( !normalMap ) + Var *normalMap = (Var*)LangElement::find("bumpMap"); + if (!normalMap) { normalMap = new Var; - normalMap->setType( "sampler2D" ); - normalMap->setName( "bumpMap" ); + normalMap->setType("sampler2D"); + normalMap->setName("bumpMap"); normalMap->uniform = true; normalMap->sampler = true; normalMap->constNum = Var::getTexUnitNum(); + + // D3D11 + Var* normalMapTex = NULL; + if (GFX->getAdapterType() == Direct3D11) + { + normalMap->setType("SamplerState"); + normalMapTex = new Var; + normalMapTex->setName("bumpMapTex"); + normalMapTex->setType("Texture2D"); + normalMapTex->uniform = true; + normalMapTex->texture = true; + normalMapTex->constNum = normalMap->constNum; + } + + } return normalMap; @@ -780,6 +806,7 @@ Var* ShaderFeatureHLSL::addOutDetailTexCoord( Vector &compon // Grab incoming texture coords. Var *inTex = getVertTexCoord( "texCoord" ); + inTex->setType("float2"); // create detail variable Var *detScale = new Var; @@ -798,8 +825,6 @@ Var* ShaderFeatureHLSL::addOutDetailTexCoord( Vector &compon if ( useTexAnim ) { - inTex->setType( "float4" ); - // Find or create the texture matrix. Var *texMat = (Var*)LangElement::find( "texMat" ); if ( !texMat ) @@ -811,7 +836,7 @@ Var* ShaderFeatureHLSL::addOutDetailTexCoord( Vector &compon texMat->constSortPos = cspPass; } - meta->addStatement( new GenOp( " @ = mul(@, @).xy * @;\r\n", outTex, texMat, inTex, detScale ) ); + meta->addStatement(new GenOp(" @ = mul(@, float4(@,1,1)).xy * @;\r\n", outTex, texMat, inTex, detScale)); } else { @@ -869,6 +894,19 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, diffuseMap->sampler = true; diffuseMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var* diffuseMapTex = NULL; + if (mIsDirect3D11) + { + diffuseMap->setType("SamplerState"); + + diffuseMapTex = new Var; + diffuseMapTex->setName("diffuseMapTex"); + diffuseMapTex->setType("Texture2D"); + diffuseMapTex->uniform = true; + diffuseMapTex->texture = true; + diffuseMapTex->constNum = diffuseMap->constNum; + } + // create sample color Var *diffColor = new Var; diffColor->setType("float4"); @@ -880,13 +918,14 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, if ( fd.features[MFT_CubeMap] ) { - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", - colorDecl, - diffuseMap, - inTex ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @ = @.Sample(@, @);\r\n", colorDecl, diffuseMapTex, diffuseMap, inTex)); + else + meta->addStatement(new GenOp(" @ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex)); + if (!fd.features[MFT_Imposter]) meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); - + meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul, NULL, targ))); } else if(fd.features[MFT_DiffuseMapAtlas]) @@ -958,15 +997,19 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, return; } #endif - - if(is_sm3) + if (mIsDirect3D11) + { + meta->addStatement(new GenOp(" @ = @.SampleLevel(@,@,mipLod);\r\n", + new DecOp(diffColor), diffuseMapTex, diffuseMap, inTex)); + } + else if(is_sm3) { meta->addStatement(new GenOp( " @ = tex2Dlod(@, float4(@, 0.0, mipLod));\r\n", new DecOp(diffColor), diffuseMap, inTex)); } else { - meta->addStatement(new GenOp( " @ = tex2D(@, @);\r\n", + meta->addStatement(new GenOp( " @ = tex2D(@, @);\r\n", new DecOp(diffColor), diffuseMap, inTex)); } if (!fd.features[MFT_Imposter]) @@ -976,7 +1019,11 @@ void DiffuseMapFeatHLSL::processPix( Vector &componentList, } else { - meta->addStatement(new GenOp("@ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex)); + if (mIsDirect3D11) + meta->addStatement(new GenOp("@ = @.Sample(@, @);\r\n", colorDecl, diffuseMapTex, diffuseMap, inTex)); + else + meta->addStatement(new GenOp("@ = tex2D(@, @);\r\n", colorDecl, diffuseMap, inTex)); + if (!fd.features[MFT_Imposter]) meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", diffColor, diffColor)); meta->addStatement(new GenOp(" @;\r\n", assignColor(diffColor, Material::Mul, NULL, targ))); @@ -1067,7 +1114,24 @@ void OverlayTexFeatHLSL::processPix( Vector &componentList, diffuseMap->sampler = true; diffuseMap->constNum = Var::getTexUnitNum(); // used as texture unit num here - LangElement *statement = new GenOp( "tex2D(@, @)", diffuseMap, inTex ); + Var* diffuseMapTex = NULL; + if (mIsDirect3D11) + { + diffuseMap->setType("SamplerState"); + diffuseMapTex = new Var; + diffuseMapTex->setName("overlayMapTex"); + diffuseMapTex->setType("Texture2D"); + diffuseMapTex->uniform = true; + diffuseMapTex->texture = true; + diffuseMapTex->constNum = diffuseMap->constNum; + } + + LangElement *statement = NULL; + if (mIsDirect3D11) + statement = new GenOp("@.Sample(@, @)", diffuseMapTex, diffuseMap, inTex); + else + statement = new GenOp("tex2D(@, @)", diffuseMap, inTex); + output = new GenOp( " @;\r\n", assignColor( statement, Material::LerpAlpha ) ); } @@ -1240,6 +1304,17 @@ void LightmapFeatHLSL::processPix( Vector &componentList, lightMap->sampler = true; lightMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var *lightMapTex = NULL; + if (mIsDirect3D11) + { + lightMap->setType("SamplerState"); + lightMapTex->setName("lightMapTex"); + lightMapTex->setType("Texture2D"); + lightMapTex->uniform = true; + lightMapTex->texture = true; + lightMapTex->constNum = lightMap->constNum; + } + // argh, pixel specular should prob use this too if( fd.features[MFT_NormalMap] ) @@ -1249,7 +1324,10 @@ void LightmapFeatHLSL::processPix( Vector &componentList, lmColor->setType( "float4" ); LangElement *lmColorDecl = new DecOp( lmColor ); - output = new GenOp( " @ = tex2D(@, @);\r\n", lmColorDecl, lightMap, inTex ); + if (mIsDirect3D11) + output = new GenOp(" @ = @.Sample(@, @);\r\n", lmColorDecl, lightMapTex, lightMap, inTex); + else + output = new GenOp(" @ = tex2D(@, @);\r\n", lmColorDecl, lightMap, inTex); return; } @@ -1269,16 +1347,26 @@ void LightmapFeatHLSL::processPix( Vector &componentList, // Lightmap has already been included in the advanced light bin, so // no need to do any sampling or anything - if(bPreProcessedLighting) - statement = new GenOp( "float4(@, 1.0)", inColor ); + if (bPreProcessedLighting) + statement = new GenOp("float4(@, 1.0)", inColor); else - statement = new GenOp( "tex2D(@, @) + float4(@.rgb, 0.0)", lightMap, inTex, inColor ); + { + if (mIsDirect3D11) + statement = new GenOp("@.Sample(@, @) + float4(@.rgb, 0.0)", lightMapTex, lightMap, inTex, inColor); + else + statement = new GenOp("tex2D(@, @) + float4(@.rgb, 0.0)", lightMap, inTex, inColor); + } } } // If we still don't have it... then just sample the lightmap. - if ( !statement ) - statement = new GenOp( "tex2D(@, @)", lightMap, inTex ); + if (!statement) + { + if (mIsDirect3D11) + statement = new GenOp("@.Sample(@, @)", lightMapTex, lightMap, inTex); + else + statement = new GenOp("tex2D(@, @)", lightMap, inTex); + } // Assign to proper render target MultiLine *meta = new MultiLine; @@ -1365,6 +1453,18 @@ void TonemapFeatHLSL::processPix( Vector &componentList, toneMap->sampler = true; toneMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var *toneMapTex = NULL; + if (mIsDirect3D11) + { + toneMap->setType("SamplerState"); + toneMapTex = new Var; + toneMapTex->setName("toneMapTex"); + toneMapTex->setType("Texture2D"); + toneMapTex->uniform = true; + toneMapTex->texture = true; + toneMapTex->constNum = toneMap->constNum; + } + MultiLine * meta = new MultiLine; // First get the toneMap color @@ -1373,7 +1473,10 @@ void TonemapFeatHLSL::processPix( Vector &componentList, toneMapColor->setName( "toneMapColor" ); LangElement *toneMapColorDecl = new DecOp( toneMapColor ); - meta->addStatement( new GenOp( " @ = tex2D(@, @);\r\n", toneMapColorDecl, toneMap, inTex2 ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @ = @.Sample(@, @);\r\n", toneMapColorDecl, toneMapTex, toneMap, inTex2)); + else + meta->addStatement(new GenOp(" @ = tex2D(@, @);\r\n", toneMapColorDecl, toneMap, inTex2)); // We do a different calculation if there is a diffuse map or not Material::BlendOp blendOp = Material::Mul; @@ -1602,6 +1705,18 @@ void DetailFeatHLSL::processPix( Vector &componentList, detailMap->sampler = true; detailMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var* detailMapTex = NULL; + if (mIsDirect3D11) + { + detailMap->setType("SamplerState"); + detailMapTex = new Var; + detailMapTex->setName("detailMapTex"); + detailMapTex->setType("Texture2D"); + detailMapTex->uniform = true; + detailMapTex->texture = true; + detailMapTex->constNum = detailMap->constNum; + } + // We're doing the standard greyscale detail map // technique which can darken and lighten the // diffuse texture. @@ -1609,7 +1724,12 @@ void DetailFeatHLSL::processPix( Vector &componentList, // TODO: We could add a feature to toggle between this // and a simple multiplication with the detail map. - LangElement *statement = new GenOp( "( tex2D(@, @) * 2.0 ) - 1.0", detailMap, inTex ); + LangElement *statement = NULL; + if (mIsDirect3D11) + statement = new GenOp("( @.Sample(@, @) * 2.0 ) - 1.0", detailMapTex, detailMap, inTex); + else + statement = new GenOp("( tex2D(@, @) * 2.0 ) - 1.0", detailMap, inTex); + if ( fd.features[MFT_isDeferred]) output = new GenOp( " @;\r\n", assignColor( statement, Material::Add, NULL, ShaderFeature::RenderTarget1 ) ); else @@ -1665,7 +1785,12 @@ void VertPositionHLSL::processVert( Vector &componentList, // grab connector position ShaderConnector *connectComp = dynamic_cast( componentList[C_CONNECTOR] ); - Var *outPosition = connectComp->getElement( RT_POSITION ); + Var *outPosition = NULL; + if (mIsDirect3D11) + outPosition = connectComp->getElement(RT_SVPOSITION); + else + outPosition = connectComp->getElement(RT_POSITION); + outPosition->setName( "hpos" ); outPosition->setStructName( "OUT" ); @@ -1679,6 +1804,19 @@ void VertPositionHLSL::processVert( Vector &componentList, output = meta; } +void VertPositionHLSL::processPix( Vector &componentList, + const MaterialFeatureData &fd) +{ + if (mIsDirect3D11) + { + // grab connector position + ShaderConnector *connectComp = dynamic_cast(componentList[C_CONNECTOR]); + Var *outPosition = connectComp->getElement(RT_SVPOSITION); + outPosition->setName("vpos"); + outPosition->setStructName("IN"); + } +} + //**************************************************************************** // Reflect Cubemap @@ -1738,8 +1876,11 @@ void ReflectCubeFeatHLSL::processVert( Vector &componentList, cubeNormal->setType( "float3" ); LangElement *cubeNormDecl = new DecOp( cubeNormal ); - meta->addStatement( new GenOp( " @ = normalize( mul(@, float4(normalize(@),0.0)).xyz );\r\n", - cubeNormDecl, cubeTrans, inNormal ) ); + meta->addStatement(new GenOp(" @ = ( mul( (@), float4(@, 0) ) ).xyz;\r\n", + cubeNormDecl, cubeTrans, inNormal)); + + meta->addStatement(new GenOp(" @ = bool(length(@)) ? normalize(@) : @;\r\n", + cubeNormal, cubeNormal, cubeNormal, cubeNormal)); // grab the eye position Var *eyePos = (Var*)LangElement::find( "eyePosWorld" ); @@ -1782,10 +1923,10 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, // current pass - we need to add one to the current pass to use // its alpha channel as a gloss map. if( !fd.features[MFT_DiffuseMap] && - !fd.features[MFT_NormalMap] ) + !fd.features[MFT_NormalMap]) { if( fd.materialFeatures[MFT_DiffuseMap] || - fd.materialFeatures[MFT_NormalMap] ) + fd.materialFeatures[MFT_NormalMap]) { // grab connector texcoord register Var *inTex = getInTexCoord( "texCoord", "float2", true, componentList ); @@ -1797,6 +1938,19 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, newMap->uniform = true; newMap->sampler = true; newMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + + Var* glowMapTex = NULL; + if (mIsDirect3D11) + { + newMap->setType("SamplerState"); + + glowMapTex = new Var; + glowMapTex->setName("glowMapTex"); + glowMapTex->setType("Texture2D"); + glowMapTex->uniform = true; + glowMapTex->texture = true; + glowMapTex->constNum = newMap->constNum; + } // create sample color Var *color = new Var; @@ -1806,7 +1960,10 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, glossColor = color; - meta->addStatement( new GenOp( " @ = tex2D( @, @ );\r\n", colorDecl, newMap, inTex ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @ = @.Sample( @, @ );\r\n", colorDecl, glowMapTex, newMap, inTex)); + else + meta->addStatement(new GenOp(" @ = tex2D( @, @ );\r\n", colorDecl, newMap, inTex)); } } else @@ -1837,6 +1994,18 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, cubeMap->sampler = true; cubeMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + Var* cubeMapTex = NULL; + if (mIsDirect3D11) + { + cubeMap->setType("SamplerState"); + cubeMapTex = new Var; + cubeMapTex->setName("cubeMapTex"); + cubeMapTex->setType("TextureCube"); // cubeMapTex->setType("TextureCube"); + cubeMapTex->uniform = true; + cubeMapTex->texture = true; + cubeMapTex->constNum = cubeMap->constNum; + } + // TODO: Restore the lighting attenuation here! Var *attn = NULL; //if ( fd.materialFeatures[MFT_DynamicLight] ) @@ -1855,15 +2024,37 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, //LangElement *texCube = new GenOp( "texCUBElod( @, float4(@, min((1.0 - (@ / 128.0)) * 11.0 + 1.0, 8.0)) )", cubeMap, reflectVec, specPower ); if (fd.features[MFT_DeferredSpecMap]) - texCube = new GenOp("texCUBElod( @, float4(@, (@.a*5)) )", cubeMap, reflectVec, matinfo); + { + if (mIsDirect3D11) + texCube = new GenOp("@.SampleLevel( @, @, @.a*5)", cubeMapTex, cubeMap, reflectVec, matinfo); + else + texCube = new GenOp("texCUBElod( @, float4(@, (@.a*5)) )", cubeMap, reflectVec, matinfo); + } else - texCube = new GenOp("texCUBElod( @, float4(@, ((1.0-@.a)*6)) )", cubeMap, reflectVec, matinfo); + { + if (mIsDirect3D11) + texCube = new GenOp("@.SampleLevel( @, @, (1.0-@.a)*6 )", cubeMapTex, cubeMap, reflectVec, matinfo); + else + texCube = new GenOp("texCUBElod( @, float4(@, ((1.0-@.a)*6)) )", cubeMap, reflectVec, matinfo); + } } else + { if (glossColor) //failing that, rtry and find color data - texCube = new GenOp("texCUBElod( @, float4(@, @.a*5))", cubeMap, reflectVec, glossColor); + { + if (mIsDirect3D11) + texCube = new GenOp("@.SampleLevel( @, @, @.a*5)", cubeMapTex, cubeMap, reflectVec, glossColor); + else + texCube = new GenOp("texCUBElod( @, float4(@, @.a*5))", cubeMap, reflectVec, glossColor); + } else //failing *that*, just draw the cubemap - texCube = new GenOp("texCUBE( @, @)", cubeMap, reflectVec); + { + if (mIsDirect3D11) + texCube = new GenOp("@.Sample( @, @ )", cubeMapTex, cubeMap, reflectVec); + else + texCube = new GenOp("texCUBE( @, @ )", cubeMap, reflectVec); + } + } LangElement *lerpVal = NULL; Material::BlendOp blendOp = Material::LerpAlpha; @@ -1898,7 +2089,7 @@ void ReflectCubeFeatHLSL::processPix( Vector &componentList, if (fd.features[MFT_DeferredSpecMap]) meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); else - meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b));\r\n", targ, targ, texCube, lerpVal)); + meta->addStatement(new GenOp(" @.rgb = lerp( @.rgb, (@).rgb, (@.b*128/5));\r\n", targ, targ, texCube, lerpVal)); } else meta->addStatement( new GenOp( " @;\r\n", assignColor( texCube, blendOp, lerpVal ) ) ); @@ -1951,7 +2142,7 @@ void ReflectCubeFeatHLSL::setTexData( Material::StageData &stageDat, } } } - + if( stageDat.getCubemap() ) { passData.mCubeMap = stageDat.getCubemap(); @@ -2397,7 +2588,8 @@ void VisibilityFeatHLSL::processPix( Vector &componentList, // Everything else does a fizzle. Var *vPos = getInVpos( meta, componentList ); - meta->addStatement( new GenOp( " fizzle( @, @ );\r\n", vPos, visibility ) ); + // vpos is a float4 in d3d11 + meta->addStatement( new GenOp( " fizzle( @.xy, @ );\r\n", vPos, visibility ) ); } ShaderFeature::Resources VisibilityFeatHLSL::getResources( const MaterialFeatureData &fd ) diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h index b09d4d561a..673970945f 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.h @@ -33,6 +33,8 @@ struct RenderPassData; class ShaderFeatureHLSL : public ShaderFeature { +protected: + bool mIsDirect3D11; public: ShaderFeatureHLSL(); @@ -188,6 +190,9 @@ class VertPositionHLSL : public ShaderFeatureHLSL public: virtual void processVert( Vector &componentList, const MaterialFeatureData &fd ); + + virtual void processPix( Vector &componentList, + const MaterialFeatureData &fd); virtual String getName() { diff --git a/Engine/source/shaderGen/HLSL/shaderGenHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderGenHLSL.cpp index 23ca8137da..49487624f3 100644 --- a/Engine/source/shaderGen/HLSL/shaderGenHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderGenHLSL.cpp @@ -63,21 +63,33 @@ void ShaderGenPrinterHLSL::printPixelShaderOutputStruct(Stream& stream, const Ma for( U32 i = 0; i < FEATUREMGR->getFeatureCount(); i++ ) { const FeatureInfo &info = FEATUREMGR->getAt( i ); - if( featureData.features.hasFeature( *info.type ) ) + if ( featureData.features.hasFeature( *info.type ) ) numMRTs |= info.feature->getOutputTargets( featureData ); } - WRITESTR( "struct Fragout\r\n" ); - WRITESTR( "{\r\n" ); - WRITESTR( " float4 col : COLOR0;\r\n" ); - for( U32 i = 1; i < 4; i++ ) + WRITESTR("struct Fragout\r\n"); + WRITESTR("{\r\n"); + if (GFX->getAdapterType() == Direct3D11) { - if( numMRTs & 1 << i ) - WRITESTR( avar( " float4 col%d : COLOR%d;\r\n", i, i ) ); + WRITESTR(" float4 col : SV_Target0;\r\n"); + for (U32 i = 1; i < 4; i++) + { + if (numMRTs & 1 << i) + WRITESTR(avar(" float4 col%d : SV_Target%d;\r\n", i, i)); + } } - WRITESTR( "};\r\n" ); - WRITESTR( "\r\n" ); - WRITESTR( "\r\n" ); + else + { + WRITESTR(" float4 col : COLOR0;\r\n"); + for (U32 i = 1; i < 4; i++) + { + if (numMRTs & 1 << i) + WRITESTR(avar(" float4 col%d : COLOR%d;\r\n", i, i)); + } + } + WRITESTR("};\r\n"); + WRITESTR("\r\n"); + WRITESTR("\r\n"); } void ShaderGenPrinterHLSL::printPixelShaderCloser(Stream& stream) @@ -141,8 +153,8 @@ ShaderComponent* ShaderGenComponentFactoryHLSL::createVertexInputConnector( cons } else if ( element.isSemantic( GFXSemantic::TANGENTW ) ) { - var = vertComp->getIndexedElement( element.getSemanticIndex(), RT_TEXCOORD ); - var->setName( "tangentW" ); + var = vertComp->getIndexedElement(element.getSemanticIndex(), RT_TEXCOORD); + var->setName("tangentW"); } else if ( element.isSemantic( GFXSemantic::BINORMAL ) ) { diff --git a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp index fd30656bd0..9e3805cdc9 100644 --- a/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp +++ b/Engine/source/shaderGen/HLSL/shaderGenHLSLInit.cpp @@ -119,6 +119,7 @@ MODULE_BEGIN( ShaderGenHLSL ) sInitDelegate.bind(_initShaderGenHLSL); SHADERGEN->registerInitDelegate(Direct3D9, sInitDelegate); SHADERGEN->registerInitDelegate(Direct3D9_360, sInitDelegate); + SHADERGEN->registerInitDelegate(Direct3D11, sInitDelegate); } MODULE_END; diff --git a/Engine/source/shaderGen/langElement.cpp b/Engine/source/shaderGen/langElement.cpp index 9989eb2d28..9a38cdd31d 100644 --- a/Engine/source/shaderGen/langElement.cpp +++ b/Engine/source/shaderGen/langElement.cpp @@ -99,6 +99,8 @@ Var::Var() sampler = false; mapsToSampler = false; arraySize = 1; + texture = false; + rank = 0; } Var::Var( const char *inName, const char *inType ) @@ -113,6 +115,8 @@ Var::Var( const char *inName, const char *inType ) texCoordNum = 0; constSortPos = cspUninit; arraySize = 1; + texture = false; + rank = 0; setName( inName ); setType( inType ); diff --git a/Engine/source/shaderGen/langElement.h b/Engine/source/shaderGen/langElement.h index c338aacb88..a1e8c96ad6 100644 --- a/Engine/source/shaderGen/langElement.h +++ b/Engine/source/shaderGen/langElement.h @@ -120,8 +120,10 @@ struct Var : public LangElement bool vertData; // argument coming from vertex data bool connector; // variable that will be passed to pixel shader bool sampler; // texture + bool texture; //for D3D11 texture variables bool mapsToSampler; // for ps 1.x shaders - texcoords must be mapped to same sampler stage U32 arraySize; // 1 = no array, > 1 array of "type" + U32 rank; // optional rank system to assist in sorting vars if needed static U32 texUnitCount; static U32 getTexUnitNum(U32 numElements = 1); diff --git a/Engine/source/shaderGen/shaderFeature.cpp b/Engine/source/shaderGen/shaderFeature.cpp index 7e22f72adb..113b05a429 100644 --- a/Engine/source/shaderGen/shaderFeature.cpp +++ b/Engine/source/shaderGen/shaderFeature.cpp @@ -84,4 +84,9 @@ Var* ShaderFeature::findOrCreateLocal( const char *name, } return outVar; +} + +void ShaderFeature::setInstancingFormat(GFXVertexFormat *format) +{ + mInstancingFormat = format; } \ No newline at end of file diff --git a/Engine/source/shaderGen/shaderFeature.h b/Engine/source/shaderGen/shaderFeature.h index c6ac4955db..03426b7330 100644 --- a/Engine/source/shaderGen/shaderFeature.h +++ b/Engine/source/shaderGen/shaderFeature.h @@ -99,11 +99,10 @@ class ShaderFeature /// S32 mProcessIndex; -public: - - // TODO: Make this protected and give it a proper API. GFXVertexFormat *mInstancingFormat; +public: + //************************************************************************** /*! The Resources structure is used by ShaderFeature to indicate how many @@ -293,6 +292,8 @@ class ShaderFeature static Var* findOrCreateLocal( const char *name, const char *type, MultiLine *multi ); + // Set the instancing format + void setInstancingFormat(GFXVertexFormat *format); }; #endif // _SHADERFEATURE_H_ diff --git a/Engine/source/shaderGen/shaderGen.cpp b/Engine/source/shaderGen/shaderGen.cpp index 81e7f644fd..eb7685b392 100644 --- a/Engine/source/shaderGen/shaderGen.cpp +++ b/Engine/source/shaderGen/shaderGen.cpp @@ -264,7 +264,7 @@ void ShaderGen::_processVertFeatures( Vector ¯os, bool macro if ( macrosOnly ) continue; - feature->mInstancingFormat = &mInstancingFormat; + feature->setInstancingFormat( &mInstancingFormat ); feature->processVert( mComponents, mFeatureData ); String line; @@ -304,7 +304,7 @@ void ShaderGen::_processPixFeatures( Vector ¯os, bool macros if ( macrosOnly ) continue; - feature->mInstancingFormat = &mInstancingFormat; + feature->setInstancingFormat( &mInstancingFormat ); feature->processPix( mComponents, mFeatureData ); String line; @@ -488,8 +488,7 @@ GFXShader* ShaderGen::getShader( const MaterialFeatureData &featureData, const G generateShader( featureData, vertFile, pixFile, &pixVersion, vertexFormat, cacheKey, shaderMacros ); GFXShader *shader = GFX->createShader(); - shader->mInstancingFormat.copy( mInstancingFormat ); // TODO: Move to init() below! - if ( !shader->init( vertFile, pixFile, pixVersion, shaderMacros, samplers ) ) + if (!shader->init(vertFile, pixFile, pixVersion, shaderMacros, samplers, &mInstancingFormat)) { delete shader; return NULL; diff --git a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp index 7761a8545d..4945d4c883 100644 --- a/Engine/source/terrain/glsl/terrFeatureGLSL.cpp +++ b/Engine/source/terrain/glsl/terrFeatureGLSL.cpp @@ -396,9 +396,6 @@ void TerrainDetailMapFeatGLSL::processPix( Vector &component const S32 detailIndex = getProcessIndex(); Var *inTex = getVertTexCoord( "texCoord" ); - // new terrain - bool hasNormal = fd.features.hasFeature(MFT_TerrainNormalMap, detailIndex); - MultiLine *meta = new MultiLine; // We need the negative tangent space view vector @@ -490,7 +487,6 @@ void TerrainDetailMapFeatGLSL::processPix( Vector &component blendDepth->constSortPos = cspPrimitive; } - Var *baseColor = (Var*)LangElement::find("baseColor"); ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; if(fd.features.hasFeature( MFT_DeferredTerrainDetailMap )) diff --git a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp index b0e16bb646..772c822b17 100644 --- a/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp +++ b/Engine/source/terrain/hlsl/terrFeatureHLSL.cpp @@ -38,7 +38,7 @@ namespace { void register_hlsl_shader_features_for_terrain(GFXAdapterType type) { - if(type != Direct3D9 && type != Direct3D9_360) + if (type != Direct3D9 && type != Direct3D9_360 && type != Direct3D11) return; FEATUREMGR->registerFeature( MFT_TerrainBaseMap, new TerrainBaseMapFeatHLSL ); @@ -70,9 +70,9 @@ MODULE_END; TerrainFeatHLSL::TerrainFeatHLSL() : mTorqueDep( "shaders/common/torque.hlsl" ) - { +{ addDependency( &mTorqueDep ); - } +} Var* TerrainFeatHLSL::_getUniformVar( const char *name, const char *type, ConstantSortPosition csp ) { @@ -129,14 +129,18 @@ Var* TerrainFeatHLSL::_getInMacroCoord( Vector &componentList Var* TerrainFeatHLSL::_getNormalMapTex() { - String name( String::ToString( "normalMap%d", getProcessIndex() ) ); - Var *normalMap = (Var*)LangElement::find( name ); + String name(String::ToString("normalMap%d", getProcessIndex())); + Var *normalMap = (Var*)LangElement::find(name); - if ( !normalMap ) + if (!normalMap) { normalMap = new Var; - normalMap->setType( "sampler2D" ); - normalMap->setName( name ); + if (mIsDirect3D11) + normalMap->setType("SamplerState"); + else + normalMap->setType("sampler2D"); + + normalMap->setName(name); normalMap->uniform = true; normalMap->sampler = true; normalMap->constNum = Var::getTexUnitNum(); @@ -267,12 +271,27 @@ void TerrainBaseMapFeatHLSL::processPix( Vector &componentLis Var *baseColor = new Var; baseColor->setType( "float4" ); baseColor->setName( "baseColor" ); - meta->addStatement( new GenOp( " @ = tex2D( @, @.xy );\r\n", new DecOp( baseColor ), diffuseMap, texCoord ) ); + if (mIsDirect3D11) + { + diffuseMap->setType("SamplerState"); + Var *diffuseTex = new Var; + diffuseTex->setType("Texture2D"); + diffuseTex->setName("baseTexture"); + diffuseTex->uniform = true; + diffuseTex->texture = true; + diffuseTex->constNum = diffuseMap->constNum; + meta->addStatement(new GenOp(" @ = @.Sample( @, @.xy );\r\n", new DecOp(baseColor), diffuseTex, diffuseMap, texCoord)); + } + else + { + meta->addStatement(new GenOp(" @ = tex2D( @, @.xy );\r\n", new DecOp(baseColor), diffuseMap, texCoord)); + } + meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", baseColor, baseColor)); - ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; + ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; - if (fd.features.hasFeature(MFT_isDeferred)) + if (fd.features.hasFeature(MFT_isDeferred)) { target= ShaderFeature::RenderTarget1; } @@ -433,9 +452,25 @@ void TerrainDetailMapFeatHLSL::processPix( Vector &component layerTex->sampler = true; layerTex->constNum = Var::getTexUnitNum(); - // Read the layer texture to get the samples. - meta->addStatement( new GenOp( " @ = round( tex2D( @, @.xy ) * 255.0f );\r\n", - new DecOp( layerSample ), layerTex, inTex ) ); + if (mIsDirect3D11) + { + layerTex->setType("SamplerState"); + Var* layerTexObj = new Var; + layerTexObj->setName("layerTexObj"); + layerTexObj->setType("Texture2D"); + layerTexObj->uniform = true; + layerTexObj->texture = true; + layerTexObj->constNum = layerTex->constNum; + // Read the layer texture to get the samples. + meta->addStatement(new GenOp(" @ = round( @.Sample( @, @.xy ) * 255.0f );\r\n", + new DecOp(layerSample), layerTexObj, layerTex, inTex)); + } + else + { + // Read the layer texture to get the samples. + meta->addStatement(new GenOp(" @ = round( tex2D( @, @.xy ) * 255.0f );\r\n", + new DecOp(layerSample), layerTex, inTex)); + } } Var *layerSize = (Var*)LangElement::find( "layerSize" ); @@ -478,21 +513,52 @@ void TerrainDetailMapFeatHLSL::processPix( Vector &component // If we had a parallax feature... then factor in the parallax // amount so that it fades out with the layer blending. - if ( fd.features.hasFeature( MFT_TerrainParallaxMap, detailIndex ) ) + if (fd.features.hasFeature(MFT_TerrainParallaxMap, detailIndex)) { // Get the rest of our inputs. Var *normalMap = _getNormalMapTex(); - // Call the library function to do the rest. - if(fd.features.hasFeature( MFT_IsDXTnm, detailIndex ) ) + if (mIsDirect3D11) { - meta->addStatement( new GenOp( " @.xy += parallaxOffsetDxtnm( @, @.xy, @, @.z * @ );\r\n", - inDet, normalMap, inDet, negViewTS, detailInfo, detailBlend ) ); + String name(String::ToString("normalMapTex%d", getProcessIndex())); + Var *normalMapTex = (Var*)LangElement::find(name); + + if (!normalMapTex) + { + normalMapTex = new Var; + normalMapTex->setName(String::ToString("normalMapTex%d", getProcessIndex())); + normalMapTex->setType("Texture2D"); + normalMapTex->uniform = true; + normalMapTex->texture = true; + normalMapTex->constNum = normalMap->constNum; + } + + // Call the library function to do the rest. + if (fd.features.hasFeature(MFT_IsDXTnm, detailIndex)) + { + meta->addStatement(new GenOp(" @.xy += parallaxOffsetDxtnm( @, @, @.xy, @, @.z * @ );\r\n", + inDet, normalMapTex, normalMap, inDet, negViewTS, detailInfo, detailBlend)); + } + else + { + meta->addStatement(new GenOp(" @.xy += parallaxOffset( @, @, @.xy, @, @.z * @ );\r\n", + inDet, normalMapTex, normalMap, inDet, negViewTS, detailInfo, detailBlend)); + } + } else { - meta->addStatement( new GenOp( " @.xy += parallaxOffset( @, @.xy, @, @.z * @ );\r\n", - inDet, normalMap, inDet, negViewTS, detailInfo, detailBlend ) ); + // Call the library function to do the rest. + if (fd.features.hasFeature(MFT_IsDXTnm, detailIndex)) + { + meta->addStatement(new GenOp(" @.xy += parallaxOffsetDxtnm( @, @.xy, @, @.z * @ );\r\n", + inDet, normalMap, inDet, negViewTS, detailInfo, detailBlend)); + } + else + { + meta->addStatement(new GenOp(" @.xy += parallaxOffset( @, @.xy, @, @.z * @ );\r\n", + inDet, normalMap, inDet, negViewTS, detailInfo, detailBlend)); + } } } @@ -531,27 +597,46 @@ void TerrainDetailMapFeatHLSL::processPix( Vector &component // //Sampled detail texture that is not expanded - Var *detailTex = new Var; - detailTex->setType("float4"); - detailTex->setName("detailTex"); - meta->addStatement( new GenOp( " @;\r\n", new DecOp( detailTex ) ) ); - - if ( fd.features.hasFeature( MFT_TerrainSideProject, detailIndex ) ) + if (mIsDirect3D11) { - meta->addStatement( new GenOp(" @ = lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z);\r\n",detailTex,detailMap,inDet,detailMap,inDet,inTex)); - meta->addStatement( new GenOp( " @ = ( @ * 2.0 ) - 1.0;\r\n", detailColor, detailTex) ); + detailMap->setType("SamplerState"); + Var* detailTex = new Var; + detailTex->setName(String::ToString("detailTex%d", detailIndex)); + detailTex->setType("Texture2D"); + detailTex->uniform = true; + detailTex->texture = true; + detailTex->constNum = detailMap->constNum; + + if (fd.features.hasFeature(MFT_TerrainSideProject, detailIndex)) + { + + meta->addStatement(new GenOp(" @ = ( lerp( @.Sample( @, @.yz ), @.Sample( @, @.xz ), @.z ) * 2.0 ) - 1.0;\r\n", + detailColor, detailTex, detailMap, inDet, detailTex, detailMap, inDet, inTex)); + } + else + { + meta->addStatement(new GenOp(" @ = ( @.Sample( @, @.xy ) * 2.0 ) - 1.0;\r\n", + detailColor, detailTex, detailMap, inDet)); + } } else { - meta->addStatement( new GenOp(" @ = tex2D(@,@.xy);\r\n",detailTex,detailMap,inDet)); - meta->addStatement( new GenOp( " @ = ( @ * 2.0 ) - 1.0;\r\n", - detailColor, detailTex) ); + if (fd.features.hasFeature(MFT_TerrainSideProject, detailIndex)) + { + + meta->addStatement(new GenOp(" @ = ( lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z ) * 2.0 ) - 1.0;\r\n", + detailColor, detailMap, inDet, detailMap, inDet, inTex)); + } + else + { + meta->addStatement(new GenOp(" @ = ( tex2D( @, @.xy ) * 2.0 ) - 1.0;\r\n", + detailColor, detailMap, inDet)); + } } meta->addStatement( new GenOp( " @ *= @.y * @.w;\r\n", detailColor, detailInfo, inDet ) ); - Var *baseColor = (Var*)LangElement::find( "baseColor" ); ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; if(fd.features.hasFeature( MFT_DeferredTerrainDetailMap )) @@ -718,8 +803,21 @@ void TerrainMacroMapFeatHLSL::processPix( Vector &componentL layerTex->constNum = Var::getTexUnitNum(); // Read the layer texture to get the samples. - meta->addStatement( new GenOp( " @ = round( tex2D( @, @.xy ) * 255.0f );\r\n", - new DecOp( layerSample ), layerTex, inTex ) ); + if (mIsDirect3D11) + { + layerTex->setType("SamplerState"); + Var *layerTexObj = new Var; + layerTexObj->setType("Texture2D"); + layerTexObj->setName("macroLayerTexObj"); + layerTexObj->uniform = true; + layerTexObj->texture = true; + layerTexObj->constNum = layerTex->constNum; + meta->addStatement(new GenOp(" @ = round( @.Sample( @, @.xy ) * 255.0f );\r\n", + new DecOp(layerSample), layerTexObj, layerTex, inTex)); + } + else + meta->addStatement(new GenOp(" @ = round( tex2D( @, @.xy ) * 255.0f );\r\n", + new DecOp(layerSample), layerTex, inTex)); } Var *layerSize = (Var*)LangElement::find( "layerSize" ); @@ -752,7 +850,6 @@ void TerrainMacroMapFeatHLSL::processPix( Vector &componentL if ( !blendTotal ) { blendTotal = new Var; - //blendTotal->setName( "blendTotal" ); blendTotal->setName( "blendTotal" ); blendTotal->setType( "float" ); meta->addStatement( new GenOp( " @ = 0;\r\n", new DecOp( blendTotal ) ) ); @@ -778,6 +875,20 @@ void TerrainMacroMapFeatHLSL::processPix( Vector &componentL detailMap->sampler = true; detailMap->constNum = Var::getTexUnitNum(); // used as texture unit num here + //Create texture object for directx 11 + Var *detailTex = NULL; + if (mIsDirect3D11) + { + detailMap->setType("SamplerState"); + detailTex = new Var; + detailTex->setName(String::ToString("macroMapTex%d", detailIndex)); + detailTex->setType("Texture2D"); + detailTex->uniform = true; + detailTex->texture = true; + detailTex->constNum = detailMap->constNum; + + } + // If we're using SM 3.0 then take advantage of // dynamic branching to skip layers per-pixel. if ( GFX->getPixelShaderVersion() >= 3.0f ) @@ -792,22 +903,30 @@ void TerrainMacroMapFeatHLSL::processPix( Vector &componentL // We take two color samples and lerp between them for // side projection layers... else a single sample. // - if ( fd.features.hasFeature( MFT_TerrainSideProject, detailIndex ) ) + if (fd.features.hasFeature(MFT_TerrainSideProject, detailIndex)) { - meta->addStatement( new GenOp( " @ = ( lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z ) * 2.0 ) - 1.0;\r\n", - detailColor, detailMap, inDet, detailMap, inDet, inTex ) ); + if (mIsDirect3D11) + { + meta->addStatement(new GenOp(" @ = ( lerp( @.Sample( @, @.yz ), @.Sample( @, @.xz ), @.z ) * 2.0 ) - 1.0;\r\n", + detailColor, detailTex, detailMap, inDet, detailTex, detailMap, inDet, inTex)); + } + else + meta->addStatement(new GenOp(" @ = ( lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z ) * 2.0 ) - 1.0;\r\n", + detailColor, detailMap, inDet, detailMap, inDet, inTex)); } else { - meta->addStatement( new GenOp( " @ = ( tex2D( @, @.xy ) * 2.0 ) - 1.0;\r\n", - detailColor, detailMap, inDet ) ); + if (mIsDirect3D11) + meta->addStatement(new GenOp(" @ = ( @.Sample( @, @.xy ) * 2.0 ) - 1.0;\r\n", + detailColor, detailTex, detailMap, inDet)); + else + meta->addStatement(new GenOp(" @ = ( tex2D( @, @.xy ) * 2.0 ) - 1.0;\r\n", + detailColor, detailMap, inDet)); } meta->addStatement( new GenOp( " @ *= @.y * @.w;\r\n", detailColor, detailInfo, inDet ) ); - Var *baseColor = (Var*)LangElement::find( "baseColor" ); - ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; if(fd.features.hasFeature(MFT_DeferredTerrainMacroMap)) @@ -907,13 +1026,39 @@ void TerrainNormalMapFeatHLSL::processPix( Vector &component // We take two normal samples and lerp between them for // side projection layers... else a single sample. LangElement *texOp; - if ( fd.features.hasFeature( MFT_TerrainSideProject, normalIndex ) ) + if (mIsDirect3D11) { - texOp = new GenOp( "lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z )", - normalMap, inDet, normalMap, inDet, inTex ); + String name(String::ToString("normalMapTex%d", getProcessIndex())); + Var *normalMapTex = (Var*)LangElement::find(name); + if (!normalMapTex) + { + normalMapTex = new Var; + normalMapTex->setName(String::ToString("normalMapTex%d", getProcessIndex())); + normalMapTex->setType("Texture2D"); + normalMapTex->uniform = true; + normalMapTex->texture = true; + normalMapTex->constNum = normalMap->constNum; + } + if (fd.features.hasFeature(MFT_TerrainSideProject, normalIndex)) + { + texOp = new GenOp("lerp( @.Sample( @, @.yz ), @.Sample( @, @.xz ), @.z )", + normalMapTex, normalMap, inDet, normalMapTex, normalMap, inDet, inTex); + } + else + texOp = new GenOp("@.Sample(@, @.xy)", normalMapTex, normalMap, inDet); + } + else - texOp = new GenOp( "tex2D(@, @.xy)", normalMap, inDet ); + { + if (fd.features.hasFeature(MFT_TerrainSideProject, normalIndex)) + { + texOp = new GenOp("lerp( tex2D( @, @.yz ), tex2D( @, @.xz ), @.z )", + normalMap, inDet, normalMap, inDet, inTex); + } + else + texOp = new GenOp("tex2D(@, @.xy)", normalMap, inDet); + } // create bump normal Var *bumpNorm = new Var; @@ -991,7 +1136,20 @@ void TerrainLightMapFeatHLSL::processPix( Vector &componentLis meta->addStatement( new GenOp( " @ = 1;\r\n", new DecOp( lightMask ) ) ); } - meta->addStatement( new GenOp( " @[0] = tex2D( @, @.xy ).r;\r\n", lightMask, lightMap, inTex ) ); + if (mIsDirect3D11) + { + lightMap->setType("SamplerState"); + Var* lightMapTex = new Var; + lightMapTex->setName("lightMapTexObj"); + lightMapTex->setType("Texture2D"); + lightMapTex->uniform = true; + lightMapTex->texture = true; + lightMapTex->constNum = lightMap->constNum; + meta->addStatement(new GenOp(" @[0] = @.Sample( @, @.xy ).r;\r\n", lightMask, lightMapTex, lightMap, inTex)); + } + else + meta->addStatement(new GenOp(" @[0] = tex2D( @, @.xy ).r;\r\n", lightMask, lightMap, inTex)); + output = meta; } diff --git a/Engine/source/terrain/terrRender.cpp b/Engine/source/terrain/terrRender.cpp index 14280e0676..4883d96000 100644 --- a/Engine/source/terrain/terrRender.cpp +++ b/Engine/source/terrain/terrRender.cpp @@ -208,14 +208,14 @@ void TerrainBlock::_updateBaseTexture(bool writeToCache) F32 copyOffsetY = 2.0f * GFX->getFillConventionOffset() / (F32)destSize.y; GFXVertexPT points[4]; - points[0].point = Point3F( -1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0 ); - points[0].texCoord = Point2F( 0.0, 1.0f ); - points[1].point = Point3F( -1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0 ); - points[1].texCoord = Point2F( 0.0, 0.0f ); - points[2].point = Point3F( 1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0 ); - points[2].texCoord = Point2F( 1.0, 0.0f ); - points[3].point = Point3F( 1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0 ); - points[3].texCoord = Point2F( 1.0, 1.0f ); + points[0].point = Point3F(1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0); + points[0].texCoord = Point2F(1.0, 1.0f); + points[1].point = Point3F(1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0); + points[1].texCoord = Point2F(1.0, 0.0f); + points[2].point = Point3F(-1.0 - copyOffsetX, -1.0 + copyOffsetY, 0.0); + points[2].texCoord = Point2F(0.0, 1.0f); + points[3].point = Point3F(-1.0 - copyOffsetX, 1.0 + copyOffsetY, 0.0); + points[3].texCoord = Point2F(0.0, 0.0f); vb.set( GFX, 4, GFXBufferTypeVolatile ); GFXVertexPT *ptr = vb.lock(); @@ -274,7 +274,7 @@ void TerrainBlock::_updateBaseTexture(bool writeToCache) mBaseShaderConsts->setSafe( mBaseTexScaleConst, Point2F( scale, -scale ) ); mBaseShaderConsts->setSafe( mBaseTexIdConst, (F32)i ); - GFX->drawPrimitive( GFXTriangleFan, 0, 2 ); + GFX->drawPrimitive( GFXTriangleStrip, 0, 2 ); } mBaseTarget->resolve(); diff --git a/Engine/source/ts/tsMesh.cpp b/Engine/source/ts/tsMesh.cpp index 72ee744615..47a60124dd 100644 --- a/Engine/source/ts/tsMesh.cpp +++ b/Engine/source/ts/tsMesh.cpp @@ -57,7 +57,7 @@ # include "platformXbox/platformXbox.h" #endif -GFXPrimitiveType drawTypes[] = { GFXTriangleList, GFXTriangleStrip, GFXTriangleFan }; +GFXPrimitiveType drawTypes[] = { GFXTriangleList, GFXTriangleStrip }; #define getDrawType(a) (drawTypes[a]) @@ -2442,7 +2442,6 @@ void TSMesh::_createVBIB( TSVertexBufferHandle &vb, GFXPrimitiveBufferHandle &pb break; case GFXTriangleStrip: - case GFXTriangleFan: pInfo.type = drawType; pInfo.numPrimitives = draw.numElements - 2; pInfo.startIndex = draw.start; @@ -3006,17 +3005,6 @@ void TSMesh::createTangents(const Vector &_verts, const Vector } break; } - case GFXTriangleFan: - { - p1Index = baseIdx[0]; - p2Index = baseIdx[1]; - for( U32 j = 2; j < numElements; j++ ) - { - findTangent( p1Index, p2Index, baseIdx[j], tan0.address(), tan1, _verts ); - p2Index = baseIdx[j]; - } - break; - } default: AssertFatal( false, "TSMesh::createTangents: unknown primitive type!" ); diff --git a/Engine/source/windowManager/win32/win32Window.cpp b/Engine/source/windowManager/win32/win32Window.cpp index c714586b98..7d287cebd8 100644 --- a/Engine/source/windowManager/win32/win32Window.cpp +++ b/Engine/source/windowManager/win32/win32Window.cpp @@ -805,6 +805,8 @@ LRESULT PASCAL Win32Window::WindowProc( HWND hWnd, UINT message, WPARAM wParam, Con::warnf("Win32Window::WindowProc - resetting device due to window size change."); window->getGFXTarget()->resetMode(); } + + window->getScreenResChangeSignal().trigger(window, true); } return 0; From bd60f3be1a6038a396cc4f109a5f8d780e0d4d5e Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sun, 20 Mar 2016 21:55:40 +1000 Subject: [PATCH 161/324] Direct3D11 CMake and Project Generator files. --- Tools/CMake/torque3d.cmake | 9 +++++-- Tools/projectGenerator/modules/d3d11.inc | 33 ++++++++++++++++++++++++ projects.xml | 1 + 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 Tools/projectGenerator/modules/d3d11.inc diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 83cf636234..7581a6dbb4 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -83,6 +83,10 @@ else() option(TORQUE_DEDICATED "Torque dedicated" OFF) endif() +if(WIN32) + option(TORQUE_D3D11 "Allow Direct3D 11 render" OFF) +endif() + ############################################################################### # options ############################################################################### @@ -391,8 +395,9 @@ if(WIN32) addPath("${srcDir}/platformWin32/videoInfo") addPath("${srcDir}/platformWin32/minidump") addPath("${srcDir}/windowManager/win32") - #addPath("${srcDir}/gfx/D3D8") - addPath("${srcDir}/gfx/D3D") + if(TORQUE_D3D11) + addPath("${srcDir}/gfx/D3D11") + endif() addPath("${srcDir}/gfx/D3D9") addPath("${srcDir}/gfx/D3D9/pc") addPath("${srcDir}/shaderGen/HLSL") diff --git a/Tools/projectGenerator/modules/d3d11.inc b/Tools/projectGenerator/modules/d3d11.inc new file mode 100644 index 0000000000..1bfae5092a --- /dev/null +++ b/Tools/projectGenerator/modules/d3d11.inc @@ -0,0 +1,33 @@ + diff --git a/projects.xml b/projects.xml index 18ace62998..1fb3d2fd21 100644 --- a/projects.xml +++ b/projects.xml @@ -29,6 +29,7 @@ Here are some examples: OpenGL Rendering + Direct3D 11 Rendering FMod Sound Engine Leap Motion Controller Razer Hydra Controller From e475b3060bfe99212dceb00967e261d3158227cd Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sun, 20 Mar 2016 16:51:24 -0500 Subject: [PATCH 162/324] won't need that any more after this --- Engine/source/materials/materialDefinition.cpp | 6 ------ Engine/source/materials/materialDefinition.h | 1 - 2 files changed, 7 deletions(-) diff --git a/Engine/source/materials/materialDefinition.cpp b/Engine/source/materials/materialDefinition.cpp index 883d4b7ab9..947b7b9b9e 100644 --- a/Engine/source/materials/materialDefinition.cpp +++ b/Engine/source/materials/materialDefinition.cpp @@ -210,9 +210,6 @@ Material::Material() mDirectSoundOcclusion = 1.f; mReverbSoundOcclusion = 1.0; - - // Deferred Shading - mIsSky = false; } void Material::initPersistFields() @@ -420,9 +417,6 @@ void Material::initPersistFields() addField("dynamicCubemap", TypeBool, Offset(mDynamicCubemap, Material), "Enables the material to use the dynamic cubemap from the ShapeBase object its applied to." ); - addField("isSky", TypeBool, Offset(mIsSky, Material), - "Sky support. Alters draw dimensions." ); - addGroup( "Behavioral" ); addField( "showFootprints", TypeBool, Offset( mShowFootprints, Material ), diff --git a/Engine/source/materials/materialDefinition.h b/Engine/source/materials/materialDefinition.h index d676c8f02b..52043c66e6 100644 --- a/Engine/source/materials/materialDefinition.h +++ b/Engine/source/materials/materialDefinition.h @@ -295,7 +295,6 @@ class Material : public BaseMaterialDefinition bool mDynamicCubemap; // Deferred Shading - bool mIsSky; F32 mMatInfoFlags[MAX_STAGES]; bool mTranslucent; BlendOp mTranslucentBlendOp; From 8667bd3ca2339ef2d1f3342cfe71c7c10b6c55dc Mon Sep 17 00:00:00 2001 From: rextimmy Date: Mon, 21 Mar 2016 22:49:47 +1000 Subject: [PATCH 163/324] GL floating point format fix. --- Engine/source/gfx/gl/gfxGLCardProfiler.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp index b4b968b853..46119253bb 100644 --- a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp +++ b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp @@ -50,16 +50,6 @@ void GFXGLCardProfiler::init() mVideoMemory = static_cast(GFX)->getTotalVideoMemory(); Parent::init(); - - // Set new enums here so if our profile script forces this to be false we keep the GL_ZEROs. - if(queryProfile("GL::suppFloatTexture")) - { - GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RGBA_FLOAT16_ATI; - GFXGLTextureFormat[GFXFormatR16G16F] = GL_RGBA; - GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA_FLOAT16_ATI; - GFXGLTextureInternalFormat[GFXFormatR32G32B32A32F] = GL_RGBA_FLOAT32_ATI; - GFXGLTextureInternalFormat[GFXFormatR32F] = GL_RGBA_FLOAT32_ATI; - } } void GFXGLCardProfiler::setupCardCapabilities() From e9efc05ebb45dc1619b827539d8d158596312977 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Thu, 24 Mar 2016 14:22:45 -0400 Subject: [PATCH 164/324] fix release build compile with MSVC 2015 (finally) --- Tools/CMake/CMakeLists.txt | 3 +++ Tools/CMake/torque3d.cmake | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/Tools/CMake/CMakeLists.txt b/Tools/CMake/CMakeLists.txt index 741cc6b1c1..cdf6e832b8 100644 --- a/Tools/CMake/CMakeLists.txt +++ b/Tools/CMake/CMakeLists.txt @@ -20,6 +20,9 @@ # IN THE SOFTWARE. # ----------------------------------------------------------------------------- +# JTH: We require CMake 3.1.4 for MSVC14 compatibility check +cmake_minimum_required(VERSION 3.1.4) + include(basics.cmake) setupVersionNumbers() diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 83cf636234..eff52e2e82 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -541,6 +541,13 @@ if(WIN32) if(TORQUE_OPENGL) addLib(OpenGL32.lib) endif() + + # JTH: DXSDK is compiled with older runtime, and MSVC 2015+ is when __vsnprintf is undefined. + # This is a workaround by linking with the older legacy library functions. + # See this for more info: http://stackoverflow.com/a/34230122 + if (MSVC14) + addLib(legacy_stdio_definitions.lib) + endif() endif() if(UNIX) From 1ceed22049486fa4cde634df6f0d584278a88ce8 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 02:16:38 -0400 Subject: [PATCH 165/324] add epoxy for glew replacement --- Engine/lib/epoxy/COPYING | 51 + Engine/lib/epoxy/include/KHR/khrplatform.h | 282 + Engine/lib/epoxy/include/epoxy/egl.h | 53 + .../epoxy/include/epoxy/epoxy/egl_generated.h | 987 + .../epoxy/include/epoxy/epoxy/gl_generated.h | 18958 +++ .../epoxy/include/epoxy/epoxy/glx_generated.h | 969 + .../epoxy/include/epoxy/epoxy/wgl_generated.h | 896 + Engine/lib/epoxy/include/epoxy/gl.h | 103 + Engine/lib/epoxy/include/epoxy/glx.h | 53 + Engine/lib/epoxy/include/epoxy/wgl.h | 71 + Engine/lib/epoxy/src/dispatch_common.c | 642 + Engine/lib/epoxy/src/dispatch_common.h | 188 + Engine/lib/epoxy/src/egl/dispatch_egl.c | 69 + .../epoxy/src/egl/egl_generated_dispatch.c | 4206 + .../lib/epoxy/src/egl/gl_generated_dispatch.c | 124424 +++++++++++++++ Engine/lib/epoxy/src/glx/dispatch_glx.c | 106 + .../epoxy/src/glx/glx_generated_dispatch.c | 4812 + Engine/lib/epoxy/src/wgl/dispatch_wgl.c | 217 + .../epoxy/src/wgl/wgl_generated_dispatch.c | 5250 + 19 files changed, 162337 insertions(+) create mode 100644 Engine/lib/epoxy/COPYING create mode 100644 Engine/lib/epoxy/include/KHR/khrplatform.h create mode 100644 Engine/lib/epoxy/include/epoxy/egl.h create mode 100644 Engine/lib/epoxy/include/epoxy/epoxy/egl_generated.h create mode 100644 Engine/lib/epoxy/include/epoxy/epoxy/gl_generated.h create mode 100644 Engine/lib/epoxy/include/epoxy/epoxy/glx_generated.h create mode 100644 Engine/lib/epoxy/include/epoxy/epoxy/wgl_generated.h create mode 100644 Engine/lib/epoxy/include/epoxy/gl.h create mode 100644 Engine/lib/epoxy/include/epoxy/glx.h create mode 100644 Engine/lib/epoxy/include/epoxy/wgl.h create mode 100644 Engine/lib/epoxy/src/dispatch_common.c create mode 100644 Engine/lib/epoxy/src/dispatch_common.h create mode 100644 Engine/lib/epoxy/src/egl/dispatch_egl.c create mode 100644 Engine/lib/epoxy/src/egl/egl_generated_dispatch.c create mode 100644 Engine/lib/epoxy/src/egl/gl_generated_dispatch.c create mode 100644 Engine/lib/epoxy/src/glx/dispatch_glx.c create mode 100644 Engine/lib/epoxy/src/glx/glx_generated_dispatch.c create mode 100644 Engine/lib/epoxy/src/wgl/dispatch_wgl.c create mode 100644 Engine/lib/epoxy/src/wgl/wgl_generated_dispatch.c diff --git a/Engine/lib/epoxy/COPYING b/Engine/lib/epoxy/COPYING new file mode 100644 index 0000000000..b1d7941915 --- /dev/null +++ b/Engine/lib/epoxy/COPYING @@ -0,0 +1,51 @@ +The libepoxy project code is covered by the MIT license: + +/* + * Copyright © 2013-2014 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +The files in the registry directory (as well as the code dynamically generated +from them by gen_dispatch.py) are from the Khronos Group and appear under the +following license: + +/* + * Copyright (c) 2013 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and/or associated documentation files (the + * "Materials"), to deal in the Materials without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Materials, and to + * permit persons to whom the Materials are 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 Materials. + * + * THE MATERIALS ARE 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 + * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + */ diff --git a/Engine/lib/epoxy/include/KHR/khrplatform.h b/Engine/lib/epoxy/include/KHR/khrplatform.h new file mode 100644 index 0000000000..c9e6f17d34 --- /dev/null +++ b/Engine/lib/epoxy/include/KHR/khrplatform.h @@ -0,0 +1,282 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2009 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are 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 Materials. +** +** THE MATERIALS ARE 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 +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * $Revision: 23298 $ on $Date: 2013-09-30 17:07:13 -0700 (Mon, 30 Sep 2013) $ + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by sending them to the public Khronos Bugzilla + * (http://khronos.org/bugzilla) by filing a bug against product + * "Khronos (general)" component "Registry". + * + * A predefined template which fills in some of the bug fields can be + * reached using http://tinyurl.com/khrplatform-h-bugreport, but you + * must create a Bugzilla login first. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(_WIN32) && !defined(__SCITECH_SNAP__) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef _WIN64 +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/Engine/lib/epoxy/include/epoxy/egl.h b/Engine/lib/epoxy/include/epoxy/egl.h new file mode 100644 index 0000000000..4e89cb5d6f --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/egl.h @@ -0,0 +1,53 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file egl.h + * + * Provides an implementation of an EGL dispatch layer using global + * function pointers + */ + +#ifndef EPOXY_EGL_H +#define EPOXY_EGL_H + +#if defined(__egl_h_) || defined(__eglext_h_) +# error epoxy/egl.h must be included before (or in place of) GL/egl.h +#else +# define __egl_h_ +# define __eglext_h_ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/egl_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_egl_extension(EGLDisplay dpy, const char *extension); +EPOXY_IMPORTEXPORT int epoxy_egl_version(EGLDisplay dpy); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_EGL_H */ diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/egl_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/egl_generated.h new file mode 100644 index 0000000000..987f1415a4 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/egl_generated.h @@ -0,0 +1,987 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + */ + +#pragma once +#include +#include + +#include "epoxy/gl.h" +#include +typedef unsigned int EGLBoolean; +typedef unsigned int EGLenum; +typedef intptr_t EGLAttribKHR; +typedef intptr_t EGLAttrib; +typedef void *EGLClientBuffer; +typedef void *EGLConfig; +typedef void *EGLContext; +typedef void *EGLDeviceEXT; +typedef void *EGLDisplay; +typedef void *EGLImage; +typedef void *EGLImageKHR; +typedef void *EGLOutputLayerEXT; +typedef void *EGLOutputPortEXT; +typedef void *EGLStreamKHR; +typedef void *EGLSurface; +typedef void *EGLSync; +typedef void *EGLSyncKHR; +typedef void *EGLSyncNV; +typedef void (*__eglMustCastToProperFunctionPointerType)(void); +typedef khronos_utime_nanoseconds_t EGLTimeKHR; +typedef khronos_utime_nanoseconds_t EGLTime; +typedef khronos_utime_nanoseconds_t EGLTimeNV; +typedef khronos_utime_nanoseconds_t EGLuint64NV; +typedef khronos_uint64_t EGLuint64KHR; +typedef int EGLNativeFileDescriptorKHR; +typedef khronos_ssize_t EGLsizeiANDROID; +typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); +typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); +struct EGLClientPixmapHI { + void *pData; + EGLint iWidth; + EGLint iHeight; + EGLint iStride; +}; + +#define EGL_VERSION_1_0 1 +#define EGL_VERSION_1_1 1 +#define EGL_VERSION_1_2 1 +#define EGL_VERSION_1_3 1 +#define EGL_VERSION_1_4 1 +#define EGL_VERSION_1_5 1 + +#define EGL_ANDROID_blob_cache 1 +#define EGL_ANDROID_framebuffer_target 1 +#define EGL_ANDROID_image_native_buffer 1 +#define EGL_ANDROID_native_fence_sync 1 +#define EGL_ANDROID_recordable 1 +#define EGL_ANGLE_d3d_share_handle_client_buffer 1 +#define EGL_ANGLE_device_d3d 1 +#define EGL_ANGLE_query_surface_pointer 1 +#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 +#define EGL_ANGLE_window_fixed_size 1 +#define EGL_ARM_pixmap_multisample_discard 1 +#define EGL_EXT_buffer_age 1 +#define EGL_EXT_client_extensions 1 +#define EGL_EXT_create_context_robustness 1 +#define EGL_EXT_device_base 1 +#define EGL_EXT_device_drm 1 +#define EGL_EXT_device_enumeration 1 +#define EGL_EXT_device_openwf 1 +#define EGL_EXT_device_query 1 +#define EGL_EXT_image_dma_buf_import 1 +#define EGL_EXT_multiview_window 1 +#define EGL_EXT_output_base 1 +#define EGL_EXT_output_drm 1 +#define EGL_EXT_output_openwf 1 +#define EGL_EXT_platform_base 1 +#define EGL_EXT_platform_device 1 +#define EGL_EXT_platform_wayland 1 +#define EGL_EXT_platform_x11 1 +#define EGL_EXT_protected_surface 1 +#define EGL_EXT_stream_consumer_egloutput 1 +#define EGL_EXT_swap_buffers_with_damage 1 +#define EGL_EXT_yuv_surface 1 +#define EGL_HI_clientpixmap 1 +#define EGL_HI_colorformats 1 +#define EGL_IMG_context_priority 1 +#define EGL_KHR_cl_event 1 +#define EGL_KHR_cl_event2 1 +#define EGL_KHR_client_get_all_proc_addresses 1 +#define EGL_KHR_config_attribs 1 +#define EGL_KHR_create_context 1 +#define EGL_KHR_create_context_no_error 1 +#define EGL_KHR_fence_sync 1 +#define EGL_KHR_get_all_proc_addresses 1 +#define EGL_KHR_gl_colorspace 1 +#define EGL_KHR_gl_renderbuffer_image 1 +#define EGL_KHR_gl_texture_2D_image 1 +#define EGL_KHR_gl_texture_3D_image 1 +#define EGL_KHR_gl_texture_cubemap_image 1 +#define EGL_KHR_image 1 +#define EGL_KHR_image_base 1 +#define EGL_KHR_image_pixmap 1 +#define EGL_KHR_lock_surface 1 +#define EGL_KHR_lock_surface2 1 +#define EGL_KHR_lock_surface3 1 +#define EGL_KHR_partial_update 1 +#define EGL_KHR_platform_android 1 +#define EGL_KHR_platform_gbm 1 +#define EGL_KHR_platform_wayland 1 +#define EGL_KHR_platform_x11 1 +#define EGL_KHR_reusable_sync 1 +#define EGL_KHR_stream 1 +#define EGL_KHR_stream_consumer_gltexture 1 +#define EGL_KHR_stream_cross_process_fd 1 +#define EGL_KHR_stream_fifo 1 +#define EGL_KHR_stream_producer_aldatalocator 1 +#define EGL_KHR_stream_producer_eglsurface 1 +#define EGL_KHR_surfaceless_context 1 +#define EGL_KHR_swap_buffers_with_damage 1 +#define EGL_KHR_vg_parent_image 1 +#define EGL_KHR_wait_sync 1 +#define EGL_MESA_drm_image 1 +#define EGL_MESA_image_dma_buf_export 1 +#define EGL_MESA_platform_gbm 1 +#define EGL_NOK_swap_region 1 +#define EGL_NOK_swap_region2 1 +#define EGL_NOK_texture_from_pixmap 1 +#define EGL_NV_3dvision_surface 1 +#define EGL_NV_coverage_sample 1 +#define EGL_NV_coverage_sample_resolve 1 +#define EGL_NV_cuda_event 1 +#define EGL_NV_depth_nonlinear 1 +#define EGL_NV_device_cuda 1 +#define EGL_NV_native_query 1 +#define EGL_NV_post_convert_rounding 1 +#define EGL_NV_post_sub_buffer 1 +#define EGL_NV_stream_sync 1 +#define EGL_NV_sync 1 +#define EGL_NV_system_time 1 +#define EGL_TIZEN_image_native_buffer 1 +#define EGL_TIZEN_image_native_surface 1 + +#define EGL_NO_CONTEXT ((EGLContext)0) +#define EGL_NO_DEVICE_EXT ((EGLDeviceEXT)(0)) +#define EGL_NO_DISPLAY ((EGLDisplay)0) +#define EGL_NO_IMAGE ((EGLImage)0) +#define EGL_NO_IMAGE_KHR ((EGLImageKHR)0) +#define EGL_DEFAULT_DISPLAY ((EGLNativeDisplayType)0) +#define EGL_NO_FILE_DESCRIPTOR_KHR ((EGLNativeFileDescriptorKHR)(-1)) +#define EGL_NO_OUTPUT_LAYER_EXT ((EGLOutputLayerEXT)0) +#define EGL_NO_OUTPUT_PORT_EXT ((EGLOutputPortEXT)0) +#define EGL_NO_STREAM_KHR ((EGLStreamKHR)0) +#define EGL_NO_SURFACE ((EGLSurface)0) +#define EGL_NO_SYNC ((EGLSync)0) +#define EGL_NO_SYNC_KHR ((EGLSyncKHR)0) +#define EGL_NO_SYNC_NV ((EGLSyncNV)0) +#define EGL_DONT_CARE ((EGLint)-1) +#define EGL_UNKNOWN ((EGLint)-1) +#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 +#define EGL_DEPTH_ENCODING_NONE_NV 0 +#define EGL_FALSE 0 +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 +#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 +#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 +#define EGL_OPENGL_ES3_BIT 0x00000040 +#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#define EGL_OPENGL_ES_BIT 0x0001 +#define EGL_PBUFFER_BIT 0x0001 +#define EGL_READ_SURFACE_BIT_KHR 0x0001 +#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 +#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 +#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 +#define EGL_OPENVG_BIT 0x0002 +#define EGL_PIXMAP_BIT 0x0002 +#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 +#define EGL_OPENGL_ES2_BIT 0x0004 +#define EGL_WINDOW_BIT 0x0004 +#define EGL_OPENGL_BIT 0x0008 +#define EGL_PBUFFER_IMAGE_BIT_TAO 0x0008 +#define EGL_INTEROP_BIT_KHR 0x0010 +#define EGL_PBUFFER_PALETTE_IMAGE_BIT_TAO 0x0010 +#define EGL_OPENMAX_IL_BIT_KHR 0x0020 +#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 +#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 +#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 +#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 +#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 +#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 +#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 +#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 +#define EGL_STREAM_BIT_KHR 0x0800 +#define EGL_SUCCESS 0x3000 +#define EGL_NOT_INITIALIZED 0x3001 +#define EGL_BAD_ACCESS 0x3002 +#define EGL_BAD_ALLOC 0x3003 +#define EGL_BAD_ATTRIBUTE 0x3004 +#define EGL_BAD_CONFIG 0x3005 +#define EGL_BAD_CONTEXT 0x3006 +#define EGL_BAD_CURRENT_SURFACE 0x3007 +#define EGL_BAD_DISPLAY 0x3008 +#define EGL_BAD_MATCH 0x3009 +#define EGL_BAD_NATIVE_PIXMAP 0x300A +#define EGL_BAD_NATIVE_WINDOW 0x300B +#define EGL_BAD_PARAMETER 0x300C +#define EGL_BAD_SURFACE 0x300D +#define EGL_CONTEXT_LOST 0x300E +#define EGL_BUFFER_SIZE 0x3020 +#define EGL_ALPHA_SIZE 0x3021 +#define EGL_BLUE_SIZE 0x3022 +#define EGL_GREEN_SIZE 0x3023 +#define EGL_RED_SIZE 0x3024 +#define EGL_DEPTH_SIZE 0x3025 +#define EGL_STENCIL_SIZE 0x3026 +#define EGL_CONFIG_CAVEAT 0x3027 +#define EGL_CONFIG_ID 0x3028 +#define EGL_LEVEL 0x3029 +#define EGL_MAX_PBUFFER_HEIGHT 0x302A +#define EGL_MAX_PBUFFER_PIXELS 0x302B +#define EGL_MAX_PBUFFER_WIDTH 0x302C +#define EGL_NATIVE_RENDERABLE 0x302D +#define EGL_NATIVE_VISUAL_ID 0x302E +#define EGL_NATIVE_VISUAL_TYPE 0x302F +#define EGL_SAMPLES 0x3031 +#define EGL_SAMPLE_BUFFERS 0x3032 +#define EGL_SURFACE_TYPE 0x3033 +#define EGL_TRANSPARENT_TYPE 0x3034 +#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 +#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 +#define EGL_TRANSPARENT_RED_VALUE 0x3037 +#define EGL_NONE 0x3038 +#define EGL_BIND_TO_TEXTURE_RGB 0x3039 +#define EGL_BIND_TO_TEXTURE_RGBA 0x303A +#define EGL_MIN_SWAP_INTERVAL 0x303B +#define EGL_MAX_SWAP_INTERVAL 0x303C +#define EGL_LUMINANCE_SIZE 0x303D +#define EGL_ALPHA_MASK_SIZE 0x303E +#define EGL_COLOR_BUFFER_TYPE 0x303F +#define EGL_RENDERABLE_TYPE 0x3040 +#define EGL_MATCH_NATIVE_PIXMAP 0x3041 +#define EGL_CONFORMANT 0x3042 +#define EGL_CONFORMANT_KHR 0x3042 +#define EGL_MATCH_FORMAT_KHR 0x3043 +#define EGL_SLOW_CONFIG 0x3050 +#define EGL_NON_CONFORMANT_CONFIG 0x3051 +#define EGL_TRANSPARENT_RGB 0x3052 +#define EGL_VENDOR 0x3053 +#define EGL_VERSION 0x3054 +#define EGL_EXTENSIONS 0x3055 +#define EGL_HEIGHT 0x3056 +#define EGL_WIDTH 0x3057 +#define EGL_LARGEST_PBUFFER 0x3058 +#define EGL_DRAW 0x3059 +#define EGL_READ 0x305A +#define EGL_CORE_NATIVE_ENGINE 0x305B +#define EGL_NO_TEXTURE 0x305C +#define EGL_TEXTURE_RGB 0x305D +#define EGL_TEXTURE_RGBA 0x305E +#define EGL_TEXTURE_2D 0x305F +#define EGL_Y_INVERTED_NOK 0x307F +#define EGL_TEXTURE_FORMAT 0x3080 +#define EGL_TEXTURE_TARGET 0x3081 +#define EGL_MIPMAP_TEXTURE 0x3082 +#define EGL_MIPMAP_LEVEL 0x3083 +#define EGL_BACK_BUFFER 0x3084 +#define EGL_SINGLE_BUFFER 0x3085 +#define EGL_RENDER_BUFFER 0x3086 +#define EGL_COLORSPACE 0x3087 +#define EGL_VG_COLORSPACE 0x3087 +#define EGL_ALPHA_FORMAT 0x3088 +#define EGL_VG_ALPHA_FORMAT 0x3088 +#define EGL_COLORSPACE_sRGB 0x3089 +#define EGL_GL_COLORSPACE_SRGB 0x3089 +#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 +#define EGL_VG_COLORSPACE_sRGB 0x3089 +#define EGL_COLORSPACE_LINEAR 0x308A +#define EGL_GL_COLORSPACE_LINEAR 0x308A +#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A +#define EGL_VG_COLORSPACE_LINEAR 0x308A +#define EGL_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_ALPHA_FORMAT_PRE 0x308C +#define EGL_VG_ALPHA_FORMAT_PRE 0x308C +#define EGL_CLIENT_APIS 0x308D +#define EGL_RGB_BUFFER 0x308E +#define EGL_LUMINANCE_BUFFER 0x308F +#define EGL_HORIZONTAL_RESOLUTION 0x3090 +#define EGL_VERTICAL_RESOLUTION 0x3091 +#define EGL_PIXEL_ASPECT_RATIO 0x3092 +#define EGL_SWAP_BEHAVIOR 0x3093 +#define EGL_BUFFER_PRESERVED 0x3094 +#define EGL_BUFFER_DESTROYED 0x3095 +#define EGL_OPENVG_IMAGE 0x3096 +#define EGL_CONTEXT_CLIENT_TYPE 0x3097 +#define EGL_CONTEXT_CLIENT_VERSION 0x3098 +#define EGL_CONTEXT_MAJOR_VERSION 0x3098 +#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 +#define EGL_MULTISAMPLE_RESOLVE 0x3099 +#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A +#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B +#define EGL_CL_EVENT_HANDLE 0x309C +#define EGL_CL_EVENT_HANDLE_KHR 0x309C +#define EGL_GL_COLORSPACE 0x309D +#define EGL_GL_COLORSPACE_KHR 0x309D +#define EGL_OPENGL_ES_API 0x30A0 +#define EGL_OPENVG_API 0x30A1 +#define EGL_OPENGL_API 0x30A2 +#define EGL_NATIVE_PIXMAP_KHR 0x30B0 +#define EGL_GL_TEXTURE_2D 0x30B1 +#define EGL_GL_TEXTURE_2D_KHR 0x30B1 +#define EGL_GL_TEXTURE_3D 0x30B2 +#define EGL_GL_TEXTURE_3D_KHR 0x30B2 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 +#define EGL_GL_RENDERBUFFER 0x30B9 +#define EGL_GL_RENDERBUFFER_KHR 0x30B9 +#define EGL_VG_PARENT_IMAGE_KHR 0x30BA +#define EGL_GL_TEXTURE_LEVEL 0x30BC +#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC +#define EGL_GL_TEXTURE_ZOFFSET 0x30BD +#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD +#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF +#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 +#define EGL_FORMAT_RGB_565_KHR 0x30C1 +#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 +#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 +#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 +#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 +#define EGL_BITMAP_POINTER_KHR 0x30C6 +#define EGL_BITMAP_PITCH_KHR 0x30C7 +#define EGL_BITMAP_ORIGIN_KHR 0x30C8 +#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 +#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA +#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB +#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC +#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD +#define EGL_LOWER_LEFT_KHR 0x30CE +#define EGL_UPPER_LEFT_KHR 0x30CF +#define EGL_IMAGE_PRESERVED 0x30D2 +#define EGL_IMAGE_PRESERVED_KHR 0x30D2 +#define EGL_SHARED_IMAGE_NOK 0x30DA +#define EGL_COVERAGE_BUFFERS_NV 0x30E0 +#define EGL_COVERAGE_SAMPLES_NV 0x30E1 +#define EGL_DEPTH_ENCODING_NV 0x30E2 +#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 +#define EGL_SYNC_STATUS_NV 0x30E7 +#define EGL_SIGNALED_NV 0x30E8 +#define EGL_UNSIGNALED_NV 0x30E9 +#define EGL_ALREADY_SIGNALED_NV 0x30EA +#define EGL_TIMEOUT_EXPIRED_NV 0x30EB +#define EGL_CONDITION_SATISFIED_NV 0x30EC +#define EGL_SYNC_TYPE_NV 0x30ED +#define EGL_SYNC_CONDITION_NV 0x30EE +#define EGL_SYNC_FENCE_NV 0x30EF +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 +#define EGL_SYNC_STATUS 0x30F1 +#define EGL_SYNC_STATUS_KHR 0x30F1 +#define EGL_SIGNALED 0x30F2 +#define EGL_SIGNALED_KHR 0x30F2 +#define EGL_UNSIGNALED 0x30F3 +#define EGL_UNSIGNALED_KHR 0x30F3 +#define EGL_TIMEOUT_EXPIRED 0x30F5 +#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 +#define EGL_CONDITION_SATISFIED 0x30F6 +#define EGL_CONDITION_SATISFIED_KHR 0x30F6 +#define EGL_SYNC_TYPE 0x30F7 +#define EGL_SYNC_TYPE_KHR 0x30F7 +#define EGL_SYNC_CONDITION 0x30F8 +#define EGL_SYNC_CONDITION_KHR 0x30F8 +#define EGL_SYNC_FENCE 0x30F9 +#define EGL_SYNC_FENCE_KHR 0x30F9 +#define EGL_SYNC_REUSABLE_KHR 0x30FA +#define EGL_CONTEXT_MINOR_VERSION 0x30FB +#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB +#define EGL_CONTEXT_FLAGS_KHR 0x30FC +#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD +#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD +#define EGL_SYNC_CL_EVENT 0x30FE +#define EGL_SYNC_CL_EVENT_KHR 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF +#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF +#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 +#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 +#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 +#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 +#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 +#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 +#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 +#define EGL_AUTO_STEREO_NV 0x3136 +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 +#define EGL_BUFFER_AGE_EXT 0x313D +#define EGL_BUFFER_AGE_KHR 0x313D +#define EGL_PLATFORM_DEVICE_EXT 0x313F +#define EGL_NATIVE_BUFFER_ANDROID 0x3140 +#define EGL_PLATFORM_ANDROID_KHR 0x3141 +#define EGL_RECORDABLE_ANDROID 0x3142 +#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 +#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 +#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 +#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 +#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 +#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD +#define EGL_NO_RESET_NOTIFICATION 0x31BE +#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE +#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF +#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF +#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF +#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 +#define EGL_DRM_BUFFER_USE_MESA 0x31D1 +#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 +#define EGL_DRM_BUFFER_MESA 0x31D3 +#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 +#define EGL_PLATFORM_X11_EXT 0x31D5 +#define EGL_PLATFORM_X11_KHR 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 +#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 +#define EGL_PLATFORM_GBM_KHR 0x31D7 +#define EGL_PLATFORM_GBM_MESA 0x31D7 +#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 +#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 +#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC +#define EGL_STREAM_TIME_NOW_KHR 0x31FD +#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE +#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF +#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 +#define EGL_FIXED_SIZE_ANGLE 0x3201 +#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 +#define EGL_PRODUCER_FRAME_KHR 0x3212 +#define EGL_CONSUMER_FRAME_KHR 0x3213 +#define EGL_STREAM_STATE_KHR 0x3214 +#define EGL_STREAM_STATE_CREATED_KHR 0x3215 +#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 +#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 +#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 +#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 +#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A +#define EGL_BAD_STREAM_KHR 0x321B +#define EGL_BAD_STATE_KHR 0x321C +#define EGL_BUFFER_COUNT_NV 0x321D +#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E +#define EGL_SYNC_NEW_FRAME_NV 0x321F +#define EGL_BAD_DEVICE_EXT 0x322B +#define EGL_DEVICE_EXT 0x322C +#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D +#define EGL_BAD_OUTPUT_PORT_EXT 0x322E +#define EGL_SWAP_INTERVAL_EXT 0x322F +#define EGL_DRM_DEVICE_FILE_EXT 0x3233 +#define EGL_DRM_CRTC_EXT 0x3234 +#define EGL_DRM_PLANE_EXT 0x3235 +#define EGL_DRM_CONNECTOR_EXT 0x3236 +#define EGL_OPENWF_DEVICE_ID_EXT 0x3237 +#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 +#define EGL_OPENWF_PORT_ID_EXT 0x3239 +#define EGL_CUDA_DEVICE_NV 0x323A +#define EGL_CUDA_EVENT_HANDLE_NV 0x323B +#define EGL_SYNC_CUDA_EVENT_NV 0x323C +#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D +#define EGL_LINUX_DMA_BUF_EXT 0x3270 +#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 +#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 +#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 +#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 +#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 +#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 +#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 +#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 +#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 +#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A +#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B +#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C +#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D +#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E +#define EGL_ITU_REC601_EXT 0x327F +#define EGL_ITU_REC709_EXT 0x3280 +#define EGL_ITU_REC2020_EXT 0x3281 +#define EGL_YUV_FULL_RANGE_EXT 0x3282 +#define EGL_YUV_NARROW_RANGE_EXT 0x3283 +#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 +#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 +#define EGL_DISCARD_SAMPLES_ARM 0x3286 +#define EGL_NATIVE_BUFFER_TIZEN 0x32A0 +#define EGL_NATIVE_SURFACE_TIZEN 0x32A1 +#define EGL_PROTECTED_CONTENT_EXT 0x32C0 +#define EGL_YUV_BUFFER_EXT 0x3300 +#define EGL_YUV_ORDER_EXT 0x3301 +#define EGL_YUV_ORDER_YUV_EXT 0x3302 +#define EGL_YUV_ORDER_YVU_EXT 0x3303 +#define EGL_YUV_ORDER_YUYV_EXT 0x3304 +#define EGL_YUV_ORDER_UYVY_EXT 0x3305 +#define EGL_YUV_ORDER_YVYU_EXT 0x3306 +#define EGL_YUV_ORDER_VYUY_EXT 0x3307 +#define EGL_YUV_ORDER_AYUV_EXT 0x3308 +#define EGL_YUV_CSC_STANDARD_EXT 0x330A +#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B +#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C +#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D +#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 +#define EGL_YUV_SUBSAMPLE_EXT 0x3312 +#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 +#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 +#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 +#define EGL_YUV_DEPTH_RANGE_EXT 0x3317 +#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 +#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 +#define EGL_YUV_PLANE_BPP_EXT 0x331A +#define EGL_YUV_PLANE_BPP_0_EXT 0x331B +#define EGL_YUV_PLANE_BPP_8_EXT 0x331C +#define EGL_YUV_PLANE_BPP_10_EXT 0x331D +#define EGL_D3D9_DEVICE_ANGLE 0x33A0 +#define EGL_D3D11_DEVICE_ANGLE 0x33A1 +#define EGL_COLOR_FORMAT_HI 0x8F70 +#define EGL_COLOR_RGB_HI 0x8F71 +#define EGL_COLOR_RGBA_HI 0x8F72 +#define EGL_COLOR_ARGB_HI 0x8F73 +#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 +#define EGL_FOREVER 0xFFFFFFFFFFFFFFFF +#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFF +#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFF +#define EGL_TRUE 1 +#define EGL_DISPLAY_SCALING 10000 + +typedef EGLBoolean (GLAPIENTRY *PFNEGLBINDAPIPROC)(EGLenum api); +typedef EGLBoolean (GLAPIENTRY *PFNEGLBINDTEXIMAGEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); +typedef EGLBoolean (GLAPIENTRY *PFNEGLCHOOSECONFIGPROC)(EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config); +typedef EGLint (GLAPIENTRY *PFNEGLCLIENTWAITSYNCPROC)(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); +typedef EGLint (GLAPIENTRY *PFNEGLCLIENTWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +typedef EGLint (GLAPIENTRY *PFNEGLCLIENTWAITSYNCNVPROC)(EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +typedef EGLBoolean (GLAPIENTRY *PFNEGLCOPYBUFFERSPROC)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); +typedef EGLContext (GLAPIENTRY *PFNEGLCREATECONTEXTPROC)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list); +typedef EGLImageKHR (GLAPIENTRY *PFNEGLCREATEDRMIMAGEMESAPROC)(EGLDisplay dpy, const EGLint * attrib_list); +typedef EGLSyncNV (GLAPIENTRY *PFNEGLCREATEFENCESYNCNVPROC)(EGLDisplay dpy, EGLenum condition, const EGLint * attrib_list); +typedef EGLImage (GLAPIENTRY *PFNEGLCREATEIMAGEPROC)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list); +typedef EGLImageKHR (GLAPIENTRY *PFNEGLCREATEIMAGEKHRPROC)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPBUFFERSURFACEPROC)(EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPIXMAPSURFACEPROC)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPIXMAPSURFACEHIPROC)(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI * pixmap); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMWINDOWSURFACEPROC)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLint * attrib_list); +typedef EGLStreamKHR (GLAPIENTRY *PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); +typedef EGLStreamKHR (GLAPIENTRY *PFNEGLCREATESTREAMKHRPROC)(EGLDisplay dpy, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint * attrib_list); +typedef EGLSyncKHR (GLAPIENTRY *PFNEGLCREATESTREAMSYNCNVPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint * attrib_list); +typedef EGLSync (GLAPIENTRY *PFNEGLCREATESYNCPROC)(EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list); +typedef EGLSyncKHR (GLAPIENTRY *PFNEGLCREATESYNC64KHRPROC)(EGLDisplay dpy, EGLenum type, const EGLAttribKHR * attrib_list); +typedef EGLSyncKHR (GLAPIENTRY *PFNEGLCREATESYNCKHRPROC)(EGLDisplay dpy, EGLenum type, const EGLint * attrib_list); +typedef EGLSurface (GLAPIENTRY *PFNEGLCREATEWINDOWSURFACEPROC)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYCONTEXTPROC)(EGLDisplay dpy, EGLContext ctx); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYIMAGEPROC)(EGLDisplay dpy, EGLImage image); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYIMAGEKHRPROC)(EGLDisplay dpy, EGLImageKHR image); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSURFACEPROC)(EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSYNCPROC)(EGLDisplay dpy, EGLSync sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLDESTROYSYNCNVPROC)(EGLSyncNV sync); +typedef EGLint (GLAPIENTRY *PFNEGLDUPNATIVEFENCEFDANDROIDPROC)(EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLEXPORTDMABUFIMAGEMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int * fds, EGLint * strides, EGLint * offsets); +typedef EGLBoolean (GLAPIENTRY *PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC)(EGLDisplay dpy, EGLImageKHR image, int * fourcc, int * num_planes, EGLuint64KHR * modifiers); +typedef EGLBoolean (GLAPIENTRY *PFNEGLEXPORTDRMIMAGEMESAPROC)(EGLDisplay dpy, EGLImageKHR image, EGLint * name, EGLint * handle, EGLint * stride); +typedef EGLBoolean (GLAPIENTRY *PFNEGLFENCENVPROC)(EGLSyncNV sync); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETCONFIGATTRIBPROC)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETCONFIGSPROC)(EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config); +typedef EGLContext (GLAPIENTRY *PFNEGLGETCURRENTCONTEXTPROC)(void); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETCURRENTDISPLAYPROC)(void); +typedef EGLSurface (GLAPIENTRY *PFNEGLGETCURRENTSURFACEPROC)(EGLint readdraw); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETDISPLAYPROC)(EGLNativeDisplayType display_id); +typedef EGLint (GLAPIENTRY *PFNEGLGETERRORPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETOUTPUTLAYERSEXTPROC)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputLayerEXT * layers, EGLint max_layers, EGLint * num_layers); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETOUTPUTPORTSEXTPROC)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputPortEXT * ports, EGLint max_ports, EGLint * num_ports); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETPLATFORMDISPLAYPROC)(EGLenum platform, void * native_display, const EGLAttrib * attrib_list); +typedef EGLDisplay (GLAPIENTRY *PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform, void * native_display, const EGLint * attrib_list); +typedef __eglMustCastToProperFunctionPointerType (GLAPIENTRY *PFNEGLGETPROCADDRESSPROC)(const char * procname); +typedef EGLNativeFileDescriptorKHR (GLAPIENTRY *PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETSYNCATTRIBPROC)(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETSYNCATTRIBKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLGETSYNCATTRIBNVPROC)(EGLSyncNV sync, EGLint attribute, EGLint * value); +typedef EGLuint64NV (GLAPIENTRY *PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC)(void); +typedef EGLuint64NV (GLAPIENTRY *PFNEGLGETSYSTEMTIMENVPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLINITIALIZEPROC)(EGLDisplay dpy, EGLint * major, EGLint * minor); +typedef EGLBoolean (GLAPIENTRY *PFNEGLLOCKSURFACEKHRPROC)(EGLDisplay dpy, EGLSurface surface, const EGLint * attrib_list); +typedef EGLBoolean (GLAPIENTRY *PFNEGLMAKECURRENTPROC)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +typedef EGLBoolean (GLAPIENTRY *PFNEGLOUTPUTLAYERATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLOUTPUTPORTATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLPOSTSUBBUFFERNVPROC)(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +typedef EGLenum (GLAPIENTRY *PFNEGLQUERYAPIPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYCONTEXTPROC)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYDEVICEATTRIBEXTPROC)(EGLDeviceEXT device, EGLint attribute, EGLAttrib * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYDEVICESTRINGEXTPROC)(EGLDeviceEXT device, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYDEVICESEXTPROC)(EGLint max_devices, EGLDeviceEXT * devices, EGLint * num_devices); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYDISPLAYATTRIBEXTPROC)(EGLDisplay dpy, EGLint attribute, EGLAttrib * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYNATIVEDISPLAYNVPROC)(EGLDisplay dpy, EGLNativeDisplayType * display_id); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYNATIVEPIXMAPNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType * pixmap); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYNATIVEWINDOWNVPROC)(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType * window); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSTREAMKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSTREAMTIMEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSTREAMU64KHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR * value); +typedef const char * (GLAPIENTRY *PFNEGLQUERYSTRINGPROC)(EGLDisplay dpy, EGLint name); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSURFACEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSURFACE64KHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLQUERYSURFACEPOINTERANGLEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void ** value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLRELEASETEXIMAGEPROC)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); +typedef EGLBoolean (GLAPIENTRY *PFNEGLRELEASETHREADPROC)(void); +typedef void (GLAPIENTRY *PFNEGLSETBLOBCACHEFUNCSANDROIDPROC)(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSETDAMAGEREGIONKHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSIGNALSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSIGNALSYNCNVPROC)(EGLSyncNV sync, EGLenum mode); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMATTRIBKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMERACQUIREKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMEROUTPUTEXTPROC)(EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSTREAMCONSUMERRELEASEKHRPROC)(EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSURFACEATTRIBPROC)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSPROC)(EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSREGION2NOKPROC)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSREGIONNOKPROC)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); +typedef EGLBoolean (GLAPIENTRY *PFNEGLSWAPINTERVALPROC)(EGLDisplay dpy, EGLint interval); +typedef EGLBoolean (GLAPIENTRY *PFNEGLTERMINATEPROC)(EGLDisplay dpy); +typedef EGLBoolean (GLAPIENTRY *PFNEGLUNLOCKSURFACEKHRPROC)(EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITCLIENTPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITGLPROC)(void); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITNATIVEPROC)(EGLint engine); +typedef EGLBoolean (GLAPIENTRY *PFNEGLWAITSYNCPROC)(EGLDisplay dpy, EGLSync sync, EGLint flags); +typedef EGLint (GLAPIENTRY *PFNEGLWAITSYNCKHRPROC)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglBindAPI)(EGLenum api); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglBindTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglChooseConfig)(EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglClientWaitSync)(EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglClientWaitSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglClientWaitSyncNV)(EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglCopyBuffers)(EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); + +extern EPOXY_IMPORTEXPORT EGLContext (EPOXY_CALLSPEC *epoxy_eglCreateContext)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLImageKHR (EPOXY_CALLSPEC *epoxy_eglCreateDRMImageMESA)(EGLDisplay dpy, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncNV (EPOXY_CALLSPEC *epoxy_eglCreateFenceSyncNV)(EGLDisplay dpy, EGLenum condition, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLImage (EPOXY_CALLSPEC *epoxy_eglCreateImage)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLImageKHR (EPOXY_CALLSPEC *epoxy_eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePbufferFromClientBuffer)(EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePbufferSurface)(EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePixmapSurface)(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePixmapSurfaceHI)(EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI * pixmap); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformPixmapSurface)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformPixmapSurfaceEXT)(EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformWindowSurface)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreatePlatformWindowSurfaceEXT)(EGLDisplay dpy, EGLConfig config, void * native_window, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLStreamKHR (EPOXY_CALLSPEC *epoxy_eglCreateStreamFromFileDescriptorKHR)(EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); + +extern EPOXY_IMPORTEXPORT EGLStreamKHR (EPOXY_CALLSPEC *epoxy_eglCreateStreamKHR)(EGLDisplay dpy, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreateStreamProducerSurfaceKHR)(EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncKHR (EPOXY_CALLSPEC *epoxy_eglCreateStreamSyncNV)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSync (EPOXY_CALLSPEC *epoxy_eglCreateSync)(EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncKHR (EPOXY_CALLSPEC *epoxy_eglCreateSync64KHR)(EGLDisplay dpy, EGLenum type, const EGLAttribKHR * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSyncKHR (EPOXY_CALLSPEC *epoxy_eglCreateSyncKHR)(EGLDisplay dpy, EGLenum type, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglCreateWindowSurface)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyContext)(EGLDisplay dpy, EGLContext ctx); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyImage)(EGLDisplay dpy, EGLImage image); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyImageKHR)(EGLDisplay dpy, EGLImageKHR image); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroyStreamKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySurface)(EGLDisplay dpy, EGLSurface surface); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySync)(EGLDisplay dpy, EGLSync sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySyncKHR)(EGLDisplay dpy, EGLSyncKHR sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglDestroySyncNV)(EGLSyncNV sync); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglDupNativeFenceFDANDROID)(EGLDisplay dpy, EGLSyncKHR sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglExportDMABUFImageMESA)(EGLDisplay dpy, EGLImageKHR image, int * fds, EGLint * strides, EGLint * offsets); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglExportDMABUFImageQueryMESA)(EGLDisplay dpy, EGLImageKHR image, int * fourcc, int * num_planes, EGLuint64KHR * modifiers); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglExportDRMImageMESA)(EGLDisplay dpy, EGLImageKHR image, EGLint * name, EGLint * handle, EGLint * stride); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglFenceNV)(EGLSyncNV sync); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetConfigAttrib)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetConfigs)(EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config); + +extern EPOXY_IMPORTEXPORT EGLContext (EPOXY_CALLSPEC *epoxy_eglGetCurrentContext)(void); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetCurrentDisplay)(void); + +extern EPOXY_IMPORTEXPORT EGLSurface (EPOXY_CALLSPEC *epoxy_eglGetCurrentSurface)(EGLint readdraw); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetDisplay)(EGLNativeDisplayType display_id); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglGetError)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetOutputLayersEXT)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputLayerEXT * layers, EGLint max_layers, EGLint * num_layers); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetOutputPortsEXT)(EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputPortEXT * ports, EGLint max_ports, EGLint * num_ports); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetPlatformDisplay)(EGLenum platform, void * native_display, const EGLAttrib * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLDisplay (EPOXY_CALLSPEC *epoxy_eglGetPlatformDisplayEXT)(EGLenum platform, void * native_display, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT __eglMustCastToProperFunctionPointerType (EPOXY_CALLSPEC *epoxy_eglGetProcAddress)(const char * procname); + +extern EPOXY_IMPORTEXPORT EGLNativeFileDescriptorKHR (EPOXY_CALLSPEC *epoxy_eglGetStreamFileDescriptorKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetSyncAttrib)(EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetSyncAttribKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglGetSyncAttribNV)(EGLSyncNV sync, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLuint64NV (EPOXY_CALLSPEC *epoxy_eglGetSystemTimeFrequencyNV)(void); + +extern EPOXY_IMPORTEXPORT EGLuint64NV (EPOXY_CALLSPEC *epoxy_eglGetSystemTimeNV)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglInitialize)(EGLDisplay dpy, EGLint * major, EGLint * minor); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglLockSurfaceKHR)(EGLDisplay dpy, EGLSurface surface, const EGLint * attrib_list); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglMakeCurrent)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglOutputLayerAttribEXT)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglOutputPortAttribEXT)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglPostSubBufferNV)(EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); + +extern EPOXY_IMPORTEXPORT EGLenum (EPOXY_CALLSPEC *epoxy_eglQueryAPI)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryContext)(EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryDeviceAttribEXT)(EGLDeviceEXT device, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryDeviceStringEXT)(EGLDeviceEXT device, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryDevicesEXT)(EGLint max_devices, EGLDeviceEXT * devices, EGLint * num_devices); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryDisplayAttribEXT)(EGLDisplay dpy, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryNativeDisplayNV)(EGLDisplay dpy, EGLNativeDisplayType * display_id); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryNativePixmapNV)(EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType * pixmap); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryNativeWindowNV)(EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType * window); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryOutputLayerAttribEXT)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryOutputLayerStringEXT)(EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryOutputPortAttribEXT)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryOutputPortStringEXT)(EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryStreamKHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryStreamTimeKHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQueryStreamu64KHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_eglQueryString)(EGLDisplay dpy, EGLint name); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQuerySurface)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQuerySurface64KHR)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglQuerySurfacePointerANGLE)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, void ** value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglReleaseTexImage)(EGLDisplay dpy, EGLSurface surface, EGLint buffer); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglReleaseThread)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_eglSetBlobCacheFuncsANDROID)(EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSetDamageRegionKHR)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSignalSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSignalSyncNV)(EGLSyncNV sync, EGLenum mode); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamAttribKHR)(EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerAcquireKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerGLTextureExternalKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerOutputEXT)(EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglStreamConsumerReleaseKHR)(EGLDisplay dpy, EGLStreamKHR stream); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSurfaceAttrib)(EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersRegion2NOK)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersRegionNOK)(EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersWithDamageEXT)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapBuffersWithDamageKHR)(EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglSwapInterval)(EGLDisplay dpy, EGLint interval); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglTerminate)(EGLDisplay dpy); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglUnlockSurfaceKHR)(EGLDisplay dpy, EGLSurface surface); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitClient)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitGL)(void); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitNative)(EGLint engine); + +extern EPOXY_IMPORTEXPORT EGLBoolean (EPOXY_CALLSPEC *epoxy_eglWaitSync)(EGLDisplay dpy, EGLSync sync, EGLint flags); + +extern EPOXY_IMPORTEXPORT EGLint (EPOXY_CALLSPEC *epoxy_eglWaitSyncKHR)(EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); + +#define eglBindAPI epoxy_eglBindAPI +#define eglBindTexImage epoxy_eglBindTexImage +#define eglChooseConfig epoxy_eglChooseConfig +#define eglClientWaitSync epoxy_eglClientWaitSync +#define eglClientWaitSyncKHR epoxy_eglClientWaitSyncKHR +#define eglClientWaitSyncNV epoxy_eglClientWaitSyncNV +#define eglCopyBuffers epoxy_eglCopyBuffers +#define eglCreateContext epoxy_eglCreateContext +#define eglCreateDRMImageMESA epoxy_eglCreateDRMImageMESA +#define eglCreateFenceSyncNV epoxy_eglCreateFenceSyncNV +#define eglCreateImage epoxy_eglCreateImage +#define eglCreateImageKHR epoxy_eglCreateImageKHR +#define eglCreatePbufferFromClientBuffer epoxy_eglCreatePbufferFromClientBuffer +#define eglCreatePbufferSurface epoxy_eglCreatePbufferSurface +#define eglCreatePixmapSurface epoxy_eglCreatePixmapSurface +#define eglCreatePixmapSurfaceHI epoxy_eglCreatePixmapSurfaceHI +#define eglCreatePlatformPixmapSurface epoxy_eglCreatePlatformPixmapSurface +#define eglCreatePlatformPixmapSurfaceEXT epoxy_eglCreatePlatformPixmapSurfaceEXT +#define eglCreatePlatformWindowSurface epoxy_eglCreatePlatformWindowSurface +#define eglCreatePlatformWindowSurfaceEXT epoxy_eglCreatePlatformWindowSurfaceEXT +#define eglCreateStreamFromFileDescriptorKHR epoxy_eglCreateStreamFromFileDescriptorKHR +#define eglCreateStreamKHR epoxy_eglCreateStreamKHR +#define eglCreateStreamProducerSurfaceKHR epoxy_eglCreateStreamProducerSurfaceKHR +#define eglCreateStreamSyncNV epoxy_eglCreateStreamSyncNV +#define eglCreateSync epoxy_eglCreateSync +#define eglCreateSync64KHR epoxy_eglCreateSync64KHR +#define eglCreateSyncKHR epoxy_eglCreateSyncKHR +#define eglCreateWindowSurface epoxy_eglCreateWindowSurface +#define eglDestroyContext epoxy_eglDestroyContext +#define eglDestroyImage epoxy_eglDestroyImage +#define eglDestroyImageKHR epoxy_eglDestroyImageKHR +#define eglDestroyStreamKHR epoxy_eglDestroyStreamKHR +#define eglDestroySurface epoxy_eglDestroySurface +#define eglDestroySync epoxy_eglDestroySync +#define eglDestroySyncKHR epoxy_eglDestroySyncKHR +#define eglDestroySyncNV epoxy_eglDestroySyncNV +#define eglDupNativeFenceFDANDROID epoxy_eglDupNativeFenceFDANDROID +#define eglExportDMABUFImageMESA epoxy_eglExportDMABUFImageMESA +#define eglExportDMABUFImageQueryMESA epoxy_eglExportDMABUFImageQueryMESA +#define eglExportDRMImageMESA epoxy_eglExportDRMImageMESA +#define eglFenceNV epoxy_eglFenceNV +#define eglGetConfigAttrib epoxy_eglGetConfigAttrib +#define eglGetConfigs epoxy_eglGetConfigs +#define eglGetCurrentContext epoxy_eglGetCurrentContext +#define eglGetCurrentDisplay epoxy_eglGetCurrentDisplay +#define eglGetCurrentSurface epoxy_eglGetCurrentSurface +#define eglGetDisplay epoxy_eglGetDisplay +#define eglGetError epoxy_eglGetError +#define eglGetOutputLayersEXT epoxy_eglGetOutputLayersEXT +#define eglGetOutputPortsEXT epoxy_eglGetOutputPortsEXT +#define eglGetPlatformDisplay epoxy_eglGetPlatformDisplay +#define eglGetPlatformDisplayEXT epoxy_eglGetPlatformDisplayEXT +#define eglGetProcAddress epoxy_eglGetProcAddress +#define eglGetStreamFileDescriptorKHR epoxy_eglGetStreamFileDescriptorKHR +#define eglGetSyncAttrib epoxy_eglGetSyncAttrib +#define eglGetSyncAttribKHR epoxy_eglGetSyncAttribKHR +#define eglGetSyncAttribNV epoxy_eglGetSyncAttribNV +#define eglGetSystemTimeFrequencyNV epoxy_eglGetSystemTimeFrequencyNV +#define eglGetSystemTimeNV epoxy_eglGetSystemTimeNV +#define eglInitialize epoxy_eglInitialize +#define eglLockSurfaceKHR epoxy_eglLockSurfaceKHR +#define eglMakeCurrent epoxy_eglMakeCurrent +#define eglOutputLayerAttribEXT epoxy_eglOutputLayerAttribEXT +#define eglOutputPortAttribEXT epoxy_eglOutputPortAttribEXT +#define eglPostSubBufferNV epoxy_eglPostSubBufferNV +#define eglQueryAPI epoxy_eglQueryAPI +#define eglQueryContext epoxy_eglQueryContext +#define eglQueryDeviceAttribEXT epoxy_eglQueryDeviceAttribEXT +#define eglQueryDeviceStringEXT epoxy_eglQueryDeviceStringEXT +#define eglQueryDevicesEXT epoxy_eglQueryDevicesEXT +#define eglQueryDisplayAttribEXT epoxy_eglQueryDisplayAttribEXT +#define eglQueryNativeDisplayNV epoxy_eglQueryNativeDisplayNV +#define eglQueryNativePixmapNV epoxy_eglQueryNativePixmapNV +#define eglQueryNativeWindowNV epoxy_eglQueryNativeWindowNV +#define eglQueryOutputLayerAttribEXT epoxy_eglQueryOutputLayerAttribEXT +#define eglQueryOutputLayerStringEXT epoxy_eglQueryOutputLayerStringEXT +#define eglQueryOutputPortAttribEXT epoxy_eglQueryOutputPortAttribEXT +#define eglQueryOutputPortStringEXT epoxy_eglQueryOutputPortStringEXT +#define eglQueryStreamKHR epoxy_eglQueryStreamKHR +#define eglQueryStreamTimeKHR epoxy_eglQueryStreamTimeKHR +#define eglQueryStreamu64KHR epoxy_eglQueryStreamu64KHR +#define eglQueryString epoxy_eglQueryString +#define eglQuerySurface epoxy_eglQuerySurface +#define eglQuerySurface64KHR epoxy_eglQuerySurface64KHR +#define eglQuerySurfacePointerANGLE epoxy_eglQuerySurfacePointerANGLE +#define eglReleaseTexImage epoxy_eglReleaseTexImage +#define eglReleaseThread epoxy_eglReleaseThread +#define eglSetBlobCacheFuncsANDROID epoxy_eglSetBlobCacheFuncsANDROID +#define eglSetDamageRegionKHR epoxy_eglSetDamageRegionKHR +#define eglSignalSyncKHR epoxy_eglSignalSyncKHR +#define eglSignalSyncNV epoxy_eglSignalSyncNV +#define eglStreamAttribKHR epoxy_eglStreamAttribKHR +#define eglStreamConsumerAcquireKHR epoxy_eglStreamConsumerAcquireKHR +#define eglStreamConsumerGLTextureExternalKHR epoxy_eglStreamConsumerGLTextureExternalKHR +#define eglStreamConsumerOutputEXT epoxy_eglStreamConsumerOutputEXT +#define eglStreamConsumerReleaseKHR epoxy_eglStreamConsumerReleaseKHR +#define eglSurfaceAttrib epoxy_eglSurfaceAttrib +#define eglSwapBuffers epoxy_eglSwapBuffers +#define eglSwapBuffersRegion2NOK epoxy_eglSwapBuffersRegion2NOK +#define eglSwapBuffersRegionNOK epoxy_eglSwapBuffersRegionNOK +#define eglSwapBuffersWithDamageEXT epoxy_eglSwapBuffersWithDamageEXT +#define eglSwapBuffersWithDamageKHR epoxy_eglSwapBuffersWithDamageKHR +#define eglSwapInterval epoxy_eglSwapInterval +#define eglTerminate epoxy_eglTerminate +#define eglUnlockSurfaceKHR epoxy_eglUnlockSurfaceKHR +#define eglWaitClient epoxy_eglWaitClient +#define eglWaitGL epoxy_eglWaitGL +#define eglWaitNative epoxy_eglWaitNative +#define eglWaitSync epoxy_eglWaitSync +#define eglWaitSyncKHR epoxy_eglWaitSyncKHR diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/gl_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/gl_generated.h new file mode 100644 index 0000000000..31d31e479d --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/gl_generated.h @@ -0,0 +1,18958 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + * + * Copyright (c) 2013-2015 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and/or associated documentation files (the + * "Materials"), to deal in the Materials without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Materials, and to + * permit persons to whom the Materials are 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 Materials. + * + * THE MATERIALS ARE 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 + * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + * + */ + +#pragma once +#include +#include + +#include +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; +typedef short GLshort; +typedef int GLint; +typedef int GLclampx; +typedef unsigned char GLubyte; +typedef unsigned short GLushort; +typedef unsigned int GLuint; +typedef int GLsizei; +typedef float GLfloat; +typedef float GLclampf; +typedef double GLdouble; +typedef double GLclampd; +typedef void *GLeglImageOES; +typedef char GLchar; +typedef char GLcharARB; +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef unsigned short GLhalfARB; +typedef unsigned short GLhalf; +typedef GLint GLfixed; +typedef ptrdiff_t GLintptr; +typedef ptrdiff_t GLsizeiptr; +typedef int64_t GLint64; +typedef uint64_t GLuint64; +typedef ptrdiff_t GLintptrARB; +typedef ptrdiff_t GLsizeiptrARB; +typedef int64_t GLint64EXT; +typedef uint64_t GLuint64EXT; +typedef struct __GLsync *GLsync; +struct _cl_context; +struct _cl_event; +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +typedef unsigned short GLhalfNV; +typedef GLintptr GLvdpauSurfaceNV; + +#define GL_ES_VERSION_2_0 1 +#define GL_ES_VERSION_3_0 1 +#define GL_ES_VERSION_3_1 1 +#define GL_ES_VERSION_3_2 1 +#define GL_VERSION_1_0 1 +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_VERSION_1_4 1 +#define GL_VERSION_1_5 1 +#define GL_VERSION_2_0 1 +#define GL_VERSION_2_1 1 +#define GL_VERSION_3_0 1 +#define GL_VERSION_3_1 1 +#define GL_VERSION_3_2 1 +#define GL_VERSION_3_3 1 +#define GL_VERSION_4_0 1 +#define GL_VERSION_4_1 1 +#define GL_VERSION_4_2 1 +#define GL_VERSION_4_3 1 +#define GL_VERSION_4_4 1 +#define GL_VERSION_4_5 1 +#define GL_VERSION_ES_CM_1_0 1 + +#define GL_3DFX_multisample 1 +#define GL_3DFX_tbuffer 1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_AMD_blend_minmax_factor 1 +#define GL_AMD_compressed_3DC_texture 1 +#define GL_AMD_compressed_ATC_texture 1 +#define GL_AMD_conservative_depth 1 +#define GL_AMD_debug_output 1 +#define GL_AMD_depth_clamp_separate 1 +#define GL_AMD_draw_buffers_blend 1 +#define GL_AMD_gcn_shader 1 +#define GL_AMD_gpu_shader_int64 1 +#define GL_AMD_interleaved_elements 1 +#define GL_AMD_multi_draw_indirect 1 +#define GL_AMD_name_gen_delete 1 +#define GL_AMD_occlusion_query_event 1 +#define GL_AMD_performance_monitor 1 +#define GL_AMD_pinned_memory 1 +#define GL_AMD_program_binary_Z400 1 +#define GL_AMD_query_buffer_object 1 +#define GL_AMD_sample_positions 1 +#define GL_AMD_seamless_cubemap_per_texture 1 +#define GL_AMD_shader_atomic_counter_ops 1 +#define GL_AMD_shader_stencil_export 1 +#define GL_AMD_shader_trinary_minmax 1 +#define GL_AMD_sparse_texture 1 +#define GL_AMD_stencil_operation_extended 1 +#define GL_AMD_texture_texture4 1 +#define GL_AMD_transform_feedback3_lines_triangles 1 +#define GL_AMD_transform_feedback4 1 +#define GL_AMD_vertex_shader_layer 1 +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_AMD_vertex_shader_viewport_index 1 +#define GL_ANDROID_extension_pack_es31a 1 +#define GL_ANGLE_depth_texture 1 +#define GL_ANGLE_framebuffer_blit 1 +#define GL_ANGLE_framebuffer_multisample 1 +#define GL_ANGLE_instanced_arrays 1 +#define GL_ANGLE_pack_reverse_row_order 1 +#define GL_ANGLE_program_binary 1 +#define GL_ANGLE_texture_compression_dxt3 1 +#define GL_ANGLE_texture_compression_dxt5 1 +#define GL_ANGLE_texture_usage 1 +#define GL_ANGLE_translated_shader_source 1 +#define GL_APPLE_aux_depth_stencil 1 +#define GL_APPLE_client_storage 1 +#define GL_APPLE_clip_distance 1 +#define GL_APPLE_color_buffer_packed_float 1 +#define GL_APPLE_copy_texture_levels 1 +#define GL_APPLE_element_array 1 +#define GL_APPLE_fence 1 +#define GL_APPLE_float_pixels 1 +#define GL_APPLE_flush_buffer_range 1 +#define GL_APPLE_framebuffer_multisample 1 +#define GL_APPLE_object_purgeable 1 +#define GL_APPLE_rgb_422 1 +#define GL_APPLE_row_bytes 1 +#define GL_APPLE_specular_vector 1 +#define GL_APPLE_sync 1 +#define GL_APPLE_texture_2D_limited_npot 1 +#define GL_APPLE_texture_format_BGRA8888 1 +#define GL_APPLE_texture_max_level 1 +#define GL_APPLE_texture_packed_float 1 +#define GL_APPLE_texture_range 1 +#define GL_APPLE_transform_hint 1 +#define GL_APPLE_vertex_array_object 1 +#define GL_APPLE_vertex_array_range 1 +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_APPLE_ycbcr_422 1 +#define GL_ARB_ES2_compatibility 1 +#define GL_ARB_ES3_1_compatibility 1 +#define GL_ARB_ES3_2_compatibility 1 +#define GL_ARB_ES3_compatibility 1 +#define GL_ARB_arrays_of_arrays 1 +#define GL_ARB_base_instance 1 +#define GL_ARB_bindless_texture 1 +#define GL_ARB_blend_func_extended 1 +#define GL_ARB_buffer_storage 1 +#define GL_ARB_cl_event 1 +#define GL_ARB_clear_buffer_object 1 +#define GL_ARB_clear_texture 1 +#define GL_ARB_clip_control 1 +#define GL_ARB_color_buffer_float 1 +#define GL_ARB_compatibility 1 +#define GL_ARB_compressed_texture_pixel_storage 1 +#define GL_ARB_compute_shader 1 +#define GL_ARB_compute_variable_group_size 1 +#define GL_ARB_conditional_render_inverted 1 +#define GL_ARB_conservative_depth 1 +#define GL_ARB_copy_buffer 1 +#define GL_ARB_copy_image 1 +#define GL_ARB_cull_distance 1 +#define GL_ARB_debug_output 1 +#define GL_ARB_depth_buffer_float 1 +#define GL_ARB_depth_clamp 1 +#define GL_ARB_depth_texture 1 +#define GL_ARB_derivative_control 1 +#define GL_ARB_direct_state_access 1 +#define GL_ARB_draw_buffers 1 +#define GL_ARB_draw_buffers_blend 1 +#define GL_ARB_draw_elements_base_vertex 1 +#define GL_ARB_draw_indirect 1 +#define GL_ARB_draw_instanced 1 +#define GL_ARB_enhanced_layouts 1 +#define GL_ARB_explicit_attrib_location 1 +#define GL_ARB_explicit_uniform_location 1 +#define GL_ARB_fragment_coord_conventions 1 +#define GL_ARB_fragment_layer_viewport 1 +#define GL_ARB_fragment_program 1 +#define GL_ARB_fragment_program_shadow 1 +#define GL_ARB_fragment_shader 1 +#define GL_ARB_fragment_shader_interlock 1 +#define GL_ARB_framebuffer_no_attachments 1 +#define GL_ARB_framebuffer_object 1 +#define GL_ARB_framebuffer_sRGB 1 +#define GL_ARB_geometry_shader4 1 +#define GL_ARB_get_program_binary 1 +#define GL_ARB_get_texture_sub_image 1 +#define GL_ARB_gpu_shader5 1 +#define GL_ARB_gpu_shader_fp64 1 +#define GL_ARB_gpu_shader_int64 1 +#define GL_ARB_half_float_pixel 1 +#define GL_ARB_half_float_vertex 1 +#define GL_ARB_imaging 1 +#define GL_ARB_indirect_parameters 1 +#define GL_ARB_instanced_arrays 1 +#define GL_ARB_internalformat_query 1 +#define GL_ARB_internalformat_query2 1 +#define GL_ARB_invalidate_subdata 1 +#define GL_ARB_map_buffer_alignment 1 +#define GL_ARB_map_buffer_range 1 +#define GL_ARB_matrix_palette 1 +#define GL_ARB_multi_bind 1 +#define GL_ARB_multi_draw_indirect 1 +#define GL_ARB_multisample 1 +#define GL_ARB_multitexture 1 +#define GL_ARB_occlusion_query 1 +#define GL_ARB_occlusion_query2 1 +#define GL_ARB_parallel_shader_compile 1 +#define GL_ARB_pipeline_statistics_query 1 +#define GL_ARB_pixel_buffer_object 1 +#define GL_ARB_point_parameters 1 +#define GL_ARB_point_sprite 1 +#define GL_ARB_post_depth_coverage 1 +#define GL_ARB_program_interface_query 1 +#define GL_ARB_provoking_vertex 1 +#define GL_ARB_query_buffer_object 1 +#define GL_ARB_robust_buffer_access_behavior 1 +#define GL_ARB_robustness 1 +#define GL_ARB_robustness_isolation 1 +#define GL_ARB_sample_locations 1 +#define GL_ARB_sample_shading 1 +#define GL_ARB_sampler_objects 1 +#define GL_ARB_seamless_cube_map 1 +#define GL_ARB_seamless_cubemap_per_texture 1 +#define GL_ARB_separate_shader_objects 1 +#define GL_ARB_shader_atomic_counter_ops 1 +#define GL_ARB_shader_atomic_counters 1 +#define GL_ARB_shader_ballot 1 +#define GL_ARB_shader_bit_encoding 1 +#define GL_ARB_shader_clock 1 +#define GL_ARB_shader_draw_parameters 1 +#define GL_ARB_shader_group_vote 1 +#define GL_ARB_shader_image_load_store 1 +#define GL_ARB_shader_image_size 1 +#define GL_ARB_shader_objects 1 +#define GL_ARB_shader_precision 1 +#define GL_ARB_shader_stencil_export 1 +#define GL_ARB_shader_storage_buffer_object 1 +#define GL_ARB_shader_subroutine 1 +#define GL_ARB_shader_texture_image_samples 1 +#define GL_ARB_shader_texture_lod 1 +#define GL_ARB_shader_viewport_layer_array 1 +#define GL_ARB_shading_language_100 1 +#define GL_ARB_shading_language_420pack 1 +#define GL_ARB_shading_language_include 1 +#define GL_ARB_shading_language_packing 1 +#define GL_ARB_shadow 1 +#define GL_ARB_shadow_ambient 1 +#define GL_ARB_sparse_buffer 1 +#define GL_ARB_sparse_texture 1 +#define GL_ARB_sparse_texture2 1 +#define GL_ARB_sparse_texture_clamp 1 +#define GL_ARB_stencil_texturing 1 +#define GL_ARB_sync 1 +#define GL_ARB_tessellation_shader 1 +#define GL_ARB_texture_barrier 1 +#define GL_ARB_texture_border_clamp 1 +#define GL_ARB_texture_buffer_object 1 +#define GL_ARB_texture_buffer_object_rgb32 1 +#define GL_ARB_texture_buffer_range 1 +#define GL_ARB_texture_compression 1 +#define GL_ARB_texture_compression_bptc 1 +#define GL_ARB_texture_compression_rgtc 1 +#define GL_ARB_texture_cube_map 1 +#define GL_ARB_texture_cube_map_array 1 +#define GL_ARB_texture_env_add 1 +#define GL_ARB_texture_env_combine 1 +#define GL_ARB_texture_env_crossbar 1 +#define GL_ARB_texture_env_dot3 1 +#define GL_ARB_texture_filter_minmax 1 +#define GL_ARB_texture_float 1 +#define GL_ARB_texture_gather 1 +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_ARB_texture_multisample 1 +#define GL_ARB_texture_non_power_of_two 1 +#define GL_ARB_texture_query_levels 1 +#define GL_ARB_texture_query_lod 1 +#define GL_ARB_texture_rectangle 1 +#define GL_ARB_texture_rg 1 +#define GL_ARB_texture_rgb10_a2ui 1 +#define GL_ARB_texture_stencil8 1 +#define GL_ARB_texture_storage 1 +#define GL_ARB_texture_storage_multisample 1 +#define GL_ARB_texture_swizzle 1 +#define GL_ARB_texture_view 1 +#define GL_ARB_timer_query 1 +#define GL_ARB_transform_feedback2 1 +#define GL_ARB_transform_feedback3 1 +#define GL_ARB_transform_feedback_instanced 1 +#define GL_ARB_transform_feedback_overflow_query 1 +#define GL_ARB_transpose_matrix 1 +#define GL_ARB_uniform_buffer_object 1 +#define GL_ARB_vertex_array_bgra 1 +#define GL_ARB_vertex_array_object 1 +#define GL_ARB_vertex_attrib_64bit 1 +#define GL_ARB_vertex_attrib_binding 1 +#define GL_ARB_vertex_blend 1 +#define GL_ARB_vertex_buffer_object 1 +#define GL_ARB_vertex_program 1 +#define GL_ARB_vertex_shader 1 +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#define GL_ARB_viewport_array 1 +#define GL_ARB_window_pos 1 +#define GL_ARM_mali_program_binary 1 +#define GL_ARM_mali_shader_binary 1 +#define GL_ARM_rgba8 1 +#define GL_ARM_shader_framebuffer_fetch 1 +#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 +#define GL_ATI_draw_buffers 1 +#define GL_ATI_element_array 1 +#define GL_ATI_envmap_bumpmap 1 +#define GL_ATI_fragment_shader 1 +#define GL_ATI_map_object_buffer 1 +#define GL_ATI_meminfo 1 +#define GL_ATI_pixel_format_float 1 +#define GL_ATI_pn_triangles 1 +#define GL_ATI_separate_stencil 1 +#define GL_ATI_text_fragment_shader 1 +#define GL_ATI_texture_env_combine3 1 +#define GL_ATI_texture_float 1 +#define GL_ATI_texture_mirror_once 1 +#define GL_ATI_vertex_array_object 1 +#define GL_ATI_vertex_attrib_array_object 1 +#define GL_ATI_vertex_streams 1 +#define GL_DMP_program_binary 1 +#define GL_DMP_shader_binary 1 +#define GL_EXT_422_pixels 1 +#define GL_EXT_YUV_target 1 +#define GL_EXT_abgr 1 +#define GL_EXT_base_instance 1 +#define GL_EXT_bgra 1 +#define GL_EXT_bindable_uniform 1 +#define GL_EXT_blend_color 1 +#define GL_EXT_blend_equation_separate 1 +#define GL_EXT_blend_func_extended 1 +#define GL_EXT_blend_func_separate 1 +#define GL_EXT_blend_logic_op 1 +#define GL_EXT_blend_minmax 1 +#define GL_EXT_blend_subtract 1 +#define GL_EXT_buffer_storage 1 +#define GL_EXT_clip_volume_hint 1 +#define GL_EXT_cmyka 1 +#define GL_EXT_color_buffer_float 1 +#define GL_EXT_color_buffer_half_float 1 +#define GL_EXT_color_subtable 1 +#define GL_EXT_compiled_vertex_array 1 +#define GL_EXT_convolution 1 +#define GL_EXT_coordinate_frame 1 +#define GL_EXT_copy_image 1 +#define GL_EXT_copy_texture 1 +#define GL_EXT_cull_vertex 1 +#define GL_EXT_debug_label 1 +#define GL_EXT_debug_marker 1 +#define GL_EXT_depth_bounds_test 1 +#define GL_EXT_direct_state_access 1 +#define GL_EXT_discard_framebuffer 1 +#define GL_EXT_disjoint_timer_query 1 +#define GL_EXT_draw_buffers 1 +#define GL_EXT_draw_buffers2 1 +#define GL_EXT_draw_buffers_indexed 1 +#define GL_EXT_draw_elements_base_vertex 1 +#define GL_EXT_draw_instanced 1 +#define GL_EXT_draw_range_elements 1 +#define GL_EXT_float_blend 1 +#define GL_EXT_fog_coord 1 +#define GL_EXT_framebuffer_blit 1 +#define GL_EXT_framebuffer_multisample 1 +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_EXT_framebuffer_object 1 +#define GL_EXT_framebuffer_sRGB 1 +#define GL_EXT_geometry_point_size 1 +#define GL_EXT_geometry_shader 1 +#define GL_EXT_geometry_shader4 1 +#define GL_EXT_gpu_program_parameters 1 +#define GL_EXT_gpu_shader4 1 +#define GL_EXT_gpu_shader5 1 +#define GL_EXT_histogram 1 +#define GL_EXT_index_array_formats 1 +#define GL_EXT_index_func 1 +#define GL_EXT_index_material 1 +#define GL_EXT_index_texture 1 +#define GL_EXT_instanced_arrays 1 +#define GL_EXT_light_texture 1 +#define GL_EXT_map_buffer_range 1 +#define GL_EXT_misc_attribute 1 +#define GL_EXT_multi_draw_arrays 1 +#define GL_EXT_multi_draw_indirect 1 +#define GL_EXT_multisample 1 +#define GL_EXT_multisampled_compatibility 1 +#define GL_EXT_multisampled_render_to_texture 1 +#define GL_EXT_multiview_draw_buffers 1 +#define GL_EXT_occlusion_query_boolean 1 +#define GL_EXT_packed_depth_stencil 1 +#define GL_EXT_packed_float 1 +#define GL_EXT_packed_pixels 1 +#define GL_EXT_paletted_texture 1 +#define GL_EXT_pixel_buffer_object 1 +#define GL_EXT_pixel_transform 1 +#define GL_EXT_pixel_transform_color_table 1 +#define GL_EXT_point_parameters 1 +#define GL_EXT_polygon_offset 1 +#define GL_EXT_polygon_offset_clamp 1 +#define GL_EXT_post_depth_coverage 1 +#define GL_EXT_primitive_bounding_box 1 +#define GL_EXT_provoking_vertex 1 +#define GL_EXT_pvrtc_sRGB 1 +#define GL_EXT_raster_multisample 1 +#define GL_EXT_read_format_bgra 1 +#define GL_EXT_render_snorm 1 +#define GL_EXT_rescale_normal 1 +#define GL_EXT_robustness 1 +#define GL_EXT_sRGB 1 +#define GL_EXT_sRGB_write_control 1 +#define GL_EXT_secondary_color 1 +#define GL_EXT_separate_shader_objects 1 +#define GL_EXT_separate_specular_color 1 +#define GL_EXT_shader_framebuffer_fetch 1 +#define GL_EXT_shader_image_load_formatted 1 +#define GL_EXT_shader_image_load_store 1 +#define GL_EXT_shader_implicit_conversions 1 +#define GL_EXT_shader_integer_mix 1 +#define GL_EXT_shader_io_blocks 1 +#define GL_EXT_shader_pixel_local_storage 1 +#define GL_EXT_shader_texture_lod 1 +#define GL_EXT_shadow_funcs 1 +#define GL_EXT_shadow_samplers 1 +#define GL_EXT_shared_texture_palette 1 +#define GL_EXT_sparse_texture 1 +#define GL_EXT_sparse_texture2 1 +#define GL_EXT_stencil_clear_tag 1 +#define GL_EXT_stencil_two_side 1 +#define GL_EXT_stencil_wrap 1 +#define GL_EXT_subtexture 1 +#define GL_EXT_tessellation_point_size 1 +#define GL_EXT_tessellation_shader 1 +#define GL_EXT_texture 1 +#define GL_EXT_texture3D 1 +#define GL_EXT_texture_array 1 +#define GL_EXT_texture_border_clamp 1 +#define GL_EXT_texture_buffer 1 +#define GL_EXT_texture_buffer_object 1 +#define GL_EXT_texture_compression_dxt1 1 +#define GL_EXT_texture_compression_latc 1 +#define GL_EXT_texture_compression_rgtc 1 +#define GL_EXT_texture_compression_s3tc 1 +#define GL_EXT_texture_cube_map 1 +#define GL_EXT_texture_cube_map_array 1 +#define GL_EXT_texture_env_add 1 +#define GL_EXT_texture_env_combine 1 +#define GL_EXT_texture_env_dot3 1 +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_EXT_texture_filter_minmax 1 +#define GL_EXT_texture_format_BGRA8888 1 +#define GL_EXT_texture_integer 1 +#define GL_EXT_texture_lod_bias 1 +#define GL_EXT_texture_mirror_clamp 1 +#define GL_EXT_texture_norm16 1 +#define GL_EXT_texture_object 1 +#define GL_EXT_texture_perturb_normal 1 +#define GL_EXT_texture_rg 1 +#define GL_EXT_texture_sRGB 1 +#define GL_EXT_texture_sRGB_R8 1 +#define GL_EXT_texture_sRGB_RG8 1 +#define GL_EXT_texture_sRGB_decode 1 +#define GL_EXT_texture_shared_exponent 1 +#define GL_EXT_texture_snorm 1 +#define GL_EXT_texture_storage 1 +#define GL_EXT_texture_swizzle 1 +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#define GL_EXT_texture_view 1 +#define GL_EXT_timer_query 1 +#define GL_EXT_transform_feedback 1 +#define GL_EXT_unpack_subimage 1 +#define GL_EXT_vertex_array 1 +#define GL_EXT_vertex_array_bgra 1 +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_EXT_vertex_shader 1 +#define GL_EXT_vertex_weighting 1 +#define GL_EXT_x11_sync_object 1 +#define GL_FJ_shader_binary_GCCSO 1 +#define GL_GREMEDY_frame_terminator 1 +#define GL_GREMEDY_string_marker 1 +#define GL_HP_convolution_border_modes 1 +#define GL_HP_image_transform 1 +#define GL_HP_occlusion_test 1 +#define GL_HP_texture_lighting 1 +#define GL_IBM_cull_vertex 1 +#define GL_IBM_multimode_draw_arrays 1 +#define GL_IBM_rasterpos_clip 1 +#define GL_IBM_static_data 1 +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_IBM_vertex_array_lists 1 +#define GL_IMG_multisampled_render_to_texture 1 +#define GL_IMG_program_binary 1 +#define GL_IMG_read_format 1 +#define GL_IMG_shader_binary 1 +#define GL_IMG_texture_compression_pvrtc 1 +#define GL_IMG_texture_compression_pvrtc2 1 +#define GL_IMG_texture_env_enhanced_fixed_function 1 +#define GL_IMG_user_clip_plane 1 +#define GL_INGR_blend_func_separate 1 +#define GL_INGR_color_clamp 1 +#define GL_INGR_interlace_read 1 +#define GL_INTEL_fragment_shader_ordering 1 +#define GL_INTEL_framebuffer_CMAA 1 +#define GL_INTEL_map_texture 1 +#define GL_INTEL_parallel_arrays 1 +#define GL_INTEL_performance_query 1 +#define GL_KHR_blend_equation_advanced 1 +#define GL_KHR_blend_equation_advanced_coherent 1 +#define GL_KHR_context_flush_control 1 +#define GL_KHR_debug 1 +#define GL_KHR_no_error 1 +#define GL_KHR_robust_buffer_access_behavior 1 +#define GL_KHR_robustness 1 +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_KHR_texture_compression_astc_ldr 1 +#define GL_MESAX_texture_stack 1 +#define GL_MESA_pack_invert 1 +#define GL_MESA_resize_buffers 1 +#define GL_MESA_window_pos 1 +#define GL_MESA_ycbcr_texture 1 +#define GL_NVX_conditional_render 1 +#define GL_NVX_gpu_memory_info 1 +#define GL_NV_bindless_multi_draw_indirect 1 +#define GL_NV_bindless_multi_draw_indirect_count 1 +#define GL_NV_bindless_texture 1 +#define GL_NV_blend_equation_advanced 1 +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_NV_blend_square 1 +#define GL_NV_command_list 1 +#define GL_NV_compute_program5 1 +#define GL_NV_conditional_render 1 +#define GL_NV_conservative_raster 1 +#define GL_NV_conservative_raster_dilate 1 +#define GL_NV_copy_buffer 1 +#define GL_NV_copy_depth_to_color 1 +#define GL_NV_copy_image 1 +#define GL_NV_coverage_sample 1 +#define GL_NV_deep_texture3D 1 +#define GL_NV_depth_buffer_float 1 +#define GL_NV_depth_clamp 1 +#define GL_NV_depth_nonlinear 1 +#define GL_NV_draw_buffers 1 +#define GL_NV_draw_instanced 1 +#define GL_NV_draw_texture 1 +#define GL_NV_evaluators 1 +#define GL_NV_explicit_attrib_location 1 +#define GL_NV_explicit_multisample 1 +#define GL_NV_fbo_color_attachments 1 +#define GL_NV_fence 1 +#define GL_NV_fill_rectangle 1 +#define GL_NV_float_buffer 1 +#define GL_NV_fog_distance 1 +#define GL_NV_fragment_coverage_to_color 1 +#define GL_NV_fragment_program 1 +#define GL_NV_fragment_program2 1 +#define GL_NV_fragment_program4 1 +#define GL_NV_fragment_program_option 1 +#define GL_NV_fragment_shader_interlock 1 +#define GL_NV_framebuffer_blit 1 +#define GL_NV_framebuffer_mixed_samples 1 +#define GL_NV_framebuffer_multisample 1 +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_NV_generate_mipmap_sRGB 1 +#define GL_NV_geometry_program4 1 +#define GL_NV_geometry_shader4 1 +#define GL_NV_geometry_shader_passthrough 1 +#define GL_NV_gpu_program4 1 +#define GL_NV_gpu_program5 1 +#define GL_NV_gpu_program5_mem_extended 1 +#define GL_NV_gpu_shader5 1 +#define GL_NV_half_float 1 +#define GL_NV_image_formats 1 +#define GL_NV_instanced_arrays 1 +#define GL_NV_internalformat_sample_query 1 +#define GL_NV_light_max_exponent 1 +#define GL_NV_multisample_coverage 1 +#define GL_NV_multisample_filter_hint 1 +#define GL_NV_non_square_matrices 1 +#define GL_NV_occlusion_query 1 +#define GL_NV_packed_depth_stencil 1 +#define GL_NV_parameter_buffer_object 1 +#define GL_NV_parameter_buffer_object2 1 +#define GL_NV_path_rendering 1 +#define GL_NV_path_rendering_shared_edge 1 +#define GL_NV_pixel_data_range 1 +#define GL_NV_point_sprite 1 +#define GL_NV_polygon_mode 1 +#define GL_NV_present_video 1 +#define GL_NV_primitive_restart 1 +#define GL_NV_read_buffer 1 +#define GL_NV_read_buffer_front 1 +#define GL_NV_read_depth 1 +#define GL_NV_read_depth_stencil 1 +#define GL_NV_read_stencil 1 +#define GL_NV_register_combiners 1 +#define GL_NV_register_combiners2 1 +#define GL_NV_sRGB_formats 1 +#define GL_NV_sample_locations 1 +#define GL_NV_sample_mask_override_coverage 1 +#define GL_NV_shader_atomic_counters 1 +#define GL_NV_shader_atomic_float 1 +#define GL_NV_shader_atomic_fp16_vector 1 +#define GL_NV_shader_atomic_int64 1 +#define GL_NV_shader_buffer_load 1 +#define GL_NV_shader_buffer_store 1 +#define GL_NV_shader_noperspective_interpolation 1 +#define GL_NV_shader_storage_buffer_object 1 +#define GL_NV_shader_thread_group 1 +#define GL_NV_shader_thread_shuffle 1 +#define GL_NV_shadow_samplers_array 1 +#define GL_NV_shadow_samplers_cube 1 +#define GL_NV_tessellation_program5 1 +#define GL_NV_texgen_emboss 1 +#define GL_NV_texgen_reflection 1 +#define GL_NV_texture_barrier 1 +#define GL_NV_texture_border_clamp 1 +#define GL_NV_texture_compression_s3tc_update 1 +#define GL_NV_texture_compression_vtc 1 +#define GL_NV_texture_env_combine4 1 +#define GL_NV_texture_expand_normal 1 +#define GL_NV_texture_multisample 1 +#define GL_NV_texture_npot_2D_mipmap 1 +#define GL_NV_texture_rectangle 1 +#define GL_NV_texture_shader 1 +#define GL_NV_texture_shader2 1 +#define GL_NV_texture_shader3 1 +#define GL_NV_transform_feedback 1 +#define GL_NV_transform_feedback2 1 +#define GL_NV_uniform_buffer_unified_memory 1 +#define GL_NV_vdpau_interop 1 +#define GL_NV_vertex_array_range 1 +#define GL_NV_vertex_array_range2 1 +#define GL_NV_vertex_attrib_integer_64bit 1 +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_NV_vertex_program 1 +#define GL_NV_vertex_program1_1 1 +#define GL_NV_vertex_program2 1 +#define GL_NV_vertex_program2_option 1 +#define GL_NV_vertex_program3 1 +#define GL_NV_vertex_program4 1 +#define GL_NV_video_capture 1 +#define GL_NV_viewport_array 1 +#define GL_NV_viewport_array2 1 +#define GL_OES_EGL_image 1 +#define GL_OES_EGL_image_external 1 +#define GL_OES_EGL_image_external_essl3 1 +#define GL_OES_blend_equation_separate 1 +#define GL_OES_blend_func_separate 1 +#define GL_OES_blend_subtract 1 +#define GL_OES_byte_coordinates 1 +#define GL_OES_compressed_ETC1_RGB8_sub_texture 1 +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#define GL_OES_compressed_paletted_texture 1 +#define GL_OES_copy_image 1 +#define GL_OES_depth24 1 +#define GL_OES_depth32 1 +#define GL_OES_depth_texture 1 +#define GL_OES_draw_buffers_indexed 1 +#define GL_OES_draw_elements_base_vertex 1 +#define GL_OES_draw_texture 1 +#define GL_OES_element_index_uint 1 +#define GL_OES_extended_matrix_palette 1 +#define GL_OES_fbo_render_mipmap 1 +#define GL_OES_fixed_point 1 +#define GL_OES_fragment_precision_high 1 +#define GL_OES_framebuffer_object 1 +#define GL_OES_geometry_point_size 1 +#define GL_OES_geometry_shader 1 +#define GL_OES_get_program_binary 1 +#define GL_OES_gpu_shader5 1 +#define GL_OES_mapbuffer 1 +#define GL_OES_matrix_get 1 +#define GL_OES_matrix_palette 1 +#define GL_OES_packed_depth_stencil 1 +#define GL_OES_point_size_array 1 +#define GL_OES_point_sprite 1 +#define GL_OES_primitive_bounding_box 1 +#define GL_OES_query_matrix 1 +#define GL_OES_read_format 1 +#define GL_OES_required_internalformat 1 +#define GL_OES_rgb8_rgba8 1 +#define GL_OES_sample_shading 1 +#define GL_OES_sample_variables 1 +#define GL_OES_shader_image_atomic 1 +#define GL_OES_shader_io_blocks 1 +#define GL_OES_shader_multisample_interpolation 1 +#define GL_OES_single_precision 1 +#define GL_OES_standard_derivatives 1 +#define GL_OES_stencil1 1 +#define GL_OES_stencil4 1 +#define GL_OES_stencil8 1 +#define GL_OES_stencil_wrap 1 +#define GL_OES_surfaceless_context 1 +#define GL_OES_tessellation_point_size 1 +#define GL_OES_tessellation_shader 1 +#define GL_OES_texture_3D 1 +#define GL_OES_texture_border_clamp 1 +#define GL_OES_texture_buffer 1 +#define GL_OES_texture_compression_astc 1 +#define GL_OES_texture_cube_map 1 +#define GL_OES_texture_cube_map_array 1 +#define GL_OES_texture_env_crossbar 1 +#define GL_OES_texture_float 1 +#define GL_OES_texture_float_linear 1 +#define GL_OES_texture_half_float 1 +#define GL_OES_texture_half_float_linear 1 +#define GL_OES_texture_mirrored_repeat 1 +#define GL_OES_texture_npot 1 +#define GL_OES_texture_stencil8 1 +#define GL_OES_texture_storage_multisample_2d_array 1 +#define GL_OES_texture_view 1 +#define GL_OES_vertex_array_object 1 +#define GL_OES_vertex_half_float 1 +#define GL_OES_vertex_type_10_10_10_2 1 +#define GL_OML_interlace 1 +#define GL_OML_resample 1 +#define GL_OML_subsample 1 +#define GL_OVR_multiview 1 +#define GL_OVR_multiview2 1 +#define GL_PGI_misc_hints 1 +#define GL_PGI_vertex_hints 1 +#define GL_QCOM_alpha_test 1 +#define GL_QCOM_binning_control 1 +#define GL_QCOM_driver_control 1 +#define GL_QCOM_extended_get 1 +#define GL_QCOM_extended_get2 1 +#define GL_QCOM_perfmon_global_mode 1 +#define GL_QCOM_tiled_rendering 1 +#define GL_QCOM_writeonly_rendering 1 +#define GL_REND_screen_coordinates 1 +#define GL_S3_s3tc 1 +#define GL_SGIS_detail_texture 1 +#define GL_SGIS_fog_function 1 +#define GL_SGIS_generate_mipmap 1 +#define GL_SGIS_multisample 1 +#define GL_SGIS_pixel_texture 1 +#define GL_SGIS_point_line_texgen 1 +#define GL_SGIS_point_parameters 1 +#define GL_SGIS_sharpen_texture 1 +#define GL_SGIS_texture4D 1 +#define GL_SGIS_texture_border_clamp 1 +#define GL_SGIS_texture_color_mask 1 +#define GL_SGIS_texture_edge_clamp 1 +#define GL_SGIS_texture_filter4 1 +#define GL_SGIS_texture_lod 1 +#define GL_SGIS_texture_select 1 +#define GL_SGIX_async 1 +#define GL_SGIX_async_histogram 1 +#define GL_SGIX_async_pixel 1 +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_SGIX_calligraphic_fragment 1 +#define GL_SGIX_clipmap 1 +#define GL_SGIX_convolution_accuracy 1 +#define GL_SGIX_depth_pass_instrument 1 +#define GL_SGIX_depth_texture 1 +#define GL_SGIX_flush_raster 1 +#define GL_SGIX_fog_offset 1 +#define GL_SGIX_fragment_lighting 1 +#define GL_SGIX_framezoom 1 +#define GL_SGIX_igloo_interface 1 +#define GL_SGIX_instruments 1 +#define GL_SGIX_interlace 1 +#define GL_SGIX_ir_instrument1 1 +#define GL_SGIX_list_priority 1 +#define GL_SGIX_pixel_texture 1 +#define GL_SGIX_pixel_tiles 1 +#define GL_SGIX_polynomial_ffd 1 +#define GL_SGIX_reference_plane 1 +#define GL_SGIX_resample 1 +#define GL_SGIX_scalebias_hint 1 +#define GL_SGIX_shadow 1 +#define GL_SGIX_shadow_ambient 1 +#define GL_SGIX_sprite 1 +#define GL_SGIX_subsample 1 +#define GL_SGIX_tag_sample_buffer 1 +#define GL_SGIX_texture_add_env 1 +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_SGIX_texture_lod_bias 1 +#define GL_SGIX_texture_multi_buffer 1 +#define GL_SGIX_texture_scale_bias 1 +#define GL_SGIX_vertex_preclip 1 +#define GL_SGIX_ycrcb 1 +#define GL_SGIX_ycrcb_subsample 1 +#define GL_SGIX_ycrcba 1 +#define GL_SGI_color_matrix 1 +#define GL_SGI_color_table 1 +#define GL_SGI_texture_color_table 1 +#define GL_SUNX_constant_data 1 +#define GL_SUN_convolution_border_modes 1 +#define GL_SUN_global_alpha 1 +#define GL_SUN_mesh_array 1 +#define GL_SUN_slice_accum 1 +#define GL_SUN_triangle_list 1 +#define GL_SUN_vertex 1 +#define GL_VIV_shader_binary 1 +#define GL_WIN_phong_shading 1 +#define GL_WIN_specular_fog 1 + +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +#define GL_FALSE 0 +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_NONE 0 +#define GL_NONE_OES 0 +#define GL_NO_ERROR 0 +#define GL_ZERO 0 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_POINTS 0x0000 +#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_CURRENT_BIT 0x00000001 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_RED_BIT_ATI 0x00000001 +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_POINT_BIT 0x00000002 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 +#define GL_GEOMETRY_SHADER_BIT_OES 0x00000004 +#define GL_LINE_BIT 0x00000004 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_POLYGON_BIT 0x00000008 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008 +#define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010 +#define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_FOG_BIT 0x00000080 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_HINT_BIT 0x00008000 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_LINES 0x0001 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_NOP_COMMAND_NV 0x0001 +#define GL_RESTART_SUN 0x0001 +#define GL_TRACE_OPERATIONS_BIT_MESA 0x0001 +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_EVAL_BIT 0x00010000 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 +#define GL_LINE_LOOP 0x0002 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_TRACE_PRIMITIVES_BIT_MESA 0x0002 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_LIST_BIT 0x00020000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 +#define GL_LINE_STRIP 0x0003 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_TRACE_ARRAYS_BIT_MESA 0x0004 +#define GL_TRIANGLES 0x0004 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 +#define GL_QUADS 0x0007 +#define GL_QUADS_EXT 0x0007 +#define GL_QUADS_OES 0x0007 +#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_QUAD_STRIP 0x0008 +#define GL_TRACE_TEXTURES_BIT_MESA 0x0008 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 +#define GL_POLYGON 0x0009 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINES_ADJACENCY_OES 0x000A +#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A +#define GL_BLEND_COLOR_COMMAND_NV 0x000B +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_LINE_STRIP_ADJACENCY_OES 0x000B +#define GL_STENCIL_REF_COMMAND_NV 0x000C +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLES_ADJACENCY_OES 0x000C +#define GL_LINE_WIDTH_COMMAND_NV 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D +#define GL_PATCHES 0x000E +#define GL_PATCHES_EXT 0x000E +#define GL_PATCHES_OES 0x000E +#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E +#define GL_ALPHA_REF_COMMAND_NV 0x000F +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_TRACE_PIXELS_BIT_MESA 0x0010 +#define GL_VIEWPORT_COMMAND_NV 0x0010 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_SCISSOR_COMMAND_NV 0x0011 +#define GL_FRONT_FACE_COMMAND_NV 0x0012 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +#define GL_TRACE_ERRORS_BIT_MESA 0x0020 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_PERSISTENT_BIT_EXT 0x0040 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_MAP_COHERENT_BIT_EXT 0x0080 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_BOLD_BIT_NV 0x01 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_ACCUM 0x0100 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_LOAD 0x0101 +#define GL_RETURN 0x0102 +#define GL_MULT 0x0103 +#define GL_ADD 0x0104 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_MOVE_TO_NV 0x02 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_STORAGE_BIT_EXT 0x0200 +#define GL_NEVER 0x0200 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_LINE_TO_NV 0x04 +#define GL_FRONT_LEFT 0x0400 +#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_INVALID_FRAMEBUFFER_OPERATION_OES 0x0506 +#define GL_CONTEXT_LOST 0x0507 +#define GL_CONTEXT_LOST_KHR 0x0507 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_EXP 0x0800 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_EXP2 0x0801 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LIST_MODE 0x0B30 +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_MODE_NV 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_SHADE_MODEL 0x0B54 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_FOG 0x0B60 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_COLOR 0x0B66 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_MATRIX_MODE 0x0BA0 +#define GL_NORMALIZE 0x0BA1 +#define GL_VIEWPORT 0x0BA2 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 +#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 +#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC 0x0BC1 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +#define GL_DITHER 0x0BD0 +#define GL_BLEND_DST 0x0BE0 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND 0x0BE2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_AUX_BUFFERS 0x0C00 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER 0x0C02 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_READ_BUFFER_NV 0x0C02 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_INDEX_MODE 0x0C30 +#define GL_RGBA_MODE 0x0C31 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_RENDER_MODE 0x0C40 +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_CLIP_PLANES_IMG 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_INDEX_BITS 0x0D51 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_TEXTURE_BORDER_COLOR_OES 0x1004 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_TARGET 0x1006 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_2_BYTES_NV 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_3_BYTES_NV 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_4_BYTES_NV 0x1409 +#define GL_DOUBLE 0x140A +#define GL_DOUBLE_EXT 0x140A +#define GL_HALF_APPLE 0x140B +#define GL_HALF_FLOAT 0x140B +#define GL_HALF_FLOAT_ARB 0x140B +#define GL_HALF_FLOAT_NV 0x140B +#define GL_FIXED 0x140C +#define GL_FIXED_OES 0x140C +#define GL_INT64_ARB 0x140E +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_ARB 0x140F +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_CLEAR 0x1500 +#define GL_AND 0x1501 +#define GL_AND_REVERSE 0x1502 +#define GL_COPY 0x1503 +#define GL_AND_INVERTED 0x1504 +#define GL_NOOP 0x1505 +#define GL_XOR 0x1506 +#define GL_XOR_NV 0x1506 +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_EQUIV 0x1509 +#define GL_INVERT 0x150A +#define GL_OR_REVERSE 0x150B +#define GL_COPY_INVERTED 0x150C +#define GL_OR_INVERTED 0x150D +#define GL_NAND 0x150E +#define GL_SET 0x150F +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_EMISSION 0x1600 +#define GL_SHININESS 0x1601 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_MODELVIEW 0x1700 +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_PATH_MODELVIEW_NV 0x1700 +#define GL_PATH_PROJECTION_NV 0x1701 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_COLOR 0x1800 +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH 0x1801 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL 0x1802 +#define GL_STENCIL_EXT 0x1802 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_COLOR_INDEX 0x1900 +#define GL_STENCIL_INDEX 0x1901 +#define GL_STENCIL_INDEX_OES 0x1901 +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_RED 0x1903 +#define GL_RED_EXT 0x1903 +#define GL_RED_NV 0x1903 +#define GL_GREEN 0x1904 +#define GL_GREEN_NV 0x1904 +#define GL_BLUE 0x1905 +#define GL_BLUE_NV 0x1905 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#define GL_CONIC_CURVE_TO_NV 0x1A +#define GL_BITMAP 0x1A00 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B +#define GL_POINT 0x1B00 +#define GL_POINT_NV 0x1B00 +#define GL_LINE 0x1B01 +#define GL_LINE_NV 0x1B01 +#define GL_FILL 0x1B02 +#define GL_FILL_NV 0x1B02 +#define GL_RENDER 0x1C00 +#define GL_FEEDBACK 0x1C01 +#define GL_SELECT 0x1C02 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_S 0x2000 +#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 +#define GL_MODULATE 0x2100 +#define GL_DECAL 0x2101 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_ENV 0x2300 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_LINEAR_NV 0x2400 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_LINEAR_NV 0x2401 +#define GL_SPHERE_MAP 0x2402 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_GEN_MODE_OES 0x2500 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_PLANE 0x2502 +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_CLAMP 0x2900 +#define GL_REPEAT 0x2901 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_POINT_NV 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_LINE_NV 0x2A02 +#define GL_R3_G3_B2 0x2A10 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE0_APPLE 0x3000 +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE0_IMG 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE1_APPLE 0x3001 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE1_IMG 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE2_APPLE 0x3002 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE2_IMG 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE3_APPLE 0x3003 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE3_IMG 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE4_APPLE 0x3004 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE4_IMG 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE5_APPLE 0x3005 +#define GL_CLIP_PLANE5 0x3005 +#define GL_CLIP_PLANE5_IMG 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE6_APPLE 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_CLIP_DISTANCE7_APPLE 0x3007 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_LIGHT0 0x4000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_ABGR_EXT 0x8000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_COLOR_EXT 0x8005 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_FUNC_ADD_OES 0x8006 +#define GL_MIN 0x8007 +#define GL_MIN_EXT 0x8007 +#define GL_MAX 0x8008 +#define GL_MAX_EXT 0x8008 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_EXT 0x8009 +#define GL_BLEND_EQUATION_OES 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_RGB_OES 0x8009 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_SUBTRACT_OES 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#define GL_FUNC_REVERSE_SUBTRACT_OES 0x800B +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE 0x8016 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +#define GL_HISTOGRAM 0x8024 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +#define GL_RESCALE_NORMAL 0x803A +#define GL_RESCALE_NORMAL_EXT 0x803A +#define GL_ALPHA4 0x803B +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA8_OES 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16 0x803E +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16 0x804D +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4 0x804F +#define GL_RGB4_EXT 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB8_OES 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGBA8_OES 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16 0x805B +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +#define GL_TEXTURE_3D_BINDING_OES 0x806A +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_TEXTURE_3D_OES 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_VERTEX_ARRAY 0x8074 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_VERTEX_ARRAY_KHR 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +#define GL_INTERLACE_SGIX 0x8094 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +#define GL_MULTISAMPLE 0x809D +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_DST_RGB_OES 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_SRC_RGB_OES 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_DST_ALPHA_OES 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +#define GL_BLEND_SRC_ALPHA_OES 0x80CB +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#define GL_COLOR_TABLE 0x80D0 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +#define GL_BGR 0x80E0 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_BGRA_EXT 0x80E1 +#define GL_BGRA_IMG 0x80E1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#define GL_CLAMP_TO_BORDER_EXT 0x812D +#define GL_CLAMP_TO_BORDER_NV 0x812D +#define GL_CLAMP_TO_BORDER_OES 0x812D +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +#define GL_LIST_PRIORITY_SGIX 0x8182 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX 0x8184 +#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX 0x8185 +#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX 0x8186 +#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187 +#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188 +#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX 0x8189 +#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX 0x818A +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#define GL_WRAP_BORDER_SUN 0x81D4 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221 +#define GL_INDEX 0x8222 +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_RG 0x8227 +#define GL_RG_EXT 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R8_EXT 0x8229 +#define GL_R16 0x822A +#define GL_R16_EXT 0x822A +#define GL_RG8 0x822B +#define GL_RG8_EXT 0x822B +#define GL_RG16 0x822C +#define GL_RG16_EXT 0x822C +#define GL_R16F 0x822D +#define GL_R16F_EXT 0x822D +#define GL_R32F 0x822E +#define GL_R32F_EXT 0x822E +#define GL_RG16F 0x822F +#define GL_RG16F_EXT 0x822F +#define GL_RG32F 0x8230 +#define GL_RG32F_EXT 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_MAX_VIEWPORTS_NV 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_SUBPIXEL_BITS_EXT 0x825C +#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_VIEWPORT_BOUNDS_RANGE_EXT 0x825D +#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E +#define GL_LAYER_PROVOKING_VERTEX_OES 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_EXT 0x825F +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +#define GL_UNDEFINED_VERTEX_EXT 0x8260 +#define GL_UNDEFINED_VERTEX_OES 0x8260 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +#define GL_NO_RESET_NOTIFICATION_KHR 0x8261 +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_SRGB_DECODE_ARB 0x8299 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB +#define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC +#define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD +#define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE +#define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_BUFFER 0x82E0 +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_QUERY_KHR 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_PROGRAM_PIPELINE_KHR 0x82E4 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_SAMPLER 0x82E6 +#define GL_SAMPLER_KHR 0x82E6 +#define GL_DISPLAY_LIST 0x82E7 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_QUERY_TARGET 0x82EA +#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED +#define GL_VERTICES_SUBMITTED_ARB 0x82EE +#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 +#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 +#define GL_MAX_CULL_DISTANCES 0x82F9 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC +#define GL_DEPTH_PASS_INSTRUMENT_SGIX 0x8310 +#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311 +#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312 +#define GL_FRAGMENTS_INSTRUMENT_SGIX 0x8313 +#define GL_FRAGMENTS_INSTRUMENT_COUNTERS_SGIX 0x8314 +#define GL_FRAGMENTS_INSTRUMENT_MAX_SGIX 0x8315 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#define GL_UNPACK_COMPRESSED_SIZE_SGIX 0x831A +#define GL_PACK_MAX_COMPRESSED_SIZE_SGIX 0x831B +#define GL_PACK_COMPRESSED_SIZE_SGIX 0x831C +#define GL_SLIM8U_SGIX 0x831D +#define GL_SLIM10U_SGIX 0x831E +#define GL_SLIM12S_SGIX 0x831F +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#define GL_ASYNC_MARKER_SGIX 0x8329 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +#define GL_LINE_QUALITY_HINT_SGIX 0x835B +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_BYTE_2_3_3_REV_EXT 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_EXT 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_5_6_5_REV_EXT 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_8_8_8_8_REV_EXT 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#define GL_MIRRORED_REPEAT_OES 0x8370 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +#define GL_SUBTRACT 0x84E7 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_MAX_RENDERBUFFER_SIZE_OES 0x84E8 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_COMBINE4_NV 0x8503 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_INCR_WRAP 0x8507 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_INCR_WRAP_OES 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_DECR_WRAP_EXT 0x8508 +#define GL_DECR_WRAP_OES 0x8508 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +#define GL_NORMAL_MAP 0x8511 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_NORMAL_MAP_OES 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_REFLECTION_MAP_NV 0x8512 +#define GL_REFLECTION_MAP_OES 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_CUBE_MAP_OES 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_BINDING_CUBE_MAP_OES 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_OES 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_OES 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_OES 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_OES 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_OES 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_OES 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_OES 0x851C +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#define GL_INTERLACE_READ_INGR 0x8568 +#define GL_COMBINE 0x8570 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE 0x8573 +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT 0x8576 +#define GL_CONSTANT_ARB 0x8576 +#define GL_CONSTANT_EXT 0x8576 +#define GL_CONSTANT_NV 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_PREVIOUS_ARB 0x8578 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SRC0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SRC1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SRC2_RGB 0x8582 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SRC1_ALPHA 0x8589 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_SRC2_ALPHA 0x858A +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_OPERAND2_ALPHA_EXT 0x859A +#define GL_OPERAND3_ALPHA_NV 0x859B +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_YCBCR_422_APPLE 0x85B9 +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +#define GL_SLICE_ACCUM_SUN 0x85CC +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_DEPTH_CLAMP 0x864F +#define GL_DEPTH_CLAMP_NV 0x864F +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_MAX_VERTEX_UNITS_OES 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_TYPE_OES 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_STRIDE_OES 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_SIZE_OES 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_POINTER_OES 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_WEIGHT_ARRAY_OES 0x86AD +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA 0x86AF +#define GL_DOT3_RGBA_ARB 0x86AF +#define GL_DOT3_RGBA_IMG 0x86AF +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_Z400_BINARY_AMD 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_DEPTH_STENCIL_MESA 0x8750 +#define GL_UNSIGNED_INT_24_8_MESA 0x8751 +#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752 +#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753 +#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754 +#define GL_TRACE_MASK_MESA 0x8755 +#define GL_TRACE_NAME_MESA 0x8756 +#define GL_YCBCR_MESA 0x8757 +#define GL_PACK_INVERT_MESA 0x8758 +#define GL_DEBUG_OBJECT_MESA 0x8759 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_DEBUG_PRINT_MESA 0x875A +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_DEBUG_ASSERT_MESA 0x875B +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_RGBA32F 0x8814 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGB32F_ARB 0x8815 +#define GL_RGB32F_EXT 0x8815 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA16F 0x881A +#define GL_RGBA16F_ARB 0x881A +#define GL_RGBA16F_EXT 0x881A +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB16F 0x881B +#define GL_RGB16F_ARB 0x881B +#define GL_RGB16F_EXT 0x881B +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_ALPHA16F_EXT 0x881C +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#define GL_DRAW_BUFFER15_ATI 0x8834 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +#define GL_BLEND_EQUATION_ALPHA_OES 0x883D +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MATRIX_PALETTE_OES 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_MAX_PALETTE_MATRICES_OES 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_CURRENT_PALETTE_MATRIX_OES 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_MATRIX_INDEX_ARRAY_OES 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_SIZE_OES 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_TYPE_OES 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_OES 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +#define GL_MATRIX_INDEX_ARRAY_POINTER_OES 0x8849 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#define GL_POINT_SPRITE 0x8861 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_POINT_SPRITE_OES 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_COORD_REPLACE_ARB 0x8862 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_COORD_REPLACE_OES 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_CURRENT_QUERY 0x8865 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F +#define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_OES 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_READ_ONLY 0x88B8 +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +#define GL_WRITE_DISCARD_NV 0x88BE +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_DYNAMIC_COPY_ARB 0x88EA +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_ETC1_SRGB8_NV 0x88EE +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#define GL_SRC1_COLOR 0x88F9 +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SAMPLES_PASSED_ARB 0x8914 +#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 +#define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_SAMPLER_BINDING 0x8919 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_FIXED_ONLY_ARB 0x891D +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#define GL_POINT_SIZE_ARRAY_TYPE_OES 0x898A +#define GL_POINT_SIZE_ARRAY_STRIDE_OES 0x898B +#define GL_POINT_SIZE_ARRAY_POINTER_OES 0x898C +#define GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES 0x898D +#define GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES 0x898E +#define GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES 0x898F +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_RGB_RAW_422_APPLE 0x8A51 +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 +#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x3_NV 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT2x4_NV 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x2_NV 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT3x4_NV 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x2_NV 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_FLOAT_MAT4x3_NV 0x8B6A +#define GL_DELETE_STATUS 0x8B80 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#define GL_POINT_SIZE_ARRAY_OES 0x8B9C +#define GL_TEXTURE_CROP_RECT_OES 0x8B9D +#define GL_MATRIX_INDEX_ARRAY_BUFFER_BINDING_OES 0x8B9E +#define GL_POINT_SIZE_ARRAY_BUFFER_BINDING_OES 0x8B9F +#define GL_FRAGMENT_PROGRAM_POSITION_MESA 0x8BB0 +#define GL_FRAGMENT_PROGRAM_CALLBACK_MESA 0x8BB1 +#define GL_FRAGMENT_PROGRAM_CALLBACK_FUNC_MESA 0x8BB2 +#define GL_FRAGMENT_PROGRAM_CALLBACK_DATA_MESA 0x8BB3 +#define GL_VERTEX_PROGRAM_POSITION_MESA 0x8BB4 +#define GL_VERTEX_PROGRAM_CALLBACK_MESA 0x8BB5 +#define GL_VERTEX_PROGRAM_CALLBACK_FUNC_MESA 0x8BB6 +#define GL_VERTEX_PROGRAM_CALLBACK_DATA_MESA 0x8BB7 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC +#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#define GL_MODULATE_COLOR_IMG 0x8C04 +#define GL_RECIP_ADD_SIGNED_ALPHA_IMG 0x8C05 +#define GL_TEXTURE_ALPHA_MODULATE_IMG 0x8C06 +#define GL_FACTOR_ALPHA_MODULATE_IMG 0x8C07 +#define GL_FRAGMENT_ALPHA_MODULATE_IMG 0x8C08 +#define GL_ADD_BLEND_IMG 0x8C09 +#define GL_SGX_BINARY_IMG 0x8C0A +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_OES 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_SAMPLE_SHADING_OES 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +#define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_R11F_G11F_B10F_APPLE 0x8C3A +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#define GL_RGB9_E5 0x8C3D +#define GL_RGB9_E5_APPLE 0x8C3D +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#define GL_SRGB 0x8C40 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB8_NV 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_PRIMITIVES_GENERATED_OES 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_FRAMEBUFFER_BINDING_OES 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_RENDERBUFFER_BINDING_ANGLE 0x8CA7 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_RENDERBUFFER_BINDING_OES 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_OES 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_OES 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_OES 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_OES 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_COMPLETE_OES 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_OES 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_OES 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_FRAMEBUFFER_UNSUPPORTED_OES 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT0_OES 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_DEPTH_ATTACHMENT_OES 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_STENCIL_ATTACHMENT_OES 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_FRAMEBUFFER_OES 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_OES 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_WIDTH_OES 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_HEIGHT_OES 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_OES 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX8_OES 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_RED_SIZE_OES 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_GREEN_SIZE_OES 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_BLUE_SIZE_OES 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_ALPHA_SIZE_OES 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_DEPTH_SIZE_OES 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#define GL_RENDERBUFFER_STENCIL_SIZE_OES 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_MAX_SAMPLES_EXT 0x8D57 +#define GL_MAX_SAMPLES_NV 0x8D57 +#define GL_TEXTURE_GEN_STR_OES 0x8D60 +#define GL_HALF_FLOAT_OES 0x8D61 +#define GL_RGB565 0x8D62 +#define GL_RGB565_OES 0x8D62 +#define GL_ETC1_RGB8_OES 0x8D64 +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +#define GL_RGBA32UI 0x8D70 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI 0x8D76 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI 0x8D7C +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I 0x8D82 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I 0x8D88 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I 0x8D8E +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER 0x8D94 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER 0x8D97 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +#define GL_INT_2_10_10_10_REV 0x8D9F +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_LAYER_NV 0x8DAA +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_BUFFER_OES 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_INT_SAMPLER_BUFFER_OES 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_SHADER_OES 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +#define GL_QUERY_WAIT_INVERTED 0x8E17 +#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 +#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 +#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A +#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_TIMESTAMP 0x8E28 +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +#define GL_SAMPLE_LOCATION_ARB 0x8E50 +#define GL_SAMPLE_LOCATION_NV 0x8E50 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_VERTICES_EXT 0x8E72 +#define GL_PATCH_VERTICES_OES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_INNER_LEVEL_EXT 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_PATCH_DEFAULT_OUTER_LEVEL_EXT 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75 +#define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_MODE_EXT 0x8E76 +#define GL_TESS_GEN_MODE_OES 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_SPACING_EXT 0x8E77 +#define GL_TESS_GEN_SPACING_OES 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78 +#define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_TESS_GEN_POINT_MODE_EXT 0x8E79 +#define GL_TESS_GEN_POINT_MODE_OES 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_ISOLINES_EXT 0x8E7A +#define GL_ISOLINES_OES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_ODD_EXT 0x8E7B +#define GL_FRACTIONAL_ODD_OES 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_FRACTIONAL_EVEN_EXT 0x8E7C +#define GL_FRACTIONAL_EVEN_OES 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_PATCH_VERTICES_EXT 0x8E7D +#define GL_MAX_PATCH_VERTICES_OES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E +#define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80 +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84 +#define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_EVALUATION_SHADER_EXT 0x8E87 +#define GL_TESS_EVALUATION_SHADER_OES 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TESS_CONTROL_SHADER_EXT 0x8E88 +#define GL_TESS_CONTROL_SHADER_OES 0x8E88 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_SAMPLES_NV 0x8ED4 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_READ_BUFFER_NV 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_COPY_WRITE_BUFFER_NV 0x8F37 +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 +#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 +#define GL_FETCH_PER_SAMPLE_ARM 0x8F65 +#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_R16_SNORM_EXT 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RG16_SNORM_EXT 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGB16_SNORM_EXT 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_RGBA16_SNORM_EXT 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#define GL_GPU_DISJOINT_EXT 0x8FBB +#define GL_SR8_EXT 0x8FBD +#define GL_SRG8_EXT 0x8FBE +#define GL_SHADER_BINARY_VIV 0x8FC4 +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_ARB 0x8FE9 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_ARB 0x8FEA +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_ARB 0x8FEB +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 +#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_BUFFER_OES 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_BUFFER_OES 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_RGB10_A2UI 0x906F +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D +#define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E +#define GL_TEXTURE_BUFFER_SIZE_OES 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_TEXTURE_SPARSE_EXT 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 +#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA +#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA +#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 +#define GL_COMPLETION_STATUS_ARB 0x91B1 +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_UNPACK_FLIP_Y_WEBGL 0x9240 +#define GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL 0x9241 +#define GL_CONTEXT_LOST_WEBGL 0x9242 +#define GL_UNPACK_COLORSPACE_CONVERSION_WEBGL 0x9243 +#define GL_BROWSER_DEFAULT_WEBGL 0x9244 +#define GL_SHADER_BINARY_DMP 0x9250 +#define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251 +#define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252 +#define GL_DMP_PROGRAM_BINARY_DMP 0x9253 +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_R11_EAC_OES 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_SIGNED_R11_EAC_OES 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_RG11_EAC_OES 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_COMPRESSED_SIGNED_RG11_EAC_OES 0x9273 +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_RGB8_ETC2_OES 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_SRGB8_ETC2_OES 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2_OES 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_RGBA8_ETC2_EAC_OES 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC_OES 0x9279 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_DISJOINT_NV 0x9283 +#define GL_CONJOINT_NV 0x9284 +#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#define GL_SRC_NV 0x9286 +#define GL_DST_NV 0x9287 +#define GL_SRC_OVER_NV 0x9288 +#define GL_DST_OVER_NV 0x9289 +#define GL_SRC_IN_NV 0x928A +#define GL_DST_IN_NV 0x928B +#define GL_SRC_OUT_NV 0x928C +#define GL_DST_OUT_NV 0x928D +#define GL_SRC_ATOP_NV 0x928E +#define GL_DST_ATOP_NV 0x928F +#define GL_PLUS_NV 0x9291 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_MULTIPLY 0x9294 +#define GL_MULTIPLY_KHR 0x9294 +#define GL_MULTIPLY_NV 0x9294 +#define GL_SCREEN 0x9295 +#define GL_SCREEN_KHR 0x9295 +#define GL_SCREEN_NV 0x9295 +#define GL_OVERLAY 0x9296 +#define GL_OVERLAY_KHR 0x9296 +#define GL_OVERLAY_NV 0x9296 +#define GL_DARKEN 0x9297 +#define GL_DARKEN_KHR 0x9297 +#define GL_DARKEN_NV 0x9297 +#define GL_LIGHTEN 0x9298 +#define GL_LIGHTEN_KHR 0x9298 +#define GL_LIGHTEN_NV 0x9298 +#define GL_COLORDODGE 0x9299 +#define GL_COLORDODGE_KHR 0x9299 +#define GL_COLORDODGE_NV 0x9299 +#define GL_COLORBURN 0x929A +#define GL_COLORBURN_KHR 0x929A +#define GL_COLORBURN_NV 0x929A +#define GL_HARDLIGHT 0x929B +#define GL_HARDLIGHT_KHR 0x929B +#define GL_HARDLIGHT_NV 0x929B +#define GL_SOFTLIGHT 0x929C +#define GL_SOFTLIGHT_KHR 0x929C +#define GL_SOFTLIGHT_NV 0x929C +#define GL_DIFFERENCE 0x929E +#define GL_DIFFERENCE_KHR 0x929E +#define GL_DIFFERENCE_NV 0x929E +#define GL_MINUS_NV 0x929F +#define GL_EXCLUSION 0x92A0 +#define GL_EXCLUSION_KHR 0x92A0 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_CONTRAST_NV 0x92A1 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_HUE 0x92AD +#define GL_HSL_HUE_KHR 0x92AD +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_SATURATION 0x92AE +#define GL_HSL_SATURATION_KHR 0x92AE +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_HSL_COLOR 0x92AF +#define GL_HSL_COLOR_KHR 0x92AF +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_LUMINOSITY 0x92B0 +#define GL_HSL_LUMINOSITY_KHR 0x92B0 +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_PRIMITIVE_BOUNDING_BOX 0x92BE +#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE +#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE +#define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD +#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_IS_PER_PATCH 0x92E7 +#define GL_IS_PER_PATCH_EXT 0x92E7 +#define GL_IS_PER_PATCH_OES 0x92E7 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 +#define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_RASTER_MULTISAMPLE_EXT 0x9327 +#define GL_RASTER_SAMPLES_EXT 0x9328 +#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 +#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A +#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B +#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C +#define GL_DEPTH_SAMPLES_NV 0x932D +#define GL_STENCIL_SAMPLES_NV 0x932E +#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F +#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 +#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 +#define GL_COVERAGE_MODULATION_NV 0x9332 +#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#define GL_FILL_RECTANGLE_NV 0x933C +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 +#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 +#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 +#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_CLIP_ORIGIN 0x935C +#define GL_CLIP_DEPTH_MODE 0x935D +#define GL_NEGATIVE_ONE_TO_ONE 0x935E +#define GL_ZERO_TO_ONE 0x935F +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 +#define GL_WEIGHTED_AVERAGE_ARB 0x9367 +#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 +#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 +#define GL_FONT_UNAVAILABLE_NV 0x936A +#define GL_FONT_UNINTELLIGIBLE_NV 0x936B +#define GL_STANDARD_FONT_FORMAT_NV 0x936C +#define GL_FRAGMENT_INPUT_NV 0x936D +#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E +#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F +#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 +#define GL_MULTISAMPLES_NV 0x9371 +#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 +#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 +#define GL_CONFORMANT_NV 0x9374 +#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 +#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A +#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE 0x9381 +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY 0x9382 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +#define GL_BGRA8_EXT 0x93A1 +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#define GL_COMPRESSED_RGBA_ASTC_4x4 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12 0x93BD +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 +#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 +#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 +#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 +#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 +#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 +#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 +#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 +#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 +#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12 0x93DD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 +#define GL_MAX_VIEWS_OVR 0x9631 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 +#define GL_GS_SHADER_BINARY_MTK 0x9640 +#define GL_GS_PROGRAM_BINARY_MTK 0x9641 +#define GL_SHARED_EDGE_NV 0xC0 +#define GL_ROUNDED_RECT_NV 0xE8 +#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 +#define GL_ROUNDED_RECT2_NV 0xEA +#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB +#define GL_ROUNDED_RECT4_NV 0xEC +#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED +#define GL_ROUNDED_RECT8_NV 0xEE +#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_RELATIVE_RECT_NV 0xF7 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_TRACE_ALL_BITS_MESA 0xFFFF +#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF +#define GL_INVALID_INDEX 0xFFFFFFFF +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFF +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_ONE 1 +#define GL_TRUE 1 +#define GL_VERSION_ES_CL_1_0 1 +#define GL_VERSION_ES_CL_1_1 1 +#define GL_VERSION_ES_CM_1_1 1 +#define GL_CULL_VERTEX_IBM 103050 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 + +typedef void (GLAPIENTRY *PFNGLACCUMPROC)(GLenum op, GLfloat value); +typedef void (GLAPIENTRY *PFNGLACCUMXOESPROC)(GLenum op, GLfixed value); +typedef void (GLAPIENTRY *PFNGLACTIVEPROGRAMEXTPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLACTIVESHADERPROGRAMPROC)(GLuint pipeline, GLuint program); +typedef void (GLAPIENTRY *PFNGLACTIVESHADERPROGRAMEXTPROC)(GLuint pipeline, GLuint program); +typedef void (GLAPIENTRY *PFNGLACTIVESTENCILFACEEXTPROC)(GLenum face); +typedef void (GLAPIENTRY *PFNGLACTIVETEXTUREPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLACTIVETEXTUREARBPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLACTIVEVARYINGNVPROC)(GLuint program, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY *PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY *PFNGLALPHAFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCPROC)(GLenum func, GLfloat ref); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCQCOMPROC)(GLenum func, GLclampf ref); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCXPROC)(GLenum func, GLfixed ref); +typedef void (GLAPIENTRY *PFNGLALPHAFUNCXOESPROC)(GLenum func, GLfixed ref); +typedef void (GLAPIENTRY *PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC)(void); +typedef void (GLAPIENTRY *PFNGLAPPLYTEXTUREEXTPROC)(GLenum mode); +typedef GLboolean (GLAPIENTRY *PFNGLAREPROGRAMSRESIDENTNVPROC)(GLsizei n, const GLuint * programs, GLboolean * residences); +typedef GLboolean (GLAPIENTRY *PFNGLARETEXTURESRESIDENTPROC)(GLsizei n, const GLuint * textures, GLboolean * residences); +typedef GLboolean (GLAPIENTRY *PFNGLARETEXTURESRESIDENTEXTPROC)(GLsizei n, const GLuint * textures, GLboolean * residences); +typedef void (GLAPIENTRY *PFNGLARRAYELEMENTPROC)(GLint i); +typedef void (GLAPIENTRY *PFNGLARRAYELEMENTEXTPROC)(GLint i); +typedef void (GLAPIENTRY *PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY *PFNGLASYNCMARKERSGIXPROC)(GLuint marker); +typedef void (GLAPIENTRY *PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj); +typedef void (GLAPIENTRY *PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAPIENTRY *PFNGLBEGINPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBEGINCONDITIONALRENDERNVPROC)(GLuint id, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBEGINCONDITIONALRENDERNVXPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINFRAGMENTSHADERATIPROC)(void); +typedef void (GLAPIENTRY *PFNGLBEGINOCCLUSIONQUERYNVPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINPERFMONITORAMDPROC)(GLuint monitor); +typedef void (GLAPIENTRY *PFNGLBEGINPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYARBPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYEXTPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINQUERYINDEXEDPROC)(GLenum target, GLuint index, GLuint id); +typedef void (GLAPIENTRY *PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); +typedef void (GLAPIENTRY *PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)(GLenum primitiveMode); +typedef void (GLAPIENTRY *PFNGLBEGINTRANSFORMFEEDBACKNVPROC)(GLenum primitiveMode); +typedef void (GLAPIENTRY *PFNGLBEGINVERTEXSHADEREXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLBEGINVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void (GLAPIENTRY *PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, const GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERBASEEXTPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERBASENVPROC)(GLenum target, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLBINDBUFFEROFFSETEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLBINDBUFFEROFFSETNVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERRANGEEXTPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERRANGENVPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERSBASEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLBINDBUFFERSRANGEPROC)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY *PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY *PFNGLBINDFRAMEBUFFEROESPROC)(GLenum target, GLuint framebuffer); +typedef void (GLAPIENTRY *PFNGLBINDIMAGETEXTUREPROC)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (GLAPIENTRY *PFNGLBINDIMAGETEXTUREEXTPROC)(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (GLAPIENTRY *PFNGLBINDIMAGETEXTURESPROC)(GLuint first, GLsizei count, const GLuint * textures); +typedef GLuint (GLAPIENTRY *PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); +typedef GLuint (GLAPIENTRY *PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDMULTITEXTUREEXTPROC)(GLenum texunit, GLenum target, GLuint texture); +typedef GLuint (GLAPIENTRY *PFNGLBINDPARAMETEREXTPROC)(GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMNVPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLBINDPROGRAMPIPELINEEXTPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLBINDRENDERBUFFEROESPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); +typedef void (GLAPIENTRY *PFNGLBINDSAMPLERSPROC)(GLuint first, GLsizei count, const GLuint * samplers); +typedef GLuint (GLAPIENTRY *PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); +typedef void (GLAPIENTRY *PFNGLBINDTEXTUREEXTPROC)(GLenum target, GLuint texture); +typedef void (GLAPIENTRY *PFNGLBINDTEXTUREUNITPROC)(GLuint unit, GLuint texture); +typedef GLuint (GLAPIENTRY *PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); +typedef void (GLAPIENTRY *PFNGLBINDTEXTURESPROC)(GLuint first, GLsizei count, const GLuint * textures); +typedef void (GLAPIENTRY *PFNGLBINDTRANSFORMFEEDBACKPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDTRANSFORMFEEDBACKNVPROC)(GLenum target, GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXARRAYPROC)(GLuint array); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXARRAYAPPLEPROC)(GLuint array); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXARRAYOESPROC)(GLuint array); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXBUFFERSPROC)(GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); +typedef void (GLAPIENTRY *PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (GLAPIENTRY *PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (GLAPIENTRY *PFNGLBINORMAL3BEXTPROC)(GLbyte bx, GLbyte by, GLbyte bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3BVEXTPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3DEXTPROC)(GLdouble bx, GLdouble by, GLdouble bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3DVEXTPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3FEXTPROC)(GLfloat bx, GLfloat by, GLfloat bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3FVEXTPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3IEXTPROC)(GLint bx, GLint by, GLint bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3IVEXTPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLBINORMAL3SEXTPROC)(GLshort bx, GLshort by, GLshort bz); +typedef void (GLAPIENTRY *PFNGLBINORMAL3SVEXTPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLBINORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLBITMAPPROC)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); +typedef void (GLAPIENTRY *PFNGLBITMAPXOESPROC)(GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap); +typedef void (GLAPIENTRY *PFNGLBLENDBARRIERPROC)(void); +typedef void (GLAPIENTRY *PFNGLBLENDBARRIERKHRPROC)(void); +typedef void (GLAPIENTRY *PFNGLBLENDBARRIERNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLBLENDCOLOREXTPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLBLENDCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONINDEXEDAMDPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONOESPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEOESPROC)(GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIEXTPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONSEPARATEIOESPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIEXTPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDEQUATIONIOESPROC)(GLuint buf, GLenum mode); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCINDEXEDAMDPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEINGRPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEOESPROC)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIEXTPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCSEPARATEIOESPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIEXTPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDFUNCIOESPROC)(GLuint buf, GLenum src, GLenum dst); +typedef void (GLAPIENTRY *PFNGLBLENDPARAMETERINVPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFERANGLEPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITFRAMEBUFFERNVPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBLITNAMEDFRAMEBUFFERPROC)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (GLAPIENTRY *PFNGLBUFFERADDRESSRANGENVPROC)(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLBUFFERPAGECOMMITMENTARBPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLBUFFERPARAMETERIAPPLEPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLBUFFERSTORAGEEXTPROC)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAPIENTRY *PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void * data); +typedef void (GLAPIENTRY *PFNGLCALLCOMMANDLISTNVPROC)(GLuint list); +typedef void (GLAPIENTRY *PFNGLCALLLISTPROC)(GLuint list); +typedef void (GLAPIENTRY *PFNGLCALLLISTSPROC)(GLsizei n, GLenum type, const void * lists); +typedef GLenum (GLAPIENTRY *PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKFRAMEBUFFERSTATUSOESPROC)(GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC)(GLuint framebuffer, GLenum target); +typedef GLenum (GLAPIENTRY *PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)(GLuint framebuffer, GLenum target); +typedef void (GLAPIENTRY *PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); +typedef void (GLAPIENTRY *PFNGLCLAMPCOLORARBPROC)(GLenum target, GLenum clamp); +typedef void (GLAPIENTRY *PFNGLCLEARPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLCLEARACCUMPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLCLEARACCUMXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERDATAPROC)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERSUBDATAPROC)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint * value); +typedef void (GLAPIENTRY *PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORIIEXTPROC)(GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORIUIEXTPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORXPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCLEARCOLORXOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHPROC)(GLdouble depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHDNVPROC)(GLdouble depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHFPROC)(GLfloat d); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHFOESPROC)(GLclampf depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHXPROC)(GLfixed depth); +typedef void (GLAPIENTRY *PFNGLCLEARDEPTHXOESPROC)(GLfixed depth); +typedef void (GLAPIENTRY *PFNGLCLEARINDEXPROC)(GLfloat c); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERDATAPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERFIPROC)(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERFVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value); +typedef void (GLAPIENTRY *PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLCLEARSTENCILPROC)(GLint s); +typedef void (GLAPIENTRY *PFNGLCLEARTEXIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLEARTEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture); +typedef void (GLAPIENTRY *PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)(GLenum stream); +typedef void (GLAPIENTRY *PFNGLCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef GLenum (GLAPIENTRY *PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef GLenum (GLAPIENTRY *PFNGLCLIENTWAITSYNCAPPLEPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAPIENTRY *PFNGLCLIPCONTROLPROC)(GLenum origin, GLenum depth); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEPROC)(GLenum plane, const GLdouble * equation); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEFPROC)(GLenum p, const GLfloat * eqn); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEFIMGPROC)(GLenum p, const GLfloat * eqn); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEFOESPROC)(GLenum plane, const GLfloat * equation); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEXPROC)(GLenum plane, const GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEXIMGPROC)(GLenum p, const GLfixed * eqn); +typedef void (GLAPIENTRY *PFNGLCLIPPLANEXOESPROC)(GLenum plane, const GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3IPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3UBVPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3UIVPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3USVPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR3XOESPROC)(GLfixed red, GLfixed green, GLfixed blue); +typedef void (GLAPIENTRY *PFNGLCOLOR3XVOESPROC)(const GLfixed * components); +typedef void (GLAPIENTRY *PFNGLCOLOR4BPROC)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4DPROC)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4FPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4IPROC)(GLint red, GLint green, GLint blue, GLint alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4SPROC)(GLshort red, GLshort green, GLshort blue, GLshort alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBPROC)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX2FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX2FVSUNPROC)(const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX3FSUNPROC)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVERTEX3FVSUNPROC)(const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UBVPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4UIPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4UIVPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4USPROC)(GLushort red, GLushort green, GLushort blue, GLushort alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4USVPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLCOLOR4XPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4XOESPROC)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (GLAPIENTRY *PFNGLCOLOR4XVOESPROC)(const GLfixed * components); +typedef void (GLAPIENTRY *PFNGLCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (GLAPIENTRY *PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (GLAPIENTRY *PFNGLCOLORFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (GLAPIENTRY *PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAPIENTRY *PFNGLCOLORMASKINDEXEDEXTPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMASKIEXTPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMASKIOESPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (GLAPIENTRY *PFNGLCOLORMATERIALPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); +typedef void (GLAPIENTRY *PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint * color); +typedef void (GLAPIENTRY *PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); +typedef void (GLAPIENTRY *PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint * color); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLCOLORPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); +typedef void (GLAPIENTRY *PFNGLCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY *PFNGLCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCOMMANDLISTSEGMENTSNVPROC)(GLuint list, GLuint segments); +typedef void (GLAPIENTRY *PFNGLCOMPILECOMMANDLISTNVPROC)(GLuint list); +typedef void (GLAPIENTRY *PFNGLCOMPILESHADERPROC)(GLuint shader); +typedef void (GLAPIENTRY *PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj); +typedef void (GLAPIENTRY *PFNGLCOMPILESHADERINCLUDEARBPROC)(GLuint shader, GLsizei count, const GLchar *const* path, const GLint * length); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXIMAGE3DOESPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); +typedef void (GLAPIENTRY *PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); +typedef void (GLAPIENTRY *PFNGLCONSERVATIVERASTERPARAMETERFNVPROC)(GLenum pname, GLfloat value); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIPROC)(GLenum target, GLenum pname, GLint params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLCOPYBUFFERSUBDATANVPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORSUBTABLEPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORSUBTABLEEXTPROC)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORTABLEPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCOLORTABLESGIPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER1DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER2DPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATAPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATAEXTPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATANVPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLCOPYIMAGESUBDATAOESPROC)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYNAMEDBUFFERSUBDATAPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLCOPYPATHNVPROC)(GLuint resultPath, GLuint srcPath); +typedef void (GLAPIENTRY *PFNGLCOPYPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE1DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXIMAGE2DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURELEVELSAPPLEPROC)(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLCOVERFILLPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLCOVERSTROKEPATHNVPROC)(GLuint path, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLCOVERAGEMASKNVPROC)(GLboolean mask); +typedef void (GLAPIENTRY *PFNGLCOVERAGEMODULATIONNVPROC)(GLenum components); +typedef void (GLAPIENTRY *PFNGLCOVERAGEMODULATIONTABLENVPROC)(GLsizei n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLCOVERAGEOPERATIONNVPROC)(GLenum operation); +typedef void (GLAPIENTRY *PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLCREATECOMMANDLISTSNVPROC)(GLsizei n, GLuint * lists); +typedef void (GLAPIENTRY *PFNGLCREATEFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLCREATEPERFQUERYINTELPROC)(GLuint queryId, GLuint * queryHandle); +typedef GLuint (GLAPIENTRY *PFNGLCREATEPROGRAMPROC)(void); +typedef GLhandleARB (GLAPIENTRY *PFNGLCREATEPROGRAMOBJECTARBPROC)(void); +typedef void (GLAPIENTRY *PFNGLCREATEPROGRAMPIPELINESPROC)(GLsizei n, GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLCREATEQUERIESPROC)(GLenum target, GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLCREATERENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLCREATESAMPLERSPROC)(GLsizei n, GLuint * samplers); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROC)(GLenum type); +typedef GLhandleARB (GLAPIENTRY *PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROGRAMEXTPROC)(GLenum type, const GLchar * string); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROGRAMVPROC)(GLenum type, GLsizei count, const GLchar *const* strings); +typedef GLuint (GLAPIENTRY *PFNGLCREATESHADERPROGRAMVEXTPROC)(GLenum type, GLsizei count, const GLchar ** strings); +typedef void (GLAPIENTRY *PFNGLCREATESTATESNVPROC)(GLsizei n, GLuint * states); +typedef GLsync (GLAPIENTRY *PFNGLCREATESYNCFROMCLEVENTARBPROC)(struct _cl_context * context, struct _cl_event * event, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLCREATETEXTURESPROC)(GLenum target, GLsizei n, GLuint * textures); +typedef void (GLAPIENTRY *PFNGLCREATETRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLCREATEVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLCULLFACEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLCULLPARAMETERDVEXTPROC)(GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLCULLPARAMETERFVEXTPROC)(GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLCURRENTPALETTEMATRIXARBPROC)(GLint index); +typedef void (GLAPIENTRY *PFNGLCURRENTPALETTEMATRIXOESPROC)(GLuint matrixpaletteindex); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKPROC)(GLDEBUGPROC callback, const void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, const void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECALLBACKKHRPROC)(GLDEBUGPROCKHR callback, const void * userParam); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECONTROLPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGECONTROLKHRPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEBUGMESSAGEINSERTKHRPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); +typedef void (GLAPIENTRY *PFNGLDEFORMSGIXPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLDEFORMATIONMAP3DSGIXPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLDEFORMATIONMAP3FSGIXPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLDELETEASYNCMARKERSSGIXPROC)(GLuint marker, GLsizei range); +typedef void (GLAPIENTRY *PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLDELETECOMMANDLISTSNVPROC)(GLsizei n, const GLuint * lists); +typedef void (GLAPIENTRY *PFNGLDELETEFENCESAPPLEPROC)(GLsizei n, const GLuint * fences); +typedef void (GLAPIENTRY *PFNGLDELETEFENCESNVPROC)(GLsizei n, const GLuint * fences); +typedef void (GLAPIENTRY *PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLDELETEFRAMEBUFFERSOESPROC)(GLsizei n, const GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLDELETELISTSPROC)(GLuint list, GLsizei range); +typedef void (GLAPIENTRY *PFNGLDELETENAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLDELETENAMESAMDPROC)(GLenum identifier, GLuint num, const GLuint * names); +typedef void (GLAPIENTRY *PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj); +typedef void (GLAPIENTRY *PFNGLDELETEOCCLUSIONQUERIESNVPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEPATHSNVPROC)(GLuint path, GLsizei range); +typedef void (GLAPIENTRY *PFNGLDELETEPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); +typedef void (GLAPIENTRY *PFNGLDELETEPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMPIPELINESPROC)(GLsizei n, const GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMPIPELINESEXTPROC)(GLsizei n, const GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAPIENTRY *PFNGLDELETEPROGRAMSNVPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAPIENTRY *PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEQUERIESARBPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEQUERIESEXTPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLDELETERENDERBUFFERSOESPROC)(GLsizei n, const GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint * samplers); +typedef void (GLAPIENTRY *PFNGLDELETESHADERPROC)(GLuint shader); +typedef void (GLAPIENTRY *PFNGLDELETESTATESNVPROC)(GLsizei n, const GLuint * states); +typedef void (GLAPIENTRY *PFNGLDELETESYNCPROC)(GLsync sync); +typedef void (GLAPIENTRY *PFNGLDELETESYNCAPPLEPROC)(GLsync sync); +typedef void (GLAPIENTRY *PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint * textures); +typedef void (GLAPIENTRY *PFNGLDELETETEXTURESEXTPROC)(GLsizei n, const GLuint * textures); +typedef void (GLAPIENTRY *PFNGLDELETETRANSFORMFEEDBACKSPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETETRANSFORMFEEDBACKSNVPROC)(GLsizei n, const GLuint * ids); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXARRAYSAPPLEPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXARRAYSOESPROC)(GLsizei n, const GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLDEPTHBOUNDSEXTPROC)(GLclampd zmin, GLclampd zmax); +typedef void (GLAPIENTRY *PFNGLDEPTHBOUNDSDNVPROC)(GLdouble zmin, GLdouble zmax); +typedef void (GLAPIENTRY *PFNGLDEPTHFUNCPROC)(GLenum func); +typedef void (GLAPIENTRY *PFNGLDEPTHMASKPROC)(GLboolean flag); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEPROC)(GLdouble hither, GLdouble yon); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEARRAYFVNVPROC)(GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEARRAYVPROC)(GLuint first, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEINDEXEDPROC)(GLuint index, GLdouble n, GLdouble f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEINDEXEDFNVPROC)(GLuint index, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEDNVPROC)(GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEFOESPROC)(GLclampf n, GLclampf f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEXPROC)(GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLDEPTHRANGEXOESPROC)(GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj); +typedef void (GLAPIENTRY *PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); +typedef void (GLAPIENTRY *PFNGLDETAILTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLDISABLEPROC)(GLenum cap); +typedef void (GLAPIENTRY *PFNGLDISABLECLIENTSTATEPROC)(GLenum array); +typedef void (GLAPIENTRY *PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEDRIVERCONTROLQCOMPROC)(GLuint driverControl); +typedef void (GLAPIENTRY *PFNGLDISABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEIEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEINVPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISABLEIOESPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLDISCARDFRAMEBUFFEREXTPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAPIENTRY *PFNGLDISPATCHCOMPUTEPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (GLAPIENTRY *PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +typedef void (GLAPIENTRY *PFNGLDISPATCHCOMPUTEINDIRECTPROC)(GLintptr indirect); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDANGLEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDARBPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDEXTPROC)(GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWARRAYSINSTANCEDNVPROC)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERPROC)(GLenum buf); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSATIPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSEXTPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSINDEXEDEXTPROC)(GLint n, const GLenum * location, const GLint * indices); +typedef void (GLAPIENTRY *PFNGLDRAWBUFFERSNVPROC)(GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSADDRESSNVPROC)(GLenum primitiveMode, const GLuint64 * indirects, const GLsizei * sizes, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSNVPROC)(GLenum primitiveMode, GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC)(const GLuint64 * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWCOMMANDSSTATESNVPROC)(GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSBASEVERTEXEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSBASEVERTEXOESPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDANGLEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDARBPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDEXTPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWELEMENTSINSTANCEDNVPROC)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLDRAWMESHARRAYSSUNPROC)(GLenum mode, GLint first, GLsizei count, GLsizei width); +typedef void (GLAPIENTRY *PFNGLDRAWPIXELSPROC)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); +typedef void (GLAPIENTRY *PFNGLDRAWRANGEELEMENTSEXTPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); +typedef void (GLAPIENTRY *PFNGLDRAWTEXFOESPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXFVOESPROC)(const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTEXIOESPROC)(GLint x, GLint y, GLint z, GLint width, GLint height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXIVOESPROC)(const GLint * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTEXSOESPROC)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXSVOESPROC)(const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTEXTURENVPROC)(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef void (GLAPIENTRY *PFNGLDRAWTEXXOESPROC)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); +typedef void (GLAPIENTRY *PFNGLDRAWTEXXVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKPROC)(GLenum mode, GLuint id); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)(GLenum mode, GLuint id, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKNVPROC)(GLenum mode, GLuint id); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)(GLenum mode, GLuint id, GLuint stream); +typedef void (GLAPIENTRY *PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +typedef void (GLAPIENTRY *PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC)(GLenum target, GLeglImageOES image); +typedef void (GLAPIENTRY *PFNGLEGLIMAGETARGETTEXTURE2DOESPROC)(GLenum target, GLeglImageOES image); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPROC)(GLboolean flag); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGFORMATNVPROC)(GLsizei stride); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPOINTERPROC)(GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, const GLboolean * pointer); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGPOINTERLISTIBMPROC)(GLint stride, const GLboolean ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLEDGEFLAGVPROC)(const GLboolean * flag); +typedef void (GLAPIENTRY *PFNGLELEMENTPOINTERAPPLEPROC)(GLenum type, const void * pointer); +typedef void (GLAPIENTRY *PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void * pointer); +typedef void (GLAPIENTRY *PFNGLENABLEPROC)(GLenum cap); +typedef void (GLAPIENTRY *PFNGLENABLECLIENTSTATEPROC)(GLenum array); +typedef void (GLAPIENTRY *PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLECLIENTSTATEIEXTPROC)(GLenum array, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEDRIVERCONTROLQCOMPROC)(GLuint driverControl); +typedef void (GLAPIENTRY *PFNGLENABLEINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXARRAYATTRIBPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)(GLuint vaobj, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXARRAYEXTPROC)(GLuint vaobj, GLenum array); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXATTRIBAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEIPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEIEXTPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEINVPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENABLEIOESPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENDPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDCONDITIONALRENDERPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDCONDITIONALRENDERNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDCONDITIONALRENDERNVXPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDFRAGMENTSHADERATIPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDLISTPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDOCCLUSIONQUERYNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDPERFMONITORAMDPROC)(GLuint monitor); +typedef void (GLAPIENTRY *PFNGLENDPERFQUERYINTELPROC)(GLuint queryHandle); +typedef void (GLAPIENTRY *PFNGLENDQUERYPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLENDQUERYARBPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLENDQUERYEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLENDQUERYINDEXEDPROC)(GLenum target, GLuint index); +typedef void (GLAPIENTRY *PFNGLENDTILINGQCOMPROC)(GLbitfield preserveMask); +typedef void (GLAPIENTRY *PFNGLENDTRANSFORMFEEDBACKPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDTRANSFORMFEEDBACKEXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDTRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDVERTEXSHADEREXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLENDVIDEOCAPTURENVPROC)(GLuint video_capture_slot); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1DPROC)(GLdouble u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1DVPROC)(const GLdouble * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1FPROC)(GLfloat u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1FVPROC)(const GLfloat * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1XOESPROC)(GLfixed u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD1XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2DPROC)(GLdouble u, GLdouble v); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2DVPROC)(const GLdouble * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2FPROC)(GLfloat u, GLfloat v); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2FVPROC)(const GLfloat * u); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2XOESPROC)(GLfixed u, GLfixed v); +typedef void (GLAPIENTRY *PFNGLEVALCOORD2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLEVALMAPSNVPROC)(GLenum target, GLenum mode); +typedef void (GLAPIENTRY *PFNGLEVALMESH1PROC)(GLenum mode, GLint i1, GLint i2); +typedef void (GLAPIENTRY *PFNGLEVALMESH2PROC)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); +typedef void (GLAPIENTRY *PFNGLEVALPOINT1PROC)(GLint i); +typedef void (GLAPIENTRY *PFNGLEVALPOINT2PROC)(GLint i, GLint j); +typedef void (GLAPIENTRY *PFNGLEVALUATEDEPTHVALUESARBPROC)(void); +typedef void (GLAPIENTRY *PFNGLEXECUTEPROGRAMNVPROC)(GLenum target, GLuint id, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLEXTGETBUFFERPOINTERVQCOMPROC)(GLenum target, void ** params); +typedef void (GLAPIENTRY *PFNGLEXTGETBUFFERSQCOMPROC)(GLuint * buffers, GLint maxBuffers, GLint * numBuffers); +typedef void (GLAPIENTRY *PFNGLEXTGETFRAMEBUFFERSQCOMPROC)(GLuint * framebuffers, GLint maxFramebuffers, GLint * numFramebuffers); +typedef void (GLAPIENTRY *PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC)(GLuint program, GLenum shadertype, GLchar * source, GLint * length); +typedef void (GLAPIENTRY *PFNGLEXTGETPROGRAMSQCOMPROC)(GLuint * programs, GLint maxPrograms, GLint * numPrograms); +typedef void (GLAPIENTRY *PFNGLEXTGETRENDERBUFFERSQCOMPROC)(GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers); +typedef void (GLAPIENTRY *PFNGLEXTGETSHADERSQCOMPROC)(GLuint * shaders, GLint maxShaders, GLint * numShaders); +typedef void (GLAPIENTRY *PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLEXTGETTEXSUBIMAGEQCOMPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void * texels); +typedef void (GLAPIENTRY *PFNGLEXTGETTEXTURESQCOMPROC)(GLuint * textures, GLint maxTextures, GLint * numTextures); +typedef GLboolean (GLAPIENTRY *PFNGLEXTISPROGRAMBINARYQCOMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void (GLAPIENTRY *PFNGLFEEDBACKBUFFERPROC)(GLsizei size, GLenum type, GLfloat * buffer); +typedef void (GLAPIENTRY *PFNGLFEEDBACKBUFFERXOESPROC)(GLsizei n, GLenum type, const GLfixed * buffer); +typedef GLsync (GLAPIENTRY *PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); +typedef GLsync (GLAPIENTRY *PFNGLFENCESYNCAPPLEPROC)(GLenum condition, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (GLAPIENTRY *PFNGLFINISHPROC)(void); +typedef GLint (GLAPIENTRY *PFNGLFINISHASYNCSGIXPROC)(GLuint * markerp); +typedef void (GLAPIENTRY *PFNGLFINISHFENCEAPPLEPROC)(GLuint fence); +typedef void (GLAPIENTRY *PFNGLFINISHFENCENVPROC)(GLuint fence); +typedef void (GLAPIENTRY *PFNGLFINISHOBJECTAPPLEPROC)(GLenum object, GLint name); +typedef void (GLAPIENTRY *PFNGLFINISHTEXTURESUNXPROC)(void); +typedef void (GLAPIENTRY *PFNGLFLUSHPROC)(void); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)(GLenum target, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLFLUSHPIXELDATARANGENVPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLFLUSHRASTERSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLFLUSHSTATICDATAIBMPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); +typedef void (GLAPIENTRY *PFNGLFLUSHVERTEXARRAYRANGENVPROC)(void); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLFOGCOORDPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDPROC)(GLdouble coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDEXTPROC)(GLdouble coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDVPROC)(const GLdouble * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDDVEXTPROC)(const GLdouble * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFPROC)(GLfloat coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFEXTPROC)(GLfloat coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFVPROC)(const GLfloat * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDFVEXTPROC)(const GLfloat * coord); +typedef void (GLAPIENTRY *PFNGLFOGCOORDHNVPROC)(GLhalfNV fog); +typedef void (GLAPIENTRY *PFNGLFOGCOORDHVNVPROC)(const GLhalfNV * fog); +typedef void (GLAPIENTRY *PFNGLFOGFUNCSGISPROC)(GLsizei n, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLFOGFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFOGFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFOGIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFOGIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFOGXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLFOGXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLFOGXVPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLFOGXVOESPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTCOLORMATERIALSGIXPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRAGMENTCOVERAGECOLORNVPROC)(GLuint color); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELFSGIXPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTFSGIXPROC)(GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTISGIXPROC)(GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALFSGIXPROC)(GLenum face, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALISGIXPROC)(GLenum face, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLFRAMETERMINATORGREMEDYPROC)(void); +typedef void (GLAPIENTRY *PFNGLFRAMEZOOMSGIXPROC)(GLint factor); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)(GLuint framebuffer, GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERREADBUFFEREXTPROC)(GLuint framebuffer, GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERRENDERBUFFEROESPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE2DOESPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURE3DOESPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +typedef void (GLAPIENTRY *PFNGLFRAMEBUFFERTEXTUREOESPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLFRONTFACEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLFRUSTUMPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLFRUSTUMFPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLFRUSTUMFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLFRUSTUMXPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLFRUSTUMXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef GLuint (GLAPIENTRY *PFNGLGENASYNCMARKERSSGIXPROC)(GLsizei range); +typedef void (GLAPIENTRY *PFNGLGENBUFFERSPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint * buffers); +typedef void (GLAPIENTRY *PFNGLGENFENCESAPPLEPROC)(GLsizei n, GLuint * fences); +typedef void (GLAPIENTRY *PFNGLGENFENCESNVPROC)(GLsizei n, GLuint * fences); +typedef GLuint (GLAPIENTRY *PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); +typedef void (GLAPIENTRY *PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint * framebuffers); +typedef void (GLAPIENTRY *PFNGLGENFRAMEBUFFERSOESPROC)(GLsizei n, GLuint * framebuffers); +typedef GLuint (GLAPIENTRY *PFNGLGENLISTSPROC)(GLsizei range); +typedef void (GLAPIENTRY *PFNGLGENNAMESAMDPROC)(GLenum identifier, GLuint num, GLuint * names); +typedef void (GLAPIENTRY *PFNGLGENOCCLUSIONQUERIESNVPROC)(GLsizei n, GLuint * ids); +typedef GLuint (GLAPIENTRY *PFNGLGENPATHSNVPROC)(GLsizei range); +typedef void (GLAPIENTRY *PFNGLGENPERFMONITORSAMDPROC)(GLsizei n, GLuint * monitors); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMPIPELINESPROC)(GLsizei n, GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMPIPELINESEXTPROC)(GLsizei n, GLuint * pipelines); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint * programs); +typedef void (GLAPIENTRY *PFNGLGENPROGRAMSNVPROC)(GLsizei n, GLuint * programs); +typedef void (GLAPIENTRY *PFNGLGENQUERIESPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENQUERIESARBPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENQUERIESEXTPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLGENRENDERBUFFERSOESPROC)(GLsizei n, GLuint * renderbuffers); +typedef void (GLAPIENTRY *PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint * samplers); +typedef GLuint (GLAPIENTRY *PFNGLGENSYMBOLSEXTPROC)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (GLAPIENTRY *PFNGLGENTEXTURESPROC)(GLsizei n, GLuint * textures); +typedef void (GLAPIENTRY *PFNGLGENTEXTURESEXTPROC)(GLsizei n, GLuint * textures); +typedef void (GLAPIENTRY *PFNGLGENTRANSFORMFEEDBACKSPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENTRANSFORMFEEDBACKSNVPROC)(GLsizei n, GLuint * ids); +typedef void (GLAPIENTRY *PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLGENVERTEXARRAYSAPPLEPROC)(GLsizei n, GLuint * arrays); +typedef void (GLAPIENTRY *PFNGLGENVERTEXARRAYSOESPROC)(GLsizei n, GLuint * arrays); +typedef GLuint (GLAPIENTRY *PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); +typedef void (GLAPIENTRY *PFNGLGENERATEMIPMAPPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATEMIPMAPOESPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATEMULTITEXMIPMAPEXTPROC)(GLenum texunit, GLenum target); +typedef void (GLAPIENTRY *PFNGLGENERATETEXTUREMIPMAPPROC)(GLuint texture); +typedef void (GLAPIENTRY *PFNGLGENERATETEXTUREMIPMAPEXTPROC)(GLuint texture, GLenum target); +typedef void (GLAPIENTRY *PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVESUBROUTINENAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); +typedef void (GLAPIENTRY *PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETACTIVEVARYINGNVPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); +typedef void (GLAPIENTRY *PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); +typedef GLint (GLAPIENTRY *PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); +typedef void (GLAPIENTRY *PFNGLGETBOOLEANINDEXEDVEXTPROC)(GLenum target, GLuint index, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPARAMETERUI64VNVPROC)(GLenum target, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERPOINTERVOESPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAPIENTRY *PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEPROC)(GLenum plane, GLdouble * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEFPROC)(GLenum plane, GLfloat * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEFOESPROC)(GLenum plane, GLfloat * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEXPROC)(GLenum plane, GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLGETCLIPPLANEXOESPROC)(GLenum plane, GLfixed * equation); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, void * table); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEEXTPROC)(GLenum target, GLenum format, GLenum type, void * data); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOLORTABLESGIPROC)(GLenum target, GLenum format, GLenum type, void * table); +typedef void (GLAPIENTRY *PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat * params); +typedef GLuint (GLAPIENTRY *PFNGLGETCOMMANDHEADERNVPROC)(GLenum tokenID, GLuint size); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint lod, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint level, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint lod, void * img); +typedef void (GLAPIENTRY *PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, void * image); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * image); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETCONVOLUTIONPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETCOVERAGEMODULATIONTABLENVPROC)(GLsizei bufsize, GLfloat * v); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef GLuint (GLAPIENTRY *PFNGLGETDEBUGMESSAGELOGKHRPROC)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); +typedef void (GLAPIENTRY *PFNGLGETDETAILTEXFUNCSGISPROC)(GLenum target, GLfloat * points); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEINDEXEDVEXTPROC)(GLenum target, GLuint index, GLdouble * data); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEI_VPROC)(GLenum target, GLuint index, GLdouble * data); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEI_VEXTPROC)(GLenum pname, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble * data); +typedef void (GLAPIENTRY *PFNGLGETDRIVERCONTROLSTRINGQCOMPROC)(GLuint driverControl, GLsizei bufSize, GLsizei * length, GLchar * driverControlString); +typedef void (GLAPIENTRY *PFNGLGETDRIVERCONTROLSQCOMPROC)(GLint * num, GLsizei size, GLuint * driverControls); +typedef GLenum (GLAPIENTRY *PFNGLGETERRORPROC)(void); +typedef void (GLAPIENTRY *PFNGLGETFENCEIVNVPROC)(GLuint fence, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFIRSTPERFQUERYIDINTELPROC)(GLuint * queryId); +typedef void (GLAPIENTRY *PFNGLGETFIXEDVPROC)(GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETFIXEDVOESPROC)(GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETFLOATINDEXEDVEXTPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFLOATI_VPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFLOATI_VEXTPROC)(GLenum pname, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFLOATI_VNVPROC)(GLenum target, GLuint index, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFLOATVPROC)(GLenum pname, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETFOGFUNCSGISPROC)(GLfloat * points); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATAINDEXEXTPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTLIGHTFVSGIXPROC)(GLenum light, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTLIGHTIVSGIXPROC)(GLenum light, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTMATERIALFVSGIXPROC)(GLenum face, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETFRAGMENTMATERIALIVSGIXPROC)(GLenum face, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC)(GLenum target, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * params); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSPROC)(void); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSARBPROC)(void); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSEXTPROC)(void); +typedef GLenum (GLAPIENTRY *PFNGLGETGRAPHICSRESETSTATUSKHRPROC)(void); +typedef GLhandleARB (GLAPIENTRY *PFNGLGETHANDLEARBPROC)(GLenum pname); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETHISTOGRAMPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef GLuint64 (GLAPIENTRY *PFNGLGETIMAGEHANDLEARBPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef GLuint64 (GLAPIENTRY *PFNGLGETIMAGEHANDLENVPROC)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (GLAPIENTRY *PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETINFOLOGARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); +typedef GLint (GLAPIENTRY *PFNGLGETINSTRUMENTSSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGER64VAPPLEPROC)(GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETINTEGERINDEXEDVEXTPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGERI_VEXTPROC)(GLenum target, GLuint index, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTEGERUI64I_VNVPROC)(GLenum value, GLuint index, GLuint64EXT * result); +typedef void (GLAPIENTRY *PFNGLGETINTEGERUI64VNVPROC)(GLenum value, GLuint64EXT * result); +typedef void (GLAPIENTRY *PFNGLGETINTEGERVPROC)(GLenum pname, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETINTERNALFORMATSAMPLEIVNVPROC)(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETINTERNALFORMATI64VPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETINTERNALFORMATIVPROC)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETLIGHTFVPROC)(GLenum light, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTIVPROC)(GLenum light, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTXVPROC)(GLenum light, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETLIGHTXVOESPROC)(GLenum light, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETMAPATTRIBPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMAPATTRIBPARAMETERIVNVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points); +typedef void (GLAPIENTRY *PFNGLGETMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMAPDVPROC)(GLenum target, GLenum query, GLdouble * v); +typedef void (GLAPIENTRY *PFNGLGETMAPFVPROC)(GLenum target, GLenum query, GLfloat * v); +typedef void (GLAPIENTRY *PFNGLGETMAPIVPROC)(GLenum target, GLenum query, GLint * v); +typedef void (GLAPIENTRY *PFNGLGETMAPXVOESPROC)(GLenum target, GLenum query, GLfixed * v); +typedef void (GLAPIENTRY *PFNGLGETMATERIALFVPROC)(GLenum face, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMATERIALIVPROC)(GLenum face, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLGETMATERIALXVPROC)(GLenum face, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETMATERIALXVOESPROC)(GLenum face, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETMINMAXEXTPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMINMAXPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXIMAGEEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat * val); +typedef void (GLAPIENTRY *PFNGLGETMULTISAMPLEFVNVPROC)(GLenum pname, GLuint index, GLfloat * val); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERI64VPROC)(GLuint buffer, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERIVPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)(GLuint buffer, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPOINTERVPROC)(GLuint buffer, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)(GLuint buffer, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAPIENTRY *PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC)(GLuint framebuffer, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)(GLuint framebuffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum pname, void * string); +typedef void (GLAPIENTRY *PFNGLGETNAMEDPROGRAMIVEXTPROC)(GLuint program, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC)(GLuint renderbuffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)(GLuint renderbuffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string); +typedef void (GLAPIENTRY *PFNGLGETNAMEDSTRINGIVARBPROC)(GLint namelen, const GLchar * name, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNEXTPERFQUERYIDINTELPROC)(GLuint queryId, GLuint * nextQueryId); +typedef void (GLAPIENTRY *PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTLABELEXTPROC)(GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTLABELKHRPROC)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPARAMETERIVAPPLEPROC)(GLenum objectType, GLuint name, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPTRLABELPROC)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOBJECTPTRLABELKHRPROC)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); +typedef void (GLAPIENTRY *PFNGLGETOCCLUSIONQUERYIVNVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETOCCLUSIONQUERYUIVNVPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETPATHCOLORGENFVNVPROC)(GLenum color, GLenum pname, GLfloat * value); +typedef void (GLAPIENTRY *PFNGLGETPATHCOLORGENIVNVPROC)(GLenum color, GLenum pname, GLint * value); +typedef void (GLAPIENTRY *PFNGLGETPATHCOMMANDSNVPROC)(GLuint path, GLubyte * commands); +typedef void (GLAPIENTRY *PFNGLGETPATHCOORDSNVPROC)(GLuint path, GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLGETPATHDASHARRAYNVPROC)(GLuint path, GLfloat * dashArray); +typedef GLfloat (GLAPIENTRY *PFNGLGETPATHLENGTHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef void (GLAPIENTRY *PFNGLGETPATHMETRICRANGENVPROC)(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics); +typedef void (GLAPIENTRY *PFNGLGETPATHMETRICSNVPROC)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics); +typedef void (GLAPIENTRY *PFNGLGETPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, GLfloat * value); +typedef void (GLAPIENTRY *PFNGLGETPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, GLint * value); +typedef void (GLAPIENTRY *PFNGLGETPATHSPACINGNVPROC)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing); +typedef void (GLAPIENTRY *PFNGLGETPATHTEXGENFVNVPROC)(GLenum texCoordSet, GLenum pname, GLfloat * value); +typedef void (GLAPIENTRY *PFNGLGETPATHTEXGENIVNVPROC)(GLenum texCoordSet, GLenum pname, GLint * value); +typedef void (GLAPIENTRY *PFNGLGETPERFCOUNTERINFOINTELPROC)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)(GLuint group, GLuint counter, GLenum pname, void * data); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORCOUNTERSAMDPROC)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); +typedef void (GLAPIENTRY *PFNGLGETPERFMONITORGROUPSAMDPROC)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); +typedef void (GLAPIENTRY *PFNGLGETPERFQUERYDATAINTELPROC)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten); +typedef void (GLAPIENTRY *PFNGLGETPERFQUERYIDBYNAMEINTELPROC)(GLchar * queryName, GLuint * queryId); +typedef void (GLAPIENTRY *PFNGLGETPERFQUERYINFOINTELPROC)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPFVPROC)(GLenum map, GLfloat * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPUIVPROC)(GLenum map, GLuint * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPUSVPROC)(GLenum map, GLushort * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELMAPXVPROC)(GLenum map, GLint size, GLfixed * values); +typedef void (GLAPIENTRY *PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERINDEXEDVEXTPROC)(GLenum target, GLuint index, void ** data); +typedef void (GLAPIENTRY *PFNGLGETPOINTERI_VEXTPROC)(GLenum pname, GLuint index, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERVPROC)(GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERVEXTPROC)(GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOINTERVKHRPROC)(GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETPOLYGONSTIPPLEPROC)(GLubyte * mask); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMBINARYPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMBINARYOESPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMINTERFACEIVPROC)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC)(GLenum target, GLuint index, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC)(GLenum target, GLuint index, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPARAMETERDVNVPROC)(GLenum target, GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPARAMETERFVNVPROC)(GLenum target, GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEINFOLOGPROC)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEIVPROC)(GLuint pipeline, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMPIPELINEIVEXTPROC)(GLuint pipeline, GLenum pname, GLint * params); +typedef GLuint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCEINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCELOCATIONPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC)(GLuint program, GLenum programInterface, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMRESOURCENAMEPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMRESOURCEFVNVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMRESOURCEIVPROC)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSTAGEIVPROC)(GLuint program, GLenum shadertype, GLenum pname, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void * string); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSTRINGNVPROC)(GLuint id, GLenum pname, GLubyte * program); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC)(GLenum target, GLuint index, GLuint * param); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETPROGRAMIVNVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTUI64VPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYBUFFEROBJECTUIVPROC)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLGETQUERYINDEXEDIVPROC)(GLenum target, GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTI64VEXTPROC)(GLuint id, GLenum pname, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTIVARBPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTIVEXTPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUI64VEXTPROC)(GLuint id, GLenum pname, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUIVARBPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYOBJECTUIVEXTPROC)(GLuint id, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETQUERYIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETRENDERBUFFERPARAMETERIVOESPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETSEPARABLEFILTEREXTPROC)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); +typedef void (GLAPIENTRY *PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); +typedef void (GLAPIENTRY *PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); +typedef void (GLAPIENTRY *PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); +typedef void (GLAPIENTRY *PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETSHARPENTEXFUNCSGISPROC)(GLenum target, GLfloat * points); +typedef GLushort (GLAPIENTRY *PFNGLGETSTAGEINDEXNVPROC)(GLenum shadertype); +typedef const GLubyte * (GLAPIENTRY *PFNGLGETSTRINGPROC)(GLenum name); +typedef const GLubyte * (GLAPIENTRY *PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); +typedef GLuint (GLAPIENTRY *PFNGLGETSUBROUTINEINDEXPROC)(GLuint program, GLenum shadertype, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)(GLuint program, GLenum shadertype, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETSYNCIVAPPLEPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); +typedef void (GLAPIENTRY *PFNGLGETTEXBUMPPARAMETERFVATIPROC)(GLenum pname, GLfloat * param); +typedef void (GLAPIENTRY *PFNGLGETTEXBUMPPARAMETERIVATIPROC)(GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETTEXENVFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXENVIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXENVXVPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXENVXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLGETTEXGENDVPROC)(GLenum coord, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENFVPROC)(GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENFVOESPROC)(GLenum coord, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENIVPROC)(GLenum coord, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENIVOESPROC)(GLenum coord, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXGENXVOESPROC)(GLenum coord, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXLEVELPARAMETERXVOESPROC)(GLenum target, GLint level, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)(GLenum target, GLenum pname, void ** params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERXVPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef void (GLAPIENTRY *PFNGLGETTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, GLfixed * params); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTUREHANDLEARBPROC)(GLuint texture); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTUREHANDLENVPROC)(GLuint texture); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREIMAGEPROC)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREIMAGEEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERFVPROC)(GLuint texture, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERIVPROC)(GLuint texture, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint * params); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTURESAMPLERHANDLEARBPROC)(GLuint texture, GLuint sampler); +typedef GLuint64 (GLAPIENTRY *PFNGLGETTEXTURESAMPLERHANDLENVPROC)(GLuint texture, GLuint sampler); +typedef void (GLAPIENTRY *PFNGLGETTEXTURESUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETTRACKMATRIXIVNVPROC)(GLenum target, GLuint address, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)(GLuint program, GLuint index, GLint * location); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKI64_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint64 * param); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKI_VPROC)(GLuint xfb, GLenum pname, GLuint index, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETTRANSFORMFEEDBACKIVPROC)(GLuint xfb, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)(GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source); +typedef GLuint (GLAPIENTRY *PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar * uniformBlockName); +typedef GLint (GLAPIENTRY *PFNGLGETUNIFORMBUFFERSIZEEXTPROC)(GLuint program, GLint location); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices); +typedef GLint (GLAPIENTRY *PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar * name); +typedef GLint (GLAPIENTRY *PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB * name); +typedef GLintptr (GLAPIENTRY *PFNGLGETUNIFORMOFFSETEXTPROC)(GLuint program, GLint location); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMSUBROUTINEUIVPROC)(GLenum shadertype, GLint location, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMDVPROC)(GLuint program, GLint location, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMI64VARBPROC)(GLuint program, GLint location, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMI64VNVPROC)(GLuint program, GLint location, GLint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean * data); +typedef void (GLAPIENTRY *PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat * data); +typedef void (GLAPIENTRY *PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint * data); +typedef void (GLAPIENTRY *PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, void ** data); +typedef GLint (GLAPIENTRY *PFNGLGETVARYINGLOCATIONNVPROC)(GLuint program, const GLchar * name); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINDEXED64IVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINDEXEDIVPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYINTEGERVEXTPROC)(GLuint vaobj, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)(GLuint vaobj, GLuint index, GLenum pname, void ** param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYPOINTERVEXTPROC)(GLuint vaobj, GLenum pname, void ** param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXARRAYIVPROC)(GLuint vaobj, GLenum pname, GLint * param); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLDVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLDVEXTPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLI64VNVPROC)(GLuint index, GLenum pname, GLint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLUI64VARBPROC)(GLuint index, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBLUI64VNVPROC)(GLuint index, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBPOINTERVNVPROC)(GLuint index, GLenum pname, void ** pointer); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBDVNVPROC)(GLuint index, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBFVNVPROC)(GLuint index, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVERTEXATTRIBIVNVPROC)(GLuint index, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOCAPTUREIVNVPROC)(GLuint video_capture_slot, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOI64VNVPROC)(GLuint video_slot, GLenum pname, GLint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOIVNVPROC)(GLuint video_slot, GLenum pname, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOUI64VNVPROC)(GLuint video_slot, GLenum pname, GLuint64EXT * params); +typedef void (GLAPIENTRY *PFNGLGETVIDEOUIVNVPROC)(GLuint video_slot, GLenum pname, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNCOLORTABLEPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); +typedef void (GLAPIENTRY *PFNGLGETNCOLORTABLEARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); +typedef void (GLAPIENTRY *PFNGLGETNCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint lod, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint lod, GLsizei bufSize, void * img); +typedef void (GLAPIENTRY *PFNGLGETNCONVOLUTIONFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); +typedef void (GLAPIENTRY *PFNGLGETNCONVOLUTIONFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); +typedef void (GLAPIENTRY *PFNGLGETNHISTOGRAMPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNHISTOGRAMARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNMAPDVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPDVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPFVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPFVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPIVPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); +typedef void (GLAPIENTRY *PFNGLGETNMAPIVARBPROC)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); +typedef void (GLAPIENTRY *PFNGLGETNMINMAXPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNMINMAXARBPROC)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPFVPROC)(GLenum map, GLsizei bufSize, GLfloat * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPFVARBPROC)(GLenum map, GLsizei bufSize, GLfloat * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUIVPROC)(GLenum map, GLsizei bufSize, GLuint * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUIVARBPROC)(GLenum map, GLsizei bufSize, GLuint * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUSVPROC)(GLenum map, GLsizei bufSize, GLushort * values); +typedef void (GLAPIENTRY *PFNGLGETNPIXELMAPUSVARBPROC)(GLenum map, GLsizei bufSize, GLushort * values); +typedef void (GLAPIENTRY *PFNGLGETNPOLYGONSTIPPLEPROC)(GLsizei bufSize, GLubyte * pattern); +typedef void (GLAPIENTRY *PFNGLGETNPOLYGONSTIPPLEARBPROC)(GLsizei bufSize, GLubyte * pattern); +typedef void (GLAPIENTRY *PFNGLGETNSEPARABLEFILTERPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETNSEPARABLEFILTERARBPROC)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); +typedef void (GLAPIENTRY *PFNGLGETNTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); +typedef void (GLAPIENTRY *PFNGLGETNTEXIMAGEARBPROC)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMDVPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMDVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVEXTPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMFVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint64 * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVEXTPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMIVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUI64VARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint64 * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUIVPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUIVARBPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGETNUNIFORMUIVKHRPROC)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORBSUNPROC)(GLbyte factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORDSUNPROC)(GLdouble factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORFSUNPROC)(GLfloat factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORISUNPROC)(GLint factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORSSUNPROC)(GLshort factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORUBSUNPROC)(GLubyte factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORUISUNPROC)(GLuint factor); +typedef void (GLAPIENTRY *PFNGLGLOBALALPHAFACTORUSSUNPROC)(GLushort factor); +typedef void (GLAPIENTRY *PFNGLHINTPROC)(GLenum target, GLenum mode); +typedef void (GLAPIENTRY *PFNGLHINTPGIPROC)(GLenum target, GLint mode); +typedef void (GLAPIENTRY *PFNGLHISTOGRAMPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLHISTOGRAMEXTPROC)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLIGLOOINTERFACESGIXPROC)(GLenum pname, const void * params); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERFHPPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERIHPPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)(GLenum target, GLenum pname, const GLint * params); +typedef GLsync (GLAPIENTRY *PFNGLIMPORTSYNCEXTPROC)(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLINDEXFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLINDEXFUNCEXTPROC)(GLenum func, GLclampf ref); +typedef void (GLAPIENTRY *PFNGLINDEXMASKPROC)(GLuint mask); +typedef void (GLAPIENTRY *PFNGLINDEXMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLINDEXPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLINDEXPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLINDEXDPROC)(GLdouble c); +typedef void (GLAPIENTRY *PFNGLINDEXDVPROC)(const GLdouble * c); +typedef void (GLAPIENTRY *PFNGLINDEXFPROC)(GLfloat c); +typedef void (GLAPIENTRY *PFNGLINDEXFVPROC)(const GLfloat * c); +typedef void (GLAPIENTRY *PFNGLINDEXIPROC)(GLint c); +typedef void (GLAPIENTRY *PFNGLINDEXIVPROC)(const GLint * c); +typedef void (GLAPIENTRY *PFNGLINDEXSPROC)(GLshort c); +typedef void (GLAPIENTRY *PFNGLINDEXSVPROC)(const GLshort * c); +typedef void (GLAPIENTRY *PFNGLINDEXUBPROC)(GLubyte c); +typedef void (GLAPIENTRY *PFNGLINDEXUBVPROC)(const GLubyte * c); +typedef void (GLAPIENTRY *PFNGLINDEXXOESPROC)(GLfixed component); +typedef void (GLAPIENTRY *PFNGLINDEXXVOESPROC)(const GLfixed * component); +typedef void (GLAPIENTRY *PFNGLINITNAMESPROC)(void); +typedef void (GLAPIENTRY *PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); +typedef void (GLAPIENTRY *PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar * marker); +typedef void (GLAPIENTRY *PFNGLINSTRUMENTSBUFFERSGIXPROC)(GLsizei size, GLint * buffer); +typedef void (GLAPIENTRY *PFNGLINTERLEAVEDARRAYSPROC)(GLenum format, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLINTERPOLATEPATHSNVPROC)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (GLAPIENTRY *PFNGLINVALIDATEBUFFERDATAPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLINVALIDATEBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (GLAPIENTRY *PFNGLINVALIDATEFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAPIENTRY *PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments); +typedef void (GLAPIENTRY *PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLINVALIDATESUBFRAMEBUFFERPROC)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLINVALIDATETEXIMAGEPROC)(GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLINVALIDATETEXSUBIMAGEPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef GLboolean (GLAPIENTRY *PFNGLISASYNCMARKERSGIXPROC)(GLuint marker); +typedef GLboolean (GLAPIENTRY *PFNGLISBUFFERPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISBUFFERARBPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISBUFFERRESIDENTNVPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLISCOMMANDLISTNVPROC)(GLuint list); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDPROC)(GLenum cap); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDINDEXEDEXTPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDIPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDIEXTPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDINVPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISENABLEDIOESPROC)(GLenum target, GLuint index); +typedef GLboolean (GLAPIENTRY *PFNGLISFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLISFENCENVPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISFRAMEBUFFEROESPROC)(GLuint framebuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISLISTPROC)(GLuint list); +typedef GLboolean (GLAPIENTRY *PFNGLISNAMEAMDPROC)(GLenum identifier, GLuint name); +typedef GLboolean (GLAPIENTRY *PFNGLISNAMEDBUFFERRESIDENTNVPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISNAMEDSTRINGARBPROC)(GLint namelen, const GLchar * name); +typedef GLboolean (GLAPIENTRY *PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLISOCCLUSIONQUERYNVPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISPATHNVPROC)(GLuint path); +typedef GLboolean (GLAPIENTRY *PFNGLISPOINTINFILLPATHNVPROC)(GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (GLAPIENTRY *PFNGLISPOINTINSTROKEPATHNVPROC)(GLuint path, GLfloat x, GLfloat y); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMPROC)(GLuint program); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMARBPROC)(GLuint program); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMNVPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef GLboolean (GLAPIENTRY *PFNGLISPROGRAMPIPELINEEXTPROC)(GLuint pipeline); +typedef GLboolean (GLAPIENTRY *PFNGLISQUERYPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISQUERYARBPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISQUERYEXTPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISRENDERBUFFEROESPROC)(GLuint renderbuffer); +typedef GLboolean (GLAPIENTRY *PFNGLISSAMPLERPROC)(GLuint sampler); +typedef GLboolean (GLAPIENTRY *PFNGLISSHADERPROC)(GLuint shader); +typedef GLboolean (GLAPIENTRY *PFNGLISSTATENVPROC)(GLuint state); +typedef GLboolean (GLAPIENTRY *PFNGLISSYNCPROC)(GLsync sync); +typedef GLboolean (GLAPIENTRY *PFNGLISSYNCAPPLEPROC)(GLsync sync); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREPROC)(GLuint texture); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREEXTPROC)(GLuint texture); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISTEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef GLboolean (GLAPIENTRY *PFNGLISTRANSFORMFEEDBACKPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISTRANSFORMFEEDBACKNVPROC)(GLuint id); +typedef GLboolean (GLAPIENTRY *PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXARRAYPROC)(GLuint array); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXARRAYAPPLEPROC)(GLuint array); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXARRAYOESPROC)(GLuint array); +typedef GLboolean (GLAPIENTRY *PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)(GLuint index, GLenum pname); +typedef void (GLAPIENTRY *PFNGLLABELOBJECTEXTPROC)(GLenum type, GLuint object, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLLIGHTENVISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXVPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLLIGHTMODELXVOESPROC)(GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLLIGHTFPROC)(GLenum light, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLLIGHTFVPROC)(GLenum light, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLLIGHTIPROC)(GLenum light, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLIGHTIVPROC)(GLenum light, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLLIGHTXPROC)(GLenum light, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTXOESPROC)(GLenum light, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLLIGHTXVPROC)(GLenum light, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLLIGHTXVOESPROC)(GLenum light, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLLINESTIPPLEPROC)(GLint factor, GLushort pattern); +typedef void (GLAPIENTRY *PFNGLLINEWIDTHPROC)(GLfloat width); +typedef void (GLAPIENTRY *PFNGLLINEWIDTHXPROC)(GLfixed width); +typedef void (GLAPIENTRY *PFNGLLINEWIDTHXOESPROC)(GLfixed width); +typedef void (GLAPIENTRY *PFNGLLINKPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj); +typedef void (GLAPIENTRY *PFNGLLISTBASEPROC)(GLuint base); +typedef void (GLAPIENTRY *PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC)(GLuint list, GLuint segment, const void ** indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERFSGIXPROC)(GLuint list, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERFVSGIXPROC)(GLuint list, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERISGIXPROC)(GLuint list, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLLISTPARAMETERIVSGIXPROC)(GLuint list, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLLOADIDENTITYPROC)(void); +typedef void (GLAPIENTRY *PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXXPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLLOADMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLLOADNAMEPROC)(GLuint name); +typedef void (GLAPIENTRY *PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC)(void); +typedef void (GLAPIENTRY *PFNGLLOADPROGRAMNVPROC)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXDARBPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXFARBPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLLOADTRANSPOSEMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLLOCKARRAYSEXTPROC)(GLint first, GLsizei count); +typedef void (GLAPIENTRY *PFNGLLOGICOPPROC)(GLenum opcode); +typedef void (GLAPIENTRY *PFNGLMAKEBUFFERNONRESIDENTNVPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLMAKEBUFFERRESIDENTNVPROC)(GLenum target, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)(GLuint64 handle, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)(GLuint64 handle, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)(GLuint buffer, GLenum access); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)(GLuint64 handle); +typedef void (GLAPIENTRY *PFNGLMAP1DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAP1FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMAP1XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (GLAPIENTRY *PFNGLMAP2DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAP2FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMAP2XOESPROC)(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFEROESPROC)(GLenum target, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAPIENTRY *PFNGLMAPBUFFERRANGEEXTPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GLAPIENTRY *PFNGLMAPCONTROLPOINTSNVPROC)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points); +typedef void (GLAPIENTRY *PFNGLMAPGRID1DPROC)(GLint un, GLdouble u1, GLdouble u2); +typedef void (GLAPIENTRY *PFNGLMAPGRID1FPROC)(GLint un, GLfloat u1, GLfloat u2); +typedef void (GLAPIENTRY *PFNGLMAPGRID1XOESPROC)(GLint n, GLfixed u1, GLfixed u2); +typedef void (GLAPIENTRY *PFNGLMAPGRID2DPROC)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); +typedef void (GLAPIENTRY *PFNGLMAPGRID2FPROC)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLMAPGRID2XOESPROC)(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFEREXTPROC)(GLuint buffer, GLenum access); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAPIENTRY *PFNGLMAPNAMEDBUFFERRANGEEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void * (GLAPIENTRY *PFNGLMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLMAPPARAMETERFVNVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMAPPARAMETERIVNVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void * (GLAPIENTRY *PFNGLMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level, GLbitfield access, GLint * stride, GLenum * layout); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB1DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB1FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB2DAPPLEPROC)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); +typedef void (GLAPIENTRY *PFNGLMAPVERTEXATTRIB2FAPPLEPROC)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLMATERIALFPROC)(GLenum face, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMATERIALFVPROC)(GLenum face, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMATERIALIPROC)(GLenum face, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMATERIALIVPROC)(GLenum face, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMATERIALXPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLMATERIALXOESPROC)(GLenum face, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLMATERIALXVPROC)(GLenum face, GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLMATERIALXVOESPROC)(GLenum face, GLenum pname, const GLfixed * param); +typedef void (GLAPIENTRY *PFNGLMATRIXFRUSTUMEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXPOINTEROESPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXUBVARBPROC)(GLint size, const GLubyte * indices); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXUIVARBPROC)(GLint size, const GLuint * indices); +typedef void (GLAPIENTRY *PFNGLMATRIXINDEXUSVARBPROC)(GLint size, const GLushort * indices); +typedef void (GLAPIENTRY *PFNGLMATRIXLOAD3X2FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOAD3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADIDENTITYEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXLOADFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMODEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXMULT3X2FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULT3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC)(GLenum matrixMode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTTRANSPOSEDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTTRANSPOSEFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTDEXTPROC)(GLenum mode, const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMATRIXMULTFEXTPROC)(GLenum mode, const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMATRIXORTHOEXTPROC)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLMATRIXPOPEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXPUSHEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLMATRIXROTATEDEXTPROC)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLMATRIXROTATEFEXTPROC)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLMATRIXSCALEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLMATRIXSCALEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLMATRIXTRANSLATEDEXTPROC)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLMATRIXTRANSLATEFEXTPROC)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLMAXSHADERCOMPILERTHREADSARBPROC)(GLuint count); +typedef void (GLAPIENTRY *PFNGLMEMORYBARRIERPROC)(GLbitfield barriers); +typedef void (GLAPIENTRY *PFNGLMEMORYBARRIERBYREGIONPROC)(GLbitfield barriers); +typedef void (GLAPIENTRY *PFNGLMEMORYBARRIEREXTPROC)(GLbitfield barriers); +typedef void (GLAPIENTRY *PFNGLMINSAMPLESHADINGPROC)(GLfloat value); +typedef void (GLAPIENTRY *PFNGLMINSAMPLESHADINGARBPROC)(GLfloat value); +typedef void (GLAPIENTRY *PFNGLMINSAMPLESHADINGOESPROC)(GLfloat value); +typedef void (GLAPIENTRY *PFNGLMINMAXPROC)(GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLMINMAXEXTPROC)(GLenum target, GLenum internalformat, GLboolean sink); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXXPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLMULTMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXDPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXDARBPROC)(const GLdouble * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXFPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXFARBPROC)(const GLfloat * m); +typedef void (GLAPIENTRY *PFNGLMULTTRANSPOSEMATRIXXOESPROC)(const GLfixed * m); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSEXTPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTPROC)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)(GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)(GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSEXTPROC)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)(GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); +typedef void (GLAPIENTRY *PFNGLMULTIMODEDRAWARRAYSIBMPROC)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); +typedef void (GLAPIENTRY *PFNGLMULTIMODEDRAWELEMENTSIBMPROC)(const GLenum * mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, GLint modestride); +typedef void (GLAPIENTRY *PFNGLMULTITEXBUFFEREXTPROC)(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1BOESPROC)(GLenum texture, GLbyte s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DPROC)(GLenum target, GLdouble s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DARBPROC)(GLenum target, GLdouble s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FPROC)(GLenum target, GLfloat s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IPROC)(GLenum target, GLint s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IARBPROC)(GLenum target, GLint s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SPROC)(GLenum target, GLshort s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SARBPROC)(GLenum target, GLshort s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1XOESPROC)(GLenum texture, GLfixed s); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD1XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2BOESPROC)(GLenum texture, GLbyte s, GLbyte t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DPROC)(GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DARBPROC)(GLenum target, GLdouble s, GLdouble t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FPROC)(GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IPROC)(GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IARBPROC)(GLenum target, GLint s, GLint t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SPROC)(GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SARBPROC)(GLenum target, GLshort s, GLshort t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2XOESPROC)(GLenum texture, GLfixed s, GLfixed t); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD2XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IPROC)(GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IARBPROC)(GLenum target, GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SPROC)(GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD3XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4BOESPROC)(GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4BVOESPROC)(GLenum texture, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DARBPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DVPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4DVARBPROC)(GLenum target, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FVPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IARBPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IVPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4IVARBPROC)(GLenum target, const GLint * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SARBPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SVPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4XPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4XOESPROC)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORD4XVOESPROC)(GLenum texture, const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLMULTITEXCOORDPOINTEREXTPROC)(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMULTITEXENVIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENDEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENDVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENFEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENFVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENIEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMULTITEXGENIVEXTPROC)(GLenum texunit, GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIUIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERFEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERFVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIEXTPROC)(GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLMULTITEXPARAMETERIVEXTPROC)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLMULTITEXRENDERBUFFEREXTPROC)(GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLMULTITEXSUBIMAGE1DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXSUBIMAGE2DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLMULTITEXSUBIMAGE3DEXTPROC)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERDATAPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERDATAEXTPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSTORAGEEXTPROC)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAPIENTRY *PFNGLNAMEDBUFFERSUBDATAEXTPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); +typedef void (GLAPIENTRY *PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC)(GLuint framebuffer, GLenum buf); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC)(GLuint framebuffer, GLsizei n, const GLenum * bufs); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC)(GLuint framebuffer, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)(GLuint framebuffer, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC)(GLuint framebuffer, GLenum src); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTUREPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLNAMEDPROGRAMSTRINGEXTPROC)(GLuint program, GLenum target, GLenum format, GLsizei len, const void * string); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLNAMEDSTRINGARBPROC)(GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string); +typedef void (GLAPIENTRY *PFNGLNEWLISTPROC)(GLuint list, GLenum mode); +typedef GLuint (GLAPIENTRY *PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void * pointer, GLenum usage); +typedef void (GLAPIENTRY *PFNGLNORMAL3BPROC)(GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3DPROC)(GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3FPROC)(GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3FVERTEX3FSUNPROC)(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3IPROC)(GLint nx, GLint ny, GLint nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3SPROC)(GLshort nx, GLshort ny, GLshort nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLNORMAL3XPROC)(GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3XOESPROC)(GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (GLAPIENTRY *PFNGLNORMAL3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLNORMALFORMATNVPROC)(GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTERPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTERLISTIBMPROC)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLNORMALPOINTERVINTELPROC)(GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3BATIPROC)(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3BVATIPROC)(GLenum stream, const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3DATIPROC)(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3FATIPROC)(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3IATIPROC)(GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3SATIPROC)(GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (GLAPIENTRY *PFNGLNORMALSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLOBJECTLABELPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLOBJECTLABELKHRPROC)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLOBJECTPTRLABELPROC)(const void * ptr, GLsizei length, const GLchar * label); +typedef void (GLAPIENTRY *PFNGLOBJECTPTRLABELKHRPROC)(const void * ptr, GLsizei length, const GLchar * label); +typedef GLenum (GLAPIENTRY *PFNGLOBJECTPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); +typedef GLenum (GLAPIENTRY *PFNGLOBJECTUNPURGEABLEAPPLEPROC)(GLenum objectType, GLuint name, GLenum option); +typedef void (GLAPIENTRY *PFNGLORTHOPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GLAPIENTRY *PFNGLORTHOFPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLORTHOFOESPROC)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (GLAPIENTRY *PFNGLORTHOXPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLORTHOXOESPROC)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (GLAPIENTRY *PFNGLPNTRIANGLESFATIPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPNTRIANGLESIATIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); +typedef void (GLAPIENTRY *PFNGLPASSTHROUGHPROC)(GLfloat token); +typedef void (GLAPIENTRY *PFNGLPASSTHROUGHXOESPROC)(GLfixed token); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERFVPROC)(GLenum pname, const GLfloat * values); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERIPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERIEXTPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATCHPARAMETERIOESPROC)(GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATHCOLORGENNVPROC)(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs); +typedef void (GLAPIENTRY *PFNGLPATHCOMMANDSNVPROC)(GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHCOORDSNVPROC)(GLuint path, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHCOVERDEPTHFUNCNVPROC)(GLenum func); +typedef void (GLAPIENTRY *PFNGLPATHDASHARRAYNVPROC)(GLuint path, GLsizei dashCount, const GLfloat * dashArray); +typedef void (GLAPIENTRY *PFNGLPATHFOGGENNVPROC)(GLenum genMode); +typedef GLenum (GLAPIENTRY *PFNGLPATHGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (GLAPIENTRY *PFNGLPATHGLYPHINDEXRANGENVPROC)(GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount); +typedef void (GLAPIENTRY *PFNGLPATHGLYPHRANGENVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GLAPIENTRY *PFNGLPATHGLYPHSNVPROC)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (GLAPIENTRY *PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC)(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void * fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERFNVPROC)(GLuint path, GLenum pname, GLfloat value); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERFVNVPROC)(GLuint path, GLenum pname, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERINVPROC)(GLuint path, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPATHPARAMETERIVNVPROC)(GLuint path, GLenum pname, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPATHSTENCILDEPTHOFFSETNVPROC)(GLfloat factor, GLfloat units); +typedef void (GLAPIENTRY *PFNGLPATHSTENCILFUNCNVPROC)(GLenum func, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLPATHSTRINGNVPROC)(GLuint path, GLenum format, GLsizei length, const void * pathString); +typedef void (GLAPIENTRY *PFNGLPATHSUBCOMMANDSNVPROC)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHSUBCOORDSNVPROC)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords); +typedef void (GLAPIENTRY *PFNGLPATHTEXGENNVPROC)(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs); +typedef void (GLAPIENTRY *PFNGLPAUSETRANSFORMFEEDBACKPROC)(void); +typedef void (GLAPIENTRY *PFNGLPAUSETRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLPIXELDATARANGENVPROC)(GLenum target, GLsizei length, const void * pointer); +typedef void (GLAPIENTRY *PFNGLPIXELMAPFVPROC)(GLenum map, GLsizei mapsize, const GLfloat * values); +typedef void (GLAPIENTRY *PFNGLPIXELMAPUIVPROC)(GLenum map, GLsizei mapsize, const GLuint * values); +typedef void (GLAPIENTRY *PFNGLPIXELMAPUSVPROC)(GLenum map, GLsizei mapsize, const GLushort * values); +typedef void (GLAPIENTRY *PFNGLPIXELMAPXPROC)(GLenum map, GLint size, const GLfixed * values); +typedef void (GLAPIENTRY *PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELSTOREXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERFVSGISPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERISGISPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENPARAMETERIVSGISPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPIXELTEXGENSGIXPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFERFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFERIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFERXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPIXELZOOMPROC)(GLfloat xfactor, GLfloat yfactor); +typedef void (GLAPIENTRY *PFNGLPIXELZOOMXOESPROC)(GLfixed xfactor, GLfixed yfactor); +typedef GLboolean (GLAPIENTRY *PFNGLPOINTALONGPATHNVPROC)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFSGISPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERFVSGISPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERINVPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERIVNVPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXOESPROC)(GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXVPROC)(GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLPOINTPARAMETERXVOESPROC)(GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEPROC)(GLfloat size); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEPOINTEROESPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEXPROC)(GLfixed size); +typedef void (GLAPIENTRY *PFNGLPOINTSIZEXOESPROC)(GLfixed size); +typedef GLint (GLAPIENTRY *PFNGLPOLLASYNCSGIXPROC)(GLuint * markerp); +typedef GLint (GLAPIENTRY *PFNGLPOLLINSTRUMENTSSGIXPROC)(GLint * marker_p); +typedef void (GLAPIENTRY *PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLPOLYGONMODENVPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETCLAMPEXTPROC)(GLfloat factor, GLfloat units, GLfloat clamp); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETEXTPROC)(GLfloat factor, GLfloat bias); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETXPROC)(GLfixed factor, GLfixed units); +typedef void (GLAPIENTRY *PFNGLPOLYGONOFFSETXOESPROC)(GLfixed factor, GLfixed units); +typedef void (GLAPIENTRY *PFNGLPOLYGONSTIPPLEPROC)(const GLubyte * mask); +typedef void (GLAPIENTRY *PFNGLPOPATTRIBPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPCLIENTATTRIBPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPDEBUGGROUPPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPDEBUGGROUPKHRPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPGROUPMARKEREXTPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPMATRIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLPOPNAMEPROC)(void); +typedef void (GLAPIENTRY *PFNGLPRESENTFRAMEDUALFILLNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (GLAPIENTRY *PFNGLPRESENTFRAMEKEYEDNVPROC)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXARBPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXEXTPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVEBOUNDINGBOXOESPROC)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +typedef void (GLAPIENTRY *PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLPRIMITIVERESTARTINDEXNVPROC)(GLuint index); +typedef void (GLAPIENTRY *PFNGLPRIMITIVERESTARTNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLPRIORITIZETEXTURESPROC)(GLsizei n, const GLuint * textures, const GLfloat * priorities); +typedef void (GLAPIENTRY *PFNGLPRIORITIZETEXTURESEXTPROC)(GLsizei n, const GLuint * textures, const GLclampf * priorities); +typedef void (GLAPIENTRY *PFNGLPRIORITIZETEXTURESXOESPROC)(GLsizei n, const GLuint * textures, const GLfixed * priorities); +typedef void (GLAPIENTRY *PFNGLPROGRAMBINARYPROC)(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length); +typedef void (GLAPIENTRY *PFNGLPROGRAMBINARYOESPROC)(GLuint program, GLenum binaryFormat, const void * binary, GLint length); +typedef void (GLAPIENTRY *PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4INVPROC)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)(GLenum target, GLuint index, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)(GLenum target, GLuint index, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4DNVPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4DVNVPROC)(GLenum target, GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4FNVPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETER4FVNVPROC)(GLenum target, GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERIPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERIEXTPROC)(GLuint program, GLenum pname, GLint value); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERS4DVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPARAMETERS4FVNVPROC)(GLenum target, GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC)(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs); +typedef void (GLAPIENTRY *PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const void * string); +typedef void (GLAPIENTRY *PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC)(GLenum target, GLsizei count, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DPROC)(GLuint program, GLint location, GLdouble v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DEXTPROC)(GLuint program, GLint location, GLdouble x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FPROC)(GLuint program, GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FEXTPROC)(GLuint program, GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IPROC)(GLuint program, GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64ARBPROC)(GLuint program, GLint location, GLint64 x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64NVPROC)(GLuint program, GLint location, GLint64EXT x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IEXTPROC)(GLuint program, GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIPROC)(GLuint program, GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64ARBPROC)(GLuint program, GLint location, GLuint64 x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIEXTPROC)(GLuint program, GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM1UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IPROC)(GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM2UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM3UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DPROC)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DEXTPROC)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DVPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4DVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FEXTPROC)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FVPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4FVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64ARBPROC)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64NVPROC)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4I64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IEXTPROC)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IVPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4IVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64ARBPROC)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64NVPROC)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIEXTPROC)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIVPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORM4UIVEXTPROC)(GLuint program, GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)(GLuint program, GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)(GLuint program, GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMUI64NVPROC)(GLuint program, GLint location, GLuint64EXT value); +typedef void (GLAPIENTRY *PFNGLPROGRAMUNIFORMUI64VNVPROC)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLPROGRAMVERTEXLIMITNVPROC)(GLenum target, GLint limit); +typedef void (GLAPIENTRY *PFNGLPROVOKINGVERTEXPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLPUSHATTRIBPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)(GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLPUSHDEBUGGROUPPROC)(GLenum source, GLuint id, GLsizei length, const GLchar * message); +typedef void (GLAPIENTRY *PFNGLPUSHDEBUGGROUPKHRPROC)(GLenum source, GLuint id, GLsizei length, const GLchar * message); +typedef void (GLAPIENTRY *PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar * marker); +typedef void (GLAPIENTRY *PFNGLPUSHMATRIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLPUSHNAMEPROC)(GLuint name); +typedef void (GLAPIENTRY *PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); +typedef void (GLAPIENTRY *PFNGLQUERYCOUNTEREXTPROC)(GLuint id, GLenum target); +typedef GLbitfield (GLAPIENTRY *PFNGLQUERYMATRIXXOESPROC)(GLfixed * mantissa, GLint * exponent); +typedef void (GLAPIENTRY *PFNGLQUERYOBJECTPARAMETERUIAMDPROC)(GLenum target, GLuint id, GLenum pname, GLuint param); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2IPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2SPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2XOESPROC)(GLfixed x, GLfixed y); +typedef void (GLAPIENTRY *PFNGLRASTERPOS2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLRASTERPOS3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4IPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4XOESPROC)(GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (GLAPIENTRY *PFNGLRASTERPOS4XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLRASTERSAMPLESEXTPROC)(GLuint samples, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLREADBUFFERPROC)(GLenum src); +typedef void (GLAPIENTRY *PFNGLREADBUFFERINDEXEDEXTPROC)(GLenum src, GLint index); +typedef void (GLAPIENTRY *PFNGLREADBUFFERNVPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLREADINSTRUMENTSSGIXPROC)(GLint marker); +typedef void (GLAPIENTRY *PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSARBPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSEXTPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLREADNPIXELSKHRPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); +typedef void (GLAPIENTRY *PFNGLRECTDPROC)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); +typedef void (GLAPIENTRY *PFNGLRECTDVPROC)(const GLdouble * v1, const GLdouble * v2); +typedef void (GLAPIENTRY *PFNGLRECTFPROC)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); +typedef void (GLAPIENTRY *PFNGLRECTFVPROC)(const GLfloat * v1, const GLfloat * v2); +typedef void (GLAPIENTRY *PFNGLRECTIPROC)(GLint x1, GLint y1, GLint x2, GLint y2); +typedef void (GLAPIENTRY *PFNGLRECTIVPROC)(const GLint * v1, const GLint * v2); +typedef void (GLAPIENTRY *PFNGLRECTSPROC)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); +typedef void (GLAPIENTRY *PFNGLRECTSVPROC)(const GLshort * v1, const GLshort * v2); +typedef void (GLAPIENTRY *PFNGLRECTXOESPROC)(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (GLAPIENTRY *PFNGLRECTXVOESPROC)(const GLfixed * v1, const GLfixed * v2); +typedef void (GLAPIENTRY *PFNGLREFERENCEPLANESGIXPROC)(const GLdouble * equation); +typedef void (GLAPIENTRY *PFNGLRELEASESHADERCOMPILERPROC)(void); +typedef GLint (GLAPIENTRY *PFNGLRENDERMODEPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLRENDERBUFFERSTORAGEOESPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEPOINTERSUNPROC)(GLenum type, GLsizei stride, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUBSUNPROC)(GLubyte code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUBVSUNPROC)(const GLubyte * code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)(const GLuint * rc, const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUISUNPROC)(GLuint code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * tc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)(GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)(const GLuint * rc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUIVSUNPROC)(const GLuint * code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUSSUNPROC)(GLushort code); +typedef void (GLAPIENTRY *PFNGLREPLACEMENTCODEUSVSUNPROC)(const GLushort * code); +typedef void (GLAPIENTRY *PFNGLREQUESTRESIDENTPROGRAMSNVPROC)(GLsizei n, const GLuint * programs); +typedef void (GLAPIENTRY *PFNGLRESETHISTOGRAMPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESETHISTOGRAMEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESETMINMAXPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESETMINMAXEXTPROC)(GLenum target); +typedef void (GLAPIENTRY *PFNGLRESIZEBUFFERSMESAPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESOLVEDEPTHVALUESNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESUMETRANSFORMFEEDBACKPROC)(void); +typedef void (GLAPIENTRY *PFNGLRESUMETRANSFORMFEEDBACKNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLROTATEDPROC)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLROTATEFPROC)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLROTATEXPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLROTATEXOESPROC)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEXPROC)(GLclampx value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLECOVERAGEXOESPROC)(GLclampx value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKEXTPROC)(GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKINDEXEDNVPROC)(GLuint index, GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKSGISPROC)(GLclampf value, GLboolean invert); +typedef void (GLAPIENTRY *PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); +typedef void (GLAPIENTRY *PFNGLSAMPLEPATTERNEXTPROC)(GLenum pattern); +typedef void (GLAPIENTRY *PFNGLSAMPLEPATTERNSGISPROC)(GLenum pattern); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIIVEXTPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIIVOESPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIUIVEXTPROC)(GLuint sampler, GLenum pname, const GLuint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIUIVOESPROC)(GLuint sampler, GLenum pname, const GLuint * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat * param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLSCALEDPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLSCALEFPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLSCALEXPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLSCALEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLSCISSORARRAYVPROC)(GLuint first, GLsizei count, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSCISSORARRAYVNVPROC)(GLuint first, GLsizei count, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDNVPROC)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSCISSORINDEXEDVNVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BEXTPROC)(GLbyte red, GLbyte green, GLbyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BVPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3BVEXTPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DEXTPROC)(GLdouble red, GLdouble green, GLdouble blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3DVEXTPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IEXTPROC)(GLint red, GLint green, GLint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3IVEXTPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SEXTPROC)(GLshort red, GLshort green, GLshort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3SVEXTPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBVPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIEXTPROC)(GLuint red, GLuint green, GLuint blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIVPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3UIVEXTPROC)(const GLuint * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USEXTPROC)(GLushort red, GLushort green, GLushort blue); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USVPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLOR3USVEXTPROC)(const GLushort * v); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint * color); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLSELECTBUFFERPROC)(GLsizei size, GLuint * buffer); +typedef void (GLAPIENTRY *PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); +typedef void (GLAPIENTRY *PFNGLSEPARABLEFILTER2DPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); +typedef void (GLAPIENTRY *PFNGLSEPARABLEFILTER2DEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); +typedef void (GLAPIENTRY *PFNGLSETFENCEAPPLEPROC)(GLuint fence); +typedef void (GLAPIENTRY *PFNGLSETFENCENVPROC)(GLuint fence, GLenum condition); +typedef void (GLAPIENTRY *PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, const void * addr); +typedef void (GLAPIENTRY *PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, const void * addr); +typedef void (GLAPIENTRY *PFNGLSETMULTISAMPLEFVAMDPROC)(GLenum pname, GLuint index, const GLfloat * val); +typedef void (GLAPIENTRY *PFNGLSHADEMODELPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint * shaders, GLenum binaryformat, const void * binary, GLsizei length); +typedef void (GLAPIENTRY *PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); +typedef void (GLAPIENTRY *PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (GLAPIENTRY *PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (GLAPIENTRY *PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); +typedef void (GLAPIENTRY *PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); +typedef void (GLAPIENTRY *PFNGLSHADERSTORAGEBLOCKBINDINGPROC)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (GLAPIENTRY *PFNGLSHARPENTEXFUNCSGISPROC)(GLenum target, GLsizei n, const GLfloat * points); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERFSGIXPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERFVSGIXPROC)(GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERISGIXPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLSPRITEPARAMETERIVSGIXPROC)(GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLSTARTINSTRUMENTSSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLSTARTTILINGQCOMPROC)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GLAPIENTRY *PFNGLSTATECAPTURENVPROC)(GLuint state, GLenum mode); +typedef void (GLAPIENTRY *PFNGLSTENCILCLEARTAGEXTPROC)(GLsizei stencilTagBits, GLuint stencilClearTag); +typedef void (GLAPIENTRY *PFNGLSTENCILFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILFUNCSEPARATEATIPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILMASKPROC)(GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); +typedef void (GLAPIENTRY *PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAPIENTRY *PFNGLSTENCILOPSEPARATEATIPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GLAPIENTRY *PFNGLSTENCILOPVALUEAMDPROC)(GLenum face, GLuint value); +typedef void (GLAPIENTRY *PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERFILLPATHNVPROC)(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC)(GLuint path, GLint reference, GLuint mask, GLenum coverMode); +typedef void (GLAPIENTRY *PFNGLSTOPINSTRUMENTSSGIXPROC)(GLint marker); +typedef void (GLAPIENTRY *PFNGLSTRINGMARKERGREMEDYPROC)(GLsizei len, const void * string); +typedef void (GLAPIENTRY *PFNGLSUBPIXELPRECISIONBIASNVPROC)(GLuint xbits, GLuint ybits); +typedef void (GLAPIENTRY *PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (GLAPIENTRY *PFNGLSYNCTEXTUREINTELPROC)(GLuint texture); +typedef void (GLAPIENTRY *PFNGLTAGSAMPLEBUFFERSGIXPROC)(void); +typedef void (GLAPIENTRY *PFNGLTANGENT3BEXTPROC)(GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3BVEXTPROC)(const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3DEXTPROC)(GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3DVEXTPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3FEXTPROC)(GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3FVEXTPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3IEXTPROC)(GLint tx, GLint ty, GLint tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3IVEXTPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTANGENT3SEXTPROC)(GLshort tx, GLshort ty, GLshort tz); +typedef void (GLAPIENTRY *PFNGLTANGENT3SVEXTPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTANGENTPOINTEREXTPROC)(GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTBUFFERMASK3DFXPROC)(GLuint mask); +typedef void (GLAPIENTRY *PFNGLTESSELLATIONFACTORAMDPROC)(GLfloat factor); +typedef void (GLAPIENTRY *PFNGLTESSELLATIONMODEAMDPROC)(GLenum mode); +typedef GLboolean (GLAPIENTRY *PFNGLTESTFENCEAPPLEPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLTESTFENCENVPROC)(GLuint fence); +typedef GLboolean (GLAPIENTRY *PFNGLTESTOBJECTAPPLEPROC)(GLenum object, GLuint name); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERARBPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFEREXTPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFEROESPROC)(GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERRANGEPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERRANGEEXTPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXBUFFERRANGEOESPROC)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXBUMPPARAMETERFVATIPROC)(GLenum pname, const GLfloat * param); +typedef void (GLAPIENTRY *PFNGLTEXBUMPPARAMETERIVATIPROC)(GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1BOESPROC)(GLbyte s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1DPROC)(GLdouble s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1FPROC)(GLfloat s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1HNVPROC)(GLhalfNV s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1IPROC)(GLint s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1SPROC)(GLshort s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1XOESPROC)(GLfixed s); +typedef void (GLAPIENTRY *PFNGLTEXCOORD1XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2BOESPROC)(GLbyte s, GLbyte t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2DPROC)(GLdouble s, GLdouble t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FPROC)(GLfloat s, GLfloat t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)(const GLfloat * tc, const GLubyte * c, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FVERTEX3FSUNPROC)(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FVERTEX3FVSUNPROC)(const GLfloat * tc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2IPROC)(GLint s, GLint t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2SPROC)(GLshort s, GLshort t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2XOESPROC)(GLfixed s, GLfixed t); +typedef void (GLAPIENTRY *PFNGLTEXCOORD2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3BOESPROC)(GLbyte s, GLbyte t, GLbyte r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3DPROC)(GLdouble s, GLdouble t, GLdouble r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3FPROC)(GLfloat s, GLfloat t, GLfloat r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3IPROC)(GLint s, GLint t, GLint r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3SPROC)(GLshort s, GLshort t, GLshort r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3XOESPROC)(GLfixed s, GLfixed t, GLfixed r); +typedef void (GLAPIENTRY *PFNGLTEXCOORD3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4BOESPROC)(GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4DPROC)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FVERTEX4FSUNPROC)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FVERTEX4FVSUNPROC)(const GLfloat * tc, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4IPROC)(GLint s, GLint t, GLint r, GLint q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4SPROC)(GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4XOESPROC)(GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (GLAPIENTRY *PFNGLTEXCOORD4XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint * coords); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLTEXCOORDPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXENVFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXENVIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXENVIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXENVXPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXENVXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXENVXVPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXENVXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXFILTERFUNCSGISPROC)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLTEXGENDPROC)(GLenum coord, GLenum pname, GLdouble param); +typedef void (GLAPIENTRY *PFNGLTEXGENDVPROC)(GLenum coord, GLenum pname, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLTEXGENFPROC)(GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXGENFOESPROC)(GLenum coord, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXGENFVPROC)(GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXGENFVOESPROC)(GLenum coord, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXGENIPROC)(GLenum coord, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXGENIOESPROC)(GLenum coord, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXGENIVPROC)(GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXGENIVOESPROC)(GLenum coord, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXGENXOESPROC)(GLenum coord, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXGENXVOESPROC)(GLenum coord, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE3DOESPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXIMAGE4DSGISPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXPAGECOMMITMENTARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLTEXPAGECOMMITMENTEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIIVEXTPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIIVOESPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIUIVEXTPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIUIVOESPROC)(GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXOESPROC)(GLenum target, GLenum pname, GLfixed param); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXVPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXPARAMETERXVOESPROC)(GLenum target, GLenum pname, const GLfixed * params); +typedef void (GLAPIENTRY *PFNGLTEXRENDERBUFFERNVPROC)(GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE1DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE1DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE2DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE2DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DEXTPROC)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXSTORAGESPARSEAMDPROC)(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE1DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE2DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE3DOESPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXSUBIMAGE4DSGISPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREBARRIERPROC)(void); +typedef void (GLAPIENTRY *PFNGLTEXTUREBARRIERNVPROC)(void); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFERPROC)(GLuint texture, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFEREXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFERRANGEPROC)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXTUREBUFFERRANGEEXTPROC)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTEXTURECOLORMASKSGISPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (GLAPIENTRY *PFNGLTEXTURELIGHTEXTPROC)(GLenum pname); +typedef void (GLAPIENTRY *PFNGLTEXTUREMATERIALEXTPROC)(GLenum face, GLenum mode); +typedef void (GLAPIENTRY *PFNGLTEXTURENORMALEXTPROC)(GLenum mode); +typedef void (GLAPIENTRY *PFNGLTEXTUREPAGECOMMITMENTEXTPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIIVPROC)(GLuint texture, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIUIVPROC)(GLuint texture, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIUIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLuint * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFPROC)(GLuint texture, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFVPROC)(GLuint texture, GLenum pname, const GLfloat * param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERFVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIPROC)(GLuint texture, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIEXTPROC)(GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIVPROC)(GLuint texture, GLenum pname, const GLint * param); +typedef void (GLAPIENTRY *PFNGLTEXTUREPARAMETERIVEXTPROC)(GLuint texture, GLenum target, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLTEXTURERANGEAPPLEPROC)(GLenum target, GLsizei length, const void * pointer); +typedef void (GLAPIENTRY *PFNGLTEXTURERENDERBUFFEREXTPROC)(GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE1DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE1DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DPROC)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DEXTPROC)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (GLAPIENTRY *PFNGLTEXTURESTORAGESPARSEAMDPROC)(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE1DPROC)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE1DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE2DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE3DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTURESUBIMAGE3DEXTPROC)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); +typedef void (GLAPIENTRY *PFNGLTEXTUREVIEWPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (GLAPIENTRY *PFNGLTEXTUREVIEWEXTPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (GLAPIENTRY *PFNGLTEXTUREVIEWOESPROC)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (GLAPIENTRY *PFNGLTRACKMATRIXNVPROC)(GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)(GLsizei count, const GLint * attribs, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC)(GLuint xfb, GLuint index, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC)(GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); +typedef void (GLAPIENTRY *PFNGLTRANSFORMPATHNVPROC)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues); +typedef void (GLAPIENTRY *PFNGLTRANSLATEDPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLTRANSLATEFPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLTRANSLATEXPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLTRANSLATEXOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLUNIFORM1DPROC)(GLint location, GLdouble x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IPROC)(GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64ARBPROC)(GLint location, GLint64 x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64NVPROC)(GLint location, GLint64EXT x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64ARBPROC)(GLint location, GLuint64 x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64NVPROC)(GLint location, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIEXTPROC)(GLint location, GLuint v0); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2DPROC)(GLint location, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64ARBPROC)(GLint location, GLint64 x, GLint64 y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4DPROC)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4DVPROC)(GLint location, GLsizei count, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64ARBPROC)(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64NVPROC)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64VARBPROC)(GLint location, GLsizei count, const GLint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4I64VNVPROC)(GLint location, GLsizei count, const GLint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64ARBPROC)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64NVPROC)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +typedef void (GLAPIENTRY *PFNGLUNIFORMBUFFEREXTPROC)(GLuint program, GLint location, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64ARBPROC)(GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64NVPROC)(GLint location, GLuint64 value); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64VARBPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMHANDLEUI64VNVPROC)(GLint location, GLsizei count, const GLuint64 * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X3FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX2X4FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X2FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX3X4FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X2DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X2FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X3DVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMMATRIX4X3FVNVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); +typedef void (GLAPIENTRY *PFNGLUNIFORMSUBROUTINESUIVPROC)(GLenum shadertype, GLsizei count, const GLuint * indices); +typedef void (GLAPIENTRY *PFNGLUNIFORMUI64NVPROC)(GLint location, GLuint64EXT value); +typedef void (GLAPIENTRY *PFNGLUNIFORMUI64VNVPROC)(GLint location, GLsizei count, const GLuint64EXT * value); +typedef void (GLAPIENTRY *PFNGLUNLOCKARRAYSEXTPROC)(void); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPBUFFERPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPBUFFERARBPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPBUFFEROESPROC)(GLenum target); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer); +typedef GLboolean (GLAPIENTRY *PFNGLUNMAPNAMEDBUFFEREXTPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLUNMAPOBJECTBUFFERATIPROC)(GLuint buffer); +typedef void (GLAPIENTRY *PFNGLUNMAPTEXTURE2DINTELPROC)(GLuint texture, GLint level); +typedef void (GLAPIENTRY *PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMSTAGESPROC)(GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GLAPIENTRY *PFNGLUSEPROGRAMSTAGESEXTPROC)(GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GLAPIENTRY *PFNGLUSESHADERPROGRAMEXTPROC)(GLenum type, GLuint program); +typedef void (GLAPIENTRY *PFNGLVDPAUFININVPROC)(void); +typedef void (GLAPIENTRY *PFNGLVDPAUGETSURFACEIVNVPROC)(GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); +typedef void (GLAPIENTRY *PFNGLVDPAUINITNVPROC)(const void * vdpDevice, const void * getProcAddress); +typedef GLboolean (GLAPIENTRY *PFNGLVDPAUISSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void (GLAPIENTRY *PFNGLVDPAUMAPSURFACESNVPROC)(GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces); +typedef GLvdpauSurfaceNV (GLAPIENTRY *PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); +typedef GLvdpauSurfaceNV (GLAPIENTRY *PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); +typedef void (GLAPIENTRY *PFNGLVDPAUSURFACEACCESSNVPROC)(GLvdpauSurfaceNV surface, GLenum access); +typedef void (GLAPIENTRY *PFNGLVDPAUUNMAPSURFACESNVPROC)(GLsizei numSurface, const GLvdpauSurfaceNV * surfaces); +typedef void (GLAPIENTRY *PFNGLVDPAUUNREGISTERSURFACENVPROC)(GLvdpauSurfaceNV surface); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMPROC)(GLuint program); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMPIPELINEPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLVALIDATEPROGRAMPIPELINEEXTPROC)(GLuint pipeline); +typedef void (GLAPIENTRY *PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY *PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, const void * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTBVEXTPROC)(GLuint id, const GLbyte * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTDVEXTPROC)(GLuint id, const GLdouble * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTFVEXTPROC)(GLuint id, const GLfloat * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTIVEXTPROC)(GLuint id, const GLint * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTSVEXTPROC)(GLuint id, const GLshort * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTUBVEXTPROC)(GLuint id, const GLubyte * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTUIVEXTPROC)(GLuint id, const GLuint * addr); +typedef void (GLAPIENTRY *PFNGLVARIANTUSVEXTPROC)(GLuint id, const GLushort * addr); +typedef void (GLAPIENTRY *PFNGLVERTEX2BOESPROC)(GLbyte x, GLbyte y); +typedef void (GLAPIENTRY *PFNGLVERTEX2BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEX2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEX2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y); +typedef void (GLAPIENTRY *PFNGLVERTEX2HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2IPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEX2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2SPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEX2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEX2XOESPROC)(GLfixed x); +typedef void (GLAPIENTRY *PFNGLVERTEX2XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX3BOESPROC)(GLbyte x, GLbyte y, GLbyte z); +typedef void (GLAPIENTRY *PFNGLVERTEX3BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEX3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEX3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (GLAPIENTRY *PFNGLVERTEX3HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEX3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEX3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEX3XOESPROC)(GLfixed x, GLfixed y); +typedef void (GLAPIENTRY *PFNGLVERTEX3XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX4BOESPROC)(GLbyte x, GLbyte y, GLbyte z, GLbyte w); +typedef void (GLAPIENTRY *PFNGLVERTEX4BVOESPROC)(const GLbyte * coords); +typedef void (GLAPIENTRY *PFNGLVERTEX4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEX4DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEX4FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (GLAPIENTRY *PFNGLVERTEX4HVNVPROC)(const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4IPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEX4IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEX4SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEX4XOESPROC)(GLfixed x, GLfixed y, GLfixed z); +typedef void (GLAPIENTRY *PFNGLVERTEX4XVOESPROC)(const GLfixed * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBBINDINGPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBIFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYATTRIBLFORMATPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYBINDINGDIVISORPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYELEMENTBUFFERPROC)(GLuint vaobj, GLuint buffer); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYRANGEAPPLEPROC)(GLsizei length, void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYRANGENVPROC)(GLsizei length, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC)(GLuint vaobj, GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC)(GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXBUFFERPROC)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXBUFFERSPROC)(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); +typedef void (GLAPIENTRY *PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DNVPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FNVPROC)(GLuint index, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SNVPROC)(GLuint index, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB1SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DNVPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FNVPROC)(GLuint index, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SNVPROC)(GLuint index, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB2SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB3SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DNVPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4DVNVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4FVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SNVPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4SVNVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBNVPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UBVNVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORANGLEPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORARBPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISOREXTPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBDIVISORNVPROC)(GLuint index, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DEXTPROC)(GLuint index, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1I64NVPROC)(GLuint index, GLint64EXT x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64ARBPROC)(GLuint index, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64NVPROC)(GLuint index, GLuint64EXT x); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64VARBPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL1UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DEXTPROC)(GLuint index, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL2UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL3UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DEXTPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DVPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4DVEXTPROC)(GLuint index, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4I64NVPROC)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4I64VNVPROC)(GLuint index, const GLint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4UI64NVPROC)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBL4UI64VNVPROC)(GLuint index, const GLuint64EXT * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLFORMATNVPROC)(GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBLPOINTEREXTPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPARAMETERIAMDPROC)(GLuint index, GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBPOINTERNVPROC)(GLuint index, GLint fsize, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS1SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS2SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS3SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4DVNVPROC)(GLuint index, GLsizei count, const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4FVNVPROC)(GLuint index, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4SVNVPROC)(GLuint index, GLsizei count, const GLshort * v); +typedef void (GLAPIENTRY *PFNGLVERTEXATTRIBS4UBVNVPROC)(GLuint index, GLsizei count, const GLubyte * v); +typedef void (GLAPIENTRY *PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); +typedef void (GLAPIENTRY *PFNGLVERTEXBLENDARBPROC)(GLint count); +typedef void (GLAPIENTRY *PFNGLVERTEXBLENDENVFATIPROC)(GLenum pname, GLfloat param); +typedef void (GLAPIENTRY *PFNGLVERTEXBLENDENVIATIPROC)(GLenum pname, GLint param); +typedef void (GLAPIENTRY *PFNGLVERTEXFORMATNVPROC)(GLint size, GLenum type, GLsizei stride); +typedef void (GLAPIENTRY *PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); +typedef void (GLAPIENTRY *PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint * value); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTERLISTIBMPROC)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); +typedef void (GLAPIENTRY *PFNGLVERTEXPOINTERVINTELPROC)(GLint size, GLenum type, const void ** pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1DATIPROC)(GLenum stream, GLdouble x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1FATIPROC)(GLenum stream, GLfloat x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1IATIPROC)(GLenum stream, GLint x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1SATIPROC)(GLenum stream, GLshort x); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM1SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2DATIPROC)(GLenum stream, GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2FATIPROC)(GLenum stream, GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2IATIPROC)(GLenum stream, GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2SATIPROC)(GLenum stream, GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM2SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3IATIPROC)(GLenum stream, GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM3SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4DATIPROC)(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4DVATIPROC)(GLenum stream, const GLdouble * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4FATIPROC)(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4FVATIPROC)(GLenum stream, const GLfloat * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4IATIPROC)(GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4IVATIPROC)(GLenum stream, const GLint * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4SATIPROC)(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLVERTEXSTREAM4SVATIPROC)(GLenum stream, const GLshort * coords); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTFEXTPROC)(GLfloat weight); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTFVEXTPROC)(const GLfloat * weight); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTHNVPROC)(GLhalfNV weight); +typedef void (GLAPIENTRY *PFNGLVERTEXWEIGHTHVNVPROC)(const GLhalfNV * weight); +typedef GLenum (GLAPIENTRY *PFNGLVIDEOCAPTURENVPROC)(GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time); +typedef void (GLAPIENTRY *PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params); +typedef void (GLAPIENTRY *PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params); +typedef void (GLAPIENTRY *PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params); +typedef void (GLAPIENTRY *PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GLAPIENTRY *PFNGLVIEWPORTARRAYVPROC)(GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVIEWPORTARRAYVNVPROC)(GLuint first, GLsizei count, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFNVPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLVIEWPORTINDEXEDFVNVPROC)(GLuint index, const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAPIENTRY *PFNGLWAITSYNCAPPLEPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GLAPIENTRY *PFNGLWEIGHTPATHSNVPROC)(GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTPOINTERARBPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLWEIGHTPOINTEROESPROC)(GLint size, GLenum type, GLsizei stride, const void * pointer); +typedef void (GLAPIENTRY *PFNGLWEIGHTBVARBPROC)(GLint size, const GLbyte * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTDVARBPROC)(GLint size, const GLdouble * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTFVARBPROC)(GLint size, const GLfloat * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTIVARBPROC)(GLint size, const GLint * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTSVARBPROC)(GLint size, const GLshort * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTUBVARBPROC)(GLint size, const GLubyte * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTUIVARBPROC)(GLint size, const GLuint * weights); +typedef void (GLAPIENTRY *PFNGLWEIGHTUSVARBPROC)(GLint size, const GLushort * weights); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DARBPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DMESAPROC)(GLdouble x, GLdouble y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DVARBPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2DVMESAPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FARBPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FMESAPROC)(GLfloat x, GLfloat y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FVARBPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2FVMESAPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IARBPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IMESAPROC)(GLint x, GLint y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IVARBPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2IVMESAPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SARBPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SMESAPROC)(GLshort x, GLshort y); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SVARBPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS2SVMESAPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DARBPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DMESAPROC)(GLdouble x, GLdouble y, GLdouble z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DVPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DVARBPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3DVMESAPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FARBPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FMESAPROC)(GLfloat x, GLfloat y, GLfloat z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FVPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FVARBPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3FVMESAPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IARBPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IMESAPROC)(GLint x, GLint y, GLint z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IVPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IVARBPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3IVMESAPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SARBPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SMESAPROC)(GLshort x, GLshort y, GLshort z); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SVPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SVARBPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS3SVMESAPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4DMESAPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4DVMESAPROC)(const GLdouble * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4FMESAPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4FVMESAPROC)(const GLfloat * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4IMESAPROC)(GLint x, GLint y, GLint z, GLint w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4IVMESAPROC)(const GLint * v); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4SMESAPROC)(GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (GLAPIENTRY *PFNGLWINDOWPOS4SVMESAPROC)(const GLshort * v); +typedef void (GLAPIENTRY *PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAccum)(GLenum op, GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAccumxOES)(GLenum op, GLfixed value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveProgramEXT)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveShaderProgram)(GLuint pipeline, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveShaderProgramEXT)(GLuint pipeline, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveStencilFaceEXT)(GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveTexture)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveTextureARB)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glActiveVaryingNV)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFunc)(GLenum func, GLfloat ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFuncQCOM)(GLenum func, GLclampf ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFuncx)(GLenum func, GLfixed ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAlphaFuncxOES)(GLenum func, GLfixed ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glApplyFramebufferAttachmentCMAAINTEL)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glApplyTextureEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glAreProgramsResidentNV)(GLsizei n, const GLuint * programs, GLboolean * residences); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glAreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glAreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glArrayElement)(GLint i); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glArrayElementEXT)(GLint i); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glArrayObjectATI)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAsyncMarkerSGIX)(GLuint marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAttachObjectARB)(GLhandleARB containerObj, GLhandleARB obj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glAttachShader)(GLuint program, GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBegin)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginConditionalRender)(GLuint id, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginConditionalRenderNV)(GLuint id, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginConditionalRenderNVX)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginFragmentShaderATI)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginOcclusionQueryNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginPerfMonitorAMD)(GLuint monitor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginPerfQueryINTEL)(GLuint queryHandle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQuery)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQueryARB)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQueryEXT)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginQueryIndexed)(GLenum target, GLuint index, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginTransformFeedback)(GLenum primitiveMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginTransformFeedbackEXT)(GLenum primitiveMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginTransformFeedbackNV)(GLenum primitiveMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginVertexShaderEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBeginVideoCaptureNV)(GLuint video_capture_slot); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindAttribLocation)(GLuint program, GLuint index, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindAttribLocationARB)(GLhandleARB programObj, GLuint index, const GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBuffer)(GLenum target, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferARB)(GLenum target, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferBase)(GLenum target, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferBaseEXT)(GLenum target, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferBaseNV)(GLenum target, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferOffsetEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferOffsetNV)(GLenum target, GLuint index, GLuint buffer, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferRange)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferRangeEXT)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBufferRangeNV)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBuffersBase)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindBuffersRange)(GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocation)(GLuint program, GLuint color, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocationEXT)(GLuint program, GLuint color, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocationIndexed)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragDataLocationIndexedEXT)(GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFragmentShaderATI)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFramebuffer)(GLenum target, GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFramebufferEXT)(GLenum target, GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindFramebufferOES)(GLenum target, GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindImageTexture)(GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindImageTextureEXT)(GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindImageTextures)(GLuint first, GLsizei count, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindLightParameterEXT)(GLenum light, GLenum value); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindMaterialParameterEXT)(GLenum face, GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindMultiTextureEXT)(GLenum texunit, GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindParameterEXT)(GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramARB)(GLenum target, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramNV)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramPipeline)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindProgramPipelineEXT)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindRenderbuffer)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindRenderbufferEXT)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindRenderbufferOES)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindSampler)(GLuint unit, GLuint sampler); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindSamplers)(GLuint first, GLsizei count, const GLuint * samplers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindTexGenParameterEXT)(GLenum unit, GLenum coord, GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTexture)(GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTextureEXT)(GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTextureUnit)(GLuint unit, GLuint texture); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glBindTextureUnitParameterEXT)(GLenum unit, GLenum value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTextures)(GLuint first, GLsizei count, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTransformFeedback)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindTransformFeedbackNV)(GLenum target, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexArray)(GLuint array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexArrayAPPLE)(GLuint array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexArrayOES)(GLuint array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexBuffer)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexBuffers)(GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVertexShaderEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVideoCaptureStreamBufferNV)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBindVideoCaptureStreamTextureNV)(GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3bEXT)(GLbyte bx, GLbyte by, GLbyte bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3bvEXT)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3dEXT)(GLdouble bx, GLdouble by, GLdouble bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3dvEXT)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3fEXT)(GLfloat bx, GLfloat by, GLfloat bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3fvEXT)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3iEXT)(GLint bx, GLint by, GLint bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3ivEXT)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3sEXT)(GLshort bx, GLshort by, GLshort bz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormal3svEXT)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBinormalPointerEXT)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBitmap)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBitmapxOES)(GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendBarrier)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendBarrierKHR)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendBarrierNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendColorEXT)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendColorxOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquation)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationIndexedAMD)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationOES)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparate)(GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateEXT)(GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateIndexedAMD)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateOES)(GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparatei)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateiARB)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateiEXT)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationSeparateiOES)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationi)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationiARB)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationiEXT)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendEquationiOES)(GLuint buf, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunc)(GLenum sfactor, GLenum dfactor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncIndexedAMD)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparate)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateINGR)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateIndexedAMD)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateOES)(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparatei)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateiARB)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateiEXT)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFuncSeparateiOES)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunci)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunciARB)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunciEXT)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendFunciOES)(GLuint buf, GLenum src, GLenum dst); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlendParameteriNV)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebufferANGLE)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebufferEXT)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitFramebufferNV)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBlitNamedFramebuffer)(GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferAddressRangeNV)(GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferData)(GLenum target, GLsizeiptr size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferDataARB)(GLenum target, GLsizeiptrARB size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferPageCommitmentARB)(GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferParameteriAPPLE)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferStorage)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferStorageEXT)(GLenum target, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCallCommandListNV)(GLuint list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCallList)(GLuint list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCallLists)(GLsizei n, GLenum type, const void * lists); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckFramebufferStatus)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckFramebufferStatusEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckFramebufferStatusOES)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckNamedFramebufferStatus)(GLuint framebuffer, GLenum target); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glCheckNamedFramebufferStatusEXT)(GLuint framebuffer, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClampColor)(GLenum target, GLenum clamp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClampColorARB)(GLenum target, GLenum clamp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClear)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearAccumxOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferData)(GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferSubData)(GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferfi)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferfv)(GLenum buffer, GLint drawbuffer, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferiv)(GLenum buffer, GLint drawbuffer, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearBufferuiv)(GLenum buffer, GLint drawbuffer, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColor)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorIiEXT)(GLint red, GLint green, GLint blue, GLint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorIuiEXT)(GLuint red, GLuint green, GLuint blue, GLuint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorx)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearColorxOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepth)(GLdouble depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthdNV)(GLdouble depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthf)(GLfloat d); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthfOES)(GLclampf depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthx)(GLfixed depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearDepthxOES)(GLfixed depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearIndex)(GLfloat c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferData)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferDataEXT)(GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferSubData)(GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedBufferSubDataEXT)(GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferfi)(GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferfv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearNamedFramebufferuiv)(GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearStencil)(GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearTexImage)(GLuint texture, GLint level, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClearTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientActiveTexture)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientActiveTextureARB)(GLenum texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientActiveVertexStreamATI)(GLenum stream); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClientAttribDefaultEXT)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glClientWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glClientWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipControl)(GLenum origin, GLenum depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlane)(GLenum plane, const GLdouble * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanef)(GLenum p, const GLfloat * eqn); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanefIMG)(GLenum p, const GLfloat * eqn); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanefOES)(GLenum plane, const GLfloat * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanex)(GLenum plane, const GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanexIMG)(GLenum p, const GLfixed * eqn); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glClipPlanexOES)(GLenum plane, const GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3b)(GLbyte red, GLbyte green, GLbyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3d)(GLdouble red, GLdouble green, GLdouble blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3f)(GLfloat red, GLfloat green, GLfloat blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3fVertex3fSUN)(GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3fVertex3fvSUN)(const GLfloat * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3hNV)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3i)(GLint red, GLint green, GLint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3s)(GLshort red, GLshort green, GLshort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3ub)(GLubyte red, GLubyte green, GLubyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3ubv)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3ui)(GLuint red, GLuint green, GLuint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3uiv)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3us)(GLushort red, GLushort green, GLushort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3usv)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3xOES)(GLfixed red, GLfixed green, GLfixed blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor3xvOES)(const GLfixed * components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4b)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4d)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4fNormal3fVertex3fSUN)(GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4fNormal3fVertex3fvSUN)(const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4hNV)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4i)(GLint red, GLint green, GLint blue, GLint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4s)(GLshort red, GLshort green, GLshort blue, GLshort alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex2fSUN)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex2fvSUN)(const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex3fSUN)(GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubVertex3fvSUN)(const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ubv)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4ui)(GLuint red, GLuint green, GLuint blue, GLuint alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4uiv)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4us)(GLushort red, GLushort green, GLushort blue, GLushort alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4usv)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4x)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4xOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColor4xvOES)(const GLfixed * components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFragmentOp1ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFragmentOp2ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorFragmentOp3ATI)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaskIndexedEXT)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaski)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaskiEXT)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaskiOES)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorMaterial)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP3ui)(GLenum type, GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP3uiv)(GLenum type, const GLuint * color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP4ui)(GLenum type, GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorP4uiv)(GLenum type, const GLuint * color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorPointervINTEL)(GLint size, GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorSubTable)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorSubTableEXT)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTable)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableEXT)(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameterfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameterfvSGI)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameteriv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableParameterivSGI)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glColorTableSGI)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameterfNV)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameterfvNV)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameteriNV)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerParameterivNV)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCombinerStageParameterfvNV)(GLenum stage, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCommandListSegmentsNV)(GLuint list, GLuint segments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileCommandListNV)(GLuint list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileShader)(GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileShaderARB)(GLhandleARB shaderObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompileShaderIncludeARB)(GLuint shader, GLsizei count, const GLchar *const* path, const GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexSubImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexSubImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedMultiTexSubImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage3D)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureImage3DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCompressedTextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConservativeRasterParameterfNV)(GLenum pname, GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter1D)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterf)(GLenum target, GLenum pname, GLfloat params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterfEXT)(GLenum target, GLenum pname, GLfloat params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameteri)(GLenum target, GLenum pname, GLint params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameteriEXT)(GLenum target, GLenum pname, GLint params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameteriv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterivEXT)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterxOES)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glConvolutionParameterxvOES)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyBufferSubData)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyBufferSubDataNV)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorSubTable)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorSubTableEXT)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorTable)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyColorTableSGI)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter1D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter1DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter2D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyConvolutionFilter2DEXT)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubData)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubDataEXT)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubDataNV)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyImageSubDataOES)(GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexSubImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexSubImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyMultiTexSubImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyNamedBufferSubData)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyPathNV)(GLuint resultPath, GLuint srcPath); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage1DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexImage2DEXT)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureLevelsAPPLE)(GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCopyTextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverFillPathNV)(GLuint path, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverStrokePathNV)(GLuint path, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageMaskNV)(GLboolean mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageModulationNV)(GLenum components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageModulationTableNV)(GLsizei n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCoverageOperationNV)(GLenum operation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateBuffers)(GLsizei n, GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateCommandListsNV)(GLsizei n, GLuint * lists); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateFramebuffers)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreatePerfQueryINTEL)(GLuint queryId, GLuint * queryHandle); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateProgram)(void); + +extern EPOXY_IMPORTEXPORT GLhandleARB (EPOXY_CALLSPEC *epoxy_glCreateProgramObjectARB)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateProgramPipelines)(GLsizei n, GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateQueries)(GLenum target, GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateRenderbuffers)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateSamplers)(GLsizei n, GLuint * samplers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShader)(GLenum type); + +extern EPOXY_IMPORTEXPORT GLhandleARB (EPOXY_CALLSPEC *epoxy_glCreateShaderObjectARB)(GLenum shaderType); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShaderProgramEXT)(GLenum type, const GLchar * string); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShaderProgramv)(GLenum type, GLsizei count, const GLchar *const* strings); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glCreateShaderProgramvEXT)(GLenum type, GLsizei count, const GLchar ** strings); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateStatesNV)(GLsizei n, GLuint * states); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glCreateSyncFromCLeventARB)(struct _cl_context * context, struct _cl_event * event, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateTextures)(GLenum target, GLsizei n, GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateTransformFeedbacks)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCreateVertexArrays)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCullFace)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCullParameterdvEXT)(GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCullParameterfvEXT)(GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCurrentPaletteMatrixARB)(GLint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glCurrentPaletteMatrixOES)(GLuint matrixpaletteindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallback)(GLDEBUGPROC callback, const void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallbackAMD)(GLDEBUGPROCAMD callback, void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallbackARB)(GLDEBUGPROCARB callback, const void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageCallbackKHR)(GLDEBUGPROCKHR callback, const void * userParam); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageControl)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageControlARB)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageControlKHR)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageEnableAMD)(GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsert)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsertAMD)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsertARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDebugMessageInsertKHR)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeformSGIX)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeformationMap3dSGIX)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeformationMap3fSGIX)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteAsyncMarkersSGIX)(GLuint marker, GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteBuffers)(GLsizei n, const GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteBuffersARB)(GLsizei n, const GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteCommandListsNV)(GLsizei n, const GLuint * lists); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFencesAPPLE)(GLsizei n, const GLuint * fences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFencesNV)(GLsizei n, const GLuint * fences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFragmentShaderATI)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFramebuffers)(GLsizei n, const GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFramebuffersEXT)(GLsizei n, const GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteFramebuffersOES)(GLsizei n, const GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteLists)(GLuint list, GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteNamedStringARB)(GLint namelen, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteNamesAMD)(GLenum identifier, GLuint num, const GLuint * names); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteObjectARB)(GLhandleARB obj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteOcclusionQueriesNV)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeletePathsNV)(GLuint path, GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeletePerfMonitorsAMD)(GLsizei n, GLuint * monitors); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeletePerfQueryINTEL)(GLuint queryHandle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramPipelines)(GLsizei n, const GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramPipelinesEXT)(GLsizei n, const GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramsARB)(GLsizei n, const GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteProgramsNV)(GLsizei n, const GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteQueries)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteQueriesARB)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteQueriesEXT)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteRenderbuffers)(GLsizei n, const GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteRenderbuffersEXT)(GLsizei n, const GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteRenderbuffersOES)(GLsizei n, const GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteSamplers)(GLsizei count, const GLuint * samplers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteShader)(GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteStatesNV)(GLsizei n, const GLuint * states); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteSync)(GLsync sync); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteSyncAPPLE)(GLsync sync); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTextures)(GLsizei n, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTexturesEXT)(GLsizei n, const GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTransformFeedbacks)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteTransformFeedbacksNV)(GLsizei n, const GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexArrays)(GLsizei n, const GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexArraysAPPLE)(GLsizei n, const GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexArraysOES)(GLsizei n, const GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDeleteVertexShaderEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthBoundsEXT)(GLclampd zmin, GLclampd zmax); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthBoundsdNV)(GLdouble zmin, GLdouble zmax); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthFunc)(GLenum func); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthMask)(GLboolean flag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRange)(GLdouble hither, GLdouble yon); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeArrayfvNV)(GLuint first, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeArrayv)(GLuint first, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeIndexed)(GLuint index, GLdouble n, GLdouble f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangeIndexedfNV)(GLuint index, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangedNV)(GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangef)(GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangefOES)(GLclampf n, GLclampf f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangex)(GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDepthRangexOES)(GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDetachObjectARB)(GLhandleARB containerObj, GLhandleARB attachedObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDetachShader)(GLuint program, GLuint shader); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisable)(GLenum cap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableClientState)(GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableClientStateIndexedEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableClientStateiEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableDriverControlQCOM)(GLuint driverControl); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableIndexedEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVariantClientStateEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexArrayAttrib)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexArrayAttribEXT)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexArrayEXT)(GLuint vaobj, GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexAttribAPPLE)(GLuint index, GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexAttribArray)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableVertexAttribArrayARB)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisablei)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableiEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableiNV)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDisableiOES)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDiscardFramebufferEXT)(GLenum target, GLsizei numAttachments, const GLenum * attachments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDispatchCompute)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDispatchComputeGroupSizeARB)(GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDispatchComputeIndirect)(GLintptr indirect); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArrays)(GLenum mode, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysEXT)(GLenum mode, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysIndirect)(GLenum mode, const void * indirect); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstanced)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedANGLE)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedARB)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedBaseInstance)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedBaseInstanceEXT)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedEXT)(GLenum mode, GLint start, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawArraysInstancedNV)(GLenum mode, GLint first, GLsizei count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffer)(GLenum buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffers)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersARB)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersATI)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersEXT)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersIndexedEXT)(GLint n, const GLenum * location, const GLint * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawBuffersNV)(GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsAddressNV)(GLenum primitiveMode, const GLuint64 * indirects, const GLsizei * sizes, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsNV)(GLenum primitiveMode, GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsStatesAddressNV)(const GLuint64 * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawCommandsStatesNV)(GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementArrayAPPLE)(GLenum mode, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementArrayATI)(GLenum mode, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElements)(GLenum mode, GLsizei count, GLenum type, const void * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsBaseVertex)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsBaseVertexEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsBaseVertexOES)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsIndirect)(GLenum mode, GLenum type, const void * indirect); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstanced)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedANGLE)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedARB)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseInstance)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseInstanceEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertex)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexBaseInstance)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedBaseVertexOES)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedEXT)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawElementsInstancedNV)(GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawMeshArraysSUN)(GLenum mode, GLint first, GLsizei count, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawPixels)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementArrayAPPLE)(GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementArrayATI)(GLenum mode, GLuint start, GLuint end, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsBaseVertex)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsBaseVertexEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsBaseVertexOES)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawRangeElementsEXT)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexfOES)(GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexfvOES)(const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexiOES)(GLint x, GLint y, GLint z, GLint width, GLint height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexivOES)(const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexsOES)(GLshort x, GLshort y, GLshort z, GLshort width, GLshort height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexsvOES)(const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTextureNV)(GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexxOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTexxvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedback)(GLenum mode, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackInstanced)(GLenum mode, GLuint id, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackNV)(GLenum mode, GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackStream)(GLenum mode, GLuint id, GLuint stream); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glDrawTransformFeedbackStreamInstanced)(GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEGLImageTargetRenderbufferStorageOES)(GLenum target, GLeglImageOES image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEGLImageTargetTexture2DOES)(GLenum target, GLeglImageOES image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlag)(GLboolean flag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagFormatNV)(GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagPointer)(GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagPointerListIBM)(GLint stride, const GLboolean ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEdgeFlagv)(const GLboolean * flag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glElementPointerAPPLE)(GLenum type, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glElementPointerATI)(GLenum type, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnable)(GLenum cap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableClientState)(GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableClientStateIndexedEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableClientStateiEXT)(GLenum array, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableDriverControlQCOM)(GLuint driverControl); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableIndexedEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVariantClientStateEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexArrayAttrib)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexArrayAttribEXT)(GLuint vaobj, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexArrayEXT)(GLuint vaobj, GLenum array); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexAttribAPPLE)(GLuint index, GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexAttribArray)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableVertexAttribArrayARB)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnablei)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableiEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableiNV)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnableiOES)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEnd)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndConditionalRender)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndConditionalRenderNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndConditionalRenderNVX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndFragmentShaderATI)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndList)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndOcclusionQueryNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndPerfMonitorAMD)(GLuint monitor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndPerfQueryINTEL)(GLuint queryHandle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQuery)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQueryARB)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQueryEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndQueryIndexed)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTilingQCOM)(GLbitfield preserveMask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTransformFeedback)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTransformFeedbackEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndTransformFeedbackNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndVertexShaderEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEndVideoCaptureNV)(GLuint video_capture_slot); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1d)(GLdouble u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1dv)(const GLdouble * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1f)(GLfloat u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1fv)(const GLfloat * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1xOES)(GLfixed u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord1xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2d)(GLdouble u, GLdouble v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2dv)(const GLdouble * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2f)(GLfloat u, GLfloat v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2fv)(const GLfloat * u); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2xOES)(GLfixed u, GLfixed v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalCoord2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalMapsNV)(GLenum target, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalMesh1)(GLenum mode, GLint i1, GLint i2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalMesh2)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalPoint1)(GLint i); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvalPoint2)(GLint i, GLint j); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glEvaluateDepthValuesARB)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetBufferPointervQCOM)(GLenum target, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetBuffersQCOM)(GLuint * buffers, GLint maxBuffers, GLint * numBuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetFramebuffersQCOM)(GLuint * framebuffers, GLint maxFramebuffers, GLint * numFramebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetProgramBinarySourceQCOM)(GLuint program, GLenum shadertype, GLchar * source, GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetProgramsQCOM)(GLuint * programs, GLint maxPrograms, GLint * numPrograms); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetRenderbuffersQCOM)(GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetShadersQCOM)(GLuint * shaders, GLint maxShaders, GLint * numShaders); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetTexLevelParameterivQCOM)(GLuint texture, GLenum face, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetTexSubImageQCOM)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void * texels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtGetTexturesQCOM)(GLuint * textures, GLint maxTextures, GLint * numTextures); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glExtIsProgramBinaryQCOM)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtTexObjectStateOverrideiQCOM)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glExtractComponentEXT)(GLuint res, GLuint src, GLuint num); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFeedbackBuffer)(GLsizei size, GLenum type, GLfloat * buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFeedbackBufferxOES)(GLsizei n, GLenum type, const GLfixed * buffer); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glFenceSync)(GLenum condition, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glFenceSyncAPPLE)(GLenum condition, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinish)(void); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glFinishAsyncSGIX)(GLuint * markerp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishFenceNV)(GLuint fence); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishObjectAPPLE)(GLenum object, GLint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFinishTextureSUNX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlush)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedBufferRangeAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushMappedNamedBufferRangeEXT)(GLuint buffer, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushPixelDataRangeNV)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushRasterSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushStaticDataIBM)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushVertexArrayRangeAPPLE)(GLsizei length, void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFlushVertexArrayRangeNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordFormatNV)(GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordPointer)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordPointerEXT)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordPointerListIBM)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordd)(GLdouble coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoorddEXT)(GLdouble coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoorddv)(const GLdouble * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoorddvEXT)(const GLdouble * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordf)(GLfloat coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordfEXT)(GLfloat coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordfv)(const GLfloat * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordfvEXT)(const GLfloat * coord); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordhNV)(GLhalfNV fog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogCoordhvNV)(const GLhalfNV * fog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogFuncSGIS)(GLsizei n, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogfv)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogi)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogiv)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogx)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogxv)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFogxvOES)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentColorMaterialSGIX)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentCoverageColorNV)(GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModelfSGIX)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModeliSGIX)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightModelivSGIX)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightiSGIX)(GLenum light, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrameTerminatorGREMEDY)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrameZoomSGIX)(GLint factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferDrawBufferEXT)(GLuint framebuffer, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferDrawBuffersEXT)(GLuint framebuffer, GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferParameteri)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferReadBufferEXT)(GLuint framebuffer, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferRenderbufferEXT)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferRenderbufferOES)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferSampleLocationsfvARB)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferSampleLocationsfvNV)(GLenum target, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture1D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture1DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DMultisampleEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DMultisampleIMG)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture2DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture3D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture3DEXT)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTexture3DOES)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureARB)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureFaceARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureFaceEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureLayer)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureLayerARB)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureLayerEXT)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureMultiviewOVR)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFramebufferTextureOES)(GLenum target, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFreeObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrontFace)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustum)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumf)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumfOES)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumx)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glFrustumxOES)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenAsyncMarkersSGIX)(GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenBuffers)(GLsizei n, GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenBuffersARB)(GLsizei n, GLuint * buffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFencesAPPLE)(GLsizei n, GLuint * fences); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFencesNV)(GLsizei n, GLuint * fences); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenFragmentShadersATI)(GLuint range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFramebuffers)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFramebuffersEXT)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenFramebuffersOES)(GLsizei n, GLuint * framebuffers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenLists)(GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenNamesAMD)(GLenum identifier, GLuint num, GLuint * names); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenOcclusionQueriesNV)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenPathsNV)(GLsizei range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenPerfMonitorsAMD)(GLsizei n, GLuint * monitors); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramPipelines)(GLsizei n, GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramPipelinesEXT)(GLsizei n, GLuint * pipelines); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramsARB)(GLsizei n, GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenProgramsNV)(GLsizei n, GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenQueries)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenQueriesARB)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenQueriesEXT)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenRenderbuffers)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenRenderbuffersEXT)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenRenderbuffersOES)(GLsizei n, GLuint * renderbuffers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenSamplers)(GLsizei count, GLuint * samplers); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenSymbolsEXT)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTextures)(GLsizei n, GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTexturesEXT)(GLsizei n, GLuint * textures); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTransformFeedbacks)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenTransformFeedbacksNV)(GLsizei n, GLuint * ids); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenVertexArrays)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenVertexArraysAPPLE)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenVertexArraysOES)(GLsizei n, GLuint * arrays); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGenVertexShadersEXT)(GLuint range); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMipmap)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMipmapEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMipmapOES)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateMultiTexMipmapEXT)(GLenum texunit, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateTextureMipmap)(GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGenerateTextureMipmapEXT)(GLuint texture, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveAtomicCounterBufferiv)(GLuint program, GLuint bufferIndex, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveAttrib)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveAttribARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveSubroutineName)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveSubroutineUniformName)(GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveSubroutineUniformiv)(GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniform)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformARB)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformBlockName)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformBlockiv)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformName)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveUniformsiv)(GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetActiveVaryingNV)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetArrayObjectfvATI)(GLenum array, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetArrayObjectivATI)(GLenum array, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetAttachedObjectsARB)(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetAttachedShaders)(GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetAttribLocation)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetAttribLocationARB)(GLhandleARB programObj, const GLcharARB * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBooleanIndexedvEXT)(GLenum target, GLuint index, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBooleani_v)(GLenum target, GLuint index, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBooleanv)(GLenum pname, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameteri64v)(GLenum target, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferParameterui64vNV)(GLenum target, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferPointerv)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferPointervARB)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferPointervOES)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferSubData)(GLenum target, GLintptr offset, GLsizeiptr size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlane)(GLenum plane, GLdouble * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanef)(GLenum plane, GLfloat * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanefOES)(GLenum plane, GLfloat * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanex)(GLenum plane, GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetClipPlanexOES)(GLenum plane, GLfixed * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTable)(GLenum target, GLenum format, GLenum type, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableEXT)(GLenum target, GLenum format, GLenum type, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetColorTableSGI)(GLenum target, GLenum format, GLenum type, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCombinerStageParameterfvNV)(GLenum stage, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetCommandHeaderNV)(GLenum tokenID, GLuint size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedMultiTexImageEXT)(GLenum texunit, GLenum target, GLint lod, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTexImage)(GLenum target, GLint level, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTexImageARB)(GLenum target, GLint level, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTextureImage)(GLuint texture, GLint level, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTextureImageEXT)(GLuint texture, GLenum target, GLint lod, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCompressedTextureSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionFilter)(GLenum target, GLenum format, GLenum type, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetConvolutionParameterxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetCoverageModulationTableNV)(GLsizei bufsize, GLfloat * v); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLog)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLogAMD)(GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLogARB)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetDebugMessageLogKHR)(GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDetailTexFuncSGIS)(GLenum target, GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoubleIndexedvEXT)(GLenum target, GLuint index, GLdouble * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoublei_v)(GLenum target, GLuint index, GLdouble * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoublei_vEXT)(GLenum pname, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDoublev)(GLenum pname, GLdouble * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDriverControlStringQCOM)(GLuint driverControl, GLsizei bufSize, GLsizei * length, GLchar * driverControlString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetDriverControlsQCOM)(GLint * num, GLsizei size, GLuint * driverControls); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetError)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFenceivNV)(GLuint fence, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFirstPerfQueryIdINTEL)(GLuint * queryId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFixedv)(GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFixedvOES)(GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloatIndexedvEXT)(GLenum target, GLuint index, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloati_v)(GLenum target, GLuint index, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloati_vEXT)(GLenum pname, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloati_vNV)(GLenum target, GLuint index, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFloatv)(GLenum pname, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFogFuncSGIS)(GLfloat * points); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataIndex)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataIndexEXT)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataLocation)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetFragDataLocationEXT)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferAttachmentParameterivEXT)(GLenum target, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferAttachmentParameterivOES)(GLenum target, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetFramebufferParameterivEXT)(GLuint framebuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatus)(void); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatusARB)(void); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatusEXT)(void); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glGetGraphicsResetStatusKHR)(void); + +extern EPOXY_IMPORTEXPORT GLhandleARB (EPOXY_CALLSPEC *epoxy_glGetHandleARB)(GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogram)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetHistogramParameterxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetImageHandleARB)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetImageHandleNV)(GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetImageTransformParameterfvHP)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetImageTransformParameterivHP)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInfoLogARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetInstrumentsSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInteger64i_v)(GLenum target, GLuint index, GLint64 * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInteger64v)(GLenum pname, GLint64 * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInteger64vAPPLE)(GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerIndexedvEXT)(GLenum target, GLuint index, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegeri_v)(GLenum target, GLuint index, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegeri_vEXT)(GLenum target, GLuint index, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerui64i_vNV)(GLenum value, GLuint index, GLuint64EXT * result); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerui64vNV)(GLenum value, GLuint64EXT * result); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetIntegerv)(GLenum pname, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInternalformatSampleivNV)(GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInternalformati64v)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInternalformativ)(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInvariantBooleanvEXT)(GLuint id, GLenum value, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInvariantFloatvEXT)(GLuint id, GLenum value, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetInvariantIntegervEXT)(GLuint id, GLenum value, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightfv)(GLenum light, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightiv)(GLenum light, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightxOES)(GLenum light, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightxv)(GLenum light, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLightxvOES)(GLenum light, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLocalConstantBooleanvEXT)(GLuint id, GLenum value, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLocalConstantFloatvEXT)(GLuint id, GLenum value, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetLocalConstantIntegervEXT)(GLuint id, GLenum value, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapAttribParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapAttribParameterivNV)(GLenum target, GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapControlPointsNV)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapParameterfvNV)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapParameterivNV)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapdv)(GLenum target, GLenum query, GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapfv)(GLenum target, GLenum query, GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapiv)(GLenum target, GLenum query, GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMapxvOES)(GLenum target, GLenum query, GLfixed * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialfv)(GLenum face, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialiv)(GLenum face, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialxOES)(GLenum face, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialxv)(GLenum face, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMaterialxvOES)(GLenum face, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexEnvfvEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexEnvivEXT)(GLenum texunit, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexGendvEXT)(GLenum texunit, GLenum coord, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexGenfvEXT)(GLenum texunit, GLenum coord, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexGenivEXT)(GLenum texunit, GLenum coord, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexImageEXT)(GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexLevelParameterfvEXT)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexLevelParameterivEXT)(GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterIivEXT)(GLenum texunit, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterIuivEXT)(GLenum texunit, GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterfvEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultiTexParameterivEXT)(GLenum texunit, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultisamplefv)(GLenum pname, GLuint index, GLfloat * val); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetMultisamplefvNV)(GLenum pname, GLuint index, GLfloat * val); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameteri64v)(GLuint buffer, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameteriv)(GLuint buffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameterivEXT)(GLuint buffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferParameterui64vNV)(GLuint buffer, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferPointerv)(GLuint buffer, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferPointervEXT)(GLuint buffer, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedBufferSubDataEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferAttachmentParameteriv)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferAttachmentParameterivEXT)(GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferParameteriv)(GLuint framebuffer, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedFramebufferParameterivEXT)(GLuint framebuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterIivEXT)(GLuint program, GLenum target, GLuint index, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterIuivEXT)(GLuint program, GLenum target, GLuint index, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterdvEXT)(GLuint program, GLenum target, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramLocalParameterfvEXT)(GLuint program, GLenum target, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramStringEXT)(GLuint program, GLenum target, GLenum pname, void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedProgramivEXT)(GLuint program, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedRenderbufferParameteriv)(GLuint renderbuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedRenderbufferParameterivEXT)(GLuint renderbuffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedStringARB)(GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNamedStringivARB)(GLint namelen, const GLchar * name, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetNextPerfQueryIdINTEL)(GLuint queryId, GLuint * nextQueryId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectBufferfvATI)(GLuint buffer, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectBufferivATI)(GLuint buffer, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectLabel)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectLabelEXT)(GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectParameterfvARB)(GLhandleARB obj, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectParameterivAPPLE)(GLenum objectType, GLuint name, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectParameterivARB)(GLhandleARB obj, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectPtrLabel)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetObjectPtrLabelKHR)(const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetOcclusionQueryivNV)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetOcclusionQueryuivNV)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathColorGenfvNV)(GLenum color, GLenum pname, GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathColorGenivNV)(GLenum color, GLenum pname, GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathCommandsNV)(GLuint path, GLubyte * commands); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathCoordsNV)(GLuint path, GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathDashArrayNV)(GLuint path, GLfloat * dashArray); + +extern EPOXY_IMPORTEXPORT GLfloat (EPOXY_CALLSPEC *epoxy_glGetPathLengthNV)(GLuint path, GLsizei startSegment, GLsizei numSegments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathMetricRangeNV)(GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathMetricsNV)(GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathParameterfvNV)(GLuint path, GLenum pname, GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathParameterivNV)(GLuint path, GLenum pname, GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathSpacingNV)(GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathTexGenfvNV)(GLenum texCoordSet, GLenum pname, GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPathTexGenivNV)(GLenum texCoordSet, GLenum pname, GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfCounterInfoINTEL)(GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCounterDataAMD)(GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCounterInfoAMD)(GLuint group, GLuint counter, GLenum pname, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCounterStringAMD)(GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorCountersAMD)(GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorGroupStringAMD)(GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfMonitorGroupsAMD)(GLint * numGroups, GLsizei groupsSize, GLuint * groups); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfQueryDataINTEL)(GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfQueryIdByNameINTEL)(GLchar * queryName, GLuint * queryId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPerfQueryInfoINTEL)(GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapfv)(GLenum map, GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapuiv)(GLenum map, GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapusv)(GLenum map, GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelMapxv)(GLenum map, GLint size, GLfixed * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTransformParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPixelTransformParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointerIndexedvEXT)(GLenum target, GLuint index, void ** data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointeri_vEXT)(GLenum pname, GLuint index, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointerv)(GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointervEXT)(GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPointervKHR)(GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetPolygonStipple)(GLubyte * mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramBinary)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramBinaryOES)(GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterIivNV)(GLenum target, GLuint index, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterIuivNV)(GLenum target, GLuint index, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramInfoLog)(GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramInterfaceiv)(GLuint program, GLenum programInterface, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterIivNV)(GLenum target, GLuint index, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterIuivNV)(GLenum target, GLuint index, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineInfoLog)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineInfoLogEXT)(GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineiv)(GLuint pipeline, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramPipelineivEXT)(GLuint pipeline, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceIndex)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceLocation)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceLocationIndex)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetProgramResourceLocationIndexEXT)(GLuint program, GLenum programInterface, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramResourceName)(GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramResourcefvNV)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramResourceiv)(GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramStageiv)(GLuint program, GLenum shadertype, GLenum pname, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramStringARB)(GLenum target, GLenum pname, void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramSubroutineParameteruivNV)(GLenum target, GLuint index, GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramiv)(GLuint program, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramivARB)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetProgramivNV)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjecti64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjectiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjectui64v)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryBufferObjectuiv)(GLuint id, GLuint buffer, GLenum pname, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryIndexediv)(GLenum target, GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjecti64v)(GLuint id, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjecti64vEXT)(GLuint id, GLenum pname, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectiv)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectivEXT)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectui64v)(GLuint id, GLenum pname, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectui64vEXT)(GLuint id, GLenum pname, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectuiv)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryObjectuivEXT)(GLuint id, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryiv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryivARB)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetQueryivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetRenderbufferParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetRenderbufferParameterivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetRenderbufferParameterivOES)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIiv)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIivEXT)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIivOES)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIuiv)(GLuint sampler, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterIuivOES)(GLuint sampler, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameterfv)(GLuint sampler, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSamplerParameteriv)(GLuint sampler, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSeparableFilter)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, void * row, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderInfoLog)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderPrecisionFormat)(GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderSource)(GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderSourceARB)(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetShaderiv)(GLuint shader, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSharpenTexFuncSGIS)(GLenum target, GLfloat * points); + +extern EPOXY_IMPORTEXPORT GLushort (EPOXY_CALLSPEC *epoxy_glGetStageIndexNV)(GLenum shadertype); + +extern EPOXY_IMPORTEXPORT const GLubyte * (EPOXY_CALLSPEC *epoxy_glGetString)(GLenum name); + +extern EPOXY_IMPORTEXPORT const GLubyte * (EPOXY_CALLSPEC *epoxy_glGetStringi)(GLenum name, GLuint index); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetSubroutineIndex)(GLuint program, GLenum shadertype, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetSubroutineUniformLocation)(GLuint program, GLenum shadertype, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSynciv)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetSyncivAPPLE)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexBumpParameterfvATI)(GLenum pname, GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexBumpParameterivATI)(GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnvfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnviv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnvxv)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexEnvxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGendv)(GLenum coord, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenfv)(GLenum coord, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenfvOES)(GLenum coord, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGeniv)(GLenum coord, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenivOES)(GLenum coord, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexGenxvOES)(GLenum coord, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexImage)(GLenum target, GLint level, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexLevelParameterfv)(GLenum target, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexLevelParameterxvOES)(GLenum target, GLint level, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIiv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIivEXT)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIivOES)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIuiv)(GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIuivEXT)(GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterIuivOES)(GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterPointervAPPLE)(GLenum target, GLenum pname, void ** params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterfv)(GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameteriv)(GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterxv)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTexParameterxvOES)(GLenum target, GLenum pname, GLfixed * params); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureHandleARB)(GLuint texture); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureHandleNV)(GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureImage)(GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureImageEXT)(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameterfv)(GLuint texture, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameterfvEXT)(GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameteriv)(GLuint texture, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureLevelParameterivEXT)(GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIiv)(GLuint texture, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIivEXT)(GLuint texture, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIuiv)(GLuint texture, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterIuivEXT)(GLuint texture, GLenum target, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterfv)(GLuint texture, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterfvEXT)(GLuint texture, GLenum target, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameteriv)(GLuint texture, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureParameterivEXT)(GLuint texture, GLenum target, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureSamplerHandleARB)(GLuint texture, GLuint sampler); + +extern EPOXY_IMPORTEXPORT GLuint64 (EPOXY_CALLSPEC *epoxy_glGetTextureSamplerHandleNV)(GLuint texture, GLuint sampler); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTextureSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackVarying)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackVaryingEXT)(GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackVaryingNV)(GLuint program, GLuint index, GLint * location); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbacki64_v)(GLuint xfb, GLenum pname, GLuint index, GLint64 * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbacki_v)(GLuint xfb, GLenum pname, GLuint index, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTransformFeedbackiv)(GLuint xfb, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetTranslatedShaderSourceANGLE)(GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glGetUniformBlockIndex)(GLuint program, const GLchar * uniformBlockName); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetUniformBufferSizeEXT)(GLuint program, GLint location); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformIndices)(GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetUniformLocation)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetUniformLocationARB)(GLhandleARB programObj, const GLcharARB * name); + +extern EPOXY_IMPORTEXPORT GLintptr (EPOXY_CALLSPEC *epoxy_glGetUniformOffsetEXT)(GLuint program, GLint location); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformSubroutineuiv)(GLenum shadertype, GLint location, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformdv)(GLuint program, GLint location, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformfv)(GLuint program, GLint location, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformfvARB)(GLhandleARB programObj, GLint location, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformi64vARB)(GLuint program, GLint location, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformi64vNV)(GLuint program, GLint location, GLint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformiv)(GLuint program, GLint location, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformivARB)(GLhandleARB programObj, GLint location, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformui64vARB)(GLuint program, GLint location, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformui64vNV)(GLuint program, GLint location, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformuiv)(GLuint program, GLint location, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetUniformuivEXT)(GLuint program, GLint location, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantArrayObjectfvATI)(GLuint id, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantArrayObjectivATI)(GLuint id, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantBooleanvEXT)(GLuint id, GLenum value, GLboolean * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantFloatvEXT)(GLuint id, GLenum value, GLfloat * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantIntegervEXT)(GLuint id, GLenum value, GLint * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVariantPointervEXT)(GLuint id, GLenum value, void ** data); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glGetVaryingLocationNV)(GLuint program, const GLchar * name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIndexed64iv)(GLuint vaobj, GLuint index, GLenum pname, GLint64 * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIndexediv)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIntegeri_vEXT)(GLuint vaobj, GLuint index, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayIntegervEXT)(GLuint vaobj, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayPointeri_vEXT)(GLuint vaobj, GLuint index, GLenum pname, void ** param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayPointervEXT)(GLuint vaobj, GLenum pname, void ** param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexArrayiv)(GLuint vaobj, GLenum pname, GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribArrayObjectfvATI)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribArrayObjectivATI)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIiv)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIivEXT)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIuiv)(GLuint index, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribIuivEXT)(GLuint index, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLdv)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLdvEXT)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLi64vNV)(GLuint index, GLenum pname, GLint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLui64vARB)(GLuint index, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribLui64vNV)(GLuint index, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribPointerv)(GLuint index, GLenum pname, void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribPointervARB)(GLuint index, GLenum pname, void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribPointervNV)(GLuint index, GLenum pname, void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribdv)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribdvARB)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribfv)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribfvARB)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribiv)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribivARB)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureStreamdvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureStreamfvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureStreamivNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoCaptureivNV)(GLuint video_capture_slot, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoi64vNV)(GLuint video_slot, GLenum pname, GLint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoivNV)(GLuint video_slot, GLenum pname, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideoui64vNV)(GLuint video_slot, GLenum pname, GLuint64EXT * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetVideouivNV)(GLuint video_slot, GLenum pname, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnColorTable)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnColorTableARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnCompressedTexImage)(GLenum target, GLint lod, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnCompressedTexImageARB)(GLenum target, GLint lod, GLsizei bufSize, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnConvolutionFilter)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnConvolutionFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnHistogram)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnHistogramARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapdv)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapdvARB)(GLenum target, GLenum query, GLsizei bufSize, GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapfv)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapfvARB)(GLenum target, GLenum query, GLsizei bufSize, GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapiv)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMapivARB)(GLenum target, GLenum query, GLsizei bufSize, GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnMinmaxARB)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapfv)(GLenum map, GLsizei bufSize, GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapfvARB)(GLenum map, GLsizei bufSize, GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapuiv)(GLenum map, GLsizei bufSize, GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapuivARB)(GLenum map, GLsizei bufSize, GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapusv)(GLenum map, GLsizei bufSize, GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPixelMapusvARB)(GLenum map, GLsizei bufSize, GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPolygonStipple)(GLsizei bufSize, GLubyte * pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnPolygonStippleARB)(GLsizei bufSize, GLubyte * pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnSeparableFilter)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnSeparableFilterARB)(GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnTexImage)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnTexImageARB)(GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformdv)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformdvARB)(GLuint program, GLint location, GLsizei bufSize, GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfv)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfvARB)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfvEXT)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformfvKHR)(GLuint program, GLint location, GLsizei bufSize, GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformi64vARB)(GLuint program, GLint location, GLsizei bufSize, GLint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformiv)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformivARB)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformivEXT)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformivKHR)(GLuint program, GLint location, GLsizei bufSize, GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformui64vARB)(GLuint program, GLint location, GLsizei bufSize, GLuint64 * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformuiv)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformuivARB)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGetnUniformuivKHR)(GLuint program, GLint location, GLsizei bufSize, GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorbSUN)(GLbyte factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactordSUN)(GLdouble factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorfSUN)(GLfloat factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactoriSUN)(GLint factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorsSUN)(GLshort factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorubSUN)(GLubyte factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactoruiSUN)(GLuint factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glGlobalAlphaFactorusSUN)(GLushort factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHint)(GLenum target, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHintPGI)(GLenum target, GLint mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHistogram)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glHistogramEXT)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIglooInterfaceSGIX)(GLenum pname, const void * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameterfHP)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameterfvHP)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameteriHP)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glImageTransformParameterivHP)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT GLsync (EPOXY_CALLSPEC *epoxy_glImportSyncEXT)(GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexFormatNV)(GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexFuncEXT)(GLenum func, GLclampf ref); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexMask)(GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexMaterialEXT)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexPointer)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexPointerListIBM)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexd)(GLdouble c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexdv)(const GLdouble * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexf)(GLfloat c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexfv)(const GLfloat * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexi)(GLint c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexiv)(const GLint * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexs)(GLshort c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexsv)(const GLshort * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexub)(GLubyte c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexubv)(const GLubyte * c); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexxOES)(GLfixed component); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glIndexxvOES)(const GLfixed * component); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInitNames)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInsertComponentEXT)(GLuint res, GLuint src, GLuint num); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInsertEventMarkerEXT)(GLsizei length, const GLchar * marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInstrumentsBufferSGIX)(GLsizei size, GLint * buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInterleavedArrays)(GLenum format, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInterpolatePathsNV)(GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateBufferData)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateNamedFramebufferData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateNamedFramebufferSubData)(GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateSubFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateTexImage)(GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glInvalidateTexSubImage)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsAsyncMarkerSGIX)(GLuint marker); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsBuffer)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsBufferARB)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsBufferResidentNV)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsCommandListNV)(GLuint list); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnabled)(GLenum cap); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnabledIndexedEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnabledi)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnablediEXT)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnablediNV)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsEnablediOES)(GLenum target, GLuint index); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFenceNV)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFramebuffer)(GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFramebufferEXT)(GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsFramebufferOES)(GLuint framebuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsImageHandleResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsImageHandleResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsList)(GLuint list); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsNameAMD)(GLenum identifier, GLuint name); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsNamedBufferResidentNV)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsNamedStringARB)(GLint namelen, const GLchar * name); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsOcclusionQueryNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsPathNV)(GLuint path); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsPointInFillPathNV)(GLuint path, GLuint mask, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsPointInStrokePathNV)(GLuint path, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramARB)(GLuint program); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramPipeline)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsProgramPipelineEXT)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsQuery)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsQueryARB)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsQueryEXT)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsRenderbuffer)(GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsRenderbufferEXT)(GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsRenderbufferOES)(GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsSampler)(GLuint sampler); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsShader)(GLuint shader); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsStateNV)(GLuint state); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsSync)(GLsync sync); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsSyncAPPLE)(GLsync sync); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTexture)(GLuint texture); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTextureEXT)(GLuint texture); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTextureHandleResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTextureHandleResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTransformFeedback)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsTransformFeedbackNV)(GLuint id); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVariantEnabledEXT)(GLuint id, GLenum cap); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexArray)(GLuint array); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexArrayAPPLE)(GLuint array); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexArrayOES)(GLuint array); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glIsVertexAttribEnabledAPPLE)(GLuint index, GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLabelObjectEXT)(GLenum type, GLuint object, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightEnviSGIX)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelfv)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModeli)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModeliv)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelx)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelxv)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightModelxvOES)(GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightf)(GLenum light, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightfv)(GLenum light, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLighti)(GLenum light, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightiv)(GLenum light, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightx)(GLenum light, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightxOES)(GLenum light, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightxv)(GLenum light, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLightxvOES)(GLenum light, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineStipple)(GLint factor, GLushort pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineWidth)(GLfloat width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineWidthx)(GLfixed width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLineWidthxOES)(GLfixed width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLinkProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLinkProgramARB)(GLhandleARB programObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListBase)(GLuint base); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListDrawCommandsStatesClientNV)(GLuint list, GLuint segment, const void ** indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameteriSGIX)(GLuint list, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadIdentity)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadIdentityDeformationMapSGIX)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixx)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadName)(GLuint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadPaletteFromModelViewMatrixOES)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixdARB)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixfARB)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLoadTransposeMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLockArraysEXT)(GLint first, GLsizei count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glLogicOp)(GLenum opcode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeBufferNonResidentNV)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeBufferResidentNV)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleNonResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleNonResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleResidentARB)(GLuint64 handle, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeImageHandleResidentNV)(GLuint64 handle, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeNamedBufferNonResidentNV)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeNamedBufferResidentNV)(GLuint buffer, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleNonResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleNonResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleResidentARB)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMakeTextureHandleResidentNV)(GLuint64 handle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap1d)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap1f)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap1xOES)(GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap2d)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap2f)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMap2xOES)(GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBuffer)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferARB)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferOES)(GLenum target, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferRange)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapBufferRangeEXT)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapControlPointsNV)(GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid1d)(GLint un, GLdouble u1, GLdouble u2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid1f)(GLint un, GLfloat u1, GLfloat u2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid1xOES)(GLint n, GLfixed u1, GLfixed u2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid2d)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid2f)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapGrid2xOES)(GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBuffer)(GLuint buffer, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBufferEXT)(GLuint buffer, GLenum access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBufferRange)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapNamedBufferRangeEXT)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapParameterfvNV)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapParameterivNV)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_glMapTexture2DINTEL)(GLuint texture, GLint level, GLbitfield access, GLint * stride, GLenum * layout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib1dAPPLE)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib1fAPPLE)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib2dAPPLE)(GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMapVertexAttrib2fAPPLE)(GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialf)(GLenum face, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialfv)(GLenum face, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMateriali)(GLenum face, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialiv)(GLenum face, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialx)(GLenum face, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialxOES)(GLenum face, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialxv)(GLenum face, GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaterialxvOES)(GLenum face, GLenum pname, const GLfixed * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixFrustumEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexPointerARB)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexPointerOES)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexubvARB)(GLint size, const GLubyte * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexuivARB)(GLint size, const GLuint * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixIndexusvARB)(GLint size, const GLushort * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoad3x2fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoad3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadIdentityEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadTranspose3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadTransposedEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadTransposefEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoaddEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixLoadfEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMode)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMult3x2fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMult3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultTranspose3x3fNV)(GLenum matrixMode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultTransposedEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultTransposefEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultdEXT)(GLenum mode, const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixMultfEXT)(GLenum mode, const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixOrthoEXT)(GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixPopEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixPushEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixRotatedEXT)(GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixRotatefEXT)(GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixScaledEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixScalefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixTranslatedEXT)(GLenum mode, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMatrixTranslatefEXT)(GLenum mode, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMaxShaderCompilerThreadsARB)(GLuint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMemoryBarrier)(GLbitfield barriers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMemoryBarrierByRegion)(GLbitfield barriers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMemoryBarrierEXT)(GLbitfield barriers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinSampleShading)(GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinSampleShadingARB)(GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinSampleShadingOES)(GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinmax)(GLenum target, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMinmaxEXT)(GLenum target, GLenum internalformat, GLboolean sink); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixx)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixd)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixdARB)(const GLdouble * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixf)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixfARB)(const GLfloat * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultTransposeMatrixxOES)(const GLfixed * m); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArrays)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysEXT)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirect)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectAMD)(GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectBindlessCountNV)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectBindlessNV)(GLenum mode, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectCountARB)(GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawArraysIndirectEXT)(GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementArrayAPPLE)(GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElements)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsBaseVertex)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsBaseVertexEXT)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsBaseVertexOES)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirect)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectAMD)(GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectBindlessCountNV)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectBindlessNV)(GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectCountARB)(GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawElementsIndirectEXT)(GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiDrawRangeElementArrayAPPLE)(GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, GLint modestride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexBufferEXT)(GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1bOES)(GLenum texture, GLbyte s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1d)(GLenum target, GLdouble s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1dARB)(GLenum target, GLdouble s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1f)(GLenum target, GLfloat s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1fARB)(GLenum target, GLfloat s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1hNV)(GLenum target, GLhalfNV s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1i)(GLenum target, GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1iARB)(GLenum target, GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1s)(GLenum target, GLshort s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1sARB)(GLenum target, GLshort s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1xOES)(GLenum texture, GLfixed s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord1xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2bOES)(GLenum texture, GLbyte s, GLbyte t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2d)(GLenum target, GLdouble s, GLdouble t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2dARB)(GLenum target, GLdouble s, GLdouble t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2f)(GLenum target, GLfloat s, GLfloat t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2hNV)(GLenum target, GLhalfNV s, GLhalfNV t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2i)(GLenum target, GLint s, GLint t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2iARB)(GLenum target, GLint s, GLint t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2s)(GLenum target, GLshort s, GLshort t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2sARB)(GLenum target, GLshort s, GLshort t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2xOES)(GLenum texture, GLfixed s, GLfixed t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord2xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3bOES)(GLenum texture, GLbyte s, GLbyte t, GLbyte r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3d)(GLenum target, GLdouble s, GLdouble t, GLdouble r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3f)(GLenum target, GLfloat s, GLfloat t, GLfloat r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3hNV)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3i)(GLenum target, GLint s, GLint t, GLint r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3s)(GLenum target, GLshort s, GLshort t, GLshort r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3sARB)(GLenum target, GLshort s, GLshort t, GLshort r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3xOES)(GLenum texture, GLfixed s, GLfixed t, GLfixed r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord3xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4bOES)(GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4bvOES)(GLenum texture, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4d)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4dv)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4dvARB)(GLenum target, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4f)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4fv)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4fvARB)(GLenum target, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4hNV)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4hvNV)(GLenum target, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4i)(GLenum target, GLint s, GLint t, GLint r, GLint q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4iv)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4ivARB)(GLenum target, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4s)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4sARB)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4sv)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4svARB)(GLenum target, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4x)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4xOES)(GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoord4xvOES)(GLenum texture, const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP1ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP1uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP2ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP2uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP3ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP3uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP4ui)(GLenum texture, GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordP4uiv)(GLenum texture, GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexCoordPointerEXT)(GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnvfEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnvfvEXT)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnviEXT)(GLenum texunit, GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexEnvivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGendEXT)(GLenum texunit, GLenum coord, GLenum pname, GLdouble param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGendvEXT)(GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGenfEXT)(GLenum texunit, GLenum coord, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGenfvEXT)(GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGeniEXT)(GLenum texunit, GLenum coord, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexGenivEXT)(GLenum texunit, GLenum coord, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterIivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterIuivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterfEXT)(GLenum texunit, GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterfvEXT)(GLenum texunit, GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameteriEXT)(GLenum texunit, GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexParameterivEXT)(GLenum texunit, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexRenderbufferEXT)(GLenum texunit, GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexSubImage1DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexSubImage2DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glMultiTexSubImage3DEXT)(GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferData)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferDataEXT)(GLuint buffer, GLsizeiptr size, const void * data, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferPageCommitmentARB)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferPageCommitmentEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferStorage)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferStorageEXT)(GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferSubData)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedBufferSubDataEXT)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedCopyBufferSubDataEXT)(GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferDrawBuffer)(GLuint framebuffer, GLenum buf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferDrawBuffers)(GLuint framebuffer, GLsizei n, const GLenum * bufs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferParameteri)(GLuint framebuffer, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferParameteriEXT)(GLuint framebuffer, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferReadBuffer)(GLuint framebuffer, GLenum src); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferRenderbuffer)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferRenderbufferEXT)(GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferSampleLocationsfvARB)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferSampleLocationsfvNV)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture1DEXT)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture2DEXT)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTexture3DEXT)(GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureEXT)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureFaceEXT)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureLayer)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedFramebufferTextureLayerEXT)(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4dEXT)(GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4dvEXT)(GLuint program, GLenum target, GLuint index, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4fEXT)(GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameter4fvEXT)(GLuint program, GLenum target, GLuint index, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4iEXT)(GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4ivEXT)(GLuint program, GLenum target, GLuint index, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4uiEXT)(GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameterI4uivEXT)(GLuint program, GLenum target, GLuint index, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParameters4fvEXT)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParametersI4ivEXT)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramLocalParametersI4uivEXT)(GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedProgramStringEXT)(GLuint program, GLenum target, GLenum format, GLsizei len, const void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorage)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageEXT)(GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageMultisample)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT)(GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedRenderbufferStorageMultisampleEXT)(GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNamedStringARB)(GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNewList)(GLuint list, GLenum mode); + +extern EPOXY_IMPORTEXPORT GLuint (EPOXY_CALLSPEC *epoxy_glNewObjectBufferATI)(GLsizei size, const void * pointer, GLenum usage); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3b)(GLbyte nx, GLbyte ny, GLbyte nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3d)(GLdouble nx, GLdouble ny, GLdouble nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3f)(GLfloat nx, GLfloat ny, GLfloat nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3fVertex3fSUN)(GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3fVertex3fvSUN)(const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3hNV)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3i)(GLint nx, GLint ny, GLint nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3s)(GLshort nx, GLshort ny, GLshort nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3x)(GLfixed nx, GLfixed ny, GLfixed nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3xOES)(GLfixed nx, GLfixed ny, GLfixed nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormal3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalFormatNV)(GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalP3ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalP3uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointer)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointerListIBM)(GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalPointervINTEL)(GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3bATI)(GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3bvATI)(GLenum stream, const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3dATI)(GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3fATI)(GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3iATI)(GLenum stream, GLint nx, GLint ny, GLint nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3sATI)(GLenum stream, GLshort nx, GLshort ny, GLshort nz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glNormalStream3svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectLabel)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectLabelKHR)(GLenum identifier, GLuint name, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectPtrLabel)(const void * ptr, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glObjectPtrLabelKHR)(const void * ptr, GLsizei length, const GLchar * label); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glObjectPurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glObjectUnpurgeableAPPLE)(GLenum objectType, GLuint name, GLenum option); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrtho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthof)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthofOES)(GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthox)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glOrthoxOES)(GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPNTrianglesfATI)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPNTrianglesiATI)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPassTexCoordATI)(GLuint dst, GLuint coord, GLenum swizzle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPassThrough)(GLfloat token); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPassThroughxOES)(GLfixed token); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameterfv)(GLenum pname, const GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameteri)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameteriEXT)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPatchParameteriOES)(GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathColorGenNV)(GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathCommandsNV)(GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathCoordsNV)(GLuint path, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathCoverDepthFuncNV)(GLenum func); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathDashArrayNV)(GLuint path, GLsizei dashCount, const GLfloat * dashArray); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathFogGenNV)(GLenum genMode); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glPathGlyphIndexArrayNV)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glPathGlyphIndexRangeNV)(GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathGlyphRangeNV)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathGlyphsNV)(GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glPathMemoryGlyphIndexArrayNV)(GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void * fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameterfNV)(GLuint path, GLenum pname, GLfloat value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameterfvNV)(GLuint path, GLenum pname, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameteriNV)(GLuint path, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathParameterivNV)(GLuint path, GLenum pname, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathStencilDepthOffsetNV)(GLfloat factor, GLfloat units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathStencilFuncNV)(GLenum func, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathStringNV)(GLuint path, GLenum format, GLsizei length, const void * pathString); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathSubCommandsNV)(GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathSubCoordsNV)(GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPathTexGenNV)(GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPauseTransformFeedback)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPauseTransformFeedbackNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelDataRangeNV)(GLenum target, GLsizei length, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapfv)(GLenum map, GLsizei mapsize, const GLfloat * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapuiv)(GLenum map, GLsizei mapsize, const GLuint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapusv)(GLenum map, GLsizei mapsize, const GLushort * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelMapx)(GLenum map, GLint size, const GLfixed * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelStoref)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelStorei)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelStorex)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameteriSGIS)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTexGenSGIX)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransferf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransferi)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransferxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameterfEXT)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameterfvEXT)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameteriEXT)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelTransformParameterivEXT)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelZoom)(GLfloat xfactor, GLfloat yfactor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPixelZoomxOES)(GLfixed xfactor, GLfixed yfactor); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glPointAlongPathNV)(GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterf)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfARB)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfEXT)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfSGIS)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfv)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfvARB)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfvEXT)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterfvSGIS)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameteri)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameteriNV)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameteriv)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterivNV)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterx)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterxOES)(GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterxv)(GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointParameterxvOES)(GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSize)(GLfloat size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSizePointerOES)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSizex)(GLfixed size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPointSizexOES)(GLfixed size); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glPollAsyncSGIX)(GLuint * markerp); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glPollInstrumentsSGIX)(GLint * marker_p); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonMode)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonModeNV)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffset)(GLfloat factor, GLfloat units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetClampEXT)(GLfloat factor, GLfloat units, GLfloat clamp); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetEXT)(GLfloat factor, GLfloat bias); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetx)(GLfixed factor, GLfixed units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonOffsetxOES)(GLfixed factor, GLfixed units); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPolygonStipple)(const GLubyte * mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopAttrib)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopClientAttrib)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopDebugGroup)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopDebugGroupKHR)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopGroupMarkerEXT)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopMatrix)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPopName)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPresentFrameDualFillNV)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPresentFrameKeyedNV)(GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBox)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBoxARB)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBoxEXT)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveBoundingBoxOES)(GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveRestartIndex)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveRestartIndexNV)(GLuint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrimitiveRestartNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrioritizeTextures)(GLsizei n, const GLuint * textures, const GLfloat * priorities); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrioritizeTexturesEXT)(GLsizei n, const GLuint * textures, const GLclampf * priorities); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPrioritizeTexturesxOES)(GLsizei n, const GLuint * textures, const GLfixed * priorities); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBinary)(GLuint program, GLenum binaryFormat, const void * binary, GLsizei length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBinaryOES)(GLuint program, GLenum binaryFormat, const void * binary, GLint length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBufferParametersIivNV)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBufferParametersIuivNV)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramBufferParametersfvNV)(GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4iNV)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4ivNV)(GLenum target, GLuint index, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4uiNV)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameterI4uivNV)(GLenum target, GLuint index, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParametersI4ivNV)(GLenum target, GLuint index, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramEnvParametersI4uivNV)(GLenum target, GLuint index, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4iNV)(GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4ivNV)(GLenum target, GLuint index, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4uiNV)(GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameterI4uivNV)(GLenum target, GLuint index, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParameters4fvEXT)(GLenum target, GLuint index, GLsizei count, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParametersI4ivNV)(GLenum target, GLuint index, GLsizei count, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramLocalParametersI4uivNV)(GLenum target, GLuint index, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameteri)(GLuint program, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameteriARB)(GLuint program, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameteriEXT)(GLuint program, GLenum pname, GLint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameters4dvNV)(GLenum target, GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramParameters4fvNV)(GLenum target, GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramPathFragmentInputGenNV)(GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramStringARB)(GLenum target, GLenum format, GLsizei len, const void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramSubroutineParametersuivNV)(GLenum target, GLsizei count, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1d)(GLuint program, GLint location, GLdouble v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1dEXT)(GLuint program, GLint location, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1f)(GLuint program, GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1fEXT)(GLuint program, GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i)(GLuint program, GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64ARB)(GLuint program, GLint location, GLint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64NV)(GLuint program, GLint location, GLint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1iEXT)(GLuint program, GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui)(GLuint program, GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64ARB)(GLuint program, GLint location, GLuint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64NV)(GLuint program, GLint location, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1uiEXT)(GLuint program, GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform1uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2d)(GLuint program, GLint location, GLdouble v0, GLdouble v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2dEXT)(GLuint program, GLint location, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2f)(GLuint program, GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i)(GLuint program, GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64ARB)(GLuint program, GLint location, GLint64 x, GLint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2iEXT)(GLuint program, GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui)(GLuint program, GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64ARB)(GLuint program, GLint location, GLuint64 x, GLuint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform2uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3d)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3dEXT)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3f)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64ARB)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64ARB)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform3uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4d)(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4dEXT)(GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4dv)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4dvEXT)(GLuint program, GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4f)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4fEXT)(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4fv)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4fvEXT)(GLuint program, GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64ARB)(GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64NV)(GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64vARB)(GLuint program, GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4i64vNV)(GLuint program, GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4iEXT)(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4iv)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ivEXT)(GLuint program, GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64ARB)(GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64NV)(GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4ui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4uiEXT)(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4uiv)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniform4uivEXT)(GLuint program, GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64ARB)(GLuint program, GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64NV)(GLuint program, GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64vARB)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformHandleui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64 * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix2x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix3x4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x2fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3dv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3dvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3fv)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformMatrix4x3fvEXT)(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformui64NV)(GLuint program, GLint location, GLuint64EXT value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramUniformui64vNV)(GLuint program, GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProgramVertexLimitNV)(GLenum target, GLint limit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProvokingVertex)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glProvokingVertexEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushAttrib)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushClientAttrib)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushClientAttribDefaultEXT)(GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushDebugGroup)(GLenum source, GLuint id, GLsizei length, const GLchar * message); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushDebugGroupKHR)(GLenum source, GLuint id, GLsizei length, const GLchar * message); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushGroupMarkerEXT)(GLsizei length, const GLchar * marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushMatrix)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glPushName)(GLuint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glQueryCounter)(GLuint id, GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glQueryCounterEXT)(GLuint id, GLenum target); + +extern EPOXY_IMPORTEXPORT GLbitfield (EPOXY_CALLSPEC *epoxy_glQueryMatrixxOES)(GLfixed * mantissa, GLint * exponent); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glQueryObjectParameteruiAMD)(GLenum target, GLuint id, GLenum pname, GLuint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2d)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2f)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2i)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2s)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2xOES)(GLfixed x, GLfixed y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3d)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3f)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3i)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3s)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3xOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4i)(GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4s)(GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4xOES)(GLfixed x, GLfixed y, GLfixed z, GLfixed w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterPos4xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRasterSamplesEXT)(GLuint samples, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadBuffer)(GLenum src); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadBufferIndexedEXT)(GLenum src, GLint index); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadBufferNV)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadInstrumentsSGIX)(GLint marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixelsARB)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixelsEXT)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReadnPixelsKHR)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectd)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectdv)(const GLdouble * v1, const GLdouble * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectf)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectfv)(const GLfloat * v1, const GLfloat * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRecti)(GLint x1, GLint y1, GLint x2, GLint y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectiv)(const GLint * v1, const GLint * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRects)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectsv)(const GLshort * v1, const GLshort * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectxOES)(GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRectxvOES)(const GLfixed * v1, const GLfixed * v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReferencePlaneSGIX)(const GLdouble * equation); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReleaseShaderCompiler)(void); + +extern EPOXY_IMPORTEXPORT GLint (EPOXY_CALLSPEC *epoxy_glRenderMode)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleANGLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleAPPLE)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleCoverageNV)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleEXT)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleIMG)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageMultisampleNV)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRenderbufferStorageOES)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodePointerSUN)(GLenum type, GLsizei stride, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeubSUN)(GLubyte code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeubvSUN)(const GLubyte * code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor3fVertex3fSUN)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor3fVertex3fvSUN)(const GLuint * rc, const GLfloat * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN)(GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4ubVertex3fSUN)(GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiColor4ubVertex3fvSUN)(const GLuint * rc, const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiNormal3fVertex3fSUN)(GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiSUN)(GLuint code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN)(GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN)(GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN)(const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN)(GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN)(const GLuint * rc, const GLfloat * tc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiVertex3fSUN)(GLuint rc, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuiVertex3fvSUN)(const GLuint * rc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeuivSUN)(const GLuint * code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeusSUN)(GLushort code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glReplacementCodeusvSUN)(const GLushort * code); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRequestResidentProgramsNV)(GLsizei n, const GLuint * programs); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetHistogram)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetHistogramEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetMinmax)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResetMinmaxEXT)(GLenum target); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResizeBuffersMESA)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResolveDepthValuesNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResolveMultisampleFramebufferAPPLE)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResumeTransformFeedback)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glResumeTransformFeedbackNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotated)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotatex)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glRotatexOES)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoverage)(GLfloat value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoverageARB)(GLfloat value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoveragex)(GLclampx value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleCoveragexOES)(GLclampx value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMapATI)(GLuint dst, GLuint interp, GLenum swizzle); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaskEXT)(GLclampf value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaskIndexedNV)(GLuint index, GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaskSGIS)(GLclampf value, GLboolean invert); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSampleMaski)(GLuint maskNumber, GLbitfield mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplePatternEXT)(GLenum pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplePatternSGIS)(GLenum pattern); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIiv)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIivEXT)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIivOES)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIuiv)(GLuint sampler, GLenum pname, const GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIuivEXT)(GLuint sampler, GLenum pname, const GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterIuivOES)(GLuint sampler, GLenum pname, const GLuint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterf)(GLuint sampler, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameterfv)(GLuint sampler, GLenum pname, const GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameteri)(GLuint sampler, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSamplerParameteriv)(GLuint sampler, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScaled)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScalef)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScalex)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScalexOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissor)(GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorArrayv)(GLuint first, GLsizei count, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorArrayvNV)(GLuint first, GLsizei count, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexed)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexedNV)(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexedv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glScissorIndexedvNV)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3b)(GLbyte red, GLbyte green, GLbyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3bv)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3bvEXT)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3d)(GLdouble red, GLdouble green, GLdouble blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3dvEXT)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3f)(GLfloat red, GLfloat green, GLfloat blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3fvEXT)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3hNV)(GLhalfNV red, GLhalfNV green, GLhalfNV blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3i)(GLint red, GLint green, GLint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3iEXT)(GLint red, GLint green, GLint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ivEXT)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3s)(GLshort red, GLshort green, GLshort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3svEXT)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ub)(GLubyte red, GLubyte green, GLubyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ubv)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ubvEXT)(const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3ui)(GLuint red, GLuint green, GLuint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3uiv)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3uivEXT)(const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3us)(GLushort red, GLushort green, GLushort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3usv)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColor3usvEXT)(const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorP3ui)(GLenum type, GLuint color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorP3uiv)(GLenum type, const GLuint * color); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSecondaryColorPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSelectBuffer)(GLsizei size, GLuint * buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSelectPerfMonitorCountersAMD)(GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSeparableFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSeparableFilter2DEXT)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetFenceNV)(GLuint fence, GLenum condition); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetFragmentShaderConstantATI)(GLuint dst, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetInvariantEXT)(GLuint id, GLenum type, const void * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetLocalConstantEXT)(GLuint id, GLenum type, const void * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSetMultisamplefvAMD)(GLenum pname, GLuint index, const GLfloat * val); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShadeModel)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderBinary)(GLsizei count, const GLuint * shaders, GLenum binaryformat, const void * binary, GLsizei length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderOp1EXT)(GLenum op, GLuint res, GLuint arg1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderOp2EXT)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderOp3EXT)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderSource)(GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderSourceARB)(GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glShaderStorageBlockBinding)(GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameterfSGIX)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameterfvSGIX)(GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameteriSGIX)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSpriteParameterivSGIX)(GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStartInstrumentsSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStartTilingQCOM)(GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStateCaptureNV)(GLuint state, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilClearTagEXT)(GLsizei stencilTagBits, GLuint stencilClearTag); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFillPathNV)(GLuint path, GLenum fillMode, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFunc)(GLenum func, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFuncSeparate)(GLenum face, GLenum func, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilFuncSeparateATI)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilMask)(GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilMaskSeparate)(GLenum face, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOp)(GLenum fail, GLenum zfail, GLenum zpass); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOpSeparate)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOpSeparateATI)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilOpValueAMD)(GLenum face, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilStrokePathNV)(GLuint path, GLint reference, GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverFillPathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverFillPathNV)(GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverStrokePathInstancedNV)(GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStencilThenCoverStrokePathNV)(GLuint path, GLint reference, GLuint mask, GLenum coverMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStopInstrumentsSGIX)(GLint marker); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glStringMarkerGREMEDY)(GLsizei len, const void * string); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSubpixelPrecisionBiasNV)(GLuint xbits, GLuint ybits); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSwizzleEXT)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glSyncTextureINTEL)(GLuint texture); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTagSampleBufferSGIX)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3bEXT)(GLbyte tx, GLbyte ty, GLbyte tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3bvEXT)(const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3dEXT)(GLdouble tx, GLdouble ty, GLdouble tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3dvEXT)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3fEXT)(GLfloat tx, GLfloat ty, GLfloat tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3fvEXT)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3iEXT)(GLint tx, GLint ty, GLint tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3ivEXT)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3sEXT)(GLshort tx, GLshort ty, GLshort tz); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangent3svEXT)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTangentPointerEXT)(GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTbufferMask3DFX)(GLuint mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTessellationFactorAMD)(GLfloat factor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTessellationModeAMD)(GLenum mode); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glTestFenceAPPLE)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glTestFenceNV)(GLuint fence); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glTestObjectAPPLE)(GLenum object, GLuint name); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBuffer)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferARB)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferEXT)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferOES)(GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferRange)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferRangeEXT)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBufferRangeOES)(GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBumpParameterfvATI)(GLenum pname, const GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexBumpParameterivATI)(GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1bOES)(GLbyte s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1d)(GLdouble s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1f)(GLfloat s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1hNV)(GLhalfNV s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1i)(GLint s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1s)(GLshort s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1xOES)(GLfixed s); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord1xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2bOES)(GLbyte s, GLbyte t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2d)(GLdouble s, GLdouble t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2f)(GLfloat s, GLfloat t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor3fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor3fVertex3fvSUN)(const GLfloat * tc, const GLfloat * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4ubVertex3fSUN)(GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fColor4ubVertex3fvSUN)(const GLfloat * tc, const GLubyte * c, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fNormal3fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fNormal3fVertex3fvSUN)(const GLfloat * tc, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fVertex3fSUN)(GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fVertex3fvSUN)(const GLfloat * tc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2hNV)(GLhalfNV s, GLhalfNV t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2i)(GLint s, GLint t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2s)(GLshort s, GLshort t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2xOES)(GLfixed s, GLfixed t); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3bOES)(GLbyte s, GLbyte t, GLbyte r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3d)(GLdouble s, GLdouble t, GLdouble r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3f)(GLfloat s, GLfloat t, GLfloat r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3hNV)(GLhalfNV s, GLhalfNV t, GLhalfNV r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3i)(GLint s, GLint t, GLint r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3s)(GLshort s, GLshort t, GLshort r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3xOES)(GLfixed s, GLfixed t, GLfixed r); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4bOES)(GLbyte s, GLbyte t, GLbyte r, GLbyte q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4d)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN)(const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fVertex4fSUN)(GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fVertex4fvSUN)(const GLfloat * tc, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4hNV)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4i)(GLint s, GLint t, GLint r, GLint q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4s)(GLshort s, GLshort t, GLshort r, GLshort q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4xOES)(GLfixed s, GLfixed t, GLfixed r, GLfixed q); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoord4xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP1ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP1uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP2ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP2uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP3ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP3uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP4ui)(GLenum type, GLuint coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordP4uiv)(GLenum type, const GLuint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexCoordPointervINTEL)(GLint size, GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvf)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvi)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnviv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvx)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvxOES)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvxv)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexEnvxvOES)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGend)(GLenum coord, GLenum pname, GLdouble param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGendv)(GLenum coord, GLenum pname, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenf)(GLenum coord, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenfOES)(GLenum coord, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenfv)(GLenum coord, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenfvOES)(GLenum coord, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGeni)(GLenum coord, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGeniOES)(GLenum coord, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGeniv)(GLenum coord, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenivOES)(GLenum coord, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenxOES)(GLenum coord, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexGenxvOES)(GLenum coord, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage1D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage2DMultisampleCoverageNV)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DEXT)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DMultisampleCoverageNV)(GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage3DOES)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexPageCommitmentARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexPageCommitmentEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIiv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIivEXT)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIivOES)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIuiv)(GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIuivEXT)(GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterIuivOES)(GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterf)(GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterfv)(GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameteri)(GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameteriv)(GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterx)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterxOES)(GLenum target, GLenum pname, GLfixed param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterxv)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexParameterxvOES)(GLenum target, GLenum pname, const GLfixed * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexRenderbufferNV)(GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage1D)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage1DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage2D)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage2DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage2DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3D)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3DEXT)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3DMultisample)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorage3DMultisampleOES)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexStorageSparseAMD)(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage1DEXT)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage2DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage3DEXT)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage3DOES)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBarrier)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBarrierNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBuffer)(GLuint texture, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBufferEXT)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBufferRange)(GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureBufferRangeEXT)(GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureColorMaskSGIS)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage2DMultisampleCoverageNV)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage2DMultisampleNV)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage3DMultisampleCoverageNV)(GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureImage3DMultisampleNV)(GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureLightEXT)(GLenum pname); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureMaterialEXT)(GLenum face, GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureNormalEXT)(GLenum mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTexturePageCommitmentEXT)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIiv)(GLuint texture, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIivEXT)(GLuint texture, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIuiv)(GLuint texture, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterIuivEXT)(GLuint texture, GLenum target, GLenum pname, const GLuint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterf)(GLuint texture, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterfEXT)(GLuint texture, GLenum target, GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterfv)(GLuint texture, GLenum pname, const GLfloat * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterfvEXT)(GLuint texture, GLenum target, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameteri)(GLuint texture, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameteriEXT)(GLuint texture, GLenum target, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameteriv)(GLuint texture, GLenum pname, const GLint * param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureParameterivEXT)(GLuint texture, GLenum target, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureRangeAPPLE)(GLenum target, GLsizei length, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureRenderbufferEXT)(GLuint texture, GLenum target, GLuint renderbuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage1D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage1DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage2DMultisampleEXT)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3D)(GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3DEXT)(GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3DMultisample)(GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorage3DMultisampleEXT)(GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureStorageSparseAMD)(GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage1D)(GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage1DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage2D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage2DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage3D)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureSubImage3DEXT)(GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureView)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureViewEXT)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTextureViewOES)(GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackAttribsNV)(GLsizei count, const GLint * attribs, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackBufferBase)(GLuint xfb, GLuint index, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackBufferRange)(GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackStreamAttribsNV)(GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackVaryings)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackVaryingsEXT)(GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformFeedbackVaryingsNV)(GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTransformPathNV)(GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslated)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslatef)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslatex)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glTranslatexOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1d)(GLint location, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1f)(GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1fARB)(GLint location, GLfloat v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i)(GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64ARB)(GLint location, GLint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64NV)(GLint location, GLint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1iARB)(GLint location, GLint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui)(GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64ARB)(GLint location, GLuint64 x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64NV)(GLint location, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1uiEXT)(GLint location, GLuint v0); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform1uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2d)(GLint location, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2f)(GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2fARB)(GLint location, GLfloat v0, GLfloat v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i)(GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64ARB)(GLint location, GLint64 x, GLint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64NV)(GLint location, GLint64EXT x, GLint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2iARB)(GLint location, GLint v0, GLint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui)(GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64ARB)(GLint location, GLuint64 x, GLuint64 y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2uiEXT)(GLint location, GLuint v0, GLuint v1); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform2uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3d)(GLint location, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i)(GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64ARB)(GLint location, GLint64 x, GLint64 y, GLint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3iARB)(GLint location, GLint v0, GLint v1, GLint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui)(GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64ARB)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3uiEXT)(GLint location, GLuint v0, GLuint v1, GLuint v2); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform3uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4d)(GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4dv)(GLint location, GLsizei count, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4f)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4fARB)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4fv)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4fvARB)(GLint location, GLsizei count, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64ARB)(GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64NV)(GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64vARB)(GLint location, GLsizei count, const GLint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4i64vNV)(GLint location, GLsizei count, const GLint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4iARB)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4iv)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ivARB)(GLint location, GLsizei count, const GLint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64ARB)(GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64NV)(GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4ui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4uiEXT)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4uiv)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniform4uivEXT)(GLint location, GLsizei count, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformBlockBinding)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformBufferEXT)(GLuint program, GLint location, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64ARB)(GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64NV)(GLint location, GLuint64 value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64vARB)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformHandleui64vNV)(GLint location, GLsizei count, const GLuint64 * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix2x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix3x4fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4fvARB)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x2dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x2fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x2fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x3dv)(GLint location, GLsizei count, GLboolean transpose, const GLdouble * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x3fv)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformMatrix4x3fvNV)(GLint location, GLsizei count, GLboolean transpose, const GLfloat * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformSubroutinesuiv)(GLenum shadertype, GLsizei count, const GLuint * indices); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformui64NV)(GLint location, GLuint64EXT value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUniformui64vNV)(GLint location, GLsizei count, const GLuint64EXT * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUnlockArraysEXT)(void); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapBuffer)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapBufferARB)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapBufferOES)(GLenum target); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapNamedBuffer)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glUnmapNamedBufferEXT)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUnmapObjectBufferATI)(GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUnmapTexture2DINTEL)(GLuint texture, GLint level); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUpdateObjectBufferATI)(GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgramObjectARB)(GLhandleARB programObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgramStages)(GLuint pipeline, GLbitfield stages, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseProgramStagesEXT)(GLuint pipeline, GLbitfield stages, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glUseShaderProgramEXT)(GLenum type, GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUFiniNV)(void); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUGetSurfaceivNV)(GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUInitNV)(const void * vdpDevice, const void * getProcAddress); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_glVDPAUIsSurfaceNV)(GLvdpauSurfaceNV surface); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUMapSurfacesNV)(GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces); + +extern EPOXY_IMPORTEXPORT GLvdpauSurfaceNV (EPOXY_CALLSPEC *epoxy_glVDPAURegisterOutputSurfaceNV)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); + +extern EPOXY_IMPORTEXPORT GLvdpauSurfaceNV (EPOXY_CALLSPEC *epoxy_glVDPAURegisterVideoSurfaceNV)(const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUSurfaceAccessNV)(GLvdpauSurfaceNV surface, GLenum access); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUUnmapSurfacesNV)(GLsizei numSurface, const GLvdpauSurfaceNV * surfaces); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVDPAUUnregisterSurfaceNV)(GLvdpauSurfaceNV surface); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgram)(GLuint program); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgramARB)(GLhandleARB programObj); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgramPipeline)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glValidateProgramPipelineEXT)(GLuint pipeline); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantArrayObjectATI)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantPointerEXT)(GLuint id, GLenum type, GLuint stride, const void * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantbvEXT)(GLuint id, const GLbyte * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantdvEXT)(GLuint id, const GLdouble * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantfvEXT)(GLuint id, const GLfloat * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantivEXT)(GLuint id, const GLint * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantsvEXT)(GLuint id, const GLshort * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantubvEXT)(GLuint id, const GLubyte * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantuivEXT)(GLuint id, const GLuint * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVariantusvEXT)(GLuint id, const GLushort * addr); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2bOES)(GLbyte x, GLbyte y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2d)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2f)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2hNV)(GLhalfNV x, GLhalfNV y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2i)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2s)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2xOES)(GLfixed x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex2xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3bOES)(GLbyte x, GLbyte y, GLbyte z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3d)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3f)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3i)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3s)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3xOES)(GLfixed x, GLfixed y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex3xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4bOES)(GLbyte x, GLbyte y, GLbyte z, GLbyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4bvOES)(const GLbyte * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4hNV)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4hvNV)(const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4i)(GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4s)(GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4xOES)(GLfixed x, GLfixed y, GLfixed z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertex4xvOES)(const GLfixed * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribBinding)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribIFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayAttribLFormat)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayBindVertexBufferEXT)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayBindingDivisor)(GLuint vaobj, GLuint bindingindex, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayColorOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayEdgeFlagOffsetEXT)(GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayElementBuffer)(GLuint vaobj, GLuint buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayFogCoordOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayIndexOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayMultiTexCoordOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayNormalOffsetEXT)(GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayParameteriAPPLE)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayRangeAPPLE)(GLsizei length, void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayRangeNV)(GLsizei length, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArraySecondaryColorOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayTexCoordOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribBindingEXT)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribDivisorEXT)(GLuint vaobj, GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribFormatEXT)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribIFormatEXT)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribIOffsetEXT)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribLFormatEXT)(GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribLOffsetEXT)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexAttribOffsetEXT)(GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexBindingDivisorEXT)(GLuint vaobj, GLuint bindingindex, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexBuffer)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexBuffers)(GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexArrayVertexOffsetEXT)(GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1d)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dARB)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dNV)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1f)(GLuint index, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fARB)(GLuint index, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fNV)(GLuint index, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1hNV)(GLuint index, GLhalfNV x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1s)(GLuint index, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1sARB)(GLuint index, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1sNV)(GLuint index, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib1svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2d)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dARB)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2f)(GLuint index, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2hNV)(GLuint index, GLhalfNV x, GLhalfNV y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2s)(GLuint index, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2sARB)(GLuint index, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib2svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3f)(GLuint index, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3hNV)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3s)(GLuint index, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3sARB)(GLuint index, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib3svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nbv)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NbvARB)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Niv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NivARB)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nsv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NsvARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nub)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NubARB)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nubv)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NubvARB)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nuiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NuivARB)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4Nusv)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4NusvARB)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4bv)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4bvARB)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dARB)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dvARB)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4dvNV)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4f)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fvARB)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4fvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4hNV)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4hvNV)(GLuint index, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ivARB)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4s)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4sARB)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4svARB)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4svNV)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubv)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubvARB)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4ubvNV)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4uivARB)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4usv)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttrib4usvARB)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribArrayObjectATI)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribBinding)(GLuint attribindex, GLuint bindingindex); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisor)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorANGLE)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorARB)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorEXT)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribDivisorNV)(GLuint index, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribFormat)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribFormatNV)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1i)(GLuint index, GLint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1iEXT)(GLuint index, GLint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1ui)(GLuint index, GLuint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1uiEXT)(GLuint index, GLuint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI1uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2i)(GLuint index, GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2iEXT)(GLuint index, GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2ui)(GLuint index, GLuint x, GLuint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2uiEXT)(GLuint index, GLuint x, GLuint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI2uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3iEXT)(GLuint index, GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI3uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4bv)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4bvEXT)(GLuint index, const GLbyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4iEXT)(GLuint index, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4iv)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ivEXT)(GLuint index, const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4sv)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4svEXT)(GLuint index, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ubv)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ubvEXT)(GLuint index, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4uiEXT)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4uiv)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4uivEXT)(GLuint index, const GLuint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4usv)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribI4usvEXT)(GLuint index, const GLushort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIFormatNV)(GLuint index, GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribIPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1d)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1dEXT)(GLuint index, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1i64NV)(GLuint index, GLint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64ARB)(GLuint index, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64NV)(GLuint index, GLuint64EXT x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64vARB)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL1ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2d)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2dEXT)(GLuint index, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2i64NV)(GLuint index, GLint64EXT x, GLint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2ui64NV)(GLuint index, GLuint64EXT x, GLuint64EXT y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL2ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3d)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3dEXT)(GLuint index, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3i64NV)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3ui64NV)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL3ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4d)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4dEXT)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4dv)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4dvEXT)(GLuint index, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4i64NV)(GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4i64vNV)(GLuint index, const GLint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4ui64NV)(GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribL4ui64vNV)(GLuint index, const GLuint64EXT * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLFormat)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLFormatNV)(GLuint index, GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLPointer)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribLPointerEXT)(GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP1ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP1uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP2ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP2uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP3ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP3uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP4ui)(GLuint index, GLenum type, GLboolean normalized, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribP4uiv)(GLuint index, GLenum type, GLboolean normalized, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribParameteriAMD)(GLuint index, GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribPointer)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribPointerNV)(GLuint index, GLint fsize, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs1svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs2svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs3svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4dvNV)(GLuint index, GLsizei count, const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4fvNV)(GLuint index, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4hvNV)(GLuint index, GLsizei n, const GLhalfNV * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4svNV)(GLuint index, GLsizei count, const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexAttribs4ubvNV)(GLuint index, GLsizei count, const GLubyte * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBindingDivisor)(GLuint bindingindex, GLuint divisor); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBlendARB)(GLint count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBlendEnvfATI)(GLenum pname, GLfloat param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexBlendEnviATI)(GLenum pname, GLint param); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexFormatNV)(GLint size, GLenum type, GLsizei stride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP2ui)(GLenum type, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP2uiv)(GLenum type, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP3ui)(GLenum type, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP3uiv)(GLenum type, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP4ui)(GLenum type, GLuint value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexP4uiv)(GLenum type, const GLuint * value); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointer)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointerListIBM)(GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexPointervINTEL)(GLint size, GLenum type, const void ** pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1dATI)(GLenum stream, GLdouble x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1fATI)(GLenum stream, GLfloat x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1iATI)(GLenum stream, GLint x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1sATI)(GLenum stream, GLshort x); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream1svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2dATI)(GLenum stream, GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2fATI)(GLenum stream, GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2iATI)(GLenum stream, GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2sATI)(GLenum stream, GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream2svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3dATI)(GLenum stream, GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3fATI)(GLenum stream, GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3iATI)(GLenum stream, GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3sATI)(GLenum stream, GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream3svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4dATI)(GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4dvATI)(GLenum stream, const GLdouble * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4fATI)(GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4fvATI)(GLenum stream, const GLfloat * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4iATI)(GLenum stream, GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4ivATI)(GLenum stream, const GLint * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4sATI)(GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexStream4svATI)(GLenum stream, const GLshort * coords); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeightPointerEXT)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeightfEXT)(GLfloat weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeightfvEXT)(const GLfloat * weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeighthNV)(GLhalfNV weight); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVertexWeighthvNV)(const GLhalfNV * weight); + +extern EPOXY_IMPORTEXPORT GLenum (EPOXY_CALLSPEC *epoxy_glVideoCaptureNV)(GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVideoCaptureStreamParameterdvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVideoCaptureStreamParameterfvNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glVideoCaptureStreamParameterivNV)(GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewport)(GLint x, GLint y, GLsizei width, GLsizei height); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportArrayv)(GLuint first, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportArrayvNV)(GLuint first, GLsizei count, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedf)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedfNV)(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedfv)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glViewportIndexedfvNV)(GLuint index, const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWaitSync)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWaitSyncAPPLE)(GLsync sync, GLbitfield flags, GLuint64 timeout); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightPathsNV)(GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightPointerARB)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightPointerOES)(GLint size, GLenum type, GLsizei stride, const void * pointer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightbvARB)(GLint size, const GLbyte * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightdvARB)(GLint size, const GLdouble * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightfvARB)(GLint size, const GLfloat * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightivARB)(GLint size, const GLint * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightsvARB)(GLint size, const GLshort * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightubvARB)(GLint size, const GLubyte * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightuivARB)(GLint size, const GLuint * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWeightusvARB)(GLint size, const GLushort * weights); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2d)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dARB)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dMESA)(GLdouble x, GLdouble y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dvARB)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2dvMESA)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2f)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fARB)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fMESA)(GLfloat x, GLfloat y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fvARB)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2fvMESA)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2i)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2iARB)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2iMESA)(GLint x, GLint y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2ivARB)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2ivMESA)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2s)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2sARB)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2sMESA)(GLshort x, GLshort y); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2svARB)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos2svMESA)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3d)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dARB)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dv)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dvARB)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3dvMESA)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3f)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fARB)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fv)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fvARB)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3fvMESA)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3i)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3iARB)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3iMESA)(GLint x, GLint y, GLint z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3iv)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3ivARB)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3ivMESA)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3s)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3sARB)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3sMESA)(GLshort x, GLshort y, GLshort z); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3sv)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3svARB)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos3svMESA)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4dvMESA)(const GLdouble * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4fvMESA)(const GLfloat * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4ivMESA)(const GLint * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWindowPos4svMESA)(const GLshort * v); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glWriteMaskEXT)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); + +#define glAccum epoxy_glAccum +#define glAccumxOES epoxy_glAccumxOES +#define glActiveProgramEXT epoxy_glActiveProgramEXT +#define glActiveShaderProgram epoxy_glActiveShaderProgram +#define glActiveShaderProgramEXT epoxy_glActiveShaderProgramEXT +#define glActiveStencilFaceEXT epoxy_glActiveStencilFaceEXT +#define glActiveTexture epoxy_glActiveTexture +#define glActiveTextureARB epoxy_glActiveTextureARB +#define glActiveVaryingNV epoxy_glActiveVaryingNV +#define glAlphaFragmentOp1ATI epoxy_glAlphaFragmentOp1ATI +#define glAlphaFragmentOp2ATI epoxy_glAlphaFragmentOp2ATI +#define glAlphaFragmentOp3ATI epoxy_glAlphaFragmentOp3ATI +#define glAlphaFunc epoxy_glAlphaFunc +#define glAlphaFuncQCOM epoxy_glAlphaFuncQCOM +#define glAlphaFuncx epoxy_glAlphaFuncx +#define glAlphaFuncxOES epoxy_glAlphaFuncxOES +#define glApplyFramebufferAttachmentCMAAINTEL epoxy_glApplyFramebufferAttachmentCMAAINTEL +#define glApplyTextureEXT epoxy_glApplyTextureEXT +#define glAreProgramsResidentNV epoxy_glAreProgramsResidentNV +#define glAreTexturesResident epoxy_glAreTexturesResident +#define glAreTexturesResidentEXT epoxy_glAreTexturesResidentEXT +#define glArrayElement epoxy_glArrayElement +#define glArrayElementEXT epoxy_glArrayElementEXT +#define glArrayObjectATI epoxy_glArrayObjectATI +#define glAsyncMarkerSGIX epoxy_glAsyncMarkerSGIX +#define glAttachObjectARB epoxy_glAttachObjectARB +#define glAttachShader epoxy_glAttachShader +#define glBegin epoxy_glBegin +#define glBeginConditionalRender epoxy_glBeginConditionalRender +#define glBeginConditionalRenderNV epoxy_glBeginConditionalRenderNV +#define glBeginConditionalRenderNVX epoxy_glBeginConditionalRenderNVX +#define glBeginFragmentShaderATI epoxy_glBeginFragmentShaderATI +#define glBeginOcclusionQueryNV epoxy_glBeginOcclusionQueryNV +#define glBeginPerfMonitorAMD epoxy_glBeginPerfMonitorAMD +#define glBeginPerfQueryINTEL epoxy_glBeginPerfQueryINTEL +#define glBeginQuery epoxy_glBeginQuery +#define glBeginQueryARB epoxy_glBeginQueryARB +#define glBeginQueryEXT epoxy_glBeginQueryEXT +#define glBeginQueryIndexed epoxy_glBeginQueryIndexed +#define glBeginTransformFeedback epoxy_glBeginTransformFeedback +#define glBeginTransformFeedbackEXT epoxy_glBeginTransformFeedbackEXT +#define glBeginTransformFeedbackNV epoxy_glBeginTransformFeedbackNV +#define glBeginVertexShaderEXT epoxy_glBeginVertexShaderEXT +#define glBeginVideoCaptureNV epoxy_glBeginVideoCaptureNV +#define glBindAttribLocation epoxy_glBindAttribLocation +#define glBindAttribLocationARB epoxy_glBindAttribLocationARB +#define glBindBuffer epoxy_glBindBuffer +#define glBindBufferARB epoxy_glBindBufferARB +#define glBindBufferBase epoxy_glBindBufferBase +#define glBindBufferBaseEXT epoxy_glBindBufferBaseEXT +#define glBindBufferBaseNV epoxy_glBindBufferBaseNV +#define glBindBufferOffsetEXT epoxy_glBindBufferOffsetEXT +#define glBindBufferOffsetNV epoxy_glBindBufferOffsetNV +#define glBindBufferRange epoxy_glBindBufferRange +#define glBindBufferRangeEXT epoxy_glBindBufferRangeEXT +#define glBindBufferRangeNV epoxy_glBindBufferRangeNV +#define glBindBuffersBase epoxy_glBindBuffersBase +#define glBindBuffersRange epoxy_glBindBuffersRange +#define glBindFragDataLocation epoxy_glBindFragDataLocation +#define glBindFragDataLocationEXT epoxy_glBindFragDataLocationEXT +#define glBindFragDataLocationIndexed epoxy_glBindFragDataLocationIndexed +#define glBindFragDataLocationIndexedEXT epoxy_glBindFragDataLocationIndexedEXT +#define glBindFragmentShaderATI epoxy_glBindFragmentShaderATI +#define glBindFramebuffer epoxy_glBindFramebuffer +#define glBindFramebufferEXT epoxy_glBindFramebufferEXT +#define glBindFramebufferOES epoxy_glBindFramebufferOES +#define glBindImageTexture epoxy_glBindImageTexture +#define glBindImageTextureEXT epoxy_glBindImageTextureEXT +#define glBindImageTextures epoxy_glBindImageTextures +#define glBindLightParameterEXT epoxy_glBindLightParameterEXT +#define glBindMaterialParameterEXT epoxy_glBindMaterialParameterEXT +#define glBindMultiTextureEXT epoxy_glBindMultiTextureEXT +#define glBindParameterEXT epoxy_glBindParameterEXT +#define glBindProgramARB epoxy_glBindProgramARB +#define glBindProgramNV epoxy_glBindProgramNV +#define glBindProgramPipeline epoxy_glBindProgramPipeline +#define glBindProgramPipelineEXT epoxy_glBindProgramPipelineEXT +#define glBindRenderbuffer epoxy_glBindRenderbuffer +#define glBindRenderbufferEXT epoxy_glBindRenderbufferEXT +#define glBindRenderbufferOES epoxy_glBindRenderbufferOES +#define glBindSampler epoxy_glBindSampler +#define glBindSamplers epoxy_glBindSamplers +#define glBindTexGenParameterEXT epoxy_glBindTexGenParameterEXT +#define glBindTexture epoxy_glBindTexture +#define glBindTextureEXT epoxy_glBindTextureEXT +#define glBindTextureUnit epoxy_glBindTextureUnit +#define glBindTextureUnitParameterEXT epoxy_glBindTextureUnitParameterEXT +#define glBindTextures epoxy_glBindTextures +#define glBindTransformFeedback epoxy_glBindTransformFeedback +#define glBindTransformFeedbackNV epoxy_glBindTransformFeedbackNV +#define glBindVertexArray epoxy_glBindVertexArray +#define glBindVertexArrayAPPLE epoxy_glBindVertexArrayAPPLE +#define glBindVertexArrayOES epoxy_glBindVertexArrayOES +#define glBindVertexBuffer epoxy_glBindVertexBuffer +#define glBindVertexBuffers epoxy_glBindVertexBuffers +#define glBindVertexShaderEXT epoxy_glBindVertexShaderEXT +#define glBindVideoCaptureStreamBufferNV epoxy_glBindVideoCaptureStreamBufferNV +#define glBindVideoCaptureStreamTextureNV epoxy_glBindVideoCaptureStreamTextureNV +#define glBinormal3bEXT epoxy_glBinormal3bEXT +#define glBinormal3bvEXT epoxy_glBinormal3bvEXT +#define glBinormal3dEXT epoxy_glBinormal3dEXT +#define glBinormal3dvEXT epoxy_glBinormal3dvEXT +#define glBinormal3fEXT epoxy_glBinormal3fEXT +#define glBinormal3fvEXT epoxy_glBinormal3fvEXT +#define glBinormal3iEXT epoxy_glBinormal3iEXT +#define glBinormal3ivEXT epoxy_glBinormal3ivEXT +#define glBinormal3sEXT epoxy_glBinormal3sEXT +#define glBinormal3svEXT epoxy_glBinormal3svEXT +#define glBinormalPointerEXT epoxy_glBinormalPointerEXT +#define glBitmap epoxy_glBitmap +#define glBitmapxOES epoxy_glBitmapxOES +#define glBlendBarrier epoxy_glBlendBarrier +#define glBlendBarrierKHR epoxy_glBlendBarrierKHR +#define glBlendBarrierNV epoxy_glBlendBarrierNV +#define glBlendColor epoxy_glBlendColor +#define glBlendColorEXT epoxy_glBlendColorEXT +#define glBlendColorxOES epoxy_glBlendColorxOES +#define glBlendEquation epoxy_glBlendEquation +#define glBlendEquationEXT epoxy_glBlendEquationEXT +#define glBlendEquationIndexedAMD epoxy_glBlendEquationIndexedAMD +#define glBlendEquationOES epoxy_glBlendEquationOES +#define glBlendEquationSeparate epoxy_glBlendEquationSeparate +#define glBlendEquationSeparateEXT epoxy_glBlendEquationSeparateEXT +#define glBlendEquationSeparateIndexedAMD epoxy_glBlendEquationSeparateIndexedAMD +#define glBlendEquationSeparateOES epoxy_glBlendEquationSeparateOES +#define glBlendEquationSeparatei epoxy_glBlendEquationSeparatei +#define glBlendEquationSeparateiARB epoxy_glBlendEquationSeparateiARB +#define glBlendEquationSeparateiEXT epoxy_glBlendEquationSeparateiEXT +#define glBlendEquationSeparateiOES epoxy_glBlendEquationSeparateiOES +#define glBlendEquationi epoxy_glBlendEquationi +#define glBlendEquationiARB epoxy_glBlendEquationiARB +#define glBlendEquationiEXT epoxy_glBlendEquationiEXT +#define glBlendEquationiOES epoxy_glBlendEquationiOES +#define glBlendFunc epoxy_glBlendFunc +#define glBlendFuncIndexedAMD epoxy_glBlendFuncIndexedAMD +#define glBlendFuncSeparate epoxy_glBlendFuncSeparate +#define glBlendFuncSeparateEXT epoxy_glBlendFuncSeparateEXT +#define glBlendFuncSeparateINGR epoxy_glBlendFuncSeparateINGR +#define glBlendFuncSeparateIndexedAMD epoxy_glBlendFuncSeparateIndexedAMD +#define glBlendFuncSeparateOES epoxy_glBlendFuncSeparateOES +#define glBlendFuncSeparatei epoxy_glBlendFuncSeparatei +#define glBlendFuncSeparateiARB epoxy_glBlendFuncSeparateiARB +#define glBlendFuncSeparateiEXT epoxy_glBlendFuncSeparateiEXT +#define glBlendFuncSeparateiOES epoxy_glBlendFuncSeparateiOES +#define glBlendFunci epoxy_glBlendFunci +#define glBlendFunciARB epoxy_glBlendFunciARB +#define glBlendFunciEXT epoxy_glBlendFunciEXT +#define glBlendFunciOES epoxy_glBlendFunciOES +#define glBlendParameteriNV epoxy_glBlendParameteriNV +#define glBlitFramebuffer epoxy_glBlitFramebuffer +#define glBlitFramebufferANGLE epoxy_glBlitFramebufferANGLE +#define glBlitFramebufferEXT epoxy_glBlitFramebufferEXT +#define glBlitFramebufferNV epoxy_glBlitFramebufferNV +#define glBlitNamedFramebuffer epoxy_glBlitNamedFramebuffer +#define glBufferAddressRangeNV epoxy_glBufferAddressRangeNV +#define glBufferData epoxy_glBufferData +#define glBufferDataARB epoxy_glBufferDataARB +#define glBufferPageCommitmentARB epoxy_glBufferPageCommitmentARB +#define glBufferParameteriAPPLE epoxy_glBufferParameteriAPPLE +#define glBufferStorage epoxy_glBufferStorage +#define glBufferStorageEXT epoxy_glBufferStorageEXT +#define glBufferSubData epoxy_glBufferSubData +#define glBufferSubDataARB epoxy_glBufferSubDataARB +#define glCallCommandListNV epoxy_glCallCommandListNV +#define glCallList epoxy_glCallList +#define glCallLists epoxy_glCallLists +#define glCheckFramebufferStatus epoxy_glCheckFramebufferStatus +#define glCheckFramebufferStatusEXT epoxy_glCheckFramebufferStatusEXT +#define glCheckFramebufferStatusOES epoxy_glCheckFramebufferStatusOES +#define glCheckNamedFramebufferStatus epoxy_glCheckNamedFramebufferStatus +#define glCheckNamedFramebufferStatusEXT epoxy_glCheckNamedFramebufferStatusEXT +#define glClampColor epoxy_glClampColor +#define glClampColorARB epoxy_glClampColorARB +#define glClear epoxy_glClear +#define glClearAccum epoxy_glClearAccum +#define glClearAccumxOES epoxy_glClearAccumxOES +#define glClearBufferData epoxy_glClearBufferData +#define glClearBufferSubData epoxy_glClearBufferSubData +#define glClearBufferfi epoxy_glClearBufferfi +#define glClearBufferfv epoxy_glClearBufferfv +#define glClearBufferiv epoxy_glClearBufferiv +#define glClearBufferuiv epoxy_glClearBufferuiv +#define glClearColor epoxy_glClearColor +#define glClearColorIiEXT epoxy_glClearColorIiEXT +#define glClearColorIuiEXT epoxy_glClearColorIuiEXT +#define glClearColorx epoxy_glClearColorx +#define glClearColorxOES epoxy_glClearColorxOES +#define glClearDepth epoxy_glClearDepth +#define glClearDepthdNV epoxy_glClearDepthdNV +#define glClearDepthf epoxy_glClearDepthf +#define glClearDepthfOES epoxy_glClearDepthfOES +#define glClearDepthx epoxy_glClearDepthx +#define glClearDepthxOES epoxy_glClearDepthxOES +#define glClearIndex epoxy_glClearIndex +#define glClearNamedBufferData epoxy_glClearNamedBufferData +#define glClearNamedBufferDataEXT epoxy_glClearNamedBufferDataEXT +#define glClearNamedBufferSubData epoxy_glClearNamedBufferSubData +#define glClearNamedBufferSubDataEXT epoxy_glClearNamedBufferSubDataEXT +#define glClearNamedFramebufferfi epoxy_glClearNamedFramebufferfi +#define glClearNamedFramebufferfv epoxy_glClearNamedFramebufferfv +#define glClearNamedFramebufferiv epoxy_glClearNamedFramebufferiv +#define glClearNamedFramebufferuiv epoxy_glClearNamedFramebufferuiv +#define glClearStencil epoxy_glClearStencil +#define glClearTexImage epoxy_glClearTexImage +#define glClearTexSubImage epoxy_glClearTexSubImage +#define glClientActiveTexture epoxy_glClientActiveTexture +#define glClientActiveTextureARB epoxy_glClientActiveTextureARB +#define glClientActiveVertexStreamATI epoxy_glClientActiveVertexStreamATI +#define glClientAttribDefaultEXT epoxy_glClientAttribDefaultEXT +#define glClientWaitSync epoxy_glClientWaitSync +#define glClientWaitSyncAPPLE epoxy_glClientWaitSyncAPPLE +#define glClipControl epoxy_glClipControl +#define glClipPlane epoxy_glClipPlane +#define glClipPlanef epoxy_glClipPlanef +#define glClipPlanefIMG epoxy_glClipPlanefIMG +#define glClipPlanefOES epoxy_glClipPlanefOES +#define glClipPlanex epoxy_glClipPlanex +#define glClipPlanexIMG epoxy_glClipPlanexIMG +#define glClipPlanexOES epoxy_glClipPlanexOES +#define glColor3b epoxy_glColor3b +#define glColor3bv epoxy_glColor3bv +#define glColor3d epoxy_glColor3d +#define glColor3dv epoxy_glColor3dv +#define glColor3f epoxy_glColor3f +#define glColor3fVertex3fSUN epoxy_glColor3fVertex3fSUN +#define glColor3fVertex3fvSUN epoxy_glColor3fVertex3fvSUN +#define glColor3fv epoxy_glColor3fv +#define glColor3hNV epoxy_glColor3hNV +#define glColor3hvNV epoxy_glColor3hvNV +#define glColor3i epoxy_glColor3i +#define glColor3iv epoxy_glColor3iv +#define glColor3s epoxy_glColor3s +#define glColor3sv epoxy_glColor3sv +#define glColor3ub epoxy_glColor3ub +#define glColor3ubv epoxy_glColor3ubv +#define glColor3ui epoxy_glColor3ui +#define glColor3uiv epoxy_glColor3uiv +#define glColor3us epoxy_glColor3us +#define glColor3usv epoxy_glColor3usv +#define glColor3xOES epoxy_glColor3xOES +#define glColor3xvOES epoxy_glColor3xvOES +#define glColor4b epoxy_glColor4b +#define glColor4bv epoxy_glColor4bv +#define glColor4d epoxy_glColor4d +#define glColor4dv epoxy_glColor4dv +#define glColor4f epoxy_glColor4f +#define glColor4fNormal3fVertex3fSUN epoxy_glColor4fNormal3fVertex3fSUN +#define glColor4fNormal3fVertex3fvSUN epoxy_glColor4fNormal3fVertex3fvSUN +#define glColor4fv epoxy_glColor4fv +#define glColor4hNV epoxy_glColor4hNV +#define glColor4hvNV epoxy_glColor4hvNV +#define glColor4i epoxy_glColor4i +#define glColor4iv epoxy_glColor4iv +#define glColor4s epoxy_glColor4s +#define glColor4sv epoxy_glColor4sv +#define glColor4ub epoxy_glColor4ub +#define glColor4ubVertex2fSUN epoxy_glColor4ubVertex2fSUN +#define glColor4ubVertex2fvSUN epoxy_glColor4ubVertex2fvSUN +#define glColor4ubVertex3fSUN epoxy_glColor4ubVertex3fSUN +#define glColor4ubVertex3fvSUN epoxy_glColor4ubVertex3fvSUN +#define glColor4ubv epoxy_glColor4ubv +#define glColor4ui epoxy_glColor4ui +#define glColor4uiv epoxy_glColor4uiv +#define glColor4us epoxy_glColor4us +#define glColor4usv epoxy_glColor4usv +#define glColor4x epoxy_glColor4x +#define glColor4xOES epoxy_glColor4xOES +#define glColor4xvOES epoxy_glColor4xvOES +#define glColorFormatNV epoxy_glColorFormatNV +#define glColorFragmentOp1ATI epoxy_glColorFragmentOp1ATI +#define glColorFragmentOp2ATI epoxy_glColorFragmentOp2ATI +#define glColorFragmentOp3ATI epoxy_glColorFragmentOp3ATI +#define glColorMask epoxy_glColorMask +#define glColorMaskIndexedEXT epoxy_glColorMaskIndexedEXT +#define glColorMaski epoxy_glColorMaski +#define glColorMaskiEXT epoxy_glColorMaskiEXT +#define glColorMaskiOES epoxy_glColorMaskiOES +#define glColorMaterial epoxy_glColorMaterial +#define glColorP3ui epoxy_glColorP3ui +#define glColorP3uiv epoxy_glColorP3uiv +#define glColorP4ui epoxy_glColorP4ui +#define glColorP4uiv epoxy_glColorP4uiv +#define glColorPointer epoxy_glColorPointer +#define glColorPointerEXT epoxy_glColorPointerEXT +#define glColorPointerListIBM epoxy_glColorPointerListIBM +#define glColorPointervINTEL epoxy_glColorPointervINTEL +#define glColorSubTable epoxy_glColorSubTable +#define glColorSubTableEXT epoxy_glColorSubTableEXT +#define glColorTable epoxy_glColorTable +#define glColorTableEXT epoxy_glColorTableEXT +#define glColorTableParameterfv epoxy_glColorTableParameterfv +#define glColorTableParameterfvSGI epoxy_glColorTableParameterfvSGI +#define glColorTableParameteriv epoxy_glColorTableParameteriv +#define glColorTableParameterivSGI epoxy_glColorTableParameterivSGI +#define glColorTableSGI epoxy_glColorTableSGI +#define glCombinerInputNV epoxy_glCombinerInputNV +#define glCombinerOutputNV epoxy_glCombinerOutputNV +#define glCombinerParameterfNV epoxy_glCombinerParameterfNV +#define glCombinerParameterfvNV epoxy_glCombinerParameterfvNV +#define glCombinerParameteriNV epoxy_glCombinerParameteriNV +#define glCombinerParameterivNV epoxy_glCombinerParameterivNV +#define glCombinerStageParameterfvNV epoxy_glCombinerStageParameterfvNV +#define glCommandListSegmentsNV epoxy_glCommandListSegmentsNV +#define glCompileCommandListNV epoxy_glCompileCommandListNV +#define glCompileShader epoxy_glCompileShader +#define glCompileShaderARB epoxy_glCompileShaderARB +#define glCompileShaderIncludeARB epoxy_glCompileShaderIncludeARB +#define glCompressedMultiTexImage1DEXT epoxy_glCompressedMultiTexImage1DEXT +#define glCompressedMultiTexImage2DEXT epoxy_glCompressedMultiTexImage2DEXT +#define glCompressedMultiTexImage3DEXT epoxy_glCompressedMultiTexImage3DEXT +#define glCompressedMultiTexSubImage1DEXT epoxy_glCompressedMultiTexSubImage1DEXT +#define glCompressedMultiTexSubImage2DEXT epoxy_glCompressedMultiTexSubImage2DEXT +#define glCompressedMultiTexSubImage3DEXT epoxy_glCompressedMultiTexSubImage3DEXT +#define glCompressedTexImage1D epoxy_glCompressedTexImage1D +#define glCompressedTexImage1DARB epoxy_glCompressedTexImage1DARB +#define glCompressedTexImage2D epoxy_glCompressedTexImage2D +#define glCompressedTexImage2DARB epoxy_glCompressedTexImage2DARB +#define glCompressedTexImage3D epoxy_glCompressedTexImage3D +#define glCompressedTexImage3DARB epoxy_glCompressedTexImage3DARB +#define glCompressedTexImage3DOES epoxy_glCompressedTexImage3DOES +#define glCompressedTexSubImage1D epoxy_glCompressedTexSubImage1D +#define glCompressedTexSubImage1DARB epoxy_glCompressedTexSubImage1DARB +#define glCompressedTexSubImage2D epoxy_glCompressedTexSubImage2D +#define glCompressedTexSubImage2DARB epoxy_glCompressedTexSubImage2DARB +#define glCompressedTexSubImage3D epoxy_glCompressedTexSubImage3D +#define glCompressedTexSubImage3DARB epoxy_glCompressedTexSubImage3DARB +#define glCompressedTexSubImage3DOES epoxy_glCompressedTexSubImage3DOES +#define glCompressedTextureImage1DEXT epoxy_glCompressedTextureImage1DEXT +#define glCompressedTextureImage2DEXT epoxy_glCompressedTextureImage2DEXT +#define glCompressedTextureImage3DEXT epoxy_glCompressedTextureImage3DEXT +#define glCompressedTextureSubImage1D epoxy_glCompressedTextureSubImage1D +#define glCompressedTextureSubImage1DEXT epoxy_glCompressedTextureSubImage1DEXT +#define glCompressedTextureSubImage2D epoxy_glCompressedTextureSubImage2D +#define glCompressedTextureSubImage2DEXT epoxy_glCompressedTextureSubImage2DEXT +#define glCompressedTextureSubImage3D epoxy_glCompressedTextureSubImage3D +#define glCompressedTextureSubImage3DEXT epoxy_glCompressedTextureSubImage3DEXT +#define glConservativeRasterParameterfNV epoxy_glConservativeRasterParameterfNV +#define glConvolutionFilter1D epoxy_glConvolutionFilter1D +#define glConvolutionFilter1DEXT epoxy_glConvolutionFilter1DEXT +#define glConvolutionFilter2D epoxy_glConvolutionFilter2D +#define glConvolutionFilter2DEXT epoxy_glConvolutionFilter2DEXT +#define glConvolutionParameterf epoxy_glConvolutionParameterf +#define glConvolutionParameterfEXT epoxy_glConvolutionParameterfEXT +#define glConvolutionParameterfv epoxy_glConvolutionParameterfv +#define glConvolutionParameterfvEXT epoxy_glConvolutionParameterfvEXT +#define glConvolutionParameteri epoxy_glConvolutionParameteri +#define glConvolutionParameteriEXT epoxy_glConvolutionParameteriEXT +#define glConvolutionParameteriv epoxy_glConvolutionParameteriv +#define glConvolutionParameterivEXT epoxy_glConvolutionParameterivEXT +#define glConvolutionParameterxOES epoxy_glConvolutionParameterxOES +#define glConvolutionParameterxvOES epoxy_glConvolutionParameterxvOES +#define glCopyBufferSubData epoxy_glCopyBufferSubData +#define glCopyBufferSubDataNV epoxy_glCopyBufferSubDataNV +#define glCopyColorSubTable epoxy_glCopyColorSubTable +#define glCopyColorSubTableEXT epoxy_glCopyColorSubTableEXT +#define glCopyColorTable epoxy_glCopyColorTable +#define glCopyColorTableSGI epoxy_glCopyColorTableSGI +#define glCopyConvolutionFilter1D epoxy_glCopyConvolutionFilter1D +#define glCopyConvolutionFilter1DEXT epoxy_glCopyConvolutionFilter1DEXT +#define glCopyConvolutionFilter2D epoxy_glCopyConvolutionFilter2D +#define glCopyConvolutionFilter2DEXT epoxy_glCopyConvolutionFilter2DEXT +#define glCopyImageSubData epoxy_glCopyImageSubData +#define glCopyImageSubDataEXT epoxy_glCopyImageSubDataEXT +#define glCopyImageSubDataNV epoxy_glCopyImageSubDataNV +#define glCopyImageSubDataOES epoxy_glCopyImageSubDataOES +#define glCopyMultiTexImage1DEXT epoxy_glCopyMultiTexImage1DEXT +#define glCopyMultiTexImage2DEXT epoxy_glCopyMultiTexImage2DEXT +#define glCopyMultiTexSubImage1DEXT epoxy_glCopyMultiTexSubImage1DEXT +#define glCopyMultiTexSubImage2DEXT epoxy_glCopyMultiTexSubImage2DEXT +#define glCopyMultiTexSubImage3DEXT epoxy_glCopyMultiTexSubImage3DEXT +#define glCopyNamedBufferSubData epoxy_glCopyNamedBufferSubData +#define glCopyPathNV epoxy_glCopyPathNV +#define glCopyPixels epoxy_glCopyPixels +#define glCopyTexImage1D epoxy_glCopyTexImage1D +#define glCopyTexImage1DEXT epoxy_glCopyTexImage1DEXT +#define glCopyTexImage2D epoxy_glCopyTexImage2D +#define glCopyTexImage2DEXT epoxy_glCopyTexImage2DEXT +#define glCopyTexSubImage1D epoxy_glCopyTexSubImage1D +#define glCopyTexSubImage1DEXT epoxy_glCopyTexSubImage1DEXT +#define glCopyTexSubImage2D epoxy_glCopyTexSubImage2D +#define glCopyTexSubImage2DEXT epoxy_glCopyTexSubImage2DEXT +#define glCopyTexSubImage3D epoxy_glCopyTexSubImage3D +#define glCopyTexSubImage3DEXT epoxy_glCopyTexSubImage3DEXT +#define glCopyTexSubImage3DOES epoxy_glCopyTexSubImage3DOES +#define glCopyTextureImage1DEXT epoxy_glCopyTextureImage1DEXT +#define glCopyTextureImage2DEXT epoxy_glCopyTextureImage2DEXT +#define glCopyTextureLevelsAPPLE epoxy_glCopyTextureLevelsAPPLE +#define glCopyTextureSubImage1D epoxy_glCopyTextureSubImage1D +#define glCopyTextureSubImage1DEXT epoxy_glCopyTextureSubImage1DEXT +#define glCopyTextureSubImage2D epoxy_glCopyTextureSubImage2D +#define glCopyTextureSubImage2DEXT epoxy_glCopyTextureSubImage2DEXT +#define glCopyTextureSubImage3D epoxy_glCopyTextureSubImage3D +#define glCopyTextureSubImage3DEXT epoxy_glCopyTextureSubImage3DEXT +#define glCoverFillPathInstancedNV epoxy_glCoverFillPathInstancedNV +#define glCoverFillPathNV epoxy_glCoverFillPathNV +#define glCoverStrokePathInstancedNV epoxy_glCoverStrokePathInstancedNV +#define glCoverStrokePathNV epoxy_glCoverStrokePathNV +#define glCoverageMaskNV epoxy_glCoverageMaskNV +#define glCoverageModulationNV epoxy_glCoverageModulationNV +#define glCoverageModulationTableNV epoxy_glCoverageModulationTableNV +#define glCoverageOperationNV epoxy_glCoverageOperationNV +#define glCreateBuffers epoxy_glCreateBuffers +#define glCreateCommandListsNV epoxy_glCreateCommandListsNV +#define glCreateFramebuffers epoxy_glCreateFramebuffers +#define glCreatePerfQueryINTEL epoxy_glCreatePerfQueryINTEL +#define glCreateProgram epoxy_glCreateProgram +#define glCreateProgramObjectARB epoxy_glCreateProgramObjectARB +#define glCreateProgramPipelines epoxy_glCreateProgramPipelines +#define glCreateQueries epoxy_glCreateQueries +#define glCreateRenderbuffers epoxy_glCreateRenderbuffers +#define glCreateSamplers epoxy_glCreateSamplers +#define glCreateShader epoxy_glCreateShader +#define glCreateShaderObjectARB epoxy_glCreateShaderObjectARB +#define glCreateShaderProgramEXT epoxy_glCreateShaderProgramEXT +#define glCreateShaderProgramv epoxy_glCreateShaderProgramv +#define glCreateShaderProgramvEXT epoxy_glCreateShaderProgramvEXT +#define glCreateStatesNV epoxy_glCreateStatesNV +#define glCreateSyncFromCLeventARB epoxy_glCreateSyncFromCLeventARB +#define glCreateTextures epoxy_glCreateTextures +#define glCreateTransformFeedbacks epoxy_glCreateTransformFeedbacks +#define glCreateVertexArrays epoxy_glCreateVertexArrays +#define glCullFace epoxy_glCullFace +#define glCullParameterdvEXT epoxy_glCullParameterdvEXT +#define glCullParameterfvEXT epoxy_glCullParameterfvEXT +#define glCurrentPaletteMatrixARB epoxy_glCurrentPaletteMatrixARB +#define glCurrentPaletteMatrixOES epoxy_glCurrentPaletteMatrixOES +#define glDebugMessageCallback epoxy_glDebugMessageCallback +#define glDebugMessageCallbackAMD epoxy_glDebugMessageCallbackAMD +#define glDebugMessageCallbackARB epoxy_glDebugMessageCallbackARB +#define glDebugMessageCallbackKHR epoxy_glDebugMessageCallbackKHR +#define glDebugMessageControl epoxy_glDebugMessageControl +#define glDebugMessageControlARB epoxy_glDebugMessageControlARB +#define glDebugMessageControlKHR epoxy_glDebugMessageControlKHR +#define glDebugMessageEnableAMD epoxy_glDebugMessageEnableAMD +#define glDebugMessageInsert epoxy_glDebugMessageInsert +#define glDebugMessageInsertAMD epoxy_glDebugMessageInsertAMD +#define glDebugMessageInsertARB epoxy_glDebugMessageInsertARB +#define glDebugMessageInsertKHR epoxy_glDebugMessageInsertKHR +#define glDeformSGIX epoxy_glDeformSGIX +#define glDeformationMap3dSGIX epoxy_glDeformationMap3dSGIX +#define glDeformationMap3fSGIX epoxy_glDeformationMap3fSGIX +#define glDeleteAsyncMarkersSGIX epoxy_glDeleteAsyncMarkersSGIX +#define glDeleteBuffers epoxy_glDeleteBuffers +#define glDeleteBuffersARB epoxy_glDeleteBuffersARB +#define glDeleteCommandListsNV epoxy_glDeleteCommandListsNV +#define glDeleteFencesAPPLE epoxy_glDeleteFencesAPPLE +#define glDeleteFencesNV epoxy_glDeleteFencesNV +#define glDeleteFragmentShaderATI epoxy_glDeleteFragmentShaderATI +#define glDeleteFramebuffers epoxy_glDeleteFramebuffers +#define glDeleteFramebuffersEXT epoxy_glDeleteFramebuffersEXT +#define glDeleteFramebuffersOES epoxy_glDeleteFramebuffersOES +#define glDeleteLists epoxy_glDeleteLists +#define glDeleteNamedStringARB epoxy_glDeleteNamedStringARB +#define glDeleteNamesAMD epoxy_glDeleteNamesAMD +#define glDeleteObjectARB epoxy_glDeleteObjectARB +#define glDeleteOcclusionQueriesNV epoxy_glDeleteOcclusionQueriesNV +#define glDeletePathsNV epoxy_glDeletePathsNV +#define glDeletePerfMonitorsAMD epoxy_glDeletePerfMonitorsAMD +#define glDeletePerfQueryINTEL epoxy_glDeletePerfQueryINTEL +#define glDeleteProgram epoxy_glDeleteProgram +#define glDeleteProgramPipelines epoxy_glDeleteProgramPipelines +#define glDeleteProgramPipelinesEXT epoxy_glDeleteProgramPipelinesEXT +#define glDeleteProgramsARB epoxy_glDeleteProgramsARB +#define glDeleteProgramsNV epoxy_glDeleteProgramsNV +#define glDeleteQueries epoxy_glDeleteQueries +#define glDeleteQueriesARB epoxy_glDeleteQueriesARB +#define glDeleteQueriesEXT epoxy_glDeleteQueriesEXT +#define glDeleteRenderbuffers epoxy_glDeleteRenderbuffers +#define glDeleteRenderbuffersEXT epoxy_glDeleteRenderbuffersEXT +#define glDeleteRenderbuffersOES epoxy_glDeleteRenderbuffersOES +#define glDeleteSamplers epoxy_glDeleteSamplers +#define glDeleteShader epoxy_glDeleteShader +#define glDeleteStatesNV epoxy_glDeleteStatesNV +#define glDeleteSync epoxy_glDeleteSync +#define glDeleteSyncAPPLE epoxy_glDeleteSyncAPPLE +#define glDeleteTextures epoxy_glDeleteTextures +#define glDeleteTexturesEXT epoxy_glDeleteTexturesEXT +#define glDeleteTransformFeedbacks epoxy_glDeleteTransformFeedbacks +#define glDeleteTransformFeedbacksNV epoxy_glDeleteTransformFeedbacksNV +#define glDeleteVertexArrays epoxy_glDeleteVertexArrays +#define glDeleteVertexArraysAPPLE epoxy_glDeleteVertexArraysAPPLE +#define glDeleteVertexArraysOES epoxy_glDeleteVertexArraysOES +#define glDeleteVertexShaderEXT epoxy_glDeleteVertexShaderEXT +#define glDepthBoundsEXT epoxy_glDepthBoundsEXT +#define glDepthBoundsdNV epoxy_glDepthBoundsdNV +#define glDepthFunc epoxy_glDepthFunc +#define glDepthMask epoxy_glDepthMask +#define glDepthRange epoxy_glDepthRange +#define glDepthRangeArrayfvNV epoxy_glDepthRangeArrayfvNV +#define glDepthRangeArrayv epoxy_glDepthRangeArrayv +#define glDepthRangeIndexed epoxy_glDepthRangeIndexed +#define glDepthRangeIndexedfNV epoxy_glDepthRangeIndexedfNV +#define glDepthRangedNV epoxy_glDepthRangedNV +#define glDepthRangef epoxy_glDepthRangef +#define glDepthRangefOES epoxy_glDepthRangefOES +#define glDepthRangex epoxy_glDepthRangex +#define glDepthRangexOES epoxy_glDepthRangexOES +#define glDetachObjectARB epoxy_glDetachObjectARB +#define glDetachShader epoxy_glDetachShader +#define glDetailTexFuncSGIS epoxy_glDetailTexFuncSGIS +#define glDisable epoxy_glDisable +#define glDisableClientState epoxy_glDisableClientState +#define glDisableClientStateIndexedEXT epoxy_glDisableClientStateIndexedEXT +#define glDisableClientStateiEXT epoxy_glDisableClientStateiEXT +#define glDisableDriverControlQCOM epoxy_glDisableDriverControlQCOM +#define glDisableIndexedEXT epoxy_glDisableIndexedEXT +#define glDisableVariantClientStateEXT epoxy_glDisableVariantClientStateEXT +#define glDisableVertexArrayAttrib epoxy_glDisableVertexArrayAttrib +#define glDisableVertexArrayAttribEXT epoxy_glDisableVertexArrayAttribEXT +#define glDisableVertexArrayEXT epoxy_glDisableVertexArrayEXT +#define glDisableVertexAttribAPPLE epoxy_glDisableVertexAttribAPPLE +#define glDisableVertexAttribArray epoxy_glDisableVertexAttribArray +#define glDisableVertexAttribArrayARB epoxy_glDisableVertexAttribArrayARB +#define glDisablei epoxy_glDisablei +#define glDisableiEXT epoxy_glDisableiEXT +#define glDisableiNV epoxy_glDisableiNV +#define glDisableiOES epoxy_glDisableiOES +#define glDiscardFramebufferEXT epoxy_glDiscardFramebufferEXT +#define glDispatchCompute epoxy_glDispatchCompute +#define glDispatchComputeGroupSizeARB epoxy_glDispatchComputeGroupSizeARB +#define glDispatchComputeIndirect epoxy_glDispatchComputeIndirect +#define glDrawArrays epoxy_glDrawArrays +#define glDrawArraysEXT epoxy_glDrawArraysEXT +#define glDrawArraysIndirect epoxy_glDrawArraysIndirect +#define glDrawArraysInstanced epoxy_glDrawArraysInstanced +#define glDrawArraysInstancedANGLE epoxy_glDrawArraysInstancedANGLE +#define glDrawArraysInstancedARB epoxy_glDrawArraysInstancedARB +#define glDrawArraysInstancedBaseInstance epoxy_glDrawArraysInstancedBaseInstance +#define glDrawArraysInstancedBaseInstanceEXT epoxy_glDrawArraysInstancedBaseInstanceEXT +#define glDrawArraysInstancedEXT epoxy_glDrawArraysInstancedEXT +#define glDrawArraysInstancedNV epoxy_glDrawArraysInstancedNV +#define glDrawBuffer epoxy_glDrawBuffer +#define glDrawBuffers epoxy_glDrawBuffers +#define glDrawBuffersARB epoxy_glDrawBuffersARB +#define glDrawBuffersATI epoxy_glDrawBuffersATI +#define glDrawBuffersEXT epoxy_glDrawBuffersEXT +#define glDrawBuffersIndexedEXT epoxy_glDrawBuffersIndexedEXT +#define glDrawBuffersNV epoxy_glDrawBuffersNV +#define glDrawCommandsAddressNV epoxy_glDrawCommandsAddressNV +#define glDrawCommandsNV epoxy_glDrawCommandsNV +#define glDrawCommandsStatesAddressNV epoxy_glDrawCommandsStatesAddressNV +#define glDrawCommandsStatesNV epoxy_glDrawCommandsStatesNV +#define glDrawElementArrayAPPLE epoxy_glDrawElementArrayAPPLE +#define glDrawElementArrayATI epoxy_glDrawElementArrayATI +#define glDrawElements epoxy_glDrawElements +#define glDrawElementsBaseVertex epoxy_glDrawElementsBaseVertex +#define glDrawElementsBaseVertexEXT epoxy_glDrawElementsBaseVertexEXT +#define glDrawElementsBaseVertexOES epoxy_glDrawElementsBaseVertexOES +#define glDrawElementsIndirect epoxy_glDrawElementsIndirect +#define glDrawElementsInstanced epoxy_glDrawElementsInstanced +#define glDrawElementsInstancedANGLE epoxy_glDrawElementsInstancedANGLE +#define glDrawElementsInstancedARB epoxy_glDrawElementsInstancedARB +#define glDrawElementsInstancedBaseInstance epoxy_glDrawElementsInstancedBaseInstance +#define glDrawElementsInstancedBaseInstanceEXT epoxy_glDrawElementsInstancedBaseInstanceEXT +#define glDrawElementsInstancedBaseVertex epoxy_glDrawElementsInstancedBaseVertex +#define glDrawElementsInstancedBaseVertexBaseInstance epoxy_glDrawElementsInstancedBaseVertexBaseInstance +#define glDrawElementsInstancedBaseVertexBaseInstanceEXT epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT +#define glDrawElementsInstancedBaseVertexEXT epoxy_glDrawElementsInstancedBaseVertexEXT +#define glDrawElementsInstancedBaseVertexOES epoxy_glDrawElementsInstancedBaseVertexOES +#define glDrawElementsInstancedEXT epoxy_glDrawElementsInstancedEXT +#define glDrawElementsInstancedNV epoxy_glDrawElementsInstancedNV +#define glDrawMeshArraysSUN epoxy_glDrawMeshArraysSUN +#define glDrawPixels epoxy_glDrawPixels +#define glDrawRangeElementArrayAPPLE epoxy_glDrawRangeElementArrayAPPLE +#define glDrawRangeElementArrayATI epoxy_glDrawRangeElementArrayATI +#define glDrawRangeElements epoxy_glDrawRangeElements +#define glDrawRangeElementsBaseVertex epoxy_glDrawRangeElementsBaseVertex +#define glDrawRangeElementsBaseVertexEXT epoxy_glDrawRangeElementsBaseVertexEXT +#define glDrawRangeElementsBaseVertexOES epoxy_glDrawRangeElementsBaseVertexOES +#define glDrawRangeElementsEXT epoxy_glDrawRangeElementsEXT +#define glDrawTexfOES epoxy_glDrawTexfOES +#define glDrawTexfvOES epoxy_glDrawTexfvOES +#define glDrawTexiOES epoxy_glDrawTexiOES +#define glDrawTexivOES epoxy_glDrawTexivOES +#define glDrawTexsOES epoxy_glDrawTexsOES +#define glDrawTexsvOES epoxy_glDrawTexsvOES +#define glDrawTextureNV epoxy_glDrawTextureNV +#define glDrawTexxOES epoxy_glDrawTexxOES +#define glDrawTexxvOES epoxy_glDrawTexxvOES +#define glDrawTransformFeedback epoxy_glDrawTransformFeedback +#define glDrawTransformFeedbackInstanced epoxy_glDrawTransformFeedbackInstanced +#define glDrawTransformFeedbackNV epoxy_glDrawTransformFeedbackNV +#define glDrawTransformFeedbackStream epoxy_glDrawTransformFeedbackStream +#define glDrawTransformFeedbackStreamInstanced epoxy_glDrawTransformFeedbackStreamInstanced +#define glEGLImageTargetRenderbufferStorageOES epoxy_glEGLImageTargetRenderbufferStorageOES +#define glEGLImageTargetTexture2DOES epoxy_glEGLImageTargetTexture2DOES +#define glEdgeFlag epoxy_glEdgeFlag +#define glEdgeFlagFormatNV epoxy_glEdgeFlagFormatNV +#define glEdgeFlagPointer epoxy_glEdgeFlagPointer +#define glEdgeFlagPointerEXT epoxy_glEdgeFlagPointerEXT +#define glEdgeFlagPointerListIBM epoxy_glEdgeFlagPointerListIBM +#define glEdgeFlagv epoxy_glEdgeFlagv +#define glElementPointerAPPLE epoxy_glElementPointerAPPLE +#define glElementPointerATI epoxy_glElementPointerATI +#define glEnable epoxy_glEnable +#define glEnableClientState epoxy_glEnableClientState +#define glEnableClientStateIndexedEXT epoxy_glEnableClientStateIndexedEXT +#define glEnableClientStateiEXT epoxy_glEnableClientStateiEXT +#define glEnableDriverControlQCOM epoxy_glEnableDriverControlQCOM +#define glEnableIndexedEXT epoxy_glEnableIndexedEXT +#define glEnableVariantClientStateEXT epoxy_glEnableVariantClientStateEXT +#define glEnableVertexArrayAttrib epoxy_glEnableVertexArrayAttrib +#define glEnableVertexArrayAttribEXT epoxy_glEnableVertexArrayAttribEXT +#define glEnableVertexArrayEXT epoxy_glEnableVertexArrayEXT +#define glEnableVertexAttribAPPLE epoxy_glEnableVertexAttribAPPLE +#define glEnableVertexAttribArray epoxy_glEnableVertexAttribArray +#define glEnableVertexAttribArrayARB epoxy_glEnableVertexAttribArrayARB +#define glEnablei epoxy_glEnablei +#define glEnableiEXT epoxy_glEnableiEXT +#define glEnableiNV epoxy_glEnableiNV +#define glEnableiOES epoxy_glEnableiOES +#define glEnd epoxy_glEnd +#define glEndConditionalRender epoxy_glEndConditionalRender +#define glEndConditionalRenderNV epoxy_glEndConditionalRenderNV +#define glEndConditionalRenderNVX epoxy_glEndConditionalRenderNVX +#define glEndFragmentShaderATI epoxy_glEndFragmentShaderATI +#define glEndList epoxy_glEndList +#define glEndOcclusionQueryNV epoxy_glEndOcclusionQueryNV +#define glEndPerfMonitorAMD epoxy_glEndPerfMonitorAMD +#define glEndPerfQueryINTEL epoxy_glEndPerfQueryINTEL +#define glEndQuery epoxy_glEndQuery +#define glEndQueryARB epoxy_glEndQueryARB +#define glEndQueryEXT epoxy_glEndQueryEXT +#define glEndQueryIndexed epoxy_glEndQueryIndexed +#define glEndTilingQCOM epoxy_glEndTilingQCOM +#define glEndTransformFeedback epoxy_glEndTransformFeedback +#define glEndTransformFeedbackEXT epoxy_glEndTransformFeedbackEXT +#define glEndTransformFeedbackNV epoxy_glEndTransformFeedbackNV +#define glEndVertexShaderEXT epoxy_glEndVertexShaderEXT +#define glEndVideoCaptureNV epoxy_glEndVideoCaptureNV +#define glEvalCoord1d epoxy_glEvalCoord1d +#define glEvalCoord1dv epoxy_glEvalCoord1dv +#define glEvalCoord1f epoxy_glEvalCoord1f +#define glEvalCoord1fv epoxy_glEvalCoord1fv +#define glEvalCoord1xOES epoxy_glEvalCoord1xOES +#define glEvalCoord1xvOES epoxy_glEvalCoord1xvOES +#define glEvalCoord2d epoxy_glEvalCoord2d +#define glEvalCoord2dv epoxy_glEvalCoord2dv +#define glEvalCoord2f epoxy_glEvalCoord2f +#define glEvalCoord2fv epoxy_glEvalCoord2fv +#define glEvalCoord2xOES epoxy_glEvalCoord2xOES +#define glEvalCoord2xvOES epoxy_glEvalCoord2xvOES +#define glEvalMapsNV epoxy_glEvalMapsNV +#define glEvalMesh1 epoxy_glEvalMesh1 +#define glEvalMesh2 epoxy_glEvalMesh2 +#define glEvalPoint1 epoxy_glEvalPoint1 +#define glEvalPoint2 epoxy_glEvalPoint2 +#define glEvaluateDepthValuesARB epoxy_glEvaluateDepthValuesARB +#define glExecuteProgramNV epoxy_glExecuteProgramNV +#define glExtGetBufferPointervQCOM epoxy_glExtGetBufferPointervQCOM +#define glExtGetBuffersQCOM epoxy_glExtGetBuffersQCOM +#define glExtGetFramebuffersQCOM epoxy_glExtGetFramebuffersQCOM +#define glExtGetProgramBinarySourceQCOM epoxy_glExtGetProgramBinarySourceQCOM +#define glExtGetProgramsQCOM epoxy_glExtGetProgramsQCOM +#define glExtGetRenderbuffersQCOM epoxy_glExtGetRenderbuffersQCOM +#define glExtGetShadersQCOM epoxy_glExtGetShadersQCOM +#define glExtGetTexLevelParameterivQCOM epoxy_glExtGetTexLevelParameterivQCOM +#define glExtGetTexSubImageQCOM epoxy_glExtGetTexSubImageQCOM +#define glExtGetTexturesQCOM epoxy_glExtGetTexturesQCOM +#define glExtIsProgramBinaryQCOM epoxy_glExtIsProgramBinaryQCOM +#define glExtTexObjectStateOverrideiQCOM epoxy_glExtTexObjectStateOverrideiQCOM +#define glExtractComponentEXT epoxy_glExtractComponentEXT +#define glFeedbackBuffer epoxy_glFeedbackBuffer +#define glFeedbackBufferxOES epoxy_glFeedbackBufferxOES +#define glFenceSync epoxy_glFenceSync +#define glFenceSyncAPPLE epoxy_glFenceSyncAPPLE +#define glFinalCombinerInputNV epoxy_glFinalCombinerInputNV +#define glFinish epoxy_glFinish +#define glFinishAsyncSGIX epoxy_glFinishAsyncSGIX +#define glFinishFenceAPPLE epoxy_glFinishFenceAPPLE +#define glFinishFenceNV epoxy_glFinishFenceNV +#define glFinishObjectAPPLE epoxy_glFinishObjectAPPLE +#define glFinishTextureSUNX epoxy_glFinishTextureSUNX +#define glFlush epoxy_glFlush +#define glFlushMappedBufferRange epoxy_glFlushMappedBufferRange +#define glFlushMappedBufferRangeAPPLE epoxy_glFlushMappedBufferRangeAPPLE +#define glFlushMappedBufferRangeEXT epoxy_glFlushMappedBufferRangeEXT +#define glFlushMappedNamedBufferRange epoxy_glFlushMappedNamedBufferRange +#define glFlushMappedNamedBufferRangeEXT epoxy_glFlushMappedNamedBufferRangeEXT +#define glFlushPixelDataRangeNV epoxy_glFlushPixelDataRangeNV +#define glFlushRasterSGIX epoxy_glFlushRasterSGIX +#define glFlushStaticDataIBM epoxy_glFlushStaticDataIBM +#define glFlushVertexArrayRangeAPPLE epoxy_glFlushVertexArrayRangeAPPLE +#define glFlushVertexArrayRangeNV epoxy_glFlushVertexArrayRangeNV +#define glFogCoordFormatNV epoxy_glFogCoordFormatNV +#define glFogCoordPointer epoxy_glFogCoordPointer +#define glFogCoordPointerEXT epoxy_glFogCoordPointerEXT +#define glFogCoordPointerListIBM epoxy_glFogCoordPointerListIBM +#define glFogCoordd epoxy_glFogCoordd +#define glFogCoorddEXT epoxy_glFogCoorddEXT +#define glFogCoorddv epoxy_glFogCoorddv +#define glFogCoorddvEXT epoxy_glFogCoorddvEXT +#define glFogCoordf epoxy_glFogCoordf +#define glFogCoordfEXT epoxy_glFogCoordfEXT +#define glFogCoordfv epoxy_glFogCoordfv +#define glFogCoordfvEXT epoxy_glFogCoordfvEXT +#define glFogCoordhNV epoxy_glFogCoordhNV +#define glFogCoordhvNV epoxy_glFogCoordhvNV +#define glFogFuncSGIS epoxy_glFogFuncSGIS +#define glFogf epoxy_glFogf +#define glFogfv epoxy_glFogfv +#define glFogi epoxy_glFogi +#define glFogiv epoxy_glFogiv +#define glFogx epoxy_glFogx +#define glFogxOES epoxy_glFogxOES +#define glFogxv epoxy_glFogxv +#define glFogxvOES epoxy_glFogxvOES +#define glFragmentColorMaterialSGIX epoxy_glFragmentColorMaterialSGIX +#define glFragmentCoverageColorNV epoxy_glFragmentCoverageColorNV +#define glFragmentLightModelfSGIX epoxy_glFragmentLightModelfSGIX +#define glFragmentLightModelfvSGIX epoxy_glFragmentLightModelfvSGIX +#define glFragmentLightModeliSGIX epoxy_glFragmentLightModeliSGIX +#define glFragmentLightModelivSGIX epoxy_glFragmentLightModelivSGIX +#define glFragmentLightfSGIX epoxy_glFragmentLightfSGIX +#define glFragmentLightfvSGIX epoxy_glFragmentLightfvSGIX +#define glFragmentLightiSGIX epoxy_glFragmentLightiSGIX +#define glFragmentLightivSGIX epoxy_glFragmentLightivSGIX +#define glFragmentMaterialfSGIX epoxy_glFragmentMaterialfSGIX +#define glFragmentMaterialfvSGIX epoxy_glFragmentMaterialfvSGIX +#define glFragmentMaterialiSGIX epoxy_glFragmentMaterialiSGIX +#define glFragmentMaterialivSGIX epoxy_glFragmentMaterialivSGIX +#define glFrameTerminatorGREMEDY epoxy_glFrameTerminatorGREMEDY +#define glFrameZoomSGIX epoxy_glFrameZoomSGIX +#define glFramebufferDrawBufferEXT epoxy_glFramebufferDrawBufferEXT +#define glFramebufferDrawBuffersEXT epoxy_glFramebufferDrawBuffersEXT +#define glFramebufferParameteri epoxy_glFramebufferParameteri +#define glFramebufferReadBufferEXT epoxy_glFramebufferReadBufferEXT +#define glFramebufferRenderbuffer epoxy_glFramebufferRenderbuffer +#define glFramebufferRenderbufferEXT epoxy_glFramebufferRenderbufferEXT +#define glFramebufferRenderbufferOES epoxy_glFramebufferRenderbufferOES +#define glFramebufferSampleLocationsfvARB epoxy_glFramebufferSampleLocationsfvARB +#define glFramebufferSampleLocationsfvNV epoxy_glFramebufferSampleLocationsfvNV +#define glFramebufferTexture epoxy_glFramebufferTexture +#define glFramebufferTexture1D epoxy_glFramebufferTexture1D +#define glFramebufferTexture1DEXT epoxy_glFramebufferTexture1DEXT +#define glFramebufferTexture2D epoxy_glFramebufferTexture2D +#define glFramebufferTexture2DEXT epoxy_glFramebufferTexture2DEXT +#define glFramebufferTexture2DMultisampleEXT epoxy_glFramebufferTexture2DMultisampleEXT +#define glFramebufferTexture2DMultisampleIMG epoxy_glFramebufferTexture2DMultisampleIMG +#define glFramebufferTexture2DOES epoxy_glFramebufferTexture2DOES +#define glFramebufferTexture3D epoxy_glFramebufferTexture3D +#define glFramebufferTexture3DEXT epoxy_glFramebufferTexture3DEXT +#define glFramebufferTexture3DOES epoxy_glFramebufferTexture3DOES +#define glFramebufferTextureARB epoxy_glFramebufferTextureARB +#define glFramebufferTextureEXT epoxy_glFramebufferTextureEXT +#define glFramebufferTextureFaceARB epoxy_glFramebufferTextureFaceARB +#define glFramebufferTextureFaceEXT epoxy_glFramebufferTextureFaceEXT +#define glFramebufferTextureLayer epoxy_glFramebufferTextureLayer +#define glFramebufferTextureLayerARB epoxy_glFramebufferTextureLayerARB +#define glFramebufferTextureLayerEXT epoxy_glFramebufferTextureLayerEXT +#define glFramebufferTextureMultiviewOVR epoxy_glFramebufferTextureMultiviewOVR +#define glFramebufferTextureOES epoxy_glFramebufferTextureOES +#define glFreeObjectBufferATI epoxy_glFreeObjectBufferATI +#define glFrontFace epoxy_glFrontFace +#define glFrustum epoxy_glFrustum +#define glFrustumf epoxy_glFrustumf +#define glFrustumfOES epoxy_glFrustumfOES +#define glFrustumx epoxy_glFrustumx +#define glFrustumxOES epoxy_glFrustumxOES +#define glGenAsyncMarkersSGIX epoxy_glGenAsyncMarkersSGIX +#define glGenBuffers epoxy_glGenBuffers +#define glGenBuffersARB epoxy_glGenBuffersARB +#define glGenFencesAPPLE epoxy_glGenFencesAPPLE +#define glGenFencesNV epoxy_glGenFencesNV +#define glGenFragmentShadersATI epoxy_glGenFragmentShadersATI +#define glGenFramebuffers epoxy_glGenFramebuffers +#define glGenFramebuffersEXT epoxy_glGenFramebuffersEXT +#define glGenFramebuffersOES epoxy_glGenFramebuffersOES +#define glGenLists epoxy_glGenLists +#define glGenNamesAMD epoxy_glGenNamesAMD +#define glGenOcclusionQueriesNV epoxy_glGenOcclusionQueriesNV +#define glGenPathsNV epoxy_glGenPathsNV +#define glGenPerfMonitorsAMD epoxy_glGenPerfMonitorsAMD +#define glGenProgramPipelines epoxy_glGenProgramPipelines +#define glGenProgramPipelinesEXT epoxy_glGenProgramPipelinesEXT +#define glGenProgramsARB epoxy_glGenProgramsARB +#define glGenProgramsNV epoxy_glGenProgramsNV +#define glGenQueries epoxy_glGenQueries +#define glGenQueriesARB epoxy_glGenQueriesARB +#define glGenQueriesEXT epoxy_glGenQueriesEXT +#define glGenRenderbuffers epoxy_glGenRenderbuffers +#define glGenRenderbuffersEXT epoxy_glGenRenderbuffersEXT +#define glGenRenderbuffersOES epoxy_glGenRenderbuffersOES +#define glGenSamplers epoxy_glGenSamplers +#define glGenSymbolsEXT epoxy_glGenSymbolsEXT +#define glGenTextures epoxy_glGenTextures +#define glGenTexturesEXT epoxy_glGenTexturesEXT +#define glGenTransformFeedbacks epoxy_glGenTransformFeedbacks +#define glGenTransformFeedbacksNV epoxy_glGenTransformFeedbacksNV +#define glGenVertexArrays epoxy_glGenVertexArrays +#define glGenVertexArraysAPPLE epoxy_glGenVertexArraysAPPLE +#define glGenVertexArraysOES epoxy_glGenVertexArraysOES +#define glGenVertexShadersEXT epoxy_glGenVertexShadersEXT +#define glGenerateMipmap epoxy_glGenerateMipmap +#define glGenerateMipmapEXT epoxy_glGenerateMipmapEXT +#define glGenerateMipmapOES epoxy_glGenerateMipmapOES +#define glGenerateMultiTexMipmapEXT epoxy_glGenerateMultiTexMipmapEXT +#define glGenerateTextureMipmap epoxy_glGenerateTextureMipmap +#define glGenerateTextureMipmapEXT epoxy_glGenerateTextureMipmapEXT +#define glGetActiveAtomicCounterBufferiv epoxy_glGetActiveAtomicCounterBufferiv +#define glGetActiveAttrib epoxy_glGetActiveAttrib +#define glGetActiveAttribARB epoxy_glGetActiveAttribARB +#define glGetActiveSubroutineName epoxy_glGetActiveSubroutineName +#define glGetActiveSubroutineUniformName epoxy_glGetActiveSubroutineUniformName +#define glGetActiveSubroutineUniformiv epoxy_glGetActiveSubroutineUniformiv +#define glGetActiveUniform epoxy_glGetActiveUniform +#define glGetActiveUniformARB epoxy_glGetActiveUniformARB +#define glGetActiveUniformBlockName epoxy_glGetActiveUniformBlockName +#define glGetActiveUniformBlockiv epoxy_glGetActiveUniformBlockiv +#define glGetActiveUniformName epoxy_glGetActiveUniformName +#define glGetActiveUniformsiv epoxy_glGetActiveUniformsiv +#define glGetActiveVaryingNV epoxy_glGetActiveVaryingNV +#define glGetArrayObjectfvATI epoxy_glGetArrayObjectfvATI +#define glGetArrayObjectivATI epoxy_glGetArrayObjectivATI +#define glGetAttachedObjectsARB epoxy_glGetAttachedObjectsARB +#define glGetAttachedShaders epoxy_glGetAttachedShaders +#define glGetAttribLocation epoxy_glGetAttribLocation +#define glGetAttribLocationARB epoxy_glGetAttribLocationARB +#define glGetBooleanIndexedvEXT epoxy_glGetBooleanIndexedvEXT +#define glGetBooleani_v epoxy_glGetBooleani_v +#define glGetBooleanv epoxy_glGetBooleanv +#define glGetBufferParameteri64v epoxy_glGetBufferParameteri64v +#define glGetBufferParameteriv epoxy_glGetBufferParameteriv +#define glGetBufferParameterivARB epoxy_glGetBufferParameterivARB +#define glGetBufferParameterui64vNV epoxy_glGetBufferParameterui64vNV +#define glGetBufferPointerv epoxy_glGetBufferPointerv +#define glGetBufferPointervARB epoxy_glGetBufferPointervARB +#define glGetBufferPointervOES epoxy_glGetBufferPointervOES +#define glGetBufferSubData epoxy_glGetBufferSubData +#define glGetBufferSubDataARB epoxy_glGetBufferSubDataARB +#define glGetClipPlane epoxy_glGetClipPlane +#define glGetClipPlanef epoxy_glGetClipPlanef +#define glGetClipPlanefOES epoxy_glGetClipPlanefOES +#define glGetClipPlanex epoxy_glGetClipPlanex +#define glGetClipPlanexOES epoxy_glGetClipPlanexOES +#define glGetColorTable epoxy_glGetColorTable +#define glGetColorTableEXT epoxy_glGetColorTableEXT +#define glGetColorTableParameterfv epoxy_glGetColorTableParameterfv +#define glGetColorTableParameterfvEXT epoxy_glGetColorTableParameterfvEXT +#define glGetColorTableParameterfvSGI epoxy_glGetColorTableParameterfvSGI +#define glGetColorTableParameteriv epoxy_glGetColorTableParameteriv +#define glGetColorTableParameterivEXT epoxy_glGetColorTableParameterivEXT +#define glGetColorTableParameterivSGI epoxy_glGetColorTableParameterivSGI +#define glGetColorTableSGI epoxy_glGetColorTableSGI +#define glGetCombinerInputParameterfvNV epoxy_glGetCombinerInputParameterfvNV +#define glGetCombinerInputParameterivNV epoxy_glGetCombinerInputParameterivNV +#define glGetCombinerOutputParameterfvNV epoxy_glGetCombinerOutputParameterfvNV +#define glGetCombinerOutputParameterivNV epoxy_glGetCombinerOutputParameterivNV +#define glGetCombinerStageParameterfvNV epoxy_glGetCombinerStageParameterfvNV +#define glGetCommandHeaderNV epoxy_glGetCommandHeaderNV +#define glGetCompressedMultiTexImageEXT epoxy_glGetCompressedMultiTexImageEXT +#define glGetCompressedTexImage epoxy_glGetCompressedTexImage +#define glGetCompressedTexImageARB epoxy_glGetCompressedTexImageARB +#define glGetCompressedTextureImage epoxy_glGetCompressedTextureImage +#define glGetCompressedTextureImageEXT epoxy_glGetCompressedTextureImageEXT +#define glGetCompressedTextureSubImage epoxy_glGetCompressedTextureSubImage +#define glGetConvolutionFilter epoxy_glGetConvolutionFilter +#define glGetConvolutionFilterEXT epoxy_glGetConvolutionFilterEXT +#define glGetConvolutionParameterfv epoxy_glGetConvolutionParameterfv +#define glGetConvolutionParameterfvEXT epoxy_glGetConvolutionParameterfvEXT +#define glGetConvolutionParameteriv epoxy_glGetConvolutionParameteriv +#define glGetConvolutionParameterivEXT epoxy_glGetConvolutionParameterivEXT +#define glGetConvolutionParameterxvOES epoxy_glGetConvolutionParameterxvOES +#define glGetCoverageModulationTableNV epoxy_glGetCoverageModulationTableNV +#define glGetDebugMessageLog epoxy_glGetDebugMessageLog +#define glGetDebugMessageLogAMD epoxy_glGetDebugMessageLogAMD +#define glGetDebugMessageLogARB epoxy_glGetDebugMessageLogARB +#define glGetDebugMessageLogKHR epoxy_glGetDebugMessageLogKHR +#define glGetDetailTexFuncSGIS epoxy_glGetDetailTexFuncSGIS +#define glGetDoubleIndexedvEXT epoxy_glGetDoubleIndexedvEXT +#define glGetDoublei_v epoxy_glGetDoublei_v +#define glGetDoublei_vEXT epoxy_glGetDoublei_vEXT +#define glGetDoublev epoxy_glGetDoublev +#define glGetDriverControlStringQCOM epoxy_glGetDriverControlStringQCOM +#define glGetDriverControlsQCOM epoxy_glGetDriverControlsQCOM +#define glGetError epoxy_glGetError +#define glGetFenceivNV epoxy_glGetFenceivNV +#define glGetFinalCombinerInputParameterfvNV epoxy_glGetFinalCombinerInputParameterfvNV +#define glGetFinalCombinerInputParameterivNV epoxy_glGetFinalCombinerInputParameterivNV +#define glGetFirstPerfQueryIdINTEL epoxy_glGetFirstPerfQueryIdINTEL +#define glGetFixedv epoxy_glGetFixedv +#define glGetFixedvOES epoxy_glGetFixedvOES +#define glGetFloatIndexedvEXT epoxy_glGetFloatIndexedvEXT +#define glGetFloati_v epoxy_glGetFloati_v +#define glGetFloati_vEXT epoxy_glGetFloati_vEXT +#define glGetFloati_vNV epoxy_glGetFloati_vNV +#define glGetFloatv epoxy_glGetFloatv +#define glGetFogFuncSGIS epoxy_glGetFogFuncSGIS +#define glGetFragDataIndex epoxy_glGetFragDataIndex +#define glGetFragDataIndexEXT epoxy_glGetFragDataIndexEXT +#define glGetFragDataLocation epoxy_glGetFragDataLocation +#define glGetFragDataLocationEXT epoxy_glGetFragDataLocationEXT +#define glGetFragmentLightfvSGIX epoxy_glGetFragmentLightfvSGIX +#define glGetFragmentLightivSGIX epoxy_glGetFragmentLightivSGIX +#define glGetFragmentMaterialfvSGIX epoxy_glGetFragmentMaterialfvSGIX +#define glGetFragmentMaterialivSGIX epoxy_glGetFragmentMaterialivSGIX +#define glGetFramebufferAttachmentParameteriv epoxy_glGetFramebufferAttachmentParameteriv +#define glGetFramebufferAttachmentParameterivEXT epoxy_glGetFramebufferAttachmentParameterivEXT +#define glGetFramebufferAttachmentParameterivOES epoxy_glGetFramebufferAttachmentParameterivOES +#define glGetFramebufferParameteriv epoxy_glGetFramebufferParameteriv +#define glGetFramebufferParameterivEXT epoxy_glGetFramebufferParameterivEXT +#define glGetGraphicsResetStatus epoxy_glGetGraphicsResetStatus +#define glGetGraphicsResetStatusARB epoxy_glGetGraphicsResetStatusARB +#define glGetGraphicsResetStatusEXT epoxy_glGetGraphicsResetStatusEXT +#define glGetGraphicsResetStatusKHR epoxy_glGetGraphicsResetStatusKHR +#define glGetHandleARB epoxy_glGetHandleARB +#define glGetHistogram epoxy_glGetHistogram +#define glGetHistogramEXT epoxy_glGetHistogramEXT +#define glGetHistogramParameterfv epoxy_glGetHistogramParameterfv +#define glGetHistogramParameterfvEXT epoxy_glGetHistogramParameterfvEXT +#define glGetHistogramParameteriv epoxy_glGetHistogramParameteriv +#define glGetHistogramParameterivEXT epoxy_glGetHistogramParameterivEXT +#define glGetHistogramParameterxvOES epoxy_glGetHistogramParameterxvOES +#define glGetImageHandleARB epoxy_glGetImageHandleARB +#define glGetImageHandleNV epoxy_glGetImageHandleNV +#define glGetImageTransformParameterfvHP epoxy_glGetImageTransformParameterfvHP +#define glGetImageTransformParameterivHP epoxy_glGetImageTransformParameterivHP +#define glGetInfoLogARB epoxy_glGetInfoLogARB +#define glGetInstrumentsSGIX epoxy_glGetInstrumentsSGIX +#define glGetInteger64i_v epoxy_glGetInteger64i_v +#define glGetInteger64v epoxy_glGetInteger64v +#define glGetInteger64vAPPLE epoxy_glGetInteger64vAPPLE +#define glGetIntegerIndexedvEXT epoxy_glGetIntegerIndexedvEXT +#define glGetIntegeri_v epoxy_glGetIntegeri_v +#define glGetIntegeri_vEXT epoxy_glGetIntegeri_vEXT +#define glGetIntegerui64i_vNV epoxy_glGetIntegerui64i_vNV +#define glGetIntegerui64vNV epoxy_glGetIntegerui64vNV +#define glGetIntegerv epoxy_glGetIntegerv +#define glGetInternalformatSampleivNV epoxy_glGetInternalformatSampleivNV +#define glGetInternalformati64v epoxy_glGetInternalformati64v +#define glGetInternalformativ epoxy_glGetInternalformativ +#define glGetInvariantBooleanvEXT epoxy_glGetInvariantBooleanvEXT +#define glGetInvariantFloatvEXT epoxy_glGetInvariantFloatvEXT +#define glGetInvariantIntegervEXT epoxy_glGetInvariantIntegervEXT +#define glGetLightfv epoxy_glGetLightfv +#define glGetLightiv epoxy_glGetLightiv +#define glGetLightxOES epoxy_glGetLightxOES +#define glGetLightxv epoxy_glGetLightxv +#define glGetLightxvOES epoxy_glGetLightxvOES +#define glGetListParameterfvSGIX epoxy_glGetListParameterfvSGIX +#define glGetListParameterivSGIX epoxy_glGetListParameterivSGIX +#define glGetLocalConstantBooleanvEXT epoxy_glGetLocalConstantBooleanvEXT +#define glGetLocalConstantFloatvEXT epoxy_glGetLocalConstantFloatvEXT +#define glGetLocalConstantIntegervEXT epoxy_glGetLocalConstantIntegervEXT +#define glGetMapAttribParameterfvNV epoxy_glGetMapAttribParameterfvNV +#define glGetMapAttribParameterivNV epoxy_glGetMapAttribParameterivNV +#define glGetMapControlPointsNV epoxy_glGetMapControlPointsNV +#define glGetMapParameterfvNV epoxy_glGetMapParameterfvNV +#define glGetMapParameterivNV epoxy_glGetMapParameterivNV +#define glGetMapdv epoxy_glGetMapdv +#define glGetMapfv epoxy_glGetMapfv +#define glGetMapiv epoxy_glGetMapiv +#define glGetMapxvOES epoxy_glGetMapxvOES +#define glGetMaterialfv epoxy_glGetMaterialfv +#define glGetMaterialiv epoxy_glGetMaterialiv +#define glGetMaterialxOES epoxy_glGetMaterialxOES +#define glGetMaterialxv epoxy_glGetMaterialxv +#define glGetMaterialxvOES epoxy_glGetMaterialxvOES +#define glGetMinmax epoxy_glGetMinmax +#define glGetMinmaxEXT epoxy_glGetMinmaxEXT +#define glGetMinmaxParameterfv epoxy_glGetMinmaxParameterfv +#define glGetMinmaxParameterfvEXT epoxy_glGetMinmaxParameterfvEXT +#define glGetMinmaxParameteriv epoxy_glGetMinmaxParameteriv +#define glGetMinmaxParameterivEXT epoxy_glGetMinmaxParameterivEXT +#define glGetMultiTexEnvfvEXT epoxy_glGetMultiTexEnvfvEXT +#define glGetMultiTexEnvivEXT epoxy_glGetMultiTexEnvivEXT +#define glGetMultiTexGendvEXT epoxy_glGetMultiTexGendvEXT +#define glGetMultiTexGenfvEXT epoxy_glGetMultiTexGenfvEXT +#define glGetMultiTexGenivEXT epoxy_glGetMultiTexGenivEXT +#define glGetMultiTexImageEXT epoxy_glGetMultiTexImageEXT +#define glGetMultiTexLevelParameterfvEXT epoxy_glGetMultiTexLevelParameterfvEXT +#define glGetMultiTexLevelParameterivEXT epoxy_glGetMultiTexLevelParameterivEXT +#define glGetMultiTexParameterIivEXT epoxy_glGetMultiTexParameterIivEXT +#define glGetMultiTexParameterIuivEXT epoxy_glGetMultiTexParameterIuivEXT +#define glGetMultiTexParameterfvEXT epoxy_glGetMultiTexParameterfvEXT +#define glGetMultiTexParameterivEXT epoxy_glGetMultiTexParameterivEXT +#define glGetMultisamplefv epoxy_glGetMultisamplefv +#define glGetMultisamplefvNV epoxy_glGetMultisamplefvNV +#define glGetNamedBufferParameteri64v epoxy_glGetNamedBufferParameteri64v +#define glGetNamedBufferParameteriv epoxy_glGetNamedBufferParameteriv +#define glGetNamedBufferParameterivEXT epoxy_glGetNamedBufferParameterivEXT +#define glGetNamedBufferParameterui64vNV epoxy_glGetNamedBufferParameterui64vNV +#define glGetNamedBufferPointerv epoxy_glGetNamedBufferPointerv +#define glGetNamedBufferPointervEXT epoxy_glGetNamedBufferPointervEXT +#define glGetNamedBufferSubData epoxy_glGetNamedBufferSubData +#define glGetNamedBufferSubDataEXT epoxy_glGetNamedBufferSubDataEXT +#define glGetNamedFramebufferAttachmentParameteriv epoxy_glGetNamedFramebufferAttachmentParameteriv +#define glGetNamedFramebufferAttachmentParameterivEXT epoxy_glGetNamedFramebufferAttachmentParameterivEXT +#define glGetNamedFramebufferParameteriv epoxy_glGetNamedFramebufferParameteriv +#define glGetNamedFramebufferParameterivEXT epoxy_glGetNamedFramebufferParameterivEXT +#define glGetNamedProgramLocalParameterIivEXT epoxy_glGetNamedProgramLocalParameterIivEXT +#define glGetNamedProgramLocalParameterIuivEXT epoxy_glGetNamedProgramLocalParameterIuivEXT +#define glGetNamedProgramLocalParameterdvEXT epoxy_glGetNamedProgramLocalParameterdvEXT +#define glGetNamedProgramLocalParameterfvEXT epoxy_glGetNamedProgramLocalParameterfvEXT +#define glGetNamedProgramStringEXT epoxy_glGetNamedProgramStringEXT +#define glGetNamedProgramivEXT epoxy_glGetNamedProgramivEXT +#define glGetNamedRenderbufferParameteriv epoxy_glGetNamedRenderbufferParameteriv +#define glGetNamedRenderbufferParameterivEXT epoxy_glGetNamedRenderbufferParameterivEXT +#define glGetNamedStringARB epoxy_glGetNamedStringARB +#define glGetNamedStringivARB epoxy_glGetNamedStringivARB +#define glGetNextPerfQueryIdINTEL epoxy_glGetNextPerfQueryIdINTEL +#define glGetObjectBufferfvATI epoxy_glGetObjectBufferfvATI +#define glGetObjectBufferivATI epoxy_glGetObjectBufferivATI +#define glGetObjectLabel epoxy_glGetObjectLabel +#define glGetObjectLabelEXT epoxy_glGetObjectLabelEXT +#define glGetObjectLabelKHR epoxy_glGetObjectLabelKHR +#define glGetObjectParameterfvARB epoxy_glGetObjectParameterfvARB +#define glGetObjectParameterivAPPLE epoxy_glGetObjectParameterivAPPLE +#define glGetObjectParameterivARB epoxy_glGetObjectParameterivARB +#define glGetObjectPtrLabel epoxy_glGetObjectPtrLabel +#define glGetObjectPtrLabelKHR epoxy_glGetObjectPtrLabelKHR +#define glGetOcclusionQueryivNV epoxy_glGetOcclusionQueryivNV +#define glGetOcclusionQueryuivNV epoxy_glGetOcclusionQueryuivNV +#define glGetPathColorGenfvNV epoxy_glGetPathColorGenfvNV +#define glGetPathColorGenivNV epoxy_glGetPathColorGenivNV +#define glGetPathCommandsNV epoxy_glGetPathCommandsNV +#define glGetPathCoordsNV epoxy_glGetPathCoordsNV +#define glGetPathDashArrayNV epoxy_glGetPathDashArrayNV +#define glGetPathLengthNV epoxy_glGetPathLengthNV +#define glGetPathMetricRangeNV epoxy_glGetPathMetricRangeNV +#define glGetPathMetricsNV epoxy_glGetPathMetricsNV +#define glGetPathParameterfvNV epoxy_glGetPathParameterfvNV +#define glGetPathParameterivNV epoxy_glGetPathParameterivNV +#define glGetPathSpacingNV epoxy_glGetPathSpacingNV +#define glGetPathTexGenfvNV epoxy_glGetPathTexGenfvNV +#define glGetPathTexGenivNV epoxy_glGetPathTexGenivNV +#define glGetPerfCounterInfoINTEL epoxy_glGetPerfCounterInfoINTEL +#define glGetPerfMonitorCounterDataAMD epoxy_glGetPerfMonitorCounterDataAMD +#define glGetPerfMonitorCounterInfoAMD epoxy_glGetPerfMonitorCounterInfoAMD +#define glGetPerfMonitorCounterStringAMD epoxy_glGetPerfMonitorCounterStringAMD +#define glGetPerfMonitorCountersAMD epoxy_glGetPerfMonitorCountersAMD +#define glGetPerfMonitorGroupStringAMD epoxy_glGetPerfMonitorGroupStringAMD +#define glGetPerfMonitorGroupsAMD epoxy_glGetPerfMonitorGroupsAMD +#define glGetPerfQueryDataINTEL epoxy_glGetPerfQueryDataINTEL +#define glGetPerfQueryIdByNameINTEL epoxy_glGetPerfQueryIdByNameINTEL +#define glGetPerfQueryInfoINTEL epoxy_glGetPerfQueryInfoINTEL +#define glGetPixelMapfv epoxy_glGetPixelMapfv +#define glGetPixelMapuiv epoxy_glGetPixelMapuiv +#define glGetPixelMapusv epoxy_glGetPixelMapusv +#define glGetPixelMapxv epoxy_glGetPixelMapxv +#define glGetPixelTexGenParameterfvSGIS epoxy_glGetPixelTexGenParameterfvSGIS +#define glGetPixelTexGenParameterivSGIS epoxy_glGetPixelTexGenParameterivSGIS +#define glGetPixelTransformParameterfvEXT epoxy_glGetPixelTransformParameterfvEXT +#define glGetPixelTransformParameterivEXT epoxy_glGetPixelTransformParameterivEXT +#define glGetPointerIndexedvEXT epoxy_glGetPointerIndexedvEXT +#define glGetPointeri_vEXT epoxy_glGetPointeri_vEXT +#define glGetPointerv epoxy_glGetPointerv +#define glGetPointervEXT epoxy_glGetPointervEXT +#define glGetPointervKHR epoxy_glGetPointervKHR +#define glGetPolygonStipple epoxy_glGetPolygonStipple +#define glGetProgramBinary epoxy_glGetProgramBinary +#define glGetProgramBinaryOES epoxy_glGetProgramBinaryOES +#define glGetProgramEnvParameterIivNV epoxy_glGetProgramEnvParameterIivNV +#define glGetProgramEnvParameterIuivNV epoxy_glGetProgramEnvParameterIuivNV +#define glGetProgramEnvParameterdvARB epoxy_glGetProgramEnvParameterdvARB +#define glGetProgramEnvParameterfvARB epoxy_glGetProgramEnvParameterfvARB +#define glGetProgramInfoLog epoxy_glGetProgramInfoLog +#define glGetProgramInterfaceiv epoxy_glGetProgramInterfaceiv +#define glGetProgramLocalParameterIivNV epoxy_glGetProgramLocalParameterIivNV +#define glGetProgramLocalParameterIuivNV epoxy_glGetProgramLocalParameterIuivNV +#define glGetProgramLocalParameterdvARB epoxy_glGetProgramLocalParameterdvARB +#define glGetProgramLocalParameterfvARB epoxy_glGetProgramLocalParameterfvARB +#define glGetProgramNamedParameterdvNV epoxy_glGetProgramNamedParameterdvNV +#define glGetProgramNamedParameterfvNV epoxy_glGetProgramNamedParameterfvNV +#define glGetProgramParameterdvNV epoxy_glGetProgramParameterdvNV +#define glGetProgramParameterfvNV epoxy_glGetProgramParameterfvNV +#define glGetProgramPipelineInfoLog epoxy_glGetProgramPipelineInfoLog +#define glGetProgramPipelineInfoLogEXT epoxy_glGetProgramPipelineInfoLogEXT +#define glGetProgramPipelineiv epoxy_glGetProgramPipelineiv +#define glGetProgramPipelineivEXT epoxy_glGetProgramPipelineivEXT +#define glGetProgramResourceIndex epoxy_glGetProgramResourceIndex +#define glGetProgramResourceLocation epoxy_glGetProgramResourceLocation +#define glGetProgramResourceLocationIndex epoxy_glGetProgramResourceLocationIndex +#define glGetProgramResourceLocationIndexEXT epoxy_glGetProgramResourceLocationIndexEXT +#define glGetProgramResourceName epoxy_glGetProgramResourceName +#define glGetProgramResourcefvNV epoxy_glGetProgramResourcefvNV +#define glGetProgramResourceiv epoxy_glGetProgramResourceiv +#define glGetProgramStageiv epoxy_glGetProgramStageiv +#define glGetProgramStringARB epoxy_glGetProgramStringARB +#define glGetProgramStringNV epoxy_glGetProgramStringNV +#define glGetProgramSubroutineParameteruivNV epoxy_glGetProgramSubroutineParameteruivNV +#define glGetProgramiv epoxy_glGetProgramiv +#define glGetProgramivARB epoxy_glGetProgramivARB +#define glGetProgramivNV epoxy_glGetProgramivNV +#define glGetQueryBufferObjecti64v epoxy_glGetQueryBufferObjecti64v +#define glGetQueryBufferObjectiv epoxy_glGetQueryBufferObjectiv +#define glGetQueryBufferObjectui64v epoxy_glGetQueryBufferObjectui64v +#define glGetQueryBufferObjectuiv epoxy_glGetQueryBufferObjectuiv +#define glGetQueryIndexediv epoxy_glGetQueryIndexediv +#define glGetQueryObjecti64v epoxy_glGetQueryObjecti64v +#define glGetQueryObjecti64vEXT epoxy_glGetQueryObjecti64vEXT +#define glGetQueryObjectiv epoxy_glGetQueryObjectiv +#define glGetQueryObjectivARB epoxy_glGetQueryObjectivARB +#define glGetQueryObjectivEXT epoxy_glGetQueryObjectivEXT +#define glGetQueryObjectui64v epoxy_glGetQueryObjectui64v +#define glGetQueryObjectui64vEXT epoxy_glGetQueryObjectui64vEXT +#define glGetQueryObjectuiv epoxy_glGetQueryObjectuiv +#define glGetQueryObjectuivARB epoxy_glGetQueryObjectuivARB +#define glGetQueryObjectuivEXT epoxy_glGetQueryObjectuivEXT +#define glGetQueryiv epoxy_glGetQueryiv +#define glGetQueryivARB epoxy_glGetQueryivARB +#define glGetQueryivEXT epoxy_glGetQueryivEXT +#define glGetRenderbufferParameteriv epoxy_glGetRenderbufferParameteriv +#define glGetRenderbufferParameterivEXT epoxy_glGetRenderbufferParameterivEXT +#define glGetRenderbufferParameterivOES epoxy_glGetRenderbufferParameterivOES +#define glGetSamplerParameterIiv epoxy_glGetSamplerParameterIiv +#define glGetSamplerParameterIivEXT epoxy_glGetSamplerParameterIivEXT +#define glGetSamplerParameterIivOES epoxy_glGetSamplerParameterIivOES +#define glGetSamplerParameterIuiv epoxy_glGetSamplerParameterIuiv +#define glGetSamplerParameterIuivEXT epoxy_glGetSamplerParameterIuivEXT +#define glGetSamplerParameterIuivOES epoxy_glGetSamplerParameterIuivOES +#define glGetSamplerParameterfv epoxy_glGetSamplerParameterfv +#define glGetSamplerParameteriv epoxy_glGetSamplerParameteriv +#define glGetSeparableFilter epoxy_glGetSeparableFilter +#define glGetSeparableFilterEXT epoxy_glGetSeparableFilterEXT +#define glGetShaderInfoLog epoxy_glGetShaderInfoLog +#define glGetShaderPrecisionFormat epoxy_glGetShaderPrecisionFormat +#define glGetShaderSource epoxy_glGetShaderSource +#define glGetShaderSourceARB epoxy_glGetShaderSourceARB +#define glGetShaderiv epoxy_glGetShaderiv +#define glGetSharpenTexFuncSGIS epoxy_glGetSharpenTexFuncSGIS +#define glGetStageIndexNV epoxy_glGetStageIndexNV +#define glGetString epoxy_glGetString +#define glGetStringi epoxy_glGetStringi +#define glGetSubroutineIndex epoxy_glGetSubroutineIndex +#define glGetSubroutineUniformLocation epoxy_glGetSubroutineUniformLocation +#define glGetSynciv epoxy_glGetSynciv +#define glGetSyncivAPPLE epoxy_glGetSyncivAPPLE +#define glGetTexBumpParameterfvATI epoxy_glGetTexBumpParameterfvATI +#define glGetTexBumpParameterivATI epoxy_glGetTexBumpParameterivATI +#define glGetTexEnvfv epoxy_glGetTexEnvfv +#define glGetTexEnviv epoxy_glGetTexEnviv +#define glGetTexEnvxv epoxy_glGetTexEnvxv +#define glGetTexEnvxvOES epoxy_glGetTexEnvxvOES +#define glGetTexFilterFuncSGIS epoxy_glGetTexFilterFuncSGIS +#define glGetTexGendv epoxy_glGetTexGendv +#define glGetTexGenfv epoxy_glGetTexGenfv +#define glGetTexGenfvOES epoxy_glGetTexGenfvOES +#define glGetTexGeniv epoxy_glGetTexGeniv +#define glGetTexGenivOES epoxy_glGetTexGenivOES +#define glGetTexGenxvOES epoxy_glGetTexGenxvOES +#define glGetTexImage epoxy_glGetTexImage +#define glGetTexLevelParameterfv epoxy_glGetTexLevelParameterfv +#define glGetTexLevelParameteriv epoxy_glGetTexLevelParameteriv +#define glGetTexLevelParameterxvOES epoxy_glGetTexLevelParameterxvOES +#define glGetTexParameterIiv epoxy_glGetTexParameterIiv +#define glGetTexParameterIivEXT epoxy_glGetTexParameterIivEXT +#define glGetTexParameterIivOES epoxy_glGetTexParameterIivOES +#define glGetTexParameterIuiv epoxy_glGetTexParameterIuiv +#define glGetTexParameterIuivEXT epoxy_glGetTexParameterIuivEXT +#define glGetTexParameterIuivOES epoxy_glGetTexParameterIuivOES +#define glGetTexParameterPointervAPPLE epoxy_glGetTexParameterPointervAPPLE +#define glGetTexParameterfv epoxy_glGetTexParameterfv +#define glGetTexParameteriv epoxy_glGetTexParameteriv +#define glGetTexParameterxv epoxy_glGetTexParameterxv +#define glGetTexParameterxvOES epoxy_glGetTexParameterxvOES +#define glGetTextureHandleARB epoxy_glGetTextureHandleARB +#define glGetTextureHandleNV epoxy_glGetTextureHandleNV +#define glGetTextureImage epoxy_glGetTextureImage +#define glGetTextureImageEXT epoxy_glGetTextureImageEXT +#define glGetTextureLevelParameterfv epoxy_glGetTextureLevelParameterfv +#define glGetTextureLevelParameterfvEXT epoxy_glGetTextureLevelParameterfvEXT +#define glGetTextureLevelParameteriv epoxy_glGetTextureLevelParameteriv +#define glGetTextureLevelParameterivEXT epoxy_glGetTextureLevelParameterivEXT +#define glGetTextureParameterIiv epoxy_glGetTextureParameterIiv +#define glGetTextureParameterIivEXT epoxy_glGetTextureParameterIivEXT +#define glGetTextureParameterIuiv epoxy_glGetTextureParameterIuiv +#define glGetTextureParameterIuivEXT epoxy_glGetTextureParameterIuivEXT +#define glGetTextureParameterfv epoxy_glGetTextureParameterfv +#define glGetTextureParameterfvEXT epoxy_glGetTextureParameterfvEXT +#define glGetTextureParameteriv epoxy_glGetTextureParameteriv +#define glGetTextureParameterivEXT epoxy_glGetTextureParameterivEXT +#define glGetTextureSamplerHandleARB epoxy_glGetTextureSamplerHandleARB +#define glGetTextureSamplerHandleNV epoxy_glGetTextureSamplerHandleNV +#define glGetTextureSubImage epoxy_glGetTextureSubImage +#define glGetTrackMatrixivNV epoxy_glGetTrackMatrixivNV +#define glGetTransformFeedbackVarying epoxy_glGetTransformFeedbackVarying +#define glGetTransformFeedbackVaryingEXT epoxy_glGetTransformFeedbackVaryingEXT +#define glGetTransformFeedbackVaryingNV epoxy_glGetTransformFeedbackVaryingNV +#define glGetTransformFeedbacki64_v epoxy_glGetTransformFeedbacki64_v +#define glGetTransformFeedbacki_v epoxy_glGetTransformFeedbacki_v +#define glGetTransformFeedbackiv epoxy_glGetTransformFeedbackiv +#define glGetTranslatedShaderSourceANGLE epoxy_glGetTranslatedShaderSourceANGLE +#define glGetUniformBlockIndex epoxy_glGetUniformBlockIndex +#define glGetUniformBufferSizeEXT epoxy_glGetUniformBufferSizeEXT +#define glGetUniformIndices epoxy_glGetUniformIndices +#define glGetUniformLocation epoxy_glGetUniformLocation +#define glGetUniformLocationARB epoxy_glGetUniformLocationARB +#define glGetUniformOffsetEXT epoxy_glGetUniformOffsetEXT +#define glGetUniformSubroutineuiv epoxy_glGetUniformSubroutineuiv +#define glGetUniformdv epoxy_glGetUniformdv +#define glGetUniformfv epoxy_glGetUniformfv +#define glGetUniformfvARB epoxy_glGetUniformfvARB +#define glGetUniformi64vARB epoxy_glGetUniformi64vARB +#define glGetUniformi64vNV epoxy_glGetUniformi64vNV +#define glGetUniformiv epoxy_glGetUniformiv +#define glGetUniformivARB epoxy_glGetUniformivARB +#define glGetUniformui64vARB epoxy_glGetUniformui64vARB +#define glGetUniformui64vNV epoxy_glGetUniformui64vNV +#define glGetUniformuiv epoxy_glGetUniformuiv +#define glGetUniformuivEXT epoxy_glGetUniformuivEXT +#define glGetVariantArrayObjectfvATI epoxy_glGetVariantArrayObjectfvATI +#define glGetVariantArrayObjectivATI epoxy_glGetVariantArrayObjectivATI +#define glGetVariantBooleanvEXT epoxy_glGetVariantBooleanvEXT +#define glGetVariantFloatvEXT epoxy_glGetVariantFloatvEXT +#define glGetVariantIntegervEXT epoxy_glGetVariantIntegervEXT +#define glGetVariantPointervEXT epoxy_glGetVariantPointervEXT +#define glGetVaryingLocationNV epoxy_glGetVaryingLocationNV +#define glGetVertexArrayIndexed64iv epoxy_glGetVertexArrayIndexed64iv +#define glGetVertexArrayIndexediv epoxy_glGetVertexArrayIndexediv +#define glGetVertexArrayIntegeri_vEXT epoxy_glGetVertexArrayIntegeri_vEXT +#define glGetVertexArrayIntegervEXT epoxy_glGetVertexArrayIntegervEXT +#define glGetVertexArrayPointeri_vEXT epoxy_glGetVertexArrayPointeri_vEXT +#define glGetVertexArrayPointervEXT epoxy_glGetVertexArrayPointervEXT +#define glGetVertexArrayiv epoxy_glGetVertexArrayiv +#define glGetVertexAttribArrayObjectfvATI epoxy_glGetVertexAttribArrayObjectfvATI +#define glGetVertexAttribArrayObjectivATI epoxy_glGetVertexAttribArrayObjectivATI +#define glGetVertexAttribIiv epoxy_glGetVertexAttribIiv +#define glGetVertexAttribIivEXT epoxy_glGetVertexAttribIivEXT +#define glGetVertexAttribIuiv epoxy_glGetVertexAttribIuiv +#define glGetVertexAttribIuivEXT epoxy_glGetVertexAttribIuivEXT +#define glGetVertexAttribLdv epoxy_glGetVertexAttribLdv +#define glGetVertexAttribLdvEXT epoxy_glGetVertexAttribLdvEXT +#define glGetVertexAttribLi64vNV epoxy_glGetVertexAttribLi64vNV +#define glGetVertexAttribLui64vARB epoxy_glGetVertexAttribLui64vARB +#define glGetVertexAttribLui64vNV epoxy_glGetVertexAttribLui64vNV +#define glGetVertexAttribPointerv epoxy_glGetVertexAttribPointerv +#define glGetVertexAttribPointervARB epoxy_glGetVertexAttribPointervARB +#define glGetVertexAttribPointervNV epoxy_glGetVertexAttribPointervNV +#define glGetVertexAttribdv epoxy_glGetVertexAttribdv +#define glGetVertexAttribdvARB epoxy_glGetVertexAttribdvARB +#define glGetVertexAttribdvNV epoxy_glGetVertexAttribdvNV +#define glGetVertexAttribfv epoxy_glGetVertexAttribfv +#define glGetVertexAttribfvARB epoxy_glGetVertexAttribfvARB +#define glGetVertexAttribfvNV epoxy_glGetVertexAttribfvNV +#define glGetVertexAttribiv epoxy_glGetVertexAttribiv +#define glGetVertexAttribivARB epoxy_glGetVertexAttribivARB +#define glGetVertexAttribivNV epoxy_glGetVertexAttribivNV +#define glGetVideoCaptureStreamdvNV epoxy_glGetVideoCaptureStreamdvNV +#define glGetVideoCaptureStreamfvNV epoxy_glGetVideoCaptureStreamfvNV +#define glGetVideoCaptureStreamivNV epoxy_glGetVideoCaptureStreamivNV +#define glGetVideoCaptureivNV epoxy_glGetVideoCaptureivNV +#define glGetVideoi64vNV epoxy_glGetVideoi64vNV +#define glGetVideoivNV epoxy_glGetVideoivNV +#define glGetVideoui64vNV epoxy_glGetVideoui64vNV +#define glGetVideouivNV epoxy_glGetVideouivNV +#define glGetnColorTable epoxy_glGetnColorTable +#define glGetnColorTableARB epoxy_glGetnColorTableARB +#define glGetnCompressedTexImage epoxy_glGetnCompressedTexImage +#define glGetnCompressedTexImageARB epoxy_glGetnCompressedTexImageARB +#define glGetnConvolutionFilter epoxy_glGetnConvolutionFilter +#define glGetnConvolutionFilterARB epoxy_glGetnConvolutionFilterARB +#define glGetnHistogram epoxy_glGetnHistogram +#define glGetnHistogramARB epoxy_glGetnHistogramARB +#define glGetnMapdv epoxy_glGetnMapdv +#define glGetnMapdvARB epoxy_glGetnMapdvARB +#define glGetnMapfv epoxy_glGetnMapfv +#define glGetnMapfvARB epoxy_glGetnMapfvARB +#define glGetnMapiv epoxy_glGetnMapiv +#define glGetnMapivARB epoxy_glGetnMapivARB +#define glGetnMinmax epoxy_glGetnMinmax +#define glGetnMinmaxARB epoxy_glGetnMinmaxARB +#define glGetnPixelMapfv epoxy_glGetnPixelMapfv +#define glGetnPixelMapfvARB epoxy_glGetnPixelMapfvARB +#define glGetnPixelMapuiv epoxy_glGetnPixelMapuiv +#define glGetnPixelMapuivARB epoxy_glGetnPixelMapuivARB +#define glGetnPixelMapusv epoxy_glGetnPixelMapusv +#define glGetnPixelMapusvARB epoxy_glGetnPixelMapusvARB +#define glGetnPolygonStipple epoxy_glGetnPolygonStipple +#define glGetnPolygonStippleARB epoxy_glGetnPolygonStippleARB +#define glGetnSeparableFilter epoxy_glGetnSeparableFilter +#define glGetnSeparableFilterARB epoxy_glGetnSeparableFilterARB +#define glGetnTexImage epoxy_glGetnTexImage +#define glGetnTexImageARB epoxy_glGetnTexImageARB +#define glGetnUniformdv epoxy_glGetnUniformdv +#define glGetnUniformdvARB epoxy_glGetnUniformdvARB +#define glGetnUniformfv epoxy_glGetnUniformfv +#define glGetnUniformfvARB epoxy_glGetnUniformfvARB +#define glGetnUniformfvEXT epoxy_glGetnUniformfvEXT +#define glGetnUniformfvKHR epoxy_glGetnUniformfvKHR +#define glGetnUniformi64vARB epoxy_glGetnUniformi64vARB +#define glGetnUniformiv epoxy_glGetnUniformiv +#define glGetnUniformivARB epoxy_glGetnUniformivARB +#define glGetnUniformivEXT epoxy_glGetnUniformivEXT +#define glGetnUniformivKHR epoxy_glGetnUniformivKHR +#define glGetnUniformui64vARB epoxy_glGetnUniformui64vARB +#define glGetnUniformuiv epoxy_glGetnUniformuiv +#define glGetnUniformuivARB epoxy_glGetnUniformuivARB +#define glGetnUniformuivKHR epoxy_glGetnUniformuivKHR +#define glGlobalAlphaFactorbSUN epoxy_glGlobalAlphaFactorbSUN +#define glGlobalAlphaFactordSUN epoxy_glGlobalAlphaFactordSUN +#define glGlobalAlphaFactorfSUN epoxy_glGlobalAlphaFactorfSUN +#define glGlobalAlphaFactoriSUN epoxy_glGlobalAlphaFactoriSUN +#define glGlobalAlphaFactorsSUN epoxy_glGlobalAlphaFactorsSUN +#define glGlobalAlphaFactorubSUN epoxy_glGlobalAlphaFactorubSUN +#define glGlobalAlphaFactoruiSUN epoxy_glGlobalAlphaFactoruiSUN +#define glGlobalAlphaFactorusSUN epoxy_glGlobalAlphaFactorusSUN +#define glHint epoxy_glHint +#define glHintPGI epoxy_glHintPGI +#define glHistogram epoxy_glHistogram +#define glHistogramEXT epoxy_glHistogramEXT +#define glIglooInterfaceSGIX epoxy_glIglooInterfaceSGIX +#define glImageTransformParameterfHP epoxy_glImageTransformParameterfHP +#define glImageTransformParameterfvHP epoxy_glImageTransformParameterfvHP +#define glImageTransformParameteriHP epoxy_glImageTransformParameteriHP +#define glImageTransformParameterivHP epoxy_glImageTransformParameterivHP +#define glImportSyncEXT epoxy_glImportSyncEXT +#define glIndexFormatNV epoxy_glIndexFormatNV +#define glIndexFuncEXT epoxy_glIndexFuncEXT +#define glIndexMask epoxy_glIndexMask +#define glIndexMaterialEXT epoxy_glIndexMaterialEXT +#define glIndexPointer epoxy_glIndexPointer +#define glIndexPointerEXT epoxy_glIndexPointerEXT +#define glIndexPointerListIBM epoxy_glIndexPointerListIBM +#define glIndexd epoxy_glIndexd +#define glIndexdv epoxy_glIndexdv +#define glIndexf epoxy_glIndexf +#define glIndexfv epoxy_glIndexfv +#define glIndexi epoxy_glIndexi +#define glIndexiv epoxy_glIndexiv +#define glIndexs epoxy_glIndexs +#define glIndexsv epoxy_glIndexsv +#define glIndexub epoxy_glIndexub +#define glIndexubv epoxy_glIndexubv +#define glIndexxOES epoxy_glIndexxOES +#define glIndexxvOES epoxy_glIndexxvOES +#define glInitNames epoxy_glInitNames +#define glInsertComponentEXT epoxy_glInsertComponentEXT +#define glInsertEventMarkerEXT epoxy_glInsertEventMarkerEXT +#define glInstrumentsBufferSGIX epoxy_glInstrumentsBufferSGIX +#define glInterleavedArrays epoxy_glInterleavedArrays +#define glInterpolatePathsNV epoxy_glInterpolatePathsNV +#define glInvalidateBufferData epoxy_glInvalidateBufferData +#define glInvalidateBufferSubData epoxy_glInvalidateBufferSubData +#define glInvalidateFramebuffer epoxy_glInvalidateFramebuffer +#define glInvalidateNamedFramebufferData epoxy_glInvalidateNamedFramebufferData +#define glInvalidateNamedFramebufferSubData epoxy_glInvalidateNamedFramebufferSubData +#define glInvalidateSubFramebuffer epoxy_glInvalidateSubFramebuffer +#define glInvalidateTexImage epoxy_glInvalidateTexImage +#define glInvalidateTexSubImage epoxy_glInvalidateTexSubImage +#define glIsAsyncMarkerSGIX epoxy_glIsAsyncMarkerSGIX +#define glIsBuffer epoxy_glIsBuffer +#define glIsBufferARB epoxy_glIsBufferARB +#define glIsBufferResidentNV epoxy_glIsBufferResidentNV +#define glIsCommandListNV epoxy_glIsCommandListNV +#define glIsEnabled epoxy_glIsEnabled +#define glIsEnabledIndexedEXT epoxy_glIsEnabledIndexedEXT +#define glIsEnabledi epoxy_glIsEnabledi +#define glIsEnablediEXT epoxy_glIsEnablediEXT +#define glIsEnablediNV epoxy_glIsEnablediNV +#define glIsEnablediOES epoxy_glIsEnablediOES +#define glIsFenceAPPLE epoxy_glIsFenceAPPLE +#define glIsFenceNV epoxy_glIsFenceNV +#define glIsFramebuffer epoxy_glIsFramebuffer +#define glIsFramebufferEXT epoxy_glIsFramebufferEXT +#define glIsFramebufferOES epoxy_glIsFramebufferOES +#define glIsImageHandleResidentARB epoxy_glIsImageHandleResidentARB +#define glIsImageHandleResidentNV epoxy_glIsImageHandleResidentNV +#define glIsList epoxy_glIsList +#define glIsNameAMD epoxy_glIsNameAMD +#define glIsNamedBufferResidentNV epoxy_glIsNamedBufferResidentNV +#define glIsNamedStringARB epoxy_glIsNamedStringARB +#define glIsObjectBufferATI epoxy_glIsObjectBufferATI +#define glIsOcclusionQueryNV epoxy_glIsOcclusionQueryNV +#define glIsPathNV epoxy_glIsPathNV +#define glIsPointInFillPathNV epoxy_glIsPointInFillPathNV +#define glIsPointInStrokePathNV epoxy_glIsPointInStrokePathNV +#define glIsProgram epoxy_glIsProgram +#define glIsProgramARB epoxy_glIsProgramARB +#define glIsProgramNV epoxy_glIsProgramNV +#define glIsProgramPipeline epoxy_glIsProgramPipeline +#define glIsProgramPipelineEXT epoxy_glIsProgramPipelineEXT +#define glIsQuery epoxy_glIsQuery +#define glIsQueryARB epoxy_glIsQueryARB +#define glIsQueryEXT epoxy_glIsQueryEXT +#define glIsRenderbuffer epoxy_glIsRenderbuffer +#define glIsRenderbufferEXT epoxy_glIsRenderbufferEXT +#define glIsRenderbufferOES epoxy_glIsRenderbufferOES +#define glIsSampler epoxy_glIsSampler +#define glIsShader epoxy_glIsShader +#define glIsStateNV epoxy_glIsStateNV +#define glIsSync epoxy_glIsSync +#define glIsSyncAPPLE epoxy_glIsSyncAPPLE +#define glIsTexture epoxy_glIsTexture +#define glIsTextureEXT epoxy_glIsTextureEXT +#define glIsTextureHandleResidentARB epoxy_glIsTextureHandleResidentARB +#define glIsTextureHandleResidentNV epoxy_glIsTextureHandleResidentNV +#define glIsTransformFeedback epoxy_glIsTransformFeedback +#define glIsTransformFeedbackNV epoxy_glIsTransformFeedbackNV +#define glIsVariantEnabledEXT epoxy_glIsVariantEnabledEXT +#define glIsVertexArray epoxy_glIsVertexArray +#define glIsVertexArrayAPPLE epoxy_glIsVertexArrayAPPLE +#define glIsVertexArrayOES epoxy_glIsVertexArrayOES +#define glIsVertexAttribEnabledAPPLE epoxy_glIsVertexAttribEnabledAPPLE +#define glLabelObjectEXT epoxy_glLabelObjectEXT +#define glLightEnviSGIX epoxy_glLightEnviSGIX +#define glLightModelf epoxy_glLightModelf +#define glLightModelfv epoxy_glLightModelfv +#define glLightModeli epoxy_glLightModeli +#define glLightModeliv epoxy_glLightModeliv +#define glLightModelx epoxy_glLightModelx +#define glLightModelxOES epoxy_glLightModelxOES +#define glLightModelxv epoxy_glLightModelxv +#define glLightModelxvOES epoxy_glLightModelxvOES +#define glLightf epoxy_glLightf +#define glLightfv epoxy_glLightfv +#define glLighti epoxy_glLighti +#define glLightiv epoxy_glLightiv +#define glLightx epoxy_glLightx +#define glLightxOES epoxy_glLightxOES +#define glLightxv epoxy_glLightxv +#define glLightxvOES epoxy_glLightxvOES +#define glLineStipple epoxy_glLineStipple +#define glLineWidth epoxy_glLineWidth +#define glLineWidthx epoxy_glLineWidthx +#define glLineWidthxOES epoxy_glLineWidthxOES +#define glLinkProgram epoxy_glLinkProgram +#define glLinkProgramARB epoxy_glLinkProgramARB +#define glListBase epoxy_glListBase +#define glListDrawCommandsStatesClientNV epoxy_glListDrawCommandsStatesClientNV +#define glListParameterfSGIX epoxy_glListParameterfSGIX +#define glListParameterfvSGIX epoxy_glListParameterfvSGIX +#define glListParameteriSGIX epoxy_glListParameteriSGIX +#define glListParameterivSGIX epoxy_glListParameterivSGIX +#define glLoadIdentity epoxy_glLoadIdentity +#define glLoadIdentityDeformationMapSGIX epoxy_glLoadIdentityDeformationMapSGIX +#define glLoadMatrixd epoxy_glLoadMatrixd +#define glLoadMatrixf epoxy_glLoadMatrixf +#define glLoadMatrixx epoxy_glLoadMatrixx +#define glLoadMatrixxOES epoxy_glLoadMatrixxOES +#define glLoadName epoxy_glLoadName +#define glLoadPaletteFromModelViewMatrixOES epoxy_glLoadPaletteFromModelViewMatrixOES +#define glLoadProgramNV epoxy_glLoadProgramNV +#define glLoadTransposeMatrixd epoxy_glLoadTransposeMatrixd +#define glLoadTransposeMatrixdARB epoxy_glLoadTransposeMatrixdARB +#define glLoadTransposeMatrixf epoxy_glLoadTransposeMatrixf +#define glLoadTransposeMatrixfARB epoxy_glLoadTransposeMatrixfARB +#define glLoadTransposeMatrixxOES epoxy_glLoadTransposeMatrixxOES +#define glLockArraysEXT epoxy_glLockArraysEXT +#define glLogicOp epoxy_glLogicOp +#define glMakeBufferNonResidentNV epoxy_glMakeBufferNonResidentNV +#define glMakeBufferResidentNV epoxy_glMakeBufferResidentNV +#define glMakeImageHandleNonResidentARB epoxy_glMakeImageHandleNonResidentARB +#define glMakeImageHandleNonResidentNV epoxy_glMakeImageHandleNonResidentNV +#define glMakeImageHandleResidentARB epoxy_glMakeImageHandleResidentARB +#define glMakeImageHandleResidentNV epoxy_glMakeImageHandleResidentNV +#define glMakeNamedBufferNonResidentNV epoxy_glMakeNamedBufferNonResidentNV +#define glMakeNamedBufferResidentNV epoxy_glMakeNamedBufferResidentNV +#define glMakeTextureHandleNonResidentARB epoxy_glMakeTextureHandleNonResidentARB +#define glMakeTextureHandleNonResidentNV epoxy_glMakeTextureHandleNonResidentNV +#define glMakeTextureHandleResidentARB epoxy_glMakeTextureHandleResidentARB +#define glMakeTextureHandleResidentNV epoxy_glMakeTextureHandleResidentNV +#define glMap1d epoxy_glMap1d +#define glMap1f epoxy_glMap1f +#define glMap1xOES epoxy_glMap1xOES +#define glMap2d epoxy_glMap2d +#define glMap2f epoxy_glMap2f +#define glMap2xOES epoxy_glMap2xOES +#define glMapBuffer epoxy_glMapBuffer +#define glMapBufferARB epoxy_glMapBufferARB +#define glMapBufferOES epoxy_glMapBufferOES +#define glMapBufferRange epoxy_glMapBufferRange +#define glMapBufferRangeEXT epoxy_glMapBufferRangeEXT +#define glMapControlPointsNV epoxy_glMapControlPointsNV +#define glMapGrid1d epoxy_glMapGrid1d +#define glMapGrid1f epoxy_glMapGrid1f +#define glMapGrid1xOES epoxy_glMapGrid1xOES +#define glMapGrid2d epoxy_glMapGrid2d +#define glMapGrid2f epoxy_glMapGrid2f +#define glMapGrid2xOES epoxy_glMapGrid2xOES +#define glMapNamedBuffer epoxy_glMapNamedBuffer +#define glMapNamedBufferEXT epoxy_glMapNamedBufferEXT +#define glMapNamedBufferRange epoxy_glMapNamedBufferRange +#define glMapNamedBufferRangeEXT epoxy_glMapNamedBufferRangeEXT +#define glMapObjectBufferATI epoxy_glMapObjectBufferATI +#define glMapParameterfvNV epoxy_glMapParameterfvNV +#define glMapParameterivNV epoxy_glMapParameterivNV +#define glMapTexture2DINTEL epoxy_glMapTexture2DINTEL +#define glMapVertexAttrib1dAPPLE epoxy_glMapVertexAttrib1dAPPLE +#define glMapVertexAttrib1fAPPLE epoxy_glMapVertexAttrib1fAPPLE +#define glMapVertexAttrib2dAPPLE epoxy_glMapVertexAttrib2dAPPLE +#define glMapVertexAttrib2fAPPLE epoxy_glMapVertexAttrib2fAPPLE +#define glMaterialf epoxy_glMaterialf +#define glMaterialfv epoxy_glMaterialfv +#define glMateriali epoxy_glMateriali +#define glMaterialiv epoxy_glMaterialiv +#define glMaterialx epoxy_glMaterialx +#define glMaterialxOES epoxy_glMaterialxOES +#define glMaterialxv epoxy_glMaterialxv +#define glMaterialxvOES epoxy_glMaterialxvOES +#define glMatrixFrustumEXT epoxy_glMatrixFrustumEXT +#define glMatrixIndexPointerARB epoxy_glMatrixIndexPointerARB +#define glMatrixIndexPointerOES epoxy_glMatrixIndexPointerOES +#define glMatrixIndexubvARB epoxy_glMatrixIndexubvARB +#define glMatrixIndexuivARB epoxy_glMatrixIndexuivARB +#define glMatrixIndexusvARB epoxy_glMatrixIndexusvARB +#define glMatrixLoad3x2fNV epoxy_glMatrixLoad3x2fNV +#define glMatrixLoad3x3fNV epoxy_glMatrixLoad3x3fNV +#define glMatrixLoadIdentityEXT epoxy_glMatrixLoadIdentityEXT +#define glMatrixLoadTranspose3x3fNV epoxy_glMatrixLoadTranspose3x3fNV +#define glMatrixLoadTransposedEXT epoxy_glMatrixLoadTransposedEXT +#define glMatrixLoadTransposefEXT epoxy_glMatrixLoadTransposefEXT +#define glMatrixLoaddEXT epoxy_glMatrixLoaddEXT +#define glMatrixLoadfEXT epoxy_glMatrixLoadfEXT +#define glMatrixMode epoxy_glMatrixMode +#define glMatrixMult3x2fNV epoxy_glMatrixMult3x2fNV +#define glMatrixMult3x3fNV epoxy_glMatrixMult3x3fNV +#define glMatrixMultTranspose3x3fNV epoxy_glMatrixMultTranspose3x3fNV +#define glMatrixMultTransposedEXT epoxy_glMatrixMultTransposedEXT +#define glMatrixMultTransposefEXT epoxy_glMatrixMultTransposefEXT +#define glMatrixMultdEXT epoxy_glMatrixMultdEXT +#define glMatrixMultfEXT epoxy_glMatrixMultfEXT +#define glMatrixOrthoEXT epoxy_glMatrixOrthoEXT +#define glMatrixPopEXT epoxy_glMatrixPopEXT +#define glMatrixPushEXT epoxy_glMatrixPushEXT +#define glMatrixRotatedEXT epoxy_glMatrixRotatedEXT +#define glMatrixRotatefEXT epoxy_glMatrixRotatefEXT +#define glMatrixScaledEXT epoxy_glMatrixScaledEXT +#define glMatrixScalefEXT epoxy_glMatrixScalefEXT +#define glMatrixTranslatedEXT epoxy_glMatrixTranslatedEXT +#define glMatrixTranslatefEXT epoxy_glMatrixTranslatefEXT +#define glMaxShaderCompilerThreadsARB epoxy_glMaxShaderCompilerThreadsARB +#define glMemoryBarrier epoxy_glMemoryBarrier +#define glMemoryBarrierByRegion epoxy_glMemoryBarrierByRegion +#define glMemoryBarrierEXT epoxy_glMemoryBarrierEXT +#define glMinSampleShading epoxy_glMinSampleShading +#define glMinSampleShadingARB epoxy_glMinSampleShadingARB +#define glMinSampleShadingOES epoxy_glMinSampleShadingOES +#define glMinmax epoxy_glMinmax +#define glMinmaxEXT epoxy_glMinmaxEXT +#define glMultMatrixd epoxy_glMultMatrixd +#define glMultMatrixf epoxy_glMultMatrixf +#define glMultMatrixx epoxy_glMultMatrixx +#define glMultMatrixxOES epoxy_glMultMatrixxOES +#define glMultTransposeMatrixd epoxy_glMultTransposeMatrixd +#define glMultTransposeMatrixdARB epoxy_glMultTransposeMatrixdARB +#define glMultTransposeMatrixf epoxy_glMultTransposeMatrixf +#define glMultTransposeMatrixfARB epoxy_glMultTransposeMatrixfARB +#define glMultTransposeMatrixxOES epoxy_glMultTransposeMatrixxOES +#define glMultiDrawArrays epoxy_glMultiDrawArrays +#define glMultiDrawArraysEXT epoxy_glMultiDrawArraysEXT +#define glMultiDrawArraysIndirect epoxy_glMultiDrawArraysIndirect +#define glMultiDrawArraysIndirectAMD epoxy_glMultiDrawArraysIndirectAMD +#define glMultiDrawArraysIndirectBindlessCountNV epoxy_glMultiDrawArraysIndirectBindlessCountNV +#define glMultiDrawArraysIndirectBindlessNV epoxy_glMultiDrawArraysIndirectBindlessNV +#define glMultiDrawArraysIndirectCountARB epoxy_glMultiDrawArraysIndirectCountARB +#define glMultiDrawArraysIndirectEXT epoxy_glMultiDrawArraysIndirectEXT +#define glMultiDrawElementArrayAPPLE epoxy_glMultiDrawElementArrayAPPLE +#define glMultiDrawElements epoxy_glMultiDrawElements +#define glMultiDrawElementsBaseVertex epoxy_glMultiDrawElementsBaseVertex +#define glMultiDrawElementsBaseVertexEXT epoxy_glMultiDrawElementsBaseVertexEXT +#define glMultiDrawElementsBaseVertexOES epoxy_glMultiDrawElementsBaseVertexOES +#define glMultiDrawElementsEXT epoxy_glMultiDrawElementsEXT +#define glMultiDrawElementsIndirect epoxy_glMultiDrawElementsIndirect +#define glMultiDrawElementsIndirectAMD epoxy_glMultiDrawElementsIndirectAMD +#define glMultiDrawElementsIndirectBindlessCountNV epoxy_glMultiDrawElementsIndirectBindlessCountNV +#define glMultiDrawElementsIndirectBindlessNV epoxy_glMultiDrawElementsIndirectBindlessNV +#define glMultiDrawElementsIndirectCountARB epoxy_glMultiDrawElementsIndirectCountARB +#define glMultiDrawElementsIndirectEXT epoxy_glMultiDrawElementsIndirectEXT +#define glMultiDrawRangeElementArrayAPPLE epoxy_glMultiDrawRangeElementArrayAPPLE +#define glMultiModeDrawArraysIBM epoxy_glMultiModeDrawArraysIBM +#define glMultiModeDrawElementsIBM epoxy_glMultiModeDrawElementsIBM +#define glMultiTexBufferEXT epoxy_glMultiTexBufferEXT +#define glMultiTexCoord1bOES epoxy_glMultiTexCoord1bOES +#define glMultiTexCoord1bvOES epoxy_glMultiTexCoord1bvOES +#define glMultiTexCoord1d epoxy_glMultiTexCoord1d +#define glMultiTexCoord1dARB epoxy_glMultiTexCoord1dARB +#define glMultiTexCoord1dv epoxy_glMultiTexCoord1dv +#define glMultiTexCoord1dvARB epoxy_glMultiTexCoord1dvARB +#define glMultiTexCoord1f epoxy_glMultiTexCoord1f +#define glMultiTexCoord1fARB epoxy_glMultiTexCoord1fARB +#define glMultiTexCoord1fv epoxy_glMultiTexCoord1fv +#define glMultiTexCoord1fvARB epoxy_glMultiTexCoord1fvARB +#define glMultiTexCoord1hNV epoxy_glMultiTexCoord1hNV +#define glMultiTexCoord1hvNV epoxy_glMultiTexCoord1hvNV +#define glMultiTexCoord1i epoxy_glMultiTexCoord1i +#define glMultiTexCoord1iARB epoxy_glMultiTexCoord1iARB +#define glMultiTexCoord1iv epoxy_glMultiTexCoord1iv +#define glMultiTexCoord1ivARB epoxy_glMultiTexCoord1ivARB +#define glMultiTexCoord1s epoxy_glMultiTexCoord1s +#define glMultiTexCoord1sARB epoxy_glMultiTexCoord1sARB +#define glMultiTexCoord1sv epoxy_glMultiTexCoord1sv +#define glMultiTexCoord1svARB epoxy_glMultiTexCoord1svARB +#define glMultiTexCoord1xOES epoxy_glMultiTexCoord1xOES +#define glMultiTexCoord1xvOES epoxy_glMultiTexCoord1xvOES +#define glMultiTexCoord2bOES epoxy_glMultiTexCoord2bOES +#define glMultiTexCoord2bvOES epoxy_glMultiTexCoord2bvOES +#define glMultiTexCoord2d epoxy_glMultiTexCoord2d +#define glMultiTexCoord2dARB epoxy_glMultiTexCoord2dARB +#define glMultiTexCoord2dv epoxy_glMultiTexCoord2dv +#define glMultiTexCoord2dvARB epoxy_glMultiTexCoord2dvARB +#define glMultiTexCoord2f epoxy_glMultiTexCoord2f +#define glMultiTexCoord2fARB epoxy_glMultiTexCoord2fARB +#define glMultiTexCoord2fv epoxy_glMultiTexCoord2fv +#define glMultiTexCoord2fvARB epoxy_glMultiTexCoord2fvARB +#define glMultiTexCoord2hNV epoxy_glMultiTexCoord2hNV +#define glMultiTexCoord2hvNV epoxy_glMultiTexCoord2hvNV +#define glMultiTexCoord2i epoxy_glMultiTexCoord2i +#define glMultiTexCoord2iARB epoxy_glMultiTexCoord2iARB +#define glMultiTexCoord2iv epoxy_glMultiTexCoord2iv +#define glMultiTexCoord2ivARB epoxy_glMultiTexCoord2ivARB +#define glMultiTexCoord2s epoxy_glMultiTexCoord2s +#define glMultiTexCoord2sARB epoxy_glMultiTexCoord2sARB +#define glMultiTexCoord2sv epoxy_glMultiTexCoord2sv +#define glMultiTexCoord2svARB epoxy_glMultiTexCoord2svARB +#define glMultiTexCoord2xOES epoxy_glMultiTexCoord2xOES +#define glMultiTexCoord2xvOES epoxy_glMultiTexCoord2xvOES +#define glMultiTexCoord3bOES epoxy_glMultiTexCoord3bOES +#define glMultiTexCoord3bvOES epoxy_glMultiTexCoord3bvOES +#define glMultiTexCoord3d epoxy_glMultiTexCoord3d +#define glMultiTexCoord3dARB epoxy_glMultiTexCoord3dARB +#define glMultiTexCoord3dv epoxy_glMultiTexCoord3dv +#define glMultiTexCoord3dvARB epoxy_glMultiTexCoord3dvARB +#define glMultiTexCoord3f epoxy_glMultiTexCoord3f +#define glMultiTexCoord3fARB epoxy_glMultiTexCoord3fARB +#define glMultiTexCoord3fv epoxy_glMultiTexCoord3fv +#define glMultiTexCoord3fvARB epoxy_glMultiTexCoord3fvARB +#define glMultiTexCoord3hNV epoxy_glMultiTexCoord3hNV +#define glMultiTexCoord3hvNV epoxy_glMultiTexCoord3hvNV +#define glMultiTexCoord3i epoxy_glMultiTexCoord3i +#define glMultiTexCoord3iARB epoxy_glMultiTexCoord3iARB +#define glMultiTexCoord3iv epoxy_glMultiTexCoord3iv +#define glMultiTexCoord3ivARB epoxy_glMultiTexCoord3ivARB +#define glMultiTexCoord3s epoxy_glMultiTexCoord3s +#define glMultiTexCoord3sARB epoxy_glMultiTexCoord3sARB +#define glMultiTexCoord3sv epoxy_glMultiTexCoord3sv +#define glMultiTexCoord3svARB epoxy_glMultiTexCoord3svARB +#define glMultiTexCoord3xOES epoxy_glMultiTexCoord3xOES +#define glMultiTexCoord3xvOES epoxy_glMultiTexCoord3xvOES +#define glMultiTexCoord4bOES epoxy_glMultiTexCoord4bOES +#define glMultiTexCoord4bvOES epoxy_glMultiTexCoord4bvOES +#define glMultiTexCoord4d epoxy_glMultiTexCoord4d +#define glMultiTexCoord4dARB epoxy_glMultiTexCoord4dARB +#define glMultiTexCoord4dv epoxy_glMultiTexCoord4dv +#define glMultiTexCoord4dvARB epoxy_glMultiTexCoord4dvARB +#define glMultiTexCoord4f epoxy_glMultiTexCoord4f +#define glMultiTexCoord4fARB epoxy_glMultiTexCoord4fARB +#define glMultiTexCoord4fv epoxy_glMultiTexCoord4fv +#define glMultiTexCoord4fvARB epoxy_glMultiTexCoord4fvARB +#define glMultiTexCoord4hNV epoxy_glMultiTexCoord4hNV +#define glMultiTexCoord4hvNV epoxy_glMultiTexCoord4hvNV +#define glMultiTexCoord4i epoxy_glMultiTexCoord4i +#define glMultiTexCoord4iARB epoxy_glMultiTexCoord4iARB +#define glMultiTexCoord4iv epoxy_glMultiTexCoord4iv +#define glMultiTexCoord4ivARB epoxy_glMultiTexCoord4ivARB +#define glMultiTexCoord4s epoxy_glMultiTexCoord4s +#define glMultiTexCoord4sARB epoxy_glMultiTexCoord4sARB +#define glMultiTexCoord4sv epoxy_glMultiTexCoord4sv +#define glMultiTexCoord4svARB epoxy_glMultiTexCoord4svARB +#define glMultiTexCoord4x epoxy_glMultiTexCoord4x +#define glMultiTexCoord4xOES epoxy_glMultiTexCoord4xOES +#define glMultiTexCoord4xvOES epoxy_glMultiTexCoord4xvOES +#define glMultiTexCoordP1ui epoxy_glMultiTexCoordP1ui +#define glMultiTexCoordP1uiv epoxy_glMultiTexCoordP1uiv +#define glMultiTexCoordP2ui epoxy_glMultiTexCoordP2ui +#define glMultiTexCoordP2uiv epoxy_glMultiTexCoordP2uiv +#define glMultiTexCoordP3ui epoxy_glMultiTexCoordP3ui +#define glMultiTexCoordP3uiv epoxy_glMultiTexCoordP3uiv +#define glMultiTexCoordP4ui epoxy_glMultiTexCoordP4ui +#define glMultiTexCoordP4uiv epoxy_glMultiTexCoordP4uiv +#define glMultiTexCoordPointerEXT epoxy_glMultiTexCoordPointerEXT +#define glMultiTexEnvfEXT epoxy_glMultiTexEnvfEXT +#define glMultiTexEnvfvEXT epoxy_glMultiTexEnvfvEXT +#define glMultiTexEnviEXT epoxy_glMultiTexEnviEXT +#define glMultiTexEnvivEXT epoxy_glMultiTexEnvivEXT +#define glMultiTexGendEXT epoxy_glMultiTexGendEXT +#define glMultiTexGendvEXT epoxy_glMultiTexGendvEXT +#define glMultiTexGenfEXT epoxy_glMultiTexGenfEXT +#define glMultiTexGenfvEXT epoxy_glMultiTexGenfvEXT +#define glMultiTexGeniEXT epoxy_glMultiTexGeniEXT +#define glMultiTexGenivEXT epoxy_glMultiTexGenivEXT +#define glMultiTexImage1DEXT epoxy_glMultiTexImage1DEXT +#define glMultiTexImage2DEXT epoxy_glMultiTexImage2DEXT +#define glMultiTexImage3DEXT epoxy_glMultiTexImage3DEXT +#define glMultiTexParameterIivEXT epoxy_glMultiTexParameterIivEXT +#define glMultiTexParameterIuivEXT epoxy_glMultiTexParameterIuivEXT +#define glMultiTexParameterfEXT epoxy_glMultiTexParameterfEXT +#define glMultiTexParameterfvEXT epoxy_glMultiTexParameterfvEXT +#define glMultiTexParameteriEXT epoxy_glMultiTexParameteriEXT +#define glMultiTexParameterivEXT epoxy_glMultiTexParameterivEXT +#define glMultiTexRenderbufferEXT epoxy_glMultiTexRenderbufferEXT +#define glMultiTexSubImage1DEXT epoxy_glMultiTexSubImage1DEXT +#define glMultiTexSubImage2DEXT epoxy_glMultiTexSubImage2DEXT +#define glMultiTexSubImage3DEXT epoxy_glMultiTexSubImage3DEXT +#define glNamedBufferData epoxy_glNamedBufferData +#define glNamedBufferDataEXT epoxy_glNamedBufferDataEXT +#define glNamedBufferPageCommitmentARB epoxy_glNamedBufferPageCommitmentARB +#define glNamedBufferPageCommitmentEXT epoxy_glNamedBufferPageCommitmentEXT +#define glNamedBufferStorage epoxy_glNamedBufferStorage +#define glNamedBufferStorageEXT epoxy_glNamedBufferStorageEXT +#define glNamedBufferSubData epoxy_glNamedBufferSubData +#define glNamedBufferSubDataEXT epoxy_glNamedBufferSubDataEXT +#define glNamedCopyBufferSubDataEXT epoxy_glNamedCopyBufferSubDataEXT +#define glNamedFramebufferDrawBuffer epoxy_glNamedFramebufferDrawBuffer +#define glNamedFramebufferDrawBuffers epoxy_glNamedFramebufferDrawBuffers +#define glNamedFramebufferParameteri epoxy_glNamedFramebufferParameteri +#define glNamedFramebufferParameteriEXT epoxy_glNamedFramebufferParameteriEXT +#define glNamedFramebufferReadBuffer epoxy_glNamedFramebufferReadBuffer +#define glNamedFramebufferRenderbuffer epoxy_glNamedFramebufferRenderbuffer +#define glNamedFramebufferRenderbufferEXT epoxy_glNamedFramebufferRenderbufferEXT +#define glNamedFramebufferSampleLocationsfvARB epoxy_glNamedFramebufferSampleLocationsfvARB +#define glNamedFramebufferSampleLocationsfvNV epoxy_glNamedFramebufferSampleLocationsfvNV +#define glNamedFramebufferTexture epoxy_glNamedFramebufferTexture +#define glNamedFramebufferTexture1DEXT epoxy_glNamedFramebufferTexture1DEXT +#define glNamedFramebufferTexture2DEXT epoxy_glNamedFramebufferTexture2DEXT +#define glNamedFramebufferTexture3DEXT epoxy_glNamedFramebufferTexture3DEXT +#define glNamedFramebufferTextureEXT epoxy_glNamedFramebufferTextureEXT +#define glNamedFramebufferTextureFaceEXT epoxy_glNamedFramebufferTextureFaceEXT +#define glNamedFramebufferTextureLayer epoxy_glNamedFramebufferTextureLayer +#define glNamedFramebufferTextureLayerEXT epoxy_glNamedFramebufferTextureLayerEXT +#define glNamedProgramLocalParameter4dEXT epoxy_glNamedProgramLocalParameter4dEXT +#define glNamedProgramLocalParameter4dvEXT epoxy_glNamedProgramLocalParameter4dvEXT +#define glNamedProgramLocalParameter4fEXT epoxy_glNamedProgramLocalParameter4fEXT +#define glNamedProgramLocalParameter4fvEXT epoxy_glNamedProgramLocalParameter4fvEXT +#define glNamedProgramLocalParameterI4iEXT epoxy_glNamedProgramLocalParameterI4iEXT +#define glNamedProgramLocalParameterI4ivEXT epoxy_glNamedProgramLocalParameterI4ivEXT +#define glNamedProgramLocalParameterI4uiEXT epoxy_glNamedProgramLocalParameterI4uiEXT +#define glNamedProgramLocalParameterI4uivEXT epoxy_glNamedProgramLocalParameterI4uivEXT +#define glNamedProgramLocalParameters4fvEXT epoxy_glNamedProgramLocalParameters4fvEXT +#define glNamedProgramLocalParametersI4ivEXT epoxy_glNamedProgramLocalParametersI4ivEXT +#define glNamedProgramLocalParametersI4uivEXT epoxy_glNamedProgramLocalParametersI4uivEXT +#define glNamedProgramStringEXT epoxy_glNamedProgramStringEXT +#define glNamedRenderbufferStorage epoxy_glNamedRenderbufferStorage +#define glNamedRenderbufferStorageEXT epoxy_glNamedRenderbufferStorageEXT +#define glNamedRenderbufferStorageMultisample epoxy_glNamedRenderbufferStorageMultisample +#define glNamedRenderbufferStorageMultisampleCoverageEXT epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT +#define glNamedRenderbufferStorageMultisampleEXT epoxy_glNamedRenderbufferStorageMultisampleEXT +#define glNamedStringARB epoxy_glNamedStringARB +#define glNewList epoxy_glNewList +#define glNewObjectBufferATI epoxy_glNewObjectBufferATI +#define glNormal3b epoxy_glNormal3b +#define glNormal3bv epoxy_glNormal3bv +#define glNormal3d epoxy_glNormal3d +#define glNormal3dv epoxy_glNormal3dv +#define glNormal3f epoxy_glNormal3f +#define glNormal3fVertex3fSUN epoxy_glNormal3fVertex3fSUN +#define glNormal3fVertex3fvSUN epoxy_glNormal3fVertex3fvSUN +#define glNormal3fv epoxy_glNormal3fv +#define glNormal3hNV epoxy_glNormal3hNV +#define glNormal3hvNV epoxy_glNormal3hvNV +#define glNormal3i epoxy_glNormal3i +#define glNormal3iv epoxy_glNormal3iv +#define glNormal3s epoxy_glNormal3s +#define glNormal3sv epoxy_glNormal3sv +#define glNormal3x epoxy_glNormal3x +#define glNormal3xOES epoxy_glNormal3xOES +#define glNormal3xvOES epoxy_glNormal3xvOES +#define glNormalFormatNV epoxy_glNormalFormatNV +#define glNormalP3ui epoxy_glNormalP3ui +#define glNormalP3uiv epoxy_glNormalP3uiv +#define glNormalPointer epoxy_glNormalPointer +#define glNormalPointerEXT epoxy_glNormalPointerEXT +#define glNormalPointerListIBM epoxy_glNormalPointerListIBM +#define glNormalPointervINTEL epoxy_glNormalPointervINTEL +#define glNormalStream3bATI epoxy_glNormalStream3bATI +#define glNormalStream3bvATI epoxy_glNormalStream3bvATI +#define glNormalStream3dATI epoxy_glNormalStream3dATI +#define glNormalStream3dvATI epoxy_glNormalStream3dvATI +#define glNormalStream3fATI epoxy_glNormalStream3fATI +#define glNormalStream3fvATI epoxy_glNormalStream3fvATI +#define glNormalStream3iATI epoxy_glNormalStream3iATI +#define glNormalStream3ivATI epoxy_glNormalStream3ivATI +#define glNormalStream3sATI epoxy_glNormalStream3sATI +#define glNormalStream3svATI epoxy_glNormalStream3svATI +#define glObjectLabel epoxy_glObjectLabel +#define glObjectLabelKHR epoxy_glObjectLabelKHR +#define glObjectPtrLabel epoxy_glObjectPtrLabel +#define glObjectPtrLabelKHR epoxy_glObjectPtrLabelKHR +#define glObjectPurgeableAPPLE epoxy_glObjectPurgeableAPPLE +#define glObjectUnpurgeableAPPLE epoxy_glObjectUnpurgeableAPPLE +#define glOrtho epoxy_glOrtho +#define glOrthof epoxy_glOrthof +#define glOrthofOES epoxy_glOrthofOES +#define glOrthox epoxy_glOrthox +#define glOrthoxOES epoxy_glOrthoxOES +#define glPNTrianglesfATI epoxy_glPNTrianglesfATI +#define glPNTrianglesiATI epoxy_glPNTrianglesiATI +#define glPassTexCoordATI epoxy_glPassTexCoordATI +#define glPassThrough epoxy_glPassThrough +#define glPassThroughxOES epoxy_glPassThroughxOES +#define glPatchParameterfv epoxy_glPatchParameterfv +#define glPatchParameteri epoxy_glPatchParameteri +#define glPatchParameteriEXT epoxy_glPatchParameteriEXT +#define glPatchParameteriOES epoxy_glPatchParameteriOES +#define glPathColorGenNV epoxy_glPathColorGenNV +#define glPathCommandsNV epoxy_glPathCommandsNV +#define glPathCoordsNV epoxy_glPathCoordsNV +#define glPathCoverDepthFuncNV epoxy_glPathCoverDepthFuncNV +#define glPathDashArrayNV epoxy_glPathDashArrayNV +#define glPathFogGenNV epoxy_glPathFogGenNV +#define glPathGlyphIndexArrayNV epoxy_glPathGlyphIndexArrayNV +#define glPathGlyphIndexRangeNV epoxy_glPathGlyphIndexRangeNV +#define glPathGlyphRangeNV epoxy_glPathGlyphRangeNV +#define glPathGlyphsNV epoxy_glPathGlyphsNV +#define glPathMemoryGlyphIndexArrayNV epoxy_glPathMemoryGlyphIndexArrayNV +#define glPathParameterfNV epoxy_glPathParameterfNV +#define glPathParameterfvNV epoxy_glPathParameterfvNV +#define glPathParameteriNV epoxy_glPathParameteriNV +#define glPathParameterivNV epoxy_glPathParameterivNV +#define glPathStencilDepthOffsetNV epoxy_glPathStencilDepthOffsetNV +#define glPathStencilFuncNV epoxy_glPathStencilFuncNV +#define glPathStringNV epoxy_glPathStringNV +#define glPathSubCommandsNV epoxy_glPathSubCommandsNV +#define glPathSubCoordsNV epoxy_glPathSubCoordsNV +#define glPathTexGenNV epoxy_glPathTexGenNV +#define glPauseTransformFeedback epoxy_glPauseTransformFeedback +#define glPauseTransformFeedbackNV epoxy_glPauseTransformFeedbackNV +#define glPixelDataRangeNV epoxy_glPixelDataRangeNV +#define glPixelMapfv epoxy_glPixelMapfv +#define glPixelMapuiv epoxy_glPixelMapuiv +#define glPixelMapusv epoxy_glPixelMapusv +#define glPixelMapx epoxy_glPixelMapx +#define glPixelStoref epoxy_glPixelStoref +#define glPixelStorei epoxy_glPixelStorei +#define glPixelStorex epoxy_glPixelStorex +#define glPixelTexGenParameterfSGIS epoxy_glPixelTexGenParameterfSGIS +#define glPixelTexGenParameterfvSGIS epoxy_glPixelTexGenParameterfvSGIS +#define glPixelTexGenParameteriSGIS epoxy_glPixelTexGenParameteriSGIS +#define glPixelTexGenParameterivSGIS epoxy_glPixelTexGenParameterivSGIS +#define glPixelTexGenSGIX epoxy_glPixelTexGenSGIX +#define glPixelTransferf epoxy_glPixelTransferf +#define glPixelTransferi epoxy_glPixelTransferi +#define glPixelTransferxOES epoxy_glPixelTransferxOES +#define glPixelTransformParameterfEXT epoxy_glPixelTransformParameterfEXT +#define glPixelTransformParameterfvEXT epoxy_glPixelTransformParameterfvEXT +#define glPixelTransformParameteriEXT epoxy_glPixelTransformParameteriEXT +#define glPixelTransformParameterivEXT epoxy_glPixelTransformParameterivEXT +#define glPixelZoom epoxy_glPixelZoom +#define glPixelZoomxOES epoxy_glPixelZoomxOES +#define glPointAlongPathNV epoxy_glPointAlongPathNV +#define glPointParameterf epoxy_glPointParameterf +#define glPointParameterfARB epoxy_glPointParameterfARB +#define glPointParameterfEXT epoxy_glPointParameterfEXT +#define glPointParameterfSGIS epoxy_glPointParameterfSGIS +#define glPointParameterfv epoxy_glPointParameterfv +#define glPointParameterfvARB epoxy_glPointParameterfvARB +#define glPointParameterfvEXT epoxy_glPointParameterfvEXT +#define glPointParameterfvSGIS epoxy_glPointParameterfvSGIS +#define glPointParameteri epoxy_glPointParameteri +#define glPointParameteriNV epoxy_glPointParameteriNV +#define glPointParameteriv epoxy_glPointParameteriv +#define glPointParameterivNV epoxy_glPointParameterivNV +#define glPointParameterx epoxy_glPointParameterx +#define glPointParameterxOES epoxy_glPointParameterxOES +#define glPointParameterxv epoxy_glPointParameterxv +#define glPointParameterxvOES epoxy_glPointParameterxvOES +#define glPointSize epoxy_glPointSize +#define glPointSizePointerOES epoxy_glPointSizePointerOES +#define glPointSizex epoxy_glPointSizex +#define glPointSizexOES epoxy_glPointSizexOES +#define glPollAsyncSGIX epoxy_glPollAsyncSGIX +#define glPollInstrumentsSGIX epoxy_glPollInstrumentsSGIX +#define glPolygonMode epoxy_glPolygonMode +#define glPolygonModeNV epoxy_glPolygonModeNV +#define glPolygonOffset epoxy_glPolygonOffset +#define glPolygonOffsetClampEXT epoxy_glPolygonOffsetClampEXT +#define glPolygonOffsetEXT epoxy_glPolygonOffsetEXT +#define glPolygonOffsetx epoxy_glPolygonOffsetx +#define glPolygonOffsetxOES epoxy_glPolygonOffsetxOES +#define glPolygonStipple epoxy_glPolygonStipple +#define glPopAttrib epoxy_glPopAttrib +#define glPopClientAttrib epoxy_glPopClientAttrib +#define glPopDebugGroup epoxy_glPopDebugGroup +#define glPopDebugGroupKHR epoxy_glPopDebugGroupKHR +#define glPopGroupMarkerEXT epoxy_glPopGroupMarkerEXT +#define glPopMatrix epoxy_glPopMatrix +#define glPopName epoxy_glPopName +#define glPresentFrameDualFillNV epoxy_glPresentFrameDualFillNV +#define glPresentFrameKeyedNV epoxy_glPresentFrameKeyedNV +#define glPrimitiveBoundingBox epoxy_glPrimitiveBoundingBox +#define glPrimitiveBoundingBoxARB epoxy_glPrimitiveBoundingBoxARB +#define glPrimitiveBoundingBoxEXT epoxy_glPrimitiveBoundingBoxEXT +#define glPrimitiveBoundingBoxOES epoxy_glPrimitiveBoundingBoxOES +#define glPrimitiveRestartIndex epoxy_glPrimitiveRestartIndex +#define glPrimitiveRestartIndexNV epoxy_glPrimitiveRestartIndexNV +#define glPrimitiveRestartNV epoxy_glPrimitiveRestartNV +#define glPrioritizeTextures epoxy_glPrioritizeTextures +#define glPrioritizeTexturesEXT epoxy_glPrioritizeTexturesEXT +#define glPrioritizeTexturesxOES epoxy_glPrioritizeTexturesxOES +#define glProgramBinary epoxy_glProgramBinary +#define glProgramBinaryOES epoxy_glProgramBinaryOES +#define glProgramBufferParametersIivNV epoxy_glProgramBufferParametersIivNV +#define glProgramBufferParametersIuivNV epoxy_glProgramBufferParametersIuivNV +#define glProgramBufferParametersfvNV epoxy_glProgramBufferParametersfvNV +#define glProgramEnvParameter4dARB epoxy_glProgramEnvParameter4dARB +#define glProgramEnvParameter4dvARB epoxy_glProgramEnvParameter4dvARB +#define glProgramEnvParameter4fARB epoxy_glProgramEnvParameter4fARB +#define glProgramEnvParameter4fvARB epoxy_glProgramEnvParameter4fvARB +#define glProgramEnvParameterI4iNV epoxy_glProgramEnvParameterI4iNV +#define glProgramEnvParameterI4ivNV epoxy_glProgramEnvParameterI4ivNV +#define glProgramEnvParameterI4uiNV epoxy_glProgramEnvParameterI4uiNV +#define glProgramEnvParameterI4uivNV epoxy_glProgramEnvParameterI4uivNV +#define glProgramEnvParameters4fvEXT epoxy_glProgramEnvParameters4fvEXT +#define glProgramEnvParametersI4ivNV epoxy_glProgramEnvParametersI4ivNV +#define glProgramEnvParametersI4uivNV epoxy_glProgramEnvParametersI4uivNV +#define glProgramLocalParameter4dARB epoxy_glProgramLocalParameter4dARB +#define glProgramLocalParameter4dvARB epoxy_glProgramLocalParameter4dvARB +#define glProgramLocalParameter4fARB epoxy_glProgramLocalParameter4fARB +#define glProgramLocalParameter4fvARB epoxy_glProgramLocalParameter4fvARB +#define glProgramLocalParameterI4iNV epoxy_glProgramLocalParameterI4iNV +#define glProgramLocalParameterI4ivNV epoxy_glProgramLocalParameterI4ivNV +#define glProgramLocalParameterI4uiNV epoxy_glProgramLocalParameterI4uiNV +#define glProgramLocalParameterI4uivNV epoxy_glProgramLocalParameterI4uivNV +#define glProgramLocalParameters4fvEXT epoxy_glProgramLocalParameters4fvEXT +#define glProgramLocalParametersI4ivNV epoxy_glProgramLocalParametersI4ivNV +#define glProgramLocalParametersI4uivNV epoxy_glProgramLocalParametersI4uivNV +#define glProgramNamedParameter4dNV epoxy_glProgramNamedParameter4dNV +#define glProgramNamedParameter4dvNV epoxy_glProgramNamedParameter4dvNV +#define glProgramNamedParameter4fNV epoxy_glProgramNamedParameter4fNV +#define glProgramNamedParameter4fvNV epoxy_glProgramNamedParameter4fvNV +#define glProgramParameter4dNV epoxy_glProgramParameter4dNV +#define glProgramParameter4dvNV epoxy_glProgramParameter4dvNV +#define glProgramParameter4fNV epoxy_glProgramParameter4fNV +#define glProgramParameter4fvNV epoxy_glProgramParameter4fvNV +#define glProgramParameteri epoxy_glProgramParameteri +#define glProgramParameteriARB epoxy_glProgramParameteriARB +#define glProgramParameteriEXT epoxy_glProgramParameteriEXT +#define glProgramParameters4dvNV epoxy_glProgramParameters4dvNV +#define glProgramParameters4fvNV epoxy_glProgramParameters4fvNV +#define glProgramPathFragmentInputGenNV epoxy_glProgramPathFragmentInputGenNV +#define glProgramStringARB epoxy_glProgramStringARB +#define glProgramSubroutineParametersuivNV epoxy_glProgramSubroutineParametersuivNV +#define glProgramUniform1d epoxy_glProgramUniform1d +#define glProgramUniform1dEXT epoxy_glProgramUniform1dEXT +#define glProgramUniform1dv epoxy_glProgramUniform1dv +#define glProgramUniform1dvEXT epoxy_glProgramUniform1dvEXT +#define glProgramUniform1f epoxy_glProgramUniform1f +#define glProgramUniform1fEXT epoxy_glProgramUniform1fEXT +#define glProgramUniform1fv epoxy_glProgramUniform1fv +#define glProgramUniform1fvEXT epoxy_glProgramUniform1fvEXT +#define glProgramUniform1i epoxy_glProgramUniform1i +#define glProgramUniform1i64ARB epoxy_glProgramUniform1i64ARB +#define glProgramUniform1i64NV epoxy_glProgramUniform1i64NV +#define glProgramUniform1i64vARB epoxy_glProgramUniform1i64vARB +#define glProgramUniform1i64vNV epoxy_glProgramUniform1i64vNV +#define glProgramUniform1iEXT epoxy_glProgramUniform1iEXT +#define glProgramUniform1iv epoxy_glProgramUniform1iv +#define glProgramUniform1ivEXT epoxy_glProgramUniform1ivEXT +#define glProgramUniform1ui epoxy_glProgramUniform1ui +#define glProgramUniform1ui64ARB epoxy_glProgramUniform1ui64ARB +#define glProgramUniform1ui64NV epoxy_glProgramUniform1ui64NV +#define glProgramUniform1ui64vARB epoxy_glProgramUniform1ui64vARB +#define glProgramUniform1ui64vNV epoxy_glProgramUniform1ui64vNV +#define glProgramUniform1uiEXT epoxy_glProgramUniform1uiEXT +#define glProgramUniform1uiv epoxy_glProgramUniform1uiv +#define glProgramUniform1uivEXT epoxy_glProgramUniform1uivEXT +#define glProgramUniform2d epoxy_glProgramUniform2d +#define glProgramUniform2dEXT epoxy_glProgramUniform2dEXT +#define glProgramUniform2dv epoxy_glProgramUniform2dv +#define glProgramUniform2dvEXT epoxy_glProgramUniform2dvEXT +#define glProgramUniform2f epoxy_glProgramUniform2f +#define glProgramUniform2fEXT epoxy_glProgramUniform2fEXT +#define glProgramUniform2fv epoxy_glProgramUniform2fv +#define glProgramUniform2fvEXT epoxy_glProgramUniform2fvEXT +#define glProgramUniform2i epoxy_glProgramUniform2i +#define glProgramUniform2i64ARB epoxy_glProgramUniform2i64ARB +#define glProgramUniform2i64NV epoxy_glProgramUniform2i64NV +#define glProgramUniform2i64vARB epoxy_glProgramUniform2i64vARB +#define glProgramUniform2i64vNV epoxy_glProgramUniform2i64vNV +#define glProgramUniform2iEXT epoxy_glProgramUniform2iEXT +#define glProgramUniform2iv epoxy_glProgramUniform2iv +#define glProgramUniform2ivEXT epoxy_glProgramUniform2ivEXT +#define glProgramUniform2ui epoxy_glProgramUniform2ui +#define glProgramUniform2ui64ARB epoxy_glProgramUniform2ui64ARB +#define glProgramUniform2ui64NV epoxy_glProgramUniform2ui64NV +#define glProgramUniform2ui64vARB epoxy_glProgramUniform2ui64vARB +#define glProgramUniform2ui64vNV epoxy_glProgramUniform2ui64vNV +#define glProgramUniform2uiEXT epoxy_glProgramUniform2uiEXT +#define glProgramUniform2uiv epoxy_glProgramUniform2uiv +#define glProgramUniform2uivEXT epoxy_glProgramUniform2uivEXT +#define glProgramUniform3d epoxy_glProgramUniform3d +#define glProgramUniform3dEXT epoxy_glProgramUniform3dEXT +#define glProgramUniform3dv epoxy_glProgramUniform3dv +#define glProgramUniform3dvEXT epoxy_glProgramUniform3dvEXT +#define glProgramUniform3f epoxy_glProgramUniform3f +#define glProgramUniform3fEXT epoxy_glProgramUniform3fEXT +#define glProgramUniform3fv epoxy_glProgramUniform3fv +#define glProgramUniform3fvEXT epoxy_glProgramUniform3fvEXT +#define glProgramUniform3i epoxy_glProgramUniform3i +#define glProgramUniform3i64ARB epoxy_glProgramUniform3i64ARB +#define glProgramUniform3i64NV epoxy_glProgramUniform3i64NV +#define glProgramUniform3i64vARB epoxy_glProgramUniform3i64vARB +#define glProgramUniform3i64vNV epoxy_glProgramUniform3i64vNV +#define glProgramUniform3iEXT epoxy_glProgramUniform3iEXT +#define glProgramUniform3iv epoxy_glProgramUniform3iv +#define glProgramUniform3ivEXT epoxy_glProgramUniform3ivEXT +#define glProgramUniform3ui epoxy_glProgramUniform3ui +#define glProgramUniform3ui64ARB epoxy_glProgramUniform3ui64ARB +#define glProgramUniform3ui64NV epoxy_glProgramUniform3ui64NV +#define glProgramUniform3ui64vARB epoxy_glProgramUniform3ui64vARB +#define glProgramUniform3ui64vNV epoxy_glProgramUniform3ui64vNV +#define glProgramUniform3uiEXT epoxy_glProgramUniform3uiEXT +#define glProgramUniform3uiv epoxy_glProgramUniform3uiv +#define glProgramUniform3uivEXT epoxy_glProgramUniform3uivEXT +#define glProgramUniform4d epoxy_glProgramUniform4d +#define glProgramUniform4dEXT epoxy_glProgramUniform4dEXT +#define glProgramUniform4dv epoxy_glProgramUniform4dv +#define glProgramUniform4dvEXT epoxy_glProgramUniform4dvEXT +#define glProgramUniform4f epoxy_glProgramUniform4f +#define glProgramUniform4fEXT epoxy_glProgramUniform4fEXT +#define glProgramUniform4fv epoxy_glProgramUniform4fv +#define glProgramUniform4fvEXT epoxy_glProgramUniform4fvEXT +#define glProgramUniform4i epoxy_glProgramUniform4i +#define glProgramUniform4i64ARB epoxy_glProgramUniform4i64ARB +#define glProgramUniform4i64NV epoxy_glProgramUniform4i64NV +#define glProgramUniform4i64vARB epoxy_glProgramUniform4i64vARB +#define glProgramUniform4i64vNV epoxy_glProgramUniform4i64vNV +#define glProgramUniform4iEXT epoxy_glProgramUniform4iEXT +#define glProgramUniform4iv epoxy_glProgramUniform4iv +#define glProgramUniform4ivEXT epoxy_glProgramUniform4ivEXT +#define glProgramUniform4ui epoxy_glProgramUniform4ui +#define glProgramUniform4ui64ARB epoxy_glProgramUniform4ui64ARB +#define glProgramUniform4ui64NV epoxy_glProgramUniform4ui64NV +#define glProgramUniform4ui64vARB epoxy_glProgramUniform4ui64vARB +#define glProgramUniform4ui64vNV epoxy_glProgramUniform4ui64vNV +#define glProgramUniform4uiEXT epoxy_glProgramUniform4uiEXT +#define glProgramUniform4uiv epoxy_glProgramUniform4uiv +#define glProgramUniform4uivEXT epoxy_glProgramUniform4uivEXT +#define glProgramUniformHandleui64ARB epoxy_glProgramUniformHandleui64ARB +#define glProgramUniformHandleui64NV epoxy_glProgramUniformHandleui64NV +#define glProgramUniformHandleui64vARB epoxy_glProgramUniformHandleui64vARB +#define glProgramUniformHandleui64vNV epoxy_glProgramUniformHandleui64vNV +#define glProgramUniformMatrix2dv epoxy_glProgramUniformMatrix2dv +#define glProgramUniformMatrix2dvEXT epoxy_glProgramUniformMatrix2dvEXT +#define glProgramUniformMatrix2fv epoxy_glProgramUniformMatrix2fv +#define glProgramUniformMatrix2fvEXT epoxy_glProgramUniformMatrix2fvEXT +#define glProgramUniformMatrix2x3dv epoxy_glProgramUniformMatrix2x3dv +#define glProgramUniformMatrix2x3dvEXT epoxy_glProgramUniformMatrix2x3dvEXT +#define glProgramUniformMatrix2x3fv epoxy_glProgramUniformMatrix2x3fv +#define glProgramUniformMatrix2x3fvEXT epoxy_glProgramUniformMatrix2x3fvEXT +#define glProgramUniformMatrix2x4dv epoxy_glProgramUniformMatrix2x4dv +#define glProgramUniformMatrix2x4dvEXT epoxy_glProgramUniformMatrix2x4dvEXT +#define glProgramUniformMatrix2x4fv epoxy_glProgramUniformMatrix2x4fv +#define glProgramUniformMatrix2x4fvEXT epoxy_glProgramUniformMatrix2x4fvEXT +#define glProgramUniformMatrix3dv epoxy_glProgramUniformMatrix3dv +#define glProgramUniformMatrix3dvEXT epoxy_glProgramUniformMatrix3dvEXT +#define glProgramUniformMatrix3fv epoxy_glProgramUniformMatrix3fv +#define glProgramUniformMatrix3fvEXT epoxy_glProgramUniformMatrix3fvEXT +#define glProgramUniformMatrix3x2dv epoxy_glProgramUniformMatrix3x2dv +#define glProgramUniformMatrix3x2dvEXT epoxy_glProgramUniformMatrix3x2dvEXT +#define glProgramUniformMatrix3x2fv epoxy_glProgramUniformMatrix3x2fv +#define glProgramUniformMatrix3x2fvEXT epoxy_glProgramUniformMatrix3x2fvEXT +#define glProgramUniformMatrix3x4dv epoxy_glProgramUniformMatrix3x4dv +#define glProgramUniformMatrix3x4dvEXT epoxy_glProgramUniformMatrix3x4dvEXT +#define glProgramUniformMatrix3x4fv epoxy_glProgramUniformMatrix3x4fv +#define glProgramUniformMatrix3x4fvEXT epoxy_glProgramUniformMatrix3x4fvEXT +#define glProgramUniformMatrix4dv epoxy_glProgramUniformMatrix4dv +#define glProgramUniformMatrix4dvEXT epoxy_glProgramUniformMatrix4dvEXT +#define glProgramUniformMatrix4fv epoxy_glProgramUniformMatrix4fv +#define glProgramUniformMatrix4fvEXT epoxy_glProgramUniformMatrix4fvEXT +#define glProgramUniformMatrix4x2dv epoxy_glProgramUniformMatrix4x2dv +#define glProgramUniformMatrix4x2dvEXT epoxy_glProgramUniformMatrix4x2dvEXT +#define glProgramUniformMatrix4x2fv epoxy_glProgramUniformMatrix4x2fv +#define glProgramUniformMatrix4x2fvEXT epoxy_glProgramUniformMatrix4x2fvEXT +#define glProgramUniformMatrix4x3dv epoxy_glProgramUniformMatrix4x3dv +#define glProgramUniformMatrix4x3dvEXT epoxy_glProgramUniformMatrix4x3dvEXT +#define glProgramUniformMatrix4x3fv epoxy_glProgramUniformMatrix4x3fv +#define glProgramUniformMatrix4x3fvEXT epoxy_glProgramUniformMatrix4x3fvEXT +#define glProgramUniformui64NV epoxy_glProgramUniformui64NV +#define glProgramUniformui64vNV epoxy_glProgramUniformui64vNV +#define glProgramVertexLimitNV epoxy_glProgramVertexLimitNV +#define glProvokingVertex epoxy_glProvokingVertex +#define glProvokingVertexEXT epoxy_glProvokingVertexEXT +#define glPushAttrib epoxy_glPushAttrib +#define glPushClientAttrib epoxy_glPushClientAttrib +#define glPushClientAttribDefaultEXT epoxy_glPushClientAttribDefaultEXT +#define glPushDebugGroup epoxy_glPushDebugGroup +#define glPushDebugGroupKHR epoxy_glPushDebugGroupKHR +#define glPushGroupMarkerEXT epoxy_glPushGroupMarkerEXT +#define glPushMatrix epoxy_glPushMatrix +#define glPushName epoxy_glPushName +#define glQueryCounter epoxy_glQueryCounter +#define glQueryCounterEXT epoxy_glQueryCounterEXT +#define glQueryMatrixxOES epoxy_glQueryMatrixxOES +#define glQueryObjectParameteruiAMD epoxy_glQueryObjectParameteruiAMD +#define glRasterPos2d epoxy_glRasterPos2d +#define glRasterPos2dv epoxy_glRasterPos2dv +#define glRasterPos2f epoxy_glRasterPos2f +#define glRasterPos2fv epoxy_glRasterPos2fv +#define glRasterPos2i epoxy_glRasterPos2i +#define glRasterPos2iv epoxy_glRasterPos2iv +#define glRasterPos2s epoxy_glRasterPos2s +#define glRasterPos2sv epoxy_glRasterPos2sv +#define glRasterPos2xOES epoxy_glRasterPos2xOES +#define glRasterPos2xvOES epoxy_glRasterPos2xvOES +#define glRasterPos3d epoxy_glRasterPos3d +#define glRasterPos3dv epoxy_glRasterPos3dv +#define glRasterPos3f epoxy_glRasterPos3f +#define glRasterPos3fv epoxy_glRasterPos3fv +#define glRasterPos3i epoxy_glRasterPos3i +#define glRasterPos3iv epoxy_glRasterPos3iv +#define glRasterPos3s epoxy_glRasterPos3s +#define glRasterPos3sv epoxy_glRasterPos3sv +#define glRasterPos3xOES epoxy_glRasterPos3xOES +#define glRasterPos3xvOES epoxy_glRasterPos3xvOES +#define glRasterPos4d epoxy_glRasterPos4d +#define glRasterPos4dv epoxy_glRasterPos4dv +#define glRasterPos4f epoxy_glRasterPos4f +#define glRasterPos4fv epoxy_glRasterPos4fv +#define glRasterPos4i epoxy_glRasterPos4i +#define glRasterPos4iv epoxy_glRasterPos4iv +#define glRasterPos4s epoxy_glRasterPos4s +#define glRasterPos4sv epoxy_glRasterPos4sv +#define glRasterPos4xOES epoxy_glRasterPos4xOES +#define glRasterPos4xvOES epoxy_glRasterPos4xvOES +#define glRasterSamplesEXT epoxy_glRasterSamplesEXT +#define glReadBuffer epoxy_glReadBuffer +#define glReadBufferIndexedEXT epoxy_glReadBufferIndexedEXT +#define glReadBufferNV epoxy_glReadBufferNV +#define glReadInstrumentsSGIX epoxy_glReadInstrumentsSGIX +#define glReadPixels epoxy_glReadPixels +#define glReadnPixels epoxy_glReadnPixels +#define glReadnPixelsARB epoxy_glReadnPixelsARB +#define glReadnPixelsEXT epoxy_glReadnPixelsEXT +#define glReadnPixelsKHR epoxy_glReadnPixelsKHR +#define glRectd epoxy_glRectd +#define glRectdv epoxy_glRectdv +#define glRectf epoxy_glRectf +#define glRectfv epoxy_glRectfv +#define glRecti epoxy_glRecti +#define glRectiv epoxy_glRectiv +#define glRects epoxy_glRects +#define glRectsv epoxy_glRectsv +#define glRectxOES epoxy_glRectxOES +#define glRectxvOES epoxy_glRectxvOES +#define glReferencePlaneSGIX epoxy_glReferencePlaneSGIX +#define glReleaseShaderCompiler epoxy_glReleaseShaderCompiler +#define glRenderMode epoxy_glRenderMode +#define glRenderbufferStorage epoxy_glRenderbufferStorage +#define glRenderbufferStorageEXT epoxy_glRenderbufferStorageEXT +#define glRenderbufferStorageMultisample epoxy_glRenderbufferStorageMultisample +#define glRenderbufferStorageMultisampleANGLE epoxy_glRenderbufferStorageMultisampleANGLE +#define glRenderbufferStorageMultisampleAPPLE epoxy_glRenderbufferStorageMultisampleAPPLE +#define glRenderbufferStorageMultisampleCoverageNV epoxy_glRenderbufferStorageMultisampleCoverageNV +#define glRenderbufferStorageMultisampleEXT epoxy_glRenderbufferStorageMultisampleEXT +#define glRenderbufferStorageMultisampleIMG epoxy_glRenderbufferStorageMultisampleIMG +#define glRenderbufferStorageMultisampleNV epoxy_glRenderbufferStorageMultisampleNV +#define glRenderbufferStorageOES epoxy_glRenderbufferStorageOES +#define glReplacementCodePointerSUN epoxy_glReplacementCodePointerSUN +#define glReplacementCodeubSUN epoxy_glReplacementCodeubSUN +#define glReplacementCodeubvSUN epoxy_glReplacementCodeubvSUN +#define glReplacementCodeuiColor3fVertex3fSUN epoxy_glReplacementCodeuiColor3fVertex3fSUN +#define glReplacementCodeuiColor3fVertex3fvSUN epoxy_glReplacementCodeuiColor3fVertex3fvSUN +#define glReplacementCodeuiColor4fNormal3fVertex3fSUN epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN +#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN +#define glReplacementCodeuiColor4ubVertex3fSUN epoxy_glReplacementCodeuiColor4ubVertex3fSUN +#define glReplacementCodeuiColor4ubVertex3fvSUN epoxy_glReplacementCodeuiColor4ubVertex3fvSUN +#define glReplacementCodeuiNormal3fVertex3fSUN epoxy_glReplacementCodeuiNormal3fVertex3fSUN +#define glReplacementCodeuiNormal3fVertex3fvSUN epoxy_glReplacementCodeuiNormal3fVertex3fvSUN +#define glReplacementCodeuiSUN epoxy_glReplacementCodeuiSUN +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN +#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN +#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN +#define glReplacementCodeuiTexCoord2fVertex3fSUN epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN +#define glReplacementCodeuiTexCoord2fVertex3fvSUN epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN +#define glReplacementCodeuiVertex3fSUN epoxy_glReplacementCodeuiVertex3fSUN +#define glReplacementCodeuiVertex3fvSUN epoxy_glReplacementCodeuiVertex3fvSUN +#define glReplacementCodeuivSUN epoxy_glReplacementCodeuivSUN +#define glReplacementCodeusSUN epoxy_glReplacementCodeusSUN +#define glReplacementCodeusvSUN epoxy_glReplacementCodeusvSUN +#define glRequestResidentProgramsNV epoxy_glRequestResidentProgramsNV +#define glResetHistogram epoxy_glResetHistogram +#define glResetHistogramEXT epoxy_glResetHistogramEXT +#define glResetMinmax epoxy_glResetMinmax +#define glResetMinmaxEXT epoxy_glResetMinmaxEXT +#define glResizeBuffersMESA epoxy_glResizeBuffersMESA +#define glResolveDepthValuesNV epoxy_glResolveDepthValuesNV +#define glResolveMultisampleFramebufferAPPLE epoxy_glResolveMultisampleFramebufferAPPLE +#define glResumeTransformFeedback epoxy_glResumeTransformFeedback +#define glResumeTransformFeedbackNV epoxy_glResumeTransformFeedbackNV +#define glRotated epoxy_glRotated +#define glRotatef epoxy_glRotatef +#define glRotatex epoxy_glRotatex +#define glRotatexOES epoxy_glRotatexOES +#define glSampleCoverage epoxy_glSampleCoverage +#define glSampleCoverageARB epoxy_glSampleCoverageARB +#define glSampleCoveragex epoxy_glSampleCoveragex +#define glSampleCoveragexOES epoxy_glSampleCoveragexOES +#define glSampleMapATI epoxy_glSampleMapATI +#define glSampleMaskEXT epoxy_glSampleMaskEXT +#define glSampleMaskIndexedNV epoxy_glSampleMaskIndexedNV +#define glSampleMaskSGIS epoxy_glSampleMaskSGIS +#define glSampleMaski epoxy_glSampleMaski +#define glSamplePatternEXT epoxy_glSamplePatternEXT +#define glSamplePatternSGIS epoxy_glSamplePatternSGIS +#define glSamplerParameterIiv epoxy_glSamplerParameterIiv +#define glSamplerParameterIivEXT epoxy_glSamplerParameterIivEXT +#define glSamplerParameterIivOES epoxy_glSamplerParameterIivOES +#define glSamplerParameterIuiv epoxy_glSamplerParameterIuiv +#define glSamplerParameterIuivEXT epoxy_glSamplerParameterIuivEXT +#define glSamplerParameterIuivOES epoxy_glSamplerParameterIuivOES +#define glSamplerParameterf epoxy_glSamplerParameterf +#define glSamplerParameterfv epoxy_glSamplerParameterfv +#define glSamplerParameteri epoxy_glSamplerParameteri +#define glSamplerParameteriv epoxy_glSamplerParameteriv +#define glScaled epoxy_glScaled +#define glScalef epoxy_glScalef +#define glScalex epoxy_glScalex +#define glScalexOES epoxy_glScalexOES +#define glScissor epoxy_glScissor +#define glScissorArrayv epoxy_glScissorArrayv +#define glScissorArrayvNV epoxy_glScissorArrayvNV +#define glScissorIndexed epoxy_glScissorIndexed +#define glScissorIndexedNV epoxy_glScissorIndexedNV +#define glScissorIndexedv epoxy_glScissorIndexedv +#define glScissorIndexedvNV epoxy_glScissorIndexedvNV +#define glSecondaryColor3b epoxy_glSecondaryColor3b +#define glSecondaryColor3bEXT epoxy_glSecondaryColor3bEXT +#define glSecondaryColor3bv epoxy_glSecondaryColor3bv +#define glSecondaryColor3bvEXT epoxy_glSecondaryColor3bvEXT +#define glSecondaryColor3d epoxy_glSecondaryColor3d +#define glSecondaryColor3dEXT epoxy_glSecondaryColor3dEXT +#define glSecondaryColor3dv epoxy_glSecondaryColor3dv +#define glSecondaryColor3dvEXT epoxy_glSecondaryColor3dvEXT +#define glSecondaryColor3f epoxy_glSecondaryColor3f +#define glSecondaryColor3fEXT epoxy_glSecondaryColor3fEXT +#define glSecondaryColor3fv epoxy_glSecondaryColor3fv +#define glSecondaryColor3fvEXT epoxy_glSecondaryColor3fvEXT +#define glSecondaryColor3hNV epoxy_glSecondaryColor3hNV +#define glSecondaryColor3hvNV epoxy_glSecondaryColor3hvNV +#define glSecondaryColor3i epoxy_glSecondaryColor3i +#define glSecondaryColor3iEXT epoxy_glSecondaryColor3iEXT +#define glSecondaryColor3iv epoxy_glSecondaryColor3iv +#define glSecondaryColor3ivEXT epoxy_glSecondaryColor3ivEXT +#define glSecondaryColor3s epoxy_glSecondaryColor3s +#define glSecondaryColor3sEXT epoxy_glSecondaryColor3sEXT +#define glSecondaryColor3sv epoxy_glSecondaryColor3sv +#define glSecondaryColor3svEXT epoxy_glSecondaryColor3svEXT +#define glSecondaryColor3ub epoxy_glSecondaryColor3ub +#define glSecondaryColor3ubEXT epoxy_glSecondaryColor3ubEXT +#define glSecondaryColor3ubv epoxy_glSecondaryColor3ubv +#define glSecondaryColor3ubvEXT epoxy_glSecondaryColor3ubvEXT +#define glSecondaryColor3ui epoxy_glSecondaryColor3ui +#define glSecondaryColor3uiEXT epoxy_glSecondaryColor3uiEXT +#define glSecondaryColor3uiv epoxy_glSecondaryColor3uiv +#define glSecondaryColor3uivEXT epoxy_glSecondaryColor3uivEXT +#define glSecondaryColor3us epoxy_glSecondaryColor3us +#define glSecondaryColor3usEXT epoxy_glSecondaryColor3usEXT +#define glSecondaryColor3usv epoxy_glSecondaryColor3usv +#define glSecondaryColor3usvEXT epoxy_glSecondaryColor3usvEXT +#define glSecondaryColorFormatNV epoxy_glSecondaryColorFormatNV +#define glSecondaryColorP3ui epoxy_glSecondaryColorP3ui +#define glSecondaryColorP3uiv epoxy_glSecondaryColorP3uiv +#define glSecondaryColorPointer epoxy_glSecondaryColorPointer +#define glSecondaryColorPointerEXT epoxy_glSecondaryColorPointerEXT +#define glSecondaryColorPointerListIBM epoxy_glSecondaryColorPointerListIBM +#define glSelectBuffer epoxy_glSelectBuffer +#define glSelectPerfMonitorCountersAMD epoxy_glSelectPerfMonitorCountersAMD +#define glSeparableFilter2D epoxy_glSeparableFilter2D +#define glSeparableFilter2DEXT epoxy_glSeparableFilter2DEXT +#define glSetFenceAPPLE epoxy_glSetFenceAPPLE +#define glSetFenceNV epoxy_glSetFenceNV +#define glSetFragmentShaderConstantATI epoxy_glSetFragmentShaderConstantATI +#define glSetInvariantEXT epoxy_glSetInvariantEXT +#define glSetLocalConstantEXT epoxy_glSetLocalConstantEXT +#define glSetMultisamplefvAMD epoxy_glSetMultisamplefvAMD +#define glShadeModel epoxy_glShadeModel +#define glShaderBinary epoxy_glShaderBinary +#define glShaderOp1EXT epoxy_glShaderOp1EXT +#define glShaderOp2EXT epoxy_glShaderOp2EXT +#define glShaderOp3EXT epoxy_glShaderOp3EXT +#define glShaderSource epoxy_glShaderSource +#define glShaderSourceARB epoxy_glShaderSourceARB +#define glShaderStorageBlockBinding epoxy_glShaderStorageBlockBinding +#define glSharpenTexFuncSGIS epoxy_glSharpenTexFuncSGIS +#define glSpriteParameterfSGIX epoxy_glSpriteParameterfSGIX +#define glSpriteParameterfvSGIX epoxy_glSpriteParameterfvSGIX +#define glSpriteParameteriSGIX epoxy_glSpriteParameteriSGIX +#define glSpriteParameterivSGIX epoxy_glSpriteParameterivSGIX +#define glStartInstrumentsSGIX epoxy_glStartInstrumentsSGIX +#define glStartTilingQCOM epoxy_glStartTilingQCOM +#define glStateCaptureNV epoxy_glStateCaptureNV +#define glStencilClearTagEXT epoxy_glStencilClearTagEXT +#define glStencilFillPathInstancedNV epoxy_glStencilFillPathInstancedNV +#define glStencilFillPathNV epoxy_glStencilFillPathNV +#define glStencilFunc epoxy_glStencilFunc +#define glStencilFuncSeparate epoxy_glStencilFuncSeparate +#define glStencilFuncSeparateATI epoxy_glStencilFuncSeparateATI +#define glStencilMask epoxy_glStencilMask +#define glStencilMaskSeparate epoxy_glStencilMaskSeparate +#define glStencilOp epoxy_glStencilOp +#define glStencilOpSeparate epoxy_glStencilOpSeparate +#define glStencilOpSeparateATI epoxy_glStencilOpSeparateATI +#define glStencilOpValueAMD epoxy_glStencilOpValueAMD +#define glStencilStrokePathInstancedNV epoxy_glStencilStrokePathInstancedNV +#define glStencilStrokePathNV epoxy_glStencilStrokePathNV +#define glStencilThenCoverFillPathInstancedNV epoxy_glStencilThenCoverFillPathInstancedNV +#define glStencilThenCoverFillPathNV epoxy_glStencilThenCoverFillPathNV +#define glStencilThenCoverStrokePathInstancedNV epoxy_glStencilThenCoverStrokePathInstancedNV +#define glStencilThenCoverStrokePathNV epoxy_glStencilThenCoverStrokePathNV +#define glStopInstrumentsSGIX epoxy_glStopInstrumentsSGIX +#define glStringMarkerGREMEDY epoxy_glStringMarkerGREMEDY +#define glSubpixelPrecisionBiasNV epoxy_glSubpixelPrecisionBiasNV +#define glSwizzleEXT epoxy_glSwizzleEXT +#define glSyncTextureINTEL epoxy_glSyncTextureINTEL +#define glTagSampleBufferSGIX epoxy_glTagSampleBufferSGIX +#define glTangent3bEXT epoxy_glTangent3bEXT +#define glTangent3bvEXT epoxy_glTangent3bvEXT +#define glTangent3dEXT epoxy_glTangent3dEXT +#define glTangent3dvEXT epoxy_glTangent3dvEXT +#define glTangent3fEXT epoxy_glTangent3fEXT +#define glTangent3fvEXT epoxy_glTangent3fvEXT +#define glTangent3iEXT epoxy_glTangent3iEXT +#define glTangent3ivEXT epoxy_glTangent3ivEXT +#define glTangent3sEXT epoxy_glTangent3sEXT +#define glTangent3svEXT epoxy_glTangent3svEXT +#define glTangentPointerEXT epoxy_glTangentPointerEXT +#define glTbufferMask3DFX epoxy_glTbufferMask3DFX +#define glTessellationFactorAMD epoxy_glTessellationFactorAMD +#define glTessellationModeAMD epoxy_glTessellationModeAMD +#define glTestFenceAPPLE epoxy_glTestFenceAPPLE +#define glTestFenceNV epoxy_glTestFenceNV +#define glTestObjectAPPLE epoxy_glTestObjectAPPLE +#define glTexBuffer epoxy_glTexBuffer +#define glTexBufferARB epoxy_glTexBufferARB +#define glTexBufferEXT epoxy_glTexBufferEXT +#define glTexBufferOES epoxy_glTexBufferOES +#define glTexBufferRange epoxy_glTexBufferRange +#define glTexBufferRangeEXT epoxy_glTexBufferRangeEXT +#define glTexBufferRangeOES epoxy_glTexBufferRangeOES +#define glTexBumpParameterfvATI epoxy_glTexBumpParameterfvATI +#define glTexBumpParameterivATI epoxy_glTexBumpParameterivATI +#define glTexCoord1bOES epoxy_glTexCoord1bOES +#define glTexCoord1bvOES epoxy_glTexCoord1bvOES +#define glTexCoord1d epoxy_glTexCoord1d +#define glTexCoord1dv epoxy_glTexCoord1dv +#define glTexCoord1f epoxy_glTexCoord1f +#define glTexCoord1fv epoxy_glTexCoord1fv +#define glTexCoord1hNV epoxy_glTexCoord1hNV +#define glTexCoord1hvNV epoxy_glTexCoord1hvNV +#define glTexCoord1i epoxy_glTexCoord1i +#define glTexCoord1iv epoxy_glTexCoord1iv +#define glTexCoord1s epoxy_glTexCoord1s +#define glTexCoord1sv epoxy_glTexCoord1sv +#define glTexCoord1xOES epoxy_glTexCoord1xOES +#define glTexCoord1xvOES epoxy_glTexCoord1xvOES +#define glTexCoord2bOES epoxy_glTexCoord2bOES +#define glTexCoord2bvOES epoxy_glTexCoord2bvOES +#define glTexCoord2d epoxy_glTexCoord2d +#define glTexCoord2dv epoxy_glTexCoord2dv +#define glTexCoord2f epoxy_glTexCoord2f +#define glTexCoord2fColor3fVertex3fSUN epoxy_glTexCoord2fColor3fVertex3fSUN +#define glTexCoord2fColor3fVertex3fvSUN epoxy_glTexCoord2fColor3fVertex3fvSUN +#define glTexCoord2fColor4fNormal3fVertex3fSUN epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN +#define glTexCoord2fColor4fNormal3fVertex3fvSUN epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN +#define glTexCoord2fColor4ubVertex3fSUN epoxy_glTexCoord2fColor4ubVertex3fSUN +#define glTexCoord2fColor4ubVertex3fvSUN epoxy_glTexCoord2fColor4ubVertex3fvSUN +#define glTexCoord2fNormal3fVertex3fSUN epoxy_glTexCoord2fNormal3fVertex3fSUN +#define glTexCoord2fNormal3fVertex3fvSUN epoxy_glTexCoord2fNormal3fVertex3fvSUN +#define glTexCoord2fVertex3fSUN epoxy_glTexCoord2fVertex3fSUN +#define glTexCoord2fVertex3fvSUN epoxy_glTexCoord2fVertex3fvSUN +#define glTexCoord2fv epoxy_glTexCoord2fv +#define glTexCoord2hNV epoxy_glTexCoord2hNV +#define glTexCoord2hvNV epoxy_glTexCoord2hvNV +#define glTexCoord2i epoxy_glTexCoord2i +#define glTexCoord2iv epoxy_glTexCoord2iv +#define glTexCoord2s epoxy_glTexCoord2s +#define glTexCoord2sv epoxy_glTexCoord2sv +#define glTexCoord2xOES epoxy_glTexCoord2xOES +#define glTexCoord2xvOES epoxy_glTexCoord2xvOES +#define glTexCoord3bOES epoxy_glTexCoord3bOES +#define glTexCoord3bvOES epoxy_glTexCoord3bvOES +#define glTexCoord3d epoxy_glTexCoord3d +#define glTexCoord3dv epoxy_glTexCoord3dv +#define glTexCoord3f epoxy_glTexCoord3f +#define glTexCoord3fv epoxy_glTexCoord3fv +#define glTexCoord3hNV epoxy_glTexCoord3hNV +#define glTexCoord3hvNV epoxy_glTexCoord3hvNV +#define glTexCoord3i epoxy_glTexCoord3i +#define glTexCoord3iv epoxy_glTexCoord3iv +#define glTexCoord3s epoxy_glTexCoord3s +#define glTexCoord3sv epoxy_glTexCoord3sv +#define glTexCoord3xOES epoxy_glTexCoord3xOES +#define glTexCoord3xvOES epoxy_glTexCoord3xvOES +#define glTexCoord4bOES epoxy_glTexCoord4bOES +#define glTexCoord4bvOES epoxy_glTexCoord4bvOES +#define glTexCoord4d epoxy_glTexCoord4d +#define glTexCoord4dv epoxy_glTexCoord4dv +#define glTexCoord4f epoxy_glTexCoord4f +#define glTexCoord4fColor4fNormal3fVertex4fSUN epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN +#define glTexCoord4fColor4fNormal3fVertex4fvSUN epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN +#define glTexCoord4fVertex4fSUN epoxy_glTexCoord4fVertex4fSUN +#define glTexCoord4fVertex4fvSUN epoxy_glTexCoord4fVertex4fvSUN +#define glTexCoord4fv epoxy_glTexCoord4fv +#define glTexCoord4hNV epoxy_glTexCoord4hNV +#define glTexCoord4hvNV epoxy_glTexCoord4hvNV +#define glTexCoord4i epoxy_glTexCoord4i +#define glTexCoord4iv epoxy_glTexCoord4iv +#define glTexCoord4s epoxy_glTexCoord4s +#define glTexCoord4sv epoxy_glTexCoord4sv +#define glTexCoord4xOES epoxy_glTexCoord4xOES +#define glTexCoord4xvOES epoxy_glTexCoord4xvOES +#define glTexCoordFormatNV epoxy_glTexCoordFormatNV +#define glTexCoordP1ui epoxy_glTexCoordP1ui +#define glTexCoordP1uiv epoxy_glTexCoordP1uiv +#define glTexCoordP2ui epoxy_glTexCoordP2ui +#define glTexCoordP2uiv epoxy_glTexCoordP2uiv +#define glTexCoordP3ui epoxy_glTexCoordP3ui +#define glTexCoordP3uiv epoxy_glTexCoordP3uiv +#define glTexCoordP4ui epoxy_glTexCoordP4ui +#define glTexCoordP4uiv epoxy_glTexCoordP4uiv +#define glTexCoordPointer epoxy_glTexCoordPointer +#define glTexCoordPointerEXT epoxy_glTexCoordPointerEXT +#define glTexCoordPointerListIBM epoxy_glTexCoordPointerListIBM +#define glTexCoordPointervINTEL epoxy_glTexCoordPointervINTEL +#define glTexEnvf epoxy_glTexEnvf +#define glTexEnvfv epoxy_glTexEnvfv +#define glTexEnvi epoxy_glTexEnvi +#define glTexEnviv epoxy_glTexEnviv +#define glTexEnvx epoxy_glTexEnvx +#define glTexEnvxOES epoxy_glTexEnvxOES +#define glTexEnvxv epoxy_glTexEnvxv +#define glTexEnvxvOES epoxy_glTexEnvxvOES +#define glTexFilterFuncSGIS epoxy_glTexFilterFuncSGIS +#define glTexGend epoxy_glTexGend +#define glTexGendv epoxy_glTexGendv +#define glTexGenf epoxy_glTexGenf +#define glTexGenfOES epoxy_glTexGenfOES +#define glTexGenfv epoxy_glTexGenfv +#define glTexGenfvOES epoxy_glTexGenfvOES +#define glTexGeni epoxy_glTexGeni +#define glTexGeniOES epoxy_glTexGeniOES +#define glTexGeniv epoxy_glTexGeniv +#define glTexGenivOES epoxy_glTexGenivOES +#define glTexGenxOES epoxy_glTexGenxOES +#define glTexGenxvOES epoxy_glTexGenxvOES +#define glTexImage1D epoxy_glTexImage1D +#define glTexImage2D epoxy_glTexImage2D +#define glTexImage2DMultisample epoxy_glTexImage2DMultisample +#define glTexImage2DMultisampleCoverageNV epoxy_glTexImage2DMultisampleCoverageNV +#define glTexImage3D epoxy_glTexImage3D +#define glTexImage3DEXT epoxy_glTexImage3DEXT +#define glTexImage3DMultisample epoxy_glTexImage3DMultisample +#define glTexImage3DMultisampleCoverageNV epoxy_glTexImage3DMultisampleCoverageNV +#define glTexImage3DOES epoxy_glTexImage3DOES +#define glTexImage4DSGIS epoxy_glTexImage4DSGIS +#define glTexPageCommitmentARB epoxy_glTexPageCommitmentARB +#define glTexPageCommitmentEXT epoxy_glTexPageCommitmentEXT +#define glTexParameterIiv epoxy_glTexParameterIiv +#define glTexParameterIivEXT epoxy_glTexParameterIivEXT +#define glTexParameterIivOES epoxy_glTexParameterIivOES +#define glTexParameterIuiv epoxy_glTexParameterIuiv +#define glTexParameterIuivEXT epoxy_glTexParameterIuivEXT +#define glTexParameterIuivOES epoxy_glTexParameterIuivOES +#define glTexParameterf epoxy_glTexParameterf +#define glTexParameterfv epoxy_glTexParameterfv +#define glTexParameteri epoxy_glTexParameteri +#define glTexParameteriv epoxy_glTexParameteriv +#define glTexParameterx epoxy_glTexParameterx +#define glTexParameterxOES epoxy_glTexParameterxOES +#define glTexParameterxv epoxy_glTexParameterxv +#define glTexParameterxvOES epoxy_glTexParameterxvOES +#define glTexRenderbufferNV epoxy_glTexRenderbufferNV +#define glTexStorage1D epoxy_glTexStorage1D +#define glTexStorage1DEXT epoxy_glTexStorage1DEXT +#define glTexStorage2D epoxy_glTexStorage2D +#define glTexStorage2DEXT epoxy_glTexStorage2DEXT +#define glTexStorage2DMultisample epoxy_glTexStorage2DMultisample +#define glTexStorage3D epoxy_glTexStorage3D +#define glTexStorage3DEXT epoxy_glTexStorage3DEXT +#define glTexStorage3DMultisample epoxy_glTexStorage3DMultisample +#define glTexStorage3DMultisampleOES epoxy_glTexStorage3DMultisampleOES +#define glTexStorageSparseAMD epoxy_glTexStorageSparseAMD +#define glTexSubImage1D epoxy_glTexSubImage1D +#define glTexSubImage1DEXT epoxy_glTexSubImage1DEXT +#define glTexSubImage2D epoxy_glTexSubImage2D +#define glTexSubImage2DEXT epoxy_glTexSubImage2DEXT +#define glTexSubImage3D epoxy_glTexSubImage3D +#define glTexSubImage3DEXT epoxy_glTexSubImage3DEXT +#define glTexSubImage3DOES epoxy_glTexSubImage3DOES +#define glTexSubImage4DSGIS epoxy_glTexSubImage4DSGIS +#define glTextureBarrier epoxy_glTextureBarrier +#define glTextureBarrierNV epoxy_glTextureBarrierNV +#define glTextureBuffer epoxy_glTextureBuffer +#define glTextureBufferEXT epoxy_glTextureBufferEXT +#define glTextureBufferRange epoxy_glTextureBufferRange +#define glTextureBufferRangeEXT epoxy_glTextureBufferRangeEXT +#define glTextureColorMaskSGIS epoxy_glTextureColorMaskSGIS +#define glTextureImage1DEXT epoxy_glTextureImage1DEXT +#define glTextureImage2DEXT epoxy_glTextureImage2DEXT +#define glTextureImage2DMultisampleCoverageNV epoxy_glTextureImage2DMultisampleCoverageNV +#define glTextureImage2DMultisampleNV epoxy_glTextureImage2DMultisampleNV +#define glTextureImage3DEXT epoxy_glTextureImage3DEXT +#define glTextureImage3DMultisampleCoverageNV epoxy_glTextureImage3DMultisampleCoverageNV +#define glTextureImage3DMultisampleNV epoxy_glTextureImage3DMultisampleNV +#define glTextureLightEXT epoxy_glTextureLightEXT +#define glTextureMaterialEXT epoxy_glTextureMaterialEXT +#define glTextureNormalEXT epoxy_glTextureNormalEXT +#define glTexturePageCommitmentEXT epoxy_glTexturePageCommitmentEXT +#define glTextureParameterIiv epoxy_glTextureParameterIiv +#define glTextureParameterIivEXT epoxy_glTextureParameterIivEXT +#define glTextureParameterIuiv epoxy_glTextureParameterIuiv +#define glTextureParameterIuivEXT epoxy_glTextureParameterIuivEXT +#define glTextureParameterf epoxy_glTextureParameterf +#define glTextureParameterfEXT epoxy_glTextureParameterfEXT +#define glTextureParameterfv epoxy_glTextureParameterfv +#define glTextureParameterfvEXT epoxy_glTextureParameterfvEXT +#define glTextureParameteri epoxy_glTextureParameteri +#define glTextureParameteriEXT epoxy_glTextureParameteriEXT +#define glTextureParameteriv epoxy_glTextureParameteriv +#define glTextureParameterivEXT epoxy_glTextureParameterivEXT +#define glTextureRangeAPPLE epoxy_glTextureRangeAPPLE +#define glTextureRenderbufferEXT epoxy_glTextureRenderbufferEXT +#define glTextureStorage1D epoxy_glTextureStorage1D +#define glTextureStorage1DEXT epoxy_glTextureStorage1DEXT +#define glTextureStorage2D epoxy_glTextureStorage2D +#define glTextureStorage2DEXT epoxy_glTextureStorage2DEXT +#define glTextureStorage2DMultisample epoxy_glTextureStorage2DMultisample +#define glTextureStorage2DMultisampleEXT epoxy_glTextureStorage2DMultisampleEXT +#define glTextureStorage3D epoxy_glTextureStorage3D +#define glTextureStorage3DEXT epoxy_glTextureStorage3DEXT +#define glTextureStorage3DMultisample epoxy_glTextureStorage3DMultisample +#define glTextureStorage3DMultisampleEXT epoxy_glTextureStorage3DMultisampleEXT +#define glTextureStorageSparseAMD epoxy_glTextureStorageSparseAMD +#define glTextureSubImage1D epoxy_glTextureSubImage1D +#define glTextureSubImage1DEXT epoxy_glTextureSubImage1DEXT +#define glTextureSubImage2D epoxy_glTextureSubImage2D +#define glTextureSubImage2DEXT epoxy_glTextureSubImage2DEXT +#define glTextureSubImage3D epoxy_glTextureSubImage3D +#define glTextureSubImage3DEXT epoxy_glTextureSubImage3DEXT +#define glTextureView epoxy_glTextureView +#define glTextureViewEXT epoxy_glTextureViewEXT +#define glTextureViewOES epoxy_glTextureViewOES +#define glTrackMatrixNV epoxy_glTrackMatrixNV +#define glTransformFeedbackAttribsNV epoxy_glTransformFeedbackAttribsNV +#define glTransformFeedbackBufferBase epoxy_glTransformFeedbackBufferBase +#define glTransformFeedbackBufferRange epoxy_glTransformFeedbackBufferRange +#define glTransformFeedbackStreamAttribsNV epoxy_glTransformFeedbackStreamAttribsNV +#define glTransformFeedbackVaryings epoxy_glTransformFeedbackVaryings +#define glTransformFeedbackVaryingsEXT epoxy_glTransformFeedbackVaryingsEXT +#define glTransformFeedbackVaryingsNV epoxy_glTransformFeedbackVaryingsNV +#define glTransformPathNV epoxy_glTransformPathNV +#define glTranslated epoxy_glTranslated +#define glTranslatef epoxy_glTranslatef +#define glTranslatex epoxy_glTranslatex +#define glTranslatexOES epoxy_glTranslatexOES +#define glUniform1d epoxy_glUniform1d +#define glUniform1dv epoxy_glUniform1dv +#define glUniform1f epoxy_glUniform1f +#define glUniform1fARB epoxy_glUniform1fARB +#define glUniform1fv epoxy_glUniform1fv +#define glUniform1fvARB epoxy_glUniform1fvARB +#define glUniform1i epoxy_glUniform1i +#define glUniform1i64ARB epoxy_glUniform1i64ARB +#define glUniform1i64NV epoxy_glUniform1i64NV +#define glUniform1i64vARB epoxy_glUniform1i64vARB +#define glUniform1i64vNV epoxy_glUniform1i64vNV +#define glUniform1iARB epoxy_glUniform1iARB +#define glUniform1iv epoxy_glUniform1iv +#define glUniform1ivARB epoxy_glUniform1ivARB +#define glUniform1ui epoxy_glUniform1ui +#define glUniform1ui64ARB epoxy_glUniform1ui64ARB +#define glUniform1ui64NV epoxy_glUniform1ui64NV +#define glUniform1ui64vARB epoxy_glUniform1ui64vARB +#define glUniform1ui64vNV epoxy_glUniform1ui64vNV +#define glUniform1uiEXT epoxy_glUniform1uiEXT +#define glUniform1uiv epoxy_glUniform1uiv +#define glUniform1uivEXT epoxy_glUniform1uivEXT +#define glUniform2d epoxy_glUniform2d +#define glUniform2dv epoxy_glUniform2dv +#define glUniform2f epoxy_glUniform2f +#define glUniform2fARB epoxy_glUniform2fARB +#define glUniform2fv epoxy_glUniform2fv +#define glUniform2fvARB epoxy_glUniform2fvARB +#define glUniform2i epoxy_glUniform2i +#define glUniform2i64ARB epoxy_glUniform2i64ARB +#define glUniform2i64NV epoxy_glUniform2i64NV +#define glUniform2i64vARB epoxy_glUniform2i64vARB +#define glUniform2i64vNV epoxy_glUniform2i64vNV +#define glUniform2iARB epoxy_glUniform2iARB +#define glUniform2iv epoxy_glUniform2iv +#define glUniform2ivARB epoxy_glUniform2ivARB +#define glUniform2ui epoxy_glUniform2ui +#define glUniform2ui64ARB epoxy_glUniform2ui64ARB +#define glUniform2ui64NV epoxy_glUniform2ui64NV +#define glUniform2ui64vARB epoxy_glUniform2ui64vARB +#define glUniform2ui64vNV epoxy_glUniform2ui64vNV +#define glUniform2uiEXT epoxy_glUniform2uiEXT +#define glUniform2uiv epoxy_glUniform2uiv +#define glUniform2uivEXT epoxy_glUniform2uivEXT +#define glUniform3d epoxy_glUniform3d +#define glUniform3dv epoxy_glUniform3dv +#define glUniform3f epoxy_glUniform3f +#define glUniform3fARB epoxy_glUniform3fARB +#define glUniform3fv epoxy_glUniform3fv +#define glUniform3fvARB epoxy_glUniform3fvARB +#define glUniform3i epoxy_glUniform3i +#define glUniform3i64ARB epoxy_glUniform3i64ARB +#define glUniform3i64NV epoxy_glUniform3i64NV +#define glUniform3i64vARB epoxy_glUniform3i64vARB +#define glUniform3i64vNV epoxy_glUniform3i64vNV +#define glUniform3iARB epoxy_glUniform3iARB +#define glUniform3iv epoxy_glUniform3iv +#define glUniform3ivARB epoxy_glUniform3ivARB +#define glUniform3ui epoxy_glUniform3ui +#define glUniform3ui64ARB epoxy_glUniform3ui64ARB +#define glUniform3ui64NV epoxy_glUniform3ui64NV +#define glUniform3ui64vARB epoxy_glUniform3ui64vARB +#define glUniform3ui64vNV epoxy_glUniform3ui64vNV +#define glUniform3uiEXT epoxy_glUniform3uiEXT +#define glUniform3uiv epoxy_glUniform3uiv +#define glUniform3uivEXT epoxy_glUniform3uivEXT +#define glUniform4d epoxy_glUniform4d +#define glUniform4dv epoxy_glUniform4dv +#define glUniform4f epoxy_glUniform4f +#define glUniform4fARB epoxy_glUniform4fARB +#define glUniform4fv epoxy_glUniform4fv +#define glUniform4fvARB epoxy_glUniform4fvARB +#define glUniform4i epoxy_glUniform4i +#define glUniform4i64ARB epoxy_glUniform4i64ARB +#define glUniform4i64NV epoxy_glUniform4i64NV +#define glUniform4i64vARB epoxy_glUniform4i64vARB +#define glUniform4i64vNV epoxy_glUniform4i64vNV +#define glUniform4iARB epoxy_glUniform4iARB +#define glUniform4iv epoxy_glUniform4iv +#define glUniform4ivARB epoxy_glUniform4ivARB +#define glUniform4ui epoxy_glUniform4ui +#define glUniform4ui64ARB epoxy_glUniform4ui64ARB +#define glUniform4ui64NV epoxy_glUniform4ui64NV +#define glUniform4ui64vARB epoxy_glUniform4ui64vARB +#define glUniform4ui64vNV epoxy_glUniform4ui64vNV +#define glUniform4uiEXT epoxy_glUniform4uiEXT +#define glUniform4uiv epoxy_glUniform4uiv +#define glUniform4uivEXT epoxy_glUniform4uivEXT +#define glUniformBlockBinding epoxy_glUniformBlockBinding +#define glUniformBufferEXT epoxy_glUniformBufferEXT +#define glUniformHandleui64ARB epoxy_glUniformHandleui64ARB +#define glUniformHandleui64NV epoxy_glUniformHandleui64NV +#define glUniformHandleui64vARB epoxy_glUniformHandleui64vARB +#define glUniformHandleui64vNV epoxy_glUniformHandleui64vNV +#define glUniformMatrix2dv epoxy_glUniformMatrix2dv +#define glUniformMatrix2fv epoxy_glUniformMatrix2fv +#define glUniformMatrix2fvARB epoxy_glUniformMatrix2fvARB +#define glUniformMatrix2x3dv epoxy_glUniformMatrix2x3dv +#define glUniformMatrix2x3fv epoxy_glUniformMatrix2x3fv +#define glUniformMatrix2x3fvNV epoxy_glUniformMatrix2x3fvNV +#define glUniformMatrix2x4dv epoxy_glUniformMatrix2x4dv +#define glUniformMatrix2x4fv epoxy_glUniformMatrix2x4fv +#define glUniformMatrix2x4fvNV epoxy_glUniformMatrix2x4fvNV +#define glUniformMatrix3dv epoxy_glUniformMatrix3dv +#define glUniformMatrix3fv epoxy_glUniformMatrix3fv +#define glUniformMatrix3fvARB epoxy_glUniformMatrix3fvARB +#define glUniformMatrix3x2dv epoxy_glUniformMatrix3x2dv +#define glUniformMatrix3x2fv epoxy_glUniformMatrix3x2fv +#define glUniformMatrix3x2fvNV epoxy_glUniformMatrix3x2fvNV +#define glUniformMatrix3x4dv epoxy_glUniformMatrix3x4dv +#define glUniformMatrix3x4fv epoxy_glUniformMatrix3x4fv +#define glUniformMatrix3x4fvNV epoxy_glUniformMatrix3x4fvNV +#define glUniformMatrix4dv epoxy_glUniformMatrix4dv +#define glUniformMatrix4fv epoxy_glUniformMatrix4fv +#define glUniformMatrix4fvARB epoxy_glUniformMatrix4fvARB +#define glUniformMatrix4x2dv epoxy_glUniformMatrix4x2dv +#define glUniformMatrix4x2fv epoxy_glUniformMatrix4x2fv +#define glUniformMatrix4x2fvNV epoxy_glUniformMatrix4x2fvNV +#define glUniformMatrix4x3dv epoxy_glUniformMatrix4x3dv +#define glUniformMatrix4x3fv epoxy_glUniformMatrix4x3fv +#define glUniformMatrix4x3fvNV epoxy_glUniformMatrix4x3fvNV +#define glUniformSubroutinesuiv epoxy_glUniformSubroutinesuiv +#define glUniformui64NV epoxy_glUniformui64NV +#define glUniformui64vNV epoxy_glUniformui64vNV +#define glUnlockArraysEXT epoxy_glUnlockArraysEXT +#define glUnmapBuffer epoxy_glUnmapBuffer +#define glUnmapBufferARB epoxy_glUnmapBufferARB +#define glUnmapBufferOES epoxy_glUnmapBufferOES +#define glUnmapNamedBuffer epoxy_glUnmapNamedBuffer +#define glUnmapNamedBufferEXT epoxy_glUnmapNamedBufferEXT +#define glUnmapObjectBufferATI epoxy_glUnmapObjectBufferATI +#define glUnmapTexture2DINTEL epoxy_glUnmapTexture2DINTEL +#define glUpdateObjectBufferATI epoxy_glUpdateObjectBufferATI +#define glUseProgram epoxy_glUseProgram +#define glUseProgramObjectARB epoxy_glUseProgramObjectARB +#define glUseProgramStages epoxy_glUseProgramStages +#define glUseProgramStagesEXT epoxy_glUseProgramStagesEXT +#define glUseShaderProgramEXT epoxy_glUseShaderProgramEXT +#define glVDPAUFiniNV epoxy_glVDPAUFiniNV +#define glVDPAUGetSurfaceivNV epoxy_glVDPAUGetSurfaceivNV +#define glVDPAUInitNV epoxy_glVDPAUInitNV +#define glVDPAUIsSurfaceNV epoxy_glVDPAUIsSurfaceNV +#define glVDPAUMapSurfacesNV epoxy_glVDPAUMapSurfacesNV +#define glVDPAURegisterOutputSurfaceNV epoxy_glVDPAURegisterOutputSurfaceNV +#define glVDPAURegisterVideoSurfaceNV epoxy_glVDPAURegisterVideoSurfaceNV +#define glVDPAUSurfaceAccessNV epoxy_glVDPAUSurfaceAccessNV +#define glVDPAUUnmapSurfacesNV epoxy_glVDPAUUnmapSurfacesNV +#define glVDPAUUnregisterSurfaceNV epoxy_glVDPAUUnregisterSurfaceNV +#define glValidateProgram epoxy_glValidateProgram +#define glValidateProgramARB epoxy_glValidateProgramARB +#define glValidateProgramPipeline epoxy_glValidateProgramPipeline +#define glValidateProgramPipelineEXT epoxy_glValidateProgramPipelineEXT +#define glVariantArrayObjectATI epoxy_glVariantArrayObjectATI +#define glVariantPointerEXT epoxy_glVariantPointerEXT +#define glVariantbvEXT epoxy_glVariantbvEXT +#define glVariantdvEXT epoxy_glVariantdvEXT +#define glVariantfvEXT epoxy_glVariantfvEXT +#define glVariantivEXT epoxy_glVariantivEXT +#define glVariantsvEXT epoxy_glVariantsvEXT +#define glVariantubvEXT epoxy_glVariantubvEXT +#define glVariantuivEXT epoxy_glVariantuivEXT +#define glVariantusvEXT epoxy_glVariantusvEXT +#define glVertex2bOES epoxy_glVertex2bOES +#define glVertex2bvOES epoxy_glVertex2bvOES +#define glVertex2d epoxy_glVertex2d +#define glVertex2dv epoxy_glVertex2dv +#define glVertex2f epoxy_glVertex2f +#define glVertex2fv epoxy_glVertex2fv +#define glVertex2hNV epoxy_glVertex2hNV +#define glVertex2hvNV epoxy_glVertex2hvNV +#define glVertex2i epoxy_glVertex2i +#define glVertex2iv epoxy_glVertex2iv +#define glVertex2s epoxy_glVertex2s +#define glVertex2sv epoxy_glVertex2sv +#define glVertex2xOES epoxy_glVertex2xOES +#define glVertex2xvOES epoxy_glVertex2xvOES +#define glVertex3bOES epoxy_glVertex3bOES +#define glVertex3bvOES epoxy_glVertex3bvOES +#define glVertex3d epoxy_glVertex3d +#define glVertex3dv epoxy_glVertex3dv +#define glVertex3f epoxy_glVertex3f +#define glVertex3fv epoxy_glVertex3fv +#define glVertex3hNV epoxy_glVertex3hNV +#define glVertex3hvNV epoxy_glVertex3hvNV +#define glVertex3i epoxy_glVertex3i +#define glVertex3iv epoxy_glVertex3iv +#define glVertex3s epoxy_glVertex3s +#define glVertex3sv epoxy_glVertex3sv +#define glVertex3xOES epoxy_glVertex3xOES +#define glVertex3xvOES epoxy_glVertex3xvOES +#define glVertex4bOES epoxy_glVertex4bOES +#define glVertex4bvOES epoxy_glVertex4bvOES +#define glVertex4d epoxy_glVertex4d +#define glVertex4dv epoxy_glVertex4dv +#define glVertex4f epoxy_glVertex4f +#define glVertex4fv epoxy_glVertex4fv +#define glVertex4hNV epoxy_glVertex4hNV +#define glVertex4hvNV epoxy_glVertex4hvNV +#define glVertex4i epoxy_glVertex4i +#define glVertex4iv epoxy_glVertex4iv +#define glVertex4s epoxy_glVertex4s +#define glVertex4sv epoxy_glVertex4sv +#define glVertex4xOES epoxy_glVertex4xOES +#define glVertex4xvOES epoxy_glVertex4xvOES +#define glVertexArrayAttribBinding epoxy_glVertexArrayAttribBinding +#define glVertexArrayAttribFormat epoxy_glVertexArrayAttribFormat +#define glVertexArrayAttribIFormat epoxy_glVertexArrayAttribIFormat +#define glVertexArrayAttribLFormat epoxy_glVertexArrayAttribLFormat +#define glVertexArrayBindVertexBufferEXT epoxy_glVertexArrayBindVertexBufferEXT +#define glVertexArrayBindingDivisor epoxy_glVertexArrayBindingDivisor +#define glVertexArrayColorOffsetEXT epoxy_glVertexArrayColorOffsetEXT +#define glVertexArrayEdgeFlagOffsetEXT epoxy_glVertexArrayEdgeFlagOffsetEXT +#define glVertexArrayElementBuffer epoxy_glVertexArrayElementBuffer +#define glVertexArrayFogCoordOffsetEXT epoxy_glVertexArrayFogCoordOffsetEXT +#define glVertexArrayIndexOffsetEXT epoxy_glVertexArrayIndexOffsetEXT +#define glVertexArrayMultiTexCoordOffsetEXT epoxy_glVertexArrayMultiTexCoordOffsetEXT +#define glVertexArrayNormalOffsetEXT epoxy_glVertexArrayNormalOffsetEXT +#define glVertexArrayParameteriAPPLE epoxy_glVertexArrayParameteriAPPLE +#define glVertexArrayRangeAPPLE epoxy_glVertexArrayRangeAPPLE +#define glVertexArrayRangeNV epoxy_glVertexArrayRangeNV +#define glVertexArraySecondaryColorOffsetEXT epoxy_glVertexArraySecondaryColorOffsetEXT +#define glVertexArrayTexCoordOffsetEXT epoxy_glVertexArrayTexCoordOffsetEXT +#define glVertexArrayVertexAttribBindingEXT epoxy_glVertexArrayVertexAttribBindingEXT +#define glVertexArrayVertexAttribDivisorEXT epoxy_glVertexArrayVertexAttribDivisorEXT +#define glVertexArrayVertexAttribFormatEXT epoxy_glVertexArrayVertexAttribFormatEXT +#define glVertexArrayVertexAttribIFormatEXT epoxy_glVertexArrayVertexAttribIFormatEXT +#define glVertexArrayVertexAttribIOffsetEXT epoxy_glVertexArrayVertexAttribIOffsetEXT +#define glVertexArrayVertexAttribLFormatEXT epoxy_glVertexArrayVertexAttribLFormatEXT +#define glVertexArrayVertexAttribLOffsetEXT epoxy_glVertexArrayVertexAttribLOffsetEXT +#define glVertexArrayVertexAttribOffsetEXT epoxy_glVertexArrayVertexAttribOffsetEXT +#define glVertexArrayVertexBindingDivisorEXT epoxy_glVertexArrayVertexBindingDivisorEXT +#define glVertexArrayVertexBuffer epoxy_glVertexArrayVertexBuffer +#define glVertexArrayVertexBuffers epoxy_glVertexArrayVertexBuffers +#define glVertexArrayVertexOffsetEXT epoxy_glVertexArrayVertexOffsetEXT +#define glVertexAttrib1d epoxy_glVertexAttrib1d +#define glVertexAttrib1dARB epoxy_glVertexAttrib1dARB +#define glVertexAttrib1dNV epoxy_glVertexAttrib1dNV +#define glVertexAttrib1dv epoxy_glVertexAttrib1dv +#define glVertexAttrib1dvARB epoxy_glVertexAttrib1dvARB +#define glVertexAttrib1dvNV epoxy_glVertexAttrib1dvNV +#define glVertexAttrib1f epoxy_glVertexAttrib1f +#define glVertexAttrib1fARB epoxy_glVertexAttrib1fARB +#define glVertexAttrib1fNV epoxy_glVertexAttrib1fNV +#define glVertexAttrib1fv epoxy_glVertexAttrib1fv +#define glVertexAttrib1fvARB epoxy_glVertexAttrib1fvARB +#define glVertexAttrib1fvNV epoxy_glVertexAttrib1fvNV +#define glVertexAttrib1hNV epoxy_glVertexAttrib1hNV +#define glVertexAttrib1hvNV epoxy_glVertexAttrib1hvNV +#define glVertexAttrib1s epoxy_glVertexAttrib1s +#define glVertexAttrib1sARB epoxy_glVertexAttrib1sARB +#define glVertexAttrib1sNV epoxy_glVertexAttrib1sNV +#define glVertexAttrib1sv epoxy_glVertexAttrib1sv +#define glVertexAttrib1svARB epoxy_glVertexAttrib1svARB +#define glVertexAttrib1svNV epoxy_glVertexAttrib1svNV +#define glVertexAttrib2d epoxy_glVertexAttrib2d +#define glVertexAttrib2dARB epoxy_glVertexAttrib2dARB +#define glVertexAttrib2dNV epoxy_glVertexAttrib2dNV +#define glVertexAttrib2dv epoxy_glVertexAttrib2dv +#define glVertexAttrib2dvARB epoxy_glVertexAttrib2dvARB +#define glVertexAttrib2dvNV epoxy_glVertexAttrib2dvNV +#define glVertexAttrib2f epoxy_glVertexAttrib2f +#define glVertexAttrib2fARB epoxy_glVertexAttrib2fARB +#define glVertexAttrib2fNV epoxy_glVertexAttrib2fNV +#define glVertexAttrib2fv epoxy_glVertexAttrib2fv +#define glVertexAttrib2fvARB epoxy_glVertexAttrib2fvARB +#define glVertexAttrib2fvNV epoxy_glVertexAttrib2fvNV +#define glVertexAttrib2hNV epoxy_glVertexAttrib2hNV +#define glVertexAttrib2hvNV epoxy_glVertexAttrib2hvNV +#define glVertexAttrib2s epoxy_glVertexAttrib2s +#define glVertexAttrib2sARB epoxy_glVertexAttrib2sARB +#define glVertexAttrib2sNV epoxy_glVertexAttrib2sNV +#define glVertexAttrib2sv epoxy_glVertexAttrib2sv +#define glVertexAttrib2svARB epoxy_glVertexAttrib2svARB +#define glVertexAttrib2svNV epoxy_glVertexAttrib2svNV +#define glVertexAttrib3d epoxy_glVertexAttrib3d +#define glVertexAttrib3dARB epoxy_glVertexAttrib3dARB +#define glVertexAttrib3dNV epoxy_glVertexAttrib3dNV +#define glVertexAttrib3dv epoxy_glVertexAttrib3dv +#define glVertexAttrib3dvARB epoxy_glVertexAttrib3dvARB +#define glVertexAttrib3dvNV epoxy_glVertexAttrib3dvNV +#define glVertexAttrib3f epoxy_glVertexAttrib3f +#define glVertexAttrib3fARB epoxy_glVertexAttrib3fARB +#define glVertexAttrib3fNV epoxy_glVertexAttrib3fNV +#define glVertexAttrib3fv epoxy_glVertexAttrib3fv +#define glVertexAttrib3fvARB epoxy_glVertexAttrib3fvARB +#define glVertexAttrib3fvNV epoxy_glVertexAttrib3fvNV +#define glVertexAttrib3hNV epoxy_glVertexAttrib3hNV +#define glVertexAttrib3hvNV epoxy_glVertexAttrib3hvNV +#define glVertexAttrib3s epoxy_glVertexAttrib3s +#define glVertexAttrib3sARB epoxy_glVertexAttrib3sARB +#define glVertexAttrib3sNV epoxy_glVertexAttrib3sNV +#define glVertexAttrib3sv epoxy_glVertexAttrib3sv +#define glVertexAttrib3svARB epoxy_glVertexAttrib3svARB +#define glVertexAttrib3svNV epoxy_glVertexAttrib3svNV +#define glVertexAttrib4Nbv epoxy_glVertexAttrib4Nbv +#define glVertexAttrib4NbvARB epoxy_glVertexAttrib4NbvARB +#define glVertexAttrib4Niv epoxy_glVertexAttrib4Niv +#define glVertexAttrib4NivARB epoxy_glVertexAttrib4NivARB +#define glVertexAttrib4Nsv epoxy_glVertexAttrib4Nsv +#define glVertexAttrib4NsvARB epoxy_glVertexAttrib4NsvARB +#define glVertexAttrib4Nub epoxy_glVertexAttrib4Nub +#define glVertexAttrib4NubARB epoxy_glVertexAttrib4NubARB +#define glVertexAttrib4Nubv epoxy_glVertexAttrib4Nubv +#define glVertexAttrib4NubvARB epoxy_glVertexAttrib4NubvARB +#define glVertexAttrib4Nuiv epoxy_glVertexAttrib4Nuiv +#define glVertexAttrib4NuivARB epoxy_glVertexAttrib4NuivARB +#define glVertexAttrib4Nusv epoxy_glVertexAttrib4Nusv +#define glVertexAttrib4NusvARB epoxy_glVertexAttrib4NusvARB +#define glVertexAttrib4bv epoxy_glVertexAttrib4bv +#define glVertexAttrib4bvARB epoxy_glVertexAttrib4bvARB +#define glVertexAttrib4d epoxy_glVertexAttrib4d +#define glVertexAttrib4dARB epoxy_glVertexAttrib4dARB +#define glVertexAttrib4dNV epoxy_glVertexAttrib4dNV +#define glVertexAttrib4dv epoxy_glVertexAttrib4dv +#define glVertexAttrib4dvARB epoxy_glVertexAttrib4dvARB +#define glVertexAttrib4dvNV epoxy_glVertexAttrib4dvNV +#define glVertexAttrib4f epoxy_glVertexAttrib4f +#define glVertexAttrib4fARB epoxy_glVertexAttrib4fARB +#define glVertexAttrib4fNV epoxy_glVertexAttrib4fNV +#define glVertexAttrib4fv epoxy_glVertexAttrib4fv +#define glVertexAttrib4fvARB epoxy_glVertexAttrib4fvARB +#define glVertexAttrib4fvNV epoxy_glVertexAttrib4fvNV +#define glVertexAttrib4hNV epoxy_glVertexAttrib4hNV +#define glVertexAttrib4hvNV epoxy_glVertexAttrib4hvNV +#define glVertexAttrib4iv epoxy_glVertexAttrib4iv +#define glVertexAttrib4ivARB epoxy_glVertexAttrib4ivARB +#define glVertexAttrib4s epoxy_glVertexAttrib4s +#define glVertexAttrib4sARB epoxy_glVertexAttrib4sARB +#define glVertexAttrib4sNV epoxy_glVertexAttrib4sNV +#define glVertexAttrib4sv epoxy_glVertexAttrib4sv +#define glVertexAttrib4svARB epoxy_glVertexAttrib4svARB +#define glVertexAttrib4svNV epoxy_glVertexAttrib4svNV +#define glVertexAttrib4ubNV epoxy_glVertexAttrib4ubNV +#define glVertexAttrib4ubv epoxy_glVertexAttrib4ubv +#define glVertexAttrib4ubvARB epoxy_glVertexAttrib4ubvARB +#define glVertexAttrib4ubvNV epoxy_glVertexAttrib4ubvNV +#define glVertexAttrib4uiv epoxy_glVertexAttrib4uiv +#define glVertexAttrib4uivARB epoxy_glVertexAttrib4uivARB +#define glVertexAttrib4usv epoxy_glVertexAttrib4usv +#define glVertexAttrib4usvARB epoxy_glVertexAttrib4usvARB +#define glVertexAttribArrayObjectATI epoxy_glVertexAttribArrayObjectATI +#define glVertexAttribBinding epoxy_glVertexAttribBinding +#define glVertexAttribDivisor epoxy_glVertexAttribDivisor +#define glVertexAttribDivisorANGLE epoxy_glVertexAttribDivisorANGLE +#define glVertexAttribDivisorARB epoxy_glVertexAttribDivisorARB +#define glVertexAttribDivisorEXT epoxy_glVertexAttribDivisorEXT +#define glVertexAttribDivisorNV epoxy_glVertexAttribDivisorNV +#define glVertexAttribFormat epoxy_glVertexAttribFormat +#define glVertexAttribFormatNV epoxy_glVertexAttribFormatNV +#define glVertexAttribI1i epoxy_glVertexAttribI1i +#define glVertexAttribI1iEXT epoxy_glVertexAttribI1iEXT +#define glVertexAttribI1iv epoxy_glVertexAttribI1iv +#define glVertexAttribI1ivEXT epoxy_glVertexAttribI1ivEXT +#define glVertexAttribI1ui epoxy_glVertexAttribI1ui +#define glVertexAttribI1uiEXT epoxy_glVertexAttribI1uiEXT +#define glVertexAttribI1uiv epoxy_glVertexAttribI1uiv +#define glVertexAttribI1uivEXT epoxy_glVertexAttribI1uivEXT +#define glVertexAttribI2i epoxy_glVertexAttribI2i +#define glVertexAttribI2iEXT epoxy_glVertexAttribI2iEXT +#define glVertexAttribI2iv epoxy_glVertexAttribI2iv +#define glVertexAttribI2ivEXT epoxy_glVertexAttribI2ivEXT +#define glVertexAttribI2ui epoxy_glVertexAttribI2ui +#define glVertexAttribI2uiEXT epoxy_glVertexAttribI2uiEXT +#define glVertexAttribI2uiv epoxy_glVertexAttribI2uiv +#define glVertexAttribI2uivEXT epoxy_glVertexAttribI2uivEXT +#define glVertexAttribI3i epoxy_glVertexAttribI3i +#define glVertexAttribI3iEXT epoxy_glVertexAttribI3iEXT +#define glVertexAttribI3iv epoxy_glVertexAttribI3iv +#define glVertexAttribI3ivEXT epoxy_glVertexAttribI3ivEXT +#define glVertexAttribI3ui epoxy_glVertexAttribI3ui +#define glVertexAttribI3uiEXT epoxy_glVertexAttribI3uiEXT +#define glVertexAttribI3uiv epoxy_glVertexAttribI3uiv +#define glVertexAttribI3uivEXT epoxy_glVertexAttribI3uivEXT +#define glVertexAttribI4bv epoxy_glVertexAttribI4bv +#define glVertexAttribI4bvEXT epoxy_glVertexAttribI4bvEXT +#define glVertexAttribI4i epoxy_glVertexAttribI4i +#define glVertexAttribI4iEXT epoxy_glVertexAttribI4iEXT +#define glVertexAttribI4iv epoxy_glVertexAttribI4iv +#define glVertexAttribI4ivEXT epoxy_glVertexAttribI4ivEXT +#define glVertexAttribI4sv epoxy_glVertexAttribI4sv +#define glVertexAttribI4svEXT epoxy_glVertexAttribI4svEXT +#define glVertexAttribI4ubv epoxy_glVertexAttribI4ubv +#define glVertexAttribI4ubvEXT epoxy_glVertexAttribI4ubvEXT +#define glVertexAttribI4ui epoxy_glVertexAttribI4ui +#define glVertexAttribI4uiEXT epoxy_glVertexAttribI4uiEXT +#define glVertexAttribI4uiv epoxy_glVertexAttribI4uiv +#define glVertexAttribI4uivEXT epoxy_glVertexAttribI4uivEXT +#define glVertexAttribI4usv epoxy_glVertexAttribI4usv +#define glVertexAttribI4usvEXT epoxy_glVertexAttribI4usvEXT +#define glVertexAttribIFormat epoxy_glVertexAttribIFormat +#define glVertexAttribIFormatNV epoxy_glVertexAttribIFormatNV +#define glVertexAttribIPointer epoxy_glVertexAttribIPointer +#define glVertexAttribIPointerEXT epoxy_glVertexAttribIPointerEXT +#define glVertexAttribL1d epoxy_glVertexAttribL1d +#define glVertexAttribL1dEXT epoxy_glVertexAttribL1dEXT +#define glVertexAttribL1dv epoxy_glVertexAttribL1dv +#define glVertexAttribL1dvEXT epoxy_glVertexAttribL1dvEXT +#define glVertexAttribL1i64NV epoxy_glVertexAttribL1i64NV +#define glVertexAttribL1i64vNV epoxy_glVertexAttribL1i64vNV +#define glVertexAttribL1ui64ARB epoxy_glVertexAttribL1ui64ARB +#define glVertexAttribL1ui64NV epoxy_glVertexAttribL1ui64NV +#define glVertexAttribL1ui64vARB epoxy_glVertexAttribL1ui64vARB +#define glVertexAttribL1ui64vNV epoxy_glVertexAttribL1ui64vNV +#define glVertexAttribL2d epoxy_glVertexAttribL2d +#define glVertexAttribL2dEXT epoxy_glVertexAttribL2dEXT +#define glVertexAttribL2dv epoxy_glVertexAttribL2dv +#define glVertexAttribL2dvEXT epoxy_glVertexAttribL2dvEXT +#define glVertexAttribL2i64NV epoxy_glVertexAttribL2i64NV +#define glVertexAttribL2i64vNV epoxy_glVertexAttribL2i64vNV +#define glVertexAttribL2ui64NV epoxy_glVertexAttribL2ui64NV +#define glVertexAttribL2ui64vNV epoxy_glVertexAttribL2ui64vNV +#define glVertexAttribL3d epoxy_glVertexAttribL3d +#define glVertexAttribL3dEXT epoxy_glVertexAttribL3dEXT +#define glVertexAttribL3dv epoxy_glVertexAttribL3dv +#define glVertexAttribL3dvEXT epoxy_glVertexAttribL3dvEXT +#define glVertexAttribL3i64NV epoxy_glVertexAttribL3i64NV +#define glVertexAttribL3i64vNV epoxy_glVertexAttribL3i64vNV +#define glVertexAttribL3ui64NV epoxy_glVertexAttribL3ui64NV +#define glVertexAttribL3ui64vNV epoxy_glVertexAttribL3ui64vNV +#define glVertexAttribL4d epoxy_glVertexAttribL4d +#define glVertexAttribL4dEXT epoxy_glVertexAttribL4dEXT +#define glVertexAttribL4dv epoxy_glVertexAttribL4dv +#define glVertexAttribL4dvEXT epoxy_glVertexAttribL4dvEXT +#define glVertexAttribL4i64NV epoxy_glVertexAttribL4i64NV +#define glVertexAttribL4i64vNV epoxy_glVertexAttribL4i64vNV +#define glVertexAttribL4ui64NV epoxy_glVertexAttribL4ui64NV +#define glVertexAttribL4ui64vNV epoxy_glVertexAttribL4ui64vNV +#define glVertexAttribLFormat epoxy_glVertexAttribLFormat +#define glVertexAttribLFormatNV epoxy_glVertexAttribLFormatNV +#define glVertexAttribLPointer epoxy_glVertexAttribLPointer +#define glVertexAttribLPointerEXT epoxy_glVertexAttribLPointerEXT +#define glVertexAttribP1ui epoxy_glVertexAttribP1ui +#define glVertexAttribP1uiv epoxy_glVertexAttribP1uiv +#define glVertexAttribP2ui epoxy_glVertexAttribP2ui +#define glVertexAttribP2uiv epoxy_glVertexAttribP2uiv +#define glVertexAttribP3ui epoxy_glVertexAttribP3ui +#define glVertexAttribP3uiv epoxy_glVertexAttribP3uiv +#define glVertexAttribP4ui epoxy_glVertexAttribP4ui +#define glVertexAttribP4uiv epoxy_glVertexAttribP4uiv +#define glVertexAttribParameteriAMD epoxy_glVertexAttribParameteriAMD +#define glVertexAttribPointer epoxy_glVertexAttribPointer +#define glVertexAttribPointerARB epoxy_glVertexAttribPointerARB +#define glVertexAttribPointerNV epoxy_glVertexAttribPointerNV +#define glVertexAttribs1dvNV epoxy_glVertexAttribs1dvNV +#define glVertexAttribs1fvNV epoxy_glVertexAttribs1fvNV +#define glVertexAttribs1hvNV epoxy_glVertexAttribs1hvNV +#define glVertexAttribs1svNV epoxy_glVertexAttribs1svNV +#define glVertexAttribs2dvNV epoxy_glVertexAttribs2dvNV +#define glVertexAttribs2fvNV epoxy_glVertexAttribs2fvNV +#define glVertexAttribs2hvNV epoxy_glVertexAttribs2hvNV +#define glVertexAttribs2svNV epoxy_glVertexAttribs2svNV +#define glVertexAttribs3dvNV epoxy_glVertexAttribs3dvNV +#define glVertexAttribs3fvNV epoxy_glVertexAttribs3fvNV +#define glVertexAttribs3hvNV epoxy_glVertexAttribs3hvNV +#define glVertexAttribs3svNV epoxy_glVertexAttribs3svNV +#define glVertexAttribs4dvNV epoxy_glVertexAttribs4dvNV +#define glVertexAttribs4fvNV epoxy_glVertexAttribs4fvNV +#define glVertexAttribs4hvNV epoxy_glVertexAttribs4hvNV +#define glVertexAttribs4svNV epoxy_glVertexAttribs4svNV +#define glVertexAttribs4ubvNV epoxy_glVertexAttribs4ubvNV +#define glVertexBindingDivisor epoxy_glVertexBindingDivisor +#define glVertexBlendARB epoxy_glVertexBlendARB +#define glVertexBlendEnvfATI epoxy_glVertexBlendEnvfATI +#define glVertexBlendEnviATI epoxy_glVertexBlendEnviATI +#define glVertexFormatNV epoxy_glVertexFormatNV +#define glVertexP2ui epoxy_glVertexP2ui +#define glVertexP2uiv epoxy_glVertexP2uiv +#define glVertexP3ui epoxy_glVertexP3ui +#define glVertexP3uiv epoxy_glVertexP3uiv +#define glVertexP4ui epoxy_glVertexP4ui +#define glVertexP4uiv epoxy_glVertexP4uiv +#define glVertexPointer epoxy_glVertexPointer +#define glVertexPointerEXT epoxy_glVertexPointerEXT +#define glVertexPointerListIBM epoxy_glVertexPointerListIBM +#define glVertexPointervINTEL epoxy_glVertexPointervINTEL +#define glVertexStream1dATI epoxy_glVertexStream1dATI +#define glVertexStream1dvATI epoxy_glVertexStream1dvATI +#define glVertexStream1fATI epoxy_glVertexStream1fATI +#define glVertexStream1fvATI epoxy_glVertexStream1fvATI +#define glVertexStream1iATI epoxy_glVertexStream1iATI +#define glVertexStream1ivATI epoxy_glVertexStream1ivATI +#define glVertexStream1sATI epoxy_glVertexStream1sATI +#define glVertexStream1svATI epoxy_glVertexStream1svATI +#define glVertexStream2dATI epoxy_glVertexStream2dATI +#define glVertexStream2dvATI epoxy_glVertexStream2dvATI +#define glVertexStream2fATI epoxy_glVertexStream2fATI +#define glVertexStream2fvATI epoxy_glVertexStream2fvATI +#define glVertexStream2iATI epoxy_glVertexStream2iATI +#define glVertexStream2ivATI epoxy_glVertexStream2ivATI +#define glVertexStream2sATI epoxy_glVertexStream2sATI +#define glVertexStream2svATI epoxy_glVertexStream2svATI +#define glVertexStream3dATI epoxy_glVertexStream3dATI +#define glVertexStream3dvATI epoxy_glVertexStream3dvATI +#define glVertexStream3fATI epoxy_glVertexStream3fATI +#define glVertexStream3fvATI epoxy_glVertexStream3fvATI +#define glVertexStream3iATI epoxy_glVertexStream3iATI +#define glVertexStream3ivATI epoxy_glVertexStream3ivATI +#define glVertexStream3sATI epoxy_glVertexStream3sATI +#define glVertexStream3svATI epoxy_glVertexStream3svATI +#define glVertexStream4dATI epoxy_glVertexStream4dATI +#define glVertexStream4dvATI epoxy_glVertexStream4dvATI +#define glVertexStream4fATI epoxy_glVertexStream4fATI +#define glVertexStream4fvATI epoxy_glVertexStream4fvATI +#define glVertexStream4iATI epoxy_glVertexStream4iATI +#define glVertexStream4ivATI epoxy_glVertexStream4ivATI +#define glVertexStream4sATI epoxy_glVertexStream4sATI +#define glVertexStream4svATI epoxy_glVertexStream4svATI +#define glVertexWeightPointerEXT epoxy_glVertexWeightPointerEXT +#define glVertexWeightfEXT epoxy_glVertexWeightfEXT +#define glVertexWeightfvEXT epoxy_glVertexWeightfvEXT +#define glVertexWeighthNV epoxy_glVertexWeighthNV +#define glVertexWeighthvNV epoxy_glVertexWeighthvNV +#define glVideoCaptureNV epoxy_glVideoCaptureNV +#define glVideoCaptureStreamParameterdvNV epoxy_glVideoCaptureStreamParameterdvNV +#define glVideoCaptureStreamParameterfvNV epoxy_glVideoCaptureStreamParameterfvNV +#define glVideoCaptureStreamParameterivNV epoxy_glVideoCaptureStreamParameterivNV +#define glViewport epoxy_glViewport +#define glViewportArrayv epoxy_glViewportArrayv +#define glViewportArrayvNV epoxy_glViewportArrayvNV +#define glViewportIndexedf epoxy_glViewportIndexedf +#define glViewportIndexedfNV epoxy_glViewportIndexedfNV +#define glViewportIndexedfv epoxy_glViewportIndexedfv +#define glViewportIndexedfvNV epoxy_glViewportIndexedfvNV +#define glWaitSync epoxy_glWaitSync +#define glWaitSyncAPPLE epoxy_glWaitSyncAPPLE +#define glWeightPathsNV epoxy_glWeightPathsNV +#define glWeightPointerARB epoxy_glWeightPointerARB +#define glWeightPointerOES epoxy_glWeightPointerOES +#define glWeightbvARB epoxy_glWeightbvARB +#define glWeightdvARB epoxy_glWeightdvARB +#define glWeightfvARB epoxy_glWeightfvARB +#define glWeightivARB epoxy_glWeightivARB +#define glWeightsvARB epoxy_glWeightsvARB +#define glWeightubvARB epoxy_glWeightubvARB +#define glWeightuivARB epoxy_glWeightuivARB +#define glWeightusvARB epoxy_glWeightusvARB +#define glWindowPos2d epoxy_glWindowPos2d +#define glWindowPos2dARB epoxy_glWindowPos2dARB +#define glWindowPos2dMESA epoxy_glWindowPos2dMESA +#define glWindowPos2dv epoxy_glWindowPos2dv +#define glWindowPos2dvARB epoxy_glWindowPos2dvARB +#define glWindowPos2dvMESA epoxy_glWindowPos2dvMESA +#define glWindowPos2f epoxy_glWindowPos2f +#define glWindowPos2fARB epoxy_glWindowPos2fARB +#define glWindowPos2fMESA epoxy_glWindowPos2fMESA +#define glWindowPos2fv epoxy_glWindowPos2fv +#define glWindowPos2fvARB epoxy_glWindowPos2fvARB +#define glWindowPos2fvMESA epoxy_glWindowPos2fvMESA +#define glWindowPos2i epoxy_glWindowPos2i +#define glWindowPos2iARB epoxy_glWindowPos2iARB +#define glWindowPos2iMESA epoxy_glWindowPos2iMESA +#define glWindowPos2iv epoxy_glWindowPos2iv +#define glWindowPos2ivARB epoxy_glWindowPos2ivARB +#define glWindowPos2ivMESA epoxy_glWindowPos2ivMESA +#define glWindowPos2s epoxy_glWindowPos2s +#define glWindowPos2sARB epoxy_glWindowPos2sARB +#define glWindowPos2sMESA epoxy_glWindowPos2sMESA +#define glWindowPos2sv epoxy_glWindowPos2sv +#define glWindowPos2svARB epoxy_glWindowPos2svARB +#define glWindowPos2svMESA epoxy_glWindowPos2svMESA +#define glWindowPos3d epoxy_glWindowPos3d +#define glWindowPos3dARB epoxy_glWindowPos3dARB +#define glWindowPos3dMESA epoxy_glWindowPos3dMESA +#define glWindowPos3dv epoxy_glWindowPos3dv +#define glWindowPos3dvARB epoxy_glWindowPos3dvARB +#define glWindowPos3dvMESA epoxy_glWindowPos3dvMESA +#define glWindowPos3f epoxy_glWindowPos3f +#define glWindowPos3fARB epoxy_glWindowPos3fARB +#define glWindowPos3fMESA epoxy_glWindowPos3fMESA +#define glWindowPos3fv epoxy_glWindowPos3fv +#define glWindowPos3fvARB epoxy_glWindowPos3fvARB +#define glWindowPos3fvMESA epoxy_glWindowPos3fvMESA +#define glWindowPos3i epoxy_glWindowPos3i +#define glWindowPos3iARB epoxy_glWindowPos3iARB +#define glWindowPos3iMESA epoxy_glWindowPos3iMESA +#define glWindowPos3iv epoxy_glWindowPos3iv +#define glWindowPos3ivARB epoxy_glWindowPos3ivARB +#define glWindowPos3ivMESA epoxy_glWindowPos3ivMESA +#define glWindowPos3s epoxy_glWindowPos3s +#define glWindowPos3sARB epoxy_glWindowPos3sARB +#define glWindowPos3sMESA epoxy_glWindowPos3sMESA +#define glWindowPos3sv epoxy_glWindowPos3sv +#define glWindowPos3svARB epoxy_glWindowPos3svARB +#define glWindowPos3svMESA epoxy_glWindowPos3svMESA +#define glWindowPos4dMESA epoxy_glWindowPos4dMESA +#define glWindowPos4dvMESA epoxy_glWindowPos4dvMESA +#define glWindowPos4fMESA epoxy_glWindowPos4fMESA +#define glWindowPos4fvMESA epoxy_glWindowPos4fvMESA +#define glWindowPos4iMESA epoxy_glWindowPos4iMESA +#define glWindowPos4ivMESA epoxy_glWindowPos4ivMESA +#define glWindowPos4sMESA epoxy_glWindowPos4sMESA +#define glWindowPos4svMESA epoxy_glWindowPos4svMESA +#define glWriteMaskEXT epoxy_glWriteMaskEXT diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/glx_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/glx_generated.h new file mode 100644 index 0000000000..a5a13e5d60 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/glx_generated.h @@ -0,0 +1,969 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + */ + +#pragma once +#include +#include + +#include "epoxy/gl.h" +#include +#include +typedef XID GLXFBConfigID; +typedef struct __GLXFBConfigRec *GLXFBConfig; +typedef XID GLXContextID; +typedef struct __GLXcontextRec *GLXContext; +typedef XID GLXPixmap; +typedef XID GLXDrawable; +typedef XID GLXWindow; +typedef XID GLXPbuffer; +typedef void (APIENTRY *__GLXextFuncPtr)(void); +typedef XID GLXVideoCaptureDeviceNV; +typedef unsigned int GLXVideoDeviceNV; +typedef XID GLXVideoSourceSGIX; +typedef XID GLXFBConfigIDSGIX; +typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; +typedef XID GLXPbufferSGIX; +typedef struct { + int event_type; /* GLX_DAMAGED or GLX_SAVED */ + int draw_type; /* GLX_WINDOW or GLX_PBUFFER */ + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came for SendEvent request */ + Display *display; /* display the event was read from */ + GLXDrawable drawable; /* XID of Drawable */ + unsigned int buffer_mask; /* mask indicating which buffers are affected */ + unsigned int aux_buffer; /* which aux buffer was affected */ + int x, y; + int width, height; + int count; /* if nonzero, at least this many more */ +} GLXPbufferClobberEvent; +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came from a SendEvent request */ + Display *display; /* Display the event was read from */ + GLXDrawable drawable; /* drawable on which event was requested in event mask */ + int event_type; + int64_t ust; + int64_t msc; + int64_t sbc; +} GLXBufferSwapComplete; +typedef union __GLXEvent { + GLXPbufferClobberEvent glxpbufferclobber; + GLXBufferSwapComplete glxbufferswapcomplete; + long pad[24]; +} GLXEvent; +typedef struct { + int type; + unsigned long serial; + Bool send_event; + Display *display; + int extension; + int evtype; + GLXDrawable window; + Bool stereo_tree; +} GLXStereoNotifyEventEXT; +typedef struct { + int type; + unsigned long serial; /* # of last request processed by server */ + Bool send_event; /* true if this came for SendEvent request */ + Display *display; /* display the event was read from */ + GLXDrawable drawable; /* i.d. of Drawable */ + int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */ + int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */ + unsigned int mask; /* mask indicating which buffers are affected*/ + int x, y; + int width, height; + int count; /* if nonzero, at least this many more */ +} GLXBufferClobberEventSGIX; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int networkId; +} GLXHyperpipeNetworkSGIX; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int channel; + unsigned int participationType; + int timeSlice; +} GLXHyperpipeConfigSGIX; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int srcXOrigin, srcYOrigin, srcWidth, srcHeight; + int destXOrigin, destYOrigin, destWidth, destHeight; +} GLXPipeRect; +typedef struct { + char pipeName[80]; /* Should be [GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX] */ + int XOrigin, YOrigin, maxHeight, maxWidth; +} GLXPipeRectLimits; + +#define GLX_VERSION_1_0 1 +#define GLX_VERSION_1_1 1 +#define GLX_VERSION_1_2 1 +#define GLX_VERSION_1_3 1 +#define GLX_VERSION_1_4 1 + +#define GLX_3DFX_multisample 1 +#define GLX_AMD_gpu_association 1 +#define GLX_ARB_context_flush_control 1 +#define GLX_ARB_create_context 1 +#define GLX_ARB_create_context_profile 1 +#define GLX_ARB_create_context_robustness 1 +#define GLX_ARB_fbconfig_float 1 +#define GLX_ARB_framebuffer_sRGB 1 +#define GLX_ARB_get_proc_address 1 +#define GLX_ARB_multisample 1 +#define GLX_ARB_robustness_application_isolation 1 +#define GLX_ARB_robustness_share_group_isolation 1 +#define GLX_ARB_vertex_buffer_object 1 +#define GLX_EXT_buffer_age 1 +#define GLX_EXT_create_context_es2_profile 1 +#define GLX_EXT_create_context_es_profile 1 +#define GLX_EXT_fbconfig_packed_float 1 +#define GLX_EXT_framebuffer_sRGB 1 +#define GLX_EXT_import_context 1 +#define GLX_EXT_stereo_tree 1 +#define GLX_EXT_swap_control 1 +#define GLX_EXT_swap_control_tear 1 +#define GLX_EXT_texture_from_pixmap 1 +#define GLX_EXT_visual_info 1 +#define GLX_EXT_visual_rating 1 +#define GLX_INTEL_swap_event 1 +#define GLX_MESA_agp_offset 1 +#define GLX_MESA_copy_sub_buffer 1 +#define GLX_MESA_pixmap_colormap 1 +#define GLX_MESA_query_renderer 1 +#define GLX_MESA_release_buffers 1 +#define GLX_MESA_set_3dfx_mode 1 +#define GLX_NV_copy_buffer 1 +#define GLX_NV_copy_image 1 +#define GLX_NV_delay_before_swap 1 +#define GLX_NV_float_buffer 1 +#define GLX_NV_multisample_coverage 1 +#define GLX_NV_present_video 1 +#define GLX_NV_swap_group 1 +#define GLX_NV_video_capture 1 +#define GLX_NV_video_out 1 +#define GLX_OML_swap_method 1 +#define GLX_OML_sync_control 1 +#define GLX_SGIS_blended_overlay 1 +#define GLX_SGIS_multisample 1 +#define GLX_SGIS_shared_multisample 1 +#define GLX_SGIX_dmbuffer 1 +#define GLX_SGIX_fbconfig 1 +#define GLX_SGIX_hyperpipe 1 +#define GLX_SGIX_pbuffer 1 +#define GLX_SGIX_swap_barrier 1 +#define GLX_SGIX_swap_group 1 +#define GLX_SGIX_video_resize 1 +#define GLX_SGIX_video_source 1 +#define GLX_SGIX_visual_select_group 1 +#define GLX_SGI_cushion 1 +#define GLX_SGI_make_current_read 1 +#define GLX_SGI_swap_control 1 +#define GLX_SGI_video_sync 1 +#define GLX_SUN_get_transparent_index 1 + +#define GLX_EXTENSION_NAME "GLX" +#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 +#define GLX_PbufferClobber 0 +#define GLX_STEREO_NOTIFY_EXT 0x00000000 +#define GLX_SYNC_FRAME_SGIX 0x00000000 +#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 +#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 +#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 +#define GLX_PIPE_RECT_SGIX 0x00000001 +#define GLX_RGBA_BIT 0x00000001 +#define GLX_RGBA_BIT_SGIX 0x00000001 +#define GLX_STEREO_NOTIFY_MASK_EXT 0x00000001 +#define GLX_SYNC_SWAP_SGIX 0x00000001 +#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 +#define GLX_WINDOW_BIT 0x00000001 +#define GLX_WINDOW_BIT_SGIX 0x00000001 +#define GLX_COLOR_INDEX_BIT 0x00000002 +#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 +#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 +#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 +#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 +#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 +#define GLX_PIXMAP_BIT 0x00000002 +#define GLX_PIXMAP_BIT_SGIX 0x00000002 +#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 +#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 +#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 +#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 +#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 +#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 +#define GLX_PBUFFER_BIT 0x00000004 +#define GLX_PBUFFER_BIT_SGIX 0x00000004 +#define GLX_RGBA_FLOAT_BIT_ARB 0x00000004 +#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 +#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 +#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 +#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 +#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 +#define GLX_AUX_BUFFERS_BIT 0x00000010 +#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 +#define GLX_DEPTH_BUFFER_BIT 0x00000020 +#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 +#define GLX_STENCIL_BUFFER_BIT 0x00000040 +#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 +#define GLX_ACCUM_BUFFER_BIT 0x00000080 +#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 +#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 +#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 +#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 +#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 +#define GLX_3DFX_WINDOW_MODE_MESA 0x1 +#define GLX_VENDOR 0x1 +#define GLX_GPU_VENDOR_AMD 0x1F00 +#define GLX_GPU_RENDERER_STRING_AMD 0x1F01 +#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 +#define GLX_VERSION 0x2 +#define GLX_CONFIG_CAVEAT 0x20 +#define GLX_VISUAL_CAVEAT_EXT 0x20 +#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define GLX_CONTEXT_FLAGS_ARB 0x2094 +#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 +#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#define GLX_FLOAT_COMPONENTS_NV 0x20B0 +#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 +#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 +#define GLX_COLOR_SAMPLES_NV 0x20B3 +#define GLX_RGBA_FLOAT_TYPE_ARB 0x20B9 +#define GLX_VIDEO_OUT_COLOR_NV 0x20C3 +#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 +#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 +#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define GLX_VIDEO_OUT_FRAME_NV 0x20C8 +#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 +#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA +#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB +#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC +#define GLX_DEVICE_ID_NV 0x20CD +#define GLX_UNIQUE_ID_NV 0x20CE +#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 +#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 +#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 +#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 +#define GLX_Y_INVERTED_EXT 0x20D4 +#define GLX_TEXTURE_FORMAT_EXT 0x20D5 +#define GLX_TEXTURE_TARGET_EXT 0x20D6 +#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 +#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 +#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 +#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA +#define GLX_TEXTURE_1D_EXT 0x20DB +#define GLX_TEXTURE_2D_EXT 0x20DC +#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD +#define GLX_FRONT_EXT 0x20DE +#define GLX_FRONT_LEFT_EXT 0x20DE +#define GLX_FRONT_RIGHT_EXT 0x20DF +#define GLX_BACK_EXT 0x20E0 +#define GLX_BACK_LEFT_EXT 0x20E0 +#define GLX_BACK_RIGHT_EXT 0x20E1 +#define GLX_AUX0_EXT 0x20E2 +#define GLX_AUX1_EXT 0x20E3 +#define GLX_AUX2_EXT 0x20E4 +#define GLX_AUX3_EXT 0x20E5 +#define GLX_AUX4_EXT 0x20E6 +#define GLX_AUX5_EXT 0x20E7 +#define GLX_AUX6_EXT 0x20E8 +#define GLX_AUX7_EXT 0x20E9 +#define GLX_AUX8_EXT 0x20EA +#define GLX_AUX9_EXT 0x20EB +#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 +#define GLX_SWAP_INTERVAL_EXT 0x20F1 +#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 +#define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 +#define GLX_BACK_BUFFER_AGE_EXT 0x20F4 +#define GLX_STEREO_TREE_EXT 0x20F5 +#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define GLX_GPU_RAM_AMD 0x21A3 +#define GLX_GPU_CLOCK_AMD 0x21A4 +#define GLX_GPU_NUM_PIPES_AMD 0x21A5 +#define GLX_GPU_NUM_SIMD_AMD 0x21A6 +#define GLX_GPU_NUM_RB_AMD 0x21A7 +#define GLX_GPU_NUM_SPI_AMD 0x21A8 +#define GLX_X_VISUAL_TYPE 0x22 +#define GLX_X_VISUAL_TYPE_EXT 0x22 +#define GLX_TRANSPARENT_TYPE 0x23 +#define GLX_TRANSPARENT_TYPE_EXT 0x23 +#define GLX_TRANSPARENT_INDEX_VALUE 0x24 +#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 +#define GLX_TRANSPARENT_RED_VALUE 0x25 +#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 +#define GLX_TRANSPARENT_GREEN_VALUE 0x26 +#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 +#define GLX_TRANSPARENT_BLUE_VALUE 0x27 +#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 +#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 +#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 +#define GLX_EXTENSIONS 0x3 +#define GLX_NONE 0x8000 +#define GLX_NONE_EXT 0x8000 +#define GLX_SLOW_CONFIG 0x8001 +#define GLX_SLOW_VISUAL_EXT 0x8001 +#define GLX_TRUE_COLOR 0x8002 +#define GLX_TRUE_COLOR_EXT 0x8002 +#define GLX_DIRECT_COLOR 0x8003 +#define GLX_DIRECT_COLOR_EXT 0x8003 +#define GLX_PSEUDO_COLOR 0x8004 +#define GLX_PSEUDO_COLOR_EXT 0x8004 +#define GLX_STATIC_COLOR 0x8005 +#define GLX_STATIC_COLOR_EXT 0x8005 +#define GLX_GRAY_SCALE 0x8006 +#define GLX_GRAY_SCALE_EXT 0x8006 +#define GLX_STATIC_GRAY 0x8007 +#define GLX_STATIC_GRAY_EXT 0x8007 +#define GLX_TRANSPARENT_RGB 0x8008 +#define GLX_TRANSPARENT_RGB_EXT 0x8008 +#define GLX_TRANSPARENT_INDEX 0x8009 +#define GLX_TRANSPARENT_INDEX_EXT 0x8009 +#define GLX_SHARE_CONTEXT_EXT 0x800A +#define GLX_VISUAL_ID 0x800B +#define GLX_VISUAL_ID_EXT 0x800B +#define GLX_SCREEN 0x800C +#define GLX_SCREEN_EXT 0x800C +#define GLX_NON_CONFORMANT_CONFIG 0x800D +#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D +#define GLX_DRAWABLE_TYPE 0x8010 +#define GLX_DRAWABLE_TYPE_SGIX 0x8010 +#define GLX_RENDER_TYPE 0x8011 +#define GLX_RENDER_TYPE_SGIX 0x8011 +#define GLX_X_RENDERABLE 0x8012 +#define GLX_X_RENDERABLE_SGIX 0x8012 +#define GLX_FBCONFIG_ID 0x8013 +#define GLX_FBCONFIG_ID_SGIX 0x8013 +#define GLX_RGBA_TYPE 0x8014 +#define GLX_RGBA_TYPE_SGIX 0x8014 +#define GLX_COLOR_INDEX_TYPE 0x8015 +#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 +#define GLX_MAX_PBUFFER_WIDTH 0x8016 +#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 +#define GLX_MAX_PBUFFER_HEIGHT 0x8017 +#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 +#define GLX_MAX_PBUFFER_PIXELS 0x8018 +#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 +#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 +#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A +#define GLX_PRESERVED_CONTENTS 0x801B +#define GLX_PRESERVED_CONTENTS_SGIX 0x801B +#define GLX_LARGEST_PBUFFER 0x801C +#define GLX_LARGEST_PBUFFER_SGIX 0x801C +#define GLX_WIDTH 0x801D +#define GLX_WIDTH_SGIX 0x801D +#define GLX_HEIGHT 0x801E +#define GLX_HEIGHT_SGIX 0x801E +#define GLX_EVENT_MASK 0x801F +#define GLX_EVENT_MASK_SGIX 0x801F +#define GLX_DAMAGED 0x8020 +#define GLX_DAMAGED_SGIX 0x8020 +#define GLX_SAVED 0x8021 +#define GLX_SAVED_SGIX 0x8021 +#define GLX_WINDOW 0x8022 +#define GLX_WINDOW_SGIX 0x8022 +#define GLX_PBUFFER 0x8023 +#define GLX_PBUFFER_SGIX 0x8023 +#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024 +#define GLX_BLENDED_RGBA_SGIS 0x8025 +#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 +#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 +#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 +#define GLX_HYPERPIPE_ID_SGIX 0x8030 +#define GLX_PBUFFER_HEIGHT 0x8040 +#define GLX_PBUFFER_WIDTH 0x8041 +#define GLX_SAMPLE_BUFFERS_3DFX 0x8050 +#define GLX_SAMPLES_3DFX 0x8051 +#define GLX_SWAP_METHOD_OML 0x8060 +#define GLX_SWAP_EXCHANGE_OML 0x8061 +#define GLX_SWAP_COPY_OML 0x8062 +#define GLX_SWAP_UNDEFINED_OML 0x8063 +#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 +#define GLX_COPY_COMPLETE_INTEL 0x8181 +#define GLX_FLIP_COMPLETE_INTEL 0x8182 +#define GLX_RENDERER_VENDOR_ID_MESA 0x8183 +#define GLX_RENDERER_DEVICE_ID_MESA 0x8184 +#define GLX_RENDERER_VERSION_MESA 0x8185 +#define GLX_RENDERER_ACCELERATED_MESA 0x8186 +#define GLX_RENDERER_VIDEO_MEMORY_MESA 0x8187 +#define GLX_RENDERER_UNIFIED_MEMORY_ARCHITECTURE_MESA 0x8188 +#define GLX_RENDERER_PREFERRED_PROFILE_MESA 0x8189 +#define GLX_RENDERER_OPENGL_CORE_PROFILE_VERSION_MESA 0x818A +#define GLX_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION_MESA 0x818B +#define GLX_RENDERER_OPENGL_ES_PROFILE_VERSION_MESA 0x818C +#define GLX_RENDERER_OPENGL_ES2_PROFILE_VERSION_MESA 0x818D +#define GLX_RENDERER_ID_MESA 0x818E +#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 +#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define GLX_DONT_CARE 0xFFFFFFFF +#define GLX_BAD_SCREEN 1 +#define GLX_BufferSwapComplete 1 +#define GLX_USE_GL 1 +#define GLX_BLUE_SIZE 10 +#define GLX_SAMPLE_BUFFERS 100000 +#define GLX_SAMPLE_BUFFERS_ARB 100000 +#define GLX_SAMPLE_BUFFERS_SGIS 100000 +#define GLX_COVERAGE_SAMPLES_NV 100001 +#define GLX_SAMPLES 100001 +#define GLX_SAMPLES_ARB 100001 +#define GLX_SAMPLES_SGIS 100001 +#define GLX_ALPHA_SIZE 11 +#define GLX_DEPTH_SIZE 12 +#define GLX_STENCIL_SIZE 13 +#define GLX_ACCUM_RED_SIZE 14 +#define GLX_ACCUM_GREEN_SIZE 15 +#define GLX_ACCUM_BLUE_SIZE 16 +#define GLX_ACCUM_ALPHA_SIZE 17 +#define __GLX_NUMBER_EVENTS 17 +#define GLX_BAD_ATTRIBUTE 2 +#define GLX_BUFFER_SIZE 2 +#define GLX_LEVEL 3 +#define GLX_NO_EXTENSION 3 +#define GLX_BAD_VISUAL 4 +#define GLX_RGBA 4 +#define GLX_BAD_CONTEXT 5 +#define GLX_DOUBLEBUFFER 5 +#define GLX_BAD_VALUE 6 +#define GLX_STEREO 6 +#define GLX_AUX_BUFFERS 7 +#define GLX_BAD_ENUM 7 +#define GLX_RED_SIZE 8 +#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 +#define GLX_GREEN_SIZE 9 +#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 +#define GLX_BAD_HYPERPIPE_SGIX 92 + +typedef int (GLAPIENTRY *PFNGLXBINDCHANNELTOWINDOWSGIXPROC)(Display * display, int screen, int channel, Window window); +typedef int (GLAPIENTRY *PFNGLXBINDHYPERPIPESGIXPROC)(Display * dpy, int hpId); +typedef Bool (GLAPIENTRY *PFNGLXBINDSWAPBARRIERNVPROC)(Display * dpy, GLuint group, GLuint barrier); +typedef void (GLAPIENTRY *PFNGLXBINDSWAPBARRIERSGIXPROC)(Display * dpy, GLXDrawable drawable, int barrier); +typedef void (GLAPIENTRY *PFNGLXBINDTEXIMAGEEXTPROC)(Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list); +typedef int (GLAPIENTRY *PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)(Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); +typedef int (GLAPIENTRY *PFNGLXBINDVIDEODEVICENVPROC)(Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list); +typedef int (GLAPIENTRY *PFNGLXBINDVIDEOIMAGENVPROC)(Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); +typedef void (GLAPIENTRY *PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)(GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef int (GLAPIENTRY *PFNGLXCHANNELRECTSGIXPROC)(Display * display, int screen, int channel, int x, int y, int w, int h); +typedef int (GLAPIENTRY *PFNGLXCHANNELRECTSYNCSGIXPROC)(Display * display, int screen, int channel, GLenum synctype); +typedef GLXFBConfig * (GLAPIENTRY *PFNGLXCHOOSEFBCONFIGPROC)(Display * dpy, int screen, const int * attrib_list, int * nelements); +typedef GLXFBConfigSGIX * (GLAPIENTRY *PFNGLXCHOOSEFBCONFIGSGIXPROC)(Display * dpy, int screen, int * attrib_list, int * nelements); +typedef XVisualInfo * (GLAPIENTRY *PFNGLXCHOOSEVISUALPROC)(Display * dpy, int screen, int * attribList); +typedef void (GLAPIENTRY *PFNGLXCOPYBUFFERSUBDATANVPROC)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (GLAPIENTRY *PFNGLXCOPYCONTEXTPROC)(Display * dpy, GLXContext src, GLXContext dst, unsigned long mask); +typedef void (GLAPIENTRY *PFNGLXCOPYIMAGESUBDATANVPROC)(Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GLAPIENTRY *PFNGLXCOPYSUBBUFFERMESAPROC)(Display * dpy, GLXDrawable drawable, int x, int y, int width, int height); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)(unsigned int id, GLXContext share_list); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(unsigned int id, GLXContext share_context, const int * attribList); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATECONTEXTPROC)(Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPbufferSGIX (GLAPIENTRY *PFNGLXCREATEGLXPBUFFERSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEGLXPIXMAPPROC)(Display * dpy, XVisualInfo * visual, Pixmap pixmap); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEGLXPIXMAPMESAPROC)(Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap); +typedef GLXContext (GLAPIENTRY *PFNGLXCREATENEWCONTEXTPROC)(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); +typedef GLXPbuffer (GLAPIENTRY *PFNGLXCREATEPBUFFERPROC)(Display * dpy, GLXFBConfig config, const int * attrib_list); +typedef GLXPixmap (GLAPIENTRY *PFNGLXCREATEPIXMAPPROC)(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); +typedef GLXWindow (GLAPIENTRY *PFNGLXCREATEWINDOWPROC)(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); +typedef void (GLAPIENTRY *PFNGLXCUSHIONSGIPROC)(Display * dpy, Window window, float cushion); +typedef Bool (GLAPIENTRY *PFNGLXDELAYBEFORESWAPNVPROC)(Display * dpy, GLXDrawable drawable, GLfloat seconds); +typedef Bool (GLAPIENTRY *PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)(GLXContext ctx); +typedef void (GLAPIENTRY *PFNGLXDESTROYCONTEXTPROC)(Display * dpy, GLXContext ctx); +typedef void (GLAPIENTRY *PFNGLXDESTROYGLXPBUFFERSGIXPROC)(Display * dpy, GLXPbufferSGIX pbuf); +typedef void (GLAPIENTRY *PFNGLXDESTROYGLXPIXMAPPROC)(Display * dpy, GLXPixmap pixmap); +typedef void (GLAPIENTRY *PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC)(Display * dpy, GLXVideoSourceSGIX glxvideosource); +typedef int (GLAPIENTRY *PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)(Display * dpy, int hpId); +typedef void (GLAPIENTRY *PFNGLXDESTROYPBUFFERPROC)(Display * dpy, GLXPbuffer pbuf); +typedef void (GLAPIENTRY *PFNGLXDESTROYPIXMAPPROC)(Display * dpy, GLXPixmap pixmap); +typedef void (GLAPIENTRY *PFNGLXDESTROYWINDOWPROC)(Display * dpy, GLXWindow win); +typedef GLXVideoCaptureDeviceNV * (GLAPIENTRY *PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)(Display * dpy, int screen, int * nelements); +typedef unsigned int * (GLAPIENTRY *PFNGLXENUMERATEVIDEODEVICESNVPROC)(Display * dpy, int screen, int * nelements); +typedef void (GLAPIENTRY *PFNGLXFREECONTEXTEXTPROC)(Display * dpy, GLXContext context); +typedef unsigned int (GLAPIENTRY *PFNGLXGETAGPOFFSETMESAPROC)(const void * pointer); +typedef const char * (GLAPIENTRY *PFNGLXGETCLIENTSTRINGPROC)(Display * dpy, int name); +typedef int (GLAPIENTRY *PFNGLXGETCONFIGPROC)(Display * dpy, XVisualInfo * visual, int attrib, int * value); +typedef unsigned int (GLAPIENTRY *PFNGLXGETCONTEXTGPUIDAMDPROC)(GLXContext ctx); +typedef GLXContextID (GLAPIENTRY *PFNGLXGETCONTEXTIDEXTPROC)(const GLXContext context); +typedef GLXContext (GLAPIENTRY *PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); +typedef GLXContext (GLAPIENTRY *PFNGLXGETCURRENTCONTEXTPROC)(void); +typedef Display * (GLAPIENTRY *PFNGLXGETCURRENTDISPLAYPROC)(void); +typedef Display * (GLAPIENTRY *PFNGLXGETCURRENTDISPLAYEXTPROC)(void); +typedef GLXDrawable (GLAPIENTRY *PFNGLXGETCURRENTDRAWABLEPROC)(void); +typedef GLXDrawable (GLAPIENTRY *PFNGLXGETCURRENTREADDRAWABLEPROC)(void); +typedef GLXDrawable (GLAPIENTRY *PFNGLXGETCURRENTREADDRAWABLESGIPROC)(void); +typedef int (GLAPIENTRY *PFNGLXGETFBCONFIGATTRIBPROC)(Display * dpy, GLXFBConfig config, int attribute, int * value); +typedef int (GLAPIENTRY *PFNGLXGETFBCONFIGATTRIBSGIXPROC)(Display * dpy, GLXFBConfigSGIX config, int attribute, int * value); +typedef GLXFBConfigSGIX (GLAPIENTRY *PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)(Display * dpy, XVisualInfo * vis); +typedef GLXFBConfig * (GLAPIENTRY *PFNGLXGETFBCONFIGSPROC)(Display * dpy, int screen, int * nelements); +typedef unsigned int (GLAPIENTRY *PFNGLXGETGPUIDSAMDPROC)(unsigned int maxCount, unsigned int * ids); +typedef int (GLAPIENTRY *PFNGLXGETGPUINFOAMDPROC)(unsigned int id, int property, GLenum dataType, unsigned int size, void * data); +typedef Bool (GLAPIENTRY *PFNGLXGETMSCRATEOMLPROC)(Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator); +typedef __GLXextFuncPtr (GLAPIENTRY *PFNGLXGETPROCADDRESSPROC)(const GLubyte * procName); +typedef __GLXextFuncPtr (GLAPIENTRY *PFNGLXGETPROCADDRESSARBPROC)(const GLubyte * procName); +typedef void (GLAPIENTRY *PFNGLXGETSELECTEDEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long * event_mask); +typedef void (GLAPIENTRY *PFNGLXGETSELECTEDEVENTSGIXPROC)(Display * dpy, GLXDrawable drawable, unsigned long * mask); +typedef Bool (GLAPIENTRY *PFNGLXGETSYNCVALUESOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc); +typedef Status (GLAPIENTRY *PFNGLXGETTRANSPARENTINDEXSUNPROC)(Display * dpy, Window overlay, Window underlay, long * pTransparentIndex); +typedef int (GLAPIENTRY *PFNGLXGETVIDEODEVICENVPROC)(Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice); +typedef int (GLAPIENTRY *PFNGLXGETVIDEOINFONVPROC)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); +typedef int (GLAPIENTRY *PFNGLXGETVIDEOSYNCSGIPROC)(unsigned int * count); +typedef XVisualInfo * (GLAPIENTRY *PFNGLXGETVISUALFROMFBCONFIGPROC)(Display * dpy, GLXFBConfig config); +typedef XVisualInfo * (GLAPIENTRY *PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)(Display * dpy, GLXFBConfigSGIX config); +typedef int (GLAPIENTRY *PFNGLXHYPERPIPEATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * attribList); +typedef int (GLAPIENTRY *PFNGLXHYPERPIPECONFIGSGIXPROC)(Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId); +typedef GLXContext (GLAPIENTRY *PFNGLXIMPORTCONTEXTEXTPROC)(Display * dpy, GLXContextID contextID); +typedef Bool (GLAPIENTRY *PFNGLXISDIRECTPROC)(Display * dpy, GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXJOINSWAPGROUPNVPROC)(Display * dpy, GLXDrawable drawable, GLuint group); +typedef void (GLAPIENTRY *PFNGLXJOINSWAPGROUPSGIXPROC)(Display * dpy, GLXDrawable drawable, GLXDrawable member); +typedef void (GLAPIENTRY *PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device); +typedef Bool (GLAPIENTRY *PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXMAKECONTEXTCURRENTPROC)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXMAKECURRENTPROC)(Display * dpy, GLXDrawable drawable, GLXContext ctx); +typedef Bool (GLAPIENTRY *PFNGLXMAKECURRENTREADSGIPROC)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); +typedef void (GLAPIENTRY *PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef int (GLAPIENTRY *PFNGLXQUERYCHANNELDELTASSGIXPROC)(Display * display, int screen, int channel, int * x, int * y, int * w, int * h); +typedef int (GLAPIENTRY *PFNGLXQUERYCHANNELRECTSGIXPROC)(Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh); +typedef int (GLAPIENTRY *PFNGLXQUERYCONTEXTPROC)(Display * dpy, GLXContext ctx, int attribute, int * value); +typedef int (GLAPIENTRY *PFNGLXQUERYCONTEXTINFOEXTPROC)(Display * dpy, GLXContext context, int attribute, int * value); +typedef Bool (GLAPIENTRY *PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC)(int attribute, unsigned int * value); +typedef const char * (GLAPIENTRY *PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC)(int attribute); +typedef void (GLAPIENTRY *PFNGLXQUERYDRAWABLEPROC)(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); +typedef Bool (GLAPIENTRY *PFNGLXQUERYEXTENSIONPROC)(Display * dpy, int * errorb, int * event); +typedef const char * (GLAPIENTRY *PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display * dpy, int screen); +typedef Bool (GLAPIENTRY *PFNGLXQUERYFRAMECOUNTNVPROC)(Display * dpy, int screen, GLuint * count); +typedef int (GLAPIENTRY *PFNGLXQUERYGLXPBUFFERSGIXPROC)(Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value); +typedef int (GLAPIENTRY *PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList); +typedef int (GLAPIENTRY *PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)(Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList); +typedef GLXHyperpipeConfigSGIX * (GLAPIENTRY *PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)(Display * dpy, int hpId, int * npipes); +typedef GLXHyperpipeNetworkSGIX * (GLAPIENTRY *PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)(Display * dpy, int * npipes); +typedef Bool (GLAPIENTRY *PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)(Display * dpy, int screen, int * max); +typedef Bool (GLAPIENTRY *PFNGLXQUERYMAXSWAPGROUPSNVPROC)(Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers); +typedef Bool (GLAPIENTRY *PFNGLXQUERYRENDERERINTEGERMESAPROC)(Display * dpy, int screen, int renderer, int attribute, unsigned int * value); +typedef const char * (GLAPIENTRY *PFNGLXQUERYRENDERERSTRINGMESAPROC)(Display * dpy, int screen, int renderer, int attribute); +typedef const char * (GLAPIENTRY *PFNGLXQUERYSERVERSTRINGPROC)(Display * dpy, int screen, int name); +typedef Bool (GLAPIENTRY *PFNGLXQUERYSWAPGROUPNVPROC)(Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier); +typedef Bool (GLAPIENTRY *PFNGLXQUERYVERSIONPROC)(Display * dpy, int * maj, int * min); +typedef int (GLAPIENTRY *PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value); +typedef Bool (GLAPIENTRY *PFNGLXRELEASEBUFFERSMESAPROC)(Display * dpy, GLXDrawable drawable); +typedef void (GLAPIENTRY *PFNGLXRELEASETEXIMAGEEXTPROC)(Display * dpy, GLXDrawable drawable, int buffer); +typedef void (GLAPIENTRY *PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)(Display * dpy, GLXVideoCaptureDeviceNV device); +typedef int (GLAPIENTRY *PFNGLXRELEASEVIDEODEVICENVPROC)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice); +typedef int (GLAPIENTRY *PFNGLXRELEASEVIDEOIMAGENVPROC)(Display * dpy, GLXPbuffer pbuf); +typedef Bool (GLAPIENTRY *PFNGLXRESETFRAMECOUNTNVPROC)(Display * dpy, int screen); +typedef void (GLAPIENTRY *PFNGLXSELECTEVENTPROC)(Display * dpy, GLXDrawable draw, unsigned long event_mask); +typedef void (GLAPIENTRY *PFNGLXSELECTEVENTSGIXPROC)(Display * dpy, GLXDrawable drawable, unsigned long mask); +typedef int (GLAPIENTRY *PFNGLXSENDPBUFFERTOVIDEONVPROC)(Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock); +typedef Bool (GLAPIENTRY *PFNGLXSET3DFXMODEMESAPROC)(int mode); +typedef void (GLAPIENTRY *PFNGLXSWAPBUFFERSPROC)(Display * dpy, GLXDrawable drawable); +typedef int64_t (GLAPIENTRY *PFNGLXSWAPBUFFERSMSCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); +typedef void (GLAPIENTRY *PFNGLXSWAPINTERVALEXTPROC)(Display * dpy, GLXDrawable drawable, int interval); +typedef int (GLAPIENTRY *PFNGLXSWAPINTERVALSGIPROC)(int interval); +typedef void (GLAPIENTRY *PFNGLXUSEXFONTPROC)(Font font, int first, int count, int list); +typedef Bool (GLAPIENTRY *PFNGLXWAITFORMSCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc); +typedef Bool (GLAPIENTRY *PFNGLXWAITFORSBCOMLPROC)(Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc); +typedef void (GLAPIENTRY *PFNGLXWAITGLPROC)(void); +typedef int (GLAPIENTRY *PFNGLXWAITVIDEOSYNCSGIPROC)(int divisor, int remainder, unsigned int * count); +typedef void (GLAPIENTRY *PFNGLXWAITXPROC)(void); +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindChannelToWindowSGIX)(Display * display, int screen, int channel, Window window); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindHyperpipeSGIX)(Display * dpy, int hpId); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXBindSwapBarrierNV)(Display * dpy, GLuint group, GLuint barrier); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXBindSwapBarrierSGIX)(Display * dpy, GLXDrawable drawable, int barrier); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXBindTexImageEXT)(Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindVideoCaptureDeviceNV)(Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindVideoDeviceNV)(Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXBindVideoImageNV)(Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXBlitContextFramebufferAMD)(GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXChannelRectSGIX)(Display * display, int screen, int channel, int x, int y, int w, int h); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXChannelRectSyncSGIX)(Display * display, int screen, int channel, GLenum synctype); + +extern EPOXY_IMPORTEXPORT GLXFBConfig * (EPOXY_CALLSPEC *epoxy_glXChooseFBConfig)(Display * dpy, int screen, const int * attrib_list, int * nelements); + +extern EPOXY_IMPORTEXPORT GLXFBConfigSGIX * (EPOXY_CALLSPEC *epoxy_glXChooseFBConfigSGIX)(Display * dpy, int screen, int * attrib_list, int * nelements); + +extern EPOXY_IMPORTEXPORT XVisualInfo * (EPOXY_CALLSPEC *epoxy_glXChooseVisual)(Display * dpy, int screen, int * attribList); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopyBufferSubDataNV)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopyContext)(Display * dpy, GLXContext src, GLXContext dst, unsigned long mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopyImageSubDataNV)(Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCopySubBufferMESA)(Display * dpy, GLXDrawable drawable, int x, int y, int width, int height); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateAssociatedContextAMD)(unsigned int id, GLXContext share_list); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateAssociatedContextAttribsAMD)(unsigned int id, GLXContext share_context, const int * attribList); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateContext)(Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateContextAttribsARB)(Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateContextWithConfigSGIX)(Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct); + +extern EPOXY_IMPORTEXPORT GLXPbufferSGIX (EPOXY_CALLSPEC *epoxy_glXCreateGLXPbufferSGIX)(Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreateGLXPixmap)(Display * dpy, XVisualInfo * visual, Pixmap pixmap); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreateGLXPixmapMESA)(Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreateGLXPixmapWithConfigSGIX)(Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXCreateNewContext)(Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); + +extern EPOXY_IMPORTEXPORT GLXPbuffer (EPOXY_CALLSPEC *epoxy_glXCreatePbuffer)(Display * dpy, GLXFBConfig config, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXPixmap (EPOXY_CALLSPEC *epoxy_glXCreatePixmap)(Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT GLXWindow (EPOXY_CALLSPEC *epoxy_glXCreateWindow)(Display * dpy, GLXFBConfig config, Window win, const int * attrib_list); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXCushionSGI)(Display * dpy, Window window, float cushion); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXDelayBeforeSwapNV)(Display * dpy, GLXDrawable drawable, GLfloat seconds); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXDeleteAssociatedContextAMD)(GLXContext ctx); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyContext)(Display * dpy, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyGLXPbufferSGIX)(Display * dpy, GLXPbufferSGIX pbuf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyGLXPixmap)(Display * dpy, GLXPixmap pixmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyGLXVideoSourceSGIX)(Display * dpy, GLXVideoSourceSGIX glxvideosource); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXDestroyHyperpipeConfigSGIX)(Display * dpy, int hpId); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyPbuffer)(Display * dpy, GLXPbuffer pbuf); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyPixmap)(Display * dpy, GLXPixmap pixmap); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXDestroyWindow)(Display * dpy, GLXWindow win); + +extern EPOXY_IMPORTEXPORT GLXVideoCaptureDeviceNV * (EPOXY_CALLSPEC *epoxy_glXEnumerateVideoCaptureDevicesNV)(Display * dpy, int screen, int * nelements); + +extern EPOXY_IMPORTEXPORT unsigned int * (EPOXY_CALLSPEC *epoxy_glXEnumerateVideoDevicesNV)(Display * dpy, int screen, int * nelements); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXFreeContextEXT)(Display * dpy, GLXContext context); + +extern EPOXY_IMPORTEXPORT unsigned int (EPOXY_CALLSPEC *epoxy_glXGetAGPOffsetMESA)(const void * pointer); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXGetClientString)(Display * dpy, int name); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetConfig)(Display * dpy, XVisualInfo * visual, int attrib, int * value); + +extern EPOXY_IMPORTEXPORT unsigned int (EPOXY_CALLSPEC *epoxy_glXGetContextGPUIDAMD)(GLXContext ctx); + +extern EPOXY_IMPORTEXPORT GLXContextID (EPOXY_CALLSPEC *epoxy_glXGetContextIDEXT)(const GLXContext context); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXGetCurrentAssociatedContextAMD)(void); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXGetCurrentContext)(void); + +extern EPOXY_IMPORTEXPORT Display * (EPOXY_CALLSPEC *epoxy_glXGetCurrentDisplay)(void); + +extern EPOXY_IMPORTEXPORT Display * (EPOXY_CALLSPEC *epoxy_glXGetCurrentDisplayEXT)(void); + +extern EPOXY_IMPORTEXPORT GLXDrawable (EPOXY_CALLSPEC *epoxy_glXGetCurrentDrawable)(void); + +extern EPOXY_IMPORTEXPORT GLXDrawable (EPOXY_CALLSPEC *epoxy_glXGetCurrentReadDrawable)(void); + +extern EPOXY_IMPORTEXPORT GLXDrawable (EPOXY_CALLSPEC *epoxy_glXGetCurrentReadDrawableSGI)(void); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetFBConfigAttrib)(Display * dpy, GLXFBConfig config, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetFBConfigAttribSGIX)(Display * dpy, GLXFBConfigSGIX config, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT GLXFBConfigSGIX (EPOXY_CALLSPEC *epoxy_glXGetFBConfigFromVisualSGIX)(Display * dpy, XVisualInfo * vis); + +extern EPOXY_IMPORTEXPORT GLXFBConfig * (EPOXY_CALLSPEC *epoxy_glXGetFBConfigs)(Display * dpy, int screen, int * nelements); + +extern EPOXY_IMPORTEXPORT unsigned int (EPOXY_CALLSPEC *epoxy_glXGetGPUIDsAMD)(unsigned int maxCount, unsigned int * ids); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetGPUInfoAMD)(unsigned int id, int property, GLenum dataType, unsigned int size, void * data); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXGetMscRateOML)(Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator); + +extern EPOXY_IMPORTEXPORT __GLXextFuncPtr (EPOXY_CALLSPEC *epoxy_glXGetProcAddress)(const GLubyte * procName); + +extern EPOXY_IMPORTEXPORT __GLXextFuncPtr (EPOXY_CALLSPEC *epoxy_glXGetProcAddressARB)(const GLubyte * procName); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXGetSelectedEvent)(Display * dpy, GLXDrawable draw, unsigned long * event_mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXGetSelectedEventSGIX)(Display * dpy, GLXDrawable drawable, unsigned long * mask); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXGetSyncValuesOML)(Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc); + +extern EPOXY_IMPORTEXPORT Status (EPOXY_CALLSPEC *epoxy_glXGetTransparentIndexSUN)(Display * dpy, Window overlay, Window underlay, long * pTransparentIndex); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetVideoDeviceNV)(Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetVideoInfoNV)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXGetVideoSyncSGI)(unsigned int * count); + +extern EPOXY_IMPORTEXPORT XVisualInfo * (EPOXY_CALLSPEC *epoxy_glXGetVisualFromFBConfig)(Display * dpy, GLXFBConfig config); + +extern EPOXY_IMPORTEXPORT XVisualInfo * (EPOXY_CALLSPEC *epoxy_glXGetVisualFromFBConfigSGIX)(Display * dpy, GLXFBConfigSGIX config); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXHyperpipeAttribSGIX)(Display * dpy, int timeSlice, int attrib, int size, void * attribList); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXHyperpipeConfigSGIX)(Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId); + +extern EPOXY_IMPORTEXPORT GLXContext (EPOXY_CALLSPEC *epoxy_glXImportContextEXT)(Display * dpy, GLXContextID contextID); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXIsDirect)(Display * dpy, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXJoinSwapGroupNV)(Display * dpy, GLXDrawable drawable, GLuint group); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXJoinSwapGroupSGIX)(Display * dpy, GLXDrawable drawable, GLXDrawable member); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXLockVideoCaptureDeviceNV)(Display * dpy, GLXVideoCaptureDeviceNV device); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeAssociatedContextCurrentAMD)(GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeContextCurrent)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeCurrent)(Display * dpy, GLXDrawable drawable, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXMakeCurrentReadSGI)(Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXNamedCopyBufferSubDataNV)(Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryChannelDeltasSGIX)(Display * display, int screen, int channel, int * x, int * y, int * w, int * h); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryChannelRectSGIX)(Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryContext)(Display * dpy, GLXContext ctx, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryContextInfoEXT)(Display * dpy, GLXContext context, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryCurrentRendererIntegerMESA)(int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryCurrentRendererStringMESA)(int attribute); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXQueryDrawable)(Display * dpy, GLXDrawable draw, int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryExtension)(Display * dpy, int * errorb, int * event); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryExtensionsString)(Display * dpy, int screen); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryFrameCountNV)(Display * dpy, int screen, GLuint * count); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryGLXPbufferSGIX)(Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeAttribSGIX)(Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeBestAttribSGIX)(Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList); + +extern EPOXY_IMPORTEXPORT GLXHyperpipeConfigSGIX * (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeConfigSGIX)(Display * dpy, int hpId, int * npipes); + +extern EPOXY_IMPORTEXPORT GLXHyperpipeNetworkSGIX * (EPOXY_CALLSPEC *epoxy_glXQueryHyperpipeNetworkSGIX)(Display * dpy, int * npipes); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryMaxSwapBarriersSGIX)(Display * dpy, int screen, int * max); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryMaxSwapGroupsNV)(Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryRendererIntegerMESA)(Display * dpy, int screen, int renderer, int attribute, unsigned int * value); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryRendererStringMESA)(Display * dpy, int screen, int renderer, int attribute); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_glXQueryServerString)(Display * dpy, int screen, int name); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQuerySwapGroupNV)(Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXQueryVersion)(Display * dpy, int * maj, int * min); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXQueryVideoCaptureDeviceNV)(Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXReleaseBuffersMESA)(Display * dpy, GLXDrawable drawable); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXReleaseTexImageEXT)(Display * dpy, GLXDrawable drawable, int buffer); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXReleaseVideoCaptureDeviceNV)(Display * dpy, GLXVideoCaptureDeviceNV device); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXReleaseVideoDeviceNV)(Display * dpy, int screen, GLXVideoDeviceNV VideoDevice); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXReleaseVideoImageNV)(Display * dpy, GLXPbuffer pbuf); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXResetFrameCountNV)(Display * dpy, int screen); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSelectEvent)(Display * dpy, GLXDrawable draw, unsigned long event_mask); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSelectEventSGIX)(Display * dpy, GLXDrawable drawable, unsigned long mask); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXSendPbufferToVideoNV)(Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXSet3DfxModeMESA)(int mode); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSwapBuffers)(Display * dpy, GLXDrawable drawable); + +extern EPOXY_IMPORTEXPORT int64_t (EPOXY_CALLSPEC *epoxy_glXSwapBuffersMscOML)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXSwapIntervalEXT)(Display * dpy, GLXDrawable drawable, int interval); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXSwapIntervalSGI)(int interval); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXUseXFont)(Font font, int first, int count, int list); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXWaitForMscOML)(Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc); + +extern EPOXY_IMPORTEXPORT Bool (EPOXY_CALLSPEC *epoxy_glXWaitForSbcOML)(Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXWaitGL)(void); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_glXWaitVideoSyncSGI)(int divisor, int remainder, unsigned int * count); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_glXWaitX)(void); + +#define glXBindChannelToWindowSGIX epoxy_glXBindChannelToWindowSGIX +#define glXBindHyperpipeSGIX epoxy_glXBindHyperpipeSGIX +#define glXBindSwapBarrierNV epoxy_glXBindSwapBarrierNV +#define glXBindSwapBarrierSGIX epoxy_glXBindSwapBarrierSGIX +#define glXBindTexImageEXT epoxy_glXBindTexImageEXT +#define glXBindVideoCaptureDeviceNV epoxy_glXBindVideoCaptureDeviceNV +#define glXBindVideoDeviceNV epoxy_glXBindVideoDeviceNV +#define glXBindVideoImageNV epoxy_glXBindVideoImageNV +#define glXBlitContextFramebufferAMD epoxy_glXBlitContextFramebufferAMD +#define glXChannelRectSGIX epoxy_glXChannelRectSGIX +#define glXChannelRectSyncSGIX epoxy_glXChannelRectSyncSGIX +#define glXChooseFBConfig epoxy_glXChooseFBConfig +#define glXChooseFBConfigSGIX epoxy_glXChooseFBConfigSGIX +#define glXChooseVisual epoxy_glXChooseVisual +#define glXCopyBufferSubDataNV epoxy_glXCopyBufferSubDataNV +#define glXCopyContext epoxy_glXCopyContext +#define glXCopyImageSubDataNV epoxy_glXCopyImageSubDataNV +#define glXCopySubBufferMESA epoxy_glXCopySubBufferMESA +#define glXCreateAssociatedContextAMD epoxy_glXCreateAssociatedContextAMD +#define glXCreateAssociatedContextAttribsAMD epoxy_glXCreateAssociatedContextAttribsAMD +#define glXCreateContext epoxy_glXCreateContext +#define glXCreateContextAttribsARB epoxy_glXCreateContextAttribsARB +#define glXCreateContextWithConfigSGIX epoxy_glXCreateContextWithConfigSGIX +#define glXCreateGLXPbufferSGIX epoxy_glXCreateGLXPbufferSGIX +#define glXCreateGLXPixmap epoxy_glXCreateGLXPixmap +#define glXCreateGLXPixmapMESA epoxy_glXCreateGLXPixmapMESA +#define glXCreateGLXPixmapWithConfigSGIX epoxy_glXCreateGLXPixmapWithConfigSGIX +#define glXCreateNewContext epoxy_glXCreateNewContext +#define glXCreatePbuffer epoxy_glXCreatePbuffer +#define glXCreatePixmap epoxy_glXCreatePixmap +#define glXCreateWindow epoxy_glXCreateWindow +#define glXCushionSGI epoxy_glXCushionSGI +#define glXDelayBeforeSwapNV epoxy_glXDelayBeforeSwapNV +#define glXDeleteAssociatedContextAMD epoxy_glXDeleteAssociatedContextAMD +#define glXDestroyContext epoxy_glXDestroyContext +#define glXDestroyGLXPbufferSGIX epoxy_glXDestroyGLXPbufferSGIX +#define glXDestroyGLXPixmap epoxy_glXDestroyGLXPixmap +#define glXDestroyGLXVideoSourceSGIX epoxy_glXDestroyGLXVideoSourceSGIX +#define glXDestroyHyperpipeConfigSGIX epoxy_glXDestroyHyperpipeConfigSGIX +#define glXDestroyPbuffer epoxy_glXDestroyPbuffer +#define glXDestroyPixmap epoxy_glXDestroyPixmap +#define glXDestroyWindow epoxy_glXDestroyWindow +#define glXEnumerateVideoCaptureDevicesNV epoxy_glXEnumerateVideoCaptureDevicesNV +#define glXEnumerateVideoDevicesNV epoxy_glXEnumerateVideoDevicesNV +#define glXFreeContextEXT epoxy_glXFreeContextEXT +#define glXGetAGPOffsetMESA epoxy_glXGetAGPOffsetMESA +#define glXGetClientString epoxy_glXGetClientString +#define glXGetConfig epoxy_glXGetConfig +#define glXGetContextGPUIDAMD epoxy_glXGetContextGPUIDAMD +#define glXGetContextIDEXT epoxy_glXGetContextIDEXT +#define glXGetCurrentAssociatedContextAMD epoxy_glXGetCurrentAssociatedContextAMD +#define glXGetCurrentContext epoxy_glXGetCurrentContext +#define glXGetCurrentDisplay epoxy_glXGetCurrentDisplay +#define glXGetCurrentDisplayEXT epoxy_glXGetCurrentDisplayEXT +#define glXGetCurrentDrawable epoxy_glXGetCurrentDrawable +#define glXGetCurrentReadDrawable epoxy_glXGetCurrentReadDrawable +#define glXGetCurrentReadDrawableSGI epoxy_glXGetCurrentReadDrawableSGI +#define glXGetFBConfigAttrib epoxy_glXGetFBConfigAttrib +#define glXGetFBConfigAttribSGIX epoxy_glXGetFBConfigAttribSGIX +#define glXGetFBConfigFromVisualSGIX epoxy_glXGetFBConfigFromVisualSGIX +#define glXGetFBConfigs epoxy_glXGetFBConfigs +#define glXGetGPUIDsAMD epoxy_glXGetGPUIDsAMD +#define glXGetGPUInfoAMD epoxy_glXGetGPUInfoAMD +#define glXGetMscRateOML epoxy_glXGetMscRateOML +#define glXGetProcAddress epoxy_glXGetProcAddress +#define glXGetProcAddressARB epoxy_glXGetProcAddressARB +#define glXGetSelectedEvent epoxy_glXGetSelectedEvent +#define glXGetSelectedEventSGIX epoxy_glXGetSelectedEventSGIX +#define glXGetSyncValuesOML epoxy_glXGetSyncValuesOML +#define glXGetTransparentIndexSUN epoxy_glXGetTransparentIndexSUN +#define glXGetVideoDeviceNV epoxy_glXGetVideoDeviceNV +#define glXGetVideoInfoNV epoxy_glXGetVideoInfoNV +#define glXGetVideoSyncSGI epoxy_glXGetVideoSyncSGI +#define glXGetVisualFromFBConfig epoxy_glXGetVisualFromFBConfig +#define glXGetVisualFromFBConfigSGIX epoxy_glXGetVisualFromFBConfigSGIX +#define glXHyperpipeAttribSGIX epoxy_glXHyperpipeAttribSGIX +#define glXHyperpipeConfigSGIX epoxy_glXHyperpipeConfigSGIX +#define glXImportContextEXT epoxy_glXImportContextEXT +#define glXIsDirect epoxy_glXIsDirect +#define glXJoinSwapGroupNV epoxy_glXJoinSwapGroupNV +#define glXJoinSwapGroupSGIX epoxy_glXJoinSwapGroupSGIX +#define glXLockVideoCaptureDeviceNV epoxy_glXLockVideoCaptureDeviceNV +#define glXMakeAssociatedContextCurrentAMD epoxy_glXMakeAssociatedContextCurrentAMD +#define glXMakeContextCurrent epoxy_glXMakeContextCurrent +#define glXMakeCurrent epoxy_glXMakeCurrent +#define glXMakeCurrentReadSGI epoxy_glXMakeCurrentReadSGI +#define glXNamedCopyBufferSubDataNV epoxy_glXNamedCopyBufferSubDataNV +#define glXQueryChannelDeltasSGIX epoxy_glXQueryChannelDeltasSGIX +#define glXQueryChannelRectSGIX epoxy_glXQueryChannelRectSGIX +#define glXQueryContext epoxy_glXQueryContext +#define glXQueryContextInfoEXT epoxy_glXQueryContextInfoEXT +#define glXQueryCurrentRendererIntegerMESA epoxy_glXQueryCurrentRendererIntegerMESA +#define glXQueryCurrentRendererStringMESA epoxy_glXQueryCurrentRendererStringMESA +#define glXQueryDrawable epoxy_glXQueryDrawable +#define glXQueryExtension epoxy_glXQueryExtension +#define glXQueryExtensionsString epoxy_glXQueryExtensionsString +#define glXQueryFrameCountNV epoxy_glXQueryFrameCountNV +#define glXQueryGLXPbufferSGIX epoxy_glXQueryGLXPbufferSGIX +#define glXQueryHyperpipeAttribSGIX epoxy_glXQueryHyperpipeAttribSGIX +#define glXQueryHyperpipeBestAttribSGIX epoxy_glXQueryHyperpipeBestAttribSGIX +#define glXQueryHyperpipeConfigSGIX epoxy_glXQueryHyperpipeConfigSGIX +#define glXQueryHyperpipeNetworkSGIX epoxy_glXQueryHyperpipeNetworkSGIX +#define glXQueryMaxSwapBarriersSGIX epoxy_glXQueryMaxSwapBarriersSGIX +#define glXQueryMaxSwapGroupsNV epoxy_glXQueryMaxSwapGroupsNV +#define glXQueryRendererIntegerMESA epoxy_glXQueryRendererIntegerMESA +#define glXQueryRendererStringMESA epoxy_glXQueryRendererStringMESA +#define glXQueryServerString epoxy_glXQueryServerString +#define glXQuerySwapGroupNV epoxy_glXQuerySwapGroupNV +#define glXQueryVersion epoxy_glXQueryVersion +#define glXQueryVideoCaptureDeviceNV epoxy_glXQueryVideoCaptureDeviceNV +#define glXReleaseBuffersMESA epoxy_glXReleaseBuffersMESA +#define glXReleaseTexImageEXT epoxy_glXReleaseTexImageEXT +#define glXReleaseVideoCaptureDeviceNV epoxy_glXReleaseVideoCaptureDeviceNV +#define glXReleaseVideoDeviceNV epoxy_glXReleaseVideoDeviceNV +#define glXReleaseVideoImageNV epoxy_glXReleaseVideoImageNV +#define glXResetFrameCountNV epoxy_glXResetFrameCountNV +#define glXSelectEvent epoxy_glXSelectEvent +#define glXSelectEventSGIX epoxy_glXSelectEventSGIX +#define glXSendPbufferToVideoNV epoxy_glXSendPbufferToVideoNV +#define glXSet3DfxModeMESA epoxy_glXSet3DfxModeMESA +#define glXSwapBuffers epoxy_glXSwapBuffers +#define glXSwapBuffersMscOML epoxy_glXSwapBuffersMscOML +#define glXSwapIntervalEXT epoxy_glXSwapIntervalEXT +#define glXSwapIntervalSGI epoxy_glXSwapIntervalSGI +#define glXUseXFont epoxy_glXUseXFont +#define glXWaitForMscOML epoxy_glXWaitForMscOML +#define glXWaitForSbcOML epoxy_glXWaitForSbcOML +#define glXWaitGL epoxy_glXWaitGL +#define glXWaitVideoSyncSGI epoxy_glXWaitVideoSyncSGI +#define glXWaitX epoxy_glXWaitX diff --git a/Engine/lib/epoxy/include/epoxy/epoxy/wgl_generated.h b/Engine/lib/epoxy/include/epoxy/epoxy/wgl_generated.h new file mode 100644 index 0000000000..fe53334946 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/epoxy/wgl_generated.h @@ -0,0 +1,896 @@ +/* GL dispatch header. + * This is code-generated from the GL API XML files from Khronos. + */ + +#pragma once +#include +#include + +#include "epoxy/gl.h" +struct _GPU_DEVICE { + DWORD cb; + CHAR DeviceName[32]; + CHAR DeviceString[128]; + DWORD Flags; + RECT rcVirtualScreen; +}; +DECLARE_HANDLE(HPBUFFERARB); +DECLARE_HANDLE(HPBUFFEREXT); +DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); +DECLARE_HANDLE(HPVIDEODEV); +DECLARE_HANDLE(HPGPUNV); +DECLARE_HANDLE(HGPUNV); +DECLARE_HANDLE(HVIDEOINPUTDEVICENV); +typedef struct _GPU_DEVICE GPU_DEVICE; +typedef struct _GPU_DEVICE *PGPU_DEVICE; + +#define WGL_VERSION_1_0 1 + +#define WGL_3DFX_multisample 1 +#define WGL_3DL_stereo_control 1 +#define WGL_AMD_gpu_association 1 +#define WGL_ARB_buffer_region 1 +#define WGL_ARB_context_flush_control 1 +#define WGL_ARB_create_context 1 +#define WGL_ARB_create_context_profile 1 +#define WGL_ARB_create_context_robustness 1 +#define WGL_ARB_extensions_string 1 +#define WGL_ARB_framebuffer_sRGB 1 +#define WGL_ARB_make_current_read 1 +#define WGL_ARB_multisample 1 +#define WGL_ARB_pbuffer 1 +#define WGL_ARB_pixel_format 1 +#define WGL_ARB_pixel_format_float 1 +#define WGL_ARB_render_texture 1 +#define WGL_ARB_robustness_application_isolation 1 +#define WGL_ARB_robustness_share_group_isolation 1 +#define WGL_ATI_pixel_format_float 1 +#define WGL_EXT_create_context_es2_profile 1 +#define WGL_EXT_create_context_es_profile 1 +#define WGL_EXT_depth_float 1 +#define WGL_EXT_display_color_table 1 +#define WGL_EXT_extensions_string 1 +#define WGL_EXT_framebuffer_sRGB 1 +#define WGL_EXT_make_current_read 1 +#define WGL_EXT_multisample 1 +#define WGL_EXT_pbuffer 1 +#define WGL_EXT_pixel_format 1 +#define WGL_EXT_pixel_format_packed_float 1 +#define WGL_EXT_swap_control 1 +#define WGL_EXT_swap_control_tear 1 +#define WGL_I3D_digital_video_control 1 +#define WGL_I3D_gamma 1 +#define WGL_I3D_genlock 1 +#define WGL_I3D_image_buffer 1 +#define WGL_I3D_swap_frame_lock 1 +#define WGL_I3D_swap_frame_usage 1 +#define WGL_NV_DX_interop 1 +#define WGL_NV_DX_interop2 1 +#define WGL_NV_copy_image 1 +#define WGL_NV_delay_before_swap 1 +#define WGL_NV_float_buffer 1 +#define WGL_NV_gpu_affinity 1 +#define WGL_NV_multisample_coverage 1 +#define WGL_NV_present_video 1 +#define WGL_NV_render_depth_texture 1 +#define WGL_NV_render_texture_rectangle 1 +#define WGL_NV_swap_group 1 +#define WGL_NV_vertex_array_range 1 +#define WGL_NV_video_capture 1 +#define WGL_NV_video_output 1 +#define WGL_OML_sync_control 1 + +#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0 +#define WGL_FONT_LINES 0 +#define WGL_ACCESS_READ_ONLY_NV 0x00000000 +#define WGL_ACCESS_READ_WRITE_NV 0x00000001 +#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 +#define WGL_CONTEXT_DEBUG_BIT_ARB 0x00000001 +#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 +#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 +#define WGL_ACCESS_WRITE_DISCARD_NV 0x00000002 +#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 +#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 +#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002 +#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 +#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 +#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 +#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 +#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 +#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 +#define WGL_GPU_VENDOR_AMD 0x1F00 +#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 +#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 +#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 +#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 +#define WGL_DRAW_TO_WINDOW_ARB 0x2001 +#define WGL_DRAW_TO_WINDOW_EXT 0x2001 +#define WGL_DRAW_TO_BITMAP_ARB 0x2002 +#define WGL_DRAW_TO_BITMAP_EXT 0x2002 +#define WGL_ACCELERATION_ARB 0x2003 +#define WGL_ACCELERATION_EXT 0x2003 +#define WGL_NEED_PALETTE_ARB 0x2004 +#define WGL_NEED_PALETTE_EXT 0x2004 +#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 +#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 +#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 +#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 +#define WGL_SWAP_METHOD_ARB 0x2007 +#define WGL_SWAP_METHOD_EXT 0x2007 +#define WGL_NUMBER_OVERLAYS_ARB 0x2008 +#define WGL_NUMBER_OVERLAYS_EXT 0x2008 +#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 +#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 +#define WGL_TRANSPARENT_ARB 0x200A +#define WGL_TRANSPARENT_EXT 0x200A +#define WGL_TRANSPARENT_VALUE_EXT 0x200B +#define WGL_SHARE_DEPTH_ARB 0x200C +#define WGL_SHARE_DEPTH_EXT 0x200C +#define WGL_SHARE_STENCIL_ARB 0x200D +#define WGL_SHARE_STENCIL_EXT 0x200D +#define WGL_SHARE_ACCUM_ARB 0x200E +#define WGL_SHARE_ACCUM_EXT 0x200E +#define WGL_SUPPORT_GDI_ARB 0x200F +#define WGL_SUPPORT_GDI_EXT 0x200F +#define WGL_SUPPORT_OPENGL_ARB 0x2010 +#define WGL_SUPPORT_OPENGL_EXT 0x2010 +#define WGL_DOUBLE_BUFFER_ARB 0x2011 +#define WGL_DOUBLE_BUFFER_EXT 0x2011 +#define WGL_STEREO_ARB 0x2012 +#define WGL_STEREO_EXT 0x2012 +#define WGL_PIXEL_TYPE_ARB 0x2013 +#define WGL_PIXEL_TYPE_EXT 0x2013 +#define WGL_COLOR_BITS_ARB 0x2014 +#define WGL_COLOR_BITS_EXT 0x2014 +#define WGL_RED_BITS_ARB 0x2015 +#define WGL_RED_BITS_EXT 0x2015 +#define WGL_RED_SHIFT_ARB 0x2016 +#define WGL_RED_SHIFT_EXT 0x2016 +#define WGL_GREEN_BITS_ARB 0x2017 +#define WGL_GREEN_BITS_EXT 0x2017 +#define WGL_GREEN_SHIFT_ARB 0x2018 +#define WGL_GREEN_SHIFT_EXT 0x2018 +#define WGL_BLUE_BITS_ARB 0x2019 +#define WGL_BLUE_BITS_EXT 0x2019 +#define WGL_BLUE_SHIFT_ARB 0x201A +#define WGL_BLUE_SHIFT_EXT 0x201A +#define WGL_ALPHA_BITS_ARB 0x201B +#define WGL_ALPHA_BITS_EXT 0x201B +#define WGL_ALPHA_SHIFT_ARB 0x201C +#define WGL_ALPHA_SHIFT_EXT 0x201C +#define WGL_ACCUM_BITS_ARB 0x201D +#define WGL_ACCUM_BITS_EXT 0x201D +#define WGL_ACCUM_RED_BITS_ARB 0x201E +#define WGL_ACCUM_RED_BITS_EXT 0x201E +#define WGL_ACCUM_GREEN_BITS_ARB 0x201F +#define WGL_ACCUM_GREEN_BITS_EXT 0x201F +#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 +#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 +#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 +#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 +#define WGL_DEPTH_BITS_ARB 0x2022 +#define WGL_DEPTH_BITS_EXT 0x2022 +#define WGL_STENCIL_BITS_ARB 0x2023 +#define WGL_STENCIL_BITS_EXT 0x2023 +#define WGL_AUX_BUFFERS_ARB 0x2024 +#define WGL_AUX_BUFFERS_EXT 0x2024 +#define WGL_NO_ACCELERATION_ARB 0x2025 +#define WGL_NO_ACCELERATION_EXT 0x2025 +#define WGL_GENERIC_ACCELERATION_ARB 0x2026 +#define WGL_GENERIC_ACCELERATION_EXT 0x2026 +#define WGL_FULL_ACCELERATION_ARB 0x2027 +#define WGL_FULL_ACCELERATION_EXT 0x2027 +#define WGL_SWAP_EXCHANGE_ARB 0x2028 +#define WGL_SWAP_EXCHANGE_EXT 0x2028 +#define WGL_SWAP_COPY_ARB 0x2029 +#define WGL_SWAP_COPY_EXT 0x2029 +#define WGL_SWAP_UNDEFINED_ARB 0x202A +#define WGL_SWAP_UNDEFINED_EXT 0x202A +#define WGL_TYPE_RGBA_ARB 0x202B +#define WGL_TYPE_RGBA_EXT 0x202B +#define WGL_TYPE_COLORINDEX_ARB 0x202C +#define WGL_TYPE_COLORINDEX_EXT 0x202C +#define WGL_DRAW_TO_PBUFFER_ARB 0x202D +#define WGL_DRAW_TO_PBUFFER_EXT 0x202D +#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E +#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E +#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F +#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F +#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 +#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 +#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 +#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 +#define WGL_PBUFFER_LARGEST_ARB 0x2033 +#define WGL_PBUFFER_LARGEST_EXT 0x2033 +#define WGL_PBUFFER_WIDTH_ARB 0x2034 +#define WGL_PBUFFER_WIDTH_EXT 0x2034 +#define WGL_PBUFFER_HEIGHT_ARB 0x2035 +#define WGL_PBUFFER_HEIGHT_EXT 0x2035 +#define WGL_PBUFFER_LOST_ARB 0x2036 +#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 +#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 +#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 +#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A +#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B +#define WGL_DEPTH_FLOAT_EXT 0x2040 +#define WGL_SAMPLE_BUFFERS_ARB 0x2041 +#define WGL_SAMPLE_BUFFERS_EXT 0x2041 +#define WGL_COVERAGE_SAMPLES_NV 0x2042 +#define WGL_SAMPLES_ARB 0x2042 +#define WGL_SAMPLES_EXT 0x2042 +#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 +#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 +#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 +#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 +#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 +#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 +#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 +#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 +#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A +#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B +#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C +#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E +#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 +#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 +#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 +#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 +#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 +#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 +#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 +#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 +#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 +#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 +#define WGL_SAMPLES_3DFX 0x2061 +#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 +#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 +#define WGL_TEXTURE_FORMAT_ARB 0x2072 +#define WGL_TEXTURE_TARGET_ARB 0x2073 +#define WGL_MIPMAP_TEXTURE_ARB 0x2074 +#define WGL_TEXTURE_RGB_ARB 0x2075 +#define WGL_TEXTURE_RGBA_ARB 0x2076 +#define WGL_NO_TEXTURE_ARB 0x2077 +#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 +#define WGL_TEXTURE_1D_ARB 0x2079 +#define WGL_TEXTURE_2D_ARB 0x207A +#define WGL_MIPMAP_LEVEL_ARB 0x207B +#define WGL_CUBE_MAP_FACE_ARB 0x207C +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 +#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 +#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 +#define WGL_FRONT_LEFT_ARB 0x2083 +#define WGL_FRONT_RIGHT_ARB 0x2084 +#define WGL_BACK_LEFT_ARB 0x2085 +#define WGL_BACK_RIGHT_ARB 0x2086 +#define WGL_AUX0_ARB 0x2087 +#define WGL_AUX1_ARB 0x2088 +#define WGL_AUX2_ARB 0x2089 +#define WGL_AUX3_ARB 0x208A +#define WGL_AUX4_ARB 0x208B +#define WGL_AUX5_ARB 0x208C +#define WGL_AUX6_ARB 0x208D +#define WGL_AUX7_ARB 0x208E +#define WGL_AUX8_ARB 0x208F +#define WGL_AUX9_ARB 0x2090 +#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 +#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 +#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 +#define WGL_CONTEXT_FLAGS_ARB 0x2094 +#define ERROR_INVALID_VERSION_ARB 0x2095 +#define ERROR_INVALID_PROFILE_ARB 0x2096 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097 +#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 +#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 +#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 +#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 +#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 +#define WGL_DEPTH_COMPONENT_NV 0x20A7 +#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 +#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 +#define WGL_FLOAT_COMPONENTS_NV 0x20B0 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 +#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 +#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 +#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 +#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 +#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 +#define WGL_COLOR_SAMPLES_NV 0x20B9 +#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 +#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 +#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 +#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 +#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 +#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 +#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 +#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 +#define WGL_VIDEO_OUT_FRAME 0x20C8 +#define WGL_VIDEO_OUT_FIELD_1 0x20C9 +#define WGL_VIDEO_OUT_FIELD_2 0x20CA +#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB +#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC +#define WGL_UNIQUE_ID_NV 0x20CE +#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF +#define ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 +#define ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 +#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 +#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 +#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 +#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 +#define WGL_GPU_RAM_AMD 0x21A3 +#define WGL_GPU_CLOCK_AMD 0x21A4 +#define WGL_GPU_NUM_PIPES_AMD 0x21A5 +#define WGL_GPU_NUM_SIMD_AMD 0x21A6 +#define WGL_GPU_NUM_RB_AMD 0x21A7 +#define WGL_GPU_NUM_SPI_AMD 0x21A8 +#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 +#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 +#define WGL_FONT_POLYGONS 1 + +typedef void * (GLAPIENTRY *PFNWGLALLOCATEMEMORYNVPROC)(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); +typedef BOOL (GLAPIENTRY *PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count); +typedef BOOL (GLAPIENTRY *PFNWGLBEGINFRAMETRACKINGI3DPROC)(void); +typedef GLboolean (GLAPIENTRY *PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef BOOL (GLAPIENTRY *PFNWGLBINDSWAPBARRIERNVPROC)(GLuint group, GLuint barrier); +typedef BOOL (GLAPIENTRY *PFNWGLBINDTEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (GLAPIENTRY *PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)(UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLBINDVIDEODEVICENVPROC)(HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList); +typedef BOOL (GLAPIENTRY *PFNWGLBINDVIDEOIMAGENVPROC)(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef VOID (GLAPIENTRY *PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)(HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef BOOL (GLAPIENTRY *PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); +typedef BOOL (GLAPIENTRY *PFNWGLCHOOSEPIXELFORMATEXTPROC)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); +typedef BOOL (GLAPIENTRY *PFNWGLCOPYCONTEXTPROC)(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask); +typedef BOOL (GLAPIENTRY *PFNWGLCOPYIMAGESUBDATANVPROC)(HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef HDC (GLAPIENTRY *PFNWGLCREATEAFFINITYDCNVPROC)(const HGPUNV * phGpuList); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)(UINT id); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)(UINT id, HGLRC hShareContext, const int * attribList); +typedef HANDLE (GLAPIENTRY *PFNWGLCREATEBUFFERREGIONARBPROC)(HDC hDC, int iLayerPlane, UINT uType); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATECONTEXTPROC)(HDC hDc); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC hDC, HGLRC hShareContext, const int * attribList); +typedef GLboolean (GLAPIENTRY *PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef LPVOID (GLAPIENTRY *PFNWGLCREATEIMAGEBUFFERI3DPROC)(HDC hDC, DWORD dwSize, UINT uFlags); +typedef HGLRC (GLAPIENTRY *PFNWGLCREATELAYERCONTEXTPROC)(HDC hDc, int level); +typedef HPBUFFERARB (GLAPIENTRY *PFNWGLCREATEPBUFFERARBPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); +typedef HPBUFFEREXT (GLAPIENTRY *PFNWGLCREATEPBUFFEREXTPROC)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); +typedef BOOL (GLAPIENTRY *PFNWGLDXCLOSEDEVICENVPROC)(HANDLE hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLDXLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE * hObjects); +typedef BOOL (GLAPIENTRY *PFNWGLDXOBJECTACCESSNVPROC)(HANDLE hObject, GLenum access); +typedef HANDLE (GLAPIENTRY *PFNWGLDXOPENDEVICENVPROC)(void * dxDevice); +typedef HANDLE (GLAPIENTRY *PFNWGLDXREGISTEROBJECTNVPROC)(HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access); +typedef BOOL (GLAPIENTRY *PFNWGLDXSETRESOURCESHAREHANDLENVPROC)(void * dxObject, HANDLE shareHandle); +typedef BOOL (GLAPIENTRY *PFNWGLDXUNLOCKOBJECTSNVPROC)(HANDLE hDevice, GLint count, HANDLE * hObjects); +typedef BOOL (GLAPIENTRY *PFNWGLDXUNREGISTEROBJECTNVPROC)(HANDLE hDevice, HANDLE hObject); +typedef BOOL (GLAPIENTRY *PFNWGLDELAYBEFORESWAPNVPROC)(HDC hDC, GLfloat seconds); +typedef BOOL (GLAPIENTRY *PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)(HGLRC hglrc); +typedef VOID (GLAPIENTRY *PFNWGLDELETEBUFFERREGIONARBPROC)(HANDLE hRegion); +typedef BOOL (GLAPIENTRY *PFNWGLDELETECONTEXTPROC)(HGLRC oldContext); +typedef BOOL (GLAPIENTRY *PFNWGLDELETEDCNVPROC)(HDC hdc); +typedef BOOL (GLAPIENTRY *PFNWGLDESCRIBELAYERPLANEPROC)(HDC hDc, int pixelFormat, int layerPlane, UINT nBytes, const LAYERPLANEDESCRIPTOR * plpd); +typedef VOID (GLAPIENTRY *PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)(GLushort id); +typedef BOOL (GLAPIENTRY *PFNWGLDESTROYIMAGEBUFFERI3DPROC)(HDC hDC, LPVOID pAddress); +typedef BOOL (GLAPIENTRY *PFNWGLDESTROYPBUFFERARBPROC)(HPBUFFERARB hPbuffer); +typedef BOOL (GLAPIENTRY *PFNWGLDESTROYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer); +typedef BOOL (GLAPIENTRY *PFNWGLDISABLEFRAMELOCKI3DPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLDISABLEGENLOCKI3DPROC)(HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLENABLEFRAMELOCKI3DPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLENABLEGENLOCKI3DPROC)(HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLENDFRAMETRACKINGI3DPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLENUMGPUDEVICESNVPROC)(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); +typedef BOOL (GLAPIENTRY *PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)(HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu); +typedef BOOL (GLAPIENTRY *PFNWGLENUMGPUSNVPROC)(UINT iGpuIndex, HGPUNV * phGpu); +typedef UINT (GLAPIENTRY *PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)(HDC hDc, HVIDEOINPUTDEVICENV * phDeviceList); +typedef int (GLAPIENTRY *PFNWGLENUMERATEVIDEODEVICESNVPROC)(HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList); +typedef void (GLAPIENTRY *PFNWGLFREEMEMORYNVPROC)(void * pointer); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT uRate); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT uDelay); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT uEdge); +typedef BOOL (GLAPIENTRY *PFNWGLGENLOCKSOURCEI3DPROC)(HDC hDC, UINT uSource); +typedef UINT (GLAPIENTRY *PFNWGLGETCONTEXTGPUIDAMDPROC)(HGLRC hglrc); +typedef HGLRC (GLAPIENTRY *PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)(void); +typedef HGLRC (GLAPIENTRY *PFNWGLGETCURRENTCONTEXTPROC)(void); +typedef HDC (GLAPIENTRY *PFNWGLGETCURRENTDCPROC)(void); +typedef HDC (GLAPIENTRY *PFNWGLGETCURRENTREADDCARBPROC)(void); +typedef HDC (GLAPIENTRY *PFNWGLGETCURRENTREADDCEXTPROC)(void); +typedef PROC (GLAPIENTRY *PFNWGLGETDEFAULTPROCADDRESSPROC)(LPCSTR lpszProc); +typedef BOOL (GLAPIENTRY *PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int * piValue); +typedef const char * (GLAPIENTRY *PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc); +typedef const char * (GLAPIENTRY *PFNWGLGETEXTENSIONSSTRINGEXTPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLGETFRAMEUSAGEI3DPROC)(float * pUsage); +typedef UINT (GLAPIENTRY *PFNWGLGETGPUIDSAMDPROC)(UINT maxCount, UINT * ids); +typedef INT (GLAPIENTRY *PFNWGLGETGPUINFOAMDPROC)(UINT id, int property, GLenum dataType, UINT size, void * data); +typedef BOOL (GLAPIENTRY *PFNWGLGETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue); +typedef BOOL (GLAPIENTRY *PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSAMPLERATEI3DPROC)(HDC hDC, UINT * uRate); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)(HDC hDC, UINT * uDelay); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)(HDC hDC, UINT * uEdge); +typedef BOOL (GLAPIENTRY *PFNWGLGETGENLOCKSOURCEI3DPROC)(HDC hDC, UINT * uSource); +typedef int (GLAPIENTRY *PFNWGLGETLAYERPALETTEENTRIESPROC)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); +typedef BOOL (GLAPIENTRY *PFNWGLGETMSCRATEOMLPROC)(HDC hdc, INT32 * numerator, INT32 * denominator); +typedef HDC (GLAPIENTRY *PFNWGLGETPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer); +typedef HDC (GLAPIENTRY *PFNWGLGETPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues); +typedef BOOL (GLAPIENTRY *PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues); +typedef PROC (GLAPIENTRY *PFNWGLGETPROCADDRESSPROC)(LPCSTR lpszProc); +typedef int (GLAPIENTRY *PFNWGLGETSWAPINTERVALEXTPROC)(void); +typedef BOOL (GLAPIENTRY *PFNWGLGETSYNCVALUESOMLPROC)(HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc); +typedef BOOL (GLAPIENTRY *PFNWGLGETVIDEODEVICENVPROC)(HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice); +typedef BOOL (GLAPIENTRY *PFNWGLGETVIDEOINFONVPROC)(HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); +typedef BOOL (GLAPIENTRY *PFNWGLISENABLEDFRAMELOCKI3DPROC)(BOOL * pFlag); +typedef BOOL (GLAPIENTRY *PFNWGLISENABLEDGENLOCKI3DPROC)(HDC hDC, BOOL * pFlag); +typedef BOOL (GLAPIENTRY *PFNWGLJOINSWAPGROUPNVPROC)(HDC hDC, GLuint group); +typedef GLboolean (GLAPIENTRY *PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)(const GLushort * table, GLuint length); +typedef BOOL (GLAPIENTRY *PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)(HGLRC hglrc); +typedef BOOL (GLAPIENTRY *PFNWGLMAKECONTEXTCURRENTARBPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef BOOL (GLAPIENTRY *PFNWGLMAKECONTEXTCURRENTEXTPROC)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +typedef BOOL (GLAPIENTRY *PFNWGLMAKECURRENTPROC)(HDC hDc, HGLRC newContext); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYCURRENTCONTEXTNVPROC)(int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYFRAMECOUNTNVPROC)(HDC hDC, GLuint * count); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYFRAMELOCKMASTERI3DPROC)(BOOL * pFlag); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYFRAMETRACKINGI3DPROC)(DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)(HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYMAXSWAPGROUPSNVPROC)(HDC hDC, GLuint * maxGroups, GLuint * maxBarriers); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYPBUFFERARBPROC)(HPBUFFERARB hPbuffer, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYPBUFFEREXTPROC)(HPBUFFEREXT hPbuffer, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYSWAPGROUPNVPROC)(HDC hDC, GLuint * group, GLuint * barrier); +typedef BOOL (GLAPIENTRY *PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLREALIZELAYERPALETTEPROC)(HDC hdc, int iLayerPlane, BOOL bRealize); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)(HDC hDC, const LPVOID * pAddress, UINT count); +typedef int (GLAPIENTRY *PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer, HDC hDC); +typedef int (GLAPIENTRY *PFNWGLRELEASEPBUFFERDCEXTPROC)(HPBUFFEREXT hPbuffer, HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASETEXIMAGEARBPROC)(HPBUFFERARB hPbuffer, int iBuffer); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEVIDEODEVICENVPROC)(HPVIDEODEV hVideoDevice); +typedef BOOL (GLAPIENTRY *PFNWGLRELEASEVIDEOIMAGENVPROC)(HPBUFFERARB hPbuffer, int iVideoBuffer); +typedef BOOL (GLAPIENTRY *PFNWGLRESETFRAMECOUNTNVPROC)(HDC hDC); +typedef BOOL (GLAPIENTRY *PFNWGLRESTOREBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); +typedef BOOL (GLAPIENTRY *PFNWGLSAVEBUFFERREGIONARBPROC)(HANDLE hRegion, int x, int y, int width, int height); +typedef BOOL (GLAPIENTRY *PFNWGLSENDPBUFFERTOVIDEONVPROC)(HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock); +typedef BOOL (GLAPIENTRY *PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int * piValue); +typedef BOOL (GLAPIENTRY *PFNWGLSETGAMMATABLEI3DPROC)(HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue); +typedef BOOL (GLAPIENTRY *PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)(HDC hDC, int iAttribute, const int * piValue); +typedef int (GLAPIENTRY *PFNWGLSETLAYERPALETTEENTRIESPROC)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); +typedef BOOL (GLAPIENTRY *PFNWGLSETPBUFFERATTRIBARBPROC)(HPBUFFERARB hPbuffer, const int * piAttribList); +typedef BOOL (GLAPIENTRY *PFNWGLSETSTEREOEMITTERSTATE3DLPROC)(HDC hDC, UINT uState); +typedef BOOL (GLAPIENTRY *PFNWGLSHARELISTSPROC)(HGLRC hrcSrvShare, HGLRC hrcSrvSource); +typedef INT64 (GLAPIENTRY *PFNWGLSWAPBUFFERSMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (GLAPIENTRY *PFNWGLSWAPINTERVALEXTPROC)(int interval); +typedef BOOL (GLAPIENTRY *PFNWGLSWAPLAYERBUFFERSPROC)(HDC hdc, UINT fuFlags); +typedef INT64 (GLAPIENTRY *PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)(HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTBITMAPSAPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTBITMAPSWPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTOUTLINESPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTOUTLINESAPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL (GLAPIENTRY *PFNWGLUSEFONTOUTLINESWPROC)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); +typedef BOOL (GLAPIENTRY *PFNWGLWAITFORMSCOMLPROC)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc); +typedef BOOL (GLAPIENTRY *PFNWGLWAITFORSBCOMLPROC)(HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc); +extern EPOXY_IMPORTEXPORT void * (EPOXY_CALLSPEC *epoxy_wglAllocateMemoryNV)(GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglAssociateImageBufferEventsI3D)(HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBeginFrameTrackingI3D)(void); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_wglBindDisplayColorTableEXT)(GLushort id); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindSwapBarrierNV)(GLuint group, GLuint barrier); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindTexImageARB)(HPBUFFERARB hPbuffer, int iBuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindVideoCaptureDeviceNV)(UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindVideoDeviceNV)(HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglBindVideoImageNV)(HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); + +extern EPOXY_IMPORTEXPORT VOID (EPOXY_CALLSPEC *epoxy_wglBlitContextFramebufferAMD)(HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglChoosePixelFormatARB)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglChoosePixelFormatEXT)(HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglCopyContext)(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglCopyImageSubDataNV)(HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglCreateAffinityDCNV)(const HGPUNV * phGpuList); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateAssociatedContextAMD)(UINT id); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateAssociatedContextAttribsAMD)(UINT id, HGLRC hShareContext, const int * attribList); + +extern EPOXY_IMPORTEXPORT HANDLE (EPOXY_CALLSPEC *epoxy_wglCreateBufferRegionARB)(HDC hDC, int iLayerPlane, UINT uType); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateContext)(HDC hDc); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateContextAttribsARB)(HDC hDC, HGLRC hShareContext, const int * attribList); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_wglCreateDisplayColorTableEXT)(GLushort id); + +extern EPOXY_IMPORTEXPORT LPVOID (EPOXY_CALLSPEC *epoxy_wglCreateImageBufferI3D)(HDC hDC, DWORD dwSize, UINT uFlags); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglCreateLayerContext)(HDC hDc, int level); + +extern EPOXY_IMPORTEXPORT HPBUFFERARB (EPOXY_CALLSPEC *epoxy_wglCreatePbufferARB)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT HPBUFFEREXT (EPOXY_CALLSPEC *epoxy_wglCreatePbufferEXT)(HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXCloseDeviceNV)(HANDLE hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXLockObjectsNV)(HANDLE hDevice, GLint count, HANDLE * hObjects); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXObjectAccessNV)(HANDLE hObject, GLenum access); + +extern EPOXY_IMPORTEXPORT HANDLE (EPOXY_CALLSPEC *epoxy_wglDXOpenDeviceNV)(void * dxDevice); + +extern EPOXY_IMPORTEXPORT HANDLE (EPOXY_CALLSPEC *epoxy_wglDXRegisterObjectNV)(HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXSetResourceShareHandleNV)(void * dxObject, HANDLE shareHandle); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXUnlockObjectsNV)(HANDLE hDevice, GLint count, HANDLE * hObjects); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDXUnregisterObjectNV)(HANDLE hDevice, HANDLE hObject); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDelayBeforeSwapNV)(HDC hDC, GLfloat seconds); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDeleteAssociatedContextAMD)(HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT VOID (EPOXY_CALLSPEC *epoxy_wglDeleteBufferRegionARB)(HANDLE hRegion); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDeleteContext)(HGLRC oldContext); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDeleteDCNV)(HDC hdc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDescribeLayerPlane)(HDC hDc, int pixelFormat, int layerPlane, UINT nBytes, const LAYERPLANEDESCRIPTOR * plpd); + +extern EPOXY_IMPORTEXPORT VOID (EPOXY_CALLSPEC *epoxy_wglDestroyDisplayColorTableEXT)(GLushort id); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDestroyImageBufferI3D)(HDC hDC, LPVOID pAddress); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDestroyPbufferARB)(HPBUFFERARB hPbuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDestroyPbufferEXT)(HPBUFFEREXT hPbuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDisableFrameLockI3D)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglDisableGenlockI3D)(HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnableFrameLockI3D)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnableGenlockI3D)(HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEndFrameTrackingI3D)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnumGpuDevicesNV)(HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnumGpusFromAffinityDCNV)(HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglEnumGpusNV)(UINT iGpuIndex, HGPUNV * phGpu); + +extern EPOXY_IMPORTEXPORT UINT (EPOXY_CALLSPEC *epoxy_wglEnumerateVideoCaptureDevicesNV)(HDC hDc, HVIDEOINPUTDEVICENV * phDeviceList); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglEnumerateVideoDevicesNV)(HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList); + +extern EPOXY_IMPORTEXPORT void (EPOXY_CALLSPEC *epoxy_wglFreeMemoryNV)(void * pointer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSampleRateI3D)(HDC hDC, UINT uRate); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSourceDelayI3D)(HDC hDC, UINT uDelay); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSourceEdgeI3D)(HDC hDC, UINT uEdge); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGenlockSourceI3D)(HDC hDC, UINT uSource); + +extern EPOXY_IMPORTEXPORT UINT (EPOXY_CALLSPEC *epoxy_wglGetContextGPUIDAMD)(HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglGetCurrentAssociatedContextAMD)(void); + +extern EPOXY_IMPORTEXPORT HGLRC (EPOXY_CALLSPEC *epoxy_wglGetCurrentContext)(void); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetCurrentDC)(void); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetCurrentReadDCARB)(void); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetCurrentReadDCEXT)(void); + +extern EPOXY_IMPORTEXPORT PROC (EPOXY_CALLSPEC *epoxy_wglGetDefaultProcAddress)(LPCSTR lpszProc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetDigitalVideoParametersI3D)(HDC hDC, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_wglGetExtensionsStringARB)(HDC hdc); + +extern EPOXY_IMPORTEXPORT const char * (EPOXY_CALLSPEC *epoxy_wglGetExtensionsStringEXT)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetFrameUsageI3D)(float * pUsage); + +extern EPOXY_IMPORTEXPORT UINT (EPOXY_CALLSPEC *epoxy_wglGetGPUIDsAMD)(UINT maxCount, UINT * ids); + +extern EPOXY_IMPORTEXPORT INT (EPOXY_CALLSPEC *epoxy_wglGetGPUInfoAMD)(UINT id, int property, GLenum dataType, UINT size, void * data); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGammaTableI3D)(HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGammaTableParametersI3D)(HDC hDC, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSampleRateI3D)(HDC hDC, UINT * uRate); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSourceDelayI3D)(HDC hDC, UINT * uDelay); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSourceEdgeI3D)(HDC hDC, UINT * uEdge); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetGenlockSourceI3D)(HDC hDC, UINT * uSource); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglGetLayerPaletteEntries)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetMscRateOML)(HDC hdc, INT32 * numerator, INT32 * denominator); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetPbufferDCARB)(HPBUFFERARB hPbuffer); + +extern EPOXY_IMPORTEXPORT HDC (EPOXY_CALLSPEC *epoxy_wglGetPbufferDCEXT)(HPBUFFEREXT hPbuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribfvARB)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribfvEXT)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribivARB)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetPixelFormatAttribivEXT)(HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues); + +extern EPOXY_IMPORTEXPORT PROC (EPOXY_CALLSPEC *epoxy_wglGetProcAddress)(LPCSTR lpszProc); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglGetSwapIntervalEXT)(void); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetSyncValuesOML)(HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetVideoDeviceNV)(HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglGetVideoInfoNV)(HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglIsEnabledFrameLockI3D)(BOOL * pFlag); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglIsEnabledGenlockI3D)(HDC hDC, BOOL * pFlag); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglJoinSwapGroupNV)(HDC hDC, GLuint group); + +extern EPOXY_IMPORTEXPORT GLboolean (EPOXY_CALLSPEC *epoxy_wglLoadDisplayColorTableEXT)(const GLushort * table, GLuint length); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglLockVideoCaptureDeviceNV)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeAssociatedContextCurrentAMD)(HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeContextCurrentARB)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeContextCurrentEXT)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglMakeCurrent)(HDC hDc, HGLRC newContext); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryCurrentContextNV)(int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryFrameCountNV)(HDC hDC, GLuint * count); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryFrameLockMasterI3D)(BOOL * pFlag); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryFrameTrackingI3D)(DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryGenlockMaxSourceDelayI3D)(HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryMaxSwapGroupsNV)(HDC hDC, GLuint * maxGroups, GLuint * maxBarriers); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryPbufferARB)(HPBUFFERARB hPbuffer, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryPbufferEXT)(HPBUFFEREXT hPbuffer, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQuerySwapGroupNV)(HDC hDC, GLuint * group, GLuint * barrier); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglQueryVideoCaptureDeviceNV)(HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglRealizeLayerPalette)(HDC hdc, int iLayerPlane, BOOL bRealize); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseImageBufferEventsI3D)(HDC hDC, const LPVOID * pAddress, UINT count); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglReleasePbufferDCARB)(HPBUFFERARB hPbuffer, HDC hDC); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglReleasePbufferDCEXT)(HPBUFFEREXT hPbuffer, HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseTexImageARB)(HPBUFFERARB hPbuffer, int iBuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseVideoCaptureDeviceNV)(HDC hDc, HVIDEOINPUTDEVICENV hDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseVideoDeviceNV)(HPVIDEODEV hVideoDevice); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglReleaseVideoImageNV)(HPBUFFERARB hPbuffer, int iVideoBuffer); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglResetFrameCountNV)(HDC hDC); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglRestoreBufferRegionARB)(HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSaveBufferRegionARB)(HANDLE hRegion, int x, int y, int width, int height); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSendPbufferToVideoNV)(HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetDigitalVideoParametersI3D)(HDC hDC, int iAttribute, const int * piValue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetGammaTableI3D)(HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetGammaTableParametersI3D)(HDC hDC, int iAttribute, const int * piValue); + +extern EPOXY_IMPORTEXPORT int (EPOXY_CALLSPEC *epoxy_wglSetLayerPaletteEntries)(HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetPbufferAttribARB)(HPBUFFERARB hPbuffer, const int * piAttribList); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSetStereoEmitterState3DL)(HDC hDC, UINT uState); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglShareLists)(HGLRC hrcSrvShare, HGLRC hrcSrvSource); + +extern EPOXY_IMPORTEXPORT INT64 (EPOXY_CALLSPEC *epoxy_wglSwapBuffersMscOML)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSwapIntervalEXT)(int interval); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglSwapLayerBuffers)(HDC hdc, UINT fuFlags); + +extern EPOXY_IMPORTEXPORT INT64 (EPOXY_CALLSPEC *epoxy_wglSwapLayerBuffersMscOML)(HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontBitmapsA)(HDC hDC, DWORD first, DWORD count, DWORD listBase); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontBitmapsW)(HDC hDC, DWORD first, DWORD count, DWORD listBase); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontOutlines)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontOutlinesA)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglUseFontOutlinesW)(HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglWaitForMscOML)(HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc); + +extern EPOXY_IMPORTEXPORT BOOL (EPOXY_CALLSPEC *epoxy_wglWaitForSbcOML)(HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc); + +#define wglAllocateMemoryNV epoxy_wglAllocateMemoryNV +#define wglAssociateImageBufferEventsI3D epoxy_wglAssociateImageBufferEventsI3D +#define wglBeginFrameTrackingI3D epoxy_wglBeginFrameTrackingI3D +#define wglBindDisplayColorTableEXT epoxy_wglBindDisplayColorTableEXT +#define wglBindSwapBarrierNV epoxy_wglBindSwapBarrierNV +#define wglBindTexImageARB epoxy_wglBindTexImageARB +#define wglBindVideoCaptureDeviceNV epoxy_wglBindVideoCaptureDeviceNV +#define wglBindVideoDeviceNV epoxy_wglBindVideoDeviceNV +#define wglBindVideoImageNV epoxy_wglBindVideoImageNV +#define wglBlitContextFramebufferAMD epoxy_wglBlitContextFramebufferAMD +#define wglChoosePixelFormatARB epoxy_wglChoosePixelFormatARB +#define wglChoosePixelFormatEXT epoxy_wglChoosePixelFormatEXT +#define wglCopyContext epoxy_wglCopyContext +#define wglCopyImageSubDataNV epoxy_wglCopyImageSubDataNV +#define wglCreateAffinityDCNV epoxy_wglCreateAffinityDCNV +#define wglCreateAssociatedContextAMD epoxy_wglCreateAssociatedContextAMD +#define wglCreateAssociatedContextAttribsAMD epoxy_wglCreateAssociatedContextAttribsAMD +#define wglCreateBufferRegionARB epoxy_wglCreateBufferRegionARB +#define wglCreateContext epoxy_wglCreateContext +#define wglCreateContextAttribsARB epoxy_wglCreateContextAttribsARB +#define wglCreateDisplayColorTableEXT epoxy_wglCreateDisplayColorTableEXT +#define wglCreateImageBufferI3D epoxy_wglCreateImageBufferI3D +#define wglCreateLayerContext epoxy_wglCreateLayerContext +#define wglCreatePbufferARB epoxy_wglCreatePbufferARB +#define wglCreatePbufferEXT epoxy_wglCreatePbufferEXT +#define wglDXCloseDeviceNV epoxy_wglDXCloseDeviceNV +#define wglDXLockObjectsNV epoxy_wglDXLockObjectsNV +#define wglDXObjectAccessNV epoxy_wglDXObjectAccessNV +#define wglDXOpenDeviceNV epoxy_wglDXOpenDeviceNV +#define wglDXRegisterObjectNV epoxy_wglDXRegisterObjectNV +#define wglDXSetResourceShareHandleNV epoxy_wglDXSetResourceShareHandleNV +#define wglDXUnlockObjectsNV epoxy_wglDXUnlockObjectsNV +#define wglDXUnregisterObjectNV epoxy_wglDXUnregisterObjectNV +#define wglDelayBeforeSwapNV epoxy_wglDelayBeforeSwapNV +#define wglDeleteAssociatedContextAMD epoxy_wglDeleteAssociatedContextAMD +#define wglDeleteBufferRegionARB epoxy_wglDeleteBufferRegionARB +#define wglDeleteContext epoxy_wglDeleteContext +#define wglDeleteDCNV epoxy_wglDeleteDCNV +#define wglDescribeLayerPlane epoxy_wglDescribeLayerPlane +#define wglDestroyDisplayColorTableEXT epoxy_wglDestroyDisplayColorTableEXT +#define wglDestroyImageBufferI3D epoxy_wglDestroyImageBufferI3D +#define wglDestroyPbufferARB epoxy_wglDestroyPbufferARB +#define wglDestroyPbufferEXT epoxy_wglDestroyPbufferEXT +#define wglDisableFrameLockI3D epoxy_wglDisableFrameLockI3D +#define wglDisableGenlockI3D epoxy_wglDisableGenlockI3D +#define wglEnableFrameLockI3D epoxy_wglEnableFrameLockI3D +#define wglEnableGenlockI3D epoxy_wglEnableGenlockI3D +#define wglEndFrameTrackingI3D epoxy_wglEndFrameTrackingI3D +#define wglEnumGpuDevicesNV epoxy_wglEnumGpuDevicesNV +#define wglEnumGpusFromAffinityDCNV epoxy_wglEnumGpusFromAffinityDCNV +#define wglEnumGpusNV epoxy_wglEnumGpusNV +#define wglEnumerateVideoCaptureDevicesNV epoxy_wglEnumerateVideoCaptureDevicesNV +#define wglEnumerateVideoDevicesNV epoxy_wglEnumerateVideoDevicesNV +#define wglFreeMemoryNV epoxy_wglFreeMemoryNV +#define wglGenlockSampleRateI3D epoxy_wglGenlockSampleRateI3D +#define wglGenlockSourceDelayI3D epoxy_wglGenlockSourceDelayI3D +#define wglGenlockSourceEdgeI3D epoxy_wglGenlockSourceEdgeI3D +#define wglGenlockSourceI3D epoxy_wglGenlockSourceI3D +#define wglGetContextGPUIDAMD epoxy_wglGetContextGPUIDAMD +#define wglGetCurrentAssociatedContextAMD epoxy_wglGetCurrentAssociatedContextAMD +#define wglGetCurrentContext epoxy_wglGetCurrentContext +#define wglGetCurrentDC epoxy_wglGetCurrentDC +#define wglGetCurrentReadDCARB epoxy_wglGetCurrentReadDCARB +#define wglGetCurrentReadDCEXT epoxy_wglGetCurrentReadDCEXT +#define wglGetDefaultProcAddress epoxy_wglGetDefaultProcAddress +#define wglGetDigitalVideoParametersI3D epoxy_wglGetDigitalVideoParametersI3D +#define wglGetExtensionsStringARB epoxy_wglGetExtensionsStringARB +#define wglGetExtensionsStringEXT epoxy_wglGetExtensionsStringEXT +#define wglGetFrameUsageI3D epoxy_wglGetFrameUsageI3D +#define wglGetGPUIDsAMD epoxy_wglGetGPUIDsAMD +#define wglGetGPUInfoAMD epoxy_wglGetGPUInfoAMD +#define wglGetGammaTableI3D epoxy_wglGetGammaTableI3D +#define wglGetGammaTableParametersI3D epoxy_wglGetGammaTableParametersI3D +#define wglGetGenlockSampleRateI3D epoxy_wglGetGenlockSampleRateI3D +#define wglGetGenlockSourceDelayI3D epoxy_wglGetGenlockSourceDelayI3D +#define wglGetGenlockSourceEdgeI3D epoxy_wglGetGenlockSourceEdgeI3D +#define wglGetGenlockSourceI3D epoxy_wglGetGenlockSourceI3D +#define wglGetLayerPaletteEntries epoxy_wglGetLayerPaletteEntries +#define wglGetMscRateOML epoxy_wglGetMscRateOML +#define wglGetPbufferDCARB epoxy_wglGetPbufferDCARB +#define wglGetPbufferDCEXT epoxy_wglGetPbufferDCEXT +#define wglGetPixelFormatAttribfvARB epoxy_wglGetPixelFormatAttribfvARB +#define wglGetPixelFormatAttribfvEXT epoxy_wglGetPixelFormatAttribfvEXT +#define wglGetPixelFormatAttribivARB epoxy_wglGetPixelFormatAttribivARB +#define wglGetPixelFormatAttribivEXT epoxy_wglGetPixelFormatAttribivEXT +#define wglGetProcAddress epoxy_wglGetProcAddress +#define wglGetSwapIntervalEXT epoxy_wglGetSwapIntervalEXT +#define wglGetSyncValuesOML epoxy_wglGetSyncValuesOML +#define wglGetVideoDeviceNV epoxy_wglGetVideoDeviceNV +#define wglGetVideoInfoNV epoxy_wglGetVideoInfoNV +#define wglIsEnabledFrameLockI3D epoxy_wglIsEnabledFrameLockI3D +#define wglIsEnabledGenlockI3D epoxy_wglIsEnabledGenlockI3D +#define wglJoinSwapGroupNV epoxy_wglJoinSwapGroupNV +#define wglLoadDisplayColorTableEXT epoxy_wglLoadDisplayColorTableEXT +#define wglLockVideoCaptureDeviceNV epoxy_wglLockVideoCaptureDeviceNV +#define wglMakeAssociatedContextCurrentAMD epoxy_wglMakeAssociatedContextCurrentAMD +#define wglMakeContextCurrentARB epoxy_wglMakeContextCurrentARB +#define wglMakeContextCurrentEXT epoxy_wglMakeContextCurrentEXT +#define wglMakeCurrent epoxy_wglMakeCurrent +#define wglQueryCurrentContextNV epoxy_wglQueryCurrentContextNV +#define wglQueryFrameCountNV epoxy_wglQueryFrameCountNV +#define wglQueryFrameLockMasterI3D epoxy_wglQueryFrameLockMasterI3D +#define wglQueryFrameTrackingI3D epoxy_wglQueryFrameTrackingI3D +#define wglQueryGenlockMaxSourceDelayI3D epoxy_wglQueryGenlockMaxSourceDelayI3D +#define wglQueryMaxSwapGroupsNV epoxy_wglQueryMaxSwapGroupsNV +#define wglQueryPbufferARB epoxy_wglQueryPbufferARB +#define wglQueryPbufferEXT epoxy_wglQueryPbufferEXT +#define wglQuerySwapGroupNV epoxy_wglQuerySwapGroupNV +#define wglQueryVideoCaptureDeviceNV epoxy_wglQueryVideoCaptureDeviceNV +#define wglRealizeLayerPalette epoxy_wglRealizeLayerPalette +#define wglReleaseImageBufferEventsI3D epoxy_wglReleaseImageBufferEventsI3D +#define wglReleasePbufferDCARB epoxy_wglReleasePbufferDCARB +#define wglReleasePbufferDCEXT epoxy_wglReleasePbufferDCEXT +#define wglReleaseTexImageARB epoxy_wglReleaseTexImageARB +#define wglReleaseVideoCaptureDeviceNV epoxy_wglReleaseVideoCaptureDeviceNV +#define wglReleaseVideoDeviceNV epoxy_wglReleaseVideoDeviceNV +#define wglReleaseVideoImageNV epoxy_wglReleaseVideoImageNV +#define wglResetFrameCountNV epoxy_wglResetFrameCountNV +#define wglRestoreBufferRegionARB epoxy_wglRestoreBufferRegionARB +#define wglSaveBufferRegionARB epoxy_wglSaveBufferRegionARB +#define wglSendPbufferToVideoNV epoxy_wglSendPbufferToVideoNV +#define wglSetDigitalVideoParametersI3D epoxy_wglSetDigitalVideoParametersI3D +#define wglSetGammaTableI3D epoxy_wglSetGammaTableI3D +#define wglSetGammaTableParametersI3D epoxy_wglSetGammaTableParametersI3D +#define wglSetLayerPaletteEntries epoxy_wglSetLayerPaletteEntries +#define wglSetPbufferAttribARB epoxy_wglSetPbufferAttribARB +#define wglSetStereoEmitterState3DL epoxy_wglSetStereoEmitterState3DL +#define wglShareLists epoxy_wglShareLists +#define wglSwapBuffersMscOML epoxy_wglSwapBuffersMscOML +#define wglSwapIntervalEXT epoxy_wglSwapIntervalEXT +#define wglSwapLayerBuffers epoxy_wglSwapLayerBuffers +#define wglSwapLayerBuffersMscOML epoxy_wglSwapLayerBuffersMscOML +#define wglUseFontBitmapsA epoxy_wglUseFontBitmapsA +#define wglUseFontBitmapsW epoxy_wglUseFontBitmapsW +#define wglUseFontOutlines epoxy_wglUseFontOutlines +#define wglUseFontOutlinesA epoxy_wglUseFontOutlinesA +#define wglUseFontOutlinesW epoxy_wglUseFontOutlinesW +#define wglWaitForMscOML epoxy_wglWaitForMscOML +#define wglWaitForSbcOML epoxy_wglWaitForSbcOML diff --git a/Engine/lib/epoxy/include/epoxy/gl.h b/Engine/lib/epoxy/include/epoxy/gl.h new file mode 100644 index 0000000000..21d9911906 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/gl.h @@ -0,0 +1,103 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file gl.h + * + * Provides an implementation of a GL dispatch layer using either + * global function pointers or a hidden vtable. + */ + +#ifndef EPOXY_GL_H +#define EPOXY_GL_H + +#if defined(__glplatform_h_) || defined(__gl_h_) || defined(__glext_h_) \ + || defined(__gl2platform_h_) || defined(__gl2_h_) || defined(__gl2ext_h_) \ + || defined(__gl3platform_h_) || defined(__gl3_h_) || defined(__gl31_h_) +# error "epoxy/gl.h" must be included before (or in place of) the desktop OpenGL / OpenGL ES headers. +#else +# define __glplatform_h_ +# define __gl_h_ +# define __glext_h_ +# define __gl2platform_h +# define __gl2_h_ 1 +# define __gl2ext_h_ 1 +# define __gl3platform_h_ +# define __gl3_h_ 1 +# define __gl31_h_ 1 +#endif + +#include + +#ifndef _WIN32 +# define APIENTRY +# define GLAPIENTRY +# ifndef EPOXY_IMPORTEXPORT +# define EPOXY_IMPORTEXPORT +# endif +# define EPOXY_CALLSPEC +# define GLAPI +#else +# ifndef APIENTRY +# define APIENTRY __stdcall +# endif +# ifndef GLAPIENTRY +# define GLAPIENTRY APIENTRY +# endif +# ifndef EPOXY_CALLSPEC +# define EPOXY_CALLSPEC __stdcall +# endif +# ifndef EPOXY_IMPORTEXPORT +# ifdef EPOXY_DLL +# define EPOXY_IMPORTEXPORT __declspec(dllimport) +# else +# define EPOXY_IMPORTEXPORT +# endif +# endif +# ifndef GLAPI +# define GLAPI extern +# endif +#endif /* _WIN32 */ + +#ifndef APIENTRYP +# define APIENTRYP APIENTRY * +#endif +#ifndef GLAPIENTRYP +# define GLAPIENTRYP GLAPIENTRY * +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/gl_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_gl_extension(const char *extension); +EPOXY_IMPORTEXPORT bool epoxy_is_desktop_gl(void); +EPOXY_IMPORTEXPORT int epoxy_gl_version(void); +EPOXY_IMPORTEXPORT bool epoxy_current_context_is_egl(void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_GL_H */ diff --git a/Engine/lib/epoxy/include/epoxy/glx.h b/Engine/lib/epoxy/include/epoxy/glx.h new file mode 100644 index 0000000000..b87fce0dad --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/glx.h @@ -0,0 +1,53 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file glx.h + * + * Provides an implementation of a GLX dispatch layer using global + * function pointers. + */ + +#ifndef EPOXY_GLX_H +#define EPOXY_GLX_H + +#if defined(GLX_H) || defined(__glxext_h_) +# error epoxy/glx.h must be included before (or in place of) GL/glx.h +#else +# define GLX_H +# define __glxext_h_ +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/glx_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_glx_extension(Display *dpy, int screen, const char *extension); +EPOXY_IMPORTEXPORT int epoxy_glx_version(Display *dpy, int screen); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_GLX_H */ diff --git a/Engine/lib/epoxy/include/epoxy/wgl.h b/Engine/lib/epoxy/include/epoxy/wgl.h new file mode 100644 index 0000000000..e8185699d6 --- /dev/null +++ b/Engine/lib/epoxy/include/epoxy/wgl.h @@ -0,0 +1,71 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** @file wgl.h + * + * Provides an implementation of a WGL dispatch layer using a hidden + * vtable. + */ + +#ifndef EPOXY_WGL_H +#define EPOXY_WGL_H + +#if defined(__wglxext_h_) +# error epoxy/wgl.h must be included before (or in place of) wgl.h +#else +# define __wglxext_h_ +#endif + +// Prevent Duplicate Definition Warnings +#if defined(APIENTRY) && !defined(WINAPI) +# undef APIENTRY +#endif + +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +#endif + +#include +#undef wglUseFontBitmaps +#undef wglUseFontOutlines + +#ifdef UNICODE +# define wglUseFontBitmaps wglUseFontBitmapsW +#else +# define wglUseFontBitmaps wglUseFontBitmapsA +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include "epoxy/wgl_generated.h" + +EPOXY_IMPORTEXPORT bool epoxy_has_wgl_extension(HDC hdc, const char *extension); +EPOXY_IMPORTEXPORT void epoxy_handle_external_wglMakeCurrent(void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* EPOXY_WGL_H */ diff --git a/Engine/lib/epoxy/src/dispatch_common.c b/Engine/lib/epoxy/src/dispatch_common.c new file mode 100644 index 0000000000..22ccde453f --- /dev/null +++ b/Engine/lib/epoxy/src/dispatch_common.c @@ -0,0 +1,642 @@ +/* + * Copyright © 2013-2014 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +/** + * @file dispatch_common.c + * + * Implements common code shared by the generated GL/EGL/GLX dispatch code. + * + * A collection of some important specs on getting GL function pointers. + * + * From the linux GL ABI (http://www.opengl.org/registry/ABI/): + * + * "3.4. The libraries must export all OpenGL 1.2, GLU 1.3, GLX 1.3, and + * ARB_multitexture entry points statically. + * + * 3.5. Because non-ARB extensions vary so widely and are constantly + * increasing in number, it's infeasible to require that they all be + * supported, and extensions can always be added to hardware drivers + * after the base link libraries are released. These drivers are + * dynamically loaded by libGL, so extensions not in the base + * library must also be obtained dynamically. + * + * 3.6. To perform the dynamic query, libGL also must export an entry + * point called + * + * void (*glXGetProcAddressARB(const GLubyte *))(); + * + * The full specification of this function is available separately. It + * takes the string name of a GL or GLX entry point and returns a pointer + * to a function implementing that entry point. It is functionally + * identical to the wglGetProcAddress query defined by the Windows OpenGL + * library, except that the function pointers returned are context + * independent, unlike the WGL query." + * + * From the EGL 1.4 spec: + * + * "Client API function pointers returned by eglGetProcAddress are + * independent of the display and the currently bound client API context, + * and may be used by any client API context which supports the extension. + * + * eglGetProcAddress may be queried for all of the following functions: + * + * • All EGL and client API extension functions supported by the + * implementation (whether those extensions are supported by the current + * client API context or not). This includes any mandatory OpenGL ES + * extensions. + * + * eglGetProcAddress may not be queried for core (non-extension) functions + * in EGL or client APIs 20 . + * + * For functions that are queryable with eglGetProcAddress, + * implementations may choose to also export those functions statically + * from the object libraries im- plementing those functions. However, + * portable clients cannot rely on this behavior. + * + * From the GLX 1.4 spec: + * + * "glXGetProcAddress may be queried for all of the following functions: + * + * • All GL and GLX extension functions supported by the implementation + * (whether those extensions are supported by the current context or + * not). + * + * • All core (non-extension) functions in GL and GLX from version 1.0 up + * to and including the versions of those specifications supported by + * the implementation, as determined by glGetString(GL VERSION) and + * glXQueryVersion queries." + */ + +#include +#include +#ifdef _WIN32 +#include +#else +#include +#include +#include +#endif +#include +#include +#include + +#include "dispatch_common.h" + +#ifdef __APPLE__ +#define GLX_LIB "/opt/X11/lib/libGL.1.dylib" +#elif defined(ANDROID) +#define GLX_LIB "libGLESv2.so" +#else +#define GLX_LIB "libGL.so.1" +#endif + +#ifdef ANDROID +#define EGL_LIB "libEGL.so" +#define GLES1_LIB "libGLESv1_CM.so" +#define GLES2_LIB "libGLESv2.so" +#elif defined _WIN32 +#define EGL_LIB "libEGL.dll" +#define GLES1_LIB "libGLES_CM.dll" +#define GLES2_LIB "libGLESv2.dll" +#else +#define EGL_LIB "libEGL.so.1" +#define GLES1_LIB "libGLESv1_CM.so.1" +#define GLES2_LIB "libGLESv2.so.2" +#endif + +#ifdef __GNUC__ +#define CONSTRUCT(_func) static void _func (void) __attribute__((constructor)); +#define DESTRUCT(_func) static void _func (void) __attribute__((destructor)); +#elif defined (_MSC_VER) && (_MSC_VER >= 1500) +#define CONSTRUCT(_func) \ + static void _func(void); \ + static int _func ## _wrapper(void) { _func(); return 0; } \ + __pragma(section(".CRT$XCU",read)) \ + __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _wrapper; + +#define DESTRUCT(_func) \ + static void _func(void); \ + static int _func ## _constructor(void) { atexit (_func); return 0; } \ + __pragma(section(".CRT$XCU",read)) \ + __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor; + +#else +#error "You will need constructor support for your compiler" +#endif + +struct api { +#ifndef _WIN32 + /** + * Locking for making sure we don't double-dlopen(). + */ + pthread_mutex_t mutex; +#endif + + /** dlopen() return value for libGL.so.1. */ + void *glx_handle; + + /** + * dlopen() return value for OS X's GL library. + * + * On linux, glx_handle is used instead. + */ + void *gl_handle; + + /** dlopen() return value for libEGL.so.1 */ + void *egl_handle; + + /** dlopen() return value for libGLESv1_CM.so.1 */ + void *gles1_handle; + + /** dlopen() return value for libGLESv2.so.2 */ + void *gles2_handle; + + /** + * This value gets incremented when any thread is in + * glBegin()/glEnd() called through epoxy. + * + * We're not guaranteed to be called through our wrapper, so the + * conservative paths also try to handle the failure cases they'll + * see if begin_count didn't reflect reality. It's also a bit of + * a bug that the conservative paths might return success because + * some other thread was in epoxy glBegin/glEnd while our thread + * is trying to resolve, but given that it's basically just for + * informative error messages, we shouldn't need to care. + */ + long begin_count; +}; + +static struct api api = { +#ifndef _WIN32 + .mutex = PTHREAD_MUTEX_INITIALIZER, +#else + 0, +#endif +}; + +static bool library_initialized; + +#ifdef BUILD_EGL +static EGLenum +epoxy_egl_get_current_gl_context_api(void); +#endif + +CONSTRUCT (library_init) +static void +library_init(void) +{ + library_initialized = true; +} + +static bool +get_dlopen_handle(void **handle, const char *lib_name, bool exit_on_fail) +{ + if (*handle) + return true; + + if (!library_initialized) { + fprintf(stderr, + "Attempting to dlopen() while in the dynamic linker.\n"); + abort(); + } + +#ifdef _WIN32 + *handle = LoadLibraryA(lib_name); +#else + pthread_mutex_lock(&api.mutex); + if (!*handle) { + *handle = dlopen(lib_name, RTLD_LAZY | RTLD_LOCAL); + if (!*handle) { + if (exit_on_fail) { + fprintf(stderr, "Couldn't open %s: %s\n", lib_name, dlerror()); + exit(1); + } else { + (void)dlerror(); + } + } + } + pthread_mutex_unlock(&api.mutex); +#endif + + return *handle != NULL; +} + +static void * +do_dlsym(void **handle, const char *lib_name, const char *name, + bool exit_on_fail) +{ + void *result; + const char *error = ""; + + if (!get_dlopen_handle(handle, lib_name, exit_on_fail)) + return NULL; + +#ifdef _WIN32 + result = GetProcAddress(*handle, name); +#else + result = dlsym(*handle, name); + if (!result) + error = dlerror(); +#endif + if (!result && exit_on_fail) { + fprintf(stderr,"%s() not found in %s: %s\n", name, lib_name, error); + exit(1); + } + + return result; +} + +PUBLIC bool +epoxy_is_desktop_gl(void) +{ + const char *es_prefix = "OpenGL ES"; + const char *version; + +#ifdef BUILD_EGL + /* PowerVR's OpenGL ES implementation (and perhaps other) don't + * comply with the standard, which states that + * "glGetString(GL_VERSION)" should return a string starting with + * "OpenGL ES". Therefore, to distinguish desktop OpenGL from + * OpenGL ES, we must also check the context type through EGL (we + * can do that as PowerVR is only usable through EGL). + */ + if (epoxy_current_context_is_egl()) { + switch (epoxy_egl_get_current_gl_context_api()) { + case EGL_OPENGL_API: return true; + case EGL_OPENGL_ES_API: return false; + case EGL_NONE: + default: break; + } + } +#endif + + if (api.begin_count) + return true; + + version = (const char *)glGetString(GL_VERSION); + + /* If we didn't get a version back, there are only two things that + * could have happened: either malloc failure (which basically + * doesn't exist), or we were called within a glBegin()/glEnd(). + * Assume the second, which only exists for desktop GL. + */ + if (!version) + return true; + + return strncmp(es_prefix, version, strlen(es_prefix)); +} + +static int +epoxy_internal_gl_version(int error_version) +{ + const char *version = (const char *)glGetString(GL_VERSION); + GLint major, minor; + int scanf_count; + + if (!version) + return error_version; + + /* skip to version number */ + while (!isdigit(*version) && *version != '\0') + version++; + + /* Interpret version number */ + scanf_count = sscanf(version, "%i.%i", &major, &minor); + if (scanf_count != 2) { + fprintf(stderr, "Unable to interpret GL_VERSION string: %s\n", + version); + exit(1); + } + return 10 * major + minor; +} + +PUBLIC int +epoxy_gl_version(void) +{ + return epoxy_internal_gl_version(0); +} + +int +epoxy_conservative_gl_version(void) +{ + if (api.begin_count) + return 100; + + return epoxy_internal_gl_version(100); +} + +bool +epoxy_extension_in_string(const char *extension_list, const char *ext) +{ + const char *ptr = extension_list; + size_t len = strlen(ext); + + /* Make sure that don't just find an extension with our name as a prefix. */ + while (true) { + ptr = strstr(ptr, ext); + if (!ptr) + return false; + + if (ptr[len] == ' ' || ptr[len] == 0) + return true; + ptr += len; + } +} + +static bool +epoxy_internal_has_gl_extension(const char *ext, bool invalid_op_mode) +{ + if (epoxy_gl_version() < 30) { + const char *exts = (const char *)glGetString(GL_EXTENSIONS); + if (!exts) + return invalid_op_mode; + return epoxy_extension_in_string(exts, ext); + } else { + int num_extensions; + int i; + + glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); + if (num_extensions == 0) + return invalid_op_mode; + + for (i = 0; i < num_extensions; i++) { + const char *gl_ext = (const char *)glGetStringi(GL_EXTENSIONS, i); + if (strcmp(ext, gl_ext) == 0) + return true; + } + + return false; + } +} + +/** + * Tests whether the currently bound context is EGL or GLX, trying to + * avoid loading libraries unless necessary. + */ +EPOXY_IMPORTEXPORT bool +epoxy_current_context_is_egl(void) +{ +#ifdef BUILD_EGL + if (get_dlopen_handle(&api.egl_handle, EGL_LIB, false) && epoxy_egl_get_current_gl_context_api() != EGL_NONE) + return true; +#endif + + return false; +} + +/** + * Returns true if the given GL extension is supported in the current context. + * + * Note that this function can't be called from within glBegin()/glEnd(). + * + * \sa epoxy_has_egl_extension() + * \sa epoxy_has_glx_extension() + */ +PUBLIC bool +epoxy_has_gl_extension(const char *ext) +{ + return epoxy_internal_has_gl_extension(ext, false); +} + +bool +epoxy_conservative_has_gl_extension(const char *ext) +{ + if (api.begin_count) + return true; + + return epoxy_internal_has_gl_extension(ext, true); +} + +void * +epoxy_egl_dlsym(const char *name) +{ + return do_dlsym(&api.egl_handle, EGL_LIB, name, true); +} + +void * +epoxy_glx_dlsym(const char *name) +{ + return do_dlsym(&api.glx_handle, GLX_LIB, name, true); +} + +void * +epoxy_gl_dlsym(const char *name) +{ +#ifdef _WIN32 + return do_dlsym(&api.gl_handle, "OPENGL32", name, true); +#elif defined(__APPLE__) + return do_dlsym(&api.gl_handle, + "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", + name, true); +#else + /* There's no library for desktop GL support independent of GLX. */ + return epoxy_glx_dlsym(name); +#endif +} + +void * +epoxy_gles1_dlsym(const char *name) +{ + if (!epoxy_current_context_is_egl()) { + return epoxy_get_proc_address(name); + } else { + return do_dlsym(&api.gles1_handle, GLES1_LIB, name, true); + } +} + +void * +epoxy_gles2_dlsym(const char *name) +{ + if (!epoxy_current_context_is_egl()) { + return epoxy_get_proc_address(name); + } else { + return do_dlsym(&api.gles2_handle, GLES2_LIB, name, true); + } +} + +/** + * Does the appropriate dlsym() or eglGetProcAddress() for GLES3 + * functions. + * + * Mesa interpreted GLES as intending that the GLES3 functions were + * available only through eglGetProcAddress() and not dlsym(), while + * ARM's Mali drivers interpreted GLES as intending that GLES3 + * functions were available only through dlsym() and not + * eglGetProcAddress(). Thanks, Khronos. + */ +void * +epoxy_gles3_dlsym(const char *name) +{ + if (!epoxy_current_context_is_egl()) { + return epoxy_get_proc_address(name); + } else { + void *func = do_dlsym(&api.gles2_handle, GLES2_LIB, name, false); + + if (func) + return func; + + return epoxy_get_proc_address(name); + } +} + +/** + * Performs either the dlsym or glXGetProcAddress()-equivalent for + * core functions in desktop GL. + */ +void * +epoxy_get_core_proc_address(const char *name, int core_version) +{ +#ifdef _WIN32 + int core_symbol_support = 11; +#elif defined(ANDROID) + /** + * All symbols must be resolved through eglGetProcAddress + * on Android + */ + int core_symbol_support = 0; +#else + int core_symbol_support = 12; +#endif + + if (core_version <= core_symbol_support) { + return epoxy_gl_dlsym(name); + } else { + return epoxy_get_proc_address(name); + } +} + +#ifdef BUILD_EGL +static EGLenum +epoxy_egl_get_current_gl_context_api(void) +{ + EGLDisplay eglDisplay = eglGetCurrentDisplay(); + EGLContext eglContext = eglGetCurrentContext(); + EGLint eglContextClientType = EGL_NONE; + return eglQueryContext(eglDisplay, eglContext, EGL_CONTEXT_CLIENT_TYPE, + &eglContextClientType) == EGL_TRUE + ? (EGLenum)eglContextClientType + : EGL_NONE; +} +#endif + +/** + * Performs the dlsym() for the core GL 1.0 functions that we use for + * determining version and extension support for deciding on dlsym + * versus glXGetProcAddress() for all other functions. + * + * This needs to succeed on implementations without GLX (since + * glGetString() and glGetIntegerv() are both in GLES1/2 as well, and + * at call time we don't know for sure what API they're trying to use + * without inspecting contexts ourselves). + */ +void * +epoxy_get_bootstrap_proc_address(const char *name) +{ + /* If we already have a library that links to libglapi loaded, + * use that. + */ +#ifdef BUILD_GLX + if (api.glx_handle && glXGetCurrentContext()) + return epoxy_gl_dlsym(name); +#endif + + /* If epoxy hasn't loaded any API-specific library yet, try to + * figure out what API the context is using and use that library, + * since future calls will also use that API (this prevents a + * non-X11 ES2 context from loading a bunch of X11 junk). + */ +#ifdef BUILD_EGL + get_dlopen_handle(&api.egl_handle, EGL_LIB, false); + if (api.egl_handle) { + switch (epoxy_egl_get_current_gl_context_api()) { + case EGL_OPENGL_API: + return epoxy_gl_dlsym(name); + case EGL_OPENGL_ES_API: { + EGLDisplay eglDisplay = eglGetCurrentDisplay(); + EGLContext eglContext = eglGetCurrentContext(); + EGLint glesVer = -1; + if (eglDisplay != EGL_NO_DISPLAY + && eglContext != EGL_NO_CONTEXT + && eglQueryContext(eglDisplay, eglContext, + EGL_CONTEXT_CLIENT_VERSION, &glesVer) == EGL_TRUE) + return glesVer >= 2 ? epoxy_gles2_dlsym(name) : epoxy_gles1_dlsym(name); + else + return NULL; + } + } + } +#endif + + /* Fall back to GLX */ + return epoxy_gl_dlsym(name); +} + +void * +epoxy_get_proc_address(const char *name) +{ +#if defined(BUILD_EGL) + if (epoxy_current_context_is_egl()) + return eglGetProcAddress(name); +#endif +#if defined(BUILD_WGL) + void *func = wglGetProcAddress(name); + return func ? func : epoxy_gl_dlsym(name); +#elif defined(__APPLE__) + return epoxy_gl_dlsym(name); +#elif defined(BUILD_GLX) + return glXGetProcAddressARB((const GLubyte *)name); +#else + return NULL; +#endif +} + +WRAPPER_VISIBILITY (void) +WRAPPER(epoxy_glBegin)(GLenum primtype) +{ +#ifdef _WIN32 + InterlockedIncrement(&api.begin_count); +#else + pthread_mutex_lock(&api.mutex); + api.begin_count++; + pthread_mutex_unlock(&api.mutex); +#endif + + epoxy_glBegin_unwrapped(primtype); +} + +WRAPPER_VISIBILITY (void) +WRAPPER(epoxy_glEnd)(void) +{ + epoxy_glEnd_unwrapped(); + +#ifdef _WIN32 + InterlockedDecrement(&api.begin_count); +#else + pthread_mutex_lock(&api.mutex); + api.begin_count--; + pthread_mutex_unlock(&api.mutex); +#endif +} + +PUBLIC PFNGLBEGINPROC epoxy_glBegin = epoxy_glBegin_wrapped; +PUBLIC PFNGLENDPROC epoxy_glEnd = epoxy_glEnd_wrapped; diff --git a/Engine/lib/epoxy/src/dispatch_common.h b/Engine/lib/epoxy/src/dispatch_common.h new file mode 100644 index 0000000000..ccded60f7f --- /dev/null +++ b/Engine/lib/epoxy/src/dispatch_common.h @@ -0,0 +1,188 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#ifdef _WIN32 +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN 1 +# endif +# include +# ifdef EPOXY_DLL +# define EPOXY_IMPORTEXPORT __declspec(dllexport) +# endif +#else +# ifdef EPOXY_DLL +# define EPOXY_IMPORTEXPORT __attribute__((visibility("default"))) +# endif +#endif +#ifndef EPOXY_IMPORTEXPORT +# define EPOXY_IMPORTEXPORT +#endif + +#include + +#ifdef BUILD_GLX +# include +#endif + +#ifdef BUILD_EGL +# include +#endif + +#ifdef BUILD_WGL +# include +#endif + +#ifndef PUBLIC +# define PUBLIC EPOXY_IMPORTEXPORT +#endif + +#if defined(__GNUC__) +#define PACKED __attribute__((__packed__)) +#else +#define PACKED +#endif + +/* On win32, we're going to need to keep a per-thread dispatch table, + * since the function pointers depend on the device and pixel format + * of the current context. + */ +#if defined(_WIN32) +#define USING_DISPATCH_TABLE 1 +#else +#define USING_DISPATCH_TABLE 0 +#endif + +#define UNWRAPPED_PROTO(x) (GLAPIENTRY *x) +#define WRAPPER_VISIBILITY(type) static type GLAPIENTRY +#define WRAPPER(x) x ## _wrapped + +#define GEN_GLOBAL_REWRITE_PTR(name, args, passthrough) \ + static void EPOXY_CALLSPEC \ + name##_global_rewrite_ptr args \ + { \ + name = (void *)name##_resolver(); \ + name passthrough; \ + } + +#define GEN_GLOBAL_REWRITE_PTR_RET(ret, name, args, passthrough) \ + static ret EPOXY_CALLSPEC \ + name##_global_rewrite_ptr args \ + { \ + name = (void *)name##_resolver(); \ + return name passthrough; \ + } + +#if USING_DISPATCH_TABLE +#define GEN_DISPATCH_TABLE_REWRITE_PTR(name, args, passthrough) \ + static void EPOXY_CALLSPEC \ + name##_dispatch_table_rewrite_ptr args \ + { \ + struct dispatch_table *dispatch_table = get_dispatch_table(); \ + \ + dispatch_table->name = (void *)name##_resolver(); \ + dispatch_table->name passthrough; \ + } + +#define GEN_DISPATCH_TABLE_REWRITE_PTR_RET(ret, name, args, passthrough) \ + static ret EPOXY_CALLSPEC \ + name##_dispatch_table_rewrite_ptr args \ + { \ + struct dispatch_table *dispatch_table = get_dispatch_table(); \ + \ + dispatch_table->name = (void *)name##_resolver(); \ + return dispatch_table->name passthrough; \ + } + +#define GEN_DISPATCH_TABLE_THUNK(name, args, passthrough) \ + static void EPOXY_CALLSPEC \ + name##_dispatch_table_thunk args \ + { \ + get_dispatch_table()->name passthrough; \ + } + +#define GEN_DISPATCH_TABLE_THUNK_RET(ret, name, args, passthrough) \ + static ret EPOXY_CALLSPEC \ + name##_dispatch_table_thunk args \ + { \ + return get_dispatch_table()->name passthrough; \ + } + +#else +#define GEN_DISPATCH_TABLE_REWRITE_PTR(name, args, passthrough) +#define GEN_DISPATCH_TABLE_REWRITE_PTR_RET(ret, name, args, passthrough) +#define GEN_DISPATCH_TABLE_THUNK(name, args, passthrough) +#define GEN_DISPATCH_TABLE_THUNK_RET(ret, name, args, passthrough) +#endif + +#define GEN_THUNKS(name, args, passthrough) \ + GEN_GLOBAL_REWRITE_PTR(name, args, passthrough) \ + GEN_DISPATCH_TABLE_REWRITE_PTR(name, args, passthrough) \ + GEN_DISPATCH_TABLE_THUNK(name, args, passthrough) + +#define GEN_THUNKS_RET(ret, name, args, passthrough) \ + GEN_GLOBAL_REWRITE_PTR_RET(ret, name, args, passthrough) \ + GEN_DISPATCH_TABLE_REWRITE_PTR_RET(ret, name, args, passthrough) \ + GEN_DISPATCH_TABLE_THUNK_RET(ret, name, args, passthrough) + +void *epoxy_egl_dlsym(const char *name); +void *epoxy_glx_dlsym(const char *name); +void *epoxy_gl_dlsym(const char *name); +void *epoxy_gles1_dlsym(const char *name); +void *epoxy_gles2_dlsym(const char *name); +void *epoxy_gles3_dlsym(const char *name); +void *epoxy_get_proc_address(const char *name); +void *epoxy_get_core_proc_address(const char *name, int core_version); +void *epoxy_get_bootstrap_proc_address(const char *name); + +int epoxy_conservative_gl_version(void); +bool epoxy_conservative_has_gl_extension(const char *name); +int epoxy_conservative_glx_version(void); +bool epoxy_conservative_has_glx_extension(const char *name); +int epoxy_conservative_egl_version(void); +bool epoxy_conservative_has_egl_extension(const char *name); +bool epoxy_conservative_has_wgl_extension(const char *name); + +bool epoxy_extension_in_string(const char *extension_list, const char *ext); + +#define glBegin_unwrapped epoxy_glBegin_unwrapped +#define glEnd_unwrapped epoxy_glEnd_unwrapped +extern void UNWRAPPED_PROTO(glBegin_unwrapped)(GLenum primtype); +extern void UNWRAPPED_PROTO(glEnd_unwrapped)(void); + +#if USING_DISPATCH_TABLE +void gl_init_dispatch_table(void); +void gl_switch_to_dispatch_table(void); +void wgl_init_dispatch_table(void); +void wgl_switch_to_dispatch_table(void); +extern uint32_t gl_tls_index, gl_tls_size; +extern uint32_t wgl_tls_index, wgl_tls_size; + +#define wglMakeCurrent_unwrapped epoxy_wglMakeCurrent_unwrapped +#define wglMakeContextCurrentARB_unwrapped epoxy_wglMakeContextCurrentARB_unwrapped +#define wglMakeContextCurrentEXT_unwrapped epoxy_wglMakeContextCurrentEXT_unwrapped +#define wglMakeAssociatedContextCurrentAMD_unwrapped epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped +extern BOOL UNWRAPPED_PROTO(wglMakeCurrent_unwrapped)(HDC hdc, HGLRC hglrc); +extern BOOL UNWRAPPED_PROTO(wglMakeContextCurrentARB_unwrapped)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +extern BOOL UNWRAPPED_PROTO(wglMakeContextCurrentEXT_unwrapped)(HDC hDrawDC, HDC hReadDC, HGLRC hglrc); +extern BOOL UNWRAPPED_PROTO(wglMakeAssociatedContextCurrentAMD_unwrapped)(HGLRC hglrc); +#endif /* _WIN32_ */ diff --git a/Engine/lib/epoxy/src/egl/dispatch_egl.c b/Engine/lib/epoxy/src/egl/dispatch_egl.c new file mode 100644 index 0000000000..9649ba4080 --- /dev/null +++ b/Engine/lib/epoxy/src/egl/dispatch_egl.c @@ -0,0 +1,69 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include +#include +#include + +#include "dispatch_common.h" + +int +epoxy_conservative_egl_version(void) +{ + EGLDisplay dpy = eglGetCurrentDisplay(); + + if (!dpy) + return 14; + + return epoxy_egl_version(dpy); +} + +PUBLIC int +epoxy_egl_version(EGLDisplay dpy) +{ + int major, minor; + const char *version_string; + int ret; + + version_string = eglQueryString(dpy, EGL_VERSION); + ret = sscanf(version_string, "%d.%d", &major, &minor); + assert(ret == 2); + return major * 10 + minor; +} + +bool +epoxy_conservative_has_egl_extension(const char *ext) +{ + EGLDisplay dpy = eglGetCurrentDisplay(); + + if (!dpy) + return true; + + return epoxy_has_egl_extension(dpy, ext); +} + +PUBLIC bool +epoxy_has_egl_extension(EGLDisplay dpy, const char *ext) +{ + return epoxy_extension_in_string(eglQueryString(dpy, EGL_EXTENSIONS), ext); +} diff --git a/Engine/lib/epoxy/src/egl/egl_generated_dispatch.c b/Engine/lib/epoxy/src/egl/egl_generated_dispatch.c new file mode 100644 index 0000000000..719f6c2e5c --- /dev/null +++ b/Engine/lib/epoxy/src/egl/egl_generated_dispatch.c @@ -0,0 +1,4206 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/egl.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNEGLBINDAPIPROC epoxy_eglBindAPI; + PFNEGLBINDTEXIMAGEPROC epoxy_eglBindTexImage; + PFNEGLCHOOSECONFIGPROC epoxy_eglChooseConfig; + PFNEGLCLIENTWAITSYNCPROC epoxy_eglClientWaitSync; + PFNEGLCLIENTWAITSYNCKHRPROC epoxy_eglClientWaitSyncKHR; + PFNEGLCLIENTWAITSYNCNVPROC epoxy_eglClientWaitSyncNV; + PFNEGLCOPYBUFFERSPROC epoxy_eglCopyBuffers; + PFNEGLCREATECONTEXTPROC epoxy_eglCreateContext; + PFNEGLCREATEDRMIMAGEMESAPROC epoxy_eglCreateDRMImageMESA; + PFNEGLCREATEFENCESYNCNVPROC epoxy_eglCreateFenceSyncNV; + PFNEGLCREATEIMAGEPROC epoxy_eglCreateImage; + PFNEGLCREATEIMAGEKHRPROC epoxy_eglCreateImageKHR; + PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC epoxy_eglCreatePbufferFromClientBuffer; + PFNEGLCREATEPBUFFERSURFACEPROC epoxy_eglCreatePbufferSurface; + PFNEGLCREATEPIXMAPSURFACEPROC epoxy_eglCreatePixmapSurface; + PFNEGLCREATEPIXMAPSURFACEHIPROC epoxy_eglCreatePixmapSurfaceHI; + PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC epoxy_eglCreatePlatformPixmapSurface; + PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC epoxy_eglCreatePlatformPixmapSurfaceEXT; + PFNEGLCREATEPLATFORMWINDOWSURFACEPROC epoxy_eglCreatePlatformWindowSurface; + PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC epoxy_eglCreatePlatformWindowSurfaceEXT; + PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC epoxy_eglCreateStreamFromFileDescriptorKHR; + PFNEGLCREATESTREAMKHRPROC epoxy_eglCreateStreamKHR; + PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC epoxy_eglCreateStreamProducerSurfaceKHR; + PFNEGLCREATESTREAMSYNCNVPROC epoxy_eglCreateStreamSyncNV; + PFNEGLCREATESYNCPROC epoxy_eglCreateSync; + PFNEGLCREATESYNC64KHRPROC epoxy_eglCreateSync64KHR; + PFNEGLCREATESYNCKHRPROC epoxy_eglCreateSyncKHR; + PFNEGLCREATEWINDOWSURFACEPROC epoxy_eglCreateWindowSurface; + PFNEGLDESTROYCONTEXTPROC epoxy_eglDestroyContext; + PFNEGLDESTROYIMAGEPROC epoxy_eglDestroyImage; + PFNEGLDESTROYIMAGEKHRPROC epoxy_eglDestroyImageKHR; + PFNEGLDESTROYSTREAMKHRPROC epoxy_eglDestroyStreamKHR; + PFNEGLDESTROYSURFACEPROC epoxy_eglDestroySurface; + PFNEGLDESTROYSYNCPROC epoxy_eglDestroySync; + PFNEGLDESTROYSYNCKHRPROC epoxy_eglDestroySyncKHR; + PFNEGLDESTROYSYNCNVPROC epoxy_eglDestroySyncNV; + PFNEGLDUPNATIVEFENCEFDANDROIDPROC epoxy_eglDupNativeFenceFDANDROID; + PFNEGLEXPORTDMABUFIMAGEMESAPROC epoxy_eglExportDMABUFImageMESA; + PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC epoxy_eglExportDMABUFImageQueryMESA; + PFNEGLEXPORTDRMIMAGEMESAPROC epoxy_eglExportDRMImageMESA; + PFNEGLFENCENVPROC epoxy_eglFenceNV; + PFNEGLGETCONFIGATTRIBPROC epoxy_eglGetConfigAttrib; + PFNEGLGETCONFIGSPROC epoxy_eglGetConfigs; + PFNEGLGETCURRENTCONTEXTPROC epoxy_eglGetCurrentContext; + PFNEGLGETCURRENTDISPLAYPROC epoxy_eglGetCurrentDisplay; + PFNEGLGETCURRENTSURFACEPROC epoxy_eglGetCurrentSurface; + PFNEGLGETDISPLAYPROC epoxy_eglGetDisplay; + PFNEGLGETERRORPROC epoxy_eglGetError; + PFNEGLGETOUTPUTLAYERSEXTPROC epoxy_eglGetOutputLayersEXT; + PFNEGLGETOUTPUTPORTSEXTPROC epoxy_eglGetOutputPortsEXT; + PFNEGLGETPLATFORMDISPLAYPROC epoxy_eglGetPlatformDisplay; + PFNEGLGETPLATFORMDISPLAYEXTPROC epoxy_eglGetPlatformDisplayEXT; + PFNEGLGETPROCADDRESSPROC epoxy_eglGetProcAddress; + PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC epoxy_eglGetStreamFileDescriptorKHR; + PFNEGLGETSYNCATTRIBPROC epoxy_eglGetSyncAttrib; + PFNEGLGETSYNCATTRIBKHRPROC epoxy_eglGetSyncAttribKHR; + PFNEGLGETSYNCATTRIBNVPROC epoxy_eglGetSyncAttribNV; + PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC epoxy_eglGetSystemTimeFrequencyNV; + PFNEGLGETSYSTEMTIMENVPROC epoxy_eglGetSystemTimeNV; + PFNEGLINITIALIZEPROC epoxy_eglInitialize; + PFNEGLLOCKSURFACEKHRPROC epoxy_eglLockSurfaceKHR; + PFNEGLMAKECURRENTPROC epoxy_eglMakeCurrent; + PFNEGLOUTPUTLAYERATTRIBEXTPROC epoxy_eglOutputLayerAttribEXT; + PFNEGLOUTPUTPORTATTRIBEXTPROC epoxy_eglOutputPortAttribEXT; + PFNEGLPOSTSUBBUFFERNVPROC epoxy_eglPostSubBufferNV; + PFNEGLQUERYAPIPROC epoxy_eglQueryAPI; + PFNEGLQUERYCONTEXTPROC epoxy_eglQueryContext; + PFNEGLQUERYDEVICEATTRIBEXTPROC epoxy_eglQueryDeviceAttribEXT; + PFNEGLQUERYDEVICESTRINGEXTPROC epoxy_eglQueryDeviceStringEXT; + PFNEGLQUERYDEVICESEXTPROC epoxy_eglQueryDevicesEXT; + PFNEGLQUERYDISPLAYATTRIBEXTPROC epoxy_eglQueryDisplayAttribEXT; + PFNEGLQUERYNATIVEDISPLAYNVPROC epoxy_eglQueryNativeDisplayNV; + PFNEGLQUERYNATIVEPIXMAPNVPROC epoxy_eglQueryNativePixmapNV; + PFNEGLQUERYNATIVEWINDOWNVPROC epoxy_eglQueryNativeWindowNV; + PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC epoxy_eglQueryOutputLayerAttribEXT; + PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC epoxy_eglQueryOutputLayerStringEXT; + PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC epoxy_eglQueryOutputPortAttribEXT; + PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC epoxy_eglQueryOutputPortStringEXT; + PFNEGLQUERYSTREAMKHRPROC epoxy_eglQueryStreamKHR; + PFNEGLQUERYSTREAMTIMEKHRPROC epoxy_eglQueryStreamTimeKHR; + PFNEGLQUERYSTREAMU64KHRPROC epoxy_eglQueryStreamu64KHR; + PFNEGLQUERYSTRINGPROC epoxy_eglQueryString; + PFNEGLQUERYSURFACEPROC epoxy_eglQuerySurface; + PFNEGLQUERYSURFACE64KHRPROC epoxy_eglQuerySurface64KHR; + PFNEGLQUERYSURFACEPOINTERANGLEPROC epoxy_eglQuerySurfacePointerANGLE; + PFNEGLRELEASETEXIMAGEPROC epoxy_eglReleaseTexImage; + PFNEGLRELEASETHREADPROC epoxy_eglReleaseThread; + PFNEGLSETBLOBCACHEFUNCSANDROIDPROC epoxy_eglSetBlobCacheFuncsANDROID; + PFNEGLSETDAMAGEREGIONKHRPROC epoxy_eglSetDamageRegionKHR; + PFNEGLSIGNALSYNCKHRPROC epoxy_eglSignalSyncKHR; + PFNEGLSIGNALSYNCNVPROC epoxy_eglSignalSyncNV; + PFNEGLSTREAMATTRIBKHRPROC epoxy_eglStreamAttribKHR; + PFNEGLSTREAMCONSUMERACQUIREKHRPROC epoxy_eglStreamConsumerAcquireKHR; + PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC epoxy_eglStreamConsumerGLTextureExternalKHR; + PFNEGLSTREAMCONSUMEROUTPUTEXTPROC epoxy_eglStreamConsumerOutputEXT; + PFNEGLSTREAMCONSUMERRELEASEKHRPROC epoxy_eglStreamConsumerReleaseKHR; + PFNEGLSURFACEATTRIBPROC epoxy_eglSurfaceAttrib; + PFNEGLSWAPBUFFERSPROC epoxy_eglSwapBuffers; + PFNEGLSWAPBUFFERSREGION2NOKPROC epoxy_eglSwapBuffersRegion2NOK; + PFNEGLSWAPBUFFERSREGIONNOKPROC epoxy_eglSwapBuffersRegionNOK; + PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC epoxy_eglSwapBuffersWithDamageEXT; + PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC epoxy_eglSwapBuffersWithDamageKHR; + PFNEGLSWAPINTERVALPROC epoxy_eglSwapInterval; + PFNEGLTERMINATEPROC epoxy_eglTerminate; + PFNEGLUNLOCKSURFACEKHRPROC epoxy_eglUnlockSurfaceKHR; + PFNEGLWAITCLIENTPROC epoxy_eglWaitClient; + PFNEGLWAITGLPROC epoxy_eglWaitGL; + PFNEGLWAITNATIVEPROC epoxy_eglWaitNative; + PFNEGLWAITSYNCPROC epoxy_eglWaitSync; + PFNEGLWAITSYNCKHRPROC epoxy_eglWaitSyncKHR; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum egl_provider { + egl_provider_terminator = 0, + EGL_10, + EGL_11, + EGL_12, + EGL_14, + EGL_15, + EGL_extension_EGL_ANDROID_blob_cache, + EGL_extension_EGL_ANDROID_native_fence_sync, + EGL_extension_EGL_ANGLE_query_surface_pointer, + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_enumeration, + EGL_extension_EGL_EXT_device_query, + EGL_extension_EGL_EXT_output_base, + EGL_extension_EGL_EXT_platform_base, + EGL_extension_EGL_EXT_stream_consumer_egloutput, + EGL_extension_EGL_EXT_swap_buffers_with_damage, + EGL_extension_EGL_HI_clientpixmap, + EGL_extension_EGL_KHR_cl_event2, + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + EGL_extension_EGL_KHR_lock_surface3, + EGL_extension_EGL_KHR_lock_surface, + EGL_extension_EGL_KHR_partial_update, + EGL_extension_EGL_KHR_reusable_sync, + EGL_extension_EGL_KHR_stream, + EGL_extension_EGL_KHR_stream_consumer_gltexture, + EGL_extension_EGL_KHR_stream_cross_process_fd, + EGL_extension_EGL_KHR_stream_fifo, + EGL_extension_EGL_KHR_stream_producer_eglsurface, + EGL_extension_EGL_KHR_swap_buffers_with_damage, + EGL_extension_EGL_KHR_wait_sync, + EGL_extension_EGL_MESA_drm_image, + EGL_extension_EGL_MESA_image_dma_buf_export, + EGL_extension_EGL_NOK_swap_region2, + EGL_extension_EGL_NOK_swap_region, + EGL_extension_EGL_NV_native_query, + EGL_extension_EGL_NV_post_sub_buffer, + EGL_extension_EGL_NV_stream_sync, + EGL_extension_EGL_NV_sync, + EGL_extension_EGL_NV_system_time, +} PACKED; + +static const char *enum_string = + "EGL 10\0" + "EGL 11\0" + "EGL 12\0" + "EGL 14\0" + "EGL 15\0" + "EGL extension \"EGL_ANDROID_blob_cache\"\0" + "EGL extension \"EGL_ANDROID_native_fence_sync\"\0" + "EGL extension \"EGL_ANGLE_query_surface_pointer\"\0" + "EGL extension \"EGL_EXT_device_base\"\0" + "EGL extension \"EGL_EXT_device_enumeration\"\0" + "EGL extension \"EGL_EXT_device_query\"\0" + "EGL extension \"EGL_EXT_output_base\"\0" + "EGL extension \"EGL_EXT_platform_base\"\0" + "EGL extension \"EGL_EXT_stream_consumer_egloutput\"\0" + "EGL extension \"EGL_EXT_swap_buffers_with_damage\"\0" + "EGL extension \"EGL_HI_clientpixmap\"\0" + "EGL extension \"EGL_KHR_cl_event2\"\0" + "EGL extension \"EGL_KHR_fence_sync\"\0" + "EGL extension \"EGL_KHR_image\"\0" + "EGL extension \"EGL_KHR_image_base\"\0" + "EGL extension \"EGL_KHR_lock_surface3\"\0" + "EGL extension \"EGL_KHR_lock_surface\"\0" + "EGL extension \"EGL_KHR_partial_update\"\0" + "EGL extension \"EGL_KHR_reusable_sync\"\0" + "EGL extension \"EGL_KHR_stream\"\0" + "EGL extension \"EGL_KHR_stream_consumer_gltexture\"\0" + "EGL extension \"EGL_KHR_stream_cross_process_fd\"\0" + "EGL extension \"EGL_KHR_stream_fifo\"\0" + "EGL extension \"EGL_KHR_stream_producer_eglsurface\"\0" + "EGL extension \"EGL_KHR_swap_buffers_with_damage\"\0" + "EGL extension \"EGL_KHR_wait_sync\"\0" + "EGL extension \"EGL_MESA_drm_image\"\0" + "EGL extension \"EGL_MESA_image_dma_buf_export\"\0" + "EGL extension \"EGL_NOK_swap_region2\"\0" + "EGL extension \"EGL_NOK_swap_region\"\0" + "EGL extension \"EGL_NV_native_query\"\0" + "EGL extension \"EGL_NV_post_sub_buffer\"\0" + "EGL extension \"EGL_NV_stream_sync\"\0" + "EGL extension \"EGL_NV_sync\"\0" + "EGL extension \"EGL_NV_system_time\"\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* egl_provider_terminator, unused */ + 0, /* EGL_10 */ + 7, /* EGL_11 */ + 14, /* EGL_12 */ + 21, /* EGL_14 */ + 28, /* EGL_15 */ + 35, /* EGL_extension_EGL_ANDROID_blob_cache */ + 74, /* EGL_extension_EGL_ANDROID_native_fence_sync */ + 120, /* EGL_extension_EGL_ANGLE_query_surface_pointer */ + 168, /* EGL_extension_EGL_EXT_device_base */ + 204, /* EGL_extension_EGL_EXT_device_enumeration */ + 247, /* EGL_extension_EGL_EXT_device_query */ + 284, /* EGL_extension_EGL_EXT_output_base */ + 320, /* EGL_extension_EGL_EXT_platform_base */ + 358, /* EGL_extension_EGL_EXT_stream_consumer_egloutput */ + 408, /* EGL_extension_EGL_EXT_swap_buffers_with_damage */ + 457, /* EGL_extension_EGL_HI_clientpixmap */ + 493, /* EGL_extension_EGL_KHR_cl_event2 */ + 527, /* EGL_extension_EGL_KHR_fence_sync */ + 562, /* EGL_extension_EGL_KHR_image */ + 592, /* EGL_extension_EGL_KHR_image_base */ + 627, /* EGL_extension_EGL_KHR_lock_surface3 */ + 665, /* EGL_extension_EGL_KHR_lock_surface */ + 702, /* EGL_extension_EGL_KHR_partial_update */ + 741, /* EGL_extension_EGL_KHR_reusable_sync */ + 779, /* EGL_extension_EGL_KHR_stream */ + 810, /* EGL_extension_EGL_KHR_stream_consumer_gltexture */ + 860, /* EGL_extension_EGL_KHR_stream_cross_process_fd */ + 908, /* EGL_extension_EGL_KHR_stream_fifo */ + 944, /* EGL_extension_EGL_KHR_stream_producer_eglsurface */ + 995, /* EGL_extension_EGL_KHR_swap_buffers_with_damage */ + 1044, /* EGL_extension_EGL_KHR_wait_sync */ + 1078, /* EGL_extension_EGL_MESA_drm_image */ + 1113, /* EGL_extension_EGL_MESA_image_dma_buf_export */ + 1159, /* EGL_extension_EGL_NOK_swap_region2 */ + 1196, /* EGL_extension_EGL_NOK_swap_region */ + 1232, /* EGL_extension_EGL_NV_native_query */ + 1268, /* EGL_extension_EGL_NV_post_sub_buffer */ + 1307, /* EGL_extension_EGL_NV_stream_sync */ + 1342, /* EGL_extension_EGL_NV_sync */ + 1370, /* EGL_extension_EGL_NV_system_time */ +}; + +static const char entrypoint_strings[] = { + 'e', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'A', + 'P', + 'I', + 0, // eglBindAPI + 'e', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglBindTexImage + 'e', + 'g', + 'l', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // eglChooseConfig + 'e', + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // eglClientWaitSync + 'e', + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglClientWaitSyncKHR + 'e', + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglClientWaitSyncNV + 'e', + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // eglCopyBuffers + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglCreateContext + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'D', + 'R', + 'M', + 'I', + 'm', + 'a', + 'g', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // eglCreateDRMImageMESA + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglCreateFenceSyncNV + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglCreateImage + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'K', + 'H', + 'R', + 0, // eglCreateImageKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'F', + 'r', + 'o', + 'm', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // eglCreatePbufferFromClientBuffer + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePbufferSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePixmapSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'H', + 'I', + 0, // eglCreatePixmapSurfaceHI + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePlatformPixmapSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // eglCreatePlatformPixmapSurfaceEXT + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreatePlatformWindowSurface + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // eglCreatePlatformWindowSurfaceEXT + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'F', + 'r', + 'o', + 'm', + 'F', + 'i', + 'l', + 'e', + 'D', + 'e', + 's', + 'c', + 'r', + 'i', + 'p', + 't', + 'o', + 'r', + 'K', + 'H', + 'R', + 0, // eglCreateStreamFromFileDescriptorKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'K', + 'H', + 'R', + 0, // eglCreateStreamKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'r', + 'o', + 'd', + 'u', + 'c', + 'e', + 'r', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'K', + 'H', + 'R', + 0, // eglCreateStreamProducerSurfaceKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglCreateStreamSyncNV + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 0, // eglCreateSync + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + '6', + '4', + 'K', + 'H', + 'R', + 0, // eglCreateSync64KHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglCreateSyncKHR + 'e', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglCreateWindowSurface + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglDestroyContext + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglDestroyImage + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'K', + 'H', + 'R', + 0, // eglDestroyImageKHR + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'K', + 'H', + 'R', + 0, // eglDestroyStreamKHR + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglDestroySurface + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'y', + 'n', + 'c', + 0, // eglDestroySync + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglDestroySyncKHR + 'e', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglDestroySyncNV + 'e', + 'g', + 'l', + 'D', + 'u', + 'p', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 'F', + 'D', + 'A', + 'N', + 'D', + 'R', + 'O', + 'I', + 'D', + 0, // eglDupNativeFenceFDANDROID + 'e', + 'g', + 'l', + 'E', + 'x', + 'p', + 'o', + 'r', + 't', + 'D', + 'M', + 'A', + 'B', + 'U', + 'F', + 'I', + 'm', + 'a', + 'g', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // eglExportDMABUFImageMESA + 'e', + 'g', + 'l', + 'E', + 'x', + 'p', + 'o', + 'r', + 't', + 'D', + 'M', + 'A', + 'B', + 'U', + 'F', + 'I', + 'm', + 'a', + 'g', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'E', + 'S', + 'A', + 0, // eglExportDMABUFImageQueryMESA + 'e', + 'g', + 'l', + 'E', + 'x', + 'p', + 'o', + 'r', + 't', + 'D', + 'R', + 'M', + 'I', + 'm', + 'a', + 'g', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // eglExportDRMImageMESA + 'e', + 'g', + 'l', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // eglFenceNV + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // eglGetConfigAttrib + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 's', + 0, // eglGetConfigs + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglGetCurrentContext + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // eglGetCurrentDisplay + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglGetCurrentSurface + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // eglGetDisplay + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'r', + 'r', + 'o', + 'r', + 0, // eglGetError + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // eglGetOutputLayersEXT + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 's', + 'E', + 'X', + 'T', + 0, // eglGetOutputPortsEXT + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // eglGetPlatformDisplay + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'l', + 'a', + 't', + 'f', + 'o', + 'r', + 'm', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // eglGetPlatformDisplayEXT + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // eglGetProcAddress + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'F', + 'i', + 'l', + 'e', + 'D', + 'e', + 's', + 'c', + 'r', + 'i', + 'p', + 't', + 'o', + 'r', + 'K', + 'H', + 'R', + 0, // eglGetStreamFileDescriptorKHR + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // eglGetSyncAttrib + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'K', + 'H', + 'R', + 0, // eglGetSyncAttribKHR + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'N', + 'V', + 0, // eglGetSyncAttribNV + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 's', + 't', + 'e', + 'm', + 'T', + 'i', + 'm', + 'e', + 'F', + 'r', + 'e', + 'q', + 'u', + 'e', + 'n', + 'c', + 'y', + 'N', + 'V', + 0, // eglGetSystemTimeFrequencyNV + 'e', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 's', + 't', + 'e', + 'm', + 'T', + 'i', + 'm', + 'e', + 'N', + 'V', + 0, // eglGetSystemTimeNV + 'e', + 'g', + 'l', + 'I', + 'n', + 'i', + 't', + 'i', + 'a', + 'l', + 'i', + 'z', + 'e', + 0, // eglInitialize + 'e', + 'g', + 'l', + 'L', + 'o', + 'c', + 'k', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'K', + 'H', + 'R', + 0, // eglLockSurfaceKHR + 'e', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // eglMakeCurrent + 'e', + 'g', + 'l', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglOutputLayerAttribEXT + 'e', + 'g', + 'l', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglOutputPortAttribEXT + 'e', + 'g', + 'l', + 'P', + 'o', + 's', + 't', + 'S', + 'u', + 'b', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // eglPostSubBufferNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'P', + 'I', + 0, // eglQueryAPI + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // eglQueryContext + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryDeviceAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // eglQueryDeviceStringEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // eglQueryDevicesEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryDisplayAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'N', + 'V', + 0, // eglQueryNativeDisplayNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'N', + 'V', + 0, // eglQueryNativePixmapNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'N', + 'V', + 0, // eglQueryNativeWindowNV + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryOutputLayerAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // eglQueryOutputLayerStringEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // eglQueryOutputPortAttribEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'o', + 'r', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // eglQueryOutputPortStringEXT + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'K', + 'H', + 'R', + 0, // eglQueryStreamKHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'T', + 'i', + 'm', + 'e', + 'K', + 'H', + 'R', + 0, // eglQueryStreamTimeKHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'u', + '6', + '4', + 'K', + 'H', + 'R', + 0, // eglQueryStreamu64KHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // eglQueryString + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 0, // eglQuerySurface + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + '6', + '4', + 'K', + 'H', + 'R', + 0, // eglQuerySurface64KHR + 'e', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // eglQuerySurfacePointerANGLE + 'e', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // eglReleaseTexImage + 'e', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'h', + 'r', + 'e', + 'a', + 'd', + 0, // eglReleaseThread + 'e', + 'g', + 'l', + 'S', + 'e', + 't', + 'B', + 'l', + 'o', + 'b', + 'C', + 'a', + 'c', + 'h', + 'e', + 'F', + 'u', + 'n', + 'c', + 's', + 'A', + 'N', + 'D', + 'R', + 'O', + 'I', + 'D', + 0, // eglSetBlobCacheFuncsANDROID + 'e', + 'g', + 'l', + 'S', + 'e', + 't', + 'D', + 'a', + 'm', + 'a', + 'g', + 'e', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'K', + 'H', + 'R', + 0, // eglSetDamageRegionKHR + 'e', + 'g', + 'l', + 'S', + 'i', + 'g', + 'n', + 'a', + 'l', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglSignalSyncKHR + 'e', + 'g', + 'l', + 'S', + 'i', + 'g', + 'n', + 'a', + 'l', + 'S', + 'y', + 'n', + 'c', + 'N', + 'V', + 0, // eglSignalSyncNV + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'K', + 'H', + 'R', + 0, // eglStreamAttribKHR + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'A', + 'c', + 'q', + 'u', + 'i', + 'r', + 'e', + 'K', + 'H', + 'R', + 0, // eglStreamConsumerAcquireKHR + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'G', + 'L', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'x', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'K', + 'H', + 'R', + 0, // eglStreamConsumerGLTextureExternalKHR + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'E', + 'X', + 'T', + 0, // eglStreamConsumerOutputEXT + 'e', + 'g', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'C', + 'o', + 'n', + 's', + 'u', + 'm', + 'e', + 'r', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'K', + 'H', + 'R', + 0, // eglStreamConsumerReleaseKHR + 'e', + 'g', + 'l', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // eglSurfaceAttrib + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // eglSwapBuffers + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + '2', + 'N', + 'O', + 'K', + 0, // eglSwapBuffersRegion2NOK + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'N', + 'O', + 'K', + 0, // eglSwapBuffersRegionNOK + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'W', + 'i', + 't', + 'h', + 'D', + 'a', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // eglSwapBuffersWithDamageEXT + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'W', + 'i', + 't', + 'h', + 'D', + 'a', + 'm', + 'a', + 'g', + 'e', + 'K', + 'H', + 'R', + 0, // eglSwapBuffersWithDamageKHR + 'e', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 0, // eglSwapInterval + 'e', + 'g', + 'l', + 'T', + 'e', + 'r', + 'm', + 'i', + 'n', + 'a', + 't', + 'e', + 0, // eglTerminate + 'e', + 'g', + 'l', + 'U', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'K', + 'H', + 'R', + 0, // eglUnlockSurfaceKHR + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 0, // eglWaitClient + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'G', + 'L', + 0, // eglWaitGL + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'N', + 'a', + 't', + 'i', + 'v', + 'e', + 0, // eglWaitNative + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // eglWaitSync + 'e', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'K', + 'H', + 'R', + 0, // eglWaitSyncKHR + 0 }; + +static void *egl_provider_resolver(const char *name, + const enum egl_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != egl_provider_terminator; i++) { + switch (providers[i]) { + case EGL_10: + if (true) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_11: + if (epoxy_conservative_egl_version() >= 11) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_12: + if (epoxy_conservative_egl_version() >= 12) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_14: + if (epoxy_conservative_egl_version() >= 14) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_15: + if (epoxy_conservative_egl_version() >= 15) + return epoxy_egl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_ANDROID_blob_cache: + if (epoxy_conservative_has_egl_extension("EGL_ANDROID_blob_cache")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_ANDROID_native_fence_sync: + if (epoxy_conservative_has_egl_extension("EGL_ANDROID_native_fence_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_ANGLE_query_surface_pointer: + if (epoxy_conservative_has_egl_extension("EGL_ANGLE_query_surface_pointer")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_device_base: + if (epoxy_conservative_has_egl_extension("EGL_EXT_device_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_device_enumeration: + if (epoxy_conservative_has_egl_extension("EGL_EXT_device_enumeration")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_device_query: + if (epoxy_conservative_has_egl_extension("EGL_EXT_device_query")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_output_base: + if (epoxy_conservative_has_egl_extension("EGL_EXT_output_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_platform_base: + if (epoxy_conservative_has_egl_extension("EGL_EXT_platform_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_stream_consumer_egloutput: + if (epoxy_conservative_has_egl_extension("EGL_EXT_stream_consumer_egloutput")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_EXT_swap_buffers_with_damage: + if (epoxy_conservative_has_egl_extension("EGL_EXT_swap_buffers_with_damage")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_HI_clientpixmap: + if (epoxy_conservative_has_egl_extension("EGL_HI_clientpixmap")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_cl_event2: + if (epoxy_conservative_has_egl_extension("EGL_KHR_cl_event2")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_fence_sync: + if (epoxy_conservative_has_egl_extension("EGL_KHR_fence_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_image: + if (epoxy_conservative_has_egl_extension("EGL_KHR_image")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_image_base: + if (epoxy_conservative_has_egl_extension("EGL_KHR_image_base")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_lock_surface3: + if (epoxy_conservative_has_egl_extension("EGL_KHR_lock_surface3")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_lock_surface: + if (epoxy_conservative_has_egl_extension("EGL_KHR_lock_surface")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_partial_update: + if (epoxy_conservative_has_egl_extension("EGL_KHR_partial_update")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_reusable_sync: + if (epoxy_conservative_has_egl_extension("EGL_KHR_reusable_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_consumer_gltexture: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_consumer_gltexture")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_cross_process_fd: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_cross_process_fd")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_fifo: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_fifo")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_stream_producer_eglsurface: + if (epoxy_conservative_has_egl_extension("EGL_KHR_stream_producer_eglsurface")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_swap_buffers_with_damage: + if (epoxy_conservative_has_egl_extension("EGL_KHR_swap_buffers_with_damage")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_KHR_wait_sync: + if (epoxy_conservative_has_egl_extension("EGL_KHR_wait_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_MESA_drm_image: + if (epoxy_conservative_has_egl_extension("EGL_MESA_drm_image")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_MESA_image_dma_buf_export: + if (epoxy_conservative_has_egl_extension("EGL_MESA_image_dma_buf_export")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NOK_swap_region2: + if (epoxy_conservative_has_egl_extension("EGL_NOK_swap_region2")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NOK_swap_region: + if (epoxy_conservative_has_egl_extension("EGL_NOK_swap_region")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_native_query: + if (epoxy_conservative_has_egl_extension("EGL_NV_native_query")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_post_sub_buffer: + if (epoxy_conservative_has_egl_extension("EGL_NV_post_sub_buffer")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_stream_sync: + if (epoxy_conservative_has_egl_extension("EGL_NV_stream_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_sync: + if (epoxy_conservative_has_egl_extension("EGL_NV_sync")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case EGL_extension_EGL_NV_system_time: + if (epoxy_conservative_has_egl_extension("EGL_NV_system_time")) + return eglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case egl_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != egl_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == egl_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +egl_single_resolver(const enum egl_provider provider, const uint32_t entrypoint_offset); + +static void * +egl_single_resolver(const enum egl_provider provider, const uint32_t entrypoint_offset) +{ + const enum egl_provider providers[] = { + provider, + egl_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return egl_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNEGLBINDAPIPROC +epoxy_eglBindAPI_resolver(void) +{ + return egl_single_resolver(EGL_12, 0 /* eglBindAPI */); +} + +static PFNEGLBINDTEXIMAGEPROC +epoxy_eglBindTexImage_resolver(void) +{ + return egl_single_resolver(EGL_11, 11 /* eglBindTexImage */); +} + +static PFNEGLCHOOSECONFIGPROC +epoxy_eglChooseConfig_resolver(void) +{ + return egl_single_resolver(EGL_10, 27 /* eglChooseConfig */); +} + +static PFNEGLCLIENTWAITSYNCPROC +epoxy_eglClientWaitSync_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43 /* "eglClientWaitSync" */, + 61 /* "eglClientWaitSyncKHR" */, + 61 /* "eglClientWaitSyncKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 43 /* "eglClientWaitSync" */, + providers, entrypoints); +} + +static PFNEGLCLIENTWAITSYNCKHRPROC +epoxy_eglClientWaitSyncKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61 /* "eglClientWaitSyncKHR" */, + 61 /* "eglClientWaitSyncKHR" */, + 43 /* "eglClientWaitSync" */, + }; + return egl_provider_resolver(entrypoint_strings + 61 /* "eglClientWaitSyncKHR" */, + providers, entrypoints); +} + +static PFNEGLCLIENTWAITSYNCNVPROC +epoxy_eglClientWaitSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 82 /* eglClientWaitSyncNV */); +} + +static PFNEGLCOPYBUFFERSPROC +epoxy_eglCopyBuffers_resolver(void) +{ + return egl_single_resolver(EGL_10, 102 /* eglCopyBuffers */); +} + +static PFNEGLCREATECONTEXTPROC +epoxy_eglCreateContext_resolver(void) +{ + return egl_single_resolver(EGL_10, 117 /* eglCreateContext */); +} + +static PFNEGLCREATEDRMIMAGEMESAPROC +epoxy_eglCreateDRMImageMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_drm_image, 134 /* eglCreateDRMImageMESA */); +} + +static PFNEGLCREATEFENCESYNCNVPROC +epoxy_eglCreateFenceSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 156 /* eglCreateFenceSyncNV */); +} + +static PFNEGLCREATEIMAGEPROC +epoxy_eglCreateImage_resolver(void) +{ + return egl_single_resolver(EGL_15, 177 /* eglCreateImage */); +} + +static PFNEGLCREATEIMAGEKHRPROC +epoxy_eglCreateImageKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 192 /* "eglCreateImageKHR" */, + 192 /* "eglCreateImageKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 192 /* "eglCreateImageKHR" */, + providers, entrypoints); +} + +static PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC +epoxy_eglCreatePbufferFromClientBuffer_resolver(void) +{ + return egl_single_resolver(EGL_12, 210 /* eglCreatePbufferFromClientBuffer */); +} + +static PFNEGLCREATEPBUFFERSURFACEPROC +epoxy_eglCreatePbufferSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 243 /* eglCreatePbufferSurface */); +} + +static PFNEGLCREATEPIXMAPSURFACEPROC +epoxy_eglCreatePixmapSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 267 /* eglCreatePixmapSurface */); +} + +static PFNEGLCREATEPIXMAPSURFACEHIPROC +epoxy_eglCreatePixmapSurfaceHI_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_HI_clientpixmap, 290 /* eglCreatePixmapSurfaceHI */); +} + +static PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC +epoxy_eglCreatePlatformPixmapSurface_resolver(void) +{ + return egl_single_resolver(EGL_15, 315 /* eglCreatePlatformPixmapSurface */); +} + +static PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC +epoxy_eglCreatePlatformPixmapSurfaceEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_platform_base, 346 /* eglCreatePlatformPixmapSurfaceEXT */); +} + +static PFNEGLCREATEPLATFORMWINDOWSURFACEPROC +epoxy_eglCreatePlatformWindowSurface_resolver(void) +{ + return egl_single_resolver(EGL_15, 380 /* eglCreatePlatformWindowSurface */); +} + +static PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC +epoxy_eglCreatePlatformWindowSurfaceEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_platform_base, 411 /* eglCreatePlatformWindowSurfaceEXT */); +} + +static PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC +epoxy_eglCreateStreamFromFileDescriptorKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_cross_process_fd, 445 /* eglCreateStreamFromFileDescriptorKHR */); +} + +static PFNEGLCREATESTREAMKHRPROC +epoxy_eglCreateStreamKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 482 /* eglCreateStreamKHR */); +} + +static PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC +epoxy_eglCreateStreamProducerSurfaceKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_producer_eglsurface, 501 /* eglCreateStreamProducerSurfaceKHR */); +} + +static PFNEGLCREATESTREAMSYNCNVPROC +epoxy_eglCreateStreamSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_stream_sync, 535 /* eglCreateStreamSyncNV */); +} + +static PFNEGLCREATESYNCPROC +epoxy_eglCreateSync_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_cl_event2, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 557 /* "eglCreateSync" */, + 571 /* "eglCreateSync64KHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 557 /* "eglCreateSync" */, + providers, entrypoints); +} + +static PFNEGLCREATESYNC64KHRPROC +epoxy_eglCreateSync64KHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_cl_event2, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 571 /* "eglCreateSync64KHR" */, + 557 /* "eglCreateSync" */, + }; + return egl_provider_resolver(entrypoint_strings + 571 /* "eglCreateSync64KHR" */, + providers, entrypoints); +} + +static PFNEGLCREATESYNCKHRPROC +epoxy_eglCreateSyncKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 590 /* "eglCreateSyncKHR" */, + 590 /* "eglCreateSyncKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 590 /* "eglCreateSyncKHR" */, + providers, entrypoints); +} + +static PFNEGLCREATEWINDOWSURFACEPROC +epoxy_eglCreateWindowSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 607 /* eglCreateWindowSurface */); +} + +static PFNEGLDESTROYCONTEXTPROC +epoxy_eglDestroyContext_resolver(void) +{ + return egl_single_resolver(EGL_10, 630 /* eglDestroyContext */); +} + +static PFNEGLDESTROYIMAGEPROC +epoxy_eglDestroyImage_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 648 /* "eglDestroyImage" */, + 664 /* "eglDestroyImageKHR" */, + 664 /* "eglDestroyImageKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 648 /* "eglDestroyImage" */, + providers, entrypoints); +} + +static PFNEGLDESTROYIMAGEKHRPROC +epoxy_eglDestroyImageKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_image, + EGL_extension_EGL_KHR_image_base, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 664 /* "eglDestroyImageKHR" */, + 664 /* "eglDestroyImageKHR" */, + 648 /* "eglDestroyImage" */, + }; + return egl_provider_resolver(entrypoint_strings + 664 /* "eglDestroyImageKHR" */, + providers, entrypoints); +} + +static PFNEGLDESTROYSTREAMKHRPROC +epoxy_eglDestroyStreamKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 683 /* eglDestroyStreamKHR */); +} + +static PFNEGLDESTROYSURFACEPROC +epoxy_eglDestroySurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 703 /* eglDestroySurface */); +} + +static PFNEGLDESTROYSYNCPROC +epoxy_eglDestroySync_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_15, + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 721 /* "eglDestroySync" */, + 736 /* "eglDestroySyncKHR" */, + 736 /* "eglDestroySyncKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 721 /* "eglDestroySync" */, + providers, entrypoints); +} + +static PFNEGLDESTROYSYNCKHRPROC +epoxy_eglDestroySyncKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + EGL_15, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 736 /* "eglDestroySyncKHR" */, + 736 /* "eglDestroySyncKHR" */, + 721 /* "eglDestroySync" */, + }; + return egl_provider_resolver(entrypoint_strings + 736 /* "eglDestroySyncKHR" */, + providers, entrypoints); +} + +static PFNEGLDESTROYSYNCNVPROC +epoxy_eglDestroySyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 754 /* eglDestroySyncNV */); +} + +static PFNEGLDUPNATIVEFENCEFDANDROIDPROC +epoxy_eglDupNativeFenceFDANDROID_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_ANDROID_native_fence_sync, 771 /* eglDupNativeFenceFDANDROID */); +} + +static PFNEGLEXPORTDMABUFIMAGEMESAPROC +epoxy_eglExportDMABUFImageMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_image_dma_buf_export, 798 /* eglExportDMABUFImageMESA */); +} + +static PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC +epoxy_eglExportDMABUFImageQueryMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_image_dma_buf_export, 823 /* eglExportDMABUFImageQueryMESA */); +} + +static PFNEGLEXPORTDRMIMAGEMESAPROC +epoxy_eglExportDRMImageMESA_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_MESA_drm_image, 853 /* eglExportDRMImageMESA */); +} + +static PFNEGLFENCENVPROC +epoxy_eglFenceNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 875 /* eglFenceNV */); +} + +static PFNEGLGETCONFIGATTRIBPROC +epoxy_eglGetConfigAttrib_resolver(void) +{ + return egl_single_resolver(EGL_10, 886 /* eglGetConfigAttrib */); +} + +static PFNEGLGETCONFIGSPROC +epoxy_eglGetConfigs_resolver(void) +{ + return egl_single_resolver(EGL_10, 905 /* eglGetConfigs */); +} + +static PFNEGLGETCURRENTCONTEXTPROC +epoxy_eglGetCurrentContext_resolver(void) +{ + return egl_single_resolver(EGL_14, 919 /* eglGetCurrentContext */); +} + +static PFNEGLGETCURRENTDISPLAYPROC +epoxy_eglGetCurrentDisplay_resolver(void) +{ + return egl_single_resolver(EGL_10, 940 /* eglGetCurrentDisplay */); +} + +static PFNEGLGETCURRENTSURFACEPROC +epoxy_eglGetCurrentSurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 961 /* eglGetCurrentSurface */); +} + +static PFNEGLGETDISPLAYPROC +epoxy_eglGetDisplay_resolver(void) +{ + return egl_single_resolver(EGL_10, 982 /* eglGetDisplay */); +} + +static PFNEGLGETERRORPROC +epoxy_eglGetError_resolver(void) +{ + return egl_single_resolver(EGL_10, 996 /* eglGetError */); +} + +static PFNEGLGETOUTPUTLAYERSEXTPROC +epoxy_eglGetOutputLayersEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1008 /* eglGetOutputLayersEXT */); +} + +static PFNEGLGETOUTPUTPORTSEXTPROC +epoxy_eglGetOutputPortsEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1030 /* eglGetOutputPortsEXT */); +} + +static PFNEGLGETPLATFORMDISPLAYPROC +epoxy_eglGetPlatformDisplay_resolver(void) +{ + return egl_single_resolver(EGL_15, 1051 /* eglGetPlatformDisplay */); +} + +static PFNEGLGETPLATFORMDISPLAYEXTPROC +epoxy_eglGetPlatformDisplayEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_platform_base, 1073 /* eglGetPlatformDisplayEXT */); +} + +static PFNEGLGETPROCADDRESSPROC +epoxy_eglGetProcAddress_resolver(void) +{ + return egl_single_resolver(EGL_10, 1098 /* eglGetProcAddress */); +} + +static PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC +epoxy_eglGetStreamFileDescriptorKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_cross_process_fd, 1116 /* eglGetStreamFileDescriptorKHR */); +} + +static PFNEGLGETSYNCATTRIBPROC +epoxy_eglGetSyncAttrib_resolver(void) +{ + return egl_single_resolver(EGL_15, 1146 /* eglGetSyncAttrib */); +} + +static PFNEGLGETSYNCATTRIBKHRPROC +epoxy_eglGetSyncAttribKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_fence_sync, + EGL_extension_EGL_KHR_reusable_sync, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1163 /* "eglGetSyncAttribKHR" */, + 1163 /* "eglGetSyncAttribKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 1163 /* "eglGetSyncAttribKHR" */, + providers, entrypoints); +} + +static PFNEGLGETSYNCATTRIBNVPROC +epoxy_eglGetSyncAttribNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 1183 /* eglGetSyncAttribNV */); +} + +static PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC +epoxy_eglGetSystemTimeFrequencyNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_system_time, 1202 /* eglGetSystemTimeFrequencyNV */); +} + +static PFNEGLGETSYSTEMTIMENVPROC +epoxy_eglGetSystemTimeNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_system_time, 1230 /* eglGetSystemTimeNV */); +} + +static PFNEGLINITIALIZEPROC +epoxy_eglInitialize_resolver(void) +{ + return egl_single_resolver(EGL_10, 1249 /* eglInitialize */); +} + +static PFNEGLLOCKSURFACEKHRPROC +epoxy_eglLockSurfaceKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_lock_surface, + EGL_extension_EGL_KHR_lock_surface3, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1263 /* "eglLockSurfaceKHR" */, + 1263 /* "eglLockSurfaceKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 1263 /* "eglLockSurfaceKHR" */, + providers, entrypoints); +} + +static PFNEGLMAKECURRENTPROC +epoxy_eglMakeCurrent_resolver(void) +{ + return egl_single_resolver(EGL_10, 1281 /* eglMakeCurrent */); +} + +static PFNEGLOUTPUTLAYERATTRIBEXTPROC +epoxy_eglOutputLayerAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1296 /* eglOutputLayerAttribEXT */); +} + +static PFNEGLOUTPUTPORTATTRIBEXTPROC +epoxy_eglOutputPortAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1320 /* eglOutputPortAttribEXT */); +} + +static PFNEGLPOSTSUBBUFFERNVPROC +epoxy_eglPostSubBufferNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_post_sub_buffer, 1343 /* eglPostSubBufferNV */); +} + +static PFNEGLQUERYAPIPROC +epoxy_eglQueryAPI_resolver(void) +{ + return egl_single_resolver(EGL_12, 1362 /* eglQueryAPI */); +} + +static PFNEGLQUERYCONTEXTPROC +epoxy_eglQueryContext_resolver(void) +{ + return egl_single_resolver(EGL_10, 1374 /* eglQueryContext */); +} + +static PFNEGLQUERYDEVICEATTRIBEXTPROC +epoxy_eglQueryDeviceAttribEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_query, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1390 /* "eglQueryDeviceAttribEXT" */, + 1390 /* "eglQueryDeviceAttribEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1390 /* "eglQueryDeviceAttribEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYDEVICESTRINGEXTPROC +epoxy_eglQueryDeviceStringEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_query, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1414 /* "eglQueryDeviceStringEXT" */, + 1414 /* "eglQueryDeviceStringEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1414 /* "eglQueryDeviceStringEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYDEVICESEXTPROC +epoxy_eglQueryDevicesEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_enumeration, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1438 /* "eglQueryDevicesEXT" */, + 1438 /* "eglQueryDevicesEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1438 /* "eglQueryDevicesEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYDISPLAYATTRIBEXTPROC +epoxy_eglQueryDisplayAttribEXT_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_EXT_device_base, + EGL_extension_EGL_EXT_device_query, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1457 /* "eglQueryDisplayAttribEXT" */, + 1457 /* "eglQueryDisplayAttribEXT" */, + }; + return egl_provider_resolver(entrypoint_strings + 1457 /* "eglQueryDisplayAttribEXT" */, + providers, entrypoints); +} + +static PFNEGLQUERYNATIVEDISPLAYNVPROC +epoxy_eglQueryNativeDisplayNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_native_query, 1482 /* eglQueryNativeDisplayNV */); +} + +static PFNEGLQUERYNATIVEPIXMAPNVPROC +epoxy_eglQueryNativePixmapNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_native_query, 1506 /* eglQueryNativePixmapNV */); +} + +static PFNEGLQUERYNATIVEWINDOWNVPROC +epoxy_eglQueryNativeWindowNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_native_query, 1529 /* eglQueryNativeWindowNV */); +} + +static PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC +epoxy_eglQueryOutputLayerAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1552 /* eglQueryOutputLayerAttribEXT */); +} + +static PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC +epoxy_eglQueryOutputLayerStringEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1581 /* eglQueryOutputLayerStringEXT */); +} + +static PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC +epoxy_eglQueryOutputPortAttribEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1610 /* eglQueryOutputPortAttribEXT */); +} + +static PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC +epoxy_eglQueryOutputPortStringEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_output_base, 1638 /* eglQueryOutputPortStringEXT */); +} + +static PFNEGLQUERYSTREAMKHRPROC +epoxy_eglQueryStreamKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 1666 /* eglQueryStreamKHR */); +} + +static PFNEGLQUERYSTREAMTIMEKHRPROC +epoxy_eglQueryStreamTimeKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_fifo, 1684 /* eglQueryStreamTimeKHR */); +} + +static PFNEGLQUERYSTREAMU64KHRPROC +epoxy_eglQueryStreamu64KHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 1706 /* eglQueryStreamu64KHR */); +} + +static PFNEGLQUERYSTRINGPROC +epoxy_eglQueryString_resolver(void) +{ + return egl_single_resolver(EGL_10, 1727 /* eglQueryString */); +} + +static PFNEGLQUERYSURFACEPROC +epoxy_eglQuerySurface_resolver(void) +{ + return egl_single_resolver(EGL_10, 1742 /* eglQuerySurface */); +} + +static PFNEGLQUERYSURFACE64KHRPROC +epoxy_eglQuerySurface64KHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_lock_surface3, 1758 /* eglQuerySurface64KHR */); +} + +static PFNEGLQUERYSURFACEPOINTERANGLEPROC +epoxy_eglQuerySurfacePointerANGLE_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_ANGLE_query_surface_pointer, 1779 /* eglQuerySurfacePointerANGLE */); +} + +static PFNEGLRELEASETEXIMAGEPROC +epoxy_eglReleaseTexImage_resolver(void) +{ + return egl_single_resolver(EGL_11, 1807 /* eglReleaseTexImage */); +} + +static PFNEGLRELEASETHREADPROC +epoxy_eglReleaseThread_resolver(void) +{ + return egl_single_resolver(EGL_12, 1826 /* eglReleaseThread */); +} + +static PFNEGLSETBLOBCACHEFUNCSANDROIDPROC +epoxy_eglSetBlobCacheFuncsANDROID_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_ANDROID_blob_cache, 1843 /* eglSetBlobCacheFuncsANDROID */); +} + +static PFNEGLSETDAMAGEREGIONKHRPROC +epoxy_eglSetDamageRegionKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_partial_update, 1871 /* eglSetDamageRegionKHR */); +} + +static PFNEGLSIGNALSYNCKHRPROC +epoxy_eglSignalSyncKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_reusable_sync, 1893 /* eglSignalSyncKHR */); +} + +static PFNEGLSIGNALSYNCNVPROC +epoxy_eglSignalSyncNV_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NV_sync, 1910 /* eglSignalSyncNV */); +} + +static PFNEGLSTREAMATTRIBKHRPROC +epoxy_eglStreamAttribKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream, 1926 /* eglStreamAttribKHR */); +} + +static PFNEGLSTREAMCONSUMERACQUIREKHRPROC +epoxy_eglStreamConsumerAcquireKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_consumer_gltexture, 1945 /* eglStreamConsumerAcquireKHR */); +} + +static PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC +epoxy_eglStreamConsumerGLTextureExternalKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_consumer_gltexture, 1973 /* eglStreamConsumerGLTextureExternalKHR */); +} + +static PFNEGLSTREAMCONSUMEROUTPUTEXTPROC +epoxy_eglStreamConsumerOutputEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_stream_consumer_egloutput, 2011 /* eglStreamConsumerOutputEXT */); +} + +static PFNEGLSTREAMCONSUMERRELEASEKHRPROC +epoxy_eglStreamConsumerReleaseKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_stream_consumer_gltexture, 2038 /* eglStreamConsumerReleaseKHR */); +} + +static PFNEGLSURFACEATTRIBPROC +epoxy_eglSurfaceAttrib_resolver(void) +{ + return egl_single_resolver(EGL_11, 2066 /* eglSurfaceAttrib */); +} + +static PFNEGLSWAPBUFFERSPROC +epoxy_eglSwapBuffers_resolver(void) +{ + return egl_single_resolver(EGL_10, 2083 /* eglSwapBuffers */); +} + +static PFNEGLSWAPBUFFERSREGION2NOKPROC +epoxy_eglSwapBuffersRegion2NOK_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NOK_swap_region2, 2098 /* eglSwapBuffersRegion2NOK */); +} + +static PFNEGLSWAPBUFFERSREGIONNOKPROC +epoxy_eglSwapBuffersRegionNOK_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_NOK_swap_region, 2123 /* eglSwapBuffersRegionNOK */); +} + +static PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC +epoxy_eglSwapBuffersWithDamageEXT_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_EXT_swap_buffers_with_damage, 2147 /* eglSwapBuffersWithDamageEXT */); +} + +static PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC +epoxy_eglSwapBuffersWithDamageKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_swap_buffers_with_damage, 2175 /* eglSwapBuffersWithDamageKHR */); +} + +static PFNEGLSWAPINTERVALPROC +epoxy_eglSwapInterval_resolver(void) +{ + return egl_single_resolver(EGL_11, 2203 /* eglSwapInterval */); +} + +static PFNEGLTERMINATEPROC +epoxy_eglTerminate_resolver(void) +{ + return egl_single_resolver(EGL_10, 2219 /* eglTerminate */); +} + +static PFNEGLUNLOCKSURFACEKHRPROC +epoxy_eglUnlockSurfaceKHR_resolver(void) +{ + static const enum egl_provider providers[] = { + EGL_extension_EGL_KHR_lock_surface, + EGL_extension_EGL_KHR_lock_surface3, + egl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2232 /* "eglUnlockSurfaceKHR" */, + 2232 /* "eglUnlockSurfaceKHR" */, + }; + return egl_provider_resolver(entrypoint_strings + 2232 /* "eglUnlockSurfaceKHR" */, + providers, entrypoints); +} + +static PFNEGLWAITCLIENTPROC +epoxy_eglWaitClient_resolver(void) +{ + return egl_single_resolver(EGL_12, 2252 /* eglWaitClient */); +} + +static PFNEGLWAITGLPROC +epoxy_eglWaitGL_resolver(void) +{ + return egl_single_resolver(EGL_10, 2266 /* eglWaitGL */); +} + +static PFNEGLWAITNATIVEPROC +epoxy_eglWaitNative_resolver(void) +{ + return egl_single_resolver(EGL_10, 2276 /* eglWaitNative */); +} + +static PFNEGLWAITSYNCPROC +epoxy_eglWaitSync_resolver(void) +{ + return egl_single_resolver(EGL_15, 2290 /* eglWaitSync */); +} + +static PFNEGLWAITSYNCKHRPROC +epoxy_eglWaitSyncKHR_resolver(void) +{ + return egl_single_resolver(EGL_extension_EGL_KHR_wait_sync, 2302 /* eglWaitSyncKHR */); +} + +GEN_THUNKS_RET(EGLBoolean, eglBindAPI, (EGLenum api), (api)) +GEN_THUNKS_RET(EGLBoolean, eglBindTexImage, (EGLDisplay dpy, EGLSurface surface, EGLint buffer), (dpy, surface, buffer)) +GEN_THUNKS_RET(EGLBoolean, eglChooseConfig, (EGLDisplay dpy, const EGLint * attrib_list, EGLConfig * configs, EGLint config_size, EGLint * num_config), (dpy, attrib_list, configs, config_size, num_config)) +GEN_THUNKS_RET(EGLint, eglClientWaitSync, (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout), (dpy, sync, flags, timeout)) +GEN_THUNKS_RET(EGLint, eglClientWaitSyncKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout), (dpy, sync, flags, timeout)) +GEN_THUNKS_RET(EGLint, eglClientWaitSyncNV, (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout), (sync, flags, timeout)) +GEN_THUNKS_RET(EGLBoolean, eglCopyBuffers, (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target), (dpy, surface, target)) +GEN_THUNKS_RET(EGLContext, eglCreateContext, (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint * attrib_list), (dpy, config, share_context, attrib_list)) +GEN_THUNKS_RET(EGLImageKHR, eglCreateDRMImageMESA, (EGLDisplay dpy, const EGLint * attrib_list), (dpy, attrib_list)) +GEN_THUNKS_RET(EGLSyncNV, eglCreateFenceSyncNV, (EGLDisplay dpy, EGLenum condition, const EGLint * attrib_list), (dpy, condition, attrib_list)) +GEN_THUNKS_RET(EGLImage, eglCreateImage, (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib * attrib_list), (dpy, ctx, target, buffer, attrib_list)) +GEN_THUNKS_RET(EGLImageKHR, eglCreateImageKHR, (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint * attrib_list), (dpy, ctx, target, buffer, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePbufferFromClientBuffer, (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint * attrib_list), (dpy, buftype, buffer, config, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePbufferSurface, (EGLDisplay dpy, EGLConfig config, const EGLint * attrib_list), (dpy, config, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePixmapSurface, (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint * attrib_list), (dpy, config, pixmap, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePixmapSurfaceHI, (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI * pixmap), (dpy, config, pixmap)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformPixmapSurface, (EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLAttrib * attrib_list), (dpy, config, native_pixmap, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformPixmapSurfaceEXT, (EGLDisplay dpy, EGLConfig config, void * native_pixmap, const EGLint * attrib_list), (dpy, config, native_pixmap, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformWindowSurface, (EGLDisplay dpy, EGLConfig config, void * native_window, const EGLAttrib * attrib_list), (dpy, config, native_window, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreatePlatformWindowSurfaceEXT, (EGLDisplay dpy, EGLConfig config, void * native_window, const EGLint * attrib_list), (dpy, config, native_window, attrib_list)) +GEN_THUNKS_RET(EGLStreamKHR, eglCreateStreamFromFileDescriptorKHR, (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor), (dpy, file_descriptor)) +GEN_THUNKS_RET(EGLStreamKHR, eglCreateStreamKHR, (EGLDisplay dpy, const EGLint * attrib_list), (dpy, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreateStreamProducerSurfaceKHR, (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint * attrib_list), (dpy, config, stream, attrib_list)) +GEN_THUNKS_RET(EGLSyncKHR, eglCreateStreamSyncNV, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint * attrib_list), (dpy, stream, type, attrib_list)) +GEN_THUNKS_RET(EGLSync, eglCreateSync, (EGLDisplay dpy, EGLenum type, const EGLAttrib * attrib_list), (dpy, type, attrib_list)) +GEN_THUNKS_RET(EGLSyncKHR, eglCreateSync64KHR, (EGLDisplay dpy, EGLenum type, const EGLAttribKHR * attrib_list), (dpy, type, attrib_list)) +GEN_THUNKS_RET(EGLSyncKHR, eglCreateSyncKHR, (EGLDisplay dpy, EGLenum type, const EGLint * attrib_list), (dpy, type, attrib_list)) +GEN_THUNKS_RET(EGLSurface, eglCreateWindowSurface, (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint * attrib_list), (dpy, config, win, attrib_list)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyContext, (EGLDisplay dpy, EGLContext ctx), (dpy, ctx)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyImage, (EGLDisplay dpy, EGLImage image), (dpy, image)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyImageKHR, (EGLDisplay dpy, EGLImageKHR image), (dpy, image)) +GEN_THUNKS_RET(EGLBoolean, eglDestroyStreamKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySurface, (EGLDisplay dpy, EGLSurface surface), (dpy, surface)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySync, (EGLDisplay dpy, EGLSync sync), (dpy, sync)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySyncKHR, (EGLDisplay dpy, EGLSyncKHR sync), (dpy, sync)) +GEN_THUNKS_RET(EGLBoolean, eglDestroySyncNV, (EGLSyncNV sync), (sync)) +GEN_THUNKS_RET(EGLint, eglDupNativeFenceFDANDROID, (EGLDisplay dpy, EGLSyncKHR sync), (dpy, sync)) +GEN_THUNKS_RET(EGLBoolean, eglExportDMABUFImageMESA, (EGLDisplay dpy, EGLImageKHR image, int * fds, EGLint * strides, EGLint * offsets), (dpy, image, fds, strides, offsets)) +GEN_THUNKS_RET(EGLBoolean, eglExportDMABUFImageQueryMESA, (EGLDisplay dpy, EGLImageKHR image, int * fourcc, int * num_planes, EGLuint64KHR * modifiers), (dpy, image, fourcc, num_planes, modifiers)) +GEN_THUNKS_RET(EGLBoolean, eglExportDRMImageMESA, (EGLDisplay dpy, EGLImageKHR image, EGLint * name, EGLint * handle, EGLint * stride), (dpy, image, name, handle, stride)) +GEN_THUNKS_RET(EGLBoolean, eglFenceNV, (EGLSyncNV sync), (sync)) +GEN_THUNKS_RET(EGLBoolean, eglGetConfigAttrib, (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint * value), (dpy, config, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglGetConfigs, (EGLDisplay dpy, EGLConfig * configs, EGLint config_size, EGLint * num_config), (dpy, configs, config_size, num_config)) +GEN_THUNKS_RET(EGLContext, eglGetCurrentContext, (void), ()) +GEN_THUNKS_RET(EGLDisplay, eglGetCurrentDisplay, (void), ()) +GEN_THUNKS_RET(EGLSurface, eglGetCurrentSurface, (EGLint readdraw), (readdraw)) +GEN_THUNKS_RET(EGLDisplay, eglGetDisplay, (EGLNativeDisplayType display_id), (display_id)) +GEN_THUNKS_RET(EGLint, eglGetError, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglGetOutputLayersEXT, (EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputLayerEXT * layers, EGLint max_layers, EGLint * num_layers), (dpy, attrib_list, layers, max_layers, num_layers)) +GEN_THUNKS_RET(EGLBoolean, eglGetOutputPortsEXT, (EGLDisplay dpy, const EGLAttrib * attrib_list, EGLOutputPortEXT * ports, EGLint max_ports, EGLint * num_ports), (dpy, attrib_list, ports, max_ports, num_ports)) +GEN_THUNKS_RET(EGLDisplay, eglGetPlatformDisplay, (EGLenum platform, void * native_display, const EGLAttrib * attrib_list), (platform, native_display, attrib_list)) +GEN_THUNKS_RET(EGLDisplay, eglGetPlatformDisplayEXT, (EGLenum platform, void * native_display, const EGLint * attrib_list), (platform, native_display, attrib_list)) +GEN_THUNKS_RET(__eglMustCastToProperFunctionPointerType, eglGetProcAddress, (const char * procname), (procname)) +GEN_THUNKS_RET(EGLNativeFileDescriptorKHR, eglGetStreamFileDescriptorKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglGetSyncAttrib, (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib * value), (dpy, sync, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglGetSyncAttribKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint * value), (dpy, sync, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglGetSyncAttribNV, (EGLSyncNV sync, EGLint attribute, EGLint * value), (sync, attribute, value)) +GEN_THUNKS_RET(EGLuint64NV, eglGetSystemTimeFrequencyNV, (void), ()) +GEN_THUNKS_RET(EGLuint64NV, eglGetSystemTimeNV, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglInitialize, (EGLDisplay dpy, EGLint * major, EGLint * minor), (dpy, major, minor)) +GEN_THUNKS_RET(EGLBoolean, eglLockSurfaceKHR, (EGLDisplay dpy, EGLSurface surface, const EGLint * attrib_list), (dpy, surface, attrib_list)) +GEN_THUNKS_RET(EGLBoolean, eglMakeCurrent, (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx), (dpy, draw, read, ctx)) +GEN_THUNKS_RET(EGLBoolean, eglOutputLayerAttribEXT, (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value), (dpy, layer, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglOutputPortAttribEXT, (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value), (dpy, port, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglPostSubBufferNV, (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height), (dpy, surface, x, y, width, height)) +GEN_THUNKS_RET(EGLenum, eglQueryAPI, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglQueryContext, (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint * value), (dpy, ctx, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryDeviceAttribEXT, (EGLDeviceEXT device, EGLint attribute, EGLAttrib * value), (device, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryDeviceStringEXT, (EGLDeviceEXT device, EGLint name), (device, name)) +GEN_THUNKS_RET(EGLBoolean, eglQueryDevicesEXT, (EGLint max_devices, EGLDeviceEXT * devices, EGLint * num_devices), (max_devices, devices, num_devices)) +GEN_THUNKS_RET(EGLBoolean, eglQueryDisplayAttribEXT, (EGLDisplay dpy, EGLint attribute, EGLAttrib * value), (dpy, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryNativeDisplayNV, (EGLDisplay dpy, EGLNativeDisplayType * display_id), (dpy, display_id)) +GEN_THUNKS_RET(EGLBoolean, eglQueryNativePixmapNV, (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType * pixmap), (dpy, surf, pixmap)) +GEN_THUNKS_RET(EGLBoolean, eglQueryNativeWindowNV, (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType * window), (dpy, surf, window)) +GEN_THUNKS_RET(EGLBoolean, eglQueryOutputLayerAttribEXT, (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib * value), (dpy, layer, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryOutputLayerStringEXT, (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name), (dpy, layer, name)) +GEN_THUNKS_RET(EGLBoolean, eglQueryOutputPortAttribEXT, (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib * value), (dpy, port, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryOutputPortStringEXT, (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name), (dpy, port, name)) +GEN_THUNKS_RET(EGLBoolean, eglQueryStreamKHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint * value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryStreamTimeKHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR * value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQueryStreamu64KHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR * value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(const char *, eglQueryString, (EGLDisplay dpy, EGLint name), (dpy, name)) +GEN_THUNKS_RET(EGLBoolean, eglQuerySurface, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint * value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQuerySurface64KHR, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR * value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglQuerySurfacePointerANGLE, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void ** value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglReleaseTexImage, (EGLDisplay dpy, EGLSurface surface, EGLint buffer), (dpy, surface, buffer)) +GEN_THUNKS_RET(EGLBoolean, eglReleaseThread, (void), ()) +GEN_THUNKS(eglSetBlobCacheFuncsANDROID, (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get), (dpy, set, get)) +GEN_THUNKS_RET(EGLBoolean, eglSetDamageRegionKHR, (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects), (dpy, surface, rects, n_rects)) +GEN_THUNKS_RET(EGLBoolean, eglSignalSyncKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode), (dpy, sync, mode)) +GEN_THUNKS_RET(EGLBoolean, eglSignalSyncNV, (EGLSyncNV sync, EGLenum mode), (sync, mode)) +GEN_THUNKS_RET(EGLBoolean, eglStreamAttribKHR, (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value), (dpy, stream, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerAcquireKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerGLTextureExternalKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerOutputEXT, (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer), (dpy, stream, layer)) +GEN_THUNKS_RET(EGLBoolean, eglStreamConsumerReleaseKHR, (EGLDisplay dpy, EGLStreamKHR stream), (dpy, stream)) +GEN_THUNKS_RET(EGLBoolean, eglSurfaceAttrib, (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value), (dpy, surface, attribute, value)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffers, (EGLDisplay dpy, EGLSurface surface), (dpy, surface)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersRegion2NOK, (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects), (dpy, surface, numRects, rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersRegionNOK, (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint * rects), (dpy, surface, numRects, rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersWithDamageEXT, (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects), (dpy, surface, rects, n_rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapBuffersWithDamageKHR, (EGLDisplay dpy, EGLSurface surface, EGLint * rects, EGLint n_rects), (dpy, surface, rects, n_rects)) +GEN_THUNKS_RET(EGLBoolean, eglSwapInterval, (EGLDisplay dpy, EGLint interval), (dpy, interval)) +GEN_THUNKS_RET(EGLBoolean, eglTerminate, (EGLDisplay dpy), (dpy)) +GEN_THUNKS_RET(EGLBoolean, eglUnlockSurfaceKHR, (EGLDisplay dpy, EGLSurface surface), (dpy, surface)) +GEN_THUNKS_RET(EGLBoolean, eglWaitClient, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglWaitGL, (void), ()) +GEN_THUNKS_RET(EGLBoolean, eglWaitNative, (EGLint engine), (engine)) +GEN_THUNKS_RET(EGLBoolean, eglWaitSync, (EGLDisplay dpy, EGLSync sync, EGLint flags), (dpy, sync, flags)) +GEN_THUNKS_RET(EGLint, eglWaitSyncKHR, (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags), (dpy, sync, flags)) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_eglBindAPI_dispatch_table_rewrite_ptr, /* eglBindAPI */ + epoxy_eglBindTexImage_dispatch_table_rewrite_ptr, /* eglBindTexImage */ + epoxy_eglChooseConfig_dispatch_table_rewrite_ptr, /* eglChooseConfig */ + epoxy_eglClientWaitSync_dispatch_table_rewrite_ptr, /* eglClientWaitSync */ + epoxy_eglClientWaitSyncKHR_dispatch_table_rewrite_ptr, /* eglClientWaitSyncKHR */ + epoxy_eglClientWaitSyncNV_dispatch_table_rewrite_ptr, /* eglClientWaitSyncNV */ + epoxy_eglCopyBuffers_dispatch_table_rewrite_ptr, /* eglCopyBuffers */ + epoxy_eglCreateContext_dispatch_table_rewrite_ptr, /* eglCreateContext */ + epoxy_eglCreateDRMImageMESA_dispatch_table_rewrite_ptr, /* eglCreateDRMImageMESA */ + epoxy_eglCreateFenceSyncNV_dispatch_table_rewrite_ptr, /* eglCreateFenceSyncNV */ + epoxy_eglCreateImage_dispatch_table_rewrite_ptr, /* eglCreateImage */ + epoxy_eglCreateImageKHR_dispatch_table_rewrite_ptr, /* eglCreateImageKHR */ + epoxy_eglCreatePbufferFromClientBuffer_dispatch_table_rewrite_ptr, /* eglCreatePbufferFromClientBuffer */ + epoxy_eglCreatePbufferSurface_dispatch_table_rewrite_ptr, /* eglCreatePbufferSurface */ + epoxy_eglCreatePixmapSurface_dispatch_table_rewrite_ptr, /* eglCreatePixmapSurface */ + epoxy_eglCreatePixmapSurfaceHI_dispatch_table_rewrite_ptr, /* eglCreatePixmapSurfaceHI */ + epoxy_eglCreatePlatformPixmapSurface_dispatch_table_rewrite_ptr, /* eglCreatePlatformPixmapSurface */ + epoxy_eglCreatePlatformPixmapSurfaceEXT_dispatch_table_rewrite_ptr, /* eglCreatePlatformPixmapSurfaceEXT */ + epoxy_eglCreatePlatformWindowSurface_dispatch_table_rewrite_ptr, /* eglCreatePlatformWindowSurface */ + epoxy_eglCreatePlatformWindowSurfaceEXT_dispatch_table_rewrite_ptr, /* eglCreatePlatformWindowSurfaceEXT */ + epoxy_eglCreateStreamFromFileDescriptorKHR_dispatch_table_rewrite_ptr, /* eglCreateStreamFromFileDescriptorKHR */ + epoxy_eglCreateStreamKHR_dispatch_table_rewrite_ptr, /* eglCreateStreamKHR */ + epoxy_eglCreateStreamProducerSurfaceKHR_dispatch_table_rewrite_ptr, /* eglCreateStreamProducerSurfaceKHR */ + epoxy_eglCreateStreamSyncNV_dispatch_table_rewrite_ptr, /* eglCreateStreamSyncNV */ + epoxy_eglCreateSync_dispatch_table_rewrite_ptr, /* eglCreateSync */ + epoxy_eglCreateSync64KHR_dispatch_table_rewrite_ptr, /* eglCreateSync64KHR */ + epoxy_eglCreateSyncKHR_dispatch_table_rewrite_ptr, /* eglCreateSyncKHR */ + epoxy_eglCreateWindowSurface_dispatch_table_rewrite_ptr, /* eglCreateWindowSurface */ + epoxy_eglDestroyContext_dispatch_table_rewrite_ptr, /* eglDestroyContext */ + epoxy_eglDestroyImage_dispatch_table_rewrite_ptr, /* eglDestroyImage */ + epoxy_eglDestroyImageKHR_dispatch_table_rewrite_ptr, /* eglDestroyImageKHR */ + epoxy_eglDestroyStreamKHR_dispatch_table_rewrite_ptr, /* eglDestroyStreamKHR */ + epoxy_eglDestroySurface_dispatch_table_rewrite_ptr, /* eglDestroySurface */ + epoxy_eglDestroySync_dispatch_table_rewrite_ptr, /* eglDestroySync */ + epoxy_eglDestroySyncKHR_dispatch_table_rewrite_ptr, /* eglDestroySyncKHR */ + epoxy_eglDestroySyncNV_dispatch_table_rewrite_ptr, /* eglDestroySyncNV */ + epoxy_eglDupNativeFenceFDANDROID_dispatch_table_rewrite_ptr, /* eglDupNativeFenceFDANDROID */ + epoxy_eglExportDMABUFImageMESA_dispatch_table_rewrite_ptr, /* eglExportDMABUFImageMESA */ + epoxy_eglExportDMABUFImageQueryMESA_dispatch_table_rewrite_ptr, /* eglExportDMABUFImageQueryMESA */ + epoxy_eglExportDRMImageMESA_dispatch_table_rewrite_ptr, /* eglExportDRMImageMESA */ + epoxy_eglFenceNV_dispatch_table_rewrite_ptr, /* eglFenceNV */ + epoxy_eglGetConfigAttrib_dispatch_table_rewrite_ptr, /* eglGetConfigAttrib */ + epoxy_eglGetConfigs_dispatch_table_rewrite_ptr, /* eglGetConfigs */ + epoxy_eglGetCurrentContext_dispatch_table_rewrite_ptr, /* eglGetCurrentContext */ + epoxy_eglGetCurrentDisplay_dispatch_table_rewrite_ptr, /* eglGetCurrentDisplay */ + epoxy_eglGetCurrentSurface_dispatch_table_rewrite_ptr, /* eglGetCurrentSurface */ + epoxy_eglGetDisplay_dispatch_table_rewrite_ptr, /* eglGetDisplay */ + epoxy_eglGetError_dispatch_table_rewrite_ptr, /* eglGetError */ + epoxy_eglGetOutputLayersEXT_dispatch_table_rewrite_ptr, /* eglGetOutputLayersEXT */ + epoxy_eglGetOutputPortsEXT_dispatch_table_rewrite_ptr, /* eglGetOutputPortsEXT */ + epoxy_eglGetPlatformDisplay_dispatch_table_rewrite_ptr, /* eglGetPlatformDisplay */ + epoxy_eglGetPlatformDisplayEXT_dispatch_table_rewrite_ptr, /* eglGetPlatformDisplayEXT */ + epoxy_eglGetProcAddress_dispatch_table_rewrite_ptr, /* eglGetProcAddress */ + epoxy_eglGetStreamFileDescriptorKHR_dispatch_table_rewrite_ptr, /* eglGetStreamFileDescriptorKHR */ + epoxy_eglGetSyncAttrib_dispatch_table_rewrite_ptr, /* eglGetSyncAttrib */ + epoxy_eglGetSyncAttribKHR_dispatch_table_rewrite_ptr, /* eglGetSyncAttribKHR */ + epoxy_eglGetSyncAttribNV_dispatch_table_rewrite_ptr, /* eglGetSyncAttribNV */ + epoxy_eglGetSystemTimeFrequencyNV_dispatch_table_rewrite_ptr, /* eglGetSystemTimeFrequencyNV */ + epoxy_eglGetSystemTimeNV_dispatch_table_rewrite_ptr, /* eglGetSystemTimeNV */ + epoxy_eglInitialize_dispatch_table_rewrite_ptr, /* eglInitialize */ + epoxy_eglLockSurfaceKHR_dispatch_table_rewrite_ptr, /* eglLockSurfaceKHR */ + epoxy_eglMakeCurrent_dispatch_table_rewrite_ptr, /* eglMakeCurrent */ + epoxy_eglOutputLayerAttribEXT_dispatch_table_rewrite_ptr, /* eglOutputLayerAttribEXT */ + epoxy_eglOutputPortAttribEXT_dispatch_table_rewrite_ptr, /* eglOutputPortAttribEXT */ + epoxy_eglPostSubBufferNV_dispatch_table_rewrite_ptr, /* eglPostSubBufferNV */ + epoxy_eglQueryAPI_dispatch_table_rewrite_ptr, /* eglQueryAPI */ + epoxy_eglQueryContext_dispatch_table_rewrite_ptr, /* eglQueryContext */ + epoxy_eglQueryDeviceAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryDeviceAttribEXT */ + epoxy_eglQueryDeviceStringEXT_dispatch_table_rewrite_ptr, /* eglQueryDeviceStringEXT */ + epoxy_eglQueryDevicesEXT_dispatch_table_rewrite_ptr, /* eglQueryDevicesEXT */ + epoxy_eglQueryDisplayAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryDisplayAttribEXT */ + epoxy_eglQueryNativeDisplayNV_dispatch_table_rewrite_ptr, /* eglQueryNativeDisplayNV */ + epoxy_eglQueryNativePixmapNV_dispatch_table_rewrite_ptr, /* eglQueryNativePixmapNV */ + epoxy_eglQueryNativeWindowNV_dispatch_table_rewrite_ptr, /* eglQueryNativeWindowNV */ + epoxy_eglQueryOutputLayerAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputLayerAttribEXT */ + epoxy_eglQueryOutputLayerStringEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputLayerStringEXT */ + epoxy_eglQueryOutputPortAttribEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputPortAttribEXT */ + epoxy_eglQueryOutputPortStringEXT_dispatch_table_rewrite_ptr, /* eglQueryOutputPortStringEXT */ + epoxy_eglQueryStreamKHR_dispatch_table_rewrite_ptr, /* eglQueryStreamKHR */ + epoxy_eglQueryStreamTimeKHR_dispatch_table_rewrite_ptr, /* eglQueryStreamTimeKHR */ + epoxy_eglQueryStreamu64KHR_dispatch_table_rewrite_ptr, /* eglQueryStreamu64KHR */ + epoxy_eglQueryString_dispatch_table_rewrite_ptr, /* eglQueryString */ + epoxy_eglQuerySurface_dispatch_table_rewrite_ptr, /* eglQuerySurface */ + epoxy_eglQuerySurface64KHR_dispatch_table_rewrite_ptr, /* eglQuerySurface64KHR */ + epoxy_eglQuerySurfacePointerANGLE_dispatch_table_rewrite_ptr, /* eglQuerySurfacePointerANGLE */ + epoxy_eglReleaseTexImage_dispatch_table_rewrite_ptr, /* eglReleaseTexImage */ + epoxy_eglReleaseThread_dispatch_table_rewrite_ptr, /* eglReleaseThread */ + epoxy_eglSetBlobCacheFuncsANDROID_dispatch_table_rewrite_ptr, /* eglSetBlobCacheFuncsANDROID */ + epoxy_eglSetDamageRegionKHR_dispatch_table_rewrite_ptr, /* eglSetDamageRegionKHR */ + epoxy_eglSignalSyncKHR_dispatch_table_rewrite_ptr, /* eglSignalSyncKHR */ + epoxy_eglSignalSyncNV_dispatch_table_rewrite_ptr, /* eglSignalSyncNV */ + epoxy_eglStreamAttribKHR_dispatch_table_rewrite_ptr, /* eglStreamAttribKHR */ + epoxy_eglStreamConsumerAcquireKHR_dispatch_table_rewrite_ptr, /* eglStreamConsumerAcquireKHR */ + epoxy_eglStreamConsumerGLTextureExternalKHR_dispatch_table_rewrite_ptr, /* eglStreamConsumerGLTextureExternalKHR */ + epoxy_eglStreamConsumerOutputEXT_dispatch_table_rewrite_ptr, /* eglStreamConsumerOutputEXT */ + epoxy_eglStreamConsumerReleaseKHR_dispatch_table_rewrite_ptr, /* eglStreamConsumerReleaseKHR */ + epoxy_eglSurfaceAttrib_dispatch_table_rewrite_ptr, /* eglSurfaceAttrib */ + epoxy_eglSwapBuffers_dispatch_table_rewrite_ptr, /* eglSwapBuffers */ + epoxy_eglSwapBuffersRegion2NOK_dispatch_table_rewrite_ptr, /* eglSwapBuffersRegion2NOK */ + epoxy_eglSwapBuffersRegionNOK_dispatch_table_rewrite_ptr, /* eglSwapBuffersRegionNOK */ + epoxy_eglSwapBuffersWithDamageEXT_dispatch_table_rewrite_ptr, /* eglSwapBuffersWithDamageEXT */ + epoxy_eglSwapBuffersWithDamageKHR_dispatch_table_rewrite_ptr, /* eglSwapBuffersWithDamageKHR */ + epoxy_eglSwapInterval_dispatch_table_rewrite_ptr, /* eglSwapInterval */ + epoxy_eglTerminate_dispatch_table_rewrite_ptr, /* eglTerminate */ + epoxy_eglUnlockSurfaceKHR_dispatch_table_rewrite_ptr, /* eglUnlockSurfaceKHR */ + epoxy_eglWaitClient_dispatch_table_rewrite_ptr, /* eglWaitClient */ + epoxy_eglWaitGL_dispatch_table_rewrite_ptr, /* eglWaitGL */ + epoxy_eglWaitNative_dispatch_table_rewrite_ptr, /* eglWaitNative */ + epoxy_eglWaitSync_dispatch_table_rewrite_ptr, /* eglWaitSync */ + epoxy_eglWaitSyncKHR_dispatch_table_rewrite_ptr, /* eglWaitSyncKHR */ +}; + +uint32_t egl_tls_index; +uint32_t egl_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(egl_tls_index); +} + +void +egl_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +egl_switch_to_dispatch_table(void) +{ + epoxy_eglBindAPI = epoxy_eglBindAPI_dispatch_table_thunk; + epoxy_eglBindTexImage = epoxy_eglBindTexImage_dispatch_table_thunk; + epoxy_eglChooseConfig = epoxy_eglChooseConfig_dispatch_table_thunk; + epoxy_eglClientWaitSync = epoxy_eglClientWaitSync_dispatch_table_thunk; + epoxy_eglClientWaitSyncKHR = epoxy_eglClientWaitSyncKHR_dispatch_table_thunk; + epoxy_eglClientWaitSyncNV = epoxy_eglClientWaitSyncNV_dispatch_table_thunk; + epoxy_eglCopyBuffers = epoxy_eglCopyBuffers_dispatch_table_thunk; + epoxy_eglCreateContext = epoxy_eglCreateContext_dispatch_table_thunk; + epoxy_eglCreateDRMImageMESA = epoxy_eglCreateDRMImageMESA_dispatch_table_thunk; + epoxy_eglCreateFenceSyncNV = epoxy_eglCreateFenceSyncNV_dispatch_table_thunk; + epoxy_eglCreateImage = epoxy_eglCreateImage_dispatch_table_thunk; + epoxy_eglCreateImageKHR = epoxy_eglCreateImageKHR_dispatch_table_thunk; + epoxy_eglCreatePbufferFromClientBuffer = epoxy_eglCreatePbufferFromClientBuffer_dispatch_table_thunk; + epoxy_eglCreatePbufferSurface = epoxy_eglCreatePbufferSurface_dispatch_table_thunk; + epoxy_eglCreatePixmapSurface = epoxy_eglCreatePixmapSurface_dispatch_table_thunk; + epoxy_eglCreatePixmapSurfaceHI = epoxy_eglCreatePixmapSurfaceHI_dispatch_table_thunk; + epoxy_eglCreatePlatformPixmapSurface = epoxy_eglCreatePlatformPixmapSurface_dispatch_table_thunk; + epoxy_eglCreatePlatformPixmapSurfaceEXT = epoxy_eglCreatePlatformPixmapSurfaceEXT_dispatch_table_thunk; + epoxy_eglCreatePlatformWindowSurface = epoxy_eglCreatePlatformWindowSurface_dispatch_table_thunk; + epoxy_eglCreatePlatformWindowSurfaceEXT = epoxy_eglCreatePlatformWindowSurfaceEXT_dispatch_table_thunk; + epoxy_eglCreateStreamFromFileDescriptorKHR = epoxy_eglCreateStreamFromFileDescriptorKHR_dispatch_table_thunk; + epoxy_eglCreateStreamKHR = epoxy_eglCreateStreamKHR_dispatch_table_thunk; + epoxy_eglCreateStreamProducerSurfaceKHR = epoxy_eglCreateStreamProducerSurfaceKHR_dispatch_table_thunk; + epoxy_eglCreateStreamSyncNV = epoxy_eglCreateStreamSyncNV_dispatch_table_thunk; + epoxy_eglCreateSync = epoxy_eglCreateSync_dispatch_table_thunk; + epoxy_eglCreateSync64KHR = epoxy_eglCreateSync64KHR_dispatch_table_thunk; + epoxy_eglCreateSyncKHR = epoxy_eglCreateSyncKHR_dispatch_table_thunk; + epoxy_eglCreateWindowSurface = epoxy_eglCreateWindowSurface_dispatch_table_thunk; + epoxy_eglDestroyContext = epoxy_eglDestroyContext_dispatch_table_thunk; + epoxy_eglDestroyImage = epoxy_eglDestroyImage_dispatch_table_thunk; + epoxy_eglDestroyImageKHR = epoxy_eglDestroyImageKHR_dispatch_table_thunk; + epoxy_eglDestroyStreamKHR = epoxy_eglDestroyStreamKHR_dispatch_table_thunk; + epoxy_eglDestroySurface = epoxy_eglDestroySurface_dispatch_table_thunk; + epoxy_eglDestroySync = epoxy_eglDestroySync_dispatch_table_thunk; + epoxy_eglDestroySyncKHR = epoxy_eglDestroySyncKHR_dispatch_table_thunk; + epoxy_eglDestroySyncNV = epoxy_eglDestroySyncNV_dispatch_table_thunk; + epoxy_eglDupNativeFenceFDANDROID = epoxy_eglDupNativeFenceFDANDROID_dispatch_table_thunk; + epoxy_eglExportDMABUFImageMESA = epoxy_eglExportDMABUFImageMESA_dispatch_table_thunk; + epoxy_eglExportDMABUFImageQueryMESA = epoxy_eglExportDMABUFImageQueryMESA_dispatch_table_thunk; + epoxy_eglExportDRMImageMESA = epoxy_eglExportDRMImageMESA_dispatch_table_thunk; + epoxy_eglFenceNV = epoxy_eglFenceNV_dispatch_table_thunk; + epoxy_eglGetConfigAttrib = epoxy_eglGetConfigAttrib_dispatch_table_thunk; + epoxy_eglGetConfigs = epoxy_eglGetConfigs_dispatch_table_thunk; + epoxy_eglGetCurrentContext = epoxy_eglGetCurrentContext_dispatch_table_thunk; + epoxy_eglGetCurrentDisplay = epoxy_eglGetCurrentDisplay_dispatch_table_thunk; + epoxy_eglGetCurrentSurface = epoxy_eglGetCurrentSurface_dispatch_table_thunk; + epoxy_eglGetDisplay = epoxy_eglGetDisplay_dispatch_table_thunk; + epoxy_eglGetError = epoxy_eglGetError_dispatch_table_thunk; + epoxy_eglGetOutputLayersEXT = epoxy_eglGetOutputLayersEXT_dispatch_table_thunk; + epoxy_eglGetOutputPortsEXT = epoxy_eglGetOutputPortsEXT_dispatch_table_thunk; + epoxy_eglGetPlatformDisplay = epoxy_eglGetPlatformDisplay_dispatch_table_thunk; + epoxy_eglGetPlatformDisplayEXT = epoxy_eglGetPlatformDisplayEXT_dispatch_table_thunk; + epoxy_eglGetProcAddress = epoxy_eglGetProcAddress_dispatch_table_thunk; + epoxy_eglGetStreamFileDescriptorKHR = epoxy_eglGetStreamFileDescriptorKHR_dispatch_table_thunk; + epoxy_eglGetSyncAttrib = epoxy_eglGetSyncAttrib_dispatch_table_thunk; + epoxy_eglGetSyncAttribKHR = epoxy_eglGetSyncAttribKHR_dispatch_table_thunk; + epoxy_eglGetSyncAttribNV = epoxy_eglGetSyncAttribNV_dispatch_table_thunk; + epoxy_eglGetSystemTimeFrequencyNV = epoxy_eglGetSystemTimeFrequencyNV_dispatch_table_thunk; + epoxy_eglGetSystemTimeNV = epoxy_eglGetSystemTimeNV_dispatch_table_thunk; + epoxy_eglInitialize = epoxy_eglInitialize_dispatch_table_thunk; + epoxy_eglLockSurfaceKHR = epoxy_eglLockSurfaceKHR_dispatch_table_thunk; + epoxy_eglMakeCurrent = epoxy_eglMakeCurrent_dispatch_table_thunk; + epoxy_eglOutputLayerAttribEXT = epoxy_eglOutputLayerAttribEXT_dispatch_table_thunk; + epoxy_eglOutputPortAttribEXT = epoxy_eglOutputPortAttribEXT_dispatch_table_thunk; + epoxy_eglPostSubBufferNV = epoxy_eglPostSubBufferNV_dispatch_table_thunk; + epoxy_eglQueryAPI = epoxy_eglQueryAPI_dispatch_table_thunk; + epoxy_eglQueryContext = epoxy_eglQueryContext_dispatch_table_thunk; + epoxy_eglQueryDeviceAttribEXT = epoxy_eglQueryDeviceAttribEXT_dispatch_table_thunk; + epoxy_eglQueryDeviceStringEXT = epoxy_eglQueryDeviceStringEXT_dispatch_table_thunk; + epoxy_eglQueryDevicesEXT = epoxy_eglQueryDevicesEXT_dispatch_table_thunk; + epoxy_eglQueryDisplayAttribEXT = epoxy_eglQueryDisplayAttribEXT_dispatch_table_thunk; + epoxy_eglQueryNativeDisplayNV = epoxy_eglQueryNativeDisplayNV_dispatch_table_thunk; + epoxy_eglQueryNativePixmapNV = epoxy_eglQueryNativePixmapNV_dispatch_table_thunk; + epoxy_eglQueryNativeWindowNV = epoxy_eglQueryNativeWindowNV_dispatch_table_thunk; + epoxy_eglQueryOutputLayerAttribEXT = epoxy_eglQueryOutputLayerAttribEXT_dispatch_table_thunk; + epoxy_eglQueryOutputLayerStringEXT = epoxy_eglQueryOutputLayerStringEXT_dispatch_table_thunk; + epoxy_eglQueryOutputPortAttribEXT = epoxy_eglQueryOutputPortAttribEXT_dispatch_table_thunk; + epoxy_eglQueryOutputPortStringEXT = epoxy_eglQueryOutputPortStringEXT_dispatch_table_thunk; + epoxy_eglQueryStreamKHR = epoxy_eglQueryStreamKHR_dispatch_table_thunk; + epoxy_eglQueryStreamTimeKHR = epoxy_eglQueryStreamTimeKHR_dispatch_table_thunk; + epoxy_eglQueryStreamu64KHR = epoxy_eglQueryStreamu64KHR_dispatch_table_thunk; + epoxy_eglQueryString = epoxy_eglQueryString_dispatch_table_thunk; + epoxy_eglQuerySurface = epoxy_eglQuerySurface_dispatch_table_thunk; + epoxy_eglQuerySurface64KHR = epoxy_eglQuerySurface64KHR_dispatch_table_thunk; + epoxy_eglQuerySurfacePointerANGLE = epoxy_eglQuerySurfacePointerANGLE_dispatch_table_thunk; + epoxy_eglReleaseTexImage = epoxy_eglReleaseTexImage_dispatch_table_thunk; + epoxy_eglReleaseThread = epoxy_eglReleaseThread_dispatch_table_thunk; + epoxy_eglSetBlobCacheFuncsANDROID = epoxy_eglSetBlobCacheFuncsANDROID_dispatch_table_thunk; + epoxy_eglSetDamageRegionKHR = epoxy_eglSetDamageRegionKHR_dispatch_table_thunk; + epoxy_eglSignalSyncKHR = epoxy_eglSignalSyncKHR_dispatch_table_thunk; + epoxy_eglSignalSyncNV = epoxy_eglSignalSyncNV_dispatch_table_thunk; + epoxy_eglStreamAttribKHR = epoxy_eglStreamAttribKHR_dispatch_table_thunk; + epoxy_eglStreamConsumerAcquireKHR = epoxy_eglStreamConsumerAcquireKHR_dispatch_table_thunk; + epoxy_eglStreamConsumerGLTextureExternalKHR = epoxy_eglStreamConsumerGLTextureExternalKHR_dispatch_table_thunk; + epoxy_eglStreamConsumerOutputEXT = epoxy_eglStreamConsumerOutputEXT_dispatch_table_thunk; + epoxy_eglStreamConsumerReleaseKHR = epoxy_eglStreamConsumerReleaseKHR_dispatch_table_thunk; + epoxy_eglSurfaceAttrib = epoxy_eglSurfaceAttrib_dispatch_table_thunk; + epoxy_eglSwapBuffers = epoxy_eglSwapBuffers_dispatch_table_thunk; + epoxy_eglSwapBuffersRegion2NOK = epoxy_eglSwapBuffersRegion2NOK_dispatch_table_thunk; + epoxy_eglSwapBuffersRegionNOK = epoxy_eglSwapBuffersRegionNOK_dispatch_table_thunk; + epoxy_eglSwapBuffersWithDamageEXT = epoxy_eglSwapBuffersWithDamageEXT_dispatch_table_thunk; + epoxy_eglSwapBuffersWithDamageKHR = epoxy_eglSwapBuffersWithDamageKHR_dispatch_table_thunk; + epoxy_eglSwapInterval = epoxy_eglSwapInterval_dispatch_table_thunk; + epoxy_eglTerminate = epoxy_eglTerminate_dispatch_table_thunk; + epoxy_eglUnlockSurfaceKHR = epoxy_eglUnlockSurfaceKHR_dispatch_table_thunk; + epoxy_eglWaitClient = epoxy_eglWaitClient_dispatch_table_thunk; + epoxy_eglWaitGL = epoxy_eglWaitGL_dispatch_table_thunk; + epoxy_eglWaitNative = epoxy_eglWaitNative_dispatch_table_thunk; + epoxy_eglWaitSync = epoxy_eglWaitSync_dispatch_table_thunk; + epoxy_eglWaitSyncKHR = epoxy_eglWaitSyncKHR_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNEGLBINDAPIPROC epoxy_eglBindAPI = epoxy_eglBindAPI_global_rewrite_ptr; + +PUBLIC PFNEGLBINDTEXIMAGEPROC epoxy_eglBindTexImage = epoxy_eglBindTexImage_global_rewrite_ptr; + +PUBLIC PFNEGLCHOOSECONFIGPROC epoxy_eglChooseConfig = epoxy_eglChooseConfig_global_rewrite_ptr; + +PUBLIC PFNEGLCLIENTWAITSYNCPROC epoxy_eglClientWaitSync = epoxy_eglClientWaitSync_global_rewrite_ptr; + +PUBLIC PFNEGLCLIENTWAITSYNCKHRPROC epoxy_eglClientWaitSyncKHR = epoxy_eglClientWaitSyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCLIENTWAITSYNCNVPROC epoxy_eglClientWaitSyncNV = epoxy_eglClientWaitSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLCOPYBUFFERSPROC epoxy_eglCopyBuffers = epoxy_eglCopyBuffers_global_rewrite_ptr; + +PUBLIC PFNEGLCREATECONTEXTPROC epoxy_eglCreateContext = epoxy_eglCreateContext_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEDRMIMAGEMESAPROC epoxy_eglCreateDRMImageMESA = epoxy_eglCreateDRMImageMESA_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEFENCESYNCNVPROC epoxy_eglCreateFenceSyncNV = epoxy_eglCreateFenceSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEIMAGEPROC epoxy_eglCreateImage = epoxy_eglCreateImage_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEIMAGEKHRPROC epoxy_eglCreateImageKHR = epoxy_eglCreateImageKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC epoxy_eglCreatePbufferFromClientBuffer = epoxy_eglCreatePbufferFromClientBuffer_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPBUFFERSURFACEPROC epoxy_eglCreatePbufferSurface = epoxy_eglCreatePbufferSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPIXMAPSURFACEPROC epoxy_eglCreatePixmapSurface = epoxy_eglCreatePixmapSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPIXMAPSURFACEHIPROC epoxy_eglCreatePixmapSurfaceHI = epoxy_eglCreatePixmapSurfaceHI_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC epoxy_eglCreatePlatformPixmapSurface = epoxy_eglCreatePlatformPixmapSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC epoxy_eglCreatePlatformPixmapSurfaceEXT = epoxy_eglCreatePlatformPixmapSurfaceEXT_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMWINDOWSURFACEPROC epoxy_eglCreatePlatformWindowSurface = epoxy_eglCreatePlatformWindowSurface_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC epoxy_eglCreatePlatformWindowSurfaceEXT = epoxy_eglCreatePlatformWindowSurfaceEXT_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC epoxy_eglCreateStreamFromFileDescriptorKHR = epoxy_eglCreateStreamFromFileDescriptorKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMKHRPROC epoxy_eglCreateStreamKHR = epoxy_eglCreateStreamKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC epoxy_eglCreateStreamProducerSurfaceKHR = epoxy_eglCreateStreamProducerSurfaceKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESTREAMSYNCNVPROC epoxy_eglCreateStreamSyncNV = epoxy_eglCreateStreamSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESYNCPROC epoxy_eglCreateSync = epoxy_eglCreateSync_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESYNC64KHRPROC epoxy_eglCreateSync64KHR = epoxy_eglCreateSync64KHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATESYNCKHRPROC epoxy_eglCreateSyncKHR = epoxy_eglCreateSyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLCREATEWINDOWSURFACEPROC epoxy_eglCreateWindowSurface = epoxy_eglCreateWindowSurface_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYCONTEXTPROC epoxy_eglDestroyContext = epoxy_eglDestroyContext_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYIMAGEPROC epoxy_eglDestroyImage = epoxy_eglDestroyImage_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYIMAGEKHRPROC epoxy_eglDestroyImageKHR = epoxy_eglDestroyImageKHR_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSTREAMKHRPROC epoxy_eglDestroyStreamKHR = epoxy_eglDestroyStreamKHR_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSURFACEPROC epoxy_eglDestroySurface = epoxy_eglDestroySurface_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSYNCPROC epoxy_eglDestroySync = epoxy_eglDestroySync_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSYNCKHRPROC epoxy_eglDestroySyncKHR = epoxy_eglDestroySyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLDESTROYSYNCNVPROC epoxy_eglDestroySyncNV = epoxy_eglDestroySyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLDUPNATIVEFENCEFDANDROIDPROC epoxy_eglDupNativeFenceFDANDROID = epoxy_eglDupNativeFenceFDANDROID_global_rewrite_ptr; + +PUBLIC PFNEGLEXPORTDMABUFIMAGEMESAPROC epoxy_eglExportDMABUFImageMESA = epoxy_eglExportDMABUFImageMESA_global_rewrite_ptr; + +PUBLIC PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC epoxy_eglExportDMABUFImageQueryMESA = epoxy_eglExportDMABUFImageQueryMESA_global_rewrite_ptr; + +PUBLIC PFNEGLEXPORTDRMIMAGEMESAPROC epoxy_eglExportDRMImageMESA = epoxy_eglExportDRMImageMESA_global_rewrite_ptr; + +PUBLIC PFNEGLFENCENVPROC epoxy_eglFenceNV = epoxy_eglFenceNV_global_rewrite_ptr; + +PUBLIC PFNEGLGETCONFIGATTRIBPROC epoxy_eglGetConfigAttrib = epoxy_eglGetConfigAttrib_global_rewrite_ptr; + +PUBLIC PFNEGLGETCONFIGSPROC epoxy_eglGetConfigs = epoxy_eglGetConfigs_global_rewrite_ptr; + +PUBLIC PFNEGLGETCURRENTCONTEXTPROC epoxy_eglGetCurrentContext = epoxy_eglGetCurrentContext_global_rewrite_ptr; + +PUBLIC PFNEGLGETCURRENTDISPLAYPROC epoxy_eglGetCurrentDisplay = epoxy_eglGetCurrentDisplay_global_rewrite_ptr; + +PUBLIC PFNEGLGETCURRENTSURFACEPROC epoxy_eglGetCurrentSurface = epoxy_eglGetCurrentSurface_global_rewrite_ptr; + +PUBLIC PFNEGLGETDISPLAYPROC epoxy_eglGetDisplay = epoxy_eglGetDisplay_global_rewrite_ptr; + +PUBLIC PFNEGLGETERRORPROC epoxy_eglGetError = epoxy_eglGetError_global_rewrite_ptr; + +PUBLIC PFNEGLGETOUTPUTLAYERSEXTPROC epoxy_eglGetOutputLayersEXT = epoxy_eglGetOutputLayersEXT_global_rewrite_ptr; + +PUBLIC PFNEGLGETOUTPUTPORTSEXTPROC epoxy_eglGetOutputPortsEXT = epoxy_eglGetOutputPortsEXT_global_rewrite_ptr; + +PUBLIC PFNEGLGETPLATFORMDISPLAYPROC epoxy_eglGetPlatformDisplay = epoxy_eglGetPlatformDisplay_global_rewrite_ptr; + +PUBLIC PFNEGLGETPLATFORMDISPLAYEXTPROC epoxy_eglGetPlatformDisplayEXT = epoxy_eglGetPlatformDisplayEXT_global_rewrite_ptr; + +PUBLIC PFNEGLGETPROCADDRESSPROC epoxy_eglGetProcAddress = epoxy_eglGetProcAddress_global_rewrite_ptr; + +PUBLIC PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC epoxy_eglGetStreamFileDescriptorKHR = epoxy_eglGetStreamFileDescriptorKHR_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYNCATTRIBPROC epoxy_eglGetSyncAttrib = epoxy_eglGetSyncAttrib_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYNCATTRIBKHRPROC epoxy_eglGetSyncAttribKHR = epoxy_eglGetSyncAttribKHR_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYNCATTRIBNVPROC epoxy_eglGetSyncAttribNV = epoxy_eglGetSyncAttribNV_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC epoxy_eglGetSystemTimeFrequencyNV = epoxy_eglGetSystemTimeFrequencyNV_global_rewrite_ptr; + +PUBLIC PFNEGLGETSYSTEMTIMENVPROC epoxy_eglGetSystemTimeNV = epoxy_eglGetSystemTimeNV_global_rewrite_ptr; + +PUBLIC PFNEGLINITIALIZEPROC epoxy_eglInitialize = epoxy_eglInitialize_global_rewrite_ptr; + +PUBLIC PFNEGLLOCKSURFACEKHRPROC epoxy_eglLockSurfaceKHR = epoxy_eglLockSurfaceKHR_global_rewrite_ptr; + +PUBLIC PFNEGLMAKECURRENTPROC epoxy_eglMakeCurrent = epoxy_eglMakeCurrent_global_rewrite_ptr; + +PUBLIC PFNEGLOUTPUTLAYERATTRIBEXTPROC epoxy_eglOutputLayerAttribEXT = epoxy_eglOutputLayerAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLOUTPUTPORTATTRIBEXTPROC epoxy_eglOutputPortAttribEXT = epoxy_eglOutputPortAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLPOSTSUBBUFFERNVPROC epoxy_eglPostSubBufferNV = epoxy_eglPostSubBufferNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYAPIPROC epoxy_eglQueryAPI = epoxy_eglQueryAPI_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYCONTEXTPROC epoxy_eglQueryContext = epoxy_eglQueryContext_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDEVICEATTRIBEXTPROC epoxy_eglQueryDeviceAttribEXT = epoxy_eglQueryDeviceAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDEVICESTRINGEXTPROC epoxy_eglQueryDeviceStringEXT = epoxy_eglQueryDeviceStringEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDEVICESEXTPROC epoxy_eglQueryDevicesEXT = epoxy_eglQueryDevicesEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYDISPLAYATTRIBEXTPROC epoxy_eglQueryDisplayAttribEXT = epoxy_eglQueryDisplayAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYNATIVEDISPLAYNVPROC epoxy_eglQueryNativeDisplayNV = epoxy_eglQueryNativeDisplayNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYNATIVEPIXMAPNVPROC epoxy_eglQueryNativePixmapNV = epoxy_eglQueryNativePixmapNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYNATIVEWINDOWNVPROC epoxy_eglQueryNativeWindowNV = epoxy_eglQueryNativeWindowNV_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC epoxy_eglQueryOutputLayerAttribEXT = epoxy_eglQueryOutputLayerAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC epoxy_eglQueryOutputLayerStringEXT = epoxy_eglQueryOutputLayerStringEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC epoxy_eglQueryOutputPortAttribEXT = epoxy_eglQueryOutputPortAttribEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC epoxy_eglQueryOutputPortStringEXT = epoxy_eglQueryOutputPortStringEXT_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTREAMKHRPROC epoxy_eglQueryStreamKHR = epoxy_eglQueryStreamKHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTREAMTIMEKHRPROC epoxy_eglQueryStreamTimeKHR = epoxy_eglQueryStreamTimeKHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTREAMU64KHRPROC epoxy_eglQueryStreamu64KHR = epoxy_eglQueryStreamu64KHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSTRINGPROC epoxy_eglQueryString = epoxy_eglQueryString_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSURFACEPROC epoxy_eglQuerySurface = epoxy_eglQuerySurface_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSURFACE64KHRPROC epoxy_eglQuerySurface64KHR = epoxy_eglQuerySurface64KHR_global_rewrite_ptr; + +PUBLIC PFNEGLQUERYSURFACEPOINTERANGLEPROC epoxy_eglQuerySurfacePointerANGLE = epoxy_eglQuerySurfacePointerANGLE_global_rewrite_ptr; + +PUBLIC PFNEGLRELEASETEXIMAGEPROC epoxy_eglReleaseTexImage = epoxy_eglReleaseTexImage_global_rewrite_ptr; + +PUBLIC PFNEGLRELEASETHREADPROC epoxy_eglReleaseThread = epoxy_eglReleaseThread_global_rewrite_ptr; + +PUBLIC PFNEGLSETBLOBCACHEFUNCSANDROIDPROC epoxy_eglSetBlobCacheFuncsANDROID = epoxy_eglSetBlobCacheFuncsANDROID_global_rewrite_ptr; + +PUBLIC PFNEGLSETDAMAGEREGIONKHRPROC epoxy_eglSetDamageRegionKHR = epoxy_eglSetDamageRegionKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSIGNALSYNCKHRPROC epoxy_eglSignalSyncKHR = epoxy_eglSignalSyncKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSIGNALSYNCNVPROC epoxy_eglSignalSyncNV = epoxy_eglSignalSyncNV_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMATTRIBKHRPROC epoxy_eglStreamAttribKHR = epoxy_eglStreamAttribKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMERACQUIREKHRPROC epoxy_eglStreamConsumerAcquireKHR = epoxy_eglStreamConsumerAcquireKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC epoxy_eglStreamConsumerGLTextureExternalKHR = epoxy_eglStreamConsumerGLTextureExternalKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMEROUTPUTEXTPROC epoxy_eglStreamConsumerOutputEXT = epoxy_eglStreamConsumerOutputEXT_global_rewrite_ptr; + +PUBLIC PFNEGLSTREAMCONSUMERRELEASEKHRPROC epoxy_eglStreamConsumerReleaseKHR = epoxy_eglStreamConsumerReleaseKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSURFACEATTRIBPROC epoxy_eglSurfaceAttrib = epoxy_eglSurfaceAttrib_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSPROC epoxy_eglSwapBuffers = epoxy_eglSwapBuffers_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSREGION2NOKPROC epoxy_eglSwapBuffersRegion2NOK = epoxy_eglSwapBuffersRegion2NOK_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSREGIONNOKPROC epoxy_eglSwapBuffersRegionNOK = epoxy_eglSwapBuffersRegionNOK_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC epoxy_eglSwapBuffersWithDamageEXT = epoxy_eglSwapBuffersWithDamageEXT_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC epoxy_eglSwapBuffersWithDamageKHR = epoxy_eglSwapBuffersWithDamageKHR_global_rewrite_ptr; + +PUBLIC PFNEGLSWAPINTERVALPROC epoxy_eglSwapInterval = epoxy_eglSwapInterval_global_rewrite_ptr; + +PUBLIC PFNEGLTERMINATEPROC epoxy_eglTerminate = epoxy_eglTerminate_global_rewrite_ptr; + +PUBLIC PFNEGLUNLOCKSURFACEKHRPROC epoxy_eglUnlockSurfaceKHR = epoxy_eglUnlockSurfaceKHR_global_rewrite_ptr; + +PUBLIC PFNEGLWAITCLIENTPROC epoxy_eglWaitClient = epoxy_eglWaitClient_global_rewrite_ptr; + +PUBLIC PFNEGLWAITGLPROC epoxy_eglWaitGL = epoxy_eglWaitGL_global_rewrite_ptr; + +PUBLIC PFNEGLWAITNATIVEPROC epoxy_eglWaitNative = epoxy_eglWaitNative_global_rewrite_ptr; + +PUBLIC PFNEGLWAITSYNCPROC epoxy_eglWaitSync = epoxy_eglWaitSync_global_rewrite_ptr; + +PUBLIC PFNEGLWAITSYNCKHRPROC epoxy_eglWaitSyncKHR = epoxy_eglWaitSyncKHR_global_rewrite_ptr; + diff --git a/Engine/lib/epoxy/src/egl/gl_generated_dispatch.c b/Engine/lib/epoxy/src/egl/gl_generated_dispatch.c new file mode 100644 index 0000000000..131090ca8b --- /dev/null +++ b/Engine/lib/epoxy/src/egl/gl_generated_dispatch.c @@ -0,0 +1,124424 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + * + * Copyright (c) 2013-2015 The Khronos Group Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and/or associated documentation files (the + * "Materials"), to deal in the Materials without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Materials, and to + * permit persons to whom the Materials are 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 Materials. + * + * THE MATERIALS ARE 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 + * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. + * + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/gl.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNGLACCUMPROC epoxy_glAccum; + PFNGLACCUMXOESPROC epoxy_glAccumxOES; + PFNGLACTIVEPROGRAMEXTPROC epoxy_glActiveProgramEXT; + PFNGLACTIVESHADERPROGRAMPROC epoxy_glActiveShaderProgram; + PFNGLACTIVESHADERPROGRAMEXTPROC epoxy_glActiveShaderProgramEXT; + PFNGLACTIVESTENCILFACEEXTPROC epoxy_glActiveStencilFaceEXT; + PFNGLACTIVETEXTUREPROC epoxy_glActiveTexture; + PFNGLACTIVETEXTUREARBPROC epoxy_glActiveTextureARB; + PFNGLACTIVEVARYINGNVPROC epoxy_glActiveVaryingNV; + PFNGLALPHAFRAGMENTOP1ATIPROC epoxy_glAlphaFragmentOp1ATI; + PFNGLALPHAFRAGMENTOP2ATIPROC epoxy_glAlphaFragmentOp2ATI; + PFNGLALPHAFRAGMENTOP3ATIPROC epoxy_glAlphaFragmentOp3ATI; + PFNGLALPHAFUNCPROC epoxy_glAlphaFunc; + PFNGLALPHAFUNCQCOMPROC epoxy_glAlphaFuncQCOM; + PFNGLALPHAFUNCXPROC epoxy_glAlphaFuncx; + PFNGLALPHAFUNCXOESPROC epoxy_glAlphaFuncxOES; + PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC epoxy_glApplyFramebufferAttachmentCMAAINTEL; + PFNGLAPPLYTEXTUREEXTPROC epoxy_glApplyTextureEXT; + PFNGLAREPROGRAMSRESIDENTNVPROC epoxy_glAreProgramsResidentNV; + PFNGLARETEXTURESRESIDENTPROC epoxy_glAreTexturesResident; + PFNGLARETEXTURESRESIDENTEXTPROC epoxy_glAreTexturesResidentEXT; + PFNGLARRAYELEMENTPROC epoxy_glArrayElement; + PFNGLARRAYELEMENTEXTPROC epoxy_glArrayElementEXT; + PFNGLARRAYOBJECTATIPROC epoxy_glArrayObjectATI; + PFNGLASYNCMARKERSGIXPROC epoxy_glAsyncMarkerSGIX; + PFNGLATTACHOBJECTARBPROC epoxy_glAttachObjectARB; + PFNGLATTACHSHADERPROC epoxy_glAttachShader; + PFNGLBEGINPROC epoxy_glBegin_unwrapped; + PFNGLBEGINCONDITIONALRENDERPROC epoxy_glBeginConditionalRender; + PFNGLBEGINCONDITIONALRENDERNVPROC epoxy_glBeginConditionalRenderNV; + PFNGLBEGINCONDITIONALRENDERNVXPROC epoxy_glBeginConditionalRenderNVX; + PFNGLBEGINFRAGMENTSHADERATIPROC epoxy_glBeginFragmentShaderATI; + PFNGLBEGINOCCLUSIONQUERYNVPROC epoxy_glBeginOcclusionQueryNV; + PFNGLBEGINPERFMONITORAMDPROC epoxy_glBeginPerfMonitorAMD; + PFNGLBEGINPERFQUERYINTELPROC epoxy_glBeginPerfQueryINTEL; + PFNGLBEGINQUERYPROC epoxy_glBeginQuery; + PFNGLBEGINQUERYARBPROC epoxy_glBeginQueryARB; + PFNGLBEGINQUERYEXTPROC epoxy_glBeginQueryEXT; + PFNGLBEGINQUERYINDEXEDPROC epoxy_glBeginQueryIndexed; + PFNGLBEGINTRANSFORMFEEDBACKPROC epoxy_glBeginTransformFeedback; + PFNGLBEGINTRANSFORMFEEDBACKEXTPROC epoxy_glBeginTransformFeedbackEXT; + PFNGLBEGINTRANSFORMFEEDBACKNVPROC epoxy_glBeginTransformFeedbackNV; + PFNGLBEGINVERTEXSHADEREXTPROC epoxy_glBeginVertexShaderEXT; + PFNGLBEGINVIDEOCAPTURENVPROC epoxy_glBeginVideoCaptureNV; + PFNGLBINDATTRIBLOCATIONPROC epoxy_glBindAttribLocation; + PFNGLBINDATTRIBLOCATIONARBPROC epoxy_glBindAttribLocationARB; + PFNGLBINDBUFFERPROC epoxy_glBindBuffer; + PFNGLBINDBUFFERARBPROC epoxy_glBindBufferARB; + PFNGLBINDBUFFERBASEPROC epoxy_glBindBufferBase; + PFNGLBINDBUFFERBASEEXTPROC epoxy_glBindBufferBaseEXT; + PFNGLBINDBUFFERBASENVPROC epoxy_glBindBufferBaseNV; + PFNGLBINDBUFFEROFFSETEXTPROC epoxy_glBindBufferOffsetEXT; + PFNGLBINDBUFFEROFFSETNVPROC epoxy_glBindBufferOffsetNV; + PFNGLBINDBUFFERRANGEPROC epoxy_glBindBufferRange; + PFNGLBINDBUFFERRANGEEXTPROC epoxy_glBindBufferRangeEXT; + PFNGLBINDBUFFERRANGENVPROC epoxy_glBindBufferRangeNV; + PFNGLBINDBUFFERSBASEPROC epoxy_glBindBuffersBase; + PFNGLBINDBUFFERSRANGEPROC epoxy_glBindBuffersRange; + PFNGLBINDFRAGDATALOCATIONPROC epoxy_glBindFragDataLocation; + PFNGLBINDFRAGDATALOCATIONEXTPROC epoxy_glBindFragDataLocationEXT; + PFNGLBINDFRAGDATALOCATIONINDEXEDPROC epoxy_glBindFragDataLocationIndexed; + PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC epoxy_glBindFragDataLocationIndexedEXT; + PFNGLBINDFRAGMENTSHADERATIPROC epoxy_glBindFragmentShaderATI; + PFNGLBINDFRAMEBUFFERPROC epoxy_glBindFramebuffer; + PFNGLBINDFRAMEBUFFEREXTPROC epoxy_glBindFramebufferEXT; + PFNGLBINDFRAMEBUFFEROESPROC epoxy_glBindFramebufferOES; + PFNGLBINDIMAGETEXTUREPROC epoxy_glBindImageTexture; + PFNGLBINDIMAGETEXTUREEXTPROC epoxy_glBindImageTextureEXT; + PFNGLBINDIMAGETEXTURESPROC epoxy_glBindImageTextures; + PFNGLBINDLIGHTPARAMETEREXTPROC epoxy_glBindLightParameterEXT; + PFNGLBINDMATERIALPARAMETEREXTPROC epoxy_glBindMaterialParameterEXT; + PFNGLBINDMULTITEXTUREEXTPROC epoxy_glBindMultiTextureEXT; + PFNGLBINDPARAMETEREXTPROC epoxy_glBindParameterEXT; + PFNGLBINDPROGRAMARBPROC epoxy_glBindProgramARB; + PFNGLBINDPROGRAMNVPROC epoxy_glBindProgramNV; + PFNGLBINDPROGRAMPIPELINEPROC epoxy_glBindProgramPipeline; + PFNGLBINDPROGRAMPIPELINEEXTPROC epoxy_glBindProgramPipelineEXT; + PFNGLBINDRENDERBUFFERPROC epoxy_glBindRenderbuffer; + PFNGLBINDRENDERBUFFEREXTPROC epoxy_glBindRenderbufferEXT; + PFNGLBINDRENDERBUFFEROESPROC epoxy_glBindRenderbufferOES; + PFNGLBINDSAMPLERPROC epoxy_glBindSampler; + PFNGLBINDSAMPLERSPROC epoxy_glBindSamplers; + PFNGLBINDTEXGENPARAMETEREXTPROC epoxy_glBindTexGenParameterEXT; + PFNGLBINDTEXTUREPROC epoxy_glBindTexture; + PFNGLBINDTEXTUREEXTPROC epoxy_glBindTextureEXT; + PFNGLBINDTEXTUREUNITPROC epoxy_glBindTextureUnit; + PFNGLBINDTEXTUREUNITPARAMETEREXTPROC epoxy_glBindTextureUnitParameterEXT; + PFNGLBINDTEXTURESPROC epoxy_glBindTextures; + PFNGLBINDTRANSFORMFEEDBACKPROC epoxy_glBindTransformFeedback; + PFNGLBINDTRANSFORMFEEDBACKNVPROC epoxy_glBindTransformFeedbackNV; + PFNGLBINDVERTEXARRAYPROC epoxy_glBindVertexArray; + PFNGLBINDVERTEXARRAYAPPLEPROC epoxy_glBindVertexArrayAPPLE; + PFNGLBINDVERTEXARRAYOESPROC epoxy_glBindVertexArrayOES; + PFNGLBINDVERTEXBUFFERPROC epoxy_glBindVertexBuffer; + PFNGLBINDVERTEXBUFFERSPROC epoxy_glBindVertexBuffers; + PFNGLBINDVERTEXSHADEREXTPROC epoxy_glBindVertexShaderEXT; + PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC epoxy_glBindVideoCaptureStreamBufferNV; + PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC epoxy_glBindVideoCaptureStreamTextureNV; + PFNGLBINORMAL3BEXTPROC epoxy_glBinormal3bEXT; + PFNGLBINORMAL3BVEXTPROC epoxy_glBinormal3bvEXT; + PFNGLBINORMAL3DEXTPROC epoxy_glBinormal3dEXT; + PFNGLBINORMAL3DVEXTPROC epoxy_glBinormal3dvEXT; + PFNGLBINORMAL3FEXTPROC epoxy_glBinormal3fEXT; + PFNGLBINORMAL3FVEXTPROC epoxy_glBinormal3fvEXT; + PFNGLBINORMAL3IEXTPROC epoxy_glBinormal3iEXT; + PFNGLBINORMAL3IVEXTPROC epoxy_glBinormal3ivEXT; + PFNGLBINORMAL3SEXTPROC epoxy_glBinormal3sEXT; + PFNGLBINORMAL3SVEXTPROC epoxy_glBinormal3svEXT; + PFNGLBINORMALPOINTEREXTPROC epoxy_glBinormalPointerEXT; + PFNGLBITMAPPROC epoxy_glBitmap; + PFNGLBITMAPXOESPROC epoxy_glBitmapxOES; + PFNGLBLENDBARRIERPROC epoxy_glBlendBarrier; + PFNGLBLENDBARRIERKHRPROC epoxy_glBlendBarrierKHR; + PFNGLBLENDBARRIERNVPROC epoxy_glBlendBarrierNV; + PFNGLBLENDCOLORPROC epoxy_glBlendColor; + PFNGLBLENDCOLOREXTPROC epoxy_glBlendColorEXT; + PFNGLBLENDCOLORXOESPROC epoxy_glBlendColorxOES; + PFNGLBLENDEQUATIONPROC epoxy_glBlendEquation; + PFNGLBLENDEQUATIONEXTPROC epoxy_glBlendEquationEXT; + PFNGLBLENDEQUATIONINDEXEDAMDPROC epoxy_glBlendEquationIndexedAMD; + PFNGLBLENDEQUATIONOESPROC epoxy_glBlendEquationOES; + PFNGLBLENDEQUATIONSEPARATEPROC epoxy_glBlendEquationSeparate; + PFNGLBLENDEQUATIONSEPARATEEXTPROC epoxy_glBlendEquationSeparateEXT; + PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC epoxy_glBlendEquationSeparateIndexedAMD; + PFNGLBLENDEQUATIONSEPARATEOESPROC epoxy_glBlendEquationSeparateOES; + PFNGLBLENDEQUATIONSEPARATEIPROC epoxy_glBlendEquationSeparatei; + PFNGLBLENDEQUATIONSEPARATEIARBPROC epoxy_glBlendEquationSeparateiARB; + PFNGLBLENDEQUATIONSEPARATEIEXTPROC epoxy_glBlendEquationSeparateiEXT; + PFNGLBLENDEQUATIONSEPARATEIOESPROC epoxy_glBlendEquationSeparateiOES; + PFNGLBLENDEQUATIONIPROC epoxy_glBlendEquationi; + PFNGLBLENDEQUATIONIARBPROC epoxy_glBlendEquationiARB; + PFNGLBLENDEQUATIONIEXTPROC epoxy_glBlendEquationiEXT; + PFNGLBLENDEQUATIONIOESPROC epoxy_glBlendEquationiOES; + PFNGLBLENDFUNCPROC epoxy_glBlendFunc; + PFNGLBLENDFUNCINDEXEDAMDPROC epoxy_glBlendFuncIndexedAMD; + PFNGLBLENDFUNCSEPARATEPROC epoxy_glBlendFuncSeparate; + PFNGLBLENDFUNCSEPARATEEXTPROC epoxy_glBlendFuncSeparateEXT; + PFNGLBLENDFUNCSEPARATEINGRPROC epoxy_glBlendFuncSeparateINGR; + PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC epoxy_glBlendFuncSeparateIndexedAMD; + PFNGLBLENDFUNCSEPARATEOESPROC epoxy_glBlendFuncSeparateOES; + PFNGLBLENDFUNCSEPARATEIPROC epoxy_glBlendFuncSeparatei; + PFNGLBLENDFUNCSEPARATEIARBPROC epoxy_glBlendFuncSeparateiARB; + PFNGLBLENDFUNCSEPARATEIEXTPROC epoxy_glBlendFuncSeparateiEXT; + PFNGLBLENDFUNCSEPARATEIOESPROC epoxy_glBlendFuncSeparateiOES; + PFNGLBLENDFUNCIPROC epoxy_glBlendFunci; + PFNGLBLENDFUNCIARBPROC epoxy_glBlendFunciARB; + PFNGLBLENDFUNCIEXTPROC epoxy_glBlendFunciEXT; + PFNGLBLENDFUNCIOESPROC epoxy_glBlendFunciOES; + PFNGLBLENDPARAMETERINVPROC epoxy_glBlendParameteriNV; + PFNGLBLITFRAMEBUFFERPROC epoxy_glBlitFramebuffer; + PFNGLBLITFRAMEBUFFERANGLEPROC epoxy_glBlitFramebufferANGLE; + PFNGLBLITFRAMEBUFFEREXTPROC epoxy_glBlitFramebufferEXT; + PFNGLBLITFRAMEBUFFERNVPROC epoxy_glBlitFramebufferNV; + PFNGLBLITNAMEDFRAMEBUFFERPROC epoxy_glBlitNamedFramebuffer; + PFNGLBUFFERADDRESSRANGENVPROC epoxy_glBufferAddressRangeNV; + PFNGLBUFFERDATAPROC epoxy_glBufferData; + PFNGLBUFFERDATAARBPROC epoxy_glBufferDataARB; + PFNGLBUFFERPAGECOMMITMENTARBPROC epoxy_glBufferPageCommitmentARB; + PFNGLBUFFERPARAMETERIAPPLEPROC epoxy_glBufferParameteriAPPLE; + PFNGLBUFFERSTORAGEPROC epoxy_glBufferStorage; + PFNGLBUFFERSTORAGEEXTPROC epoxy_glBufferStorageEXT; + PFNGLBUFFERSUBDATAPROC epoxy_glBufferSubData; + PFNGLBUFFERSUBDATAARBPROC epoxy_glBufferSubDataARB; + PFNGLCALLCOMMANDLISTNVPROC epoxy_glCallCommandListNV; + PFNGLCALLLISTPROC epoxy_glCallList; + PFNGLCALLLISTSPROC epoxy_glCallLists; + PFNGLCHECKFRAMEBUFFERSTATUSPROC epoxy_glCheckFramebufferStatus; + PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckFramebufferStatusEXT; + PFNGLCHECKFRAMEBUFFERSTATUSOESPROC epoxy_glCheckFramebufferStatusOES; + PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC epoxy_glCheckNamedFramebufferStatus; + PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckNamedFramebufferStatusEXT; + PFNGLCLAMPCOLORPROC epoxy_glClampColor; + PFNGLCLAMPCOLORARBPROC epoxy_glClampColorARB; + PFNGLCLEARPROC epoxy_glClear; + PFNGLCLEARACCUMPROC epoxy_glClearAccum; + PFNGLCLEARACCUMXOESPROC epoxy_glClearAccumxOES; + PFNGLCLEARBUFFERDATAPROC epoxy_glClearBufferData; + PFNGLCLEARBUFFERSUBDATAPROC epoxy_glClearBufferSubData; + PFNGLCLEARBUFFERFIPROC epoxy_glClearBufferfi; + PFNGLCLEARBUFFERFVPROC epoxy_glClearBufferfv; + PFNGLCLEARBUFFERIVPROC epoxy_glClearBufferiv; + PFNGLCLEARBUFFERUIVPROC epoxy_glClearBufferuiv; + PFNGLCLEARCOLORPROC epoxy_glClearColor; + PFNGLCLEARCOLORIIEXTPROC epoxy_glClearColorIiEXT; + PFNGLCLEARCOLORIUIEXTPROC epoxy_glClearColorIuiEXT; + PFNGLCLEARCOLORXPROC epoxy_glClearColorx; + PFNGLCLEARCOLORXOESPROC epoxy_glClearColorxOES; + PFNGLCLEARDEPTHPROC epoxy_glClearDepth; + PFNGLCLEARDEPTHDNVPROC epoxy_glClearDepthdNV; + PFNGLCLEARDEPTHFPROC epoxy_glClearDepthf; + PFNGLCLEARDEPTHFOESPROC epoxy_glClearDepthfOES; + PFNGLCLEARDEPTHXPROC epoxy_glClearDepthx; + PFNGLCLEARDEPTHXOESPROC epoxy_glClearDepthxOES; + PFNGLCLEARINDEXPROC epoxy_glClearIndex; + PFNGLCLEARNAMEDBUFFERDATAPROC epoxy_glClearNamedBufferData; + PFNGLCLEARNAMEDBUFFERDATAEXTPROC epoxy_glClearNamedBufferDataEXT; + PFNGLCLEARNAMEDBUFFERSUBDATAPROC epoxy_glClearNamedBufferSubData; + PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC epoxy_glClearNamedBufferSubDataEXT; + PFNGLCLEARNAMEDFRAMEBUFFERFIPROC epoxy_glClearNamedFramebufferfi; + PFNGLCLEARNAMEDFRAMEBUFFERFVPROC epoxy_glClearNamedFramebufferfv; + PFNGLCLEARNAMEDFRAMEBUFFERIVPROC epoxy_glClearNamedFramebufferiv; + PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC epoxy_glClearNamedFramebufferuiv; + PFNGLCLEARSTENCILPROC epoxy_glClearStencil; + PFNGLCLEARTEXIMAGEPROC epoxy_glClearTexImage; + PFNGLCLEARTEXSUBIMAGEPROC epoxy_glClearTexSubImage; + PFNGLCLIENTACTIVETEXTUREPROC epoxy_glClientActiveTexture; + PFNGLCLIENTACTIVETEXTUREARBPROC epoxy_glClientActiveTextureARB; + PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC epoxy_glClientActiveVertexStreamATI; + PFNGLCLIENTATTRIBDEFAULTEXTPROC epoxy_glClientAttribDefaultEXT; + PFNGLCLIENTWAITSYNCPROC epoxy_glClientWaitSync; + PFNGLCLIENTWAITSYNCAPPLEPROC epoxy_glClientWaitSyncAPPLE; + PFNGLCLIPCONTROLPROC epoxy_glClipControl; + PFNGLCLIPPLANEPROC epoxy_glClipPlane; + PFNGLCLIPPLANEFPROC epoxy_glClipPlanef; + PFNGLCLIPPLANEFIMGPROC epoxy_glClipPlanefIMG; + PFNGLCLIPPLANEFOESPROC epoxy_glClipPlanefOES; + PFNGLCLIPPLANEXPROC epoxy_glClipPlanex; + PFNGLCLIPPLANEXIMGPROC epoxy_glClipPlanexIMG; + PFNGLCLIPPLANEXOESPROC epoxy_glClipPlanexOES; + PFNGLCOLOR3BPROC epoxy_glColor3b; + PFNGLCOLOR3BVPROC epoxy_glColor3bv; + PFNGLCOLOR3DPROC epoxy_glColor3d; + PFNGLCOLOR3DVPROC epoxy_glColor3dv; + PFNGLCOLOR3FPROC epoxy_glColor3f; + PFNGLCOLOR3FVERTEX3FSUNPROC epoxy_glColor3fVertex3fSUN; + PFNGLCOLOR3FVERTEX3FVSUNPROC epoxy_glColor3fVertex3fvSUN; + PFNGLCOLOR3FVPROC epoxy_glColor3fv; + PFNGLCOLOR3HNVPROC epoxy_glColor3hNV; + PFNGLCOLOR3HVNVPROC epoxy_glColor3hvNV; + PFNGLCOLOR3IPROC epoxy_glColor3i; + PFNGLCOLOR3IVPROC epoxy_glColor3iv; + PFNGLCOLOR3SPROC epoxy_glColor3s; + PFNGLCOLOR3SVPROC epoxy_glColor3sv; + PFNGLCOLOR3UBPROC epoxy_glColor3ub; + PFNGLCOLOR3UBVPROC epoxy_glColor3ubv; + PFNGLCOLOR3UIPROC epoxy_glColor3ui; + PFNGLCOLOR3UIVPROC epoxy_glColor3uiv; + PFNGLCOLOR3USPROC epoxy_glColor3us; + PFNGLCOLOR3USVPROC epoxy_glColor3usv; + PFNGLCOLOR3XOESPROC epoxy_glColor3xOES; + PFNGLCOLOR3XVOESPROC epoxy_glColor3xvOES; + PFNGLCOLOR4BPROC epoxy_glColor4b; + PFNGLCOLOR4BVPROC epoxy_glColor4bv; + PFNGLCOLOR4DPROC epoxy_glColor4d; + PFNGLCOLOR4DVPROC epoxy_glColor4dv; + PFNGLCOLOR4FPROC epoxy_glColor4f; + PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glColor4fNormal3fVertex3fSUN; + PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glColor4fNormal3fVertex3fvSUN; + PFNGLCOLOR4FVPROC epoxy_glColor4fv; + PFNGLCOLOR4HNVPROC epoxy_glColor4hNV; + PFNGLCOLOR4HVNVPROC epoxy_glColor4hvNV; + PFNGLCOLOR4IPROC epoxy_glColor4i; + PFNGLCOLOR4IVPROC epoxy_glColor4iv; + PFNGLCOLOR4SPROC epoxy_glColor4s; + PFNGLCOLOR4SVPROC epoxy_glColor4sv; + PFNGLCOLOR4UBPROC epoxy_glColor4ub; + PFNGLCOLOR4UBVERTEX2FSUNPROC epoxy_glColor4ubVertex2fSUN; + PFNGLCOLOR4UBVERTEX2FVSUNPROC epoxy_glColor4ubVertex2fvSUN; + PFNGLCOLOR4UBVERTEX3FSUNPROC epoxy_glColor4ubVertex3fSUN; + PFNGLCOLOR4UBVERTEX3FVSUNPROC epoxy_glColor4ubVertex3fvSUN; + PFNGLCOLOR4UBVPROC epoxy_glColor4ubv; + PFNGLCOLOR4UIPROC epoxy_glColor4ui; + PFNGLCOLOR4UIVPROC epoxy_glColor4uiv; + PFNGLCOLOR4USPROC epoxy_glColor4us; + PFNGLCOLOR4USVPROC epoxy_glColor4usv; + PFNGLCOLOR4XPROC epoxy_glColor4x; + PFNGLCOLOR4XOESPROC epoxy_glColor4xOES; + PFNGLCOLOR4XVOESPROC epoxy_glColor4xvOES; + PFNGLCOLORFORMATNVPROC epoxy_glColorFormatNV; + PFNGLCOLORFRAGMENTOP1ATIPROC epoxy_glColorFragmentOp1ATI; + PFNGLCOLORFRAGMENTOP2ATIPROC epoxy_glColorFragmentOp2ATI; + PFNGLCOLORFRAGMENTOP3ATIPROC epoxy_glColorFragmentOp3ATI; + PFNGLCOLORMASKPROC epoxy_glColorMask; + PFNGLCOLORMASKINDEXEDEXTPROC epoxy_glColorMaskIndexedEXT; + PFNGLCOLORMASKIPROC epoxy_glColorMaski; + PFNGLCOLORMASKIEXTPROC epoxy_glColorMaskiEXT; + PFNGLCOLORMASKIOESPROC epoxy_glColorMaskiOES; + PFNGLCOLORMATERIALPROC epoxy_glColorMaterial; + PFNGLCOLORP3UIPROC epoxy_glColorP3ui; + PFNGLCOLORP3UIVPROC epoxy_glColorP3uiv; + PFNGLCOLORP4UIPROC epoxy_glColorP4ui; + PFNGLCOLORP4UIVPROC epoxy_glColorP4uiv; + PFNGLCOLORPOINTERPROC epoxy_glColorPointer; + PFNGLCOLORPOINTEREXTPROC epoxy_glColorPointerEXT; + PFNGLCOLORPOINTERLISTIBMPROC epoxy_glColorPointerListIBM; + PFNGLCOLORPOINTERVINTELPROC epoxy_glColorPointervINTEL; + PFNGLCOLORSUBTABLEPROC epoxy_glColorSubTable; + PFNGLCOLORSUBTABLEEXTPROC epoxy_glColorSubTableEXT; + PFNGLCOLORTABLEPROC epoxy_glColorTable; + PFNGLCOLORTABLEEXTPROC epoxy_glColorTableEXT; + PFNGLCOLORTABLEPARAMETERFVPROC epoxy_glColorTableParameterfv; + PFNGLCOLORTABLEPARAMETERFVSGIPROC epoxy_glColorTableParameterfvSGI; + PFNGLCOLORTABLEPARAMETERIVPROC epoxy_glColorTableParameteriv; + PFNGLCOLORTABLEPARAMETERIVSGIPROC epoxy_glColorTableParameterivSGI; + PFNGLCOLORTABLESGIPROC epoxy_glColorTableSGI; + PFNGLCOMBINERINPUTNVPROC epoxy_glCombinerInputNV; + PFNGLCOMBINEROUTPUTNVPROC epoxy_glCombinerOutputNV; + PFNGLCOMBINERPARAMETERFNVPROC epoxy_glCombinerParameterfNV; + PFNGLCOMBINERPARAMETERFVNVPROC epoxy_glCombinerParameterfvNV; + PFNGLCOMBINERPARAMETERINVPROC epoxy_glCombinerParameteriNV; + PFNGLCOMBINERPARAMETERIVNVPROC epoxy_glCombinerParameterivNV; + PFNGLCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glCombinerStageParameterfvNV; + PFNGLCOMMANDLISTSEGMENTSNVPROC epoxy_glCommandListSegmentsNV; + PFNGLCOMPILECOMMANDLISTNVPROC epoxy_glCompileCommandListNV; + PFNGLCOMPILESHADERPROC epoxy_glCompileShader; + PFNGLCOMPILESHADERARBPROC epoxy_glCompileShaderARB; + PFNGLCOMPILESHADERINCLUDEARBPROC epoxy_glCompileShaderIncludeARB; + PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC epoxy_glCompressedMultiTexImage1DEXT; + PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC epoxy_glCompressedMultiTexImage2DEXT; + PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC epoxy_glCompressedMultiTexImage3DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC epoxy_glCompressedMultiTexSubImage1DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC epoxy_glCompressedMultiTexSubImage2DEXT; + PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC epoxy_glCompressedMultiTexSubImage3DEXT; + PFNGLCOMPRESSEDTEXIMAGE1DPROC epoxy_glCompressedTexImage1D; + PFNGLCOMPRESSEDTEXIMAGE1DARBPROC epoxy_glCompressedTexImage1DARB; + PFNGLCOMPRESSEDTEXIMAGE2DPROC epoxy_glCompressedTexImage2D; + PFNGLCOMPRESSEDTEXIMAGE2DARBPROC epoxy_glCompressedTexImage2DARB; + PFNGLCOMPRESSEDTEXIMAGE3DPROC epoxy_glCompressedTexImage3D; + PFNGLCOMPRESSEDTEXIMAGE3DARBPROC epoxy_glCompressedTexImage3DARB; + PFNGLCOMPRESSEDTEXIMAGE3DOESPROC epoxy_glCompressedTexImage3DOES; + PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC epoxy_glCompressedTexSubImage1D; + PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC epoxy_glCompressedTexSubImage1DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC epoxy_glCompressedTexSubImage2D; + PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC epoxy_glCompressedTexSubImage2DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC epoxy_glCompressedTexSubImage3D; + PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC epoxy_glCompressedTexSubImage3DARB; + PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC epoxy_glCompressedTexSubImage3DOES; + PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC epoxy_glCompressedTextureImage1DEXT; + PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC epoxy_glCompressedTextureImage2DEXT; + PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC epoxy_glCompressedTextureImage3DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC epoxy_glCompressedTextureSubImage1D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC epoxy_glCompressedTextureSubImage1DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC epoxy_glCompressedTextureSubImage2D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC epoxy_glCompressedTextureSubImage2DEXT; + PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC epoxy_glCompressedTextureSubImage3D; + PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC epoxy_glCompressedTextureSubImage3DEXT; + PFNGLCONSERVATIVERASTERPARAMETERFNVPROC epoxy_glConservativeRasterParameterfNV; + PFNGLCONVOLUTIONFILTER1DPROC epoxy_glConvolutionFilter1D; + PFNGLCONVOLUTIONFILTER1DEXTPROC epoxy_glConvolutionFilter1DEXT; + PFNGLCONVOLUTIONFILTER2DPROC epoxy_glConvolutionFilter2D; + PFNGLCONVOLUTIONFILTER2DEXTPROC epoxy_glConvolutionFilter2DEXT; + PFNGLCONVOLUTIONPARAMETERFPROC epoxy_glConvolutionParameterf; + PFNGLCONVOLUTIONPARAMETERFEXTPROC epoxy_glConvolutionParameterfEXT; + PFNGLCONVOLUTIONPARAMETERFVPROC epoxy_glConvolutionParameterfv; + PFNGLCONVOLUTIONPARAMETERFVEXTPROC epoxy_glConvolutionParameterfvEXT; + PFNGLCONVOLUTIONPARAMETERIPROC epoxy_glConvolutionParameteri; + PFNGLCONVOLUTIONPARAMETERIEXTPROC epoxy_glConvolutionParameteriEXT; + PFNGLCONVOLUTIONPARAMETERIVPROC epoxy_glConvolutionParameteriv; + PFNGLCONVOLUTIONPARAMETERIVEXTPROC epoxy_glConvolutionParameterivEXT; + PFNGLCONVOLUTIONPARAMETERXOESPROC epoxy_glConvolutionParameterxOES; + PFNGLCONVOLUTIONPARAMETERXVOESPROC epoxy_glConvolutionParameterxvOES; + PFNGLCOPYBUFFERSUBDATAPROC epoxy_glCopyBufferSubData; + PFNGLCOPYBUFFERSUBDATANVPROC epoxy_glCopyBufferSubDataNV; + PFNGLCOPYCOLORSUBTABLEPROC epoxy_glCopyColorSubTable; + PFNGLCOPYCOLORSUBTABLEEXTPROC epoxy_glCopyColorSubTableEXT; + PFNGLCOPYCOLORTABLEPROC epoxy_glCopyColorTable; + PFNGLCOPYCOLORTABLESGIPROC epoxy_glCopyColorTableSGI; + PFNGLCOPYCONVOLUTIONFILTER1DPROC epoxy_glCopyConvolutionFilter1D; + PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC epoxy_glCopyConvolutionFilter1DEXT; + PFNGLCOPYCONVOLUTIONFILTER2DPROC epoxy_glCopyConvolutionFilter2D; + PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC epoxy_glCopyConvolutionFilter2DEXT; + PFNGLCOPYIMAGESUBDATAPROC epoxy_glCopyImageSubData; + PFNGLCOPYIMAGESUBDATAEXTPROC epoxy_glCopyImageSubDataEXT; + PFNGLCOPYIMAGESUBDATANVPROC epoxy_glCopyImageSubDataNV; + PFNGLCOPYIMAGESUBDATAOESPROC epoxy_glCopyImageSubDataOES; + PFNGLCOPYMULTITEXIMAGE1DEXTPROC epoxy_glCopyMultiTexImage1DEXT; + PFNGLCOPYMULTITEXIMAGE2DEXTPROC epoxy_glCopyMultiTexImage2DEXT; + PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC epoxy_glCopyMultiTexSubImage1DEXT; + PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC epoxy_glCopyMultiTexSubImage2DEXT; + PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC epoxy_glCopyMultiTexSubImage3DEXT; + PFNGLCOPYNAMEDBUFFERSUBDATAPROC epoxy_glCopyNamedBufferSubData; + PFNGLCOPYPATHNVPROC epoxy_glCopyPathNV; + PFNGLCOPYPIXELSPROC epoxy_glCopyPixels; + PFNGLCOPYTEXIMAGE1DPROC epoxy_glCopyTexImage1D; + PFNGLCOPYTEXIMAGE1DEXTPROC epoxy_glCopyTexImage1DEXT; + PFNGLCOPYTEXIMAGE2DPROC epoxy_glCopyTexImage2D; + PFNGLCOPYTEXIMAGE2DEXTPROC epoxy_glCopyTexImage2DEXT; + PFNGLCOPYTEXSUBIMAGE1DPROC epoxy_glCopyTexSubImage1D; + PFNGLCOPYTEXSUBIMAGE1DEXTPROC epoxy_glCopyTexSubImage1DEXT; + PFNGLCOPYTEXSUBIMAGE2DPROC epoxy_glCopyTexSubImage2D; + PFNGLCOPYTEXSUBIMAGE2DEXTPROC epoxy_glCopyTexSubImage2DEXT; + PFNGLCOPYTEXSUBIMAGE3DPROC epoxy_glCopyTexSubImage3D; + PFNGLCOPYTEXSUBIMAGE3DEXTPROC epoxy_glCopyTexSubImage3DEXT; + PFNGLCOPYTEXSUBIMAGE3DOESPROC epoxy_glCopyTexSubImage3DOES; + PFNGLCOPYTEXTUREIMAGE1DEXTPROC epoxy_glCopyTextureImage1DEXT; + PFNGLCOPYTEXTUREIMAGE2DEXTPROC epoxy_glCopyTextureImage2DEXT; + PFNGLCOPYTEXTURELEVELSAPPLEPROC epoxy_glCopyTextureLevelsAPPLE; + PFNGLCOPYTEXTURESUBIMAGE1DPROC epoxy_glCopyTextureSubImage1D; + PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC epoxy_glCopyTextureSubImage1DEXT; + PFNGLCOPYTEXTURESUBIMAGE2DPROC epoxy_glCopyTextureSubImage2D; + PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC epoxy_glCopyTextureSubImage2DEXT; + PFNGLCOPYTEXTURESUBIMAGE3DPROC epoxy_glCopyTextureSubImage3D; + PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC epoxy_glCopyTextureSubImage3DEXT; + PFNGLCOVERFILLPATHINSTANCEDNVPROC epoxy_glCoverFillPathInstancedNV; + PFNGLCOVERFILLPATHNVPROC epoxy_glCoverFillPathNV; + PFNGLCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glCoverStrokePathInstancedNV; + PFNGLCOVERSTROKEPATHNVPROC epoxy_glCoverStrokePathNV; + PFNGLCOVERAGEMASKNVPROC epoxy_glCoverageMaskNV; + PFNGLCOVERAGEMODULATIONNVPROC epoxy_glCoverageModulationNV; + PFNGLCOVERAGEMODULATIONTABLENVPROC epoxy_glCoverageModulationTableNV; + PFNGLCOVERAGEOPERATIONNVPROC epoxy_glCoverageOperationNV; + PFNGLCREATEBUFFERSPROC epoxy_glCreateBuffers; + PFNGLCREATECOMMANDLISTSNVPROC epoxy_glCreateCommandListsNV; + PFNGLCREATEFRAMEBUFFERSPROC epoxy_glCreateFramebuffers; + PFNGLCREATEPERFQUERYINTELPROC epoxy_glCreatePerfQueryINTEL; + PFNGLCREATEPROGRAMPROC epoxy_glCreateProgram; + PFNGLCREATEPROGRAMOBJECTARBPROC epoxy_glCreateProgramObjectARB; + PFNGLCREATEPROGRAMPIPELINESPROC epoxy_glCreateProgramPipelines; + PFNGLCREATEQUERIESPROC epoxy_glCreateQueries; + PFNGLCREATERENDERBUFFERSPROC epoxy_glCreateRenderbuffers; + PFNGLCREATESAMPLERSPROC epoxy_glCreateSamplers; + PFNGLCREATESHADERPROC epoxy_glCreateShader; + PFNGLCREATESHADEROBJECTARBPROC epoxy_glCreateShaderObjectARB; + PFNGLCREATESHADERPROGRAMEXTPROC epoxy_glCreateShaderProgramEXT; + PFNGLCREATESHADERPROGRAMVPROC epoxy_glCreateShaderProgramv; + PFNGLCREATESHADERPROGRAMVEXTPROC epoxy_glCreateShaderProgramvEXT; + PFNGLCREATESTATESNVPROC epoxy_glCreateStatesNV; + PFNGLCREATESYNCFROMCLEVENTARBPROC epoxy_glCreateSyncFromCLeventARB; + PFNGLCREATETEXTURESPROC epoxy_glCreateTextures; + PFNGLCREATETRANSFORMFEEDBACKSPROC epoxy_glCreateTransformFeedbacks; + PFNGLCREATEVERTEXARRAYSPROC epoxy_glCreateVertexArrays; + PFNGLCULLFACEPROC epoxy_glCullFace; + PFNGLCULLPARAMETERDVEXTPROC epoxy_glCullParameterdvEXT; + PFNGLCULLPARAMETERFVEXTPROC epoxy_glCullParameterfvEXT; + PFNGLCURRENTPALETTEMATRIXARBPROC epoxy_glCurrentPaletteMatrixARB; + PFNGLCURRENTPALETTEMATRIXOESPROC epoxy_glCurrentPaletteMatrixOES; + PFNGLDEBUGMESSAGECALLBACKPROC epoxy_glDebugMessageCallback; + PFNGLDEBUGMESSAGECALLBACKAMDPROC epoxy_glDebugMessageCallbackAMD; + PFNGLDEBUGMESSAGECALLBACKARBPROC epoxy_glDebugMessageCallbackARB; + PFNGLDEBUGMESSAGECALLBACKKHRPROC epoxy_glDebugMessageCallbackKHR; + PFNGLDEBUGMESSAGECONTROLPROC epoxy_glDebugMessageControl; + PFNGLDEBUGMESSAGECONTROLARBPROC epoxy_glDebugMessageControlARB; + PFNGLDEBUGMESSAGECONTROLKHRPROC epoxy_glDebugMessageControlKHR; + PFNGLDEBUGMESSAGEENABLEAMDPROC epoxy_glDebugMessageEnableAMD; + PFNGLDEBUGMESSAGEINSERTPROC epoxy_glDebugMessageInsert; + PFNGLDEBUGMESSAGEINSERTAMDPROC epoxy_glDebugMessageInsertAMD; + PFNGLDEBUGMESSAGEINSERTARBPROC epoxy_glDebugMessageInsertARB; + PFNGLDEBUGMESSAGEINSERTKHRPROC epoxy_glDebugMessageInsertKHR; + PFNGLDEFORMSGIXPROC epoxy_glDeformSGIX; + PFNGLDEFORMATIONMAP3DSGIXPROC epoxy_glDeformationMap3dSGIX; + PFNGLDEFORMATIONMAP3FSGIXPROC epoxy_glDeformationMap3fSGIX; + PFNGLDELETEASYNCMARKERSSGIXPROC epoxy_glDeleteAsyncMarkersSGIX; + PFNGLDELETEBUFFERSPROC epoxy_glDeleteBuffers; + PFNGLDELETEBUFFERSARBPROC epoxy_glDeleteBuffersARB; + PFNGLDELETECOMMANDLISTSNVPROC epoxy_glDeleteCommandListsNV; + PFNGLDELETEFENCESAPPLEPROC epoxy_glDeleteFencesAPPLE; + PFNGLDELETEFENCESNVPROC epoxy_glDeleteFencesNV; + PFNGLDELETEFRAGMENTSHADERATIPROC epoxy_glDeleteFragmentShaderATI; + PFNGLDELETEFRAMEBUFFERSPROC epoxy_glDeleteFramebuffers; + PFNGLDELETEFRAMEBUFFERSEXTPROC epoxy_glDeleteFramebuffersEXT; + PFNGLDELETEFRAMEBUFFERSOESPROC epoxy_glDeleteFramebuffersOES; + PFNGLDELETELISTSPROC epoxy_glDeleteLists; + PFNGLDELETENAMEDSTRINGARBPROC epoxy_glDeleteNamedStringARB; + PFNGLDELETENAMESAMDPROC epoxy_glDeleteNamesAMD; + PFNGLDELETEOBJECTARBPROC epoxy_glDeleteObjectARB; + PFNGLDELETEOCCLUSIONQUERIESNVPROC epoxy_glDeleteOcclusionQueriesNV; + PFNGLDELETEPATHSNVPROC epoxy_glDeletePathsNV; + PFNGLDELETEPERFMONITORSAMDPROC epoxy_glDeletePerfMonitorsAMD; + PFNGLDELETEPERFQUERYINTELPROC epoxy_glDeletePerfQueryINTEL; + PFNGLDELETEPROGRAMPROC epoxy_glDeleteProgram; + PFNGLDELETEPROGRAMPIPELINESPROC epoxy_glDeleteProgramPipelines; + PFNGLDELETEPROGRAMPIPELINESEXTPROC epoxy_glDeleteProgramPipelinesEXT; + PFNGLDELETEPROGRAMSARBPROC epoxy_glDeleteProgramsARB; + PFNGLDELETEPROGRAMSNVPROC epoxy_glDeleteProgramsNV; + PFNGLDELETEQUERIESPROC epoxy_glDeleteQueries; + PFNGLDELETEQUERIESARBPROC epoxy_glDeleteQueriesARB; + PFNGLDELETEQUERIESEXTPROC epoxy_glDeleteQueriesEXT; + PFNGLDELETERENDERBUFFERSPROC epoxy_glDeleteRenderbuffers; + PFNGLDELETERENDERBUFFERSEXTPROC epoxy_glDeleteRenderbuffersEXT; + PFNGLDELETERENDERBUFFERSOESPROC epoxy_glDeleteRenderbuffersOES; + PFNGLDELETESAMPLERSPROC epoxy_glDeleteSamplers; + PFNGLDELETESHADERPROC epoxy_glDeleteShader; + PFNGLDELETESTATESNVPROC epoxy_glDeleteStatesNV; + PFNGLDELETESYNCPROC epoxy_glDeleteSync; + PFNGLDELETESYNCAPPLEPROC epoxy_glDeleteSyncAPPLE; + PFNGLDELETETEXTURESPROC epoxy_glDeleteTextures; + PFNGLDELETETEXTURESEXTPROC epoxy_glDeleteTexturesEXT; + PFNGLDELETETRANSFORMFEEDBACKSPROC epoxy_glDeleteTransformFeedbacks; + PFNGLDELETETRANSFORMFEEDBACKSNVPROC epoxy_glDeleteTransformFeedbacksNV; + PFNGLDELETEVERTEXARRAYSPROC epoxy_glDeleteVertexArrays; + PFNGLDELETEVERTEXARRAYSAPPLEPROC epoxy_glDeleteVertexArraysAPPLE; + PFNGLDELETEVERTEXARRAYSOESPROC epoxy_glDeleteVertexArraysOES; + PFNGLDELETEVERTEXSHADEREXTPROC epoxy_glDeleteVertexShaderEXT; + PFNGLDEPTHBOUNDSEXTPROC epoxy_glDepthBoundsEXT; + PFNGLDEPTHBOUNDSDNVPROC epoxy_glDepthBoundsdNV; + PFNGLDEPTHFUNCPROC epoxy_glDepthFunc; + PFNGLDEPTHMASKPROC epoxy_glDepthMask; + PFNGLDEPTHRANGEPROC epoxy_glDepthRange; + PFNGLDEPTHRANGEARRAYFVNVPROC epoxy_glDepthRangeArrayfvNV; + PFNGLDEPTHRANGEARRAYVPROC epoxy_glDepthRangeArrayv; + PFNGLDEPTHRANGEINDEXEDPROC epoxy_glDepthRangeIndexed; + PFNGLDEPTHRANGEINDEXEDFNVPROC epoxy_glDepthRangeIndexedfNV; + PFNGLDEPTHRANGEDNVPROC epoxy_glDepthRangedNV; + PFNGLDEPTHRANGEFPROC epoxy_glDepthRangef; + PFNGLDEPTHRANGEFOESPROC epoxy_glDepthRangefOES; + PFNGLDEPTHRANGEXPROC epoxy_glDepthRangex; + PFNGLDEPTHRANGEXOESPROC epoxy_glDepthRangexOES; + PFNGLDETACHOBJECTARBPROC epoxy_glDetachObjectARB; + PFNGLDETACHSHADERPROC epoxy_glDetachShader; + PFNGLDETAILTEXFUNCSGISPROC epoxy_glDetailTexFuncSGIS; + PFNGLDISABLEPROC epoxy_glDisable; + PFNGLDISABLECLIENTSTATEPROC epoxy_glDisableClientState; + PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC epoxy_glDisableClientStateIndexedEXT; + PFNGLDISABLECLIENTSTATEIEXTPROC epoxy_glDisableClientStateiEXT; + PFNGLDISABLEDRIVERCONTROLQCOMPROC epoxy_glDisableDriverControlQCOM; + PFNGLDISABLEINDEXEDEXTPROC epoxy_glDisableIndexedEXT; + PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC epoxy_glDisableVariantClientStateEXT; + PFNGLDISABLEVERTEXARRAYATTRIBPROC epoxy_glDisableVertexArrayAttrib; + PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC epoxy_glDisableVertexArrayAttribEXT; + PFNGLDISABLEVERTEXARRAYEXTPROC epoxy_glDisableVertexArrayEXT; + PFNGLDISABLEVERTEXATTRIBAPPLEPROC epoxy_glDisableVertexAttribAPPLE; + PFNGLDISABLEVERTEXATTRIBARRAYPROC epoxy_glDisableVertexAttribArray; + PFNGLDISABLEVERTEXATTRIBARRAYARBPROC epoxy_glDisableVertexAttribArrayARB; + PFNGLDISABLEIPROC epoxy_glDisablei; + PFNGLDISABLEIEXTPROC epoxy_glDisableiEXT; + PFNGLDISABLEINVPROC epoxy_glDisableiNV; + PFNGLDISABLEIOESPROC epoxy_glDisableiOES; + PFNGLDISCARDFRAMEBUFFEREXTPROC epoxy_glDiscardFramebufferEXT; + PFNGLDISPATCHCOMPUTEPROC epoxy_glDispatchCompute; + PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC epoxy_glDispatchComputeGroupSizeARB; + PFNGLDISPATCHCOMPUTEINDIRECTPROC epoxy_glDispatchComputeIndirect; + PFNGLDRAWARRAYSPROC epoxy_glDrawArrays; + PFNGLDRAWARRAYSEXTPROC epoxy_glDrawArraysEXT; + PFNGLDRAWARRAYSINDIRECTPROC epoxy_glDrawArraysIndirect; + PFNGLDRAWARRAYSINSTANCEDPROC epoxy_glDrawArraysInstanced; + PFNGLDRAWARRAYSINSTANCEDANGLEPROC epoxy_glDrawArraysInstancedANGLE; + PFNGLDRAWARRAYSINSTANCEDARBPROC epoxy_glDrawArraysInstancedARB; + PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC epoxy_glDrawArraysInstancedBaseInstance; + PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawArraysInstancedBaseInstanceEXT; + PFNGLDRAWARRAYSINSTANCEDEXTPROC epoxy_glDrawArraysInstancedEXT; + PFNGLDRAWARRAYSINSTANCEDNVPROC epoxy_glDrawArraysInstancedNV; + PFNGLDRAWBUFFERPROC epoxy_glDrawBuffer; + PFNGLDRAWBUFFERSPROC epoxy_glDrawBuffers; + PFNGLDRAWBUFFERSARBPROC epoxy_glDrawBuffersARB; + PFNGLDRAWBUFFERSATIPROC epoxy_glDrawBuffersATI; + PFNGLDRAWBUFFERSEXTPROC epoxy_glDrawBuffersEXT; + PFNGLDRAWBUFFERSINDEXEDEXTPROC epoxy_glDrawBuffersIndexedEXT; + PFNGLDRAWBUFFERSNVPROC epoxy_glDrawBuffersNV; + PFNGLDRAWCOMMANDSADDRESSNVPROC epoxy_glDrawCommandsAddressNV; + PFNGLDRAWCOMMANDSNVPROC epoxy_glDrawCommandsNV; + PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC epoxy_glDrawCommandsStatesAddressNV; + PFNGLDRAWCOMMANDSSTATESNVPROC epoxy_glDrawCommandsStatesNV; + PFNGLDRAWELEMENTARRAYAPPLEPROC epoxy_glDrawElementArrayAPPLE; + PFNGLDRAWELEMENTARRAYATIPROC epoxy_glDrawElementArrayATI; + PFNGLDRAWELEMENTSPROC epoxy_glDrawElements; + PFNGLDRAWELEMENTSBASEVERTEXPROC epoxy_glDrawElementsBaseVertex; + PFNGLDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glDrawElementsBaseVertexEXT; + PFNGLDRAWELEMENTSBASEVERTEXOESPROC epoxy_glDrawElementsBaseVertexOES; + PFNGLDRAWELEMENTSINDIRECTPROC epoxy_glDrawElementsIndirect; + PFNGLDRAWELEMENTSINSTANCEDPROC epoxy_glDrawElementsInstanced; + PFNGLDRAWELEMENTSINSTANCEDANGLEPROC epoxy_glDrawElementsInstancedANGLE; + PFNGLDRAWELEMENTSINSTANCEDARBPROC epoxy_glDrawElementsInstancedARB; + PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseInstance; + PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseInstanceEXT; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC epoxy_glDrawElementsInstancedBaseVertex; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstance; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC epoxy_glDrawElementsInstancedBaseVertexEXT; + PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC epoxy_glDrawElementsInstancedBaseVertexOES; + PFNGLDRAWELEMENTSINSTANCEDEXTPROC epoxy_glDrawElementsInstancedEXT; + PFNGLDRAWELEMENTSINSTANCEDNVPROC epoxy_glDrawElementsInstancedNV; + PFNGLDRAWMESHARRAYSSUNPROC epoxy_glDrawMeshArraysSUN; + PFNGLDRAWPIXELSPROC epoxy_glDrawPixels; + PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glDrawRangeElementArrayAPPLE; + PFNGLDRAWRANGEELEMENTARRAYATIPROC epoxy_glDrawRangeElementArrayATI; + PFNGLDRAWRANGEELEMENTSPROC epoxy_glDrawRangeElements; + PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC epoxy_glDrawRangeElementsBaseVertex; + PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC epoxy_glDrawRangeElementsBaseVertexEXT; + PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC epoxy_glDrawRangeElementsBaseVertexOES; + PFNGLDRAWRANGEELEMENTSEXTPROC epoxy_glDrawRangeElementsEXT; + PFNGLDRAWTEXFOESPROC epoxy_glDrawTexfOES; + PFNGLDRAWTEXFVOESPROC epoxy_glDrawTexfvOES; + PFNGLDRAWTEXIOESPROC epoxy_glDrawTexiOES; + PFNGLDRAWTEXIVOESPROC epoxy_glDrawTexivOES; + PFNGLDRAWTEXSOESPROC epoxy_glDrawTexsOES; + PFNGLDRAWTEXSVOESPROC epoxy_glDrawTexsvOES; + PFNGLDRAWTEXTURENVPROC epoxy_glDrawTextureNV; + PFNGLDRAWTEXXOESPROC epoxy_glDrawTexxOES; + PFNGLDRAWTEXXVOESPROC epoxy_glDrawTexxvOES; + PFNGLDRAWTRANSFORMFEEDBACKPROC epoxy_glDrawTransformFeedback; + PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC epoxy_glDrawTransformFeedbackInstanced; + PFNGLDRAWTRANSFORMFEEDBACKNVPROC epoxy_glDrawTransformFeedbackNV; + PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC epoxy_glDrawTransformFeedbackStream; + PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC epoxy_glDrawTransformFeedbackStreamInstanced; + PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC epoxy_glEGLImageTargetRenderbufferStorageOES; + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC epoxy_glEGLImageTargetTexture2DOES; + PFNGLEDGEFLAGPROC epoxy_glEdgeFlag; + PFNGLEDGEFLAGFORMATNVPROC epoxy_glEdgeFlagFormatNV; + PFNGLEDGEFLAGPOINTERPROC epoxy_glEdgeFlagPointer; + PFNGLEDGEFLAGPOINTEREXTPROC epoxy_glEdgeFlagPointerEXT; + PFNGLEDGEFLAGPOINTERLISTIBMPROC epoxy_glEdgeFlagPointerListIBM; + PFNGLEDGEFLAGVPROC epoxy_glEdgeFlagv; + PFNGLELEMENTPOINTERAPPLEPROC epoxy_glElementPointerAPPLE; + PFNGLELEMENTPOINTERATIPROC epoxy_glElementPointerATI; + PFNGLENABLEPROC epoxy_glEnable; + PFNGLENABLECLIENTSTATEPROC epoxy_glEnableClientState; + PFNGLENABLECLIENTSTATEINDEXEDEXTPROC epoxy_glEnableClientStateIndexedEXT; + PFNGLENABLECLIENTSTATEIEXTPROC epoxy_glEnableClientStateiEXT; + PFNGLENABLEDRIVERCONTROLQCOMPROC epoxy_glEnableDriverControlQCOM; + PFNGLENABLEINDEXEDEXTPROC epoxy_glEnableIndexedEXT; + PFNGLENABLEVARIANTCLIENTSTATEEXTPROC epoxy_glEnableVariantClientStateEXT; + PFNGLENABLEVERTEXARRAYATTRIBPROC epoxy_glEnableVertexArrayAttrib; + PFNGLENABLEVERTEXARRAYATTRIBEXTPROC epoxy_glEnableVertexArrayAttribEXT; + PFNGLENABLEVERTEXARRAYEXTPROC epoxy_glEnableVertexArrayEXT; + PFNGLENABLEVERTEXATTRIBAPPLEPROC epoxy_glEnableVertexAttribAPPLE; + PFNGLENABLEVERTEXATTRIBARRAYPROC epoxy_glEnableVertexAttribArray; + PFNGLENABLEVERTEXATTRIBARRAYARBPROC epoxy_glEnableVertexAttribArrayARB; + PFNGLENABLEIPROC epoxy_glEnablei; + PFNGLENABLEIEXTPROC epoxy_glEnableiEXT; + PFNGLENABLEINVPROC epoxy_glEnableiNV; + PFNGLENABLEIOESPROC epoxy_glEnableiOES; + PFNGLENDPROC epoxy_glEnd_unwrapped; + PFNGLENDCONDITIONALRENDERPROC epoxy_glEndConditionalRender; + PFNGLENDCONDITIONALRENDERNVPROC epoxy_glEndConditionalRenderNV; + PFNGLENDCONDITIONALRENDERNVXPROC epoxy_glEndConditionalRenderNVX; + PFNGLENDFRAGMENTSHADERATIPROC epoxy_glEndFragmentShaderATI; + PFNGLENDLISTPROC epoxy_glEndList; + PFNGLENDOCCLUSIONQUERYNVPROC epoxy_glEndOcclusionQueryNV; + PFNGLENDPERFMONITORAMDPROC epoxy_glEndPerfMonitorAMD; + PFNGLENDPERFQUERYINTELPROC epoxy_glEndPerfQueryINTEL; + PFNGLENDQUERYPROC epoxy_glEndQuery; + PFNGLENDQUERYARBPROC epoxy_glEndQueryARB; + PFNGLENDQUERYEXTPROC epoxy_glEndQueryEXT; + PFNGLENDQUERYINDEXEDPROC epoxy_glEndQueryIndexed; + PFNGLENDTILINGQCOMPROC epoxy_glEndTilingQCOM; + PFNGLENDTRANSFORMFEEDBACKPROC epoxy_glEndTransformFeedback; + PFNGLENDTRANSFORMFEEDBACKEXTPROC epoxy_glEndTransformFeedbackEXT; + PFNGLENDTRANSFORMFEEDBACKNVPROC epoxy_glEndTransformFeedbackNV; + PFNGLENDVERTEXSHADEREXTPROC epoxy_glEndVertexShaderEXT; + PFNGLENDVIDEOCAPTURENVPROC epoxy_glEndVideoCaptureNV; + PFNGLEVALCOORD1DPROC epoxy_glEvalCoord1d; + PFNGLEVALCOORD1DVPROC epoxy_glEvalCoord1dv; + PFNGLEVALCOORD1FPROC epoxy_glEvalCoord1f; + PFNGLEVALCOORD1FVPROC epoxy_glEvalCoord1fv; + PFNGLEVALCOORD1XOESPROC epoxy_glEvalCoord1xOES; + PFNGLEVALCOORD1XVOESPROC epoxy_glEvalCoord1xvOES; + PFNGLEVALCOORD2DPROC epoxy_glEvalCoord2d; + PFNGLEVALCOORD2DVPROC epoxy_glEvalCoord2dv; + PFNGLEVALCOORD2FPROC epoxy_glEvalCoord2f; + PFNGLEVALCOORD2FVPROC epoxy_glEvalCoord2fv; + PFNGLEVALCOORD2XOESPROC epoxy_glEvalCoord2xOES; + PFNGLEVALCOORD2XVOESPROC epoxy_glEvalCoord2xvOES; + PFNGLEVALMAPSNVPROC epoxy_glEvalMapsNV; + PFNGLEVALMESH1PROC epoxy_glEvalMesh1; + PFNGLEVALMESH2PROC epoxy_glEvalMesh2; + PFNGLEVALPOINT1PROC epoxy_glEvalPoint1; + PFNGLEVALPOINT2PROC epoxy_glEvalPoint2; + PFNGLEVALUATEDEPTHVALUESARBPROC epoxy_glEvaluateDepthValuesARB; + PFNGLEXECUTEPROGRAMNVPROC epoxy_glExecuteProgramNV; + PFNGLEXTGETBUFFERPOINTERVQCOMPROC epoxy_glExtGetBufferPointervQCOM; + PFNGLEXTGETBUFFERSQCOMPROC epoxy_glExtGetBuffersQCOM; + PFNGLEXTGETFRAMEBUFFERSQCOMPROC epoxy_glExtGetFramebuffersQCOM; + PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC epoxy_glExtGetProgramBinarySourceQCOM; + PFNGLEXTGETPROGRAMSQCOMPROC epoxy_glExtGetProgramsQCOM; + PFNGLEXTGETRENDERBUFFERSQCOMPROC epoxy_glExtGetRenderbuffersQCOM; + PFNGLEXTGETSHADERSQCOMPROC epoxy_glExtGetShadersQCOM; + PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC epoxy_glExtGetTexLevelParameterivQCOM; + PFNGLEXTGETTEXSUBIMAGEQCOMPROC epoxy_glExtGetTexSubImageQCOM; + PFNGLEXTGETTEXTURESQCOMPROC epoxy_glExtGetTexturesQCOM; + PFNGLEXTISPROGRAMBINARYQCOMPROC epoxy_glExtIsProgramBinaryQCOM; + PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC epoxy_glExtTexObjectStateOverrideiQCOM; + PFNGLEXTRACTCOMPONENTEXTPROC epoxy_glExtractComponentEXT; + PFNGLFEEDBACKBUFFERPROC epoxy_glFeedbackBuffer; + PFNGLFEEDBACKBUFFERXOESPROC epoxy_glFeedbackBufferxOES; + PFNGLFENCESYNCPROC epoxy_glFenceSync; + PFNGLFENCESYNCAPPLEPROC epoxy_glFenceSyncAPPLE; + PFNGLFINALCOMBINERINPUTNVPROC epoxy_glFinalCombinerInputNV; + PFNGLFINISHPROC epoxy_glFinish; + PFNGLFINISHASYNCSGIXPROC epoxy_glFinishAsyncSGIX; + PFNGLFINISHFENCEAPPLEPROC epoxy_glFinishFenceAPPLE; + PFNGLFINISHFENCENVPROC epoxy_glFinishFenceNV; + PFNGLFINISHOBJECTAPPLEPROC epoxy_glFinishObjectAPPLE; + PFNGLFINISHTEXTURESUNXPROC epoxy_glFinishTextureSUNX; + PFNGLFLUSHPROC epoxy_glFlush; + PFNGLFLUSHMAPPEDBUFFERRANGEPROC epoxy_glFlushMappedBufferRange; + PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC epoxy_glFlushMappedBufferRangeAPPLE; + PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC epoxy_glFlushMappedBufferRangeEXT; + PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC epoxy_glFlushMappedNamedBufferRange; + PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC epoxy_glFlushMappedNamedBufferRangeEXT; + PFNGLFLUSHPIXELDATARANGENVPROC epoxy_glFlushPixelDataRangeNV; + PFNGLFLUSHRASTERSGIXPROC epoxy_glFlushRasterSGIX; + PFNGLFLUSHSTATICDATAIBMPROC epoxy_glFlushStaticDataIBM; + PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC epoxy_glFlushVertexArrayRangeAPPLE; + PFNGLFLUSHVERTEXARRAYRANGENVPROC epoxy_glFlushVertexArrayRangeNV; + PFNGLFOGCOORDFORMATNVPROC epoxy_glFogCoordFormatNV; + PFNGLFOGCOORDPOINTERPROC epoxy_glFogCoordPointer; + PFNGLFOGCOORDPOINTEREXTPROC epoxy_glFogCoordPointerEXT; + PFNGLFOGCOORDPOINTERLISTIBMPROC epoxy_glFogCoordPointerListIBM; + PFNGLFOGCOORDDPROC epoxy_glFogCoordd; + PFNGLFOGCOORDDEXTPROC epoxy_glFogCoorddEXT; + PFNGLFOGCOORDDVPROC epoxy_glFogCoorddv; + PFNGLFOGCOORDDVEXTPROC epoxy_glFogCoorddvEXT; + PFNGLFOGCOORDFPROC epoxy_glFogCoordf; + PFNGLFOGCOORDFEXTPROC epoxy_glFogCoordfEXT; + PFNGLFOGCOORDFVPROC epoxy_glFogCoordfv; + PFNGLFOGCOORDFVEXTPROC epoxy_glFogCoordfvEXT; + PFNGLFOGCOORDHNVPROC epoxy_glFogCoordhNV; + PFNGLFOGCOORDHVNVPROC epoxy_glFogCoordhvNV; + PFNGLFOGFUNCSGISPROC epoxy_glFogFuncSGIS; + PFNGLFOGFPROC epoxy_glFogf; + PFNGLFOGFVPROC epoxy_glFogfv; + PFNGLFOGIPROC epoxy_glFogi; + PFNGLFOGIVPROC epoxy_glFogiv; + PFNGLFOGXPROC epoxy_glFogx; + PFNGLFOGXOESPROC epoxy_glFogxOES; + PFNGLFOGXVPROC epoxy_glFogxv; + PFNGLFOGXVOESPROC epoxy_glFogxvOES; + PFNGLFRAGMENTCOLORMATERIALSGIXPROC epoxy_glFragmentColorMaterialSGIX; + PFNGLFRAGMENTCOVERAGECOLORNVPROC epoxy_glFragmentCoverageColorNV; + PFNGLFRAGMENTLIGHTMODELFSGIXPROC epoxy_glFragmentLightModelfSGIX; + PFNGLFRAGMENTLIGHTMODELFVSGIXPROC epoxy_glFragmentLightModelfvSGIX; + PFNGLFRAGMENTLIGHTMODELISGIXPROC epoxy_glFragmentLightModeliSGIX; + PFNGLFRAGMENTLIGHTMODELIVSGIXPROC epoxy_glFragmentLightModelivSGIX; + PFNGLFRAGMENTLIGHTFSGIXPROC epoxy_glFragmentLightfSGIX; + PFNGLFRAGMENTLIGHTFVSGIXPROC epoxy_glFragmentLightfvSGIX; + PFNGLFRAGMENTLIGHTISGIXPROC epoxy_glFragmentLightiSGIX; + PFNGLFRAGMENTLIGHTIVSGIXPROC epoxy_glFragmentLightivSGIX; + PFNGLFRAGMENTMATERIALFSGIXPROC epoxy_glFragmentMaterialfSGIX; + PFNGLFRAGMENTMATERIALFVSGIXPROC epoxy_glFragmentMaterialfvSGIX; + PFNGLFRAGMENTMATERIALISGIXPROC epoxy_glFragmentMaterialiSGIX; + PFNGLFRAGMENTMATERIALIVSGIXPROC epoxy_glFragmentMaterialivSGIX; + PFNGLFRAMETERMINATORGREMEDYPROC epoxy_glFrameTerminatorGREMEDY; + PFNGLFRAMEZOOMSGIXPROC epoxy_glFrameZoomSGIX; + PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC epoxy_glFramebufferDrawBufferEXT; + PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC epoxy_glFramebufferDrawBuffersEXT; + PFNGLFRAMEBUFFERPARAMETERIPROC epoxy_glFramebufferParameteri; + PFNGLFRAMEBUFFERREADBUFFEREXTPROC epoxy_glFramebufferReadBufferEXT; + PFNGLFRAMEBUFFERRENDERBUFFERPROC epoxy_glFramebufferRenderbuffer; + PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glFramebufferRenderbufferEXT; + PFNGLFRAMEBUFFERRENDERBUFFEROESPROC epoxy_glFramebufferRenderbufferOES; + PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glFramebufferSampleLocationsfvARB; + PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glFramebufferSampleLocationsfvNV; + PFNGLFRAMEBUFFERTEXTUREPROC epoxy_glFramebufferTexture; + PFNGLFRAMEBUFFERTEXTURE1DPROC epoxy_glFramebufferTexture1D; + PFNGLFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glFramebufferTexture1DEXT; + PFNGLFRAMEBUFFERTEXTURE2DPROC epoxy_glFramebufferTexture2D; + PFNGLFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glFramebufferTexture2DEXT; + PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC epoxy_glFramebufferTexture2DMultisampleEXT; + PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC epoxy_glFramebufferTexture2DMultisampleIMG; + PFNGLFRAMEBUFFERTEXTURE2DOESPROC epoxy_glFramebufferTexture2DOES; + PFNGLFRAMEBUFFERTEXTURE3DPROC epoxy_glFramebufferTexture3D; + PFNGLFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glFramebufferTexture3DEXT; + PFNGLFRAMEBUFFERTEXTURE3DOESPROC epoxy_glFramebufferTexture3DOES; + PFNGLFRAMEBUFFERTEXTUREARBPROC epoxy_glFramebufferTextureARB; + PFNGLFRAMEBUFFERTEXTUREEXTPROC epoxy_glFramebufferTextureEXT; + PFNGLFRAMEBUFFERTEXTUREFACEARBPROC epoxy_glFramebufferTextureFaceARB; + PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glFramebufferTextureFaceEXT; + PFNGLFRAMEBUFFERTEXTURELAYERPROC epoxy_glFramebufferTextureLayer; + PFNGLFRAMEBUFFERTEXTURELAYERARBPROC epoxy_glFramebufferTextureLayerARB; + PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glFramebufferTextureLayerEXT; + PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC epoxy_glFramebufferTextureMultiviewOVR; + PFNGLFRAMEBUFFERTEXTUREOESPROC epoxy_glFramebufferTextureOES; + PFNGLFREEOBJECTBUFFERATIPROC epoxy_glFreeObjectBufferATI; + PFNGLFRONTFACEPROC epoxy_glFrontFace; + PFNGLFRUSTUMPROC epoxy_glFrustum; + PFNGLFRUSTUMFPROC epoxy_glFrustumf; + PFNGLFRUSTUMFOESPROC epoxy_glFrustumfOES; + PFNGLFRUSTUMXPROC epoxy_glFrustumx; + PFNGLFRUSTUMXOESPROC epoxy_glFrustumxOES; + PFNGLGENASYNCMARKERSSGIXPROC epoxy_glGenAsyncMarkersSGIX; + PFNGLGENBUFFERSPROC epoxy_glGenBuffers; + PFNGLGENBUFFERSARBPROC epoxy_glGenBuffersARB; + PFNGLGENFENCESAPPLEPROC epoxy_glGenFencesAPPLE; + PFNGLGENFENCESNVPROC epoxy_glGenFencesNV; + PFNGLGENFRAGMENTSHADERSATIPROC epoxy_glGenFragmentShadersATI; + PFNGLGENFRAMEBUFFERSPROC epoxy_glGenFramebuffers; + PFNGLGENFRAMEBUFFERSEXTPROC epoxy_glGenFramebuffersEXT; + PFNGLGENFRAMEBUFFERSOESPROC epoxy_glGenFramebuffersOES; + PFNGLGENLISTSPROC epoxy_glGenLists; + PFNGLGENNAMESAMDPROC epoxy_glGenNamesAMD; + PFNGLGENOCCLUSIONQUERIESNVPROC epoxy_glGenOcclusionQueriesNV; + PFNGLGENPATHSNVPROC epoxy_glGenPathsNV; + PFNGLGENPERFMONITORSAMDPROC epoxy_glGenPerfMonitorsAMD; + PFNGLGENPROGRAMPIPELINESPROC epoxy_glGenProgramPipelines; + PFNGLGENPROGRAMPIPELINESEXTPROC epoxy_glGenProgramPipelinesEXT; + PFNGLGENPROGRAMSARBPROC epoxy_glGenProgramsARB; + PFNGLGENPROGRAMSNVPROC epoxy_glGenProgramsNV; + PFNGLGENQUERIESPROC epoxy_glGenQueries; + PFNGLGENQUERIESARBPROC epoxy_glGenQueriesARB; + PFNGLGENQUERIESEXTPROC epoxy_glGenQueriesEXT; + PFNGLGENRENDERBUFFERSPROC epoxy_glGenRenderbuffers; + PFNGLGENRENDERBUFFERSEXTPROC epoxy_glGenRenderbuffersEXT; + PFNGLGENRENDERBUFFERSOESPROC epoxy_glGenRenderbuffersOES; + PFNGLGENSAMPLERSPROC epoxy_glGenSamplers; + PFNGLGENSYMBOLSEXTPROC epoxy_glGenSymbolsEXT; + PFNGLGENTEXTURESPROC epoxy_glGenTextures; + PFNGLGENTEXTURESEXTPROC epoxy_glGenTexturesEXT; + PFNGLGENTRANSFORMFEEDBACKSPROC epoxy_glGenTransformFeedbacks; + PFNGLGENTRANSFORMFEEDBACKSNVPROC epoxy_glGenTransformFeedbacksNV; + PFNGLGENVERTEXARRAYSPROC epoxy_glGenVertexArrays; + PFNGLGENVERTEXARRAYSAPPLEPROC epoxy_glGenVertexArraysAPPLE; + PFNGLGENVERTEXARRAYSOESPROC epoxy_glGenVertexArraysOES; + PFNGLGENVERTEXSHADERSEXTPROC epoxy_glGenVertexShadersEXT; + PFNGLGENERATEMIPMAPPROC epoxy_glGenerateMipmap; + PFNGLGENERATEMIPMAPEXTPROC epoxy_glGenerateMipmapEXT; + PFNGLGENERATEMIPMAPOESPROC epoxy_glGenerateMipmapOES; + PFNGLGENERATEMULTITEXMIPMAPEXTPROC epoxy_glGenerateMultiTexMipmapEXT; + PFNGLGENERATETEXTUREMIPMAPPROC epoxy_glGenerateTextureMipmap; + PFNGLGENERATETEXTUREMIPMAPEXTPROC epoxy_glGenerateTextureMipmapEXT; + PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC epoxy_glGetActiveAtomicCounterBufferiv; + PFNGLGETACTIVEATTRIBPROC epoxy_glGetActiveAttrib; + PFNGLGETACTIVEATTRIBARBPROC epoxy_glGetActiveAttribARB; + PFNGLGETACTIVESUBROUTINENAMEPROC epoxy_glGetActiveSubroutineName; + PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC epoxy_glGetActiveSubroutineUniformName; + PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC epoxy_glGetActiveSubroutineUniformiv; + PFNGLGETACTIVEUNIFORMPROC epoxy_glGetActiveUniform; + PFNGLGETACTIVEUNIFORMARBPROC epoxy_glGetActiveUniformARB; + PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC epoxy_glGetActiveUniformBlockName; + PFNGLGETACTIVEUNIFORMBLOCKIVPROC epoxy_glGetActiveUniformBlockiv; + PFNGLGETACTIVEUNIFORMNAMEPROC epoxy_glGetActiveUniformName; + PFNGLGETACTIVEUNIFORMSIVPROC epoxy_glGetActiveUniformsiv; + PFNGLGETACTIVEVARYINGNVPROC epoxy_glGetActiveVaryingNV; + PFNGLGETARRAYOBJECTFVATIPROC epoxy_glGetArrayObjectfvATI; + PFNGLGETARRAYOBJECTIVATIPROC epoxy_glGetArrayObjectivATI; + PFNGLGETATTACHEDOBJECTSARBPROC epoxy_glGetAttachedObjectsARB; + PFNGLGETATTACHEDSHADERSPROC epoxy_glGetAttachedShaders; + PFNGLGETATTRIBLOCATIONPROC epoxy_glGetAttribLocation; + PFNGLGETATTRIBLOCATIONARBPROC epoxy_glGetAttribLocationARB; + PFNGLGETBOOLEANINDEXEDVEXTPROC epoxy_glGetBooleanIndexedvEXT; + PFNGLGETBOOLEANI_VPROC epoxy_glGetBooleani_v; + PFNGLGETBOOLEANVPROC epoxy_glGetBooleanv; + PFNGLGETBUFFERPARAMETERI64VPROC epoxy_glGetBufferParameteri64v; + PFNGLGETBUFFERPARAMETERIVPROC epoxy_glGetBufferParameteriv; + PFNGLGETBUFFERPARAMETERIVARBPROC epoxy_glGetBufferParameterivARB; + PFNGLGETBUFFERPARAMETERUI64VNVPROC epoxy_glGetBufferParameterui64vNV; + PFNGLGETBUFFERPOINTERVPROC epoxy_glGetBufferPointerv; + PFNGLGETBUFFERPOINTERVARBPROC epoxy_glGetBufferPointervARB; + PFNGLGETBUFFERPOINTERVOESPROC epoxy_glGetBufferPointervOES; + PFNGLGETBUFFERSUBDATAPROC epoxy_glGetBufferSubData; + PFNGLGETBUFFERSUBDATAARBPROC epoxy_glGetBufferSubDataARB; + PFNGLGETCLIPPLANEPROC epoxy_glGetClipPlane; + PFNGLGETCLIPPLANEFPROC epoxy_glGetClipPlanef; + PFNGLGETCLIPPLANEFOESPROC epoxy_glGetClipPlanefOES; + PFNGLGETCLIPPLANEXPROC epoxy_glGetClipPlanex; + PFNGLGETCLIPPLANEXOESPROC epoxy_glGetClipPlanexOES; + PFNGLGETCOLORTABLEPROC epoxy_glGetColorTable; + PFNGLGETCOLORTABLEEXTPROC epoxy_glGetColorTableEXT; + PFNGLGETCOLORTABLEPARAMETERFVPROC epoxy_glGetColorTableParameterfv; + PFNGLGETCOLORTABLEPARAMETERFVEXTPROC epoxy_glGetColorTableParameterfvEXT; + PFNGLGETCOLORTABLEPARAMETERFVSGIPROC epoxy_glGetColorTableParameterfvSGI; + PFNGLGETCOLORTABLEPARAMETERIVPROC epoxy_glGetColorTableParameteriv; + PFNGLGETCOLORTABLEPARAMETERIVEXTPROC epoxy_glGetColorTableParameterivEXT; + PFNGLGETCOLORTABLEPARAMETERIVSGIPROC epoxy_glGetColorTableParameterivSGI; + PFNGLGETCOLORTABLESGIPROC epoxy_glGetColorTableSGI; + PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetCombinerInputParameterfvNV; + PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetCombinerInputParameterivNV; + PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC epoxy_glGetCombinerOutputParameterfvNV; + PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC epoxy_glGetCombinerOutputParameterivNV; + PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glGetCombinerStageParameterfvNV; + PFNGLGETCOMMANDHEADERNVPROC epoxy_glGetCommandHeaderNV; + PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC epoxy_glGetCompressedMultiTexImageEXT; + PFNGLGETCOMPRESSEDTEXIMAGEPROC epoxy_glGetCompressedTexImage; + PFNGLGETCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetCompressedTexImageARB; + PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC epoxy_glGetCompressedTextureImage; + PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC epoxy_glGetCompressedTextureImageEXT; + PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC epoxy_glGetCompressedTextureSubImage; + PFNGLGETCONVOLUTIONFILTERPROC epoxy_glGetConvolutionFilter; + PFNGLGETCONVOLUTIONFILTEREXTPROC epoxy_glGetConvolutionFilterEXT; + PFNGLGETCONVOLUTIONPARAMETERFVPROC epoxy_glGetConvolutionParameterfv; + PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC epoxy_glGetConvolutionParameterfvEXT; + PFNGLGETCONVOLUTIONPARAMETERIVPROC epoxy_glGetConvolutionParameteriv; + PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC epoxy_glGetConvolutionParameterivEXT; + PFNGLGETCONVOLUTIONPARAMETERXVOESPROC epoxy_glGetConvolutionParameterxvOES; + PFNGLGETCOVERAGEMODULATIONTABLENVPROC epoxy_glGetCoverageModulationTableNV; + PFNGLGETDEBUGMESSAGELOGPROC epoxy_glGetDebugMessageLog; + PFNGLGETDEBUGMESSAGELOGAMDPROC epoxy_glGetDebugMessageLogAMD; + PFNGLGETDEBUGMESSAGELOGARBPROC epoxy_glGetDebugMessageLogARB; + PFNGLGETDEBUGMESSAGELOGKHRPROC epoxy_glGetDebugMessageLogKHR; + PFNGLGETDETAILTEXFUNCSGISPROC epoxy_glGetDetailTexFuncSGIS; + PFNGLGETDOUBLEINDEXEDVEXTPROC epoxy_glGetDoubleIndexedvEXT; + PFNGLGETDOUBLEI_VPROC epoxy_glGetDoublei_v; + PFNGLGETDOUBLEI_VEXTPROC epoxy_glGetDoublei_vEXT; + PFNGLGETDOUBLEVPROC epoxy_glGetDoublev; + PFNGLGETDRIVERCONTROLSTRINGQCOMPROC epoxy_glGetDriverControlStringQCOM; + PFNGLGETDRIVERCONTROLSQCOMPROC epoxy_glGetDriverControlsQCOM; + PFNGLGETERRORPROC epoxy_glGetError; + PFNGLGETFENCEIVNVPROC epoxy_glGetFenceivNV; + PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetFinalCombinerInputParameterfvNV; + PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetFinalCombinerInputParameterivNV; + PFNGLGETFIRSTPERFQUERYIDINTELPROC epoxy_glGetFirstPerfQueryIdINTEL; + PFNGLGETFIXEDVPROC epoxy_glGetFixedv; + PFNGLGETFIXEDVOESPROC epoxy_glGetFixedvOES; + PFNGLGETFLOATINDEXEDVEXTPROC epoxy_glGetFloatIndexedvEXT; + PFNGLGETFLOATI_VPROC epoxy_glGetFloati_v; + PFNGLGETFLOATI_VEXTPROC epoxy_glGetFloati_vEXT; + PFNGLGETFLOATI_VNVPROC epoxy_glGetFloati_vNV; + PFNGLGETFLOATVPROC epoxy_glGetFloatv; + PFNGLGETFOGFUNCSGISPROC epoxy_glGetFogFuncSGIS; + PFNGLGETFRAGDATAINDEXPROC epoxy_glGetFragDataIndex; + PFNGLGETFRAGDATAINDEXEXTPROC epoxy_glGetFragDataIndexEXT; + PFNGLGETFRAGDATALOCATIONPROC epoxy_glGetFragDataLocation; + PFNGLGETFRAGDATALOCATIONEXTPROC epoxy_glGetFragDataLocationEXT; + PFNGLGETFRAGMENTLIGHTFVSGIXPROC epoxy_glGetFragmentLightfvSGIX; + PFNGLGETFRAGMENTLIGHTIVSGIXPROC epoxy_glGetFragmentLightivSGIX; + PFNGLGETFRAGMENTMATERIALFVSGIXPROC epoxy_glGetFragmentMaterialfvSGIX; + PFNGLGETFRAGMENTMATERIALIVSGIXPROC epoxy_glGetFragmentMaterialivSGIX; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetFramebufferAttachmentParameteriv; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetFramebufferAttachmentParameterivEXT; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC epoxy_glGetFramebufferAttachmentParameterivOES; + PFNGLGETFRAMEBUFFERPARAMETERIVPROC epoxy_glGetFramebufferParameteriv; + PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetFramebufferParameterivEXT; + PFNGLGETGRAPHICSRESETSTATUSPROC epoxy_glGetGraphicsResetStatus; + PFNGLGETGRAPHICSRESETSTATUSARBPROC epoxy_glGetGraphicsResetStatusARB; + PFNGLGETGRAPHICSRESETSTATUSEXTPROC epoxy_glGetGraphicsResetStatusEXT; + PFNGLGETGRAPHICSRESETSTATUSKHRPROC epoxy_glGetGraphicsResetStatusKHR; + PFNGLGETHANDLEARBPROC epoxy_glGetHandleARB; + PFNGLGETHISTOGRAMPROC epoxy_glGetHistogram; + PFNGLGETHISTOGRAMEXTPROC epoxy_glGetHistogramEXT; + PFNGLGETHISTOGRAMPARAMETERFVPROC epoxy_glGetHistogramParameterfv; + PFNGLGETHISTOGRAMPARAMETERFVEXTPROC epoxy_glGetHistogramParameterfvEXT; + PFNGLGETHISTOGRAMPARAMETERIVPROC epoxy_glGetHistogramParameteriv; + PFNGLGETHISTOGRAMPARAMETERIVEXTPROC epoxy_glGetHistogramParameterivEXT; + PFNGLGETHISTOGRAMPARAMETERXVOESPROC epoxy_glGetHistogramParameterxvOES; + PFNGLGETIMAGEHANDLEARBPROC epoxy_glGetImageHandleARB; + PFNGLGETIMAGEHANDLENVPROC epoxy_glGetImageHandleNV; + PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glGetImageTransformParameterfvHP; + PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glGetImageTransformParameterivHP; + PFNGLGETINFOLOGARBPROC epoxy_glGetInfoLogARB; + PFNGLGETINSTRUMENTSSGIXPROC epoxy_glGetInstrumentsSGIX; + PFNGLGETINTEGER64I_VPROC epoxy_glGetInteger64i_v; + PFNGLGETINTEGER64VPROC epoxy_glGetInteger64v; + PFNGLGETINTEGER64VAPPLEPROC epoxy_glGetInteger64vAPPLE; + PFNGLGETINTEGERINDEXEDVEXTPROC epoxy_glGetIntegerIndexedvEXT; + PFNGLGETINTEGERI_VPROC epoxy_glGetIntegeri_v; + PFNGLGETINTEGERI_VEXTPROC epoxy_glGetIntegeri_vEXT; + PFNGLGETINTEGERUI64I_VNVPROC epoxy_glGetIntegerui64i_vNV; + PFNGLGETINTEGERUI64VNVPROC epoxy_glGetIntegerui64vNV; + PFNGLGETINTEGERVPROC epoxy_glGetIntegerv; + PFNGLGETINTERNALFORMATSAMPLEIVNVPROC epoxy_glGetInternalformatSampleivNV; + PFNGLGETINTERNALFORMATI64VPROC epoxy_glGetInternalformati64v; + PFNGLGETINTERNALFORMATIVPROC epoxy_glGetInternalformativ; + PFNGLGETINVARIANTBOOLEANVEXTPROC epoxy_glGetInvariantBooleanvEXT; + PFNGLGETINVARIANTFLOATVEXTPROC epoxy_glGetInvariantFloatvEXT; + PFNGLGETINVARIANTINTEGERVEXTPROC epoxy_glGetInvariantIntegervEXT; + PFNGLGETLIGHTFVPROC epoxy_glGetLightfv; + PFNGLGETLIGHTIVPROC epoxy_glGetLightiv; + PFNGLGETLIGHTXOESPROC epoxy_glGetLightxOES; + PFNGLGETLIGHTXVPROC epoxy_glGetLightxv; + PFNGLGETLIGHTXVOESPROC epoxy_glGetLightxvOES; + PFNGLGETLISTPARAMETERFVSGIXPROC epoxy_glGetListParameterfvSGIX; + PFNGLGETLISTPARAMETERIVSGIXPROC epoxy_glGetListParameterivSGIX; + PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC epoxy_glGetLocalConstantBooleanvEXT; + PFNGLGETLOCALCONSTANTFLOATVEXTPROC epoxy_glGetLocalConstantFloatvEXT; + PFNGLGETLOCALCONSTANTINTEGERVEXTPROC epoxy_glGetLocalConstantIntegervEXT; + PFNGLGETMAPATTRIBPARAMETERFVNVPROC epoxy_glGetMapAttribParameterfvNV; + PFNGLGETMAPATTRIBPARAMETERIVNVPROC epoxy_glGetMapAttribParameterivNV; + PFNGLGETMAPCONTROLPOINTSNVPROC epoxy_glGetMapControlPointsNV; + PFNGLGETMAPPARAMETERFVNVPROC epoxy_glGetMapParameterfvNV; + PFNGLGETMAPPARAMETERIVNVPROC epoxy_glGetMapParameterivNV; + PFNGLGETMAPDVPROC epoxy_glGetMapdv; + PFNGLGETMAPFVPROC epoxy_glGetMapfv; + PFNGLGETMAPIVPROC epoxy_glGetMapiv; + PFNGLGETMAPXVOESPROC epoxy_glGetMapxvOES; + PFNGLGETMATERIALFVPROC epoxy_glGetMaterialfv; + PFNGLGETMATERIALIVPROC epoxy_glGetMaterialiv; + PFNGLGETMATERIALXOESPROC epoxy_glGetMaterialxOES; + PFNGLGETMATERIALXVPROC epoxy_glGetMaterialxv; + PFNGLGETMATERIALXVOESPROC epoxy_glGetMaterialxvOES; + PFNGLGETMINMAXPROC epoxy_glGetMinmax; + PFNGLGETMINMAXEXTPROC epoxy_glGetMinmaxEXT; + PFNGLGETMINMAXPARAMETERFVPROC epoxy_glGetMinmaxParameterfv; + PFNGLGETMINMAXPARAMETERFVEXTPROC epoxy_glGetMinmaxParameterfvEXT; + PFNGLGETMINMAXPARAMETERIVPROC epoxy_glGetMinmaxParameteriv; + PFNGLGETMINMAXPARAMETERIVEXTPROC epoxy_glGetMinmaxParameterivEXT; + PFNGLGETMULTITEXENVFVEXTPROC epoxy_glGetMultiTexEnvfvEXT; + PFNGLGETMULTITEXENVIVEXTPROC epoxy_glGetMultiTexEnvivEXT; + PFNGLGETMULTITEXGENDVEXTPROC epoxy_glGetMultiTexGendvEXT; + PFNGLGETMULTITEXGENFVEXTPROC epoxy_glGetMultiTexGenfvEXT; + PFNGLGETMULTITEXGENIVEXTPROC epoxy_glGetMultiTexGenivEXT; + PFNGLGETMULTITEXIMAGEEXTPROC epoxy_glGetMultiTexImageEXT; + PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC epoxy_glGetMultiTexLevelParameterfvEXT; + PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC epoxy_glGetMultiTexLevelParameterivEXT; + PFNGLGETMULTITEXPARAMETERIIVEXTPROC epoxy_glGetMultiTexParameterIivEXT; + PFNGLGETMULTITEXPARAMETERIUIVEXTPROC epoxy_glGetMultiTexParameterIuivEXT; + PFNGLGETMULTITEXPARAMETERFVEXTPROC epoxy_glGetMultiTexParameterfvEXT; + PFNGLGETMULTITEXPARAMETERIVEXTPROC epoxy_glGetMultiTexParameterivEXT; + PFNGLGETMULTISAMPLEFVPROC epoxy_glGetMultisamplefv; + PFNGLGETMULTISAMPLEFVNVPROC epoxy_glGetMultisamplefvNV; + PFNGLGETNAMEDBUFFERPARAMETERI64VPROC epoxy_glGetNamedBufferParameteri64v; + PFNGLGETNAMEDBUFFERPARAMETERIVPROC epoxy_glGetNamedBufferParameteriv; + PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedBufferParameterivEXT; + PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC epoxy_glGetNamedBufferParameterui64vNV; + PFNGLGETNAMEDBUFFERPOINTERVPROC epoxy_glGetNamedBufferPointerv; + PFNGLGETNAMEDBUFFERPOINTERVEXTPROC epoxy_glGetNamedBufferPointervEXT; + PFNGLGETNAMEDBUFFERSUBDATAPROC epoxy_glGetNamedBufferSubData; + PFNGLGETNAMEDBUFFERSUBDATAEXTPROC epoxy_glGetNamedBufferSubDataEXT; + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetNamedFramebufferAttachmentParameteriv; + PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferAttachmentParameterivEXT; + PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC epoxy_glGetNamedFramebufferParameteriv; + PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferParameterivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC epoxy_glGetNamedProgramLocalParameterIivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC epoxy_glGetNamedProgramLocalParameterIuivEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC epoxy_glGetNamedProgramLocalParameterdvEXT; + PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC epoxy_glGetNamedProgramLocalParameterfvEXT; + PFNGLGETNAMEDPROGRAMSTRINGEXTPROC epoxy_glGetNamedProgramStringEXT; + PFNGLGETNAMEDPROGRAMIVEXTPROC epoxy_glGetNamedProgramivEXT; + PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC epoxy_glGetNamedRenderbufferParameteriv; + PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedRenderbufferParameterivEXT; + PFNGLGETNAMEDSTRINGARBPROC epoxy_glGetNamedStringARB; + PFNGLGETNAMEDSTRINGIVARBPROC epoxy_glGetNamedStringivARB; + PFNGLGETNEXTPERFQUERYIDINTELPROC epoxy_glGetNextPerfQueryIdINTEL; + PFNGLGETOBJECTBUFFERFVATIPROC epoxy_glGetObjectBufferfvATI; + PFNGLGETOBJECTBUFFERIVATIPROC epoxy_glGetObjectBufferivATI; + PFNGLGETOBJECTLABELPROC epoxy_glGetObjectLabel; + PFNGLGETOBJECTLABELEXTPROC epoxy_glGetObjectLabelEXT; + PFNGLGETOBJECTLABELKHRPROC epoxy_glGetObjectLabelKHR; + PFNGLGETOBJECTPARAMETERFVARBPROC epoxy_glGetObjectParameterfvARB; + PFNGLGETOBJECTPARAMETERIVAPPLEPROC epoxy_glGetObjectParameterivAPPLE; + PFNGLGETOBJECTPARAMETERIVARBPROC epoxy_glGetObjectParameterivARB; + PFNGLGETOBJECTPTRLABELPROC epoxy_glGetObjectPtrLabel; + PFNGLGETOBJECTPTRLABELKHRPROC epoxy_glGetObjectPtrLabelKHR; + PFNGLGETOCCLUSIONQUERYIVNVPROC epoxy_glGetOcclusionQueryivNV; + PFNGLGETOCCLUSIONQUERYUIVNVPROC epoxy_glGetOcclusionQueryuivNV; + PFNGLGETPATHCOLORGENFVNVPROC epoxy_glGetPathColorGenfvNV; + PFNGLGETPATHCOLORGENIVNVPROC epoxy_glGetPathColorGenivNV; + PFNGLGETPATHCOMMANDSNVPROC epoxy_glGetPathCommandsNV; + PFNGLGETPATHCOORDSNVPROC epoxy_glGetPathCoordsNV; + PFNGLGETPATHDASHARRAYNVPROC epoxy_glGetPathDashArrayNV; + PFNGLGETPATHLENGTHNVPROC epoxy_glGetPathLengthNV; + PFNGLGETPATHMETRICRANGENVPROC epoxy_glGetPathMetricRangeNV; + PFNGLGETPATHMETRICSNVPROC epoxy_glGetPathMetricsNV; + PFNGLGETPATHPARAMETERFVNVPROC epoxy_glGetPathParameterfvNV; + PFNGLGETPATHPARAMETERIVNVPROC epoxy_glGetPathParameterivNV; + PFNGLGETPATHSPACINGNVPROC epoxy_glGetPathSpacingNV; + PFNGLGETPATHTEXGENFVNVPROC epoxy_glGetPathTexGenfvNV; + PFNGLGETPATHTEXGENIVNVPROC epoxy_glGetPathTexGenivNV; + PFNGLGETPERFCOUNTERINFOINTELPROC epoxy_glGetPerfCounterInfoINTEL; + PFNGLGETPERFMONITORCOUNTERDATAAMDPROC epoxy_glGetPerfMonitorCounterDataAMD; + PFNGLGETPERFMONITORCOUNTERINFOAMDPROC epoxy_glGetPerfMonitorCounterInfoAMD; + PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC epoxy_glGetPerfMonitorCounterStringAMD; + PFNGLGETPERFMONITORCOUNTERSAMDPROC epoxy_glGetPerfMonitorCountersAMD; + PFNGLGETPERFMONITORGROUPSTRINGAMDPROC epoxy_glGetPerfMonitorGroupStringAMD; + PFNGLGETPERFMONITORGROUPSAMDPROC epoxy_glGetPerfMonitorGroupsAMD; + PFNGLGETPERFQUERYDATAINTELPROC epoxy_glGetPerfQueryDataINTEL; + PFNGLGETPERFQUERYIDBYNAMEINTELPROC epoxy_glGetPerfQueryIdByNameINTEL; + PFNGLGETPERFQUERYINFOINTELPROC epoxy_glGetPerfQueryInfoINTEL; + PFNGLGETPIXELMAPFVPROC epoxy_glGetPixelMapfv; + PFNGLGETPIXELMAPUIVPROC epoxy_glGetPixelMapuiv; + PFNGLGETPIXELMAPUSVPROC epoxy_glGetPixelMapusv; + PFNGLGETPIXELMAPXVPROC epoxy_glGetPixelMapxv; + PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC epoxy_glGetPixelTexGenParameterfvSGIS; + PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC epoxy_glGetPixelTexGenParameterivSGIS; + PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glGetPixelTransformParameterfvEXT; + PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glGetPixelTransformParameterivEXT; + PFNGLGETPOINTERINDEXEDVEXTPROC epoxy_glGetPointerIndexedvEXT; + PFNGLGETPOINTERI_VEXTPROC epoxy_glGetPointeri_vEXT; + PFNGLGETPOINTERVPROC epoxy_glGetPointerv; + PFNGLGETPOINTERVEXTPROC epoxy_glGetPointervEXT; + PFNGLGETPOINTERVKHRPROC epoxy_glGetPointervKHR; + PFNGLGETPOLYGONSTIPPLEPROC epoxy_glGetPolygonStipple; + PFNGLGETPROGRAMBINARYPROC epoxy_glGetProgramBinary; + PFNGLGETPROGRAMBINARYOESPROC epoxy_glGetProgramBinaryOES; + PFNGLGETPROGRAMENVPARAMETERIIVNVPROC epoxy_glGetProgramEnvParameterIivNV; + PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC epoxy_glGetProgramEnvParameterIuivNV; + PFNGLGETPROGRAMENVPARAMETERDVARBPROC epoxy_glGetProgramEnvParameterdvARB; + PFNGLGETPROGRAMENVPARAMETERFVARBPROC epoxy_glGetProgramEnvParameterfvARB; + PFNGLGETPROGRAMINFOLOGPROC epoxy_glGetProgramInfoLog; + PFNGLGETPROGRAMINTERFACEIVPROC epoxy_glGetProgramInterfaceiv; + PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC epoxy_glGetProgramLocalParameterIivNV; + PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC epoxy_glGetProgramLocalParameterIuivNV; + PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC epoxy_glGetProgramLocalParameterdvARB; + PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC epoxy_glGetProgramLocalParameterfvARB; + PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC epoxy_glGetProgramNamedParameterdvNV; + PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC epoxy_glGetProgramNamedParameterfvNV; + PFNGLGETPROGRAMPARAMETERDVNVPROC epoxy_glGetProgramParameterdvNV; + PFNGLGETPROGRAMPARAMETERFVNVPROC epoxy_glGetProgramParameterfvNV; + PFNGLGETPROGRAMPIPELINEINFOLOGPROC epoxy_glGetProgramPipelineInfoLog; + PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC epoxy_glGetProgramPipelineInfoLogEXT; + PFNGLGETPROGRAMPIPELINEIVPROC epoxy_glGetProgramPipelineiv; + PFNGLGETPROGRAMPIPELINEIVEXTPROC epoxy_glGetProgramPipelineivEXT; + PFNGLGETPROGRAMRESOURCEINDEXPROC epoxy_glGetProgramResourceIndex; + PFNGLGETPROGRAMRESOURCELOCATIONPROC epoxy_glGetProgramResourceLocation; + PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC epoxy_glGetProgramResourceLocationIndex; + PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC epoxy_glGetProgramResourceLocationIndexEXT; + PFNGLGETPROGRAMRESOURCENAMEPROC epoxy_glGetProgramResourceName; + PFNGLGETPROGRAMRESOURCEFVNVPROC epoxy_glGetProgramResourcefvNV; + PFNGLGETPROGRAMRESOURCEIVPROC epoxy_glGetProgramResourceiv; + PFNGLGETPROGRAMSTAGEIVPROC epoxy_glGetProgramStageiv; + PFNGLGETPROGRAMSTRINGARBPROC epoxy_glGetProgramStringARB; + PFNGLGETPROGRAMSTRINGNVPROC epoxy_glGetProgramStringNV; + PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC epoxy_glGetProgramSubroutineParameteruivNV; + PFNGLGETPROGRAMIVPROC epoxy_glGetProgramiv; + PFNGLGETPROGRAMIVARBPROC epoxy_glGetProgramivARB; + PFNGLGETPROGRAMIVNVPROC epoxy_glGetProgramivNV; + PFNGLGETQUERYBUFFEROBJECTI64VPROC epoxy_glGetQueryBufferObjecti64v; + PFNGLGETQUERYBUFFEROBJECTIVPROC epoxy_glGetQueryBufferObjectiv; + PFNGLGETQUERYBUFFEROBJECTUI64VPROC epoxy_glGetQueryBufferObjectui64v; + PFNGLGETQUERYBUFFEROBJECTUIVPROC epoxy_glGetQueryBufferObjectuiv; + PFNGLGETQUERYINDEXEDIVPROC epoxy_glGetQueryIndexediv; + PFNGLGETQUERYOBJECTI64VPROC epoxy_glGetQueryObjecti64v; + PFNGLGETQUERYOBJECTI64VEXTPROC epoxy_glGetQueryObjecti64vEXT; + PFNGLGETQUERYOBJECTIVPROC epoxy_glGetQueryObjectiv; + PFNGLGETQUERYOBJECTIVARBPROC epoxy_glGetQueryObjectivARB; + PFNGLGETQUERYOBJECTIVEXTPROC epoxy_glGetQueryObjectivEXT; + PFNGLGETQUERYOBJECTUI64VPROC epoxy_glGetQueryObjectui64v; + PFNGLGETQUERYOBJECTUI64VEXTPROC epoxy_glGetQueryObjectui64vEXT; + PFNGLGETQUERYOBJECTUIVPROC epoxy_glGetQueryObjectuiv; + PFNGLGETQUERYOBJECTUIVARBPROC epoxy_glGetQueryObjectuivARB; + PFNGLGETQUERYOBJECTUIVEXTPROC epoxy_glGetQueryObjectuivEXT; + PFNGLGETQUERYIVPROC epoxy_glGetQueryiv; + PFNGLGETQUERYIVARBPROC epoxy_glGetQueryivARB; + PFNGLGETQUERYIVEXTPROC epoxy_glGetQueryivEXT; + PFNGLGETRENDERBUFFERPARAMETERIVPROC epoxy_glGetRenderbufferParameteriv; + PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetRenderbufferParameterivEXT; + PFNGLGETRENDERBUFFERPARAMETERIVOESPROC epoxy_glGetRenderbufferParameterivOES; + PFNGLGETSAMPLERPARAMETERIIVPROC epoxy_glGetSamplerParameterIiv; + PFNGLGETSAMPLERPARAMETERIIVEXTPROC epoxy_glGetSamplerParameterIivEXT; + PFNGLGETSAMPLERPARAMETERIIVOESPROC epoxy_glGetSamplerParameterIivOES; + PFNGLGETSAMPLERPARAMETERIUIVPROC epoxy_glGetSamplerParameterIuiv; + PFNGLGETSAMPLERPARAMETERIUIVEXTPROC epoxy_glGetSamplerParameterIuivEXT; + PFNGLGETSAMPLERPARAMETERIUIVOESPROC epoxy_glGetSamplerParameterIuivOES; + PFNGLGETSAMPLERPARAMETERFVPROC epoxy_glGetSamplerParameterfv; + PFNGLGETSAMPLERPARAMETERIVPROC epoxy_glGetSamplerParameteriv; + PFNGLGETSEPARABLEFILTERPROC epoxy_glGetSeparableFilter; + PFNGLGETSEPARABLEFILTEREXTPROC epoxy_glGetSeparableFilterEXT; + PFNGLGETSHADERINFOLOGPROC epoxy_glGetShaderInfoLog; + PFNGLGETSHADERPRECISIONFORMATPROC epoxy_glGetShaderPrecisionFormat; + PFNGLGETSHADERSOURCEPROC epoxy_glGetShaderSource; + PFNGLGETSHADERSOURCEARBPROC epoxy_glGetShaderSourceARB; + PFNGLGETSHADERIVPROC epoxy_glGetShaderiv; + PFNGLGETSHARPENTEXFUNCSGISPROC epoxy_glGetSharpenTexFuncSGIS; + PFNGLGETSTAGEINDEXNVPROC epoxy_glGetStageIndexNV; + PFNGLGETSTRINGPROC epoxy_glGetString; + PFNGLGETSTRINGIPROC epoxy_glGetStringi; + PFNGLGETSUBROUTINEINDEXPROC epoxy_glGetSubroutineIndex; + PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC epoxy_glGetSubroutineUniformLocation; + PFNGLGETSYNCIVPROC epoxy_glGetSynciv; + PFNGLGETSYNCIVAPPLEPROC epoxy_glGetSyncivAPPLE; + PFNGLGETTEXBUMPPARAMETERFVATIPROC epoxy_glGetTexBumpParameterfvATI; + PFNGLGETTEXBUMPPARAMETERIVATIPROC epoxy_glGetTexBumpParameterivATI; + PFNGLGETTEXENVFVPROC epoxy_glGetTexEnvfv; + PFNGLGETTEXENVIVPROC epoxy_glGetTexEnviv; + PFNGLGETTEXENVXVPROC epoxy_glGetTexEnvxv; + PFNGLGETTEXENVXVOESPROC epoxy_glGetTexEnvxvOES; + PFNGLGETTEXFILTERFUNCSGISPROC epoxy_glGetTexFilterFuncSGIS; + PFNGLGETTEXGENDVPROC epoxy_glGetTexGendv; + PFNGLGETTEXGENFVPROC epoxy_glGetTexGenfv; + PFNGLGETTEXGENFVOESPROC epoxy_glGetTexGenfvOES; + PFNGLGETTEXGENIVPROC epoxy_glGetTexGeniv; + PFNGLGETTEXGENIVOESPROC epoxy_glGetTexGenivOES; + PFNGLGETTEXGENXVOESPROC epoxy_glGetTexGenxvOES; + PFNGLGETTEXIMAGEPROC epoxy_glGetTexImage; + PFNGLGETTEXLEVELPARAMETERFVPROC epoxy_glGetTexLevelParameterfv; + PFNGLGETTEXLEVELPARAMETERIVPROC epoxy_glGetTexLevelParameteriv; + PFNGLGETTEXLEVELPARAMETERXVOESPROC epoxy_glGetTexLevelParameterxvOES; + PFNGLGETTEXPARAMETERIIVPROC epoxy_glGetTexParameterIiv; + PFNGLGETTEXPARAMETERIIVEXTPROC epoxy_glGetTexParameterIivEXT; + PFNGLGETTEXPARAMETERIIVOESPROC epoxy_glGetTexParameterIivOES; + PFNGLGETTEXPARAMETERIUIVPROC epoxy_glGetTexParameterIuiv; + PFNGLGETTEXPARAMETERIUIVEXTPROC epoxy_glGetTexParameterIuivEXT; + PFNGLGETTEXPARAMETERIUIVOESPROC epoxy_glGetTexParameterIuivOES; + PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC epoxy_glGetTexParameterPointervAPPLE; + PFNGLGETTEXPARAMETERFVPROC epoxy_glGetTexParameterfv; + PFNGLGETTEXPARAMETERIVPROC epoxy_glGetTexParameteriv; + PFNGLGETTEXPARAMETERXVPROC epoxy_glGetTexParameterxv; + PFNGLGETTEXPARAMETERXVOESPROC epoxy_glGetTexParameterxvOES; + PFNGLGETTEXTUREHANDLEARBPROC epoxy_glGetTextureHandleARB; + PFNGLGETTEXTUREHANDLENVPROC epoxy_glGetTextureHandleNV; + PFNGLGETTEXTUREIMAGEPROC epoxy_glGetTextureImage; + PFNGLGETTEXTUREIMAGEEXTPROC epoxy_glGetTextureImageEXT; + PFNGLGETTEXTURELEVELPARAMETERFVPROC epoxy_glGetTextureLevelParameterfv; + PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC epoxy_glGetTextureLevelParameterfvEXT; + PFNGLGETTEXTURELEVELPARAMETERIVPROC epoxy_glGetTextureLevelParameteriv; + PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC epoxy_glGetTextureLevelParameterivEXT; + PFNGLGETTEXTUREPARAMETERIIVPROC epoxy_glGetTextureParameterIiv; + PFNGLGETTEXTUREPARAMETERIIVEXTPROC epoxy_glGetTextureParameterIivEXT; + PFNGLGETTEXTUREPARAMETERIUIVPROC epoxy_glGetTextureParameterIuiv; + PFNGLGETTEXTUREPARAMETERIUIVEXTPROC epoxy_glGetTextureParameterIuivEXT; + PFNGLGETTEXTUREPARAMETERFVPROC epoxy_glGetTextureParameterfv; + PFNGLGETTEXTUREPARAMETERFVEXTPROC epoxy_glGetTextureParameterfvEXT; + PFNGLGETTEXTUREPARAMETERIVPROC epoxy_glGetTextureParameteriv; + PFNGLGETTEXTUREPARAMETERIVEXTPROC epoxy_glGetTextureParameterivEXT; + PFNGLGETTEXTURESAMPLERHANDLEARBPROC epoxy_glGetTextureSamplerHandleARB; + PFNGLGETTEXTURESAMPLERHANDLENVPROC epoxy_glGetTextureSamplerHandleNV; + PFNGLGETTEXTURESUBIMAGEPROC epoxy_glGetTextureSubImage; + PFNGLGETTRACKMATRIXIVNVPROC epoxy_glGetTrackMatrixivNV; + PFNGLGETTRANSFORMFEEDBACKVARYINGPROC epoxy_glGetTransformFeedbackVarying; + PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC epoxy_glGetTransformFeedbackVaryingEXT; + PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC epoxy_glGetTransformFeedbackVaryingNV; + PFNGLGETTRANSFORMFEEDBACKI64_VPROC epoxy_glGetTransformFeedbacki64_v; + PFNGLGETTRANSFORMFEEDBACKI_VPROC epoxy_glGetTransformFeedbacki_v; + PFNGLGETTRANSFORMFEEDBACKIVPROC epoxy_glGetTransformFeedbackiv; + PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC epoxy_glGetTranslatedShaderSourceANGLE; + PFNGLGETUNIFORMBLOCKINDEXPROC epoxy_glGetUniformBlockIndex; + PFNGLGETUNIFORMBUFFERSIZEEXTPROC epoxy_glGetUniformBufferSizeEXT; + PFNGLGETUNIFORMINDICESPROC epoxy_glGetUniformIndices; + PFNGLGETUNIFORMLOCATIONPROC epoxy_glGetUniformLocation; + PFNGLGETUNIFORMLOCATIONARBPROC epoxy_glGetUniformLocationARB; + PFNGLGETUNIFORMOFFSETEXTPROC epoxy_glGetUniformOffsetEXT; + PFNGLGETUNIFORMSUBROUTINEUIVPROC epoxy_glGetUniformSubroutineuiv; + PFNGLGETUNIFORMDVPROC epoxy_glGetUniformdv; + PFNGLGETUNIFORMFVPROC epoxy_glGetUniformfv; + PFNGLGETUNIFORMFVARBPROC epoxy_glGetUniformfvARB; + PFNGLGETUNIFORMI64VARBPROC epoxy_glGetUniformi64vARB; + PFNGLGETUNIFORMI64VNVPROC epoxy_glGetUniformi64vNV; + PFNGLGETUNIFORMIVPROC epoxy_glGetUniformiv; + PFNGLGETUNIFORMIVARBPROC epoxy_glGetUniformivARB; + PFNGLGETUNIFORMUI64VARBPROC epoxy_glGetUniformui64vARB; + PFNGLGETUNIFORMUI64VNVPROC epoxy_glGetUniformui64vNV; + PFNGLGETUNIFORMUIVPROC epoxy_glGetUniformuiv; + PFNGLGETUNIFORMUIVEXTPROC epoxy_glGetUniformuivEXT; + PFNGLGETVARIANTARRAYOBJECTFVATIPROC epoxy_glGetVariantArrayObjectfvATI; + PFNGLGETVARIANTARRAYOBJECTIVATIPROC epoxy_glGetVariantArrayObjectivATI; + PFNGLGETVARIANTBOOLEANVEXTPROC epoxy_glGetVariantBooleanvEXT; + PFNGLGETVARIANTFLOATVEXTPROC epoxy_glGetVariantFloatvEXT; + PFNGLGETVARIANTINTEGERVEXTPROC epoxy_glGetVariantIntegervEXT; + PFNGLGETVARIANTPOINTERVEXTPROC epoxy_glGetVariantPointervEXT; + PFNGLGETVARYINGLOCATIONNVPROC epoxy_glGetVaryingLocationNV; + PFNGLGETVERTEXARRAYINDEXED64IVPROC epoxy_glGetVertexArrayIndexed64iv; + PFNGLGETVERTEXARRAYINDEXEDIVPROC epoxy_glGetVertexArrayIndexediv; + PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC epoxy_glGetVertexArrayIntegeri_vEXT; + PFNGLGETVERTEXARRAYINTEGERVEXTPROC epoxy_glGetVertexArrayIntegervEXT; + PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC epoxy_glGetVertexArrayPointeri_vEXT; + PFNGLGETVERTEXARRAYPOINTERVEXTPROC epoxy_glGetVertexArrayPointervEXT; + PFNGLGETVERTEXARRAYIVPROC epoxy_glGetVertexArrayiv; + PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC epoxy_glGetVertexAttribArrayObjectfvATI; + PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC epoxy_glGetVertexAttribArrayObjectivATI; + PFNGLGETVERTEXATTRIBIIVPROC epoxy_glGetVertexAttribIiv; + PFNGLGETVERTEXATTRIBIIVEXTPROC epoxy_glGetVertexAttribIivEXT; + PFNGLGETVERTEXATTRIBIUIVPROC epoxy_glGetVertexAttribIuiv; + PFNGLGETVERTEXATTRIBIUIVEXTPROC epoxy_glGetVertexAttribIuivEXT; + PFNGLGETVERTEXATTRIBLDVPROC epoxy_glGetVertexAttribLdv; + PFNGLGETVERTEXATTRIBLDVEXTPROC epoxy_glGetVertexAttribLdvEXT; + PFNGLGETVERTEXATTRIBLI64VNVPROC epoxy_glGetVertexAttribLi64vNV; + PFNGLGETVERTEXATTRIBLUI64VARBPROC epoxy_glGetVertexAttribLui64vARB; + PFNGLGETVERTEXATTRIBLUI64VNVPROC epoxy_glGetVertexAttribLui64vNV; + PFNGLGETVERTEXATTRIBPOINTERVPROC epoxy_glGetVertexAttribPointerv; + PFNGLGETVERTEXATTRIBPOINTERVARBPROC epoxy_glGetVertexAttribPointervARB; + PFNGLGETVERTEXATTRIBPOINTERVNVPROC epoxy_glGetVertexAttribPointervNV; + PFNGLGETVERTEXATTRIBDVPROC epoxy_glGetVertexAttribdv; + PFNGLGETVERTEXATTRIBDVARBPROC epoxy_glGetVertexAttribdvARB; + PFNGLGETVERTEXATTRIBDVNVPROC epoxy_glGetVertexAttribdvNV; + PFNGLGETVERTEXATTRIBFVPROC epoxy_glGetVertexAttribfv; + PFNGLGETVERTEXATTRIBFVARBPROC epoxy_glGetVertexAttribfvARB; + PFNGLGETVERTEXATTRIBFVNVPROC epoxy_glGetVertexAttribfvNV; + PFNGLGETVERTEXATTRIBIVPROC epoxy_glGetVertexAttribiv; + PFNGLGETVERTEXATTRIBIVARBPROC epoxy_glGetVertexAttribivARB; + PFNGLGETVERTEXATTRIBIVNVPROC epoxy_glGetVertexAttribivNV; + PFNGLGETVIDEOCAPTURESTREAMDVNVPROC epoxy_glGetVideoCaptureStreamdvNV; + PFNGLGETVIDEOCAPTURESTREAMFVNVPROC epoxy_glGetVideoCaptureStreamfvNV; + PFNGLGETVIDEOCAPTURESTREAMIVNVPROC epoxy_glGetVideoCaptureStreamivNV; + PFNGLGETVIDEOCAPTUREIVNVPROC epoxy_glGetVideoCaptureivNV; + PFNGLGETVIDEOI64VNVPROC epoxy_glGetVideoi64vNV; + PFNGLGETVIDEOIVNVPROC epoxy_glGetVideoivNV; + PFNGLGETVIDEOUI64VNVPROC epoxy_glGetVideoui64vNV; + PFNGLGETVIDEOUIVNVPROC epoxy_glGetVideouivNV; + PFNGLGETNCOLORTABLEPROC epoxy_glGetnColorTable; + PFNGLGETNCOLORTABLEARBPROC epoxy_glGetnColorTableARB; + PFNGLGETNCOMPRESSEDTEXIMAGEPROC epoxy_glGetnCompressedTexImage; + PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetnCompressedTexImageARB; + PFNGLGETNCONVOLUTIONFILTERPROC epoxy_glGetnConvolutionFilter; + PFNGLGETNCONVOLUTIONFILTERARBPROC epoxy_glGetnConvolutionFilterARB; + PFNGLGETNHISTOGRAMPROC epoxy_glGetnHistogram; + PFNGLGETNHISTOGRAMARBPROC epoxy_glGetnHistogramARB; + PFNGLGETNMAPDVPROC epoxy_glGetnMapdv; + PFNGLGETNMAPDVARBPROC epoxy_glGetnMapdvARB; + PFNGLGETNMAPFVPROC epoxy_glGetnMapfv; + PFNGLGETNMAPFVARBPROC epoxy_glGetnMapfvARB; + PFNGLGETNMAPIVPROC epoxy_glGetnMapiv; + PFNGLGETNMAPIVARBPROC epoxy_glGetnMapivARB; + PFNGLGETNMINMAXPROC epoxy_glGetnMinmax; + PFNGLGETNMINMAXARBPROC epoxy_glGetnMinmaxARB; + PFNGLGETNPIXELMAPFVPROC epoxy_glGetnPixelMapfv; + PFNGLGETNPIXELMAPFVARBPROC epoxy_glGetnPixelMapfvARB; + PFNGLGETNPIXELMAPUIVPROC epoxy_glGetnPixelMapuiv; + PFNGLGETNPIXELMAPUIVARBPROC epoxy_glGetnPixelMapuivARB; + PFNGLGETNPIXELMAPUSVPROC epoxy_glGetnPixelMapusv; + PFNGLGETNPIXELMAPUSVARBPROC epoxy_glGetnPixelMapusvARB; + PFNGLGETNPOLYGONSTIPPLEPROC epoxy_glGetnPolygonStipple; + PFNGLGETNPOLYGONSTIPPLEARBPROC epoxy_glGetnPolygonStippleARB; + PFNGLGETNSEPARABLEFILTERPROC epoxy_glGetnSeparableFilter; + PFNGLGETNSEPARABLEFILTERARBPROC epoxy_glGetnSeparableFilterARB; + PFNGLGETNTEXIMAGEPROC epoxy_glGetnTexImage; + PFNGLGETNTEXIMAGEARBPROC epoxy_glGetnTexImageARB; + PFNGLGETNUNIFORMDVPROC epoxy_glGetnUniformdv; + PFNGLGETNUNIFORMDVARBPROC epoxy_glGetnUniformdvARB; + PFNGLGETNUNIFORMFVPROC epoxy_glGetnUniformfv; + PFNGLGETNUNIFORMFVARBPROC epoxy_glGetnUniformfvARB; + PFNGLGETNUNIFORMFVEXTPROC epoxy_glGetnUniformfvEXT; + PFNGLGETNUNIFORMFVKHRPROC epoxy_glGetnUniformfvKHR; + PFNGLGETNUNIFORMI64VARBPROC epoxy_glGetnUniformi64vARB; + PFNGLGETNUNIFORMIVPROC epoxy_glGetnUniformiv; + PFNGLGETNUNIFORMIVARBPROC epoxy_glGetnUniformivARB; + PFNGLGETNUNIFORMIVEXTPROC epoxy_glGetnUniformivEXT; + PFNGLGETNUNIFORMIVKHRPROC epoxy_glGetnUniformivKHR; + PFNGLGETNUNIFORMUI64VARBPROC epoxy_glGetnUniformui64vARB; + PFNGLGETNUNIFORMUIVPROC epoxy_glGetnUniformuiv; + PFNGLGETNUNIFORMUIVARBPROC epoxy_glGetnUniformuivARB; + PFNGLGETNUNIFORMUIVKHRPROC epoxy_glGetnUniformuivKHR; + PFNGLGLOBALALPHAFACTORBSUNPROC epoxy_glGlobalAlphaFactorbSUN; + PFNGLGLOBALALPHAFACTORDSUNPROC epoxy_glGlobalAlphaFactordSUN; + PFNGLGLOBALALPHAFACTORFSUNPROC epoxy_glGlobalAlphaFactorfSUN; + PFNGLGLOBALALPHAFACTORISUNPROC epoxy_glGlobalAlphaFactoriSUN; + PFNGLGLOBALALPHAFACTORSSUNPROC epoxy_glGlobalAlphaFactorsSUN; + PFNGLGLOBALALPHAFACTORUBSUNPROC epoxy_glGlobalAlphaFactorubSUN; + PFNGLGLOBALALPHAFACTORUISUNPROC epoxy_glGlobalAlphaFactoruiSUN; + PFNGLGLOBALALPHAFACTORUSSUNPROC epoxy_glGlobalAlphaFactorusSUN; + PFNGLHINTPROC epoxy_glHint; + PFNGLHINTPGIPROC epoxy_glHintPGI; + PFNGLHISTOGRAMPROC epoxy_glHistogram; + PFNGLHISTOGRAMEXTPROC epoxy_glHistogramEXT; + PFNGLIGLOOINTERFACESGIXPROC epoxy_glIglooInterfaceSGIX; + PFNGLIMAGETRANSFORMPARAMETERFHPPROC epoxy_glImageTransformParameterfHP; + PFNGLIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glImageTransformParameterfvHP; + PFNGLIMAGETRANSFORMPARAMETERIHPPROC epoxy_glImageTransformParameteriHP; + PFNGLIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glImageTransformParameterivHP; + PFNGLIMPORTSYNCEXTPROC epoxy_glImportSyncEXT; + PFNGLINDEXFORMATNVPROC epoxy_glIndexFormatNV; + PFNGLINDEXFUNCEXTPROC epoxy_glIndexFuncEXT; + PFNGLINDEXMASKPROC epoxy_glIndexMask; + PFNGLINDEXMATERIALEXTPROC epoxy_glIndexMaterialEXT; + PFNGLINDEXPOINTERPROC epoxy_glIndexPointer; + PFNGLINDEXPOINTEREXTPROC epoxy_glIndexPointerEXT; + PFNGLINDEXPOINTERLISTIBMPROC epoxy_glIndexPointerListIBM; + PFNGLINDEXDPROC epoxy_glIndexd; + PFNGLINDEXDVPROC epoxy_glIndexdv; + PFNGLINDEXFPROC epoxy_glIndexf; + PFNGLINDEXFVPROC epoxy_glIndexfv; + PFNGLINDEXIPROC epoxy_glIndexi; + PFNGLINDEXIVPROC epoxy_glIndexiv; + PFNGLINDEXSPROC epoxy_glIndexs; + PFNGLINDEXSVPROC epoxy_glIndexsv; + PFNGLINDEXUBPROC epoxy_glIndexub; + PFNGLINDEXUBVPROC epoxy_glIndexubv; + PFNGLINDEXXOESPROC epoxy_glIndexxOES; + PFNGLINDEXXVOESPROC epoxy_glIndexxvOES; + PFNGLINITNAMESPROC epoxy_glInitNames; + PFNGLINSERTCOMPONENTEXTPROC epoxy_glInsertComponentEXT; + PFNGLINSERTEVENTMARKEREXTPROC epoxy_glInsertEventMarkerEXT; + PFNGLINSTRUMENTSBUFFERSGIXPROC epoxy_glInstrumentsBufferSGIX; + PFNGLINTERLEAVEDARRAYSPROC epoxy_glInterleavedArrays; + PFNGLINTERPOLATEPATHSNVPROC epoxy_glInterpolatePathsNV; + PFNGLINVALIDATEBUFFERDATAPROC epoxy_glInvalidateBufferData; + PFNGLINVALIDATEBUFFERSUBDATAPROC epoxy_glInvalidateBufferSubData; + PFNGLINVALIDATEFRAMEBUFFERPROC epoxy_glInvalidateFramebuffer; + PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC epoxy_glInvalidateNamedFramebufferData; + PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC epoxy_glInvalidateNamedFramebufferSubData; + PFNGLINVALIDATESUBFRAMEBUFFERPROC epoxy_glInvalidateSubFramebuffer; + PFNGLINVALIDATETEXIMAGEPROC epoxy_glInvalidateTexImage; + PFNGLINVALIDATETEXSUBIMAGEPROC epoxy_glInvalidateTexSubImage; + PFNGLISASYNCMARKERSGIXPROC epoxy_glIsAsyncMarkerSGIX; + PFNGLISBUFFERPROC epoxy_glIsBuffer; + PFNGLISBUFFERARBPROC epoxy_glIsBufferARB; + PFNGLISBUFFERRESIDENTNVPROC epoxy_glIsBufferResidentNV; + PFNGLISCOMMANDLISTNVPROC epoxy_glIsCommandListNV; + PFNGLISENABLEDPROC epoxy_glIsEnabled; + PFNGLISENABLEDINDEXEDEXTPROC epoxy_glIsEnabledIndexedEXT; + PFNGLISENABLEDIPROC epoxy_glIsEnabledi; + PFNGLISENABLEDIEXTPROC epoxy_glIsEnablediEXT; + PFNGLISENABLEDINVPROC epoxy_glIsEnablediNV; + PFNGLISENABLEDIOESPROC epoxy_glIsEnablediOES; + PFNGLISFENCEAPPLEPROC epoxy_glIsFenceAPPLE; + PFNGLISFENCENVPROC epoxy_glIsFenceNV; + PFNGLISFRAMEBUFFERPROC epoxy_glIsFramebuffer; + PFNGLISFRAMEBUFFEREXTPROC epoxy_glIsFramebufferEXT; + PFNGLISFRAMEBUFFEROESPROC epoxy_glIsFramebufferOES; + PFNGLISIMAGEHANDLERESIDENTARBPROC epoxy_glIsImageHandleResidentARB; + PFNGLISIMAGEHANDLERESIDENTNVPROC epoxy_glIsImageHandleResidentNV; + PFNGLISLISTPROC epoxy_glIsList; + PFNGLISNAMEAMDPROC epoxy_glIsNameAMD; + PFNGLISNAMEDBUFFERRESIDENTNVPROC epoxy_glIsNamedBufferResidentNV; + PFNGLISNAMEDSTRINGARBPROC epoxy_glIsNamedStringARB; + PFNGLISOBJECTBUFFERATIPROC epoxy_glIsObjectBufferATI; + PFNGLISOCCLUSIONQUERYNVPROC epoxy_glIsOcclusionQueryNV; + PFNGLISPATHNVPROC epoxy_glIsPathNV; + PFNGLISPOINTINFILLPATHNVPROC epoxy_glIsPointInFillPathNV; + PFNGLISPOINTINSTROKEPATHNVPROC epoxy_glIsPointInStrokePathNV; + PFNGLISPROGRAMPROC epoxy_glIsProgram; + PFNGLISPROGRAMARBPROC epoxy_glIsProgramARB; + PFNGLISPROGRAMNVPROC epoxy_glIsProgramNV; + PFNGLISPROGRAMPIPELINEPROC epoxy_glIsProgramPipeline; + PFNGLISPROGRAMPIPELINEEXTPROC epoxy_glIsProgramPipelineEXT; + PFNGLISQUERYPROC epoxy_glIsQuery; + PFNGLISQUERYARBPROC epoxy_glIsQueryARB; + PFNGLISQUERYEXTPROC epoxy_glIsQueryEXT; + PFNGLISRENDERBUFFERPROC epoxy_glIsRenderbuffer; + PFNGLISRENDERBUFFEREXTPROC epoxy_glIsRenderbufferEXT; + PFNGLISRENDERBUFFEROESPROC epoxy_glIsRenderbufferOES; + PFNGLISSAMPLERPROC epoxy_glIsSampler; + PFNGLISSHADERPROC epoxy_glIsShader; + PFNGLISSTATENVPROC epoxy_glIsStateNV; + PFNGLISSYNCPROC epoxy_glIsSync; + PFNGLISSYNCAPPLEPROC epoxy_glIsSyncAPPLE; + PFNGLISTEXTUREPROC epoxy_glIsTexture; + PFNGLISTEXTUREEXTPROC epoxy_glIsTextureEXT; + PFNGLISTEXTUREHANDLERESIDENTARBPROC epoxy_glIsTextureHandleResidentARB; + PFNGLISTEXTUREHANDLERESIDENTNVPROC epoxy_glIsTextureHandleResidentNV; + PFNGLISTRANSFORMFEEDBACKPROC epoxy_glIsTransformFeedback; + PFNGLISTRANSFORMFEEDBACKNVPROC epoxy_glIsTransformFeedbackNV; + PFNGLISVARIANTENABLEDEXTPROC epoxy_glIsVariantEnabledEXT; + PFNGLISVERTEXARRAYPROC epoxy_glIsVertexArray; + PFNGLISVERTEXARRAYAPPLEPROC epoxy_glIsVertexArrayAPPLE; + PFNGLISVERTEXARRAYOESPROC epoxy_glIsVertexArrayOES; + PFNGLISVERTEXATTRIBENABLEDAPPLEPROC epoxy_glIsVertexAttribEnabledAPPLE; + PFNGLLABELOBJECTEXTPROC epoxy_glLabelObjectEXT; + PFNGLLIGHTENVISGIXPROC epoxy_glLightEnviSGIX; + PFNGLLIGHTMODELFPROC epoxy_glLightModelf; + PFNGLLIGHTMODELFVPROC epoxy_glLightModelfv; + PFNGLLIGHTMODELIPROC epoxy_glLightModeli; + PFNGLLIGHTMODELIVPROC epoxy_glLightModeliv; + PFNGLLIGHTMODELXPROC epoxy_glLightModelx; + PFNGLLIGHTMODELXOESPROC epoxy_glLightModelxOES; + PFNGLLIGHTMODELXVPROC epoxy_glLightModelxv; + PFNGLLIGHTMODELXVOESPROC epoxy_glLightModelxvOES; + PFNGLLIGHTFPROC epoxy_glLightf; + PFNGLLIGHTFVPROC epoxy_glLightfv; + PFNGLLIGHTIPROC epoxy_glLighti; + PFNGLLIGHTIVPROC epoxy_glLightiv; + PFNGLLIGHTXPROC epoxy_glLightx; + PFNGLLIGHTXOESPROC epoxy_glLightxOES; + PFNGLLIGHTXVPROC epoxy_glLightxv; + PFNGLLIGHTXVOESPROC epoxy_glLightxvOES; + PFNGLLINESTIPPLEPROC epoxy_glLineStipple; + PFNGLLINEWIDTHPROC epoxy_glLineWidth; + PFNGLLINEWIDTHXPROC epoxy_glLineWidthx; + PFNGLLINEWIDTHXOESPROC epoxy_glLineWidthxOES; + PFNGLLINKPROGRAMPROC epoxy_glLinkProgram; + PFNGLLINKPROGRAMARBPROC epoxy_glLinkProgramARB; + PFNGLLISTBASEPROC epoxy_glListBase; + PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC epoxy_glListDrawCommandsStatesClientNV; + PFNGLLISTPARAMETERFSGIXPROC epoxy_glListParameterfSGIX; + PFNGLLISTPARAMETERFVSGIXPROC epoxy_glListParameterfvSGIX; + PFNGLLISTPARAMETERISGIXPROC epoxy_glListParameteriSGIX; + PFNGLLISTPARAMETERIVSGIXPROC epoxy_glListParameterivSGIX; + PFNGLLOADIDENTITYPROC epoxy_glLoadIdentity; + PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC epoxy_glLoadIdentityDeformationMapSGIX; + PFNGLLOADMATRIXDPROC epoxy_glLoadMatrixd; + PFNGLLOADMATRIXFPROC epoxy_glLoadMatrixf; + PFNGLLOADMATRIXXPROC epoxy_glLoadMatrixx; + PFNGLLOADMATRIXXOESPROC epoxy_glLoadMatrixxOES; + PFNGLLOADNAMEPROC epoxy_glLoadName; + PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC epoxy_glLoadPaletteFromModelViewMatrixOES; + PFNGLLOADPROGRAMNVPROC epoxy_glLoadProgramNV; + PFNGLLOADTRANSPOSEMATRIXDPROC epoxy_glLoadTransposeMatrixd; + PFNGLLOADTRANSPOSEMATRIXDARBPROC epoxy_glLoadTransposeMatrixdARB; + PFNGLLOADTRANSPOSEMATRIXFPROC epoxy_glLoadTransposeMatrixf; + PFNGLLOADTRANSPOSEMATRIXFARBPROC epoxy_glLoadTransposeMatrixfARB; + PFNGLLOADTRANSPOSEMATRIXXOESPROC epoxy_glLoadTransposeMatrixxOES; + PFNGLLOCKARRAYSEXTPROC epoxy_glLockArraysEXT; + PFNGLLOGICOPPROC epoxy_glLogicOp; + PFNGLMAKEBUFFERNONRESIDENTNVPROC epoxy_glMakeBufferNonResidentNV; + PFNGLMAKEBUFFERRESIDENTNVPROC epoxy_glMakeBufferResidentNV; + PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC epoxy_glMakeImageHandleNonResidentARB; + PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC epoxy_glMakeImageHandleNonResidentNV; + PFNGLMAKEIMAGEHANDLERESIDENTARBPROC epoxy_glMakeImageHandleResidentARB; + PFNGLMAKEIMAGEHANDLERESIDENTNVPROC epoxy_glMakeImageHandleResidentNV; + PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC epoxy_glMakeNamedBufferNonResidentNV; + PFNGLMAKENAMEDBUFFERRESIDENTNVPROC epoxy_glMakeNamedBufferResidentNV; + PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC epoxy_glMakeTextureHandleNonResidentARB; + PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC epoxy_glMakeTextureHandleNonResidentNV; + PFNGLMAKETEXTUREHANDLERESIDENTARBPROC epoxy_glMakeTextureHandleResidentARB; + PFNGLMAKETEXTUREHANDLERESIDENTNVPROC epoxy_glMakeTextureHandleResidentNV; + PFNGLMAP1DPROC epoxy_glMap1d; + PFNGLMAP1FPROC epoxy_glMap1f; + PFNGLMAP1XOESPROC epoxy_glMap1xOES; + PFNGLMAP2DPROC epoxy_glMap2d; + PFNGLMAP2FPROC epoxy_glMap2f; + PFNGLMAP2XOESPROC epoxy_glMap2xOES; + PFNGLMAPBUFFERPROC epoxy_glMapBuffer; + PFNGLMAPBUFFERARBPROC epoxy_glMapBufferARB; + PFNGLMAPBUFFEROESPROC epoxy_glMapBufferOES; + PFNGLMAPBUFFERRANGEPROC epoxy_glMapBufferRange; + PFNGLMAPBUFFERRANGEEXTPROC epoxy_glMapBufferRangeEXT; + PFNGLMAPCONTROLPOINTSNVPROC epoxy_glMapControlPointsNV; + PFNGLMAPGRID1DPROC epoxy_glMapGrid1d; + PFNGLMAPGRID1FPROC epoxy_glMapGrid1f; + PFNGLMAPGRID1XOESPROC epoxy_glMapGrid1xOES; + PFNGLMAPGRID2DPROC epoxy_glMapGrid2d; + PFNGLMAPGRID2FPROC epoxy_glMapGrid2f; + PFNGLMAPGRID2XOESPROC epoxy_glMapGrid2xOES; + PFNGLMAPNAMEDBUFFERPROC epoxy_glMapNamedBuffer; + PFNGLMAPNAMEDBUFFEREXTPROC epoxy_glMapNamedBufferEXT; + PFNGLMAPNAMEDBUFFERRANGEPROC epoxy_glMapNamedBufferRange; + PFNGLMAPNAMEDBUFFERRANGEEXTPROC epoxy_glMapNamedBufferRangeEXT; + PFNGLMAPOBJECTBUFFERATIPROC epoxy_glMapObjectBufferATI; + PFNGLMAPPARAMETERFVNVPROC epoxy_glMapParameterfvNV; + PFNGLMAPPARAMETERIVNVPROC epoxy_glMapParameterivNV; + PFNGLMAPTEXTURE2DINTELPROC epoxy_glMapTexture2DINTEL; + PFNGLMAPVERTEXATTRIB1DAPPLEPROC epoxy_glMapVertexAttrib1dAPPLE; + PFNGLMAPVERTEXATTRIB1FAPPLEPROC epoxy_glMapVertexAttrib1fAPPLE; + PFNGLMAPVERTEXATTRIB2DAPPLEPROC epoxy_glMapVertexAttrib2dAPPLE; + PFNGLMAPVERTEXATTRIB2FAPPLEPROC epoxy_glMapVertexAttrib2fAPPLE; + PFNGLMATERIALFPROC epoxy_glMaterialf; + PFNGLMATERIALFVPROC epoxy_glMaterialfv; + PFNGLMATERIALIPROC epoxy_glMateriali; + PFNGLMATERIALIVPROC epoxy_glMaterialiv; + PFNGLMATERIALXPROC epoxy_glMaterialx; + PFNGLMATERIALXOESPROC epoxy_glMaterialxOES; + PFNGLMATERIALXVPROC epoxy_glMaterialxv; + PFNGLMATERIALXVOESPROC epoxy_glMaterialxvOES; + PFNGLMATRIXFRUSTUMEXTPROC epoxy_glMatrixFrustumEXT; + PFNGLMATRIXINDEXPOINTERARBPROC epoxy_glMatrixIndexPointerARB; + PFNGLMATRIXINDEXPOINTEROESPROC epoxy_glMatrixIndexPointerOES; + PFNGLMATRIXINDEXUBVARBPROC epoxy_glMatrixIndexubvARB; + PFNGLMATRIXINDEXUIVARBPROC epoxy_glMatrixIndexuivARB; + PFNGLMATRIXINDEXUSVARBPROC epoxy_glMatrixIndexusvARB; + PFNGLMATRIXLOAD3X2FNVPROC epoxy_glMatrixLoad3x2fNV; + PFNGLMATRIXLOAD3X3FNVPROC epoxy_glMatrixLoad3x3fNV; + PFNGLMATRIXLOADIDENTITYEXTPROC epoxy_glMatrixLoadIdentityEXT; + PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC epoxy_glMatrixLoadTranspose3x3fNV; + PFNGLMATRIXLOADTRANSPOSEDEXTPROC epoxy_glMatrixLoadTransposedEXT; + PFNGLMATRIXLOADTRANSPOSEFEXTPROC epoxy_glMatrixLoadTransposefEXT; + PFNGLMATRIXLOADDEXTPROC epoxy_glMatrixLoaddEXT; + PFNGLMATRIXLOADFEXTPROC epoxy_glMatrixLoadfEXT; + PFNGLMATRIXMODEPROC epoxy_glMatrixMode; + PFNGLMATRIXMULT3X2FNVPROC epoxy_glMatrixMult3x2fNV; + PFNGLMATRIXMULT3X3FNVPROC epoxy_glMatrixMult3x3fNV; + PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC epoxy_glMatrixMultTranspose3x3fNV; + PFNGLMATRIXMULTTRANSPOSEDEXTPROC epoxy_glMatrixMultTransposedEXT; + PFNGLMATRIXMULTTRANSPOSEFEXTPROC epoxy_glMatrixMultTransposefEXT; + PFNGLMATRIXMULTDEXTPROC epoxy_glMatrixMultdEXT; + PFNGLMATRIXMULTFEXTPROC epoxy_glMatrixMultfEXT; + PFNGLMATRIXORTHOEXTPROC epoxy_glMatrixOrthoEXT; + PFNGLMATRIXPOPEXTPROC epoxy_glMatrixPopEXT; + PFNGLMATRIXPUSHEXTPROC epoxy_glMatrixPushEXT; + PFNGLMATRIXROTATEDEXTPROC epoxy_glMatrixRotatedEXT; + PFNGLMATRIXROTATEFEXTPROC epoxy_glMatrixRotatefEXT; + PFNGLMATRIXSCALEDEXTPROC epoxy_glMatrixScaledEXT; + PFNGLMATRIXSCALEFEXTPROC epoxy_glMatrixScalefEXT; + PFNGLMATRIXTRANSLATEDEXTPROC epoxy_glMatrixTranslatedEXT; + PFNGLMATRIXTRANSLATEFEXTPROC epoxy_glMatrixTranslatefEXT; + PFNGLMAXSHADERCOMPILERTHREADSARBPROC epoxy_glMaxShaderCompilerThreadsARB; + PFNGLMEMORYBARRIERPROC epoxy_glMemoryBarrier; + PFNGLMEMORYBARRIERBYREGIONPROC epoxy_glMemoryBarrierByRegion; + PFNGLMEMORYBARRIEREXTPROC epoxy_glMemoryBarrierEXT; + PFNGLMINSAMPLESHADINGPROC epoxy_glMinSampleShading; + PFNGLMINSAMPLESHADINGARBPROC epoxy_glMinSampleShadingARB; + PFNGLMINSAMPLESHADINGOESPROC epoxy_glMinSampleShadingOES; + PFNGLMINMAXPROC epoxy_glMinmax; + PFNGLMINMAXEXTPROC epoxy_glMinmaxEXT; + PFNGLMULTMATRIXDPROC epoxy_glMultMatrixd; + PFNGLMULTMATRIXFPROC epoxy_glMultMatrixf; + PFNGLMULTMATRIXXPROC epoxy_glMultMatrixx; + PFNGLMULTMATRIXXOESPROC epoxy_glMultMatrixxOES; + PFNGLMULTTRANSPOSEMATRIXDPROC epoxy_glMultTransposeMatrixd; + PFNGLMULTTRANSPOSEMATRIXDARBPROC epoxy_glMultTransposeMatrixdARB; + PFNGLMULTTRANSPOSEMATRIXFPROC epoxy_glMultTransposeMatrixf; + PFNGLMULTTRANSPOSEMATRIXFARBPROC epoxy_glMultTransposeMatrixfARB; + PFNGLMULTTRANSPOSEMATRIXXOESPROC epoxy_glMultTransposeMatrixxOES; + PFNGLMULTIDRAWARRAYSPROC epoxy_glMultiDrawArrays; + PFNGLMULTIDRAWARRAYSEXTPROC epoxy_glMultiDrawArraysEXT; + PFNGLMULTIDRAWARRAYSINDIRECTPROC epoxy_glMultiDrawArraysIndirect; + PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC epoxy_glMultiDrawArraysIndirectAMD; + PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawArraysIndirectBindlessCountNV; + PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawArraysIndirectBindlessNV; + PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC epoxy_glMultiDrawArraysIndirectCountARB; + PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC epoxy_glMultiDrawArraysIndirectEXT; + PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC epoxy_glMultiDrawElementArrayAPPLE; + PFNGLMULTIDRAWELEMENTSPROC epoxy_glMultiDrawElements; + PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC epoxy_glMultiDrawElementsBaseVertex; + PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glMultiDrawElementsBaseVertexEXT; + PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC epoxy_glMultiDrawElementsBaseVertexOES; + PFNGLMULTIDRAWELEMENTSEXTPROC epoxy_glMultiDrawElementsEXT; + PFNGLMULTIDRAWELEMENTSINDIRECTPROC epoxy_glMultiDrawElementsIndirect; + PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC epoxy_glMultiDrawElementsIndirectAMD; + PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawElementsIndirectBindlessCountNV; + PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawElementsIndirectBindlessNV; + PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC epoxy_glMultiDrawElementsIndirectCountARB; + PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC epoxy_glMultiDrawElementsIndirectEXT; + PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glMultiDrawRangeElementArrayAPPLE; + PFNGLMULTIMODEDRAWARRAYSIBMPROC epoxy_glMultiModeDrawArraysIBM; + PFNGLMULTIMODEDRAWELEMENTSIBMPROC epoxy_glMultiModeDrawElementsIBM; + PFNGLMULTITEXBUFFEREXTPROC epoxy_glMultiTexBufferEXT; + PFNGLMULTITEXCOORD1BOESPROC epoxy_glMultiTexCoord1bOES; + PFNGLMULTITEXCOORD1BVOESPROC epoxy_glMultiTexCoord1bvOES; + PFNGLMULTITEXCOORD1DPROC epoxy_glMultiTexCoord1d; + PFNGLMULTITEXCOORD1DARBPROC epoxy_glMultiTexCoord1dARB; + PFNGLMULTITEXCOORD1DVPROC epoxy_glMultiTexCoord1dv; + PFNGLMULTITEXCOORD1DVARBPROC epoxy_glMultiTexCoord1dvARB; + PFNGLMULTITEXCOORD1FPROC epoxy_glMultiTexCoord1f; + PFNGLMULTITEXCOORD1FARBPROC epoxy_glMultiTexCoord1fARB; + PFNGLMULTITEXCOORD1FVPROC epoxy_glMultiTexCoord1fv; + PFNGLMULTITEXCOORD1FVARBPROC epoxy_glMultiTexCoord1fvARB; + PFNGLMULTITEXCOORD1HNVPROC epoxy_glMultiTexCoord1hNV; + PFNGLMULTITEXCOORD1HVNVPROC epoxy_glMultiTexCoord1hvNV; + PFNGLMULTITEXCOORD1IPROC epoxy_glMultiTexCoord1i; + PFNGLMULTITEXCOORD1IARBPROC epoxy_glMultiTexCoord1iARB; + PFNGLMULTITEXCOORD1IVPROC epoxy_glMultiTexCoord1iv; + PFNGLMULTITEXCOORD1IVARBPROC epoxy_glMultiTexCoord1ivARB; + PFNGLMULTITEXCOORD1SPROC epoxy_glMultiTexCoord1s; + PFNGLMULTITEXCOORD1SARBPROC epoxy_glMultiTexCoord1sARB; + PFNGLMULTITEXCOORD1SVPROC epoxy_glMultiTexCoord1sv; + PFNGLMULTITEXCOORD1SVARBPROC epoxy_glMultiTexCoord1svARB; + PFNGLMULTITEXCOORD1XOESPROC epoxy_glMultiTexCoord1xOES; + PFNGLMULTITEXCOORD1XVOESPROC epoxy_glMultiTexCoord1xvOES; + PFNGLMULTITEXCOORD2BOESPROC epoxy_glMultiTexCoord2bOES; + PFNGLMULTITEXCOORD2BVOESPROC epoxy_glMultiTexCoord2bvOES; + PFNGLMULTITEXCOORD2DPROC epoxy_glMultiTexCoord2d; + PFNGLMULTITEXCOORD2DARBPROC epoxy_glMultiTexCoord2dARB; + PFNGLMULTITEXCOORD2DVPROC epoxy_glMultiTexCoord2dv; + PFNGLMULTITEXCOORD2DVARBPROC epoxy_glMultiTexCoord2dvARB; + PFNGLMULTITEXCOORD2FPROC epoxy_glMultiTexCoord2f; + PFNGLMULTITEXCOORD2FARBPROC epoxy_glMultiTexCoord2fARB; + PFNGLMULTITEXCOORD2FVPROC epoxy_glMultiTexCoord2fv; + PFNGLMULTITEXCOORD2FVARBPROC epoxy_glMultiTexCoord2fvARB; + PFNGLMULTITEXCOORD2HNVPROC epoxy_glMultiTexCoord2hNV; + PFNGLMULTITEXCOORD2HVNVPROC epoxy_glMultiTexCoord2hvNV; + PFNGLMULTITEXCOORD2IPROC epoxy_glMultiTexCoord2i; + PFNGLMULTITEXCOORD2IARBPROC epoxy_glMultiTexCoord2iARB; + PFNGLMULTITEXCOORD2IVPROC epoxy_glMultiTexCoord2iv; + PFNGLMULTITEXCOORD2IVARBPROC epoxy_glMultiTexCoord2ivARB; + PFNGLMULTITEXCOORD2SPROC epoxy_glMultiTexCoord2s; + PFNGLMULTITEXCOORD2SARBPROC epoxy_glMultiTexCoord2sARB; + PFNGLMULTITEXCOORD2SVPROC epoxy_glMultiTexCoord2sv; + PFNGLMULTITEXCOORD2SVARBPROC epoxy_glMultiTexCoord2svARB; + PFNGLMULTITEXCOORD2XOESPROC epoxy_glMultiTexCoord2xOES; + PFNGLMULTITEXCOORD2XVOESPROC epoxy_glMultiTexCoord2xvOES; + PFNGLMULTITEXCOORD3BOESPROC epoxy_glMultiTexCoord3bOES; + PFNGLMULTITEXCOORD3BVOESPROC epoxy_glMultiTexCoord3bvOES; + PFNGLMULTITEXCOORD3DPROC epoxy_glMultiTexCoord3d; + PFNGLMULTITEXCOORD3DARBPROC epoxy_glMultiTexCoord3dARB; + PFNGLMULTITEXCOORD3DVPROC epoxy_glMultiTexCoord3dv; + PFNGLMULTITEXCOORD3DVARBPROC epoxy_glMultiTexCoord3dvARB; + PFNGLMULTITEXCOORD3FPROC epoxy_glMultiTexCoord3f; + PFNGLMULTITEXCOORD3FARBPROC epoxy_glMultiTexCoord3fARB; + PFNGLMULTITEXCOORD3FVPROC epoxy_glMultiTexCoord3fv; + PFNGLMULTITEXCOORD3FVARBPROC epoxy_glMultiTexCoord3fvARB; + PFNGLMULTITEXCOORD3HNVPROC epoxy_glMultiTexCoord3hNV; + PFNGLMULTITEXCOORD3HVNVPROC epoxy_glMultiTexCoord3hvNV; + PFNGLMULTITEXCOORD3IPROC epoxy_glMultiTexCoord3i; + PFNGLMULTITEXCOORD3IARBPROC epoxy_glMultiTexCoord3iARB; + PFNGLMULTITEXCOORD3IVPROC epoxy_glMultiTexCoord3iv; + PFNGLMULTITEXCOORD3IVARBPROC epoxy_glMultiTexCoord3ivARB; + PFNGLMULTITEXCOORD3SPROC epoxy_glMultiTexCoord3s; + PFNGLMULTITEXCOORD3SARBPROC epoxy_glMultiTexCoord3sARB; + PFNGLMULTITEXCOORD3SVPROC epoxy_glMultiTexCoord3sv; + PFNGLMULTITEXCOORD3SVARBPROC epoxy_glMultiTexCoord3svARB; + PFNGLMULTITEXCOORD3XOESPROC epoxy_glMultiTexCoord3xOES; + PFNGLMULTITEXCOORD3XVOESPROC epoxy_glMultiTexCoord3xvOES; + PFNGLMULTITEXCOORD4BOESPROC epoxy_glMultiTexCoord4bOES; + PFNGLMULTITEXCOORD4BVOESPROC epoxy_glMultiTexCoord4bvOES; + PFNGLMULTITEXCOORD4DPROC epoxy_glMultiTexCoord4d; + PFNGLMULTITEXCOORD4DARBPROC epoxy_glMultiTexCoord4dARB; + PFNGLMULTITEXCOORD4DVPROC epoxy_glMultiTexCoord4dv; + PFNGLMULTITEXCOORD4DVARBPROC epoxy_glMultiTexCoord4dvARB; + PFNGLMULTITEXCOORD4FPROC epoxy_glMultiTexCoord4f; + PFNGLMULTITEXCOORD4FARBPROC epoxy_glMultiTexCoord4fARB; + PFNGLMULTITEXCOORD4FVPROC epoxy_glMultiTexCoord4fv; + PFNGLMULTITEXCOORD4FVARBPROC epoxy_glMultiTexCoord4fvARB; + PFNGLMULTITEXCOORD4HNVPROC epoxy_glMultiTexCoord4hNV; + PFNGLMULTITEXCOORD4HVNVPROC epoxy_glMultiTexCoord4hvNV; + PFNGLMULTITEXCOORD4IPROC epoxy_glMultiTexCoord4i; + PFNGLMULTITEXCOORD4IARBPROC epoxy_glMultiTexCoord4iARB; + PFNGLMULTITEXCOORD4IVPROC epoxy_glMultiTexCoord4iv; + PFNGLMULTITEXCOORD4IVARBPROC epoxy_glMultiTexCoord4ivARB; + PFNGLMULTITEXCOORD4SPROC epoxy_glMultiTexCoord4s; + PFNGLMULTITEXCOORD4SARBPROC epoxy_glMultiTexCoord4sARB; + PFNGLMULTITEXCOORD4SVPROC epoxy_glMultiTexCoord4sv; + PFNGLMULTITEXCOORD4SVARBPROC epoxy_glMultiTexCoord4svARB; + PFNGLMULTITEXCOORD4XPROC epoxy_glMultiTexCoord4x; + PFNGLMULTITEXCOORD4XOESPROC epoxy_glMultiTexCoord4xOES; + PFNGLMULTITEXCOORD4XVOESPROC epoxy_glMultiTexCoord4xvOES; + PFNGLMULTITEXCOORDP1UIPROC epoxy_glMultiTexCoordP1ui; + PFNGLMULTITEXCOORDP1UIVPROC epoxy_glMultiTexCoordP1uiv; + PFNGLMULTITEXCOORDP2UIPROC epoxy_glMultiTexCoordP2ui; + PFNGLMULTITEXCOORDP2UIVPROC epoxy_glMultiTexCoordP2uiv; + PFNGLMULTITEXCOORDP3UIPROC epoxy_glMultiTexCoordP3ui; + PFNGLMULTITEXCOORDP3UIVPROC epoxy_glMultiTexCoordP3uiv; + PFNGLMULTITEXCOORDP4UIPROC epoxy_glMultiTexCoordP4ui; + PFNGLMULTITEXCOORDP4UIVPROC epoxy_glMultiTexCoordP4uiv; + PFNGLMULTITEXCOORDPOINTEREXTPROC epoxy_glMultiTexCoordPointerEXT; + PFNGLMULTITEXENVFEXTPROC epoxy_glMultiTexEnvfEXT; + PFNGLMULTITEXENVFVEXTPROC epoxy_glMultiTexEnvfvEXT; + PFNGLMULTITEXENVIEXTPROC epoxy_glMultiTexEnviEXT; + PFNGLMULTITEXENVIVEXTPROC epoxy_glMultiTexEnvivEXT; + PFNGLMULTITEXGENDEXTPROC epoxy_glMultiTexGendEXT; + PFNGLMULTITEXGENDVEXTPROC epoxy_glMultiTexGendvEXT; + PFNGLMULTITEXGENFEXTPROC epoxy_glMultiTexGenfEXT; + PFNGLMULTITEXGENFVEXTPROC epoxy_glMultiTexGenfvEXT; + PFNGLMULTITEXGENIEXTPROC epoxy_glMultiTexGeniEXT; + PFNGLMULTITEXGENIVEXTPROC epoxy_glMultiTexGenivEXT; + PFNGLMULTITEXIMAGE1DEXTPROC epoxy_glMultiTexImage1DEXT; + PFNGLMULTITEXIMAGE2DEXTPROC epoxy_glMultiTexImage2DEXT; + PFNGLMULTITEXIMAGE3DEXTPROC epoxy_glMultiTexImage3DEXT; + PFNGLMULTITEXPARAMETERIIVEXTPROC epoxy_glMultiTexParameterIivEXT; + PFNGLMULTITEXPARAMETERIUIVEXTPROC epoxy_glMultiTexParameterIuivEXT; + PFNGLMULTITEXPARAMETERFEXTPROC epoxy_glMultiTexParameterfEXT; + PFNGLMULTITEXPARAMETERFVEXTPROC epoxy_glMultiTexParameterfvEXT; + PFNGLMULTITEXPARAMETERIEXTPROC epoxy_glMultiTexParameteriEXT; + PFNGLMULTITEXPARAMETERIVEXTPROC epoxy_glMultiTexParameterivEXT; + PFNGLMULTITEXRENDERBUFFEREXTPROC epoxy_glMultiTexRenderbufferEXT; + PFNGLMULTITEXSUBIMAGE1DEXTPROC epoxy_glMultiTexSubImage1DEXT; + PFNGLMULTITEXSUBIMAGE2DEXTPROC epoxy_glMultiTexSubImage2DEXT; + PFNGLMULTITEXSUBIMAGE3DEXTPROC epoxy_glMultiTexSubImage3DEXT; + PFNGLNAMEDBUFFERDATAPROC epoxy_glNamedBufferData; + PFNGLNAMEDBUFFERDATAEXTPROC epoxy_glNamedBufferDataEXT; + PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC epoxy_glNamedBufferPageCommitmentARB; + PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC epoxy_glNamedBufferPageCommitmentEXT; + PFNGLNAMEDBUFFERSTORAGEPROC epoxy_glNamedBufferStorage; + PFNGLNAMEDBUFFERSTORAGEEXTPROC epoxy_glNamedBufferStorageEXT; + PFNGLNAMEDBUFFERSUBDATAPROC epoxy_glNamedBufferSubData; + PFNGLNAMEDBUFFERSUBDATAEXTPROC epoxy_glNamedBufferSubDataEXT; + PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC epoxy_glNamedCopyBufferSubDataEXT; + PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC epoxy_glNamedFramebufferDrawBuffer; + PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC epoxy_glNamedFramebufferDrawBuffers; + PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC epoxy_glNamedFramebufferParameteri; + PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC epoxy_glNamedFramebufferParameteriEXT; + PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC epoxy_glNamedFramebufferReadBuffer; + PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC epoxy_glNamedFramebufferRenderbuffer; + PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glNamedFramebufferRenderbufferEXT; + PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glNamedFramebufferSampleLocationsfvARB; + PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glNamedFramebufferSampleLocationsfvNV; + PFNGLNAMEDFRAMEBUFFERTEXTUREPROC epoxy_glNamedFramebufferTexture; + PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glNamedFramebufferTexture1DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glNamedFramebufferTexture2DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glNamedFramebufferTexture3DEXT; + PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC epoxy_glNamedFramebufferTextureEXT; + PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glNamedFramebufferTextureFaceEXT; + PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC epoxy_glNamedFramebufferTextureLayer; + PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glNamedFramebufferTextureLayerEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC epoxy_glNamedProgramLocalParameter4dEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC epoxy_glNamedProgramLocalParameter4dvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC epoxy_glNamedProgramLocalParameter4fEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC epoxy_glNamedProgramLocalParameter4fvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC epoxy_glNamedProgramLocalParameterI4iEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC epoxy_glNamedProgramLocalParameterI4ivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC epoxy_glNamedProgramLocalParameterI4uiEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC epoxy_glNamedProgramLocalParameterI4uivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glNamedProgramLocalParameters4fvEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC epoxy_glNamedProgramLocalParametersI4ivEXT; + PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC epoxy_glNamedProgramLocalParametersI4uivEXT; + PFNGLNAMEDPROGRAMSTRINGEXTPROC epoxy_glNamedProgramStringEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEPROC epoxy_glNamedRenderbufferStorage; + PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC epoxy_glNamedRenderbufferStorageEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glNamedRenderbufferStorageMultisample; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT; + PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleEXT; + PFNGLNAMEDSTRINGARBPROC epoxy_glNamedStringARB; + PFNGLNEWLISTPROC epoxy_glNewList; + PFNGLNEWOBJECTBUFFERATIPROC epoxy_glNewObjectBufferATI; + PFNGLNORMAL3BPROC epoxy_glNormal3b; + PFNGLNORMAL3BVPROC epoxy_glNormal3bv; + PFNGLNORMAL3DPROC epoxy_glNormal3d; + PFNGLNORMAL3DVPROC epoxy_glNormal3dv; + PFNGLNORMAL3FPROC epoxy_glNormal3f; + PFNGLNORMAL3FVERTEX3FSUNPROC epoxy_glNormal3fVertex3fSUN; + PFNGLNORMAL3FVERTEX3FVSUNPROC epoxy_glNormal3fVertex3fvSUN; + PFNGLNORMAL3FVPROC epoxy_glNormal3fv; + PFNGLNORMAL3HNVPROC epoxy_glNormal3hNV; + PFNGLNORMAL3HVNVPROC epoxy_glNormal3hvNV; + PFNGLNORMAL3IPROC epoxy_glNormal3i; + PFNGLNORMAL3IVPROC epoxy_glNormal3iv; + PFNGLNORMAL3SPROC epoxy_glNormal3s; + PFNGLNORMAL3SVPROC epoxy_glNormal3sv; + PFNGLNORMAL3XPROC epoxy_glNormal3x; + PFNGLNORMAL3XOESPROC epoxy_glNormal3xOES; + PFNGLNORMAL3XVOESPROC epoxy_glNormal3xvOES; + PFNGLNORMALFORMATNVPROC epoxy_glNormalFormatNV; + PFNGLNORMALP3UIPROC epoxy_glNormalP3ui; + PFNGLNORMALP3UIVPROC epoxy_glNormalP3uiv; + PFNGLNORMALPOINTERPROC epoxy_glNormalPointer; + PFNGLNORMALPOINTEREXTPROC epoxy_glNormalPointerEXT; + PFNGLNORMALPOINTERLISTIBMPROC epoxy_glNormalPointerListIBM; + PFNGLNORMALPOINTERVINTELPROC epoxy_glNormalPointervINTEL; + PFNGLNORMALSTREAM3BATIPROC epoxy_glNormalStream3bATI; + PFNGLNORMALSTREAM3BVATIPROC epoxy_glNormalStream3bvATI; + PFNGLNORMALSTREAM3DATIPROC epoxy_glNormalStream3dATI; + PFNGLNORMALSTREAM3DVATIPROC epoxy_glNormalStream3dvATI; + PFNGLNORMALSTREAM3FATIPROC epoxy_glNormalStream3fATI; + PFNGLNORMALSTREAM3FVATIPROC epoxy_glNormalStream3fvATI; + PFNGLNORMALSTREAM3IATIPROC epoxy_glNormalStream3iATI; + PFNGLNORMALSTREAM3IVATIPROC epoxy_glNormalStream3ivATI; + PFNGLNORMALSTREAM3SATIPROC epoxy_glNormalStream3sATI; + PFNGLNORMALSTREAM3SVATIPROC epoxy_glNormalStream3svATI; + PFNGLOBJECTLABELPROC epoxy_glObjectLabel; + PFNGLOBJECTLABELKHRPROC epoxy_glObjectLabelKHR; + PFNGLOBJECTPTRLABELPROC epoxy_glObjectPtrLabel; + PFNGLOBJECTPTRLABELKHRPROC epoxy_glObjectPtrLabelKHR; + PFNGLOBJECTPURGEABLEAPPLEPROC epoxy_glObjectPurgeableAPPLE; + PFNGLOBJECTUNPURGEABLEAPPLEPROC epoxy_glObjectUnpurgeableAPPLE; + PFNGLORTHOPROC epoxy_glOrtho; + PFNGLORTHOFPROC epoxy_glOrthof; + PFNGLORTHOFOESPROC epoxy_glOrthofOES; + PFNGLORTHOXPROC epoxy_glOrthox; + PFNGLORTHOXOESPROC epoxy_glOrthoxOES; + PFNGLPNTRIANGLESFATIPROC epoxy_glPNTrianglesfATI; + PFNGLPNTRIANGLESIATIPROC epoxy_glPNTrianglesiATI; + PFNGLPASSTEXCOORDATIPROC epoxy_glPassTexCoordATI; + PFNGLPASSTHROUGHPROC epoxy_glPassThrough; + PFNGLPASSTHROUGHXOESPROC epoxy_glPassThroughxOES; + PFNGLPATCHPARAMETERFVPROC epoxy_glPatchParameterfv; + PFNGLPATCHPARAMETERIPROC epoxy_glPatchParameteri; + PFNGLPATCHPARAMETERIEXTPROC epoxy_glPatchParameteriEXT; + PFNGLPATCHPARAMETERIOESPROC epoxy_glPatchParameteriOES; + PFNGLPATHCOLORGENNVPROC epoxy_glPathColorGenNV; + PFNGLPATHCOMMANDSNVPROC epoxy_glPathCommandsNV; + PFNGLPATHCOORDSNVPROC epoxy_glPathCoordsNV; + PFNGLPATHCOVERDEPTHFUNCNVPROC epoxy_glPathCoverDepthFuncNV; + PFNGLPATHDASHARRAYNVPROC epoxy_glPathDashArrayNV; + PFNGLPATHFOGGENNVPROC epoxy_glPathFogGenNV; + PFNGLPATHGLYPHINDEXARRAYNVPROC epoxy_glPathGlyphIndexArrayNV; + PFNGLPATHGLYPHINDEXRANGENVPROC epoxy_glPathGlyphIndexRangeNV; + PFNGLPATHGLYPHRANGENVPROC epoxy_glPathGlyphRangeNV; + PFNGLPATHGLYPHSNVPROC epoxy_glPathGlyphsNV; + PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC epoxy_glPathMemoryGlyphIndexArrayNV; + PFNGLPATHPARAMETERFNVPROC epoxy_glPathParameterfNV; + PFNGLPATHPARAMETERFVNVPROC epoxy_glPathParameterfvNV; + PFNGLPATHPARAMETERINVPROC epoxy_glPathParameteriNV; + PFNGLPATHPARAMETERIVNVPROC epoxy_glPathParameterivNV; + PFNGLPATHSTENCILDEPTHOFFSETNVPROC epoxy_glPathStencilDepthOffsetNV; + PFNGLPATHSTENCILFUNCNVPROC epoxy_glPathStencilFuncNV; + PFNGLPATHSTRINGNVPROC epoxy_glPathStringNV; + PFNGLPATHSUBCOMMANDSNVPROC epoxy_glPathSubCommandsNV; + PFNGLPATHSUBCOORDSNVPROC epoxy_glPathSubCoordsNV; + PFNGLPATHTEXGENNVPROC epoxy_glPathTexGenNV; + PFNGLPAUSETRANSFORMFEEDBACKPROC epoxy_glPauseTransformFeedback; + PFNGLPAUSETRANSFORMFEEDBACKNVPROC epoxy_glPauseTransformFeedbackNV; + PFNGLPIXELDATARANGENVPROC epoxy_glPixelDataRangeNV; + PFNGLPIXELMAPFVPROC epoxy_glPixelMapfv; + PFNGLPIXELMAPUIVPROC epoxy_glPixelMapuiv; + PFNGLPIXELMAPUSVPROC epoxy_glPixelMapusv; + PFNGLPIXELMAPXPROC epoxy_glPixelMapx; + PFNGLPIXELSTOREFPROC epoxy_glPixelStoref; + PFNGLPIXELSTOREIPROC epoxy_glPixelStorei; + PFNGLPIXELSTOREXPROC epoxy_glPixelStorex; + PFNGLPIXELTEXGENPARAMETERFSGISPROC epoxy_glPixelTexGenParameterfSGIS; + PFNGLPIXELTEXGENPARAMETERFVSGISPROC epoxy_glPixelTexGenParameterfvSGIS; + PFNGLPIXELTEXGENPARAMETERISGISPROC epoxy_glPixelTexGenParameteriSGIS; + PFNGLPIXELTEXGENPARAMETERIVSGISPROC epoxy_glPixelTexGenParameterivSGIS; + PFNGLPIXELTEXGENSGIXPROC epoxy_glPixelTexGenSGIX; + PFNGLPIXELTRANSFERFPROC epoxy_glPixelTransferf; + PFNGLPIXELTRANSFERIPROC epoxy_glPixelTransferi; + PFNGLPIXELTRANSFERXOESPROC epoxy_glPixelTransferxOES; + PFNGLPIXELTRANSFORMPARAMETERFEXTPROC epoxy_glPixelTransformParameterfEXT; + PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glPixelTransformParameterfvEXT; + PFNGLPIXELTRANSFORMPARAMETERIEXTPROC epoxy_glPixelTransformParameteriEXT; + PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glPixelTransformParameterivEXT; + PFNGLPIXELZOOMPROC epoxy_glPixelZoom; + PFNGLPIXELZOOMXOESPROC epoxy_glPixelZoomxOES; + PFNGLPOINTALONGPATHNVPROC epoxy_glPointAlongPathNV; + PFNGLPOINTPARAMETERFPROC epoxy_glPointParameterf; + PFNGLPOINTPARAMETERFARBPROC epoxy_glPointParameterfARB; + PFNGLPOINTPARAMETERFEXTPROC epoxy_glPointParameterfEXT; + PFNGLPOINTPARAMETERFSGISPROC epoxy_glPointParameterfSGIS; + PFNGLPOINTPARAMETERFVPROC epoxy_glPointParameterfv; + PFNGLPOINTPARAMETERFVARBPROC epoxy_glPointParameterfvARB; + PFNGLPOINTPARAMETERFVEXTPROC epoxy_glPointParameterfvEXT; + PFNGLPOINTPARAMETERFVSGISPROC epoxy_glPointParameterfvSGIS; + PFNGLPOINTPARAMETERIPROC epoxy_glPointParameteri; + PFNGLPOINTPARAMETERINVPROC epoxy_glPointParameteriNV; + PFNGLPOINTPARAMETERIVPROC epoxy_glPointParameteriv; + PFNGLPOINTPARAMETERIVNVPROC epoxy_glPointParameterivNV; + PFNGLPOINTPARAMETERXPROC epoxy_glPointParameterx; + PFNGLPOINTPARAMETERXOESPROC epoxy_glPointParameterxOES; + PFNGLPOINTPARAMETERXVPROC epoxy_glPointParameterxv; + PFNGLPOINTPARAMETERXVOESPROC epoxy_glPointParameterxvOES; + PFNGLPOINTSIZEPROC epoxy_glPointSize; + PFNGLPOINTSIZEPOINTEROESPROC epoxy_glPointSizePointerOES; + PFNGLPOINTSIZEXPROC epoxy_glPointSizex; + PFNGLPOINTSIZEXOESPROC epoxy_glPointSizexOES; + PFNGLPOLLASYNCSGIXPROC epoxy_glPollAsyncSGIX; + PFNGLPOLLINSTRUMENTSSGIXPROC epoxy_glPollInstrumentsSGIX; + PFNGLPOLYGONMODEPROC epoxy_glPolygonMode; + PFNGLPOLYGONMODENVPROC epoxy_glPolygonModeNV; + PFNGLPOLYGONOFFSETPROC epoxy_glPolygonOffset; + PFNGLPOLYGONOFFSETCLAMPEXTPROC epoxy_glPolygonOffsetClampEXT; + PFNGLPOLYGONOFFSETEXTPROC epoxy_glPolygonOffsetEXT; + PFNGLPOLYGONOFFSETXPROC epoxy_glPolygonOffsetx; + PFNGLPOLYGONOFFSETXOESPROC epoxy_glPolygonOffsetxOES; + PFNGLPOLYGONSTIPPLEPROC epoxy_glPolygonStipple; + PFNGLPOPATTRIBPROC epoxy_glPopAttrib; + PFNGLPOPCLIENTATTRIBPROC epoxy_glPopClientAttrib; + PFNGLPOPDEBUGGROUPPROC epoxy_glPopDebugGroup; + PFNGLPOPDEBUGGROUPKHRPROC epoxy_glPopDebugGroupKHR; + PFNGLPOPGROUPMARKEREXTPROC epoxy_glPopGroupMarkerEXT; + PFNGLPOPMATRIXPROC epoxy_glPopMatrix; + PFNGLPOPNAMEPROC epoxy_glPopName; + PFNGLPRESENTFRAMEDUALFILLNVPROC epoxy_glPresentFrameDualFillNV; + PFNGLPRESENTFRAMEKEYEDNVPROC epoxy_glPresentFrameKeyedNV; + PFNGLPRIMITIVEBOUNDINGBOXPROC epoxy_glPrimitiveBoundingBox; + PFNGLPRIMITIVEBOUNDINGBOXARBPROC epoxy_glPrimitiveBoundingBoxARB; + PFNGLPRIMITIVEBOUNDINGBOXEXTPROC epoxy_glPrimitiveBoundingBoxEXT; + PFNGLPRIMITIVEBOUNDINGBOXOESPROC epoxy_glPrimitiveBoundingBoxOES; + PFNGLPRIMITIVERESTARTINDEXPROC epoxy_glPrimitiveRestartIndex; + PFNGLPRIMITIVERESTARTINDEXNVPROC epoxy_glPrimitiveRestartIndexNV; + PFNGLPRIMITIVERESTARTNVPROC epoxy_glPrimitiveRestartNV; + PFNGLPRIORITIZETEXTURESPROC epoxy_glPrioritizeTextures; + PFNGLPRIORITIZETEXTURESEXTPROC epoxy_glPrioritizeTexturesEXT; + PFNGLPRIORITIZETEXTURESXOESPROC epoxy_glPrioritizeTexturesxOES; + PFNGLPROGRAMBINARYPROC epoxy_glProgramBinary; + PFNGLPROGRAMBINARYOESPROC epoxy_glProgramBinaryOES; + PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC epoxy_glProgramBufferParametersIivNV; + PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC epoxy_glProgramBufferParametersIuivNV; + PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC epoxy_glProgramBufferParametersfvNV; + PFNGLPROGRAMENVPARAMETER4DARBPROC epoxy_glProgramEnvParameter4dARB; + PFNGLPROGRAMENVPARAMETER4DVARBPROC epoxy_glProgramEnvParameter4dvARB; + PFNGLPROGRAMENVPARAMETER4FARBPROC epoxy_glProgramEnvParameter4fARB; + PFNGLPROGRAMENVPARAMETER4FVARBPROC epoxy_glProgramEnvParameter4fvARB; + PFNGLPROGRAMENVPARAMETERI4INVPROC epoxy_glProgramEnvParameterI4iNV; + PFNGLPROGRAMENVPARAMETERI4IVNVPROC epoxy_glProgramEnvParameterI4ivNV; + PFNGLPROGRAMENVPARAMETERI4UINVPROC epoxy_glProgramEnvParameterI4uiNV; + PFNGLPROGRAMENVPARAMETERI4UIVNVPROC epoxy_glProgramEnvParameterI4uivNV; + PFNGLPROGRAMENVPARAMETERS4FVEXTPROC epoxy_glProgramEnvParameters4fvEXT; + PFNGLPROGRAMENVPARAMETERSI4IVNVPROC epoxy_glProgramEnvParametersI4ivNV; + PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC epoxy_glProgramEnvParametersI4uivNV; + PFNGLPROGRAMLOCALPARAMETER4DARBPROC epoxy_glProgramLocalParameter4dARB; + PFNGLPROGRAMLOCALPARAMETER4DVARBPROC epoxy_glProgramLocalParameter4dvARB; + PFNGLPROGRAMLOCALPARAMETER4FARBPROC epoxy_glProgramLocalParameter4fARB; + PFNGLPROGRAMLOCALPARAMETER4FVARBPROC epoxy_glProgramLocalParameter4fvARB; + PFNGLPROGRAMLOCALPARAMETERI4INVPROC epoxy_glProgramLocalParameterI4iNV; + PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC epoxy_glProgramLocalParameterI4ivNV; + PFNGLPROGRAMLOCALPARAMETERI4UINVPROC epoxy_glProgramLocalParameterI4uiNV; + PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC epoxy_glProgramLocalParameterI4uivNV; + PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glProgramLocalParameters4fvEXT; + PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC epoxy_glProgramLocalParametersI4ivNV; + PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC epoxy_glProgramLocalParametersI4uivNV; + PFNGLPROGRAMNAMEDPARAMETER4DNVPROC epoxy_glProgramNamedParameter4dNV; + PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC epoxy_glProgramNamedParameter4dvNV; + PFNGLPROGRAMNAMEDPARAMETER4FNVPROC epoxy_glProgramNamedParameter4fNV; + PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC epoxy_glProgramNamedParameter4fvNV; + PFNGLPROGRAMPARAMETER4DNVPROC epoxy_glProgramParameter4dNV; + PFNGLPROGRAMPARAMETER4DVNVPROC epoxy_glProgramParameter4dvNV; + PFNGLPROGRAMPARAMETER4FNVPROC epoxy_glProgramParameter4fNV; + PFNGLPROGRAMPARAMETER4FVNVPROC epoxy_glProgramParameter4fvNV; + PFNGLPROGRAMPARAMETERIPROC epoxy_glProgramParameteri; + PFNGLPROGRAMPARAMETERIARBPROC epoxy_glProgramParameteriARB; + PFNGLPROGRAMPARAMETERIEXTPROC epoxy_glProgramParameteriEXT; + PFNGLPROGRAMPARAMETERS4DVNVPROC epoxy_glProgramParameters4dvNV; + PFNGLPROGRAMPARAMETERS4FVNVPROC epoxy_glProgramParameters4fvNV; + PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC epoxy_glProgramPathFragmentInputGenNV; + PFNGLPROGRAMSTRINGARBPROC epoxy_glProgramStringARB; + PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC epoxy_glProgramSubroutineParametersuivNV; + PFNGLPROGRAMUNIFORM1DPROC epoxy_glProgramUniform1d; + PFNGLPROGRAMUNIFORM1DEXTPROC epoxy_glProgramUniform1dEXT; + PFNGLPROGRAMUNIFORM1DVPROC epoxy_glProgramUniform1dv; + PFNGLPROGRAMUNIFORM1DVEXTPROC epoxy_glProgramUniform1dvEXT; + PFNGLPROGRAMUNIFORM1FPROC epoxy_glProgramUniform1f; + PFNGLPROGRAMUNIFORM1FEXTPROC epoxy_glProgramUniform1fEXT; + PFNGLPROGRAMUNIFORM1FVPROC epoxy_glProgramUniform1fv; + PFNGLPROGRAMUNIFORM1FVEXTPROC epoxy_glProgramUniform1fvEXT; + PFNGLPROGRAMUNIFORM1IPROC epoxy_glProgramUniform1i; + PFNGLPROGRAMUNIFORM1I64ARBPROC epoxy_glProgramUniform1i64ARB; + PFNGLPROGRAMUNIFORM1I64NVPROC epoxy_glProgramUniform1i64NV; + PFNGLPROGRAMUNIFORM1I64VARBPROC epoxy_glProgramUniform1i64vARB; + PFNGLPROGRAMUNIFORM1I64VNVPROC epoxy_glProgramUniform1i64vNV; + PFNGLPROGRAMUNIFORM1IEXTPROC epoxy_glProgramUniform1iEXT; + PFNGLPROGRAMUNIFORM1IVPROC epoxy_glProgramUniform1iv; + PFNGLPROGRAMUNIFORM1IVEXTPROC epoxy_glProgramUniform1ivEXT; + PFNGLPROGRAMUNIFORM1UIPROC epoxy_glProgramUniform1ui; + PFNGLPROGRAMUNIFORM1UI64ARBPROC epoxy_glProgramUniform1ui64ARB; + PFNGLPROGRAMUNIFORM1UI64NVPROC epoxy_glProgramUniform1ui64NV; + PFNGLPROGRAMUNIFORM1UI64VARBPROC epoxy_glProgramUniform1ui64vARB; + PFNGLPROGRAMUNIFORM1UI64VNVPROC epoxy_glProgramUniform1ui64vNV; + PFNGLPROGRAMUNIFORM1UIEXTPROC epoxy_glProgramUniform1uiEXT; + PFNGLPROGRAMUNIFORM1UIVPROC epoxy_glProgramUniform1uiv; + PFNGLPROGRAMUNIFORM1UIVEXTPROC epoxy_glProgramUniform1uivEXT; + PFNGLPROGRAMUNIFORM2DPROC epoxy_glProgramUniform2d; + PFNGLPROGRAMUNIFORM2DEXTPROC epoxy_glProgramUniform2dEXT; + PFNGLPROGRAMUNIFORM2DVPROC epoxy_glProgramUniform2dv; + PFNGLPROGRAMUNIFORM2DVEXTPROC epoxy_glProgramUniform2dvEXT; + PFNGLPROGRAMUNIFORM2FPROC epoxy_glProgramUniform2f; + PFNGLPROGRAMUNIFORM2FEXTPROC epoxy_glProgramUniform2fEXT; + PFNGLPROGRAMUNIFORM2FVPROC epoxy_glProgramUniform2fv; + PFNGLPROGRAMUNIFORM2FVEXTPROC epoxy_glProgramUniform2fvEXT; + PFNGLPROGRAMUNIFORM2IPROC epoxy_glProgramUniform2i; + PFNGLPROGRAMUNIFORM2I64ARBPROC epoxy_glProgramUniform2i64ARB; + PFNGLPROGRAMUNIFORM2I64NVPROC epoxy_glProgramUniform2i64NV; + PFNGLPROGRAMUNIFORM2I64VARBPROC epoxy_glProgramUniform2i64vARB; + PFNGLPROGRAMUNIFORM2I64VNVPROC epoxy_glProgramUniform2i64vNV; + PFNGLPROGRAMUNIFORM2IEXTPROC epoxy_glProgramUniform2iEXT; + PFNGLPROGRAMUNIFORM2IVPROC epoxy_glProgramUniform2iv; + PFNGLPROGRAMUNIFORM2IVEXTPROC epoxy_glProgramUniform2ivEXT; + PFNGLPROGRAMUNIFORM2UIPROC epoxy_glProgramUniform2ui; + PFNGLPROGRAMUNIFORM2UI64ARBPROC epoxy_glProgramUniform2ui64ARB; + PFNGLPROGRAMUNIFORM2UI64NVPROC epoxy_glProgramUniform2ui64NV; + PFNGLPROGRAMUNIFORM2UI64VARBPROC epoxy_glProgramUniform2ui64vARB; + PFNGLPROGRAMUNIFORM2UI64VNVPROC epoxy_glProgramUniform2ui64vNV; + PFNGLPROGRAMUNIFORM2UIEXTPROC epoxy_glProgramUniform2uiEXT; + PFNGLPROGRAMUNIFORM2UIVPROC epoxy_glProgramUniform2uiv; + PFNGLPROGRAMUNIFORM2UIVEXTPROC epoxy_glProgramUniform2uivEXT; + PFNGLPROGRAMUNIFORM3DPROC epoxy_glProgramUniform3d; + PFNGLPROGRAMUNIFORM3DEXTPROC epoxy_glProgramUniform3dEXT; + PFNGLPROGRAMUNIFORM3DVPROC epoxy_glProgramUniform3dv; + PFNGLPROGRAMUNIFORM3DVEXTPROC epoxy_glProgramUniform3dvEXT; + PFNGLPROGRAMUNIFORM3FPROC epoxy_glProgramUniform3f; + PFNGLPROGRAMUNIFORM3FEXTPROC epoxy_glProgramUniform3fEXT; + PFNGLPROGRAMUNIFORM3FVPROC epoxy_glProgramUniform3fv; + PFNGLPROGRAMUNIFORM3FVEXTPROC epoxy_glProgramUniform3fvEXT; + PFNGLPROGRAMUNIFORM3IPROC epoxy_glProgramUniform3i; + PFNGLPROGRAMUNIFORM3I64ARBPROC epoxy_glProgramUniform3i64ARB; + PFNGLPROGRAMUNIFORM3I64NVPROC epoxy_glProgramUniform3i64NV; + PFNGLPROGRAMUNIFORM3I64VARBPROC epoxy_glProgramUniform3i64vARB; + PFNGLPROGRAMUNIFORM3I64VNVPROC epoxy_glProgramUniform3i64vNV; + PFNGLPROGRAMUNIFORM3IEXTPROC epoxy_glProgramUniform3iEXT; + PFNGLPROGRAMUNIFORM3IVPROC epoxy_glProgramUniform3iv; + PFNGLPROGRAMUNIFORM3IVEXTPROC epoxy_glProgramUniform3ivEXT; + PFNGLPROGRAMUNIFORM3UIPROC epoxy_glProgramUniform3ui; + PFNGLPROGRAMUNIFORM3UI64ARBPROC epoxy_glProgramUniform3ui64ARB; + PFNGLPROGRAMUNIFORM3UI64NVPROC epoxy_glProgramUniform3ui64NV; + PFNGLPROGRAMUNIFORM3UI64VARBPROC epoxy_glProgramUniform3ui64vARB; + PFNGLPROGRAMUNIFORM3UI64VNVPROC epoxy_glProgramUniform3ui64vNV; + PFNGLPROGRAMUNIFORM3UIEXTPROC epoxy_glProgramUniform3uiEXT; + PFNGLPROGRAMUNIFORM3UIVPROC epoxy_glProgramUniform3uiv; + PFNGLPROGRAMUNIFORM3UIVEXTPROC epoxy_glProgramUniform3uivEXT; + PFNGLPROGRAMUNIFORM4DPROC epoxy_glProgramUniform4d; + PFNGLPROGRAMUNIFORM4DEXTPROC epoxy_glProgramUniform4dEXT; + PFNGLPROGRAMUNIFORM4DVPROC epoxy_glProgramUniform4dv; + PFNGLPROGRAMUNIFORM4DVEXTPROC epoxy_glProgramUniform4dvEXT; + PFNGLPROGRAMUNIFORM4FPROC epoxy_glProgramUniform4f; + PFNGLPROGRAMUNIFORM4FEXTPROC epoxy_glProgramUniform4fEXT; + PFNGLPROGRAMUNIFORM4FVPROC epoxy_glProgramUniform4fv; + PFNGLPROGRAMUNIFORM4FVEXTPROC epoxy_glProgramUniform4fvEXT; + PFNGLPROGRAMUNIFORM4IPROC epoxy_glProgramUniform4i; + PFNGLPROGRAMUNIFORM4I64ARBPROC epoxy_glProgramUniform4i64ARB; + PFNGLPROGRAMUNIFORM4I64NVPROC epoxy_glProgramUniform4i64NV; + PFNGLPROGRAMUNIFORM4I64VARBPROC epoxy_glProgramUniform4i64vARB; + PFNGLPROGRAMUNIFORM4I64VNVPROC epoxy_glProgramUniform4i64vNV; + PFNGLPROGRAMUNIFORM4IEXTPROC epoxy_glProgramUniform4iEXT; + PFNGLPROGRAMUNIFORM4IVPROC epoxy_glProgramUniform4iv; + PFNGLPROGRAMUNIFORM4IVEXTPROC epoxy_glProgramUniform4ivEXT; + PFNGLPROGRAMUNIFORM4UIPROC epoxy_glProgramUniform4ui; + PFNGLPROGRAMUNIFORM4UI64ARBPROC epoxy_glProgramUniform4ui64ARB; + PFNGLPROGRAMUNIFORM4UI64NVPROC epoxy_glProgramUniform4ui64NV; + PFNGLPROGRAMUNIFORM4UI64VARBPROC epoxy_glProgramUniform4ui64vARB; + PFNGLPROGRAMUNIFORM4UI64VNVPROC epoxy_glProgramUniform4ui64vNV; + PFNGLPROGRAMUNIFORM4UIEXTPROC epoxy_glProgramUniform4uiEXT; + PFNGLPROGRAMUNIFORM4UIVPROC epoxy_glProgramUniform4uiv; + PFNGLPROGRAMUNIFORM4UIVEXTPROC epoxy_glProgramUniform4uivEXT; + PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC epoxy_glProgramUniformHandleui64ARB; + PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC epoxy_glProgramUniformHandleui64NV; + PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC epoxy_glProgramUniformHandleui64vARB; + PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC epoxy_glProgramUniformHandleui64vNV; + PFNGLPROGRAMUNIFORMMATRIX2DVPROC epoxy_glProgramUniformMatrix2dv; + PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC epoxy_glProgramUniformMatrix2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2FVPROC epoxy_glProgramUniformMatrix2fv; + PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC epoxy_glProgramUniformMatrix2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC epoxy_glProgramUniformMatrix2x3dv; + PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC epoxy_glProgramUniformMatrix2x3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC epoxy_glProgramUniformMatrix2x3fv; + PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC epoxy_glProgramUniformMatrix2x3fvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC epoxy_glProgramUniformMatrix2x4dv; + PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC epoxy_glProgramUniformMatrix2x4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC epoxy_glProgramUniformMatrix2x4fv; + PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC epoxy_glProgramUniformMatrix2x4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3DVPROC epoxy_glProgramUniformMatrix3dv; + PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC epoxy_glProgramUniformMatrix3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3FVPROC epoxy_glProgramUniformMatrix3fv; + PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC epoxy_glProgramUniformMatrix3fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC epoxy_glProgramUniformMatrix3x2dv; + PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC epoxy_glProgramUniformMatrix3x2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC epoxy_glProgramUniformMatrix3x2fv; + PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC epoxy_glProgramUniformMatrix3x2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC epoxy_glProgramUniformMatrix3x4dv; + PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC epoxy_glProgramUniformMatrix3x4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC epoxy_glProgramUniformMatrix3x4fv; + PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC epoxy_glProgramUniformMatrix3x4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4DVPROC epoxy_glProgramUniformMatrix4dv; + PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC epoxy_glProgramUniformMatrix4dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4FVPROC epoxy_glProgramUniformMatrix4fv; + PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC epoxy_glProgramUniformMatrix4fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC epoxy_glProgramUniformMatrix4x2dv; + PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC epoxy_glProgramUniformMatrix4x2dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC epoxy_glProgramUniformMatrix4x2fv; + PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC epoxy_glProgramUniformMatrix4x2fvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC epoxy_glProgramUniformMatrix4x3dv; + PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC epoxy_glProgramUniformMatrix4x3dvEXT; + PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC epoxy_glProgramUniformMatrix4x3fv; + PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC epoxy_glProgramUniformMatrix4x3fvEXT; + PFNGLPROGRAMUNIFORMUI64NVPROC epoxy_glProgramUniformui64NV; + PFNGLPROGRAMUNIFORMUI64VNVPROC epoxy_glProgramUniformui64vNV; + PFNGLPROGRAMVERTEXLIMITNVPROC epoxy_glProgramVertexLimitNV; + PFNGLPROVOKINGVERTEXPROC epoxy_glProvokingVertex; + PFNGLPROVOKINGVERTEXEXTPROC epoxy_glProvokingVertexEXT; + PFNGLPUSHATTRIBPROC epoxy_glPushAttrib; + PFNGLPUSHCLIENTATTRIBPROC epoxy_glPushClientAttrib; + PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC epoxy_glPushClientAttribDefaultEXT; + PFNGLPUSHDEBUGGROUPPROC epoxy_glPushDebugGroup; + PFNGLPUSHDEBUGGROUPKHRPROC epoxy_glPushDebugGroupKHR; + PFNGLPUSHGROUPMARKEREXTPROC epoxy_glPushGroupMarkerEXT; + PFNGLPUSHMATRIXPROC epoxy_glPushMatrix; + PFNGLPUSHNAMEPROC epoxy_glPushName; + PFNGLQUERYCOUNTERPROC epoxy_glQueryCounter; + PFNGLQUERYCOUNTEREXTPROC epoxy_glQueryCounterEXT; + PFNGLQUERYMATRIXXOESPROC epoxy_glQueryMatrixxOES; + PFNGLQUERYOBJECTPARAMETERUIAMDPROC epoxy_glQueryObjectParameteruiAMD; + PFNGLRASTERPOS2DPROC epoxy_glRasterPos2d; + PFNGLRASTERPOS2DVPROC epoxy_glRasterPos2dv; + PFNGLRASTERPOS2FPROC epoxy_glRasterPos2f; + PFNGLRASTERPOS2FVPROC epoxy_glRasterPos2fv; + PFNGLRASTERPOS2IPROC epoxy_glRasterPos2i; + PFNGLRASTERPOS2IVPROC epoxy_glRasterPos2iv; + PFNGLRASTERPOS2SPROC epoxy_glRasterPos2s; + PFNGLRASTERPOS2SVPROC epoxy_glRasterPos2sv; + PFNGLRASTERPOS2XOESPROC epoxy_glRasterPos2xOES; + PFNGLRASTERPOS2XVOESPROC epoxy_glRasterPos2xvOES; + PFNGLRASTERPOS3DPROC epoxy_glRasterPos3d; + PFNGLRASTERPOS3DVPROC epoxy_glRasterPos3dv; + PFNGLRASTERPOS3FPROC epoxy_glRasterPos3f; + PFNGLRASTERPOS3FVPROC epoxy_glRasterPos3fv; + PFNGLRASTERPOS3IPROC epoxy_glRasterPos3i; + PFNGLRASTERPOS3IVPROC epoxy_glRasterPos3iv; + PFNGLRASTERPOS3SPROC epoxy_glRasterPos3s; + PFNGLRASTERPOS3SVPROC epoxy_glRasterPos3sv; + PFNGLRASTERPOS3XOESPROC epoxy_glRasterPos3xOES; + PFNGLRASTERPOS3XVOESPROC epoxy_glRasterPos3xvOES; + PFNGLRASTERPOS4DPROC epoxy_glRasterPos4d; + PFNGLRASTERPOS4DVPROC epoxy_glRasterPos4dv; + PFNGLRASTERPOS4FPROC epoxy_glRasterPos4f; + PFNGLRASTERPOS4FVPROC epoxy_glRasterPos4fv; + PFNGLRASTERPOS4IPROC epoxy_glRasterPos4i; + PFNGLRASTERPOS4IVPROC epoxy_glRasterPos4iv; + PFNGLRASTERPOS4SPROC epoxy_glRasterPos4s; + PFNGLRASTERPOS4SVPROC epoxy_glRasterPos4sv; + PFNGLRASTERPOS4XOESPROC epoxy_glRasterPos4xOES; + PFNGLRASTERPOS4XVOESPROC epoxy_glRasterPos4xvOES; + PFNGLRASTERSAMPLESEXTPROC epoxy_glRasterSamplesEXT; + PFNGLREADBUFFERPROC epoxy_glReadBuffer; + PFNGLREADBUFFERINDEXEDEXTPROC epoxy_glReadBufferIndexedEXT; + PFNGLREADBUFFERNVPROC epoxy_glReadBufferNV; + PFNGLREADINSTRUMENTSSGIXPROC epoxy_glReadInstrumentsSGIX; + PFNGLREADPIXELSPROC epoxy_glReadPixels; + PFNGLREADNPIXELSPROC epoxy_glReadnPixels; + PFNGLREADNPIXELSARBPROC epoxy_glReadnPixelsARB; + PFNGLREADNPIXELSEXTPROC epoxy_glReadnPixelsEXT; + PFNGLREADNPIXELSKHRPROC epoxy_glReadnPixelsKHR; + PFNGLRECTDPROC epoxy_glRectd; + PFNGLRECTDVPROC epoxy_glRectdv; + PFNGLRECTFPROC epoxy_glRectf; + PFNGLRECTFVPROC epoxy_glRectfv; + PFNGLRECTIPROC epoxy_glRecti; + PFNGLRECTIVPROC epoxy_glRectiv; + PFNGLRECTSPROC epoxy_glRects; + PFNGLRECTSVPROC epoxy_glRectsv; + PFNGLRECTXOESPROC epoxy_glRectxOES; + PFNGLRECTXVOESPROC epoxy_glRectxvOES; + PFNGLREFERENCEPLANESGIXPROC epoxy_glReferencePlaneSGIX; + PFNGLRELEASESHADERCOMPILERPROC epoxy_glReleaseShaderCompiler; + PFNGLRENDERMODEPROC epoxy_glRenderMode; + PFNGLRENDERBUFFERSTORAGEPROC epoxy_glRenderbufferStorage; + PFNGLRENDERBUFFERSTORAGEEXTPROC epoxy_glRenderbufferStorageEXT; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glRenderbufferStorageMultisample; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC epoxy_glRenderbufferStorageMultisampleANGLE; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC epoxy_glRenderbufferStorageMultisampleAPPLE; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC epoxy_glRenderbufferStorageMultisampleCoverageNV; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glRenderbufferStorageMultisampleEXT; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC epoxy_glRenderbufferStorageMultisampleIMG; + PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC epoxy_glRenderbufferStorageMultisampleNV; + PFNGLRENDERBUFFERSTORAGEOESPROC epoxy_glRenderbufferStorageOES; + PFNGLREPLACEMENTCODEPOINTERSUNPROC epoxy_glReplacementCodePointerSUN; + PFNGLREPLACEMENTCODEUBSUNPROC epoxy_glReplacementCodeubSUN; + PFNGLREPLACEMENTCODEUBVSUNPROC epoxy_glReplacementCodeubvSUN; + PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fSUN; + PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fvSUN; + PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUISUNPROC epoxy_glReplacementCodeuiSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN; + PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN; + PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC epoxy_glReplacementCodeuiVertex3fSUN; + PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC epoxy_glReplacementCodeuiVertex3fvSUN; + PFNGLREPLACEMENTCODEUIVSUNPROC epoxy_glReplacementCodeuivSUN; + PFNGLREPLACEMENTCODEUSSUNPROC epoxy_glReplacementCodeusSUN; + PFNGLREPLACEMENTCODEUSVSUNPROC epoxy_glReplacementCodeusvSUN; + PFNGLREQUESTRESIDENTPROGRAMSNVPROC epoxy_glRequestResidentProgramsNV; + PFNGLRESETHISTOGRAMPROC epoxy_glResetHistogram; + PFNGLRESETHISTOGRAMEXTPROC epoxy_glResetHistogramEXT; + PFNGLRESETMINMAXPROC epoxy_glResetMinmax; + PFNGLRESETMINMAXEXTPROC epoxy_glResetMinmaxEXT; + PFNGLRESIZEBUFFERSMESAPROC epoxy_glResizeBuffersMESA; + PFNGLRESOLVEDEPTHVALUESNVPROC epoxy_glResolveDepthValuesNV; + PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC epoxy_glResolveMultisampleFramebufferAPPLE; + PFNGLRESUMETRANSFORMFEEDBACKPROC epoxy_glResumeTransformFeedback; + PFNGLRESUMETRANSFORMFEEDBACKNVPROC epoxy_glResumeTransformFeedbackNV; + PFNGLROTATEDPROC epoxy_glRotated; + PFNGLROTATEFPROC epoxy_glRotatef; + PFNGLROTATEXPROC epoxy_glRotatex; + PFNGLROTATEXOESPROC epoxy_glRotatexOES; + PFNGLSAMPLECOVERAGEPROC epoxy_glSampleCoverage; + PFNGLSAMPLECOVERAGEARBPROC epoxy_glSampleCoverageARB; + PFNGLSAMPLECOVERAGEXPROC epoxy_glSampleCoveragex; + PFNGLSAMPLECOVERAGEXOESPROC epoxy_glSampleCoveragexOES; + PFNGLSAMPLEMAPATIPROC epoxy_glSampleMapATI; + PFNGLSAMPLEMASKEXTPROC epoxy_glSampleMaskEXT; + PFNGLSAMPLEMASKINDEXEDNVPROC epoxy_glSampleMaskIndexedNV; + PFNGLSAMPLEMASKSGISPROC epoxy_glSampleMaskSGIS; + PFNGLSAMPLEMASKIPROC epoxy_glSampleMaski; + PFNGLSAMPLEPATTERNEXTPROC epoxy_glSamplePatternEXT; + PFNGLSAMPLEPATTERNSGISPROC epoxy_glSamplePatternSGIS; + PFNGLSAMPLERPARAMETERIIVPROC epoxy_glSamplerParameterIiv; + PFNGLSAMPLERPARAMETERIIVEXTPROC epoxy_glSamplerParameterIivEXT; + PFNGLSAMPLERPARAMETERIIVOESPROC epoxy_glSamplerParameterIivOES; + PFNGLSAMPLERPARAMETERIUIVPROC epoxy_glSamplerParameterIuiv; + PFNGLSAMPLERPARAMETERIUIVEXTPROC epoxy_glSamplerParameterIuivEXT; + PFNGLSAMPLERPARAMETERIUIVOESPROC epoxy_glSamplerParameterIuivOES; + PFNGLSAMPLERPARAMETERFPROC epoxy_glSamplerParameterf; + PFNGLSAMPLERPARAMETERFVPROC epoxy_glSamplerParameterfv; + PFNGLSAMPLERPARAMETERIPROC epoxy_glSamplerParameteri; + PFNGLSAMPLERPARAMETERIVPROC epoxy_glSamplerParameteriv; + PFNGLSCALEDPROC epoxy_glScaled; + PFNGLSCALEFPROC epoxy_glScalef; + PFNGLSCALEXPROC epoxy_glScalex; + PFNGLSCALEXOESPROC epoxy_glScalexOES; + PFNGLSCISSORPROC epoxy_glScissor; + PFNGLSCISSORARRAYVPROC epoxy_glScissorArrayv; + PFNGLSCISSORARRAYVNVPROC epoxy_glScissorArrayvNV; + PFNGLSCISSORINDEXEDPROC epoxy_glScissorIndexed; + PFNGLSCISSORINDEXEDNVPROC epoxy_glScissorIndexedNV; + PFNGLSCISSORINDEXEDVPROC epoxy_glScissorIndexedv; + PFNGLSCISSORINDEXEDVNVPROC epoxy_glScissorIndexedvNV; + PFNGLSECONDARYCOLOR3BPROC epoxy_glSecondaryColor3b; + PFNGLSECONDARYCOLOR3BEXTPROC epoxy_glSecondaryColor3bEXT; + PFNGLSECONDARYCOLOR3BVPROC epoxy_glSecondaryColor3bv; + PFNGLSECONDARYCOLOR3BVEXTPROC epoxy_glSecondaryColor3bvEXT; + PFNGLSECONDARYCOLOR3DPROC epoxy_glSecondaryColor3d; + PFNGLSECONDARYCOLOR3DEXTPROC epoxy_glSecondaryColor3dEXT; + PFNGLSECONDARYCOLOR3DVPROC epoxy_glSecondaryColor3dv; + PFNGLSECONDARYCOLOR3DVEXTPROC epoxy_glSecondaryColor3dvEXT; + PFNGLSECONDARYCOLOR3FPROC epoxy_glSecondaryColor3f; + PFNGLSECONDARYCOLOR3FEXTPROC epoxy_glSecondaryColor3fEXT; + PFNGLSECONDARYCOLOR3FVPROC epoxy_glSecondaryColor3fv; + PFNGLSECONDARYCOLOR3FVEXTPROC epoxy_glSecondaryColor3fvEXT; + PFNGLSECONDARYCOLOR3HNVPROC epoxy_glSecondaryColor3hNV; + PFNGLSECONDARYCOLOR3HVNVPROC epoxy_glSecondaryColor3hvNV; + PFNGLSECONDARYCOLOR3IPROC epoxy_glSecondaryColor3i; + PFNGLSECONDARYCOLOR3IEXTPROC epoxy_glSecondaryColor3iEXT; + PFNGLSECONDARYCOLOR3IVPROC epoxy_glSecondaryColor3iv; + PFNGLSECONDARYCOLOR3IVEXTPROC epoxy_glSecondaryColor3ivEXT; + PFNGLSECONDARYCOLOR3SPROC epoxy_glSecondaryColor3s; + PFNGLSECONDARYCOLOR3SEXTPROC epoxy_glSecondaryColor3sEXT; + PFNGLSECONDARYCOLOR3SVPROC epoxy_glSecondaryColor3sv; + PFNGLSECONDARYCOLOR3SVEXTPROC epoxy_glSecondaryColor3svEXT; + PFNGLSECONDARYCOLOR3UBPROC epoxy_glSecondaryColor3ub; + PFNGLSECONDARYCOLOR3UBEXTPROC epoxy_glSecondaryColor3ubEXT; + PFNGLSECONDARYCOLOR3UBVPROC epoxy_glSecondaryColor3ubv; + PFNGLSECONDARYCOLOR3UBVEXTPROC epoxy_glSecondaryColor3ubvEXT; + PFNGLSECONDARYCOLOR3UIPROC epoxy_glSecondaryColor3ui; + PFNGLSECONDARYCOLOR3UIEXTPROC epoxy_glSecondaryColor3uiEXT; + PFNGLSECONDARYCOLOR3UIVPROC epoxy_glSecondaryColor3uiv; + PFNGLSECONDARYCOLOR3UIVEXTPROC epoxy_glSecondaryColor3uivEXT; + PFNGLSECONDARYCOLOR3USPROC epoxy_glSecondaryColor3us; + PFNGLSECONDARYCOLOR3USEXTPROC epoxy_glSecondaryColor3usEXT; + PFNGLSECONDARYCOLOR3USVPROC epoxy_glSecondaryColor3usv; + PFNGLSECONDARYCOLOR3USVEXTPROC epoxy_glSecondaryColor3usvEXT; + PFNGLSECONDARYCOLORFORMATNVPROC epoxy_glSecondaryColorFormatNV; + PFNGLSECONDARYCOLORP3UIPROC epoxy_glSecondaryColorP3ui; + PFNGLSECONDARYCOLORP3UIVPROC epoxy_glSecondaryColorP3uiv; + PFNGLSECONDARYCOLORPOINTERPROC epoxy_glSecondaryColorPointer; + PFNGLSECONDARYCOLORPOINTEREXTPROC epoxy_glSecondaryColorPointerEXT; + PFNGLSECONDARYCOLORPOINTERLISTIBMPROC epoxy_glSecondaryColorPointerListIBM; + PFNGLSELECTBUFFERPROC epoxy_glSelectBuffer; + PFNGLSELECTPERFMONITORCOUNTERSAMDPROC epoxy_glSelectPerfMonitorCountersAMD; + PFNGLSEPARABLEFILTER2DPROC epoxy_glSeparableFilter2D; + PFNGLSEPARABLEFILTER2DEXTPROC epoxy_glSeparableFilter2DEXT; + PFNGLSETFENCEAPPLEPROC epoxy_glSetFenceAPPLE; + PFNGLSETFENCENVPROC epoxy_glSetFenceNV; + PFNGLSETFRAGMENTSHADERCONSTANTATIPROC epoxy_glSetFragmentShaderConstantATI; + PFNGLSETINVARIANTEXTPROC epoxy_glSetInvariantEXT; + PFNGLSETLOCALCONSTANTEXTPROC epoxy_glSetLocalConstantEXT; + PFNGLSETMULTISAMPLEFVAMDPROC epoxy_glSetMultisamplefvAMD; + PFNGLSHADEMODELPROC epoxy_glShadeModel; + PFNGLSHADERBINARYPROC epoxy_glShaderBinary; + PFNGLSHADEROP1EXTPROC epoxy_glShaderOp1EXT; + PFNGLSHADEROP2EXTPROC epoxy_glShaderOp2EXT; + PFNGLSHADEROP3EXTPROC epoxy_glShaderOp3EXT; + PFNGLSHADERSOURCEPROC epoxy_glShaderSource; + PFNGLSHADERSOURCEARBPROC epoxy_glShaderSourceARB; + PFNGLSHADERSTORAGEBLOCKBINDINGPROC epoxy_glShaderStorageBlockBinding; + PFNGLSHARPENTEXFUNCSGISPROC epoxy_glSharpenTexFuncSGIS; + PFNGLSPRITEPARAMETERFSGIXPROC epoxy_glSpriteParameterfSGIX; + PFNGLSPRITEPARAMETERFVSGIXPROC epoxy_glSpriteParameterfvSGIX; + PFNGLSPRITEPARAMETERISGIXPROC epoxy_glSpriteParameteriSGIX; + PFNGLSPRITEPARAMETERIVSGIXPROC epoxy_glSpriteParameterivSGIX; + PFNGLSTARTINSTRUMENTSSGIXPROC epoxy_glStartInstrumentsSGIX; + PFNGLSTARTTILINGQCOMPROC epoxy_glStartTilingQCOM; + PFNGLSTATECAPTURENVPROC epoxy_glStateCaptureNV; + PFNGLSTENCILCLEARTAGEXTPROC epoxy_glStencilClearTagEXT; + PFNGLSTENCILFILLPATHINSTANCEDNVPROC epoxy_glStencilFillPathInstancedNV; + PFNGLSTENCILFILLPATHNVPROC epoxy_glStencilFillPathNV; + PFNGLSTENCILFUNCPROC epoxy_glStencilFunc; + PFNGLSTENCILFUNCSEPARATEPROC epoxy_glStencilFuncSeparate; + PFNGLSTENCILFUNCSEPARATEATIPROC epoxy_glStencilFuncSeparateATI; + PFNGLSTENCILMASKPROC epoxy_glStencilMask; + PFNGLSTENCILMASKSEPARATEPROC epoxy_glStencilMaskSeparate; + PFNGLSTENCILOPPROC epoxy_glStencilOp; + PFNGLSTENCILOPSEPARATEPROC epoxy_glStencilOpSeparate; + PFNGLSTENCILOPSEPARATEATIPROC epoxy_glStencilOpSeparateATI; + PFNGLSTENCILOPVALUEAMDPROC epoxy_glStencilOpValueAMD; + PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC epoxy_glStencilStrokePathInstancedNV; + PFNGLSTENCILSTROKEPATHNVPROC epoxy_glStencilStrokePathNV; + PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC epoxy_glStencilThenCoverFillPathInstancedNV; + PFNGLSTENCILTHENCOVERFILLPATHNVPROC epoxy_glStencilThenCoverFillPathNV; + PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glStencilThenCoverStrokePathInstancedNV; + PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC epoxy_glStencilThenCoverStrokePathNV; + PFNGLSTOPINSTRUMENTSSGIXPROC epoxy_glStopInstrumentsSGIX; + PFNGLSTRINGMARKERGREMEDYPROC epoxy_glStringMarkerGREMEDY; + PFNGLSUBPIXELPRECISIONBIASNVPROC epoxy_glSubpixelPrecisionBiasNV; + PFNGLSWIZZLEEXTPROC epoxy_glSwizzleEXT; + PFNGLSYNCTEXTUREINTELPROC epoxy_glSyncTextureINTEL; + PFNGLTAGSAMPLEBUFFERSGIXPROC epoxy_glTagSampleBufferSGIX; + PFNGLTANGENT3BEXTPROC epoxy_glTangent3bEXT; + PFNGLTANGENT3BVEXTPROC epoxy_glTangent3bvEXT; + PFNGLTANGENT3DEXTPROC epoxy_glTangent3dEXT; + PFNGLTANGENT3DVEXTPROC epoxy_glTangent3dvEXT; + PFNGLTANGENT3FEXTPROC epoxy_glTangent3fEXT; + PFNGLTANGENT3FVEXTPROC epoxy_glTangent3fvEXT; + PFNGLTANGENT3IEXTPROC epoxy_glTangent3iEXT; + PFNGLTANGENT3IVEXTPROC epoxy_glTangent3ivEXT; + PFNGLTANGENT3SEXTPROC epoxy_glTangent3sEXT; + PFNGLTANGENT3SVEXTPROC epoxy_glTangent3svEXT; + PFNGLTANGENTPOINTEREXTPROC epoxy_glTangentPointerEXT; + PFNGLTBUFFERMASK3DFXPROC epoxy_glTbufferMask3DFX; + PFNGLTESSELLATIONFACTORAMDPROC epoxy_glTessellationFactorAMD; + PFNGLTESSELLATIONMODEAMDPROC epoxy_glTessellationModeAMD; + PFNGLTESTFENCEAPPLEPROC epoxy_glTestFenceAPPLE; + PFNGLTESTFENCENVPROC epoxy_glTestFenceNV; + PFNGLTESTOBJECTAPPLEPROC epoxy_glTestObjectAPPLE; + PFNGLTEXBUFFERPROC epoxy_glTexBuffer; + PFNGLTEXBUFFERARBPROC epoxy_glTexBufferARB; + PFNGLTEXBUFFEREXTPROC epoxy_glTexBufferEXT; + PFNGLTEXBUFFEROESPROC epoxy_glTexBufferOES; + PFNGLTEXBUFFERRANGEPROC epoxy_glTexBufferRange; + PFNGLTEXBUFFERRANGEEXTPROC epoxy_glTexBufferRangeEXT; + PFNGLTEXBUFFERRANGEOESPROC epoxy_glTexBufferRangeOES; + PFNGLTEXBUMPPARAMETERFVATIPROC epoxy_glTexBumpParameterfvATI; + PFNGLTEXBUMPPARAMETERIVATIPROC epoxy_glTexBumpParameterivATI; + PFNGLTEXCOORD1BOESPROC epoxy_glTexCoord1bOES; + PFNGLTEXCOORD1BVOESPROC epoxy_glTexCoord1bvOES; + PFNGLTEXCOORD1DPROC epoxy_glTexCoord1d; + PFNGLTEXCOORD1DVPROC epoxy_glTexCoord1dv; + PFNGLTEXCOORD1FPROC epoxy_glTexCoord1f; + PFNGLTEXCOORD1FVPROC epoxy_glTexCoord1fv; + PFNGLTEXCOORD1HNVPROC epoxy_glTexCoord1hNV; + PFNGLTEXCOORD1HVNVPROC epoxy_glTexCoord1hvNV; + PFNGLTEXCOORD1IPROC epoxy_glTexCoord1i; + PFNGLTEXCOORD1IVPROC epoxy_glTexCoord1iv; + PFNGLTEXCOORD1SPROC epoxy_glTexCoord1s; + PFNGLTEXCOORD1SVPROC epoxy_glTexCoord1sv; + PFNGLTEXCOORD1XOESPROC epoxy_glTexCoord1xOES; + PFNGLTEXCOORD1XVOESPROC epoxy_glTexCoord1xvOES; + PFNGLTEXCOORD2BOESPROC epoxy_glTexCoord2bOES; + PFNGLTEXCOORD2BVOESPROC epoxy_glTexCoord2bvOES; + PFNGLTEXCOORD2DPROC epoxy_glTexCoord2d; + PFNGLTEXCOORD2DVPROC epoxy_glTexCoord2dv; + PFNGLTEXCOORD2FPROC epoxy_glTexCoord2f; + PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor3fVertex3fSUN; + PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor3fVertex3fvSUN; + PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN; + PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN; + PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC epoxy_glTexCoord2fColor4ubVertex3fSUN; + PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4ubVertex3fvSUN; + PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fNormal3fVertex3fSUN; + PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fNormal3fVertex3fvSUN; + PFNGLTEXCOORD2FVERTEX3FSUNPROC epoxy_glTexCoord2fVertex3fSUN; + PFNGLTEXCOORD2FVERTEX3FVSUNPROC epoxy_glTexCoord2fVertex3fvSUN; + PFNGLTEXCOORD2FVPROC epoxy_glTexCoord2fv; + PFNGLTEXCOORD2HNVPROC epoxy_glTexCoord2hNV; + PFNGLTEXCOORD2HVNVPROC epoxy_glTexCoord2hvNV; + PFNGLTEXCOORD2IPROC epoxy_glTexCoord2i; + PFNGLTEXCOORD2IVPROC epoxy_glTexCoord2iv; + PFNGLTEXCOORD2SPROC epoxy_glTexCoord2s; + PFNGLTEXCOORD2SVPROC epoxy_glTexCoord2sv; + PFNGLTEXCOORD2XOESPROC epoxy_glTexCoord2xOES; + PFNGLTEXCOORD2XVOESPROC epoxy_glTexCoord2xvOES; + PFNGLTEXCOORD3BOESPROC epoxy_glTexCoord3bOES; + PFNGLTEXCOORD3BVOESPROC epoxy_glTexCoord3bvOES; + PFNGLTEXCOORD3DPROC epoxy_glTexCoord3d; + PFNGLTEXCOORD3DVPROC epoxy_glTexCoord3dv; + PFNGLTEXCOORD3FPROC epoxy_glTexCoord3f; + PFNGLTEXCOORD3FVPROC epoxy_glTexCoord3fv; + PFNGLTEXCOORD3HNVPROC epoxy_glTexCoord3hNV; + PFNGLTEXCOORD3HVNVPROC epoxy_glTexCoord3hvNV; + PFNGLTEXCOORD3IPROC epoxy_glTexCoord3i; + PFNGLTEXCOORD3IVPROC epoxy_glTexCoord3iv; + PFNGLTEXCOORD3SPROC epoxy_glTexCoord3s; + PFNGLTEXCOORD3SVPROC epoxy_glTexCoord3sv; + PFNGLTEXCOORD3XOESPROC epoxy_glTexCoord3xOES; + PFNGLTEXCOORD3XVOESPROC epoxy_glTexCoord3xvOES; + PFNGLTEXCOORD4BOESPROC epoxy_glTexCoord4bOES; + PFNGLTEXCOORD4BVOESPROC epoxy_glTexCoord4bvOES; + PFNGLTEXCOORD4DPROC epoxy_glTexCoord4d; + PFNGLTEXCOORD4DVPROC epoxy_glTexCoord4dv; + PFNGLTEXCOORD4FPROC epoxy_glTexCoord4f; + PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN; + PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN; + PFNGLTEXCOORD4FVERTEX4FSUNPROC epoxy_glTexCoord4fVertex4fSUN; + PFNGLTEXCOORD4FVERTEX4FVSUNPROC epoxy_glTexCoord4fVertex4fvSUN; + PFNGLTEXCOORD4FVPROC epoxy_glTexCoord4fv; + PFNGLTEXCOORD4HNVPROC epoxy_glTexCoord4hNV; + PFNGLTEXCOORD4HVNVPROC epoxy_glTexCoord4hvNV; + PFNGLTEXCOORD4IPROC epoxy_glTexCoord4i; + PFNGLTEXCOORD4IVPROC epoxy_glTexCoord4iv; + PFNGLTEXCOORD4SPROC epoxy_glTexCoord4s; + PFNGLTEXCOORD4SVPROC epoxy_glTexCoord4sv; + PFNGLTEXCOORD4XOESPROC epoxy_glTexCoord4xOES; + PFNGLTEXCOORD4XVOESPROC epoxy_glTexCoord4xvOES; + PFNGLTEXCOORDFORMATNVPROC epoxy_glTexCoordFormatNV; + PFNGLTEXCOORDP1UIPROC epoxy_glTexCoordP1ui; + PFNGLTEXCOORDP1UIVPROC epoxy_glTexCoordP1uiv; + PFNGLTEXCOORDP2UIPROC epoxy_glTexCoordP2ui; + PFNGLTEXCOORDP2UIVPROC epoxy_glTexCoordP2uiv; + PFNGLTEXCOORDP3UIPROC epoxy_glTexCoordP3ui; + PFNGLTEXCOORDP3UIVPROC epoxy_glTexCoordP3uiv; + PFNGLTEXCOORDP4UIPROC epoxy_glTexCoordP4ui; + PFNGLTEXCOORDP4UIVPROC epoxy_glTexCoordP4uiv; + PFNGLTEXCOORDPOINTERPROC epoxy_glTexCoordPointer; + PFNGLTEXCOORDPOINTEREXTPROC epoxy_glTexCoordPointerEXT; + PFNGLTEXCOORDPOINTERLISTIBMPROC epoxy_glTexCoordPointerListIBM; + PFNGLTEXCOORDPOINTERVINTELPROC epoxy_glTexCoordPointervINTEL; + PFNGLTEXENVFPROC epoxy_glTexEnvf; + PFNGLTEXENVFVPROC epoxy_glTexEnvfv; + PFNGLTEXENVIPROC epoxy_glTexEnvi; + PFNGLTEXENVIVPROC epoxy_glTexEnviv; + PFNGLTEXENVXPROC epoxy_glTexEnvx; + PFNGLTEXENVXOESPROC epoxy_glTexEnvxOES; + PFNGLTEXENVXVPROC epoxy_glTexEnvxv; + PFNGLTEXENVXVOESPROC epoxy_glTexEnvxvOES; + PFNGLTEXFILTERFUNCSGISPROC epoxy_glTexFilterFuncSGIS; + PFNGLTEXGENDPROC epoxy_glTexGend; + PFNGLTEXGENDVPROC epoxy_glTexGendv; + PFNGLTEXGENFPROC epoxy_glTexGenf; + PFNGLTEXGENFOESPROC epoxy_glTexGenfOES; + PFNGLTEXGENFVPROC epoxy_glTexGenfv; + PFNGLTEXGENFVOESPROC epoxy_glTexGenfvOES; + PFNGLTEXGENIPROC epoxy_glTexGeni; + PFNGLTEXGENIOESPROC epoxy_glTexGeniOES; + PFNGLTEXGENIVPROC epoxy_glTexGeniv; + PFNGLTEXGENIVOESPROC epoxy_glTexGenivOES; + PFNGLTEXGENXOESPROC epoxy_glTexGenxOES; + PFNGLTEXGENXVOESPROC epoxy_glTexGenxvOES; + PFNGLTEXIMAGE1DPROC epoxy_glTexImage1D; + PFNGLTEXIMAGE2DPROC epoxy_glTexImage2D; + PFNGLTEXIMAGE2DMULTISAMPLEPROC epoxy_glTexImage2DMultisample; + PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage2DMultisampleCoverageNV; + PFNGLTEXIMAGE3DPROC epoxy_glTexImage3D; + PFNGLTEXIMAGE3DEXTPROC epoxy_glTexImage3DEXT; + PFNGLTEXIMAGE3DMULTISAMPLEPROC epoxy_glTexImage3DMultisample; + PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage3DMultisampleCoverageNV; + PFNGLTEXIMAGE3DOESPROC epoxy_glTexImage3DOES; + PFNGLTEXIMAGE4DSGISPROC epoxy_glTexImage4DSGIS; + PFNGLTEXPAGECOMMITMENTARBPROC epoxy_glTexPageCommitmentARB; + PFNGLTEXPAGECOMMITMENTEXTPROC epoxy_glTexPageCommitmentEXT; + PFNGLTEXPARAMETERIIVPROC epoxy_glTexParameterIiv; + PFNGLTEXPARAMETERIIVEXTPROC epoxy_glTexParameterIivEXT; + PFNGLTEXPARAMETERIIVOESPROC epoxy_glTexParameterIivOES; + PFNGLTEXPARAMETERIUIVPROC epoxy_glTexParameterIuiv; + PFNGLTEXPARAMETERIUIVEXTPROC epoxy_glTexParameterIuivEXT; + PFNGLTEXPARAMETERIUIVOESPROC epoxy_glTexParameterIuivOES; + PFNGLTEXPARAMETERFPROC epoxy_glTexParameterf; + PFNGLTEXPARAMETERFVPROC epoxy_glTexParameterfv; + PFNGLTEXPARAMETERIPROC epoxy_glTexParameteri; + PFNGLTEXPARAMETERIVPROC epoxy_glTexParameteriv; + PFNGLTEXPARAMETERXPROC epoxy_glTexParameterx; + PFNGLTEXPARAMETERXOESPROC epoxy_glTexParameterxOES; + PFNGLTEXPARAMETERXVPROC epoxy_glTexParameterxv; + PFNGLTEXPARAMETERXVOESPROC epoxy_glTexParameterxvOES; + PFNGLTEXRENDERBUFFERNVPROC epoxy_glTexRenderbufferNV; + PFNGLTEXSTORAGE1DPROC epoxy_glTexStorage1D; + PFNGLTEXSTORAGE1DEXTPROC epoxy_glTexStorage1DEXT; + PFNGLTEXSTORAGE2DPROC epoxy_glTexStorage2D; + PFNGLTEXSTORAGE2DEXTPROC epoxy_glTexStorage2DEXT; + PFNGLTEXSTORAGE2DMULTISAMPLEPROC epoxy_glTexStorage2DMultisample; + PFNGLTEXSTORAGE3DPROC epoxy_glTexStorage3D; + PFNGLTEXSTORAGE3DEXTPROC epoxy_glTexStorage3DEXT; + PFNGLTEXSTORAGE3DMULTISAMPLEPROC epoxy_glTexStorage3DMultisample; + PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC epoxy_glTexStorage3DMultisampleOES; + PFNGLTEXSTORAGESPARSEAMDPROC epoxy_glTexStorageSparseAMD; + PFNGLTEXSUBIMAGE1DPROC epoxy_glTexSubImage1D; + PFNGLTEXSUBIMAGE1DEXTPROC epoxy_glTexSubImage1DEXT; + PFNGLTEXSUBIMAGE2DPROC epoxy_glTexSubImage2D; + PFNGLTEXSUBIMAGE2DEXTPROC epoxy_glTexSubImage2DEXT; + PFNGLTEXSUBIMAGE3DPROC epoxy_glTexSubImage3D; + PFNGLTEXSUBIMAGE3DEXTPROC epoxy_glTexSubImage3DEXT; + PFNGLTEXSUBIMAGE3DOESPROC epoxy_glTexSubImage3DOES; + PFNGLTEXSUBIMAGE4DSGISPROC epoxy_glTexSubImage4DSGIS; + PFNGLTEXTUREBARRIERPROC epoxy_glTextureBarrier; + PFNGLTEXTUREBARRIERNVPROC epoxy_glTextureBarrierNV; + PFNGLTEXTUREBUFFERPROC epoxy_glTextureBuffer; + PFNGLTEXTUREBUFFEREXTPROC epoxy_glTextureBufferEXT; + PFNGLTEXTUREBUFFERRANGEPROC epoxy_glTextureBufferRange; + PFNGLTEXTUREBUFFERRANGEEXTPROC epoxy_glTextureBufferRangeEXT; + PFNGLTEXTURECOLORMASKSGISPROC epoxy_glTextureColorMaskSGIS; + PFNGLTEXTUREIMAGE1DEXTPROC epoxy_glTextureImage1DEXT; + PFNGLTEXTUREIMAGE2DEXTPROC epoxy_glTextureImage2DEXT; + PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage2DMultisampleCoverageNV; + PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC epoxy_glTextureImage2DMultisampleNV; + PFNGLTEXTUREIMAGE3DEXTPROC epoxy_glTextureImage3DEXT; + PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage3DMultisampleCoverageNV; + PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC epoxy_glTextureImage3DMultisampleNV; + PFNGLTEXTURELIGHTEXTPROC epoxy_glTextureLightEXT; + PFNGLTEXTUREMATERIALEXTPROC epoxy_glTextureMaterialEXT; + PFNGLTEXTURENORMALEXTPROC epoxy_glTextureNormalEXT; + PFNGLTEXTUREPAGECOMMITMENTEXTPROC epoxy_glTexturePageCommitmentEXT; + PFNGLTEXTUREPARAMETERIIVPROC epoxy_glTextureParameterIiv; + PFNGLTEXTUREPARAMETERIIVEXTPROC epoxy_glTextureParameterIivEXT; + PFNGLTEXTUREPARAMETERIUIVPROC epoxy_glTextureParameterIuiv; + PFNGLTEXTUREPARAMETERIUIVEXTPROC epoxy_glTextureParameterIuivEXT; + PFNGLTEXTUREPARAMETERFPROC epoxy_glTextureParameterf; + PFNGLTEXTUREPARAMETERFEXTPROC epoxy_glTextureParameterfEXT; + PFNGLTEXTUREPARAMETERFVPROC epoxy_glTextureParameterfv; + PFNGLTEXTUREPARAMETERFVEXTPROC epoxy_glTextureParameterfvEXT; + PFNGLTEXTUREPARAMETERIPROC epoxy_glTextureParameteri; + PFNGLTEXTUREPARAMETERIEXTPROC epoxy_glTextureParameteriEXT; + PFNGLTEXTUREPARAMETERIVPROC epoxy_glTextureParameteriv; + PFNGLTEXTUREPARAMETERIVEXTPROC epoxy_glTextureParameterivEXT; + PFNGLTEXTURERANGEAPPLEPROC epoxy_glTextureRangeAPPLE; + PFNGLTEXTURERENDERBUFFEREXTPROC epoxy_glTextureRenderbufferEXT; + PFNGLTEXTURESTORAGE1DPROC epoxy_glTextureStorage1D; + PFNGLTEXTURESTORAGE1DEXTPROC epoxy_glTextureStorage1DEXT; + PFNGLTEXTURESTORAGE2DPROC epoxy_glTextureStorage2D; + PFNGLTEXTURESTORAGE2DEXTPROC epoxy_glTextureStorage2DEXT; + PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC epoxy_glTextureStorage2DMultisample; + PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC epoxy_glTextureStorage2DMultisampleEXT; + PFNGLTEXTURESTORAGE3DPROC epoxy_glTextureStorage3D; + PFNGLTEXTURESTORAGE3DEXTPROC epoxy_glTextureStorage3DEXT; + PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC epoxy_glTextureStorage3DMultisample; + PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC epoxy_glTextureStorage3DMultisampleEXT; + PFNGLTEXTURESTORAGESPARSEAMDPROC epoxy_glTextureStorageSparseAMD; + PFNGLTEXTURESUBIMAGE1DPROC epoxy_glTextureSubImage1D; + PFNGLTEXTURESUBIMAGE1DEXTPROC epoxy_glTextureSubImage1DEXT; + PFNGLTEXTURESUBIMAGE2DPROC epoxy_glTextureSubImage2D; + PFNGLTEXTURESUBIMAGE2DEXTPROC epoxy_glTextureSubImage2DEXT; + PFNGLTEXTURESUBIMAGE3DPROC epoxy_glTextureSubImage3D; + PFNGLTEXTURESUBIMAGE3DEXTPROC epoxy_glTextureSubImage3DEXT; + PFNGLTEXTUREVIEWPROC epoxy_glTextureView; + PFNGLTEXTUREVIEWEXTPROC epoxy_glTextureViewEXT; + PFNGLTEXTUREVIEWOESPROC epoxy_glTextureViewOES; + PFNGLTRACKMATRIXNVPROC epoxy_glTrackMatrixNV; + PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC epoxy_glTransformFeedbackAttribsNV; + PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC epoxy_glTransformFeedbackBufferBase; + PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC epoxy_glTransformFeedbackBufferRange; + PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC epoxy_glTransformFeedbackStreamAttribsNV; + PFNGLTRANSFORMFEEDBACKVARYINGSPROC epoxy_glTransformFeedbackVaryings; + PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC epoxy_glTransformFeedbackVaryingsEXT; + PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC epoxy_glTransformFeedbackVaryingsNV; + PFNGLTRANSFORMPATHNVPROC epoxy_glTransformPathNV; + PFNGLTRANSLATEDPROC epoxy_glTranslated; + PFNGLTRANSLATEFPROC epoxy_glTranslatef; + PFNGLTRANSLATEXPROC epoxy_glTranslatex; + PFNGLTRANSLATEXOESPROC epoxy_glTranslatexOES; + PFNGLUNIFORM1DPROC epoxy_glUniform1d; + PFNGLUNIFORM1DVPROC epoxy_glUniform1dv; + PFNGLUNIFORM1FPROC epoxy_glUniform1f; + PFNGLUNIFORM1FARBPROC epoxy_glUniform1fARB; + PFNGLUNIFORM1FVPROC epoxy_glUniform1fv; + PFNGLUNIFORM1FVARBPROC epoxy_glUniform1fvARB; + PFNGLUNIFORM1IPROC epoxy_glUniform1i; + PFNGLUNIFORM1I64ARBPROC epoxy_glUniform1i64ARB; + PFNGLUNIFORM1I64NVPROC epoxy_glUniform1i64NV; + PFNGLUNIFORM1I64VARBPROC epoxy_glUniform1i64vARB; + PFNGLUNIFORM1I64VNVPROC epoxy_glUniform1i64vNV; + PFNGLUNIFORM1IARBPROC epoxy_glUniform1iARB; + PFNGLUNIFORM1IVPROC epoxy_glUniform1iv; + PFNGLUNIFORM1IVARBPROC epoxy_glUniform1ivARB; + PFNGLUNIFORM1UIPROC epoxy_glUniform1ui; + PFNGLUNIFORM1UI64ARBPROC epoxy_glUniform1ui64ARB; + PFNGLUNIFORM1UI64NVPROC epoxy_glUniform1ui64NV; + PFNGLUNIFORM1UI64VARBPROC epoxy_glUniform1ui64vARB; + PFNGLUNIFORM1UI64VNVPROC epoxy_glUniform1ui64vNV; + PFNGLUNIFORM1UIEXTPROC epoxy_glUniform1uiEXT; + PFNGLUNIFORM1UIVPROC epoxy_glUniform1uiv; + PFNGLUNIFORM1UIVEXTPROC epoxy_glUniform1uivEXT; + PFNGLUNIFORM2DPROC epoxy_glUniform2d; + PFNGLUNIFORM2DVPROC epoxy_glUniform2dv; + PFNGLUNIFORM2FPROC epoxy_glUniform2f; + PFNGLUNIFORM2FARBPROC epoxy_glUniform2fARB; + PFNGLUNIFORM2FVPROC epoxy_glUniform2fv; + PFNGLUNIFORM2FVARBPROC epoxy_glUniform2fvARB; + PFNGLUNIFORM2IPROC epoxy_glUniform2i; + PFNGLUNIFORM2I64ARBPROC epoxy_glUniform2i64ARB; + PFNGLUNIFORM2I64NVPROC epoxy_glUniform2i64NV; + PFNGLUNIFORM2I64VARBPROC epoxy_glUniform2i64vARB; + PFNGLUNIFORM2I64VNVPROC epoxy_glUniform2i64vNV; + PFNGLUNIFORM2IARBPROC epoxy_glUniform2iARB; + PFNGLUNIFORM2IVPROC epoxy_glUniform2iv; + PFNGLUNIFORM2IVARBPROC epoxy_glUniform2ivARB; + PFNGLUNIFORM2UIPROC epoxy_glUniform2ui; + PFNGLUNIFORM2UI64ARBPROC epoxy_glUniform2ui64ARB; + PFNGLUNIFORM2UI64NVPROC epoxy_glUniform2ui64NV; + PFNGLUNIFORM2UI64VARBPROC epoxy_glUniform2ui64vARB; + PFNGLUNIFORM2UI64VNVPROC epoxy_glUniform2ui64vNV; + PFNGLUNIFORM2UIEXTPROC epoxy_glUniform2uiEXT; + PFNGLUNIFORM2UIVPROC epoxy_glUniform2uiv; + PFNGLUNIFORM2UIVEXTPROC epoxy_glUniform2uivEXT; + PFNGLUNIFORM3DPROC epoxy_glUniform3d; + PFNGLUNIFORM3DVPROC epoxy_glUniform3dv; + PFNGLUNIFORM3FPROC epoxy_glUniform3f; + PFNGLUNIFORM3FARBPROC epoxy_glUniform3fARB; + PFNGLUNIFORM3FVPROC epoxy_glUniform3fv; + PFNGLUNIFORM3FVARBPROC epoxy_glUniform3fvARB; + PFNGLUNIFORM3IPROC epoxy_glUniform3i; + PFNGLUNIFORM3I64ARBPROC epoxy_glUniform3i64ARB; + PFNGLUNIFORM3I64NVPROC epoxy_glUniform3i64NV; + PFNGLUNIFORM3I64VARBPROC epoxy_glUniform3i64vARB; + PFNGLUNIFORM3I64VNVPROC epoxy_glUniform3i64vNV; + PFNGLUNIFORM3IARBPROC epoxy_glUniform3iARB; + PFNGLUNIFORM3IVPROC epoxy_glUniform3iv; + PFNGLUNIFORM3IVARBPROC epoxy_glUniform3ivARB; + PFNGLUNIFORM3UIPROC epoxy_glUniform3ui; + PFNGLUNIFORM3UI64ARBPROC epoxy_glUniform3ui64ARB; + PFNGLUNIFORM3UI64NVPROC epoxy_glUniform3ui64NV; + PFNGLUNIFORM3UI64VARBPROC epoxy_glUniform3ui64vARB; + PFNGLUNIFORM3UI64VNVPROC epoxy_glUniform3ui64vNV; + PFNGLUNIFORM3UIEXTPROC epoxy_glUniform3uiEXT; + PFNGLUNIFORM3UIVPROC epoxy_glUniform3uiv; + PFNGLUNIFORM3UIVEXTPROC epoxy_glUniform3uivEXT; + PFNGLUNIFORM4DPROC epoxy_glUniform4d; + PFNGLUNIFORM4DVPROC epoxy_glUniform4dv; + PFNGLUNIFORM4FPROC epoxy_glUniform4f; + PFNGLUNIFORM4FARBPROC epoxy_glUniform4fARB; + PFNGLUNIFORM4FVPROC epoxy_glUniform4fv; + PFNGLUNIFORM4FVARBPROC epoxy_glUniform4fvARB; + PFNGLUNIFORM4IPROC epoxy_glUniform4i; + PFNGLUNIFORM4I64ARBPROC epoxy_glUniform4i64ARB; + PFNGLUNIFORM4I64NVPROC epoxy_glUniform4i64NV; + PFNGLUNIFORM4I64VARBPROC epoxy_glUniform4i64vARB; + PFNGLUNIFORM4I64VNVPROC epoxy_glUniform4i64vNV; + PFNGLUNIFORM4IARBPROC epoxy_glUniform4iARB; + PFNGLUNIFORM4IVPROC epoxy_glUniform4iv; + PFNGLUNIFORM4IVARBPROC epoxy_glUniform4ivARB; + PFNGLUNIFORM4UIPROC epoxy_glUniform4ui; + PFNGLUNIFORM4UI64ARBPROC epoxy_glUniform4ui64ARB; + PFNGLUNIFORM4UI64NVPROC epoxy_glUniform4ui64NV; + PFNGLUNIFORM4UI64VARBPROC epoxy_glUniform4ui64vARB; + PFNGLUNIFORM4UI64VNVPROC epoxy_glUniform4ui64vNV; + PFNGLUNIFORM4UIEXTPROC epoxy_glUniform4uiEXT; + PFNGLUNIFORM4UIVPROC epoxy_glUniform4uiv; + PFNGLUNIFORM4UIVEXTPROC epoxy_glUniform4uivEXT; + PFNGLUNIFORMBLOCKBINDINGPROC epoxy_glUniformBlockBinding; + PFNGLUNIFORMBUFFEREXTPROC epoxy_glUniformBufferEXT; + PFNGLUNIFORMHANDLEUI64ARBPROC epoxy_glUniformHandleui64ARB; + PFNGLUNIFORMHANDLEUI64NVPROC epoxy_glUniformHandleui64NV; + PFNGLUNIFORMHANDLEUI64VARBPROC epoxy_glUniformHandleui64vARB; + PFNGLUNIFORMHANDLEUI64VNVPROC epoxy_glUniformHandleui64vNV; + PFNGLUNIFORMMATRIX2DVPROC epoxy_glUniformMatrix2dv; + PFNGLUNIFORMMATRIX2FVPROC epoxy_glUniformMatrix2fv; + PFNGLUNIFORMMATRIX2FVARBPROC epoxy_glUniformMatrix2fvARB; + PFNGLUNIFORMMATRIX2X3DVPROC epoxy_glUniformMatrix2x3dv; + PFNGLUNIFORMMATRIX2X3FVPROC epoxy_glUniformMatrix2x3fv; + PFNGLUNIFORMMATRIX2X3FVNVPROC epoxy_glUniformMatrix2x3fvNV; + PFNGLUNIFORMMATRIX2X4DVPROC epoxy_glUniformMatrix2x4dv; + PFNGLUNIFORMMATRIX2X4FVPROC epoxy_glUniformMatrix2x4fv; + PFNGLUNIFORMMATRIX2X4FVNVPROC epoxy_glUniformMatrix2x4fvNV; + PFNGLUNIFORMMATRIX3DVPROC epoxy_glUniformMatrix3dv; + PFNGLUNIFORMMATRIX3FVPROC epoxy_glUniformMatrix3fv; + PFNGLUNIFORMMATRIX3FVARBPROC epoxy_glUniformMatrix3fvARB; + PFNGLUNIFORMMATRIX3X2DVPROC epoxy_glUniformMatrix3x2dv; + PFNGLUNIFORMMATRIX3X2FVPROC epoxy_glUniformMatrix3x2fv; + PFNGLUNIFORMMATRIX3X2FVNVPROC epoxy_glUniformMatrix3x2fvNV; + PFNGLUNIFORMMATRIX3X4DVPROC epoxy_glUniformMatrix3x4dv; + PFNGLUNIFORMMATRIX3X4FVPROC epoxy_glUniformMatrix3x4fv; + PFNGLUNIFORMMATRIX3X4FVNVPROC epoxy_glUniformMatrix3x4fvNV; + PFNGLUNIFORMMATRIX4DVPROC epoxy_glUniformMatrix4dv; + PFNGLUNIFORMMATRIX4FVPROC epoxy_glUniformMatrix4fv; + PFNGLUNIFORMMATRIX4FVARBPROC epoxy_glUniformMatrix4fvARB; + PFNGLUNIFORMMATRIX4X2DVPROC epoxy_glUniformMatrix4x2dv; + PFNGLUNIFORMMATRIX4X2FVPROC epoxy_glUniformMatrix4x2fv; + PFNGLUNIFORMMATRIX4X2FVNVPROC epoxy_glUniformMatrix4x2fvNV; + PFNGLUNIFORMMATRIX4X3DVPROC epoxy_glUniformMatrix4x3dv; + PFNGLUNIFORMMATRIX4X3FVPROC epoxy_glUniformMatrix4x3fv; + PFNGLUNIFORMMATRIX4X3FVNVPROC epoxy_glUniformMatrix4x3fvNV; + PFNGLUNIFORMSUBROUTINESUIVPROC epoxy_glUniformSubroutinesuiv; + PFNGLUNIFORMUI64NVPROC epoxy_glUniformui64NV; + PFNGLUNIFORMUI64VNVPROC epoxy_glUniformui64vNV; + PFNGLUNLOCKARRAYSEXTPROC epoxy_glUnlockArraysEXT; + PFNGLUNMAPBUFFERPROC epoxy_glUnmapBuffer; + PFNGLUNMAPBUFFERARBPROC epoxy_glUnmapBufferARB; + PFNGLUNMAPBUFFEROESPROC epoxy_glUnmapBufferOES; + PFNGLUNMAPNAMEDBUFFERPROC epoxy_glUnmapNamedBuffer; + PFNGLUNMAPNAMEDBUFFEREXTPROC epoxy_glUnmapNamedBufferEXT; + PFNGLUNMAPOBJECTBUFFERATIPROC epoxy_glUnmapObjectBufferATI; + PFNGLUNMAPTEXTURE2DINTELPROC epoxy_glUnmapTexture2DINTEL; + PFNGLUPDATEOBJECTBUFFERATIPROC epoxy_glUpdateObjectBufferATI; + PFNGLUSEPROGRAMPROC epoxy_glUseProgram; + PFNGLUSEPROGRAMOBJECTARBPROC epoxy_glUseProgramObjectARB; + PFNGLUSEPROGRAMSTAGESPROC epoxy_glUseProgramStages; + PFNGLUSEPROGRAMSTAGESEXTPROC epoxy_glUseProgramStagesEXT; + PFNGLUSESHADERPROGRAMEXTPROC epoxy_glUseShaderProgramEXT; + PFNGLVDPAUFININVPROC epoxy_glVDPAUFiniNV; + PFNGLVDPAUGETSURFACEIVNVPROC epoxy_glVDPAUGetSurfaceivNV; + PFNGLVDPAUINITNVPROC epoxy_glVDPAUInitNV; + PFNGLVDPAUISSURFACENVPROC epoxy_glVDPAUIsSurfaceNV; + PFNGLVDPAUMAPSURFACESNVPROC epoxy_glVDPAUMapSurfacesNV; + PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC epoxy_glVDPAURegisterOutputSurfaceNV; + PFNGLVDPAUREGISTERVIDEOSURFACENVPROC epoxy_glVDPAURegisterVideoSurfaceNV; + PFNGLVDPAUSURFACEACCESSNVPROC epoxy_glVDPAUSurfaceAccessNV; + PFNGLVDPAUUNMAPSURFACESNVPROC epoxy_glVDPAUUnmapSurfacesNV; + PFNGLVDPAUUNREGISTERSURFACENVPROC epoxy_glVDPAUUnregisterSurfaceNV; + PFNGLVALIDATEPROGRAMPROC epoxy_glValidateProgram; + PFNGLVALIDATEPROGRAMARBPROC epoxy_glValidateProgramARB; + PFNGLVALIDATEPROGRAMPIPELINEPROC epoxy_glValidateProgramPipeline; + PFNGLVALIDATEPROGRAMPIPELINEEXTPROC epoxy_glValidateProgramPipelineEXT; + PFNGLVARIANTARRAYOBJECTATIPROC epoxy_glVariantArrayObjectATI; + PFNGLVARIANTPOINTEREXTPROC epoxy_glVariantPointerEXT; + PFNGLVARIANTBVEXTPROC epoxy_glVariantbvEXT; + PFNGLVARIANTDVEXTPROC epoxy_glVariantdvEXT; + PFNGLVARIANTFVEXTPROC epoxy_glVariantfvEXT; + PFNGLVARIANTIVEXTPROC epoxy_glVariantivEXT; + PFNGLVARIANTSVEXTPROC epoxy_glVariantsvEXT; + PFNGLVARIANTUBVEXTPROC epoxy_glVariantubvEXT; + PFNGLVARIANTUIVEXTPROC epoxy_glVariantuivEXT; + PFNGLVARIANTUSVEXTPROC epoxy_glVariantusvEXT; + PFNGLVERTEX2BOESPROC epoxy_glVertex2bOES; + PFNGLVERTEX2BVOESPROC epoxy_glVertex2bvOES; + PFNGLVERTEX2DPROC epoxy_glVertex2d; + PFNGLVERTEX2DVPROC epoxy_glVertex2dv; + PFNGLVERTEX2FPROC epoxy_glVertex2f; + PFNGLVERTEX2FVPROC epoxy_glVertex2fv; + PFNGLVERTEX2HNVPROC epoxy_glVertex2hNV; + PFNGLVERTEX2HVNVPROC epoxy_glVertex2hvNV; + PFNGLVERTEX2IPROC epoxy_glVertex2i; + PFNGLVERTEX2IVPROC epoxy_glVertex2iv; + PFNGLVERTEX2SPROC epoxy_glVertex2s; + PFNGLVERTEX2SVPROC epoxy_glVertex2sv; + PFNGLVERTEX2XOESPROC epoxy_glVertex2xOES; + PFNGLVERTEX2XVOESPROC epoxy_glVertex2xvOES; + PFNGLVERTEX3BOESPROC epoxy_glVertex3bOES; + PFNGLVERTEX3BVOESPROC epoxy_glVertex3bvOES; + PFNGLVERTEX3DPROC epoxy_glVertex3d; + PFNGLVERTEX3DVPROC epoxy_glVertex3dv; + PFNGLVERTEX3FPROC epoxy_glVertex3f; + PFNGLVERTEX3FVPROC epoxy_glVertex3fv; + PFNGLVERTEX3HNVPROC epoxy_glVertex3hNV; + PFNGLVERTEX3HVNVPROC epoxy_glVertex3hvNV; + PFNGLVERTEX3IPROC epoxy_glVertex3i; + PFNGLVERTEX3IVPROC epoxy_glVertex3iv; + PFNGLVERTEX3SPROC epoxy_glVertex3s; + PFNGLVERTEX3SVPROC epoxy_glVertex3sv; + PFNGLVERTEX3XOESPROC epoxy_glVertex3xOES; + PFNGLVERTEX3XVOESPROC epoxy_glVertex3xvOES; + PFNGLVERTEX4BOESPROC epoxy_glVertex4bOES; + PFNGLVERTEX4BVOESPROC epoxy_glVertex4bvOES; + PFNGLVERTEX4DPROC epoxy_glVertex4d; + PFNGLVERTEX4DVPROC epoxy_glVertex4dv; + PFNGLVERTEX4FPROC epoxy_glVertex4f; + PFNGLVERTEX4FVPROC epoxy_glVertex4fv; + PFNGLVERTEX4HNVPROC epoxy_glVertex4hNV; + PFNGLVERTEX4HVNVPROC epoxy_glVertex4hvNV; + PFNGLVERTEX4IPROC epoxy_glVertex4i; + PFNGLVERTEX4IVPROC epoxy_glVertex4iv; + PFNGLVERTEX4SPROC epoxy_glVertex4s; + PFNGLVERTEX4SVPROC epoxy_glVertex4sv; + PFNGLVERTEX4XOESPROC epoxy_glVertex4xOES; + PFNGLVERTEX4XVOESPROC epoxy_glVertex4xvOES; + PFNGLVERTEXARRAYATTRIBBINDINGPROC epoxy_glVertexArrayAttribBinding; + PFNGLVERTEXARRAYATTRIBFORMATPROC epoxy_glVertexArrayAttribFormat; + PFNGLVERTEXARRAYATTRIBIFORMATPROC epoxy_glVertexArrayAttribIFormat; + PFNGLVERTEXARRAYATTRIBLFORMATPROC epoxy_glVertexArrayAttribLFormat; + PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC epoxy_glVertexArrayBindVertexBufferEXT; + PFNGLVERTEXARRAYBINDINGDIVISORPROC epoxy_glVertexArrayBindingDivisor; + PFNGLVERTEXARRAYCOLOROFFSETEXTPROC epoxy_glVertexArrayColorOffsetEXT; + PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC epoxy_glVertexArrayEdgeFlagOffsetEXT; + PFNGLVERTEXARRAYELEMENTBUFFERPROC epoxy_glVertexArrayElementBuffer; + PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC epoxy_glVertexArrayFogCoordOffsetEXT; + PFNGLVERTEXARRAYINDEXOFFSETEXTPROC epoxy_glVertexArrayIndexOffsetEXT; + PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC epoxy_glVertexArrayMultiTexCoordOffsetEXT; + PFNGLVERTEXARRAYNORMALOFFSETEXTPROC epoxy_glVertexArrayNormalOffsetEXT; + PFNGLVERTEXARRAYPARAMETERIAPPLEPROC epoxy_glVertexArrayParameteriAPPLE; + PFNGLVERTEXARRAYRANGEAPPLEPROC epoxy_glVertexArrayRangeAPPLE; + PFNGLVERTEXARRAYRANGENVPROC epoxy_glVertexArrayRangeNV; + PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC epoxy_glVertexArraySecondaryColorOffsetEXT; + PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC epoxy_glVertexArrayTexCoordOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC epoxy_glVertexArrayVertexAttribBindingEXT; + PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexArrayVertexAttribDivisorEXT; + PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC epoxy_glVertexArrayVertexAttribFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC epoxy_glVertexArrayVertexAttribIFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC epoxy_glVertexArrayVertexAttribIOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC epoxy_glVertexArrayVertexAttribLFormatEXT; + PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC epoxy_glVertexArrayVertexAttribLOffsetEXT; + PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC epoxy_glVertexArrayVertexAttribOffsetEXT; + PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC epoxy_glVertexArrayVertexBindingDivisorEXT; + PFNGLVERTEXARRAYVERTEXBUFFERPROC epoxy_glVertexArrayVertexBuffer; + PFNGLVERTEXARRAYVERTEXBUFFERSPROC epoxy_glVertexArrayVertexBuffers; + PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC epoxy_glVertexArrayVertexOffsetEXT; + PFNGLVERTEXATTRIB1DPROC epoxy_glVertexAttrib1d; + PFNGLVERTEXATTRIB1DARBPROC epoxy_glVertexAttrib1dARB; + PFNGLVERTEXATTRIB1DNVPROC epoxy_glVertexAttrib1dNV; + PFNGLVERTEXATTRIB1DVPROC epoxy_glVertexAttrib1dv; + PFNGLVERTEXATTRIB1DVARBPROC epoxy_glVertexAttrib1dvARB; + PFNGLVERTEXATTRIB1DVNVPROC epoxy_glVertexAttrib1dvNV; + PFNGLVERTEXATTRIB1FPROC epoxy_glVertexAttrib1f; + PFNGLVERTEXATTRIB1FARBPROC epoxy_glVertexAttrib1fARB; + PFNGLVERTEXATTRIB1FNVPROC epoxy_glVertexAttrib1fNV; + PFNGLVERTEXATTRIB1FVPROC epoxy_glVertexAttrib1fv; + PFNGLVERTEXATTRIB1FVARBPROC epoxy_glVertexAttrib1fvARB; + PFNGLVERTEXATTRIB1FVNVPROC epoxy_glVertexAttrib1fvNV; + PFNGLVERTEXATTRIB1HNVPROC epoxy_glVertexAttrib1hNV; + PFNGLVERTEXATTRIB1HVNVPROC epoxy_glVertexAttrib1hvNV; + PFNGLVERTEXATTRIB1SPROC epoxy_glVertexAttrib1s; + PFNGLVERTEXATTRIB1SARBPROC epoxy_glVertexAttrib1sARB; + PFNGLVERTEXATTRIB1SNVPROC epoxy_glVertexAttrib1sNV; + PFNGLVERTEXATTRIB1SVPROC epoxy_glVertexAttrib1sv; + PFNGLVERTEXATTRIB1SVARBPROC epoxy_glVertexAttrib1svARB; + PFNGLVERTEXATTRIB1SVNVPROC epoxy_glVertexAttrib1svNV; + PFNGLVERTEXATTRIB2DPROC epoxy_glVertexAttrib2d; + PFNGLVERTEXATTRIB2DARBPROC epoxy_glVertexAttrib2dARB; + PFNGLVERTEXATTRIB2DNVPROC epoxy_glVertexAttrib2dNV; + PFNGLVERTEXATTRIB2DVPROC epoxy_glVertexAttrib2dv; + PFNGLVERTEXATTRIB2DVARBPROC epoxy_glVertexAttrib2dvARB; + PFNGLVERTEXATTRIB2DVNVPROC epoxy_glVertexAttrib2dvNV; + PFNGLVERTEXATTRIB2FPROC epoxy_glVertexAttrib2f; + PFNGLVERTEXATTRIB2FARBPROC epoxy_glVertexAttrib2fARB; + PFNGLVERTEXATTRIB2FNVPROC epoxy_glVertexAttrib2fNV; + PFNGLVERTEXATTRIB2FVPROC epoxy_glVertexAttrib2fv; + PFNGLVERTEXATTRIB2FVARBPROC epoxy_glVertexAttrib2fvARB; + PFNGLVERTEXATTRIB2FVNVPROC epoxy_glVertexAttrib2fvNV; + PFNGLVERTEXATTRIB2HNVPROC epoxy_glVertexAttrib2hNV; + PFNGLVERTEXATTRIB2HVNVPROC epoxy_glVertexAttrib2hvNV; + PFNGLVERTEXATTRIB2SPROC epoxy_glVertexAttrib2s; + PFNGLVERTEXATTRIB2SARBPROC epoxy_glVertexAttrib2sARB; + PFNGLVERTEXATTRIB2SNVPROC epoxy_glVertexAttrib2sNV; + PFNGLVERTEXATTRIB2SVPROC epoxy_glVertexAttrib2sv; + PFNGLVERTEXATTRIB2SVARBPROC epoxy_glVertexAttrib2svARB; + PFNGLVERTEXATTRIB2SVNVPROC epoxy_glVertexAttrib2svNV; + PFNGLVERTEXATTRIB3DPROC epoxy_glVertexAttrib3d; + PFNGLVERTEXATTRIB3DARBPROC epoxy_glVertexAttrib3dARB; + PFNGLVERTEXATTRIB3DNVPROC epoxy_glVertexAttrib3dNV; + PFNGLVERTEXATTRIB3DVPROC epoxy_glVertexAttrib3dv; + PFNGLVERTEXATTRIB3DVARBPROC epoxy_glVertexAttrib3dvARB; + PFNGLVERTEXATTRIB3DVNVPROC epoxy_glVertexAttrib3dvNV; + PFNGLVERTEXATTRIB3FPROC epoxy_glVertexAttrib3f; + PFNGLVERTEXATTRIB3FARBPROC epoxy_glVertexAttrib3fARB; + PFNGLVERTEXATTRIB3FNVPROC epoxy_glVertexAttrib3fNV; + PFNGLVERTEXATTRIB3FVPROC epoxy_glVertexAttrib3fv; + PFNGLVERTEXATTRIB3FVARBPROC epoxy_glVertexAttrib3fvARB; + PFNGLVERTEXATTRIB3FVNVPROC epoxy_glVertexAttrib3fvNV; + PFNGLVERTEXATTRIB3HNVPROC epoxy_glVertexAttrib3hNV; + PFNGLVERTEXATTRIB3HVNVPROC epoxy_glVertexAttrib3hvNV; + PFNGLVERTEXATTRIB3SPROC epoxy_glVertexAttrib3s; + PFNGLVERTEXATTRIB3SARBPROC epoxy_glVertexAttrib3sARB; + PFNGLVERTEXATTRIB3SNVPROC epoxy_glVertexAttrib3sNV; + PFNGLVERTEXATTRIB3SVPROC epoxy_glVertexAttrib3sv; + PFNGLVERTEXATTRIB3SVARBPROC epoxy_glVertexAttrib3svARB; + PFNGLVERTEXATTRIB3SVNVPROC epoxy_glVertexAttrib3svNV; + PFNGLVERTEXATTRIB4NBVPROC epoxy_glVertexAttrib4Nbv; + PFNGLVERTEXATTRIB4NBVARBPROC epoxy_glVertexAttrib4NbvARB; + PFNGLVERTEXATTRIB4NIVPROC epoxy_glVertexAttrib4Niv; + PFNGLVERTEXATTRIB4NIVARBPROC epoxy_glVertexAttrib4NivARB; + PFNGLVERTEXATTRIB4NSVPROC epoxy_glVertexAttrib4Nsv; + PFNGLVERTEXATTRIB4NSVARBPROC epoxy_glVertexAttrib4NsvARB; + PFNGLVERTEXATTRIB4NUBPROC epoxy_glVertexAttrib4Nub; + PFNGLVERTEXATTRIB4NUBARBPROC epoxy_glVertexAttrib4NubARB; + PFNGLVERTEXATTRIB4NUBVPROC epoxy_glVertexAttrib4Nubv; + PFNGLVERTEXATTRIB4NUBVARBPROC epoxy_glVertexAttrib4NubvARB; + PFNGLVERTEXATTRIB4NUIVPROC epoxy_glVertexAttrib4Nuiv; + PFNGLVERTEXATTRIB4NUIVARBPROC epoxy_glVertexAttrib4NuivARB; + PFNGLVERTEXATTRIB4NUSVPROC epoxy_glVertexAttrib4Nusv; + PFNGLVERTEXATTRIB4NUSVARBPROC epoxy_glVertexAttrib4NusvARB; + PFNGLVERTEXATTRIB4BVPROC epoxy_glVertexAttrib4bv; + PFNGLVERTEXATTRIB4BVARBPROC epoxy_glVertexAttrib4bvARB; + PFNGLVERTEXATTRIB4DPROC epoxy_glVertexAttrib4d; + PFNGLVERTEXATTRIB4DARBPROC epoxy_glVertexAttrib4dARB; + PFNGLVERTEXATTRIB4DNVPROC epoxy_glVertexAttrib4dNV; + PFNGLVERTEXATTRIB4DVPROC epoxy_glVertexAttrib4dv; + PFNGLVERTEXATTRIB4DVARBPROC epoxy_glVertexAttrib4dvARB; + PFNGLVERTEXATTRIB4DVNVPROC epoxy_glVertexAttrib4dvNV; + PFNGLVERTEXATTRIB4FPROC epoxy_glVertexAttrib4f; + PFNGLVERTEXATTRIB4FARBPROC epoxy_glVertexAttrib4fARB; + PFNGLVERTEXATTRIB4FNVPROC epoxy_glVertexAttrib4fNV; + PFNGLVERTEXATTRIB4FVPROC epoxy_glVertexAttrib4fv; + PFNGLVERTEXATTRIB4FVARBPROC epoxy_glVertexAttrib4fvARB; + PFNGLVERTEXATTRIB4FVNVPROC epoxy_glVertexAttrib4fvNV; + PFNGLVERTEXATTRIB4HNVPROC epoxy_glVertexAttrib4hNV; + PFNGLVERTEXATTRIB4HVNVPROC epoxy_glVertexAttrib4hvNV; + PFNGLVERTEXATTRIB4IVPROC epoxy_glVertexAttrib4iv; + PFNGLVERTEXATTRIB4IVARBPROC epoxy_glVertexAttrib4ivARB; + PFNGLVERTEXATTRIB4SPROC epoxy_glVertexAttrib4s; + PFNGLVERTEXATTRIB4SARBPROC epoxy_glVertexAttrib4sARB; + PFNGLVERTEXATTRIB4SNVPROC epoxy_glVertexAttrib4sNV; + PFNGLVERTEXATTRIB4SVPROC epoxy_glVertexAttrib4sv; + PFNGLVERTEXATTRIB4SVARBPROC epoxy_glVertexAttrib4svARB; + PFNGLVERTEXATTRIB4SVNVPROC epoxy_glVertexAttrib4svNV; + PFNGLVERTEXATTRIB4UBNVPROC epoxy_glVertexAttrib4ubNV; + PFNGLVERTEXATTRIB4UBVPROC epoxy_glVertexAttrib4ubv; + PFNGLVERTEXATTRIB4UBVARBPROC epoxy_glVertexAttrib4ubvARB; + PFNGLVERTEXATTRIB4UBVNVPROC epoxy_glVertexAttrib4ubvNV; + PFNGLVERTEXATTRIB4UIVPROC epoxy_glVertexAttrib4uiv; + PFNGLVERTEXATTRIB4UIVARBPROC epoxy_glVertexAttrib4uivARB; + PFNGLVERTEXATTRIB4USVPROC epoxy_glVertexAttrib4usv; + PFNGLVERTEXATTRIB4USVARBPROC epoxy_glVertexAttrib4usvARB; + PFNGLVERTEXATTRIBARRAYOBJECTATIPROC epoxy_glVertexAttribArrayObjectATI; + PFNGLVERTEXATTRIBBINDINGPROC epoxy_glVertexAttribBinding; + PFNGLVERTEXATTRIBDIVISORPROC epoxy_glVertexAttribDivisor; + PFNGLVERTEXATTRIBDIVISORANGLEPROC epoxy_glVertexAttribDivisorANGLE; + PFNGLVERTEXATTRIBDIVISORARBPROC epoxy_glVertexAttribDivisorARB; + PFNGLVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexAttribDivisorEXT; + PFNGLVERTEXATTRIBDIVISORNVPROC epoxy_glVertexAttribDivisorNV; + PFNGLVERTEXATTRIBFORMATPROC epoxy_glVertexAttribFormat; + PFNGLVERTEXATTRIBFORMATNVPROC epoxy_glVertexAttribFormatNV; + PFNGLVERTEXATTRIBI1IPROC epoxy_glVertexAttribI1i; + PFNGLVERTEXATTRIBI1IEXTPROC epoxy_glVertexAttribI1iEXT; + PFNGLVERTEXATTRIBI1IVPROC epoxy_glVertexAttribI1iv; + PFNGLVERTEXATTRIBI1IVEXTPROC epoxy_glVertexAttribI1ivEXT; + PFNGLVERTEXATTRIBI1UIPROC epoxy_glVertexAttribI1ui; + PFNGLVERTEXATTRIBI1UIEXTPROC epoxy_glVertexAttribI1uiEXT; + PFNGLVERTEXATTRIBI1UIVPROC epoxy_glVertexAttribI1uiv; + PFNGLVERTEXATTRIBI1UIVEXTPROC epoxy_glVertexAttribI1uivEXT; + PFNGLVERTEXATTRIBI2IPROC epoxy_glVertexAttribI2i; + PFNGLVERTEXATTRIBI2IEXTPROC epoxy_glVertexAttribI2iEXT; + PFNGLVERTEXATTRIBI2IVPROC epoxy_glVertexAttribI2iv; + PFNGLVERTEXATTRIBI2IVEXTPROC epoxy_glVertexAttribI2ivEXT; + PFNGLVERTEXATTRIBI2UIPROC epoxy_glVertexAttribI2ui; + PFNGLVERTEXATTRIBI2UIEXTPROC epoxy_glVertexAttribI2uiEXT; + PFNGLVERTEXATTRIBI2UIVPROC epoxy_glVertexAttribI2uiv; + PFNGLVERTEXATTRIBI2UIVEXTPROC epoxy_glVertexAttribI2uivEXT; + PFNGLVERTEXATTRIBI3IPROC epoxy_glVertexAttribI3i; + PFNGLVERTEXATTRIBI3IEXTPROC epoxy_glVertexAttribI3iEXT; + PFNGLVERTEXATTRIBI3IVPROC epoxy_glVertexAttribI3iv; + PFNGLVERTEXATTRIBI3IVEXTPROC epoxy_glVertexAttribI3ivEXT; + PFNGLVERTEXATTRIBI3UIPROC epoxy_glVertexAttribI3ui; + PFNGLVERTEXATTRIBI3UIEXTPROC epoxy_glVertexAttribI3uiEXT; + PFNGLVERTEXATTRIBI3UIVPROC epoxy_glVertexAttribI3uiv; + PFNGLVERTEXATTRIBI3UIVEXTPROC epoxy_glVertexAttribI3uivEXT; + PFNGLVERTEXATTRIBI4BVPROC epoxy_glVertexAttribI4bv; + PFNGLVERTEXATTRIBI4BVEXTPROC epoxy_glVertexAttribI4bvEXT; + PFNGLVERTEXATTRIBI4IPROC epoxy_glVertexAttribI4i; + PFNGLVERTEXATTRIBI4IEXTPROC epoxy_glVertexAttribI4iEXT; + PFNGLVERTEXATTRIBI4IVPROC epoxy_glVertexAttribI4iv; + PFNGLVERTEXATTRIBI4IVEXTPROC epoxy_glVertexAttribI4ivEXT; + PFNGLVERTEXATTRIBI4SVPROC epoxy_glVertexAttribI4sv; + PFNGLVERTEXATTRIBI4SVEXTPROC epoxy_glVertexAttribI4svEXT; + PFNGLVERTEXATTRIBI4UBVPROC epoxy_glVertexAttribI4ubv; + PFNGLVERTEXATTRIBI4UBVEXTPROC epoxy_glVertexAttribI4ubvEXT; + PFNGLVERTEXATTRIBI4UIPROC epoxy_glVertexAttribI4ui; + PFNGLVERTEXATTRIBI4UIEXTPROC epoxy_glVertexAttribI4uiEXT; + PFNGLVERTEXATTRIBI4UIVPROC epoxy_glVertexAttribI4uiv; + PFNGLVERTEXATTRIBI4UIVEXTPROC epoxy_glVertexAttribI4uivEXT; + PFNGLVERTEXATTRIBI4USVPROC epoxy_glVertexAttribI4usv; + PFNGLVERTEXATTRIBI4USVEXTPROC epoxy_glVertexAttribI4usvEXT; + PFNGLVERTEXATTRIBIFORMATPROC epoxy_glVertexAttribIFormat; + PFNGLVERTEXATTRIBIFORMATNVPROC epoxy_glVertexAttribIFormatNV; + PFNGLVERTEXATTRIBIPOINTERPROC epoxy_glVertexAttribIPointer; + PFNGLVERTEXATTRIBIPOINTEREXTPROC epoxy_glVertexAttribIPointerEXT; + PFNGLVERTEXATTRIBL1DPROC epoxy_glVertexAttribL1d; + PFNGLVERTEXATTRIBL1DEXTPROC epoxy_glVertexAttribL1dEXT; + PFNGLVERTEXATTRIBL1DVPROC epoxy_glVertexAttribL1dv; + PFNGLVERTEXATTRIBL1DVEXTPROC epoxy_glVertexAttribL1dvEXT; + PFNGLVERTEXATTRIBL1I64NVPROC epoxy_glVertexAttribL1i64NV; + PFNGLVERTEXATTRIBL1I64VNVPROC epoxy_glVertexAttribL1i64vNV; + PFNGLVERTEXATTRIBL1UI64ARBPROC epoxy_glVertexAttribL1ui64ARB; + PFNGLVERTEXATTRIBL1UI64NVPROC epoxy_glVertexAttribL1ui64NV; + PFNGLVERTEXATTRIBL1UI64VARBPROC epoxy_glVertexAttribL1ui64vARB; + PFNGLVERTEXATTRIBL1UI64VNVPROC epoxy_glVertexAttribL1ui64vNV; + PFNGLVERTEXATTRIBL2DPROC epoxy_glVertexAttribL2d; + PFNGLVERTEXATTRIBL2DEXTPROC epoxy_glVertexAttribL2dEXT; + PFNGLVERTEXATTRIBL2DVPROC epoxy_glVertexAttribL2dv; + PFNGLVERTEXATTRIBL2DVEXTPROC epoxy_glVertexAttribL2dvEXT; + PFNGLVERTEXATTRIBL2I64NVPROC epoxy_glVertexAttribL2i64NV; + PFNGLVERTEXATTRIBL2I64VNVPROC epoxy_glVertexAttribL2i64vNV; + PFNGLVERTEXATTRIBL2UI64NVPROC epoxy_glVertexAttribL2ui64NV; + PFNGLVERTEXATTRIBL2UI64VNVPROC epoxy_glVertexAttribL2ui64vNV; + PFNGLVERTEXATTRIBL3DPROC epoxy_glVertexAttribL3d; + PFNGLVERTEXATTRIBL3DEXTPROC epoxy_glVertexAttribL3dEXT; + PFNGLVERTEXATTRIBL3DVPROC epoxy_glVertexAttribL3dv; + PFNGLVERTEXATTRIBL3DVEXTPROC epoxy_glVertexAttribL3dvEXT; + PFNGLVERTEXATTRIBL3I64NVPROC epoxy_glVertexAttribL3i64NV; + PFNGLVERTEXATTRIBL3I64VNVPROC epoxy_glVertexAttribL3i64vNV; + PFNGLVERTEXATTRIBL3UI64NVPROC epoxy_glVertexAttribL3ui64NV; + PFNGLVERTEXATTRIBL3UI64VNVPROC epoxy_glVertexAttribL3ui64vNV; + PFNGLVERTEXATTRIBL4DPROC epoxy_glVertexAttribL4d; + PFNGLVERTEXATTRIBL4DEXTPROC epoxy_glVertexAttribL4dEXT; + PFNGLVERTEXATTRIBL4DVPROC epoxy_glVertexAttribL4dv; + PFNGLVERTEXATTRIBL4DVEXTPROC epoxy_glVertexAttribL4dvEXT; + PFNGLVERTEXATTRIBL4I64NVPROC epoxy_glVertexAttribL4i64NV; + PFNGLVERTEXATTRIBL4I64VNVPROC epoxy_glVertexAttribL4i64vNV; + PFNGLVERTEXATTRIBL4UI64NVPROC epoxy_glVertexAttribL4ui64NV; + PFNGLVERTEXATTRIBL4UI64VNVPROC epoxy_glVertexAttribL4ui64vNV; + PFNGLVERTEXATTRIBLFORMATPROC epoxy_glVertexAttribLFormat; + PFNGLVERTEXATTRIBLFORMATNVPROC epoxy_glVertexAttribLFormatNV; + PFNGLVERTEXATTRIBLPOINTERPROC epoxy_glVertexAttribLPointer; + PFNGLVERTEXATTRIBLPOINTEREXTPROC epoxy_glVertexAttribLPointerEXT; + PFNGLVERTEXATTRIBP1UIPROC epoxy_glVertexAttribP1ui; + PFNGLVERTEXATTRIBP1UIVPROC epoxy_glVertexAttribP1uiv; + PFNGLVERTEXATTRIBP2UIPROC epoxy_glVertexAttribP2ui; + PFNGLVERTEXATTRIBP2UIVPROC epoxy_glVertexAttribP2uiv; + PFNGLVERTEXATTRIBP3UIPROC epoxy_glVertexAttribP3ui; + PFNGLVERTEXATTRIBP3UIVPROC epoxy_glVertexAttribP3uiv; + PFNGLVERTEXATTRIBP4UIPROC epoxy_glVertexAttribP4ui; + PFNGLVERTEXATTRIBP4UIVPROC epoxy_glVertexAttribP4uiv; + PFNGLVERTEXATTRIBPARAMETERIAMDPROC epoxy_glVertexAttribParameteriAMD; + PFNGLVERTEXATTRIBPOINTERPROC epoxy_glVertexAttribPointer; + PFNGLVERTEXATTRIBPOINTERARBPROC epoxy_glVertexAttribPointerARB; + PFNGLVERTEXATTRIBPOINTERNVPROC epoxy_glVertexAttribPointerNV; + PFNGLVERTEXATTRIBS1DVNVPROC epoxy_glVertexAttribs1dvNV; + PFNGLVERTEXATTRIBS1FVNVPROC epoxy_glVertexAttribs1fvNV; + PFNGLVERTEXATTRIBS1HVNVPROC epoxy_glVertexAttribs1hvNV; + PFNGLVERTEXATTRIBS1SVNVPROC epoxy_glVertexAttribs1svNV; + PFNGLVERTEXATTRIBS2DVNVPROC epoxy_glVertexAttribs2dvNV; + PFNGLVERTEXATTRIBS2FVNVPROC epoxy_glVertexAttribs2fvNV; + PFNGLVERTEXATTRIBS2HVNVPROC epoxy_glVertexAttribs2hvNV; + PFNGLVERTEXATTRIBS2SVNVPROC epoxy_glVertexAttribs2svNV; + PFNGLVERTEXATTRIBS3DVNVPROC epoxy_glVertexAttribs3dvNV; + PFNGLVERTEXATTRIBS3FVNVPROC epoxy_glVertexAttribs3fvNV; + PFNGLVERTEXATTRIBS3HVNVPROC epoxy_glVertexAttribs3hvNV; + PFNGLVERTEXATTRIBS3SVNVPROC epoxy_glVertexAttribs3svNV; + PFNGLVERTEXATTRIBS4DVNVPROC epoxy_glVertexAttribs4dvNV; + PFNGLVERTEXATTRIBS4FVNVPROC epoxy_glVertexAttribs4fvNV; + PFNGLVERTEXATTRIBS4HVNVPROC epoxy_glVertexAttribs4hvNV; + PFNGLVERTEXATTRIBS4SVNVPROC epoxy_glVertexAttribs4svNV; + PFNGLVERTEXATTRIBS4UBVNVPROC epoxy_glVertexAttribs4ubvNV; + PFNGLVERTEXBINDINGDIVISORPROC epoxy_glVertexBindingDivisor; + PFNGLVERTEXBLENDARBPROC epoxy_glVertexBlendARB; + PFNGLVERTEXBLENDENVFATIPROC epoxy_glVertexBlendEnvfATI; + PFNGLVERTEXBLENDENVIATIPROC epoxy_glVertexBlendEnviATI; + PFNGLVERTEXFORMATNVPROC epoxy_glVertexFormatNV; + PFNGLVERTEXP2UIPROC epoxy_glVertexP2ui; + PFNGLVERTEXP2UIVPROC epoxy_glVertexP2uiv; + PFNGLVERTEXP3UIPROC epoxy_glVertexP3ui; + PFNGLVERTEXP3UIVPROC epoxy_glVertexP3uiv; + PFNGLVERTEXP4UIPROC epoxy_glVertexP4ui; + PFNGLVERTEXP4UIVPROC epoxy_glVertexP4uiv; + PFNGLVERTEXPOINTERPROC epoxy_glVertexPointer; + PFNGLVERTEXPOINTEREXTPROC epoxy_glVertexPointerEXT; + PFNGLVERTEXPOINTERLISTIBMPROC epoxy_glVertexPointerListIBM; + PFNGLVERTEXPOINTERVINTELPROC epoxy_glVertexPointervINTEL; + PFNGLVERTEXSTREAM1DATIPROC epoxy_glVertexStream1dATI; + PFNGLVERTEXSTREAM1DVATIPROC epoxy_glVertexStream1dvATI; + PFNGLVERTEXSTREAM1FATIPROC epoxy_glVertexStream1fATI; + PFNGLVERTEXSTREAM1FVATIPROC epoxy_glVertexStream1fvATI; + PFNGLVERTEXSTREAM1IATIPROC epoxy_glVertexStream1iATI; + PFNGLVERTEXSTREAM1IVATIPROC epoxy_glVertexStream1ivATI; + PFNGLVERTEXSTREAM1SATIPROC epoxy_glVertexStream1sATI; + PFNGLVERTEXSTREAM1SVATIPROC epoxy_glVertexStream1svATI; + PFNGLVERTEXSTREAM2DATIPROC epoxy_glVertexStream2dATI; + PFNGLVERTEXSTREAM2DVATIPROC epoxy_glVertexStream2dvATI; + PFNGLVERTEXSTREAM2FATIPROC epoxy_glVertexStream2fATI; + PFNGLVERTEXSTREAM2FVATIPROC epoxy_glVertexStream2fvATI; + PFNGLVERTEXSTREAM2IATIPROC epoxy_glVertexStream2iATI; + PFNGLVERTEXSTREAM2IVATIPROC epoxy_glVertexStream2ivATI; + PFNGLVERTEXSTREAM2SATIPROC epoxy_glVertexStream2sATI; + PFNGLVERTEXSTREAM2SVATIPROC epoxy_glVertexStream2svATI; + PFNGLVERTEXSTREAM3DATIPROC epoxy_glVertexStream3dATI; + PFNGLVERTEXSTREAM3DVATIPROC epoxy_glVertexStream3dvATI; + PFNGLVERTEXSTREAM3FATIPROC epoxy_glVertexStream3fATI; + PFNGLVERTEXSTREAM3FVATIPROC epoxy_glVertexStream3fvATI; + PFNGLVERTEXSTREAM3IATIPROC epoxy_glVertexStream3iATI; + PFNGLVERTEXSTREAM3IVATIPROC epoxy_glVertexStream3ivATI; + PFNGLVERTEXSTREAM3SATIPROC epoxy_glVertexStream3sATI; + PFNGLVERTEXSTREAM3SVATIPROC epoxy_glVertexStream3svATI; + PFNGLVERTEXSTREAM4DATIPROC epoxy_glVertexStream4dATI; + PFNGLVERTEXSTREAM4DVATIPROC epoxy_glVertexStream4dvATI; + PFNGLVERTEXSTREAM4FATIPROC epoxy_glVertexStream4fATI; + PFNGLVERTEXSTREAM4FVATIPROC epoxy_glVertexStream4fvATI; + PFNGLVERTEXSTREAM4IATIPROC epoxy_glVertexStream4iATI; + PFNGLVERTEXSTREAM4IVATIPROC epoxy_glVertexStream4ivATI; + PFNGLVERTEXSTREAM4SATIPROC epoxy_glVertexStream4sATI; + PFNGLVERTEXSTREAM4SVATIPROC epoxy_glVertexStream4svATI; + PFNGLVERTEXWEIGHTPOINTEREXTPROC epoxy_glVertexWeightPointerEXT; + PFNGLVERTEXWEIGHTFEXTPROC epoxy_glVertexWeightfEXT; + PFNGLVERTEXWEIGHTFVEXTPROC epoxy_glVertexWeightfvEXT; + PFNGLVERTEXWEIGHTHNVPROC epoxy_glVertexWeighthNV; + PFNGLVERTEXWEIGHTHVNVPROC epoxy_glVertexWeighthvNV; + PFNGLVIDEOCAPTURENVPROC epoxy_glVideoCaptureNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC epoxy_glVideoCaptureStreamParameterdvNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC epoxy_glVideoCaptureStreamParameterfvNV; + PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC epoxy_glVideoCaptureStreamParameterivNV; + PFNGLVIEWPORTPROC epoxy_glViewport; + PFNGLVIEWPORTARRAYVPROC epoxy_glViewportArrayv; + PFNGLVIEWPORTARRAYVNVPROC epoxy_glViewportArrayvNV; + PFNGLVIEWPORTINDEXEDFPROC epoxy_glViewportIndexedf; + PFNGLVIEWPORTINDEXEDFNVPROC epoxy_glViewportIndexedfNV; + PFNGLVIEWPORTINDEXEDFVPROC epoxy_glViewportIndexedfv; + PFNGLVIEWPORTINDEXEDFVNVPROC epoxy_glViewportIndexedfvNV; + PFNGLWAITSYNCPROC epoxy_glWaitSync; + PFNGLWAITSYNCAPPLEPROC epoxy_glWaitSyncAPPLE; + PFNGLWEIGHTPATHSNVPROC epoxy_glWeightPathsNV; + PFNGLWEIGHTPOINTERARBPROC epoxy_glWeightPointerARB; + PFNGLWEIGHTPOINTEROESPROC epoxy_glWeightPointerOES; + PFNGLWEIGHTBVARBPROC epoxy_glWeightbvARB; + PFNGLWEIGHTDVARBPROC epoxy_glWeightdvARB; + PFNGLWEIGHTFVARBPROC epoxy_glWeightfvARB; + PFNGLWEIGHTIVARBPROC epoxy_glWeightivARB; + PFNGLWEIGHTSVARBPROC epoxy_glWeightsvARB; + PFNGLWEIGHTUBVARBPROC epoxy_glWeightubvARB; + PFNGLWEIGHTUIVARBPROC epoxy_glWeightuivARB; + PFNGLWEIGHTUSVARBPROC epoxy_glWeightusvARB; + PFNGLWINDOWPOS2DPROC epoxy_glWindowPos2d; + PFNGLWINDOWPOS2DARBPROC epoxy_glWindowPos2dARB; + PFNGLWINDOWPOS2DMESAPROC epoxy_glWindowPos2dMESA; + PFNGLWINDOWPOS2DVPROC epoxy_glWindowPos2dv; + PFNGLWINDOWPOS2DVARBPROC epoxy_glWindowPos2dvARB; + PFNGLWINDOWPOS2DVMESAPROC epoxy_glWindowPos2dvMESA; + PFNGLWINDOWPOS2FPROC epoxy_glWindowPos2f; + PFNGLWINDOWPOS2FARBPROC epoxy_glWindowPos2fARB; + PFNGLWINDOWPOS2FMESAPROC epoxy_glWindowPos2fMESA; + PFNGLWINDOWPOS2FVPROC epoxy_glWindowPos2fv; + PFNGLWINDOWPOS2FVARBPROC epoxy_glWindowPos2fvARB; + PFNGLWINDOWPOS2FVMESAPROC epoxy_glWindowPos2fvMESA; + PFNGLWINDOWPOS2IPROC epoxy_glWindowPos2i; + PFNGLWINDOWPOS2IARBPROC epoxy_glWindowPos2iARB; + PFNGLWINDOWPOS2IMESAPROC epoxy_glWindowPos2iMESA; + PFNGLWINDOWPOS2IVPROC epoxy_glWindowPos2iv; + PFNGLWINDOWPOS2IVARBPROC epoxy_glWindowPos2ivARB; + PFNGLWINDOWPOS2IVMESAPROC epoxy_glWindowPos2ivMESA; + PFNGLWINDOWPOS2SPROC epoxy_glWindowPos2s; + PFNGLWINDOWPOS2SARBPROC epoxy_glWindowPos2sARB; + PFNGLWINDOWPOS2SMESAPROC epoxy_glWindowPos2sMESA; + PFNGLWINDOWPOS2SVPROC epoxy_glWindowPos2sv; + PFNGLWINDOWPOS2SVARBPROC epoxy_glWindowPos2svARB; + PFNGLWINDOWPOS2SVMESAPROC epoxy_glWindowPos2svMESA; + PFNGLWINDOWPOS3DPROC epoxy_glWindowPos3d; + PFNGLWINDOWPOS3DARBPROC epoxy_glWindowPos3dARB; + PFNGLWINDOWPOS3DMESAPROC epoxy_glWindowPos3dMESA; + PFNGLWINDOWPOS3DVPROC epoxy_glWindowPos3dv; + PFNGLWINDOWPOS3DVARBPROC epoxy_glWindowPos3dvARB; + PFNGLWINDOWPOS3DVMESAPROC epoxy_glWindowPos3dvMESA; + PFNGLWINDOWPOS3FPROC epoxy_glWindowPos3f; + PFNGLWINDOWPOS3FARBPROC epoxy_glWindowPos3fARB; + PFNGLWINDOWPOS3FMESAPROC epoxy_glWindowPos3fMESA; + PFNGLWINDOWPOS3FVPROC epoxy_glWindowPos3fv; + PFNGLWINDOWPOS3FVARBPROC epoxy_glWindowPos3fvARB; + PFNGLWINDOWPOS3FVMESAPROC epoxy_glWindowPos3fvMESA; + PFNGLWINDOWPOS3IPROC epoxy_glWindowPos3i; + PFNGLWINDOWPOS3IARBPROC epoxy_glWindowPos3iARB; + PFNGLWINDOWPOS3IMESAPROC epoxy_glWindowPos3iMESA; + PFNGLWINDOWPOS3IVPROC epoxy_glWindowPos3iv; + PFNGLWINDOWPOS3IVARBPROC epoxy_glWindowPos3ivARB; + PFNGLWINDOWPOS3IVMESAPROC epoxy_glWindowPos3ivMESA; + PFNGLWINDOWPOS3SPROC epoxy_glWindowPos3s; + PFNGLWINDOWPOS3SARBPROC epoxy_glWindowPos3sARB; + PFNGLWINDOWPOS3SMESAPROC epoxy_glWindowPos3sMESA; + PFNGLWINDOWPOS3SVPROC epoxy_glWindowPos3sv; + PFNGLWINDOWPOS3SVARBPROC epoxy_glWindowPos3svARB; + PFNGLWINDOWPOS3SVMESAPROC epoxy_glWindowPos3svMESA; + PFNGLWINDOWPOS4DMESAPROC epoxy_glWindowPos4dMESA; + PFNGLWINDOWPOS4DVMESAPROC epoxy_glWindowPos4dvMESA; + PFNGLWINDOWPOS4FMESAPROC epoxy_glWindowPos4fMESA; + PFNGLWINDOWPOS4FVMESAPROC epoxy_glWindowPos4fvMESA; + PFNGLWINDOWPOS4IMESAPROC epoxy_glWindowPos4iMESA; + PFNGLWINDOWPOS4IVMESAPROC epoxy_glWindowPos4ivMESA; + PFNGLWINDOWPOS4SMESAPROC epoxy_glWindowPos4sMESA; + PFNGLWINDOWPOS4SVMESAPROC epoxy_glWindowPos4svMESA; + PFNGLWRITEMASKEXTPROC epoxy_glWriteMaskEXT; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum gl_provider { + gl_provider_terminator = 0, + Desktop_OpenGL_1_0, + Desktop_OpenGL_1_1, + Desktop_OpenGL_1_2, + Desktop_OpenGL_1_3, + Desktop_OpenGL_1_4, + Desktop_OpenGL_1_5, + Desktop_OpenGL_2_0, + Desktop_OpenGL_2_1, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + Desktop_OpenGL_3_2, + Desktop_OpenGL_3_3, + Desktop_OpenGL_4_0, + Desktop_OpenGL_4_1, + Desktop_OpenGL_4_2, + Desktop_OpenGL_4_3, + Desktop_OpenGL_4_4, + Desktop_OpenGL_4_5, + GL_extension_GL_3DFX_tbuffer, + GL_extension_GL_AMD_debug_output, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_AMD_interleaved_elements, + GL_extension_GL_AMD_multi_draw_indirect, + GL_extension_GL_AMD_name_gen_delete, + GL_extension_GL_AMD_occlusion_query_event, + GL_extension_GL_AMD_performance_monitor, + GL_extension_GL_AMD_sample_positions, + GL_extension_GL_AMD_sparse_texture, + GL_extension_GL_AMD_stencil_operation_extended, + GL_extension_GL_AMD_vertex_shader_tessellator, + GL_extension_GL_ANGLE_framebuffer_blit, + GL_extension_GL_ANGLE_framebuffer_multisample, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ANGLE_translated_shader_source, + GL_extension_GL_APPLE_copy_texture_levels, + GL_extension_GL_APPLE_element_array, + GL_extension_GL_APPLE_fence, + GL_extension_GL_APPLE_flush_buffer_range, + GL_extension_GL_APPLE_framebuffer_multisample, + GL_extension_GL_APPLE_object_purgeable, + GL_extension_GL_APPLE_sync, + GL_extension_GL_APPLE_texture_range, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_APPLE_vertex_array_range, + GL_extension_GL_APPLE_vertex_program_evaluators, + GL_extension_GL_ARB_ES2_compatibility, + GL_extension_GL_ARB_ES3_1_compatibility, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_ARB_bindless_texture, + GL_extension_GL_ARB_blend_func_extended, + GL_extension_GL_ARB_buffer_storage, + GL_extension_GL_ARB_cl_event, + GL_extension_GL_ARB_clear_buffer_object, + GL_extension_GL_ARB_clear_texture, + GL_extension_GL_ARB_clip_control, + GL_extension_GL_ARB_color_buffer_float, + GL_extension_GL_ARB_compute_shader, + GL_extension_GL_ARB_compute_variable_group_size, + GL_extension_GL_ARB_copy_buffer, + GL_extension_GL_ARB_copy_image, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_ARB_direct_state_access, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_ARB_draw_indirect, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_framebuffer_no_attachments, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_ARB_get_program_binary, + GL_extension_GL_ARB_get_texture_sub_image, + GL_extension_GL_ARB_gpu_shader_fp64, + GL_extension_GL_ARB_gpu_shader_int64, + GL_extension_GL_ARB_imaging, + GL_extension_GL_ARB_indirect_parameters, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_ARB_internalformat_query2, + GL_extension_GL_ARB_internalformat_query, + GL_extension_GL_ARB_invalidate_subdata, + GL_extension_GL_ARB_map_buffer_range, + GL_extension_GL_ARB_matrix_palette, + GL_extension_GL_ARB_multi_bind, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_ARB_multisample, + GL_extension_GL_ARB_multitexture, + GL_extension_GL_ARB_occlusion_query, + GL_extension_GL_ARB_parallel_shader_compile, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_ARB_program_interface_query, + GL_extension_GL_ARB_provoking_vertex, + GL_extension_GL_ARB_robustness, + GL_extension_GL_ARB_sample_locations, + GL_extension_GL_ARB_sample_shading, + GL_extension_GL_ARB_sampler_objects, + GL_extension_GL_ARB_separate_shader_objects, + GL_extension_GL_ARB_shader_atomic_counters, + GL_extension_GL_ARB_shader_image_load_store, + GL_extension_GL_ARB_shader_objects, + GL_extension_GL_ARB_shader_storage_buffer_object, + GL_extension_GL_ARB_shader_subroutine, + GL_extension_GL_ARB_shading_language_include, + GL_extension_GL_ARB_sparse_buffer, + GL_extension_GL_ARB_sparse_texture, + GL_extension_GL_ARB_sync, + GL_extension_GL_ARB_tessellation_shader, + GL_extension_GL_ARB_texture_barrier, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_ARB_texture_buffer_range, + GL_extension_GL_ARB_texture_compression, + GL_extension_GL_ARB_texture_multisample, + GL_extension_GL_ARB_texture_storage, + GL_extension_GL_ARB_texture_storage_multisample, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_ARB_transform_feedback2, + GL_extension_GL_ARB_transform_feedback3, + GL_extension_GL_ARB_transform_feedback_instanced, + GL_extension_GL_ARB_transpose_matrix, + GL_extension_GL_ARB_uniform_buffer_object, + GL_extension_GL_ARB_vertex_array_object, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_ARB_vertex_attrib_binding, + GL_extension_GL_ARB_vertex_blend, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_ATI_draw_buffers, + GL_extension_GL_ATI_element_array, + GL_extension_GL_ATI_envmap_bumpmap, + GL_extension_GL_ATI_fragment_shader, + GL_extension_GL_ATI_map_object_buffer, + GL_extension_GL_ATI_pn_triangles, + GL_extension_GL_ATI_separate_stencil, + GL_extension_GL_ATI_vertex_array_object, + GL_extension_GL_ATI_vertex_attrib_array_object, + GL_extension_GL_ATI_vertex_streams, + GL_extension_GL_EXT_base_instance, + GL_extension_GL_EXT_bindable_uniform, + GL_extension_GL_EXT_blend_color, + GL_extension_GL_EXT_blend_equation_separate, + GL_extension_GL_EXT_blend_func_extended, + GL_extension_GL_EXT_blend_func_separate, + GL_extension_GL_EXT_blend_minmax, + GL_extension_GL_EXT_buffer_storage, + GL_extension_GL_EXT_color_subtable, + GL_extension_GL_EXT_compiled_vertex_array, + GL_extension_GL_EXT_convolution, + GL_extension_GL_EXT_coordinate_frame, + GL_extension_GL_EXT_copy_image, + GL_extension_GL_EXT_copy_texture, + GL_extension_GL_EXT_cull_vertex, + GL_extension_GL_EXT_debug_label, + GL_extension_GL_EXT_debug_marker, + GL_extension_GL_EXT_depth_bounds_test, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_discard_framebuffer, + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_draw_range_elements, + GL_extension_GL_EXT_fog_coord, + GL_extension_GL_EXT_framebuffer_blit, + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_framebuffer_object, + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_EXT_gpu_program_parameters, + GL_extension_GL_EXT_gpu_shader4, + GL_extension_GL_EXT_histogram, + GL_extension_GL_EXT_index_func, + GL_extension_GL_EXT_index_material, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_EXT_light_texture, + GL_extension_GL_EXT_map_buffer_range, + GL_extension_GL_EXT_multi_draw_arrays, + GL_extension_GL_EXT_multi_draw_indirect, + GL_extension_GL_EXT_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + GL_extension_GL_EXT_multiview_draw_buffers, + GL_extension_GL_EXT_occlusion_query_boolean, + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_EXT_pixel_transform, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_EXT_polygon_offset, + GL_extension_GL_EXT_polygon_offset_clamp, + GL_extension_GL_EXT_primitive_bounding_box, + GL_extension_GL_EXT_provoking_vertex, + GL_extension_GL_EXT_raster_multisample, + GL_extension_GL_EXT_robustness, + GL_extension_GL_EXT_secondary_color, + GL_extension_GL_EXT_separate_shader_objects, + GL_extension_GL_EXT_shader_image_load_store, + GL_extension_GL_EXT_sparse_texture, + GL_extension_GL_EXT_stencil_clear_tag, + GL_extension_GL_EXT_stencil_two_side, + GL_extension_GL_EXT_subtexture, + GL_extension_GL_EXT_tessellation_shader, + GL_extension_GL_EXT_texture3D, + GL_extension_GL_EXT_texture_array, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + GL_extension_GL_EXT_texture_filter_minmax, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_EXT_texture_object, + GL_extension_GL_EXT_texture_perturb_normal, + GL_extension_GL_EXT_texture_storage, + GL_extension_GL_EXT_texture_view, + GL_extension_GL_EXT_timer_query, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_EXT_vertex_array, + GL_extension_GL_EXT_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_shader, + GL_extension_GL_EXT_vertex_weighting, + GL_extension_GL_EXT_x11_sync_object, + GL_extension_GL_GREMEDY_frame_terminator, + GL_extension_GL_GREMEDY_string_marker, + GL_extension_GL_HP_image_transform, + GL_extension_GL_IBM_multimode_draw_arrays, + GL_extension_GL_IBM_static_data, + GL_extension_GL_IBM_vertex_array_lists, + GL_extension_GL_IMG_multisampled_render_to_texture, + GL_extension_GL_IMG_user_clip_plane, + GL_extension_GL_INGR_blend_func_separate, + GL_extension_GL_INTEL_framebuffer_CMAA, + GL_extension_GL_INTEL_map_texture, + GL_extension_GL_INTEL_parallel_arrays, + GL_extension_GL_INTEL_performance_query, + GL_extension_GL_KHR_blend_equation_advanced, + GL_extension_GL_KHR_debug, + GL_extension_GL_KHR_robustness, + GL_extension_GL_MESA_resize_buffers, + GL_extension_GL_MESA_window_pos, + GL_extension_GL_NVX_conditional_render, + GL_extension_GL_NV_bindless_multi_draw_indirect, + GL_extension_GL_NV_bindless_multi_draw_indirect_count, + GL_extension_GL_NV_bindless_texture, + GL_extension_GL_NV_blend_equation_advanced, + GL_extension_GL_NV_command_list, + GL_extension_GL_NV_conditional_render, + GL_extension_GL_NV_conservative_raster, + GL_extension_GL_NV_conservative_raster_dilate, + GL_extension_GL_NV_copy_buffer, + GL_extension_GL_NV_copy_image, + GL_extension_GL_NV_coverage_sample, + GL_extension_GL_NV_depth_buffer_float, + GL_extension_GL_NV_draw_buffers, + GL_extension_GL_NV_draw_instanced, + GL_extension_GL_NV_draw_texture, + GL_extension_GL_NV_evaluators, + GL_extension_GL_NV_explicit_multisample, + GL_extension_GL_NV_fence, + GL_extension_GL_NV_fragment_coverage_to_color, + GL_extension_GL_NV_fragment_program, + GL_extension_GL_NV_framebuffer_blit, + GL_extension_GL_NV_framebuffer_mixed_samples, + GL_extension_GL_NV_framebuffer_multisample, + GL_extension_GL_NV_framebuffer_multisample_coverage, + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_NV_gpu_program4, + GL_extension_GL_NV_gpu_program5, + GL_extension_GL_NV_gpu_shader5, + GL_extension_GL_NV_half_float, + GL_extension_GL_NV_instanced_arrays, + GL_extension_GL_NV_internalformat_sample_query, + GL_extension_GL_NV_non_square_matrices, + GL_extension_GL_NV_occlusion_query, + GL_extension_GL_NV_parameter_buffer_object, + GL_extension_GL_NV_path_rendering, + GL_extension_GL_NV_pixel_data_range, + GL_extension_GL_NV_point_sprite, + GL_extension_GL_NV_polygon_mode, + GL_extension_GL_NV_present_video, + GL_extension_GL_NV_primitive_restart, + GL_extension_GL_NV_read_buffer, + GL_extension_GL_NV_register_combiners2, + GL_extension_GL_NV_register_combiners, + GL_extension_GL_NV_sample_locations, + GL_extension_GL_NV_shader_buffer_load, + GL_extension_GL_NV_texture_barrier, + GL_extension_GL_NV_texture_multisample, + GL_extension_GL_NV_transform_feedback2, + GL_extension_GL_NV_transform_feedback, + GL_extension_GL_NV_vdpau_interop, + GL_extension_GL_NV_vertex_array_range, + GL_extension_GL_NV_vertex_attrib_integer_64bit, + GL_extension_GL_NV_vertex_buffer_unified_memory, + GL_extension_GL_NV_vertex_program4, + GL_extension_GL_NV_vertex_program, + GL_extension_GL_NV_video_capture, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_EGL_image, + GL_extension_GL_OES_blend_equation_separate, + GL_extension_GL_OES_blend_func_separate, + GL_extension_GL_OES_blend_subtract, + GL_extension_GL_OES_byte_coordinates, + GL_extension_GL_OES_copy_image, + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_OES_draw_elements_base_vertex, + GL_extension_GL_OES_draw_texture, + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_framebuffer_object, + GL_extension_GL_OES_geometry_shader, + GL_extension_GL_OES_get_program_binary, + GL_extension_GL_OES_mapbuffer, + GL_extension_GL_OES_matrix_palette, + GL_extension_GL_OES_point_size_array, + GL_extension_GL_OES_primitive_bounding_box, + GL_extension_GL_OES_query_matrix, + GL_extension_GL_OES_sample_shading, + GL_extension_GL_OES_single_precision, + GL_extension_GL_OES_tessellation_shader, + GL_extension_GL_OES_texture_3D, + GL_extension_GL_OES_texture_border_clamp, + GL_extension_GL_OES_texture_buffer, + GL_extension_GL_OES_texture_cube_map, + GL_extension_GL_OES_texture_storage_multisample_2d_array, + GL_extension_GL_OES_texture_view, + GL_extension_GL_OES_vertex_array_object, + GL_extension_GL_OVR_multiview, + GL_extension_GL_PGI_misc_hints, + GL_extension_GL_QCOM_alpha_test, + GL_extension_GL_QCOM_driver_control, + GL_extension_GL_QCOM_extended_get2, + GL_extension_GL_QCOM_extended_get, + GL_extension_GL_QCOM_tiled_rendering, + GL_extension_GL_SGIS_detail_texture, + GL_extension_GL_SGIS_fog_function, + GL_extension_GL_SGIS_multisample, + GL_extension_GL_SGIS_pixel_texture, + GL_extension_GL_SGIS_point_parameters, + GL_extension_GL_SGIS_sharpen_texture, + GL_extension_GL_SGIS_texture4D, + GL_extension_GL_SGIS_texture_color_mask, + GL_extension_GL_SGIS_texture_filter4, + GL_extension_GL_SGIX_async, + GL_extension_GL_SGIX_flush_raster, + GL_extension_GL_SGIX_fragment_lighting, + GL_extension_GL_SGIX_framezoom, + GL_extension_GL_SGIX_igloo_interface, + GL_extension_GL_SGIX_instruments, + GL_extension_GL_SGIX_list_priority, + GL_extension_GL_SGIX_pixel_texture, + GL_extension_GL_SGIX_polynomial_ffd, + GL_extension_GL_SGIX_reference_plane, + GL_extension_GL_SGIX_sprite, + GL_extension_GL_SGIX_tag_sample_buffer, + GL_extension_GL_SGI_color_table, + GL_extension_GL_SUNX_constant_data, + GL_extension_GL_SUN_global_alpha, + GL_extension_GL_SUN_mesh_array, + GL_extension_GL_SUN_triangle_list, + GL_extension_GL_SUN_vertex, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + OpenGL_ES_3_0, + OpenGL_ES_3_1, + OpenGL_ES_3_2, + always_present, +} PACKED; + +static const char *enum_string = + "Desktop OpenGL 1.0\0" + "Desktop OpenGL 1.1\0" + "Desktop OpenGL 1.2\0" + "Desktop OpenGL 1.3\0" + "Desktop OpenGL 1.4\0" + "Desktop OpenGL 1.5\0" + "Desktop OpenGL 2.0\0" + "Desktop OpenGL 2.1\0" + "Desktop OpenGL 3.0\0" + "Desktop OpenGL 3.1\0" + "Desktop OpenGL 3.2\0" + "Desktop OpenGL 3.3\0" + "Desktop OpenGL 4.0\0" + "Desktop OpenGL 4.1\0" + "Desktop OpenGL 4.2\0" + "Desktop OpenGL 4.3\0" + "Desktop OpenGL 4.4\0" + "Desktop OpenGL 4.5\0" + "GL extension \"GL_3DFX_tbuffer\"\0" + "GL extension \"GL_AMD_debug_output\"\0" + "GL extension \"GL_AMD_draw_buffers_blend\"\0" + "GL extension \"GL_AMD_gpu_shader_int64\"\0" + "GL extension \"GL_AMD_interleaved_elements\"\0" + "GL extension \"GL_AMD_multi_draw_indirect\"\0" + "GL extension \"GL_AMD_name_gen_delete\"\0" + "GL extension \"GL_AMD_occlusion_query_event\"\0" + "GL extension \"GL_AMD_performance_monitor\"\0" + "GL extension \"GL_AMD_sample_positions\"\0" + "GL extension \"GL_AMD_sparse_texture\"\0" + "GL extension \"GL_AMD_stencil_operation_extended\"\0" + "GL extension \"GL_AMD_vertex_shader_tessellator\"\0" + "GL extension \"GL_ANGLE_framebuffer_blit\"\0" + "GL extension \"GL_ANGLE_framebuffer_multisample\"\0" + "GL extension \"GL_ANGLE_instanced_arrays\"\0" + "GL extension \"GL_ANGLE_translated_shader_source\"\0" + "GL extension \"GL_APPLE_copy_texture_levels\"\0" + "GL extension \"GL_APPLE_element_array\"\0" + "GL extension \"GL_APPLE_fence\"\0" + "GL extension \"GL_APPLE_flush_buffer_range\"\0" + "GL extension \"GL_APPLE_framebuffer_multisample\"\0" + "GL extension \"GL_APPLE_object_purgeable\"\0" + "GL extension \"GL_APPLE_sync\"\0" + "GL extension \"GL_APPLE_texture_range\"\0" + "GL extension \"GL_APPLE_vertex_array_object\"\0" + "GL extension \"GL_APPLE_vertex_array_range\"\0" + "GL extension \"GL_APPLE_vertex_program_evaluators\"\0" + "GL extension \"GL_ARB_ES2_compatibility\"\0" + "GL extension \"GL_ARB_ES3_1_compatibility\"\0" + "GL extension \"GL_ARB_ES3_2_compatibility\"\0" + "GL extension \"GL_ARB_base_instance\"\0" + "GL extension \"GL_ARB_bindless_texture\"\0" + "GL extension \"GL_ARB_blend_func_extended\"\0" + "GL extension \"GL_ARB_buffer_storage\"\0" + "GL extension \"GL_ARB_cl_event\"\0" + "GL extension \"GL_ARB_clear_buffer_object\"\0" + "GL extension \"GL_ARB_clear_texture\"\0" + "GL extension \"GL_ARB_clip_control\"\0" + "GL extension \"GL_ARB_color_buffer_float\"\0" + "GL extension \"GL_ARB_compute_shader\"\0" + "GL extension \"GL_ARB_compute_variable_group_size\"\0" + "GL extension \"GL_ARB_copy_buffer\"\0" + "GL extension \"GL_ARB_copy_image\"\0" + "GL extension \"GL_ARB_debug_output\"\0" + "GL extension \"GL_ARB_direct_state_access\"\0" + "GL extension \"GL_ARB_draw_buffers\"\0" + "GL extension \"GL_ARB_draw_buffers_blend\"\0" + "GL extension \"GL_ARB_draw_elements_base_vertex\"\0" + "GL extension \"GL_ARB_draw_indirect\"\0" + "GL extension \"GL_ARB_draw_instanced\"\0" + "GL extension \"GL_ARB_fragment_program\"\0" + "GL extension \"GL_ARB_framebuffer_no_attachments\"\0" + "GL extension \"GL_ARB_framebuffer_object\"\0" + "GL extension \"GL_ARB_geometry_shader4\"\0" + "GL extension \"GL_ARB_get_program_binary\"\0" + "GL extension \"GL_ARB_get_texture_sub_image\"\0" + "GL extension \"GL_ARB_gpu_shader_fp64\"\0" + "GL extension \"GL_ARB_gpu_shader_int64\"\0" + "GL extension \"GL_ARB_imaging\"\0" + "GL extension \"GL_ARB_indirect_parameters\"\0" + "GL extension \"GL_ARB_instanced_arrays\"\0" + "GL extension \"GL_ARB_internalformat_query2\"\0" + "GL extension \"GL_ARB_internalformat_query\"\0" + "GL extension \"GL_ARB_invalidate_subdata\"\0" + "GL extension \"GL_ARB_map_buffer_range\"\0" + "GL extension \"GL_ARB_matrix_palette\"\0" + "GL extension \"GL_ARB_multi_bind\"\0" + "GL extension \"GL_ARB_multi_draw_indirect\"\0" + "GL extension \"GL_ARB_multisample\"\0" + "GL extension \"GL_ARB_multitexture\"\0" + "GL extension \"GL_ARB_occlusion_query\"\0" + "GL extension \"GL_ARB_parallel_shader_compile\"\0" + "GL extension \"GL_ARB_point_parameters\"\0" + "GL extension \"GL_ARB_program_interface_query\"\0" + "GL extension \"GL_ARB_provoking_vertex\"\0" + "GL extension \"GL_ARB_robustness\"\0" + "GL extension \"GL_ARB_sample_locations\"\0" + "GL extension \"GL_ARB_sample_shading\"\0" + "GL extension \"GL_ARB_sampler_objects\"\0" + "GL extension \"GL_ARB_separate_shader_objects\"\0" + "GL extension \"GL_ARB_shader_atomic_counters\"\0" + "GL extension \"GL_ARB_shader_image_load_store\"\0" + "GL extension \"GL_ARB_shader_objects\"\0" + "GL extension \"GL_ARB_shader_storage_buffer_object\"\0" + "GL extension \"GL_ARB_shader_subroutine\"\0" + "GL extension \"GL_ARB_shading_language_include\"\0" + "GL extension \"GL_ARB_sparse_buffer\"\0" + "GL extension \"GL_ARB_sparse_texture\"\0" + "GL extension \"GL_ARB_sync\"\0" + "GL extension \"GL_ARB_tessellation_shader\"\0" + "GL extension \"GL_ARB_texture_barrier\"\0" + "GL extension \"GL_ARB_texture_buffer_object\"\0" + "GL extension \"GL_ARB_texture_buffer_range\"\0" + "GL extension \"GL_ARB_texture_compression\"\0" + "GL extension \"GL_ARB_texture_multisample\"\0" + "GL extension \"GL_ARB_texture_storage\"\0" + "GL extension \"GL_ARB_texture_storage_multisample\"\0" + "GL extension \"GL_ARB_texture_view\"\0" + "GL extension \"GL_ARB_timer_query\"\0" + "GL extension \"GL_ARB_transform_feedback2\"\0" + "GL extension \"GL_ARB_transform_feedback3\"\0" + "GL extension \"GL_ARB_transform_feedback_instanced\"\0" + "GL extension \"GL_ARB_transpose_matrix\"\0" + "GL extension \"GL_ARB_uniform_buffer_object\"\0" + "GL extension \"GL_ARB_vertex_array_object\"\0" + "GL extension \"GL_ARB_vertex_attrib_64bit\"\0" + "GL extension \"GL_ARB_vertex_attrib_binding\"\0" + "GL extension \"GL_ARB_vertex_blend\"\0" + "GL extension \"GL_ARB_vertex_buffer_object\"\0" + "GL extension \"GL_ARB_vertex_program\"\0" + "GL extension \"GL_ARB_vertex_shader\"\0" + "GL extension \"GL_ARB_vertex_type_2_10_10_10_rev\"\0" + "GL extension \"GL_ARB_viewport_array\"\0" + "GL extension \"GL_ARB_window_pos\"\0" + "GL extension \"GL_ATI_draw_buffers\"\0" + "GL extension \"GL_ATI_element_array\"\0" + "GL extension \"GL_ATI_envmap_bumpmap\"\0" + "GL extension \"GL_ATI_fragment_shader\"\0" + "GL extension \"GL_ATI_map_object_buffer\"\0" + "GL extension \"GL_ATI_pn_triangles\"\0" + "GL extension \"GL_ATI_separate_stencil\"\0" + "GL extension \"GL_ATI_vertex_array_object\"\0" + "GL extension \"GL_ATI_vertex_attrib_array_object\"\0" + "GL extension \"GL_ATI_vertex_streams\"\0" + "GL extension \"GL_EXT_base_instance\"\0" + "GL extension \"GL_EXT_bindable_uniform\"\0" + "GL extension \"GL_EXT_blend_color\"\0" + "GL extension \"GL_EXT_blend_equation_separate\"\0" + "GL extension \"GL_EXT_blend_func_extended\"\0" + "GL extension \"GL_EXT_blend_func_separate\"\0" + "GL extension \"GL_EXT_blend_minmax\"\0" + "GL extension \"GL_EXT_buffer_storage\"\0" + "GL extension \"GL_EXT_color_subtable\"\0" + "GL extension \"GL_EXT_compiled_vertex_array\"\0" + "GL extension \"GL_EXT_convolution\"\0" + "GL extension \"GL_EXT_coordinate_frame\"\0" + "GL extension \"GL_EXT_copy_image\"\0" + "GL extension \"GL_EXT_copy_texture\"\0" + "GL extension \"GL_EXT_cull_vertex\"\0" + "GL extension \"GL_EXT_debug_label\"\0" + "GL extension \"GL_EXT_debug_marker\"\0" + "GL extension \"GL_EXT_depth_bounds_test\"\0" + "GL extension \"GL_EXT_direct_state_access\"\0" + "GL extension \"GL_EXT_discard_framebuffer\"\0" + "GL extension \"GL_EXT_disjoint_timer_query\"\0" + "GL extension \"GL_EXT_draw_buffers2\"\0" + "GL extension \"GL_EXT_draw_buffers\"\0" + "GL extension \"GL_EXT_draw_buffers_indexed\"\0" + "GL extension \"GL_EXT_draw_elements_base_vertex\"\0" + "GL extension \"GL_EXT_draw_instanced\"\0" + "GL extension \"GL_EXT_draw_range_elements\"\0" + "GL extension \"GL_EXT_fog_coord\"\0" + "GL extension \"GL_EXT_framebuffer_blit\"\0" + "GL extension \"GL_EXT_framebuffer_multisample\"\0" + "GL extension \"GL_EXT_framebuffer_object\"\0" + "GL extension \"GL_EXT_geometry_shader4\"\0" + "GL extension \"GL_EXT_geometry_shader\"\0" + "GL extension \"GL_EXT_gpu_program_parameters\"\0" + "GL extension \"GL_EXT_gpu_shader4\"\0" + "GL extension \"GL_EXT_histogram\"\0" + "GL extension \"GL_EXT_index_func\"\0" + "GL extension \"GL_EXT_index_material\"\0" + "GL extension \"GL_EXT_instanced_arrays\"\0" + "GL extension \"GL_EXT_light_texture\"\0" + "GL extension \"GL_EXT_map_buffer_range\"\0" + "GL extension \"GL_EXT_multi_draw_arrays\"\0" + "GL extension \"GL_EXT_multi_draw_indirect\"\0" + "GL extension \"GL_EXT_multisample\"\0" + "GL extension \"GL_EXT_multisampled_render_to_texture\"\0" + "GL extension \"GL_EXT_multiview_draw_buffers\"\0" + "GL extension \"GL_EXT_occlusion_query_boolean\"\0" + "GL extension \"GL_EXT_paletted_texture\"\0" + "GL extension \"GL_EXT_pixel_transform\"\0" + "GL extension \"GL_EXT_point_parameters\"\0" + "GL extension \"GL_EXT_polygon_offset\"\0" + "GL extension \"GL_EXT_polygon_offset_clamp\"\0" + "GL extension \"GL_EXT_primitive_bounding_box\"\0" + "GL extension \"GL_EXT_provoking_vertex\"\0" + "GL extension \"GL_EXT_raster_multisample\"\0" + "GL extension \"GL_EXT_robustness\"\0" + "GL extension \"GL_EXT_secondary_color\"\0" + "GL extension \"GL_EXT_separate_shader_objects\"\0" + "GL extension \"GL_EXT_shader_image_load_store\"\0" + "GL extension \"GL_EXT_sparse_texture\"\0" + "GL extension \"GL_EXT_stencil_clear_tag\"\0" + "GL extension \"GL_EXT_stencil_two_side\"\0" + "GL extension \"GL_EXT_subtexture\"\0" + "GL extension \"GL_EXT_tessellation_shader\"\0" + "GL extension \"GL_EXT_texture3D\"\0" + "GL extension \"GL_EXT_texture_array\"\0" + "GL extension \"GL_EXT_texture_border_clamp\"\0" + "GL extension \"GL_EXT_texture_buffer\"\0" + "GL extension \"GL_EXT_texture_buffer_object\"\0" + "GL extension \"GL_EXT_texture_filter_minmax\"\0" + "GL extension \"GL_EXT_texture_integer\"\0" + "GL extension \"GL_EXT_texture_object\"\0" + "GL extension \"GL_EXT_texture_perturb_normal\"\0" + "GL extension \"GL_EXT_texture_storage\"\0" + "GL extension \"GL_EXT_texture_view\"\0" + "GL extension \"GL_EXT_timer_query\"\0" + "GL extension \"GL_EXT_transform_feedback\"\0" + "GL extension \"GL_EXT_vertex_array\"\0" + "GL extension \"GL_EXT_vertex_attrib_64bit\"\0" + "GL extension \"GL_EXT_vertex_shader\"\0" + "GL extension \"GL_EXT_vertex_weighting\"\0" + "GL extension \"GL_EXT_x11_sync_object\"\0" + "GL extension \"GL_GREMEDY_frame_terminator\"\0" + "GL extension \"GL_GREMEDY_string_marker\"\0" + "GL extension \"GL_HP_image_transform\"\0" + "GL extension \"GL_IBM_multimode_draw_arrays\"\0" + "GL extension \"GL_IBM_static_data\"\0" + "GL extension \"GL_IBM_vertex_array_lists\"\0" + "GL extension \"GL_IMG_multisampled_render_to_texture\"\0" + "GL extension \"GL_IMG_user_clip_plane\"\0" + "GL extension \"GL_INGR_blend_func_separate\"\0" + "GL extension \"GL_INTEL_framebuffer_CMAA\"\0" + "GL extension \"GL_INTEL_map_texture\"\0" + "GL extension \"GL_INTEL_parallel_arrays\"\0" + "GL extension \"GL_INTEL_performance_query\"\0" + "GL extension \"GL_KHR_blend_equation_advanced\"\0" + "GL extension \"GL_KHR_debug\"\0" + "GL extension \"GL_KHR_robustness\"\0" + "GL extension \"GL_MESA_resize_buffers\"\0" + "GL extension \"GL_MESA_window_pos\"\0" + "GL extension \"GL_NVX_conditional_render\"\0" + "GL extension \"GL_NV_bindless_multi_draw_indirect\"\0" + "GL extension \"GL_NV_bindless_multi_draw_indirect_count\"\0" + "GL extension \"GL_NV_bindless_texture\"\0" + "GL extension \"GL_NV_blend_equation_advanced\"\0" + "GL extension \"GL_NV_command_list\"\0" + "GL extension \"GL_NV_conditional_render\"\0" + "GL extension \"GL_NV_conservative_raster\"\0" + "GL extension \"GL_NV_conservative_raster_dilate\"\0" + "GL extension \"GL_NV_copy_buffer\"\0" + "GL extension \"GL_NV_copy_image\"\0" + "GL extension \"GL_NV_coverage_sample\"\0" + "GL extension \"GL_NV_depth_buffer_float\"\0" + "GL extension \"GL_NV_draw_buffers\"\0" + "GL extension \"GL_NV_draw_instanced\"\0" + "GL extension \"GL_NV_draw_texture\"\0" + "GL extension \"GL_NV_evaluators\"\0" + "GL extension \"GL_NV_explicit_multisample\"\0" + "GL extension \"GL_NV_fence\"\0" + "GL extension \"GL_NV_fragment_coverage_to_color\"\0" + "GL extension \"GL_NV_fragment_program\"\0" + "GL extension \"GL_NV_framebuffer_blit\"\0" + "GL extension \"GL_NV_framebuffer_mixed_samples\"\0" + "GL extension \"GL_NV_framebuffer_multisample\"\0" + "GL extension \"GL_NV_framebuffer_multisample_coverage\"\0" + "GL extension \"GL_NV_geometry_program4\"\0" + "GL extension \"GL_NV_gpu_program4\"\0" + "GL extension \"GL_NV_gpu_program5\"\0" + "GL extension \"GL_NV_gpu_shader5\"\0" + "GL extension \"GL_NV_half_float\"\0" + "GL extension \"GL_NV_instanced_arrays\"\0" + "GL extension \"GL_NV_internalformat_sample_query\"\0" + "GL extension \"GL_NV_non_square_matrices\"\0" + "GL extension \"GL_NV_occlusion_query\"\0" + "GL extension \"GL_NV_parameter_buffer_object\"\0" + "GL extension \"GL_NV_path_rendering\"\0" + "GL extension \"GL_NV_pixel_data_range\"\0" + "GL extension \"GL_NV_point_sprite\"\0" + "GL extension \"GL_NV_polygon_mode\"\0" + "GL extension \"GL_NV_present_video\"\0" + "GL extension \"GL_NV_primitive_restart\"\0" + "GL extension \"GL_NV_read_buffer\"\0" + "GL extension \"GL_NV_register_combiners2\"\0" + "GL extension \"GL_NV_register_combiners\"\0" + "GL extension \"GL_NV_sample_locations\"\0" + "GL extension \"GL_NV_shader_buffer_load\"\0" + "GL extension \"GL_NV_texture_barrier\"\0" + "GL extension \"GL_NV_texture_multisample\"\0" + "GL extension \"GL_NV_transform_feedback2\"\0" + "GL extension \"GL_NV_transform_feedback\"\0" + "GL extension \"GL_NV_vdpau_interop\"\0" + "GL extension \"GL_NV_vertex_array_range\"\0" + "GL extension \"GL_NV_vertex_attrib_integer_64bit\"\0" + "GL extension \"GL_NV_vertex_buffer_unified_memory\"\0" + "GL extension \"GL_NV_vertex_program4\"\0" + "GL extension \"GL_NV_vertex_program\"\0" + "GL extension \"GL_NV_video_capture\"\0" + "GL extension \"GL_NV_viewport_array\"\0" + "GL extension \"GL_OES_EGL_image\"\0" + "GL extension \"GL_OES_blend_equation_separate\"\0" + "GL extension \"GL_OES_blend_func_separate\"\0" + "GL extension \"GL_OES_blend_subtract\"\0" + "GL extension \"GL_OES_byte_coordinates\"\0" + "GL extension \"GL_OES_copy_image\"\0" + "GL extension \"GL_OES_draw_buffers_indexed\"\0" + "GL extension \"GL_OES_draw_elements_base_vertex\"\0" + "GL extension \"GL_OES_draw_texture\"\0" + "GL extension \"GL_OES_fixed_point\"\0" + "GL extension \"GL_OES_framebuffer_object\"\0" + "GL extension \"GL_OES_geometry_shader\"\0" + "GL extension \"GL_OES_get_program_binary\"\0" + "GL extension \"GL_OES_mapbuffer\"\0" + "GL extension \"GL_OES_matrix_palette\"\0" + "GL extension \"GL_OES_point_size_array\"\0" + "GL extension \"GL_OES_primitive_bounding_box\"\0" + "GL extension \"GL_OES_query_matrix\"\0" + "GL extension \"GL_OES_sample_shading\"\0" + "GL extension \"GL_OES_single_precision\"\0" + "GL extension \"GL_OES_tessellation_shader\"\0" + "GL extension \"GL_OES_texture_3D\"\0" + "GL extension \"GL_OES_texture_border_clamp\"\0" + "GL extension \"GL_OES_texture_buffer\"\0" + "GL extension \"GL_OES_texture_cube_map\"\0" + "GL extension \"GL_OES_texture_storage_multisample_2d_array\"\0" + "GL extension \"GL_OES_texture_view\"\0" + "GL extension \"GL_OES_vertex_array_object\"\0" + "GL extension \"GL_OVR_multiview\"\0" + "GL extension \"GL_PGI_misc_hints\"\0" + "GL extension \"GL_QCOM_alpha_test\"\0" + "GL extension \"GL_QCOM_driver_control\"\0" + "GL extension \"GL_QCOM_extended_get2\"\0" + "GL extension \"GL_QCOM_extended_get\"\0" + "GL extension \"GL_QCOM_tiled_rendering\"\0" + "GL extension \"GL_SGIS_detail_texture\"\0" + "GL extension \"GL_SGIS_fog_function\"\0" + "GL extension \"GL_SGIS_multisample\"\0" + "GL extension \"GL_SGIS_pixel_texture\"\0" + "GL extension \"GL_SGIS_point_parameters\"\0" + "GL extension \"GL_SGIS_sharpen_texture\"\0" + "GL extension \"GL_SGIS_texture4D\"\0" + "GL extension \"GL_SGIS_texture_color_mask\"\0" + "GL extension \"GL_SGIS_texture_filter4\"\0" + "GL extension \"GL_SGIX_async\"\0" + "GL extension \"GL_SGIX_flush_raster\"\0" + "GL extension \"GL_SGIX_fragment_lighting\"\0" + "GL extension \"GL_SGIX_framezoom\"\0" + "GL extension \"GL_SGIX_igloo_interface\"\0" + "GL extension \"GL_SGIX_instruments\"\0" + "GL extension \"GL_SGIX_list_priority\"\0" + "GL extension \"GL_SGIX_pixel_texture\"\0" + "GL extension \"GL_SGIX_polynomial_ffd\"\0" + "GL extension \"GL_SGIX_reference_plane\"\0" + "GL extension \"GL_SGIX_sprite\"\0" + "GL extension \"GL_SGIX_tag_sample_buffer\"\0" + "GL extension \"GL_SGI_color_table\"\0" + "GL extension \"GL_SUNX_constant_data\"\0" + "GL extension \"GL_SUN_global_alpha\"\0" + "GL extension \"GL_SUN_mesh_array\"\0" + "GL extension \"GL_SUN_triangle_list\"\0" + "GL extension \"GL_SUN_vertex\"\0" + "OpenGL ES 1.0\0" + "OpenGL ES 2.0\0" + "OpenGL ES 3.0\0" + "OpenGL ES 3.1\0" + "OpenGL ES 3.2\0" + "always present\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* gl_provider_terminator, unused */ + 0, /* Desktop_OpenGL_1_0 */ + 19, /* Desktop_OpenGL_1_1 */ + 38, /* Desktop_OpenGL_1_2 */ + 57, /* Desktop_OpenGL_1_3 */ + 76, /* Desktop_OpenGL_1_4 */ + 95, /* Desktop_OpenGL_1_5 */ + 114, /* Desktop_OpenGL_2_0 */ + 133, /* Desktop_OpenGL_2_1 */ + 152, /* Desktop_OpenGL_3_0 */ + 171, /* Desktop_OpenGL_3_1 */ + 190, /* Desktop_OpenGL_3_2 */ + 209, /* Desktop_OpenGL_3_3 */ + 228, /* Desktop_OpenGL_4_0 */ + 247, /* Desktop_OpenGL_4_1 */ + 266, /* Desktop_OpenGL_4_2 */ + 285, /* Desktop_OpenGL_4_3 */ + 304, /* Desktop_OpenGL_4_4 */ + 323, /* Desktop_OpenGL_4_5 */ + 342, /* GL_extension_GL_3DFX_tbuffer */ + 373, /* GL_extension_GL_AMD_debug_output */ + 408, /* GL_extension_GL_AMD_draw_buffers_blend */ + 449, /* GL_extension_GL_AMD_gpu_shader_int64 */ + 488, /* GL_extension_GL_AMD_interleaved_elements */ + 531, /* GL_extension_GL_AMD_multi_draw_indirect */ + 573, /* GL_extension_GL_AMD_name_gen_delete */ + 611, /* GL_extension_GL_AMD_occlusion_query_event */ + 655, /* GL_extension_GL_AMD_performance_monitor */ + 697, /* GL_extension_GL_AMD_sample_positions */ + 736, /* GL_extension_GL_AMD_sparse_texture */ + 773, /* GL_extension_GL_AMD_stencil_operation_extended */ + 822, /* GL_extension_GL_AMD_vertex_shader_tessellator */ + 870, /* GL_extension_GL_ANGLE_framebuffer_blit */ + 911, /* GL_extension_GL_ANGLE_framebuffer_multisample */ + 959, /* GL_extension_GL_ANGLE_instanced_arrays */ + 1000, /* GL_extension_GL_ANGLE_translated_shader_source */ + 1049, /* GL_extension_GL_APPLE_copy_texture_levels */ + 1093, /* GL_extension_GL_APPLE_element_array */ + 1131, /* GL_extension_GL_APPLE_fence */ + 1161, /* GL_extension_GL_APPLE_flush_buffer_range */ + 1204, /* GL_extension_GL_APPLE_framebuffer_multisample */ + 1252, /* GL_extension_GL_APPLE_object_purgeable */ + 1293, /* GL_extension_GL_APPLE_sync */ + 1322, /* GL_extension_GL_APPLE_texture_range */ + 1360, /* GL_extension_GL_APPLE_vertex_array_object */ + 1404, /* GL_extension_GL_APPLE_vertex_array_range */ + 1447, /* GL_extension_GL_APPLE_vertex_program_evaluators */ + 1497, /* GL_extension_GL_ARB_ES2_compatibility */ + 1537, /* GL_extension_GL_ARB_ES3_1_compatibility */ + 1579, /* GL_extension_GL_ARB_ES3_2_compatibility */ + 1621, /* GL_extension_GL_ARB_base_instance */ + 1657, /* GL_extension_GL_ARB_bindless_texture */ + 1696, /* GL_extension_GL_ARB_blend_func_extended */ + 1738, /* GL_extension_GL_ARB_buffer_storage */ + 1775, /* GL_extension_GL_ARB_cl_event */ + 1806, /* GL_extension_GL_ARB_clear_buffer_object */ + 1848, /* GL_extension_GL_ARB_clear_texture */ + 1884, /* GL_extension_GL_ARB_clip_control */ + 1919, /* GL_extension_GL_ARB_color_buffer_float */ + 1960, /* GL_extension_GL_ARB_compute_shader */ + 1997, /* GL_extension_GL_ARB_compute_variable_group_size */ + 2047, /* GL_extension_GL_ARB_copy_buffer */ + 2081, /* GL_extension_GL_ARB_copy_image */ + 2114, /* GL_extension_GL_ARB_debug_output */ + 2149, /* GL_extension_GL_ARB_direct_state_access */ + 2191, /* GL_extension_GL_ARB_draw_buffers */ + 2226, /* GL_extension_GL_ARB_draw_buffers_blend */ + 2267, /* GL_extension_GL_ARB_draw_elements_base_vertex */ + 2315, /* GL_extension_GL_ARB_draw_indirect */ + 2351, /* GL_extension_GL_ARB_draw_instanced */ + 2388, /* GL_extension_GL_ARB_fragment_program */ + 2427, /* GL_extension_GL_ARB_framebuffer_no_attachments */ + 2476, /* GL_extension_GL_ARB_framebuffer_object */ + 2517, /* GL_extension_GL_ARB_geometry_shader4 */ + 2556, /* GL_extension_GL_ARB_get_program_binary */ + 2597, /* GL_extension_GL_ARB_get_texture_sub_image */ + 2641, /* GL_extension_GL_ARB_gpu_shader_fp64 */ + 2679, /* GL_extension_GL_ARB_gpu_shader_int64 */ + 2718, /* GL_extension_GL_ARB_imaging */ + 2748, /* GL_extension_GL_ARB_indirect_parameters */ + 2790, /* GL_extension_GL_ARB_instanced_arrays */ + 2829, /* GL_extension_GL_ARB_internalformat_query2 */ + 2873, /* GL_extension_GL_ARB_internalformat_query */ + 2916, /* GL_extension_GL_ARB_invalidate_subdata */ + 2957, /* GL_extension_GL_ARB_map_buffer_range */ + 2996, /* GL_extension_GL_ARB_matrix_palette */ + 3033, /* GL_extension_GL_ARB_multi_bind */ + 3066, /* GL_extension_GL_ARB_multi_draw_indirect */ + 3108, /* GL_extension_GL_ARB_multisample */ + 3142, /* GL_extension_GL_ARB_multitexture */ + 3177, /* GL_extension_GL_ARB_occlusion_query */ + 3215, /* GL_extension_GL_ARB_parallel_shader_compile */ + 3261, /* GL_extension_GL_ARB_point_parameters */ + 3300, /* GL_extension_GL_ARB_program_interface_query */ + 3346, /* GL_extension_GL_ARB_provoking_vertex */ + 3385, /* GL_extension_GL_ARB_robustness */ + 3418, /* GL_extension_GL_ARB_sample_locations */ + 3457, /* GL_extension_GL_ARB_sample_shading */ + 3494, /* GL_extension_GL_ARB_sampler_objects */ + 3532, /* GL_extension_GL_ARB_separate_shader_objects */ + 3578, /* GL_extension_GL_ARB_shader_atomic_counters */ + 3623, /* GL_extension_GL_ARB_shader_image_load_store */ + 3669, /* GL_extension_GL_ARB_shader_objects */ + 3706, /* GL_extension_GL_ARB_shader_storage_buffer_object */ + 3757, /* GL_extension_GL_ARB_shader_subroutine */ + 3797, /* GL_extension_GL_ARB_shading_language_include */ + 3844, /* GL_extension_GL_ARB_sparse_buffer */ + 3880, /* GL_extension_GL_ARB_sparse_texture */ + 3917, /* GL_extension_GL_ARB_sync */ + 3944, /* GL_extension_GL_ARB_tessellation_shader */ + 3986, /* GL_extension_GL_ARB_texture_barrier */ + 4024, /* GL_extension_GL_ARB_texture_buffer_object */ + 4068, /* GL_extension_GL_ARB_texture_buffer_range */ + 4111, /* GL_extension_GL_ARB_texture_compression */ + 4153, /* GL_extension_GL_ARB_texture_multisample */ + 4195, /* GL_extension_GL_ARB_texture_storage */ + 4233, /* GL_extension_GL_ARB_texture_storage_multisample */ + 4283, /* GL_extension_GL_ARB_texture_view */ + 4318, /* GL_extension_GL_ARB_timer_query */ + 4352, /* GL_extension_GL_ARB_transform_feedback2 */ + 4394, /* GL_extension_GL_ARB_transform_feedback3 */ + 4436, /* GL_extension_GL_ARB_transform_feedback_instanced */ + 4487, /* GL_extension_GL_ARB_transpose_matrix */ + 4526, /* GL_extension_GL_ARB_uniform_buffer_object */ + 4570, /* GL_extension_GL_ARB_vertex_array_object */ + 4612, /* GL_extension_GL_ARB_vertex_attrib_64bit */ + 4654, /* GL_extension_GL_ARB_vertex_attrib_binding */ + 4698, /* GL_extension_GL_ARB_vertex_blend */ + 4733, /* GL_extension_GL_ARB_vertex_buffer_object */ + 4776, /* GL_extension_GL_ARB_vertex_program */ + 4813, /* GL_extension_GL_ARB_vertex_shader */ + 4849, /* GL_extension_GL_ARB_vertex_type_2_10_10_10_rev */ + 4898, /* GL_extension_GL_ARB_viewport_array */ + 4935, /* GL_extension_GL_ARB_window_pos */ + 4968, /* GL_extension_GL_ATI_draw_buffers */ + 5003, /* GL_extension_GL_ATI_element_array */ + 5039, /* GL_extension_GL_ATI_envmap_bumpmap */ + 5076, /* GL_extension_GL_ATI_fragment_shader */ + 5114, /* GL_extension_GL_ATI_map_object_buffer */ + 5154, /* GL_extension_GL_ATI_pn_triangles */ + 5189, /* GL_extension_GL_ATI_separate_stencil */ + 5228, /* GL_extension_GL_ATI_vertex_array_object */ + 5270, /* GL_extension_GL_ATI_vertex_attrib_array_object */ + 5319, /* GL_extension_GL_ATI_vertex_streams */ + 5356, /* GL_extension_GL_EXT_base_instance */ + 5392, /* GL_extension_GL_EXT_bindable_uniform */ + 5431, /* GL_extension_GL_EXT_blend_color */ + 5465, /* GL_extension_GL_EXT_blend_equation_separate */ + 5511, /* GL_extension_GL_EXT_blend_func_extended */ + 5553, /* GL_extension_GL_EXT_blend_func_separate */ + 5595, /* GL_extension_GL_EXT_blend_minmax */ + 5630, /* GL_extension_GL_EXT_buffer_storage */ + 5667, /* GL_extension_GL_EXT_color_subtable */ + 5704, /* GL_extension_GL_EXT_compiled_vertex_array */ + 5748, /* GL_extension_GL_EXT_convolution */ + 5782, /* GL_extension_GL_EXT_coordinate_frame */ + 5821, /* GL_extension_GL_EXT_copy_image */ + 5854, /* GL_extension_GL_EXT_copy_texture */ + 5889, /* GL_extension_GL_EXT_cull_vertex */ + 5923, /* GL_extension_GL_EXT_debug_label */ + 5957, /* GL_extension_GL_EXT_debug_marker */ + 5992, /* GL_extension_GL_EXT_depth_bounds_test */ + 6032, /* GL_extension_GL_EXT_direct_state_access */ + 6074, /* GL_extension_GL_EXT_discard_framebuffer */ + 6116, /* GL_extension_GL_EXT_disjoint_timer_query */ + 6159, /* GL_extension_GL_EXT_draw_buffers2 */ + 6195, /* GL_extension_GL_EXT_draw_buffers */ + 6230, /* GL_extension_GL_EXT_draw_buffers_indexed */ + 6273, /* GL_extension_GL_EXT_draw_elements_base_vertex */ + 6321, /* GL_extension_GL_EXT_draw_instanced */ + 6358, /* GL_extension_GL_EXT_draw_range_elements */ + 6400, /* GL_extension_GL_EXT_fog_coord */ + 6432, /* GL_extension_GL_EXT_framebuffer_blit */ + 6471, /* GL_extension_GL_EXT_framebuffer_multisample */ + 6517, /* GL_extension_GL_EXT_framebuffer_object */ + 6558, /* GL_extension_GL_EXT_geometry_shader4 */ + 6597, /* GL_extension_GL_EXT_geometry_shader */ + 6635, /* GL_extension_GL_EXT_gpu_program_parameters */ + 6680, /* GL_extension_GL_EXT_gpu_shader4 */ + 6714, /* GL_extension_GL_EXT_histogram */ + 6746, /* GL_extension_GL_EXT_index_func */ + 6779, /* GL_extension_GL_EXT_index_material */ + 6816, /* GL_extension_GL_EXT_instanced_arrays */ + 6855, /* GL_extension_GL_EXT_light_texture */ + 6891, /* GL_extension_GL_EXT_map_buffer_range */ + 6930, /* GL_extension_GL_EXT_multi_draw_arrays */ + 6970, /* GL_extension_GL_EXT_multi_draw_indirect */ + 7012, /* GL_extension_GL_EXT_multisample */ + 7046, /* GL_extension_GL_EXT_multisampled_render_to_texture */ + 7099, /* GL_extension_GL_EXT_multiview_draw_buffers */ + 7144, /* GL_extension_GL_EXT_occlusion_query_boolean */ + 7190, /* GL_extension_GL_EXT_paletted_texture */ + 7229, /* GL_extension_GL_EXT_pixel_transform */ + 7267, /* GL_extension_GL_EXT_point_parameters */ + 7306, /* GL_extension_GL_EXT_polygon_offset */ + 7343, /* GL_extension_GL_EXT_polygon_offset_clamp */ + 7386, /* GL_extension_GL_EXT_primitive_bounding_box */ + 7431, /* GL_extension_GL_EXT_provoking_vertex */ + 7470, /* GL_extension_GL_EXT_raster_multisample */ + 7511, /* GL_extension_GL_EXT_robustness */ + 7544, /* GL_extension_GL_EXT_secondary_color */ + 7582, /* GL_extension_GL_EXT_separate_shader_objects */ + 7628, /* GL_extension_GL_EXT_shader_image_load_store */ + 7674, /* GL_extension_GL_EXT_sparse_texture */ + 7711, /* GL_extension_GL_EXT_stencil_clear_tag */ + 7751, /* GL_extension_GL_EXT_stencil_two_side */ + 7790, /* GL_extension_GL_EXT_subtexture */ + 7823, /* GL_extension_GL_EXT_tessellation_shader */ + 7865, /* GL_extension_GL_EXT_texture3D */ + 7897, /* GL_extension_GL_EXT_texture_array */ + 7933, /* GL_extension_GL_EXT_texture_border_clamp */ + 7976, /* GL_extension_GL_EXT_texture_buffer */ + 8013, /* GL_extension_GL_EXT_texture_buffer_object */ + 8057, /* GL_extension_GL_EXT_texture_filter_minmax */ + 8101, /* GL_extension_GL_EXT_texture_integer */ + 8139, /* GL_extension_GL_EXT_texture_object */ + 8176, /* GL_extension_GL_EXT_texture_perturb_normal */ + 8221, /* GL_extension_GL_EXT_texture_storage */ + 8259, /* GL_extension_GL_EXT_texture_view */ + 8294, /* GL_extension_GL_EXT_timer_query */ + 8328, /* GL_extension_GL_EXT_transform_feedback */ + 8369, /* GL_extension_GL_EXT_vertex_array */ + 8404, /* GL_extension_GL_EXT_vertex_attrib_64bit */ + 8446, /* GL_extension_GL_EXT_vertex_shader */ + 8482, /* GL_extension_GL_EXT_vertex_weighting */ + 8521, /* GL_extension_GL_EXT_x11_sync_object */ + 8559, /* GL_extension_GL_GREMEDY_frame_terminator */ + 8602, /* GL_extension_GL_GREMEDY_string_marker */ + 8642, /* GL_extension_GL_HP_image_transform */ + 8679, /* GL_extension_GL_IBM_multimode_draw_arrays */ + 8723, /* GL_extension_GL_IBM_static_data */ + 8757, /* GL_extension_GL_IBM_vertex_array_lists */ + 8798, /* GL_extension_GL_IMG_multisampled_render_to_texture */ + 8851, /* GL_extension_GL_IMG_user_clip_plane */ + 8889, /* GL_extension_GL_INGR_blend_func_separate */ + 8932, /* GL_extension_GL_INTEL_framebuffer_CMAA */ + 8973, /* GL_extension_GL_INTEL_map_texture */ + 9009, /* GL_extension_GL_INTEL_parallel_arrays */ + 9049, /* GL_extension_GL_INTEL_performance_query */ + 9091, /* GL_extension_GL_KHR_blend_equation_advanced */ + 9137, /* GL_extension_GL_KHR_debug */ + 9165, /* GL_extension_GL_KHR_robustness */ + 9198, /* GL_extension_GL_MESA_resize_buffers */ + 9236, /* GL_extension_GL_MESA_window_pos */ + 9270, /* GL_extension_GL_NVX_conditional_render */ + 9311, /* GL_extension_GL_NV_bindless_multi_draw_indirect */ + 9361, /* GL_extension_GL_NV_bindless_multi_draw_indirect_count */ + 9417, /* GL_extension_GL_NV_bindless_texture */ + 9455, /* GL_extension_GL_NV_blend_equation_advanced */ + 9500, /* GL_extension_GL_NV_command_list */ + 9534, /* GL_extension_GL_NV_conditional_render */ + 9574, /* GL_extension_GL_NV_conservative_raster */ + 9615, /* GL_extension_GL_NV_conservative_raster_dilate */ + 9663, /* GL_extension_GL_NV_copy_buffer */ + 9696, /* GL_extension_GL_NV_copy_image */ + 9728, /* GL_extension_GL_NV_coverage_sample */ + 9765, /* GL_extension_GL_NV_depth_buffer_float */ + 9805, /* GL_extension_GL_NV_draw_buffers */ + 9839, /* GL_extension_GL_NV_draw_instanced */ + 9875, /* GL_extension_GL_NV_draw_texture */ + 9909, /* GL_extension_GL_NV_evaluators */ + 9941, /* GL_extension_GL_NV_explicit_multisample */ + 9983, /* GL_extension_GL_NV_fence */ + 10010, /* GL_extension_GL_NV_fragment_coverage_to_color */ + 10058, /* GL_extension_GL_NV_fragment_program */ + 10096, /* GL_extension_GL_NV_framebuffer_blit */ + 10134, /* GL_extension_GL_NV_framebuffer_mixed_samples */ + 10181, /* GL_extension_GL_NV_framebuffer_multisample */ + 10226, /* GL_extension_GL_NV_framebuffer_multisample_coverage */ + 10280, /* GL_extension_GL_NV_geometry_program4 */ + 10319, /* GL_extension_GL_NV_gpu_program4 */ + 10353, /* GL_extension_GL_NV_gpu_program5 */ + 10387, /* GL_extension_GL_NV_gpu_shader5 */ + 10420, /* GL_extension_GL_NV_half_float */ + 10452, /* GL_extension_GL_NV_instanced_arrays */ + 10490, /* GL_extension_GL_NV_internalformat_sample_query */ + 10539, /* GL_extension_GL_NV_non_square_matrices */ + 10580, /* GL_extension_GL_NV_occlusion_query */ + 10617, /* GL_extension_GL_NV_parameter_buffer_object */ + 10662, /* GL_extension_GL_NV_path_rendering */ + 10698, /* GL_extension_GL_NV_pixel_data_range */ + 10736, /* GL_extension_GL_NV_point_sprite */ + 10770, /* GL_extension_GL_NV_polygon_mode */ + 10804, /* GL_extension_GL_NV_present_video */ + 10839, /* GL_extension_GL_NV_primitive_restart */ + 10878, /* GL_extension_GL_NV_read_buffer */ + 10911, /* GL_extension_GL_NV_register_combiners2 */ + 10952, /* GL_extension_GL_NV_register_combiners */ + 10992, /* GL_extension_GL_NV_sample_locations */ + 11030, /* GL_extension_GL_NV_shader_buffer_load */ + 11070, /* GL_extension_GL_NV_texture_barrier */ + 11107, /* GL_extension_GL_NV_texture_multisample */ + 11148, /* GL_extension_GL_NV_transform_feedback2 */ + 11189, /* GL_extension_GL_NV_transform_feedback */ + 11229, /* GL_extension_GL_NV_vdpau_interop */ + 11264, /* GL_extension_GL_NV_vertex_array_range */ + 11304, /* GL_extension_GL_NV_vertex_attrib_integer_64bit */ + 11353, /* GL_extension_GL_NV_vertex_buffer_unified_memory */ + 11403, /* GL_extension_GL_NV_vertex_program4 */ + 11440, /* GL_extension_GL_NV_vertex_program */ + 11476, /* GL_extension_GL_NV_video_capture */ + 11511, /* GL_extension_GL_NV_viewport_array */ + 11547, /* GL_extension_GL_OES_EGL_image */ + 11579, /* GL_extension_GL_OES_blend_equation_separate */ + 11625, /* GL_extension_GL_OES_blend_func_separate */ + 11667, /* GL_extension_GL_OES_blend_subtract */ + 11704, /* GL_extension_GL_OES_byte_coordinates */ + 11743, /* GL_extension_GL_OES_copy_image */ + 11776, /* GL_extension_GL_OES_draw_buffers_indexed */ + 11819, /* GL_extension_GL_OES_draw_elements_base_vertex */ + 11867, /* GL_extension_GL_OES_draw_texture */ + 11902, /* GL_extension_GL_OES_fixed_point */ + 11936, /* GL_extension_GL_OES_framebuffer_object */ + 11977, /* GL_extension_GL_OES_geometry_shader */ + 12015, /* GL_extension_GL_OES_get_program_binary */ + 12056, /* GL_extension_GL_OES_mapbuffer */ + 12088, /* GL_extension_GL_OES_matrix_palette */ + 12125, /* GL_extension_GL_OES_point_size_array */ + 12164, /* GL_extension_GL_OES_primitive_bounding_box */ + 12209, /* GL_extension_GL_OES_query_matrix */ + 12244, /* GL_extension_GL_OES_sample_shading */ + 12281, /* GL_extension_GL_OES_single_precision */ + 12320, /* GL_extension_GL_OES_tessellation_shader */ + 12362, /* GL_extension_GL_OES_texture_3D */ + 12395, /* GL_extension_GL_OES_texture_border_clamp */ + 12438, /* GL_extension_GL_OES_texture_buffer */ + 12475, /* GL_extension_GL_OES_texture_cube_map */ + 12514, /* GL_extension_GL_OES_texture_storage_multisample_2d_array */ + 12573, /* GL_extension_GL_OES_texture_view */ + 12608, /* GL_extension_GL_OES_vertex_array_object */ + 12650, /* GL_extension_GL_OVR_multiview */ + 12682, /* GL_extension_GL_PGI_misc_hints */ + 12715, /* GL_extension_GL_QCOM_alpha_test */ + 12749, /* GL_extension_GL_QCOM_driver_control */ + 12787, /* GL_extension_GL_QCOM_extended_get2 */ + 12824, /* GL_extension_GL_QCOM_extended_get */ + 12860, /* GL_extension_GL_QCOM_tiled_rendering */ + 12899, /* GL_extension_GL_SGIS_detail_texture */ + 12937, /* GL_extension_GL_SGIS_fog_function */ + 12973, /* GL_extension_GL_SGIS_multisample */ + 13008, /* GL_extension_GL_SGIS_pixel_texture */ + 13045, /* GL_extension_GL_SGIS_point_parameters */ + 13085, /* GL_extension_GL_SGIS_sharpen_texture */ + 13124, /* GL_extension_GL_SGIS_texture4D */ + 13157, /* GL_extension_GL_SGIS_texture_color_mask */ + 13199, /* GL_extension_GL_SGIS_texture_filter4 */ + 13238, /* GL_extension_GL_SGIX_async */ + 13267, /* GL_extension_GL_SGIX_flush_raster */ + 13303, /* GL_extension_GL_SGIX_fragment_lighting */ + 13344, /* GL_extension_GL_SGIX_framezoom */ + 13377, /* GL_extension_GL_SGIX_igloo_interface */ + 13416, /* GL_extension_GL_SGIX_instruments */ + 13451, /* GL_extension_GL_SGIX_list_priority */ + 13488, /* GL_extension_GL_SGIX_pixel_texture */ + 13525, /* GL_extension_GL_SGIX_polynomial_ffd */ + 13563, /* GL_extension_GL_SGIX_reference_plane */ + 13602, /* GL_extension_GL_SGIX_sprite */ + 13632, /* GL_extension_GL_SGIX_tag_sample_buffer */ + 13673, /* GL_extension_GL_SGI_color_table */ + 13707, /* GL_extension_GL_SUNX_constant_data */ + 13744, /* GL_extension_GL_SUN_global_alpha */ + 13779, /* GL_extension_GL_SUN_mesh_array */ + 13812, /* GL_extension_GL_SUN_triangle_list */ + 13848, /* GL_extension_GL_SUN_vertex */ + 13877, /* OpenGL_ES_1_0 */ + 13891, /* OpenGL_ES_2_0 */ + 13905, /* OpenGL_ES_3_0 */ + 13919, /* OpenGL_ES_3_1 */ + 13933, /* OpenGL_ES_3_2 */ + 13947, /* always_present */ +}; + +static const char entrypoint_strings[] = { + 'g', + 'l', + 'A', + 'c', + 'c', + 'u', + 'm', + 0, // glAccum + 'g', + 'l', + 'A', + 'c', + 'c', + 'u', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glAccumxOES + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glActiveProgramEXT + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glActiveShaderProgram + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glActiveShaderProgramEXT + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glActiveStencilFaceEXT + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glActiveTexture + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'A', + 'R', + 'B', + 0, // glActiveTextureARB + 'g', + 'l', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glActiveVaryingNV + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '1', + 'A', + 'T', + 'I', + 0, // glAlphaFragmentOp1ATI + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '2', + 'A', + 'T', + 'I', + 0, // glAlphaFragmentOp2ATI + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '3', + 'A', + 'T', + 'I', + 0, // glAlphaFragmentOp3ATI + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 0, // glAlphaFunc + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 'Q', + 'C', + 'O', + 'M', + 0, // glAlphaFuncQCOM + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 'x', + 0, // glAlphaFuncx + 'g', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'u', + 'n', + 'c', + 'x', + 'O', + 'E', + 'S', + 0, // glAlphaFuncxOES + 'g', + 'l', + 'A', + 'p', + 'p', + 'l', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'C', + 'M', + 'A', + 'A', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glApplyFramebufferAttachmentCMAAINTEL + 'g', + 'l', + 'A', + 'p', + 'p', + 'l', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glApplyTextureEXT + 'g', + 'l', + 'A', + 'r', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glAreProgramsResidentNV + 'g', + 'l', + 'A', + 'r', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 0, // glAreTexturesResident + 'g', + 'l', + 'A', + 'r', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glAreTexturesResidentEXT + 'g', + 'l', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 0, // glArrayElement + 'g', + 'l', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glArrayElementEXT + 'g', + 'l', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'T', + 'I', + 0, // glArrayObjectATI + 'g', + 'l', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glAsyncMarkerSGIX + 'g', + 'l', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glAttachObjectARB + 'g', + 'l', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glAttachShader + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 0, // glBegin + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 0, // glBeginConditionalRender + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 0, // glBeginConditionalRenderNV + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 'X', + 0, // glBeginConditionalRenderNVX + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glBeginFragmentShaderATI + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'V', + 0, // glBeginOcclusionQueryNV + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'A', + 'M', + 'D', + 0, // glBeginPerfMonitorAMD + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glBeginPerfQueryINTEL + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 0, // glBeginQuery + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'R', + 'B', + 0, // glBeginQueryARB + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'X', + 'T', + 0, // glBeginQueryEXT + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glBeginQueryIndexed + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glBeginTransformFeedback + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'E', + 'X', + 'T', + 0, // glBeginTransformFeedbackEXT + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glBeginTransformFeedbackNV + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBeginVertexShaderEXT + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glBeginVideoCaptureNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glBindAttribLocation + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // glBindAttribLocationARB + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindBuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glBindBufferARB + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 0, // glBindBufferBase + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 'E', + 'X', + 'T', + 0, // glBindBufferBaseEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 'N', + 'V', + 0, // glBindBufferBaseNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glBindBufferOffsetEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'N', + 'V', + 0, // glBindBufferOffsetNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glBindBufferRange + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glBindBufferRangeEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glBindBufferRangeNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'B', + 'a', + 's', + 'e', + 0, // glBindBuffersBase + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glBindBuffersRange + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glBindFragDataLocation + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'E', + 'X', + 'T', + 0, // glBindFragDataLocationEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glBindFragDataLocationIndexed + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glBindFragDataLocationIndexedEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glBindFragmentShaderATI + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindFramebuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindFramebufferEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glBindFramebufferOES + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glBindImageTexture + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glBindImageTextureEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glBindImageTextures + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'L', + 'i', + 'g', + 'h', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindLightParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindMaterialParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glBindMultiTextureEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glBindProgramARB + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glBindProgramNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 0, // glBindProgramPipeline + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'E', + 'X', + 'T', + 0, // glBindProgramPipelineEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindRenderbuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindRenderbufferEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glBindRenderbufferOES + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 0, // glBindSampler + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glBindSamplers + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindTexGenParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glBindTexture + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glBindTextureEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'U', + 'n', + 'i', + 't', + 0, // glBindTextureUnit + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'U', + 'n', + 'i', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindTextureUnitParameterEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glBindTextures + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glBindTransformFeedback + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glBindTransformFeedbackNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glBindVertexArray + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glBindVertexArrayAPPLE + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'E', + 'S', + 0, // glBindVertexArrayOES + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBindVertexBuffer + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glBindVertexBuffers + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBindVertexShaderEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glBindVideoCaptureStreamBufferNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glBindVideoCaptureStreamTextureNV + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 'E', + 'X', + 'T', + 0, // glBinormal3bEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3bvEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glBinormal3dEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3dvEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glBinormal3fEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3fvEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glBinormal3iEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3ivEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 'E', + 'X', + 'T', + 0, // glBinormal3sEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glBinormal3svEXT + 'g', + 'l', + 'B', + 'i', + 'n', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBinormalPointerEXT + 'g', + 'l', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 0, // glBitmap + 'g', + 'l', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 'x', + 'O', + 'E', + 'S', + 0, // glBitmapxOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 0, // glBlendBarrier + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'K', + 'H', + 'R', + 0, // glBlendBarrierKHR + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // glBlendBarrierNV + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'C', + 'o', + 'l', + 'o', + 'r', + 0, // glBlendColor + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'C', + 'o', + 'l', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glBlendColorEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'C', + 'o', + 'l', + 'o', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glBlendColorxOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glBlendEquation + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'E', + 'X', + 'T', + 0, // glBlendEquationEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendEquationIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'O', + 'E', + 'S', + 0, // glBlendEquationOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glBlendEquationSeparate + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glBlendEquationSeparateEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendEquationSeparateIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'O', + 'E', + 'S', + 0, // glBlendEquationSeparateOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 0, // glBlendEquationSeparatei + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendEquationSeparateiARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendEquationSeparateiEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendEquationSeparateiOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 0, // glBlendEquationi + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendEquationiARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendEquationiEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'q', + 'u', + 'a', + 't', + 'i', + 'o', + 'n', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendEquationiOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 0, // glBlendFunc + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendFuncIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glBlendFuncSeparate + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glBlendFuncSeparateEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'I', + 'N', + 'G', + 'R', + 0, // glBlendFuncSeparateINGR + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'A', + 'M', + 'D', + 0, // glBlendFuncSeparateIndexedAMD + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'O', + 'E', + 'S', + 0, // glBlendFuncSeparateOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 0, // glBlendFuncSeparatei + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendFuncSeparateiARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendFuncSeparateiEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendFuncSeparateiOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 0, // glBlendFunci + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 'A', + 'R', + 'B', + 0, // glBlendFunciARB + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 'E', + 'X', + 'T', + 0, // glBlendFunciEXT + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'F', + 'u', + 'n', + 'c', + 'i', + 'O', + 'E', + 'S', + 0, // glBlendFunciOES + 'g', + 'l', + 'B', + 'l', + 'e', + 'n', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glBlendParameteriNV + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBlitFramebuffer + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glBlitFramebufferANGLE + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glBlitFramebufferEXT + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glBlitFramebufferNV + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glBlitNamedFramebuffer + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glBufferAddressRangeNV + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glBufferData + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'A', + 'R', + 'B', + 0, // glBufferDataARB + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glBufferPageCommitmentARB + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glBufferParameteriAPPLE + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glBufferStorage + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glBufferStorageEXT + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glBufferSubData + 'g', + 'l', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'A', + 'R', + 'B', + 0, // glBufferSubDataARB + 'g', + 'l', + 'C', + 'a', + 'l', + 'l', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'N', + 'V', + 0, // glCallCommandListNV + 'g', + 'l', + 'C', + 'a', + 'l', + 'l', + 'L', + 'i', + 's', + 't', + 0, // glCallList + 'g', + 'l', + 'C', + 'a', + 'l', + 'l', + 'L', + 'i', + 's', + 't', + 's', + 0, // glCallLists + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 0, // glCheckFramebufferStatus + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glCheckFramebufferStatusEXT + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'O', + 'E', + 'S', + 0, // glCheckFramebufferStatusOES + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 0, // glCheckNamedFramebufferStatus + 'g', + 'l', + 'C', + 'h', + 'e', + 'c', + 'k', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glCheckNamedFramebufferStatusEXT + 'g', + 'l', + 'C', + 'l', + 'a', + 'm', + 'p', + 'C', + 'o', + 'l', + 'o', + 'r', + 0, // glClampColor + 'g', + 'l', + 'C', + 'l', + 'a', + 'm', + 'p', + 'C', + 'o', + 'l', + 'o', + 'r', + 'A', + 'R', + 'B', + 0, // glClampColorARB + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 0, // glClear + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'A', + 'c', + 'c', + 'u', + 'm', + 0, // glClearAccum + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'A', + 'c', + 'c', + 'u', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glClearAccumxOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glClearBufferData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glClearBufferSubData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'i', + 0, // glClearBufferfi + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'v', + 0, // glClearBufferfv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 0, // glClearBufferiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'u', + 'i', + 'v', + 0, // glClearBufferuiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 0, // glClearColor + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'I', + 'i', + 'E', + 'X', + 'T', + 0, // glClearColorIiEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'I', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glClearColorIuiEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'x', + 0, // glClearColorx + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'C', + 'o', + 'l', + 'o', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glClearColorxOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 0, // glClearDepth + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'd', + 'N', + 'V', + 0, // glClearDepthdNV + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'f', + 0, // glClearDepthf + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'f', + 'O', + 'E', + 'S', + 0, // glClearDepthfOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'x', + 0, // glClearDepthx + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'x', + 'O', + 'E', + 'S', + 0, // glClearDepthxOES + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glClearIndex + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glClearNamedBufferData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glClearNamedBufferDataEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glClearNamedBufferSubData + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glClearNamedBufferSubDataEXT + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'i', + 0, // glClearNamedFramebufferfi + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'v', + 0, // glClearNamedFramebufferfv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 0, // glClearNamedFramebufferiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'u', + 'i', + 'v', + 0, // glClearNamedFramebufferuiv + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 0, // glClearStencil + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glClearTexImage + 'g', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glClearTexSubImage + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glClientActiveTexture + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'A', + 'R', + 'B', + 0, // glClientActiveTextureARB + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'A', + 'T', + 'I', + 0, // glClientActiveVertexStreamATI + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'e', + 'f', + 'a', + 'u', + 'l', + 't', + 'E', + 'X', + 'T', + 0, // glClientAttribDefaultEXT + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // glClientWaitSync + 'g', + 'l', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glClientWaitSyncAPPLE + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 0, // glClipControl + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 0, // glClipPlane + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 0, // glClipPlanef + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 'I', + 'M', + 'G', + 0, // glClipPlanefIMG + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 'O', + 'E', + 'S', + 0, // glClipPlanefOES + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 0, // glClipPlanex + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 'I', + 'M', + 'G', + 0, // glClipPlanexIMG + 'g', + 'l', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glClipPlanexOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 0, // glColor3b + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'v', + 0, // glColor3bv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 0, // glColor3d + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'v', + 0, // glColor3dv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 0, // glColor3f + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glColor3fVertex3fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor3fVertex3fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'v', + 0, // glColor3fv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'N', + 'V', + 0, // glColor3hNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glColor3hvNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 0, // glColor3i + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'v', + 0, // glColor3iv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 0, // glColor3s + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'v', + 0, // glColor3sv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 0, // glColor3ub + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'v', + 0, // glColor3ubv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 0, // glColor3ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'v', + 0, // glColor3uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 0, // glColor3us + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'v', + 0, // glColor3usv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glColor3xOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glColor3xvOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'b', + 0, // glColor4b + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'b', + 'v', + 0, // glColor4bv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'd', + 0, // glColor4d + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'd', + 'v', + 0, // glColor4dv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 0, // glColor4f + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'v', + 0, // glColor4fv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'h', + 'N', + 'V', + 0, // glColor4hNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glColor4hvNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'i', + 0, // glColor4i + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'i', + 'v', + 0, // glColor4iv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 's', + 0, // glColor4s + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 's', + 'v', + 0, // glColor4sv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 0, // glColor4ub + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex2fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex2fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex3fSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glColor4ubVertex3fvSUN + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'v', + 0, // glColor4ubv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'i', + 0, // glColor4ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'i', + 'v', + 0, // glColor4uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 's', + 0, // glColor4us + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 's', + 'v', + 0, // glColor4usv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'x', + 0, // glColor4x + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glColor4xOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glColor4xvOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glColorFormatNV + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '1', + 'A', + 'T', + 'I', + 0, // glColorFragmentOp1ATI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '2', + 'A', + 'T', + 'I', + 0, // glColorFragmentOp2ATI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'O', + 'p', + '3', + 'A', + 'T', + 'I', + 0, // glColorFragmentOp3ATI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 0, // glColorMask + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glColorMaskIndexedEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'i', + 0, // glColorMaski + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'i', + 'E', + 'X', + 'T', + 0, // glColorMaskiEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'i', + 'O', + 'E', + 'S', + 0, // glColorMaskiOES + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 0, // glColorMaterial + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 0, // glColorP3ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glColorP3uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '4', + 'u', + 'i', + 0, // glColorP4ui + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glColorP4uiv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glColorPointer + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glColorPointerEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glColorPointerListIBM + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glColorPointervINTEL + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glColorSubTable + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glColorSubTableEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glColorTable + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glColorTableEXT + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glColorTableParameterfv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 0, // glColorTableParameterfvSGI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glColorTableParameteriv + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 0, // glColorTableParameterivSGI + 'g', + 'l', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glColorTableSGI + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'N', + 'V', + 0, // glCombinerInputNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'N', + 'V', + 0, // glCombinerOutputNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'N', + 'V', + 0, // glCombinerParameterfNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glCombinerParameterfvNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glCombinerParameteriNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glCombinerParameterivNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'S', + 't', + 'a', + 'g', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glCombinerStageParameterfvNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'S', + 'e', + 'g', + 'm', + 'e', + 'n', + 't', + 's', + 'N', + 'V', + 0, // glCommandListSegmentsNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'N', + 'V', + 0, // glCompileCommandListNV + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glCompileShader + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glCompileShaderARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'I', + 'n', + 'c', + 'l', + 'u', + 'd', + 'e', + 'A', + 'R', + 'B', + 0, // glCompileShaderIncludeARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedMultiTexSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCompressedTexImage1D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexImage1DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCompressedTexImage2D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexImage2DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCompressedTexImage3D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexImage3DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glCompressedTexImage3DOES + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCompressedTexSubImage1D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexSubImage1DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCompressedTexSubImage2D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexSubImage2DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCompressedTexSubImage3D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'A', + 'R', + 'B', + 0, // glCompressedTexSubImage3DARB + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glCompressedTexSubImage3DOES + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCompressedTextureSubImage1D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCompressedTextureSubImage2D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCompressedTextureSubImage3D + 'g', + 'l', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCompressedTextureSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 's', + 'e', + 'r', + 'v', + 'a', + 't', + 'i', + 'v', + 'e', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'N', + 'V', + 0, // glConservativeRasterParameterfNV + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 0, // glConvolutionFilter1D + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glConvolutionFilter1DEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 0, // glConvolutionFilter2D + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glConvolutionFilter2DEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glConvolutionParameterf + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glConvolutionParameterfEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glConvolutionParameterfv + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glConvolutionParameterfvEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glConvolutionParameteri + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glConvolutionParameteriEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glConvolutionParameteriv + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glConvolutionParameterivEXT + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glConvolutionParameterxOES + 'g', + 'l', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glConvolutionParameterxvOES + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glCopyBufferSubData + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glCopyBufferSubDataNV + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glCopyColorSubTable + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'S', + 'u', + 'b', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glCopyColorSubTableEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glCopyColorTable + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glCopyColorTableSGI + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 0, // glCopyConvolutionFilter1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyConvolutionFilter1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 0, // glCopyConvolutionFilter2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyConvolutionFilter2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glCopyImageSubData + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glCopyImageSubDataEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glCopyImageSubDataNV + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'O', + 'E', + 'S', + 0, // glCopyImageSubDataOES + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyMultiTexSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glCopyNamedBufferSubData + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glCopyPathNV + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glCopyPixels + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCopyTexImage1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCopyTexImage2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCopyTexSubImage1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCopyTexSubImage2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCopyTexSubImage3D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTexSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glCopyTexSubImage3DOES + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glCopyTextureLevelsAPPLE + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glCopyTextureSubImage1D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureSubImage1DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glCopyTextureSubImage2D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureSubImage2DEXT + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glCopyTextureSubImage3D + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glCopyTextureSubImage3DEXT + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glCoverFillPathInstancedNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glCoverFillPathNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glCoverStrokePathInstancedNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glCoverStrokePathNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'a', + 's', + 'k', + 'N', + 'V', + 0, // glCoverageMaskNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'o', + 'd', + 'u', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'N', + 'V', + 0, // glCoverageModulationNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'o', + 'd', + 'u', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'T', + 'a', + 'b', + 'l', + 'e', + 'N', + 'V', + 0, // glCoverageModulationTableNV + 'g', + 'l', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'O', + 'p', + 'e', + 'r', + 'a', + 't', + 'i', + 'o', + 'n', + 'N', + 'V', + 0, // glCoverageOperationNV + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glCreateBuffers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 's', + 'N', + 'V', + 0, // glCreateCommandListsNV + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glCreateFramebuffers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glCreatePerfQueryINTEL + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glCreateProgram + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glCreateProgramObjectARB + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // glCreateProgramPipelines + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 0, // glCreateQueries + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glCreateRenderbuffers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glCreateSamplers + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glCreateShader + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glCreateShaderObjectARB + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glCreateShaderProgramEXT + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'v', + 0, // glCreateShaderProgramv + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'v', + 'E', + 'X', + 'T', + 0, // glCreateShaderProgramvEXT + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'N', + 'V', + 0, // glCreateStatesNV + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 'F', + 'r', + 'o', + 'm', + 'C', + 'L', + 'e', + 'v', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glCreateSyncFromCLeventARB + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glCreateTextures + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 0, // glCreateTransformFeedbacks + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glCreateVertexArrays + 'g', + 'l', + 'C', + 'u', + 'l', + 'l', + 'F', + 'a', + 'c', + 'e', + 0, // glCullFace + 'g', + 'l', + 'C', + 'u', + 'l', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glCullParameterdvEXT + 'g', + 'l', + 'C', + 'u', + 'l', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glCullParameterfvEXT + 'g', + 'l', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'A', + 'R', + 'B', + 0, // glCurrentPaletteMatrixARB + 'g', + 'l', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'O', + 'E', + 'S', + 0, // glCurrentPaletteMatrixOES + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 0, // glDebugMessageCallback + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 'A', + 'M', + 'D', + 0, // glDebugMessageCallbackAMD + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 'A', + 'R', + 'B', + 0, // glDebugMessageCallbackARB + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'a', + 'l', + 'l', + 'b', + 'a', + 'c', + 'k', + 'K', + 'H', + 'R', + 0, // glDebugMessageCallbackKHR + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 0, // glDebugMessageControl + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'A', + 'R', + 'B', + 0, // glDebugMessageControlARB + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'K', + 'H', + 'R', + 0, // glDebugMessageControlKHR + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'A', + 'M', + 'D', + 0, // glDebugMessageEnableAMD + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 0, // glDebugMessageInsert + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'A', + 'M', + 'D', + 0, // glDebugMessageInsertAMD + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'A', + 'R', + 'B', + 0, // glDebugMessageInsertARB + 'g', + 'l', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'K', + 'H', + 'R', + 0, // glDebugMessageInsertKHR + 'g', + 'l', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'S', + 'G', + 'I', + 'X', + 0, // glDeformSGIX + 'g', + 'l', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'a', + 'p', + '3', + 'd', + 'S', + 'G', + 'I', + 'X', + 0, // glDeformationMap3dSGIX + 'g', + 'l', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'a', + 'p', + '3', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glDeformationMap3fSGIX + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glDeleteAsyncMarkersSGIX + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDeleteBuffers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'R', + 'B', + 0, // glDeleteBuffersARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 's', + 'N', + 'V', + 0, // glDeleteCommandListsNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDeleteFencesAPPLE + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glDeleteFencesNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glDeleteFragmentShaderATI + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDeleteFramebuffers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteFramebuffersEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glDeleteFramebuffersOES + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'L', + 'i', + 's', + 't', + 's', + 0, // glDeleteLists + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glDeleteNamedStringARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 's', + 'A', + 'M', + 'D', + 0, // glDeleteNamesAMD + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glDeleteObjectARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'N', + 'V', + 0, // glDeleteOcclusionQueriesNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glDeletePathsNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glDeletePerfMonitorsAMD + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glDeletePerfQueryINTEL + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glDeleteProgram + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // glDeleteProgramPipelines + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteProgramPipelinesEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'A', + 'R', + 'B', + 0, // glDeleteProgramsARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'N', + 'V', + 0, // glDeleteProgramsNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 0, // glDeleteQueries + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'A', + 'R', + 'B', + 0, // glDeleteQueriesARB + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteQueriesEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDeleteRenderbuffers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteRenderbuffersEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glDeleteRenderbuffersOES + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glDeleteSamplers + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glDeleteShader + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'N', + 'V', + 0, // glDeleteStatesNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 0, // glDeleteSync + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDeleteSyncAPPLE + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glDeleteTextures + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glDeleteTexturesEXT + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 0, // glDeleteTransformFeedbacks + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 'N', + 'V', + 0, // glDeleteTransformFeedbacksNV + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glDeleteVertexArrays + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDeleteVertexArraysAPPLE + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'O', + 'E', + 'S', + 0, // glDeleteVertexArraysOES + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glDeleteVertexShaderEXT + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'B', + 'o', + 'u', + 'n', + 'd', + 's', + 'E', + 'X', + 'T', + 0, // glDepthBoundsEXT + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'B', + 'o', + 'u', + 'n', + 'd', + 's', + 'd', + 'N', + 'V', + 0, // glDepthBoundsdNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'F', + 'u', + 'n', + 'c', + 0, // glDepthFunc + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'M', + 'a', + 's', + 'k', + 0, // glDepthMask + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glDepthRange + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'r', + 'r', + 'a', + 'y', + 'f', + 'v', + 'N', + 'V', + 0, // glDepthRangeArrayfvNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 0, // glDepthRangeArrayv + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glDepthRangeIndexed + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'N', + 'V', + 0, // glDepthRangeIndexedfNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'd', + 'N', + 'V', + 0, // glDepthRangedNV + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'f', + 0, // glDepthRangef + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'f', + 'O', + 'E', + 'S', + 0, // glDepthRangefOES + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'x', + 0, // glDepthRangex + 'g', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDepthRangexOES + 'g', + 'l', + 'D', + 'e', + 't', + 'a', + 'c', + 'h', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glDetachObjectARB + 'g', + 'l', + 'D', + 'e', + 't', + 'a', + 'c', + 'h', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glDetachShader + 'g', + 'l', + 'D', + 'e', + 't', + 'a', + 'i', + 'l', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glDetailTexFuncSGIS + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 0, // glDisable + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 0, // glDisableClientState + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDisableClientStateIndexedEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glDisableClientStateiEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'Q', + 'C', + 'O', + 'M', + 0, // glDisableDriverControlQCOM + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDisableIndexedEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glDisableVariantClientStateEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glDisableVertexArrayAttrib + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // glDisableVertexArrayAttribEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // glDisableVertexArrayEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDisableVertexAttribAPPLE + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glDisableVertexAttribArray + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'R', + 'B', + 0, // glDisableVertexAttribArrayARB + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 0, // glDisablei + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glDisableiEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 'N', + 'V', + 0, // glDisableiNV + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glDisableiOES + 'g', + 'l', + 'D', + 'i', + 's', + 'c', + 'a', + 'r', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glDiscardFramebufferEXT + 'g', + 'l', + 'D', + 'i', + 's', + 'p', + 'a', + 't', + 'c', + 'h', + 'C', + 'o', + 'm', + 'p', + 'u', + 't', + 'e', + 0, // glDispatchCompute + 'g', + 'l', + 'D', + 'i', + 's', + 'p', + 'a', + 't', + 'c', + 'h', + 'C', + 'o', + 'm', + 'p', + 'u', + 't', + 'e', + 'G', + 'r', + 'o', + 'u', + 'p', + 'S', + 'i', + 'z', + 'e', + 'A', + 'R', + 'B', + 0, // glDispatchComputeGroupSizeARB + 'g', + 'l', + 'D', + 'i', + 's', + 'p', + 'a', + 't', + 'c', + 'h', + 'C', + 'o', + 'm', + 'p', + 'u', + 't', + 'e', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glDispatchComputeIndirect + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glDrawArrays + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glDrawArraysEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glDrawArraysIndirect + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawArraysInstanced + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glDrawArraysInstancedANGLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'R', + 'B', + 0, // glDrawArraysInstancedARB + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 0, // glDrawArraysInstancedBaseInstance + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glDrawArraysInstancedBaseInstanceEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDrawArraysInstancedEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glDrawArraysInstancedNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glDrawBuffer + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glDrawBuffers + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'R', + 'B', + 0, // glDrawBuffersARB + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'T', + 'I', + 0, // glDrawBuffersATI + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glDrawBuffersEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDrawBuffersIndexedEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'N', + 'V', + 0, // glDrawBuffersNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glDrawCommandsAddressNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glDrawCommandsNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glDrawCommandsStatesAddressNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'N', + 'V', + 0, // glDrawCommandsStatesNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDrawElementArrayAPPLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'T', + 'I', + 0, // glDrawElementArrayATI + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 0, // glDrawElements + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glDrawElementsBaseVertex + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glDrawElementsBaseVertexEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawElementsBaseVertexOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glDrawElementsIndirect + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawElementsInstanced + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glDrawElementsInstancedANGLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'A', + 'R', + 'B', + 0, // glDrawElementsInstancedARB + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 0, // glDrawElementsInstancedBaseInstance + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedBaseInstanceEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glDrawElementsInstancedBaseVertex + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 0, // glDrawElementsInstancedBaseVertexBaseInstance + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'a', + 's', + 'e', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedBaseVertexBaseInstanceEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedBaseVertexEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawElementsInstancedBaseVertexOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glDrawElementsInstancedEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glDrawElementsInstancedNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'M', + 'e', + 's', + 'h', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'S', + 'U', + 'N', + 0, // glDrawMeshArraysSUN + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glDrawPixels + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glDrawRangeElementArrayAPPLE + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'T', + 'I', + 0, // glDrawRangeElementArrayATI + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 0, // glDrawRangeElements + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glDrawRangeElementsBaseVertex + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glDrawRangeElementsBaseVertexEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawRangeElementsBaseVertexOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'E', + 'X', + 'T', + 0, // glDrawRangeElementsEXT + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'f', + 'O', + 'E', + 'S', + 0, // glDrawTexfOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'f', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexfvOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'i', + 'O', + 'E', + 'S', + 0, // glDrawTexiOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexivOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 's', + 'O', + 'E', + 'S', + 0, // glDrawTexsOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 's', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexsvOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glDrawTextureNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glDrawTexxOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'e', + 'x', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glDrawTexxvOES + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glDrawTransformFeedback + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawTransformFeedbackInstanced + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glDrawTransformFeedbackNV + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 0, // glDrawTransformFeedbackStream + 'g', + 'l', + 'D', + 'r', + 'a', + 'w', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 0, // glDrawTransformFeedbackStreamInstanced + 'g', + 'l', + 'E', + 'G', + 'L', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'a', + 'r', + 'g', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'O', + 'E', + 'S', + 0, // glEGLImageTargetRenderbufferStorageOES + 'g', + 'l', + 'E', + 'G', + 'L', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'a', + 'r', + 'g', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'O', + 'E', + 'S', + 0, // glEGLImageTargetTexture2DOES + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 0, // glEdgeFlag + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glEdgeFlagFormatNV + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glEdgeFlagPointer + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glEdgeFlagPointerEXT + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glEdgeFlagPointerListIBM + 'g', + 'l', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'v', + 0, // glEdgeFlagv + 'g', + 'l', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glElementPointerAPPLE + 'g', + 'l', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glElementPointerATI + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 0, // glEnable + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 0, // glEnableClientState + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glEnableClientStateIndexedEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glEnableClientStateiEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'Q', + 'C', + 'O', + 'M', + 0, // glEnableDriverControlQCOM + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glEnableIndexedEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'E', + 'X', + 'T', + 0, // glEnableVariantClientStateEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glEnableVertexArrayAttrib + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'X', + 'T', + 0, // glEnableVertexArrayAttribEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // glEnableVertexArrayEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glEnableVertexAttribAPPLE + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glEnableVertexAttribArray + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'R', + 'B', + 0, // glEnableVertexAttribArrayARB + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 0, // glEnablei + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 'E', + 'X', + 'T', + 0, // glEnableiEXT + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 'N', + 'V', + 0, // glEnableiNV + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'i', + 'O', + 'E', + 'S', + 0, // glEnableiOES + 'g', + 'l', + 'E', + 'n', + 'd', + 0, // glEnd + 'g', + 'l', + 'E', + 'n', + 'd', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 0, // glEndConditionalRender + 'g', + 'l', + 'E', + 'n', + 'd', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 0, // glEndConditionalRenderNV + 'g', + 'l', + 'E', + 'n', + 'd', + 'C', + 'o', + 'n', + 'd', + 'i', + 't', + 'i', + 'o', + 'n', + 'a', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'N', + 'V', + 'X', + 0, // glEndConditionalRenderNVX + 'g', + 'l', + 'E', + 'n', + 'd', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glEndFragmentShaderATI + 'g', + 'l', + 'E', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 0, // glEndList + 'g', + 'l', + 'E', + 'n', + 'd', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'V', + 0, // glEndOcclusionQueryNV + 'g', + 'l', + 'E', + 'n', + 'd', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'A', + 'M', + 'D', + 0, // glEndPerfMonitorAMD + 'g', + 'l', + 'E', + 'n', + 'd', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glEndPerfQueryINTEL + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 0, // glEndQuery + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'R', + 'B', + 0, // glEndQueryARB + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'X', + 'T', + 0, // glEndQueryEXT + 'g', + 'l', + 'E', + 'n', + 'd', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glEndQueryIndexed + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'i', + 'l', + 'i', + 'n', + 'g', + 'Q', + 'C', + 'O', + 'M', + 0, // glEndTilingQCOM + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glEndTransformFeedback + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'E', + 'X', + 'T', + 0, // glEndTransformFeedbackEXT + 'g', + 'l', + 'E', + 'n', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glEndTransformFeedbackNV + 'g', + 'l', + 'E', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glEndVertexShaderEXT + 'g', + 'l', + 'E', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glEndVideoCaptureNV + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 0, // glEvalCoord1d + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 0, // glEvalCoord1dv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 0, // glEvalCoord1f + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 0, // glEvalCoord1fv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glEvalCoord1xOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glEvalCoord1xvOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 0, // glEvalCoord2d + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 0, // glEvalCoord2dv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 0, // glEvalCoord2f + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 0, // glEvalCoord2fv + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glEvalCoord2xOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glEvalCoord2xvOES + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'M', + 'a', + 'p', + 's', + 'N', + 'V', + 0, // glEvalMapsNV + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'M', + 'e', + 's', + 'h', + '1', + 0, // glEvalMesh1 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'M', + 'e', + 's', + 'h', + '2', + 0, // glEvalMesh2 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + '1', + 0, // glEvalPoint1 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + '2', + 0, // glEvalPoint2 + 'g', + 'l', + 'E', + 'v', + 'a', + 'l', + 'u', + 'a', + 't', + 'e', + 'D', + 'e', + 'p', + 't', + 'h', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'A', + 'R', + 'B', + 0, // glEvaluateDepthValuesARB + 'g', + 'l', + 'E', + 'x', + 'e', + 'c', + 'u', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glExecuteProgramNV + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetBufferPointervQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetBuffersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetFramebuffersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetProgramBinarySourceQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetProgramsQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetRenderbuffersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetShadersQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetTexLevelParameterivQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetTexSubImageQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtGetTexturesQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtIsProgramBinaryQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'T', + 'e', + 'x', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'S', + 't', + 'a', + 't', + 'e', + 'O', + 'v', + 'e', + 'r', + 'r', + 'i', + 'd', + 'e', + 'i', + 'Q', + 'C', + 'O', + 'M', + 0, // glExtTexObjectStateOverrideiQCOM + 'g', + 'l', + 'E', + 'x', + 't', + 'r', + 'a', + 'c', + 't', + 'C', + 'o', + 'm', + 'p', + 'o', + 'n', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glExtractComponentEXT + 'g', + 'l', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glFeedbackBuffer + 'g', + 'l', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glFeedbackBufferxOES + 'g', + 'l', + 'F', + 'e', + 'n', + 'c', + 'e', + 'S', + 'y', + 'n', + 'c', + 0, // glFenceSync + 'g', + 'l', + 'F', + 'e', + 'n', + 'c', + 'e', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFenceSyncAPPLE + 'g', + 'l', + 'F', + 'i', + 'n', + 'a', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'N', + 'V', + 0, // glFinalCombinerInputNV + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 0, // glFinish + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'A', + 's', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 'X', + 0, // glFinishAsyncSGIX + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFinishFenceAPPLE + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glFinishFenceNV + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFinishObjectAPPLE + 'g', + 'l', + 'F', + 'i', + 'n', + 'i', + 's', + 'h', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'U', + 'N', + 'X', + 0, // glFinishTextureSUNX + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 0, // glFlush + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glFlushMappedBufferRange + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFlushMappedBufferRangeAPPLE + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glFlushMappedBufferRangeEXT + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glFlushMappedNamedBufferRange + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'M', + 'a', + 'p', + 'p', + 'e', + 'd', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glFlushMappedNamedBufferRangeEXT + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'P', + 'i', + 'x', + 'e', + 'l', + 'D', + 'a', + 't', + 'a', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glFlushPixelDataRangeNV + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glFlushRasterSGIX + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'S', + 't', + 'a', + 't', + 'i', + 'c', + 'D', + 'a', + 't', + 'a', + 'I', + 'B', + 'M', + 0, // glFlushStaticDataIBM + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glFlushVertexArrayRangeAPPLE + 'g', + 'l', + 'F', + 'l', + 'u', + 's', + 'h', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glFlushVertexArrayRangeNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glFogCoordFormatNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glFogCoordPointer + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFogCoordPointerEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glFogCoordPointerListIBM + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 0, // glFogCoordd + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 'E', + 'X', + 'T', + 0, // glFogCoorddEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 'v', + 0, // glFogCoorddv + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glFogCoorddvEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 0, // glFogCoordf + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 'E', + 'X', + 'T', + 0, // glFogCoordfEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 'v', + 0, // glFogCoordfv + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glFogCoordfvEXT + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'h', + 'N', + 'V', + 0, // glFogCoordhNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'h', + 'v', + 'N', + 'V', + 0, // glFogCoordhvNV + 'g', + 'l', + 'F', + 'o', + 'g', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glFogFuncSGIS + 'g', + 'l', + 'F', + 'o', + 'g', + 'f', + 0, // glFogf + 'g', + 'l', + 'F', + 'o', + 'g', + 'f', + 'v', + 0, // glFogfv + 'g', + 'l', + 'F', + 'o', + 'g', + 'i', + 0, // glFogi + 'g', + 'l', + 'F', + 'o', + 'g', + 'i', + 'v', + 0, // glFogiv + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 0, // glFogx + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 'O', + 'E', + 'S', + 0, // glFogxOES + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 'v', + 0, // glFogxv + 'g', + 'l', + 'F', + 'o', + 'g', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glFogxvOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentColorMaterialSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'C', + 'o', + 'l', + 'o', + 'r', + 'N', + 'V', + 0, // glFragmentCoverageColorNV + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModelfSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModelfvSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModeliSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightModelivSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightfSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightfvSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightiSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentLightivSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialfSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialfvSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialiSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glFragmentMaterialivSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'e', + 'r', + 'm', + 'i', + 'n', + 'a', + 't', + 'o', + 'r', + 'G', + 'R', + 'E', + 'M', + 'E', + 'D', + 'Y', + 0, // glFrameTerminatorGREMEDY + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'Z', + 'o', + 'o', + 'm', + 'S', + 'G', + 'I', + 'X', + 0, // glFrameZoomSGIX + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferDrawBufferEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glFramebufferDrawBuffersEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glFramebufferParameteri + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferReadBufferEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glFramebufferRenderbuffer + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferRenderbufferEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glFramebufferRenderbufferOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glFramebufferSampleLocationsfvARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'N', + 'V', + 0, // glFramebufferSampleLocationsfvNV + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glFramebufferTexture + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '1', + 'D', + 0, // glFramebufferTexture1D + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture1DEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 0, // glFramebufferTexture2D + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture2DEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture2DMultisampleEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'I', + 'M', + 'G', + 0, // glFramebufferTexture2DMultisampleIMG + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'O', + 'E', + 'S', + 0, // glFramebufferTexture2DOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 0, // glFramebufferTexture3D + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glFramebufferTexture3DEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glFramebufferTexture3DOES + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'A', + 'R', + 'B', + 0, // glFramebufferTextureARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glFramebufferTextureEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'F', + 'a', + 'c', + 'e', + 'A', + 'R', + 'B', + 0, // glFramebufferTextureFaceARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'F', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glFramebufferTextureFaceEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 0, // glFramebufferTextureLayer + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glFramebufferTextureLayerARB + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glFramebufferTextureLayerEXT + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 'v', + 'i', + 'e', + 'w', + 'O', + 'V', + 'R', + 0, // glFramebufferTextureMultiviewOVR + 'g', + 'l', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'O', + 'E', + 'S', + 0, // glFramebufferTextureOES + 'g', + 'l', + 'F', + 'r', + 'e', + 'e', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glFreeObjectBufferATI + 'g', + 'l', + 'F', + 'r', + 'o', + 'n', + 't', + 'F', + 'a', + 'c', + 'e', + 0, // glFrontFace + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 0, // glFrustum + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'f', + 0, // glFrustumf + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'f', + 'O', + 'E', + 'S', + 0, // glFrustumfOES + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'x', + 0, // glFrustumx + 'g', + 'l', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glFrustumxOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glGenAsyncMarkersSGIX + 'g', + 'l', + 'G', + 'e', + 'n', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glGenBuffers + 'g', + 'l', + 'G', + 'e', + 'n', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'A', + 'R', + 'B', + 0, // glGenBuffersARB + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGenFencesAPPLE + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'e', + 'n', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glGenFencesNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 'A', + 'T', + 'I', + 0, // glGenFragmentShadersATI + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glGenFramebuffers + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glGenFramebuffersEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glGenFramebuffersOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'L', + 'i', + 's', + 't', + 's', + 0, // glGenLists + 'g', + 'l', + 'G', + 'e', + 'n', + 'N', + 'a', + 'm', + 'e', + 's', + 'A', + 'M', + 'D', + 0, // glGenNamesAMD + 'g', + 'l', + 'G', + 'e', + 'n', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'N', + 'V', + 0, // glGenOcclusionQueriesNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glGenPathsNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glGenPerfMonitorsAMD + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // glGenProgramPipelines + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glGenProgramPipelinesEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'A', + 'R', + 'B', + 0, // glGenProgramsARB + 'g', + 'l', + 'G', + 'e', + 'n', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'N', + 'V', + 0, // glGenProgramsNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 0, // glGenQueries + 'g', + 'l', + 'G', + 'e', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'A', + 'R', + 'B', + 0, // glGenQueriesARB + 'g', + 'l', + 'G', + 'e', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'i', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glGenQueriesEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glGenRenderbuffers + 'g', + 'l', + 'G', + 'e', + 'n', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glGenRenderbuffersEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'O', + 'E', + 'S', + 0, // glGenRenderbuffersOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 's', + 0, // glGenSamplers + 'g', + 'l', + 'G', + 'e', + 'n', + 'S', + 'y', + 'm', + 'b', + 'o', + 'l', + 's', + 'E', + 'X', + 'T', + 0, // glGenSymbolsEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glGenTextures + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glGenTexturesEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 0, // glGenTransformFeedbacks + 'g', + 'l', + 'G', + 'e', + 'n', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 's', + 'N', + 'V', + 0, // glGenTransformFeedbacksNV + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glGenVertexArrays + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGenVertexArraysAPPLE + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'O', + 'E', + 'S', + 0, // glGenVertexArraysOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 'E', + 'X', + 'T', + 0, // glGenVertexShadersEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 0, // glGenerateMipmap + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'E', + 'X', + 'T', + 0, // glGenerateMipmapEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'O', + 'E', + 'S', + 0, // glGenerateMipmapOES + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'E', + 'X', + 'T', + 0, // glGenerateMultiTexMipmapEXT + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 0, // glGenerateTextureMipmap + 'g', + 'l', + 'G', + 'e', + 'n', + 'e', + 'r', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'i', + 'p', + 'm', + 'a', + 'p', + 'E', + 'X', + 'T', + 0, // glGenerateTextureMipmapEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'A', + 't', + 'o', + 'm', + 'i', + 'c', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 0, // glGetActiveAtomicCounterBufferiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glGetActiveAttrib + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'R', + 'B', + 0, // glGetActiveAttribARB + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveSubroutineName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveSubroutineUniformName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 0, // glGetActiveSubroutineUniformiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 0, // glGetActiveUniform + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'A', + 'R', + 'B', + 0, // glGetActiveUniformARB + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveUniformBlockName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'i', + 'v', + 0, // glGetActiveUniformBlockiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'N', + 'a', + 'm', + 'e', + 0, // glGetActiveUniformName + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 's', + 'i', + 'v', + 0, // glGetActiveUniformsiv + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'c', + 't', + 'i', + 'v', + 'e', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetActiveVaryingNV + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetArrayObjectfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetArrayObjectivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'e', + 'd', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 's', + 'A', + 'R', + 'B', + 0, // glGetAttachedObjectsARB + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'e', + 'd', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 's', + 0, // glGetAttachedShaders + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetAttribLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // glGetAttribLocationARB + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetBooleanIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'i', + '_', + 'v', + 0, // glGetBooleani_v + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 0, // glGetBooleanv + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + '6', + '4', + 'v', + 0, // glGetBufferParameteri64v + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetBufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetBufferParameterivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetBufferParameterui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetBufferPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'A', + 'R', + 'B', + 0, // glGetBufferPointervARB + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'O', + 'E', + 'S', + 0, // glGetBufferPointervOES + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glGetBufferSubData + 'g', + 'l', + 'G', + 'e', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'A', + 'R', + 'B', + 0, // glGetBufferSubDataARB + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 0, // glGetClipPlane + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 0, // glGetClipPlanef + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'f', + 'O', + 'E', + 'S', + 0, // glGetClipPlanefOES + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 0, // glGetClipPlanex + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'p', + 'P', + 'l', + 'a', + 'n', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glGetClipPlanexOES + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glGetColorTable + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glGetColorTableEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetColorTableParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetColorTableParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 0, // glGetColorTableParameterfvSGI + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetColorTableParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetColorTableParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 0, // glGetColorTableParameterivSGI + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glGetColorTableSGI + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetCombinerInputParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetCombinerInputParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetCombinerOutputParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetCombinerOutputParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'S', + 't', + 'a', + 'g', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetCombinerStageParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'H', + 'e', + 'a', + 'd', + 'e', + 'r', + 'N', + 'V', + 0, // glGetCommandHeaderNV + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetCompressedMultiTexImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetCompressedTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glGetCompressedTexImageARB + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetCompressedTextureImage + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetCompressedTextureImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetCompressedTextureSubImage + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetConvolutionFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glGetConvolutionFilterEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetConvolutionParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetConvolutionParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetConvolutionParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetConvolutionParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetConvolutionParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'M', + 'o', + 'd', + 'u', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'T', + 'a', + 'b', + 'l', + 'e', + 'N', + 'V', + 0, // glGetCoverageModulationTableNV + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 0, // glGetDebugMessageLog + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 'A', + 'M', + 'D', + 0, // glGetDebugMessageLogAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 'A', + 'R', + 'B', + 0, // glGetDebugMessageLogARB + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'b', + 'u', + 'g', + 'M', + 'e', + 's', + 's', + 'a', + 'g', + 'e', + 'L', + 'o', + 'g', + 'K', + 'H', + 'R', + 0, // glGetDebugMessageLogKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 't', + 'a', + 'i', + 'l', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetDetailTexFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetDoubleIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'i', + '_', + 'v', + 0, // glGetDoublei_v + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetDoublei_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'o', + 'u', + 'b', + 'l', + 'e', + 'v', + 0, // glGetDoublev + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'Q', + 'C', + 'O', + 'M', + 0, // glGetDriverControlStringQCOM + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'r', + 'i', + 'v', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 's', + 'Q', + 'C', + 'O', + 'M', + 0, // glGetDriverControlsQCOM + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'r', + 'r', + 'o', + 'r', + 0, // glGetError + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glGetFenceivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'n', + 'a', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetFinalCombinerInputParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'n', + 'a', + 'l', + 'C', + 'o', + 'm', + 'b', + 'i', + 'n', + 'e', + 'r', + 'I', + 'n', + 'p', + 'u', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetFinalCombinerInputParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'r', + 's', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'd', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetFirstPerfQueryIdINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'x', + 'e', + 'd', + 'v', + 0, // glGetFixedv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'i', + 'x', + 'e', + 'd', + 'v', + 'O', + 'E', + 'S', + 0, // glGetFixedvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFloatIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'i', + '_', + 'v', + 0, // glGetFloati_v + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFloati_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'i', + '_', + 'v', + 'N', + 'V', + 0, // glGetFloati_vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 0, // glGetFloatv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'o', + 'g', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetFogFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetFragDataIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'I', + 'n', + 'd', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glGetFragDataIndexEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetFragDataLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'D', + 'a', + 't', + 'a', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'E', + 'X', + 'T', + 0, // glGetFragDataLocationEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentLightfvSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentLightivSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentMaterialfvSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetFragmentMaterialivSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetFramebufferAttachmentParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFramebufferAttachmentParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetFramebufferAttachmentParameterivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetFramebufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetFramebufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 0, // glGetGraphicsResetStatus + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'A', + 'R', + 'B', + 0, // glGetGraphicsResetStatusARB + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glGetGraphicsResetStatusEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'r', + 'a', + 'p', + 'h', + 'i', + 'c', + 's', + 'R', + 'e', + 's', + 'e', + 't', + 'S', + 't', + 'a', + 't', + 'u', + 's', + 'K', + 'H', + 'R', + 0, // glGetGraphicsResetStatusKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glGetHistogram + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glGetHistogramEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetHistogramParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetHistogramParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetHistogramParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetHistogramParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetHistogramParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetImageHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // glGetImageHandleNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'H', + 'P', + 0, // glGetImageTransformParameterfvHP + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'H', + 'P', + 0, // glGetImageTransformParameterivHP + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 'A', + 'R', + 'B', + 0, // glGetInfoLogARB + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glGetInstrumentsSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + '6', + '4', + 'i', + '_', + 'v', + 0, // glGetInteger64i_v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + '6', + '4', + 'v', + 0, // glGetInteger64v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + '6', + '4', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetInteger64vAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetIntegerIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'i', + '_', + 'v', + 0, // glGetIntegeri_v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetIntegeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'i', + '_', + 'v', + 'N', + 'V', + 0, // glGetIntegerui64i_vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetIntegerui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 0, // glGetIntegerv + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glGetInternalformatSampleivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + '6', + '4', + 'v', + 0, // glGetInternalformati64v + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 't', + 'e', + 'r', + 'n', + 'a', + 'l', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'v', + 0, // glGetInternalformativ + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 'E', + 'X', + 'T', + 0, // glGetInvariantBooleanvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 'E', + 'X', + 'T', + 0, // glGetInvariantFloatvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetInvariantIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 0, // glGetLightfv + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 0, // glGetLightiv + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glGetLightxOES + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 0, // glGetLightxv + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetLightxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetListParameterfvSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glGetListParameterivSGIX + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 'E', + 'X', + 'T', + 0, // glGetLocalConstantBooleanvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 'E', + 'X', + 'T', + 0, // glGetLocalConstantFloatvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetLocalConstantIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetMapAttribParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetMapAttribParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 's', + 'N', + 'V', + 0, // glGetMapControlPointsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetMapParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetMapParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'd', + 'v', + 0, // glGetMapdv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'i', + 'v', + 0, // glGetMapiv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 'p', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetMapxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 0, // glGetMaterialfv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 0, // glGetMaterialiv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'O', + 'E', + 'S', + 0, // glGetMaterialxOES + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 0, // glGetMaterialxv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetMaterialxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glGetMinmax + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'E', + 'X', + 'T', + 0, // glGetMinmaxEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetMinmaxParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMinmaxParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetMinmaxParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMinmaxParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexEnvfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexEnvivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexGendvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexGenfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexGenivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetMultiTexImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexLevelParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexLevelParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetMultiTexParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'f', + 'v', + 0, // glGetMultisamplefv + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'f', + 'v', + 'N', + 'V', + 0, // glGetMultisamplefvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + '6', + '4', + 'v', + 0, // glGetNamedBufferParameteri64v + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedBufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedBufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetNamedBufferParameterui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetNamedBufferPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedBufferPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glGetNamedBufferSubData + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glGetNamedBufferSubDataEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedFramebufferAttachmentParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'a', + 'c', + 'h', + 'm', + 'e', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedFramebufferAttachmentParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedFramebufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedFramebufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterdvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramLocalParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramStringEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedProgramivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetNamedRenderbufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetNamedRenderbufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glGetNamedStringARB + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetNamedStringivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'N', + 'e', + 'x', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'd', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetNextPerfQueryIdINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetObjectBufferfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetObjectBufferivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glGetObjectLabel + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 'E', + 'X', + 'T', + 0, // glGetObjectLabelEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glGetObjectLabelKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetObjectParameterfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetObjectParameterivAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetObjectParameterivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glGetObjectPtrLabel + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glGetObjectPtrLabelKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 'N', + 'V', + 0, // glGetOcclusionQueryivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetOcclusionQueryuivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'l', + 'o', + 'r', + 'G', + 'e', + 'n', + 'f', + 'v', + 'N', + 'V', + 0, // glGetPathColorGenfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'l', + 'o', + 'r', + 'G', + 'e', + 'n', + 'i', + 'v', + 'N', + 'V', + 0, // glGetPathColorGenivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glGetPathCommandsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'o', + 'r', + 'd', + 's', + 'N', + 'V', + 0, // glGetPathCoordsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'D', + 'a', + 's', + 'h', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glGetPathDashArrayNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'L', + 'e', + 'n', + 'g', + 't', + 'h', + 'N', + 'V', + 0, // glGetPathLengthNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'M', + 'e', + 't', + 'r', + 'i', + 'c', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glGetPathMetricRangeNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'M', + 'e', + 't', + 'r', + 'i', + 'c', + 's', + 'N', + 'V', + 0, // glGetPathMetricsNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetPathParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glGetPathParameterivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'S', + 'p', + 'a', + 'c', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetPathSpacingNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'N', + 'V', + 0, // glGetPathTexGenfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'a', + 't', + 'h', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'N', + 'V', + 0, // glGetPathTexGenivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'I', + 'n', + 'f', + 'o', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfCounterInfoINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCounterDataAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'I', + 'n', + 'f', + 'o', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCounterInfoAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCounterStringAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorCountersAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'G', + 'r', + 'o', + 'u', + 'p', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorGroupStringAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'G', + 'r', + 'o', + 'u', + 'p', + 's', + 'A', + 'M', + 'D', + 0, // glGetPerfMonitorGroupsAMD + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'a', + 't', + 'a', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfQueryDataINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'd', + 'B', + 'y', + 'N', + 'a', + 'm', + 'e', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfQueryIdByNameINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'e', + 'r', + 'f', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'f', + 'o', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glGetPerfQueryInfoINTEL + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetPixelMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 0, // glGetPixelMapuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 0, // glGetPixelMapusv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'x', + 'v', + 0, // glGetPixelMapxv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glGetPixelTexGenParameterfvSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glGetPixelTexGenParameterivSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPixelTransformParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPixelTransformParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPointerIndexedvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPointeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'K', + 'H', + 'R', + 0, // glGetPointervKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glGetPolygonStipple + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 0, // glGetProgramBinary + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'O', + 'E', + 'S', + 0, // glGetProgramBinaryOES + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramEnvParameterIivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramEnvParameterIuivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramEnvParameterdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramEnvParameterfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 0, // glGetProgramInfoLog + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'I', + 'n', + 't', + 'e', + 'r', + 'f', + 'a', + 'c', + 'e', + 'i', + 'v', + 0, // glGetProgramInterfaceiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramLocalParameterIivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramLocalParameterIuivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramLocalParameterdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramLocalParameterfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'N', + 'V', + 0, // glGetProgramNamedParameterdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetProgramNamedParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'N', + 'V', + 0, // glGetProgramParameterdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glGetProgramParameterfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 0, // glGetProgramPipelineInfoLog + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 'E', + 'X', + 'T', + 0, // glGetProgramPipelineInfoLogEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'i', + 'v', + 0, // glGetProgramPipelineiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetProgramPipelineivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetProgramResourceIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetProgramResourceLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetProgramResourceLocationIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'I', + 'n', + 'd', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glGetProgramResourceLocationIndexEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'N', + 'a', + 'm', + 'e', + 0, // glGetProgramResourceName + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'f', + 'v', + 'N', + 'V', + 0, // glGetProgramResourcefvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'i', + 'v', + 0, // glGetProgramResourceiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'a', + 'g', + 'e', + 'i', + 'v', + 0, // glGetProgramStageiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glGetProgramStringARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetProgramStringNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramSubroutineParameteruivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 0, // glGetProgramiv + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetProgramivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'i', + 'v', + 'N', + 'V', + 0, // glGetProgramivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryBufferObjecti64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 0, // glGetQueryBufferObjectiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryBufferObjectui64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 0, // glGetQueryBufferObjectuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'i', + 'v', + 0, // glGetQueryIndexediv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryObjecti64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + '6', + '4', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjecti64vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 0, // glGetQueryObjectiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetQueryObjectivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjectivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + '6', + '4', + 'v', + 0, // glGetQueryObjectui64v + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + '6', + '4', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjectui64vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 0, // glGetQueryObjectuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetQueryObjectuivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryObjectuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 0, // glGetQueryiv + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetQueryivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetQueryivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetRenderbufferParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetRenderbufferParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetRenderbufferParameterivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glGetSamplerParameterIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetSamplerParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetSamplerParameterIivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glGetSamplerParameterIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetSamplerParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetSamplerParameterIuivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetSamplerParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetSamplerParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetSeparableFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glGetSeparableFilterEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'I', + 'n', + 'f', + 'o', + 'L', + 'o', + 'g', + 0, // glGetShaderInfoLog + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'e', + 'c', + 'i', + 's', + 'i', + 'o', + 'n', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glGetShaderPrecisionFormat + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 0, // glGetShaderSource + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'A', + 'R', + 'B', + 0, // glGetShaderSourceARB + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'i', + 'v', + 0, // glGetShaderiv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'h', + 'a', + 'r', + 'p', + 'e', + 'n', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetSharpenTexFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'a', + 'g', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 'N', + 'V', + 0, // glGetStageIndexNV + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glGetString + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'i', + 0, // glGetStringi + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetSubroutineIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetSubroutineUniformLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'i', + 'v', + 0, // glGetSynciv + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'i', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetSyncivAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetTexBumpParameterfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetTexBumpParameterivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 0, // glGetTexEnvfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 0, // glGetTexEnviv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 0, // glGetTexEnvxv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexEnvxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glGetTexFilterFuncSGIS + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 0, // glGetTexGendv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 0, // glGetTexGenfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexGenfvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 0, // glGetTexGeniv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexGenivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexGenxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTexLevelParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTexLevelParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexLevelParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glGetTexParameterIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTexParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexParameterIivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glGetTexParameterIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTexParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexParameterIuivOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glGetTexParameterPointervAPPLE + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTexParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTexParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 0, // glGetTexParameterxv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glGetTexParameterxvOES + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetTextureHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // glGetTextureHandleNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetTextureImage + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glGetTextureImageEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTextureLevelParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureLevelParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTextureLevelParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'e', + 'v', + 'e', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureLevelParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glGetTextureParameterIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glGetTextureParameterIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glGetTextureParameterfv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glGetTextureParameteriv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetTextureParameterivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetTextureSamplerHandleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // glGetTextureSamplerHandleNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetTextureSubImage + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'c', + 'k', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'i', + 'v', + 'N', + 'V', + 0, // glGetTrackMatrixivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 0, // glGetTransformFeedbackVarying + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glGetTransformFeedbackVaryingEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glGetTransformFeedbackVaryingNV + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'i', + '6', + '4', + '_', + 'v', + 0, // glGetTransformFeedbacki64_v + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'i', + '_', + 'v', + 0, // glGetTransformFeedbacki_v + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'i', + 'v', + 0, // glGetTransformFeedbackiv + 'g', + 'l', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'd', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glGetTranslatedShaderSourceANGLE + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glGetUniformBlockIndex + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'i', + 'z', + 'e', + 'E', + 'X', + 'T', + 0, // glGetUniformBufferSizeEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'I', + 'n', + 'd', + 'i', + 'c', + 'e', + 's', + 0, // glGetUniformIndices + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 0, // glGetUniformLocation + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // glGetUniformLocationARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glGetUniformOffsetEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'u', + 'i', + 'v', + 0, // glGetUniformSubroutineuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'd', + 'v', + 0, // glGetUniformdv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 0, // glGetUniformfv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformi64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetUniformi64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 0, // glGetUniformiv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetUniformui64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetUniformui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 0, // glGetUniformuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetUniformuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVariantArrayObjectfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVariantArrayObjectivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'B', + 'o', + 'o', + 'l', + 'e', + 'a', + 'n', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantBooleanvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'F', + 'l', + 'o', + 'a', + 't', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantFloatvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVariantPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 'N', + 'V', + 0, // glGetVaryingLocationNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + '6', + '4', + 'i', + 'v', + 0, // glGetVertexArrayIndexed64iv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'i', + 'v', + 0, // glGetVertexArrayIndexediv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayIntegeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayIntegervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'i', + '_', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayPointeri_vEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexArrayPointervEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'i', + 'v', + 0, // glGetVertexArrayiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVertexAttribArrayObjectfvATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glGetVertexAttribArrayObjectivATI + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'i', + 'v', + 0, // glGetVertexAttribIiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexAttribIivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'u', + 'i', + 'v', + 0, // glGetVertexAttribIuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexAttribIuivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'd', + 'v', + 0, // glGetVertexAttribLdv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glGetVertexAttribLdvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribLi64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribLui64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribLui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 0, // glGetVertexAttribPointerv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribPointervARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribPointervNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'd', + 'v', + 0, // glGetVertexAttribdv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'd', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 0, // glGetVertexAttribfv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 0, // glGetVertexAttribiv + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetVertexAttribivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVertexAttribivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'd', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureStreamdvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'f', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureStreamfvNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureStreamivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideoCaptureivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVideoi64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideoivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glGetVideoui64vNV + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glGetVideouivNV + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 0, // glGetnColorTable + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnColorTableARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetnCompressedTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'm', + 'p', + 'r', + 'e', + 's', + 's', + 'e', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnCompressedTexImageARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetnConvolutionFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'C', + 'o', + 'n', + 'v', + 'o', + 'l', + 'u', + 't', + 'i', + 'o', + 'n', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glGetnConvolutionFilterARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glGetnHistogram + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glGetnHistogramARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'd', + 'v', + 0, // glGetnMapdv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnMapdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetnMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnMapfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'i', + 'v', + 0, // glGetnMapiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'a', + 'p', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnMapivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glGetnMinmax + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'A', + 'R', + 'B', + 0, // glGetnMinmaxARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glGetnPixelMapfv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnPixelMapfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 0, // glGetnPixelMapuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnPixelMapuivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 0, // glGetnPixelMapusv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnPixelMapusvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glGetnPolygonStipple + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnPolygonStippleARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 0, // glGetnSeparableFilter + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glGetnSeparableFilterARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glGetnTexImage + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glGetnTexImageARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'd', + 'v', + 0, // glGetnUniformdv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformdvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 0, // glGetnUniformfv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformfvARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glGetnUniformfvEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'f', + 'v', + 'K', + 'H', + 'R', + 0, // glGetnUniformfvKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformi64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 0, // glGetnUniformiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glGetnUniformivEXT + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'i', + 'v', + 'K', + 'H', + 'R', + 0, // glGetnUniformivKHR + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformui64vARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 0, // glGetnUniformuiv + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glGetnUniformuivARB + 'g', + 'l', + 'G', + 'e', + 't', + 'n', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + 'v', + 'K', + 'H', + 'R', + 0, // glGetnUniformuivKHR + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'b', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorbSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'd', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactordSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'f', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorfSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'i', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactoriSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 's', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorsSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'u', + 'b', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorubSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'u', + 'i', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactoruiSUN + 'g', + 'l', + 'G', + 'l', + 'o', + 'b', + 'a', + 'l', + 'A', + 'l', + 'p', + 'h', + 'a', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'u', + 's', + 'S', + 'U', + 'N', + 0, // glGlobalAlphaFactorusSUN + 'g', + 'l', + 'H', + 'i', + 'n', + 't', + 0, // glHint + 'g', + 'l', + 'H', + 'i', + 'n', + 't', + 'P', + 'G', + 'I', + 0, // glHintPGI + 'g', + 'l', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glHistogram + 'g', + 'l', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glHistogramEXT + 'g', + 'l', + 'I', + 'g', + 'l', + 'o', + 'o', + 'I', + 'n', + 't', + 'e', + 'r', + 'f', + 'a', + 'c', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glIglooInterfaceSGIX + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'H', + 'P', + 0, // glImageTransformParameterfHP + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'H', + 'P', + 0, // glImageTransformParameterfvHP + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'H', + 'P', + 0, // glImageTransformParameteriHP + 'g', + 'l', + 'I', + 'm', + 'a', + 'g', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'H', + 'P', + 0, // glImageTransformParameterivHP + 'g', + 'l', + 'I', + 'm', + 'p', + 'o', + 'r', + 't', + 'S', + 'y', + 'n', + 'c', + 'E', + 'X', + 'T', + 0, // glImportSyncEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glIndexFormatNV + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'E', + 'X', + 'T', + 0, // glIndexFuncEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'M', + 'a', + 's', + 'k', + 0, // glIndexMask + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glIndexMaterialEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glIndexPointer + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glIndexPointerEXT + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glIndexPointerListIBM + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'd', + 0, // glIndexd + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'd', + 'v', + 0, // glIndexdv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'f', + 0, // glIndexf + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'f', + 'v', + 0, // glIndexfv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'i', + 0, // glIndexi + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'i', + 'v', + 0, // glIndexiv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 's', + 0, // glIndexs + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 's', + 'v', + 0, // glIndexsv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'b', + 0, // glIndexub + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'b', + 'v', + 0, // glIndexubv + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glIndexxOES + 'g', + 'l', + 'I', + 'n', + 'd', + 'e', + 'x', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glIndexxvOES + 'g', + 'l', + 'I', + 'n', + 'i', + 't', + 'N', + 'a', + 'm', + 'e', + 's', + 0, // glInitNames + 'g', + 'l', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'C', + 'o', + 'm', + 'p', + 'o', + 'n', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glInsertComponentEXT + 'g', + 'l', + 'I', + 'n', + 's', + 'e', + 'r', + 't', + 'E', + 'v', + 'e', + 'n', + 't', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glInsertEventMarkerEXT + 'g', + 'l', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glInstrumentsBufferSGIX + 'g', + 'l', + 'I', + 'n', + 't', + 'e', + 'r', + 'l', + 'e', + 'a', + 'v', + 'e', + 'd', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glInterleavedArrays + 'g', + 'l', + 'I', + 'n', + 't', + 'e', + 'r', + 'p', + 'o', + 'l', + 'a', + 't', + 'e', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glInterpolatePathsNV + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateBufferData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateBufferSubData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glInvalidateFramebuffer + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateNamedFramebufferData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glInvalidateNamedFramebufferSubData + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'S', + 'u', + 'b', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glInvalidateSubFramebuffer + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glInvalidateTexImage + 'g', + 'l', + 'I', + 'n', + 'v', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + 0, // glInvalidateTexSubImage + 'g', + 'l', + 'I', + 's', + 'A', + 's', + 'y', + 'n', + 'c', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glIsAsyncMarkerSGIX + 'g', + 'l', + 'I', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glIsBuffer + 'g', + 'l', + 'I', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glIsBufferARB + 'g', + 'l', + 'I', + 's', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsBufferResidentNV + 'g', + 'l', + 'I', + 's', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 'L', + 'i', + 's', + 't', + 'N', + 'V', + 0, // glIsCommandListNV + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 0, // glIsEnabled + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glIsEnabledIndexedEXT + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 0, // glIsEnabledi + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 'E', + 'X', + 'T', + 0, // glIsEnablediEXT + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 'N', + 'V', + 0, // glIsEnablediNV + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'i', + 'O', + 'E', + 'S', + 0, // glIsEnablediOES + 'g', + 'l', + 'I', + 's', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsFenceAPPLE + 'g', + 'l', + 'I', + 's', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glIsFenceNV + 'g', + 'l', + 'I', + 's', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glIsFramebuffer + 'g', + 'l', + 'I', + 's', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glIsFramebufferEXT + 'g', + 'l', + 'I', + 's', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glIsFramebufferOES + 'g', + 'l', + 'I', + 's', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glIsImageHandleResidentARB + 'g', + 'l', + 'I', + 's', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsImageHandleResidentNV + 'g', + 'l', + 'I', + 's', + 'L', + 'i', + 's', + 't', + 0, // glIsList + 'g', + 'l', + 'I', + 's', + 'N', + 'a', + 'm', + 'e', + 'A', + 'M', + 'D', + 0, // glIsNameAMD + 'g', + 'l', + 'I', + 's', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsNamedBufferResidentNV + 'g', + 'l', + 'I', + 's', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glIsNamedStringARB + 'g', + 'l', + 'I', + 's', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glIsObjectBufferATI + 'g', + 'l', + 'I', + 's', + 'O', + 'c', + 'c', + 'l', + 'u', + 's', + 'i', + 'o', + 'n', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'N', + 'V', + 0, // glIsOcclusionQueryNV + 'g', + 'l', + 'I', + 's', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glIsPathNV + 'g', + 'l', + 'I', + 's', + 'P', + 'o', + 'i', + 'n', + 't', + 'I', + 'n', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glIsPointInFillPathNV + 'g', + 'l', + 'I', + 's', + 'P', + 'o', + 'i', + 'n', + 't', + 'I', + 'n', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glIsPointInStrokePathNV + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glIsProgram + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glIsProgramARB + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glIsProgramNV + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 0, // glIsProgramPipeline + 'g', + 'l', + 'I', + 's', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'E', + 'X', + 'T', + 0, // glIsProgramPipelineEXT + 'g', + 'l', + 'I', + 's', + 'Q', + 'u', + 'e', + 'r', + 'y', + 0, // glIsQuery + 'g', + 'l', + 'I', + 's', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'A', + 'R', + 'B', + 0, // glIsQueryARB + 'g', + 'l', + 'I', + 's', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'X', + 'T', + 0, // glIsQueryEXT + 'g', + 'l', + 'I', + 's', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glIsRenderbuffer + 'g', + 'l', + 'I', + 's', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glIsRenderbufferEXT + 'g', + 'l', + 'I', + 's', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glIsRenderbufferOES + 'g', + 'l', + 'I', + 's', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 0, // glIsSampler + 'g', + 'l', + 'I', + 's', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 0, // glIsShader + 'g', + 'l', + 'I', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 'N', + 'V', + 0, // glIsStateNV + 'g', + 'l', + 'I', + 's', + 'S', + 'y', + 'n', + 'c', + 0, // glIsSync + 'g', + 'l', + 'I', + 's', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsSyncAPPLE + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glIsTexture + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glIsTextureEXT + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glIsTextureHandleResidentARB + 'g', + 'l', + 'I', + 's', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glIsTextureHandleResidentNV + 'g', + 'l', + 'I', + 's', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glIsTransformFeedback + 'g', + 'l', + 'I', + 's', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glIsTransformFeedbackNV + 'g', + 'l', + 'I', + 's', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glIsVariantEnabledEXT + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 0, // glIsVertexArray + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsVertexArrayAPPLE + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'E', + 'S', + 0, // glIsVertexArrayOES + 'g', + 'l', + 'I', + 's', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glIsVertexAttribEnabledAPPLE + 'g', + 'l', + 'L', + 'a', + 'b', + 'e', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'E', + 'X', + 'T', + 0, // glLabelObjectEXT + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'E', + 'n', + 'v', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glLightEnviSGIX + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 0, // glLightModelf + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'f', + 'v', + 0, // glLightModelfv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 0, // glLightModeli + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'i', + 'v', + 0, // glLightModeliv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 0, // glLightModelx + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 'O', + 'E', + 'S', + 0, // glLightModelxOES + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 'v', + 0, // glLightModelxv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'M', + 'o', + 'd', + 'e', + 'l', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glLightModelxvOES + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 0, // glLightf + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 0, // glLightfv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 0, // glLighti + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 0, // glLightiv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 0, // glLightx + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glLightxOES + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 0, // glLightxv + 'g', + 'l', + 'L', + 'i', + 'g', + 'h', + 't', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glLightxvOES + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glLineStipple + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'W', + 'i', + 'd', + 't', + 'h', + 0, // glLineWidth + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'W', + 'i', + 'd', + 't', + 'h', + 'x', + 0, // glLineWidthx + 'g', + 'l', + 'L', + 'i', + 'n', + 'e', + 'W', + 'i', + 'd', + 't', + 'h', + 'x', + 'O', + 'E', + 'S', + 0, // glLineWidthxOES + 'g', + 'l', + 'L', + 'i', + 'n', + 'k', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glLinkProgram + 'g', + 'l', + 'L', + 'i', + 'n', + 'k', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glLinkProgramARB + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'B', + 'a', + 's', + 'e', + 0, // glListBase + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'D', + 'r', + 'a', + 'w', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'S', + 't', + 'a', + 't', + 'e', + 's', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glListDrawCommandsStatesClientNV + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameterfSGIX + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameterfvSGIX + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameteriSGIX + 'g', + 'l', + 'L', + 'i', + 's', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glListParameterivSGIX + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'I', + 'd', + 'e', + 'n', + 't', + 'i', + 't', + 'y', + 0, // glLoadIdentity + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'I', + 'd', + 'e', + 'n', + 't', + 'i', + 't', + 'y', + 'D', + 'e', + 'f', + 'o', + 'r', + 'm', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'a', + 'p', + 'S', + 'G', + 'I', + 'X', + 0, // glLoadIdentityDeformationMapSGIX + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glLoadMatrixd + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glLoadMatrixf + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 0, // glLoadMatrixx + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glLoadMatrixxOES + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'N', + 'a', + 'm', + 'e', + 0, // glLoadName + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'F', + 'r', + 'o', + 'm', + 'M', + 'o', + 'd', + 'e', + 'l', + 'V', + 'i', + 'e', + 'w', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'O', + 'E', + 'S', + 0, // glLoadPaletteFromModelViewMatrixOES + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'V', + 0, // glLoadProgramNV + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glLoadTransposeMatrixd + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 'A', + 'R', + 'B', + 0, // glLoadTransposeMatrixdARB + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glLoadTransposeMatrixf + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 'A', + 'R', + 'B', + 0, // glLoadTransposeMatrixfARB + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glLoadTransposeMatrixxOES + 'g', + 'l', + 'L', + 'o', + 'c', + 'k', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glLockArraysEXT + 'g', + 'l', + 'L', + 'o', + 'g', + 'i', + 'c', + 'O', + 'p', + 0, // glLogicOp + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeBufferNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeBufferResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeImageHandleNonResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeImageHandleNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeImageHandleResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeImageHandleResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeNamedBufferNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeNamedBufferResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeTextureHandleNonResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'o', + 'n', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeTextureHandleNonResidentNV + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMakeTextureHandleResidentARB + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'N', + 'V', + 0, // glMakeTextureHandleResidentNV + 'g', + 'l', + 'M', + 'a', + 'p', + '1', + 'd', + 0, // glMap1d + 'g', + 'l', + 'M', + 'a', + 'p', + '1', + 'f', + 0, // glMap1f + 'g', + 'l', + 'M', + 'a', + 'p', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glMap1xOES + 'g', + 'l', + 'M', + 'a', + 'p', + '2', + 'd', + 0, // glMap2d + 'g', + 'l', + 'M', + 'a', + 'p', + '2', + 'f', + 0, // glMap2f + 'g', + 'l', + 'M', + 'a', + 'p', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glMap2xOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glMapBuffer + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glMapBufferARB + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glMapBufferOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glMapBufferRange + 'g', + 'l', + 'M', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glMapBufferRangeEXT + 'g', + 'l', + 'M', + 'a', + 'p', + 'C', + 'o', + 'n', + 't', + 'r', + 'o', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 's', + 'N', + 'V', + 0, // glMapControlPointsNV + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '1', + 'd', + 0, // glMapGrid1d + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '1', + 'f', + 0, // glMapGrid1f + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glMapGrid1xOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '2', + 'd', + 0, // glMapGrid2d + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '2', + 'f', + 0, // glMapGrid2f + 'g', + 'l', + 'M', + 'a', + 'p', + 'G', + 'r', + 'i', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glMapGrid2xOES + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glMapNamedBuffer + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMapNamedBufferEXT + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glMapNamedBufferRange + 'g', + 'l', + 'M', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glMapNamedBufferRangeEXT + 'g', + 'l', + 'M', + 'a', + 'p', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glMapObjectBufferATI + 'g', + 'l', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glMapParameterfvNV + 'g', + 'l', + 'M', + 'a', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glMapParameterivNV + 'g', + 'l', + 'M', + 'a', + 'p', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glMapTexture2DINTEL + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib1dAPPLE + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib1fAPPLE + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib2dAPPLE + 'g', + 'l', + 'M', + 'a', + 'p', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMapVertexAttrib2fAPPLE + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 0, // glMaterialf + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'f', + 'v', + 0, // glMaterialfv + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 0, // glMateriali + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'i', + 'v', + 0, // glMaterialiv + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 0, // glMaterialx + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'O', + 'E', + 'S', + 0, // glMaterialxOES + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 0, // glMaterialxv + 'g', + 'l', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMaterialxvOES + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'F', + 'r', + 'u', + 's', + 't', + 'u', + 'm', + 'E', + 'X', + 'T', + 0, // glMatrixFrustumEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glMatrixIndexPointerARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glMatrixIndexPointerOES + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glMatrixIndexubvARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMatrixIndexuivARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'I', + 'n', + 'd', + 'e', + 'x', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMatrixIndexusvARB + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + '3', + 'x', + '2', + 'f', + 'N', + 'V', + 0, // glMatrixLoad3x2fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixLoad3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'I', + 'd', + 'e', + 'n', + 't', + 'i', + 't', + 'y', + 'E', + 'X', + 'T', + 0, // glMatrixLoadIdentityEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixLoadTranspose3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixLoadTransposedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixLoadTransposefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixLoaddEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'L', + 'o', + 'a', + 'd', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixLoadfEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'o', + 'd', + 'e', + 0, // glMatrixMode + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + '3', + 'x', + '2', + 'f', + 'N', + 'V', + 0, // glMatrixMult3x2fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixMult3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + '3', + 'x', + '3', + 'f', + 'N', + 'V', + 0, // glMatrixMultTranspose3x3fNV + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixMultTransposedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixMultTransposefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixMultdEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'M', + 'u', + 'l', + 't', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixMultfEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'O', + 'r', + 't', + 'h', + 'o', + 'E', + 'X', + 'T', + 0, // glMatrixOrthoEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'P', + 'o', + 'p', + 'E', + 'X', + 'T', + 0, // glMatrixPopEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'P', + 'u', + 's', + 'h', + 'E', + 'X', + 'T', + 0, // glMatrixPushEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixRotatedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixRotatefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'S', + 'c', + 'a', + 'l', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixScaledEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'S', + 'c', + 'a', + 'l', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixScalefEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glMatrixTranslatedEXT + 'g', + 'l', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'f', + 'E', + 'X', + 'T', + 0, // glMatrixTranslatefEXT + 'g', + 'l', + 'M', + 'a', + 'x', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'r', + 'T', + 'h', + 'r', + 'e', + 'a', + 'd', + 's', + 'A', + 'R', + 'B', + 0, // glMaxShaderCompilerThreadsARB + 'g', + 'l', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 0, // glMemoryBarrier + 'g', + 'l', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'B', + 'y', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 0, // glMemoryBarrierByRegion + 'g', + 'l', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMemoryBarrierEXT + 'g', + 'l', + 'M', + 'i', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'i', + 'n', + 'g', + 0, // glMinSampleShading + 'g', + 'l', + 'M', + 'i', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glMinSampleShadingARB + 'g', + 'l', + 'M', + 'i', + 'n', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'S', + 'h', + 'a', + 'd', + 'i', + 'n', + 'g', + 'O', + 'E', + 'S', + 0, // glMinSampleShadingOES + 'g', + 'l', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glMinmax + 'g', + 'l', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'E', + 'X', + 'T', + 0, // glMinmaxEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glMultMatrixd + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glMultMatrixf + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 0, // glMultMatrixx + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glMultMatrixxOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 0, // glMultTransposeMatrixd + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'd', + 'A', + 'R', + 'B', + 0, // glMultTransposeMatrixdARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 0, // glMultTransposeMatrixf + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'f', + 'A', + 'R', + 'B', + 0, // glMultTransposeMatrixfARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'o', + 's', + 'e', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glMultTransposeMatrixxOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 0, // glMultiDrawArrays + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glMultiDrawArraysEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glMultiDrawArraysIndirect + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'A', + 'M', + 'D', + 0, // glMultiDrawArraysIndirectAMD + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glMultiDrawArraysIndirectBindlessCountNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glMultiDrawArraysIndirectBindlessNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'C', + 'o', + 'u', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMultiDrawArraysIndirectCountARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'E', + 'X', + 'T', + 0, // glMultiDrawArraysIndirectEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMultiDrawElementArrayAPPLE + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 0, // glMultiDrawElements + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glMultiDrawElementsBaseVertex + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glMultiDrawElementsBaseVertexEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'B', + 'a', + 's', + 'e', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiDrawElementsBaseVertexOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'E', + 'X', + 'T', + 0, // glMultiDrawElementsEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glMultiDrawElementsIndirect + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'A', + 'M', + 'D', + 0, // glMultiDrawElementsIndirectAMD + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glMultiDrawElementsIndirectBindlessCountNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'B', + 'i', + 'n', + 'd', + 'l', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glMultiDrawElementsIndirectBindlessNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'C', + 'o', + 'u', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glMultiDrawElementsIndirectCountARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'n', + 'd', + 'i', + 'r', + 'e', + 'c', + 't', + 'E', + 'X', + 'T', + 0, // glMultiDrawElementsIndirectEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'D', + 'r', + 'a', + 'w', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glMultiDrawRangeElementArrayAPPLE + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'M', + 'o', + 'd', + 'e', + 'D', + 'r', + 'a', + 'w', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'I', + 'B', + 'M', + 0, // glMultiModeDrawArraysIBM + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'M', + 'o', + 'd', + 'e', + 'D', + 'r', + 'a', + 'w', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 's', + 'I', + 'B', + 'M', + 0, // glMultiModeDrawElementsIBM + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMultiTexBufferEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 0, // glMultiTexCoord1d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 0, // glMultiTexCoord1dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 0, // glMultiTexCoord1f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 0, // glMultiTexCoord1fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord1hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord1hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 0, // glMultiTexCoord1i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'v', + 0, // glMultiTexCoord1iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 0, // glMultiTexCoord1s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'v', + 0, // glMultiTexCoord1sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord1svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord1xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 0, // glMultiTexCoord2d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 0, // glMultiTexCoord2dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 0, // glMultiTexCoord2f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 0, // glMultiTexCoord2fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord2hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord2hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 0, // glMultiTexCoord2i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'v', + 0, // glMultiTexCoord2iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 0, // glMultiTexCoord2s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'v', + 0, // glMultiTexCoord2sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord2svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord2xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 0, // glMultiTexCoord3d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'v', + 0, // glMultiTexCoord3dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 0, // glMultiTexCoord3f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'v', + 0, // glMultiTexCoord3fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord3hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord3hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 0, // glMultiTexCoord3i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'v', + 0, // glMultiTexCoord3iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 0, // glMultiTexCoord3s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'v', + 0, // glMultiTexCoord3sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord3svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord3xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4bOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4bvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 0, // glMultiTexCoord4d + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4dARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'v', + 0, // glMultiTexCoord4dv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4dvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 0, // glMultiTexCoord4f + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4fARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'v', + 0, // glMultiTexCoord4fv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4fvARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'N', + 'V', + 0, // glMultiTexCoord4hNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glMultiTexCoord4hvNV + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 0, // glMultiTexCoord4i + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4iARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'v', + 0, // glMultiTexCoord4iv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4ivARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 0, // glMultiTexCoord4s + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4sARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'v', + 0, // glMultiTexCoord4sv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glMultiTexCoord4svARB + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 0, // glMultiTexCoord4x + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4xOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glMultiTexCoord4xvOES + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 0, // glMultiTexCoordP1ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP1uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 0, // glMultiTexCoordP2ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP2uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 0, // glMultiTexCoordP3ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP3uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 0, // glMultiTexCoordP4ui + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glMultiTexCoordP4uiv + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMultiTexCoordPointerEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'E', + 'X', + 'T', + 0, // glMultiTexEnvfEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexEnvfvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'E', + 'X', + 'T', + 0, // glMultiTexEnviEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexEnvivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'E', + 'X', + 'T', + 0, // glMultiTexGendEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexGendvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'E', + 'X', + 'T', + 0, // glMultiTexGenfEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexGenfvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'E', + 'X', + 'T', + 0, // glMultiTexGeniEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexGenivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexImage1DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexImage2DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexImage3DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterIivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterIuivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterfEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterfvEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glMultiTexParameteriEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glMultiTexParameterivEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glMultiTexRenderbufferEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexSubImage1DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexSubImage2DEXT + 'g', + 'l', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glMultiTexSubImage3DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 0, // glNamedBufferData + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glNamedBufferDataEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glNamedBufferPageCommitmentARB + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glNamedBufferPageCommitmentEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glNamedBufferStorage + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedBufferStorageEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 0, // glNamedBufferSubData + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glNamedBufferSubDataEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'E', + 'X', + 'T', + 0, // glNamedCopyBufferSubDataEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glNamedFramebufferDrawBuffer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'r', + 'a', + 'w', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glNamedFramebufferDrawBuffers + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glNamedFramebufferParameteri + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferParameteriEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glNamedFramebufferReadBuffer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glNamedFramebufferRenderbuffer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferRenderbufferEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glNamedFramebufferSampleLocationsfvARB + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'L', + 'o', + 'c', + 'a', + 't', + 'i', + 'o', + 'n', + 's', + 'f', + 'v', + 'N', + 'V', + 0, // glNamedFramebufferSampleLocationsfvNV + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 0, // glNamedFramebufferTexture + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTexture1DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTexture2DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTexture3DEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTextureEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'F', + 'a', + 'c', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTextureFaceEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 0, // glNamedFramebufferTextureLayer + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glNamedFramebufferTextureLayerEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4dEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4dvEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4fEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameter4fvEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4iEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4ivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4uiEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameterI4uivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParameters4fvEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParametersI4ivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glNamedProgramLocalParametersI4uivEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glNamedProgramStringEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glNamedRenderbufferStorage + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedRenderbufferStorageEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glNamedRenderbufferStorageMultisample + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedRenderbufferStorageMultisampleCoverageEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glNamedRenderbufferStorageMultisampleEXT + 'g', + 'l', + 'N', + 'a', + 'm', + 'e', + 'd', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glNamedStringARB + 'g', + 'l', + 'N', + 'e', + 'w', + 'L', + 'i', + 's', + 't', + 0, // glNewList + 'g', + 'l', + 'N', + 'e', + 'w', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glNewObjectBufferATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 0, // glNormal3b + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'b', + 'v', + 0, // glNormal3bv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 0, // glNormal3d + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'd', + 'v', + 0, // glNormal3dv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 0, // glNormal3f + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glNormal3fVertex3fSUN + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glNormal3fVertex3fvSUN + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'v', + 0, // glNormal3fv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'h', + 'N', + 'V', + 0, // glNormal3hNV + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glNormal3hvNV + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 0, // glNormal3i + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'i', + 'v', + 0, // glNormal3iv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 0, // glNormal3s + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 's', + 'v', + 0, // glNormal3sv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'x', + 0, // glNormal3x + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glNormal3xOES + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glNormal3xvOES + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glNormalFormatNV + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + '3', + 'u', + 'i', + 0, // glNormalP3ui + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glNormalP3uiv + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glNormalPointer + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glNormalPointerEXT + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glNormalPointerListIBM + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glNormalPointervINTEL + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'b', + 'A', + 'T', + 'I', + 0, // glNormalStream3bATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'b', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3bvATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'A', + 'T', + 'I', + 0, // glNormalStream3dATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3dvATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'A', + 'T', + 'I', + 0, // glNormalStream3fATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3fvATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'A', + 'T', + 'I', + 0, // glNormalStream3iATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3ivATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'A', + 'T', + 'I', + 0, // glNormalStream3sATI + 'g', + 'l', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glNormalStream3svATI + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glObjectLabel + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glObjectLabelKHR + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 0, // glObjectPtrLabel + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 't', + 'r', + 'L', + 'a', + 'b', + 'e', + 'l', + 'K', + 'H', + 'R', + 0, // glObjectPtrLabelKHR + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'u', + 'r', + 'g', + 'e', + 'a', + 'b', + 'l', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glObjectPurgeableAPPLE + 'g', + 'l', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'U', + 'n', + 'p', + 'u', + 'r', + 'g', + 'e', + 'a', + 'b', + 'l', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glObjectUnpurgeableAPPLE + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 0, // glOrtho + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'f', + 0, // glOrthof + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'f', + 'O', + 'E', + 'S', + 0, // glOrthofOES + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'x', + 0, // glOrthox + 'g', + 'l', + 'O', + 'r', + 't', + 'h', + 'o', + 'x', + 'O', + 'E', + 'S', + 0, // glOrthoxOES + 'g', + 'l', + 'P', + 'N', + 'T', + 'r', + 'i', + 'a', + 'n', + 'g', + 'l', + 'e', + 's', + 'f', + 'A', + 'T', + 'I', + 0, // glPNTrianglesfATI + 'g', + 'l', + 'P', + 'N', + 'T', + 'r', + 'i', + 'a', + 'n', + 'g', + 'l', + 'e', + 's', + 'i', + 'A', + 'T', + 'I', + 0, // glPNTrianglesiATI + 'g', + 'l', + 'P', + 'a', + 's', + 's', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'A', + 'T', + 'I', + 0, // glPassTexCoordATI + 'g', + 'l', + 'P', + 'a', + 's', + 's', + 'T', + 'h', + 'r', + 'o', + 'u', + 'g', + 'h', + 0, // glPassThrough + 'g', + 'l', + 'P', + 'a', + 's', + 's', + 'T', + 'h', + 'r', + 'o', + 'u', + 'g', + 'h', + 'x', + 'O', + 'E', + 'S', + 0, // glPassThroughxOES + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glPatchParameterfv + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glPatchParameteri + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glPatchParameteriEXT + 'g', + 'l', + 'P', + 'a', + 't', + 'c', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'O', + 'E', + 'S', + 0, // glPatchParameteriOES + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'l', + 'o', + 'r', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glPathColorGenNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glPathCommandsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'o', + 'r', + 'd', + 's', + 'N', + 'V', + 0, // glPathCoordsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'C', + 'o', + 'v', + 'e', + 'r', + 'D', + 'e', + 'p', + 't', + 'h', + 'F', + 'u', + 'n', + 'c', + 'N', + 'V', + 0, // glPathCoverDepthFuncNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'D', + 'a', + 's', + 'h', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glPathDashArrayNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'F', + 'o', + 'g', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glPathFogGenNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 'I', + 'n', + 'd', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glPathGlyphIndexArrayNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 'I', + 'n', + 'd', + 'e', + 'x', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glPathGlyphIndexRangeNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glPathGlyphRangeNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'G', + 'l', + 'y', + 'p', + 'h', + 's', + 'N', + 'V', + 0, // glPathGlyphsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'G', + 'l', + 'y', + 'p', + 'h', + 'I', + 'n', + 'd', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'V', + 0, // glPathMemoryGlyphIndexArrayNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'N', + 'V', + 0, // glPathParameterfNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glPathParameterfvNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glPathParameteriNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glPathParameterivNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'D', + 'e', + 'p', + 't', + 'h', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'N', + 'V', + 0, // glPathStencilDepthOffsetNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 'N', + 'V', + 0, // glPathStencilFuncNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'N', + 'V', + 0, // glPathStringNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 'u', + 'b', + 'C', + 'o', + 'm', + 'm', + 'a', + 'n', + 'd', + 's', + 'N', + 'V', + 0, // glPathSubCommandsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'S', + 'u', + 'b', + 'C', + 'o', + 'o', + 'r', + 'd', + 's', + 'N', + 'V', + 0, // glPathSubCoordsNV + 'g', + 'l', + 'P', + 'a', + 't', + 'h', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glPathTexGenNV + 'g', + 'l', + 'P', + 'a', + 'u', + 's', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glPauseTransformFeedback + 'g', + 'l', + 'P', + 'a', + 'u', + 's', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glPauseTransformFeedbackNV + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'D', + 'a', + 't', + 'a', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glPixelDataRangeNV + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'f', + 'v', + 0, // glPixelMapfv + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 'i', + 'v', + 0, // glPixelMapuiv + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'u', + 's', + 'v', + 0, // glPixelMapusv + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'M', + 'a', + 'p', + 'x', + 0, // glPixelMapx + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'S', + 't', + 'o', + 'r', + 'e', + 'f', + 0, // glPixelStoref + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'S', + 't', + 'o', + 'r', + 'e', + 'i', + 0, // glPixelStorei + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'S', + 't', + 'o', + 'r', + 'e', + 'x', + 0, // glPixelStorex + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameterfSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameterfvSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameteriSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glPixelTexGenParameterivSGIS + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'S', + 'G', + 'I', + 'X', + 0, // glPixelTexGenSGIX + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'e', + 'r', + 'f', + 0, // glPixelTransferf + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'e', + 'r', + 'i', + 0, // glPixelTransferi + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glPixelTransferxOES + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameterfEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameterfvEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameteriEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glPixelTransformParameterivEXT + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'Z', + 'o', + 'o', + 'm', + 0, // glPixelZoom + 'g', + 'l', + 'P', + 'i', + 'x', + 'e', + 'l', + 'Z', + 'o', + 'o', + 'm', + 'x', + 'O', + 'E', + 'S', + 0, // glPixelZoomxOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'A', + 'l', + 'o', + 'n', + 'g', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glPointAlongPathNV + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glPointParameterf + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'A', + 'R', + 'B', + 0, // glPointParameterfARB + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glPointParameterfEXT + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'S', + 0, // glPointParameterfSGIS + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glPointParameterfv + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glPointParameterfvARB + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glPointParameterfvEXT + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'S', + 0, // glPointParameterfvSGIS + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glPointParameteri + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'N', + 'V', + 0, // glPointParameteriNV + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glPointParameteriv + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glPointParameterivNV + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 0, // glPointParameterx + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glPointParameterxOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 0, // glPointParameterxv + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glPointParameterxvOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 0, // glPointSize + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glPointSizePointerOES + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 'x', + 0, // glPointSizex + 'g', + 'l', + 'P', + 'o', + 'i', + 'n', + 't', + 'S', + 'i', + 'z', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glPointSizexOES + 'g', + 'l', + 'P', + 'o', + 'l', + 'l', + 'A', + 's', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 'X', + 0, // glPollAsyncSGIX + 'g', + 'l', + 'P', + 'o', + 'l', + 'l', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glPollInstrumentsSGIX + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'M', + 'o', + 'd', + 'e', + 0, // glPolygonMode + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'M', + 'o', + 'd', + 'e', + 'N', + 'V', + 0, // glPolygonModeNV + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 0, // glPolygonOffset + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'C', + 'l', + 'a', + 'm', + 'p', + 'E', + 'X', + 'T', + 0, // glPolygonOffsetClampEXT + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glPolygonOffsetEXT + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'x', + 0, // glPolygonOffsetx + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glPolygonOffsetxOES + 'g', + 'l', + 'P', + 'o', + 'l', + 'y', + 'g', + 'o', + 'n', + 'S', + 't', + 'i', + 'p', + 'p', + 'l', + 'e', + 0, // glPolygonStipple + 'g', + 'l', + 'P', + 'o', + 'p', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPopAttrib + 'g', + 'l', + 'P', + 'o', + 'p', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPopClientAttrib + 'g', + 'l', + 'P', + 'o', + 'p', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 0, // glPopDebugGroup + 'g', + 'l', + 'P', + 'o', + 'p', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 'K', + 'H', + 'R', + 0, // glPopDebugGroupKHR + 'g', + 'l', + 'P', + 'o', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glPopGroupMarkerEXT + 'g', + 'l', + 'P', + 'o', + 'p', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 0, // glPopMatrix + 'g', + 'l', + 'P', + 'o', + 'p', + 'N', + 'a', + 'm', + 'e', + 0, // glPopName + 'g', + 'l', + 'P', + 'r', + 'e', + 's', + 'e', + 'n', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'D', + 'u', + 'a', + 'l', + 'F', + 'i', + 'l', + 'l', + 'N', + 'V', + 0, // glPresentFrameDualFillNV + 'g', + 'l', + 'P', + 'r', + 'e', + 's', + 'e', + 'n', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'K', + 'e', + 'y', + 'e', + 'd', + 'N', + 'V', + 0, // glPresentFrameKeyedNV + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 0, // glPrimitiveBoundingBox + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 'A', + 'R', + 'B', + 0, // glPrimitiveBoundingBoxARB + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 'E', + 'X', + 'T', + 0, // glPrimitiveBoundingBoxEXT + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'B', + 'o', + 'u', + 'n', + 'd', + 'i', + 'n', + 'g', + 'B', + 'o', + 'x', + 'O', + 'E', + 'S', + 0, // glPrimitiveBoundingBoxOES + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'R', + 'e', + 's', + 't', + 'a', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 0, // glPrimitiveRestartIndex + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'R', + 'e', + 's', + 't', + 'a', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'N', + 'V', + 0, // glPrimitiveRestartIndexNV + 'g', + 'l', + 'P', + 'r', + 'i', + 'm', + 'i', + 't', + 'i', + 'v', + 'e', + 'R', + 'e', + 's', + 't', + 'a', + 'r', + 't', + 'N', + 'V', + 0, // glPrimitiveRestartNV + 'g', + 'l', + 'P', + 'r', + 'i', + 'o', + 'r', + 'i', + 't', + 'i', + 'z', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 0, // glPrioritizeTextures + 'g', + 'l', + 'P', + 'r', + 'i', + 'o', + 'r', + 'i', + 't', + 'i', + 'z', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glPrioritizeTexturesEXT + 'g', + 'l', + 'P', + 'r', + 'i', + 'o', + 'r', + 'i', + 't', + 'i', + 'z', + 'e', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 's', + 'x', + 'O', + 'E', + 'S', + 0, // glPrioritizeTexturesxOES + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 0, // glProgramBinary + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 'O', + 'E', + 'S', + 0, // glProgramBinaryOES + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramBufferParametersIivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramBufferParametersIuivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramBufferParametersfvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4dARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4dvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4fARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramEnvParameter4fvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'N', + 'V', + 0, // glProgramEnvParameterI4iNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParameterI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'N', + 'V', + 0, // glProgramEnvParameterI4uiNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParameterI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramEnvParameters4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParametersI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'n', + 'v', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramEnvParametersI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4dARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4dvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4fARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramLocalParameter4fvARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'N', + 'V', + 0, // glProgramLocalParameterI4iNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParameterI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'N', + 'V', + 0, // glProgramLocalParameterI4uiNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParameterI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramLocalParameters4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParametersI4ivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'L', + 'o', + 'c', + 'a', + 'l', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '4', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramLocalParametersI4uivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'N', + 'V', + 0, // glProgramNamedParameter4dNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glProgramNamedParameter4dvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'N', + 'V', + 0, // glProgramNamedParameter4fNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'N', + 'a', + 'm', + 'e', + 'd', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramNamedParameter4fvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'N', + 'V', + 0, // glProgramParameter4dNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glProgramParameter4dvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'N', + 'V', + 0, // glProgramParameter4fNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramParameter4fvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glProgramParameteri + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'R', + 'B', + 0, // glProgramParameteriARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramParameteriEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glProgramParameters4dvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glProgramParameters4fvNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'a', + 't', + 'h', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'I', + 'n', + 'p', + 'u', + 't', + 'G', + 'e', + 'n', + 'N', + 'V', + 0, // glProgramPathFragmentInputGenNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // glProgramStringARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'u', + 'i', + 'v', + 'N', + 'V', + 0, // glProgramSubroutineParametersuivNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 0, // glProgramUniform1d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform1dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'v', + 0, // glProgramUniform1dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 0, // glProgramUniform1f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform1fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 0, // glProgramUniform1fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 0, // glProgramUniform1i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform1i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform1i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform1i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform1i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform1iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 0, // glProgramUniform1iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 0, // glProgramUniform1ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform1ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform1ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform1ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform1ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform1uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 0, // glProgramUniform1uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform1uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 0, // glProgramUniform2d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform2dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'v', + 0, // glProgramUniform2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 0, // glProgramUniform2f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform2fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 0, // glProgramUniform2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 0, // glProgramUniform2i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform2i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform2i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform2i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform2i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform2iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 0, // glProgramUniform2iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 0, // glProgramUniform2ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform2ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform2ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform2ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform2ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform2uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 0, // glProgramUniform2uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform2uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 0, // glProgramUniform3d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform3dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'v', + 0, // glProgramUniform3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 0, // glProgramUniform3f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform3fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 0, // glProgramUniform3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 0, // glProgramUniform3i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform3i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform3i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform3i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform3i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform3iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 0, // glProgramUniform3iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 0, // glProgramUniform3ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform3ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform3ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform3ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform3ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform3uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 0, // glProgramUniform3uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform3uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 0, // glProgramUniform4d + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'E', + 'X', + 'T', + 0, // glProgramUniform4dEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'v', + 0, // glProgramUniform4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 0, // glProgramUniform4f + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'E', + 'X', + 'T', + 0, // glProgramUniform4fEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 0, // glProgramUniform4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 0, // glProgramUniform4i + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform4i64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform4i64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform4i64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform4i64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform4iEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 0, // glProgramUniform4iv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4ivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 0, // glProgramUniform4ui + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniform4ui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniform4ui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniform4ui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniform4ui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glProgramUniform4uiEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 0, // glProgramUniform4uiv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniform4uivEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glProgramUniformHandleui64ARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniformHandleui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glProgramUniformHandleui64vARB + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniformHandleui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'd', + 'v', + 0, // glProgramUniformMatrix2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 0, // glProgramUniformMatrix2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'd', + 'v', + 0, // glProgramUniformMatrix2x3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 0, // glProgramUniformMatrix2x3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'd', + 'v', + 0, // glProgramUniformMatrix2x4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 0, // glProgramUniformMatrix2x4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix2x4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'd', + 'v', + 0, // glProgramUniformMatrix3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 0, // glProgramUniformMatrix3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'd', + 'v', + 0, // glProgramUniformMatrix3x2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 0, // glProgramUniformMatrix3x2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'd', + 'v', + 0, // glProgramUniformMatrix3x4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 0, // glProgramUniformMatrix3x4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix3x4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'd', + 'v', + 0, // glProgramUniformMatrix4dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 0, // glProgramUniformMatrix4fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'd', + 'v', + 0, // glProgramUniformMatrix4x2dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x2dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 0, // glProgramUniformMatrix4x2fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x2fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'd', + 'v', + 0, // glProgramUniformMatrix4x3dv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x3dvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 0, // glProgramUniformMatrix4x3fv + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glProgramUniformMatrix4x3fvEXT + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glProgramUniformui64NV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glProgramUniformui64vNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'L', + 'i', + 'm', + 'i', + 't', + 'N', + 'V', + 0, // glProgramVertexLimitNV + 'g', + 'l', + 'P', + 'r', + 'o', + 'v', + 'o', + 'k', + 'i', + 'n', + 'g', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 0, // glProvokingVertex + 'g', + 'l', + 'P', + 'r', + 'o', + 'v', + 'o', + 'k', + 'i', + 'n', + 'g', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'E', + 'X', + 'T', + 0, // glProvokingVertexEXT + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPushAttrib + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glPushClientAttrib + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'e', + 'f', + 'a', + 'u', + 'l', + 't', + 'E', + 'X', + 'T', + 0, // glPushClientAttribDefaultEXT + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 0, // glPushDebugGroup + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'D', + 'e', + 'b', + 'u', + 'g', + 'G', + 'r', + 'o', + 'u', + 'p', + 'K', + 'H', + 'R', + 0, // glPushDebugGroupKHR + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'G', + 'r', + 'o', + 'u', + 'p', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glPushGroupMarkerEXT + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 0, // glPushMatrix + 'g', + 'l', + 'P', + 'u', + 's', + 'h', + 'N', + 'a', + 'm', + 'e', + 0, // glPushName + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 0, // glQueryCounter + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glQueryCounterEXT + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'x', + 'O', + 'E', + 'S', + 0, // glQueryMatrixxOES + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'u', + 'i', + 'A', + 'M', + 'D', + 0, // glQueryObjectParameteruiAMD + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'd', + 0, // glRasterPos2d + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 0, // glRasterPos2dv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'f', + 0, // glRasterPos2f + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 0, // glRasterPos2fv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'i', + 0, // glRasterPos2i + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 0, // glRasterPos2iv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 's', + 0, // glRasterPos2s + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 0, // glRasterPos2sv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glRasterPos2xOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRasterPos2xvOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'd', + 0, // glRasterPos3d + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 0, // glRasterPos3dv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'f', + 0, // glRasterPos3f + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 0, // glRasterPos3fv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'i', + 0, // glRasterPos3i + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 0, // glRasterPos3iv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 's', + 0, // glRasterPos3s + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 0, // glRasterPos3sv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glRasterPos3xOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRasterPos3xvOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'd', + 0, // glRasterPos4d + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'd', + 'v', + 0, // glRasterPos4dv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'f', + 0, // glRasterPos4f + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'f', + 'v', + 0, // glRasterPos4fv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'i', + 0, // glRasterPos4i + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'i', + 'v', + 0, // glRasterPos4iv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 's', + 0, // glRasterPos4s + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 's', + 'v', + 0, // glRasterPos4sv + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glRasterPos4xOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'P', + 'o', + 's', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRasterPos4xvOES + 'g', + 'l', + 'R', + 'a', + 's', + 't', + 'e', + 'r', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glRasterSamplesEXT + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glReadBuffer + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'E', + 'X', + 'T', + 0, // glReadBufferIndexedEXT + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glReadBufferNV + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glReadInstrumentsSGIX + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glReadPixels + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 0, // glReadnPixels + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 'A', + 'R', + 'B', + 0, // glReadnPixelsARB + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 'E', + 'X', + 'T', + 0, // glReadnPixelsEXT + 'g', + 'l', + 'R', + 'e', + 'a', + 'd', + 'n', + 'P', + 'i', + 'x', + 'e', + 'l', + 's', + 'K', + 'H', + 'R', + 0, // glReadnPixelsKHR + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'd', + 0, // glRectd + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'd', + 'v', + 0, // glRectdv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'f', + 0, // glRectf + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'f', + 'v', + 0, // glRectfv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'i', + 0, // glRecti + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'i', + 'v', + 0, // glRectiv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 's', + 0, // glRects + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 's', + 'v', + 0, // glRectsv + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'x', + 'O', + 'E', + 'S', + 0, // glRectxOES + 'g', + 'l', + 'R', + 'e', + 'c', + 't', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glRectxvOES + 'g', + 'l', + 'R', + 'e', + 'f', + 'e', + 'r', + 'e', + 'n', + 'c', + 'e', + 'P', + 'l', + 'a', + 'n', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glReferencePlaneSGIX + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'C', + 'o', + 'm', + 'p', + 'i', + 'l', + 'e', + 'r', + 0, // glReleaseShaderCompiler + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'M', + 'o', + 'd', + 'e', + 0, // glRenderMode + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 0, // glRenderbufferStorage + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glRenderbufferStorageEXT + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glRenderbufferStorageMultisample + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glRenderbufferStorageMultisampleANGLE + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glRenderbufferStorageMultisampleAPPLE + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glRenderbufferStorageMultisampleCoverageNV + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glRenderbufferStorageMultisampleEXT + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'I', + 'M', + 'G', + 0, // glRenderbufferStorageMultisampleIMG + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'N', + 'V', + 0, // glRenderbufferStorageMultisampleNV + 'g', + 'l', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'O', + 'E', + 'S', + 0, // glRenderbufferStorageOES + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'S', + 'U', + 'N', + 0, // glReplacementCodePointerSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'b', + 'S', + 'U', + 'N', + 0, // glReplacementCodeubSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'b', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeubvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4ubVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiColor4ubVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiTexCoord2fVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiVertex3fSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuiVertex3fvSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 'i', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeuivSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 's', + 'S', + 'U', + 'N', + 0, // glReplacementCodeusSUN + 'g', + 'l', + 'R', + 'e', + 'p', + 'l', + 'a', + 'c', + 'e', + 'm', + 'e', + 'n', + 't', + 'C', + 'o', + 'd', + 'e', + 'u', + 's', + 'v', + 'S', + 'U', + 'N', + 0, // glReplacementCodeusvSUN + 'g', + 'l', + 'R', + 'e', + 'q', + 'u', + 'e', + 's', + 't', + 'R', + 'e', + 's', + 'i', + 'd', + 'e', + 'n', + 't', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 's', + 'N', + 'V', + 0, // glRequestResidentProgramsNV + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glResetHistogram + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'H', + 'i', + 's', + 't', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glResetHistogramEXT + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 0, // glResetMinmax + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'M', + 'i', + 'n', + 'm', + 'a', + 'x', + 'E', + 'X', + 'T', + 0, // glResetMinmaxEXT + 'g', + 'l', + 'R', + 'e', + 's', + 'i', + 'z', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glResizeBuffersMESA + 'g', + 'l', + 'R', + 'e', + 's', + 'o', + 'l', + 'v', + 'e', + 'D', + 'e', + 'p', + 't', + 'h', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'N', + 'V', + 0, // glResolveDepthValuesNV + 'g', + 'l', + 'R', + 'e', + 's', + 'o', + 'l', + 'v', + 'e', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glResolveMultisampleFramebufferAPPLE + 'g', + 'l', + 'R', + 'e', + 's', + 'u', + 'm', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 0, // glResumeTransformFeedback + 'g', + 'l', + 'R', + 'e', + 's', + 'u', + 'm', + 'e', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'N', + 'V', + 0, // glResumeTransformFeedbackNV + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'd', + 0, // glRotated + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'f', + 0, // glRotatef + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'x', + 0, // glRotatex + 'g', + 'l', + 'R', + 'o', + 't', + 'a', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glRotatexOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 0, // glSampleCoverage + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // glSampleCoverageARB + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'x', + 0, // glSampleCoveragex + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glSampleCoveragexOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 'p', + 'A', + 'T', + 'I', + 0, // glSampleMapATI + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'E', + 'X', + 'T', + 0, // glSampleMaskEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'N', + 'V', + 0, // glSampleMaskIndexedNV + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'S', + 'G', + 'I', + 'S', + 0, // glSampleMaskSGIS + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'M', + 'a', + 's', + 'k', + 'i', + 0, // glSampleMaski + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'P', + 'a', + 't', + 't', + 'e', + 'r', + 'n', + 'E', + 'X', + 'T', + 0, // glSamplePatternEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'P', + 'a', + 't', + 't', + 'e', + 'r', + 'n', + 'S', + 'G', + 'I', + 'S', + 0, // glSamplePatternSGIS + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glSamplerParameterIiv + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSamplerParameterIivEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glSamplerParameterIivOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glSamplerParameterIuiv + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSamplerParameterIuivEXT + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glSamplerParameterIuivOES + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glSamplerParameterf + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glSamplerParameterfv + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glSamplerParameteri + 'g', + 'l', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'r', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glSamplerParameteriv + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'd', + 0, // glScaled + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'f', + 0, // glScalef + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'x', + 0, // glScalex + 'g', + 'l', + 'S', + 'c', + 'a', + 'l', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glScalexOES + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 0, // glScissor + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 0, // glScissorArrayv + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 'N', + 'V', + 0, // glScissorArrayvNV + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 0, // glScissorIndexed + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'N', + 'V', + 0, // glScissorIndexedNV + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 0, // glScissorIndexedv + 'g', + 'l', + 'S', + 'c', + 'i', + 's', + 's', + 'o', + 'r', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'v', + 'N', + 'V', + 0, // glScissorIndexedvNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 0, // glSecondaryColor3b + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3bEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'v', + 0, // glSecondaryColor3bv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3bvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 0, // glSecondaryColor3d + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3dEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'v', + 0, // glSecondaryColor3dv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3dvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 0, // glSecondaryColor3f + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3fEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'v', + 0, // glSecondaryColor3fv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3fvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'N', + 'V', + 0, // glSecondaryColor3hNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glSecondaryColor3hvNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 0, // glSecondaryColor3i + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3iEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'v', + 0, // glSecondaryColor3iv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3ivEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 0, // glSecondaryColor3s + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3sEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'v', + 0, // glSecondaryColor3sv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3svEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 0, // glSecondaryColor3ub + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3ubEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'v', + 0, // glSecondaryColor3ubv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3ubvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 0, // glSecondaryColor3ui + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3uiEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'v', + 0, // glSecondaryColor3uiv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3uivEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 0, // glSecondaryColor3us + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3usEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'v', + 0, // glSecondaryColor3usv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'u', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glSecondaryColor3usvEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glSecondaryColorFormatNV + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 0, // glSecondaryColorP3ui + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glSecondaryColorP3uiv + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glSecondaryColorPointer + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glSecondaryColorPointerEXT + 'g', + 'l', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glSecondaryColorPointerListIBM + 'g', + 'l', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glSelectBuffer + 'g', + 'l', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'P', + 'e', + 'r', + 'f', + 'M', + 'o', + 'n', + 'i', + 't', + 'o', + 'r', + 'C', + 'o', + 'u', + 'n', + 't', + 'e', + 'r', + 's', + 'A', + 'M', + 'D', + 0, // glSelectPerfMonitorCountersAMD + 'g', + 'l', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 0, // glSeparableFilter2D + 'g', + 'l', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 'b', + 'l', + 'e', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glSeparableFilter2DEXT + 'g', + 'l', + 'S', + 'e', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glSetFenceAPPLE + 'g', + 'l', + 'S', + 'e', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glSetFenceNV + 'g', + 'l', + 'S', + 'e', + 't', + 'F', + 'r', + 'a', + 'g', + 'm', + 'e', + 'n', + 't', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'A', + 'T', + 'I', + 0, // glSetFragmentShaderConstantATI + 'g', + 'l', + 'S', + 'e', + 't', + 'I', + 'n', + 'v', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glSetInvariantEXT + 'g', + 'l', + 'S', + 'e', + 't', + 'L', + 'o', + 'c', + 'a', + 'l', + 'C', + 'o', + 'n', + 's', + 't', + 'a', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glSetLocalConstantEXT + 'g', + 'l', + 'S', + 'e', + 't', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'f', + 'v', + 'A', + 'M', + 'D', + 0, // glSetMultisamplefvAMD + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'M', + 'o', + 'd', + 'e', + 'l', + 0, // glShadeModel + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'B', + 'i', + 'n', + 'a', + 'r', + 'y', + 0, // glShaderBinary + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'p', + '1', + 'E', + 'X', + 'T', + 0, // glShaderOp1EXT + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'p', + '2', + 'E', + 'X', + 'T', + 0, // glShaderOp2EXT + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'O', + 'p', + '3', + 'E', + 'X', + 'T', + 0, // glShaderOp3EXT + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 0, // glShaderSource + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'A', + 'R', + 'B', + 0, // glShaderSourceARB + 'g', + 'l', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'B', + 'l', + 'o', + 'c', + 'k', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glShaderStorageBlockBinding + 'g', + 'l', + 'S', + 'h', + 'a', + 'r', + 'p', + 'e', + 'n', + 'T', + 'e', + 'x', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glSharpenTexFuncSGIS + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameterfSGIX + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameterfvSGIX + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameteriSGIX + 'g', + 'l', + 'S', + 'p', + 'r', + 'i', + 't', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'S', + 'G', + 'I', + 'X', + 0, // glSpriteParameterivSGIX + 'g', + 'l', + 'S', + 't', + 'a', + 'r', + 't', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glStartInstrumentsSGIX + 'g', + 'l', + 'S', + 't', + 'a', + 'r', + 't', + 'T', + 'i', + 'l', + 'i', + 'n', + 'g', + 'Q', + 'C', + 'O', + 'M', + 0, // glStartTilingQCOM + 'g', + 'l', + 'S', + 't', + 'a', + 't', + 'e', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glStateCaptureNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'C', + 'l', + 'e', + 'a', + 'r', + 'T', + 'a', + 'g', + 'E', + 'X', + 'T', + 0, // glStencilClearTagEXT + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilFillPathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilFillPathNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 0, // glStencilFunc + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glStencilFuncSeparate + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'F', + 'u', + 'n', + 'c', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'A', + 'T', + 'I', + 0, // glStencilFuncSeparateATI + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'M', + 'a', + 's', + 'k', + 0, // glStencilMask + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'M', + 'a', + 's', + 'k', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glStencilMaskSeparate + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 0, // glStencilOp + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 0, // glStencilOpSeparate + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 'S', + 'e', + 'p', + 'a', + 'r', + 'a', + 't', + 'e', + 'A', + 'T', + 'I', + 0, // glStencilOpSeparateATI + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'O', + 'p', + 'V', + 'a', + 'l', + 'u', + 'e', + 'A', + 'M', + 'D', + 0, // glStencilOpValueAMD + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilStrokePathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilStrokePathNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilThenCoverFillPathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'F', + 'i', + 'l', + 'l', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilThenCoverFillPathNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'I', + 'n', + 's', + 't', + 'a', + 'n', + 'c', + 'e', + 'd', + 'N', + 'V', + 0, // glStencilThenCoverStrokePathInstancedNV + 'g', + 'l', + 'S', + 't', + 'e', + 'n', + 'c', + 'i', + 'l', + 'T', + 'h', + 'e', + 'n', + 'C', + 'o', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'o', + 'k', + 'e', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glStencilThenCoverStrokePathNV + 'g', + 'l', + 'S', + 't', + 'o', + 'p', + 'I', + 'n', + 's', + 't', + 'r', + 'u', + 'm', + 'e', + 'n', + 't', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glStopInstrumentsSGIX + 'g', + 'l', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'M', + 'a', + 'r', + 'k', + 'e', + 'r', + 'G', + 'R', + 'E', + 'M', + 'E', + 'D', + 'Y', + 0, // glStringMarkerGREMEDY + 'g', + 'l', + 'S', + 'u', + 'b', + 'p', + 'i', + 'x', + 'e', + 'l', + 'P', + 'r', + 'e', + 'c', + 'i', + 's', + 'i', + 'o', + 'n', + 'B', + 'i', + 'a', + 's', + 'N', + 'V', + 0, // glSubpixelPrecisionBiasNV + 'g', + 'l', + 'S', + 'w', + 'i', + 'z', + 'z', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glSwizzleEXT + 'g', + 'l', + 'S', + 'y', + 'n', + 'c', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glSyncTextureINTEL + 'g', + 'l', + 'T', + 'a', + 'g', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glTagSampleBufferSGIX + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'b', + 'E', + 'X', + 'T', + 0, // glTangent3bEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3bvEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glTangent3dEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3dvEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'f', + 'E', + 'X', + 'T', + 0, // glTangent3fEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3fvEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glTangent3iEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3ivEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 's', + 'E', + 'X', + 'T', + 0, // glTangent3sEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + '3', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glTangent3svEXT + 'g', + 'l', + 'T', + 'a', + 'n', + 'g', + 'e', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTangentPointerEXT + 'g', + 'l', + 'T', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'M', + 'a', + 's', + 'k', + '3', + 'D', + 'F', + 'X', + 0, // glTbufferMask3DFX + 'g', + 'l', + 'T', + 'e', + 's', + 's', + 'e', + 'l', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'F', + 'a', + 'c', + 't', + 'o', + 'r', + 'A', + 'M', + 'D', + 0, // glTessellationFactorAMD + 'g', + 'l', + 'T', + 'e', + 's', + 's', + 'e', + 'l', + 'l', + 'a', + 't', + 'i', + 'o', + 'n', + 'M', + 'o', + 'd', + 'e', + 'A', + 'M', + 'D', + 0, // glTessellationModeAMD + 'g', + 'l', + 'T', + 'e', + 's', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glTestFenceAPPLE + 'g', + 'l', + 'T', + 'e', + 's', + 't', + 'F', + 'e', + 'n', + 'c', + 'e', + 'N', + 'V', + 0, // glTestFenceNV + 'g', + 'l', + 'T', + 'e', + 's', + 't', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glTestObjectAPPLE + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glTexBuffer + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glTexBufferARB + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTexBufferEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glTexBufferOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glTexBufferRange + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glTexBufferRangeEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'O', + 'E', + 'S', + 0, // glTexBufferRangeOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glTexBumpParameterfvATI + 'g', + 'l', + 'T', + 'e', + 'x', + 'B', + 'u', + 'm', + 'p', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glTexBumpParameterivATI + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord1bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord1bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 0, // glTexCoord1d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'd', + 'v', + 0, // glTexCoord1dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 0, // glTexCoord1f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'f', + 'v', + 0, // glTexCoord1fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'N', + 'V', + 0, // glTexCoord1hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord1hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 0, // glTexCoord1i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'i', + 'v', + 0, // glTexCoord1iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 0, // glTexCoord1s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 's', + 'v', + 0, // glTexCoord1sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord1xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '1', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord1xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord2bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord2bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 0, // glTexCoord2d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'd', + 'v', + 0, // glTexCoord2dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 0, // glTexCoord2f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor3fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor3fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4fNormal3fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4fNormal3fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4ubVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'u', + 'b', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fColor4ubVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fNormal3fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fNormal3fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord2fVertex3fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord2fVertex3fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'f', + 'v', + 0, // glTexCoord2fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'N', + 'V', + 0, // glTexCoord2hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord2hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 0, // glTexCoord2i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'i', + 'v', + 0, // glTexCoord2iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 0, // glTexCoord2s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 's', + 'v', + 0, // glTexCoord2sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord2xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord2xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord3bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord3bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 0, // glTexCoord3d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'd', + 'v', + 0, // glTexCoord3dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 0, // glTexCoord3f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'f', + 'v', + 0, // glTexCoord3fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'N', + 'V', + 0, // glTexCoord3hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord3hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 0, // glTexCoord3i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'i', + 'v', + 0, // glTexCoord3iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 0, // glTexCoord3s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 's', + 'v', + 0, // glTexCoord3sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord3xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord3xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'O', + 'E', + 'S', + 0, // glTexCoord4bOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord4bvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 0, // glTexCoord4d + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'd', + 'v', + 0, // glTexCoord4dv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 0, // glTexCoord4f + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord4fColor4fNormal3fVertex4fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'C', + 'o', + 'l', + 'o', + 'r', + '4', + 'f', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + '3', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord4fColor4fNormal3fVertex4fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'S', + 'U', + 'N', + 0, // glTexCoord4fVertex4fSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'v', + 'S', + 'U', + 'N', + 0, // glTexCoord4fVertex4fvSUN + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'f', + 'v', + 0, // glTexCoord4fv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'N', + 'V', + 0, // glTexCoord4hNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glTexCoord4hvNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 0, // glTexCoord4i + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'i', + 'v', + 0, // glTexCoord4iv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 0, // glTexCoord4s + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 's', + 'v', + 0, // glTexCoord4sv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glTexCoord4xOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexCoord4xvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glTexCoordFormatNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 0, // glTexCoordP1ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '1', + 'u', + 'i', + 'v', + 0, // glTexCoordP1uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 0, // glTexCoordP2ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glTexCoordP2uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 0, // glTexCoordP3ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glTexCoordP3uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 0, // glTexCoordP4ui + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glTexCoordP4uiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glTexCoordPointer + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTexCoordPointerEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glTexCoordPointerListIBM + 'g', + 'l', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glTexCoordPointervINTEL + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 0, // glTexEnvf + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'f', + 'v', + 0, // glTexEnvfv + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 0, // glTexEnvi + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'i', + 'v', + 0, // glTexEnviv + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 0, // glTexEnvx + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'O', + 'E', + 'S', + 0, // glTexEnvxOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 0, // glTexEnvxv + 'g', + 'l', + 'T', + 'e', + 'x', + 'E', + 'n', + 'v', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexEnvxvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'F', + 'i', + 'l', + 't', + 'e', + 'r', + 'F', + 'u', + 'n', + 'c', + 'S', + 'G', + 'I', + 'S', + 0, // glTexFilterFuncSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 0, // glTexGend + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'd', + 'v', + 0, // glTexGendv + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 0, // glTexGenf + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'O', + 'E', + 'S', + 0, // glTexGenfOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 0, // glTexGenfv + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'f', + 'v', + 'O', + 'E', + 'S', + 0, // glTexGenfvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 0, // glTexGeni + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'O', + 'E', + 'S', + 0, // glTexGeniOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 0, // glTexGeniv + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glTexGenivOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'x', + 'O', + 'E', + 'S', + 0, // glTexGenxOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'G', + 'e', + 'n', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexGenxvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTexImage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTexImage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexImage2DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTexImage2DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTexImage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTexImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexImage3DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTexImage3DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glTexImage3DOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + '4', + 'D', + 'S', + 'G', + 'I', + 'S', + 0, // glTexImage4DSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // glTexPageCommitmentARB + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glTexPageCommitmentEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glTexParameterIiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTexParameterIivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glTexParameterIivOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glTexParameterIuiv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTexParameterIuivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'O', + 'E', + 'S', + 0, // glTexParameterIuivOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glTexParameterf + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glTexParameterfv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glTexParameteri + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glTexParameteriv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 0, // glTexParameterx + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'O', + 'E', + 'S', + 0, // glTexParameterxOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 0, // glTexParameterxv + 'g', + 'l', + 'T', + 'e', + 'x', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glTexParameterxvOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'N', + 'V', + 0, // glTexRenderbufferNV + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTexStorage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTexStorage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTexStorage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTexStorage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexStorage2DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTexStorage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTexStorage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTexStorage3DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'O', + 'E', + 'S', + 0, // glTexStorage3DMultisampleOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'S', + 'p', + 'a', + 'r', + 's', + 'e', + 'A', + 'M', + 'D', + 0, // glTexStorageSparseAMD + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTexSubImage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTexSubImage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTexSubImage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTexSubImage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTexSubImage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTexSubImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'O', + 'E', + 'S', + 0, // glTexSubImage3DOES + 'g', + 'l', + 'T', + 'e', + 'x', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '4', + 'D', + 'S', + 'G', + 'I', + 'S', + 0, // glTexSubImage4DSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 0, // glTextureBarrier + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // glTextureBarrierNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glTextureBuffer + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTextureBufferEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glTextureBufferRange + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glTextureBufferRangeEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'C', + 'o', + 'l', + 'o', + 'r', + 'M', + 'a', + 's', + 'k', + 'S', + 'G', + 'I', + 'S', + 0, // glTextureColorMaskSGIS + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureImage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureImage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTextureImage2DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'N', + 'V', + 0, // glTextureImage2DMultisampleNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'C', + 'o', + 'v', + 'e', + 'r', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glTextureImage3DMultisampleCoverageNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'N', + 'V', + 0, // glTextureImage3DMultisampleNV + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'L', + 'i', + 'g', + 'h', + 't', + 'E', + 'X', + 'T', + 0, // glTextureLightEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'M', + 'a', + 't', + 'e', + 'r', + 'i', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glTextureMaterialEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glTextureNormalEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'g', + 'e', + 'C', + 'o', + 'm', + 'm', + 'i', + 't', + 'm', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // glTexturePageCommitmentEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 0, // glTextureParameterIiv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterIivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 0, // glTextureParameterIuiv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'I', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterIuivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 0, // glTextureParameterf + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'E', + 'X', + 'T', + 0, // glTextureParameterfEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 0, // glTextureParameterfv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterfvEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 0, // glTextureParameteri + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'E', + 'X', + 'T', + 0, // glTextureParameteriEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 0, // glTextureParameteriv + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glTextureParameterivEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glTextureRangeAPPLE + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glTextureRenderbufferEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTextureStorage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureStorage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTextureStorage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureStorage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTextureStorage2DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '2', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glTextureStorage2DMultisampleEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTextureStorage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureStorage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 0, // glTextureStorage3DMultisample + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + '3', + 'D', + 'M', + 'u', + 'l', + 't', + 'i', + 's', + 'a', + 'm', + 'p', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // glTextureStorage3DMultisampleEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'o', + 'r', + 'a', + 'g', + 'e', + 'S', + 'p', + 'a', + 'r', + 's', + 'e', + 'A', + 'M', + 'D', + 0, // glTextureStorageSparseAMD + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 0, // glTextureSubImage1D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '1', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureSubImage1DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 0, // glTextureSubImage2D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '2', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureSubImage2DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 0, // glTextureSubImage3D + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'S', + 'u', + 'b', + 'I', + 'm', + 'a', + 'g', + 'e', + '3', + 'D', + 'E', + 'X', + 'T', + 0, // glTextureSubImage3DEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'V', + 'i', + 'e', + 'w', + 0, // glTextureView + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'V', + 'i', + 'e', + 'w', + 'E', + 'X', + 'T', + 0, // glTextureViewEXT + 'g', + 'l', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + 'V', + 'i', + 'e', + 'w', + 'O', + 'E', + 'S', + 0, // glTextureViewOES + 'g', + 'l', + 'T', + 'r', + 'a', + 'c', + 'k', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + 'N', + 'V', + 0, // glTrackMatrixNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'N', + 'V', + 0, // glTransformFeedbackAttribsNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'B', + 'a', + 's', + 'e', + 0, // glTransformFeedbackBufferBase + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'a', + 'n', + 'g', + 'e', + 0, // glTransformFeedbackBufferRange + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'N', + 'V', + 0, // glTransformFeedbackStreamAttribsNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 's', + 0, // glTransformFeedbackVaryings + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 's', + 'E', + 'X', + 'T', + 0, // glTransformFeedbackVaryingsEXT + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'F', + 'e', + 'e', + 'd', + 'b', + 'a', + 'c', + 'k', + 'V', + 'a', + 'r', + 'y', + 'i', + 'n', + 'g', + 's', + 'N', + 'V', + 0, // glTransformFeedbackVaryingsNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'f', + 'o', + 'r', + 'm', + 'P', + 'a', + 't', + 'h', + 'N', + 'V', + 0, // glTransformPathNV + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'd', + 0, // glTranslated + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'f', + 0, // glTranslatef + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'x', + 0, // glTranslatex + 'g', + 'l', + 'T', + 'r', + 'a', + 'n', + 's', + 'l', + 'a', + 't', + 'e', + 'x', + 'O', + 'E', + 'S', + 0, // glTranslatexOES + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 0, // glUniform1d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'd', + 'v', + 0, // glUniform1dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 0, // glUniform1f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform1fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 0, // glUniform1fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 0, // glUniform1i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform1i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform1i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform1i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform1iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 0, // glUniform1iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 0, // glUniform1ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform1ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform1ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform1ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform1ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform1uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 0, // glUniform1uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '1', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform1uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 0, // glUniform2d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'd', + 'v', + 0, // glUniform2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 0, // glUniform2f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform2fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 0, // glUniform2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 0, // glUniform2i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform2i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform2i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform2i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform2iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 0, // glUniform2iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 0, // glUniform2ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform2ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform2ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform2ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform2ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform2uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 0, // glUniform2uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '2', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform2uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 0, // glUniform3d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'd', + 'v', + 0, // glUniform3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 0, // glUniform3f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform3fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 0, // glUniform3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 0, // glUniform3i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform3i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform3i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform3i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform3iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 0, // glUniform3iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 0, // glUniform3ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform3ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform3ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform3ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform3ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform3uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 0, // glUniform3uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform3uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 0, // glUniform4d + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'd', + 'v', + 0, // glUniform4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 0, // glUniform4f + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glUniform4fARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 0, // glUniform4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 0, // glUniform4i + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform4i64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform4i64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4i64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform4i64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'A', + 'R', + 'B', + 0, // glUniform4iARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 0, // glUniform4iv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4ivARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 0, // glUniform4ui + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniform4ui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniform4ui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniform4ui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniform4ui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glUniform4uiEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 0, // glUniform4uiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glUniform4uivEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'l', + 'o', + 'c', + 'k', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glUniformBlockBinding + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glUniformBufferEXT + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glUniformHandleui64ARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniformHandleui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformHandleui64vARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniformHandleui64vNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'd', + 'v', + 0, // glUniformMatrix2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 0, // glUniformMatrix2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformMatrix2fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'd', + 'v', + 0, // glUniformMatrix2x3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 0, // glUniformMatrix2x3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix2x3fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'd', + 'v', + 0, // glUniformMatrix2x4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 0, // glUniformMatrix2x4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '2', + 'x', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix2x4fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'd', + 'v', + 0, // glUniformMatrix3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 0, // glUniformMatrix3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformMatrix3fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'd', + 'v', + 0, // glUniformMatrix3x2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 0, // glUniformMatrix3x2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix3x2fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'd', + 'v', + 0, // glUniformMatrix3x4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 0, // glUniformMatrix3x4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '3', + 'x', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix3x4fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'd', + 'v', + 0, // glUniformMatrix4dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 0, // glUniformMatrix4fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glUniformMatrix4fvARB + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'd', + 'v', + 0, // glUniformMatrix4x2dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 0, // glUniformMatrix4x2fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix4x2fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'd', + 'v', + 0, // glUniformMatrix4x3dv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 0, // glUniformMatrix4x3fv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'M', + 'a', + 't', + 'r', + 'i', + 'x', + '4', + 'x', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glUniformMatrix4x3fvNV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'S', + 'u', + 'b', + 'r', + 'o', + 'u', + 't', + 'i', + 'n', + 'e', + 's', + 'u', + 'i', + 'v', + 0, // glUniformSubroutinesuiv + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glUniformui64NV + 'g', + 'l', + 'U', + 'n', + 'i', + 'f', + 'o', + 'r', + 'm', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glUniformui64vNV + 'g', + 'l', + 'U', + 'n', + 'l', + 'o', + 'c', + 'k', + 'A', + 'r', + 'r', + 'a', + 'y', + 's', + 'E', + 'X', + 'T', + 0, // glUnlockArraysEXT + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glUnmapBuffer + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glUnmapBufferARB + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glUnmapBufferOES + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glUnmapNamedBuffer + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'N', + 'a', + 'm', + 'e', + 'd', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glUnmapNamedBufferEXT + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glUnmapObjectBufferATI + 'g', + 'l', + 'U', + 'n', + 'm', + 'a', + 'p', + 'T', + 'e', + 'x', + 't', + 'u', + 'r', + 'e', + '2', + 'D', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glUnmapTexture2DINTEL + 'g', + 'l', + 'U', + 'p', + 'd', + 'a', + 't', + 'e', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'T', + 'I', + 0, // glUpdateObjectBufferATI + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glUseProgram + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'R', + 'B', + 0, // glUseProgramObjectARB + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'a', + 'g', + 'e', + 's', + 0, // glUseProgramStages + 'g', + 'l', + 'U', + 's', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'S', + 't', + 'a', + 'g', + 'e', + 's', + 'E', + 'X', + 'T', + 0, // glUseProgramStagesEXT + 'g', + 'l', + 'U', + 's', + 'e', + 'S', + 'h', + 'a', + 'd', + 'e', + 'r', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'E', + 'X', + 'T', + 0, // glUseShaderProgramEXT + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'F', + 'i', + 'n', + 'i', + 'N', + 'V', + 0, // glVDPAUFiniNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'G', + 'e', + 't', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'i', + 'v', + 'N', + 'V', + 0, // glVDPAUGetSurfaceivNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'I', + 'n', + 'i', + 't', + 'N', + 'V', + 0, // glVDPAUInitNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'I', + 's', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAUIsSurfaceNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'M', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glVDPAUMapSurfacesNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'R', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'O', + 'u', + 't', + 'p', + 'u', + 't', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAURegisterOutputSurfaceNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'R', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAURegisterVideoSurfaceNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'A', + 'c', + 'c', + 'e', + 's', + 's', + 'N', + 'V', + 0, // glVDPAUSurfaceAccessNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'U', + 'n', + 'm', + 'a', + 'p', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glVDPAUUnmapSurfacesNV + 'g', + 'l', + 'V', + 'D', + 'P', + 'A', + 'U', + 'U', + 'n', + 'r', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'S', + 'u', + 'r', + 'f', + 'a', + 'c', + 'e', + 'N', + 'V', + 0, // glVDPAUUnregisterSurfaceNV + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 0, // glValidateProgram + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'A', + 'R', + 'B', + 0, // glValidateProgramARB + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 0, // glValidateProgramPipeline + 'g', + 'l', + 'V', + 'a', + 'l', + 'i', + 'd', + 'a', + 't', + 'e', + 'P', + 'r', + 'o', + 'g', + 'r', + 'a', + 'm', + 'P', + 'i', + 'p', + 'e', + 'l', + 'i', + 'n', + 'e', + 'E', + 'X', + 'T', + 0, // glValidateProgramPipelineEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'T', + 'I', + 0, // glVariantArrayObjectATI + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVariantPointerEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantbvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantdvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantfvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantivEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantsvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'u', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantubvEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantuivEXT + 'g', + 'l', + 'V', + 'a', + 'r', + 'i', + 'a', + 'n', + 't', + 'u', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVariantusvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'b', + 'O', + 'E', + 'S', + 0, // glVertex2bOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex2bvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'd', + 0, // glVertex2d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'd', + 'v', + 0, // glVertex2dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 0, // glVertex2f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'f', + 'v', + 0, // glVertex2fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'h', + 'N', + 'V', + 0, // glVertex2hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glVertex2hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'i', + 0, // glVertex2i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'i', + 'v', + 0, // glVertex2iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 's', + 0, // glVertex2s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 's', + 'v', + 0, // glVertex2sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'x', + 'O', + 'E', + 'S', + 0, // glVertex2xOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '2', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex2xvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'b', + 'O', + 'E', + 'S', + 0, // glVertex3bOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex3bvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'd', + 0, // glVertex3d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'd', + 'v', + 0, // glVertex3dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 0, // glVertex3f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'f', + 'v', + 0, // glVertex3fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'h', + 'N', + 'V', + 0, // glVertex3hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glVertex3hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'i', + 0, // glVertex3i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'i', + 'v', + 0, // glVertex3iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 's', + 0, // glVertex3s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 's', + 'v', + 0, // glVertex3sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'x', + 'O', + 'E', + 'S', + 0, // glVertex3xOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '3', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex3xvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'b', + 'O', + 'E', + 'S', + 0, // glVertex4bOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'b', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex4bvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'd', + 0, // glVertex4d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'd', + 'v', + 0, // glVertex4dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 0, // glVertex4f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'f', + 'v', + 0, // glVertex4fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'h', + 'N', + 'V', + 0, // glVertex4hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glVertex4hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'i', + 0, // glVertex4i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'i', + 'v', + 0, // glVertex4iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 's', + 0, // glVertex4s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 's', + 'v', + 0, // glVertex4sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'x', + 'O', + 'E', + 'S', + 0, // glVertex4xOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + '4', + 'x', + 'v', + 'O', + 'E', + 'S', + 0, // glVertex4xvOES + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glVertexArrayAttribBinding + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexArrayAttribFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexArrayAttribIFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexArrayAttribLFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'B', + 'i', + 'n', + 'd', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexArrayBindVertexBufferEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 0, // glVertexArrayBindingDivisor + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayColorOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'd', + 'g', + 'e', + 'F', + 'l', + 'a', + 'g', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayEdgeFlagOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'E', + 'l', + 'e', + 'm', + 'e', + 'n', + 't', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glVertexArrayElementBuffer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'F', + 'o', + 'g', + 'C', + 'o', + 'o', + 'r', + 'd', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayFogCoordOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'I', + 'n', + 'd', + 'e', + 'x', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayIndexOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'M', + 'u', + 'l', + 't', + 'i', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayMultiTexCoordOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'N', + 'o', + 'r', + 'm', + 'a', + 'l', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayNormalOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glVertexArrayParameteriAPPLE + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glVertexArrayRangeAPPLE + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'R', + 'a', + 'n', + 'g', + 'e', + 'N', + 'V', + 0, // glVertexArrayRangeNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'S', + 'e', + 'c', + 'o', + 'n', + 'd', + 'a', + 'r', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArraySecondaryColorOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'T', + 'e', + 'x', + 'C', + 'o', + 'o', + 'r', + 'd', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayTexCoordOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribBindingEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribDivisorEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribFormatEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribIFormatEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribIOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribLFormatEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribLOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexAttribOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexBindingDivisorEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glVertexArrayVertexBuffer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glVertexArrayVertexBuffers + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 'r', + 'r', + 'a', + 'y', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'E', + 'X', + 'T', + 0, // glVertexArrayVertexOffsetEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 0, // glVertexAttrib1d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'N', + 'V', + 0, // glVertexAttrib1dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'v', + 0, // glVertexAttrib1dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 0, // glVertexAttrib1f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'N', + 'V', + 0, // glVertexAttrib1fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'v', + 0, // glVertexAttrib1fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'h', + 'N', + 'V', + 0, // glVertexAttrib1hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 0, // glVertexAttrib1s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'N', + 'V', + 0, // glVertexAttrib1sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'v', + 0, // glVertexAttrib1sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib1svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '1', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib1svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 0, // glVertexAttrib2d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'N', + 'V', + 0, // glVertexAttrib2dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'v', + 0, // glVertexAttrib2dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 0, // glVertexAttrib2f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'N', + 'V', + 0, // glVertexAttrib2fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'v', + 0, // glVertexAttrib2fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'h', + 'N', + 'V', + 0, // glVertexAttrib2hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 0, // glVertexAttrib2s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'N', + 'V', + 0, // glVertexAttrib2sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'v', + 0, // glVertexAttrib2sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib2svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '2', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib2svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 0, // glVertexAttrib3d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'N', + 'V', + 0, // glVertexAttrib3dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'v', + 0, // glVertexAttrib3dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 0, // glVertexAttrib3f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'N', + 'V', + 0, // glVertexAttrib3fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'v', + 0, // glVertexAttrib3fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'h', + 'N', + 'V', + 0, // glVertexAttrib3hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 0, // glVertexAttrib3s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'N', + 'V', + 0, // glVertexAttrib3sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'v', + 0, // glVertexAttrib3sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib3svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '3', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib3svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'b', + 'v', + 0, // glVertexAttrib4Nbv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NbvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'i', + 'v', + 0, // glVertexAttrib4Niv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 's', + 'v', + 0, // glVertexAttrib4Nsv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NsvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 0, // glVertexAttrib4Nub + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NubARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 'v', + 0, // glVertexAttrib4Nubv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NubvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'i', + 'v', + 0, // glVertexAttrib4Nuiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NuivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 's', + 'v', + 0, // glVertexAttrib4Nusv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'N', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4NusvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'b', + 'v', + 0, // glVertexAttrib4bv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4bvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 0, // glVertexAttrib4d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4dARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'N', + 'V', + 0, // glVertexAttrib4dNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'v', + 0, // glVertexAttrib4dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4dvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 0, // glVertexAttrib4f + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4fARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'N', + 'V', + 0, // glVertexAttrib4fNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'v', + 0, // glVertexAttrib4fv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4fvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'h', + 'N', + 'V', + 0, // glVertexAttrib4hNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'i', + 'v', + 0, // glVertexAttrib4iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4ivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 0, // glVertexAttrib4s + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4sARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'N', + 'V', + 0, // glVertexAttrib4sNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'v', + 0, // glVertexAttrib4sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4svARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'N', + 'V', + 0, // glVertexAttrib4ubNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'v', + 0, // glVertexAttrib4ubv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4ubvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'b', + 'v', + 'N', + 'V', + 0, // glVertexAttrib4ubvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'i', + 'v', + 0, // glVertexAttrib4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4uivARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 's', + 'v', + 0, // glVertexAttrib4usv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + '4', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttrib4usvARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'r', + 'r', + 'a', + 'y', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'T', + 'I', + 0, // glVertexAttribArrayObjectATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 0, // glVertexAttribBinding + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 0, // glVertexAttribDivisor + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'A', + 'N', + 'G', + 'L', + 'E', + 0, // glVertexAttribDivisorANGLE + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'A', + 'R', + 'B', + 0, // glVertexAttribDivisorARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexAttribDivisorEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 'N', + 'V', + 0, // glVertexAttribDivisorNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexAttribFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexAttribFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 0, // glVertexAttribI1i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 'v', + 0, // glVertexAttribI1iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 0, // glVertexAttribI1ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 'v', + 0, // glVertexAttribI1uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '1', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI1uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 0, // glVertexAttribI2i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 'v', + 0, // glVertexAttribI2iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 0, // glVertexAttribI2ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 'v', + 0, // glVertexAttribI2uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '2', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI2uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 0, // glVertexAttribI3i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 'v', + 0, // glVertexAttribI3iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 0, // glVertexAttribI3ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 'v', + 0, // glVertexAttribI3uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '3', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI3uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'b', + 'v', + 0, // glVertexAttribI4bv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4bvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 0, // glVertexAttribI4i + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4iEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 'v', + 0, // glVertexAttribI4iv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4ivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 's', + 'v', + 0, // glVertexAttribI4sv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4svEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'b', + 'v', + 0, // glVertexAttribI4ubv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'b', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4ubvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 0, // glVertexAttribI4ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4uiEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 'v', + 0, // glVertexAttribI4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4uivEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 's', + 'v', + 0, // glVertexAttribI4usv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + '4', + 'u', + 's', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribI4usvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexAttribIFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexAttribIFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexAttribIPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'I', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexAttribIPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 0, // glVertexAttribL1d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL1dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 'v', + 0, // glVertexAttribL1dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL1dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL1i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL1i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'A', + 'R', + 'B', + 0, // glVertexAttribL1ui64ARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL1ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'A', + 'R', + 'B', + 0, // glVertexAttribL1ui64vARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '1', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL1ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 0, // glVertexAttribL2d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL2dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 'v', + 0, // glVertexAttribL2dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL2dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL2i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL2i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL2ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '2', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL2ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 0, // glVertexAttribL3d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL3dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 'v', + 0, // glVertexAttribL3dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL3dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL3i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL3i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL3ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '3', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL3ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 0, // glVertexAttribL4d + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 'E', + 'X', + 'T', + 0, // glVertexAttribL4dEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 'v', + 0, // glVertexAttribL4dv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'd', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexAttribL4dvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL4i64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL4i64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'u', + 'i', + '6', + '4', + 'N', + 'V', + 0, // glVertexAttribL4ui64NV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + '4', + 'u', + 'i', + '6', + '4', + 'v', + 'N', + 'V', + 0, // glVertexAttribL4ui64vNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 0, // glVertexAttribLFormat + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexAttribLFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexAttribLPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'L', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexAttribLPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '1', + 'u', + 'i', + 0, // glVertexAttribP1ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '1', + 'u', + 'i', + 'v', + 0, // glVertexAttribP1uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '2', + 'u', + 'i', + 0, // glVertexAttribP2ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glVertexAttribP2uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '3', + 'u', + 'i', + 0, // glVertexAttribP3ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glVertexAttribP3uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '4', + 'u', + 'i', + 0, // glVertexAttribP4ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glVertexAttribP4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'A', + 'M', + 'D', + 0, // glVertexAttribParameteriAMD + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexAttribPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glVertexAttribPointerARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'N', + 'V', + 0, // glVertexAttribPointerNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '1', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs1svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '2', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs2svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '3', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs3svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'd', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4dvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'f', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4fvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4hvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 's', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4svNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + '4', + 'u', + 'b', + 'v', + 'N', + 'V', + 0, // glVertexAttribs4ubvNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'i', + 'n', + 'd', + 'i', + 'n', + 'g', + 'D', + 'i', + 'v', + 'i', + 's', + 'o', + 'r', + 0, // glVertexBindingDivisor + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'l', + 'e', + 'n', + 'd', + 'A', + 'R', + 'B', + 0, // glVertexBlendARB + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'n', + 'v', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexBlendEnvfATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'B', + 'l', + 'e', + 'n', + 'd', + 'E', + 'n', + 'v', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexBlendEnviATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'N', + 'V', + 0, // glVertexFormatNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '2', + 'u', + 'i', + 0, // glVertexP2ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '2', + 'u', + 'i', + 'v', + 0, // glVertexP2uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '3', + 'u', + 'i', + 0, // glVertexP3ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '3', + 'u', + 'i', + 'v', + 0, // glVertexP3uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '4', + 'u', + 'i', + 0, // glVertexP4ui + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + '4', + 'u', + 'i', + 'v', + 0, // glVertexP4uiv + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 0, // glVertexPointer + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'L', + 'i', + 's', + 't', + 'I', + 'B', + 'M', + 0, // glVertexPointerListIBM + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'v', + 'I', + 'N', + 'T', + 'E', + 'L', + 0, // glVertexPointervINTEL + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream1dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream1fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream1iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream1sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '1', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream1svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream2dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream2fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream2iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream2sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '2', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream2svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream3dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream3fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream3iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream3sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '3', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream3svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'd', + 'A', + 'T', + 'I', + 0, // glVertexStream4dATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'd', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4dvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'f', + 'A', + 'T', + 'I', + 0, // glVertexStream4fATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'f', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4fvATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'i', + 'A', + 'T', + 'I', + 0, // glVertexStream4iATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 'i', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4ivATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 's', + 'A', + 'T', + 'I', + 0, // glVertexStream4sATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + '4', + 's', + 'v', + 'A', + 'T', + 'I', + 0, // glVertexStream4svATI + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // glVertexWeightPointerEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'f', + 'E', + 'X', + 'T', + 0, // glVertexWeightfEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // glVertexWeightfvEXT + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'h', + 'N', + 'V', + 0, // glVertexWeighthNV + 'g', + 'l', + 'V', + 'e', + 'r', + 't', + 'e', + 'x', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'h', + 'v', + 'N', + 'V', + 0, // glVertexWeighthvNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'N', + 'V', + 0, // glVideoCaptureNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'd', + 'v', + 'N', + 'V', + 0, // glVideoCaptureStreamParameterdvNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'f', + 'v', + 'N', + 'V', + 0, // glVideoCaptureStreamParameterfvNV + 'g', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'S', + 't', + 'r', + 'e', + 'a', + 'm', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 'i', + 'v', + 'N', + 'V', + 0, // glVideoCaptureStreamParameterivNV + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 0, // glViewport + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 0, // glViewportArrayv + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'A', + 'r', + 'r', + 'a', + 'y', + 'v', + 'N', + 'V', + 0, // glViewportArrayvNV + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 0, // glViewportIndexedf + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'N', + 'V', + 0, // glViewportIndexedfNV + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'v', + 0, // glViewportIndexedfv + 'g', + 'l', + 'V', + 'i', + 'e', + 'w', + 'p', + 'o', + 'r', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'e', + 'd', + 'f', + 'v', + 'N', + 'V', + 0, // glViewportIndexedfvNV + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 0, // glWaitSync + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'S', + 'y', + 'n', + 'c', + 'A', + 'P', + 'P', + 'L', + 'E', + 0, // glWaitSyncAPPLE + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'a', + 't', + 'h', + 's', + 'N', + 'V', + 0, // glWeightPathsNV + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // glWeightPointerARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'P', + 'o', + 'i', + 'n', + 't', + 'e', + 'r', + 'O', + 'E', + 'S', + 0, // glWeightPointerOES + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightbvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightdvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightfvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightivARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightsvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'u', + 'b', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightubvARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'u', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightuivARB + 'g', + 'l', + 'W', + 'e', + 'i', + 'g', + 'h', + 't', + 'u', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWeightusvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 0, // glWindowPos2d + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'A', + 'R', + 'B', + 0, // glWindowPos2dARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2dMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 0, // glWindowPos2dv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2dvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'd', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2dvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 0, // glWindowPos2f + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'A', + 'R', + 'B', + 0, // glWindowPos2fARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2fMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 0, // glWindowPos2fv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2fvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'f', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2fvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 0, // glWindowPos2i + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'A', + 'R', + 'B', + 0, // glWindowPos2iARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2iMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 0, // glWindowPos2iv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2ivARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 'i', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2ivMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 0, // glWindowPos2s + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'A', + 'R', + 'B', + 0, // glWindowPos2sARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2sMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 0, // glWindowPos2sv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos2svARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '2', + 's', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos2svMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 0, // glWindowPos3d + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'A', + 'R', + 'B', + 0, // glWindowPos3dARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3dMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 0, // glWindowPos3dv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3dvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'd', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3dvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 0, // glWindowPos3f + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'A', + 'R', + 'B', + 0, // glWindowPos3fARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3fMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 0, // glWindowPos3fv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3fvARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'f', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3fvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 0, // glWindowPos3i + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'A', + 'R', + 'B', + 0, // glWindowPos3iARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3iMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 0, // glWindowPos3iv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3ivARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 'i', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3ivMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 0, // glWindowPos3s + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'A', + 'R', + 'B', + 0, // glWindowPos3sARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3sMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 0, // glWindowPos3sv + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 'A', + 'R', + 'B', + 0, // glWindowPos3svARB + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '3', + 's', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos3svMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'd', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4dMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'd', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4dvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'f', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4fMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'f', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4fvMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'i', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4iMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 'i', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4ivMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4sMESA + 'g', + 'l', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'P', + 'o', + 's', + '4', + 's', + 'v', + 'M', + 'E', + 'S', + 'A', + 0, // glWindowPos4svMESA + 'g', + 'l', + 'W', + 'r', + 'i', + 't', + 'e', + 'M', + 'a', + 's', + 'k', + 'E', + 'X', + 'T', + 0, // glWriteMaskEXT + 0 }; + +static void *gl_provider_resolver(const char *name, + const enum gl_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != gl_provider_terminator; i++) { + switch (providers[i]) { + case Desktop_OpenGL_1_0: + if (epoxy_is_desktop_gl()) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 10); + break; + case Desktop_OpenGL_1_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 11) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 11); + break; + case Desktop_OpenGL_1_2: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 12) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 12); + break; + case Desktop_OpenGL_1_3: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 13) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 13); + break; + case Desktop_OpenGL_1_4: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 14) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 14); + break; + case Desktop_OpenGL_1_5: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 15) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 15); + break; + case Desktop_OpenGL_2_0: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 20) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 20); + break; + case Desktop_OpenGL_2_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 21) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 21); + break; + case Desktop_OpenGL_3_0: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 30) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 30); + break; + case Desktop_OpenGL_3_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 31) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 31); + break; + case Desktop_OpenGL_3_2: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 32) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 32); + break; + case Desktop_OpenGL_3_3: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 33) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 33); + break; + case Desktop_OpenGL_4_0: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 40) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 40); + break; + case Desktop_OpenGL_4_1: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 41) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 41); + break; + case Desktop_OpenGL_4_2: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 42) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 42); + break; + case Desktop_OpenGL_4_3: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 43) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 43); + break; + case Desktop_OpenGL_4_4: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 44) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 44); + break; + case Desktop_OpenGL_4_5: + if (epoxy_is_desktop_gl() && epoxy_conservative_gl_version() >= 45) + return epoxy_get_core_proc_address(entrypoint_strings + entrypoints[i], 45); + break; + case GL_extension_GL_3DFX_tbuffer: + if (epoxy_conservative_has_gl_extension("GL_3DFX_tbuffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_debug_output: + if (epoxy_conservative_has_gl_extension("GL_AMD_debug_output")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_draw_buffers_blend: + if (epoxy_conservative_has_gl_extension("GL_AMD_draw_buffers_blend")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_gpu_shader_int64: + if (epoxy_conservative_has_gl_extension("GL_AMD_gpu_shader_int64")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_interleaved_elements: + if (epoxy_conservative_has_gl_extension("GL_AMD_interleaved_elements")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_AMD_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_name_gen_delete: + if (epoxy_conservative_has_gl_extension("GL_AMD_name_gen_delete")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_occlusion_query_event: + if (epoxy_conservative_has_gl_extension("GL_AMD_occlusion_query_event")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_performance_monitor: + if (epoxy_conservative_has_gl_extension("GL_AMD_performance_monitor")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_sample_positions: + if (epoxy_conservative_has_gl_extension("GL_AMD_sample_positions")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_sparse_texture: + if (epoxy_conservative_has_gl_extension("GL_AMD_sparse_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_stencil_operation_extended: + if (epoxy_conservative_has_gl_extension("GL_AMD_stencil_operation_extended")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_AMD_vertex_shader_tessellator: + if (epoxy_conservative_has_gl_extension("GL_AMD_vertex_shader_tessellator")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_framebuffer_blit: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_framebuffer_blit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ANGLE_translated_shader_source: + if (epoxy_conservative_has_gl_extension("GL_ANGLE_translated_shader_source")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_copy_texture_levels: + if (epoxy_conservative_has_gl_extension("GL_APPLE_copy_texture_levels")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_element_array: + if (epoxy_conservative_has_gl_extension("GL_APPLE_element_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_fence: + if (epoxy_conservative_has_gl_extension("GL_APPLE_fence")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_flush_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_APPLE_flush_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_APPLE_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_object_purgeable: + if (epoxy_conservative_has_gl_extension("GL_APPLE_object_purgeable")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_sync: + if (epoxy_conservative_has_gl_extension("GL_APPLE_sync")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_texture_range: + if (epoxy_conservative_has_gl_extension("GL_APPLE_texture_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_APPLE_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_vertex_array_range: + if (epoxy_conservative_has_gl_extension("GL_APPLE_vertex_array_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_APPLE_vertex_program_evaluators: + if (epoxy_conservative_has_gl_extension("GL_APPLE_vertex_program_evaluators")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_ES2_compatibility: + if (epoxy_conservative_has_gl_extension("GL_ARB_ES2_compatibility")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_ES3_1_compatibility: + if (epoxy_conservative_has_gl_extension("GL_ARB_ES3_1_compatibility")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_ES3_2_compatibility: + if (epoxy_conservative_has_gl_extension("GL_ARB_ES3_2_compatibility")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_base_instance: + if (epoxy_conservative_has_gl_extension("GL_ARB_base_instance")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_bindless_texture: + if (epoxy_conservative_has_gl_extension("GL_ARB_bindless_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_blend_func_extended: + if (epoxy_conservative_has_gl_extension("GL_ARB_blend_func_extended")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_buffer_storage: + if (epoxy_conservative_has_gl_extension("GL_ARB_buffer_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_cl_event: + if (epoxy_conservative_has_gl_extension("GL_ARB_cl_event")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_clear_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_clear_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_clear_texture: + if (epoxy_conservative_has_gl_extension("GL_ARB_clear_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_clip_control: + if (epoxy_conservative_has_gl_extension("GL_ARB_clip_control")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_color_buffer_float: + if (epoxy_conservative_has_gl_extension("GL_ARB_color_buffer_float")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_compute_shader: + if (epoxy_conservative_has_gl_extension("GL_ARB_compute_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_compute_variable_group_size: + if (epoxy_conservative_has_gl_extension("GL_ARB_compute_variable_group_size")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_copy_buffer: + if (epoxy_conservative_has_gl_extension("GL_ARB_copy_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_copy_image: + if (epoxy_conservative_has_gl_extension("GL_ARB_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_debug_output: + if (epoxy_conservative_has_gl_extension("GL_ARB_debug_output")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_direct_state_access: + if (epoxy_conservative_has_gl_extension("GL_ARB_direct_state_access")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_buffers_blend: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_buffers_blend")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_elements_base_vertex: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_elements_base_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_draw_instanced: + if (epoxy_conservative_has_gl_extension("GL_ARB_draw_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_fragment_program: + if (epoxy_conservative_has_gl_extension("GL_ARB_fragment_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_framebuffer_no_attachments: + if (epoxy_conservative_has_gl_extension("GL_ARB_framebuffer_no_attachments")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_framebuffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_framebuffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_geometry_shader4: + if (epoxy_conservative_has_gl_extension("GL_ARB_geometry_shader4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_get_program_binary: + if (epoxy_conservative_has_gl_extension("GL_ARB_get_program_binary")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_get_texture_sub_image: + if (epoxy_conservative_has_gl_extension("GL_ARB_get_texture_sub_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_gpu_shader_fp64: + if (epoxy_conservative_has_gl_extension("GL_ARB_gpu_shader_fp64")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_gpu_shader_int64: + if (epoxy_conservative_has_gl_extension("GL_ARB_gpu_shader_int64")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_imaging: + if (epoxy_conservative_has_gl_extension("GL_ARB_imaging")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_indirect_parameters: + if (epoxy_conservative_has_gl_extension("GL_ARB_indirect_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_ARB_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_internalformat_query2: + if (epoxy_conservative_has_gl_extension("GL_ARB_internalformat_query2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_internalformat_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_internalformat_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_invalidate_subdata: + if (epoxy_conservative_has_gl_extension("GL_ARB_invalidate_subdata")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_map_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_ARB_map_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_matrix_palette: + if (epoxy_conservative_has_gl_extension("GL_ARB_matrix_palette")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multi_bind: + if (epoxy_conservative_has_gl_extension("GL_ARB_multi_bind")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_ARB_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multisample: + if (epoxy_conservative_has_gl_extension("GL_ARB_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_multitexture: + if (epoxy_conservative_has_gl_extension("GL_ARB_multitexture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_occlusion_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_occlusion_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_parallel_shader_compile: + if (epoxy_conservative_has_gl_extension("GL_ARB_parallel_shader_compile")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_point_parameters: + if (epoxy_conservative_has_gl_extension("GL_ARB_point_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_program_interface_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_program_interface_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_provoking_vertex: + if (epoxy_conservative_has_gl_extension("GL_ARB_provoking_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_robustness: + if (epoxy_conservative_has_gl_extension("GL_ARB_robustness")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sample_locations: + if (epoxy_conservative_has_gl_extension("GL_ARB_sample_locations")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sample_shading: + if (epoxy_conservative_has_gl_extension("GL_ARB_sample_shading")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sampler_objects: + if (epoxy_conservative_has_gl_extension("GL_ARB_sampler_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_separate_shader_objects: + if (epoxy_conservative_has_gl_extension("GL_ARB_separate_shader_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_atomic_counters: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_atomic_counters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_image_load_store: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_image_load_store")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_objects: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_storage_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_storage_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shader_subroutine: + if (epoxy_conservative_has_gl_extension("GL_ARB_shader_subroutine")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_shading_language_include: + if (epoxy_conservative_has_gl_extension("GL_ARB_shading_language_include")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sparse_buffer: + if (epoxy_conservative_has_gl_extension("GL_ARB_sparse_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sparse_texture: + if (epoxy_conservative_has_gl_extension("GL_ARB_sparse_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_sync: + if (epoxy_conservative_has_gl_extension("GL_ARB_sync")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_tessellation_shader: + if (epoxy_conservative_has_gl_extension("GL_ARB_tessellation_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_barrier: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_barrier")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_compression: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_compression")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_multisample: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_storage: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_storage_multisample: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_storage_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_texture_view: + if (epoxy_conservative_has_gl_extension("GL_ARB_texture_view")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_timer_query: + if (epoxy_conservative_has_gl_extension("GL_ARB_timer_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transform_feedback2: + if (epoxy_conservative_has_gl_extension("GL_ARB_transform_feedback2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transform_feedback3: + if (epoxy_conservative_has_gl_extension("GL_ARB_transform_feedback3")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transform_feedback_instanced: + if (epoxy_conservative_has_gl_extension("GL_ARB_transform_feedback_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_transpose_matrix: + if (epoxy_conservative_has_gl_extension("GL_ARB_transpose_matrix")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_uniform_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_uniform_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_attrib_64bit: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_attrib_64bit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_attrib_binding: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_attrib_binding")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_blend: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_blend")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_program: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_shader: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_vertex_type_2_10_10_10_rev: + if (epoxy_conservative_has_gl_extension("GL_ARB_vertex_type_2_10_10_10_rev")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_viewport_array: + if (epoxy_conservative_has_gl_extension("GL_ARB_viewport_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ARB_window_pos: + if (epoxy_conservative_has_gl_extension("GL_ARB_window_pos")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_ATI_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_element_array: + if (epoxy_conservative_has_gl_extension("GL_ATI_element_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_envmap_bumpmap: + if (epoxy_conservative_has_gl_extension("GL_ATI_envmap_bumpmap")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_fragment_shader: + if (epoxy_conservative_has_gl_extension("GL_ATI_fragment_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_map_object_buffer: + if (epoxy_conservative_has_gl_extension("GL_ATI_map_object_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_pn_triangles: + if (epoxy_conservative_has_gl_extension("GL_ATI_pn_triangles")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_separate_stencil: + if (epoxy_conservative_has_gl_extension("GL_ATI_separate_stencil")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_ATI_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_vertex_attrib_array_object: + if (epoxy_conservative_has_gl_extension("GL_ATI_vertex_attrib_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_ATI_vertex_streams: + if (epoxy_conservative_has_gl_extension("GL_ATI_vertex_streams")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_base_instance: + if (epoxy_conservative_has_gl_extension("GL_EXT_base_instance")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_bindable_uniform: + if (epoxy_conservative_has_gl_extension("GL_EXT_bindable_uniform")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_color: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_color")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_equation_separate: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_equation_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_func_extended: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_func_extended")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_func_separate: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_func_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_blend_minmax: + if (epoxy_conservative_has_gl_extension("GL_EXT_blend_minmax")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_buffer_storage: + if (epoxy_conservative_has_gl_extension("GL_EXT_buffer_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_color_subtable: + if (epoxy_conservative_has_gl_extension("GL_EXT_color_subtable")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_compiled_vertex_array: + if (epoxy_conservative_has_gl_extension("GL_EXT_compiled_vertex_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_convolution: + if (epoxy_conservative_has_gl_extension("GL_EXT_convolution")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_coordinate_frame: + if (epoxy_conservative_has_gl_extension("GL_EXT_coordinate_frame")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_copy_image: + if (epoxy_conservative_has_gl_extension("GL_EXT_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_copy_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_copy_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_cull_vertex: + if (epoxy_conservative_has_gl_extension("GL_EXT_cull_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_debug_label: + if (epoxy_conservative_has_gl_extension("GL_EXT_debug_label")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_debug_marker: + if (epoxy_conservative_has_gl_extension("GL_EXT_debug_marker")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_depth_bounds_test: + if (epoxy_conservative_has_gl_extension("GL_EXT_depth_bounds_test")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_direct_state_access: + if (epoxy_conservative_has_gl_extension("GL_EXT_direct_state_access")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_discard_framebuffer: + if (epoxy_conservative_has_gl_extension("GL_EXT_discard_framebuffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_disjoint_timer_query: + if (epoxy_conservative_has_gl_extension("GL_EXT_disjoint_timer_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_buffers2: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_buffers2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_buffers_indexed: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_buffers_indexed")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_elements_base_vertex: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_elements_base_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_instanced: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_draw_range_elements: + if (epoxy_conservative_has_gl_extension("GL_EXT_draw_range_elements")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_fog_coord: + if (epoxy_conservative_has_gl_extension("GL_EXT_fog_coord")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_framebuffer_blit: + if (epoxy_conservative_has_gl_extension("GL_EXT_framebuffer_blit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_EXT_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_framebuffer_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_framebuffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_geometry_shader4: + if (epoxy_conservative_has_gl_extension("GL_EXT_geometry_shader4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_geometry_shader: + if (epoxy_conservative_has_gl_extension("GL_EXT_geometry_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_gpu_program_parameters: + if (epoxy_conservative_has_gl_extension("GL_EXT_gpu_program_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_gpu_shader4: + if (epoxy_conservative_has_gl_extension("GL_EXT_gpu_shader4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_histogram: + if (epoxy_conservative_has_gl_extension("GL_EXT_histogram")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_index_func: + if (epoxy_conservative_has_gl_extension("GL_EXT_index_func")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_index_material: + if (epoxy_conservative_has_gl_extension("GL_EXT_index_material")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_EXT_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_light_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_light_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_map_buffer_range: + if (epoxy_conservative_has_gl_extension("GL_EXT_map_buffer_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multi_draw_arrays: + if (epoxy_conservative_has_gl_extension("GL_EXT_multi_draw_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_EXT_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multisample: + if (epoxy_conservative_has_gl_extension("GL_EXT_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multisampled_render_to_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_multisampled_render_to_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_multiview_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_EXT_multiview_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_occlusion_query_boolean: + if (epoxy_conservative_has_gl_extension("GL_EXT_occlusion_query_boolean")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_paletted_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_paletted_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_pixel_transform: + if (epoxy_conservative_has_gl_extension("GL_EXT_pixel_transform")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_point_parameters: + if (epoxy_conservative_has_gl_extension("GL_EXT_point_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_polygon_offset: + if (epoxy_conservative_has_gl_extension("GL_EXT_polygon_offset")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_polygon_offset_clamp: + if (epoxy_conservative_has_gl_extension("GL_EXT_polygon_offset_clamp")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_primitive_bounding_box: + if (epoxy_conservative_has_gl_extension("GL_EXT_primitive_bounding_box")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_provoking_vertex: + if (epoxy_conservative_has_gl_extension("GL_EXT_provoking_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_raster_multisample: + if (epoxy_conservative_has_gl_extension("GL_EXT_raster_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_robustness: + if (epoxy_conservative_has_gl_extension("GL_EXT_robustness")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_secondary_color: + if (epoxy_conservative_has_gl_extension("GL_EXT_secondary_color")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_separate_shader_objects: + if (epoxy_conservative_has_gl_extension("GL_EXT_separate_shader_objects")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_shader_image_load_store: + if (epoxy_conservative_has_gl_extension("GL_EXT_shader_image_load_store")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_sparse_texture: + if (epoxy_conservative_has_gl_extension("GL_EXT_sparse_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_stencil_clear_tag: + if (epoxy_conservative_has_gl_extension("GL_EXT_stencil_clear_tag")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_stencil_two_side: + if (epoxy_conservative_has_gl_extension("GL_EXT_stencil_two_side")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_subtexture: + if (epoxy_conservative_has_gl_extension("GL_EXT_subtexture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_tessellation_shader: + if (epoxy_conservative_has_gl_extension("GL_EXT_tessellation_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture3D: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture3D")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_array: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_border_clamp: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_border_clamp")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_buffer: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_filter_minmax: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_filter_minmax")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_integer: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_integer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_perturb_normal: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_perturb_normal")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_storage: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_storage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_texture_view: + if (epoxy_conservative_has_gl_extension("GL_EXT_texture_view")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_timer_query: + if (epoxy_conservative_has_gl_extension("GL_EXT_timer_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_transform_feedback: + if (epoxy_conservative_has_gl_extension("GL_EXT_transform_feedback")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_array: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_attrib_64bit: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_attrib_64bit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_shader: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_vertex_weighting: + if (epoxy_conservative_has_gl_extension("GL_EXT_vertex_weighting")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_EXT_x11_sync_object: + if (epoxy_conservative_has_gl_extension("GL_EXT_x11_sync_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_GREMEDY_frame_terminator: + if (epoxy_conservative_has_gl_extension("GL_GREMEDY_frame_terminator")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_GREMEDY_string_marker: + if (epoxy_conservative_has_gl_extension("GL_GREMEDY_string_marker")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_HP_image_transform: + if (epoxy_conservative_has_gl_extension("GL_HP_image_transform")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IBM_multimode_draw_arrays: + if (epoxy_conservative_has_gl_extension("GL_IBM_multimode_draw_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IBM_static_data: + if (epoxy_conservative_has_gl_extension("GL_IBM_static_data")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IBM_vertex_array_lists: + if (epoxy_conservative_has_gl_extension("GL_IBM_vertex_array_lists")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IMG_multisampled_render_to_texture: + if (epoxy_conservative_has_gl_extension("GL_IMG_multisampled_render_to_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_IMG_user_clip_plane: + if (epoxy_conservative_has_gl_extension("GL_IMG_user_clip_plane")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INGR_blend_func_separate: + if (epoxy_conservative_has_gl_extension("GL_INGR_blend_func_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_framebuffer_CMAA: + if (epoxy_conservative_has_gl_extension("GL_INTEL_framebuffer_CMAA")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_map_texture: + if (epoxy_conservative_has_gl_extension("GL_INTEL_map_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_parallel_arrays: + if (epoxy_conservative_has_gl_extension("GL_INTEL_parallel_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_INTEL_performance_query: + if (epoxy_conservative_has_gl_extension("GL_INTEL_performance_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_KHR_blend_equation_advanced: + if (epoxy_conservative_has_gl_extension("GL_KHR_blend_equation_advanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_KHR_debug: + if (epoxy_conservative_has_gl_extension("GL_KHR_debug")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_KHR_robustness: + if (epoxy_conservative_has_gl_extension("GL_KHR_robustness")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_MESA_resize_buffers: + if (epoxy_conservative_has_gl_extension("GL_MESA_resize_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_MESA_window_pos: + if (epoxy_conservative_has_gl_extension("GL_MESA_window_pos")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NVX_conditional_render: + if (epoxy_conservative_has_gl_extension("GL_NVX_conditional_render")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_bindless_multi_draw_indirect: + if (epoxy_conservative_has_gl_extension("GL_NV_bindless_multi_draw_indirect")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_bindless_multi_draw_indirect_count: + if (epoxy_conservative_has_gl_extension("GL_NV_bindless_multi_draw_indirect_count")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_bindless_texture: + if (epoxy_conservative_has_gl_extension("GL_NV_bindless_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_blend_equation_advanced: + if (epoxy_conservative_has_gl_extension("GL_NV_blend_equation_advanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_command_list: + if (epoxy_conservative_has_gl_extension("GL_NV_command_list")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_conditional_render: + if (epoxy_conservative_has_gl_extension("GL_NV_conditional_render")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_conservative_raster: + if (epoxy_conservative_has_gl_extension("GL_NV_conservative_raster")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_conservative_raster_dilate: + if (epoxy_conservative_has_gl_extension("GL_NV_conservative_raster_dilate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_copy_buffer: + if (epoxy_conservative_has_gl_extension("GL_NV_copy_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_copy_image: + if (epoxy_conservative_has_gl_extension("GL_NV_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_coverage_sample: + if (epoxy_conservative_has_gl_extension("GL_NV_coverage_sample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_depth_buffer_float: + if (epoxy_conservative_has_gl_extension("GL_NV_depth_buffer_float")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_draw_buffers: + if (epoxy_conservative_has_gl_extension("GL_NV_draw_buffers")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_draw_instanced: + if (epoxy_conservative_has_gl_extension("GL_NV_draw_instanced")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_draw_texture: + if (epoxy_conservative_has_gl_extension("GL_NV_draw_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_evaluators: + if (epoxy_conservative_has_gl_extension("GL_NV_evaluators")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_explicit_multisample: + if (epoxy_conservative_has_gl_extension("GL_NV_explicit_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_fence: + if (epoxy_conservative_has_gl_extension("GL_NV_fence")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_fragment_coverage_to_color: + if (epoxy_conservative_has_gl_extension("GL_NV_fragment_coverage_to_color")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_fragment_program: + if (epoxy_conservative_has_gl_extension("GL_NV_fragment_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_blit: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_blit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_mixed_samples: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_mixed_samples")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_multisample: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_framebuffer_multisample_coverage: + if (epoxy_conservative_has_gl_extension("GL_NV_framebuffer_multisample_coverage")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_geometry_program4: + if (epoxy_conservative_has_gl_extension("GL_NV_geometry_program4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_gpu_program4: + if (epoxy_conservative_has_gl_extension("GL_NV_gpu_program4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_gpu_program5: + if (epoxy_conservative_has_gl_extension("GL_NV_gpu_program5")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_gpu_shader5: + if (epoxy_conservative_has_gl_extension("GL_NV_gpu_shader5")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_half_float: + if (epoxy_conservative_has_gl_extension("GL_NV_half_float")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_instanced_arrays: + if (epoxy_conservative_has_gl_extension("GL_NV_instanced_arrays")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_internalformat_sample_query: + if (epoxy_conservative_has_gl_extension("GL_NV_internalformat_sample_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_non_square_matrices: + if (epoxy_conservative_has_gl_extension("GL_NV_non_square_matrices")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_occlusion_query: + if (epoxy_conservative_has_gl_extension("GL_NV_occlusion_query")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_parameter_buffer_object: + if (epoxy_conservative_has_gl_extension("GL_NV_parameter_buffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_path_rendering: + if (epoxy_conservative_has_gl_extension("GL_NV_path_rendering")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_pixel_data_range: + if (epoxy_conservative_has_gl_extension("GL_NV_pixel_data_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_point_sprite: + if (epoxy_conservative_has_gl_extension("GL_NV_point_sprite")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_polygon_mode: + if (epoxy_conservative_has_gl_extension("GL_NV_polygon_mode")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_present_video: + if (epoxy_conservative_has_gl_extension("GL_NV_present_video")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_primitive_restart: + if (epoxy_conservative_has_gl_extension("GL_NV_primitive_restart")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_read_buffer: + if (epoxy_conservative_has_gl_extension("GL_NV_read_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_register_combiners2: + if (epoxy_conservative_has_gl_extension("GL_NV_register_combiners2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_register_combiners: + if (epoxy_conservative_has_gl_extension("GL_NV_register_combiners")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_sample_locations: + if (epoxy_conservative_has_gl_extension("GL_NV_sample_locations")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_shader_buffer_load: + if (epoxy_conservative_has_gl_extension("GL_NV_shader_buffer_load")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_texture_barrier: + if (epoxy_conservative_has_gl_extension("GL_NV_texture_barrier")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_texture_multisample: + if (epoxy_conservative_has_gl_extension("GL_NV_texture_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_transform_feedback2: + if (epoxy_conservative_has_gl_extension("GL_NV_transform_feedback2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_transform_feedback: + if (epoxy_conservative_has_gl_extension("GL_NV_transform_feedback")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vdpau_interop: + if (epoxy_conservative_has_gl_extension("GL_NV_vdpau_interop")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_array_range: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_array_range")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_attrib_integer_64bit: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_attrib_integer_64bit")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_buffer_unified_memory: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_buffer_unified_memory")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_program4: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_program4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_vertex_program: + if (epoxy_conservative_has_gl_extension("GL_NV_vertex_program")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_video_capture: + if (epoxy_conservative_has_gl_extension("GL_NV_video_capture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_NV_viewport_array: + if (epoxy_conservative_has_gl_extension("GL_NV_viewport_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_EGL_image: + if (epoxy_conservative_has_gl_extension("GL_OES_EGL_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_blend_equation_separate: + if (epoxy_conservative_has_gl_extension("GL_OES_blend_equation_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_blend_func_separate: + if (epoxy_conservative_has_gl_extension("GL_OES_blend_func_separate")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_blend_subtract: + if (epoxy_conservative_has_gl_extension("GL_OES_blend_subtract")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_byte_coordinates: + if (epoxy_conservative_has_gl_extension("GL_OES_byte_coordinates")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_copy_image: + if (epoxy_conservative_has_gl_extension("GL_OES_copy_image")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_draw_buffers_indexed: + if (epoxy_conservative_has_gl_extension("GL_OES_draw_buffers_indexed")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_draw_elements_base_vertex: + if (epoxy_conservative_has_gl_extension("GL_OES_draw_elements_base_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_draw_texture: + if (epoxy_conservative_has_gl_extension("GL_OES_draw_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_fixed_point: + if (epoxy_conservative_has_gl_extension("GL_OES_fixed_point")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_framebuffer_object: + if (epoxy_conservative_has_gl_extension("GL_OES_framebuffer_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_geometry_shader: + if (epoxy_conservative_has_gl_extension("GL_OES_geometry_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_get_program_binary: + if (epoxy_conservative_has_gl_extension("GL_OES_get_program_binary")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_mapbuffer: + if (epoxy_conservative_has_gl_extension("GL_OES_mapbuffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_matrix_palette: + if (epoxy_conservative_has_gl_extension("GL_OES_matrix_palette")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_point_size_array: + if (epoxy_conservative_has_gl_extension("GL_OES_point_size_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_primitive_bounding_box: + if (epoxy_conservative_has_gl_extension("GL_OES_primitive_bounding_box")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_query_matrix: + if (epoxy_conservative_has_gl_extension("GL_OES_query_matrix")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_sample_shading: + if (epoxy_conservative_has_gl_extension("GL_OES_sample_shading")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_single_precision: + if (epoxy_conservative_has_gl_extension("GL_OES_single_precision")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_tessellation_shader: + if (epoxy_conservative_has_gl_extension("GL_OES_tessellation_shader")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_3D: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_3D")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_border_clamp: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_border_clamp")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_buffer: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_cube_map: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_cube_map")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_storage_multisample_2d_array: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_storage_multisample_2d_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_texture_view: + if (epoxy_conservative_has_gl_extension("GL_OES_texture_view")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OES_vertex_array_object: + if (epoxy_conservative_has_gl_extension("GL_OES_vertex_array_object")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_OVR_multiview: + if (epoxy_conservative_has_gl_extension("GL_OVR_multiview")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_PGI_misc_hints: + if (epoxy_conservative_has_gl_extension("GL_PGI_misc_hints")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_alpha_test: + if (epoxy_conservative_has_gl_extension("GL_QCOM_alpha_test")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_driver_control: + if (epoxy_conservative_has_gl_extension("GL_QCOM_driver_control")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_extended_get2: + if (epoxy_conservative_has_gl_extension("GL_QCOM_extended_get2")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_extended_get: + if (epoxy_conservative_has_gl_extension("GL_QCOM_extended_get")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_QCOM_tiled_rendering: + if (epoxy_conservative_has_gl_extension("GL_QCOM_tiled_rendering")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_detail_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIS_detail_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_fog_function: + if (epoxy_conservative_has_gl_extension("GL_SGIS_fog_function")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_multisample: + if (epoxy_conservative_has_gl_extension("GL_SGIS_multisample")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_pixel_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIS_pixel_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_point_parameters: + if (epoxy_conservative_has_gl_extension("GL_SGIS_point_parameters")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_sharpen_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIS_sharpen_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_texture4D: + if (epoxy_conservative_has_gl_extension("GL_SGIS_texture4D")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_texture_color_mask: + if (epoxy_conservative_has_gl_extension("GL_SGIS_texture_color_mask")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIS_texture_filter4: + if (epoxy_conservative_has_gl_extension("GL_SGIS_texture_filter4")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_async: + if (epoxy_conservative_has_gl_extension("GL_SGIX_async")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_flush_raster: + if (epoxy_conservative_has_gl_extension("GL_SGIX_flush_raster")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_fragment_lighting: + if (epoxy_conservative_has_gl_extension("GL_SGIX_fragment_lighting")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_framezoom: + if (epoxy_conservative_has_gl_extension("GL_SGIX_framezoom")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_igloo_interface: + if (epoxy_conservative_has_gl_extension("GL_SGIX_igloo_interface")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_instruments: + if (epoxy_conservative_has_gl_extension("GL_SGIX_instruments")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_list_priority: + if (epoxy_conservative_has_gl_extension("GL_SGIX_list_priority")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_pixel_texture: + if (epoxy_conservative_has_gl_extension("GL_SGIX_pixel_texture")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_polynomial_ffd: + if (epoxy_conservative_has_gl_extension("GL_SGIX_polynomial_ffd")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_reference_plane: + if (epoxy_conservative_has_gl_extension("GL_SGIX_reference_plane")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_sprite: + if (epoxy_conservative_has_gl_extension("GL_SGIX_sprite")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGIX_tag_sample_buffer: + if (epoxy_conservative_has_gl_extension("GL_SGIX_tag_sample_buffer")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SGI_color_table: + if (epoxy_conservative_has_gl_extension("GL_SGI_color_table")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUNX_constant_data: + if (epoxy_conservative_has_gl_extension("GL_SUNX_constant_data")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_global_alpha: + if (epoxy_conservative_has_gl_extension("GL_SUN_global_alpha")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_mesh_array: + if (epoxy_conservative_has_gl_extension("GL_SUN_mesh_array")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_triangle_list: + if (epoxy_conservative_has_gl_extension("GL_SUN_triangle_list")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case GL_extension_GL_SUN_vertex: + if (epoxy_conservative_has_gl_extension("GL_SUN_vertex")) + return epoxy_get_proc_address(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_1_0: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 10 && epoxy_gl_version() < 20) + return epoxy_gles1_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_2_0: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 20) + return epoxy_gles2_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_3_0: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 30) + return epoxy_gles3_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_3_1: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 31) + return epoxy_gles3_dlsym(entrypoint_strings + entrypoints[i]); + break; + case OpenGL_ES_3_2: + if (!epoxy_is_desktop_gl() && epoxy_gl_version() >= 32) + return epoxy_gles3_dlsym(entrypoint_strings + entrypoints[i]); + break; + case always_present: + if (true) + return epoxy_get_bootstrap_proc_address(entrypoint_strings + entrypoints[i]); + break; + case gl_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != gl_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == gl_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +gl_single_resolver(const enum gl_provider provider, const uint32_t entrypoint_offset); + +static void * +gl_single_resolver(const enum gl_provider provider, const uint32_t entrypoint_offset) +{ + const enum gl_provider providers[] = { + provider, + gl_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return gl_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNGLACCUMPROC +epoxy_glAccum_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 0 /* glAccum */); +} + +static PFNGLACCUMXOESPROC +epoxy_glAccumxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 8 /* glAccumxOES */); +} + +static PFNGLACTIVEPROGRAMEXTPROC +epoxy_glActiveProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 20 /* glActiveProgramEXT */); +} + +static PFNGLACTIVESHADERPROGRAMPROC +epoxy_glActiveShaderProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39 /* "glActiveShaderProgram" */, + 39 /* "glActiveShaderProgram" */, + 39 /* "glActiveShaderProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 39 /* "glActiveShaderProgram" */, + providers, entrypoints); +} + +static PFNGLACTIVESHADERPROGRAMEXTPROC +epoxy_glActiveShaderProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 61 /* glActiveShaderProgramEXT */); +} + +static PFNGLACTIVESTENCILFACEEXTPROC +epoxy_glActiveStencilFaceEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_stencil_two_side, 86 /* glActiveStencilFaceEXT */); +} + +static PFNGLACTIVETEXTUREPROC +epoxy_glActiveTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + 125 /* "glActiveTextureARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 109 /* "glActiveTexture" */, + providers, entrypoints); +} + +static PFNGLACTIVETEXTUREARBPROC +epoxy_glActiveTextureARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 125 /* "glActiveTextureARB" */, + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + 109 /* "glActiveTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 125 /* "glActiveTextureARB" */, + providers, entrypoints); +} + +static PFNGLACTIVEVARYINGNVPROC +epoxy_glActiveVaryingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 144 /* glActiveVaryingNV */); +} + +static PFNGLALPHAFRAGMENTOP1ATIPROC +epoxy_glAlphaFragmentOp1ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 162 /* glAlphaFragmentOp1ATI */); +} + +static PFNGLALPHAFRAGMENTOP2ATIPROC +epoxy_glAlphaFragmentOp2ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 184 /* glAlphaFragmentOp2ATI */); +} + +static PFNGLALPHAFRAGMENTOP3ATIPROC +epoxy_glAlphaFragmentOp3ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 206 /* glAlphaFragmentOp3ATI */); +} + +static PFNGLALPHAFUNCPROC +epoxy_glAlphaFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 228 /* "glAlphaFunc" */, + 228 /* "glAlphaFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 228 /* "glAlphaFunc" */, + providers, entrypoints); +} + +static PFNGLALPHAFUNCQCOMPROC +epoxy_glAlphaFuncQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_alpha_test, 240 /* glAlphaFuncQCOM */); +} + +static PFNGLALPHAFUNCXPROC +epoxy_glAlphaFuncx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 256 /* glAlphaFuncx */); +} + +static PFNGLALPHAFUNCXOESPROC +epoxy_glAlphaFuncxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 269 /* glAlphaFuncxOES */); +} + +static PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC +epoxy_glApplyFramebufferAttachmentCMAAINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_framebuffer_CMAA, 285 /* glApplyFramebufferAttachmentCMAAINTEL */); +} + +static PFNGLAPPLYTEXTUREEXTPROC +epoxy_glApplyTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_light_texture, 323 /* glApplyTextureEXT */); +} + +static PFNGLAREPROGRAMSRESIDENTNVPROC +epoxy_glAreProgramsResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 341 /* glAreProgramsResidentNV */); +} + +static PFNGLARETEXTURESRESIDENTPROC +epoxy_glAreTexturesResident_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 365 /* glAreTexturesResident */); +} + +static PFNGLARETEXTURESRESIDENTEXTPROC +epoxy_glAreTexturesResidentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 387 /* glAreTexturesResidentEXT */); +} + +static PFNGLARRAYELEMENTPROC +epoxy_glArrayElement_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_vertex_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 412 /* "glArrayElement" */, + 427 /* "glArrayElementEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 412 /* "glArrayElement" */, + providers, entrypoints); +} + +static PFNGLARRAYELEMENTEXTPROC +epoxy_glArrayElementEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_array, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 427 /* "glArrayElementEXT" */, + 412 /* "glArrayElement" */, + }; + return gl_provider_resolver(entrypoint_strings + 427 /* "glArrayElementEXT" */, + providers, entrypoints); +} + +static PFNGLARRAYOBJECTATIPROC +epoxy_glArrayObjectATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 445 /* glArrayObjectATI */); +} + +static PFNGLASYNCMARKERSGIXPROC +epoxy_glAsyncMarkerSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 462 /* glAsyncMarkerSGIX */); +} + +static PFNGLATTACHOBJECTARBPROC +epoxy_glAttachObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 480 /* "glAttachObjectARB" */, + 498 /* "glAttachShader" */, + 498 /* "glAttachShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 480 /* "glAttachObjectARB" */, + providers, entrypoints); +} + +static PFNGLATTACHSHADERPROC +epoxy_glAttachShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 498 /* "glAttachShader" */, + 498 /* "glAttachShader" */, + 480 /* "glAttachObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 498 /* "glAttachShader" */, + providers, entrypoints); +} + +static PFNGLBEGINPROC +epoxy_glBegin_unwrapped_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 513 /* glBegin */); +} + +static PFNGLBEGINCONDITIONALRENDERPROC +epoxy_glBeginConditionalRender_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 521 /* "glBeginConditionalRender" */, + 546 /* "glBeginConditionalRenderNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 521 /* "glBeginConditionalRender" */, + providers, entrypoints); +} + +static PFNGLBEGINCONDITIONALRENDERNVPROC +epoxy_glBeginConditionalRenderNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_conditional_render, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 546 /* "glBeginConditionalRenderNV" */, + 521 /* "glBeginConditionalRender" */, + }; + return gl_provider_resolver(entrypoint_strings + 546 /* "glBeginConditionalRenderNV" */, + providers, entrypoints); +} + +static PFNGLBEGINCONDITIONALRENDERNVXPROC +epoxy_glBeginConditionalRenderNVX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NVX_conditional_render, 573 /* glBeginConditionalRenderNVX */); +} + +static PFNGLBEGINFRAGMENTSHADERATIPROC +epoxy_glBeginFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 601 /* glBeginFragmentShaderATI */); +} + +static PFNGLBEGINOCCLUSIONQUERYNVPROC +epoxy_glBeginOcclusionQueryNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 626 /* glBeginOcclusionQueryNV */); +} + +static PFNGLBEGINPERFMONITORAMDPROC +epoxy_glBeginPerfMonitorAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 650 /* glBeginPerfMonitorAMD */); +} + +static PFNGLBEGINPERFQUERYINTELPROC +epoxy_glBeginPerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 672 /* glBeginPerfQueryINTEL */); +} + +static PFNGLBEGINQUERYPROC +epoxy_glBeginQuery_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 694 /* "glBeginQuery" */, + 694 /* "glBeginQuery" */, + 707 /* "glBeginQueryARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 694 /* "glBeginQuery" */, + providers, entrypoints); +} + +static PFNGLBEGINQUERYARBPROC +epoxy_glBeginQueryARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 707 /* "glBeginQueryARB" */, + 694 /* "glBeginQuery" */, + 694 /* "glBeginQuery" */, + }; + return gl_provider_resolver(entrypoint_strings + 707 /* "glBeginQueryARB" */, + providers, entrypoints); +} + +static PFNGLBEGINQUERYEXTPROC +epoxy_glBeginQueryEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 723 /* "glBeginQueryEXT" */, + 723 /* "glBeginQueryEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 723 /* "glBeginQueryEXT" */, + providers, entrypoints); +} + +static PFNGLBEGINQUERYINDEXEDPROC +epoxy_glBeginQueryIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 739 /* "glBeginQueryIndexed" */, + 739 /* "glBeginQueryIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 739 /* "glBeginQueryIndexed" */, + providers, entrypoints); +} + +static PFNGLBEGINTRANSFORMFEEDBACKPROC +epoxy_glBeginTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 759 /* "glBeginTransformFeedback" */, + 759 /* "glBeginTransformFeedback" */, + 784 /* "glBeginTransformFeedbackEXT" */, + 812 /* "glBeginTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 759 /* "glBeginTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLBEGINTRANSFORMFEEDBACKEXTPROC +epoxy_glBeginTransformFeedbackEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 784 /* "glBeginTransformFeedbackEXT" */, + 759 /* "glBeginTransformFeedback" */, + 759 /* "glBeginTransformFeedback" */, + 812 /* "glBeginTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 784 /* "glBeginTransformFeedbackEXT" */, + providers, entrypoints); +} + +static PFNGLBEGINTRANSFORMFEEDBACKNVPROC +epoxy_glBeginTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 812 /* "glBeginTransformFeedbackNV" */, + 759 /* "glBeginTransformFeedback" */, + 759 /* "glBeginTransformFeedback" */, + 784 /* "glBeginTransformFeedbackEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 812 /* "glBeginTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLBEGINVERTEXSHADEREXTPROC +epoxy_glBeginVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 839 /* glBeginVertexShaderEXT */); +} + +static PFNGLBEGINVIDEOCAPTURENVPROC +epoxy_glBeginVideoCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 862 /* glBeginVideoCaptureNV */); +} + +static PFNGLBINDATTRIBLOCATIONPROC +epoxy_glBindAttribLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 884 /* "glBindAttribLocation" */, + 884 /* "glBindAttribLocation" */, + 905 /* "glBindAttribLocationARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 884 /* "glBindAttribLocation" */, + providers, entrypoints); +} + +static PFNGLBINDATTRIBLOCATIONARBPROC +epoxy_glBindAttribLocationARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 905 /* "glBindAttribLocationARB" */, + 884 /* "glBindAttribLocation" */, + 884 /* "glBindAttribLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 905 /* "glBindAttribLocationARB" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERPROC +epoxy_glBindBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + 942 /* "glBindBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 929 /* "glBindBuffer" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERARBPROC +epoxy_glBindBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 942 /* "glBindBufferARB" */, + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + 929 /* "glBindBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 942 /* "glBindBufferARB" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERBASEPROC +epoxy_glBindBufferBase_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 975 /* "glBindBufferBaseEXT" */, + 995 /* "glBindBufferBaseNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 958 /* "glBindBufferBase" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERBASEEXTPROC +epoxy_glBindBufferBaseEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 975 /* "glBindBufferBaseEXT" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 995 /* "glBindBufferBaseNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 975 /* "glBindBufferBaseEXT" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERBASENVPROC +epoxy_glBindBufferBaseNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 995 /* "glBindBufferBaseNV" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 958 /* "glBindBufferBase" */, + 975 /* "glBindBufferBaseEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 995 /* "glBindBufferBaseNV" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFEROFFSETEXTPROC +epoxy_glBindBufferOffsetEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1014 /* "glBindBufferOffsetEXT" */, + 1036 /* "glBindBufferOffsetNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1014 /* "glBindBufferOffsetEXT" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFEROFFSETNVPROC +epoxy_glBindBufferOffsetNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1036 /* "glBindBufferOffsetNV" */, + 1014 /* "glBindBufferOffsetEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1036 /* "glBindBufferOffsetNV" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERRANGEPROC +epoxy_glBindBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1075 /* "glBindBufferRangeEXT" */, + 1096 /* "glBindBufferRangeNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1057 /* "glBindBufferRange" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERRANGEEXTPROC +epoxy_glBindBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1075 /* "glBindBufferRangeEXT" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1096 /* "glBindBufferRangeNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1075 /* "glBindBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERRANGENVPROC +epoxy_glBindBufferRangeNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1096 /* "glBindBufferRangeNV" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1057 /* "glBindBufferRange" */, + 1075 /* "glBindBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1096 /* "glBindBufferRangeNV" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERSBASEPROC +epoxy_glBindBuffersBase_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1116 /* "glBindBuffersBase" */, + 1116 /* "glBindBuffersBase" */, + }; + return gl_provider_resolver(entrypoint_strings + 1116 /* "glBindBuffersBase" */, + providers, entrypoints); +} + +static PFNGLBINDBUFFERSRANGEPROC +epoxy_glBindBuffersRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1134 /* "glBindBuffersRange" */, + 1134 /* "glBindBuffersRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 1134 /* "glBindBuffersRange" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONPROC +epoxy_glBindFragDataLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_EXT_blend_func_extended, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1153 /* "glBindFragDataLocation" */, + 1176 /* "glBindFragDataLocationEXT" */, + 1176 /* "glBindFragDataLocationEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1153 /* "glBindFragDataLocation" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONEXTPROC +epoxy_glBindFragDataLocationEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_extended, + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1176 /* "glBindFragDataLocationEXT" */, + 1176 /* "glBindFragDataLocationEXT" */, + 1153 /* "glBindFragDataLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 1176 /* "glBindFragDataLocationEXT" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONINDEXEDPROC +epoxy_glBindFragDataLocationIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + GL_extension_GL_EXT_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1202 /* "glBindFragDataLocationIndexed" */, + 1202 /* "glBindFragDataLocationIndexed" */, + 1232 /* "glBindFragDataLocationIndexedEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1202 /* "glBindFragDataLocationIndexed" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC +epoxy_glBindFragDataLocationIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_extended, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1232 /* "glBindFragDataLocationIndexedEXT" */, + 1202 /* "glBindFragDataLocationIndexed" */, + 1202 /* "glBindFragDataLocationIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 1232 /* "glBindFragDataLocationIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLBINDFRAGMENTSHADERATIPROC +epoxy_glBindFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 1265 /* glBindFragmentShaderATI */); +} + +static PFNGLBINDFRAMEBUFFERPROC +epoxy_glBindFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + 1307 /* "glBindFramebufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1289 /* "glBindFramebuffer" */, + providers, entrypoints); +} + +static PFNGLBINDFRAMEBUFFEREXTPROC +epoxy_glBindFramebufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1307 /* "glBindFramebufferEXT" */, + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + 1289 /* "glBindFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 1307 /* "glBindFramebufferEXT" */, + providers, entrypoints); +} + +static PFNGLBINDFRAMEBUFFEROESPROC +epoxy_glBindFramebufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 1328 /* glBindFramebufferOES */); +} + +static PFNGLBINDIMAGETEXTUREPROC +epoxy_glBindImageTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_image_load_store, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1349 /* "glBindImageTexture" */, + 1349 /* "glBindImageTexture" */, + 1349 /* "glBindImageTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 1349 /* "glBindImageTexture" */, + providers, entrypoints); +} + +static PFNGLBINDIMAGETEXTUREEXTPROC +epoxy_glBindImageTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_shader_image_load_store, 1368 /* glBindImageTextureEXT */); +} + +static PFNGLBINDIMAGETEXTURESPROC +epoxy_glBindImageTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1390 /* "glBindImageTextures" */, + 1390 /* "glBindImageTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 1390 /* "glBindImageTextures" */, + providers, entrypoints); +} + +static PFNGLBINDLIGHTPARAMETEREXTPROC +epoxy_glBindLightParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1410 /* glBindLightParameterEXT */); +} + +static PFNGLBINDMATERIALPARAMETEREXTPROC +epoxy_glBindMaterialParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1434 /* glBindMaterialParameterEXT */); +} + +static PFNGLBINDMULTITEXTUREEXTPROC +epoxy_glBindMultiTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 1461 /* glBindMultiTextureEXT */); +} + +static PFNGLBINDPARAMETEREXTPROC +epoxy_glBindParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1483 /* glBindParameterEXT */); +} + +static PFNGLBINDPROGRAMARBPROC +epoxy_glBindProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1502 /* "glBindProgramARB" */, + 1502 /* "glBindProgramARB" */, + 1519 /* "glBindProgramNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 1502 /* "glBindProgramARB" */, + providers, entrypoints); +} + +static PFNGLBINDPROGRAMNVPROC +epoxy_glBindProgramNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1519 /* "glBindProgramNV" */, + 1502 /* "glBindProgramARB" */, + 1502 /* "glBindProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 1519 /* "glBindProgramNV" */, + providers, entrypoints); +} + +static PFNGLBINDPROGRAMPIPELINEPROC +epoxy_glBindProgramPipeline_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1535 /* "glBindProgramPipeline" */, + 1535 /* "glBindProgramPipeline" */, + 1535 /* "glBindProgramPipeline" */, + }; + return gl_provider_resolver(entrypoint_strings + 1535 /* "glBindProgramPipeline" */, + providers, entrypoints); +} + +static PFNGLBINDPROGRAMPIPELINEEXTPROC +epoxy_glBindProgramPipelineEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 1557 /* glBindProgramPipelineEXT */); +} + +static PFNGLBINDRENDERBUFFERPROC +epoxy_glBindRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + 1601 /* "glBindRenderbufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1582 /* "glBindRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLBINDRENDERBUFFEREXTPROC +epoxy_glBindRenderbufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1601 /* "glBindRenderbufferEXT" */, + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + 1582 /* "glBindRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 1601 /* "glBindRenderbufferEXT" */, + providers, entrypoints); +} + +static PFNGLBINDRENDERBUFFEROESPROC +epoxy_glBindRenderbufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 1623 /* glBindRenderbufferOES */); +} + +static PFNGLBINDSAMPLERPROC +epoxy_glBindSampler_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1645 /* "glBindSampler" */, + 1645 /* "glBindSampler" */, + 1645 /* "glBindSampler" */, + }; + return gl_provider_resolver(entrypoint_strings + 1645 /* "glBindSampler" */, + providers, entrypoints); +} + +static PFNGLBINDSAMPLERSPROC +epoxy_glBindSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1659 /* "glBindSamplers" */, + 1659 /* "glBindSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 1659 /* "glBindSamplers" */, + providers, entrypoints); +} + +static PFNGLBINDTEXGENPARAMETEREXTPROC +epoxy_glBindTexGenParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1674 /* glBindTexGenParameterEXT */); +} + +static PFNGLBINDTEXTUREPROC +epoxy_glBindTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_texture_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + 1713 /* "glBindTextureEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 1699 /* "glBindTexture" */, + providers, entrypoints); +} + +static PFNGLBINDTEXTUREEXTPROC +epoxy_glBindTextureEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_object, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1713 /* "glBindTextureEXT" */, + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + 1699 /* "glBindTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 1713 /* "glBindTextureEXT" */, + providers, entrypoints); +} + +static PFNGLBINDTEXTUREUNITPROC +epoxy_glBindTextureUnit_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1730 /* "glBindTextureUnit" */, + 1730 /* "glBindTextureUnit" */, + }; + return gl_provider_resolver(entrypoint_strings + 1730 /* "glBindTextureUnit" */, + providers, entrypoints); +} + +static PFNGLBINDTEXTUREUNITPARAMETEREXTPROC +epoxy_glBindTextureUnitParameterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1748 /* glBindTextureUnitParameterEXT */); +} + +static PFNGLBINDTEXTURESPROC +epoxy_glBindTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1778 /* "glBindTextures" */, + 1778 /* "glBindTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 1778 /* "glBindTextures" */, + providers, entrypoints); +} + +static PFNGLBINDTRANSFORMFEEDBACKPROC +epoxy_glBindTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1793 /* "glBindTransformFeedback" */, + 1793 /* "glBindTransformFeedback" */, + 1793 /* "glBindTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 1793 /* "glBindTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLBINDTRANSFORMFEEDBACKNVPROC +epoxy_glBindTransformFeedbackNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback2, 1817 /* glBindTransformFeedbackNV */); +} + +static PFNGLBINDVERTEXARRAYPROC +epoxy_glBindVertexArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1861 /* "glBindVertexArrayAPPLE" */, + 1884 /* "glBindVertexArrayOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 1843 /* "glBindVertexArray" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXARRAYAPPLEPROC +epoxy_glBindVertexArrayAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1861 /* "glBindVertexArrayAPPLE" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 1861 /* "glBindVertexArrayAPPLE" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXARRAYOESPROC +epoxy_glBindVertexArrayOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1884 /* "glBindVertexArrayOES" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + 1843 /* "glBindVertexArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 1884 /* "glBindVertexArrayOES" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXBUFFERPROC +epoxy_glBindVertexBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1905 /* "glBindVertexBuffer" */, + 1905 /* "glBindVertexBuffer" */, + 1905 /* "glBindVertexBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 1905 /* "glBindVertexBuffer" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXBUFFERSPROC +epoxy_glBindVertexBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_multi_bind, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 1924 /* "glBindVertexBuffers" */, + 1924 /* "glBindVertexBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 1924 /* "glBindVertexBuffers" */, + providers, entrypoints); +} + +static PFNGLBINDVERTEXSHADEREXTPROC +epoxy_glBindVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 1944 /* glBindVertexShaderEXT */); +} + +static PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC +epoxy_glBindVideoCaptureStreamBufferNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 1966 /* glBindVideoCaptureStreamBufferNV */); +} + +static PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC +epoxy_glBindVideoCaptureStreamTextureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 1999 /* glBindVideoCaptureStreamTextureNV */); +} + +static PFNGLBINORMAL3BEXTPROC +epoxy_glBinormal3bEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2033 /* glBinormal3bEXT */); +} + +static PFNGLBINORMAL3BVEXTPROC +epoxy_glBinormal3bvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2049 /* glBinormal3bvEXT */); +} + +static PFNGLBINORMAL3DEXTPROC +epoxy_glBinormal3dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2066 /* glBinormal3dEXT */); +} + +static PFNGLBINORMAL3DVEXTPROC +epoxy_glBinormal3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2082 /* glBinormal3dvEXT */); +} + +static PFNGLBINORMAL3FEXTPROC +epoxy_glBinormal3fEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2099 /* glBinormal3fEXT */); +} + +static PFNGLBINORMAL3FVEXTPROC +epoxy_glBinormal3fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2115 /* glBinormal3fvEXT */); +} + +static PFNGLBINORMAL3IEXTPROC +epoxy_glBinormal3iEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2132 /* glBinormal3iEXT */); +} + +static PFNGLBINORMAL3IVEXTPROC +epoxy_glBinormal3ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2148 /* glBinormal3ivEXT */); +} + +static PFNGLBINORMAL3SEXTPROC +epoxy_glBinormal3sEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2165 /* glBinormal3sEXT */); +} + +static PFNGLBINORMAL3SVEXTPROC +epoxy_glBinormal3svEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2181 /* glBinormal3svEXT */); +} + +static PFNGLBINORMALPOINTEREXTPROC +epoxy_glBinormalPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 2198 /* glBinormalPointerEXT */); +} + +static PFNGLBITMAPPROC +epoxy_glBitmap_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 2219 /* glBitmap */); +} + +static PFNGLBITMAPXOESPROC +epoxy_glBitmapxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 2228 /* glBitmapxOES */); +} + +static PFNGLBLENDBARRIERPROC +epoxy_glBlendBarrier_resolver(void) +{ + static const enum gl_provider providers[] = { + OpenGL_ES_3_2, + GL_extension_GL_KHR_blend_equation_advanced, + GL_extension_GL_NV_blend_equation_advanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2241 /* "glBlendBarrier" */, + 2256 /* "glBlendBarrierKHR" */, + 2274 /* "glBlendBarrierNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 2241 /* "glBlendBarrier" */, + providers, entrypoints); +} + +static PFNGLBLENDBARRIERKHRPROC +epoxy_glBlendBarrierKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_blend_equation_advanced, + OpenGL_ES_3_2, + GL_extension_GL_NV_blend_equation_advanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2256 /* "glBlendBarrierKHR" */, + 2241 /* "glBlendBarrier" */, + 2274 /* "glBlendBarrierNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 2256 /* "glBlendBarrierKHR" */, + providers, entrypoints); +} + +static PFNGLBLENDBARRIERNVPROC +epoxy_glBlendBarrierNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_blend_equation_advanced, + OpenGL_ES_3_2, + GL_extension_GL_KHR_blend_equation_advanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2274 /* "glBlendBarrierNV" */, + 2241 /* "glBlendBarrier" */, + 2256 /* "glBlendBarrierKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 2274 /* "glBlendBarrierNV" */, + providers, entrypoints); +} + +static PFNGLBLENDCOLORPROC +epoxy_glBlendColor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + 2304 /* "glBlendColorEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2291 /* "glBlendColor" */, + providers, entrypoints); +} + +static PFNGLBLENDCOLOREXTPROC +epoxy_glBlendColorEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_color, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2304 /* "glBlendColorEXT" */, + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + 2291 /* "glBlendColor" */, + }; + return gl_provider_resolver(entrypoint_strings + 2304 /* "glBlendColorEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDCOLORXOESPROC +epoxy_glBlendColorxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 2320 /* glBlendColorxOES */); +} + +static PFNGLBLENDEQUATIONPROC +epoxy_glBlendEquation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_minmax, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + 2353 /* "glBlendEquationEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2337 /* "glBlendEquation" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONEXTPROC +epoxy_glBlendEquationEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_minmax, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_imaging, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2353 /* "glBlendEquationEXT" */, + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + 2337 /* "glBlendEquation" */, + }; + return gl_provider_resolver(entrypoint_strings + 2353 /* "glBlendEquationEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONINDEXEDAMDPROC +epoxy_glBlendEquationIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2655 /* "glBlendEquationiARB" */, + 2675 /* "glBlendEquationiEXT" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2372 /* "glBlendEquationIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONOESPROC +epoxy_glBlendEquationOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_blend_subtract, 2398 /* glBlendEquationOES */); +} + +static PFNGLBLENDEQUATIONSEPARATEPROC +epoxy_glBlendEquationSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_equation_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2417 /* "glBlendEquationSeparate" */, + 2417 /* "glBlendEquationSeparate" */, + 2441 /* "glBlendEquationSeparateEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2417 /* "glBlendEquationSeparate" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEEXTPROC +epoxy_glBlendEquationSeparateEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_equation_separate, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2441 /* "glBlendEquationSeparateEXT" */, + 2417 /* "glBlendEquationSeparate" */, + 2417 /* "glBlendEquationSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 2441 /* "glBlendEquationSeparateEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC +epoxy_glBlendEquationSeparateIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEOESPROC +epoxy_glBlendEquationSeparateOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_blend_equation_separate, 2502 /* glBlendEquationSeparateOES */); +} + +static PFNGLBLENDEQUATIONSEPARATEIPROC +epoxy_glBlendEquationSeparatei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2529 /* "glBlendEquationSeparatei" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEIARBPROC +epoxy_glBlendEquationSeparateiARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2554 /* "glBlendEquationSeparateiARB" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2554 /* "glBlendEquationSeparateiARB" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEIEXTPROC +epoxy_glBlendEquationSeparateiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2582 /* "glBlendEquationSeparateiEXT" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2610 /* "glBlendEquationSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2582 /* "glBlendEquationSeparateiEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONSEPARATEIOESPROC +epoxy_glBlendEquationSeparateiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2610 /* "glBlendEquationSeparateiOES" */, + 2468 /* "glBlendEquationSeparateIndexedAMD" */, + 2529 /* "glBlendEquationSeparatei" */, + 2529 /* "glBlendEquationSeparatei" */, + 2554 /* "glBlendEquationSeparateiARB" */, + 2582 /* "glBlendEquationSeparateiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2610 /* "glBlendEquationSeparateiOES" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIPROC +epoxy_glBlendEquationi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2655 /* "glBlendEquationiARB" */, + 2675 /* "glBlendEquationiEXT" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2638 /* "glBlendEquationi" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIARBPROC +epoxy_glBlendEquationiARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2655 /* "glBlendEquationiARB" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2675 /* "glBlendEquationiEXT" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2655 /* "glBlendEquationiARB" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIEXTPROC +epoxy_glBlendEquationiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2675 /* "glBlendEquationiEXT" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2655 /* "glBlendEquationiARB" */, + 2695 /* "glBlendEquationiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2675 /* "glBlendEquationiEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDEQUATIONIOESPROC +epoxy_glBlendEquationiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2695 /* "glBlendEquationiOES" */, + 2372 /* "glBlendEquationIndexedAMD" */, + 2638 /* "glBlendEquationi" */, + 2638 /* "glBlendEquationi" */, + 2655 /* "glBlendEquationiARB" */, + 2675 /* "glBlendEquationiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2695 /* "glBlendEquationiOES" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCPROC +epoxy_glBlendFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2715 /* "glBlendFunc" */, + 2715 /* "glBlendFunc" */, + 2715 /* "glBlendFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 2715 /* "glBlendFunc" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCINDEXEDAMDPROC +epoxy_glBlendFuncIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2975 /* "glBlendFunciARB" */, + 2991 /* "glBlendFunciEXT" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2727 /* "glBlendFuncIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEPROC +epoxy_glBlendFuncSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_func_separate, + GL_extension_GL_INGR_blend_func_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2749 /* "glBlendFuncSeparate" */, + 2749 /* "glBlendFuncSeparate" */, + 2769 /* "glBlendFuncSeparateEXT" */, + 2792 /* "glBlendFuncSeparateINGR" */, + }; + return gl_provider_resolver(entrypoint_strings + 2749 /* "glBlendFuncSeparate" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEEXTPROC +epoxy_glBlendFuncSeparateEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_separate, + Desktop_OpenGL_1_4, + OpenGL_ES_2_0, + GL_extension_GL_INGR_blend_func_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2769 /* "glBlendFuncSeparateEXT" */, + 2749 /* "glBlendFuncSeparate" */, + 2749 /* "glBlendFuncSeparate" */, + 2792 /* "glBlendFuncSeparateINGR" */, + }; + return gl_provider_resolver(entrypoint_strings + 2769 /* "glBlendFuncSeparateEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEINGRPROC +epoxy_glBlendFuncSeparateINGR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_INGR_blend_func_separate, + Desktop_OpenGL_1_4, + OpenGL_ES_2_0, + GL_extension_GL_EXT_blend_func_separate, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2792 /* "glBlendFuncSeparateINGR" */, + 2749 /* "glBlendFuncSeparate" */, + 2749 /* "glBlendFuncSeparate" */, + 2769 /* "glBlendFuncSeparateEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2792 /* "glBlendFuncSeparateINGR" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC +epoxy_glBlendFuncSeparateIndexedAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEOESPROC +epoxy_glBlendFuncSeparateOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_blend_func_separate, 2846 /* glBlendFuncSeparateOES */); +} + +static PFNGLBLENDFUNCSEPARATEIPROC +epoxy_glBlendFuncSeparatei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2869 /* "glBlendFuncSeparatei" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEIARBPROC +epoxy_glBlendFuncSeparateiARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2890 /* "glBlendFuncSeparateiARB" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2890 /* "glBlendFuncSeparateiARB" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEIEXTPROC +epoxy_glBlendFuncSeparateiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2914 /* "glBlendFuncSeparateiEXT" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2938 /* "glBlendFuncSeparateiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2914 /* "glBlendFuncSeparateiEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCSEPARATEIOESPROC +epoxy_glBlendFuncSeparateiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2938 /* "glBlendFuncSeparateiOES" */, + 2816 /* "glBlendFuncSeparateIndexedAMD" */, + 2869 /* "glBlendFuncSeparatei" */, + 2869 /* "glBlendFuncSeparatei" */, + 2890 /* "glBlendFuncSeparateiARB" */, + 2914 /* "glBlendFuncSeparateiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 2938 /* "glBlendFuncSeparateiOES" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIPROC +epoxy_glBlendFunci_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_AMD_draw_buffers_blend, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2975 /* "glBlendFunciARB" */, + 2991 /* "glBlendFunciEXT" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2962 /* "glBlendFunci" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIARBPROC +epoxy_glBlendFunciARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2975 /* "glBlendFunciARB" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2991 /* "glBlendFunciEXT" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2975 /* "glBlendFunciARB" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIEXTPROC +epoxy_glBlendFunciEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 2991 /* "glBlendFunciEXT" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2975 /* "glBlendFunciARB" */, + 3007 /* "glBlendFunciOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 2991 /* "glBlendFunciEXT" */, + providers, entrypoints); +} + +static PFNGLBLENDFUNCIOESPROC +epoxy_glBlendFunciOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_AMD_draw_buffers_blend, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_draw_buffers_blend, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3007 /* "glBlendFunciOES" */, + 2727 /* "glBlendFuncIndexedAMD" */, + 2962 /* "glBlendFunci" */, + 2962 /* "glBlendFunci" */, + 2975 /* "glBlendFunciARB" */, + 2991 /* "glBlendFunciEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3007 /* "glBlendFunciOES" */, + providers, entrypoints); +} + +static PFNGLBLENDPARAMETERINVPROC +epoxy_glBlendParameteriNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_blend_equation_advanced, 3023 /* glBlendParameteriNV */); +} + +static PFNGLBLITFRAMEBUFFERPROC +epoxy_glBlitFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_blit, + GL_extension_GL_NV_framebuffer_blit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3084 /* "glBlitFramebufferEXT" */, + 3105 /* "glBlitFramebufferNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 3043 /* "glBlitFramebuffer" */, + providers, entrypoints); +} + +static PFNGLBLITFRAMEBUFFERANGLEPROC +epoxy_glBlitFramebufferANGLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ANGLE_framebuffer_blit, 3061 /* glBlitFramebufferANGLE */); +} + +static PFNGLBLITFRAMEBUFFEREXTPROC +epoxy_glBlitFramebufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_blit, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_framebuffer_blit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3084 /* "glBlitFramebufferEXT" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3105 /* "glBlitFramebufferNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 3084 /* "glBlitFramebufferEXT" */, + providers, entrypoints); +} + +static PFNGLBLITFRAMEBUFFERNVPROC +epoxy_glBlitFramebufferNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_framebuffer_blit, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_blit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3105 /* "glBlitFramebufferNV" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3043 /* "glBlitFramebuffer" */, + 3084 /* "glBlitFramebufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3105 /* "glBlitFramebufferNV" */, + providers, entrypoints); +} + +static PFNGLBLITNAMEDFRAMEBUFFERPROC +epoxy_glBlitNamedFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3125 /* "glBlitNamedFramebuffer" */, + 3125 /* "glBlitNamedFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 3125 /* "glBlitNamedFramebuffer" */, + providers, entrypoints); +} + +static PFNGLBUFFERADDRESSRANGENVPROC +epoxy_glBufferAddressRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 3148 /* glBufferAddressRangeNV */); +} + +static PFNGLBUFFERDATAPROC +epoxy_glBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + 3184 /* "glBufferDataARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 3171 /* "glBufferData" */, + providers, entrypoints); +} + +static PFNGLBUFFERDATAARBPROC +epoxy_glBufferDataARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3184 /* "glBufferDataARB" */, + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + 3171 /* "glBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3184 /* "glBufferDataARB" */, + providers, entrypoints); +} + +static PFNGLBUFFERPAGECOMMITMENTARBPROC +epoxy_glBufferPageCommitmentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sparse_buffer, 3200 /* glBufferPageCommitmentARB */); +} + +static PFNGLBUFFERPARAMETERIAPPLEPROC +epoxy_glBufferParameteriAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_flush_buffer_range, 3226 /* glBufferParameteriAPPLE */); +} + +static PFNGLBUFFERSTORAGEPROC +epoxy_glBufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_buffer_storage, + GL_extension_GL_EXT_buffer_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3250 /* "glBufferStorage" */, + 3250 /* "glBufferStorage" */, + 3266 /* "glBufferStorageEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3250 /* "glBufferStorage" */, + providers, entrypoints); +} + +static PFNGLBUFFERSTORAGEEXTPROC +epoxy_glBufferStorageEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_buffer_storage, + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_buffer_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3266 /* "glBufferStorageEXT" */, + 3250 /* "glBufferStorage" */, + 3250 /* "glBufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 3266 /* "glBufferStorageEXT" */, + providers, entrypoints); +} + +static PFNGLBUFFERSUBDATAPROC +epoxy_glBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + 3301 /* "glBufferSubDataARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 3285 /* "glBufferSubData" */, + providers, entrypoints); +} + +static PFNGLBUFFERSUBDATAARBPROC +epoxy_glBufferSubDataARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3301 /* "glBufferSubDataARB" */, + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + 3285 /* "glBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3301 /* "glBufferSubDataARB" */, + providers, entrypoints); +} + +static PFNGLCALLCOMMANDLISTNVPROC +epoxy_glCallCommandListNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 3320 /* glCallCommandListNV */); +} + +static PFNGLCALLLISTPROC +epoxy_glCallList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3340 /* glCallList */); +} + +static PFNGLCALLLISTSPROC +epoxy_glCallLists_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3351 /* glCallLists */); +} + +static PFNGLCHECKFRAMEBUFFERSTATUSPROC +epoxy_glCheckFramebufferStatus_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + 3388 /* "glCheckFramebufferStatusEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 3363 /* "glCheckFramebufferStatus" */, + providers, entrypoints); +} + +static PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC +epoxy_glCheckFramebufferStatusEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3388 /* "glCheckFramebufferStatusEXT" */, + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + 3363 /* "glCheckFramebufferStatus" */, + }; + return gl_provider_resolver(entrypoint_strings + 3388 /* "glCheckFramebufferStatusEXT" */, + providers, entrypoints); +} + +static PFNGLCHECKFRAMEBUFFERSTATUSOESPROC +epoxy_glCheckFramebufferStatusOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 3416 /* glCheckFramebufferStatusOES */); +} + +static PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC +epoxy_glCheckNamedFramebufferStatus_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3444 /* "glCheckNamedFramebufferStatus" */, + 3444 /* "glCheckNamedFramebufferStatus" */, + }; + return gl_provider_resolver(entrypoint_strings + 3444 /* "glCheckNamedFramebufferStatus" */, + providers, entrypoints); +} + +static PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC +epoxy_glCheckNamedFramebufferStatusEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 3474 /* glCheckNamedFramebufferStatusEXT */); +} + +static PFNGLCLAMPCOLORPROC +epoxy_glClampColor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_color_buffer_float, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3507 /* "glClampColor" */, + 3520 /* "glClampColorARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 3507 /* "glClampColor" */, + providers, entrypoints); +} + +static PFNGLCLAMPCOLORARBPROC +epoxy_glClampColorARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_color_buffer_float, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3520 /* "glClampColorARB" */, + 3507 /* "glClampColor" */, + }; + return gl_provider_resolver(entrypoint_strings + 3520 /* "glClampColorARB" */, + providers, entrypoints); +} + +static PFNGLCLEARPROC +epoxy_glClear_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3536 /* "glClear" */, + 3536 /* "glClear" */, + 3536 /* "glClear" */, + }; + return gl_provider_resolver(entrypoint_strings + 3536 /* "glClear" */, + providers, entrypoints); +} + +static PFNGLCLEARACCUMPROC +epoxy_glClearAccum_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3544 /* glClearAccum */); +} + +static PFNGLCLEARACCUMXOESPROC +epoxy_glClearAccumxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 3557 /* glClearAccumxOES */); +} + +static PFNGLCLEARBUFFERDATAPROC +epoxy_glClearBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_clear_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3574 /* "glClearBufferData" */, + 3574 /* "glClearBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3574 /* "glClearBufferData" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERSUBDATAPROC +epoxy_glClearBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_clear_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3592 /* "glClearBufferSubData" */, + 3592 /* "glClearBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3592 /* "glClearBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERFIPROC +epoxy_glClearBufferfi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3613 /* "glClearBufferfi" */, + 3613 /* "glClearBufferfi" */, + }; + return gl_provider_resolver(entrypoint_strings + 3613 /* "glClearBufferfi" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERFVPROC +epoxy_glClearBufferfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3629 /* "glClearBufferfv" */, + 3629 /* "glClearBufferfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3629 /* "glClearBufferfv" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERIVPROC +epoxy_glClearBufferiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3645 /* "glClearBufferiv" */, + 3645 /* "glClearBufferiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3645 /* "glClearBufferiv" */, + providers, entrypoints); +} + +static PFNGLCLEARBUFFERUIVPROC +epoxy_glClearBufferuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3661 /* "glClearBufferuiv" */, + 3661 /* "glClearBufferuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3661 /* "glClearBufferuiv" */, + providers, entrypoints); +} + +static PFNGLCLEARCOLORPROC +epoxy_glClearColor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3678 /* "glClearColor" */, + 3678 /* "glClearColor" */, + 3678 /* "glClearColor" */, + }; + return gl_provider_resolver(entrypoint_strings + 3678 /* "glClearColor" */, + providers, entrypoints); +} + +static PFNGLCLEARCOLORIIEXTPROC +epoxy_glClearColorIiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_integer, 3691 /* glClearColorIiEXT */); +} + +static PFNGLCLEARCOLORIUIEXTPROC +epoxy_glClearColorIuiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_integer, 3709 /* glClearColorIuiEXT */); +} + +static PFNGLCLEARCOLORXPROC +epoxy_glClearColorx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 3728 /* glClearColorx */); +} + +static PFNGLCLEARCOLORXOESPROC +epoxy_glClearColorxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 3742 /* glClearColorxOES */); +} + +static PFNGLCLEARDEPTHPROC +epoxy_glClearDepth_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3759 /* glClearDepth */); +} + +static PFNGLCLEARDEPTHDNVPROC +epoxy_glClearDepthdNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_depth_buffer_float, 3772 /* glClearDepthdNV */); +} + +static PFNGLCLEARDEPTHFPROC +epoxy_glClearDepthf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_OES_single_precision, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3802 /* "glClearDepthfOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 3788 /* "glClearDepthf" */, + providers, entrypoints); +} + +static PFNGLCLEARDEPTHFOESPROC +epoxy_glClearDepthfOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_single_precision, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3802 /* "glClearDepthfOES" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + 3788 /* "glClearDepthf" */, + }; + return gl_provider_resolver(entrypoint_strings + 3802 /* "glClearDepthfOES" */, + providers, entrypoints); +} + +static PFNGLCLEARDEPTHXPROC +epoxy_glClearDepthx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 3819 /* glClearDepthx */); +} + +static PFNGLCLEARDEPTHXOESPROC +epoxy_glClearDepthxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 3833 /* glClearDepthxOES */); +} + +static PFNGLCLEARINDEXPROC +epoxy_glClearIndex_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 3850 /* glClearIndex */); +} + +static PFNGLCLEARNAMEDBUFFERDATAPROC +epoxy_glClearNamedBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3863 /* "glClearNamedBufferData" */, + 3863 /* "glClearNamedBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3863 /* "glClearNamedBufferData" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDBUFFERDATAEXTPROC +epoxy_glClearNamedBufferDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 3886 /* glClearNamedBufferDataEXT */); +} + +static PFNGLCLEARNAMEDBUFFERSUBDATAPROC +epoxy_glClearNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3912 /* "glClearNamedBufferSubData" */, + 3912 /* "glClearNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 3912 /* "glClearNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC +epoxy_glClearNamedBufferSubDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 3938 /* glClearNamedBufferSubDataEXT */); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERFIPROC +epoxy_glClearNamedFramebufferfi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3967 /* "glClearNamedFramebufferfi" */, + 3967 /* "glClearNamedFramebufferfi" */, + }; + return gl_provider_resolver(entrypoint_strings + 3967 /* "glClearNamedFramebufferfi" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERFVPROC +epoxy_glClearNamedFramebufferfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 3993 /* "glClearNamedFramebufferfv" */, + 3993 /* "glClearNamedFramebufferfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 3993 /* "glClearNamedFramebufferfv" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERIVPROC +epoxy_glClearNamedFramebufferiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4019 /* "glClearNamedFramebufferiv" */, + 4019 /* "glClearNamedFramebufferiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 4019 /* "glClearNamedFramebufferiv" */, + providers, entrypoints); +} + +static PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC +epoxy_glClearNamedFramebufferuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4045 /* "glClearNamedFramebufferuiv" */, + 4045 /* "glClearNamedFramebufferuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 4045 /* "glClearNamedFramebufferuiv" */, + providers, entrypoints); +} + +static PFNGLCLEARSTENCILPROC +epoxy_glClearStencil_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4072 /* "glClearStencil" */, + 4072 /* "glClearStencil" */, + 4072 /* "glClearStencil" */, + }; + return gl_provider_resolver(entrypoint_strings + 4072 /* "glClearStencil" */, + providers, entrypoints); +} + +static PFNGLCLEARTEXIMAGEPROC +epoxy_glClearTexImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_clear_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4087 /* "glClearTexImage" */, + 4087 /* "glClearTexImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 4087 /* "glClearTexImage" */, + providers, entrypoints); +} + +static PFNGLCLEARTEXSUBIMAGEPROC +epoxy_glClearTexSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_4, + GL_extension_GL_ARB_clear_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4103 /* "glClearTexSubImage" */, + 4103 /* "glClearTexSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 4103 /* "glClearTexSubImage" */, + providers, entrypoints); +} + +static PFNGLCLIENTACTIVETEXTUREPROC +epoxy_glClientActiveTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4122 /* "glClientActiveTexture" */, + 4122 /* "glClientActiveTexture" */, + 4144 /* "glClientActiveTextureARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 4122 /* "glClientActiveTexture" */, + providers, entrypoints); +} + +static PFNGLCLIENTACTIVETEXTUREARBPROC +epoxy_glClientActiveTextureARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4144 /* "glClientActiveTextureARB" */, + 4122 /* "glClientActiveTexture" */, + 4122 /* "glClientActiveTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 4144 /* "glClientActiveTextureARB" */, + providers, entrypoints); +} + +static PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC +epoxy_glClientActiveVertexStreamATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 4169 /* glClientActiveVertexStreamATI */); +} + +static PFNGLCLIENTATTRIBDEFAULTEXTPROC +epoxy_glClientAttribDefaultEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 4199 /* glClientAttribDefaultEXT */); +} + +static PFNGLCLIENTWAITSYNCPROC +epoxy_glClientWaitSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + 4241 /* "glClientWaitSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 4224 /* "glClientWaitSync" */, + providers, entrypoints); +} + +static PFNGLCLIENTWAITSYNCAPPLEPROC +epoxy_glClientWaitSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4241 /* "glClientWaitSyncAPPLE" */, + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + 4224 /* "glClientWaitSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 4241 /* "glClientWaitSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLCLIPCONTROLPROC +epoxy_glClipControl_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_clip_control, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4263 /* "glClipControl" */, + 4263 /* "glClipControl" */, + }; + return gl_provider_resolver(entrypoint_strings + 4263 /* "glClipControl" */, + providers, entrypoints); +} + +static PFNGLCLIPPLANEPROC +epoxy_glClipPlane_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4277 /* glClipPlane */); +} + +static PFNGLCLIPPLANEFPROC +epoxy_glClipPlanef_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 4289 /* glClipPlanef */); +} + +static PFNGLCLIPPLANEFIMGPROC +epoxy_glClipPlanefIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_user_clip_plane, 4302 /* glClipPlanefIMG */); +} + +static PFNGLCLIPPLANEFOESPROC +epoxy_glClipPlanefOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 4318 /* glClipPlanefOES */); +} + +static PFNGLCLIPPLANEXPROC +epoxy_glClipPlanex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 4334 /* glClipPlanex */); +} + +static PFNGLCLIPPLANEXIMGPROC +epoxy_glClipPlanexIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_user_clip_plane, 4347 /* glClipPlanexIMG */); +} + +static PFNGLCLIPPLANEXOESPROC +epoxy_glClipPlanexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 4363 /* glClipPlanexOES */); +} + +static PFNGLCOLOR3BPROC +epoxy_glColor3b_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4379 /* glColor3b */); +} + +static PFNGLCOLOR3BVPROC +epoxy_glColor3bv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4389 /* glColor3bv */); +} + +static PFNGLCOLOR3DPROC +epoxy_glColor3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4400 /* glColor3d */); +} + +static PFNGLCOLOR3DVPROC +epoxy_glColor3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4410 /* glColor3dv */); +} + +static PFNGLCOLOR3FPROC +epoxy_glColor3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4421 /* glColor3f */); +} + +static PFNGLCOLOR3FVERTEX3FSUNPROC +epoxy_glColor3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4431 /* glColor3fVertex3fSUN */); +} + +static PFNGLCOLOR3FVERTEX3FVSUNPROC +epoxy_glColor3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4452 /* glColor3fVertex3fvSUN */); +} + +static PFNGLCOLOR3FVPROC +epoxy_glColor3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4474 /* glColor3fv */); +} + +static PFNGLCOLOR3HNVPROC +epoxy_glColor3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4485 /* glColor3hNV */); +} + +static PFNGLCOLOR3HVNVPROC +epoxy_glColor3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4497 /* glColor3hvNV */); +} + +static PFNGLCOLOR3IPROC +epoxy_glColor3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4510 /* glColor3i */); +} + +static PFNGLCOLOR3IVPROC +epoxy_glColor3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4520 /* glColor3iv */); +} + +static PFNGLCOLOR3SPROC +epoxy_glColor3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4531 /* glColor3s */); +} + +static PFNGLCOLOR3SVPROC +epoxy_glColor3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4541 /* glColor3sv */); +} + +static PFNGLCOLOR3UBPROC +epoxy_glColor3ub_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4552 /* glColor3ub */); +} + +static PFNGLCOLOR3UBVPROC +epoxy_glColor3ubv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4563 /* glColor3ubv */); +} + +static PFNGLCOLOR3UIPROC +epoxy_glColor3ui_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4575 /* glColor3ui */); +} + +static PFNGLCOLOR3UIVPROC +epoxy_glColor3uiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4586 /* glColor3uiv */); +} + +static PFNGLCOLOR3USPROC +epoxy_glColor3us_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4598 /* glColor3us */); +} + +static PFNGLCOLOR3USVPROC +epoxy_glColor3usv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4609 /* glColor3usv */); +} + +static PFNGLCOLOR3XOESPROC +epoxy_glColor3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 4621 /* glColor3xOES */); +} + +static PFNGLCOLOR3XVOESPROC +epoxy_glColor3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 4634 /* glColor3xvOES */); +} + +static PFNGLCOLOR4BPROC +epoxy_glColor4b_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4648 /* glColor4b */); +} + +static PFNGLCOLOR4BVPROC +epoxy_glColor4bv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4658 /* glColor4bv */); +} + +static PFNGLCOLOR4DPROC +epoxy_glColor4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4669 /* glColor4d */); +} + +static PFNGLCOLOR4DVPROC +epoxy_glColor4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4679 /* glColor4dv */); +} + +static PFNGLCOLOR4FPROC +epoxy_glColor4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4690 /* "glColor4f" */, + 4690 /* "glColor4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 4690 /* "glColor4f" */, + providers, entrypoints); +} + +static PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4700 /* glColor4fNormal3fVertex3fSUN */); +} + +static PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4729 /* glColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLCOLOR4FVPROC +epoxy_glColor4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4759 /* glColor4fv */); +} + +static PFNGLCOLOR4HNVPROC +epoxy_glColor4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4770 /* glColor4hNV */); +} + +static PFNGLCOLOR4HVNVPROC +epoxy_glColor4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 4782 /* glColor4hvNV */); +} + +static PFNGLCOLOR4IPROC +epoxy_glColor4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4795 /* glColor4i */); +} + +static PFNGLCOLOR4IVPROC +epoxy_glColor4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4805 /* glColor4iv */); +} + +static PFNGLCOLOR4SPROC +epoxy_glColor4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4816 /* glColor4s */); +} + +static PFNGLCOLOR4SVPROC +epoxy_glColor4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4826 /* glColor4sv */); +} + +static PFNGLCOLOR4UBPROC +epoxy_glColor4ub_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 4837 /* "glColor4ub" */, + 4837 /* "glColor4ub" */, + }; + return gl_provider_resolver(entrypoint_strings + 4837 /* "glColor4ub" */, + providers, entrypoints); +} + +static PFNGLCOLOR4UBVERTEX2FSUNPROC +epoxy_glColor4ubVertex2fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4848 /* glColor4ubVertex2fSUN */); +} + +static PFNGLCOLOR4UBVERTEX2FVSUNPROC +epoxy_glColor4ubVertex2fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4870 /* glColor4ubVertex2fvSUN */); +} + +static PFNGLCOLOR4UBVERTEX3FSUNPROC +epoxy_glColor4ubVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4893 /* glColor4ubVertex3fSUN */); +} + +static PFNGLCOLOR4UBVERTEX3FVSUNPROC +epoxy_glColor4ubVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 4915 /* glColor4ubVertex3fvSUN */); +} + +static PFNGLCOLOR4UBVPROC +epoxy_glColor4ubv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4938 /* glColor4ubv */); +} + +static PFNGLCOLOR4UIPROC +epoxy_glColor4ui_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4950 /* glColor4ui */); +} + +static PFNGLCOLOR4UIVPROC +epoxy_glColor4uiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4961 /* glColor4uiv */); +} + +static PFNGLCOLOR4USPROC +epoxy_glColor4us_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4973 /* glColor4us */); +} + +static PFNGLCOLOR4USVPROC +epoxy_glColor4usv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 4984 /* glColor4usv */); +} + +static PFNGLCOLOR4XPROC +epoxy_glColor4x_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 4996 /* glColor4x */); +} + +static PFNGLCOLOR4XOESPROC +epoxy_glColor4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 5006 /* glColor4xOES */); +} + +static PFNGLCOLOR4XVOESPROC +epoxy_glColor4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 5019 /* glColor4xvOES */); +} + +static PFNGLCOLORFORMATNVPROC +epoxy_glColorFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 5033 /* glColorFormatNV */); +} + +static PFNGLCOLORFRAGMENTOP1ATIPROC +epoxy_glColorFragmentOp1ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 5049 /* glColorFragmentOp1ATI */); +} + +static PFNGLCOLORFRAGMENTOP2ATIPROC +epoxy_glColorFragmentOp2ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 5071 /* glColorFragmentOp2ATI */); +} + +static PFNGLCOLORFRAGMENTOP3ATIPROC +epoxy_glColorFragmentOp3ATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 5093 /* glColorFragmentOp3ATI */); +} + +static PFNGLCOLORMASKPROC +epoxy_glColorMask_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5115 /* "glColorMask" */, + 5115 /* "glColorMask" */, + 5115 /* "glColorMask" */, + }; + return gl_provider_resolver(entrypoint_strings + 5115 /* "glColorMask" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKINDEXEDEXTPROC +epoxy_glColorMaskIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5127 /* "glColorMaskIndexedEXT" */, + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5162 /* "glColorMaskiEXT" */, + 5178 /* "glColorMaskiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 5127 /* "glColorMaskIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKIPROC +epoxy_glColorMaski_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5127 /* "glColorMaskIndexedEXT" */, + 5162 /* "glColorMaskiEXT" */, + 5178 /* "glColorMaskiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 5149 /* "glColorMaski" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKIEXTPROC +epoxy_glColorMaskiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5162 /* "glColorMaskiEXT" */, + 5127 /* "glColorMaskIndexedEXT" */, + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5178 /* "glColorMaskiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 5162 /* "glColorMaskiEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORMASKIOESPROC +epoxy_glColorMaskiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5178 /* "glColorMaskiOES" */, + 5127 /* "glColorMaskIndexedEXT" */, + 5149 /* "glColorMaski" */, + 5149 /* "glColorMaski" */, + 5162 /* "glColorMaskiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 5178 /* "glColorMaskiOES" */, + providers, entrypoints); +} + +static PFNGLCOLORMATERIALPROC +epoxy_glColorMaterial_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 5194 /* glColorMaterial */); +} + +static PFNGLCOLORP3UIPROC +epoxy_glColorP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5210 /* "glColorP3ui" */, + 5210 /* "glColorP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 5210 /* "glColorP3ui" */, + providers, entrypoints); +} + +static PFNGLCOLORP3UIVPROC +epoxy_glColorP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5222 /* "glColorP3uiv" */, + 5222 /* "glColorP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5222 /* "glColorP3uiv" */, + providers, entrypoints); +} + +static PFNGLCOLORP4UIPROC +epoxy_glColorP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5235 /* "glColorP4ui" */, + 5235 /* "glColorP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 5235 /* "glColorP4ui" */, + providers, entrypoints); +} + +static PFNGLCOLORP4UIVPROC +epoxy_glColorP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5247 /* "glColorP4uiv" */, + 5247 /* "glColorP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5247 /* "glColorP4uiv" */, + providers, entrypoints); +} + +static PFNGLCOLORPOINTERPROC +epoxy_glColorPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5260 /* "glColorPointer" */, + 5260 /* "glColorPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 5260 /* "glColorPointer" */, + providers, entrypoints); +} + +static PFNGLCOLORPOINTEREXTPROC +epoxy_glColorPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 5275 /* glColorPointerEXT */); +} + +static PFNGLCOLORPOINTERLISTIBMPROC +epoxy_glColorPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 5293 /* glColorPointerListIBM */); +} + +static PFNGLCOLORPOINTERVINTELPROC +epoxy_glColorPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 5315 /* glColorPointervINTEL */); +} + +static PFNGLCOLORSUBTABLEPROC +epoxy_glColorSubTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_color_subtable, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5336 /* "glColorSubTable" */, + 5352 /* "glColorSubTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 5336 /* "glColorSubTable" */, + providers, entrypoints); +} + +static PFNGLCOLORSUBTABLEEXTPROC +epoxy_glColorSubTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_color_subtable, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5352 /* "glColorSubTableEXT" */, + 5336 /* "glColorSubTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 5352 /* "glColorSubTableEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPROC +epoxy_glColorTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5371 /* "glColorTable" */, + 5384 /* "glColorTableEXT" */, + 5502 /* "glColorTableSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5371 /* "glColorTable" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEEXTPROC +epoxy_glColorTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5384 /* "glColorTableEXT" */, + 5371 /* "glColorTable" */, + 5502 /* "glColorTableSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5384 /* "glColorTableEXT" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERFVPROC +epoxy_glColorTableParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5400 /* "glColorTableParameterfv" */, + 5424 /* "glColorTableParameterfvSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5400 /* "glColorTableParameterfv" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERFVSGIPROC +epoxy_glColorTableParameterfvSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5424 /* "glColorTableParameterfvSGI" */, + 5400 /* "glColorTableParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5424 /* "glColorTableParameterfvSGI" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERIVPROC +epoxy_glColorTableParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5451 /* "glColorTableParameteriv" */, + 5475 /* "glColorTableParameterivSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 5451 /* "glColorTableParameteriv" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLEPARAMETERIVSGIPROC +epoxy_glColorTableParameterivSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5475 /* "glColorTableParameterivSGI" */, + 5451 /* "glColorTableParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 5475 /* "glColorTableParameterivSGI" */, + providers, entrypoints); +} + +static PFNGLCOLORTABLESGIPROC +epoxy_glColorTableSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5502 /* "glColorTableSGI" */, + 5371 /* "glColorTable" */, + 5384 /* "glColorTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 5502 /* "glColorTableSGI" */, + providers, entrypoints); +} + +static PFNGLCOMBINERINPUTNVPROC +epoxy_glCombinerInputNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5518 /* glCombinerInputNV */); +} + +static PFNGLCOMBINEROUTPUTNVPROC +epoxy_glCombinerOutputNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5536 /* glCombinerOutputNV */); +} + +static PFNGLCOMBINERPARAMETERFNVPROC +epoxy_glCombinerParameterfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5555 /* glCombinerParameterfNV */); +} + +static PFNGLCOMBINERPARAMETERFVNVPROC +epoxy_glCombinerParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5578 /* glCombinerParameterfvNV */); +} + +static PFNGLCOMBINERPARAMETERINVPROC +epoxy_glCombinerParameteriNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5602 /* glCombinerParameteriNV */); +} + +static PFNGLCOMBINERPARAMETERIVNVPROC +epoxy_glCombinerParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 5625 /* glCombinerParameterivNV */); +} + +static PFNGLCOMBINERSTAGEPARAMETERFVNVPROC +epoxy_glCombinerStageParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners2, 5649 /* glCombinerStageParameterfvNV */); +} + +static PFNGLCOMMANDLISTSEGMENTSNVPROC +epoxy_glCommandListSegmentsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 5678 /* glCommandListSegmentsNV */); +} + +static PFNGLCOMPILECOMMANDLISTNVPROC +epoxy_glCompileCommandListNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 5702 /* glCompileCommandListNV */); +} + +static PFNGLCOMPILESHADERPROC +epoxy_glCompileShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5725 /* "glCompileShader" */, + 5725 /* "glCompileShader" */, + 5741 /* "glCompileShaderARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 5725 /* "glCompileShader" */, + providers, entrypoints); +} + +static PFNGLCOMPILESHADERARBPROC +epoxy_glCompileShaderARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5741 /* "glCompileShaderARB" */, + 5725 /* "glCompileShader" */, + 5725 /* "glCompileShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 5741 /* "glCompileShaderARB" */, + providers, entrypoints); +} + +static PFNGLCOMPILESHADERINCLUDEARBPROC +epoxy_glCompileShaderIncludeARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 5760 /* glCompileShaderIncludeARB */); +} + +static PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC +epoxy_glCompressedMultiTexImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5786 /* glCompressedMultiTexImage1DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC +epoxy_glCompressedMultiTexImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5817 /* glCompressedMultiTexImage2DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC +epoxy_glCompressedMultiTexImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5848 /* glCompressedMultiTexImage3DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC +epoxy_glCompressedMultiTexSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5879 /* glCompressedMultiTexSubImage1DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC +epoxy_glCompressedMultiTexSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5913 /* glCompressedMultiTexSubImage2DEXT */); +} + +static PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC +epoxy_glCompressedMultiTexSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 5947 /* glCompressedMultiTexSubImage3DEXT */); +} + +static PFNGLCOMPRESSEDTEXIMAGE1DPROC +epoxy_glCompressedTexImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 5981 /* "glCompressedTexImage1D" */, + 6004 /* "glCompressedTexImage1DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 5981 /* "glCompressedTexImage1D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE1DARBPROC +epoxy_glCompressedTexImage1DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6004 /* "glCompressedTexImage1DARB" */, + 5981 /* "glCompressedTexImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6004 /* "glCompressedTexImage1DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE2DPROC +epoxy_glCompressedTexImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + 6053 /* "glCompressedTexImage2DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6030 /* "glCompressedTexImage2D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE2DARBPROC +epoxy_glCompressedTexImage2DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6053 /* "glCompressedTexImage2DARB" */, + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + 6030 /* "glCompressedTexImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6053 /* "glCompressedTexImage2DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE3DPROC +epoxy_glCompressedTexImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6079 /* "glCompressedTexImage3D" */, + 6079 /* "glCompressedTexImage3D" */, + 6102 /* "glCompressedTexImage3DARB" */, + 6128 /* "glCompressedTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6079 /* "glCompressedTexImage3D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE3DARBPROC +epoxy_glCompressedTexImage3DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6102 /* "glCompressedTexImage3DARB" */, + 6079 /* "glCompressedTexImage3D" */, + 6079 /* "glCompressedTexImage3D" */, + 6128 /* "glCompressedTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6102 /* "glCompressedTexImage3DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXIMAGE3DOESPROC +epoxy_glCompressedTexImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6128 /* "glCompressedTexImage3DOES" */, + 6079 /* "glCompressedTexImage3D" */, + 6079 /* "glCompressedTexImage3D" */, + 6102 /* "glCompressedTexImage3DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6128 /* "glCompressedTexImage3DOES" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC +epoxy_glCompressedTexSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6154 /* "glCompressedTexSubImage1D" */, + 6180 /* "glCompressedTexSubImage1DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6154 /* "glCompressedTexSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC +epoxy_glCompressedTexSubImage1DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6180 /* "glCompressedTexSubImage1DARB" */, + 6154 /* "glCompressedTexSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6180 /* "glCompressedTexSubImage1DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC +epoxy_glCompressedTexSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6235 /* "glCompressedTexSubImage2DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6209 /* "glCompressedTexSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC +epoxy_glCompressedTexSubImage2DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6235 /* "glCompressedTexSubImage2DARB" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + 6209 /* "glCompressedTexSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6235 /* "glCompressedTexSubImage2DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC +epoxy_glCompressedTexSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6264 /* "glCompressedTexSubImage3D" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6290 /* "glCompressedTexSubImage3DARB" */, + 6319 /* "glCompressedTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6264 /* "glCompressedTexSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC +epoxy_glCompressedTexSubImage3DARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6290 /* "glCompressedTexSubImage3DARB" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6319 /* "glCompressedTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 6290 /* "glCompressedTexSubImage3DARB" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC +epoxy_glCompressedTexSubImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6319 /* "glCompressedTexSubImage3DOES" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6264 /* "glCompressedTexSubImage3D" */, + 6290 /* "glCompressedTexSubImage3DARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 6319 /* "glCompressedTexSubImage3DOES" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC +epoxy_glCompressedTextureImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6348 /* glCompressedTextureImage1DEXT */); +} + +static PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC +epoxy_glCompressedTextureImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6378 /* glCompressedTextureImage2DEXT */); +} + +static PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC +epoxy_glCompressedTextureImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6408 /* glCompressedTextureImage3DEXT */); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC +epoxy_glCompressedTextureSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6438 /* "glCompressedTextureSubImage1D" */, + 6438 /* "glCompressedTextureSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6438 /* "glCompressedTextureSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC +epoxy_glCompressedTextureSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6468 /* glCompressedTextureSubImage1DEXT */); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC +epoxy_glCompressedTextureSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6501 /* "glCompressedTextureSubImage2D" */, + 6501 /* "glCompressedTextureSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6501 /* "glCompressedTextureSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC +epoxy_glCompressedTextureSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6531 /* glCompressedTextureSubImage2DEXT */); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC +epoxy_glCompressedTextureSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6564 /* "glCompressedTextureSubImage3D" */, + 6564 /* "glCompressedTextureSubImage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6564 /* "glCompressedTextureSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC +epoxy_glCompressedTextureSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 6594 /* glCompressedTextureSubImage3DEXT */); +} + +static PFNGLCONSERVATIVERASTERPARAMETERFNVPROC +epoxy_glConservativeRasterParameterfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_conservative_raster_dilate, 6627 /* glConservativeRasterParameterfNV */); +} + +static PFNGLCONVOLUTIONFILTER1DPROC +epoxy_glConvolutionFilter1D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6660 /* "glConvolutionFilter1D" */, + 6682 /* "glConvolutionFilter1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6660 /* "glConvolutionFilter1D" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONFILTER1DEXTPROC +epoxy_glConvolutionFilter1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6682 /* "glConvolutionFilter1DEXT" */, + 6660 /* "glConvolutionFilter1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6682 /* "glConvolutionFilter1DEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONFILTER2DPROC +epoxy_glConvolutionFilter2D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6707 /* "glConvolutionFilter2D" */, + 6729 /* "glConvolutionFilter2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6707 /* "glConvolutionFilter2D" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONFILTER2DEXTPROC +epoxy_glConvolutionFilter2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6729 /* "glConvolutionFilter2DEXT" */, + 6707 /* "glConvolutionFilter2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 6729 /* "glConvolutionFilter2DEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFPROC +epoxy_glConvolutionParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6754 /* "glConvolutionParameterf" */, + 6778 /* "glConvolutionParameterfEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6754 /* "glConvolutionParameterf" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFEXTPROC +epoxy_glConvolutionParameterfEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6778 /* "glConvolutionParameterfEXT" */, + 6754 /* "glConvolutionParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 6778 /* "glConvolutionParameterfEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFVPROC +epoxy_glConvolutionParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6805 /* "glConvolutionParameterfv" */, + 6830 /* "glConvolutionParameterfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6805 /* "glConvolutionParameterfv" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERFVEXTPROC +epoxy_glConvolutionParameterfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6830 /* "glConvolutionParameterfvEXT" */, + 6805 /* "glConvolutionParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 6830 /* "glConvolutionParameterfvEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIPROC +epoxy_glConvolutionParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6858 /* "glConvolutionParameteri" */, + 6882 /* "glConvolutionParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6858 /* "glConvolutionParameteri" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIEXTPROC +epoxy_glConvolutionParameteriEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6882 /* "glConvolutionParameteriEXT" */, + 6858 /* "glConvolutionParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 6882 /* "glConvolutionParameteriEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIVPROC +epoxy_glConvolutionParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6909 /* "glConvolutionParameteriv" */, + 6934 /* "glConvolutionParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 6909 /* "glConvolutionParameteriv" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERIVEXTPROC +epoxy_glConvolutionParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 6934 /* "glConvolutionParameterivEXT" */, + 6909 /* "glConvolutionParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 6934 /* "glConvolutionParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLCONVOLUTIONPARAMETERXOESPROC +epoxy_glConvolutionParameterxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 6962 /* glConvolutionParameterxOES */); +} + +static PFNGLCONVOLUTIONPARAMETERXVOESPROC +epoxy_glConvolutionParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 6989 /* glConvolutionParameterxvOES */); +} + +static PFNGLCOPYBUFFERSUBDATAPROC +epoxy_glCopyBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_copy_buffer, + OpenGL_ES_3_0, + GL_extension_GL_NV_copy_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + 7037 /* "glCopyBufferSubDataNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 7017 /* "glCopyBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCOPYBUFFERSUBDATANVPROC +epoxy_glCopyBufferSubDataNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_copy_buffer, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_copy_buffer, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7037 /* "glCopyBufferSubDataNV" */, + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + 7017 /* "glCopyBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 7037 /* "glCopyBufferSubDataNV" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORSUBTABLEPROC +epoxy_glCopyColorSubTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_color_subtable, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7059 /* "glCopyColorSubTable" */, + 7079 /* "glCopyColorSubTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7059 /* "glCopyColorSubTable" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORSUBTABLEEXTPROC +epoxy_glCopyColorSubTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_color_subtable, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7079 /* "glCopyColorSubTableEXT" */, + 7059 /* "glCopyColorSubTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 7079 /* "glCopyColorSubTableEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORTABLEPROC +epoxy_glCopyColorTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_SGI_color_table, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7102 /* "glCopyColorTable" */, + 7119 /* "glCopyColorTableSGI" */, + }; + return gl_provider_resolver(entrypoint_strings + 7102 /* "glCopyColorTable" */, + providers, entrypoints); +} + +static PFNGLCOPYCOLORTABLESGIPROC +epoxy_glCopyColorTableSGI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGI_color_table, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7119 /* "glCopyColorTableSGI" */, + 7102 /* "glCopyColorTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 7119 /* "glCopyColorTableSGI" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER1DPROC +epoxy_glCopyConvolutionFilter1D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7139 /* "glCopyConvolutionFilter1D" */, + 7165 /* "glCopyConvolutionFilter1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7139 /* "glCopyConvolutionFilter1D" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC +epoxy_glCopyConvolutionFilter1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7165 /* "glCopyConvolutionFilter1DEXT" */, + 7139 /* "glCopyConvolutionFilter1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7165 /* "glCopyConvolutionFilter1DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER2DPROC +epoxy_glCopyConvolutionFilter2D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7194 /* "glCopyConvolutionFilter2D" */, + 7220 /* "glCopyConvolutionFilter2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7194 /* "glCopyConvolutionFilter2D" */, + providers, entrypoints); +} + +static PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC +epoxy_glCopyConvolutionFilter2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7220 /* "glCopyConvolutionFilter2DEXT" */, + 7194 /* "glCopyConvolutionFilter2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7220 /* "glCopyConvolutionFilter2DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYIMAGESUBDATAPROC +epoxy_glCopyImageSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_copy_image, + OpenGL_ES_3_2, + GL_extension_GL_EXT_copy_image, + GL_extension_GL_OES_copy_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7268 /* "glCopyImageSubDataEXT" */, + 7311 /* "glCopyImageSubDataOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7249 /* "glCopyImageSubData" */, + providers, entrypoints); +} + +static PFNGLCOPYIMAGESUBDATAEXTPROC +epoxy_glCopyImageSubDataEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_image, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_copy_image, + OpenGL_ES_3_2, + GL_extension_GL_OES_copy_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7268 /* "glCopyImageSubDataEXT" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7311 /* "glCopyImageSubDataOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7268 /* "glCopyImageSubDataEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYIMAGESUBDATANVPROC +epoxy_glCopyImageSubDataNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_copy_image, 7290 /* glCopyImageSubDataNV */); +} + +static PFNGLCOPYIMAGESUBDATAOESPROC +epoxy_glCopyImageSubDataOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_copy_image, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_copy_image, + OpenGL_ES_3_2, + GL_extension_GL_EXT_copy_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7311 /* "glCopyImageSubDataOES" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7249 /* "glCopyImageSubData" */, + 7268 /* "glCopyImageSubDataEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7311 /* "glCopyImageSubDataOES" */, + providers, entrypoints); +} + +static PFNGLCOPYMULTITEXIMAGE1DEXTPROC +epoxy_glCopyMultiTexImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7333 /* glCopyMultiTexImage1DEXT */); +} + +static PFNGLCOPYMULTITEXIMAGE2DEXTPROC +epoxy_glCopyMultiTexImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7358 /* glCopyMultiTexImage2DEXT */); +} + +static PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC +epoxy_glCopyMultiTexSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7383 /* glCopyMultiTexSubImage1DEXT */); +} + +static PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC +epoxy_glCopyMultiTexSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7411 /* glCopyMultiTexSubImage2DEXT */); +} + +static PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC +epoxy_glCopyMultiTexSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7439 /* glCopyMultiTexSubImage3DEXT */); +} + +static PFNGLCOPYNAMEDBUFFERSUBDATAPROC +epoxy_glCopyNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7467 /* "glCopyNamedBufferSubData" */, + 7467 /* "glCopyNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 7467 /* "glCopyNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLCOPYPATHNVPROC +epoxy_glCopyPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 7492 /* glCopyPathNV */); +} + +static PFNGLCOPYPIXELSPROC +epoxy_glCopyPixels_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 7505 /* glCopyPixels */); +} + +static PFNGLCOPYTEXIMAGE1DPROC +epoxy_glCopyTexImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7518 /* "glCopyTexImage1D" */, + 7535 /* "glCopyTexImage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7518 /* "glCopyTexImage1D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXIMAGE1DEXTPROC +epoxy_glCopyTexImage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7535 /* "glCopyTexImage1DEXT" */, + 7518 /* "glCopyTexImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7535 /* "glCopyTexImage1DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXIMAGE2DPROC +epoxy_glCopyTexImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + 7572 /* "glCopyTexImage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7555 /* "glCopyTexImage2D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXIMAGE2DEXTPROC +epoxy_glCopyTexImage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7572 /* "glCopyTexImage2DEXT" */, + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + 7555 /* "glCopyTexImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7572 /* "glCopyTexImage2DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE1DPROC +epoxy_glCopyTexSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7592 /* "glCopyTexSubImage1D" */, + 7612 /* "glCopyTexSubImage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7592 /* "glCopyTexSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE1DEXTPROC +epoxy_glCopyTexSubImage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7612 /* "glCopyTexSubImage1DEXT" */, + 7592 /* "glCopyTexSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7612 /* "glCopyTexSubImage1DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE2DPROC +epoxy_glCopyTexSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + 7655 /* "glCopyTexSubImage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7635 /* "glCopyTexSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE2DEXTPROC +epoxy_glCopyTexSubImage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7655 /* "glCopyTexSubImage2DEXT" */, + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + 7635 /* "glCopyTexSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7655 /* "glCopyTexSubImage2DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE3DPROC +epoxy_glCopyTexSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_copy_texture, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7678 /* "glCopyTexSubImage3D" */, + 7678 /* "glCopyTexSubImage3D" */, + 7698 /* "glCopyTexSubImage3DEXT" */, + 7721 /* "glCopyTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7678 /* "glCopyTexSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE3DEXTPROC +epoxy_glCopyTexSubImage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_copy_texture, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7698 /* "glCopyTexSubImage3DEXT" */, + 7678 /* "glCopyTexSubImage3D" */, + 7678 /* "glCopyTexSubImage3D" */, + 7721 /* "glCopyTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 7698 /* "glCopyTexSubImage3DEXT" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXSUBIMAGE3DOESPROC +epoxy_glCopyTexSubImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_copy_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7721 /* "glCopyTexSubImage3DOES" */, + 7678 /* "glCopyTexSubImage3D" */, + 7678 /* "glCopyTexSubImage3D" */, + 7698 /* "glCopyTexSubImage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 7721 /* "glCopyTexSubImage3DOES" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTUREIMAGE1DEXTPROC +epoxy_glCopyTextureImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7744 /* glCopyTextureImage1DEXT */); +} + +static PFNGLCOPYTEXTUREIMAGE2DEXTPROC +epoxy_glCopyTextureImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7768 /* glCopyTextureImage2DEXT */); +} + +static PFNGLCOPYTEXTURELEVELSAPPLEPROC +epoxy_glCopyTextureLevelsAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_copy_texture_levels, 7792 /* glCopyTextureLevelsAPPLE */); +} + +static PFNGLCOPYTEXTURESUBIMAGE1DPROC +epoxy_glCopyTextureSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7817 /* "glCopyTextureSubImage1D" */, + 7817 /* "glCopyTextureSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7817 /* "glCopyTextureSubImage1D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC +epoxy_glCopyTextureSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7841 /* glCopyTextureSubImage1DEXT */); +} + +static PFNGLCOPYTEXTURESUBIMAGE2DPROC +epoxy_glCopyTextureSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7868 /* "glCopyTextureSubImage2D" */, + 7868 /* "glCopyTextureSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7868 /* "glCopyTextureSubImage2D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC +epoxy_glCopyTextureSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7892 /* glCopyTextureSubImage2DEXT */); +} + +static PFNGLCOPYTEXTURESUBIMAGE3DPROC +epoxy_glCopyTextureSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 7919 /* "glCopyTextureSubImage3D" */, + 7919 /* "glCopyTextureSubImage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 7919 /* "glCopyTextureSubImage3D" */, + providers, entrypoints); +} + +static PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC +epoxy_glCopyTextureSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 7943 /* glCopyTextureSubImage3DEXT */); +} + +static PFNGLCOVERFILLPATHINSTANCEDNVPROC +epoxy_glCoverFillPathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 7970 /* glCoverFillPathInstancedNV */); +} + +static PFNGLCOVERFILLPATHNVPROC +epoxy_glCoverFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 7997 /* glCoverFillPathNV */); +} + +static PFNGLCOVERSTROKEPATHINSTANCEDNVPROC +epoxy_glCoverStrokePathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 8015 /* glCoverStrokePathInstancedNV */); +} + +static PFNGLCOVERSTROKEPATHNVPROC +epoxy_glCoverStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 8044 /* glCoverStrokePathNV */); +} + +static PFNGLCOVERAGEMASKNVPROC +epoxy_glCoverageMaskNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_coverage_sample, 8064 /* glCoverageMaskNV */); +} + +static PFNGLCOVERAGEMODULATIONNVPROC +epoxy_glCoverageModulationNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_mixed_samples, 8081 /* glCoverageModulationNV */); +} + +static PFNGLCOVERAGEMODULATIONTABLENVPROC +epoxy_glCoverageModulationTableNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_mixed_samples, 8104 /* glCoverageModulationTableNV */); +} + +static PFNGLCOVERAGEOPERATIONNVPROC +epoxy_glCoverageOperationNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_coverage_sample, 8132 /* glCoverageOperationNV */); +} + +static PFNGLCREATEBUFFERSPROC +epoxy_glCreateBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8154 /* "glCreateBuffers" */, + 8154 /* "glCreateBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8154 /* "glCreateBuffers" */, + providers, entrypoints); +} + +static PFNGLCREATECOMMANDLISTSNVPROC +epoxy_glCreateCommandListsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 8170 /* glCreateCommandListsNV */); +} + +static PFNGLCREATEFRAMEBUFFERSPROC +epoxy_glCreateFramebuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8193 /* "glCreateFramebuffers" */, + 8193 /* "glCreateFramebuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8193 /* "glCreateFramebuffers" */, + providers, entrypoints); +} + +static PFNGLCREATEPERFQUERYINTELPROC +epoxy_glCreatePerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 8214 /* glCreatePerfQueryINTEL */); +} + +static PFNGLCREATEPROGRAMPROC +epoxy_glCreateProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8237 /* "glCreateProgram" */, + 8237 /* "glCreateProgram" */, + 8253 /* "glCreateProgramObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8237 /* "glCreateProgram" */, + providers, entrypoints); +} + +static PFNGLCREATEPROGRAMOBJECTARBPROC +epoxy_glCreateProgramObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8253 /* "glCreateProgramObjectARB" */, + 8237 /* "glCreateProgram" */, + 8237 /* "glCreateProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 8253 /* "glCreateProgramObjectARB" */, + providers, entrypoints); +} + +static PFNGLCREATEPROGRAMPIPELINESPROC +epoxy_glCreateProgramPipelines_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8278 /* "glCreateProgramPipelines" */, + 8278 /* "glCreateProgramPipelines" */, + }; + return gl_provider_resolver(entrypoint_strings + 8278 /* "glCreateProgramPipelines" */, + providers, entrypoints); +} + +static PFNGLCREATEQUERIESPROC +epoxy_glCreateQueries_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8303 /* "glCreateQueries" */, + 8303 /* "glCreateQueries" */, + }; + return gl_provider_resolver(entrypoint_strings + 8303 /* "glCreateQueries" */, + providers, entrypoints); +} + +static PFNGLCREATERENDERBUFFERSPROC +epoxy_glCreateRenderbuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8319 /* "glCreateRenderbuffers" */, + 8319 /* "glCreateRenderbuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8319 /* "glCreateRenderbuffers" */, + providers, entrypoints); +} + +static PFNGLCREATESAMPLERSPROC +epoxy_glCreateSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8341 /* "glCreateSamplers" */, + 8341 /* "glCreateSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 8341 /* "glCreateSamplers" */, + providers, entrypoints); +} + +static PFNGLCREATESHADERPROC +epoxy_glCreateShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8358 /* "glCreateShader" */, + 8358 /* "glCreateShader" */, + 8373 /* "glCreateShaderObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8358 /* "glCreateShader" */, + providers, entrypoints); +} + +static PFNGLCREATESHADEROBJECTARBPROC +epoxy_glCreateShaderObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8373 /* "glCreateShaderObjectARB" */, + 8358 /* "glCreateShader" */, + 8358 /* "glCreateShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 8373 /* "glCreateShaderObjectARB" */, + providers, entrypoints); +} + +static PFNGLCREATESHADERPROGRAMEXTPROC +epoxy_glCreateShaderProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 8397 /* glCreateShaderProgramEXT */); +} + +static PFNGLCREATESHADERPROGRAMVPROC +epoxy_glCreateShaderProgramv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8422 /* "glCreateShaderProgramv" */, + 8422 /* "glCreateShaderProgramv" */, + 8422 /* "glCreateShaderProgramv" */, + }; + return gl_provider_resolver(entrypoint_strings + 8422 /* "glCreateShaderProgramv" */, + providers, entrypoints); +} + +static PFNGLCREATESHADERPROGRAMVEXTPROC +epoxy_glCreateShaderProgramvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 8445 /* glCreateShaderProgramvEXT */); +} + +static PFNGLCREATESTATESNVPROC +epoxy_glCreateStatesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 8471 /* glCreateStatesNV */); +} + +static PFNGLCREATESYNCFROMCLEVENTARBPROC +epoxy_glCreateSyncFromCLeventARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_cl_event, 8488 /* glCreateSyncFromCLeventARB */); +} + +static PFNGLCREATETEXTURESPROC +epoxy_glCreateTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8515 /* "glCreateTextures" */, + 8515 /* "glCreateTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 8515 /* "glCreateTextures" */, + providers, entrypoints); +} + +static PFNGLCREATETRANSFORMFEEDBACKSPROC +epoxy_glCreateTransformFeedbacks_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8532 /* "glCreateTransformFeedbacks" */, + 8532 /* "glCreateTransformFeedbacks" */, + }; + return gl_provider_resolver(entrypoint_strings + 8532 /* "glCreateTransformFeedbacks" */, + providers, entrypoints); +} + +static PFNGLCREATEVERTEXARRAYSPROC +epoxy_glCreateVertexArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8559 /* "glCreateVertexArrays" */, + 8559 /* "glCreateVertexArrays" */, + }; + return gl_provider_resolver(entrypoint_strings + 8559 /* "glCreateVertexArrays" */, + providers, entrypoints); +} + +static PFNGLCULLFACEPROC +epoxy_glCullFace_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8580 /* "glCullFace" */, + 8580 /* "glCullFace" */, + 8580 /* "glCullFace" */, + }; + return gl_provider_resolver(entrypoint_strings + 8580 /* "glCullFace" */, + providers, entrypoints); +} + +static PFNGLCULLPARAMETERDVEXTPROC +epoxy_glCullParameterdvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_cull_vertex, 8591 /* glCullParameterdvEXT */); +} + +static PFNGLCULLPARAMETERFVEXTPROC +epoxy_glCullParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_cull_vertex, 8612 /* glCullParameterfvEXT */); +} + +static PFNGLCURRENTPALETTEMATRIXARBPROC +epoxy_glCurrentPaletteMatrixARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 8633 /* glCurrentPaletteMatrixARB */); +} + +static PFNGLCURRENTPALETTEMATRIXOESPROC +epoxy_glCurrentPaletteMatrixOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 8659 /* glCurrentPaletteMatrixOES */); +} + +static PFNGLDEBUGMESSAGECALLBACKPROC +epoxy_glDebugMessageCallback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8734 /* "glDebugMessageCallbackARB" */, + 8760 /* "glDebugMessageCallbackKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8685 /* "glDebugMessageCallback" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECALLBACKAMDPROC +epoxy_glDebugMessageCallbackAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 8708 /* glDebugMessageCallbackAMD */); +} + +static PFNGLDEBUGMESSAGECALLBACKARBPROC +epoxy_glDebugMessageCallbackARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8734 /* "glDebugMessageCallbackARB" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8760 /* "glDebugMessageCallbackKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8734 /* "glDebugMessageCallbackARB" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECALLBACKKHRPROC +epoxy_glDebugMessageCallbackKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8760 /* "glDebugMessageCallbackKHR" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8685 /* "glDebugMessageCallback" */, + 8734 /* "glDebugMessageCallbackARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8760 /* "glDebugMessageCallbackKHR" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECONTROLPROC +epoxy_glDebugMessageControl_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8808 /* "glDebugMessageControlARB" */, + 8833 /* "glDebugMessageControlKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8786 /* "glDebugMessageControl" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECONTROLARBPROC +epoxy_glDebugMessageControlARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8808 /* "glDebugMessageControlARB" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8833 /* "glDebugMessageControlKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8808 /* "glDebugMessageControlARB" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGECONTROLKHRPROC +epoxy_glDebugMessageControlKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8833 /* "glDebugMessageControlKHR" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8786 /* "glDebugMessageControl" */, + 8808 /* "glDebugMessageControlARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8833 /* "glDebugMessageControlKHR" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGEENABLEAMDPROC +epoxy_glDebugMessageEnableAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 8858 /* glDebugMessageEnableAMD */); +} + +static PFNGLDEBUGMESSAGEINSERTPROC +epoxy_glDebugMessageInsert_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8927 /* "glDebugMessageInsertARB" */, + 8951 /* "glDebugMessageInsertKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8882 /* "glDebugMessageInsert" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGEINSERTAMDPROC +epoxy_glDebugMessageInsertAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 8903 /* glDebugMessageInsertAMD */); +} + +static PFNGLDEBUGMESSAGEINSERTARBPROC +epoxy_glDebugMessageInsertARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8927 /* "glDebugMessageInsertARB" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8951 /* "glDebugMessageInsertKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 8927 /* "glDebugMessageInsertARB" */, + providers, entrypoints); +} + +static PFNGLDEBUGMESSAGEINSERTKHRPROC +epoxy_glDebugMessageInsertKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 8951 /* "glDebugMessageInsertKHR" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8882 /* "glDebugMessageInsert" */, + 8927 /* "glDebugMessageInsertARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 8951 /* "glDebugMessageInsertKHR" */, + providers, entrypoints); +} + +static PFNGLDEFORMSGIXPROC +epoxy_glDeformSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 8975 /* glDeformSGIX */); +} + +static PFNGLDEFORMATIONMAP3DSGIXPROC +epoxy_glDeformationMap3dSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 8988 /* glDeformationMap3dSGIX */); +} + +static PFNGLDEFORMATIONMAP3FSGIXPROC +epoxy_glDeformationMap3fSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 9011 /* glDeformationMap3fSGIX */); +} + +static PFNGLDELETEASYNCMARKERSSGIXPROC +epoxy_glDeleteAsyncMarkersSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 9034 /* glDeleteAsyncMarkersSGIX */); +} + +static PFNGLDELETEBUFFERSPROC +epoxy_glDeleteBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + 9075 /* "glDeleteBuffersARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 9059 /* "glDeleteBuffers" */, + providers, entrypoints); +} + +static PFNGLDELETEBUFFERSARBPROC +epoxy_glDeleteBuffersARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9075 /* "glDeleteBuffersARB" */, + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + 9059 /* "glDeleteBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9075 /* "glDeleteBuffersARB" */, + providers, entrypoints); +} + +static PFNGLDELETECOMMANDLISTSNVPROC +epoxy_glDeleteCommandListsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 9094 /* glDeleteCommandListsNV */); +} + +static PFNGLDELETEFENCESAPPLEPROC +epoxy_glDeleteFencesAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 9117 /* glDeleteFencesAPPLE */); +} + +static PFNGLDELETEFENCESNVPROC +epoxy_glDeleteFencesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 9137 /* glDeleteFencesNV */); +} + +static PFNGLDELETEFRAGMENTSHADERATIPROC +epoxy_glDeleteFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 9154 /* glDeleteFragmentShaderATI */); +} + +static PFNGLDELETEFRAMEBUFFERSPROC +epoxy_glDeleteFramebuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + 9201 /* "glDeleteFramebuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 9180 /* "glDeleteFramebuffers" */, + providers, entrypoints); +} + +static PFNGLDELETEFRAMEBUFFERSEXTPROC +epoxy_glDeleteFramebuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9201 /* "glDeleteFramebuffersEXT" */, + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + 9180 /* "glDeleteFramebuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9201 /* "glDeleteFramebuffersEXT" */, + providers, entrypoints); +} + +static PFNGLDELETEFRAMEBUFFERSOESPROC +epoxy_glDeleteFramebuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 9225 /* glDeleteFramebuffersOES */); +} + +static PFNGLDELETELISTSPROC +epoxy_glDeleteLists_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 9249 /* glDeleteLists */); +} + +static PFNGLDELETENAMEDSTRINGARBPROC +epoxy_glDeleteNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 9263 /* glDeleteNamedStringARB */); +} + +static PFNGLDELETENAMESAMDPROC +epoxy_glDeleteNamesAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_name_gen_delete, 9286 /* glDeleteNamesAMD */); +} + +static PFNGLDELETEOBJECTARBPROC +epoxy_glDeleteObjectARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 9303 /* glDeleteObjectARB */); +} + +static PFNGLDELETEOCCLUSIONQUERIESNVPROC +epoxy_glDeleteOcclusionQueriesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 9321 /* glDeleteOcclusionQueriesNV */); +} + +static PFNGLDELETEPATHSNVPROC +epoxy_glDeletePathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 9348 /* glDeletePathsNV */); +} + +static PFNGLDELETEPERFMONITORSAMDPROC +epoxy_glDeletePerfMonitorsAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 9364 /* glDeletePerfMonitorsAMD */); +} + +static PFNGLDELETEPERFQUERYINTELPROC +epoxy_glDeletePerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 9388 /* glDeletePerfQueryINTEL */); +} + +static PFNGLDELETEPROGRAMPROC +epoxy_glDeleteProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9411 /* "glDeleteProgram" */, + 9411 /* "glDeleteProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 9411 /* "glDeleteProgram" */, + providers, entrypoints); +} + +static PFNGLDELETEPROGRAMPIPELINESPROC +epoxy_glDeleteProgramPipelines_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9427 /* "glDeleteProgramPipelines" */, + 9427 /* "glDeleteProgramPipelines" */, + 9427 /* "glDeleteProgramPipelines" */, + }; + return gl_provider_resolver(entrypoint_strings + 9427 /* "glDeleteProgramPipelines" */, + providers, entrypoints); +} + +static PFNGLDELETEPROGRAMPIPELINESEXTPROC +epoxy_glDeleteProgramPipelinesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 9452 /* glDeleteProgramPipelinesEXT */); +} + +static PFNGLDELETEPROGRAMSARBPROC +epoxy_glDeleteProgramsARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9480 /* "glDeleteProgramsARB" */, + 9480 /* "glDeleteProgramsARB" */, + 9500 /* "glDeleteProgramsNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 9480 /* "glDeleteProgramsARB" */, + providers, entrypoints); +} + +static PFNGLDELETEPROGRAMSNVPROC +epoxy_glDeleteProgramsNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9500 /* "glDeleteProgramsNV" */, + 9480 /* "glDeleteProgramsARB" */, + 9480 /* "glDeleteProgramsARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 9500 /* "glDeleteProgramsNV" */, + providers, entrypoints); +} + +static PFNGLDELETEQUERIESPROC +epoxy_glDeleteQueries_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9519 /* "glDeleteQueries" */, + 9519 /* "glDeleteQueries" */, + 9535 /* "glDeleteQueriesARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 9519 /* "glDeleteQueries" */, + providers, entrypoints); +} + +static PFNGLDELETEQUERIESARBPROC +epoxy_glDeleteQueriesARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9535 /* "glDeleteQueriesARB" */, + 9519 /* "glDeleteQueries" */, + 9519 /* "glDeleteQueries" */, + }; + return gl_provider_resolver(entrypoint_strings + 9535 /* "glDeleteQueriesARB" */, + providers, entrypoints); +} + +static PFNGLDELETEQUERIESEXTPROC +epoxy_glDeleteQueriesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9554 /* "glDeleteQueriesEXT" */, + 9554 /* "glDeleteQueriesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 9554 /* "glDeleteQueriesEXT" */, + providers, entrypoints); +} + +static PFNGLDELETERENDERBUFFERSPROC +epoxy_glDeleteRenderbuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + 9595 /* "glDeleteRenderbuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 9573 /* "glDeleteRenderbuffers" */, + providers, entrypoints); +} + +static PFNGLDELETERENDERBUFFERSEXTPROC +epoxy_glDeleteRenderbuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9595 /* "glDeleteRenderbuffersEXT" */, + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + 9573 /* "glDeleteRenderbuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9595 /* "glDeleteRenderbuffersEXT" */, + providers, entrypoints); +} + +static PFNGLDELETERENDERBUFFERSOESPROC +epoxy_glDeleteRenderbuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 9620 /* glDeleteRenderbuffersOES */); +} + +static PFNGLDELETESAMPLERSPROC +epoxy_glDeleteSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9645 /* "glDeleteSamplers" */, + 9645 /* "glDeleteSamplers" */, + 9645 /* "glDeleteSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 9645 /* "glDeleteSamplers" */, + providers, entrypoints); +} + +static PFNGLDELETESHADERPROC +epoxy_glDeleteShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9662 /* "glDeleteShader" */, + 9662 /* "glDeleteShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 9662 /* "glDeleteShader" */, + providers, entrypoints); +} + +static PFNGLDELETESTATESNVPROC +epoxy_glDeleteStatesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 9677 /* glDeleteStatesNV */); +} + +static PFNGLDELETESYNCPROC +epoxy_glDeleteSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + 9707 /* "glDeleteSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 9694 /* "glDeleteSync" */, + providers, entrypoints); +} + +static PFNGLDELETESYNCAPPLEPROC +epoxy_glDeleteSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9707 /* "glDeleteSyncAPPLE" */, + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + 9694 /* "glDeleteSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 9707 /* "glDeleteSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLDELETETEXTURESPROC +epoxy_glDeleteTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9725 /* "glDeleteTextures" */, + 9725 /* "glDeleteTextures" */, + 9725 /* "glDeleteTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 9725 /* "glDeleteTextures" */, + providers, entrypoints); +} + +static PFNGLDELETETEXTURESEXTPROC +epoxy_glDeleteTexturesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 9742 /* glDeleteTexturesEXT */); +} + +static PFNGLDELETETRANSFORMFEEDBACKSPROC +epoxy_glDeleteTransformFeedbacks_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9789 /* "glDeleteTransformFeedbacksNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 9762 /* "glDeleteTransformFeedbacks" */, + providers, entrypoints); +} + +static PFNGLDELETETRANSFORMFEEDBACKSNVPROC +epoxy_glDeleteTransformFeedbacksNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9789 /* "glDeleteTransformFeedbacksNV" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + 9762 /* "glDeleteTransformFeedbacks" */, + }; + return gl_provider_resolver(entrypoint_strings + 9789 /* "glDeleteTransformFeedbacksNV" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXARRAYSPROC +epoxy_glDeleteVertexArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9839 /* "glDeleteVertexArraysAPPLE" */, + 9865 /* "glDeleteVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 9818 /* "glDeleteVertexArrays" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXARRAYSAPPLEPROC +epoxy_glDeleteVertexArraysAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9839 /* "glDeleteVertexArraysAPPLE" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9865 /* "glDeleteVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 9839 /* "glDeleteVertexArraysAPPLE" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXARRAYSOESPROC +epoxy_glDeleteVertexArraysOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9865 /* "glDeleteVertexArraysOES" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9818 /* "glDeleteVertexArrays" */, + 9839 /* "glDeleteVertexArraysAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 9865 /* "glDeleteVertexArraysOES" */, + providers, entrypoints); +} + +static PFNGLDELETEVERTEXSHADEREXTPROC +epoxy_glDeleteVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 9889 /* glDeleteVertexShaderEXT */); +} + +static PFNGLDEPTHBOUNDSEXTPROC +epoxy_glDepthBoundsEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_depth_bounds_test, 9913 /* glDepthBoundsEXT */); +} + +static PFNGLDEPTHBOUNDSDNVPROC +epoxy_glDepthBoundsdNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_depth_buffer_float, 9930 /* glDepthBoundsdNV */); +} + +static PFNGLDEPTHFUNCPROC +epoxy_glDepthFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9947 /* "glDepthFunc" */, + 9947 /* "glDepthFunc" */, + 9947 /* "glDepthFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 9947 /* "glDepthFunc" */, + providers, entrypoints); +} + +static PFNGLDEPTHMASKPROC +epoxy_glDepthMask_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 9959 /* "glDepthMask" */, + 9959 /* "glDepthMask" */, + 9959 /* "glDepthMask" */, + }; + return gl_provider_resolver(entrypoint_strings + 9959 /* "glDepthMask" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEPROC +epoxy_glDepthRange_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 9971 /* glDepthRange */); +} + +static PFNGLDEPTHRANGEARRAYFVNVPROC +epoxy_glDepthRangeArrayfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_viewport_array, 9984 /* glDepthRangeArrayfvNV */); +} + +static PFNGLDEPTHRANGEARRAYVPROC +epoxy_glDepthRangeArrayv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10006 /* "glDepthRangeArrayv" */, + 10006 /* "glDepthRangeArrayv" */, + }; + return gl_provider_resolver(entrypoint_strings + 10006 /* "glDepthRangeArrayv" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEINDEXEDPROC +epoxy_glDepthRangeIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10025 /* "glDepthRangeIndexed" */, + 10025 /* "glDepthRangeIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 10025 /* "glDepthRangeIndexed" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEINDEXEDFNVPROC +epoxy_glDepthRangeIndexedfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_viewport_array, 10045 /* glDepthRangeIndexedfNV */); +} + +static PFNGLDEPTHRANGEDNVPROC +epoxy_glDepthRangedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_depth_buffer_float, 10068 /* glDepthRangedNV */); +} + +static PFNGLDEPTHRANGEFPROC +epoxy_glDepthRangef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_OES_single_precision, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10098 /* "glDepthRangefOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10084 /* "glDepthRangef" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEFOESPROC +epoxy_glDepthRangefOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_single_precision, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10098 /* "glDepthRangefOES" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + 10084 /* "glDepthRangef" */, + }; + return gl_provider_resolver(entrypoint_strings + 10098 /* "glDepthRangefOES" */, + providers, entrypoints); +} + +static PFNGLDEPTHRANGEXPROC +epoxy_glDepthRangex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 10115 /* glDepthRangex */); +} + +static PFNGLDEPTHRANGEXOESPROC +epoxy_glDepthRangexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 10129 /* glDepthRangexOES */); +} + +static PFNGLDETACHOBJECTARBPROC +epoxy_glDetachObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10146 /* "glDetachObjectARB" */, + 10164 /* "glDetachShader" */, + 10164 /* "glDetachShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 10146 /* "glDetachObjectARB" */, + providers, entrypoints); +} + +static PFNGLDETACHSHADERPROC +epoxy_glDetachShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10164 /* "glDetachShader" */, + 10164 /* "glDetachShader" */, + 10146 /* "glDetachObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 10164 /* "glDetachShader" */, + providers, entrypoints); +} + +static PFNGLDETAILTEXFUNCSGISPROC +epoxy_glDetailTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_detail_texture, 10179 /* glDetailTexFuncSGIS */); +} + +static PFNGLDISABLEPROC +epoxy_glDisable_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10199 /* "glDisable" */, + 10199 /* "glDisable" */, + 10199 /* "glDisable" */, + }; + return gl_provider_resolver(entrypoint_strings + 10199 /* "glDisable" */, + providers, entrypoints); +} + +static PFNGLDISABLECLIENTSTATEPROC +epoxy_glDisableClientState_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10209 /* "glDisableClientState" */, + 10209 /* "glDisableClientState" */, + }; + return gl_provider_resolver(entrypoint_strings + 10209 /* "glDisableClientState" */, + providers, entrypoints); +} + +static PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC +epoxy_glDisableClientStateIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10230 /* glDisableClientStateIndexedEXT */); +} + +static PFNGLDISABLECLIENTSTATEIEXTPROC +epoxy_glDisableClientStateiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10261 /* glDisableClientStateiEXT */); +} + +static PFNGLDISABLEDRIVERCONTROLQCOMPROC +epoxy_glDisableDriverControlQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 10286 /* glDisableDriverControlQCOM */); +} + +static PFNGLDISABLEINDEXEDEXTPROC +epoxy_glDisableIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10540 /* "glDisableiEXT" */, + 10554 /* "glDisableiNV" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10313 /* "glDisableIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC +epoxy_glDisableVariantClientStateEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 10333 /* glDisableVariantClientStateEXT */); +} + +static PFNGLDISABLEVERTEXARRAYATTRIBPROC +epoxy_glDisableVertexArrayAttrib_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10364 /* "glDisableVertexArrayAttrib" */, + 10364 /* "glDisableVertexArrayAttrib" */, + }; + return gl_provider_resolver(entrypoint_strings + 10364 /* "glDisableVertexArrayAttrib" */, + providers, entrypoints); +} + +static PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC +epoxy_glDisableVertexArrayAttribEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10391 /* glDisableVertexArrayAttribEXT */); +} + +static PFNGLDISABLEVERTEXARRAYEXTPROC +epoxy_glDisableVertexArrayEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 10421 /* glDisableVertexArrayEXT */); +} + +static PFNGLDISABLEVERTEXATTRIBAPPLEPROC +epoxy_glDisableVertexAttribAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 10445 /* glDisableVertexAttribAPPLE */); +} + +static PFNGLDISABLEVERTEXATTRIBARRAYPROC +epoxy_glDisableVertexAttribArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10472 /* "glDisableVertexAttribArray" */, + 10472 /* "glDisableVertexAttribArray" */, + 10499 /* "glDisableVertexAttribArrayARB" */, + 10499 /* "glDisableVertexAttribArrayARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 10472 /* "glDisableVertexAttribArray" */, + providers, entrypoints); +} + +static PFNGLDISABLEVERTEXATTRIBARRAYARBPROC +epoxy_glDisableVertexAttribArrayARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10499 /* "glDisableVertexAttribArrayARB" */, + 10499 /* "glDisableVertexAttribArrayARB" */, + 10472 /* "glDisableVertexAttribArray" */, + 10472 /* "glDisableVertexAttribArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 10499 /* "glDisableVertexAttribArrayARB" */, + providers, entrypoints); +} + +static PFNGLDISABLEIPROC +epoxy_glDisablei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10540 /* "glDisableiEXT" */, + 10554 /* "glDisableiNV" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10529 /* "glDisablei" */, + providers, entrypoints); +} + +static PFNGLDISABLEIEXTPROC +epoxy_glDisableiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10540 /* "glDisableiEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10554 /* "glDisableiNV" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10540 /* "glDisableiEXT" */, + providers, entrypoints); +} + +static PFNGLDISABLEINVPROC +epoxy_glDisableiNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10554 /* "glDisableiNV" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10540 /* "glDisableiEXT" */, + 10567 /* "glDisableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 10554 /* "glDisableiNV" */, + providers, entrypoints); +} + +static PFNGLDISABLEIOESPROC +epoxy_glDisableiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10567 /* "glDisableiOES" */, + 10313 /* "glDisableIndexedEXT" */, + 10313 /* "glDisableIndexedEXT" */, + 10529 /* "glDisablei" */, + 10529 /* "glDisablei" */, + 10540 /* "glDisableiEXT" */, + 10554 /* "glDisableiNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10567 /* "glDisableiOES" */, + providers, entrypoints); +} + +static PFNGLDISCARDFRAMEBUFFEREXTPROC +epoxy_glDiscardFramebufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_discard_framebuffer, 10581 /* glDiscardFramebufferEXT */); +} + +static PFNGLDISPATCHCOMPUTEPROC +epoxy_glDispatchCompute_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_compute_shader, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10605 /* "glDispatchCompute" */, + 10605 /* "glDispatchCompute" */, + 10605 /* "glDispatchCompute" */, + }; + return gl_provider_resolver(entrypoint_strings + 10605 /* "glDispatchCompute" */, + providers, entrypoints); +} + +static PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC +epoxy_glDispatchComputeGroupSizeARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_compute_variable_group_size, 10623 /* glDispatchComputeGroupSizeARB */); +} + +static PFNGLDISPATCHCOMPUTEINDIRECTPROC +epoxy_glDispatchComputeIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_compute_shader, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10653 /* "glDispatchComputeIndirect" */, + 10653 /* "glDispatchComputeIndirect" */, + 10653 /* "glDispatchComputeIndirect" */, + }; + return gl_provider_resolver(entrypoint_strings + 10653 /* "glDispatchComputeIndirect" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSPROC +epoxy_glDrawArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_vertex_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + 10692 /* "glDrawArraysEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10679 /* "glDrawArrays" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSEXTPROC +epoxy_glDrawArraysEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_array, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10692 /* "glDrawArraysEXT" */, + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + 10679 /* "glDrawArrays" */, + }; + return gl_provider_resolver(entrypoint_strings + 10692 /* "glDrawArraysEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINDIRECTPROC +epoxy_glDrawArraysIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_draw_indirect, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10708 /* "glDrawArraysIndirect" */, + 10708 /* "glDrawArraysIndirect" */, + 10708 /* "glDrawArraysIndirect" */, + }; + return gl_provider_resolver(entrypoint_strings + 10708 /* "glDrawArraysIndirect" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDPROC +epoxy_glDrawArraysInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10729 /* "glDrawArraysInstanced" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDANGLEPROC +epoxy_glDrawArraysInstancedANGLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ANGLE_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10751 /* "glDrawArraysInstancedANGLE" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10751 /* "glDrawArraysInstancedANGLE" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDARBPROC +epoxy_glDrawArraysInstancedARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10778 /* "glDrawArraysInstancedARB" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10778 /* "glDrawArraysInstancedARB" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC +epoxy_glDrawArraysInstancedBaseInstance_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_EXT_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10803 /* "glDrawArraysInstancedBaseInstance" */, + 10803 /* "glDrawArraysInstancedBaseInstance" */, + 10837 /* "glDrawArraysInstancedBaseInstanceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10803 /* "glDrawArraysInstancedBaseInstance" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC +epoxy_glDrawArraysInstancedBaseInstanceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_base_instance, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10837 /* "glDrawArraysInstancedBaseInstanceEXT" */, + 10803 /* "glDrawArraysInstancedBaseInstance" */, + 10803 /* "glDrawArraysInstancedBaseInstance" */, + }; + return gl_provider_resolver(entrypoint_strings + 10837 /* "glDrawArraysInstancedBaseInstanceEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDEXTPROC +epoxy_glDrawArraysInstancedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10899 /* "glDrawArraysInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 10874 /* "glDrawArraysInstancedEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWARRAYSINSTANCEDNVPROC +epoxy_glDrawArraysInstancedNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10899 /* "glDrawArraysInstancedNV" */, + 10729 /* "glDrawArraysInstanced" */, + 10729 /* "glDrawArraysInstanced" */, + 10751 /* "glDrawArraysInstancedANGLE" */, + 10778 /* "glDrawArraysInstancedARB" */, + 10874 /* "glDrawArraysInstancedEXT" */, + 10874 /* "glDrawArraysInstancedEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10899 /* "glDrawArraysInstancedNV" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERPROC +epoxy_glDrawBuffer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 10923 /* glDrawBuffer */); +} + +static PFNGLDRAWBUFFERSPROC +epoxy_glDrawBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_ATI_draw_buffers, + GL_extension_GL_EXT_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10950 /* "glDrawBuffersARB" */, + 10967 /* "glDrawBuffersATI" */, + 10984 /* "glDrawBuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10936 /* "glDrawBuffers" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSARBPROC +epoxy_glDrawBuffersARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_buffers, + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ATI_draw_buffers, + GL_extension_GL_EXT_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10950 /* "glDrawBuffersARB" */, + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10967 /* "glDrawBuffersATI" */, + 10984 /* "glDrawBuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10950 /* "glDrawBuffersARB" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSATIPROC +epoxy_glDrawBuffersATI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ATI_draw_buffers, + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_EXT_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10967 /* "glDrawBuffersATI" */, + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10950 /* "glDrawBuffersARB" */, + 10984 /* "glDrawBuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 10967 /* "glDrawBuffersATI" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSEXTPROC +epoxy_glDrawBuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers, + Desktop_OpenGL_2_0, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_buffers, + GL_extension_GL_ATI_draw_buffers, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 10984 /* "glDrawBuffersEXT" */, + 10936 /* "glDrawBuffers" */, + 10936 /* "glDrawBuffers" */, + 10950 /* "glDrawBuffersARB" */, + 10967 /* "glDrawBuffersATI" */, + }; + return gl_provider_resolver(entrypoint_strings + 10984 /* "glDrawBuffersEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWBUFFERSINDEXEDEXTPROC +epoxy_glDrawBuffersIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multiview_draw_buffers, 11001 /* glDrawBuffersIndexedEXT */); +} + +static PFNGLDRAWBUFFERSNVPROC +epoxy_glDrawBuffersNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_draw_buffers, 11025 /* glDrawBuffersNV */); +} + +static PFNGLDRAWCOMMANDSADDRESSNVPROC +epoxy_glDrawCommandsAddressNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11041 /* glDrawCommandsAddressNV */); +} + +static PFNGLDRAWCOMMANDSNVPROC +epoxy_glDrawCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11065 /* glDrawCommandsNV */); +} + +static PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC +epoxy_glDrawCommandsStatesAddressNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11082 /* glDrawCommandsStatesAddressNV */); +} + +static PFNGLDRAWCOMMANDSSTATESNVPROC +epoxy_glDrawCommandsStatesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 11112 /* glDrawCommandsStatesNV */); +} + +static PFNGLDRAWELEMENTARRAYAPPLEPROC +epoxy_glDrawElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 11135 /* glDrawElementArrayAPPLE */); +} + +static PFNGLDRAWELEMENTARRAYATIPROC +epoxy_glDrawElementArrayATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_element_array, 11159 /* glDrawElementArrayATI */); +} + +static PFNGLDRAWELEMENTSPROC +epoxy_glDrawElements_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11181 /* "glDrawElements" */, + 11181 /* "glDrawElements" */, + 11181 /* "glDrawElements" */, + }; + return gl_provider_resolver(entrypoint_strings + 11181 /* "glDrawElements" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSBASEVERTEXPROC +epoxy_glDrawElementsBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11221 /* "glDrawElementsBaseVertexEXT" */, + 11249 /* "glDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11196 /* "glDrawElementsBaseVertex" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSBASEVERTEXEXTPROC +epoxy_glDrawElementsBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11221 /* "glDrawElementsBaseVertexEXT" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11249 /* "glDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11221 /* "glDrawElementsBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSBASEVERTEXOESPROC +epoxy_glDrawElementsBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11249 /* "glDrawElementsBaseVertexOES" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11196 /* "glDrawElementsBaseVertex" */, + 11221 /* "glDrawElementsBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11249 /* "glDrawElementsBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINDIRECTPROC +epoxy_glDrawElementsIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_draw_indirect, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11277 /* "glDrawElementsIndirect" */, + 11277 /* "glDrawElementsIndirect" */, + 11277 /* "glDrawElementsIndirect" */, + }; + return gl_provider_resolver(entrypoint_strings + 11277 /* "glDrawElementsIndirect" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDPROC +epoxy_glDrawElementsInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11300 /* "glDrawElementsInstanced" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDANGLEPROC +epoxy_glDrawElementsInstancedANGLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ANGLE_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11324 /* "glDrawElementsInstancedANGLE" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11324 /* "glDrawElementsInstancedANGLE" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDARBPROC +epoxy_glDrawElementsInstancedARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11353 /* "glDrawElementsInstancedARB" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11353 /* "glDrawElementsInstancedARB" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC +epoxy_glDrawElementsInstancedBaseInstance_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_EXT_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11380 /* "glDrawElementsInstancedBaseInstance" */, + 11380 /* "glDrawElementsInstancedBaseInstance" */, + 11416 /* "glDrawElementsInstancedBaseInstanceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11380 /* "glDrawElementsInstancedBaseInstance" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC +epoxy_glDrawElementsInstancedBaseInstanceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_base_instance, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11416 /* "glDrawElementsInstancedBaseInstanceEXT" */, + 11380 /* "glDrawElementsInstancedBaseInstance" */, + 11380 /* "glDrawElementsInstancedBaseInstance" */, + }; + return gl_provider_resolver(entrypoint_strings + 11416 /* "glDrawElementsInstancedBaseInstanceEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC +epoxy_glDrawElementsInstancedBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11455 /* "glDrawElementsInstancedBaseVertex" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC +epoxy_glDrawElementsInstancedBaseVertexBaseInstance_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + GL_extension_GL_EXT_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + 11535 /* "glDrawElementsInstancedBaseVertexBaseInstanceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC +epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_base_instance, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_base_instance, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11535 /* "glDrawElementsInstancedBaseVertexBaseInstanceEXT" */, + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + 11489 /* "glDrawElementsInstancedBaseVertexBaseInstance" */, + }; + return gl_provider_resolver(entrypoint_strings + 11535 /* "glDrawElementsInstancedBaseVertexBaseInstanceEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC +epoxy_glDrawElementsInstancedBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC +epoxy_glDrawElementsInstancedBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11455 /* "glDrawElementsInstancedBaseVertex" */, + 11584 /* "glDrawElementsInstancedBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11621 /* "glDrawElementsInstancedBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDEXTPROC +epoxy_glDrawElementsInstancedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_NV_draw_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11685 /* "glDrawElementsInstancedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 11658 /* "glDrawElementsInstancedEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWELEMENTSINSTANCEDNVPROC +epoxy_glDrawElementsInstancedNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_draw_instanced, + Desktop_OpenGL_3_1, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_draw_instanced, + GL_extension_GL_EXT_draw_instanced, + GL_extension_GL_EXT_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11685 /* "glDrawElementsInstancedNV" */, + 11300 /* "glDrawElementsInstanced" */, + 11300 /* "glDrawElementsInstanced" */, + 11324 /* "glDrawElementsInstancedANGLE" */, + 11353 /* "glDrawElementsInstancedARB" */, + 11658 /* "glDrawElementsInstancedEXT" */, + 11658 /* "glDrawElementsInstancedEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11685 /* "glDrawElementsInstancedNV" */, + providers, entrypoints); +} + +static PFNGLDRAWMESHARRAYSSUNPROC +epoxy_glDrawMeshArraysSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_mesh_array, 11711 /* glDrawMeshArraysSUN */); +} + +static PFNGLDRAWPIXELSPROC +epoxy_glDrawPixels_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 11731 /* glDrawPixels */); +} + +static PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC +epoxy_glDrawRangeElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 11744 /* glDrawRangeElementArrayAPPLE */); +} + +static PFNGLDRAWRANGEELEMENTARRAYATIPROC +epoxy_glDrawRangeElementArrayATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_element_array, 11773 /* glDrawRangeElementArrayATI */); +} + +static PFNGLDRAWRANGEELEMENTSPROC +epoxy_glDrawRangeElements_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_draw_range_elements, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11800 /* "glDrawRangeElements" */, + 11800 /* "glDrawRangeElements" */, + 11916 /* "glDrawRangeElementsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11800 /* "glDrawRangeElements" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC +epoxy_glDrawRangeElementsBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11820 /* "glDrawRangeElementsBaseVertex" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC +epoxy_glDrawRangeElementsBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC +epoxy_glDrawRangeElementsBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11820 /* "glDrawRangeElementsBaseVertex" */, + 11850 /* "glDrawRangeElementsBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 11883 /* "glDrawRangeElementsBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLDRAWRANGEELEMENTSEXTPROC +epoxy_glDrawRangeElementsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_range_elements, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 11916 /* "glDrawRangeElementsEXT" */, + 11800 /* "glDrawRangeElements" */, + 11800 /* "glDrawRangeElements" */, + }; + return gl_provider_resolver(entrypoint_strings + 11916 /* "glDrawRangeElementsEXT" */, + providers, entrypoints); +} + +static PFNGLDRAWTEXFOESPROC +epoxy_glDrawTexfOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11939 /* glDrawTexfOES */); +} + +static PFNGLDRAWTEXFVOESPROC +epoxy_glDrawTexfvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11953 /* glDrawTexfvOES */); +} + +static PFNGLDRAWTEXIOESPROC +epoxy_glDrawTexiOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11968 /* glDrawTexiOES */); +} + +static PFNGLDRAWTEXIVOESPROC +epoxy_glDrawTexivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11982 /* glDrawTexivOES */); +} + +static PFNGLDRAWTEXSOESPROC +epoxy_glDrawTexsOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 11997 /* glDrawTexsOES */); +} + +static PFNGLDRAWTEXSVOESPROC +epoxy_glDrawTexsvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 12011 /* glDrawTexsvOES */); +} + +static PFNGLDRAWTEXTURENVPROC +epoxy_glDrawTextureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_draw_texture, 12026 /* glDrawTextureNV */); +} + +static PFNGLDRAWTEXXOESPROC +epoxy_glDrawTexxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 12042 /* glDrawTexxOES */); +} + +static PFNGLDRAWTEXXVOESPROC +epoxy_glDrawTexxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_draw_texture, 12056 /* glDrawTexxvOES */); +} + +static PFNGLDRAWTRANSFORMFEEDBACKPROC +epoxy_glDrawTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12071 /* "glDrawTransformFeedback" */, + 12071 /* "glDrawTransformFeedback" */, + 12128 /* "glDrawTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 12071 /* "glDrawTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC +epoxy_glDrawTransformFeedbackInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_transform_feedback_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12095 /* "glDrawTransformFeedbackInstanced" */, + 12095 /* "glDrawTransformFeedbackInstanced" */, + }; + return gl_provider_resolver(entrypoint_strings + 12095 /* "glDrawTransformFeedbackInstanced" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKNVPROC +epoxy_glDrawTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12128 /* "glDrawTransformFeedbackNV" */, + 12071 /* "glDrawTransformFeedback" */, + 12071 /* "glDrawTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 12128 /* "glDrawTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC +epoxy_glDrawTransformFeedbackStream_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12154 /* "glDrawTransformFeedbackStream" */, + 12154 /* "glDrawTransformFeedbackStream" */, + }; + return gl_provider_resolver(entrypoint_strings + 12154 /* "glDrawTransformFeedbackStream" */, + providers, entrypoints); +} + +static PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC +epoxy_glDrawTransformFeedbackStreamInstanced_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_transform_feedback_instanced, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12184 /* "glDrawTransformFeedbackStreamInstanced" */, + 12184 /* "glDrawTransformFeedbackStreamInstanced" */, + }; + return gl_provider_resolver(entrypoint_strings + 12184 /* "glDrawTransformFeedbackStreamInstanced" */, + providers, entrypoints); +} + +static PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC +epoxy_glEGLImageTargetRenderbufferStorageOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_EGL_image, 12223 /* glEGLImageTargetRenderbufferStorageOES */); +} + +static PFNGLEGLIMAGETARGETTEXTURE2DOESPROC +epoxy_glEGLImageTargetTexture2DOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_EGL_image, 12262 /* glEGLImageTargetTexture2DOES */); +} + +static PFNGLEDGEFLAGPROC +epoxy_glEdgeFlag_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12291 /* glEdgeFlag */); +} + +static PFNGLEDGEFLAGFORMATNVPROC +epoxy_glEdgeFlagFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 12302 /* glEdgeFlagFormatNV */); +} + +static PFNGLEDGEFLAGPOINTERPROC +epoxy_glEdgeFlagPointer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 12321 /* glEdgeFlagPointer */); +} + +static PFNGLEDGEFLAGPOINTEREXTPROC +epoxy_glEdgeFlagPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 12339 /* glEdgeFlagPointerEXT */); +} + +static PFNGLEDGEFLAGPOINTERLISTIBMPROC +epoxy_glEdgeFlagPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 12360 /* glEdgeFlagPointerListIBM */); +} + +static PFNGLEDGEFLAGVPROC +epoxy_glEdgeFlagv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12385 /* glEdgeFlagv */); +} + +static PFNGLELEMENTPOINTERAPPLEPROC +epoxy_glElementPointerAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 12397 /* glElementPointerAPPLE */); +} + +static PFNGLELEMENTPOINTERATIPROC +epoxy_glElementPointerATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_element_array, 12419 /* glElementPointerATI */); +} + +static PFNGLENABLEPROC +epoxy_glEnable_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12439 /* "glEnable" */, + 12439 /* "glEnable" */, + 12439 /* "glEnable" */, + }; + return gl_provider_resolver(entrypoint_strings + 12439 /* "glEnable" */, + providers, entrypoints); +} + +static PFNGLENABLECLIENTSTATEPROC +epoxy_glEnableClientState_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12448 /* "glEnableClientState" */, + 12448 /* "glEnableClientState" */, + }; + return gl_provider_resolver(entrypoint_strings + 12448 /* "glEnableClientState" */, + providers, entrypoints); +} + +static PFNGLENABLECLIENTSTATEINDEXEDEXTPROC +epoxy_glEnableClientStateIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12468 /* glEnableClientStateIndexedEXT */); +} + +static PFNGLENABLECLIENTSTATEIEXTPROC +epoxy_glEnableClientStateiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12498 /* glEnableClientStateiEXT */); +} + +static PFNGLENABLEDRIVERCONTROLQCOMPROC +epoxy_glEnableDriverControlQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 12522 /* glEnableDriverControlQCOM */); +} + +static PFNGLENABLEINDEXEDEXTPROC +epoxy_glEnableIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12766 /* "glEnableiEXT" */, + 12779 /* "glEnableiNV" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12548 /* "glEnableIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLENABLEVARIANTCLIENTSTATEEXTPROC +epoxy_glEnableVariantClientStateEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 12567 /* glEnableVariantClientStateEXT */); +} + +static PFNGLENABLEVERTEXARRAYATTRIBPROC +epoxy_glEnableVertexArrayAttrib_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12597 /* "glEnableVertexArrayAttrib" */, + 12597 /* "glEnableVertexArrayAttrib" */, + }; + return gl_provider_resolver(entrypoint_strings + 12597 /* "glEnableVertexArrayAttrib" */, + providers, entrypoints); +} + +static PFNGLENABLEVERTEXARRAYATTRIBEXTPROC +epoxy_glEnableVertexArrayAttribEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12623 /* glEnableVertexArrayAttribEXT */); +} + +static PFNGLENABLEVERTEXARRAYEXTPROC +epoxy_glEnableVertexArrayEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 12652 /* glEnableVertexArrayEXT */); +} + +static PFNGLENABLEVERTEXATTRIBAPPLEPROC +epoxy_glEnableVertexAttribAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 12675 /* glEnableVertexAttribAPPLE */); +} + +static PFNGLENABLEVERTEXATTRIBARRAYPROC +epoxy_glEnableVertexAttribArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12701 /* "glEnableVertexAttribArray" */, + 12701 /* "glEnableVertexAttribArray" */, + 12727 /* "glEnableVertexAttribArrayARB" */, + 12727 /* "glEnableVertexAttribArrayARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 12701 /* "glEnableVertexAttribArray" */, + providers, entrypoints); +} + +static PFNGLENABLEVERTEXATTRIBARRAYARBPROC +epoxy_glEnableVertexAttribArrayARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12727 /* "glEnableVertexAttribArrayARB" */, + 12727 /* "glEnableVertexAttribArrayARB" */, + 12701 /* "glEnableVertexAttribArray" */, + 12701 /* "glEnableVertexAttribArray" */, + }; + return gl_provider_resolver(entrypoint_strings + 12727 /* "glEnableVertexAttribArrayARB" */, + providers, entrypoints); +} + +static PFNGLENABLEIPROC +epoxy_glEnablei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12766 /* "glEnableiEXT" */, + 12779 /* "glEnableiNV" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12756 /* "glEnablei" */, + providers, entrypoints); +} + +static PFNGLENABLEIEXTPROC +epoxy_glEnableiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12766 /* "glEnableiEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12779 /* "glEnableiNV" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12766 /* "glEnableiEXT" */, + providers, entrypoints); +} + +static PFNGLENABLEINVPROC +epoxy_glEnableiNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12779 /* "glEnableiNV" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12766 /* "glEnableiEXT" */, + 12791 /* "glEnableiOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 12779 /* "glEnableiNV" */, + providers, entrypoints); +} + +static PFNGLENABLEIOESPROC +epoxy_glEnableiOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12791 /* "glEnableiOES" */, + 12548 /* "glEnableIndexedEXT" */, + 12548 /* "glEnableIndexedEXT" */, + 12756 /* "glEnablei" */, + 12756 /* "glEnablei" */, + 12766 /* "glEnableiEXT" */, + 12779 /* "glEnableiNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 12791 /* "glEnableiOES" */, + providers, entrypoints); +} + +static PFNGLENDPROC +epoxy_glEnd_unwrapped_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12804 /* glEnd */); +} + +static PFNGLENDCONDITIONALRENDERPROC +epoxy_glEndConditionalRender_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_conditional_render, + GL_extension_GL_NVX_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12810 /* "glEndConditionalRender" */, + 12833 /* "glEndConditionalRenderNV" */, + 12858 /* "glEndConditionalRenderNVX" */, + }; + return gl_provider_resolver(entrypoint_strings + 12810 /* "glEndConditionalRender" */, + providers, entrypoints); +} + +static PFNGLENDCONDITIONALRENDERNVPROC +epoxy_glEndConditionalRenderNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_conditional_render, + Desktop_OpenGL_3_0, + GL_extension_GL_NVX_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12833 /* "glEndConditionalRenderNV" */, + 12810 /* "glEndConditionalRender" */, + 12858 /* "glEndConditionalRenderNVX" */, + }; + return gl_provider_resolver(entrypoint_strings + 12833 /* "glEndConditionalRenderNV" */, + providers, entrypoints); +} + +static PFNGLENDCONDITIONALRENDERNVXPROC +epoxy_glEndConditionalRenderNVX_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NVX_conditional_render, + Desktop_OpenGL_3_0, + GL_extension_GL_NV_conditional_render, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12858 /* "glEndConditionalRenderNVX" */, + 12810 /* "glEndConditionalRender" */, + 12833 /* "glEndConditionalRenderNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 12858 /* "glEndConditionalRenderNVX" */, + providers, entrypoints); +} + +static PFNGLENDFRAGMENTSHADERATIPROC +epoxy_glEndFragmentShaderATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 12884 /* glEndFragmentShaderATI */); +} + +static PFNGLENDLISTPROC +epoxy_glEndList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 12907 /* glEndList */); +} + +static PFNGLENDOCCLUSIONQUERYNVPROC +epoxy_glEndOcclusionQueryNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 12917 /* glEndOcclusionQueryNV */); +} + +static PFNGLENDPERFMONITORAMDPROC +epoxy_glEndPerfMonitorAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 12939 /* glEndPerfMonitorAMD */); +} + +static PFNGLENDPERFQUERYINTELPROC +epoxy_glEndPerfQueryINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 12959 /* glEndPerfQueryINTEL */); +} + +static PFNGLENDQUERYPROC +epoxy_glEndQuery_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12979 /* "glEndQuery" */, + 12979 /* "glEndQuery" */, + 12990 /* "glEndQueryARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 12979 /* "glEndQuery" */, + providers, entrypoints); +} + +static PFNGLENDQUERYARBPROC +epoxy_glEndQueryARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 12990 /* "glEndQueryARB" */, + 12979 /* "glEndQuery" */, + 12979 /* "glEndQuery" */, + }; + return gl_provider_resolver(entrypoint_strings + 12990 /* "glEndQueryARB" */, + providers, entrypoints); +} + +static PFNGLENDQUERYEXTPROC +epoxy_glEndQueryEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13004 /* "glEndQueryEXT" */, + 13004 /* "glEndQueryEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 13004 /* "glEndQueryEXT" */, + providers, entrypoints); +} + +static PFNGLENDQUERYINDEXEDPROC +epoxy_glEndQueryIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13018 /* "glEndQueryIndexed" */, + 13018 /* "glEndQueryIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 13018 /* "glEndQueryIndexed" */, + providers, entrypoints); +} + +static PFNGLENDTILINGQCOMPROC +epoxy_glEndTilingQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_tiled_rendering, 13036 /* glEndTilingQCOM */); +} + +static PFNGLENDTRANSFORMFEEDBACKPROC +epoxy_glEndTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13052 /* "glEndTransformFeedback" */, + 13052 /* "glEndTransformFeedback" */, + 13075 /* "glEndTransformFeedbackEXT" */, + 13101 /* "glEndTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 13052 /* "glEndTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLENDTRANSFORMFEEDBACKEXTPROC +epoxy_glEndTransformFeedbackEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13075 /* "glEndTransformFeedbackEXT" */, + 13052 /* "glEndTransformFeedback" */, + 13052 /* "glEndTransformFeedback" */, + 13101 /* "glEndTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 13075 /* "glEndTransformFeedbackEXT" */, + providers, entrypoints); +} + +static PFNGLENDTRANSFORMFEEDBACKNVPROC +epoxy_glEndTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13101 /* "glEndTransformFeedbackNV" */, + 13052 /* "glEndTransformFeedback" */, + 13052 /* "glEndTransformFeedback" */, + 13075 /* "glEndTransformFeedbackEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 13101 /* "glEndTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLENDVERTEXSHADEREXTPROC +epoxy_glEndVertexShaderEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 13126 /* glEndVertexShaderEXT */); +} + +static PFNGLENDVIDEOCAPTURENVPROC +epoxy_glEndVideoCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 13147 /* glEndVideoCaptureNV */); +} + +static PFNGLEVALCOORD1DPROC +epoxy_glEvalCoord1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13167 /* glEvalCoord1d */); +} + +static PFNGLEVALCOORD1DVPROC +epoxy_glEvalCoord1dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13181 /* glEvalCoord1dv */); +} + +static PFNGLEVALCOORD1FPROC +epoxy_glEvalCoord1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13196 /* glEvalCoord1f */); +} + +static PFNGLEVALCOORD1FVPROC +epoxy_glEvalCoord1fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13210 /* glEvalCoord1fv */); +} + +static PFNGLEVALCOORD1XOESPROC +epoxy_glEvalCoord1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13225 /* glEvalCoord1xOES */); +} + +static PFNGLEVALCOORD1XVOESPROC +epoxy_glEvalCoord1xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13242 /* glEvalCoord1xvOES */); +} + +static PFNGLEVALCOORD2DPROC +epoxy_glEvalCoord2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13260 /* glEvalCoord2d */); +} + +static PFNGLEVALCOORD2DVPROC +epoxy_glEvalCoord2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13274 /* glEvalCoord2dv */); +} + +static PFNGLEVALCOORD2FPROC +epoxy_glEvalCoord2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13289 /* glEvalCoord2f */); +} + +static PFNGLEVALCOORD2FVPROC +epoxy_glEvalCoord2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13303 /* glEvalCoord2fv */); +} + +static PFNGLEVALCOORD2XOESPROC +epoxy_glEvalCoord2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13318 /* glEvalCoord2xOES */); +} + +static PFNGLEVALCOORD2XVOESPROC +epoxy_glEvalCoord2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13335 /* glEvalCoord2xvOES */); +} + +static PFNGLEVALMAPSNVPROC +epoxy_glEvalMapsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 13353 /* glEvalMapsNV */); +} + +static PFNGLEVALMESH1PROC +epoxy_glEvalMesh1_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13366 /* glEvalMesh1 */); +} + +static PFNGLEVALMESH2PROC +epoxy_glEvalMesh2_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13378 /* glEvalMesh2 */); +} + +static PFNGLEVALPOINT1PROC +epoxy_glEvalPoint1_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13390 /* glEvalPoint1 */); +} + +static PFNGLEVALPOINT2PROC +epoxy_glEvalPoint2_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13403 /* glEvalPoint2 */); +} + +static PFNGLEVALUATEDEPTHVALUESARBPROC +epoxy_glEvaluateDepthValuesARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sample_locations, 13416 /* glEvaluateDepthValuesARB */); +} + +static PFNGLEXECUTEPROGRAMNVPROC +epoxy_glExecuteProgramNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 13441 /* glExecuteProgramNV */); +} + +static PFNGLEXTGETBUFFERPOINTERVQCOMPROC +epoxy_glExtGetBufferPointervQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13460 /* glExtGetBufferPointervQCOM */); +} + +static PFNGLEXTGETBUFFERSQCOMPROC +epoxy_glExtGetBuffersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13487 /* glExtGetBuffersQCOM */); +} + +static PFNGLEXTGETFRAMEBUFFERSQCOMPROC +epoxy_glExtGetFramebuffersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13507 /* glExtGetFramebuffersQCOM */); +} + +static PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC +epoxy_glExtGetProgramBinarySourceQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13532 /* glExtGetProgramBinarySourceQCOM */); +} + +static PFNGLEXTGETPROGRAMSQCOMPROC +epoxy_glExtGetProgramsQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13564 /* glExtGetProgramsQCOM */); +} + +static PFNGLEXTGETRENDERBUFFERSQCOMPROC +epoxy_glExtGetRenderbuffersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13585 /* glExtGetRenderbuffersQCOM */); +} + +static PFNGLEXTGETSHADERSQCOMPROC +epoxy_glExtGetShadersQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13611 /* glExtGetShadersQCOM */); +} + +static PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC +epoxy_glExtGetTexLevelParameterivQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13631 /* glExtGetTexLevelParameterivQCOM */); +} + +static PFNGLEXTGETTEXSUBIMAGEQCOMPROC +epoxy_glExtGetTexSubImageQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13663 /* glExtGetTexSubImageQCOM */); +} + +static PFNGLEXTGETTEXTURESQCOMPROC +epoxy_glExtGetTexturesQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13687 /* glExtGetTexturesQCOM */); +} + +static PFNGLEXTISPROGRAMBINARYQCOMPROC +epoxy_glExtIsProgramBinaryQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get2, 13708 /* glExtIsProgramBinaryQCOM */); +} + +static PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC +epoxy_glExtTexObjectStateOverrideiQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_extended_get, 13733 /* glExtTexObjectStateOverrideiQCOM */); +} + +static PFNGLEXTRACTCOMPONENTEXTPROC +epoxy_glExtractComponentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 13766 /* glExtractComponentEXT */); +} + +static PFNGLFEEDBACKBUFFERPROC +epoxy_glFeedbackBuffer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 13788 /* glFeedbackBuffer */); +} + +static PFNGLFEEDBACKBUFFERXOESPROC +epoxy_glFeedbackBufferxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 13805 /* glFeedbackBufferxOES */); +} + +static PFNGLFENCESYNCPROC +epoxy_glFenceSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + 13838 /* "glFenceSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 13826 /* "glFenceSync" */, + providers, entrypoints); +} + +static PFNGLFENCESYNCAPPLEPROC +epoxy_glFenceSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13838 /* "glFenceSyncAPPLE" */, + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + 13826 /* "glFenceSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 13838 /* "glFenceSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLFINALCOMBINERINPUTNVPROC +epoxy_glFinalCombinerInputNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 13855 /* glFinalCombinerInputNV */); +} + +static PFNGLFINISHPROC +epoxy_glFinish_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13878 /* "glFinish" */, + 13878 /* "glFinish" */, + 13878 /* "glFinish" */, + }; + return gl_provider_resolver(entrypoint_strings + 13878 /* "glFinish" */, + providers, entrypoints); +} + +static PFNGLFINISHASYNCSGIXPROC +epoxy_glFinishAsyncSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 13887 /* glFinishAsyncSGIX */); +} + +static PFNGLFINISHFENCEAPPLEPROC +epoxy_glFinishFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 13905 /* glFinishFenceAPPLE */); +} + +static PFNGLFINISHFENCENVPROC +epoxy_glFinishFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 13924 /* glFinishFenceNV */); +} + +static PFNGLFINISHOBJECTAPPLEPROC +epoxy_glFinishObjectAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 13940 /* glFinishObjectAPPLE */); +} + +static PFNGLFINISHTEXTURESUNXPROC +epoxy_glFinishTextureSUNX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUNX_constant_data, 13960 /* glFinishTextureSUNX */); +} + +static PFNGLFLUSHPROC +epoxy_glFlush_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13980 /* "glFlush" */, + 13980 /* "glFlush" */, + 13980 /* "glFlush" */, + }; + return gl_provider_resolver(entrypoint_strings + 13980 /* "glFlush" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDBUFFERRANGEPROC +epoxy_glFlushMappedBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_flush_buffer_range, + GL_extension_GL_EXT_map_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + 14043 /* "glFlushMappedBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 13988 /* "glFlushMappedBufferRange" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC +epoxy_glFlushMappedBufferRangeAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_flush_buffer_range, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_EXT_map_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 14043 /* "glFlushMappedBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC +epoxy_glFlushMappedBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_map_buffer_range, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_flush_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14043 /* "glFlushMappedBufferRangeEXT" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 13988 /* "glFlushMappedBufferRange" */, + 14013 /* "glFlushMappedBufferRangeAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 14043 /* "glFlushMappedBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC +epoxy_glFlushMappedNamedBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14071 /* "glFlushMappedNamedBufferRange" */, + 14071 /* "glFlushMappedNamedBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 14071 /* "glFlushMappedNamedBufferRange" */, + providers, entrypoints); +} + +static PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC +epoxy_glFlushMappedNamedBufferRangeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 14101 /* glFlushMappedNamedBufferRangeEXT */); +} + +static PFNGLFLUSHPIXELDATARANGENVPROC +epoxy_glFlushPixelDataRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_pixel_data_range, 14134 /* glFlushPixelDataRangeNV */); +} + +static PFNGLFLUSHRASTERSGIXPROC +epoxy_glFlushRasterSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_flush_raster, 14158 /* glFlushRasterSGIX */); +} + +static PFNGLFLUSHSTATICDATAIBMPROC +epoxy_glFlushStaticDataIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_static_data, 14176 /* glFlushStaticDataIBM */); +} + +static PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC +epoxy_glFlushVertexArrayRangeAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_array_range, 14197 /* glFlushVertexArrayRangeAPPLE */); +} + +static PFNGLFLUSHVERTEXARRAYRANGENVPROC +epoxy_glFlushVertexArrayRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_array_range, 14226 /* glFlushVertexArrayRangeNV */); +} + +static PFNGLFOGCOORDFORMATNVPROC +epoxy_glFogCoordFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 14252 /* glFogCoordFormatNV */); +} + +static PFNGLFOGCOORDPOINTERPROC +epoxy_glFogCoordPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14271 /* "glFogCoordPointer" */, + 14289 /* "glFogCoordPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14271 /* "glFogCoordPointer" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDPOINTEREXTPROC +epoxy_glFogCoordPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14289 /* "glFogCoordPointerEXT" */, + 14271 /* "glFogCoordPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 14289 /* "glFogCoordPointerEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDPOINTERLISTIBMPROC +epoxy_glFogCoordPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 14310 /* glFogCoordPointerListIBM */); +} + +static PFNGLFOGCOORDDPROC +epoxy_glFogCoordd_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14335 /* "glFogCoordd" */, + 14347 /* "glFogCoorddEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14335 /* "glFogCoordd" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDDEXTPROC +epoxy_glFogCoorddEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14347 /* "glFogCoorddEXT" */, + 14335 /* "glFogCoordd" */, + }; + return gl_provider_resolver(entrypoint_strings + 14347 /* "glFogCoorddEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDDVPROC +epoxy_glFogCoorddv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14362 /* "glFogCoorddv" */, + 14375 /* "glFogCoorddvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14362 /* "glFogCoorddv" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDDVEXTPROC +epoxy_glFogCoorddvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14375 /* "glFogCoorddvEXT" */, + 14362 /* "glFogCoorddv" */, + }; + return gl_provider_resolver(entrypoint_strings + 14375 /* "glFogCoorddvEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFPROC +epoxy_glFogCoordf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14391 /* "glFogCoordf" */, + 14403 /* "glFogCoordfEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14391 /* "glFogCoordf" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFEXTPROC +epoxy_glFogCoordfEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14403 /* "glFogCoordfEXT" */, + 14391 /* "glFogCoordf" */, + }; + return gl_provider_resolver(entrypoint_strings + 14403 /* "glFogCoordfEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFVPROC +epoxy_glFogCoordfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_fog_coord, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14418 /* "glFogCoordfv" */, + 14431 /* "glFogCoordfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 14418 /* "glFogCoordfv" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDFVEXTPROC +epoxy_glFogCoordfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_fog_coord, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14431 /* "glFogCoordfvEXT" */, + 14418 /* "glFogCoordfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 14431 /* "glFogCoordfvEXT" */, + providers, entrypoints); +} + +static PFNGLFOGCOORDHNVPROC +epoxy_glFogCoordhNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 14447 /* glFogCoordhNV */); +} + +static PFNGLFOGCOORDHVNVPROC +epoxy_glFogCoordhvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 14461 /* glFogCoordhvNV */); +} + +static PFNGLFOGFUNCSGISPROC +epoxy_glFogFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_fog_function, 14476 /* glFogFuncSGIS */); +} + +static PFNGLFOGFPROC +epoxy_glFogf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14490 /* "glFogf" */, + 14490 /* "glFogf" */, + }; + return gl_provider_resolver(entrypoint_strings + 14490 /* "glFogf" */, + providers, entrypoints); +} + +static PFNGLFOGFVPROC +epoxy_glFogfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14497 /* "glFogfv" */, + 14497 /* "glFogfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 14497 /* "glFogfv" */, + providers, entrypoints); +} + +static PFNGLFOGIPROC +epoxy_glFogi_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 14505 /* glFogi */); +} + +static PFNGLFOGIVPROC +epoxy_glFogiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 14512 /* glFogiv */); +} + +static PFNGLFOGXPROC +epoxy_glFogx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 14520 /* glFogx */); +} + +static PFNGLFOGXOESPROC +epoxy_glFogxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 14527 /* glFogxOES */); +} + +static PFNGLFOGXVPROC +epoxy_glFogxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 14537 /* glFogxv */); +} + +static PFNGLFOGXVOESPROC +epoxy_glFogxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 14545 /* glFogxvOES */); +} + +static PFNGLFRAGMENTCOLORMATERIALSGIXPROC +epoxy_glFragmentColorMaterialSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14556 /* glFragmentColorMaterialSGIX */); +} + +static PFNGLFRAGMENTCOVERAGECOLORNVPROC +epoxy_glFragmentCoverageColorNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_coverage_to_color, 14584 /* glFragmentCoverageColorNV */); +} + +static PFNGLFRAGMENTLIGHTMODELFSGIXPROC +epoxy_glFragmentLightModelfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14610 /* glFragmentLightModelfSGIX */); +} + +static PFNGLFRAGMENTLIGHTMODELFVSGIXPROC +epoxy_glFragmentLightModelfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14636 /* glFragmentLightModelfvSGIX */); +} + +static PFNGLFRAGMENTLIGHTMODELISGIXPROC +epoxy_glFragmentLightModeliSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14663 /* glFragmentLightModeliSGIX */); +} + +static PFNGLFRAGMENTLIGHTMODELIVSGIXPROC +epoxy_glFragmentLightModelivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14689 /* glFragmentLightModelivSGIX */); +} + +static PFNGLFRAGMENTLIGHTFSGIXPROC +epoxy_glFragmentLightfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14716 /* glFragmentLightfSGIX */); +} + +static PFNGLFRAGMENTLIGHTFVSGIXPROC +epoxy_glFragmentLightfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14737 /* glFragmentLightfvSGIX */); +} + +static PFNGLFRAGMENTLIGHTISGIXPROC +epoxy_glFragmentLightiSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14759 /* glFragmentLightiSGIX */); +} + +static PFNGLFRAGMENTLIGHTIVSGIXPROC +epoxy_glFragmentLightivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14780 /* glFragmentLightivSGIX */); +} + +static PFNGLFRAGMENTMATERIALFSGIXPROC +epoxy_glFragmentMaterialfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14802 /* glFragmentMaterialfSGIX */); +} + +static PFNGLFRAGMENTMATERIALFVSGIXPROC +epoxy_glFragmentMaterialfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14826 /* glFragmentMaterialfvSGIX */); +} + +static PFNGLFRAGMENTMATERIALISGIXPROC +epoxy_glFragmentMaterialiSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14851 /* glFragmentMaterialiSGIX */); +} + +static PFNGLFRAGMENTMATERIALIVSGIXPROC +epoxy_glFragmentMaterialivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 14875 /* glFragmentMaterialivSGIX */); +} + +static PFNGLFRAMETERMINATORGREMEDYPROC +epoxy_glFrameTerminatorGREMEDY_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_GREMEDY_frame_terminator, 14900 /* glFrameTerminatorGREMEDY */); +} + +static PFNGLFRAMEZOOMSGIXPROC +epoxy_glFrameZoomSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_framezoom, 14925 /* glFrameZoomSGIX */); +} + +static PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC +epoxy_glFramebufferDrawBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 14941 /* glFramebufferDrawBufferEXT */); +} + +static PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC +epoxy_glFramebufferDrawBuffersEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 14968 /* glFramebufferDrawBuffersEXT */); +} + +static PFNGLFRAMEBUFFERPARAMETERIPROC +epoxy_glFramebufferParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_framebuffer_no_attachments, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 14996 /* "glFramebufferParameteri" */, + 14996 /* "glFramebufferParameteri" */, + 14996 /* "glFramebufferParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 14996 /* "glFramebufferParameteri" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERREADBUFFEREXTPROC +epoxy_glFramebufferReadBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 15020 /* glFramebufferReadBufferEXT */); +} + +static PFNGLFRAMEBUFFERRENDERBUFFERPROC +epoxy_glFramebufferRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15073 /* "glFramebufferRenderbufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15047 /* "glFramebufferRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC +epoxy_glFramebufferRenderbufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15073 /* "glFramebufferRenderbufferEXT" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + 15047 /* "glFramebufferRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 15073 /* "glFramebufferRenderbufferEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERRENDERBUFFEROESPROC +epoxy_glFramebufferRenderbufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 15102 /* glFramebufferRenderbufferOES */); +} + +static PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC +epoxy_glFramebufferSampleLocationsfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sample_locations, 15131 /* glFramebufferSampleLocationsfvARB */); +} + +static PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC +epoxy_glFramebufferSampleLocationsfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_sample_locations, 15165 /* glFramebufferSampleLocationsfvNV */); +} + +static PFNGLFRAMEBUFFERTEXTUREPROC +epoxy_glFramebufferTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_OES_geometry_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15492 /* "glFramebufferTextureARB" */, + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + 15713 /* "glFramebufferTextureOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15198 /* "glFramebufferTexture" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE1DPROC +epoxy_glFramebufferTexture1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15219 /* "glFramebufferTexture1D" */, + 15219 /* "glFramebufferTexture1D" */, + 15242 /* "glFramebufferTexture1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15219 /* "glFramebufferTexture1D" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE1DEXTPROC +epoxy_glFramebufferTexture1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15242 /* "glFramebufferTexture1DEXT" */, + 15219 /* "glFramebufferTexture1D" */, + 15219 /* "glFramebufferTexture1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 15242 /* "glFramebufferTexture1DEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE2DPROC +epoxy_glFramebufferTexture2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + 15291 /* "glFramebufferTexture2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15268 /* "glFramebufferTexture2D" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE2DEXTPROC +epoxy_glFramebufferTexture2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15291 /* "glFramebufferTexture2DEXT" */, + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + 15268 /* "glFramebufferTexture2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 15291 /* "glFramebufferTexture2DEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC +epoxy_glFramebufferTexture2DMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multisampled_render_to_texture, 15317 /* glFramebufferTexture2DMultisampleEXT */); +} + +static PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC +epoxy_glFramebufferTexture2DMultisampleIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_multisampled_render_to_texture, 15354 /* glFramebufferTexture2DMultisampleIMG */); +} + +static PFNGLFRAMEBUFFERTEXTURE2DOESPROC +epoxy_glFramebufferTexture2DOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 15391 /* glFramebufferTexture2DOES */); +} + +static PFNGLFRAMEBUFFERTEXTURE3DPROC +epoxy_glFramebufferTexture3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_EXT_framebuffer_object, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15417 /* "glFramebufferTexture3D" */, + 15417 /* "glFramebufferTexture3D" */, + 15440 /* "glFramebufferTexture3DEXT" */, + 15466 /* "glFramebufferTexture3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15417 /* "glFramebufferTexture3D" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE3DEXTPROC +epoxy_glFramebufferTexture3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15440 /* "glFramebufferTexture3DEXT" */, + 15417 /* "glFramebufferTexture3D" */, + 15417 /* "glFramebufferTexture3D" */, + 15466 /* "glFramebufferTexture3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15440 /* "glFramebufferTexture3DEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURE3DOESPROC +epoxy_glFramebufferTexture3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15466 /* "glFramebufferTexture3DOES" */, + 15417 /* "glFramebufferTexture3D" */, + 15417 /* "glFramebufferTexture3D" */, + 15440 /* "glFramebufferTexture3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15466 /* "glFramebufferTexture3DOES" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREARBPROC +epoxy_glFramebufferTextureARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_OES_geometry_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15492 /* "glFramebufferTextureARB" */, + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + 15713 /* "glFramebufferTextureOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15492 /* "glFramebufferTextureARB" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREEXTPROC +epoxy_glFramebufferTextureEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_OES_geometry_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15492 /* "glFramebufferTextureARB" */, + 15713 /* "glFramebufferTextureOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 15516 /* "glFramebufferTextureEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREFACEARBPROC +epoxy_glFramebufferTextureFaceARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15540 /* "glFramebufferTextureFaceARB" */, + 15568 /* "glFramebufferTextureFaceEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15540 /* "glFramebufferTextureFaceARB" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC +epoxy_glFramebufferTextureFaceEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_geometry_program4, + GL_extension_GL_ARB_geometry_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15568 /* "glFramebufferTextureFaceEXT" */, + 15540 /* "glFramebufferTextureFaceARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 15568 /* "glFramebufferTextureFaceEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURELAYERPROC +epoxy_glFramebufferTextureLayer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_texture_array, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15622 /* "glFramebufferTextureLayerARB" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15596 /* "glFramebufferTextureLayer" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURELAYERARBPROC +epoxy_glFramebufferTextureLayerARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture_array, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15622 /* "glFramebufferTextureLayerARB" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15622 /* "glFramebufferTextureLayerARB" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC +epoxy_glFramebufferTextureLayerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_array, + GL_extension_GL_NV_geometry_program4, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15651 /* "glFramebufferTextureLayerEXT" */, + 15651 /* "glFramebufferTextureLayerEXT" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15596 /* "glFramebufferTextureLayer" */, + 15622 /* "glFramebufferTextureLayerARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 15651 /* "glFramebufferTextureLayerEXT" */, + providers, entrypoints); +} + +static PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC +epoxy_glFramebufferTextureMultiviewOVR_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OVR_multiview, 15680 /* glFramebufferTextureMultiviewOVR */); +} + +static PFNGLFRAMEBUFFERTEXTUREOESPROC +epoxy_glFramebufferTextureOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_geometry_shader, + Desktop_OpenGL_3_2, + OpenGL_ES_3_2, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_geometry_shader, + GL_extension_GL_NV_geometry_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15713 /* "glFramebufferTextureOES" */, + 15198 /* "glFramebufferTexture" */, + 15198 /* "glFramebufferTexture" */, + 15492 /* "glFramebufferTextureARB" */, + 15516 /* "glFramebufferTextureEXT" */, + 15516 /* "glFramebufferTextureEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15713 /* "glFramebufferTextureOES" */, + providers, entrypoints); +} + +static PFNGLFREEOBJECTBUFFERATIPROC +epoxy_glFreeObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 15737 /* glFreeObjectBufferATI */); +} + +static PFNGLFRONTFACEPROC +epoxy_glFrontFace_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15759 /* "glFrontFace" */, + 15759 /* "glFrontFace" */, + 15759 /* "glFrontFace" */, + }; + return gl_provider_resolver(entrypoint_strings + 15759 /* "glFrontFace" */, + providers, entrypoints); +} + +static PFNGLFRUSTUMPROC +epoxy_glFrustum_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 15771 /* glFrustum */); +} + +static PFNGLFRUSTUMFPROC +epoxy_glFrustumf_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 15781 /* glFrustumf */); +} + +static PFNGLFRUSTUMFOESPROC +epoxy_glFrustumfOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 15792 /* glFrustumfOES */); +} + +static PFNGLFRUSTUMXPROC +epoxy_glFrustumx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 15806 /* glFrustumx */); +} + +static PFNGLFRUSTUMXOESPROC +epoxy_glFrustumxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 15817 /* glFrustumxOES */); +} + +static PFNGLGENASYNCMARKERSSGIXPROC +epoxy_glGenAsyncMarkersSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 15831 /* glGenAsyncMarkersSGIX */); +} + +static PFNGLGENBUFFERSPROC +epoxy_glGenBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + 15866 /* "glGenBuffersARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 15853 /* "glGenBuffers" */, + providers, entrypoints); +} + +static PFNGLGENBUFFERSARBPROC +epoxy_glGenBuffersARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15866 /* "glGenBuffersARB" */, + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + 15853 /* "glGenBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 15866 /* "glGenBuffersARB" */, + providers, entrypoints); +} + +static PFNGLGENFENCESAPPLEPROC +epoxy_glGenFencesAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 15882 /* glGenFencesAPPLE */); +} + +static PFNGLGENFENCESNVPROC +epoxy_glGenFencesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 15899 /* glGenFencesNV */); +} + +static PFNGLGENFRAGMENTSHADERSATIPROC +epoxy_glGenFragmentShadersATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 15913 /* glGenFragmentShadersATI */); +} + +static PFNGLGENFRAMEBUFFERSPROC +epoxy_glGenFramebuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + 15955 /* "glGenFramebuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 15937 /* "glGenFramebuffers" */, + providers, entrypoints); +} + +static PFNGLGENFRAMEBUFFERSEXTPROC +epoxy_glGenFramebuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 15955 /* "glGenFramebuffersEXT" */, + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + 15937 /* "glGenFramebuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 15955 /* "glGenFramebuffersEXT" */, + providers, entrypoints); +} + +static PFNGLGENFRAMEBUFFERSOESPROC +epoxy_glGenFramebuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 15976 /* glGenFramebuffersOES */); +} + +static PFNGLGENLISTSPROC +epoxy_glGenLists_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 15997 /* glGenLists */); +} + +static PFNGLGENNAMESAMDPROC +epoxy_glGenNamesAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_name_gen_delete, 16008 /* glGenNamesAMD */); +} + +static PFNGLGENOCCLUSIONQUERIESNVPROC +epoxy_glGenOcclusionQueriesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 16022 /* glGenOcclusionQueriesNV */); +} + +static PFNGLGENPATHSNVPROC +epoxy_glGenPathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 16046 /* glGenPathsNV */); +} + +static PFNGLGENPERFMONITORSAMDPROC +epoxy_glGenPerfMonitorsAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 16059 /* glGenPerfMonitorsAMD */); +} + +static PFNGLGENPROGRAMPIPELINESPROC +epoxy_glGenProgramPipelines_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16080 /* "glGenProgramPipelines" */, + 16080 /* "glGenProgramPipelines" */, + 16080 /* "glGenProgramPipelines" */, + }; + return gl_provider_resolver(entrypoint_strings + 16080 /* "glGenProgramPipelines" */, + providers, entrypoints); +} + +static PFNGLGENPROGRAMPIPELINESEXTPROC +epoxy_glGenProgramPipelinesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 16102 /* glGenProgramPipelinesEXT */); +} + +static PFNGLGENPROGRAMSARBPROC +epoxy_glGenProgramsARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16127 /* "glGenProgramsARB" */, + 16127 /* "glGenProgramsARB" */, + 16144 /* "glGenProgramsNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 16127 /* "glGenProgramsARB" */, + providers, entrypoints); +} + +static PFNGLGENPROGRAMSNVPROC +epoxy_glGenProgramsNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16144 /* "glGenProgramsNV" */, + 16127 /* "glGenProgramsARB" */, + 16127 /* "glGenProgramsARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16144 /* "glGenProgramsNV" */, + providers, entrypoints); +} + +static PFNGLGENQUERIESPROC +epoxy_glGenQueries_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16160 /* "glGenQueries" */, + 16160 /* "glGenQueries" */, + 16173 /* "glGenQueriesARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16160 /* "glGenQueries" */, + providers, entrypoints); +} + +static PFNGLGENQUERIESARBPROC +epoxy_glGenQueriesARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16173 /* "glGenQueriesARB" */, + 16160 /* "glGenQueries" */, + 16160 /* "glGenQueries" */, + }; + return gl_provider_resolver(entrypoint_strings + 16173 /* "glGenQueriesARB" */, + providers, entrypoints); +} + +static PFNGLGENQUERIESEXTPROC +epoxy_glGenQueriesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16189 /* "glGenQueriesEXT" */, + 16189 /* "glGenQueriesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 16189 /* "glGenQueriesEXT" */, + providers, entrypoints); +} + +static PFNGLGENRENDERBUFFERSPROC +epoxy_glGenRenderbuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + 16224 /* "glGenRenderbuffersEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 16205 /* "glGenRenderbuffers" */, + providers, entrypoints); +} + +static PFNGLGENRENDERBUFFERSEXTPROC +epoxy_glGenRenderbuffersEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16224 /* "glGenRenderbuffersEXT" */, + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + 16205 /* "glGenRenderbuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 16224 /* "glGenRenderbuffersEXT" */, + providers, entrypoints); +} + +static PFNGLGENRENDERBUFFERSOESPROC +epoxy_glGenRenderbuffersOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 16246 /* glGenRenderbuffersOES */); +} + +static PFNGLGENSAMPLERSPROC +epoxy_glGenSamplers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16268 /* "glGenSamplers" */, + 16268 /* "glGenSamplers" */, + 16268 /* "glGenSamplers" */, + }; + return gl_provider_resolver(entrypoint_strings + 16268 /* "glGenSamplers" */, + providers, entrypoints); +} + +static PFNGLGENSYMBOLSEXTPROC +epoxy_glGenSymbolsEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 16282 /* glGenSymbolsEXT */); +} + +static PFNGLGENTEXTURESPROC +epoxy_glGenTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16298 /* "glGenTextures" */, + 16298 /* "glGenTextures" */, + 16298 /* "glGenTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 16298 /* "glGenTextures" */, + providers, entrypoints); +} + +static PFNGLGENTEXTURESEXTPROC +epoxy_glGenTexturesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 16312 /* glGenTexturesEXT */); +} + +static PFNGLGENTRANSFORMFEEDBACKSPROC +epoxy_glGenTransformFeedbacks_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + 16353 /* "glGenTransformFeedbacksNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 16329 /* "glGenTransformFeedbacks" */, + providers, entrypoints); +} + +static PFNGLGENTRANSFORMFEEDBACKSNVPROC +epoxy_glGenTransformFeedbacksNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16353 /* "glGenTransformFeedbacksNV" */, + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + 16329 /* "glGenTransformFeedbacks" */, + }; + return gl_provider_resolver(entrypoint_strings + 16353 /* "glGenTransformFeedbacksNV" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXARRAYSPROC +epoxy_glGenVertexArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16397 /* "glGenVertexArraysAPPLE" */, + 16420 /* "glGenVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 16379 /* "glGenVertexArrays" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXARRAYSAPPLEPROC +epoxy_glGenVertexArraysAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16397 /* "glGenVertexArraysAPPLE" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16420 /* "glGenVertexArraysOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 16397 /* "glGenVertexArraysAPPLE" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXARRAYSOESPROC +epoxy_glGenVertexArraysOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16420 /* "glGenVertexArraysOES" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16379 /* "glGenVertexArrays" */, + 16397 /* "glGenVertexArraysAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 16420 /* "glGenVertexArraysOES" */, + providers, entrypoints); +} + +static PFNGLGENVERTEXSHADERSEXTPROC +epoxy_glGenVertexShadersEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 16441 /* glGenVertexShadersEXT */); +} + +static PFNGLGENERATEMIPMAPPROC +epoxy_glGenerateMipmap_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + 16480 /* "glGenerateMipmapEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 16463 /* "glGenerateMipmap" */, + providers, entrypoints); +} + +static PFNGLGENERATEMIPMAPEXTPROC +epoxy_glGenerateMipmapEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16480 /* "glGenerateMipmapEXT" */, + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + 16463 /* "glGenerateMipmap" */, + }; + return gl_provider_resolver(entrypoint_strings + 16480 /* "glGenerateMipmapEXT" */, + providers, entrypoints); +} + +static PFNGLGENERATEMIPMAPOESPROC +epoxy_glGenerateMipmapOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 16500 /* glGenerateMipmapOES */); +} + +static PFNGLGENERATEMULTITEXMIPMAPEXTPROC +epoxy_glGenerateMultiTexMipmapEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 16520 /* glGenerateMultiTexMipmapEXT */); +} + +static PFNGLGENERATETEXTUREMIPMAPPROC +epoxy_glGenerateTextureMipmap_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16548 /* "glGenerateTextureMipmap" */, + 16548 /* "glGenerateTextureMipmap" */, + }; + return gl_provider_resolver(entrypoint_strings + 16548 /* "glGenerateTextureMipmap" */, + providers, entrypoints); +} + +static PFNGLGENERATETEXTUREMIPMAPEXTPROC +epoxy_glGenerateTextureMipmapEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 16572 /* glGenerateTextureMipmapEXT */); +} + +static PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC +epoxy_glGetActiveAtomicCounterBufferiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_atomic_counters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16599 /* "glGetActiveAtomicCounterBufferiv" */, + 16599 /* "glGetActiveAtomicCounterBufferiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16599 /* "glGetActiveAtomicCounterBufferiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEATTRIBPROC +epoxy_glGetActiveAttrib_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16632 /* "glGetActiveAttrib" */, + 16632 /* "glGetActiveAttrib" */, + 16650 /* "glGetActiveAttribARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16632 /* "glGetActiveAttrib" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEATTRIBARBPROC +epoxy_glGetActiveAttribARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16650 /* "glGetActiveAttribARB" */, + 16632 /* "glGetActiveAttrib" */, + 16632 /* "glGetActiveAttrib" */, + }; + return gl_provider_resolver(entrypoint_strings + 16650 /* "glGetActiveAttribARB" */, + providers, entrypoints); +} + +static PFNGLGETACTIVESUBROUTINENAMEPROC +epoxy_glGetActiveSubroutineName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16671 /* "glGetActiveSubroutineName" */, + 16671 /* "glGetActiveSubroutineName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16671 /* "glGetActiveSubroutineName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC +epoxy_glGetActiveSubroutineUniformName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16697 /* "glGetActiveSubroutineUniformName" */, + 16697 /* "glGetActiveSubroutineUniformName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16697 /* "glGetActiveSubroutineUniformName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC +epoxy_glGetActiveSubroutineUniformiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16730 /* "glGetActiveSubroutineUniformiv" */, + 16730 /* "glGetActiveSubroutineUniformiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16730 /* "glGetActiveSubroutineUniformiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMPROC +epoxy_glGetActiveUniform_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16761 /* "glGetActiveUniform" */, + 16761 /* "glGetActiveUniform" */, + 16780 /* "glGetActiveUniformARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 16761 /* "glGetActiveUniform" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMARBPROC +epoxy_glGetActiveUniformARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16780 /* "glGetActiveUniformARB" */, + 16761 /* "glGetActiveUniform" */, + 16761 /* "glGetActiveUniform" */, + }; + return gl_provider_resolver(entrypoint_strings + 16780 /* "glGetActiveUniformARB" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC +epoxy_glGetActiveUniformBlockName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16802 /* "glGetActiveUniformBlockName" */, + 16802 /* "glGetActiveUniformBlockName" */, + 16802 /* "glGetActiveUniformBlockName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16802 /* "glGetActiveUniformBlockName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMBLOCKIVPROC +epoxy_glGetActiveUniformBlockiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16830 /* "glGetActiveUniformBlockiv" */, + 16830 /* "glGetActiveUniformBlockiv" */, + 16830 /* "glGetActiveUniformBlockiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16830 /* "glGetActiveUniformBlockiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMNAMEPROC +epoxy_glGetActiveUniformName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16856 /* "glGetActiveUniformName" */, + 16856 /* "glGetActiveUniformName" */, + }; + return gl_provider_resolver(entrypoint_strings + 16856 /* "glGetActiveUniformName" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEUNIFORMSIVPROC +epoxy_glGetActiveUniformsiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16879 /* "glGetActiveUniformsiv" */, + 16879 /* "glGetActiveUniformsiv" */, + 16879 /* "glGetActiveUniformsiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 16879 /* "glGetActiveUniformsiv" */, + providers, entrypoints); +} + +static PFNGLGETACTIVEVARYINGNVPROC +epoxy_glGetActiveVaryingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 16901 /* glGetActiveVaryingNV */); +} + +static PFNGLGETARRAYOBJECTFVATIPROC +epoxy_glGetArrayObjectfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 16922 /* glGetArrayObjectfvATI */); +} + +static PFNGLGETARRAYOBJECTIVATIPROC +epoxy_glGetArrayObjectivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 16944 /* glGetArrayObjectivATI */); +} + +static PFNGLGETATTACHEDOBJECTSARBPROC +epoxy_glGetAttachedObjectsARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 16966 /* glGetAttachedObjectsARB */); +} + +static PFNGLGETATTACHEDSHADERSPROC +epoxy_glGetAttachedShaders_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 16990 /* "glGetAttachedShaders" */, + 16990 /* "glGetAttachedShaders" */, + }; + return gl_provider_resolver(entrypoint_strings + 16990 /* "glGetAttachedShaders" */, + providers, entrypoints); +} + +static PFNGLGETATTRIBLOCATIONPROC +epoxy_glGetAttribLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17011 /* "glGetAttribLocation" */, + 17011 /* "glGetAttribLocation" */, + 17031 /* "glGetAttribLocationARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17011 /* "glGetAttribLocation" */, + providers, entrypoints); +} + +static PFNGLGETATTRIBLOCATIONARBPROC +epoxy_glGetAttribLocationARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17031 /* "glGetAttribLocationARB" */, + 17011 /* "glGetAttribLocation" */, + 17011 /* "glGetAttribLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 17031 /* "glGetAttribLocationARB" */, + providers, entrypoints); +} + +static PFNGLGETBOOLEANINDEXEDVEXTPROC +epoxy_glGetBooleanIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17054 /* "glGetBooleanIndexedvEXT" */, + 17054 /* "glGetBooleanIndexedvEXT" */, + 17078 /* "glGetBooleani_v" */, + 17078 /* "glGetBooleani_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 17054 /* "glGetBooleanIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETBOOLEANI_VPROC +epoxy_glGetBooleani_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17078 /* "glGetBooleani_v" */, + 17078 /* "glGetBooleani_v" */, + 17054 /* "glGetBooleanIndexedvEXT" */, + 17054 /* "glGetBooleanIndexedvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17078 /* "glGetBooleani_v" */, + providers, entrypoints); +} + +static PFNGLGETBOOLEANVPROC +epoxy_glGetBooleanv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17094 /* "glGetBooleanv" */, + 17094 /* "glGetBooleanv" */, + 17094 /* "glGetBooleanv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17094 /* "glGetBooleanv" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERI64VPROC +epoxy_glGetBufferParameteri64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17108 /* "glGetBufferParameteri64v" */, + 17108 /* "glGetBufferParameteri64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 17108 /* "glGetBufferParameteri64v" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERIVPROC +epoxy_glGetBufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + 17156 /* "glGetBufferParameterivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17133 /* "glGetBufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERIVARBPROC +epoxy_glGetBufferParameterivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17156 /* "glGetBufferParameterivARB" */, + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + 17133 /* "glGetBufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17156 /* "glGetBufferParameterivARB" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPARAMETERUI64VNVPROC +epoxy_glGetBufferParameterui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 17182 /* glGetBufferParameterui64vNV */); +} + +static PFNGLGETBUFFERPOINTERVPROC +epoxy_glGetBufferPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17210 /* "glGetBufferPointerv" */, + 17210 /* "glGetBufferPointerv" */, + 17230 /* "glGetBufferPointervARB" */, + 17253 /* "glGetBufferPointervOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 17210 /* "glGetBufferPointerv" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPOINTERVARBPROC +epoxy_glGetBufferPointervARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17230 /* "glGetBufferPointervARB" */, + 17210 /* "glGetBufferPointerv" */, + 17210 /* "glGetBufferPointerv" */, + 17253 /* "glGetBufferPointervOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 17230 /* "glGetBufferPointervARB" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERPOINTERVOESPROC +epoxy_glGetBufferPointervOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_mapbuffer, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17253 /* "glGetBufferPointervOES" */, + 17210 /* "glGetBufferPointerv" */, + 17210 /* "glGetBufferPointerv" */, + 17230 /* "glGetBufferPointervARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17253 /* "glGetBufferPointervOES" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERSUBDATAPROC +epoxy_glGetBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17276 /* "glGetBufferSubData" */, + 17295 /* "glGetBufferSubDataARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17276 /* "glGetBufferSubData" */, + providers, entrypoints); +} + +static PFNGLGETBUFFERSUBDATAARBPROC +epoxy_glGetBufferSubDataARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17295 /* "glGetBufferSubDataARB" */, + 17276 /* "glGetBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 17295 /* "glGetBufferSubDataARB" */, + providers, entrypoints); +} + +static PFNGLGETCLIPPLANEPROC +epoxy_glGetClipPlane_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 17317 /* glGetClipPlane */); +} + +static PFNGLGETCLIPPLANEFPROC +epoxy_glGetClipPlanef_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 17332 /* glGetClipPlanef */); +} + +static PFNGLGETCLIPPLANEFOESPROC +epoxy_glGetClipPlanefOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 17348 /* glGetClipPlanefOES */); +} + +static PFNGLGETCLIPPLANEXPROC +epoxy_glGetClipPlanex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 17367 /* glGetClipPlanex */); +} + +static PFNGLGETCLIPPLANEXOESPROC +epoxy_glGetClipPlanexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 17383 /* glGetClipPlanexOES */); +} + +static PFNGLGETCOLORTABLEPROC +epoxy_glGetColorTable_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17402 /* "glGetColorTable" */, + 17418 /* "glGetColorTableEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17402 /* "glGetColorTable" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEEXTPROC +epoxy_glGetColorTableEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17418 /* "glGetColorTableEXT" */, + 17402 /* "glGetColorTable" */, + }; + return gl_provider_resolver(entrypoint_strings + 17418 /* "glGetColorTableEXT" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERFVPROC +epoxy_glGetColorTableParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17437 /* "glGetColorTableParameterfv" */, + 17464 /* "glGetColorTableParameterfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17437 /* "glGetColorTableParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERFVEXTPROC +epoxy_glGetColorTableParameterfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17464 /* "glGetColorTableParameterfvEXT" */, + 17437 /* "glGetColorTableParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17464 /* "glGetColorTableParameterfvEXT" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERFVSGIPROC +epoxy_glGetColorTableParameterfvSGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGI_color_table, 17494 /* glGetColorTableParameterfvSGI */); +} + +static PFNGLGETCOLORTABLEPARAMETERIVPROC +epoxy_glGetColorTableParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_paletted_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17524 /* "glGetColorTableParameteriv" */, + 17551 /* "glGetColorTableParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 17524 /* "glGetColorTableParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERIVEXTPROC +epoxy_glGetColorTableParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_paletted_texture, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17551 /* "glGetColorTableParameterivEXT" */, + 17524 /* "glGetColorTableParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 17551 /* "glGetColorTableParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLGETCOLORTABLEPARAMETERIVSGIPROC +epoxy_glGetColorTableParameterivSGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGI_color_table, 17581 /* glGetColorTableParameterivSGI */); +} + +static PFNGLGETCOLORTABLESGIPROC +epoxy_glGetColorTableSGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGI_color_table, 17611 /* glGetColorTableSGI */); +} + +static PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC +epoxy_glGetCombinerInputParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17630 /* glGetCombinerInputParameterfvNV */); +} + +static PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC +epoxy_glGetCombinerInputParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17662 /* glGetCombinerInputParameterivNV */); +} + +static PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC +epoxy_glGetCombinerOutputParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17694 /* glGetCombinerOutputParameterfvNV */); +} + +static PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC +epoxy_glGetCombinerOutputParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 17727 /* glGetCombinerOutputParameterivNV */); +} + +static PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC +epoxy_glGetCombinerStageParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners2, 17760 /* glGetCombinerStageParameterfvNV */); +} + +static PFNGLGETCOMMANDHEADERNVPROC +epoxy_glGetCommandHeaderNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 17792 /* glGetCommandHeaderNV */); +} + +static PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC +epoxy_glGetCompressedMultiTexImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 17813 /* glGetCompressedMultiTexImageEXT */); +} + +static PFNGLGETCOMPRESSEDTEXIMAGEPROC +epoxy_glGetCompressedTexImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_texture_compression, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17845 /* "glGetCompressedTexImage" */, + 17869 /* "glGetCompressedTexImageARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 17845 /* "glGetCompressedTexImage" */, + providers, entrypoints); +} + +static PFNGLGETCOMPRESSEDTEXIMAGEARBPROC +epoxy_glGetCompressedTexImageARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_compression, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17869 /* "glGetCompressedTexImageARB" */, + 17845 /* "glGetCompressedTexImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 17869 /* "glGetCompressedTexImageARB" */, + providers, entrypoints); +} + +static PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC +epoxy_glGetCompressedTextureImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17896 /* "glGetCompressedTextureImage" */, + 17896 /* "glGetCompressedTextureImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 17896 /* "glGetCompressedTextureImage" */, + providers, entrypoints); +} + +static PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC +epoxy_glGetCompressedTextureImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 17924 /* glGetCompressedTextureImageEXT */); +} + +static PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC +epoxy_glGetCompressedTextureSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_get_texture_sub_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 17955 /* "glGetCompressedTextureSubImage" */, + 17955 /* "glGetCompressedTextureSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 17955 /* "glGetCompressedTextureSubImage" */, + providers, entrypoints); +} + +static PFNGLGETCONVOLUTIONFILTERPROC +epoxy_glGetConvolutionFilter_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 17986 /* glGetConvolutionFilter */); +} + +static PFNGLGETCONVOLUTIONFILTEREXTPROC +epoxy_glGetConvolutionFilterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 18009 /* glGetConvolutionFilterEXT */); +} + +static PFNGLGETCONVOLUTIONPARAMETERFVPROC +epoxy_glGetConvolutionParameterfv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 18035 /* glGetConvolutionParameterfv */); +} + +static PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC +epoxy_glGetConvolutionParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 18063 /* glGetConvolutionParameterfvEXT */); +} + +static PFNGLGETCONVOLUTIONPARAMETERIVPROC +epoxy_glGetConvolutionParameteriv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 18094 /* glGetConvolutionParameteriv */); +} + +static PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC +epoxy_glGetConvolutionParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 18122 /* glGetConvolutionParameterivEXT */); +} + +static PFNGLGETCONVOLUTIONPARAMETERXVOESPROC +epoxy_glGetConvolutionParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 18153 /* glGetConvolutionParameterxvOES */); +} + +static PFNGLGETCOVERAGEMODULATIONTABLENVPROC +epoxy_glGetCoverageModulationTableNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_mixed_samples, 18184 /* glGetCoverageModulationTableNV */); +} + +static PFNGLGETDEBUGMESSAGELOGPROC +epoxy_glGetDebugMessageLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18260 /* "glGetDebugMessageLogARB" */, + 18284 /* "glGetDebugMessageLogKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 18215 /* "glGetDebugMessageLog" */, + providers, entrypoints); +} + +static PFNGLGETDEBUGMESSAGELOGAMDPROC +epoxy_glGetDebugMessageLogAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_debug_output, 18236 /* glGetDebugMessageLogAMD */); +} + +static PFNGLGETDEBUGMESSAGELOGARBPROC +epoxy_glGetDebugMessageLogARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_debug_output, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18260 /* "glGetDebugMessageLogARB" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18284 /* "glGetDebugMessageLogKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 18260 /* "glGetDebugMessageLogARB" */, + providers, entrypoints); +} + +static PFNGLGETDEBUGMESSAGELOGKHRPROC +epoxy_glGetDebugMessageLogKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_ARB_debug_output, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18284 /* "glGetDebugMessageLogKHR" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18215 /* "glGetDebugMessageLog" */, + 18260 /* "glGetDebugMessageLogARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 18284 /* "glGetDebugMessageLogKHR" */, + providers, entrypoints); +} + +static PFNGLGETDETAILTEXFUNCSGISPROC +epoxy_glGetDetailTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_detail_texture, 18308 /* glGetDetailTexFuncSGIS */); +} + +static PFNGLGETDOUBLEINDEXEDVEXTPROC +epoxy_glGetDoubleIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18331 /* "glGetDoubleIndexedvEXT" */, + 18354 /* "glGetDoublei_v" */, + 18354 /* "glGetDoublei_v" */, + 18369 /* "glGetDoublei_vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18331 /* "glGetDoubleIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETDOUBLEI_VPROC +epoxy_glGetDoublei_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18354 /* "glGetDoublei_v" */, + 18354 /* "glGetDoublei_v" */, + 18331 /* "glGetDoubleIndexedvEXT" */, + 18369 /* "glGetDoublei_vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18354 /* "glGetDoublei_v" */, + providers, entrypoints); +} + +static PFNGLGETDOUBLEI_VEXTPROC +epoxy_glGetDoublei_vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18369 /* "glGetDoublei_vEXT" */, + 18331 /* "glGetDoubleIndexedvEXT" */, + 18354 /* "glGetDoublei_v" */, + 18354 /* "glGetDoublei_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 18369 /* "glGetDoublei_vEXT" */, + providers, entrypoints); +} + +static PFNGLGETDOUBLEVPROC +epoxy_glGetDoublev_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 18387 /* glGetDoublev */); +} + +static PFNGLGETDRIVERCONTROLSTRINGQCOMPROC +epoxy_glGetDriverControlStringQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 18400 /* glGetDriverControlStringQCOM */); +} + +static PFNGLGETDRIVERCONTROLSQCOMPROC +epoxy_glGetDriverControlsQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_driver_control, 18429 /* glGetDriverControlsQCOM */); +} + +static PFNGLGETERRORPROC +epoxy_glGetError_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18453 /* "glGetError" */, + 18453 /* "glGetError" */, + 18453 /* "glGetError" */, + }; + return gl_provider_resolver(entrypoint_strings + 18453 /* "glGetError" */, + providers, entrypoints); +} + +static PFNGLGETFENCEIVNVPROC +epoxy_glGetFenceivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 18464 /* glGetFenceivNV */); +} + +static PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC +epoxy_glGetFinalCombinerInputParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 18479 /* glGetFinalCombinerInputParameterfvNV */); +} + +static PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC +epoxy_glGetFinalCombinerInputParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_register_combiners, 18516 /* glGetFinalCombinerInputParameterivNV */); +} + +static PFNGLGETFIRSTPERFQUERYIDINTELPROC +epoxy_glGetFirstPerfQueryIdINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 18553 /* glGetFirstPerfQueryIdINTEL */); +} + +static PFNGLGETFIXEDVPROC +epoxy_glGetFixedv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 18580 /* glGetFixedv */); +} + +static PFNGLGETFIXEDVOESPROC +epoxy_glGetFixedvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 18592 /* glGetFixedvOES */); +} + +static PFNGLGETFLOATINDEXEDVEXTPROC +epoxy_glGetFloatIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18607 /* "glGetFloatIndexedvEXT" */, + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18643 /* "glGetFloati_vEXT" */, + 18660 /* "glGetFloati_vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 18607 /* "glGetFloatIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETFLOATI_VPROC +epoxy_glGetFloati_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18607 /* "glGetFloatIndexedvEXT" */, + 18643 /* "glGetFloati_vEXT" */, + 18660 /* "glGetFloati_vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 18629 /* "glGetFloati_v" */, + providers, entrypoints); +} + +static PFNGLGETFLOATI_VEXTPROC +epoxy_glGetFloati_vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18643 /* "glGetFloati_vEXT" */, + 18607 /* "glGetFloatIndexedvEXT" */, + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18660 /* "glGetFloati_vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 18643 /* "glGetFloati_vEXT" */, + providers, entrypoints); +} + +static PFNGLGETFLOATI_VNVPROC +epoxy_glGetFloati_vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18660 /* "glGetFloati_vNV" */, + 18607 /* "glGetFloatIndexedvEXT" */, + 18629 /* "glGetFloati_v" */, + 18629 /* "glGetFloati_v" */, + 18643 /* "glGetFloati_vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18660 /* "glGetFloati_vNV" */, + providers, entrypoints); +} + +static PFNGLGETFLOATVPROC +epoxy_glGetFloatv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18676 /* "glGetFloatv" */, + 18676 /* "glGetFloatv" */, + 18676 /* "glGetFloatv" */, + }; + return gl_provider_resolver(entrypoint_strings + 18676 /* "glGetFloatv" */, + providers, entrypoints); +} + +static PFNGLGETFOGFUNCSGISPROC +epoxy_glGetFogFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_fog_function, 18688 /* glGetFogFuncSGIS */); +} + +static PFNGLGETFRAGDATAINDEXPROC +epoxy_glGetFragDataIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + GL_extension_GL_EXT_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18705 /* "glGetFragDataIndex" */, + 18705 /* "glGetFragDataIndex" */, + 18724 /* "glGetFragDataIndexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18705 /* "glGetFragDataIndex" */, + providers, entrypoints); +} + +static PFNGLGETFRAGDATAINDEXEXTPROC +epoxy_glGetFragDataIndexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_blend_func_extended, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_blend_func_extended, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18724 /* "glGetFragDataIndexEXT" */, + 18705 /* "glGetFragDataIndex" */, + 18705 /* "glGetFragDataIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 18724 /* "glGetFragDataIndexEXT" */, + providers, entrypoints); +} + +static PFNGLGETFRAGDATALOCATIONPROC +epoxy_glGetFragDataLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18746 /* "glGetFragDataLocation" */, + 18746 /* "glGetFragDataLocation" */, + 18768 /* "glGetFragDataLocationEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18746 /* "glGetFragDataLocation" */, + providers, entrypoints); +} + +static PFNGLGETFRAGDATALOCATIONEXTPROC +epoxy_glGetFragDataLocationEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18768 /* "glGetFragDataLocationEXT" */, + 18746 /* "glGetFragDataLocation" */, + 18746 /* "glGetFragDataLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 18768 /* "glGetFragDataLocationEXT" */, + providers, entrypoints); +} + +static PFNGLGETFRAGMENTLIGHTFVSGIXPROC +epoxy_glGetFragmentLightfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18793 /* glGetFragmentLightfvSGIX */); +} + +static PFNGLGETFRAGMENTLIGHTIVSGIXPROC +epoxy_glGetFragmentLightivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18818 /* glGetFragmentLightivSGIX */); +} + +static PFNGLGETFRAGMENTMATERIALFVSGIXPROC +epoxy_glGetFragmentMaterialfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18843 /* glGetFragmentMaterialfvSGIX */); +} + +static PFNGLGETFRAGMENTMATERIALIVSGIXPROC +epoxy_glGetFragmentMaterialivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 18871 /* glGetFragmentMaterialivSGIX */); +} + +static PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC +epoxy_glGetFramebufferAttachmentParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18937 /* "glGetFramebufferAttachmentParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC +epoxy_glGetFramebufferAttachmentParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 18937 /* "glGetFramebufferAttachmentParameterivEXT" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + 18899 /* "glGetFramebufferAttachmentParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 18937 /* "glGetFramebufferAttachmentParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC +epoxy_glGetFramebufferAttachmentParameterivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 18978 /* glGetFramebufferAttachmentParameterivOES */); +} + +static PFNGLGETFRAMEBUFFERPARAMETERIVPROC +epoxy_glGetFramebufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_framebuffer_no_attachments, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19019 /* "glGetFramebufferParameteriv" */, + 19019 /* "glGetFramebufferParameteriv" */, + 19019 /* "glGetFramebufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 19019 /* "glGetFramebufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC +epoxy_glGetFramebufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 19047 /* glGetFramebufferParameterivEXT */); +} + +static PFNGLGETGRAPHICSRESETSTATUSPROC +epoxy_glGetGraphicsResetStatus_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19159 /* "glGetGraphicsResetStatusKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 19078 /* "glGetGraphicsResetStatus" */, + providers, entrypoints); +} + +static PFNGLGETGRAPHICSRESETSTATUSARBPROC +epoxy_glGetGraphicsResetStatusARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 19103 /* glGetGraphicsResetStatusARB */); +} + +static PFNGLGETGRAPHICSRESETSTATUSEXTPROC +epoxy_glGetGraphicsResetStatusEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_robustness, 19131 /* glGetGraphicsResetStatusEXT */); +} + +static PFNGLGETGRAPHICSRESETSTATUSKHRPROC +epoxy_glGetGraphicsResetStatusKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19159 /* "glGetGraphicsResetStatusKHR" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + 19078 /* "glGetGraphicsResetStatus" */, + }; + return gl_provider_resolver(entrypoint_strings + 19159 /* "glGetGraphicsResetStatusKHR" */, + providers, entrypoints); +} + +static PFNGLGETHANDLEARBPROC +epoxy_glGetHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 19187 /* glGetHandleARB */); +} + +static PFNGLGETHISTOGRAMPROC +epoxy_glGetHistogram_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 19202 /* glGetHistogram */); +} + +static PFNGLGETHISTOGRAMEXTPROC +epoxy_glGetHistogramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 19217 /* glGetHistogramEXT */); +} + +static PFNGLGETHISTOGRAMPARAMETERFVPROC +epoxy_glGetHistogramParameterfv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 19235 /* glGetHistogramParameterfv */); +} + +static PFNGLGETHISTOGRAMPARAMETERFVEXTPROC +epoxy_glGetHistogramParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 19261 /* glGetHistogramParameterfvEXT */); +} + +static PFNGLGETHISTOGRAMPARAMETERIVPROC +epoxy_glGetHistogramParameteriv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 19290 /* glGetHistogramParameteriv */); +} + +static PFNGLGETHISTOGRAMPARAMETERIVEXTPROC +epoxy_glGetHistogramParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 19316 /* glGetHistogramParameterivEXT */); +} + +static PFNGLGETHISTOGRAMPARAMETERXVOESPROC +epoxy_glGetHistogramParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 19345 /* glGetHistogramParameterxvOES */); +} + +static PFNGLGETIMAGEHANDLEARBPROC +epoxy_glGetImageHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 19374 /* glGetImageHandleARB */); +} + +static PFNGLGETIMAGEHANDLENVPROC +epoxy_glGetImageHandleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 19394 /* glGetImageHandleNV */); +} + +static PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC +epoxy_glGetImageTransformParameterfvHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 19413 /* glGetImageTransformParameterfvHP */); +} + +static PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC +epoxy_glGetImageTransformParameterivHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 19446 /* glGetImageTransformParameterivHP */); +} + +static PFNGLGETINFOLOGARBPROC +epoxy_glGetInfoLogARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 19479 /* glGetInfoLogARB */); +} + +static PFNGLGETINSTRUMENTSSGIXPROC +epoxy_glGetInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 19495 /* glGetInstrumentsSGIX */); +} + +static PFNGLGETINTEGER64I_VPROC +epoxy_glGetInteger64i_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19516 /* "glGetInteger64i_v" */, + 19516 /* "glGetInteger64i_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19516 /* "glGetInteger64i_v" */, + providers, entrypoints); +} + +static PFNGLGETINTEGER64VPROC +epoxy_glGetInteger64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + 19550 /* "glGetInteger64vAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 19534 /* "glGetInteger64v" */, + providers, entrypoints); +} + +static PFNGLGETINTEGER64VAPPLEPROC +epoxy_glGetInteger64vAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19550 /* "glGetInteger64vAPPLE" */, + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + 19534 /* "glGetInteger64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19550 /* "glGetInteger64vAPPLE" */, + providers, entrypoints); +} + +static PFNGLGETINTEGERINDEXEDVEXTPROC +epoxy_glGetIntegerIndexedvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19571 /* "glGetIntegerIndexedvEXT" */, + 19571 /* "glGetIntegerIndexedvEXT" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19571 /* "glGetIntegerIndexedvEXT" */, + providers, entrypoints); +} + +static PFNGLGETINTEGERI_VPROC +epoxy_glGetIntegeri_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19595 /* "glGetIntegeri_v" */, + 19571 /* "glGetIntegerIndexedvEXT" */, + 19571 /* "glGetIntegerIndexedvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 19595 /* "glGetIntegeri_v" */, + providers, entrypoints); +} + +static PFNGLGETINTEGERI_VEXTPROC +epoxy_glGetIntegeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multiview_draw_buffers, 19611 /* glGetIntegeri_vEXT */); +} + +static PFNGLGETINTEGERUI64I_VNVPROC +epoxy_glGetIntegerui64i_vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 19630 /* glGetIntegerui64i_vNV */); +} + +static PFNGLGETINTEGERUI64VNVPROC +epoxy_glGetIntegerui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 19652 /* glGetIntegerui64vNV */); +} + +static PFNGLGETINTEGERVPROC +epoxy_glGetIntegerv_resolver(void) +{ + return gl_single_resolver(always_present, 19672 /* glGetIntegerv */); +} + +static PFNGLGETINTERNALFORMATSAMPLEIVNVPROC +epoxy_glGetInternalformatSampleivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_internalformat_sample_query, 19686 /* glGetInternalformatSampleivNV */); +} + +static PFNGLGETINTERNALFORMATI64VPROC +epoxy_glGetInternalformati64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_internalformat_query2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19716 /* "glGetInternalformati64v" */, + 19716 /* "glGetInternalformati64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 19716 /* "glGetInternalformati64v" */, + providers, entrypoints); +} + +static PFNGLGETINTERNALFORMATIVPROC +epoxy_glGetInternalformativ_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_internalformat_query, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19740 /* "glGetInternalformativ" */, + 19740 /* "glGetInternalformativ" */, + 19740 /* "glGetInternalformativ" */, + }; + return gl_provider_resolver(entrypoint_strings + 19740 /* "glGetInternalformativ" */, + providers, entrypoints); +} + +static PFNGLGETINVARIANTBOOLEANVEXTPROC +epoxy_glGetInvariantBooleanvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19762 /* glGetInvariantBooleanvEXT */); +} + +static PFNGLGETINVARIANTFLOATVEXTPROC +epoxy_glGetInvariantFloatvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19788 /* glGetInvariantFloatvEXT */); +} + +static PFNGLGETINVARIANTINTEGERVEXTPROC +epoxy_glGetInvariantIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19812 /* glGetInvariantIntegervEXT */); +} + +static PFNGLGETLIGHTFVPROC +epoxy_glGetLightfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 19838 /* "glGetLightfv" */, + 19838 /* "glGetLightfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 19838 /* "glGetLightfv" */, + providers, entrypoints); +} + +static PFNGLGETLIGHTIVPROC +epoxy_glGetLightiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 19851 /* glGetLightiv */); +} + +static PFNGLGETLIGHTXOESPROC +epoxy_glGetLightxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 19864 /* glGetLightxOES */); +} + +static PFNGLGETLIGHTXVPROC +epoxy_glGetLightxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 19879 /* glGetLightxv */); +} + +static PFNGLGETLIGHTXVOESPROC +epoxy_glGetLightxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 19892 /* glGetLightxvOES */); +} + +static PFNGLGETLISTPARAMETERFVSGIXPROC +epoxy_glGetListParameterfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 19908 /* glGetListParameterfvSGIX */); +} + +static PFNGLGETLISTPARAMETERIVSGIXPROC +epoxy_glGetListParameterivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 19933 /* glGetListParameterivSGIX */); +} + +static PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC +epoxy_glGetLocalConstantBooleanvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19958 /* glGetLocalConstantBooleanvEXT */); +} + +static PFNGLGETLOCALCONSTANTFLOATVEXTPROC +epoxy_glGetLocalConstantFloatvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 19988 /* glGetLocalConstantFloatvEXT */); +} + +static PFNGLGETLOCALCONSTANTINTEGERVEXTPROC +epoxy_glGetLocalConstantIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 20016 /* glGetLocalConstantIntegervEXT */); +} + +static PFNGLGETMAPATTRIBPARAMETERFVNVPROC +epoxy_glGetMapAttribParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20046 /* glGetMapAttribParameterfvNV */); +} + +static PFNGLGETMAPATTRIBPARAMETERIVNVPROC +epoxy_glGetMapAttribParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20074 /* glGetMapAttribParameterivNV */); +} + +static PFNGLGETMAPCONTROLPOINTSNVPROC +epoxy_glGetMapControlPointsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20102 /* glGetMapControlPointsNV */); +} + +static PFNGLGETMAPPARAMETERFVNVPROC +epoxy_glGetMapParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20126 /* glGetMapParameterfvNV */); +} + +static PFNGLGETMAPPARAMETERIVNVPROC +epoxy_glGetMapParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 20148 /* glGetMapParameterivNV */); +} + +static PFNGLGETMAPDVPROC +epoxy_glGetMapdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20170 /* glGetMapdv */); +} + +static PFNGLGETMAPFVPROC +epoxy_glGetMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20181 /* glGetMapfv */); +} + +static PFNGLGETMAPIVPROC +epoxy_glGetMapiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20192 /* glGetMapiv */); +} + +static PFNGLGETMAPXVOESPROC +epoxy_glGetMapxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 20203 /* glGetMapxvOES */); +} + +static PFNGLGETMATERIALFVPROC +epoxy_glGetMaterialfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20217 /* "glGetMaterialfv" */, + 20217 /* "glGetMaterialfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20217 /* "glGetMaterialfv" */, + providers, entrypoints); +} + +static PFNGLGETMATERIALIVPROC +epoxy_glGetMaterialiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 20233 /* glGetMaterialiv */); +} + +static PFNGLGETMATERIALXOESPROC +epoxy_glGetMaterialxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 20249 /* glGetMaterialxOES */); +} + +static PFNGLGETMATERIALXVPROC +epoxy_glGetMaterialxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 20267 /* glGetMaterialxv */); +} + +static PFNGLGETMATERIALXVOESPROC +epoxy_glGetMaterialxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 20283 /* glGetMaterialxvOES */); +} + +static PFNGLGETMINMAXPROC +epoxy_glGetMinmax_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 20302 /* glGetMinmax */); +} + +static PFNGLGETMINMAXEXTPROC +epoxy_glGetMinmaxEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 20314 /* glGetMinmaxEXT */); +} + +static PFNGLGETMINMAXPARAMETERFVPROC +epoxy_glGetMinmaxParameterfv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 20329 /* glGetMinmaxParameterfv */); +} + +static PFNGLGETMINMAXPARAMETERFVEXTPROC +epoxy_glGetMinmaxParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 20352 /* glGetMinmaxParameterfvEXT */); +} + +static PFNGLGETMINMAXPARAMETERIVPROC +epoxy_glGetMinmaxParameteriv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 20378 /* glGetMinmaxParameteriv */); +} + +static PFNGLGETMINMAXPARAMETERIVEXTPROC +epoxy_glGetMinmaxParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_histogram, 20401 /* glGetMinmaxParameterivEXT */); +} + +static PFNGLGETMULTITEXENVFVEXTPROC +epoxy_glGetMultiTexEnvfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20427 /* glGetMultiTexEnvfvEXT */); +} + +static PFNGLGETMULTITEXENVIVEXTPROC +epoxy_glGetMultiTexEnvivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20449 /* glGetMultiTexEnvivEXT */); +} + +static PFNGLGETMULTITEXGENDVEXTPROC +epoxy_glGetMultiTexGendvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20471 /* glGetMultiTexGendvEXT */); +} + +static PFNGLGETMULTITEXGENFVEXTPROC +epoxy_glGetMultiTexGenfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20493 /* glGetMultiTexGenfvEXT */); +} + +static PFNGLGETMULTITEXGENIVEXTPROC +epoxy_glGetMultiTexGenivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20515 /* glGetMultiTexGenivEXT */); +} + +static PFNGLGETMULTITEXIMAGEEXTPROC +epoxy_glGetMultiTexImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20537 /* glGetMultiTexImageEXT */); +} + +static PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC +epoxy_glGetMultiTexLevelParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20559 /* glGetMultiTexLevelParameterfvEXT */); +} + +static PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC +epoxy_glGetMultiTexLevelParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20592 /* glGetMultiTexLevelParameterivEXT */); +} + +static PFNGLGETMULTITEXPARAMETERIIVEXTPROC +epoxy_glGetMultiTexParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20625 /* glGetMultiTexParameterIivEXT */); +} + +static PFNGLGETMULTITEXPARAMETERIUIVEXTPROC +epoxy_glGetMultiTexParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20654 /* glGetMultiTexParameterIuivEXT */); +} + +static PFNGLGETMULTITEXPARAMETERFVEXTPROC +epoxy_glGetMultiTexParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20684 /* glGetMultiTexParameterfvEXT */); +} + +static PFNGLGETMULTITEXPARAMETERIVEXTPROC +epoxy_glGetMultiTexParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20712 /* glGetMultiTexParameterivEXT */); +} + +static PFNGLGETMULTISAMPLEFVPROC +epoxy_glGetMultisamplefv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + OpenGL_ES_3_1, + GL_extension_GL_NV_explicit_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + 20759 /* "glGetMultisamplefvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 20740 /* "glGetMultisamplefv" */, + providers, entrypoints); +} + +static PFNGLGETMULTISAMPLEFVNVPROC +epoxy_glGetMultisamplefvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_explicit_multisample, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20759 /* "glGetMultisamplefvNV" */, + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + 20740 /* "glGetMultisamplefv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20759 /* "glGetMultisamplefvNV" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPARAMETERI64VPROC +epoxy_glGetNamedBufferParameteri64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20780 /* "glGetNamedBufferParameteri64v" */, + 20780 /* "glGetNamedBufferParameteri64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 20780 /* "glGetNamedBufferParameteri64v" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPARAMETERIVPROC +epoxy_glGetNamedBufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20810 /* "glGetNamedBufferParameteriv" */, + 20810 /* "glGetNamedBufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20810 /* "glGetNamedBufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC +epoxy_glGetNamedBufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20838 /* glGetNamedBufferParameterivEXT */); +} + +static PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC +epoxy_glGetNamedBufferParameterui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 20869 /* glGetNamedBufferParameterui64vNV */); +} + +static PFNGLGETNAMEDBUFFERPOINTERVPROC +epoxy_glGetNamedBufferPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20902 /* "glGetNamedBufferPointerv" */, + 20902 /* "glGetNamedBufferPointerv" */, + }; + return gl_provider_resolver(entrypoint_strings + 20902 /* "glGetNamedBufferPointerv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERPOINTERVEXTPROC +epoxy_glGetNamedBufferPointervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20927 /* glGetNamedBufferPointervEXT */); +} + +static PFNGLGETNAMEDBUFFERSUBDATAPROC +epoxy_glGetNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 20955 /* "glGetNamedBufferSubData" */, + 20955 /* "glGetNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 20955 /* "glGetNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDBUFFERSUBDATAEXTPROC +epoxy_glGetNamedBufferSubDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 20979 /* glGetNamedBufferSubDataEXT */); +} + +static PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC +epoxy_glGetNamedFramebufferAttachmentParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21006 /* "glGetNamedFramebufferAttachmentParameteriv" */, + 21006 /* "glGetNamedFramebufferAttachmentParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 21006 /* "glGetNamedFramebufferAttachmentParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC +epoxy_glGetNamedFramebufferAttachmentParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21049 /* glGetNamedFramebufferAttachmentParameterivEXT */); +} + +static PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC +epoxy_glGetNamedFramebufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21095 /* "glGetNamedFramebufferParameteriv" */, + 21095 /* "glGetNamedFramebufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 21095 /* "glGetNamedFramebufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC +epoxy_glGetNamedFramebufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21128 /* glGetNamedFramebufferParameterivEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC +epoxy_glGetNamedProgramLocalParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21164 /* glGetNamedProgramLocalParameterIivEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC +epoxy_glGetNamedProgramLocalParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21202 /* glGetNamedProgramLocalParameterIuivEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC +epoxy_glGetNamedProgramLocalParameterdvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21241 /* glGetNamedProgramLocalParameterdvEXT */); +} + +static PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC +epoxy_glGetNamedProgramLocalParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21278 /* glGetNamedProgramLocalParameterfvEXT */); +} + +static PFNGLGETNAMEDPROGRAMSTRINGEXTPROC +epoxy_glGetNamedProgramStringEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21315 /* glGetNamedProgramStringEXT */); +} + +static PFNGLGETNAMEDPROGRAMIVEXTPROC +epoxy_glGetNamedProgramivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21342 /* glGetNamedProgramivEXT */); +} + +static PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC +epoxy_glGetNamedRenderbufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21365 /* "glGetNamedRenderbufferParameteriv" */, + 21365 /* "glGetNamedRenderbufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 21365 /* "glGetNamedRenderbufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC +epoxy_glGetNamedRenderbufferParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 21399 /* glGetNamedRenderbufferParameterivEXT */); +} + +static PFNGLGETNAMEDSTRINGARBPROC +epoxy_glGetNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 21436 /* glGetNamedStringARB */); +} + +static PFNGLGETNAMEDSTRINGIVARBPROC +epoxy_glGetNamedStringivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 21456 /* glGetNamedStringivARB */); +} + +static PFNGLGETNEXTPERFQUERYIDINTELPROC +epoxy_glGetNextPerfQueryIdINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 21478 /* glGetNextPerfQueryIdINTEL */); +} + +static PFNGLGETOBJECTBUFFERFVATIPROC +epoxy_glGetObjectBufferfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 21504 /* glGetObjectBufferfvATI */); +} + +static PFNGLGETOBJECTBUFFERIVATIPROC +epoxy_glGetObjectBufferivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 21527 /* glGetObjectBufferivATI */); +} + +static PFNGLGETOBJECTLABELPROC +epoxy_glGetObjectLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + 21587 /* "glGetObjectLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 21550 /* "glGetObjectLabel" */, + providers, entrypoints); +} + +static PFNGLGETOBJECTLABELEXTPROC +epoxy_glGetObjectLabelEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_label, 21567 /* glGetObjectLabelEXT */); +} + +static PFNGLGETOBJECTLABELKHRPROC +epoxy_glGetObjectLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21587 /* "glGetObjectLabelKHR" */, + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + 21550 /* "glGetObjectLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 21587 /* "glGetObjectLabelKHR" */, + providers, entrypoints); +} + +static PFNGLGETOBJECTPARAMETERFVARBPROC +epoxy_glGetObjectParameterfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 21607 /* glGetObjectParameterfvARB */); +} + +static PFNGLGETOBJECTPARAMETERIVAPPLEPROC +epoxy_glGetObjectParameterivAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_object_purgeable, 21633 /* glGetObjectParameterivAPPLE */); +} + +static PFNGLGETOBJECTPARAMETERIVARBPROC +epoxy_glGetObjectParameterivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shader_objects, 21661 /* glGetObjectParameterivARB */); +} + +static PFNGLGETOBJECTPTRLABELPROC +epoxy_glGetObjectPtrLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + 21707 /* "glGetObjectPtrLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 21687 /* "glGetObjectPtrLabel" */, + providers, entrypoints); +} + +static PFNGLGETOBJECTPTRLABELKHRPROC +epoxy_glGetObjectPtrLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 21707 /* "glGetObjectPtrLabelKHR" */, + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + 21687 /* "glGetObjectPtrLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 21707 /* "glGetObjectPtrLabelKHR" */, + providers, entrypoints); +} + +static PFNGLGETOCCLUSIONQUERYIVNVPROC +epoxy_glGetOcclusionQueryivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 21730 /* glGetOcclusionQueryivNV */); +} + +static PFNGLGETOCCLUSIONQUERYUIVNVPROC +epoxy_glGetOcclusionQueryuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 21754 /* glGetOcclusionQueryuivNV */); +} + +static PFNGLGETPATHCOLORGENFVNVPROC +epoxy_glGetPathColorGenfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21779 /* glGetPathColorGenfvNV */); +} + +static PFNGLGETPATHCOLORGENIVNVPROC +epoxy_glGetPathColorGenivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21801 /* glGetPathColorGenivNV */); +} + +static PFNGLGETPATHCOMMANDSNVPROC +epoxy_glGetPathCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21823 /* glGetPathCommandsNV */); +} + +static PFNGLGETPATHCOORDSNVPROC +epoxy_glGetPathCoordsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21843 /* glGetPathCoordsNV */); +} + +static PFNGLGETPATHDASHARRAYNVPROC +epoxy_glGetPathDashArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21861 /* glGetPathDashArrayNV */); +} + +static PFNGLGETPATHLENGTHNVPROC +epoxy_glGetPathLengthNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21882 /* glGetPathLengthNV */); +} + +static PFNGLGETPATHMETRICRANGENVPROC +epoxy_glGetPathMetricRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21900 /* glGetPathMetricRangeNV */); +} + +static PFNGLGETPATHMETRICSNVPROC +epoxy_glGetPathMetricsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21923 /* glGetPathMetricsNV */); +} + +static PFNGLGETPATHPARAMETERFVNVPROC +epoxy_glGetPathParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21942 /* glGetPathParameterfvNV */); +} + +static PFNGLGETPATHPARAMETERIVNVPROC +epoxy_glGetPathParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21965 /* glGetPathParameterivNV */); +} + +static PFNGLGETPATHSPACINGNVPROC +epoxy_glGetPathSpacingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 21988 /* glGetPathSpacingNV */); +} + +static PFNGLGETPATHTEXGENFVNVPROC +epoxy_glGetPathTexGenfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 22007 /* glGetPathTexGenfvNV */); +} + +static PFNGLGETPATHTEXGENIVNVPROC +epoxy_glGetPathTexGenivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 22027 /* glGetPathTexGenivNV */); +} + +static PFNGLGETPERFCOUNTERINFOINTELPROC +epoxy_glGetPerfCounterInfoINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22047 /* glGetPerfCounterInfoINTEL */); +} + +static PFNGLGETPERFMONITORCOUNTERDATAAMDPROC +epoxy_glGetPerfMonitorCounterDataAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22073 /* glGetPerfMonitorCounterDataAMD */); +} + +static PFNGLGETPERFMONITORCOUNTERINFOAMDPROC +epoxy_glGetPerfMonitorCounterInfoAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22104 /* glGetPerfMonitorCounterInfoAMD */); +} + +static PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC +epoxy_glGetPerfMonitorCounterStringAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22135 /* glGetPerfMonitorCounterStringAMD */); +} + +static PFNGLGETPERFMONITORCOUNTERSAMDPROC +epoxy_glGetPerfMonitorCountersAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22168 /* glGetPerfMonitorCountersAMD */); +} + +static PFNGLGETPERFMONITORGROUPSTRINGAMDPROC +epoxy_glGetPerfMonitorGroupStringAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22196 /* glGetPerfMonitorGroupStringAMD */); +} + +static PFNGLGETPERFMONITORGROUPSAMDPROC +epoxy_glGetPerfMonitorGroupsAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 22227 /* glGetPerfMonitorGroupsAMD */); +} + +static PFNGLGETPERFQUERYDATAINTELPROC +epoxy_glGetPerfQueryDataINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22253 /* glGetPerfQueryDataINTEL */); +} + +static PFNGLGETPERFQUERYIDBYNAMEINTELPROC +epoxy_glGetPerfQueryIdByNameINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22277 /* glGetPerfQueryIdByNameINTEL */); +} + +static PFNGLGETPERFQUERYINFOINTELPROC +epoxy_glGetPerfQueryInfoINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_performance_query, 22305 /* glGetPerfQueryInfoINTEL */); +} + +static PFNGLGETPIXELMAPFVPROC +epoxy_glGetPixelMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22329 /* glGetPixelMapfv */); +} + +static PFNGLGETPIXELMAPUIVPROC +epoxy_glGetPixelMapuiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22345 /* glGetPixelMapuiv */); +} + +static PFNGLGETPIXELMAPUSVPROC +epoxy_glGetPixelMapusv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22362 /* glGetPixelMapusv */); +} + +static PFNGLGETPIXELMAPXVPROC +epoxy_glGetPixelMapxv_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 22379 /* glGetPixelMapxv */); +} + +static PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC +epoxy_glGetPixelTexGenParameterfvSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 22395 /* glGetPixelTexGenParameterfvSGIS */); +} + +static PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC +epoxy_glGetPixelTexGenParameterivSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 22427 /* glGetPixelTexGenParameterivSGIS */); +} + +static PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC +epoxy_glGetPixelTransformParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 22459 /* glGetPixelTransformParameterfvEXT */); +} + +static PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC +epoxy_glGetPixelTransformParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 22493 /* glGetPixelTransformParameterivEXT */); +} + +static PFNGLGETPOINTERINDEXEDVEXTPROC +epoxy_glGetPointerIndexedvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 22527 /* glGetPointerIndexedvEXT */); +} + +static PFNGLGETPOINTERI_VEXTPROC +epoxy_glGetPointeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 22551 /* glGetPointeri_vEXT */); +} + +static PFNGLGETPOINTERVPROC +epoxy_glGetPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_1_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_vertex_array, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22584 /* "glGetPointervEXT" */, + 22601 /* "glGetPointervKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 22570 /* "glGetPointerv" */, + providers, entrypoints); +} + +static PFNGLGETPOINTERVEXTPROC +epoxy_glGetPointervEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_array, + Desktop_OpenGL_1_1, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_1_0, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22584 /* "glGetPointervEXT" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22601 /* "glGetPointervKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 22584 /* "glGetPointervEXT" */, + providers, entrypoints); +} + +static PFNGLGETPOINTERVKHRPROC +epoxy_glGetPointervKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_1_1, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_1_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_vertex_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22601 /* "glGetPointervKHR" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22570 /* "glGetPointerv" */, + 22584 /* "glGetPointervEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 22601 /* "glGetPointervKHR" */, + providers, entrypoints); +} + +static PFNGLGETPOLYGONSTIPPLEPROC +epoxy_glGetPolygonStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 22618 /* glGetPolygonStipple */); +} + +static PFNGLGETPROGRAMBINARYPROC +epoxy_glGetProgramBinary_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_OES_get_program_binary, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + 22657 /* "glGetProgramBinaryOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 22638 /* "glGetProgramBinary" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMBINARYOESPROC +epoxy_glGetProgramBinaryOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_get_program_binary, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22657 /* "glGetProgramBinaryOES" */, + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + 22638 /* "glGetProgramBinary" */, + }; + return gl_provider_resolver(entrypoint_strings + 22657 /* "glGetProgramBinaryOES" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMENVPARAMETERIIVNVPROC +epoxy_glGetProgramEnvParameterIivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22679 /* glGetProgramEnvParameterIivNV */); +} + +static PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC +epoxy_glGetProgramEnvParameterIuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22709 /* glGetProgramEnvParameterIuivNV */); +} + +static PFNGLGETPROGRAMENVPARAMETERDVARBPROC +epoxy_glGetProgramEnvParameterdvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22740 /* "glGetProgramEnvParameterdvARB" */, + 22740 /* "glGetProgramEnvParameterdvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22740 /* "glGetProgramEnvParameterdvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMENVPARAMETERFVARBPROC +epoxy_glGetProgramEnvParameterfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22770 /* "glGetProgramEnvParameterfvARB" */, + 22770 /* "glGetProgramEnvParameterfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22770 /* "glGetProgramEnvParameterfvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMINFOLOGPROC +epoxy_glGetProgramInfoLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22800 /* "glGetProgramInfoLog" */, + 22800 /* "glGetProgramInfoLog" */, + }; + return gl_provider_resolver(entrypoint_strings + 22800 /* "glGetProgramInfoLog" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMINTERFACEIVPROC +epoxy_glGetProgramInterfaceiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22820 /* "glGetProgramInterfaceiv" */, + 22820 /* "glGetProgramInterfaceiv" */, + 22820 /* "glGetProgramInterfaceiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 22820 /* "glGetProgramInterfaceiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC +epoxy_glGetProgramLocalParameterIivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22844 /* glGetProgramLocalParameterIivNV */); +} + +static PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC +epoxy_glGetProgramLocalParameterIuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 22876 /* glGetProgramLocalParameterIuivNV */); +} + +static PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC +epoxy_glGetProgramLocalParameterdvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22909 /* "glGetProgramLocalParameterdvARB" */, + 22909 /* "glGetProgramLocalParameterdvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22909 /* "glGetProgramLocalParameterdvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC +epoxy_glGetProgramLocalParameterfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 22941 /* "glGetProgramLocalParameterfvARB" */, + 22941 /* "glGetProgramLocalParameterfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 22941 /* "glGetProgramLocalParameterfvARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC +epoxy_glGetProgramNamedParameterdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 22973 /* glGetProgramNamedParameterdvNV */); +} + +static PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC +epoxy_glGetProgramNamedParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 23004 /* glGetProgramNamedParameterfvNV */); +} + +static PFNGLGETPROGRAMPARAMETERDVNVPROC +epoxy_glGetProgramParameterdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23035 /* glGetProgramParameterdvNV */); +} + +static PFNGLGETPROGRAMPARAMETERFVNVPROC +epoxy_glGetProgramParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23061 /* glGetProgramParameterfvNV */); +} + +static PFNGLGETPROGRAMPIPELINEINFOLOGPROC +epoxy_glGetProgramPipelineInfoLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23087 /* "glGetProgramPipelineInfoLog" */, + 23087 /* "glGetProgramPipelineInfoLog" */, + 23087 /* "glGetProgramPipelineInfoLog" */, + }; + return gl_provider_resolver(entrypoint_strings + 23087 /* "glGetProgramPipelineInfoLog" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC +epoxy_glGetProgramPipelineInfoLogEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 23115 /* glGetProgramPipelineInfoLogEXT */); +} + +static PFNGLGETPROGRAMPIPELINEIVPROC +epoxy_glGetProgramPipelineiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23146 /* "glGetProgramPipelineiv" */, + 23146 /* "glGetProgramPipelineiv" */, + 23146 /* "glGetProgramPipelineiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23146 /* "glGetProgramPipelineiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMPIPELINEIVEXTPROC +epoxy_glGetProgramPipelineivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 23169 /* glGetProgramPipelineivEXT */); +} + +static PFNGLGETPROGRAMRESOURCEINDEXPROC +epoxy_glGetProgramResourceIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23195 /* "glGetProgramResourceIndex" */, + 23195 /* "glGetProgramResourceIndex" */, + 23195 /* "glGetProgramResourceIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 23195 /* "glGetProgramResourceIndex" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCELOCATIONPROC +epoxy_glGetProgramResourceLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23221 /* "glGetProgramResourceLocation" */, + 23221 /* "glGetProgramResourceLocation" */, + 23221 /* "glGetProgramResourceLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 23221 /* "glGetProgramResourceLocation" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC +epoxy_glGetProgramResourceLocationIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23250 /* "glGetProgramResourceLocationIndex" */, + 23250 /* "glGetProgramResourceLocationIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 23250 /* "glGetProgramResourceLocationIndex" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC +epoxy_glGetProgramResourceLocationIndexEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_blend_func_extended, 23284 /* glGetProgramResourceLocationIndexEXT */); +} + +static PFNGLGETPROGRAMRESOURCENAMEPROC +epoxy_glGetProgramResourceName_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23321 /* "glGetProgramResourceName" */, + 23321 /* "glGetProgramResourceName" */, + 23321 /* "glGetProgramResourceName" */, + }; + return gl_provider_resolver(entrypoint_strings + 23321 /* "glGetProgramResourceName" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMRESOURCEFVNVPROC +epoxy_glGetProgramResourcefvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 23346 /* glGetProgramResourcefvNV */); +} + +static PFNGLGETPROGRAMRESOURCEIVPROC +epoxy_glGetProgramResourceiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_program_interface_query, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23371 /* "glGetProgramResourceiv" */, + 23371 /* "glGetProgramResourceiv" */, + 23371 /* "glGetProgramResourceiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23371 /* "glGetProgramResourceiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMSTAGEIVPROC +epoxy_glGetProgramStageiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23394 /* "glGetProgramStageiv" */, + 23394 /* "glGetProgramStageiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23394 /* "glGetProgramStageiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMSTRINGARBPROC +epoxy_glGetProgramStringARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23414 /* "glGetProgramStringARB" */, + 23414 /* "glGetProgramStringARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23414 /* "glGetProgramStringARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMSTRINGNVPROC +epoxy_glGetProgramStringNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23436 /* glGetProgramStringNV */); +} + +static PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC +epoxy_glGetProgramSubroutineParameteruivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program5, 23457 /* glGetProgramSubroutineParameteruivNV */); +} + +static PFNGLGETPROGRAMIVPROC +epoxy_glGetProgramiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23494 /* "glGetProgramiv" */, + 23494 /* "glGetProgramiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23494 /* "glGetProgramiv" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMIVARBPROC +epoxy_glGetProgramivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23509 /* "glGetProgramivARB" */, + 23509 /* "glGetProgramivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23509 /* "glGetProgramivARB" */, + providers, entrypoints); +} + +static PFNGLGETPROGRAMIVNVPROC +epoxy_glGetProgramivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 23527 /* glGetProgramivNV */); +} + +static PFNGLGETQUERYBUFFEROBJECTI64VPROC +epoxy_glGetQueryBufferObjecti64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23544 /* "glGetQueryBufferObjecti64v" */, + 23544 /* "glGetQueryBufferObjecti64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23544 /* "glGetQueryBufferObjecti64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYBUFFEROBJECTIVPROC +epoxy_glGetQueryBufferObjectiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23571 /* "glGetQueryBufferObjectiv" */, + 23571 /* "glGetQueryBufferObjectiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23571 /* "glGetQueryBufferObjectiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYBUFFEROBJECTUI64VPROC +epoxy_glGetQueryBufferObjectui64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23596 /* "glGetQueryBufferObjectui64v" */, + 23596 /* "glGetQueryBufferObjectui64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23596 /* "glGetQueryBufferObjectui64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYBUFFEROBJECTUIVPROC +epoxy_glGetQueryBufferObjectuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23624 /* "glGetQueryBufferObjectuiv" */, + 23624 /* "glGetQueryBufferObjectuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23624 /* "glGetQueryBufferObjectuiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYINDEXEDIVPROC +epoxy_glGetQueryIndexediv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23650 /* "glGetQueryIndexediv" */, + 23650 /* "glGetQueryIndexediv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23650 /* "glGetQueryIndexediv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTI64VPROC +epoxy_glGetQueryObjecti64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23670 /* "glGetQueryObjecti64v" */, + 23670 /* "glGetQueryObjecti64v" */, + 23691 /* "glGetQueryObjecti64vEXT" */, + 23691 /* "glGetQueryObjecti64vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23670 /* "glGetQueryObjecti64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTI64VEXTPROC +epoxy_glGetQueryObjecti64vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23691 /* "glGetQueryObjecti64vEXT" */, + 23691 /* "glGetQueryObjecti64vEXT" */, + 23670 /* "glGetQueryObjecti64v" */, + 23670 /* "glGetQueryObjecti64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23691 /* "glGetQueryObjecti64vEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTIVPROC +epoxy_glGetQueryObjectiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_occlusion_query, + GL_extension_GL_EXT_disjoint_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23715 /* "glGetQueryObjectiv" */, + 23734 /* "glGetQueryObjectivARB" */, + 23756 /* "glGetQueryObjectivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23715 /* "glGetQueryObjectiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTIVARBPROC +epoxy_glGetQueryObjectivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + GL_extension_GL_EXT_disjoint_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23734 /* "glGetQueryObjectivARB" */, + 23715 /* "glGetQueryObjectiv" */, + 23756 /* "glGetQueryObjectivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23734 /* "glGetQueryObjectivARB" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTIVEXTPROC +epoxy_glGetQueryObjectivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23756 /* "glGetQueryObjectivEXT" */, + 23715 /* "glGetQueryObjectiv" */, + 23734 /* "glGetQueryObjectivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23756 /* "glGetQueryObjectivEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUI64VPROC +epoxy_glGetQueryObjectui64v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23778 /* "glGetQueryObjectui64v" */, + 23778 /* "glGetQueryObjectui64v" */, + 23800 /* "glGetQueryObjectui64vEXT" */, + 23800 /* "glGetQueryObjectui64vEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23778 /* "glGetQueryObjectui64v" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUI64VEXTPROC +epoxy_glGetQueryObjectui64vEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_timer_query, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23800 /* "glGetQueryObjectui64vEXT" */, + 23800 /* "glGetQueryObjectui64vEXT" */, + 23778 /* "glGetQueryObjectui64v" */, + 23778 /* "glGetQueryObjectui64v" */, + }; + return gl_provider_resolver(entrypoint_strings + 23800 /* "glGetQueryObjectui64vEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUIVPROC +epoxy_glGetQueryObjectuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23825 /* "glGetQueryObjectuiv" */, + 23825 /* "glGetQueryObjectuiv" */, + 23845 /* "glGetQueryObjectuivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23825 /* "glGetQueryObjectuiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUIVARBPROC +epoxy_glGetQueryObjectuivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23845 /* "glGetQueryObjectuivARB" */, + 23825 /* "glGetQueryObjectuiv" */, + 23825 /* "glGetQueryObjectuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23845 /* "glGetQueryObjectuivARB" */, + providers, entrypoints); +} + +static PFNGLGETQUERYOBJECTUIVEXTPROC +epoxy_glGetQueryObjectuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23868 /* "glGetQueryObjectuivEXT" */, + 23868 /* "glGetQueryObjectuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23868 /* "glGetQueryObjectuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETQUERYIVPROC +epoxy_glGetQueryiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23891 /* "glGetQueryiv" */, + 23891 /* "glGetQueryiv" */, + 23904 /* "glGetQueryivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 23891 /* "glGetQueryiv" */, + providers, entrypoints); +} + +static PFNGLGETQUERYIVARBPROC +epoxy_glGetQueryivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23904 /* "glGetQueryivARB" */, + 23891 /* "glGetQueryiv" */, + 23891 /* "glGetQueryiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23904 /* "glGetQueryivARB" */, + providers, entrypoints); +} + +static PFNGLGETQUERYIVEXTPROC +epoxy_glGetQueryivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23920 /* "glGetQueryivEXT" */, + 23920 /* "glGetQueryivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23920 /* "glGetQueryivEXT" */, + providers, entrypoints); +} + +static PFNGLGETRENDERBUFFERPARAMETERIVPROC +epoxy_glGetRenderbufferParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23965 /* "glGetRenderbufferParameterivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 23936 /* "glGetRenderbufferParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC +epoxy_glGetRenderbufferParameterivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 23965 /* "glGetRenderbufferParameterivEXT" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + 23936 /* "glGetRenderbufferParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 23965 /* "glGetRenderbufferParameterivEXT" */, + providers, entrypoints); +} + +static PFNGLGETRENDERBUFFERPARAMETERIVOESPROC +epoxy_glGetRenderbufferParameterivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 23997 /* glGetRenderbufferParameterivOES */); +} + +static PFNGLGETSAMPLERPARAMETERIIVPROC +epoxy_glGetSamplerParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24054 /* "glGetSamplerParameterIivEXT" */, + 24082 /* "glGetSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24029 /* "glGetSamplerParameterIiv" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIIVEXTPROC +epoxy_glGetSamplerParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24054 /* "glGetSamplerParameterIivEXT" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24082 /* "glGetSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24054 /* "glGetSamplerParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIIVOESPROC +epoxy_glGetSamplerParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24082 /* "glGetSamplerParameterIivOES" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24029 /* "glGetSamplerParameterIiv" */, + 24054 /* "glGetSamplerParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24082 /* "glGetSamplerParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIUIVPROC +epoxy_glGetSamplerParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24136 /* "glGetSamplerParameterIuivEXT" */, + 24165 /* "glGetSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24110 /* "glGetSamplerParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIUIVEXTPROC +epoxy_glGetSamplerParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24136 /* "glGetSamplerParameterIuivEXT" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24165 /* "glGetSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24136 /* "glGetSamplerParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIUIVOESPROC +epoxy_glGetSamplerParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24165 /* "glGetSamplerParameterIuivOES" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24110 /* "glGetSamplerParameterIuiv" */, + 24136 /* "glGetSamplerParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24165 /* "glGetSamplerParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERFVPROC +epoxy_glGetSamplerParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24194 /* "glGetSamplerParameterfv" */, + 24194 /* "glGetSamplerParameterfv" */, + 24194 /* "glGetSamplerParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24194 /* "glGetSamplerParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETSAMPLERPARAMETERIVPROC +epoxy_glGetSamplerParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24218 /* "glGetSamplerParameteriv" */, + 24218 /* "glGetSamplerParameteriv" */, + 24218 /* "glGetSamplerParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24218 /* "glGetSamplerParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETSEPARABLEFILTERPROC +epoxy_glGetSeparableFilter_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_imaging, 24242 /* glGetSeparableFilter */); +} + +static PFNGLGETSEPARABLEFILTEREXTPROC +epoxy_glGetSeparableFilterEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_convolution, 24263 /* glGetSeparableFilterEXT */); +} + +static PFNGLGETSHADERINFOLOGPROC +epoxy_glGetShaderInfoLog_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24287 /* "glGetShaderInfoLog" */, + 24287 /* "glGetShaderInfoLog" */, + }; + return gl_provider_resolver(entrypoint_strings + 24287 /* "glGetShaderInfoLog" */, + providers, entrypoints); +} + +static PFNGLGETSHADERPRECISIONFORMATPROC +epoxy_glGetShaderPrecisionFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24306 /* "glGetShaderPrecisionFormat" */, + 24306 /* "glGetShaderPrecisionFormat" */, + 24306 /* "glGetShaderPrecisionFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 24306 /* "glGetShaderPrecisionFormat" */, + providers, entrypoints); +} + +static PFNGLGETSHADERSOURCEPROC +epoxy_glGetShaderSource_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24333 /* "glGetShaderSource" */, + 24333 /* "glGetShaderSource" */, + 24351 /* "glGetShaderSourceARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 24333 /* "glGetShaderSource" */, + providers, entrypoints); +} + +static PFNGLGETSHADERSOURCEARBPROC +epoxy_glGetShaderSourceARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24351 /* "glGetShaderSourceARB" */, + 24333 /* "glGetShaderSource" */, + 24333 /* "glGetShaderSource" */, + }; + return gl_provider_resolver(entrypoint_strings + 24351 /* "glGetShaderSourceARB" */, + providers, entrypoints); +} + +static PFNGLGETSHADERIVPROC +epoxy_glGetShaderiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24372 /* "glGetShaderiv" */, + 24372 /* "glGetShaderiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24372 /* "glGetShaderiv" */, + providers, entrypoints); +} + +static PFNGLGETSHARPENTEXFUNCSGISPROC +epoxy_glGetSharpenTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_sharpen_texture, 24386 /* glGetSharpenTexFuncSGIS */); +} + +static PFNGLGETSTAGEINDEXNVPROC +epoxy_glGetStageIndexNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 24410 /* glGetStageIndexNV */); +} + +static PFNGLGETSTRINGPROC +epoxy_glGetString_resolver(void) +{ + return gl_single_resolver(always_present, 24428 /* glGetString */); +} + +static PFNGLGETSTRINGIPROC +epoxy_glGetStringi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24440 /* "glGetStringi" */, + 24440 /* "glGetStringi" */, + }; + return gl_provider_resolver(entrypoint_strings + 24440 /* "glGetStringi" */, + providers, entrypoints); +} + +static PFNGLGETSUBROUTINEINDEXPROC +epoxy_glGetSubroutineIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24453 /* "glGetSubroutineIndex" */, + 24453 /* "glGetSubroutineIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 24453 /* "glGetSubroutineIndex" */, + providers, entrypoints); +} + +static PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC +epoxy_glGetSubroutineUniformLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24474 /* "glGetSubroutineUniformLocation" */, + 24474 /* "glGetSubroutineUniformLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 24474 /* "glGetSubroutineUniformLocation" */, + providers, entrypoints); +} + +static PFNGLGETSYNCIVPROC +epoxy_glGetSynciv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + 24517 /* "glGetSyncivAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 24505 /* "glGetSynciv" */, + providers, entrypoints); +} + +static PFNGLGETSYNCIVAPPLEPROC +epoxy_glGetSyncivAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24517 /* "glGetSyncivAPPLE" */, + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + 24505 /* "glGetSynciv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24517 /* "glGetSyncivAPPLE" */, + providers, entrypoints); +} + +static PFNGLGETTEXBUMPPARAMETERFVATIPROC +epoxy_glGetTexBumpParameterfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 24534 /* glGetTexBumpParameterfvATI */); +} + +static PFNGLGETTEXBUMPPARAMETERIVATIPROC +epoxy_glGetTexBumpParameterivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 24561 /* glGetTexBumpParameterivATI */); +} + +static PFNGLGETTEXENVFVPROC +epoxy_glGetTexEnvfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24588 /* "glGetTexEnvfv" */, + 24588 /* "glGetTexEnvfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24588 /* "glGetTexEnvfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXENVIVPROC +epoxy_glGetTexEnviv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24602 /* "glGetTexEnviv" */, + 24602 /* "glGetTexEnviv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24602 /* "glGetTexEnviv" */, + providers, entrypoints); +} + +static PFNGLGETTEXENVXVPROC +epoxy_glGetTexEnvxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 24616 /* glGetTexEnvxv */); +} + +static PFNGLGETTEXENVXVOESPROC +epoxy_glGetTexEnvxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 24630 /* glGetTexEnvxvOES */); +} + +static PFNGLGETTEXFILTERFUNCSGISPROC +epoxy_glGetTexFilterFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture_filter4, 24647 /* glGetTexFilterFuncSGIS */); +} + +static PFNGLGETTEXGENDVPROC +epoxy_glGetTexGendv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24670 /* glGetTexGendv */); +} + +static PFNGLGETTEXGENFVPROC +epoxy_glGetTexGenfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24684 /* glGetTexGenfv */); +} + +static PFNGLGETTEXGENFVOESPROC +epoxy_glGetTexGenfvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 24698 /* glGetTexGenfvOES */); +} + +static PFNGLGETTEXGENIVPROC +epoxy_glGetTexGeniv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24715 /* glGetTexGeniv */); +} + +static PFNGLGETTEXGENIVOESPROC +epoxy_glGetTexGenivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 24729 /* glGetTexGenivOES */); +} + +static PFNGLGETTEXGENXVOESPROC +epoxy_glGetTexGenxvOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_texture_cube_map, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24746 /* "glGetTexGenxvOES" */, + 24746 /* "glGetTexGenxvOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24746 /* "glGetTexGenxvOES" */, + providers, entrypoints); +} + +static PFNGLGETTEXIMAGEPROC +epoxy_glGetTexImage_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 24763 /* glGetTexImage */); +} + +static PFNGLGETTEXLEVELPARAMETERFVPROC +epoxy_glGetTexLevelParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24777 /* "glGetTexLevelParameterfv" */, + 24777 /* "glGetTexLevelParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24777 /* "glGetTexLevelParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXLEVELPARAMETERIVPROC +epoxy_glGetTexLevelParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24802 /* "glGetTexLevelParameteriv" */, + 24802 /* "glGetTexLevelParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 24802 /* "glGetTexLevelParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXLEVELPARAMETERXVOESPROC +epoxy_glGetTexLevelParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 24827 /* glGetTexLevelParameterxvOES */); +} + +static PFNGLGETTEXPARAMETERIIVPROC +epoxy_glGetTexParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24855 /* "glGetTexParameterIiv" */, + 24855 /* "glGetTexParameterIiv" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24900 /* "glGetTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24855 /* "glGetTexParameterIiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIIVEXTPROC +epoxy_glGetTexParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24876 /* "glGetTexParameterIivEXT" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24855 /* "glGetTexParameterIiv" */, + 24855 /* "glGetTexParameterIiv" */, + 24900 /* "glGetTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24876 /* "glGetTexParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIIVOESPROC +epoxy_glGetTexParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24900 /* "glGetTexParameterIivOES" */, + 24855 /* "glGetTexParameterIiv" */, + 24855 /* "glGetTexParameterIiv" */, + 24876 /* "glGetTexParameterIivEXT" */, + 24876 /* "glGetTexParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24900 /* "glGetTexParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIUIVPROC +epoxy_glGetTexParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24924 /* "glGetTexParameterIuiv" */, + 24924 /* "glGetTexParameterIuiv" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24971 /* "glGetTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24924 /* "glGetTexParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIUIVEXTPROC +epoxy_glGetTexParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24946 /* "glGetTexParameterIuivEXT" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24924 /* "glGetTexParameterIuiv" */, + 24924 /* "glGetTexParameterIuiv" */, + 24971 /* "glGetTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 24946 /* "glGetTexParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIUIVOESPROC +epoxy_glGetTexParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 24971 /* "glGetTexParameterIuivOES" */, + 24924 /* "glGetTexParameterIuiv" */, + 24924 /* "glGetTexParameterIuiv" */, + 24946 /* "glGetTexParameterIuivEXT" */, + 24946 /* "glGetTexParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 24971 /* "glGetTexParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC +epoxy_glGetTexParameterPointervAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_texture_range, 24996 /* glGetTexParameterPointervAPPLE */); +} + +static PFNGLGETTEXPARAMETERFVPROC +epoxy_glGetTexParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25027 /* "glGetTexParameterfv" */, + 25027 /* "glGetTexParameterfv" */, + 25027 /* "glGetTexParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25027 /* "glGetTexParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERIVPROC +epoxy_glGetTexParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25047 /* "glGetTexParameteriv" */, + 25047 /* "glGetTexParameteriv" */, + 25047 /* "glGetTexParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25047 /* "glGetTexParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXPARAMETERXVPROC +epoxy_glGetTexParameterxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 25067 /* glGetTexParameterxv */); +} + +static PFNGLGETTEXPARAMETERXVOESPROC +epoxy_glGetTexParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 25087 /* glGetTexParameterxvOES */); +} + +static PFNGLGETTEXTUREHANDLEARBPROC +epoxy_glGetTextureHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 25110 /* glGetTextureHandleARB */); +} + +static PFNGLGETTEXTUREHANDLENVPROC +epoxy_glGetTextureHandleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 25132 /* glGetTextureHandleNV */); +} + +static PFNGLGETTEXTUREIMAGEPROC +epoxy_glGetTextureImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25153 /* "glGetTextureImage" */, + 25153 /* "glGetTextureImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 25153 /* "glGetTextureImage" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREIMAGEEXTPROC +epoxy_glGetTextureImageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25171 /* glGetTextureImageEXT */); +} + +static PFNGLGETTEXTURELEVELPARAMETERFVPROC +epoxy_glGetTextureLevelParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25192 /* "glGetTextureLevelParameterfv" */, + 25192 /* "glGetTextureLevelParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25192 /* "glGetTextureLevelParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC +epoxy_glGetTextureLevelParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25221 /* glGetTextureLevelParameterfvEXT */); +} + +static PFNGLGETTEXTURELEVELPARAMETERIVPROC +epoxy_glGetTextureLevelParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25253 /* "glGetTextureLevelParameteriv" */, + 25253 /* "glGetTextureLevelParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25253 /* "glGetTextureLevelParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC +epoxy_glGetTextureLevelParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25282 /* glGetTextureLevelParameterivEXT */); +} + +static PFNGLGETTEXTUREPARAMETERIIVPROC +epoxy_glGetTextureParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25314 /* "glGetTextureParameterIiv" */, + 25314 /* "glGetTextureParameterIiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25314 /* "glGetTextureParameterIiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERIIVEXTPROC +epoxy_glGetTextureParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25339 /* glGetTextureParameterIivEXT */); +} + +static PFNGLGETTEXTUREPARAMETERIUIVPROC +epoxy_glGetTextureParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25367 /* "glGetTextureParameterIuiv" */, + 25367 /* "glGetTextureParameterIuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25367 /* "glGetTextureParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERIUIVEXTPROC +epoxy_glGetTextureParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25393 /* glGetTextureParameterIuivEXT */); +} + +static PFNGLGETTEXTUREPARAMETERFVPROC +epoxy_glGetTextureParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25422 /* "glGetTextureParameterfv" */, + 25422 /* "glGetTextureParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25422 /* "glGetTextureParameterfv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERFVEXTPROC +epoxy_glGetTextureParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25446 /* glGetTextureParameterfvEXT */); +} + +static PFNGLGETTEXTUREPARAMETERIVPROC +epoxy_glGetTextureParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25473 /* "glGetTextureParameteriv" */, + 25473 /* "glGetTextureParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25473 /* "glGetTextureParameteriv" */, + providers, entrypoints); +} + +static PFNGLGETTEXTUREPARAMETERIVEXTPROC +epoxy_glGetTextureParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 25497 /* glGetTextureParameterivEXT */); +} + +static PFNGLGETTEXTURESAMPLERHANDLEARBPROC +epoxy_glGetTextureSamplerHandleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 25524 /* glGetTextureSamplerHandleARB */); +} + +static PFNGLGETTEXTURESAMPLERHANDLENVPROC +epoxy_glGetTextureSamplerHandleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 25553 /* glGetTextureSamplerHandleNV */); +} + +static PFNGLGETTEXTURESUBIMAGEPROC +epoxy_glGetTextureSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_get_texture_sub_image, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25581 /* "glGetTextureSubImage" */, + 25581 /* "glGetTextureSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 25581 /* "glGetTextureSubImage" */, + providers, entrypoints); +} + +static PFNGLGETTRACKMATRIXIVNVPROC +epoxy_glGetTrackMatrixivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 25602 /* glGetTrackMatrixivNV */); +} + +static PFNGLGETTRANSFORMFEEDBACKVARYINGPROC +epoxy_glGetTransformFeedbackVarying_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25623 /* "glGetTransformFeedbackVarying" */, + 25623 /* "glGetTransformFeedbackVarying" */, + 25653 /* "glGetTransformFeedbackVaryingEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 25623 /* "glGetTransformFeedbackVarying" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC +epoxy_glGetTransformFeedbackVaryingEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25653 /* "glGetTransformFeedbackVaryingEXT" */, + 25623 /* "glGetTransformFeedbackVarying" */, + 25623 /* "glGetTransformFeedbackVarying" */, + }; + return gl_provider_resolver(entrypoint_strings + 25653 /* "glGetTransformFeedbackVaryingEXT" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC +epoxy_glGetTransformFeedbackVaryingNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 25686 /* glGetTransformFeedbackVaryingNV */); +} + +static PFNGLGETTRANSFORMFEEDBACKI64_VPROC +epoxy_glGetTransformFeedbacki64_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25718 /* "glGetTransformFeedbacki64_v" */, + 25718 /* "glGetTransformFeedbacki64_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 25718 /* "glGetTransformFeedbacki64_v" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKI_VPROC +epoxy_glGetTransformFeedbacki_v_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25746 /* "glGetTransformFeedbacki_v" */, + 25746 /* "glGetTransformFeedbacki_v" */, + }; + return gl_provider_resolver(entrypoint_strings + 25746 /* "glGetTransformFeedbacki_v" */, + providers, entrypoints); +} + +static PFNGLGETTRANSFORMFEEDBACKIVPROC +epoxy_glGetTransformFeedbackiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25772 /* "glGetTransformFeedbackiv" */, + 25772 /* "glGetTransformFeedbackiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25772 /* "glGetTransformFeedbackiv" */, + providers, entrypoints); +} + +static PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC +epoxy_glGetTranslatedShaderSourceANGLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ANGLE_translated_shader_source, 25797 /* glGetTranslatedShaderSourceANGLE */); +} + +static PFNGLGETUNIFORMBLOCKINDEXPROC +epoxy_glGetUniformBlockIndex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25830 /* "glGetUniformBlockIndex" */, + 25830 /* "glGetUniformBlockIndex" */, + 25830 /* "glGetUniformBlockIndex" */, + }; + return gl_provider_resolver(entrypoint_strings + 25830 /* "glGetUniformBlockIndex" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMBUFFERSIZEEXTPROC +epoxy_glGetUniformBufferSizeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_bindable_uniform, 25853 /* glGetUniformBufferSizeEXT */); +} + +static PFNGLGETUNIFORMINDICESPROC +epoxy_glGetUniformIndices_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25879 /* "glGetUniformIndices" */, + 25879 /* "glGetUniformIndices" */, + 25879 /* "glGetUniformIndices" */, + }; + return gl_provider_resolver(entrypoint_strings + 25879 /* "glGetUniformIndices" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMLOCATIONPROC +epoxy_glGetUniformLocation_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25899 /* "glGetUniformLocation" */, + 25899 /* "glGetUniformLocation" */, + 25920 /* "glGetUniformLocationARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 25899 /* "glGetUniformLocation" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMLOCATIONARBPROC +epoxy_glGetUniformLocationARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25920 /* "glGetUniformLocationARB" */, + 25899 /* "glGetUniformLocation" */, + 25899 /* "glGetUniformLocation" */, + }; + return gl_provider_resolver(entrypoint_strings + 25920 /* "glGetUniformLocationARB" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMOFFSETEXTPROC +epoxy_glGetUniformOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_bindable_uniform, 25944 /* glGetUniformOffsetEXT */); +} + +static PFNGLGETUNIFORMSUBROUTINEUIVPROC +epoxy_glGetUniformSubroutineuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25966 /* "glGetUniformSubroutineuiv" */, + 25966 /* "glGetUniformSubroutineuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25966 /* "glGetUniformSubroutineuiv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMDVPROC +epoxy_glGetUniformdv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 25992 /* "glGetUniformdv" */, + 25992 /* "glGetUniformdv" */, + }; + return gl_provider_resolver(entrypoint_strings + 25992 /* "glGetUniformdv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMFVPROC +epoxy_glGetUniformfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26007 /* "glGetUniformfv" */, + 26007 /* "glGetUniformfv" */, + 26022 /* "glGetUniformfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26007 /* "glGetUniformfv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMFVARBPROC +epoxy_glGetUniformfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26022 /* "glGetUniformfvARB" */, + 26007 /* "glGetUniformfv" */, + 26007 /* "glGetUniformfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26022 /* "glGetUniformfvARB" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMI64VARBPROC +epoxy_glGetUniformi64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 26040 /* glGetUniformi64vARB */); +} + +static PFNGLGETUNIFORMI64VNVPROC +epoxy_glGetUniformi64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26060 /* "glGetUniformi64vNV" */, + 26060 /* "glGetUniformi64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26060 /* "glGetUniformi64vNV" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMIVPROC +epoxy_glGetUniformiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26079 /* "glGetUniformiv" */, + 26079 /* "glGetUniformiv" */, + 26094 /* "glGetUniformivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26079 /* "glGetUniformiv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMIVARBPROC +epoxy_glGetUniformivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26094 /* "glGetUniformivARB" */, + 26079 /* "glGetUniformiv" */, + 26079 /* "glGetUniformiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26094 /* "glGetUniformivARB" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMUI64VARBPROC +epoxy_glGetUniformui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 26112 /* glGetUniformui64vARB */); +} + +static PFNGLGETUNIFORMUI64VNVPROC +epoxy_glGetUniformui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_shader_buffer_load, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26133 /* "glGetUniformui64vNV" */, + 26133 /* "glGetUniformui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26133 /* "glGetUniformui64vNV" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMUIVPROC +epoxy_glGetUniformuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26153 /* "glGetUniformuiv" */, + 26153 /* "glGetUniformuiv" */, + 26169 /* "glGetUniformuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26153 /* "glGetUniformuiv" */, + providers, entrypoints); +} + +static PFNGLGETUNIFORMUIVEXTPROC +epoxy_glGetUniformuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26169 /* "glGetUniformuivEXT" */, + 26153 /* "glGetUniformuiv" */, + 26153 /* "glGetUniformuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26169 /* "glGetUniformuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETVARIANTARRAYOBJECTFVATIPROC +epoxy_glGetVariantArrayObjectfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 26188 /* glGetVariantArrayObjectfvATI */); +} + +static PFNGLGETVARIANTARRAYOBJECTIVATIPROC +epoxy_glGetVariantArrayObjectivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 26217 /* glGetVariantArrayObjectivATI */); +} + +static PFNGLGETVARIANTBOOLEANVEXTPROC +epoxy_glGetVariantBooleanvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26246 /* glGetVariantBooleanvEXT */); +} + +static PFNGLGETVARIANTFLOATVEXTPROC +epoxy_glGetVariantFloatvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26270 /* glGetVariantFloatvEXT */); +} + +static PFNGLGETVARIANTINTEGERVEXTPROC +epoxy_glGetVariantIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26292 /* glGetVariantIntegervEXT */); +} + +static PFNGLGETVARIANTPOINTERVEXTPROC +epoxy_glGetVariantPointervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 26316 /* glGetVariantPointervEXT */); +} + +static PFNGLGETVARYINGLOCATIONNVPROC +epoxy_glGetVaryingLocationNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 26340 /* glGetVaryingLocationNV */); +} + +static PFNGLGETVERTEXARRAYINDEXED64IVPROC +epoxy_glGetVertexArrayIndexed64iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26363 /* "glGetVertexArrayIndexed64iv" */, + 26363 /* "glGetVertexArrayIndexed64iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26363 /* "glGetVertexArrayIndexed64iv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXARRAYINDEXEDIVPROC +epoxy_glGetVertexArrayIndexediv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26391 /* "glGetVertexArrayIndexediv" */, + 26391 /* "glGetVertexArrayIndexediv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26391 /* "glGetVertexArrayIndexediv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC +epoxy_glGetVertexArrayIntegeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26417 /* glGetVertexArrayIntegeri_vEXT */); +} + +static PFNGLGETVERTEXARRAYINTEGERVEXTPROC +epoxy_glGetVertexArrayIntegervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26447 /* glGetVertexArrayIntegervEXT */); +} + +static PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC +epoxy_glGetVertexArrayPointeri_vEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26475 /* glGetVertexArrayPointeri_vEXT */); +} + +static PFNGLGETVERTEXARRAYPOINTERVEXTPROC +epoxy_glGetVertexArrayPointervEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 26505 /* glGetVertexArrayPointervEXT */); +} + +static PFNGLGETVERTEXARRAYIVPROC +epoxy_glGetVertexArrayiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26533 /* "glGetVertexArrayiv" */, + 26533 /* "glGetVertexArrayiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26533 /* "glGetVertexArrayiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC +epoxy_glGetVertexAttribArrayObjectfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_attrib_array_object, 26552 /* glGetVertexAttribArrayObjectfvATI */); +} + +static PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC +epoxy_glGetVertexAttribArrayObjectivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_attrib_array_object, 26586 /* glGetVertexAttribArrayObjectivATI */); +} + +static PFNGLGETVERTEXATTRIBIIVPROC +epoxy_glGetVertexAttribIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26620 /* "glGetVertexAttribIiv" */, + 26620 /* "glGetVertexAttribIiv" */, + 26641 /* "glGetVertexAttribIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26620 /* "glGetVertexAttribIiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIIVEXTPROC +epoxy_glGetVertexAttribIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26641 /* "glGetVertexAttribIivEXT" */, + 26620 /* "glGetVertexAttribIiv" */, + 26620 /* "glGetVertexAttribIiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26641 /* "glGetVertexAttribIivEXT" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIUIVPROC +epoxy_glGetVertexAttribIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26665 /* "glGetVertexAttribIuiv" */, + 26665 /* "glGetVertexAttribIuiv" */, + 26687 /* "glGetVertexAttribIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26665 /* "glGetVertexAttribIuiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIUIVEXTPROC +epoxy_glGetVertexAttribIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26687 /* "glGetVertexAttribIuivEXT" */, + 26665 /* "glGetVertexAttribIuiv" */, + 26665 /* "glGetVertexAttribIuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26687 /* "glGetVertexAttribIuivEXT" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBLDVPROC +epoxy_glGetVertexAttribLdv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26712 /* "glGetVertexAttribLdv" */, + 26712 /* "glGetVertexAttribLdv" */, + 26733 /* "glGetVertexAttribLdvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 26712 /* "glGetVertexAttribLdv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBLDVEXTPROC +epoxy_glGetVertexAttribLdvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26733 /* "glGetVertexAttribLdvEXT" */, + 26712 /* "glGetVertexAttribLdv" */, + 26712 /* "glGetVertexAttribLdv" */, + }; + return gl_provider_resolver(entrypoint_strings + 26733 /* "glGetVertexAttribLdvEXT" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBLI64VNVPROC +epoxy_glGetVertexAttribLi64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 26757 /* glGetVertexAttribLi64vNV */); +} + +static PFNGLGETVERTEXATTRIBLUI64VARBPROC +epoxy_glGetVertexAttribLui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 26782 /* glGetVertexAttribLui64vARB */); +} + +static PFNGLGETVERTEXATTRIBLUI64VNVPROC +epoxy_glGetVertexAttribLui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 26809 /* glGetVertexAttribLui64vNV */); +} + +static PFNGLGETVERTEXATTRIBPOINTERVPROC +epoxy_glGetVertexAttribPointerv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26835 /* "glGetVertexAttribPointerv" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26890 /* "glGetVertexAttribPointervNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26835 /* "glGetVertexAttribPointerv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBPOINTERVARBPROC +epoxy_glGetVertexAttribPointervARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26861 /* "glGetVertexAttribPointervARB" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26890 /* "glGetVertexAttribPointervNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26861 /* "glGetVertexAttribPointervARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBPOINTERVNVPROC +epoxy_glGetVertexAttribPointervNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26890 /* "glGetVertexAttribPointervNV" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26835 /* "glGetVertexAttribPointerv" */, + 26861 /* "glGetVertexAttribPointervARB" */, + 26861 /* "glGetVertexAttribPointervARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26890 /* "glGetVertexAttribPointervNV" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBDVPROC +epoxy_glGetVertexAttribdv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26918 /* "glGetVertexAttribdv" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26961 /* "glGetVertexAttribdvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26918 /* "glGetVertexAttribdv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBDVARBPROC +epoxy_glGetVertexAttribdvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26938 /* "glGetVertexAttribdvARB" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26918 /* "glGetVertexAttribdv" */, + 26961 /* "glGetVertexAttribdvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26938 /* "glGetVertexAttribdvARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBDVNVPROC +epoxy_glGetVertexAttribdvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26961 /* "glGetVertexAttribdvNV" */, + 26918 /* "glGetVertexAttribdv" */, + 26938 /* "glGetVertexAttribdvARB" */, + 26938 /* "glGetVertexAttribdvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 26961 /* "glGetVertexAttribdvNV" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBFVPROC +epoxy_glGetVertexAttribfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 26983 /* "glGetVertexAttribfv" */, + 26983 /* "glGetVertexAttribfv" */, + 27003 /* "glGetVertexAttribfvARB" */, + 27003 /* "glGetVertexAttribfvARB" */, + 27026 /* "glGetVertexAttribfvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 26983 /* "glGetVertexAttribfv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBFVARBPROC +epoxy_glGetVertexAttribfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27003 /* "glGetVertexAttribfvARB" */, + 27003 /* "glGetVertexAttribfvARB" */, + 26983 /* "glGetVertexAttribfv" */, + 26983 /* "glGetVertexAttribfv" */, + 27026 /* "glGetVertexAttribfvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 27003 /* "glGetVertexAttribfvARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBFVNVPROC +epoxy_glGetVertexAttribfvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27026 /* "glGetVertexAttribfvNV" */, + 26983 /* "glGetVertexAttribfv" */, + 26983 /* "glGetVertexAttribfv" */, + 27003 /* "glGetVertexAttribfvARB" */, + 27003 /* "glGetVertexAttribfvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 27026 /* "glGetVertexAttribfvNV" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIVPROC +epoxy_glGetVertexAttribiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27048 /* "glGetVertexAttribiv" */, + 27048 /* "glGetVertexAttribiv" */, + 27068 /* "glGetVertexAttribivARB" */, + 27068 /* "glGetVertexAttribivARB" */, + 27091 /* "glGetVertexAttribivNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 27048 /* "glGetVertexAttribiv" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIVARBPROC +epoxy_glGetVertexAttribivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27068 /* "glGetVertexAttribivARB" */, + 27068 /* "glGetVertexAttribivARB" */, + 27048 /* "glGetVertexAttribiv" */, + 27048 /* "glGetVertexAttribiv" */, + 27091 /* "glGetVertexAttribivNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 27068 /* "glGetVertexAttribivARB" */, + providers, entrypoints); +} + +static PFNGLGETVERTEXATTRIBIVNVPROC +epoxy_glGetVertexAttribivNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27091 /* "glGetVertexAttribivNV" */, + 27048 /* "glGetVertexAttribiv" */, + 27048 /* "glGetVertexAttribiv" */, + 27068 /* "glGetVertexAttribivARB" */, + 27068 /* "glGetVertexAttribivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 27091 /* "glGetVertexAttribivNV" */, + providers, entrypoints); +} + +static PFNGLGETVIDEOCAPTURESTREAMDVNVPROC +epoxy_glGetVideoCaptureStreamdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27113 /* glGetVideoCaptureStreamdvNV */); +} + +static PFNGLGETVIDEOCAPTURESTREAMFVNVPROC +epoxy_glGetVideoCaptureStreamfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27141 /* glGetVideoCaptureStreamfvNV */); +} + +static PFNGLGETVIDEOCAPTURESTREAMIVNVPROC +epoxy_glGetVideoCaptureStreamivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27169 /* glGetVideoCaptureStreamivNV */); +} + +static PFNGLGETVIDEOCAPTUREIVNVPROC +epoxy_glGetVideoCaptureivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 27197 /* glGetVideoCaptureivNV */); +} + +static PFNGLGETVIDEOI64VNVPROC +epoxy_glGetVideoi64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27219 /* glGetVideoi64vNV */); +} + +static PFNGLGETVIDEOIVNVPROC +epoxy_glGetVideoivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27236 /* glGetVideoivNV */); +} + +static PFNGLGETVIDEOUI64VNVPROC +epoxy_glGetVideoui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27251 /* glGetVideoui64vNV */); +} + +static PFNGLGETVIDEOUIVNVPROC +epoxy_glGetVideouivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 27269 /* glGetVideouivNV */); +} + +static PFNGLGETNCOLORTABLEPROC +epoxy_glGetnColorTable_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27285 /* glGetnColorTable */); +} + +static PFNGLGETNCOLORTABLEARBPROC +epoxy_glGetnColorTableARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27302 /* glGetnColorTableARB */); +} + +static PFNGLGETNCOMPRESSEDTEXIMAGEPROC +epoxy_glGetnCompressedTexImage_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27322 /* glGetnCompressedTexImage */); +} + +static PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC +epoxy_glGetnCompressedTexImageARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27347 /* glGetnCompressedTexImageARB */); +} + +static PFNGLGETNCONVOLUTIONFILTERPROC +epoxy_glGetnConvolutionFilter_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27375 /* glGetnConvolutionFilter */); +} + +static PFNGLGETNCONVOLUTIONFILTERARBPROC +epoxy_glGetnConvolutionFilterARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27399 /* glGetnConvolutionFilterARB */); +} + +static PFNGLGETNHISTOGRAMPROC +epoxy_glGetnHistogram_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27426 /* glGetnHistogram */); +} + +static PFNGLGETNHISTOGRAMARBPROC +epoxy_glGetnHistogramARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27442 /* glGetnHistogramARB */); +} + +static PFNGLGETNMAPDVPROC +epoxy_glGetnMapdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27461 /* glGetnMapdv */); +} + +static PFNGLGETNMAPDVARBPROC +epoxy_glGetnMapdvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27473 /* glGetnMapdvARB */); +} + +static PFNGLGETNMAPFVPROC +epoxy_glGetnMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27488 /* glGetnMapfv */); +} + +static PFNGLGETNMAPFVARBPROC +epoxy_glGetnMapfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27500 /* glGetnMapfvARB */); +} + +static PFNGLGETNMAPIVPROC +epoxy_glGetnMapiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27515 /* glGetnMapiv */); +} + +static PFNGLGETNMAPIVARBPROC +epoxy_glGetnMapivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27527 /* glGetnMapivARB */); +} + +static PFNGLGETNMINMAXPROC +epoxy_glGetnMinmax_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27542 /* glGetnMinmax */); +} + +static PFNGLGETNMINMAXARBPROC +epoxy_glGetnMinmaxARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27555 /* glGetnMinmaxARB */); +} + +static PFNGLGETNPIXELMAPFVPROC +epoxy_glGetnPixelMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27571 /* glGetnPixelMapfv */); +} + +static PFNGLGETNPIXELMAPFVARBPROC +epoxy_glGetnPixelMapfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27588 /* glGetnPixelMapfvARB */); +} + +static PFNGLGETNPIXELMAPUIVPROC +epoxy_glGetnPixelMapuiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27608 /* glGetnPixelMapuiv */); +} + +static PFNGLGETNPIXELMAPUIVARBPROC +epoxy_glGetnPixelMapuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27626 /* glGetnPixelMapuivARB */); +} + +static PFNGLGETNPIXELMAPUSVPROC +epoxy_glGetnPixelMapusv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27647 /* glGetnPixelMapusv */); +} + +static PFNGLGETNPIXELMAPUSVARBPROC +epoxy_glGetnPixelMapusvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27665 /* glGetnPixelMapusvARB */); +} + +static PFNGLGETNPOLYGONSTIPPLEPROC +epoxy_glGetnPolygonStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27686 /* glGetnPolygonStipple */); +} + +static PFNGLGETNPOLYGONSTIPPLEARBPROC +epoxy_glGetnPolygonStippleARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27707 /* glGetnPolygonStippleARB */); +} + +static PFNGLGETNSEPARABLEFILTERPROC +epoxy_glGetnSeparableFilter_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27731 /* glGetnSeparableFilter */); +} + +static PFNGLGETNSEPARABLEFILTERARBPROC +epoxy_glGetnSeparableFilterARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27753 /* glGetnSeparableFilterARB */); +} + +static PFNGLGETNTEXIMAGEPROC +epoxy_glGetnTexImage_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27778 /* glGetnTexImage */); +} + +static PFNGLGETNTEXIMAGEARBPROC +epoxy_glGetnTexImageARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27793 /* glGetnTexImageARB */); +} + +static PFNGLGETNUNIFORMDVPROC +epoxy_glGetnUniformdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_4_5, 27811 /* glGetnUniformdv */); +} + +static PFNGLGETNUNIFORMDVARBPROC +epoxy_glGetnUniformdvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27827 /* glGetnUniformdvARB */); +} + +static PFNGLGETNUNIFORMFVPROC +epoxy_glGetnUniformfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + 27900 /* "glGetnUniformfvKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 27846 /* "glGetnUniformfv" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMFVARBPROC +epoxy_glGetnUniformfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27862 /* glGetnUniformfvARB */); +} + +static PFNGLGETNUNIFORMFVEXTPROC +epoxy_glGetnUniformfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_robustness, 27881 /* glGetnUniformfvEXT */); +} + +static PFNGLGETNUNIFORMFVKHRPROC +epoxy_glGetnUniformfvKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27900 /* "glGetnUniformfvKHR" */, + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + 27846 /* "glGetnUniformfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 27900 /* "glGetnUniformfvKHR" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMI64VARBPROC +epoxy_glGetnUniformi64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 27919 /* glGetnUniformi64vARB */); +} + +static PFNGLGETNUNIFORMIVPROC +epoxy_glGetnUniformiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + 27994 /* "glGetnUniformivKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 27940 /* "glGetnUniformiv" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMIVARBPROC +epoxy_glGetnUniformivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 27956 /* glGetnUniformivARB */); +} + +static PFNGLGETNUNIFORMIVEXTPROC +epoxy_glGetnUniformivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_robustness, 27975 /* glGetnUniformivEXT */); +} + +static PFNGLGETNUNIFORMIVKHRPROC +epoxy_glGetnUniformivKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 27994 /* "glGetnUniformivKHR" */, + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + 27940 /* "glGetnUniformiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 27994 /* "glGetnUniformivKHR" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMUI64VARBPROC +epoxy_glGetnUniformui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 28013 /* glGetnUniformui64vARB */); +} + +static PFNGLGETNUNIFORMUIVPROC +epoxy_glGetnUniformuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + 28072 /* "glGetnUniformuivKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 28035 /* "glGetnUniformuiv" */, + providers, entrypoints); +} + +static PFNGLGETNUNIFORMUIVARBPROC +epoxy_glGetnUniformuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_robustness, 28052 /* glGetnUniformuivARB */); +} + +static PFNGLGETNUNIFORMUIVKHRPROC +epoxy_glGetnUniformuivKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28072 /* "glGetnUniformuivKHR" */, + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + 28035 /* "glGetnUniformuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 28072 /* "glGetnUniformuivKHR" */, + providers, entrypoints); +} + +static PFNGLGLOBALALPHAFACTORBSUNPROC +epoxy_glGlobalAlphaFactorbSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28092 /* glGlobalAlphaFactorbSUN */); +} + +static PFNGLGLOBALALPHAFACTORDSUNPROC +epoxy_glGlobalAlphaFactordSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28116 /* glGlobalAlphaFactordSUN */); +} + +static PFNGLGLOBALALPHAFACTORFSUNPROC +epoxy_glGlobalAlphaFactorfSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28140 /* glGlobalAlphaFactorfSUN */); +} + +static PFNGLGLOBALALPHAFACTORISUNPROC +epoxy_glGlobalAlphaFactoriSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28164 /* glGlobalAlphaFactoriSUN */); +} + +static PFNGLGLOBALALPHAFACTORSSUNPROC +epoxy_glGlobalAlphaFactorsSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28188 /* glGlobalAlphaFactorsSUN */); +} + +static PFNGLGLOBALALPHAFACTORUBSUNPROC +epoxy_glGlobalAlphaFactorubSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28212 /* glGlobalAlphaFactorubSUN */); +} + +static PFNGLGLOBALALPHAFACTORUISUNPROC +epoxy_glGlobalAlphaFactoruiSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28237 /* glGlobalAlphaFactoruiSUN */); +} + +static PFNGLGLOBALALPHAFACTORUSSUNPROC +epoxy_glGlobalAlphaFactorusSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_global_alpha, 28262 /* glGlobalAlphaFactorusSUN */); +} + +static PFNGLHINTPROC +epoxy_glHint_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28287 /* "glHint" */, + 28287 /* "glHint" */, + 28287 /* "glHint" */, + }; + return gl_provider_resolver(entrypoint_strings + 28287 /* "glHint" */, + providers, entrypoints); +} + +static PFNGLHINTPGIPROC +epoxy_glHintPGI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_PGI_misc_hints, 28294 /* glHintPGI */); +} + +static PFNGLHISTOGRAMPROC +epoxy_glHistogram_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28304 /* "glHistogram" */, + 28316 /* "glHistogramEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 28304 /* "glHistogram" */, + providers, entrypoints); +} + +static PFNGLHISTOGRAMEXTPROC +epoxy_glHistogramEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28316 /* "glHistogramEXT" */, + 28304 /* "glHistogram" */, + }; + return gl_provider_resolver(entrypoint_strings + 28316 /* "glHistogramEXT" */, + providers, entrypoints); +} + +static PFNGLIGLOOINTERFACESGIXPROC +epoxy_glIglooInterfaceSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_igloo_interface, 28331 /* glIglooInterfaceSGIX */); +} + +static PFNGLIMAGETRANSFORMPARAMETERFHPPROC +epoxy_glImageTransformParameterfHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28352 /* glImageTransformParameterfHP */); +} + +static PFNGLIMAGETRANSFORMPARAMETERFVHPPROC +epoxy_glImageTransformParameterfvHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28381 /* glImageTransformParameterfvHP */); +} + +static PFNGLIMAGETRANSFORMPARAMETERIHPPROC +epoxy_glImageTransformParameteriHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28411 /* glImageTransformParameteriHP */); +} + +static PFNGLIMAGETRANSFORMPARAMETERIVHPPROC +epoxy_glImageTransformParameterivHP_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_HP_image_transform, 28440 /* glImageTransformParameterivHP */); +} + +static PFNGLIMPORTSYNCEXTPROC +epoxy_glImportSyncEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_x11_sync_object, 28470 /* glImportSyncEXT */); +} + +static PFNGLINDEXFORMATNVPROC +epoxy_glIndexFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 28486 /* glIndexFormatNV */); +} + +static PFNGLINDEXFUNCEXTPROC +epoxy_glIndexFuncEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_index_func, 28502 /* glIndexFuncEXT */); +} + +static PFNGLINDEXMASKPROC +epoxy_glIndexMask_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28517 /* glIndexMask */); +} + +static PFNGLINDEXMATERIALEXTPROC +epoxy_glIndexMaterialEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_index_material, 28529 /* glIndexMaterialEXT */); +} + +static PFNGLINDEXPOINTERPROC +epoxy_glIndexPointer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28548 /* glIndexPointer */); +} + +static PFNGLINDEXPOINTEREXTPROC +epoxy_glIndexPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 28563 /* glIndexPointerEXT */); +} + +static PFNGLINDEXPOINTERLISTIBMPROC +epoxy_glIndexPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 28581 /* glIndexPointerListIBM */); +} + +static PFNGLINDEXDPROC +epoxy_glIndexd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28603 /* glIndexd */); +} + +static PFNGLINDEXDVPROC +epoxy_glIndexdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28612 /* glIndexdv */); +} + +static PFNGLINDEXFPROC +epoxy_glIndexf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28622 /* glIndexf */); +} + +static PFNGLINDEXFVPROC +epoxy_glIndexfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28631 /* glIndexfv */); +} + +static PFNGLINDEXIPROC +epoxy_glIndexi_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28641 /* glIndexi */); +} + +static PFNGLINDEXIVPROC +epoxy_glIndexiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28650 /* glIndexiv */); +} + +static PFNGLINDEXSPROC +epoxy_glIndexs_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28660 /* glIndexs */); +} + +static PFNGLINDEXSVPROC +epoxy_glIndexsv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28669 /* glIndexsv */); +} + +static PFNGLINDEXUBPROC +epoxy_glIndexub_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28679 /* glIndexub */); +} + +static PFNGLINDEXUBVPROC +epoxy_glIndexubv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28689 /* glIndexubv */); +} + +static PFNGLINDEXXOESPROC +epoxy_glIndexxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 28700 /* glIndexxOES */); +} + +static PFNGLINDEXXVOESPROC +epoxy_glIndexxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 28712 /* glIndexxvOES */); +} + +static PFNGLINITNAMESPROC +epoxy_glInitNames_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 28725 /* glInitNames */); +} + +static PFNGLINSERTCOMPONENTEXTPROC +epoxy_glInsertComponentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 28737 /* glInsertComponentEXT */); +} + +static PFNGLINSERTEVENTMARKEREXTPROC +epoxy_glInsertEventMarkerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_marker, 28758 /* glInsertEventMarkerEXT */); +} + +static PFNGLINSTRUMENTSBUFFERSGIXPROC +epoxy_glInstrumentsBufferSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 28781 /* glInstrumentsBufferSGIX */); +} + +static PFNGLINTERLEAVEDARRAYSPROC +epoxy_glInterleavedArrays_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 28805 /* glInterleavedArrays */); +} + +static PFNGLINTERPOLATEPATHSNVPROC +epoxy_glInterpolatePathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 28825 /* glInterpolatePathsNV */); +} + +static PFNGLINVALIDATEBUFFERDATAPROC +epoxy_glInvalidateBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28846 /* "glInvalidateBufferData" */, + 28846 /* "glInvalidateBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28846 /* "glInvalidateBufferData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATEBUFFERSUBDATAPROC +epoxy_glInvalidateBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28869 /* "glInvalidateBufferSubData" */, + 28869 /* "glInvalidateBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28869 /* "glInvalidateBufferSubData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATEFRAMEBUFFERPROC +epoxy_glInvalidateFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28895 /* "glInvalidateFramebuffer" */, + 28895 /* "glInvalidateFramebuffer" */, + 28895 /* "glInvalidateFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 28895 /* "glInvalidateFramebuffer" */, + providers, entrypoints); +} + +static PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC +epoxy_glInvalidateNamedFramebufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28919 /* "glInvalidateNamedFramebufferData" */, + 28919 /* "glInvalidateNamedFramebufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28919 /* "glInvalidateNamedFramebufferData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC +epoxy_glInvalidateNamedFramebufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28952 /* "glInvalidateNamedFramebufferSubData" */, + 28952 /* "glInvalidateNamedFramebufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 28952 /* "glInvalidateNamedFramebufferSubData" */, + providers, entrypoints); +} + +static PFNGLINVALIDATESUBFRAMEBUFFERPROC +epoxy_glInvalidateSubFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 28988 /* "glInvalidateSubFramebuffer" */, + 28988 /* "glInvalidateSubFramebuffer" */, + 28988 /* "glInvalidateSubFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 28988 /* "glInvalidateSubFramebuffer" */, + providers, entrypoints); +} + +static PFNGLINVALIDATETEXIMAGEPROC +epoxy_glInvalidateTexImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29015 /* "glInvalidateTexImage" */, + 29015 /* "glInvalidateTexImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 29015 /* "glInvalidateTexImage" */, + providers, entrypoints); +} + +static PFNGLINVALIDATETEXSUBIMAGEPROC +epoxy_glInvalidateTexSubImage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_invalidate_subdata, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29036 /* "glInvalidateTexSubImage" */, + 29036 /* "glInvalidateTexSubImage" */, + }; + return gl_provider_resolver(entrypoint_strings + 29036 /* "glInvalidateTexSubImage" */, + providers, entrypoints); +} + +static PFNGLISASYNCMARKERSGIXPROC +epoxy_glIsAsyncMarkerSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 29060 /* glIsAsyncMarkerSGIX */); +} + +static PFNGLISBUFFERPROC +epoxy_glIsBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + 29091 /* "glIsBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 29080 /* "glIsBuffer" */, + providers, entrypoints); +} + +static PFNGLISBUFFERARBPROC +epoxy_glIsBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29091 /* "glIsBufferARB" */, + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + 29080 /* "glIsBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 29091 /* "glIsBufferARB" */, + providers, entrypoints); +} + +static PFNGLISBUFFERRESIDENTNVPROC +epoxy_glIsBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 29105 /* glIsBufferResidentNV */); +} + +static PFNGLISCOMMANDLISTNVPROC +epoxy_glIsCommandListNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 29126 /* glIsCommandListNV */); +} + +static PFNGLISENABLEDPROC +epoxy_glIsEnabled_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29144 /* "glIsEnabled" */, + 29144 /* "glIsEnabled" */, + 29144 /* "glIsEnabled" */, + }; + return gl_provider_resolver(entrypoint_strings + 29144 /* "glIsEnabled" */, + providers, entrypoints); +} + +static PFNGLISENABLEDINDEXEDEXTPROC +epoxy_glIsEnabledIndexedEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29191 /* "glIsEnablediEXT" */, + 29207 /* "glIsEnablediNV" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29156 /* "glIsEnabledIndexedEXT" */, + providers, entrypoints); +} + +static PFNGLISENABLEDIPROC +epoxy_glIsEnabledi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29191 /* "glIsEnablediEXT" */, + 29207 /* "glIsEnablediNV" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29178 /* "glIsEnabledi" */, + providers, entrypoints); +} + +static PFNGLISENABLEDIEXTPROC +epoxy_glIsEnablediEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_NV_viewport_array, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29191 /* "glIsEnablediEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29207 /* "glIsEnablediNV" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29191 /* "glIsEnablediEXT" */, + providers, entrypoints); +} + +static PFNGLISENABLEDINVPROC +epoxy_glIsEnablediNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_OES_draw_buffers_indexed, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29207 /* "glIsEnablediNV" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29191 /* "glIsEnablediEXT" */, + 29222 /* "glIsEnablediOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29207 /* "glIsEnablediNV" */, + providers, entrypoints); +} + +static PFNGLISENABLEDIOESPROC +epoxy_glIsEnablediOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_buffers_indexed, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_draw_buffers2, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_draw_buffers_indexed, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29222 /* "glIsEnablediOES" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29156 /* "glIsEnabledIndexedEXT" */, + 29178 /* "glIsEnabledi" */, + 29178 /* "glIsEnabledi" */, + 29191 /* "glIsEnablediEXT" */, + 29207 /* "glIsEnablediNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 29222 /* "glIsEnablediOES" */, + providers, entrypoints); +} + +static PFNGLISFENCEAPPLEPROC +epoxy_glIsFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 29238 /* glIsFenceAPPLE */); +} + +static PFNGLISFENCENVPROC +epoxy_glIsFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 29253 /* glIsFenceNV */); +} + +static PFNGLISFRAMEBUFFERPROC +epoxy_glIsFramebuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + 29281 /* "glIsFramebufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 29265 /* "glIsFramebuffer" */, + providers, entrypoints); +} + +static PFNGLISFRAMEBUFFEREXTPROC +epoxy_glIsFramebufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29281 /* "glIsFramebufferEXT" */, + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + 29265 /* "glIsFramebuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 29281 /* "glIsFramebufferEXT" */, + providers, entrypoints); +} + +static PFNGLISFRAMEBUFFEROESPROC +epoxy_glIsFramebufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 29300 /* glIsFramebufferOES */); +} + +static PFNGLISIMAGEHANDLERESIDENTARBPROC +epoxy_glIsImageHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 29319 /* glIsImageHandleResidentARB */); +} + +static PFNGLISIMAGEHANDLERESIDENTNVPROC +epoxy_glIsImageHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 29346 /* glIsImageHandleResidentNV */); +} + +static PFNGLISLISTPROC +epoxy_glIsList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 29372 /* glIsList */); +} + +static PFNGLISNAMEAMDPROC +epoxy_glIsNameAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_name_gen_delete, 29381 /* glIsNameAMD */); +} + +static PFNGLISNAMEDBUFFERRESIDENTNVPROC +epoxy_glIsNamedBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 29393 /* glIsNamedBufferResidentNV */); +} + +static PFNGLISNAMEDSTRINGARBPROC +epoxy_glIsNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 29419 /* glIsNamedStringARB */); +} + +static PFNGLISOBJECTBUFFERATIPROC +epoxy_glIsObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 29438 /* glIsObjectBufferATI */); +} + +static PFNGLISOCCLUSIONQUERYNVPROC +epoxy_glIsOcclusionQueryNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_occlusion_query, 29458 /* glIsOcclusionQueryNV */); +} + +static PFNGLISPATHNVPROC +epoxy_glIsPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 29479 /* glIsPathNV */); +} + +static PFNGLISPOINTINFILLPATHNVPROC +epoxy_glIsPointInFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 29490 /* glIsPointInFillPathNV */); +} + +static PFNGLISPOINTINSTROKEPATHNVPROC +epoxy_glIsPointInStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 29512 /* glIsPointInStrokePathNV */); +} + +static PFNGLISPROGRAMPROC +epoxy_glIsProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29536 /* "glIsProgram" */, + 29536 /* "glIsProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 29536 /* "glIsProgram" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMARBPROC +epoxy_glIsProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29548 /* "glIsProgramARB" */, + 29548 /* "glIsProgramARB" */, + 29563 /* "glIsProgramNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 29548 /* "glIsProgramARB" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMNVPROC +epoxy_glIsProgramNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29563 /* "glIsProgramNV" */, + 29548 /* "glIsProgramARB" */, + 29548 /* "glIsProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 29563 /* "glIsProgramNV" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMPIPELINEPROC +epoxy_glIsProgramPipeline_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29577 /* "glIsProgramPipeline" */, + 29577 /* "glIsProgramPipeline" */, + 29577 /* "glIsProgramPipeline" */, + }; + return gl_provider_resolver(entrypoint_strings + 29577 /* "glIsProgramPipeline" */, + providers, entrypoints); +} + +static PFNGLISPROGRAMPIPELINEEXTPROC +epoxy_glIsProgramPipelineEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 29597 /* glIsProgramPipelineEXT */); +} + +static PFNGLISQUERYPROC +epoxy_glIsQuery_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_occlusion_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29620 /* "glIsQuery" */, + 29620 /* "glIsQuery" */, + 29630 /* "glIsQueryARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 29620 /* "glIsQuery" */, + providers, entrypoints); +} + +static PFNGLISQUERYARBPROC +epoxy_glIsQueryARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_occlusion_query, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29630 /* "glIsQueryARB" */, + 29620 /* "glIsQuery" */, + 29620 /* "glIsQuery" */, + }; + return gl_provider_resolver(entrypoint_strings + 29630 /* "glIsQueryARB" */, + providers, entrypoints); +} + +static PFNGLISQUERYEXTPROC +epoxy_glIsQueryEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + GL_extension_GL_EXT_occlusion_query_boolean, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29643 /* "glIsQueryEXT" */, + 29643 /* "glIsQueryEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 29643 /* "glIsQueryEXT" */, + providers, entrypoints); +} + +static PFNGLISRENDERBUFFERPROC +epoxy_glIsRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + 29673 /* "glIsRenderbufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 29656 /* "glIsRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLISRENDERBUFFEREXTPROC +epoxy_glIsRenderbufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29673 /* "glIsRenderbufferEXT" */, + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + 29656 /* "glIsRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 29673 /* "glIsRenderbufferEXT" */, + providers, entrypoints); +} + +static PFNGLISRENDERBUFFEROESPROC +epoxy_glIsRenderbufferOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 29693 /* glIsRenderbufferOES */); +} + +static PFNGLISSAMPLERPROC +epoxy_glIsSampler_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29713 /* "glIsSampler" */, + 29713 /* "glIsSampler" */, + 29713 /* "glIsSampler" */, + }; + return gl_provider_resolver(entrypoint_strings + 29713 /* "glIsSampler" */, + providers, entrypoints); +} + +static PFNGLISSHADERPROC +epoxy_glIsShader_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29725 /* "glIsShader" */, + 29725 /* "glIsShader" */, + }; + return gl_provider_resolver(entrypoint_strings + 29725 /* "glIsShader" */, + providers, entrypoints); +} + +static PFNGLISSTATENVPROC +epoxy_glIsStateNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 29736 /* glIsStateNV */); +} + +static PFNGLISSYNCPROC +epoxy_glIsSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + 29757 /* "glIsSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 29748 /* "glIsSync" */, + providers, entrypoints); +} + +static PFNGLISSYNCAPPLEPROC +epoxy_glIsSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29757 /* "glIsSyncAPPLE" */, + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + 29748 /* "glIsSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 29757 /* "glIsSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLISTEXTUREPROC +epoxy_glIsTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29771 /* "glIsTexture" */, + 29771 /* "glIsTexture" */, + 29771 /* "glIsTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 29771 /* "glIsTexture" */, + providers, entrypoints); +} + +static PFNGLISTEXTUREEXTPROC +epoxy_glIsTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_object, 29783 /* glIsTextureEXT */); +} + +static PFNGLISTEXTUREHANDLERESIDENTARBPROC +epoxy_glIsTextureHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 29798 /* glIsTextureHandleResidentARB */); +} + +static PFNGLISTEXTUREHANDLERESIDENTNVPROC +epoxy_glIsTextureHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 29827 /* glIsTextureHandleResidentNV */); +} + +static PFNGLISTRANSFORMFEEDBACKPROC +epoxy_glIsTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + 29877 /* "glIsTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 29855 /* "glIsTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLISTRANSFORMFEEDBACKNVPROC +epoxy_glIsTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29877 /* "glIsTransformFeedbackNV" */, + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + 29855 /* "glIsTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 29877 /* "glIsTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLISVARIANTENABLEDEXTPROC +epoxy_glIsVariantEnabledEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 29901 /* glIsVariantEnabledEXT */); +} + +static PFNGLISVERTEXARRAYPROC +epoxy_glIsVertexArray_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29939 /* "glIsVertexArrayAPPLE" */, + 29960 /* "glIsVertexArrayOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29923 /* "glIsVertexArray" */, + providers, entrypoints); +} + +static PFNGLISVERTEXARRAYAPPLEPROC +epoxy_glIsVertexArrayAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_OES_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29939 /* "glIsVertexArrayAPPLE" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29960 /* "glIsVertexArrayOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 29939 /* "glIsVertexArrayAPPLE" */, + providers, entrypoints); +} + +static PFNGLISVERTEXARRAYOESPROC +epoxy_glIsVertexArrayOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_vertex_array_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_vertex_array_object, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_vertex_array_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 29960 /* "glIsVertexArrayOES" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29923 /* "glIsVertexArray" */, + 29939 /* "glIsVertexArrayAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 29960 /* "glIsVertexArrayOES" */, + providers, entrypoints); +} + +static PFNGLISVERTEXATTRIBENABLEDAPPLEPROC +epoxy_glIsVertexAttribEnabledAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 29979 /* glIsVertexAttribEnabledAPPLE */); +} + +static PFNGLLABELOBJECTEXTPROC +epoxy_glLabelObjectEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_label, 30008 /* glLabelObjectEXT */); +} + +static PFNGLLIGHTENVISGIXPROC +epoxy_glLightEnviSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_fragment_lighting, 30025 /* glLightEnviSGIX */); +} + +static PFNGLLIGHTMODELFPROC +epoxy_glLightModelf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30041 /* "glLightModelf" */, + 30041 /* "glLightModelf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30041 /* "glLightModelf" */, + providers, entrypoints); +} + +static PFNGLLIGHTMODELFVPROC +epoxy_glLightModelfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30055 /* "glLightModelfv" */, + 30055 /* "glLightModelfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 30055 /* "glLightModelfv" */, + providers, entrypoints); +} + +static PFNGLLIGHTMODELIPROC +epoxy_glLightModeli_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30070 /* glLightModeli */); +} + +static PFNGLLIGHTMODELIVPROC +epoxy_glLightModeliv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30084 /* glLightModeliv */); +} + +static PFNGLLIGHTMODELXPROC +epoxy_glLightModelx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30099 /* glLightModelx */); +} + +static PFNGLLIGHTMODELXOESPROC +epoxy_glLightModelxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30113 /* glLightModelxOES */); +} + +static PFNGLLIGHTMODELXVPROC +epoxy_glLightModelxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30130 /* glLightModelxv */); +} + +static PFNGLLIGHTMODELXVOESPROC +epoxy_glLightModelxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30145 /* glLightModelxvOES */); +} + +static PFNGLLIGHTFPROC +epoxy_glLightf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30163 /* "glLightf" */, + 30163 /* "glLightf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30163 /* "glLightf" */, + providers, entrypoints); +} + +static PFNGLLIGHTFVPROC +epoxy_glLightfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30172 /* "glLightfv" */, + 30172 /* "glLightfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 30172 /* "glLightfv" */, + providers, entrypoints); +} + +static PFNGLLIGHTIPROC +epoxy_glLighti_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30182 /* glLighti */); +} + +static PFNGLLIGHTIVPROC +epoxy_glLightiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30191 /* glLightiv */); +} + +static PFNGLLIGHTXPROC +epoxy_glLightx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30201 /* glLightx */); +} + +static PFNGLLIGHTXOESPROC +epoxy_glLightxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30210 /* glLightxOES */); +} + +static PFNGLLIGHTXVPROC +epoxy_glLightxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30222 /* glLightxv */); +} + +static PFNGLLIGHTXVOESPROC +epoxy_glLightxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30232 /* glLightxvOES */); +} + +static PFNGLLINESTIPPLEPROC +epoxy_glLineStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30245 /* glLineStipple */); +} + +static PFNGLLINEWIDTHPROC +epoxy_glLineWidth_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30259 /* "glLineWidth" */, + 30259 /* "glLineWidth" */, + 30259 /* "glLineWidth" */, + }; + return gl_provider_resolver(entrypoint_strings + 30259 /* "glLineWidth" */, + providers, entrypoints); +} + +static PFNGLLINEWIDTHXPROC +epoxy_glLineWidthx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30271 /* glLineWidthx */); +} + +static PFNGLLINEWIDTHXOESPROC +epoxy_glLineWidthxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30284 /* glLineWidthxOES */); +} + +static PFNGLLINKPROGRAMPROC +epoxy_glLinkProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30300 /* "glLinkProgram" */, + 30300 /* "glLinkProgram" */, + 30314 /* "glLinkProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 30300 /* "glLinkProgram" */, + providers, entrypoints); +} + +static PFNGLLINKPROGRAMARBPROC +epoxy_glLinkProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30314 /* "glLinkProgramARB" */, + 30300 /* "glLinkProgram" */, + 30300 /* "glLinkProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 30314 /* "glLinkProgramARB" */, + providers, entrypoints); +} + +static PFNGLLISTBASEPROC +epoxy_glListBase_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30331 /* glListBase */); +} + +static PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC +epoxy_glListDrawCommandsStatesClientNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 30342 /* glListDrawCommandsStatesClientNV */); +} + +static PFNGLLISTPARAMETERFSGIXPROC +epoxy_glListParameterfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30375 /* glListParameterfSGIX */); +} + +static PFNGLLISTPARAMETERFVSGIXPROC +epoxy_glListParameterfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30396 /* glListParameterfvSGIX */); +} + +static PFNGLLISTPARAMETERISGIXPROC +epoxy_glListParameteriSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30418 /* glListParameteriSGIX */); +} + +static PFNGLLISTPARAMETERIVSGIXPROC +epoxy_glListParameterivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_list_priority, 30439 /* glListParameterivSGIX */); +} + +static PFNGLLOADIDENTITYPROC +epoxy_glLoadIdentity_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30461 /* "glLoadIdentity" */, + 30461 /* "glLoadIdentity" */, + }; + return gl_provider_resolver(entrypoint_strings + 30461 /* "glLoadIdentity" */, + providers, entrypoints); +} + +static PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC +epoxy_glLoadIdentityDeformationMapSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_polynomial_ffd, 30476 /* glLoadIdentityDeformationMapSGIX */); +} + +static PFNGLLOADMATRIXDPROC +epoxy_glLoadMatrixd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30509 /* glLoadMatrixd */); +} + +static PFNGLLOADMATRIXFPROC +epoxy_glLoadMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30523 /* "glLoadMatrixf" */, + 30523 /* "glLoadMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30523 /* "glLoadMatrixf" */, + providers, entrypoints); +} + +static PFNGLLOADMATRIXXPROC +epoxy_glLoadMatrixx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 30537 /* glLoadMatrixx */); +} + +static PFNGLLOADMATRIXXOESPROC +epoxy_glLoadMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30551 /* glLoadMatrixxOES */); +} + +static PFNGLLOADNAMEPROC +epoxy_glLoadName_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 30568 /* glLoadName */); +} + +static PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC +epoxy_glLoadPaletteFromModelViewMatrixOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 30579 /* glLoadPaletteFromModelViewMatrixOES */); +} + +static PFNGLLOADPROGRAMNVPROC +epoxy_glLoadProgramNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 30615 /* glLoadProgramNV */); +} + +static PFNGLLOADTRANSPOSEMATRIXDPROC +epoxy_glLoadTransposeMatrixd_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30631 /* "glLoadTransposeMatrixd" */, + 30654 /* "glLoadTransposeMatrixdARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 30631 /* "glLoadTransposeMatrixd" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXDARBPROC +epoxy_glLoadTransposeMatrixdARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30654 /* "glLoadTransposeMatrixdARB" */, + 30631 /* "glLoadTransposeMatrixd" */, + }; + return gl_provider_resolver(entrypoint_strings + 30654 /* "glLoadTransposeMatrixdARB" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXFPROC +epoxy_glLoadTransposeMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30680 /* "glLoadTransposeMatrixf" */, + 30703 /* "glLoadTransposeMatrixfARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 30680 /* "glLoadTransposeMatrixf" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXFARBPROC +epoxy_glLoadTransposeMatrixfARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30703 /* "glLoadTransposeMatrixfARB" */, + 30680 /* "glLoadTransposeMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 30703 /* "glLoadTransposeMatrixfARB" */, + providers, entrypoints); +} + +static PFNGLLOADTRANSPOSEMATRIXXOESPROC +epoxy_glLoadTransposeMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 30729 /* glLoadTransposeMatrixxOES */); +} + +static PFNGLLOCKARRAYSEXTPROC +epoxy_glLockArraysEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_compiled_vertex_array, 30755 /* glLockArraysEXT */); +} + +static PFNGLLOGICOPPROC +epoxy_glLogicOp_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 30771 /* "glLogicOp" */, + 30771 /* "glLogicOp" */, + }; + return gl_provider_resolver(entrypoint_strings + 30771 /* "glLogicOp" */, + providers, entrypoints); +} + +static PFNGLMAKEBUFFERNONRESIDENTNVPROC +epoxy_glMakeBufferNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30781 /* glMakeBufferNonResidentNV */); +} + +static PFNGLMAKEBUFFERRESIDENTNVPROC +epoxy_glMakeBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30807 /* glMakeBufferResidentNV */); +} + +static PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC +epoxy_glMakeImageHandleNonResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 30830 /* glMakeImageHandleNonResidentARB */); +} + +static PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC +epoxy_glMakeImageHandleNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 30862 /* glMakeImageHandleNonResidentNV */); +} + +static PFNGLMAKEIMAGEHANDLERESIDENTARBPROC +epoxy_glMakeImageHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 30893 /* glMakeImageHandleResidentARB */); +} + +static PFNGLMAKEIMAGEHANDLERESIDENTNVPROC +epoxy_glMakeImageHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 30922 /* glMakeImageHandleResidentNV */); +} + +static PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC +epoxy_glMakeNamedBufferNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30950 /* glMakeNamedBufferNonResidentNV */); +} + +static PFNGLMAKENAMEDBUFFERRESIDENTNVPROC +epoxy_glMakeNamedBufferResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 30981 /* glMakeNamedBufferResidentNV */); +} + +static PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC +epoxy_glMakeTextureHandleNonResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 31009 /* glMakeTextureHandleNonResidentARB */); +} + +static PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC +epoxy_glMakeTextureHandleNonResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 31043 /* glMakeTextureHandleNonResidentNV */); +} + +static PFNGLMAKETEXTUREHANDLERESIDENTARBPROC +epoxy_glMakeTextureHandleResidentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 31076 /* glMakeTextureHandleResidentARB */); +} + +static PFNGLMAKETEXTUREHANDLERESIDENTNVPROC +epoxy_glMakeTextureHandleResidentNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 31107 /* glMakeTextureHandleResidentNV */); +} + +static PFNGLMAP1DPROC +epoxy_glMap1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31137 /* glMap1d */); +} + +static PFNGLMAP1FPROC +epoxy_glMap1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31145 /* glMap1f */); +} + +static PFNGLMAP1XOESPROC +epoxy_glMap1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31153 /* glMap1xOES */); +} + +static PFNGLMAP2DPROC +epoxy_glMap2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31164 /* glMap2d */); +} + +static PFNGLMAP2FPROC +epoxy_glMap2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31172 /* glMap2f */); +} + +static PFNGLMAP2XOESPROC +epoxy_glMap2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31180 /* glMap2xOES */); +} + +static PFNGLMAPBUFFERPROC +epoxy_glMapBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31191 /* "glMapBuffer" */, + 31203 /* "glMapBufferARB" */, + 31218 /* "glMapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 31191 /* "glMapBuffer" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFERARBPROC +epoxy_glMapBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31203 /* "glMapBufferARB" */, + 31191 /* "glMapBuffer" */, + 31218 /* "glMapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 31203 /* "glMapBufferARB" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFEROESPROC +epoxy_glMapBufferOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_mapbuffer, + Desktop_OpenGL_1_5, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31218 /* "glMapBufferOES" */, + 31191 /* "glMapBuffer" */, + 31203 /* "glMapBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 31218 /* "glMapBufferOES" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFERRANGEPROC +epoxy_glMapBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + GL_extension_GL_EXT_map_buffer_range, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + 31250 /* "glMapBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 31233 /* "glMapBufferRange" */, + providers, entrypoints); +} + +static PFNGLMAPBUFFERRANGEEXTPROC +epoxy_glMapBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_map_buffer_range, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_map_buffer_range, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31250 /* "glMapBufferRangeEXT" */, + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + 31233 /* "glMapBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 31250 /* "glMapBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLMAPCONTROLPOINTSNVPROC +epoxy_glMapControlPointsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 31270 /* glMapControlPointsNV */); +} + +static PFNGLMAPGRID1DPROC +epoxy_glMapGrid1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31291 /* glMapGrid1d */); +} + +static PFNGLMAPGRID1FPROC +epoxy_glMapGrid1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31303 /* glMapGrid1f */); +} + +static PFNGLMAPGRID1XOESPROC +epoxy_glMapGrid1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31315 /* glMapGrid1xOES */); +} + +static PFNGLMAPGRID2DPROC +epoxy_glMapGrid2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31330 /* glMapGrid2d */); +} + +static PFNGLMAPGRID2FPROC +epoxy_glMapGrid2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31342 /* glMapGrid2f */); +} + +static PFNGLMAPGRID2XOESPROC +epoxy_glMapGrid2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31354 /* glMapGrid2xOES */); +} + +static PFNGLMAPNAMEDBUFFERPROC +epoxy_glMapNamedBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31369 /* "glMapNamedBuffer" */, + 31369 /* "glMapNamedBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 31369 /* "glMapNamedBuffer" */, + providers, entrypoints); +} + +static PFNGLMAPNAMEDBUFFEREXTPROC +epoxy_glMapNamedBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31386 /* glMapNamedBufferEXT */); +} + +static PFNGLMAPNAMEDBUFFERRANGEPROC +epoxy_glMapNamedBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31406 /* "glMapNamedBufferRange" */, + 31406 /* "glMapNamedBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 31406 /* "glMapNamedBufferRange" */, + providers, entrypoints); +} + +static PFNGLMAPNAMEDBUFFERRANGEEXTPROC +epoxy_glMapNamedBufferRangeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31428 /* glMapNamedBufferRangeEXT */); +} + +static PFNGLMAPOBJECTBUFFERATIPROC +epoxy_glMapObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_map_object_buffer, 31453 /* glMapObjectBufferATI */); +} + +static PFNGLMAPPARAMETERFVNVPROC +epoxy_glMapParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 31474 /* glMapParameterfvNV */); +} + +static PFNGLMAPPARAMETERIVNVPROC +epoxy_glMapParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_evaluators, 31493 /* glMapParameterivNV */); +} + +static PFNGLMAPTEXTURE2DINTELPROC +epoxy_glMapTexture2DINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_map_texture, 31512 /* glMapTexture2DINTEL */); +} + +static PFNGLMAPVERTEXATTRIB1DAPPLEPROC +epoxy_glMapVertexAttrib1dAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31532 /* glMapVertexAttrib1dAPPLE */); +} + +static PFNGLMAPVERTEXATTRIB1FAPPLEPROC +epoxy_glMapVertexAttrib1fAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31557 /* glMapVertexAttrib1fAPPLE */); +} + +static PFNGLMAPVERTEXATTRIB2DAPPLEPROC +epoxy_glMapVertexAttrib2dAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31582 /* glMapVertexAttrib2dAPPLE */); +} + +static PFNGLMAPVERTEXATTRIB2FAPPLEPROC +epoxy_glMapVertexAttrib2fAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_program_evaluators, 31607 /* glMapVertexAttrib2fAPPLE */); +} + +static PFNGLMATERIALFPROC +epoxy_glMaterialf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31632 /* "glMaterialf" */, + 31632 /* "glMaterialf" */, + }; + return gl_provider_resolver(entrypoint_strings + 31632 /* "glMaterialf" */, + providers, entrypoints); +} + +static PFNGLMATERIALFVPROC +epoxy_glMaterialfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 31644 /* "glMaterialfv" */, + 31644 /* "glMaterialfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 31644 /* "glMaterialfv" */, + providers, entrypoints); +} + +static PFNGLMATERIALIPROC +epoxy_glMateriali_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31657 /* glMateriali */); +} + +static PFNGLMATERIALIVPROC +epoxy_glMaterialiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 31669 /* glMaterialiv */); +} + +static PFNGLMATERIALXPROC +epoxy_glMaterialx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 31682 /* glMaterialx */); +} + +static PFNGLMATERIALXOESPROC +epoxy_glMaterialxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31694 /* glMaterialxOES */); +} + +static PFNGLMATERIALXVPROC +epoxy_glMaterialxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 31709 /* glMaterialxv */); +} + +static PFNGLMATERIALXVOESPROC +epoxy_glMaterialxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 31722 /* glMaterialxvOES */); +} + +static PFNGLMATRIXFRUSTUMEXTPROC +epoxy_glMatrixFrustumEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31738 /* glMatrixFrustumEXT */); +} + +static PFNGLMATRIXINDEXPOINTERARBPROC +epoxy_glMatrixIndexPointerARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31757 /* glMatrixIndexPointerARB */); +} + +static PFNGLMATRIXINDEXPOINTEROESPROC +epoxy_glMatrixIndexPointerOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 31781 /* glMatrixIndexPointerOES */); +} + +static PFNGLMATRIXINDEXUBVARBPROC +epoxy_glMatrixIndexubvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31805 /* glMatrixIndexubvARB */); +} + +static PFNGLMATRIXINDEXUIVARBPROC +epoxy_glMatrixIndexuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31825 /* glMatrixIndexuivARB */); +} + +static PFNGLMATRIXINDEXUSVARBPROC +epoxy_glMatrixIndexusvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_matrix_palette, 31845 /* glMatrixIndexusvARB */); +} + +static PFNGLMATRIXLOAD3X2FNVPROC +epoxy_glMatrixLoad3x2fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 31865 /* glMatrixLoad3x2fNV */); +} + +static PFNGLMATRIXLOAD3X3FNVPROC +epoxy_glMatrixLoad3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 31884 /* glMatrixLoad3x3fNV */); +} + +static PFNGLMATRIXLOADIDENTITYEXTPROC +epoxy_glMatrixLoadIdentityEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31903 /* glMatrixLoadIdentityEXT */); +} + +static PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC +epoxy_glMatrixLoadTranspose3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 31927 /* glMatrixLoadTranspose3x3fNV */); +} + +static PFNGLMATRIXLOADTRANSPOSEDEXTPROC +epoxy_glMatrixLoadTransposedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31955 /* glMatrixLoadTransposedEXT */); +} + +static PFNGLMATRIXLOADTRANSPOSEFEXTPROC +epoxy_glMatrixLoadTransposefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 31981 /* glMatrixLoadTransposefEXT */); +} + +static PFNGLMATRIXLOADDEXTPROC +epoxy_glMatrixLoaddEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32007 /* glMatrixLoaddEXT */); +} + +static PFNGLMATRIXLOADFEXTPROC +epoxy_glMatrixLoadfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32024 /* glMatrixLoadfEXT */); +} + +static PFNGLMATRIXMODEPROC +epoxy_glMatrixMode_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32041 /* "glMatrixMode" */, + 32041 /* "glMatrixMode" */, + }; + return gl_provider_resolver(entrypoint_strings + 32041 /* "glMatrixMode" */, + providers, entrypoints); +} + +static PFNGLMATRIXMULT3X2FNVPROC +epoxy_glMatrixMult3x2fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 32054 /* glMatrixMult3x2fNV */); +} + +static PFNGLMATRIXMULT3X3FNVPROC +epoxy_glMatrixMult3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 32073 /* glMatrixMult3x3fNV */); +} + +static PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC +epoxy_glMatrixMultTranspose3x3fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 32092 /* glMatrixMultTranspose3x3fNV */); +} + +static PFNGLMATRIXMULTTRANSPOSEDEXTPROC +epoxy_glMatrixMultTransposedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32120 /* glMatrixMultTransposedEXT */); +} + +static PFNGLMATRIXMULTTRANSPOSEFEXTPROC +epoxy_glMatrixMultTransposefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32146 /* glMatrixMultTransposefEXT */); +} + +static PFNGLMATRIXMULTDEXTPROC +epoxy_glMatrixMultdEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32172 /* glMatrixMultdEXT */); +} + +static PFNGLMATRIXMULTFEXTPROC +epoxy_glMatrixMultfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32189 /* glMatrixMultfEXT */); +} + +static PFNGLMATRIXORTHOEXTPROC +epoxy_glMatrixOrthoEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32206 /* glMatrixOrthoEXT */); +} + +static PFNGLMATRIXPOPEXTPROC +epoxy_glMatrixPopEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32223 /* glMatrixPopEXT */); +} + +static PFNGLMATRIXPUSHEXTPROC +epoxy_glMatrixPushEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32238 /* glMatrixPushEXT */); +} + +static PFNGLMATRIXROTATEDEXTPROC +epoxy_glMatrixRotatedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32254 /* glMatrixRotatedEXT */); +} + +static PFNGLMATRIXROTATEFEXTPROC +epoxy_glMatrixRotatefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32273 /* glMatrixRotatefEXT */); +} + +static PFNGLMATRIXSCALEDEXTPROC +epoxy_glMatrixScaledEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32292 /* glMatrixScaledEXT */); +} + +static PFNGLMATRIXSCALEFEXTPROC +epoxy_glMatrixScalefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32310 /* glMatrixScalefEXT */); +} + +static PFNGLMATRIXTRANSLATEDEXTPROC +epoxy_glMatrixTranslatedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32328 /* glMatrixTranslatedEXT */); +} + +static PFNGLMATRIXTRANSLATEFEXTPROC +epoxy_glMatrixTranslatefEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 32350 /* glMatrixTranslatefEXT */); +} + +static PFNGLMAXSHADERCOMPILERTHREADSARBPROC +epoxy_glMaxShaderCompilerThreadsARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_parallel_shader_compile, 32372 /* glMaxShaderCompilerThreadsARB */); +} + +static PFNGLMEMORYBARRIERPROC +epoxy_glMemoryBarrier_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_image_load_store, + OpenGL_ES_3_1, + GL_extension_GL_EXT_shader_image_load_store, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + 32442 /* "glMemoryBarrierEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32402 /* "glMemoryBarrier" */, + providers, entrypoints); +} + +static PFNGLMEMORYBARRIERBYREGIONPROC +epoxy_glMemoryBarrierByRegion_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_ES3_1_compatibility, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32418 /* "glMemoryBarrierByRegion" */, + 32418 /* "glMemoryBarrierByRegion" */, + 32418 /* "glMemoryBarrierByRegion" */, + }; + return gl_provider_resolver(entrypoint_strings + 32418 /* "glMemoryBarrierByRegion" */, + providers, entrypoints); +} + +static PFNGLMEMORYBARRIEREXTPROC +epoxy_glMemoryBarrierEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_shader_image_load_store, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_shader_image_load_store, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32442 /* "glMemoryBarrierEXT" */, + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + 32402 /* "glMemoryBarrier" */, + }; + return gl_provider_resolver(entrypoint_strings + 32442 /* "glMemoryBarrierEXT" */, + providers, entrypoints); +} + +static PFNGLMINSAMPLESHADINGPROC +epoxy_glMinSampleShading_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_sample_shading, + GL_extension_GL_OES_sample_shading, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32461 /* "glMinSampleShading" */, + 32461 /* "glMinSampleShading" */, + 32480 /* "glMinSampleShadingARB" */, + 32502 /* "glMinSampleShadingOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 32461 /* "glMinSampleShading" */, + providers, entrypoints); +} + +static PFNGLMINSAMPLESHADINGARBPROC +epoxy_glMinSampleShadingARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_sample_shading, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_sample_shading, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32480 /* "glMinSampleShadingARB" */, + 32461 /* "glMinSampleShading" */, + 32461 /* "glMinSampleShading" */, + 32502 /* "glMinSampleShadingOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 32480 /* "glMinSampleShadingARB" */, + providers, entrypoints); +} + +static PFNGLMINSAMPLESHADINGOESPROC +epoxy_glMinSampleShadingOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_sample_shading, + Desktop_OpenGL_4_0, + OpenGL_ES_3_2, + GL_extension_GL_ARB_sample_shading, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32502 /* "glMinSampleShadingOES" */, + 32461 /* "glMinSampleShading" */, + 32461 /* "glMinSampleShading" */, + 32480 /* "glMinSampleShadingARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 32502 /* "glMinSampleShadingOES" */, + providers, entrypoints); +} + +static PFNGLMINMAXPROC +epoxy_glMinmax_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32524 /* "glMinmax" */, + 32533 /* "glMinmaxEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32524 /* "glMinmax" */, + providers, entrypoints); +} + +static PFNGLMINMAXEXTPROC +epoxy_glMinmaxEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32533 /* "glMinmaxEXT" */, + 32524 /* "glMinmax" */, + }; + return gl_provider_resolver(entrypoint_strings + 32533 /* "glMinmaxEXT" */, + providers, entrypoints); +} + +static PFNGLMULTMATRIXDPROC +epoxy_glMultMatrixd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 32545 /* glMultMatrixd */); +} + +static PFNGLMULTMATRIXFPROC +epoxy_glMultMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32559 /* "glMultMatrixf" */, + 32559 /* "glMultMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 32559 /* "glMultMatrixf" */, + providers, entrypoints); +} + +static PFNGLMULTMATRIXXPROC +epoxy_glMultMatrixx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 32573 /* glMultMatrixx */); +} + +static PFNGLMULTMATRIXXOESPROC +epoxy_glMultMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 32587 /* glMultMatrixxOES */); +} + +static PFNGLMULTTRANSPOSEMATRIXDPROC +epoxy_glMultTransposeMatrixd_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32604 /* "glMultTransposeMatrixd" */, + 32627 /* "glMultTransposeMatrixdARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 32604 /* "glMultTransposeMatrixd" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXDARBPROC +epoxy_glMultTransposeMatrixdARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32627 /* "glMultTransposeMatrixdARB" */, + 32604 /* "glMultTransposeMatrixd" */, + }; + return gl_provider_resolver(entrypoint_strings + 32627 /* "glMultTransposeMatrixdARB" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXFPROC +epoxy_glMultTransposeMatrixf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_transpose_matrix, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32653 /* "glMultTransposeMatrixf" */, + 32676 /* "glMultTransposeMatrixfARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 32653 /* "glMultTransposeMatrixf" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXFARBPROC +epoxy_glMultTransposeMatrixfARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_transpose_matrix, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32676 /* "glMultTransposeMatrixfARB" */, + 32653 /* "glMultTransposeMatrixf" */, + }; + return gl_provider_resolver(entrypoint_strings + 32676 /* "glMultTransposeMatrixfARB" */, + providers, entrypoints); +} + +static PFNGLMULTTRANSPOSEMATRIXXOESPROC +epoxy_glMultTransposeMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 32702 /* glMultTransposeMatrixxOES */); +} + +static PFNGLMULTIDRAWARRAYSPROC +epoxy_glMultiDrawArrays_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_multi_draw_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32728 /* "glMultiDrawArrays" */, + 32746 /* "glMultiDrawArraysEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32728 /* "glMultiDrawArrays" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSEXTPROC +epoxy_glMultiDrawArraysEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_arrays, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32746 /* "glMultiDrawArraysEXT" */, + 32728 /* "glMultiDrawArrays" */, + }; + return gl_provider_resolver(entrypoint_strings + 32746 /* "glMultiDrawArraysEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTPROC +epoxy_glMultiDrawArraysIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32767 /* "glMultiDrawArraysIndirect" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32793 /* "glMultiDrawArraysIndirectAMD" */, + 32933 /* "glMultiDrawArraysIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32767 /* "glMultiDrawArraysIndirect" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC +epoxy_glMultiDrawArraysIndirectAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32793 /* "glMultiDrawArraysIndirectAMD" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32933 /* "glMultiDrawArraysIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32793 /* "glMultiDrawArraysIndirectAMD" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC +epoxy_glMultiDrawArraysIndirectBindlessCountNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect_count, 32822 /* glMultiDrawArraysIndirectBindlessCountNV */); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC +epoxy_glMultiDrawArraysIndirectBindlessNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect, 32863 /* glMultiDrawArraysIndirectBindlessNV */); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC +epoxy_glMultiDrawArraysIndirectCountARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_indirect_parameters, 32899 /* glMultiDrawArraysIndirectCountARB */); +} + +static PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC +epoxy_glMultiDrawArraysIndirectEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32933 /* "glMultiDrawArraysIndirectEXT" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32767 /* "glMultiDrawArraysIndirect" */, + 32793 /* "glMultiDrawArraysIndirectAMD" */, + }; + return gl_provider_resolver(entrypoint_strings + 32933 /* "glMultiDrawArraysIndirectEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC +epoxy_glMultiDrawElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 32962 /* glMultiDrawElementArrayAPPLE */); +} + +static PFNGLMULTIDRAWELEMENTSPROC +epoxy_glMultiDrawElements_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_multi_draw_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 32991 /* "glMultiDrawElements" */, + 33107 /* "glMultiDrawElementsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 32991 /* "glMultiDrawElements" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC +epoxy_glMultiDrawElementsBaseVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_EXT_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 33011 /* "glMultiDrawElementsBaseVertex" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC +epoxy_glMultiDrawElementsBaseVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_OES_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC +epoxy_glMultiDrawElementsBaseVertexOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_draw_elements_base_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_draw_elements_base_vertex, + GL_extension_GL_EXT_draw_elements_base_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33011 /* "glMultiDrawElementsBaseVertex" */, + 33041 /* "glMultiDrawElementsBaseVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 33074 /* "glMultiDrawElementsBaseVertexOES" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSEXTPROC +epoxy_glMultiDrawElementsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_arrays, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33107 /* "glMultiDrawElementsEXT" */, + 32991 /* "glMultiDrawElements" */, + }; + return gl_provider_resolver(entrypoint_strings + 33107 /* "glMultiDrawElementsEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTPROC +epoxy_glMultiDrawElementsIndirect_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33130 /* "glMultiDrawElementsIndirect" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33158 /* "glMultiDrawElementsIndirectAMD" */, + 33306 /* "glMultiDrawElementsIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 33130 /* "glMultiDrawElementsIndirect" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC +epoxy_glMultiDrawElementsIndirectAMD_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_EXT_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33158 /* "glMultiDrawElementsIndirectAMD" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33306 /* "glMultiDrawElementsIndirectEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 33158 /* "glMultiDrawElementsIndirectAMD" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC +epoxy_glMultiDrawElementsIndirectBindlessCountNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect_count, 33189 /* glMultiDrawElementsIndirectBindlessCountNV */); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC +epoxy_glMultiDrawElementsIndirectBindlessNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_multi_draw_indirect, 33232 /* glMultiDrawElementsIndirectBindlessNV */); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC +epoxy_glMultiDrawElementsIndirectCountARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_indirect_parameters, 33270 /* glMultiDrawElementsIndirectCountARB */); +} + +static PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC +epoxy_glMultiDrawElementsIndirectEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multi_draw_indirect, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_multi_draw_indirect, + GL_extension_GL_AMD_multi_draw_indirect, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33306 /* "glMultiDrawElementsIndirectEXT" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33130 /* "glMultiDrawElementsIndirect" */, + 33158 /* "glMultiDrawElementsIndirectAMD" */, + }; + return gl_provider_resolver(entrypoint_strings + 33306 /* "glMultiDrawElementsIndirectEXT" */, + providers, entrypoints); +} + +static PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC +epoxy_glMultiDrawRangeElementArrayAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_element_array, 33337 /* glMultiDrawRangeElementArrayAPPLE */); +} + +static PFNGLMULTIMODEDRAWARRAYSIBMPROC +epoxy_glMultiModeDrawArraysIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_multimode_draw_arrays, 33371 /* glMultiModeDrawArraysIBM */); +} + +static PFNGLMULTIMODEDRAWELEMENTSIBMPROC +epoxy_glMultiModeDrawElementsIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_multimode_draw_arrays, 33396 /* glMultiModeDrawElementsIBM */); +} + +static PFNGLMULTITEXBUFFEREXTPROC +epoxy_glMultiTexBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 33423 /* glMultiTexBufferEXT */); +} + +static PFNGLMULTITEXCOORD1BOESPROC +epoxy_glMultiTexCoord1bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33443 /* glMultiTexCoord1bOES */); +} + +static PFNGLMULTITEXCOORD1BVOESPROC +epoxy_glMultiTexCoord1bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33464 /* glMultiTexCoord1bvOES */); +} + +static PFNGLMULTITEXCOORD1DPROC +epoxy_glMultiTexCoord1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33486 /* "glMultiTexCoord1d" */, + 33504 /* "glMultiTexCoord1dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33486 /* "glMultiTexCoord1d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1DARBPROC +epoxy_glMultiTexCoord1dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33504 /* "glMultiTexCoord1dARB" */, + 33486 /* "glMultiTexCoord1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 33504 /* "glMultiTexCoord1dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1DVPROC +epoxy_glMultiTexCoord1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33525 /* "glMultiTexCoord1dv" */, + 33544 /* "glMultiTexCoord1dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33525 /* "glMultiTexCoord1dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1DVARBPROC +epoxy_glMultiTexCoord1dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33544 /* "glMultiTexCoord1dvARB" */, + 33525 /* "glMultiTexCoord1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33544 /* "glMultiTexCoord1dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FPROC +epoxy_glMultiTexCoord1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33566 /* "glMultiTexCoord1f" */, + 33584 /* "glMultiTexCoord1fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33566 /* "glMultiTexCoord1f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FARBPROC +epoxy_glMultiTexCoord1fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33584 /* "glMultiTexCoord1fARB" */, + 33566 /* "glMultiTexCoord1f" */, + }; + return gl_provider_resolver(entrypoint_strings + 33584 /* "glMultiTexCoord1fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FVPROC +epoxy_glMultiTexCoord1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33605 /* "glMultiTexCoord1fv" */, + 33624 /* "glMultiTexCoord1fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33605 /* "glMultiTexCoord1fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1FVARBPROC +epoxy_glMultiTexCoord1fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33624 /* "glMultiTexCoord1fvARB" */, + 33605 /* "glMultiTexCoord1fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33624 /* "glMultiTexCoord1fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1HNVPROC +epoxy_glMultiTexCoord1hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 33646 /* glMultiTexCoord1hNV */); +} + +static PFNGLMULTITEXCOORD1HVNVPROC +epoxy_glMultiTexCoord1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 33666 /* glMultiTexCoord1hvNV */); +} + +static PFNGLMULTITEXCOORD1IPROC +epoxy_glMultiTexCoord1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33687 /* "glMultiTexCoord1i" */, + 33705 /* "glMultiTexCoord1iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33687 /* "glMultiTexCoord1i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1IARBPROC +epoxy_glMultiTexCoord1iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33705 /* "glMultiTexCoord1iARB" */, + 33687 /* "glMultiTexCoord1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 33705 /* "glMultiTexCoord1iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1IVPROC +epoxy_glMultiTexCoord1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33726 /* "glMultiTexCoord1iv" */, + 33745 /* "glMultiTexCoord1ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33726 /* "glMultiTexCoord1iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1IVARBPROC +epoxy_glMultiTexCoord1ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33745 /* "glMultiTexCoord1ivARB" */, + 33726 /* "glMultiTexCoord1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33745 /* "glMultiTexCoord1ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SPROC +epoxy_glMultiTexCoord1s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33767 /* "glMultiTexCoord1s" */, + 33785 /* "glMultiTexCoord1sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33767 /* "glMultiTexCoord1s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SARBPROC +epoxy_glMultiTexCoord1sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33785 /* "glMultiTexCoord1sARB" */, + 33767 /* "glMultiTexCoord1s" */, + }; + return gl_provider_resolver(entrypoint_strings + 33785 /* "glMultiTexCoord1sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SVPROC +epoxy_glMultiTexCoord1sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33806 /* "glMultiTexCoord1sv" */, + 33825 /* "glMultiTexCoord1svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33806 /* "glMultiTexCoord1sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1SVARBPROC +epoxy_glMultiTexCoord1svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33825 /* "glMultiTexCoord1svARB" */, + 33806 /* "glMultiTexCoord1sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33825 /* "glMultiTexCoord1svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD1XOESPROC +epoxy_glMultiTexCoord1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 33847 /* glMultiTexCoord1xOES */); +} + +static PFNGLMULTITEXCOORD1XVOESPROC +epoxy_glMultiTexCoord1xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 33868 /* glMultiTexCoord1xvOES */); +} + +static PFNGLMULTITEXCOORD2BOESPROC +epoxy_glMultiTexCoord2bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33890 /* glMultiTexCoord2bOES */); +} + +static PFNGLMULTITEXCOORD2BVOESPROC +epoxy_glMultiTexCoord2bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 33911 /* glMultiTexCoord2bvOES */); +} + +static PFNGLMULTITEXCOORD2DPROC +epoxy_glMultiTexCoord2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33933 /* "glMultiTexCoord2d" */, + 33951 /* "glMultiTexCoord2dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33933 /* "glMultiTexCoord2d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2DARBPROC +epoxy_glMultiTexCoord2dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33951 /* "glMultiTexCoord2dARB" */, + 33933 /* "glMultiTexCoord2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 33951 /* "glMultiTexCoord2dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2DVPROC +epoxy_glMultiTexCoord2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33972 /* "glMultiTexCoord2dv" */, + 33991 /* "glMultiTexCoord2dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 33972 /* "glMultiTexCoord2dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2DVARBPROC +epoxy_glMultiTexCoord2dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 33991 /* "glMultiTexCoord2dvARB" */, + 33972 /* "glMultiTexCoord2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 33991 /* "glMultiTexCoord2dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FPROC +epoxy_glMultiTexCoord2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34013 /* "glMultiTexCoord2f" */, + 34031 /* "glMultiTexCoord2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34013 /* "glMultiTexCoord2f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FARBPROC +epoxy_glMultiTexCoord2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34031 /* "glMultiTexCoord2fARB" */, + 34013 /* "glMultiTexCoord2f" */, + }; + return gl_provider_resolver(entrypoint_strings + 34031 /* "glMultiTexCoord2fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FVPROC +epoxy_glMultiTexCoord2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34052 /* "glMultiTexCoord2fv" */, + 34071 /* "glMultiTexCoord2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34052 /* "glMultiTexCoord2fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2FVARBPROC +epoxy_glMultiTexCoord2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34071 /* "glMultiTexCoord2fvARB" */, + 34052 /* "glMultiTexCoord2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34071 /* "glMultiTexCoord2fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2HNVPROC +epoxy_glMultiTexCoord2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34093 /* glMultiTexCoord2hNV */); +} + +static PFNGLMULTITEXCOORD2HVNVPROC +epoxy_glMultiTexCoord2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34113 /* glMultiTexCoord2hvNV */); +} + +static PFNGLMULTITEXCOORD2IPROC +epoxy_glMultiTexCoord2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34134 /* "glMultiTexCoord2i" */, + 34152 /* "glMultiTexCoord2iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34134 /* "glMultiTexCoord2i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2IARBPROC +epoxy_glMultiTexCoord2iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34152 /* "glMultiTexCoord2iARB" */, + 34134 /* "glMultiTexCoord2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 34152 /* "glMultiTexCoord2iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2IVPROC +epoxy_glMultiTexCoord2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34173 /* "glMultiTexCoord2iv" */, + 34192 /* "glMultiTexCoord2ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34173 /* "glMultiTexCoord2iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2IVARBPROC +epoxy_glMultiTexCoord2ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34192 /* "glMultiTexCoord2ivARB" */, + 34173 /* "glMultiTexCoord2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34192 /* "glMultiTexCoord2ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SPROC +epoxy_glMultiTexCoord2s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34214 /* "glMultiTexCoord2s" */, + 34232 /* "glMultiTexCoord2sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34214 /* "glMultiTexCoord2s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SARBPROC +epoxy_glMultiTexCoord2sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34232 /* "glMultiTexCoord2sARB" */, + 34214 /* "glMultiTexCoord2s" */, + }; + return gl_provider_resolver(entrypoint_strings + 34232 /* "glMultiTexCoord2sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SVPROC +epoxy_glMultiTexCoord2sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34253 /* "glMultiTexCoord2sv" */, + 34272 /* "glMultiTexCoord2svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34253 /* "glMultiTexCoord2sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2SVARBPROC +epoxy_glMultiTexCoord2svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34272 /* "glMultiTexCoord2svARB" */, + 34253 /* "glMultiTexCoord2sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34272 /* "glMultiTexCoord2svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD2XOESPROC +epoxy_glMultiTexCoord2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34294 /* glMultiTexCoord2xOES */); +} + +static PFNGLMULTITEXCOORD2XVOESPROC +epoxy_glMultiTexCoord2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34315 /* glMultiTexCoord2xvOES */); +} + +static PFNGLMULTITEXCOORD3BOESPROC +epoxy_glMultiTexCoord3bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34337 /* glMultiTexCoord3bOES */); +} + +static PFNGLMULTITEXCOORD3BVOESPROC +epoxy_glMultiTexCoord3bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34358 /* glMultiTexCoord3bvOES */); +} + +static PFNGLMULTITEXCOORD3DPROC +epoxy_glMultiTexCoord3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34380 /* "glMultiTexCoord3d" */, + 34398 /* "glMultiTexCoord3dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34380 /* "glMultiTexCoord3d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3DARBPROC +epoxy_glMultiTexCoord3dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34398 /* "glMultiTexCoord3dARB" */, + 34380 /* "glMultiTexCoord3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 34398 /* "glMultiTexCoord3dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3DVPROC +epoxy_glMultiTexCoord3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34419 /* "glMultiTexCoord3dv" */, + 34438 /* "glMultiTexCoord3dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34419 /* "glMultiTexCoord3dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3DVARBPROC +epoxy_glMultiTexCoord3dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34438 /* "glMultiTexCoord3dvARB" */, + 34419 /* "glMultiTexCoord3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34438 /* "glMultiTexCoord3dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FPROC +epoxy_glMultiTexCoord3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34460 /* "glMultiTexCoord3f" */, + 34478 /* "glMultiTexCoord3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34460 /* "glMultiTexCoord3f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FARBPROC +epoxy_glMultiTexCoord3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34478 /* "glMultiTexCoord3fARB" */, + 34460 /* "glMultiTexCoord3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 34478 /* "glMultiTexCoord3fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FVPROC +epoxy_glMultiTexCoord3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34499 /* "glMultiTexCoord3fv" */, + 34518 /* "glMultiTexCoord3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34499 /* "glMultiTexCoord3fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3FVARBPROC +epoxy_glMultiTexCoord3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34518 /* "glMultiTexCoord3fvARB" */, + 34499 /* "glMultiTexCoord3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34518 /* "glMultiTexCoord3fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3HNVPROC +epoxy_glMultiTexCoord3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34540 /* glMultiTexCoord3hNV */); +} + +static PFNGLMULTITEXCOORD3HVNVPROC +epoxy_glMultiTexCoord3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34560 /* glMultiTexCoord3hvNV */); +} + +static PFNGLMULTITEXCOORD3IPROC +epoxy_glMultiTexCoord3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34581 /* "glMultiTexCoord3i" */, + 34599 /* "glMultiTexCoord3iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34581 /* "glMultiTexCoord3i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3IARBPROC +epoxy_glMultiTexCoord3iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34599 /* "glMultiTexCoord3iARB" */, + 34581 /* "glMultiTexCoord3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 34599 /* "glMultiTexCoord3iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3IVPROC +epoxy_glMultiTexCoord3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34620 /* "glMultiTexCoord3iv" */, + 34639 /* "glMultiTexCoord3ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34620 /* "glMultiTexCoord3iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3IVARBPROC +epoxy_glMultiTexCoord3ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34639 /* "glMultiTexCoord3ivARB" */, + 34620 /* "glMultiTexCoord3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34639 /* "glMultiTexCoord3ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SPROC +epoxy_glMultiTexCoord3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34661 /* "glMultiTexCoord3s" */, + 34679 /* "glMultiTexCoord3sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34661 /* "glMultiTexCoord3s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SARBPROC +epoxy_glMultiTexCoord3sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34679 /* "glMultiTexCoord3sARB" */, + 34661 /* "glMultiTexCoord3s" */, + }; + return gl_provider_resolver(entrypoint_strings + 34679 /* "glMultiTexCoord3sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SVPROC +epoxy_glMultiTexCoord3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34700 /* "glMultiTexCoord3sv" */, + 34719 /* "glMultiTexCoord3svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34700 /* "glMultiTexCoord3sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3SVARBPROC +epoxy_glMultiTexCoord3svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34719 /* "glMultiTexCoord3svARB" */, + 34700 /* "glMultiTexCoord3sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34719 /* "glMultiTexCoord3svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD3XOESPROC +epoxy_glMultiTexCoord3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34741 /* glMultiTexCoord3xOES */); +} + +static PFNGLMULTITEXCOORD3XVOESPROC +epoxy_glMultiTexCoord3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 34762 /* glMultiTexCoord3xvOES */); +} + +static PFNGLMULTITEXCOORD4BOESPROC +epoxy_glMultiTexCoord4bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34784 /* glMultiTexCoord4bOES */); +} + +static PFNGLMULTITEXCOORD4BVOESPROC +epoxy_glMultiTexCoord4bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 34805 /* glMultiTexCoord4bvOES */); +} + +static PFNGLMULTITEXCOORD4DPROC +epoxy_glMultiTexCoord4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34827 /* "glMultiTexCoord4d" */, + 34845 /* "glMultiTexCoord4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34827 /* "glMultiTexCoord4d" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4DARBPROC +epoxy_glMultiTexCoord4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34845 /* "glMultiTexCoord4dARB" */, + 34827 /* "glMultiTexCoord4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 34845 /* "glMultiTexCoord4dARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4DVPROC +epoxy_glMultiTexCoord4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34866 /* "glMultiTexCoord4dv" */, + 34885 /* "glMultiTexCoord4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34866 /* "glMultiTexCoord4dv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4DVARBPROC +epoxy_glMultiTexCoord4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34885 /* "glMultiTexCoord4dvARB" */, + 34866 /* "glMultiTexCoord4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34885 /* "glMultiTexCoord4dvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FPROC +epoxy_glMultiTexCoord4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34907 /* "glMultiTexCoord4f" */, + 34907 /* "glMultiTexCoord4f" */, + 34925 /* "glMultiTexCoord4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34907 /* "glMultiTexCoord4f" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FARBPROC +epoxy_glMultiTexCoord4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34925 /* "glMultiTexCoord4fARB" */, + 34907 /* "glMultiTexCoord4f" */, + 34907 /* "glMultiTexCoord4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 34925 /* "glMultiTexCoord4fARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FVPROC +epoxy_glMultiTexCoord4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34946 /* "glMultiTexCoord4fv" */, + 34965 /* "glMultiTexCoord4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 34946 /* "glMultiTexCoord4fv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4FVARBPROC +epoxy_glMultiTexCoord4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 34965 /* "glMultiTexCoord4fvARB" */, + 34946 /* "glMultiTexCoord4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 34965 /* "glMultiTexCoord4fvARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4HNVPROC +epoxy_glMultiTexCoord4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 34987 /* glMultiTexCoord4hNV */); +} + +static PFNGLMULTITEXCOORD4HVNVPROC +epoxy_glMultiTexCoord4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 35007 /* glMultiTexCoord4hvNV */); +} + +static PFNGLMULTITEXCOORD4IPROC +epoxy_glMultiTexCoord4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35028 /* "glMultiTexCoord4i" */, + 35046 /* "glMultiTexCoord4iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35028 /* "glMultiTexCoord4i" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4IARBPROC +epoxy_glMultiTexCoord4iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35046 /* "glMultiTexCoord4iARB" */, + 35028 /* "glMultiTexCoord4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 35046 /* "glMultiTexCoord4iARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4IVPROC +epoxy_glMultiTexCoord4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35067 /* "glMultiTexCoord4iv" */, + 35086 /* "glMultiTexCoord4ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35067 /* "glMultiTexCoord4iv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4IVARBPROC +epoxy_glMultiTexCoord4ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35086 /* "glMultiTexCoord4ivARB" */, + 35067 /* "glMultiTexCoord4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35086 /* "glMultiTexCoord4ivARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SPROC +epoxy_glMultiTexCoord4s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35108 /* "glMultiTexCoord4s" */, + 35126 /* "glMultiTexCoord4sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35108 /* "glMultiTexCoord4s" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SARBPROC +epoxy_glMultiTexCoord4sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35126 /* "glMultiTexCoord4sARB" */, + 35108 /* "glMultiTexCoord4s" */, + }; + return gl_provider_resolver(entrypoint_strings + 35126 /* "glMultiTexCoord4sARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SVPROC +epoxy_glMultiTexCoord4sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + GL_extension_GL_ARB_multitexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35147 /* "glMultiTexCoord4sv" */, + 35166 /* "glMultiTexCoord4svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 35147 /* "glMultiTexCoord4sv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4SVARBPROC +epoxy_glMultiTexCoord4svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multitexture, + Desktop_OpenGL_1_3, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35166 /* "glMultiTexCoord4svARB" */, + 35147 /* "glMultiTexCoord4sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35166 /* "glMultiTexCoord4svARB" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORD4XPROC +epoxy_glMultiTexCoord4x_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 35188 /* glMultiTexCoord4x */); +} + +static PFNGLMULTITEXCOORD4XOESPROC +epoxy_glMultiTexCoord4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 35206 /* glMultiTexCoord4xOES */); +} + +static PFNGLMULTITEXCOORD4XVOESPROC +epoxy_glMultiTexCoord4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 35227 /* glMultiTexCoord4xvOES */); +} + +static PFNGLMULTITEXCOORDP1UIPROC +epoxy_glMultiTexCoordP1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35249 /* "glMultiTexCoordP1ui" */, + 35249 /* "glMultiTexCoordP1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35249 /* "glMultiTexCoordP1ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP1UIVPROC +epoxy_glMultiTexCoordP1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35269 /* "glMultiTexCoordP1uiv" */, + 35269 /* "glMultiTexCoordP1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35269 /* "glMultiTexCoordP1uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP2UIPROC +epoxy_glMultiTexCoordP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35290 /* "glMultiTexCoordP2ui" */, + 35290 /* "glMultiTexCoordP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35290 /* "glMultiTexCoordP2ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP2UIVPROC +epoxy_glMultiTexCoordP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35310 /* "glMultiTexCoordP2uiv" */, + 35310 /* "glMultiTexCoordP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35310 /* "glMultiTexCoordP2uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP3UIPROC +epoxy_glMultiTexCoordP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35331 /* "glMultiTexCoordP3ui" */, + 35331 /* "glMultiTexCoordP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35331 /* "glMultiTexCoordP3ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP3UIVPROC +epoxy_glMultiTexCoordP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35351 /* "glMultiTexCoordP3uiv" */, + 35351 /* "glMultiTexCoordP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35351 /* "glMultiTexCoordP3uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP4UIPROC +epoxy_glMultiTexCoordP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35372 /* "glMultiTexCoordP4ui" */, + 35372 /* "glMultiTexCoordP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 35372 /* "glMultiTexCoordP4ui" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDP4UIVPROC +epoxy_glMultiTexCoordP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35392 /* "glMultiTexCoordP4uiv" */, + 35392 /* "glMultiTexCoordP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 35392 /* "glMultiTexCoordP4uiv" */, + providers, entrypoints); +} + +static PFNGLMULTITEXCOORDPOINTEREXTPROC +epoxy_glMultiTexCoordPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35413 /* glMultiTexCoordPointerEXT */); +} + +static PFNGLMULTITEXENVFEXTPROC +epoxy_glMultiTexEnvfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35439 /* glMultiTexEnvfEXT */); +} + +static PFNGLMULTITEXENVFVEXTPROC +epoxy_glMultiTexEnvfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35457 /* glMultiTexEnvfvEXT */); +} + +static PFNGLMULTITEXENVIEXTPROC +epoxy_glMultiTexEnviEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35476 /* glMultiTexEnviEXT */); +} + +static PFNGLMULTITEXENVIVEXTPROC +epoxy_glMultiTexEnvivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35494 /* glMultiTexEnvivEXT */); +} + +static PFNGLMULTITEXGENDEXTPROC +epoxy_glMultiTexGendEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35513 /* glMultiTexGendEXT */); +} + +static PFNGLMULTITEXGENDVEXTPROC +epoxy_glMultiTexGendvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35531 /* glMultiTexGendvEXT */); +} + +static PFNGLMULTITEXGENFEXTPROC +epoxy_glMultiTexGenfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35550 /* glMultiTexGenfEXT */); +} + +static PFNGLMULTITEXGENFVEXTPROC +epoxy_glMultiTexGenfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35568 /* glMultiTexGenfvEXT */); +} + +static PFNGLMULTITEXGENIEXTPROC +epoxy_glMultiTexGeniEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35587 /* glMultiTexGeniEXT */); +} + +static PFNGLMULTITEXGENIVEXTPROC +epoxy_glMultiTexGenivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35605 /* glMultiTexGenivEXT */); +} + +static PFNGLMULTITEXIMAGE1DEXTPROC +epoxy_glMultiTexImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35624 /* glMultiTexImage1DEXT */); +} + +static PFNGLMULTITEXIMAGE2DEXTPROC +epoxy_glMultiTexImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35645 /* glMultiTexImage2DEXT */); +} + +static PFNGLMULTITEXIMAGE3DEXTPROC +epoxy_glMultiTexImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35666 /* glMultiTexImage3DEXT */); +} + +static PFNGLMULTITEXPARAMETERIIVEXTPROC +epoxy_glMultiTexParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35687 /* glMultiTexParameterIivEXT */); +} + +static PFNGLMULTITEXPARAMETERIUIVEXTPROC +epoxy_glMultiTexParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35713 /* glMultiTexParameterIuivEXT */); +} + +static PFNGLMULTITEXPARAMETERFEXTPROC +epoxy_glMultiTexParameterfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35740 /* glMultiTexParameterfEXT */); +} + +static PFNGLMULTITEXPARAMETERFVEXTPROC +epoxy_glMultiTexParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35764 /* glMultiTexParameterfvEXT */); +} + +static PFNGLMULTITEXPARAMETERIEXTPROC +epoxy_glMultiTexParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35789 /* glMultiTexParameteriEXT */); +} + +static PFNGLMULTITEXPARAMETERIVEXTPROC +epoxy_glMultiTexParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35813 /* glMultiTexParameterivEXT */); +} + +static PFNGLMULTITEXRENDERBUFFEREXTPROC +epoxy_glMultiTexRenderbufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35838 /* glMultiTexRenderbufferEXT */); +} + +static PFNGLMULTITEXSUBIMAGE1DEXTPROC +epoxy_glMultiTexSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35864 /* glMultiTexSubImage1DEXT */); +} + +static PFNGLMULTITEXSUBIMAGE2DEXTPROC +epoxy_glMultiTexSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35888 /* glMultiTexSubImage2DEXT */); +} + +static PFNGLMULTITEXSUBIMAGE3DEXTPROC +epoxy_glMultiTexSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35912 /* glMultiTexSubImage3DEXT */); +} + +static PFNGLNAMEDBUFFERDATAPROC +epoxy_glNamedBufferData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 35936 /* "glNamedBufferData" */, + 35936 /* "glNamedBufferData" */, + }; + return gl_provider_resolver(entrypoint_strings + 35936 /* "glNamedBufferData" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERDATAEXTPROC +epoxy_glNamedBufferDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 35954 /* glNamedBufferDataEXT */); +} + +static PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC +epoxy_glNamedBufferPageCommitmentARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sparse_buffer, 35975 /* glNamedBufferPageCommitmentARB */); +} + +static PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC +epoxy_glNamedBufferPageCommitmentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sparse_buffer, 36006 /* glNamedBufferPageCommitmentEXT */); +} + +static PFNGLNAMEDBUFFERSTORAGEPROC +epoxy_glNamedBufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36037 /* "glNamedBufferStorage" */, + 36037 /* "glNamedBufferStorage" */, + 36058 /* "glNamedBufferStorageEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 36037 /* "glNamedBufferStorage" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERSTORAGEEXTPROC +epoxy_glNamedBufferStorageEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36058 /* "glNamedBufferStorageEXT" */, + 36037 /* "glNamedBufferStorage" */, + 36037 /* "glNamedBufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 36058 /* "glNamedBufferStorageEXT" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERSUBDATAPROC +epoxy_glNamedBufferSubData_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + GL_extension_GL_EXT_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36082 /* "glNamedBufferSubData" */, + 36082 /* "glNamedBufferSubData" */, + 36103 /* "glNamedBufferSubDataEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 36082 /* "glNamedBufferSubData" */, + providers, entrypoints); +} + +static PFNGLNAMEDBUFFERSUBDATAEXTPROC +epoxy_glNamedBufferSubDataEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36103 /* "glNamedBufferSubDataEXT" */, + 36082 /* "glNamedBufferSubData" */, + 36082 /* "glNamedBufferSubData" */, + }; + return gl_provider_resolver(entrypoint_strings + 36103 /* "glNamedBufferSubDataEXT" */, + providers, entrypoints); +} + +static PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC +epoxy_glNamedCopyBufferSubDataEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36127 /* glNamedCopyBufferSubDataEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC +epoxy_glNamedFramebufferDrawBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36155 /* "glNamedFramebufferDrawBuffer" */, + 36155 /* "glNamedFramebufferDrawBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36155 /* "glNamedFramebufferDrawBuffer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC +epoxy_glNamedFramebufferDrawBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36184 /* "glNamedFramebufferDrawBuffers" */, + 36184 /* "glNamedFramebufferDrawBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 36184 /* "glNamedFramebufferDrawBuffers" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC +epoxy_glNamedFramebufferParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36214 /* "glNamedFramebufferParameteri" */, + 36214 /* "glNamedFramebufferParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 36214 /* "glNamedFramebufferParameteri" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC +epoxy_glNamedFramebufferParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36243 /* glNamedFramebufferParameteriEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC +epoxy_glNamedFramebufferReadBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36275 /* "glNamedFramebufferReadBuffer" */, + 36275 /* "glNamedFramebufferReadBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36275 /* "glNamedFramebufferReadBuffer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC +epoxy_glNamedFramebufferRenderbuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36304 /* "glNamedFramebufferRenderbuffer" */, + 36304 /* "glNamedFramebufferRenderbuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36304 /* "glNamedFramebufferRenderbuffer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC +epoxy_glNamedFramebufferRenderbufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36335 /* glNamedFramebufferRenderbufferEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC +epoxy_glNamedFramebufferSampleLocationsfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_sample_locations, 36369 /* glNamedFramebufferSampleLocationsfvARB */); +} + +static PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC +epoxy_glNamedFramebufferSampleLocationsfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_sample_locations, 36408 /* glNamedFramebufferSampleLocationsfvNV */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTUREPROC +epoxy_glNamedFramebufferTexture_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36446 /* "glNamedFramebufferTexture" */, + 36446 /* "glNamedFramebufferTexture" */, + }; + return gl_provider_resolver(entrypoint_strings + 36446 /* "glNamedFramebufferTexture" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC +epoxy_glNamedFramebufferTexture1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36472 /* glNamedFramebufferTexture1DEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC +epoxy_glNamedFramebufferTexture2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36503 /* glNamedFramebufferTexture2DEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC +epoxy_glNamedFramebufferTexture3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36534 /* glNamedFramebufferTexture3DEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC +epoxy_glNamedFramebufferTextureEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36565 /* glNamedFramebufferTextureEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC +epoxy_glNamedFramebufferTextureFaceEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36594 /* glNamedFramebufferTextureFaceEXT */); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC +epoxy_glNamedFramebufferTextureLayer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 36627 /* "glNamedFramebufferTextureLayer" */, + 36627 /* "glNamedFramebufferTextureLayer" */, + }; + return gl_provider_resolver(entrypoint_strings + 36627 /* "glNamedFramebufferTextureLayer" */, + providers, entrypoints); +} + +static PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC +epoxy_glNamedFramebufferTextureLayerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36658 /* glNamedFramebufferTextureLayerEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC +epoxy_glNamedProgramLocalParameter4dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36692 /* glNamedProgramLocalParameter4dEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC +epoxy_glNamedProgramLocalParameter4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36726 /* glNamedProgramLocalParameter4dvEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC +epoxy_glNamedProgramLocalParameter4fEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36761 /* glNamedProgramLocalParameter4fEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC +epoxy_glNamedProgramLocalParameter4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36795 /* glNamedProgramLocalParameter4fvEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC +epoxy_glNamedProgramLocalParameterI4iEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36830 /* glNamedProgramLocalParameterI4iEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC +epoxy_glNamedProgramLocalParameterI4ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36865 /* glNamedProgramLocalParameterI4ivEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC +epoxy_glNamedProgramLocalParameterI4uiEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36901 /* glNamedProgramLocalParameterI4uiEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC +epoxy_glNamedProgramLocalParameterI4uivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36937 /* glNamedProgramLocalParameterI4uivEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC +epoxy_glNamedProgramLocalParameters4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 36974 /* glNamedProgramLocalParameters4fvEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC +epoxy_glNamedProgramLocalParametersI4ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37010 /* glNamedProgramLocalParametersI4ivEXT */); +} + +static PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC +epoxy_glNamedProgramLocalParametersI4uivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37047 /* glNamedProgramLocalParametersI4uivEXT */); +} + +static PFNGLNAMEDPROGRAMSTRINGEXTPROC +epoxy_glNamedProgramStringEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37085 /* glNamedProgramStringEXT */); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEPROC +epoxy_glNamedRenderbufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37109 /* "glNamedRenderbufferStorage" */, + 37109 /* "glNamedRenderbufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 37109 /* "glNamedRenderbufferStorage" */, + providers, entrypoints); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC +epoxy_glNamedRenderbufferStorageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37136 /* glNamedRenderbufferStorageEXT */); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC +epoxy_glNamedRenderbufferStorageMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37166 /* "glNamedRenderbufferStorageMultisample" */, + 37166 /* "glNamedRenderbufferStorageMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 37166 /* "glNamedRenderbufferStorageMultisample" */, + providers, entrypoints); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC +epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37204 /* glNamedRenderbufferStorageMultisampleCoverageEXT */); +} + +static PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC +epoxy_glNamedRenderbufferStorageMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 37253 /* glNamedRenderbufferStorageMultisampleEXT */); +} + +static PFNGLNAMEDSTRINGARBPROC +epoxy_glNamedStringARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_shading_language_include, 37294 /* glNamedStringARB */); +} + +static PFNGLNEWLISTPROC +epoxy_glNewList_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37311 /* glNewList */); +} + +static PFNGLNEWOBJECTBUFFERATIPROC +epoxy_glNewObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 37321 /* glNewObjectBufferATI */); +} + +static PFNGLNORMAL3BPROC +epoxy_glNormal3b_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37342 /* glNormal3b */); +} + +static PFNGLNORMAL3BVPROC +epoxy_glNormal3bv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37353 /* glNormal3bv */); +} + +static PFNGLNORMAL3DPROC +epoxy_glNormal3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37365 /* glNormal3d */); +} + +static PFNGLNORMAL3DVPROC +epoxy_glNormal3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37376 /* glNormal3dv */); +} + +static PFNGLNORMAL3FPROC +epoxy_glNormal3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37388 /* "glNormal3f" */, + 37388 /* "glNormal3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 37388 /* "glNormal3f" */, + providers, entrypoints); +} + +static PFNGLNORMAL3FVERTEX3FSUNPROC +epoxy_glNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 37399 /* glNormal3fVertex3fSUN */); +} + +static PFNGLNORMAL3FVERTEX3FVSUNPROC +epoxy_glNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 37421 /* glNormal3fVertex3fvSUN */); +} + +static PFNGLNORMAL3FVPROC +epoxy_glNormal3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37444 /* glNormal3fv */); +} + +static PFNGLNORMAL3HNVPROC +epoxy_glNormal3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 37456 /* glNormal3hNV */); +} + +static PFNGLNORMAL3HVNVPROC +epoxy_glNormal3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 37469 /* glNormal3hvNV */); +} + +static PFNGLNORMAL3IPROC +epoxy_glNormal3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37483 /* glNormal3i */); +} + +static PFNGLNORMAL3IVPROC +epoxy_glNormal3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37494 /* glNormal3iv */); +} + +static PFNGLNORMAL3SPROC +epoxy_glNormal3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37506 /* glNormal3s */); +} + +static PFNGLNORMAL3SVPROC +epoxy_glNormal3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 37517 /* glNormal3sv */); +} + +static PFNGLNORMAL3XPROC +epoxy_glNormal3x_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 37529 /* glNormal3x */); +} + +static PFNGLNORMAL3XOESPROC +epoxy_glNormal3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 37540 /* glNormal3xOES */); +} + +static PFNGLNORMAL3XVOESPROC +epoxy_glNormal3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 37554 /* glNormal3xvOES */); +} + +static PFNGLNORMALFORMATNVPROC +epoxy_glNormalFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 37569 /* glNormalFormatNV */); +} + +static PFNGLNORMALP3UIPROC +epoxy_glNormalP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37586 /* "glNormalP3ui" */, + 37586 /* "glNormalP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 37586 /* "glNormalP3ui" */, + providers, entrypoints); +} + +static PFNGLNORMALP3UIVPROC +epoxy_glNormalP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37599 /* "glNormalP3uiv" */, + 37599 /* "glNormalP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 37599 /* "glNormalP3uiv" */, + providers, entrypoints); +} + +static PFNGLNORMALPOINTERPROC +epoxy_glNormalPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37613 /* "glNormalPointer" */, + 37613 /* "glNormalPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 37613 /* "glNormalPointer" */, + providers, entrypoints); +} + +static PFNGLNORMALPOINTEREXTPROC +epoxy_glNormalPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 37629 /* glNormalPointerEXT */); +} + +static PFNGLNORMALPOINTERLISTIBMPROC +epoxy_glNormalPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 37648 /* glNormalPointerListIBM */); +} + +static PFNGLNORMALPOINTERVINTELPROC +epoxy_glNormalPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 37671 /* glNormalPointervINTEL */); +} + +static PFNGLNORMALSTREAM3BATIPROC +epoxy_glNormalStream3bATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37693 /* glNormalStream3bATI */); +} + +static PFNGLNORMALSTREAM3BVATIPROC +epoxy_glNormalStream3bvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37713 /* glNormalStream3bvATI */); +} + +static PFNGLNORMALSTREAM3DATIPROC +epoxy_glNormalStream3dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37734 /* glNormalStream3dATI */); +} + +static PFNGLNORMALSTREAM3DVATIPROC +epoxy_glNormalStream3dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37754 /* glNormalStream3dvATI */); +} + +static PFNGLNORMALSTREAM3FATIPROC +epoxy_glNormalStream3fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37775 /* glNormalStream3fATI */); +} + +static PFNGLNORMALSTREAM3FVATIPROC +epoxy_glNormalStream3fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37795 /* glNormalStream3fvATI */); +} + +static PFNGLNORMALSTREAM3IATIPROC +epoxy_glNormalStream3iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37816 /* glNormalStream3iATI */); +} + +static PFNGLNORMALSTREAM3IVATIPROC +epoxy_glNormalStream3ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37836 /* glNormalStream3ivATI */); +} + +static PFNGLNORMALSTREAM3SATIPROC +epoxy_glNormalStream3sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37857 /* glNormalStream3sATI */); +} + +static PFNGLNORMALSTREAM3SVATIPROC +epoxy_glNormalStream3svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 37877 /* glNormalStream3svATI */); +} + +static PFNGLOBJECTLABELPROC +epoxy_glObjectLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + 37912 /* "glObjectLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 37898 /* "glObjectLabel" */, + providers, entrypoints); +} + +static PFNGLOBJECTLABELKHRPROC +epoxy_glObjectLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37912 /* "glObjectLabelKHR" */, + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + 37898 /* "glObjectLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 37912 /* "glObjectLabelKHR" */, + providers, entrypoints); +} + +static PFNGLOBJECTPTRLABELPROC +epoxy_glObjectPtrLabel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + 37946 /* "glObjectPtrLabelKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 37929 /* "glObjectPtrLabel" */, + providers, entrypoints); +} + +static PFNGLOBJECTPTRLABELKHRPROC +epoxy_glObjectPtrLabelKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 37946 /* "glObjectPtrLabelKHR" */, + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + 37929 /* "glObjectPtrLabel" */, + }; + return gl_provider_resolver(entrypoint_strings + 37946 /* "glObjectPtrLabelKHR" */, + providers, entrypoints); +} + +static PFNGLOBJECTPURGEABLEAPPLEPROC +epoxy_glObjectPurgeableAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_object_purgeable, 37966 /* glObjectPurgeableAPPLE */); +} + +static PFNGLOBJECTUNPURGEABLEAPPLEPROC +epoxy_glObjectUnpurgeableAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_object_purgeable, 37989 /* glObjectUnpurgeableAPPLE */); +} + +static PFNGLORTHOPROC +epoxy_glOrtho_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38014 /* glOrtho */); +} + +static PFNGLORTHOFPROC +epoxy_glOrthof_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 38022 /* glOrthof */); +} + +static PFNGLORTHOFOESPROC +epoxy_glOrthofOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_single_precision, 38031 /* glOrthofOES */); +} + +static PFNGLORTHOXPROC +epoxy_glOrthox_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 38043 /* glOrthox */); +} + +static PFNGLORTHOXOESPROC +epoxy_glOrthoxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38052 /* glOrthoxOES */); +} + +static PFNGLPNTRIANGLESFATIPROC +epoxy_glPNTrianglesfATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_pn_triangles, 38064 /* glPNTrianglesfATI */); +} + +static PFNGLPNTRIANGLESIATIPROC +epoxy_glPNTrianglesiATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_pn_triangles, 38082 /* glPNTrianglesiATI */); +} + +static PFNGLPASSTEXCOORDATIPROC +epoxy_glPassTexCoordATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 38100 /* glPassTexCoordATI */); +} + +static PFNGLPASSTHROUGHPROC +epoxy_glPassThrough_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38118 /* glPassThrough */); +} + +static PFNGLPASSTHROUGHXOESPROC +epoxy_glPassThroughxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38132 /* glPassThroughxOES */); +} + +static PFNGLPATCHPARAMETERFVPROC +epoxy_glPatchParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38150 /* "glPatchParameterfv" */, + 38150 /* "glPatchParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 38150 /* "glPatchParameterfv" */, + providers, entrypoints); +} + +static PFNGLPATCHPARAMETERIPROC +epoxy_glPatchParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + OpenGL_ES_3_2, + GL_extension_GL_EXT_tessellation_shader, + GL_extension_GL_OES_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38187 /* "glPatchParameteriEXT" */, + 38208 /* "glPatchParameteriOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 38169 /* "glPatchParameteri" */, + providers, entrypoints); +} + +static PFNGLPATCHPARAMETERIEXTPROC +epoxy_glPatchParameteriEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_tessellation_shader, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + OpenGL_ES_3_2, + GL_extension_GL_OES_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38187 /* "glPatchParameteriEXT" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38208 /* "glPatchParameteriOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 38187 /* "glPatchParameteriEXT" */, + providers, entrypoints); +} + +static PFNGLPATCHPARAMETERIOESPROC +epoxy_glPatchParameteriOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_tessellation_shader, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_tessellation_shader, + OpenGL_ES_3_2, + GL_extension_GL_EXT_tessellation_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38208 /* "glPatchParameteriOES" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38169 /* "glPatchParameteri" */, + 38187 /* "glPatchParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 38208 /* "glPatchParameteriOES" */, + providers, entrypoints); +} + +static PFNGLPATHCOLORGENNVPROC +epoxy_glPathColorGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38229 /* glPathColorGenNV */); +} + +static PFNGLPATHCOMMANDSNVPROC +epoxy_glPathCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38246 /* glPathCommandsNV */); +} + +static PFNGLPATHCOORDSNVPROC +epoxy_glPathCoordsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38263 /* glPathCoordsNV */); +} + +static PFNGLPATHCOVERDEPTHFUNCNVPROC +epoxy_glPathCoverDepthFuncNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38278 /* glPathCoverDepthFuncNV */); +} + +static PFNGLPATHDASHARRAYNVPROC +epoxy_glPathDashArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38301 /* glPathDashArrayNV */); +} + +static PFNGLPATHFOGGENNVPROC +epoxy_glPathFogGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38319 /* glPathFogGenNV */); +} + +static PFNGLPATHGLYPHINDEXARRAYNVPROC +epoxy_glPathGlyphIndexArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38334 /* glPathGlyphIndexArrayNV */); +} + +static PFNGLPATHGLYPHINDEXRANGENVPROC +epoxy_glPathGlyphIndexRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38358 /* glPathGlyphIndexRangeNV */); +} + +static PFNGLPATHGLYPHRANGENVPROC +epoxy_glPathGlyphRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38382 /* glPathGlyphRangeNV */); +} + +static PFNGLPATHGLYPHSNVPROC +epoxy_glPathGlyphsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38401 /* glPathGlyphsNV */); +} + +static PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC +epoxy_glPathMemoryGlyphIndexArrayNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38416 /* glPathMemoryGlyphIndexArrayNV */); +} + +static PFNGLPATHPARAMETERFNVPROC +epoxy_glPathParameterfNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38446 /* glPathParameterfNV */); +} + +static PFNGLPATHPARAMETERFVNVPROC +epoxy_glPathParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38465 /* glPathParameterfvNV */); +} + +static PFNGLPATHPARAMETERINVPROC +epoxy_glPathParameteriNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38485 /* glPathParameteriNV */); +} + +static PFNGLPATHPARAMETERIVNVPROC +epoxy_glPathParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38504 /* glPathParameterivNV */); +} + +static PFNGLPATHSTENCILDEPTHOFFSETNVPROC +epoxy_glPathStencilDepthOffsetNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38524 /* glPathStencilDepthOffsetNV */); +} + +static PFNGLPATHSTENCILFUNCNVPROC +epoxy_glPathStencilFuncNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38551 /* glPathStencilFuncNV */); +} + +static PFNGLPATHSTRINGNVPROC +epoxy_glPathStringNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38571 /* glPathStringNV */); +} + +static PFNGLPATHSUBCOMMANDSNVPROC +epoxy_glPathSubCommandsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38586 /* glPathSubCommandsNV */); +} + +static PFNGLPATHSUBCOORDSNVPROC +epoxy_glPathSubCoordsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38606 /* glPathSubCoordsNV */); +} + +static PFNGLPATHTEXGENNVPROC +epoxy_glPathTexGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 38624 /* glPathTexGenNV */); +} + +static PFNGLPAUSETRANSFORMFEEDBACKPROC +epoxy_glPauseTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + 38664 /* "glPauseTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 38639 /* "glPauseTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLPAUSETRANSFORMFEEDBACKNVPROC +epoxy_glPauseTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38664 /* "glPauseTransformFeedbackNV" */, + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + 38639 /* "glPauseTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 38664 /* "glPauseTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLPIXELDATARANGENVPROC +epoxy_glPixelDataRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_pixel_data_range, 38691 /* glPixelDataRangeNV */); +} + +static PFNGLPIXELMAPFVPROC +epoxy_glPixelMapfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38710 /* glPixelMapfv */); +} + +static PFNGLPIXELMAPUIVPROC +epoxy_glPixelMapuiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38723 /* glPixelMapuiv */); +} + +static PFNGLPIXELMAPUSVPROC +epoxy_glPixelMapusv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38737 /* glPixelMapusv */); +} + +static PFNGLPIXELMAPXPROC +epoxy_glPixelMapx_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38751 /* glPixelMapx */); +} + +static PFNGLPIXELSTOREFPROC +epoxy_glPixelStoref_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38763 /* glPixelStoref */); +} + +static PFNGLPIXELSTOREIPROC +epoxy_glPixelStorei_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 38777 /* "glPixelStorei" */, + 38777 /* "glPixelStorei" */, + 38777 /* "glPixelStorei" */, + }; + return gl_provider_resolver(entrypoint_strings + 38777 /* "glPixelStorei" */, + providers, entrypoints); +} + +static PFNGLPIXELSTOREXPROC +epoxy_glPixelStorex_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38791 /* glPixelStorex */); +} + +static PFNGLPIXELTEXGENPARAMETERFSGISPROC +epoxy_glPixelTexGenParameterfSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38805 /* glPixelTexGenParameterfSGIS */); +} + +static PFNGLPIXELTEXGENPARAMETERFVSGISPROC +epoxy_glPixelTexGenParameterfvSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38833 /* glPixelTexGenParameterfvSGIS */); +} + +static PFNGLPIXELTEXGENPARAMETERISGISPROC +epoxy_glPixelTexGenParameteriSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38862 /* glPixelTexGenParameteriSGIS */); +} + +static PFNGLPIXELTEXGENPARAMETERIVSGISPROC +epoxy_glPixelTexGenParameterivSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_pixel_texture, 38890 /* glPixelTexGenParameterivSGIS */); +} + +static PFNGLPIXELTEXGENSGIXPROC +epoxy_glPixelTexGenSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_pixel_texture, 38919 /* glPixelTexGenSGIX */); +} + +static PFNGLPIXELTRANSFERFPROC +epoxy_glPixelTransferf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38937 /* glPixelTransferf */); +} + +static PFNGLPIXELTRANSFERIPROC +epoxy_glPixelTransferi_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 38954 /* glPixelTransferi */); +} + +static PFNGLPIXELTRANSFERXOESPROC +epoxy_glPixelTransferxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 38971 /* glPixelTransferxOES */); +} + +static PFNGLPIXELTRANSFORMPARAMETERFEXTPROC +epoxy_glPixelTransformParameterfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 38991 /* glPixelTransformParameterfEXT */); +} + +static PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC +epoxy_glPixelTransformParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 39021 /* glPixelTransformParameterfvEXT */); +} + +static PFNGLPIXELTRANSFORMPARAMETERIEXTPROC +epoxy_glPixelTransformParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 39052 /* glPixelTransformParameteriEXT */); +} + +static PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC +epoxy_glPixelTransformParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_pixel_transform, 39082 /* glPixelTransformParameterivEXT */); +} + +static PFNGLPIXELZOOMPROC +epoxy_glPixelZoom_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39113 /* glPixelZoom */); +} + +static PFNGLPIXELZOOMXOESPROC +epoxy_glPixelZoomxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39125 /* glPixelZoomxOES */); +} + +static PFNGLPOINTALONGPATHNVPROC +epoxy_glPointAlongPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 39141 /* glPointAlongPathNV */); +} + +static PFNGLPOINTPARAMETERFPROC +epoxy_glPointParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39178 /* "glPointParameterfARB" */, + 39199 /* "glPointParameterfEXT" */, + 39220 /* "glPointParameterfSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39160 /* "glPointParameterf" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFARBPROC +epoxy_glPointParameterfARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39178 /* "glPointParameterfARB" */, + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39199 /* "glPointParameterfEXT" */, + 39220 /* "glPointParameterfSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39178 /* "glPointParameterfARB" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFEXTPROC +epoxy_glPointParameterfEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39199 /* "glPointParameterfEXT" */, + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39178 /* "glPointParameterfARB" */, + 39220 /* "glPointParameterfSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39199 /* "glPointParameterfEXT" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFSGISPROC +epoxy_glPointParameterfSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39220 /* "glPointParameterfSGIS" */, + 39160 /* "glPointParameterf" */, + 39160 /* "glPointParameterf" */, + 39178 /* "glPointParameterfARB" */, + 39199 /* "glPointParameterfEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 39220 /* "glPointParameterfSGIS" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVPROC +epoxy_glPointParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39261 /* "glPointParameterfvARB" */, + 39283 /* "glPointParameterfvEXT" */, + 39305 /* "glPointParameterfvSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39242 /* "glPointParameterfv" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVARBPROC +epoxy_glPointParameterfvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_EXT_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39261 /* "glPointParameterfvARB" */, + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39283 /* "glPointParameterfvEXT" */, + 39305 /* "glPointParameterfvSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39261 /* "glPointParameterfvARB" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVEXTPROC +epoxy_glPointParameterfvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_SGIS_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39283 /* "glPointParameterfvEXT" */, + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39261 /* "glPointParameterfvARB" */, + 39305 /* "glPointParameterfvSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 39283 /* "glPointParameterfvEXT" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERFVSGISPROC +epoxy_glPointParameterfvSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_point_parameters, + Desktop_OpenGL_1_4, + OpenGL_ES_1_0, + GL_extension_GL_ARB_point_parameters, + GL_extension_GL_EXT_point_parameters, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39305 /* "glPointParameterfvSGIS" */, + 39242 /* "glPointParameterfv" */, + 39242 /* "glPointParameterfv" */, + 39261 /* "glPointParameterfvARB" */, + 39283 /* "glPointParameterfvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 39305 /* "glPointParameterfvSGIS" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERIPROC +epoxy_glPointParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_NV_point_sprite, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39328 /* "glPointParameteri" */, + 39346 /* "glPointParameteriNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 39328 /* "glPointParameteri" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERINVPROC +epoxy_glPointParameteriNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_point_sprite, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39346 /* "glPointParameteriNV" */, + 39328 /* "glPointParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 39346 /* "glPointParameteriNV" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERIVPROC +epoxy_glPointParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_NV_point_sprite, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39366 /* "glPointParameteriv" */, + 39385 /* "glPointParameterivNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 39366 /* "glPointParameteriv" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERIVNVPROC +epoxy_glPointParameterivNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_point_sprite, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39385 /* "glPointParameterivNV" */, + 39366 /* "glPointParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 39385 /* "glPointParameterivNV" */, + providers, entrypoints); +} + +static PFNGLPOINTPARAMETERXPROC +epoxy_glPointParameterx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39406 /* glPointParameterx */); +} + +static PFNGLPOINTPARAMETERXOESPROC +epoxy_glPointParameterxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39424 /* glPointParameterxOES */); +} + +static PFNGLPOINTPARAMETERXVPROC +epoxy_glPointParameterxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39445 /* glPointParameterxv */); +} + +static PFNGLPOINTPARAMETERXVOESPROC +epoxy_glPointParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39464 /* glPointParameterxvOES */); +} + +static PFNGLPOINTSIZEPROC +epoxy_glPointSize_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39486 /* "glPointSize" */, + 39486 /* "glPointSize" */, + }; + return gl_provider_resolver(entrypoint_strings + 39486 /* "glPointSize" */, + providers, entrypoints); +} + +static PFNGLPOINTSIZEPOINTEROESPROC +epoxy_glPointSizePointerOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_point_size_array, 39498 /* glPointSizePointerOES */); +} + +static PFNGLPOINTSIZEXPROC +epoxy_glPointSizex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39520 /* glPointSizex */); +} + +static PFNGLPOINTSIZEXOESPROC +epoxy_glPointSizexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39533 /* glPointSizexOES */); +} + +static PFNGLPOLLASYNCSGIXPROC +epoxy_glPollAsyncSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_async, 39549 /* glPollAsyncSGIX */); +} + +static PFNGLPOLLINSTRUMENTSSGIXPROC +epoxy_glPollInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 39565 /* glPollInstrumentsSGIX */); +} + +static PFNGLPOLYGONMODEPROC +epoxy_glPolygonMode_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + GL_extension_GL_NV_polygon_mode, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39587 /* "glPolygonMode" */, + 39601 /* "glPolygonModeNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 39587 /* "glPolygonMode" */, + providers, entrypoints); +} + +static PFNGLPOLYGONMODENVPROC +epoxy_glPolygonModeNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_polygon_mode, + Desktop_OpenGL_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39601 /* "glPolygonModeNV" */, + 39587 /* "glPolygonMode" */, + }; + return gl_provider_resolver(entrypoint_strings + 39601 /* "glPolygonModeNV" */, + providers, entrypoints); +} + +static PFNGLPOLYGONOFFSETPROC +epoxy_glPolygonOffset_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39617 /* "glPolygonOffset" */, + 39617 /* "glPolygonOffset" */, + 39617 /* "glPolygonOffset" */, + }; + return gl_provider_resolver(entrypoint_strings + 39617 /* "glPolygonOffset" */, + providers, entrypoints); +} + +static PFNGLPOLYGONOFFSETCLAMPEXTPROC +epoxy_glPolygonOffsetClampEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_polygon_offset_clamp, 39633 /* glPolygonOffsetClampEXT */); +} + +static PFNGLPOLYGONOFFSETEXTPROC +epoxy_glPolygonOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_polygon_offset, 39657 /* glPolygonOffsetEXT */); +} + +static PFNGLPOLYGONOFFSETXPROC +epoxy_glPolygonOffsetx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 39676 /* glPolygonOffsetx */); +} + +static PFNGLPOLYGONOFFSETXOESPROC +epoxy_glPolygonOffsetxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 39693 /* glPolygonOffsetxOES */); +} + +static PFNGLPOLYGONSTIPPLEPROC +epoxy_glPolygonStipple_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39713 /* glPolygonStipple */); +} + +static PFNGLPOPATTRIBPROC +epoxy_glPopAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39730 /* glPopAttrib */); +} + +static PFNGLPOPCLIENTATTRIBPROC +epoxy_glPopClientAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 39742 /* glPopClientAttrib */); +} + +static PFNGLPOPDEBUGGROUPPROC +epoxy_glPopDebugGroup_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + 39776 /* "glPopDebugGroupKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 39760 /* "glPopDebugGroup" */, + providers, entrypoints); +} + +static PFNGLPOPDEBUGGROUPKHRPROC +epoxy_glPopDebugGroupKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39776 /* "glPopDebugGroupKHR" */, + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + 39760 /* "glPopDebugGroup" */, + }; + return gl_provider_resolver(entrypoint_strings + 39776 /* "glPopDebugGroupKHR" */, + providers, entrypoints); +} + +static PFNGLPOPGROUPMARKEREXTPROC +epoxy_glPopGroupMarkerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_marker, 39795 /* glPopGroupMarkerEXT */); +} + +static PFNGLPOPMATRIXPROC +epoxy_glPopMatrix_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39815 /* "glPopMatrix" */, + 39815 /* "glPopMatrix" */, + }; + return gl_provider_resolver(entrypoint_strings + 39815 /* "glPopMatrix" */, + providers, entrypoints); +} + +static PFNGLPOPNAMEPROC +epoxy_glPopName_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 39827 /* glPopName */); +} + +static PFNGLPRESENTFRAMEDUALFILLNVPROC +epoxy_glPresentFrameDualFillNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 39837 /* glPresentFrameDualFillNV */); +} + +static PFNGLPRESENTFRAMEKEYEDNVPROC +epoxy_glPresentFrameKeyedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_present_video, 39862 /* glPresentFrameKeyedNV */); +} + +static PFNGLPRIMITIVEBOUNDINGBOXPROC +epoxy_glPrimitiveBoundingBox_resolver(void) +{ + static const enum gl_provider providers[] = { + OpenGL_ES_3_2, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_EXT_primitive_bounding_box, + GL_extension_GL_OES_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39884 /* "glPrimitiveBoundingBox" */, + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39933 /* "glPrimitiveBoundingBoxEXT" */, + 39959 /* "glPrimitiveBoundingBoxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 39884 /* "glPrimitiveBoundingBox" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVEBOUNDINGBOXARBPROC +epoxy_glPrimitiveBoundingBoxARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_ES3_2_compatibility, + OpenGL_ES_3_2, + GL_extension_GL_EXT_primitive_bounding_box, + GL_extension_GL_OES_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39884 /* "glPrimitiveBoundingBox" */, + 39933 /* "glPrimitiveBoundingBoxEXT" */, + 39959 /* "glPrimitiveBoundingBoxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 39907 /* "glPrimitiveBoundingBoxARB" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVEBOUNDINGBOXEXTPROC +epoxy_glPrimitiveBoundingBoxEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_primitive_bounding_box, + OpenGL_ES_3_2, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_OES_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39933 /* "glPrimitiveBoundingBoxEXT" */, + 39884 /* "glPrimitiveBoundingBox" */, + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39959 /* "glPrimitiveBoundingBoxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 39933 /* "glPrimitiveBoundingBoxEXT" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVEBOUNDINGBOXOESPROC +epoxy_glPrimitiveBoundingBoxOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_primitive_bounding_box, + OpenGL_ES_3_2, + GL_extension_GL_ARB_ES3_2_compatibility, + GL_extension_GL_EXT_primitive_bounding_box, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 39959 /* "glPrimitiveBoundingBoxOES" */, + 39884 /* "glPrimitiveBoundingBox" */, + 39907 /* "glPrimitiveBoundingBoxARB" */, + 39933 /* "glPrimitiveBoundingBoxEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 39959 /* "glPrimitiveBoundingBoxOES" */, + providers, entrypoints); +} + +static PFNGLPRIMITIVERESTARTINDEXPROC +epoxy_glPrimitiveRestartIndex_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_3_1, 39985 /* glPrimitiveRestartIndex */); +} + +static PFNGLPRIMITIVERESTARTINDEXNVPROC +epoxy_glPrimitiveRestartIndexNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_primitive_restart, 40009 /* glPrimitiveRestartIndexNV */); +} + +static PFNGLPRIMITIVERESTARTNVPROC +epoxy_glPrimitiveRestartNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_primitive_restart, 40035 /* glPrimitiveRestartNV */); +} + +static PFNGLPRIORITIZETEXTURESPROC +epoxy_glPrioritizeTextures_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_texture_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40056 /* "glPrioritizeTextures" */, + 40077 /* "glPrioritizeTexturesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 40056 /* "glPrioritizeTextures" */, + providers, entrypoints); +} + +static PFNGLPRIORITIZETEXTURESEXTPROC +epoxy_glPrioritizeTexturesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_object, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40077 /* "glPrioritizeTexturesEXT" */, + 40056 /* "glPrioritizeTextures" */, + }; + return gl_provider_resolver(entrypoint_strings + 40077 /* "glPrioritizeTexturesEXT" */, + providers, entrypoints); +} + +static PFNGLPRIORITIZETEXTURESXOESPROC +epoxy_glPrioritizeTexturesxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 40101 /* glPrioritizeTexturesxOES */); +} + +static PFNGLPROGRAMBINARYPROC +epoxy_glProgramBinary_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_OES_get_program_binary, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + 40142 /* "glProgramBinaryOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 40126 /* "glProgramBinary" */, + providers, entrypoints); +} + +static PFNGLPROGRAMBINARYOESPROC +epoxy_glProgramBinaryOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_get_program_binary, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40142 /* "glProgramBinaryOES" */, + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + 40126 /* "glProgramBinary" */, + }; + return gl_provider_resolver(entrypoint_strings + 40142 /* "glProgramBinaryOES" */, + providers, entrypoints); +} + +static PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC +epoxy_glProgramBufferParametersIivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_parameter_buffer_object, 40161 /* glProgramBufferParametersIivNV */); +} + +static PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC +epoxy_glProgramBufferParametersIuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_parameter_buffer_object, 40192 /* glProgramBufferParametersIuivNV */); +} + +static PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC +epoxy_glProgramBufferParametersfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_parameter_buffer_object, 40224 /* glProgramBufferParametersfvNV */); +} + +static PFNGLPROGRAMENVPARAMETER4DARBPROC +epoxy_glProgramEnvParameter4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40254 /* "glProgramEnvParameter4dARB" */, + 40254 /* "glProgramEnvParameter4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40254 /* "glProgramEnvParameter4dARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETER4DVARBPROC +epoxy_glProgramEnvParameter4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40281 /* "glProgramEnvParameter4dvARB" */, + 40281 /* "glProgramEnvParameter4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40281 /* "glProgramEnvParameter4dvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETER4FARBPROC +epoxy_glProgramEnvParameter4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40309 /* "glProgramEnvParameter4fARB" */, + 40309 /* "glProgramEnvParameter4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40309 /* "glProgramEnvParameter4fARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETER4FVARBPROC +epoxy_glProgramEnvParameter4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40336 /* "glProgramEnvParameter4fvARB" */, + 40336 /* "glProgramEnvParameter4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40336 /* "glProgramEnvParameter4fvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMENVPARAMETERI4INVPROC +epoxy_glProgramEnvParameterI4iNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40364 /* glProgramEnvParameterI4iNV */); +} + +static PFNGLPROGRAMENVPARAMETERI4IVNVPROC +epoxy_glProgramEnvParameterI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40391 /* glProgramEnvParameterI4ivNV */); +} + +static PFNGLPROGRAMENVPARAMETERI4UINVPROC +epoxy_glProgramEnvParameterI4uiNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40419 /* glProgramEnvParameterI4uiNV */); +} + +static PFNGLPROGRAMENVPARAMETERI4UIVNVPROC +epoxy_glProgramEnvParameterI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40447 /* glProgramEnvParameterI4uivNV */); +} + +static PFNGLPROGRAMENVPARAMETERS4FVEXTPROC +epoxy_glProgramEnvParameters4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_gpu_program_parameters, 40476 /* glProgramEnvParameters4fvEXT */); +} + +static PFNGLPROGRAMENVPARAMETERSI4IVNVPROC +epoxy_glProgramEnvParametersI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40505 /* glProgramEnvParametersI4ivNV */); +} + +static PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC +epoxy_glProgramEnvParametersI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40534 /* glProgramEnvParametersI4uivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETER4DARBPROC +epoxy_glProgramLocalParameter4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40564 /* "glProgramLocalParameter4dARB" */, + 40564 /* "glProgramLocalParameter4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40564 /* "glProgramLocalParameter4dARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETER4DVARBPROC +epoxy_glProgramLocalParameter4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40593 /* "glProgramLocalParameter4dvARB" */, + 40593 /* "glProgramLocalParameter4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40593 /* "glProgramLocalParameter4dvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETER4FARBPROC +epoxy_glProgramLocalParameter4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40623 /* "glProgramLocalParameter4fARB" */, + 40623 /* "glProgramLocalParameter4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40623 /* "glProgramLocalParameter4fARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETER4FVARBPROC +epoxy_glProgramLocalParameter4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 40652 /* "glProgramLocalParameter4fvARB" */, + 40652 /* "glProgramLocalParameter4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 40652 /* "glProgramLocalParameter4fvARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMLOCALPARAMETERI4INVPROC +epoxy_glProgramLocalParameterI4iNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40682 /* glProgramLocalParameterI4iNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC +epoxy_glProgramLocalParameterI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40711 /* glProgramLocalParameterI4ivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERI4UINVPROC +epoxy_glProgramLocalParameterI4uiNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40741 /* glProgramLocalParameterI4uiNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC +epoxy_glProgramLocalParameterI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40771 /* glProgramLocalParameterI4uivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC +epoxy_glProgramLocalParameters4fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_gpu_program_parameters, 40802 /* glProgramLocalParameters4fvEXT */); +} + +static PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC +epoxy_glProgramLocalParametersI4ivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40833 /* glProgramLocalParametersI4ivNV */); +} + +static PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC +epoxy_glProgramLocalParametersI4uivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program4, 40864 /* glProgramLocalParametersI4uivNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4DNVPROC +epoxy_glProgramNamedParameter4dNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40896 /* glProgramNamedParameter4dNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC +epoxy_glProgramNamedParameter4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40924 /* glProgramNamedParameter4dvNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4FNVPROC +epoxy_glProgramNamedParameter4fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40953 /* glProgramNamedParameter4fNV */); +} + +static PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC +epoxy_glProgramNamedParameter4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fragment_program, 40981 /* glProgramNamedParameter4fvNV */); +} + +static PFNGLPROGRAMPARAMETER4DNVPROC +epoxy_glProgramParameter4dNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41010 /* glProgramParameter4dNV */); +} + +static PFNGLPROGRAMPARAMETER4DVNVPROC +epoxy_glProgramParameter4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41033 /* glProgramParameter4dvNV */); +} + +static PFNGLPROGRAMPARAMETER4FNVPROC +epoxy_glProgramParameter4fNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41057 /* glProgramParameter4fNV */); +} + +static PFNGLPROGRAMPARAMETER4FVNVPROC +epoxy_glProgramParameter4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41080 /* glProgramParameter4fvNV */); +} + +static PFNGLPROGRAMPARAMETERIPROC +epoxy_glProgramParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41124 /* "glProgramParameteriARB" */, + 41147 /* "glProgramParameteriEXT" */, + 41147 /* "glProgramParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41104 /* "glProgramParameteri" */, + providers, entrypoints); +} + +static PFNGLPROGRAMPARAMETERIARBPROC +epoxy_glProgramParameteriARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_geometry_shader4, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41124 /* "glProgramParameteriARB" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41147 /* "glProgramParameteriEXT" */, + 41147 /* "glProgramParameteriEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41124 /* "glProgramParameteriARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMPARAMETERIEXTPROC +epoxy_glProgramParameteriEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_geometry_shader4, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_get_program_binary, + OpenGL_ES_3_0, + GL_extension_GL_ARB_geometry_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41147 /* "glProgramParameteriEXT" */, + 41147 /* "glProgramParameteriEXT" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41104 /* "glProgramParameteri" */, + 41124 /* "glProgramParameteriARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 41147 /* "glProgramParameteriEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMPARAMETERS4DVNVPROC +epoxy_glProgramParameters4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41170 /* glProgramParameters4dvNV */); +} + +static PFNGLPROGRAMPARAMETERS4FVNVPROC +epoxy_glProgramParameters4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 41195 /* glProgramParameters4fvNV */); +} + +static PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC +epoxy_glProgramPathFragmentInputGenNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 41220 /* glProgramPathFragmentInputGenNV */); +} + +static PFNGLPROGRAMSTRINGARBPROC +epoxy_glProgramStringARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_fragment_program, + GL_extension_GL_ARB_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41252 /* "glProgramStringARB" */, + 41252 /* "glProgramStringARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 41252 /* "glProgramStringARB" */, + providers, entrypoints); +} + +static PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC +epoxy_glProgramSubroutineParametersuivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_gpu_program5, 41271 /* glProgramSubroutineParametersuivNV */); +} + +static PFNGLPROGRAMUNIFORM1DPROC +epoxy_glProgramUniform1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41306 /* "glProgramUniform1d" */, + 41306 /* "glProgramUniform1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 41306 /* "glProgramUniform1d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1DEXTPROC +epoxy_glProgramUniform1dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41325 /* glProgramUniform1dEXT */); +} + +static PFNGLPROGRAMUNIFORM1DVPROC +epoxy_glProgramUniform1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41347 /* "glProgramUniform1dv" */, + 41347 /* "glProgramUniform1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41347 /* "glProgramUniform1dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1DVEXTPROC +epoxy_glProgramUniform1dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41367 /* glProgramUniform1dvEXT */); +} + +static PFNGLPROGRAMUNIFORM1FPROC +epoxy_glProgramUniform1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + 41409 /* "glProgramUniform1fEXT" */, + 41409 /* "glProgramUniform1fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41390 /* "glProgramUniform1f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1FEXTPROC +epoxy_glProgramUniform1fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41409 /* "glProgramUniform1fEXT" */, + 41409 /* "glProgramUniform1fEXT" */, + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + 41390 /* "glProgramUniform1f" */, + }; + return gl_provider_resolver(entrypoint_strings + 41409 /* "glProgramUniform1fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1FVPROC +epoxy_glProgramUniform1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + 41451 /* "glProgramUniform1fvEXT" */, + 41451 /* "glProgramUniform1fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41431 /* "glProgramUniform1fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1FVEXTPROC +epoxy_glProgramUniform1fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41451 /* "glProgramUniform1fvEXT" */, + 41451 /* "glProgramUniform1fvEXT" */, + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + 41431 /* "glProgramUniform1fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41451 /* "glProgramUniform1fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IPROC +epoxy_glProgramUniform1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + 41589 /* "glProgramUniform1iEXT" */, + 41589 /* "glProgramUniform1iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41474 /* "glProgramUniform1i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1I64ARBPROC +epoxy_glProgramUniform1i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41493 /* glProgramUniform1i64ARB */); +} + +static PFNGLPROGRAMUNIFORM1I64NVPROC +epoxy_glProgramUniform1i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41517 /* "glProgramUniform1i64NV" */, + 41517 /* "glProgramUniform1i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41517 /* "glProgramUniform1i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1I64VARBPROC +epoxy_glProgramUniform1i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41540 /* glProgramUniform1i64vARB */); +} + +static PFNGLPROGRAMUNIFORM1I64VNVPROC +epoxy_glProgramUniform1i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41565 /* "glProgramUniform1i64vNV" */, + 41565 /* "glProgramUniform1i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41565 /* "glProgramUniform1i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IEXTPROC +epoxy_glProgramUniform1iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41589 /* "glProgramUniform1iEXT" */, + 41589 /* "glProgramUniform1iEXT" */, + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + 41474 /* "glProgramUniform1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 41589 /* "glProgramUniform1iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IVPROC +epoxy_glProgramUniform1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + 41631 /* "glProgramUniform1ivEXT" */, + 41631 /* "glProgramUniform1ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41611 /* "glProgramUniform1iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1IVEXTPROC +epoxy_glProgramUniform1ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41631 /* "glProgramUniform1ivEXT" */, + 41631 /* "glProgramUniform1ivEXT" */, + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + 41611 /* "glProgramUniform1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41631 /* "glProgramUniform1ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIPROC +epoxy_glProgramUniform1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + 41774 /* "glProgramUniform1uiEXT" */, + 41774 /* "glProgramUniform1uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41654 /* "glProgramUniform1ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UI64ARBPROC +epoxy_glProgramUniform1ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41674 /* glProgramUniform1ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM1UI64NVPROC +epoxy_glProgramUniform1ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41699 /* "glProgramUniform1ui64NV" */, + 41699 /* "glProgramUniform1ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41699 /* "glProgramUniform1ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UI64VARBPROC +epoxy_glProgramUniform1ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 41723 /* glProgramUniform1ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM1UI64VNVPROC +epoxy_glProgramUniform1ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41749 /* "glProgramUniform1ui64vNV" */, + 41749 /* "glProgramUniform1ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 41749 /* "glProgramUniform1ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIEXTPROC +epoxy_glProgramUniform1uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41774 /* "glProgramUniform1uiEXT" */, + 41774 /* "glProgramUniform1uiEXT" */, + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + 41654 /* "glProgramUniform1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 41774 /* "glProgramUniform1uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIVPROC +epoxy_glProgramUniform1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + 41818 /* "glProgramUniform1uivEXT" */, + 41818 /* "glProgramUniform1uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41797 /* "glProgramUniform1uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM1UIVEXTPROC +epoxy_glProgramUniform1uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41818 /* "glProgramUniform1uivEXT" */, + 41818 /* "glProgramUniform1uivEXT" */, + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + 41797 /* "glProgramUniform1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41818 /* "glProgramUniform1uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2DPROC +epoxy_glProgramUniform2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41842 /* "glProgramUniform2d" */, + 41842 /* "glProgramUniform2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 41842 /* "glProgramUniform2d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2DEXTPROC +epoxy_glProgramUniform2dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41861 /* glProgramUniform2dEXT */); +} + +static PFNGLPROGRAMUNIFORM2DVPROC +epoxy_glProgramUniform2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41883 /* "glProgramUniform2dv" */, + 41883 /* "glProgramUniform2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41883 /* "glProgramUniform2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2DVEXTPROC +epoxy_glProgramUniform2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 41903 /* glProgramUniform2dvEXT */); +} + +static PFNGLPROGRAMUNIFORM2FPROC +epoxy_glProgramUniform2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + 41945 /* "glProgramUniform2fEXT" */, + 41945 /* "glProgramUniform2fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41926 /* "glProgramUniform2f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2FEXTPROC +epoxy_glProgramUniform2fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41945 /* "glProgramUniform2fEXT" */, + 41945 /* "glProgramUniform2fEXT" */, + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + 41926 /* "glProgramUniform2f" */, + }; + return gl_provider_resolver(entrypoint_strings + 41945 /* "glProgramUniform2fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2FVPROC +epoxy_glProgramUniform2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + 41987 /* "glProgramUniform2fvEXT" */, + 41987 /* "glProgramUniform2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 41967 /* "glProgramUniform2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2FVEXTPROC +epoxy_glProgramUniform2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 41987 /* "glProgramUniform2fvEXT" */, + 41987 /* "glProgramUniform2fvEXT" */, + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + 41967 /* "glProgramUniform2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 41987 /* "glProgramUniform2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IPROC +epoxy_glProgramUniform2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + 42125 /* "glProgramUniform2iEXT" */, + 42125 /* "glProgramUniform2iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42010 /* "glProgramUniform2i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2I64ARBPROC +epoxy_glProgramUniform2i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42029 /* glProgramUniform2i64ARB */); +} + +static PFNGLPROGRAMUNIFORM2I64NVPROC +epoxy_glProgramUniform2i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42053 /* "glProgramUniform2i64NV" */, + 42053 /* "glProgramUniform2i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42053 /* "glProgramUniform2i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2I64VARBPROC +epoxy_glProgramUniform2i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42076 /* glProgramUniform2i64vARB */); +} + +static PFNGLPROGRAMUNIFORM2I64VNVPROC +epoxy_glProgramUniform2i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42101 /* "glProgramUniform2i64vNV" */, + 42101 /* "glProgramUniform2i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42101 /* "glProgramUniform2i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IEXTPROC +epoxy_glProgramUniform2iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42125 /* "glProgramUniform2iEXT" */, + 42125 /* "glProgramUniform2iEXT" */, + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + 42010 /* "glProgramUniform2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 42125 /* "glProgramUniform2iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IVPROC +epoxy_glProgramUniform2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + 42167 /* "glProgramUniform2ivEXT" */, + 42167 /* "glProgramUniform2ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42147 /* "glProgramUniform2iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2IVEXTPROC +epoxy_glProgramUniform2ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42167 /* "glProgramUniform2ivEXT" */, + 42167 /* "glProgramUniform2ivEXT" */, + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + 42147 /* "glProgramUniform2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42167 /* "glProgramUniform2ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIPROC +epoxy_glProgramUniform2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + 42310 /* "glProgramUniform2uiEXT" */, + 42310 /* "glProgramUniform2uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42190 /* "glProgramUniform2ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UI64ARBPROC +epoxy_glProgramUniform2ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42210 /* glProgramUniform2ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM2UI64NVPROC +epoxy_glProgramUniform2ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42235 /* "glProgramUniform2ui64NV" */, + 42235 /* "glProgramUniform2ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42235 /* "glProgramUniform2ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UI64VARBPROC +epoxy_glProgramUniform2ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42259 /* glProgramUniform2ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM2UI64VNVPROC +epoxy_glProgramUniform2ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42285 /* "glProgramUniform2ui64vNV" */, + 42285 /* "glProgramUniform2ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42285 /* "glProgramUniform2ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIEXTPROC +epoxy_glProgramUniform2uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42310 /* "glProgramUniform2uiEXT" */, + 42310 /* "glProgramUniform2uiEXT" */, + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + 42190 /* "glProgramUniform2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 42310 /* "glProgramUniform2uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIVPROC +epoxy_glProgramUniform2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + 42354 /* "glProgramUniform2uivEXT" */, + 42354 /* "glProgramUniform2uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42333 /* "glProgramUniform2uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM2UIVEXTPROC +epoxy_glProgramUniform2uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42354 /* "glProgramUniform2uivEXT" */, + 42354 /* "glProgramUniform2uivEXT" */, + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + 42333 /* "glProgramUniform2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42354 /* "glProgramUniform2uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3DPROC +epoxy_glProgramUniform3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42378 /* "glProgramUniform3d" */, + 42378 /* "glProgramUniform3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 42378 /* "glProgramUniform3d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3DEXTPROC +epoxy_glProgramUniform3dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42397 /* glProgramUniform3dEXT */); +} + +static PFNGLPROGRAMUNIFORM3DVPROC +epoxy_glProgramUniform3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42419 /* "glProgramUniform3dv" */, + 42419 /* "glProgramUniform3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42419 /* "glProgramUniform3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3DVEXTPROC +epoxy_glProgramUniform3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42439 /* glProgramUniform3dvEXT */); +} + +static PFNGLPROGRAMUNIFORM3FPROC +epoxy_glProgramUniform3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + 42481 /* "glProgramUniform3fEXT" */, + 42481 /* "glProgramUniform3fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42462 /* "glProgramUniform3f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3FEXTPROC +epoxy_glProgramUniform3fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42481 /* "glProgramUniform3fEXT" */, + 42481 /* "glProgramUniform3fEXT" */, + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + 42462 /* "glProgramUniform3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 42481 /* "glProgramUniform3fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3FVPROC +epoxy_glProgramUniform3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + 42523 /* "glProgramUniform3fvEXT" */, + 42523 /* "glProgramUniform3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42503 /* "glProgramUniform3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3FVEXTPROC +epoxy_glProgramUniform3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42523 /* "glProgramUniform3fvEXT" */, + 42523 /* "glProgramUniform3fvEXT" */, + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + 42503 /* "glProgramUniform3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42523 /* "glProgramUniform3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IPROC +epoxy_glProgramUniform3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + 42661 /* "glProgramUniform3iEXT" */, + 42661 /* "glProgramUniform3iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42546 /* "glProgramUniform3i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3I64ARBPROC +epoxy_glProgramUniform3i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42565 /* glProgramUniform3i64ARB */); +} + +static PFNGLPROGRAMUNIFORM3I64NVPROC +epoxy_glProgramUniform3i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42589 /* "glProgramUniform3i64NV" */, + 42589 /* "glProgramUniform3i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42589 /* "glProgramUniform3i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3I64VARBPROC +epoxy_glProgramUniform3i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42612 /* glProgramUniform3i64vARB */); +} + +static PFNGLPROGRAMUNIFORM3I64VNVPROC +epoxy_glProgramUniform3i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42637 /* "glProgramUniform3i64vNV" */, + 42637 /* "glProgramUniform3i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42637 /* "glProgramUniform3i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IEXTPROC +epoxy_glProgramUniform3iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42661 /* "glProgramUniform3iEXT" */, + 42661 /* "glProgramUniform3iEXT" */, + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + 42546 /* "glProgramUniform3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 42661 /* "glProgramUniform3iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IVPROC +epoxy_glProgramUniform3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + 42703 /* "glProgramUniform3ivEXT" */, + 42703 /* "glProgramUniform3ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42683 /* "glProgramUniform3iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3IVEXTPROC +epoxy_glProgramUniform3ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42703 /* "glProgramUniform3ivEXT" */, + 42703 /* "glProgramUniform3ivEXT" */, + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + 42683 /* "glProgramUniform3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42703 /* "glProgramUniform3ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIPROC +epoxy_glProgramUniform3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + 42846 /* "glProgramUniform3uiEXT" */, + 42846 /* "glProgramUniform3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42726 /* "glProgramUniform3ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UI64ARBPROC +epoxy_glProgramUniform3ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42746 /* glProgramUniform3ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM3UI64NVPROC +epoxy_glProgramUniform3ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42771 /* "glProgramUniform3ui64NV" */, + 42771 /* "glProgramUniform3ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42771 /* "glProgramUniform3ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UI64VARBPROC +epoxy_glProgramUniform3ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 42795 /* glProgramUniform3ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM3UI64VNVPROC +epoxy_glProgramUniform3ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42821 /* "glProgramUniform3ui64vNV" */, + 42821 /* "glProgramUniform3ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 42821 /* "glProgramUniform3ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIEXTPROC +epoxy_glProgramUniform3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42846 /* "glProgramUniform3uiEXT" */, + 42846 /* "glProgramUniform3uiEXT" */, + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + 42726 /* "glProgramUniform3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 42846 /* "glProgramUniform3uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIVPROC +epoxy_glProgramUniform3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + 42890 /* "glProgramUniform3uivEXT" */, + 42890 /* "glProgramUniform3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42869 /* "glProgramUniform3uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM3UIVEXTPROC +epoxy_glProgramUniform3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42890 /* "glProgramUniform3uivEXT" */, + 42890 /* "glProgramUniform3uivEXT" */, + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + 42869 /* "glProgramUniform3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42890 /* "glProgramUniform3uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4DPROC +epoxy_glProgramUniform4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42914 /* "glProgramUniform4d" */, + 42914 /* "glProgramUniform4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 42914 /* "glProgramUniform4d" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4DEXTPROC +epoxy_glProgramUniform4dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42933 /* glProgramUniform4dEXT */); +} + +static PFNGLPROGRAMUNIFORM4DVPROC +epoxy_glProgramUniform4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42955 /* "glProgramUniform4dv" */, + 42955 /* "glProgramUniform4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 42955 /* "glProgramUniform4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4DVEXTPROC +epoxy_glProgramUniform4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 42975 /* glProgramUniform4dvEXT */); +} + +static PFNGLPROGRAMUNIFORM4FPROC +epoxy_glProgramUniform4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + 43017 /* "glProgramUniform4fEXT" */, + 43017 /* "glProgramUniform4fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 42998 /* "glProgramUniform4f" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4FEXTPROC +epoxy_glProgramUniform4fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43017 /* "glProgramUniform4fEXT" */, + 43017 /* "glProgramUniform4fEXT" */, + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + 42998 /* "glProgramUniform4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 43017 /* "glProgramUniform4fEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4FVPROC +epoxy_glProgramUniform4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + 43059 /* "glProgramUniform4fvEXT" */, + 43059 /* "glProgramUniform4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43039 /* "glProgramUniform4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4FVEXTPROC +epoxy_glProgramUniform4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43059 /* "glProgramUniform4fvEXT" */, + 43059 /* "glProgramUniform4fvEXT" */, + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + 43039 /* "glProgramUniform4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43059 /* "glProgramUniform4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IPROC +epoxy_glProgramUniform4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + 43197 /* "glProgramUniform4iEXT" */, + 43197 /* "glProgramUniform4iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43082 /* "glProgramUniform4i" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4I64ARBPROC +epoxy_glProgramUniform4i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43101 /* glProgramUniform4i64ARB */); +} + +static PFNGLPROGRAMUNIFORM4I64NVPROC +epoxy_glProgramUniform4i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43125 /* "glProgramUniform4i64NV" */, + 43125 /* "glProgramUniform4i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43125 /* "glProgramUniform4i64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4I64VARBPROC +epoxy_glProgramUniform4i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43148 /* glProgramUniform4i64vARB */); +} + +static PFNGLPROGRAMUNIFORM4I64VNVPROC +epoxy_glProgramUniform4i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43173 /* "glProgramUniform4i64vNV" */, + 43173 /* "glProgramUniform4i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43173 /* "glProgramUniform4i64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IEXTPROC +epoxy_glProgramUniform4iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43197 /* "glProgramUniform4iEXT" */, + 43197 /* "glProgramUniform4iEXT" */, + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + 43082 /* "glProgramUniform4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 43197 /* "glProgramUniform4iEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IVPROC +epoxy_glProgramUniform4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + 43239 /* "glProgramUniform4ivEXT" */, + 43239 /* "glProgramUniform4ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43219 /* "glProgramUniform4iv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4IVEXTPROC +epoxy_glProgramUniform4ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43239 /* "glProgramUniform4ivEXT" */, + 43239 /* "glProgramUniform4ivEXT" */, + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + 43219 /* "glProgramUniform4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43239 /* "glProgramUniform4ivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIPROC +epoxy_glProgramUniform4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + 43382 /* "glProgramUniform4uiEXT" */, + 43382 /* "glProgramUniform4uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43262 /* "glProgramUniform4ui" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UI64ARBPROC +epoxy_glProgramUniform4ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43282 /* glProgramUniform4ui64ARB */); +} + +static PFNGLPROGRAMUNIFORM4UI64NVPROC +epoxy_glProgramUniform4ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43307 /* "glProgramUniform4ui64NV" */, + 43307 /* "glProgramUniform4ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43307 /* "glProgramUniform4ui64NV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UI64VARBPROC +epoxy_glProgramUniform4ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 43331 /* glProgramUniform4ui64vARB */); +} + +static PFNGLPROGRAMUNIFORM4UI64VNVPROC +epoxy_glProgramUniform4ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43357 /* "glProgramUniform4ui64vNV" */, + 43357 /* "glProgramUniform4ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 43357 /* "glProgramUniform4ui64vNV" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIEXTPROC +epoxy_glProgramUniform4uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43382 /* "glProgramUniform4uiEXT" */, + 43382 /* "glProgramUniform4uiEXT" */, + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + 43262 /* "glProgramUniform4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 43382 /* "glProgramUniform4uiEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIVPROC +epoxy_glProgramUniform4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + 43426 /* "glProgramUniform4uivEXT" */, + 43426 /* "glProgramUniform4uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43405 /* "glProgramUniform4uiv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORM4UIVEXTPROC +epoxy_glProgramUniform4uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43426 /* "glProgramUniform4uivEXT" */, + 43426 /* "glProgramUniform4uivEXT" */, + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + 43405 /* "glProgramUniform4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43426 /* "glProgramUniform4uivEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC +epoxy_glProgramUniformHandleui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 43450 /* glProgramUniformHandleui64ARB */); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC +epoxy_glProgramUniformHandleui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 43480 /* glProgramUniformHandleui64NV */); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC +epoxy_glProgramUniformHandleui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 43509 /* glProgramUniformHandleui64vARB */); +} + +static PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC +epoxy_glProgramUniformHandleui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 43540 /* glProgramUniformHandleui64vNV */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2DVPROC +epoxy_glProgramUniformMatrix2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43570 /* "glProgramUniformMatrix2dv" */, + 43570 /* "glProgramUniformMatrix2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43570 /* "glProgramUniformMatrix2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC +epoxy_glProgramUniformMatrix2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43596 /* glProgramUniformMatrix2dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2FVPROC +epoxy_glProgramUniformMatrix2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43651 /* "glProgramUniformMatrix2fvEXT" */, + 43651 /* "glProgramUniformMatrix2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43625 /* "glProgramUniformMatrix2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC +epoxy_glProgramUniformMatrix2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43651 /* "glProgramUniformMatrix2fvEXT" */, + 43651 /* "glProgramUniformMatrix2fvEXT" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + 43625 /* "glProgramUniformMatrix2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43651 /* "glProgramUniformMatrix2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC +epoxy_glProgramUniformMatrix2x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43680 /* "glProgramUniformMatrix2x3dv" */, + 43680 /* "glProgramUniformMatrix2x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43680 /* "glProgramUniformMatrix2x3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC +epoxy_glProgramUniformMatrix2x3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43708 /* glProgramUniformMatrix2x3dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC +epoxy_glProgramUniformMatrix2x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43739 /* "glProgramUniformMatrix2x3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC +epoxy_glProgramUniformMatrix2x3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + 43739 /* "glProgramUniformMatrix2x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43767 /* "glProgramUniformMatrix2x3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC +epoxy_glProgramUniformMatrix2x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43798 /* "glProgramUniformMatrix2x4dv" */, + 43798 /* "glProgramUniformMatrix2x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43798 /* "glProgramUniformMatrix2x4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC +epoxy_glProgramUniformMatrix2x4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43826 /* glProgramUniformMatrix2x4dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC +epoxy_glProgramUniformMatrix2x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43857 /* "glProgramUniformMatrix2x4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC +epoxy_glProgramUniformMatrix2x4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + 43857 /* "glProgramUniformMatrix2x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43885 /* "glProgramUniformMatrix2x4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3DVPROC +epoxy_glProgramUniformMatrix3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43916 /* "glProgramUniformMatrix3dv" */, + 43916 /* "glProgramUniformMatrix3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43916 /* "glProgramUniformMatrix3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC +epoxy_glProgramUniformMatrix3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 43942 /* glProgramUniformMatrix3dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX3FVPROC +epoxy_glProgramUniformMatrix3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43997 /* "glProgramUniformMatrix3fvEXT" */, + 43997 /* "glProgramUniformMatrix3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 43971 /* "glProgramUniformMatrix3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC +epoxy_glProgramUniformMatrix3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 43997 /* "glProgramUniformMatrix3fvEXT" */, + 43997 /* "glProgramUniformMatrix3fvEXT" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + 43971 /* "glProgramUniformMatrix3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 43997 /* "glProgramUniformMatrix3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC +epoxy_glProgramUniformMatrix3x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44026 /* "glProgramUniformMatrix3x2dv" */, + 44026 /* "glProgramUniformMatrix3x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44026 /* "glProgramUniformMatrix3x2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC +epoxy_glProgramUniformMatrix3x2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44054 /* glProgramUniformMatrix3x2dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC +epoxy_glProgramUniformMatrix3x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44085 /* "glProgramUniformMatrix3x2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC +epoxy_glProgramUniformMatrix3x2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + 44085 /* "glProgramUniformMatrix3x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44113 /* "glProgramUniformMatrix3x2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC +epoxy_glProgramUniformMatrix3x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44144 /* "glProgramUniformMatrix3x4dv" */, + 44144 /* "glProgramUniformMatrix3x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44144 /* "glProgramUniformMatrix3x4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC +epoxy_glProgramUniformMatrix3x4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44172 /* glProgramUniformMatrix3x4dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC +epoxy_glProgramUniformMatrix3x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44203 /* "glProgramUniformMatrix3x4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC +epoxy_glProgramUniformMatrix3x4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + 44203 /* "glProgramUniformMatrix3x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44231 /* "glProgramUniformMatrix3x4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4DVPROC +epoxy_glProgramUniformMatrix4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44262 /* "glProgramUniformMatrix4dv" */, + 44262 /* "glProgramUniformMatrix4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44262 /* "glProgramUniformMatrix4dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC +epoxy_glProgramUniformMatrix4dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44288 /* glProgramUniformMatrix4dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX4FVPROC +epoxy_glProgramUniformMatrix4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44343 /* "glProgramUniformMatrix4fvEXT" */, + 44343 /* "glProgramUniformMatrix4fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44317 /* "glProgramUniformMatrix4fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC +epoxy_glProgramUniformMatrix4fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44343 /* "glProgramUniformMatrix4fvEXT" */, + 44343 /* "glProgramUniformMatrix4fvEXT" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + 44317 /* "glProgramUniformMatrix4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44343 /* "glProgramUniformMatrix4fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC +epoxy_glProgramUniformMatrix4x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44372 /* "glProgramUniformMatrix4x2dv" */, + 44372 /* "glProgramUniformMatrix4x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44372 /* "glProgramUniformMatrix4x2dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC +epoxy_glProgramUniformMatrix4x2dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44400 /* glProgramUniformMatrix4x2dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC +epoxy_glProgramUniformMatrix4x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44431 /* "glProgramUniformMatrix4x2fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC +epoxy_glProgramUniformMatrix4x2fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + 44431 /* "glProgramUniformMatrix4x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44459 /* "glProgramUniformMatrix4x2fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC +epoxy_glProgramUniformMatrix4x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44490 /* "glProgramUniformMatrix4x3dv" */, + 44490 /* "glProgramUniformMatrix4x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44490 /* "glProgramUniformMatrix4x3dv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC +epoxy_glProgramUniformMatrix4x3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44518 /* glProgramUniformMatrix4x3dvEXT */); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC +epoxy_glProgramUniformMatrix4x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44549 /* "glProgramUniformMatrix4x3fv" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC +epoxy_glProgramUniformMatrix4x3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_separate_shader_objects, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + 44549 /* "glProgramUniformMatrix4x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 44577 /* "glProgramUniformMatrix4x3fvEXT" */, + providers, entrypoints); +} + +static PFNGLPROGRAMUNIFORMUI64NVPROC +epoxy_glProgramUniformui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 44608 /* glProgramUniformui64NV */); +} + +static PFNGLPROGRAMUNIFORMUI64VNVPROC +epoxy_glProgramUniformui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 44631 /* glProgramUniformui64vNV */); +} + +static PFNGLPROGRAMVERTEXLIMITNVPROC +epoxy_glProgramVertexLimitNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_geometry_program4, 44655 /* glProgramVertexLimitNV */); +} + +static PFNGLPROVOKINGVERTEXPROC +epoxy_glProvokingVertex_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_provoking_vertex, + GL_extension_GL_EXT_provoking_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44678 /* "glProvokingVertex" */, + 44678 /* "glProvokingVertex" */, + 44696 /* "glProvokingVertexEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44678 /* "glProvokingVertex" */, + providers, entrypoints); +} + +static PFNGLPROVOKINGVERTEXEXTPROC +epoxy_glProvokingVertexEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_provoking_vertex, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_provoking_vertex, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44696 /* "glProvokingVertexEXT" */, + 44678 /* "glProvokingVertex" */, + 44678 /* "glProvokingVertex" */, + }; + return gl_provider_resolver(entrypoint_strings + 44696 /* "glProvokingVertexEXT" */, + providers, entrypoints); +} + +static PFNGLPUSHATTRIBPROC +epoxy_glPushAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44717 /* glPushAttrib */); +} + +static PFNGLPUSHCLIENTATTRIBPROC +epoxy_glPushClientAttrib_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_1, 44730 /* glPushClientAttrib */); +} + +static PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC +epoxy_glPushClientAttribDefaultEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 44749 /* glPushClientAttribDefaultEXT */); +} + +static PFNGLPUSHDEBUGGROUPPROC +epoxy_glPushDebugGroup_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + GL_extension_GL_KHR_debug, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + 44795 /* "glPushDebugGroupKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 44778 /* "glPushDebugGroup" */, + providers, entrypoints); +} + +static PFNGLPUSHDEBUGGROUPKHRPROC +epoxy_glPushDebugGroupKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_debug, + Desktop_OpenGL_4_3, + GL_extension_GL_KHR_debug, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44795 /* "glPushDebugGroupKHR" */, + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + 44778 /* "glPushDebugGroup" */, + }; + return gl_provider_resolver(entrypoint_strings + 44795 /* "glPushDebugGroupKHR" */, + providers, entrypoints); +} + +static PFNGLPUSHGROUPMARKEREXTPROC +epoxy_glPushGroupMarkerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_debug_marker, 44815 /* glPushGroupMarkerEXT */); +} + +static PFNGLPUSHMATRIXPROC +epoxy_glPushMatrix_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44836 /* "glPushMatrix" */, + 44836 /* "glPushMatrix" */, + }; + return gl_provider_resolver(entrypoint_strings + 44836 /* "glPushMatrix" */, + providers, entrypoints); +} + +static PFNGLPUSHNAMEPROC +epoxy_glPushName_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44849 /* glPushName */); +} + +static PFNGLQUERYCOUNTERPROC +epoxy_glQueryCounter_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + GL_extension_GL_EXT_disjoint_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44860 /* "glQueryCounter" */, + 44860 /* "glQueryCounter" */, + 44875 /* "glQueryCounterEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 44860 /* "glQueryCounter" */, + providers, entrypoints); +} + +static PFNGLQUERYCOUNTEREXTPROC +epoxy_glQueryCounterEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_disjoint_timer_query, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_timer_query, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 44875 /* "glQueryCounterEXT" */, + 44860 /* "glQueryCounter" */, + 44860 /* "glQueryCounter" */, + }; + return gl_provider_resolver(entrypoint_strings + 44875 /* "glQueryCounterEXT" */, + providers, entrypoints); +} + +static PFNGLQUERYMATRIXXOESPROC +epoxy_glQueryMatrixxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_query_matrix, 44893 /* glQueryMatrixxOES */); +} + +static PFNGLQUERYOBJECTPARAMETERUIAMDPROC +epoxy_glQueryObjectParameteruiAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_occlusion_query_event, 44911 /* glQueryObjectParameteruiAMD */); +} + +static PFNGLRASTERPOS2DPROC +epoxy_glRasterPos2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44939 /* glRasterPos2d */); +} + +static PFNGLRASTERPOS2DVPROC +epoxy_glRasterPos2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44953 /* glRasterPos2dv */); +} + +static PFNGLRASTERPOS2FPROC +epoxy_glRasterPos2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44968 /* glRasterPos2f */); +} + +static PFNGLRASTERPOS2FVPROC +epoxy_glRasterPos2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44982 /* glRasterPos2fv */); +} + +static PFNGLRASTERPOS2IPROC +epoxy_glRasterPos2i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 44997 /* glRasterPos2i */); +} + +static PFNGLRASTERPOS2IVPROC +epoxy_glRasterPos2iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45011 /* glRasterPos2iv */); +} + +static PFNGLRASTERPOS2SPROC +epoxy_glRasterPos2s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45026 /* glRasterPos2s */); +} + +static PFNGLRASTERPOS2SVPROC +epoxy_glRasterPos2sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45040 /* glRasterPos2sv */); +} + +static PFNGLRASTERPOS2XOESPROC +epoxy_glRasterPos2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45055 /* glRasterPos2xOES */); +} + +static PFNGLRASTERPOS2XVOESPROC +epoxy_glRasterPos2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45072 /* glRasterPos2xvOES */); +} + +static PFNGLRASTERPOS3DPROC +epoxy_glRasterPos3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45090 /* glRasterPos3d */); +} + +static PFNGLRASTERPOS3DVPROC +epoxy_glRasterPos3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45104 /* glRasterPos3dv */); +} + +static PFNGLRASTERPOS3FPROC +epoxy_glRasterPos3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45119 /* glRasterPos3f */); +} + +static PFNGLRASTERPOS3FVPROC +epoxy_glRasterPos3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45133 /* glRasterPos3fv */); +} + +static PFNGLRASTERPOS3IPROC +epoxy_glRasterPos3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45148 /* glRasterPos3i */); +} + +static PFNGLRASTERPOS3IVPROC +epoxy_glRasterPos3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45162 /* glRasterPos3iv */); +} + +static PFNGLRASTERPOS3SPROC +epoxy_glRasterPos3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45177 /* glRasterPos3s */); +} + +static PFNGLRASTERPOS3SVPROC +epoxy_glRasterPos3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45191 /* glRasterPos3sv */); +} + +static PFNGLRASTERPOS3XOESPROC +epoxy_glRasterPos3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45206 /* glRasterPos3xOES */); +} + +static PFNGLRASTERPOS3XVOESPROC +epoxy_glRasterPos3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45223 /* glRasterPos3xvOES */); +} + +static PFNGLRASTERPOS4DPROC +epoxy_glRasterPos4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45241 /* glRasterPos4d */); +} + +static PFNGLRASTERPOS4DVPROC +epoxy_glRasterPos4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45255 /* glRasterPos4dv */); +} + +static PFNGLRASTERPOS4FPROC +epoxy_glRasterPos4f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45270 /* glRasterPos4f */); +} + +static PFNGLRASTERPOS4FVPROC +epoxy_glRasterPos4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45284 /* glRasterPos4fv */); +} + +static PFNGLRASTERPOS4IPROC +epoxy_glRasterPos4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45299 /* glRasterPos4i */); +} + +static PFNGLRASTERPOS4IVPROC +epoxy_glRasterPos4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45313 /* glRasterPos4iv */); +} + +static PFNGLRASTERPOS4SPROC +epoxy_glRasterPos4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45328 /* glRasterPos4s */); +} + +static PFNGLRASTERPOS4SVPROC +epoxy_glRasterPos4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45342 /* glRasterPos4sv */); +} + +static PFNGLRASTERPOS4XOESPROC +epoxy_glRasterPos4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45357 /* glRasterPos4xOES */); +} + +static PFNGLRASTERPOS4XVOESPROC +epoxy_glRasterPos4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45374 /* glRasterPos4xvOES */); +} + +static PFNGLRASTERSAMPLESEXTPROC +epoxy_glRasterSamplesEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_raster_multisample, + GL_extension_GL_EXT_texture_filter_minmax, + GL_extension_GL_NV_framebuffer_mixed_samples, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45392 /* "glRasterSamplesEXT" */, + 45392 /* "glRasterSamplesEXT" */, + 45392 /* "glRasterSamplesEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45392 /* "glRasterSamplesEXT" */, + providers, entrypoints); +} + +static PFNGLREADBUFFERPROC +epoxy_glReadBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45411 /* "glReadBuffer" */, + 45411 /* "glReadBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 45411 /* "glReadBuffer" */, + providers, entrypoints); +} + +static PFNGLREADBUFFERINDEXEDEXTPROC +epoxy_glReadBufferIndexedEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_multiview_draw_buffers, 45424 /* glReadBufferIndexedEXT */); +} + +static PFNGLREADBUFFERNVPROC +epoxy_glReadBufferNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_read_buffer, 45447 /* glReadBufferNV */); +} + +static PFNGLREADINSTRUMENTSSGIXPROC +epoxy_glReadInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 45462 /* glReadInstrumentsSGIX */); +} + +static PFNGLREADPIXELSPROC +epoxy_glReadPixels_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45484 /* "glReadPixels" */, + 45484 /* "glReadPixels" */, + 45484 /* "glReadPixels" */, + }; + return gl_provider_resolver(entrypoint_strings + 45484 /* "glReadPixels" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSPROC +epoxy_glReadnPixels_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_ARB_robustness, + GL_extension_GL_EXT_robustness, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45511 /* "glReadnPixelsARB" */, + 45528 /* "glReadnPixelsEXT" */, + 45545 /* "glReadnPixelsKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 45497 /* "glReadnPixels" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSARBPROC +epoxy_glReadnPixelsARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_EXT_robustness, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45511 /* "glReadnPixelsARB" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45528 /* "glReadnPixelsEXT" */, + 45545 /* "glReadnPixelsKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 45511 /* "glReadnPixelsARB" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSEXTPROC +epoxy_glReadnPixelsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_ARB_robustness, + GL_extension_GL_KHR_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45528 /* "glReadnPixelsEXT" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45511 /* "glReadnPixelsARB" */, + 45545 /* "glReadnPixelsKHR" */, + }; + return gl_provider_resolver(entrypoint_strings + 45528 /* "glReadnPixelsEXT" */, + providers, entrypoints); +} + +static PFNGLREADNPIXELSKHRPROC +epoxy_glReadnPixelsKHR_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_KHR_robustness, + Desktop_OpenGL_4_5, + GL_extension_GL_KHR_robustness, + OpenGL_ES_3_2, + GL_extension_GL_ARB_robustness, + GL_extension_GL_EXT_robustness, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45545 /* "glReadnPixelsKHR" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45497 /* "glReadnPixels" */, + 45511 /* "glReadnPixelsARB" */, + 45528 /* "glReadnPixelsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45545 /* "glReadnPixelsKHR" */, + providers, entrypoints); +} + +static PFNGLRECTDPROC +epoxy_glRectd_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45562 /* glRectd */); +} + +static PFNGLRECTDVPROC +epoxy_glRectdv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45570 /* glRectdv */); +} + +static PFNGLRECTFPROC +epoxy_glRectf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45579 /* glRectf */); +} + +static PFNGLRECTFVPROC +epoxy_glRectfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45587 /* glRectfv */); +} + +static PFNGLRECTIPROC +epoxy_glRecti_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45596 /* glRecti */); +} + +static PFNGLRECTIVPROC +epoxy_glRectiv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45604 /* glRectiv */); +} + +static PFNGLRECTSPROC +epoxy_glRects_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45613 /* glRects */); +} + +static PFNGLRECTSVPROC +epoxy_glRectsv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45621 /* glRectsv */); +} + +static PFNGLRECTXOESPROC +epoxy_glRectxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45630 /* glRectxOES */); +} + +static PFNGLRECTXVOESPROC +epoxy_glRectxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 45641 /* glRectxvOES */); +} + +static PFNGLREFERENCEPLANESGIXPROC +epoxy_glReferencePlaneSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_reference_plane, 45653 /* glReferencePlaneSGIX */); +} + +static PFNGLRELEASESHADERCOMPILERPROC +epoxy_glReleaseShaderCompiler_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45674 /* "glReleaseShaderCompiler" */, + 45674 /* "glReleaseShaderCompiler" */, + 45674 /* "glReleaseShaderCompiler" */, + }; + return gl_provider_resolver(entrypoint_strings + 45674 /* "glReleaseShaderCompiler" */, + providers, entrypoints); +} + +static PFNGLRENDERMODEPROC +epoxy_glRenderMode_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 45698 /* glRenderMode */); +} + +static PFNGLRENDERBUFFERSTORAGEPROC +epoxy_glRenderbufferStorage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + GL_extension_GL_EXT_framebuffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + 45733 /* "glRenderbufferStorageEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45711 /* "glRenderbufferStorage" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEEXTPROC +epoxy_glRenderbufferStorageEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_object, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45733 /* "glRenderbufferStorageEXT" */, + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + 45711 /* "glRenderbufferStorage" */, + }; + return gl_provider_resolver(entrypoint_strings + 45733 /* "glRenderbufferStorageEXT" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC +epoxy_glRenderbufferStorageMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + GL_extension_GL_NV_framebuffer_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45982 /* "glRenderbufferStorageMultisampleNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 45758 /* "glRenderbufferStorageMultisample" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC +epoxy_glRenderbufferStorageMultisampleANGLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ANGLE_framebuffer_multisample, 45791 /* glRenderbufferStorageMultisampleANGLE */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC +epoxy_glRenderbufferStorageMultisampleAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_framebuffer_multisample, 45829 /* glRenderbufferStorageMultisampleAPPLE */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC +epoxy_glRenderbufferStorageMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_framebuffer_multisample_coverage, 45867 /* glRenderbufferStorageMultisampleCoverageNV */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC +epoxy_glRenderbufferStorageMultisampleEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_NV_framebuffer_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45982 /* "glRenderbufferStorageMultisampleNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC +epoxy_glRenderbufferStorageMultisampleIMG_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IMG_multisampled_render_to_texture, 45946 /* glRenderbufferStorageMultisampleIMG */); +} + +static PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC +epoxy_glRenderbufferStorageMultisampleNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_framebuffer_multisample, + Desktop_OpenGL_3_0, + GL_extension_GL_ARB_framebuffer_object, + OpenGL_ES_3_0, + GL_extension_GL_EXT_framebuffer_multisample, + GL_extension_GL_EXT_multisampled_render_to_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 45982 /* "glRenderbufferStorageMultisampleNV" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45758 /* "glRenderbufferStorageMultisample" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + 45910 /* "glRenderbufferStorageMultisampleEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 45982 /* "glRenderbufferStorageMultisampleNV" */, + providers, entrypoints); +} + +static PFNGLRENDERBUFFERSTORAGEOESPROC +epoxy_glRenderbufferStorageOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_framebuffer_object, 46017 /* glRenderbufferStorageOES */); +} + +static PFNGLREPLACEMENTCODEPOINTERSUNPROC +epoxy_glReplacementCodePointerSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46042 /* glReplacementCodePointerSUN */); +} + +static PFNGLREPLACEMENTCODEUBSUNPROC +epoxy_glReplacementCodeubSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46070 /* glReplacementCodeubSUN */); +} + +static PFNGLREPLACEMENTCODEUBVSUNPROC +epoxy_glReplacementCodeubvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46093 /* glReplacementCodeubvSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiColor3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46117 /* glReplacementCodeuiColor3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiColor3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46155 /* glReplacementCodeuiColor3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46194 /* glReplacementCodeuiColor4fNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46240 /* glReplacementCodeuiColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC +epoxy_glReplacementCodeuiColor4ubVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46287 /* glReplacementCodeuiColor4ubVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46326 /* glReplacementCodeuiColor4ubVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46366 /* glReplacementCodeuiNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46405 /* glReplacementCodeuiNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUISUNPROC +epoxy_glReplacementCodeuiSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46445 /* glReplacementCodeuiSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46468 /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46524 /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46581 /* glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46630 /* glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC +epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46680 /* glReplacementCodeuiTexCoord2fVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46721 /* glReplacementCodeuiTexCoord2fVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC +epoxy_glReplacementCodeuiVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46763 /* glReplacementCodeuiVertex3fSUN */); +} + +static PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC +epoxy_glReplacementCodeuiVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 46794 /* glReplacementCodeuiVertex3fvSUN */); +} + +static PFNGLREPLACEMENTCODEUIVSUNPROC +epoxy_glReplacementCodeuivSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46826 /* glReplacementCodeuivSUN */); +} + +static PFNGLREPLACEMENTCODEUSSUNPROC +epoxy_glReplacementCodeusSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46850 /* glReplacementCodeusSUN */); +} + +static PFNGLREPLACEMENTCODEUSVSUNPROC +epoxy_glReplacementCodeusvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_triangle_list, 46873 /* glReplacementCodeusvSUN */); +} + +static PFNGLREQUESTRESIDENTPROGRAMSNVPROC +epoxy_glRequestResidentProgramsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 46897 /* glRequestResidentProgramsNV */); +} + +static PFNGLRESETHISTOGRAMPROC +epoxy_glResetHistogram_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46925 /* "glResetHistogram" */, + 46942 /* "glResetHistogramEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 46925 /* "glResetHistogram" */, + providers, entrypoints); +} + +static PFNGLRESETHISTOGRAMEXTPROC +epoxy_glResetHistogramEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46942 /* "glResetHistogramEXT" */, + 46925 /* "glResetHistogram" */, + }; + return gl_provider_resolver(entrypoint_strings + 46942 /* "glResetHistogramEXT" */, + providers, entrypoints); +} + +static PFNGLRESETMINMAXPROC +epoxy_glResetMinmax_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_histogram, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46962 /* "glResetMinmax" */, + 46976 /* "glResetMinmaxEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 46962 /* "glResetMinmax" */, + providers, entrypoints); +} + +static PFNGLRESETMINMAXEXTPROC +epoxy_glResetMinmaxEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_histogram, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 46976 /* "glResetMinmaxEXT" */, + 46962 /* "glResetMinmax" */, + }; + return gl_provider_resolver(entrypoint_strings + 46976 /* "glResetMinmaxEXT" */, + providers, entrypoints); +} + +static PFNGLRESIZEBUFFERSMESAPROC +epoxy_glResizeBuffersMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_resize_buffers, 46993 /* glResizeBuffersMESA */); +} + +static PFNGLRESOLVEDEPTHVALUESNVPROC +epoxy_glResolveDepthValuesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_sample_locations, 47013 /* glResolveDepthValuesNV */); +} + +static PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC +epoxy_glResolveMultisampleFramebufferAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_framebuffer_multisample, 47036 /* glResolveMultisampleFramebufferAPPLE */); +} + +static PFNGLRESUMETRANSFORMFEEDBACKPROC +epoxy_glResumeTransformFeedback_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + GL_extension_GL_NV_transform_feedback2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + 47099 /* "glResumeTransformFeedbackNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47073 /* "glResumeTransformFeedback" */, + providers, entrypoints); +} + +static PFNGLRESUMETRANSFORMFEEDBACKNVPROC +epoxy_glResumeTransformFeedbackNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_transform_feedback2, + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_transform_feedback2, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47099 /* "glResumeTransformFeedbackNV" */, + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + 47073 /* "glResumeTransformFeedback" */, + }; + return gl_provider_resolver(entrypoint_strings + 47099 /* "glResumeTransformFeedbackNV" */, + providers, entrypoints); +} + +static PFNGLROTATEDPROC +epoxy_glRotated_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 47127 /* glRotated */); +} + +static PFNGLROTATEFPROC +epoxy_glRotatef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47137 /* "glRotatef" */, + 47137 /* "glRotatef" */, + }; + return gl_provider_resolver(entrypoint_strings + 47137 /* "glRotatef" */, + providers, entrypoints); +} + +static PFNGLROTATEXPROC +epoxy_glRotatex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 47147 /* glRotatex */); +} + +static PFNGLROTATEXOESPROC +epoxy_glRotatexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 47157 /* glRotatexOES */); +} + +static PFNGLSAMPLECOVERAGEPROC +epoxy_glSampleCoverage_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + 47187 /* "glSampleCoverageARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 47170 /* "glSampleCoverage" */, + providers, entrypoints); +} + +static PFNGLSAMPLECOVERAGEARBPROC +epoxy_glSampleCoverageARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_multisample, + Desktop_OpenGL_1_3, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47187 /* "glSampleCoverageARB" */, + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + 47170 /* "glSampleCoverage" */, + }; + return gl_provider_resolver(entrypoint_strings + 47187 /* "glSampleCoverageARB" */, + providers, entrypoints); +} + +static PFNGLSAMPLECOVERAGEXPROC +epoxy_glSampleCoveragex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 47207 /* glSampleCoveragex */); +} + +static PFNGLSAMPLECOVERAGEXOESPROC +epoxy_glSampleCoveragexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 47225 /* glSampleCoveragexOES */); +} + +static PFNGLSAMPLEMAPATIPROC +epoxy_glSampleMapATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 47246 /* glSampleMapATI */); +} + +static PFNGLSAMPLEMASKEXTPROC +epoxy_glSampleMaskEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multisample, + GL_extension_GL_SGIS_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47261 /* "glSampleMaskEXT" */, + 47299 /* "glSampleMaskSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 47261 /* "glSampleMaskEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLEMASKINDEXEDNVPROC +epoxy_glSampleMaskIndexedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_explicit_multisample, 47277 /* glSampleMaskIndexedNV */); +} + +static PFNGLSAMPLEMASKSGISPROC +epoxy_glSampleMaskSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_multisample, + GL_extension_GL_EXT_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47299 /* "glSampleMaskSGIS" */, + 47261 /* "glSampleMaskEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47299 /* "glSampleMaskSGIS" */, + providers, entrypoints); +} + +static PFNGLSAMPLEMASKIPROC +epoxy_glSampleMaski_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47316 /* "glSampleMaski" */, + 47316 /* "glSampleMaski" */, + 47316 /* "glSampleMaski" */, + }; + return gl_provider_resolver(entrypoint_strings + 47316 /* "glSampleMaski" */, + providers, entrypoints); +} + +static PFNGLSAMPLEPATTERNEXTPROC +epoxy_glSamplePatternEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_multisample, + GL_extension_GL_SGIS_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47330 /* "glSamplePatternEXT" */, + 47349 /* "glSamplePatternSGIS" */, + }; + return gl_provider_resolver(entrypoint_strings + 47330 /* "glSamplePatternEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLEPATTERNSGISPROC +epoxy_glSamplePatternSGIS_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_SGIS_multisample, + GL_extension_GL_EXT_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47349 /* "glSamplePatternSGIS" */, + 47330 /* "glSamplePatternEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47349 /* "glSamplePatternSGIS" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIIVPROC +epoxy_glSamplerParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47391 /* "glSamplerParameterIivEXT" */, + 47416 /* "glSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47369 /* "glSamplerParameterIiv" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIIVEXTPROC +epoxy_glSamplerParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47391 /* "glSamplerParameterIivEXT" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47416 /* "glSamplerParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47391 /* "glSamplerParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIIVOESPROC +epoxy_glSamplerParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47416 /* "glSamplerParameterIivOES" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47369 /* "glSamplerParameterIiv" */, + 47391 /* "glSamplerParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47416 /* "glSamplerParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIUIVPROC +epoxy_glSamplerParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47464 /* "glSamplerParameterIuivEXT" */, + 47490 /* "glSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47441 /* "glSamplerParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIUIVEXTPROC +epoxy_glSamplerParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47464 /* "glSamplerParameterIuivEXT" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47490 /* "glSamplerParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 47464 /* "glSamplerParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIUIVOESPROC +epoxy_glSamplerParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47490 /* "glSamplerParameterIuivOES" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47441 /* "glSamplerParameterIuiv" */, + 47464 /* "glSamplerParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47490 /* "glSamplerParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERFPROC +epoxy_glSamplerParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47516 /* "glSamplerParameterf" */, + 47516 /* "glSamplerParameterf" */, + 47516 /* "glSamplerParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 47516 /* "glSamplerParameterf" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERFVPROC +epoxy_glSamplerParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47536 /* "glSamplerParameterfv" */, + 47536 /* "glSamplerParameterfv" */, + 47536 /* "glSamplerParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47536 /* "glSamplerParameterfv" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIPROC +epoxy_glSamplerParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47557 /* "glSamplerParameteri" */, + 47557 /* "glSamplerParameteri" */, + 47557 /* "glSamplerParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 47557 /* "glSamplerParameteri" */, + providers, entrypoints); +} + +static PFNGLSAMPLERPARAMETERIVPROC +epoxy_glSamplerParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_sampler_objects, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47577 /* "glSamplerParameteriv" */, + 47577 /* "glSamplerParameteriv" */, + 47577 /* "glSamplerParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47577 /* "glSamplerParameteriv" */, + providers, entrypoints); +} + +static PFNGLSCALEDPROC +epoxy_glScaled_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 47598 /* glScaled */); +} + +static PFNGLSCALEFPROC +epoxy_glScalef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47607 /* "glScalef" */, + 47607 /* "glScalef" */, + }; + return gl_provider_resolver(entrypoint_strings + 47607 /* "glScalef" */, + providers, entrypoints); +} + +static PFNGLSCALEXPROC +epoxy_glScalex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 47616 /* glScalex */); +} + +static PFNGLSCALEXOESPROC +epoxy_glScalexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 47625 /* glScalexOES */); +} + +static PFNGLSCISSORPROC +epoxy_glScissor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47637 /* "glScissor" */, + 47637 /* "glScissor" */, + 47637 /* "glScissor" */, + }; + return gl_provider_resolver(entrypoint_strings + 47637 /* "glScissor" */, + providers, entrypoints); +} + +static PFNGLSCISSORARRAYVPROC +epoxy_glScissorArrayv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47647 /* "glScissorArrayv" */, + 47647 /* "glScissorArrayv" */, + 47663 /* "glScissorArrayvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47647 /* "glScissorArrayv" */, + providers, entrypoints); +} + +static PFNGLSCISSORARRAYVNVPROC +epoxy_glScissorArrayvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47663 /* "glScissorArrayvNV" */, + 47647 /* "glScissorArrayv" */, + 47647 /* "glScissorArrayv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47663 /* "glScissorArrayvNV" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDPROC +epoxy_glScissorIndexed_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47681 /* "glScissorIndexed" */, + 47681 /* "glScissorIndexed" */, + 47698 /* "glScissorIndexedNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47681 /* "glScissorIndexed" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDNVPROC +epoxy_glScissorIndexedNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47698 /* "glScissorIndexedNV" */, + 47681 /* "glScissorIndexed" */, + 47681 /* "glScissorIndexed" */, + }; + return gl_provider_resolver(entrypoint_strings + 47698 /* "glScissorIndexedNV" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDVPROC +epoxy_glScissorIndexedv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47717 /* "glScissorIndexedv" */, + 47717 /* "glScissorIndexedv" */, + 47735 /* "glScissorIndexedvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 47717 /* "glScissorIndexedv" */, + providers, entrypoints); +} + +static PFNGLSCISSORINDEXEDVNVPROC +epoxy_glScissorIndexedvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47735 /* "glScissorIndexedvNV" */, + 47717 /* "glScissorIndexedv" */, + 47717 /* "glScissorIndexedv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47735 /* "glScissorIndexedvNV" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BPROC +epoxy_glSecondaryColor3b_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47755 /* "glSecondaryColor3b" */, + 47774 /* "glSecondaryColor3bEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47755 /* "glSecondaryColor3b" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BEXTPROC +epoxy_glSecondaryColor3bEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47774 /* "glSecondaryColor3bEXT" */, + 47755 /* "glSecondaryColor3b" */, + }; + return gl_provider_resolver(entrypoint_strings + 47774 /* "glSecondaryColor3bEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BVPROC +epoxy_glSecondaryColor3bv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47796 /* "glSecondaryColor3bv" */, + 47816 /* "glSecondaryColor3bvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47796 /* "glSecondaryColor3bv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3BVEXTPROC +epoxy_glSecondaryColor3bvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47816 /* "glSecondaryColor3bvEXT" */, + 47796 /* "glSecondaryColor3bv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47816 /* "glSecondaryColor3bvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DPROC +epoxy_glSecondaryColor3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47839 /* "glSecondaryColor3d" */, + 47858 /* "glSecondaryColor3dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47839 /* "glSecondaryColor3d" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DEXTPROC +epoxy_glSecondaryColor3dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47858 /* "glSecondaryColor3dEXT" */, + 47839 /* "glSecondaryColor3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 47858 /* "glSecondaryColor3dEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DVPROC +epoxy_glSecondaryColor3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47880 /* "glSecondaryColor3dv" */, + 47900 /* "glSecondaryColor3dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47880 /* "glSecondaryColor3dv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3DVEXTPROC +epoxy_glSecondaryColor3dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47900 /* "glSecondaryColor3dvEXT" */, + 47880 /* "glSecondaryColor3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47900 /* "glSecondaryColor3dvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FPROC +epoxy_glSecondaryColor3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47923 /* "glSecondaryColor3f" */, + 47942 /* "glSecondaryColor3fEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47923 /* "glSecondaryColor3f" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FEXTPROC +epoxy_glSecondaryColor3fEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47942 /* "glSecondaryColor3fEXT" */, + 47923 /* "glSecondaryColor3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 47942 /* "glSecondaryColor3fEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FVPROC +epoxy_glSecondaryColor3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47964 /* "glSecondaryColor3fv" */, + 47984 /* "glSecondaryColor3fvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 47964 /* "glSecondaryColor3fv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3FVEXTPROC +epoxy_glSecondaryColor3fvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 47984 /* "glSecondaryColor3fvEXT" */, + 47964 /* "glSecondaryColor3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 47984 /* "glSecondaryColor3fvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3HNVPROC +epoxy_glSecondaryColor3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 48007 /* glSecondaryColor3hNV */); +} + +static PFNGLSECONDARYCOLOR3HVNVPROC +epoxy_glSecondaryColor3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 48028 /* glSecondaryColor3hvNV */); +} + +static PFNGLSECONDARYCOLOR3IPROC +epoxy_glSecondaryColor3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48050 /* "glSecondaryColor3i" */, + 48069 /* "glSecondaryColor3iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48050 /* "glSecondaryColor3i" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3IEXTPROC +epoxy_glSecondaryColor3iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48069 /* "glSecondaryColor3iEXT" */, + 48050 /* "glSecondaryColor3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 48069 /* "glSecondaryColor3iEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3IVPROC +epoxy_glSecondaryColor3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48091 /* "glSecondaryColor3iv" */, + 48111 /* "glSecondaryColor3ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48091 /* "glSecondaryColor3iv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3IVEXTPROC +epoxy_glSecondaryColor3ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48111 /* "glSecondaryColor3ivEXT" */, + 48091 /* "glSecondaryColor3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48111 /* "glSecondaryColor3ivEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SPROC +epoxy_glSecondaryColor3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48134 /* "glSecondaryColor3s" */, + 48153 /* "glSecondaryColor3sEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48134 /* "glSecondaryColor3s" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SEXTPROC +epoxy_glSecondaryColor3sEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48153 /* "glSecondaryColor3sEXT" */, + 48134 /* "glSecondaryColor3s" */, + }; + return gl_provider_resolver(entrypoint_strings + 48153 /* "glSecondaryColor3sEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SVPROC +epoxy_glSecondaryColor3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48175 /* "glSecondaryColor3sv" */, + 48195 /* "glSecondaryColor3svEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48175 /* "glSecondaryColor3sv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3SVEXTPROC +epoxy_glSecondaryColor3svEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48195 /* "glSecondaryColor3svEXT" */, + 48175 /* "glSecondaryColor3sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48195 /* "glSecondaryColor3svEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBPROC +epoxy_glSecondaryColor3ub_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48218 /* "glSecondaryColor3ub" */, + 48238 /* "glSecondaryColor3ubEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48218 /* "glSecondaryColor3ub" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBEXTPROC +epoxy_glSecondaryColor3ubEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48238 /* "glSecondaryColor3ubEXT" */, + 48218 /* "glSecondaryColor3ub" */, + }; + return gl_provider_resolver(entrypoint_strings + 48238 /* "glSecondaryColor3ubEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBVPROC +epoxy_glSecondaryColor3ubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48261 /* "glSecondaryColor3ubv" */, + 48282 /* "glSecondaryColor3ubvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48261 /* "glSecondaryColor3ubv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UBVEXTPROC +epoxy_glSecondaryColor3ubvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48282 /* "glSecondaryColor3ubvEXT" */, + 48261 /* "glSecondaryColor3ubv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48282 /* "glSecondaryColor3ubvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIPROC +epoxy_glSecondaryColor3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48306 /* "glSecondaryColor3ui" */, + 48326 /* "glSecondaryColor3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48306 /* "glSecondaryColor3ui" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIEXTPROC +epoxy_glSecondaryColor3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48326 /* "glSecondaryColor3uiEXT" */, + 48306 /* "glSecondaryColor3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 48326 /* "glSecondaryColor3uiEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIVPROC +epoxy_glSecondaryColor3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48349 /* "glSecondaryColor3uiv" */, + 48370 /* "glSecondaryColor3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48349 /* "glSecondaryColor3uiv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3UIVEXTPROC +epoxy_glSecondaryColor3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48370 /* "glSecondaryColor3uivEXT" */, + 48349 /* "glSecondaryColor3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48370 /* "glSecondaryColor3uivEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USPROC +epoxy_glSecondaryColor3us_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48394 /* "glSecondaryColor3us" */, + 48414 /* "glSecondaryColor3usEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48394 /* "glSecondaryColor3us" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USEXTPROC +epoxy_glSecondaryColor3usEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48414 /* "glSecondaryColor3usEXT" */, + 48394 /* "glSecondaryColor3us" */, + }; + return gl_provider_resolver(entrypoint_strings + 48414 /* "glSecondaryColor3usEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USVPROC +epoxy_glSecondaryColor3usv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48437 /* "glSecondaryColor3usv" */, + 48458 /* "glSecondaryColor3usvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48437 /* "glSecondaryColor3usv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLOR3USVEXTPROC +epoxy_glSecondaryColor3usvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48458 /* "glSecondaryColor3usvEXT" */, + 48437 /* "glSecondaryColor3usv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48458 /* "glSecondaryColor3usvEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORFORMATNVPROC +epoxy_glSecondaryColorFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 48482 /* glSecondaryColorFormatNV */); +} + +static PFNGLSECONDARYCOLORP3UIPROC +epoxy_glSecondaryColorP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48507 /* "glSecondaryColorP3ui" */, + 48507 /* "glSecondaryColorP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 48507 /* "glSecondaryColorP3ui" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORP3UIVPROC +epoxy_glSecondaryColorP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48528 /* "glSecondaryColorP3uiv" */, + 48528 /* "glSecondaryColorP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 48528 /* "glSecondaryColorP3uiv" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORPOINTERPROC +epoxy_glSecondaryColorPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_EXT_secondary_color, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48550 /* "glSecondaryColorPointer" */, + 48574 /* "glSecondaryColorPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48550 /* "glSecondaryColorPointer" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORPOINTEREXTPROC +epoxy_glSecondaryColorPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_secondary_color, + Desktop_OpenGL_1_4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48574 /* "glSecondaryColorPointerEXT" */, + 48550 /* "glSecondaryColorPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 48574 /* "glSecondaryColorPointerEXT" */, + providers, entrypoints); +} + +static PFNGLSECONDARYCOLORPOINTERLISTIBMPROC +epoxy_glSecondaryColorPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 48601 /* glSecondaryColorPointerListIBM */); +} + +static PFNGLSELECTBUFFERPROC +epoxy_glSelectBuffer_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 48632 /* glSelectBuffer */); +} + +static PFNGLSELECTPERFMONITORCOUNTERSAMDPROC +epoxy_glSelectPerfMonitorCountersAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_performance_monitor, 48647 /* glSelectPerfMonitorCountersAMD */); +} + +static PFNGLSEPARABLEFILTER2DPROC +epoxy_glSeparableFilter2D_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_imaging, + GL_extension_GL_EXT_convolution, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48678 /* "glSeparableFilter2D" */, + 48698 /* "glSeparableFilter2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 48678 /* "glSeparableFilter2D" */, + providers, entrypoints); +} + +static PFNGLSEPARABLEFILTER2DEXTPROC +epoxy_glSeparableFilter2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_convolution, + GL_extension_GL_ARB_imaging, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48698 /* "glSeparableFilter2DEXT" */, + 48678 /* "glSeparableFilter2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 48698 /* "glSeparableFilter2DEXT" */, + providers, entrypoints); +} + +static PFNGLSETFENCEAPPLEPROC +epoxy_glSetFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 48721 /* glSetFenceAPPLE */); +} + +static PFNGLSETFENCENVPROC +epoxy_glSetFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 48737 /* glSetFenceNV */); +} + +static PFNGLSETFRAGMENTSHADERCONSTANTATIPROC +epoxy_glSetFragmentShaderConstantATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_fragment_shader, 48750 /* glSetFragmentShaderConstantATI */); +} + +static PFNGLSETINVARIANTEXTPROC +epoxy_glSetInvariantEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48781 /* glSetInvariantEXT */); +} + +static PFNGLSETLOCALCONSTANTEXTPROC +epoxy_glSetLocalConstantEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48799 /* glSetLocalConstantEXT */); +} + +static PFNGLSETMULTISAMPLEFVAMDPROC +epoxy_glSetMultisamplefvAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_sample_positions, 48821 /* glSetMultisamplefvAMD */); +} + +static PFNGLSHADEMODELPROC +epoxy_glShadeModel_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48843 /* "glShadeModel" */, + 48843 /* "glShadeModel" */, + }; + return gl_provider_resolver(entrypoint_strings + 48843 /* "glShadeModel" */, + providers, entrypoints); +} + +static PFNGLSHADERBINARYPROC +epoxy_glShaderBinary_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_ES2_compatibility, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48856 /* "glShaderBinary" */, + 48856 /* "glShaderBinary" */, + 48856 /* "glShaderBinary" */, + }; + return gl_provider_resolver(entrypoint_strings + 48856 /* "glShaderBinary" */, + providers, entrypoints); +} + +static PFNGLSHADEROP1EXTPROC +epoxy_glShaderOp1EXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48871 /* glShaderOp1EXT */); +} + +static PFNGLSHADEROP2EXTPROC +epoxy_glShaderOp2EXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48886 /* glShaderOp2EXT */); +} + +static PFNGLSHADEROP3EXTPROC +epoxy_glShaderOp3EXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 48901 /* glShaderOp3EXT */); +} + +static PFNGLSHADERSOURCEPROC +epoxy_glShaderSource_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48916 /* "glShaderSource" */, + 48916 /* "glShaderSource" */, + 48931 /* "glShaderSourceARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 48916 /* "glShaderSource" */, + providers, entrypoints); +} + +static PFNGLSHADERSOURCEARBPROC +epoxy_glShaderSourceARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48931 /* "glShaderSourceARB" */, + 48916 /* "glShaderSource" */, + 48916 /* "glShaderSource" */, + }; + return gl_provider_resolver(entrypoint_strings + 48931 /* "glShaderSourceARB" */, + providers, entrypoints); +} + +static PFNGLSHADERSTORAGEBLOCKBINDINGPROC +epoxy_glShaderStorageBlockBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_shader_storage_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 48949 /* "glShaderStorageBlockBinding" */, + 48949 /* "glShaderStorageBlockBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 48949 /* "glShaderStorageBlockBinding" */, + providers, entrypoints); +} + +static PFNGLSHARPENTEXFUNCSGISPROC +epoxy_glSharpenTexFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_sharpen_texture, 48977 /* glSharpenTexFuncSGIS */); +} + +static PFNGLSPRITEPARAMETERFSGIXPROC +epoxy_glSpriteParameterfSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 48998 /* glSpriteParameterfSGIX */); +} + +static PFNGLSPRITEPARAMETERFVSGIXPROC +epoxy_glSpriteParameterfvSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 49021 /* glSpriteParameterfvSGIX */); +} + +static PFNGLSPRITEPARAMETERISGIXPROC +epoxy_glSpriteParameteriSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 49045 /* glSpriteParameteriSGIX */); +} + +static PFNGLSPRITEPARAMETERIVSGIXPROC +epoxy_glSpriteParameterivSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_sprite, 49068 /* glSpriteParameterivSGIX */); +} + +static PFNGLSTARTINSTRUMENTSSGIXPROC +epoxy_glStartInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 49092 /* glStartInstrumentsSGIX */); +} + +static PFNGLSTARTTILINGQCOMPROC +epoxy_glStartTilingQCOM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_QCOM_tiled_rendering, 49115 /* glStartTilingQCOM */); +} + +static PFNGLSTATECAPTURENVPROC +epoxy_glStateCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_command_list, 49133 /* glStateCaptureNV */); +} + +static PFNGLSTENCILCLEARTAGEXTPROC +epoxy_glStencilClearTagEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_stencil_clear_tag, 49150 /* glStencilClearTagEXT */); +} + +static PFNGLSTENCILFILLPATHINSTANCEDNVPROC +epoxy_glStencilFillPathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49171 /* glStencilFillPathInstancedNV */); +} + +static PFNGLSTENCILFILLPATHNVPROC +epoxy_glStencilFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49200 /* glStencilFillPathNV */); +} + +static PFNGLSTENCILFUNCPROC +epoxy_glStencilFunc_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49220 /* "glStencilFunc" */, + 49220 /* "glStencilFunc" */, + 49220 /* "glStencilFunc" */, + }; + return gl_provider_resolver(entrypoint_strings + 49220 /* "glStencilFunc" */, + providers, entrypoints); +} + +static PFNGLSTENCILFUNCSEPARATEPROC +epoxy_glStencilFuncSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49234 /* "glStencilFuncSeparate" */, + 49234 /* "glStencilFuncSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 49234 /* "glStencilFuncSeparate" */, + providers, entrypoints); +} + +static PFNGLSTENCILFUNCSEPARATEATIPROC +epoxy_glStencilFuncSeparateATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_separate_stencil, 49256 /* glStencilFuncSeparateATI */); +} + +static PFNGLSTENCILMASKPROC +epoxy_glStencilMask_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49281 /* "glStencilMask" */, + 49281 /* "glStencilMask" */, + 49281 /* "glStencilMask" */, + }; + return gl_provider_resolver(entrypoint_strings + 49281 /* "glStencilMask" */, + providers, entrypoints); +} + +static PFNGLSTENCILMASKSEPARATEPROC +epoxy_glStencilMaskSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49295 /* "glStencilMaskSeparate" */, + 49295 /* "glStencilMaskSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 49295 /* "glStencilMaskSeparate" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPPROC +epoxy_glStencilOp_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49317 /* "glStencilOp" */, + 49317 /* "glStencilOp" */, + 49317 /* "glStencilOp" */, + }; + return gl_provider_resolver(entrypoint_strings + 49317 /* "glStencilOp" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPSEPARATEPROC +epoxy_glStencilOpSeparate_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ATI_separate_stencil, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49329 /* "glStencilOpSeparate" */, + 49329 /* "glStencilOpSeparate" */, + 49349 /* "glStencilOpSeparateATI" */, + }; + return gl_provider_resolver(entrypoint_strings + 49329 /* "glStencilOpSeparate" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPSEPARATEATIPROC +epoxy_glStencilOpSeparateATI_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ATI_separate_stencil, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49349 /* "glStencilOpSeparateATI" */, + 49329 /* "glStencilOpSeparate" */, + 49329 /* "glStencilOpSeparate" */, + }; + return gl_provider_resolver(entrypoint_strings + 49349 /* "glStencilOpSeparateATI" */, + providers, entrypoints); +} + +static PFNGLSTENCILOPVALUEAMDPROC +epoxy_glStencilOpValueAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_stencil_operation_extended, 49372 /* glStencilOpValueAMD */); +} + +static PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC +epoxy_glStencilStrokePathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49392 /* glStencilStrokePathInstancedNV */); +} + +static PFNGLSTENCILSTROKEPATHNVPROC +epoxy_glStencilStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49423 /* glStencilStrokePathNV */); +} + +static PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC +epoxy_glStencilThenCoverFillPathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49445 /* glStencilThenCoverFillPathInstancedNV */); +} + +static PFNGLSTENCILTHENCOVERFILLPATHNVPROC +epoxy_glStencilThenCoverFillPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49483 /* glStencilThenCoverFillPathNV */); +} + +static PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC +epoxy_glStencilThenCoverStrokePathInstancedNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49512 /* glStencilThenCoverStrokePathInstancedNV */); +} + +static PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC +epoxy_glStencilThenCoverStrokePathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 49552 /* glStencilThenCoverStrokePathNV */); +} + +static PFNGLSTOPINSTRUMENTSSGIXPROC +epoxy_glStopInstrumentsSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_instruments, 49583 /* glStopInstrumentsSGIX */); +} + +static PFNGLSTRINGMARKERGREMEDYPROC +epoxy_glStringMarkerGREMEDY_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_GREMEDY_string_marker, 49605 /* glStringMarkerGREMEDY */); +} + +static PFNGLSUBPIXELPRECISIONBIASNVPROC +epoxy_glSubpixelPrecisionBiasNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_conservative_raster, 49627 /* glSubpixelPrecisionBiasNV */); +} + +static PFNGLSWIZZLEEXTPROC +epoxy_glSwizzleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 49653 /* glSwizzleEXT */); +} + +static PFNGLSYNCTEXTUREINTELPROC +epoxy_glSyncTextureINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_map_texture, 49666 /* glSyncTextureINTEL */); +} + +static PFNGLTAGSAMPLEBUFFERSGIXPROC +epoxy_glTagSampleBufferSGIX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIX_tag_sample_buffer, 49685 /* glTagSampleBufferSGIX */); +} + +static PFNGLTANGENT3BEXTPROC +epoxy_glTangent3bEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49707 /* glTangent3bEXT */); +} + +static PFNGLTANGENT3BVEXTPROC +epoxy_glTangent3bvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49722 /* glTangent3bvEXT */); +} + +static PFNGLTANGENT3DEXTPROC +epoxy_glTangent3dEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49738 /* glTangent3dEXT */); +} + +static PFNGLTANGENT3DVEXTPROC +epoxy_glTangent3dvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49753 /* glTangent3dvEXT */); +} + +static PFNGLTANGENT3FEXTPROC +epoxy_glTangent3fEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49769 /* glTangent3fEXT */); +} + +static PFNGLTANGENT3FVEXTPROC +epoxy_glTangent3fvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49784 /* glTangent3fvEXT */); +} + +static PFNGLTANGENT3IEXTPROC +epoxy_glTangent3iEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49800 /* glTangent3iEXT */); +} + +static PFNGLTANGENT3IVEXTPROC +epoxy_glTangent3ivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49815 /* glTangent3ivEXT */); +} + +static PFNGLTANGENT3SEXTPROC +epoxy_glTangent3sEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49831 /* glTangent3sEXT */); +} + +static PFNGLTANGENT3SVEXTPROC +epoxy_glTangent3svEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49846 /* glTangent3svEXT */); +} + +static PFNGLTANGENTPOINTEREXTPROC +epoxy_glTangentPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_coordinate_frame, 49862 /* glTangentPointerEXT */); +} + +static PFNGLTBUFFERMASK3DFXPROC +epoxy_glTbufferMask3DFX_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_3DFX_tbuffer, 49882 /* glTbufferMask3DFX */); +} + +static PFNGLTESSELLATIONFACTORAMDPROC +epoxy_glTessellationFactorAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_vertex_shader_tessellator, 49900 /* glTessellationFactorAMD */); +} + +static PFNGLTESSELLATIONMODEAMDPROC +epoxy_glTessellationModeAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_vertex_shader_tessellator, 49924 /* glTessellationModeAMD */); +} + +static PFNGLTESTFENCEAPPLEPROC +epoxy_glTestFenceAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 49946 /* glTestFenceAPPLE */); +} + +static PFNGLTESTFENCENVPROC +epoxy_glTestFenceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_fence, 49963 /* glTestFenceNV */); +} + +static PFNGLTESTOBJECTAPPLEPROC +epoxy_glTestObjectAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_fence, 49977 /* glTestObjectAPPLE */); +} + +static PFNGLTEXBUFFERPROC +epoxy_glTexBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50007 /* "glTexBufferARB" */, + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + 50037 /* "glTexBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 49995 /* "glTexBuffer" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERARBPROC +epoxy_glTexBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_texture_buffer_object, + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50007 /* "glTexBufferARB" */, + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + 50037 /* "glTexBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50007 /* "glTexBufferARB" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFEREXTPROC +epoxy_glTexBufferEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50007 /* "glTexBufferARB" */, + 50037 /* "glTexBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50022 /* "glTexBufferEXT" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFEROESPROC +epoxy_glTexBufferOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_buffer, + Desktop_OpenGL_3_1, + OpenGL_ES_3_2, + GL_extension_GL_ARB_texture_buffer_object, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_EXT_texture_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50037 /* "glTexBufferOES" */, + 49995 /* "glTexBuffer" */, + 49995 /* "glTexBuffer" */, + 50007 /* "glTexBufferARB" */, + 50022 /* "glTexBufferEXT" */, + 50022 /* "glTexBufferEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 50037 /* "glTexBufferOES" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERRANGEPROC +epoxy_glTexBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_buffer_range, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_buffer, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50069 /* "glTexBufferRangeEXT" */, + 50089 /* "glTexBufferRangeOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50052 /* "glTexBufferRange" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERRANGEEXTPROC +epoxy_glTexBufferRangeEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_buffer, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_buffer_range, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50069 /* "glTexBufferRangeEXT" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50089 /* "glTexBufferRangeOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 50069 /* "glTexBufferRangeEXT" */, + providers, entrypoints); +} + +static PFNGLTEXBUFFERRANGEOESPROC +epoxy_glTexBufferRangeOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_buffer, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_buffer_range, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_buffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 50089 /* "glTexBufferRangeOES" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50052 /* "glTexBufferRange" */, + 50069 /* "glTexBufferRangeEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 50089 /* "glTexBufferRangeOES" */, + providers, entrypoints); +} + +static PFNGLTEXBUMPPARAMETERFVATIPROC +epoxy_glTexBumpParameterfvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 50109 /* glTexBumpParameterfvATI */); +} + +static PFNGLTEXBUMPPARAMETERIVATIPROC +epoxy_glTexBumpParameterivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_envmap_bumpmap, 50133 /* glTexBumpParameterivATI */); +} + +static PFNGLTEXCOORD1BOESPROC +epoxy_glTexCoord1bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50157 /* glTexCoord1bOES */); +} + +static PFNGLTEXCOORD1BVOESPROC +epoxy_glTexCoord1bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50173 /* glTexCoord1bvOES */); +} + +static PFNGLTEXCOORD1DPROC +epoxy_glTexCoord1d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50190 /* glTexCoord1d */); +} + +static PFNGLTEXCOORD1DVPROC +epoxy_glTexCoord1dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50203 /* glTexCoord1dv */); +} + +static PFNGLTEXCOORD1FPROC +epoxy_glTexCoord1f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50217 /* glTexCoord1f */); +} + +static PFNGLTEXCOORD1FVPROC +epoxy_glTexCoord1fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50230 /* glTexCoord1fv */); +} + +static PFNGLTEXCOORD1HNVPROC +epoxy_glTexCoord1hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50244 /* glTexCoord1hNV */); +} + +static PFNGLTEXCOORD1HVNVPROC +epoxy_glTexCoord1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50259 /* glTexCoord1hvNV */); +} + +static PFNGLTEXCOORD1IPROC +epoxy_glTexCoord1i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50275 /* glTexCoord1i */); +} + +static PFNGLTEXCOORD1IVPROC +epoxy_glTexCoord1iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50288 /* glTexCoord1iv */); +} + +static PFNGLTEXCOORD1SPROC +epoxy_glTexCoord1s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50302 /* glTexCoord1s */); +} + +static PFNGLTEXCOORD1SVPROC +epoxy_glTexCoord1sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50315 /* glTexCoord1sv */); +} + +static PFNGLTEXCOORD1XOESPROC +epoxy_glTexCoord1xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50329 /* glTexCoord1xOES */); +} + +static PFNGLTEXCOORD1XVOESPROC +epoxy_glTexCoord1xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50345 /* glTexCoord1xvOES */); +} + +static PFNGLTEXCOORD2BOESPROC +epoxy_glTexCoord2bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50362 /* glTexCoord2bOES */); +} + +static PFNGLTEXCOORD2BVOESPROC +epoxy_glTexCoord2bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50378 /* glTexCoord2bvOES */); +} + +static PFNGLTEXCOORD2DPROC +epoxy_glTexCoord2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50395 /* glTexCoord2d */); +} + +static PFNGLTEXCOORD2DVPROC +epoxy_glTexCoord2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50408 /* glTexCoord2dv */); +} + +static PFNGLTEXCOORD2FPROC +epoxy_glTexCoord2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50422 /* glTexCoord2f */); +} + +static PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC +epoxy_glTexCoord2fColor3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50435 /* glTexCoord2fColor3fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC +epoxy_glTexCoord2fColor3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50466 /* glTexCoord2fColor3fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC +epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50498 /* glTexCoord2fColor4fNormal3fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC +epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50537 /* glTexCoord2fColor4fNormal3fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC +epoxy_glTexCoord2fColor4ubVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50577 /* glTexCoord2fColor4ubVertex3fSUN */); +} + +static PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC +epoxy_glTexCoord2fColor4ubVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50609 /* glTexCoord2fColor4ubVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC +epoxy_glTexCoord2fNormal3fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50642 /* glTexCoord2fNormal3fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC +epoxy_glTexCoord2fNormal3fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50674 /* glTexCoord2fNormal3fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FVERTEX3FSUNPROC +epoxy_glTexCoord2fVertex3fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50707 /* glTexCoord2fVertex3fSUN */); +} + +static PFNGLTEXCOORD2FVERTEX3FVSUNPROC +epoxy_glTexCoord2fVertex3fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 50731 /* glTexCoord2fVertex3fvSUN */); +} + +static PFNGLTEXCOORD2FVPROC +epoxy_glTexCoord2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50756 /* glTexCoord2fv */); +} + +static PFNGLTEXCOORD2HNVPROC +epoxy_glTexCoord2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50770 /* glTexCoord2hNV */); +} + +static PFNGLTEXCOORD2HVNVPROC +epoxy_glTexCoord2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50785 /* glTexCoord2hvNV */); +} + +static PFNGLTEXCOORD2IPROC +epoxy_glTexCoord2i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50801 /* glTexCoord2i */); +} + +static PFNGLTEXCOORD2IVPROC +epoxy_glTexCoord2iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50814 /* glTexCoord2iv */); +} + +static PFNGLTEXCOORD2SPROC +epoxy_glTexCoord2s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50828 /* glTexCoord2s */); +} + +static PFNGLTEXCOORD2SVPROC +epoxy_glTexCoord2sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50841 /* glTexCoord2sv */); +} + +static PFNGLTEXCOORD2XOESPROC +epoxy_glTexCoord2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50855 /* glTexCoord2xOES */); +} + +static PFNGLTEXCOORD2XVOESPROC +epoxy_glTexCoord2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 50871 /* glTexCoord2xvOES */); +} + +static PFNGLTEXCOORD3BOESPROC +epoxy_glTexCoord3bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50888 /* glTexCoord3bOES */); +} + +static PFNGLTEXCOORD3BVOESPROC +epoxy_glTexCoord3bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 50904 /* glTexCoord3bvOES */); +} + +static PFNGLTEXCOORD3DPROC +epoxy_glTexCoord3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50921 /* glTexCoord3d */); +} + +static PFNGLTEXCOORD3DVPROC +epoxy_glTexCoord3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50934 /* glTexCoord3dv */); +} + +static PFNGLTEXCOORD3FPROC +epoxy_glTexCoord3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50948 /* glTexCoord3f */); +} + +static PFNGLTEXCOORD3FVPROC +epoxy_glTexCoord3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 50961 /* glTexCoord3fv */); +} + +static PFNGLTEXCOORD3HNVPROC +epoxy_glTexCoord3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50975 /* glTexCoord3hNV */); +} + +static PFNGLTEXCOORD3HVNVPROC +epoxy_glTexCoord3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 50990 /* glTexCoord3hvNV */); +} + +static PFNGLTEXCOORD3IPROC +epoxy_glTexCoord3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51006 /* glTexCoord3i */); +} + +static PFNGLTEXCOORD3IVPROC +epoxy_glTexCoord3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51019 /* glTexCoord3iv */); +} + +static PFNGLTEXCOORD3SPROC +epoxy_glTexCoord3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51033 /* glTexCoord3s */); +} + +static PFNGLTEXCOORD3SVPROC +epoxy_glTexCoord3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51046 /* glTexCoord3sv */); +} + +static PFNGLTEXCOORD3XOESPROC +epoxy_glTexCoord3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51060 /* glTexCoord3xOES */); +} + +static PFNGLTEXCOORD3XVOESPROC +epoxy_glTexCoord3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51076 /* glTexCoord3xvOES */); +} + +static PFNGLTEXCOORD4BOESPROC +epoxy_glTexCoord4bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 51093 /* glTexCoord4bOES */); +} + +static PFNGLTEXCOORD4BVOESPROC +epoxy_glTexCoord4bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 51109 /* glTexCoord4bvOES */); +} + +static PFNGLTEXCOORD4DPROC +epoxy_glTexCoord4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51126 /* glTexCoord4d */); +} + +static PFNGLTEXCOORD4DVPROC +epoxy_glTexCoord4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51139 /* glTexCoord4dv */); +} + +static PFNGLTEXCOORD4FPROC +epoxy_glTexCoord4f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51153 /* glTexCoord4f */); +} + +static PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC +epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51166 /* glTexCoord4fColor4fNormal3fVertex4fSUN */); +} + +static PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC +epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51205 /* glTexCoord4fColor4fNormal3fVertex4fvSUN */); +} + +static PFNGLTEXCOORD4FVERTEX4FSUNPROC +epoxy_glTexCoord4fVertex4fSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51245 /* glTexCoord4fVertex4fSUN */); +} + +static PFNGLTEXCOORD4FVERTEX4FVSUNPROC +epoxy_glTexCoord4fVertex4fvSUN_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SUN_vertex, 51269 /* glTexCoord4fVertex4fvSUN */); +} + +static PFNGLTEXCOORD4FVPROC +epoxy_glTexCoord4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51294 /* glTexCoord4fv */); +} + +static PFNGLTEXCOORD4HNVPROC +epoxy_glTexCoord4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 51308 /* glTexCoord4hNV */); +} + +static PFNGLTEXCOORD4HVNVPROC +epoxy_glTexCoord4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 51323 /* glTexCoord4hvNV */); +} + +static PFNGLTEXCOORD4IPROC +epoxy_glTexCoord4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51339 /* glTexCoord4i */); +} + +static PFNGLTEXCOORD4IVPROC +epoxy_glTexCoord4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51352 /* glTexCoord4iv */); +} + +static PFNGLTEXCOORD4SPROC +epoxy_glTexCoord4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51366 /* glTexCoord4s */); +} + +static PFNGLTEXCOORD4SVPROC +epoxy_glTexCoord4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51379 /* glTexCoord4sv */); +} + +static PFNGLTEXCOORD4XOESPROC +epoxy_glTexCoord4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51393 /* glTexCoord4xOES */); +} + +static PFNGLTEXCOORD4XVOESPROC +epoxy_glTexCoord4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51409 /* glTexCoord4xvOES */); +} + +static PFNGLTEXCOORDFORMATNVPROC +epoxy_glTexCoordFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 51426 /* glTexCoordFormatNV */); +} + +static PFNGLTEXCOORDP1UIPROC +epoxy_glTexCoordP1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51445 /* "glTexCoordP1ui" */, + 51445 /* "glTexCoordP1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51445 /* "glTexCoordP1ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP1UIVPROC +epoxy_glTexCoordP1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51460 /* "glTexCoordP1uiv" */, + 51460 /* "glTexCoordP1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51460 /* "glTexCoordP1uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP2UIPROC +epoxy_glTexCoordP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51476 /* "glTexCoordP2ui" */, + 51476 /* "glTexCoordP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51476 /* "glTexCoordP2ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP2UIVPROC +epoxy_glTexCoordP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51491 /* "glTexCoordP2uiv" */, + 51491 /* "glTexCoordP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51491 /* "glTexCoordP2uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP3UIPROC +epoxy_glTexCoordP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51507 /* "glTexCoordP3ui" */, + 51507 /* "glTexCoordP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51507 /* "glTexCoordP3ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP3UIVPROC +epoxy_glTexCoordP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51522 /* "glTexCoordP3uiv" */, + 51522 /* "glTexCoordP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51522 /* "glTexCoordP3uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP4UIPROC +epoxy_glTexCoordP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51538 /* "glTexCoordP4ui" */, + 51538 /* "glTexCoordP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 51538 /* "glTexCoordP4ui" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDP4UIVPROC +epoxy_glTexCoordP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51553 /* "glTexCoordP4uiv" */, + 51553 /* "glTexCoordP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51553 /* "glTexCoordP4uiv" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDPOINTERPROC +epoxy_glTexCoordPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51569 /* "glTexCoordPointer" */, + 51569 /* "glTexCoordPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 51569 /* "glTexCoordPointer" */, + providers, entrypoints); +} + +static PFNGLTEXCOORDPOINTEREXTPROC +epoxy_glTexCoordPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 51587 /* glTexCoordPointerEXT */); +} + +static PFNGLTEXCOORDPOINTERLISTIBMPROC +epoxy_glTexCoordPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 51608 /* glTexCoordPointerListIBM */); +} + +static PFNGLTEXCOORDPOINTERVINTELPROC +epoxy_glTexCoordPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 51633 /* glTexCoordPointervINTEL */); +} + +static PFNGLTEXENVFPROC +epoxy_glTexEnvf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51657 /* "glTexEnvf" */, + 51657 /* "glTexEnvf" */, + }; + return gl_provider_resolver(entrypoint_strings + 51657 /* "glTexEnvf" */, + providers, entrypoints); +} + +static PFNGLTEXENVFVPROC +epoxy_glTexEnvfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51667 /* "glTexEnvfv" */, + 51667 /* "glTexEnvfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51667 /* "glTexEnvfv" */, + providers, entrypoints); +} + +static PFNGLTEXENVIPROC +epoxy_glTexEnvi_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51678 /* "glTexEnvi" */, + 51678 /* "glTexEnvi" */, + }; + return gl_provider_resolver(entrypoint_strings + 51678 /* "glTexEnvi" */, + providers, entrypoints); +} + +static PFNGLTEXENVIVPROC +epoxy_glTexEnviv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51688 /* "glTexEnviv" */, + 51688 /* "glTexEnviv" */, + }; + return gl_provider_resolver(entrypoint_strings + 51688 /* "glTexEnviv" */, + providers, entrypoints); +} + +static PFNGLTEXENVXPROC +epoxy_glTexEnvx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 51699 /* glTexEnvx */); +} + +static PFNGLTEXENVXOESPROC +epoxy_glTexEnvxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51709 /* glTexEnvxOES */); +} + +static PFNGLTEXENVXVPROC +epoxy_glTexEnvxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 51722 /* glTexEnvxv */); +} + +static PFNGLTEXENVXVOESPROC +epoxy_glTexEnvxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 51733 /* glTexEnvxvOES */); +} + +static PFNGLTEXFILTERFUNCSGISPROC +epoxy_glTexFilterFuncSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture_filter4, 51747 /* glTexFilterFuncSGIS */); +} + +static PFNGLTEXGENDPROC +epoxy_glTexGend_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51767 /* glTexGend */); +} + +static PFNGLTEXGENDVPROC +epoxy_glTexGendv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51777 /* glTexGendv */); +} + +static PFNGLTEXGENFPROC +epoxy_glTexGenf_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51788 /* glTexGenf */); +} + +static PFNGLTEXGENFOESPROC +epoxy_glTexGenfOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51798 /* glTexGenfOES */); +} + +static PFNGLTEXGENFVPROC +epoxy_glTexGenfv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51811 /* glTexGenfv */); +} + +static PFNGLTEXGENFVOESPROC +epoxy_glTexGenfvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51822 /* glTexGenfvOES */); +} + +static PFNGLTEXGENIPROC +epoxy_glTexGeni_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51836 /* glTexGeni */); +} + +static PFNGLTEXGENIOESPROC +epoxy_glTexGeniOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51846 /* glTexGeniOES */); +} + +static PFNGLTEXGENIVPROC +epoxy_glTexGeniv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51859 /* glTexGeniv */); +} + +static PFNGLTEXGENIVOESPROC +epoxy_glTexGenivOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_texture_cube_map, 51870 /* glTexGenivOES */); +} + +static PFNGLTEXGENXOESPROC +epoxy_glTexGenxOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_texture_cube_map, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51884 /* "glTexGenxOES" */, + 51884 /* "glTexGenxOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 51884 /* "glTexGenxOES" */, + providers, entrypoints); +} + +static PFNGLTEXGENXVOESPROC +epoxy_glTexGenxvOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_fixed_point, + GL_extension_GL_OES_texture_cube_map, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51897 /* "glTexGenxvOES" */, + 51897 /* "glTexGenxvOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 51897 /* "glTexGenxvOES" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE1DPROC +epoxy_glTexImage1D_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 51911 /* glTexImage1D */); +} + +static PFNGLTEXIMAGE2DPROC +epoxy_glTexImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51924 /* "glTexImage2D" */, + 51924 /* "glTexImage2D" */, + 51924 /* "glTexImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 51924 /* "glTexImage2D" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE2DMULTISAMPLEPROC +epoxy_glTexImage2DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51937 /* "glTexImage2DMultisample" */, + 51937 /* "glTexImage2DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 51937 /* "glTexImage2DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC +epoxy_glTexImage2DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 51961 /* glTexImage2DMultisampleCoverageNV */); +} + +static PFNGLTEXIMAGE3DPROC +epoxy_glTexImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 51995 /* "glTexImage3D" */, + 51995 /* "glTexImage3D" */, + 52008 /* "glTexImage3DEXT" */, + 52082 /* "glTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 51995 /* "glTexImage3D" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE3DEXTPROC +epoxy_glTexImage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52008 /* "glTexImage3DEXT" */, + 51995 /* "glTexImage3D" */, + 51995 /* "glTexImage3D" */, + 52082 /* "glTexImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52008 /* "glTexImage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE3DMULTISAMPLEPROC +epoxy_glTexImage3DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_texture_multisample, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52024 /* "glTexImage3DMultisample" */, + 52024 /* "glTexImage3DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 52024 /* "glTexImage3DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC +epoxy_glTexImage3DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 52048 /* glTexImage3DMultisampleCoverageNV */); +} + +static PFNGLTEXIMAGE3DOESPROC +epoxy_glTexImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52082 /* "glTexImage3DOES" */, + 51995 /* "glTexImage3D" */, + 51995 /* "glTexImage3D" */, + 52008 /* "glTexImage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52082 /* "glTexImage3DOES" */, + providers, entrypoints); +} + +static PFNGLTEXIMAGE4DSGISPROC +epoxy_glTexImage4DSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture4D, 52098 /* glTexImage4DSGIS */); +} + +static PFNGLTEXPAGECOMMITMENTARBPROC +epoxy_glTexPageCommitmentARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_sparse_texture, + GL_extension_GL_EXT_sparse_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52115 /* "glTexPageCommitmentARB" */, + 52138 /* "glTexPageCommitmentEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52115 /* "glTexPageCommitmentARB" */, + providers, entrypoints); +} + +static PFNGLTEXPAGECOMMITMENTEXTPROC +epoxy_glTexPageCommitmentEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_sparse_texture, + GL_extension_GL_ARB_sparse_texture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52138 /* "glTexPageCommitmentEXT" */, + 52115 /* "glTexPageCommitmentARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 52138 /* "glTexPageCommitmentEXT" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIIVPROC +epoxy_glTexParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52161 /* "glTexParameterIiv" */, + 52161 /* "glTexParameterIiv" */, + 52179 /* "glTexParameterIivEXT" */, + 52179 /* "glTexParameterIivEXT" */, + 52200 /* "glTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52161 /* "glTexParameterIiv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIIVEXTPROC +epoxy_glTexParameterIivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52179 /* "glTexParameterIivEXT" */, + 52179 /* "glTexParameterIivEXT" */, + 52161 /* "glTexParameterIiv" */, + 52161 /* "glTexParameterIiv" */, + 52200 /* "glTexParameterIivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52179 /* "glTexParameterIivEXT" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIIVOESPROC +epoxy_glTexParameterIivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52200 /* "glTexParameterIivOES" */, + 52161 /* "glTexParameterIiv" */, + 52161 /* "glTexParameterIiv" */, + 52179 /* "glTexParameterIivEXT" */, + 52179 /* "glTexParameterIivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52200 /* "glTexParameterIivOES" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIUIVPROC +epoxy_glTexParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52221 /* "glTexParameterIuiv" */, + 52221 /* "glTexParameterIuiv" */, + 52240 /* "glTexParameterIuivEXT" */, + 52240 /* "glTexParameterIuivEXT" */, + 52262 /* "glTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52221 /* "glTexParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIUIVEXTPROC +epoxy_glTexParameterIuivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_border_clamp, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52240 /* "glTexParameterIuivEXT" */, + 52240 /* "glTexParameterIuivEXT" */, + 52221 /* "glTexParameterIuiv" */, + 52221 /* "glTexParameterIuiv" */, + 52262 /* "glTexParameterIuivOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52240 /* "glTexParameterIuivEXT" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIUIVOESPROC +epoxy_glTexParameterIuivOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_border_clamp, + Desktop_OpenGL_3_0, + OpenGL_ES_3_2, + GL_extension_GL_EXT_texture_border_clamp, + GL_extension_GL_EXT_texture_integer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52262 /* "glTexParameterIuivOES" */, + 52221 /* "glTexParameterIuiv" */, + 52221 /* "glTexParameterIuiv" */, + 52240 /* "glTexParameterIuivEXT" */, + 52240 /* "glTexParameterIuivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52262 /* "glTexParameterIuivOES" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERFPROC +epoxy_glTexParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52284 /* "glTexParameterf" */, + 52284 /* "glTexParameterf" */, + 52284 /* "glTexParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 52284 /* "glTexParameterf" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERFVPROC +epoxy_glTexParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52300 /* "glTexParameterfv" */, + 52300 /* "glTexParameterfv" */, + 52300 /* "glTexParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 52300 /* "glTexParameterfv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIPROC +epoxy_glTexParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52317 /* "glTexParameteri" */, + 52317 /* "glTexParameteri" */, + 52317 /* "glTexParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 52317 /* "glTexParameteri" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERIVPROC +epoxy_glTexParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52333 /* "glTexParameteriv" */, + 52333 /* "glTexParameteriv" */, + 52333 /* "glTexParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 52333 /* "glTexParameteriv" */, + providers, entrypoints); +} + +static PFNGLTEXPARAMETERXPROC +epoxy_glTexParameterx_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 52350 /* glTexParameterx */); +} + +static PFNGLTEXPARAMETERXOESPROC +epoxy_glTexParameterxOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 52366 /* glTexParameterxOES */); +} + +static PFNGLTEXPARAMETERXVPROC +epoxy_glTexParameterxv_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 52385 /* glTexParameterxv */); +} + +static PFNGLTEXPARAMETERXVOESPROC +epoxy_glTexParameterxvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 52402 /* glTexParameterxvOES */); +} + +static PFNGLTEXRENDERBUFFERNVPROC +epoxy_glTexRenderbufferNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_explicit_multisample, 52422 /* glTexRenderbufferNV */); +} + +static PFNGLTEXSTORAGE1DPROC +epoxy_glTexStorage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52442 /* "glTexStorage1D" */, + 52442 /* "glTexStorage1D" */, + 52457 /* "glTexStorage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52442 /* "glTexStorage1D" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE1DEXTPROC +epoxy_glTexStorage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_storage, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52457 /* "glTexStorage1DEXT" */, + 52442 /* "glTexStorage1D" */, + 52442 /* "glTexStorage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52457 /* "glTexStorage1DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE2DPROC +epoxy_glTexStorage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + 52490 /* "glTexStorage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52475 /* "glTexStorage2D" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE2DEXTPROC +epoxy_glTexStorage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_storage, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52490 /* "glTexStorage2DEXT" */, + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + 52475 /* "glTexStorage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52490 /* "glTexStorage2DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE2DMULTISAMPLEPROC +epoxy_glTexStorage2DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_storage_multisample, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52508 /* "glTexStorage2DMultisample" */, + 52508 /* "glTexStorage2DMultisample" */, + 52508 /* "glTexStorage2DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 52508 /* "glTexStorage2DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DPROC +epoxy_glTexStorage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + 52549 /* "glTexStorage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52534 /* "glTexStorage3D" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DEXTPROC +epoxy_glTexStorage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_storage, + Desktop_OpenGL_4_2, + GL_extension_GL_ARB_texture_storage, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52549 /* "glTexStorage3DEXT" */, + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + 52534 /* "glTexStorage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52549 /* "glTexStorage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DMULTISAMPLEPROC +epoxy_glTexStorage3DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_storage_multisample, + OpenGL_ES_3_2, + GL_extension_GL_OES_texture_storage_multisample_2d_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + 52593 /* "glTexStorage3DMultisampleOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52567 /* "glTexStorage3DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC +epoxy_glTexStorage3DMultisampleOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_storage_multisample_2d_array, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_storage_multisample, + OpenGL_ES_3_2, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52593 /* "glTexStorage3DMultisampleOES" */, + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + 52567 /* "glTexStorage3DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 52593 /* "glTexStorage3DMultisampleOES" */, + providers, entrypoints); +} + +static PFNGLTEXSTORAGESPARSEAMDPROC +epoxy_glTexStorageSparseAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_sparse_texture, 52622 /* glTexStorageSparseAMD */); +} + +static PFNGLTEXSUBIMAGE1DPROC +epoxy_glTexSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + GL_extension_GL_EXT_subtexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52644 /* "glTexSubImage1D" */, + 52660 /* "glTexSubImage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52644 /* "glTexSubImage1D" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE1DEXTPROC +epoxy_glTexSubImage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_subtexture, + Desktop_OpenGL_1_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52660 /* "glTexSubImage1DEXT" */, + 52644 /* "glTexSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52660 /* "glTexSubImage1DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE2DPROC +epoxy_glTexSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + GL_extension_GL_EXT_subtexture, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + 52695 /* "glTexSubImage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52679 /* "glTexSubImage2D" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE2DEXTPROC +epoxy_glTexSubImage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_subtexture, + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52695 /* "glTexSubImage2DEXT" */, + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + 52679 /* "glTexSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 52695 /* "glTexSubImage2DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE3DPROC +epoxy_glTexSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52714 /* "glTexSubImage3D" */, + 52714 /* "glTexSubImage3D" */, + 52730 /* "glTexSubImage3DEXT" */, + 52749 /* "glTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52714 /* "glTexSubImage3D" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE3DEXTPROC +epoxy_glTexSubImage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_OES_texture_3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52730 /* "glTexSubImage3DEXT" */, + 52714 /* "glTexSubImage3D" */, + 52714 /* "glTexSubImage3D" */, + 52749 /* "glTexSubImage3DOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 52730 /* "glTexSubImage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE3DOESPROC +epoxy_glTexSubImage3DOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_3D, + Desktop_OpenGL_1_2, + OpenGL_ES_3_0, + GL_extension_GL_EXT_texture3D, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52749 /* "glTexSubImage3DOES" */, + 52714 /* "glTexSubImage3D" */, + 52714 /* "glTexSubImage3D" */, + 52730 /* "glTexSubImage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 52749 /* "glTexSubImage3DOES" */, + providers, entrypoints); +} + +static PFNGLTEXSUBIMAGE4DSGISPROC +epoxy_glTexSubImage4DSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture4D, 52768 /* glTexSubImage4DSGIS */); +} + +static PFNGLTEXTUREBARRIERPROC +epoxy_glTextureBarrier_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_texture_barrier, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52788 /* "glTextureBarrier" */, + 52788 /* "glTextureBarrier" */, + }; + return gl_provider_resolver(entrypoint_strings + 52788 /* "glTextureBarrier" */, + providers, entrypoints); +} + +static PFNGLTEXTUREBARRIERNVPROC +epoxy_glTextureBarrierNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_barrier, 52805 /* glTextureBarrierNV */); +} + +static PFNGLTEXTUREBUFFERPROC +epoxy_glTextureBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52824 /* "glTextureBuffer" */, + 52824 /* "glTextureBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 52824 /* "glTextureBuffer" */, + providers, entrypoints); +} + +static PFNGLTEXTUREBUFFEREXTPROC +epoxy_glTextureBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52840 /* glTextureBufferEXT */); +} + +static PFNGLTEXTUREBUFFERRANGEPROC +epoxy_glTextureBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 52859 /* "glTextureBufferRange" */, + 52859 /* "glTextureBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 52859 /* "glTextureBufferRange" */, + providers, entrypoints); +} + +static PFNGLTEXTUREBUFFERRANGEEXTPROC +epoxy_glTextureBufferRangeEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52880 /* glTextureBufferRangeEXT */); +} + +static PFNGLTEXTURECOLORMASKSGISPROC +epoxy_glTextureColorMaskSGIS_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_SGIS_texture_color_mask, 52904 /* glTextureColorMaskSGIS */); +} + +static PFNGLTEXTUREIMAGE1DEXTPROC +epoxy_glTextureImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52927 /* glTextureImage1DEXT */); +} + +static PFNGLTEXTUREIMAGE2DEXTPROC +epoxy_glTextureImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 52947 /* glTextureImage2DEXT */); +} + +static PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC +epoxy_glTextureImage2DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 52967 /* glTextureImage2DMultisampleCoverageNV */); +} + +static PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC +epoxy_glTextureImage2DMultisampleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 53005 /* glTextureImage2DMultisampleNV */); +} + +static PFNGLTEXTUREIMAGE3DEXTPROC +epoxy_glTextureImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53035 /* glTextureImage3DEXT */); +} + +static PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC +epoxy_glTextureImage3DMultisampleCoverageNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 53055 /* glTextureImage3DMultisampleCoverageNV */); +} + +static PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC +epoxy_glTextureImage3DMultisampleNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_texture_multisample, 53093 /* glTextureImage3DMultisampleNV */); +} + +static PFNGLTEXTURELIGHTEXTPROC +epoxy_glTextureLightEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_light_texture, 53123 /* glTextureLightEXT */); +} + +static PFNGLTEXTUREMATERIALEXTPROC +epoxy_glTextureMaterialEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_light_texture, 53141 /* glTextureMaterialEXT */); +} + +static PFNGLTEXTURENORMALEXTPROC +epoxy_glTextureNormalEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_texture_perturb_normal, 53162 /* glTextureNormalEXT */); +} + +static PFNGLTEXTUREPAGECOMMITMENTEXTPROC +epoxy_glTexturePageCommitmentEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53181 /* glTexturePageCommitmentEXT */); +} + +static PFNGLTEXTUREPARAMETERIIVPROC +epoxy_glTextureParameterIiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53208 /* "glTextureParameterIiv" */, + 53208 /* "glTextureParameterIiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53208 /* "glTextureParameterIiv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIIVEXTPROC +epoxy_glTextureParameterIivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53230 /* glTextureParameterIivEXT */); +} + +static PFNGLTEXTUREPARAMETERIUIVPROC +epoxy_glTextureParameterIuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53255 /* "glTextureParameterIuiv" */, + 53255 /* "glTextureParameterIuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53255 /* "glTextureParameterIuiv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIUIVEXTPROC +epoxy_glTextureParameterIuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53278 /* glTextureParameterIuivEXT */); +} + +static PFNGLTEXTUREPARAMETERFPROC +epoxy_glTextureParameterf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53304 /* "glTextureParameterf" */, + 53304 /* "glTextureParameterf" */, + }; + return gl_provider_resolver(entrypoint_strings + 53304 /* "glTextureParameterf" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERFEXTPROC +epoxy_glTextureParameterfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53324 /* glTextureParameterfEXT */); +} + +static PFNGLTEXTUREPARAMETERFVPROC +epoxy_glTextureParameterfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53347 /* "glTextureParameterfv" */, + 53347 /* "glTextureParameterfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53347 /* "glTextureParameterfv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERFVEXTPROC +epoxy_glTextureParameterfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53368 /* glTextureParameterfvEXT */); +} + +static PFNGLTEXTUREPARAMETERIPROC +epoxy_glTextureParameteri_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53392 /* "glTextureParameteri" */, + 53392 /* "glTextureParameteri" */, + }; + return gl_provider_resolver(entrypoint_strings + 53392 /* "glTextureParameteri" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIEXTPROC +epoxy_glTextureParameteriEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53412 /* glTextureParameteriEXT */); +} + +static PFNGLTEXTUREPARAMETERIVPROC +epoxy_glTextureParameteriv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53435 /* "glTextureParameteriv" */, + 53435 /* "glTextureParameteriv" */, + }; + return gl_provider_resolver(entrypoint_strings + 53435 /* "glTextureParameteriv" */, + providers, entrypoints); +} + +static PFNGLTEXTUREPARAMETERIVEXTPROC +epoxy_glTextureParameterivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53456 /* glTextureParameterivEXT */); +} + +static PFNGLTEXTURERANGEAPPLEPROC +epoxy_glTextureRangeAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_texture_range, 53480 /* glTextureRangeAPPLE */); +} + +static PFNGLTEXTURERENDERBUFFEREXTPROC +epoxy_glTextureRenderbufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53500 /* glTextureRenderbufferEXT */); +} + +static PFNGLTEXTURESTORAGE1DPROC +epoxy_glTextureStorage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53525 /* "glTextureStorage1D" */, + 53525 /* "glTextureStorage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53525 /* "glTextureStorage1D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE1DEXTPROC +epoxy_glTextureStorage1DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53544 /* "glTextureStorage1DEXT" */, + 53544 /* "glTextureStorage1DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53544 /* "glTextureStorage1DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DPROC +epoxy_glTextureStorage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53566 /* "glTextureStorage2D" */, + 53566 /* "glTextureStorage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53566 /* "glTextureStorage2D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DEXTPROC +epoxy_glTextureStorage2DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53585 /* "glTextureStorage2DEXT" */, + 53585 /* "glTextureStorage2DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53585 /* "glTextureStorage2DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC +epoxy_glTextureStorage2DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53607 /* "glTextureStorage2DMultisample" */, + 53607 /* "glTextureStorage2DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 53607 /* "glTextureStorage2DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC +epoxy_glTextureStorage2DMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53637 /* glTextureStorage2DMultisampleEXT */); +} + +static PFNGLTEXTURESTORAGE3DPROC +epoxy_glTextureStorage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53670 /* "glTextureStorage3D" */, + 53670 /* "glTextureStorage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53670 /* "glTextureStorage3D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE3DEXTPROC +epoxy_glTextureStorage3DEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_direct_state_access, + GL_extension_GL_EXT_texture_storage, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53689 /* "glTextureStorage3DEXT" */, + 53689 /* "glTextureStorage3DEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53689 /* "glTextureStorage3DEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC +epoxy_glTextureStorage3DMultisample_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53711 /* "glTextureStorage3DMultisample" */, + 53711 /* "glTextureStorage3DMultisample" */, + }; + return gl_provider_resolver(entrypoint_strings + 53711 /* "glTextureStorage3DMultisample" */, + providers, entrypoints); +} + +static PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC +epoxy_glTextureStorage3DMultisampleEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53741 /* glTextureStorage3DMultisampleEXT */); +} + +static PFNGLTEXTURESTORAGESPARSEAMDPROC +epoxy_glTextureStorageSparseAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_sparse_texture, 53774 /* glTextureStorageSparseAMD */); +} + +static PFNGLTEXTURESUBIMAGE1DPROC +epoxy_glTextureSubImage1D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53800 /* "glTextureSubImage1D" */, + 53800 /* "glTextureSubImage1D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53800 /* "glTextureSubImage1D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESUBIMAGE1DEXTPROC +epoxy_glTextureSubImage1DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53820 /* glTextureSubImage1DEXT */); +} + +static PFNGLTEXTURESUBIMAGE2DPROC +epoxy_glTextureSubImage2D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53843 /* "glTextureSubImage2D" */, + 53843 /* "glTextureSubImage2D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53843 /* "glTextureSubImage2D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESUBIMAGE2DEXTPROC +epoxy_glTextureSubImage2DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53863 /* glTextureSubImage2DEXT */); +} + +static PFNGLTEXTURESUBIMAGE3DPROC +epoxy_glTextureSubImage3D_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53886 /* "glTextureSubImage3D" */, + 53886 /* "glTextureSubImage3D" */, + }; + return gl_provider_resolver(entrypoint_strings + 53886 /* "glTextureSubImage3D" */, + providers, entrypoints); +} + +static PFNGLTEXTURESUBIMAGE3DEXTPROC +epoxy_glTextureSubImage3DEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 53906 /* glTextureSubImage3DEXT */); +} + +static PFNGLTEXTUREVIEWPROC +epoxy_glTextureView_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_EXT_texture_view, + GL_extension_GL_OES_texture_view, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53929 /* "glTextureView" */, + 53929 /* "glTextureView" */, + 53943 /* "glTextureViewEXT" */, + 53960 /* "glTextureViewOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 53929 /* "glTextureView" */, + providers, entrypoints); +} + +static PFNGLTEXTUREVIEWEXTPROC +epoxy_glTextureViewEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_texture_view, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_OES_texture_view, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53943 /* "glTextureViewEXT" */, + 53929 /* "glTextureView" */, + 53929 /* "glTextureView" */, + 53960 /* "glTextureViewOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 53943 /* "glTextureViewEXT" */, + providers, entrypoints); +} + +static PFNGLTEXTUREVIEWOESPROC +epoxy_glTextureViewOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_texture_view, + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_texture_view, + GL_extension_GL_EXT_texture_view, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 53960 /* "glTextureViewOES" */, + 53929 /* "glTextureView" */, + 53929 /* "glTextureView" */, + 53943 /* "glTextureViewEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 53960 /* "glTextureViewOES" */, + providers, entrypoints); +} + +static PFNGLTRACKMATRIXNVPROC +epoxy_glTrackMatrixNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 53977 /* glTrackMatrixNV */); +} + +static PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC +epoxy_glTransformFeedbackAttribsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 53993 /* glTransformFeedbackAttribsNV */); +} + +static PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC +epoxy_glTransformFeedbackBufferBase_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54022 /* "glTransformFeedbackBufferBase" */, + 54022 /* "glTransformFeedbackBufferBase" */, + }; + return gl_provider_resolver(entrypoint_strings + 54022 /* "glTransformFeedbackBufferBase" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC +epoxy_glTransformFeedbackBufferRange_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54052 /* "glTransformFeedbackBufferRange" */, + 54052 /* "glTransformFeedbackBufferRange" */, + }; + return gl_provider_resolver(entrypoint_strings + 54052 /* "glTransformFeedbackBufferRange" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC +epoxy_glTransformFeedbackStreamAttribsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 54083 /* glTransformFeedbackStreamAttribsNV */); +} + +static PFNGLTRANSFORMFEEDBACKVARYINGSPROC +epoxy_glTransformFeedbackVaryings_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_transform_feedback, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54118 /* "glTransformFeedbackVaryings" */, + 54118 /* "glTransformFeedbackVaryings" */, + 54146 /* "glTransformFeedbackVaryingsEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54118 /* "glTransformFeedbackVaryings" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC +epoxy_glTransformFeedbackVaryingsEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_transform_feedback, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54146 /* "glTransformFeedbackVaryingsEXT" */, + 54118 /* "glTransformFeedbackVaryings" */, + 54118 /* "glTransformFeedbackVaryings" */, + }; + return gl_provider_resolver(entrypoint_strings + 54146 /* "glTransformFeedbackVaryingsEXT" */, + providers, entrypoints); +} + +static PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC +epoxy_glTransformFeedbackVaryingsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_transform_feedback, 54177 /* glTransformFeedbackVaryingsNV */); +} + +static PFNGLTRANSFORMPATHNVPROC +epoxy_glTransformPathNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 54207 /* glTransformPathNV */); +} + +static PFNGLTRANSLATEDPROC +epoxy_glTranslated_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 54225 /* glTranslated */); +} + +static PFNGLTRANSLATEFPROC +epoxy_glTranslatef_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54238 /* "glTranslatef" */, + 54238 /* "glTranslatef" */, + }; + return gl_provider_resolver(entrypoint_strings + 54238 /* "glTranslatef" */, + providers, entrypoints); +} + +static PFNGLTRANSLATEXPROC +epoxy_glTranslatex_resolver(void) +{ + return gl_single_resolver(OpenGL_ES_1_0, 54251 /* glTranslatex */); +} + +static PFNGLTRANSLATEXOESPROC +epoxy_glTranslatexOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 54264 /* glTranslatexOES */); +} + +static PFNGLUNIFORM1DPROC +epoxy_glUniform1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54280 /* "glUniform1d" */, + 54280 /* "glUniform1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 54280 /* "glUniform1d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1DVPROC +epoxy_glUniform1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54292 /* "glUniform1dv" */, + 54292 /* "glUniform1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54292 /* "glUniform1dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FPROC +epoxy_glUniform1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54305 /* "glUniform1f" */, + 54305 /* "glUniform1f" */, + 54317 /* "glUniform1fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54305 /* "glUniform1f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FARBPROC +epoxy_glUniform1fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54317 /* "glUniform1fARB" */, + 54305 /* "glUniform1f" */, + 54305 /* "glUniform1f" */, + }; + return gl_provider_resolver(entrypoint_strings + 54317 /* "glUniform1fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FVPROC +epoxy_glUniform1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54332 /* "glUniform1fv" */, + 54332 /* "glUniform1fv" */, + 54345 /* "glUniform1fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54332 /* "glUniform1fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1FVARBPROC +epoxy_glUniform1fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54345 /* "glUniform1fvARB" */, + 54332 /* "glUniform1fv" */, + 54332 /* "glUniform1fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54345 /* "glUniform1fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IPROC +epoxy_glUniform1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54361 /* "glUniform1i" */, + 54361 /* "glUniform1i" */, + 54441 /* "glUniform1iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54361 /* "glUniform1i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1I64ARBPROC +epoxy_glUniform1i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54373 /* glUniform1i64ARB */); +} + +static PFNGLUNIFORM1I64NVPROC +epoxy_glUniform1i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54390 /* "glUniform1i64NV" */, + 54390 /* "glUniform1i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54390 /* "glUniform1i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1I64VARBPROC +epoxy_glUniform1i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54406 /* glUniform1i64vARB */); +} + +static PFNGLUNIFORM1I64VNVPROC +epoxy_glUniform1i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54424 /* "glUniform1i64vNV" */, + 54424 /* "glUniform1i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54424 /* "glUniform1i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IARBPROC +epoxy_glUniform1iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54441 /* "glUniform1iARB" */, + 54361 /* "glUniform1i" */, + 54361 /* "glUniform1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 54441 /* "glUniform1iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IVPROC +epoxy_glUniform1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54456 /* "glUniform1iv" */, + 54456 /* "glUniform1iv" */, + 54469 /* "glUniform1ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54456 /* "glUniform1iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1IVARBPROC +epoxy_glUniform1ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54469 /* "glUniform1ivARB" */, + 54456 /* "glUniform1iv" */, + 54456 /* "glUniform1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54469 /* "glUniform1ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIPROC +epoxy_glUniform1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54485 /* "glUniform1ui" */, + 54485 /* "glUniform1ui" */, + 54570 /* "glUniform1uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54485 /* "glUniform1ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UI64ARBPROC +epoxy_glUniform1ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54498 /* glUniform1ui64ARB */); +} + +static PFNGLUNIFORM1UI64NVPROC +epoxy_glUniform1ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54516 /* "glUniform1ui64NV" */, + 54516 /* "glUniform1ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54516 /* "glUniform1ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UI64VARBPROC +epoxy_glUniform1ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54533 /* glUniform1ui64vARB */); +} + +static PFNGLUNIFORM1UI64VNVPROC +epoxy_glUniform1ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54552 /* "glUniform1ui64vNV" */, + 54552 /* "glUniform1ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54552 /* "glUniform1ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIEXTPROC +epoxy_glUniform1uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54570 /* "glUniform1uiEXT" */, + 54485 /* "glUniform1ui" */, + 54485 /* "glUniform1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 54570 /* "glUniform1uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIVPROC +epoxy_glUniform1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54586 /* "glUniform1uiv" */, + 54586 /* "glUniform1uiv" */, + 54600 /* "glUniform1uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54586 /* "glUniform1uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM1UIVEXTPROC +epoxy_glUniform1uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54600 /* "glUniform1uivEXT" */, + 54586 /* "glUniform1uiv" */, + 54586 /* "glUniform1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54600 /* "glUniform1uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2DPROC +epoxy_glUniform2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54617 /* "glUniform2d" */, + 54617 /* "glUniform2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 54617 /* "glUniform2d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2DVPROC +epoxy_glUniform2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54629 /* "glUniform2dv" */, + 54629 /* "glUniform2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54629 /* "glUniform2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FPROC +epoxy_glUniform2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54642 /* "glUniform2f" */, + 54642 /* "glUniform2f" */, + 54654 /* "glUniform2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54642 /* "glUniform2f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FARBPROC +epoxy_glUniform2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54654 /* "glUniform2fARB" */, + 54642 /* "glUniform2f" */, + 54642 /* "glUniform2f" */, + }; + return gl_provider_resolver(entrypoint_strings + 54654 /* "glUniform2fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FVPROC +epoxy_glUniform2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54669 /* "glUniform2fv" */, + 54669 /* "glUniform2fv" */, + 54682 /* "glUniform2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54669 /* "glUniform2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2FVARBPROC +epoxy_glUniform2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54682 /* "glUniform2fvARB" */, + 54669 /* "glUniform2fv" */, + 54669 /* "glUniform2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54682 /* "glUniform2fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IPROC +epoxy_glUniform2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54698 /* "glUniform2i" */, + 54698 /* "glUniform2i" */, + 54778 /* "glUniform2iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54698 /* "glUniform2i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2I64ARBPROC +epoxy_glUniform2i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54710 /* glUniform2i64ARB */); +} + +static PFNGLUNIFORM2I64NVPROC +epoxy_glUniform2i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54727 /* "glUniform2i64NV" */, + 54727 /* "glUniform2i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54727 /* "glUniform2i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2I64VARBPROC +epoxy_glUniform2i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54743 /* glUniform2i64vARB */); +} + +static PFNGLUNIFORM2I64VNVPROC +epoxy_glUniform2i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54761 /* "glUniform2i64vNV" */, + 54761 /* "glUniform2i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54761 /* "glUniform2i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IARBPROC +epoxy_glUniform2iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54778 /* "glUniform2iARB" */, + 54698 /* "glUniform2i" */, + 54698 /* "glUniform2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 54778 /* "glUniform2iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IVPROC +epoxy_glUniform2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54793 /* "glUniform2iv" */, + 54793 /* "glUniform2iv" */, + 54806 /* "glUniform2ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54793 /* "glUniform2iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2IVARBPROC +epoxy_glUniform2ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54806 /* "glUniform2ivARB" */, + 54793 /* "glUniform2iv" */, + 54793 /* "glUniform2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54806 /* "glUniform2ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIPROC +epoxy_glUniform2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54822 /* "glUniform2ui" */, + 54822 /* "glUniform2ui" */, + 54907 /* "glUniform2uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54822 /* "glUniform2ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UI64ARBPROC +epoxy_glUniform2ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54835 /* glUniform2ui64ARB */); +} + +static PFNGLUNIFORM2UI64NVPROC +epoxy_glUniform2ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54853 /* "glUniform2ui64NV" */, + 54853 /* "glUniform2ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54853 /* "glUniform2ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UI64VARBPROC +epoxy_glUniform2ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 54870 /* glUniform2ui64vARB */); +} + +static PFNGLUNIFORM2UI64VNVPROC +epoxy_glUniform2ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54889 /* "glUniform2ui64vNV" */, + 54889 /* "glUniform2ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 54889 /* "glUniform2ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIEXTPROC +epoxy_glUniform2uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54907 /* "glUniform2uiEXT" */, + 54822 /* "glUniform2ui" */, + 54822 /* "glUniform2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 54907 /* "glUniform2uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIVPROC +epoxy_glUniform2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54923 /* "glUniform2uiv" */, + 54923 /* "glUniform2uiv" */, + 54937 /* "glUniform2uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 54923 /* "glUniform2uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM2UIVEXTPROC +epoxy_glUniform2uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54937 /* "glUniform2uivEXT" */, + 54923 /* "glUniform2uiv" */, + 54923 /* "glUniform2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54937 /* "glUniform2uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3DPROC +epoxy_glUniform3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54954 /* "glUniform3d" */, + 54954 /* "glUniform3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 54954 /* "glUniform3d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3DVPROC +epoxy_glUniform3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54966 /* "glUniform3dv" */, + 54966 /* "glUniform3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 54966 /* "glUniform3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FPROC +epoxy_glUniform3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54979 /* "glUniform3f" */, + 54979 /* "glUniform3f" */, + 54991 /* "glUniform3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 54979 /* "glUniform3f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FARBPROC +epoxy_glUniform3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 54991 /* "glUniform3fARB" */, + 54979 /* "glUniform3f" */, + 54979 /* "glUniform3f" */, + }; + return gl_provider_resolver(entrypoint_strings + 54991 /* "glUniform3fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FVPROC +epoxy_glUniform3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55006 /* "glUniform3fv" */, + 55006 /* "glUniform3fv" */, + 55019 /* "glUniform3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55006 /* "glUniform3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3FVARBPROC +epoxy_glUniform3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55019 /* "glUniform3fvARB" */, + 55006 /* "glUniform3fv" */, + 55006 /* "glUniform3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55019 /* "glUniform3fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IPROC +epoxy_glUniform3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55035 /* "glUniform3i" */, + 55035 /* "glUniform3i" */, + 55115 /* "glUniform3iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55035 /* "glUniform3i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3I64ARBPROC +epoxy_glUniform3i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55047 /* glUniform3i64ARB */); +} + +static PFNGLUNIFORM3I64NVPROC +epoxy_glUniform3i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55064 /* "glUniform3i64NV" */, + 55064 /* "glUniform3i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55064 /* "glUniform3i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3I64VARBPROC +epoxy_glUniform3i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55080 /* glUniform3i64vARB */); +} + +static PFNGLUNIFORM3I64VNVPROC +epoxy_glUniform3i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55098 /* "glUniform3i64vNV" */, + 55098 /* "glUniform3i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55098 /* "glUniform3i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IARBPROC +epoxy_glUniform3iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55115 /* "glUniform3iARB" */, + 55035 /* "glUniform3i" */, + 55035 /* "glUniform3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 55115 /* "glUniform3iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IVPROC +epoxy_glUniform3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55130 /* "glUniform3iv" */, + 55130 /* "glUniform3iv" */, + 55143 /* "glUniform3ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55130 /* "glUniform3iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3IVARBPROC +epoxy_glUniform3ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55143 /* "glUniform3ivARB" */, + 55130 /* "glUniform3iv" */, + 55130 /* "glUniform3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55143 /* "glUniform3ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIPROC +epoxy_glUniform3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55159 /* "glUniform3ui" */, + 55159 /* "glUniform3ui" */, + 55244 /* "glUniform3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55159 /* "glUniform3ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UI64ARBPROC +epoxy_glUniform3ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55172 /* glUniform3ui64ARB */); +} + +static PFNGLUNIFORM3UI64NVPROC +epoxy_glUniform3ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55190 /* "glUniform3ui64NV" */, + 55190 /* "glUniform3ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55190 /* "glUniform3ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UI64VARBPROC +epoxy_glUniform3ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55207 /* glUniform3ui64vARB */); +} + +static PFNGLUNIFORM3UI64VNVPROC +epoxy_glUniform3ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55226 /* "glUniform3ui64vNV" */, + 55226 /* "glUniform3ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55226 /* "glUniform3ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIEXTPROC +epoxy_glUniform3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55244 /* "glUniform3uiEXT" */, + 55159 /* "glUniform3ui" */, + 55159 /* "glUniform3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 55244 /* "glUniform3uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIVPROC +epoxy_glUniform3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55260 /* "glUniform3uiv" */, + 55260 /* "glUniform3uiv" */, + 55274 /* "glUniform3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55260 /* "glUniform3uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM3UIVEXTPROC +epoxy_glUniform3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55274 /* "glUniform3uivEXT" */, + 55260 /* "glUniform3uiv" */, + 55260 /* "glUniform3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55274 /* "glUniform3uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4DPROC +epoxy_glUniform4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55291 /* "glUniform4d" */, + 55291 /* "glUniform4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 55291 /* "glUniform4d" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4DVPROC +epoxy_glUniform4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55303 /* "glUniform4dv" */, + 55303 /* "glUniform4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55303 /* "glUniform4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FPROC +epoxy_glUniform4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55316 /* "glUniform4f" */, + 55316 /* "glUniform4f" */, + 55328 /* "glUniform4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55316 /* "glUniform4f" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FARBPROC +epoxy_glUniform4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55328 /* "glUniform4fARB" */, + 55316 /* "glUniform4f" */, + 55316 /* "glUniform4f" */, + }; + return gl_provider_resolver(entrypoint_strings + 55328 /* "glUniform4fARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FVPROC +epoxy_glUniform4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55343 /* "glUniform4fv" */, + 55343 /* "glUniform4fv" */, + 55356 /* "glUniform4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55343 /* "glUniform4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4FVARBPROC +epoxy_glUniform4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55356 /* "glUniform4fvARB" */, + 55343 /* "glUniform4fv" */, + 55343 /* "glUniform4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55356 /* "glUniform4fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IPROC +epoxy_glUniform4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55372 /* "glUniform4i" */, + 55372 /* "glUniform4i" */, + 55452 /* "glUniform4iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55372 /* "glUniform4i" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4I64ARBPROC +epoxy_glUniform4i64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55384 /* glUniform4i64ARB */); +} + +static PFNGLUNIFORM4I64NVPROC +epoxy_glUniform4i64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55401 /* "glUniform4i64NV" */, + 55401 /* "glUniform4i64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55401 /* "glUniform4i64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4I64VARBPROC +epoxy_glUniform4i64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55417 /* glUniform4i64vARB */); +} + +static PFNGLUNIFORM4I64VNVPROC +epoxy_glUniform4i64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55435 /* "glUniform4i64vNV" */, + 55435 /* "glUniform4i64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55435 /* "glUniform4i64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IARBPROC +epoxy_glUniform4iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55452 /* "glUniform4iARB" */, + 55372 /* "glUniform4i" */, + 55372 /* "glUniform4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 55452 /* "glUniform4iARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IVPROC +epoxy_glUniform4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55467 /* "glUniform4iv" */, + 55467 /* "glUniform4iv" */, + 55480 /* "glUniform4ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55467 /* "glUniform4iv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4IVARBPROC +epoxy_glUniform4ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55480 /* "glUniform4ivARB" */, + 55467 /* "glUniform4iv" */, + 55467 /* "glUniform4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55480 /* "glUniform4ivARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIPROC +epoxy_glUniform4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55496 /* "glUniform4ui" */, + 55496 /* "glUniform4ui" */, + 55581 /* "glUniform4uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55496 /* "glUniform4ui" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UI64ARBPROC +epoxy_glUniform4ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55509 /* glUniform4ui64ARB */); +} + +static PFNGLUNIFORM4UI64NVPROC +epoxy_glUniform4ui64NV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55527 /* "glUniform4ui64NV" */, + 55527 /* "glUniform4ui64NV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55527 /* "glUniform4ui64NV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UI64VARBPROC +epoxy_glUniform4ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_gpu_shader_int64, 55544 /* glUniform4ui64vARB */); +} + +static PFNGLUNIFORM4UI64VNVPROC +epoxy_glUniform4ui64vNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_AMD_gpu_shader_int64, + GL_extension_GL_NV_gpu_shader5, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55563 /* "glUniform4ui64vNV" */, + 55563 /* "glUniform4ui64vNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55563 /* "glUniform4ui64vNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIEXTPROC +epoxy_glUniform4uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55581 /* "glUniform4uiEXT" */, + 55496 /* "glUniform4ui" */, + 55496 /* "glUniform4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 55581 /* "glUniform4uiEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIVPROC +epoxy_glUniform4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_EXT_gpu_shader4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55597 /* "glUniform4uiv" */, + 55597 /* "glUniform4uiv" */, + 55611 /* "glUniform4uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 55597 /* "glUniform4uiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORM4UIVEXTPROC +epoxy_glUniform4uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_gpu_shader4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55611 /* "glUniform4uivEXT" */, + 55597 /* "glUniform4uiv" */, + 55597 /* "glUniform4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55611 /* "glUniform4uivEXT" */, + providers, entrypoints); +} + +static PFNGLUNIFORMBLOCKBINDINGPROC +epoxy_glUniformBlockBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_1, + GL_extension_GL_ARB_uniform_buffer_object, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55628 /* "glUniformBlockBinding" */, + 55628 /* "glUniformBlockBinding" */, + 55628 /* "glUniformBlockBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 55628 /* "glUniformBlockBinding" */, + providers, entrypoints); +} + +static PFNGLUNIFORMBUFFEREXTPROC +epoxy_glUniformBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_bindable_uniform, 55650 /* glUniformBufferEXT */); +} + +static PFNGLUNIFORMHANDLEUI64ARBPROC +epoxy_glUniformHandleui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 55669 /* glUniformHandleui64ARB */); +} + +static PFNGLUNIFORMHANDLEUI64NVPROC +epoxy_glUniformHandleui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 55692 /* glUniformHandleui64NV */); +} + +static PFNGLUNIFORMHANDLEUI64VARBPROC +epoxy_glUniformHandleui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 55714 /* glUniformHandleui64vARB */); +} + +static PFNGLUNIFORMHANDLEUI64VNVPROC +epoxy_glUniformHandleui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_bindless_texture, 55738 /* glUniformHandleui64vNV */); +} + +static PFNGLUNIFORMMATRIX2DVPROC +epoxy_glUniformMatrix2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55761 /* "glUniformMatrix2dv" */, + 55761 /* "glUniformMatrix2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55761 /* "glUniformMatrix2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2FVPROC +epoxy_glUniformMatrix2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55780 /* "glUniformMatrix2fv" */, + 55780 /* "glUniformMatrix2fv" */, + 55799 /* "glUniformMatrix2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55780 /* "glUniformMatrix2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2FVARBPROC +epoxy_glUniformMatrix2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55799 /* "glUniformMatrix2fvARB" */, + 55780 /* "glUniformMatrix2fv" */, + 55780 /* "glUniformMatrix2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55799 /* "glUniformMatrix2fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X3DVPROC +epoxy_glUniformMatrix2x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55821 /* "glUniformMatrix2x3dv" */, + 55821 /* "glUniformMatrix2x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55821 /* "glUniformMatrix2x3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X3FVPROC +epoxy_glUniformMatrix2x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55842 /* "glUniformMatrix2x3fv" */, + 55842 /* "glUniformMatrix2x3fv" */, + 55863 /* "glUniformMatrix2x3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55842 /* "glUniformMatrix2x3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X3FVNVPROC +epoxy_glUniformMatrix2x3fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55863 /* "glUniformMatrix2x3fvNV" */, + 55842 /* "glUniformMatrix2x3fv" */, + 55842 /* "glUniformMatrix2x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55863 /* "glUniformMatrix2x3fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X4DVPROC +epoxy_glUniformMatrix2x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55886 /* "glUniformMatrix2x4dv" */, + 55886 /* "glUniformMatrix2x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55886 /* "glUniformMatrix2x4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X4FVPROC +epoxy_glUniformMatrix2x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55907 /* "glUniformMatrix2x4fv" */, + 55907 /* "glUniformMatrix2x4fv" */, + 55928 /* "glUniformMatrix2x4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 55907 /* "glUniformMatrix2x4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX2X4FVNVPROC +epoxy_glUniformMatrix2x4fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55928 /* "glUniformMatrix2x4fvNV" */, + 55907 /* "glUniformMatrix2x4fv" */, + 55907 /* "glUniformMatrix2x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55928 /* "glUniformMatrix2x4fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3DVPROC +epoxy_glUniformMatrix3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55951 /* "glUniformMatrix3dv" */, + 55951 /* "glUniformMatrix3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55951 /* "glUniformMatrix3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3FVPROC +epoxy_glUniformMatrix3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55970 /* "glUniformMatrix3fv" */, + 55970 /* "glUniformMatrix3fv" */, + 55989 /* "glUniformMatrix3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 55970 /* "glUniformMatrix3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3FVARBPROC +epoxy_glUniformMatrix3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 55989 /* "glUniformMatrix3fvARB" */, + 55970 /* "glUniformMatrix3fv" */, + 55970 /* "glUniformMatrix3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 55989 /* "glUniformMatrix3fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X2DVPROC +epoxy_glUniformMatrix3x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56011 /* "glUniformMatrix3x2dv" */, + 56011 /* "glUniformMatrix3x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56011 /* "glUniformMatrix3x2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X2FVPROC +epoxy_glUniformMatrix3x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56032 /* "glUniformMatrix3x2fv" */, + 56032 /* "glUniformMatrix3x2fv" */, + 56053 /* "glUniformMatrix3x2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56032 /* "glUniformMatrix3x2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X2FVNVPROC +epoxy_glUniformMatrix3x2fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56053 /* "glUniformMatrix3x2fvNV" */, + 56032 /* "glUniformMatrix3x2fv" */, + 56032 /* "glUniformMatrix3x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56053 /* "glUniformMatrix3x2fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X4DVPROC +epoxy_glUniformMatrix3x4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56076 /* "glUniformMatrix3x4dv" */, + 56076 /* "glUniformMatrix3x4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56076 /* "glUniformMatrix3x4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X4FVPROC +epoxy_glUniformMatrix3x4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56097 /* "glUniformMatrix3x4fv" */, + 56097 /* "glUniformMatrix3x4fv" */, + 56118 /* "glUniformMatrix3x4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56097 /* "glUniformMatrix3x4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX3X4FVNVPROC +epoxy_glUniformMatrix3x4fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56118 /* "glUniformMatrix3x4fvNV" */, + 56097 /* "glUniformMatrix3x4fv" */, + 56097 /* "glUniformMatrix3x4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56118 /* "glUniformMatrix3x4fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4DVPROC +epoxy_glUniformMatrix4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56141 /* "glUniformMatrix4dv" */, + 56141 /* "glUniformMatrix4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56141 /* "glUniformMatrix4dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4FVPROC +epoxy_glUniformMatrix4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56160 /* "glUniformMatrix4fv" */, + 56160 /* "glUniformMatrix4fv" */, + 56179 /* "glUniformMatrix4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56160 /* "glUniformMatrix4fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4FVARBPROC +epoxy_glUniformMatrix4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56179 /* "glUniformMatrix4fvARB" */, + 56160 /* "glUniformMatrix4fv" */, + 56160 /* "glUniformMatrix4fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56179 /* "glUniformMatrix4fvARB" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X2DVPROC +epoxy_glUniformMatrix4x2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56201 /* "glUniformMatrix4x2dv" */, + 56201 /* "glUniformMatrix4x2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56201 /* "glUniformMatrix4x2dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X2FVPROC +epoxy_glUniformMatrix4x2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56222 /* "glUniformMatrix4x2fv" */, + 56222 /* "glUniformMatrix4x2fv" */, + 56243 /* "glUniformMatrix4x2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56222 /* "glUniformMatrix4x2fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X2FVNVPROC +epoxy_glUniformMatrix4x2fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56243 /* "glUniformMatrix4x2fvNV" */, + 56222 /* "glUniformMatrix4x2fv" */, + 56222 /* "glUniformMatrix4x2fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56243 /* "glUniformMatrix4x2fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X3DVPROC +epoxy_glUniformMatrix4x3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_gpu_shader_fp64, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56266 /* "glUniformMatrix4x3dv" */, + 56266 /* "glUniformMatrix4x3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56266 /* "glUniformMatrix4x3dv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X3FVPROC +epoxy_glUniformMatrix4x3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + GL_extension_GL_NV_non_square_matrices, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56287 /* "glUniformMatrix4x3fv" */, + 56287 /* "glUniformMatrix4x3fv" */, + 56308 /* "glUniformMatrix4x3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 56287 /* "glUniformMatrix4x3fv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMMATRIX4X3FVNVPROC +epoxy_glUniformMatrix4x3fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_non_square_matrices, + Desktop_OpenGL_2_1, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56308 /* "glUniformMatrix4x3fvNV" */, + 56287 /* "glUniformMatrix4x3fv" */, + 56287 /* "glUniformMatrix4x3fv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56308 /* "glUniformMatrix4x3fvNV" */, + providers, entrypoints); +} + +static PFNGLUNIFORMSUBROUTINESUIVPROC +epoxy_glUniformSubroutinesuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_0, + GL_extension_GL_ARB_shader_subroutine, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56331 /* "glUniformSubroutinesuiv" */, + 56331 /* "glUniformSubroutinesuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 56331 /* "glUniformSubroutinesuiv" */, + providers, entrypoints); +} + +static PFNGLUNIFORMUI64NVPROC +epoxy_glUniformui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 56355 /* glUniformui64NV */); +} + +static PFNGLUNIFORMUI64VNVPROC +epoxy_glUniformui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_shader_buffer_load, 56371 /* glUniformui64vNV */); +} + +static PFNGLUNLOCKARRAYSEXTPROC +epoxy_glUnlockArraysEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_compiled_vertex_array, 56388 /* glUnlockArraysEXT */); +} + +static PFNGLUNMAPBUFFERPROC +epoxy_glUnmapBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56406 /* "glUnmapBuffer" */, + 56406 /* "glUnmapBuffer" */, + 56420 /* "glUnmapBufferARB" */, + 56437 /* "glUnmapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 56406 /* "glUnmapBuffer" */, + providers, entrypoints); +} + +static PFNGLUNMAPBUFFERARBPROC +epoxy_glUnmapBufferARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_buffer_object, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_OES_mapbuffer, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56420 /* "glUnmapBufferARB" */, + 56406 /* "glUnmapBuffer" */, + 56406 /* "glUnmapBuffer" */, + 56437 /* "glUnmapBufferOES" */, + }; + return gl_provider_resolver(entrypoint_strings + 56420 /* "glUnmapBufferARB" */, + providers, entrypoints); +} + +static PFNGLUNMAPBUFFEROESPROC +epoxy_glUnmapBufferOES_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_OES_mapbuffer, + Desktop_OpenGL_1_5, + OpenGL_ES_3_0, + GL_extension_GL_ARB_vertex_buffer_object, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56437 /* "glUnmapBufferOES" */, + 56406 /* "glUnmapBuffer" */, + 56406 /* "glUnmapBuffer" */, + 56420 /* "glUnmapBufferARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56437 /* "glUnmapBufferOES" */, + providers, entrypoints); +} + +static PFNGLUNMAPNAMEDBUFFERPROC +epoxy_glUnmapNamedBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56454 /* "glUnmapNamedBuffer" */, + 56454 /* "glUnmapNamedBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 56454 /* "glUnmapNamedBuffer" */, + providers, entrypoints); +} + +static PFNGLUNMAPNAMEDBUFFEREXTPROC +epoxy_glUnmapNamedBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 56473 /* glUnmapNamedBufferEXT */); +} + +static PFNGLUNMAPOBJECTBUFFERATIPROC +epoxy_glUnmapObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_map_object_buffer, 56495 /* glUnmapObjectBufferATI */); +} + +static PFNGLUNMAPTEXTURE2DINTELPROC +epoxy_glUnmapTexture2DINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_map_texture, 56518 /* glUnmapTexture2DINTEL */); +} + +static PFNGLUPDATEOBJECTBUFFERATIPROC +epoxy_glUpdateObjectBufferATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 56540 /* glUpdateObjectBufferATI */); +} + +static PFNGLUSEPROGRAMPROC +epoxy_glUseProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56564 /* "glUseProgram" */, + 56564 /* "glUseProgram" */, + 56577 /* "glUseProgramObjectARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56564 /* "glUseProgram" */, + providers, entrypoints); +} + +static PFNGLUSEPROGRAMOBJECTARBPROC +epoxy_glUseProgramObjectARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56577 /* "glUseProgramObjectARB" */, + 56564 /* "glUseProgram" */, + 56564 /* "glUseProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 56577 /* "glUseProgramObjectARB" */, + providers, entrypoints); +} + +static PFNGLUSEPROGRAMSTAGESPROC +epoxy_glUseProgramStages_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56599 /* "glUseProgramStages" */, + 56599 /* "glUseProgramStages" */, + 56599 /* "glUseProgramStages" */, + }; + return gl_provider_resolver(entrypoint_strings + 56599 /* "glUseProgramStages" */, + providers, entrypoints); +} + +static PFNGLUSEPROGRAMSTAGESEXTPROC +epoxy_glUseProgramStagesEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 56618 /* glUseProgramStagesEXT */); +} + +static PFNGLUSESHADERPROGRAMEXTPROC +epoxy_glUseShaderProgramEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 56640 /* glUseShaderProgramEXT */); +} + +static PFNGLVDPAUFININVPROC +epoxy_glVDPAUFiniNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56662 /* glVDPAUFiniNV */); +} + +static PFNGLVDPAUGETSURFACEIVNVPROC +epoxy_glVDPAUGetSurfaceivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56676 /* glVDPAUGetSurfaceivNV */); +} + +static PFNGLVDPAUINITNVPROC +epoxy_glVDPAUInitNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56698 /* glVDPAUInitNV */); +} + +static PFNGLVDPAUISSURFACENVPROC +epoxy_glVDPAUIsSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56712 /* glVDPAUIsSurfaceNV */); +} + +static PFNGLVDPAUMAPSURFACESNVPROC +epoxy_glVDPAUMapSurfacesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56731 /* glVDPAUMapSurfacesNV */); +} + +static PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC +epoxy_glVDPAURegisterOutputSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56752 /* glVDPAURegisterOutputSurfaceNV */); +} + +static PFNGLVDPAUREGISTERVIDEOSURFACENVPROC +epoxy_glVDPAURegisterVideoSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56783 /* glVDPAURegisterVideoSurfaceNV */); +} + +static PFNGLVDPAUSURFACEACCESSNVPROC +epoxy_glVDPAUSurfaceAccessNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56813 /* glVDPAUSurfaceAccessNV */); +} + +static PFNGLVDPAUUNMAPSURFACESNVPROC +epoxy_glVDPAUUnmapSurfacesNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56836 /* glVDPAUUnmapSurfacesNV */); +} + +static PFNGLVDPAUUNREGISTERSURFACENVPROC +epoxy_glVDPAUUnregisterSurfaceNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vdpau_interop, 56859 /* glVDPAUUnregisterSurfaceNV */); +} + +static PFNGLVALIDATEPROGRAMPROC +epoxy_glValidateProgram_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_shader_objects, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56886 /* "glValidateProgram" */, + 56886 /* "glValidateProgram" */, + 56904 /* "glValidateProgramARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 56886 /* "glValidateProgram" */, + providers, entrypoints); +} + +static PFNGLVALIDATEPROGRAMARBPROC +epoxy_glValidateProgramARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_shader_objects, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56904 /* "glValidateProgramARB" */, + 56886 /* "glValidateProgram" */, + 56886 /* "glValidateProgram" */, + }; + return gl_provider_resolver(entrypoint_strings + 56904 /* "glValidateProgramARB" */, + providers, entrypoints); +} + +static PFNGLVALIDATEPROGRAMPIPELINEPROC +epoxy_glValidateProgramPipeline_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_separate_shader_objects, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 56925 /* "glValidateProgramPipeline" */, + 56925 /* "glValidateProgramPipeline" */, + 56925 /* "glValidateProgramPipeline" */, + }; + return gl_provider_resolver(entrypoint_strings + 56925 /* "glValidateProgramPipeline" */, + providers, entrypoints); +} + +static PFNGLVALIDATEPROGRAMPIPELINEEXTPROC +epoxy_glValidateProgramPipelineEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_separate_shader_objects, 56951 /* glValidateProgramPipelineEXT */); +} + +static PFNGLVARIANTARRAYOBJECTATIPROC +epoxy_glVariantArrayObjectATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_array_object, 56980 /* glVariantArrayObjectATI */); +} + +static PFNGLVARIANTPOINTEREXTPROC +epoxy_glVariantPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57004 /* glVariantPointerEXT */); +} + +static PFNGLVARIANTBVEXTPROC +epoxy_glVariantbvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57024 /* glVariantbvEXT */); +} + +static PFNGLVARIANTDVEXTPROC +epoxy_glVariantdvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57039 /* glVariantdvEXT */); +} + +static PFNGLVARIANTFVEXTPROC +epoxy_glVariantfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57054 /* glVariantfvEXT */); +} + +static PFNGLVARIANTIVEXTPROC +epoxy_glVariantivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57069 /* glVariantivEXT */); +} + +static PFNGLVARIANTSVEXTPROC +epoxy_glVariantsvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57084 /* glVariantsvEXT */); +} + +static PFNGLVARIANTUBVEXTPROC +epoxy_glVariantubvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57099 /* glVariantubvEXT */); +} + +static PFNGLVARIANTUIVEXTPROC +epoxy_glVariantuivEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57115 /* glVariantuivEXT */); +} + +static PFNGLVARIANTUSVEXTPROC +epoxy_glVariantusvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 57131 /* glVariantusvEXT */); +} + +static PFNGLVERTEX2BOESPROC +epoxy_glVertex2bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57147 /* glVertex2bOES */); +} + +static PFNGLVERTEX2BVOESPROC +epoxy_glVertex2bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57161 /* glVertex2bvOES */); +} + +static PFNGLVERTEX2DPROC +epoxy_glVertex2d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57176 /* glVertex2d */); +} + +static PFNGLVERTEX2DVPROC +epoxy_glVertex2dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57187 /* glVertex2dv */); +} + +static PFNGLVERTEX2FPROC +epoxy_glVertex2f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57199 /* glVertex2f */); +} + +static PFNGLVERTEX2FVPROC +epoxy_glVertex2fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57210 /* glVertex2fv */); +} + +static PFNGLVERTEX2HNVPROC +epoxy_glVertex2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57222 /* glVertex2hNV */); +} + +static PFNGLVERTEX2HVNVPROC +epoxy_glVertex2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57235 /* glVertex2hvNV */); +} + +static PFNGLVERTEX2IPROC +epoxy_glVertex2i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57249 /* glVertex2i */); +} + +static PFNGLVERTEX2IVPROC +epoxy_glVertex2iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57260 /* glVertex2iv */); +} + +static PFNGLVERTEX2SPROC +epoxy_glVertex2s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57272 /* glVertex2s */); +} + +static PFNGLVERTEX2SVPROC +epoxy_glVertex2sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57283 /* glVertex2sv */); +} + +static PFNGLVERTEX2XOESPROC +epoxy_glVertex2xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57295 /* glVertex2xOES */); +} + +static PFNGLVERTEX2XVOESPROC +epoxy_glVertex2xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57309 /* glVertex2xvOES */); +} + +static PFNGLVERTEX3BOESPROC +epoxy_glVertex3bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57324 /* glVertex3bOES */); +} + +static PFNGLVERTEX3BVOESPROC +epoxy_glVertex3bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57338 /* glVertex3bvOES */); +} + +static PFNGLVERTEX3DPROC +epoxy_glVertex3d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57353 /* glVertex3d */); +} + +static PFNGLVERTEX3DVPROC +epoxy_glVertex3dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57364 /* glVertex3dv */); +} + +static PFNGLVERTEX3FPROC +epoxy_glVertex3f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57376 /* glVertex3f */); +} + +static PFNGLVERTEX3FVPROC +epoxy_glVertex3fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57387 /* glVertex3fv */); +} + +static PFNGLVERTEX3HNVPROC +epoxy_glVertex3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57399 /* glVertex3hNV */); +} + +static PFNGLVERTEX3HVNVPROC +epoxy_glVertex3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57412 /* glVertex3hvNV */); +} + +static PFNGLVERTEX3IPROC +epoxy_glVertex3i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57426 /* glVertex3i */); +} + +static PFNGLVERTEX3IVPROC +epoxy_glVertex3iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57437 /* glVertex3iv */); +} + +static PFNGLVERTEX3SPROC +epoxy_glVertex3s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57449 /* glVertex3s */); +} + +static PFNGLVERTEX3SVPROC +epoxy_glVertex3sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57460 /* glVertex3sv */); +} + +static PFNGLVERTEX3XOESPROC +epoxy_glVertex3xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57472 /* glVertex3xOES */); +} + +static PFNGLVERTEX3XVOESPROC +epoxy_glVertex3xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57486 /* glVertex3xvOES */); +} + +static PFNGLVERTEX4BOESPROC +epoxy_glVertex4bOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57501 /* glVertex4bOES */); +} + +static PFNGLVERTEX4BVOESPROC +epoxy_glVertex4bvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_byte_coordinates, 57515 /* glVertex4bvOES */); +} + +static PFNGLVERTEX4DPROC +epoxy_glVertex4d_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57530 /* glVertex4d */); +} + +static PFNGLVERTEX4DVPROC +epoxy_glVertex4dv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57541 /* glVertex4dv */); +} + +static PFNGLVERTEX4FPROC +epoxy_glVertex4f_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57553 /* glVertex4f */); +} + +static PFNGLVERTEX4FVPROC +epoxy_glVertex4fv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57564 /* glVertex4fv */); +} + +static PFNGLVERTEX4HNVPROC +epoxy_glVertex4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57576 /* glVertex4hNV */); +} + +static PFNGLVERTEX4HVNVPROC +epoxy_glVertex4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 57589 /* glVertex4hvNV */); +} + +static PFNGLVERTEX4IPROC +epoxy_glVertex4i_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57603 /* glVertex4i */); +} + +static PFNGLVERTEX4IVPROC +epoxy_glVertex4iv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57614 /* glVertex4iv */); +} + +static PFNGLVERTEX4SPROC +epoxy_glVertex4s_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57626 /* glVertex4s */); +} + +static PFNGLVERTEX4SVPROC +epoxy_glVertex4sv_resolver(void) +{ + return gl_single_resolver(Desktop_OpenGL_1_0, 57637 /* glVertex4sv */); +} + +static PFNGLVERTEX4XOESPROC +epoxy_glVertex4xOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57649 /* glVertex4xOES */); +} + +static PFNGLVERTEX4XVOESPROC +epoxy_glVertex4xvOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_fixed_point, 57663 /* glVertex4xvOES */); +} + +static PFNGLVERTEXARRAYATTRIBBINDINGPROC +epoxy_glVertexArrayAttribBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57678 /* "glVertexArrayAttribBinding" */, + 57678 /* "glVertexArrayAttribBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 57678 /* "glVertexArrayAttribBinding" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYATTRIBFORMATPROC +epoxy_glVertexArrayAttribFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57705 /* "glVertexArrayAttribFormat" */, + 57705 /* "glVertexArrayAttribFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 57705 /* "glVertexArrayAttribFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYATTRIBIFORMATPROC +epoxy_glVertexArrayAttribIFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57731 /* "glVertexArrayAttribIFormat" */, + 57731 /* "glVertexArrayAttribIFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 57731 /* "glVertexArrayAttribIFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYATTRIBLFORMATPROC +epoxy_glVertexArrayAttribLFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57758 /* "glVertexArrayAttribLFormat" */, + 57758 /* "glVertexArrayAttribLFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 57758 /* "glVertexArrayAttribLFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC +epoxy_glVertexArrayBindVertexBufferEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57785 /* glVertexArrayBindVertexBufferEXT */); +} + +static PFNGLVERTEXARRAYBINDINGDIVISORPROC +epoxy_glVertexArrayBindingDivisor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57818 /* "glVertexArrayBindingDivisor" */, + 57818 /* "glVertexArrayBindingDivisor" */, + }; + return gl_provider_resolver(entrypoint_strings + 57818 /* "glVertexArrayBindingDivisor" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYCOLOROFFSETEXTPROC +epoxy_glVertexArrayColorOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57846 /* glVertexArrayColorOffsetEXT */); +} + +static PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC +epoxy_glVertexArrayEdgeFlagOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57874 /* glVertexArrayEdgeFlagOffsetEXT */); +} + +static PFNGLVERTEXARRAYELEMENTBUFFERPROC +epoxy_glVertexArrayElementBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 57905 /* "glVertexArrayElementBuffer" */, + 57905 /* "glVertexArrayElementBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 57905 /* "glVertexArrayElementBuffer" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC +epoxy_glVertexArrayFogCoordOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57932 /* glVertexArrayFogCoordOffsetEXT */); +} + +static PFNGLVERTEXARRAYINDEXOFFSETEXTPROC +epoxy_glVertexArrayIndexOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57963 /* glVertexArrayIndexOffsetEXT */); +} + +static PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC +epoxy_glVertexArrayMultiTexCoordOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 57991 /* glVertexArrayMultiTexCoordOffsetEXT */); +} + +static PFNGLVERTEXARRAYNORMALOFFSETEXTPROC +epoxy_glVertexArrayNormalOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58027 /* glVertexArrayNormalOffsetEXT */); +} + +static PFNGLVERTEXARRAYPARAMETERIAPPLEPROC +epoxy_glVertexArrayParameteriAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_array_range, 58056 /* glVertexArrayParameteriAPPLE */); +} + +static PFNGLVERTEXARRAYRANGEAPPLEPROC +epoxy_glVertexArrayRangeAPPLE_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_APPLE_vertex_array_range, 58085 /* glVertexArrayRangeAPPLE */); +} + +static PFNGLVERTEXARRAYRANGENVPROC +epoxy_glVertexArrayRangeNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_array_range, 58109 /* glVertexArrayRangeNV */); +} + +static PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC +epoxy_glVertexArraySecondaryColorOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58130 /* glVertexArraySecondaryColorOffsetEXT */); +} + +static PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC +epoxy_glVertexArrayTexCoordOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58167 /* glVertexArrayTexCoordOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC +epoxy_glVertexArrayVertexAttribBindingEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58198 /* glVertexArrayVertexAttribBindingEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC +epoxy_glVertexArrayVertexAttribDivisorEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58234 /* glVertexArrayVertexAttribDivisorEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC +epoxy_glVertexArrayVertexAttribFormatEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58270 /* glVertexArrayVertexAttribFormatEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC +epoxy_glVertexArrayVertexAttribIFormatEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58305 /* glVertexArrayVertexAttribIFormatEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC +epoxy_glVertexArrayVertexAttribIOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58341 /* glVertexArrayVertexAttribIOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC +epoxy_glVertexArrayVertexAttribLFormatEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58377 /* glVertexArrayVertexAttribLFormatEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC +epoxy_glVertexArrayVertexAttribLOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58413 /* glVertexArrayVertexAttribLOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC +epoxy_glVertexArrayVertexAttribOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58449 /* glVertexArrayVertexAttribOffsetEXT */); +} + +static PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC +epoxy_glVertexArrayVertexBindingDivisorEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58484 /* glVertexArrayVertexBindingDivisorEXT */); +} + +static PFNGLVERTEXARRAYVERTEXBUFFERPROC +epoxy_glVertexArrayVertexBuffer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58521 /* "glVertexArrayVertexBuffer" */, + 58521 /* "glVertexArrayVertexBuffer" */, + }; + return gl_provider_resolver(entrypoint_strings + 58521 /* "glVertexArrayVertexBuffer" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYVERTEXBUFFERSPROC +epoxy_glVertexArrayVertexBuffers_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_5, + GL_extension_GL_ARB_direct_state_access, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58547 /* "glVertexArrayVertexBuffers" */, + 58547 /* "glVertexArrayVertexBuffers" */, + }; + return gl_provider_resolver(entrypoint_strings + 58547 /* "glVertexArrayVertexBuffers" */, + providers, entrypoints); +} + +static PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC +epoxy_glVertexArrayVertexOffsetEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_direct_state_access, 58574 /* glVertexArrayVertexOffsetEXT */); +} + +static PFNGLVERTEXATTRIB1DPROC +epoxy_glVertexAttrib1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58603 /* "glVertexAttrib1d" */, + 58620 /* "glVertexAttrib1dARB" */, + 58620 /* "glVertexAttrib1dARB" */, + 58640 /* "glVertexAttrib1dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58603 /* "glVertexAttrib1d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DARBPROC +epoxy_glVertexAttrib1dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58620 /* "glVertexAttrib1dARB" */, + 58620 /* "glVertexAttrib1dARB" */, + 58603 /* "glVertexAttrib1d" */, + 58640 /* "glVertexAttrib1dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58620 /* "glVertexAttrib1dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DNVPROC +epoxy_glVertexAttrib1dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58640 /* "glVertexAttrib1dNV" */, + 58603 /* "glVertexAttrib1d" */, + 58620 /* "glVertexAttrib1dARB" */, + 58620 /* "glVertexAttrib1dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58640 /* "glVertexAttrib1dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DVPROC +epoxy_glVertexAttrib1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58659 /* "glVertexAttrib1dv" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58698 /* "glVertexAttrib1dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58659 /* "glVertexAttrib1dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DVARBPROC +epoxy_glVertexAttrib1dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58677 /* "glVertexAttrib1dvARB" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58659 /* "glVertexAttrib1dv" */, + 58698 /* "glVertexAttrib1dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58677 /* "glVertexAttrib1dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1DVNVPROC +epoxy_glVertexAttrib1dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58698 /* "glVertexAttrib1dvNV" */, + 58659 /* "glVertexAttrib1dv" */, + 58677 /* "glVertexAttrib1dvARB" */, + 58677 /* "glVertexAttrib1dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58698 /* "glVertexAttrib1dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FPROC +epoxy_glVertexAttrib1f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58718 /* "glVertexAttrib1f" */, + 58718 /* "glVertexAttrib1f" */, + 58735 /* "glVertexAttrib1fARB" */, + 58735 /* "glVertexAttrib1fARB" */, + 58755 /* "glVertexAttrib1fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58718 /* "glVertexAttrib1f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FARBPROC +epoxy_glVertexAttrib1fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58735 /* "glVertexAttrib1fARB" */, + 58735 /* "glVertexAttrib1fARB" */, + 58718 /* "glVertexAttrib1f" */, + 58718 /* "glVertexAttrib1f" */, + 58755 /* "glVertexAttrib1fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58735 /* "glVertexAttrib1fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FNVPROC +epoxy_glVertexAttrib1fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58755 /* "glVertexAttrib1fNV" */, + 58718 /* "glVertexAttrib1f" */, + 58718 /* "glVertexAttrib1f" */, + 58735 /* "glVertexAttrib1fARB" */, + 58735 /* "glVertexAttrib1fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58755 /* "glVertexAttrib1fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FVPROC +epoxy_glVertexAttrib1fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58774 /* "glVertexAttrib1fv" */, + 58774 /* "glVertexAttrib1fv" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58813 /* "glVertexAttrib1fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58774 /* "glVertexAttrib1fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FVARBPROC +epoxy_glVertexAttrib1fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58792 /* "glVertexAttrib1fvARB" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58774 /* "glVertexAttrib1fv" */, + 58774 /* "glVertexAttrib1fv" */, + 58813 /* "glVertexAttrib1fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58792 /* "glVertexAttrib1fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1FVNVPROC +epoxy_glVertexAttrib1fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58813 /* "glVertexAttrib1fvNV" */, + 58774 /* "glVertexAttrib1fv" */, + 58774 /* "glVertexAttrib1fv" */, + 58792 /* "glVertexAttrib1fvARB" */, + 58792 /* "glVertexAttrib1fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58813 /* "glVertexAttrib1fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1HNVPROC +epoxy_glVertexAttrib1hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 58833 /* glVertexAttrib1hNV */); +} + +static PFNGLVERTEXATTRIB1HVNVPROC +epoxy_glVertexAttrib1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 58852 /* glVertexAttrib1hvNV */); +} + +static PFNGLVERTEXATTRIB1SPROC +epoxy_glVertexAttrib1s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58872 /* "glVertexAttrib1s" */, + 58889 /* "glVertexAttrib1sARB" */, + 58889 /* "glVertexAttrib1sARB" */, + 58909 /* "glVertexAttrib1sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58872 /* "glVertexAttrib1s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SARBPROC +epoxy_glVertexAttrib1sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58889 /* "glVertexAttrib1sARB" */, + 58889 /* "glVertexAttrib1sARB" */, + 58872 /* "glVertexAttrib1s" */, + 58909 /* "glVertexAttrib1sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58889 /* "glVertexAttrib1sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SNVPROC +epoxy_glVertexAttrib1sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58909 /* "glVertexAttrib1sNV" */, + 58872 /* "glVertexAttrib1s" */, + 58889 /* "glVertexAttrib1sARB" */, + 58889 /* "glVertexAttrib1sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58909 /* "glVertexAttrib1sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SVPROC +epoxy_glVertexAttrib1sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58928 /* "glVertexAttrib1sv" */, + 58946 /* "glVertexAttrib1svARB" */, + 58946 /* "glVertexAttrib1svARB" */, + 58967 /* "glVertexAttrib1svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58928 /* "glVertexAttrib1sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SVARBPROC +epoxy_glVertexAttrib1svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58946 /* "glVertexAttrib1svARB" */, + 58946 /* "glVertexAttrib1svARB" */, + 58928 /* "glVertexAttrib1sv" */, + 58967 /* "glVertexAttrib1svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58946 /* "glVertexAttrib1svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB1SVNVPROC +epoxy_glVertexAttrib1svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58967 /* "glVertexAttrib1svNV" */, + 58928 /* "glVertexAttrib1sv" */, + 58946 /* "glVertexAttrib1svARB" */, + 58946 /* "glVertexAttrib1svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 58967 /* "glVertexAttrib1svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DPROC +epoxy_glVertexAttrib2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 58987 /* "glVertexAttrib2d" */, + 59004 /* "glVertexAttrib2dARB" */, + 59004 /* "glVertexAttrib2dARB" */, + 59024 /* "glVertexAttrib2dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 58987 /* "glVertexAttrib2d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DARBPROC +epoxy_glVertexAttrib2dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59004 /* "glVertexAttrib2dARB" */, + 59004 /* "glVertexAttrib2dARB" */, + 58987 /* "glVertexAttrib2d" */, + 59024 /* "glVertexAttrib2dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59004 /* "glVertexAttrib2dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DNVPROC +epoxy_glVertexAttrib2dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59024 /* "glVertexAttrib2dNV" */, + 58987 /* "glVertexAttrib2d" */, + 59004 /* "glVertexAttrib2dARB" */, + 59004 /* "glVertexAttrib2dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59024 /* "glVertexAttrib2dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DVPROC +epoxy_glVertexAttrib2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59043 /* "glVertexAttrib2dv" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59082 /* "glVertexAttrib2dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59043 /* "glVertexAttrib2dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DVARBPROC +epoxy_glVertexAttrib2dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59061 /* "glVertexAttrib2dvARB" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59043 /* "glVertexAttrib2dv" */, + 59082 /* "glVertexAttrib2dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59061 /* "glVertexAttrib2dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2DVNVPROC +epoxy_glVertexAttrib2dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59082 /* "glVertexAttrib2dvNV" */, + 59043 /* "glVertexAttrib2dv" */, + 59061 /* "glVertexAttrib2dvARB" */, + 59061 /* "glVertexAttrib2dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59082 /* "glVertexAttrib2dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FPROC +epoxy_glVertexAttrib2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59102 /* "glVertexAttrib2f" */, + 59102 /* "glVertexAttrib2f" */, + 59119 /* "glVertexAttrib2fARB" */, + 59119 /* "glVertexAttrib2fARB" */, + 59139 /* "glVertexAttrib2fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59102 /* "glVertexAttrib2f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FARBPROC +epoxy_glVertexAttrib2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59119 /* "glVertexAttrib2fARB" */, + 59119 /* "glVertexAttrib2fARB" */, + 59102 /* "glVertexAttrib2f" */, + 59102 /* "glVertexAttrib2f" */, + 59139 /* "glVertexAttrib2fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59119 /* "glVertexAttrib2fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FNVPROC +epoxy_glVertexAttrib2fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59139 /* "glVertexAttrib2fNV" */, + 59102 /* "glVertexAttrib2f" */, + 59102 /* "glVertexAttrib2f" */, + 59119 /* "glVertexAttrib2fARB" */, + 59119 /* "glVertexAttrib2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59139 /* "glVertexAttrib2fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FVPROC +epoxy_glVertexAttrib2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59158 /* "glVertexAttrib2fv" */, + 59158 /* "glVertexAttrib2fv" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59197 /* "glVertexAttrib2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59158 /* "glVertexAttrib2fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FVARBPROC +epoxy_glVertexAttrib2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59176 /* "glVertexAttrib2fvARB" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59158 /* "glVertexAttrib2fv" */, + 59158 /* "glVertexAttrib2fv" */, + 59197 /* "glVertexAttrib2fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59176 /* "glVertexAttrib2fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2FVNVPROC +epoxy_glVertexAttrib2fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59197 /* "glVertexAttrib2fvNV" */, + 59158 /* "glVertexAttrib2fv" */, + 59158 /* "glVertexAttrib2fv" */, + 59176 /* "glVertexAttrib2fvARB" */, + 59176 /* "glVertexAttrib2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59197 /* "glVertexAttrib2fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2HNVPROC +epoxy_glVertexAttrib2hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59217 /* glVertexAttrib2hNV */); +} + +static PFNGLVERTEXATTRIB2HVNVPROC +epoxy_glVertexAttrib2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59236 /* glVertexAttrib2hvNV */); +} + +static PFNGLVERTEXATTRIB2SPROC +epoxy_glVertexAttrib2s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59256 /* "glVertexAttrib2s" */, + 59273 /* "glVertexAttrib2sARB" */, + 59273 /* "glVertexAttrib2sARB" */, + 59293 /* "glVertexAttrib2sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59256 /* "glVertexAttrib2s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SARBPROC +epoxy_glVertexAttrib2sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59273 /* "glVertexAttrib2sARB" */, + 59273 /* "glVertexAttrib2sARB" */, + 59256 /* "glVertexAttrib2s" */, + 59293 /* "glVertexAttrib2sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59273 /* "glVertexAttrib2sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SNVPROC +epoxy_glVertexAttrib2sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59293 /* "glVertexAttrib2sNV" */, + 59256 /* "glVertexAttrib2s" */, + 59273 /* "glVertexAttrib2sARB" */, + 59273 /* "glVertexAttrib2sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59293 /* "glVertexAttrib2sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SVPROC +epoxy_glVertexAttrib2sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59312 /* "glVertexAttrib2sv" */, + 59330 /* "glVertexAttrib2svARB" */, + 59330 /* "glVertexAttrib2svARB" */, + 59351 /* "glVertexAttrib2svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59312 /* "glVertexAttrib2sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SVARBPROC +epoxy_glVertexAttrib2svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59330 /* "glVertexAttrib2svARB" */, + 59330 /* "glVertexAttrib2svARB" */, + 59312 /* "glVertexAttrib2sv" */, + 59351 /* "glVertexAttrib2svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59330 /* "glVertexAttrib2svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB2SVNVPROC +epoxy_glVertexAttrib2svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59351 /* "glVertexAttrib2svNV" */, + 59312 /* "glVertexAttrib2sv" */, + 59330 /* "glVertexAttrib2svARB" */, + 59330 /* "glVertexAttrib2svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59351 /* "glVertexAttrib2svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DPROC +epoxy_glVertexAttrib3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59371 /* "glVertexAttrib3d" */, + 59388 /* "glVertexAttrib3dARB" */, + 59388 /* "glVertexAttrib3dARB" */, + 59408 /* "glVertexAttrib3dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59371 /* "glVertexAttrib3d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DARBPROC +epoxy_glVertexAttrib3dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59388 /* "glVertexAttrib3dARB" */, + 59388 /* "glVertexAttrib3dARB" */, + 59371 /* "glVertexAttrib3d" */, + 59408 /* "glVertexAttrib3dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59388 /* "glVertexAttrib3dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DNVPROC +epoxy_glVertexAttrib3dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59408 /* "glVertexAttrib3dNV" */, + 59371 /* "glVertexAttrib3d" */, + 59388 /* "glVertexAttrib3dARB" */, + 59388 /* "glVertexAttrib3dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59408 /* "glVertexAttrib3dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DVPROC +epoxy_glVertexAttrib3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59427 /* "glVertexAttrib3dv" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59466 /* "glVertexAttrib3dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59427 /* "glVertexAttrib3dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DVARBPROC +epoxy_glVertexAttrib3dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59445 /* "glVertexAttrib3dvARB" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59427 /* "glVertexAttrib3dv" */, + 59466 /* "glVertexAttrib3dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59445 /* "glVertexAttrib3dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3DVNVPROC +epoxy_glVertexAttrib3dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59466 /* "glVertexAttrib3dvNV" */, + 59427 /* "glVertexAttrib3dv" */, + 59445 /* "glVertexAttrib3dvARB" */, + 59445 /* "glVertexAttrib3dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59466 /* "glVertexAttrib3dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FPROC +epoxy_glVertexAttrib3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59486 /* "glVertexAttrib3f" */, + 59486 /* "glVertexAttrib3f" */, + 59503 /* "glVertexAttrib3fARB" */, + 59503 /* "glVertexAttrib3fARB" */, + 59523 /* "glVertexAttrib3fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59486 /* "glVertexAttrib3f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FARBPROC +epoxy_glVertexAttrib3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59503 /* "glVertexAttrib3fARB" */, + 59503 /* "glVertexAttrib3fARB" */, + 59486 /* "glVertexAttrib3f" */, + 59486 /* "glVertexAttrib3f" */, + 59523 /* "glVertexAttrib3fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59503 /* "glVertexAttrib3fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FNVPROC +epoxy_glVertexAttrib3fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59523 /* "glVertexAttrib3fNV" */, + 59486 /* "glVertexAttrib3f" */, + 59486 /* "glVertexAttrib3f" */, + 59503 /* "glVertexAttrib3fARB" */, + 59503 /* "glVertexAttrib3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59523 /* "glVertexAttrib3fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FVPROC +epoxy_glVertexAttrib3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59542 /* "glVertexAttrib3fv" */, + 59542 /* "glVertexAttrib3fv" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59581 /* "glVertexAttrib3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59542 /* "glVertexAttrib3fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FVARBPROC +epoxy_glVertexAttrib3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59560 /* "glVertexAttrib3fvARB" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59542 /* "glVertexAttrib3fv" */, + 59542 /* "glVertexAttrib3fv" */, + 59581 /* "glVertexAttrib3fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59560 /* "glVertexAttrib3fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3FVNVPROC +epoxy_glVertexAttrib3fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59581 /* "glVertexAttrib3fvNV" */, + 59542 /* "glVertexAttrib3fv" */, + 59542 /* "glVertexAttrib3fv" */, + 59560 /* "glVertexAttrib3fvARB" */, + 59560 /* "glVertexAttrib3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59581 /* "glVertexAttrib3fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3HNVPROC +epoxy_glVertexAttrib3hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59601 /* glVertexAttrib3hNV */); +} + +static PFNGLVERTEXATTRIB3HVNVPROC +epoxy_glVertexAttrib3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 59620 /* glVertexAttrib3hvNV */); +} + +static PFNGLVERTEXATTRIB3SPROC +epoxy_glVertexAttrib3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59640 /* "glVertexAttrib3s" */, + 59657 /* "glVertexAttrib3sARB" */, + 59657 /* "glVertexAttrib3sARB" */, + 59677 /* "glVertexAttrib3sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59640 /* "glVertexAttrib3s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SARBPROC +epoxy_glVertexAttrib3sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59657 /* "glVertexAttrib3sARB" */, + 59657 /* "glVertexAttrib3sARB" */, + 59640 /* "glVertexAttrib3s" */, + 59677 /* "glVertexAttrib3sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59657 /* "glVertexAttrib3sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SNVPROC +epoxy_glVertexAttrib3sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59677 /* "glVertexAttrib3sNV" */, + 59640 /* "glVertexAttrib3s" */, + 59657 /* "glVertexAttrib3sARB" */, + 59657 /* "glVertexAttrib3sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59677 /* "glVertexAttrib3sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SVPROC +epoxy_glVertexAttrib3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59696 /* "glVertexAttrib3sv" */, + 59714 /* "glVertexAttrib3svARB" */, + 59714 /* "glVertexAttrib3svARB" */, + 59735 /* "glVertexAttrib3svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59696 /* "glVertexAttrib3sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SVARBPROC +epoxy_glVertexAttrib3svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59714 /* "glVertexAttrib3svARB" */, + 59714 /* "glVertexAttrib3svARB" */, + 59696 /* "glVertexAttrib3sv" */, + 59735 /* "glVertexAttrib3svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59714 /* "glVertexAttrib3svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB3SVNVPROC +epoxy_glVertexAttrib3svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59735 /* "glVertexAttrib3svNV" */, + 59696 /* "glVertexAttrib3sv" */, + 59714 /* "glVertexAttrib3svARB" */, + 59714 /* "glVertexAttrib3svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59735 /* "glVertexAttrib3svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NBVPROC +epoxy_glVertexAttrib4Nbv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59755 /* "glVertexAttrib4Nbv" */, + 59774 /* "glVertexAttrib4NbvARB" */, + 59774 /* "glVertexAttrib4NbvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59755 /* "glVertexAttrib4Nbv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NBVARBPROC +epoxy_glVertexAttrib4NbvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59774 /* "glVertexAttrib4NbvARB" */, + 59774 /* "glVertexAttrib4NbvARB" */, + 59755 /* "glVertexAttrib4Nbv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59774 /* "glVertexAttrib4NbvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NIVPROC +epoxy_glVertexAttrib4Niv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59796 /* "glVertexAttrib4Niv" */, + 59815 /* "glVertexAttrib4NivARB" */, + 59815 /* "glVertexAttrib4NivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59796 /* "glVertexAttrib4Niv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NIVARBPROC +epoxy_glVertexAttrib4NivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59815 /* "glVertexAttrib4NivARB" */, + 59815 /* "glVertexAttrib4NivARB" */, + 59796 /* "glVertexAttrib4Niv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59815 /* "glVertexAttrib4NivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NSVPROC +epoxy_glVertexAttrib4Nsv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59837 /* "glVertexAttrib4Nsv" */, + 59856 /* "glVertexAttrib4NsvARB" */, + 59856 /* "glVertexAttrib4NsvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59837 /* "glVertexAttrib4Nsv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NSVARBPROC +epoxy_glVertexAttrib4NsvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59856 /* "glVertexAttrib4NsvARB" */, + 59856 /* "glVertexAttrib4NsvARB" */, + 59837 /* "glVertexAttrib4Nsv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59856 /* "glVertexAttrib4NsvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBPROC +epoxy_glVertexAttrib4Nub_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59878 /* "glVertexAttrib4Nub" */, + 59897 /* "glVertexAttrib4NubARB" */, + 59897 /* "glVertexAttrib4NubARB" */, + 60510 /* "glVertexAttrib4ubNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59878 /* "glVertexAttrib4Nub" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBARBPROC +epoxy_glVertexAttrib4NubARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59897 /* "glVertexAttrib4NubARB" */, + 59897 /* "glVertexAttrib4NubARB" */, + 59878 /* "glVertexAttrib4Nub" */, + 60510 /* "glVertexAttrib4ubNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59897 /* "glVertexAttrib4NubARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBVPROC +epoxy_glVertexAttrib4Nubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59919 /* "glVertexAttrib4Nubv" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 60571 /* "glVertexAttrib4ubvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59919 /* "glVertexAttrib4Nubv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUBVARBPROC +epoxy_glVertexAttrib4NubvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59939 /* "glVertexAttrib4NubvARB" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 59919 /* "glVertexAttrib4Nubv" */, + 60571 /* "glVertexAttrib4ubvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 59939 /* "glVertexAttrib4NubvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUIVPROC +epoxy_glVertexAttrib4Nuiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59962 /* "glVertexAttrib4Nuiv" */, + 59982 /* "glVertexAttrib4NuivARB" */, + 59982 /* "glVertexAttrib4NuivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 59962 /* "glVertexAttrib4Nuiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUIVARBPROC +epoxy_glVertexAttrib4NuivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 59982 /* "glVertexAttrib4NuivARB" */, + 59982 /* "glVertexAttrib4NuivARB" */, + 59962 /* "glVertexAttrib4Nuiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 59982 /* "glVertexAttrib4NuivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUSVPROC +epoxy_glVertexAttrib4Nusv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60005 /* "glVertexAttrib4Nusv" */, + 60025 /* "glVertexAttrib4NusvARB" */, + 60025 /* "glVertexAttrib4NusvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60005 /* "glVertexAttrib4Nusv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4NUSVARBPROC +epoxy_glVertexAttrib4NusvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60025 /* "glVertexAttrib4NusvARB" */, + 60025 /* "glVertexAttrib4NusvARB" */, + 60005 /* "glVertexAttrib4Nusv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60025 /* "glVertexAttrib4NusvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4BVPROC +epoxy_glVertexAttrib4bv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60048 /* "glVertexAttrib4bv" */, + 60066 /* "glVertexAttrib4bvARB" */, + 60066 /* "glVertexAttrib4bvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60048 /* "glVertexAttrib4bv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4BVARBPROC +epoxy_glVertexAttrib4bvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60066 /* "glVertexAttrib4bvARB" */, + 60066 /* "glVertexAttrib4bvARB" */, + 60048 /* "glVertexAttrib4bv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60066 /* "glVertexAttrib4bvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DPROC +epoxy_glVertexAttrib4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60087 /* "glVertexAttrib4d" */, + 60104 /* "glVertexAttrib4dARB" */, + 60104 /* "glVertexAttrib4dARB" */, + 60124 /* "glVertexAttrib4dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60087 /* "glVertexAttrib4d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DARBPROC +epoxy_glVertexAttrib4dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60104 /* "glVertexAttrib4dARB" */, + 60104 /* "glVertexAttrib4dARB" */, + 60087 /* "glVertexAttrib4d" */, + 60124 /* "glVertexAttrib4dNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60104 /* "glVertexAttrib4dARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DNVPROC +epoxy_glVertexAttrib4dNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60124 /* "glVertexAttrib4dNV" */, + 60087 /* "glVertexAttrib4d" */, + 60104 /* "glVertexAttrib4dARB" */, + 60104 /* "glVertexAttrib4dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60124 /* "glVertexAttrib4dNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DVPROC +epoxy_glVertexAttrib4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60143 /* "glVertexAttrib4dv" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60182 /* "glVertexAttrib4dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60143 /* "glVertexAttrib4dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DVARBPROC +epoxy_glVertexAttrib4dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60161 /* "glVertexAttrib4dvARB" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60143 /* "glVertexAttrib4dv" */, + 60182 /* "glVertexAttrib4dvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60161 /* "glVertexAttrib4dvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4DVNVPROC +epoxy_glVertexAttrib4dvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60182 /* "glVertexAttrib4dvNV" */, + 60143 /* "glVertexAttrib4dv" */, + 60161 /* "glVertexAttrib4dvARB" */, + 60161 /* "glVertexAttrib4dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60182 /* "glVertexAttrib4dvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FPROC +epoxy_glVertexAttrib4f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60202 /* "glVertexAttrib4f" */, + 60202 /* "glVertexAttrib4f" */, + 60219 /* "glVertexAttrib4fARB" */, + 60219 /* "glVertexAttrib4fARB" */, + 60239 /* "glVertexAttrib4fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60202 /* "glVertexAttrib4f" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FARBPROC +epoxy_glVertexAttrib4fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60219 /* "glVertexAttrib4fARB" */, + 60219 /* "glVertexAttrib4fARB" */, + 60202 /* "glVertexAttrib4f" */, + 60202 /* "glVertexAttrib4f" */, + 60239 /* "glVertexAttrib4fNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60219 /* "glVertexAttrib4fARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FNVPROC +epoxy_glVertexAttrib4fNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60239 /* "glVertexAttrib4fNV" */, + 60202 /* "glVertexAttrib4f" */, + 60202 /* "glVertexAttrib4f" */, + 60219 /* "glVertexAttrib4fARB" */, + 60219 /* "glVertexAttrib4fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60239 /* "glVertexAttrib4fNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FVPROC +epoxy_glVertexAttrib4fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60258 /* "glVertexAttrib4fv" */, + 60258 /* "glVertexAttrib4fv" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60297 /* "glVertexAttrib4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60258 /* "glVertexAttrib4fv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FVARBPROC +epoxy_glVertexAttrib4fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60276 /* "glVertexAttrib4fvARB" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60258 /* "glVertexAttrib4fv" */, + 60258 /* "glVertexAttrib4fv" */, + 60297 /* "glVertexAttrib4fvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60276 /* "glVertexAttrib4fvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4FVNVPROC +epoxy_glVertexAttrib4fvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60297 /* "glVertexAttrib4fvNV" */, + 60258 /* "glVertexAttrib4fv" */, + 60258 /* "glVertexAttrib4fv" */, + 60276 /* "glVertexAttrib4fvARB" */, + 60276 /* "glVertexAttrib4fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60297 /* "glVertexAttrib4fvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4HNVPROC +epoxy_glVertexAttrib4hNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 60317 /* glVertexAttrib4hNV */); +} + +static PFNGLVERTEXATTRIB4HVNVPROC +epoxy_glVertexAttrib4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 60336 /* glVertexAttrib4hvNV */); +} + +static PFNGLVERTEXATTRIB4IVPROC +epoxy_glVertexAttrib4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60356 /* "glVertexAttrib4iv" */, + 60374 /* "glVertexAttrib4ivARB" */, + 60374 /* "glVertexAttrib4ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60356 /* "glVertexAttrib4iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4IVARBPROC +epoxy_glVertexAttrib4ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60374 /* "glVertexAttrib4ivARB" */, + 60374 /* "glVertexAttrib4ivARB" */, + 60356 /* "glVertexAttrib4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60374 /* "glVertexAttrib4ivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SPROC +epoxy_glVertexAttrib4s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60395 /* "glVertexAttrib4s" */, + 60412 /* "glVertexAttrib4sARB" */, + 60412 /* "glVertexAttrib4sARB" */, + 60432 /* "glVertexAttrib4sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60395 /* "glVertexAttrib4s" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SARBPROC +epoxy_glVertexAttrib4sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60412 /* "glVertexAttrib4sARB" */, + 60412 /* "glVertexAttrib4sARB" */, + 60395 /* "glVertexAttrib4s" */, + 60432 /* "glVertexAttrib4sNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60412 /* "glVertexAttrib4sARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SNVPROC +epoxy_glVertexAttrib4sNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60432 /* "glVertexAttrib4sNV" */, + 60395 /* "glVertexAttrib4s" */, + 60412 /* "glVertexAttrib4sARB" */, + 60412 /* "glVertexAttrib4sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60432 /* "glVertexAttrib4sNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SVPROC +epoxy_glVertexAttrib4sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60451 /* "glVertexAttrib4sv" */, + 60469 /* "glVertexAttrib4svARB" */, + 60469 /* "glVertexAttrib4svARB" */, + 60490 /* "glVertexAttrib4svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60451 /* "glVertexAttrib4sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SVARBPROC +epoxy_glVertexAttrib4svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + GL_extension_GL_NV_vertex_program, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60469 /* "glVertexAttrib4svARB" */, + 60469 /* "glVertexAttrib4svARB" */, + 60451 /* "glVertexAttrib4sv" */, + 60490 /* "glVertexAttrib4svNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60469 /* "glVertexAttrib4svARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4SVNVPROC +epoxy_glVertexAttrib4svNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60490 /* "glVertexAttrib4svNV" */, + 60451 /* "glVertexAttrib4sv" */, + 60469 /* "glVertexAttrib4svARB" */, + 60469 /* "glVertexAttrib4svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60490 /* "glVertexAttrib4svNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBNVPROC +epoxy_glVertexAttrib4ubNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60510 /* "glVertexAttrib4ubNV" */, + 59878 /* "glVertexAttrib4Nub" */, + 59897 /* "glVertexAttrib4NubARB" */, + 59897 /* "glVertexAttrib4NubARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60510 /* "glVertexAttrib4ubNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBVPROC +epoxy_glVertexAttrib4ubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60530 /* "glVertexAttrib4ubv" */, + 60549 /* "glVertexAttrib4ubvARB" */, + 60549 /* "glVertexAttrib4ubvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60530 /* "glVertexAttrib4ubv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBVARBPROC +epoxy_glVertexAttrib4ubvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60549 /* "glVertexAttrib4ubvARB" */, + 60549 /* "glVertexAttrib4ubvARB" */, + 60530 /* "glVertexAttrib4ubv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60549 /* "glVertexAttrib4ubvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UBVNVPROC +epoxy_glVertexAttrib4ubvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program, + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60571 /* "glVertexAttrib4ubvNV" */, + 59919 /* "glVertexAttrib4Nubv" */, + 59939 /* "glVertexAttrib4NubvARB" */, + 59939 /* "glVertexAttrib4NubvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60571 /* "glVertexAttrib4ubvNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UIVPROC +epoxy_glVertexAttrib4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60592 /* "glVertexAttrib4uiv" */, + 60611 /* "glVertexAttrib4uivARB" */, + 60611 /* "glVertexAttrib4uivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60592 /* "glVertexAttrib4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4UIVARBPROC +epoxy_glVertexAttrib4uivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60611 /* "glVertexAttrib4uivARB" */, + 60611 /* "glVertexAttrib4uivARB" */, + 60592 /* "glVertexAttrib4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60611 /* "glVertexAttrib4uivARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4USVPROC +epoxy_glVertexAttrib4usv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60633 /* "glVertexAttrib4usv" */, + 60652 /* "glVertexAttrib4usvARB" */, + 60652 /* "glVertexAttrib4usvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 60633 /* "glVertexAttrib4usv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIB4USVARBPROC +epoxy_glVertexAttrib4usvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60652 /* "glVertexAttrib4usvARB" */, + 60652 /* "glVertexAttrib4usvARB" */, + 60633 /* "glVertexAttrib4usv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60652 /* "glVertexAttrib4usvARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBARRAYOBJECTATIPROC +epoxy_glVertexAttribArrayObjectATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_attrib_array_object, 60674 /* glVertexAttribArrayObjectATI */); +} + +static PFNGLVERTEXATTRIBBINDINGPROC +epoxy_glVertexAttribBinding_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60703 /* "glVertexAttribBinding" */, + 60703 /* "glVertexAttribBinding" */, + 60703 /* "glVertexAttribBinding" */, + }; + return gl_provider_resolver(entrypoint_strings + 60703 /* "glVertexAttribBinding" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORPROC +epoxy_glVertexAttribDivisor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60799 /* "glVertexAttribDivisorEXT" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60725 /* "glVertexAttribDivisor" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORANGLEPROC +epoxy_glVertexAttribDivisorANGLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ANGLE_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60747 /* "glVertexAttribDivisorANGLE" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60799 /* "glVertexAttribDivisorEXT" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60747 /* "glVertexAttribDivisorANGLE" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORARBPROC +epoxy_glVertexAttribDivisorARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60774 /* "glVertexAttribDivisorARB" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60799 /* "glVertexAttribDivisorEXT" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60774 /* "glVertexAttribDivisorARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISOREXTPROC +epoxy_glVertexAttribDivisorEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_NV_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60799 /* "glVertexAttribDivisorEXT" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60824 /* "glVertexAttribDivisorNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 60799 /* "glVertexAttribDivisorEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBDIVISORNVPROC +epoxy_glVertexAttribDivisorNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_instanced_arrays, + Desktop_OpenGL_3_3, + OpenGL_ES_3_0, + GL_extension_GL_ANGLE_instanced_arrays, + GL_extension_GL_ARB_instanced_arrays, + GL_extension_GL_EXT_instanced_arrays, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60824 /* "glVertexAttribDivisorNV" */, + 60725 /* "glVertexAttribDivisor" */, + 60725 /* "glVertexAttribDivisor" */, + 60747 /* "glVertexAttribDivisorANGLE" */, + 60774 /* "glVertexAttribDivisorARB" */, + 60799 /* "glVertexAttribDivisorEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60824 /* "glVertexAttribDivisorNV" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBFORMATPROC +epoxy_glVertexAttribFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60848 /* "glVertexAttribFormat" */, + 60848 /* "glVertexAttribFormat" */, + 60848 /* "glVertexAttribFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 60848 /* "glVertexAttribFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBFORMATNVPROC +epoxy_glVertexAttribFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 60869 /* glVertexAttribFormatNV */); +} + +static PFNGLVERTEXATTRIBI1IPROC +epoxy_glVertexAttribI1i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60892 /* "glVertexAttribI1i" */, + 60910 /* "glVertexAttribI1iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60892 /* "glVertexAttribI1i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1IEXTPROC +epoxy_glVertexAttribI1iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60910 /* "glVertexAttribI1iEXT" */, + 60892 /* "glVertexAttribI1i" */, + }; + return gl_provider_resolver(entrypoint_strings + 60910 /* "glVertexAttribI1iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1IVPROC +epoxy_glVertexAttribI1iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60931 /* "glVertexAttribI1iv" */, + 60950 /* "glVertexAttribI1ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60931 /* "glVertexAttribI1iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1IVEXTPROC +epoxy_glVertexAttribI1ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60950 /* "glVertexAttribI1ivEXT" */, + 60931 /* "glVertexAttribI1iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 60950 /* "glVertexAttribI1ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIPROC +epoxy_glVertexAttribI1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60972 /* "glVertexAttribI1ui" */, + 60991 /* "glVertexAttribI1uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 60972 /* "glVertexAttribI1ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIEXTPROC +epoxy_glVertexAttribI1uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 60991 /* "glVertexAttribI1uiEXT" */, + 60972 /* "glVertexAttribI1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 60991 /* "glVertexAttribI1uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIVPROC +epoxy_glVertexAttribI1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61013 /* "glVertexAttribI1uiv" */, + 61033 /* "glVertexAttribI1uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61013 /* "glVertexAttribI1uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI1UIVEXTPROC +epoxy_glVertexAttribI1uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61033 /* "glVertexAttribI1uivEXT" */, + 61013 /* "glVertexAttribI1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61033 /* "glVertexAttribI1uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IPROC +epoxy_glVertexAttribI2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61056 /* "glVertexAttribI2i" */, + 61074 /* "glVertexAttribI2iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61056 /* "glVertexAttribI2i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IEXTPROC +epoxy_glVertexAttribI2iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61074 /* "glVertexAttribI2iEXT" */, + 61056 /* "glVertexAttribI2i" */, + }; + return gl_provider_resolver(entrypoint_strings + 61074 /* "glVertexAttribI2iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IVPROC +epoxy_glVertexAttribI2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61095 /* "glVertexAttribI2iv" */, + 61114 /* "glVertexAttribI2ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61095 /* "glVertexAttribI2iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2IVEXTPROC +epoxy_glVertexAttribI2ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61114 /* "glVertexAttribI2ivEXT" */, + 61095 /* "glVertexAttribI2iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61114 /* "glVertexAttribI2ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIPROC +epoxy_glVertexAttribI2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61136 /* "glVertexAttribI2ui" */, + 61155 /* "glVertexAttribI2uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61136 /* "glVertexAttribI2ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIEXTPROC +epoxy_glVertexAttribI2uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61155 /* "glVertexAttribI2uiEXT" */, + 61136 /* "glVertexAttribI2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 61155 /* "glVertexAttribI2uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIVPROC +epoxy_glVertexAttribI2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61177 /* "glVertexAttribI2uiv" */, + 61197 /* "glVertexAttribI2uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61177 /* "glVertexAttribI2uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI2UIVEXTPROC +epoxy_glVertexAttribI2uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61197 /* "glVertexAttribI2uivEXT" */, + 61177 /* "glVertexAttribI2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61197 /* "glVertexAttribI2uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IPROC +epoxy_glVertexAttribI3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61220 /* "glVertexAttribI3i" */, + 61238 /* "glVertexAttribI3iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61220 /* "glVertexAttribI3i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IEXTPROC +epoxy_glVertexAttribI3iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61238 /* "glVertexAttribI3iEXT" */, + 61220 /* "glVertexAttribI3i" */, + }; + return gl_provider_resolver(entrypoint_strings + 61238 /* "glVertexAttribI3iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IVPROC +epoxy_glVertexAttribI3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61259 /* "glVertexAttribI3iv" */, + 61278 /* "glVertexAttribI3ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61259 /* "glVertexAttribI3iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3IVEXTPROC +epoxy_glVertexAttribI3ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61278 /* "glVertexAttribI3ivEXT" */, + 61259 /* "glVertexAttribI3iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61278 /* "glVertexAttribI3ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIPROC +epoxy_glVertexAttribI3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61300 /* "glVertexAttribI3ui" */, + 61319 /* "glVertexAttribI3uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61300 /* "glVertexAttribI3ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIEXTPROC +epoxy_glVertexAttribI3uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61319 /* "glVertexAttribI3uiEXT" */, + 61300 /* "glVertexAttribI3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 61319 /* "glVertexAttribI3uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIVPROC +epoxy_glVertexAttribI3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61341 /* "glVertexAttribI3uiv" */, + 61361 /* "glVertexAttribI3uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61341 /* "glVertexAttribI3uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI3UIVEXTPROC +epoxy_glVertexAttribI3uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61361 /* "glVertexAttribI3uivEXT" */, + 61341 /* "glVertexAttribI3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61361 /* "glVertexAttribI3uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4BVPROC +epoxy_glVertexAttribI4bv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61384 /* "glVertexAttribI4bv" */, + 61403 /* "glVertexAttribI4bvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61384 /* "glVertexAttribI4bv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4BVEXTPROC +epoxy_glVertexAttribI4bvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61403 /* "glVertexAttribI4bvEXT" */, + 61384 /* "glVertexAttribI4bv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61403 /* "glVertexAttribI4bvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IPROC +epoxy_glVertexAttribI4i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61425 /* "glVertexAttribI4i" */, + 61425 /* "glVertexAttribI4i" */, + 61443 /* "glVertexAttribI4iEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61425 /* "glVertexAttribI4i" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IEXTPROC +epoxy_glVertexAttribI4iEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61443 /* "glVertexAttribI4iEXT" */, + 61425 /* "glVertexAttribI4i" */, + 61425 /* "glVertexAttribI4i" */, + }; + return gl_provider_resolver(entrypoint_strings + 61443 /* "glVertexAttribI4iEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IVPROC +epoxy_glVertexAttribI4iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61464 /* "glVertexAttribI4iv" */, + 61464 /* "glVertexAttribI4iv" */, + 61483 /* "glVertexAttribI4ivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61464 /* "glVertexAttribI4iv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4IVEXTPROC +epoxy_glVertexAttribI4ivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61483 /* "glVertexAttribI4ivEXT" */, + 61464 /* "glVertexAttribI4iv" */, + 61464 /* "glVertexAttribI4iv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61483 /* "glVertexAttribI4ivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4SVPROC +epoxy_glVertexAttribI4sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61505 /* "glVertexAttribI4sv" */, + 61524 /* "glVertexAttribI4svEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61505 /* "glVertexAttribI4sv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4SVEXTPROC +epoxy_glVertexAttribI4svEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61524 /* "glVertexAttribI4svEXT" */, + 61505 /* "glVertexAttribI4sv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61524 /* "glVertexAttribI4svEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UBVPROC +epoxy_glVertexAttribI4ubv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61546 /* "glVertexAttribI4ubv" */, + 61566 /* "glVertexAttribI4ubvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61546 /* "glVertexAttribI4ubv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UBVEXTPROC +epoxy_glVertexAttribI4ubvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61566 /* "glVertexAttribI4ubvEXT" */, + 61546 /* "glVertexAttribI4ubv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61566 /* "glVertexAttribI4ubvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIPROC +epoxy_glVertexAttribI4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61589 /* "glVertexAttribI4ui" */, + 61589 /* "glVertexAttribI4ui" */, + 61608 /* "glVertexAttribI4uiEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61589 /* "glVertexAttribI4ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIEXTPROC +epoxy_glVertexAttribI4uiEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61608 /* "glVertexAttribI4uiEXT" */, + 61589 /* "glVertexAttribI4ui" */, + 61589 /* "glVertexAttribI4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 61608 /* "glVertexAttribI4uiEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIVPROC +epoxy_glVertexAttribI4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61630 /* "glVertexAttribI4uiv" */, + 61630 /* "glVertexAttribI4uiv" */, + 61650 /* "glVertexAttribI4uivEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61630 /* "glVertexAttribI4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4UIVEXTPROC +epoxy_glVertexAttribI4uivEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61650 /* "glVertexAttribI4uivEXT" */, + 61630 /* "glVertexAttribI4uiv" */, + 61630 /* "glVertexAttribI4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61650 /* "glVertexAttribI4uivEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4USVPROC +epoxy_glVertexAttribI4usv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61673 /* "glVertexAttribI4usv" */, + 61693 /* "glVertexAttribI4usvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61673 /* "glVertexAttribI4usv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBI4USVEXTPROC +epoxy_glVertexAttribI4usvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61693 /* "glVertexAttribI4usvEXT" */, + 61673 /* "glVertexAttribI4usv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61693 /* "glVertexAttribI4usvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBIFORMATPROC +epoxy_glVertexAttribIFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61716 /* "glVertexAttribIFormat" */, + 61716 /* "glVertexAttribIFormat" */, + 61716 /* "glVertexAttribIFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 61716 /* "glVertexAttribIFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBIFORMATNVPROC +epoxy_glVertexAttribIFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 61738 /* glVertexAttribIFormatNV */); +} + +static PFNGLVERTEXATTRIBIPOINTERPROC +epoxy_glVertexAttribIPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + GL_extension_GL_NV_vertex_program4, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61762 /* "glVertexAttribIPointer" */, + 61762 /* "glVertexAttribIPointer" */, + 61785 /* "glVertexAttribIPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61762 /* "glVertexAttribIPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBIPOINTEREXTPROC +epoxy_glVertexAttribIPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_vertex_program4, + Desktop_OpenGL_3_0, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61785 /* "glVertexAttribIPointerEXT" */, + 61762 /* "glVertexAttribIPointer" */, + 61762 /* "glVertexAttribIPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 61785 /* "glVertexAttribIPointerEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DPROC +epoxy_glVertexAttribL1d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61811 /* "glVertexAttribL1d" */, + 61811 /* "glVertexAttribL1d" */, + 61829 /* "glVertexAttribL1dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61811 /* "glVertexAttribL1d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DEXTPROC +epoxy_glVertexAttribL1dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61829 /* "glVertexAttribL1dEXT" */, + 61811 /* "glVertexAttribL1d" */, + 61811 /* "glVertexAttribL1d" */, + }; + return gl_provider_resolver(entrypoint_strings + 61829 /* "glVertexAttribL1dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DVPROC +epoxy_glVertexAttribL1dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61850 /* "glVertexAttribL1dv" */, + 61850 /* "glVertexAttribL1dv" */, + 61869 /* "glVertexAttribL1dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 61850 /* "glVertexAttribL1dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1DVEXTPROC +epoxy_glVertexAttribL1dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 61869 /* "glVertexAttribL1dvEXT" */, + 61850 /* "glVertexAttribL1dv" */, + 61850 /* "glVertexAttribL1dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 61869 /* "glVertexAttribL1dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL1I64NVPROC +epoxy_glVertexAttribL1i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 61891 /* glVertexAttribL1i64NV */); +} + +static PFNGLVERTEXATTRIBL1I64VNVPROC +epoxy_glVertexAttribL1i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 61913 /* glVertexAttribL1i64vNV */); +} + +static PFNGLVERTEXATTRIBL1UI64ARBPROC +epoxy_glVertexAttribL1ui64ARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 61936 /* glVertexAttribL1ui64ARB */); +} + +static PFNGLVERTEXATTRIBL1UI64NVPROC +epoxy_glVertexAttribL1ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 61960 /* glVertexAttribL1ui64NV */); +} + +static PFNGLVERTEXATTRIBL1UI64VARBPROC +epoxy_glVertexAttribL1ui64vARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_bindless_texture, 61983 /* glVertexAttribL1ui64vARB */); +} + +static PFNGLVERTEXATTRIBL1UI64VNVPROC +epoxy_glVertexAttribL1ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62008 /* glVertexAttribL1ui64vNV */); +} + +static PFNGLVERTEXATTRIBL2DPROC +epoxy_glVertexAttribL2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62032 /* "glVertexAttribL2d" */, + 62032 /* "glVertexAttribL2d" */, + 62050 /* "glVertexAttribL2dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62032 /* "glVertexAttribL2d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2DEXTPROC +epoxy_glVertexAttribL2dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62050 /* "glVertexAttribL2dEXT" */, + 62032 /* "glVertexAttribL2d" */, + 62032 /* "glVertexAttribL2d" */, + }; + return gl_provider_resolver(entrypoint_strings + 62050 /* "glVertexAttribL2dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2DVPROC +epoxy_glVertexAttribL2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62071 /* "glVertexAttribL2dv" */, + 62071 /* "glVertexAttribL2dv" */, + 62090 /* "glVertexAttribL2dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62071 /* "glVertexAttribL2dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2DVEXTPROC +epoxy_glVertexAttribL2dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62090 /* "glVertexAttribL2dvEXT" */, + 62071 /* "glVertexAttribL2dv" */, + 62071 /* "glVertexAttribL2dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62090 /* "glVertexAttribL2dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL2I64NVPROC +epoxy_glVertexAttribL2i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62112 /* glVertexAttribL2i64NV */); +} + +static PFNGLVERTEXATTRIBL2I64VNVPROC +epoxy_glVertexAttribL2i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62134 /* glVertexAttribL2i64vNV */); +} + +static PFNGLVERTEXATTRIBL2UI64NVPROC +epoxy_glVertexAttribL2ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62157 /* glVertexAttribL2ui64NV */); +} + +static PFNGLVERTEXATTRIBL2UI64VNVPROC +epoxy_glVertexAttribL2ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62180 /* glVertexAttribL2ui64vNV */); +} + +static PFNGLVERTEXATTRIBL3DPROC +epoxy_glVertexAttribL3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62204 /* "glVertexAttribL3d" */, + 62204 /* "glVertexAttribL3d" */, + 62222 /* "glVertexAttribL3dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62204 /* "glVertexAttribL3d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3DEXTPROC +epoxy_glVertexAttribL3dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62222 /* "glVertexAttribL3dEXT" */, + 62204 /* "glVertexAttribL3d" */, + 62204 /* "glVertexAttribL3d" */, + }; + return gl_provider_resolver(entrypoint_strings + 62222 /* "glVertexAttribL3dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3DVPROC +epoxy_glVertexAttribL3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62243 /* "glVertexAttribL3dv" */, + 62243 /* "glVertexAttribL3dv" */, + 62262 /* "glVertexAttribL3dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62243 /* "glVertexAttribL3dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3DVEXTPROC +epoxy_glVertexAttribL3dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62262 /* "glVertexAttribL3dvEXT" */, + 62243 /* "glVertexAttribL3dv" */, + 62243 /* "glVertexAttribL3dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62262 /* "glVertexAttribL3dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL3I64NVPROC +epoxy_glVertexAttribL3i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62284 /* glVertexAttribL3i64NV */); +} + +static PFNGLVERTEXATTRIBL3I64VNVPROC +epoxy_glVertexAttribL3i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62306 /* glVertexAttribL3i64vNV */); +} + +static PFNGLVERTEXATTRIBL3UI64NVPROC +epoxy_glVertexAttribL3ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62329 /* glVertexAttribL3ui64NV */); +} + +static PFNGLVERTEXATTRIBL3UI64VNVPROC +epoxy_glVertexAttribL3ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62352 /* glVertexAttribL3ui64vNV */); +} + +static PFNGLVERTEXATTRIBL4DPROC +epoxy_glVertexAttribL4d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62376 /* "glVertexAttribL4d" */, + 62376 /* "glVertexAttribL4d" */, + 62394 /* "glVertexAttribL4dEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62376 /* "glVertexAttribL4d" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4DEXTPROC +epoxy_glVertexAttribL4dEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62394 /* "glVertexAttribL4dEXT" */, + 62376 /* "glVertexAttribL4d" */, + 62376 /* "glVertexAttribL4d" */, + }; + return gl_provider_resolver(entrypoint_strings + 62394 /* "glVertexAttribL4dEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4DVPROC +epoxy_glVertexAttribL4dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62415 /* "glVertexAttribL4dv" */, + 62415 /* "glVertexAttribL4dv" */, + 62434 /* "glVertexAttribL4dvEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62415 /* "glVertexAttribL4dv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4DVEXTPROC +epoxy_glVertexAttribL4dvEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62434 /* "glVertexAttribL4dvEXT" */, + 62415 /* "glVertexAttribL4dv" */, + 62415 /* "glVertexAttribL4dv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62434 /* "glVertexAttribL4dvEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBL4I64NVPROC +epoxy_glVertexAttribL4i64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62456 /* glVertexAttribL4i64NV */); +} + +static PFNGLVERTEXATTRIBL4I64VNVPROC +epoxy_glVertexAttribL4i64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62478 /* glVertexAttribL4i64vNV */); +} + +static PFNGLVERTEXATTRIBL4UI64NVPROC +epoxy_glVertexAttribL4ui64NV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62501 /* glVertexAttribL4ui64NV */); +} + +static PFNGLVERTEXATTRIBL4UI64VNVPROC +epoxy_glVertexAttribL4ui64vNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62524 /* glVertexAttribL4ui64vNV */); +} + +static PFNGLVERTEXATTRIBLFORMATPROC +epoxy_glVertexAttribLFormat_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62548 /* "glVertexAttribLFormat" */, + 62548 /* "glVertexAttribLFormat" */, + }; + return gl_provider_resolver(entrypoint_strings + 62548 /* "glVertexAttribLFormat" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBLFORMATNVPROC +epoxy_glVertexAttribLFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_attrib_integer_64bit, 62570 /* glVertexAttribLFormatNV */); +} + +static PFNGLVERTEXATTRIBLPOINTERPROC +epoxy_glVertexAttribLPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + GL_extension_GL_EXT_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62594 /* "glVertexAttribLPointer" */, + 62594 /* "glVertexAttribLPointer" */, + 62617 /* "glVertexAttribLPointerEXT" */, + }; + return gl_provider_resolver(entrypoint_strings + 62594 /* "glVertexAttribLPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBLPOINTEREXTPROC +epoxy_glVertexAttribLPointerEXT_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_EXT_vertex_attrib_64bit, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_vertex_attrib_64bit, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62617 /* "glVertexAttribLPointerEXT" */, + 62594 /* "glVertexAttribLPointer" */, + 62594 /* "glVertexAttribLPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 62617 /* "glVertexAttribLPointerEXT" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP1UIPROC +epoxy_glVertexAttribP1ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62643 /* "glVertexAttribP1ui" */, + 62643 /* "glVertexAttribP1ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62643 /* "glVertexAttribP1ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP1UIVPROC +epoxy_glVertexAttribP1uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62662 /* "glVertexAttribP1uiv" */, + 62662 /* "glVertexAttribP1uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62662 /* "glVertexAttribP1uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP2UIPROC +epoxy_glVertexAttribP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62682 /* "glVertexAttribP2ui" */, + 62682 /* "glVertexAttribP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62682 /* "glVertexAttribP2ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP2UIVPROC +epoxy_glVertexAttribP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62701 /* "glVertexAttribP2uiv" */, + 62701 /* "glVertexAttribP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62701 /* "glVertexAttribP2uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP3UIPROC +epoxy_glVertexAttribP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62721 /* "glVertexAttribP3ui" */, + 62721 /* "glVertexAttribP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62721 /* "glVertexAttribP3ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP3UIVPROC +epoxy_glVertexAttribP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62740 /* "glVertexAttribP3uiv" */, + 62740 /* "glVertexAttribP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62740 /* "glVertexAttribP3uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP4UIPROC +epoxy_glVertexAttribP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62760 /* "glVertexAttribP4ui" */, + 62760 /* "glVertexAttribP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 62760 /* "glVertexAttribP4ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBP4UIVPROC +epoxy_glVertexAttribP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62779 /* "glVertexAttribP4uiv" */, + 62779 /* "glVertexAttribP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 62779 /* "glVertexAttribP4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBPARAMETERIAMDPROC +epoxy_glVertexAttribParameteriAMD_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_AMD_interleaved_elements, 62799 /* glVertexAttribParameteriAMD */); +} + +static PFNGLVERTEXATTRIBPOINTERPROC +epoxy_glVertexAttribPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62827 /* "glVertexAttribPointer" */, + 62827 /* "glVertexAttribPointer" */, + 62849 /* "glVertexAttribPointerARB" */, + 62849 /* "glVertexAttribPointerARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 62827 /* "glVertexAttribPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBPOINTERARBPROC +epoxy_glVertexAttribPointerARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_vertex_program, + GL_extension_GL_ARB_vertex_shader, + Desktop_OpenGL_2_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 62849 /* "glVertexAttribPointerARB" */, + 62849 /* "glVertexAttribPointerARB" */, + 62827 /* "glVertexAttribPointer" */, + 62827 /* "glVertexAttribPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 62849 /* "glVertexAttribPointerARB" */, + providers, entrypoints); +} + +static PFNGLVERTEXATTRIBPOINTERNVPROC +epoxy_glVertexAttribPointerNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62874 /* glVertexAttribPointerNV */); +} + +static PFNGLVERTEXATTRIBS1DVNVPROC +epoxy_glVertexAttribs1dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62898 /* glVertexAttribs1dvNV */); +} + +static PFNGLVERTEXATTRIBS1FVNVPROC +epoxy_glVertexAttribs1fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62919 /* glVertexAttribs1fvNV */); +} + +static PFNGLVERTEXATTRIBS1HVNVPROC +epoxy_glVertexAttribs1hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 62940 /* glVertexAttribs1hvNV */); +} + +static PFNGLVERTEXATTRIBS1SVNVPROC +epoxy_glVertexAttribs1svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62961 /* glVertexAttribs1svNV */); +} + +static PFNGLVERTEXATTRIBS2DVNVPROC +epoxy_glVertexAttribs2dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 62982 /* glVertexAttribs2dvNV */); +} + +static PFNGLVERTEXATTRIBS2FVNVPROC +epoxy_glVertexAttribs2fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63003 /* glVertexAttribs2fvNV */); +} + +static PFNGLVERTEXATTRIBS2HVNVPROC +epoxy_glVertexAttribs2hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 63024 /* glVertexAttribs2hvNV */); +} + +static PFNGLVERTEXATTRIBS2SVNVPROC +epoxy_glVertexAttribs2svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63045 /* glVertexAttribs2svNV */); +} + +static PFNGLVERTEXATTRIBS3DVNVPROC +epoxy_glVertexAttribs3dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63066 /* glVertexAttribs3dvNV */); +} + +static PFNGLVERTEXATTRIBS3FVNVPROC +epoxy_glVertexAttribs3fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63087 /* glVertexAttribs3fvNV */); +} + +static PFNGLVERTEXATTRIBS3HVNVPROC +epoxy_glVertexAttribs3hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 63108 /* glVertexAttribs3hvNV */); +} + +static PFNGLVERTEXATTRIBS3SVNVPROC +epoxy_glVertexAttribs3svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63129 /* glVertexAttribs3svNV */); +} + +static PFNGLVERTEXATTRIBS4DVNVPROC +epoxy_glVertexAttribs4dvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63150 /* glVertexAttribs4dvNV */); +} + +static PFNGLVERTEXATTRIBS4FVNVPROC +epoxy_glVertexAttribs4fvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63171 /* glVertexAttribs4fvNV */); +} + +static PFNGLVERTEXATTRIBS4HVNVPROC +epoxy_glVertexAttribs4hvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 63192 /* glVertexAttribs4hvNV */); +} + +static PFNGLVERTEXATTRIBS4SVNVPROC +epoxy_glVertexAttribs4svNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63213 /* glVertexAttribs4svNV */); +} + +static PFNGLVERTEXATTRIBS4UBVNVPROC +epoxy_glVertexAttribs4ubvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_program, 63234 /* glVertexAttribs4ubvNV */); +} + +static PFNGLVERTEXBINDINGDIVISORPROC +epoxy_glVertexBindingDivisor_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_3, + GL_extension_GL_ARB_vertex_attrib_binding, + OpenGL_ES_3_1, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63256 /* "glVertexBindingDivisor" */, + 63256 /* "glVertexBindingDivisor" */, + 63256 /* "glVertexBindingDivisor" */, + }; + return gl_provider_resolver(entrypoint_strings + 63256 /* "glVertexBindingDivisor" */, + providers, entrypoints); +} + +static PFNGLVERTEXBLENDARBPROC +epoxy_glVertexBlendARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 63279 /* glVertexBlendARB */); +} + +static PFNGLVERTEXBLENDENVFATIPROC +epoxy_glVertexBlendEnvfATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63296 /* glVertexBlendEnvfATI */); +} + +static PFNGLVERTEXBLENDENVIATIPROC +epoxy_glVertexBlendEnviATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63317 /* glVertexBlendEnviATI */); +} + +static PFNGLVERTEXFORMATNVPROC +epoxy_glVertexFormatNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_vertex_buffer_unified_memory, 63338 /* glVertexFormatNV */); +} + +static PFNGLVERTEXP2UIPROC +epoxy_glVertexP2ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63355 /* "glVertexP2ui" */, + 63355 /* "glVertexP2ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 63355 /* "glVertexP2ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXP2UIVPROC +epoxy_glVertexP2uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63368 /* "glVertexP2uiv" */, + 63368 /* "glVertexP2uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 63368 /* "glVertexP2uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXP3UIPROC +epoxy_glVertexP3ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63382 /* "glVertexP3ui" */, + 63382 /* "glVertexP3ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 63382 /* "glVertexP3ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXP3UIVPROC +epoxy_glVertexP3uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63395 /* "glVertexP3uiv" */, + 63395 /* "glVertexP3uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 63395 /* "glVertexP3uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXP4UIPROC +epoxy_glVertexP4ui_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63409 /* "glVertexP4ui" */, + 63409 /* "glVertexP4ui" */, + }; + return gl_provider_resolver(entrypoint_strings + 63409 /* "glVertexP4ui" */, + providers, entrypoints); +} + +static PFNGLVERTEXP4UIVPROC +epoxy_glVertexP4uiv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_3, + GL_extension_GL_ARB_vertex_type_2_10_10_10_rev, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63422 /* "glVertexP4uiv" */, + 63422 /* "glVertexP4uiv" */, + }; + return gl_provider_resolver(entrypoint_strings + 63422 /* "glVertexP4uiv" */, + providers, entrypoints); +} + +static PFNGLVERTEXPOINTERPROC +epoxy_glVertexPointer_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_1, + OpenGL_ES_1_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 63436 /* "glVertexPointer" */, + 63436 /* "glVertexPointer" */, + }; + return gl_provider_resolver(entrypoint_strings + 63436 /* "glVertexPointer" */, + providers, entrypoints); +} + +static PFNGLVERTEXPOINTEREXTPROC +epoxy_glVertexPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_array, 63452 /* glVertexPointerEXT */); +} + +static PFNGLVERTEXPOINTERLISTIBMPROC +epoxy_glVertexPointerListIBM_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_IBM_vertex_array_lists, 63471 /* glVertexPointerListIBM */); +} + +static PFNGLVERTEXPOINTERVINTELPROC +epoxy_glVertexPointervINTEL_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_INTEL_parallel_arrays, 63494 /* glVertexPointervINTEL */); +} + +static PFNGLVERTEXSTREAM1DATIPROC +epoxy_glVertexStream1dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63516 /* glVertexStream1dATI */); +} + +static PFNGLVERTEXSTREAM1DVATIPROC +epoxy_glVertexStream1dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63536 /* glVertexStream1dvATI */); +} + +static PFNGLVERTEXSTREAM1FATIPROC +epoxy_glVertexStream1fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63557 /* glVertexStream1fATI */); +} + +static PFNGLVERTEXSTREAM1FVATIPROC +epoxy_glVertexStream1fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63577 /* glVertexStream1fvATI */); +} + +static PFNGLVERTEXSTREAM1IATIPROC +epoxy_glVertexStream1iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63598 /* glVertexStream1iATI */); +} + +static PFNGLVERTEXSTREAM1IVATIPROC +epoxy_glVertexStream1ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63618 /* glVertexStream1ivATI */); +} + +static PFNGLVERTEXSTREAM1SATIPROC +epoxy_glVertexStream1sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63639 /* glVertexStream1sATI */); +} + +static PFNGLVERTEXSTREAM1SVATIPROC +epoxy_glVertexStream1svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63659 /* glVertexStream1svATI */); +} + +static PFNGLVERTEXSTREAM2DATIPROC +epoxy_glVertexStream2dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63680 /* glVertexStream2dATI */); +} + +static PFNGLVERTEXSTREAM2DVATIPROC +epoxy_glVertexStream2dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63700 /* glVertexStream2dvATI */); +} + +static PFNGLVERTEXSTREAM2FATIPROC +epoxy_glVertexStream2fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63721 /* glVertexStream2fATI */); +} + +static PFNGLVERTEXSTREAM2FVATIPROC +epoxy_glVertexStream2fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63741 /* glVertexStream2fvATI */); +} + +static PFNGLVERTEXSTREAM2IATIPROC +epoxy_glVertexStream2iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63762 /* glVertexStream2iATI */); +} + +static PFNGLVERTEXSTREAM2IVATIPROC +epoxy_glVertexStream2ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63782 /* glVertexStream2ivATI */); +} + +static PFNGLVERTEXSTREAM2SATIPROC +epoxy_glVertexStream2sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63803 /* glVertexStream2sATI */); +} + +static PFNGLVERTEXSTREAM2SVATIPROC +epoxy_glVertexStream2svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63823 /* glVertexStream2svATI */); +} + +static PFNGLVERTEXSTREAM3DATIPROC +epoxy_glVertexStream3dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63844 /* glVertexStream3dATI */); +} + +static PFNGLVERTEXSTREAM3DVATIPROC +epoxy_glVertexStream3dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63864 /* glVertexStream3dvATI */); +} + +static PFNGLVERTEXSTREAM3FATIPROC +epoxy_glVertexStream3fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63885 /* glVertexStream3fATI */); +} + +static PFNGLVERTEXSTREAM3FVATIPROC +epoxy_glVertexStream3fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63905 /* glVertexStream3fvATI */); +} + +static PFNGLVERTEXSTREAM3IATIPROC +epoxy_glVertexStream3iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63926 /* glVertexStream3iATI */); +} + +static PFNGLVERTEXSTREAM3IVATIPROC +epoxy_glVertexStream3ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63946 /* glVertexStream3ivATI */); +} + +static PFNGLVERTEXSTREAM3SATIPROC +epoxy_glVertexStream3sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63967 /* glVertexStream3sATI */); +} + +static PFNGLVERTEXSTREAM3SVATIPROC +epoxy_glVertexStream3svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 63987 /* glVertexStream3svATI */); +} + +static PFNGLVERTEXSTREAM4DATIPROC +epoxy_glVertexStream4dATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64008 /* glVertexStream4dATI */); +} + +static PFNGLVERTEXSTREAM4DVATIPROC +epoxy_glVertexStream4dvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64028 /* glVertexStream4dvATI */); +} + +static PFNGLVERTEXSTREAM4FATIPROC +epoxy_glVertexStream4fATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64049 /* glVertexStream4fATI */); +} + +static PFNGLVERTEXSTREAM4FVATIPROC +epoxy_glVertexStream4fvATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64069 /* glVertexStream4fvATI */); +} + +static PFNGLVERTEXSTREAM4IATIPROC +epoxy_glVertexStream4iATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64090 /* glVertexStream4iATI */); +} + +static PFNGLVERTEXSTREAM4IVATIPROC +epoxy_glVertexStream4ivATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64110 /* glVertexStream4ivATI */); +} + +static PFNGLVERTEXSTREAM4SATIPROC +epoxy_glVertexStream4sATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64131 /* glVertexStream4sATI */); +} + +static PFNGLVERTEXSTREAM4SVATIPROC +epoxy_glVertexStream4svATI_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ATI_vertex_streams, 64151 /* glVertexStream4svATI */); +} + +static PFNGLVERTEXWEIGHTPOINTEREXTPROC +epoxy_glVertexWeightPointerEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_weighting, 64172 /* glVertexWeightPointerEXT */); +} + +static PFNGLVERTEXWEIGHTFEXTPROC +epoxy_glVertexWeightfEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_weighting, 64197 /* glVertexWeightfEXT */); +} + +static PFNGLVERTEXWEIGHTFVEXTPROC +epoxy_glVertexWeightfvEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_weighting, 64216 /* glVertexWeightfvEXT */); +} + +static PFNGLVERTEXWEIGHTHNVPROC +epoxy_glVertexWeighthNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 64236 /* glVertexWeighthNV */); +} + +static PFNGLVERTEXWEIGHTHVNVPROC +epoxy_glVertexWeighthvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_half_float, 64254 /* glVertexWeighthvNV */); +} + +static PFNGLVIDEOCAPTURENVPROC +epoxy_glVideoCaptureNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64273 /* glVideoCaptureNV */); +} + +static PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC +epoxy_glVideoCaptureStreamParameterdvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64290 /* glVideoCaptureStreamParameterdvNV */); +} + +static PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC +epoxy_glVideoCaptureStreamParameterfvNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64324 /* glVideoCaptureStreamParameterfvNV */); +} + +static PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC +epoxy_glVideoCaptureStreamParameterivNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_video_capture, 64358 /* glVideoCaptureStreamParameterivNV */); +} + +static PFNGLVIEWPORTPROC +epoxy_glViewport_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_0, + OpenGL_ES_1_0, + OpenGL_ES_2_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64392 /* "glViewport" */, + 64392 /* "glViewport" */, + 64392 /* "glViewport" */, + }; + return gl_provider_resolver(entrypoint_strings + 64392 /* "glViewport" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTARRAYVPROC +epoxy_glViewportArrayv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64403 /* "glViewportArrayv" */, + 64403 /* "glViewportArrayv" */, + 64420 /* "glViewportArrayvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 64403 /* "glViewportArrayv" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTARRAYVNVPROC +epoxy_glViewportArrayvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64420 /* "glViewportArrayvNV" */, + 64403 /* "glViewportArrayv" */, + 64403 /* "glViewportArrayv" */, + }; + return gl_provider_resolver(entrypoint_strings + 64420 /* "glViewportArrayvNV" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFPROC +epoxy_glViewportIndexedf_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64439 /* "glViewportIndexedf" */, + 64439 /* "glViewportIndexedf" */, + 64458 /* "glViewportIndexedfNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 64439 /* "glViewportIndexedf" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFNVPROC +epoxy_glViewportIndexedfNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64458 /* "glViewportIndexedfNV" */, + 64439 /* "glViewportIndexedf" */, + 64439 /* "glViewportIndexedf" */, + }; + return gl_provider_resolver(entrypoint_strings + 64458 /* "glViewportIndexedfNV" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFVPROC +epoxy_glViewportIndexedfv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + GL_extension_GL_NV_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64479 /* "glViewportIndexedfv" */, + 64479 /* "glViewportIndexedfv" */, + 64499 /* "glViewportIndexedfvNV" */, + }; + return gl_provider_resolver(entrypoint_strings + 64479 /* "glViewportIndexedfv" */, + providers, entrypoints); +} + +static PFNGLVIEWPORTINDEXEDFVNVPROC +epoxy_glViewportIndexedfvNV_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_NV_viewport_array, + Desktop_OpenGL_4_1, + GL_extension_GL_ARB_viewport_array, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64499 /* "glViewportIndexedfvNV" */, + 64479 /* "glViewportIndexedfv" */, + 64479 /* "glViewportIndexedfv" */, + }; + return gl_provider_resolver(entrypoint_strings + 64499 /* "glViewportIndexedfvNV" */, + providers, entrypoints); +} + +static PFNGLWAITSYNCPROC +epoxy_glWaitSync_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + GL_extension_GL_APPLE_sync, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + 64532 /* "glWaitSyncAPPLE" */, + }; + return gl_provider_resolver(entrypoint_strings + 64521 /* "glWaitSync" */, + providers, entrypoints); +} + +static PFNGLWAITSYNCAPPLEPROC +epoxy_glWaitSyncAPPLE_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_APPLE_sync, + Desktop_OpenGL_3_2, + GL_extension_GL_ARB_sync, + OpenGL_ES_3_0, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64532 /* "glWaitSyncAPPLE" */, + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + 64521 /* "glWaitSync" */, + }; + return gl_provider_resolver(entrypoint_strings + 64532 /* "glWaitSyncAPPLE" */, + providers, entrypoints); +} + +static PFNGLWEIGHTPATHSNVPROC +epoxy_glWeightPathsNV_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_NV_path_rendering, 64548 /* glWeightPathsNV */); +} + +static PFNGLWEIGHTPOINTERARBPROC +epoxy_glWeightPointerARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64564 /* glWeightPointerARB */); +} + +static PFNGLWEIGHTPOINTEROESPROC +epoxy_glWeightPointerOES_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_OES_matrix_palette, 64583 /* glWeightPointerOES */); +} + +static PFNGLWEIGHTBVARBPROC +epoxy_glWeightbvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64602 /* glWeightbvARB */); +} + +static PFNGLWEIGHTDVARBPROC +epoxy_glWeightdvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64616 /* glWeightdvARB */); +} + +static PFNGLWEIGHTFVARBPROC +epoxy_glWeightfvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64630 /* glWeightfvARB */); +} + +static PFNGLWEIGHTIVARBPROC +epoxy_glWeightivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64644 /* glWeightivARB */); +} + +static PFNGLWEIGHTSVARBPROC +epoxy_glWeightsvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64658 /* glWeightsvARB */); +} + +static PFNGLWEIGHTUBVARBPROC +epoxy_glWeightubvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64672 /* glWeightubvARB */); +} + +static PFNGLWEIGHTUIVARBPROC +epoxy_glWeightuivARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64687 /* glWeightuivARB */); +} + +static PFNGLWEIGHTUSVARBPROC +epoxy_glWeightusvARB_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_ARB_vertex_blend, 64702 /* glWeightusvARB */); +} + +static PFNGLWINDOWPOS2DPROC +epoxy_glWindowPos2d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64717 /* "glWindowPos2d" */, + 64731 /* "glWindowPos2dARB" */, + 64748 /* "glWindowPos2dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64717 /* "glWindowPos2d" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DARBPROC +epoxy_glWindowPos2dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64731 /* "glWindowPos2dARB" */, + 64717 /* "glWindowPos2d" */, + 64748 /* "glWindowPos2dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64731 /* "glWindowPos2dARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DMESAPROC +epoxy_glWindowPos2dMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64748 /* "glWindowPos2dMESA" */, + 64717 /* "glWindowPos2d" */, + 64731 /* "glWindowPos2dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64748 /* "glWindowPos2dMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DVPROC +epoxy_glWindowPos2dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64766 /* "glWindowPos2dv" */, + 64781 /* "glWindowPos2dvARB" */, + 64799 /* "glWindowPos2dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64766 /* "glWindowPos2dv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DVARBPROC +epoxy_glWindowPos2dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64781 /* "glWindowPos2dvARB" */, + 64766 /* "glWindowPos2dv" */, + 64799 /* "glWindowPos2dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64781 /* "glWindowPos2dvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2DVMESAPROC +epoxy_glWindowPos2dvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64799 /* "glWindowPos2dvMESA" */, + 64766 /* "glWindowPos2dv" */, + 64781 /* "glWindowPos2dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64799 /* "glWindowPos2dvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FPROC +epoxy_glWindowPos2f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64818 /* "glWindowPos2f" */, + 64832 /* "glWindowPos2fARB" */, + 64849 /* "glWindowPos2fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64818 /* "glWindowPos2f" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FARBPROC +epoxy_glWindowPos2fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64832 /* "glWindowPos2fARB" */, + 64818 /* "glWindowPos2f" */, + 64849 /* "glWindowPos2fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64832 /* "glWindowPos2fARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FMESAPROC +epoxy_glWindowPos2fMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64849 /* "glWindowPos2fMESA" */, + 64818 /* "glWindowPos2f" */, + 64832 /* "glWindowPos2fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64849 /* "glWindowPos2fMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FVPROC +epoxy_glWindowPos2fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64867 /* "glWindowPos2fv" */, + 64882 /* "glWindowPos2fvARB" */, + 64900 /* "glWindowPos2fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64867 /* "glWindowPos2fv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FVARBPROC +epoxy_glWindowPos2fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64882 /* "glWindowPos2fvARB" */, + 64867 /* "glWindowPos2fv" */, + 64900 /* "glWindowPos2fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64882 /* "glWindowPos2fvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2FVMESAPROC +epoxy_glWindowPos2fvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64900 /* "glWindowPos2fvMESA" */, + 64867 /* "glWindowPos2fv" */, + 64882 /* "glWindowPos2fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64900 /* "glWindowPos2fvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IPROC +epoxy_glWindowPos2i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64919 /* "glWindowPos2i" */, + 64933 /* "glWindowPos2iARB" */, + 64950 /* "glWindowPos2iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64919 /* "glWindowPos2i" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IARBPROC +epoxy_glWindowPos2iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64933 /* "glWindowPos2iARB" */, + 64919 /* "glWindowPos2i" */, + 64950 /* "glWindowPos2iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64933 /* "glWindowPos2iARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IMESAPROC +epoxy_glWindowPos2iMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64950 /* "glWindowPos2iMESA" */, + 64919 /* "glWindowPos2i" */, + 64933 /* "glWindowPos2iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 64950 /* "glWindowPos2iMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IVPROC +epoxy_glWindowPos2iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64968 /* "glWindowPos2iv" */, + 64983 /* "glWindowPos2ivARB" */, + 65001 /* "glWindowPos2ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64968 /* "glWindowPos2iv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IVARBPROC +epoxy_glWindowPos2ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 64983 /* "glWindowPos2ivARB" */, + 64968 /* "glWindowPos2iv" */, + 65001 /* "glWindowPos2ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 64983 /* "glWindowPos2ivARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2IVMESAPROC +epoxy_glWindowPos2ivMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65001 /* "glWindowPos2ivMESA" */, + 64968 /* "glWindowPos2iv" */, + 64983 /* "glWindowPos2ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65001 /* "glWindowPos2ivMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SPROC +epoxy_glWindowPos2s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65020 /* "glWindowPos2s" */, + 65034 /* "glWindowPos2sARB" */, + 65051 /* "glWindowPos2sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65020 /* "glWindowPos2s" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SARBPROC +epoxy_glWindowPos2sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65034 /* "glWindowPos2sARB" */, + 65020 /* "glWindowPos2s" */, + 65051 /* "glWindowPos2sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65034 /* "glWindowPos2sARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SMESAPROC +epoxy_glWindowPos2sMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65051 /* "glWindowPos2sMESA" */, + 65020 /* "glWindowPos2s" */, + 65034 /* "glWindowPos2sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65051 /* "glWindowPos2sMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SVPROC +epoxy_glWindowPos2sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65069 /* "glWindowPos2sv" */, + 65084 /* "glWindowPos2svARB" */, + 65102 /* "glWindowPos2svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65069 /* "glWindowPos2sv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SVARBPROC +epoxy_glWindowPos2svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65084 /* "glWindowPos2svARB" */, + 65069 /* "glWindowPos2sv" */, + 65102 /* "glWindowPos2svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65084 /* "glWindowPos2svARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS2SVMESAPROC +epoxy_glWindowPos2svMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65102 /* "glWindowPos2svMESA" */, + 65069 /* "glWindowPos2sv" */, + 65084 /* "glWindowPos2svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65102 /* "glWindowPos2svMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DPROC +epoxy_glWindowPos3d_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65121 /* "glWindowPos3d" */, + 65135 /* "glWindowPos3dARB" */, + 65152 /* "glWindowPos3dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65121 /* "glWindowPos3d" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DARBPROC +epoxy_glWindowPos3dARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65135 /* "glWindowPos3dARB" */, + 65121 /* "glWindowPos3d" */, + 65152 /* "glWindowPos3dMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65135 /* "glWindowPos3dARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DMESAPROC +epoxy_glWindowPos3dMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65152 /* "glWindowPos3dMESA" */, + 65121 /* "glWindowPos3d" */, + 65135 /* "glWindowPos3dARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65152 /* "glWindowPos3dMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DVPROC +epoxy_glWindowPos3dv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65170 /* "glWindowPos3dv" */, + 65185 /* "glWindowPos3dvARB" */, + 65203 /* "glWindowPos3dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65170 /* "glWindowPos3dv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DVARBPROC +epoxy_glWindowPos3dvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65185 /* "glWindowPos3dvARB" */, + 65170 /* "glWindowPos3dv" */, + 65203 /* "glWindowPos3dvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65185 /* "glWindowPos3dvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3DVMESAPROC +epoxy_glWindowPos3dvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65203 /* "glWindowPos3dvMESA" */, + 65170 /* "glWindowPos3dv" */, + 65185 /* "glWindowPos3dvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65203 /* "glWindowPos3dvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FPROC +epoxy_glWindowPos3f_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65222 /* "glWindowPos3f" */, + 65236 /* "glWindowPos3fARB" */, + 65253 /* "glWindowPos3fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65222 /* "glWindowPos3f" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FARBPROC +epoxy_glWindowPos3fARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65236 /* "glWindowPos3fARB" */, + 65222 /* "glWindowPos3f" */, + 65253 /* "glWindowPos3fMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65236 /* "glWindowPos3fARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FMESAPROC +epoxy_glWindowPos3fMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65253 /* "glWindowPos3fMESA" */, + 65222 /* "glWindowPos3f" */, + 65236 /* "glWindowPos3fARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65253 /* "glWindowPos3fMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FVPROC +epoxy_glWindowPos3fv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65271 /* "glWindowPos3fv" */, + 65286 /* "glWindowPos3fvARB" */, + 65304 /* "glWindowPos3fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65271 /* "glWindowPos3fv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FVARBPROC +epoxy_glWindowPos3fvARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65286 /* "glWindowPos3fvARB" */, + 65271 /* "glWindowPos3fv" */, + 65304 /* "glWindowPos3fvMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65286 /* "glWindowPos3fvARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3FVMESAPROC +epoxy_glWindowPos3fvMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65304 /* "glWindowPos3fvMESA" */, + 65271 /* "glWindowPos3fv" */, + 65286 /* "glWindowPos3fvARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65304 /* "glWindowPos3fvMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IPROC +epoxy_glWindowPos3i_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65323 /* "glWindowPos3i" */, + 65337 /* "glWindowPos3iARB" */, + 65354 /* "glWindowPos3iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65323 /* "glWindowPos3i" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IARBPROC +epoxy_glWindowPos3iARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65337 /* "glWindowPos3iARB" */, + 65323 /* "glWindowPos3i" */, + 65354 /* "glWindowPos3iMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65337 /* "glWindowPos3iARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IMESAPROC +epoxy_glWindowPos3iMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65354 /* "glWindowPos3iMESA" */, + 65323 /* "glWindowPos3i" */, + 65337 /* "glWindowPos3iARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65354 /* "glWindowPos3iMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IVPROC +epoxy_glWindowPos3iv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65372 /* "glWindowPos3iv" */, + 65387 /* "glWindowPos3ivARB" */, + 65405 /* "glWindowPos3ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65372 /* "glWindowPos3iv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IVARBPROC +epoxy_glWindowPos3ivARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65387 /* "glWindowPos3ivARB" */, + 65372 /* "glWindowPos3iv" */, + 65405 /* "glWindowPos3ivMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65387 /* "glWindowPos3ivARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3IVMESAPROC +epoxy_glWindowPos3ivMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65405 /* "glWindowPos3ivMESA" */, + 65372 /* "glWindowPos3iv" */, + 65387 /* "glWindowPos3ivARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65405 /* "glWindowPos3ivMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SPROC +epoxy_glWindowPos3s_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65424 /* "glWindowPos3s" */, + 65438 /* "glWindowPos3sARB" */, + 65455 /* "glWindowPos3sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65424 /* "glWindowPos3s" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SARBPROC +epoxy_glWindowPos3sARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65438 /* "glWindowPos3sARB" */, + 65424 /* "glWindowPos3s" */, + 65455 /* "glWindowPos3sMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65438 /* "glWindowPos3sARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SMESAPROC +epoxy_glWindowPos3sMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65455 /* "glWindowPos3sMESA" */, + 65424 /* "glWindowPos3s" */, + 65438 /* "glWindowPos3sARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65455 /* "glWindowPos3sMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SVPROC +epoxy_glWindowPos3sv_resolver(void) +{ + static const enum gl_provider providers[] = { + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65473 /* "glWindowPos3sv" */, + 65488 /* "glWindowPos3svARB" */, + 65506 /* "glWindowPos3svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65473 /* "glWindowPos3sv" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SVARBPROC +epoxy_glWindowPos3svARB_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_ARB_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_MESA_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65488 /* "glWindowPos3svARB" */, + 65473 /* "glWindowPos3sv" */, + 65506 /* "glWindowPos3svMESA" */, + }; + return gl_provider_resolver(entrypoint_strings + 65488 /* "glWindowPos3svARB" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS3SVMESAPROC +epoxy_glWindowPos3svMESA_resolver(void) +{ + static const enum gl_provider providers[] = { + GL_extension_GL_MESA_window_pos, + Desktop_OpenGL_1_4, + GL_extension_GL_ARB_window_pos, + gl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 65506 /* "glWindowPos3svMESA" */, + 65473 /* "glWindowPos3sv" */, + 65488 /* "glWindowPos3svARB" */, + }; + return gl_provider_resolver(entrypoint_strings + 65506 /* "glWindowPos3svMESA" */, + providers, entrypoints); +} + +static PFNGLWINDOWPOS4DMESAPROC +epoxy_glWindowPos4dMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65525 /* glWindowPos4dMESA */); +} + +static PFNGLWINDOWPOS4DVMESAPROC +epoxy_glWindowPos4dvMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65543 /* glWindowPos4dvMESA */); +} + +static PFNGLWINDOWPOS4FMESAPROC +epoxy_glWindowPos4fMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65562 /* glWindowPos4fMESA */); +} + +static PFNGLWINDOWPOS4FVMESAPROC +epoxy_glWindowPos4fvMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65580 /* glWindowPos4fvMESA */); +} + +static PFNGLWINDOWPOS4IMESAPROC +epoxy_glWindowPos4iMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65599 /* glWindowPos4iMESA */); +} + +static PFNGLWINDOWPOS4IVMESAPROC +epoxy_glWindowPos4ivMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65617 /* glWindowPos4ivMESA */); +} + +static PFNGLWINDOWPOS4SMESAPROC +epoxy_glWindowPos4sMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65636 /* glWindowPos4sMESA */); +} + +static PFNGLWINDOWPOS4SVMESAPROC +epoxy_glWindowPos4svMESA_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_MESA_window_pos, 65654 /* glWindowPos4svMESA */); +} + +static PFNGLWRITEMASKEXTPROC +epoxy_glWriteMaskEXT_resolver(void) +{ + return gl_single_resolver(GL_extension_GL_EXT_vertex_shader, 65673 /* glWriteMaskEXT */); +} + +GEN_THUNKS(glAccum, (GLenum op, GLfloat value), (op, value)) +GEN_THUNKS(glAccumxOES, (GLenum op, GLfixed value), (op, value)) +GEN_THUNKS(glActiveProgramEXT, (GLuint program), (program)) +GEN_THUNKS(glActiveShaderProgram, (GLuint pipeline, GLuint program), (pipeline, program)) +GEN_THUNKS(glActiveShaderProgramEXT, (GLuint pipeline, GLuint program), (pipeline, program)) +GEN_THUNKS(glActiveStencilFaceEXT, (GLenum face), (face)) +GEN_THUNKS(glActiveTexture, (GLenum texture), (texture)) +GEN_THUNKS(glActiveTextureARB, (GLenum texture), (texture)) +GEN_THUNKS(glActiveVaryingNV, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS(glAlphaFragmentOp1ATI, (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod), (op, dst, dstMod, arg1, arg1Rep, arg1Mod)) +GEN_THUNKS(glAlphaFragmentOp2ATI, (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod), (op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)) +GEN_THUNKS(glAlphaFragmentOp3ATI, (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod), (op, dst, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)) +GEN_THUNKS(glAlphaFunc, (GLenum func, GLfloat ref), (func, ref)) +GEN_THUNKS(glAlphaFuncQCOM, (GLenum func, GLclampf ref), (func, ref)) +GEN_THUNKS(glAlphaFuncx, (GLenum func, GLfixed ref), (func, ref)) +GEN_THUNKS(glAlphaFuncxOES, (GLenum func, GLfixed ref), (func, ref)) +GEN_THUNKS(glApplyFramebufferAttachmentCMAAINTEL, (void), ()) +GEN_THUNKS(glApplyTextureEXT, (GLenum mode), (mode)) +GEN_THUNKS_RET(GLboolean, glAreProgramsResidentNV, (GLsizei n, const GLuint * programs, GLboolean * residences), (n, programs, residences)) +GEN_THUNKS_RET(GLboolean, glAreTexturesResident, (GLsizei n, const GLuint * textures, GLboolean * residences), (n, textures, residences)) +GEN_THUNKS_RET(GLboolean, glAreTexturesResidentEXT, (GLsizei n, const GLuint * textures, GLboolean * residences), (n, textures, residences)) +GEN_THUNKS(glArrayElement, (GLint i), (i)) +GEN_THUNKS(glArrayElementEXT, (GLint i), (i)) +GEN_THUNKS(glArrayObjectATI, (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset), (array, size, type, stride, buffer, offset)) +GEN_THUNKS(glAsyncMarkerSGIX, (GLuint marker), (marker)) +GEN_THUNKS(glAttachObjectARB, (GLhandleARB containerObj, GLhandleARB obj), ((uintptr_t)containerObj, (uintptr_t)obj)) +GEN_THUNKS(glAttachShader, (GLuint program, GLuint shader), (program, shader)) +GEN_THUNKS(glBegin_unwrapped, (GLenum mode), (mode)) +GEN_THUNKS(glBeginConditionalRender, (GLuint id, GLenum mode), (id, mode)) +GEN_THUNKS(glBeginConditionalRenderNV, (GLuint id, GLenum mode), (id, mode)) +GEN_THUNKS(glBeginConditionalRenderNVX, (GLuint id), (id)) +GEN_THUNKS(glBeginFragmentShaderATI, (void), ()) +GEN_THUNKS(glBeginOcclusionQueryNV, (GLuint id), (id)) +GEN_THUNKS(glBeginPerfMonitorAMD, (GLuint monitor), (monitor)) +GEN_THUNKS(glBeginPerfQueryINTEL, (GLuint queryHandle), (queryHandle)) +GEN_THUNKS(glBeginQuery, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBeginQueryARB, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBeginQueryEXT, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBeginQueryIndexed, (GLenum target, GLuint index, GLuint id), (target, index, id)) +GEN_THUNKS(glBeginTransformFeedback, (GLenum primitiveMode), (primitiveMode)) +GEN_THUNKS(glBeginTransformFeedbackEXT, (GLenum primitiveMode), (primitiveMode)) +GEN_THUNKS(glBeginTransformFeedbackNV, (GLenum primitiveMode), (primitiveMode)) +GEN_THUNKS(glBeginVertexShaderEXT, (void), ()) +GEN_THUNKS(glBeginVideoCaptureNV, (GLuint video_capture_slot), (video_capture_slot)) +GEN_THUNKS(glBindAttribLocation, (GLuint program, GLuint index, const GLchar * name), (program, index, name)) +GEN_THUNKS(glBindAttribLocationARB, (GLhandleARB programObj, GLuint index, const GLcharARB * name), ((uintptr_t)programObj, index, name)) +GEN_THUNKS(glBindBuffer, (GLenum target, GLuint buffer), (target, buffer)) +GEN_THUNKS(glBindBufferARB, (GLenum target, GLuint buffer), (target, buffer)) +GEN_THUNKS(glBindBufferBase, (GLenum target, GLuint index, GLuint buffer), (target, index, buffer)) +GEN_THUNKS(glBindBufferBaseEXT, (GLenum target, GLuint index, GLuint buffer), (target, index, buffer)) +GEN_THUNKS(glBindBufferBaseNV, (GLenum target, GLuint index, GLuint buffer), (target, index, buffer)) +GEN_THUNKS(glBindBufferOffsetEXT, (GLenum target, GLuint index, GLuint buffer, GLintptr offset), (target, index, buffer, offset)) +GEN_THUNKS(glBindBufferOffsetNV, (GLenum target, GLuint index, GLuint buffer, GLintptr offset), (target, index, buffer, offset)) +GEN_THUNKS(glBindBufferRange, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, index, buffer, offset, size)) +GEN_THUNKS(glBindBufferRangeEXT, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, index, buffer, offset, size)) +GEN_THUNKS(glBindBufferRangeNV, (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, index, buffer, offset, size)) +GEN_THUNKS(glBindBuffersBase, (GLenum target, GLuint first, GLsizei count, const GLuint * buffers), (target, first, count, buffers)) +GEN_THUNKS(glBindBuffersRange, (GLenum target, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizeiptr * sizes), (target, first, count, buffers, offsets, sizes)) +GEN_THUNKS(glBindFragDataLocation, (GLuint program, GLuint color, const GLchar * name), (program, color, name)) +GEN_THUNKS(glBindFragDataLocationEXT, (GLuint program, GLuint color, const GLchar * name), (program, color, name)) +GEN_THUNKS(glBindFragDataLocationIndexed, (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name), (program, colorNumber, index, name)) +GEN_THUNKS(glBindFragDataLocationIndexedEXT, (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name), (program, colorNumber, index, name)) +GEN_THUNKS(glBindFragmentShaderATI, (GLuint id), (id)) +GEN_THUNKS(glBindFramebuffer, (GLenum target, GLuint framebuffer), (target, framebuffer)) +GEN_THUNKS(glBindFramebufferEXT, (GLenum target, GLuint framebuffer), (target, framebuffer)) +GEN_THUNKS(glBindFramebufferOES, (GLenum target, GLuint framebuffer), (target, framebuffer)) +GEN_THUNKS(glBindImageTexture, (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format), (unit, texture, level, layered, layer, access, format)) +GEN_THUNKS(glBindImageTextureEXT, (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format), (index, texture, level, layered, layer, access, format)) +GEN_THUNKS(glBindImageTextures, (GLuint first, GLsizei count, const GLuint * textures), (first, count, textures)) +GEN_THUNKS_RET(GLuint, glBindLightParameterEXT, (GLenum light, GLenum value), (light, value)) +GEN_THUNKS_RET(GLuint, glBindMaterialParameterEXT, (GLenum face, GLenum value), (face, value)) +GEN_THUNKS(glBindMultiTextureEXT, (GLenum texunit, GLenum target, GLuint texture), (texunit, target, texture)) +GEN_THUNKS_RET(GLuint, glBindParameterEXT, (GLenum value), (value)) +GEN_THUNKS(glBindProgramARB, (GLenum target, GLuint program), (target, program)) +GEN_THUNKS(glBindProgramNV, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBindProgramPipeline, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glBindProgramPipelineEXT, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glBindRenderbuffer, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glBindRenderbufferEXT, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glBindRenderbufferOES, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glBindSampler, (GLuint unit, GLuint sampler), (unit, sampler)) +GEN_THUNKS(glBindSamplers, (GLuint first, GLsizei count, const GLuint * samplers), (first, count, samplers)) +GEN_THUNKS_RET(GLuint, glBindTexGenParameterEXT, (GLenum unit, GLenum coord, GLenum value), (unit, coord, value)) +GEN_THUNKS(glBindTexture, (GLenum target, GLuint texture), (target, texture)) +GEN_THUNKS(glBindTextureEXT, (GLenum target, GLuint texture), (target, texture)) +GEN_THUNKS(glBindTextureUnit, (GLuint unit, GLuint texture), (unit, texture)) +GEN_THUNKS_RET(GLuint, glBindTextureUnitParameterEXT, (GLenum unit, GLenum value), (unit, value)) +GEN_THUNKS(glBindTextures, (GLuint first, GLsizei count, const GLuint * textures), (first, count, textures)) +GEN_THUNKS(glBindTransformFeedback, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBindTransformFeedbackNV, (GLenum target, GLuint id), (target, id)) +GEN_THUNKS(glBindVertexArray, (GLuint array), (array)) +GEN_THUNKS(glBindVertexArrayAPPLE, (GLuint array), (array)) +GEN_THUNKS(glBindVertexArrayOES, (GLuint array), (array)) +GEN_THUNKS(glBindVertexBuffer, (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride), (bindingindex, buffer, offset, stride)) +GEN_THUNKS(glBindVertexBuffers, (GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides), (first, count, buffers, offsets, strides)) +GEN_THUNKS(glBindVertexShaderEXT, (GLuint id), (id)) +GEN_THUNKS(glBindVideoCaptureStreamBufferNV, (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset), (video_capture_slot, stream, frame_region, offset)) +GEN_THUNKS(glBindVideoCaptureStreamTextureNV, (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture), (video_capture_slot, stream, frame_region, target, texture)) +GEN_THUNKS(glBinormal3bEXT, (GLbyte bx, GLbyte by, GLbyte bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3bvEXT, (const GLbyte * v), (v)) +GEN_THUNKS(glBinormal3dEXT, (GLdouble bx, GLdouble by, GLdouble bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3dvEXT, (const GLdouble * v), (v)) +GEN_THUNKS(glBinormal3fEXT, (GLfloat bx, GLfloat by, GLfloat bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3fvEXT, (const GLfloat * v), (v)) +GEN_THUNKS(glBinormal3iEXT, (GLint bx, GLint by, GLint bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3ivEXT, (const GLint * v), (v)) +GEN_THUNKS(glBinormal3sEXT, (GLshort bx, GLshort by, GLshort bz), (bx, by, bz)) +GEN_THUNKS(glBinormal3svEXT, (const GLshort * v), (v)) +GEN_THUNKS(glBinormalPointerEXT, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glBitmap, (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap), (width, height, xorig, yorig, xmove, ymove, bitmap)) +GEN_THUNKS(glBitmapxOES, (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte * bitmap), (width, height, xorig, yorig, xmove, ymove, bitmap)) +GEN_THUNKS(glBlendBarrier, (void), ()) +GEN_THUNKS(glBlendBarrierKHR, (void), ()) +GEN_THUNKS(glBlendBarrierNV, (void), ()) +GEN_THUNKS(glBlendColor, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glBlendColorEXT, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glBlendColorxOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glBlendEquation, (GLenum mode), (mode)) +GEN_THUNKS(glBlendEquationEXT, (GLenum mode), (mode)) +GEN_THUNKS(glBlendEquationIndexedAMD, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationOES, (GLenum mode), (mode)) +GEN_THUNKS(glBlendEquationSeparate, (GLenum modeRGB, GLenum modeAlpha), (modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateEXT, (GLenum modeRGB, GLenum modeAlpha), (modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateIndexedAMD, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateOES, (GLenum modeRGB, GLenum modeAlpha), (modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparatei, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateiARB, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateiEXT, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationSeparateiOES, (GLuint buf, GLenum modeRGB, GLenum modeAlpha), (buf, modeRGB, modeAlpha)) +GEN_THUNKS(glBlendEquationi, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationiARB, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationiEXT, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendEquationiOES, (GLuint buf, GLenum mode), (buf, mode)) +GEN_THUNKS(glBlendFunc, (GLenum sfactor, GLenum dfactor), (sfactor, dfactor)) +GEN_THUNKS(glBlendFuncIndexedAMD, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFuncSeparate, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) +GEN_THUNKS(glBlendFuncSeparateEXT, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) +GEN_THUNKS(glBlendFuncSeparateINGR, (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha), (sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)) +GEN_THUNKS(glBlendFuncSeparateIndexedAMD, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateOES, (GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparatei, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateiARB, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateiEXT, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFuncSeparateiOES, (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha), (buf, srcRGB, dstRGB, srcAlpha, dstAlpha)) +GEN_THUNKS(glBlendFunci, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFunciARB, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFunciEXT, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendFunciOES, (GLuint buf, GLenum src, GLenum dst), (buf, src, dst)) +GEN_THUNKS(glBlendParameteriNV, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glBlitFramebuffer, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitFramebufferANGLE, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitFramebufferEXT, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitFramebufferNV, (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBlitNamedFramebuffer, (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS(glBufferAddressRangeNV, (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length), (pname, index, address, length)) +GEN_THUNKS(glBufferData, (GLenum target, GLsizeiptr size, const void * data, GLenum usage), (target, size, data, usage)) +GEN_THUNKS(glBufferDataARB, (GLenum target, GLsizeiptrARB size, const void * data, GLenum usage), (target, size, data, usage)) +GEN_THUNKS(glBufferPageCommitmentARB, (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit), (target, offset, size, commit)) +GEN_THUNKS(glBufferParameteriAPPLE, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glBufferStorage, (GLenum target, GLsizeiptr size, const void * data, GLbitfield flags), (target, size, data, flags)) +GEN_THUNKS(glBufferStorageEXT, (GLenum target, GLsizeiptr size, const void * data, GLbitfield flags), (target, size, data, flags)) +GEN_THUNKS(glBufferSubData, (GLenum target, GLintptr offset, GLsizeiptr size, const void * data), (target, offset, size, data)) +GEN_THUNKS(glBufferSubDataARB, (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void * data), (target, offset, size, data)) +GEN_THUNKS(glCallCommandListNV, (GLuint list), (list)) +GEN_THUNKS(glCallList, (GLuint list), (list)) +GEN_THUNKS(glCallLists, (GLsizei n, GLenum type, const void * lists), (n, type, lists)) +GEN_THUNKS_RET(GLenum, glCheckFramebufferStatus, (GLenum target), (target)) +GEN_THUNKS_RET(GLenum, glCheckFramebufferStatusEXT, (GLenum target), (target)) +GEN_THUNKS_RET(GLenum, glCheckFramebufferStatusOES, (GLenum target), (target)) +GEN_THUNKS_RET(GLenum, glCheckNamedFramebufferStatus, (GLuint framebuffer, GLenum target), (framebuffer, target)) +GEN_THUNKS_RET(GLenum, glCheckNamedFramebufferStatusEXT, (GLuint framebuffer, GLenum target), (framebuffer, target)) +GEN_THUNKS(glClampColor, (GLenum target, GLenum clamp), (target, clamp)) +GEN_THUNKS(glClampColorARB, (GLenum target, GLenum clamp), (target, clamp)) +GEN_THUNKS(glClear, (GLbitfield mask), (mask)) +GEN_THUNKS(glClearAccum, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearAccumxOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearBufferData, (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void * data), (target, internalformat, format, type, data)) +GEN_THUNKS(glClearBufferSubData, (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data), (target, internalformat, offset, size, format, type, data)) +GEN_THUNKS(glClearBufferfi, (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil), (buffer, drawbuffer, depth, stencil)) +GEN_THUNKS(glClearBufferfv, (GLenum buffer, GLint drawbuffer, const GLfloat * value), (buffer, drawbuffer, value)) +GEN_THUNKS(glClearBufferiv, (GLenum buffer, GLint drawbuffer, const GLint * value), (buffer, drawbuffer, value)) +GEN_THUNKS(glClearBufferuiv, (GLenum buffer, GLint drawbuffer, const GLuint * value), (buffer, drawbuffer, value)) +GEN_THUNKS(glClearColor, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorIiEXT, (GLint red, GLint green, GLint blue, GLint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorIuiEXT, (GLuint red, GLuint green, GLuint blue, GLuint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorx, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearColorxOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glClearDepth, (GLdouble depth), (depth)) +GEN_THUNKS(glClearDepthdNV, (GLdouble depth), (depth)) +GEN_THUNKS(glClearDepthf, (GLfloat d), (d)) +GEN_THUNKS(glClearDepthfOES, (GLclampf depth), (depth)) +GEN_THUNKS(glClearDepthx, (GLfixed depth), (depth)) +GEN_THUNKS(glClearDepthxOES, (GLfixed depth), (depth)) +GEN_THUNKS(glClearIndex, (GLfloat c), (c)) +GEN_THUNKS(glClearNamedBufferData, (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data), (buffer, internalformat, format, type, data)) +GEN_THUNKS(glClearNamedBufferDataEXT, (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void * data), (buffer, internalformat, format, type, data)) +GEN_THUNKS(glClearNamedBufferSubData, (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data), (buffer, internalformat, offset, size, format, type, data)) +GEN_THUNKS(glClearNamedBufferSubDataEXT, (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void * data), (buffer, internalformat, offset, size, format, type, data)) +GEN_THUNKS(glClearNamedFramebufferfi, (GLuint framebuffer, GLenum buffer, const GLfloat depth, GLint stencil), (framebuffer, buffer, depth, stencil)) +GEN_THUNKS(glClearNamedFramebufferfv, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat * value), (framebuffer, buffer, drawbuffer, value)) +GEN_THUNKS(glClearNamedFramebufferiv, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint * value), (framebuffer, buffer, drawbuffer, value)) +GEN_THUNKS(glClearNamedFramebufferuiv, (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint * value), (framebuffer, buffer, drawbuffer, value)) +GEN_THUNKS(glClearStencil, (GLint s), (s)) +GEN_THUNKS(glClearTexImage, (GLuint texture, GLint level, GLenum format, GLenum type, const void * data), (texture, level, format, type, data)) +GEN_THUNKS(glClearTexSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * data), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data)) +GEN_THUNKS(glClientActiveTexture, (GLenum texture), (texture)) +GEN_THUNKS(glClientActiveTextureARB, (GLenum texture), (texture)) +GEN_THUNKS(glClientActiveVertexStreamATI, (GLenum stream), (stream)) +GEN_THUNKS(glClientAttribDefaultEXT, (GLbitfield mask), (mask)) +GEN_THUNKS_RET(GLenum, glClientWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS_RET(GLenum, glClientWaitSyncAPPLE, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS(glClipControl, (GLenum origin, GLenum depth), (origin, depth)) +GEN_THUNKS(glClipPlane, (GLenum plane, const GLdouble * equation), (plane, equation)) +GEN_THUNKS(glClipPlanef, (GLenum p, const GLfloat * eqn), (p, eqn)) +GEN_THUNKS(glClipPlanefIMG, (GLenum p, const GLfloat * eqn), (p, eqn)) +GEN_THUNKS(glClipPlanefOES, (GLenum plane, const GLfloat * equation), (plane, equation)) +GEN_THUNKS(glClipPlanex, (GLenum plane, const GLfixed * equation), (plane, equation)) +GEN_THUNKS(glClipPlanexIMG, (GLenum p, const GLfixed * eqn), (p, eqn)) +GEN_THUNKS(glClipPlanexOES, (GLenum plane, const GLfixed * equation), (plane, equation)) +GEN_THUNKS(glColor3b, (GLbyte red, GLbyte green, GLbyte blue), (red, green, blue)) +GEN_THUNKS(glColor3bv, (const GLbyte * v), (v)) +GEN_THUNKS(glColor3d, (GLdouble red, GLdouble green, GLdouble blue), (red, green, blue)) +GEN_THUNKS(glColor3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glColor3f, (GLfloat red, GLfloat green, GLfloat blue), (red, green, blue)) +GEN_THUNKS(glColor3fVertex3fSUN, (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z), (r, g, b, x, y, z)) +GEN_THUNKS(glColor3fVertex3fvSUN, (const GLfloat * c, const GLfloat * v), (c, v)) +GEN_THUNKS(glColor3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glColor3hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue), (red, green, blue)) +GEN_THUNKS(glColor3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glColor3i, (GLint red, GLint green, GLint blue), (red, green, blue)) +GEN_THUNKS(glColor3iv, (const GLint * v), (v)) +GEN_THUNKS(glColor3s, (GLshort red, GLshort green, GLshort blue), (red, green, blue)) +GEN_THUNKS(glColor3sv, (const GLshort * v), (v)) +GEN_THUNKS(glColor3ub, (GLubyte red, GLubyte green, GLubyte blue), (red, green, blue)) +GEN_THUNKS(glColor3ubv, (const GLubyte * v), (v)) +GEN_THUNKS(glColor3ui, (GLuint red, GLuint green, GLuint blue), (red, green, blue)) +GEN_THUNKS(glColor3uiv, (const GLuint * v), (v)) +GEN_THUNKS(glColor3us, (GLushort red, GLushort green, GLushort blue), (red, green, blue)) +GEN_THUNKS(glColor3usv, (const GLushort * v), (v)) +GEN_THUNKS(glColor3xOES, (GLfixed red, GLfixed green, GLfixed blue), (red, green, blue)) +GEN_THUNKS(glColor3xvOES, (const GLfixed * components), (components)) +GEN_THUNKS(glColor4b, (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4bv, (const GLbyte * v), (v)) +GEN_THUNKS(glColor4d, (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glColor4f, (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4fNormal3fVertex3fSUN, (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glColor4fNormal3fVertex3fvSUN, (const GLfloat * c, const GLfloat * n, const GLfloat * v), (c, n, v)) +GEN_THUNKS(glColor4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glColor4hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glColor4i, (GLint red, GLint green, GLint blue, GLint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4iv, (const GLint * v), (v)) +GEN_THUNKS(glColor4s, (GLshort red, GLshort green, GLshort blue, GLshort alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4sv, (const GLshort * v), (v)) +GEN_THUNKS(glColor4ub, (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4ubVertex2fSUN, (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y), (r, g, b, a, x, y)) +GEN_THUNKS(glColor4ubVertex2fvSUN, (const GLubyte * c, const GLfloat * v), (c, v)) +GEN_THUNKS(glColor4ubVertex3fSUN, (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z), (r, g, b, a, x, y, z)) +GEN_THUNKS(glColor4ubVertex3fvSUN, (const GLubyte * c, const GLfloat * v), (c, v)) +GEN_THUNKS(glColor4ubv, (const GLubyte * v), (v)) +GEN_THUNKS(glColor4ui, (GLuint red, GLuint green, GLuint blue, GLuint alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4uiv, (const GLuint * v), (v)) +GEN_THUNKS(glColor4us, (GLushort red, GLushort green, GLushort blue, GLushort alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4usv, (const GLushort * v), (v)) +GEN_THUNKS(glColor4x, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4xOES, (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColor4xvOES, (const GLfixed * components), (components)) +GEN_THUNKS(glColorFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glColorFragmentOp1ATI, (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod)) +GEN_THUNKS(glColorFragmentOp2ATI, (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod)) +GEN_THUNKS(glColorFragmentOp3ATI, (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod), (op, dst, dstMask, dstMod, arg1, arg1Rep, arg1Mod, arg2, arg2Rep, arg2Mod, arg3, arg3Rep, arg3Mod)) +GEN_THUNKS(glColorMask, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha), (red, green, blue, alpha)) +GEN_THUNKS(glColorMaskIndexedEXT, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaski, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaskiEXT, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaskiOES, (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a), (index, r, g, b, a)) +GEN_THUNKS(glColorMaterial, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glColorP3ui, (GLenum type, GLuint color), (type, color)) +GEN_THUNKS(glColorP3uiv, (GLenum type, const GLuint * color), (type, color)) +GEN_THUNKS(glColorP4ui, (GLenum type, GLuint color), (type, color)) +GEN_THUNKS(glColorP4uiv, (GLenum type, const GLuint * color), (type, color)) +GEN_THUNKS(glColorPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glColorPointerEXT, (GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer), (size, type, stride, count, pointer)) +GEN_THUNKS(glColorPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glColorPointervINTEL, (GLint size, GLenum type, const void ** pointer), (size, type, pointer)) +GEN_THUNKS(glColorSubTable, (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data), (target, start, count, format, type, data)) +GEN_THUNKS(glColorSubTableEXT, (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void * data), (target, start, count, format, type, data)) +GEN_THUNKS(glColorTable, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table), (target, internalformat, width, format, type, table)) +GEN_THUNKS(glColorTableEXT, (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void * table), (target, internalFormat, width, format, type, table)) +GEN_THUNKS(glColorTableParameterfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glColorTableParameterfvSGI, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glColorTableParameteriv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glColorTableParameterivSGI, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glColorTableSGI, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * table), (target, internalformat, width, format, type, table)) +GEN_THUNKS(glCombinerInputNV, (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage), (stage, portion, variable, input, mapping, componentUsage)) +GEN_THUNKS(glCombinerOutputNV, (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum), (stage, portion, abOutput, cdOutput, sumOutput, scale, bias, abDotProduct, cdDotProduct, muxSum)) +GEN_THUNKS(glCombinerParameterfNV, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glCombinerParameterfvNV, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glCombinerParameteriNV, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glCombinerParameterivNV, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glCombinerStageParameterfvNV, (GLenum stage, GLenum pname, const GLfloat * params), (stage, pname, params)) +GEN_THUNKS(glCommandListSegmentsNV, (GLuint list, GLuint segments), (list, segments)) +GEN_THUNKS(glCompileCommandListNV, (GLuint list), (list)) +GEN_THUNKS(glCompileShader, (GLuint shader), (shader)) +GEN_THUNKS(glCompileShaderARB, (GLhandleARB shaderObj), ((uintptr_t)shaderObj)) +GEN_THUNKS(glCompileShaderIncludeARB, (GLuint shader, GLsizei count, const GLchar *const* path, const GLint * length), (shader, count, path, length)) +GEN_THUNKS(glCompressedMultiTexImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits), (texunit, target, level, internalformat, width, border, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits), (texunit, target, level, internalformat, width, height, border, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits), (texunit, target, level, internalformat, width, height, depth, border, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexSubImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits), (texunit, target, level, xoffset, width, format, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexSubImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits), (texunit, target, level, xoffset, yoffset, width, height, format, imageSize, bits)) +GEN_THUNKS(glCompressedMultiTexSubImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits), (texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits)) +GEN_THUNKS(glCompressedTexImage1D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage1DARB, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage2DARB, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage3D, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, depth, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage3DARB, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, depth, border, imageSize, data)) +GEN_THUNKS(glCompressedTexImage3DOES, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * data), (target, level, internalformat, width, height, depth, border, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage1D, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, width, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage1DARB, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, width, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, width, height, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage2DARB, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, width, height, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage3DARB, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureImage1DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void * bits), (texture, target, level, internalformat, width, border, imageSize, bits)) +GEN_THUNKS(glCompressedTextureImage2DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void * bits), (texture, target, level, internalformat, width, height, border, imageSize, bits)) +GEN_THUNKS(glCompressedTextureImage3DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void * bits), (texture, target, level, internalformat, width, height, depth, border, imageSize, bits)) +GEN_THUNKS(glCompressedTextureSubImage1D, (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * data), (texture, level, xoffset, width, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureSubImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void * bits), (texture, target, level, xoffset, width, format, imageSize, bits)) +GEN_THUNKS(glCompressedTextureSubImage2D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * data), (texture, level, xoffset, yoffset, width, height, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureSubImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void * bits), (texture, target, level, xoffset, yoffset, width, height, format, imageSize, bits)) +GEN_THUNKS(glCompressedTextureSubImage3D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * data), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)) +GEN_THUNKS(glCompressedTextureSubImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void * bits), (texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, bits)) +GEN_THUNKS(glConservativeRasterParameterfNV, (GLenum pname, GLfloat value), (pname, value)) +GEN_THUNKS(glConvolutionFilter1D, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image), (target, internalformat, width, format, type, image)) +GEN_THUNKS(glConvolutionFilter1DEXT, (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void * image), (target, internalformat, width, format, type, image)) +GEN_THUNKS(glConvolutionFilter2D, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image), (target, internalformat, width, height, format, type, image)) +GEN_THUNKS(glConvolutionFilter2DEXT, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * image), (target, internalformat, width, height, format, type, image)) +GEN_THUNKS(glConvolutionParameterf, (GLenum target, GLenum pname, GLfloat params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterfEXT, (GLenum target, GLenum pname, GLfloat params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterfvEXT, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameteri, (GLenum target, GLenum pname, GLint params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameteriEXT, (GLenum target, GLenum pname, GLint params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameteriv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterivEXT, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glConvolutionParameterxOES, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glConvolutionParameterxvOES, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glCopyBufferSubData, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readTarget, writeTarget, readOffset, writeOffset, size)) +GEN_THUNKS(glCopyBufferSubDataNV, (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readTarget, writeTarget, readOffset, writeOffset, size)) +GEN_THUNKS(glCopyColorSubTable, (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width), (target, start, x, y, width)) +GEN_THUNKS(glCopyColorSubTableEXT, (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width), (target, start, x, y, width)) +GEN_THUNKS(glCopyColorTable, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyColorTableSGI, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyConvolutionFilter1D, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyConvolutionFilter1DEXT, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width), (target, internalformat, x, y, width)) +GEN_THUNKS(glCopyConvolutionFilter2D, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height), (target, internalformat, x, y, width, height)) +GEN_THUNKS(glCopyConvolutionFilter2DEXT, (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height), (target, internalformat, x, y, width, height)) +GEN_THUNKS(glCopyImageSubData, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)) +GEN_THUNKS(glCopyImageSubDataEXT, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)) +GEN_THUNKS(glCopyImageSubDataNV, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth)) +GEN_THUNKS(glCopyImageSubDataOES, (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth), (srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)) +GEN_THUNKS(glCopyMultiTexImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (texunit, target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyMultiTexImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (texunit, target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyMultiTexSubImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (texunit, target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyMultiTexSubImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texunit, target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyMultiTexSubImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texunit, target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyNamedBufferSubData, (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readBuffer, writeBuffer, readOffset, writeOffset, size)) +GEN_THUNKS(glCopyPathNV, (GLuint resultPath, GLuint srcPath), (resultPath, srcPath)) +GEN_THUNKS(glCopyPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type), (x, y, width, height, type)) +GEN_THUNKS(glCopyTexImage1D, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyTexImage1DEXT, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyTexImage2D, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyTexImage2DEXT, (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyTexSubImage1D, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTexSubImage1DEXT, (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage2DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage3DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureImage1DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border), (texture, target, level, internalformat, x, y, width, border)) +GEN_THUNKS(glCopyTextureImage2DEXT, (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border), (texture, target, level, internalformat, x, y, width, height, border)) +GEN_THUNKS(glCopyTextureLevelsAPPLE, (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount), (destinationTexture, sourceTexture, sourceBaseLevel, sourceLevelCount)) +GEN_THUNKS(glCopyTextureSubImage1D, (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (texture, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTextureSubImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width), (texture, target, level, xoffset, x, y, width)) +GEN_THUNKS(glCopyTextureSubImage2D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureSubImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, target, level, xoffset, yoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureSubImage3D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCopyTextureSubImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height), (texture, target, level, xoffset, yoffset, zoffset, x, y, width, height)) +GEN_THUNKS(glCoverFillPathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues)) +GEN_THUNKS(glCoverFillPathNV, (GLuint path, GLenum coverMode), (path, coverMode)) +GEN_THUNKS(glCoverStrokePathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, coverMode, transformType, transformValues)) +GEN_THUNKS(glCoverStrokePathNV, (GLuint path, GLenum coverMode), (path, coverMode)) +GEN_THUNKS(glCoverageMaskNV, (GLboolean mask), (mask)) +GEN_THUNKS(glCoverageModulationNV, (GLenum components), (components)) +GEN_THUNKS(glCoverageModulationTableNV, (GLsizei n, const GLfloat * v), (n, v)) +GEN_THUNKS(glCoverageOperationNV, (GLenum operation), (operation)) +GEN_THUNKS(glCreateBuffers, (GLsizei n, GLuint * buffers), (n, buffers)) +GEN_THUNKS(glCreateCommandListsNV, (GLsizei n, GLuint * lists), (n, lists)) +GEN_THUNKS(glCreateFramebuffers, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glCreatePerfQueryINTEL, (GLuint queryId, GLuint * queryHandle), (queryId, queryHandle)) +GEN_THUNKS_RET(GLuint, glCreateProgram, (void), ()) +GEN_THUNKS_RET(GLhandleARB, glCreateProgramObjectARB, (void), ()) +GEN_THUNKS(glCreateProgramPipelines, (GLsizei n, GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glCreateQueries, (GLenum target, GLsizei n, GLuint * ids), (target, n, ids)) +GEN_THUNKS(glCreateRenderbuffers, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glCreateSamplers, (GLsizei n, GLuint * samplers), (n, samplers)) +GEN_THUNKS_RET(GLuint, glCreateShader, (GLenum type), (type)) +GEN_THUNKS_RET(GLhandleARB, glCreateShaderObjectARB, (GLenum shaderType), (shaderType)) +GEN_THUNKS_RET(GLuint, glCreateShaderProgramEXT, (GLenum type, const GLchar * string), (type, string)) +GEN_THUNKS_RET(GLuint, glCreateShaderProgramv, (GLenum type, GLsizei count, const GLchar *const* strings), (type, count, strings)) +GEN_THUNKS_RET(GLuint, glCreateShaderProgramvEXT, (GLenum type, GLsizei count, const GLchar ** strings), (type, count, strings)) +GEN_THUNKS(glCreateStatesNV, (GLsizei n, GLuint * states), (n, states)) +GEN_THUNKS_RET(GLsync, glCreateSyncFromCLeventARB, (struct _cl_context * context, struct _cl_event * event, GLbitfield flags), (context, event, flags)) +GEN_THUNKS(glCreateTextures, (GLenum target, GLsizei n, GLuint * textures), (target, n, textures)) +GEN_THUNKS(glCreateTransformFeedbacks, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glCreateVertexArrays, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS(glCullFace, (GLenum mode), (mode)) +GEN_THUNKS(glCullParameterdvEXT, (GLenum pname, GLdouble * params), (pname, params)) +GEN_THUNKS(glCullParameterfvEXT, (GLenum pname, GLfloat * params), (pname, params)) +GEN_THUNKS(glCurrentPaletteMatrixARB, (GLint index), (index)) +GEN_THUNKS(glCurrentPaletteMatrixOES, (GLuint matrixpaletteindex), (matrixpaletteindex)) +GEN_THUNKS(glDebugMessageCallback, (GLDEBUGPROC callback, const void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageCallbackAMD, (GLDEBUGPROCAMD callback, void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageCallbackARB, (GLDEBUGPROCARB callback, const void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageCallbackKHR, (GLDEBUGPROCKHR callback, const void * userParam), (callback, userParam)) +GEN_THUNKS(glDebugMessageControl, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (source, type, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageControlARB, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (source, type, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageControlKHR, (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (source, type, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageEnableAMD, (GLenum category, GLenum severity, GLsizei count, const GLuint * ids, GLboolean enabled), (category, severity, count, ids, enabled)) +GEN_THUNKS(glDebugMessageInsert, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf), (source, type, id, severity, length, buf)) +GEN_THUNKS(glDebugMessageInsertAMD, (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar * buf), (category, severity, id, length, buf)) +GEN_THUNKS(glDebugMessageInsertARB, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf), (source, type, id, severity, length, buf)) +GEN_THUNKS(glDebugMessageInsertKHR, (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar * buf), (source, type, id, severity, length, buf)) +GEN_THUNKS(glDeformSGIX, (GLbitfield mask), (mask)) +GEN_THUNKS(glDeformationMap3dSGIX, (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points)) +GEN_THUNKS(glDeformationMap3fSGIX, (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, w1, w2, wstride, worder, points)) +GEN_THUNKS(glDeleteAsyncMarkersSGIX, (GLuint marker, GLsizei range), (marker, range)) +GEN_THUNKS(glDeleteBuffers, (GLsizei n, const GLuint * buffers), (n, buffers)) +GEN_THUNKS(glDeleteBuffersARB, (GLsizei n, const GLuint * buffers), (n, buffers)) +GEN_THUNKS(glDeleteCommandListsNV, (GLsizei n, const GLuint * lists), (n, lists)) +GEN_THUNKS(glDeleteFencesAPPLE, (GLsizei n, const GLuint * fences), (n, fences)) +GEN_THUNKS(glDeleteFencesNV, (GLsizei n, const GLuint * fences), (n, fences)) +GEN_THUNKS(glDeleteFragmentShaderATI, (GLuint id), (id)) +GEN_THUNKS(glDeleteFramebuffers, (GLsizei n, const GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glDeleteFramebuffersEXT, (GLsizei n, const GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glDeleteFramebuffersOES, (GLsizei n, const GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glDeleteLists, (GLuint list, GLsizei range), (list, range)) +GEN_THUNKS(glDeleteNamedStringARB, (GLint namelen, const GLchar * name), (namelen, name)) +GEN_THUNKS(glDeleteNamesAMD, (GLenum identifier, GLuint num, const GLuint * names), (identifier, num, names)) +GEN_THUNKS(glDeleteObjectARB, (GLhandleARB obj), ((uintptr_t)obj)) +GEN_THUNKS(glDeleteOcclusionQueriesNV, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeletePathsNV, (GLuint path, GLsizei range), (path, range)) +GEN_THUNKS(glDeletePerfMonitorsAMD, (GLsizei n, GLuint * monitors), (n, monitors)) +GEN_THUNKS(glDeletePerfQueryINTEL, (GLuint queryHandle), (queryHandle)) +GEN_THUNKS(glDeleteProgram, (GLuint program), (program)) +GEN_THUNKS(glDeleteProgramPipelines, (GLsizei n, const GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glDeleteProgramPipelinesEXT, (GLsizei n, const GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glDeleteProgramsARB, (GLsizei n, const GLuint * programs), (n, programs)) +GEN_THUNKS(glDeleteProgramsNV, (GLsizei n, const GLuint * programs), (n, programs)) +GEN_THUNKS(glDeleteQueries, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteQueriesARB, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteQueriesEXT, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteRenderbuffers, (GLsizei n, const GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glDeleteRenderbuffersEXT, (GLsizei n, const GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glDeleteRenderbuffersOES, (GLsizei n, const GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glDeleteSamplers, (GLsizei count, const GLuint * samplers), (count, samplers)) +GEN_THUNKS(glDeleteShader, (GLuint shader), (shader)) +GEN_THUNKS(glDeleteStatesNV, (GLsizei n, const GLuint * states), (n, states)) +GEN_THUNKS(glDeleteSync, (GLsync sync), (sync)) +GEN_THUNKS(glDeleteSyncAPPLE, (GLsync sync), (sync)) +GEN_THUNKS(glDeleteTextures, (GLsizei n, const GLuint * textures), (n, textures)) +GEN_THUNKS(glDeleteTexturesEXT, (GLsizei n, const GLuint * textures), (n, textures)) +GEN_THUNKS(glDeleteTransformFeedbacks, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteTransformFeedbacksNV, (GLsizei n, const GLuint * ids), (n, ids)) +GEN_THUNKS(glDeleteVertexArrays, (GLsizei n, const GLuint * arrays), (n, arrays)) +GEN_THUNKS(glDeleteVertexArraysAPPLE, (GLsizei n, const GLuint * arrays), (n, arrays)) +GEN_THUNKS(glDeleteVertexArraysOES, (GLsizei n, const GLuint * arrays), (n, arrays)) +GEN_THUNKS(glDeleteVertexShaderEXT, (GLuint id), (id)) +GEN_THUNKS(glDepthBoundsEXT, (GLclampd zmin, GLclampd zmax), (zmin, zmax)) +GEN_THUNKS(glDepthBoundsdNV, (GLdouble zmin, GLdouble zmax), (zmin, zmax)) +GEN_THUNKS(glDepthFunc, (GLenum func), (func)) +GEN_THUNKS(glDepthMask, (GLboolean flag), (flag)) +GEN_THUNKS(glDepthRange, (GLdouble hither, GLdouble yon), (hither, yon)) +GEN_THUNKS(glDepthRangeArrayfvNV, (GLuint first, GLsizei count, const GLfloat * v), (first, count, v)) +GEN_THUNKS(glDepthRangeArrayv, (GLuint first, GLsizei count, const GLdouble * v), (first, count, v)) +GEN_THUNKS(glDepthRangeIndexed, (GLuint index, GLdouble n, GLdouble f), (index, n, f)) +GEN_THUNKS(glDepthRangeIndexedfNV, (GLuint index, GLfloat n, GLfloat f), (index, n, f)) +GEN_THUNKS(glDepthRangedNV, (GLdouble zNear, GLdouble zFar), (zNear, zFar)) +GEN_THUNKS(glDepthRangef, (GLfloat n, GLfloat f), (n, f)) +GEN_THUNKS(glDepthRangefOES, (GLclampf n, GLclampf f), (n, f)) +GEN_THUNKS(glDepthRangex, (GLfixed n, GLfixed f), (n, f)) +GEN_THUNKS(glDepthRangexOES, (GLfixed n, GLfixed f), (n, f)) +GEN_THUNKS(glDetachObjectARB, (GLhandleARB containerObj, GLhandleARB attachedObj), ((uintptr_t)containerObj, (uintptr_t)attachedObj)) +GEN_THUNKS(glDetachShader, (GLuint program, GLuint shader), (program, shader)) +GEN_THUNKS(glDetailTexFuncSGIS, (GLenum target, GLsizei n, const GLfloat * points), (target, n, points)) +GEN_THUNKS(glDisable, (GLenum cap), (cap)) +GEN_THUNKS(glDisableClientState, (GLenum array), (array)) +GEN_THUNKS(glDisableClientStateIndexedEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glDisableClientStateiEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glDisableDriverControlQCOM, (GLuint driverControl), (driverControl)) +GEN_THUNKS(glDisableIndexedEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableVariantClientStateEXT, (GLuint id), (id)) +GEN_THUNKS(glDisableVertexArrayAttrib, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glDisableVertexArrayAttribEXT, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glDisableVertexArrayEXT, (GLuint vaobj, GLenum array), (vaobj, array)) +GEN_THUNKS(glDisableVertexAttribAPPLE, (GLuint index, GLenum pname), (index, pname)) +GEN_THUNKS(glDisableVertexAttribArray, (GLuint index), (index)) +GEN_THUNKS(glDisableVertexAttribArrayARB, (GLuint index), (index)) +GEN_THUNKS(glDisablei, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableiEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableiNV, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDisableiOES, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glDiscardFramebufferEXT, (GLenum target, GLsizei numAttachments, const GLenum * attachments), (target, numAttachments, attachments)) +GEN_THUNKS(glDispatchCompute, (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z), (num_groups_x, num_groups_y, num_groups_z)) +GEN_THUNKS(glDispatchComputeGroupSizeARB, (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z), (num_groups_x, num_groups_y, num_groups_z, group_size_x, group_size_y, group_size_z)) +GEN_THUNKS(glDispatchComputeIndirect, (GLintptr indirect), (indirect)) +GEN_THUNKS(glDrawArrays, (GLenum mode, GLint first, GLsizei count), (mode, first, count)) +GEN_THUNKS(glDrawArraysEXT, (GLenum mode, GLint first, GLsizei count), (mode, first, count)) +GEN_THUNKS(glDrawArraysIndirect, (GLenum mode, const void * indirect), (mode, indirect)) +GEN_THUNKS(glDrawArraysInstanced, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount), (mode, first, count, instancecount)) +GEN_THUNKS(glDrawArraysInstancedANGLE, (GLenum mode, GLint first, GLsizei count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glDrawArraysInstancedARB, (GLenum mode, GLint first, GLsizei count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glDrawArraysInstancedBaseInstance, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance), (mode, first, count, instancecount, baseinstance)) +GEN_THUNKS(glDrawArraysInstancedBaseInstanceEXT, (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance), (mode, first, count, instancecount, baseinstance)) +GEN_THUNKS(glDrawArraysInstancedEXT, (GLenum mode, GLint start, GLsizei count, GLsizei primcount), (mode, start, count, primcount)) +GEN_THUNKS(glDrawArraysInstancedNV, (GLenum mode, GLint first, GLsizei count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glDrawBuffer, (GLenum buf), (buf)) +GEN_THUNKS(glDrawBuffers, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersARB, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersATI, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersEXT, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawBuffersIndexedEXT, (GLint n, const GLenum * location, const GLint * indices), (n, location, indices)) +GEN_THUNKS(glDrawBuffersNV, (GLsizei n, const GLenum * bufs), (n, bufs)) +GEN_THUNKS(glDrawCommandsAddressNV, (GLenum primitiveMode, const GLuint64 * indirects, const GLsizei * sizes, GLuint count), (primitiveMode, indirects, sizes, count)) +GEN_THUNKS(glDrawCommandsNV, (GLenum primitiveMode, GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, GLuint count), (primitiveMode, buffer, indirects, sizes, count)) +GEN_THUNKS(glDrawCommandsStatesAddressNV, (const GLuint64 * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count), (indirects, sizes, states, fbos, count)) +GEN_THUNKS(glDrawCommandsStatesNV, (GLuint buffer, const GLintptr * indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count), (buffer, indirects, sizes, states, fbos, count)) +GEN_THUNKS(glDrawElementArrayAPPLE, (GLenum mode, GLint first, GLsizei count), (mode, first, count)) +GEN_THUNKS(glDrawElementArrayATI, (GLenum mode, GLsizei count), (mode, count)) +GEN_THUNKS(glDrawElements, (GLenum mode, GLsizei count, GLenum type, const void * indices), (mode, count, type, indices)) +GEN_THUNKS(glDrawElementsBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, count, type, indices, basevertex)) +GEN_THUNKS(glDrawElementsBaseVertexEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, count, type, indices, basevertex)) +GEN_THUNKS(glDrawElementsBaseVertexOES, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, count, type, indices, basevertex)) +GEN_THUNKS(glDrawElementsIndirect, (GLenum mode, GLenum type, const void * indirect), (mode, type, indirect)) +GEN_THUNKS(glDrawElementsInstanced, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount), (mode, count, type, indices, instancecount)) +GEN_THUNKS(glDrawElementsInstancedANGLE, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawElementsInstancedARB, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawElementsInstancedBaseInstance, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance), (mode, count, type, indices, instancecount, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseInstanceEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLuint baseinstance), (mode, count, type, indices, instancecount, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseVertex, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex), (mode, count, type, indices, instancecount, basevertex)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexBaseInstance, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance), (mode, count, type, indices, instancecount, basevertex, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexBaseInstanceEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance), (mode, count, type, indices, instancecount, basevertex, baseinstance)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex), (mode, count, type, indices, instancecount, basevertex)) +GEN_THUNKS(glDrawElementsInstancedBaseVertexOES, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei instancecount, GLint basevertex), (mode, count, type, indices, instancecount, basevertex)) +GEN_THUNKS(glDrawElementsInstancedEXT, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawElementsInstancedNV, (GLenum mode, GLsizei count, GLenum type, const void * indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glDrawMeshArraysSUN, (GLenum mode, GLint first, GLsizei count, GLsizei width), (mode, first, count, width)) +GEN_THUNKS(glDrawPixels, (GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (width, height, format, type, pixels)) +GEN_THUNKS(glDrawRangeElementArrayAPPLE, (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count), (mode, start, end, first, count)) +GEN_THUNKS(glDrawRangeElementArrayATI, (GLenum mode, GLuint start, GLuint end, GLsizei count), (mode, start, end, count)) +GEN_THUNKS(glDrawRangeElements, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices), (mode, start, end, count, type, indices)) +GEN_THUNKS(glDrawRangeElementsBaseVertex, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, start, end, count, type, indices, basevertex)) +GEN_THUNKS(glDrawRangeElementsBaseVertexEXT, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, start, end, count, type, indices, basevertex)) +GEN_THUNKS(glDrawRangeElementsBaseVertexOES, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices, GLint basevertex), (mode, start, end, count, type, indices, basevertex)) +GEN_THUNKS(glDrawRangeElementsEXT, (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void * indices), (mode, start, end, count, type, indices)) +GEN_THUNKS(glDrawTexfOES, (GLfloat x, GLfloat y, GLfloat z, GLfloat width, GLfloat height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexfvOES, (const GLfloat * coords), (coords)) +GEN_THUNKS(glDrawTexiOES, (GLint x, GLint y, GLint z, GLint width, GLint height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexivOES, (const GLint * coords), (coords)) +GEN_THUNKS(glDrawTexsOES, (GLshort x, GLshort y, GLshort z, GLshort width, GLshort height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexsvOES, (const GLshort * coords), (coords)) +GEN_THUNKS(glDrawTextureNV, (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1), (texture, sampler, x0, y0, x1, y1, z, s0, t0, s1, t1)) +GEN_THUNKS(glDrawTexxOES, (GLfixed x, GLfixed y, GLfixed z, GLfixed width, GLfixed height), (x, y, z, width, height)) +GEN_THUNKS(glDrawTexxvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glDrawTransformFeedback, (GLenum mode, GLuint id), (mode, id)) +GEN_THUNKS(glDrawTransformFeedbackInstanced, (GLenum mode, GLuint id, GLsizei instancecount), (mode, id, instancecount)) +GEN_THUNKS(glDrawTransformFeedbackNV, (GLenum mode, GLuint id), (mode, id)) +GEN_THUNKS(glDrawTransformFeedbackStream, (GLenum mode, GLuint id, GLuint stream), (mode, id, stream)) +GEN_THUNKS(glDrawTransformFeedbackStreamInstanced, (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount), (mode, id, stream, instancecount)) +GEN_THUNKS(glEGLImageTargetRenderbufferStorageOES, (GLenum target, GLeglImageOES image), (target, image)) +GEN_THUNKS(glEGLImageTargetTexture2DOES, (GLenum target, GLeglImageOES image), (target, image)) +GEN_THUNKS(glEdgeFlag, (GLboolean flag), (flag)) +GEN_THUNKS(glEdgeFlagFormatNV, (GLsizei stride), (stride)) +GEN_THUNKS(glEdgeFlagPointer, (GLsizei stride, const void * pointer), (stride, pointer)) +GEN_THUNKS(glEdgeFlagPointerEXT, (GLsizei stride, GLsizei count, const GLboolean * pointer), (stride, count, pointer)) +GEN_THUNKS(glEdgeFlagPointerListIBM, (GLint stride, const GLboolean ** pointer, GLint ptrstride), (stride, pointer, ptrstride)) +GEN_THUNKS(glEdgeFlagv, (const GLboolean * flag), (flag)) +GEN_THUNKS(glElementPointerAPPLE, (GLenum type, const void * pointer), (type, pointer)) +GEN_THUNKS(glElementPointerATI, (GLenum type, const void * pointer), (type, pointer)) +GEN_THUNKS(glEnable, (GLenum cap), (cap)) +GEN_THUNKS(glEnableClientState, (GLenum array), (array)) +GEN_THUNKS(glEnableClientStateIndexedEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glEnableClientStateiEXT, (GLenum array, GLuint index), (array, index)) +GEN_THUNKS(glEnableDriverControlQCOM, (GLuint driverControl), (driverControl)) +GEN_THUNKS(glEnableIndexedEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableVariantClientStateEXT, (GLuint id), (id)) +GEN_THUNKS(glEnableVertexArrayAttrib, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glEnableVertexArrayAttribEXT, (GLuint vaobj, GLuint index), (vaobj, index)) +GEN_THUNKS(glEnableVertexArrayEXT, (GLuint vaobj, GLenum array), (vaobj, array)) +GEN_THUNKS(glEnableVertexAttribAPPLE, (GLuint index, GLenum pname), (index, pname)) +GEN_THUNKS(glEnableVertexAttribArray, (GLuint index), (index)) +GEN_THUNKS(glEnableVertexAttribArrayARB, (GLuint index), (index)) +GEN_THUNKS(glEnablei, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableiEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableiNV, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnableiOES, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEnd_unwrapped, (void), ()) +GEN_THUNKS(glEndConditionalRender, (void), ()) +GEN_THUNKS(glEndConditionalRenderNV, (void), ()) +GEN_THUNKS(glEndConditionalRenderNVX, (void), ()) +GEN_THUNKS(glEndFragmentShaderATI, (void), ()) +GEN_THUNKS(glEndList, (void), ()) +GEN_THUNKS(glEndOcclusionQueryNV, (void), ()) +GEN_THUNKS(glEndPerfMonitorAMD, (GLuint monitor), (monitor)) +GEN_THUNKS(glEndPerfQueryINTEL, (GLuint queryHandle), (queryHandle)) +GEN_THUNKS(glEndQuery, (GLenum target), (target)) +GEN_THUNKS(glEndQueryARB, (GLenum target), (target)) +GEN_THUNKS(glEndQueryEXT, (GLenum target), (target)) +GEN_THUNKS(glEndQueryIndexed, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS(glEndTilingQCOM, (GLbitfield preserveMask), (preserveMask)) +GEN_THUNKS(glEndTransformFeedback, (void), ()) +GEN_THUNKS(glEndTransformFeedbackEXT, (void), ()) +GEN_THUNKS(glEndTransformFeedbackNV, (void), ()) +GEN_THUNKS(glEndVertexShaderEXT, (void), ()) +GEN_THUNKS(glEndVideoCaptureNV, (GLuint video_capture_slot), (video_capture_slot)) +GEN_THUNKS(glEvalCoord1d, (GLdouble u), (u)) +GEN_THUNKS(glEvalCoord1dv, (const GLdouble * u), (u)) +GEN_THUNKS(glEvalCoord1f, (GLfloat u), (u)) +GEN_THUNKS(glEvalCoord1fv, (const GLfloat * u), (u)) +GEN_THUNKS(glEvalCoord1xOES, (GLfixed u), (u)) +GEN_THUNKS(glEvalCoord1xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glEvalCoord2d, (GLdouble u, GLdouble v), (u, v)) +GEN_THUNKS(glEvalCoord2dv, (const GLdouble * u), (u)) +GEN_THUNKS(glEvalCoord2f, (GLfloat u, GLfloat v), (u, v)) +GEN_THUNKS(glEvalCoord2fv, (const GLfloat * u), (u)) +GEN_THUNKS(glEvalCoord2xOES, (GLfixed u, GLfixed v), (u, v)) +GEN_THUNKS(glEvalCoord2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glEvalMapsNV, (GLenum target, GLenum mode), (target, mode)) +GEN_THUNKS(glEvalMesh1, (GLenum mode, GLint i1, GLint i2), (mode, i1, i2)) +GEN_THUNKS(glEvalMesh2, (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2), (mode, i1, i2, j1, j2)) +GEN_THUNKS(glEvalPoint1, (GLint i), (i)) +GEN_THUNKS(glEvalPoint2, (GLint i, GLint j), (i, j)) +GEN_THUNKS(glEvaluateDepthValuesARB, (void), ()) +GEN_THUNKS(glExecuteProgramNV, (GLenum target, GLuint id, const GLfloat * params), (target, id, params)) +GEN_THUNKS(glExtGetBufferPointervQCOM, (GLenum target, void ** params), (target, params)) +GEN_THUNKS(glExtGetBuffersQCOM, (GLuint * buffers, GLint maxBuffers, GLint * numBuffers), (buffers, maxBuffers, numBuffers)) +GEN_THUNKS(glExtGetFramebuffersQCOM, (GLuint * framebuffers, GLint maxFramebuffers, GLint * numFramebuffers), (framebuffers, maxFramebuffers, numFramebuffers)) +GEN_THUNKS(glExtGetProgramBinarySourceQCOM, (GLuint program, GLenum shadertype, GLchar * source, GLint * length), (program, shadertype, source, length)) +GEN_THUNKS(glExtGetProgramsQCOM, (GLuint * programs, GLint maxPrograms, GLint * numPrograms), (programs, maxPrograms, numPrograms)) +GEN_THUNKS(glExtGetRenderbuffersQCOM, (GLuint * renderbuffers, GLint maxRenderbuffers, GLint * numRenderbuffers), (renderbuffers, maxRenderbuffers, numRenderbuffers)) +GEN_THUNKS(glExtGetShadersQCOM, (GLuint * shaders, GLint maxShaders, GLint * numShaders), (shaders, maxShaders, numShaders)) +GEN_THUNKS(glExtGetTexLevelParameterivQCOM, (GLuint texture, GLenum face, GLint level, GLenum pname, GLint * params), (texture, face, level, pname, params)) +GEN_THUNKS(glExtGetTexSubImageQCOM, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void * texels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texels)) +GEN_THUNKS(glExtGetTexturesQCOM, (GLuint * textures, GLint maxTextures, GLint * numTextures), (textures, maxTextures, numTextures)) +GEN_THUNKS_RET(GLboolean, glExtIsProgramBinaryQCOM, (GLuint program), (program)) +GEN_THUNKS(glExtTexObjectStateOverrideiQCOM, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glExtractComponentEXT, (GLuint res, GLuint src, GLuint num), (res, src, num)) +GEN_THUNKS(glFeedbackBuffer, (GLsizei size, GLenum type, GLfloat * buffer), (size, type, buffer)) +GEN_THUNKS(glFeedbackBufferxOES, (GLsizei n, GLenum type, const GLfixed * buffer), (n, type, buffer)) +GEN_THUNKS_RET(GLsync, glFenceSync, (GLenum condition, GLbitfield flags), (condition, flags)) +GEN_THUNKS_RET(GLsync, glFenceSyncAPPLE, (GLenum condition, GLbitfield flags), (condition, flags)) +GEN_THUNKS(glFinalCombinerInputNV, (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage), (variable, input, mapping, componentUsage)) +GEN_THUNKS(glFinish, (void), ()) +GEN_THUNKS_RET(GLint, glFinishAsyncSGIX, (GLuint * markerp), (markerp)) +GEN_THUNKS(glFinishFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS(glFinishFenceNV, (GLuint fence), (fence)) +GEN_THUNKS(glFinishObjectAPPLE, (GLenum object, GLint name), (object, name)) +GEN_THUNKS(glFinishTextureSUNX, (void), ()) +GEN_THUNKS(glFlush, (void), ()) +GEN_THUNKS(glFlushMappedBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length), (target, offset, length)) +GEN_THUNKS(glFlushMappedBufferRangeAPPLE, (GLenum target, GLintptr offset, GLsizeiptr size), (target, offset, size)) +GEN_THUNKS(glFlushMappedBufferRangeEXT, (GLenum target, GLintptr offset, GLsizeiptr length), (target, offset, length)) +GEN_THUNKS(glFlushMappedNamedBufferRange, (GLuint buffer, GLintptr offset, GLsizeiptr length), (buffer, offset, length)) +GEN_THUNKS(glFlushMappedNamedBufferRangeEXT, (GLuint buffer, GLintptr offset, GLsizeiptr length), (buffer, offset, length)) +GEN_THUNKS(glFlushPixelDataRangeNV, (GLenum target), (target)) +GEN_THUNKS(glFlushRasterSGIX, (void), ()) +GEN_THUNKS(glFlushStaticDataIBM, (GLenum target), (target)) +GEN_THUNKS(glFlushVertexArrayRangeAPPLE, (GLsizei length, void * pointer), (length, pointer)) +GEN_THUNKS(glFlushVertexArrayRangeNV, (void), ()) +GEN_THUNKS(glFogCoordFormatNV, (GLenum type, GLsizei stride), (type, stride)) +GEN_THUNKS(glFogCoordPointer, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glFogCoordPointerEXT, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glFogCoordPointerListIBM, (GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (type, stride, pointer, ptrstride)) +GEN_THUNKS(glFogCoordd, (GLdouble coord), (coord)) +GEN_THUNKS(glFogCoorddEXT, (GLdouble coord), (coord)) +GEN_THUNKS(glFogCoorddv, (const GLdouble * coord), (coord)) +GEN_THUNKS(glFogCoorddvEXT, (const GLdouble * coord), (coord)) +GEN_THUNKS(glFogCoordf, (GLfloat coord), (coord)) +GEN_THUNKS(glFogCoordfEXT, (GLfloat coord), (coord)) +GEN_THUNKS(glFogCoordfv, (const GLfloat * coord), (coord)) +GEN_THUNKS(glFogCoordfvEXT, (const GLfloat * coord), (coord)) +GEN_THUNKS(glFogCoordhNV, (GLhalfNV fog), (fog)) +GEN_THUNKS(glFogCoordhvNV, (const GLhalfNV * fog), (fog)) +GEN_THUNKS(glFogFuncSGIS, (GLsizei n, const GLfloat * points), (n, points)) +GEN_THUNKS(glFogf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glFogfv, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glFogi, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glFogiv, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glFogx, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glFogxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glFogxv, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glFogxvOES, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glFragmentColorMaterialSGIX, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glFragmentCoverageColorNV, (GLuint color), (color)) +GEN_THUNKS(glFragmentLightModelfSGIX, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glFragmentLightModelfvSGIX, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glFragmentLightModeliSGIX, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glFragmentLightModelivSGIX, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glFragmentLightfSGIX, (GLenum light, GLenum pname, GLfloat param), (light, pname, param)) +GEN_THUNKS(glFragmentLightfvSGIX, (GLenum light, GLenum pname, const GLfloat * params), (light, pname, params)) +GEN_THUNKS(glFragmentLightiSGIX, (GLenum light, GLenum pname, GLint param), (light, pname, param)) +GEN_THUNKS(glFragmentLightivSGIX, (GLenum light, GLenum pname, const GLint * params), (light, pname, params)) +GEN_THUNKS(glFragmentMaterialfSGIX, (GLenum face, GLenum pname, GLfloat param), (face, pname, param)) +GEN_THUNKS(glFragmentMaterialfvSGIX, (GLenum face, GLenum pname, const GLfloat * params), (face, pname, params)) +GEN_THUNKS(glFragmentMaterialiSGIX, (GLenum face, GLenum pname, GLint param), (face, pname, param)) +GEN_THUNKS(glFragmentMaterialivSGIX, (GLenum face, GLenum pname, const GLint * params), (face, pname, params)) +GEN_THUNKS(glFrameTerminatorGREMEDY, (void), ()) +GEN_THUNKS(glFrameZoomSGIX, (GLint factor), (factor)) +GEN_THUNKS(glFramebufferDrawBufferEXT, (GLuint framebuffer, GLenum mode), (framebuffer, mode)) +GEN_THUNKS(glFramebufferDrawBuffersEXT, (GLuint framebuffer, GLsizei n, const GLenum * bufs), (framebuffer, n, bufs)) +GEN_THUNKS(glFramebufferParameteri, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glFramebufferReadBufferEXT, (GLuint framebuffer, GLenum mode), (framebuffer, mode)) +GEN_THUNKS(glFramebufferRenderbuffer, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (target, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glFramebufferRenderbufferEXT, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (target, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glFramebufferRenderbufferOES, (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (target, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glFramebufferSampleLocationsfvARB, (GLenum target, GLuint start, GLsizei count, const GLfloat * v), (target, start, count, v)) +GEN_THUNKS(glFramebufferSampleLocationsfvNV, (GLenum target, GLuint start, GLsizei count, const GLfloat * v), (target, start, count, v)) +GEN_THUNKS(glFramebufferTexture, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFramebufferTexture1D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture1DEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture2D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture2DEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture2DMultisampleEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples), (target, attachment, textarget, texture, level, samples)) +GEN_THUNKS(glFramebufferTexture2DMultisampleIMG, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples), (target, attachment, textarget, texture, level, samples)) +GEN_THUNKS(glFramebufferTexture2DOES, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (target, attachment, textarget, texture, level)) +GEN_THUNKS(glFramebufferTexture3D, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (target, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glFramebufferTexture3DEXT, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (target, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glFramebufferTexture3DOES, (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (target, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glFramebufferTextureARB, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFramebufferTextureEXT, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFramebufferTextureFaceARB, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face), (target, attachment, texture, level, face)) +GEN_THUNKS(glFramebufferTextureFaceEXT, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face), (target, attachment, texture, level, face)) +GEN_THUNKS(glFramebufferTextureLayer, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer), (target, attachment, texture, level, layer)) +GEN_THUNKS(glFramebufferTextureLayerARB, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer), (target, attachment, texture, level, layer)) +GEN_THUNKS(glFramebufferTextureLayerEXT, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer), (target, attachment, texture, level, layer)) +GEN_THUNKS(glFramebufferTextureMultiviewOVR, (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews), (target, attachment, texture, level, baseViewIndex, numViews)) +GEN_THUNKS(glFramebufferTextureOES, (GLenum target, GLenum attachment, GLuint texture, GLint level), (target, attachment, texture, level)) +GEN_THUNKS(glFreeObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS(glFrontFace, (GLenum mode), (mode)) +GEN_THUNKS(glFrustum, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glFrustumf, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glFrustumfOES, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glFrustumx, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS(glFrustumxOES, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS_RET(GLuint, glGenAsyncMarkersSGIX, (GLsizei range), (range)) +GEN_THUNKS(glGenBuffers, (GLsizei n, GLuint * buffers), (n, buffers)) +GEN_THUNKS(glGenBuffersARB, (GLsizei n, GLuint * buffers), (n, buffers)) +GEN_THUNKS(glGenFencesAPPLE, (GLsizei n, GLuint * fences), (n, fences)) +GEN_THUNKS(glGenFencesNV, (GLsizei n, GLuint * fences), (n, fences)) +GEN_THUNKS_RET(GLuint, glGenFragmentShadersATI, (GLuint range), (range)) +GEN_THUNKS(glGenFramebuffers, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glGenFramebuffersEXT, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS(glGenFramebuffersOES, (GLsizei n, GLuint * framebuffers), (n, framebuffers)) +GEN_THUNKS_RET(GLuint, glGenLists, (GLsizei range), (range)) +GEN_THUNKS(glGenNamesAMD, (GLenum identifier, GLuint num, GLuint * names), (identifier, num, names)) +GEN_THUNKS(glGenOcclusionQueriesNV, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS_RET(GLuint, glGenPathsNV, (GLsizei range), (range)) +GEN_THUNKS(glGenPerfMonitorsAMD, (GLsizei n, GLuint * monitors), (n, monitors)) +GEN_THUNKS(glGenProgramPipelines, (GLsizei n, GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glGenProgramPipelinesEXT, (GLsizei n, GLuint * pipelines), (n, pipelines)) +GEN_THUNKS(glGenProgramsARB, (GLsizei n, GLuint * programs), (n, programs)) +GEN_THUNKS(glGenProgramsNV, (GLsizei n, GLuint * programs), (n, programs)) +GEN_THUNKS(glGenQueries, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenQueriesARB, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenQueriesEXT, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenRenderbuffers, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glGenRenderbuffersEXT, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glGenRenderbuffersOES, (GLsizei n, GLuint * renderbuffers), (n, renderbuffers)) +GEN_THUNKS(glGenSamplers, (GLsizei count, GLuint * samplers), (count, samplers)) +GEN_THUNKS_RET(GLuint, glGenSymbolsEXT, (GLenum datatype, GLenum storagetype, GLenum range, GLuint components), (datatype, storagetype, range, components)) +GEN_THUNKS(glGenTextures, (GLsizei n, GLuint * textures), (n, textures)) +GEN_THUNKS(glGenTexturesEXT, (GLsizei n, GLuint * textures), (n, textures)) +GEN_THUNKS(glGenTransformFeedbacks, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenTransformFeedbacksNV, (GLsizei n, GLuint * ids), (n, ids)) +GEN_THUNKS(glGenVertexArrays, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS(glGenVertexArraysAPPLE, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS(glGenVertexArraysOES, (GLsizei n, GLuint * arrays), (n, arrays)) +GEN_THUNKS_RET(GLuint, glGenVertexShadersEXT, (GLuint range), (range)) +GEN_THUNKS(glGenerateMipmap, (GLenum target), (target)) +GEN_THUNKS(glGenerateMipmapEXT, (GLenum target), (target)) +GEN_THUNKS(glGenerateMipmapOES, (GLenum target), (target)) +GEN_THUNKS(glGenerateMultiTexMipmapEXT, (GLenum texunit, GLenum target), (texunit, target)) +GEN_THUNKS(glGenerateTextureMipmap, (GLuint texture), (texture)) +GEN_THUNKS(glGenerateTextureMipmapEXT, (GLuint texture, GLenum target), (texture, target)) +GEN_THUNKS(glGetActiveAtomicCounterBufferiv, (GLuint program, GLuint bufferIndex, GLenum pname, GLint * params), (program, bufferIndex, pname, params)) +GEN_THUNKS(glGetActiveAttrib, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetActiveAttribARB, (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name), ((uintptr_t)programObj, index, maxLength, length, size, type, name)) +GEN_THUNKS(glGetActiveSubroutineName, (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name), (program, shadertype, index, bufsize, length, name)) +GEN_THUNKS(glGetActiveSubroutineUniformName, (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei * length, GLchar * name), (program, shadertype, index, bufsize, length, name)) +GEN_THUNKS(glGetActiveSubroutineUniformiv, (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint * values), (program, shadertype, index, pname, values)) +GEN_THUNKS(glGetActiveUniform, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetActiveUniformARB, (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei * length, GLint * size, GLenum * type, GLcharARB * name), ((uintptr_t)programObj, index, maxLength, length, size, type, name)) +GEN_THUNKS(glGetActiveUniformBlockName, (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformBlockName), (program, uniformBlockIndex, bufSize, length, uniformBlockName)) +GEN_THUNKS(glGetActiveUniformBlockiv, (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint * params), (program, uniformBlockIndex, pname, params)) +GEN_THUNKS(glGetActiveUniformName, (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei * length, GLchar * uniformName), (program, uniformIndex, bufSize, length, uniformName)) +GEN_THUNKS(glGetActiveUniformsiv, (GLuint program, GLsizei uniformCount, const GLuint * uniformIndices, GLenum pname, GLint * params), (program, uniformCount, uniformIndices, pname, params)) +GEN_THUNKS(glGetActiveVaryingNV, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetArrayObjectfvATI, (GLenum array, GLenum pname, GLfloat * params), (array, pname, params)) +GEN_THUNKS(glGetArrayObjectivATI, (GLenum array, GLenum pname, GLint * params), (array, pname, params)) +GEN_THUNKS(glGetAttachedObjectsARB, (GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj), ((uintptr_t)containerObj, maxCount, count, obj)) +GEN_THUNKS(glGetAttachedShaders, (GLuint program, GLsizei maxCount, GLsizei * count, GLuint * shaders), (program, maxCount, count, shaders)) +GEN_THUNKS_RET(GLint, glGetAttribLocation, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetAttribLocationARB, (GLhandleARB programObj, const GLcharARB * name), ((uintptr_t)programObj, name)) +GEN_THUNKS(glGetBooleanIndexedvEXT, (GLenum target, GLuint index, GLboolean * data), (target, index, data)) +GEN_THUNKS(glGetBooleani_v, (GLenum target, GLuint index, GLboolean * data), (target, index, data)) +GEN_THUNKS(glGetBooleanv, (GLenum pname, GLboolean * data), (pname, data)) +GEN_THUNKS(glGetBufferParameteri64v, (GLenum target, GLenum pname, GLint64 * params), (target, pname, params)) +GEN_THUNKS(glGetBufferParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetBufferParameterivARB, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetBufferParameterui64vNV, (GLenum target, GLenum pname, GLuint64EXT * params), (target, pname, params)) +GEN_THUNKS(glGetBufferPointerv, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetBufferPointervARB, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetBufferPointervOES, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetBufferSubData, (GLenum target, GLintptr offset, GLsizeiptr size, void * data), (target, offset, size, data)) +GEN_THUNKS(glGetBufferSubDataARB, (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data), (target, offset, size, data)) +GEN_THUNKS(glGetClipPlane, (GLenum plane, GLdouble * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanef, (GLenum plane, GLfloat * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanefOES, (GLenum plane, GLfloat * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanex, (GLenum plane, GLfixed * equation), (plane, equation)) +GEN_THUNKS(glGetClipPlanexOES, (GLenum plane, GLfixed * equation), (plane, equation)) +GEN_THUNKS(glGetColorTable, (GLenum target, GLenum format, GLenum type, void * table), (target, format, type, table)) +GEN_THUNKS(glGetColorTableEXT, (GLenum target, GLenum format, GLenum type, void * data), (target, format, type, data)) +GEN_THUNKS(glGetColorTableParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterfvSGI, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableParameterivSGI, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetColorTableSGI, (GLenum target, GLenum format, GLenum type, void * table), (target, format, type, table)) +GEN_THUNKS(glGetCombinerInputParameterfvNV, (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params), (stage, portion, variable, pname, params)) +GEN_THUNKS(glGetCombinerInputParameterivNV, (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params), (stage, portion, variable, pname, params)) +GEN_THUNKS(glGetCombinerOutputParameterfvNV, (GLenum stage, GLenum portion, GLenum pname, GLfloat * params), (stage, portion, pname, params)) +GEN_THUNKS(glGetCombinerOutputParameterivNV, (GLenum stage, GLenum portion, GLenum pname, GLint * params), (stage, portion, pname, params)) +GEN_THUNKS(glGetCombinerStageParameterfvNV, (GLenum stage, GLenum pname, GLfloat * params), (stage, pname, params)) +GEN_THUNKS_RET(GLuint, glGetCommandHeaderNV, (GLenum tokenID, GLuint size), (tokenID, size)) +GEN_THUNKS(glGetCompressedMultiTexImageEXT, (GLenum texunit, GLenum target, GLint lod, void * img), (texunit, target, lod, img)) +GEN_THUNKS(glGetCompressedTexImage, (GLenum target, GLint level, void * img), (target, level, img)) +GEN_THUNKS(glGetCompressedTexImageARB, (GLenum target, GLint level, void * img), (target, level, img)) +GEN_THUNKS(glGetCompressedTextureImage, (GLuint texture, GLint level, GLsizei bufSize, void * pixels), (texture, level, bufSize, pixels)) +GEN_THUNKS(glGetCompressedTextureImageEXT, (GLuint texture, GLenum target, GLint lod, void * img), (texture, target, lod, img)) +GEN_THUNKS(glGetCompressedTextureSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void * pixels), (texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels)) +GEN_THUNKS(glGetConvolutionFilter, (GLenum target, GLenum format, GLenum type, void * image), (target, format, type, image)) +GEN_THUNKS(glGetConvolutionFilterEXT, (GLenum target, GLenum format, GLenum type, void * image), (target, format, type, image)) +GEN_THUNKS(glGetConvolutionParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetConvolutionParameterxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetCoverageModulationTableNV, (GLsizei bufsize, GLfloat * v), (bufsize, v)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLog, (GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog), (count, bufSize, sources, types, ids, severities, lengths, messageLog)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLogAMD, (GLuint count, GLsizei bufsize, GLenum * categories, GLuint * severities, GLuint * ids, GLsizei * lengths, GLchar * message), (count, bufsize, categories, severities, ids, lengths, message)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLogARB, (GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog), (count, bufSize, sources, types, ids, severities, lengths, messageLog)) +GEN_THUNKS_RET(GLuint, glGetDebugMessageLogKHR, (GLuint count, GLsizei bufSize, GLenum * sources, GLenum * types, GLuint * ids, GLenum * severities, GLsizei * lengths, GLchar * messageLog), (count, bufSize, sources, types, ids, severities, lengths, messageLog)) +GEN_THUNKS(glGetDetailTexFuncSGIS, (GLenum target, GLfloat * points), (target, points)) +GEN_THUNKS(glGetDoubleIndexedvEXT, (GLenum target, GLuint index, GLdouble * data), (target, index, data)) +GEN_THUNKS(glGetDoublei_v, (GLenum target, GLuint index, GLdouble * data), (target, index, data)) +GEN_THUNKS(glGetDoublei_vEXT, (GLenum pname, GLuint index, GLdouble * params), (pname, index, params)) +GEN_THUNKS(glGetDoublev, (GLenum pname, GLdouble * data), (pname, data)) +GEN_THUNKS(glGetDriverControlStringQCOM, (GLuint driverControl, GLsizei bufSize, GLsizei * length, GLchar * driverControlString), (driverControl, bufSize, length, driverControlString)) +GEN_THUNKS(glGetDriverControlsQCOM, (GLint * num, GLsizei size, GLuint * driverControls), (num, size, driverControls)) +GEN_THUNKS_RET(GLenum, glGetError, (void), ()) +GEN_THUNKS(glGetFenceivNV, (GLuint fence, GLenum pname, GLint * params), (fence, pname, params)) +GEN_THUNKS(glGetFinalCombinerInputParameterfvNV, (GLenum variable, GLenum pname, GLfloat * params), (variable, pname, params)) +GEN_THUNKS(glGetFinalCombinerInputParameterivNV, (GLenum variable, GLenum pname, GLint * params), (variable, pname, params)) +GEN_THUNKS(glGetFirstPerfQueryIdINTEL, (GLuint * queryId), (queryId)) +GEN_THUNKS(glGetFixedv, (GLenum pname, GLfixed * params), (pname, params)) +GEN_THUNKS(glGetFixedvOES, (GLenum pname, GLfixed * params), (pname, params)) +GEN_THUNKS(glGetFloatIndexedvEXT, (GLenum target, GLuint index, GLfloat * data), (target, index, data)) +GEN_THUNKS(glGetFloati_v, (GLenum target, GLuint index, GLfloat * data), (target, index, data)) +GEN_THUNKS(glGetFloati_vEXT, (GLenum pname, GLuint index, GLfloat * params), (pname, index, params)) +GEN_THUNKS(glGetFloati_vNV, (GLenum target, GLuint index, GLfloat * data), (target, index, data)) +GEN_THUNKS(glGetFloatv, (GLenum pname, GLfloat * data), (pname, data)) +GEN_THUNKS(glGetFogFuncSGIS, (GLfloat * points), (points)) +GEN_THUNKS_RET(GLint, glGetFragDataIndex, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetFragDataIndexEXT, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetFragDataLocation, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetFragDataLocationEXT, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS(glGetFragmentLightfvSGIX, (GLenum light, GLenum pname, GLfloat * params), (light, pname, params)) +GEN_THUNKS(glGetFragmentLightivSGIX, (GLenum light, GLenum pname, GLint * params), (light, pname, params)) +GEN_THUNKS(glGetFragmentMaterialfvSGIX, (GLenum face, GLenum pname, GLfloat * params), (face, pname, params)) +GEN_THUNKS(glGetFragmentMaterialivSGIX, (GLenum face, GLenum pname, GLint * params), (face, pname, params)) +GEN_THUNKS(glGetFramebufferAttachmentParameteriv, (GLenum target, GLenum attachment, GLenum pname, GLint * params), (target, attachment, pname, params)) +GEN_THUNKS(glGetFramebufferAttachmentParameterivEXT, (GLenum target, GLenum attachment, GLenum pname, GLint * params), (target, attachment, pname, params)) +GEN_THUNKS(glGetFramebufferAttachmentParameterivOES, (GLenum target, GLenum attachment, GLenum pname, GLint * params), (target, attachment, pname, params)) +GEN_THUNKS(glGetFramebufferParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetFramebufferParameterivEXT, (GLuint framebuffer, GLenum pname, GLint * params), (framebuffer, pname, params)) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatus, (void), ()) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatusARB, (void), ()) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatusEXT, (void), ()) +GEN_THUNKS_RET(GLenum, glGetGraphicsResetStatusKHR, (void), ()) +GEN_THUNKS_RET(GLhandleARB, glGetHandleARB, (GLenum pname), (pname)) +GEN_THUNKS(glGetHistogram, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetHistogramEXT, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetHistogramParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetHistogramParameterxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS_RET(GLuint64, glGetImageHandleARB, (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format), (texture, level, layered, layer, format)) +GEN_THUNKS_RET(GLuint64, glGetImageHandleNV, (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format), (texture, level, layered, layer, format)) +GEN_THUNKS(glGetImageTransformParameterfvHP, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetImageTransformParameterivHP, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetInfoLogARB, (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog), ((uintptr_t)obj, maxLength, length, infoLog)) +GEN_THUNKS_RET(GLint, glGetInstrumentsSGIX, (void), ()) +GEN_THUNKS(glGetInteger64i_v, (GLenum target, GLuint index, GLint64 * data), (target, index, data)) +GEN_THUNKS(glGetInteger64v, (GLenum pname, GLint64 * data), (pname, data)) +GEN_THUNKS(glGetInteger64vAPPLE, (GLenum pname, GLint64 * params), (pname, params)) +GEN_THUNKS(glGetIntegerIndexedvEXT, (GLenum target, GLuint index, GLint * data), (target, index, data)) +GEN_THUNKS(glGetIntegeri_v, (GLenum target, GLuint index, GLint * data), (target, index, data)) +GEN_THUNKS(glGetIntegeri_vEXT, (GLenum target, GLuint index, GLint * data), (target, index, data)) +GEN_THUNKS(glGetIntegerui64i_vNV, (GLenum value, GLuint index, GLuint64EXT * result), (value, index, result)) +GEN_THUNKS(glGetIntegerui64vNV, (GLenum value, GLuint64EXT * result), (value, result)) +GEN_THUNKS(glGetIntegerv, (GLenum pname, GLint * data), (pname, data)) +GEN_THUNKS(glGetInternalformatSampleivNV, (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei bufSize, GLint * params), (target, internalformat, samples, pname, bufSize, params)) +GEN_THUNKS(glGetInternalformati64v, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64 * params), (target, internalformat, pname, bufSize, params)) +GEN_THUNKS(glGetInternalformativ, (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint * params), (target, internalformat, pname, bufSize, params)) +GEN_THUNKS(glGetInvariantBooleanvEXT, (GLuint id, GLenum value, GLboolean * data), (id, value, data)) +GEN_THUNKS(glGetInvariantFloatvEXT, (GLuint id, GLenum value, GLfloat * data), (id, value, data)) +GEN_THUNKS(glGetInvariantIntegervEXT, (GLuint id, GLenum value, GLint * data), (id, value, data)) +GEN_THUNKS(glGetLightfv, (GLenum light, GLenum pname, GLfloat * params), (light, pname, params)) +GEN_THUNKS(glGetLightiv, (GLenum light, GLenum pname, GLint * params), (light, pname, params)) +GEN_THUNKS(glGetLightxOES, (GLenum light, GLenum pname, GLfixed * params), (light, pname, params)) +GEN_THUNKS(glGetLightxv, (GLenum light, GLenum pname, GLfixed * params), (light, pname, params)) +GEN_THUNKS(glGetLightxvOES, (GLenum light, GLenum pname, GLfixed * params), (light, pname, params)) +GEN_THUNKS(glGetListParameterfvSGIX, (GLuint list, GLenum pname, GLfloat * params), (list, pname, params)) +GEN_THUNKS(glGetListParameterivSGIX, (GLuint list, GLenum pname, GLint * params), (list, pname, params)) +GEN_THUNKS(glGetLocalConstantBooleanvEXT, (GLuint id, GLenum value, GLboolean * data), (id, value, data)) +GEN_THUNKS(glGetLocalConstantFloatvEXT, (GLuint id, GLenum value, GLfloat * data), (id, value, data)) +GEN_THUNKS(glGetLocalConstantIntegervEXT, (GLuint id, GLenum value, GLint * data), (id, value, data)) +GEN_THUNKS(glGetMapAttribParameterfvNV, (GLenum target, GLuint index, GLenum pname, GLfloat * params), (target, index, pname, params)) +GEN_THUNKS(glGetMapAttribParameterivNV, (GLenum target, GLuint index, GLenum pname, GLint * params), (target, index, pname, params)) +GEN_THUNKS(glGetMapControlPointsNV, (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void * points), (target, index, type, ustride, vstride, packed, points)) +GEN_THUNKS(glGetMapParameterfvNV, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetMapParameterivNV, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetMapdv, (GLenum target, GLenum query, GLdouble * v), (target, query, v)) +GEN_THUNKS(glGetMapfv, (GLenum target, GLenum query, GLfloat * v), (target, query, v)) +GEN_THUNKS(glGetMapiv, (GLenum target, GLenum query, GLint * v), (target, query, v)) +GEN_THUNKS(glGetMapxvOES, (GLenum target, GLenum query, GLfixed * v), (target, query, v)) +GEN_THUNKS(glGetMaterialfv, (GLenum face, GLenum pname, GLfloat * params), (face, pname, params)) +GEN_THUNKS(glGetMaterialiv, (GLenum face, GLenum pname, GLint * params), (face, pname, params)) +GEN_THUNKS(glGetMaterialxOES, (GLenum face, GLenum pname, GLfixed param), (face, pname, param)) +GEN_THUNKS(glGetMaterialxv, (GLenum face, GLenum pname, GLfixed * params), (face, pname, params)) +GEN_THUNKS(glGetMaterialxvOES, (GLenum face, GLenum pname, GLfixed * params), (face, pname, params)) +GEN_THUNKS(glGetMinmax, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetMinmaxEXT, (GLenum target, GLboolean reset, GLenum format, GLenum type, void * values), (target, reset, format, type, values)) +GEN_THUNKS(glGetMinmaxParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetMinmaxParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetMinmaxParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetMinmaxParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetMultiTexEnvfvEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexEnvivEXT, (GLenum texunit, GLenum target, GLenum pname, GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexGendvEXT, (GLenum texunit, GLenum coord, GLenum pname, GLdouble * params), (texunit, coord, pname, params)) +GEN_THUNKS(glGetMultiTexGenfvEXT, (GLenum texunit, GLenum coord, GLenum pname, GLfloat * params), (texunit, coord, pname, params)) +GEN_THUNKS(glGetMultiTexGenivEXT, (GLenum texunit, GLenum coord, GLenum pname, GLint * params), (texunit, coord, pname, params)) +GEN_THUNKS(glGetMultiTexImageEXT, (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void * pixels), (texunit, target, level, format, type, pixels)) +GEN_THUNKS(glGetMultiTexLevelParameterfvEXT, (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat * params), (texunit, target, level, pname, params)) +GEN_THUNKS(glGetMultiTexLevelParameterivEXT, (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint * params), (texunit, target, level, pname, params)) +GEN_THUNKS(glGetMultiTexParameterIivEXT, (GLenum texunit, GLenum target, GLenum pname, GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexParameterIuivEXT, (GLenum texunit, GLenum target, GLenum pname, GLuint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexParameterfvEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultiTexParameterivEXT, (GLenum texunit, GLenum target, GLenum pname, GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glGetMultisamplefv, (GLenum pname, GLuint index, GLfloat * val), (pname, index, val)) +GEN_THUNKS(glGetMultisamplefvNV, (GLenum pname, GLuint index, GLfloat * val), (pname, index, val)) +GEN_THUNKS(glGetNamedBufferParameteri64v, (GLuint buffer, GLenum pname, GLint64 * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferParameteriv, (GLuint buffer, GLenum pname, GLint * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferParameterivEXT, (GLuint buffer, GLenum pname, GLint * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferParameterui64vNV, (GLuint buffer, GLenum pname, GLuint64EXT * params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferPointerv, (GLuint buffer, GLenum pname, void ** params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferPointervEXT, (GLuint buffer, GLenum pname, void ** params), (buffer, pname, params)) +GEN_THUNKS(glGetNamedBufferSubData, (GLuint buffer, GLintptr offset, GLsizeiptr size, void * data), (buffer, offset, size, data)) +GEN_THUNKS(glGetNamedBufferSubDataEXT, (GLuint buffer, GLintptr offset, GLsizeiptr size, void * data), (buffer, offset, size, data)) +GEN_THUNKS(glGetNamedFramebufferAttachmentParameteriv, (GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params), (framebuffer, attachment, pname, params)) +GEN_THUNKS(glGetNamedFramebufferAttachmentParameterivEXT, (GLuint framebuffer, GLenum attachment, GLenum pname, GLint * params), (framebuffer, attachment, pname, params)) +GEN_THUNKS(glGetNamedFramebufferParameteriv, (GLuint framebuffer, GLenum pname, GLint * param), (framebuffer, pname, param)) +GEN_THUNKS(glGetNamedFramebufferParameterivEXT, (GLuint framebuffer, GLenum pname, GLint * params), (framebuffer, pname, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterIivEXT, (GLuint program, GLenum target, GLuint index, GLint * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterIuivEXT, (GLuint program, GLenum target, GLuint index, GLuint * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterdvEXT, (GLuint program, GLenum target, GLuint index, GLdouble * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramLocalParameterfvEXT, (GLuint program, GLenum target, GLuint index, GLfloat * params), (program, target, index, params)) +GEN_THUNKS(glGetNamedProgramStringEXT, (GLuint program, GLenum target, GLenum pname, void * string), (program, target, pname, string)) +GEN_THUNKS(glGetNamedProgramivEXT, (GLuint program, GLenum target, GLenum pname, GLint * params), (program, target, pname, params)) +GEN_THUNKS(glGetNamedRenderbufferParameteriv, (GLuint renderbuffer, GLenum pname, GLint * params), (renderbuffer, pname, params)) +GEN_THUNKS(glGetNamedRenderbufferParameterivEXT, (GLuint renderbuffer, GLenum pname, GLint * params), (renderbuffer, pname, params)) +GEN_THUNKS(glGetNamedStringARB, (GLint namelen, const GLchar * name, GLsizei bufSize, GLint * stringlen, GLchar * string), (namelen, name, bufSize, stringlen, string)) +GEN_THUNKS(glGetNamedStringivARB, (GLint namelen, const GLchar * name, GLenum pname, GLint * params), (namelen, name, pname, params)) +GEN_THUNKS(glGetNextPerfQueryIdINTEL, (GLuint queryId, GLuint * nextQueryId), (queryId, nextQueryId)) +GEN_THUNKS(glGetObjectBufferfvATI, (GLuint buffer, GLenum pname, GLfloat * params), (buffer, pname, params)) +GEN_THUNKS(glGetObjectBufferivATI, (GLuint buffer, GLenum pname, GLint * params), (buffer, pname, params)) +GEN_THUNKS(glGetObjectLabel, (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label), (identifier, name, bufSize, length, label)) +GEN_THUNKS(glGetObjectLabelEXT, (GLenum type, GLuint object, GLsizei bufSize, GLsizei * length, GLchar * label), (type, object, bufSize, length, label)) +GEN_THUNKS(glGetObjectLabelKHR, (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei * length, GLchar * label), (identifier, name, bufSize, length, label)) +GEN_THUNKS(glGetObjectParameterfvARB, (GLhandleARB obj, GLenum pname, GLfloat * params), ((uintptr_t)obj, pname, params)) +GEN_THUNKS(glGetObjectParameterivAPPLE, (GLenum objectType, GLuint name, GLenum pname, GLint * params), (objectType, name, pname, params)) +GEN_THUNKS(glGetObjectParameterivARB, (GLhandleARB obj, GLenum pname, GLint * params), ((uintptr_t)obj, pname, params)) +GEN_THUNKS(glGetObjectPtrLabel, (const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label), (ptr, bufSize, length, label)) +GEN_THUNKS(glGetObjectPtrLabelKHR, (const void * ptr, GLsizei bufSize, GLsizei * length, GLchar * label), (ptr, bufSize, length, label)) +GEN_THUNKS(glGetOcclusionQueryivNV, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetOcclusionQueryuivNV, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetPathColorGenfvNV, (GLenum color, GLenum pname, GLfloat * value), (color, pname, value)) +GEN_THUNKS(glGetPathColorGenivNV, (GLenum color, GLenum pname, GLint * value), (color, pname, value)) +GEN_THUNKS(glGetPathCommandsNV, (GLuint path, GLubyte * commands), (path, commands)) +GEN_THUNKS(glGetPathCoordsNV, (GLuint path, GLfloat * coords), (path, coords)) +GEN_THUNKS(glGetPathDashArrayNV, (GLuint path, GLfloat * dashArray), (path, dashArray)) +GEN_THUNKS_RET(GLfloat, glGetPathLengthNV, (GLuint path, GLsizei startSegment, GLsizei numSegments), (path, startSegment, numSegments)) +GEN_THUNKS(glGetPathMetricRangeNV, (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat * metrics), (metricQueryMask, firstPathName, numPaths, stride, metrics)) +GEN_THUNKS(glGetPathMetricsNV, (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLsizei stride, GLfloat * metrics), (metricQueryMask, numPaths, pathNameType, paths, pathBase, stride, metrics)) +GEN_THUNKS(glGetPathParameterfvNV, (GLuint path, GLenum pname, GLfloat * value), (path, pname, value)) +GEN_THUNKS(glGetPathParameterivNV, (GLuint path, GLenum pname, GLint * value), (path, pname, value)) +GEN_THUNKS(glGetPathSpacingNV, (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat * returnedSpacing), (pathListMode, numPaths, pathNameType, paths, pathBase, advanceScale, kerningScale, transformType, returnedSpacing)) +GEN_THUNKS(glGetPathTexGenfvNV, (GLenum texCoordSet, GLenum pname, GLfloat * value), (texCoordSet, pname, value)) +GEN_THUNKS(glGetPathTexGenivNV, (GLenum texCoordSet, GLenum pname, GLint * value), (texCoordSet, pname, value)) +GEN_THUNKS(glGetPerfCounterInfoINTEL, (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar * counterName, GLuint counterDescLength, GLchar * counterDesc, GLuint * counterOffset, GLuint * counterDataSize, GLuint * counterTypeEnum, GLuint * counterDataTypeEnum, GLuint64 * rawCounterMaxValue), (queryId, counterId, counterNameLength, counterName, counterDescLength, counterDesc, counterOffset, counterDataSize, counterTypeEnum, counterDataTypeEnum, rawCounterMaxValue)) +GEN_THUNKS(glGetPerfMonitorCounterDataAMD, (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint * data, GLint * bytesWritten), (monitor, pname, dataSize, data, bytesWritten)) +GEN_THUNKS(glGetPerfMonitorCounterInfoAMD, (GLuint group, GLuint counter, GLenum pname, void * data), (group, counter, pname, data)) +GEN_THUNKS(glGetPerfMonitorCounterStringAMD, (GLuint group, GLuint counter, GLsizei bufSize, GLsizei * length, GLchar * counterString), (group, counter, bufSize, length, counterString)) +GEN_THUNKS(glGetPerfMonitorCountersAMD, (GLuint group, GLint * numCounters, GLint * maxActiveCounters, GLsizei counterSize, GLuint * counters), (group, numCounters, maxActiveCounters, counterSize, counters)) +GEN_THUNKS(glGetPerfMonitorGroupStringAMD, (GLuint group, GLsizei bufSize, GLsizei * length, GLchar * groupString), (group, bufSize, length, groupString)) +GEN_THUNKS(glGetPerfMonitorGroupsAMD, (GLint * numGroups, GLsizei groupsSize, GLuint * groups), (numGroups, groupsSize, groups)) +GEN_THUNKS(glGetPerfQueryDataINTEL, (GLuint queryHandle, GLuint flags, GLsizei dataSize, GLvoid * data, GLuint * bytesWritten), (queryHandle, flags, dataSize, data, bytesWritten)) +GEN_THUNKS(glGetPerfQueryIdByNameINTEL, (GLchar * queryName, GLuint * queryId), (queryName, queryId)) +GEN_THUNKS(glGetPerfQueryInfoINTEL, (GLuint queryId, GLuint queryNameLength, GLchar * queryName, GLuint * dataSize, GLuint * noCounters, GLuint * noInstances, GLuint * capsMask), (queryId, queryNameLength, queryName, dataSize, noCounters, noInstances, capsMask)) +GEN_THUNKS(glGetPixelMapfv, (GLenum map, GLfloat * values), (map, values)) +GEN_THUNKS(glGetPixelMapuiv, (GLenum map, GLuint * values), (map, values)) +GEN_THUNKS(glGetPixelMapusv, (GLenum map, GLushort * values), (map, values)) +GEN_THUNKS(glGetPixelMapxv, (GLenum map, GLint size, GLfixed * values), (map, size, values)) +GEN_THUNKS(glGetPixelTexGenParameterfvSGIS, (GLenum pname, GLfloat * params), (pname, params)) +GEN_THUNKS(glGetPixelTexGenParameterivSGIS, (GLenum pname, GLint * params), (pname, params)) +GEN_THUNKS(glGetPixelTransformParameterfvEXT, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetPixelTransformParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetPointerIndexedvEXT, (GLenum target, GLuint index, void ** data), (target, index, data)) +GEN_THUNKS(glGetPointeri_vEXT, (GLenum pname, GLuint index, void ** params), (pname, index, params)) +GEN_THUNKS(glGetPointerv, (GLenum pname, void ** params), (pname, params)) +GEN_THUNKS(glGetPointervEXT, (GLenum pname, void ** params), (pname, params)) +GEN_THUNKS(glGetPointervKHR, (GLenum pname, void ** params), (pname, params)) +GEN_THUNKS(glGetPolygonStipple, (GLubyte * mask), (mask)) +GEN_THUNKS(glGetProgramBinary, (GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary), (program, bufSize, length, binaryFormat, binary)) +GEN_THUNKS(glGetProgramBinaryOES, (GLuint program, GLsizei bufSize, GLsizei * length, GLenum * binaryFormat, void * binary), (program, bufSize, length, binaryFormat, binary)) +GEN_THUNKS(glGetProgramEnvParameterIivNV, (GLenum target, GLuint index, GLint * params), (target, index, params)) +GEN_THUNKS(glGetProgramEnvParameterIuivNV, (GLenum target, GLuint index, GLuint * params), (target, index, params)) +GEN_THUNKS(glGetProgramEnvParameterdvARB, (GLenum target, GLuint index, GLdouble * params), (target, index, params)) +GEN_THUNKS(glGetProgramEnvParameterfvARB, (GLenum target, GLuint index, GLfloat * params), (target, index, params)) +GEN_THUNKS(glGetProgramInfoLog, (GLuint program, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (program, bufSize, length, infoLog)) +GEN_THUNKS(glGetProgramInterfaceiv, (GLuint program, GLenum programInterface, GLenum pname, GLint * params), (program, programInterface, pname, params)) +GEN_THUNKS(glGetProgramLocalParameterIivNV, (GLenum target, GLuint index, GLint * params), (target, index, params)) +GEN_THUNKS(glGetProgramLocalParameterIuivNV, (GLenum target, GLuint index, GLuint * params), (target, index, params)) +GEN_THUNKS(glGetProgramLocalParameterdvARB, (GLenum target, GLuint index, GLdouble * params), (target, index, params)) +GEN_THUNKS(glGetProgramLocalParameterfvARB, (GLenum target, GLuint index, GLfloat * params), (target, index, params)) +GEN_THUNKS(glGetProgramNamedParameterdvNV, (GLuint id, GLsizei len, const GLubyte * name, GLdouble * params), (id, len, name, params)) +GEN_THUNKS(glGetProgramNamedParameterfvNV, (GLuint id, GLsizei len, const GLubyte * name, GLfloat * params), (id, len, name, params)) +GEN_THUNKS(glGetProgramParameterdvNV, (GLenum target, GLuint index, GLenum pname, GLdouble * params), (target, index, pname, params)) +GEN_THUNKS(glGetProgramParameterfvNV, (GLenum target, GLuint index, GLenum pname, GLfloat * params), (target, index, pname, params)) +GEN_THUNKS(glGetProgramPipelineInfoLog, (GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (pipeline, bufSize, length, infoLog)) +GEN_THUNKS(glGetProgramPipelineInfoLogEXT, (GLuint pipeline, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (pipeline, bufSize, length, infoLog)) +GEN_THUNKS(glGetProgramPipelineiv, (GLuint pipeline, GLenum pname, GLint * params), (pipeline, pname, params)) +GEN_THUNKS(glGetProgramPipelineivEXT, (GLuint pipeline, GLenum pname, GLint * params), (pipeline, pname, params)) +GEN_THUNKS_RET(GLuint, glGetProgramResourceIndex, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS_RET(GLint, glGetProgramResourceLocation, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS_RET(GLint, glGetProgramResourceLocationIndex, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS_RET(GLint, glGetProgramResourceLocationIndexEXT, (GLuint program, GLenum programInterface, const GLchar * name), (program, programInterface, name)) +GEN_THUNKS(glGetProgramResourceName, (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, GLchar * name), (program, programInterface, index, bufSize, length, name)) +GEN_THUNKS(glGetProgramResourcefvNV, (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLfloat * params), (program, programInterface, index, propCount, props, bufSize, length, params)) +GEN_THUNKS(glGetProgramResourceiv, (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params), (program, programInterface, index, propCount, props, bufSize, length, params)) +GEN_THUNKS(glGetProgramStageiv, (GLuint program, GLenum shadertype, GLenum pname, GLint * values), (program, shadertype, pname, values)) +GEN_THUNKS(glGetProgramStringARB, (GLenum target, GLenum pname, void * string), (target, pname, string)) +GEN_THUNKS(glGetProgramStringNV, (GLuint id, GLenum pname, GLubyte * program), (id, pname, program)) +GEN_THUNKS(glGetProgramSubroutineParameteruivNV, (GLenum target, GLuint index, GLuint * param), (target, index, param)) +GEN_THUNKS(glGetProgramiv, (GLuint program, GLenum pname, GLint * params), (program, pname, params)) +GEN_THUNKS(glGetProgramivARB, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetProgramivNV, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryBufferObjecti64v, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryBufferObjectiv, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryBufferObjectui64v, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryBufferObjectuiv, (GLuint id, GLuint buffer, GLenum pname, GLintptr offset), (id, buffer, pname, offset)) +GEN_THUNKS(glGetQueryIndexediv, (GLenum target, GLuint index, GLenum pname, GLint * params), (target, index, pname, params)) +GEN_THUNKS(glGetQueryObjecti64v, (GLuint id, GLenum pname, GLint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjecti64vEXT, (GLuint id, GLenum pname, GLint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectiv, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectivARB, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectivEXT, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectui64v, (GLuint id, GLenum pname, GLuint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectui64vEXT, (GLuint id, GLenum pname, GLuint64 * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectuiv, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectuivARB, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryObjectuivEXT, (GLuint id, GLenum pname, GLuint * params), (id, pname, params)) +GEN_THUNKS(glGetQueryiv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetQueryivARB, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetQueryivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetRenderbufferParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetRenderbufferParameterivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetRenderbufferParameterivOES, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetSamplerParameterIiv, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIivEXT, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIivOES, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIuiv, (GLuint sampler, GLenum pname, GLuint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIuivEXT, (GLuint sampler, GLenum pname, GLuint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterIuivOES, (GLuint sampler, GLenum pname, GLuint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameterfv, (GLuint sampler, GLenum pname, GLfloat * params), (sampler, pname, params)) +GEN_THUNKS(glGetSamplerParameteriv, (GLuint sampler, GLenum pname, GLint * params), (sampler, pname, params)) +GEN_THUNKS(glGetSeparableFilter, (GLenum target, GLenum format, GLenum type, void * row, void * column, void * span), (target, format, type, row, column, span)) +GEN_THUNKS(glGetSeparableFilterEXT, (GLenum target, GLenum format, GLenum type, void * row, void * column, void * span), (target, format, type, row, column, span)) +GEN_THUNKS(glGetShaderInfoLog, (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * infoLog), (shader, bufSize, length, infoLog)) +GEN_THUNKS(glGetShaderPrecisionFormat, (GLenum shadertype, GLenum precisiontype, GLint * range, GLint * precision), (shadertype, precisiontype, range, precision)) +GEN_THUNKS(glGetShaderSource, (GLuint shader, GLsizei bufSize, GLsizei * length, GLchar * source), (shader, bufSize, length, source)) +GEN_THUNKS(glGetShaderSourceARB, (GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * source), ((uintptr_t)obj, maxLength, length, source)) +GEN_THUNKS(glGetShaderiv, (GLuint shader, GLenum pname, GLint * params), (shader, pname, params)) +GEN_THUNKS(glGetSharpenTexFuncSGIS, (GLenum target, GLfloat * points), (target, points)) +GEN_THUNKS_RET(GLushort, glGetStageIndexNV, (GLenum shadertype), (shadertype)) +GEN_THUNKS_RET(const GLubyte *, glGetString, (GLenum name), (name)) +GEN_THUNKS_RET(const GLubyte *, glGetStringi, (GLenum name, GLuint index), (name, index)) +GEN_THUNKS_RET(GLuint, glGetSubroutineIndex, (GLuint program, GLenum shadertype, const GLchar * name), (program, shadertype, name)) +GEN_THUNKS_RET(GLint, glGetSubroutineUniformLocation, (GLuint program, GLenum shadertype, const GLchar * name), (program, shadertype, name)) +GEN_THUNKS(glGetSynciv, (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values), (sync, pname, bufSize, length, values)) +GEN_THUNKS(glGetSyncivAPPLE, (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values), (sync, pname, bufSize, length, values)) +GEN_THUNKS(glGetTexBumpParameterfvATI, (GLenum pname, GLfloat * param), (pname, param)) +GEN_THUNKS(glGetTexBumpParameterivATI, (GLenum pname, GLint * param), (pname, param)) +GEN_THUNKS(glGetTexEnvfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetTexEnviv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexEnvxv, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetTexEnvxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetTexFilterFuncSGIS, (GLenum target, GLenum filter, GLfloat * weights), (target, filter, weights)) +GEN_THUNKS(glGetTexGendv, (GLenum coord, GLenum pname, GLdouble * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenfv, (GLenum coord, GLenum pname, GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenfvOES, (GLenum coord, GLenum pname, GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGeniv, (GLenum coord, GLenum pname, GLint * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenivOES, (GLenum coord, GLenum pname, GLint * params), (coord, pname, params)) +GEN_THUNKS(glGetTexGenxvOES, (GLenum coord, GLenum pname, GLfixed * params), (coord, pname, params)) +GEN_THUNKS(glGetTexImage, (GLenum target, GLint level, GLenum format, GLenum type, void * pixels), (target, level, format, type, pixels)) +GEN_THUNKS(glGetTexLevelParameterfv, (GLenum target, GLint level, GLenum pname, GLfloat * params), (target, level, pname, params)) +GEN_THUNKS(glGetTexLevelParameteriv, (GLenum target, GLint level, GLenum pname, GLint * params), (target, level, pname, params)) +GEN_THUNKS(glGetTexLevelParameterxvOES, (GLenum target, GLint level, GLenum pname, GLfixed * params), (target, level, pname, params)) +GEN_THUNKS(glGetTexParameterIiv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIivEXT, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIivOES, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIuiv, (GLenum target, GLenum pname, GLuint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIuivEXT, (GLenum target, GLenum pname, GLuint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterIuivOES, (GLenum target, GLenum pname, GLuint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterPointervAPPLE, (GLenum target, GLenum pname, void ** params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterfv, (GLenum target, GLenum pname, GLfloat * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameteriv, (GLenum target, GLenum pname, GLint * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterxv, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS(glGetTexParameterxvOES, (GLenum target, GLenum pname, GLfixed * params), (target, pname, params)) +GEN_THUNKS_RET(GLuint64, glGetTextureHandleARB, (GLuint texture), (texture)) +GEN_THUNKS_RET(GLuint64, glGetTextureHandleNV, (GLuint texture), (texture)) +GEN_THUNKS(glGetTextureImage, (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels), (texture, level, format, type, bufSize, pixels)) +GEN_THUNKS(glGetTextureImageEXT, (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void * pixels), (texture, target, level, format, type, pixels)) +GEN_THUNKS(glGetTextureLevelParameterfv, (GLuint texture, GLint level, GLenum pname, GLfloat * params), (texture, level, pname, params)) +GEN_THUNKS(glGetTextureLevelParameterfvEXT, (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat * params), (texture, target, level, pname, params)) +GEN_THUNKS(glGetTextureLevelParameteriv, (GLuint texture, GLint level, GLenum pname, GLint * params), (texture, level, pname, params)) +GEN_THUNKS(glGetTextureLevelParameterivEXT, (GLuint texture, GLenum target, GLint level, GLenum pname, GLint * params), (texture, target, level, pname, params)) +GEN_THUNKS(glGetTextureParameterIiv, (GLuint texture, GLenum pname, GLint * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterIivEXT, (GLuint texture, GLenum target, GLenum pname, GLint * params), (texture, target, pname, params)) +GEN_THUNKS(glGetTextureParameterIuiv, (GLuint texture, GLenum pname, GLuint * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterIuivEXT, (GLuint texture, GLenum target, GLenum pname, GLuint * params), (texture, target, pname, params)) +GEN_THUNKS(glGetTextureParameterfv, (GLuint texture, GLenum pname, GLfloat * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterfvEXT, (GLuint texture, GLenum target, GLenum pname, GLfloat * params), (texture, target, pname, params)) +GEN_THUNKS(glGetTextureParameteriv, (GLuint texture, GLenum pname, GLint * params), (texture, pname, params)) +GEN_THUNKS(glGetTextureParameterivEXT, (GLuint texture, GLenum target, GLenum pname, GLint * params), (texture, target, pname, params)) +GEN_THUNKS_RET(GLuint64, glGetTextureSamplerHandleARB, (GLuint texture, GLuint sampler), (texture, sampler)) +GEN_THUNKS_RET(GLuint64, glGetTextureSamplerHandleNV, (GLuint texture, GLuint sampler), (texture, sampler)) +GEN_THUNKS(glGetTextureSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void * pixels), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, bufSize, pixels)) +GEN_THUNKS(glGetTrackMatrixivNV, (GLenum target, GLuint address, GLenum pname, GLint * params), (target, address, pname, params)) +GEN_THUNKS(glGetTransformFeedbackVarying, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetTransformFeedbackVaryingEXT, (GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name), (program, index, bufSize, length, size, type, name)) +GEN_THUNKS(glGetTransformFeedbackVaryingNV, (GLuint program, GLuint index, GLint * location), (program, index, location)) +GEN_THUNKS(glGetTransformFeedbacki64_v, (GLuint xfb, GLenum pname, GLuint index, GLint64 * param), (xfb, pname, index, param)) +GEN_THUNKS(glGetTransformFeedbacki_v, (GLuint xfb, GLenum pname, GLuint index, GLint * param), (xfb, pname, index, param)) +GEN_THUNKS(glGetTransformFeedbackiv, (GLuint xfb, GLenum pname, GLint * param), (xfb, pname, param)) +GEN_THUNKS(glGetTranslatedShaderSourceANGLE, (GLuint shader, GLsizei bufsize, GLsizei * length, GLchar * source), (shader, bufsize, length, source)) +GEN_THUNKS_RET(GLuint, glGetUniformBlockIndex, (GLuint program, const GLchar * uniformBlockName), (program, uniformBlockName)) +GEN_THUNKS_RET(GLint, glGetUniformBufferSizeEXT, (GLuint program, GLint location), (program, location)) +GEN_THUNKS(glGetUniformIndices, (GLuint program, GLsizei uniformCount, const GLchar *const* uniformNames, GLuint * uniformIndices), (program, uniformCount, uniformNames, uniformIndices)) +GEN_THUNKS_RET(GLint, glGetUniformLocation, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS_RET(GLint, glGetUniformLocationARB, (GLhandleARB programObj, const GLcharARB * name), ((uintptr_t)programObj, name)) +GEN_THUNKS_RET(GLintptr, glGetUniformOffsetEXT, (GLuint program, GLint location), (program, location)) +GEN_THUNKS(glGetUniformSubroutineuiv, (GLenum shadertype, GLint location, GLuint * params), (shadertype, location, params)) +GEN_THUNKS(glGetUniformdv, (GLuint program, GLint location, GLdouble * params), (program, location, params)) +GEN_THUNKS(glGetUniformfv, (GLuint program, GLint location, GLfloat * params), (program, location, params)) +GEN_THUNKS(glGetUniformfvARB, (GLhandleARB programObj, GLint location, GLfloat * params), ((uintptr_t)programObj, location, params)) +GEN_THUNKS(glGetUniformi64vARB, (GLuint program, GLint location, GLint64 * params), (program, location, params)) +GEN_THUNKS(glGetUniformi64vNV, (GLuint program, GLint location, GLint64EXT * params), (program, location, params)) +GEN_THUNKS(glGetUniformiv, (GLuint program, GLint location, GLint * params), (program, location, params)) +GEN_THUNKS(glGetUniformivARB, (GLhandleARB programObj, GLint location, GLint * params), ((uintptr_t)programObj, location, params)) +GEN_THUNKS(glGetUniformui64vARB, (GLuint program, GLint location, GLuint64 * params), (program, location, params)) +GEN_THUNKS(glGetUniformui64vNV, (GLuint program, GLint location, GLuint64EXT * params), (program, location, params)) +GEN_THUNKS(glGetUniformuiv, (GLuint program, GLint location, GLuint * params), (program, location, params)) +GEN_THUNKS(glGetUniformuivEXT, (GLuint program, GLint location, GLuint * params), (program, location, params)) +GEN_THUNKS(glGetVariantArrayObjectfvATI, (GLuint id, GLenum pname, GLfloat * params), (id, pname, params)) +GEN_THUNKS(glGetVariantArrayObjectivATI, (GLuint id, GLenum pname, GLint * params), (id, pname, params)) +GEN_THUNKS(glGetVariantBooleanvEXT, (GLuint id, GLenum value, GLboolean * data), (id, value, data)) +GEN_THUNKS(glGetVariantFloatvEXT, (GLuint id, GLenum value, GLfloat * data), (id, value, data)) +GEN_THUNKS(glGetVariantIntegervEXT, (GLuint id, GLenum value, GLint * data), (id, value, data)) +GEN_THUNKS(glGetVariantPointervEXT, (GLuint id, GLenum value, void ** data), (id, value, data)) +GEN_THUNKS_RET(GLint, glGetVaryingLocationNV, (GLuint program, const GLchar * name), (program, name)) +GEN_THUNKS(glGetVertexArrayIndexed64iv, (GLuint vaobj, GLuint index, GLenum pname, GLint64 * param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayIndexediv, (GLuint vaobj, GLuint index, GLenum pname, GLint * param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayIntegeri_vEXT, (GLuint vaobj, GLuint index, GLenum pname, GLint * param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayIntegervEXT, (GLuint vaobj, GLenum pname, GLint * param), (vaobj, pname, param)) +GEN_THUNKS(glGetVertexArrayPointeri_vEXT, (GLuint vaobj, GLuint index, GLenum pname, void ** param), (vaobj, index, pname, param)) +GEN_THUNKS(glGetVertexArrayPointervEXT, (GLuint vaobj, GLenum pname, void ** param), (vaobj, pname, param)) +GEN_THUNKS(glGetVertexArrayiv, (GLuint vaobj, GLenum pname, GLint * param), (vaobj, pname, param)) +GEN_THUNKS(glGetVertexAttribArrayObjectfvATI, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribArrayObjectivATI, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIiv, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIivEXT, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIuiv, (GLuint index, GLenum pname, GLuint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribIuivEXT, (GLuint index, GLenum pname, GLuint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLdv, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLdvEXT, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLi64vNV, (GLuint index, GLenum pname, GLint64EXT * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLui64vARB, (GLuint index, GLenum pname, GLuint64EXT * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribLui64vNV, (GLuint index, GLenum pname, GLuint64EXT * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribPointerv, (GLuint index, GLenum pname, void ** pointer), (index, pname, pointer)) +GEN_THUNKS(glGetVertexAttribPointervARB, (GLuint index, GLenum pname, void ** pointer), (index, pname, pointer)) +GEN_THUNKS(glGetVertexAttribPointervNV, (GLuint index, GLenum pname, void ** pointer), (index, pname, pointer)) +GEN_THUNKS(glGetVertexAttribdv, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribdvARB, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribdvNV, (GLuint index, GLenum pname, GLdouble * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribfv, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribfvARB, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribfvNV, (GLuint index, GLenum pname, GLfloat * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribiv, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribivARB, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVertexAttribivNV, (GLuint index, GLenum pname, GLint * params), (index, pname, params)) +GEN_THUNKS(glGetVideoCaptureStreamdvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glGetVideoCaptureStreamfvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glGetVideoCaptureStreamivNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glGetVideoCaptureivNV, (GLuint video_capture_slot, GLenum pname, GLint * params), (video_capture_slot, pname, params)) +GEN_THUNKS(glGetVideoi64vNV, (GLuint video_slot, GLenum pname, GLint64EXT * params), (video_slot, pname, params)) +GEN_THUNKS(glGetVideoivNV, (GLuint video_slot, GLenum pname, GLint * params), (video_slot, pname, params)) +GEN_THUNKS(glGetVideoui64vNV, (GLuint video_slot, GLenum pname, GLuint64EXT * params), (video_slot, pname, params)) +GEN_THUNKS(glGetVideouivNV, (GLuint video_slot, GLenum pname, GLuint * params), (video_slot, pname, params)) +GEN_THUNKS(glGetnColorTable, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table), (target, format, type, bufSize, table)) +GEN_THUNKS(glGetnColorTableARB, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * table), (target, format, type, bufSize, table)) +GEN_THUNKS(glGetnCompressedTexImage, (GLenum target, GLint lod, GLsizei bufSize, void * pixels), (target, lod, bufSize, pixels)) +GEN_THUNKS(glGetnCompressedTexImageARB, (GLenum target, GLint lod, GLsizei bufSize, void * img), (target, lod, bufSize, img)) +GEN_THUNKS(glGetnConvolutionFilter, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image), (target, format, type, bufSize, image)) +GEN_THUNKS(glGetnConvolutionFilterARB, (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void * image), (target, format, type, bufSize, image)) +GEN_THUNKS(glGetnHistogram, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnHistogramARB, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnMapdv, (GLenum target, GLenum query, GLsizei bufSize, GLdouble * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapdvARB, (GLenum target, GLenum query, GLsizei bufSize, GLdouble * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapfv, (GLenum target, GLenum query, GLsizei bufSize, GLfloat * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapfvARB, (GLenum target, GLenum query, GLsizei bufSize, GLfloat * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapiv, (GLenum target, GLenum query, GLsizei bufSize, GLint * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMapivARB, (GLenum target, GLenum query, GLsizei bufSize, GLint * v), (target, query, bufSize, v)) +GEN_THUNKS(glGetnMinmax, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnMinmaxARB, (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void * values), (target, reset, format, type, bufSize, values)) +GEN_THUNKS(glGetnPixelMapfv, (GLenum map, GLsizei bufSize, GLfloat * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapfvARB, (GLenum map, GLsizei bufSize, GLfloat * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapuiv, (GLenum map, GLsizei bufSize, GLuint * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapuivARB, (GLenum map, GLsizei bufSize, GLuint * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapusv, (GLenum map, GLsizei bufSize, GLushort * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPixelMapusvARB, (GLenum map, GLsizei bufSize, GLushort * values), (map, bufSize, values)) +GEN_THUNKS(glGetnPolygonStipple, (GLsizei bufSize, GLubyte * pattern), (bufSize, pattern)) +GEN_THUNKS(glGetnPolygonStippleARB, (GLsizei bufSize, GLubyte * pattern), (bufSize, pattern)) +GEN_THUNKS(glGetnSeparableFilter, (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span), (target, format, type, rowBufSize, row, columnBufSize, column, span)) +GEN_THUNKS(glGetnSeparableFilterARB, (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void * row, GLsizei columnBufSize, void * column, void * span), (target, format, type, rowBufSize, row, columnBufSize, column, span)) +GEN_THUNKS(glGetnTexImage, (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * pixels), (target, level, format, type, bufSize, pixels)) +GEN_THUNKS(glGetnTexImageARB, (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void * img), (target, level, format, type, bufSize, img)) +GEN_THUNKS(glGetnUniformdv, (GLuint program, GLint location, GLsizei bufSize, GLdouble * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformdvARB, (GLuint program, GLint location, GLsizei bufSize, GLdouble * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfv, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfvARB, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfvEXT, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformfvKHR, (GLuint program, GLint location, GLsizei bufSize, GLfloat * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformi64vARB, (GLuint program, GLint location, GLsizei bufSize, GLint64 * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformiv, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformivARB, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformivEXT, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformivKHR, (GLuint program, GLint location, GLsizei bufSize, GLint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformui64vARB, (GLuint program, GLint location, GLsizei bufSize, GLuint64 * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformuiv, (GLuint program, GLint location, GLsizei bufSize, GLuint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformuivARB, (GLuint program, GLint location, GLsizei bufSize, GLuint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGetnUniformuivKHR, (GLuint program, GLint location, GLsizei bufSize, GLuint * params), (program, location, bufSize, params)) +GEN_THUNKS(glGlobalAlphaFactorbSUN, (GLbyte factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactordSUN, (GLdouble factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorfSUN, (GLfloat factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactoriSUN, (GLint factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorsSUN, (GLshort factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorubSUN, (GLubyte factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactoruiSUN, (GLuint factor), (factor)) +GEN_THUNKS(glGlobalAlphaFactorusSUN, (GLushort factor), (factor)) +GEN_THUNKS(glHint, (GLenum target, GLenum mode), (target, mode)) +GEN_THUNKS(glHintPGI, (GLenum target, GLint mode), (target, mode)) +GEN_THUNKS(glHistogram, (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink), (target, width, internalformat, sink)) +GEN_THUNKS(glHistogramEXT, (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink), (target, width, internalformat, sink)) +GEN_THUNKS(glIglooInterfaceSGIX, (GLenum pname, const void * params), (pname, params)) +GEN_THUNKS(glImageTransformParameterfHP, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glImageTransformParameterfvHP, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glImageTransformParameteriHP, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glImageTransformParameterivHP, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS_RET(GLsync, glImportSyncEXT, (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags), (external_sync_type, external_sync, flags)) +GEN_THUNKS(glIndexFormatNV, (GLenum type, GLsizei stride), (type, stride)) +GEN_THUNKS(glIndexFuncEXT, (GLenum func, GLclampf ref), (func, ref)) +GEN_THUNKS(glIndexMask, (GLuint mask), (mask)) +GEN_THUNKS(glIndexMaterialEXT, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glIndexPointer, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glIndexPointerEXT, (GLenum type, GLsizei stride, GLsizei count, const void * pointer), (type, stride, count, pointer)) +GEN_THUNKS(glIndexPointerListIBM, (GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (type, stride, pointer, ptrstride)) +GEN_THUNKS(glIndexd, (GLdouble c), (c)) +GEN_THUNKS(glIndexdv, (const GLdouble * c), (c)) +GEN_THUNKS(glIndexf, (GLfloat c), (c)) +GEN_THUNKS(glIndexfv, (const GLfloat * c), (c)) +GEN_THUNKS(glIndexi, (GLint c), (c)) +GEN_THUNKS(glIndexiv, (const GLint * c), (c)) +GEN_THUNKS(glIndexs, (GLshort c), (c)) +GEN_THUNKS(glIndexsv, (const GLshort * c), (c)) +GEN_THUNKS(glIndexub, (GLubyte c), (c)) +GEN_THUNKS(glIndexubv, (const GLubyte * c), (c)) +GEN_THUNKS(glIndexxOES, (GLfixed component), (component)) +GEN_THUNKS(glIndexxvOES, (const GLfixed * component), (component)) +GEN_THUNKS(glInitNames, (void), ()) +GEN_THUNKS(glInsertComponentEXT, (GLuint res, GLuint src, GLuint num), (res, src, num)) +GEN_THUNKS(glInsertEventMarkerEXT, (GLsizei length, const GLchar * marker), (length, marker)) +GEN_THUNKS(glInstrumentsBufferSGIX, (GLsizei size, GLint * buffer), (size, buffer)) +GEN_THUNKS(glInterleavedArrays, (GLenum format, GLsizei stride, const void * pointer), (format, stride, pointer)) +GEN_THUNKS(glInterpolatePathsNV, (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight), (resultPath, pathA, pathB, weight)) +GEN_THUNKS(glInvalidateBufferData, (GLuint buffer), (buffer)) +GEN_THUNKS(glInvalidateBufferSubData, (GLuint buffer, GLintptr offset, GLsizeiptr length), (buffer, offset, length)) +GEN_THUNKS(glInvalidateFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum * attachments), (target, numAttachments, attachments)) +GEN_THUNKS(glInvalidateNamedFramebufferData, (GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments), (framebuffer, numAttachments, attachments)) +GEN_THUNKS(glInvalidateNamedFramebufferSubData, (GLuint framebuffer, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height), (framebuffer, numAttachments, attachments, x, y, width, height)) +GEN_THUNKS(glInvalidateSubFramebuffer, (GLenum target, GLsizei numAttachments, const GLenum * attachments, GLint x, GLint y, GLsizei width, GLsizei height), (target, numAttachments, attachments, x, y, width, height)) +GEN_THUNKS(glInvalidateTexImage, (GLuint texture, GLint level), (texture, level)) +GEN_THUNKS(glInvalidateTexSubImage, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth), (texture, level, xoffset, yoffset, zoffset, width, height, depth)) +GEN_THUNKS_RET(GLboolean, glIsAsyncMarkerSGIX, (GLuint marker), (marker)) +GEN_THUNKS_RET(GLboolean, glIsBuffer, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsBufferARB, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsBufferResidentNV, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glIsCommandListNV, (GLuint list), (list)) +GEN_THUNKS_RET(GLboolean, glIsEnabled, (GLenum cap), (cap)) +GEN_THUNKS_RET(GLboolean, glIsEnabledIndexedEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnabledi, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnablediEXT, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnablediNV, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsEnablediOES, (GLenum target, GLuint index), (target, index)) +GEN_THUNKS_RET(GLboolean, glIsFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glIsFenceNV, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glIsFramebuffer, (GLuint framebuffer), (framebuffer)) +GEN_THUNKS_RET(GLboolean, glIsFramebufferEXT, (GLuint framebuffer), (framebuffer)) +GEN_THUNKS_RET(GLboolean, glIsFramebufferOES, (GLuint framebuffer), (framebuffer)) +GEN_THUNKS_RET(GLboolean, glIsImageHandleResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsImageHandleResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsList, (GLuint list), (list)) +GEN_THUNKS_RET(GLboolean, glIsNameAMD, (GLenum identifier, GLuint name), (identifier, name)) +GEN_THUNKS_RET(GLboolean, glIsNamedBufferResidentNV, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsNamedStringARB, (GLint namelen, const GLchar * name), (namelen, name)) +GEN_THUNKS_RET(GLboolean, glIsObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glIsOcclusionQueryNV, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsPathNV, (GLuint path), (path)) +GEN_THUNKS_RET(GLboolean, glIsPointInFillPathNV, (GLuint path, GLuint mask, GLfloat x, GLfloat y), (path, mask, x, y)) +GEN_THUNKS_RET(GLboolean, glIsPointInStrokePathNV, (GLuint path, GLfloat x, GLfloat y), (path, x, y)) +GEN_THUNKS_RET(GLboolean, glIsProgram, (GLuint program), (program)) +GEN_THUNKS_RET(GLboolean, glIsProgramARB, (GLuint program), (program)) +GEN_THUNKS_RET(GLboolean, glIsProgramNV, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsProgramPipeline, (GLuint pipeline), (pipeline)) +GEN_THUNKS_RET(GLboolean, glIsProgramPipelineEXT, (GLuint pipeline), (pipeline)) +GEN_THUNKS_RET(GLboolean, glIsQuery, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsQueryARB, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsQueryEXT, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsRenderbuffer, (GLuint renderbuffer), (renderbuffer)) +GEN_THUNKS_RET(GLboolean, glIsRenderbufferEXT, (GLuint renderbuffer), (renderbuffer)) +GEN_THUNKS_RET(GLboolean, glIsRenderbufferOES, (GLuint renderbuffer), (renderbuffer)) +GEN_THUNKS_RET(GLboolean, glIsSampler, (GLuint sampler), (sampler)) +GEN_THUNKS_RET(GLboolean, glIsShader, (GLuint shader), (shader)) +GEN_THUNKS_RET(GLboolean, glIsStateNV, (GLuint state), (state)) +GEN_THUNKS_RET(GLboolean, glIsSync, (GLsync sync), (sync)) +GEN_THUNKS_RET(GLboolean, glIsSyncAPPLE, (GLsync sync), (sync)) +GEN_THUNKS_RET(GLboolean, glIsTexture, (GLuint texture), (texture)) +GEN_THUNKS_RET(GLboolean, glIsTextureEXT, (GLuint texture), (texture)) +GEN_THUNKS_RET(GLboolean, glIsTextureHandleResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsTextureHandleResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS_RET(GLboolean, glIsTransformFeedback, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsTransformFeedbackNV, (GLuint id), (id)) +GEN_THUNKS_RET(GLboolean, glIsVariantEnabledEXT, (GLuint id, GLenum cap), (id, cap)) +GEN_THUNKS_RET(GLboolean, glIsVertexArray, (GLuint array), (array)) +GEN_THUNKS_RET(GLboolean, glIsVertexArrayAPPLE, (GLuint array), (array)) +GEN_THUNKS_RET(GLboolean, glIsVertexArrayOES, (GLuint array), (array)) +GEN_THUNKS_RET(GLboolean, glIsVertexAttribEnabledAPPLE, (GLuint index, GLenum pname), (index, pname)) +GEN_THUNKS(glLabelObjectEXT, (GLenum type, GLuint object, GLsizei length, const GLchar * label), (type, object, length, label)) +GEN_THUNKS(glLightEnviSGIX, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glLightModelf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glLightModelfv, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glLightModeli, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glLightModeliv, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glLightModelx, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glLightModelxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glLightModelxv, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glLightModelxvOES, (GLenum pname, const GLfixed * param), (pname, param)) +GEN_THUNKS(glLightf, (GLenum light, GLenum pname, GLfloat param), (light, pname, param)) +GEN_THUNKS(glLightfv, (GLenum light, GLenum pname, const GLfloat * params), (light, pname, params)) +GEN_THUNKS(glLighti, (GLenum light, GLenum pname, GLint param), (light, pname, param)) +GEN_THUNKS(glLightiv, (GLenum light, GLenum pname, const GLint * params), (light, pname, params)) +GEN_THUNKS(glLightx, (GLenum light, GLenum pname, GLfixed param), (light, pname, param)) +GEN_THUNKS(glLightxOES, (GLenum light, GLenum pname, GLfixed param), (light, pname, param)) +GEN_THUNKS(glLightxv, (GLenum light, GLenum pname, const GLfixed * params), (light, pname, params)) +GEN_THUNKS(glLightxvOES, (GLenum light, GLenum pname, const GLfixed * params), (light, pname, params)) +GEN_THUNKS(glLineStipple, (GLint factor, GLushort pattern), (factor, pattern)) +GEN_THUNKS(glLineWidth, (GLfloat width), (width)) +GEN_THUNKS(glLineWidthx, (GLfixed width), (width)) +GEN_THUNKS(glLineWidthxOES, (GLfixed width), (width)) +GEN_THUNKS(glLinkProgram, (GLuint program), (program)) +GEN_THUNKS(glLinkProgramARB, (GLhandleARB programObj), ((uintptr_t)programObj)) +GEN_THUNKS(glListBase, (GLuint base), (base)) +GEN_THUNKS(glListDrawCommandsStatesClientNV, (GLuint list, GLuint segment, const void ** indirects, const GLsizei * sizes, const GLuint * states, const GLuint * fbos, GLuint count), (list, segment, indirects, sizes, states, fbos, count)) +GEN_THUNKS(glListParameterfSGIX, (GLuint list, GLenum pname, GLfloat param), (list, pname, param)) +GEN_THUNKS(glListParameterfvSGIX, (GLuint list, GLenum pname, const GLfloat * params), (list, pname, params)) +GEN_THUNKS(glListParameteriSGIX, (GLuint list, GLenum pname, GLint param), (list, pname, param)) +GEN_THUNKS(glListParameterivSGIX, (GLuint list, GLenum pname, const GLint * params), (list, pname, params)) +GEN_THUNKS(glLoadIdentity, (void), ()) +GEN_THUNKS(glLoadIdentityDeformationMapSGIX, (GLbitfield mask), (mask)) +GEN_THUNKS(glLoadMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glLoadMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glLoadMatrixx, (const GLfixed * m), (m)) +GEN_THUNKS(glLoadMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glLoadName, (GLuint name), (name)) +GEN_THUNKS(glLoadPaletteFromModelViewMatrixOES, (void), ()) +GEN_THUNKS(glLoadProgramNV, (GLenum target, GLuint id, GLsizei len, const GLubyte * program), (target, id, len, program)) +GEN_THUNKS(glLoadTransposeMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixdARB, (const GLdouble * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixfARB, (const GLfloat * m), (m)) +GEN_THUNKS(glLoadTransposeMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glLockArraysEXT, (GLint first, GLsizei count), (first, count)) +GEN_THUNKS(glLogicOp, (GLenum opcode), (opcode)) +GEN_THUNKS(glMakeBufferNonResidentNV, (GLenum target), (target)) +GEN_THUNKS(glMakeBufferResidentNV, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS(glMakeImageHandleNonResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeImageHandleNonResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeImageHandleResidentARB, (GLuint64 handle, GLenum access), (handle, access)) +GEN_THUNKS(glMakeImageHandleResidentNV, (GLuint64 handle, GLenum access), (handle, access)) +GEN_THUNKS(glMakeNamedBufferNonResidentNV, (GLuint buffer), (buffer)) +GEN_THUNKS(glMakeNamedBufferResidentNV, (GLuint buffer, GLenum access), (buffer, access)) +GEN_THUNKS(glMakeTextureHandleNonResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeTextureHandleNonResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeTextureHandleResidentARB, (GLuint64 handle), (handle)) +GEN_THUNKS(glMakeTextureHandleResidentNV, (GLuint64 handle), (handle)) +GEN_THUNKS(glMap1d, (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points), (target, u1, u2, stride, order, points)) +GEN_THUNKS(glMap1f, (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points), (target, u1, u2, stride, order, points)) +GEN_THUNKS(glMap1xOES, (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points), (target, u1, u2, stride, order, points)) +GEN_THUNKS(glMap2d, (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMap2f, (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMap2xOES, (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points), (target, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS_RET(void *, glMapBuffer, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS_RET(void *, glMapBufferARB, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS_RET(void *, glMapBufferOES, (GLenum target, GLenum access), (target, access)) +GEN_THUNKS_RET(void *, glMapBufferRange, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access), (target, offset, length, access)) +GEN_THUNKS_RET(void *, glMapBufferRangeEXT, (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access), (target, offset, length, access)) +GEN_THUNKS(glMapControlPointsNV, (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void * points), (target, index, type, ustride, vstride, uorder, vorder, packed, points)) +GEN_THUNKS(glMapGrid1d, (GLint un, GLdouble u1, GLdouble u2), (un, u1, u2)) +GEN_THUNKS(glMapGrid1f, (GLint un, GLfloat u1, GLfloat u2), (un, u1, u2)) +GEN_THUNKS(glMapGrid1xOES, (GLint n, GLfixed u1, GLfixed u2), (n, u1, u2)) +GEN_THUNKS(glMapGrid2d, (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2), (un, u1, u2, vn, v1, v2)) +GEN_THUNKS(glMapGrid2f, (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2), (un, u1, u2, vn, v1, v2)) +GEN_THUNKS(glMapGrid2xOES, (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2), (n, u1, u2, v1, v2)) +GEN_THUNKS_RET(void *, glMapNamedBuffer, (GLuint buffer, GLenum access), (buffer, access)) +GEN_THUNKS_RET(void *, glMapNamedBufferEXT, (GLuint buffer, GLenum access), (buffer, access)) +GEN_THUNKS_RET(void *, glMapNamedBufferRange, (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access), (buffer, offset, length, access)) +GEN_THUNKS_RET(void *, glMapNamedBufferRangeEXT, (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access), (buffer, offset, length, access)) +GEN_THUNKS_RET(void *, glMapObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS(glMapParameterfvNV, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glMapParameterivNV, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS_RET(void *, glMapTexture2DINTEL, (GLuint texture, GLint level, GLbitfield access, GLint * stride, GLenum * layout), (texture, level, access, stride, layout)) +GEN_THUNKS(glMapVertexAttrib1dAPPLE, (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points), (index, size, u1, u2, stride, order, points)) +GEN_THUNKS(glMapVertexAttrib1fAPPLE, (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points), (index, size, u1, u2, stride, order, points)) +GEN_THUNKS(glMapVertexAttrib2dAPPLE, (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points), (index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMapVertexAttrib2fAPPLE, (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points), (index, size, u1, u2, ustride, uorder, v1, v2, vstride, vorder, points)) +GEN_THUNKS(glMaterialf, (GLenum face, GLenum pname, GLfloat param), (face, pname, param)) +GEN_THUNKS(glMaterialfv, (GLenum face, GLenum pname, const GLfloat * params), (face, pname, params)) +GEN_THUNKS(glMateriali, (GLenum face, GLenum pname, GLint param), (face, pname, param)) +GEN_THUNKS(glMaterialiv, (GLenum face, GLenum pname, const GLint * params), (face, pname, params)) +GEN_THUNKS(glMaterialx, (GLenum face, GLenum pname, GLfixed param), (face, pname, param)) +GEN_THUNKS(glMaterialxOES, (GLenum face, GLenum pname, GLfixed param), (face, pname, param)) +GEN_THUNKS(glMaterialxv, (GLenum face, GLenum pname, const GLfixed * param), (face, pname, param)) +GEN_THUNKS(glMaterialxvOES, (GLenum face, GLenum pname, const GLfixed * param), (face, pname, param)) +GEN_THUNKS(glMatrixFrustumEXT, (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (mode, left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glMatrixIndexPointerARB, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glMatrixIndexPointerOES, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glMatrixIndexubvARB, (GLint size, const GLubyte * indices), (size, indices)) +GEN_THUNKS(glMatrixIndexuivARB, (GLint size, const GLuint * indices), (size, indices)) +GEN_THUNKS(glMatrixIndexusvARB, (GLint size, const GLushort * indices), (size, indices)) +GEN_THUNKS(glMatrixLoad3x2fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixLoad3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixLoadIdentityEXT, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixLoadTranspose3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixLoadTransposedEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixLoadTransposefEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixLoaddEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixLoadfEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixMode, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixMult3x2fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixMult3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixMultTranspose3x3fNV, (GLenum matrixMode, const GLfloat * m), (matrixMode, m)) +GEN_THUNKS(glMatrixMultTransposedEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixMultTransposefEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixMultdEXT, (GLenum mode, const GLdouble * m), (mode, m)) +GEN_THUNKS(glMatrixMultfEXT, (GLenum mode, const GLfloat * m), (mode, m)) +GEN_THUNKS(glMatrixOrthoEXT, (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (mode, left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glMatrixPopEXT, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixPushEXT, (GLenum mode), (mode)) +GEN_THUNKS(glMatrixRotatedEXT, (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z), (mode, angle, x, y, z)) +GEN_THUNKS(glMatrixRotatefEXT, (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z), (mode, angle, x, y, z)) +GEN_THUNKS(glMatrixScaledEXT, (GLenum mode, GLdouble x, GLdouble y, GLdouble z), (mode, x, y, z)) +GEN_THUNKS(glMatrixScalefEXT, (GLenum mode, GLfloat x, GLfloat y, GLfloat z), (mode, x, y, z)) +GEN_THUNKS(glMatrixTranslatedEXT, (GLenum mode, GLdouble x, GLdouble y, GLdouble z), (mode, x, y, z)) +GEN_THUNKS(glMatrixTranslatefEXT, (GLenum mode, GLfloat x, GLfloat y, GLfloat z), (mode, x, y, z)) +GEN_THUNKS(glMaxShaderCompilerThreadsARB, (GLuint count), (count)) +GEN_THUNKS(glMemoryBarrier, (GLbitfield barriers), (barriers)) +GEN_THUNKS(glMemoryBarrierByRegion, (GLbitfield barriers), (barriers)) +GEN_THUNKS(glMemoryBarrierEXT, (GLbitfield barriers), (barriers)) +GEN_THUNKS(glMinSampleShading, (GLfloat value), (value)) +GEN_THUNKS(glMinSampleShadingARB, (GLfloat value), (value)) +GEN_THUNKS(glMinSampleShadingOES, (GLfloat value), (value)) +GEN_THUNKS(glMinmax, (GLenum target, GLenum internalformat, GLboolean sink), (target, internalformat, sink)) +GEN_THUNKS(glMinmaxEXT, (GLenum target, GLenum internalformat, GLboolean sink), (target, internalformat, sink)) +GEN_THUNKS(glMultMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glMultMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glMultMatrixx, (const GLfixed * m), (m)) +GEN_THUNKS(glMultMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glMultTransposeMatrixd, (const GLdouble * m), (m)) +GEN_THUNKS(glMultTransposeMatrixdARB, (const GLdouble * m), (m)) +GEN_THUNKS(glMultTransposeMatrixf, (const GLfloat * m), (m)) +GEN_THUNKS(glMultTransposeMatrixfARB, (const GLfloat * m), (m)) +GEN_THUNKS(glMultTransposeMatrixxOES, (const GLfixed * m), (m)) +GEN_THUNKS(glMultiDrawArrays, (GLenum mode, const GLint * first, const GLsizei * count, GLsizei drawcount), (mode, first, count, drawcount)) +GEN_THUNKS(glMultiDrawArraysEXT, (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glMultiDrawArraysIndirect, (GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawArraysIndirectAMD, (GLenum mode, const void * indirect, GLsizei primcount, GLsizei stride), (mode, indirect, primcount, stride)) +GEN_THUNKS(glMultiDrawArraysIndirectBindlessCountNV, (GLenum mode, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount), (mode, indirect, drawCount, maxDrawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawArraysIndirectBindlessNV, (GLenum mode, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount), (mode, indirect, drawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawArraysIndirectCountARB, (GLenum mode, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride), (mode, indirect, drawcount, maxdrawcount, stride)) +GEN_THUNKS(glMultiDrawArraysIndirectEXT, (GLenum mode, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawElementArrayAPPLE, (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount), (mode, first, count, primcount)) +GEN_THUNKS(glMultiDrawElements, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount), (mode, count, type, indices, drawcount)) +GEN_THUNKS(glMultiDrawElementsBaseVertex, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei drawcount, const GLint * basevertex), (mode, count, type, indices, drawcount, basevertex)) +GEN_THUNKS(glMultiDrawElementsBaseVertexEXT, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex), (mode, count, type, indices, primcount, basevertex)) +GEN_THUNKS(glMultiDrawElementsBaseVertexOES, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, const GLint * basevertex), (mode, count, type, indices, primcount, basevertex)) +GEN_THUNKS(glMultiDrawElementsEXT, (GLenum mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount), (mode, count, type, indices, primcount)) +GEN_THUNKS(glMultiDrawElementsIndirect, (GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, type, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawElementsIndirectAMD, (GLenum mode, GLenum type, const void * indirect, GLsizei primcount, GLsizei stride), (mode, type, indirect, primcount, stride)) +GEN_THUNKS(glMultiDrawElementsIndirectBindlessCountNV, (GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount), (mode, type, indirect, drawCount, maxDrawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawElementsIndirectBindlessNV, (GLenum mode, GLenum type, const void * indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount), (mode, type, indirect, drawCount, stride, vertexBufferCount)) +GEN_THUNKS(glMultiDrawElementsIndirectCountARB, (GLenum mode, GLenum type, GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride), (mode, type, indirect, drawcount, maxdrawcount, stride)) +GEN_THUNKS(glMultiDrawElementsIndirectEXT, (GLenum mode, GLenum type, const void * indirect, GLsizei drawcount, GLsizei stride), (mode, type, indirect, drawcount, stride)) +GEN_THUNKS(glMultiDrawRangeElementArrayAPPLE, (GLenum mode, GLuint start, GLuint end, const GLint * first, const GLsizei * count, GLsizei primcount), (mode, start, end, first, count, primcount)) +GEN_THUNKS(glMultiModeDrawArraysIBM, (const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride), (mode, first, count, primcount, modestride)) +GEN_THUNKS(glMultiModeDrawElementsIBM, (const GLenum * mode, const GLsizei * count, GLenum type, const void *const* indices, GLsizei primcount, GLint modestride), (mode, count, type, indices, primcount, modestride)) +GEN_THUNKS(glMultiTexBufferEXT, (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer), (texunit, target, internalformat, buffer)) +GEN_THUNKS(glMultiTexCoord1bOES, (GLenum texture, GLbyte s), (texture, s)) +GEN_THUNKS(glMultiTexCoord1bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord1d, (GLenum target, GLdouble s), (target, s)) +GEN_THUNKS(glMultiTexCoord1dARB, (GLenum target, GLdouble s), (target, s)) +GEN_THUNKS(glMultiTexCoord1dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1f, (GLenum target, GLfloat s), (target, s)) +GEN_THUNKS(glMultiTexCoord1fARB, (GLenum target, GLfloat s), (target, s)) +GEN_THUNKS(glMultiTexCoord1fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1hNV, (GLenum target, GLhalfNV s), (target, s)) +GEN_THUNKS(glMultiTexCoord1hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1i, (GLenum target, GLint s), (target, s)) +GEN_THUNKS(glMultiTexCoord1iARB, (GLenum target, GLint s), (target, s)) +GEN_THUNKS(glMultiTexCoord1iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1s, (GLenum target, GLshort s), (target, s)) +GEN_THUNKS(glMultiTexCoord1sARB, (GLenum target, GLshort s), (target, s)) +GEN_THUNKS(glMultiTexCoord1sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord1xOES, (GLenum texture, GLfixed s), (texture, s)) +GEN_THUNKS(glMultiTexCoord1xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord2bOES, (GLenum texture, GLbyte s, GLbyte t), (texture, s, t)) +GEN_THUNKS(glMultiTexCoord2bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord2d, (GLenum target, GLdouble s, GLdouble t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2dARB, (GLenum target, GLdouble s, GLdouble t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2f, (GLenum target, GLfloat s, GLfloat t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2fARB, (GLenum target, GLfloat s, GLfloat t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2hNV, (GLenum target, GLhalfNV s, GLhalfNV t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2i, (GLenum target, GLint s, GLint t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2iARB, (GLenum target, GLint s, GLint t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2s, (GLenum target, GLshort s, GLshort t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2sARB, (GLenum target, GLshort s, GLshort t), (target, s, t)) +GEN_THUNKS(glMultiTexCoord2sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord2xOES, (GLenum texture, GLfixed s, GLfixed t), (texture, s, t)) +GEN_THUNKS(glMultiTexCoord2xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord3bOES, (GLenum texture, GLbyte s, GLbyte t, GLbyte r), (texture, s, t, r)) +GEN_THUNKS(glMultiTexCoord3bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord3d, (GLenum target, GLdouble s, GLdouble t, GLdouble r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3dARB, (GLenum target, GLdouble s, GLdouble t, GLdouble r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3f, (GLenum target, GLfloat s, GLfloat t, GLfloat r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3fARB, (GLenum target, GLfloat s, GLfloat t, GLfloat r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3hNV, (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3i, (GLenum target, GLint s, GLint t, GLint r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3iARB, (GLenum target, GLint s, GLint t, GLint r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3s, (GLenum target, GLshort s, GLshort t, GLshort r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3sARB, (GLenum target, GLshort s, GLshort t, GLshort r), (target, s, t, r)) +GEN_THUNKS(glMultiTexCoord3sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord3xOES, (GLenum texture, GLfixed s, GLfixed t, GLfixed r), (texture, s, t, r)) +GEN_THUNKS(glMultiTexCoord3xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord4bOES, (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q), (texture, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4bvOES, (GLenum texture, const GLbyte * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoord4d, (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4dARB, (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4dv, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4dvARB, (GLenum target, const GLdouble * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4f, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4fARB, (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4fv, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4fvARB, (GLenum target, const GLfloat * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4hNV, (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4hvNV, (GLenum target, const GLhalfNV * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4i, (GLenum target, GLint s, GLint t, GLint r, GLint q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4iARB, (GLenum target, GLint s, GLint t, GLint r, GLint q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4iv, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4ivARB, (GLenum target, const GLint * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4s, (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4sARB, (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q), (target, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4sv, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4svARB, (GLenum target, const GLshort * v), (target, v)) +GEN_THUNKS(glMultiTexCoord4x, (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q), (texture, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4xOES, (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q), (texture, s, t, r, q)) +GEN_THUNKS(glMultiTexCoord4xvOES, (GLenum texture, const GLfixed * coords), (texture, coords)) +GEN_THUNKS(glMultiTexCoordP1ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP1uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP2ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP2uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP3ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP3uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP4ui, (GLenum texture, GLenum type, GLuint coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordP4uiv, (GLenum texture, GLenum type, const GLuint * coords), (texture, type, coords)) +GEN_THUNKS(glMultiTexCoordPointerEXT, (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void * pointer), (texunit, size, type, stride, pointer)) +GEN_THUNKS(glMultiTexEnvfEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexEnvfvEXT, (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexEnviEXT, (GLenum texunit, GLenum target, GLenum pname, GLint param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexEnvivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexGendEXT, (GLenum texunit, GLenum coord, GLenum pname, GLdouble param), (texunit, coord, pname, param)) +GEN_THUNKS(glMultiTexGendvEXT, (GLenum texunit, GLenum coord, GLenum pname, const GLdouble * params), (texunit, coord, pname, params)) +GEN_THUNKS(glMultiTexGenfEXT, (GLenum texunit, GLenum coord, GLenum pname, GLfloat param), (texunit, coord, pname, param)) +GEN_THUNKS(glMultiTexGenfvEXT, (GLenum texunit, GLenum coord, GLenum pname, const GLfloat * params), (texunit, coord, pname, params)) +GEN_THUNKS(glMultiTexGeniEXT, (GLenum texunit, GLenum coord, GLenum pname, GLint param), (texunit, coord, pname, param)) +GEN_THUNKS(glMultiTexGenivEXT, (GLenum texunit, GLenum coord, GLenum pname, const GLint * params), (texunit, coord, pname, params)) +GEN_THUNKS(glMultiTexImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels), (texunit, target, level, internalformat, width, border, format, type, pixels)) +GEN_THUNKS(glMultiTexImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels), (texunit, target, level, internalformat, width, height, border, format, type, pixels)) +GEN_THUNKS(glMultiTexImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (texunit, target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glMultiTexParameterIivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexParameterIuivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLuint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexParameterfEXT, (GLenum texunit, GLenum target, GLenum pname, GLfloat param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexParameterfvEXT, (GLenum texunit, GLenum target, GLenum pname, const GLfloat * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexParameteriEXT, (GLenum texunit, GLenum target, GLenum pname, GLint param), (texunit, target, pname, param)) +GEN_THUNKS(glMultiTexParameterivEXT, (GLenum texunit, GLenum target, GLenum pname, const GLint * params), (texunit, target, pname, params)) +GEN_THUNKS(glMultiTexRenderbufferEXT, (GLenum texunit, GLenum target, GLuint renderbuffer), (texunit, target, renderbuffer)) +GEN_THUNKS(glMultiTexSubImage1DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (texunit, target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glMultiTexSubImage2DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (texunit, target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glMultiTexSubImage3DEXT, (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (texunit, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glNamedBufferData, (GLuint buffer, GLsizeiptr size, const void * data, GLenum usage), (buffer, size, data, usage)) +GEN_THUNKS(glNamedBufferDataEXT, (GLuint buffer, GLsizeiptr size, const void * data, GLenum usage), (buffer, size, data, usage)) +GEN_THUNKS(glNamedBufferPageCommitmentARB, (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit), (buffer, offset, size, commit)) +GEN_THUNKS(glNamedBufferPageCommitmentEXT, (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit), (buffer, offset, size, commit)) +GEN_THUNKS(glNamedBufferStorage, (GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags), (buffer, size, data, flags)) +GEN_THUNKS(glNamedBufferStorageEXT, (GLuint buffer, GLsizeiptr size, const void * data, GLbitfield flags), (buffer, size, data, flags)) +GEN_THUNKS(glNamedBufferSubData, (GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data), (buffer, offset, size, data)) +GEN_THUNKS(glNamedBufferSubDataEXT, (GLuint buffer, GLintptr offset, GLsizeiptr size, const void * data), (buffer, offset, size, data)) +GEN_THUNKS(glNamedCopyBufferSubDataEXT, (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (readBuffer, writeBuffer, readOffset, writeOffset, size)) +GEN_THUNKS(glNamedFramebufferDrawBuffer, (GLuint framebuffer, GLenum buf), (framebuffer, buf)) +GEN_THUNKS(glNamedFramebufferDrawBuffers, (GLuint framebuffer, GLsizei n, const GLenum * bufs), (framebuffer, n, bufs)) +GEN_THUNKS(glNamedFramebufferParameteri, (GLuint framebuffer, GLenum pname, GLint param), (framebuffer, pname, param)) +GEN_THUNKS(glNamedFramebufferParameteriEXT, (GLuint framebuffer, GLenum pname, GLint param), (framebuffer, pname, param)) +GEN_THUNKS(glNamedFramebufferReadBuffer, (GLuint framebuffer, GLenum src), (framebuffer, src)) +GEN_THUNKS(glNamedFramebufferRenderbuffer, (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (framebuffer, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glNamedFramebufferRenderbufferEXT, (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer), (framebuffer, attachment, renderbuffertarget, renderbuffer)) +GEN_THUNKS(glNamedFramebufferSampleLocationsfvARB, (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v), (framebuffer, start, count, v)) +GEN_THUNKS(glNamedFramebufferSampleLocationsfvNV, (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat * v), (framebuffer, start, count, v)) +GEN_THUNKS(glNamedFramebufferTexture, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level), (framebuffer, attachment, texture, level)) +GEN_THUNKS(glNamedFramebufferTexture1DEXT, (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (framebuffer, attachment, textarget, texture, level)) +GEN_THUNKS(glNamedFramebufferTexture2DEXT, (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level), (framebuffer, attachment, textarget, texture, level)) +GEN_THUNKS(glNamedFramebufferTexture3DEXT, (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset), (framebuffer, attachment, textarget, texture, level, zoffset)) +GEN_THUNKS(glNamedFramebufferTextureEXT, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level), (framebuffer, attachment, texture, level)) +GEN_THUNKS(glNamedFramebufferTextureFaceEXT, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face), (framebuffer, attachment, texture, level, face)) +GEN_THUNKS(glNamedFramebufferTextureLayer, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer), (framebuffer, attachment, texture, level, layer)) +GEN_THUNKS(glNamedFramebufferTextureLayerEXT, (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer), (framebuffer, attachment, texture, level, layer)) +GEN_THUNKS(glNamedProgramLocalParameter4dEXT, (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameter4dvEXT, (GLuint program, GLenum target, GLuint index, const GLdouble * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameter4fEXT, (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameter4fvEXT, (GLuint program, GLenum target, GLuint index, const GLfloat * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameterI4iEXT, (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameterI4ivEXT, (GLuint program, GLenum target, GLuint index, const GLint * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameterI4uiEXT, (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (program, target, index, x, y, z, w)) +GEN_THUNKS(glNamedProgramLocalParameterI4uivEXT, (GLuint program, GLenum target, GLuint index, const GLuint * params), (program, target, index, params)) +GEN_THUNKS(glNamedProgramLocalParameters4fvEXT, (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat * params), (program, target, index, count, params)) +GEN_THUNKS(glNamedProgramLocalParametersI4ivEXT, (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint * params), (program, target, index, count, params)) +GEN_THUNKS(glNamedProgramLocalParametersI4uivEXT, (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint * params), (program, target, index, count, params)) +GEN_THUNKS(glNamedProgramStringEXT, (GLuint program, GLenum target, GLenum format, GLsizei len, const void * string), (program, target, format, len, string)) +GEN_THUNKS(glNamedRenderbufferStorage, (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageEXT, (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageMultisample, (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, samples, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageMultisampleCoverageEXT, (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, coverageSamples, colorSamples, internalformat, width, height)) +GEN_THUNKS(glNamedRenderbufferStorageMultisampleEXT, (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (renderbuffer, samples, internalformat, width, height)) +GEN_THUNKS(glNamedStringARB, (GLenum type, GLint namelen, const GLchar * name, GLint stringlen, const GLchar * string), (type, namelen, name, stringlen, string)) +GEN_THUNKS(glNewList, (GLuint list, GLenum mode), (list, mode)) +GEN_THUNKS_RET(GLuint, glNewObjectBufferATI, (GLsizei size, const void * pointer, GLenum usage), (size, pointer, usage)) +GEN_THUNKS(glNormal3b, (GLbyte nx, GLbyte ny, GLbyte nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3bv, (const GLbyte * v), (v)) +GEN_THUNKS(glNormal3d, (GLdouble nx, GLdouble ny, GLdouble nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glNormal3f, (GLfloat nx, GLfloat ny, GLfloat nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3fVertex3fSUN, (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (nx, ny, nz, x, y, z)) +GEN_THUNKS(glNormal3fVertex3fvSUN, (const GLfloat * n, const GLfloat * v), (n, v)) +GEN_THUNKS(glNormal3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glNormal3hNV, (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glNormal3i, (GLint nx, GLint ny, GLint nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3iv, (const GLint * v), (v)) +GEN_THUNKS(glNormal3s, (GLshort nx, GLshort ny, GLshort nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3sv, (const GLshort * v), (v)) +GEN_THUNKS(glNormal3x, (GLfixed nx, GLfixed ny, GLfixed nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3xOES, (GLfixed nx, GLfixed ny, GLfixed nz), (nx, ny, nz)) +GEN_THUNKS(glNormal3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glNormalFormatNV, (GLenum type, GLsizei stride), (type, stride)) +GEN_THUNKS(glNormalP3ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glNormalP3uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glNormalPointer, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glNormalPointerEXT, (GLenum type, GLsizei stride, GLsizei count, const void * pointer), (type, stride, count, pointer)) +GEN_THUNKS(glNormalPointerListIBM, (GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (type, stride, pointer, ptrstride)) +GEN_THUNKS(glNormalPointervINTEL, (GLenum type, const void ** pointer), (type, pointer)) +GEN_THUNKS(glNormalStream3bATI, (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3bvATI, (GLenum stream, const GLbyte * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3dATI, (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3fATI, (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3iATI, (GLenum stream, GLint nx, GLint ny, GLint nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glNormalStream3sATI, (GLenum stream, GLshort nx, GLshort ny, GLshort nz), (stream, nx, ny, nz)) +GEN_THUNKS(glNormalStream3svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glObjectLabel, (GLenum identifier, GLuint name, GLsizei length, const GLchar * label), (identifier, name, length, label)) +GEN_THUNKS(glObjectLabelKHR, (GLenum identifier, GLuint name, GLsizei length, const GLchar * label), (identifier, name, length, label)) +GEN_THUNKS(glObjectPtrLabel, (const void * ptr, GLsizei length, const GLchar * label), (ptr, length, label)) +GEN_THUNKS(glObjectPtrLabelKHR, (const void * ptr, GLsizei length, const GLchar * label), (ptr, length, label)) +GEN_THUNKS_RET(GLenum, glObjectPurgeableAPPLE, (GLenum objectType, GLuint name, GLenum option), (objectType, name, option)) +GEN_THUNKS_RET(GLenum, glObjectUnpurgeableAPPLE, (GLenum objectType, GLuint name, GLenum option), (objectType, name, option)) +GEN_THUNKS(glOrtho, (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar), (left, right, bottom, top, zNear, zFar)) +GEN_THUNKS(glOrthof, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glOrthofOES, (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f), (l, r, b, t, n, f)) +GEN_THUNKS(glOrthox, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS(glOrthoxOES, (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f), (l, r, b, t, n, f)) +GEN_THUNKS(glPNTrianglesfATI, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPNTrianglesiATI, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPassTexCoordATI, (GLuint dst, GLuint coord, GLenum swizzle), (dst, coord, swizzle)) +GEN_THUNKS(glPassThrough, (GLfloat token), (token)) +GEN_THUNKS(glPassThroughxOES, (GLfixed token), (token)) +GEN_THUNKS(glPatchParameterfv, (GLenum pname, const GLfloat * values), (pname, values)) +GEN_THUNKS(glPatchParameteri, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glPatchParameteriEXT, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glPatchParameteriOES, (GLenum pname, GLint value), (pname, value)) +GEN_THUNKS(glPathColorGenNV, (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat * coeffs), (color, genMode, colorFormat, coeffs)) +GEN_THUNKS(glPathCommandsNV, (GLuint path, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords), (path, numCommands, commands, numCoords, coordType, coords)) +GEN_THUNKS(glPathCoordsNV, (GLuint path, GLsizei numCoords, GLenum coordType, const void * coords), (path, numCoords, coordType, coords)) +GEN_THUNKS(glPathCoverDepthFuncNV, (GLenum func), (func)) +GEN_THUNKS(glPathDashArrayNV, (GLuint path, GLsizei dashCount, const GLfloat * dashArray), (path, dashCount, dashArray)) +GEN_THUNKS(glPathFogGenNV, (GLenum genMode), (genMode)) +GEN_THUNKS_RET(GLenum, glPathGlyphIndexArrayNV, (GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontName, fontStyle, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS_RET(GLenum, glPathGlyphIndexRangeNV, (GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint baseAndCount), (fontTarget, fontName, fontStyle, pathParameterTemplate, emScale, baseAndCount)) +GEN_THUNKS(glPathGlyphRangeNV, (GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontName, fontStyle, firstGlyph, numGlyphs, handleMissingGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS(glPathGlyphsNV, (GLuint firstPathName, GLenum fontTarget, const void * fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void * charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontName, fontStyle, numGlyphs, type, charcodes, handleMissingGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS_RET(GLenum, glPathMemoryGlyphIndexArrayNV, (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void * fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale), (firstPathName, fontTarget, fontSize, fontData, faceIndex, firstGlyphIndex, numGlyphs, pathParameterTemplate, emScale)) +GEN_THUNKS(glPathParameterfNV, (GLuint path, GLenum pname, GLfloat value), (path, pname, value)) +GEN_THUNKS(glPathParameterfvNV, (GLuint path, GLenum pname, const GLfloat * value), (path, pname, value)) +GEN_THUNKS(glPathParameteriNV, (GLuint path, GLenum pname, GLint value), (path, pname, value)) +GEN_THUNKS(glPathParameterivNV, (GLuint path, GLenum pname, const GLint * value), (path, pname, value)) +GEN_THUNKS(glPathStencilDepthOffsetNV, (GLfloat factor, GLfloat units), (factor, units)) +GEN_THUNKS(glPathStencilFuncNV, (GLenum func, GLint ref, GLuint mask), (func, ref, mask)) +GEN_THUNKS(glPathStringNV, (GLuint path, GLenum format, GLsizei length, const void * pathString), (path, format, length, pathString)) +GEN_THUNKS(glPathSubCommandsNV, (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte * commands, GLsizei numCoords, GLenum coordType, const void * coords), (path, commandStart, commandsToDelete, numCommands, commands, numCoords, coordType, coords)) +GEN_THUNKS(glPathSubCoordsNV, (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void * coords), (path, coordStart, numCoords, coordType, coords)) +GEN_THUNKS(glPathTexGenNV, (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat * coeffs), (texCoordSet, genMode, components, coeffs)) +GEN_THUNKS(glPauseTransformFeedback, (void), ()) +GEN_THUNKS(glPauseTransformFeedbackNV, (void), ()) +GEN_THUNKS(glPixelDataRangeNV, (GLenum target, GLsizei length, const void * pointer), (target, length, pointer)) +GEN_THUNKS(glPixelMapfv, (GLenum map, GLsizei mapsize, const GLfloat * values), (map, mapsize, values)) +GEN_THUNKS(glPixelMapuiv, (GLenum map, GLsizei mapsize, const GLuint * values), (map, mapsize, values)) +GEN_THUNKS(glPixelMapusv, (GLenum map, GLsizei mapsize, const GLushort * values), (map, mapsize, values)) +GEN_THUNKS(glPixelMapx, (GLenum map, GLint size, const GLfixed * values), (map, size, values)) +GEN_THUNKS(glPixelStoref, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPixelStorei, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPixelStorex, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPixelTexGenParameterfSGIS, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPixelTexGenParameterfvSGIS, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPixelTexGenParameteriSGIS, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPixelTexGenParameterivSGIS, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glPixelTexGenSGIX, (GLenum mode), (mode)) +GEN_THUNKS(glPixelTransferf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPixelTransferi, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPixelTransferxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPixelTransformParameterfEXT, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glPixelTransformParameterfvEXT, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glPixelTransformParameteriEXT, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glPixelTransformParameterivEXT, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glPixelZoom, (GLfloat xfactor, GLfloat yfactor), (xfactor, yfactor)) +GEN_THUNKS(glPixelZoomxOES, (GLfixed xfactor, GLfixed yfactor), (xfactor, yfactor)) +GEN_THUNKS_RET(GLboolean, glPointAlongPathNV, (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat * x, GLfloat * y, GLfloat * tangentX, GLfloat * tangentY), (path, startSegment, numSegments, distance, x, y, tangentX, tangentY)) +GEN_THUNKS(glPointParameterf, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfARB, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfEXT, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfSGIS, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glPointParameterfv, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameterfvARB, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameterfvEXT, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameterfvSGIS, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glPointParameteri, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPointParameteriNV, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glPointParameteriv, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glPointParameterivNV, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glPointParameterx, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPointParameterxOES, (GLenum pname, GLfixed param), (pname, param)) +GEN_THUNKS(glPointParameterxv, (GLenum pname, const GLfixed * params), (pname, params)) +GEN_THUNKS(glPointParameterxvOES, (GLenum pname, const GLfixed * params), (pname, params)) +GEN_THUNKS(glPointSize, (GLfloat size), (size)) +GEN_THUNKS(glPointSizePointerOES, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glPointSizex, (GLfixed size), (size)) +GEN_THUNKS(glPointSizexOES, (GLfixed size), (size)) +GEN_THUNKS_RET(GLint, glPollAsyncSGIX, (GLuint * markerp), (markerp)) +GEN_THUNKS_RET(GLint, glPollInstrumentsSGIX, (GLint * marker_p), (marker_p)) +GEN_THUNKS(glPolygonMode, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glPolygonModeNV, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glPolygonOffset, (GLfloat factor, GLfloat units), (factor, units)) +GEN_THUNKS(glPolygonOffsetClampEXT, (GLfloat factor, GLfloat units, GLfloat clamp), (factor, units, clamp)) +GEN_THUNKS(glPolygonOffsetEXT, (GLfloat factor, GLfloat bias), (factor, bias)) +GEN_THUNKS(glPolygonOffsetx, (GLfixed factor, GLfixed units), (factor, units)) +GEN_THUNKS(glPolygonOffsetxOES, (GLfixed factor, GLfixed units), (factor, units)) +GEN_THUNKS(glPolygonStipple, (const GLubyte * mask), (mask)) +GEN_THUNKS(glPopAttrib, (void), ()) +GEN_THUNKS(glPopClientAttrib, (void), ()) +GEN_THUNKS(glPopDebugGroup, (void), ()) +GEN_THUNKS(glPopDebugGroupKHR, (void), ()) +GEN_THUNKS(glPopGroupMarkerEXT, (void), ()) +GEN_THUNKS(glPopMatrix, (void), ()) +GEN_THUNKS(glPopName, (void), ()) +GEN_THUNKS(glPresentFrameDualFillNV, (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3), (video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, target1, fill1, target2, fill2, target3, fill3)) +GEN_THUNKS(glPresentFrameKeyedNV, (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1), (video_slot, minPresentTime, beginPresentTimeId, presentDurationId, type, target0, fill0, key0, target1, fill1, key1)) +GEN_THUNKS(glPrimitiveBoundingBox, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveBoundingBoxARB, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveBoundingBoxEXT, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveBoundingBoxOES, (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW), (minX, minY, minZ, minW, maxX, maxY, maxZ, maxW)) +GEN_THUNKS(glPrimitiveRestartIndex, (GLuint index), (index)) +GEN_THUNKS(glPrimitiveRestartIndexNV, (GLuint index), (index)) +GEN_THUNKS(glPrimitiveRestartNV, (void), ()) +GEN_THUNKS(glPrioritizeTextures, (GLsizei n, const GLuint * textures, const GLfloat * priorities), (n, textures, priorities)) +GEN_THUNKS(glPrioritizeTexturesEXT, (GLsizei n, const GLuint * textures, const GLclampf * priorities), (n, textures, priorities)) +GEN_THUNKS(glPrioritizeTexturesxOES, (GLsizei n, const GLuint * textures, const GLfixed * priorities), (n, textures, priorities)) +GEN_THUNKS(glProgramBinary, (GLuint program, GLenum binaryFormat, const void * binary, GLsizei length), (program, binaryFormat, binary, length)) +GEN_THUNKS(glProgramBinaryOES, (GLuint program, GLenum binaryFormat, const void * binary, GLint length), (program, binaryFormat, binary, length)) +GEN_THUNKS(glProgramBufferParametersIivNV, (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint * params), (target, bindingIndex, wordIndex, count, params)) +GEN_THUNKS(glProgramBufferParametersIuivNV, (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint * params), (target, bindingIndex, wordIndex, count, params)) +GEN_THUNKS(glProgramBufferParametersfvNV, (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat * params), (target, bindingIndex, wordIndex, count, params)) +GEN_THUNKS(glProgramEnvParameter4dARB, (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameter4dvARB, (GLenum target, GLuint index, const GLdouble * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameter4fARB, (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameter4fvARB, (GLenum target, GLuint index, const GLfloat * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameterI4iNV, (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameterI4ivNV, (GLenum target, GLuint index, const GLint * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameterI4uiNV, (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramEnvParameterI4uivNV, (GLenum target, GLuint index, const GLuint * params), (target, index, params)) +GEN_THUNKS(glProgramEnvParameters4fvEXT, (GLenum target, GLuint index, GLsizei count, const GLfloat * params), (target, index, count, params)) +GEN_THUNKS(glProgramEnvParametersI4ivNV, (GLenum target, GLuint index, GLsizei count, const GLint * params), (target, index, count, params)) +GEN_THUNKS(glProgramEnvParametersI4uivNV, (GLenum target, GLuint index, GLsizei count, const GLuint * params), (target, index, count, params)) +GEN_THUNKS(glProgramLocalParameter4dARB, (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameter4dvARB, (GLenum target, GLuint index, const GLdouble * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameter4fARB, (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameter4fvARB, (GLenum target, GLuint index, const GLfloat * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameterI4iNV, (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameterI4ivNV, (GLenum target, GLuint index, const GLint * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameterI4uiNV, (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramLocalParameterI4uivNV, (GLenum target, GLuint index, const GLuint * params), (target, index, params)) +GEN_THUNKS(glProgramLocalParameters4fvEXT, (GLenum target, GLuint index, GLsizei count, const GLfloat * params), (target, index, count, params)) +GEN_THUNKS(glProgramLocalParametersI4ivNV, (GLenum target, GLuint index, GLsizei count, const GLint * params), (target, index, count, params)) +GEN_THUNKS(glProgramLocalParametersI4uivNV, (GLenum target, GLuint index, GLsizei count, const GLuint * params), (target, index, count, params)) +GEN_THUNKS(glProgramNamedParameter4dNV, (GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (id, len, name, x, y, z, w)) +GEN_THUNKS(glProgramNamedParameter4dvNV, (GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v), (id, len, name, v)) +GEN_THUNKS(glProgramNamedParameter4fNV, (GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (id, len, name, x, y, z, w)) +GEN_THUNKS(glProgramNamedParameter4fvNV, (GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v), (id, len, name, v)) +GEN_THUNKS(glProgramParameter4dNV, (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramParameter4dvNV, (GLenum target, GLuint index, const GLdouble * v), (target, index, v)) +GEN_THUNKS(glProgramParameter4fNV, (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (target, index, x, y, z, w)) +GEN_THUNKS(glProgramParameter4fvNV, (GLenum target, GLuint index, const GLfloat * v), (target, index, v)) +GEN_THUNKS(glProgramParameteri, (GLuint program, GLenum pname, GLint value), (program, pname, value)) +GEN_THUNKS(glProgramParameteriARB, (GLuint program, GLenum pname, GLint value), (program, pname, value)) +GEN_THUNKS(glProgramParameteriEXT, (GLuint program, GLenum pname, GLint value), (program, pname, value)) +GEN_THUNKS(glProgramParameters4dvNV, (GLenum target, GLuint index, GLsizei count, const GLdouble * v), (target, index, count, v)) +GEN_THUNKS(glProgramParameters4fvNV, (GLenum target, GLuint index, GLsizei count, const GLfloat * v), (target, index, count, v)) +GEN_THUNKS(glProgramPathFragmentInputGenNV, (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat * coeffs), (program, location, genMode, components, coeffs)) +GEN_THUNKS(glProgramStringARB, (GLenum target, GLenum format, GLsizei len, const void * string), (target, format, len, string)) +GEN_THUNKS(glProgramSubroutineParametersuivNV, (GLenum target, GLsizei count, const GLuint * params), (target, count, params)) +GEN_THUNKS(glProgramUniform1d, (GLuint program, GLint location, GLdouble v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1dEXT, (GLuint program, GLint location, GLdouble x), (program, location, x)) +GEN_THUNKS(glProgramUniform1dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1f, (GLuint program, GLint location, GLfloat v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1fEXT, (GLuint program, GLint location, GLfloat v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1i, (GLuint program, GLint location, GLint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1i64ARB, (GLuint program, GLint location, GLint64 x), (program, location, x)) +GEN_THUNKS(glProgramUniform1i64NV, (GLuint program, GLint location, GLint64EXT x), (program, location, x)) +GEN_THUNKS(glProgramUniform1i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1iEXT, (GLuint program, GLint location, GLint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1ui, (GLuint program, GLint location, GLuint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1ui64ARB, (GLuint program, GLint location, GLuint64 x), (program, location, x)) +GEN_THUNKS(glProgramUniform1ui64NV, (GLuint program, GLint location, GLuint64EXT x), (program, location, x)) +GEN_THUNKS(glProgramUniform1ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1uiEXT, (GLuint program, GLint location, GLuint v0), (program, location, v0)) +GEN_THUNKS(glProgramUniform1uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform1uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2d, (GLuint program, GLint location, GLdouble v0, GLdouble v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2dEXT, (GLuint program, GLint location, GLdouble x, GLdouble y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2f, (GLuint program, GLint location, GLfloat v0, GLfloat v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2fEXT, (GLuint program, GLint location, GLfloat v0, GLfloat v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2i, (GLuint program, GLint location, GLint v0, GLint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2i64ARB, (GLuint program, GLint location, GLint64 x, GLint64 y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2i64NV, (GLuint program, GLint location, GLint64EXT x, GLint64EXT y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2iEXT, (GLuint program, GLint location, GLint v0, GLint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2ui, (GLuint program, GLint location, GLuint v0, GLuint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2ui64ARB, (GLuint program, GLint location, GLuint64 x, GLuint64 y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2ui64NV, (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y), (program, location, x, y)) +GEN_THUNKS(glProgramUniform2ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2uiEXT, (GLuint program, GLint location, GLuint v0, GLuint v1), (program, location, v0, v1)) +GEN_THUNKS(glProgramUniform2uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform2uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3d, (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3dEXT, (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3fEXT, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3i64ARB, (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3i64NV, (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3iEXT, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3ui64ARB, (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3ui64NV, (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z), (program, location, x, y, z)) +GEN_THUNKS(glProgramUniform3ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3uiEXT, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2), (program, location, v0, v1, v2)) +GEN_THUNKS(glProgramUniform3uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform3uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4d, (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4dEXT, (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4dv, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4dvEXT, (GLuint program, GLint location, GLsizei count, const GLdouble * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4f, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4fEXT, (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4fv, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4fvEXT, (GLuint program, GLint location, GLsizei count, const GLfloat * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4i, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4i64ARB, (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4i64NV, (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4i64vARB, (GLuint program, GLint location, GLsizei count, const GLint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4i64vNV, (GLuint program, GLint location, GLsizei count, const GLint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4iEXT, (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4iv, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4ivEXT, (GLuint program, GLint location, GLsizei count, const GLint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4ui, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4ui64ARB, (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4ui64NV, (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w), (program, location, x, y, z, w)) +GEN_THUNKS(glProgramUniform4ui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4ui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4uiEXT, (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (program, location, v0, v1, v2, v3)) +GEN_THUNKS(glProgramUniform4uiv, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniform4uivEXT, (GLuint program, GLint location, GLsizei count, const GLuint * value), (program, location, count, value)) +GEN_THUNKS(glProgramUniformHandleui64ARB, (GLuint program, GLint location, GLuint64 value), (program, location, value)) +GEN_THUNKS(glProgramUniformHandleui64NV, (GLuint program, GLint location, GLuint64 value), (program, location, value)) +GEN_THUNKS(glProgramUniformHandleui64vARB, (GLuint program, GLint location, GLsizei count, const GLuint64 * values), (program, location, count, values)) +GEN_THUNKS(glProgramUniformHandleui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64 * values), (program, location, count, values)) +GEN_THUNKS(glProgramUniformMatrix2dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix2x4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix3x4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x2fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3dv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3dvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3fv, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformMatrix4x3fvEXT, (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (program, location, count, transpose, value)) +GEN_THUNKS(glProgramUniformui64NV, (GLuint program, GLint location, GLuint64EXT value), (program, location, value)) +GEN_THUNKS(glProgramUniformui64vNV, (GLuint program, GLint location, GLsizei count, const GLuint64EXT * value), (program, location, count, value)) +GEN_THUNKS(glProgramVertexLimitNV, (GLenum target, GLint limit), (target, limit)) +GEN_THUNKS(glProvokingVertex, (GLenum mode), (mode)) +GEN_THUNKS(glProvokingVertexEXT, (GLenum mode), (mode)) +GEN_THUNKS(glPushAttrib, (GLbitfield mask), (mask)) +GEN_THUNKS(glPushClientAttrib, (GLbitfield mask), (mask)) +GEN_THUNKS(glPushClientAttribDefaultEXT, (GLbitfield mask), (mask)) +GEN_THUNKS(glPushDebugGroup, (GLenum source, GLuint id, GLsizei length, const GLchar * message), (source, id, length, message)) +GEN_THUNKS(glPushDebugGroupKHR, (GLenum source, GLuint id, GLsizei length, const GLchar * message), (source, id, length, message)) +GEN_THUNKS(glPushGroupMarkerEXT, (GLsizei length, const GLchar * marker), (length, marker)) +GEN_THUNKS(glPushMatrix, (void), ()) +GEN_THUNKS(glPushName, (GLuint name), (name)) +GEN_THUNKS(glQueryCounter, (GLuint id, GLenum target), (id, target)) +GEN_THUNKS(glQueryCounterEXT, (GLuint id, GLenum target), (id, target)) +GEN_THUNKS_RET(GLbitfield, glQueryMatrixxOES, (GLfixed * mantissa, GLint * exponent), (mantissa, exponent)) +GEN_THUNKS(glQueryObjectParameteruiAMD, (GLenum target, GLuint id, GLenum pname, GLuint param), (target, id, pname, param)) +GEN_THUNKS(glRasterPos2d, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glRasterPos2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glRasterPos2f, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glRasterPos2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glRasterPos2i, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glRasterPos2iv, (const GLint * v), (v)) +GEN_THUNKS(glRasterPos2s, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glRasterPos2sv, (const GLshort * v), (v)) +GEN_THUNKS(glRasterPos2xOES, (GLfixed x, GLfixed y), (x, y)) +GEN_THUNKS(glRasterPos2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glRasterPos3d, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glRasterPos3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glRasterPos3f, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glRasterPos3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glRasterPos3i, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glRasterPos3iv, (const GLint * v), (v)) +GEN_THUNKS(glRasterPos3s, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glRasterPos3sv, (const GLshort * v), (v)) +GEN_THUNKS(glRasterPos3xOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glRasterPos3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glRasterPos4d, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glRasterPos4f, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glRasterPos4i, (GLint x, GLint y, GLint z, GLint w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4iv, (const GLint * v), (v)) +GEN_THUNKS(glRasterPos4s, (GLshort x, GLshort y, GLshort z, GLshort w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4sv, (const GLshort * v), (v)) +GEN_THUNKS(glRasterPos4xOES, (GLfixed x, GLfixed y, GLfixed z, GLfixed w), (x, y, z, w)) +GEN_THUNKS(glRasterPos4xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glRasterSamplesEXT, (GLuint samples, GLboolean fixedsamplelocations), (samples, fixedsamplelocations)) +GEN_THUNKS(glReadBuffer, (GLenum src), (src)) +GEN_THUNKS(glReadBufferIndexedEXT, (GLenum src, GLint index), (src, index)) +GEN_THUNKS(glReadBufferNV, (GLenum mode), (mode)) +GEN_THUNKS(glReadInstrumentsSGIX, (GLint marker), (marker)) +GEN_THUNKS(glReadPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void * pixels), (x, y, width, height, format, type, pixels)) +GEN_THUNKS(glReadnPixels, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glReadnPixelsARB, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glReadnPixelsEXT, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glReadnPixelsKHR, (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void * data), (x, y, width, height, format, type, bufSize, data)) +GEN_THUNKS(glRectd, (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectdv, (const GLdouble * v1, const GLdouble * v2), (v1, v2)) +GEN_THUNKS(glRectf, (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectfv, (const GLfloat * v1, const GLfloat * v2), (v1, v2)) +GEN_THUNKS(glRecti, (GLint x1, GLint y1, GLint x2, GLint y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectiv, (const GLint * v1, const GLint * v2), (v1, v2)) +GEN_THUNKS(glRects, (GLshort x1, GLshort y1, GLshort x2, GLshort y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectsv, (const GLshort * v1, const GLshort * v2), (v1, v2)) +GEN_THUNKS(glRectxOES, (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2), (x1, y1, x2, y2)) +GEN_THUNKS(glRectxvOES, (const GLfixed * v1, const GLfixed * v2), (v1, v2)) +GEN_THUNKS(glReferencePlaneSGIX, (const GLdouble * equation), (equation)) +GEN_THUNKS(glReleaseShaderCompiler, (void), ()) +GEN_THUNKS_RET(GLint, glRenderMode, (GLenum mode), (mode)) +GEN_THUNKS(glRenderbufferStorage, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height), (target, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageEXT, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height), (target, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleANGLE, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleAPPLE, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleCoverageNV, (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height), (target, coverageSamples, colorSamples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleEXT, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleIMG, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageMultisampleNV, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height), (target, samples, internalformat, width, height)) +GEN_THUNKS(glRenderbufferStorageOES, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height), (target, internalformat, width, height)) +GEN_THUNKS(glReplacementCodePointerSUN, (GLenum type, GLsizei stride, const void ** pointer), (type, stride, pointer)) +GEN_THUNKS(glReplacementCodeubSUN, (GLubyte code), (code)) +GEN_THUNKS(glReplacementCodeubvSUN, (const GLubyte * code), (code)) +GEN_THUNKS(glReplacementCodeuiColor3fVertex3fSUN, (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z), (rc, r, g, b, x, y, z)) +GEN_THUNKS(glReplacementCodeuiColor3fVertex3fvSUN, (const GLuint * rc, const GLfloat * c, const GLfloat * v), (rc, c, v)) +GEN_THUNKS(glReplacementCodeuiColor4fNormal3fVertex3fSUN, (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiColor4fNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (rc, c, n, v)) +GEN_THUNKS(glReplacementCodeuiColor4ubVertex3fSUN, (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z), (rc, r, g, b, a, x, y, z)) +GEN_THUNKS(glReplacementCodeuiColor4ubVertex3fvSUN, (const GLuint * rc, const GLubyte * c, const GLfloat * v), (rc, c, v)) +GEN_THUNKS(glReplacementCodeuiNormal3fVertex3fSUN, (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * n, const GLfloat * v), (rc, n, v)) +GEN_THUNKS(glReplacementCodeuiSUN, (GLuint code), (code)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN, (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, s, t, r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (rc, tc, c, n, v)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN, (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (rc, s, t, nx, ny, nz, x, y, z)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN, (const GLuint * rc, const GLfloat * tc, const GLfloat * n, const GLfloat * v), (rc, tc, n, v)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fVertex3fSUN, (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z), (rc, s, t, x, y, z)) +GEN_THUNKS(glReplacementCodeuiTexCoord2fVertex3fvSUN, (const GLuint * rc, const GLfloat * tc, const GLfloat * v), (rc, tc, v)) +GEN_THUNKS(glReplacementCodeuiVertex3fSUN, (GLuint rc, GLfloat x, GLfloat y, GLfloat z), (rc, x, y, z)) +GEN_THUNKS(glReplacementCodeuiVertex3fvSUN, (const GLuint * rc, const GLfloat * v), (rc, v)) +GEN_THUNKS(glReplacementCodeuivSUN, (const GLuint * code), (code)) +GEN_THUNKS(glReplacementCodeusSUN, (GLushort code), (code)) +GEN_THUNKS(glReplacementCodeusvSUN, (const GLushort * code), (code)) +GEN_THUNKS(glRequestResidentProgramsNV, (GLsizei n, const GLuint * programs), (n, programs)) +GEN_THUNKS(glResetHistogram, (GLenum target), (target)) +GEN_THUNKS(glResetHistogramEXT, (GLenum target), (target)) +GEN_THUNKS(glResetMinmax, (GLenum target), (target)) +GEN_THUNKS(glResetMinmaxEXT, (GLenum target), (target)) +GEN_THUNKS(glResizeBuffersMESA, (void), ()) +GEN_THUNKS(glResolveDepthValuesNV, (void), ()) +GEN_THUNKS(glResolveMultisampleFramebufferAPPLE, (void), ()) +GEN_THUNKS(glResumeTransformFeedback, (void), ()) +GEN_THUNKS(glResumeTransformFeedbackNV, (void), ()) +GEN_THUNKS(glRotated, (GLdouble angle, GLdouble x, GLdouble y, GLdouble z), (angle, x, y, z)) +GEN_THUNKS(glRotatef, (GLfloat angle, GLfloat x, GLfloat y, GLfloat z), (angle, x, y, z)) +GEN_THUNKS(glRotatex, (GLfixed angle, GLfixed x, GLfixed y, GLfixed z), (angle, x, y, z)) +GEN_THUNKS(glRotatexOES, (GLfixed angle, GLfixed x, GLfixed y, GLfixed z), (angle, x, y, z)) +GEN_THUNKS(glSampleCoverage, (GLfloat value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleCoverageARB, (GLfloat value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleCoveragex, (GLclampx value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleCoveragexOES, (GLclampx value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleMapATI, (GLuint dst, GLuint interp, GLenum swizzle), (dst, interp, swizzle)) +GEN_THUNKS(glSampleMaskEXT, (GLclampf value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleMaskIndexedNV, (GLuint index, GLbitfield mask), (index, mask)) +GEN_THUNKS(glSampleMaskSGIS, (GLclampf value, GLboolean invert), (value, invert)) +GEN_THUNKS(glSampleMaski, (GLuint maskNumber, GLbitfield mask), (maskNumber, mask)) +GEN_THUNKS(glSamplePatternEXT, (GLenum pattern), (pattern)) +GEN_THUNKS(glSamplePatternSGIS, (GLenum pattern), (pattern)) +GEN_THUNKS(glSamplerParameterIiv, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIivEXT, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIivOES, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIuiv, (GLuint sampler, GLenum pname, const GLuint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIuivEXT, (GLuint sampler, GLenum pname, const GLuint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterIuivOES, (GLuint sampler, GLenum pname, const GLuint * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterf, (GLuint sampler, GLenum pname, GLfloat param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameterfv, (GLuint sampler, GLenum pname, const GLfloat * param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameteri, (GLuint sampler, GLenum pname, GLint param), (sampler, pname, param)) +GEN_THUNKS(glSamplerParameteriv, (GLuint sampler, GLenum pname, const GLint * param), (sampler, pname, param)) +GEN_THUNKS(glScaled, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glScalef, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glScalex, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glScalexOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glScissor, (GLint x, GLint y, GLsizei width, GLsizei height), (x, y, width, height)) +GEN_THUNKS(glScissorArrayv, (GLuint first, GLsizei count, const GLint * v), (first, count, v)) +GEN_THUNKS(glScissorArrayvNV, (GLuint first, GLsizei count, const GLint * v), (first, count, v)) +GEN_THUNKS(glScissorIndexed, (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height), (index, left, bottom, width, height)) +GEN_THUNKS(glScissorIndexedNV, (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height), (index, left, bottom, width, height)) +GEN_THUNKS(glScissorIndexedv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glScissorIndexedvNV, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glSecondaryColor3b, (GLbyte red, GLbyte green, GLbyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3bEXT, (GLbyte red, GLbyte green, GLbyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3bv, (const GLbyte * v), (v)) +GEN_THUNKS(glSecondaryColor3bvEXT, (const GLbyte * v), (v)) +GEN_THUNKS(glSecondaryColor3d, (GLdouble red, GLdouble green, GLdouble blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3dEXT, (GLdouble red, GLdouble green, GLdouble blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glSecondaryColor3dvEXT, (const GLdouble * v), (v)) +GEN_THUNKS(glSecondaryColor3f, (GLfloat red, GLfloat green, GLfloat blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3fEXT, (GLfloat red, GLfloat green, GLfloat blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glSecondaryColor3fvEXT, (const GLfloat * v), (v)) +GEN_THUNKS(glSecondaryColor3hNV, (GLhalfNV red, GLhalfNV green, GLhalfNV blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glSecondaryColor3i, (GLint red, GLint green, GLint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3iEXT, (GLint red, GLint green, GLint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3iv, (const GLint * v), (v)) +GEN_THUNKS(glSecondaryColor3ivEXT, (const GLint * v), (v)) +GEN_THUNKS(glSecondaryColor3s, (GLshort red, GLshort green, GLshort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3sEXT, (GLshort red, GLshort green, GLshort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3sv, (const GLshort * v), (v)) +GEN_THUNKS(glSecondaryColor3svEXT, (const GLshort * v), (v)) +GEN_THUNKS(glSecondaryColor3ub, (GLubyte red, GLubyte green, GLubyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3ubEXT, (GLubyte red, GLubyte green, GLubyte blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3ubv, (const GLubyte * v), (v)) +GEN_THUNKS(glSecondaryColor3ubvEXT, (const GLubyte * v), (v)) +GEN_THUNKS(glSecondaryColor3ui, (GLuint red, GLuint green, GLuint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3uiEXT, (GLuint red, GLuint green, GLuint blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3uiv, (const GLuint * v), (v)) +GEN_THUNKS(glSecondaryColor3uivEXT, (const GLuint * v), (v)) +GEN_THUNKS(glSecondaryColor3us, (GLushort red, GLushort green, GLushort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3usEXT, (GLushort red, GLushort green, GLushort blue), (red, green, blue)) +GEN_THUNKS(glSecondaryColor3usv, (const GLushort * v), (v)) +GEN_THUNKS(glSecondaryColor3usvEXT, (const GLushort * v), (v)) +GEN_THUNKS(glSecondaryColorFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glSecondaryColorP3ui, (GLenum type, GLuint color), (type, color)) +GEN_THUNKS(glSecondaryColorP3uiv, (GLenum type, const GLuint * color), (type, color)) +GEN_THUNKS(glSecondaryColorPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glSecondaryColorPointerEXT, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glSecondaryColorPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glSelectBuffer, (GLsizei size, GLuint * buffer), (size, buffer)) +GEN_THUNKS(glSelectPerfMonitorCountersAMD, (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint * counterList), (monitor, enable, group, numCounters, counterList)) +GEN_THUNKS(glSeparableFilter2D, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column), (target, internalformat, width, height, format, type, row, column)) +GEN_THUNKS(glSeparableFilter2DEXT, (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * row, const void * column), (target, internalformat, width, height, format, type, row, column)) +GEN_THUNKS(glSetFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS(glSetFenceNV, (GLuint fence, GLenum condition), (fence, condition)) +GEN_THUNKS(glSetFragmentShaderConstantATI, (GLuint dst, const GLfloat * value), (dst, value)) +GEN_THUNKS(glSetInvariantEXT, (GLuint id, GLenum type, const void * addr), (id, type, addr)) +GEN_THUNKS(glSetLocalConstantEXT, (GLuint id, GLenum type, const void * addr), (id, type, addr)) +GEN_THUNKS(glSetMultisamplefvAMD, (GLenum pname, GLuint index, const GLfloat * val), (pname, index, val)) +GEN_THUNKS(glShadeModel, (GLenum mode), (mode)) +GEN_THUNKS(glShaderBinary, (GLsizei count, const GLuint * shaders, GLenum binaryformat, const void * binary, GLsizei length), (count, shaders, binaryformat, binary, length)) +GEN_THUNKS(glShaderOp1EXT, (GLenum op, GLuint res, GLuint arg1), (op, res, arg1)) +GEN_THUNKS(glShaderOp2EXT, (GLenum op, GLuint res, GLuint arg1, GLuint arg2), (op, res, arg1, arg2)) +GEN_THUNKS(glShaderOp3EXT, (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3), (op, res, arg1, arg2, arg3)) +GEN_THUNKS(glShaderSource, (GLuint shader, GLsizei count, const GLchar *const* string, const GLint * length), (shader, count, string, length)) +GEN_THUNKS(glShaderSourceARB, (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint * length), ((uintptr_t)shaderObj, count, string, length)) +GEN_THUNKS(glShaderStorageBlockBinding, (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding), (program, storageBlockIndex, storageBlockBinding)) +GEN_THUNKS(glSharpenTexFuncSGIS, (GLenum target, GLsizei n, const GLfloat * points), (target, n, points)) +GEN_THUNKS(glSpriteParameterfSGIX, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glSpriteParameterfvSGIX, (GLenum pname, const GLfloat * params), (pname, params)) +GEN_THUNKS(glSpriteParameteriSGIX, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glSpriteParameterivSGIX, (GLenum pname, const GLint * params), (pname, params)) +GEN_THUNKS(glStartInstrumentsSGIX, (void), ()) +GEN_THUNKS(glStartTilingQCOM, (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask), (x, y, width, height, preserveMask)) +GEN_THUNKS(glStateCaptureNV, (GLuint state, GLenum mode), (state, mode)) +GEN_THUNKS(glStencilClearTagEXT, (GLsizei stencilTagBits, GLuint stencilClearTag), (stencilTagBits, stencilClearTag)) +GEN_THUNKS(glStencilFillPathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, fillMode, mask, transformType, transformValues)) +GEN_THUNKS(glStencilFillPathNV, (GLuint path, GLenum fillMode, GLuint mask), (path, fillMode, mask)) +GEN_THUNKS(glStencilFunc, (GLenum func, GLint ref, GLuint mask), (func, ref, mask)) +GEN_THUNKS(glStencilFuncSeparate, (GLenum face, GLenum func, GLint ref, GLuint mask), (face, func, ref, mask)) +GEN_THUNKS(glStencilFuncSeparateATI, (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask), (frontfunc, backfunc, ref, mask)) +GEN_THUNKS(glStencilMask, (GLuint mask), (mask)) +GEN_THUNKS(glStencilMaskSeparate, (GLenum face, GLuint mask), (face, mask)) +GEN_THUNKS(glStencilOp, (GLenum fail, GLenum zfail, GLenum zpass), (fail, zfail, zpass)) +GEN_THUNKS(glStencilOpSeparate, (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass), (face, sfail, dpfail, dppass)) +GEN_THUNKS(glStencilOpSeparateATI, (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass), (face, sfail, dpfail, dppass)) +GEN_THUNKS(glStencilOpValueAMD, (GLenum face, GLuint value), (face, value)) +GEN_THUNKS(glStencilStrokePathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, reference, mask, transformType, transformValues)) +GEN_THUNKS(glStencilStrokePathNV, (GLuint path, GLint reference, GLuint mask), (path, reference, mask)) +GEN_THUNKS(glStencilThenCoverFillPathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, fillMode, mask, coverMode, transformType, transformValues)) +GEN_THUNKS(glStencilThenCoverFillPathNV, (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode), (path, fillMode, mask, coverMode)) +GEN_THUNKS(glStencilThenCoverStrokePathInstancedNV, (GLsizei numPaths, GLenum pathNameType, const void * paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat * transformValues), (numPaths, pathNameType, paths, pathBase, reference, mask, coverMode, transformType, transformValues)) +GEN_THUNKS(glStencilThenCoverStrokePathNV, (GLuint path, GLint reference, GLuint mask, GLenum coverMode), (path, reference, mask, coverMode)) +GEN_THUNKS(glStopInstrumentsSGIX, (GLint marker), (marker)) +GEN_THUNKS(glStringMarkerGREMEDY, (GLsizei len, const void * string), (len, string)) +GEN_THUNKS(glSubpixelPrecisionBiasNV, (GLuint xbits, GLuint ybits), (xbits, ybits)) +GEN_THUNKS(glSwizzleEXT, (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW), (res, in, outX, outY, outZ, outW)) +GEN_THUNKS(glSyncTextureINTEL, (GLuint texture), (texture)) +GEN_THUNKS(glTagSampleBufferSGIX, (void), ()) +GEN_THUNKS(glTangent3bEXT, (GLbyte tx, GLbyte ty, GLbyte tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3bvEXT, (const GLbyte * v), (v)) +GEN_THUNKS(glTangent3dEXT, (GLdouble tx, GLdouble ty, GLdouble tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3dvEXT, (const GLdouble * v), (v)) +GEN_THUNKS(glTangent3fEXT, (GLfloat tx, GLfloat ty, GLfloat tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3fvEXT, (const GLfloat * v), (v)) +GEN_THUNKS(glTangent3iEXT, (GLint tx, GLint ty, GLint tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3ivEXT, (const GLint * v), (v)) +GEN_THUNKS(glTangent3sEXT, (GLshort tx, GLshort ty, GLshort tz), (tx, ty, tz)) +GEN_THUNKS(glTangent3svEXT, (const GLshort * v), (v)) +GEN_THUNKS(glTangentPointerEXT, (GLenum type, GLsizei stride, const void * pointer), (type, stride, pointer)) +GEN_THUNKS(glTbufferMask3DFX, (GLuint mask), (mask)) +GEN_THUNKS(glTessellationFactorAMD, (GLfloat factor), (factor)) +GEN_THUNKS(glTessellationModeAMD, (GLenum mode), (mode)) +GEN_THUNKS_RET(GLboolean, glTestFenceAPPLE, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glTestFenceNV, (GLuint fence), (fence)) +GEN_THUNKS_RET(GLboolean, glTestObjectAPPLE, (GLenum object, GLuint name), (object, name)) +GEN_THUNKS(glTexBuffer, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferARB, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferEXT, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferOES, (GLenum target, GLenum internalformat, GLuint buffer), (target, internalformat, buffer)) +GEN_THUNKS(glTexBufferRange, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTexBufferRangeEXT, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTexBufferRangeOES, (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTexBumpParameterfvATI, (GLenum pname, const GLfloat * param), (pname, param)) +GEN_THUNKS(glTexBumpParameterivATI, (GLenum pname, const GLint * param), (pname, param)) +GEN_THUNKS(glTexCoord1bOES, (GLbyte s), (s)) +GEN_THUNKS(glTexCoord1bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord1d, (GLdouble s), (s)) +GEN_THUNKS(glTexCoord1dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord1f, (GLfloat s), (s)) +GEN_THUNKS(glTexCoord1fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord1hNV, (GLhalfNV s), (s)) +GEN_THUNKS(glTexCoord1hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord1i, (GLint s), (s)) +GEN_THUNKS(glTexCoord1iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord1s, (GLshort s), (s)) +GEN_THUNKS(glTexCoord1sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord1xOES, (GLfixed s), (s)) +GEN_THUNKS(glTexCoord1xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoord2bOES, (GLbyte s, GLbyte t), (s, t)) +GEN_THUNKS(glTexCoord2bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord2d, (GLdouble s, GLdouble t), (s, t)) +GEN_THUNKS(glTexCoord2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord2f, (GLfloat s, GLfloat t), (s, t)) +GEN_THUNKS(glTexCoord2fColor3fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z), (s, t, r, g, b, x, y, z)) +GEN_THUNKS(glTexCoord2fColor3fVertex3fvSUN, (const GLfloat * tc, const GLfloat * c, const GLfloat * v), (tc, c, v)) +GEN_THUNKS(glTexCoord2fColor4fNormal3fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (s, t, r, g, b, a, nx, ny, nz, x, y, z)) +GEN_THUNKS(glTexCoord2fColor4fNormal3fVertex3fvSUN, (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (tc, c, n, v)) +GEN_THUNKS(glTexCoord2fColor4ubVertex3fSUN, (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z), (s, t, r, g, b, a, x, y, z)) +GEN_THUNKS(glTexCoord2fColor4ubVertex3fvSUN, (const GLfloat * tc, const GLubyte * c, const GLfloat * v), (tc, c, v)) +GEN_THUNKS(glTexCoord2fNormal3fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z), (s, t, nx, ny, nz, x, y, z)) +GEN_THUNKS(glTexCoord2fNormal3fVertex3fvSUN, (const GLfloat * tc, const GLfloat * n, const GLfloat * v), (tc, n, v)) +GEN_THUNKS(glTexCoord2fVertex3fSUN, (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z), (s, t, x, y, z)) +GEN_THUNKS(glTexCoord2fVertex3fvSUN, (const GLfloat * tc, const GLfloat * v), (tc, v)) +GEN_THUNKS(glTexCoord2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord2hNV, (GLhalfNV s, GLhalfNV t), (s, t)) +GEN_THUNKS(glTexCoord2hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord2i, (GLint s, GLint t), (s, t)) +GEN_THUNKS(glTexCoord2iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord2s, (GLshort s, GLshort t), (s, t)) +GEN_THUNKS(glTexCoord2sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord2xOES, (GLfixed s, GLfixed t), (s, t)) +GEN_THUNKS(glTexCoord2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoord3bOES, (GLbyte s, GLbyte t, GLbyte r), (s, t, r)) +GEN_THUNKS(glTexCoord3bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord3d, (GLdouble s, GLdouble t, GLdouble r), (s, t, r)) +GEN_THUNKS(glTexCoord3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord3f, (GLfloat s, GLfloat t, GLfloat r), (s, t, r)) +GEN_THUNKS(glTexCoord3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord3hNV, (GLhalfNV s, GLhalfNV t, GLhalfNV r), (s, t, r)) +GEN_THUNKS(glTexCoord3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord3i, (GLint s, GLint t, GLint r), (s, t, r)) +GEN_THUNKS(glTexCoord3iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord3s, (GLshort s, GLshort t, GLshort r), (s, t, r)) +GEN_THUNKS(glTexCoord3sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord3xOES, (GLfixed s, GLfixed t, GLfixed r), (s, t, r)) +GEN_THUNKS(glTexCoord3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoord4bOES, (GLbyte s, GLbyte t, GLbyte r, GLbyte q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glTexCoord4d, (GLdouble s, GLdouble t, GLdouble r, GLdouble q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glTexCoord4f, (GLfloat s, GLfloat t, GLfloat r, GLfloat q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4fColor4fNormal3fVertex4fSUN, (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (s, t, p, q, r, g, b, a, nx, ny, nz, x, y, z, w)) +GEN_THUNKS(glTexCoord4fColor4fNormal3fVertex4fvSUN, (const GLfloat * tc, const GLfloat * c, const GLfloat * n, const GLfloat * v), (tc, c, n, v)) +GEN_THUNKS(glTexCoord4fVertex4fSUN, (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (s, t, p, q, x, y, z, w)) +GEN_THUNKS(glTexCoord4fVertex4fvSUN, (const GLfloat * tc, const GLfloat * v), (tc, v)) +GEN_THUNKS(glTexCoord4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glTexCoord4hNV, (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glTexCoord4i, (GLint s, GLint t, GLint r, GLint q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4iv, (const GLint * v), (v)) +GEN_THUNKS(glTexCoord4s, (GLshort s, GLshort t, GLshort r, GLshort q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4sv, (const GLshort * v), (v)) +GEN_THUNKS(glTexCoord4xOES, (GLfixed s, GLfixed t, GLfixed r, GLfixed q), (s, t, r, q)) +GEN_THUNKS(glTexCoord4xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glTexCoordFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glTexCoordP1ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP1uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordP2ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP2uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordP3ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP3uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordP4ui, (GLenum type, GLuint coords), (type, coords)) +GEN_THUNKS(glTexCoordP4uiv, (GLenum type, const GLuint * coords), (type, coords)) +GEN_THUNKS(glTexCoordPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glTexCoordPointerEXT, (GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer), (size, type, stride, count, pointer)) +GEN_THUNKS(glTexCoordPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glTexCoordPointervINTEL, (GLint size, GLenum type, const void ** pointer), (size, type, pointer)) +GEN_THUNKS(glTexEnvf, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glTexEnvfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glTexEnvi, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glTexEnviv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexEnvx, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexEnvxOES, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexEnvxv, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexEnvxvOES, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexFilterFuncSGIS, (GLenum target, GLenum filter, GLsizei n, const GLfloat * weights), (target, filter, n, weights)) +GEN_THUNKS(glTexGend, (GLenum coord, GLenum pname, GLdouble param), (coord, pname, param)) +GEN_THUNKS(glTexGendv, (GLenum coord, GLenum pname, const GLdouble * params), (coord, pname, params)) +GEN_THUNKS(glTexGenf, (GLenum coord, GLenum pname, GLfloat param), (coord, pname, param)) +GEN_THUNKS(glTexGenfOES, (GLenum coord, GLenum pname, GLfloat param), (coord, pname, param)) +GEN_THUNKS(glTexGenfv, (GLenum coord, GLenum pname, const GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glTexGenfvOES, (GLenum coord, GLenum pname, const GLfloat * params), (coord, pname, params)) +GEN_THUNKS(glTexGeni, (GLenum coord, GLenum pname, GLint param), (coord, pname, param)) +GEN_THUNKS(glTexGeniOES, (GLenum coord, GLenum pname, GLint param), (coord, pname, param)) +GEN_THUNKS(glTexGeniv, (GLenum coord, GLenum pname, const GLint * params), (coord, pname, params)) +GEN_THUNKS(glTexGenivOES, (GLenum coord, GLenum pname, const GLint * params), (coord, pname, params)) +GEN_THUNKS(glTexGenxOES, (GLenum coord, GLenum pname, GLfixed param), (coord, pname, param)) +GEN_THUNKS(glTexGenxvOES, (GLenum coord, GLenum pname, const GLfixed * params), (coord, pname, params)) +GEN_THUNKS(glTexImage1D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, border, format, type, pixels)) +GEN_THUNKS(glTexImage2D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, border, format, type, pixels)) +GEN_THUNKS(glTexImage2DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTexImage2DMultisampleCoverageNV, (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations), (target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations)) +GEN_THUNKS(glTexImage3D, (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTexImage3DEXT, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTexImage3DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTexImage3DMultisampleCoverageNV, (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations), (target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations)) +GEN_THUNKS(glTexImage3DOES, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTexImage4DSGIS, (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void * pixels), (target, level, internalformat, width, height, depth, size4d, border, format, type, pixels)) +GEN_THUNKS(glTexPageCommitmentARB, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit), (target, level, xoffset, yoffset, zoffset, width, height, depth, commit)) +GEN_THUNKS(glTexPageCommitmentEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit), (target, level, xoffset, yoffset, zoffset, width, height, depth, commit)) +GEN_THUNKS(glTexParameterIiv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIivEXT, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIivOES, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIuiv, (GLenum target, GLenum pname, const GLuint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIuivEXT, (GLenum target, GLenum pname, const GLuint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterIuivOES, (GLenum target, GLenum pname, const GLuint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterf, (GLenum target, GLenum pname, GLfloat param), (target, pname, param)) +GEN_THUNKS(glTexParameterfv, (GLenum target, GLenum pname, const GLfloat * params), (target, pname, params)) +GEN_THUNKS(glTexParameteri, (GLenum target, GLenum pname, GLint param), (target, pname, param)) +GEN_THUNKS(glTexParameteriv, (GLenum target, GLenum pname, const GLint * params), (target, pname, params)) +GEN_THUNKS(glTexParameterx, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexParameterxOES, (GLenum target, GLenum pname, GLfixed param), (target, pname, param)) +GEN_THUNKS(glTexParameterxv, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexParameterxvOES, (GLenum target, GLenum pname, const GLfixed * params), (target, pname, params)) +GEN_THUNKS(glTexRenderbufferNV, (GLenum target, GLuint renderbuffer), (target, renderbuffer)) +GEN_THUNKS(glTexStorage1D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width), (target, levels, internalformat, width)) +GEN_THUNKS(glTexStorage1DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width), (target, levels, internalformat, width)) +GEN_THUNKS(glTexStorage2D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (target, levels, internalformat, width, height)) +GEN_THUNKS(glTexStorage2DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (target, levels, internalformat, width, height)) +GEN_THUNKS(glTexStorage2DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTexStorage3D, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (target, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTexStorage3DEXT, (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (target, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTexStorage3DMultisample, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTexStorage3DMultisampleOES, (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTexStorageSparseAMD, (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags), (target, internalFormat, width, height, depth, layers, flags)) +GEN_THUNKS(glTexSubImage1D, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTexSubImage1DEXT, (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTexSubImage2D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTexSubImage2DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTexSubImage3D, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTexSubImage3DEXT, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTexSubImage3DOES, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTexSubImage4DSGIS, (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void * pixels), (target, level, xoffset, yoffset, zoffset, woffset, width, height, depth, size4d, format, type, pixels)) +GEN_THUNKS(glTextureBarrier, (void), ()) +GEN_THUNKS(glTextureBarrierNV, (void), ()) +GEN_THUNKS(glTextureBuffer, (GLuint texture, GLenum internalformat, GLuint buffer), (texture, internalformat, buffer)) +GEN_THUNKS(glTextureBufferEXT, (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer), (texture, target, internalformat, buffer)) +GEN_THUNKS(glTextureBufferRange, (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (texture, internalformat, buffer, offset, size)) +GEN_THUNKS(glTextureBufferRangeEXT, (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size), (texture, target, internalformat, buffer, offset, size)) +GEN_THUNKS(glTextureColorMaskSGIS, (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha), (red, green, blue, alpha)) +GEN_THUNKS(glTextureImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void * pixels), (texture, target, level, internalformat, width, border, format, type, pixels)) +GEN_THUNKS(glTextureImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void * pixels), (texture, target, level, internalformat, width, height, border, format, type, pixels)) +GEN_THUNKS(glTextureImage2DMultisampleCoverageNV, (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations), (texture, target, coverageSamples, colorSamples, internalFormat, width, height, fixedSampleLocations)) +GEN_THUNKS(glTextureImage2DMultisampleNV, (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations), (texture, target, samples, internalFormat, width, height, fixedSampleLocations)) +GEN_THUNKS(glTextureImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void * pixels), (texture, target, level, internalformat, width, height, depth, border, format, type, pixels)) +GEN_THUNKS(glTextureImage3DMultisampleCoverageNV, (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations), (texture, target, coverageSamples, colorSamples, internalFormat, width, height, depth, fixedSampleLocations)) +GEN_THUNKS(glTextureImage3DMultisampleNV, (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations), (texture, target, samples, internalFormat, width, height, depth, fixedSampleLocations)) +GEN_THUNKS(glTextureLightEXT, (GLenum pname), (pname)) +GEN_THUNKS(glTextureMaterialEXT, (GLenum face, GLenum mode), (face, mode)) +GEN_THUNKS(glTextureNormalEXT, (GLenum mode), (mode)) +GEN_THUNKS(glTexturePageCommitmentEXT, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit), (texture, level, xoffset, yoffset, zoffset, width, height, depth, commit)) +GEN_THUNKS(glTextureParameterIiv, (GLuint texture, GLenum pname, const GLint * params), (texture, pname, params)) +GEN_THUNKS(glTextureParameterIivEXT, (GLuint texture, GLenum target, GLenum pname, const GLint * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureParameterIuiv, (GLuint texture, GLenum pname, const GLuint * params), (texture, pname, params)) +GEN_THUNKS(glTextureParameterIuivEXT, (GLuint texture, GLenum target, GLenum pname, const GLuint * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureParameterf, (GLuint texture, GLenum pname, GLfloat param), (texture, pname, param)) +GEN_THUNKS(glTextureParameterfEXT, (GLuint texture, GLenum target, GLenum pname, GLfloat param), (texture, target, pname, param)) +GEN_THUNKS(glTextureParameterfv, (GLuint texture, GLenum pname, const GLfloat * param), (texture, pname, param)) +GEN_THUNKS(glTextureParameterfvEXT, (GLuint texture, GLenum target, GLenum pname, const GLfloat * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureParameteri, (GLuint texture, GLenum pname, GLint param), (texture, pname, param)) +GEN_THUNKS(glTextureParameteriEXT, (GLuint texture, GLenum target, GLenum pname, GLint param), (texture, target, pname, param)) +GEN_THUNKS(glTextureParameteriv, (GLuint texture, GLenum pname, const GLint * param), (texture, pname, param)) +GEN_THUNKS(glTextureParameterivEXT, (GLuint texture, GLenum target, GLenum pname, const GLint * params), (texture, target, pname, params)) +GEN_THUNKS(glTextureRangeAPPLE, (GLenum target, GLsizei length, const void * pointer), (target, length, pointer)) +GEN_THUNKS(glTextureRenderbufferEXT, (GLuint texture, GLenum target, GLuint renderbuffer), (texture, target, renderbuffer)) +GEN_THUNKS(glTextureStorage1D, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width), (texture, levels, internalformat, width)) +GEN_THUNKS(glTextureStorage1DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width), (texture, target, levels, internalformat, width)) +GEN_THUNKS(glTextureStorage2D, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (texture, levels, internalformat, width, height)) +GEN_THUNKS(glTextureStorage2DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height), (texture, target, levels, internalformat, width, height)) +GEN_THUNKS(glTextureStorage2DMultisample, (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (texture, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTextureStorage2DMultisampleEXT, (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations), (texture, target, samples, internalformat, width, height, fixedsamplelocations)) +GEN_THUNKS(glTextureStorage3D, (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (texture, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTextureStorage3DEXT, (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth), (texture, target, levels, internalformat, width, height, depth)) +GEN_THUNKS(glTextureStorage3DMultisample, (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (texture, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTextureStorage3DMultisampleEXT, (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations), (texture, target, samples, internalformat, width, height, depth, fixedsamplelocations)) +GEN_THUNKS(glTextureStorageSparseAMD, (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags), (texture, target, internalFormat, width, height, depth, layers, flags)) +GEN_THUNKS(glTextureSubImage1D, (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (texture, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTextureSubImage1DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void * pixels), (texture, target, level, xoffset, width, format, type, pixels)) +GEN_THUNKS(glTextureSubImage2D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (texture, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTextureSubImage2DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void * pixels), (texture, target, level, xoffset, yoffset, width, height, format, type, pixels)) +GEN_THUNKS(glTextureSubImage3D, (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTextureSubImage3DEXT, (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void * pixels), (texture, target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels)) +GEN_THUNKS(glTextureView, (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers), (texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)) +GEN_THUNKS(glTextureViewEXT, (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers), (texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)) +GEN_THUNKS(glTextureViewOES, (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers), (texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)) +GEN_THUNKS(glTrackMatrixNV, (GLenum target, GLuint address, GLenum matrix, GLenum transform), (target, address, matrix, transform)) +GEN_THUNKS(glTransformFeedbackAttribsNV, (GLsizei count, const GLint * attribs, GLenum bufferMode), (count, attribs, bufferMode)) +GEN_THUNKS(glTransformFeedbackBufferBase, (GLuint xfb, GLuint index, GLuint buffer), (xfb, index, buffer)) +GEN_THUNKS(glTransformFeedbackBufferRange, (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size), (xfb, index, buffer, offset, size)) +GEN_THUNKS(glTransformFeedbackStreamAttribsNV, (GLsizei count, const GLint * attribs, GLsizei nbuffers, const GLint * bufstreams, GLenum bufferMode), (count, attribs, nbuffers, bufstreams, bufferMode)) +GEN_THUNKS(glTransformFeedbackVaryings, (GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode), (program, count, varyings, bufferMode)) +GEN_THUNKS(glTransformFeedbackVaryingsEXT, (GLuint program, GLsizei count, const GLchar *const* varyings, GLenum bufferMode), (program, count, varyings, bufferMode)) +GEN_THUNKS(glTransformFeedbackVaryingsNV, (GLuint program, GLsizei count, const GLint * locations, GLenum bufferMode), (program, count, locations, bufferMode)) +GEN_THUNKS(glTransformPathNV, (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat * transformValues), (resultPath, srcPath, transformType, transformValues)) +GEN_THUNKS(glTranslated, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glTranslatef, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glTranslatex, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glTranslatexOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glUniform1d, (GLint location, GLdouble x), (location, x)) +GEN_THUNKS(glUniform1dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform1f, (GLint location, GLfloat v0), (location, v0)) +GEN_THUNKS(glUniform1fARB, (GLint location, GLfloat v0), (location, v0)) +GEN_THUNKS(glUniform1fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform1fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform1i, (GLint location, GLint v0), (location, v0)) +GEN_THUNKS(glUniform1i64ARB, (GLint location, GLint64 x), (location, x)) +GEN_THUNKS(glUniform1i64NV, (GLint location, GLint64EXT x), (location, x)) +GEN_THUNKS(glUniform1i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform1i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform1iARB, (GLint location, GLint v0), (location, v0)) +GEN_THUNKS(glUniform1iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform1ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform1ui, (GLint location, GLuint v0), (location, v0)) +GEN_THUNKS(glUniform1ui64ARB, (GLint location, GLuint64 x), (location, x)) +GEN_THUNKS(glUniform1ui64NV, (GLint location, GLuint64EXT x), (location, x)) +GEN_THUNKS(glUniform1ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform1ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform1uiEXT, (GLint location, GLuint v0), (location, v0)) +GEN_THUNKS(glUniform1uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform1uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform2d, (GLint location, GLdouble x, GLdouble y), (location, x, y)) +GEN_THUNKS(glUniform2dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform2f, (GLint location, GLfloat v0, GLfloat v1), (location, v0, v1)) +GEN_THUNKS(glUniform2fARB, (GLint location, GLfloat v0, GLfloat v1), (location, v0, v1)) +GEN_THUNKS(glUniform2fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform2fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform2i, (GLint location, GLint v0, GLint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2i64ARB, (GLint location, GLint64 x, GLint64 y), (location, x, y)) +GEN_THUNKS(glUniform2i64NV, (GLint location, GLint64EXT x, GLint64EXT y), (location, x, y)) +GEN_THUNKS(glUniform2i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform2i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform2iARB, (GLint location, GLint v0, GLint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform2ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform2ui, (GLint location, GLuint v0, GLuint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2ui64ARB, (GLint location, GLuint64 x, GLuint64 y), (location, x, y)) +GEN_THUNKS(glUniform2ui64NV, (GLint location, GLuint64EXT x, GLuint64EXT y), (location, x, y)) +GEN_THUNKS(glUniform2ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform2ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform2uiEXT, (GLint location, GLuint v0, GLuint v1), (location, v0, v1)) +GEN_THUNKS(glUniform2uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform2uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform3d, (GLint location, GLdouble x, GLdouble y, GLdouble z), (location, x, y, z)) +GEN_THUNKS(glUniform3dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform3f, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3fARB, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform3fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform3i, (GLint location, GLint v0, GLint v1, GLint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3i64ARB, (GLint location, GLint64 x, GLint64 y, GLint64 z), (location, x, y, z)) +GEN_THUNKS(glUniform3i64NV, (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z), (location, x, y, z)) +GEN_THUNKS(glUniform3i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform3i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform3iARB, (GLint location, GLint v0, GLint v1, GLint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform3ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform3ui, (GLint location, GLuint v0, GLuint v1, GLuint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3ui64ARB, (GLint location, GLuint64 x, GLuint64 y, GLuint64 z), (location, x, y, z)) +GEN_THUNKS(glUniform3ui64NV, (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z), (location, x, y, z)) +GEN_THUNKS(glUniform3ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform3ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform3uiEXT, (GLint location, GLuint v0, GLuint v1, GLuint v2), (location, v0, v1, v2)) +GEN_THUNKS(glUniform3uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform3uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform4d, (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4dv, (GLint location, GLsizei count, const GLdouble * value), (location, count, value)) +GEN_THUNKS(glUniform4f, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4fARB, (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4fv, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform4fvARB, (GLint location, GLsizei count, const GLfloat * value), (location, count, value)) +GEN_THUNKS(glUniform4i, (GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4i64ARB, (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4i64NV, (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4i64vARB, (GLint location, GLsizei count, const GLint64 * value), (location, count, value)) +GEN_THUNKS(glUniform4i64vNV, (GLint location, GLsizei count, const GLint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform4iARB, (GLint location, GLint v0, GLint v1, GLint v2, GLint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4iv, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform4ivARB, (GLint location, GLsizei count, const GLint * value), (location, count, value)) +GEN_THUNKS(glUniform4ui, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4ui64ARB, (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4ui64NV, (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w), (location, x, y, z, w)) +GEN_THUNKS(glUniform4ui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniform4ui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUniform4uiEXT, (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3), (location, v0, v1, v2, v3)) +GEN_THUNKS(glUniform4uiv, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniform4uivEXT, (GLint location, GLsizei count, const GLuint * value), (location, count, value)) +GEN_THUNKS(glUniformBlockBinding, (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding), (program, uniformBlockIndex, uniformBlockBinding)) +GEN_THUNKS(glUniformBufferEXT, (GLuint program, GLint location, GLuint buffer), (program, location, buffer)) +GEN_THUNKS(glUniformHandleui64ARB, (GLint location, GLuint64 value), (location, value)) +GEN_THUNKS(glUniformHandleui64NV, (GLint location, GLuint64 value), (location, value)) +GEN_THUNKS(glUniformHandleui64vARB, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniformHandleui64vNV, (GLint location, GLsizei count, const GLuint64 * value), (location, count, value)) +GEN_THUNKS(glUniformMatrix2dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2fvARB, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x3dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x3fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x4dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix2x4fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3fvARB, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x2dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x2fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x4dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix3x4fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4fvARB, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x2dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x2fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x2fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x3dv, (GLint location, GLsizei count, GLboolean transpose, const GLdouble * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x3fv, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformMatrix4x3fvNV, (GLint location, GLsizei count, GLboolean transpose, const GLfloat * value), (location, count, transpose, value)) +GEN_THUNKS(glUniformSubroutinesuiv, (GLenum shadertype, GLsizei count, const GLuint * indices), (shadertype, count, indices)) +GEN_THUNKS(glUniformui64NV, (GLint location, GLuint64EXT value), (location, value)) +GEN_THUNKS(glUniformui64vNV, (GLint location, GLsizei count, const GLuint64EXT * value), (location, count, value)) +GEN_THUNKS(glUnlockArraysEXT, (void), ()) +GEN_THUNKS_RET(GLboolean, glUnmapBuffer, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glUnmapBufferARB, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glUnmapBufferOES, (GLenum target), (target)) +GEN_THUNKS_RET(GLboolean, glUnmapNamedBuffer, (GLuint buffer), (buffer)) +GEN_THUNKS_RET(GLboolean, glUnmapNamedBufferEXT, (GLuint buffer), (buffer)) +GEN_THUNKS(glUnmapObjectBufferATI, (GLuint buffer), (buffer)) +GEN_THUNKS(glUnmapTexture2DINTEL, (GLuint texture, GLint level), (texture, level)) +GEN_THUNKS(glUpdateObjectBufferATI, (GLuint buffer, GLuint offset, GLsizei size, const void * pointer, GLenum preserve), (buffer, offset, size, pointer, preserve)) +GEN_THUNKS(glUseProgram, (GLuint program), (program)) +GEN_THUNKS(glUseProgramObjectARB, (GLhandleARB programObj), ((uintptr_t)programObj)) +GEN_THUNKS(glUseProgramStages, (GLuint pipeline, GLbitfield stages, GLuint program), (pipeline, stages, program)) +GEN_THUNKS(glUseProgramStagesEXT, (GLuint pipeline, GLbitfield stages, GLuint program), (pipeline, stages, program)) +GEN_THUNKS(glUseShaderProgramEXT, (GLenum type, GLuint program), (type, program)) +GEN_THUNKS(glVDPAUFiniNV, (void), ()) +GEN_THUNKS(glVDPAUGetSurfaceivNV, (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei * length, GLint * values), (surface, pname, bufSize, length, values)) +GEN_THUNKS(glVDPAUInitNV, (const void * vdpDevice, const void * getProcAddress), (vdpDevice, getProcAddress)) +GEN_THUNKS_RET(GLboolean, glVDPAUIsSurfaceNV, (GLvdpauSurfaceNV surface), (surface)) +GEN_THUNKS(glVDPAUMapSurfacesNV, (GLsizei numSurfaces, const GLvdpauSurfaceNV * surfaces), (numSurfaces, surfaces)) +GEN_THUNKS_RET(GLvdpauSurfaceNV, glVDPAURegisterOutputSurfaceNV, (const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames), (vdpSurface, target, numTextureNames, textureNames)) +GEN_THUNKS_RET(GLvdpauSurfaceNV, glVDPAURegisterVideoSurfaceNV, (const void * vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint * textureNames), (vdpSurface, target, numTextureNames, textureNames)) +GEN_THUNKS(glVDPAUSurfaceAccessNV, (GLvdpauSurfaceNV surface, GLenum access), (surface, access)) +GEN_THUNKS(glVDPAUUnmapSurfacesNV, (GLsizei numSurface, const GLvdpauSurfaceNV * surfaces), (numSurface, surfaces)) +GEN_THUNKS(glVDPAUUnregisterSurfaceNV, (GLvdpauSurfaceNV surface), (surface)) +GEN_THUNKS(glValidateProgram, (GLuint program), (program)) +GEN_THUNKS(glValidateProgramARB, (GLhandleARB programObj), ((uintptr_t)programObj)) +GEN_THUNKS(glValidateProgramPipeline, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glValidateProgramPipelineEXT, (GLuint pipeline), (pipeline)) +GEN_THUNKS(glVariantArrayObjectATI, (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset), (id, type, stride, buffer, offset)) +GEN_THUNKS(glVariantPointerEXT, (GLuint id, GLenum type, GLuint stride, const void * addr), (id, type, stride, addr)) +GEN_THUNKS(glVariantbvEXT, (GLuint id, const GLbyte * addr), (id, addr)) +GEN_THUNKS(glVariantdvEXT, (GLuint id, const GLdouble * addr), (id, addr)) +GEN_THUNKS(glVariantfvEXT, (GLuint id, const GLfloat * addr), (id, addr)) +GEN_THUNKS(glVariantivEXT, (GLuint id, const GLint * addr), (id, addr)) +GEN_THUNKS(glVariantsvEXT, (GLuint id, const GLshort * addr), (id, addr)) +GEN_THUNKS(glVariantubvEXT, (GLuint id, const GLubyte * addr), (id, addr)) +GEN_THUNKS(glVariantuivEXT, (GLuint id, const GLuint * addr), (id, addr)) +GEN_THUNKS(glVariantusvEXT, (GLuint id, const GLushort * addr), (id, addr)) +GEN_THUNKS(glVertex2bOES, (GLbyte x, GLbyte y), (x, y)) +GEN_THUNKS(glVertex2bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glVertex2d, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glVertex2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glVertex2f, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glVertex2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glVertex2hNV, (GLhalfNV x, GLhalfNV y), (x, y)) +GEN_THUNKS(glVertex2hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glVertex2i, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glVertex2iv, (const GLint * v), (v)) +GEN_THUNKS(glVertex2s, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glVertex2sv, (const GLshort * v), (v)) +GEN_THUNKS(glVertex2xOES, (GLfixed x), (x)) +GEN_THUNKS(glVertex2xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glVertex3bOES, (GLbyte x, GLbyte y, GLbyte z), (x, y, z)) +GEN_THUNKS(glVertex3bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glVertex3d, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glVertex3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glVertex3f, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glVertex3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glVertex3hNV, (GLhalfNV x, GLhalfNV y, GLhalfNV z), (x, y, z)) +GEN_THUNKS(glVertex3hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glVertex3i, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glVertex3iv, (const GLint * v), (v)) +GEN_THUNKS(glVertex3s, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glVertex3sv, (const GLshort * v), (v)) +GEN_THUNKS(glVertex3xOES, (GLfixed x, GLfixed y), (x, y)) +GEN_THUNKS(glVertex3xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glVertex4bOES, (GLbyte x, GLbyte y, GLbyte z, GLbyte w), (x, y, z, w)) +GEN_THUNKS(glVertex4bvOES, (const GLbyte * coords), (coords)) +GEN_THUNKS(glVertex4d, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x, y, z, w)) +GEN_THUNKS(glVertex4dv, (const GLdouble * v), (v)) +GEN_THUNKS(glVertex4f, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x, y, z, w)) +GEN_THUNKS(glVertex4fv, (const GLfloat * v), (v)) +GEN_THUNKS(glVertex4hNV, (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w), (x, y, z, w)) +GEN_THUNKS(glVertex4hvNV, (const GLhalfNV * v), (v)) +GEN_THUNKS(glVertex4i, (GLint x, GLint y, GLint z, GLint w), (x, y, z, w)) +GEN_THUNKS(glVertex4iv, (const GLint * v), (v)) +GEN_THUNKS(glVertex4s, (GLshort x, GLshort y, GLshort z, GLshort w), (x, y, z, w)) +GEN_THUNKS(glVertex4sv, (const GLshort * v), (v)) +GEN_THUNKS(glVertex4xOES, (GLfixed x, GLfixed y, GLfixed z), (x, y, z)) +GEN_THUNKS(glVertex4xvOES, (const GLfixed * coords), (coords)) +GEN_THUNKS(glVertexArrayAttribBinding, (GLuint vaobj, GLuint attribindex, GLuint bindingindex), (vaobj, attribindex, bindingindex)) +GEN_THUNKS(glVertexArrayAttribFormat, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset), (vaobj, attribindex, size, type, normalized, relativeoffset)) +GEN_THUNKS(glVertexArrayAttribIFormat, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayAttribLFormat, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayBindVertexBufferEXT, (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride), (vaobj, bindingindex, buffer, offset, stride)) +GEN_THUNKS(glVertexArrayBindingDivisor, (GLuint vaobj, GLuint bindingindex, GLuint divisor), (vaobj, bindingindex, divisor)) +GEN_THUNKS(glVertexArrayColorOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayEdgeFlagOffsetEXT, (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset), (vaobj, buffer, stride, offset)) +GEN_THUNKS(glVertexArrayElementBuffer, (GLuint vaobj, GLuint buffer), (vaobj, buffer)) +GEN_THUNKS(glVertexArrayFogCoordOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, type, stride, offset)) +GEN_THUNKS(glVertexArrayIndexOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, type, stride, offset)) +GEN_THUNKS(glVertexArrayMultiTexCoordOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, texunit, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayNormalOffsetEXT, (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, type, stride, offset)) +GEN_THUNKS(glVertexArrayParameteriAPPLE, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glVertexArrayRangeAPPLE, (GLsizei length, void * pointer), (length, pointer)) +GEN_THUNKS(glVertexArrayRangeNV, (GLsizei length, const void * pointer), (length, pointer)) +GEN_THUNKS(glVertexArraySecondaryColorOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayTexCoordOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayVertexAttribBindingEXT, (GLuint vaobj, GLuint attribindex, GLuint bindingindex), (vaobj, attribindex, bindingindex)) +GEN_THUNKS(glVertexArrayVertexAttribDivisorEXT, (GLuint vaobj, GLuint index, GLuint divisor), (vaobj, index, divisor)) +GEN_THUNKS(glVertexArrayVertexAttribFormatEXT, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset), (vaobj, attribindex, size, type, normalized, relativeoffset)) +GEN_THUNKS(glVertexArrayVertexAttribIFormatEXT, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayVertexAttribIOffsetEXT, (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, index, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayVertexAttribLFormatEXT, (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (vaobj, attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexArrayVertexAttribLOffsetEXT, (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, index, size, type, stride, offset)) +GEN_THUNKS(glVertexArrayVertexAttribOffsetEXT, (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset), (vaobj, buffer, index, size, type, normalized, stride, offset)) +GEN_THUNKS(glVertexArrayVertexBindingDivisorEXT, (GLuint vaobj, GLuint bindingindex, GLuint divisor), (vaobj, bindingindex, divisor)) +GEN_THUNKS(glVertexArrayVertexBuffer, (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride), (vaobj, bindingindex, buffer, offset, stride)) +GEN_THUNKS(glVertexArrayVertexBuffers, (GLuint vaobj, GLuint first, GLsizei count, const GLuint * buffers, const GLintptr * offsets, const GLsizei * strides), (vaobj, first, count, buffers, offsets, strides)) +GEN_THUNKS(glVertexArrayVertexOffsetEXT, (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset), (vaobj, buffer, size, type, stride, offset)) +GEN_THUNKS(glVertexAttrib1d, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttrib1dARB, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttrib1dNV, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttrib1dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib1dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib1dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib1f, (GLuint index, GLfloat x), (index, x)) +GEN_THUNKS(glVertexAttrib1fARB, (GLuint index, GLfloat x), (index, x)) +GEN_THUNKS(glVertexAttrib1fNV, (GLuint index, GLfloat x), (index, x)) +GEN_THUNKS(glVertexAttrib1fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib1fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib1fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib1hNV, (GLuint index, GLhalfNV x), (index, x)) +GEN_THUNKS(glVertexAttrib1hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib1s, (GLuint index, GLshort x), (index, x)) +GEN_THUNKS(glVertexAttrib1sARB, (GLuint index, GLshort x), (index, x)) +GEN_THUNKS(glVertexAttrib1sNV, (GLuint index, GLshort x), (index, x)) +GEN_THUNKS(glVertexAttrib1sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib1svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib1svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib2d, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2dARB, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2dNV, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib2dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib2dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib2f, (GLuint index, GLfloat x, GLfloat y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2fARB, (GLuint index, GLfloat x, GLfloat y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2fNV, (GLuint index, GLfloat x, GLfloat y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib2fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib2fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib2hNV, (GLuint index, GLhalfNV x, GLhalfNV y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib2s, (GLuint index, GLshort x, GLshort y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2sARB, (GLuint index, GLshort x, GLshort y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2sNV, (GLuint index, GLshort x, GLshort y), (index, x, y)) +GEN_THUNKS(glVertexAttrib2sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib2svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib2svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib3d, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3dARB, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3dNV, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib3dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib3dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib3f, (GLuint index, GLfloat x, GLfloat y, GLfloat z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3fARB, (GLuint index, GLfloat x, GLfloat y, GLfloat z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3fNV, (GLuint index, GLfloat x, GLfloat y, GLfloat z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib3fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib3fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib3hNV, (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib3s, (GLuint index, GLshort x, GLshort y, GLshort z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3sARB, (GLuint index, GLshort x, GLshort y, GLshort z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3sNV, (GLuint index, GLshort x, GLshort y, GLshort z), (index, x, y, z)) +GEN_THUNKS(glVertexAttrib3sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib3svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib3svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nbv, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NbvARB, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Niv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NivARB, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nsv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NsvARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nub, (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4NubARB, (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4Nubv, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NubvARB, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nuiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NuivARB, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4Nusv, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4NusvARB, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4bv, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4bvARB, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4d, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4dARB, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4dNV, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib4dvARB, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib4dvNV, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttrib4f, (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4fARB, (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4fNV, (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4fv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib4fvARB, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib4fvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glVertexAttrib4hNV, (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4hvNV, (GLuint index, const GLhalfNV * v), (index, v)) +GEN_THUNKS(glVertexAttrib4iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ivARB, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4s, (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4sARB, (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4sNV, (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4svARB, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4svNV, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ubNV, (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttrib4ubv, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ubvARB, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4ubvNV, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttrib4uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4uivARB, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttrib4usv, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttrib4usvARB, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttribArrayObjectATI, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset), (index, size, type, normalized, stride, buffer, offset)) +GEN_THUNKS(glVertexAttribBinding, (GLuint attribindex, GLuint bindingindex), (attribindex, bindingindex)) +GEN_THUNKS(glVertexAttribDivisor, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorANGLE, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorARB, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorEXT, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribDivisorNV, (GLuint index, GLuint divisor), (index, divisor)) +GEN_THUNKS(glVertexAttribFormat, (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset), (attribindex, size, type, normalized, relativeoffset)) +GEN_THUNKS(glVertexAttribFormatNV, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride), (index, size, type, normalized, stride)) +GEN_THUNKS(glVertexAttribI1i, (GLuint index, GLint x), (index, x)) +GEN_THUNKS(glVertexAttribI1iEXT, (GLuint index, GLint x), (index, x)) +GEN_THUNKS(glVertexAttribI1iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI1ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI1ui, (GLuint index, GLuint x), (index, x)) +GEN_THUNKS(glVertexAttribI1uiEXT, (GLuint index, GLuint x), (index, x)) +GEN_THUNKS(glVertexAttribI1uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI1uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2i, (GLuint index, GLint x, GLint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2iEXT, (GLuint index, GLint x, GLint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2ui, (GLuint index, GLuint x, GLuint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2uiEXT, (GLuint index, GLuint x, GLuint y), (index, x, y)) +GEN_THUNKS(glVertexAttribI2uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI2uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3i, (GLuint index, GLint x, GLint y, GLint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3iEXT, (GLuint index, GLint x, GLint y, GLint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3ui, (GLuint index, GLuint x, GLuint y, GLuint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3uiEXT, (GLuint index, GLuint x, GLuint y, GLuint z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribI3uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI3uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4bv, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4bvEXT, (GLuint index, const GLbyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4i, (GLuint index, GLint x, GLint y, GLint z, GLint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4iEXT, (GLuint index, GLint x, GLint y, GLint z, GLint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4iv, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ivEXT, (GLuint index, const GLint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4sv, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttribI4svEXT, (GLuint index, const GLshort * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ubv, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ubvEXT, (GLuint index, const GLubyte * v), (index, v)) +GEN_THUNKS(glVertexAttribI4ui, (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4uiEXT, (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribI4uiv, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4uivEXT, (GLuint index, const GLuint * v), (index, v)) +GEN_THUNKS(glVertexAttribI4usv, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttribI4usvEXT, (GLuint index, const GLushort * v), (index, v)) +GEN_THUNKS(glVertexAttribIFormat, (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexAttribIFormatNV, (GLuint index, GLint size, GLenum type, GLsizei stride), (index, size, type, stride)) +GEN_THUNKS(glVertexAttribIPointer, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribIPointerEXT, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribL1d, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttribL1dEXT, (GLuint index, GLdouble x), (index, x)) +GEN_THUNKS(glVertexAttribL1dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL1dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL1i64NV, (GLuint index, GLint64EXT x), (index, x)) +GEN_THUNKS(glVertexAttribL1i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL1ui64ARB, (GLuint index, GLuint64EXT x), (index, x)) +GEN_THUNKS(glVertexAttribL1ui64NV, (GLuint index, GLuint64EXT x), (index, x)) +GEN_THUNKS(glVertexAttribL1ui64vARB, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL1ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL2d, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2dEXT, (GLuint index, GLdouble x, GLdouble y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL2dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL2i64NV, (GLuint index, GLint64EXT x, GLint64EXT y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL2ui64NV, (GLuint index, GLuint64EXT x, GLuint64EXT y), (index, x, y)) +GEN_THUNKS(glVertexAttribL2ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL3d, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3dEXT, (GLuint index, GLdouble x, GLdouble y, GLdouble z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL3dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL3i64NV, (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL3ui64NV, (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z), (index, x, y, z)) +GEN_THUNKS(glVertexAttribL3ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL4d, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4dEXT, (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4dv, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL4dvEXT, (GLuint index, const GLdouble * v), (index, v)) +GEN_THUNKS(glVertexAttribL4i64NV, (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4i64vNV, (GLuint index, const GLint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribL4ui64NV, (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w), (index, x, y, z, w)) +GEN_THUNKS(glVertexAttribL4ui64vNV, (GLuint index, const GLuint64EXT * v), (index, v)) +GEN_THUNKS(glVertexAttribLFormat, (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset), (attribindex, size, type, relativeoffset)) +GEN_THUNKS(glVertexAttribLFormatNV, (GLuint index, GLint size, GLenum type, GLsizei stride), (index, size, type, stride)) +GEN_THUNKS(glVertexAttribLPointer, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribLPointerEXT, (GLuint index, GLint size, GLenum type, GLsizei stride, const void * pointer), (index, size, type, stride, pointer)) +GEN_THUNKS(glVertexAttribP1ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP1uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP2ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP2uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP3ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP3uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP4ui, (GLuint index, GLenum type, GLboolean normalized, GLuint value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribP4uiv, (GLuint index, GLenum type, GLboolean normalized, const GLuint * value), (index, type, normalized, value)) +GEN_THUNKS(glVertexAttribParameteriAMD, (GLuint index, GLenum pname, GLint param), (index, pname, param)) +GEN_THUNKS(glVertexAttribPointer, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer), (index, size, type, normalized, stride, pointer)) +GEN_THUNKS(glVertexAttribPointerARB, (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer), (index, size, type, normalized, stride, pointer)) +GEN_THUNKS(glVertexAttribPointerNV, (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void * pointer), (index, fsize, type, stride, pointer)) +GEN_THUNKS(glVertexAttribs1dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs1fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs1hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs1svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs2dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs2fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs2hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs2svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs3dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs3fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs3hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs3svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4dvNV, (GLuint index, GLsizei count, const GLdouble * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4fvNV, (GLuint index, GLsizei count, const GLfloat * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4hvNV, (GLuint index, GLsizei n, const GLhalfNV * v), (index, n, v)) +GEN_THUNKS(glVertexAttribs4svNV, (GLuint index, GLsizei count, const GLshort * v), (index, count, v)) +GEN_THUNKS(glVertexAttribs4ubvNV, (GLuint index, GLsizei count, const GLubyte * v), (index, count, v)) +GEN_THUNKS(glVertexBindingDivisor, (GLuint bindingindex, GLuint divisor), (bindingindex, divisor)) +GEN_THUNKS(glVertexBlendARB, (GLint count), (count)) +GEN_THUNKS(glVertexBlendEnvfATI, (GLenum pname, GLfloat param), (pname, param)) +GEN_THUNKS(glVertexBlendEnviATI, (GLenum pname, GLint param), (pname, param)) +GEN_THUNKS(glVertexFormatNV, (GLint size, GLenum type, GLsizei stride), (size, type, stride)) +GEN_THUNKS(glVertexP2ui, (GLenum type, GLuint value), (type, value)) +GEN_THUNKS(glVertexP2uiv, (GLenum type, const GLuint * value), (type, value)) +GEN_THUNKS(glVertexP3ui, (GLenum type, GLuint value), (type, value)) +GEN_THUNKS(glVertexP3uiv, (GLenum type, const GLuint * value), (type, value)) +GEN_THUNKS(glVertexP4ui, (GLenum type, GLuint value), (type, value)) +GEN_THUNKS(glVertexP4uiv, (GLenum type, const GLuint * value), (type, value)) +GEN_THUNKS(glVertexPointer, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glVertexPointerEXT, (GLint size, GLenum type, GLsizei stride, GLsizei count, const void * pointer), (size, type, stride, count, pointer)) +GEN_THUNKS(glVertexPointerListIBM, (GLint size, GLenum type, GLint stride, const void ** pointer, GLint ptrstride), (size, type, stride, pointer, ptrstride)) +GEN_THUNKS(glVertexPointervINTEL, (GLint size, GLenum type, const void ** pointer), (size, type, pointer)) +GEN_THUNKS(glVertexStream1dATI, (GLenum stream, GLdouble x), (stream, x)) +GEN_THUNKS(glVertexStream1dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream1fATI, (GLenum stream, GLfloat x), (stream, x)) +GEN_THUNKS(glVertexStream1fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream1iATI, (GLenum stream, GLint x), (stream, x)) +GEN_THUNKS(glVertexStream1ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream1sATI, (GLenum stream, GLshort x), (stream, x)) +GEN_THUNKS(glVertexStream1svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2dATI, (GLenum stream, GLdouble x, GLdouble y), (stream, x, y)) +GEN_THUNKS(glVertexStream2dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2fATI, (GLenum stream, GLfloat x, GLfloat y), (stream, x, y)) +GEN_THUNKS(glVertexStream2fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2iATI, (GLenum stream, GLint x, GLint y), (stream, x, y)) +GEN_THUNKS(glVertexStream2ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream2sATI, (GLenum stream, GLshort x, GLshort y), (stream, x, y)) +GEN_THUNKS(glVertexStream2svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3dATI, (GLenum stream, GLdouble x, GLdouble y, GLdouble z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3fATI, (GLenum stream, GLfloat x, GLfloat y, GLfloat z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3iATI, (GLenum stream, GLint x, GLint y, GLint z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream3sATI, (GLenum stream, GLshort x, GLshort y, GLshort z), (stream, x, y, z)) +GEN_THUNKS(glVertexStream3svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4dATI, (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4dvATI, (GLenum stream, const GLdouble * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4fATI, (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4fvATI, (GLenum stream, const GLfloat * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4iATI, (GLenum stream, GLint x, GLint y, GLint z, GLint w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4ivATI, (GLenum stream, const GLint * coords), (stream, coords)) +GEN_THUNKS(glVertexStream4sATI, (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w), (stream, x, y, z, w)) +GEN_THUNKS(glVertexStream4svATI, (GLenum stream, const GLshort * coords), (stream, coords)) +GEN_THUNKS(glVertexWeightPointerEXT, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glVertexWeightfEXT, (GLfloat weight), (weight)) +GEN_THUNKS(glVertexWeightfvEXT, (const GLfloat * weight), (weight)) +GEN_THUNKS(glVertexWeighthNV, (GLhalfNV weight), (weight)) +GEN_THUNKS(glVertexWeighthvNV, (const GLhalfNV * weight), (weight)) +GEN_THUNKS_RET(GLenum, glVideoCaptureNV, (GLuint video_capture_slot, GLuint * sequence_num, GLuint64EXT * capture_time), (video_capture_slot, sequence_num, capture_time)) +GEN_THUNKS(glVideoCaptureStreamParameterdvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glVideoCaptureStreamParameterfvNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glVideoCaptureStreamParameterivNV, (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint * params), (video_capture_slot, stream, pname, params)) +GEN_THUNKS(glViewport, (GLint x, GLint y, GLsizei width, GLsizei height), (x, y, width, height)) +GEN_THUNKS(glViewportArrayv, (GLuint first, GLsizei count, const GLfloat * v), (first, count, v)) +GEN_THUNKS(glViewportArrayvNV, (GLuint first, GLsizei count, const GLfloat * v), (first, count, v)) +GEN_THUNKS(glViewportIndexedf, (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h), (index, x, y, w, h)) +GEN_THUNKS(glViewportIndexedfNV, (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h), (index, x, y, w, h)) +GEN_THUNKS(glViewportIndexedfv, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glViewportIndexedfvNV, (GLuint index, const GLfloat * v), (index, v)) +GEN_THUNKS(glWaitSync, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS(glWaitSyncAPPLE, (GLsync sync, GLbitfield flags, GLuint64 timeout), (sync, flags, timeout)) +GEN_THUNKS(glWeightPathsNV, (GLuint resultPath, GLsizei numPaths, const GLuint * paths, const GLfloat * weights), (resultPath, numPaths, paths, weights)) +GEN_THUNKS(glWeightPointerARB, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glWeightPointerOES, (GLint size, GLenum type, GLsizei stride, const void * pointer), (size, type, stride, pointer)) +GEN_THUNKS(glWeightbvARB, (GLint size, const GLbyte * weights), (size, weights)) +GEN_THUNKS(glWeightdvARB, (GLint size, const GLdouble * weights), (size, weights)) +GEN_THUNKS(glWeightfvARB, (GLint size, const GLfloat * weights), (size, weights)) +GEN_THUNKS(glWeightivARB, (GLint size, const GLint * weights), (size, weights)) +GEN_THUNKS(glWeightsvARB, (GLint size, const GLshort * weights), (size, weights)) +GEN_THUNKS(glWeightubvARB, (GLint size, const GLubyte * weights), (size, weights)) +GEN_THUNKS(glWeightuivARB, (GLint size, const GLuint * weights), (size, weights)) +GEN_THUNKS(glWeightusvARB, (GLint size, const GLushort * weights), (size, weights)) +GEN_THUNKS(glWindowPos2d, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glWindowPos2dARB, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glWindowPos2dMESA, (GLdouble x, GLdouble y), (x, y)) +GEN_THUNKS(glWindowPos2dv, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos2dvARB, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos2dvMESA, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos2f, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glWindowPos2fARB, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glWindowPos2fMESA, (GLfloat x, GLfloat y), (x, y)) +GEN_THUNKS(glWindowPos2fv, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos2fvARB, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos2fvMESA, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos2i, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glWindowPos2iARB, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glWindowPos2iMESA, (GLint x, GLint y), (x, y)) +GEN_THUNKS(glWindowPos2iv, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos2ivARB, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos2ivMESA, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos2s, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glWindowPos2sARB, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glWindowPos2sMESA, (GLshort x, GLshort y), (x, y)) +GEN_THUNKS(glWindowPos2sv, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos2svARB, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos2svMESA, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos3d, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glWindowPos3dARB, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glWindowPos3dMESA, (GLdouble x, GLdouble y, GLdouble z), (x, y, z)) +GEN_THUNKS(glWindowPos3dv, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos3dvARB, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos3dvMESA, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos3f, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glWindowPos3fARB, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glWindowPos3fMESA, (GLfloat x, GLfloat y, GLfloat z), (x, y, z)) +GEN_THUNKS(glWindowPos3fv, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos3fvARB, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos3fvMESA, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos3i, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glWindowPos3iARB, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glWindowPos3iMESA, (GLint x, GLint y, GLint z), (x, y, z)) +GEN_THUNKS(glWindowPos3iv, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos3ivARB, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos3ivMESA, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos3s, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glWindowPos3sARB, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glWindowPos3sMESA, (GLshort x, GLshort y, GLshort z), (x, y, z)) +GEN_THUNKS(glWindowPos3sv, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos3svARB, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos3svMESA, (const GLshort * v), (v)) +GEN_THUNKS(glWindowPos4dMESA, (GLdouble x, GLdouble y, GLdouble z, GLdouble w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4dvMESA, (const GLdouble * v), (v)) +GEN_THUNKS(glWindowPos4fMESA, (GLfloat x, GLfloat y, GLfloat z, GLfloat w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4fvMESA, (const GLfloat * v), (v)) +GEN_THUNKS(glWindowPos4iMESA, (GLint x, GLint y, GLint z, GLint w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4ivMESA, (const GLint * v), (v)) +GEN_THUNKS(glWindowPos4sMESA, (GLshort x, GLshort y, GLshort z, GLshort w), (x, y, z, w)) +GEN_THUNKS(glWindowPos4svMESA, (const GLshort * v), (v)) +GEN_THUNKS(glWriteMaskEXT, (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW), (res, in, outX, outY, outZ, outW)) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_glAccum_dispatch_table_rewrite_ptr, /* glAccum */ + epoxy_glAccumxOES_dispatch_table_rewrite_ptr, /* glAccumxOES */ + epoxy_glActiveProgramEXT_dispatch_table_rewrite_ptr, /* glActiveProgramEXT */ + epoxy_glActiveShaderProgram_dispatch_table_rewrite_ptr, /* glActiveShaderProgram */ + epoxy_glActiveShaderProgramEXT_dispatch_table_rewrite_ptr, /* glActiveShaderProgramEXT */ + epoxy_glActiveStencilFaceEXT_dispatch_table_rewrite_ptr, /* glActiveStencilFaceEXT */ + epoxy_glActiveTexture_dispatch_table_rewrite_ptr, /* glActiveTexture */ + epoxy_glActiveTextureARB_dispatch_table_rewrite_ptr, /* glActiveTextureARB */ + epoxy_glActiveVaryingNV_dispatch_table_rewrite_ptr, /* glActiveVaryingNV */ + epoxy_glAlphaFragmentOp1ATI_dispatch_table_rewrite_ptr, /* glAlphaFragmentOp1ATI */ + epoxy_glAlphaFragmentOp2ATI_dispatch_table_rewrite_ptr, /* glAlphaFragmentOp2ATI */ + epoxy_glAlphaFragmentOp3ATI_dispatch_table_rewrite_ptr, /* glAlphaFragmentOp3ATI */ + epoxy_glAlphaFunc_dispatch_table_rewrite_ptr, /* glAlphaFunc */ + epoxy_glAlphaFuncQCOM_dispatch_table_rewrite_ptr, /* glAlphaFuncQCOM */ + epoxy_glAlphaFuncx_dispatch_table_rewrite_ptr, /* glAlphaFuncx */ + epoxy_glAlphaFuncxOES_dispatch_table_rewrite_ptr, /* glAlphaFuncxOES */ + epoxy_glApplyFramebufferAttachmentCMAAINTEL_dispatch_table_rewrite_ptr, /* glApplyFramebufferAttachmentCMAAINTEL */ + epoxy_glApplyTextureEXT_dispatch_table_rewrite_ptr, /* glApplyTextureEXT */ + epoxy_glAreProgramsResidentNV_dispatch_table_rewrite_ptr, /* glAreProgramsResidentNV */ + epoxy_glAreTexturesResident_dispatch_table_rewrite_ptr, /* glAreTexturesResident */ + epoxy_glAreTexturesResidentEXT_dispatch_table_rewrite_ptr, /* glAreTexturesResidentEXT */ + epoxy_glArrayElement_dispatch_table_rewrite_ptr, /* glArrayElement */ + epoxy_glArrayElementEXT_dispatch_table_rewrite_ptr, /* glArrayElementEXT */ + epoxy_glArrayObjectATI_dispatch_table_rewrite_ptr, /* glArrayObjectATI */ + epoxy_glAsyncMarkerSGIX_dispatch_table_rewrite_ptr, /* glAsyncMarkerSGIX */ + epoxy_glAttachObjectARB_dispatch_table_rewrite_ptr, /* glAttachObjectARB */ + epoxy_glAttachShader_dispatch_table_rewrite_ptr, /* glAttachShader */ + epoxy_glBegin_unwrapped_dispatch_table_rewrite_ptr, /* glBegin_unwrapped */ + epoxy_glBeginConditionalRender_dispatch_table_rewrite_ptr, /* glBeginConditionalRender */ + epoxy_glBeginConditionalRenderNV_dispatch_table_rewrite_ptr, /* glBeginConditionalRenderNV */ + epoxy_glBeginConditionalRenderNVX_dispatch_table_rewrite_ptr, /* glBeginConditionalRenderNVX */ + epoxy_glBeginFragmentShaderATI_dispatch_table_rewrite_ptr, /* glBeginFragmentShaderATI */ + epoxy_glBeginOcclusionQueryNV_dispatch_table_rewrite_ptr, /* glBeginOcclusionQueryNV */ + epoxy_glBeginPerfMonitorAMD_dispatch_table_rewrite_ptr, /* glBeginPerfMonitorAMD */ + epoxy_glBeginPerfQueryINTEL_dispatch_table_rewrite_ptr, /* glBeginPerfQueryINTEL */ + epoxy_glBeginQuery_dispatch_table_rewrite_ptr, /* glBeginQuery */ + epoxy_glBeginQueryARB_dispatch_table_rewrite_ptr, /* glBeginQueryARB */ + epoxy_glBeginQueryEXT_dispatch_table_rewrite_ptr, /* glBeginQueryEXT */ + epoxy_glBeginQueryIndexed_dispatch_table_rewrite_ptr, /* glBeginQueryIndexed */ + epoxy_glBeginTransformFeedback_dispatch_table_rewrite_ptr, /* glBeginTransformFeedback */ + epoxy_glBeginTransformFeedbackEXT_dispatch_table_rewrite_ptr, /* glBeginTransformFeedbackEXT */ + epoxy_glBeginTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glBeginTransformFeedbackNV */ + epoxy_glBeginVertexShaderEXT_dispatch_table_rewrite_ptr, /* glBeginVertexShaderEXT */ + epoxy_glBeginVideoCaptureNV_dispatch_table_rewrite_ptr, /* glBeginVideoCaptureNV */ + epoxy_glBindAttribLocation_dispatch_table_rewrite_ptr, /* glBindAttribLocation */ + epoxy_glBindAttribLocationARB_dispatch_table_rewrite_ptr, /* glBindAttribLocationARB */ + epoxy_glBindBuffer_dispatch_table_rewrite_ptr, /* glBindBuffer */ + epoxy_glBindBufferARB_dispatch_table_rewrite_ptr, /* glBindBufferARB */ + epoxy_glBindBufferBase_dispatch_table_rewrite_ptr, /* glBindBufferBase */ + epoxy_glBindBufferBaseEXT_dispatch_table_rewrite_ptr, /* glBindBufferBaseEXT */ + epoxy_glBindBufferBaseNV_dispatch_table_rewrite_ptr, /* glBindBufferBaseNV */ + epoxy_glBindBufferOffsetEXT_dispatch_table_rewrite_ptr, /* glBindBufferOffsetEXT */ + epoxy_glBindBufferOffsetNV_dispatch_table_rewrite_ptr, /* glBindBufferOffsetNV */ + epoxy_glBindBufferRange_dispatch_table_rewrite_ptr, /* glBindBufferRange */ + epoxy_glBindBufferRangeEXT_dispatch_table_rewrite_ptr, /* glBindBufferRangeEXT */ + epoxy_glBindBufferRangeNV_dispatch_table_rewrite_ptr, /* glBindBufferRangeNV */ + epoxy_glBindBuffersBase_dispatch_table_rewrite_ptr, /* glBindBuffersBase */ + epoxy_glBindBuffersRange_dispatch_table_rewrite_ptr, /* glBindBuffersRange */ + epoxy_glBindFragDataLocation_dispatch_table_rewrite_ptr, /* glBindFragDataLocation */ + epoxy_glBindFragDataLocationEXT_dispatch_table_rewrite_ptr, /* glBindFragDataLocationEXT */ + epoxy_glBindFragDataLocationIndexed_dispatch_table_rewrite_ptr, /* glBindFragDataLocationIndexed */ + epoxy_glBindFragDataLocationIndexedEXT_dispatch_table_rewrite_ptr, /* glBindFragDataLocationIndexedEXT */ + epoxy_glBindFragmentShaderATI_dispatch_table_rewrite_ptr, /* glBindFragmentShaderATI */ + epoxy_glBindFramebuffer_dispatch_table_rewrite_ptr, /* glBindFramebuffer */ + epoxy_glBindFramebufferEXT_dispatch_table_rewrite_ptr, /* glBindFramebufferEXT */ + epoxy_glBindFramebufferOES_dispatch_table_rewrite_ptr, /* glBindFramebufferOES */ + epoxy_glBindImageTexture_dispatch_table_rewrite_ptr, /* glBindImageTexture */ + epoxy_glBindImageTextureEXT_dispatch_table_rewrite_ptr, /* glBindImageTextureEXT */ + epoxy_glBindImageTextures_dispatch_table_rewrite_ptr, /* glBindImageTextures */ + epoxy_glBindLightParameterEXT_dispatch_table_rewrite_ptr, /* glBindLightParameterEXT */ + epoxy_glBindMaterialParameterEXT_dispatch_table_rewrite_ptr, /* glBindMaterialParameterEXT */ + epoxy_glBindMultiTextureEXT_dispatch_table_rewrite_ptr, /* glBindMultiTextureEXT */ + epoxy_glBindParameterEXT_dispatch_table_rewrite_ptr, /* glBindParameterEXT */ + epoxy_glBindProgramARB_dispatch_table_rewrite_ptr, /* glBindProgramARB */ + epoxy_glBindProgramNV_dispatch_table_rewrite_ptr, /* glBindProgramNV */ + epoxy_glBindProgramPipeline_dispatch_table_rewrite_ptr, /* glBindProgramPipeline */ + epoxy_glBindProgramPipelineEXT_dispatch_table_rewrite_ptr, /* glBindProgramPipelineEXT */ + epoxy_glBindRenderbuffer_dispatch_table_rewrite_ptr, /* glBindRenderbuffer */ + epoxy_glBindRenderbufferEXT_dispatch_table_rewrite_ptr, /* glBindRenderbufferEXT */ + epoxy_glBindRenderbufferOES_dispatch_table_rewrite_ptr, /* glBindRenderbufferOES */ + epoxy_glBindSampler_dispatch_table_rewrite_ptr, /* glBindSampler */ + epoxy_glBindSamplers_dispatch_table_rewrite_ptr, /* glBindSamplers */ + epoxy_glBindTexGenParameterEXT_dispatch_table_rewrite_ptr, /* glBindTexGenParameterEXT */ + epoxy_glBindTexture_dispatch_table_rewrite_ptr, /* glBindTexture */ + epoxy_glBindTextureEXT_dispatch_table_rewrite_ptr, /* glBindTextureEXT */ + epoxy_glBindTextureUnit_dispatch_table_rewrite_ptr, /* glBindTextureUnit */ + epoxy_glBindTextureUnitParameterEXT_dispatch_table_rewrite_ptr, /* glBindTextureUnitParameterEXT */ + epoxy_glBindTextures_dispatch_table_rewrite_ptr, /* glBindTextures */ + epoxy_glBindTransformFeedback_dispatch_table_rewrite_ptr, /* glBindTransformFeedback */ + epoxy_glBindTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glBindTransformFeedbackNV */ + epoxy_glBindVertexArray_dispatch_table_rewrite_ptr, /* glBindVertexArray */ + epoxy_glBindVertexArrayAPPLE_dispatch_table_rewrite_ptr, /* glBindVertexArrayAPPLE */ + epoxy_glBindVertexArrayOES_dispatch_table_rewrite_ptr, /* glBindVertexArrayOES */ + epoxy_glBindVertexBuffer_dispatch_table_rewrite_ptr, /* glBindVertexBuffer */ + epoxy_glBindVertexBuffers_dispatch_table_rewrite_ptr, /* glBindVertexBuffers */ + epoxy_glBindVertexShaderEXT_dispatch_table_rewrite_ptr, /* glBindVertexShaderEXT */ + epoxy_glBindVideoCaptureStreamBufferNV_dispatch_table_rewrite_ptr, /* glBindVideoCaptureStreamBufferNV */ + epoxy_glBindVideoCaptureStreamTextureNV_dispatch_table_rewrite_ptr, /* glBindVideoCaptureStreamTextureNV */ + epoxy_glBinormal3bEXT_dispatch_table_rewrite_ptr, /* glBinormal3bEXT */ + epoxy_glBinormal3bvEXT_dispatch_table_rewrite_ptr, /* glBinormal3bvEXT */ + epoxy_glBinormal3dEXT_dispatch_table_rewrite_ptr, /* glBinormal3dEXT */ + epoxy_glBinormal3dvEXT_dispatch_table_rewrite_ptr, /* glBinormal3dvEXT */ + epoxy_glBinormal3fEXT_dispatch_table_rewrite_ptr, /* glBinormal3fEXT */ + epoxy_glBinormal3fvEXT_dispatch_table_rewrite_ptr, /* glBinormal3fvEXT */ + epoxy_glBinormal3iEXT_dispatch_table_rewrite_ptr, /* glBinormal3iEXT */ + epoxy_glBinormal3ivEXT_dispatch_table_rewrite_ptr, /* glBinormal3ivEXT */ + epoxy_glBinormal3sEXT_dispatch_table_rewrite_ptr, /* glBinormal3sEXT */ + epoxy_glBinormal3svEXT_dispatch_table_rewrite_ptr, /* glBinormal3svEXT */ + epoxy_glBinormalPointerEXT_dispatch_table_rewrite_ptr, /* glBinormalPointerEXT */ + epoxy_glBitmap_dispatch_table_rewrite_ptr, /* glBitmap */ + epoxy_glBitmapxOES_dispatch_table_rewrite_ptr, /* glBitmapxOES */ + epoxy_glBlendBarrier_dispatch_table_rewrite_ptr, /* glBlendBarrier */ + epoxy_glBlendBarrierKHR_dispatch_table_rewrite_ptr, /* glBlendBarrierKHR */ + epoxy_glBlendBarrierNV_dispatch_table_rewrite_ptr, /* glBlendBarrierNV */ + epoxy_glBlendColor_dispatch_table_rewrite_ptr, /* glBlendColor */ + epoxy_glBlendColorEXT_dispatch_table_rewrite_ptr, /* glBlendColorEXT */ + epoxy_glBlendColorxOES_dispatch_table_rewrite_ptr, /* glBlendColorxOES */ + epoxy_glBlendEquation_dispatch_table_rewrite_ptr, /* glBlendEquation */ + epoxy_glBlendEquationEXT_dispatch_table_rewrite_ptr, /* glBlendEquationEXT */ + epoxy_glBlendEquationIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendEquationIndexedAMD */ + epoxy_glBlendEquationOES_dispatch_table_rewrite_ptr, /* glBlendEquationOES */ + epoxy_glBlendEquationSeparate_dispatch_table_rewrite_ptr, /* glBlendEquationSeparate */ + epoxy_glBlendEquationSeparateEXT_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateEXT */ + epoxy_glBlendEquationSeparateIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateIndexedAMD */ + epoxy_glBlendEquationSeparateOES_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateOES */ + epoxy_glBlendEquationSeparatei_dispatch_table_rewrite_ptr, /* glBlendEquationSeparatei */ + epoxy_glBlendEquationSeparateiARB_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateiARB */ + epoxy_glBlendEquationSeparateiEXT_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateiEXT */ + epoxy_glBlendEquationSeparateiOES_dispatch_table_rewrite_ptr, /* glBlendEquationSeparateiOES */ + epoxy_glBlendEquationi_dispatch_table_rewrite_ptr, /* glBlendEquationi */ + epoxy_glBlendEquationiARB_dispatch_table_rewrite_ptr, /* glBlendEquationiARB */ + epoxy_glBlendEquationiEXT_dispatch_table_rewrite_ptr, /* glBlendEquationiEXT */ + epoxy_glBlendEquationiOES_dispatch_table_rewrite_ptr, /* glBlendEquationiOES */ + epoxy_glBlendFunc_dispatch_table_rewrite_ptr, /* glBlendFunc */ + epoxy_glBlendFuncIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendFuncIndexedAMD */ + epoxy_glBlendFuncSeparate_dispatch_table_rewrite_ptr, /* glBlendFuncSeparate */ + epoxy_glBlendFuncSeparateEXT_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateEXT */ + epoxy_glBlendFuncSeparateINGR_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateINGR */ + epoxy_glBlendFuncSeparateIndexedAMD_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateIndexedAMD */ + epoxy_glBlendFuncSeparateOES_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateOES */ + epoxy_glBlendFuncSeparatei_dispatch_table_rewrite_ptr, /* glBlendFuncSeparatei */ + epoxy_glBlendFuncSeparateiARB_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateiARB */ + epoxy_glBlendFuncSeparateiEXT_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateiEXT */ + epoxy_glBlendFuncSeparateiOES_dispatch_table_rewrite_ptr, /* glBlendFuncSeparateiOES */ + epoxy_glBlendFunci_dispatch_table_rewrite_ptr, /* glBlendFunci */ + epoxy_glBlendFunciARB_dispatch_table_rewrite_ptr, /* glBlendFunciARB */ + epoxy_glBlendFunciEXT_dispatch_table_rewrite_ptr, /* glBlendFunciEXT */ + epoxy_glBlendFunciOES_dispatch_table_rewrite_ptr, /* glBlendFunciOES */ + epoxy_glBlendParameteriNV_dispatch_table_rewrite_ptr, /* glBlendParameteriNV */ + epoxy_glBlitFramebuffer_dispatch_table_rewrite_ptr, /* glBlitFramebuffer */ + epoxy_glBlitFramebufferANGLE_dispatch_table_rewrite_ptr, /* glBlitFramebufferANGLE */ + epoxy_glBlitFramebufferEXT_dispatch_table_rewrite_ptr, /* glBlitFramebufferEXT */ + epoxy_glBlitFramebufferNV_dispatch_table_rewrite_ptr, /* glBlitFramebufferNV */ + epoxy_glBlitNamedFramebuffer_dispatch_table_rewrite_ptr, /* glBlitNamedFramebuffer */ + epoxy_glBufferAddressRangeNV_dispatch_table_rewrite_ptr, /* glBufferAddressRangeNV */ + epoxy_glBufferData_dispatch_table_rewrite_ptr, /* glBufferData */ + epoxy_glBufferDataARB_dispatch_table_rewrite_ptr, /* glBufferDataARB */ + epoxy_glBufferPageCommitmentARB_dispatch_table_rewrite_ptr, /* glBufferPageCommitmentARB */ + epoxy_glBufferParameteriAPPLE_dispatch_table_rewrite_ptr, /* glBufferParameteriAPPLE */ + epoxy_glBufferStorage_dispatch_table_rewrite_ptr, /* glBufferStorage */ + epoxy_glBufferStorageEXT_dispatch_table_rewrite_ptr, /* glBufferStorageEXT */ + epoxy_glBufferSubData_dispatch_table_rewrite_ptr, /* glBufferSubData */ + epoxy_glBufferSubDataARB_dispatch_table_rewrite_ptr, /* glBufferSubDataARB */ + epoxy_glCallCommandListNV_dispatch_table_rewrite_ptr, /* glCallCommandListNV */ + epoxy_glCallList_dispatch_table_rewrite_ptr, /* glCallList */ + epoxy_glCallLists_dispatch_table_rewrite_ptr, /* glCallLists */ + epoxy_glCheckFramebufferStatus_dispatch_table_rewrite_ptr, /* glCheckFramebufferStatus */ + epoxy_glCheckFramebufferStatusEXT_dispatch_table_rewrite_ptr, /* glCheckFramebufferStatusEXT */ + epoxy_glCheckFramebufferStatusOES_dispatch_table_rewrite_ptr, /* glCheckFramebufferStatusOES */ + epoxy_glCheckNamedFramebufferStatus_dispatch_table_rewrite_ptr, /* glCheckNamedFramebufferStatus */ + epoxy_glCheckNamedFramebufferStatusEXT_dispatch_table_rewrite_ptr, /* glCheckNamedFramebufferStatusEXT */ + epoxy_glClampColor_dispatch_table_rewrite_ptr, /* glClampColor */ + epoxy_glClampColorARB_dispatch_table_rewrite_ptr, /* glClampColorARB */ + epoxy_glClear_dispatch_table_rewrite_ptr, /* glClear */ + epoxy_glClearAccum_dispatch_table_rewrite_ptr, /* glClearAccum */ + epoxy_glClearAccumxOES_dispatch_table_rewrite_ptr, /* glClearAccumxOES */ + epoxy_glClearBufferData_dispatch_table_rewrite_ptr, /* glClearBufferData */ + epoxy_glClearBufferSubData_dispatch_table_rewrite_ptr, /* glClearBufferSubData */ + epoxy_glClearBufferfi_dispatch_table_rewrite_ptr, /* glClearBufferfi */ + epoxy_glClearBufferfv_dispatch_table_rewrite_ptr, /* glClearBufferfv */ + epoxy_glClearBufferiv_dispatch_table_rewrite_ptr, /* glClearBufferiv */ + epoxy_glClearBufferuiv_dispatch_table_rewrite_ptr, /* glClearBufferuiv */ + epoxy_glClearColor_dispatch_table_rewrite_ptr, /* glClearColor */ + epoxy_glClearColorIiEXT_dispatch_table_rewrite_ptr, /* glClearColorIiEXT */ + epoxy_glClearColorIuiEXT_dispatch_table_rewrite_ptr, /* glClearColorIuiEXT */ + epoxy_glClearColorx_dispatch_table_rewrite_ptr, /* glClearColorx */ + epoxy_glClearColorxOES_dispatch_table_rewrite_ptr, /* glClearColorxOES */ + epoxy_glClearDepth_dispatch_table_rewrite_ptr, /* glClearDepth */ + epoxy_glClearDepthdNV_dispatch_table_rewrite_ptr, /* glClearDepthdNV */ + epoxy_glClearDepthf_dispatch_table_rewrite_ptr, /* glClearDepthf */ + epoxy_glClearDepthfOES_dispatch_table_rewrite_ptr, /* glClearDepthfOES */ + epoxy_glClearDepthx_dispatch_table_rewrite_ptr, /* glClearDepthx */ + epoxy_glClearDepthxOES_dispatch_table_rewrite_ptr, /* glClearDepthxOES */ + epoxy_glClearIndex_dispatch_table_rewrite_ptr, /* glClearIndex */ + epoxy_glClearNamedBufferData_dispatch_table_rewrite_ptr, /* glClearNamedBufferData */ + epoxy_glClearNamedBufferDataEXT_dispatch_table_rewrite_ptr, /* glClearNamedBufferDataEXT */ + epoxy_glClearNamedBufferSubData_dispatch_table_rewrite_ptr, /* glClearNamedBufferSubData */ + epoxy_glClearNamedBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glClearNamedBufferSubDataEXT */ + epoxy_glClearNamedFramebufferfi_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferfi */ + epoxy_glClearNamedFramebufferfv_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferfv */ + epoxy_glClearNamedFramebufferiv_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferiv */ + epoxy_glClearNamedFramebufferuiv_dispatch_table_rewrite_ptr, /* glClearNamedFramebufferuiv */ + epoxy_glClearStencil_dispatch_table_rewrite_ptr, /* glClearStencil */ + epoxy_glClearTexImage_dispatch_table_rewrite_ptr, /* glClearTexImage */ + epoxy_glClearTexSubImage_dispatch_table_rewrite_ptr, /* glClearTexSubImage */ + epoxy_glClientActiveTexture_dispatch_table_rewrite_ptr, /* glClientActiveTexture */ + epoxy_glClientActiveTextureARB_dispatch_table_rewrite_ptr, /* glClientActiveTextureARB */ + epoxy_glClientActiveVertexStreamATI_dispatch_table_rewrite_ptr, /* glClientActiveVertexStreamATI */ + epoxy_glClientAttribDefaultEXT_dispatch_table_rewrite_ptr, /* glClientAttribDefaultEXT */ + epoxy_glClientWaitSync_dispatch_table_rewrite_ptr, /* glClientWaitSync */ + epoxy_glClientWaitSyncAPPLE_dispatch_table_rewrite_ptr, /* glClientWaitSyncAPPLE */ + epoxy_glClipControl_dispatch_table_rewrite_ptr, /* glClipControl */ + epoxy_glClipPlane_dispatch_table_rewrite_ptr, /* glClipPlane */ + epoxy_glClipPlanef_dispatch_table_rewrite_ptr, /* glClipPlanef */ + epoxy_glClipPlanefIMG_dispatch_table_rewrite_ptr, /* glClipPlanefIMG */ + epoxy_glClipPlanefOES_dispatch_table_rewrite_ptr, /* glClipPlanefOES */ + epoxy_glClipPlanex_dispatch_table_rewrite_ptr, /* glClipPlanex */ + epoxy_glClipPlanexIMG_dispatch_table_rewrite_ptr, /* glClipPlanexIMG */ + epoxy_glClipPlanexOES_dispatch_table_rewrite_ptr, /* glClipPlanexOES */ + epoxy_glColor3b_dispatch_table_rewrite_ptr, /* glColor3b */ + epoxy_glColor3bv_dispatch_table_rewrite_ptr, /* glColor3bv */ + epoxy_glColor3d_dispatch_table_rewrite_ptr, /* glColor3d */ + epoxy_glColor3dv_dispatch_table_rewrite_ptr, /* glColor3dv */ + epoxy_glColor3f_dispatch_table_rewrite_ptr, /* glColor3f */ + epoxy_glColor3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glColor3fVertex3fSUN */ + epoxy_glColor3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glColor3fVertex3fvSUN */ + epoxy_glColor3fv_dispatch_table_rewrite_ptr, /* glColor3fv */ + epoxy_glColor3hNV_dispatch_table_rewrite_ptr, /* glColor3hNV */ + epoxy_glColor3hvNV_dispatch_table_rewrite_ptr, /* glColor3hvNV */ + epoxy_glColor3i_dispatch_table_rewrite_ptr, /* glColor3i */ + epoxy_glColor3iv_dispatch_table_rewrite_ptr, /* glColor3iv */ + epoxy_glColor3s_dispatch_table_rewrite_ptr, /* glColor3s */ + epoxy_glColor3sv_dispatch_table_rewrite_ptr, /* glColor3sv */ + epoxy_glColor3ub_dispatch_table_rewrite_ptr, /* glColor3ub */ + epoxy_glColor3ubv_dispatch_table_rewrite_ptr, /* glColor3ubv */ + epoxy_glColor3ui_dispatch_table_rewrite_ptr, /* glColor3ui */ + epoxy_glColor3uiv_dispatch_table_rewrite_ptr, /* glColor3uiv */ + epoxy_glColor3us_dispatch_table_rewrite_ptr, /* glColor3us */ + epoxy_glColor3usv_dispatch_table_rewrite_ptr, /* glColor3usv */ + epoxy_glColor3xOES_dispatch_table_rewrite_ptr, /* glColor3xOES */ + epoxy_glColor3xvOES_dispatch_table_rewrite_ptr, /* glColor3xvOES */ + epoxy_glColor4b_dispatch_table_rewrite_ptr, /* glColor4b */ + epoxy_glColor4bv_dispatch_table_rewrite_ptr, /* glColor4bv */ + epoxy_glColor4d_dispatch_table_rewrite_ptr, /* glColor4d */ + epoxy_glColor4dv_dispatch_table_rewrite_ptr, /* glColor4dv */ + epoxy_glColor4f_dispatch_table_rewrite_ptr, /* glColor4f */ + epoxy_glColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glColor4fNormal3fVertex3fSUN */ + epoxy_glColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glColor4fNormal3fVertex3fvSUN */ + epoxy_glColor4fv_dispatch_table_rewrite_ptr, /* glColor4fv */ + epoxy_glColor4hNV_dispatch_table_rewrite_ptr, /* glColor4hNV */ + epoxy_glColor4hvNV_dispatch_table_rewrite_ptr, /* glColor4hvNV */ + epoxy_glColor4i_dispatch_table_rewrite_ptr, /* glColor4i */ + epoxy_glColor4iv_dispatch_table_rewrite_ptr, /* glColor4iv */ + epoxy_glColor4s_dispatch_table_rewrite_ptr, /* glColor4s */ + epoxy_glColor4sv_dispatch_table_rewrite_ptr, /* glColor4sv */ + epoxy_glColor4ub_dispatch_table_rewrite_ptr, /* glColor4ub */ + epoxy_glColor4ubVertex2fSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex2fSUN */ + epoxy_glColor4ubVertex2fvSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex2fvSUN */ + epoxy_glColor4ubVertex3fSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex3fSUN */ + epoxy_glColor4ubVertex3fvSUN_dispatch_table_rewrite_ptr, /* glColor4ubVertex3fvSUN */ + epoxy_glColor4ubv_dispatch_table_rewrite_ptr, /* glColor4ubv */ + epoxy_glColor4ui_dispatch_table_rewrite_ptr, /* glColor4ui */ + epoxy_glColor4uiv_dispatch_table_rewrite_ptr, /* glColor4uiv */ + epoxy_glColor4us_dispatch_table_rewrite_ptr, /* glColor4us */ + epoxy_glColor4usv_dispatch_table_rewrite_ptr, /* glColor4usv */ + epoxy_glColor4x_dispatch_table_rewrite_ptr, /* glColor4x */ + epoxy_glColor4xOES_dispatch_table_rewrite_ptr, /* glColor4xOES */ + epoxy_glColor4xvOES_dispatch_table_rewrite_ptr, /* glColor4xvOES */ + epoxy_glColorFormatNV_dispatch_table_rewrite_ptr, /* glColorFormatNV */ + epoxy_glColorFragmentOp1ATI_dispatch_table_rewrite_ptr, /* glColorFragmentOp1ATI */ + epoxy_glColorFragmentOp2ATI_dispatch_table_rewrite_ptr, /* glColorFragmentOp2ATI */ + epoxy_glColorFragmentOp3ATI_dispatch_table_rewrite_ptr, /* glColorFragmentOp3ATI */ + epoxy_glColorMask_dispatch_table_rewrite_ptr, /* glColorMask */ + epoxy_glColorMaskIndexedEXT_dispatch_table_rewrite_ptr, /* glColorMaskIndexedEXT */ + epoxy_glColorMaski_dispatch_table_rewrite_ptr, /* glColorMaski */ + epoxy_glColorMaskiEXT_dispatch_table_rewrite_ptr, /* glColorMaskiEXT */ + epoxy_glColorMaskiOES_dispatch_table_rewrite_ptr, /* glColorMaskiOES */ + epoxy_glColorMaterial_dispatch_table_rewrite_ptr, /* glColorMaterial */ + epoxy_glColorP3ui_dispatch_table_rewrite_ptr, /* glColorP3ui */ + epoxy_glColorP3uiv_dispatch_table_rewrite_ptr, /* glColorP3uiv */ + epoxy_glColorP4ui_dispatch_table_rewrite_ptr, /* glColorP4ui */ + epoxy_glColorP4uiv_dispatch_table_rewrite_ptr, /* glColorP4uiv */ + epoxy_glColorPointer_dispatch_table_rewrite_ptr, /* glColorPointer */ + epoxy_glColorPointerEXT_dispatch_table_rewrite_ptr, /* glColorPointerEXT */ + epoxy_glColorPointerListIBM_dispatch_table_rewrite_ptr, /* glColorPointerListIBM */ + epoxy_glColorPointervINTEL_dispatch_table_rewrite_ptr, /* glColorPointervINTEL */ + epoxy_glColorSubTable_dispatch_table_rewrite_ptr, /* glColorSubTable */ + epoxy_glColorSubTableEXT_dispatch_table_rewrite_ptr, /* glColorSubTableEXT */ + epoxy_glColorTable_dispatch_table_rewrite_ptr, /* glColorTable */ + epoxy_glColorTableEXT_dispatch_table_rewrite_ptr, /* glColorTableEXT */ + epoxy_glColorTableParameterfv_dispatch_table_rewrite_ptr, /* glColorTableParameterfv */ + epoxy_glColorTableParameterfvSGI_dispatch_table_rewrite_ptr, /* glColorTableParameterfvSGI */ + epoxy_glColorTableParameteriv_dispatch_table_rewrite_ptr, /* glColorTableParameteriv */ + epoxy_glColorTableParameterivSGI_dispatch_table_rewrite_ptr, /* glColorTableParameterivSGI */ + epoxy_glColorTableSGI_dispatch_table_rewrite_ptr, /* glColorTableSGI */ + epoxy_glCombinerInputNV_dispatch_table_rewrite_ptr, /* glCombinerInputNV */ + epoxy_glCombinerOutputNV_dispatch_table_rewrite_ptr, /* glCombinerOutputNV */ + epoxy_glCombinerParameterfNV_dispatch_table_rewrite_ptr, /* glCombinerParameterfNV */ + epoxy_glCombinerParameterfvNV_dispatch_table_rewrite_ptr, /* glCombinerParameterfvNV */ + epoxy_glCombinerParameteriNV_dispatch_table_rewrite_ptr, /* glCombinerParameteriNV */ + epoxy_glCombinerParameterivNV_dispatch_table_rewrite_ptr, /* glCombinerParameterivNV */ + epoxy_glCombinerStageParameterfvNV_dispatch_table_rewrite_ptr, /* glCombinerStageParameterfvNV */ + epoxy_glCommandListSegmentsNV_dispatch_table_rewrite_ptr, /* glCommandListSegmentsNV */ + epoxy_glCompileCommandListNV_dispatch_table_rewrite_ptr, /* glCompileCommandListNV */ + epoxy_glCompileShader_dispatch_table_rewrite_ptr, /* glCompileShader */ + epoxy_glCompileShaderARB_dispatch_table_rewrite_ptr, /* glCompileShaderARB */ + epoxy_glCompileShaderIncludeARB_dispatch_table_rewrite_ptr, /* glCompileShaderIncludeARB */ + epoxy_glCompressedMultiTexImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexImage1DEXT */ + epoxy_glCompressedMultiTexImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexImage2DEXT */ + epoxy_glCompressedMultiTexImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexImage3DEXT */ + epoxy_glCompressedMultiTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexSubImage1DEXT */ + epoxy_glCompressedMultiTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexSubImage2DEXT */ + epoxy_glCompressedMultiTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedMultiTexSubImage3DEXT */ + epoxy_glCompressedTexImage1D_dispatch_table_rewrite_ptr, /* glCompressedTexImage1D */ + epoxy_glCompressedTexImage1DARB_dispatch_table_rewrite_ptr, /* glCompressedTexImage1DARB */ + epoxy_glCompressedTexImage2D_dispatch_table_rewrite_ptr, /* glCompressedTexImage2D */ + epoxy_glCompressedTexImage2DARB_dispatch_table_rewrite_ptr, /* glCompressedTexImage2DARB */ + epoxy_glCompressedTexImage3D_dispatch_table_rewrite_ptr, /* glCompressedTexImage3D */ + epoxy_glCompressedTexImage3DARB_dispatch_table_rewrite_ptr, /* glCompressedTexImage3DARB */ + epoxy_glCompressedTexImage3DOES_dispatch_table_rewrite_ptr, /* glCompressedTexImage3DOES */ + epoxy_glCompressedTexSubImage1D_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage1D */ + epoxy_glCompressedTexSubImage1DARB_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage1DARB */ + epoxy_glCompressedTexSubImage2D_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage2D */ + epoxy_glCompressedTexSubImage2DARB_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage2DARB */ + epoxy_glCompressedTexSubImage3D_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage3D */ + epoxy_glCompressedTexSubImage3DARB_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage3DARB */ + epoxy_glCompressedTexSubImage3DOES_dispatch_table_rewrite_ptr, /* glCompressedTexSubImage3DOES */ + epoxy_glCompressedTextureImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureImage1DEXT */ + epoxy_glCompressedTextureImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureImage2DEXT */ + epoxy_glCompressedTextureImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureImage3DEXT */ + epoxy_glCompressedTextureSubImage1D_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage1D */ + epoxy_glCompressedTextureSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage1DEXT */ + epoxy_glCompressedTextureSubImage2D_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage2D */ + epoxy_glCompressedTextureSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage2DEXT */ + epoxy_glCompressedTextureSubImage3D_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage3D */ + epoxy_glCompressedTextureSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCompressedTextureSubImage3DEXT */ + epoxy_glConservativeRasterParameterfNV_dispatch_table_rewrite_ptr, /* glConservativeRasterParameterfNV */ + epoxy_glConvolutionFilter1D_dispatch_table_rewrite_ptr, /* glConvolutionFilter1D */ + epoxy_glConvolutionFilter1DEXT_dispatch_table_rewrite_ptr, /* glConvolutionFilter1DEXT */ + epoxy_glConvolutionFilter2D_dispatch_table_rewrite_ptr, /* glConvolutionFilter2D */ + epoxy_glConvolutionFilter2DEXT_dispatch_table_rewrite_ptr, /* glConvolutionFilter2DEXT */ + epoxy_glConvolutionParameterf_dispatch_table_rewrite_ptr, /* glConvolutionParameterf */ + epoxy_glConvolutionParameterfEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameterfEXT */ + epoxy_glConvolutionParameterfv_dispatch_table_rewrite_ptr, /* glConvolutionParameterfv */ + epoxy_glConvolutionParameterfvEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameterfvEXT */ + epoxy_glConvolutionParameteri_dispatch_table_rewrite_ptr, /* glConvolutionParameteri */ + epoxy_glConvolutionParameteriEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameteriEXT */ + epoxy_glConvolutionParameteriv_dispatch_table_rewrite_ptr, /* glConvolutionParameteriv */ + epoxy_glConvolutionParameterivEXT_dispatch_table_rewrite_ptr, /* glConvolutionParameterivEXT */ + epoxy_glConvolutionParameterxOES_dispatch_table_rewrite_ptr, /* glConvolutionParameterxOES */ + epoxy_glConvolutionParameterxvOES_dispatch_table_rewrite_ptr, /* glConvolutionParameterxvOES */ + epoxy_glCopyBufferSubData_dispatch_table_rewrite_ptr, /* glCopyBufferSubData */ + epoxy_glCopyBufferSubDataNV_dispatch_table_rewrite_ptr, /* glCopyBufferSubDataNV */ + epoxy_glCopyColorSubTable_dispatch_table_rewrite_ptr, /* glCopyColorSubTable */ + epoxy_glCopyColorSubTableEXT_dispatch_table_rewrite_ptr, /* glCopyColorSubTableEXT */ + epoxy_glCopyColorTable_dispatch_table_rewrite_ptr, /* glCopyColorTable */ + epoxy_glCopyColorTableSGI_dispatch_table_rewrite_ptr, /* glCopyColorTableSGI */ + epoxy_glCopyConvolutionFilter1D_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter1D */ + epoxy_glCopyConvolutionFilter1DEXT_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter1DEXT */ + epoxy_glCopyConvolutionFilter2D_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter2D */ + epoxy_glCopyConvolutionFilter2DEXT_dispatch_table_rewrite_ptr, /* glCopyConvolutionFilter2DEXT */ + epoxy_glCopyImageSubData_dispatch_table_rewrite_ptr, /* glCopyImageSubData */ + epoxy_glCopyImageSubDataEXT_dispatch_table_rewrite_ptr, /* glCopyImageSubDataEXT */ + epoxy_glCopyImageSubDataNV_dispatch_table_rewrite_ptr, /* glCopyImageSubDataNV */ + epoxy_glCopyImageSubDataOES_dispatch_table_rewrite_ptr, /* glCopyImageSubDataOES */ + epoxy_glCopyMultiTexImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexImage1DEXT */ + epoxy_glCopyMultiTexImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexImage2DEXT */ + epoxy_glCopyMultiTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexSubImage1DEXT */ + epoxy_glCopyMultiTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexSubImage2DEXT */ + epoxy_glCopyMultiTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCopyMultiTexSubImage3DEXT */ + epoxy_glCopyNamedBufferSubData_dispatch_table_rewrite_ptr, /* glCopyNamedBufferSubData */ + epoxy_glCopyPathNV_dispatch_table_rewrite_ptr, /* glCopyPathNV */ + epoxy_glCopyPixels_dispatch_table_rewrite_ptr, /* glCopyPixels */ + epoxy_glCopyTexImage1D_dispatch_table_rewrite_ptr, /* glCopyTexImage1D */ + epoxy_glCopyTexImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTexImage1DEXT */ + epoxy_glCopyTexImage2D_dispatch_table_rewrite_ptr, /* glCopyTexImage2D */ + epoxy_glCopyTexImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTexImage2DEXT */ + epoxy_glCopyTexSubImage1D_dispatch_table_rewrite_ptr, /* glCopyTexSubImage1D */ + epoxy_glCopyTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTexSubImage1DEXT */ + epoxy_glCopyTexSubImage2D_dispatch_table_rewrite_ptr, /* glCopyTexSubImage2D */ + epoxy_glCopyTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTexSubImage2DEXT */ + epoxy_glCopyTexSubImage3D_dispatch_table_rewrite_ptr, /* glCopyTexSubImage3D */ + epoxy_glCopyTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCopyTexSubImage3DEXT */ + epoxy_glCopyTexSubImage3DOES_dispatch_table_rewrite_ptr, /* glCopyTexSubImage3DOES */ + epoxy_glCopyTextureImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureImage1DEXT */ + epoxy_glCopyTextureImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureImage2DEXT */ + epoxy_glCopyTextureLevelsAPPLE_dispatch_table_rewrite_ptr, /* glCopyTextureLevelsAPPLE */ + epoxy_glCopyTextureSubImage1D_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage1D */ + epoxy_glCopyTextureSubImage1DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage1DEXT */ + epoxy_glCopyTextureSubImage2D_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage2D */ + epoxy_glCopyTextureSubImage2DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage2DEXT */ + epoxy_glCopyTextureSubImage3D_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage3D */ + epoxy_glCopyTextureSubImage3DEXT_dispatch_table_rewrite_ptr, /* glCopyTextureSubImage3DEXT */ + epoxy_glCoverFillPathInstancedNV_dispatch_table_rewrite_ptr, /* glCoverFillPathInstancedNV */ + epoxy_glCoverFillPathNV_dispatch_table_rewrite_ptr, /* glCoverFillPathNV */ + epoxy_glCoverStrokePathInstancedNV_dispatch_table_rewrite_ptr, /* glCoverStrokePathInstancedNV */ + epoxy_glCoverStrokePathNV_dispatch_table_rewrite_ptr, /* glCoverStrokePathNV */ + epoxy_glCoverageMaskNV_dispatch_table_rewrite_ptr, /* glCoverageMaskNV */ + epoxy_glCoverageModulationNV_dispatch_table_rewrite_ptr, /* glCoverageModulationNV */ + epoxy_glCoverageModulationTableNV_dispatch_table_rewrite_ptr, /* glCoverageModulationTableNV */ + epoxy_glCoverageOperationNV_dispatch_table_rewrite_ptr, /* glCoverageOperationNV */ + epoxy_glCreateBuffers_dispatch_table_rewrite_ptr, /* glCreateBuffers */ + epoxy_glCreateCommandListsNV_dispatch_table_rewrite_ptr, /* glCreateCommandListsNV */ + epoxy_glCreateFramebuffers_dispatch_table_rewrite_ptr, /* glCreateFramebuffers */ + epoxy_glCreatePerfQueryINTEL_dispatch_table_rewrite_ptr, /* glCreatePerfQueryINTEL */ + epoxy_glCreateProgram_dispatch_table_rewrite_ptr, /* glCreateProgram */ + epoxy_glCreateProgramObjectARB_dispatch_table_rewrite_ptr, /* glCreateProgramObjectARB */ + epoxy_glCreateProgramPipelines_dispatch_table_rewrite_ptr, /* glCreateProgramPipelines */ + epoxy_glCreateQueries_dispatch_table_rewrite_ptr, /* glCreateQueries */ + epoxy_glCreateRenderbuffers_dispatch_table_rewrite_ptr, /* glCreateRenderbuffers */ + epoxy_glCreateSamplers_dispatch_table_rewrite_ptr, /* glCreateSamplers */ + epoxy_glCreateShader_dispatch_table_rewrite_ptr, /* glCreateShader */ + epoxy_glCreateShaderObjectARB_dispatch_table_rewrite_ptr, /* glCreateShaderObjectARB */ + epoxy_glCreateShaderProgramEXT_dispatch_table_rewrite_ptr, /* glCreateShaderProgramEXT */ + epoxy_glCreateShaderProgramv_dispatch_table_rewrite_ptr, /* glCreateShaderProgramv */ + epoxy_glCreateShaderProgramvEXT_dispatch_table_rewrite_ptr, /* glCreateShaderProgramvEXT */ + epoxy_glCreateStatesNV_dispatch_table_rewrite_ptr, /* glCreateStatesNV */ + epoxy_glCreateSyncFromCLeventARB_dispatch_table_rewrite_ptr, /* glCreateSyncFromCLeventARB */ + epoxy_glCreateTextures_dispatch_table_rewrite_ptr, /* glCreateTextures */ + epoxy_glCreateTransformFeedbacks_dispatch_table_rewrite_ptr, /* glCreateTransformFeedbacks */ + epoxy_glCreateVertexArrays_dispatch_table_rewrite_ptr, /* glCreateVertexArrays */ + epoxy_glCullFace_dispatch_table_rewrite_ptr, /* glCullFace */ + epoxy_glCullParameterdvEXT_dispatch_table_rewrite_ptr, /* glCullParameterdvEXT */ + epoxy_glCullParameterfvEXT_dispatch_table_rewrite_ptr, /* glCullParameterfvEXT */ + epoxy_glCurrentPaletteMatrixARB_dispatch_table_rewrite_ptr, /* glCurrentPaletteMatrixARB */ + epoxy_glCurrentPaletteMatrixOES_dispatch_table_rewrite_ptr, /* glCurrentPaletteMatrixOES */ + epoxy_glDebugMessageCallback_dispatch_table_rewrite_ptr, /* glDebugMessageCallback */ + epoxy_glDebugMessageCallbackAMD_dispatch_table_rewrite_ptr, /* glDebugMessageCallbackAMD */ + epoxy_glDebugMessageCallbackARB_dispatch_table_rewrite_ptr, /* glDebugMessageCallbackARB */ + epoxy_glDebugMessageCallbackKHR_dispatch_table_rewrite_ptr, /* glDebugMessageCallbackKHR */ + epoxy_glDebugMessageControl_dispatch_table_rewrite_ptr, /* glDebugMessageControl */ + epoxy_glDebugMessageControlARB_dispatch_table_rewrite_ptr, /* glDebugMessageControlARB */ + epoxy_glDebugMessageControlKHR_dispatch_table_rewrite_ptr, /* glDebugMessageControlKHR */ + epoxy_glDebugMessageEnableAMD_dispatch_table_rewrite_ptr, /* glDebugMessageEnableAMD */ + epoxy_glDebugMessageInsert_dispatch_table_rewrite_ptr, /* glDebugMessageInsert */ + epoxy_glDebugMessageInsertAMD_dispatch_table_rewrite_ptr, /* glDebugMessageInsertAMD */ + epoxy_glDebugMessageInsertARB_dispatch_table_rewrite_ptr, /* glDebugMessageInsertARB */ + epoxy_glDebugMessageInsertKHR_dispatch_table_rewrite_ptr, /* glDebugMessageInsertKHR */ + epoxy_glDeformSGIX_dispatch_table_rewrite_ptr, /* glDeformSGIX */ + epoxy_glDeformationMap3dSGIX_dispatch_table_rewrite_ptr, /* glDeformationMap3dSGIX */ + epoxy_glDeformationMap3fSGIX_dispatch_table_rewrite_ptr, /* glDeformationMap3fSGIX */ + epoxy_glDeleteAsyncMarkersSGIX_dispatch_table_rewrite_ptr, /* glDeleteAsyncMarkersSGIX */ + epoxy_glDeleteBuffers_dispatch_table_rewrite_ptr, /* glDeleteBuffers */ + epoxy_glDeleteBuffersARB_dispatch_table_rewrite_ptr, /* glDeleteBuffersARB */ + epoxy_glDeleteCommandListsNV_dispatch_table_rewrite_ptr, /* glDeleteCommandListsNV */ + epoxy_glDeleteFencesAPPLE_dispatch_table_rewrite_ptr, /* glDeleteFencesAPPLE */ + epoxy_glDeleteFencesNV_dispatch_table_rewrite_ptr, /* glDeleteFencesNV */ + epoxy_glDeleteFragmentShaderATI_dispatch_table_rewrite_ptr, /* glDeleteFragmentShaderATI */ + epoxy_glDeleteFramebuffers_dispatch_table_rewrite_ptr, /* glDeleteFramebuffers */ + epoxy_glDeleteFramebuffersEXT_dispatch_table_rewrite_ptr, /* glDeleteFramebuffersEXT */ + epoxy_glDeleteFramebuffersOES_dispatch_table_rewrite_ptr, /* glDeleteFramebuffersOES */ + epoxy_glDeleteLists_dispatch_table_rewrite_ptr, /* glDeleteLists */ + epoxy_glDeleteNamedStringARB_dispatch_table_rewrite_ptr, /* glDeleteNamedStringARB */ + epoxy_glDeleteNamesAMD_dispatch_table_rewrite_ptr, /* glDeleteNamesAMD */ + epoxy_glDeleteObjectARB_dispatch_table_rewrite_ptr, /* glDeleteObjectARB */ + epoxy_glDeleteOcclusionQueriesNV_dispatch_table_rewrite_ptr, /* glDeleteOcclusionQueriesNV */ + epoxy_glDeletePathsNV_dispatch_table_rewrite_ptr, /* glDeletePathsNV */ + epoxy_glDeletePerfMonitorsAMD_dispatch_table_rewrite_ptr, /* glDeletePerfMonitorsAMD */ + epoxy_glDeletePerfQueryINTEL_dispatch_table_rewrite_ptr, /* glDeletePerfQueryINTEL */ + epoxy_glDeleteProgram_dispatch_table_rewrite_ptr, /* glDeleteProgram */ + epoxy_glDeleteProgramPipelines_dispatch_table_rewrite_ptr, /* glDeleteProgramPipelines */ + epoxy_glDeleteProgramPipelinesEXT_dispatch_table_rewrite_ptr, /* glDeleteProgramPipelinesEXT */ + epoxy_glDeleteProgramsARB_dispatch_table_rewrite_ptr, /* glDeleteProgramsARB */ + epoxy_glDeleteProgramsNV_dispatch_table_rewrite_ptr, /* glDeleteProgramsNV */ + epoxy_glDeleteQueries_dispatch_table_rewrite_ptr, /* glDeleteQueries */ + epoxy_glDeleteQueriesARB_dispatch_table_rewrite_ptr, /* glDeleteQueriesARB */ + epoxy_glDeleteQueriesEXT_dispatch_table_rewrite_ptr, /* glDeleteQueriesEXT */ + epoxy_glDeleteRenderbuffers_dispatch_table_rewrite_ptr, /* glDeleteRenderbuffers */ + epoxy_glDeleteRenderbuffersEXT_dispatch_table_rewrite_ptr, /* glDeleteRenderbuffersEXT */ + epoxy_glDeleteRenderbuffersOES_dispatch_table_rewrite_ptr, /* glDeleteRenderbuffersOES */ + epoxy_glDeleteSamplers_dispatch_table_rewrite_ptr, /* glDeleteSamplers */ + epoxy_glDeleteShader_dispatch_table_rewrite_ptr, /* glDeleteShader */ + epoxy_glDeleteStatesNV_dispatch_table_rewrite_ptr, /* glDeleteStatesNV */ + epoxy_glDeleteSync_dispatch_table_rewrite_ptr, /* glDeleteSync */ + epoxy_glDeleteSyncAPPLE_dispatch_table_rewrite_ptr, /* glDeleteSyncAPPLE */ + epoxy_glDeleteTextures_dispatch_table_rewrite_ptr, /* glDeleteTextures */ + epoxy_glDeleteTexturesEXT_dispatch_table_rewrite_ptr, /* glDeleteTexturesEXT */ + epoxy_glDeleteTransformFeedbacks_dispatch_table_rewrite_ptr, /* glDeleteTransformFeedbacks */ + epoxy_glDeleteTransformFeedbacksNV_dispatch_table_rewrite_ptr, /* glDeleteTransformFeedbacksNV */ + epoxy_glDeleteVertexArrays_dispatch_table_rewrite_ptr, /* glDeleteVertexArrays */ + epoxy_glDeleteVertexArraysAPPLE_dispatch_table_rewrite_ptr, /* glDeleteVertexArraysAPPLE */ + epoxy_glDeleteVertexArraysOES_dispatch_table_rewrite_ptr, /* glDeleteVertexArraysOES */ + epoxy_glDeleteVertexShaderEXT_dispatch_table_rewrite_ptr, /* glDeleteVertexShaderEXT */ + epoxy_glDepthBoundsEXT_dispatch_table_rewrite_ptr, /* glDepthBoundsEXT */ + epoxy_glDepthBoundsdNV_dispatch_table_rewrite_ptr, /* glDepthBoundsdNV */ + epoxy_glDepthFunc_dispatch_table_rewrite_ptr, /* glDepthFunc */ + epoxy_glDepthMask_dispatch_table_rewrite_ptr, /* glDepthMask */ + epoxy_glDepthRange_dispatch_table_rewrite_ptr, /* glDepthRange */ + epoxy_glDepthRangeArrayfvNV_dispatch_table_rewrite_ptr, /* glDepthRangeArrayfvNV */ + epoxy_glDepthRangeArrayv_dispatch_table_rewrite_ptr, /* glDepthRangeArrayv */ + epoxy_glDepthRangeIndexed_dispatch_table_rewrite_ptr, /* glDepthRangeIndexed */ + epoxy_glDepthRangeIndexedfNV_dispatch_table_rewrite_ptr, /* glDepthRangeIndexedfNV */ + epoxy_glDepthRangedNV_dispatch_table_rewrite_ptr, /* glDepthRangedNV */ + epoxy_glDepthRangef_dispatch_table_rewrite_ptr, /* glDepthRangef */ + epoxy_glDepthRangefOES_dispatch_table_rewrite_ptr, /* glDepthRangefOES */ + epoxy_glDepthRangex_dispatch_table_rewrite_ptr, /* glDepthRangex */ + epoxy_glDepthRangexOES_dispatch_table_rewrite_ptr, /* glDepthRangexOES */ + epoxy_glDetachObjectARB_dispatch_table_rewrite_ptr, /* glDetachObjectARB */ + epoxy_glDetachShader_dispatch_table_rewrite_ptr, /* glDetachShader */ + epoxy_glDetailTexFuncSGIS_dispatch_table_rewrite_ptr, /* glDetailTexFuncSGIS */ + epoxy_glDisable_dispatch_table_rewrite_ptr, /* glDisable */ + epoxy_glDisableClientState_dispatch_table_rewrite_ptr, /* glDisableClientState */ + epoxy_glDisableClientStateIndexedEXT_dispatch_table_rewrite_ptr, /* glDisableClientStateIndexedEXT */ + epoxy_glDisableClientStateiEXT_dispatch_table_rewrite_ptr, /* glDisableClientStateiEXT */ + epoxy_glDisableDriverControlQCOM_dispatch_table_rewrite_ptr, /* glDisableDriverControlQCOM */ + epoxy_glDisableIndexedEXT_dispatch_table_rewrite_ptr, /* glDisableIndexedEXT */ + epoxy_glDisableVariantClientStateEXT_dispatch_table_rewrite_ptr, /* glDisableVariantClientStateEXT */ + epoxy_glDisableVertexArrayAttrib_dispatch_table_rewrite_ptr, /* glDisableVertexArrayAttrib */ + epoxy_glDisableVertexArrayAttribEXT_dispatch_table_rewrite_ptr, /* glDisableVertexArrayAttribEXT */ + epoxy_glDisableVertexArrayEXT_dispatch_table_rewrite_ptr, /* glDisableVertexArrayEXT */ + epoxy_glDisableVertexAttribAPPLE_dispatch_table_rewrite_ptr, /* glDisableVertexAttribAPPLE */ + epoxy_glDisableVertexAttribArray_dispatch_table_rewrite_ptr, /* glDisableVertexAttribArray */ + epoxy_glDisableVertexAttribArrayARB_dispatch_table_rewrite_ptr, /* glDisableVertexAttribArrayARB */ + epoxy_glDisablei_dispatch_table_rewrite_ptr, /* glDisablei */ + epoxy_glDisableiEXT_dispatch_table_rewrite_ptr, /* glDisableiEXT */ + epoxy_glDisableiNV_dispatch_table_rewrite_ptr, /* glDisableiNV */ + epoxy_glDisableiOES_dispatch_table_rewrite_ptr, /* glDisableiOES */ + epoxy_glDiscardFramebufferEXT_dispatch_table_rewrite_ptr, /* glDiscardFramebufferEXT */ + epoxy_glDispatchCompute_dispatch_table_rewrite_ptr, /* glDispatchCompute */ + epoxy_glDispatchComputeGroupSizeARB_dispatch_table_rewrite_ptr, /* glDispatchComputeGroupSizeARB */ + epoxy_glDispatchComputeIndirect_dispatch_table_rewrite_ptr, /* glDispatchComputeIndirect */ + epoxy_glDrawArrays_dispatch_table_rewrite_ptr, /* glDrawArrays */ + epoxy_glDrawArraysEXT_dispatch_table_rewrite_ptr, /* glDrawArraysEXT */ + epoxy_glDrawArraysIndirect_dispatch_table_rewrite_ptr, /* glDrawArraysIndirect */ + epoxy_glDrawArraysInstanced_dispatch_table_rewrite_ptr, /* glDrawArraysInstanced */ + epoxy_glDrawArraysInstancedANGLE_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedANGLE */ + epoxy_glDrawArraysInstancedARB_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedARB */ + epoxy_glDrawArraysInstancedBaseInstance_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedBaseInstance */ + epoxy_glDrawArraysInstancedBaseInstanceEXT_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedBaseInstanceEXT */ + epoxy_glDrawArraysInstancedEXT_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedEXT */ + epoxy_glDrawArraysInstancedNV_dispatch_table_rewrite_ptr, /* glDrawArraysInstancedNV */ + epoxy_glDrawBuffer_dispatch_table_rewrite_ptr, /* glDrawBuffer */ + epoxy_glDrawBuffers_dispatch_table_rewrite_ptr, /* glDrawBuffers */ + epoxy_glDrawBuffersARB_dispatch_table_rewrite_ptr, /* glDrawBuffersARB */ + epoxy_glDrawBuffersATI_dispatch_table_rewrite_ptr, /* glDrawBuffersATI */ + epoxy_glDrawBuffersEXT_dispatch_table_rewrite_ptr, /* glDrawBuffersEXT */ + epoxy_glDrawBuffersIndexedEXT_dispatch_table_rewrite_ptr, /* glDrawBuffersIndexedEXT */ + epoxy_glDrawBuffersNV_dispatch_table_rewrite_ptr, /* glDrawBuffersNV */ + epoxy_glDrawCommandsAddressNV_dispatch_table_rewrite_ptr, /* glDrawCommandsAddressNV */ + epoxy_glDrawCommandsNV_dispatch_table_rewrite_ptr, /* glDrawCommandsNV */ + epoxy_glDrawCommandsStatesAddressNV_dispatch_table_rewrite_ptr, /* glDrawCommandsStatesAddressNV */ + epoxy_glDrawCommandsStatesNV_dispatch_table_rewrite_ptr, /* glDrawCommandsStatesNV */ + epoxy_glDrawElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glDrawElementArrayAPPLE */ + epoxy_glDrawElementArrayATI_dispatch_table_rewrite_ptr, /* glDrawElementArrayATI */ + epoxy_glDrawElements_dispatch_table_rewrite_ptr, /* glDrawElements */ + epoxy_glDrawElementsBaseVertex_dispatch_table_rewrite_ptr, /* glDrawElementsBaseVertex */ + epoxy_glDrawElementsBaseVertexEXT_dispatch_table_rewrite_ptr, /* glDrawElementsBaseVertexEXT */ + epoxy_glDrawElementsBaseVertexOES_dispatch_table_rewrite_ptr, /* glDrawElementsBaseVertexOES */ + epoxy_glDrawElementsIndirect_dispatch_table_rewrite_ptr, /* glDrawElementsIndirect */ + epoxy_glDrawElementsInstanced_dispatch_table_rewrite_ptr, /* glDrawElementsInstanced */ + epoxy_glDrawElementsInstancedANGLE_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedANGLE */ + epoxy_glDrawElementsInstancedARB_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedARB */ + epoxy_glDrawElementsInstancedBaseInstance_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseInstance */ + epoxy_glDrawElementsInstancedBaseInstanceEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseInstanceEXT */ + epoxy_glDrawElementsInstancedBaseVertex_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertex */ + epoxy_glDrawElementsInstancedBaseVertexBaseInstance_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexBaseInstance */ + epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexBaseInstanceEXT */ + epoxy_glDrawElementsInstancedBaseVertexEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexEXT */ + epoxy_glDrawElementsInstancedBaseVertexOES_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedBaseVertexOES */ + epoxy_glDrawElementsInstancedEXT_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedEXT */ + epoxy_glDrawElementsInstancedNV_dispatch_table_rewrite_ptr, /* glDrawElementsInstancedNV */ + epoxy_glDrawMeshArraysSUN_dispatch_table_rewrite_ptr, /* glDrawMeshArraysSUN */ + epoxy_glDrawPixels_dispatch_table_rewrite_ptr, /* glDrawPixels */ + epoxy_glDrawRangeElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glDrawRangeElementArrayAPPLE */ + epoxy_glDrawRangeElementArrayATI_dispatch_table_rewrite_ptr, /* glDrawRangeElementArrayATI */ + epoxy_glDrawRangeElements_dispatch_table_rewrite_ptr, /* glDrawRangeElements */ + epoxy_glDrawRangeElementsBaseVertex_dispatch_table_rewrite_ptr, /* glDrawRangeElementsBaseVertex */ + epoxy_glDrawRangeElementsBaseVertexEXT_dispatch_table_rewrite_ptr, /* glDrawRangeElementsBaseVertexEXT */ + epoxy_glDrawRangeElementsBaseVertexOES_dispatch_table_rewrite_ptr, /* glDrawRangeElementsBaseVertexOES */ + epoxy_glDrawRangeElementsEXT_dispatch_table_rewrite_ptr, /* glDrawRangeElementsEXT */ + epoxy_glDrawTexfOES_dispatch_table_rewrite_ptr, /* glDrawTexfOES */ + epoxy_glDrawTexfvOES_dispatch_table_rewrite_ptr, /* glDrawTexfvOES */ + epoxy_glDrawTexiOES_dispatch_table_rewrite_ptr, /* glDrawTexiOES */ + epoxy_glDrawTexivOES_dispatch_table_rewrite_ptr, /* glDrawTexivOES */ + epoxy_glDrawTexsOES_dispatch_table_rewrite_ptr, /* glDrawTexsOES */ + epoxy_glDrawTexsvOES_dispatch_table_rewrite_ptr, /* glDrawTexsvOES */ + epoxy_glDrawTextureNV_dispatch_table_rewrite_ptr, /* glDrawTextureNV */ + epoxy_glDrawTexxOES_dispatch_table_rewrite_ptr, /* glDrawTexxOES */ + epoxy_glDrawTexxvOES_dispatch_table_rewrite_ptr, /* glDrawTexxvOES */ + epoxy_glDrawTransformFeedback_dispatch_table_rewrite_ptr, /* glDrawTransformFeedback */ + epoxy_glDrawTransformFeedbackInstanced_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackInstanced */ + epoxy_glDrawTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackNV */ + epoxy_glDrawTransformFeedbackStream_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackStream */ + epoxy_glDrawTransformFeedbackStreamInstanced_dispatch_table_rewrite_ptr, /* glDrawTransformFeedbackStreamInstanced */ + epoxy_glEGLImageTargetRenderbufferStorageOES_dispatch_table_rewrite_ptr, /* glEGLImageTargetRenderbufferStorageOES */ + epoxy_glEGLImageTargetTexture2DOES_dispatch_table_rewrite_ptr, /* glEGLImageTargetTexture2DOES */ + epoxy_glEdgeFlag_dispatch_table_rewrite_ptr, /* glEdgeFlag */ + epoxy_glEdgeFlagFormatNV_dispatch_table_rewrite_ptr, /* glEdgeFlagFormatNV */ + epoxy_glEdgeFlagPointer_dispatch_table_rewrite_ptr, /* glEdgeFlagPointer */ + epoxy_glEdgeFlagPointerEXT_dispatch_table_rewrite_ptr, /* glEdgeFlagPointerEXT */ + epoxy_glEdgeFlagPointerListIBM_dispatch_table_rewrite_ptr, /* glEdgeFlagPointerListIBM */ + epoxy_glEdgeFlagv_dispatch_table_rewrite_ptr, /* glEdgeFlagv */ + epoxy_glElementPointerAPPLE_dispatch_table_rewrite_ptr, /* glElementPointerAPPLE */ + epoxy_glElementPointerATI_dispatch_table_rewrite_ptr, /* glElementPointerATI */ + epoxy_glEnable_dispatch_table_rewrite_ptr, /* glEnable */ + epoxy_glEnableClientState_dispatch_table_rewrite_ptr, /* glEnableClientState */ + epoxy_glEnableClientStateIndexedEXT_dispatch_table_rewrite_ptr, /* glEnableClientStateIndexedEXT */ + epoxy_glEnableClientStateiEXT_dispatch_table_rewrite_ptr, /* glEnableClientStateiEXT */ + epoxy_glEnableDriverControlQCOM_dispatch_table_rewrite_ptr, /* glEnableDriverControlQCOM */ + epoxy_glEnableIndexedEXT_dispatch_table_rewrite_ptr, /* glEnableIndexedEXT */ + epoxy_glEnableVariantClientStateEXT_dispatch_table_rewrite_ptr, /* glEnableVariantClientStateEXT */ + epoxy_glEnableVertexArrayAttrib_dispatch_table_rewrite_ptr, /* glEnableVertexArrayAttrib */ + epoxy_glEnableVertexArrayAttribEXT_dispatch_table_rewrite_ptr, /* glEnableVertexArrayAttribEXT */ + epoxy_glEnableVertexArrayEXT_dispatch_table_rewrite_ptr, /* glEnableVertexArrayEXT */ + epoxy_glEnableVertexAttribAPPLE_dispatch_table_rewrite_ptr, /* glEnableVertexAttribAPPLE */ + epoxy_glEnableVertexAttribArray_dispatch_table_rewrite_ptr, /* glEnableVertexAttribArray */ + epoxy_glEnableVertexAttribArrayARB_dispatch_table_rewrite_ptr, /* glEnableVertexAttribArrayARB */ + epoxy_glEnablei_dispatch_table_rewrite_ptr, /* glEnablei */ + epoxy_glEnableiEXT_dispatch_table_rewrite_ptr, /* glEnableiEXT */ + epoxy_glEnableiNV_dispatch_table_rewrite_ptr, /* glEnableiNV */ + epoxy_glEnableiOES_dispatch_table_rewrite_ptr, /* glEnableiOES */ + epoxy_glEnd_unwrapped_dispatch_table_rewrite_ptr, /* glEnd_unwrapped */ + epoxy_glEndConditionalRender_dispatch_table_rewrite_ptr, /* glEndConditionalRender */ + epoxy_glEndConditionalRenderNV_dispatch_table_rewrite_ptr, /* glEndConditionalRenderNV */ + epoxy_glEndConditionalRenderNVX_dispatch_table_rewrite_ptr, /* glEndConditionalRenderNVX */ + epoxy_glEndFragmentShaderATI_dispatch_table_rewrite_ptr, /* glEndFragmentShaderATI */ + epoxy_glEndList_dispatch_table_rewrite_ptr, /* glEndList */ + epoxy_glEndOcclusionQueryNV_dispatch_table_rewrite_ptr, /* glEndOcclusionQueryNV */ + epoxy_glEndPerfMonitorAMD_dispatch_table_rewrite_ptr, /* glEndPerfMonitorAMD */ + epoxy_glEndPerfQueryINTEL_dispatch_table_rewrite_ptr, /* glEndPerfQueryINTEL */ + epoxy_glEndQuery_dispatch_table_rewrite_ptr, /* glEndQuery */ + epoxy_glEndQueryARB_dispatch_table_rewrite_ptr, /* glEndQueryARB */ + epoxy_glEndQueryEXT_dispatch_table_rewrite_ptr, /* glEndQueryEXT */ + epoxy_glEndQueryIndexed_dispatch_table_rewrite_ptr, /* glEndQueryIndexed */ + epoxy_glEndTilingQCOM_dispatch_table_rewrite_ptr, /* glEndTilingQCOM */ + epoxy_glEndTransformFeedback_dispatch_table_rewrite_ptr, /* glEndTransformFeedback */ + epoxy_glEndTransformFeedbackEXT_dispatch_table_rewrite_ptr, /* glEndTransformFeedbackEXT */ + epoxy_glEndTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glEndTransformFeedbackNV */ + epoxy_glEndVertexShaderEXT_dispatch_table_rewrite_ptr, /* glEndVertexShaderEXT */ + epoxy_glEndVideoCaptureNV_dispatch_table_rewrite_ptr, /* glEndVideoCaptureNV */ + epoxy_glEvalCoord1d_dispatch_table_rewrite_ptr, /* glEvalCoord1d */ + epoxy_glEvalCoord1dv_dispatch_table_rewrite_ptr, /* glEvalCoord1dv */ + epoxy_glEvalCoord1f_dispatch_table_rewrite_ptr, /* glEvalCoord1f */ + epoxy_glEvalCoord1fv_dispatch_table_rewrite_ptr, /* glEvalCoord1fv */ + epoxy_glEvalCoord1xOES_dispatch_table_rewrite_ptr, /* glEvalCoord1xOES */ + epoxy_glEvalCoord1xvOES_dispatch_table_rewrite_ptr, /* glEvalCoord1xvOES */ + epoxy_glEvalCoord2d_dispatch_table_rewrite_ptr, /* glEvalCoord2d */ + epoxy_glEvalCoord2dv_dispatch_table_rewrite_ptr, /* glEvalCoord2dv */ + epoxy_glEvalCoord2f_dispatch_table_rewrite_ptr, /* glEvalCoord2f */ + epoxy_glEvalCoord2fv_dispatch_table_rewrite_ptr, /* glEvalCoord2fv */ + epoxy_glEvalCoord2xOES_dispatch_table_rewrite_ptr, /* glEvalCoord2xOES */ + epoxy_glEvalCoord2xvOES_dispatch_table_rewrite_ptr, /* glEvalCoord2xvOES */ + epoxy_glEvalMapsNV_dispatch_table_rewrite_ptr, /* glEvalMapsNV */ + epoxy_glEvalMesh1_dispatch_table_rewrite_ptr, /* glEvalMesh1 */ + epoxy_glEvalMesh2_dispatch_table_rewrite_ptr, /* glEvalMesh2 */ + epoxy_glEvalPoint1_dispatch_table_rewrite_ptr, /* glEvalPoint1 */ + epoxy_glEvalPoint2_dispatch_table_rewrite_ptr, /* glEvalPoint2 */ + epoxy_glEvaluateDepthValuesARB_dispatch_table_rewrite_ptr, /* glEvaluateDepthValuesARB */ + epoxy_glExecuteProgramNV_dispatch_table_rewrite_ptr, /* glExecuteProgramNV */ + epoxy_glExtGetBufferPointervQCOM_dispatch_table_rewrite_ptr, /* glExtGetBufferPointervQCOM */ + epoxy_glExtGetBuffersQCOM_dispatch_table_rewrite_ptr, /* glExtGetBuffersQCOM */ + epoxy_glExtGetFramebuffersQCOM_dispatch_table_rewrite_ptr, /* glExtGetFramebuffersQCOM */ + epoxy_glExtGetProgramBinarySourceQCOM_dispatch_table_rewrite_ptr, /* glExtGetProgramBinarySourceQCOM */ + epoxy_glExtGetProgramsQCOM_dispatch_table_rewrite_ptr, /* glExtGetProgramsQCOM */ + epoxy_glExtGetRenderbuffersQCOM_dispatch_table_rewrite_ptr, /* glExtGetRenderbuffersQCOM */ + epoxy_glExtGetShadersQCOM_dispatch_table_rewrite_ptr, /* glExtGetShadersQCOM */ + epoxy_glExtGetTexLevelParameterivQCOM_dispatch_table_rewrite_ptr, /* glExtGetTexLevelParameterivQCOM */ + epoxy_glExtGetTexSubImageQCOM_dispatch_table_rewrite_ptr, /* glExtGetTexSubImageQCOM */ + epoxy_glExtGetTexturesQCOM_dispatch_table_rewrite_ptr, /* glExtGetTexturesQCOM */ + epoxy_glExtIsProgramBinaryQCOM_dispatch_table_rewrite_ptr, /* glExtIsProgramBinaryQCOM */ + epoxy_glExtTexObjectStateOverrideiQCOM_dispatch_table_rewrite_ptr, /* glExtTexObjectStateOverrideiQCOM */ + epoxy_glExtractComponentEXT_dispatch_table_rewrite_ptr, /* glExtractComponentEXT */ + epoxy_glFeedbackBuffer_dispatch_table_rewrite_ptr, /* glFeedbackBuffer */ + epoxy_glFeedbackBufferxOES_dispatch_table_rewrite_ptr, /* glFeedbackBufferxOES */ + epoxy_glFenceSync_dispatch_table_rewrite_ptr, /* glFenceSync */ + epoxy_glFenceSyncAPPLE_dispatch_table_rewrite_ptr, /* glFenceSyncAPPLE */ + epoxy_glFinalCombinerInputNV_dispatch_table_rewrite_ptr, /* glFinalCombinerInputNV */ + epoxy_glFinish_dispatch_table_rewrite_ptr, /* glFinish */ + epoxy_glFinishAsyncSGIX_dispatch_table_rewrite_ptr, /* glFinishAsyncSGIX */ + epoxy_glFinishFenceAPPLE_dispatch_table_rewrite_ptr, /* glFinishFenceAPPLE */ + epoxy_glFinishFenceNV_dispatch_table_rewrite_ptr, /* glFinishFenceNV */ + epoxy_glFinishObjectAPPLE_dispatch_table_rewrite_ptr, /* glFinishObjectAPPLE */ + epoxy_glFinishTextureSUNX_dispatch_table_rewrite_ptr, /* glFinishTextureSUNX */ + epoxy_glFlush_dispatch_table_rewrite_ptr, /* glFlush */ + epoxy_glFlushMappedBufferRange_dispatch_table_rewrite_ptr, /* glFlushMappedBufferRange */ + epoxy_glFlushMappedBufferRangeAPPLE_dispatch_table_rewrite_ptr, /* glFlushMappedBufferRangeAPPLE */ + epoxy_glFlushMappedBufferRangeEXT_dispatch_table_rewrite_ptr, /* glFlushMappedBufferRangeEXT */ + epoxy_glFlushMappedNamedBufferRange_dispatch_table_rewrite_ptr, /* glFlushMappedNamedBufferRange */ + epoxy_glFlushMappedNamedBufferRangeEXT_dispatch_table_rewrite_ptr, /* glFlushMappedNamedBufferRangeEXT */ + epoxy_glFlushPixelDataRangeNV_dispatch_table_rewrite_ptr, /* glFlushPixelDataRangeNV */ + epoxy_glFlushRasterSGIX_dispatch_table_rewrite_ptr, /* glFlushRasterSGIX */ + epoxy_glFlushStaticDataIBM_dispatch_table_rewrite_ptr, /* glFlushStaticDataIBM */ + epoxy_glFlushVertexArrayRangeAPPLE_dispatch_table_rewrite_ptr, /* glFlushVertexArrayRangeAPPLE */ + epoxy_glFlushVertexArrayRangeNV_dispatch_table_rewrite_ptr, /* glFlushVertexArrayRangeNV */ + epoxy_glFogCoordFormatNV_dispatch_table_rewrite_ptr, /* glFogCoordFormatNV */ + epoxy_glFogCoordPointer_dispatch_table_rewrite_ptr, /* glFogCoordPointer */ + epoxy_glFogCoordPointerEXT_dispatch_table_rewrite_ptr, /* glFogCoordPointerEXT */ + epoxy_glFogCoordPointerListIBM_dispatch_table_rewrite_ptr, /* glFogCoordPointerListIBM */ + epoxy_glFogCoordd_dispatch_table_rewrite_ptr, /* glFogCoordd */ + epoxy_glFogCoorddEXT_dispatch_table_rewrite_ptr, /* glFogCoorddEXT */ + epoxy_glFogCoorddv_dispatch_table_rewrite_ptr, /* glFogCoorddv */ + epoxy_glFogCoorddvEXT_dispatch_table_rewrite_ptr, /* glFogCoorddvEXT */ + epoxy_glFogCoordf_dispatch_table_rewrite_ptr, /* glFogCoordf */ + epoxy_glFogCoordfEXT_dispatch_table_rewrite_ptr, /* glFogCoordfEXT */ + epoxy_glFogCoordfv_dispatch_table_rewrite_ptr, /* glFogCoordfv */ + epoxy_glFogCoordfvEXT_dispatch_table_rewrite_ptr, /* glFogCoordfvEXT */ + epoxy_glFogCoordhNV_dispatch_table_rewrite_ptr, /* glFogCoordhNV */ + epoxy_glFogCoordhvNV_dispatch_table_rewrite_ptr, /* glFogCoordhvNV */ + epoxy_glFogFuncSGIS_dispatch_table_rewrite_ptr, /* glFogFuncSGIS */ + epoxy_glFogf_dispatch_table_rewrite_ptr, /* glFogf */ + epoxy_glFogfv_dispatch_table_rewrite_ptr, /* glFogfv */ + epoxy_glFogi_dispatch_table_rewrite_ptr, /* glFogi */ + epoxy_glFogiv_dispatch_table_rewrite_ptr, /* glFogiv */ + epoxy_glFogx_dispatch_table_rewrite_ptr, /* glFogx */ + epoxy_glFogxOES_dispatch_table_rewrite_ptr, /* glFogxOES */ + epoxy_glFogxv_dispatch_table_rewrite_ptr, /* glFogxv */ + epoxy_glFogxvOES_dispatch_table_rewrite_ptr, /* glFogxvOES */ + epoxy_glFragmentColorMaterialSGIX_dispatch_table_rewrite_ptr, /* glFragmentColorMaterialSGIX */ + epoxy_glFragmentCoverageColorNV_dispatch_table_rewrite_ptr, /* glFragmentCoverageColorNV */ + epoxy_glFragmentLightModelfSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModelfSGIX */ + epoxy_glFragmentLightModelfvSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModelfvSGIX */ + epoxy_glFragmentLightModeliSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModeliSGIX */ + epoxy_glFragmentLightModelivSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightModelivSGIX */ + epoxy_glFragmentLightfSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightfSGIX */ + epoxy_glFragmentLightfvSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightfvSGIX */ + epoxy_glFragmentLightiSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightiSGIX */ + epoxy_glFragmentLightivSGIX_dispatch_table_rewrite_ptr, /* glFragmentLightivSGIX */ + epoxy_glFragmentMaterialfSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialfSGIX */ + epoxy_glFragmentMaterialfvSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialfvSGIX */ + epoxy_glFragmentMaterialiSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialiSGIX */ + epoxy_glFragmentMaterialivSGIX_dispatch_table_rewrite_ptr, /* glFragmentMaterialivSGIX */ + epoxy_glFrameTerminatorGREMEDY_dispatch_table_rewrite_ptr, /* glFrameTerminatorGREMEDY */ + epoxy_glFrameZoomSGIX_dispatch_table_rewrite_ptr, /* glFrameZoomSGIX */ + epoxy_glFramebufferDrawBufferEXT_dispatch_table_rewrite_ptr, /* glFramebufferDrawBufferEXT */ + epoxy_glFramebufferDrawBuffersEXT_dispatch_table_rewrite_ptr, /* glFramebufferDrawBuffersEXT */ + epoxy_glFramebufferParameteri_dispatch_table_rewrite_ptr, /* glFramebufferParameteri */ + epoxy_glFramebufferReadBufferEXT_dispatch_table_rewrite_ptr, /* glFramebufferReadBufferEXT */ + epoxy_glFramebufferRenderbuffer_dispatch_table_rewrite_ptr, /* glFramebufferRenderbuffer */ + epoxy_glFramebufferRenderbufferEXT_dispatch_table_rewrite_ptr, /* glFramebufferRenderbufferEXT */ + epoxy_glFramebufferRenderbufferOES_dispatch_table_rewrite_ptr, /* glFramebufferRenderbufferOES */ + epoxy_glFramebufferSampleLocationsfvARB_dispatch_table_rewrite_ptr, /* glFramebufferSampleLocationsfvARB */ + epoxy_glFramebufferSampleLocationsfvNV_dispatch_table_rewrite_ptr, /* glFramebufferSampleLocationsfvNV */ + epoxy_glFramebufferTexture_dispatch_table_rewrite_ptr, /* glFramebufferTexture */ + epoxy_glFramebufferTexture1D_dispatch_table_rewrite_ptr, /* glFramebufferTexture1D */ + epoxy_glFramebufferTexture1DEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture1DEXT */ + epoxy_glFramebufferTexture2D_dispatch_table_rewrite_ptr, /* glFramebufferTexture2D */ + epoxy_glFramebufferTexture2DEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DEXT */ + epoxy_glFramebufferTexture2DMultisampleEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DMultisampleEXT */ + epoxy_glFramebufferTexture2DMultisampleIMG_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DMultisampleIMG */ + epoxy_glFramebufferTexture2DOES_dispatch_table_rewrite_ptr, /* glFramebufferTexture2DOES */ + epoxy_glFramebufferTexture3D_dispatch_table_rewrite_ptr, /* glFramebufferTexture3D */ + epoxy_glFramebufferTexture3DEXT_dispatch_table_rewrite_ptr, /* glFramebufferTexture3DEXT */ + epoxy_glFramebufferTexture3DOES_dispatch_table_rewrite_ptr, /* glFramebufferTexture3DOES */ + epoxy_glFramebufferTextureARB_dispatch_table_rewrite_ptr, /* glFramebufferTextureARB */ + epoxy_glFramebufferTextureEXT_dispatch_table_rewrite_ptr, /* glFramebufferTextureEXT */ + epoxy_glFramebufferTextureFaceARB_dispatch_table_rewrite_ptr, /* glFramebufferTextureFaceARB */ + epoxy_glFramebufferTextureFaceEXT_dispatch_table_rewrite_ptr, /* glFramebufferTextureFaceEXT */ + epoxy_glFramebufferTextureLayer_dispatch_table_rewrite_ptr, /* glFramebufferTextureLayer */ + epoxy_glFramebufferTextureLayerARB_dispatch_table_rewrite_ptr, /* glFramebufferTextureLayerARB */ + epoxy_glFramebufferTextureLayerEXT_dispatch_table_rewrite_ptr, /* glFramebufferTextureLayerEXT */ + epoxy_glFramebufferTextureMultiviewOVR_dispatch_table_rewrite_ptr, /* glFramebufferTextureMultiviewOVR */ + epoxy_glFramebufferTextureOES_dispatch_table_rewrite_ptr, /* glFramebufferTextureOES */ + epoxy_glFreeObjectBufferATI_dispatch_table_rewrite_ptr, /* glFreeObjectBufferATI */ + epoxy_glFrontFace_dispatch_table_rewrite_ptr, /* glFrontFace */ + epoxy_glFrustum_dispatch_table_rewrite_ptr, /* glFrustum */ + epoxy_glFrustumf_dispatch_table_rewrite_ptr, /* glFrustumf */ + epoxy_glFrustumfOES_dispatch_table_rewrite_ptr, /* glFrustumfOES */ + epoxy_glFrustumx_dispatch_table_rewrite_ptr, /* glFrustumx */ + epoxy_glFrustumxOES_dispatch_table_rewrite_ptr, /* glFrustumxOES */ + epoxy_glGenAsyncMarkersSGIX_dispatch_table_rewrite_ptr, /* glGenAsyncMarkersSGIX */ + epoxy_glGenBuffers_dispatch_table_rewrite_ptr, /* glGenBuffers */ + epoxy_glGenBuffersARB_dispatch_table_rewrite_ptr, /* glGenBuffersARB */ + epoxy_glGenFencesAPPLE_dispatch_table_rewrite_ptr, /* glGenFencesAPPLE */ + epoxy_glGenFencesNV_dispatch_table_rewrite_ptr, /* glGenFencesNV */ + epoxy_glGenFragmentShadersATI_dispatch_table_rewrite_ptr, /* glGenFragmentShadersATI */ + epoxy_glGenFramebuffers_dispatch_table_rewrite_ptr, /* glGenFramebuffers */ + epoxy_glGenFramebuffersEXT_dispatch_table_rewrite_ptr, /* glGenFramebuffersEXT */ + epoxy_glGenFramebuffersOES_dispatch_table_rewrite_ptr, /* glGenFramebuffersOES */ + epoxy_glGenLists_dispatch_table_rewrite_ptr, /* glGenLists */ + epoxy_glGenNamesAMD_dispatch_table_rewrite_ptr, /* glGenNamesAMD */ + epoxy_glGenOcclusionQueriesNV_dispatch_table_rewrite_ptr, /* glGenOcclusionQueriesNV */ + epoxy_glGenPathsNV_dispatch_table_rewrite_ptr, /* glGenPathsNV */ + epoxy_glGenPerfMonitorsAMD_dispatch_table_rewrite_ptr, /* glGenPerfMonitorsAMD */ + epoxy_glGenProgramPipelines_dispatch_table_rewrite_ptr, /* glGenProgramPipelines */ + epoxy_glGenProgramPipelinesEXT_dispatch_table_rewrite_ptr, /* glGenProgramPipelinesEXT */ + epoxy_glGenProgramsARB_dispatch_table_rewrite_ptr, /* glGenProgramsARB */ + epoxy_glGenProgramsNV_dispatch_table_rewrite_ptr, /* glGenProgramsNV */ + epoxy_glGenQueries_dispatch_table_rewrite_ptr, /* glGenQueries */ + epoxy_glGenQueriesARB_dispatch_table_rewrite_ptr, /* glGenQueriesARB */ + epoxy_glGenQueriesEXT_dispatch_table_rewrite_ptr, /* glGenQueriesEXT */ + epoxy_glGenRenderbuffers_dispatch_table_rewrite_ptr, /* glGenRenderbuffers */ + epoxy_glGenRenderbuffersEXT_dispatch_table_rewrite_ptr, /* glGenRenderbuffersEXT */ + epoxy_glGenRenderbuffersOES_dispatch_table_rewrite_ptr, /* glGenRenderbuffersOES */ + epoxy_glGenSamplers_dispatch_table_rewrite_ptr, /* glGenSamplers */ + epoxy_glGenSymbolsEXT_dispatch_table_rewrite_ptr, /* glGenSymbolsEXT */ + epoxy_glGenTextures_dispatch_table_rewrite_ptr, /* glGenTextures */ + epoxy_glGenTexturesEXT_dispatch_table_rewrite_ptr, /* glGenTexturesEXT */ + epoxy_glGenTransformFeedbacks_dispatch_table_rewrite_ptr, /* glGenTransformFeedbacks */ + epoxy_glGenTransformFeedbacksNV_dispatch_table_rewrite_ptr, /* glGenTransformFeedbacksNV */ + epoxy_glGenVertexArrays_dispatch_table_rewrite_ptr, /* glGenVertexArrays */ + epoxy_glGenVertexArraysAPPLE_dispatch_table_rewrite_ptr, /* glGenVertexArraysAPPLE */ + epoxy_glGenVertexArraysOES_dispatch_table_rewrite_ptr, /* glGenVertexArraysOES */ + epoxy_glGenVertexShadersEXT_dispatch_table_rewrite_ptr, /* glGenVertexShadersEXT */ + epoxy_glGenerateMipmap_dispatch_table_rewrite_ptr, /* glGenerateMipmap */ + epoxy_glGenerateMipmapEXT_dispatch_table_rewrite_ptr, /* glGenerateMipmapEXT */ + epoxy_glGenerateMipmapOES_dispatch_table_rewrite_ptr, /* glGenerateMipmapOES */ + epoxy_glGenerateMultiTexMipmapEXT_dispatch_table_rewrite_ptr, /* glGenerateMultiTexMipmapEXT */ + epoxy_glGenerateTextureMipmap_dispatch_table_rewrite_ptr, /* glGenerateTextureMipmap */ + epoxy_glGenerateTextureMipmapEXT_dispatch_table_rewrite_ptr, /* glGenerateTextureMipmapEXT */ + epoxy_glGetActiveAtomicCounterBufferiv_dispatch_table_rewrite_ptr, /* glGetActiveAtomicCounterBufferiv */ + epoxy_glGetActiveAttrib_dispatch_table_rewrite_ptr, /* glGetActiveAttrib */ + epoxy_glGetActiveAttribARB_dispatch_table_rewrite_ptr, /* glGetActiveAttribARB */ + epoxy_glGetActiveSubroutineName_dispatch_table_rewrite_ptr, /* glGetActiveSubroutineName */ + epoxy_glGetActiveSubroutineUniformName_dispatch_table_rewrite_ptr, /* glGetActiveSubroutineUniformName */ + epoxy_glGetActiveSubroutineUniformiv_dispatch_table_rewrite_ptr, /* glGetActiveSubroutineUniformiv */ + epoxy_glGetActiveUniform_dispatch_table_rewrite_ptr, /* glGetActiveUniform */ + epoxy_glGetActiveUniformARB_dispatch_table_rewrite_ptr, /* glGetActiveUniformARB */ + epoxy_glGetActiveUniformBlockName_dispatch_table_rewrite_ptr, /* glGetActiveUniformBlockName */ + epoxy_glGetActiveUniformBlockiv_dispatch_table_rewrite_ptr, /* glGetActiveUniformBlockiv */ + epoxy_glGetActiveUniformName_dispatch_table_rewrite_ptr, /* glGetActiveUniformName */ + epoxy_glGetActiveUniformsiv_dispatch_table_rewrite_ptr, /* glGetActiveUniformsiv */ + epoxy_glGetActiveVaryingNV_dispatch_table_rewrite_ptr, /* glGetActiveVaryingNV */ + epoxy_glGetArrayObjectfvATI_dispatch_table_rewrite_ptr, /* glGetArrayObjectfvATI */ + epoxy_glGetArrayObjectivATI_dispatch_table_rewrite_ptr, /* glGetArrayObjectivATI */ + epoxy_glGetAttachedObjectsARB_dispatch_table_rewrite_ptr, /* glGetAttachedObjectsARB */ + epoxy_glGetAttachedShaders_dispatch_table_rewrite_ptr, /* glGetAttachedShaders */ + epoxy_glGetAttribLocation_dispatch_table_rewrite_ptr, /* glGetAttribLocation */ + epoxy_glGetAttribLocationARB_dispatch_table_rewrite_ptr, /* glGetAttribLocationARB */ + epoxy_glGetBooleanIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetBooleanIndexedvEXT */ + epoxy_glGetBooleani_v_dispatch_table_rewrite_ptr, /* glGetBooleani_v */ + epoxy_glGetBooleanv_dispatch_table_rewrite_ptr, /* glGetBooleanv */ + epoxy_glGetBufferParameteri64v_dispatch_table_rewrite_ptr, /* glGetBufferParameteri64v */ + epoxy_glGetBufferParameteriv_dispatch_table_rewrite_ptr, /* glGetBufferParameteriv */ + epoxy_glGetBufferParameterivARB_dispatch_table_rewrite_ptr, /* glGetBufferParameterivARB */ + epoxy_glGetBufferParameterui64vNV_dispatch_table_rewrite_ptr, /* glGetBufferParameterui64vNV */ + epoxy_glGetBufferPointerv_dispatch_table_rewrite_ptr, /* glGetBufferPointerv */ + epoxy_glGetBufferPointervARB_dispatch_table_rewrite_ptr, /* glGetBufferPointervARB */ + epoxy_glGetBufferPointervOES_dispatch_table_rewrite_ptr, /* glGetBufferPointervOES */ + epoxy_glGetBufferSubData_dispatch_table_rewrite_ptr, /* glGetBufferSubData */ + epoxy_glGetBufferSubDataARB_dispatch_table_rewrite_ptr, /* glGetBufferSubDataARB */ + epoxy_glGetClipPlane_dispatch_table_rewrite_ptr, /* glGetClipPlane */ + epoxy_glGetClipPlanef_dispatch_table_rewrite_ptr, /* glGetClipPlanef */ + epoxy_glGetClipPlanefOES_dispatch_table_rewrite_ptr, /* glGetClipPlanefOES */ + epoxy_glGetClipPlanex_dispatch_table_rewrite_ptr, /* glGetClipPlanex */ + epoxy_glGetClipPlanexOES_dispatch_table_rewrite_ptr, /* glGetClipPlanexOES */ + epoxy_glGetColorTable_dispatch_table_rewrite_ptr, /* glGetColorTable */ + epoxy_glGetColorTableEXT_dispatch_table_rewrite_ptr, /* glGetColorTableEXT */ + epoxy_glGetColorTableParameterfv_dispatch_table_rewrite_ptr, /* glGetColorTableParameterfv */ + epoxy_glGetColorTableParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetColorTableParameterfvEXT */ + epoxy_glGetColorTableParameterfvSGI_dispatch_table_rewrite_ptr, /* glGetColorTableParameterfvSGI */ + epoxy_glGetColorTableParameteriv_dispatch_table_rewrite_ptr, /* glGetColorTableParameteriv */ + epoxy_glGetColorTableParameterivEXT_dispatch_table_rewrite_ptr, /* glGetColorTableParameterivEXT */ + epoxy_glGetColorTableParameterivSGI_dispatch_table_rewrite_ptr, /* glGetColorTableParameterivSGI */ + epoxy_glGetColorTableSGI_dispatch_table_rewrite_ptr, /* glGetColorTableSGI */ + epoxy_glGetCombinerInputParameterfvNV_dispatch_table_rewrite_ptr, /* glGetCombinerInputParameterfvNV */ + epoxy_glGetCombinerInputParameterivNV_dispatch_table_rewrite_ptr, /* glGetCombinerInputParameterivNV */ + epoxy_glGetCombinerOutputParameterfvNV_dispatch_table_rewrite_ptr, /* glGetCombinerOutputParameterfvNV */ + epoxy_glGetCombinerOutputParameterivNV_dispatch_table_rewrite_ptr, /* glGetCombinerOutputParameterivNV */ + epoxy_glGetCombinerStageParameterfvNV_dispatch_table_rewrite_ptr, /* glGetCombinerStageParameterfvNV */ + epoxy_glGetCommandHeaderNV_dispatch_table_rewrite_ptr, /* glGetCommandHeaderNV */ + epoxy_glGetCompressedMultiTexImageEXT_dispatch_table_rewrite_ptr, /* glGetCompressedMultiTexImageEXT */ + epoxy_glGetCompressedTexImage_dispatch_table_rewrite_ptr, /* glGetCompressedTexImage */ + epoxy_glGetCompressedTexImageARB_dispatch_table_rewrite_ptr, /* glGetCompressedTexImageARB */ + epoxy_glGetCompressedTextureImage_dispatch_table_rewrite_ptr, /* glGetCompressedTextureImage */ + epoxy_glGetCompressedTextureImageEXT_dispatch_table_rewrite_ptr, /* glGetCompressedTextureImageEXT */ + epoxy_glGetCompressedTextureSubImage_dispatch_table_rewrite_ptr, /* glGetCompressedTextureSubImage */ + epoxy_glGetConvolutionFilter_dispatch_table_rewrite_ptr, /* glGetConvolutionFilter */ + epoxy_glGetConvolutionFilterEXT_dispatch_table_rewrite_ptr, /* glGetConvolutionFilterEXT */ + epoxy_glGetConvolutionParameterfv_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterfv */ + epoxy_glGetConvolutionParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterfvEXT */ + epoxy_glGetConvolutionParameteriv_dispatch_table_rewrite_ptr, /* glGetConvolutionParameteriv */ + epoxy_glGetConvolutionParameterivEXT_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterivEXT */ + epoxy_glGetConvolutionParameterxvOES_dispatch_table_rewrite_ptr, /* glGetConvolutionParameterxvOES */ + epoxy_glGetCoverageModulationTableNV_dispatch_table_rewrite_ptr, /* glGetCoverageModulationTableNV */ + epoxy_glGetDebugMessageLog_dispatch_table_rewrite_ptr, /* glGetDebugMessageLog */ + epoxy_glGetDebugMessageLogAMD_dispatch_table_rewrite_ptr, /* glGetDebugMessageLogAMD */ + epoxy_glGetDebugMessageLogARB_dispatch_table_rewrite_ptr, /* glGetDebugMessageLogARB */ + epoxy_glGetDebugMessageLogKHR_dispatch_table_rewrite_ptr, /* glGetDebugMessageLogKHR */ + epoxy_glGetDetailTexFuncSGIS_dispatch_table_rewrite_ptr, /* glGetDetailTexFuncSGIS */ + epoxy_glGetDoubleIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetDoubleIndexedvEXT */ + epoxy_glGetDoublei_v_dispatch_table_rewrite_ptr, /* glGetDoublei_v */ + epoxy_glGetDoublei_vEXT_dispatch_table_rewrite_ptr, /* glGetDoublei_vEXT */ + epoxy_glGetDoublev_dispatch_table_rewrite_ptr, /* glGetDoublev */ + epoxy_glGetDriverControlStringQCOM_dispatch_table_rewrite_ptr, /* glGetDriverControlStringQCOM */ + epoxy_glGetDriverControlsQCOM_dispatch_table_rewrite_ptr, /* glGetDriverControlsQCOM */ + epoxy_glGetError_dispatch_table_rewrite_ptr, /* glGetError */ + epoxy_glGetFenceivNV_dispatch_table_rewrite_ptr, /* glGetFenceivNV */ + epoxy_glGetFinalCombinerInputParameterfvNV_dispatch_table_rewrite_ptr, /* glGetFinalCombinerInputParameterfvNV */ + epoxy_glGetFinalCombinerInputParameterivNV_dispatch_table_rewrite_ptr, /* glGetFinalCombinerInputParameterivNV */ + epoxy_glGetFirstPerfQueryIdINTEL_dispatch_table_rewrite_ptr, /* glGetFirstPerfQueryIdINTEL */ + epoxy_glGetFixedv_dispatch_table_rewrite_ptr, /* glGetFixedv */ + epoxy_glGetFixedvOES_dispatch_table_rewrite_ptr, /* glGetFixedvOES */ + epoxy_glGetFloatIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetFloatIndexedvEXT */ + epoxy_glGetFloati_v_dispatch_table_rewrite_ptr, /* glGetFloati_v */ + epoxy_glGetFloati_vEXT_dispatch_table_rewrite_ptr, /* glGetFloati_vEXT */ + epoxy_glGetFloati_vNV_dispatch_table_rewrite_ptr, /* glGetFloati_vNV */ + epoxy_glGetFloatv_dispatch_table_rewrite_ptr, /* glGetFloatv */ + epoxy_glGetFogFuncSGIS_dispatch_table_rewrite_ptr, /* glGetFogFuncSGIS */ + epoxy_glGetFragDataIndex_dispatch_table_rewrite_ptr, /* glGetFragDataIndex */ + epoxy_glGetFragDataIndexEXT_dispatch_table_rewrite_ptr, /* glGetFragDataIndexEXT */ + epoxy_glGetFragDataLocation_dispatch_table_rewrite_ptr, /* glGetFragDataLocation */ + epoxy_glGetFragDataLocationEXT_dispatch_table_rewrite_ptr, /* glGetFragDataLocationEXT */ + epoxy_glGetFragmentLightfvSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentLightfvSGIX */ + epoxy_glGetFragmentLightivSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentLightivSGIX */ + epoxy_glGetFragmentMaterialfvSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentMaterialfvSGIX */ + epoxy_glGetFragmentMaterialivSGIX_dispatch_table_rewrite_ptr, /* glGetFragmentMaterialivSGIX */ + epoxy_glGetFramebufferAttachmentParameteriv_dispatch_table_rewrite_ptr, /* glGetFramebufferAttachmentParameteriv */ + epoxy_glGetFramebufferAttachmentParameterivEXT_dispatch_table_rewrite_ptr, /* glGetFramebufferAttachmentParameterivEXT */ + epoxy_glGetFramebufferAttachmentParameterivOES_dispatch_table_rewrite_ptr, /* glGetFramebufferAttachmentParameterivOES */ + epoxy_glGetFramebufferParameteriv_dispatch_table_rewrite_ptr, /* glGetFramebufferParameteriv */ + epoxy_glGetFramebufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetFramebufferParameterivEXT */ + epoxy_glGetGraphicsResetStatus_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatus */ + epoxy_glGetGraphicsResetStatusARB_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatusARB */ + epoxy_glGetGraphicsResetStatusEXT_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatusEXT */ + epoxy_glGetGraphicsResetStatusKHR_dispatch_table_rewrite_ptr, /* glGetGraphicsResetStatusKHR */ + epoxy_glGetHandleARB_dispatch_table_rewrite_ptr, /* glGetHandleARB */ + epoxy_glGetHistogram_dispatch_table_rewrite_ptr, /* glGetHistogram */ + epoxy_glGetHistogramEXT_dispatch_table_rewrite_ptr, /* glGetHistogramEXT */ + epoxy_glGetHistogramParameterfv_dispatch_table_rewrite_ptr, /* glGetHistogramParameterfv */ + epoxy_glGetHistogramParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetHistogramParameterfvEXT */ + epoxy_glGetHistogramParameteriv_dispatch_table_rewrite_ptr, /* glGetHistogramParameteriv */ + epoxy_glGetHistogramParameterivEXT_dispatch_table_rewrite_ptr, /* glGetHistogramParameterivEXT */ + epoxy_glGetHistogramParameterxvOES_dispatch_table_rewrite_ptr, /* glGetHistogramParameterxvOES */ + epoxy_glGetImageHandleARB_dispatch_table_rewrite_ptr, /* glGetImageHandleARB */ + epoxy_glGetImageHandleNV_dispatch_table_rewrite_ptr, /* glGetImageHandleNV */ + epoxy_glGetImageTransformParameterfvHP_dispatch_table_rewrite_ptr, /* glGetImageTransformParameterfvHP */ + epoxy_glGetImageTransformParameterivHP_dispatch_table_rewrite_ptr, /* glGetImageTransformParameterivHP */ + epoxy_glGetInfoLogARB_dispatch_table_rewrite_ptr, /* glGetInfoLogARB */ + epoxy_glGetInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glGetInstrumentsSGIX */ + epoxy_glGetInteger64i_v_dispatch_table_rewrite_ptr, /* glGetInteger64i_v */ + epoxy_glGetInteger64v_dispatch_table_rewrite_ptr, /* glGetInteger64v */ + epoxy_glGetInteger64vAPPLE_dispatch_table_rewrite_ptr, /* glGetInteger64vAPPLE */ + epoxy_glGetIntegerIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetIntegerIndexedvEXT */ + epoxy_glGetIntegeri_v_dispatch_table_rewrite_ptr, /* glGetIntegeri_v */ + epoxy_glGetIntegeri_vEXT_dispatch_table_rewrite_ptr, /* glGetIntegeri_vEXT */ + epoxy_glGetIntegerui64i_vNV_dispatch_table_rewrite_ptr, /* glGetIntegerui64i_vNV */ + epoxy_glGetIntegerui64vNV_dispatch_table_rewrite_ptr, /* glGetIntegerui64vNV */ + epoxy_glGetIntegerv_dispatch_table_rewrite_ptr, /* glGetIntegerv */ + epoxy_glGetInternalformatSampleivNV_dispatch_table_rewrite_ptr, /* glGetInternalformatSampleivNV */ + epoxy_glGetInternalformati64v_dispatch_table_rewrite_ptr, /* glGetInternalformati64v */ + epoxy_glGetInternalformativ_dispatch_table_rewrite_ptr, /* glGetInternalformativ */ + epoxy_glGetInvariantBooleanvEXT_dispatch_table_rewrite_ptr, /* glGetInvariantBooleanvEXT */ + epoxy_glGetInvariantFloatvEXT_dispatch_table_rewrite_ptr, /* glGetInvariantFloatvEXT */ + epoxy_glGetInvariantIntegervEXT_dispatch_table_rewrite_ptr, /* glGetInvariantIntegervEXT */ + epoxy_glGetLightfv_dispatch_table_rewrite_ptr, /* glGetLightfv */ + epoxy_glGetLightiv_dispatch_table_rewrite_ptr, /* glGetLightiv */ + epoxy_glGetLightxOES_dispatch_table_rewrite_ptr, /* glGetLightxOES */ + epoxy_glGetLightxv_dispatch_table_rewrite_ptr, /* glGetLightxv */ + epoxy_glGetLightxvOES_dispatch_table_rewrite_ptr, /* glGetLightxvOES */ + epoxy_glGetListParameterfvSGIX_dispatch_table_rewrite_ptr, /* glGetListParameterfvSGIX */ + epoxy_glGetListParameterivSGIX_dispatch_table_rewrite_ptr, /* glGetListParameterivSGIX */ + epoxy_glGetLocalConstantBooleanvEXT_dispatch_table_rewrite_ptr, /* glGetLocalConstantBooleanvEXT */ + epoxy_glGetLocalConstantFloatvEXT_dispatch_table_rewrite_ptr, /* glGetLocalConstantFloatvEXT */ + epoxy_glGetLocalConstantIntegervEXT_dispatch_table_rewrite_ptr, /* glGetLocalConstantIntegervEXT */ + epoxy_glGetMapAttribParameterfvNV_dispatch_table_rewrite_ptr, /* glGetMapAttribParameterfvNV */ + epoxy_glGetMapAttribParameterivNV_dispatch_table_rewrite_ptr, /* glGetMapAttribParameterivNV */ + epoxy_glGetMapControlPointsNV_dispatch_table_rewrite_ptr, /* glGetMapControlPointsNV */ + epoxy_glGetMapParameterfvNV_dispatch_table_rewrite_ptr, /* glGetMapParameterfvNV */ + epoxy_glGetMapParameterivNV_dispatch_table_rewrite_ptr, /* glGetMapParameterivNV */ + epoxy_glGetMapdv_dispatch_table_rewrite_ptr, /* glGetMapdv */ + epoxy_glGetMapfv_dispatch_table_rewrite_ptr, /* glGetMapfv */ + epoxy_glGetMapiv_dispatch_table_rewrite_ptr, /* glGetMapiv */ + epoxy_glGetMapxvOES_dispatch_table_rewrite_ptr, /* glGetMapxvOES */ + epoxy_glGetMaterialfv_dispatch_table_rewrite_ptr, /* glGetMaterialfv */ + epoxy_glGetMaterialiv_dispatch_table_rewrite_ptr, /* glGetMaterialiv */ + epoxy_glGetMaterialxOES_dispatch_table_rewrite_ptr, /* glGetMaterialxOES */ + epoxy_glGetMaterialxv_dispatch_table_rewrite_ptr, /* glGetMaterialxv */ + epoxy_glGetMaterialxvOES_dispatch_table_rewrite_ptr, /* glGetMaterialxvOES */ + epoxy_glGetMinmax_dispatch_table_rewrite_ptr, /* glGetMinmax */ + epoxy_glGetMinmaxEXT_dispatch_table_rewrite_ptr, /* glGetMinmaxEXT */ + epoxy_glGetMinmaxParameterfv_dispatch_table_rewrite_ptr, /* glGetMinmaxParameterfv */ + epoxy_glGetMinmaxParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetMinmaxParameterfvEXT */ + epoxy_glGetMinmaxParameteriv_dispatch_table_rewrite_ptr, /* glGetMinmaxParameteriv */ + epoxy_glGetMinmaxParameterivEXT_dispatch_table_rewrite_ptr, /* glGetMinmaxParameterivEXT */ + epoxy_glGetMultiTexEnvfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexEnvfvEXT */ + epoxy_glGetMultiTexEnvivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexEnvivEXT */ + epoxy_glGetMultiTexGendvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexGendvEXT */ + epoxy_glGetMultiTexGenfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexGenfvEXT */ + epoxy_glGetMultiTexGenivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexGenivEXT */ + epoxy_glGetMultiTexImageEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexImageEXT */ + epoxy_glGetMultiTexLevelParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexLevelParameterfvEXT */ + epoxy_glGetMultiTexLevelParameterivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexLevelParameterivEXT */ + epoxy_glGetMultiTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterIivEXT */ + epoxy_glGetMultiTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterIuivEXT */ + epoxy_glGetMultiTexParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterfvEXT */ + epoxy_glGetMultiTexParameterivEXT_dispatch_table_rewrite_ptr, /* glGetMultiTexParameterivEXT */ + epoxy_glGetMultisamplefv_dispatch_table_rewrite_ptr, /* glGetMultisamplefv */ + epoxy_glGetMultisamplefvNV_dispatch_table_rewrite_ptr, /* glGetMultisamplefvNV */ + epoxy_glGetNamedBufferParameteri64v_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameteri64v */ + epoxy_glGetNamedBufferParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameteriv */ + epoxy_glGetNamedBufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameterivEXT */ + epoxy_glGetNamedBufferParameterui64vNV_dispatch_table_rewrite_ptr, /* glGetNamedBufferParameterui64vNV */ + epoxy_glGetNamedBufferPointerv_dispatch_table_rewrite_ptr, /* glGetNamedBufferPointerv */ + epoxy_glGetNamedBufferPointervEXT_dispatch_table_rewrite_ptr, /* glGetNamedBufferPointervEXT */ + epoxy_glGetNamedBufferSubData_dispatch_table_rewrite_ptr, /* glGetNamedBufferSubData */ + epoxy_glGetNamedBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glGetNamedBufferSubDataEXT */ + epoxy_glGetNamedFramebufferAttachmentParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferAttachmentParameteriv */ + epoxy_glGetNamedFramebufferAttachmentParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferAttachmentParameterivEXT */ + epoxy_glGetNamedFramebufferParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferParameteriv */ + epoxy_glGetNamedFramebufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedFramebufferParameterivEXT */ + epoxy_glGetNamedProgramLocalParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterIivEXT */ + epoxy_glGetNamedProgramLocalParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterIuivEXT */ + epoxy_glGetNamedProgramLocalParameterdvEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterdvEXT */ + epoxy_glGetNamedProgramLocalParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramLocalParameterfvEXT */ + epoxy_glGetNamedProgramStringEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramStringEXT */ + epoxy_glGetNamedProgramivEXT_dispatch_table_rewrite_ptr, /* glGetNamedProgramivEXT */ + epoxy_glGetNamedRenderbufferParameteriv_dispatch_table_rewrite_ptr, /* glGetNamedRenderbufferParameteriv */ + epoxy_glGetNamedRenderbufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetNamedRenderbufferParameterivEXT */ + epoxy_glGetNamedStringARB_dispatch_table_rewrite_ptr, /* glGetNamedStringARB */ + epoxy_glGetNamedStringivARB_dispatch_table_rewrite_ptr, /* glGetNamedStringivARB */ + epoxy_glGetNextPerfQueryIdINTEL_dispatch_table_rewrite_ptr, /* glGetNextPerfQueryIdINTEL */ + epoxy_glGetObjectBufferfvATI_dispatch_table_rewrite_ptr, /* glGetObjectBufferfvATI */ + epoxy_glGetObjectBufferivATI_dispatch_table_rewrite_ptr, /* glGetObjectBufferivATI */ + epoxy_glGetObjectLabel_dispatch_table_rewrite_ptr, /* glGetObjectLabel */ + epoxy_glGetObjectLabelEXT_dispatch_table_rewrite_ptr, /* glGetObjectLabelEXT */ + epoxy_glGetObjectLabelKHR_dispatch_table_rewrite_ptr, /* glGetObjectLabelKHR */ + epoxy_glGetObjectParameterfvARB_dispatch_table_rewrite_ptr, /* glGetObjectParameterfvARB */ + epoxy_glGetObjectParameterivAPPLE_dispatch_table_rewrite_ptr, /* glGetObjectParameterivAPPLE */ + epoxy_glGetObjectParameterivARB_dispatch_table_rewrite_ptr, /* glGetObjectParameterivARB */ + epoxy_glGetObjectPtrLabel_dispatch_table_rewrite_ptr, /* glGetObjectPtrLabel */ + epoxy_glGetObjectPtrLabelKHR_dispatch_table_rewrite_ptr, /* glGetObjectPtrLabelKHR */ + epoxy_glGetOcclusionQueryivNV_dispatch_table_rewrite_ptr, /* glGetOcclusionQueryivNV */ + epoxy_glGetOcclusionQueryuivNV_dispatch_table_rewrite_ptr, /* glGetOcclusionQueryuivNV */ + epoxy_glGetPathColorGenfvNV_dispatch_table_rewrite_ptr, /* glGetPathColorGenfvNV */ + epoxy_glGetPathColorGenivNV_dispatch_table_rewrite_ptr, /* glGetPathColorGenivNV */ + epoxy_glGetPathCommandsNV_dispatch_table_rewrite_ptr, /* glGetPathCommandsNV */ + epoxy_glGetPathCoordsNV_dispatch_table_rewrite_ptr, /* glGetPathCoordsNV */ + epoxy_glGetPathDashArrayNV_dispatch_table_rewrite_ptr, /* glGetPathDashArrayNV */ + epoxy_glGetPathLengthNV_dispatch_table_rewrite_ptr, /* glGetPathLengthNV */ + epoxy_glGetPathMetricRangeNV_dispatch_table_rewrite_ptr, /* glGetPathMetricRangeNV */ + epoxy_glGetPathMetricsNV_dispatch_table_rewrite_ptr, /* glGetPathMetricsNV */ + epoxy_glGetPathParameterfvNV_dispatch_table_rewrite_ptr, /* glGetPathParameterfvNV */ + epoxy_glGetPathParameterivNV_dispatch_table_rewrite_ptr, /* glGetPathParameterivNV */ + epoxy_glGetPathSpacingNV_dispatch_table_rewrite_ptr, /* glGetPathSpacingNV */ + epoxy_glGetPathTexGenfvNV_dispatch_table_rewrite_ptr, /* glGetPathTexGenfvNV */ + epoxy_glGetPathTexGenivNV_dispatch_table_rewrite_ptr, /* glGetPathTexGenivNV */ + epoxy_glGetPerfCounterInfoINTEL_dispatch_table_rewrite_ptr, /* glGetPerfCounterInfoINTEL */ + epoxy_glGetPerfMonitorCounterDataAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCounterDataAMD */ + epoxy_glGetPerfMonitorCounterInfoAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCounterInfoAMD */ + epoxy_glGetPerfMonitorCounterStringAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCounterStringAMD */ + epoxy_glGetPerfMonitorCountersAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorCountersAMD */ + epoxy_glGetPerfMonitorGroupStringAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorGroupStringAMD */ + epoxy_glGetPerfMonitorGroupsAMD_dispatch_table_rewrite_ptr, /* glGetPerfMonitorGroupsAMD */ + epoxy_glGetPerfQueryDataINTEL_dispatch_table_rewrite_ptr, /* glGetPerfQueryDataINTEL */ + epoxy_glGetPerfQueryIdByNameINTEL_dispatch_table_rewrite_ptr, /* glGetPerfQueryIdByNameINTEL */ + epoxy_glGetPerfQueryInfoINTEL_dispatch_table_rewrite_ptr, /* glGetPerfQueryInfoINTEL */ + epoxy_glGetPixelMapfv_dispatch_table_rewrite_ptr, /* glGetPixelMapfv */ + epoxy_glGetPixelMapuiv_dispatch_table_rewrite_ptr, /* glGetPixelMapuiv */ + epoxy_glGetPixelMapusv_dispatch_table_rewrite_ptr, /* glGetPixelMapusv */ + epoxy_glGetPixelMapxv_dispatch_table_rewrite_ptr, /* glGetPixelMapxv */ + epoxy_glGetPixelTexGenParameterfvSGIS_dispatch_table_rewrite_ptr, /* glGetPixelTexGenParameterfvSGIS */ + epoxy_glGetPixelTexGenParameterivSGIS_dispatch_table_rewrite_ptr, /* glGetPixelTexGenParameterivSGIS */ + epoxy_glGetPixelTransformParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetPixelTransformParameterfvEXT */ + epoxy_glGetPixelTransformParameterivEXT_dispatch_table_rewrite_ptr, /* glGetPixelTransformParameterivEXT */ + epoxy_glGetPointerIndexedvEXT_dispatch_table_rewrite_ptr, /* glGetPointerIndexedvEXT */ + epoxy_glGetPointeri_vEXT_dispatch_table_rewrite_ptr, /* glGetPointeri_vEXT */ + epoxy_glGetPointerv_dispatch_table_rewrite_ptr, /* glGetPointerv */ + epoxy_glGetPointervEXT_dispatch_table_rewrite_ptr, /* glGetPointervEXT */ + epoxy_glGetPointervKHR_dispatch_table_rewrite_ptr, /* glGetPointervKHR */ + epoxy_glGetPolygonStipple_dispatch_table_rewrite_ptr, /* glGetPolygonStipple */ + epoxy_glGetProgramBinary_dispatch_table_rewrite_ptr, /* glGetProgramBinary */ + epoxy_glGetProgramBinaryOES_dispatch_table_rewrite_ptr, /* glGetProgramBinaryOES */ + epoxy_glGetProgramEnvParameterIivNV_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterIivNV */ + epoxy_glGetProgramEnvParameterIuivNV_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterIuivNV */ + epoxy_glGetProgramEnvParameterdvARB_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterdvARB */ + epoxy_glGetProgramEnvParameterfvARB_dispatch_table_rewrite_ptr, /* glGetProgramEnvParameterfvARB */ + epoxy_glGetProgramInfoLog_dispatch_table_rewrite_ptr, /* glGetProgramInfoLog */ + epoxy_glGetProgramInterfaceiv_dispatch_table_rewrite_ptr, /* glGetProgramInterfaceiv */ + epoxy_glGetProgramLocalParameterIivNV_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterIivNV */ + epoxy_glGetProgramLocalParameterIuivNV_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterIuivNV */ + epoxy_glGetProgramLocalParameterdvARB_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterdvARB */ + epoxy_glGetProgramLocalParameterfvARB_dispatch_table_rewrite_ptr, /* glGetProgramLocalParameterfvARB */ + epoxy_glGetProgramNamedParameterdvNV_dispatch_table_rewrite_ptr, /* glGetProgramNamedParameterdvNV */ + epoxy_glGetProgramNamedParameterfvNV_dispatch_table_rewrite_ptr, /* glGetProgramNamedParameterfvNV */ + epoxy_glGetProgramParameterdvNV_dispatch_table_rewrite_ptr, /* glGetProgramParameterdvNV */ + epoxy_glGetProgramParameterfvNV_dispatch_table_rewrite_ptr, /* glGetProgramParameterfvNV */ + epoxy_glGetProgramPipelineInfoLog_dispatch_table_rewrite_ptr, /* glGetProgramPipelineInfoLog */ + epoxy_glGetProgramPipelineInfoLogEXT_dispatch_table_rewrite_ptr, /* glGetProgramPipelineInfoLogEXT */ + epoxy_glGetProgramPipelineiv_dispatch_table_rewrite_ptr, /* glGetProgramPipelineiv */ + epoxy_glGetProgramPipelineivEXT_dispatch_table_rewrite_ptr, /* glGetProgramPipelineivEXT */ + epoxy_glGetProgramResourceIndex_dispatch_table_rewrite_ptr, /* glGetProgramResourceIndex */ + epoxy_glGetProgramResourceLocation_dispatch_table_rewrite_ptr, /* glGetProgramResourceLocation */ + epoxy_glGetProgramResourceLocationIndex_dispatch_table_rewrite_ptr, /* glGetProgramResourceLocationIndex */ + epoxy_glGetProgramResourceLocationIndexEXT_dispatch_table_rewrite_ptr, /* glGetProgramResourceLocationIndexEXT */ + epoxy_glGetProgramResourceName_dispatch_table_rewrite_ptr, /* glGetProgramResourceName */ + epoxy_glGetProgramResourcefvNV_dispatch_table_rewrite_ptr, /* glGetProgramResourcefvNV */ + epoxy_glGetProgramResourceiv_dispatch_table_rewrite_ptr, /* glGetProgramResourceiv */ + epoxy_glGetProgramStageiv_dispatch_table_rewrite_ptr, /* glGetProgramStageiv */ + epoxy_glGetProgramStringARB_dispatch_table_rewrite_ptr, /* glGetProgramStringARB */ + epoxy_glGetProgramStringNV_dispatch_table_rewrite_ptr, /* glGetProgramStringNV */ + epoxy_glGetProgramSubroutineParameteruivNV_dispatch_table_rewrite_ptr, /* glGetProgramSubroutineParameteruivNV */ + epoxy_glGetProgramiv_dispatch_table_rewrite_ptr, /* glGetProgramiv */ + epoxy_glGetProgramivARB_dispatch_table_rewrite_ptr, /* glGetProgramivARB */ + epoxy_glGetProgramivNV_dispatch_table_rewrite_ptr, /* glGetProgramivNV */ + epoxy_glGetQueryBufferObjecti64v_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjecti64v */ + epoxy_glGetQueryBufferObjectiv_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjectiv */ + epoxy_glGetQueryBufferObjectui64v_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjectui64v */ + epoxy_glGetQueryBufferObjectuiv_dispatch_table_rewrite_ptr, /* glGetQueryBufferObjectuiv */ + epoxy_glGetQueryIndexediv_dispatch_table_rewrite_ptr, /* glGetQueryIndexediv */ + epoxy_glGetQueryObjecti64v_dispatch_table_rewrite_ptr, /* glGetQueryObjecti64v */ + epoxy_glGetQueryObjecti64vEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjecti64vEXT */ + epoxy_glGetQueryObjectiv_dispatch_table_rewrite_ptr, /* glGetQueryObjectiv */ + epoxy_glGetQueryObjectivARB_dispatch_table_rewrite_ptr, /* glGetQueryObjectivARB */ + epoxy_glGetQueryObjectivEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjectivEXT */ + epoxy_glGetQueryObjectui64v_dispatch_table_rewrite_ptr, /* glGetQueryObjectui64v */ + epoxy_glGetQueryObjectui64vEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjectui64vEXT */ + epoxy_glGetQueryObjectuiv_dispatch_table_rewrite_ptr, /* glGetQueryObjectuiv */ + epoxy_glGetQueryObjectuivARB_dispatch_table_rewrite_ptr, /* glGetQueryObjectuivARB */ + epoxy_glGetQueryObjectuivEXT_dispatch_table_rewrite_ptr, /* glGetQueryObjectuivEXT */ + epoxy_glGetQueryiv_dispatch_table_rewrite_ptr, /* glGetQueryiv */ + epoxy_glGetQueryivARB_dispatch_table_rewrite_ptr, /* glGetQueryivARB */ + epoxy_glGetQueryivEXT_dispatch_table_rewrite_ptr, /* glGetQueryivEXT */ + epoxy_glGetRenderbufferParameteriv_dispatch_table_rewrite_ptr, /* glGetRenderbufferParameteriv */ + epoxy_glGetRenderbufferParameterivEXT_dispatch_table_rewrite_ptr, /* glGetRenderbufferParameterivEXT */ + epoxy_glGetRenderbufferParameterivOES_dispatch_table_rewrite_ptr, /* glGetRenderbufferParameterivOES */ + epoxy_glGetSamplerParameterIiv_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIiv */ + epoxy_glGetSamplerParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIivEXT */ + epoxy_glGetSamplerParameterIivOES_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIivOES */ + epoxy_glGetSamplerParameterIuiv_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIuiv */ + epoxy_glGetSamplerParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIuivEXT */ + epoxy_glGetSamplerParameterIuivOES_dispatch_table_rewrite_ptr, /* glGetSamplerParameterIuivOES */ + epoxy_glGetSamplerParameterfv_dispatch_table_rewrite_ptr, /* glGetSamplerParameterfv */ + epoxy_glGetSamplerParameteriv_dispatch_table_rewrite_ptr, /* glGetSamplerParameteriv */ + epoxy_glGetSeparableFilter_dispatch_table_rewrite_ptr, /* glGetSeparableFilter */ + epoxy_glGetSeparableFilterEXT_dispatch_table_rewrite_ptr, /* glGetSeparableFilterEXT */ + epoxy_glGetShaderInfoLog_dispatch_table_rewrite_ptr, /* glGetShaderInfoLog */ + epoxy_glGetShaderPrecisionFormat_dispatch_table_rewrite_ptr, /* glGetShaderPrecisionFormat */ + epoxy_glGetShaderSource_dispatch_table_rewrite_ptr, /* glGetShaderSource */ + epoxy_glGetShaderSourceARB_dispatch_table_rewrite_ptr, /* glGetShaderSourceARB */ + epoxy_glGetShaderiv_dispatch_table_rewrite_ptr, /* glGetShaderiv */ + epoxy_glGetSharpenTexFuncSGIS_dispatch_table_rewrite_ptr, /* glGetSharpenTexFuncSGIS */ + epoxy_glGetStageIndexNV_dispatch_table_rewrite_ptr, /* glGetStageIndexNV */ + epoxy_glGetString_dispatch_table_rewrite_ptr, /* glGetString */ + epoxy_glGetStringi_dispatch_table_rewrite_ptr, /* glGetStringi */ + epoxy_glGetSubroutineIndex_dispatch_table_rewrite_ptr, /* glGetSubroutineIndex */ + epoxy_glGetSubroutineUniformLocation_dispatch_table_rewrite_ptr, /* glGetSubroutineUniformLocation */ + epoxy_glGetSynciv_dispatch_table_rewrite_ptr, /* glGetSynciv */ + epoxy_glGetSyncivAPPLE_dispatch_table_rewrite_ptr, /* glGetSyncivAPPLE */ + epoxy_glGetTexBumpParameterfvATI_dispatch_table_rewrite_ptr, /* glGetTexBumpParameterfvATI */ + epoxy_glGetTexBumpParameterivATI_dispatch_table_rewrite_ptr, /* glGetTexBumpParameterivATI */ + epoxy_glGetTexEnvfv_dispatch_table_rewrite_ptr, /* glGetTexEnvfv */ + epoxy_glGetTexEnviv_dispatch_table_rewrite_ptr, /* glGetTexEnviv */ + epoxy_glGetTexEnvxv_dispatch_table_rewrite_ptr, /* glGetTexEnvxv */ + epoxy_glGetTexEnvxvOES_dispatch_table_rewrite_ptr, /* glGetTexEnvxvOES */ + epoxy_glGetTexFilterFuncSGIS_dispatch_table_rewrite_ptr, /* glGetTexFilterFuncSGIS */ + epoxy_glGetTexGendv_dispatch_table_rewrite_ptr, /* glGetTexGendv */ + epoxy_glGetTexGenfv_dispatch_table_rewrite_ptr, /* glGetTexGenfv */ + epoxy_glGetTexGenfvOES_dispatch_table_rewrite_ptr, /* glGetTexGenfvOES */ + epoxy_glGetTexGeniv_dispatch_table_rewrite_ptr, /* glGetTexGeniv */ + epoxy_glGetTexGenivOES_dispatch_table_rewrite_ptr, /* glGetTexGenivOES */ + epoxy_glGetTexGenxvOES_dispatch_table_rewrite_ptr, /* glGetTexGenxvOES */ + epoxy_glGetTexImage_dispatch_table_rewrite_ptr, /* glGetTexImage */ + epoxy_glGetTexLevelParameterfv_dispatch_table_rewrite_ptr, /* glGetTexLevelParameterfv */ + epoxy_glGetTexLevelParameteriv_dispatch_table_rewrite_ptr, /* glGetTexLevelParameteriv */ + epoxy_glGetTexLevelParameterxvOES_dispatch_table_rewrite_ptr, /* glGetTexLevelParameterxvOES */ + epoxy_glGetTexParameterIiv_dispatch_table_rewrite_ptr, /* glGetTexParameterIiv */ + epoxy_glGetTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetTexParameterIivEXT */ + epoxy_glGetTexParameterIivOES_dispatch_table_rewrite_ptr, /* glGetTexParameterIivOES */ + epoxy_glGetTexParameterIuiv_dispatch_table_rewrite_ptr, /* glGetTexParameterIuiv */ + epoxy_glGetTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetTexParameterIuivEXT */ + epoxy_glGetTexParameterIuivOES_dispatch_table_rewrite_ptr, /* glGetTexParameterIuivOES */ + epoxy_glGetTexParameterPointervAPPLE_dispatch_table_rewrite_ptr, /* glGetTexParameterPointervAPPLE */ + epoxy_glGetTexParameterfv_dispatch_table_rewrite_ptr, /* glGetTexParameterfv */ + epoxy_glGetTexParameteriv_dispatch_table_rewrite_ptr, /* glGetTexParameteriv */ + epoxy_glGetTexParameterxv_dispatch_table_rewrite_ptr, /* glGetTexParameterxv */ + epoxy_glGetTexParameterxvOES_dispatch_table_rewrite_ptr, /* glGetTexParameterxvOES */ + epoxy_glGetTextureHandleARB_dispatch_table_rewrite_ptr, /* glGetTextureHandleARB */ + epoxy_glGetTextureHandleNV_dispatch_table_rewrite_ptr, /* glGetTextureHandleNV */ + epoxy_glGetTextureImage_dispatch_table_rewrite_ptr, /* glGetTextureImage */ + epoxy_glGetTextureImageEXT_dispatch_table_rewrite_ptr, /* glGetTextureImageEXT */ + epoxy_glGetTextureLevelParameterfv_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameterfv */ + epoxy_glGetTextureLevelParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameterfvEXT */ + epoxy_glGetTextureLevelParameteriv_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameteriv */ + epoxy_glGetTextureLevelParameterivEXT_dispatch_table_rewrite_ptr, /* glGetTextureLevelParameterivEXT */ + epoxy_glGetTextureParameterIiv_dispatch_table_rewrite_ptr, /* glGetTextureParameterIiv */ + epoxy_glGetTextureParameterIivEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterIivEXT */ + epoxy_glGetTextureParameterIuiv_dispatch_table_rewrite_ptr, /* glGetTextureParameterIuiv */ + epoxy_glGetTextureParameterIuivEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterIuivEXT */ + epoxy_glGetTextureParameterfv_dispatch_table_rewrite_ptr, /* glGetTextureParameterfv */ + epoxy_glGetTextureParameterfvEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterfvEXT */ + epoxy_glGetTextureParameteriv_dispatch_table_rewrite_ptr, /* glGetTextureParameteriv */ + epoxy_glGetTextureParameterivEXT_dispatch_table_rewrite_ptr, /* glGetTextureParameterivEXT */ + epoxy_glGetTextureSamplerHandleARB_dispatch_table_rewrite_ptr, /* glGetTextureSamplerHandleARB */ + epoxy_glGetTextureSamplerHandleNV_dispatch_table_rewrite_ptr, /* glGetTextureSamplerHandleNV */ + epoxy_glGetTextureSubImage_dispatch_table_rewrite_ptr, /* glGetTextureSubImage */ + epoxy_glGetTrackMatrixivNV_dispatch_table_rewrite_ptr, /* glGetTrackMatrixivNV */ + epoxy_glGetTransformFeedbackVarying_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackVarying */ + epoxy_glGetTransformFeedbackVaryingEXT_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackVaryingEXT */ + epoxy_glGetTransformFeedbackVaryingNV_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackVaryingNV */ + epoxy_glGetTransformFeedbacki64_v_dispatch_table_rewrite_ptr, /* glGetTransformFeedbacki64_v */ + epoxy_glGetTransformFeedbacki_v_dispatch_table_rewrite_ptr, /* glGetTransformFeedbacki_v */ + epoxy_glGetTransformFeedbackiv_dispatch_table_rewrite_ptr, /* glGetTransformFeedbackiv */ + epoxy_glGetTranslatedShaderSourceANGLE_dispatch_table_rewrite_ptr, /* glGetTranslatedShaderSourceANGLE */ + epoxy_glGetUniformBlockIndex_dispatch_table_rewrite_ptr, /* glGetUniformBlockIndex */ + epoxy_glGetUniformBufferSizeEXT_dispatch_table_rewrite_ptr, /* glGetUniformBufferSizeEXT */ + epoxy_glGetUniformIndices_dispatch_table_rewrite_ptr, /* glGetUniformIndices */ + epoxy_glGetUniformLocation_dispatch_table_rewrite_ptr, /* glGetUniformLocation */ + epoxy_glGetUniformLocationARB_dispatch_table_rewrite_ptr, /* glGetUniformLocationARB */ + epoxy_glGetUniformOffsetEXT_dispatch_table_rewrite_ptr, /* glGetUniformOffsetEXT */ + epoxy_glGetUniformSubroutineuiv_dispatch_table_rewrite_ptr, /* glGetUniformSubroutineuiv */ + epoxy_glGetUniformdv_dispatch_table_rewrite_ptr, /* glGetUniformdv */ + epoxy_glGetUniformfv_dispatch_table_rewrite_ptr, /* glGetUniformfv */ + epoxy_glGetUniformfvARB_dispatch_table_rewrite_ptr, /* glGetUniformfvARB */ + epoxy_glGetUniformi64vARB_dispatch_table_rewrite_ptr, /* glGetUniformi64vARB */ + epoxy_glGetUniformi64vNV_dispatch_table_rewrite_ptr, /* glGetUniformi64vNV */ + epoxy_glGetUniformiv_dispatch_table_rewrite_ptr, /* glGetUniformiv */ + epoxy_glGetUniformivARB_dispatch_table_rewrite_ptr, /* glGetUniformivARB */ + epoxy_glGetUniformui64vARB_dispatch_table_rewrite_ptr, /* glGetUniformui64vARB */ + epoxy_glGetUniformui64vNV_dispatch_table_rewrite_ptr, /* glGetUniformui64vNV */ + epoxy_glGetUniformuiv_dispatch_table_rewrite_ptr, /* glGetUniformuiv */ + epoxy_glGetUniformuivEXT_dispatch_table_rewrite_ptr, /* glGetUniformuivEXT */ + epoxy_glGetVariantArrayObjectfvATI_dispatch_table_rewrite_ptr, /* glGetVariantArrayObjectfvATI */ + epoxy_glGetVariantArrayObjectivATI_dispatch_table_rewrite_ptr, /* glGetVariantArrayObjectivATI */ + epoxy_glGetVariantBooleanvEXT_dispatch_table_rewrite_ptr, /* glGetVariantBooleanvEXT */ + epoxy_glGetVariantFloatvEXT_dispatch_table_rewrite_ptr, /* glGetVariantFloatvEXT */ + epoxy_glGetVariantIntegervEXT_dispatch_table_rewrite_ptr, /* glGetVariantIntegervEXT */ + epoxy_glGetVariantPointervEXT_dispatch_table_rewrite_ptr, /* glGetVariantPointervEXT */ + epoxy_glGetVaryingLocationNV_dispatch_table_rewrite_ptr, /* glGetVaryingLocationNV */ + epoxy_glGetVertexArrayIndexed64iv_dispatch_table_rewrite_ptr, /* glGetVertexArrayIndexed64iv */ + epoxy_glGetVertexArrayIndexediv_dispatch_table_rewrite_ptr, /* glGetVertexArrayIndexediv */ + epoxy_glGetVertexArrayIntegeri_vEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayIntegeri_vEXT */ + epoxy_glGetVertexArrayIntegervEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayIntegervEXT */ + epoxy_glGetVertexArrayPointeri_vEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayPointeri_vEXT */ + epoxy_glGetVertexArrayPointervEXT_dispatch_table_rewrite_ptr, /* glGetVertexArrayPointervEXT */ + epoxy_glGetVertexArrayiv_dispatch_table_rewrite_ptr, /* glGetVertexArrayiv */ + epoxy_glGetVertexAttribArrayObjectfvATI_dispatch_table_rewrite_ptr, /* glGetVertexAttribArrayObjectfvATI */ + epoxy_glGetVertexAttribArrayObjectivATI_dispatch_table_rewrite_ptr, /* glGetVertexAttribArrayObjectivATI */ + epoxy_glGetVertexAttribIiv_dispatch_table_rewrite_ptr, /* glGetVertexAttribIiv */ + epoxy_glGetVertexAttribIivEXT_dispatch_table_rewrite_ptr, /* glGetVertexAttribIivEXT */ + epoxy_glGetVertexAttribIuiv_dispatch_table_rewrite_ptr, /* glGetVertexAttribIuiv */ + epoxy_glGetVertexAttribIuivEXT_dispatch_table_rewrite_ptr, /* glGetVertexAttribIuivEXT */ + epoxy_glGetVertexAttribLdv_dispatch_table_rewrite_ptr, /* glGetVertexAttribLdv */ + epoxy_glGetVertexAttribLdvEXT_dispatch_table_rewrite_ptr, /* glGetVertexAttribLdvEXT */ + epoxy_glGetVertexAttribLi64vNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribLi64vNV */ + epoxy_glGetVertexAttribLui64vARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribLui64vARB */ + epoxy_glGetVertexAttribLui64vNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribLui64vNV */ + epoxy_glGetVertexAttribPointerv_dispatch_table_rewrite_ptr, /* glGetVertexAttribPointerv */ + epoxy_glGetVertexAttribPointervARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribPointervARB */ + epoxy_glGetVertexAttribPointervNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribPointervNV */ + epoxy_glGetVertexAttribdv_dispatch_table_rewrite_ptr, /* glGetVertexAttribdv */ + epoxy_glGetVertexAttribdvARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribdvARB */ + epoxy_glGetVertexAttribdvNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribdvNV */ + epoxy_glGetVertexAttribfv_dispatch_table_rewrite_ptr, /* glGetVertexAttribfv */ + epoxy_glGetVertexAttribfvARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribfvARB */ + epoxy_glGetVertexAttribfvNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribfvNV */ + epoxy_glGetVertexAttribiv_dispatch_table_rewrite_ptr, /* glGetVertexAttribiv */ + epoxy_glGetVertexAttribivARB_dispatch_table_rewrite_ptr, /* glGetVertexAttribivARB */ + epoxy_glGetVertexAttribivNV_dispatch_table_rewrite_ptr, /* glGetVertexAttribivNV */ + epoxy_glGetVideoCaptureStreamdvNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureStreamdvNV */ + epoxy_glGetVideoCaptureStreamfvNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureStreamfvNV */ + epoxy_glGetVideoCaptureStreamivNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureStreamivNV */ + epoxy_glGetVideoCaptureivNV_dispatch_table_rewrite_ptr, /* glGetVideoCaptureivNV */ + epoxy_glGetVideoi64vNV_dispatch_table_rewrite_ptr, /* glGetVideoi64vNV */ + epoxy_glGetVideoivNV_dispatch_table_rewrite_ptr, /* glGetVideoivNV */ + epoxy_glGetVideoui64vNV_dispatch_table_rewrite_ptr, /* glGetVideoui64vNV */ + epoxy_glGetVideouivNV_dispatch_table_rewrite_ptr, /* glGetVideouivNV */ + epoxy_glGetnColorTable_dispatch_table_rewrite_ptr, /* glGetnColorTable */ + epoxy_glGetnColorTableARB_dispatch_table_rewrite_ptr, /* glGetnColorTableARB */ + epoxy_glGetnCompressedTexImage_dispatch_table_rewrite_ptr, /* glGetnCompressedTexImage */ + epoxy_glGetnCompressedTexImageARB_dispatch_table_rewrite_ptr, /* glGetnCompressedTexImageARB */ + epoxy_glGetnConvolutionFilter_dispatch_table_rewrite_ptr, /* glGetnConvolutionFilter */ + epoxy_glGetnConvolutionFilterARB_dispatch_table_rewrite_ptr, /* glGetnConvolutionFilterARB */ + epoxy_glGetnHistogram_dispatch_table_rewrite_ptr, /* glGetnHistogram */ + epoxy_glGetnHistogramARB_dispatch_table_rewrite_ptr, /* glGetnHistogramARB */ + epoxy_glGetnMapdv_dispatch_table_rewrite_ptr, /* glGetnMapdv */ + epoxy_glGetnMapdvARB_dispatch_table_rewrite_ptr, /* glGetnMapdvARB */ + epoxy_glGetnMapfv_dispatch_table_rewrite_ptr, /* glGetnMapfv */ + epoxy_glGetnMapfvARB_dispatch_table_rewrite_ptr, /* glGetnMapfvARB */ + epoxy_glGetnMapiv_dispatch_table_rewrite_ptr, /* glGetnMapiv */ + epoxy_glGetnMapivARB_dispatch_table_rewrite_ptr, /* glGetnMapivARB */ + epoxy_glGetnMinmax_dispatch_table_rewrite_ptr, /* glGetnMinmax */ + epoxy_glGetnMinmaxARB_dispatch_table_rewrite_ptr, /* glGetnMinmaxARB */ + epoxy_glGetnPixelMapfv_dispatch_table_rewrite_ptr, /* glGetnPixelMapfv */ + epoxy_glGetnPixelMapfvARB_dispatch_table_rewrite_ptr, /* glGetnPixelMapfvARB */ + epoxy_glGetnPixelMapuiv_dispatch_table_rewrite_ptr, /* glGetnPixelMapuiv */ + epoxy_glGetnPixelMapuivARB_dispatch_table_rewrite_ptr, /* glGetnPixelMapuivARB */ + epoxy_glGetnPixelMapusv_dispatch_table_rewrite_ptr, /* glGetnPixelMapusv */ + epoxy_glGetnPixelMapusvARB_dispatch_table_rewrite_ptr, /* glGetnPixelMapusvARB */ + epoxy_glGetnPolygonStipple_dispatch_table_rewrite_ptr, /* glGetnPolygonStipple */ + epoxy_glGetnPolygonStippleARB_dispatch_table_rewrite_ptr, /* glGetnPolygonStippleARB */ + epoxy_glGetnSeparableFilter_dispatch_table_rewrite_ptr, /* glGetnSeparableFilter */ + epoxy_glGetnSeparableFilterARB_dispatch_table_rewrite_ptr, /* glGetnSeparableFilterARB */ + epoxy_glGetnTexImage_dispatch_table_rewrite_ptr, /* glGetnTexImage */ + epoxy_glGetnTexImageARB_dispatch_table_rewrite_ptr, /* glGetnTexImageARB */ + epoxy_glGetnUniformdv_dispatch_table_rewrite_ptr, /* glGetnUniformdv */ + epoxy_glGetnUniformdvARB_dispatch_table_rewrite_ptr, /* glGetnUniformdvARB */ + epoxy_glGetnUniformfv_dispatch_table_rewrite_ptr, /* glGetnUniformfv */ + epoxy_glGetnUniformfvARB_dispatch_table_rewrite_ptr, /* glGetnUniformfvARB */ + epoxy_glGetnUniformfvEXT_dispatch_table_rewrite_ptr, /* glGetnUniformfvEXT */ + epoxy_glGetnUniformfvKHR_dispatch_table_rewrite_ptr, /* glGetnUniformfvKHR */ + epoxy_glGetnUniformi64vARB_dispatch_table_rewrite_ptr, /* glGetnUniformi64vARB */ + epoxy_glGetnUniformiv_dispatch_table_rewrite_ptr, /* glGetnUniformiv */ + epoxy_glGetnUniformivARB_dispatch_table_rewrite_ptr, /* glGetnUniformivARB */ + epoxy_glGetnUniformivEXT_dispatch_table_rewrite_ptr, /* glGetnUniformivEXT */ + epoxy_glGetnUniformivKHR_dispatch_table_rewrite_ptr, /* glGetnUniformivKHR */ + epoxy_glGetnUniformui64vARB_dispatch_table_rewrite_ptr, /* glGetnUniformui64vARB */ + epoxy_glGetnUniformuiv_dispatch_table_rewrite_ptr, /* glGetnUniformuiv */ + epoxy_glGetnUniformuivARB_dispatch_table_rewrite_ptr, /* glGetnUniformuivARB */ + epoxy_glGetnUniformuivKHR_dispatch_table_rewrite_ptr, /* glGetnUniformuivKHR */ + epoxy_glGlobalAlphaFactorbSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorbSUN */ + epoxy_glGlobalAlphaFactordSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactordSUN */ + epoxy_glGlobalAlphaFactorfSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorfSUN */ + epoxy_glGlobalAlphaFactoriSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactoriSUN */ + epoxy_glGlobalAlphaFactorsSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorsSUN */ + epoxy_glGlobalAlphaFactorubSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorubSUN */ + epoxy_glGlobalAlphaFactoruiSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactoruiSUN */ + epoxy_glGlobalAlphaFactorusSUN_dispatch_table_rewrite_ptr, /* glGlobalAlphaFactorusSUN */ + epoxy_glHint_dispatch_table_rewrite_ptr, /* glHint */ + epoxy_glHintPGI_dispatch_table_rewrite_ptr, /* glHintPGI */ + epoxy_glHistogram_dispatch_table_rewrite_ptr, /* glHistogram */ + epoxy_glHistogramEXT_dispatch_table_rewrite_ptr, /* glHistogramEXT */ + epoxy_glIglooInterfaceSGIX_dispatch_table_rewrite_ptr, /* glIglooInterfaceSGIX */ + epoxy_glImageTransformParameterfHP_dispatch_table_rewrite_ptr, /* glImageTransformParameterfHP */ + epoxy_glImageTransformParameterfvHP_dispatch_table_rewrite_ptr, /* glImageTransformParameterfvHP */ + epoxy_glImageTransformParameteriHP_dispatch_table_rewrite_ptr, /* glImageTransformParameteriHP */ + epoxy_glImageTransformParameterivHP_dispatch_table_rewrite_ptr, /* glImageTransformParameterivHP */ + epoxy_glImportSyncEXT_dispatch_table_rewrite_ptr, /* glImportSyncEXT */ + epoxy_glIndexFormatNV_dispatch_table_rewrite_ptr, /* glIndexFormatNV */ + epoxy_glIndexFuncEXT_dispatch_table_rewrite_ptr, /* glIndexFuncEXT */ + epoxy_glIndexMask_dispatch_table_rewrite_ptr, /* glIndexMask */ + epoxy_glIndexMaterialEXT_dispatch_table_rewrite_ptr, /* glIndexMaterialEXT */ + epoxy_glIndexPointer_dispatch_table_rewrite_ptr, /* glIndexPointer */ + epoxy_glIndexPointerEXT_dispatch_table_rewrite_ptr, /* glIndexPointerEXT */ + epoxy_glIndexPointerListIBM_dispatch_table_rewrite_ptr, /* glIndexPointerListIBM */ + epoxy_glIndexd_dispatch_table_rewrite_ptr, /* glIndexd */ + epoxy_glIndexdv_dispatch_table_rewrite_ptr, /* glIndexdv */ + epoxy_glIndexf_dispatch_table_rewrite_ptr, /* glIndexf */ + epoxy_glIndexfv_dispatch_table_rewrite_ptr, /* glIndexfv */ + epoxy_glIndexi_dispatch_table_rewrite_ptr, /* glIndexi */ + epoxy_glIndexiv_dispatch_table_rewrite_ptr, /* glIndexiv */ + epoxy_glIndexs_dispatch_table_rewrite_ptr, /* glIndexs */ + epoxy_glIndexsv_dispatch_table_rewrite_ptr, /* glIndexsv */ + epoxy_glIndexub_dispatch_table_rewrite_ptr, /* glIndexub */ + epoxy_glIndexubv_dispatch_table_rewrite_ptr, /* glIndexubv */ + epoxy_glIndexxOES_dispatch_table_rewrite_ptr, /* glIndexxOES */ + epoxy_glIndexxvOES_dispatch_table_rewrite_ptr, /* glIndexxvOES */ + epoxy_glInitNames_dispatch_table_rewrite_ptr, /* glInitNames */ + epoxy_glInsertComponentEXT_dispatch_table_rewrite_ptr, /* glInsertComponentEXT */ + epoxy_glInsertEventMarkerEXT_dispatch_table_rewrite_ptr, /* glInsertEventMarkerEXT */ + epoxy_glInstrumentsBufferSGIX_dispatch_table_rewrite_ptr, /* glInstrumentsBufferSGIX */ + epoxy_glInterleavedArrays_dispatch_table_rewrite_ptr, /* glInterleavedArrays */ + epoxy_glInterpolatePathsNV_dispatch_table_rewrite_ptr, /* glInterpolatePathsNV */ + epoxy_glInvalidateBufferData_dispatch_table_rewrite_ptr, /* glInvalidateBufferData */ + epoxy_glInvalidateBufferSubData_dispatch_table_rewrite_ptr, /* glInvalidateBufferSubData */ + epoxy_glInvalidateFramebuffer_dispatch_table_rewrite_ptr, /* glInvalidateFramebuffer */ + epoxy_glInvalidateNamedFramebufferData_dispatch_table_rewrite_ptr, /* glInvalidateNamedFramebufferData */ + epoxy_glInvalidateNamedFramebufferSubData_dispatch_table_rewrite_ptr, /* glInvalidateNamedFramebufferSubData */ + epoxy_glInvalidateSubFramebuffer_dispatch_table_rewrite_ptr, /* glInvalidateSubFramebuffer */ + epoxy_glInvalidateTexImage_dispatch_table_rewrite_ptr, /* glInvalidateTexImage */ + epoxy_glInvalidateTexSubImage_dispatch_table_rewrite_ptr, /* glInvalidateTexSubImage */ + epoxy_glIsAsyncMarkerSGIX_dispatch_table_rewrite_ptr, /* glIsAsyncMarkerSGIX */ + epoxy_glIsBuffer_dispatch_table_rewrite_ptr, /* glIsBuffer */ + epoxy_glIsBufferARB_dispatch_table_rewrite_ptr, /* glIsBufferARB */ + epoxy_glIsBufferResidentNV_dispatch_table_rewrite_ptr, /* glIsBufferResidentNV */ + epoxy_glIsCommandListNV_dispatch_table_rewrite_ptr, /* glIsCommandListNV */ + epoxy_glIsEnabled_dispatch_table_rewrite_ptr, /* glIsEnabled */ + epoxy_glIsEnabledIndexedEXT_dispatch_table_rewrite_ptr, /* glIsEnabledIndexedEXT */ + epoxy_glIsEnabledi_dispatch_table_rewrite_ptr, /* glIsEnabledi */ + epoxy_glIsEnablediEXT_dispatch_table_rewrite_ptr, /* glIsEnablediEXT */ + epoxy_glIsEnablediNV_dispatch_table_rewrite_ptr, /* glIsEnablediNV */ + epoxy_glIsEnablediOES_dispatch_table_rewrite_ptr, /* glIsEnablediOES */ + epoxy_glIsFenceAPPLE_dispatch_table_rewrite_ptr, /* glIsFenceAPPLE */ + epoxy_glIsFenceNV_dispatch_table_rewrite_ptr, /* glIsFenceNV */ + epoxy_glIsFramebuffer_dispatch_table_rewrite_ptr, /* glIsFramebuffer */ + epoxy_glIsFramebufferEXT_dispatch_table_rewrite_ptr, /* glIsFramebufferEXT */ + epoxy_glIsFramebufferOES_dispatch_table_rewrite_ptr, /* glIsFramebufferOES */ + epoxy_glIsImageHandleResidentARB_dispatch_table_rewrite_ptr, /* glIsImageHandleResidentARB */ + epoxy_glIsImageHandleResidentNV_dispatch_table_rewrite_ptr, /* glIsImageHandleResidentNV */ + epoxy_glIsList_dispatch_table_rewrite_ptr, /* glIsList */ + epoxy_glIsNameAMD_dispatch_table_rewrite_ptr, /* glIsNameAMD */ + epoxy_glIsNamedBufferResidentNV_dispatch_table_rewrite_ptr, /* glIsNamedBufferResidentNV */ + epoxy_glIsNamedStringARB_dispatch_table_rewrite_ptr, /* glIsNamedStringARB */ + epoxy_glIsObjectBufferATI_dispatch_table_rewrite_ptr, /* glIsObjectBufferATI */ + epoxy_glIsOcclusionQueryNV_dispatch_table_rewrite_ptr, /* glIsOcclusionQueryNV */ + epoxy_glIsPathNV_dispatch_table_rewrite_ptr, /* glIsPathNV */ + epoxy_glIsPointInFillPathNV_dispatch_table_rewrite_ptr, /* glIsPointInFillPathNV */ + epoxy_glIsPointInStrokePathNV_dispatch_table_rewrite_ptr, /* glIsPointInStrokePathNV */ + epoxy_glIsProgram_dispatch_table_rewrite_ptr, /* glIsProgram */ + epoxy_glIsProgramARB_dispatch_table_rewrite_ptr, /* glIsProgramARB */ + epoxy_glIsProgramNV_dispatch_table_rewrite_ptr, /* glIsProgramNV */ + epoxy_glIsProgramPipeline_dispatch_table_rewrite_ptr, /* glIsProgramPipeline */ + epoxy_glIsProgramPipelineEXT_dispatch_table_rewrite_ptr, /* glIsProgramPipelineEXT */ + epoxy_glIsQuery_dispatch_table_rewrite_ptr, /* glIsQuery */ + epoxy_glIsQueryARB_dispatch_table_rewrite_ptr, /* glIsQueryARB */ + epoxy_glIsQueryEXT_dispatch_table_rewrite_ptr, /* glIsQueryEXT */ + epoxy_glIsRenderbuffer_dispatch_table_rewrite_ptr, /* glIsRenderbuffer */ + epoxy_glIsRenderbufferEXT_dispatch_table_rewrite_ptr, /* glIsRenderbufferEXT */ + epoxy_glIsRenderbufferOES_dispatch_table_rewrite_ptr, /* glIsRenderbufferOES */ + epoxy_glIsSampler_dispatch_table_rewrite_ptr, /* glIsSampler */ + epoxy_glIsShader_dispatch_table_rewrite_ptr, /* glIsShader */ + epoxy_glIsStateNV_dispatch_table_rewrite_ptr, /* glIsStateNV */ + epoxy_glIsSync_dispatch_table_rewrite_ptr, /* glIsSync */ + epoxy_glIsSyncAPPLE_dispatch_table_rewrite_ptr, /* glIsSyncAPPLE */ + epoxy_glIsTexture_dispatch_table_rewrite_ptr, /* glIsTexture */ + epoxy_glIsTextureEXT_dispatch_table_rewrite_ptr, /* glIsTextureEXT */ + epoxy_glIsTextureHandleResidentARB_dispatch_table_rewrite_ptr, /* glIsTextureHandleResidentARB */ + epoxy_glIsTextureHandleResidentNV_dispatch_table_rewrite_ptr, /* glIsTextureHandleResidentNV */ + epoxy_glIsTransformFeedback_dispatch_table_rewrite_ptr, /* glIsTransformFeedback */ + epoxy_glIsTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glIsTransformFeedbackNV */ + epoxy_glIsVariantEnabledEXT_dispatch_table_rewrite_ptr, /* glIsVariantEnabledEXT */ + epoxy_glIsVertexArray_dispatch_table_rewrite_ptr, /* glIsVertexArray */ + epoxy_glIsVertexArrayAPPLE_dispatch_table_rewrite_ptr, /* glIsVertexArrayAPPLE */ + epoxy_glIsVertexArrayOES_dispatch_table_rewrite_ptr, /* glIsVertexArrayOES */ + epoxy_glIsVertexAttribEnabledAPPLE_dispatch_table_rewrite_ptr, /* glIsVertexAttribEnabledAPPLE */ + epoxy_glLabelObjectEXT_dispatch_table_rewrite_ptr, /* glLabelObjectEXT */ + epoxy_glLightEnviSGIX_dispatch_table_rewrite_ptr, /* glLightEnviSGIX */ + epoxy_glLightModelf_dispatch_table_rewrite_ptr, /* glLightModelf */ + epoxy_glLightModelfv_dispatch_table_rewrite_ptr, /* glLightModelfv */ + epoxy_glLightModeli_dispatch_table_rewrite_ptr, /* glLightModeli */ + epoxy_glLightModeliv_dispatch_table_rewrite_ptr, /* glLightModeliv */ + epoxy_glLightModelx_dispatch_table_rewrite_ptr, /* glLightModelx */ + epoxy_glLightModelxOES_dispatch_table_rewrite_ptr, /* glLightModelxOES */ + epoxy_glLightModelxv_dispatch_table_rewrite_ptr, /* glLightModelxv */ + epoxy_glLightModelxvOES_dispatch_table_rewrite_ptr, /* glLightModelxvOES */ + epoxy_glLightf_dispatch_table_rewrite_ptr, /* glLightf */ + epoxy_glLightfv_dispatch_table_rewrite_ptr, /* glLightfv */ + epoxy_glLighti_dispatch_table_rewrite_ptr, /* glLighti */ + epoxy_glLightiv_dispatch_table_rewrite_ptr, /* glLightiv */ + epoxy_glLightx_dispatch_table_rewrite_ptr, /* glLightx */ + epoxy_glLightxOES_dispatch_table_rewrite_ptr, /* glLightxOES */ + epoxy_glLightxv_dispatch_table_rewrite_ptr, /* glLightxv */ + epoxy_glLightxvOES_dispatch_table_rewrite_ptr, /* glLightxvOES */ + epoxy_glLineStipple_dispatch_table_rewrite_ptr, /* glLineStipple */ + epoxy_glLineWidth_dispatch_table_rewrite_ptr, /* glLineWidth */ + epoxy_glLineWidthx_dispatch_table_rewrite_ptr, /* glLineWidthx */ + epoxy_glLineWidthxOES_dispatch_table_rewrite_ptr, /* glLineWidthxOES */ + epoxy_glLinkProgram_dispatch_table_rewrite_ptr, /* glLinkProgram */ + epoxy_glLinkProgramARB_dispatch_table_rewrite_ptr, /* glLinkProgramARB */ + epoxy_glListBase_dispatch_table_rewrite_ptr, /* glListBase */ + epoxy_glListDrawCommandsStatesClientNV_dispatch_table_rewrite_ptr, /* glListDrawCommandsStatesClientNV */ + epoxy_glListParameterfSGIX_dispatch_table_rewrite_ptr, /* glListParameterfSGIX */ + epoxy_glListParameterfvSGIX_dispatch_table_rewrite_ptr, /* glListParameterfvSGIX */ + epoxy_glListParameteriSGIX_dispatch_table_rewrite_ptr, /* glListParameteriSGIX */ + epoxy_glListParameterivSGIX_dispatch_table_rewrite_ptr, /* glListParameterivSGIX */ + epoxy_glLoadIdentity_dispatch_table_rewrite_ptr, /* glLoadIdentity */ + epoxy_glLoadIdentityDeformationMapSGIX_dispatch_table_rewrite_ptr, /* glLoadIdentityDeformationMapSGIX */ + epoxy_glLoadMatrixd_dispatch_table_rewrite_ptr, /* glLoadMatrixd */ + epoxy_glLoadMatrixf_dispatch_table_rewrite_ptr, /* glLoadMatrixf */ + epoxy_glLoadMatrixx_dispatch_table_rewrite_ptr, /* glLoadMatrixx */ + epoxy_glLoadMatrixxOES_dispatch_table_rewrite_ptr, /* glLoadMatrixxOES */ + epoxy_glLoadName_dispatch_table_rewrite_ptr, /* glLoadName */ + epoxy_glLoadPaletteFromModelViewMatrixOES_dispatch_table_rewrite_ptr, /* glLoadPaletteFromModelViewMatrixOES */ + epoxy_glLoadProgramNV_dispatch_table_rewrite_ptr, /* glLoadProgramNV */ + epoxy_glLoadTransposeMatrixd_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixd */ + epoxy_glLoadTransposeMatrixdARB_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixdARB */ + epoxy_glLoadTransposeMatrixf_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixf */ + epoxy_glLoadTransposeMatrixfARB_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixfARB */ + epoxy_glLoadTransposeMatrixxOES_dispatch_table_rewrite_ptr, /* glLoadTransposeMatrixxOES */ + epoxy_glLockArraysEXT_dispatch_table_rewrite_ptr, /* glLockArraysEXT */ + epoxy_glLogicOp_dispatch_table_rewrite_ptr, /* glLogicOp */ + epoxy_glMakeBufferNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeBufferNonResidentNV */ + epoxy_glMakeBufferResidentNV_dispatch_table_rewrite_ptr, /* glMakeBufferResidentNV */ + epoxy_glMakeImageHandleNonResidentARB_dispatch_table_rewrite_ptr, /* glMakeImageHandleNonResidentARB */ + epoxy_glMakeImageHandleNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeImageHandleNonResidentNV */ + epoxy_glMakeImageHandleResidentARB_dispatch_table_rewrite_ptr, /* glMakeImageHandleResidentARB */ + epoxy_glMakeImageHandleResidentNV_dispatch_table_rewrite_ptr, /* glMakeImageHandleResidentNV */ + epoxy_glMakeNamedBufferNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeNamedBufferNonResidentNV */ + epoxy_glMakeNamedBufferResidentNV_dispatch_table_rewrite_ptr, /* glMakeNamedBufferResidentNV */ + epoxy_glMakeTextureHandleNonResidentARB_dispatch_table_rewrite_ptr, /* glMakeTextureHandleNonResidentARB */ + epoxy_glMakeTextureHandleNonResidentNV_dispatch_table_rewrite_ptr, /* glMakeTextureHandleNonResidentNV */ + epoxy_glMakeTextureHandleResidentARB_dispatch_table_rewrite_ptr, /* glMakeTextureHandleResidentARB */ + epoxy_glMakeTextureHandleResidentNV_dispatch_table_rewrite_ptr, /* glMakeTextureHandleResidentNV */ + epoxy_glMap1d_dispatch_table_rewrite_ptr, /* glMap1d */ + epoxy_glMap1f_dispatch_table_rewrite_ptr, /* glMap1f */ + epoxy_glMap1xOES_dispatch_table_rewrite_ptr, /* glMap1xOES */ + epoxy_glMap2d_dispatch_table_rewrite_ptr, /* glMap2d */ + epoxy_glMap2f_dispatch_table_rewrite_ptr, /* glMap2f */ + epoxy_glMap2xOES_dispatch_table_rewrite_ptr, /* glMap2xOES */ + epoxy_glMapBuffer_dispatch_table_rewrite_ptr, /* glMapBuffer */ + epoxy_glMapBufferARB_dispatch_table_rewrite_ptr, /* glMapBufferARB */ + epoxy_glMapBufferOES_dispatch_table_rewrite_ptr, /* glMapBufferOES */ + epoxy_glMapBufferRange_dispatch_table_rewrite_ptr, /* glMapBufferRange */ + epoxy_glMapBufferRangeEXT_dispatch_table_rewrite_ptr, /* glMapBufferRangeEXT */ + epoxy_glMapControlPointsNV_dispatch_table_rewrite_ptr, /* glMapControlPointsNV */ + epoxy_glMapGrid1d_dispatch_table_rewrite_ptr, /* glMapGrid1d */ + epoxy_glMapGrid1f_dispatch_table_rewrite_ptr, /* glMapGrid1f */ + epoxy_glMapGrid1xOES_dispatch_table_rewrite_ptr, /* glMapGrid1xOES */ + epoxy_glMapGrid2d_dispatch_table_rewrite_ptr, /* glMapGrid2d */ + epoxy_glMapGrid2f_dispatch_table_rewrite_ptr, /* glMapGrid2f */ + epoxy_glMapGrid2xOES_dispatch_table_rewrite_ptr, /* glMapGrid2xOES */ + epoxy_glMapNamedBuffer_dispatch_table_rewrite_ptr, /* glMapNamedBuffer */ + epoxy_glMapNamedBufferEXT_dispatch_table_rewrite_ptr, /* glMapNamedBufferEXT */ + epoxy_glMapNamedBufferRange_dispatch_table_rewrite_ptr, /* glMapNamedBufferRange */ + epoxy_glMapNamedBufferRangeEXT_dispatch_table_rewrite_ptr, /* glMapNamedBufferRangeEXT */ + epoxy_glMapObjectBufferATI_dispatch_table_rewrite_ptr, /* glMapObjectBufferATI */ + epoxy_glMapParameterfvNV_dispatch_table_rewrite_ptr, /* glMapParameterfvNV */ + epoxy_glMapParameterivNV_dispatch_table_rewrite_ptr, /* glMapParameterivNV */ + epoxy_glMapTexture2DINTEL_dispatch_table_rewrite_ptr, /* glMapTexture2DINTEL */ + epoxy_glMapVertexAttrib1dAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib1dAPPLE */ + epoxy_glMapVertexAttrib1fAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib1fAPPLE */ + epoxy_glMapVertexAttrib2dAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib2dAPPLE */ + epoxy_glMapVertexAttrib2fAPPLE_dispatch_table_rewrite_ptr, /* glMapVertexAttrib2fAPPLE */ + epoxy_glMaterialf_dispatch_table_rewrite_ptr, /* glMaterialf */ + epoxy_glMaterialfv_dispatch_table_rewrite_ptr, /* glMaterialfv */ + epoxy_glMateriali_dispatch_table_rewrite_ptr, /* glMateriali */ + epoxy_glMaterialiv_dispatch_table_rewrite_ptr, /* glMaterialiv */ + epoxy_glMaterialx_dispatch_table_rewrite_ptr, /* glMaterialx */ + epoxy_glMaterialxOES_dispatch_table_rewrite_ptr, /* glMaterialxOES */ + epoxy_glMaterialxv_dispatch_table_rewrite_ptr, /* glMaterialxv */ + epoxy_glMaterialxvOES_dispatch_table_rewrite_ptr, /* glMaterialxvOES */ + epoxy_glMatrixFrustumEXT_dispatch_table_rewrite_ptr, /* glMatrixFrustumEXT */ + epoxy_glMatrixIndexPointerARB_dispatch_table_rewrite_ptr, /* glMatrixIndexPointerARB */ + epoxy_glMatrixIndexPointerOES_dispatch_table_rewrite_ptr, /* glMatrixIndexPointerOES */ + epoxy_glMatrixIndexubvARB_dispatch_table_rewrite_ptr, /* glMatrixIndexubvARB */ + epoxy_glMatrixIndexuivARB_dispatch_table_rewrite_ptr, /* glMatrixIndexuivARB */ + epoxy_glMatrixIndexusvARB_dispatch_table_rewrite_ptr, /* glMatrixIndexusvARB */ + epoxy_glMatrixLoad3x2fNV_dispatch_table_rewrite_ptr, /* glMatrixLoad3x2fNV */ + epoxy_glMatrixLoad3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixLoad3x3fNV */ + epoxy_glMatrixLoadIdentityEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadIdentityEXT */ + epoxy_glMatrixLoadTranspose3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixLoadTranspose3x3fNV */ + epoxy_glMatrixLoadTransposedEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadTransposedEXT */ + epoxy_glMatrixLoadTransposefEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadTransposefEXT */ + epoxy_glMatrixLoaddEXT_dispatch_table_rewrite_ptr, /* glMatrixLoaddEXT */ + epoxy_glMatrixLoadfEXT_dispatch_table_rewrite_ptr, /* glMatrixLoadfEXT */ + epoxy_glMatrixMode_dispatch_table_rewrite_ptr, /* glMatrixMode */ + epoxy_glMatrixMult3x2fNV_dispatch_table_rewrite_ptr, /* glMatrixMult3x2fNV */ + epoxy_glMatrixMult3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixMult3x3fNV */ + epoxy_glMatrixMultTranspose3x3fNV_dispatch_table_rewrite_ptr, /* glMatrixMultTranspose3x3fNV */ + epoxy_glMatrixMultTransposedEXT_dispatch_table_rewrite_ptr, /* glMatrixMultTransposedEXT */ + epoxy_glMatrixMultTransposefEXT_dispatch_table_rewrite_ptr, /* glMatrixMultTransposefEXT */ + epoxy_glMatrixMultdEXT_dispatch_table_rewrite_ptr, /* glMatrixMultdEXT */ + epoxy_glMatrixMultfEXT_dispatch_table_rewrite_ptr, /* glMatrixMultfEXT */ + epoxy_glMatrixOrthoEXT_dispatch_table_rewrite_ptr, /* glMatrixOrthoEXT */ + epoxy_glMatrixPopEXT_dispatch_table_rewrite_ptr, /* glMatrixPopEXT */ + epoxy_glMatrixPushEXT_dispatch_table_rewrite_ptr, /* glMatrixPushEXT */ + epoxy_glMatrixRotatedEXT_dispatch_table_rewrite_ptr, /* glMatrixRotatedEXT */ + epoxy_glMatrixRotatefEXT_dispatch_table_rewrite_ptr, /* glMatrixRotatefEXT */ + epoxy_glMatrixScaledEXT_dispatch_table_rewrite_ptr, /* glMatrixScaledEXT */ + epoxy_glMatrixScalefEXT_dispatch_table_rewrite_ptr, /* glMatrixScalefEXT */ + epoxy_glMatrixTranslatedEXT_dispatch_table_rewrite_ptr, /* glMatrixTranslatedEXT */ + epoxy_glMatrixTranslatefEXT_dispatch_table_rewrite_ptr, /* glMatrixTranslatefEXT */ + epoxy_glMaxShaderCompilerThreadsARB_dispatch_table_rewrite_ptr, /* glMaxShaderCompilerThreadsARB */ + epoxy_glMemoryBarrier_dispatch_table_rewrite_ptr, /* glMemoryBarrier */ + epoxy_glMemoryBarrierByRegion_dispatch_table_rewrite_ptr, /* glMemoryBarrierByRegion */ + epoxy_glMemoryBarrierEXT_dispatch_table_rewrite_ptr, /* glMemoryBarrierEXT */ + epoxy_glMinSampleShading_dispatch_table_rewrite_ptr, /* glMinSampleShading */ + epoxy_glMinSampleShadingARB_dispatch_table_rewrite_ptr, /* glMinSampleShadingARB */ + epoxy_glMinSampleShadingOES_dispatch_table_rewrite_ptr, /* glMinSampleShadingOES */ + epoxy_glMinmax_dispatch_table_rewrite_ptr, /* glMinmax */ + epoxy_glMinmaxEXT_dispatch_table_rewrite_ptr, /* glMinmaxEXT */ + epoxy_glMultMatrixd_dispatch_table_rewrite_ptr, /* glMultMatrixd */ + epoxy_glMultMatrixf_dispatch_table_rewrite_ptr, /* glMultMatrixf */ + epoxy_glMultMatrixx_dispatch_table_rewrite_ptr, /* glMultMatrixx */ + epoxy_glMultMatrixxOES_dispatch_table_rewrite_ptr, /* glMultMatrixxOES */ + epoxy_glMultTransposeMatrixd_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixd */ + epoxy_glMultTransposeMatrixdARB_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixdARB */ + epoxy_glMultTransposeMatrixf_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixf */ + epoxy_glMultTransposeMatrixfARB_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixfARB */ + epoxy_glMultTransposeMatrixxOES_dispatch_table_rewrite_ptr, /* glMultTransposeMatrixxOES */ + epoxy_glMultiDrawArrays_dispatch_table_rewrite_ptr, /* glMultiDrawArrays */ + epoxy_glMultiDrawArraysEXT_dispatch_table_rewrite_ptr, /* glMultiDrawArraysEXT */ + epoxy_glMultiDrawArraysIndirect_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirect */ + epoxy_glMultiDrawArraysIndirectAMD_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectAMD */ + epoxy_glMultiDrawArraysIndirectBindlessCountNV_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectBindlessCountNV */ + epoxy_glMultiDrawArraysIndirectBindlessNV_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectBindlessNV */ + epoxy_glMultiDrawArraysIndirectCountARB_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectCountARB */ + epoxy_glMultiDrawArraysIndirectEXT_dispatch_table_rewrite_ptr, /* glMultiDrawArraysIndirectEXT */ + epoxy_glMultiDrawElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glMultiDrawElementArrayAPPLE */ + epoxy_glMultiDrawElements_dispatch_table_rewrite_ptr, /* glMultiDrawElements */ + epoxy_glMultiDrawElementsBaseVertex_dispatch_table_rewrite_ptr, /* glMultiDrawElementsBaseVertex */ + epoxy_glMultiDrawElementsBaseVertexEXT_dispatch_table_rewrite_ptr, /* glMultiDrawElementsBaseVertexEXT */ + epoxy_glMultiDrawElementsBaseVertexOES_dispatch_table_rewrite_ptr, /* glMultiDrawElementsBaseVertexOES */ + epoxy_glMultiDrawElementsEXT_dispatch_table_rewrite_ptr, /* glMultiDrawElementsEXT */ + epoxy_glMultiDrawElementsIndirect_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirect */ + epoxy_glMultiDrawElementsIndirectAMD_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectAMD */ + epoxy_glMultiDrawElementsIndirectBindlessCountNV_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectBindlessCountNV */ + epoxy_glMultiDrawElementsIndirectBindlessNV_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectBindlessNV */ + epoxy_glMultiDrawElementsIndirectCountARB_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectCountARB */ + epoxy_glMultiDrawElementsIndirectEXT_dispatch_table_rewrite_ptr, /* glMultiDrawElementsIndirectEXT */ + epoxy_glMultiDrawRangeElementArrayAPPLE_dispatch_table_rewrite_ptr, /* glMultiDrawRangeElementArrayAPPLE */ + epoxy_glMultiModeDrawArraysIBM_dispatch_table_rewrite_ptr, /* glMultiModeDrawArraysIBM */ + epoxy_glMultiModeDrawElementsIBM_dispatch_table_rewrite_ptr, /* glMultiModeDrawElementsIBM */ + epoxy_glMultiTexBufferEXT_dispatch_table_rewrite_ptr, /* glMultiTexBufferEXT */ + epoxy_glMultiTexCoord1bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1bOES */ + epoxy_glMultiTexCoord1bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1bvOES */ + epoxy_glMultiTexCoord1d_dispatch_table_rewrite_ptr, /* glMultiTexCoord1d */ + epoxy_glMultiTexCoord1dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1dARB */ + epoxy_glMultiTexCoord1dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1dv */ + epoxy_glMultiTexCoord1dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1dvARB */ + epoxy_glMultiTexCoord1f_dispatch_table_rewrite_ptr, /* glMultiTexCoord1f */ + epoxy_glMultiTexCoord1fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1fARB */ + epoxy_glMultiTexCoord1fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1fv */ + epoxy_glMultiTexCoord1fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1fvARB */ + epoxy_glMultiTexCoord1hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord1hNV */ + epoxy_glMultiTexCoord1hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord1hvNV */ + epoxy_glMultiTexCoord1i_dispatch_table_rewrite_ptr, /* glMultiTexCoord1i */ + epoxy_glMultiTexCoord1iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1iARB */ + epoxy_glMultiTexCoord1iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1iv */ + epoxy_glMultiTexCoord1ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1ivARB */ + epoxy_glMultiTexCoord1s_dispatch_table_rewrite_ptr, /* glMultiTexCoord1s */ + epoxy_glMultiTexCoord1sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1sARB */ + epoxy_glMultiTexCoord1sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord1sv */ + epoxy_glMultiTexCoord1svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord1svARB */ + epoxy_glMultiTexCoord1xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1xOES */ + epoxy_glMultiTexCoord1xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord1xvOES */ + epoxy_glMultiTexCoord2bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2bOES */ + epoxy_glMultiTexCoord2bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2bvOES */ + epoxy_glMultiTexCoord2d_dispatch_table_rewrite_ptr, /* glMultiTexCoord2d */ + epoxy_glMultiTexCoord2dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2dARB */ + epoxy_glMultiTexCoord2dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2dv */ + epoxy_glMultiTexCoord2dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2dvARB */ + epoxy_glMultiTexCoord2f_dispatch_table_rewrite_ptr, /* glMultiTexCoord2f */ + epoxy_glMultiTexCoord2fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2fARB */ + epoxy_glMultiTexCoord2fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2fv */ + epoxy_glMultiTexCoord2fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2fvARB */ + epoxy_glMultiTexCoord2hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord2hNV */ + epoxy_glMultiTexCoord2hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord2hvNV */ + epoxy_glMultiTexCoord2i_dispatch_table_rewrite_ptr, /* glMultiTexCoord2i */ + epoxy_glMultiTexCoord2iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2iARB */ + epoxy_glMultiTexCoord2iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2iv */ + epoxy_glMultiTexCoord2ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2ivARB */ + epoxy_glMultiTexCoord2s_dispatch_table_rewrite_ptr, /* glMultiTexCoord2s */ + epoxy_glMultiTexCoord2sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2sARB */ + epoxy_glMultiTexCoord2sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord2sv */ + epoxy_glMultiTexCoord2svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord2svARB */ + epoxy_glMultiTexCoord2xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2xOES */ + epoxy_glMultiTexCoord2xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord2xvOES */ + epoxy_glMultiTexCoord3bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3bOES */ + epoxy_glMultiTexCoord3bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3bvOES */ + epoxy_glMultiTexCoord3d_dispatch_table_rewrite_ptr, /* glMultiTexCoord3d */ + epoxy_glMultiTexCoord3dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3dARB */ + epoxy_glMultiTexCoord3dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3dv */ + epoxy_glMultiTexCoord3dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3dvARB */ + epoxy_glMultiTexCoord3f_dispatch_table_rewrite_ptr, /* glMultiTexCoord3f */ + epoxy_glMultiTexCoord3fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3fARB */ + epoxy_glMultiTexCoord3fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3fv */ + epoxy_glMultiTexCoord3fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3fvARB */ + epoxy_glMultiTexCoord3hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord3hNV */ + epoxy_glMultiTexCoord3hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord3hvNV */ + epoxy_glMultiTexCoord3i_dispatch_table_rewrite_ptr, /* glMultiTexCoord3i */ + epoxy_glMultiTexCoord3iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3iARB */ + epoxy_glMultiTexCoord3iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3iv */ + epoxy_glMultiTexCoord3ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3ivARB */ + epoxy_glMultiTexCoord3s_dispatch_table_rewrite_ptr, /* glMultiTexCoord3s */ + epoxy_glMultiTexCoord3sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3sARB */ + epoxy_glMultiTexCoord3sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord3sv */ + epoxy_glMultiTexCoord3svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord3svARB */ + epoxy_glMultiTexCoord3xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3xOES */ + epoxy_glMultiTexCoord3xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord3xvOES */ + epoxy_glMultiTexCoord4bOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4bOES */ + epoxy_glMultiTexCoord4bvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4bvOES */ + epoxy_glMultiTexCoord4d_dispatch_table_rewrite_ptr, /* glMultiTexCoord4d */ + epoxy_glMultiTexCoord4dARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4dARB */ + epoxy_glMultiTexCoord4dv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4dv */ + epoxy_glMultiTexCoord4dvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4dvARB */ + epoxy_glMultiTexCoord4f_dispatch_table_rewrite_ptr, /* glMultiTexCoord4f */ + epoxy_glMultiTexCoord4fARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4fARB */ + epoxy_glMultiTexCoord4fv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4fv */ + epoxy_glMultiTexCoord4fvARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4fvARB */ + epoxy_glMultiTexCoord4hNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord4hNV */ + epoxy_glMultiTexCoord4hvNV_dispatch_table_rewrite_ptr, /* glMultiTexCoord4hvNV */ + epoxy_glMultiTexCoord4i_dispatch_table_rewrite_ptr, /* glMultiTexCoord4i */ + epoxy_glMultiTexCoord4iARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4iARB */ + epoxy_glMultiTexCoord4iv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4iv */ + epoxy_glMultiTexCoord4ivARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4ivARB */ + epoxy_glMultiTexCoord4s_dispatch_table_rewrite_ptr, /* glMultiTexCoord4s */ + epoxy_glMultiTexCoord4sARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4sARB */ + epoxy_glMultiTexCoord4sv_dispatch_table_rewrite_ptr, /* glMultiTexCoord4sv */ + epoxy_glMultiTexCoord4svARB_dispatch_table_rewrite_ptr, /* glMultiTexCoord4svARB */ + epoxy_glMultiTexCoord4x_dispatch_table_rewrite_ptr, /* glMultiTexCoord4x */ + epoxy_glMultiTexCoord4xOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4xOES */ + epoxy_glMultiTexCoord4xvOES_dispatch_table_rewrite_ptr, /* glMultiTexCoord4xvOES */ + epoxy_glMultiTexCoordP1ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP1ui */ + epoxy_glMultiTexCoordP1uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP1uiv */ + epoxy_glMultiTexCoordP2ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP2ui */ + epoxy_glMultiTexCoordP2uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP2uiv */ + epoxy_glMultiTexCoordP3ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP3ui */ + epoxy_glMultiTexCoordP3uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP3uiv */ + epoxy_glMultiTexCoordP4ui_dispatch_table_rewrite_ptr, /* glMultiTexCoordP4ui */ + epoxy_glMultiTexCoordP4uiv_dispatch_table_rewrite_ptr, /* glMultiTexCoordP4uiv */ + epoxy_glMultiTexCoordPointerEXT_dispatch_table_rewrite_ptr, /* glMultiTexCoordPointerEXT */ + epoxy_glMultiTexEnvfEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnvfEXT */ + epoxy_glMultiTexEnvfvEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnvfvEXT */ + epoxy_glMultiTexEnviEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnviEXT */ + epoxy_glMultiTexEnvivEXT_dispatch_table_rewrite_ptr, /* glMultiTexEnvivEXT */ + epoxy_glMultiTexGendEXT_dispatch_table_rewrite_ptr, /* glMultiTexGendEXT */ + epoxy_glMultiTexGendvEXT_dispatch_table_rewrite_ptr, /* glMultiTexGendvEXT */ + epoxy_glMultiTexGenfEXT_dispatch_table_rewrite_ptr, /* glMultiTexGenfEXT */ + epoxy_glMultiTexGenfvEXT_dispatch_table_rewrite_ptr, /* glMultiTexGenfvEXT */ + epoxy_glMultiTexGeniEXT_dispatch_table_rewrite_ptr, /* glMultiTexGeniEXT */ + epoxy_glMultiTexGenivEXT_dispatch_table_rewrite_ptr, /* glMultiTexGenivEXT */ + epoxy_glMultiTexImage1DEXT_dispatch_table_rewrite_ptr, /* glMultiTexImage1DEXT */ + epoxy_glMultiTexImage2DEXT_dispatch_table_rewrite_ptr, /* glMultiTexImage2DEXT */ + epoxy_glMultiTexImage3DEXT_dispatch_table_rewrite_ptr, /* glMultiTexImage3DEXT */ + epoxy_glMultiTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterIivEXT */ + epoxy_glMultiTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterIuivEXT */ + epoxy_glMultiTexParameterfEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterfEXT */ + epoxy_glMultiTexParameterfvEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterfvEXT */ + epoxy_glMultiTexParameteriEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameteriEXT */ + epoxy_glMultiTexParameterivEXT_dispatch_table_rewrite_ptr, /* glMultiTexParameterivEXT */ + epoxy_glMultiTexRenderbufferEXT_dispatch_table_rewrite_ptr, /* glMultiTexRenderbufferEXT */ + epoxy_glMultiTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glMultiTexSubImage1DEXT */ + epoxy_glMultiTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glMultiTexSubImage2DEXT */ + epoxy_glMultiTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glMultiTexSubImage3DEXT */ + epoxy_glNamedBufferData_dispatch_table_rewrite_ptr, /* glNamedBufferData */ + epoxy_glNamedBufferDataEXT_dispatch_table_rewrite_ptr, /* glNamedBufferDataEXT */ + epoxy_glNamedBufferPageCommitmentARB_dispatch_table_rewrite_ptr, /* glNamedBufferPageCommitmentARB */ + epoxy_glNamedBufferPageCommitmentEXT_dispatch_table_rewrite_ptr, /* glNamedBufferPageCommitmentEXT */ + epoxy_glNamedBufferStorage_dispatch_table_rewrite_ptr, /* glNamedBufferStorage */ + epoxy_glNamedBufferStorageEXT_dispatch_table_rewrite_ptr, /* glNamedBufferStorageEXT */ + epoxy_glNamedBufferSubData_dispatch_table_rewrite_ptr, /* glNamedBufferSubData */ + epoxy_glNamedBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glNamedBufferSubDataEXT */ + epoxy_glNamedCopyBufferSubDataEXT_dispatch_table_rewrite_ptr, /* glNamedCopyBufferSubDataEXT */ + epoxy_glNamedFramebufferDrawBuffer_dispatch_table_rewrite_ptr, /* glNamedFramebufferDrawBuffer */ + epoxy_glNamedFramebufferDrawBuffers_dispatch_table_rewrite_ptr, /* glNamedFramebufferDrawBuffers */ + epoxy_glNamedFramebufferParameteri_dispatch_table_rewrite_ptr, /* glNamedFramebufferParameteri */ + epoxy_glNamedFramebufferParameteriEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferParameteriEXT */ + epoxy_glNamedFramebufferReadBuffer_dispatch_table_rewrite_ptr, /* glNamedFramebufferReadBuffer */ + epoxy_glNamedFramebufferRenderbuffer_dispatch_table_rewrite_ptr, /* glNamedFramebufferRenderbuffer */ + epoxy_glNamedFramebufferRenderbufferEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferRenderbufferEXT */ + epoxy_glNamedFramebufferSampleLocationsfvARB_dispatch_table_rewrite_ptr, /* glNamedFramebufferSampleLocationsfvARB */ + epoxy_glNamedFramebufferSampleLocationsfvNV_dispatch_table_rewrite_ptr, /* glNamedFramebufferSampleLocationsfvNV */ + epoxy_glNamedFramebufferTexture_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture */ + epoxy_glNamedFramebufferTexture1DEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture1DEXT */ + epoxy_glNamedFramebufferTexture2DEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture2DEXT */ + epoxy_glNamedFramebufferTexture3DEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTexture3DEXT */ + epoxy_glNamedFramebufferTextureEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureEXT */ + epoxy_glNamedFramebufferTextureFaceEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureFaceEXT */ + epoxy_glNamedFramebufferTextureLayer_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureLayer */ + epoxy_glNamedFramebufferTextureLayerEXT_dispatch_table_rewrite_ptr, /* glNamedFramebufferTextureLayerEXT */ + epoxy_glNamedProgramLocalParameter4dEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4dEXT */ + epoxy_glNamedProgramLocalParameter4dvEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4dvEXT */ + epoxy_glNamedProgramLocalParameter4fEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4fEXT */ + epoxy_glNamedProgramLocalParameter4fvEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameter4fvEXT */ + epoxy_glNamedProgramLocalParameterI4iEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4iEXT */ + epoxy_glNamedProgramLocalParameterI4ivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4ivEXT */ + epoxy_glNamedProgramLocalParameterI4uiEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4uiEXT */ + epoxy_glNamedProgramLocalParameterI4uivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameterI4uivEXT */ + epoxy_glNamedProgramLocalParameters4fvEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParameters4fvEXT */ + epoxy_glNamedProgramLocalParametersI4ivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParametersI4ivEXT */ + epoxy_glNamedProgramLocalParametersI4uivEXT_dispatch_table_rewrite_ptr, /* glNamedProgramLocalParametersI4uivEXT */ + epoxy_glNamedProgramStringEXT_dispatch_table_rewrite_ptr, /* glNamedProgramStringEXT */ + epoxy_glNamedRenderbufferStorage_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorage */ + epoxy_glNamedRenderbufferStorageEXT_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageEXT */ + epoxy_glNamedRenderbufferStorageMultisample_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageMultisample */ + epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageMultisampleCoverageEXT */ + epoxy_glNamedRenderbufferStorageMultisampleEXT_dispatch_table_rewrite_ptr, /* glNamedRenderbufferStorageMultisampleEXT */ + epoxy_glNamedStringARB_dispatch_table_rewrite_ptr, /* glNamedStringARB */ + epoxy_glNewList_dispatch_table_rewrite_ptr, /* glNewList */ + epoxy_glNewObjectBufferATI_dispatch_table_rewrite_ptr, /* glNewObjectBufferATI */ + epoxy_glNormal3b_dispatch_table_rewrite_ptr, /* glNormal3b */ + epoxy_glNormal3bv_dispatch_table_rewrite_ptr, /* glNormal3bv */ + epoxy_glNormal3d_dispatch_table_rewrite_ptr, /* glNormal3d */ + epoxy_glNormal3dv_dispatch_table_rewrite_ptr, /* glNormal3dv */ + epoxy_glNormal3f_dispatch_table_rewrite_ptr, /* glNormal3f */ + epoxy_glNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glNormal3fVertex3fSUN */ + epoxy_glNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glNormal3fVertex3fvSUN */ + epoxy_glNormal3fv_dispatch_table_rewrite_ptr, /* glNormal3fv */ + epoxy_glNormal3hNV_dispatch_table_rewrite_ptr, /* glNormal3hNV */ + epoxy_glNormal3hvNV_dispatch_table_rewrite_ptr, /* glNormal3hvNV */ + epoxy_glNormal3i_dispatch_table_rewrite_ptr, /* glNormal3i */ + epoxy_glNormal3iv_dispatch_table_rewrite_ptr, /* glNormal3iv */ + epoxy_glNormal3s_dispatch_table_rewrite_ptr, /* glNormal3s */ + epoxy_glNormal3sv_dispatch_table_rewrite_ptr, /* glNormal3sv */ + epoxy_glNormal3x_dispatch_table_rewrite_ptr, /* glNormal3x */ + epoxy_glNormal3xOES_dispatch_table_rewrite_ptr, /* glNormal3xOES */ + epoxy_glNormal3xvOES_dispatch_table_rewrite_ptr, /* glNormal3xvOES */ + epoxy_glNormalFormatNV_dispatch_table_rewrite_ptr, /* glNormalFormatNV */ + epoxy_glNormalP3ui_dispatch_table_rewrite_ptr, /* glNormalP3ui */ + epoxy_glNormalP3uiv_dispatch_table_rewrite_ptr, /* glNormalP3uiv */ + epoxy_glNormalPointer_dispatch_table_rewrite_ptr, /* glNormalPointer */ + epoxy_glNormalPointerEXT_dispatch_table_rewrite_ptr, /* glNormalPointerEXT */ + epoxy_glNormalPointerListIBM_dispatch_table_rewrite_ptr, /* glNormalPointerListIBM */ + epoxy_glNormalPointervINTEL_dispatch_table_rewrite_ptr, /* glNormalPointervINTEL */ + epoxy_glNormalStream3bATI_dispatch_table_rewrite_ptr, /* glNormalStream3bATI */ + epoxy_glNormalStream3bvATI_dispatch_table_rewrite_ptr, /* glNormalStream3bvATI */ + epoxy_glNormalStream3dATI_dispatch_table_rewrite_ptr, /* glNormalStream3dATI */ + epoxy_glNormalStream3dvATI_dispatch_table_rewrite_ptr, /* glNormalStream3dvATI */ + epoxy_glNormalStream3fATI_dispatch_table_rewrite_ptr, /* glNormalStream3fATI */ + epoxy_glNormalStream3fvATI_dispatch_table_rewrite_ptr, /* glNormalStream3fvATI */ + epoxy_glNormalStream3iATI_dispatch_table_rewrite_ptr, /* glNormalStream3iATI */ + epoxy_glNormalStream3ivATI_dispatch_table_rewrite_ptr, /* glNormalStream3ivATI */ + epoxy_glNormalStream3sATI_dispatch_table_rewrite_ptr, /* glNormalStream3sATI */ + epoxy_glNormalStream3svATI_dispatch_table_rewrite_ptr, /* glNormalStream3svATI */ + epoxy_glObjectLabel_dispatch_table_rewrite_ptr, /* glObjectLabel */ + epoxy_glObjectLabelKHR_dispatch_table_rewrite_ptr, /* glObjectLabelKHR */ + epoxy_glObjectPtrLabel_dispatch_table_rewrite_ptr, /* glObjectPtrLabel */ + epoxy_glObjectPtrLabelKHR_dispatch_table_rewrite_ptr, /* glObjectPtrLabelKHR */ + epoxy_glObjectPurgeableAPPLE_dispatch_table_rewrite_ptr, /* glObjectPurgeableAPPLE */ + epoxy_glObjectUnpurgeableAPPLE_dispatch_table_rewrite_ptr, /* glObjectUnpurgeableAPPLE */ + epoxy_glOrtho_dispatch_table_rewrite_ptr, /* glOrtho */ + epoxy_glOrthof_dispatch_table_rewrite_ptr, /* glOrthof */ + epoxy_glOrthofOES_dispatch_table_rewrite_ptr, /* glOrthofOES */ + epoxy_glOrthox_dispatch_table_rewrite_ptr, /* glOrthox */ + epoxy_glOrthoxOES_dispatch_table_rewrite_ptr, /* glOrthoxOES */ + epoxy_glPNTrianglesfATI_dispatch_table_rewrite_ptr, /* glPNTrianglesfATI */ + epoxy_glPNTrianglesiATI_dispatch_table_rewrite_ptr, /* glPNTrianglesiATI */ + epoxy_glPassTexCoordATI_dispatch_table_rewrite_ptr, /* glPassTexCoordATI */ + epoxy_glPassThrough_dispatch_table_rewrite_ptr, /* glPassThrough */ + epoxy_glPassThroughxOES_dispatch_table_rewrite_ptr, /* glPassThroughxOES */ + epoxy_glPatchParameterfv_dispatch_table_rewrite_ptr, /* glPatchParameterfv */ + epoxy_glPatchParameteri_dispatch_table_rewrite_ptr, /* glPatchParameteri */ + epoxy_glPatchParameteriEXT_dispatch_table_rewrite_ptr, /* glPatchParameteriEXT */ + epoxy_glPatchParameteriOES_dispatch_table_rewrite_ptr, /* glPatchParameteriOES */ + epoxy_glPathColorGenNV_dispatch_table_rewrite_ptr, /* glPathColorGenNV */ + epoxy_glPathCommandsNV_dispatch_table_rewrite_ptr, /* glPathCommandsNV */ + epoxy_glPathCoordsNV_dispatch_table_rewrite_ptr, /* glPathCoordsNV */ + epoxy_glPathCoverDepthFuncNV_dispatch_table_rewrite_ptr, /* glPathCoverDepthFuncNV */ + epoxy_glPathDashArrayNV_dispatch_table_rewrite_ptr, /* glPathDashArrayNV */ + epoxy_glPathFogGenNV_dispatch_table_rewrite_ptr, /* glPathFogGenNV */ + epoxy_glPathGlyphIndexArrayNV_dispatch_table_rewrite_ptr, /* glPathGlyphIndexArrayNV */ + epoxy_glPathGlyphIndexRangeNV_dispatch_table_rewrite_ptr, /* glPathGlyphIndexRangeNV */ + epoxy_glPathGlyphRangeNV_dispatch_table_rewrite_ptr, /* glPathGlyphRangeNV */ + epoxy_glPathGlyphsNV_dispatch_table_rewrite_ptr, /* glPathGlyphsNV */ + epoxy_glPathMemoryGlyphIndexArrayNV_dispatch_table_rewrite_ptr, /* glPathMemoryGlyphIndexArrayNV */ + epoxy_glPathParameterfNV_dispatch_table_rewrite_ptr, /* glPathParameterfNV */ + epoxy_glPathParameterfvNV_dispatch_table_rewrite_ptr, /* glPathParameterfvNV */ + epoxy_glPathParameteriNV_dispatch_table_rewrite_ptr, /* glPathParameteriNV */ + epoxy_glPathParameterivNV_dispatch_table_rewrite_ptr, /* glPathParameterivNV */ + epoxy_glPathStencilDepthOffsetNV_dispatch_table_rewrite_ptr, /* glPathStencilDepthOffsetNV */ + epoxy_glPathStencilFuncNV_dispatch_table_rewrite_ptr, /* glPathStencilFuncNV */ + epoxy_glPathStringNV_dispatch_table_rewrite_ptr, /* glPathStringNV */ + epoxy_glPathSubCommandsNV_dispatch_table_rewrite_ptr, /* glPathSubCommandsNV */ + epoxy_glPathSubCoordsNV_dispatch_table_rewrite_ptr, /* glPathSubCoordsNV */ + epoxy_glPathTexGenNV_dispatch_table_rewrite_ptr, /* glPathTexGenNV */ + epoxy_glPauseTransformFeedback_dispatch_table_rewrite_ptr, /* glPauseTransformFeedback */ + epoxy_glPauseTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glPauseTransformFeedbackNV */ + epoxy_glPixelDataRangeNV_dispatch_table_rewrite_ptr, /* glPixelDataRangeNV */ + epoxy_glPixelMapfv_dispatch_table_rewrite_ptr, /* glPixelMapfv */ + epoxy_glPixelMapuiv_dispatch_table_rewrite_ptr, /* glPixelMapuiv */ + epoxy_glPixelMapusv_dispatch_table_rewrite_ptr, /* glPixelMapusv */ + epoxy_glPixelMapx_dispatch_table_rewrite_ptr, /* glPixelMapx */ + epoxy_glPixelStoref_dispatch_table_rewrite_ptr, /* glPixelStoref */ + epoxy_glPixelStorei_dispatch_table_rewrite_ptr, /* glPixelStorei */ + epoxy_glPixelStorex_dispatch_table_rewrite_ptr, /* glPixelStorex */ + epoxy_glPixelTexGenParameterfSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameterfSGIS */ + epoxy_glPixelTexGenParameterfvSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameterfvSGIS */ + epoxy_glPixelTexGenParameteriSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameteriSGIS */ + epoxy_glPixelTexGenParameterivSGIS_dispatch_table_rewrite_ptr, /* glPixelTexGenParameterivSGIS */ + epoxy_glPixelTexGenSGIX_dispatch_table_rewrite_ptr, /* glPixelTexGenSGIX */ + epoxy_glPixelTransferf_dispatch_table_rewrite_ptr, /* glPixelTransferf */ + epoxy_glPixelTransferi_dispatch_table_rewrite_ptr, /* glPixelTransferi */ + epoxy_glPixelTransferxOES_dispatch_table_rewrite_ptr, /* glPixelTransferxOES */ + epoxy_glPixelTransformParameterfEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameterfEXT */ + epoxy_glPixelTransformParameterfvEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameterfvEXT */ + epoxy_glPixelTransformParameteriEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameteriEXT */ + epoxy_glPixelTransformParameterivEXT_dispatch_table_rewrite_ptr, /* glPixelTransformParameterivEXT */ + epoxy_glPixelZoom_dispatch_table_rewrite_ptr, /* glPixelZoom */ + epoxy_glPixelZoomxOES_dispatch_table_rewrite_ptr, /* glPixelZoomxOES */ + epoxy_glPointAlongPathNV_dispatch_table_rewrite_ptr, /* glPointAlongPathNV */ + epoxy_glPointParameterf_dispatch_table_rewrite_ptr, /* glPointParameterf */ + epoxy_glPointParameterfARB_dispatch_table_rewrite_ptr, /* glPointParameterfARB */ + epoxy_glPointParameterfEXT_dispatch_table_rewrite_ptr, /* glPointParameterfEXT */ + epoxy_glPointParameterfSGIS_dispatch_table_rewrite_ptr, /* glPointParameterfSGIS */ + epoxy_glPointParameterfv_dispatch_table_rewrite_ptr, /* glPointParameterfv */ + epoxy_glPointParameterfvARB_dispatch_table_rewrite_ptr, /* glPointParameterfvARB */ + epoxy_glPointParameterfvEXT_dispatch_table_rewrite_ptr, /* glPointParameterfvEXT */ + epoxy_glPointParameterfvSGIS_dispatch_table_rewrite_ptr, /* glPointParameterfvSGIS */ + epoxy_glPointParameteri_dispatch_table_rewrite_ptr, /* glPointParameteri */ + epoxy_glPointParameteriNV_dispatch_table_rewrite_ptr, /* glPointParameteriNV */ + epoxy_glPointParameteriv_dispatch_table_rewrite_ptr, /* glPointParameteriv */ + epoxy_glPointParameterivNV_dispatch_table_rewrite_ptr, /* glPointParameterivNV */ + epoxy_glPointParameterx_dispatch_table_rewrite_ptr, /* glPointParameterx */ + epoxy_glPointParameterxOES_dispatch_table_rewrite_ptr, /* glPointParameterxOES */ + epoxy_glPointParameterxv_dispatch_table_rewrite_ptr, /* glPointParameterxv */ + epoxy_glPointParameterxvOES_dispatch_table_rewrite_ptr, /* glPointParameterxvOES */ + epoxy_glPointSize_dispatch_table_rewrite_ptr, /* glPointSize */ + epoxy_glPointSizePointerOES_dispatch_table_rewrite_ptr, /* glPointSizePointerOES */ + epoxy_glPointSizex_dispatch_table_rewrite_ptr, /* glPointSizex */ + epoxy_glPointSizexOES_dispatch_table_rewrite_ptr, /* glPointSizexOES */ + epoxy_glPollAsyncSGIX_dispatch_table_rewrite_ptr, /* glPollAsyncSGIX */ + epoxy_glPollInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glPollInstrumentsSGIX */ + epoxy_glPolygonMode_dispatch_table_rewrite_ptr, /* glPolygonMode */ + epoxy_glPolygonModeNV_dispatch_table_rewrite_ptr, /* glPolygonModeNV */ + epoxy_glPolygonOffset_dispatch_table_rewrite_ptr, /* glPolygonOffset */ + epoxy_glPolygonOffsetClampEXT_dispatch_table_rewrite_ptr, /* glPolygonOffsetClampEXT */ + epoxy_glPolygonOffsetEXT_dispatch_table_rewrite_ptr, /* glPolygonOffsetEXT */ + epoxy_glPolygonOffsetx_dispatch_table_rewrite_ptr, /* glPolygonOffsetx */ + epoxy_glPolygonOffsetxOES_dispatch_table_rewrite_ptr, /* glPolygonOffsetxOES */ + epoxy_glPolygonStipple_dispatch_table_rewrite_ptr, /* glPolygonStipple */ + epoxy_glPopAttrib_dispatch_table_rewrite_ptr, /* glPopAttrib */ + epoxy_glPopClientAttrib_dispatch_table_rewrite_ptr, /* glPopClientAttrib */ + epoxy_glPopDebugGroup_dispatch_table_rewrite_ptr, /* glPopDebugGroup */ + epoxy_glPopDebugGroupKHR_dispatch_table_rewrite_ptr, /* glPopDebugGroupKHR */ + epoxy_glPopGroupMarkerEXT_dispatch_table_rewrite_ptr, /* glPopGroupMarkerEXT */ + epoxy_glPopMatrix_dispatch_table_rewrite_ptr, /* glPopMatrix */ + epoxy_glPopName_dispatch_table_rewrite_ptr, /* glPopName */ + epoxy_glPresentFrameDualFillNV_dispatch_table_rewrite_ptr, /* glPresentFrameDualFillNV */ + epoxy_glPresentFrameKeyedNV_dispatch_table_rewrite_ptr, /* glPresentFrameKeyedNV */ + epoxy_glPrimitiveBoundingBox_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBox */ + epoxy_glPrimitiveBoundingBoxARB_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBoxARB */ + epoxy_glPrimitiveBoundingBoxEXT_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBoxEXT */ + epoxy_glPrimitiveBoundingBoxOES_dispatch_table_rewrite_ptr, /* glPrimitiveBoundingBoxOES */ + epoxy_glPrimitiveRestartIndex_dispatch_table_rewrite_ptr, /* glPrimitiveRestartIndex */ + epoxy_glPrimitiveRestartIndexNV_dispatch_table_rewrite_ptr, /* glPrimitiveRestartIndexNV */ + epoxy_glPrimitiveRestartNV_dispatch_table_rewrite_ptr, /* glPrimitiveRestartNV */ + epoxy_glPrioritizeTextures_dispatch_table_rewrite_ptr, /* glPrioritizeTextures */ + epoxy_glPrioritizeTexturesEXT_dispatch_table_rewrite_ptr, /* glPrioritizeTexturesEXT */ + epoxy_glPrioritizeTexturesxOES_dispatch_table_rewrite_ptr, /* glPrioritizeTexturesxOES */ + epoxy_glProgramBinary_dispatch_table_rewrite_ptr, /* glProgramBinary */ + epoxy_glProgramBinaryOES_dispatch_table_rewrite_ptr, /* glProgramBinaryOES */ + epoxy_glProgramBufferParametersIivNV_dispatch_table_rewrite_ptr, /* glProgramBufferParametersIivNV */ + epoxy_glProgramBufferParametersIuivNV_dispatch_table_rewrite_ptr, /* glProgramBufferParametersIuivNV */ + epoxy_glProgramBufferParametersfvNV_dispatch_table_rewrite_ptr, /* glProgramBufferParametersfvNV */ + epoxy_glProgramEnvParameter4dARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4dARB */ + epoxy_glProgramEnvParameter4dvARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4dvARB */ + epoxy_glProgramEnvParameter4fARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4fARB */ + epoxy_glProgramEnvParameter4fvARB_dispatch_table_rewrite_ptr, /* glProgramEnvParameter4fvARB */ + epoxy_glProgramEnvParameterI4iNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4iNV */ + epoxy_glProgramEnvParameterI4ivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4ivNV */ + epoxy_glProgramEnvParameterI4uiNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4uiNV */ + epoxy_glProgramEnvParameterI4uivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParameterI4uivNV */ + epoxy_glProgramEnvParameters4fvEXT_dispatch_table_rewrite_ptr, /* glProgramEnvParameters4fvEXT */ + epoxy_glProgramEnvParametersI4ivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParametersI4ivNV */ + epoxy_glProgramEnvParametersI4uivNV_dispatch_table_rewrite_ptr, /* glProgramEnvParametersI4uivNV */ + epoxy_glProgramLocalParameter4dARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4dARB */ + epoxy_glProgramLocalParameter4dvARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4dvARB */ + epoxy_glProgramLocalParameter4fARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4fARB */ + epoxy_glProgramLocalParameter4fvARB_dispatch_table_rewrite_ptr, /* glProgramLocalParameter4fvARB */ + epoxy_glProgramLocalParameterI4iNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4iNV */ + epoxy_glProgramLocalParameterI4ivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4ivNV */ + epoxy_glProgramLocalParameterI4uiNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4uiNV */ + epoxy_glProgramLocalParameterI4uivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParameterI4uivNV */ + epoxy_glProgramLocalParameters4fvEXT_dispatch_table_rewrite_ptr, /* glProgramLocalParameters4fvEXT */ + epoxy_glProgramLocalParametersI4ivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParametersI4ivNV */ + epoxy_glProgramLocalParametersI4uivNV_dispatch_table_rewrite_ptr, /* glProgramLocalParametersI4uivNV */ + epoxy_glProgramNamedParameter4dNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4dNV */ + epoxy_glProgramNamedParameter4dvNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4dvNV */ + epoxy_glProgramNamedParameter4fNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4fNV */ + epoxy_glProgramNamedParameter4fvNV_dispatch_table_rewrite_ptr, /* glProgramNamedParameter4fvNV */ + epoxy_glProgramParameter4dNV_dispatch_table_rewrite_ptr, /* glProgramParameter4dNV */ + epoxy_glProgramParameter4dvNV_dispatch_table_rewrite_ptr, /* glProgramParameter4dvNV */ + epoxy_glProgramParameter4fNV_dispatch_table_rewrite_ptr, /* glProgramParameter4fNV */ + epoxy_glProgramParameter4fvNV_dispatch_table_rewrite_ptr, /* glProgramParameter4fvNV */ + epoxy_glProgramParameteri_dispatch_table_rewrite_ptr, /* glProgramParameteri */ + epoxy_glProgramParameteriARB_dispatch_table_rewrite_ptr, /* glProgramParameteriARB */ + epoxy_glProgramParameteriEXT_dispatch_table_rewrite_ptr, /* glProgramParameteriEXT */ + epoxy_glProgramParameters4dvNV_dispatch_table_rewrite_ptr, /* glProgramParameters4dvNV */ + epoxy_glProgramParameters4fvNV_dispatch_table_rewrite_ptr, /* glProgramParameters4fvNV */ + epoxy_glProgramPathFragmentInputGenNV_dispatch_table_rewrite_ptr, /* glProgramPathFragmentInputGenNV */ + epoxy_glProgramStringARB_dispatch_table_rewrite_ptr, /* glProgramStringARB */ + epoxy_glProgramSubroutineParametersuivNV_dispatch_table_rewrite_ptr, /* glProgramSubroutineParametersuivNV */ + epoxy_glProgramUniform1d_dispatch_table_rewrite_ptr, /* glProgramUniform1d */ + epoxy_glProgramUniform1dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1dEXT */ + epoxy_glProgramUniform1dv_dispatch_table_rewrite_ptr, /* glProgramUniform1dv */ + epoxy_glProgramUniform1dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1dvEXT */ + epoxy_glProgramUniform1f_dispatch_table_rewrite_ptr, /* glProgramUniform1f */ + epoxy_glProgramUniform1fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1fEXT */ + epoxy_glProgramUniform1fv_dispatch_table_rewrite_ptr, /* glProgramUniform1fv */ + epoxy_glProgramUniform1fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1fvEXT */ + epoxy_glProgramUniform1i_dispatch_table_rewrite_ptr, /* glProgramUniform1i */ + epoxy_glProgramUniform1i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform1i64ARB */ + epoxy_glProgramUniform1i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform1i64NV */ + epoxy_glProgramUniform1i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform1i64vARB */ + epoxy_glProgramUniform1i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform1i64vNV */ + epoxy_glProgramUniform1iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1iEXT */ + epoxy_glProgramUniform1iv_dispatch_table_rewrite_ptr, /* glProgramUniform1iv */ + epoxy_glProgramUniform1ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1ivEXT */ + epoxy_glProgramUniform1ui_dispatch_table_rewrite_ptr, /* glProgramUniform1ui */ + epoxy_glProgramUniform1ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64ARB */ + epoxy_glProgramUniform1ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64NV */ + epoxy_glProgramUniform1ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64vARB */ + epoxy_glProgramUniform1ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform1ui64vNV */ + epoxy_glProgramUniform1uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1uiEXT */ + epoxy_glProgramUniform1uiv_dispatch_table_rewrite_ptr, /* glProgramUniform1uiv */ + epoxy_glProgramUniform1uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform1uivEXT */ + epoxy_glProgramUniform2d_dispatch_table_rewrite_ptr, /* glProgramUniform2d */ + epoxy_glProgramUniform2dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2dEXT */ + epoxy_glProgramUniform2dv_dispatch_table_rewrite_ptr, /* glProgramUniform2dv */ + epoxy_glProgramUniform2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2dvEXT */ + epoxy_glProgramUniform2f_dispatch_table_rewrite_ptr, /* glProgramUniform2f */ + epoxy_glProgramUniform2fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2fEXT */ + epoxy_glProgramUniform2fv_dispatch_table_rewrite_ptr, /* glProgramUniform2fv */ + epoxy_glProgramUniform2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2fvEXT */ + epoxy_glProgramUniform2i_dispatch_table_rewrite_ptr, /* glProgramUniform2i */ + epoxy_glProgramUniform2i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform2i64ARB */ + epoxy_glProgramUniform2i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform2i64NV */ + epoxy_glProgramUniform2i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform2i64vARB */ + epoxy_glProgramUniform2i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform2i64vNV */ + epoxy_glProgramUniform2iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2iEXT */ + epoxy_glProgramUniform2iv_dispatch_table_rewrite_ptr, /* glProgramUniform2iv */ + epoxy_glProgramUniform2ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2ivEXT */ + epoxy_glProgramUniform2ui_dispatch_table_rewrite_ptr, /* glProgramUniform2ui */ + epoxy_glProgramUniform2ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64ARB */ + epoxy_glProgramUniform2ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64NV */ + epoxy_glProgramUniform2ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64vARB */ + epoxy_glProgramUniform2ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform2ui64vNV */ + epoxy_glProgramUniform2uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2uiEXT */ + epoxy_glProgramUniform2uiv_dispatch_table_rewrite_ptr, /* glProgramUniform2uiv */ + epoxy_glProgramUniform2uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform2uivEXT */ + epoxy_glProgramUniform3d_dispatch_table_rewrite_ptr, /* glProgramUniform3d */ + epoxy_glProgramUniform3dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3dEXT */ + epoxy_glProgramUniform3dv_dispatch_table_rewrite_ptr, /* glProgramUniform3dv */ + epoxy_glProgramUniform3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3dvEXT */ + epoxy_glProgramUniform3f_dispatch_table_rewrite_ptr, /* glProgramUniform3f */ + epoxy_glProgramUniform3fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3fEXT */ + epoxy_glProgramUniform3fv_dispatch_table_rewrite_ptr, /* glProgramUniform3fv */ + epoxy_glProgramUniform3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3fvEXT */ + epoxy_glProgramUniform3i_dispatch_table_rewrite_ptr, /* glProgramUniform3i */ + epoxy_glProgramUniform3i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform3i64ARB */ + epoxy_glProgramUniform3i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform3i64NV */ + epoxy_glProgramUniform3i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform3i64vARB */ + epoxy_glProgramUniform3i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform3i64vNV */ + epoxy_glProgramUniform3iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3iEXT */ + epoxy_glProgramUniform3iv_dispatch_table_rewrite_ptr, /* glProgramUniform3iv */ + epoxy_glProgramUniform3ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3ivEXT */ + epoxy_glProgramUniform3ui_dispatch_table_rewrite_ptr, /* glProgramUniform3ui */ + epoxy_glProgramUniform3ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64ARB */ + epoxy_glProgramUniform3ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64NV */ + epoxy_glProgramUniform3ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64vARB */ + epoxy_glProgramUniform3ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform3ui64vNV */ + epoxy_glProgramUniform3uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3uiEXT */ + epoxy_glProgramUniform3uiv_dispatch_table_rewrite_ptr, /* glProgramUniform3uiv */ + epoxy_glProgramUniform3uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform3uivEXT */ + epoxy_glProgramUniform4d_dispatch_table_rewrite_ptr, /* glProgramUniform4d */ + epoxy_glProgramUniform4dEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4dEXT */ + epoxy_glProgramUniform4dv_dispatch_table_rewrite_ptr, /* glProgramUniform4dv */ + epoxy_glProgramUniform4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4dvEXT */ + epoxy_glProgramUniform4f_dispatch_table_rewrite_ptr, /* glProgramUniform4f */ + epoxy_glProgramUniform4fEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4fEXT */ + epoxy_glProgramUniform4fv_dispatch_table_rewrite_ptr, /* glProgramUniform4fv */ + epoxy_glProgramUniform4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4fvEXT */ + epoxy_glProgramUniform4i_dispatch_table_rewrite_ptr, /* glProgramUniform4i */ + epoxy_glProgramUniform4i64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform4i64ARB */ + epoxy_glProgramUniform4i64NV_dispatch_table_rewrite_ptr, /* glProgramUniform4i64NV */ + epoxy_glProgramUniform4i64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform4i64vARB */ + epoxy_glProgramUniform4i64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform4i64vNV */ + epoxy_glProgramUniform4iEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4iEXT */ + epoxy_glProgramUniform4iv_dispatch_table_rewrite_ptr, /* glProgramUniform4iv */ + epoxy_glProgramUniform4ivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4ivEXT */ + epoxy_glProgramUniform4ui_dispatch_table_rewrite_ptr, /* glProgramUniform4ui */ + epoxy_glProgramUniform4ui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64ARB */ + epoxy_glProgramUniform4ui64NV_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64NV */ + epoxy_glProgramUniform4ui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64vARB */ + epoxy_glProgramUniform4ui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniform4ui64vNV */ + epoxy_glProgramUniform4uiEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4uiEXT */ + epoxy_glProgramUniform4uiv_dispatch_table_rewrite_ptr, /* glProgramUniform4uiv */ + epoxy_glProgramUniform4uivEXT_dispatch_table_rewrite_ptr, /* glProgramUniform4uivEXT */ + epoxy_glProgramUniformHandleui64ARB_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64ARB */ + epoxy_glProgramUniformHandleui64NV_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64NV */ + epoxy_glProgramUniformHandleui64vARB_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64vARB */ + epoxy_glProgramUniformHandleui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniformHandleui64vNV */ + epoxy_glProgramUniformMatrix2dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2dv */ + epoxy_glProgramUniformMatrix2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2dvEXT */ + epoxy_glProgramUniformMatrix2fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2fv */ + epoxy_glProgramUniformMatrix2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2fvEXT */ + epoxy_glProgramUniformMatrix2x3dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3dv */ + epoxy_glProgramUniformMatrix2x3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3dvEXT */ + epoxy_glProgramUniformMatrix2x3fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3fv */ + epoxy_glProgramUniformMatrix2x3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x3fvEXT */ + epoxy_glProgramUniformMatrix2x4dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4dv */ + epoxy_glProgramUniformMatrix2x4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4dvEXT */ + epoxy_glProgramUniformMatrix2x4fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4fv */ + epoxy_glProgramUniformMatrix2x4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix2x4fvEXT */ + epoxy_glProgramUniformMatrix3dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3dv */ + epoxy_glProgramUniformMatrix3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3dvEXT */ + epoxy_glProgramUniformMatrix3fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3fv */ + epoxy_glProgramUniformMatrix3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3fvEXT */ + epoxy_glProgramUniformMatrix3x2dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2dv */ + epoxy_glProgramUniformMatrix3x2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2dvEXT */ + epoxy_glProgramUniformMatrix3x2fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2fv */ + epoxy_glProgramUniformMatrix3x2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x2fvEXT */ + epoxy_glProgramUniformMatrix3x4dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4dv */ + epoxy_glProgramUniformMatrix3x4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4dvEXT */ + epoxy_glProgramUniformMatrix3x4fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4fv */ + epoxy_glProgramUniformMatrix3x4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix3x4fvEXT */ + epoxy_glProgramUniformMatrix4dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4dv */ + epoxy_glProgramUniformMatrix4dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4dvEXT */ + epoxy_glProgramUniformMatrix4fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4fv */ + epoxy_glProgramUniformMatrix4fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4fvEXT */ + epoxy_glProgramUniformMatrix4x2dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2dv */ + epoxy_glProgramUniformMatrix4x2dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2dvEXT */ + epoxy_glProgramUniformMatrix4x2fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2fv */ + epoxy_glProgramUniformMatrix4x2fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x2fvEXT */ + epoxy_glProgramUniformMatrix4x3dv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3dv */ + epoxy_glProgramUniformMatrix4x3dvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3dvEXT */ + epoxy_glProgramUniformMatrix4x3fv_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3fv */ + epoxy_glProgramUniformMatrix4x3fvEXT_dispatch_table_rewrite_ptr, /* glProgramUniformMatrix4x3fvEXT */ + epoxy_glProgramUniformui64NV_dispatch_table_rewrite_ptr, /* glProgramUniformui64NV */ + epoxy_glProgramUniformui64vNV_dispatch_table_rewrite_ptr, /* glProgramUniformui64vNV */ + epoxy_glProgramVertexLimitNV_dispatch_table_rewrite_ptr, /* glProgramVertexLimitNV */ + epoxy_glProvokingVertex_dispatch_table_rewrite_ptr, /* glProvokingVertex */ + epoxy_glProvokingVertexEXT_dispatch_table_rewrite_ptr, /* glProvokingVertexEXT */ + epoxy_glPushAttrib_dispatch_table_rewrite_ptr, /* glPushAttrib */ + epoxy_glPushClientAttrib_dispatch_table_rewrite_ptr, /* glPushClientAttrib */ + epoxy_glPushClientAttribDefaultEXT_dispatch_table_rewrite_ptr, /* glPushClientAttribDefaultEXT */ + epoxy_glPushDebugGroup_dispatch_table_rewrite_ptr, /* glPushDebugGroup */ + epoxy_glPushDebugGroupKHR_dispatch_table_rewrite_ptr, /* glPushDebugGroupKHR */ + epoxy_glPushGroupMarkerEXT_dispatch_table_rewrite_ptr, /* glPushGroupMarkerEXT */ + epoxy_glPushMatrix_dispatch_table_rewrite_ptr, /* glPushMatrix */ + epoxy_glPushName_dispatch_table_rewrite_ptr, /* glPushName */ + epoxy_glQueryCounter_dispatch_table_rewrite_ptr, /* glQueryCounter */ + epoxy_glQueryCounterEXT_dispatch_table_rewrite_ptr, /* glQueryCounterEXT */ + epoxy_glQueryMatrixxOES_dispatch_table_rewrite_ptr, /* glQueryMatrixxOES */ + epoxy_glQueryObjectParameteruiAMD_dispatch_table_rewrite_ptr, /* glQueryObjectParameteruiAMD */ + epoxy_glRasterPos2d_dispatch_table_rewrite_ptr, /* glRasterPos2d */ + epoxy_glRasterPos2dv_dispatch_table_rewrite_ptr, /* glRasterPos2dv */ + epoxy_glRasterPos2f_dispatch_table_rewrite_ptr, /* glRasterPos2f */ + epoxy_glRasterPos2fv_dispatch_table_rewrite_ptr, /* glRasterPos2fv */ + epoxy_glRasterPos2i_dispatch_table_rewrite_ptr, /* glRasterPos2i */ + epoxy_glRasterPos2iv_dispatch_table_rewrite_ptr, /* glRasterPos2iv */ + epoxy_glRasterPos2s_dispatch_table_rewrite_ptr, /* glRasterPos2s */ + epoxy_glRasterPos2sv_dispatch_table_rewrite_ptr, /* glRasterPos2sv */ + epoxy_glRasterPos2xOES_dispatch_table_rewrite_ptr, /* glRasterPos2xOES */ + epoxy_glRasterPos2xvOES_dispatch_table_rewrite_ptr, /* glRasterPos2xvOES */ + epoxy_glRasterPos3d_dispatch_table_rewrite_ptr, /* glRasterPos3d */ + epoxy_glRasterPos3dv_dispatch_table_rewrite_ptr, /* glRasterPos3dv */ + epoxy_glRasterPos3f_dispatch_table_rewrite_ptr, /* glRasterPos3f */ + epoxy_glRasterPos3fv_dispatch_table_rewrite_ptr, /* glRasterPos3fv */ + epoxy_glRasterPos3i_dispatch_table_rewrite_ptr, /* glRasterPos3i */ + epoxy_glRasterPos3iv_dispatch_table_rewrite_ptr, /* glRasterPos3iv */ + epoxy_glRasterPos3s_dispatch_table_rewrite_ptr, /* glRasterPos3s */ + epoxy_glRasterPos3sv_dispatch_table_rewrite_ptr, /* glRasterPos3sv */ + epoxy_glRasterPos3xOES_dispatch_table_rewrite_ptr, /* glRasterPos3xOES */ + epoxy_glRasterPos3xvOES_dispatch_table_rewrite_ptr, /* glRasterPos3xvOES */ + epoxy_glRasterPos4d_dispatch_table_rewrite_ptr, /* glRasterPos4d */ + epoxy_glRasterPos4dv_dispatch_table_rewrite_ptr, /* glRasterPos4dv */ + epoxy_glRasterPos4f_dispatch_table_rewrite_ptr, /* glRasterPos4f */ + epoxy_glRasterPos4fv_dispatch_table_rewrite_ptr, /* glRasterPos4fv */ + epoxy_glRasterPos4i_dispatch_table_rewrite_ptr, /* glRasterPos4i */ + epoxy_glRasterPos4iv_dispatch_table_rewrite_ptr, /* glRasterPos4iv */ + epoxy_glRasterPos4s_dispatch_table_rewrite_ptr, /* glRasterPos4s */ + epoxy_glRasterPos4sv_dispatch_table_rewrite_ptr, /* glRasterPos4sv */ + epoxy_glRasterPos4xOES_dispatch_table_rewrite_ptr, /* glRasterPos4xOES */ + epoxy_glRasterPos4xvOES_dispatch_table_rewrite_ptr, /* glRasterPos4xvOES */ + epoxy_glRasterSamplesEXT_dispatch_table_rewrite_ptr, /* glRasterSamplesEXT */ + epoxy_glReadBuffer_dispatch_table_rewrite_ptr, /* glReadBuffer */ + epoxy_glReadBufferIndexedEXT_dispatch_table_rewrite_ptr, /* glReadBufferIndexedEXT */ + epoxy_glReadBufferNV_dispatch_table_rewrite_ptr, /* glReadBufferNV */ + epoxy_glReadInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glReadInstrumentsSGIX */ + epoxy_glReadPixels_dispatch_table_rewrite_ptr, /* glReadPixels */ + epoxy_glReadnPixels_dispatch_table_rewrite_ptr, /* glReadnPixels */ + epoxy_glReadnPixelsARB_dispatch_table_rewrite_ptr, /* glReadnPixelsARB */ + epoxy_glReadnPixelsEXT_dispatch_table_rewrite_ptr, /* glReadnPixelsEXT */ + epoxy_glReadnPixelsKHR_dispatch_table_rewrite_ptr, /* glReadnPixelsKHR */ + epoxy_glRectd_dispatch_table_rewrite_ptr, /* glRectd */ + epoxy_glRectdv_dispatch_table_rewrite_ptr, /* glRectdv */ + epoxy_glRectf_dispatch_table_rewrite_ptr, /* glRectf */ + epoxy_glRectfv_dispatch_table_rewrite_ptr, /* glRectfv */ + epoxy_glRecti_dispatch_table_rewrite_ptr, /* glRecti */ + epoxy_glRectiv_dispatch_table_rewrite_ptr, /* glRectiv */ + epoxy_glRects_dispatch_table_rewrite_ptr, /* glRects */ + epoxy_glRectsv_dispatch_table_rewrite_ptr, /* glRectsv */ + epoxy_glRectxOES_dispatch_table_rewrite_ptr, /* glRectxOES */ + epoxy_glRectxvOES_dispatch_table_rewrite_ptr, /* glRectxvOES */ + epoxy_glReferencePlaneSGIX_dispatch_table_rewrite_ptr, /* glReferencePlaneSGIX */ + epoxy_glReleaseShaderCompiler_dispatch_table_rewrite_ptr, /* glReleaseShaderCompiler */ + epoxy_glRenderMode_dispatch_table_rewrite_ptr, /* glRenderMode */ + epoxy_glRenderbufferStorage_dispatch_table_rewrite_ptr, /* glRenderbufferStorage */ + epoxy_glRenderbufferStorageEXT_dispatch_table_rewrite_ptr, /* glRenderbufferStorageEXT */ + epoxy_glRenderbufferStorageMultisample_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisample */ + epoxy_glRenderbufferStorageMultisampleANGLE_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleANGLE */ + epoxy_glRenderbufferStorageMultisampleAPPLE_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleAPPLE */ + epoxy_glRenderbufferStorageMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleCoverageNV */ + epoxy_glRenderbufferStorageMultisampleEXT_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleEXT */ + epoxy_glRenderbufferStorageMultisampleIMG_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleIMG */ + epoxy_glRenderbufferStorageMultisampleNV_dispatch_table_rewrite_ptr, /* glRenderbufferStorageMultisampleNV */ + epoxy_glRenderbufferStorageOES_dispatch_table_rewrite_ptr, /* glRenderbufferStorageOES */ + epoxy_glReplacementCodePointerSUN_dispatch_table_rewrite_ptr, /* glReplacementCodePointerSUN */ + epoxy_glReplacementCodeubSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeubSUN */ + epoxy_glReplacementCodeubvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeubvSUN */ + epoxy_glReplacementCodeuiColor3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor3fVertex3fSUN */ + epoxy_glReplacementCodeuiColor3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor3fVertex3fvSUN */ + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4fNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4fNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiColor4ubVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4ubVertex3fSUN */ + epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiColor4ubVertex3fvSUN */ + epoxy_glReplacementCodeuiNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiSUN */ + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN */ + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN */ + epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fVertex3fSUN */ + epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiTexCoord2fVertex3fvSUN */ + epoxy_glReplacementCodeuiVertex3fSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiVertex3fSUN */ + epoxy_glReplacementCodeuiVertex3fvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuiVertex3fvSUN */ + epoxy_glReplacementCodeuivSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeuivSUN */ + epoxy_glReplacementCodeusSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeusSUN */ + epoxy_glReplacementCodeusvSUN_dispatch_table_rewrite_ptr, /* glReplacementCodeusvSUN */ + epoxy_glRequestResidentProgramsNV_dispatch_table_rewrite_ptr, /* glRequestResidentProgramsNV */ + epoxy_glResetHistogram_dispatch_table_rewrite_ptr, /* glResetHistogram */ + epoxy_glResetHistogramEXT_dispatch_table_rewrite_ptr, /* glResetHistogramEXT */ + epoxy_glResetMinmax_dispatch_table_rewrite_ptr, /* glResetMinmax */ + epoxy_glResetMinmaxEXT_dispatch_table_rewrite_ptr, /* glResetMinmaxEXT */ + epoxy_glResizeBuffersMESA_dispatch_table_rewrite_ptr, /* glResizeBuffersMESA */ + epoxy_glResolveDepthValuesNV_dispatch_table_rewrite_ptr, /* glResolveDepthValuesNV */ + epoxy_glResolveMultisampleFramebufferAPPLE_dispatch_table_rewrite_ptr, /* glResolveMultisampleFramebufferAPPLE */ + epoxy_glResumeTransformFeedback_dispatch_table_rewrite_ptr, /* glResumeTransformFeedback */ + epoxy_glResumeTransformFeedbackNV_dispatch_table_rewrite_ptr, /* glResumeTransformFeedbackNV */ + epoxy_glRotated_dispatch_table_rewrite_ptr, /* glRotated */ + epoxy_glRotatef_dispatch_table_rewrite_ptr, /* glRotatef */ + epoxy_glRotatex_dispatch_table_rewrite_ptr, /* glRotatex */ + epoxy_glRotatexOES_dispatch_table_rewrite_ptr, /* glRotatexOES */ + epoxy_glSampleCoverage_dispatch_table_rewrite_ptr, /* glSampleCoverage */ + epoxy_glSampleCoverageARB_dispatch_table_rewrite_ptr, /* glSampleCoverageARB */ + epoxy_glSampleCoveragex_dispatch_table_rewrite_ptr, /* glSampleCoveragex */ + epoxy_glSampleCoveragexOES_dispatch_table_rewrite_ptr, /* glSampleCoveragexOES */ + epoxy_glSampleMapATI_dispatch_table_rewrite_ptr, /* glSampleMapATI */ + epoxy_glSampleMaskEXT_dispatch_table_rewrite_ptr, /* glSampleMaskEXT */ + epoxy_glSampleMaskIndexedNV_dispatch_table_rewrite_ptr, /* glSampleMaskIndexedNV */ + epoxy_glSampleMaskSGIS_dispatch_table_rewrite_ptr, /* glSampleMaskSGIS */ + epoxy_glSampleMaski_dispatch_table_rewrite_ptr, /* glSampleMaski */ + epoxy_glSamplePatternEXT_dispatch_table_rewrite_ptr, /* glSamplePatternEXT */ + epoxy_glSamplePatternSGIS_dispatch_table_rewrite_ptr, /* glSamplePatternSGIS */ + epoxy_glSamplerParameterIiv_dispatch_table_rewrite_ptr, /* glSamplerParameterIiv */ + epoxy_glSamplerParameterIivEXT_dispatch_table_rewrite_ptr, /* glSamplerParameterIivEXT */ + epoxy_glSamplerParameterIivOES_dispatch_table_rewrite_ptr, /* glSamplerParameterIivOES */ + epoxy_glSamplerParameterIuiv_dispatch_table_rewrite_ptr, /* glSamplerParameterIuiv */ + epoxy_glSamplerParameterIuivEXT_dispatch_table_rewrite_ptr, /* glSamplerParameterIuivEXT */ + epoxy_glSamplerParameterIuivOES_dispatch_table_rewrite_ptr, /* glSamplerParameterIuivOES */ + epoxy_glSamplerParameterf_dispatch_table_rewrite_ptr, /* glSamplerParameterf */ + epoxy_glSamplerParameterfv_dispatch_table_rewrite_ptr, /* glSamplerParameterfv */ + epoxy_glSamplerParameteri_dispatch_table_rewrite_ptr, /* glSamplerParameteri */ + epoxy_glSamplerParameteriv_dispatch_table_rewrite_ptr, /* glSamplerParameteriv */ + epoxy_glScaled_dispatch_table_rewrite_ptr, /* glScaled */ + epoxy_glScalef_dispatch_table_rewrite_ptr, /* glScalef */ + epoxy_glScalex_dispatch_table_rewrite_ptr, /* glScalex */ + epoxy_glScalexOES_dispatch_table_rewrite_ptr, /* glScalexOES */ + epoxy_glScissor_dispatch_table_rewrite_ptr, /* glScissor */ + epoxy_glScissorArrayv_dispatch_table_rewrite_ptr, /* glScissorArrayv */ + epoxy_glScissorArrayvNV_dispatch_table_rewrite_ptr, /* glScissorArrayvNV */ + epoxy_glScissorIndexed_dispatch_table_rewrite_ptr, /* glScissorIndexed */ + epoxy_glScissorIndexedNV_dispatch_table_rewrite_ptr, /* glScissorIndexedNV */ + epoxy_glScissorIndexedv_dispatch_table_rewrite_ptr, /* glScissorIndexedv */ + epoxy_glScissorIndexedvNV_dispatch_table_rewrite_ptr, /* glScissorIndexedvNV */ + epoxy_glSecondaryColor3b_dispatch_table_rewrite_ptr, /* glSecondaryColor3b */ + epoxy_glSecondaryColor3bEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3bEXT */ + epoxy_glSecondaryColor3bv_dispatch_table_rewrite_ptr, /* glSecondaryColor3bv */ + epoxy_glSecondaryColor3bvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3bvEXT */ + epoxy_glSecondaryColor3d_dispatch_table_rewrite_ptr, /* glSecondaryColor3d */ + epoxy_glSecondaryColor3dEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3dEXT */ + epoxy_glSecondaryColor3dv_dispatch_table_rewrite_ptr, /* glSecondaryColor3dv */ + epoxy_glSecondaryColor3dvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3dvEXT */ + epoxy_glSecondaryColor3f_dispatch_table_rewrite_ptr, /* glSecondaryColor3f */ + epoxy_glSecondaryColor3fEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3fEXT */ + epoxy_glSecondaryColor3fv_dispatch_table_rewrite_ptr, /* glSecondaryColor3fv */ + epoxy_glSecondaryColor3fvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3fvEXT */ + epoxy_glSecondaryColor3hNV_dispatch_table_rewrite_ptr, /* glSecondaryColor3hNV */ + epoxy_glSecondaryColor3hvNV_dispatch_table_rewrite_ptr, /* glSecondaryColor3hvNV */ + epoxy_glSecondaryColor3i_dispatch_table_rewrite_ptr, /* glSecondaryColor3i */ + epoxy_glSecondaryColor3iEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3iEXT */ + epoxy_glSecondaryColor3iv_dispatch_table_rewrite_ptr, /* glSecondaryColor3iv */ + epoxy_glSecondaryColor3ivEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3ivEXT */ + epoxy_glSecondaryColor3s_dispatch_table_rewrite_ptr, /* glSecondaryColor3s */ + epoxy_glSecondaryColor3sEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3sEXT */ + epoxy_glSecondaryColor3sv_dispatch_table_rewrite_ptr, /* glSecondaryColor3sv */ + epoxy_glSecondaryColor3svEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3svEXT */ + epoxy_glSecondaryColor3ub_dispatch_table_rewrite_ptr, /* glSecondaryColor3ub */ + epoxy_glSecondaryColor3ubEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3ubEXT */ + epoxy_glSecondaryColor3ubv_dispatch_table_rewrite_ptr, /* glSecondaryColor3ubv */ + epoxy_glSecondaryColor3ubvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3ubvEXT */ + epoxy_glSecondaryColor3ui_dispatch_table_rewrite_ptr, /* glSecondaryColor3ui */ + epoxy_glSecondaryColor3uiEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3uiEXT */ + epoxy_glSecondaryColor3uiv_dispatch_table_rewrite_ptr, /* glSecondaryColor3uiv */ + epoxy_glSecondaryColor3uivEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3uivEXT */ + epoxy_glSecondaryColor3us_dispatch_table_rewrite_ptr, /* glSecondaryColor3us */ + epoxy_glSecondaryColor3usEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3usEXT */ + epoxy_glSecondaryColor3usv_dispatch_table_rewrite_ptr, /* glSecondaryColor3usv */ + epoxy_glSecondaryColor3usvEXT_dispatch_table_rewrite_ptr, /* glSecondaryColor3usvEXT */ + epoxy_glSecondaryColorFormatNV_dispatch_table_rewrite_ptr, /* glSecondaryColorFormatNV */ + epoxy_glSecondaryColorP3ui_dispatch_table_rewrite_ptr, /* glSecondaryColorP3ui */ + epoxy_glSecondaryColorP3uiv_dispatch_table_rewrite_ptr, /* glSecondaryColorP3uiv */ + epoxy_glSecondaryColorPointer_dispatch_table_rewrite_ptr, /* glSecondaryColorPointer */ + epoxy_glSecondaryColorPointerEXT_dispatch_table_rewrite_ptr, /* glSecondaryColorPointerEXT */ + epoxy_glSecondaryColorPointerListIBM_dispatch_table_rewrite_ptr, /* glSecondaryColorPointerListIBM */ + epoxy_glSelectBuffer_dispatch_table_rewrite_ptr, /* glSelectBuffer */ + epoxy_glSelectPerfMonitorCountersAMD_dispatch_table_rewrite_ptr, /* glSelectPerfMonitorCountersAMD */ + epoxy_glSeparableFilter2D_dispatch_table_rewrite_ptr, /* glSeparableFilter2D */ + epoxy_glSeparableFilter2DEXT_dispatch_table_rewrite_ptr, /* glSeparableFilter2DEXT */ + epoxy_glSetFenceAPPLE_dispatch_table_rewrite_ptr, /* glSetFenceAPPLE */ + epoxy_glSetFenceNV_dispatch_table_rewrite_ptr, /* glSetFenceNV */ + epoxy_glSetFragmentShaderConstantATI_dispatch_table_rewrite_ptr, /* glSetFragmentShaderConstantATI */ + epoxy_glSetInvariantEXT_dispatch_table_rewrite_ptr, /* glSetInvariantEXT */ + epoxy_glSetLocalConstantEXT_dispatch_table_rewrite_ptr, /* glSetLocalConstantEXT */ + epoxy_glSetMultisamplefvAMD_dispatch_table_rewrite_ptr, /* glSetMultisamplefvAMD */ + epoxy_glShadeModel_dispatch_table_rewrite_ptr, /* glShadeModel */ + epoxy_glShaderBinary_dispatch_table_rewrite_ptr, /* glShaderBinary */ + epoxy_glShaderOp1EXT_dispatch_table_rewrite_ptr, /* glShaderOp1EXT */ + epoxy_glShaderOp2EXT_dispatch_table_rewrite_ptr, /* glShaderOp2EXT */ + epoxy_glShaderOp3EXT_dispatch_table_rewrite_ptr, /* glShaderOp3EXT */ + epoxy_glShaderSource_dispatch_table_rewrite_ptr, /* glShaderSource */ + epoxy_glShaderSourceARB_dispatch_table_rewrite_ptr, /* glShaderSourceARB */ + epoxy_glShaderStorageBlockBinding_dispatch_table_rewrite_ptr, /* glShaderStorageBlockBinding */ + epoxy_glSharpenTexFuncSGIS_dispatch_table_rewrite_ptr, /* glSharpenTexFuncSGIS */ + epoxy_glSpriteParameterfSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameterfSGIX */ + epoxy_glSpriteParameterfvSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameterfvSGIX */ + epoxy_glSpriteParameteriSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameteriSGIX */ + epoxy_glSpriteParameterivSGIX_dispatch_table_rewrite_ptr, /* glSpriteParameterivSGIX */ + epoxy_glStartInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glStartInstrumentsSGIX */ + epoxy_glStartTilingQCOM_dispatch_table_rewrite_ptr, /* glStartTilingQCOM */ + epoxy_glStateCaptureNV_dispatch_table_rewrite_ptr, /* glStateCaptureNV */ + epoxy_glStencilClearTagEXT_dispatch_table_rewrite_ptr, /* glStencilClearTagEXT */ + epoxy_glStencilFillPathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilFillPathInstancedNV */ + epoxy_glStencilFillPathNV_dispatch_table_rewrite_ptr, /* glStencilFillPathNV */ + epoxy_glStencilFunc_dispatch_table_rewrite_ptr, /* glStencilFunc */ + epoxy_glStencilFuncSeparate_dispatch_table_rewrite_ptr, /* glStencilFuncSeparate */ + epoxy_glStencilFuncSeparateATI_dispatch_table_rewrite_ptr, /* glStencilFuncSeparateATI */ + epoxy_glStencilMask_dispatch_table_rewrite_ptr, /* glStencilMask */ + epoxy_glStencilMaskSeparate_dispatch_table_rewrite_ptr, /* glStencilMaskSeparate */ + epoxy_glStencilOp_dispatch_table_rewrite_ptr, /* glStencilOp */ + epoxy_glStencilOpSeparate_dispatch_table_rewrite_ptr, /* glStencilOpSeparate */ + epoxy_glStencilOpSeparateATI_dispatch_table_rewrite_ptr, /* glStencilOpSeparateATI */ + epoxy_glStencilOpValueAMD_dispatch_table_rewrite_ptr, /* glStencilOpValueAMD */ + epoxy_glStencilStrokePathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilStrokePathInstancedNV */ + epoxy_glStencilStrokePathNV_dispatch_table_rewrite_ptr, /* glStencilStrokePathNV */ + epoxy_glStencilThenCoverFillPathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverFillPathInstancedNV */ + epoxy_glStencilThenCoverFillPathNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverFillPathNV */ + epoxy_glStencilThenCoverStrokePathInstancedNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverStrokePathInstancedNV */ + epoxy_glStencilThenCoverStrokePathNV_dispatch_table_rewrite_ptr, /* glStencilThenCoverStrokePathNV */ + epoxy_glStopInstrumentsSGIX_dispatch_table_rewrite_ptr, /* glStopInstrumentsSGIX */ + epoxy_glStringMarkerGREMEDY_dispatch_table_rewrite_ptr, /* glStringMarkerGREMEDY */ + epoxy_glSubpixelPrecisionBiasNV_dispatch_table_rewrite_ptr, /* glSubpixelPrecisionBiasNV */ + epoxy_glSwizzleEXT_dispatch_table_rewrite_ptr, /* glSwizzleEXT */ + epoxy_glSyncTextureINTEL_dispatch_table_rewrite_ptr, /* glSyncTextureINTEL */ + epoxy_glTagSampleBufferSGIX_dispatch_table_rewrite_ptr, /* glTagSampleBufferSGIX */ + epoxy_glTangent3bEXT_dispatch_table_rewrite_ptr, /* glTangent3bEXT */ + epoxy_glTangent3bvEXT_dispatch_table_rewrite_ptr, /* glTangent3bvEXT */ + epoxy_glTangent3dEXT_dispatch_table_rewrite_ptr, /* glTangent3dEXT */ + epoxy_glTangent3dvEXT_dispatch_table_rewrite_ptr, /* glTangent3dvEXT */ + epoxy_glTangent3fEXT_dispatch_table_rewrite_ptr, /* glTangent3fEXT */ + epoxy_glTangent3fvEXT_dispatch_table_rewrite_ptr, /* glTangent3fvEXT */ + epoxy_glTangent3iEXT_dispatch_table_rewrite_ptr, /* glTangent3iEXT */ + epoxy_glTangent3ivEXT_dispatch_table_rewrite_ptr, /* glTangent3ivEXT */ + epoxy_glTangent3sEXT_dispatch_table_rewrite_ptr, /* glTangent3sEXT */ + epoxy_glTangent3svEXT_dispatch_table_rewrite_ptr, /* glTangent3svEXT */ + epoxy_glTangentPointerEXT_dispatch_table_rewrite_ptr, /* glTangentPointerEXT */ + epoxy_glTbufferMask3DFX_dispatch_table_rewrite_ptr, /* glTbufferMask3DFX */ + epoxy_glTessellationFactorAMD_dispatch_table_rewrite_ptr, /* glTessellationFactorAMD */ + epoxy_glTessellationModeAMD_dispatch_table_rewrite_ptr, /* glTessellationModeAMD */ + epoxy_glTestFenceAPPLE_dispatch_table_rewrite_ptr, /* glTestFenceAPPLE */ + epoxy_glTestFenceNV_dispatch_table_rewrite_ptr, /* glTestFenceNV */ + epoxy_glTestObjectAPPLE_dispatch_table_rewrite_ptr, /* glTestObjectAPPLE */ + epoxy_glTexBuffer_dispatch_table_rewrite_ptr, /* glTexBuffer */ + epoxy_glTexBufferARB_dispatch_table_rewrite_ptr, /* glTexBufferARB */ + epoxy_glTexBufferEXT_dispatch_table_rewrite_ptr, /* glTexBufferEXT */ + epoxy_glTexBufferOES_dispatch_table_rewrite_ptr, /* glTexBufferOES */ + epoxy_glTexBufferRange_dispatch_table_rewrite_ptr, /* glTexBufferRange */ + epoxy_glTexBufferRangeEXT_dispatch_table_rewrite_ptr, /* glTexBufferRangeEXT */ + epoxy_glTexBufferRangeOES_dispatch_table_rewrite_ptr, /* glTexBufferRangeOES */ + epoxy_glTexBumpParameterfvATI_dispatch_table_rewrite_ptr, /* glTexBumpParameterfvATI */ + epoxy_glTexBumpParameterivATI_dispatch_table_rewrite_ptr, /* glTexBumpParameterivATI */ + epoxy_glTexCoord1bOES_dispatch_table_rewrite_ptr, /* glTexCoord1bOES */ + epoxy_glTexCoord1bvOES_dispatch_table_rewrite_ptr, /* glTexCoord1bvOES */ + epoxy_glTexCoord1d_dispatch_table_rewrite_ptr, /* glTexCoord1d */ + epoxy_glTexCoord1dv_dispatch_table_rewrite_ptr, /* glTexCoord1dv */ + epoxy_glTexCoord1f_dispatch_table_rewrite_ptr, /* glTexCoord1f */ + epoxy_glTexCoord1fv_dispatch_table_rewrite_ptr, /* glTexCoord1fv */ + epoxy_glTexCoord1hNV_dispatch_table_rewrite_ptr, /* glTexCoord1hNV */ + epoxy_glTexCoord1hvNV_dispatch_table_rewrite_ptr, /* glTexCoord1hvNV */ + epoxy_glTexCoord1i_dispatch_table_rewrite_ptr, /* glTexCoord1i */ + epoxy_glTexCoord1iv_dispatch_table_rewrite_ptr, /* glTexCoord1iv */ + epoxy_glTexCoord1s_dispatch_table_rewrite_ptr, /* glTexCoord1s */ + epoxy_glTexCoord1sv_dispatch_table_rewrite_ptr, /* glTexCoord1sv */ + epoxy_glTexCoord1xOES_dispatch_table_rewrite_ptr, /* glTexCoord1xOES */ + epoxy_glTexCoord1xvOES_dispatch_table_rewrite_ptr, /* glTexCoord1xvOES */ + epoxy_glTexCoord2bOES_dispatch_table_rewrite_ptr, /* glTexCoord2bOES */ + epoxy_glTexCoord2bvOES_dispatch_table_rewrite_ptr, /* glTexCoord2bvOES */ + epoxy_glTexCoord2d_dispatch_table_rewrite_ptr, /* glTexCoord2d */ + epoxy_glTexCoord2dv_dispatch_table_rewrite_ptr, /* glTexCoord2dv */ + epoxy_glTexCoord2f_dispatch_table_rewrite_ptr, /* glTexCoord2f */ + epoxy_glTexCoord2fColor3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor3fVertex3fSUN */ + epoxy_glTexCoord2fColor3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor3fVertex3fvSUN */ + epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4fNormal3fVertex3fSUN */ + epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4fNormal3fVertex3fvSUN */ + epoxy_glTexCoord2fColor4ubVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4ubVertex3fSUN */ + epoxy_glTexCoord2fColor4ubVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fColor4ubVertex3fvSUN */ + epoxy_glTexCoord2fNormal3fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fNormal3fVertex3fSUN */ + epoxy_glTexCoord2fNormal3fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fNormal3fVertex3fvSUN */ + epoxy_glTexCoord2fVertex3fSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fVertex3fSUN */ + epoxy_glTexCoord2fVertex3fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord2fVertex3fvSUN */ + epoxy_glTexCoord2fv_dispatch_table_rewrite_ptr, /* glTexCoord2fv */ + epoxy_glTexCoord2hNV_dispatch_table_rewrite_ptr, /* glTexCoord2hNV */ + epoxy_glTexCoord2hvNV_dispatch_table_rewrite_ptr, /* glTexCoord2hvNV */ + epoxy_glTexCoord2i_dispatch_table_rewrite_ptr, /* glTexCoord2i */ + epoxy_glTexCoord2iv_dispatch_table_rewrite_ptr, /* glTexCoord2iv */ + epoxy_glTexCoord2s_dispatch_table_rewrite_ptr, /* glTexCoord2s */ + epoxy_glTexCoord2sv_dispatch_table_rewrite_ptr, /* glTexCoord2sv */ + epoxy_glTexCoord2xOES_dispatch_table_rewrite_ptr, /* glTexCoord2xOES */ + epoxy_glTexCoord2xvOES_dispatch_table_rewrite_ptr, /* glTexCoord2xvOES */ + epoxy_glTexCoord3bOES_dispatch_table_rewrite_ptr, /* glTexCoord3bOES */ + epoxy_glTexCoord3bvOES_dispatch_table_rewrite_ptr, /* glTexCoord3bvOES */ + epoxy_glTexCoord3d_dispatch_table_rewrite_ptr, /* glTexCoord3d */ + epoxy_glTexCoord3dv_dispatch_table_rewrite_ptr, /* glTexCoord3dv */ + epoxy_glTexCoord3f_dispatch_table_rewrite_ptr, /* glTexCoord3f */ + epoxy_glTexCoord3fv_dispatch_table_rewrite_ptr, /* glTexCoord3fv */ + epoxy_glTexCoord3hNV_dispatch_table_rewrite_ptr, /* glTexCoord3hNV */ + epoxy_glTexCoord3hvNV_dispatch_table_rewrite_ptr, /* glTexCoord3hvNV */ + epoxy_glTexCoord3i_dispatch_table_rewrite_ptr, /* glTexCoord3i */ + epoxy_glTexCoord3iv_dispatch_table_rewrite_ptr, /* glTexCoord3iv */ + epoxy_glTexCoord3s_dispatch_table_rewrite_ptr, /* glTexCoord3s */ + epoxy_glTexCoord3sv_dispatch_table_rewrite_ptr, /* glTexCoord3sv */ + epoxy_glTexCoord3xOES_dispatch_table_rewrite_ptr, /* glTexCoord3xOES */ + epoxy_glTexCoord3xvOES_dispatch_table_rewrite_ptr, /* glTexCoord3xvOES */ + epoxy_glTexCoord4bOES_dispatch_table_rewrite_ptr, /* glTexCoord4bOES */ + epoxy_glTexCoord4bvOES_dispatch_table_rewrite_ptr, /* glTexCoord4bvOES */ + epoxy_glTexCoord4d_dispatch_table_rewrite_ptr, /* glTexCoord4d */ + epoxy_glTexCoord4dv_dispatch_table_rewrite_ptr, /* glTexCoord4dv */ + epoxy_glTexCoord4f_dispatch_table_rewrite_ptr, /* glTexCoord4f */ + epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fColor4fNormal3fVertex4fSUN */ + epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fColor4fNormal3fVertex4fvSUN */ + epoxy_glTexCoord4fVertex4fSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fVertex4fSUN */ + epoxy_glTexCoord4fVertex4fvSUN_dispatch_table_rewrite_ptr, /* glTexCoord4fVertex4fvSUN */ + epoxy_glTexCoord4fv_dispatch_table_rewrite_ptr, /* glTexCoord4fv */ + epoxy_glTexCoord4hNV_dispatch_table_rewrite_ptr, /* glTexCoord4hNV */ + epoxy_glTexCoord4hvNV_dispatch_table_rewrite_ptr, /* glTexCoord4hvNV */ + epoxy_glTexCoord4i_dispatch_table_rewrite_ptr, /* glTexCoord4i */ + epoxy_glTexCoord4iv_dispatch_table_rewrite_ptr, /* glTexCoord4iv */ + epoxy_glTexCoord4s_dispatch_table_rewrite_ptr, /* glTexCoord4s */ + epoxy_glTexCoord4sv_dispatch_table_rewrite_ptr, /* glTexCoord4sv */ + epoxy_glTexCoord4xOES_dispatch_table_rewrite_ptr, /* glTexCoord4xOES */ + epoxy_glTexCoord4xvOES_dispatch_table_rewrite_ptr, /* glTexCoord4xvOES */ + epoxy_glTexCoordFormatNV_dispatch_table_rewrite_ptr, /* glTexCoordFormatNV */ + epoxy_glTexCoordP1ui_dispatch_table_rewrite_ptr, /* glTexCoordP1ui */ + epoxy_glTexCoordP1uiv_dispatch_table_rewrite_ptr, /* glTexCoordP1uiv */ + epoxy_glTexCoordP2ui_dispatch_table_rewrite_ptr, /* glTexCoordP2ui */ + epoxy_glTexCoordP2uiv_dispatch_table_rewrite_ptr, /* glTexCoordP2uiv */ + epoxy_glTexCoordP3ui_dispatch_table_rewrite_ptr, /* glTexCoordP3ui */ + epoxy_glTexCoordP3uiv_dispatch_table_rewrite_ptr, /* glTexCoordP3uiv */ + epoxy_glTexCoordP4ui_dispatch_table_rewrite_ptr, /* glTexCoordP4ui */ + epoxy_glTexCoordP4uiv_dispatch_table_rewrite_ptr, /* glTexCoordP4uiv */ + epoxy_glTexCoordPointer_dispatch_table_rewrite_ptr, /* glTexCoordPointer */ + epoxy_glTexCoordPointerEXT_dispatch_table_rewrite_ptr, /* glTexCoordPointerEXT */ + epoxy_glTexCoordPointerListIBM_dispatch_table_rewrite_ptr, /* glTexCoordPointerListIBM */ + epoxy_glTexCoordPointervINTEL_dispatch_table_rewrite_ptr, /* glTexCoordPointervINTEL */ + epoxy_glTexEnvf_dispatch_table_rewrite_ptr, /* glTexEnvf */ + epoxy_glTexEnvfv_dispatch_table_rewrite_ptr, /* glTexEnvfv */ + epoxy_glTexEnvi_dispatch_table_rewrite_ptr, /* glTexEnvi */ + epoxy_glTexEnviv_dispatch_table_rewrite_ptr, /* glTexEnviv */ + epoxy_glTexEnvx_dispatch_table_rewrite_ptr, /* glTexEnvx */ + epoxy_glTexEnvxOES_dispatch_table_rewrite_ptr, /* glTexEnvxOES */ + epoxy_glTexEnvxv_dispatch_table_rewrite_ptr, /* glTexEnvxv */ + epoxy_glTexEnvxvOES_dispatch_table_rewrite_ptr, /* glTexEnvxvOES */ + epoxy_glTexFilterFuncSGIS_dispatch_table_rewrite_ptr, /* glTexFilterFuncSGIS */ + epoxy_glTexGend_dispatch_table_rewrite_ptr, /* glTexGend */ + epoxy_glTexGendv_dispatch_table_rewrite_ptr, /* glTexGendv */ + epoxy_glTexGenf_dispatch_table_rewrite_ptr, /* glTexGenf */ + epoxy_glTexGenfOES_dispatch_table_rewrite_ptr, /* glTexGenfOES */ + epoxy_glTexGenfv_dispatch_table_rewrite_ptr, /* glTexGenfv */ + epoxy_glTexGenfvOES_dispatch_table_rewrite_ptr, /* glTexGenfvOES */ + epoxy_glTexGeni_dispatch_table_rewrite_ptr, /* glTexGeni */ + epoxy_glTexGeniOES_dispatch_table_rewrite_ptr, /* glTexGeniOES */ + epoxy_glTexGeniv_dispatch_table_rewrite_ptr, /* glTexGeniv */ + epoxy_glTexGenivOES_dispatch_table_rewrite_ptr, /* glTexGenivOES */ + epoxy_glTexGenxOES_dispatch_table_rewrite_ptr, /* glTexGenxOES */ + epoxy_glTexGenxvOES_dispatch_table_rewrite_ptr, /* glTexGenxvOES */ + epoxy_glTexImage1D_dispatch_table_rewrite_ptr, /* glTexImage1D */ + epoxy_glTexImage2D_dispatch_table_rewrite_ptr, /* glTexImage2D */ + epoxy_glTexImage2DMultisample_dispatch_table_rewrite_ptr, /* glTexImage2DMultisample */ + epoxy_glTexImage2DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTexImage2DMultisampleCoverageNV */ + epoxy_glTexImage3D_dispatch_table_rewrite_ptr, /* glTexImage3D */ + epoxy_glTexImage3DEXT_dispatch_table_rewrite_ptr, /* glTexImage3DEXT */ + epoxy_glTexImage3DMultisample_dispatch_table_rewrite_ptr, /* glTexImage3DMultisample */ + epoxy_glTexImage3DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTexImage3DMultisampleCoverageNV */ + epoxy_glTexImage3DOES_dispatch_table_rewrite_ptr, /* glTexImage3DOES */ + epoxy_glTexImage4DSGIS_dispatch_table_rewrite_ptr, /* glTexImage4DSGIS */ + epoxy_glTexPageCommitmentARB_dispatch_table_rewrite_ptr, /* glTexPageCommitmentARB */ + epoxy_glTexPageCommitmentEXT_dispatch_table_rewrite_ptr, /* glTexPageCommitmentEXT */ + epoxy_glTexParameterIiv_dispatch_table_rewrite_ptr, /* glTexParameterIiv */ + epoxy_glTexParameterIivEXT_dispatch_table_rewrite_ptr, /* glTexParameterIivEXT */ + epoxy_glTexParameterIivOES_dispatch_table_rewrite_ptr, /* glTexParameterIivOES */ + epoxy_glTexParameterIuiv_dispatch_table_rewrite_ptr, /* glTexParameterIuiv */ + epoxy_glTexParameterIuivEXT_dispatch_table_rewrite_ptr, /* glTexParameterIuivEXT */ + epoxy_glTexParameterIuivOES_dispatch_table_rewrite_ptr, /* glTexParameterIuivOES */ + epoxy_glTexParameterf_dispatch_table_rewrite_ptr, /* glTexParameterf */ + epoxy_glTexParameterfv_dispatch_table_rewrite_ptr, /* glTexParameterfv */ + epoxy_glTexParameteri_dispatch_table_rewrite_ptr, /* glTexParameteri */ + epoxy_glTexParameteriv_dispatch_table_rewrite_ptr, /* glTexParameteriv */ + epoxy_glTexParameterx_dispatch_table_rewrite_ptr, /* glTexParameterx */ + epoxy_glTexParameterxOES_dispatch_table_rewrite_ptr, /* glTexParameterxOES */ + epoxy_glTexParameterxv_dispatch_table_rewrite_ptr, /* glTexParameterxv */ + epoxy_glTexParameterxvOES_dispatch_table_rewrite_ptr, /* glTexParameterxvOES */ + epoxy_glTexRenderbufferNV_dispatch_table_rewrite_ptr, /* glTexRenderbufferNV */ + epoxy_glTexStorage1D_dispatch_table_rewrite_ptr, /* glTexStorage1D */ + epoxy_glTexStorage1DEXT_dispatch_table_rewrite_ptr, /* glTexStorage1DEXT */ + epoxy_glTexStorage2D_dispatch_table_rewrite_ptr, /* glTexStorage2D */ + epoxy_glTexStorage2DEXT_dispatch_table_rewrite_ptr, /* glTexStorage2DEXT */ + epoxy_glTexStorage2DMultisample_dispatch_table_rewrite_ptr, /* glTexStorage2DMultisample */ + epoxy_glTexStorage3D_dispatch_table_rewrite_ptr, /* glTexStorage3D */ + epoxy_glTexStorage3DEXT_dispatch_table_rewrite_ptr, /* glTexStorage3DEXT */ + epoxy_glTexStorage3DMultisample_dispatch_table_rewrite_ptr, /* glTexStorage3DMultisample */ + epoxy_glTexStorage3DMultisampleOES_dispatch_table_rewrite_ptr, /* glTexStorage3DMultisampleOES */ + epoxy_glTexStorageSparseAMD_dispatch_table_rewrite_ptr, /* glTexStorageSparseAMD */ + epoxy_glTexSubImage1D_dispatch_table_rewrite_ptr, /* glTexSubImage1D */ + epoxy_glTexSubImage1DEXT_dispatch_table_rewrite_ptr, /* glTexSubImage1DEXT */ + epoxy_glTexSubImage2D_dispatch_table_rewrite_ptr, /* glTexSubImage2D */ + epoxy_glTexSubImage2DEXT_dispatch_table_rewrite_ptr, /* glTexSubImage2DEXT */ + epoxy_glTexSubImage3D_dispatch_table_rewrite_ptr, /* glTexSubImage3D */ + epoxy_glTexSubImage3DEXT_dispatch_table_rewrite_ptr, /* glTexSubImage3DEXT */ + epoxy_glTexSubImage3DOES_dispatch_table_rewrite_ptr, /* glTexSubImage3DOES */ + epoxy_glTexSubImage4DSGIS_dispatch_table_rewrite_ptr, /* glTexSubImage4DSGIS */ + epoxy_glTextureBarrier_dispatch_table_rewrite_ptr, /* glTextureBarrier */ + epoxy_glTextureBarrierNV_dispatch_table_rewrite_ptr, /* glTextureBarrierNV */ + epoxy_glTextureBuffer_dispatch_table_rewrite_ptr, /* glTextureBuffer */ + epoxy_glTextureBufferEXT_dispatch_table_rewrite_ptr, /* glTextureBufferEXT */ + epoxy_glTextureBufferRange_dispatch_table_rewrite_ptr, /* glTextureBufferRange */ + epoxy_glTextureBufferRangeEXT_dispatch_table_rewrite_ptr, /* glTextureBufferRangeEXT */ + epoxy_glTextureColorMaskSGIS_dispatch_table_rewrite_ptr, /* glTextureColorMaskSGIS */ + epoxy_glTextureImage1DEXT_dispatch_table_rewrite_ptr, /* glTextureImage1DEXT */ + epoxy_glTextureImage2DEXT_dispatch_table_rewrite_ptr, /* glTextureImage2DEXT */ + epoxy_glTextureImage2DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTextureImage2DMultisampleCoverageNV */ + epoxy_glTextureImage2DMultisampleNV_dispatch_table_rewrite_ptr, /* glTextureImage2DMultisampleNV */ + epoxy_glTextureImage3DEXT_dispatch_table_rewrite_ptr, /* glTextureImage3DEXT */ + epoxy_glTextureImage3DMultisampleCoverageNV_dispatch_table_rewrite_ptr, /* glTextureImage3DMultisampleCoverageNV */ + epoxy_glTextureImage3DMultisampleNV_dispatch_table_rewrite_ptr, /* glTextureImage3DMultisampleNV */ + epoxy_glTextureLightEXT_dispatch_table_rewrite_ptr, /* glTextureLightEXT */ + epoxy_glTextureMaterialEXT_dispatch_table_rewrite_ptr, /* glTextureMaterialEXT */ + epoxy_glTextureNormalEXT_dispatch_table_rewrite_ptr, /* glTextureNormalEXT */ + epoxy_glTexturePageCommitmentEXT_dispatch_table_rewrite_ptr, /* glTexturePageCommitmentEXT */ + epoxy_glTextureParameterIiv_dispatch_table_rewrite_ptr, /* glTextureParameterIiv */ + epoxy_glTextureParameterIivEXT_dispatch_table_rewrite_ptr, /* glTextureParameterIivEXT */ + epoxy_glTextureParameterIuiv_dispatch_table_rewrite_ptr, /* glTextureParameterIuiv */ + epoxy_glTextureParameterIuivEXT_dispatch_table_rewrite_ptr, /* glTextureParameterIuivEXT */ + epoxy_glTextureParameterf_dispatch_table_rewrite_ptr, /* glTextureParameterf */ + epoxy_glTextureParameterfEXT_dispatch_table_rewrite_ptr, /* glTextureParameterfEXT */ + epoxy_glTextureParameterfv_dispatch_table_rewrite_ptr, /* glTextureParameterfv */ + epoxy_glTextureParameterfvEXT_dispatch_table_rewrite_ptr, /* glTextureParameterfvEXT */ + epoxy_glTextureParameteri_dispatch_table_rewrite_ptr, /* glTextureParameteri */ + epoxy_glTextureParameteriEXT_dispatch_table_rewrite_ptr, /* glTextureParameteriEXT */ + epoxy_glTextureParameteriv_dispatch_table_rewrite_ptr, /* glTextureParameteriv */ + epoxy_glTextureParameterivEXT_dispatch_table_rewrite_ptr, /* glTextureParameterivEXT */ + epoxy_glTextureRangeAPPLE_dispatch_table_rewrite_ptr, /* glTextureRangeAPPLE */ + epoxy_glTextureRenderbufferEXT_dispatch_table_rewrite_ptr, /* glTextureRenderbufferEXT */ + epoxy_glTextureStorage1D_dispatch_table_rewrite_ptr, /* glTextureStorage1D */ + epoxy_glTextureStorage1DEXT_dispatch_table_rewrite_ptr, /* glTextureStorage1DEXT */ + epoxy_glTextureStorage2D_dispatch_table_rewrite_ptr, /* glTextureStorage2D */ + epoxy_glTextureStorage2DEXT_dispatch_table_rewrite_ptr, /* glTextureStorage2DEXT */ + epoxy_glTextureStorage2DMultisample_dispatch_table_rewrite_ptr, /* glTextureStorage2DMultisample */ + epoxy_glTextureStorage2DMultisampleEXT_dispatch_table_rewrite_ptr, /* glTextureStorage2DMultisampleEXT */ + epoxy_glTextureStorage3D_dispatch_table_rewrite_ptr, /* glTextureStorage3D */ + epoxy_glTextureStorage3DEXT_dispatch_table_rewrite_ptr, /* glTextureStorage3DEXT */ + epoxy_glTextureStorage3DMultisample_dispatch_table_rewrite_ptr, /* glTextureStorage3DMultisample */ + epoxy_glTextureStorage3DMultisampleEXT_dispatch_table_rewrite_ptr, /* glTextureStorage3DMultisampleEXT */ + epoxy_glTextureStorageSparseAMD_dispatch_table_rewrite_ptr, /* glTextureStorageSparseAMD */ + epoxy_glTextureSubImage1D_dispatch_table_rewrite_ptr, /* glTextureSubImage1D */ + epoxy_glTextureSubImage1DEXT_dispatch_table_rewrite_ptr, /* glTextureSubImage1DEXT */ + epoxy_glTextureSubImage2D_dispatch_table_rewrite_ptr, /* glTextureSubImage2D */ + epoxy_glTextureSubImage2DEXT_dispatch_table_rewrite_ptr, /* glTextureSubImage2DEXT */ + epoxy_glTextureSubImage3D_dispatch_table_rewrite_ptr, /* glTextureSubImage3D */ + epoxy_glTextureSubImage3DEXT_dispatch_table_rewrite_ptr, /* glTextureSubImage3DEXT */ + epoxy_glTextureView_dispatch_table_rewrite_ptr, /* glTextureView */ + epoxy_glTextureViewEXT_dispatch_table_rewrite_ptr, /* glTextureViewEXT */ + epoxy_glTextureViewOES_dispatch_table_rewrite_ptr, /* glTextureViewOES */ + epoxy_glTrackMatrixNV_dispatch_table_rewrite_ptr, /* glTrackMatrixNV */ + epoxy_glTransformFeedbackAttribsNV_dispatch_table_rewrite_ptr, /* glTransformFeedbackAttribsNV */ + epoxy_glTransformFeedbackBufferBase_dispatch_table_rewrite_ptr, /* glTransformFeedbackBufferBase */ + epoxy_glTransformFeedbackBufferRange_dispatch_table_rewrite_ptr, /* glTransformFeedbackBufferRange */ + epoxy_glTransformFeedbackStreamAttribsNV_dispatch_table_rewrite_ptr, /* glTransformFeedbackStreamAttribsNV */ + epoxy_glTransformFeedbackVaryings_dispatch_table_rewrite_ptr, /* glTransformFeedbackVaryings */ + epoxy_glTransformFeedbackVaryingsEXT_dispatch_table_rewrite_ptr, /* glTransformFeedbackVaryingsEXT */ + epoxy_glTransformFeedbackVaryingsNV_dispatch_table_rewrite_ptr, /* glTransformFeedbackVaryingsNV */ + epoxy_glTransformPathNV_dispatch_table_rewrite_ptr, /* glTransformPathNV */ + epoxy_glTranslated_dispatch_table_rewrite_ptr, /* glTranslated */ + epoxy_glTranslatef_dispatch_table_rewrite_ptr, /* glTranslatef */ + epoxy_glTranslatex_dispatch_table_rewrite_ptr, /* glTranslatex */ + epoxy_glTranslatexOES_dispatch_table_rewrite_ptr, /* glTranslatexOES */ + epoxy_glUniform1d_dispatch_table_rewrite_ptr, /* glUniform1d */ + epoxy_glUniform1dv_dispatch_table_rewrite_ptr, /* glUniform1dv */ + epoxy_glUniform1f_dispatch_table_rewrite_ptr, /* glUniform1f */ + epoxy_glUniform1fARB_dispatch_table_rewrite_ptr, /* glUniform1fARB */ + epoxy_glUniform1fv_dispatch_table_rewrite_ptr, /* glUniform1fv */ + epoxy_glUniform1fvARB_dispatch_table_rewrite_ptr, /* glUniform1fvARB */ + epoxy_glUniform1i_dispatch_table_rewrite_ptr, /* glUniform1i */ + epoxy_glUniform1i64ARB_dispatch_table_rewrite_ptr, /* glUniform1i64ARB */ + epoxy_glUniform1i64NV_dispatch_table_rewrite_ptr, /* glUniform1i64NV */ + epoxy_glUniform1i64vARB_dispatch_table_rewrite_ptr, /* glUniform1i64vARB */ + epoxy_glUniform1i64vNV_dispatch_table_rewrite_ptr, /* glUniform1i64vNV */ + epoxy_glUniform1iARB_dispatch_table_rewrite_ptr, /* glUniform1iARB */ + epoxy_glUniform1iv_dispatch_table_rewrite_ptr, /* glUniform1iv */ + epoxy_glUniform1ivARB_dispatch_table_rewrite_ptr, /* glUniform1ivARB */ + epoxy_glUniform1ui_dispatch_table_rewrite_ptr, /* glUniform1ui */ + epoxy_glUniform1ui64ARB_dispatch_table_rewrite_ptr, /* glUniform1ui64ARB */ + epoxy_glUniform1ui64NV_dispatch_table_rewrite_ptr, /* glUniform1ui64NV */ + epoxy_glUniform1ui64vARB_dispatch_table_rewrite_ptr, /* glUniform1ui64vARB */ + epoxy_glUniform1ui64vNV_dispatch_table_rewrite_ptr, /* glUniform1ui64vNV */ + epoxy_glUniform1uiEXT_dispatch_table_rewrite_ptr, /* glUniform1uiEXT */ + epoxy_glUniform1uiv_dispatch_table_rewrite_ptr, /* glUniform1uiv */ + epoxy_glUniform1uivEXT_dispatch_table_rewrite_ptr, /* glUniform1uivEXT */ + epoxy_glUniform2d_dispatch_table_rewrite_ptr, /* glUniform2d */ + epoxy_glUniform2dv_dispatch_table_rewrite_ptr, /* glUniform2dv */ + epoxy_glUniform2f_dispatch_table_rewrite_ptr, /* glUniform2f */ + epoxy_glUniform2fARB_dispatch_table_rewrite_ptr, /* glUniform2fARB */ + epoxy_glUniform2fv_dispatch_table_rewrite_ptr, /* glUniform2fv */ + epoxy_glUniform2fvARB_dispatch_table_rewrite_ptr, /* glUniform2fvARB */ + epoxy_glUniform2i_dispatch_table_rewrite_ptr, /* glUniform2i */ + epoxy_glUniform2i64ARB_dispatch_table_rewrite_ptr, /* glUniform2i64ARB */ + epoxy_glUniform2i64NV_dispatch_table_rewrite_ptr, /* glUniform2i64NV */ + epoxy_glUniform2i64vARB_dispatch_table_rewrite_ptr, /* glUniform2i64vARB */ + epoxy_glUniform2i64vNV_dispatch_table_rewrite_ptr, /* glUniform2i64vNV */ + epoxy_glUniform2iARB_dispatch_table_rewrite_ptr, /* glUniform2iARB */ + epoxy_glUniform2iv_dispatch_table_rewrite_ptr, /* glUniform2iv */ + epoxy_glUniform2ivARB_dispatch_table_rewrite_ptr, /* glUniform2ivARB */ + epoxy_glUniform2ui_dispatch_table_rewrite_ptr, /* glUniform2ui */ + epoxy_glUniform2ui64ARB_dispatch_table_rewrite_ptr, /* glUniform2ui64ARB */ + epoxy_glUniform2ui64NV_dispatch_table_rewrite_ptr, /* glUniform2ui64NV */ + epoxy_glUniform2ui64vARB_dispatch_table_rewrite_ptr, /* glUniform2ui64vARB */ + epoxy_glUniform2ui64vNV_dispatch_table_rewrite_ptr, /* glUniform2ui64vNV */ + epoxy_glUniform2uiEXT_dispatch_table_rewrite_ptr, /* glUniform2uiEXT */ + epoxy_glUniform2uiv_dispatch_table_rewrite_ptr, /* glUniform2uiv */ + epoxy_glUniform2uivEXT_dispatch_table_rewrite_ptr, /* glUniform2uivEXT */ + epoxy_glUniform3d_dispatch_table_rewrite_ptr, /* glUniform3d */ + epoxy_glUniform3dv_dispatch_table_rewrite_ptr, /* glUniform3dv */ + epoxy_glUniform3f_dispatch_table_rewrite_ptr, /* glUniform3f */ + epoxy_glUniform3fARB_dispatch_table_rewrite_ptr, /* glUniform3fARB */ + epoxy_glUniform3fv_dispatch_table_rewrite_ptr, /* glUniform3fv */ + epoxy_glUniform3fvARB_dispatch_table_rewrite_ptr, /* glUniform3fvARB */ + epoxy_glUniform3i_dispatch_table_rewrite_ptr, /* glUniform3i */ + epoxy_glUniform3i64ARB_dispatch_table_rewrite_ptr, /* glUniform3i64ARB */ + epoxy_glUniform3i64NV_dispatch_table_rewrite_ptr, /* glUniform3i64NV */ + epoxy_glUniform3i64vARB_dispatch_table_rewrite_ptr, /* glUniform3i64vARB */ + epoxy_glUniform3i64vNV_dispatch_table_rewrite_ptr, /* glUniform3i64vNV */ + epoxy_glUniform3iARB_dispatch_table_rewrite_ptr, /* glUniform3iARB */ + epoxy_glUniform3iv_dispatch_table_rewrite_ptr, /* glUniform3iv */ + epoxy_glUniform3ivARB_dispatch_table_rewrite_ptr, /* glUniform3ivARB */ + epoxy_glUniform3ui_dispatch_table_rewrite_ptr, /* glUniform3ui */ + epoxy_glUniform3ui64ARB_dispatch_table_rewrite_ptr, /* glUniform3ui64ARB */ + epoxy_glUniform3ui64NV_dispatch_table_rewrite_ptr, /* glUniform3ui64NV */ + epoxy_glUniform3ui64vARB_dispatch_table_rewrite_ptr, /* glUniform3ui64vARB */ + epoxy_glUniform3ui64vNV_dispatch_table_rewrite_ptr, /* glUniform3ui64vNV */ + epoxy_glUniform3uiEXT_dispatch_table_rewrite_ptr, /* glUniform3uiEXT */ + epoxy_glUniform3uiv_dispatch_table_rewrite_ptr, /* glUniform3uiv */ + epoxy_glUniform3uivEXT_dispatch_table_rewrite_ptr, /* glUniform3uivEXT */ + epoxy_glUniform4d_dispatch_table_rewrite_ptr, /* glUniform4d */ + epoxy_glUniform4dv_dispatch_table_rewrite_ptr, /* glUniform4dv */ + epoxy_glUniform4f_dispatch_table_rewrite_ptr, /* glUniform4f */ + epoxy_glUniform4fARB_dispatch_table_rewrite_ptr, /* glUniform4fARB */ + epoxy_glUniform4fv_dispatch_table_rewrite_ptr, /* glUniform4fv */ + epoxy_glUniform4fvARB_dispatch_table_rewrite_ptr, /* glUniform4fvARB */ + epoxy_glUniform4i_dispatch_table_rewrite_ptr, /* glUniform4i */ + epoxy_glUniform4i64ARB_dispatch_table_rewrite_ptr, /* glUniform4i64ARB */ + epoxy_glUniform4i64NV_dispatch_table_rewrite_ptr, /* glUniform4i64NV */ + epoxy_glUniform4i64vARB_dispatch_table_rewrite_ptr, /* glUniform4i64vARB */ + epoxy_glUniform4i64vNV_dispatch_table_rewrite_ptr, /* glUniform4i64vNV */ + epoxy_glUniform4iARB_dispatch_table_rewrite_ptr, /* glUniform4iARB */ + epoxy_glUniform4iv_dispatch_table_rewrite_ptr, /* glUniform4iv */ + epoxy_glUniform4ivARB_dispatch_table_rewrite_ptr, /* glUniform4ivARB */ + epoxy_glUniform4ui_dispatch_table_rewrite_ptr, /* glUniform4ui */ + epoxy_glUniform4ui64ARB_dispatch_table_rewrite_ptr, /* glUniform4ui64ARB */ + epoxy_glUniform4ui64NV_dispatch_table_rewrite_ptr, /* glUniform4ui64NV */ + epoxy_glUniform4ui64vARB_dispatch_table_rewrite_ptr, /* glUniform4ui64vARB */ + epoxy_glUniform4ui64vNV_dispatch_table_rewrite_ptr, /* glUniform4ui64vNV */ + epoxy_glUniform4uiEXT_dispatch_table_rewrite_ptr, /* glUniform4uiEXT */ + epoxy_glUniform4uiv_dispatch_table_rewrite_ptr, /* glUniform4uiv */ + epoxy_glUniform4uivEXT_dispatch_table_rewrite_ptr, /* glUniform4uivEXT */ + epoxy_glUniformBlockBinding_dispatch_table_rewrite_ptr, /* glUniformBlockBinding */ + epoxy_glUniformBufferEXT_dispatch_table_rewrite_ptr, /* glUniformBufferEXT */ + epoxy_glUniformHandleui64ARB_dispatch_table_rewrite_ptr, /* glUniformHandleui64ARB */ + epoxy_glUniformHandleui64NV_dispatch_table_rewrite_ptr, /* glUniformHandleui64NV */ + epoxy_glUniformHandleui64vARB_dispatch_table_rewrite_ptr, /* glUniformHandleui64vARB */ + epoxy_glUniformHandleui64vNV_dispatch_table_rewrite_ptr, /* glUniformHandleui64vNV */ + epoxy_glUniformMatrix2dv_dispatch_table_rewrite_ptr, /* glUniformMatrix2dv */ + epoxy_glUniformMatrix2fv_dispatch_table_rewrite_ptr, /* glUniformMatrix2fv */ + epoxy_glUniformMatrix2fvARB_dispatch_table_rewrite_ptr, /* glUniformMatrix2fvARB */ + epoxy_glUniformMatrix2x3dv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x3dv */ + epoxy_glUniformMatrix2x3fv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x3fv */ + epoxy_glUniformMatrix2x3fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix2x3fvNV */ + epoxy_glUniformMatrix2x4dv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x4dv */ + epoxy_glUniformMatrix2x4fv_dispatch_table_rewrite_ptr, /* glUniformMatrix2x4fv */ + epoxy_glUniformMatrix2x4fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix2x4fvNV */ + epoxy_glUniformMatrix3dv_dispatch_table_rewrite_ptr, /* glUniformMatrix3dv */ + epoxy_glUniformMatrix3fv_dispatch_table_rewrite_ptr, /* glUniformMatrix3fv */ + epoxy_glUniformMatrix3fvARB_dispatch_table_rewrite_ptr, /* glUniformMatrix3fvARB */ + epoxy_glUniformMatrix3x2dv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x2dv */ + epoxy_glUniformMatrix3x2fv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x2fv */ + epoxy_glUniformMatrix3x2fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix3x2fvNV */ + epoxy_glUniformMatrix3x4dv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x4dv */ + epoxy_glUniformMatrix3x4fv_dispatch_table_rewrite_ptr, /* glUniformMatrix3x4fv */ + epoxy_glUniformMatrix3x4fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix3x4fvNV */ + epoxy_glUniformMatrix4dv_dispatch_table_rewrite_ptr, /* glUniformMatrix4dv */ + epoxy_glUniformMatrix4fv_dispatch_table_rewrite_ptr, /* glUniformMatrix4fv */ + epoxy_glUniformMatrix4fvARB_dispatch_table_rewrite_ptr, /* glUniformMatrix4fvARB */ + epoxy_glUniformMatrix4x2dv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x2dv */ + epoxy_glUniformMatrix4x2fv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x2fv */ + epoxy_glUniformMatrix4x2fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix4x2fvNV */ + epoxy_glUniformMatrix4x3dv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x3dv */ + epoxy_glUniformMatrix4x3fv_dispatch_table_rewrite_ptr, /* glUniformMatrix4x3fv */ + epoxy_glUniformMatrix4x3fvNV_dispatch_table_rewrite_ptr, /* glUniformMatrix4x3fvNV */ + epoxy_glUniformSubroutinesuiv_dispatch_table_rewrite_ptr, /* glUniformSubroutinesuiv */ + epoxy_glUniformui64NV_dispatch_table_rewrite_ptr, /* glUniformui64NV */ + epoxy_glUniformui64vNV_dispatch_table_rewrite_ptr, /* glUniformui64vNV */ + epoxy_glUnlockArraysEXT_dispatch_table_rewrite_ptr, /* glUnlockArraysEXT */ + epoxy_glUnmapBuffer_dispatch_table_rewrite_ptr, /* glUnmapBuffer */ + epoxy_glUnmapBufferARB_dispatch_table_rewrite_ptr, /* glUnmapBufferARB */ + epoxy_glUnmapBufferOES_dispatch_table_rewrite_ptr, /* glUnmapBufferOES */ + epoxy_glUnmapNamedBuffer_dispatch_table_rewrite_ptr, /* glUnmapNamedBuffer */ + epoxy_glUnmapNamedBufferEXT_dispatch_table_rewrite_ptr, /* glUnmapNamedBufferEXT */ + epoxy_glUnmapObjectBufferATI_dispatch_table_rewrite_ptr, /* glUnmapObjectBufferATI */ + epoxy_glUnmapTexture2DINTEL_dispatch_table_rewrite_ptr, /* glUnmapTexture2DINTEL */ + epoxy_glUpdateObjectBufferATI_dispatch_table_rewrite_ptr, /* glUpdateObjectBufferATI */ + epoxy_glUseProgram_dispatch_table_rewrite_ptr, /* glUseProgram */ + epoxy_glUseProgramObjectARB_dispatch_table_rewrite_ptr, /* glUseProgramObjectARB */ + epoxy_glUseProgramStages_dispatch_table_rewrite_ptr, /* glUseProgramStages */ + epoxy_glUseProgramStagesEXT_dispatch_table_rewrite_ptr, /* glUseProgramStagesEXT */ + epoxy_glUseShaderProgramEXT_dispatch_table_rewrite_ptr, /* glUseShaderProgramEXT */ + epoxy_glVDPAUFiniNV_dispatch_table_rewrite_ptr, /* glVDPAUFiniNV */ + epoxy_glVDPAUGetSurfaceivNV_dispatch_table_rewrite_ptr, /* glVDPAUGetSurfaceivNV */ + epoxy_glVDPAUInitNV_dispatch_table_rewrite_ptr, /* glVDPAUInitNV */ + epoxy_glVDPAUIsSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAUIsSurfaceNV */ + epoxy_glVDPAUMapSurfacesNV_dispatch_table_rewrite_ptr, /* glVDPAUMapSurfacesNV */ + epoxy_glVDPAURegisterOutputSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAURegisterOutputSurfaceNV */ + epoxy_glVDPAURegisterVideoSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAURegisterVideoSurfaceNV */ + epoxy_glVDPAUSurfaceAccessNV_dispatch_table_rewrite_ptr, /* glVDPAUSurfaceAccessNV */ + epoxy_glVDPAUUnmapSurfacesNV_dispatch_table_rewrite_ptr, /* glVDPAUUnmapSurfacesNV */ + epoxy_glVDPAUUnregisterSurfaceNV_dispatch_table_rewrite_ptr, /* glVDPAUUnregisterSurfaceNV */ + epoxy_glValidateProgram_dispatch_table_rewrite_ptr, /* glValidateProgram */ + epoxy_glValidateProgramARB_dispatch_table_rewrite_ptr, /* glValidateProgramARB */ + epoxy_glValidateProgramPipeline_dispatch_table_rewrite_ptr, /* glValidateProgramPipeline */ + epoxy_glValidateProgramPipelineEXT_dispatch_table_rewrite_ptr, /* glValidateProgramPipelineEXT */ + epoxy_glVariantArrayObjectATI_dispatch_table_rewrite_ptr, /* glVariantArrayObjectATI */ + epoxy_glVariantPointerEXT_dispatch_table_rewrite_ptr, /* glVariantPointerEXT */ + epoxy_glVariantbvEXT_dispatch_table_rewrite_ptr, /* glVariantbvEXT */ + epoxy_glVariantdvEXT_dispatch_table_rewrite_ptr, /* glVariantdvEXT */ + epoxy_glVariantfvEXT_dispatch_table_rewrite_ptr, /* glVariantfvEXT */ + epoxy_glVariantivEXT_dispatch_table_rewrite_ptr, /* glVariantivEXT */ + epoxy_glVariantsvEXT_dispatch_table_rewrite_ptr, /* glVariantsvEXT */ + epoxy_glVariantubvEXT_dispatch_table_rewrite_ptr, /* glVariantubvEXT */ + epoxy_glVariantuivEXT_dispatch_table_rewrite_ptr, /* glVariantuivEXT */ + epoxy_glVariantusvEXT_dispatch_table_rewrite_ptr, /* glVariantusvEXT */ + epoxy_glVertex2bOES_dispatch_table_rewrite_ptr, /* glVertex2bOES */ + epoxy_glVertex2bvOES_dispatch_table_rewrite_ptr, /* glVertex2bvOES */ + epoxy_glVertex2d_dispatch_table_rewrite_ptr, /* glVertex2d */ + epoxy_glVertex2dv_dispatch_table_rewrite_ptr, /* glVertex2dv */ + epoxy_glVertex2f_dispatch_table_rewrite_ptr, /* glVertex2f */ + epoxy_glVertex2fv_dispatch_table_rewrite_ptr, /* glVertex2fv */ + epoxy_glVertex2hNV_dispatch_table_rewrite_ptr, /* glVertex2hNV */ + epoxy_glVertex2hvNV_dispatch_table_rewrite_ptr, /* glVertex2hvNV */ + epoxy_glVertex2i_dispatch_table_rewrite_ptr, /* glVertex2i */ + epoxy_glVertex2iv_dispatch_table_rewrite_ptr, /* glVertex2iv */ + epoxy_glVertex2s_dispatch_table_rewrite_ptr, /* glVertex2s */ + epoxy_glVertex2sv_dispatch_table_rewrite_ptr, /* glVertex2sv */ + epoxy_glVertex2xOES_dispatch_table_rewrite_ptr, /* glVertex2xOES */ + epoxy_glVertex2xvOES_dispatch_table_rewrite_ptr, /* glVertex2xvOES */ + epoxy_glVertex3bOES_dispatch_table_rewrite_ptr, /* glVertex3bOES */ + epoxy_glVertex3bvOES_dispatch_table_rewrite_ptr, /* glVertex3bvOES */ + epoxy_glVertex3d_dispatch_table_rewrite_ptr, /* glVertex3d */ + epoxy_glVertex3dv_dispatch_table_rewrite_ptr, /* glVertex3dv */ + epoxy_glVertex3f_dispatch_table_rewrite_ptr, /* glVertex3f */ + epoxy_glVertex3fv_dispatch_table_rewrite_ptr, /* glVertex3fv */ + epoxy_glVertex3hNV_dispatch_table_rewrite_ptr, /* glVertex3hNV */ + epoxy_glVertex3hvNV_dispatch_table_rewrite_ptr, /* glVertex3hvNV */ + epoxy_glVertex3i_dispatch_table_rewrite_ptr, /* glVertex3i */ + epoxy_glVertex3iv_dispatch_table_rewrite_ptr, /* glVertex3iv */ + epoxy_glVertex3s_dispatch_table_rewrite_ptr, /* glVertex3s */ + epoxy_glVertex3sv_dispatch_table_rewrite_ptr, /* glVertex3sv */ + epoxy_glVertex3xOES_dispatch_table_rewrite_ptr, /* glVertex3xOES */ + epoxy_glVertex3xvOES_dispatch_table_rewrite_ptr, /* glVertex3xvOES */ + epoxy_glVertex4bOES_dispatch_table_rewrite_ptr, /* glVertex4bOES */ + epoxy_glVertex4bvOES_dispatch_table_rewrite_ptr, /* glVertex4bvOES */ + epoxy_glVertex4d_dispatch_table_rewrite_ptr, /* glVertex4d */ + epoxy_glVertex4dv_dispatch_table_rewrite_ptr, /* glVertex4dv */ + epoxy_glVertex4f_dispatch_table_rewrite_ptr, /* glVertex4f */ + epoxy_glVertex4fv_dispatch_table_rewrite_ptr, /* glVertex4fv */ + epoxy_glVertex4hNV_dispatch_table_rewrite_ptr, /* glVertex4hNV */ + epoxy_glVertex4hvNV_dispatch_table_rewrite_ptr, /* glVertex4hvNV */ + epoxy_glVertex4i_dispatch_table_rewrite_ptr, /* glVertex4i */ + epoxy_glVertex4iv_dispatch_table_rewrite_ptr, /* glVertex4iv */ + epoxy_glVertex4s_dispatch_table_rewrite_ptr, /* glVertex4s */ + epoxy_glVertex4sv_dispatch_table_rewrite_ptr, /* glVertex4sv */ + epoxy_glVertex4xOES_dispatch_table_rewrite_ptr, /* glVertex4xOES */ + epoxy_glVertex4xvOES_dispatch_table_rewrite_ptr, /* glVertex4xvOES */ + epoxy_glVertexArrayAttribBinding_dispatch_table_rewrite_ptr, /* glVertexArrayAttribBinding */ + epoxy_glVertexArrayAttribFormat_dispatch_table_rewrite_ptr, /* glVertexArrayAttribFormat */ + epoxy_glVertexArrayAttribIFormat_dispatch_table_rewrite_ptr, /* glVertexArrayAttribIFormat */ + epoxy_glVertexArrayAttribLFormat_dispatch_table_rewrite_ptr, /* glVertexArrayAttribLFormat */ + epoxy_glVertexArrayBindVertexBufferEXT_dispatch_table_rewrite_ptr, /* glVertexArrayBindVertexBufferEXT */ + epoxy_glVertexArrayBindingDivisor_dispatch_table_rewrite_ptr, /* glVertexArrayBindingDivisor */ + epoxy_glVertexArrayColorOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayColorOffsetEXT */ + epoxy_glVertexArrayEdgeFlagOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayEdgeFlagOffsetEXT */ + epoxy_glVertexArrayElementBuffer_dispatch_table_rewrite_ptr, /* glVertexArrayElementBuffer */ + epoxy_glVertexArrayFogCoordOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayFogCoordOffsetEXT */ + epoxy_glVertexArrayIndexOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayIndexOffsetEXT */ + epoxy_glVertexArrayMultiTexCoordOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayMultiTexCoordOffsetEXT */ + epoxy_glVertexArrayNormalOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayNormalOffsetEXT */ + epoxy_glVertexArrayParameteriAPPLE_dispatch_table_rewrite_ptr, /* glVertexArrayParameteriAPPLE */ + epoxy_glVertexArrayRangeAPPLE_dispatch_table_rewrite_ptr, /* glVertexArrayRangeAPPLE */ + epoxy_glVertexArrayRangeNV_dispatch_table_rewrite_ptr, /* glVertexArrayRangeNV */ + epoxy_glVertexArraySecondaryColorOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArraySecondaryColorOffsetEXT */ + epoxy_glVertexArrayTexCoordOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayTexCoordOffsetEXT */ + epoxy_glVertexArrayVertexAttribBindingEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribBindingEXT */ + epoxy_glVertexArrayVertexAttribDivisorEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribDivisorEXT */ + epoxy_glVertexArrayVertexAttribFormatEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribFormatEXT */ + epoxy_glVertexArrayVertexAttribIFormatEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribIFormatEXT */ + epoxy_glVertexArrayVertexAttribIOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribIOffsetEXT */ + epoxy_glVertexArrayVertexAttribLFormatEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribLFormatEXT */ + epoxy_glVertexArrayVertexAttribLOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribLOffsetEXT */ + epoxy_glVertexArrayVertexAttribOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexAttribOffsetEXT */ + epoxy_glVertexArrayVertexBindingDivisorEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexBindingDivisorEXT */ + epoxy_glVertexArrayVertexBuffer_dispatch_table_rewrite_ptr, /* glVertexArrayVertexBuffer */ + epoxy_glVertexArrayVertexBuffers_dispatch_table_rewrite_ptr, /* glVertexArrayVertexBuffers */ + epoxy_glVertexArrayVertexOffsetEXT_dispatch_table_rewrite_ptr, /* glVertexArrayVertexOffsetEXT */ + epoxy_glVertexAttrib1d_dispatch_table_rewrite_ptr, /* glVertexAttrib1d */ + epoxy_glVertexAttrib1dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1dARB */ + epoxy_glVertexAttrib1dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1dNV */ + epoxy_glVertexAttrib1dv_dispatch_table_rewrite_ptr, /* glVertexAttrib1dv */ + epoxy_glVertexAttrib1dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1dvARB */ + epoxy_glVertexAttrib1dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1dvNV */ + epoxy_glVertexAttrib1f_dispatch_table_rewrite_ptr, /* glVertexAttrib1f */ + epoxy_glVertexAttrib1fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1fARB */ + epoxy_glVertexAttrib1fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1fNV */ + epoxy_glVertexAttrib1fv_dispatch_table_rewrite_ptr, /* glVertexAttrib1fv */ + epoxy_glVertexAttrib1fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1fvARB */ + epoxy_glVertexAttrib1fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1fvNV */ + epoxy_glVertexAttrib1hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1hNV */ + epoxy_glVertexAttrib1hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1hvNV */ + epoxy_glVertexAttrib1s_dispatch_table_rewrite_ptr, /* glVertexAttrib1s */ + epoxy_glVertexAttrib1sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1sARB */ + epoxy_glVertexAttrib1sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1sNV */ + epoxy_glVertexAttrib1sv_dispatch_table_rewrite_ptr, /* glVertexAttrib1sv */ + epoxy_glVertexAttrib1svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib1svARB */ + epoxy_glVertexAttrib1svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib1svNV */ + epoxy_glVertexAttrib2d_dispatch_table_rewrite_ptr, /* glVertexAttrib2d */ + epoxy_glVertexAttrib2dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2dARB */ + epoxy_glVertexAttrib2dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2dNV */ + epoxy_glVertexAttrib2dv_dispatch_table_rewrite_ptr, /* glVertexAttrib2dv */ + epoxy_glVertexAttrib2dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2dvARB */ + epoxy_glVertexAttrib2dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2dvNV */ + epoxy_glVertexAttrib2f_dispatch_table_rewrite_ptr, /* glVertexAttrib2f */ + epoxy_glVertexAttrib2fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2fARB */ + epoxy_glVertexAttrib2fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2fNV */ + epoxy_glVertexAttrib2fv_dispatch_table_rewrite_ptr, /* glVertexAttrib2fv */ + epoxy_glVertexAttrib2fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2fvARB */ + epoxy_glVertexAttrib2fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2fvNV */ + epoxy_glVertexAttrib2hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2hNV */ + epoxy_glVertexAttrib2hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2hvNV */ + epoxy_glVertexAttrib2s_dispatch_table_rewrite_ptr, /* glVertexAttrib2s */ + epoxy_glVertexAttrib2sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2sARB */ + epoxy_glVertexAttrib2sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2sNV */ + epoxy_glVertexAttrib2sv_dispatch_table_rewrite_ptr, /* glVertexAttrib2sv */ + epoxy_glVertexAttrib2svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib2svARB */ + epoxy_glVertexAttrib2svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib2svNV */ + epoxy_glVertexAttrib3d_dispatch_table_rewrite_ptr, /* glVertexAttrib3d */ + epoxy_glVertexAttrib3dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3dARB */ + epoxy_glVertexAttrib3dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3dNV */ + epoxy_glVertexAttrib3dv_dispatch_table_rewrite_ptr, /* glVertexAttrib3dv */ + epoxy_glVertexAttrib3dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3dvARB */ + epoxy_glVertexAttrib3dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3dvNV */ + epoxy_glVertexAttrib3f_dispatch_table_rewrite_ptr, /* glVertexAttrib3f */ + epoxy_glVertexAttrib3fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3fARB */ + epoxy_glVertexAttrib3fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3fNV */ + epoxy_glVertexAttrib3fv_dispatch_table_rewrite_ptr, /* glVertexAttrib3fv */ + epoxy_glVertexAttrib3fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3fvARB */ + epoxy_glVertexAttrib3fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3fvNV */ + epoxy_glVertexAttrib3hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3hNV */ + epoxy_glVertexAttrib3hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3hvNV */ + epoxy_glVertexAttrib3s_dispatch_table_rewrite_ptr, /* glVertexAttrib3s */ + epoxy_glVertexAttrib3sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3sARB */ + epoxy_glVertexAttrib3sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3sNV */ + epoxy_glVertexAttrib3sv_dispatch_table_rewrite_ptr, /* glVertexAttrib3sv */ + epoxy_glVertexAttrib3svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib3svARB */ + epoxy_glVertexAttrib3svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib3svNV */ + epoxy_glVertexAttrib4Nbv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nbv */ + epoxy_glVertexAttrib4NbvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NbvARB */ + epoxy_glVertexAttrib4Niv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Niv */ + epoxy_glVertexAttrib4NivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NivARB */ + epoxy_glVertexAttrib4Nsv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nsv */ + epoxy_glVertexAttrib4NsvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NsvARB */ + epoxy_glVertexAttrib4Nub_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nub */ + epoxy_glVertexAttrib4NubARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NubARB */ + epoxy_glVertexAttrib4Nubv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nubv */ + epoxy_glVertexAttrib4NubvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NubvARB */ + epoxy_glVertexAttrib4Nuiv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nuiv */ + epoxy_glVertexAttrib4NuivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NuivARB */ + epoxy_glVertexAttrib4Nusv_dispatch_table_rewrite_ptr, /* glVertexAttrib4Nusv */ + epoxy_glVertexAttrib4NusvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4NusvARB */ + epoxy_glVertexAttrib4bv_dispatch_table_rewrite_ptr, /* glVertexAttrib4bv */ + epoxy_glVertexAttrib4bvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4bvARB */ + epoxy_glVertexAttrib4d_dispatch_table_rewrite_ptr, /* glVertexAttrib4d */ + epoxy_glVertexAttrib4dARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4dARB */ + epoxy_glVertexAttrib4dNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4dNV */ + epoxy_glVertexAttrib4dv_dispatch_table_rewrite_ptr, /* glVertexAttrib4dv */ + epoxy_glVertexAttrib4dvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4dvARB */ + epoxy_glVertexAttrib4dvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4dvNV */ + epoxy_glVertexAttrib4f_dispatch_table_rewrite_ptr, /* glVertexAttrib4f */ + epoxy_glVertexAttrib4fARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4fARB */ + epoxy_glVertexAttrib4fNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4fNV */ + epoxy_glVertexAttrib4fv_dispatch_table_rewrite_ptr, /* glVertexAttrib4fv */ + epoxy_glVertexAttrib4fvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4fvARB */ + epoxy_glVertexAttrib4fvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4fvNV */ + epoxy_glVertexAttrib4hNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4hNV */ + epoxy_glVertexAttrib4hvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4hvNV */ + epoxy_glVertexAttrib4iv_dispatch_table_rewrite_ptr, /* glVertexAttrib4iv */ + epoxy_glVertexAttrib4ivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4ivARB */ + epoxy_glVertexAttrib4s_dispatch_table_rewrite_ptr, /* glVertexAttrib4s */ + epoxy_glVertexAttrib4sARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4sARB */ + epoxy_glVertexAttrib4sNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4sNV */ + epoxy_glVertexAttrib4sv_dispatch_table_rewrite_ptr, /* glVertexAttrib4sv */ + epoxy_glVertexAttrib4svARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4svARB */ + epoxy_glVertexAttrib4svNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4svNV */ + epoxy_glVertexAttrib4ubNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubNV */ + epoxy_glVertexAttrib4ubv_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubv */ + epoxy_glVertexAttrib4ubvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubvARB */ + epoxy_glVertexAttrib4ubvNV_dispatch_table_rewrite_ptr, /* glVertexAttrib4ubvNV */ + epoxy_glVertexAttrib4uiv_dispatch_table_rewrite_ptr, /* glVertexAttrib4uiv */ + epoxy_glVertexAttrib4uivARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4uivARB */ + epoxy_glVertexAttrib4usv_dispatch_table_rewrite_ptr, /* glVertexAttrib4usv */ + epoxy_glVertexAttrib4usvARB_dispatch_table_rewrite_ptr, /* glVertexAttrib4usvARB */ + epoxy_glVertexAttribArrayObjectATI_dispatch_table_rewrite_ptr, /* glVertexAttribArrayObjectATI */ + epoxy_glVertexAttribBinding_dispatch_table_rewrite_ptr, /* glVertexAttribBinding */ + epoxy_glVertexAttribDivisor_dispatch_table_rewrite_ptr, /* glVertexAttribDivisor */ + epoxy_glVertexAttribDivisorANGLE_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorANGLE */ + epoxy_glVertexAttribDivisorARB_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorARB */ + epoxy_glVertexAttribDivisorEXT_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorEXT */ + epoxy_glVertexAttribDivisorNV_dispatch_table_rewrite_ptr, /* glVertexAttribDivisorNV */ + epoxy_glVertexAttribFormat_dispatch_table_rewrite_ptr, /* glVertexAttribFormat */ + epoxy_glVertexAttribFormatNV_dispatch_table_rewrite_ptr, /* glVertexAttribFormatNV */ + epoxy_glVertexAttribI1i_dispatch_table_rewrite_ptr, /* glVertexAttribI1i */ + epoxy_glVertexAttribI1iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1iEXT */ + epoxy_glVertexAttribI1iv_dispatch_table_rewrite_ptr, /* glVertexAttribI1iv */ + epoxy_glVertexAttribI1ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1ivEXT */ + epoxy_glVertexAttribI1ui_dispatch_table_rewrite_ptr, /* glVertexAttribI1ui */ + epoxy_glVertexAttribI1uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1uiEXT */ + epoxy_glVertexAttribI1uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI1uiv */ + epoxy_glVertexAttribI1uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI1uivEXT */ + epoxy_glVertexAttribI2i_dispatch_table_rewrite_ptr, /* glVertexAttribI2i */ + epoxy_glVertexAttribI2iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2iEXT */ + epoxy_glVertexAttribI2iv_dispatch_table_rewrite_ptr, /* glVertexAttribI2iv */ + epoxy_glVertexAttribI2ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2ivEXT */ + epoxy_glVertexAttribI2ui_dispatch_table_rewrite_ptr, /* glVertexAttribI2ui */ + epoxy_glVertexAttribI2uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2uiEXT */ + epoxy_glVertexAttribI2uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI2uiv */ + epoxy_glVertexAttribI2uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI2uivEXT */ + epoxy_glVertexAttribI3i_dispatch_table_rewrite_ptr, /* glVertexAttribI3i */ + epoxy_glVertexAttribI3iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3iEXT */ + epoxy_glVertexAttribI3iv_dispatch_table_rewrite_ptr, /* glVertexAttribI3iv */ + epoxy_glVertexAttribI3ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3ivEXT */ + epoxy_glVertexAttribI3ui_dispatch_table_rewrite_ptr, /* glVertexAttribI3ui */ + epoxy_glVertexAttribI3uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3uiEXT */ + epoxy_glVertexAttribI3uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI3uiv */ + epoxy_glVertexAttribI3uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI3uivEXT */ + epoxy_glVertexAttribI4bv_dispatch_table_rewrite_ptr, /* glVertexAttribI4bv */ + epoxy_glVertexAttribI4bvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4bvEXT */ + epoxy_glVertexAttribI4i_dispatch_table_rewrite_ptr, /* glVertexAttribI4i */ + epoxy_glVertexAttribI4iEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4iEXT */ + epoxy_glVertexAttribI4iv_dispatch_table_rewrite_ptr, /* glVertexAttribI4iv */ + epoxy_glVertexAttribI4ivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4ivEXT */ + epoxy_glVertexAttribI4sv_dispatch_table_rewrite_ptr, /* glVertexAttribI4sv */ + epoxy_glVertexAttribI4svEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4svEXT */ + epoxy_glVertexAttribI4ubv_dispatch_table_rewrite_ptr, /* glVertexAttribI4ubv */ + epoxy_glVertexAttribI4ubvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4ubvEXT */ + epoxy_glVertexAttribI4ui_dispatch_table_rewrite_ptr, /* glVertexAttribI4ui */ + epoxy_glVertexAttribI4uiEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4uiEXT */ + epoxy_glVertexAttribI4uiv_dispatch_table_rewrite_ptr, /* glVertexAttribI4uiv */ + epoxy_glVertexAttribI4uivEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4uivEXT */ + epoxy_glVertexAttribI4usv_dispatch_table_rewrite_ptr, /* glVertexAttribI4usv */ + epoxy_glVertexAttribI4usvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribI4usvEXT */ + epoxy_glVertexAttribIFormat_dispatch_table_rewrite_ptr, /* glVertexAttribIFormat */ + epoxy_glVertexAttribIFormatNV_dispatch_table_rewrite_ptr, /* glVertexAttribIFormatNV */ + epoxy_glVertexAttribIPointer_dispatch_table_rewrite_ptr, /* glVertexAttribIPointer */ + epoxy_glVertexAttribIPointerEXT_dispatch_table_rewrite_ptr, /* glVertexAttribIPointerEXT */ + epoxy_glVertexAttribL1d_dispatch_table_rewrite_ptr, /* glVertexAttribL1d */ + epoxy_glVertexAttribL1dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL1dEXT */ + epoxy_glVertexAttribL1dv_dispatch_table_rewrite_ptr, /* glVertexAttribL1dv */ + epoxy_glVertexAttribL1dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL1dvEXT */ + epoxy_glVertexAttribL1i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL1i64NV */ + epoxy_glVertexAttribL1i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL1i64vNV */ + epoxy_glVertexAttribL1ui64ARB_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64ARB */ + epoxy_glVertexAttribL1ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64NV */ + epoxy_glVertexAttribL1ui64vARB_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64vARB */ + epoxy_glVertexAttribL1ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL1ui64vNV */ + epoxy_glVertexAttribL2d_dispatch_table_rewrite_ptr, /* glVertexAttribL2d */ + epoxy_glVertexAttribL2dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL2dEXT */ + epoxy_glVertexAttribL2dv_dispatch_table_rewrite_ptr, /* glVertexAttribL2dv */ + epoxy_glVertexAttribL2dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL2dvEXT */ + epoxy_glVertexAttribL2i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL2i64NV */ + epoxy_glVertexAttribL2i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL2i64vNV */ + epoxy_glVertexAttribL2ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL2ui64NV */ + epoxy_glVertexAttribL2ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL2ui64vNV */ + epoxy_glVertexAttribL3d_dispatch_table_rewrite_ptr, /* glVertexAttribL3d */ + epoxy_glVertexAttribL3dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL3dEXT */ + epoxy_glVertexAttribL3dv_dispatch_table_rewrite_ptr, /* glVertexAttribL3dv */ + epoxy_glVertexAttribL3dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL3dvEXT */ + epoxy_glVertexAttribL3i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL3i64NV */ + epoxy_glVertexAttribL3i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL3i64vNV */ + epoxy_glVertexAttribL3ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL3ui64NV */ + epoxy_glVertexAttribL3ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL3ui64vNV */ + epoxy_glVertexAttribL4d_dispatch_table_rewrite_ptr, /* glVertexAttribL4d */ + epoxy_glVertexAttribL4dEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL4dEXT */ + epoxy_glVertexAttribL4dv_dispatch_table_rewrite_ptr, /* glVertexAttribL4dv */ + epoxy_glVertexAttribL4dvEXT_dispatch_table_rewrite_ptr, /* glVertexAttribL4dvEXT */ + epoxy_glVertexAttribL4i64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL4i64NV */ + epoxy_glVertexAttribL4i64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL4i64vNV */ + epoxy_glVertexAttribL4ui64NV_dispatch_table_rewrite_ptr, /* glVertexAttribL4ui64NV */ + epoxy_glVertexAttribL4ui64vNV_dispatch_table_rewrite_ptr, /* glVertexAttribL4ui64vNV */ + epoxy_glVertexAttribLFormat_dispatch_table_rewrite_ptr, /* glVertexAttribLFormat */ + epoxy_glVertexAttribLFormatNV_dispatch_table_rewrite_ptr, /* glVertexAttribLFormatNV */ + epoxy_glVertexAttribLPointer_dispatch_table_rewrite_ptr, /* glVertexAttribLPointer */ + epoxy_glVertexAttribLPointerEXT_dispatch_table_rewrite_ptr, /* glVertexAttribLPointerEXT */ + epoxy_glVertexAttribP1ui_dispatch_table_rewrite_ptr, /* glVertexAttribP1ui */ + epoxy_glVertexAttribP1uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP1uiv */ + epoxy_glVertexAttribP2ui_dispatch_table_rewrite_ptr, /* glVertexAttribP2ui */ + epoxy_glVertexAttribP2uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP2uiv */ + epoxy_glVertexAttribP3ui_dispatch_table_rewrite_ptr, /* glVertexAttribP3ui */ + epoxy_glVertexAttribP3uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP3uiv */ + epoxy_glVertexAttribP4ui_dispatch_table_rewrite_ptr, /* glVertexAttribP4ui */ + epoxy_glVertexAttribP4uiv_dispatch_table_rewrite_ptr, /* glVertexAttribP4uiv */ + epoxy_glVertexAttribParameteriAMD_dispatch_table_rewrite_ptr, /* glVertexAttribParameteriAMD */ + epoxy_glVertexAttribPointer_dispatch_table_rewrite_ptr, /* glVertexAttribPointer */ + epoxy_glVertexAttribPointerARB_dispatch_table_rewrite_ptr, /* glVertexAttribPointerARB */ + epoxy_glVertexAttribPointerNV_dispatch_table_rewrite_ptr, /* glVertexAttribPointerNV */ + epoxy_glVertexAttribs1dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1dvNV */ + epoxy_glVertexAttribs1fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1fvNV */ + epoxy_glVertexAttribs1hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1hvNV */ + epoxy_glVertexAttribs1svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs1svNV */ + epoxy_glVertexAttribs2dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2dvNV */ + epoxy_glVertexAttribs2fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2fvNV */ + epoxy_glVertexAttribs2hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2hvNV */ + epoxy_glVertexAttribs2svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs2svNV */ + epoxy_glVertexAttribs3dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3dvNV */ + epoxy_glVertexAttribs3fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3fvNV */ + epoxy_glVertexAttribs3hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3hvNV */ + epoxy_glVertexAttribs3svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs3svNV */ + epoxy_glVertexAttribs4dvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4dvNV */ + epoxy_glVertexAttribs4fvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4fvNV */ + epoxy_glVertexAttribs4hvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4hvNV */ + epoxy_glVertexAttribs4svNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4svNV */ + epoxy_glVertexAttribs4ubvNV_dispatch_table_rewrite_ptr, /* glVertexAttribs4ubvNV */ + epoxy_glVertexBindingDivisor_dispatch_table_rewrite_ptr, /* glVertexBindingDivisor */ + epoxy_glVertexBlendARB_dispatch_table_rewrite_ptr, /* glVertexBlendARB */ + epoxy_glVertexBlendEnvfATI_dispatch_table_rewrite_ptr, /* glVertexBlendEnvfATI */ + epoxy_glVertexBlendEnviATI_dispatch_table_rewrite_ptr, /* glVertexBlendEnviATI */ + epoxy_glVertexFormatNV_dispatch_table_rewrite_ptr, /* glVertexFormatNV */ + epoxy_glVertexP2ui_dispatch_table_rewrite_ptr, /* glVertexP2ui */ + epoxy_glVertexP2uiv_dispatch_table_rewrite_ptr, /* glVertexP2uiv */ + epoxy_glVertexP3ui_dispatch_table_rewrite_ptr, /* glVertexP3ui */ + epoxy_glVertexP3uiv_dispatch_table_rewrite_ptr, /* glVertexP3uiv */ + epoxy_glVertexP4ui_dispatch_table_rewrite_ptr, /* glVertexP4ui */ + epoxy_glVertexP4uiv_dispatch_table_rewrite_ptr, /* glVertexP4uiv */ + epoxy_glVertexPointer_dispatch_table_rewrite_ptr, /* glVertexPointer */ + epoxy_glVertexPointerEXT_dispatch_table_rewrite_ptr, /* glVertexPointerEXT */ + epoxy_glVertexPointerListIBM_dispatch_table_rewrite_ptr, /* glVertexPointerListIBM */ + epoxy_glVertexPointervINTEL_dispatch_table_rewrite_ptr, /* glVertexPointervINTEL */ + epoxy_glVertexStream1dATI_dispatch_table_rewrite_ptr, /* glVertexStream1dATI */ + epoxy_glVertexStream1dvATI_dispatch_table_rewrite_ptr, /* glVertexStream1dvATI */ + epoxy_glVertexStream1fATI_dispatch_table_rewrite_ptr, /* glVertexStream1fATI */ + epoxy_glVertexStream1fvATI_dispatch_table_rewrite_ptr, /* glVertexStream1fvATI */ + epoxy_glVertexStream1iATI_dispatch_table_rewrite_ptr, /* glVertexStream1iATI */ + epoxy_glVertexStream1ivATI_dispatch_table_rewrite_ptr, /* glVertexStream1ivATI */ + epoxy_glVertexStream1sATI_dispatch_table_rewrite_ptr, /* glVertexStream1sATI */ + epoxy_glVertexStream1svATI_dispatch_table_rewrite_ptr, /* glVertexStream1svATI */ + epoxy_glVertexStream2dATI_dispatch_table_rewrite_ptr, /* glVertexStream2dATI */ + epoxy_glVertexStream2dvATI_dispatch_table_rewrite_ptr, /* glVertexStream2dvATI */ + epoxy_glVertexStream2fATI_dispatch_table_rewrite_ptr, /* glVertexStream2fATI */ + epoxy_glVertexStream2fvATI_dispatch_table_rewrite_ptr, /* glVertexStream2fvATI */ + epoxy_glVertexStream2iATI_dispatch_table_rewrite_ptr, /* glVertexStream2iATI */ + epoxy_glVertexStream2ivATI_dispatch_table_rewrite_ptr, /* glVertexStream2ivATI */ + epoxy_glVertexStream2sATI_dispatch_table_rewrite_ptr, /* glVertexStream2sATI */ + epoxy_glVertexStream2svATI_dispatch_table_rewrite_ptr, /* glVertexStream2svATI */ + epoxy_glVertexStream3dATI_dispatch_table_rewrite_ptr, /* glVertexStream3dATI */ + epoxy_glVertexStream3dvATI_dispatch_table_rewrite_ptr, /* glVertexStream3dvATI */ + epoxy_glVertexStream3fATI_dispatch_table_rewrite_ptr, /* glVertexStream3fATI */ + epoxy_glVertexStream3fvATI_dispatch_table_rewrite_ptr, /* glVertexStream3fvATI */ + epoxy_glVertexStream3iATI_dispatch_table_rewrite_ptr, /* glVertexStream3iATI */ + epoxy_glVertexStream3ivATI_dispatch_table_rewrite_ptr, /* glVertexStream3ivATI */ + epoxy_glVertexStream3sATI_dispatch_table_rewrite_ptr, /* glVertexStream3sATI */ + epoxy_glVertexStream3svATI_dispatch_table_rewrite_ptr, /* glVertexStream3svATI */ + epoxy_glVertexStream4dATI_dispatch_table_rewrite_ptr, /* glVertexStream4dATI */ + epoxy_glVertexStream4dvATI_dispatch_table_rewrite_ptr, /* glVertexStream4dvATI */ + epoxy_glVertexStream4fATI_dispatch_table_rewrite_ptr, /* glVertexStream4fATI */ + epoxy_glVertexStream4fvATI_dispatch_table_rewrite_ptr, /* glVertexStream4fvATI */ + epoxy_glVertexStream4iATI_dispatch_table_rewrite_ptr, /* glVertexStream4iATI */ + epoxy_glVertexStream4ivATI_dispatch_table_rewrite_ptr, /* glVertexStream4ivATI */ + epoxy_glVertexStream4sATI_dispatch_table_rewrite_ptr, /* glVertexStream4sATI */ + epoxy_glVertexStream4svATI_dispatch_table_rewrite_ptr, /* glVertexStream4svATI */ + epoxy_glVertexWeightPointerEXT_dispatch_table_rewrite_ptr, /* glVertexWeightPointerEXT */ + epoxy_glVertexWeightfEXT_dispatch_table_rewrite_ptr, /* glVertexWeightfEXT */ + epoxy_glVertexWeightfvEXT_dispatch_table_rewrite_ptr, /* glVertexWeightfvEXT */ + epoxy_glVertexWeighthNV_dispatch_table_rewrite_ptr, /* glVertexWeighthNV */ + epoxy_glVertexWeighthvNV_dispatch_table_rewrite_ptr, /* glVertexWeighthvNV */ + epoxy_glVideoCaptureNV_dispatch_table_rewrite_ptr, /* glVideoCaptureNV */ + epoxy_glVideoCaptureStreamParameterdvNV_dispatch_table_rewrite_ptr, /* glVideoCaptureStreamParameterdvNV */ + epoxy_glVideoCaptureStreamParameterfvNV_dispatch_table_rewrite_ptr, /* glVideoCaptureStreamParameterfvNV */ + epoxy_glVideoCaptureStreamParameterivNV_dispatch_table_rewrite_ptr, /* glVideoCaptureStreamParameterivNV */ + epoxy_glViewport_dispatch_table_rewrite_ptr, /* glViewport */ + epoxy_glViewportArrayv_dispatch_table_rewrite_ptr, /* glViewportArrayv */ + epoxy_glViewportArrayvNV_dispatch_table_rewrite_ptr, /* glViewportArrayvNV */ + epoxy_glViewportIndexedf_dispatch_table_rewrite_ptr, /* glViewportIndexedf */ + epoxy_glViewportIndexedfNV_dispatch_table_rewrite_ptr, /* glViewportIndexedfNV */ + epoxy_glViewportIndexedfv_dispatch_table_rewrite_ptr, /* glViewportIndexedfv */ + epoxy_glViewportIndexedfvNV_dispatch_table_rewrite_ptr, /* glViewportIndexedfvNV */ + epoxy_glWaitSync_dispatch_table_rewrite_ptr, /* glWaitSync */ + epoxy_glWaitSyncAPPLE_dispatch_table_rewrite_ptr, /* glWaitSyncAPPLE */ + epoxy_glWeightPathsNV_dispatch_table_rewrite_ptr, /* glWeightPathsNV */ + epoxy_glWeightPointerARB_dispatch_table_rewrite_ptr, /* glWeightPointerARB */ + epoxy_glWeightPointerOES_dispatch_table_rewrite_ptr, /* glWeightPointerOES */ + epoxy_glWeightbvARB_dispatch_table_rewrite_ptr, /* glWeightbvARB */ + epoxy_glWeightdvARB_dispatch_table_rewrite_ptr, /* glWeightdvARB */ + epoxy_glWeightfvARB_dispatch_table_rewrite_ptr, /* glWeightfvARB */ + epoxy_glWeightivARB_dispatch_table_rewrite_ptr, /* glWeightivARB */ + epoxy_glWeightsvARB_dispatch_table_rewrite_ptr, /* glWeightsvARB */ + epoxy_glWeightubvARB_dispatch_table_rewrite_ptr, /* glWeightubvARB */ + epoxy_glWeightuivARB_dispatch_table_rewrite_ptr, /* glWeightuivARB */ + epoxy_glWeightusvARB_dispatch_table_rewrite_ptr, /* glWeightusvARB */ + epoxy_glWindowPos2d_dispatch_table_rewrite_ptr, /* glWindowPos2d */ + epoxy_glWindowPos2dARB_dispatch_table_rewrite_ptr, /* glWindowPos2dARB */ + epoxy_glWindowPos2dMESA_dispatch_table_rewrite_ptr, /* glWindowPos2dMESA */ + epoxy_glWindowPos2dv_dispatch_table_rewrite_ptr, /* glWindowPos2dv */ + epoxy_glWindowPos2dvARB_dispatch_table_rewrite_ptr, /* glWindowPos2dvARB */ + epoxy_glWindowPos2dvMESA_dispatch_table_rewrite_ptr, /* glWindowPos2dvMESA */ + epoxy_glWindowPos2f_dispatch_table_rewrite_ptr, /* glWindowPos2f */ + epoxy_glWindowPos2fARB_dispatch_table_rewrite_ptr, /* glWindowPos2fARB */ + epoxy_glWindowPos2fMESA_dispatch_table_rewrite_ptr, /* glWindowPos2fMESA */ + epoxy_glWindowPos2fv_dispatch_table_rewrite_ptr, /* glWindowPos2fv */ + epoxy_glWindowPos2fvARB_dispatch_table_rewrite_ptr, /* glWindowPos2fvARB */ + epoxy_glWindowPos2fvMESA_dispatch_table_rewrite_ptr, /* glWindowPos2fvMESA */ + epoxy_glWindowPos2i_dispatch_table_rewrite_ptr, /* glWindowPos2i */ + epoxy_glWindowPos2iARB_dispatch_table_rewrite_ptr, /* glWindowPos2iARB */ + epoxy_glWindowPos2iMESA_dispatch_table_rewrite_ptr, /* glWindowPos2iMESA */ + epoxy_glWindowPos2iv_dispatch_table_rewrite_ptr, /* glWindowPos2iv */ + epoxy_glWindowPos2ivARB_dispatch_table_rewrite_ptr, /* glWindowPos2ivARB */ + epoxy_glWindowPos2ivMESA_dispatch_table_rewrite_ptr, /* glWindowPos2ivMESA */ + epoxy_glWindowPos2s_dispatch_table_rewrite_ptr, /* glWindowPos2s */ + epoxy_glWindowPos2sARB_dispatch_table_rewrite_ptr, /* glWindowPos2sARB */ + epoxy_glWindowPos2sMESA_dispatch_table_rewrite_ptr, /* glWindowPos2sMESA */ + epoxy_glWindowPos2sv_dispatch_table_rewrite_ptr, /* glWindowPos2sv */ + epoxy_glWindowPos2svARB_dispatch_table_rewrite_ptr, /* glWindowPos2svARB */ + epoxy_glWindowPos2svMESA_dispatch_table_rewrite_ptr, /* glWindowPos2svMESA */ + epoxy_glWindowPos3d_dispatch_table_rewrite_ptr, /* glWindowPos3d */ + epoxy_glWindowPos3dARB_dispatch_table_rewrite_ptr, /* glWindowPos3dARB */ + epoxy_glWindowPos3dMESA_dispatch_table_rewrite_ptr, /* glWindowPos3dMESA */ + epoxy_glWindowPos3dv_dispatch_table_rewrite_ptr, /* glWindowPos3dv */ + epoxy_glWindowPos3dvARB_dispatch_table_rewrite_ptr, /* glWindowPos3dvARB */ + epoxy_glWindowPos3dvMESA_dispatch_table_rewrite_ptr, /* glWindowPos3dvMESA */ + epoxy_glWindowPos3f_dispatch_table_rewrite_ptr, /* glWindowPos3f */ + epoxy_glWindowPos3fARB_dispatch_table_rewrite_ptr, /* glWindowPos3fARB */ + epoxy_glWindowPos3fMESA_dispatch_table_rewrite_ptr, /* glWindowPos3fMESA */ + epoxy_glWindowPos3fv_dispatch_table_rewrite_ptr, /* glWindowPos3fv */ + epoxy_glWindowPos3fvARB_dispatch_table_rewrite_ptr, /* glWindowPos3fvARB */ + epoxy_glWindowPos3fvMESA_dispatch_table_rewrite_ptr, /* glWindowPos3fvMESA */ + epoxy_glWindowPos3i_dispatch_table_rewrite_ptr, /* glWindowPos3i */ + epoxy_glWindowPos3iARB_dispatch_table_rewrite_ptr, /* glWindowPos3iARB */ + epoxy_glWindowPos3iMESA_dispatch_table_rewrite_ptr, /* glWindowPos3iMESA */ + epoxy_glWindowPos3iv_dispatch_table_rewrite_ptr, /* glWindowPos3iv */ + epoxy_glWindowPos3ivARB_dispatch_table_rewrite_ptr, /* glWindowPos3ivARB */ + epoxy_glWindowPos3ivMESA_dispatch_table_rewrite_ptr, /* glWindowPos3ivMESA */ + epoxy_glWindowPos3s_dispatch_table_rewrite_ptr, /* glWindowPos3s */ + epoxy_glWindowPos3sARB_dispatch_table_rewrite_ptr, /* glWindowPos3sARB */ + epoxy_glWindowPos3sMESA_dispatch_table_rewrite_ptr, /* glWindowPos3sMESA */ + epoxy_glWindowPos3sv_dispatch_table_rewrite_ptr, /* glWindowPos3sv */ + epoxy_glWindowPos3svARB_dispatch_table_rewrite_ptr, /* glWindowPos3svARB */ + epoxy_glWindowPos3svMESA_dispatch_table_rewrite_ptr, /* glWindowPos3svMESA */ + epoxy_glWindowPos4dMESA_dispatch_table_rewrite_ptr, /* glWindowPos4dMESA */ + epoxy_glWindowPos4dvMESA_dispatch_table_rewrite_ptr, /* glWindowPos4dvMESA */ + epoxy_glWindowPos4fMESA_dispatch_table_rewrite_ptr, /* glWindowPos4fMESA */ + epoxy_glWindowPos4fvMESA_dispatch_table_rewrite_ptr, /* glWindowPos4fvMESA */ + epoxy_glWindowPos4iMESA_dispatch_table_rewrite_ptr, /* glWindowPos4iMESA */ + epoxy_glWindowPos4ivMESA_dispatch_table_rewrite_ptr, /* glWindowPos4ivMESA */ + epoxy_glWindowPos4sMESA_dispatch_table_rewrite_ptr, /* glWindowPos4sMESA */ + epoxy_glWindowPos4svMESA_dispatch_table_rewrite_ptr, /* glWindowPos4svMESA */ + epoxy_glWriteMaskEXT_dispatch_table_rewrite_ptr, /* glWriteMaskEXT */ +}; + +uint32_t gl_tls_index; +uint32_t gl_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(gl_tls_index); +} + +void +gl_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +gl_switch_to_dispatch_table(void) +{ + epoxy_glAccum = epoxy_glAccum_dispatch_table_thunk; + epoxy_glAccumxOES = epoxy_glAccumxOES_dispatch_table_thunk; + epoxy_glActiveProgramEXT = epoxy_glActiveProgramEXT_dispatch_table_thunk; + epoxy_glActiveShaderProgram = epoxy_glActiveShaderProgram_dispatch_table_thunk; + epoxy_glActiveShaderProgramEXT = epoxy_glActiveShaderProgramEXT_dispatch_table_thunk; + epoxy_glActiveStencilFaceEXT = epoxy_glActiveStencilFaceEXT_dispatch_table_thunk; + epoxy_glActiveTexture = epoxy_glActiveTexture_dispatch_table_thunk; + epoxy_glActiveTextureARB = epoxy_glActiveTextureARB_dispatch_table_thunk; + epoxy_glActiveVaryingNV = epoxy_glActiveVaryingNV_dispatch_table_thunk; + epoxy_glAlphaFragmentOp1ATI = epoxy_glAlphaFragmentOp1ATI_dispatch_table_thunk; + epoxy_glAlphaFragmentOp2ATI = epoxy_glAlphaFragmentOp2ATI_dispatch_table_thunk; + epoxy_glAlphaFragmentOp3ATI = epoxy_glAlphaFragmentOp3ATI_dispatch_table_thunk; + epoxy_glAlphaFunc = epoxy_glAlphaFunc_dispatch_table_thunk; + epoxy_glAlphaFuncQCOM = epoxy_glAlphaFuncQCOM_dispatch_table_thunk; + epoxy_glAlphaFuncx = epoxy_glAlphaFuncx_dispatch_table_thunk; + epoxy_glAlphaFuncxOES = epoxy_glAlphaFuncxOES_dispatch_table_thunk; + epoxy_glApplyFramebufferAttachmentCMAAINTEL = epoxy_glApplyFramebufferAttachmentCMAAINTEL_dispatch_table_thunk; + epoxy_glApplyTextureEXT = epoxy_glApplyTextureEXT_dispatch_table_thunk; + epoxy_glAreProgramsResidentNV = epoxy_glAreProgramsResidentNV_dispatch_table_thunk; + epoxy_glAreTexturesResident = epoxy_glAreTexturesResident_dispatch_table_thunk; + epoxy_glAreTexturesResidentEXT = epoxy_glAreTexturesResidentEXT_dispatch_table_thunk; + epoxy_glArrayElement = epoxy_glArrayElement_dispatch_table_thunk; + epoxy_glArrayElementEXT = epoxy_glArrayElementEXT_dispatch_table_thunk; + epoxy_glArrayObjectATI = epoxy_glArrayObjectATI_dispatch_table_thunk; + epoxy_glAsyncMarkerSGIX = epoxy_glAsyncMarkerSGIX_dispatch_table_thunk; + epoxy_glAttachObjectARB = epoxy_glAttachObjectARB_dispatch_table_thunk; + epoxy_glAttachShader = epoxy_glAttachShader_dispatch_table_thunk; + epoxy_glBegin_unwrapped = epoxy_glBegin_unwrapped_dispatch_table_thunk; + epoxy_glBeginConditionalRender = epoxy_glBeginConditionalRender_dispatch_table_thunk; + epoxy_glBeginConditionalRenderNV = epoxy_glBeginConditionalRenderNV_dispatch_table_thunk; + epoxy_glBeginConditionalRenderNVX = epoxy_glBeginConditionalRenderNVX_dispatch_table_thunk; + epoxy_glBeginFragmentShaderATI = epoxy_glBeginFragmentShaderATI_dispatch_table_thunk; + epoxy_glBeginOcclusionQueryNV = epoxy_glBeginOcclusionQueryNV_dispatch_table_thunk; + epoxy_glBeginPerfMonitorAMD = epoxy_glBeginPerfMonitorAMD_dispatch_table_thunk; + epoxy_glBeginPerfQueryINTEL = epoxy_glBeginPerfQueryINTEL_dispatch_table_thunk; + epoxy_glBeginQuery = epoxy_glBeginQuery_dispatch_table_thunk; + epoxy_glBeginQueryARB = epoxy_glBeginQueryARB_dispatch_table_thunk; + epoxy_glBeginQueryEXT = epoxy_glBeginQueryEXT_dispatch_table_thunk; + epoxy_glBeginQueryIndexed = epoxy_glBeginQueryIndexed_dispatch_table_thunk; + epoxy_glBeginTransformFeedback = epoxy_glBeginTransformFeedback_dispatch_table_thunk; + epoxy_glBeginTransformFeedbackEXT = epoxy_glBeginTransformFeedbackEXT_dispatch_table_thunk; + epoxy_glBeginTransformFeedbackNV = epoxy_glBeginTransformFeedbackNV_dispatch_table_thunk; + epoxy_glBeginVertexShaderEXT = epoxy_glBeginVertexShaderEXT_dispatch_table_thunk; + epoxy_glBeginVideoCaptureNV = epoxy_glBeginVideoCaptureNV_dispatch_table_thunk; + epoxy_glBindAttribLocation = epoxy_glBindAttribLocation_dispatch_table_thunk; + epoxy_glBindAttribLocationARB = epoxy_glBindAttribLocationARB_dispatch_table_thunk; + epoxy_glBindBuffer = epoxy_glBindBuffer_dispatch_table_thunk; + epoxy_glBindBufferARB = epoxy_glBindBufferARB_dispatch_table_thunk; + epoxy_glBindBufferBase = epoxy_glBindBufferBase_dispatch_table_thunk; + epoxy_glBindBufferBaseEXT = epoxy_glBindBufferBaseEXT_dispatch_table_thunk; + epoxy_glBindBufferBaseNV = epoxy_glBindBufferBaseNV_dispatch_table_thunk; + epoxy_glBindBufferOffsetEXT = epoxy_glBindBufferOffsetEXT_dispatch_table_thunk; + epoxy_glBindBufferOffsetNV = epoxy_glBindBufferOffsetNV_dispatch_table_thunk; + epoxy_glBindBufferRange = epoxy_glBindBufferRange_dispatch_table_thunk; + epoxy_glBindBufferRangeEXT = epoxy_glBindBufferRangeEXT_dispatch_table_thunk; + epoxy_glBindBufferRangeNV = epoxy_glBindBufferRangeNV_dispatch_table_thunk; + epoxy_glBindBuffersBase = epoxy_glBindBuffersBase_dispatch_table_thunk; + epoxy_glBindBuffersRange = epoxy_glBindBuffersRange_dispatch_table_thunk; + epoxy_glBindFragDataLocation = epoxy_glBindFragDataLocation_dispatch_table_thunk; + epoxy_glBindFragDataLocationEXT = epoxy_glBindFragDataLocationEXT_dispatch_table_thunk; + epoxy_glBindFragDataLocationIndexed = epoxy_glBindFragDataLocationIndexed_dispatch_table_thunk; + epoxy_glBindFragDataLocationIndexedEXT = epoxy_glBindFragDataLocationIndexedEXT_dispatch_table_thunk; + epoxy_glBindFragmentShaderATI = epoxy_glBindFragmentShaderATI_dispatch_table_thunk; + epoxy_glBindFramebuffer = epoxy_glBindFramebuffer_dispatch_table_thunk; + epoxy_glBindFramebufferEXT = epoxy_glBindFramebufferEXT_dispatch_table_thunk; + epoxy_glBindFramebufferOES = epoxy_glBindFramebufferOES_dispatch_table_thunk; + epoxy_glBindImageTexture = epoxy_glBindImageTexture_dispatch_table_thunk; + epoxy_glBindImageTextureEXT = epoxy_glBindImageTextureEXT_dispatch_table_thunk; + epoxy_glBindImageTextures = epoxy_glBindImageTextures_dispatch_table_thunk; + epoxy_glBindLightParameterEXT = epoxy_glBindLightParameterEXT_dispatch_table_thunk; + epoxy_glBindMaterialParameterEXT = epoxy_glBindMaterialParameterEXT_dispatch_table_thunk; + epoxy_glBindMultiTextureEXT = epoxy_glBindMultiTextureEXT_dispatch_table_thunk; + epoxy_glBindParameterEXT = epoxy_glBindParameterEXT_dispatch_table_thunk; + epoxy_glBindProgramARB = epoxy_glBindProgramARB_dispatch_table_thunk; + epoxy_glBindProgramNV = epoxy_glBindProgramNV_dispatch_table_thunk; + epoxy_glBindProgramPipeline = epoxy_glBindProgramPipeline_dispatch_table_thunk; + epoxy_glBindProgramPipelineEXT = epoxy_glBindProgramPipelineEXT_dispatch_table_thunk; + epoxy_glBindRenderbuffer = epoxy_glBindRenderbuffer_dispatch_table_thunk; + epoxy_glBindRenderbufferEXT = epoxy_glBindRenderbufferEXT_dispatch_table_thunk; + epoxy_glBindRenderbufferOES = epoxy_glBindRenderbufferOES_dispatch_table_thunk; + epoxy_glBindSampler = epoxy_glBindSampler_dispatch_table_thunk; + epoxy_glBindSamplers = epoxy_glBindSamplers_dispatch_table_thunk; + epoxy_glBindTexGenParameterEXT = epoxy_glBindTexGenParameterEXT_dispatch_table_thunk; + epoxy_glBindTexture = epoxy_glBindTexture_dispatch_table_thunk; + epoxy_glBindTextureEXT = epoxy_glBindTextureEXT_dispatch_table_thunk; + epoxy_glBindTextureUnit = epoxy_glBindTextureUnit_dispatch_table_thunk; + epoxy_glBindTextureUnitParameterEXT = epoxy_glBindTextureUnitParameterEXT_dispatch_table_thunk; + epoxy_glBindTextures = epoxy_glBindTextures_dispatch_table_thunk; + epoxy_glBindTransformFeedback = epoxy_glBindTransformFeedback_dispatch_table_thunk; + epoxy_glBindTransformFeedbackNV = epoxy_glBindTransformFeedbackNV_dispatch_table_thunk; + epoxy_glBindVertexArray = epoxy_glBindVertexArray_dispatch_table_thunk; + epoxy_glBindVertexArrayAPPLE = epoxy_glBindVertexArrayAPPLE_dispatch_table_thunk; + epoxy_glBindVertexArrayOES = epoxy_glBindVertexArrayOES_dispatch_table_thunk; + epoxy_glBindVertexBuffer = epoxy_glBindVertexBuffer_dispatch_table_thunk; + epoxy_glBindVertexBuffers = epoxy_glBindVertexBuffers_dispatch_table_thunk; + epoxy_glBindVertexShaderEXT = epoxy_glBindVertexShaderEXT_dispatch_table_thunk; + epoxy_glBindVideoCaptureStreamBufferNV = epoxy_glBindVideoCaptureStreamBufferNV_dispatch_table_thunk; + epoxy_glBindVideoCaptureStreamTextureNV = epoxy_glBindVideoCaptureStreamTextureNV_dispatch_table_thunk; + epoxy_glBinormal3bEXT = epoxy_glBinormal3bEXT_dispatch_table_thunk; + epoxy_glBinormal3bvEXT = epoxy_glBinormal3bvEXT_dispatch_table_thunk; + epoxy_glBinormal3dEXT = epoxy_glBinormal3dEXT_dispatch_table_thunk; + epoxy_glBinormal3dvEXT = epoxy_glBinormal3dvEXT_dispatch_table_thunk; + epoxy_glBinormal3fEXT = epoxy_glBinormal3fEXT_dispatch_table_thunk; + epoxy_glBinormal3fvEXT = epoxy_glBinormal3fvEXT_dispatch_table_thunk; + epoxy_glBinormal3iEXT = epoxy_glBinormal3iEXT_dispatch_table_thunk; + epoxy_glBinormal3ivEXT = epoxy_glBinormal3ivEXT_dispatch_table_thunk; + epoxy_glBinormal3sEXT = epoxy_glBinormal3sEXT_dispatch_table_thunk; + epoxy_glBinormal3svEXT = epoxy_glBinormal3svEXT_dispatch_table_thunk; + epoxy_glBinormalPointerEXT = epoxy_glBinormalPointerEXT_dispatch_table_thunk; + epoxy_glBitmap = epoxy_glBitmap_dispatch_table_thunk; + epoxy_glBitmapxOES = epoxy_glBitmapxOES_dispatch_table_thunk; + epoxy_glBlendBarrier = epoxy_glBlendBarrier_dispatch_table_thunk; + epoxy_glBlendBarrierKHR = epoxy_glBlendBarrierKHR_dispatch_table_thunk; + epoxy_glBlendBarrierNV = epoxy_glBlendBarrierNV_dispatch_table_thunk; + epoxy_glBlendColor = epoxy_glBlendColor_dispatch_table_thunk; + epoxy_glBlendColorEXT = epoxy_glBlendColorEXT_dispatch_table_thunk; + epoxy_glBlendColorxOES = epoxy_glBlendColorxOES_dispatch_table_thunk; + epoxy_glBlendEquation = epoxy_glBlendEquation_dispatch_table_thunk; + epoxy_glBlendEquationEXT = epoxy_glBlendEquationEXT_dispatch_table_thunk; + epoxy_glBlendEquationIndexedAMD = epoxy_glBlendEquationIndexedAMD_dispatch_table_thunk; + epoxy_glBlendEquationOES = epoxy_glBlendEquationOES_dispatch_table_thunk; + epoxy_glBlendEquationSeparate = epoxy_glBlendEquationSeparate_dispatch_table_thunk; + epoxy_glBlendEquationSeparateEXT = epoxy_glBlendEquationSeparateEXT_dispatch_table_thunk; + epoxy_glBlendEquationSeparateIndexedAMD = epoxy_glBlendEquationSeparateIndexedAMD_dispatch_table_thunk; + epoxy_glBlendEquationSeparateOES = epoxy_glBlendEquationSeparateOES_dispatch_table_thunk; + epoxy_glBlendEquationSeparatei = epoxy_glBlendEquationSeparatei_dispatch_table_thunk; + epoxy_glBlendEquationSeparateiARB = epoxy_glBlendEquationSeparateiARB_dispatch_table_thunk; + epoxy_glBlendEquationSeparateiEXT = epoxy_glBlendEquationSeparateiEXT_dispatch_table_thunk; + epoxy_glBlendEquationSeparateiOES = epoxy_glBlendEquationSeparateiOES_dispatch_table_thunk; + epoxy_glBlendEquationi = epoxy_glBlendEquationi_dispatch_table_thunk; + epoxy_glBlendEquationiARB = epoxy_glBlendEquationiARB_dispatch_table_thunk; + epoxy_glBlendEquationiEXT = epoxy_glBlendEquationiEXT_dispatch_table_thunk; + epoxy_glBlendEquationiOES = epoxy_glBlendEquationiOES_dispatch_table_thunk; + epoxy_glBlendFunc = epoxy_glBlendFunc_dispatch_table_thunk; + epoxy_glBlendFuncIndexedAMD = epoxy_glBlendFuncIndexedAMD_dispatch_table_thunk; + epoxy_glBlendFuncSeparate = epoxy_glBlendFuncSeparate_dispatch_table_thunk; + epoxy_glBlendFuncSeparateEXT = epoxy_glBlendFuncSeparateEXT_dispatch_table_thunk; + epoxy_glBlendFuncSeparateINGR = epoxy_glBlendFuncSeparateINGR_dispatch_table_thunk; + epoxy_glBlendFuncSeparateIndexedAMD = epoxy_glBlendFuncSeparateIndexedAMD_dispatch_table_thunk; + epoxy_glBlendFuncSeparateOES = epoxy_glBlendFuncSeparateOES_dispatch_table_thunk; + epoxy_glBlendFuncSeparatei = epoxy_glBlendFuncSeparatei_dispatch_table_thunk; + epoxy_glBlendFuncSeparateiARB = epoxy_glBlendFuncSeparateiARB_dispatch_table_thunk; + epoxy_glBlendFuncSeparateiEXT = epoxy_glBlendFuncSeparateiEXT_dispatch_table_thunk; + epoxy_glBlendFuncSeparateiOES = epoxy_glBlendFuncSeparateiOES_dispatch_table_thunk; + epoxy_glBlendFunci = epoxy_glBlendFunci_dispatch_table_thunk; + epoxy_glBlendFunciARB = epoxy_glBlendFunciARB_dispatch_table_thunk; + epoxy_glBlendFunciEXT = epoxy_glBlendFunciEXT_dispatch_table_thunk; + epoxy_glBlendFunciOES = epoxy_glBlendFunciOES_dispatch_table_thunk; + epoxy_glBlendParameteriNV = epoxy_glBlendParameteriNV_dispatch_table_thunk; + epoxy_glBlitFramebuffer = epoxy_glBlitFramebuffer_dispatch_table_thunk; + epoxy_glBlitFramebufferANGLE = epoxy_glBlitFramebufferANGLE_dispatch_table_thunk; + epoxy_glBlitFramebufferEXT = epoxy_glBlitFramebufferEXT_dispatch_table_thunk; + epoxy_glBlitFramebufferNV = epoxy_glBlitFramebufferNV_dispatch_table_thunk; + epoxy_glBlitNamedFramebuffer = epoxy_glBlitNamedFramebuffer_dispatch_table_thunk; + epoxy_glBufferAddressRangeNV = epoxy_glBufferAddressRangeNV_dispatch_table_thunk; + epoxy_glBufferData = epoxy_glBufferData_dispatch_table_thunk; + epoxy_glBufferDataARB = epoxy_glBufferDataARB_dispatch_table_thunk; + epoxy_glBufferPageCommitmentARB = epoxy_glBufferPageCommitmentARB_dispatch_table_thunk; + epoxy_glBufferParameteriAPPLE = epoxy_glBufferParameteriAPPLE_dispatch_table_thunk; + epoxy_glBufferStorage = epoxy_glBufferStorage_dispatch_table_thunk; + epoxy_glBufferStorageEXT = epoxy_glBufferStorageEXT_dispatch_table_thunk; + epoxy_glBufferSubData = epoxy_glBufferSubData_dispatch_table_thunk; + epoxy_glBufferSubDataARB = epoxy_glBufferSubDataARB_dispatch_table_thunk; + epoxy_glCallCommandListNV = epoxy_glCallCommandListNV_dispatch_table_thunk; + epoxy_glCallList = epoxy_glCallList_dispatch_table_thunk; + epoxy_glCallLists = epoxy_glCallLists_dispatch_table_thunk; + epoxy_glCheckFramebufferStatus = epoxy_glCheckFramebufferStatus_dispatch_table_thunk; + epoxy_glCheckFramebufferStatusEXT = epoxy_glCheckFramebufferStatusEXT_dispatch_table_thunk; + epoxy_glCheckFramebufferStatusOES = epoxy_glCheckFramebufferStatusOES_dispatch_table_thunk; + epoxy_glCheckNamedFramebufferStatus = epoxy_glCheckNamedFramebufferStatus_dispatch_table_thunk; + epoxy_glCheckNamedFramebufferStatusEXT = epoxy_glCheckNamedFramebufferStatusEXT_dispatch_table_thunk; + epoxy_glClampColor = epoxy_glClampColor_dispatch_table_thunk; + epoxy_glClampColorARB = epoxy_glClampColorARB_dispatch_table_thunk; + epoxy_glClear = epoxy_glClear_dispatch_table_thunk; + epoxy_glClearAccum = epoxy_glClearAccum_dispatch_table_thunk; + epoxy_glClearAccumxOES = epoxy_glClearAccumxOES_dispatch_table_thunk; + epoxy_glClearBufferData = epoxy_glClearBufferData_dispatch_table_thunk; + epoxy_glClearBufferSubData = epoxy_glClearBufferSubData_dispatch_table_thunk; + epoxy_glClearBufferfi = epoxy_glClearBufferfi_dispatch_table_thunk; + epoxy_glClearBufferfv = epoxy_glClearBufferfv_dispatch_table_thunk; + epoxy_glClearBufferiv = epoxy_glClearBufferiv_dispatch_table_thunk; + epoxy_glClearBufferuiv = epoxy_glClearBufferuiv_dispatch_table_thunk; + epoxy_glClearColor = epoxy_glClearColor_dispatch_table_thunk; + epoxy_glClearColorIiEXT = epoxy_glClearColorIiEXT_dispatch_table_thunk; + epoxy_glClearColorIuiEXT = epoxy_glClearColorIuiEXT_dispatch_table_thunk; + epoxy_glClearColorx = epoxy_glClearColorx_dispatch_table_thunk; + epoxy_glClearColorxOES = epoxy_glClearColorxOES_dispatch_table_thunk; + epoxy_glClearDepth = epoxy_glClearDepth_dispatch_table_thunk; + epoxy_glClearDepthdNV = epoxy_glClearDepthdNV_dispatch_table_thunk; + epoxy_glClearDepthf = epoxy_glClearDepthf_dispatch_table_thunk; + epoxy_glClearDepthfOES = epoxy_glClearDepthfOES_dispatch_table_thunk; + epoxy_glClearDepthx = epoxy_glClearDepthx_dispatch_table_thunk; + epoxy_glClearDepthxOES = epoxy_glClearDepthxOES_dispatch_table_thunk; + epoxy_glClearIndex = epoxy_glClearIndex_dispatch_table_thunk; + epoxy_glClearNamedBufferData = epoxy_glClearNamedBufferData_dispatch_table_thunk; + epoxy_glClearNamedBufferDataEXT = epoxy_glClearNamedBufferDataEXT_dispatch_table_thunk; + epoxy_glClearNamedBufferSubData = epoxy_glClearNamedBufferSubData_dispatch_table_thunk; + epoxy_glClearNamedBufferSubDataEXT = epoxy_glClearNamedBufferSubDataEXT_dispatch_table_thunk; + epoxy_glClearNamedFramebufferfi = epoxy_glClearNamedFramebufferfi_dispatch_table_thunk; + epoxy_glClearNamedFramebufferfv = epoxy_glClearNamedFramebufferfv_dispatch_table_thunk; + epoxy_glClearNamedFramebufferiv = epoxy_glClearNamedFramebufferiv_dispatch_table_thunk; + epoxy_glClearNamedFramebufferuiv = epoxy_glClearNamedFramebufferuiv_dispatch_table_thunk; + epoxy_glClearStencil = epoxy_glClearStencil_dispatch_table_thunk; + epoxy_glClearTexImage = epoxy_glClearTexImage_dispatch_table_thunk; + epoxy_glClearTexSubImage = epoxy_glClearTexSubImage_dispatch_table_thunk; + epoxy_glClientActiveTexture = epoxy_glClientActiveTexture_dispatch_table_thunk; + epoxy_glClientActiveTextureARB = epoxy_glClientActiveTextureARB_dispatch_table_thunk; + epoxy_glClientActiveVertexStreamATI = epoxy_glClientActiveVertexStreamATI_dispatch_table_thunk; + epoxy_glClientAttribDefaultEXT = epoxy_glClientAttribDefaultEXT_dispatch_table_thunk; + epoxy_glClientWaitSync = epoxy_glClientWaitSync_dispatch_table_thunk; + epoxy_glClientWaitSyncAPPLE = epoxy_glClientWaitSyncAPPLE_dispatch_table_thunk; + epoxy_glClipControl = epoxy_glClipControl_dispatch_table_thunk; + epoxy_glClipPlane = epoxy_glClipPlane_dispatch_table_thunk; + epoxy_glClipPlanef = epoxy_glClipPlanef_dispatch_table_thunk; + epoxy_glClipPlanefIMG = epoxy_glClipPlanefIMG_dispatch_table_thunk; + epoxy_glClipPlanefOES = epoxy_glClipPlanefOES_dispatch_table_thunk; + epoxy_glClipPlanex = epoxy_glClipPlanex_dispatch_table_thunk; + epoxy_glClipPlanexIMG = epoxy_glClipPlanexIMG_dispatch_table_thunk; + epoxy_glClipPlanexOES = epoxy_glClipPlanexOES_dispatch_table_thunk; + epoxy_glColor3b = epoxy_glColor3b_dispatch_table_thunk; + epoxy_glColor3bv = epoxy_glColor3bv_dispatch_table_thunk; + epoxy_glColor3d = epoxy_glColor3d_dispatch_table_thunk; + epoxy_glColor3dv = epoxy_glColor3dv_dispatch_table_thunk; + epoxy_glColor3f = epoxy_glColor3f_dispatch_table_thunk; + epoxy_glColor3fVertex3fSUN = epoxy_glColor3fVertex3fSUN_dispatch_table_thunk; + epoxy_glColor3fVertex3fvSUN = epoxy_glColor3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glColor3fv = epoxy_glColor3fv_dispatch_table_thunk; + epoxy_glColor3hNV = epoxy_glColor3hNV_dispatch_table_thunk; + epoxy_glColor3hvNV = epoxy_glColor3hvNV_dispatch_table_thunk; + epoxy_glColor3i = epoxy_glColor3i_dispatch_table_thunk; + epoxy_glColor3iv = epoxy_glColor3iv_dispatch_table_thunk; + epoxy_glColor3s = epoxy_glColor3s_dispatch_table_thunk; + epoxy_glColor3sv = epoxy_glColor3sv_dispatch_table_thunk; + epoxy_glColor3ub = epoxy_glColor3ub_dispatch_table_thunk; + epoxy_glColor3ubv = epoxy_glColor3ubv_dispatch_table_thunk; + epoxy_glColor3ui = epoxy_glColor3ui_dispatch_table_thunk; + epoxy_glColor3uiv = epoxy_glColor3uiv_dispatch_table_thunk; + epoxy_glColor3us = epoxy_glColor3us_dispatch_table_thunk; + epoxy_glColor3usv = epoxy_glColor3usv_dispatch_table_thunk; + epoxy_glColor3xOES = epoxy_glColor3xOES_dispatch_table_thunk; + epoxy_glColor3xvOES = epoxy_glColor3xvOES_dispatch_table_thunk; + epoxy_glColor4b = epoxy_glColor4b_dispatch_table_thunk; + epoxy_glColor4bv = epoxy_glColor4bv_dispatch_table_thunk; + epoxy_glColor4d = epoxy_glColor4d_dispatch_table_thunk; + epoxy_glColor4dv = epoxy_glColor4dv_dispatch_table_thunk; + epoxy_glColor4f = epoxy_glColor4f_dispatch_table_thunk; + epoxy_glColor4fNormal3fVertex3fSUN = epoxy_glColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glColor4fNormal3fVertex3fvSUN = epoxy_glColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glColor4fv = epoxy_glColor4fv_dispatch_table_thunk; + epoxy_glColor4hNV = epoxy_glColor4hNV_dispatch_table_thunk; + epoxy_glColor4hvNV = epoxy_glColor4hvNV_dispatch_table_thunk; + epoxy_glColor4i = epoxy_glColor4i_dispatch_table_thunk; + epoxy_glColor4iv = epoxy_glColor4iv_dispatch_table_thunk; + epoxy_glColor4s = epoxy_glColor4s_dispatch_table_thunk; + epoxy_glColor4sv = epoxy_glColor4sv_dispatch_table_thunk; + epoxy_glColor4ub = epoxy_glColor4ub_dispatch_table_thunk; + epoxy_glColor4ubVertex2fSUN = epoxy_glColor4ubVertex2fSUN_dispatch_table_thunk; + epoxy_glColor4ubVertex2fvSUN = epoxy_glColor4ubVertex2fvSUN_dispatch_table_thunk; + epoxy_glColor4ubVertex3fSUN = epoxy_glColor4ubVertex3fSUN_dispatch_table_thunk; + epoxy_glColor4ubVertex3fvSUN = epoxy_glColor4ubVertex3fvSUN_dispatch_table_thunk; + epoxy_glColor4ubv = epoxy_glColor4ubv_dispatch_table_thunk; + epoxy_glColor4ui = epoxy_glColor4ui_dispatch_table_thunk; + epoxy_glColor4uiv = epoxy_glColor4uiv_dispatch_table_thunk; + epoxy_glColor4us = epoxy_glColor4us_dispatch_table_thunk; + epoxy_glColor4usv = epoxy_glColor4usv_dispatch_table_thunk; + epoxy_glColor4x = epoxy_glColor4x_dispatch_table_thunk; + epoxy_glColor4xOES = epoxy_glColor4xOES_dispatch_table_thunk; + epoxy_glColor4xvOES = epoxy_glColor4xvOES_dispatch_table_thunk; + epoxy_glColorFormatNV = epoxy_glColorFormatNV_dispatch_table_thunk; + epoxy_glColorFragmentOp1ATI = epoxy_glColorFragmentOp1ATI_dispatch_table_thunk; + epoxy_glColorFragmentOp2ATI = epoxy_glColorFragmentOp2ATI_dispatch_table_thunk; + epoxy_glColorFragmentOp3ATI = epoxy_glColorFragmentOp3ATI_dispatch_table_thunk; + epoxy_glColorMask = epoxy_glColorMask_dispatch_table_thunk; + epoxy_glColorMaskIndexedEXT = epoxy_glColorMaskIndexedEXT_dispatch_table_thunk; + epoxy_glColorMaski = epoxy_glColorMaski_dispatch_table_thunk; + epoxy_glColorMaskiEXT = epoxy_glColorMaskiEXT_dispatch_table_thunk; + epoxy_glColorMaskiOES = epoxy_glColorMaskiOES_dispatch_table_thunk; + epoxy_glColorMaterial = epoxy_glColorMaterial_dispatch_table_thunk; + epoxy_glColorP3ui = epoxy_glColorP3ui_dispatch_table_thunk; + epoxy_glColorP3uiv = epoxy_glColorP3uiv_dispatch_table_thunk; + epoxy_glColorP4ui = epoxy_glColorP4ui_dispatch_table_thunk; + epoxy_glColorP4uiv = epoxy_glColorP4uiv_dispatch_table_thunk; + epoxy_glColorPointer = epoxy_glColorPointer_dispatch_table_thunk; + epoxy_glColorPointerEXT = epoxy_glColorPointerEXT_dispatch_table_thunk; + epoxy_glColorPointerListIBM = epoxy_glColorPointerListIBM_dispatch_table_thunk; + epoxy_glColorPointervINTEL = epoxy_glColorPointervINTEL_dispatch_table_thunk; + epoxy_glColorSubTable = epoxy_glColorSubTable_dispatch_table_thunk; + epoxy_glColorSubTableEXT = epoxy_glColorSubTableEXT_dispatch_table_thunk; + epoxy_glColorTable = epoxy_glColorTable_dispatch_table_thunk; + epoxy_glColorTableEXT = epoxy_glColorTableEXT_dispatch_table_thunk; + epoxy_glColorTableParameterfv = epoxy_glColorTableParameterfv_dispatch_table_thunk; + epoxy_glColorTableParameterfvSGI = epoxy_glColorTableParameterfvSGI_dispatch_table_thunk; + epoxy_glColorTableParameteriv = epoxy_glColorTableParameteriv_dispatch_table_thunk; + epoxy_glColorTableParameterivSGI = epoxy_glColorTableParameterivSGI_dispatch_table_thunk; + epoxy_glColorTableSGI = epoxy_glColorTableSGI_dispatch_table_thunk; + epoxy_glCombinerInputNV = epoxy_glCombinerInputNV_dispatch_table_thunk; + epoxy_glCombinerOutputNV = epoxy_glCombinerOutputNV_dispatch_table_thunk; + epoxy_glCombinerParameterfNV = epoxy_glCombinerParameterfNV_dispatch_table_thunk; + epoxy_glCombinerParameterfvNV = epoxy_glCombinerParameterfvNV_dispatch_table_thunk; + epoxy_glCombinerParameteriNV = epoxy_glCombinerParameteriNV_dispatch_table_thunk; + epoxy_glCombinerParameterivNV = epoxy_glCombinerParameterivNV_dispatch_table_thunk; + epoxy_glCombinerStageParameterfvNV = epoxy_glCombinerStageParameterfvNV_dispatch_table_thunk; + epoxy_glCommandListSegmentsNV = epoxy_glCommandListSegmentsNV_dispatch_table_thunk; + epoxy_glCompileCommandListNV = epoxy_glCompileCommandListNV_dispatch_table_thunk; + epoxy_glCompileShader = epoxy_glCompileShader_dispatch_table_thunk; + epoxy_glCompileShaderARB = epoxy_glCompileShaderARB_dispatch_table_thunk; + epoxy_glCompileShaderIncludeARB = epoxy_glCompileShaderIncludeARB_dispatch_table_thunk; + epoxy_glCompressedMultiTexImage1DEXT = epoxy_glCompressedMultiTexImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexImage2DEXT = epoxy_glCompressedMultiTexImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexImage3DEXT = epoxy_glCompressedMultiTexImage3DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexSubImage1DEXT = epoxy_glCompressedMultiTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexSubImage2DEXT = epoxy_glCompressedMultiTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedMultiTexSubImage3DEXT = epoxy_glCompressedMultiTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glCompressedTexImage1D = epoxy_glCompressedTexImage1D_dispatch_table_thunk; + epoxy_glCompressedTexImage1DARB = epoxy_glCompressedTexImage1DARB_dispatch_table_thunk; + epoxy_glCompressedTexImage2D = epoxy_glCompressedTexImage2D_dispatch_table_thunk; + epoxy_glCompressedTexImage2DARB = epoxy_glCompressedTexImage2DARB_dispatch_table_thunk; + epoxy_glCompressedTexImage3D = epoxy_glCompressedTexImage3D_dispatch_table_thunk; + epoxy_glCompressedTexImage3DARB = epoxy_glCompressedTexImage3DARB_dispatch_table_thunk; + epoxy_glCompressedTexImage3DOES = epoxy_glCompressedTexImage3DOES_dispatch_table_thunk; + epoxy_glCompressedTexSubImage1D = epoxy_glCompressedTexSubImage1D_dispatch_table_thunk; + epoxy_glCompressedTexSubImage1DARB = epoxy_glCompressedTexSubImage1DARB_dispatch_table_thunk; + epoxy_glCompressedTexSubImage2D = epoxy_glCompressedTexSubImage2D_dispatch_table_thunk; + epoxy_glCompressedTexSubImage2DARB = epoxy_glCompressedTexSubImage2DARB_dispatch_table_thunk; + epoxy_glCompressedTexSubImage3D = epoxy_glCompressedTexSubImage3D_dispatch_table_thunk; + epoxy_glCompressedTexSubImage3DARB = epoxy_glCompressedTexSubImage3DARB_dispatch_table_thunk; + epoxy_glCompressedTexSubImage3DOES = epoxy_glCompressedTexSubImage3DOES_dispatch_table_thunk; + epoxy_glCompressedTextureImage1DEXT = epoxy_glCompressedTextureImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureImage2DEXT = epoxy_glCompressedTextureImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureImage3DEXT = epoxy_glCompressedTextureImage3DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage1D = epoxy_glCompressedTextureSubImage1D_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage1DEXT = epoxy_glCompressedTextureSubImage1DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage2D = epoxy_glCompressedTextureSubImage2D_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage2DEXT = epoxy_glCompressedTextureSubImage2DEXT_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage3D = epoxy_glCompressedTextureSubImage3D_dispatch_table_thunk; + epoxy_glCompressedTextureSubImage3DEXT = epoxy_glCompressedTextureSubImage3DEXT_dispatch_table_thunk; + epoxy_glConservativeRasterParameterfNV = epoxy_glConservativeRasterParameterfNV_dispatch_table_thunk; + epoxy_glConvolutionFilter1D = epoxy_glConvolutionFilter1D_dispatch_table_thunk; + epoxy_glConvolutionFilter1DEXT = epoxy_glConvolutionFilter1DEXT_dispatch_table_thunk; + epoxy_glConvolutionFilter2D = epoxy_glConvolutionFilter2D_dispatch_table_thunk; + epoxy_glConvolutionFilter2DEXT = epoxy_glConvolutionFilter2DEXT_dispatch_table_thunk; + epoxy_glConvolutionParameterf = epoxy_glConvolutionParameterf_dispatch_table_thunk; + epoxy_glConvolutionParameterfEXT = epoxy_glConvolutionParameterfEXT_dispatch_table_thunk; + epoxy_glConvolutionParameterfv = epoxy_glConvolutionParameterfv_dispatch_table_thunk; + epoxy_glConvolutionParameterfvEXT = epoxy_glConvolutionParameterfvEXT_dispatch_table_thunk; + epoxy_glConvolutionParameteri = epoxy_glConvolutionParameteri_dispatch_table_thunk; + epoxy_glConvolutionParameteriEXT = epoxy_glConvolutionParameteriEXT_dispatch_table_thunk; + epoxy_glConvolutionParameteriv = epoxy_glConvolutionParameteriv_dispatch_table_thunk; + epoxy_glConvolutionParameterivEXT = epoxy_glConvolutionParameterivEXT_dispatch_table_thunk; + epoxy_glConvolutionParameterxOES = epoxy_glConvolutionParameterxOES_dispatch_table_thunk; + epoxy_glConvolutionParameterxvOES = epoxy_glConvolutionParameterxvOES_dispatch_table_thunk; + epoxy_glCopyBufferSubData = epoxy_glCopyBufferSubData_dispatch_table_thunk; + epoxy_glCopyBufferSubDataNV = epoxy_glCopyBufferSubDataNV_dispatch_table_thunk; + epoxy_glCopyColorSubTable = epoxy_glCopyColorSubTable_dispatch_table_thunk; + epoxy_glCopyColorSubTableEXT = epoxy_glCopyColorSubTableEXT_dispatch_table_thunk; + epoxy_glCopyColorTable = epoxy_glCopyColorTable_dispatch_table_thunk; + epoxy_glCopyColorTableSGI = epoxy_glCopyColorTableSGI_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter1D = epoxy_glCopyConvolutionFilter1D_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter1DEXT = epoxy_glCopyConvolutionFilter1DEXT_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter2D = epoxy_glCopyConvolutionFilter2D_dispatch_table_thunk; + epoxy_glCopyConvolutionFilter2DEXT = epoxy_glCopyConvolutionFilter2DEXT_dispatch_table_thunk; + epoxy_glCopyImageSubData = epoxy_glCopyImageSubData_dispatch_table_thunk; + epoxy_glCopyImageSubDataEXT = epoxy_glCopyImageSubDataEXT_dispatch_table_thunk; + epoxy_glCopyImageSubDataNV = epoxy_glCopyImageSubDataNV_dispatch_table_thunk; + epoxy_glCopyImageSubDataOES = epoxy_glCopyImageSubDataOES_dispatch_table_thunk; + epoxy_glCopyMultiTexImage1DEXT = epoxy_glCopyMultiTexImage1DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexImage2DEXT = epoxy_glCopyMultiTexImage2DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexSubImage1DEXT = epoxy_glCopyMultiTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexSubImage2DEXT = epoxy_glCopyMultiTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glCopyMultiTexSubImage3DEXT = epoxy_glCopyMultiTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glCopyNamedBufferSubData = epoxy_glCopyNamedBufferSubData_dispatch_table_thunk; + epoxy_glCopyPathNV = epoxy_glCopyPathNV_dispatch_table_thunk; + epoxy_glCopyPixels = epoxy_glCopyPixels_dispatch_table_thunk; + epoxy_glCopyTexImage1D = epoxy_glCopyTexImage1D_dispatch_table_thunk; + epoxy_glCopyTexImage1DEXT = epoxy_glCopyTexImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTexImage2D = epoxy_glCopyTexImage2D_dispatch_table_thunk; + epoxy_glCopyTexImage2DEXT = epoxy_glCopyTexImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage1D = epoxy_glCopyTexSubImage1D_dispatch_table_thunk; + epoxy_glCopyTexSubImage1DEXT = epoxy_glCopyTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage2D = epoxy_glCopyTexSubImage2D_dispatch_table_thunk; + epoxy_glCopyTexSubImage2DEXT = epoxy_glCopyTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage3D = epoxy_glCopyTexSubImage3D_dispatch_table_thunk; + epoxy_glCopyTexSubImage3DEXT = epoxy_glCopyTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glCopyTexSubImage3DOES = epoxy_glCopyTexSubImage3DOES_dispatch_table_thunk; + epoxy_glCopyTextureImage1DEXT = epoxy_glCopyTextureImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTextureImage2DEXT = epoxy_glCopyTextureImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTextureLevelsAPPLE = epoxy_glCopyTextureLevelsAPPLE_dispatch_table_thunk; + epoxy_glCopyTextureSubImage1D = epoxy_glCopyTextureSubImage1D_dispatch_table_thunk; + epoxy_glCopyTextureSubImage1DEXT = epoxy_glCopyTextureSubImage1DEXT_dispatch_table_thunk; + epoxy_glCopyTextureSubImage2D = epoxy_glCopyTextureSubImage2D_dispatch_table_thunk; + epoxy_glCopyTextureSubImage2DEXT = epoxy_glCopyTextureSubImage2DEXT_dispatch_table_thunk; + epoxy_glCopyTextureSubImage3D = epoxy_glCopyTextureSubImage3D_dispatch_table_thunk; + epoxy_glCopyTextureSubImage3DEXT = epoxy_glCopyTextureSubImage3DEXT_dispatch_table_thunk; + epoxy_glCoverFillPathInstancedNV = epoxy_glCoverFillPathInstancedNV_dispatch_table_thunk; + epoxy_glCoverFillPathNV = epoxy_glCoverFillPathNV_dispatch_table_thunk; + epoxy_glCoverStrokePathInstancedNV = epoxy_glCoverStrokePathInstancedNV_dispatch_table_thunk; + epoxy_glCoverStrokePathNV = epoxy_glCoverStrokePathNV_dispatch_table_thunk; + epoxy_glCoverageMaskNV = epoxy_glCoverageMaskNV_dispatch_table_thunk; + epoxy_glCoverageModulationNV = epoxy_glCoverageModulationNV_dispatch_table_thunk; + epoxy_glCoverageModulationTableNV = epoxy_glCoverageModulationTableNV_dispatch_table_thunk; + epoxy_glCoverageOperationNV = epoxy_glCoverageOperationNV_dispatch_table_thunk; + epoxy_glCreateBuffers = epoxy_glCreateBuffers_dispatch_table_thunk; + epoxy_glCreateCommandListsNV = epoxy_glCreateCommandListsNV_dispatch_table_thunk; + epoxy_glCreateFramebuffers = epoxy_glCreateFramebuffers_dispatch_table_thunk; + epoxy_glCreatePerfQueryINTEL = epoxy_glCreatePerfQueryINTEL_dispatch_table_thunk; + epoxy_glCreateProgram = epoxy_glCreateProgram_dispatch_table_thunk; + epoxy_glCreateProgramObjectARB = epoxy_glCreateProgramObjectARB_dispatch_table_thunk; + epoxy_glCreateProgramPipelines = epoxy_glCreateProgramPipelines_dispatch_table_thunk; + epoxy_glCreateQueries = epoxy_glCreateQueries_dispatch_table_thunk; + epoxy_glCreateRenderbuffers = epoxy_glCreateRenderbuffers_dispatch_table_thunk; + epoxy_glCreateSamplers = epoxy_glCreateSamplers_dispatch_table_thunk; + epoxy_glCreateShader = epoxy_glCreateShader_dispatch_table_thunk; + epoxy_glCreateShaderObjectARB = epoxy_glCreateShaderObjectARB_dispatch_table_thunk; + epoxy_glCreateShaderProgramEXT = epoxy_glCreateShaderProgramEXT_dispatch_table_thunk; + epoxy_glCreateShaderProgramv = epoxy_glCreateShaderProgramv_dispatch_table_thunk; + epoxy_glCreateShaderProgramvEXT = epoxy_glCreateShaderProgramvEXT_dispatch_table_thunk; + epoxy_glCreateStatesNV = epoxy_glCreateStatesNV_dispatch_table_thunk; + epoxy_glCreateSyncFromCLeventARB = epoxy_glCreateSyncFromCLeventARB_dispatch_table_thunk; + epoxy_glCreateTextures = epoxy_glCreateTextures_dispatch_table_thunk; + epoxy_glCreateTransformFeedbacks = epoxy_glCreateTransformFeedbacks_dispatch_table_thunk; + epoxy_glCreateVertexArrays = epoxy_glCreateVertexArrays_dispatch_table_thunk; + epoxy_glCullFace = epoxy_glCullFace_dispatch_table_thunk; + epoxy_glCullParameterdvEXT = epoxy_glCullParameterdvEXT_dispatch_table_thunk; + epoxy_glCullParameterfvEXT = epoxy_glCullParameterfvEXT_dispatch_table_thunk; + epoxy_glCurrentPaletteMatrixARB = epoxy_glCurrentPaletteMatrixARB_dispatch_table_thunk; + epoxy_glCurrentPaletteMatrixOES = epoxy_glCurrentPaletteMatrixOES_dispatch_table_thunk; + epoxy_glDebugMessageCallback = epoxy_glDebugMessageCallback_dispatch_table_thunk; + epoxy_glDebugMessageCallbackAMD = epoxy_glDebugMessageCallbackAMD_dispatch_table_thunk; + epoxy_glDebugMessageCallbackARB = epoxy_glDebugMessageCallbackARB_dispatch_table_thunk; + epoxy_glDebugMessageCallbackKHR = epoxy_glDebugMessageCallbackKHR_dispatch_table_thunk; + epoxy_glDebugMessageControl = epoxy_glDebugMessageControl_dispatch_table_thunk; + epoxy_glDebugMessageControlARB = epoxy_glDebugMessageControlARB_dispatch_table_thunk; + epoxy_glDebugMessageControlKHR = epoxy_glDebugMessageControlKHR_dispatch_table_thunk; + epoxy_glDebugMessageEnableAMD = epoxy_glDebugMessageEnableAMD_dispatch_table_thunk; + epoxy_glDebugMessageInsert = epoxy_glDebugMessageInsert_dispatch_table_thunk; + epoxy_glDebugMessageInsertAMD = epoxy_glDebugMessageInsertAMD_dispatch_table_thunk; + epoxy_glDebugMessageInsertARB = epoxy_glDebugMessageInsertARB_dispatch_table_thunk; + epoxy_glDebugMessageInsertKHR = epoxy_glDebugMessageInsertKHR_dispatch_table_thunk; + epoxy_glDeformSGIX = epoxy_glDeformSGIX_dispatch_table_thunk; + epoxy_glDeformationMap3dSGIX = epoxy_glDeformationMap3dSGIX_dispatch_table_thunk; + epoxy_glDeformationMap3fSGIX = epoxy_glDeformationMap3fSGIX_dispatch_table_thunk; + epoxy_glDeleteAsyncMarkersSGIX = epoxy_glDeleteAsyncMarkersSGIX_dispatch_table_thunk; + epoxy_glDeleteBuffers = epoxy_glDeleteBuffers_dispatch_table_thunk; + epoxy_glDeleteBuffersARB = epoxy_glDeleteBuffersARB_dispatch_table_thunk; + epoxy_glDeleteCommandListsNV = epoxy_glDeleteCommandListsNV_dispatch_table_thunk; + epoxy_glDeleteFencesAPPLE = epoxy_glDeleteFencesAPPLE_dispatch_table_thunk; + epoxy_glDeleteFencesNV = epoxy_glDeleteFencesNV_dispatch_table_thunk; + epoxy_glDeleteFragmentShaderATI = epoxy_glDeleteFragmentShaderATI_dispatch_table_thunk; + epoxy_glDeleteFramebuffers = epoxy_glDeleteFramebuffers_dispatch_table_thunk; + epoxy_glDeleteFramebuffersEXT = epoxy_glDeleteFramebuffersEXT_dispatch_table_thunk; + epoxy_glDeleteFramebuffersOES = epoxy_glDeleteFramebuffersOES_dispatch_table_thunk; + epoxy_glDeleteLists = epoxy_glDeleteLists_dispatch_table_thunk; + epoxy_glDeleteNamedStringARB = epoxy_glDeleteNamedStringARB_dispatch_table_thunk; + epoxy_glDeleteNamesAMD = epoxy_glDeleteNamesAMD_dispatch_table_thunk; + epoxy_glDeleteObjectARB = epoxy_glDeleteObjectARB_dispatch_table_thunk; + epoxy_glDeleteOcclusionQueriesNV = epoxy_glDeleteOcclusionQueriesNV_dispatch_table_thunk; + epoxy_glDeletePathsNV = epoxy_glDeletePathsNV_dispatch_table_thunk; + epoxy_glDeletePerfMonitorsAMD = epoxy_glDeletePerfMonitorsAMD_dispatch_table_thunk; + epoxy_glDeletePerfQueryINTEL = epoxy_glDeletePerfQueryINTEL_dispatch_table_thunk; + epoxy_glDeleteProgram = epoxy_glDeleteProgram_dispatch_table_thunk; + epoxy_glDeleteProgramPipelines = epoxy_glDeleteProgramPipelines_dispatch_table_thunk; + epoxy_glDeleteProgramPipelinesEXT = epoxy_glDeleteProgramPipelinesEXT_dispatch_table_thunk; + epoxy_glDeleteProgramsARB = epoxy_glDeleteProgramsARB_dispatch_table_thunk; + epoxy_glDeleteProgramsNV = epoxy_glDeleteProgramsNV_dispatch_table_thunk; + epoxy_glDeleteQueries = epoxy_glDeleteQueries_dispatch_table_thunk; + epoxy_glDeleteQueriesARB = epoxy_glDeleteQueriesARB_dispatch_table_thunk; + epoxy_glDeleteQueriesEXT = epoxy_glDeleteQueriesEXT_dispatch_table_thunk; + epoxy_glDeleteRenderbuffers = epoxy_glDeleteRenderbuffers_dispatch_table_thunk; + epoxy_glDeleteRenderbuffersEXT = epoxy_glDeleteRenderbuffersEXT_dispatch_table_thunk; + epoxy_glDeleteRenderbuffersOES = epoxy_glDeleteRenderbuffersOES_dispatch_table_thunk; + epoxy_glDeleteSamplers = epoxy_glDeleteSamplers_dispatch_table_thunk; + epoxy_glDeleteShader = epoxy_glDeleteShader_dispatch_table_thunk; + epoxy_glDeleteStatesNV = epoxy_glDeleteStatesNV_dispatch_table_thunk; + epoxy_glDeleteSync = epoxy_glDeleteSync_dispatch_table_thunk; + epoxy_glDeleteSyncAPPLE = epoxy_glDeleteSyncAPPLE_dispatch_table_thunk; + epoxy_glDeleteTextures = epoxy_glDeleteTextures_dispatch_table_thunk; + epoxy_glDeleteTexturesEXT = epoxy_glDeleteTexturesEXT_dispatch_table_thunk; + epoxy_glDeleteTransformFeedbacks = epoxy_glDeleteTransformFeedbacks_dispatch_table_thunk; + epoxy_glDeleteTransformFeedbacksNV = epoxy_glDeleteTransformFeedbacksNV_dispatch_table_thunk; + epoxy_glDeleteVertexArrays = epoxy_glDeleteVertexArrays_dispatch_table_thunk; + epoxy_glDeleteVertexArraysAPPLE = epoxy_glDeleteVertexArraysAPPLE_dispatch_table_thunk; + epoxy_glDeleteVertexArraysOES = epoxy_glDeleteVertexArraysOES_dispatch_table_thunk; + epoxy_glDeleteVertexShaderEXT = epoxy_glDeleteVertexShaderEXT_dispatch_table_thunk; + epoxy_glDepthBoundsEXT = epoxy_glDepthBoundsEXT_dispatch_table_thunk; + epoxy_glDepthBoundsdNV = epoxy_glDepthBoundsdNV_dispatch_table_thunk; + epoxy_glDepthFunc = epoxy_glDepthFunc_dispatch_table_thunk; + epoxy_glDepthMask = epoxy_glDepthMask_dispatch_table_thunk; + epoxy_glDepthRange = epoxy_glDepthRange_dispatch_table_thunk; + epoxy_glDepthRangeArrayfvNV = epoxy_glDepthRangeArrayfvNV_dispatch_table_thunk; + epoxy_glDepthRangeArrayv = epoxy_glDepthRangeArrayv_dispatch_table_thunk; + epoxy_glDepthRangeIndexed = epoxy_glDepthRangeIndexed_dispatch_table_thunk; + epoxy_glDepthRangeIndexedfNV = epoxy_glDepthRangeIndexedfNV_dispatch_table_thunk; + epoxy_glDepthRangedNV = epoxy_glDepthRangedNV_dispatch_table_thunk; + epoxy_glDepthRangef = epoxy_glDepthRangef_dispatch_table_thunk; + epoxy_glDepthRangefOES = epoxy_glDepthRangefOES_dispatch_table_thunk; + epoxy_glDepthRangex = epoxy_glDepthRangex_dispatch_table_thunk; + epoxy_glDepthRangexOES = epoxy_glDepthRangexOES_dispatch_table_thunk; + epoxy_glDetachObjectARB = epoxy_glDetachObjectARB_dispatch_table_thunk; + epoxy_glDetachShader = epoxy_glDetachShader_dispatch_table_thunk; + epoxy_glDetailTexFuncSGIS = epoxy_glDetailTexFuncSGIS_dispatch_table_thunk; + epoxy_glDisable = epoxy_glDisable_dispatch_table_thunk; + epoxy_glDisableClientState = epoxy_glDisableClientState_dispatch_table_thunk; + epoxy_glDisableClientStateIndexedEXT = epoxy_glDisableClientStateIndexedEXT_dispatch_table_thunk; + epoxy_glDisableClientStateiEXT = epoxy_glDisableClientStateiEXT_dispatch_table_thunk; + epoxy_glDisableDriverControlQCOM = epoxy_glDisableDriverControlQCOM_dispatch_table_thunk; + epoxy_glDisableIndexedEXT = epoxy_glDisableIndexedEXT_dispatch_table_thunk; + epoxy_glDisableVariantClientStateEXT = epoxy_glDisableVariantClientStateEXT_dispatch_table_thunk; + epoxy_glDisableVertexArrayAttrib = epoxy_glDisableVertexArrayAttrib_dispatch_table_thunk; + epoxy_glDisableVertexArrayAttribEXT = epoxy_glDisableVertexArrayAttribEXT_dispatch_table_thunk; + epoxy_glDisableVertexArrayEXT = epoxy_glDisableVertexArrayEXT_dispatch_table_thunk; + epoxy_glDisableVertexAttribAPPLE = epoxy_glDisableVertexAttribAPPLE_dispatch_table_thunk; + epoxy_glDisableVertexAttribArray = epoxy_glDisableVertexAttribArray_dispatch_table_thunk; + epoxy_glDisableVertexAttribArrayARB = epoxy_glDisableVertexAttribArrayARB_dispatch_table_thunk; + epoxy_glDisablei = epoxy_glDisablei_dispatch_table_thunk; + epoxy_glDisableiEXT = epoxy_glDisableiEXT_dispatch_table_thunk; + epoxy_glDisableiNV = epoxy_glDisableiNV_dispatch_table_thunk; + epoxy_glDisableiOES = epoxy_glDisableiOES_dispatch_table_thunk; + epoxy_glDiscardFramebufferEXT = epoxy_glDiscardFramebufferEXT_dispatch_table_thunk; + epoxy_glDispatchCompute = epoxy_glDispatchCompute_dispatch_table_thunk; + epoxy_glDispatchComputeGroupSizeARB = epoxy_glDispatchComputeGroupSizeARB_dispatch_table_thunk; + epoxy_glDispatchComputeIndirect = epoxy_glDispatchComputeIndirect_dispatch_table_thunk; + epoxy_glDrawArrays = epoxy_glDrawArrays_dispatch_table_thunk; + epoxy_glDrawArraysEXT = epoxy_glDrawArraysEXT_dispatch_table_thunk; + epoxy_glDrawArraysIndirect = epoxy_glDrawArraysIndirect_dispatch_table_thunk; + epoxy_glDrawArraysInstanced = epoxy_glDrawArraysInstanced_dispatch_table_thunk; + epoxy_glDrawArraysInstancedANGLE = epoxy_glDrawArraysInstancedANGLE_dispatch_table_thunk; + epoxy_glDrawArraysInstancedARB = epoxy_glDrawArraysInstancedARB_dispatch_table_thunk; + epoxy_glDrawArraysInstancedBaseInstance = epoxy_glDrawArraysInstancedBaseInstance_dispatch_table_thunk; + epoxy_glDrawArraysInstancedBaseInstanceEXT = epoxy_glDrawArraysInstancedBaseInstanceEXT_dispatch_table_thunk; + epoxy_glDrawArraysInstancedEXT = epoxy_glDrawArraysInstancedEXT_dispatch_table_thunk; + epoxy_glDrawArraysInstancedNV = epoxy_glDrawArraysInstancedNV_dispatch_table_thunk; + epoxy_glDrawBuffer = epoxy_glDrawBuffer_dispatch_table_thunk; + epoxy_glDrawBuffers = epoxy_glDrawBuffers_dispatch_table_thunk; + epoxy_glDrawBuffersARB = epoxy_glDrawBuffersARB_dispatch_table_thunk; + epoxy_glDrawBuffersATI = epoxy_glDrawBuffersATI_dispatch_table_thunk; + epoxy_glDrawBuffersEXT = epoxy_glDrawBuffersEXT_dispatch_table_thunk; + epoxy_glDrawBuffersIndexedEXT = epoxy_glDrawBuffersIndexedEXT_dispatch_table_thunk; + epoxy_glDrawBuffersNV = epoxy_glDrawBuffersNV_dispatch_table_thunk; + epoxy_glDrawCommandsAddressNV = epoxy_glDrawCommandsAddressNV_dispatch_table_thunk; + epoxy_glDrawCommandsNV = epoxy_glDrawCommandsNV_dispatch_table_thunk; + epoxy_glDrawCommandsStatesAddressNV = epoxy_glDrawCommandsStatesAddressNV_dispatch_table_thunk; + epoxy_glDrawCommandsStatesNV = epoxy_glDrawCommandsStatesNV_dispatch_table_thunk; + epoxy_glDrawElementArrayAPPLE = epoxy_glDrawElementArrayAPPLE_dispatch_table_thunk; + epoxy_glDrawElementArrayATI = epoxy_glDrawElementArrayATI_dispatch_table_thunk; + epoxy_glDrawElements = epoxy_glDrawElements_dispatch_table_thunk; + epoxy_glDrawElementsBaseVertex = epoxy_glDrawElementsBaseVertex_dispatch_table_thunk; + epoxy_glDrawElementsBaseVertexEXT = epoxy_glDrawElementsBaseVertexEXT_dispatch_table_thunk; + epoxy_glDrawElementsBaseVertexOES = epoxy_glDrawElementsBaseVertexOES_dispatch_table_thunk; + epoxy_glDrawElementsIndirect = epoxy_glDrawElementsIndirect_dispatch_table_thunk; + epoxy_glDrawElementsInstanced = epoxy_glDrawElementsInstanced_dispatch_table_thunk; + epoxy_glDrawElementsInstancedANGLE = epoxy_glDrawElementsInstancedANGLE_dispatch_table_thunk; + epoxy_glDrawElementsInstancedARB = epoxy_glDrawElementsInstancedARB_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseInstance = epoxy_glDrawElementsInstancedBaseInstance_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseInstanceEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertex = epoxy_glDrawElementsInstancedBaseVertex_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexBaseInstance = epoxy_glDrawElementsInstancedBaseVertexBaseInstance_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexEXT = epoxy_glDrawElementsInstancedBaseVertexEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedBaseVertexOES = epoxy_glDrawElementsInstancedBaseVertexOES_dispatch_table_thunk; + epoxy_glDrawElementsInstancedEXT = epoxy_glDrawElementsInstancedEXT_dispatch_table_thunk; + epoxy_glDrawElementsInstancedNV = epoxy_glDrawElementsInstancedNV_dispatch_table_thunk; + epoxy_glDrawMeshArraysSUN = epoxy_glDrawMeshArraysSUN_dispatch_table_thunk; + epoxy_glDrawPixels = epoxy_glDrawPixels_dispatch_table_thunk; + epoxy_glDrawRangeElementArrayAPPLE = epoxy_glDrawRangeElementArrayAPPLE_dispatch_table_thunk; + epoxy_glDrawRangeElementArrayATI = epoxy_glDrawRangeElementArrayATI_dispatch_table_thunk; + epoxy_glDrawRangeElements = epoxy_glDrawRangeElements_dispatch_table_thunk; + epoxy_glDrawRangeElementsBaseVertex = epoxy_glDrawRangeElementsBaseVertex_dispatch_table_thunk; + epoxy_glDrawRangeElementsBaseVertexEXT = epoxy_glDrawRangeElementsBaseVertexEXT_dispatch_table_thunk; + epoxy_glDrawRangeElementsBaseVertexOES = epoxy_glDrawRangeElementsBaseVertexOES_dispatch_table_thunk; + epoxy_glDrawRangeElementsEXT = epoxy_glDrawRangeElementsEXT_dispatch_table_thunk; + epoxy_glDrawTexfOES = epoxy_glDrawTexfOES_dispatch_table_thunk; + epoxy_glDrawTexfvOES = epoxy_glDrawTexfvOES_dispatch_table_thunk; + epoxy_glDrawTexiOES = epoxy_glDrawTexiOES_dispatch_table_thunk; + epoxy_glDrawTexivOES = epoxy_glDrawTexivOES_dispatch_table_thunk; + epoxy_glDrawTexsOES = epoxy_glDrawTexsOES_dispatch_table_thunk; + epoxy_glDrawTexsvOES = epoxy_glDrawTexsvOES_dispatch_table_thunk; + epoxy_glDrawTextureNV = epoxy_glDrawTextureNV_dispatch_table_thunk; + epoxy_glDrawTexxOES = epoxy_glDrawTexxOES_dispatch_table_thunk; + epoxy_glDrawTexxvOES = epoxy_glDrawTexxvOES_dispatch_table_thunk; + epoxy_glDrawTransformFeedback = epoxy_glDrawTransformFeedback_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackInstanced = epoxy_glDrawTransformFeedbackInstanced_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackNV = epoxy_glDrawTransformFeedbackNV_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackStream = epoxy_glDrawTransformFeedbackStream_dispatch_table_thunk; + epoxy_glDrawTransformFeedbackStreamInstanced = epoxy_glDrawTransformFeedbackStreamInstanced_dispatch_table_thunk; + epoxy_glEGLImageTargetRenderbufferStorageOES = epoxy_glEGLImageTargetRenderbufferStorageOES_dispatch_table_thunk; + epoxy_glEGLImageTargetTexture2DOES = epoxy_glEGLImageTargetTexture2DOES_dispatch_table_thunk; + epoxy_glEdgeFlag = epoxy_glEdgeFlag_dispatch_table_thunk; + epoxy_glEdgeFlagFormatNV = epoxy_glEdgeFlagFormatNV_dispatch_table_thunk; + epoxy_glEdgeFlagPointer = epoxy_glEdgeFlagPointer_dispatch_table_thunk; + epoxy_glEdgeFlagPointerEXT = epoxy_glEdgeFlagPointerEXT_dispatch_table_thunk; + epoxy_glEdgeFlagPointerListIBM = epoxy_glEdgeFlagPointerListIBM_dispatch_table_thunk; + epoxy_glEdgeFlagv = epoxy_glEdgeFlagv_dispatch_table_thunk; + epoxy_glElementPointerAPPLE = epoxy_glElementPointerAPPLE_dispatch_table_thunk; + epoxy_glElementPointerATI = epoxy_glElementPointerATI_dispatch_table_thunk; + epoxy_glEnable = epoxy_glEnable_dispatch_table_thunk; + epoxy_glEnableClientState = epoxy_glEnableClientState_dispatch_table_thunk; + epoxy_glEnableClientStateIndexedEXT = epoxy_glEnableClientStateIndexedEXT_dispatch_table_thunk; + epoxy_glEnableClientStateiEXT = epoxy_glEnableClientStateiEXT_dispatch_table_thunk; + epoxy_glEnableDriverControlQCOM = epoxy_glEnableDriverControlQCOM_dispatch_table_thunk; + epoxy_glEnableIndexedEXT = epoxy_glEnableIndexedEXT_dispatch_table_thunk; + epoxy_glEnableVariantClientStateEXT = epoxy_glEnableVariantClientStateEXT_dispatch_table_thunk; + epoxy_glEnableVertexArrayAttrib = epoxy_glEnableVertexArrayAttrib_dispatch_table_thunk; + epoxy_glEnableVertexArrayAttribEXT = epoxy_glEnableVertexArrayAttribEXT_dispatch_table_thunk; + epoxy_glEnableVertexArrayEXT = epoxy_glEnableVertexArrayEXT_dispatch_table_thunk; + epoxy_glEnableVertexAttribAPPLE = epoxy_glEnableVertexAttribAPPLE_dispatch_table_thunk; + epoxy_glEnableVertexAttribArray = epoxy_glEnableVertexAttribArray_dispatch_table_thunk; + epoxy_glEnableVertexAttribArrayARB = epoxy_glEnableVertexAttribArrayARB_dispatch_table_thunk; + epoxy_glEnablei = epoxy_glEnablei_dispatch_table_thunk; + epoxy_glEnableiEXT = epoxy_glEnableiEXT_dispatch_table_thunk; + epoxy_glEnableiNV = epoxy_glEnableiNV_dispatch_table_thunk; + epoxy_glEnableiOES = epoxy_glEnableiOES_dispatch_table_thunk; + epoxy_glEnd_unwrapped = epoxy_glEnd_unwrapped_dispatch_table_thunk; + epoxy_glEndConditionalRender = epoxy_glEndConditionalRender_dispatch_table_thunk; + epoxy_glEndConditionalRenderNV = epoxy_glEndConditionalRenderNV_dispatch_table_thunk; + epoxy_glEndConditionalRenderNVX = epoxy_glEndConditionalRenderNVX_dispatch_table_thunk; + epoxy_glEndFragmentShaderATI = epoxy_glEndFragmentShaderATI_dispatch_table_thunk; + epoxy_glEndList = epoxy_glEndList_dispatch_table_thunk; + epoxy_glEndOcclusionQueryNV = epoxy_glEndOcclusionQueryNV_dispatch_table_thunk; + epoxy_glEndPerfMonitorAMD = epoxy_glEndPerfMonitorAMD_dispatch_table_thunk; + epoxy_glEndPerfQueryINTEL = epoxy_glEndPerfQueryINTEL_dispatch_table_thunk; + epoxy_glEndQuery = epoxy_glEndQuery_dispatch_table_thunk; + epoxy_glEndQueryARB = epoxy_glEndQueryARB_dispatch_table_thunk; + epoxy_glEndQueryEXT = epoxy_glEndQueryEXT_dispatch_table_thunk; + epoxy_glEndQueryIndexed = epoxy_glEndQueryIndexed_dispatch_table_thunk; + epoxy_glEndTilingQCOM = epoxy_glEndTilingQCOM_dispatch_table_thunk; + epoxy_glEndTransformFeedback = epoxy_glEndTransformFeedback_dispatch_table_thunk; + epoxy_glEndTransformFeedbackEXT = epoxy_glEndTransformFeedbackEXT_dispatch_table_thunk; + epoxy_glEndTransformFeedbackNV = epoxy_glEndTransformFeedbackNV_dispatch_table_thunk; + epoxy_glEndVertexShaderEXT = epoxy_glEndVertexShaderEXT_dispatch_table_thunk; + epoxy_glEndVideoCaptureNV = epoxy_glEndVideoCaptureNV_dispatch_table_thunk; + epoxy_glEvalCoord1d = epoxy_glEvalCoord1d_dispatch_table_thunk; + epoxy_glEvalCoord1dv = epoxy_glEvalCoord1dv_dispatch_table_thunk; + epoxy_glEvalCoord1f = epoxy_glEvalCoord1f_dispatch_table_thunk; + epoxy_glEvalCoord1fv = epoxy_glEvalCoord1fv_dispatch_table_thunk; + epoxy_glEvalCoord1xOES = epoxy_glEvalCoord1xOES_dispatch_table_thunk; + epoxy_glEvalCoord1xvOES = epoxy_glEvalCoord1xvOES_dispatch_table_thunk; + epoxy_glEvalCoord2d = epoxy_glEvalCoord2d_dispatch_table_thunk; + epoxy_glEvalCoord2dv = epoxy_glEvalCoord2dv_dispatch_table_thunk; + epoxy_glEvalCoord2f = epoxy_glEvalCoord2f_dispatch_table_thunk; + epoxy_glEvalCoord2fv = epoxy_glEvalCoord2fv_dispatch_table_thunk; + epoxy_glEvalCoord2xOES = epoxy_glEvalCoord2xOES_dispatch_table_thunk; + epoxy_glEvalCoord2xvOES = epoxy_glEvalCoord2xvOES_dispatch_table_thunk; + epoxy_glEvalMapsNV = epoxy_glEvalMapsNV_dispatch_table_thunk; + epoxy_glEvalMesh1 = epoxy_glEvalMesh1_dispatch_table_thunk; + epoxy_glEvalMesh2 = epoxy_glEvalMesh2_dispatch_table_thunk; + epoxy_glEvalPoint1 = epoxy_glEvalPoint1_dispatch_table_thunk; + epoxy_glEvalPoint2 = epoxy_glEvalPoint2_dispatch_table_thunk; + epoxy_glEvaluateDepthValuesARB = epoxy_glEvaluateDepthValuesARB_dispatch_table_thunk; + epoxy_glExecuteProgramNV = epoxy_glExecuteProgramNV_dispatch_table_thunk; + epoxy_glExtGetBufferPointervQCOM = epoxy_glExtGetBufferPointervQCOM_dispatch_table_thunk; + epoxy_glExtGetBuffersQCOM = epoxy_glExtGetBuffersQCOM_dispatch_table_thunk; + epoxy_glExtGetFramebuffersQCOM = epoxy_glExtGetFramebuffersQCOM_dispatch_table_thunk; + epoxy_glExtGetProgramBinarySourceQCOM = epoxy_glExtGetProgramBinarySourceQCOM_dispatch_table_thunk; + epoxy_glExtGetProgramsQCOM = epoxy_glExtGetProgramsQCOM_dispatch_table_thunk; + epoxy_glExtGetRenderbuffersQCOM = epoxy_glExtGetRenderbuffersQCOM_dispatch_table_thunk; + epoxy_glExtGetShadersQCOM = epoxy_glExtGetShadersQCOM_dispatch_table_thunk; + epoxy_glExtGetTexLevelParameterivQCOM = epoxy_glExtGetTexLevelParameterivQCOM_dispatch_table_thunk; + epoxy_glExtGetTexSubImageQCOM = epoxy_glExtGetTexSubImageQCOM_dispatch_table_thunk; + epoxy_glExtGetTexturesQCOM = epoxy_glExtGetTexturesQCOM_dispatch_table_thunk; + epoxy_glExtIsProgramBinaryQCOM = epoxy_glExtIsProgramBinaryQCOM_dispatch_table_thunk; + epoxy_glExtTexObjectStateOverrideiQCOM = epoxy_glExtTexObjectStateOverrideiQCOM_dispatch_table_thunk; + epoxy_glExtractComponentEXT = epoxy_glExtractComponentEXT_dispatch_table_thunk; + epoxy_glFeedbackBuffer = epoxy_glFeedbackBuffer_dispatch_table_thunk; + epoxy_glFeedbackBufferxOES = epoxy_glFeedbackBufferxOES_dispatch_table_thunk; + epoxy_glFenceSync = epoxy_glFenceSync_dispatch_table_thunk; + epoxy_glFenceSyncAPPLE = epoxy_glFenceSyncAPPLE_dispatch_table_thunk; + epoxy_glFinalCombinerInputNV = epoxy_glFinalCombinerInputNV_dispatch_table_thunk; + epoxy_glFinish = epoxy_glFinish_dispatch_table_thunk; + epoxy_glFinishAsyncSGIX = epoxy_glFinishAsyncSGIX_dispatch_table_thunk; + epoxy_glFinishFenceAPPLE = epoxy_glFinishFenceAPPLE_dispatch_table_thunk; + epoxy_glFinishFenceNV = epoxy_glFinishFenceNV_dispatch_table_thunk; + epoxy_glFinishObjectAPPLE = epoxy_glFinishObjectAPPLE_dispatch_table_thunk; + epoxy_glFinishTextureSUNX = epoxy_glFinishTextureSUNX_dispatch_table_thunk; + epoxy_glFlush = epoxy_glFlush_dispatch_table_thunk; + epoxy_glFlushMappedBufferRange = epoxy_glFlushMappedBufferRange_dispatch_table_thunk; + epoxy_glFlushMappedBufferRangeAPPLE = epoxy_glFlushMappedBufferRangeAPPLE_dispatch_table_thunk; + epoxy_glFlushMappedBufferRangeEXT = epoxy_glFlushMappedBufferRangeEXT_dispatch_table_thunk; + epoxy_glFlushMappedNamedBufferRange = epoxy_glFlushMappedNamedBufferRange_dispatch_table_thunk; + epoxy_glFlushMappedNamedBufferRangeEXT = epoxy_glFlushMappedNamedBufferRangeEXT_dispatch_table_thunk; + epoxy_glFlushPixelDataRangeNV = epoxy_glFlushPixelDataRangeNV_dispatch_table_thunk; + epoxy_glFlushRasterSGIX = epoxy_glFlushRasterSGIX_dispatch_table_thunk; + epoxy_glFlushStaticDataIBM = epoxy_glFlushStaticDataIBM_dispatch_table_thunk; + epoxy_glFlushVertexArrayRangeAPPLE = epoxy_glFlushVertexArrayRangeAPPLE_dispatch_table_thunk; + epoxy_glFlushVertexArrayRangeNV = epoxy_glFlushVertexArrayRangeNV_dispatch_table_thunk; + epoxy_glFogCoordFormatNV = epoxy_glFogCoordFormatNV_dispatch_table_thunk; + epoxy_glFogCoordPointer = epoxy_glFogCoordPointer_dispatch_table_thunk; + epoxy_glFogCoordPointerEXT = epoxy_glFogCoordPointerEXT_dispatch_table_thunk; + epoxy_glFogCoordPointerListIBM = epoxy_glFogCoordPointerListIBM_dispatch_table_thunk; + epoxy_glFogCoordd = epoxy_glFogCoordd_dispatch_table_thunk; + epoxy_glFogCoorddEXT = epoxy_glFogCoorddEXT_dispatch_table_thunk; + epoxy_glFogCoorddv = epoxy_glFogCoorddv_dispatch_table_thunk; + epoxy_glFogCoorddvEXT = epoxy_glFogCoorddvEXT_dispatch_table_thunk; + epoxy_glFogCoordf = epoxy_glFogCoordf_dispatch_table_thunk; + epoxy_glFogCoordfEXT = epoxy_glFogCoordfEXT_dispatch_table_thunk; + epoxy_glFogCoordfv = epoxy_glFogCoordfv_dispatch_table_thunk; + epoxy_glFogCoordfvEXT = epoxy_glFogCoordfvEXT_dispatch_table_thunk; + epoxy_glFogCoordhNV = epoxy_glFogCoordhNV_dispatch_table_thunk; + epoxy_glFogCoordhvNV = epoxy_glFogCoordhvNV_dispatch_table_thunk; + epoxy_glFogFuncSGIS = epoxy_glFogFuncSGIS_dispatch_table_thunk; + epoxy_glFogf = epoxy_glFogf_dispatch_table_thunk; + epoxy_glFogfv = epoxy_glFogfv_dispatch_table_thunk; + epoxy_glFogi = epoxy_glFogi_dispatch_table_thunk; + epoxy_glFogiv = epoxy_glFogiv_dispatch_table_thunk; + epoxy_glFogx = epoxy_glFogx_dispatch_table_thunk; + epoxy_glFogxOES = epoxy_glFogxOES_dispatch_table_thunk; + epoxy_glFogxv = epoxy_glFogxv_dispatch_table_thunk; + epoxy_glFogxvOES = epoxy_glFogxvOES_dispatch_table_thunk; + epoxy_glFragmentColorMaterialSGIX = epoxy_glFragmentColorMaterialSGIX_dispatch_table_thunk; + epoxy_glFragmentCoverageColorNV = epoxy_glFragmentCoverageColorNV_dispatch_table_thunk; + epoxy_glFragmentLightModelfSGIX = epoxy_glFragmentLightModelfSGIX_dispatch_table_thunk; + epoxy_glFragmentLightModelfvSGIX = epoxy_glFragmentLightModelfvSGIX_dispatch_table_thunk; + epoxy_glFragmentLightModeliSGIX = epoxy_glFragmentLightModeliSGIX_dispatch_table_thunk; + epoxy_glFragmentLightModelivSGIX = epoxy_glFragmentLightModelivSGIX_dispatch_table_thunk; + epoxy_glFragmentLightfSGIX = epoxy_glFragmentLightfSGIX_dispatch_table_thunk; + epoxy_glFragmentLightfvSGIX = epoxy_glFragmentLightfvSGIX_dispatch_table_thunk; + epoxy_glFragmentLightiSGIX = epoxy_glFragmentLightiSGIX_dispatch_table_thunk; + epoxy_glFragmentLightivSGIX = epoxy_glFragmentLightivSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialfSGIX = epoxy_glFragmentMaterialfSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialfvSGIX = epoxy_glFragmentMaterialfvSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialiSGIX = epoxy_glFragmentMaterialiSGIX_dispatch_table_thunk; + epoxy_glFragmentMaterialivSGIX = epoxy_glFragmentMaterialivSGIX_dispatch_table_thunk; + epoxy_glFrameTerminatorGREMEDY = epoxy_glFrameTerminatorGREMEDY_dispatch_table_thunk; + epoxy_glFrameZoomSGIX = epoxy_glFrameZoomSGIX_dispatch_table_thunk; + epoxy_glFramebufferDrawBufferEXT = epoxy_glFramebufferDrawBufferEXT_dispatch_table_thunk; + epoxy_glFramebufferDrawBuffersEXT = epoxy_glFramebufferDrawBuffersEXT_dispatch_table_thunk; + epoxy_glFramebufferParameteri = epoxy_glFramebufferParameteri_dispatch_table_thunk; + epoxy_glFramebufferReadBufferEXT = epoxy_glFramebufferReadBufferEXT_dispatch_table_thunk; + epoxy_glFramebufferRenderbuffer = epoxy_glFramebufferRenderbuffer_dispatch_table_thunk; + epoxy_glFramebufferRenderbufferEXT = epoxy_glFramebufferRenderbufferEXT_dispatch_table_thunk; + epoxy_glFramebufferRenderbufferOES = epoxy_glFramebufferRenderbufferOES_dispatch_table_thunk; + epoxy_glFramebufferSampleLocationsfvARB = epoxy_glFramebufferSampleLocationsfvARB_dispatch_table_thunk; + epoxy_glFramebufferSampleLocationsfvNV = epoxy_glFramebufferSampleLocationsfvNV_dispatch_table_thunk; + epoxy_glFramebufferTexture = epoxy_glFramebufferTexture_dispatch_table_thunk; + epoxy_glFramebufferTexture1D = epoxy_glFramebufferTexture1D_dispatch_table_thunk; + epoxy_glFramebufferTexture1DEXT = epoxy_glFramebufferTexture1DEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture2D = epoxy_glFramebufferTexture2D_dispatch_table_thunk; + epoxy_glFramebufferTexture2DEXT = epoxy_glFramebufferTexture2DEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture2DMultisampleEXT = epoxy_glFramebufferTexture2DMultisampleEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture2DMultisampleIMG = epoxy_glFramebufferTexture2DMultisampleIMG_dispatch_table_thunk; + epoxy_glFramebufferTexture2DOES = epoxy_glFramebufferTexture2DOES_dispatch_table_thunk; + epoxy_glFramebufferTexture3D = epoxy_glFramebufferTexture3D_dispatch_table_thunk; + epoxy_glFramebufferTexture3DEXT = epoxy_glFramebufferTexture3DEXT_dispatch_table_thunk; + epoxy_glFramebufferTexture3DOES = epoxy_glFramebufferTexture3DOES_dispatch_table_thunk; + epoxy_glFramebufferTextureARB = epoxy_glFramebufferTextureARB_dispatch_table_thunk; + epoxy_glFramebufferTextureEXT = epoxy_glFramebufferTextureEXT_dispatch_table_thunk; + epoxy_glFramebufferTextureFaceARB = epoxy_glFramebufferTextureFaceARB_dispatch_table_thunk; + epoxy_glFramebufferTextureFaceEXT = epoxy_glFramebufferTextureFaceEXT_dispatch_table_thunk; + epoxy_glFramebufferTextureLayer = epoxy_glFramebufferTextureLayer_dispatch_table_thunk; + epoxy_glFramebufferTextureLayerARB = epoxy_glFramebufferTextureLayerARB_dispatch_table_thunk; + epoxy_glFramebufferTextureLayerEXT = epoxy_glFramebufferTextureLayerEXT_dispatch_table_thunk; + epoxy_glFramebufferTextureMultiviewOVR = epoxy_glFramebufferTextureMultiviewOVR_dispatch_table_thunk; + epoxy_glFramebufferTextureOES = epoxy_glFramebufferTextureOES_dispatch_table_thunk; + epoxy_glFreeObjectBufferATI = epoxy_glFreeObjectBufferATI_dispatch_table_thunk; + epoxy_glFrontFace = epoxy_glFrontFace_dispatch_table_thunk; + epoxy_glFrustum = epoxy_glFrustum_dispatch_table_thunk; + epoxy_glFrustumf = epoxy_glFrustumf_dispatch_table_thunk; + epoxy_glFrustumfOES = epoxy_glFrustumfOES_dispatch_table_thunk; + epoxy_glFrustumx = epoxy_glFrustumx_dispatch_table_thunk; + epoxy_glFrustumxOES = epoxy_glFrustumxOES_dispatch_table_thunk; + epoxy_glGenAsyncMarkersSGIX = epoxy_glGenAsyncMarkersSGIX_dispatch_table_thunk; + epoxy_glGenBuffers = epoxy_glGenBuffers_dispatch_table_thunk; + epoxy_glGenBuffersARB = epoxy_glGenBuffersARB_dispatch_table_thunk; + epoxy_glGenFencesAPPLE = epoxy_glGenFencesAPPLE_dispatch_table_thunk; + epoxy_glGenFencesNV = epoxy_glGenFencesNV_dispatch_table_thunk; + epoxy_glGenFragmentShadersATI = epoxy_glGenFragmentShadersATI_dispatch_table_thunk; + epoxy_glGenFramebuffers = epoxy_glGenFramebuffers_dispatch_table_thunk; + epoxy_glGenFramebuffersEXT = epoxy_glGenFramebuffersEXT_dispatch_table_thunk; + epoxy_glGenFramebuffersOES = epoxy_glGenFramebuffersOES_dispatch_table_thunk; + epoxy_glGenLists = epoxy_glGenLists_dispatch_table_thunk; + epoxy_glGenNamesAMD = epoxy_glGenNamesAMD_dispatch_table_thunk; + epoxy_glGenOcclusionQueriesNV = epoxy_glGenOcclusionQueriesNV_dispatch_table_thunk; + epoxy_glGenPathsNV = epoxy_glGenPathsNV_dispatch_table_thunk; + epoxy_glGenPerfMonitorsAMD = epoxy_glGenPerfMonitorsAMD_dispatch_table_thunk; + epoxy_glGenProgramPipelines = epoxy_glGenProgramPipelines_dispatch_table_thunk; + epoxy_glGenProgramPipelinesEXT = epoxy_glGenProgramPipelinesEXT_dispatch_table_thunk; + epoxy_glGenProgramsARB = epoxy_glGenProgramsARB_dispatch_table_thunk; + epoxy_glGenProgramsNV = epoxy_glGenProgramsNV_dispatch_table_thunk; + epoxy_glGenQueries = epoxy_glGenQueries_dispatch_table_thunk; + epoxy_glGenQueriesARB = epoxy_glGenQueriesARB_dispatch_table_thunk; + epoxy_glGenQueriesEXT = epoxy_glGenQueriesEXT_dispatch_table_thunk; + epoxy_glGenRenderbuffers = epoxy_glGenRenderbuffers_dispatch_table_thunk; + epoxy_glGenRenderbuffersEXT = epoxy_glGenRenderbuffersEXT_dispatch_table_thunk; + epoxy_glGenRenderbuffersOES = epoxy_glGenRenderbuffersOES_dispatch_table_thunk; + epoxy_glGenSamplers = epoxy_glGenSamplers_dispatch_table_thunk; + epoxy_glGenSymbolsEXT = epoxy_glGenSymbolsEXT_dispatch_table_thunk; + epoxy_glGenTextures = epoxy_glGenTextures_dispatch_table_thunk; + epoxy_glGenTexturesEXT = epoxy_glGenTexturesEXT_dispatch_table_thunk; + epoxy_glGenTransformFeedbacks = epoxy_glGenTransformFeedbacks_dispatch_table_thunk; + epoxy_glGenTransformFeedbacksNV = epoxy_glGenTransformFeedbacksNV_dispatch_table_thunk; + epoxy_glGenVertexArrays = epoxy_glGenVertexArrays_dispatch_table_thunk; + epoxy_glGenVertexArraysAPPLE = epoxy_glGenVertexArraysAPPLE_dispatch_table_thunk; + epoxy_glGenVertexArraysOES = epoxy_glGenVertexArraysOES_dispatch_table_thunk; + epoxy_glGenVertexShadersEXT = epoxy_glGenVertexShadersEXT_dispatch_table_thunk; + epoxy_glGenerateMipmap = epoxy_glGenerateMipmap_dispatch_table_thunk; + epoxy_glGenerateMipmapEXT = epoxy_glGenerateMipmapEXT_dispatch_table_thunk; + epoxy_glGenerateMipmapOES = epoxy_glGenerateMipmapOES_dispatch_table_thunk; + epoxy_glGenerateMultiTexMipmapEXT = epoxy_glGenerateMultiTexMipmapEXT_dispatch_table_thunk; + epoxy_glGenerateTextureMipmap = epoxy_glGenerateTextureMipmap_dispatch_table_thunk; + epoxy_glGenerateTextureMipmapEXT = epoxy_glGenerateTextureMipmapEXT_dispatch_table_thunk; + epoxy_glGetActiveAtomicCounterBufferiv = epoxy_glGetActiveAtomicCounterBufferiv_dispatch_table_thunk; + epoxy_glGetActiveAttrib = epoxy_glGetActiveAttrib_dispatch_table_thunk; + epoxy_glGetActiveAttribARB = epoxy_glGetActiveAttribARB_dispatch_table_thunk; + epoxy_glGetActiveSubroutineName = epoxy_glGetActiveSubroutineName_dispatch_table_thunk; + epoxy_glGetActiveSubroutineUniformName = epoxy_glGetActiveSubroutineUniformName_dispatch_table_thunk; + epoxy_glGetActiveSubroutineUniformiv = epoxy_glGetActiveSubroutineUniformiv_dispatch_table_thunk; + epoxy_glGetActiveUniform = epoxy_glGetActiveUniform_dispatch_table_thunk; + epoxy_glGetActiveUniformARB = epoxy_glGetActiveUniformARB_dispatch_table_thunk; + epoxy_glGetActiveUniformBlockName = epoxy_glGetActiveUniformBlockName_dispatch_table_thunk; + epoxy_glGetActiveUniformBlockiv = epoxy_glGetActiveUniformBlockiv_dispatch_table_thunk; + epoxy_glGetActiveUniformName = epoxy_glGetActiveUniformName_dispatch_table_thunk; + epoxy_glGetActiveUniformsiv = epoxy_glGetActiveUniformsiv_dispatch_table_thunk; + epoxy_glGetActiveVaryingNV = epoxy_glGetActiveVaryingNV_dispatch_table_thunk; + epoxy_glGetArrayObjectfvATI = epoxy_glGetArrayObjectfvATI_dispatch_table_thunk; + epoxy_glGetArrayObjectivATI = epoxy_glGetArrayObjectivATI_dispatch_table_thunk; + epoxy_glGetAttachedObjectsARB = epoxy_glGetAttachedObjectsARB_dispatch_table_thunk; + epoxy_glGetAttachedShaders = epoxy_glGetAttachedShaders_dispatch_table_thunk; + epoxy_glGetAttribLocation = epoxy_glGetAttribLocation_dispatch_table_thunk; + epoxy_glGetAttribLocationARB = epoxy_glGetAttribLocationARB_dispatch_table_thunk; + epoxy_glGetBooleanIndexedvEXT = epoxy_glGetBooleanIndexedvEXT_dispatch_table_thunk; + epoxy_glGetBooleani_v = epoxy_glGetBooleani_v_dispatch_table_thunk; + epoxy_glGetBooleanv = epoxy_glGetBooleanv_dispatch_table_thunk; + epoxy_glGetBufferParameteri64v = epoxy_glGetBufferParameteri64v_dispatch_table_thunk; + epoxy_glGetBufferParameteriv = epoxy_glGetBufferParameteriv_dispatch_table_thunk; + epoxy_glGetBufferParameterivARB = epoxy_glGetBufferParameterivARB_dispatch_table_thunk; + epoxy_glGetBufferParameterui64vNV = epoxy_glGetBufferParameterui64vNV_dispatch_table_thunk; + epoxy_glGetBufferPointerv = epoxy_glGetBufferPointerv_dispatch_table_thunk; + epoxy_glGetBufferPointervARB = epoxy_glGetBufferPointervARB_dispatch_table_thunk; + epoxy_glGetBufferPointervOES = epoxy_glGetBufferPointervOES_dispatch_table_thunk; + epoxy_glGetBufferSubData = epoxy_glGetBufferSubData_dispatch_table_thunk; + epoxy_glGetBufferSubDataARB = epoxy_glGetBufferSubDataARB_dispatch_table_thunk; + epoxy_glGetClipPlane = epoxy_glGetClipPlane_dispatch_table_thunk; + epoxy_glGetClipPlanef = epoxy_glGetClipPlanef_dispatch_table_thunk; + epoxy_glGetClipPlanefOES = epoxy_glGetClipPlanefOES_dispatch_table_thunk; + epoxy_glGetClipPlanex = epoxy_glGetClipPlanex_dispatch_table_thunk; + epoxy_glGetClipPlanexOES = epoxy_glGetClipPlanexOES_dispatch_table_thunk; + epoxy_glGetColorTable = epoxy_glGetColorTable_dispatch_table_thunk; + epoxy_glGetColorTableEXT = epoxy_glGetColorTableEXT_dispatch_table_thunk; + epoxy_glGetColorTableParameterfv = epoxy_glGetColorTableParameterfv_dispatch_table_thunk; + epoxy_glGetColorTableParameterfvEXT = epoxy_glGetColorTableParameterfvEXT_dispatch_table_thunk; + epoxy_glGetColorTableParameterfvSGI = epoxy_glGetColorTableParameterfvSGI_dispatch_table_thunk; + epoxy_glGetColorTableParameteriv = epoxy_glGetColorTableParameteriv_dispatch_table_thunk; + epoxy_glGetColorTableParameterivEXT = epoxy_glGetColorTableParameterivEXT_dispatch_table_thunk; + epoxy_glGetColorTableParameterivSGI = epoxy_glGetColorTableParameterivSGI_dispatch_table_thunk; + epoxy_glGetColorTableSGI = epoxy_glGetColorTableSGI_dispatch_table_thunk; + epoxy_glGetCombinerInputParameterfvNV = epoxy_glGetCombinerInputParameterfvNV_dispatch_table_thunk; + epoxy_glGetCombinerInputParameterivNV = epoxy_glGetCombinerInputParameterivNV_dispatch_table_thunk; + epoxy_glGetCombinerOutputParameterfvNV = epoxy_glGetCombinerOutputParameterfvNV_dispatch_table_thunk; + epoxy_glGetCombinerOutputParameterivNV = epoxy_glGetCombinerOutputParameterivNV_dispatch_table_thunk; + epoxy_glGetCombinerStageParameterfvNV = epoxy_glGetCombinerStageParameterfvNV_dispatch_table_thunk; + epoxy_glGetCommandHeaderNV = epoxy_glGetCommandHeaderNV_dispatch_table_thunk; + epoxy_glGetCompressedMultiTexImageEXT = epoxy_glGetCompressedMultiTexImageEXT_dispatch_table_thunk; + epoxy_glGetCompressedTexImage = epoxy_glGetCompressedTexImage_dispatch_table_thunk; + epoxy_glGetCompressedTexImageARB = epoxy_glGetCompressedTexImageARB_dispatch_table_thunk; + epoxy_glGetCompressedTextureImage = epoxy_glGetCompressedTextureImage_dispatch_table_thunk; + epoxy_glGetCompressedTextureImageEXT = epoxy_glGetCompressedTextureImageEXT_dispatch_table_thunk; + epoxy_glGetCompressedTextureSubImage = epoxy_glGetCompressedTextureSubImage_dispatch_table_thunk; + epoxy_glGetConvolutionFilter = epoxy_glGetConvolutionFilter_dispatch_table_thunk; + epoxy_glGetConvolutionFilterEXT = epoxy_glGetConvolutionFilterEXT_dispatch_table_thunk; + epoxy_glGetConvolutionParameterfv = epoxy_glGetConvolutionParameterfv_dispatch_table_thunk; + epoxy_glGetConvolutionParameterfvEXT = epoxy_glGetConvolutionParameterfvEXT_dispatch_table_thunk; + epoxy_glGetConvolutionParameteriv = epoxy_glGetConvolutionParameteriv_dispatch_table_thunk; + epoxy_glGetConvolutionParameterivEXT = epoxy_glGetConvolutionParameterivEXT_dispatch_table_thunk; + epoxy_glGetConvolutionParameterxvOES = epoxy_glGetConvolutionParameterxvOES_dispatch_table_thunk; + epoxy_glGetCoverageModulationTableNV = epoxy_glGetCoverageModulationTableNV_dispatch_table_thunk; + epoxy_glGetDebugMessageLog = epoxy_glGetDebugMessageLog_dispatch_table_thunk; + epoxy_glGetDebugMessageLogAMD = epoxy_glGetDebugMessageLogAMD_dispatch_table_thunk; + epoxy_glGetDebugMessageLogARB = epoxy_glGetDebugMessageLogARB_dispatch_table_thunk; + epoxy_glGetDebugMessageLogKHR = epoxy_glGetDebugMessageLogKHR_dispatch_table_thunk; + epoxy_glGetDetailTexFuncSGIS = epoxy_glGetDetailTexFuncSGIS_dispatch_table_thunk; + epoxy_glGetDoubleIndexedvEXT = epoxy_glGetDoubleIndexedvEXT_dispatch_table_thunk; + epoxy_glGetDoublei_v = epoxy_glGetDoublei_v_dispatch_table_thunk; + epoxy_glGetDoublei_vEXT = epoxy_glGetDoublei_vEXT_dispatch_table_thunk; + epoxy_glGetDoublev = epoxy_glGetDoublev_dispatch_table_thunk; + epoxy_glGetDriverControlStringQCOM = epoxy_glGetDriverControlStringQCOM_dispatch_table_thunk; + epoxy_glGetDriverControlsQCOM = epoxy_glGetDriverControlsQCOM_dispatch_table_thunk; + epoxy_glGetError = epoxy_glGetError_dispatch_table_thunk; + epoxy_glGetFenceivNV = epoxy_glGetFenceivNV_dispatch_table_thunk; + epoxy_glGetFinalCombinerInputParameterfvNV = epoxy_glGetFinalCombinerInputParameterfvNV_dispatch_table_thunk; + epoxy_glGetFinalCombinerInputParameterivNV = epoxy_glGetFinalCombinerInputParameterivNV_dispatch_table_thunk; + epoxy_glGetFirstPerfQueryIdINTEL = epoxy_glGetFirstPerfQueryIdINTEL_dispatch_table_thunk; + epoxy_glGetFixedv = epoxy_glGetFixedv_dispatch_table_thunk; + epoxy_glGetFixedvOES = epoxy_glGetFixedvOES_dispatch_table_thunk; + epoxy_glGetFloatIndexedvEXT = epoxy_glGetFloatIndexedvEXT_dispatch_table_thunk; + epoxy_glGetFloati_v = epoxy_glGetFloati_v_dispatch_table_thunk; + epoxy_glGetFloati_vEXT = epoxy_glGetFloati_vEXT_dispatch_table_thunk; + epoxy_glGetFloati_vNV = epoxy_glGetFloati_vNV_dispatch_table_thunk; + epoxy_glGetFloatv = epoxy_glGetFloatv_dispatch_table_thunk; + epoxy_glGetFogFuncSGIS = epoxy_glGetFogFuncSGIS_dispatch_table_thunk; + epoxy_glGetFragDataIndex = epoxy_glGetFragDataIndex_dispatch_table_thunk; + epoxy_glGetFragDataIndexEXT = epoxy_glGetFragDataIndexEXT_dispatch_table_thunk; + epoxy_glGetFragDataLocation = epoxy_glGetFragDataLocation_dispatch_table_thunk; + epoxy_glGetFragDataLocationEXT = epoxy_glGetFragDataLocationEXT_dispatch_table_thunk; + epoxy_glGetFragmentLightfvSGIX = epoxy_glGetFragmentLightfvSGIX_dispatch_table_thunk; + epoxy_glGetFragmentLightivSGIX = epoxy_glGetFragmentLightivSGIX_dispatch_table_thunk; + epoxy_glGetFragmentMaterialfvSGIX = epoxy_glGetFragmentMaterialfvSGIX_dispatch_table_thunk; + epoxy_glGetFragmentMaterialivSGIX = epoxy_glGetFragmentMaterialivSGIX_dispatch_table_thunk; + epoxy_glGetFramebufferAttachmentParameteriv = epoxy_glGetFramebufferAttachmentParameteriv_dispatch_table_thunk; + epoxy_glGetFramebufferAttachmentParameterivEXT = epoxy_glGetFramebufferAttachmentParameterivEXT_dispatch_table_thunk; + epoxy_glGetFramebufferAttachmentParameterivOES = epoxy_glGetFramebufferAttachmentParameterivOES_dispatch_table_thunk; + epoxy_glGetFramebufferParameteriv = epoxy_glGetFramebufferParameteriv_dispatch_table_thunk; + epoxy_glGetFramebufferParameterivEXT = epoxy_glGetFramebufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatus = epoxy_glGetGraphicsResetStatus_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatusARB = epoxy_glGetGraphicsResetStatusARB_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatusEXT = epoxy_glGetGraphicsResetStatusEXT_dispatch_table_thunk; + epoxy_glGetGraphicsResetStatusKHR = epoxy_glGetGraphicsResetStatusKHR_dispatch_table_thunk; + epoxy_glGetHandleARB = epoxy_glGetHandleARB_dispatch_table_thunk; + epoxy_glGetHistogram = epoxy_glGetHistogram_dispatch_table_thunk; + epoxy_glGetHistogramEXT = epoxy_glGetHistogramEXT_dispatch_table_thunk; + epoxy_glGetHistogramParameterfv = epoxy_glGetHistogramParameterfv_dispatch_table_thunk; + epoxy_glGetHistogramParameterfvEXT = epoxy_glGetHistogramParameterfvEXT_dispatch_table_thunk; + epoxy_glGetHistogramParameteriv = epoxy_glGetHistogramParameteriv_dispatch_table_thunk; + epoxy_glGetHistogramParameterivEXT = epoxy_glGetHistogramParameterivEXT_dispatch_table_thunk; + epoxy_glGetHistogramParameterxvOES = epoxy_glGetHistogramParameterxvOES_dispatch_table_thunk; + epoxy_glGetImageHandleARB = epoxy_glGetImageHandleARB_dispatch_table_thunk; + epoxy_glGetImageHandleNV = epoxy_glGetImageHandleNV_dispatch_table_thunk; + epoxy_glGetImageTransformParameterfvHP = epoxy_glGetImageTransformParameterfvHP_dispatch_table_thunk; + epoxy_glGetImageTransformParameterivHP = epoxy_glGetImageTransformParameterivHP_dispatch_table_thunk; + epoxy_glGetInfoLogARB = epoxy_glGetInfoLogARB_dispatch_table_thunk; + epoxy_glGetInstrumentsSGIX = epoxy_glGetInstrumentsSGIX_dispatch_table_thunk; + epoxy_glGetInteger64i_v = epoxy_glGetInteger64i_v_dispatch_table_thunk; + epoxy_glGetInteger64v = epoxy_glGetInteger64v_dispatch_table_thunk; + epoxy_glGetInteger64vAPPLE = epoxy_glGetInteger64vAPPLE_dispatch_table_thunk; + epoxy_glGetIntegerIndexedvEXT = epoxy_glGetIntegerIndexedvEXT_dispatch_table_thunk; + epoxy_glGetIntegeri_v = epoxy_glGetIntegeri_v_dispatch_table_thunk; + epoxy_glGetIntegeri_vEXT = epoxy_glGetIntegeri_vEXT_dispatch_table_thunk; + epoxy_glGetIntegerui64i_vNV = epoxy_glGetIntegerui64i_vNV_dispatch_table_thunk; + epoxy_glGetIntegerui64vNV = epoxy_glGetIntegerui64vNV_dispatch_table_thunk; + epoxy_glGetIntegerv = epoxy_glGetIntegerv_dispatch_table_thunk; + epoxy_glGetInternalformatSampleivNV = epoxy_glGetInternalformatSampleivNV_dispatch_table_thunk; + epoxy_glGetInternalformati64v = epoxy_glGetInternalformati64v_dispatch_table_thunk; + epoxy_glGetInternalformativ = epoxy_glGetInternalformativ_dispatch_table_thunk; + epoxy_glGetInvariantBooleanvEXT = epoxy_glGetInvariantBooleanvEXT_dispatch_table_thunk; + epoxy_glGetInvariantFloatvEXT = epoxy_glGetInvariantFloatvEXT_dispatch_table_thunk; + epoxy_glGetInvariantIntegervEXT = epoxy_glGetInvariantIntegervEXT_dispatch_table_thunk; + epoxy_glGetLightfv = epoxy_glGetLightfv_dispatch_table_thunk; + epoxy_glGetLightiv = epoxy_glGetLightiv_dispatch_table_thunk; + epoxy_glGetLightxOES = epoxy_glGetLightxOES_dispatch_table_thunk; + epoxy_glGetLightxv = epoxy_glGetLightxv_dispatch_table_thunk; + epoxy_glGetLightxvOES = epoxy_glGetLightxvOES_dispatch_table_thunk; + epoxy_glGetListParameterfvSGIX = epoxy_glGetListParameterfvSGIX_dispatch_table_thunk; + epoxy_glGetListParameterivSGIX = epoxy_glGetListParameterivSGIX_dispatch_table_thunk; + epoxy_glGetLocalConstantBooleanvEXT = epoxy_glGetLocalConstantBooleanvEXT_dispatch_table_thunk; + epoxy_glGetLocalConstantFloatvEXT = epoxy_glGetLocalConstantFloatvEXT_dispatch_table_thunk; + epoxy_glGetLocalConstantIntegervEXT = epoxy_glGetLocalConstantIntegervEXT_dispatch_table_thunk; + epoxy_glGetMapAttribParameterfvNV = epoxy_glGetMapAttribParameterfvNV_dispatch_table_thunk; + epoxy_glGetMapAttribParameterivNV = epoxy_glGetMapAttribParameterivNV_dispatch_table_thunk; + epoxy_glGetMapControlPointsNV = epoxy_glGetMapControlPointsNV_dispatch_table_thunk; + epoxy_glGetMapParameterfvNV = epoxy_glGetMapParameterfvNV_dispatch_table_thunk; + epoxy_glGetMapParameterivNV = epoxy_glGetMapParameterivNV_dispatch_table_thunk; + epoxy_glGetMapdv = epoxy_glGetMapdv_dispatch_table_thunk; + epoxy_glGetMapfv = epoxy_glGetMapfv_dispatch_table_thunk; + epoxy_glGetMapiv = epoxy_glGetMapiv_dispatch_table_thunk; + epoxy_glGetMapxvOES = epoxy_glGetMapxvOES_dispatch_table_thunk; + epoxy_glGetMaterialfv = epoxy_glGetMaterialfv_dispatch_table_thunk; + epoxy_glGetMaterialiv = epoxy_glGetMaterialiv_dispatch_table_thunk; + epoxy_glGetMaterialxOES = epoxy_glGetMaterialxOES_dispatch_table_thunk; + epoxy_glGetMaterialxv = epoxy_glGetMaterialxv_dispatch_table_thunk; + epoxy_glGetMaterialxvOES = epoxy_glGetMaterialxvOES_dispatch_table_thunk; + epoxy_glGetMinmax = epoxy_glGetMinmax_dispatch_table_thunk; + epoxy_glGetMinmaxEXT = epoxy_glGetMinmaxEXT_dispatch_table_thunk; + epoxy_glGetMinmaxParameterfv = epoxy_glGetMinmaxParameterfv_dispatch_table_thunk; + epoxy_glGetMinmaxParameterfvEXT = epoxy_glGetMinmaxParameterfvEXT_dispatch_table_thunk; + epoxy_glGetMinmaxParameteriv = epoxy_glGetMinmaxParameteriv_dispatch_table_thunk; + epoxy_glGetMinmaxParameterivEXT = epoxy_glGetMinmaxParameterivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexEnvfvEXT = epoxy_glGetMultiTexEnvfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexEnvivEXT = epoxy_glGetMultiTexEnvivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexGendvEXT = epoxy_glGetMultiTexGendvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexGenfvEXT = epoxy_glGetMultiTexGenfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexGenivEXT = epoxy_glGetMultiTexGenivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexImageEXT = epoxy_glGetMultiTexImageEXT_dispatch_table_thunk; + epoxy_glGetMultiTexLevelParameterfvEXT = epoxy_glGetMultiTexLevelParameterfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexLevelParameterivEXT = epoxy_glGetMultiTexLevelParameterivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterIivEXT = epoxy_glGetMultiTexParameterIivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterIuivEXT = epoxy_glGetMultiTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterfvEXT = epoxy_glGetMultiTexParameterfvEXT_dispatch_table_thunk; + epoxy_glGetMultiTexParameterivEXT = epoxy_glGetMultiTexParameterivEXT_dispatch_table_thunk; + epoxy_glGetMultisamplefv = epoxy_glGetMultisamplefv_dispatch_table_thunk; + epoxy_glGetMultisamplefvNV = epoxy_glGetMultisamplefvNV_dispatch_table_thunk; + epoxy_glGetNamedBufferParameteri64v = epoxy_glGetNamedBufferParameteri64v_dispatch_table_thunk; + epoxy_glGetNamedBufferParameteriv = epoxy_glGetNamedBufferParameteriv_dispatch_table_thunk; + epoxy_glGetNamedBufferParameterivEXT = epoxy_glGetNamedBufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedBufferParameterui64vNV = epoxy_glGetNamedBufferParameterui64vNV_dispatch_table_thunk; + epoxy_glGetNamedBufferPointerv = epoxy_glGetNamedBufferPointerv_dispatch_table_thunk; + epoxy_glGetNamedBufferPointervEXT = epoxy_glGetNamedBufferPointervEXT_dispatch_table_thunk; + epoxy_glGetNamedBufferSubData = epoxy_glGetNamedBufferSubData_dispatch_table_thunk; + epoxy_glGetNamedBufferSubDataEXT = epoxy_glGetNamedBufferSubDataEXT_dispatch_table_thunk; + epoxy_glGetNamedFramebufferAttachmentParameteriv = epoxy_glGetNamedFramebufferAttachmentParameteriv_dispatch_table_thunk; + epoxy_glGetNamedFramebufferAttachmentParameterivEXT = epoxy_glGetNamedFramebufferAttachmentParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedFramebufferParameteriv = epoxy_glGetNamedFramebufferParameteriv_dispatch_table_thunk; + epoxy_glGetNamedFramebufferParameterivEXT = epoxy_glGetNamedFramebufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterIivEXT = epoxy_glGetNamedProgramLocalParameterIivEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterIuivEXT = epoxy_glGetNamedProgramLocalParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterdvEXT = epoxy_glGetNamedProgramLocalParameterdvEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramLocalParameterfvEXT = epoxy_glGetNamedProgramLocalParameterfvEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramStringEXT = epoxy_glGetNamedProgramStringEXT_dispatch_table_thunk; + epoxy_glGetNamedProgramivEXT = epoxy_glGetNamedProgramivEXT_dispatch_table_thunk; + epoxy_glGetNamedRenderbufferParameteriv = epoxy_glGetNamedRenderbufferParameteriv_dispatch_table_thunk; + epoxy_glGetNamedRenderbufferParameterivEXT = epoxy_glGetNamedRenderbufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetNamedStringARB = epoxy_glGetNamedStringARB_dispatch_table_thunk; + epoxy_glGetNamedStringivARB = epoxy_glGetNamedStringivARB_dispatch_table_thunk; + epoxy_glGetNextPerfQueryIdINTEL = epoxy_glGetNextPerfQueryIdINTEL_dispatch_table_thunk; + epoxy_glGetObjectBufferfvATI = epoxy_glGetObjectBufferfvATI_dispatch_table_thunk; + epoxy_glGetObjectBufferivATI = epoxy_glGetObjectBufferivATI_dispatch_table_thunk; + epoxy_glGetObjectLabel = epoxy_glGetObjectLabel_dispatch_table_thunk; + epoxy_glGetObjectLabelEXT = epoxy_glGetObjectLabelEXT_dispatch_table_thunk; + epoxy_glGetObjectLabelKHR = epoxy_glGetObjectLabelKHR_dispatch_table_thunk; + epoxy_glGetObjectParameterfvARB = epoxy_glGetObjectParameterfvARB_dispatch_table_thunk; + epoxy_glGetObjectParameterivAPPLE = epoxy_glGetObjectParameterivAPPLE_dispatch_table_thunk; + epoxy_glGetObjectParameterivARB = epoxy_glGetObjectParameterivARB_dispatch_table_thunk; + epoxy_glGetObjectPtrLabel = epoxy_glGetObjectPtrLabel_dispatch_table_thunk; + epoxy_glGetObjectPtrLabelKHR = epoxy_glGetObjectPtrLabelKHR_dispatch_table_thunk; + epoxy_glGetOcclusionQueryivNV = epoxy_glGetOcclusionQueryivNV_dispatch_table_thunk; + epoxy_glGetOcclusionQueryuivNV = epoxy_glGetOcclusionQueryuivNV_dispatch_table_thunk; + epoxy_glGetPathColorGenfvNV = epoxy_glGetPathColorGenfvNV_dispatch_table_thunk; + epoxy_glGetPathColorGenivNV = epoxy_glGetPathColorGenivNV_dispatch_table_thunk; + epoxy_glGetPathCommandsNV = epoxy_glGetPathCommandsNV_dispatch_table_thunk; + epoxy_glGetPathCoordsNV = epoxy_glGetPathCoordsNV_dispatch_table_thunk; + epoxy_glGetPathDashArrayNV = epoxy_glGetPathDashArrayNV_dispatch_table_thunk; + epoxy_glGetPathLengthNV = epoxy_glGetPathLengthNV_dispatch_table_thunk; + epoxy_glGetPathMetricRangeNV = epoxy_glGetPathMetricRangeNV_dispatch_table_thunk; + epoxy_glGetPathMetricsNV = epoxy_glGetPathMetricsNV_dispatch_table_thunk; + epoxy_glGetPathParameterfvNV = epoxy_glGetPathParameterfvNV_dispatch_table_thunk; + epoxy_glGetPathParameterivNV = epoxy_glGetPathParameterivNV_dispatch_table_thunk; + epoxy_glGetPathSpacingNV = epoxy_glGetPathSpacingNV_dispatch_table_thunk; + epoxy_glGetPathTexGenfvNV = epoxy_glGetPathTexGenfvNV_dispatch_table_thunk; + epoxy_glGetPathTexGenivNV = epoxy_glGetPathTexGenivNV_dispatch_table_thunk; + epoxy_glGetPerfCounterInfoINTEL = epoxy_glGetPerfCounterInfoINTEL_dispatch_table_thunk; + epoxy_glGetPerfMonitorCounterDataAMD = epoxy_glGetPerfMonitorCounterDataAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorCounterInfoAMD = epoxy_glGetPerfMonitorCounterInfoAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorCounterStringAMD = epoxy_glGetPerfMonitorCounterStringAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorCountersAMD = epoxy_glGetPerfMonitorCountersAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorGroupStringAMD = epoxy_glGetPerfMonitorGroupStringAMD_dispatch_table_thunk; + epoxy_glGetPerfMonitorGroupsAMD = epoxy_glGetPerfMonitorGroupsAMD_dispatch_table_thunk; + epoxy_glGetPerfQueryDataINTEL = epoxy_glGetPerfQueryDataINTEL_dispatch_table_thunk; + epoxy_glGetPerfQueryIdByNameINTEL = epoxy_glGetPerfQueryIdByNameINTEL_dispatch_table_thunk; + epoxy_glGetPerfQueryInfoINTEL = epoxy_glGetPerfQueryInfoINTEL_dispatch_table_thunk; + epoxy_glGetPixelMapfv = epoxy_glGetPixelMapfv_dispatch_table_thunk; + epoxy_glGetPixelMapuiv = epoxy_glGetPixelMapuiv_dispatch_table_thunk; + epoxy_glGetPixelMapusv = epoxy_glGetPixelMapusv_dispatch_table_thunk; + epoxy_glGetPixelMapxv = epoxy_glGetPixelMapxv_dispatch_table_thunk; + epoxy_glGetPixelTexGenParameterfvSGIS = epoxy_glGetPixelTexGenParameterfvSGIS_dispatch_table_thunk; + epoxy_glGetPixelTexGenParameterivSGIS = epoxy_glGetPixelTexGenParameterivSGIS_dispatch_table_thunk; + epoxy_glGetPixelTransformParameterfvEXT = epoxy_glGetPixelTransformParameterfvEXT_dispatch_table_thunk; + epoxy_glGetPixelTransformParameterivEXT = epoxy_glGetPixelTransformParameterivEXT_dispatch_table_thunk; + epoxy_glGetPointerIndexedvEXT = epoxy_glGetPointerIndexedvEXT_dispatch_table_thunk; + epoxy_glGetPointeri_vEXT = epoxy_glGetPointeri_vEXT_dispatch_table_thunk; + epoxy_glGetPointerv = epoxy_glGetPointerv_dispatch_table_thunk; + epoxy_glGetPointervEXT = epoxy_glGetPointervEXT_dispatch_table_thunk; + epoxy_glGetPointervKHR = epoxy_glGetPointervKHR_dispatch_table_thunk; + epoxy_glGetPolygonStipple = epoxy_glGetPolygonStipple_dispatch_table_thunk; + epoxy_glGetProgramBinary = epoxy_glGetProgramBinary_dispatch_table_thunk; + epoxy_glGetProgramBinaryOES = epoxy_glGetProgramBinaryOES_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterIivNV = epoxy_glGetProgramEnvParameterIivNV_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterIuivNV = epoxy_glGetProgramEnvParameterIuivNV_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterdvARB = epoxy_glGetProgramEnvParameterdvARB_dispatch_table_thunk; + epoxy_glGetProgramEnvParameterfvARB = epoxy_glGetProgramEnvParameterfvARB_dispatch_table_thunk; + epoxy_glGetProgramInfoLog = epoxy_glGetProgramInfoLog_dispatch_table_thunk; + epoxy_glGetProgramInterfaceiv = epoxy_glGetProgramInterfaceiv_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterIivNV = epoxy_glGetProgramLocalParameterIivNV_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterIuivNV = epoxy_glGetProgramLocalParameterIuivNV_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterdvARB = epoxy_glGetProgramLocalParameterdvARB_dispatch_table_thunk; + epoxy_glGetProgramLocalParameterfvARB = epoxy_glGetProgramLocalParameterfvARB_dispatch_table_thunk; + epoxy_glGetProgramNamedParameterdvNV = epoxy_glGetProgramNamedParameterdvNV_dispatch_table_thunk; + epoxy_glGetProgramNamedParameterfvNV = epoxy_glGetProgramNamedParameterfvNV_dispatch_table_thunk; + epoxy_glGetProgramParameterdvNV = epoxy_glGetProgramParameterdvNV_dispatch_table_thunk; + epoxy_glGetProgramParameterfvNV = epoxy_glGetProgramParameterfvNV_dispatch_table_thunk; + epoxy_glGetProgramPipelineInfoLog = epoxy_glGetProgramPipelineInfoLog_dispatch_table_thunk; + epoxy_glGetProgramPipelineInfoLogEXT = epoxy_glGetProgramPipelineInfoLogEXT_dispatch_table_thunk; + epoxy_glGetProgramPipelineiv = epoxy_glGetProgramPipelineiv_dispatch_table_thunk; + epoxy_glGetProgramPipelineivEXT = epoxy_glGetProgramPipelineivEXT_dispatch_table_thunk; + epoxy_glGetProgramResourceIndex = epoxy_glGetProgramResourceIndex_dispatch_table_thunk; + epoxy_glGetProgramResourceLocation = epoxy_glGetProgramResourceLocation_dispatch_table_thunk; + epoxy_glGetProgramResourceLocationIndex = epoxy_glGetProgramResourceLocationIndex_dispatch_table_thunk; + epoxy_glGetProgramResourceLocationIndexEXT = epoxy_glGetProgramResourceLocationIndexEXT_dispatch_table_thunk; + epoxy_glGetProgramResourceName = epoxy_glGetProgramResourceName_dispatch_table_thunk; + epoxy_glGetProgramResourcefvNV = epoxy_glGetProgramResourcefvNV_dispatch_table_thunk; + epoxy_glGetProgramResourceiv = epoxy_glGetProgramResourceiv_dispatch_table_thunk; + epoxy_glGetProgramStageiv = epoxy_glGetProgramStageiv_dispatch_table_thunk; + epoxy_glGetProgramStringARB = epoxy_glGetProgramStringARB_dispatch_table_thunk; + epoxy_glGetProgramStringNV = epoxy_glGetProgramStringNV_dispatch_table_thunk; + epoxy_glGetProgramSubroutineParameteruivNV = epoxy_glGetProgramSubroutineParameteruivNV_dispatch_table_thunk; + epoxy_glGetProgramiv = epoxy_glGetProgramiv_dispatch_table_thunk; + epoxy_glGetProgramivARB = epoxy_glGetProgramivARB_dispatch_table_thunk; + epoxy_glGetProgramivNV = epoxy_glGetProgramivNV_dispatch_table_thunk; + epoxy_glGetQueryBufferObjecti64v = epoxy_glGetQueryBufferObjecti64v_dispatch_table_thunk; + epoxy_glGetQueryBufferObjectiv = epoxy_glGetQueryBufferObjectiv_dispatch_table_thunk; + epoxy_glGetQueryBufferObjectui64v = epoxy_glGetQueryBufferObjectui64v_dispatch_table_thunk; + epoxy_glGetQueryBufferObjectuiv = epoxy_glGetQueryBufferObjectuiv_dispatch_table_thunk; + epoxy_glGetQueryIndexediv = epoxy_glGetQueryIndexediv_dispatch_table_thunk; + epoxy_glGetQueryObjecti64v = epoxy_glGetQueryObjecti64v_dispatch_table_thunk; + epoxy_glGetQueryObjecti64vEXT = epoxy_glGetQueryObjecti64vEXT_dispatch_table_thunk; + epoxy_glGetQueryObjectiv = epoxy_glGetQueryObjectiv_dispatch_table_thunk; + epoxy_glGetQueryObjectivARB = epoxy_glGetQueryObjectivARB_dispatch_table_thunk; + epoxy_glGetQueryObjectivEXT = epoxy_glGetQueryObjectivEXT_dispatch_table_thunk; + epoxy_glGetQueryObjectui64v = epoxy_glGetQueryObjectui64v_dispatch_table_thunk; + epoxy_glGetQueryObjectui64vEXT = epoxy_glGetQueryObjectui64vEXT_dispatch_table_thunk; + epoxy_glGetQueryObjectuiv = epoxy_glGetQueryObjectuiv_dispatch_table_thunk; + epoxy_glGetQueryObjectuivARB = epoxy_glGetQueryObjectuivARB_dispatch_table_thunk; + epoxy_glGetQueryObjectuivEXT = epoxy_glGetQueryObjectuivEXT_dispatch_table_thunk; + epoxy_glGetQueryiv = epoxy_glGetQueryiv_dispatch_table_thunk; + epoxy_glGetQueryivARB = epoxy_glGetQueryivARB_dispatch_table_thunk; + epoxy_glGetQueryivEXT = epoxy_glGetQueryivEXT_dispatch_table_thunk; + epoxy_glGetRenderbufferParameteriv = epoxy_glGetRenderbufferParameteriv_dispatch_table_thunk; + epoxy_glGetRenderbufferParameterivEXT = epoxy_glGetRenderbufferParameterivEXT_dispatch_table_thunk; + epoxy_glGetRenderbufferParameterivOES = epoxy_glGetRenderbufferParameterivOES_dispatch_table_thunk; + epoxy_glGetSamplerParameterIiv = epoxy_glGetSamplerParameterIiv_dispatch_table_thunk; + epoxy_glGetSamplerParameterIivEXT = epoxy_glGetSamplerParameterIivEXT_dispatch_table_thunk; + epoxy_glGetSamplerParameterIivOES = epoxy_glGetSamplerParameterIivOES_dispatch_table_thunk; + epoxy_glGetSamplerParameterIuiv = epoxy_glGetSamplerParameterIuiv_dispatch_table_thunk; + epoxy_glGetSamplerParameterIuivEXT = epoxy_glGetSamplerParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetSamplerParameterIuivOES = epoxy_glGetSamplerParameterIuivOES_dispatch_table_thunk; + epoxy_glGetSamplerParameterfv = epoxy_glGetSamplerParameterfv_dispatch_table_thunk; + epoxy_glGetSamplerParameteriv = epoxy_glGetSamplerParameteriv_dispatch_table_thunk; + epoxy_glGetSeparableFilter = epoxy_glGetSeparableFilter_dispatch_table_thunk; + epoxy_glGetSeparableFilterEXT = epoxy_glGetSeparableFilterEXT_dispatch_table_thunk; + epoxy_glGetShaderInfoLog = epoxy_glGetShaderInfoLog_dispatch_table_thunk; + epoxy_glGetShaderPrecisionFormat = epoxy_glGetShaderPrecisionFormat_dispatch_table_thunk; + epoxy_glGetShaderSource = epoxy_glGetShaderSource_dispatch_table_thunk; + epoxy_glGetShaderSourceARB = epoxy_glGetShaderSourceARB_dispatch_table_thunk; + epoxy_glGetShaderiv = epoxy_glGetShaderiv_dispatch_table_thunk; + epoxy_glGetSharpenTexFuncSGIS = epoxy_glGetSharpenTexFuncSGIS_dispatch_table_thunk; + epoxy_glGetStageIndexNV = epoxy_glGetStageIndexNV_dispatch_table_thunk; + epoxy_glGetString = epoxy_glGetString_dispatch_table_thunk; + epoxy_glGetStringi = epoxy_glGetStringi_dispatch_table_thunk; + epoxy_glGetSubroutineIndex = epoxy_glGetSubroutineIndex_dispatch_table_thunk; + epoxy_glGetSubroutineUniformLocation = epoxy_glGetSubroutineUniformLocation_dispatch_table_thunk; + epoxy_glGetSynciv = epoxy_glGetSynciv_dispatch_table_thunk; + epoxy_glGetSyncivAPPLE = epoxy_glGetSyncivAPPLE_dispatch_table_thunk; + epoxy_glGetTexBumpParameterfvATI = epoxy_glGetTexBumpParameterfvATI_dispatch_table_thunk; + epoxy_glGetTexBumpParameterivATI = epoxy_glGetTexBumpParameterivATI_dispatch_table_thunk; + epoxy_glGetTexEnvfv = epoxy_glGetTexEnvfv_dispatch_table_thunk; + epoxy_glGetTexEnviv = epoxy_glGetTexEnviv_dispatch_table_thunk; + epoxy_glGetTexEnvxv = epoxy_glGetTexEnvxv_dispatch_table_thunk; + epoxy_glGetTexEnvxvOES = epoxy_glGetTexEnvxvOES_dispatch_table_thunk; + epoxy_glGetTexFilterFuncSGIS = epoxy_glGetTexFilterFuncSGIS_dispatch_table_thunk; + epoxy_glGetTexGendv = epoxy_glGetTexGendv_dispatch_table_thunk; + epoxy_glGetTexGenfv = epoxy_glGetTexGenfv_dispatch_table_thunk; + epoxy_glGetTexGenfvOES = epoxy_glGetTexGenfvOES_dispatch_table_thunk; + epoxy_glGetTexGeniv = epoxy_glGetTexGeniv_dispatch_table_thunk; + epoxy_glGetTexGenivOES = epoxy_glGetTexGenivOES_dispatch_table_thunk; + epoxy_glGetTexGenxvOES = epoxy_glGetTexGenxvOES_dispatch_table_thunk; + epoxy_glGetTexImage = epoxy_glGetTexImage_dispatch_table_thunk; + epoxy_glGetTexLevelParameterfv = epoxy_glGetTexLevelParameterfv_dispatch_table_thunk; + epoxy_glGetTexLevelParameteriv = epoxy_glGetTexLevelParameteriv_dispatch_table_thunk; + epoxy_glGetTexLevelParameterxvOES = epoxy_glGetTexLevelParameterxvOES_dispatch_table_thunk; + epoxy_glGetTexParameterIiv = epoxy_glGetTexParameterIiv_dispatch_table_thunk; + epoxy_glGetTexParameterIivEXT = epoxy_glGetTexParameterIivEXT_dispatch_table_thunk; + epoxy_glGetTexParameterIivOES = epoxy_glGetTexParameterIivOES_dispatch_table_thunk; + epoxy_glGetTexParameterIuiv = epoxy_glGetTexParameterIuiv_dispatch_table_thunk; + epoxy_glGetTexParameterIuivEXT = epoxy_glGetTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetTexParameterIuivOES = epoxy_glGetTexParameterIuivOES_dispatch_table_thunk; + epoxy_glGetTexParameterPointervAPPLE = epoxy_glGetTexParameterPointervAPPLE_dispatch_table_thunk; + epoxy_glGetTexParameterfv = epoxy_glGetTexParameterfv_dispatch_table_thunk; + epoxy_glGetTexParameteriv = epoxy_glGetTexParameteriv_dispatch_table_thunk; + epoxy_glGetTexParameterxv = epoxy_glGetTexParameterxv_dispatch_table_thunk; + epoxy_glGetTexParameterxvOES = epoxy_glGetTexParameterxvOES_dispatch_table_thunk; + epoxy_glGetTextureHandleARB = epoxy_glGetTextureHandleARB_dispatch_table_thunk; + epoxy_glGetTextureHandleNV = epoxy_glGetTextureHandleNV_dispatch_table_thunk; + epoxy_glGetTextureImage = epoxy_glGetTextureImage_dispatch_table_thunk; + epoxy_glGetTextureImageEXT = epoxy_glGetTextureImageEXT_dispatch_table_thunk; + epoxy_glGetTextureLevelParameterfv = epoxy_glGetTextureLevelParameterfv_dispatch_table_thunk; + epoxy_glGetTextureLevelParameterfvEXT = epoxy_glGetTextureLevelParameterfvEXT_dispatch_table_thunk; + epoxy_glGetTextureLevelParameteriv = epoxy_glGetTextureLevelParameteriv_dispatch_table_thunk; + epoxy_glGetTextureLevelParameterivEXT = epoxy_glGetTextureLevelParameterivEXT_dispatch_table_thunk; + epoxy_glGetTextureParameterIiv = epoxy_glGetTextureParameterIiv_dispatch_table_thunk; + epoxy_glGetTextureParameterIivEXT = epoxy_glGetTextureParameterIivEXT_dispatch_table_thunk; + epoxy_glGetTextureParameterIuiv = epoxy_glGetTextureParameterIuiv_dispatch_table_thunk; + epoxy_glGetTextureParameterIuivEXT = epoxy_glGetTextureParameterIuivEXT_dispatch_table_thunk; + epoxy_glGetTextureParameterfv = epoxy_glGetTextureParameterfv_dispatch_table_thunk; + epoxy_glGetTextureParameterfvEXT = epoxy_glGetTextureParameterfvEXT_dispatch_table_thunk; + epoxy_glGetTextureParameteriv = epoxy_glGetTextureParameteriv_dispatch_table_thunk; + epoxy_glGetTextureParameterivEXT = epoxy_glGetTextureParameterivEXT_dispatch_table_thunk; + epoxy_glGetTextureSamplerHandleARB = epoxy_glGetTextureSamplerHandleARB_dispatch_table_thunk; + epoxy_glGetTextureSamplerHandleNV = epoxy_glGetTextureSamplerHandleNV_dispatch_table_thunk; + epoxy_glGetTextureSubImage = epoxy_glGetTextureSubImage_dispatch_table_thunk; + epoxy_glGetTrackMatrixivNV = epoxy_glGetTrackMatrixivNV_dispatch_table_thunk; + epoxy_glGetTransformFeedbackVarying = epoxy_glGetTransformFeedbackVarying_dispatch_table_thunk; + epoxy_glGetTransformFeedbackVaryingEXT = epoxy_glGetTransformFeedbackVaryingEXT_dispatch_table_thunk; + epoxy_glGetTransformFeedbackVaryingNV = epoxy_glGetTransformFeedbackVaryingNV_dispatch_table_thunk; + epoxy_glGetTransformFeedbacki64_v = epoxy_glGetTransformFeedbacki64_v_dispatch_table_thunk; + epoxy_glGetTransformFeedbacki_v = epoxy_glGetTransformFeedbacki_v_dispatch_table_thunk; + epoxy_glGetTransformFeedbackiv = epoxy_glGetTransformFeedbackiv_dispatch_table_thunk; + epoxy_glGetTranslatedShaderSourceANGLE = epoxy_glGetTranslatedShaderSourceANGLE_dispatch_table_thunk; + epoxy_glGetUniformBlockIndex = epoxy_glGetUniformBlockIndex_dispatch_table_thunk; + epoxy_glGetUniformBufferSizeEXT = epoxy_glGetUniformBufferSizeEXT_dispatch_table_thunk; + epoxy_glGetUniformIndices = epoxy_glGetUniformIndices_dispatch_table_thunk; + epoxy_glGetUniformLocation = epoxy_glGetUniformLocation_dispatch_table_thunk; + epoxy_glGetUniformLocationARB = epoxy_glGetUniformLocationARB_dispatch_table_thunk; + epoxy_glGetUniformOffsetEXT = epoxy_glGetUniformOffsetEXT_dispatch_table_thunk; + epoxy_glGetUniformSubroutineuiv = epoxy_glGetUniformSubroutineuiv_dispatch_table_thunk; + epoxy_glGetUniformdv = epoxy_glGetUniformdv_dispatch_table_thunk; + epoxy_glGetUniformfv = epoxy_glGetUniformfv_dispatch_table_thunk; + epoxy_glGetUniformfvARB = epoxy_glGetUniformfvARB_dispatch_table_thunk; + epoxy_glGetUniformi64vARB = epoxy_glGetUniformi64vARB_dispatch_table_thunk; + epoxy_glGetUniformi64vNV = epoxy_glGetUniformi64vNV_dispatch_table_thunk; + epoxy_glGetUniformiv = epoxy_glGetUniformiv_dispatch_table_thunk; + epoxy_glGetUniformivARB = epoxy_glGetUniformivARB_dispatch_table_thunk; + epoxy_glGetUniformui64vARB = epoxy_glGetUniformui64vARB_dispatch_table_thunk; + epoxy_glGetUniformui64vNV = epoxy_glGetUniformui64vNV_dispatch_table_thunk; + epoxy_glGetUniformuiv = epoxy_glGetUniformuiv_dispatch_table_thunk; + epoxy_glGetUniformuivEXT = epoxy_glGetUniformuivEXT_dispatch_table_thunk; + epoxy_glGetVariantArrayObjectfvATI = epoxy_glGetVariantArrayObjectfvATI_dispatch_table_thunk; + epoxy_glGetVariantArrayObjectivATI = epoxy_glGetVariantArrayObjectivATI_dispatch_table_thunk; + epoxy_glGetVariantBooleanvEXT = epoxy_glGetVariantBooleanvEXT_dispatch_table_thunk; + epoxy_glGetVariantFloatvEXT = epoxy_glGetVariantFloatvEXT_dispatch_table_thunk; + epoxy_glGetVariantIntegervEXT = epoxy_glGetVariantIntegervEXT_dispatch_table_thunk; + epoxy_glGetVariantPointervEXT = epoxy_glGetVariantPointervEXT_dispatch_table_thunk; + epoxy_glGetVaryingLocationNV = epoxy_glGetVaryingLocationNV_dispatch_table_thunk; + epoxy_glGetVertexArrayIndexed64iv = epoxy_glGetVertexArrayIndexed64iv_dispatch_table_thunk; + epoxy_glGetVertexArrayIndexediv = epoxy_glGetVertexArrayIndexediv_dispatch_table_thunk; + epoxy_glGetVertexArrayIntegeri_vEXT = epoxy_glGetVertexArrayIntegeri_vEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayIntegervEXT = epoxy_glGetVertexArrayIntegervEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayPointeri_vEXT = epoxy_glGetVertexArrayPointeri_vEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayPointervEXT = epoxy_glGetVertexArrayPointervEXT_dispatch_table_thunk; + epoxy_glGetVertexArrayiv = epoxy_glGetVertexArrayiv_dispatch_table_thunk; + epoxy_glGetVertexAttribArrayObjectfvATI = epoxy_glGetVertexAttribArrayObjectfvATI_dispatch_table_thunk; + epoxy_glGetVertexAttribArrayObjectivATI = epoxy_glGetVertexAttribArrayObjectivATI_dispatch_table_thunk; + epoxy_glGetVertexAttribIiv = epoxy_glGetVertexAttribIiv_dispatch_table_thunk; + epoxy_glGetVertexAttribIivEXT = epoxy_glGetVertexAttribIivEXT_dispatch_table_thunk; + epoxy_glGetVertexAttribIuiv = epoxy_glGetVertexAttribIuiv_dispatch_table_thunk; + epoxy_glGetVertexAttribIuivEXT = epoxy_glGetVertexAttribIuivEXT_dispatch_table_thunk; + epoxy_glGetVertexAttribLdv = epoxy_glGetVertexAttribLdv_dispatch_table_thunk; + epoxy_glGetVertexAttribLdvEXT = epoxy_glGetVertexAttribLdvEXT_dispatch_table_thunk; + epoxy_glGetVertexAttribLi64vNV = epoxy_glGetVertexAttribLi64vNV_dispatch_table_thunk; + epoxy_glGetVertexAttribLui64vARB = epoxy_glGetVertexAttribLui64vARB_dispatch_table_thunk; + epoxy_glGetVertexAttribLui64vNV = epoxy_glGetVertexAttribLui64vNV_dispatch_table_thunk; + epoxy_glGetVertexAttribPointerv = epoxy_glGetVertexAttribPointerv_dispatch_table_thunk; + epoxy_glGetVertexAttribPointervARB = epoxy_glGetVertexAttribPointervARB_dispatch_table_thunk; + epoxy_glGetVertexAttribPointervNV = epoxy_glGetVertexAttribPointervNV_dispatch_table_thunk; + epoxy_glGetVertexAttribdv = epoxy_glGetVertexAttribdv_dispatch_table_thunk; + epoxy_glGetVertexAttribdvARB = epoxy_glGetVertexAttribdvARB_dispatch_table_thunk; + epoxy_glGetVertexAttribdvNV = epoxy_glGetVertexAttribdvNV_dispatch_table_thunk; + epoxy_glGetVertexAttribfv = epoxy_glGetVertexAttribfv_dispatch_table_thunk; + epoxy_glGetVertexAttribfvARB = epoxy_glGetVertexAttribfvARB_dispatch_table_thunk; + epoxy_glGetVertexAttribfvNV = epoxy_glGetVertexAttribfvNV_dispatch_table_thunk; + epoxy_glGetVertexAttribiv = epoxy_glGetVertexAttribiv_dispatch_table_thunk; + epoxy_glGetVertexAttribivARB = epoxy_glGetVertexAttribivARB_dispatch_table_thunk; + epoxy_glGetVertexAttribivNV = epoxy_glGetVertexAttribivNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureStreamdvNV = epoxy_glGetVideoCaptureStreamdvNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureStreamfvNV = epoxy_glGetVideoCaptureStreamfvNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureStreamivNV = epoxy_glGetVideoCaptureStreamivNV_dispatch_table_thunk; + epoxy_glGetVideoCaptureivNV = epoxy_glGetVideoCaptureivNV_dispatch_table_thunk; + epoxy_glGetVideoi64vNV = epoxy_glGetVideoi64vNV_dispatch_table_thunk; + epoxy_glGetVideoivNV = epoxy_glGetVideoivNV_dispatch_table_thunk; + epoxy_glGetVideoui64vNV = epoxy_glGetVideoui64vNV_dispatch_table_thunk; + epoxy_glGetVideouivNV = epoxy_glGetVideouivNV_dispatch_table_thunk; + epoxy_glGetnColorTable = epoxy_glGetnColorTable_dispatch_table_thunk; + epoxy_glGetnColorTableARB = epoxy_glGetnColorTableARB_dispatch_table_thunk; + epoxy_glGetnCompressedTexImage = epoxy_glGetnCompressedTexImage_dispatch_table_thunk; + epoxy_glGetnCompressedTexImageARB = epoxy_glGetnCompressedTexImageARB_dispatch_table_thunk; + epoxy_glGetnConvolutionFilter = epoxy_glGetnConvolutionFilter_dispatch_table_thunk; + epoxy_glGetnConvolutionFilterARB = epoxy_glGetnConvolutionFilterARB_dispatch_table_thunk; + epoxy_glGetnHistogram = epoxy_glGetnHistogram_dispatch_table_thunk; + epoxy_glGetnHistogramARB = epoxy_glGetnHistogramARB_dispatch_table_thunk; + epoxy_glGetnMapdv = epoxy_glGetnMapdv_dispatch_table_thunk; + epoxy_glGetnMapdvARB = epoxy_glGetnMapdvARB_dispatch_table_thunk; + epoxy_glGetnMapfv = epoxy_glGetnMapfv_dispatch_table_thunk; + epoxy_glGetnMapfvARB = epoxy_glGetnMapfvARB_dispatch_table_thunk; + epoxy_glGetnMapiv = epoxy_glGetnMapiv_dispatch_table_thunk; + epoxy_glGetnMapivARB = epoxy_glGetnMapivARB_dispatch_table_thunk; + epoxy_glGetnMinmax = epoxy_glGetnMinmax_dispatch_table_thunk; + epoxy_glGetnMinmaxARB = epoxy_glGetnMinmaxARB_dispatch_table_thunk; + epoxy_glGetnPixelMapfv = epoxy_glGetnPixelMapfv_dispatch_table_thunk; + epoxy_glGetnPixelMapfvARB = epoxy_glGetnPixelMapfvARB_dispatch_table_thunk; + epoxy_glGetnPixelMapuiv = epoxy_glGetnPixelMapuiv_dispatch_table_thunk; + epoxy_glGetnPixelMapuivARB = epoxy_glGetnPixelMapuivARB_dispatch_table_thunk; + epoxy_glGetnPixelMapusv = epoxy_glGetnPixelMapusv_dispatch_table_thunk; + epoxy_glGetnPixelMapusvARB = epoxy_glGetnPixelMapusvARB_dispatch_table_thunk; + epoxy_glGetnPolygonStipple = epoxy_glGetnPolygonStipple_dispatch_table_thunk; + epoxy_glGetnPolygonStippleARB = epoxy_glGetnPolygonStippleARB_dispatch_table_thunk; + epoxy_glGetnSeparableFilter = epoxy_glGetnSeparableFilter_dispatch_table_thunk; + epoxy_glGetnSeparableFilterARB = epoxy_glGetnSeparableFilterARB_dispatch_table_thunk; + epoxy_glGetnTexImage = epoxy_glGetnTexImage_dispatch_table_thunk; + epoxy_glGetnTexImageARB = epoxy_glGetnTexImageARB_dispatch_table_thunk; + epoxy_glGetnUniformdv = epoxy_glGetnUniformdv_dispatch_table_thunk; + epoxy_glGetnUniformdvARB = epoxy_glGetnUniformdvARB_dispatch_table_thunk; + epoxy_glGetnUniformfv = epoxy_glGetnUniformfv_dispatch_table_thunk; + epoxy_glGetnUniformfvARB = epoxy_glGetnUniformfvARB_dispatch_table_thunk; + epoxy_glGetnUniformfvEXT = epoxy_glGetnUniformfvEXT_dispatch_table_thunk; + epoxy_glGetnUniformfvKHR = epoxy_glGetnUniformfvKHR_dispatch_table_thunk; + epoxy_glGetnUniformi64vARB = epoxy_glGetnUniformi64vARB_dispatch_table_thunk; + epoxy_glGetnUniformiv = epoxy_glGetnUniformiv_dispatch_table_thunk; + epoxy_glGetnUniformivARB = epoxy_glGetnUniformivARB_dispatch_table_thunk; + epoxy_glGetnUniformivEXT = epoxy_glGetnUniformivEXT_dispatch_table_thunk; + epoxy_glGetnUniformivKHR = epoxy_glGetnUniformivKHR_dispatch_table_thunk; + epoxy_glGetnUniformui64vARB = epoxy_glGetnUniformui64vARB_dispatch_table_thunk; + epoxy_glGetnUniformuiv = epoxy_glGetnUniformuiv_dispatch_table_thunk; + epoxy_glGetnUniformuivARB = epoxy_glGetnUniformuivARB_dispatch_table_thunk; + epoxy_glGetnUniformuivKHR = epoxy_glGetnUniformuivKHR_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorbSUN = epoxy_glGlobalAlphaFactorbSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactordSUN = epoxy_glGlobalAlphaFactordSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorfSUN = epoxy_glGlobalAlphaFactorfSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactoriSUN = epoxy_glGlobalAlphaFactoriSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorsSUN = epoxy_glGlobalAlphaFactorsSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorubSUN = epoxy_glGlobalAlphaFactorubSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactoruiSUN = epoxy_glGlobalAlphaFactoruiSUN_dispatch_table_thunk; + epoxy_glGlobalAlphaFactorusSUN = epoxy_glGlobalAlphaFactorusSUN_dispatch_table_thunk; + epoxy_glHint = epoxy_glHint_dispatch_table_thunk; + epoxy_glHintPGI = epoxy_glHintPGI_dispatch_table_thunk; + epoxy_glHistogram = epoxy_glHistogram_dispatch_table_thunk; + epoxy_glHistogramEXT = epoxy_glHistogramEXT_dispatch_table_thunk; + epoxy_glIglooInterfaceSGIX = epoxy_glIglooInterfaceSGIX_dispatch_table_thunk; + epoxy_glImageTransformParameterfHP = epoxy_glImageTransformParameterfHP_dispatch_table_thunk; + epoxy_glImageTransformParameterfvHP = epoxy_glImageTransformParameterfvHP_dispatch_table_thunk; + epoxy_glImageTransformParameteriHP = epoxy_glImageTransformParameteriHP_dispatch_table_thunk; + epoxy_glImageTransformParameterivHP = epoxy_glImageTransformParameterivHP_dispatch_table_thunk; + epoxy_glImportSyncEXT = epoxy_glImportSyncEXT_dispatch_table_thunk; + epoxy_glIndexFormatNV = epoxy_glIndexFormatNV_dispatch_table_thunk; + epoxy_glIndexFuncEXT = epoxy_glIndexFuncEXT_dispatch_table_thunk; + epoxy_glIndexMask = epoxy_glIndexMask_dispatch_table_thunk; + epoxy_glIndexMaterialEXT = epoxy_glIndexMaterialEXT_dispatch_table_thunk; + epoxy_glIndexPointer = epoxy_glIndexPointer_dispatch_table_thunk; + epoxy_glIndexPointerEXT = epoxy_glIndexPointerEXT_dispatch_table_thunk; + epoxy_glIndexPointerListIBM = epoxy_glIndexPointerListIBM_dispatch_table_thunk; + epoxy_glIndexd = epoxy_glIndexd_dispatch_table_thunk; + epoxy_glIndexdv = epoxy_glIndexdv_dispatch_table_thunk; + epoxy_glIndexf = epoxy_glIndexf_dispatch_table_thunk; + epoxy_glIndexfv = epoxy_glIndexfv_dispatch_table_thunk; + epoxy_glIndexi = epoxy_glIndexi_dispatch_table_thunk; + epoxy_glIndexiv = epoxy_glIndexiv_dispatch_table_thunk; + epoxy_glIndexs = epoxy_glIndexs_dispatch_table_thunk; + epoxy_glIndexsv = epoxy_glIndexsv_dispatch_table_thunk; + epoxy_glIndexub = epoxy_glIndexub_dispatch_table_thunk; + epoxy_glIndexubv = epoxy_glIndexubv_dispatch_table_thunk; + epoxy_glIndexxOES = epoxy_glIndexxOES_dispatch_table_thunk; + epoxy_glIndexxvOES = epoxy_glIndexxvOES_dispatch_table_thunk; + epoxy_glInitNames = epoxy_glInitNames_dispatch_table_thunk; + epoxy_glInsertComponentEXT = epoxy_glInsertComponentEXT_dispatch_table_thunk; + epoxy_glInsertEventMarkerEXT = epoxy_glInsertEventMarkerEXT_dispatch_table_thunk; + epoxy_glInstrumentsBufferSGIX = epoxy_glInstrumentsBufferSGIX_dispatch_table_thunk; + epoxy_glInterleavedArrays = epoxy_glInterleavedArrays_dispatch_table_thunk; + epoxy_glInterpolatePathsNV = epoxy_glInterpolatePathsNV_dispatch_table_thunk; + epoxy_glInvalidateBufferData = epoxy_glInvalidateBufferData_dispatch_table_thunk; + epoxy_glInvalidateBufferSubData = epoxy_glInvalidateBufferSubData_dispatch_table_thunk; + epoxy_glInvalidateFramebuffer = epoxy_glInvalidateFramebuffer_dispatch_table_thunk; + epoxy_glInvalidateNamedFramebufferData = epoxy_glInvalidateNamedFramebufferData_dispatch_table_thunk; + epoxy_glInvalidateNamedFramebufferSubData = epoxy_glInvalidateNamedFramebufferSubData_dispatch_table_thunk; + epoxy_glInvalidateSubFramebuffer = epoxy_glInvalidateSubFramebuffer_dispatch_table_thunk; + epoxy_glInvalidateTexImage = epoxy_glInvalidateTexImage_dispatch_table_thunk; + epoxy_glInvalidateTexSubImage = epoxy_glInvalidateTexSubImage_dispatch_table_thunk; + epoxy_glIsAsyncMarkerSGIX = epoxy_glIsAsyncMarkerSGIX_dispatch_table_thunk; + epoxy_glIsBuffer = epoxy_glIsBuffer_dispatch_table_thunk; + epoxy_glIsBufferARB = epoxy_glIsBufferARB_dispatch_table_thunk; + epoxy_glIsBufferResidentNV = epoxy_glIsBufferResidentNV_dispatch_table_thunk; + epoxy_glIsCommandListNV = epoxy_glIsCommandListNV_dispatch_table_thunk; + epoxy_glIsEnabled = epoxy_glIsEnabled_dispatch_table_thunk; + epoxy_glIsEnabledIndexedEXT = epoxy_glIsEnabledIndexedEXT_dispatch_table_thunk; + epoxy_glIsEnabledi = epoxy_glIsEnabledi_dispatch_table_thunk; + epoxy_glIsEnablediEXT = epoxy_glIsEnablediEXT_dispatch_table_thunk; + epoxy_glIsEnablediNV = epoxy_glIsEnablediNV_dispatch_table_thunk; + epoxy_glIsEnablediOES = epoxy_glIsEnablediOES_dispatch_table_thunk; + epoxy_glIsFenceAPPLE = epoxy_glIsFenceAPPLE_dispatch_table_thunk; + epoxy_glIsFenceNV = epoxy_glIsFenceNV_dispatch_table_thunk; + epoxy_glIsFramebuffer = epoxy_glIsFramebuffer_dispatch_table_thunk; + epoxy_glIsFramebufferEXT = epoxy_glIsFramebufferEXT_dispatch_table_thunk; + epoxy_glIsFramebufferOES = epoxy_glIsFramebufferOES_dispatch_table_thunk; + epoxy_glIsImageHandleResidentARB = epoxy_glIsImageHandleResidentARB_dispatch_table_thunk; + epoxy_glIsImageHandleResidentNV = epoxy_glIsImageHandleResidentNV_dispatch_table_thunk; + epoxy_glIsList = epoxy_glIsList_dispatch_table_thunk; + epoxy_glIsNameAMD = epoxy_glIsNameAMD_dispatch_table_thunk; + epoxy_glIsNamedBufferResidentNV = epoxy_glIsNamedBufferResidentNV_dispatch_table_thunk; + epoxy_glIsNamedStringARB = epoxy_glIsNamedStringARB_dispatch_table_thunk; + epoxy_glIsObjectBufferATI = epoxy_glIsObjectBufferATI_dispatch_table_thunk; + epoxy_glIsOcclusionQueryNV = epoxy_glIsOcclusionQueryNV_dispatch_table_thunk; + epoxy_glIsPathNV = epoxy_glIsPathNV_dispatch_table_thunk; + epoxy_glIsPointInFillPathNV = epoxy_glIsPointInFillPathNV_dispatch_table_thunk; + epoxy_glIsPointInStrokePathNV = epoxy_glIsPointInStrokePathNV_dispatch_table_thunk; + epoxy_glIsProgram = epoxy_glIsProgram_dispatch_table_thunk; + epoxy_glIsProgramARB = epoxy_glIsProgramARB_dispatch_table_thunk; + epoxy_glIsProgramNV = epoxy_glIsProgramNV_dispatch_table_thunk; + epoxy_glIsProgramPipeline = epoxy_glIsProgramPipeline_dispatch_table_thunk; + epoxy_glIsProgramPipelineEXT = epoxy_glIsProgramPipelineEXT_dispatch_table_thunk; + epoxy_glIsQuery = epoxy_glIsQuery_dispatch_table_thunk; + epoxy_glIsQueryARB = epoxy_glIsQueryARB_dispatch_table_thunk; + epoxy_glIsQueryEXT = epoxy_glIsQueryEXT_dispatch_table_thunk; + epoxy_glIsRenderbuffer = epoxy_glIsRenderbuffer_dispatch_table_thunk; + epoxy_glIsRenderbufferEXT = epoxy_glIsRenderbufferEXT_dispatch_table_thunk; + epoxy_glIsRenderbufferOES = epoxy_glIsRenderbufferOES_dispatch_table_thunk; + epoxy_glIsSampler = epoxy_glIsSampler_dispatch_table_thunk; + epoxy_glIsShader = epoxy_glIsShader_dispatch_table_thunk; + epoxy_glIsStateNV = epoxy_glIsStateNV_dispatch_table_thunk; + epoxy_glIsSync = epoxy_glIsSync_dispatch_table_thunk; + epoxy_glIsSyncAPPLE = epoxy_glIsSyncAPPLE_dispatch_table_thunk; + epoxy_glIsTexture = epoxy_glIsTexture_dispatch_table_thunk; + epoxy_glIsTextureEXT = epoxy_glIsTextureEXT_dispatch_table_thunk; + epoxy_glIsTextureHandleResidentARB = epoxy_glIsTextureHandleResidentARB_dispatch_table_thunk; + epoxy_glIsTextureHandleResidentNV = epoxy_glIsTextureHandleResidentNV_dispatch_table_thunk; + epoxy_glIsTransformFeedback = epoxy_glIsTransformFeedback_dispatch_table_thunk; + epoxy_glIsTransformFeedbackNV = epoxy_glIsTransformFeedbackNV_dispatch_table_thunk; + epoxy_glIsVariantEnabledEXT = epoxy_glIsVariantEnabledEXT_dispatch_table_thunk; + epoxy_glIsVertexArray = epoxy_glIsVertexArray_dispatch_table_thunk; + epoxy_glIsVertexArrayAPPLE = epoxy_glIsVertexArrayAPPLE_dispatch_table_thunk; + epoxy_glIsVertexArrayOES = epoxy_glIsVertexArrayOES_dispatch_table_thunk; + epoxy_glIsVertexAttribEnabledAPPLE = epoxy_glIsVertexAttribEnabledAPPLE_dispatch_table_thunk; + epoxy_glLabelObjectEXT = epoxy_glLabelObjectEXT_dispatch_table_thunk; + epoxy_glLightEnviSGIX = epoxy_glLightEnviSGIX_dispatch_table_thunk; + epoxy_glLightModelf = epoxy_glLightModelf_dispatch_table_thunk; + epoxy_glLightModelfv = epoxy_glLightModelfv_dispatch_table_thunk; + epoxy_glLightModeli = epoxy_glLightModeli_dispatch_table_thunk; + epoxy_glLightModeliv = epoxy_glLightModeliv_dispatch_table_thunk; + epoxy_glLightModelx = epoxy_glLightModelx_dispatch_table_thunk; + epoxy_glLightModelxOES = epoxy_glLightModelxOES_dispatch_table_thunk; + epoxy_glLightModelxv = epoxy_glLightModelxv_dispatch_table_thunk; + epoxy_glLightModelxvOES = epoxy_glLightModelxvOES_dispatch_table_thunk; + epoxy_glLightf = epoxy_glLightf_dispatch_table_thunk; + epoxy_glLightfv = epoxy_glLightfv_dispatch_table_thunk; + epoxy_glLighti = epoxy_glLighti_dispatch_table_thunk; + epoxy_glLightiv = epoxy_glLightiv_dispatch_table_thunk; + epoxy_glLightx = epoxy_glLightx_dispatch_table_thunk; + epoxy_glLightxOES = epoxy_glLightxOES_dispatch_table_thunk; + epoxy_glLightxv = epoxy_glLightxv_dispatch_table_thunk; + epoxy_glLightxvOES = epoxy_glLightxvOES_dispatch_table_thunk; + epoxy_glLineStipple = epoxy_glLineStipple_dispatch_table_thunk; + epoxy_glLineWidth = epoxy_glLineWidth_dispatch_table_thunk; + epoxy_glLineWidthx = epoxy_glLineWidthx_dispatch_table_thunk; + epoxy_glLineWidthxOES = epoxy_glLineWidthxOES_dispatch_table_thunk; + epoxy_glLinkProgram = epoxy_glLinkProgram_dispatch_table_thunk; + epoxy_glLinkProgramARB = epoxy_glLinkProgramARB_dispatch_table_thunk; + epoxy_glListBase = epoxy_glListBase_dispatch_table_thunk; + epoxy_glListDrawCommandsStatesClientNV = epoxy_glListDrawCommandsStatesClientNV_dispatch_table_thunk; + epoxy_glListParameterfSGIX = epoxy_glListParameterfSGIX_dispatch_table_thunk; + epoxy_glListParameterfvSGIX = epoxy_glListParameterfvSGIX_dispatch_table_thunk; + epoxy_glListParameteriSGIX = epoxy_glListParameteriSGIX_dispatch_table_thunk; + epoxy_glListParameterivSGIX = epoxy_glListParameterivSGIX_dispatch_table_thunk; + epoxy_glLoadIdentity = epoxy_glLoadIdentity_dispatch_table_thunk; + epoxy_glLoadIdentityDeformationMapSGIX = epoxy_glLoadIdentityDeformationMapSGIX_dispatch_table_thunk; + epoxy_glLoadMatrixd = epoxy_glLoadMatrixd_dispatch_table_thunk; + epoxy_glLoadMatrixf = epoxy_glLoadMatrixf_dispatch_table_thunk; + epoxy_glLoadMatrixx = epoxy_glLoadMatrixx_dispatch_table_thunk; + epoxy_glLoadMatrixxOES = epoxy_glLoadMatrixxOES_dispatch_table_thunk; + epoxy_glLoadName = epoxy_glLoadName_dispatch_table_thunk; + epoxy_glLoadPaletteFromModelViewMatrixOES = epoxy_glLoadPaletteFromModelViewMatrixOES_dispatch_table_thunk; + epoxy_glLoadProgramNV = epoxy_glLoadProgramNV_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixd = epoxy_glLoadTransposeMatrixd_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixdARB = epoxy_glLoadTransposeMatrixdARB_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixf = epoxy_glLoadTransposeMatrixf_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixfARB = epoxy_glLoadTransposeMatrixfARB_dispatch_table_thunk; + epoxy_glLoadTransposeMatrixxOES = epoxy_glLoadTransposeMatrixxOES_dispatch_table_thunk; + epoxy_glLockArraysEXT = epoxy_glLockArraysEXT_dispatch_table_thunk; + epoxy_glLogicOp = epoxy_glLogicOp_dispatch_table_thunk; + epoxy_glMakeBufferNonResidentNV = epoxy_glMakeBufferNonResidentNV_dispatch_table_thunk; + epoxy_glMakeBufferResidentNV = epoxy_glMakeBufferResidentNV_dispatch_table_thunk; + epoxy_glMakeImageHandleNonResidentARB = epoxy_glMakeImageHandleNonResidentARB_dispatch_table_thunk; + epoxy_glMakeImageHandleNonResidentNV = epoxy_glMakeImageHandleNonResidentNV_dispatch_table_thunk; + epoxy_glMakeImageHandleResidentARB = epoxy_glMakeImageHandleResidentARB_dispatch_table_thunk; + epoxy_glMakeImageHandleResidentNV = epoxy_glMakeImageHandleResidentNV_dispatch_table_thunk; + epoxy_glMakeNamedBufferNonResidentNV = epoxy_glMakeNamedBufferNonResidentNV_dispatch_table_thunk; + epoxy_glMakeNamedBufferResidentNV = epoxy_glMakeNamedBufferResidentNV_dispatch_table_thunk; + epoxy_glMakeTextureHandleNonResidentARB = epoxy_glMakeTextureHandleNonResidentARB_dispatch_table_thunk; + epoxy_glMakeTextureHandleNonResidentNV = epoxy_glMakeTextureHandleNonResidentNV_dispatch_table_thunk; + epoxy_glMakeTextureHandleResidentARB = epoxy_glMakeTextureHandleResidentARB_dispatch_table_thunk; + epoxy_glMakeTextureHandleResidentNV = epoxy_glMakeTextureHandleResidentNV_dispatch_table_thunk; + epoxy_glMap1d = epoxy_glMap1d_dispatch_table_thunk; + epoxy_glMap1f = epoxy_glMap1f_dispatch_table_thunk; + epoxy_glMap1xOES = epoxy_glMap1xOES_dispatch_table_thunk; + epoxy_glMap2d = epoxy_glMap2d_dispatch_table_thunk; + epoxy_glMap2f = epoxy_glMap2f_dispatch_table_thunk; + epoxy_glMap2xOES = epoxy_glMap2xOES_dispatch_table_thunk; + epoxy_glMapBuffer = epoxy_glMapBuffer_dispatch_table_thunk; + epoxy_glMapBufferARB = epoxy_glMapBufferARB_dispatch_table_thunk; + epoxy_glMapBufferOES = epoxy_glMapBufferOES_dispatch_table_thunk; + epoxy_glMapBufferRange = epoxy_glMapBufferRange_dispatch_table_thunk; + epoxy_glMapBufferRangeEXT = epoxy_glMapBufferRangeEXT_dispatch_table_thunk; + epoxy_glMapControlPointsNV = epoxy_glMapControlPointsNV_dispatch_table_thunk; + epoxy_glMapGrid1d = epoxy_glMapGrid1d_dispatch_table_thunk; + epoxy_glMapGrid1f = epoxy_glMapGrid1f_dispatch_table_thunk; + epoxy_glMapGrid1xOES = epoxy_glMapGrid1xOES_dispatch_table_thunk; + epoxy_glMapGrid2d = epoxy_glMapGrid2d_dispatch_table_thunk; + epoxy_glMapGrid2f = epoxy_glMapGrid2f_dispatch_table_thunk; + epoxy_glMapGrid2xOES = epoxy_glMapGrid2xOES_dispatch_table_thunk; + epoxy_glMapNamedBuffer = epoxy_glMapNamedBuffer_dispatch_table_thunk; + epoxy_glMapNamedBufferEXT = epoxy_glMapNamedBufferEXT_dispatch_table_thunk; + epoxy_glMapNamedBufferRange = epoxy_glMapNamedBufferRange_dispatch_table_thunk; + epoxy_glMapNamedBufferRangeEXT = epoxy_glMapNamedBufferRangeEXT_dispatch_table_thunk; + epoxy_glMapObjectBufferATI = epoxy_glMapObjectBufferATI_dispatch_table_thunk; + epoxy_glMapParameterfvNV = epoxy_glMapParameterfvNV_dispatch_table_thunk; + epoxy_glMapParameterivNV = epoxy_glMapParameterivNV_dispatch_table_thunk; + epoxy_glMapTexture2DINTEL = epoxy_glMapTexture2DINTEL_dispatch_table_thunk; + epoxy_glMapVertexAttrib1dAPPLE = epoxy_glMapVertexAttrib1dAPPLE_dispatch_table_thunk; + epoxy_glMapVertexAttrib1fAPPLE = epoxy_glMapVertexAttrib1fAPPLE_dispatch_table_thunk; + epoxy_glMapVertexAttrib2dAPPLE = epoxy_glMapVertexAttrib2dAPPLE_dispatch_table_thunk; + epoxy_glMapVertexAttrib2fAPPLE = epoxy_glMapVertexAttrib2fAPPLE_dispatch_table_thunk; + epoxy_glMaterialf = epoxy_glMaterialf_dispatch_table_thunk; + epoxy_glMaterialfv = epoxy_glMaterialfv_dispatch_table_thunk; + epoxy_glMateriali = epoxy_glMateriali_dispatch_table_thunk; + epoxy_glMaterialiv = epoxy_glMaterialiv_dispatch_table_thunk; + epoxy_glMaterialx = epoxy_glMaterialx_dispatch_table_thunk; + epoxy_glMaterialxOES = epoxy_glMaterialxOES_dispatch_table_thunk; + epoxy_glMaterialxv = epoxy_glMaterialxv_dispatch_table_thunk; + epoxy_glMaterialxvOES = epoxy_glMaterialxvOES_dispatch_table_thunk; + epoxy_glMatrixFrustumEXT = epoxy_glMatrixFrustumEXT_dispatch_table_thunk; + epoxy_glMatrixIndexPointerARB = epoxy_glMatrixIndexPointerARB_dispatch_table_thunk; + epoxy_glMatrixIndexPointerOES = epoxy_glMatrixIndexPointerOES_dispatch_table_thunk; + epoxy_glMatrixIndexubvARB = epoxy_glMatrixIndexubvARB_dispatch_table_thunk; + epoxy_glMatrixIndexuivARB = epoxy_glMatrixIndexuivARB_dispatch_table_thunk; + epoxy_glMatrixIndexusvARB = epoxy_glMatrixIndexusvARB_dispatch_table_thunk; + epoxy_glMatrixLoad3x2fNV = epoxy_glMatrixLoad3x2fNV_dispatch_table_thunk; + epoxy_glMatrixLoad3x3fNV = epoxy_glMatrixLoad3x3fNV_dispatch_table_thunk; + epoxy_glMatrixLoadIdentityEXT = epoxy_glMatrixLoadIdentityEXT_dispatch_table_thunk; + epoxy_glMatrixLoadTranspose3x3fNV = epoxy_glMatrixLoadTranspose3x3fNV_dispatch_table_thunk; + epoxy_glMatrixLoadTransposedEXT = epoxy_glMatrixLoadTransposedEXT_dispatch_table_thunk; + epoxy_glMatrixLoadTransposefEXT = epoxy_glMatrixLoadTransposefEXT_dispatch_table_thunk; + epoxy_glMatrixLoaddEXT = epoxy_glMatrixLoaddEXT_dispatch_table_thunk; + epoxy_glMatrixLoadfEXT = epoxy_glMatrixLoadfEXT_dispatch_table_thunk; + epoxy_glMatrixMode = epoxy_glMatrixMode_dispatch_table_thunk; + epoxy_glMatrixMult3x2fNV = epoxy_glMatrixMult3x2fNV_dispatch_table_thunk; + epoxy_glMatrixMult3x3fNV = epoxy_glMatrixMult3x3fNV_dispatch_table_thunk; + epoxy_glMatrixMultTranspose3x3fNV = epoxy_glMatrixMultTranspose3x3fNV_dispatch_table_thunk; + epoxy_glMatrixMultTransposedEXT = epoxy_glMatrixMultTransposedEXT_dispatch_table_thunk; + epoxy_glMatrixMultTransposefEXT = epoxy_glMatrixMultTransposefEXT_dispatch_table_thunk; + epoxy_glMatrixMultdEXT = epoxy_glMatrixMultdEXT_dispatch_table_thunk; + epoxy_glMatrixMultfEXT = epoxy_glMatrixMultfEXT_dispatch_table_thunk; + epoxy_glMatrixOrthoEXT = epoxy_glMatrixOrthoEXT_dispatch_table_thunk; + epoxy_glMatrixPopEXT = epoxy_glMatrixPopEXT_dispatch_table_thunk; + epoxy_glMatrixPushEXT = epoxy_glMatrixPushEXT_dispatch_table_thunk; + epoxy_glMatrixRotatedEXT = epoxy_glMatrixRotatedEXT_dispatch_table_thunk; + epoxy_glMatrixRotatefEXT = epoxy_glMatrixRotatefEXT_dispatch_table_thunk; + epoxy_glMatrixScaledEXT = epoxy_glMatrixScaledEXT_dispatch_table_thunk; + epoxy_glMatrixScalefEXT = epoxy_glMatrixScalefEXT_dispatch_table_thunk; + epoxy_glMatrixTranslatedEXT = epoxy_glMatrixTranslatedEXT_dispatch_table_thunk; + epoxy_glMatrixTranslatefEXT = epoxy_glMatrixTranslatefEXT_dispatch_table_thunk; + epoxy_glMaxShaderCompilerThreadsARB = epoxy_glMaxShaderCompilerThreadsARB_dispatch_table_thunk; + epoxy_glMemoryBarrier = epoxy_glMemoryBarrier_dispatch_table_thunk; + epoxy_glMemoryBarrierByRegion = epoxy_glMemoryBarrierByRegion_dispatch_table_thunk; + epoxy_glMemoryBarrierEXT = epoxy_glMemoryBarrierEXT_dispatch_table_thunk; + epoxy_glMinSampleShading = epoxy_glMinSampleShading_dispatch_table_thunk; + epoxy_glMinSampleShadingARB = epoxy_glMinSampleShadingARB_dispatch_table_thunk; + epoxy_glMinSampleShadingOES = epoxy_glMinSampleShadingOES_dispatch_table_thunk; + epoxy_glMinmax = epoxy_glMinmax_dispatch_table_thunk; + epoxy_glMinmaxEXT = epoxy_glMinmaxEXT_dispatch_table_thunk; + epoxy_glMultMatrixd = epoxy_glMultMatrixd_dispatch_table_thunk; + epoxy_glMultMatrixf = epoxy_glMultMatrixf_dispatch_table_thunk; + epoxy_glMultMatrixx = epoxy_glMultMatrixx_dispatch_table_thunk; + epoxy_glMultMatrixxOES = epoxy_glMultMatrixxOES_dispatch_table_thunk; + epoxy_glMultTransposeMatrixd = epoxy_glMultTransposeMatrixd_dispatch_table_thunk; + epoxy_glMultTransposeMatrixdARB = epoxy_glMultTransposeMatrixdARB_dispatch_table_thunk; + epoxy_glMultTransposeMatrixf = epoxy_glMultTransposeMatrixf_dispatch_table_thunk; + epoxy_glMultTransposeMatrixfARB = epoxy_glMultTransposeMatrixfARB_dispatch_table_thunk; + epoxy_glMultTransposeMatrixxOES = epoxy_glMultTransposeMatrixxOES_dispatch_table_thunk; + epoxy_glMultiDrawArrays = epoxy_glMultiDrawArrays_dispatch_table_thunk; + epoxy_glMultiDrawArraysEXT = epoxy_glMultiDrawArraysEXT_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirect = epoxy_glMultiDrawArraysIndirect_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectAMD = epoxy_glMultiDrawArraysIndirectAMD_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectBindlessCountNV = epoxy_glMultiDrawArraysIndirectBindlessCountNV_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectBindlessNV = epoxy_glMultiDrawArraysIndirectBindlessNV_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectCountARB = epoxy_glMultiDrawArraysIndirectCountARB_dispatch_table_thunk; + epoxy_glMultiDrawArraysIndirectEXT = epoxy_glMultiDrawArraysIndirectEXT_dispatch_table_thunk; + epoxy_glMultiDrawElementArrayAPPLE = epoxy_glMultiDrawElementArrayAPPLE_dispatch_table_thunk; + epoxy_glMultiDrawElements = epoxy_glMultiDrawElements_dispatch_table_thunk; + epoxy_glMultiDrawElementsBaseVertex = epoxy_glMultiDrawElementsBaseVertex_dispatch_table_thunk; + epoxy_glMultiDrawElementsBaseVertexEXT = epoxy_glMultiDrawElementsBaseVertexEXT_dispatch_table_thunk; + epoxy_glMultiDrawElementsBaseVertexOES = epoxy_glMultiDrawElementsBaseVertexOES_dispatch_table_thunk; + epoxy_glMultiDrawElementsEXT = epoxy_glMultiDrawElementsEXT_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirect = epoxy_glMultiDrawElementsIndirect_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectAMD = epoxy_glMultiDrawElementsIndirectAMD_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectBindlessCountNV = epoxy_glMultiDrawElementsIndirectBindlessCountNV_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectBindlessNV = epoxy_glMultiDrawElementsIndirectBindlessNV_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectCountARB = epoxy_glMultiDrawElementsIndirectCountARB_dispatch_table_thunk; + epoxy_glMultiDrawElementsIndirectEXT = epoxy_glMultiDrawElementsIndirectEXT_dispatch_table_thunk; + epoxy_glMultiDrawRangeElementArrayAPPLE = epoxy_glMultiDrawRangeElementArrayAPPLE_dispatch_table_thunk; + epoxy_glMultiModeDrawArraysIBM = epoxy_glMultiModeDrawArraysIBM_dispatch_table_thunk; + epoxy_glMultiModeDrawElementsIBM = epoxy_glMultiModeDrawElementsIBM_dispatch_table_thunk; + epoxy_glMultiTexBufferEXT = epoxy_glMultiTexBufferEXT_dispatch_table_thunk; + epoxy_glMultiTexCoord1bOES = epoxy_glMultiTexCoord1bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord1bvOES = epoxy_glMultiTexCoord1bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord1d = epoxy_glMultiTexCoord1d_dispatch_table_thunk; + epoxy_glMultiTexCoord1dARB = epoxy_glMultiTexCoord1dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1dv = epoxy_glMultiTexCoord1dv_dispatch_table_thunk; + epoxy_glMultiTexCoord1dvARB = epoxy_glMultiTexCoord1dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1f = epoxy_glMultiTexCoord1f_dispatch_table_thunk; + epoxy_glMultiTexCoord1fARB = epoxy_glMultiTexCoord1fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1fv = epoxy_glMultiTexCoord1fv_dispatch_table_thunk; + epoxy_glMultiTexCoord1fvARB = epoxy_glMultiTexCoord1fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1hNV = epoxy_glMultiTexCoord1hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord1hvNV = epoxy_glMultiTexCoord1hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord1i = epoxy_glMultiTexCoord1i_dispatch_table_thunk; + epoxy_glMultiTexCoord1iARB = epoxy_glMultiTexCoord1iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1iv = epoxy_glMultiTexCoord1iv_dispatch_table_thunk; + epoxy_glMultiTexCoord1ivARB = epoxy_glMultiTexCoord1ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1s = epoxy_glMultiTexCoord1s_dispatch_table_thunk; + epoxy_glMultiTexCoord1sARB = epoxy_glMultiTexCoord1sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1sv = epoxy_glMultiTexCoord1sv_dispatch_table_thunk; + epoxy_glMultiTexCoord1svARB = epoxy_glMultiTexCoord1svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord1xOES = epoxy_glMultiTexCoord1xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord1xvOES = epoxy_glMultiTexCoord1xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2bOES = epoxy_glMultiTexCoord2bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2bvOES = epoxy_glMultiTexCoord2bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2d = epoxy_glMultiTexCoord2d_dispatch_table_thunk; + epoxy_glMultiTexCoord2dARB = epoxy_glMultiTexCoord2dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2dv = epoxy_glMultiTexCoord2dv_dispatch_table_thunk; + epoxy_glMultiTexCoord2dvARB = epoxy_glMultiTexCoord2dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2f = epoxy_glMultiTexCoord2f_dispatch_table_thunk; + epoxy_glMultiTexCoord2fARB = epoxy_glMultiTexCoord2fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2fv = epoxy_glMultiTexCoord2fv_dispatch_table_thunk; + epoxy_glMultiTexCoord2fvARB = epoxy_glMultiTexCoord2fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2hNV = epoxy_glMultiTexCoord2hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord2hvNV = epoxy_glMultiTexCoord2hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord2i = epoxy_glMultiTexCoord2i_dispatch_table_thunk; + epoxy_glMultiTexCoord2iARB = epoxy_glMultiTexCoord2iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2iv = epoxy_glMultiTexCoord2iv_dispatch_table_thunk; + epoxy_glMultiTexCoord2ivARB = epoxy_glMultiTexCoord2ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2s = epoxy_glMultiTexCoord2s_dispatch_table_thunk; + epoxy_glMultiTexCoord2sARB = epoxy_glMultiTexCoord2sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2sv = epoxy_glMultiTexCoord2sv_dispatch_table_thunk; + epoxy_glMultiTexCoord2svARB = epoxy_glMultiTexCoord2svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord2xOES = epoxy_glMultiTexCoord2xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord2xvOES = epoxy_glMultiTexCoord2xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3bOES = epoxy_glMultiTexCoord3bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3bvOES = epoxy_glMultiTexCoord3bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3d = epoxy_glMultiTexCoord3d_dispatch_table_thunk; + epoxy_glMultiTexCoord3dARB = epoxy_glMultiTexCoord3dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3dv = epoxy_glMultiTexCoord3dv_dispatch_table_thunk; + epoxy_glMultiTexCoord3dvARB = epoxy_glMultiTexCoord3dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3f = epoxy_glMultiTexCoord3f_dispatch_table_thunk; + epoxy_glMultiTexCoord3fARB = epoxy_glMultiTexCoord3fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3fv = epoxy_glMultiTexCoord3fv_dispatch_table_thunk; + epoxy_glMultiTexCoord3fvARB = epoxy_glMultiTexCoord3fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3hNV = epoxy_glMultiTexCoord3hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord3hvNV = epoxy_glMultiTexCoord3hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord3i = epoxy_glMultiTexCoord3i_dispatch_table_thunk; + epoxy_glMultiTexCoord3iARB = epoxy_glMultiTexCoord3iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3iv = epoxy_glMultiTexCoord3iv_dispatch_table_thunk; + epoxy_glMultiTexCoord3ivARB = epoxy_glMultiTexCoord3ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3s = epoxy_glMultiTexCoord3s_dispatch_table_thunk; + epoxy_glMultiTexCoord3sARB = epoxy_glMultiTexCoord3sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3sv = epoxy_glMultiTexCoord3sv_dispatch_table_thunk; + epoxy_glMultiTexCoord3svARB = epoxy_glMultiTexCoord3svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord3xOES = epoxy_glMultiTexCoord3xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord3xvOES = epoxy_glMultiTexCoord3xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4bOES = epoxy_glMultiTexCoord4bOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4bvOES = epoxy_glMultiTexCoord4bvOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4d = epoxy_glMultiTexCoord4d_dispatch_table_thunk; + epoxy_glMultiTexCoord4dARB = epoxy_glMultiTexCoord4dARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4dv = epoxy_glMultiTexCoord4dv_dispatch_table_thunk; + epoxy_glMultiTexCoord4dvARB = epoxy_glMultiTexCoord4dvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4f = epoxy_glMultiTexCoord4f_dispatch_table_thunk; + epoxy_glMultiTexCoord4fARB = epoxy_glMultiTexCoord4fARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4fv = epoxy_glMultiTexCoord4fv_dispatch_table_thunk; + epoxy_glMultiTexCoord4fvARB = epoxy_glMultiTexCoord4fvARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4hNV = epoxy_glMultiTexCoord4hNV_dispatch_table_thunk; + epoxy_glMultiTexCoord4hvNV = epoxy_glMultiTexCoord4hvNV_dispatch_table_thunk; + epoxy_glMultiTexCoord4i = epoxy_glMultiTexCoord4i_dispatch_table_thunk; + epoxy_glMultiTexCoord4iARB = epoxy_glMultiTexCoord4iARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4iv = epoxy_glMultiTexCoord4iv_dispatch_table_thunk; + epoxy_glMultiTexCoord4ivARB = epoxy_glMultiTexCoord4ivARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4s = epoxy_glMultiTexCoord4s_dispatch_table_thunk; + epoxy_glMultiTexCoord4sARB = epoxy_glMultiTexCoord4sARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4sv = epoxy_glMultiTexCoord4sv_dispatch_table_thunk; + epoxy_glMultiTexCoord4svARB = epoxy_glMultiTexCoord4svARB_dispatch_table_thunk; + epoxy_glMultiTexCoord4x = epoxy_glMultiTexCoord4x_dispatch_table_thunk; + epoxy_glMultiTexCoord4xOES = epoxy_glMultiTexCoord4xOES_dispatch_table_thunk; + epoxy_glMultiTexCoord4xvOES = epoxy_glMultiTexCoord4xvOES_dispatch_table_thunk; + epoxy_glMultiTexCoordP1ui = epoxy_glMultiTexCoordP1ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP1uiv = epoxy_glMultiTexCoordP1uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordP2ui = epoxy_glMultiTexCoordP2ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP2uiv = epoxy_glMultiTexCoordP2uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordP3ui = epoxy_glMultiTexCoordP3ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP3uiv = epoxy_glMultiTexCoordP3uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordP4ui = epoxy_glMultiTexCoordP4ui_dispatch_table_thunk; + epoxy_glMultiTexCoordP4uiv = epoxy_glMultiTexCoordP4uiv_dispatch_table_thunk; + epoxy_glMultiTexCoordPointerEXT = epoxy_glMultiTexCoordPointerEXT_dispatch_table_thunk; + epoxy_glMultiTexEnvfEXT = epoxy_glMultiTexEnvfEXT_dispatch_table_thunk; + epoxy_glMultiTexEnvfvEXT = epoxy_glMultiTexEnvfvEXT_dispatch_table_thunk; + epoxy_glMultiTexEnviEXT = epoxy_glMultiTexEnviEXT_dispatch_table_thunk; + epoxy_glMultiTexEnvivEXT = epoxy_glMultiTexEnvivEXT_dispatch_table_thunk; + epoxy_glMultiTexGendEXT = epoxy_glMultiTexGendEXT_dispatch_table_thunk; + epoxy_glMultiTexGendvEXT = epoxy_glMultiTexGendvEXT_dispatch_table_thunk; + epoxy_glMultiTexGenfEXT = epoxy_glMultiTexGenfEXT_dispatch_table_thunk; + epoxy_glMultiTexGenfvEXT = epoxy_glMultiTexGenfvEXT_dispatch_table_thunk; + epoxy_glMultiTexGeniEXT = epoxy_glMultiTexGeniEXT_dispatch_table_thunk; + epoxy_glMultiTexGenivEXT = epoxy_glMultiTexGenivEXT_dispatch_table_thunk; + epoxy_glMultiTexImage1DEXT = epoxy_glMultiTexImage1DEXT_dispatch_table_thunk; + epoxy_glMultiTexImage2DEXT = epoxy_glMultiTexImage2DEXT_dispatch_table_thunk; + epoxy_glMultiTexImage3DEXT = epoxy_glMultiTexImage3DEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterIivEXT = epoxy_glMultiTexParameterIivEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterIuivEXT = epoxy_glMultiTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterfEXT = epoxy_glMultiTexParameterfEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterfvEXT = epoxy_glMultiTexParameterfvEXT_dispatch_table_thunk; + epoxy_glMultiTexParameteriEXT = epoxy_glMultiTexParameteriEXT_dispatch_table_thunk; + epoxy_glMultiTexParameterivEXT = epoxy_glMultiTexParameterivEXT_dispatch_table_thunk; + epoxy_glMultiTexRenderbufferEXT = epoxy_glMultiTexRenderbufferEXT_dispatch_table_thunk; + epoxy_glMultiTexSubImage1DEXT = epoxy_glMultiTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glMultiTexSubImage2DEXT = epoxy_glMultiTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glMultiTexSubImage3DEXT = epoxy_glMultiTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glNamedBufferData = epoxy_glNamedBufferData_dispatch_table_thunk; + epoxy_glNamedBufferDataEXT = epoxy_glNamedBufferDataEXT_dispatch_table_thunk; + epoxy_glNamedBufferPageCommitmentARB = epoxy_glNamedBufferPageCommitmentARB_dispatch_table_thunk; + epoxy_glNamedBufferPageCommitmentEXT = epoxy_glNamedBufferPageCommitmentEXT_dispatch_table_thunk; + epoxy_glNamedBufferStorage = epoxy_glNamedBufferStorage_dispatch_table_thunk; + epoxy_glNamedBufferStorageEXT = epoxy_glNamedBufferStorageEXT_dispatch_table_thunk; + epoxy_glNamedBufferSubData = epoxy_glNamedBufferSubData_dispatch_table_thunk; + epoxy_glNamedBufferSubDataEXT = epoxy_glNamedBufferSubDataEXT_dispatch_table_thunk; + epoxy_glNamedCopyBufferSubDataEXT = epoxy_glNamedCopyBufferSubDataEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferDrawBuffer = epoxy_glNamedFramebufferDrawBuffer_dispatch_table_thunk; + epoxy_glNamedFramebufferDrawBuffers = epoxy_glNamedFramebufferDrawBuffers_dispatch_table_thunk; + epoxy_glNamedFramebufferParameteri = epoxy_glNamedFramebufferParameteri_dispatch_table_thunk; + epoxy_glNamedFramebufferParameteriEXT = epoxy_glNamedFramebufferParameteriEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferReadBuffer = epoxy_glNamedFramebufferReadBuffer_dispatch_table_thunk; + epoxy_glNamedFramebufferRenderbuffer = epoxy_glNamedFramebufferRenderbuffer_dispatch_table_thunk; + epoxy_glNamedFramebufferRenderbufferEXT = epoxy_glNamedFramebufferRenderbufferEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferSampleLocationsfvARB = epoxy_glNamedFramebufferSampleLocationsfvARB_dispatch_table_thunk; + epoxy_glNamedFramebufferSampleLocationsfvNV = epoxy_glNamedFramebufferSampleLocationsfvNV_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture = epoxy_glNamedFramebufferTexture_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture1DEXT = epoxy_glNamedFramebufferTexture1DEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture2DEXT = epoxy_glNamedFramebufferTexture2DEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTexture3DEXT = epoxy_glNamedFramebufferTexture3DEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureEXT = epoxy_glNamedFramebufferTextureEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureFaceEXT = epoxy_glNamedFramebufferTextureFaceEXT_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureLayer = epoxy_glNamedFramebufferTextureLayer_dispatch_table_thunk; + epoxy_glNamedFramebufferTextureLayerEXT = epoxy_glNamedFramebufferTextureLayerEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4dEXT = epoxy_glNamedProgramLocalParameter4dEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4dvEXT = epoxy_glNamedProgramLocalParameter4dvEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4fEXT = epoxy_glNamedProgramLocalParameter4fEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameter4fvEXT = epoxy_glNamedProgramLocalParameter4fvEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4iEXT = epoxy_glNamedProgramLocalParameterI4iEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4ivEXT = epoxy_glNamedProgramLocalParameterI4ivEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4uiEXT = epoxy_glNamedProgramLocalParameterI4uiEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameterI4uivEXT = epoxy_glNamedProgramLocalParameterI4uivEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParameters4fvEXT = epoxy_glNamedProgramLocalParameters4fvEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParametersI4ivEXT = epoxy_glNamedProgramLocalParametersI4ivEXT_dispatch_table_thunk; + epoxy_glNamedProgramLocalParametersI4uivEXT = epoxy_glNamedProgramLocalParametersI4uivEXT_dispatch_table_thunk; + epoxy_glNamedProgramStringEXT = epoxy_glNamedProgramStringEXT_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorage = epoxy_glNamedRenderbufferStorage_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageEXT = epoxy_glNamedRenderbufferStorageEXT_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageMultisample = epoxy_glNamedRenderbufferStorageMultisample_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT = epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_dispatch_table_thunk; + epoxy_glNamedRenderbufferStorageMultisampleEXT = epoxy_glNamedRenderbufferStorageMultisampleEXT_dispatch_table_thunk; + epoxy_glNamedStringARB = epoxy_glNamedStringARB_dispatch_table_thunk; + epoxy_glNewList = epoxy_glNewList_dispatch_table_thunk; + epoxy_glNewObjectBufferATI = epoxy_glNewObjectBufferATI_dispatch_table_thunk; + epoxy_glNormal3b = epoxy_glNormal3b_dispatch_table_thunk; + epoxy_glNormal3bv = epoxy_glNormal3bv_dispatch_table_thunk; + epoxy_glNormal3d = epoxy_glNormal3d_dispatch_table_thunk; + epoxy_glNormal3dv = epoxy_glNormal3dv_dispatch_table_thunk; + epoxy_glNormal3f = epoxy_glNormal3f_dispatch_table_thunk; + epoxy_glNormal3fVertex3fSUN = epoxy_glNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glNormal3fVertex3fvSUN = epoxy_glNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glNormal3fv = epoxy_glNormal3fv_dispatch_table_thunk; + epoxy_glNormal3hNV = epoxy_glNormal3hNV_dispatch_table_thunk; + epoxy_glNormal3hvNV = epoxy_glNormal3hvNV_dispatch_table_thunk; + epoxy_glNormal3i = epoxy_glNormal3i_dispatch_table_thunk; + epoxy_glNormal3iv = epoxy_glNormal3iv_dispatch_table_thunk; + epoxy_glNormal3s = epoxy_glNormal3s_dispatch_table_thunk; + epoxy_glNormal3sv = epoxy_glNormal3sv_dispatch_table_thunk; + epoxy_glNormal3x = epoxy_glNormal3x_dispatch_table_thunk; + epoxy_glNormal3xOES = epoxy_glNormal3xOES_dispatch_table_thunk; + epoxy_glNormal3xvOES = epoxy_glNormal3xvOES_dispatch_table_thunk; + epoxy_glNormalFormatNV = epoxy_glNormalFormatNV_dispatch_table_thunk; + epoxy_glNormalP3ui = epoxy_glNormalP3ui_dispatch_table_thunk; + epoxy_glNormalP3uiv = epoxy_glNormalP3uiv_dispatch_table_thunk; + epoxy_glNormalPointer = epoxy_glNormalPointer_dispatch_table_thunk; + epoxy_glNormalPointerEXT = epoxy_glNormalPointerEXT_dispatch_table_thunk; + epoxy_glNormalPointerListIBM = epoxy_glNormalPointerListIBM_dispatch_table_thunk; + epoxy_glNormalPointervINTEL = epoxy_glNormalPointervINTEL_dispatch_table_thunk; + epoxy_glNormalStream3bATI = epoxy_glNormalStream3bATI_dispatch_table_thunk; + epoxy_glNormalStream3bvATI = epoxy_glNormalStream3bvATI_dispatch_table_thunk; + epoxy_glNormalStream3dATI = epoxy_glNormalStream3dATI_dispatch_table_thunk; + epoxy_glNormalStream3dvATI = epoxy_glNormalStream3dvATI_dispatch_table_thunk; + epoxy_glNormalStream3fATI = epoxy_glNormalStream3fATI_dispatch_table_thunk; + epoxy_glNormalStream3fvATI = epoxy_glNormalStream3fvATI_dispatch_table_thunk; + epoxy_glNormalStream3iATI = epoxy_glNormalStream3iATI_dispatch_table_thunk; + epoxy_glNormalStream3ivATI = epoxy_glNormalStream3ivATI_dispatch_table_thunk; + epoxy_glNormalStream3sATI = epoxy_glNormalStream3sATI_dispatch_table_thunk; + epoxy_glNormalStream3svATI = epoxy_glNormalStream3svATI_dispatch_table_thunk; + epoxy_glObjectLabel = epoxy_glObjectLabel_dispatch_table_thunk; + epoxy_glObjectLabelKHR = epoxy_glObjectLabelKHR_dispatch_table_thunk; + epoxy_glObjectPtrLabel = epoxy_glObjectPtrLabel_dispatch_table_thunk; + epoxy_glObjectPtrLabelKHR = epoxy_glObjectPtrLabelKHR_dispatch_table_thunk; + epoxy_glObjectPurgeableAPPLE = epoxy_glObjectPurgeableAPPLE_dispatch_table_thunk; + epoxy_glObjectUnpurgeableAPPLE = epoxy_glObjectUnpurgeableAPPLE_dispatch_table_thunk; + epoxy_glOrtho = epoxy_glOrtho_dispatch_table_thunk; + epoxy_glOrthof = epoxy_glOrthof_dispatch_table_thunk; + epoxy_glOrthofOES = epoxy_glOrthofOES_dispatch_table_thunk; + epoxy_glOrthox = epoxy_glOrthox_dispatch_table_thunk; + epoxy_glOrthoxOES = epoxy_glOrthoxOES_dispatch_table_thunk; + epoxy_glPNTrianglesfATI = epoxy_glPNTrianglesfATI_dispatch_table_thunk; + epoxy_glPNTrianglesiATI = epoxy_glPNTrianglesiATI_dispatch_table_thunk; + epoxy_glPassTexCoordATI = epoxy_glPassTexCoordATI_dispatch_table_thunk; + epoxy_glPassThrough = epoxy_glPassThrough_dispatch_table_thunk; + epoxy_glPassThroughxOES = epoxy_glPassThroughxOES_dispatch_table_thunk; + epoxy_glPatchParameterfv = epoxy_glPatchParameterfv_dispatch_table_thunk; + epoxy_glPatchParameteri = epoxy_glPatchParameteri_dispatch_table_thunk; + epoxy_glPatchParameteriEXT = epoxy_glPatchParameteriEXT_dispatch_table_thunk; + epoxy_glPatchParameteriOES = epoxy_glPatchParameteriOES_dispatch_table_thunk; + epoxy_glPathColorGenNV = epoxy_glPathColorGenNV_dispatch_table_thunk; + epoxy_glPathCommandsNV = epoxy_glPathCommandsNV_dispatch_table_thunk; + epoxy_glPathCoordsNV = epoxy_glPathCoordsNV_dispatch_table_thunk; + epoxy_glPathCoverDepthFuncNV = epoxy_glPathCoverDepthFuncNV_dispatch_table_thunk; + epoxy_glPathDashArrayNV = epoxy_glPathDashArrayNV_dispatch_table_thunk; + epoxy_glPathFogGenNV = epoxy_glPathFogGenNV_dispatch_table_thunk; + epoxy_glPathGlyphIndexArrayNV = epoxy_glPathGlyphIndexArrayNV_dispatch_table_thunk; + epoxy_glPathGlyphIndexRangeNV = epoxy_glPathGlyphIndexRangeNV_dispatch_table_thunk; + epoxy_glPathGlyphRangeNV = epoxy_glPathGlyphRangeNV_dispatch_table_thunk; + epoxy_glPathGlyphsNV = epoxy_glPathGlyphsNV_dispatch_table_thunk; + epoxy_glPathMemoryGlyphIndexArrayNV = epoxy_glPathMemoryGlyphIndexArrayNV_dispatch_table_thunk; + epoxy_glPathParameterfNV = epoxy_glPathParameterfNV_dispatch_table_thunk; + epoxy_glPathParameterfvNV = epoxy_glPathParameterfvNV_dispatch_table_thunk; + epoxy_glPathParameteriNV = epoxy_glPathParameteriNV_dispatch_table_thunk; + epoxy_glPathParameterivNV = epoxy_glPathParameterivNV_dispatch_table_thunk; + epoxy_glPathStencilDepthOffsetNV = epoxy_glPathStencilDepthOffsetNV_dispatch_table_thunk; + epoxy_glPathStencilFuncNV = epoxy_glPathStencilFuncNV_dispatch_table_thunk; + epoxy_glPathStringNV = epoxy_glPathStringNV_dispatch_table_thunk; + epoxy_glPathSubCommandsNV = epoxy_glPathSubCommandsNV_dispatch_table_thunk; + epoxy_glPathSubCoordsNV = epoxy_glPathSubCoordsNV_dispatch_table_thunk; + epoxy_glPathTexGenNV = epoxy_glPathTexGenNV_dispatch_table_thunk; + epoxy_glPauseTransformFeedback = epoxy_glPauseTransformFeedback_dispatch_table_thunk; + epoxy_glPauseTransformFeedbackNV = epoxy_glPauseTransformFeedbackNV_dispatch_table_thunk; + epoxy_glPixelDataRangeNV = epoxy_glPixelDataRangeNV_dispatch_table_thunk; + epoxy_glPixelMapfv = epoxy_glPixelMapfv_dispatch_table_thunk; + epoxy_glPixelMapuiv = epoxy_glPixelMapuiv_dispatch_table_thunk; + epoxy_glPixelMapusv = epoxy_glPixelMapusv_dispatch_table_thunk; + epoxy_glPixelMapx = epoxy_glPixelMapx_dispatch_table_thunk; + epoxy_glPixelStoref = epoxy_glPixelStoref_dispatch_table_thunk; + epoxy_glPixelStorei = epoxy_glPixelStorei_dispatch_table_thunk; + epoxy_glPixelStorex = epoxy_glPixelStorex_dispatch_table_thunk; + epoxy_glPixelTexGenParameterfSGIS = epoxy_glPixelTexGenParameterfSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenParameterfvSGIS = epoxy_glPixelTexGenParameterfvSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenParameteriSGIS = epoxy_glPixelTexGenParameteriSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenParameterivSGIS = epoxy_glPixelTexGenParameterivSGIS_dispatch_table_thunk; + epoxy_glPixelTexGenSGIX = epoxy_glPixelTexGenSGIX_dispatch_table_thunk; + epoxy_glPixelTransferf = epoxy_glPixelTransferf_dispatch_table_thunk; + epoxy_glPixelTransferi = epoxy_glPixelTransferi_dispatch_table_thunk; + epoxy_glPixelTransferxOES = epoxy_glPixelTransferxOES_dispatch_table_thunk; + epoxy_glPixelTransformParameterfEXT = epoxy_glPixelTransformParameterfEXT_dispatch_table_thunk; + epoxy_glPixelTransformParameterfvEXT = epoxy_glPixelTransformParameterfvEXT_dispatch_table_thunk; + epoxy_glPixelTransformParameteriEXT = epoxy_glPixelTransformParameteriEXT_dispatch_table_thunk; + epoxy_glPixelTransformParameterivEXT = epoxy_glPixelTransformParameterivEXT_dispatch_table_thunk; + epoxy_glPixelZoom = epoxy_glPixelZoom_dispatch_table_thunk; + epoxy_glPixelZoomxOES = epoxy_glPixelZoomxOES_dispatch_table_thunk; + epoxy_glPointAlongPathNV = epoxy_glPointAlongPathNV_dispatch_table_thunk; + epoxy_glPointParameterf = epoxy_glPointParameterf_dispatch_table_thunk; + epoxy_glPointParameterfARB = epoxy_glPointParameterfARB_dispatch_table_thunk; + epoxy_glPointParameterfEXT = epoxy_glPointParameterfEXT_dispatch_table_thunk; + epoxy_glPointParameterfSGIS = epoxy_glPointParameterfSGIS_dispatch_table_thunk; + epoxy_glPointParameterfv = epoxy_glPointParameterfv_dispatch_table_thunk; + epoxy_glPointParameterfvARB = epoxy_glPointParameterfvARB_dispatch_table_thunk; + epoxy_glPointParameterfvEXT = epoxy_glPointParameterfvEXT_dispatch_table_thunk; + epoxy_glPointParameterfvSGIS = epoxy_glPointParameterfvSGIS_dispatch_table_thunk; + epoxy_glPointParameteri = epoxy_glPointParameteri_dispatch_table_thunk; + epoxy_glPointParameteriNV = epoxy_glPointParameteriNV_dispatch_table_thunk; + epoxy_glPointParameteriv = epoxy_glPointParameteriv_dispatch_table_thunk; + epoxy_glPointParameterivNV = epoxy_glPointParameterivNV_dispatch_table_thunk; + epoxy_glPointParameterx = epoxy_glPointParameterx_dispatch_table_thunk; + epoxy_glPointParameterxOES = epoxy_glPointParameterxOES_dispatch_table_thunk; + epoxy_glPointParameterxv = epoxy_glPointParameterxv_dispatch_table_thunk; + epoxy_glPointParameterxvOES = epoxy_glPointParameterxvOES_dispatch_table_thunk; + epoxy_glPointSize = epoxy_glPointSize_dispatch_table_thunk; + epoxy_glPointSizePointerOES = epoxy_glPointSizePointerOES_dispatch_table_thunk; + epoxy_glPointSizex = epoxy_glPointSizex_dispatch_table_thunk; + epoxy_glPointSizexOES = epoxy_glPointSizexOES_dispatch_table_thunk; + epoxy_glPollAsyncSGIX = epoxy_glPollAsyncSGIX_dispatch_table_thunk; + epoxy_glPollInstrumentsSGIX = epoxy_glPollInstrumentsSGIX_dispatch_table_thunk; + epoxy_glPolygonMode = epoxy_glPolygonMode_dispatch_table_thunk; + epoxy_glPolygonModeNV = epoxy_glPolygonModeNV_dispatch_table_thunk; + epoxy_glPolygonOffset = epoxy_glPolygonOffset_dispatch_table_thunk; + epoxy_glPolygonOffsetClampEXT = epoxy_glPolygonOffsetClampEXT_dispatch_table_thunk; + epoxy_glPolygonOffsetEXT = epoxy_glPolygonOffsetEXT_dispatch_table_thunk; + epoxy_glPolygonOffsetx = epoxy_glPolygonOffsetx_dispatch_table_thunk; + epoxy_glPolygonOffsetxOES = epoxy_glPolygonOffsetxOES_dispatch_table_thunk; + epoxy_glPolygonStipple = epoxy_glPolygonStipple_dispatch_table_thunk; + epoxy_glPopAttrib = epoxy_glPopAttrib_dispatch_table_thunk; + epoxy_glPopClientAttrib = epoxy_glPopClientAttrib_dispatch_table_thunk; + epoxy_glPopDebugGroup = epoxy_glPopDebugGroup_dispatch_table_thunk; + epoxy_glPopDebugGroupKHR = epoxy_glPopDebugGroupKHR_dispatch_table_thunk; + epoxy_glPopGroupMarkerEXT = epoxy_glPopGroupMarkerEXT_dispatch_table_thunk; + epoxy_glPopMatrix = epoxy_glPopMatrix_dispatch_table_thunk; + epoxy_glPopName = epoxy_glPopName_dispatch_table_thunk; + epoxy_glPresentFrameDualFillNV = epoxy_glPresentFrameDualFillNV_dispatch_table_thunk; + epoxy_glPresentFrameKeyedNV = epoxy_glPresentFrameKeyedNV_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBox = epoxy_glPrimitiveBoundingBox_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBoxARB = epoxy_glPrimitiveBoundingBoxARB_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBoxEXT = epoxy_glPrimitiveBoundingBoxEXT_dispatch_table_thunk; + epoxy_glPrimitiveBoundingBoxOES = epoxy_glPrimitiveBoundingBoxOES_dispatch_table_thunk; + epoxy_glPrimitiveRestartIndex = epoxy_glPrimitiveRestartIndex_dispatch_table_thunk; + epoxy_glPrimitiveRestartIndexNV = epoxy_glPrimitiveRestartIndexNV_dispatch_table_thunk; + epoxy_glPrimitiveRestartNV = epoxy_glPrimitiveRestartNV_dispatch_table_thunk; + epoxy_glPrioritizeTextures = epoxy_glPrioritizeTextures_dispatch_table_thunk; + epoxy_glPrioritizeTexturesEXT = epoxy_glPrioritizeTexturesEXT_dispatch_table_thunk; + epoxy_glPrioritizeTexturesxOES = epoxy_glPrioritizeTexturesxOES_dispatch_table_thunk; + epoxy_glProgramBinary = epoxy_glProgramBinary_dispatch_table_thunk; + epoxy_glProgramBinaryOES = epoxy_glProgramBinaryOES_dispatch_table_thunk; + epoxy_glProgramBufferParametersIivNV = epoxy_glProgramBufferParametersIivNV_dispatch_table_thunk; + epoxy_glProgramBufferParametersIuivNV = epoxy_glProgramBufferParametersIuivNV_dispatch_table_thunk; + epoxy_glProgramBufferParametersfvNV = epoxy_glProgramBufferParametersfvNV_dispatch_table_thunk; + epoxy_glProgramEnvParameter4dARB = epoxy_glProgramEnvParameter4dARB_dispatch_table_thunk; + epoxy_glProgramEnvParameter4dvARB = epoxy_glProgramEnvParameter4dvARB_dispatch_table_thunk; + epoxy_glProgramEnvParameter4fARB = epoxy_glProgramEnvParameter4fARB_dispatch_table_thunk; + epoxy_glProgramEnvParameter4fvARB = epoxy_glProgramEnvParameter4fvARB_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4iNV = epoxy_glProgramEnvParameterI4iNV_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4ivNV = epoxy_glProgramEnvParameterI4ivNV_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4uiNV = epoxy_glProgramEnvParameterI4uiNV_dispatch_table_thunk; + epoxy_glProgramEnvParameterI4uivNV = epoxy_glProgramEnvParameterI4uivNV_dispatch_table_thunk; + epoxy_glProgramEnvParameters4fvEXT = epoxy_glProgramEnvParameters4fvEXT_dispatch_table_thunk; + epoxy_glProgramEnvParametersI4ivNV = epoxy_glProgramEnvParametersI4ivNV_dispatch_table_thunk; + epoxy_glProgramEnvParametersI4uivNV = epoxy_glProgramEnvParametersI4uivNV_dispatch_table_thunk; + epoxy_glProgramLocalParameter4dARB = epoxy_glProgramLocalParameter4dARB_dispatch_table_thunk; + epoxy_glProgramLocalParameter4dvARB = epoxy_glProgramLocalParameter4dvARB_dispatch_table_thunk; + epoxy_glProgramLocalParameter4fARB = epoxy_glProgramLocalParameter4fARB_dispatch_table_thunk; + epoxy_glProgramLocalParameter4fvARB = epoxy_glProgramLocalParameter4fvARB_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4iNV = epoxy_glProgramLocalParameterI4iNV_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4ivNV = epoxy_glProgramLocalParameterI4ivNV_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4uiNV = epoxy_glProgramLocalParameterI4uiNV_dispatch_table_thunk; + epoxy_glProgramLocalParameterI4uivNV = epoxy_glProgramLocalParameterI4uivNV_dispatch_table_thunk; + epoxy_glProgramLocalParameters4fvEXT = epoxy_glProgramLocalParameters4fvEXT_dispatch_table_thunk; + epoxy_glProgramLocalParametersI4ivNV = epoxy_glProgramLocalParametersI4ivNV_dispatch_table_thunk; + epoxy_glProgramLocalParametersI4uivNV = epoxy_glProgramLocalParametersI4uivNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4dNV = epoxy_glProgramNamedParameter4dNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4dvNV = epoxy_glProgramNamedParameter4dvNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4fNV = epoxy_glProgramNamedParameter4fNV_dispatch_table_thunk; + epoxy_glProgramNamedParameter4fvNV = epoxy_glProgramNamedParameter4fvNV_dispatch_table_thunk; + epoxy_glProgramParameter4dNV = epoxy_glProgramParameter4dNV_dispatch_table_thunk; + epoxy_glProgramParameter4dvNV = epoxy_glProgramParameter4dvNV_dispatch_table_thunk; + epoxy_glProgramParameter4fNV = epoxy_glProgramParameter4fNV_dispatch_table_thunk; + epoxy_glProgramParameter4fvNV = epoxy_glProgramParameter4fvNV_dispatch_table_thunk; + epoxy_glProgramParameteri = epoxy_glProgramParameteri_dispatch_table_thunk; + epoxy_glProgramParameteriARB = epoxy_glProgramParameteriARB_dispatch_table_thunk; + epoxy_glProgramParameteriEXT = epoxy_glProgramParameteriEXT_dispatch_table_thunk; + epoxy_glProgramParameters4dvNV = epoxy_glProgramParameters4dvNV_dispatch_table_thunk; + epoxy_glProgramParameters4fvNV = epoxy_glProgramParameters4fvNV_dispatch_table_thunk; + epoxy_glProgramPathFragmentInputGenNV = epoxy_glProgramPathFragmentInputGenNV_dispatch_table_thunk; + epoxy_glProgramStringARB = epoxy_glProgramStringARB_dispatch_table_thunk; + epoxy_glProgramSubroutineParametersuivNV = epoxy_glProgramSubroutineParametersuivNV_dispatch_table_thunk; + epoxy_glProgramUniform1d = epoxy_glProgramUniform1d_dispatch_table_thunk; + epoxy_glProgramUniform1dEXT = epoxy_glProgramUniform1dEXT_dispatch_table_thunk; + epoxy_glProgramUniform1dv = epoxy_glProgramUniform1dv_dispatch_table_thunk; + epoxy_glProgramUniform1dvEXT = epoxy_glProgramUniform1dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform1f = epoxy_glProgramUniform1f_dispatch_table_thunk; + epoxy_glProgramUniform1fEXT = epoxy_glProgramUniform1fEXT_dispatch_table_thunk; + epoxy_glProgramUniform1fv = epoxy_glProgramUniform1fv_dispatch_table_thunk; + epoxy_glProgramUniform1fvEXT = epoxy_glProgramUniform1fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform1i = epoxy_glProgramUniform1i_dispatch_table_thunk; + epoxy_glProgramUniform1i64ARB = epoxy_glProgramUniform1i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform1i64NV = epoxy_glProgramUniform1i64NV_dispatch_table_thunk; + epoxy_glProgramUniform1i64vARB = epoxy_glProgramUniform1i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform1i64vNV = epoxy_glProgramUniform1i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform1iEXT = epoxy_glProgramUniform1iEXT_dispatch_table_thunk; + epoxy_glProgramUniform1iv = epoxy_glProgramUniform1iv_dispatch_table_thunk; + epoxy_glProgramUniform1ivEXT = epoxy_glProgramUniform1ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform1ui = epoxy_glProgramUniform1ui_dispatch_table_thunk; + epoxy_glProgramUniform1ui64ARB = epoxy_glProgramUniform1ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform1ui64NV = epoxy_glProgramUniform1ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform1ui64vARB = epoxy_glProgramUniform1ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform1ui64vNV = epoxy_glProgramUniform1ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform1uiEXT = epoxy_glProgramUniform1uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform1uiv = epoxy_glProgramUniform1uiv_dispatch_table_thunk; + epoxy_glProgramUniform1uivEXT = epoxy_glProgramUniform1uivEXT_dispatch_table_thunk; + epoxy_glProgramUniform2d = epoxy_glProgramUniform2d_dispatch_table_thunk; + epoxy_glProgramUniform2dEXT = epoxy_glProgramUniform2dEXT_dispatch_table_thunk; + epoxy_glProgramUniform2dv = epoxy_glProgramUniform2dv_dispatch_table_thunk; + epoxy_glProgramUniform2dvEXT = epoxy_glProgramUniform2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform2f = epoxy_glProgramUniform2f_dispatch_table_thunk; + epoxy_glProgramUniform2fEXT = epoxy_glProgramUniform2fEXT_dispatch_table_thunk; + epoxy_glProgramUniform2fv = epoxy_glProgramUniform2fv_dispatch_table_thunk; + epoxy_glProgramUniform2fvEXT = epoxy_glProgramUniform2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform2i = epoxy_glProgramUniform2i_dispatch_table_thunk; + epoxy_glProgramUniform2i64ARB = epoxy_glProgramUniform2i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform2i64NV = epoxy_glProgramUniform2i64NV_dispatch_table_thunk; + epoxy_glProgramUniform2i64vARB = epoxy_glProgramUniform2i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform2i64vNV = epoxy_glProgramUniform2i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform2iEXT = epoxy_glProgramUniform2iEXT_dispatch_table_thunk; + epoxy_glProgramUniform2iv = epoxy_glProgramUniform2iv_dispatch_table_thunk; + epoxy_glProgramUniform2ivEXT = epoxy_glProgramUniform2ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform2ui = epoxy_glProgramUniform2ui_dispatch_table_thunk; + epoxy_glProgramUniform2ui64ARB = epoxy_glProgramUniform2ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform2ui64NV = epoxy_glProgramUniform2ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform2ui64vARB = epoxy_glProgramUniform2ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform2ui64vNV = epoxy_glProgramUniform2ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform2uiEXT = epoxy_glProgramUniform2uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform2uiv = epoxy_glProgramUniform2uiv_dispatch_table_thunk; + epoxy_glProgramUniform2uivEXT = epoxy_glProgramUniform2uivEXT_dispatch_table_thunk; + epoxy_glProgramUniform3d = epoxy_glProgramUniform3d_dispatch_table_thunk; + epoxy_glProgramUniform3dEXT = epoxy_glProgramUniform3dEXT_dispatch_table_thunk; + epoxy_glProgramUniform3dv = epoxy_glProgramUniform3dv_dispatch_table_thunk; + epoxy_glProgramUniform3dvEXT = epoxy_glProgramUniform3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform3f = epoxy_glProgramUniform3f_dispatch_table_thunk; + epoxy_glProgramUniform3fEXT = epoxy_glProgramUniform3fEXT_dispatch_table_thunk; + epoxy_glProgramUniform3fv = epoxy_glProgramUniform3fv_dispatch_table_thunk; + epoxy_glProgramUniform3fvEXT = epoxy_glProgramUniform3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform3i = epoxy_glProgramUniform3i_dispatch_table_thunk; + epoxy_glProgramUniform3i64ARB = epoxy_glProgramUniform3i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform3i64NV = epoxy_glProgramUniform3i64NV_dispatch_table_thunk; + epoxy_glProgramUniform3i64vARB = epoxy_glProgramUniform3i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform3i64vNV = epoxy_glProgramUniform3i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform3iEXT = epoxy_glProgramUniform3iEXT_dispatch_table_thunk; + epoxy_glProgramUniform3iv = epoxy_glProgramUniform3iv_dispatch_table_thunk; + epoxy_glProgramUniform3ivEXT = epoxy_glProgramUniform3ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform3ui = epoxy_glProgramUniform3ui_dispatch_table_thunk; + epoxy_glProgramUniform3ui64ARB = epoxy_glProgramUniform3ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform3ui64NV = epoxy_glProgramUniform3ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform3ui64vARB = epoxy_glProgramUniform3ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform3ui64vNV = epoxy_glProgramUniform3ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform3uiEXT = epoxy_glProgramUniform3uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform3uiv = epoxy_glProgramUniform3uiv_dispatch_table_thunk; + epoxy_glProgramUniform3uivEXT = epoxy_glProgramUniform3uivEXT_dispatch_table_thunk; + epoxy_glProgramUniform4d = epoxy_glProgramUniform4d_dispatch_table_thunk; + epoxy_glProgramUniform4dEXT = epoxy_glProgramUniform4dEXT_dispatch_table_thunk; + epoxy_glProgramUniform4dv = epoxy_glProgramUniform4dv_dispatch_table_thunk; + epoxy_glProgramUniform4dvEXT = epoxy_glProgramUniform4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniform4f = epoxy_glProgramUniform4f_dispatch_table_thunk; + epoxy_glProgramUniform4fEXT = epoxy_glProgramUniform4fEXT_dispatch_table_thunk; + epoxy_glProgramUniform4fv = epoxy_glProgramUniform4fv_dispatch_table_thunk; + epoxy_glProgramUniform4fvEXT = epoxy_glProgramUniform4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniform4i = epoxy_glProgramUniform4i_dispatch_table_thunk; + epoxy_glProgramUniform4i64ARB = epoxy_glProgramUniform4i64ARB_dispatch_table_thunk; + epoxy_glProgramUniform4i64NV = epoxy_glProgramUniform4i64NV_dispatch_table_thunk; + epoxy_glProgramUniform4i64vARB = epoxy_glProgramUniform4i64vARB_dispatch_table_thunk; + epoxy_glProgramUniform4i64vNV = epoxy_glProgramUniform4i64vNV_dispatch_table_thunk; + epoxy_glProgramUniform4iEXT = epoxy_glProgramUniform4iEXT_dispatch_table_thunk; + epoxy_glProgramUniform4iv = epoxy_glProgramUniform4iv_dispatch_table_thunk; + epoxy_glProgramUniform4ivEXT = epoxy_glProgramUniform4ivEXT_dispatch_table_thunk; + epoxy_glProgramUniform4ui = epoxy_glProgramUniform4ui_dispatch_table_thunk; + epoxy_glProgramUniform4ui64ARB = epoxy_glProgramUniform4ui64ARB_dispatch_table_thunk; + epoxy_glProgramUniform4ui64NV = epoxy_glProgramUniform4ui64NV_dispatch_table_thunk; + epoxy_glProgramUniform4ui64vARB = epoxy_glProgramUniform4ui64vARB_dispatch_table_thunk; + epoxy_glProgramUniform4ui64vNV = epoxy_glProgramUniform4ui64vNV_dispatch_table_thunk; + epoxy_glProgramUniform4uiEXT = epoxy_glProgramUniform4uiEXT_dispatch_table_thunk; + epoxy_glProgramUniform4uiv = epoxy_glProgramUniform4uiv_dispatch_table_thunk; + epoxy_glProgramUniform4uivEXT = epoxy_glProgramUniform4uivEXT_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64ARB = epoxy_glProgramUniformHandleui64ARB_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64NV = epoxy_glProgramUniformHandleui64NV_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64vARB = epoxy_glProgramUniformHandleui64vARB_dispatch_table_thunk; + epoxy_glProgramUniformHandleui64vNV = epoxy_glProgramUniformHandleui64vNV_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2dv = epoxy_glProgramUniformMatrix2dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2dvEXT = epoxy_glProgramUniformMatrix2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2fv = epoxy_glProgramUniformMatrix2fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2fvEXT = epoxy_glProgramUniformMatrix2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3dv = epoxy_glProgramUniformMatrix2x3dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3dvEXT = epoxy_glProgramUniformMatrix2x3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3fv = epoxy_glProgramUniformMatrix2x3fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x3fvEXT = epoxy_glProgramUniformMatrix2x3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4dv = epoxy_glProgramUniformMatrix2x4dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4dvEXT = epoxy_glProgramUniformMatrix2x4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4fv = epoxy_glProgramUniformMatrix2x4fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix2x4fvEXT = epoxy_glProgramUniformMatrix2x4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3dv = epoxy_glProgramUniformMatrix3dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3dvEXT = epoxy_glProgramUniformMatrix3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3fv = epoxy_glProgramUniformMatrix3fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3fvEXT = epoxy_glProgramUniformMatrix3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2dv = epoxy_glProgramUniformMatrix3x2dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2dvEXT = epoxy_glProgramUniformMatrix3x2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2fv = epoxy_glProgramUniformMatrix3x2fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x2fvEXT = epoxy_glProgramUniformMatrix3x2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4dv = epoxy_glProgramUniformMatrix3x4dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4dvEXT = epoxy_glProgramUniformMatrix3x4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4fv = epoxy_glProgramUniformMatrix3x4fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix3x4fvEXT = epoxy_glProgramUniformMatrix3x4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4dv = epoxy_glProgramUniformMatrix4dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4dvEXT = epoxy_glProgramUniformMatrix4dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4fv = epoxy_glProgramUniformMatrix4fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4fvEXT = epoxy_glProgramUniformMatrix4fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2dv = epoxy_glProgramUniformMatrix4x2dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2dvEXT = epoxy_glProgramUniformMatrix4x2dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2fv = epoxy_glProgramUniformMatrix4x2fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x2fvEXT = epoxy_glProgramUniformMatrix4x2fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3dv = epoxy_glProgramUniformMatrix4x3dv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3dvEXT = epoxy_glProgramUniformMatrix4x3dvEXT_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3fv = epoxy_glProgramUniformMatrix4x3fv_dispatch_table_thunk; + epoxy_glProgramUniformMatrix4x3fvEXT = epoxy_glProgramUniformMatrix4x3fvEXT_dispatch_table_thunk; + epoxy_glProgramUniformui64NV = epoxy_glProgramUniformui64NV_dispatch_table_thunk; + epoxy_glProgramUniformui64vNV = epoxy_glProgramUniformui64vNV_dispatch_table_thunk; + epoxy_glProgramVertexLimitNV = epoxy_glProgramVertexLimitNV_dispatch_table_thunk; + epoxy_glProvokingVertex = epoxy_glProvokingVertex_dispatch_table_thunk; + epoxy_glProvokingVertexEXT = epoxy_glProvokingVertexEXT_dispatch_table_thunk; + epoxy_glPushAttrib = epoxy_glPushAttrib_dispatch_table_thunk; + epoxy_glPushClientAttrib = epoxy_glPushClientAttrib_dispatch_table_thunk; + epoxy_glPushClientAttribDefaultEXT = epoxy_glPushClientAttribDefaultEXT_dispatch_table_thunk; + epoxy_glPushDebugGroup = epoxy_glPushDebugGroup_dispatch_table_thunk; + epoxy_glPushDebugGroupKHR = epoxy_glPushDebugGroupKHR_dispatch_table_thunk; + epoxy_glPushGroupMarkerEXT = epoxy_glPushGroupMarkerEXT_dispatch_table_thunk; + epoxy_glPushMatrix = epoxy_glPushMatrix_dispatch_table_thunk; + epoxy_glPushName = epoxy_glPushName_dispatch_table_thunk; + epoxy_glQueryCounter = epoxy_glQueryCounter_dispatch_table_thunk; + epoxy_glQueryCounterEXT = epoxy_glQueryCounterEXT_dispatch_table_thunk; + epoxy_glQueryMatrixxOES = epoxy_glQueryMatrixxOES_dispatch_table_thunk; + epoxy_glQueryObjectParameteruiAMD = epoxy_glQueryObjectParameteruiAMD_dispatch_table_thunk; + epoxy_glRasterPos2d = epoxy_glRasterPos2d_dispatch_table_thunk; + epoxy_glRasterPos2dv = epoxy_glRasterPos2dv_dispatch_table_thunk; + epoxy_glRasterPos2f = epoxy_glRasterPos2f_dispatch_table_thunk; + epoxy_glRasterPos2fv = epoxy_glRasterPos2fv_dispatch_table_thunk; + epoxy_glRasterPos2i = epoxy_glRasterPos2i_dispatch_table_thunk; + epoxy_glRasterPos2iv = epoxy_glRasterPos2iv_dispatch_table_thunk; + epoxy_glRasterPos2s = epoxy_glRasterPos2s_dispatch_table_thunk; + epoxy_glRasterPos2sv = epoxy_glRasterPos2sv_dispatch_table_thunk; + epoxy_glRasterPos2xOES = epoxy_glRasterPos2xOES_dispatch_table_thunk; + epoxy_glRasterPos2xvOES = epoxy_glRasterPos2xvOES_dispatch_table_thunk; + epoxy_glRasterPos3d = epoxy_glRasterPos3d_dispatch_table_thunk; + epoxy_glRasterPos3dv = epoxy_glRasterPos3dv_dispatch_table_thunk; + epoxy_glRasterPos3f = epoxy_glRasterPos3f_dispatch_table_thunk; + epoxy_glRasterPos3fv = epoxy_glRasterPos3fv_dispatch_table_thunk; + epoxy_glRasterPos3i = epoxy_glRasterPos3i_dispatch_table_thunk; + epoxy_glRasterPos3iv = epoxy_glRasterPos3iv_dispatch_table_thunk; + epoxy_glRasterPos3s = epoxy_glRasterPos3s_dispatch_table_thunk; + epoxy_glRasterPos3sv = epoxy_glRasterPos3sv_dispatch_table_thunk; + epoxy_glRasterPos3xOES = epoxy_glRasterPos3xOES_dispatch_table_thunk; + epoxy_glRasterPos3xvOES = epoxy_glRasterPos3xvOES_dispatch_table_thunk; + epoxy_glRasterPos4d = epoxy_glRasterPos4d_dispatch_table_thunk; + epoxy_glRasterPos4dv = epoxy_glRasterPos4dv_dispatch_table_thunk; + epoxy_glRasterPos4f = epoxy_glRasterPos4f_dispatch_table_thunk; + epoxy_glRasterPos4fv = epoxy_glRasterPos4fv_dispatch_table_thunk; + epoxy_glRasterPos4i = epoxy_glRasterPos4i_dispatch_table_thunk; + epoxy_glRasterPos4iv = epoxy_glRasterPos4iv_dispatch_table_thunk; + epoxy_glRasterPos4s = epoxy_glRasterPos4s_dispatch_table_thunk; + epoxy_glRasterPos4sv = epoxy_glRasterPos4sv_dispatch_table_thunk; + epoxy_glRasterPos4xOES = epoxy_glRasterPos4xOES_dispatch_table_thunk; + epoxy_glRasterPos4xvOES = epoxy_glRasterPos4xvOES_dispatch_table_thunk; + epoxy_glRasterSamplesEXT = epoxy_glRasterSamplesEXT_dispatch_table_thunk; + epoxy_glReadBuffer = epoxy_glReadBuffer_dispatch_table_thunk; + epoxy_glReadBufferIndexedEXT = epoxy_glReadBufferIndexedEXT_dispatch_table_thunk; + epoxy_glReadBufferNV = epoxy_glReadBufferNV_dispatch_table_thunk; + epoxy_glReadInstrumentsSGIX = epoxy_glReadInstrumentsSGIX_dispatch_table_thunk; + epoxy_glReadPixels = epoxy_glReadPixels_dispatch_table_thunk; + epoxy_glReadnPixels = epoxy_glReadnPixels_dispatch_table_thunk; + epoxy_glReadnPixelsARB = epoxy_glReadnPixelsARB_dispatch_table_thunk; + epoxy_glReadnPixelsEXT = epoxy_glReadnPixelsEXT_dispatch_table_thunk; + epoxy_glReadnPixelsKHR = epoxy_glReadnPixelsKHR_dispatch_table_thunk; + epoxy_glRectd = epoxy_glRectd_dispatch_table_thunk; + epoxy_glRectdv = epoxy_glRectdv_dispatch_table_thunk; + epoxy_glRectf = epoxy_glRectf_dispatch_table_thunk; + epoxy_glRectfv = epoxy_glRectfv_dispatch_table_thunk; + epoxy_glRecti = epoxy_glRecti_dispatch_table_thunk; + epoxy_glRectiv = epoxy_glRectiv_dispatch_table_thunk; + epoxy_glRects = epoxy_glRects_dispatch_table_thunk; + epoxy_glRectsv = epoxy_glRectsv_dispatch_table_thunk; + epoxy_glRectxOES = epoxy_glRectxOES_dispatch_table_thunk; + epoxy_glRectxvOES = epoxy_glRectxvOES_dispatch_table_thunk; + epoxy_glReferencePlaneSGIX = epoxy_glReferencePlaneSGIX_dispatch_table_thunk; + epoxy_glReleaseShaderCompiler = epoxy_glReleaseShaderCompiler_dispatch_table_thunk; + epoxy_glRenderMode = epoxy_glRenderMode_dispatch_table_thunk; + epoxy_glRenderbufferStorage = epoxy_glRenderbufferStorage_dispatch_table_thunk; + epoxy_glRenderbufferStorageEXT = epoxy_glRenderbufferStorageEXT_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisample = epoxy_glRenderbufferStorageMultisample_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleANGLE = epoxy_glRenderbufferStorageMultisampleANGLE_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleAPPLE = epoxy_glRenderbufferStorageMultisampleAPPLE_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleCoverageNV = epoxy_glRenderbufferStorageMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleEXT = epoxy_glRenderbufferStorageMultisampleEXT_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleIMG = epoxy_glRenderbufferStorageMultisampleIMG_dispatch_table_thunk; + epoxy_glRenderbufferStorageMultisampleNV = epoxy_glRenderbufferStorageMultisampleNV_dispatch_table_thunk; + epoxy_glRenderbufferStorageOES = epoxy_glRenderbufferStorageOES_dispatch_table_thunk; + epoxy_glReplacementCodePointerSUN = epoxy_glReplacementCodePointerSUN_dispatch_table_thunk; + epoxy_glReplacementCodeubSUN = epoxy_glReplacementCodeubSUN_dispatch_table_thunk; + epoxy_glReplacementCodeubvSUN = epoxy_glReplacementCodeubvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor3fVertex3fSUN = epoxy_glReplacementCodeuiColor3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor3fVertex3fvSUN = epoxy_glReplacementCodeuiColor3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4ubVertex3fSUN = epoxy_glReplacementCodeuiColor4ubVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiColor4ubVertex3fvSUN = epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiNormal3fVertex3fSUN = epoxy_glReplacementCodeuiNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiSUN = epoxy_glReplacementCodeuiSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiVertex3fSUN = epoxy_glReplacementCodeuiVertex3fSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuiVertex3fvSUN = epoxy_glReplacementCodeuiVertex3fvSUN_dispatch_table_thunk; + epoxy_glReplacementCodeuivSUN = epoxy_glReplacementCodeuivSUN_dispatch_table_thunk; + epoxy_glReplacementCodeusSUN = epoxy_glReplacementCodeusSUN_dispatch_table_thunk; + epoxy_glReplacementCodeusvSUN = epoxy_glReplacementCodeusvSUN_dispatch_table_thunk; + epoxy_glRequestResidentProgramsNV = epoxy_glRequestResidentProgramsNV_dispatch_table_thunk; + epoxy_glResetHistogram = epoxy_glResetHistogram_dispatch_table_thunk; + epoxy_glResetHistogramEXT = epoxy_glResetHistogramEXT_dispatch_table_thunk; + epoxy_glResetMinmax = epoxy_glResetMinmax_dispatch_table_thunk; + epoxy_glResetMinmaxEXT = epoxy_glResetMinmaxEXT_dispatch_table_thunk; + epoxy_glResizeBuffersMESA = epoxy_glResizeBuffersMESA_dispatch_table_thunk; + epoxy_glResolveDepthValuesNV = epoxy_glResolveDepthValuesNV_dispatch_table_thunk; + epoxy_glResolveMultisampleFramebufferAPPLE = epoxy_glResolveMultisampleFramebufferAPPLE_dispatch_table_thunk; + epoxy_glResumeTransformFeedback = epoxy_glResumeTransformFeedback_dispatch_table_thunk; + epoxy_glResumeTransformFeedbackNV = epoxy_glResumeTransformFeedbackNV_dispatch_table_thunk; + epoxy_glRotated = epoxy_glRotated_dispatch_table_thunk; + epoxy_glRotatef = epoxy_glRotatef_dispatch_table_thunk; + epoxy_glRotatex = epoxy_glRotatex_dispatch_table_thunk; + epoxy_glRotatexOES = epoxy_glRotatexOES_dispatch_table_thunk; + epoxy_glSampleCoverage = epoxy_glSampleCoverage_dispatch_table_thunk; + epoxy_glSampleCoverageARB = epoxy_glSampleCoverageARB_dispatch_table_thunk; + epoxy_glSampleCoveragex = epoxy_glSampleCoveragex_dispatch_table_thunk; + epoxy_glSampleCoveragexOES = epoxy_glSampleCoveragexOES_dispatch_table_thunk; + epoxy_glSampleMapATI = epoxy_glSampleMapATI_dispatch_table_thunk; + epoxy_glSampleMaskEXT = epoxy_glSampleMaskEXT_dispatch_table_thunk; + epoxy_glSampleMaskIndexedNV = epoxy_glSampleMaskIndexedNV_dispatch_table_thunk; + epoxy_glSampleMaskSGIS = epoxy_glSampleMaskSGIS_dispatch_table_thunk; + epoxy_glSampleMaski = epoxy_glSampleMaski_dispatch_table_thunk; + epoxy_glSamplePatternEXT = epoxy_glSamplePatternEXT_dispatch_table_thunk; + epoxy_glSamplePatternSGIS = epoxy_glSamplePatternSGIS_dispatch_table_thunk; + epoxy_glSamplerParameterIiv = epoxy_glSamplerParameterIiv_dispatch_table_thunk; + epoxy_glSamplerParameterIivEXT = epoxy_glSamplerParameterIivEXT_dispatch_table_thunk; + epoxy_glSamplerParameterIivOES = epoxy_glSamplerParameterIivOES_dispatch_table_thunk; + epoxy_glSamplerParameterIuiv = epoxy_glSamplerParameterIuiv_dispatch_table_thunk; + epoxy_glSamplerParameterIuivEXT = epoxy_glSamplerParameterIuivEXT_dispatch_table_thunk; + epoxy_glSamplerParameterIuivOES = epoxy_glSamplerParameterIuivOES_dispatch_table_thunk; + epoxy_glSamplerParameterf = epoxy_glSamplerParameterf_dispatch_table_thunk; + epoxy_glSamplerParameterfv = epoxy_glSamplerParameterfv_dispatch_table_thunk; + epoxy_glSamplerParameteri = epoxy_glSamplerParameteri_dispatch_table_thunk; + epoxy_glSamplerParameteriv = epoxy_glSamplerParameteriv_dispatch_table_thunk; + epoxy_glScaled = epoxy_glScaled_dispatch_table_thunk; + epoxy_glScalef = epoxy_glScalef_dispatch_table_thunk; + epoxy_glScalex = epoxy_glScalex_dispatch_table_thunk; + epoxy_glScalexOES = epoxy_glScalexOES_dispatch_table_thunk; + epoxy_glScissor = epoxy_glScissor_dispatch_table_thunk; + epoxy_glScissorArrayv = epoxy_glScissorArrayv_dispatch_table_thunk; + epoxy_glScissorArrayvNV = epoxy_glScissorArrayvNV_dispatch_table_thunk; + epoxy_glScissorIndexed = epoxy_glScissorIndexed_dispatch_table_thunk; + epoxy_glScissorIndexedNV = epoxy_glScissorIndexedNV_dispatch_table_thunk; + epoxy_glScissorIndexedv = epoxy_glScissorIndexedv_dispatch_table_thunk; + epoxy_glScissorIndexedvNV = epoxy_glScissorIndexedvNV_dispatch_table_thunk; + epoxy_glSecondaryColor3b = epoxy_glSecondaryColor3b_dispatch_table_thunk; + epoxy_glSecondaryColor3bEXT = epoxy_glSecondaryColor3bEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3bv = epoxy_glSecondaryColor3bv_dispatch_table_thunk; + epoxy_glSecondaryColor3bvEXT = epoxy_glSecondaryColor3bvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3d = epoxy_glSecondaryColor3d_dispatch_table_thunk; + epoxy_glSecondaryColor3dEXT = epoxy_glSecondaryColor3dEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3dv = epoxy_glSecondaryColor3dv_dispatch_table_thunk; + epoxy_glSecondaryColor3dvEXT = epoxy_glSecondaryColor3dvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3f = epoxy_glSecondaryColor3f_dispatch_table_thunk; + epoxy_glSecondaryColor3fEXT = epoxy_glSecondaryColor3fEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3fv = epoxy_glSecondaryColor3fv_dispatch_table_thunk; + epoxy_glSecondaryColor3fvEXT = epoxy_glSecondaryColor3fvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3hNV = epoxy_glSecondaryColor3hNV_dispatch_table_thunk; + epoxy_glSecondaryColor3hvNV = epoxy_glSecondaryColor3hvNV_dispatch_table_thunk; + epoxy_glSecondaryColor3i = epoxy_glSecondaryColor3i_dispatch_table_thunk; + epoxy_glSecondaryColor3iEXT = epoxy_glSecondaryColor3iEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3iv = epoxy_glSecondaryColor3iv_dispatch_table_thunk; + epoxy_glSecondaryColor3ivEXT = epoxy_glSecondaryColor3ivEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3s = epoxy_glSecondaryColor3s_dispatch_table_thunk; + epoxy_glSecondaryColor3sEXT = epoxy_glSecondaryColor3sEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3sv = epoxy_glSecondaryColor3sv_dispatch_table_thunk; + epoxy_glSecondaryColor3svEXT = epoxy_glSecondaryColor3svEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3ub = epoxy_glSecondaryColor3ub_dispatch_table_thunk; + epoxy_glSecondaryColor3ubEXT = epoxy_glSecondaryColor3ubEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3ubv = epoxy_glSecondaryColor3ubv_dispatch_table_thunk; + epoxy_glSecondaryColor3ubvEXT = epoxy_glSecondaryColor3ubvEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3ui = epoxy_glSecondaryColor3ui_dispatch_table_thunk; + epoxy_glSecondaryColor3uiEXT = epoxy_glSecondaryColor3uiEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3uiv = epoxy_glSecondaryColor3uiv_dispatch_table_thunk; + epoxy_glSecondaryColor3uivEXT = epoxy_glSecondaryColor3uivEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3us = epoxy_glSecondaryColor3us_dispatch_table_thunk; + epoxy_glSecondaryColor3usEXT = epoxy_glSecondaryColor3usEXT_dispatch_table_thunk; + epoxy_glSecondaryColor3usv = epoxy_glSecondaryColor3usv_dispatch_table_thunk; + epoxy_glSecondaryColor3usvEXT = epoxy_glSecondaryColor3usvEXT_dispatch_table_thunk; + epoxy_glSecondaryColorFormatNV = epoxy_glSecondaryColorFormatNV_dispatch_table_thunk; + epoxy_glSecondaryColorP3ui = epoxy_glSecondaryColorP3ui_dispatch_table_thunk; + epoxy_glSecondaryColorP3uiv = epoxy_glSecondaryColorP3uiv_dispatch_table_thunk; + epoxy_glSecondaryColorPointer = epoxy_glSecondaryColorPointer_dispatch_table_thunk; + epoxy_glSecondaryColorPointerEXT = epoxy_glSecondaryColorPointerEXT_dispatch_table_thunk; + epoxy_glSecondaryColorPointerListIBM = epoxy_glSecondaryColorPointerListIBM_dispatch_table_thunk; + epoxy_glSelectBuffer = epoxy_glSelectBuffer_dispatch_table_thunk; + epoxy_glSelectPerfMonitorCountersAMD = epoxy_glSelectPerfMonitorCountersAMD_dispatch_table_thunk; + epoxy_glSeparableFilter2D = epoxy_glSeparableFilter2D_dispatch_table_thunk; + epoxy_glSeparableFilter2DEXT = epoxy_glSeparableFilter2DEXT_dispatch_table_thunk; + epoxy_glSetFenceAPPLE = epoxy_glSetFenceAPPLE_dispatch_table_thunk; + epoxy_glSetFenceNV = epoxy_glSetFenceNV_dispatch_table_thunk; + epoxy_glSetFragmentShaderConstantATI = epoxy_glSetFragmentShaderConstantATI_dispatch_table_thunk; + epoxy_glSetInvariantEXT = epoxy_glSetInvariantEXT_dispatch_table_thunk; + epoxy_glSetLocalConstantEXT = epoxy_glSetLocalConstantEXT_dispatch_table_thunk; + epoxy_glSetMultisamplefvAMD = epoxy_glSetMultisamplefvAMD_dispatch_table_thunk; + epoxy_glShadeModel = epoxy_glShadeModel_dispatch_table_thunk; + epoxy_glShaderBinary = epoxy_glShaderBinary_dispatch_table_thunk; + epoxy_glShaderOp1EXT = epoxy_glShaderOp1EXT_dispatch_table_thunk; + epoxy_glShaderOp2EXT = epoxy_glShaderOp2EXT_dispatch_table_thunk; + epoxy_glShaderOp3EXT = epoxy_glShaderOp3EXT_dispatch_table_thunk; + epoxy_glShaderSource = epoxy_glShaderSource_dispatch_table_thunk; + epoxy_glShaderSourceARB = epoxy_glShaderSourceARB_dispatch_table_thunk; + epoxy_glShaderStorageBlockBinding = epoxy_glShaderStorageBlockBinding_dispatch_table_thunk; + epoxy_glSharpenTexFuncSGIS = epoxy_glSharpenTexFuncSGIS_dispatch_table_thunk; + epoxy_glSpriteParameterfSGIX = epoxy_glSpriteParameterfSGIX_dispatch_table_thunk; + epoxy_glSpriteParameterfvSGIX = epoxy_glSpriteParameterfvSGIX_dispatch_table_thunk; + epoxy_glSpriteParameteriSGIX = epoxy_glSpriteParameteriSGIX_dispatch_table_thunk; + epoxy_glSpriteParameterivSGIX = epoxy_glSpriteParameterivSGIX_dispatch_table_thunk; + epoxy_glStartInstrumentsSGIX = epoxy_glStartInstrumentsSGIX_dispatch_table_thunk; + epoxy_glStartTilingQCOM = epoxy_glStartTilingQCOM_dispatch_table_thunk; + epoxy_glStateCaptureNV = epoxy_glStateCaptureNV_dispatch_table_thunk; + epoxy_glStencilClearTagEXT = epoxy_glStencilClearTagEXT_dispatch_table_thunk; + epoxy_glStencilFillPathInstancedNV = epoxy_glStencilFillPathInstancedNV_dispatch_table_thunk; + epoxy_glStencilFillPathNV = epoxy_glStencilFillPathNV_dispatch_table_thunk; + epoxy_glStencilFunc = epoxy_glStencilFunc_dispatch_table_thunk; + epoxy_glStencilFuncSeparate = epoxy_glStencilFuncSeparate_dispatch_table_thunk; + epoxy_glStencilFuncSeparateATI = epoxy_glStencilFuncSeparateATI_dispatch_table_thunk; + epoxy_glStencilMask = epoxy_glStencilMask_dispatch_table_thunk; + epoxy_glStencilMaskSeparate = epoxy_glStencilMaskSeparate_dispatch_table_thunk; + epoxy_glStencilOp = epoxy_glStencilOp_dispatch_table_thunk; + epoxy_glStencilOpSeparate = epoxy_glStencilOpSeparate_dispatch_table_thunk; + epoxy_glStencilOpSeparateATI = epoxy_glStencilOpSeparateATI_dispatch_table_thunk; + epoxy_glStencilOpValueAMD = epoxy_glStencilOpValueAMD_dispatch_table_thunk; + epoxy_glStencilStrokePathInstancedNV = epoxy_glStencilStrokePathInstancedNV_dispatch_table_thunk; + epoxy_glStencilStrokePathNV = epoxy_glStencilStrokePathNV_dispatch_table_thunk; + epoxy_glStencilThenCoverFillPathInstancedNV = epoxy_glStencilThenCoverFillPathInstancedNV_dispatch_table_thunk; + epoxy_glStencilThenCoverFillPathNV = epoxy_glStencilThenCoverFillPathNV_dispatch_table_thunk; + epoxy_glStencilThenCoverStrokePathInstancedNV = epoxy_glStencilThenCoverStrokePathInstancedNV_dispatch_table_thunk; + epoxy_glStencilThenCoverStrokePathNV = epoxy_glStencilThenCoverStrokePathNV_dispatch_table_thunk; + epoxy_glStopInstrumentsSGIX = epoxy_glStopInstrumentsSGIX_dispatch_table_thunk; + epoxy_glStringMarkerGREMEDY = epoxy_glStringMarkerGREMEDY_dispatch_table_thunk; + epoxy_glSubpixelPrecisionBiasNV = epoxy_glSubpixelPrecisionBiasNV_dispatch_table_thunk; + epoxy_glSwizzleEXT = epoxy_glSwizzleEXT_dispatch_table_thunk; + epoxy_glSyncTextureINTEL = epoxy_glSyncTextureINTEL_dispatch_table_thunk; + epoxy_glTagSampleBufferSGIX = epoxy_glTagSampleBufferSGIX_dispatch_table_thunk; + epoxy_glTangent3bEXT = epoxy_glTangent3bEXT_dispatch_table_thunk; + epoxy_glTangent3bvEXT = epoxy_glTangent3bvEXT_dispatch_table_thunk; + epoxy_glTangent3dEXT = epoxy_glTangent3dEXT_dispatch_table_thunk; + epoxy_glTangent3dvEXT = epoxy_glTangent3dvEXT_dispatch_table_thunk; + epoxy_glTangent3fEXT = epoxy_glTangent3fEXT_dispatch_table_thunk; + epoxy_glTangent3fvEXT = epoxy_glTangent3fvEXT_dispatch_table_thunk; + epoxy_glTangent3iEXT = epoxy_glTangent3iEXT_dispatch_table_thunk; + epoxy_glTangent3ivEXT = epoxy_glTangent3ivEXT_dispatch_table_thunk; + epoxy_glTangent3sEXT = epoxy_glTangent3sEXT_dispatch_table_thunk; + epoxy_glTangent3svEXT = epoxy_glTangent3svEXT_dispatch_table_thunk; + epoxy_glTangentPointerEXT = epoxy_glTangentPointerEXT_dispatch_table_thunk; + epoxy_glTbufferMask3DFX = epoxy_glTbufferMask3DFX_dispatch_table_thunk; + epoxy_glTessellationFactorAMD = epoxy_glTessellationFactorAMD_dispatch_table_thunk; + epoxy_glTessellationModeAMD = epoxy_glTessellationModeAMD_dispatch_table_thunk; + epoxy_glTestFenceAPPLE = epoxy_glTestFenceAPPLE_dispatch_table_thunk; + epoxy_glTestFenceNV = epoxy_glTestFenceNV_dispatch_table_thunk; + epoxy_glTestObjectAPPLE = epoxy_glTestObjectAPPLE_dispatch_table_thunk; + epoxy_glTexBuffer = epoxy_glTexBuffer_dispatch_table_thunk; + epoxy_glTexBufferARB = epoxy_glTexBufferARB_dispatch_table_thunk; + epoxy_glTexBufferEXT = epoxy_glTexBufferEXT_dispatch_table_thunk; + epoxy_glTexBufferOES = epoxy_glTexBufferOES_dispatch_table_thunk; + epoxy_glTexBufferRange = epoxy_glTexBufferRange_dispatch_table_thunk; + epoxy_glTexBufferRangeEXT = epoxy_glTexBufferRangeEXT_dispatch_table_thunk; + epoxy_glTexBufferRangeOES = epoxy_glTexBufferRangeOES_dispatch_table_thunk; + epoxy_glTexBumpParameterfvATI = epoxy_glTexBumpParameterfvATI_dispatch_table_thunk; + epoxy_glTexBumpParameterivATI = epoxy_glTexBumpParameterivATI_dispatch_table_thunk; + epoxy_glTexCoord1bOES = epoxy_glTexCoord1bOES_dispatch_table_thunk; + epoxy_glTexCoord1bvOES = epoxy_glTexCoord1bvOES_dispatch_table_thunk; + epoxy_glTexCoord1d = epoxy_glTexCoord1d_dispatch_table_thunk; + epoxy_glTexCoord1dv = epoxy_glTexCoord1dv_dispatch_table_thunk; + epoxy_glTexCoord1f = epoxy_glTexCoord1f_dispatch_table_thunk; + epoxy_glTexCoord1fv = epoxy_glTexCoord1fv_dispatch_table_thunk; + epoxy_glTexCoord1hNV = epoxy_glTexCoord1hNV_dispatch_table_thunk; + epoxy_glTexCoord1hvNV = epoxy_glTexCoord1hvNV_dispatch_table_thunk; + epoxy_glTexCoord1i = epoxy_glTexCoord1i_dispatch_table_thunk; + epoxy_glTexCoord1iv = epoxy_glTexCoord1iv_dispatch_table_thunk; + epoxy_glTexCoord1s = epoxy_glTexCoord1s_dispatch_table_thunk; + epoxy_glTexCoord1sv = epoxy_glTexCoord1sv_dispatch_table_thunk; + epoxy_glTexCoord1xOES = epoxy_glTexCoord1xOES_dispatch_table_thunk; + epoxy_glTexCoord1xvOES = epoxy_glTexCoord1xvOES_dispatch_table_thunk; + epoxy_glTexCoord2bOES = epoxy_glTexCoord2bOES_dispatch_table_thunk; + epoxy_glTexCoord2bvOES = epoxy_glTexCoord2bvOES_dispatch_table_thunk; + epoxy_glTexCoord2d = epoxy_glTexCoord2d_dispatch_table_thunk; + epoxy_glTexCoord2dv = epoxy_glTexCoord2dv_dispatch_table_thunk; + epoxy_glTexCoord2f = epoxy_glTexCoord2f_dispatch_table_thunk; + epoxy_glTexCoord2fColor3fVertex3fSUN = epoxy_glTexCoord2fColor3fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor3fVertex3fvSUN = epoxy_glTexCoord2fColor3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4ubVertex3fSUN = epoxy_glTexCoord2fColor4ubVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fColor4ubVertex3fvSUN = epoxy_glTexCoord2fColor4ubVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fNormal3fVertex3fSUN = epoxy_glTexCoord2fNormal3fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fNormal3fVertex3fvSUN = epoxy_glTexCoord2fNormal3fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fVertex3fSUN = epoxy_glTexCoord2fVertex3fSUN_dispatch_table_thunk; + epoxy_glTexCoord2fVertex3fvSUN = epoxy_glTexCoord2fVertex3fvSUN_dispatch_table_thunk; + epoxy_glTexCoord2fv = epoxy_glTexCoord2fv_dispatch_table_thunk; + epoxy_glTexCoord2hNV = epoxy_glTexCoord2hNV_dispatch_table_thunk; + epoxy_glTexCoord2hvNV = epoxy_glTexCoord2hvNV_dispatch_table_thunk; + epoxy_glTexCoord2i = epoxy_glTexCoord2i_dispatch_table_thunk; + epoxy_glTexCoord2iv = epoxy_glTexCoord2iv_dispatch_table_thunk; + epoxy_glTexCoord2s = epoxy_glTexCoord2s_dispatch_table_thunk; + epoxy_glTexCoord2sv = epoxy_glTexCoord2sv_dispatch_table_thunk; + epoxy_glTexCoord2xOES = epoxy_glTexCoord2xOES_dispatch_table_thunk; + epoxy_glTexCoord2xvOES = epoxy_glTexCoord2xvOES_dispatch_table_thunk; + epoxy_glTexCoord3bOES = epoxy_glTexCoord3bOES_dispatch_table_thunk; + epoxy_glTexCoord3bvOES = epoxy_glTexCoord3bvOES_dispatch_table_thunk; + epoxy_glTexCoord3d = epoxy_glTexCoord3d_dispatch_table_thunk; + epoxy_glTexCoord3dv = epoxy_glTexCoord3dv_dispatch_table_thunk; + epoxy_glTexCoord3f = epoxy_glTexCoord3f_dispatch_table_thunk; + epoxy_glTexCoord3fv = epoxy_glTexCoord3fv_dispatch_table_thunk; + epoxy_glTexCoord3hNV = epoxy_glTexCoord3hNV_dispatch_table_thunk; + epoxy_glTexCoord3hvNV = epoxy_glTexCoord3hvNV_dispatch_table_thunk; + epoxy_glTexCoord3i = epoxy_glTexCoord3i_dispatch_table_thunk; + epoxy_glTexCoord3iv = epoxy_glTexCoord3iv_dispatch_table_thunk; + epoxy_glTexCoord3s = epoxy_glTexCoord3s_dispatch_table_thunk; + epoxy_glTexCoord3sv = epoxy_glTexCoord3sv_dispatch_table_thunk; + epoxy_glTexCoord3xOES = epoxy_glTexCoord3xOES_dispatch_table_thunk; + epoxy_glTexCoord3xvOES = epoxy_glTexCoord3xvOES_dispatch_table_thunk; + epoxy_glTexCoord4bOES = epoxy_glTexCoord4bOES_dispatch_table_thunk; + epoxy_glTexCoord4bvOES = epoxy_glTexCoord4bvOES_dispatch_table_thunk; + epoxy_glTexCoord4d = epoxy_glTexCoord4d_dispatch_table_thunk; + epoxy_glTexCoord4dv = epoxy_glTexCoord4dv_dispatch_table_thunk; + epoxy_glTexCoord4f = epoxy_glTexCoord4f_dispatch_table_thunk; + epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_dispatch_table_thunk; + epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_dispatch_table_thunk; + epoxy_glTexCoord4fVertex4fSUN = epoxy_glTexCoord4fVertex4fSUN_dispatch_table_thunk; + epoxy_glTexCoord4fVertex4fvSUN = epoxy_glTexCoord4fVertex4fvSUN_dispatch_table_thunk; + epoxy_glTexCoord4fv = epoxy_glTexCoord4fv_dispatch_table_thunk; + epoxy_glTexCoord4hNV = epoxy_glTexCoord4hNV_dispatch_table_thunk; + epoxy_glTexCoord4hvNV = epoxy_glTexCoord4hvNV_dispatch_table_thunk; + epoxy_glTexCoord4i = epoxy_glTexCoord4i_dispatch_table_thunk; + epoxy_glTexCoord4iv = epoxy_glTexCoord4iv_dispatch_table_thunk; + epoxy_glTexCoord4s = epoxy_glTexCoord4s_dispatch_table_thunk; + epoxy_glTexCoord4sv = epoxy_glTexCoord4sv_dispatch_table_thunk; + epoxy_glTexCoord4xOES = epoxy_glTexCoord4xOES_dispatch_table_thunk; + epoxy_glTexCoord4xvOES = epoxy_glTexCoord4xvOES_dispatch_table_thunk; + epoxy_glTexCoordFormatNV = epoxy_glTexCoordFormatNV_dispatch_table_thunk; + epoxy_glTexCoordP1ui = epoxy_glTexCoordP1ui_dispatch_table_thunk; + epoxy_glTexCoordP1uiv = epoxy_glTexCoordP1uiv_dispatch_table_thunk; + epoxy_glTexCoordP2ui = epoxy_glTexCoordP2ui_dispatch_table_thunk; + epoxy_glTexCoordP2uiv = epoxy_glTexCoordP2uiv_dispatch_table_thunk; + epoxy_glTexCoordP3ui = epoxy_glTexCoordP3ui_dispatch_table_thunk; + epoxy_glTexCoordP3uiv = epoxy_glTexCoordP3uiv_dispatch_table_thunk; + epoxy_glTexCoordP4ui = epoxy_glTexCoordP4ui_dispatch_table_thunk; + epoxy_glTexCoordP4uiv = epoxy_glTexCoordP4uiv_dispatch_table_thunk; + epoxy_glTexCoordPointer = epoxy_glTexCoordPointer_dispatch_table_thunk; + epoxy_glTexCoordPointerEXT = epoxy_glTexCoordPointerEXT_dispatch_table_thunk; + epoxy_glTexCoordPointerListIBM = epoxy_glTexCoordPointerListIBM_dispatch_table_thunk; + epoxy_glTexCoordPointervINTEL = epoxy_glTexCoordPointervINTEL_dispatch_table_thunk; + epoxy_glTexEnvf = epoxy_glTexEnvf_dispatch_table_thunk; + epoxy_glTexEnvfv = epoxy_glTexEnvfv_dispatch_table_thunk; + epoxy_glTexEnvi = epoxy_glTexEnvi_dispatch_table_thunk; + epoxy_glTexEnviv = epoxy_glTexEnviv_dispatch_table_thunk; + epoxy_glTexEnvx = epoxy_glTexEnvx_dispatch_table_thunk; + epoxy_glTexEnvxOES = epoxy_glTexEnvxOES_dispatch_table_thunk; + epoxy_glTexEnvxv = epoxy_glTexEnvxv_dispatch_table_thunk; + epoxy_glTexEnvxvOES = epoxy_glTexEnvxvOES_dispatch_table_thunk; + epoxy_glTexFilterFuncSGIS = epoxy_glTexFilterFuncSGIS_dispatch_table_thunk; + epoxy_glTexGend = epoxy_glTexGend_dispatch_table_thunk; + epoxy_glTexGendv = epoxy_glTexGendv_dispatch_table_thunk; + epoxy_glTexGenf = epoxy_glTexGenf_dispatch_table_thunk; + epoxy_glTexGenfOES = epoxy_glTexGenfOES_dispatch_table_thunk; + epoxy_glTexGenfv = epoxy_glTexGenfv_dispatch_table_thunk; + epoxy_glTexGenfvOES = epoxy_glTexGenfvOES_dispatch_table_thunk; + epoxy_glTexGeni = epoxy_glTexGeni_dispatch_table_thunk; + epoxy_glTexGeniOES = epoxy_glTexGeniOES_dispatch_table_thunk; + epoxy_glTexGeniv = epoxy_glTexGeniv_dispatch_table_thunk; + epoxy_glTexGenivOES = epoxy_glTexGenivOES_dispatch_table_thunk; + epoxy_glTexGenxOES = epoxy_glTexGenxOES_dispatch_table_thunk; + epoxy_glTexGenxvOES = epoxy_glTexGenxvOES_dispatch_table_thunk; + epoxy_glTexImage1D = epoxy_glTexImage1D_dispatch_table_thunk; + epoxy_glTexImage2D = epoxy_glTexImage2D_dispatch_table_thunk; + epoxy_glTexImage2DMultisample = epoxy_glTexImage2DMultisample_dispatch_table_thunk; + epoxy_glTexImage2DMultisampleCoverageNV = epoxy_glTexImage2DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTexImage3D = epoxy_glTexImage3D_dispatch_table_thunk; + epoxy_glTexImage3DEXT = epoxy_glTexImage3DEXT_dispatch_table_thunk; + epoxy_glTexImage3DMultisample = epoxy_glTexImage3DMultisample_dispatch_table_thunk; + epoxy_glTexImage3DMultisampleCoverageNV = epoxy_glTexImage3DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTexImage3DOES = epoxy_glTexImage3DOES_dispatch_table_thunk; + epoxy_glTexImage4DSGIS = epoxy_glTexImage4DSGIS_dispatch_table_thunk; + epoxy_glTexPageCommitmentARB = epoxy_glTexPageCommitmentARB_dispatch_table_thunk; + epoxy_glTexPageCommitmentEXT = epoxy_glTexPageCommitmentEXT_dispatch_table_thunk; + epoxy_glTexParameterIiv = epoxy_glTexParameterIiv_dispatch_table_thunk; + epoxy_glTexParameterIivEXT = epoxy_glTexParameterIivEXT_dispatch_table_thunk; + epoxy_glTexParameterIivOES = epoxy_glTexParameterIivOES_dispatch_table_thunk; + epoxy_glTexParameterIuiv = epoxy_glTexParameterIuiv_dispatch_table_thunk; + epoxy_glTexParameterIuivEXT = epoxy_glTexParameterIuivEXT_dispatch_table_thunk; + epoxy_glTexParameterIuivOES = epoxy_glTexParameterIuivOES_dispatch_table_thunk; + epoxy_glTexParameterf = epoxy_glTexParameterf_dispatch_table_thunk; + epoxy_glTexParameterfv = epoxy_glTexParameterfv_dispatch_table_thunk; + epoxy_glTexParameteri = epoxy_glTexParameteri_dispatch_table_thunk; + epoxy_glTexParameteriv = epoxy_glTexParameteriv_dispatch_table_thunk; + epoxy_glTexParameterx = epoxy_glTexParameterx_dispatch_table_thunk; + epoxy_glTexParameterxOES = epoxy_glTexParameterxOES_dispatch_table_thunk; + epoxy_glTexParameterxv = epoxy_glTexParameterxv_dispatch_table_thunk; + epoxy_glTexParameterxvOES = epoxy_glTexParameterxvOES_dispatch_table_thunk; + epoxy_glTexRenderbufferNV = epoxy_glTexRenderbufferNV_dispatch_table_thunk; + epoxy_glTexStorage1D = epoxy_glTexStorage1D_dispatch_table_thunk; + epoxy_glTexStorage1DEXT = epoxy_glTexStorage1DEXT_dispatch_table_thunk; + epoxy_glTexStorage2D = epoxy_glTexStorage2D_dispatch_table_thunk; + epoxy_glTexStorage2DEXT = epoxy_glTexStorage2DEXT_dispatch_table_thunk; + epoxy_glTexStorage2DMultisample = epoxy_glTexStorage2DMultisample_dispatch_table_thunk; + epoxy_glTexStorage3D = epoxy_glTexStorage3D_dispatch_table_thunk; + epoxy_glTexStorage3DEXT = epoxy_glTexStorage3DEXT_dispatch_table_thunk; + epoxy_glTexStorage3DMultisample = epoxy_glTexStorage3DMultisample_dispatch_table_thunk; + epoxy_glTexStorage3DMultisampleOES = epoxy_glTexStorage3DMultisampleOES_dispatch_table_thunk; + epoxy_glTexStorageSparseAMD = epoxy_glTexStorageSparseAMD_dispatch_table_thunk; + epoxy_glTexSubImage1D = epoxy_glTexSubImage1D_dispatch_table_thunk; + epoxy_glTexSubImage1DEXT = epoxy_glTexSubImage1DEXT_dispatch_table_thunk; + epoxy_glTexSubImage2D = epoxy_glTexSubImage2D_dispatch_table_thunk; + epoxy_glTexSubImage2DEXT = epoxy_glTexSubImage2DEXT_dispatch_table_thunk; + epoxy_glTexSubImage3D = epoxy_glTexSubImage3D_dispatch_table_thunk; + epoxy_glTexSubImage3DEXT = epoxy_glTexSubImage3DEXT_dispatch_table_thunk; + epoxy_glTexSubImage3DOES = epoxy_glTexSubImage3DOES_dispatch_table_thunk; + epoxy_glTexSubImage4DSGIS = epoxy_glTexSubImage4DSGIS_dispatch_table_thunk; + epoxy_glTextureBarrier = epoxy_glTextureBarrier_dispatch_table_thunk; + epoxy_glTextureBarrierNV = epoxy_glTextureBarrierNV_dispatch_table_thunk; + epoxy_glTextureBuffer = epoxy_glTextureBuffer_dispatch_table_thunk; + epoxy_glTextureBufferEXT = epoxy_glTextureBufferEXT_dispatch_table_thunk; + epoxy_glTextureBufferRange = epoxy_glTextureBufferRange_dispatch_table_thunk; + epoxy_glTextureBufferRangeEXT = epoxy_glTextureBufferRangeEXT_dispatch_table_thunk; + epoxy_glTextureColorMaskSGIS = epoxy_glTextureColorMaskSGIS_dispatch_table_thunk; + epoxy_glTextureImage1DEXT = epoxy_glTextureImage1DEXT_dispatch_table_thunk; + epoxy_glTextureImage2DEXT = epoxy_glTextureImage2DEXT_dispatch_table_thunk; + epoxy_glTextureImage2DMultisampleCoverageNV = epoxy_glTextureImage2DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTextureImage2DMultisampleNV = epoxy_glTextureImage2DMultisampleNV_dispatch_table_thunk; + epoxy_glTextureImage3DEXT = epoxy_glTextureImage3DEXT_dispatch_table_thunk; + epoxy_glTextureImage3DMultisampleCoverageNV = epoxy_glTextureImage3DMultisampleCoverageNV_dispatch_table_thunk; + epoxy_glTextureImage3DMultisampleNV = epoxy_glTextureImage3DMultisampleNV_dispatch_table_thunk; + epoxy_glTextureLightEXT = epoxy_glTextureLightEXT_dispatch_table_thunk; + epoxy_glTextureMaterialEXT = epoxy_glTextureMaterialEXT_dispatch_table_thunk; + epoxy_glTextureNormalEXT = epoxy_glTextureNormalEXT_dispatch_table_thunk; + epoxy_glTexturePageCommitmentEXT = epoxy_glTexturePageCommitmentEXT_dispatch_table_thunk; + epoxy_glTextureParameterIiv = epoxy_glTextureParameterIiv_dispatch_table_thunk; + epoxy_glTextureParameterIivEXT = epoxy_glTextureParameterIivEXT_dispatch_table_thunk; + epoxy_glTextureParameterIuiv = epoxy_glTextureParameterIuiv_dispatch_table_thunk; + epoxy_glTextureParameterIuivEXT = epoxy_glTextureParameterIuivEXT_dispatch_table_thunk; + epoxy_glTextureParameterf = epoxy_glTextureParameterf_dispatch_table_thunk; + epoxy_glTextureParameterfEXT = epoxy_glTextureParameterfEXT_dispatch_table_thunk; + epoxy_glTextureParameterfv = epoxy_glTextureParameterfv_dispatch_table_thunk; + epoxy_glTextureParameterfvEXT = epoxy_glTextureParameterfvEXT_dispatch_table_thunk; + epoxy_glTextureParameteri = epoxy_glTextureParameteri_dispatch_table_thunk; + epoxy_glTextureParameteriEXT = epoxy_glTextureParameteriEXT_dispatch_table_thunk; + epoxy_glTextureParameteriv = epoxy_glTextureParameteriv_dispatch_table_thunk; + epoxy_glTextureParameterivEXT = epoxy_glTextureParameterivEXT_dispatch_table_thunk; + epoxy_glTextureRangeAPPLE = epoxy_glTextureRangeAPPLE_dispatch_table_thunk; + epoxy_glTextureRenderbufferEXT = epoxy_glTextureRenderbufferEXT_dispatch_table_thunk; + epoxy_glTextureStorage1D = epoxy_glTextureStorage1D_dispatch_table_thunk; + epoxy_glTextureStorage1DEXT = epoxy_glTextureStorage1DEXT_dispatch_table_thunk; + epoxy_glTextureStorage2D = epoxy_glTextureStorage2D_dispatch_table_thunk; + epoxy_glTextureStorage2DEXT = epoxy_glTextureStorage2DEXT_dispatch_table_thunk; + epoxy_glTextureStorage2DMultisample = epoxy_glTextureStorage2DMultisample_dispatch_table_thunk; + epoxy_glTextureStorage2DMultisampleEXT = epoxy_glTextureStorage2DMultisampleEXT_dispatch_table_thunk; + epoxy_glTextureStorage3D = epoxy_glTextureStorage3D_dispatch_table_thunk; + epoxy_glTextureStorage3DEXT = epoxy_glTextureStorage3DEXT_dispatch_table_thunk; + epoxy_glTextureStorage3DMultisample = epoxy_glTextureStorage3DMultisample_dispatch_table_thunk; + epoxy_glTextureStorage3DMultisampleEXT = epoxy_glTextureStorage3DMultisampleEXT_dispatch_table_thunk; + epoxy_glTextureStorageSparseAMD = epoxy_glTextureStorageSparseAMD_dispatch_table_thunk; + epoxy_glTextureSubImage1D = epoxy_glTextureSubImage1D_dispatch_table_thunk; + epoxy_glTextureSubImage1DEXT = epoxy_glTextureSubImage1DEXT_dispatch_table_thunk; + epoxy_glTextureSubImage2D = epoxy_glTextureSubImage2D_dispatch_table_thunk; + epoxy_glTextureSubImage2DEXT = epoxy_glTextureSubImage2DEXT_dispatch_table_thunk; + epoxy_glTextureSubImage3D = epoxy_glTextureSubImage3D_dispatch_table_thunk; + epoxy_glTextureSubImage3DEXT = epoxy_glTextureSubImage3DEXT_dispatch_table_thunk; + epoxy_glTextureView = epoxy_glTextureView_dispatch_table_thunk; + epoxy_glTextureViewEXT = epoxy_glTextureViewEXT_dispatch_table_thunk; + epoxy_glTextureViewOES = epoxy_glTextureViewOES_dispatch_table_thunk; + epoxy_glTrackMatrixNV = epoxy_glTrackMatrixNV_dispatch_table_thunk; + epoxy_glTransformFeedbackAttribsNV = epoxy_glTransformFeedbackAttribsNV_dispatch_table_thunk; + epoxy_glTransformFeedbackBufferBase = epoxy_glTransformFeedbackBufferBase_dispatch_table_thunk; + epoxy_glTransformFeedbackBufferRange = epoxy_glTransformFeedbackBufferRange_dispatch_table_thunk; + epoxy_glTransformFeedbackStreamAttribsNV = epoxy_glTransformFeedbackStreamAttribsNV_dispatch_table_thunk; + epoxy_glTransformFeedbackVaryings = epoxy_glTransformFeedbackVaryings_dispatch_table_thunk; + epoxy_glTransformFeedbackVaryingsEXT = epoxy_glTransformFeedbackVaryingsEXT_dispatch_table_thunk; + epoxy_glTransformFeedbackVaryingsNV = epoxy_glTransformFeedbackVaryingsNV_dispatch_table_thunk; + epoxy_glTransformPathNV = epoxy_glTransformPathNV_dispatch_table_thunk; + epoxy_glTranslated = epoxy_glTranslated_dispatch_table_thunk; + epoxy_glTranslatef = epoxy_glTranslatef_dispatch_table_thunk; + epoxy_glTranslatex = epoxy_glTranslatex_dispatch_table_thunk; + epoxy_glTranslatexOES = epoxy_glTranslatexOES_dispatch_table_thunk; + epoxy_glUniform1d = epoxy_glUniform1d_dispatch_table_thunk; + epoxy_glUniform1dv = epoxy_glUniform1dv_dispatch_table_thunk; + epoxy_glUniform1f = epoxy_glUniform1f_dispatch_table_thunk; + epoxy_glUniform1fARB = epoxy_glUniform1fARB_dispatch_table_thunk; + epoxy_glUniform1fv = epoxy_glUniform1fv_dispatch_table_thunk; + epoxy_glUniform1fvARB = epoxy_glUniform1fvARB_dispatch_table_thunk; + epoxy_glUniform1i = epoxy_glUniform1i_dispatch_table_thunk; + epoxy_glUniform1i64ARB = epoxy_glUniform1i64ARB_dispatch_table_thunk; + epoxy_glUniform1i64NV = epoxy_glUniform1i64NV_dispatch_table_thunk; + epoxy_glUniform1i64vARB = epoxy_glUniform1i64vARB_dispatch_table_thunk; + epoxy_glUniform1i64vNV = epoxy_glUniform1i64vNV_dispatch_table_thunk; + epoxy_glUniform1iARB = epoxy_glUniform1iARB_dispatch_table_thunk; + epoxy_glUniform1iv = epoxy_glUniform1iv_dispatch_table_thunk; + epoxy_glUniform1ivARB = epoxy_glUniform1ivARB_dispatch_table_thunk; + epoxy_glUniform1ui = epoxy_glUniform1ui_dispatch_table_thunk; + epoxy_glUniform1ui64ARB = epoxy_glUniform1ui64ARB_dispatch_table_thunk; + epoxy_glUniform1ui64NV = epoxy_glUniform1ui64NV_dispatch_table_thunk; + epoxy_glUniform1ui64vARB = epoxy_glUniform1ui64vARB_dispatch_table_thunk; + epoxy_glUniform1ui64vNV = epoxy_glUniform1ui64vNV_dispatch_table_thunk; + epoxy_glUniform1uiEXT = epoxy_glUniform1uiEXT_dispatch_table_thunk; + epoxy_glUniform1uiv = epoxy_glUniform1uiv_dispatch_table_thunk; + epoxy_glUniform1uivEXT = epoxy_glUniform1uivEXT_dispatch_table_thunk; + epoxy_glUniform2d = epoxy_glUniform2d_dispatch_table_thunk; + epoxy_glUniform2dv = epoxy_glUniform2dv_dispatch_table_thunk; + epoxy_glUniform2f = epoxy_glUniform2f_dispatch_table_thunk; + epoxy_glUniform2fARB = epoxy_glUniform2fARB_dispatch_table_thunk; + epoxy_glUniform2fv = epoxy_glUniform2fv_dispatch_table_thunk; + epoxy_glUniform2fvARB = epoxy_glUniform2fvARB_dispatch_table_thunk; + epoxy_glUniform2i = epoxy_glUniform2i_dispatch_table_thunk; + epoxy_glUniform2i64ARB = epoxy_glUniform2i64ARB_dispatch_table_thunk; + epoxy_glUniform2i64NV = epoxy_glUniform2i64NV_dispatch_table_thunk; + epoxy_glUniform2i64vARB = epoxy_glUniform2i64vARB_dispatch_table_thunk; + epoxy_glUniform2i64vNV = epoxy_glUniform2i64vNV_dispatch_table_thunk; + epoxy_glUniform2iARB = epoxy_glUniform2iARB_dispatch_table_thunk; + epoxy_glUniform2iv = epoxy_glUniform2iv_dispatch_table_thunk; + epoxy_glUniform2ivARB = epoxy_glUniform2ivARB_dispatch_table_thunk; + epoxy_glUniform2ui = epoxy_glUniform2ui_dispatch_table_thunk; + epoxy_glUniform2ui64ARB = epoxy_glUniform2ui64ARB_dispatch_table_thunk; + epoxy_glUniform2ui64NV = epoxy_glUniform2ui64NV_dispatch_table_thunk; + epoxy_glUniform2ui64vARB = epoxy_glUniform2ui64vARB_dispatch_table_thunk; + epoxy_glUniform2ui64vNV = epoxy_glUniform2ui64vNV_dispatch_table_thunk; + epoxy_glUniform2uiEXT = epoxy_glUniform2uiEXT_dispatch_table_thunk; + epoxy_glUniform2uiv = epoxy_glUniform2uiv_dispatch_table_thunk; + epoxy_glUniform2uivEXT = epoxy_glUniform2uivEXT_dispatch_table_thunk; + epoxy_glUniform3d = epoxy_glUniform3d_dispatch_table_thunk; + epoxy_glUniform3dv = epoxy_glUniform3dv_dispatch_table_thunk; + epoxy_glUniform3f = epoxy_glUniform3f_dispatch_table_thunk; + epoxy_glUniform3fARB = epoxy_glUniform3fARB_dispatch_table_thunk; + epoxy_glUniform3fv = epoxy_glUniform3fv_dispatch_table_thunk; + epoxy_glUniform3fvARB = epoxy_glUniform3fvARB_dispatch_table_thunk; + epoxy_glUniform3i = epoxy_glUniform3i_dispatch_table_thunk; + epoxy_glUniform3i64ARB = epoxy_glUniform3i64ARB_dispatch_table_thunk; + epoxy_glUniform3i64NV = epoxy_glUniform3i64NV_dispatch_table_thunk; + epoxy_glUniform3i64vARB = epoxy_glUniform3i64vARB_dispatch_table_thunk; + epoxy_glUniform3i64vNV = epoxy_glUniform3i64vNV_dispatch_table_thunk; + epoxy_glUniform3iARB = epoxy_glUniform3iARB_dispatch_table_thunk; + epoxy_glUniform3iv = epoxy_glUniform3iv_dispatch_table_thunk; + epoxy_glUniform3ivARB = epoxy_glUniform3ivARB_dispatch_table_thunk; + epoxy_glUniform3ui = epoxy_glUniform3ui_dispatch_table_thunk; + epoxy_glUniform3ui64ARB = epoxy_glUniform3ui64ARB_dispatch_table_thunk; + epoxy_glUniform3ui64NV = epoxy_glUniform3ui64NV_dispatch_table_thunk; + epoxy_glUniform3ui64vARB = epoxy_glUniform3ui64vARB_dispatch_table_thunk; + epoxy_glUniform3ui64vNV = epoxy_glUniform3ui64vNV_dispatch_table_thunk; + epoxy_glUniform3uiEXT = epoxy_glUniform3uiEXT_dispatch_table_thunk; + epoxy_glUniform3uiv = epoxy_glUniform3uiv_dispatch_table_thunk; + epoxy_glUniform3uivEXT = epoxy_glUniform3uivEXT_dispatch_table_thunk; + epoxy_glUniform4d = epoxy_glUniform4d_dispatch_table_thunk; + epoxy_glUniform4dv = epoxy_glUniform4dv_dispatch_table_thunk; + epoxy_glUniform4f = epoxy_glUniform4f_dispatch_table_thunk; + epoxy_glUniform4fARB = epoxy_glUniform4fARB_dispatch_table_thunk; + epoxy_glUniform4fv = epoxy_glUniform4fv_dispatch_table_thunk; + epoxy_glUniform4fvARB = epoxy_glUniform4fvARB_dispatch_table_thunk; + epoxy_glUniform4i = epoxy_glUniform4i_dispatch_table_thunk; + epoxy_glUniform4i64ARB = epoxy_glUniform4i64ARB_dispatch_table_thunk; + epoxy_glUniform4i64NV = epoxy_glUniform4i64NV_dispatch_table_thunk; + epoxy_glUniform4i64vARB = epoxy_glUniform4i64vARB_dispatch_table_thunk; + epoxy_glUniform4i64vNV = epoxy_glUniform4i64vNV_dispatch_table_thunk; + epoxy_glUniform4iARB = epoxy_glUniform4iARB_dispatch_table_thunk; + epoxy_glUniform4iv = epoxy_glUniform4iv_dispatch_table_thunk; + epoxy_glUniform4ivARB = epoxy_glUniform4ivARB_dispatch_table_thunk; + epoxy_glUniform4ui = epoxy_glUniform4ui_dispatch_table_thunk; + epoxy_glUniform4ui64ARB = epoxy_glUniform4ui64ARB_dispatch_table_thunk; + epoxy_glUniform4ui64NV = epoxy_glUniform4ui64NV_dispatch_table_thunk; + epoxy_glUniform4ui64vARB = epoxy_glUniform4ui64vARB_dispatch_table_thunk; + epoxy_glUniform4ui64vNV = epoxy_glUniform4ui64vNV_dispatch_table_thunk; + epoxy_glUniform4uiEXT = epoxy_glUniform4uiEXT_dispatch_table_thunk; + epoxy_glUniform4uiv = epoxy_glUniform4uiv_dispatch_table_thunk; + epoxy_glUniform4uivEXT = epoxy_glUniform4uivEXT_dispatch_table_thunk; + epoxy_glUniformBlockBinding = epoxy_glUniformBlockBinding_dispatch_table_thunk; + epoxy_glUniformBufferEXT = epoxy_glUniformBufferEXT_dispatch_table_thunk; + epoxy_glUniformHandleui64ARB = epoxy_glUniformHandleui64ARB_dispatch_table_thunk; + epoxy_glUniformHandleui64NV = epoxy_glUniformHandleui64NV_dispatch_table_thunk; + epoxy_glUniformHandleui64vARB = epoxy_glUniformHandleui64vARB_dispatch_table_thunk; + epoxy_glUniformHandleui64vNV = epoxy_glUniformHandleui64vNV_dispatch_table_thunk; + epoxy_glUniformMatrix2dv = epoxy_glUniformMatrix2dv_dispatch_table_thunk; + epoxy_glUniformMatrix2fv = epoxy_glUniformMatrix2fv_dispatch_table_thunk; + epoxy_glUniformMatrix2fvARB = epoxy_glUniformMatrix2fvARB_dispatch_table_thunk; + epoxy_glUniformMatrix2x3dv = epoxy_glUniformMatrix2x3dv_dispatch_table_thunk; + epoxy_glUniformMatrix2x3fv = epoxy_glUniformMatrix2x3fv_dispatch_table_thunk; + epoxy_glUniformMatrix2x3fvNV = epoxy_glUniformMatrix2x3fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix2x4dv = epoxy_glUniformMatrix2x4dv_dispatch_table_thunk; + epoxy_glUniformMatrix2x4fv = epoxy_glUniformMatrix2x4fv_dispatch_table_thunk; + epoxy_glUniformMatrix2x4fvNV = epoxy_glUniformMatrix2x4fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix3dv = epoxy_glUniformMatrix3dv_dispatch_table_thunk; + epoxy_glUniformMatrix3fv = epoxy_glUniformMatrix3fv_dispatch_table_thunk; + epoxy_glUniformMatrix3fvARB = epoxy_glUniformMatrix3fvARB_dispatch_table_thunk; + epoxy_glUniformMatrix3x2dv = epoxy_glUniformMatrix3x2dv_dispatch_table_thunk; + epoxy_glUniformMatrix3x2fv = epoxy_glUniformMatrix3x2fv_dispatch_table_thunk; + epoxy_glUniformMatrix3x2fvNV = epoxy_glUniformMatrix3x2fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix3x4dv = epoxy_glUniformMatrix3x4dv_dispatch_table_thunk; + epoxy_glUniformMatrix3x4fv = epoxy_glUniformMatrix3x4fv_dispatch_table_thunk; + epoxy_glUniformMatrix3x4fvNV = epoxy_glUniformMatrix3x4fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix4dv = epoxy_glUniformMatrix4dv_dispatch_table_thunk; + epoxy_glUniformMatrix4fv = epoxy_glUniformMatrix4fv_dispatch_table_thunk; + epoxy_glUniformMatrix4fvARB = epoxy_glUniformMatrix4fvARB_dispatch_table_thunk; + epoxy_glUniformMatrix4x2dv = epoxy_glUniformMatrix4x2dv_dispatch_table_thunk; + epoxy_glUniformMatrix4x2fv = epoxy_glUniformMatrix4x2fv_dispatch_table_thunk; + epoxy_glUniformMatrix4x2fvNV = epoxy_glUniformMatrix4x2fvNV_dispatch_table_thunk; + epoxy_glUniformMatrix4x3dv = epoxy_glUniformMatrix4x3dv_dispatch_table_thunk; + epoxy_glUniformMatrix4x3fv = epoxy_glUniformMatrix4x3fv_dispatch_table_thunk; + epoxy_glUniformMatrix4x3fvNV = epoxy_glUniformMatrix4x3fvNV_dispatch_table_thunk; + epoxy_glUniformSubroutinesuiv = epoxy_glUniformSubroutinesuiv_dispatch_table_thunk; + epoxy_glUniformui64NV = epoxy_glUniformui64NV_dispatch_table_thunk; + epoxy_glUniformui64vNV = epoxy_glUniformui64vNV_dispatch_table_thunk; + epoxy_glUnlockArraysEXT = epoxy_glUnlockArraysEXT_dispatch_table_thunk; + epoxy_glUnmapBuffer = epoxy_glUnmapBuffer_dispatch_table_thunk; + epoxy_glUnmapBufferARB = epoxy_glUnmapBufferARB_dispatch_table_thunk; + epoxy_glUnmapBufferOES = epoxy_glUnmapBufferOES_dispatch_table_thunk; + epoxy_glUnmapNamedBuffer = epoxy_glUnmapNamedBuffer_dispatch_table_thunk; + epoxy_glUnmapNamedBufferEXT = epoxy_glUnmapNamedBufferEXT_dispatch_table_thunk; + epoxy_glUnmapObjectBufferATI = epoxy_glUnmapObjectBufferATI_dispatch_table_thunk; + epoxy_glUnmapTexture2DINTEL = epoxy_glUnmapTexture2DINTEL_dispatch_table_thunk; + epoxy_glUpdateObjectBufferATI = epoxy_glUpdateObjectBufferATI_dispatch_table_thunk; + epoxy_glUseProgram = epoxy_glUseProgram_dispatch_table_thunk; + epoxy_glUseProgramObjectARB = epoxy_glUseProgramObjectARB_dispatch_table_thunk; + epoxy_glUseProgramStages = epoxy_glUseProgramStages_dispatch_table_thunk; + epoxy_glUseProgramStagesEXT = epoxy_glUseProgramStagesEXT_dispatch_table_thunk; + epoxy_glUseShaderProgramEXT = epoxy_glUseShaderProgramEXT_dispatch_table_thunk; + epoxy_glVDPAUFiniNV = epoxy_glVDPAUFiniNV_dispatch_table_thunk; + epoxy_glVDPAUGetSurfaceivNV = epoxy_glVDPAUGetSurfaceivNV_dispatch_table_thunk; + epoxy_glVDPAUInitNV = epoxy_glVDPAUInitNV_dispatch_table_thunk; + epoxy_glVDPAUIsSurfaceNV = epoxy_glVDPAUIsSurfaceNV_dispatch_table_thunk; + epoxy_glVDPAUMapSurfacesNV = epoxy_glVDPAUMapSurfacesNV_dispatch_table_thunk; + epoxy_glVDPAURegisterOutputSurfaceNV = epoxy_glVDPAURegisterOutputSurfaceNV_dispatch_table_thunk; + epoxy_glVDPAURegisterVideoSurfaceNV = epoxy_glVDPAURegisterVideoSurfaceNV_dispatch_table_thunk; + epoxy_glVDPAUSurfaceAccessNV = epoxy_glVDPAUSurfaceAccessNV_dispatch_table_thunk; + epoxy_glVDPAUUnmapSurfacesNV = epoxy_glVDPAUUnmapSurfacesNV_dispatch_table_thunk; + epoxy_glVDPAUUnregisterSurfaceNV = epoxy_glVDPAUUnregisterSurfaceNV_dispatch_table_thunk; + epoxy_glValidateProgram = epoxy_glValidateProgram_dispatch_table_thunk; + epoxy_glValidateProgramARB = epoxy_glValidateProgramARB_dispatch_table_thunk; + epoxy_glValidateProgramPipeline = epoxy_glValidateProgramPipeline_dispatch_table_thunk; + epoxy_glValidateProgramPipelineEXT = epoxy_glValidateProgramPipelineEXT_dispatch_table_thunk; + epoxy_glVariantArrayObjectATI = epoxy_glVariantArrayObjectATI_dispatch_table_thunk; + epoxy_glVariantPointerEXT = epoxy_glVariantPointerEXT_dispatch_table_thunk; + epoxy_glVariantbvEXT = epoxy_glVariantbvEXT_dispatch_table_thunk; + epoxy_glVariantdvEXT = epoxy_glVariantdvEXT_dispatch_table_thunk; + epoxy_glVariantfvEXT = epoxy_glVariantfvEXT_dispatch_table_thunk; + epoxy_glVariantivEXT = epoxy_glVariantivEXT_dispatch_table_thunk; + epoxy_glVariantsvEXT = epoxy_glVariantsvEXT_dispatch_table_thunk; + epoxy_glVariantubvEXT = epoxy_glVariantubvEXT_dispatch_table_thunk; + epoxy_glVariantuivEXT = epoxy_glVariantuivEXT_dispatch_table_thunk; + epoxy_glVariantusvEXT = epoxy_glVariantusvEXT_dispatch_table_thunk; + epoxy_glVertex2bOES = epoxy_glVertex2bOES_dispatch_table_thunk; + epoxy_glVertex2bvOES = epoxy_glVertex2bvOES_dispatch_table_thunk; + epoxy_glVertex2d = epoxy_glVertex2d_dispatch_table_thunk; + epoxy_glVertex2dv = epoxy_glVertex2dv_dispatch_table_thunk; + epoxy_glVertex2f = epoxy_glVertex2f_dispatch_table_thunk; + epoxy_glVertex2fv = epoxy_glVertex2fv_dispatch_table_thunk; + epoxy_glVertex2hNV = epoxy_glVertex2hNV_dispatch_table_thunk; + epoxy_glVertex2hvNV = epoxy_glVertex2hvNV_dispatch_table_thunk; + epoxy_glVertex2i = epoxy_glVertex2i_dispatch_table_thunk; + epoxy_glVertex2iv = epoxy_glVertex2iv_dispatch_table_thunk; + epoxy_glVertex2s = epoxy_glVertex2s_dispatch_table_thunk; + epoxy_glVertex2sv = epoxy_glVertex2sv_dispatch_table_thunk; + epoxy_glVertex2xOES = epoxy_glVertex2xOES_dispatch_table_thunk; + epoxy_glVertex2xvOES = epoxy_glVertex2xvOES_dispatch_table_thunk; + epoxy_glVertex3bOES = epoxy_glVertex3bOES_dispatch_table_thunk; + epoxy_glVertex3bvOES = epoxy_glVertex3bvOES_dispatch_table_thunk; + epoxy_glVertex3d = epoxy_glVertex3d_dispatch_table_thunk; + epoxy_glVertex3dv = epoxy_glVertex3dv_dispatch_table_thunk; + epoxy_glVertex3f = epoxy_glVertex3f_dispatch_table_thunk; + epoxy_glVertex3fv = epoxy_glVertex3fv_dispatch_table_thunk; + epoxy_glVertex3hNV = epoxy_glVertex3hNV_dispatch_table_thunk; + epoxy_glVertex3hvNV = epoxy_glVertex3hvNV_dispatch_table_thunk; + epoxy_glVertex3i = epoxy_glVertex3i_dispatch_table_thunk; + epoxy_glVertex3iv = epoxy_glVertex3iv_dispatch_table_thunk; + epoxy_glVertex3s = epoxy_glVertex3s_dispatch_table_thunk; + epoxy_glVertex3sv = epoxy_glVertex3sv_dispatch_table_thunk; + epoxy_glVertex3xOES = epoxy_glVertex3xOES_dispatch_table_thunk; + epoxy_glVertex3xvOES = epoxy_glVertex3xvOES_dispatch_table_thunk; + epoxy_glVertex4bOES = epoxy_glVertex4bOES_dispatch_table_thunk; + epoxy_glVertex4bvOES = epoxy_glVertex4bvOES_dispatch_table_thunk; + epoxy_glVertex4d = epoxy_glVertex4d_dispatch_table_thunk; + epoxy_glVertex4dv = epoxy_glVertex4dv_dispatch_table_thunk; + epoxy_glVertex4f = epoxy_glVertex4f_dispatch_table_thunk; + epoxy_glVertex4fv = epoxy_glVertex4fv_dispatch_table_thunk; + epoxy_glVertex4hNV = epoxy_glVertex4hNV_dispatch_table_thunk; + epoxy_glVertex4hvNV = epoxy_glVertex4hvNV_dispatch_table_thunk; + epoxy_glVertex4i = epoxy_glVertex4i_dispatch_table_thunk; + epoxy_glVertex4iv = epoxy_glVertex4iv_dispatch_table_thunk; + epoxy_glVertex4s = epoxy_glVertex4s_dispatch_table_thunk; + epoxy_glVertex4sv = epoxy_glVertex4sv_dispatch_table_thunk; + epoxy_glVertex4xOES = epoxy_glVertex4xOES_dispatch_table_thunk; + epoxy_glVertex4xvOES = epoxy_glVertex4xvOES_dispatch_table_thunk; + epoxy_glVertexArrayAttribBinding = epoxy_glVertexArrayAttribBinding_dispatch_table_thunk; + epoxy_glVertexArrayAttribFormat = epoxy_glVertexArrayAttribFormat_dispatch_table_thunk; + epoxy_glVertexArrayAttribIFormat = epoxy_glVertexArrayAttribIFormat_dispatch_table_thunk; + epoxy_glVertexArrayAttribLFormat = epoxy_glVertexArrayAttribLFormat_dispatch_table_thunk; + epoxy_glVertexArrayBindVertexBufferEXT = epoxy_glVertexArrayBindVertexBufferEXT_dispatch_table_thunk; + epoxy_glVertexArrayBindingDivisor = epoxy_glVertexArrayBindingDivisor_dispatch_table_thunk; + epoxy_glVertexArrayColorOffsetEXT = epoxy_glVertexArrayColorOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayEdgeFlagOffsetEXT = epoxy_glVertexArrayEdgeFlagOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayElementBuffer = epoxy_glVertexArrayElementBuffer_dispatch_table_thunk; + epoxy_glVertexArrayFogCoordOffsetEXT = epoxy_glVertexArrayFogCoordOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayIndexOffsetEXT = epoxy_glVertexArrayIndexOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayMultiTexCoordOffsetEXT = epoxy_glVertexArrayMultiTexCoordOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayNormalOffsetEXT = epoxy_glVertexArrayNormalOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayParameteriAPPLE = epoxy_glVertexArrayParameteriAPPLE_dispatch_table_thunk; + epoxy_glVertexArrayRangeAPPLE = epoxy_glVertexArrayRangeAPPLE_dispatch_table_thunk; + epoxy_glVertexArrayRangeNV = epoxy_glVertexArrayRangeNV_dispatch_table_thunk; + epoxy_glVertexArraySecondaryColorOffsetEXT = epoxy_glVertexArraySecondaryColorOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayTexCoordOffsetEXT = epoxy_glVertexArrayTexCoordOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribBindingEXT = epoxy_glVertexArrayVertexAttribBindingEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribDivisorEXT = epoxy_glVertexArrayVertexAttribDivisorEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribFormatEXT = epoxy_glVertexArrayVertexAttribFormatEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribIFormatEXT = epoxy_glVertexArrayVertexAttribIFormatEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribIOffsetEXT = epoxy_glVertexArrayVertexAttribIOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribLFormatEXT = epoxy_glVertexArrayVertexAttribLFormatEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribLOffsetEXT = epoxy_glVertexArrayVertexAttribLOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexAttribOffsetEXT = epoxy_glVertexArrayVertexAttribOffsetEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexBindingDivisorEXT = epoxy_glVertexArrayVertexBindingDivisorEXT_dispatch_table_thunk; + epoxy_glVertexArrayVertexBuffer = epoxy_glVertexArrayVertexBuffer_dispatch_table_thunk; + epoxy_glVertexArrayVertexBuffers = epoxy_glVertexArrayVertexBuffers_dispatch_table_thunk; + epoxy_glVertexArrayVertexOffsetEXT = epoxy_glVertexArrayVertexOffsetEXT_dispatch_table_thunk; + epoxy_glVertexAttrib1d = epoxy_glVertexAttrib1d_dispatch_table_thunk; + epoxy_glVertexAttrib1dARB = epoxy_glVertexAttrib1dARB_dispatch_table_thunk; + epoxy_glVertexAttrib1dNV = epoxy_glVertexAttrib1dNV_dispatch_table_thunk; + epoxy_glVertexAttrib1dv = epoxy_glVertexAttrib1dv_dispatch_table_thunk; + epoxy_glVertexAttrib1dvARB = epoxy_glVertexAttrib1dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib1dvNV = epoxy_glVertexAttrib1dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib1f = epoxy_glVertexAttrib1f_dispatch_table_thunk; + epoxy_glVertexAttrib1fARB = epoxy_glVertexAttrib1fARB_dispatch_table_thunk; + epoxy_glVertexAttrib1fNV = epoxy_glVertexAttrib1fNV_dispatch_table_thunk; + epoxy_glVertexAttrib1fv = epoxy_glVertexAttrib1fv_dispatch_table_thunk; + epoxy_glVertexAttrib1fvARB = epoxy_glVertexAttrib1fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib1fvNV = epoxy_glVertexAttrib1fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib1hNV = epoxy_glVertexAttrib1hNV_dispatch_table_thunk; + epoxy_glVertexAttrib1hvNV = epoxy_glVertexAttrib1hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib1s = epoxy_glVertexAttrib1s_dispatch_table_thunk; + epoxy_glVertexAttrib1sARB = epoxy_glVertexAttrib1sARB_dispatch_table_thunk; + epoxy_glVertexAttrib1sNV = epoxy_glVertexAttrib1sNV_dispatch_table_thunk; + epoxy_glVertexAttrib1sv = epoxy_glVertexAttrib1sv_dispatch_table_thunk; + epoxy_glVertexAttrib1svARB = epoxy_glVertexAttrib1svARB_dispatch_table_thunk; + epoxy_glVertexAttrib1svNV = epoxy_glVertexAttrib1svNV_dispatch_table_thunk; + epoxy_glVertexAttrib2d = epoxy_glVertexAttrib2d_dispatch_table_thunk; + epoxy_glVertexAttrib2dARB = epoxy_glVertexAttrib2dARB_dispatch_table_thunk; + epoxy_glVertexAttrib2dNV = epoxy_glVertexAttrib2dNV_dispatch_table_thunk; + epoxy_glVertexAttrib2dv = epoxy_glVertexAttrib2dv_dispatch_table_thunk; + epoxy_glVertexAttrib2dvARB = epoxy_glVertexAttrib2dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib2dvNV = epoxy_glVertexAttrib2dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib2f = epoxy_glVertexAttrib2f_dispatch_table_thunk; + epoxy_glVertexAttrib2fARB = epoxy_glVertexAttrib2fARB_dispatch_table_thunk; + epoxy_glVertexAttrib2fNV = epoxy_glVertexAttrib2fNV_dispatch_table_thunk; + epoxy_glVertexAttrib2fv = epoxy_glVertexAttrib2fv_dispatch_table_thunk; + epoxy_glVertexAttrib2fvARB = epoxy_glVertexAttrib2fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib2fvNV = epoxy_glVertexAttrib2fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib2hNV = epoxy_glVertexAttrib2hNV_dispatch_table_thunk; + epoxy_glVertexAttrib2hvNV = epoxy_glVertexAttrib2hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib2s = epoxy_glVertexAttrib2s_dispatch_table_thunk; + epoxy_glVertexAttrib2sARB = epoxy_glVertexAttrib2sARB_dispatch_table_thunk; + epoxy_glVertexAttrib2sNV = epoxy_glVertexAttrib2sNV_dispatch_table_thunk; + epoxy_glVertexAttrib2sv = epoxy_glVertexAttrib2sv_dispatch_table_thunk; + epoxy_glVertexAttrib2svARB = epoxy_glVertexAttrib2svARB_dispatch_table_thunk; + epoxy_glVertexAttrib2svNV = epoxy_glVertexAttrib2svNV_dispatch_table_thunk; + epoxy_glVertexAttrib3d = epoxy_glVertexAttrib3d_dispatch_table_thunk; + epoxy_glVertexAttrib3dARB = epoxy_glVertexAttrib3dARB_dispatch_table_thunk; + epoxy_glVertexAttrib3dNV = epoxy_glVertexAttrib3dNV_dispatch_table_thunk; + epoxy_glVertexAttrib3dv = epoxy_glVertexAttrib3dv_dispatch_table_thunk; + epoxy_glVertexAttrib3dvARB = epoxy_glVertexAttrib3dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib3dvNV = epoxy_glVertexAttrib3dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib3f = epoxy_glVertexAttrib3f_dispatch_table_thunk; + epoxy_glVertexAttrib3fARB = epoxy_glVertexAttrib3fARB_dispatch_table_thunk; + epoxy_glVertexAttrib3fNV = epoxy_glVertexAttrib3fNV_dispatch_table_thunk; + epoxy_glVertexAttrib3fv = epoxy_glVertexAttrib3fv_dispatch_table_thunk; + epoxy_glVertexAttrib3fvARB = epoxy_glVertexAttrib3fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib3fvNV = epoxy_glVertexAttrib3fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib3hNV = epoxy_glVertexAttrib3hNV_dispatch_table_thunk; + epoxy_glVertexAttrib3hvNV = epoxy_glVertexAttrib3hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib3s = epoxy_glVertexAttrib3s_dispatch_table_thunk; + epoxy_glVertexAttrib3sARB = epoxy_glVertexAttrib3sARB_dispatch_table_thunk; + epoxy_glVertexAttrib3sNV = epoxy_glVertexAttrib3sNV_dispatch_table_thunk; + epoxy_glVertexAttrib3sv = epoxy_glVertexAttrib3sv_dispatch_table_thunk; + epoxy_glVertexAttrib3svARB = epoxy_glVertexAttrib3svARB_dispatch_table_thunk; + epoxy_glVertexAttrib3svNV = epoxy_glVertexAttrib3svNV_dispatch_table_thunk; + epoxy_glVertexAttrib4Nbv = epoxy_glVertexAttrib4Nbv_dispatch_table_thunk; + epoxy_glVertexAttrib4NbvARB = epoxy_glVertexAttrib4NbvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Niv = epoxy_glVertexAttrib4Niv_dispatch_table_thunk; + epoxy_glVertexAttrib4NivARB = epoxy_glVertexAttrib4NivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nsv = epoxy_glVertexAttrib4Nsv_dispatch_table_thunk; + epoxy_glVertexAttrib4NsvARB = epoxy_glVertexAttrib4NsvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nub = epoxy_glVertexAttrib4Nub_dispatch_table_thunk; + epoxy_glVertexAttrib4NubARB = epoxy_glVertexAttrib4NubARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nubv = epoxy_glVertexAttrib4Nubv_dispatch_table_thunk; + epoxy_glVertexAttrib4NubvARB = epoxy_glVertexAttrib4NubvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nuiv = epoxy_glVertexAttrib4Nuiv_dispatch_table_thunk; + epoxy_glVertexAttrib4NuivARB = epoxy_glVertexAttrib4NuivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4Nusv = epoxy_glVertexAttrib4Nusv_dispatch_table_thunk; + epoxy_glVertexAttrib4NusvARB = epoxy_glVertexAttrib4NusvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4bv = epoxy_glVertexAttrib4bv_dispatch_table_thunk; + epoxy_glVertexAttrib4bvARB = epoxy_glVertexAttrib4bvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4d = epoxy_glVertexAttrib4d_dispatch_table_thunk; + epoxy_glVertexAttrib4dARB = epoxy_glVertexAttrib4dARB_dispatch_table_thunk; + epoxy_glVertexAttrib4dNV = epoxy_glVertexAttrib4dNV_dispatch_table_thunk; + epoxy_glVertexAttrib4dv = epoxy_glVertexAttrib4dv_dispatch_table_thunk; + epoxy_glVertexAttrib4dvARB = epoxy_glVertexAttrib4dvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4dvNV = epoxy_glVertexAttrib4dvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4f = epoxy_glVertexAttrib4f_dispatch_table_thunk; + epoxy_glVertexAttrib4fARB = epoxy_glVertexAttrib4fARB_dispatch_table_thunk; + epoxy_glVertexAttrib4fNV = epoxy_glVertexAttrib4fNV_dispatch_table_thunk; + epoxy_glVertexAttrib4fv = epoxy_glVertexAttrib4fv_dispatch_table_thunk; + epoxy_glVertexAttrib4fvARB = epoxy_glVertexAttrib4fvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4fvNV = epoxy_glVertexAttrib4fvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4hNV = epoxy_glVertexAttrib4hNV_dispatch_table_thunk; + epoxy_glVertexAttrib4hvNV = epoxy_glVertexAttrib4hvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4iv = epoxy_glVertexAttrib4iv_dispatch_table_thunk; + epoxy_glVertexAttrib4ivARB = epoxy_glVertexAttrib4ivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4s = epoxy_glVertexAttrib4s_dispatch_table_thunk; + epoxy_glVertexAttrib4sARB = epoxy_glVertexAttrib4sARB_dispatch_table_thunk; + epoxy_glVertexAttrib4sNV = epoxy_glVertexAttrib4sNV_dispatch_table_thunk; + epoxy_glVertexAttrib4sv = epoxy_glVertexAttrib4sv_dispatch_table_thunk; + epoxy_glVertexAttrib4svARB = epoxy_glVertexAttrib4svARB_dispatch_table_thunk; + epoxy_glVertexAttrib4svNV = epoxy_glVertexAttrib4svNV_dispatch_table_thunk; + epoxy_glVertexAttrib4ubNV = epoxy_glVertexAttrib4ubNV_dispatch_table_thunk; + epoxy_glVertexAttrib4ubv = epoxy_glVertexAttrib4ubv_dispatch_table_thunk; + epoxy_glVertexAttrib4ubvARB = epoxy_glVertexAttrib4ubvARB_dispatch_table_thunk; + epoxy_glVertexAttrib4ubvNV = epoxy_glVertexAttrib4ubvNV_dispatch_table_thunk; + epoxy_glVertexAttrib4uiv = epoxy_glVertexAttrib4uiv_dispatch_table_thunk; + epoxy_glVertexAttrib4uivARB = epoxy_glVertexAttrib4uivARB_dispatch_table_thunk; + epoxy_glVertexAttrib4usv = epoxy_glVertexAttrib4usv_dispatch_table_thunk; + epoxy_glVertexAttrib4usvARB = epoxy_glVertexAttrib4usvARB_dispatch_table_thunk; + epoxy_glVertexAttribArrayObjectATI = epoxy_glVertexAttribArrayObjectATI_dispatch_table_thunk; + epoxy_glVertexAttribBinding = epoxy_glVertexAttribBinding_dispatch_table_thunk; + epoxy_glVertexAttribDivisor = epoxy_glVertexAttribDivisor_dispatch_table_thunk; + epoxy_glVertexAttribDivisorANGLE = epoxy_glVertexAttribDivisorANGLE_dispatch_table_thunk; + epoxy_glVertexAttribDivisorARB = epoxy_glVertexAttribDivisorARB_dispatch_table_thunk; + epoxy_glVertexAttribDivisorEXT = epoxy_glVertexAttribDivisorEXT_dispatch_table_thunk; + epoxy_glVertexAttribDivisorNV = epoxy_glVertexAttribDivisorNV_dispatch_table_thunk; + epoxy_glVertexAttribFormat = epoxy_glVertexAttribFormat_dispatch_table_thunk; + epoxy_glVertexAttribFormatNV = epoxy_glVertexAttribFormatNV_dispatch_table_thunk; + epoxy_glVertexAttribI1i = epoxy_glVertexAttribI1i_dispatch_table_thunk; + epoxy_glVertexAttribI1iEXT = epoxy_glVertexAttribI1iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI1iv = epoxy_glVertexAttribI1iv_dispatch_table_thunk; + epoxy_glVertexAttribI1ivEXT = epoxy_glVertexAttribI1ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI1ui = epoxy_glVertexAttribI1ui_dispatch_table_thunk; + epoxy_glVertexAttribI1uiEXT = epoxy_glVertexAttribI1uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI1uiv = epoxy_glVertexAttribI1uiv_dispatch_table_thunk; + epoxy_glVertexAttribI1uivEXT = epoxy_glVertexAttribI1uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2i = epoxy_glVertexAttribI2i_dispatch_table_thunk; + epoxy_glVertexAttribI2iEXT = epoxy_glVertexAttribI2iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2iv = epoxy_glVertexAttribI2iv_dispatch_table_thunk; + epoxy_glVertexAttribI2ivEXT = epoxy_glVertexAttribI2ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2ui = epoxy_glVertexAttribI2ui_dispatch_table_thunk; + epoxy_glVertexAttribI2uiEXT = epoxy_glVertexAttribI2uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI2uiv = epoxy_glVertexAttribI2uiv_dispatch_table_thunk; + epoxy_glVertexAttribI2uivEXT = epoxy_glVertexAttribI2uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3i = epoxy_glVertexAttribI3i_dispatch_table_thunk; + epoxy_glVertexAttribI3iEXT = epoxy_glVertexAttribI3iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3iv = epoxy_glVertexAttribI3iv_dispatch_table_thunk; + epoxy_glVertexAttribI3ivEXT = epoxy_glVertexAttribI3ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3ui = epoxy_glVertexAttribI3ui_dispatch_table_thunk; + epoxy_glVertexAttribI3uiEXT = epoxy_glVertexAttribI3uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI3uiv = epoxy_glVertexAttribI3uiv_dispatch_table_thunk; + epoxy_glVertexAttribI3uivEXT = epoxy_glVertexAttribI3uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4bv = epoxy_glVertexAttribI4bv_dispatch_table_thunk; + epoxy_glVertexAttribI4bvEXT = epoxy_glVertexAttribI4bvEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4i = epoxy_glVertexAttribI4i_dispatch_table_thunk; + epoxy_glVertexAttribI4iEXT = epoxy_glVertexAttribI4iEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4iv = epoxy_glVertexAttribI4iv_dispatch_table_thunk; + epoxy_glVertexAttribI4ivEXT = epoxy_glVertexAttribI4ivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4sv = epoxy_glVertexAttribI4sv_dispatch_table_thunk; + epoxy_glVertexAttribI4svEXT = epoxy_glVertexAttribI4svEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4ubv = epoxy_glVertexAttribI4ubv_dispatch_table_thunk; + epoxy_glVertexAttribI4ubvEXT = epoxy_glVertexAttribI4ubvEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4ui = epoxy_glVertexAttribI4ui_dispatch_table_thunk; + epoxy_glVertexAttribI4uiEXT = epoxy_glVertexAttribI4uiEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4uiv = epoxy_glVertexAttribI4uiv_dispatch_table_thunk; + epoxy_glVertexAttribI4uivEXT = epoxy_glVertexAttribI4uivEXT_dispatch_table_thunk; + epoxy_glVertexAttribI4usv = epoxy_glVertexAttribI4usv_dispatch_table_thunk; + epoxy_glVertexAttribI4usvEXT = epoxy_glVertexAttribI4usvEXT_dispatch_table_thunk; + epoxy_glVertexAttribIFormat = epoxy_glVertexAttribIFormat_dispatch_table_thunk; + epoxy_glVertexAttribIFormatNV = epoxy_glVertexAttribIFormatNV_dispatch_table_thunk; + epoxy_glVertexAttribIPointer = epoxy_glVertexAttribIPointer_dispatch_table_thunk; + epoxy_glVertexAttribIPointerEXT = epoxy_glVertexAttribIPointerEXT_dispatch_table_thunk; + epoxy_glVertexAttribL1d = epoxy_glVertexAttribL1d_dispatch_table_thunk; + epoxy_glVertexAttribL1dEXT = epoxy_glVertexAttribL1dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL1dv = epoxy_glVertexAttribL1dv_dispatch_table_thunk; + epoxy_glVertexAttribL1dvEXT = epoxy_glVertexAttribL1dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL1i64NV = epoxy_glVertexAttribL1i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL1i64vNV = epoxy_glVertexAttribL1i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64ARB = epoxy_glVertexAttribL1ui64ARB_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64NV = epoxy_glVertexAttribL1ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64vARB = epoxy_glVertexAttribL1ui64vARB_dispatch_table_thunk; + epoxy_glVertexAttribL1ui64vNV = epoxy_glVertexAttribL1ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL2d = epoxy_glVertexAttribL2d_dispatch_table_thunk; + epoxy_glVertexAttribL2dEXT = epoxy_glVertexAttribL2dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL2dv = epoxy_glVertexAttribL2dv_dispatch_table_thunk; + epoxy_glVertexAttribL2dvEXT = epoxy_glVertexAttribL2dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL2i64NV = epoxy_glVertexAttribL2i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL2i64vNV = epoxy_glVertexAttribL2i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL2ui64NV = epoxy_glVertexAttribL2ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL2ui64vNV = epoxy_glVertexAttribL2ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL3d = epoxy_glVertexAttribL3d_dispatch_table_thunk; + epoxy_glVertexAttribL3dEXT = epoxy_glVertexAttribL3dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL3dv = epoxy_glVertexAttribL3dv_dispatch_table_thunk; + epoxy_glVertexAttribL3dvEXT = epoxy_glVertexAttribL3dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL3i64NV = epoxy_glVertexAttribL3i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL3i64vNV = epoxy_glVertexAttribL3i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL3ui64NV = epoxy_glVertexAttribL3ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL3ui64vNV = epoxy_glVertexAttribL3ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL4d = epoxy_glVertexAttribL4d_dispatch_table_thunk; + epoxy_glVertexAttribL4dEXT = epoxy_glVertexAttribL4dEXT_dispatch_table_thunk; + epoxy_glVertexAttribL4dv = epoxy_glVertexAttribL4dv_dispatch_table_thunk; + epoxy_glVertexAttribL4dvEXT = epoxy_glVertexAttribL4dvEXT_dispatch_table_thunk; + epoxy_glVertexAttribL4i64NV = epoxy_glVertexAttribL4i64NV_dispatch_table_thunk; + epoxy_glVertexAttribL4i64vNV = epoxy_glVertexAttribL4i64vNV_dispatch_table_thunk; + epoxy_glVertexAttribL4ui64NV = epoxy_glVertexAttribL4ui64NV_dispatch_table_thunk; + epoxy_glVertexAttribL4ui64vNV = epoxy_glVertexAttribL4ui64vNV_dispatch_table_thunk; + epoxy_glVertexAttribLFormat = epoxy_glVertexAttribLFormat_dispatch_table_thunk; + epoxy_glVertexAttribLFormatNV = epoxy_glVertexAttribLFormatNV_dispatch_table_thunk; + epoxy_glVertexAttribLPointer = epoxy_glVertexAttribLPointer_dispatch_table_thunk; + epoxy_glVertexAttribLPointerEXT = epoxy_glVertexAttribLPointerEXT_dispatch_table_thunk; + epoxy_glVertexAttribP1ui = epoxy_glVertexAttribP1ui_dispatch_table_thunk; + epoxy_glVertexAttribP1uiv = epoxy_glVertexAttribP1uiv_dispatch_table_thunk; + epoxy_glVertexAttribP2ui = epoxy_glVertexAttribP2ui_dispatch_table_thunk; + epoxy_glVertexAttribP2uiv = epoxy_glVertexAttribP2uiv_dispatch_table_thunk; + epoxy_glVertexAttribP3ui = epoxy_glVertexAttribP3ui_dispatch_table_thunk; + epoxy_glVertexAttribP3uiv = epoxy_glVertexAttribP3uiv_dispatch_table_thunk; + epoxy_glVertexAttribP4ui = epoxy_glVertexAttribP4ui_dispatch_table_thunk; + epoxy_glVertexAttribP4uiv = epoxy_glVertexAttribP4uiv_dispatch_table_thunk; + epoxy_glVertexAttribParameteriAMD = epoxy_glVertexAttribParameteriAMD_dispatch_table_thunk; + epoxy_glVertexAttribPointer = epoxy_glVertexAttribPointer_dispatch_table_thunk; + epoxy_glVertexAttribPointerARB = epoxy_glVertexAttribPointerARB_dispatch_table_thunk; + epoxy_glVertexAttribPointerNV = epoxy_glVertexAttribPointerNV_dispatch_table_thunk; + epoxy_glVertexAttribs1dvNV = epoxy_glVertexAttribs1dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs1fvNV = epoxy_glVertexAttribs1fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs1hvNV = epoxy_glVertexAttribs1hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs1svNV = epoxy_glVertexAttribs1svNV_dispatch_table_thunk; + epoxy_glVertexAttribs2dvNV = epoxy_glVertexAttribs2dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs2fvNV = epoxy_glVertexAttribs2fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs2hvNV = epoxy_glVertexAttribs2hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs2svNV = epoxy_glVertexAttribs2svNV_dispatch_table_thunk; + epoxy_glVertexAttribs3dvNV = epoxy_glVertexAttribs3dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs3fvNV = epoxy_glVertexAttribs3fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs3hvNV = epoxy_glVertexAttribs3hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs3svNV = epoxy_glVertexAttribs3svNV_dispatch_table_thunk; + epoxy_glVertexAttribs4dvNV = epoxy_glVertexAttribs4dvNV_dispatch_table_thunk; + epoxy_glVertexAttribs4fvNV = epoxy_glVertexAttribs4fvNV_dispatch_table_thunk; + epoxy_glVertexAttribs4hvNV = epoxy_glVertexAttribs4hvNV_dispatch_table_thunk; + epoxy_glVertexAttribs4svNV = epoxy_glVertexAttribs4svNV_dispatch_table_thunk; + epoxy_glVertexAttribs4ubvNV = epoxy_glVertexAttribs4ubvNV_dispatch_table_thunk; + epoxy_glVertexBindingDivisor = epoxy_glVertexBindingDivisor_dispatch_table_thunk; + epoxy_glVertexBlendARB = epoxy_glVertexBlendARB_dispatch_table_thunk; + epoxy_glVertexBlendEnvfATI = epoxy_glVertexBlendEnvfATI_dispatch_table_thunk; + epoxy_glVertexBlendEnviATI = epoxy_glVertexBlendEnviATI_dispatch_table_thunk; + epoxy_glVertexFormatNV = epoxy_glVertexFormatNV_dispatch_table_thunk; + epoxy_glVertexP2ui = epoxy_glVertexP2ui_dispatch_table_thunk; + epoxy_glVertexP2uiv = epoxy_glVertexP2uiv_dispatch_table_thunk; + epoxy_glVertexP3ui = epoxy_glVertexP3ui_dispatch_table_thunk; + epoxy_glVertexP3uiv = epoxy_glVertexP3uiv_dispatch_table_thunk; + epoxy_glVertexP4ui = epoxy_glVertexP4ui_dispatch_table_thunk; + epoxy_glVertexP4uiv = epoxy_glVertexP4uiv_dispatch_table_thunk; + epoxy_glVertexPointer = epoxy_glVertexPointer_dispatch_table_thunk; + epoxy_glVertexPointerEXT = epoxy_glVertexPointerEXT_dispatch_table_thunk; + epoxy_glVertexPointerListIBM = epoxy_glVertexPointerListIBM_dispatch_table_thunk; + epoxy_glVertexPointervINTEL = epoxy_glVertexPointervINTEL_dispatch_table_thunk; + epoxy_glVertexStream1dATI = epoxy_glVertexStream1dATI_dispatch_table_thunk; + epoxy_glVertexStream1dvATI = epoxy_glVertexStream1dvATI_dispatch_table_thunk; + epoxy_glVertexStream1fATI = epoxy_glVertexStream1fATI_dispatch_table_thunk; + epoxy_glVertexStream1fvATI = epoxy_glVertexStream1fvATI_dispatch_table_thunk; + epoxy_glVertexStream1iATI = epoxy_glVertexStream1iATI_dispatch_table_thunk; + epoxy_glVertexStream1ivATI = epoxy_glVertexStream1ivATI_dispatch_table_thunk; + epoxy_glVertexStream1sATI = epoxy_glVertexStream1sATI_dispatch_table_thunk; + epoxy_glVertexStream1svATI = epoxy_glVertexStream1svATI_dispatch_table_thunk; + epoxy_glVertexStream2dATI = epoxy_glVertexStream2dATI_dispatch_table_thunk; + epoxy_glVertexStream2dvATI = epoxy_glVertexStream2dvATI_dispatch_table_thunk; + epoxy_glVertexStream2fATI = epoxy_glVertexStream2fATI_dispatch_table_thunk; + epoxy_glVertexStream2fvATI = epoxy_glVertexStream2fvATI_dispatch_table_thunk; + epoxy_glVertexStream2iATI = epoxy_glVertexStream2iATI_dispatch_table_thunk; + epoxy_glVertexStream2ivATI = epoxy_glVertexStream2ivATI_dispatch_table_thunk; + epoxy_glVertexStream2sATI = epoxy_glVertexStream2sATI_dispatch_table_thunk; + epoxy_glVertexStream2svATI = epoxy_glVertexStream2svATI_dispatch_table_thunk; + epoxy_glVertexStream3dATI = epoxy_glVertexStream3dATI_dispatch_table_thunk; + epoxy_glVertexStream3dvATI = epoxy_glVertexStream3dvATI_dispatch_table_thunk; + epoxy_glVertexStream3fATI = epoxy_glVertexStream3fATI_dispatch_table_thunk; + epoxy_glVertexStream3fvATI = epoxy_glVertexStream3fvATI_dispatch_table_thunk; + epoxy_glVertexStream3iATI = epoxy_glVertexStream3iATI_dispatch_table_thunk; + epoxy_glVertexStream3ivATI = epoxy_glVertexStream3ivATI_dispatch_table_thunk; + epoxy_glVertexStream3sATI = epoxy_glVertexStream3sATI_dispatch_table_thunk; + epoxy_glVertexStream3svATI = epoxy_glVertexStream3svATI_dispatch_table_thunk; + epoxy_glVertexStream4dATI = epoxy_glVertexStream4dATI_dispatch_table_thunk; + epoxy_glVertexStream4dvATI = epoxy_glVertexStream4dvATI_dispatch_table_thunk; + epoxy_glVertexStream4fATI = epoxy_glVertexStream4fATI_dispatch_table_thunk; + epoxy_glVertexStream4fvATI = epoxy_glVertexStream4fvATI_dispatch_table_thunk; + epoxy_glVertexStream4iATI = epoxy_glVertexStream4iATI_dispatch_table_thunk; + epoxy_glVertexStream4ivATI = epoxy_glVertexStream4ivATI_dispatch_table_thunk; + epoxy_glVertexStream4sATI = epoxy_glVertexStream4sATI_dispatch_table_thunk; + epoxy_glVertexStream4svATI = epoxy_glVertexStream4svATI_dispatch_table_thunk; + epoxy_glVertexWeightPointerEXT = epoxy_glVertexWeightPointerEXT_dispatch_table_thunk; + epoxy_glVertexWeightfEXT = epoxy_glVertexWeightfEXT_dispatch_table_thunk; + epoxy_glVertexWeightfvEXT = epoxy_glVertexWeightfvEXT_dispatch_table_thunk; + epoxy_glVertexWeighthNV = epoxy_glVertexWeighthNV_dispatch_table_thunk; + epoxy_glVertexWeighthvNV = epoxy_glVertexWeighthvNV_dispatch_table_thunk; + epoxy_glVideoCaptureNV = epoxy_glVideoCaptureNV_dispatch_table_thunk; + epoxy_glVideoCaptureStreamParameterdvNV = epoxy_glVideoCaptureStreamParameterdvNV_dispatch_table_thunk; + epoxy_glVideoCaptureStreamParameterfvNV = epoxy_glVideoCaptureStreamParameterfvNV_dispatch_table_thunk; + epoxy_glVideoCaptureStreamParameterivNV = epoxy_glVideoCaptureStreamParameterivNV_dispatch_table_thunk; + epoxy_glViewport = epoxy_glViewport_dispatch_table_thunk; + epoxy_glViewportArrayv = epoxy_glViewportArrayv_dispatch_table_thunk; + epoxy_glViewportArrayvNV = epoxy_glViewportArrayvNV_dispatch_table_thunk; + epoxy_glViewportIndexedf = epoxy_glViewportIndexedf_dispatch_table_thunk; + epoxy_glViewportIndexedfNV = epoxy_glViewportIndexedfNV_dispatch_table_thunk; + epoxy_glViewportIndexedfv = epoxy_glViewportIndexedfv_dispatch_table_thunk; + epoxy_glViewportIndexedfvNV = epoxy_glViewportIndexedfvNV_dispatch_table_thunk; + epoxy_glWaitSync = epoxy_glWaitSync_dispatch_table_thunk; + epoxy_glWaitSyncAPPLE = epoxy_glWaitSyncAPPLE_dispatch_table_thunk; + epoxy_glWeightPathsNV = epoxy_glWeightPathsNV_dispatch_table_thunk; + epoxy_glWeightPointerARB = epoxy_glWeightPointerARB_dispatch_table_thunk; + epoxy_glWeightPointerOES = epoxy_glWeightPointerOES_dispatch_table_thunk; + epoxy_glWeightbvARB = epoxy_glWeightbvARB_dispatch_table_thunk; + epoxy_glWeightdvARB = epoxy_glWeightdvARB_dispatch_table_thunk; + epoxy_glWeightfvARB = epoxy_glWeightfvARB_dispatch_table_thunk; + epoxy_glWeightivARB = epoxy_glWeightivARB_dispatch_table_thunk; + epoxy_glWeightsvARB = epoxy_glWeightsvARB_dispatch_table_thunk; + epoxy_glWeightubvARB = epoxy_glWeightubvARB_dispatch_table_thunk; + epoxy_glWeightuivARB = epoxy_glWeightuivARB_dispatch_table_thunk; + epoxy_glWeightusvARB = epoxy_glWeightusvARB_dispatch_table_thunk; + epoxy_glWindowPos2d = epoxy_glWindowPos2d_dispatch_table_thunk; + epoxy_glWindowPos2dARB = epoxy_glWindowPos2dARB_dispatch_table_thunk; + epoxy_glWindowPos2dMESA = epoxy_glWindowPos2dMESA_dispatch_table_thunk; + epoxy_glWindowPos2dv = epoxy_glWindowPos2dv_dispatch_table_thunk; + epoxy_glWindowPos2dvARB = epoxy_glWindowPos2dvARB_dispatch_table_thunk; + epoxy_glWindowPos2dvMESA = epoxy_glWindowPos2dvMESA_dispatch_table_thunk; + epoxy_glWindowPos2f = epoxy_glWindowPos2f_dispatch_table_thunk; + epoxy_glWindowPos2fARB = epoxy_glWindowPos2fARB_dispatch_table_thunk; + epoxy_glWindowPos2fMESA = epoxy_glWindowPos2fMESA_dispatch_table_thunk; + epoxy_glWindowPos2fv = epoxy_glWindowPos2fv_dispatch_table_thunk; + epoxy_glWindowPos2fvARB = epoxy_glWindowPos2fvARB_dispatch_table_thunk; + epoxy_glWindowPos2fvMESA = epoxy_glWindowPos2fvMESA_dispatch_table_thunk; + epoxy_glWindowPos2i = epoxy_glWindowPos2i_dispatch_table_thunk; + epoxy_glWindowPos2iARB = epoxy_glWindowPos2iARB_dispatch_table_thunk; + epoxy_glWindowPos2iMESA = epoxy_glWindowPos2iMESA_dispatch_table_thunk; + epoxy_glWindowPos2iv = epoxy_glWindowPos2iv_dispatch_table_thunk; + epoxy_glWindowPos2ivARB = epoxy_glWindowPos2ivARB_dispatch_table_thunk; + epoxy_glWindowPos2ivMESA = epoxy_glWindowPos2ivMESA_dispatch_table_thunk; + epoxy_glWindowPos2s = epoxy_glWindowPos2s_dispatch_table_thunk; + epoxy_glWindowPos2sARB = epoxy_glWindowPos2sARB_dispatch_table_thunk; + epoxy_glWindowPos2sMESA = epoxy_glWindowPos2sMESA_dispatch_table_thunk; + epoxy_glWindowPos2sv = epoxy_glWindowPos2sv_dispatch_table_thunk; + epoxy_glWindowPos2svARB = epoxy_glWindowPos2svARB_dispatch_table_thunk; + epoxy_glWindowPos2svMESA = epoxy_glWindowPos2svMESA_dispatch_table_thunk; + epoxy_glWindowPos3d = epoxy_glWindowPos3d_dispatch_table_thunk; + epoxy_glWindowPos3dARB = epoxy_glWindowPos3dARB_dispatch_table_thunk; + epoxy_glWindowPos3dMESA = epoxy_glWindowPos3dMESA_dispatch_table_thunk; + epoxy_glWindowPos3dv = epoxy_glWindowPos3dv_dispatch_table_thunk; + epoxy_glWindowPos3dvARB = epoxy_glWindowPos3dvARB_dispatch_table_thunk; + epoxy_glWindowPos3dvMESA = epoxy_glWindowPos3dvMESA_dispatch_table_thunk; + epoxy_glWindowPos3f = epoxy_glWindowPos3f_dispatch_table_thunk; + epoxy_glWindowPos3fARB = epoxy_glWindowPos3fARB_dispatch_table_thunk; + epoxy_glWindowPos3fMESA = epoxy_glWindowPos3fMESA_dispatch_table_thunk; + epoxy_glWindowPos3fv = epoxy_glWindowPos3fv_dispatch_table_thunk; + epoxy_glWindowPos3fvARB = epoxy_glWindowPos3fvARB_dispatch_table_thunk; + epoxy_glWindowPos3fvMESA = epoxy_glWindowPos3fvMESA_dispatch_table_thunk; + epoxy_glWindowPos3i = epoxy_glWindowPos3i_dispatch_table_thunk; + epoxy_glWindowPos3iARB = epoxy_glWindowPos3iARB_dispatch_table_thunk; + epoxy_glWindowPos3iMESA = epoxy_glWindowPos3iMESA_dispatch_table_thunk; + epoxy_glWindowPos3iv = epoxy_glWindowPos3iv_dispatch_table_thunk; + epoxy_glWindowPos3ivARB = epoxy_glWindowPos3ivARB_dispatch_table_thunk; + epoxy_glWindowPos3ivMESA = epoxy_glWindowPos3ivMESA_dispatch_table_thunk; + epoxy_glWindowPos3s = epoxy_glWindowPos3s_dispatch_table_thunk; + epoxy_glWindowPos3sARB = epoxy_glWindowPos3sARB_dispatch_table_thunk; + epoxy_glWindowPos3sMESA = epoxy_glWindowPos3sMESA_dispatch_table_thunk; + epoxy_glWindowPos3sv = epoxy_glWindowPos3sv_dispatch_table_thunk; + epoxy_glWindowPos3svARB = epoxy_glWindowPos3svARB_dispatch_table_thunk; + epoxy_glWindowPos3svMESA = epoxy_glWindowPos3svMESA_dispatch_table_thunk; + epoxy_glWindowPos4dMESA = epoxy_glWindowPos4dMESA_dispatch_table_thunk; + epoxy_glWindowPos4dvMESA = epoxy_glWindowPos4dvMESA_dispatch_table_thunk; + epoxy_glWindowPos4fMESA = epoxy_glWindowPos4fMESA_dispatch_table_thunk; + epoxy_glWindowPos4fvMESA = epoxy_glWindowPos4fvMESA_dispatch_table_thunk; + epoxy_glWindowPos4iMESA = epoxy_glWindowPos4iMESA_dispatch_table_thunk; + epoxy_glWindowPos4ivMESA = epoxy_glWindowPos4ivMESA_dispatch_table_thunk; + epoxy_glWindowPos4sMESA = epoxy_glWindowPos4sMESA_dispatch_table_thunk; + epoxy_glWindowPos4svMESA = epoxy_glWindowPos4svMESA_dispatch_table_thunk; + epoxy_glWriteMaskEXT = epoxy_glWriteMaskEXT_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNGLACCUMPROC epoxy_glAccum = epoxy_glAccum_global_rewrite_ptr; + +PUBLIC PFNGLACCUMXOESPROC epoxy_glAccumxOES = epoxy_glAccumxOES_global_rewrite_ptr; + +PUBLIC PFNGLACTIVEPROGRAMEXTPROC epoxy_glActiveProgramEXT = epoxy_glActiveProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLACTIVESHADERPROGRAMPROC epoxy_glActiveShaderProgram = epoxy_glActiveShaderProgram_global_rewrite_ptr; + +PUBLIC PFNGLACTIVESHADERPROGRAMEXTPROC epoxy_glActiveShaderProgramEXT = epoxy_glActiveShaderProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLACTIVESTENCILFACEEXTPROC epoxy_glActiveStencilFaceEXT = epoxy_glActiveStencilFaceEXT_global_rewrite_ptr; + +PUBLIC PFNGLACTIVETEXTUREPROC epoxy_glActiveTexture = epoxy_glActiveTexture_global_rewrite_ptr; + +PUBLIC PFNGLACTIVETEXTUREARBPROC epoxy_glActiveTextureARB = epoxy_glActiveTextureARB_global_rewrite_ptr; + +PUBLIC PFNGLACTIVEVARYINGNVPROC epoxy_glActiveVaryingNV = epoxy_glActiveVaryingNV_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFRAGMENTOP1ATIPROC epoxy_glAlphaFragmentOp1ATI = epoxy_glAlphaFragmentOp1ATI_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFRAGMENTOP2ATIPROC epoxy_glAlphaFragmentOp2ATI = epoxy_glAlphaFragmentOp2ATI_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFRAGMENTOP3ATIPROC epoxy_glAlphaFragmentOp3ATI = epoxy_glAlphaFragmentOp3ATI_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCPROC epoxy_glAlphaFunc = epoxy_glAlphaFunc_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCQCOMPROC epoxy_glAlphaFuncQCOM = epoxy_glAlphaFuncQCOM_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCXPROC epoxy_glAlphaFuncx = epoxy_glAlphaFuncx_global_rewrite_ptr; + +PUBLIC PFNGLALPHAFUNCXOESPROC epoxy_glAlphaFuncxOES = epoxy_glAlphaFuncxOES_global_rewrite_ptr; + +PUBLIC PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC epoxy_glApplyFramebufferAttachmentCMAAINTEL = epoxy_glApplyFramebufferAttachmentCMAAINTEL_global_rewrite_ptr; + +PUBLIC PFNGLAPPLYTEXTUREEXTPROC epoxy_glApplyTextureEXT = epoxy_glApplyTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLAREPROGRAMSRESIDENTNVPROC epoxy_glAreProgramsResidentNV = epoxy_glAreProgramsResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLARETEXTURESRESIDENTPROC epoxy_glAreTexturesResident = epoxy_glAreTexturesResident_global_rewrite_ptr; + +PUBLIC PFNGLARETEXTURESRESIDENTEXTPROC epoxy_glAreTexturesResidentEXT = epoxy_glAreTexturesResidentEXT_global_rewrite_ptr; + +PUBLIC PFNGLARRAYELEMENTPROC epoxy_glArrayElement = epoxy_glArrayElement_global_rewrite_ptr; + +PUBLIC PFNGLARRAYELEMENTEXTPROC epoxy_glArrayElementEXT = epoxy_glArrayElementEXT_global_rewrite_ptr; + +PUBLIC PFNGLARRAYOBJECTATIPROC epoxy_glArrayObjectATI = epoxy_glArrayObjectATI_global_rewrite_ptr; + +PUBLIC PFNGLASYNCMARKERSGIXPROC epoxy_glAsyncMarkerSGIX = epoxy_glAsyncMarkerSGIX_global_rewrite_ptr; + +PUBLIC PFNGLATTACHOBJECTARBPROC epoxy_glAttachObjectARB = epoxy_glAttachObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLATTACHSHADERPROC epoxy_glAttachShader = epoxy_glAttachShader_global_rewrite_ptr; + +PFNGLBEGINPROC epoxy_glBegin_unwrapped = epoxy_glBegin_unwrapped_global_rewrite_ptr; + +PUBLIC PFNGLBEGINCONDITIONALRENDERPROC epoxy_glBeginConditionalRender = epoxy_glBeginConditionalRender_global_rewrite_ptr; + +PUBLIC PFNGLBEGINCONDITIONALRENDERNVPROC epoxy_glBeginConditionalRenderNV = epoxy_glBeginConditionalRenderNV_global_rewrite_ptr; + +PUBLIC PFNGLBEGINCONDITIONALRENDERNVXPROC epoxy_glBeginConditionalRenderNVX = epoxy_glBeginConditionalRenderNVX_global_rewrite_ptr; + +PUBLIC PFNGLBEGINFRAGMENTSHADERATIPROC epoxy_glBeginFragmentShaderATI = epoxy_glBeginFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLBEGINOCCLUSIONQUERYNVPROC epoxy_glBeginOcclusionQueryNV = epoxy_glBeginOcclusionQueryNV_global_rewrite_ptr; + +PUBLIC PFNGLBEGINPERFMONITORAMDPROC epoxy_glBeginPerfMonitorAMD = epoxy_glBeginPerfMonitorAMD_global_rewrite_ptr; + +PUBLIC PFNGLBEGINPERFQUERYINTELPROC epoxy_glBeginPerfQueryINTEL = epoxy_glBeginPerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYPROC epoxy_glBeginQuery = epoxy_glBeginQuery_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYARBPROC epoxy_glBeginQueryARB = epoxy_glBeginQueryARB_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYEXTPROC epoxy_glBeginQueryEXT = epoxy_glBeginQueryEXT_global_rewrite_ptr; + +PUBLIC PFNGLBEGINQUERYINDEXEDPROC epoxy_glBeginQueryIndexed = epoxy_glBeginQueryIndexed_global_rewrite_ptr; + +PUBLIC PFNGLBEGINTRANSFORMFEEDBACKPROC epoxy_glBeginTransformFeedback = epoxy_glBeginTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLBEGINTRANSFORMFEEDBACKEXTPROC epoxy_glBeginTransformFeedbackEXT = epoxy_glBeginTransformFeedbackEXT_global_rewrite_ptr; + +PUBLIC PFNGLBEGINTRANSFORMFEEDBACKNVPROC epoxy_glBeginTransformFeedbackNV = epoxy_glBeginTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLBEGINVERTEXSHADEREXTPROC epoxy_glBeginVertexShaderEXT = epoxy_glBeginVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLBEGINVIDEOCAPTURENVPROC epoxy_glBeginVideoCaptureNV = epoxy_glBeginVideoCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDATTRIBLOCATIONPROC epoxy_glBindAttribLocation = epoxy_glBindAttribLocation_global_rewrite_ptr; + +PUBLIC PFNGLBINDATTRIBLOCATIONARBPROC epoxy_glBindAttribLocationARB = epoxy_glBindAttribLocationARB_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERPROC epoxy_glBindBuffer = epoxy_glBindBuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERARBPROC epoxy_glBindBufferARB = epoxy_glBindBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERBASEPROC epoxy_glBindBufferBase = epoxy_glBindBufferBase_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERBASEEXTPROC epoxy_glBindBufferBaseEXT = epoxy_glBindBufferBaseEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERBASENVPROC epoxy_glBindBufferBaseNV = epoxy_glBindBufferBaseNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFEROFFSETEXTPROC epoxy_glBindBufferOffsetEXT = epoxy_glBindBufferOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFEROFFSETNVPROC epoxy_glBindBufferOffsetNV = epoxy_glBindBufferOffsetNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERRANGEPROC epoxy_glBindBufferRange = epoxy_glBindBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERRANGEEXTPROC epoxy_glBindBufferRangeEXT = epoxy_glBindBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERRANGENVPROC epoxy_glBindBufferRangeNV = epoxy_glBindBufferRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERSBASEPROC epoxy_glBindBuffersBase = epoxy_glBindBuffersBase_global_rewrite_ptr; + +PUBLIC PFNGLBINDBUFFERSRANGEPROC epoxy_glBindBuffersRange = epoxy_glBindBuffersRange_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONPROC epoxy_glBindFragDataLocation = epoxy_glBindFragDataLocation_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONEXTPROC epoxy_glBindFragDataLocationEXT = epoxy_glBindFragDataLocationEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONINDEXEDPROC epoxy_glBindFragDataLocationIndexed = epoxy_glBindFragDataLocationIndexed_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC epoxy_glBindFragDataLocationIndexedEXT = epoxy_glBindFragDataLocationIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAGMENTSHADERATIPROC epoxy_glBindFragmentShaderATI = epoxy_glBindFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAMEBUFFERPROC epoxy_glBindFramebuffer = epoxy_glBindFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAMEBUFFEREXTPROC epoxy_glBindFramebufferEXT = epoxy_glBindFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDFRAMEBUFFEROESPROC epoxy_glBindFramebufferOES = epoxy_glBindFramebufferOES_global_rewrite_ptr; + +PUBLIC PFNGLBINDIMAGETEXTUREPROC epoxy_glBindImageTexture = epoxy_glBindImageTexture_global_rewrite_ptr; + +PUBLIC PFNGLBINDIMAGETEXTUREEXTPROC epoxy_glBindImageTextureEXT = epoxy_glBindImageTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDIMAGETEXTURESPROC epoxy_glBindImageTextures = epoxy_glBindImageTextures_global_rewrite_ptr; + +PUBLIC PFNGLBINDLIGHTPARAMETEREXTPROC epoxy_glBindLightParameterEXT = epoxy_glBindLightParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDMATERIALPARAMETEREXTPROC epoxy_glBindMaterialParameterEXT = epoxy_glBindMaterialParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDMULTITEXTUREEXTPROC epoxy_glBindMultiTextureEXT = epoxy_glBindMultiTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDPARAMETEREXTPROC epoxy_glBindParameterEXT = epoxy_glBindParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMARBPROC epoxy_glBindProgramARB = epoxy_glBindProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMNVPROC epoxy_glBindProgramNV = epoxy_glBindProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMPIPELINEPROC epoxy_glBindProgramPipeline = epoxy_glBindProgramPipeline_global_rewrite_ptr; + +PUBLIC PFNGLBINDPROGRAMPIPELINEEXTPROC epoxy_glBindProgramPipelineEXT = epoxy_glBindProgramPipelineEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDRENDERBUFFERPROC epoxy_glBindRenderbuffer = epoxy_glBindRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDRENDERBUFFEREXTPROC epoxy_glBindRenderbufferEXT = epoxy_glBindRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDRENDERBUFFEROESPROC epoxy_glBindRenderbufferOES = epoxy_glBindRenderbufferOES_global_rewrite_ptr; + +PUBLIC PFNGLBINDSAMPLERPROC epoxy_glBindSampler = epoxy_glBindSampler_global_rewrite_ptr; + +PUBLIC PFNGLBINDSAMPLERSPROC epoxy_glBindSamplers = epoxy_glBindSamplers_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXGENPARAMETEREXTPROC epoxy_glBindTexGenParameterEXT = epoxy_glBindTexGenParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREPROC epoxy_glBindTexture = epoxy_glBindTexture_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREEXTPROC epoxy_glBindTextureEXT = epoxy_glBindTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREUNITPROC epoxy_glBindTextureUnit = epoxy_glBindTextureUnit_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTUREUNITPARAMETEREXTPROC epoxy_glBindTextureUnitParameterEXT = epoxy_glBindTextureUnitParameterEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDTEXTURESPROC epoxy_glBindTextures = epoxy_glBindTextures_global_rewrite_ptr; + +PUBLIC PFNGLBINDTRANSFORMFEEDBACKPROC epoxy_glBindTransformFeedback = epoxy_glBindTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLBINDTRANSFORMFEEDBACKNVPROC epoxy_glBindTransformFeedbackNV = epoxy_glBindTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXARRAYPROC epoxy_glBindVertexArray = epoxy_glBindVertexArray_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXARRAYAPPLEPROC epoxy_glBindVertexArrayAPPLE = epoxy_glBindVertexArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXARRAYOESPROC epoxy_glBindVertexArrayOES = epoxy_glBindVertexArrayOES_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXBUFFERPROC epoxy_glBindVertexBuffer = epoxy_glBindVertexBuffer_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXBUFFERSPROC epoxy_glBindVertexBuffers = epoxy_glBindVertexBuffers_global_rewrite_ptr; + +PUBLIC PFNGLBINDVERTEXSHADEREXTPROC epoxy_glBindVertexShaderEXT = epoxy_glBindVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC epoxy_glBindVideoCaptureStreamBufferNV = epoxy_glBindVideoCaptureStreamBufferNV_global_rewrite_ptr; + +PUBLIC PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC epoxy_glBindVideoCaptureStreamTextureNV = epoxy_glBindVideoCaptureStreamTextureNV_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3BEXTPROC epoxy_glBinormal3bEXT = epoxy_glBinormal3bEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3BVEXTPROC epoxy_glBinormal3bvEXT = epoxy_glBinormal3bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3DEXTPROC epoxy_glBinormal3dEXT = epoxy_glBinormal3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3DVEXTPROC epoxy_glBinormal3dvEXT = epoxy_glBinormal3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3FEXTPROC epoxy_glBinormal3fEXT = epoxy_glBinormal3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3FVEXTPROC epoxy_glBinormal3fvEXT = epoxy_glBinormal3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3IEXTPROC epoxy_glBinormal3iEXT = epoxy_glBinormal3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3IVEXTPROC epoxy_glBinormal3ivEXT = epoxy_glBinormal3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3SEXTPROC epoxy_glBinormal3sEXT = epoxy_glBinormal3sEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMAL3SVEXTPROC epoxy_glBinormal3svEXT = epoxy_glBinormal3svEXT_global_rewrite_ptr; + +PUBLIC PFNGLBINORMALPOINTEREXTPROC epoxy_glBinormalPointerEXT = epoxy_glBinormalPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLBITMAPPROC epoxy_glBitmap = epoxy_glBitmap_global_rewrite_ptr; + +PUBLIC PFNGLBITMAPXOESPROC epoxy_glBitmapxOES = epoxy_glBitmapxOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDBARRIERPROC epoxy_glBlendBarrier = epoxy_glBlendBarrier_global_rewrite_ptr; + +PUBLIC PFNGLBLENDBARRIERKHRPROC epoxy_glBlendBarrierKHR = epoxy_glBlendBarrierKHR_global_rewrite_ptr; + +PUBLIC PFNGLBLENDBARRIERNVPROC epoxy_glBlendBarrierNV = epoxy_glBlendBarrierNV_global_rewrite_ptr; + +PUBLIC PFNGLBLENDCOLORPROC epoxy_glBlendColor = epoxy_glBlendColor_global_rewrite_ptr; + +PUBLIC PFNGLBLENDCOLOREXTPROC epoxy_glBlendColorEXT = epoxy_glBlendColorEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDCOLORXOESPROC epoxy_glBlendColorxOES = epoxy_glBlendColorxOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONPROC epoxy_glBlendEquation = epoxy_glBlendEquation_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONEXTPROC epoxy_glBlendEquationEXT = epoxy_glBlendEquationEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONINDEXEDAMDPROC epoxy_glBlendEquationIndexedAMD = epoxy_glBlendEquationIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONOESPROC epoxy_glBlendEquationOES = epoxy_glBlendEquationOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEPROC epoxy_glBlendEquationSeparate = epoxy_glBlendEquationSeparate_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEEXTPROC epoxy_glBlendEquationSeparateEXT = epoxy_glBlendEquationSeparateEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC epoxy_glBlendEquationSeparateIndexedAMD = epoxy_glBlendEquationSeparateIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEOESPROC epoxy_glBlendEquationSeparateOES = epoxy_glBlendEquationSeparateOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIPROC epoxy_glBlendEquationSeparatei = epoxy_glBlendEquationSeparatei_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIARBPROC epoxy_glBlendEquationSeparateiARB = epoxy_glBlendEquationSeparateiARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIEXTPROC epoxy_glBlendEquationSeparateiEXT = epoxy_glBlendEquationSeparateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONSEPARATEIOESPROC epoxy_glBlendEquationSeparateiOES = epoxy_glBlendEquationSeparateiOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIPROC epoxy_glBlendEquationi = epoxy_glBlendEquationi_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIARBPROC epoxy_glBlendEquationiARB = epoxy_glBlendEquationiARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIEXTPROC epoxy_glBlendEquationiEXT = epoxy_glBlendEquationiEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDEQUATIONIOESPROC epoxy_glBlendEquationiOES = epoxy_glBlendEquationiOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCPROC epoxy_glBlendFunc = epoxy_glBlendFunc_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCINDEXEDAMDPROC epoxy_glBlendFuncIndexedAMD = epoxy_glBlendFuncIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEPROC epoxy_glBlendFuncSeparate = epoxy_glBlendFuncSeparate_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEEXTPROC epoxy_glBlendFuncSeparateEXT = epoxy_glBlendFuncSeparateEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEINGRPROC epoxy_glBlendFuncSeparateINGR = epoxy_glBlendFuncSeparateINGR_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC epoxy_glBlendFuncSeparateIndexedAMD = epoxy_glBlendFuncSeparateIndexedAMD_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEOESPROC epoxy_glBlendFuncSeparateOES = epoxy_glBlendFuncSeparateOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIPROC epoxy_glBlendFuncSeparatei = epoxy_glBlendFuncSeparatei_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIARBPROC epoxy_glBlendFuncSeparateiARB = epoxy_glBlendFuncSeparateiARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIEXTPROC epoxy_glBlendFuncSeparateiEXT = epoxy_glBlendFuncSeparateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCSEPARATEIOESPROC epoxy_glBlendFuncSeparateiOES = epoxy_glBlendFuncSeparateiOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIPROC epoxy_glBlendFunci = epoxy_glBlendFunci_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIARBPROC epoxy_glBlendFunciARB = epoxy_glBlendFunciARB_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIEXTPROC epoxy_glBlendFunciEXT = epoxy_glBlendFunciEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLENDFUNCIOESPROC epoxy_glBlendFunciOES = epoxy_glBlendFunciOES_global_rewrite_ptr; + +PUBLIC PFNGLBLENDPARAMETERINVPROC epoxy_glBlendParameteriNV = epoxy_glBlendParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFERPROC epoxy_glBlitFramebuffer = epoxy_glBlitFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFERANGLEPROC epoxy_glBlitFramebufferANGLE = epoxy_glBlitFramebufferANGLE_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFEREXTPROC epoxy_glBlitFramebufferEXT = epoxy_glBlitFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLBLITFRAMEBUFFERNVPROC epoxy_glBlitFramebufferNV = epoxy_glBlitFramebufferNV_global_rewrite_ptr; + +PUBLIC PFNGLBLITNAMEDFRAMEBUFFERPROC epoxy_glBlitNamedFramebuffer = epoxy_glBlitNamedFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERADDRESSRANGENVPROC epoxy_glBufferAddressRangeNV = epoxy_glBufferAddressRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERDATAPROC epoxy_glBufferData = epoxy_glBufferData_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERDATAARBPROC epoxy_glBufferDataARB = epoxy_glBufferDataARB_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERPAGECOMMITMENTARBPROC epoxy_glBufferPageCommitmentARB = epoxy_glBufferPageCommitmentARB_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERPARAMETERIAPPLEPROC epoxy_glBufferParameteriAPPLE = epoxy_glBufferParameteriAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSTORAGEPROC epoxy_glBufferStorage = epoxy_glBufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSTORAGEEXTPROC epoxy_glBufferStorageEXT = epoxy_glBufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSUBDATAPROC epoxy_glBufferSubData = epoxy_glBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLBUFFERSUBDATAARBPROC epoxy_glBufferSubDataARB = epoxy_glBufferSubDataARB_global_rewrite_ptr; + +PUBLIC PFNGLCALLCOMMANDLISTNVPROC epoxy_glCallCommandListNV = epoxy_glCallCommandListNV_global_rewrite_ptr; + +PUBLIC PFNGLCALLLISTPROC epoxy_glCallList = epoxy_glCallList_global_rewrite_ptr; + +PUBLIC PFNGLCALLLISTSPROC epoxy_glCallLists = epoxy_glCallLists_global_rewrite_ptr; + +PUBLIC PFNGLCHECKFRAMEBUFFERSTATUSPROC epoxy_glCheckFramebufferStatus = epoxy_glCheckFramebufferStatus_global_rewrite_ptr; + +PUBLIC PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckFramebufferStatusEXT = epoxy_glCheckFramebufferStatusEXT_global_rewrite_ptr; + +PUBLIC PFNGLCHECKFRAMEBUFFERSTATUSOESPROC epoxy_glCheckFramebufferStatusOES = epoxy_glCheckFramebufferStatusOES_global_rewrite_ptr; + +PUBLIC PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC epoxy_glCheckNamedFramebufferStatus = epoxy_glCheckNamedFramebufferStatus_global_rewrite_ptr; + +PUBLIC PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC epoxy_glCheckNamedFramebufferStatusEXT = epoxy_glCheckNamedFramebufferStatusEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLAMPCOLORPROC epoxy_glClampColor = epoxy_glClampColor_global_rewrite_ptr; + +PUBLIC PFNGLCLAMPCOLORARBPROC epoxy_glClampColorARB = epoxy_glClampColorARB_global_rewrite_ptr; + +PUBLIC PFNGLCLEARPROC epoxy_glClear = epoxy_glClear_global_rewrite_ptr; + +PUBLIC PFNGLCLEARACCUMPROC epoxy_glClearAccum = epoxy_glClearAccum_global_rewrite_ptr; + +PUBLIC PFNGLCLEARACCUMXOESPROC epoxy_glClearAccumxOES = epoxy_glClearAccumxOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERDATAPROC epoxy_glClearBufferData = epoxy_glClearBufferData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERSUBDATAPROC epoxy_glClearBufferSubData = epoxy_glClearBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERFIPROC epoxy_glClearBufferfi = epoxy_glClearBufferfi_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERFVPROC epoxy_glClearBufferfv = epoxy_glClearBufferfv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERIVPROC epoxy_glClearBufferiv = epoxy_glClearBufferiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARBUFFERUIVPROC epoxy_glClearBufferuiv = epoxy_glClearBufferuiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORPROC epoxy_glClearColor = epoxy_glClearColor_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORIIEXTPROC epoxy_glClearColorIiEXT = epoxy_glClearColorIiEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORIUIEXTPROC epoxy_glClearColorIuiEXT = epoxy_glClearColorIuiEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORXPROC epoxy_glClearColorx = epoxy_glClearColorx_global_rewrite_ptr; + +PUBLIC PFNGLCLEARCOLORXOESPROC epoxy_glClearColorxOES = epoxy_glClearColorxOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHPROC epoxy_glClearDepth = epoxy_glClearDepth_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHDNVPROC epoxy_glClearDepthdNV = epoxy_glClearDepthdNV_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHFPROC epoxy_glClearDepthf = epoxy_glClearDepthf_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHFOESPROC epoxy_glClearDepthfOES = epoxy_glClearDepthfOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHXPROC epoxy_glClearDepthx = epoxy_glClearDepthx_global_rewrite_ptr; + +PUBLIC PFNGLCLEARDEPTHXOESPROC epoxy_glClearDepthxOES = epoxy_glClearDepthxOES_global_rewrite_ptr; + +PUBLIC PFNGLCLEARINDEXPROC epoxy_glClearIndex = epoxy_glClearIndex_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERDATAPROC epoxy_glClearNamedBufferData = epoxy_glClearNamedBufferData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERDATAEXTPROC epoxy_glClearNamedBufferDataEXT = epoxy_glClearNamedBufferDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERSUBDATAPROC epoxy_glClearNamedBufferSubData = epoxy_glClearNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC epoxy_glClearNamedBufferSubDataEXT = epoxy_glClearNamedBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERFIPROC epoxy_glClearNamedFramebufferfi = epoxy_glClearNamedFramebufferfi_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERFVPROC epoxy_glClearNamedFramebufferfv = epoxy_glClearNamedFramebufferfv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERIVPROC epoxy_glClearNamedFramebufferiv = epoxy_glClearNamedFramebufferiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC epoxy_glClearNamedFramebufferuiv = epoxy_glClearNamedFramebufferuiv_global_rewrite_ptr; + +PUBLIC PFNGLCLEARSTENCILPROC epoxy_glClearStencil = epoxy_glClearStencil_global_rewrite_ptr; + +PUBLIC PFNGLCLEARTEXIMAGEPROC epoxy_glClearTexImage = epoxy_glClearTexImage_global_rewrite_ptr; + +PUBLIC PFNGLCLEARTEXSUBIMAGEPROC epoxy_glClearTexSubImage = epoxy_glClearTexSubImage_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTACTIVETEXTUREPROC epoxy_glClientActiveTexture = epoxy_glClientActiveTexture_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTACTIVETEXTUREARBPROC epoxy_glClientActiveTextureARB = epoxy_glClientActiveTextureARB_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC epoxy_glClientActiveVertexStreamATI = epoxy_glClientActiveVertexStreamATI_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTATTRIBDEFAULTEXTPROC epoxy_glClientAttribDefaultEXT = epoxy_glClientAttribDefaultEXT_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTWAITSYNCPROC epoxy_glClientWaitSync = epoxy_glClientWaitSync_global_rewrite_ptr; + +PUBLIC PFNGLCLIENTWAITSYNCAPPLEPROC epoxy_glClientWaitSyncAPPLE = epoxy_glClientWaitSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLCLIPCONTROLPROC epoxy_glClipControl = epoxy_glClipControl_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEPROC epoxy_glClipPlane = epoxy_glClipPlane_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEFPROC epoxy_glClipPlanef = epoxy_glClipPlanef_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEFIMGPROC epoxy_glClipPlanefIMG = epoxy_glClipPlanefIMG_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEFOESPROC epoxy_glClipPlanefOES = epoxy_glClipPlanefOES_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEXPROC epoxy_glClipPlanex = epoxy_glClipPlanex_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEXIMGPROC epoxy_glClipPlanexIMG = epoxy_glClipPlanexIMG_global_rewrite_ptr; + +PUBLIC PFNGLCLIPPLANEXOESPROC epoxy_glClipPlanexOES = epoxy_glClipPlanexOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3BPROC epoxy_glColor3b = epoxy_glColor3b_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3BVPROC epoxy_glColor3bv = epoxy_glColor3bv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3DPROC epoxy_glColor3d = epoxy_glColor3d_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3DVPROC epoxy_glColor3dv = epoxy_glColor3dv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FPROC epoxy_glColor3f = epoxy_glColor3f_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FVERTEX3FSUNPROC epoxy_glColor3fVertex3fSUN = epoxy_glColor3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FVERTEX3FVSUNPROC epoxy_glColor3fVertex3fvSUN = epoxy_glColor3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3FVPROC epoxy_glColor3fv = epoxy_glColor3fv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3HNVPROC epoxy_glColor3hNV = epoxy_glColor3hNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3HVNVPROC epoxy_glColor3hvNV = epoxy_glColor3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3IPROC epoxy_glColor3i = epoxy_glColor3i_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3IVPROC epoxy_glColor3iv = epoxy_glColor3iv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3SPROC epoxy_glColor3s = epoxy_glColor3s_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3SVPROC epoxy_glColor3sv = epoxy_glColor3sv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UBPROC epoxy_glColor3ub = epoxy_glColor3ub_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UBVPROC epoxy_glColor3ubv = epoxy_glColor3ubv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UIPROC epoxy_glColor3ui = epoxy_glColor3ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3UIVPROC epoxy_glColor3uiv = epoxy_glColor3uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3USPROC epoxy_glColor3us = epoxy_glColor3us_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3USVPROC epoxy_glColor3usv = epoxy_glColor3usv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3XOESPROC epoxy_glColor3xOES = epoxy_glColor3xOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR3XVOESPROC epoxy_glColor3xvOES = epoxy_glColor3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4BPROC epoxy_glColor4b = epoxy_glColor4b_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4BVPROC epoxy_glColor4bv = epoxy_glColor4bv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4DPROC epoxy_glColor4d = epoxy_glColor4d_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4DVPROC epoxy_glColor4dv = epoxy_glColor4dv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FPROC epoxy_glColor4f = epoxy_glColor4f_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glColor4fNormal3fVertex3fSUN = epoxy_glColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glColor4fNormal3fVertex3fvSUN = epoxy_glColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4FVPROC epoxy_glColor4fv = epoxy_glColor4fv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4HNVPROC epoxy_glColor4hNV = epoxy_glColor4hNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4HVNVPROC epoxy_glColor4hvNV = epoxy_glColor4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4IPROC epoxy_glColor4i = epoxy_glColor4i_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4IVPROC epoxy_glColor4iv = epoxy_glColor4iv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4SPROC epoxy_glColor4s = epoxy_glColor4s_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4SVPROC epoxy_glColor4sv = epoxy_glColor4sv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBPROC epoxy_glColor4ub = epoxy_glColor4ub_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX2FSUNPROC epoxy_glColor4ubVertex2fSUN = epoxy_glColor4ubVertex2fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX2FVSUNPROC epoxy_glColor4ubVertex2fvSUN = epoxy_glColor4ubVertex2fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX3FSUNPROC epoxy_glColor4ubVertex3fSUN = epoxy_glColor4ubVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVERTEX3FVSUNPROC epoxy_glColor4ubVertex3fvSUN = epoxy_glColor4ubVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UBVPROC epoxy_glColor4ubv = epoxy_glColor4ubv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UIPROC epoxy_glColor4ui = epoxy_glColor4ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4UIVPROC epoxy_glColor4uiv = epoxy_glColor4uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4USPROC epoxy_glColor4us = epoxy_glColor4us_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4USVPROC epoxy_glColor4usv = epoxy_glColor4usv_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4XPROC epoxy_glColor4x = epoxy_glColor4x_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4XOESPROC epoxy_glColor4xOES = epoxy_glColor4xOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLOR4XVOESPROC epoxy_glColor4xvOES = epoxy_glColor4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFORMATNVPROC epoxy_glColorFormatNV = epoxy_glColorFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFRAGMENTOP1ATIPROC epoxy_glColorFragmentOp1ATI = epoxy_glColorFragmentOp1ATI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFRAGMENTOP2ATIPROC epoxy_glColorFragmentOp2ATI = epoxy_glColorFragmentOp2ATI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORFRAGMENTOP3ATIPROC epoxy_glColorFragmentOp3ATI = epoxy_glColorFragmentOp3ATI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKPROC epoxy_glColorMask = epoxy_glColorMask_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKINDEXEDEXTPROC epoxy_glColorMaskIndexedEXT = epoxy_glColorMaskIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKIPROC epoxy_glColorMaski = epoxy_glColorMaski_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKIEXTPROC epoxy_glColorMaskiEXT = epoxy_glColorMaskiEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMASKIOESPROC epoxy_glColorMaskiOES = epoxy_glColorMaskiOES_global_rewrite_ptr; + +PUBLIC PFNGLCOLORMATERIALPROC epoxy_glColorMaterial = epoxy_glColorMaterial_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP3UIPROC epoxy_glColorP3ui = epoxy_glColorP3ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP3UIVPROC epoxy_glColorP3uiv = epoxy_glColorP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP4UIPROC epoxy_glColorP4ui = epoxy_glColorP4ui_global_rewrite_ptr; + +PUBLIC PFNGLCOLORP4UIVPROC epoxy_glColorP4uiv = epoxy_glColorP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTERPROC epoxy_glColorPointer = epoxy_glColorPointer_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTEREXTPROC epoxy_glColorPointerEXT = epoxy_glColorPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTERLISTIBMPROC epoxy_glColorPointerListIBM = epoxy_glColorPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLCOLORPOINTERVINTELPROC epoxy_glColorPointervINTEL = epoxy_glColorPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLCOLORSUBTABLEPROC epoxy_glColorSubTable = epoxy_glColorSubTable_global_rewrite_ptr; + +PUBLIC PFNGLCOLORSUBTABLEEXTPROC epoxy_glColorSubTableEXT = epoxy_glColorSubTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPROC epoxy_glColorTable = epoxy_glColorTable_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEEXTPROC epoxy_glColorTableEXT = epoxy_glColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERFVPROC epoxy_glColorTableParameterfv = epoxy_glColorTableParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERFVSGIPROC epoxy_glColorTableParameterfvSGI = epoxy_glColorTableParameterfvSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERIVPROC epoxy_glColorTableParameteriv = epoxy_glColorTableParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLEPARAMETERIVSGIPROC epoxy_glColorTableParameterivSGI = epoxy_glColorTableParameterivSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOLORTABLESGIPROC epoxy_glColorTableSGI = epoxy_glColorTableSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERINPUTNVPROC epoxy_glCombinerInputNV = epoxy_glCombinerInputNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINEROUTPUTNVPROC epoxy_glCombinerOutputNV = epoxy_glCombinerOutputNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERFNVPROC epoxy_glCombinerParameterfNV = epoxy_glCombinerParameterfNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERFVNVPROC epoxy_glCombinerParameterfvNV = epoxy_glCombinerParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERINVPROC epoxy_glCombinerParameteriNV = epoxy_glCombinerParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERPARAMETERIVNVPROC epoxy_glCombinerParameterivNV = epoxy_glCombinerParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glCombinerStageParameterfvNV = epoxy_glCombinerStageParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMMANDLISTSEGMENTSNVPROC epoxy_glCommandListSegmentsNV = epoxy_glCommandListSegmentsNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILECOMMANDLISTNVPROC epoxy_glCompileCommandListNV = epoxy_glCompileCommandListNV_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILESHADERPROC epoxy_glCompileShader = epoxy_glCompileShader_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILESHADERARBPROC epoxy_glCompileShaderARB = epoxy_glCompileShaderARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPILESHADERINCLUDEARBPROC epoxy_glCompileShaderIncludeARB = epoxy_glCompileShaderIncludeARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC epoxy_glCompressedMultiTexImage1DEXT = epoxy_glCompressedMultiTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC epoxy_glCompressedMultiTexImage2DEXT = epoxy_glCompressedMultiTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC epoxy_glCompressedMultiTexImage3DEXT = epoxy_glCompressedMultiTexImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC epoxy_glCompressedMultiTexSubImage1DEXT = epoxy_glCompressedMultiTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC epoxy_glCompressedMultiTexSubImage2DEXT = epoxy_glCompressedMultiTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC epoxy_glCompressedMultiTexSubImage3DEXT = epoxy_glCompressedMultiTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE1DPROC epoxy_glCompressedTexImage1D = epoxy_glCompressedTexImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE1DARBPROC epoxy_glCompressedTexImage1DARB = epoxy_glCompressedTexImage1DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE2DPROC epoxy_glCompressedTexImage2D = epoxy_glCompressedTexImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE2DARBPROC epoxy_glCompressedTexImage2DARB = epoxy_glCompressedTexImage2DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE3DPROC epoxy_glCompressedTexImage3D = epoxy_glCompressedTexImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE3DARBPROC epoxy_glCompressedTexImage3DARB = epoxy_glCompressedTexImage3DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXIMAGE3DOESPROC epoxy_glCompressedTexImage3DOES = epoxy_glCompressedTexImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC epoxy_glCompressedTexSubImage1D = epoxy_glCompressedTexSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC epoxy_glCompressedTexSubImage1DARB = epoxy_glCompressedTexSubImage1DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC epoxy_glCompressedTexSubImage2D = epoxy_glCompressedTexSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC epoxy_glCompressedTexSubImage2DARB = epoxy_glCompressedTexSubImage2DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC epoxy_glCompressedTexSubImage3D = epoxy_glCompressedTexSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC epoxy_glCompressedTexSubImage3DARB = epoxy_glCompressedTexSubImage3DARB_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC epoxy_glCompressedTexSubImage3DOES = epoxy_glCompressedTexSubImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC epoxy_glCompressedTextureImage1DEXT = epoxy_glCompressedTextureImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC epoxy_glCompressedTextureImage2DEXT = epoxy_glCompressedTextureImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC epoxy_glCompressedTextureImage3DEXT = epoxy_glCompressedTextureImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC epoxy_glCompressedTextureSubImage1D = epoxy_glCompressedTextureSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC epoxy_glCompressedTextureSubImage1DEXT = epoxy_glCompressedTextureSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC epoxy_glCompressedTextureSubImage2D = epoxy_glCompressedTextureSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC epoxy_glCompressedTextureSubImage2DEXT = epoxy_glCompressedTextureSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC epoxy_glCompressedTextureSubImage3D = epoxy_glCompressedTextureSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC epoxy_glCompressedTextureSubImage3DEXT = epoxy_glCompressedTextureSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONSERVATIVERASTERPARAMETERFNVPROC epoxy_glConservativeRasterParameterfNV = epoxy_glConservativeRasterParameterfNV_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER1DPROC epoxy_glConvolutionFilter1D = epoxy_glConvolutionFilter1D_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER1DEXTPROC epoxy_glConvolutionFilter1DEXT = epoxy_glConvolutionFilter1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER2DPROC epoxy_glConvolutionFilter2D = epoxy_glConvolutionFilter2D_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONFILTER2DEXTPROC epoxy_glConvolutionFilter2DEXT = epoxy_glConvolutionFilter2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFPROC epoxy_glConvolutionParameterf = epoxy_glConvolutionParameterf_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFEXTPROC epoxy_glConvolutionParameterfEXT = epoxy_glConvolutionParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFVPROC epoxy_glConvolutionParameterfv = epoxy_glConvolutionParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERFVEXTPROC epoxy_glConvolutionParameterfvEXT = epoxy_glConvolutionParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIPROC epoxy_glConvolutionParameteri = epoxy_glConvolutionParameteri_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIEXTPROC epoxy_glConvolutionParameteriEXT = epoxy_glConvolutionParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIVPROC epoxy_glConvolutionParameteriv = epoxy_glConvolutionParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERIVEXTPROC epoxy_glConvolutionParameterivEXT = epoxy_glConvolutionParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERXOESPROC epoxy_glConvolutionParameterxOES = epoxy_glConvolutionParameterxOES_global_rewrite_ptr; + +PUBLIC PFNGLCONVOLUTIONPARAMETERXVOESPROC epoxy_glConvolutionParameterxvOES = epoxy_glConvolutionParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLCOPYBUFFERSUBDATAPROC epoxy_glCopyBufferSubData = epoxy_glCopyBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCOPYBUFFERSUBDATANVPROC epoxy_glCopyBufferSubDataNV = epoxy_glCopyBufferSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORSUBTABLEPROC epoxy_glCopyColorSubTable = epoxy_glCopyColorSubTable_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORSUBTABLEEXTPROC epoxy_glCopyColorSubTableEXT = epoxy_glCopyColorSubTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORTABLEPROC epoxy_glCopyColorTable = epoxy_glCopyColorTable_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCOLORTABLESGIPROC epoxy_glCopyColorTableSGI = epoxy_glCopyColorTableSGI_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER1DPROC epoxy_glCopyConvolutionFilter1D = epoxy_glCopyConvolutionFilter1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC epoxy_glCopyConvolutionFilter1DEXT = epoxy_glCopyConvolutionFilter1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER2DPROC epoxy_glCopyConvolutionFilter2D = epoxy_glCopyConvolutionFilter2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC epoxy_glCopyConvolutionFilter2DEXT = epoxy_glCopyConvolutionFilter2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATAPROC epoxy_glCopyImageSubData = epoxy_glCopyImageSubData_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATAEXTPROC epoxy_glCopyImageSubDataEXT = epoxy_glCopyImageSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATANVPROC epoxy_glCopyImageSubDataNV = epoxy_glCopyImageSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLCOPYIMAGESUBDATAOESPROC epoxy_glCopyImageSubDataOES = epoxy_glCopyImageSubDataOES_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXIMAGE1DEXTPROC epoxy_glCopyMultiTexImage1DEXT = epoxy_glCopyMultiTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXIMAGE2DEXTPROC epoxy_glCopyMultiTexImage2DEXT = epoxy_glCopyMultiTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC epoxy_glCopyMultiTexSubImage1DEXT = epoxy_glCopyMultiTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC epoxy_glCopyMultiTexSubImage2DEXT = epoxy_glCopyMultiTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC epoxy_glCopyMultiTexSubImage3DEXT = epoxy_glCopyMultiTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYNAMEDBUFFERSUBDATAPROC epoxy_glCopyNamedBufferSubData = epoxy_glCopyNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLCOPYPATHNVPROC epoxy_glCopyPathNV = epoxy_glCopyPathNV_global_rewrite_ptr; + +PUBLIC PFNGLCOPYPIXELSPROC epoxy_glCopyPixels = epoxy_glCopyPixels_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE1DPROC epoxy_glCopyTexImage1D = epoxy_glCopyTexImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE1DEXTPROC epoxy_glCopyTexImage1DEXT = epoxy_glCopyTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE2DPROC epoxy_glCopyTexImage2D = epoxy_glCopyTexImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXIMAGE2DEXTPROC epoxy_glCopyTexImage2DEXT = epoxy_glCopyTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE1DPROC epoxy_glCopyTexSubImage1D = epoxy_glCopyTexSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE1DEXTPROC epoxy_glCopyTexSubImage1DEXT = epoxy_glCopyTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE2DPROC epoxy_glCopyTexSubImage2D = epoxy_glCopyTexSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE2DEXTPROC epoxy_glCopyTexSubImage2DEXT = epoxy_glCopyTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE3DPROC epoxy_glCopyTexSubImage3D = epoxy_glCopyTexSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE3DEXTPROC epoxy_glCopyTexSubImage3DEXT = epoxy_glCopyTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXSUBIMAGE3DOESPROC epoxy_glCopyTexSubImage3DOES = epoxy_glCopyTexSubImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTUREIMAGE1DEXTPROC epoxy_glCopyTextureImage1DEXT = epoxy_glCopyTextureImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTUREIMAGE2DEXTPROC epoxy_glCopyTextureImage2DEXT = epoxy_glCopyTextureImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURELEVELSAPPLEPROC epoxy_glCopyTextureLevelsAPPLE = epoxy_glCopyTextureLevelsAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE1DPROC epoxy_glCopyTextureSubImage1D = epoxy_glCopyTextureSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC epoxy_glCopyTextureSubImage1DEXT = epoxy_glCopyTextureSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE2DPROC epoxy_glCopyTextureSubImage2D = epoxy_glCopyTextureSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC epoxy_glCopyTextureSubImage2DEXT = epoxy_glCopyTextureSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE3DPROC epoxy_glCopyTextureSubImage3D = epoxy_glCopyTextureSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC epoxy_glCopyTextureSubImage3DEXT = epoxy_glCopyTextureSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLCOVERFILLPATHINSTANCEDNVPROC epoxy_glCoverFillPathInstancedNV = epoxy_glCoverFillPathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERFILLPATHNVPROC epoxy_glCoverFillPathNV = epoxy_glCoverFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glCoverStrokePathInstancedNV = epoxy_glCoverStrokePathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERSTROKEPATHNVPROC epoxy_glCoverStrokePathNV = epoxy_glCoverStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEMASKNVPROC epoxy_glCoverageMaskNV = epoxy_glCoverageMaskNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEMODULATIONNVPROC epoxy_glCoverageModulationNV = epoxy_glCoverageModulationNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEMODULATIONTABLENVPROC epoxy_glCoverageModulationTableNV = epoxy_glCoverageModulationTableNV_global_rewrite_ptr; + +PUBLIC PFNGLCOVERAGEOPERATIONNVPROC epoxy_glCoverageOperationNV = epoxy_glCoverageOperationNV_global_rewrite_ptr; + +PUBLIC PFNGLCREATEBUFFERSPROC epoxy_glCreateBuffers = epoxy_glCreateBuffers_global_rewrite_ptr; + +PUBLIC PFNGLCREATECOMMANDLISTSNVPROC epoxy_glCreateCommandListsNV = epoxy_glCreateCommandListsNV_global_rewrite_ptr; + +PUBLIC PFNGLCREATEFRAMEBUFFERSPROC epoxy_glCreateFramebuffers = epoxy_glCreateFramebuffers_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPERFQUERYINTELPROC epoxy_glCreatePerfQueryINTEL = epoxy_glCreatePerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPROGRAMPROC epoxy_glCreateProgram = epoxy_glCreateProgram_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPROGRAMOBJECTARBPROC epoxy_glCreateProgramObjectARB = epoxy_glCreateProgramObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLCREATEPROGRAMPIPELINESPROC epoxy_glCreateProgramPipelines = epoxy_glCreateProgramPipelines_global_rewrite_ptr; + +PUBLIC PFNGLCREATEQUERIESPROC epoxy_glCreateQueries = epoxy_glCreateQueries_global_rewrite_ptr; + +PUBLIC PFNGLCREATERENDERBUFFERSPROC epoxy_glCreateRenderbuffers = epoxy_glCreateRenderbuffers_global_rewrite_ptr; + +PUBLIC PFNGLCREATESAMPLERSPROC epoxy_glCreateSamplers = epoxy_glCreateSamplers_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROC epoxy_glCreateShader = epoxy_glCreateShader_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADEROBJECTARBPROC epoxy_glCreateShaderObjectARB = epoxy_glCreateShaderObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROGRAMEXTPROC epoxy_glCreateShaderProgramEXT = epoxy_glCreateShaderProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROGRAMVPROC epoxy_glCreateShaderProgramv = epoxy_glCreateShaderProgramv_global_rewrite_ptr; + +PUBLIC PFNGLCREATESHADERPROGRAMVEXTPROC epoxy_glCreateShaderProgramvEXT = epoxy_glCreateShaderProgramvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCREATESTATESNVPROC epoxy_glCreateStatesNV = epoxy_glCreateStatesNV_global_rewrite_ptr; + +PUBLIC PFNGLCREATESYNCFROMCLEVENTARBPROC epoxy_glCreateSyncFromCLeventARB = epoxy_glCreateSyncFromCLeventARB_global_rewrite_ptr; + +PUBLIC PFNGLCREATETEXTURESPROC epoxy_glCreateTextures = epoxy_glCreateTextures_global_rewrite_ptr; + +PUBLIC PFNGLCREATETRANSFORMFEEDBACKSPROC epoxy_glCreateTransformFeedbacks = epoxy_glCreateTransformFeedbacks_global_rewrite_ptr; + +PUBLIC PFNGLCREATEVERTEXARRAYSPROC epoxy_glCreateVertexArrays = epoxy_glCreateVertexArrays_global_rewrite_ptr; + +PUBLIC PFNGLCULLFACEPROC epoxy_glCullFace = epoxy_glCullFace_global_rewrite_ptr; + +PUBLIC PFNGLCULLPARAMETERDVEXTPROC epoxy_glCullParameterdvEXT = epoxy_glCullParameterdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCULLPARAMETERFVEXTPROC epoxy_glCullParameterfvEXT = epoxy_glCullParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLCURRENTPALETTEMATRIXARBPROC epoxy_glCurrentPaletteMatrixARB = epoxy_glCurrentPaletteMatrixARB_global_rewrite_ptr; + +PUBLIC PFNGLCURRENTPALETTEMATRIXOESPROC epoxy_glCurrentPaletteMatrixOES = epoxy_glCurrentPaletteMatrixOES_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKPROC epoxy_glDebugMessageCallback = epoxy_glDebugMessageCallback_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKAMDPROC epoxy_glDebugMessageCallbackAMD = epoxy_glDebugMessageCallbackAMD_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKARBPROC epoxy_glDebugMessageCallbackARB = epoxy_glDebugMessageCallbackARB_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECALLBACKKHRPROC epoxy_glDebugMessageCallbackKHR = epoxy_glDebugMessageCallbackKHR_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECONTROLPROC epoxy_glDebugMessageControl = epoxy_glDebugMessageControl_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECONTROLARBPROC epoxy_glDebugMessageControlARB = epoxy_glDebugMessageControlARB_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGECONTROLKHRPROC epoxy_glDebugMessageControlKHR = epoxy_glDebugMessageControlKHR_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEENABLEAMDPROC epoxy_glDebugMessageEnableAMD = epoxy_glDebugMessageEnableAMD_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTPROC epoxy_glDebugMessageInsert = epoxy_glDebugMessageInsert_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTAMDPROC epoxy_glDebugMessageInsertAMD = epoxy_glDebugMessageInsertAMD_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTARBPROC epoxy_glDebugMessageInsertARB = epoxy_glDebugMessageInsertARB_global_rewrite_ptr; + +PUBLIC PFNGLDEBUGMESSAGEINSERTKHRPROC epoxy_glDebugMessageInsertKHR = epoxy_glDebugMessageInsertKHR_global_rewrite_ptr; + +PUBLIC PFNGLDEFORMSGIXPROC epoxy_glDeformSGIX = epoxy_glDeformSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDEFORMATIONMAP3DSGIXPROC epoxy_glDeformationMap3dSGIX = epoxy_glDeformationMap3dSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDEFORMATIONMAP3FSGIXPROC epoxy_glDeformationMap3fSGIX = epoxy_glDeformationMap3fSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDELETEASYNCMARKERSSGIXPROC epoxy_glDeleteAsyncMarkersSGIX = epoxy_glDeleteAsyncMarkersSGIX_global_rewrite_ptr; + +PUBLIC PFNGLDELETEBUFFERSPROC epoxy_glDeleteBuffers = epoxy_glDeleteBuffers_global_rewrite_ptr; + +PUBLIC PFNGLDELETEBUFFERSARBPROC epoxy_glDeleteBuffersARB = epoxy_glDeleteBuffersARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETECOMMANDLISTSNVPROC epoxy_glDeleteCommandListsNV = epoxy_glDeleteCommandListsNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFENCESAPPLEPROC epoxy_glDeleteFencesAPPLE = epoxy_glDeleteFencesAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFENCESNVPROC epoxy_glDeleteFencesNV = epoxy_glDeleteFencesNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAGMENTSHADERATIPROC epoxy_glDeleteFragmentShaderATI = epoxy_glDeleteFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAMEBUFFERSPROC epoxy_glDeleteFramebuffers = epoxy_glDeleteFramebuffers_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAMEBUFFERSEXTPROC epoxy_glDeleteFramebuffersEXT = epoxy_glDeleteFramebuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETEFRAMEBUFFERSOESPROC epoxy_glDeleteFramebuffersOES = epoxy_glDeleteFramebuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLDELETELISTSPROC epoxy_glDeleteLists = epoxy_glDeleteLists_global_rewrite_ptr; + +PUBLIC PFNGLDELETENAMEDSTRINGARBPROC epoxy_glDeleteNamedStringARB = epoxy_glDeleteNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETENAMESAMDPROC epoxy_glDeleteNamesAMD = epoxy_glDeleteNamesAMD_global_rewrite_ptr; + +PUBLIC PFNGLDELETEOBJECTARBPROC epoxy_glDeleteObjectARB = epoxy_glDeleteObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETEOCCLUSIONQUERIESNVPROC epoxy_glDeleteOcclusionQueriesNV = epoxy_glDeleteOcclusionQueriesNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPATHSNVPROC epoxy_glDeletePathsNV = epoxy_glDeletePathsNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPERFMONITORSAMDPROC epoxy_glDeletePerfMonitorsAMD = epoxy_glDeletePerfMonitorsAMD_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPERFQUERYINTELPROC epoxy_glDeletePerfQueryINTEL = epoxy_glDeletePerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMPROC epoxy_glDeleteProgram = epoxy_glDeleteProgram_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMPIPELINESPROC epoxy_glDeleteProgramPipelines = epoxy_glDeleteProgramPipelines_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMPIPELINESEXTPROC epoxy_glDeleteProgramPipelinesEXT = epoxy_glDeleteProgramPipelinesEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMSARBPROC epoxy_glDeleteProgramsARB = epoxy_glDeleteProgramsARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETEPROGRAMSNVPROC epoxy_glDeleteProgramsNV = epoxy_glDeleteProgramsNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEQUERIESPROC epoxy_glDeleteQueries = epoxy_glDeleteQueries_global_rewrite_ptr; + +PUBLIC PFNGLDELETEQUERIESARBPROC epoxy_glDeleteQueriesARB = epoxy_glDeleteQueriesARB_global_rewrite_ptr; + +PUBLIC PFNGLDELETEQUERIESEXTPROC epoxy_glDeleteQueriesEXT = epoxy_glDeleteQueriesEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETERENDERBUFFERSPROC epoxy_glDeleteRenderbuffers = epoxy_glDeleteRenderbuffers_global_rewrite_ptr; + +PUBLIC PFNGLDELETERENDERBUFFERSEXTPROC epoxy_glDeleteRenderbuffersEXT = epoxy_glDeleteRenderbuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETERENDERBUFFERSOESPROC epoxy_glDeleteRenderbuffersOES = epoxy_glDeleteRenderbuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLDELETESAMPLERSPROC epoxy_glDeleteSamplers = epoxy_glDeleteSamplers_global_rewrite_ptr; + +PUBLIC PFNGLDELETESHADERPROC epoxy_glDeleteShader = epoxy_glDeleteShader_global_rewrite_ptr; + +PUBLIC PFNGLDELETESTATESNVPROC epoxy_glDeleteStatesNV = epoxy_glDeleteStatesNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETESYNCPROC epoxy_glDeleteSync = epoxy_glDeleteSync_global_rewrite_ptr; + +PUBLIC PFNGLDELETESYNCAPPLEPROC epoxy_glDeleteSyncAPPLE = epoxy_glDeleteSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDELETETEXTURESPROC epoxy_glDeleteTextures = epoxy_glDeleteTextures_global_rewrite_ptr; + +PUBLIC PFNGLDELETETEXTURESEXTPROC epoxy_glDeleteTexturesEXT = epoxy_glDeleteTexturesEXT_global_rewrite_ptr; + +PUBLIC PFNGLDELETETRANSFORMFEEDBACKSPROC epoxy_glDeleteTransformFeedbacks = epoxy_glDeleteTransformFeedbacks_global_rewrite_ptr; + +PUBLIC PFNGLDELETETRANSFORMFEEDBACKSNVPROC epoxy_glDeleteTransformFeedbacksNV = epoxy_glDeleteTransformFeedbacksNV_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXARRAYSPROC epoxy_glDeleteVertexArrays = epoxy_glDeleteVertexArrays_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXARRAYSAPPLEPROC epoxy_glDeleteVertexArraysAPPLE = epoxy_glDeleteVertexArraysAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXARRAYSOESPROC epoxy_glDeleteVertexArraysOES = epoxy_glDeleteVertexArraysOES_global_rewrite_ptr; + +PUBLIC PFNGLDELETEVERTEXSHADEREXTPROC epoxy_glDeleteVertexShaderEXT = epoxy_glDeleteVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHBOUNDSEXTPROC epoxy_glDepthBoundsEXT = epoxy_glDepthBoundsEXT_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHBOUNDSDNVPROC epoxy_glDepthBoundsdNV = epoxy_glDepthBoundsdNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHFUNCPROC epoxy_glDepthFunc = epoxy_glDepthFunc_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHMASKPROC epoxy_glDepthMask = epoxy_glDepthMask_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEPROC epoxy_glDepthRange = epoxy_glDepthRange_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEARRAYFVNVPROC epoxy_glDepthRangeArrayfvNV = epoxy_glDepthRangeArrayfvNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEARRAYVPROC epoxy_glDepthRangeArrayv = epoxy_glDepthRangeArrayv_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEINDEXEDPROC epoxy_glDepthRangeIndexed = epoxy_glDepthRangeIndexed_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEINDEXEDFNVPROC epoxy_glDepthRangeIndexedfNV = epoxy_glDepthRangeIndexedfNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEDNVPROC epoxy_glDepthRangedNV = epoxy_glDepthRangedNV_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEFPROC epoxy_glDepthRangef = epoxy_glDepthRangef_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEFOESPROC epoxy_glDepthRangefOES = epoxy_glDepthRangefOES_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEXPROC epoxy_glDepthRangex = epoxy_glDepthRangex_global_rewrite_ptr; + +PUBLIC PFNGLDEPTHRANGEXOESPROC epoxy_glDepthRangexOES = epoxy_glDepthRangexOES_global_rewrite_ptr; + +PUBLIC PFNGLDETACHOBJECTARBPROC epoxy_glDetachObjectARB = epoxy_glDetachObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLDETACHSHADERPROC epoxy_glDetachShader = epoxy_glDetachShader_global_rewrite_ptr; + +PUBLIC PFNGLDETAILTEXFUNCSGISPROC epoxy_glDetailTexFuncSGIS = epoxy_glDetailTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEPROC epoxy_glDisable = epoxy_glDisable_global_rewrite_ptr; + +PUBLIC PFNGLDISABLECLIENTSTATEPROC epoxy_glDisableClientState = epoxy_glDisableClientState_global_rewrite_ptr; + +PUBLIC PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC epoxy_glDisableClientStateIndexedEXT = epoxy_glDisableClientStateIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLECLIENTSTATEIEXTPROC epoxy_glDisableClientStateiEXT = epoxy_glDisableClientStateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEDRIVERCONTROLQCOMPROC epoxy_glDisableDriverControlQCOM = epoxy_glDisableDriverControlQCOM_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEINDEXEDEXTPROC epoxy_glDisableIndexedEXT = epoxy_glDisableIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC epoxy_glDisableVariantClientStateEXT = epoxy_glDisableVariantClientStateEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXARRAYATTRIBPROC epoxy_glDisableVertexArrayAttrib = epoxy_glDisableVertexArrayAttrib_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC epoxy_glDisableVertexArrayAttribEXT = epoxy_glDisableVertexArrayAttribEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXARRAYEXTPROC epoxy_glDisableVertexArrayEXT = epoxy_glDisableVertexArrayEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXATTRIBAPPLEPROC epoxy_glDisableVertexAttribAPPLE = epoxy_glDisableVertexAttribAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXATTRIBARRAYPROC epoxy_glDisableVertexAttribArray = epoxy_glDisableVertexAttribArray_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEVERTEXATTRIBARRAYARBPROC epoxy_glDisableVertexAttribArrayARB = epoxy_glDisableVertexAttribArrayARB_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEIPROC epoxy_glDisablei = epoxy_glDisablei_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEIEXTPROC epoxy_glDisableiEXT = epoxy_glDisableiEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEINVPROC epoxy_glDisableiNV = epoxy_glDisableiNV_global_rewrite_ptr; + +PUBLIC PFNGLDISABLEIOESPROC epoxy_glDisableiOES = epoxy_glDisableiOES_global_rewrite_ptr; + +PUBLIC PFNGLDISCARDFRAMEBUFFEREXTPROC epoxy_glDiscardFramebufferEXT = epoxy_glDiscardFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLDISPATCHCOMPUTEPROC epoxy_glDispatchCompute = epoxy_glDispatchCompute_global_rewrite_ptr; + +PUBLIC PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC epoxy_glDispatchComputeGroupSizeARB = epoxy_glDispatchComputeGroupSizeARB_global_rewrite_ptr; + +PUBLIC PFNGLDISPATCHCOMPUTEINDIRECTPROC epoxy_glDispatchComputeIndirect = epoxy_glDispatchComputeIndirect_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSPROC epoxy_glDrawArrays = epoxy_glDrawArrays_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSEXTPROC epoxy_glDrawArraysEXT = epoxy_glDrawArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINDIRECTPROC epoxy_glDrawArraysIndirect = epoxy_glDrawArraysIndirect_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDPROC epoxy_glDrawArraysInstanced = epoxy_glDrawArraysInstanced_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDANGLEPROC epoxy_glDrawArraysInstancedANGLE = epoxy_glDrawArraysInstancedANGLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDARBPROC epoxy_glDrawArraysInstancedARB = epoxy_glDrawArraysInstancedARB_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC epoxy_glDrawArraysInstancedBaseInstance = epoxy_glDrawArraysInstancedBaseInstance_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawArraysInstancedBaseInstanceEXT = epoxy_glDrawArraysInstancedBaseInstanceEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDEXTPROC epoxy_glDrawArraysInstancedEXT = epoxy_glDrawArraysInstancedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWARRAYSINSTANCEDNVPROC epoxy_glDrawArraysInstancedNV = epoxy_glDrawArraysInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERPROC epoxy_glDrawBuffer = epoxy_glDrawBuffer_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSPROC epoxy_glDrawBuffers = epoxy_glDrawBuffers_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSARBPROC epoxy_glDrawBuffersARB = epoxy_glDrawBuffersARB_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSATIPROC epoxy_glDrawBuffersATI = epoxy_glDrawBuffersATI_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSEXTPROC epoxy_glDrawBuffersEXT = epoxy_glDrawBuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSINDEXEDEXTPROC epoxy_glDrawBuffersIndexedEXT = epoxy_glDrawBuffersIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWBUFFERSNVPROC epoxy_glDrawBuffersNV = epoxy_glDrawBuffersNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSADDRESSNVPROC epoxy_glDrawCommandsAddressNV = epoxy_glDrawCommandsAddressNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSNVPROC epoxy_glDrawCommandsNV = epoxy_glDrawCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC epoxy_glDrawCommandsStatesAddressNV = epoxy_glDrawCommandsStatesAddressNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWCOMMANDSSTATESNVPROC epoxy_glDrawCommandsStatesNV = epoxy_glDrawCommandsStatesNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTARRAYAPPLEPROC epoxy_glDrawElementArrayAPPLE = epoxy_glDrawElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTARRAYATIPROC epoxy_glDrawElementArrayATI = epoxy_glDrawElementArrayATI_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSPROC epoxy_glDrawElements = epoxy_glDrawElements_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSBASEVERTEXPROC epoxy_glDrawElementsBaseVertex = epoxy_glDrawElementsBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glDrawElementsBaseVertexEXT = epoxy_glDrawElementsBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSBASEVERTEXOESPROC epoxy_glDrawElementsBaseVertexOES = epoxy_glDrawElementsBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINDIRECTPROC epoxy_glDrawElementsIndirect = epoxy_glDrawElementsIndirect_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDPROC epoxy_glDrawElementsInstanced = epoxy_glDrawElementsInstanced_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDANGLEPROC epoxy_glDrawElementsInstancedANGLE = epoxy_glDrawElementsInstancedANGLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDARBPROC epoxy_glDrawElementsInstancedARB = epoxy_glDrawElementsInstancedARB_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseInstance = epoxy_glDrawElementsInstancedBaseInstance_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseInstanceEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC epoxy_glDrawElementsInstancedBaseVertex = epoxy_glDrawElementsInstancedBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstance = epoxy_glDrawElementsInstancedBaseVertexBaseInstance_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT = epoxy_glDrawElementsInstancedBaseVertexBaseInstanceEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC epoxy_glDrawElementsInstancedBaseVertexEXT = epoxy_glDrawElementsInstancedBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC epoxy_glDrawElementsInstancedBaseVertexOES = epoxy_glDrawElementsInstancedBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDEXTPROC epoxy_glDrawElementsInstancedEXT = epoxy_glDrawElementsInstancedEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWELEMENTSINSTANCEDNVPROC epoxy_glDrawElementsInstancedNV = epoxy_glDrawElementsInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWMESHARRAYSSUNPROC epoxy_glDrawMeshArraysSUN = epoxy_glDrawMeshArraysSUN_global_rewrite_ptr; + +PUBLIC PFNGLDRAWPIXELSPROC epoxy_glDrawPixels = epoxy_glDrawPixels_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glDrawRangeElementArrayAPPLE = epoxy_glDrawRangeElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTARRAYATIPROC epoxy_glDrawRangeElementArrayATI = epoxy_glDrawRangeElementArrayATI_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSPROC epoxy_glDrawRangeElements = epoxy_glDrawRangeElements_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC epoxy_glDrawRangeElementsBaseVertex = epoxy_glDrawRangeElementsBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC epoxy_glDrawRangeElementsBaseVertexEXT = epoxy_glDrawRangeElementsBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC epoxy_glDrawRangeElementsBaseVertexOES = epoxy_glDrawRangeElementsBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWRANGEELEMENTSEXTPROC epoxy_glDrawRangeElementsEXT = epoxy_glDrawRangeElementsEXT_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXFOESPROC epoxy_glDrawTexfOES = epoxy_glDrawTexfOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXFVOESPROC epoxy_glDrawTexfvOES = epoxy_glDrawTexfvOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXIOESPROC epoxy_glDrawTexiOES = epoxy_glDrawTexiOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXIVOESPROC epoxy_glDrawTexivOES = epoxy_glDrawTexivOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXSOESPROC epoxy_glDrawTexsOES = epoxy_glDrawTexsOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXSVOESPROC epoxy_glDrawTexsvOES = epoxy_glDrawTexsvOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXTURENVPROC epoxy_glDrawTextureNV = epoxy_glDrawTextureNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXXOESPROC epoxy_glDrawTexxOES = epoxy_glDrawTexxOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTEXXVOESPROC epoxy_glDrawTexxvOES = epoxy_glDrawTexxvOES_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKPROC epoxy_glDrawTransformFeedback = epoxy_glDrawTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC epoxy_glDrawTransformFeedbackInstanced = epoxy_glDrawTransformFeedbackInstanced_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKNVPROC epoxy_glDrawTransformFeedbackNV = epoxy_glDrawTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC epoxy_glDrawTransformFeedbackStream = epoxy_glDrawTransformFeedbackStream_global_rewrite_ptr; + +PUBLIC PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC epoxy_glDrawTransformFeedbackStreamInstanced = epoxy_glDrawTransformFeedbackStreamInstanced_global_rewrite_ptr; + +PUBLIC PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC epoxy_glEGLImageTargetRenderbufferStorageOES = epoxy_glEGLImageTargetRenderbufferStorageOES_global_rewrite_ptr; + +PUBLIC PFNGLEGLIMAGETARGETTEXTURE2DOESPROC epoxy_glEGLImageTargetTexture2DOES = epoxy_glEGLImageTargetTexture2DOES_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPROC epoxy_glEdgeFlag = epoxy_glEdgeFlag_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGFORMATNVPROC epoxy_glEdgeFlagFormatNV = epoxy_glEdgeFlagFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPOINTERPROC epoxy_glEdgeFlagPointer = epoxy_glEdgeFlagPointer_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPOINTEREXTPROC epoxy_glEdgeFlagPointerEXT = epoxy_glEdgeFlagPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGPOINTERLISTIBMPROC epoxy_glEdgeFlagPointerListIBM = epoxy_glEdgeFlagPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLEDGEFLAGVPROC epoxy_glEdgeFlagv = epoxy_glEdgeFlagv_global_rewrite_ptr; + +PUBLIC PFNGLELEMENTPOINTERAPPLEPROC epoxy_glElementPointerAPPLE = epoxy_glElementPointerAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLELEMENTPOINTERATIPROC epoxy_glElementPointerATI = epoxy_glElementPointerATI_global_rewrite_ptr; + +PUBLIC PFNGLENABLEPROC epoxy_glEnable = epoxy_glEnable_global_rewrite_ptr; + +PUBLIC PFNGLENABLECLIENTSTATEPROC epoxy_glEnableClientState = epoxy_glEnableClientState_global_rewrite_ptr; + +PUBLIC PFNGLENABLECLIENTSTATEINDEXEDEXTPROC epoxy_glEnableClientStateIndexedEXT = epoxy_glEnableClientStateIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLECLIENTSTATEIEXTPROC epoxy_glEnableClientStateiEXT = epoxy_glEnableClientStateiEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEDRIVERCONTROLQCOMPROC epoxy_glEnableDriverControlQCOM = epoxy_glEnableDriverControlQCOM_global_rewrite_ptr; + +PUBLIC PFNGLENABLEINDEXEDEXTPROC epoxy_glEnableIndexedEXT = epoxy_glEnableIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVARIANTCLIENTSTATEEXTPROC epoxy_glEnableVariantClientStateEXT = epoxy_glEnableVariantClientStateEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXARRAYATTRIBPROC epoxy_glEnableVertexArrayAttrib = epoxy_glEnableVertexArrayAttrib_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXARRAYATTRIBEXTPROC epoxy_glEnableVertexArrayAttribEXT = epoxy_glEnableVertexArrayAttribEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXARRAYEXTPROC epoxy_glEnableVertexArrayEXT = epoxy_glEnableVertexArrayEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXATTRIBAPPLEPROC epoxy_glEnableVertexAttribAPPLE = epoxy_glEnableVertexAttribAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXATTRIBARRAYPROC epoxy_glEnableVertexAttribArray = epoxy_glEnableVertexAttribArray_global_rewrite_ptr; + +PUBLIC PFNGLENABLEVERTEXATTRIBARRAYARBPROC epoxy_glEnableVertexAttribArrayARB = epoxy_glEnableVertexAttribArrayARB_global_rewrite_ptr; + +PUBLIC PFNGLENABLEIPROC epoxy_glEnablei = epoxy_glEnablei_global_rewrite_ptr; + +PUBLIC PFNGLENABLEIEXTPROC epoxy_glEnableiEXT = epoxy_glEnableiEXT_global_rewrite_ptr; + +PUBLIC PFNGLENABLEINVPROC epoxy_glEnableiNV = epoxy_glEnableiNV_global_rewrite_ptr; + +PUBLIC PFNGLENABLEIOESPROC epoxy_glEnableiOES = epoxy_glEnableiOES_global_rewrite_ptr; + +PFNGLENDPROC epoxy_glEnd_unwrapped = epoxy_glEnd_unwrapped_global_rewrite_ptr; + +PUBLIC PFNGLENDCONDITIONALRENDERPROC epoxy_glEndConditionalRender = epoxy_glEndConditionalRender_global_rewrite_ptr; + +PUBLIC PFNGLENDCONDITIONALRENDERNVPROC epoxy_glEndConditionalRenderNV = epoxy_glEndConditionalRenderNV_global_rewrite_ptr; + +PUBLIC PFNGLENDCONDITIONALRENDERNVXPROC epoxy_glEndConditionalRenderNVX = epoxy_glEndConditionalRenderNVX_global_rewrite_ptr; + +PUBLIC PFNGLENDFRAGMENTSHADERATIPROC epoxy_glEndFragmentShaderATI = epoxy_glEndFragmentShaderATI_global_rewrite_ptr; + +PUBLIC PFNGLENDLISTPROC epoxy_glEndList = epoxy_glEndList_global_rewrite_ptr; + +PUBLIC PFNGLENDOCCLUSIONQUERYNVPROC epoxy_glEndOcclusionQueryNV = epoxy_glEndOcclusionQueryNV_global_rewrite_ptr; + +PUBLIC PFNGLENDPERFMONITORAMDPROC epoxy_glEndPerfMonitorAMD = epoxy_glEndPerfMonitorAMD_global_rewrite_ptr; + +PUBLIC PFNGLENDPERFQUERYINTELPROC epoxy_glEndPerfQueryINTEL = epoxy_glEndPerfQueryINTEL_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYPROC epoxy_glEndQuery = epoxy_glEndQuery_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYARBPROC epoxy_glEndQueryARB = epoxy_glEndQueryARB_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYEXTPROC epoxy_glEndQueryEXT = epoxy_glEndQueryEXT_global_rewrite_ptr; + +PUBLIC PFNGLENDQUERYINDEXEDPROC epoxy_glEndQueryIndexed = epoxy_glEndQueryIndexed_global_rewrite_ptr; + +PUBLIC PFNGLENDTILINGQCOMPROC epoxy_glEndTilingQCOM = epoxy_glEndTilingQCOM_global_rewrite_ptr; + +PUBLIC PFNGLENDTRANSFORMFEEDBACKPROC epoxy_glEndTransformFeedback = epoxy_glEndTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLENDTRANSFORMFEEDBACKEXTPROC epoxy_glEndTransformFeedbackEXT = epoxy_glEndTransformFeedbackEXT_global_rewrite_ptr; + +PUBLIC PFNGLENDTRANSFORMFEEDBACKNVPROC epoxy_glEndTransformFeedbackNV = epoxy_glEndTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLENDVERTEXSHADEREXTPROC epoxy_glEndVertexShaderEXT = epoxy_glEndVertexShaderEXT_global_rewrite_ptr; + +PUBLIC PFNGLENDVIDEOCAPTURENVPROC epoxy_glEndVideoCaptureNV = epoxy_glEndVideoCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1DPROC epoxy_glEvalCoord1d = epoxy_glEvalCoord1d_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1DVPROC epoxy_glEvalCoord1dv = epoxy_glEvalCoord1dv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1FPROC epoxy_glEvalCoord1f = epoxy_glEvalCoord1f_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1FVPROC epoxy_glEvalCoord1fv = epoxy_glEvalCoord1fv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1XOESPROC epoxy_glEvalCoord1xOES = epoxy_glEvalCoord1xOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD1XVOESPROC epoxy_glEvalCoord1xvOES = epoxy_glEvalCoord1xvOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2DPROC epoxy_glEvalCoord2d = epoxy_glEvalCoord2d_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2DVPROC epoxy_glEvalCoord2dv = epoxy_glEvalCoord2dv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2FPROC epoxy_glEvalCoord2f = epoxy_glEvalCoord2f_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2FVPROC epoxy_glEvalCoord2fv = epoxy_glEvalCoord2fv_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2XOESPROC epoxy_glEvalCoord2xOES = epoxy_glEvalCoord2xOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALCOORD2XVOESPROC epoxy_glEvalCoord2xvOES = epoxy_glEvalCoord2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLEVALMAPSNVPROC epoxy_glEvalMapsNV = epoxy_glEvalMapsNV_global_rewrite_ptr; + +PUBLIC PFNGLEVALMESH1PROC epoxy_glEvalMesh1 = epoxy_glEvalMesh1_global_rewrite_ptr; + +PUBLIC PFNGLEVALMESH2PROC epoxy_glEvalMesh2 = epoxy_glEvalMesh2_global_rewrite_ptr; + +PUBLIC PFNGLEVALPOINT1PROC epoxy_glEvalPoint1 = epoxy_glEvalPoint1_global_rewrite_ptr; + +PUBLIC PFNGLEVALPOINT2PROC epoxy_glEvalPoint2 = epoxy_glEvalPoint2_global_rewrite_ptr; + +PUBLIC PFNGLEVALUATEDEPTHVALUESARBPROC epoxy_glEvaluateDepthValuesARB = epoxy_glEvaluateDepthValuesARB_global_rewrite_ptr; + +PUBLIC PFNGLEXECUTEPROGRAMNVPROC epoxy_glExecuteProgramNV = epoxy_glExecuteProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETBUFFERPOINTERVQCOMPROC epoxy_glExtGetBufferPointervQCOM = epoxy_glExtGetBufferPointervQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETBUFFERSQCOMPROC epoxy_glExtGetBuffersQCOM = epoxy_glExtGetBuffersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETFRAMEBUFFERSQCOMPROC epoxy_glExtGetFramebuffersQCOM = epoxy_glExtGetFramebuffersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC epoxy_glExtGetProgramBinarySourceQCOM = epoxy_glExtGetProgramBinarySourceQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETPROGRAMSQCOMPROC epoxy_glExtGetProgramsQCOM = epoxy_glExtGetProgramsQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETRENDERBUFFERSQCOMPROC epoxy_glExtGetRenderbuffersQCOM = epoxy_glExtGetRenderbuffersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETSHADERSQCOMPROC epoxy_glExtGetShadersQCOM = epoxy_glExtGetShadersQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC epoxy_glExtGetTexLevelParameterivQCOM = epoxy_glExtGetTexLevelParameterivQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETTEXSUBIMAGEQCOMPROC epoxy_glExtGetTexSubImageQCOM = epoxy_glExtGetTexSubImageQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTGETTEXTURESQCOMPROC epoxy_glExtGetTexturesQCOM = epoxy_glExtGetTexturesQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTISPROGRAMBINARYQCOMPROC epoxy_glExtIsProgramBinaryQCOM = epoxy_glExtIsProgramBinaryQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC epoxy_glExtTexObjectStateOverrideiQCOM = epoxy_glExtTexObjectStateOverrideiQCOM_global_rewrite_ptr; + +PUBLIC PFNGLEXTRACTCOMPONENTEXTPROC epoxy_glExtractComponentEXT = epoxy_glExtractComponentEXT_global_rewrite_ptr; + +PUBLIC PFNGLFEEDBACKBUFFERPROC epoxy_glFeedbackBuffer = epoxy_glFeedbackBuffer_global_rewrite_ptr; + +PUBLIC PFNGLFEEDBACKBUFFERXOESPROC epoxy_glFeedbackBufferxOES = epoxy_glFeedbackBufferxOES_global_rewrite_ptr; + +PUBLIC PFNGLFENCESYNCPROC epoxy_glFenceSync = epoxy_glFenceSync_global_rewrite_ptr; + +PUBLIC PFNGLFENCESYNCAPPLEPROC epoxy_glFenceSyncAPPLE = epoxy_glFenceSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFINALCOMBINERINPUTNVPROC epoxy_glFinalCombinerInputNV = epoxy_glFinalCombinerInputNV_global_rewrite_ptr; + +PUBLIC PFNGLFINISHPROC epoxy_glFinish = epoxy_glFinish_global_rewrite_ptr; + +PUBLIC PFNGLFINISHASYNCSGIXPROC epoxy_glFinishAsyncSGIX = epoxy_glFinishAsyncSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFINISHFENCEAPPLEPROC epoxy_glFinishFenceAPPLE = epoxy_glFinishFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFINISHFENCENVPROC epoxy_glFinishFenceNV = epoxy_glFinishFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLFINISHOBJECTAPPLEPROC epoxy_glFinishObjectAPPLE = epoxy_glFinishObjectAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFINISHTEXTURESUNXPROC epoxy_glFinishTextureSUNX = epoxy_glFinishTextureSUNX_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHPROC epoxy_glFlush = epoxy_glFlush_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDBUFFERRANGEPROC epoxy_glFlushMappedBufferRange = epoxy_glFlushMappedBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC epoxy_glFlushMappedBufferRangeAPPLE = epoxy_glFlushMappedBufferRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC epoxy_glFlushMappedBufferRangeEXT = epoxy_glFlushMappedBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC epoxy_glFlushMappedNamedBufferRange = epoxy_glFlushMappedNamedBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC epoxy_glFlushMappedNamedBufferRangeEXT = epoxy_glFlushMappedNamedBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHPIXELDATARANGENVPROC epoxy_glFlushPixelDataRangeNV = epoxy_glFlushPixelDataRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHRASTERSGIXPROC epoxy_glFlushRasterSGIX = epoxy_glFlushRasterSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHSTATICDATAIBMPROC epoxy_glFlushStaticDataIBM = epoxy_glFlushStaticDataIBM_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC epoxy_glFlushVertexArrayRangeAPPLE = epoxy_glFlushVertexArrayRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLFLUSHVERTEXARRAYRANGENVPROC epoxy_glFlushVertexArrayRangeNV = epoxy_glFlushVertexArrayRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFORMATNVPROC epoxy_glFogCoordFormatNV = epoxy_glFogCoordFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDPOINTERPROC epoxy_glFogCoordPointer = epoxy_glFogCoordPointer_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDPOINTEREXTPROC epoxy_glFogCoordPointerEXT = epoxy_glFogCoordPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDPOINTERLISTIBMPROC epoxy_glFogCoordPointerListIBM = epoxy_glFogCoordPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDPROC epoxy_glFogCoordd = epoxy_glFogCoordd_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDEXTPROC epoxy_glFogCoorddEXT = epoxy_glFogCoorddEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDVPROC epoxy_glFogCoorddv = epoxy_glFogCoorddv_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDDVEXTPROC epoxy_glFogCoorddvEXT = epoxy_glFogCoorddvEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFPROC epoxy_glFogCoordf = epoxy_glFogCoordf_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFEXTPROC epoxy_glFogCoordfEXT = epoxy_glFogCoordfEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFVPROC epoxy_glFogCoordfv = epoxy_glFogCoordfv_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDFVEXTPROC epoxy_glFogCoordfvEXT = epoxy_glFogCoordfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDHNVPROC epoxy_glFogCoordhNV = epoxy_glFogCoordhNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGCOORDHVNVPROC epoxy_glFogCoordhvNV = epoxy_glFogCoordhvNV_global_rewrite_ptr; + +PUBLIC PFNGLFOGFUNCSGISPROC epoxy_glFogFuncSGIS = epoxy_glFogFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLFOGFPROC epoxy_glFogf = epoxy_glFogf_global_rewrite_ptr; + +PUBLIC PFNGLFOGFVPROC epoxy_glFogfv = epoxy_glFogfv_global_rewrite_ptr; + +PUBLIC PFNGLFOGIPROC epoxy_glFogi = epoxy_glFogi_global_rewrite_ptr; + +PUBLIC PFNGLFOGIVPROC epoxy_glFogiv = epoxy_glFogiv_global_rewrite_ptr; + +PUBLIC PFNGLFOGXPROC epoxy_glFogx = epoxy_glFogx_global_rewrite_ptr; + +PUBLIC PFNGLFOGXOESPROC epoxy_glFogxOES = epoxy_glFogxOES_global_rewrite_ptr; + +PUBLIC PFNGLFOGXVPROC epoxy_glFogxv = epoxy_glFogxv_global_rewrite_ptr; + +PUBLIC PFNGLFOGXVOESPROC epoxy_glFogxvOES = epoxy_glFogxvOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTCOLORMATERIALSGIXPROC epoxy_glFragmentColorMaterialSGIX = epoxy_glFragmentColorMaterialSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTCOVERAGECOLORNVPROC epoxy_glFragmentCoverageColorNV = epoxy_glFragmentCoverageColorNV_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELFSGIXPROC epoxy_glFragmentLightModelfSGIX = epoxy_glFragmentLightModelfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELFVSGIXPROC epoxy_glFragmentLightModelfvSGIX = epoxy_glFragmentLightModelfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELISGIXPROC epoxy_glFragmentLightModeliSGIX = epoxy_glFragmentLightModeliSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTMODELIVSGIXPROC epoxy_glFragmentLightModelivSGIX = epoxy_glFragmentLightModelivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTFSGIXPROC epoxy_glFragmentLightfSGIX = epoxy_glFragmentLightfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTFVSGIXPROC epoxy_glFragmentLightfvSGIX = epoxy_glFragmentLightfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTISGIXPROC epoxy_glFragmentLightiSGIX = epoxy_glFragmentLightiSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTLIGHTIVSGIXPROC epoxy_glFragmentLightivSGIX = epoxy_glFragmentLightivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALFSGIXPROC epoxy_glFragmentMaterialfSGIX = epoxy_glFragmentMaterialfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALFVSGIXPROC epoxy_glFragmentMaterialfvSGIX = epoxy_glFragmentMaterialfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALISGIXPROC epoxy_glFragmentMaterialiSGIX = epoxy_glFragmentMaterialiSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAGMENTMATERIALIVSGIXPROC epoxy_glFragmentMaterialivSGIX = epoxy_glFragmentMaterialivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAMETERMINATORGREMEDYPROC epoxy_glFrameTerminatorGREMEDY = epoxy_glFrameTerminatorGREMEDY_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEZOOMSGIXPROC epoxy_glFrameZoomSGIX = epoxy_glFrameZoomSGIX_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC epoxy_glFramebufferDrawBufferEXT = epoxy_glFramebufferDrawBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC epoxy_glFramebufferDrawBuffersEXT = epoxy_glFramebufferDrawBuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERPARAMETERIPROC epoxy_glFramebufferParameteri = epoxy_glFramebufferParameteri_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERREADBUFFEREXTPROC epoxy_glFramebufferReadBufferEXT = epoxy_glFramebufferReadBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERRENDERBUFFERPROC epoxy_glFramebufferRenderbuffer = epoxy_glFramebufferRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glFramebufferRenderbufferEXT = epoxy_glFramebufferRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERRENDERBUFFEROESPROC epoxy_glFramebufferRenderbufferOES = epoxy_glFramebufferRenderbufferOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glFramebufferSampleLocationsfvARB = epoxy_glFramebufferSampleLocationsfvARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glFramebufferSampleLocationsfvNV = epoxy_glFramebufferSampleLocationsfvNV_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREPROC epoxy_glFramebufferTexture = epoxy_glFramebufferTexture_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE1DPROC epoxy_glFramebufferTexture1D = epoxy_glFramebufferTexture1D_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glFramebufferTexture1DEXT = epoxy_glFramebufferTexture1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DPROC epoxy_glFramebufferTexture2D = epoxy_glFramebufferTexture2D_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glFramebufferTexture2DEXT = epoxy_glFramebufferTexture2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC epoxy_glFramebufferTexture2DMultisampleEXT = epoxy_glFramebufferTexture2DMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC epoxy_glFramebufferTexture2DMultisampleIMG = epoxy_glFramebufferTexture2DMultisampleIMG_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE2DOESPROC epoxy_glFramebufferTexture2DOES = epoxy_glFramebufferTexture2DOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE3DPROC epoxy_glFramebufferTexture3D = epoxy_glFramebufferTexture3D_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glFramebufferTexture3DEXT = epoxy_glFramebufferTexture3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURE3DOESPROC epoxy_glFramebufferTexture3DOES = epoxy_glFramebufferTexture3DOES_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREARBPROC epoxy_glFramebufferTextureARB = epoxy_glFramebufferTextureARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREEXTPROC epoxy_glFramebufferTextureEXT = epoxy_glFramebufferTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREFACEARBPROC epoxy_glFramebufferTextureFaceARB = epoxy_glFramebufferTextureFaceARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glFramebufferTextureFaceEXT = epoxy_glFramebufferTextureFaceEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURELAYERPROC epoxy_glFramebufferTextureLayer = epoxy_glFramebufferTextureLayer_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURELAYERARBPROC epoxy_glFramebufferTextureLayerARB = epoxy_glFramebufferTextureLayerARB_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glFramebufferTextureLayerEXT = epoxy_glFramebufferTextureLayerEXT_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC epoxy_glFramebufferTextureMultiviewOVR = epoxy_glFramebufferTextureMultiviewOVR_global_rewrite_ptr; + +PUBLIC PFNGLFRAMEBUFFERTEXTUREOESPROC epoxy_glFramebufferTextureOES = epoxy_glFramebufferTextureOES_global_rewrite_ptr; + +PUBLIC PFNGLFREEOBJECTBUFFERATIPROC epoxy_glFreeObjectBufferATI = epoxy_glFreeObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLFRONTFACEPROC epoxy_glFrontFace = epoxy_glFrontFace_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMPROC epoxy_glFrustum = epoxy_glFrustum_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMFPROC epoxy_glFrustumf = epoxy_glFrustumf_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMFOESPROC epoxy_glFrustumfOES = epoxy_glFrustumfOES_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMXPROC epoxy_glFrustumx = epoxy_glFrustumx_global_rewrite_ptr; + +PUBLIC PFNGLFRUSTUMXOESPROC epoxy_glFrustumxOES = epoxy_glFrustumxOES_global_rewrite_ptr; + +PUBLIC PFNGLGENASYNCMARKERSSGIXPROC epoxy_glGenAsyncMarkersSGIX = epoxy_glGenAsyncMarkersSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGENBUFFERSPROC epoxy_glGenBuffers = epoxy_glGenBuffers_global_rewrite_ptr; + +PUBLIC PFNGLGENBUFFERSARBPROC epoxy_glGenBuffersARB = epoxy_glGenBuffersARB_global_rewrite_ptr; + +PUBLIC PFNGLGENFENCESAPPLEPROC epoxy_glGenFencesAPPLE = epoxy_glGenFencesAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGENFENCESNVPROC epoxy_glGenFencesNV = epoxy_glGenFencesNV_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAGMENTSHADERSATIPROC epoxy_glGenFragmentShadersATI = epoxy_glGenFragmentShadersATI_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAMEBUFFERSPROC epoxy_glGenFramebuffers = epoxy_glGenFramebuffers_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAMEBUFFERSEXTPROC epoxy_glGenFramebuffersEXT = epoxy_glGenFramebuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENFRAMEBUFFERSOESPROC epoxy_glGenFramebuffersOES = epoxy_glGenFramebuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLGENLISTSPROC epoxy_glGenLists = epoxy_glGenLists_global_rewrite_ptr; + +PUBLIC PFNGLGENNAMESAMDPROC epoxy_glGenNamesAMD = epoxy_glGenNamesAMD_global_rewrite_ptr; + +PUBLIC PFNGLGENOCCLUSIONQUERIESNVPROC epoxy_glGenOcclusionQueriesNV = epoxy_glGenOcclusionQueriesNV_global_rewrite_ptr; + +PUBLIC PFNGLGENPATHSNVPROC epoxy_glGenPathsNV = epoxy_glGenPathsNV_global_rewrite_ptr; + +PUBLIC PFNGLGENPERFMONITORSAMDPROC epoxy_glGenPerfMonitorsAMD = epoxy_glGenPerfMonitorsAMD_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMPIPELINESPROC epoxy_glGenProgramPipelines = epoxy_glGenProgramPipelines_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMPIPELINESEXTPROC epoxy_glGenProgramPipelinesEXT = epoxy_glGenProgramPipelinesEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMSARBPROC epoxy_glGenProgramsARB = epoxy_glGenProgramsARB_global_rewrite_ptr; + +PUBLIC PFNGLGENPROGRAMSNVPROC epoxy_glGenProgramsNV = epoxy_glGenProgramsNV_global_rewrite_ptr; + +PUBLIC PFNGLGENQUERIESPROC epoxy_glGenQueries = epoxy_glGenQueries_global_rewrite_ptr; + +PUBLIC PFNGLGENQUERIESARBPROC epoxy_glGenQueriesARB = epoxy_glGenQueriesARB_global_rewrite_ptr; + +PUBLIC PFNGLGENQUERIESEXTPROC epoxy_glGenQueriesEXT = epoxy_glGenQueriesEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENRENDERBUFFERSPROC epoxy_glGenRenderbuffers = epoxy_glGenRenderbuffers_global_rewrite_ptr; + +PUBLIC PFNGLGENRENDERBUFFERSEXTPROC epoxy_glGenRenderbuffersEXT = epoxy_glGenRenderbuffersEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENRENDERBUFFERSOESPROC epoxy_glGenRenderbuffersOES = epoxy_glGenRenderbuffersOES_global_rewrite_ptr; + +PUBLIC PFNGLGENSAMPLERSPROC epoxy_glGenSamplers = epoxy_glGenSamplers_global_rewrite_ptr; + +PUBLIC PFNGLGENSYMBOLSEXTPROC epoxy_glGenSymbolsEXT = epoxy_glGenSymbolsEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENTEXTURESPROC epoxy_glGenTextures = epoxy_glGenTextures_global_rewrite_ptr; + +PUBLIC PFNGLGENTEXTURESEXTPROC epoxy_glGenTexturesEXT = epoxy_glGenTexturesEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENTRANSFORMFEEDBACKSPROC epoxy_glGenTransformFeedbacks = epoxy_glGenTransformFeedbacks_global_rewrite_ptr; + +PUBLIC PFNGLGENTRANSFORMFEEDBACKSNVPROC epoxy_glGenTransformFeedbacksNV = epoxy_glGenTransformFeedbacksNV_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXARRAYSPROC epoxy_glGenVertexArrays = epoxy_glGenVertexArrays_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXARRAYSAPPLEPROC epoxy_glGenVertexArraysAPPLE = epoxy_glGenVertexArraysAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXARRAYSOESPROC epoxy_glGenVertexArraysOES = epoxy_glGenVertexArraysOES_global_rewrite_ptr; + +PUBLIC PFNGLGENVERTEXSHADERSEXTPROC epoxy_glGenVertexShadersEXT = epoxy_glGenVertexShadersEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMIPMAPPROC epoxy_glGenerateMipmap = epoxy_glGenerateMipmap_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMIPMAPEXTPROC epoxy_glGenerateMipmapEXT = epoxy_glGenerateMipmapEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMIPMAPOESPROC epoxy_glGenerateMipmapOES = epoxy_glGenerateMipmapOES_global_rewrite_ptr; + +PUBLIC PFNGLGENERATEMULTITEXMIPMAPEXTPROC epoxy_glGenerateMultiTexMipmapEXT = epoxy_glGenerateMultiTexMipmapEXT_global_rewrite_ptr; + +PUBLIC PFNGLGENERATETEXTUREMIPMAPPROC epoxy_glGenerateTextureMipmap = epoxy_glGenerateTextureMipmap_global_rewrite_ptr; + +PUBLIC PFNGLGENERATETEXTUREMIPMAPEXTPROC epoxy_glGenerateTextureMipmapEXT = epoxy_glGenerateTextureMipmapEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC epoxy_glGetActiveAtomicCounterBufferiv = epoxy_glGetActiveAtomicCounterBufferiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEATTRIBPROC epoxy_glGetActiveAttrib = epoxy_glGetActiveAttrib_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEATTRIBARBPROC epoxy_glGetActiveAttribARB = epoxy_glGetActiveAttribARB_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVESUBROUTINENAMEPROC epoxy_glGetActiveSubroutineName = epoxy_glGetActiveSubroutineName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC epoxy_glGetActiveSubroutineUniformName = epoxy_glGetActiveSubroutineUniformName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC epoxy_glGetActiveSubroutineUniformiv = epoxy_glGetActiveSubroutineUniformiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMPROC epoxy_glGetActiveUniform = epoxy_glGetActiveUniform_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMARBPROC epoxy_glGetActiveUniformARB = epoxy_glGetActiveUniformARB_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC epoxy_glGetActiveUniformBlockName = epoxy_glGetActiveUniformBlockName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMBLOCKIVPROC epoxy_glGetActiveUniformBlockiv = epoxy_glGetActiveUniformBlockiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMNAMEPROC epoxy_glGetActiveUniformName = epoxy_glGetActiveUniformName_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEUNIFORMSIVPROC epoxy_glGetActiveUniformsiv = epoxy_glGetActiveUniformsiv_global_rewrite_ptr; + +PUBLIC PFNGLGETACTIVEVARYINGNVPROC epoxy_glGetActiveVaryingNV = epoxy_glGetActiveVaryingNV_global_rewrite_ptr; + +PUBLIC PFNGLGETARRAYOBJECTFVATIPROC epoxy_glGetArrayObjectfvATI = epoxy_glGetArrayObjectfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETARRAYOBJECTIVATIPROC epoxy_glGetArrayObjectivATI = epoxy_glGetArrayObjectivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETATTACHEDOBJECTSARBPROC epoxy_glGetAttachedObjectsARB = epoxy_glGetAttachedObjectsARB_global_rewrite_ptr; + +PUBLIC PFNGLGETATTACHEDSHADERSPROC epoxy_glGetAttachedShaders = epoxy_glGetAttachedShaders_global_rewrite_ptr; + +PUBLIC PFNGLGETATTRIBLOCATIONPROC epoxy_glGetAttribLocation = epoxy_glGetAttribLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETATTRIBLOCATIONARBPROC epoxy_glGetAttribLocationARB = epoxy_glGetAttribLocationARB_global_rewrite_ptr; + +PUBLIC PFNGLGETBOOLEANINDEXEDVEXTPROC epoxy_glGetBooleanIndexedvEXT = epoxy_glGetBooleanIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETBOOLEANI_VPROC epoxy_glGetBooleani_v = epoxy_glGetBooleani_v_global_rewrite_ptr; + +PUBLIC PFNGLGETBOOLEANVPROC epoxy_glGetBooleanv = epoxy_glGetBooleanv_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERI64VPROC epoxy_glGetBufferParameteri64v = epoxy_glGetBufferParameteri64v_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERIVPROC epoxy_glGetBufferParameteriv = epoxy_glGetBufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERIVARBPROC epoxy_glGetBufferParameterivARB = epoxy_glGetBufferParameterivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPARAMETERUI64VNVPROC epoxy_glGetBufferParameterui64vNV = epoxy_glGetBufferParameterui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPOINTERVPROC epoxy_glGetBufferPointerv = epoxy_glGetBufferPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPOINTERVARBPROC epoxy_glGetBufferPointervARB = epoxy_glGetBufferPointervARB_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERPOINTERVOESPROC epoxy_glGetBufferPointervOES = epoxy_glGetBufferPointervOES_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERSUBDATAPROC epoxy_glGetBufferSubData = epoxy_glGetBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLGETBUFFERSUBDATAARBPROC epoxy_glGetBufferSubDataARB = epoxy_glGetBufferSubDataARB_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEPROC epoxy_glGetClipPlane = epoxy_glGetClipPlane_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEFPROC epoxy_glGetClipPlanef = epoxy_glGetClipPlanef_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEFOESPROC epoxy_glGetClipPlanefOES = epoxy_glGetClipPlanefOES_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEXPROC epoxy_glGetClipPlanex = epoxy_glGetClipPlanex_global_rewrite_ptr; + +PUBLIC PFNGLGETCLIPPLANEXOESPROC epoxy_glGetClipPlanexOES = epoxy_glGetClipPlanexOES_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPROC epoxy_glGetColorTable = epoxy_glGetColorTable_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEEXTPROC epoxy_glGetColorTableEXT = epoxy_glGetColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERFVPROC epoxy_glGetColorTableParameterfv = epoxy_glGetColorTableParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERFVEXTPROC epoxy_glGetColorTableParameterfvEXT = epoxy_glGetColorTableParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERFVSGIPROC epoxy_glGetColorTableParameterfvSGI = epoxy_glGetColorTableParameterfvSGI_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERIVPROC epoxy_glGetColorTableParameteriv = epoxy_glGetColorTableParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERIVEXTPROC epoxy_glGetColorTableParameterivEXT = epoxy_glGetColorTableParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLEPARAMETERIVSGIPROC epoxy_glGetColorTableParameterivSGI = epoxy_glGetColorTableParameterivSGI_global_rewrite_ptr; + +PUBLIC PFNGLGETCOLORTABLESGIPROC epoxy_glGetColorTableSGI = epoxy_glGetColorTableSGI_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetCombinerInputParameterfvNV = epoxy_glGetCombinerInputParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetCombinerInputParameterivNV = epoxy_glGetCombinerInputParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC epoxy_glGetCombinerOutputParameterfvNV = epoxy_glGetCombinerOutputParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC epoxy_glGetCombinerOutputParameterivNV = epoxy_glGetCombinerOutputParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC epoxy_glGetCombinerStageParameterfvNV = epoxy_glGetCombinerStageParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMMANDHEADERNVPROC epoxy_glGetCommandHeaderNV = epoxy_glGetCommandHeaderNV_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC epoxy_glGetCompressedMultiTexImageEXT = epoxy_glGetCompressedMultiTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXIMAGEPROC epoxy_glGetCompressedTexImage = epoxy_glGetCompressedTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetCompressedTexImageARB = epoxy_glGetCompressedTexImageARB_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC epoxy_glGetCompressedTextureImage = epoxy_glGetCompressedTextureImage_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC epoxy_glGetCompressedTextureImageEXT = epoxy_glGetCompressedTextureImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC epoxy_glGetCompressedTextureSubImage = epoxy_glGetCompressedTextureSubImage_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONFILTERPROC epoxy_glGetConvolutionFilter = epoxy_glGetConvolutionFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONFILTEREXTPROC epoxy_glGetConvolutionFilterEXT = epoxy_glGetConvolutionFilterEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERFVPROC epoxy_glGetConvolutionParameterfv = epoxy_glGetConvolutionParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC epoxy_glGetConvolutionParameterfvEXT = epoxy_glGetConvolutionParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERIVPROC epoxy_glGetConvolutionParameteriv = epoxy_glGetConvolutionParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC epoxy_glGetConvolutionParameterivEXT = epoxy_glGetConvolutionParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETCONVOLUTIONPARAMETERXVOESPROC epoxy_glGetConvolutionParameterxvOES = epoxy_glGetConvolutionParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETCOVERAGEMODULATIONTABLENVPROC epoxy_glGetCoverageModulationTableNV = epoxy_glGetCoverageModulationTableNV_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGPROC epoxy_glGetDebugMessageLog = epoxy_glGetDebugMessageLog_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGAMDPROC epoxy_glGetDebugMessageLogAMD = epoxy_glGetDebugMessageLogAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGARBPROC epoxy_glGetDebugMessageLogARB = epoxy_glGetDebugMessageLogARB_global_rewrite_ptr; + +PUBLIC PFNGLGETDEBUGMESSAGELOGKHRPROC epoxy_glGetDebugMessageLogKHR = epoxy_glGetDebugMessageLogKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETDETAILTEXFUNCSGISPROC epoxy_glGetDetailTexFuncSGIS = epoxy_glGetDetailTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEINDEXEDVEXTPROC epoxy_glGetDoubleIndexedvEXT = epoxy_glGetDoubleIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEI_VPROC epoxy_glGetDoublei_v = epoxy_glGetDoublei_v_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEI_VEXTPROC epoxy_glGetDoublei_vEXT = epoxy_glGetDoublei_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETDOUBLEVPROC epoxy_glGetDoublev = epoxy_glGetDoublev_global_rewrite_ptr; + +PUBLIC PFNGLGETDRIVERCONTROLSTRINGQCOMPROC epoxy_glGetDriverControlStringQCOM = epoxy_glGetDriverControlStringQCOM_global_rewrite_ptr; + +PUBLIC PFNGLGETDRIVERCONTROLSQCOMPROC epoxy_glGetDriverControlsQCOM = epoxy_glGetDriverControlsQCOM_global_rewrite_ptr; + +PUBLIC PFNGLGETERRORPROC epoxy_glGetError = epoxy_glGetError_global_rewrite_ptr; + +PUBLIC PFNGLGETFENCEIVNVPROC epoxy_glGetFenceivNV = epoxy_glGetFenceivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC epoxy_glGetFinalCombinerInputParameterfvNV = epoxy_glGetFinalCombinerInputParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC epoxy_glGetFinalCombinerInputParameterivNV = epoxy_glGetFinalCombinerInputParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFIRSTPERFQUERYIDINTELPROC epoxy_glGetFirstPerfQueryIdINTEL = epoxy_glGetFirstPerfQueryIdINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETFIXEDVPROC epoxy_glGetFixedv = epoxy_glGetFixedv_global_rewrite_ptr; + +PUBLIC PFNGLGETFIXEDVOESPROC epoxy_glGetFixedvOES = epoxy_glGetFixedvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATINDEXEDVEXTPROC epoxy_glGetFloatIndexedvEXT = epoxy_glGetFloatIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATI_VPROC epoxy_glGetFloati_v = epoxy_glGetFloati_v_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATI_VEXTPROC epoxy_glGetFloati_vEXT = epoxy_glGetFloati_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATI_VNVPROC epoxy_glGetFloati_vNV = epoxy_glGetFloati_vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETFLOATVPROC epoxy_glGetFloatv = epoxy_glGetFloatv_global_rewrite_ptr; + +PUBLIC PFNGLGETFOGFUNCSGISPROC epoxy_glGetFogFuncSGIS = epoxy_glGetFogFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATAINDEXPROC epoxy_glGetFragDataIndex = epoxy_glGetFragDataIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATAINDEXEXTPROC epoxy_glGetFragDataIndexEXT = epoxy_glGetFragDataIndexEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATALOCATIONPROC epoxy_glGetFragDataLocation = epoxy_glGetFragDataLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGDATALOCATIONEXTPROC epoxy_glGetFragDataLocationEXT = epoxy_glGetFragDataLocationEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTLIGHTFVSGIXPROC epoxy_glGetFragmentLightfvSGIX = epoxy_glGetFragmentLightfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTLIGHTIVSGIXPROC epoxy_glGetFragmentLightivSGIX = epoxy_glGetFragmentLightivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTMATERIALFVSGIXPROC epoxy_glGetFragmentMaterialfvSGIX = epoxy_glGetFragmentMaterialfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAGMENTMATERIALIVSGIXPROC epoxy_glGetFragmentMaterialivSGIX = epoxy_glGetFragmentMaterialivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetFramebufferAttachmentParameteriv = epoxy_glGetFramebufferAttachmentParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetFramebufferAttachmentParameterivEXT = epoxy_glGetFramebufferAttachmentParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVOESPROC epoxy_glGetFramebufferAttachmentParameterivOES = epoxy_glGetFramebufferAttachmentParameterivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERPARAMETERIVPROC epoxy_glGetFramebufferParameteriv = epoxy_glGetFramebufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetFramebufferParameterivEXT = epoxy_glGetFramebufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSPROC epoxy_glGetGraphicsResetStatus = epoxy_glGetGraphicsResetStatus_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSARBPROC epoxy_glGetGraphicsResetStatusARB = epoxy_glGetGraphicsResetStatusARB_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSEXTPROC epoxy_glGetGraphicsResetStatusEXT = epoxy_glGetGraphicsResetStatusEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETGRAPHICSRESETSTATUSKHRPROC epoxy_glGetGraphicsResetStatusKHR = epoxy_glGetGraphicsResetStatusKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETHANDLEARBPROC epoxy_glGetHandleARB = epoxy_glGetHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPROC epoxy_glGetHistogram = epoxy_glGetHistogram_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMEXTPROC epoxy_glGetHistogramEXT = epoxy_glGetHistogramEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERFVPROC epoxy_glGetHistogramParameterfv = epoxy_glGetHistogramParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERFVEXTPROC epoxy_glGetHistogramParameterfvEXT = epoxy_glGetHistogramParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERIVPROC epoxy_glGetHistogramParameteriv = epoxy_glGetHistogramParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERIVEXTPROC epoxy_glGetHistogramParameterivEXT = epoxy_glGetHistogramParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETHISTOGRAMPARAMETERXVOESPROC epoxy_glGetHistogramParameterxvOES = epoxy_glGetHistogramParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGEHANDLEARBPROC epoxy_glGetImageHandleARB = epoxy_glGetImageHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGEHANDLENVPROC epoxy_glGetImageHandleNV = epoxy_glGetImageHandleNV_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glGetImageTransformParameterfvHP = epoxy_glGetImageTransformParameterfvHP_global_rewrite_ptr; + +PUBLIC PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glGetImageTransformParameterivHP = epoxy_glGetImageTransformParameterivHP_global_rewrite_ptr; + +PUBLIC PFNGLGETINFOLOGARBPROC epoxy_glGetInfoLogARB = epoxy_glGetInfoLogARB_global_rewrite_ptr; + +PUBLIC PFNGLGETINSTRUMENTSSGIXPROC epoxy_glGetInstrumentsSGIX = epoxy_glGetInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGER64I_VPROC epoxy_glGetInteger64i_v = epoxy_glGetInteger64i_v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGER64VPROC epoxy_glGetInteger64v = epoxy_glGetInteger64v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGER64VAPPLEPROC epoxy_glGetInteger64vAPPLE = epoxy_glGetInteger64vAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERINDEXEDVEXTPROC epoxy_glGetIntegerIndexedvEXT = epoxy_glGetIntegerIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERI_VPROC epoxy_glGetIntegeri_v = epoxy_glGetIntegeri_v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERI_VEXTPROC epoxy_glGetIntegeri_vEXT = epoxy_glGetIntegeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERUI64I_VNVPROC epoxy_glGetIntegerui64i_vNV = epoxy_glGetIntegerui64i_vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERUI64VNVPROC epoxy_glGetIntegerui64vNV = epoxy_glGetIntegerui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETINTEGERVPROC epoxy_glGetIntegerv = epoxy_glGetIntegerv_global_rewrite_ptr; + +PUBLIC PFNGLGETINTERNALFORMATSAMPLEIVNVPROC epoxy_glGetInternalformatSampleivNV = epoxy_glGetInternalformatSampleivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETINTERNALFORMATI64VPROC epoxy_glGetInternalformati64v = epoxy_glGetInternalformati64v_global_rewrite_ptr; + +PUBLIC PFNGLGETINTERNALFORMATIVPROC epoxy_glGetInternalformativ = epoxy_glGetInternalformativ_global_rewrite_ptr; + +PUBLIC PFNGLGETINVARIANTBOOLEANVEXTPROC epoxy_glGetInvariantBooleanvEXT = epoxy_glGetInvariantBooleanvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINVARIANTFLOATVEXTPROC epoxy_glGetInvariantFloatvEXT = epoxy_glGetInvariantFloatvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETINVARIANTINTEGERVEXTPROC epoxy_glGetInvariantIntegervEXT = epoxy_glGetInvariantIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTFVPROC epoxy_glGetLightfv = epoxy_glGetLightfv_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTIVPROC epoxy_glGetLightiv = epoxy_glGetLightiv_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTXOESPROC epoxy_glGetLightxOES = epoxy_glGetLightxOES_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTXVPROC epoxy_glGetLightxv = epoxy_glGetLightxv_global_rewrite_ptr; + +PUBLIC PFNGLGETLIGHTXVOESPROC epoxy_glGetLightxvOES = epoxy_glGetLightxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETLISTPARAMETERFVSGIXPROC epoxy_glGetListParameterfvSGIX = epoxy_glGetListParameterfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETLISTPARAMETERIVSGIXPROC epoxy_glGetListParameterivSGIX = epoxy_glGetListParameterivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC epoxy_glGetLocalConstantBooleanvEXT = epoxy_glGetLocalConstantBooleanvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETLOCALCONSTANTFLOATVEXTPROC epoxy_glGetLocalConstantFloatvEXT = epoxy_glGetLocalConstantFloatvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETLOCALCONSTANTINTEGERVEXTPROC epoxy_glGetLocalConstantIntegervEXT = epoxy_glGetLocalConstantIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPATTRIBPARAMETERFVNVPROC epoxy_glGetMapAttribParameterfvNV = epoxy_glGetMapAttribParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPATTRIBPARAMETERIVNVPROC epoxy_glGetMapAttribParameterivNV = epoxy_glGetMapAttribParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPCONTROLPOINTSNVPROC epoxy_glGetMapControlPointsNV = epoxy_glGetMapControlPointsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPPARAMETERFVNVPROC epoxy_glGetMapParameterfvNV = epoxy_glGetMapParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPPARAMETERIVNVPROC epoxy_glGetMapParameterivNV = epoxy_glGetMapParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPDVPROC epoxy_glGetMapdv = epoxy_glGetMapdv_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPFVPROC epoxy_glGetMapfv = epoxy_glGetMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPIVPROC epoxy_glGetMapiv = epoxy_glGetMapiv_global_rewrite_ptr; + +PUBLIC PFNGLGETMAPXVOESPROC epoxy_glGetMapxvOES = epoxy_glGetMapxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALFVPROC epoxy_glGetMaterialfv = epoxy_glGetMaterialfv_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALIVPROC epoxy_glGetMaterialiv = epoxy_glGetMaterialiv_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALXOESPROC epoxy_glGetMaterialxOES = epoxy_glGetMaterialxOES_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALXVPROC epoxy_glGetMaterialxv = epoxy_glGetMaterialxv_global_rewrite_ptr; + +PUBLIC PFNGLGETMATERIALXVOESPROC epoxy_glGetMaterialxvOES = epoxy_glGetMaterialxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPROC epoxy_glGetMinmax = epoxy_glGetMinmax_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXEXTPROC epoxy_glGetMinmaxEXT = epoxy_glGetMinmaxEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERFVPROC epoxy_glGetMinmaxParameterfv = epoxy_glGetMinmaxParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERFVEXTPROC epoxy_glGetMinmaxParameterfvEXT = epoxy_glGetMinmaxParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERIVPROC epoxy_glGetMinmaxParameteriv = epoxy_glGetMinmaxParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETMINMAXPARAMETERIVEXTPROC epoxy_glGetMinmaxParameterivEXT = epoxy_glGetMinmaxParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXENVFVEXTPROC epoxy_glGetMultiTexEnvfvEXT = epoxy_glGetMultiTexEnvfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXENVIVEXTPROC epoxy_glGetMultiTexEnvivEXT = epoxy_glGetMultiTexEnvivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXGENDVEXTPROC epoxy_glGetMultiTexGendvEXT = epoxy_glGetMultiTexGendvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXGENFVEXTPROC epoxy_glGetMultiTexGenfvEXT = epoxy_glGetMultiTexGenfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXGENIVEXTPROC epoxy_glGetMultiTexGenivEXT = epoxy_glGetMultiTexGenivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXIMAGEEXTPROC epoxy_glGetMultiTexImageEXT = epoxy_glGetMultiTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC epoxy_glGetMultiTexLevelParameterfvEXT = epoxy_glGetMultiTexLevelParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC epoxy_glGetMultiTexLevelParameterivEXT = epoxy_glGetMultiTexLevelParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERIIVEXTPROC epoxy_glGetMultiTexParameterIivEXT = epoxy_glGetMultiTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERIUIVEXTPROC epoxy_glGetMultiTexParameterIuivEXT = epoxy_glGetMultiTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERFVEXTPROC epoxy_glGetMultiTexParameterfvEXT = epoxy_glGetMultiTexParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTITEXPARAMETERIVEXTPROC epoxy_glGetMultiTexParameterivEXT = epoxy_glGetMultiTexParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTISAMPLEFVPROC epoxy_glGetMultisamplefv = epoxy_glGetMultisamplefv_global_rewrite_ptr; + +PUBLIC PFNGLGETMULTISAMPLEFVNVPROC epoxy_glGetMultisamplefvNV = epoxy_glGetMultisamplefvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERI64VPROC epoxy_glGetNamedBufferParameteri64v = epoxy_glGetNamedBufferParameteri64v_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERIVPROC epoxy_glGetNamedBufferParameteriv = epoxy_glGetNamedBufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedBufferParameterivEXT = epoxy_glGetNamedBufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC epoxy_glGetNamedBufferParameterui64vNV = epoxy_glGetNamedBufferParameterui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPOINTERVPROC epoxy_glGetNamedBufferPointerv = epoxy_glGetNamedBufferPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERPOINTERVEXTPROC epoxy_glGetNamedBufferPointervEXT = epoxy_glGetNamedBufferPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERSUBDATAPROC epoxy_glGetNamedBufferSubData = epoxy_glGetNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDBUFFERSUBDATAEXTPROC epoxy_glGetNamedBufferSubDataEXT = epoxy_glGetNamedBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC epoxy_glGetNamedFramebufferAttachmentParameteriv = epoxy_glGetNamedFramebufferAttachmentParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferAttachmentParameterivEXT = epoxy_glGetNamedFramebufferAttachmentParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC epoxy_glGetNamedFramebufferParameteriv = epoxy_glGetNamedFramebufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedFramebufferParameterivEXT = epoxy_glGetNamedFramebufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC epoxy_glGetNamedProgramLocalParameterIivEXT = epoxy_glGetNamedProgramLocalParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC epoxy_glGetNamedProgramLocalParameterIuivEXT = epoxy_glGetNamedProgramLocalParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC epoxy_glGetNamedProgramLocalParameterdvEXT = epoxy_glGetNamedProgramLocalParameterdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC epoxy_glGetNamedProgramLocalParameterfvEXT = epoxy_glGetNamedProgramLocalParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMSTRINGEXTPROC epoxy_glGetNamedProgramStringEXT = epoxy_glGetNamedProgramStringEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDPROGRAMIVEXTPROC epoxy_glGetNamedProgramivEXT = epoxy_glGetNamedProgramivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC epoxy_glGetNamedRenderbufferParameteriv = epoxy_glGetNamedRenderbufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetNamedRenderbufferParameterivEXT = epoxy_glGetNamedRenderbufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDSTRINGARBPROC epoxy_glGetNamedStringARB = epoxy_glGetNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNAMEDSTRINGIVARBPROC epoxy_glGetNamedStringivARB = epoxy_glGetNamedStringivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNEXTPERFQUERYIDINTELPROC epoxy_glGetNextPerfQueryIdINTEL = epoxy_glGetNextPerfQueryIdINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTBUFFERFVATIPROC epoxy_glGetObjectBufferfvATI = epoxy_glGetObjectBufferfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTBUFFERIVATIPROC epoxy_glGetObjectBufferivATI = epoxy_glGetObjectBufferivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTLABELPROC epoxy_glGetObjectLabel = epoxy_glGetObjectLabel_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTLABELEXTPROC epoxy_glGetObjectLabelEXT = epoxy_glGetObjectLabelEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTLABELKHRPROC epoxy_glGetObjectLabelKHR = epoxy_glGetObjectLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPARAMETERFVARBPROC epoxy_glGetObjectParameterfvARB = epoxy_glGetObjectParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPARAMETERIVAPPLEPROC epoxy_glGetObjectParameterivAPPLE = epoxy_glGetObjectParameterivAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPARAMETERIVARBPROC epoxy_glGetObjectParameterivARB = epoxy_glGetObjectParameterivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPTRLABELPROC epoxy_glGetObjectPtrLabel = epoxy_glGetObjectPtrLabel_global_rewrite_ptr; + +PUBLIC PFNGLGETOBJECTPTRLABELKHRPROC epoxy_glGetObjectPtrLabelKHR = epoxy_glGetObjectPtrLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETOCCLUSIONQUERYIVNVPROC epoxy_glGetOcclusionQueryivNV = epoxy_glGetOcclusionQueryivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETOCCLUSIONQUERYUIVNVPROC epoxy_glGetOcclusionQueryuivNV = epoxy_glGetOcclusionQueryuivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOLORGENFVNVPROC epoxy_glGetPathColorGenfvNV = epoxy_glGetPathColorGenfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOLORGENIVNVPROC epoxy_glGetPathColorGenivNV = epoxy_glGetPathColorGenivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOMMANDSNVPROC epoxy_glGetPathCommandsNV = epoxy_glGetPathCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHCOORDSNVPROC epoxy_glGetPathCoordsNV = epoxy_glGetPathCoordsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHDASHARRAYNVPROC epoxy_glGetPathDashArrayNV = epoxy_glGetPathDashArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHLENGTHNVPROC epoxy_glGetPathLengthNV = epoxy_glGetPathLengthNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHMETRICRANGENVPROC epoxy_glGetPathMetricRangeNV = epoxy_glGetPathMetricRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHMETRICSNVPROC epoxy_glGetPathMetricsNV = epoxy_glGetPathMetricsNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHPARAMETERFVNVPROC epoxy_glGetPathParameterfvNV = epoxy_glGetPathParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHPARAMETERIVNVPROC epoxy_glGetPathParameterivNV = epoxy_glGetPathParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHSPACINGNVPROC epoxy_glGetPathSpacingNV = epoxy_glGetPathSpacingNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHTEXGENFVNVPROC epoxy_glGetPathTexGenfvNV = epoxy_glGetPathTexGenfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPATHTEXGENIVNVPROC epoxy_glGetPathTexGenivNV = epoxy_glGetPathTexGenivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFCOUNTERINFOINTELPROC epoxy_glGetPerfCounterInfoINTEL = epoxy_glGetPerfCounterInfoINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERDATAAMDPROC epoxy_glGetPerfMonitorCounterDataAMD = epoxy_glGetPerfMonitorCounterDataAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERINFOAMDPROC epoxy_glGetPerfMonitorCounterInfoAMD = epoxy_glGetPerfMonitorCounterInfoAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC epoxy_glGetPerfMonitorCounterStringAMD = epoxy_glGetPerfMonitorCounterStringAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORCOUNTERSAMDPROC epoxy_glGetPerfMonitorCountersAMD = epoxy_glGetPerfMonitorCountersAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORGROUPSTRINGAMDPROC epoxy_glGetPerfMonitorGroupStringAMD = epoxy_glGetPerfMonitorGroupStringAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFMONITORGROUPSAMDPROC epoxy_glGetPerfMonitorGroupsAMD = epoxy_glGetPerfMonitorGroupsAMD_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFQUERYDATAINTELPROC epoxy_glGetPerfQueryDataINTEL = epoxy_glGetPerfQueryDataINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFQUERYIDBYNAMEINTELPROC epoxy_glGetPerfQueryIdByNameINTEL = epoxy_glGetPerfQueryIdByNameINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPERFQUERYINFOINTELPROC epoxy_glGetPerfQueryInfoINTEL = epoxy_glGetPerfQueryInfoINTEL_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPFVPROC epoxy_glGetPixelMapfv = epoxy_glGetPixelMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPUIVPROC epoxy_glGetPixelMapuiv = epoxy_glGetPixelMapuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPUSVPROC epoxy_glGetPixelMapusv = epoxy_glGetPixelMapusv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELMAPXVPROC epoxy_glGetPixelMapxv = epoxy_glGetPixelMapxv_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC epoxy_glGetPixelTexGenParameterfvSGIS = epoxy_glGetPixelTexGenParameterfvSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC epoxy_glGetPixelTexGenParameterivSGIS = epoxy_glGetPixelTexGenParameterivSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glGetPixelTransformParameterfvEXT = epoxy_glGetPixelTransformParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glGetPixelTransformParameterivEXT = epoxy_glGetPixelTransformParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERINDEXEDVEXTPROC epoxy_glGetPointerIndexedvEXT = epoxy_glGetPointerIndexedvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERI_VEXTPROC epoxy_glGetPointeri_vEXT = epoxy_glGetPointeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERVPROC epoxy_glGetPointerv = epoxy_glGetPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERVEXTPROC epoxy_glGetPointervEXT = epoxy_glGetPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPOINTERVKHRPROC epoxy_glGetPointervKHR = epoxy_glGetPointervKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETPOLYGONSTIPPLEPROC epoxy_glGetPolygonStipple = epoxy_glGetPolygonStipple_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMBINARYPROC epoxy_glGetProgramBinary = epoxy_glGetProgramBinary_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMBINARYOESPROC epoxy_glGetProgramBinaryOES = epoxy_glGetProgramBinaryOES_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERIIVNVPROC epoxy_glGetProgramEnvParameterIivNV = epoxy_glGetProgramEnvParameterIivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC epoxy_glGetProgramEnvParameterIuivNV = epoxy_glGetProgramEnvParameterIuivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERDVARBPROC epoxy_glGetProgramEnvParameterdvARB = epoxy_glGetProgramEnvParameterdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMENVPARAMETERFVARBPROC epoxy_glGetProgramEnvParameterfvARB = epoxy_glGetProgramEnvParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMINFOLOGPROC epoxy_glGetProgramInfoLog = epoxy_glGetProgramInfoLog_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMINTERFACEIVPROC epoxy_glGetProgramInterfaceiv = epoxy_glGetProgramInterfaceiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC epoxy_glGetProgramLocalParameterIivNV = epoxy_glGetProgramLocalParameterIivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC epoxy_glGetProgramLocalParameterIuivNV = epoxy_glGetProgramLocalParameterIuivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC epoxy_glGetProgramLocalParameterdvARB = epoxy_glGetProgramLocalParameterdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC epoxy_glGetProgramLocalParameterfvARB = epoxy_glGetProgramLocalParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC epoxy_glGetProgramNamedParameterdvNV = epoxy_glGetProgramNamedParameterdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC epoxy_glGetProgramNamedParameterfvNV = epoxy_glGetProgramNamedParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPARAMETERDVNVPROC epoxy_glGetProgramParameterdvNV = epoxy_glGetProgramParameterdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPARAMETERFVNVPROC epoxy_glGetProgramParameterfvNV = epoxy_glGetProgramParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEINFOLOGPROC epoxy_glGetProgramPipelineInfoLog = epoxy_glGetProgramPipelineInfoLog_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC epoxy_glGetProgramPipelineInfoLogEXT = epoxy_glGetProgramPipelineInfoLogEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEIVPROC epoxy_glGetProgramPipelineiv = epoxy_glGetProgramPipelineiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMPIPELINEIVEXTPROC epoxy_glGetProgramPipelineivEXT = epoxy_glGetProgramPipelineivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCEINDEXPROC epoxy_glGetProgramResourceIndex = epoxy_glGetProgramResourceIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCELOCATIONPROC epoxy_glGetProgramResourceLocation = epoxy_glGetProgramResourceLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC epoxy_glGetProgramResourceLocationIndex = epoxy_glGetProgramResourceLocationIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC epoxy_glGetProgramResourceLocationIndexEXT = epoxy_glGetProgramResourceLocationIndexEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCENAMEPROC epoxy_glGetProgramResourceName = epoxy_glGetProgramResourceName_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCEFVNVPROC epoxy_glGetProgramResourcefvNV = epoxy_glGetProgramResourcefvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMRESOURCEIVPROC epoxy_glGetProgramResourceiv = epoxy_glGetProgramResourceiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSTAGEIVPROC epoxy_glGetProgramStageiv = epoxy_glGetProgramStageiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSTRINGARBPROC epoxy_glGetProgramStringARB = epoxy_glGetProgramStringARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSTRINGNVPROC epoxy_glGetProgramStringNV = epoxy_glGetProgramStringNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC epoxy_glGetProgramSubroutineParameteruivNV = epoxy_glGetProgramSubroutineParameteruivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMIVPROC epoxy_glGetProgramiv = epoxy_glGetProgramiv_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMIVARBPROC epoxy_glGetProgramivARB = epoxy_glGetProgramivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETPROGRAMIVNVPROC epoxy_glGetProgramivNV = epoxy_glGetProgramivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTI64VPROC epoxy_glGetQueryBufferObjecti64v = epoxy_glGetQueryBufferObjecti64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTIVPROC epoxy_glGetQueryBufferObjectiv = epoxy_glGetQueryBufferObjectiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTUI64VPROC epoxy_glGetQueryBufferObjectui64v = epoxy_glGetQueryBufferObjectui64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYBUFFEROBJECTUIVPROC epoxy_glGetQueryBufferObjectuiv = epoxy_glGetQueryBufferObjectuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYINDEXEDIVPROC epoxy_glGetQueryIndexediv = epoxy_glGetQueryIndexediv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTI64VPROC epoxy_glGetQueryObjecti64v = epoxy_glGetQueryObjecti64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTI64VEXTPROC epoxy_glGetQueryObjecti64vEXT = epoxy_glGetQueryObjecti64vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTIVPROC epoxy_glGetQueryObjectiv = epoxy_glGetQueryObjectiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTIVARBPROC epoxy_glGetQueryObjectivARB = epoxy_glGetQueryObjectivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTIVEXTPROC epoxy_glGetQueryObjectivEXT = epoxy_glGetQueryObjectivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUI64VPROC epoxy_glGetQueryObjectui64v = epoxy_glGetQueryObjectui64v_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUI64VEXTPROC epoxy_glGetQueryObjectui64vEXT = epoxy_glGetQueryObjectui64vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUIVPROC epoxy_glGetQueryObjectuiv = epoxy_glGetQueryObjectuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUIVARBPROC epoxy_glGetQueryObjectuivARB = epoxy_glGetQueryObjectuivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYOBJECTUIVEXTPROC epoxy_glGetQueryObjectuivEXT = epoxy_glGetQueryObjectuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYIVPROC epoxy_glGetQueryiv = epoxy_glGetQueryiv_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYIVARBPROC epoxy_glGetQueryivARB = epoxy_glGetQueryivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETQUERYIVEXTPROC epoxy_glGetQueryivEXT = epoxy_glGetQueryivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETRENDERBUFFERPARAMETERIVPROC epoxy_glGetRenderbufferParameteriv = epoxy_glGetRenderbufferParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC epoxy_glGetRenderbufferParameterivEXT = epoxy_glGetRenderbufferParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETRENDERBUFFERPARAMETERIVOESPROC epoxy_glGetRenderbufferParameterivOES = epoxy_glGetRenderbufferParameterivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIIVPROC epoxy_glGetSamplerParameterIiv = epoxy_glGetSamplerParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIIVEXTPROC epoxy_glGetSamplerParameterIivEXT = epoxy_glGetSamplerParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIIVOESPROC epoxy_glGetSamplerParameterIivOES = epoxy_glGetSamplerParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIUIVPROC epoxy_glGetSamplerParameterIuiv = epoxy_glGetSamplerParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIUIVEXTPROC epoxy_glGetSamplerParameterIuivEXT = epoxy_glGetSamplerParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIUIVOESPROC epoxy_glGetSamplerParameterIuivOES = epoxy_glGetSamplerParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERFVPROC epoxy_glGetSamplerParameterfv = epoxy_glGetSamplerParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETSAMPLERPARAMETERIVPROC epoxy_glGetSamplerParameteriv = epoxy_glGetSamplerParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETSEPARABLEFILTERPROC epoxy_glGetSeparableFilter = epoxy_glGetSeparableFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETSEPARABLEFILTEREXTPROC epoxy_glGetSeparableFilterEXT = epoxy_glGetSeparableFilterEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERINFOLOGPROC epoxy_glGetShaderInfoLog = epoxy_glGetShaderInfoLog_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERPRECISIONFORMATPROC epoxy_glGetShaderPrecisionFormat = epoxy_glGetShaderPrecisionFormat_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERSOURCEPROC epoxy_glGetShaderSource = epoxy_glGetShaderSource_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERSOURCEARBPROC epoxy_glGetShaderSourceARB = epoxy_glGetShaderSourceARB_global_rewrite_ptr; + +PUBLIC PFNGLGETSHADERIVPROC epoxy_glGetShaderiv = epoxy_glGetShaderiv_global_rewrite_ptr; + +PUBLIC PFNGLGETSHARPENTEXFUNCSGISPROC epoxy_glGetSharpenTexFuncSGIS = epoxy_glGetSharpenTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETSTAGEINDEXNVPROC epoxy_glGetStageIndexNV = epoxy_glGetStageIndexNV_global_rewrite_ptr; + +PUBLIC PFNGLGETSTRINGPROC epoxy_glGetString = epoxy_glGetString_global_rewrite_ptr; + +PUBLIC PFNGLGETSTRINGIPROC epoxy_glGetStringi = epoxy_glGetStringi_global_rewrite_ptr; + +PUBLIC PFNGLGETSUBROUTINEINDEXPROC epoxy_glGetSubroutineIndex = epoxy_glGetSubroutineIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC epoxy_glGetSubroutineUniformLocation = epoxy_glGetSubroutineUniformLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETSYNCIVPROC epoxy_glGetSynciv = epoxy_glGetSynciv_global_rewrite_ptr; + +PUBLIC PFNGLGETSYNCIVAPPLEPROC epoxy_glGetSyncivAPPLE = epoxy_glGetSyncivAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXBUMPPARAMETERFVATIPROC epoxy_glGetTexBumpParameterfvATI = epoxy_glGetTexBumpParameterfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXBUMPPARAMETERIVATIPROC epoxy_glGetTexBumpParameterivATI = epoxy_glGetTexBumpParameterivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVFVPROC epoxy_glGetTexEnvfv = epoxy_glGetTexEnvfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVIVPROC epoxy_glGetTexEnviv = epoxy_glGetTexEnviv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVXVPROC epoxy_glGetTexEnvxv = epoxy_glGetTexEnvxv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXENVXVOESPROC epoxy_glGetTexEnvxvOES = epoxy_glGetTexEnvxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXFILTERFUNCSGISPROC epoxy_glGetTexFilterFuncSGIS = epoxy_glGetTexFilterFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENDVPROC epoxy_glGetTexGendv = epoxy_glGetTexGendv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENFVPROC epoxy_glGetTexGenfv = epoxy_glGetTexGenfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENFVOESPROC epoxy_glGetTexGenfvOES = epoxy_glGetTexGenfvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENIVPROC epoxy_glGetTexGeniv = epoxy_glGetTexGeniv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENIVOESPROC epoxy_glGetTexGenivOES = epoxy_glGetTexGenivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXGENXVOESPROC epoxy_glGetTexGenxvOES = epoxy_glGetTexGenxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXIMAGEPROC epoxy_glGetTexImage = epoxy_glGetTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXLEVELPARAMETERFVPROC epoxy_glGetTexLevelParameterfv = epoxy_glGetTexLevelParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXLEVELPARAMETERIVPROC epoxy_glGetTexLevelParameteriv = epoxy_glGetTexLevelParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXLEVELPARAMETERXVOESPROC epoxy_glGetTexLevelParameterxvOES = epoxy_glGetTexLevelParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIIVPROC epoxy_glGetTexParameterIiv = epoxy_glGetTexParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIIVEXTPROC epoxy_glGetTexParameterIivEXT = epoxy_glGetTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIIVOESPROC epoxy_glGetTexParameterIivOES = epoxy_glGetTexParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIUIVPROC epoxy_glGetTexParameterIuiv = epoxy_glGetTexParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIUIVEXTPROC epoxy_glGetTexParameterIuivEXT = epoxy_glGetTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIUIVOESPROC epoxy_glGetTexParameterIuivOES = epoxy_glGetTexParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC epoxy_glGetTexParameterPointervAPPLE = epoxy_glGetTexParameterPointervAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERFVPROC epoxy_glGetTexParameterfv = epoxy_glGetTexParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERIVPROC epoxy_glGetTexParameteriv = epoxy_glGetTexParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERXVPROC epoxy_glGetTexParameterxv = epoxy_glGetTexParameterxv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXPARAMETERXVOESPROC epoxy_glGetTexParameterxvOES = epoxy_glGetTexParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREHANDLEARBPROC epoxy_glGetTextureHandleARB = epoxy_glGetTextureHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREHANDLENVPROC epoxy_glGetTextureHandleNV = epoxy_glGetTextureHandleNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREIMAGEPROC epoxy_glGetTextureImage = epoxy_glGetTextureImage_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREIMAGEEXTPROC epoxy_glGetTextureImageEXT = epoxy_glGetTextureImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERFVPROC epoxy_glGetTextureLevelParameterfv = epoxy_glGetTextureLevelParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC epoxy_glGetTextureLevelParameterfvEXT = epoxy_glGetTextureLevelParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERIVPROC epoxy_glGetTextureLevelParameteriv = epoxy_glGetTextureLevelParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC epoxy_glGetTextureLevelParameterivEXT = epoxy_glGetTextureLevelParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIIVPROC epoxy_glGetTextureParameterIiv = epoxy_glGetTextureParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIIVEXTPROC epoxy_glGetTextureParameterIivEXT = epoxy_glGetTextureParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIUIVPROC epoxy_glGetTextureParameterIuiv = epoxy_glGetTextureParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIUIVEXTPROC epoxy_glGetTextureParameterIuivEXT = epoxy_glGetTextureParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERFVPROC epoxy_glGetTextureParameterfv = epoxy_glGetTextureParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERFVEXTPROC epoxy_glGetTextureParameterfvEXT = epoxy_glGetTextureParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIVPROC epoxy_glGetTextureParameteriv = epoxy_glGetTextureParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTUREPARAMETERIVEXTPROC epoxy_glGetTextureParameterivEXT = epoxy_glGetTextureParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURESAMPLERHANDLEARBPROC epoxy_glGetTextureSamplerHandleARB = epoxy_glGetTextureSamplerHandleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURESAMPLERHANDLENVPROC epoxy_glGetTextureSamplerHandleNV = epoxy_glGetTextureSamplerHandleNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTEXTURESUBIMAGEPROC epoxy_glGetTextureSubImage = epoxy_glGetTextureSubImage_global_rewrite_ptr; + +PUBLIC PFNGLGETTRACKMATRIXIVNVPROC epoxy_glGetTrackMatrixivNV = epoxy_glGetTrackMatrixivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKVARYINGPROC epoxy_glGetTransformFeedbackVarying = epoxy_glGetTransformFeedbackVarying_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC epoxy_glGetTransformFeedbackVaryingEXT = epoxy_glGetTransformFeedbackVaryingEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC epoxy_glGetTransformFeedbackVaryingNV = epoxy_glGetTransformFeedbackVaryingNV_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKI64_VPROC epoxy_glGetTransformFeedbacki64_v = epoxy_glGetTransformFeedbacki64_v_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKI_VPROC epoxy_glGetTransformFeedbacki_v = epoxy_glGetTransformFeedbacki_v_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSFORMFEEDBACKIVPROC epoxy_glGetTransformFeedbackiv = epoxy_glGetTransformFeedbackiv_global_rewrite_ptr; + +PUBLIC PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC epoxy_glGetTranslatedShaderSourceANGLE = epoxy_glGetTranslatedShaderSourceANGLE_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMBLOCKINDEXPROC epoxy_glGetUniformBlockIndex = epoxy_glGetUniformBlockIndex_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMBUFFERSIZEEXTPROC epoxy_glGetUniformBufferSizeEXT = epoxy_glGetUniformBufferSizeEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMINDICESPROC epoxy_glGetUniformIndices = epoxy_glGetUniformIndices_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMLOCATIONPROC epoxy_glGetUniformLocation = epoxy_glGetUniformLocation_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMLOCATIONARBPROC epoxy_glGetUniformLocationARB = epoxy_glGetUniformLocationARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMOFFSETEXTPROC epoxy_glGetUniformOffsetEXT = epoxy_glGetUniformOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMSUBROUTINEUIVPROC epoxy_glGetUniformSubroutineuiv = epoxy_glGetUniformSubroutineuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMDVPROC epoxy_glGetUniformdv = epoxy_glGetUniformdv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMFVPROC epoxy_glGetUniformfv = epoxy_glGetUniformfv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMFVARBPROC epoxy_glGetUniformfvARB = epoxy_glGetUniformfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMI64VARBPROC epoxy_glGetUniformi64vARB = epoxy_glGetUniformi64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMI64VNVPROC epoxy_glGetUniformi64vNV = epoxy_glGetUniformi64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMIVPROC epoxy_glGetUniformiv = epoxy_glGetUniformiv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMIVARBPROC epoxy_glGetUniformivARB = epoxy_glGetUniformivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUI64VARBPROC epoxy_glGetUniformui64vARB = epoxy_glGetUniformui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUI64VNVPROC epoxy_glGetUniformui64vNV = epoxy_glGetUniformui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUIVPROC epoxy_glGetUniformuiv = epoxy_glGetUniformuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETUNIFORMUIVEXTPROC epoxy_glGetUniformuivEXT = epoxy_glGetUniformuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTARRAYOBJECTFVATIPROC epoxy_glGetVariantArrayObjectfvATI = epoxy_glGetVariantArrayObjectfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTARRAYOBJECTIVATIPROC epoxy_glGetVariantArrayObjectivATI = epoxy_glGetVariantArrayObjectivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTBOOLEANVEXTPROC epoxy_glGetVariantBooleanvEXT = epoxy_glGetVariantBooleanvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTFLOATVEXTPROC epoxy_glGetVariantFloatvEXT = epoxy_glGetVariantFloatvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTINTEGERVEXTPROC epoxy_glGetVariantIntegervEXT = epoxy_glGetVariantIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARIANTPOINTERVEXTPROC epoxy_glGetVariantPointervEXT = epoxy_glGetVariantPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVARYINGLOCATIONNVPROC epoxy_glGetVaryingLocationNV = epoxy_glGetVaryingLocationNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINDEXED64IVPROC epoxy_glGetVertexArrayIndexed64iv = epoxy_glGetVertexArrayIndexed64iv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINDEXEDIVPROC epoxy_glGetVertexArrayIndexediv = epoxy_glGetVertexArrayIndexediv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC epoxy_glGetVertexArrayIntegeri_vEXT = epoxy_glGetVertexArrayIntegeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYINTEGERVEXTPROC epoxy_glGetVertexArrayIntegervEXT = epoxy_glGetVertexArrayIntegervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC epoxy_glGetVertexArrayPointeri_vEXT = epoxy_glGetVertexArrayPointeri_vEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYPOINTERVEXTPROC epoxy_glGetVertexArrayPointervEXT = epoxy_glGetVertexArrayPointervEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXARRAYIVPROC epoxy_glGetVertexArrayiv = epoxy_glGetVertexArrayiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC epoxy_glGetVertexAttribArrayObjectfvATI = epoxy_glGetVertexAttribArrayObjectfvATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC epoxy_glGetVertexAttribArrayObjectivATI = epoxy_glGetVertexAttribArrayObjectivATI_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIIVPROC epoxy_glGetVertexAttribIiv = epoxy_glGetVertexAttribIiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIIVEXTPROC epoxy_glGetVertexAttribIivEXT = epoxy_glGetVertexAttribIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIUIVPROC epoxy_glGetVertexAttribIuiv = epoxy_glGetVertexAttribIuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIUIVEXTPROC epoxy_glGetVertexAttribIuivEXT = epoxy_glGetVertexAttribIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLDVPROC epoxy_glGetVertexAttribLdv = epoxy_glGetVertexAttribLdv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLDVEXTPROC epoxy_glGetVertexAttribLdvEXT = epoxy_glGetVertexAttribLdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLI64VNVPROC epoxy_glGetVertexAttribLi64vNV = epoxy_glGetVertexAttribLi64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLUI64VARBPROC epoxy_glGetVertexAttribLui64vARB = epoxy_glGetVertexAttribLui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBLUI64VNVPROC epoxy_glGetVertexAttribLui64vNV = epoxy_glGetVertexAttribLui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBPOINTERVPROC epoxy_glGetVertexAttribPointerv = epoxy_glGetVertexAttribPointerv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBPOINTERVARBPROC epoxy_glGetVertexAttribPointervARB = epoxy_glGetVertexAttribPointervARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBPOINTERVNVPROC epoxy_glGetVertexAttribPointervNV = epoxy_glGetVertexAttribPointervNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBDVPROC epoxy_glGetVertexAttribdv = epoxy_glGetVertexAttribdv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBDVARBPROC epoxy_glGetVertexAttribdvARB = epoxy_glGetVertexAttribdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBDVNVPROC epoxy_glGetVertexAttribdvNV = epoxy_glGetVertexAttribdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBFVPROC epoxy_glGetVertexAttribfv = epoxy_glGetVertexAttribfv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBFVARBPROC epoxy_glGetVertexAttribfvARB = epoxy_glGetVertexAttribfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBFVNVPROC epoxy_glGetVertexAttribfvNV = epoxy_glGetVertexAttribfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIVPROC epoxy_glGetVertexAttribiv = epoxy_glGetVertexAttribiv_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIVARBPROC epoxy_glGetVertexAttribivARB = epoxy_glGetVertexAttribivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETVERTEXATTRIBIVNVPROC epoxy_glGetVertexAttribivNV = epoxy_glGetVertexAttribivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTURESTREAMDVNVPROC epoxy_glGetVideoCaptureStreamdvNV = epoxy_glGetVideoCaptureStreamdvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTURESTREAMFVNVPROC epoxy_glGetVideoCaptureStreamfvNV = epoxy_glGetVideoCaptureStreamfvNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTURESTREAMIVNVPROC epoxy_glGetVideoCaptureStreamivNV = epoxy_glGetVideoCaptureStreamivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOCAPTUREIVNVPROC epoxy_glGetVideoCaptureivNV = epoxy_glGetVideoCaptureivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOI64VNVPROC epoxy_glGetVideoi64vNV = epoxy_glGetVideoi64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOIVNVPROC epoxy_glGetVideoivNV = epoxy_glGetVideoivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOUI64VNVPROC epoxy_glGetVideoui64vNV = epoxy_glGetVideoui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLGETVIDEOUIVNVPROC epoxy_glGetVideouivNV = epoxy_glGetVideouivNV_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOLORTABLEPROC epoxy_glGetnColorTable = epoxy_glGetnColorTable_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOLORTABLEARBPROC epoxy_glGetnColorTableARB = epoxy_glGetnColorTableARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOMPRESSEDTEXIMAGEPROC epoxy_glGetnCompressedTexImage = epoxy_glGetnCompressedTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC epoxy_glGetnCompressedTexImageARB = epoxy_glGetnCompressedTexImageARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNCONVOLUTIONFILTERPROC epoxy_glGetnConvolutionFilter = epoxy_glGetnConvolutionFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETNCONVOLUTIONFILTERARBPROC epoxy_glGetnConvolutionFilterARB = epoxy_glGetnConvolutionFilterARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNHISTOGRAMPROC epoxy_glGetnHistogram = epoxy_glGetnHistogram_global_rewrite_ptr; + +PUBLIC PFNGLGETNHISTOGRAMARBPROC epoxy_glGetnHistogramARB = epoxy_glGetnHistogramARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPDVPROC epoxy_glGetnMapdv = epoxy_glGetnMapdv_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPDVARBPROC epoxy_glGetnMapdvARB = epoxy_glGetnMapdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPFVPROC epoxy_glGetnMapfv = epoxy_glGetnMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPFVARBPROC epoxy_glGetnMapfvARB = epoxy_glGetnMapfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPIVPROC epoxy_glGetnMapiv = epoxy_glGetnMapiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNMAPIVARBPROC epoxy_glGetnMapivARB = epoxy_glGetnMapivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNMINMAXPROC epoxy_glGetnMinmax = epoxy_glGetnMinmax_global_rewrite_ptr; + +PUBLIC PFNGLGETNMINMAXARBPROC epoxy_glGetnMinmaxARB = epoxy_glGetnMinmaxARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPFVPROC epoxy_glGetnPixelMapfv = epoxy_glGetnPixelMapfv_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPFVARBPROC epoxy_glGetnPixelMapfvARB = epoxy_glGetnPixelMapfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUIVPROC epoxy_glGetnPixelMapuiv = epoxy_glGetnPixelMapuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUIVARBPROC epoxy_glGetnPixelMapuivARB = epoxy_glGetnPixelMapuivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUSVPROC epoxy_glGetnPixelMapusv = epoxy_glGetnPixelMapusv_global_rewrite_ptr; + +PUBLIC PFNGLGETNPIXELMAPUSVARBPROC epoxy_glGetnPixelMapusvARB = epoxy_glGetnPixelMapusvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNPOLYGONSTIPPLEPROC epoxy_glGetnPolygonStipple = epoxy_glGetnPolygonStipple_global_rewrite_ptr; + +PUBLIC PFNGLGETNPOLYGONSTIPPLEARBPROC epoxy_glGetnPolygonStippleARB = epoxy_glGetnPolygonStippleARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNSEPARABLEFILTERPROC epoxy_glGetnSeparableFilter = epoxy_glGetnSeparableFilter_global_rewrite_ptr; + +PUBLIC PFNGLGETNSEPARABLEFILTERARBPROC epoxy_glGetnSeparableFilterARB = epoxy_glGetnSeparableFilterARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNTEXIMAGEPROC epoxy_glGetnTexImage = epoxy_glGetnTexImage_global_rewrite_ptr; + +PUBLIC PFNGLGETNTEXIMAGEARBPROC epoxy_glGetnTexImageARB = epoxy_glGetnTexImageARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMDVPROC epoxy_glGetnUniformdv = epoxy_glGetnUniformdv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMDVARBPROC epoxy_glGetnUniformdvARB = epoxy_glGetnUniformdvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVPROC epoxy_glGetnUniformfv = epoxy_glGetnUniformfv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVARBPROC epoxy_glGetnUniformfvARB = epoxy_glGetnUniformfvARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVEXTPROC epoxy_glGetnUniformfvEXT = epoxy_glGetnUniformfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMFVKHRPROC epoxy_glGetnUniformfvKHR = epoxy_glGetnUniformfvKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMI64VARBPROC epoxy_glGetnUniformi64vARB = epoxy_glGetnUniformi64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVPROC epoxy_glGetnUniformiv = epoxy_glGetnUniformiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVARBPROC epoxy_glGetnUniformivARB = epoxy_glGetnUniformivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVEXTPROC epoxy_glGetnUniformivEXT = epoxy_glGetnUniformivEXT_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMIVKHRPROC epoxy_glGetnUniformivKHR = epoxy_glGetnUniformivKHR_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUI64VARBPROC epoxy_glGetnUniformui64vARB = epoxy_glGetnUniformui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUIVPROC epoxy_glGetnUniformuiv = epoxy_glGetnUniformuiv_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUIVARBPROC epoxy_glGetnUniformuivARB = epoxy_glGetnUniformuivARB_global_rewrite_ptr; + +PUBLIC PFNGLGETNUNIFORMUIVKHRPROC epoxy_glGetnUniformuivKHR = epoxy_glGetnUniformuivKHR_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORBSUNPROC epoxy_glGlobalAlphaFactorbSUN = epoxy_glGlobalAlphaFactorbSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORDSUNPROC epoxy_glGlobalAlphaFactordSUN = epoxy_glGlobalAlphaFactordSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORFSUNPROC epoxy_glGlobalAlphaFactorfSUN = epoxy_glGlobalAlphaFactorfSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORISUNPROC epoxy_glGlobalAlphaFactoriSUN = epoxy_glGlobalAlphaFactoriSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORSSUNPROC epoxy_glGlobalAlphaFactorsSUN = epoxy_glGlobalAlphaFactorsSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORUBSUNPROC epoxy_glGlobalAlphaFactorubSUN = epoxy_glGlobalAlphaFactorubSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORUISUNPROC epoxy_glGlobalAlphaFactoruiSUN = epoxy_glGlobalAlphaFactoruiSUN_global_rewrite_ptr; + +PUBLIC PFNGLGLOBALALPHAFACTORUSSUNPROC epoxy_glGlobalAlphaFactorusSUN = epoxy_glGlobalAlphaFactorusSUN_global_rewrite_ptr; + +PUBLIC PFNGLHINTPROC epoxy_glHint = epoxy_glHint_global_rewrite_ptr; + +PUBLIC PFNGLHINTPGIPROC epoxy_glHintPGI = epoxy_glHintPGI_global_rewrite_ptr; + +PUBLIC PFNGLHISTOGRAMPROC epoxy_glHistogram = epoxy_glHistogram_global_rewrite_ptr; + +PUBLIC PFNGLHISTOGRAMEXTPROC epoxy_glHistogramEXT = epoxy_glHistogramEXT_global_rewrite_ptr; + +PUBLIC PFNGLIGLOOINTERFACESGIXPROC epoxy_glIglooInterfaceSGIX = epoxy_glIglooInterfaceSGIX_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERFHPPROC epoxy_glImageTransformParameterfHP = epoxy_glImageTransformParameterfHP_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERFVHPPROC epoxy_glImageTransformParameterfvHP = epoxy_glImageTransformParameterfvHP_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERIHPPROC epoxy_glImageTransformParameteriHP = epoxy_glImageTransformParameteriHP_global_rewrite_ptr; + +PUBLIC PFNGLIMAGETRANSFORMPARAMETERIVHPPROC epoxy_glImageTransformParameterivHP = epoxy_glImageTransformParameterivHP_global_rewrite_ptr; + +PUBLIC PFNGLIMPORTSYNCEXTPROC epoxy_glImportSyncEXT = epoxy_glImportSyncEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFORMATNVPROC epoxy_glIndexFormatNV = epoxy_glIndexFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFUNCEXTPROC epoxy_glIndexFuncEXT = epoxy_glIndexFuncEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXMASKPROC epoxy_glIndexMask = epoxy_glIndexMask_global_rewrite_ptr; + +PUBLIC PFNGLINDEXMATERIALEXTPROC epoxy_glIndexMaterialEXT = epoxy_glIndexMaterialEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXPOINTERPROC epoxy_glIndexPointer = epoxy_glIndexPointer_global_rewrite_ptr; + +PUBLIC PFNGLINDEXPOINTEREXTPROC epoxy_glIndexPointerEXT = epoxy_glIndexPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLINDEXPOINTERLISTIBMPROC epoxy_glIndexPointerListIBM = epoxy_glIndexPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLINDEXDPROC epoxy_glIndexd = epoxy_glIndexd_global_rewrite_ptr; + +PUBLIC PFNGLINDEXDVPROC epoxy_glIndexdv = epoxy_glIndexdv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFPROC epoxy_glIndexf = epoxy_glIndexf_global_rewrite_ptr; + +PUBLIC PFNGLINDEXFVPROC epoxy_glIndexfv = epoxy_glIndexfv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXIPROC epoxy_glIndexi = epoxy_glIndexi_global_rewrite_ptr; + +PUBLIC PFNGLINDEXIVPROC epoxy_glIndexiv = epoxy_glIndexiv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXSPROC epoxy_glIndexs = epoxy_glIndexs_global_rewrite_ptr; + +PUBLIC PFNGLINDEXSVPROC epoxy_glIndexsv = epoxy_glIndexsv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXUBPROC epoxy_glIndexub = epoxy_glIndexub_global_rewrite_ptr; + +PUBLIC PFNGLINDEXUBVPROC epoxy_glIndexubv = epoxy_glIndexubv_global_rewrite_ptr; + +PUBLIC PFNGLINDEXXOESPROC epoxy_glIndexxOES = epoxy_glIndexxOES_global_rewrite_ptr; + +PUBLIC PFNGLINDEXXVOESPROC epoxy_glIndexxvOES = epoxy_glIndexxvOES_global_rewrite_ptr; + +PUBLIC PFNGLINITNAMESPROC epoxy_glInitNames = epoxy_glInitNames_global_rewrite_ptr; + +PUBLIC PFNGLINSERTCOMPONENTEXTPROC epoxy_glInsertComponentEXT = epoxy_glInsertComponentEXT_global_rewrite_ptr; + +PUBLIC PFNGLINSERTEVENTMARKEREXTPROC epoxy_glInsertEventMarkerEXT = epoxy_glInsertEventMarkerEXT_global_rewrite_ptr; + +PUBLIC PFNGLINSTRUMENTSBUFFERSGIXPROC epoxy_glInstrumentsBufferSGIX = epoxy_glInstrumentsBufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLINTERLEAVEDARRAYSPROC epoxy_glInterleavedArrays = epoxy_glInterleavedArrays_global_rewrite_ptr; + +PUBLIC PFNGLINTERPOLATEPATHSNVPROC epoxy_glInterpolatePathsNV = epoxy_glInterpolatePathsNV_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATEBUFFERDATAPROC epoxy_glInvalidateBufferData = epoxy_glInvalidateBufferData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATEBUFFERSUBDATAPROC epoxy_glInvalidateBufferSubData = epoxy_glInvalidateBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATEFRAMEBUFFERPROC epoxy_glInvalidateFramebuffer = epoxy_glInvalidateFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC epoxy_glInvalidateNamedFramebufferData = epoxy_glInvalidateNamedFramebufferData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC epoxy_glInvalidateNamedFramebufferSubData = epoxy_glInvalidateNamedFramebufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATESUBFRAMEBUFFERPROC epoxy_glInvalidateSubFramebuffer = epoxy_glInvalidateSubFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATETEXIMAGEPROC epoxy_glInvalidateTexImage = epoxy_glInvalidateTexImage_global_rewrite_ptr; + +PUBLIC PFNGLINVALIDATETEXSUBIMAGEPROC epoxy_glInvalidateTexSubImage = epoxy_glInvalidateTexSubImage_global_rewrite_ptr; + +PUBLIC PFNGLISASYNCMARKERSGIXPROC epoxy_glIsAsyncMarkerSGIX = epoxy_glIsAsyncMarkerSGIX_global_rewrite_ptr; + +PUBLIC PFNGLISBUFFERPROC epoxy_glIsBuffer = epoxy_glIsBuffer_global_rewrite_ptr; + +PUBLIC PFNGLISBUFFERARBPROC epoxy_glIsBufferARB = epoxy_glIsBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLISBUFFERRESIDENTNVPROC epoxy_glIsBufferResidentNV = epoxy_glIsBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISCOMMANDLISTNVPROC epoxy_glIsCommandListNV = epoxy_glIsCommandListNV_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDPROC epoxy_glIsEnabled = epoxy_glIsEnabled_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDINDEXEDEXTPROC epoxy_glIsEnabledIndexedEXT = epoxy_glIsEnabledIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDIPROC epoxy_glIsEnabledi = epoxy_glIsEnabledi_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDIEXTPROC epoxy_glIsEnablediEXT = epoxy_glIsEnablediEXT_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDINVPROC epoxy_glIsEnablediNV = epoxy_glIsEnablediNV_global_rewrite_ptr; + +PUBLIC PFNGLISENABLEDIOESPROC epoxy_glIsEnablediOES = epoxy_glIsEnablediOES_global_rewrite_ptr; + +PUBLIC PFNGLISFENCEAPPLEPROC epoxy_glIsFenceAPPLE = epoxy_glIsFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLISFENCENVPROC epoxy_glIsFenceNV = epoxy_glIsFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLISFRAMEBUFFERPROC epoxy_glIsFramebuffer = epoxy_glIsFramebuffer_global_rewrite_ptr; + +PUBLIC PFNGLISFRAMEBUFFEREXTPROC epoxy_glIsFramebufferEXT = epoxy_glIsFramebufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLISFRAMEBUFFEROESPROC epoxy_glIsFramebufferOES = epoxy_glIsFramebufferOES_global_rewrite_ptr; + +PUBLIC PFNGLISIMAGEHANDLERESIDENTARBPROC epoxy_glIsImageHandleResidentARB = epoxy_glIsImageHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLISIMAGEHANDLERESIDENTNVPROC epoxy_glIsImageHandleResidentNV = epoxy_glIsImageHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISLISTPROC epoxy_glIsList = epoxy_glIsList_global_rewrite_ptr; + +PUBLIC PFNGLISNAMEAMDPROC epoxy_glIsNameAMD = epoxy_glIsNameAMD_global_rewrite_ptr; + +PUBLIC PFNGLISNAMEDBUFFERRESIDENTNVPROC epoxy_glIsNamedBufferResidentNV = epoxy_glIsNamedBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISNAMEDSTRINGARBPROC epoxy_glIsNamedStringARB = epoxy_glIsNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLISOBJECTBUFFERATIPROC epoxy_glIsObjectBufferATI = epoxy_glIsObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLISOCCLUSIONQUERYNVPROC epoxy_glIsOcclusionQueryNV = epoxy_glIsOcclusionQueryNV_global_rewrite_ptr; + +PUBLIC PFNGLISPATHNVPROC epoxy_glIsPathNV = epoxy_glIsPathNV_global_rewrite_ptr; + +PUBLIC PFNGLISPOINTINFILLPATHNVPROC epoxy_glIsPointInFillPathNV = epoxy_glIsPointInFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLISPOINTINSTROKEPATHNVPROC epoxy_glIsPointInStrokePathNV = epoxy_glIsPointInStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMPROC epoxy_glIsProgram = epoxy_glIsProgram_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMARBPROC epoxy_glIsProgramARB = epoxy_glIsProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMNVPROC epoxy_glIsProgramNV = epoxy_glIsProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMPIPELINEPROC epoxy_glIsProgramPipeline = epoxy_glIsProgramPipeline_global_rewrite_ptr; + +PUBLIC PFNGLISPROGRAMPIPELINEEXTPROC epoxy_glIsProgramPipelineEXT = epoxy_glIsProgramPipelineEXT_global_rewrite_ptr; + +PUBLIC PFNGLISQUERYPROC epoxy_glIsQuery = epoxy_glIsQuery_global_rewrite_ptr; + +PUBLIC PFNGLISQUERYARBPROC epoxy_glIsQueryARB = epoxy_glIsQueryARB_global_rewrite_ptr; + +PUBLIC PFNGLISQUERYEXTPROC epoxy_glIsQueryEXT = epoxy_glIsQueryEXT_global_rewrite_ptr; + +PUBLIC PFNGLISRENDERBUFFERPROC epoxy_glIsRenderbuffer = epoxy_glIsRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLISRENDERBUFFEREXTPROC epoxy_glIsRenderbufferEXT = epoxy_glIsRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLISRENDERBUFFEROESPROC epoxy_glIsRenderbufferOES = epoxy_glIsRenderbufferOES_global_rewrite_ptr; + +PUBLIC PFNGLISSAMPLERPROC epoxy_glIsSampler = epoxy_glIsSampler_global_rewrite_ptr; + +PUBLIC PFNGLISSHADERPROC epoxy_glIsShader = epoxy_glIsShader_global_rewrite_ptr; + +PUBLIC PFNGLISSTATENVPROC epoxy_glIsStateNV = epoxy_glIsStateNV_global_rewrite_ptr; + +PUBLIC PFNGLISSYNCPROC epoxy_glIsSync = epoxy_glIsSync_global_rewrite_ptr; + +PUBLIC PFNGLISSYNCAPPLEPROC epoxy_glIsSyncAPPLE = epoxy_glIsSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREPROC epoxy_glIsTexture = epoxy_glIsTexture_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREEXTPROC epoxy_glIsTextureEXT = epoxy_glIsTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREHANDLERESIDENTARBPROC epoxy_glIsTextureHandleResidentARB = epoxy_glIsTextureHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLISTEXTUREHANDLERESIDENTNVPROC epoxy_glIsTextureHandleResidentNV = epoxy_glIsTextureHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLISTRANSFORMFEEDBACKPROC epoxy_glIsTransformFeedback = epoxy_glIsTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLISTRANSFORMFEEDBACKNVPROC epoxy_glIsTransformFeedbackNV = epoxy_glIsTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLISVARIANTENABLEDEXTPROC epoxy_glIsVariantEnabledEXT = epoxy_glIsVariantEnabledEXT_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXARRAYPROC epoxy_glIsVertexArray = epoxy_glIsVertexArray_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXARRAYAPPLEPROC epoxy_glIsVertexArrayAPPLE = epoxy_glIsVertexArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXARRAYOESPROC epoxy_glIsVertexArrayOES = epoxy_glIsVertexArrayOES_global_rewrite_ptr; + +PUBLIC PFNGLISVERTEXATTRIBENABLEDAPPLEPROC epoxy_glIsVertexAttribEnabledAPPLE = epoxy_glIsVertexAttribEnabledAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLLABELOBJECTEXTPROC epoxy_glLabelObjectEXT = epoxy_glLabelObjectEXT_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTENVISGIXPROC epoxy_glLightEnviSGIX = epoxy_glLightEnviSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELFPROC epoxy_glLightModelf = epoxy_glLightModelf_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELFVPROC epoxy_glLightModelfv = epoxy_glLightModelfv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELIPROC epoxy_glLightModeli = epoxy_glLightModeli_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELIVPROC epoxy_glLightModeliv = epoxy_glLightModeliv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXPROC epoxy_glLightModelx = epoxy_glLightModelx_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXOESPROC epoxy_glLightModelxOES = epoxy_glLightModelxOES_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXVPROC epoxy_glLightModelxv = epoxy_glLightModelxv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTMODELXVOESPROC epoxy_glLightModelxvOES = epoxy_glLightModelxvOES_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTFPROC epoxy_glLightf = epoxy_glLightf_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTFVPROC epoxy_glLightfv = epoxy_glLightfv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTIPROC epoxy_glLighti = epoxy_glLighti_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTIVPROC epoxy_glLightiv = epoxy_glLightiv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXPROC epoxy_glLightx = epoxy_glLightx_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXOESPROC epoxy_glLightxOES = epoxy_glLightxOES_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXVPROC epoxy_glLightxv = epoxy_glLightxv_global_rewrite_ptr; + +PUBLIC PFNGLLIGHTXVOESPROC epoxy_glLightxvOES = epoxy_glLightxvOES_global_rewrite_ptr; + +PUBLIC PFNGLLINESTIPPLEPROC epoxy_glLineStipple = epoxy_glLineStipple_global_rewrite_ptr; + +PUBLIC PFNGLLINEWIDTHPROC epoxy_glLineWidth = epoxy_glLineWidth_global_rewrite_ptr; + +PUBLIC PFNGLLINEWIDTHXPROC epoxy_glLineWidthx = epoxy_glLineWidthx_global_rewrite_ptr; + +PUBLIC PFNGLLINEWIDTHXOESPROC epoxy_glLineWidthxOES = epoxy_glLineWidthxOES_global_rewrite_ptr; + +PUBLIC PFNGLLINKPROGRAMPROC epoxy_glLinkProgram = epoxy_glLinkProgram_global_rewrite_ptr; + +PUBLIC PFNGLLINKPROGRAMARBPROC epoxy_glLinkProgramARB = epoxy_glLinkProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLLISTBASEPROC epoxy_glListBase = epoxy_glListBase_global_rewrite_ptr; + +PUBLIC PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC epoxy_glListDrawCommandsStatesClientNV = epoxy_glListDrawCommandsStatesClientNV_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERFSGIXPROC epoxy_glListParameterfSGIX = epoxy_glListParameterfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERFVSGIXPROC epoxy_glListParameterfvSGIX = epoxy_glListParameterfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERISGIXPROC epoxy_glListParameteriSGIX = epoxy_glListParameteriSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLISTPARAMETERIVSGIXPROC epoxy_glListParameterivSGIX = epoxy_glListParameterivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLOADIDENTITYPROC epoxy_glLoadIdentity = epoxy_glLoadIdentity_global_rewrite_ptr; + +PUBLIC PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC epoxy_glLoadIdentityDeformationMapSGIX = epoxy_glLoadIdentityDeformationMapSGIX_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXDPROC epoxy_glLoadMatrixd = epoxy_glLoadMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXFPROC epoxy_glLoadMatrixf = epoxy_glLoadMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXXPROC epoxy_glLoadMatrixx = epoxy_glLoadMatrixx_global_rewrite_ptr; + +PUBLIC PFNGLLOADMATRIXXOESPROC epoxy_glLoadMatrixxOES = epoxy_glLoadMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLLOADNAMEPROC epoxy_glLoadName = epoxy_glLoadName_global_rewrite_ptr; + +PUBLIC PFNGLLOADPALETTEFROMMODELVIEWMATRIXOESPROC epoxy_glLoadPaletteFromModelViewMatrixOES = epoxy_glLoadPaletteFromModelViewMatrixOES_global_rewrite_ptr; + +PUBLIC PFNGLLOADPROGRAMNVPROC epoxy_glLoadProgramNV = epoxy_glLoadProgramNV_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXDPROC epoxy_glLoadTransposeMatrixd = epoxy_glLoadTransposeMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXDARBPROC epoxy_glLoadTransposeMatrixdARB = epoxy_glLoadTransposeMatrixdARB_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXFPROC epoxy_glLoadTransposeMatrixf = epoxy_glLoadTransposeMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXFARBPROC epoxy_glLoadTransposeMatrixfARB = epoxy_glLoadTransposeMatrixfARB_global_rewrite_ptr; + +PUBLIC PFNGLLOADTRANSPOSEMATRIXXOESPROC epoxy_glLoadTransposeMatrixxOES = epoxy_glLoadTransposeMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLLOCKARRAYSEXTPROC epoxy_glLockArraysEXT = epoxy_glLockArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLLOGICOPPROC epoxy_glLogicOp = epoxy_glLogicOp_global_rewrite_ptr; + +PUBLIC PFNGLMAKEBUFFERNONRESIDENTNVPROC epoxy_glMakeBufferNonResidentNV = epoxy_glMakeBufferNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKEBUFFERRESIDENTNVPROC epoxy_glMakeBufferResidentNV = epoxy_glMakeBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC epoxy_glMakeImageHandleNonResidentARB = epoxy_glMakeImageHandleNonResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC epoxy_glMakeImageHandleNonResidentNV = epoxy_glMakeImageHandleNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLERESIDENTARBPROC epoxy_glMakeImageHandleResidentARB = epoxy_glMakeImageHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKEIMAGEHANDLERESIDENTNVPROC epoxy_glMakeImageHandleResidentNV = epoxy_glMakeImageHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC epoxy_glMakeNamedBufferNonResidentNV = epoxy_glMakeNamedBufferNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKENAMEDBUFFERRESIDENTNVPROC epoxy_glMakeNamedBufferResidentNV = epoxy_glMakeNamedBufferResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC epoxy_glMakeTextureHandleNonResidentARB = epoxy_glMakeTextureHandleNonResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC epoxy_glMakeTextureHandleNonResidentNV = epoxy_glMakeTextureHandleNonResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLERESIDENTARBPROC epoxy_glMakeTextureHandleResidentARB = epoxy_glMakeTextureHandleResidentARB_global_rewrite_ptr; + +PUBLIC PFNGLMAKETEXTUREHANDLERESIDENTNVPROC epoxy_glMakeTextureHandleResidentNV = epoxy_glMakeTextureHandleResidentNV_global_rewrite_ptr; + +PUBLIC PFNGLMAP1DPROC epoxy_glMap1d = epoxy_glMap1d_global_rewrite_ptr; + +PUBLIC PFNGLMAP1FPROC epoxy_glMap1f = epoxy_glMap1f_global_rewrite_ptr; + +PUBLIC PFNGLMAP1XOESPROC epoxy_glMap1xOES = epoxy_glMap1xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAP2DPROC epoxy_glMap2d = epoxy_glMap2d_global_rewrite_ptr; + +PUBLIC PFNGLMAP2FPROC epoxy_glMap2f = epoxy_glMap2f_global_rewrite_ptr; + +PUBLIC PFNGLMAP2XOESPROC epoxy_glMap2xOES = epoxy_glMap2xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERPROC epoxy_glMapBuffer = epoxy_glMapBuffer_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERARBPROC epoxy_glMapBufferARB = epoxy_glMapBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFEROESPROC epoxy_glMapBufferOES = epoxy_glMapBufferOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERRANGEPROC epoxy_glMapBufferRange = epoxy_glMapBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLMAPBUFFERRANGEEXTPROC epoxy_glMapBufferRangeEXT = epoxy_glMapBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAPCONTROLPOINTSNVPROC epoxy_glMapControlPointsNV = epoxy_glMapControlPointsNV_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID1DPROC epoxy_glMapGrid1d = epoxy_glMapGrid1d_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID1FPROC epoxy_glMapGrid1f = epoxy_glMapGrid1f_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID1XOESPROC epoxy_glMapGrid1xOES = epoxy_glMapGrid1xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID2DPROC epoxy_glMapGrid2d = epoxy_glMapGrid2d_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID2FPROC epoxy_glMapGrid2f = epoxy_glMapGrid2f_global_rewrite_ptr; + +PUBLIC PFNGLMAPGRID2XOESPROC epoxy_glMapGrid2xOES = epoxy_glMapGrid2xOES_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFERPROC epoxy_glMapNamedBuffer = epoxy_glMapNamedBuffer_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFEREXTPROC epoxy_glMapNamedBufferEXT = epoxy_glMapNamedBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFERRANGEPROC epoxy_glMapNamedBufferRange = epoxy_glMapNamedBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLMAPNAMEDBUFFERRANGEEXTPROC epoxy_glMapNamedBufferRangeEXT = epoxy_glMapNamedBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAPOBJECTBUFFERATIPROC epoxy_glMapObjectBufferATI = epoxy_glMapObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLMAPPARAMETERFVNVPROC epoxy_glMapParameterfvNV = epoxy_glMapParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLMAPPARAMETERIVNVPROC epoxy_glMapParameterivNV = epoxy_glMapParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLMAPTEXTURE2DINTELPROC epoxy_glMapTexture2DINTEL = epoxy_glMapTexture2DINTEL_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB1DAPPLEPROC epoxy_glMapVertexAttrib1dAPPLE = epoxy_glMapVertexAttrib1dAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB1FAPPLEPROC epoxy_glMapVertexAttrib1fAPPLE = epoxy_glMapVertexAttrib1fAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB2DAPPLEPROC epoxy_glMapVertexAttrib2dAPPLE = epoxy_glMapVertexAttrib2dAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMAPVERTEXATTRIB2FAPPLEPROC epoxy_glMapVertexAttrib2fAPPLE = epoxy_glMapVertexAttrib2fAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALFPROC epoxy_glMaterialf = epoxy_glMaterialf_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALFVPROC epoxy_glMaterialfv = epoxy_glMaterialfv_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALIPROC epoxy_glMateriali = epoxy_glMateriali_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALIVPROC epoxy_glMaterialiv = epoxy_glMaterialiv_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXPROC epoxy_glMaterialx = epoxy_glMaterialx_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXOESPROC epoxy_glMaterialxOES = epoxy_glMaterialxOES_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXVPROC epoxy_glMaterialxv = epoxy_glMaterialxv_global_rewrite_ptr; + +PUBLIC PFNGLMATERIALXVOESPROC epoxy_glMaterialxvOES = epoxy_glMaterialxvOES_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXFRUSTUMEXTPROC epoxy_glMatrixFrustumEXT = epoxy_glMatrixFrustumEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXPOINTERARBPROC epoxy_glMatrixIndexPointerARB = epoxy_glMatrixIndexPointerARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXPOINTEROESPROC epoxy_glMatrixIndexPointerOES = epoxy_glMatrixIndexPointerOES_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXUBVARBPROC epoxy_glMatrixIndexubvARB = epoxy_glMatrixIndexubvARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXUIVARBPROC epoxy_glMatrixIndexuivARB = epoxy_glMatrixIndexuivARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXINDEXUSVARBPROC epoxy_glMatrixIndexusvARB = epoxy_glMatrixIndexusvARB_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOAD3X2FNVPROC epoxy_glMatrixLoad3x2fNV = epoxy_glMatrixLoad3x2fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOAD3X3FNVPROC epoxy_glMatrixLoad3x3fNV = epoxy_glMatrixLoad3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADIDENTITYEXTPROC epoxy_glMatrixLoadIdentityEXT = epoxy_glMatrixLoadIdentityEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC epoxy_glMatrixLoadTranspose3x3fNV = epoxy_glMatrixLoadTranspose3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADTRANSPOSEDEXTPROC epoxy_glMatrixLoadTransposedEXT = epoxy_glMatrixLoadTransposedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADTRANSPOSEFEXTPROC epoxy_glMatrixLoadTransposefEXT = epoxy_glMatrixLoadTransposefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADDEXTPROC epoxy_glMatrixLoaddEXT = epoxy_glMatrixLoaddEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXLOADFEXTPROC epoxy_glMatrixLoadfEXT = epoxy_glMatrixLoadfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMODEPROC epoxy_glMatrixMode = epoxy_glMatrixMode_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULT3X2FNVPROC epoxy_glMatrixMult3x2fNV = epoxy_glMatrixMult3x2fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULT3X3FNVPROC epoxy_glMatrixMult3x3fNV = epoxy_glMatrixMult3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC epoxy_glMatrixMultTranspose3x3fNV = epoxy_glMatrixMultTranspose3x3fNV_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTTRANSPOSEDEXTPROC epoxy_glMatrixMultTransposedEXT = epoxy_glMatrixMultTransposedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTTRANSPOSEFEXTPROC epoxy_glMatrixMultTransposefEXT = epoxy_glMatrixMultTransposefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTDEXTPROC epoxy_glMatrixMultdEXT = epoxy_glMatrixMultdEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXMULTFEXTPROC epoxy_glMatrixMultfEXT = epoxy_glMatrixMultfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXORTHOEXTPROC epoxy_glMatrixOrthoEXT = epoxy_glMatrixOrthoEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXPOPEXTPROC epoxy_glMatrixPopEXT = epoxy_glMatrixPopEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXPUSHEXTPROC epoxy_glMatrixPushEXT = epoxy_glMatrixPushEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXROTATEDEXTPROC epoxy_glMatrixRotatedEXT = epoxy_glMatrixRotatedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXROTATEFEXTPROC epoxy_glMatrixRotatefEXT = epoxy_glMatrixRotatefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXSCALEDEXTPROC epoxy_glMatrixScaledEXT = epoxy_glMatrixScaledEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXSCALEFEXTPROC epoxy_glMatrixScalefEXT = epoxy_glMatrixScalefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXTRANSLATEDEXTPROC epoxy_glMatrixTranslatedEXT = epoxy_glMatrixTranslatedEXT_global_rewrite_ptr; + +PUBLIC PFNGLMATRIXTRANSLATEFEXTPROC epoxy_glMatrixTranslatefEXT = epoxy_glMatrixTranslatefEXT_global_rewrite_ptr; + +PUBLIC PFNGLMAXSHADERCOMPILERTHREADSARBPROC epoxy_glMaxShaderCompilerThreadsARB = epoxy_glMaxShaderCompilerThreadsARB_global_rewrite_ptr; + +PUBLIC PFNGLMEMORYBARRIERPROC epoxy_glMemoryBarrier = epoxy_glMemoryBarrier_global_rewrite_ptr; + +PUBLIC PFNGLMEMORYBARRIERBYREGIONPROC epoxy_glMemoryBarrierByRegion = epoxy_glMemoryBarrierByRegion_global_rewrite_ptr; + +PUBLIC PFNGLMEMORYBARRIEREXTPROC epoxy_glMemoryBarrierEXT = epoxy_glMemoryBarrierEXT_global_rewrite_ptr; + +PUBLIC PFNGLMINSAMPLESHADINGPROC epoxy_glMinSampleShading = epoxy_glMinSampleShading_global_rewrite_ptr; + +PUBLIC PFNGLMINSAMPLESHADINGARBPROC epoxy_glMinSampleShadingARB = epoxy_glMinSampleShadingARB_global_rewrite_ptr; + +PUBLIC PFNGLMINSAMPLESHADINGOESPROC epoxy_glMinSampleShadingOES = epoxy_glMinSampleShadingOES_global_rewrite_ptr; + +PUBLIC PFNGLMINMAXPROC epoxy_glMinmax = epoxy_glMinmax_global_rewrite_ptr; + +PUBLIC PFNGLMINMAXEXTPROC epoxy_glMinmaxEXT = epoxy_glMinmaxEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXDPROC epoxy_glMultMatrixd = epoxy_glMultMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXFPROC epoxy_glMultMatrixf = epoxy_glMultMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXXPROC epoxy_glMultMatrixx = epoxy_glMultMatrixx_global_rewrite_ptr; + +PUBLIC PFNGLMULTMATRIXXOESPROC epoxy_glMultMatrixxOES = epoxy_glMultMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXDPROC epoxy_glMultTransposeMatrixd = epoxy_glMultTransposeMatrixd_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXDARBPROC epoxy_glMultTransposeMatrixdARB = epoxy_glMultTransposeMatrixdARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXFPROC epoxy_glMultTransposeMatrixf = epoxy_glMultTransposeMatrixf_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXFARBPROC epoxy_glMultTransposeMatrixfARB = epoxy_glMultTransposeMatrixfARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTTRANSPOSEMATRIXXOESPROC epoxy_glMultTransposeMatrixxOES = epoxy_glMultTransposeMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSPROC epoxy_glMultiDrawArrays = epoxy_glMultiDrawArrays_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSEXTPROC epoxy_glMultiDrawArraysEXT = epoxy_glMultiDrawArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTPROC epoxy_glMultiDrawArraysIndirect = epoxy_glMultiDrawArraysIndirect_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC epoxy_glMultiDrawArraysIndirectAMD = epoxy_glMultiDrawArraysIndirectAMD_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawArraysIndirectBindlessCountNV = epoxy_glMultiDrawArraysIndirectBindlessCountNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawArraysIndirectBindlessNV = epoxy_glMultiDrawArraysIndirectBindlessNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC epoxy_glMultiDrawArraysIndirectCountARB = epoxy_glMultiDrawArraysIndirectCountARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC epoxy_glMultiDrawArraysIndirectEXT = epoxy_glMultiDrawArraysIndirectEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC epoxy_glMultiDrawElementArrayAPPLE = epoxy_glMultiDrawElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSPROC epoxy_glMultiDrawElements = epoxy_glMultiDrawElements_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC epoxy_glMultiDrawElementsBaseVertex = epoxy_glMultiDrawElementsBaseVertex_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC epoxy_glMultiDrawElementsBaseVertexEXT = epoxy_glMultiDrawElementsBaseVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSBASEVERTEXOESPROC epoxy_glMultiDrawElementsBaseVertexOES = epoxy_glMultiDrawElementsBaseVertexOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSEXTPROC epoxy_glMultiDrawElementsEXT = epoxy_glMultiDrawElementsEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTPROC epoxy_glMultiDrawElementsIndirect = epoxy_glMultiDrawElementsIndirect_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC epoxy_glMultiDrawElementsIndirectAMD = epoxy_glMultiDrawElementsIndirectAMD_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC epoxy_glMultiDrawElementsIndirectBindlessCountNV = epoxy_glMultiDrawElementsIndirectBindlessCountNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC epoxy_glMultiDrawElementsIndirectBindlessNV = epoxy_glMultiDrawElementsIndirectBindlessNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC epoxy_glMultiDrawElementsIndirectCountARB = epoxy_glMultiDrawElementsIndirectCountARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC epoxy_glMultiDrawElementsIndirectEXT = epoxy_glMultiDrawElementsIndirectEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC epoxy_glMultiDrawRangeElementArrayAPPLE = epoxy_glMultiDrawRangeElementArrayAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLMULTIMODEDRAWARRAYSIBMPROC epoxy_glMultiModeDrawArraysIBM = epoxy_glMultiModeDrawArraysIBM_global_rewrite_ptr; + +PUBLIC PFNGLMULTIMODEDRAWELEMENTSIBMPROC epoxy_glMultiModeDrawElementsIBM = epoxy_glMultiModeDrawElementsIBM_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXBUFFEREXTPROC epoxy_glMultiTexBufferEXT = epoxy_glMultiTexBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1BOESPROC epoxy_glMultiTexCoord1bOES = epoxy_glMultiTexCoord1bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1BVOESPROC epoxy_glMultiTexCoord1bvOES = epoxy_glMultiTexCoord1bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DPROC epoxy_glMultiTexCoord1d = epoxy_glMultiTexCoord1d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DARBPROC epoxy_glMultiTexCoord1dARB = epoxy_glMultiTexCoord1dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DVPROC epoxy_glMultiTexCoord1dv = epoxy_glMultiTexCoord1dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1DVARBPROC epoxy_glMultiTexCoord1dvARB = epoxy_glMultiTexCoord1dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FPROC epoxy_glMultiTexCoord1f = epoxy_glMultiTexCoord1f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FARBPROC epoxy_glMultiTexCoord1fARB = epoxy_glMultiTexCoord1fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FVPROC epoxy_glMultiTexCoord1fv = epoxy_glMultiTexCoord1fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1FVARBPROC epoxy_glMultiTexCoord1fvARB = epoxy_glMultiTexCoord1fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1HNVPROC epoxy_glMultiTexCoord1hNV = epoxy_glMultiTexCoord1hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1HVNVPROC epoxy_glMultiTexCoord1hvNV = epoxy_glMultiTexCoord1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IPROC epoxy_glMultiTexCoord1i = epoxy_glMultiTexCoord1i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IARBPROC epoxy_glMultiTexCoord1iARB = epoxy_glMultiTexCoord1iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IVPROC epoxy_glMultiTexCoord1iv = epoxy_glMultiTexCoord1iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1IVARBPROC epoxy_glMultiTexCoord1ivARB = epoxy_glMultiTexCoord1ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SPROC epoxy_glMultiTexCoord1s = epoxy_glMultiTexCoord1s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SARBPROC epoxy_glMultiTexCoord1sARB = epoxy_glMultiTexCoord1sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SVPROC epoxy_glMultiTexCoord1sv = epoxy_glMultiTexCoord1sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1SVARBPROC epoxy_glMultiTexCoord1svARB = epoxy_glMultiTexCoord1svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1XOESPROC epoxy_glMultiTexCoord1xOES = epoxy_glMultiTexCoord1xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD1XVOESPROC epoxy_glMultiTexCoord1xvOES = epoxy_glMultiTexCoord1xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2BOESPROC epoxy_glMultiTexCoord2bOES = epoxy_glMultiTexCoord2bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2BVOESPROC epoxy_glMultiTexCoord2bvOES = epoxy_glMultiTexCoord2bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DPROC epoxy_glMultiTexCoord2d = epoxy_glMultiTexCoord2d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DARBPROC epoxy_glMultiTexCoord2dARB = epoxy_glMultiTexCoord2dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DVPROC epoxy_glMultiTexCoord2dv = epoxy_glMultiTexCoord2dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2DVARBPROC epoxy_glMultiTexCoord2dvARB = epoxy_glMultiTexCoord2dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FPROC epoxy_glMultiTexCoord2f = epoxy_glMultiTexCoord2f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FARBPROC epoxy_glMultiTexCoord2fARB = epoxy_glMultiTexCoord2fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FVPROC epoxy_glMultiTexCoord2fv = epoxy_glMultiTexCoord2fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2FVARBPROC epoxy_glMultiTexCoord2fvARB = epoxy_glMultiTexCoord2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2HNVPROC epoxy_glMultiTexCoord2hNV = epoxy_glMultiTexCoord2hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2HVNVPROC epoxy_glMultiTexCoord2hvNV = epoxy_glMultiTexCoord2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IPROC epoxy_glMultiTexCoord2i = epoxy_glMultiTexCoord2i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IARBPROC epoxy_glMultiTexCoord2iARB = epoxy_glMultiTexCoord2iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IVPROC epoxy_glMultiTexCoord2iv = epoxy_glMultiTexCoord2iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2IVARBPROC epoxy_glMultiTexCoord2ivARB = epoxy_glMultiTexCoord2ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SPROC epoxy_glMultiTexCoord2s = epoxy_glMultiTexCoord2s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SARBPROC epoxy_glMultiTexCoord2sARB = epoxy_glMultiTexCoord2sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SVPROC epoxy_glMultiTexCoord2sv = epoxy_glMultiTexCoord2sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2SVARBPROC epoxy_glMultiTexCoord2svARB = epoxy_glMultiTexCoord2svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2XOESPROC epoxy_glMultiTexCoord2xOES = epoxy_glMultiTexCoord2xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD2XVOESPROC epoxy_glMultiTexCoord2xvOES = epoxy_glMultiTexCoord2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3BOESPROC epoxy_glMultiTexCoord3bOES = epoxy_glMultiTexCoord3bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3BVOESPROC epoxy_glMultiTexCoord3bvOES = epoxy_glMultiTexCoord3bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DPROC epoxy_glMultiTexCoord3d = epoxy_glMultiTexCoord3d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DARBPROC epoxy_glMultiTexCoord3dARB = epoxy_glMultiTexCoord3dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DVPROC epoxy_glMultiTexCoord3dv = epoxy_glMultiTexCoord3dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3DVARBPROC epoxy_glMultiTexCoord3dvARB = epoxy_glMultiTexCoord3dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FPROC epoxy_glMultiTexCoord3f = epoxy_glMultiTexCoord3f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FARBPROC epoxy_glMultiTexCoord3fARB = epoxy_glMultiTexCoord3fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FVPROC epoxy_glMultiTexCoord3fv = epoxy_glMultiTexCoord3fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3FVARBPROC epoxy_glMultiTexCoord3fvARB = epoxy_glMultiTexCoord3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3HNVPROC epoxy_glMultiTexCoord3hNV = epoxy_glMultiTexCoord3hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3HVNVPROC epoxy_glMultiTexCoord3hvNV = epoxy_glMultiTexCoord3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IPROC epoxy_glMultiTexCoord3i = epoxy_glMultiTexCoord3i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IARBPROC epoxy_glMultiTexCoord3iARB = epoxy_glMultiTexCoord3iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IVPROC epoxy_glMultiTexCoord3iv = epoxy_glMultiTexCoord3iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3IVARBPROC epoxy_glMultiTexCoord3ivARB = epoxy_glMultiTexCoord3ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SPROC epoxy_glMultiTexCoord3s = epoxy_glMultiTexCoord3s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SARBPROC epoxy_glMultiTexCoord3sARB = epoxy_glMultiTexCoord3sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SVPROC epoxy_glMultiTexCoord3sv = epoxy_glMultiTexCoord3sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3SVARBPROC epoxy_glMultiTexCoord3svARB = epoxy_glMultiTexCoord3svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3XOESPROC epoxy_glMultiTexCoord3xOES = epoxy_glMultiTexCoord3xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD3XVOESPROC epoxy_glMultiTexCoord3xvOES = epoxy_glMultiTexCoord3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4BOESPROC epoxy_glMultiTexCoord4bOES = epoxy_glMultiTexCoord4bOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4BVOESPROC epoxy_glMultiTexCoord4bvOES = epoxy_glMultiTexCoord4bvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DPROC epoxy_glMultiTexCoord4d = epoxy_glMultiTexCoord4d_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DARBPROC epoxy_glMultiTexCoord4dARB = epoxy_glMultiTexCoord4dARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DVPROC epoxy_glMultiTexCoord4dv = epoxy_glMultiTexCoord4dv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4DVARBPROC epoxy_glMultiTexCoord4dvARB = epoxy_glMultiTexCoord4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FPROC epoxy_glMultiTexCoord4f = epoxy_glMultiTexCoord4f_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FARBPROC epoxy_glMultiTexCoord4fARB = epoxy_glMultiTexCoord4fARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FVPROC epoxy_glMultiTexCoord4fv = epoxy_glMultiTexCoord4fv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4FVARBPROC epoxy_glMultiTexCoord4fvARB = epoxy_glMultiTexCoord4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4HNVPROC epoxy_glMultiTexCoord4hNV = epoxy_glMultiTexCoord4hNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4HVNVPROC epoxy_glMultiTexCoord4hvNV = epoxy_glMultiTexCoord4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IPROC epoxy_glMultiTexCoord4i = epoxy_glMultiTexCoord4i_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IARBPROC epoxy_glMultiTexCoord4iARB = epoxy_glMultiTexCoord4iARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IVPROC epoxy_glMultiTexCoord4iv = epoxy_glMultiTexCoord4iv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4IVARBPROC epoxy_glMultiTexCoord4ivARB = epoxy_glMultiTexCoord4ivARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SPROC epoxy_glMultiTexCoord4s = epoxy_glMultiTexCoord4s_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SARBPROC epoxy_glMultiTexCoord4sARB = epoxy_glMultiTexCoord4sARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SVPROC epoxy_glMultiTexCoord4sv = epoxy_glMultiTexCoord4sv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4SVARBPROC epoxy_glMultiTexCoord4svARB = epoxy_glMultiTexCoord4svARB_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4XPROC epoxy_glMultiTexCoord4x = epoxy_glMultiTexCoord4x_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4XOESPROC epoxy_glMultiTexCoord4xOES = epoxy_glMultiTexCoord4xOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORD4XVOESPROC epoxy_glMultiTexCoord4xvOES = epoxy_glMultiTexCoord4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP1UIPROC epoxy_glMultiTexCoordP1ui = epoxy_glMultiTexCoordP1ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP1UIVPROC epoxy_glMultiTexCoordP1uiv = epoxy_glMultiTexCoordP1uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP2UIPROC epoxy_glMultiTexCoordP2ui = epoxy_glMultiTexCoordP2ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP2UIVPROC epoxy_glMultiTexCoordP2uiv = epoxy_glMultiTexCoordP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP3UIPROC epoxy_glMultiTexCoordP3ui = epoxy_glMultiTexCoordP3ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP3UIVPROC epoxy_glMultiTexCoordP3uiv = epoxy_glMultiTexCoordP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP4UIPROC epoxy_glMultiTexCoordP4ui = epoxy_glMultiTexCoordP4ui_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDP4UIVPROC epoxy_glMultiTexCoordP4uiv = epoxy_glMultiTexCoordP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXCOORDPOINTEREXTPROC epoxy_glMultiTexCoordPointerEXT = epoxy_glMultiTexCoordPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVFEXTPROC epoxy_glMultiTexEnvfEXT = epoxy_glMultiTexEnvfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVFVEXTPROC epoxy_glMultiTexEnvfvEXT = epoxy_glMultiTexEnvfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVIEXTPROC epoxy_glMultiTexEnviEXT = epoxy_glMultiTexEnviEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXENVIVEXTPROC epoxy_glMultiTexEnvivEXT = epoxy_glMultiTexEnvivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENDEXTPROC epoxy_glMultiTexGendEXT = epoxy_glMultiTexGendEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENDVEXTPROC epoxy_glMultiTexGendvEXT = epoxy_glMultiTexGendvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENFEXTPROC epoxy_glMultiTexGenfEXT = epoxy_glMultiTexGenfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENFVEXTPROC epoxy_glMultiTexGenfvEXT = epoxy_glMultiTexGenfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENIEXTPROC epoxy_glMultiTexGeniEXT = epoxy_glMultiTexGeniEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXGENIVEXTPROC epoxy_glMultiTexGenivEXT = epoxy_glMultiTexGenivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXIMAGE1DEXTPROC epoxy_glMultiTexImage1DEXT = epoxy_glMultiTexImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXIMAGE2DEXTPROC epoxy_glMultiTexImage2DEXT = epoxy_glMultiTexImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXIMAGE3DEXTPROC epoxy_glMultiTexImage3DEXT = epoxy_glMultiTexImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIIVEXTPROC epoxy_glMultiTexParameterIivEXT = epoxy_glMultiTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIUIVEXTPROC epoxy_glMultiTexParameterIuivEXT = epoxy_glMultiTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERFEXTPROC epoxy_glMultiTexParameterfEXT = epoxy_glMultiTexParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERFVEXTPROC epoxy_glMultiTexParameterfvEXT = epoxy_glMultiTexParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIEXTPROC epoxy_glMultiTexParameteriEXT = epoxy_glMultiTexParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXPARAMETERIVEXTPROC epoxy_glMultiTexParameterivEXT = epoxy_glMultiTexParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXRENDERBUFFEREXTPROC epoxy_glMultiTexRenderbufferEXT = epoxy_glMultiTexRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXSUBIMAGE1DEXTPROC epoxy_glMultiTexSubImage1DEXT = epoxy_glMultiTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXSUBIMAGE2DEXTPROC epoxy_glMultiTexSubImage2DEXT = epoxy_glMultiTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLMULTITEXSUBIMAGE3DEXTPROC epoxy_glMultiTexSubImage3DEXT = epoxy_glMultiTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERDATAPROC epoxy_glNamedBufferData = epoxy_glNamedBufferData_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERDATAEXTPROC epoxy_glNamedBufferDataEXT = epoxy_glNamedBufferDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC epoxy_glNamedBufferPageCommitmentARB = epoxy_glNamedBufferPageCommitmentARB_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC epoxy_glNamedBufferPageCommitmentEXT = epoxy_glNamedBufferPageCommitmentEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSTORAGEPROC epoxy_glNamedBufferStorage = epoxy_glNamedBufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSTORAGEEXTPROC epoxy_glNamedBufferStorageEXT = epoxy_glNamedBufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSUBDATAPROC epoxy_glNamedBufferSubData = epoxy_glNamedBufferSubData_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDBUFFERSUBDATAEXTPROC epoxy_glNamedBufferSubDataEXT = epoxy_glNamedBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC epoxy_glNamedCopyBufferSubDataEXT = epoxy_glNamedCopyBufferSubDataEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC epoxy_glNamedFramebufferDrawBuffer = epoxy_glNamedFramebufferDrawBuffer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC epoxy_glNamedFramebufferDrawBuffers = epoxy_glNamedFramebufferDrawBuffers_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC epoxy_glNamedFramebufferParameteri = epoxy_glNamedFramebufferParameteri_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC epoxy_glNamedFramebufferParameteriEXT = epoxy_glNamedFramebufferParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC epoxy_glNamedFramebufferReadBuffer = epoxy_glNamedFramebufferReadBuffer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC epoxy_glNamedFramebufferRenderbuffer = epoxy_glNamedFramebufferRenderbuffer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC epoxy_glNamedFramebufferRenderbufferEXT = epoxy_glNamedFramebufferRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC epoxy_glNamedFramebufferSampleLocationsfvARB = epoxy_glNamedFramebufferSampleLocationsfvARB_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC epoxy_glNamedFramebufferSampleLocationsfvNV = epoxy_glNamedFramebufferSampleLocationsfvNV_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTUREPROC epoxy_glNamedFramebufferTexture = epoxy_glNamedFramebufferTexture_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC epoxy_glNamedFramebufferTexture1DEXT = epoxy_glNamedFramebufferTexture1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC epoxy_glNamedFramebufferTexture2DEXT = epoxy_glNamedFramebufferTexture2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC epoxy_glNamedFramebufferTexture3DEXT = epoxy_glNamedFramebufferTexture3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC epoxy_glNamedFramebufferTextureEXT = epoxy_glNamedFramebufferTextureEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC epoxy_glNamedFramebufferTextureFaceEXT = epoxy_glNamedFramebufferTextureFaceEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC epoxy_glNamedFramebufferTextureLayer = epoxy_glNamedFramebufferTextureLayer_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC epoxy_glNamedFramebufferTextureLayerEXT = epoxy_glNamedFramebufferTextureLayerEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC epoxy_glNamedProgramLocalParameter4dEXT = epoxy_glNamedProgramLocalParameter4dEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC epoxy_glNamedProgramLocalParameter4dvEXT = epoxy_glNamedProgramLocalParameter4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC epoxy_glNamedProgramLocalParameter4fEXT = epoxy_glNamedProgramLocalParameter4fEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC epoxy_glNamedProgramLocalParameter4fvEXT = epoxy_glNamedProgramLocalParameter4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC epoxy_glNamedProgramLocalParameterI4iEXT = epoxy_glNamedProgramLocalParameterI4iEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC epoxy_glNamedProgramLocalParameterI4ivEXT = epoxy_glNamedProgramLocalParameterI4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC epoxy_glNamedProgramLocalParameterI4uiEXT = epoxy_glNamedProgramLocalParameterI4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC epoxy_glNamedProgramLocalParameterI4uivEXT = epoxy_glNamedProgramLocalParameterI4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glNamedProgramLocalParameters4fvEXT = epoxy_glNamedProgramLocalParameters4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC epoxy_glNamedProgramLocalParametersI4ivEXT = epoxy_glNamedProgramLocalParametersI4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC epoxy_glNamedProgramLocalParametersI4uivEXT = epoxy_glNamedProgramLocalParametersI4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDPROGRAMSTRINGEXTPROC epoxy_glNamedProgramStringEXT = epoxy_glNamedProgramStringEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEPROC epoxy_glNamedRenderbufferStorage = epoxy_glNamedRenderbufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC epoxy_glNamedRenderbufferStorageEXT = epoxy_glNamedRenderbufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glNamedRenderbufferStorageMultisample = epoxy_glNamedRenderbufferStorageMultisample_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT = epoxy_glNamedRenderbufferStorageMultisampleCoverageEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glNamedRenderbufferStorageMultisampleEXT = epoxy_glNamedRenderbufferStorageMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLNAMEDSTRINGARBPROC epoxy_glNamedStringARB = epoxy_glNamedStringARB_global_rewrite_ptr; + +PUBLIC PFNGLNEWLISTPROC epoxy_glNewList = epoxy_glNewList_global_rewrite_ptr; + +PUBLIC PFNGLNEWOBJECTBUFFERATIPROC epoxy_glNewObjectBufferATI = epoxy_glNewObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3BPROC epoxy_glNormal3b = epoxy_glNormal3b_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3BVPROC epoxy_glNormal3bv = epoxy_glNormal3bv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3DPROC epoxy_glNormal3d = epoxy_glNormal3d_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3DVPROC epoxy_glNormal3dv = epoxy_glNormal3dv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FPROC epoxy_glNormal3f = epoxy_glNormal3f_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FVERTEX3FSUNPROC epoxy_glNormal3fVertex3fSUN = epoxy_glNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FVERTEX3FVSUNPROC epoxy_glNormal3fVertex3fvSUN = epoxy_glNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3FVPROC epoxy_glNormal3fv = epoxy_glNormal3fv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3HNVPROC epoxy_glNormal3hNV = epoxy_glNormal3hNV_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3HVNVPROC epoxy_glNormal3hvNV = epoxy_glNormal3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3IPROC epoxy_glNormal3i = epoxy_glNormal3i_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3IVPROC epoxy_glNormal3iv = epoxy_glNormal3iv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3SPROC epoxy_glNormal3s = epoxy_glNormal3s_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3SVPROC epoxy_glNormal3sv = epoxy_glNormal3sv_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3XPROC epoxy_glNormal3x = epoxy_glNormal3x_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3XOESPROC epoxy_glNormal3xOES = epoxy_glNormal3xOES_global_rewrite_ptr; + +PUBLIC PFNGLNORMAL3XVOESPROC epoxy_glNormal3xvOES = epoxy_glNormal3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLNORMALFORMATNVPROC epoxy_glNormalFormatNV = epoxy_glNormalFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLNORMALP3UIPROC epoxy_glNormalP3ui = epoxy_glNormalP3ui_global_rewrite_ptr; + +PUBLIC PFNGLNORMALP3UIVPROC epoxy_glNormalP3uiv = epoxy_glNormalP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTERPROC epoxy_glNormalPointer = epoxy_glNormalPointer_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTEREXTPROC epoxy_glNormalPointerEXT = epoxy_glNormalPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTERLISTIBMPROC epoxy_glNormalPointerListIBM = epoxy_glNormalPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLNORMALPOINTERVINTELPROC epoxy_glNormalPointervINTEL = epoxy_glNormalPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3BATIPROC epoxy_glNormalStream3bATI = epoxy_glNormalStream3bATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3BVATIPROC epoxy_glNormalStream3bvATI = epoxy_glNormalStream3bvATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3DATIPROC epoxy_glNormalStream3dATI = epoxy_glNormalStream3dATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3DVATIPROC epoxy_glNormalStream3dvATI = epoxy_glNormalStream3dvATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3FATIPROC epoxy_glNormalStream3fATI = epoxy_glNormalStream3fATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3FVATIPROC epoxy_glNormalStream3fvATI = epoxy_glNormalStream3fvATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3IATIPROC epoxy_glNormalStream3iATI = epoxy_glNormalStream3iATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3IVATIPROC epoxy_glNormalStream3ivATI = epoxy_glNormalStream3ivATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3SATIPROC epoxy_glNormalStream3sATI = epoxy_glNormalStream3sATI_global_rewrite_ptr; + +PUBLIC PFNGLNORMALSTREAM3SVATIPROC epoxy_glNormalStream3svATI = epoxy_glNormalStream3svATI_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTLABELPROC epoxy_glObjectLabel = epoxy_glObjectLabel_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTLABELKHRPROC epoxy_glObjectLabelKHR = epoxy_glObjectLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTPTRLABELPROC epoxy_glObjectPtrLabel = epoxy_glObjectPtrLabel_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTPTRLABELKHRPROC epoxy_glObjectPtrLabelKHR = epoxy_glObjectPtrLabelKHR_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTPURGEABLEAPPLEPROC epoxy_glObjectPurgeableAPPLE = epoxy_glObjectPurgeableAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLOBJECTUNPURGEABLEAPPLEPROC epoxy_glObjectUnpurgeableAPPLE = epoxy_glObjectUnpurgeableAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLORTHOPROC epoxy_glOrtho = epoxy_glOrtho_global_rewrite_ptr; + +PUBLIC PFNGLORTHOFPROC epoxy_glOrthof = epoxy_glOrthof_global_rewrite_ptr; + +PUBLIC PFNGLORTHOFOESPROC epoxy_glOrthofOES = epoxy_glOrthofOES_global_rewrite_ptr; + +PUBLIC PFNGLORTHOXPROC epoxy_glOrthox = epoxy_glOrthox_global_rewrite_ptr; + +PUBLIC PFNGLORTHOXOESPROC epoxy_glOrthoxOES = epoxy_glOrthoxOES_global_rewrite_ptr; + +PUBLIC PFNGLPNTRIANGLESFATIPROC epoxy_glPNTrianglesfATI = epoxy_glPNTrianglesfATI_global_rewrite_ptr; + +PUBLIC PFNGLPNTRIANGLESIATIPROC epoxy_glPNTrianglesiATI = epoxy_glPNTrianglesiATI_global_rewrite_ptr; + +PUBLIC PFNGLPASSTEXCOORDATIPROC epoxy_glPassTexCoordATI = epoxy_glPassTexCoordATI_global_rewrite_ptr; + +PUBLIC PFNGLPASSTHROUGHPROC epoxy_glPassThrough = epoxy_glPassThrough_global_rewrite_ptr; + +PUBLIC PFNGLPASSTHROUGHXOESPROC epoxy_glPassThroughxOES = epoxy_glPassThroughxOES_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERFVPROC epoxy_glPatchParameterfv = epoxy_glPatchParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERIPROC epoxy_glPatchParameteri = epoxy_glPatchParameteri_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERIEXTPROC epoxy_glPatchParameteriEXT = epoxy_glPatchParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLPATCHPARAMETERIOESPROC epoxy_glPatchParameteriOES = epoxy_glPatchParameteriOES_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOLORGENNVPROC epoxy_glPathColorGenNV = epoxy_glPathColorGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOMMANDSNVPROC epoxy_glPathCommandsNV = epoxy_glPathCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOORDSNVPROC epoxy_glPathCoordsNV = epoxy_glPathCoordsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHCOVERDEPTHFUNCNVPROC epoxy_glPathCoverDepthFuncNV = epoxy_glPathCoverDepthFuncNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHDASHARRAYNVPROC epoxy_glPathDashArrayNV = epoxy_glPathDashArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHFOGGENNVPROC epoxy_glPathFogGenNV = epoxy_glPathFogGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHINDEXARRAYNVPROC epoxy_glPathGlyphIndexArrayNV = epoxy_glPathGlyphIndexArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHINDEXRANGENVPROC epoxy_glPathGlyphIndexRangeNV = epoxy_glPathGlyphIndexRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHRANGENVPROC epoxy_glPathGlyphRangeNV = epoxy_glPathGlyphRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHGLYPHSNVPROC epoxy_glPathGlyphsNV = epoxy_glPathGlyphsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC epoxy_glPathMemoryGlyphIndexArrayNV = epoxy_glPathMemoryGlyphIndexArrayNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERFNVPROC epoxy_glPathParameterfNV = epoxy_glPathParameterfNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERFVNVPROC epoxy_glPathParameterfvNV = epoxy_glPathParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERINVPROC epoxy_glPathParameteriNV = epoxy_glPathParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHPARAMETERIVNVPROC epoxy_glPathParameterivNV = epoxy_glPathParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSTENCILDEPTHOFFSETNVPROC epoxy_glPathStencilDepthOffsetNV = epoxy_glPathStencilDepthOffsetNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSTENCILFUNCNVPROC epoxy_glPathStencilFuncNV = epoxy_glPathStencilFuncNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSTRINGNVPROC epoxy_glPathStringNV = epoxy_glPathStringNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSUBCOMMANDSNVPROC epoxy_glPathSubCommandsNV = epoxy_glPathSubCommandsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHSUBCOORDSNVPROC epoxy_glPathSubCoordsNV = epoxy_glPathSubCoordsNV_global_rewrite_ptr; + +PUBLIC PFNGLPATHTEXGENNVPROC epoxy_glPathTexGenNV = epoxy_glPathTexGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPAUSETRANSFORMFEEDBACKPROC epoxy_glPauseTransformFeedback = epoxy_glPauseTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLPAUSETRANSFORMFEEDBACKNVPROC epoxy_glPauseTransformFeedbackNV = epoxy_glPauseTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLPIXELDATARANGENVPROC epoxy_glPixelDataRangeNV = epoxy_glPixelDataRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPFVPROC epoxy_glPixelMapfv = epoxy_glPixelMapfv_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPUIVPROC epoxy_glPixelMapuiv = epoxy_glPixelMapuiv_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPUSVPROC epoxy_glPixelMapusv = epoxy_glPixelMapusv_global_rewrite_ptr; + +PUBLIC PFNGLPIXELMAPXPROC epoxy_glPixelMapx = epoxy_glPixelMapx_global_rewrite_ptr; + +PUBLIC PFNGLPIXELSTOREFPROC epoxy_glPixelStoref = epoxy_glPixelStoref_global_rewrite_ptr; + +PUBLIC PFNGLPIXELSTOREIPROC epoxy_glPixelStorei = epoxy_glPixelStorei_global_rewrite_ptr; + +PUBLIC PFNGLPIXELSTOREXPROC epoxy_glPixelStorex = epoxy_glPixelStorex_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERFSGISPROC epoxy_glPixelTexGenParameterfSGIS = epoxy_glPixelTexGenParameterfSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERFVSGISPROC epoxy_glPixelTexGenParameterfvSGIS = epoxy_glPixelTexGenParameterfvSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERISGISPROC epoxy_glPixelTexGenParameteriSGIS = epoxy_glPixelTexGenParameteriSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENPARAMETERIVSGISPROC epoxy_glPixelTexGenParameterivSGIS = epoxy_glPixelTexGenParameterivSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTEXGENSGIXPROC epoxy_glPixelTexGenSGIX = epoxy_glPixelTexGenSGIX_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFERFPROC epoxy_glPixelTransferf = epoxy_glPixelTransferf_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFERIPROC epoxy_glPixelTransferi = epoxy_glPixelTransferi_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFERXOESPROC epoxy_glPixelTransferxOES = epoxy_glPixelTransferxOES_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERFEXTPROC epoxy_glPixelTransformParameterfEXT = epoxy_glPixelTransformParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC epoxy_glPixelTransformParameterfvEXT = epoxy_glPixelTransformParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERIEXTPROC epoxy_glPixelTransformParameteriEXT = epoxy_glPixelTransformParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC epoxy_glPixelTransformParameterivEXT = epoxy_glPixelTransformParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPIXELZOOMPROC epoxy_glPixelZoom = epoxy_glPixelZoom_global_rewrite_ptr; + +PUBLIC PFNGLPIXELZOOMXOESPROC epoxy_glPixelZoomxOES = epoxy_glPixelZoomxOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTALONGPATHNVPROC epoxy_glPointAlongPathNV = epoxy_glPointAlongPathNV_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFPROC epoxy_glPointParameterf = epoxy_glPointParameterf_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFARBPROC epoxy_glPointParameterfARB = epoxy_glPointParameterfARB_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFEXTPROC epoxy_glPointParameterfEXT = epoxy_glPointParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFSGISPROC epoxy_glPointParameterfSGIS = epoxy_glPointParameterfSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVPROC epoxy_glPointParameterfv = epoxy_glPointParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVARBPROC epoxy_glPointParameterfvARB = epoxy_glPointParameterfvARB_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVEXTPROC epoxy_glPointParameterfvEXT = epoxy_glPointParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERFVSGISPROC epoxy_glPointParameterfvSGIS = epoxy_glPointParameterfvSGIS_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERIPROC epoxy_glPointParameteri = epoxy_glPointParameteri_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERINVPROC epoxy_glPointParameteriNV = epoxy_glPointParameteriNV_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERIVPROC epoxy_glPointParameteriv = epoxy_glPointParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERIVNVPROC epoxy_glPointParameterivNV = epoxy_glPointParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXPROC epoxy_glPointParameterx = epoxy_glPointParameterx_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXOESPROC epoxy_glPointParameterxOES = epoxy_glPointParameterxOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXVPROC epoxy_glPointParameterxv = epoxy_glPointParameterxv_global_rewrite_ptr; + +PUBLIC PFNGLPOINTPARAMETERXVOESPROC epoxy_glPointParameterxvOES = epoxy_glPointParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEPROC epoxy_glPointSize = epoxy_glPointSize_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEPOINTEROESPROC epoxy_glPointSizePointerOES = epoxy_glPointSizePointerOES_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEXPROC epoxy_glPointSizex = epoxy_glPointSizex_global_rewrite_ptr; + +PUBLIC PFNGLPOINTSIZEXOESPROC epoxy_glPointSizexOES = epoxy_glPointSizexOES_global_rewrite_ptr; + +PUBLIC PFNGLPOLLASYNCSGIXPROC epoxy_glPollAsyncSGIX = epoxy_glPollAsyncSGIX_global_rewrite_ptr; + +PUBLIC PFNGLPOLLINSTRUMENTSSGIXPROC epoxy_glPollInstrumentsSGIX = epoxy_glPollInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONMODEPROC epoxy_glPolygonMode = epoxy_glPolygonMode_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONMODENVPROC epoxy_glPolygonModeNV = epoxy_glPolygonModeNV_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETPROC epoxy_glPolygonOffset = epoxy_glPolygonOffset_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETCLAMPEXTPROC epoxy_glPolygonOffsetClampEXT = epoxy_glPolygonOffsetClampEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETEXTPROC epoxy_glPolygonOffsetEXT = epoxy_glPolygonOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETXPROC epoxy_glPolygonOffsetx = epoxy_glPolygonOffsetx_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONOFFSETXOESPROC epoxy_glPolygonOffsetxOES = epoxy_glPolygonOffsetxOES_global_rewrite_ptr; + +PUBLIC PFNGLPOLYGONSTIPPLEPROC epoxy_glPolygonStipple = epoxy_glPolygonStipple_global_rewrite_ptr; + +PUBLIC PFNGLPOPATTRIBPROC epoxy_glPopAttrib = epoxy_glPopAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPOPCLIENTATTRIBPROC epoxy_glPopClientAttrib = epoxy_glPopClientAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPOPDEBUGGROUPPROC epoxy_glPopDebugGroup = epoxy_glPopDebugGroup_global_rewrite_ptr; + +PUBLIC PFNGLPOPDEBUGGROUPKHRPROC epoxy_glPopDebugGroupKHR = epoxy_glPopDebugGroupKHR_global_rewrite_ptr; + +PUBLIC PFNGLPOPGROUPMARKEREXTPROC epoxy_glPopGroupMarkerEXT = epoxy_glPopGroupMarkerEXT_global_rewrite_ptr; + +PUBLIC PFNGLPOPMATRIXPROC epoxy_glPopMatrix = epoxy_glPopMatrix_global_rewrite_ptr; + +PUBLIC PFNGLPOPNAMEPROC epoxy_glPopName = epoxy_glPopName_global_rewrite_ptr; + +PUBLIC PFNGLPRESENTFRAMEDUALFILLNVPROC epoxy_glPresentFrameDualFillNV = epoxy_glPresentFrameDualFillNV_global_rewrite_ptr; + +PUBLIC PFNGLPRESENTFRAMEKEYEDNVPROC epoxy_glPresentFrameKeyedNV = epoxy_glPresentFrameKeyedNV_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXPROC epoxy_glPrimitiveBoundingBox = epoxy_glPrimitiveBoundingBox_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXARBPROC epoxy_glPrimitiveBoundingBoxARB = epoxy_glPrimitiveBoundingBoxARB_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXEXTPROC epoxy_glPrimitiveBoundingBoxEXT = epoxy_glPrimitiveBoundingBoxEXT_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVEBOUNDINGBOXOESPROC epoxy_glPrimitiveBoundingBoxOES = epoxy_glPrimitiveBoundingBoxOES_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVERESTARTINDEXPROC epoxy_glPrimitiveRestartIndex = epoxy_glPrimitiveRestartIndex_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVERESTARTINDEXNVPROC epoxy_glPrimitiveRestartIndexNV = epoxy_glPrimitiveRestartIndexNV_global_rewrite_ptr; + +PUBLIC PFNGLPRIMITIVERESTARTNVPROC epoxy_glPrimitiveRestartNV = epoxy_glPrimitiveRestartNV_global_rewrite_ptr; + +PUBLIC PFNGLPRIORITIZETEXTURESPROC epoxy_glPrioritizeTextures = epoxy_glPrioritizeTextures_global_rewrite_ptr; + +PUBLIC PFNGLPRIORITIZETEXTURESEXTPROC epoxy_glPrioritizeTexturesEXT = epoxy_glPrioritizeTexturesEXT_global_rewrite_ptr; + +PUBLIC PFNGLPRIORITIZETEXTURESXOESPROC epoxy_glPrioritizeTexturesxOES = epoxy_glPrioritizeTexturesxOES_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBINARYPROC epoxy_glProgramBinary = epoxy_glProgramBinary_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBINARYOESPROC epoxy_glProgramBinaryOES = epoxy_glProgramBinaryOES_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC epoxy_glProgramBufferParametersIivNV = epoxy_glProgramBufferParametersIivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC epoxy_glProgramBufferParametersIuivNV = epoxy_glProgramBufferParametersIuivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC epoxy_glProgramBufferParametersfvNV = epoxy_glProgramBufferParametersfvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4DARBPROC epoxy_glProgramEnvParameter4dARB = epoxy_glProgramEnvParameter4dARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4DVARBPROC epoxy_glProgramEnvParameter4dvARB = epoxy_glProgramEnvParameter4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4FARBPROC epoxy_glProgramEnvParameter4fARB = epoxy_glProgramEnvParameter4fARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETER4FVARBPROC epoxy_glProgramEnvParameter4fvARB = epoxy_glProgramEnvParameter4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4INVPROC epoxy_glProgramEnvParameterI4iNV = epoxy_glProgramEnvParameterI4iNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4IVNVPROC epoxy_glProgramEnvParameterI4ivNV = epoxy_glProgramEnvParameterI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4UINVPROC epoxy_glProgramEnvParameterI4uiNV = epoxy_glProgramEnvParameterI4uiNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERI4UIVNVPROC epoxy_glProgramEnvParameterI4uivNV = epoxy_glProgramEnvParameterI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERS4FVEXTPROC epoxy_glProgramEnvParameters4fvEXT = epoxy_glProgramEnvParameters4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERSI4IVNVPROC epoxy_glProgramEnvParametersI4ivNV = epoxy_glProgramEnvParametersI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC epoxy_glProgramEnvParametersI4uivNV = epoxy_glProgramEnvParametersI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4DARBPROC epoxy_glProgramLocalParameter4dARB = epoxy_glProgramLocalParameter4dARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4DVARBPROC epoxy_glProgramLocalParameter4dvARB = epoxy_glProgramLocalParameter4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4FARBPROC epoxy_glProgramLocalParameter4fARB = epoxy_glProgramLocalParameter4fARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETER4FVARBPROC epoxy_glProgramLocalParameter4fvARB = epoxy_glProgramLocalParameter4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4INVPROC epoxy_glProgramLocalParameterI4iNV = epoxy_glProgramLocalParameterI4iNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC epoxy_glProgramLocalParameterI4ivNV = epoxy_glProgramLocalParameterI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4UINVPROC epoxy_glProgramLocalParameterI4uiNV = epoxy_glProgramLocalParameterI4uiNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC epoxy_glProgramLocalParameterI4uivNV = epoxy_glProgramLocalParameterI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC epoxy_glProgramLocalParameters4fvEXT = epoxy_glProgramLocalParameters4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC epoxy_glProgramLocalParametersI4ivNV = epoxy_glProgramLocalParametersI4ivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC epoxy_glProgramLocalParametersI4uivNV = epoxy_glProgramLocalParametersI4uivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4DNVPROC epoxy_glProgramNamedParameter4dNV = epoxy_glProgramNamedParameter4dNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC epoxy_glProgramNamedParameter4dvNV = epoxy_glProgramNamedParameter4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4FNVPROC epoxy_glProgramNamedParameter4fNV = epoxy_glProgramNamedParameter4fNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC epoxy_glProgramNamedParameter4fvNV = epoxy_glProgramNamedParameter4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4DNVPROC epoxy_glProgramParameter4dNV = epoxy_glProgramParameter4dNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4DVNVPROC epoxy_glProgramParameter4dvNV = epoxy_glProgramParameter4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4FNVPROC epoxy_glProgramParameter4fNV = epoxy_glProgramParameter4fNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETER4FVNVPROC epoxy_glProgramParameter4fvNV = epoxy_glProgramParameter4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERIPROC epoxy_glProgramParameteri = epoxy_glProgramParameteri_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERIARBPROC epoxy_glProgramParameteriARB = epoxy_glProgramParameteriARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERIEXTPROC epoxy_glProgramParameteriEXT = epoxy_glProgramParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERS4DVNVPROC epoxy_glProgramParameters4dvNV = epoxy_glProgramParameters4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPARAMETERS4FVNVPROC epoxy_glProgramParameters4fvNV = epoxy_glProgramParameters4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC epoxy_glProgramPathFragmentInputGenNV = epoxy_glProgramPathFragmentInputGenNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMSTRINGARBPROC epoxy_glProgramStringARB = epoxy_glProgramStringARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC epoxy_glProgramSubroutineParametersuivNV = epoxy_glProgramSubroutineParametersuivNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DPROC epoxy_glProgramUniform1d = epoxy_glProgramUniform1d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DEXTPROC epoxy_glProgramUniform1dEXT = epoxy_glProgramUniform1dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DVPROC epoxy_glProgramUniform1dv = epoxy_glProgramUniform1dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1DVEXTPROC epoxy_glProgramUniform1dvEXT = epoxy_glProgramUniform1dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FPROC epoxy_glProgramUniform1f = epoxy_glProgramUniform1f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FEXTPROC epoxy_glProgramUniform1fEXT = epoxy_glProgramUniform1fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FVPROC epoxy_glProgramUniform1fv = epoxy_glProgramUniform1fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1FVEXTPROC epoxy_glProgramUniform1fvEXT = epoxy_glProgramUniform1fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IPROC epoxy_glProgramUniform1i = epoxy_glProgramUniform1i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64ARBPROC epoxy_glProgramUniform1i64ARB = epoxy_glProgramUniform1i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64NVPROC epoxy_glProgramUniform1i64NV = epoxy_glProgramUniform1i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64VARBPROC epoxy_glProgramUniform1i64vARB = epoxy_glProgramUniform1i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1I64VNVPROC epoxy_glProgramUniform1i64vNV = epoxy_glProgramUniform1i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IEXTPROC epoxy_glProgramUniform1iEXT = epoxy_glProgramUniform1iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IVPROC epoxy_glProgramUniform1iv = epoxy_glProgramUniform1iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1IVEXTPROC epoxy_glProgramUniform1ivEXT = epoxy_glProgramUniform1ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIPROC epoxy_glProgramUniform1ui = epoxy_glProgramUniform1ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64ARBPROC epoxy_glProgramUniform1ui64ARB = epoxy_glProgramUniform1ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64NVPROC epoxy_glProgramUniform1ui64NV = epoxy_glProgramUniform1ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64VARBPROC epoxy_glProgramUniform1ui64vARB = epoxy_glProgramUniform1ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UI64VNVPROC epoxy_glProgramUniform1ui64vNV = epoxy_glProgramUniform1ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIEXTPROC epoxy_glProgramUniform1uiEXT = epoxy_glProgramUniform1uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIVPROC epoxy_glProgramUniform1uiv = epoxy_glProgramUniform1uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM1UIVEXTPROC epoxy_glProgramUniform1uivEXT = epoxy_glProgramUniform1uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DPROC epoxy_glProgramUniform2d = epoxy_glProgramUniform2d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DEXTPROC epoxy_glProgramUniform2dEXT = epoxy_glProgramUniform2dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DVPROC epoxy_glProgramUniform2dv = epoxy_glProgramUniform2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2DVEXTPROC epoxy_glProgramUniform2dvEXT = epoxy_glProgramUniform2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FPROC epoxy_glProgramUniform2f = epoxy_glProgramUniform2f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FEXTPROC epoxy_glProgramUniform2fEXT = epoxy_glProgramUniform2fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FVPROC epoxy_glProgramUniform2fv = epoxy_glProgramUniform2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2FVEXTPROC epoxy_glProgramUniform2fvEXT = epoxy_glProgramUniform2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IPROC epoxy_glProgramUniform2i = epoxy_glProgramUniform2i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64ARBPROC epoxy_glProgramUniform2i64ARB = epoxy_glProgramUniform2i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64NVPROC epoxy_glProgramUniform2i64NV = epoxy_glProgramUniform2i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64VARBPROC epoxy_glProgramUniform2i64vARB = epoxy_glProgramUniform2i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2I64VNVPROC epoxy_glProgramUniform2i64vNV = epoxy_glProgramUniform2i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IEXTPROC epoxy_glProgramUniform2iEXT = epoxy_glProgramUniform2iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IVPROC epoxy_glProgramUniform2iv = epoxy_glProgramUniform2iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2IVEXTPROC epoxy_glProgramUniform2ivEXT = epoxy_glProgramUniform2ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIPROC epoxy_glProgramUniform2ui = epoxy_glProgramUniform2ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64ARBPROC epoxy_glProgramUniform2ui64ARB = epoxy_glProgramUniform2ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64NVPROC epoxy_glProgramUniform2ui64NV = epoxy_glProgramUniform2ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64VARBPROC epoxy_glProgramUniform2ui64vARB = epoxy_glProgramUniform2ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UI64VNVPROC epoxy_glProgramUniform2ui64vNV = epoxy_glProgramUniform2ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIEXTPROC epoxy_glProgramUniform2uiEXT = epoxy_glProgramUniform2uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIVPROC epoxy_glProgramUniform2uiv = epoxy_glProgramUniform2uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM2UIVEXTPROC epoxy_glProgramUniform2uivEXT = epoxy_glProgramUniform2uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DPROC epoxy_glProgramUniform3d = epoxy_glProgramUniform3d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DEXTPROC epoxy_glProgramUniform3dEXT = epoxy_glProgramUniform3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DVPROC epoxy_glProgramUniform3dv = epoxy_glProgramUniform3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3DVEXTPROC epoxy_glProgramUniform3dvEXT = epoxy_glProgramUniform3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FPROC epoxy_glProgramUniform3f = epoxy_glProgramUniform3f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FEXTPROC epoxy_glProgramUniform3fEXT = epoxy_glProgramUniform3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FVPROC epoxy_glProgramUniform3fv = epoxy_glProgramUniform3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3FVEXTPROC epoxy_glProgramUniform3fvEXT = epoxy_glProgramUniform3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IPROC epoxy_glProgramUniform3i = epoxy_glProgramUniform3i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64ARBPROC epoxy_glProgramUniform3i64ARB = epoxy_glProgramUniform3i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64NVPROC epoxy_glProgramUniform3i64NV = epoxy_glProgramUniform3i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64VARBPROC epoxy_glProgramUniform3i64vARB = epoxy_glProgramUniform3i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3I64VNVPROC epoxy_glProgramUniform3i64vNV = epoxy_glProgramUniform3i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IEXTPROC epoxy_glProgramUniform3iEXT = epoxy_glProgramUniform3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IVPROC epoxy_glProgramUniform3iv = epoxy_glProgramUniform3iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3IVEXTPROC epoxy_glProgramUniform3ivEXT = epoxy_glProgramUniform3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIPROC epoxy_glProgramUniform3ui = epoxy_glProgramUniform3ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64ARBPROC epoxy_glProgramUniform3ui64ARB = epoxy_glProgramUniform3ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64NVPROC epoxy_glProgramUniform3ui64NV = epoxy_glProgramUniform3ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64VARBPROC epoxy_glProgramUniform3ui64vARB = epoxy_glProgramUniform3ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UI64VNVPROC epoxy_glProgramUniform3ui64vNV = epoxy_glProgramUniform3ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIEXTPROC epoxy_glProgramUniform3uiEXT = epoxy_glProgramUniform3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIVPROC epoxy_glProgramUniform3uiv = epoxy_glProgramUniform3uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM3UIVEXTPROC epoxy_glProgramUniform3uivEXT = epoxy_glProgramUniform3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DPROC epoxy_glProgramUniform4d = epoxy_glProgramUniform4d_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DEXTPROC epoxy_glProgramUniform4dEXT = epoxy_glProgramUniform4dEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DVPROC epoxy_glProgramUniform4dv = epoxy_glProgramUniform4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4DVEXTPROC epoxy_glProgramUniform4dvEXT = epoxy_glProgramUniform4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FPROC epoxy_glProgramUniform4f = epoxy_glProgramUniform4f_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FEXTPROC epoxy_glProgramUniform4fEXT = epoxy_glProgramUniform4fEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FVPROC epoxy_glProgramUniform4fv = epoxy_glProgramUniform4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4FVEXTPROC epoxy_glProgramUniform4fvEXT = epoxy_glProgramUniform4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IPROC epoxy_glProgramUniform4i = epoxy_glProgramUniform4i_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64ARBPROC epoxy_glProgramUniform4i64ARB = epoxy_glProgramUniform4i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64NVPROC epoxy_glProgramUniform4i64NV = epoxy_glProgramUniform4i64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64VARBPROC epoxy_glProgramUniform4i64vARB = epoxy_glProgramUniform4i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4I64VNVPROC epoxy_glProgramUniform4i64vNV = epoxy_glProgramUniform4i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IEXTPROC epoxy_glProgramUniform4iEXT = epoxy_glProgramUniform4iEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IVPROC epoxy_glProgramUniform4iv = epoxy_glProgramUniform4iv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4IVEXTPROC epoxy_glProgramUniform4ivEXT = epoxy_glProgramUniform4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIPROC epoxy_glProgramUniform4ui = epoxy_glProgramUniform4ui_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64ARBPROC epoxy_glProgramUniform4ui64ARB = epoxy_glProgramUniform4ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64NVPROC epoxy_glProgramUniform4ui64NV = epoxy_glProgramUniform4ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64VARBPROC epoxy_glProgramUniform4ui64vARB = epoxy_glProgramUniform4ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UI64VNVPROC epoxy_glProgramUniform4ui64vNV = epoxy_glProgramUniform4ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIEXTPROC epoxy_glProgramUniform4uiEXT = epoxy_glProgramUniform4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIVPROC epoxy_glProgramUniform4uiv = epoxy_glProgramUniform4uiv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORM4UIVEXTPROC epoxy_glProgramUniform4uivEXT = epoxy_glProgramUniform4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC epoxy_glProgramUniformHandleui64ARB = epoxy_glProgramUniformHandleui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC epoxy_glProgramUniformHandleui64NV = epoxy_glProgramUniformHandleui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC epoxy_glProgramUniformHandleui64vARB = epoxy_glProgramUniformHandleui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC epoxy_glProgramUniformHandleui64vNV = epoxy_glProgramUniformHandleui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2DVPROC epoxy_glProgramUniformMatrix2dv = epoxy_glProgramUniformMatrix2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC epoxy_glProgramUniformMatrix2dvEXT = epoxy_glProgramUniformMatrix2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2FVPROC epoxy_glProgramUniformMatrix2fv = epoxy_glProgramUniformMatrix2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC epoxy_glProgramUniformMatrix2fvEXT = epoxy_glProgramUniformMatrix2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC epoxy_glProgramUniformMatrix2x3dv = epoxy_glProgramUniformMatrix2x3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC epoxy_glProgramUniformMatrix2x3dvEXT = epoxy_glProgramUniformMatrix2x3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC epoxy_glProgramUniformMatrix2x3fv = epoxy_glProgramUniformMatrix2x3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC epoxy_glProgramUniformMatrix2x3fvEXT = epoxy_glProgramUniformMatrix2x3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC epoxy_glProgramUniformMatrix2x4dv = epoxy_glProgramUniformMatrix2x4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC epoxy_glProgramUniformMatrix2x4dvEXT = epoxy_glProgramUniformMatrix2x4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC epoxy_glProgramUniformMatrix2x4fv = epoxy_glProgramUniformMatrix2x4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC epoxy_glProgramUniformMatrix2x4fvEXT = epoxy_glProgramUniformMatrix2x4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3DVPROC epoxy_glProgramUniformMatrix3dv = epoxy_glProgramUniformMatrix3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC epoxy_glProgramUniformMatrix3dvEXT = epoxy_glProgramUniformMatrix3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3FVPROC epoxy_glProgramUniformMatrix3fv = epoxy_glProgramUniformMatrix3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC epoxy_glProgramUniformMatrix3fvEXT = epoxy_glProgramUniformMatrix3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC epoxy_glProgramUniformMatrix3x2dv = epoxy_glProgramUniformMatrix3x2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC epoxy_glProgramUniformMatrix3x2dvEXT = epoxy_glProgramUniformMatrix3x2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC epoxy_glProgramUniformMatrix3x2fv = epoxy_glProgramUniformMatrix3x2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC epoxy_glProgramUniformMatrix3x2fvEXT = epoxy_glProgramUniformMatrix3x2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC epoxy_glProgramUniformMatrix3x4dv = epoxy_glProgramUniformMatrix3x4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC epoxy_glProgramUniformMatrix3x4dvEXT = epoxy_glProgramUniformMatrix3x4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC epoxy_glProgramUniformMatrix3x4fv = epoxy_glProgramUniformMatrix3x4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC epoxy_glProgramUniformMatrix3x4fvEXT = epoxy_glProgramUniformMatrix3x4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4DVPROC epoxy_glProgramUniformMatrix4dv = epoxy_glProgramUniformMatrix4dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC epoxy_glProgramUniformMatrix4dvEXT = epoxy_glProgramUniformMatrix4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4FVPROC epoxy_glProgramUniformMatrix4fv = epoxy_glProgramUniformMatrix4fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC epoxy_glProgramUniformMatrix4fvEXT = epoxy_glProgramUniformMatrix4fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC epoxy_glProgramUniformMatrix4x2dv = epoxy_glProgramUniformMatrix4x2dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC epoxy_glProgramUniformMatrix4x2dvEXT = epoxy_glProgramUniformMatrix4x2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC epoxy_glProgramUniformMatrix4x2fv = epoxy_glProgramUniformMatrix4x2fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC epoxy_glProgramUniformMatrix4x2fvEXT = epoxy_glProgramUniformMatrix4x2fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC epoxy_glProgramUniformMatrix4x3dv = epoxy_glProgramUniformMatrix4x3dv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC epoxy_glProgramUniformMatrix4x3dvEXT = epoxy_glProgramUniformMatrix4x3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC epoxy_glProgramUniformMatrix4x3fv = epoxy_glProgramUniformMatrix4x3fv_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC epoxy_glProgramUniformMatrix4x3fvEXT = epoxy_glProgramUniformMatrix4x3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMUI64NVPROC epoxy_glProgramUniformui64NV = epoxy_glProgramUniformui64NV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMUNIFORMUI64VNVPROC epoxy_glProgramUniformui64vNV = epoxy_glProgramUniformui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLPROGRAMVERTEXLIMITNVPROC epoxy_glProgramVertexLimitNV = epoxy_glProgramVertexLimitNV_global_rewrite_ptr; + +PUBLIC PFNGLPROVOKINGVERTEXPROC epoxy_glProvokingVertex = epoxy_glProvokingVertex_global_rewrite_ptr; + +PUBLIC PFNGLPROVOKINGVERTEXEXTPROC epoxy_glProvokingVertexEXT = epoxy_glProvokingVertexEXT_global_rewrite_ptr; + +PUBLIC PFNGLPUSHATTRIBPROC epoxy_glPushAttrib = epoxy_glPushAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPUSHCLIENTATTRIBPROC epoxy_glPushClientAttrib = epoxy_glPushClientAttrib_global_rewrite_ptr; + +PUBLIC PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC epoxy_glPushClientAttribDefaultEXT = epoxy_glPushClientAttribDefaultEXT_global_rewrite_ptr; + +PUBLIC PFNGLPUSHDEBUGGROUPPROC epoxy_glPushDebugGroup = epoxy_glPushDebugGroup_global_rewrite_ptr; + +PUBLIC PFNGLPUSHDEBUGGROUPKHRPROC epoxy_glPushDebugGroupKHR = epoxy_glPushDebugGroupKHR_global_rewrite_ptr; + +PUBLIC PFNGLPUSHGROUPMARKEREXTPROC epoxy_glPushGroupMarkerEXT = epoxy_glPushGroupMarkerEXT_global_rewrite_ptr; + +PUBLIC PFNGLPUSHMATRIXPROC epoxy_glPushMatrix = epoxy_glPushMatrix_global_rewrite_ptr; + +PUBLIC PFNGLPUSHNAMEPROC epoxy_glPushName = epoxy_glPushName_global_rewrite_ptr; + +PUBLIC PFNGLQUERYCOUNTERPROC epoxy_glQueryCounter = epoxy_glQueryCounter_global_rewrite_ptr; + +PUBLIC PFNGLQUERYCOUNTEREXTPROC epoxy_glQueryCounterEXT = epoxy_glQueryCounterEXT_global_rewrite_ptr; + +PUBLIC PFNGLQUERYMATRIXXOESPROC epoxy_glQueryMatrixxOES = epoxy_glQueryMatrixxOES_global_rewrite_ptr; + +PUBLIC PFNGLQUERYOBJECTPARAMETERUIAMDPROC epoxy_glQueryObjectParameteruiAMD = epoxy_glQueryObjectParameteruiAMD_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2DPROC epoxy_glRasterPos2d = epoxy_glRasterPos2d_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2DVPROC epoxy_glRasterPos2dv = epoxy_glRasterPos2dv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2FPROC epoxy_glRasterPos2f = epoxy_glRasterPos2f_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2FVPROC epoxy_glRasterPos2fv = epoxy_glRasterPos2fv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2IPROC epoxy_glRasterPos2i = epoxy_glRasterPos2i_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2IVPROC epoxy_glRasterPos2iv = epoxy_glRasterPos2iv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2SPROC epoxy_glRasterPos2s = epoxy_glRasterPos2s_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2SVPROC epoxy_glRasterPos2sv = epoxy_glRasterPos2sv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2XOESPROC epoxy_glRasterPos2xOES = epoxy_glRasterPos2xOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS2XVOESPROC epoxy_glRasterPos2xvOES = epoxy_glRasterPos2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3DPROC epoxy_glRasterPos3d = epoxy_glRasterPos3d_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3DVPROC epoxy_glRasterPos3dv = epoxy_glRasterPos3dv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3FPROC epoxy_glRasterPos3f = epoxy_glRasterPos3f_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3FVPROC epoxy_glRasterPos3fv = epoxy_glRasterPos3fv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3IPROC epoxy_glRasterPos3i = epoxy_glRasterPos3i_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3IVPROC epoxy_glRasterPos3iv = epoxy_glRasterPos3iv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3SPROC epoxy_glRasterPos3s = epoxy_glRasterPos3s_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3SVPROC epoxy_glRasterPos3sv = epoxy_glRasterPos3sv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3XOESPROC epoxy_glRasterPos3xOES = epoxy_glRasterPos3xOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS3XVOESPROC epoxy_glRasterPos3xvOES = epoxy_glRasterPos3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4DPROC epoxy_glRasterPos4d = epoxy_glRasterPos4d_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4DVPROC epoxy_glRasterPos4dv = epoxy_glRasterPos4dv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4FPROC epoxy_glRasterPos4f = epoxy_glRasterPos4f_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4FVPROC epoxy_glRasterPos4fv = epoxy_glRasterPos4fv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4IPROC epoxy_glRasterPos4i = epoxy_glRasterPos4i_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4IVPROC epoxy_glRasterPos4iv = epoxy_glRasterPos4iv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4SPROC epoxy_glRasterPos4s = epoxy_glRasterPos4s_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4SVPROC epoxy_glRasterPos4sv = epoxy_glRasterPos4sv_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4XOESPROC epoxy_glRasterPos4xOES = epoxy_glRasterPos4xOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERPOS4XVOESPROC epoxy_glRasterPos4xvOES = epoxy_glRasterPos4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLRASTERSAMPLESEXTPROC epoxy_glRasterSamplesEXT = epoxy_glRasterSamplesEXT_global_rewrite_ptr; + +PUBLIC PFNGLREADBUFFERPROC epoxy_glReadBuffer = epoxy_glReadBuffer_global_rewrite_ptr; + +PUBLIC PFNGLREADBUFFERINDEXEDEXTPROC epoxy_glReadBufferIndexedEXT = epoxy_glReadBufferIndexedEXT_global_rewrite_ptr; + +PUBLIC PFNGLREADBUFFERNVPROC epoxy_glReadBufferNV = epoxy_glReadBufferNV_global_rewrite_ptr; + +PUBLIC PFNGLREADINSTRUMENTSSGIXPROC epoxy_glReadInstrumentsSGIX = epoxy_glReadInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLREADPIXELSPROC epoxy_glReadPixels = epoxy_glReadPixels_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSPROC epoxy_glReadnPixels = epoxy_glReadnPixels_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSARBPROC epoxy_glReadnPixelsARB = epoxy_glReadnPixelsARB_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSEXTPROC epoxy_glReadnPixelsEXT = epoxy_glReadnPixelsEXT_global_rewrite_ptr; + +PUBLIC PFNGLREADNPIXELSKHRPROC epoxy_glReadnPixelsKHR = epoxy_glReadnPixelsKHR_global_rewrite_ptr; + +PUBLIC PFNGLRECTDPROC epoxy_glRectd = epoxy_glRectd_global_rewrite_ptr; + +PUBLIC PFNGLRECTDVPROC epoxy_glRectdv = epoxy_glRectdv_global_rewrite_ptr; + +PUBLIC PFNGLRECTFPROC epoxy_glRectf = epoxy_glRectf_global_rewrite_ptr; + +PUBLIC PFNGLRECTFVPROC epoxy_glRectfv = epoxy_glRectfv_global_rewrite_ptr; + +PUBLIC PFNGLRECTIPROC epoxy_glRecti = epoxy_glRecti_global_rewrite_ptr; + +PUBLIC PFNGLRECTIVPROC epoxy_glRectiv = epoxy_glRectiv_global_rewrite_ptr; + +PUBLIC PFNGLRECTSPROC epoxy_glRects = epoxy_glRects_global_rewrite_ptr; + +PUBLIC PFNGLRECTSVPROC epoxy_glRectsv = epoxy_glRectsv_global_rewrite_ptr; + +PUBLIC PFNGLRECTXOESPROC epoxy_glRectxOES = epoxy_glRectxOES_global_rewrite_ptr; + +PUBLIC PFNGLRECTXVOESPROC epoxy_glRectxvOES = epoxy_glRectxvOES_global_rewrite_ptr; + +PUBLIC PFNGLREFERENCEPLANESGIXPROC epoxy_glReferencePlaneSGIX = epoxy_glReferencePlaneSGIX_global_rewrite_ptr; + +PUBLIC PFNGLRELEASESHADERCOMPILERPROC epoxy_glReleaseShaderCompiler = epoxy_glReleaseShaderCompiler_global_rewrite_ptr; + +PUBLIC PFNGLRENDERMODEPROC epoxy_glRenderMode = epoxy_glRenderMode_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEPROC epoxy_glRenderbufferStorage = epoxy_glRenderbufferStorage_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEEXTPROC epoxy_glRenderbufferStorageEXT = epoxy_glRenderbufferStorageEXT_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC epoxy_glRenderbufferStorageMultisample = epoxy_glRenderbufferStorageMultisample_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC epoxy_glRenderbufferStorageMultisampleANGLE = epoxy_glRenderbufferStorageMultisampleANGLE_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC epoxy_glRenderbufferStorageMultisampleAPPLE = epoxy_glRenderbufferStorageMultisampleAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC epoxy_glRenderbufferStorageMultisampleCoverageNV = epoxy_glRenderbufferStorageMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC epoxy_glRenderbufferStorageMultisampleEXT = epoxy_glRenderbufferStorageMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC epoxy_glRenderbufferStorageMultisampleIMG = epoxy_glRenderbufferStorageMultisampleIMG_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC epoxy_glRenderbufferStorageMultisampleNV = epoxy_glRenderbufferStorageMultisampleNV_global_rewrite_ptr; + +PUBLIC PFNGLRENDERBUFFERSTORAGEOESPROC epoxy_glRenderbufferStorageOES = epoxy_glRenderbufferStorageOES_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEPOINTERSUNPROC epoxy_glReplacementCodePointerSUN = epoxy_glReplacementCodePointerSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUBSUNPROC epoxy_glReplacementCodeubSUN = epoxy_glReplacementCodeubSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUBVSUNPROC epoxy_glReplacementCodeubvSUN = epoxy_glReplacementCodeubvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fSUN = epoxy_glReplacementCodeuiColor3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor3fVertex3fvSUN = epoxy_glReplacementCodeuiColor3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fSUN = epoxy_glReplacementCodeuiColor4ubVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC epoxy_glReplacementCodeuiColor4ubVertex3fvSUN = epoxy_glReplacementCodeuiColor4ubVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fSUN = epoxy_glReplacementCodeuiNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUISUNPROC epoxy_glReplacementCodeuiSUN = epoxy_glReplacementCodeuiSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN = epoxy_glReplacementCodeuiTexCoord2fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC epoxy_glReplacementCodeuiVertex3fSUN = epoxy_glReplacementCodeuiVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC epoxy_glReplacementCodeuiVertex3fvSUN = epoxy_glReplacementCodeuiVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUIVSUNPROC epoxy_glReplacementCodeuivSUN = epoxy_glReplacementCodeuivSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUSSUNPROC epoxy_glReplacementCodeusSUN = epoxy_glReplacementCodeusSUN_global_rewrite_ptr; + +PUBLIC PFNGLREPLACEMENTCODEUSVSUNPROC epoxy_glReplacementCodeusvSUN = epoxy_glReplacementCodeusvSUN_global_rewrite_ptr; + +PUBLIC PFNGLREQUESTRESIDENTPROGRAMSNVPROC epoxy_glRequestResidentProgramsNV = epoxy_glRequestResidentProgramsNV_global_rewrite_ptr; + +PUBLIC PFNGLRESETHISTOGRAMPROC epoxy_glResetHistogram = epoxy_glResetHistogram_global_rewrite_ptr; + +PUBLIC PFNGLRESETHISTOGRAMEXTPROC epoxy_glResetHistogramEXT = epoxy_glResetHistogramEXT_global_rewrite_ptr; + +PUBLIC PFNGLRESETMINMAXPROC epoxy_glResetMinmax = epoxy_glResetMinmax_global_rewrite_ptr; + +PUBLIC PFNGLRESETMINMAXEXTPROC epoxy_glResetMinmaxEXT = epoxy_glResetMinmaxEXT_global_rewrite_ptr; + +PUBLIC PFNGLRESIZEBUFFERSMESAPROC epoxy_glResizeBuffersMESA = epoxy_glResizeBuffersMESA_global_rewrite_ptr; + +PUBLIC PFNGLRESOLVEDEPTHVALUESNVPROC epoxy_glResolveDepthValuesNV = epoxy_glResolveDepthValuesNV_global_rewrite_ptr; + +PUBLIC PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC epoxy_glResolveMultisampleFramebufferAPPLE = epoxy_glResolveMultisampleFramebufferAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLRESUMETRANSFORMFEEDBACKPROC epoxy_glResumeTransformFeedback = epoxy_glResumeTransformFeedback_global_rewrite_ptr; + +PUBLIC PFNGLRESUMETRANSFORMFEEDBACKNVPROC epoxy_glResumeTransformFeedbackNV = epoxy_glResumeTransformFeedbackNV_global_rewrite_ptr; + +PUBLIC PFNGLROTATEDPROC epoxy_glRotated = epoxy_glRotated_global_rewrite_ptr; + +PUBLIC PFNGLROTATEFPROC epoxy_glRotatef = epoxy_glRotatef_global_rewrite_ptr; + +PUBLIC PFNGLROTATEXPROC epoxy_glRotatex = epoxy_glRotatex_global_rewrite_ptr; + +PUBLIC PFNGLROTATEXOESPROC epoxy_glRotatexOES = epoxy_glRotatexOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEPROC epoxy_glSampleCoverage = epoxy_glSampleCoverage_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEARBPROC epoxy_glSampleCoverageARB = epoxy_glSampleCoverageARB_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEXPROC epoxy_glSampleCoveragex = epoxy_glSampleCoveragex_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLECOVERAGEXOESPROC epoxy_glSampleCoveragexOES = epoxy_glSampleCoveragexOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMAPATIPROC epoxy_glSampleMapATI = epoxy_glSampleMapATI_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKEXTPROC epoxy_glSampleMaskEXT = epoxy_glSampleMaskEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKINDEXEDNVPROC epoxy_glSampleMaskIndexedNV = epoxy_glSampleMaskIndexedNV_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKSGISPROC epoxy_glSampleMaskSGIS = epoxy_glSampleMaskSGIS_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEMASKIPROC epoxy_glSampleMaski = epoxy_glSampleMaski_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEPATTERNEXTPROC epoxy_glSamplePatternEXT = epoxy_glSamplePatternEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLEPATTERNSGISPROC epoxy_glSamplePatternSGIS = epoxy_glSamplePatternSGIS_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIIVPROC epoxy_glSamplerParameterIiv = epoxy_glSamplerParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIIVEXTPROC epoxy_glSamplerParameterIivEXT = epoxy_glSamplerParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIIVOESPROC epoxy_glSamplerParameterIivOES = epoxy_glSamplerParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIUIVPROC epoxy_glSamplerParameterIuiv = epoxy_glSamplerParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIUIVEXTPROC epoxy_glSamplerParameterIuivEXT = epoxy_glSamplerParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIUIVOESPROC epoxy_glSamplerParameterIuivOES = epoxy_glSamplerParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERFPROC epoxy_glSamplerParameterf = epoxy_glSamplerParameterf_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERFVPROC epoxy_glSamplerParameterfv = epoxy_glSamplerParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIPROC epoxy_glSamplerParameteri = epoxy_glSamplerParameteri_global_rewrite_ptr; + +PUBLIC PFNGLSAMPLERPARAMETERIVPROC epoxy_glSamplerParameteriv = epoxy_glSamplerParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLSCALEDPROC epoxy_glScaled = epoxy_glScaled_global_rewrite_ptr; + +PUBLIC PFNGLSCALEFPROC epoxy_glScalef = epoxy_glScalef_global_rewrite_ptr; + +PUBLIC PFNGLSCALEXPROC epoxy_glScalex = epoxy_glScalex_global_rewrite_ptr; + +PUBLIC PFNGLSCALEXOESPROC epoxy_glScalexOES = epoxy_glScalexOES_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORPROC epoxy_glScissor = epoxy_glScissor_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORARRAYVPROC epoxy_glScissorArrayv = epoxy_glScissorArrayv_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORARRAYVNVPROC epoxy_glScissorArrayvNV = epoxy_glScissorArrayvNV_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDPROC epoxy_glScissorIndexed = epoxy_glScissorIndexed_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDNVPROC epoxy_glScissorIndexedNV = epoxy_glScissorIndexedNV_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDVPROC epoxy_glScissorIndexedv = epoxy_glScissorIndexedv_global_rewrite_ptr; + +PUBLIC PFNGLSCISSORINDEXEDVNVPROC epoxy_glScissorIndexedvNV = epoxy_glScissorIndexedvNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BPROC epoxy_glSecondaryColor3b = epoxy_glSecondaryColor3b_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BEXTPROC epoxy_glSecondaryColor3bEXT = epoxy_glSecondaryColor3bEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BVPROC epoxy_glSecondaryColor3bv = epoxy_glSecondaryColor3bv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3BVEXTPROC epoxy_glSecondaryColor3bvEXT = epoxy_glSecondaryColor3bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DPROC epoxy_glSecondaryColor3d = epoxy_glSecondaryColor3d_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DEXTPROC epoxy_glSecondaryColor3dEXT = epoxy_glSecondaryColor3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DVPROC epoxy_glSecondaryColor3dv = epoxy_glSecondaryColor3dv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3DVEXTPROC epoxy_glSecondaryColor3dvEXT = epoxy_glSecondaryColor3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FPROC epoxy_glSecondaryColor3f = epoxy_glSecondaryColor3f_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FEXTPROC epoxy_glSecondaryColor3fEXT = epoxy_glSecondaryColor3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FVPROC epoxy_glSecondaryColor3fv = epoxy_glSecondaryColor3fv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3FVEXTPROC epoxy_glSecondaryColor3fvEXT = epoxy_glSecondaryColor3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3HNVPROC epoxy_glSecondaryColor3hNV = epoxy_glSecondaryColor3hNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3HVNVPROC epoxy_glSecondaryColor3hvNV = epoxy_glSecondaryColor3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IPROC epoxy_glSecondaryColor3i = epoxy_glSecondaryColor3i_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IEXTPROC epoxy_glSecondaryColor3iEXT = epoxy_glSecondaryColor3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IVPROC epoxy_glSecondaryColor3iv = epoxy_glSecondaryColor3iv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3IVEXTPROC epoxy_glSecondaryColor3ivEXT = epoxy_glSecondaryColor3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SPROC epoxy_glSecondaryColor3s = epoxy_glSecondaryColor3s_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SEXTPROC epoxy_glSecondaryColor3sEXT = epoxy_glSecondaryColor3sEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SVPROC epoxy_glSecondaryColor3sv = epoxy_glSecondaryColor3sv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3SVEXTPROC epoxy_glSecondaryColor3svEXT = epoxy_glSecondaryColor3svEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBPROC epoxy_glSecondaryColor3ub = epoxy_glSecondaryColor3ub_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBEXTPROC epoxy_glSecondaryColor3ubEXT = epoxy_glSecondaryColor3ubEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBVPROC epoxy_glSecondaryColor3ubv = epoxy_glSecondaryColor3ubv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UBVEXTPROC epoxy_glSecondaryColor3ubvEXT = epoxy_glSecondaryColor3ubvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIPROC epoxy_glSecondaryColor3ui = epoxy_glSecondaryColor3ui_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIEXTPROC epoxy_glSecondaryColor3uiEXT = epoxy_glSecondaryColor3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIVPROC epoxy_glSecondaryColor3uiv = epoxy_glSecondaryColor3uiv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3UIVEXTPROC epoxy_glSecondaryColor3uivEXT = epoxy_glSecondaryColor3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USPROC epoxy_glSecondaryColor3us = epoxy_glSecondaryColor3us_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USEXTPROC epoxy_glSecondaryColor3usEXT = epoxy_glSecondaryColor3usEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USVPROC epoxy_glSecondaryColor3usv = epoxy_glSecondaryColor3usv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLOR3USVEXTPROC epoxy_glSecondaryColor3usvEXT = epoxy_glSecondaryColor3usvEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORFORMATNVPROC epoxy_glSecondaryColorFormatNV = epoxy_glSecondaryColorFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORP3UIPROC epoxy_glSecondaryColorP3ui = epoxy_glSecondaryColorP3ui_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORP3UIVPROC epoxy_glSecondaryColorP3uiv = epoxy_glSecondaryColorP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORPOINTERPROC epoxy_glSecondaryColorPointer = epoxy_glSecondaryColorPointer_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORPOINTEREXTPROC epoxy_glSecondaryColorPointerEXT = epoxy_glSecondaryColorPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLSECONDARYCOLORPOINTERLISTIBMPROC epoxy_glSecondaryColorPointerListIBM = epoxy_glSecondaryColorPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLSELECTBUFFERPROC epoxy_glSelectBuffer = epoxy_glSelectBuffer_global_rewrite_ptr; + +PUBLIC PFNGLSELECTPERFMONITORCOUNTERSAMDPROC epoxy_glSelectPerfMonitorCountersAMD = epoxy_glSelectPerfMonitorCountersAMD_global_rewrite_ptr; + +PUBLIC PFNGLSEPARABLEFILTER2DPROC epoxy_glSeparableFilter2D = epoxy_glSeparableFilter2D_global_rewrite_ptr; + +PUBLIC PFNGLSEPARABLEFILTER2DEXTPROC epoxy_glSeparableFilter2DEXT = epoxy_glSeparableFilter2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLSETFENCEAPPLEPROC epoxy_glSetFenceAPPLE = epoxy_glSetFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLSETFENCENVPROC epoxy_glSetFenceNV = epoxy_glSetFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLSETFRAGMENTSHADERCONSTANTATIPROC epoxy_glSetFragmentShaderConstantATI = epoxy_glSetFragmentShaderConstantATI_global_rewrite_ptr; + +PUBLIC PFNGLSETINVARIANTEXTPROC epoxy_glSetInvariantEXT = epoxy_glSetInvariantEXT_global_rewrite_ptr; + +PUBLIC PFNGLSETLOCALCONSTANTEXTPROC epoxy_glSetLocalConstantEXT = epoxy_glSetLocalConstantEXT_global_rewrite_ptr; + +PUBLIC PFNGLSETMULTISAMPLEFVAMDPROC epoxy_glSetMultisamplefvAMD = epoxy_glSetMultisamplefvAMD_global_rewrite_ptr; + +PUBLIC PFNGLSHADEMODELPROC epoxy_glShadeModel = epoxy_glShadeModel_global_rewrite_ptr; + +PUBLIC PFNGLSHADERBINARYPROC epoxy_glShaderBinary = epoxy_glShaderBinary_global_rewrite_ptr; + +PUBLIC PFNGLSHADEROP1EXTPROC epoxy_glShaderOp1EXT = epoxy_glShaderOp1EXT_global_rewrite_ptr; + +PUBLIC PFNGLSHADEROP2EXTPROC epoxy_glShaderOp2EXT = epoxy_glShaderOp2EXT_global_rewrite_ptr; + +PUBLIC PFNGLSHADEROP3EXTPROC epoxy_glShaderOp3EXT = epoxy_glShaderOp3EXT_global_rewrite_ptr; + +PUBLIC PFNGLSHADERSOURCEPROC epoxy_glShaderSource = epoxy_glShaderSource_global_rewrite_ptr; + +PUBLIC PFNGLSHADERSOURCEARBPROC epoxy_glShaderSourceARB = epoxy_glShaderSourceARB_global_rewrite_ptr; + +PUBLIC PFNGLSHADERSTORAGEBLOCKBINDINGPROC epoxy_glShaderStorageBlockBinding = epoxy_glShaderStorageBlockBinding_global_rewrite_ptr; + +PUBLIC PFNGLSHARPENTEXFUNCSGISPROC epoxy_glSharpenTexFuncSGIS = epoxy_glSharpenTexFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERFSGIXPROC epoxy_glSpriteParameterfSGIX = epoxy_glSpriteParameterfSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERFVSGIXPROC epoxy_glSpriteParameterfvSGIX = epoxy_glSpriteParameterfvSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERISGIXPROC epoxy_glSpriteParameteriSGIX = epoxy_glSpriteParameteriSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSPRITEPARAMETERIVSGIXPROC epoxy_glSpriteParameterivSGIX = epoxy_glSpriteParameterivSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSTARTINSTRUMENTSSGIXPROC epoxy_glStartInstrumentsSGIX = epoxy_glStartInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSTARTTILINGQCOMPROC epoxy_glStartTilingQCOM = epoxy_glStartTilingQCOM_global_rewrite_ptr; + +PUBLIC PFNGLSTATECAPTURENVPROC epoxy_glStateCaptureNV = epoxy_glStateCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILCLEARTAGEXTPROC epoxy_glStencilClearTagEXT = epoxy_glStencilClearTagEXT_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFILLPATHINSTANCEDNVPROC epoxy_glStencilFillPathInstancedNV = epoxy_glStencilFillPathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFILLPATHNVPROC epoxy_glStencilFillPathNV = epoxy_glStencilFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFUNCPROC epoxy_glStencilFunc = epoxy_glStencilFunc_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFUNCSEPARATEPROC epoxy_glStencilFuncSeparate = epoxy_glStencilFuncSeparate_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILFUNCSEPARATEATIPROC epoxy_glStencilFuncSeparateATI = epoxy_glStencilFuncSeparateATI_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILMASKPROC epoxy_glStencilMask = epoxy_glStencilMask_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILMASKSEPARATEPROC epoxy_glStencilMaskSeparate = epoxy_glStencilMaskSeparate_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPPROC epoxy_glStencilOp = epoxy_glStencilOp_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPSEPARATEPROC epoxy_glStencilOpSeparate = epoxy_glStencilOpSeparate_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPSEPARATEATIPROC epoxy_glStencilOpSeparateATI = epoxy_glStencilOpSeparateATI_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILOPVALUEAMDPROC epoxy_glStencilOpValueAMD = epoxy_glStencilOpValueAMD_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC epoxy_glStencilStrokePathInstancedNV = epoxy_glStencilStrokePathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILSTROKEPATHNVPROC epoxy_glStencilStrokePathNV = epoxy_glStencilStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC epoxy_glStencilThenCoverFillPathInstancedNV = epoxy_glStencilThenCoverFillPathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERFILLPATHNVPROC epoxy_glStencilThenCoverFillPathNV = epoxy_glStencilThenCoverFillPathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC epoxy_glStencilThenCoverStrokePathInstancedNV = epoxy_glStencilThenCoverStrokePathInstancedNV_global_rewrite_ptr; + +PUBLIC PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC epoxy_glStencilThenCoverStrokePathNV = epoxy_glStencilThenCoverStrokePathNV_global_rewrite_ptr; + +PUBLIC PFNGLSTOPINSTRUMENTSSGIXPROC epoxy_glStopInstrumentsSGIX = epoxy_glStopInstrumentsSGIX_global_rewrite_ptr; + +PUBLIC PFNGLSTRINGMARKERGREMEDYPROC epoxy_glStringMarkerGREMEDY = epoxy_glStringMarkerGREMEDY_global_rewrite_ptr; + +PUBLIC PFNGLSUBPIXELPRECISIONBIASNVPROC epoxy_glSubpixelPrecisionBiasNV = epoxy_glSubpixelPrecisionBiasNV_global_rewrite_ptr; + +PUBLIC PFNGLSWIZZLEEXTPROC epoxy_glSwizzleEXT = epoxy_glSwizzleEXT_global_rewrite_ptr; + +PUBLIC PFNGLSYNCTEXTUREINTELPROC epoxy_glSyncTextureINTEL = epoxy_glSyncTextureINTEL_global_rewrite_ptr; + +PUBLIC PFNGLTAGSAMPLEBUFFERSGIXPROC epoxy_glTagSampleBufferSGIX = epoxy_glTagSampleBufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3BEXTPROC epoxy_glTangent3bEXT = epoxy_glTangent3bEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3BVEXTPROC epoxy_glTangent3bvEXT = epoxy_glTangent3bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3DEXTPROC epoxy_glTangent3dEXT = epoxy_glTangent3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3DVEXTPROC epoxy_glTangent3dvEXT = epoxy_glTangent3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3FEXTPROC epoxy_glTangent3fEXT = epoxy_glTangent3fEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3FVEXTPROC epoxy_glTangent3fvEXT = epoxy_glTangent3fvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3IEXTPROC epoxy_glTangent3iEXT = epoxy_glTangent3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3IVEXTPROC epoxy_glTangent3ivEXT = epoxy_glTangent3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3SEXTPROC epoxy_glTangent3sEXT = epoxy_glTangent3sEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENT3SVEXTPROC epoxy_glTangent3svEXT = epoxy_glTangent3svEXT_global_rewrite_ptr; + +PUBLIC PFNGLTANGENTPOINTEREXTPROC epoxy_glTangentPointerEXT = epoxy_glTangentPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLTBUFFERMASK3DFXPROC epoxy_glTbufferMask3DFX = epoxy_glTbufferMask3DFX_global_rewrite_ptr; + +PUBLIC PFNGLTESSELLATIONFACTORAMDPROC epoxy_glTessellationFactorAMD = epoxy_glTessellationFactorAMD_global_rewrite_ptr; + +PUBLIC PFNGLTESSELLATIONMODEAMDPROC epoxy_glTessellationModeAMD = epoxy_glTessellationModeAMD_global_rewrite_ptr; + +PUBLIC PFNGLTESTFENCEAPPLEPROC epoxy_glTestFenceAPPLE = epoxy_glTestFenceAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLTESTFENCENVPROC epoxy_glTestFenceNV = epoxy_glTestFenceNV_global_rewrite_ptr; + +PUBLIC PFNGLTESTOBJECTAPPLEPROC epoxy_glTestObjectAPPLE = epoxy_glTestObjectAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERPROC epoxy_glTexBuffer = epoxy_glTexBuffer_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERARBPROC epoxy_glTexBufferARB = epoxy_glTexBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFEREXTPROC epoxy_glTexBufferEXT = epoxy_glTexBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFEROESPROC epoxy_glTexBufferOES = epoxy_glTexBufferOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERRANGEPROC epoxy_glTexBufferRange = epoxy_glTexBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERRANGEEXTPROC epoxy_glTexBufferRangeEXT = epoxy_glTexBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUFFERRANGEOESPROC epoxy_glTexBufferRangeOES = epoxy_glTexBufferRangeOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUMPPARAMETERFVATIPROC epoxy_glTexBumpParameterfvATI = epoxy_glTexBumpParameterfvATI_global_rewrite_ptr; + +PUBLIC PFNGLTEXBUMPPARAMETERIVATIPROC epoxy_glTexBumpParameterivATI = epoxy_glTexBumpParameterivATI_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1BOESPROC epoxy_glTexCoord1bOES = epoxy_glTexCoord1bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1BVOESPROC epoxy_glTexCoord1bvOES = epoxy_glTexCoord1bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1DPROC epoxy_glTexCoord1d = epoxy_glTexCoord1d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1DVPROC epoxy_glTexCoord1dv = epoxy_glTexCoord1dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1FPROC epoxy_glTexCoord1f = epoxy_glTexCoord1f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1FVPROC epoxy_glTexCoord1fv = epoxy_glTexCoord1fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1HNVPROC epoxy_glTexCoord1hNV = epoxy_glTexCoord1hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1HVNVPROC epoxy_glTexCoord1hvNV = epoxy_glTexCoord1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1IPROC epoxy_glTexCoord1i = epoxy_glTexCoord1i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1IVPROC epoxy_glTexCoord1iv = epoxy_glTexCoord1iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1SPROC epoxy_glTexCoord1s = epoxy_glTexCoord1s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1SVPROC epoxy_glTexCoord1sv = epoxy_glTexCoord1sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1XOESPROC epoxy_glTexCoord1xOES = epoxy_glTexCoord1xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD1XVOESPROC epoxy_glTexCoord1xvOES = epoxy_glTexCoord1xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2BOESPROC epoxy_glTexCoord2bOES = epoxy_glTexCoord2bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2BVOESPROC epoxy_glTexCoord2bvOES = epoxy_glTexCoord2bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2DPROC epoxy_glTexCoord2d = epoxy_glTexCoord2d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2DVPROC epoxy_glTexCoord2dv = epoxy_glTexCoord2dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FPROC epoxy_glTexCoord2f = epoxy_glTexCoord2f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor3fVertex3fSUN = epoxy_glTexCoord2fColor3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor3fVertex3fvSUN = epoxy_glTexCoord2fColor3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN = epoxy_glTexCoord2fColor4fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC epoxy_glTexCoord2fColor4ubVertex3fSUN = epoxy_glTexCoord2fColor4ubVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC epoxy_glTexCoord2fColor4ubVertex3fvSUN = epoxy_glTexCoord2fColor4ubVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC epoxy_glTexCoord2fNormal3fVertex3fSUN = epoxy_glTexCoord2fNormal3fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC epoxy_glTexCoord2fNormal3fVertex3fvSUN = epoxy_glTexCoord2fNormal3fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FVERTEX3FSUNPROC epoxy_glTexCoord2fVertex3fSUN = epoxy_glTexCoord2fVertex3fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FVERTEX3FVSUNPROC epoxy_glTexCoord2fVertex3fvSUN = epoxy_glTexCoord2fVertex3fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2FVPROC epoxy_glTexCoord2fv = epoxy_glTexCoord2fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2HNVPROC epoxy_glTexCoord2hNV = epoxy_glTexCoord2hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2HVNVPROC epoxy_glTexCoord2hvNV = epoxy_glTexCoord2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2IPROC epoxy_glTexCoord2i = epoxy_glTexCoord2i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2IVPROC epoxy_glTexCoord2iv = epoxy_glTexCoord2iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2SPROC epoxy_glTexCoord2s = epoxy_glTexCoord2s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2SVPROC epoxy_glTexCoord2sv = epoxy_glTexCoord2sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2XOESPROC epoxy_glTexCoord2xOES = epoxy_glTexCoord2xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD2XVOESPROC epoxy_glTexCoord2xvOES = epoxy_glTexCoord2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3BOESPROC epoxy_glTexCoord3bOES = epoxy_glTexCoord3bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3BVOESPROC epoxy_glTexCoord3bvOES = epoxy_glTexCoord3bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3DPROC epoxy_glTexCoord3d = epoxy_glTexCoord3d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3DVPROC epoxy_glTexCoord3dv = epoxy_glTexCoord3dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3FPROC epoxy_glTexCoord3f = epoxy_glTexCoord3f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3FVPROC epoxy_glTexCoord3fv = epoxy_glTexCoord3fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3HNVPROC epoxy_glTexCoord3hNV = epoxy_glTexCoord3hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3HVNVPROC epoxy_glTexCoord3hvNV = epoxy_glTexCoord3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3IPROC epoxy_glTexCoord3i = epoxy_glTexCoord3i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3IVPROC epoxy_glTexCoord3iv = epoxy_glTexCoord3iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3SPROC epoxy_glTexCoord3s = epoxy_glTexCoord3s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3SVPROC epoxy_glTexCoord3sv = epoxy_glTexCoord3sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3XOESPROC epoxy_glTexCoord3xOES = epoxy_glTexCoord3xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD3XVOESPROC epoxy_glTexCoord3xvOES = epoxy_glTexCoord3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4BOESPROC epoxy_glTexCoord4bOES = epoxy_glTexCoord4bOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4BVOESPROC epoxy_glTexCoord4bvOES = epoxy_glTexCoord4bvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4DPROC epoxy_glTexCoord4d = epoxy_glTexCoord4d_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4DVPROC epoxy_glTexCoord4dv = epoxy_glTexCoord4dv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FPROC epoxy_glTexCoord4f = epoxy_glTexCoord4f_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN = epoxy_glTexCoord4fColor4fNormal3fVertex4fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FVERTEX4FSUNPROC epoxy_glTexCoord4fVertex4fSUN = epoxy_glTexCoord4fVertex4fSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FVERTEX4FVSUNPROC epoxy_glTexCoord4fVertex4fvSUN = epoxy_glTexCoord4fVertex4fvSUN_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4FVPROC epoxy_glTexCoord4fv = epoxy_glTexCoord4fv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4HNVPROC epoxy_glTexCoord4hNV = epoxy_glTexCoord4hNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4HVNVPROC epoxy_glTexCoord4hvNV = epoxy_glTexCoord4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4IPROC epoxy_glTexCoord4i = epoxy_glTexCoord4i_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4IVPROC epoxy_glTexCoord4iv = epoxy_glTexCoord4iv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4SPROC epoxy_glTexCoord4s = epoxy_glTexCoord4s_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4SVPROC epoxy_glTexCoord4sv = epoxy_glTexCoord4sv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4XOESPROC epoxy_glTexCoord4xOES = epoxy_glTexCoord4xOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORD4XVOESPROC epoxy_glTexCoord4xvOES = epoxy_glTexCoord4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDFORMATNVPROC epoxy_glTexCoordFormatNV = epoxy_glTexCoordFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP1UIPROC epoxy_glTexCoordP1ui = epoxy_glTexCoordP1ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP1UIVPROC epoxy_glTexCoordP1uiv = epoxy_glTexCoordP1uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP2UIPROC epoxy_glTexCoordP2ui = epoxy_glTexCoordP2ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP2UIVPROC epoxy_glTexCoordP2uiv = epoxy_glTexCoordP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP3UIPROC epoxy_glTexCoordP3ui = epoxy_glTexCoordP3ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP3UIVPROC epoxy_glTexCoordP3uiv = epoxy_glTexCoordP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP4UIPROC epoxy_glTexCoordP4ui = epoxy_glTexCoordP4ui_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDP4UIVPROC epoxy_glTexCoordP4uiv = epoxy_glTexCoordP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTERPROC epoxy_glTexCoordPointer = epoxy_glTexCoordPointer_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTEREXTPROC epoxy_glTexCoordPointerEXT = epoxy_glTexCoordPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTERLISTIBMPROC epoxy_glTexCoordPointerListIBM = epoxy_glTexCoordPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLTEXCOORDPOINTERVINTELPROC epoxy_glTexCoordPointervINTEL = epoxy_glTexCoordPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVFPROC epoxy_glTexEnvf = epoxy_glTexEnvf_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVFVPROC epoxy_glTexEnvfv = epoxy_glTexEnvfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVIPROC epoxy_glTexEnvi = epoxy_glTexEnvi_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVIVPROC epoxy_glTexEnviv = epoxy_glTexEnviv_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXPROC epoxy_glTexEnvx = epoxy_glTexEnvx_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXOESPROC epoxy_glTexEnvxOES = epoxy_glTexEnvxOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXVPROC epoxy_glTexEnvxv = epoxy_glTexEnvxv_global_rewrite_ptr; + +PUBLIC PFNGLTEXENVXVOESPROC epoxy_glTexEnvxvOES = epoxy_glTexEnvxvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXFILTERFUNCSGISPROC epoxy_glTexFilterFuncSGIS = epoxy_glTexFilterFuncSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENDPROC epoxy_glTexGend = epoxy_glTexGend_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENDVPROC epoxy_glTexGendv = epoxy_glTexGendv_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFPROC epoxy_glTexGenf = epoxy_glTexGenf_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFOESPROC epoxy_glTexGenfOES = epoxy_glTexGenfOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFVPROC epoxy_glTexGenfv = epoxy_glTexGenfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENFVOESPROC epoxy_glTexGenfvOES = epoxy_glTexGenfvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIPROC epoxy_glTexGeni = epoxy_glTexGeni_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIOESPROC epoxy_glTexGeniOES = epoxy_glTexGeniOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIVPROC epoxy_glTexGeniv = epoxy_glTexGeniv_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENIVOESPROC epoxy_glTexGenivOES = epoxy_glTexGenivOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENXOESPROC epoxy_glTexGenxOES = epoxy_glTexGenxOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXGENXVOESPROC epoxy_glTexGenxvOES = epoxy_glTexGenxvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE1DPROC epoxy_glTexImage1D = epoxy_glTexImage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE2DPROC epoxy_glTexImage2D = epoxy_glTexImage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE2DMULTISAMPLEPROC epoxy_glTexImage2DMultisample = epoxy_glTexImage2DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage2DMultisampleCoverageNV = epoxy_glTexImage2DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DPROC epoxy_glTexImage3D = epoxy_glTexImage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DEXTPROC epoxy_glTexImage3DEXT = epoxy_glTexImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DMULTISAMPLEPROC epoxy_glTexImage3DMultisample = epoxy_glTexImage3DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTexImage3DMultisampleCoverageNV = epoxy_glTexImage3DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE3DOESPROC epoxy_glTexImage3DOES = epoxy_glTexImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXIMAGE4DSGISPROC epoxy_glTexImage4DSGIS = epoxy_glTexImage4DSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXPAGECOMMITMENTARBPROC epoxy_glTexPageCommitmentARB = epoxy_glTexPageCommitmentARB_global_rewrite_ptr; + +PUBLIC PFNGLTEXPAGECOMMITMENTEXTPROC epoxy_glTexPageCommitmentEXT = epoxy_glTexPageCommitmentEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIIVPROC epoxy_glTexParameterIiv = epoxy_glTexParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIIVEXTPROC epoxy_glTexParameterIivEXT = epoxy_glTexParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIIVOESPROC epoxy_glTexParameterIivOES = epoxy_glTexParameterIivOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIUIVPROC epoxy_glTexParameterIuiv = epoxy_glTexParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIUIVEXTPROC epoxy_glTexParameterIuivEXT = epoxy_glTexParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIUIVOESPROC epoxy_glTexParameterIuivOES = epoxy_glTexParameterIuivOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERFPROC epoxy_glTexParameterf = epoxy_glTexParameterf_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERFVPROC epoxy_glTexParameterfv = epoxy_glTexParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIPROC epoxy_glTexParameteri = epoxy_glTexParameteri_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERIVPROC epoxy_glTexParameteriv = epoxy_glTexParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXPROC epoxy_glTexParameterx = epoxy_glTexParameterx_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXOESPROC epoxy_glTexParameterxOES = epoxy_glTexParameterxOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXVPROC epoxy_glTexParameterxv = epoxy_glTexParameterxv_global_rewrite_ptr; + +PUBLIC PFNGLTEXPARAMETERXVOESPROC epoxy_glTexParameterxvOES = epoxy_glTexParameterxvOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXRENDERBUFFERNVPROC epoxy_glTexRenderbufferNV = epoxy_glTexRenderbufferNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE1DPROC epoxy_glTexStorage1D = epoxy_glTexStorage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE1DEXTPROC epoxy_glTexStorage1DEXT = epoxy_glTexStorage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE2DPROC epoxy_glTexStorage2D = epoxy_glTexStorage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE2DEXTPROC epoxy_glTexStorage2DEXT = epoxy_glTexStorage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE2DMULTISAMPLEPROC epoxy_glTexStorage2DMultisample = epoxy_glTexStorage2DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DPROC epoxy_glTexStorage3D = epoxy_glTexStorage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DEXTPROC epoxy_glTexStorage3DEXT = epoxy_glTexStorage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DMULTISAMPLEPROC epoxy_glTexStorage3DMultisample = epoxy_glTexStorage3DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC epoxy_glTexStorage3DMultisampleOES = epoxy_glTexStorage3DMultisampleOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXSTORAGESPARSEAMDPROC epoxy_glTexStorageSparseAMD = epoxy_glTexStorageSparseAMD_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE1DPROC epoxy_glTexSubImage1D = epoxy_glTexSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE1DEXTPROC epoxy_glTexSubImage1DEXT = epoxy_glTexSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE2DPROC epoxy_glTexSubImage2D = epoxy_glTexSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE2DEXTPROC epoxy_glTexSubImage2DEXT = epoxy_glTexSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE3DPROC epoxy_glTexSubImage3D = epoxy_glTexSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE3DEXTPROC epoxy_glTexSubImage3DEXT = epoxy_glTexSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE3DOESPROC epoxy_glTexSubImage3DOES = epoxy_glTexSubImage3DOES_global_rewrite_ptr; + +PUBLIC PFNGLTEXSUBIMAGE4DSGISPROC epoxy_glTexSubImage4DSGIS = epoxy_glTexSubImage4DSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBARRIERPROC epoxy_glTextureBarrier = epoxy_glTextureBarrier_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBARRIERNVPROC epoxy_glTextureBarrierNV = epoxy_glTextureBarrierNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFERPROC epoxy_glTextureBuffer = epoxy_glTextureBuffer_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFEREXTPROC epoxy_glTextureBufferEXT = epoxy_glTextureBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFERRANGEPROC epoxy_glTextureBufferRange = epoxy_glTextureBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREBUFFERRANGEEXTPROC epoxy_glTextureBufferRangeEXT = epoxy_glTextureBufferRangeEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURECOLORMASKSGISPROC epoxy_glTextureColorMaskSGIS = epoxy_glTextureColorMaskSGIS_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE1DEXTPROC epoxy_glTextureImage1DEXT = epoxy_glTextureImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE2DEXTPROC epoxy_glTextureImage2DEXT = epoxy_glTextureImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage2DMultisampleCoverageNV = epoxy_glTextureImage2DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC epoxy_glTextureImage2DMultisampleNV = epoxy_glTextureImage2DMultisampleNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE3DEXTPROC epoxy_glTextureImage3DEXT = epoxy_glTextureImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC epoxy_glTextureImage3DMultisampleCoverageNV = epoxy_glTextureImage3DMultisampleCoverageNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC epoxy_glTextureImage3DMultisampleNV = epoxy_glTextureImage3DMultisampleNV_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURELIGHTEXTPROC epoxy_glTextureLightEXT = epoxy_glTextureLightEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREMATERIALEXTPROC epoxy_glTextureMaterialEXT = epoxy_glTextureMaterialEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURENORMALEXTPROC epoxy_glTextureNormalEXT = epoxy_glTextureNormalEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPAGECOMMITMENTEXTPROC epoxy_glTexturePageCommitmentEXT = epoxy_glTexturePageCommitmentEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIIVPROC epoxy_glTextureParameterIiv = epoxy_glTextureParameterIiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIIVEXTPROC epoxy_glTextureParameterIivEXT = epoxy_glTextureParameterIivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIUIVPROC epoxy_glTextureParameterIuiv = epoxy_glTextureParameterIuiv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIUIVEXTPROC epoxy_glTextureParameterIuivEXT = epoxy_glTextureParameterIuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFPROC epoxy_glTextureParameterf = epoxy_glTextureParameterf_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFEXTPROC epoxy_glTextureParameterfEXT = epoxy_glTextureParameterfEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFVPROC epoxy_glTextureParameterfv = epoxy_glTextureParameterfv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERFVEXTPROC epoxy_glTextureParameterfvEXT = epoxy_glTextureParameterfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIPROC epoxy_glTextureParameteri = epoxy_glTextureParameteri_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIEXTPROC epoxy_glTextureParameteriEXT = epoxy_glTextureParameteriEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIVPROC epoxy_glTextureParameteriv = epoxy_glTextureParameteriv_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREPARAMETERIVEXTPROC epoxy_glTextureParameterivEXT = epoxy_glTextureParameterivEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURERANGEAPPLEPROC epoxy_glTextureRangeAPPLE = epoxy_glTextureRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURERENDERBUFFEREXTPROC epoxy_glTextureRenderbufferEXT = epoxy_glTextureRenderbufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE1DPROC epoxy_glTextureStorage1D = epoxy_glTextureStorage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE1DEXTPROC epoxy_glTextureStorage1DEXT = epoxy_glTextureStorage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DPROC epoxy_glTextureStorage2D = epoxy_glTextureStorage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DEXTPROC epoxy_glTextureStorage2DEXT = epoxy_glTextureStorage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC epoxy_glTextureStorage2DMultisample = epoxy_glTextureStorage2DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC epoxy_glTextureStorage2DMultisampleEXT = epoxy_glTextureStorage2DMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DPROC epoxy_glTextureStorage3D = epoxy_glTextureStorage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DEXTPROC epoxy_glTextureStorage3DEXT = epoxy_glTextureStorage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC epoxy_glTextureStorage3DMultisample = epoxy_glTextureStorage3DMultisample_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC epoxy_glTextureStorage3DMultisampleEXT = epoxy_glTextureStorage3DMultisampleEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESTORAGESPARSEAMDPROC epoxy_glTextureStorageSparseAMD = epoxy_glTextureStorageSparseAMD_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE1DPROC epoxy_glTextureSubImage1D = epoxy_glTextureSubImage1D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE1DEXTPROC epoxy_glTextureSubImage1DEXT = epoxy_glTextureSubImage1DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE2DPROC epoxy_glTextureSubImage2D = epoxy_glTextureSubImage2D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE2DEXTPROC epoxy_glTextureSubImage2DEXT = epoxy_glTextureSubImage2DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE3DPROC epoxy_glTextureSubImage3D = epoxy_glTextureSubImage3D_global_rewrite_ptr; + +PUBLIC PFNGLTEXTURESUBIMAGE3DEXTPROC epoxy_glTextureSubImage3DEXT = epoxy_glTextureSubImage3DEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREVIEWPROC epoxy_glTextureView = epoxy_glTextureView_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREVIEWEXTPROC epoxy_glTextureViewEXT = epoxy_glTextureViewEXT_global_rewrite_ptr; + +PUBLIC PFNGLTEXTUREVIEWOESPROC epoxy_glTextureViewOES = epoxy_glTextureViewOES_global_rewrite_ptr; + +PUBLIC PFNGLTRACKMATRIXNVPROC epoxy_glTrackMatrixNV = epoxy_glTrackMatrixNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC epoxy_glTransformFeedbackAttribsNV = epoxy_glTransformFeedbackAttribsNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC epoxy_glTransformFeedbackBufferBase = epoxy_glTransformFeedbackBufferBase_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC epoxy_glTransformFeedbackBufferRange = epoxy_glTransformFeedbackBufferRange_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC epoxy_glTransformFeedbackStreamAttribsNV = epoxy_glTransformFeedbackStreamAttribsNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKVARYINGSPROC epoxy_glTransformFeedbackVaryings = epoxy_glTransformFeedbackVaryings_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC epoxy_glTransformFeedbackVaryingsEXT = epoxy_glTransformFeedbackVaryingsEXT_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC epoxy_glTransformFeedbackVaryingsNV = epoxy_glTransformFeedbackVaryingsNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSFORMPATHNVPROC epoxy_glTransformPathNV = epoxy_glTransformPathNV_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEDPROC epoxy_glTranslated = epoxy_glTranslated_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEFPROC epoxy_glTranslatef = epoxy_glTranslatef_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEXPROC epoxy_glTranslatex = epoxy_glTranslatex_global_rewrite_ptr; + +PUBLIC PFNGLTRANSLATEXOESPROC epoxy_glTranslatexOES = epoxy_glTranslatexOES_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1DPROC epoxy_glUniform1d = epoxy_glUniform1d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1DVPROC epoxy_glUniform1dv = epoxy_glUniform1dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FPROC epoxy_glUniform1f = epoxy_glUniform1f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FARBPROC epoxy_glUniform1fARB = epoxy_glUniform1fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FVPROC epoxy_glUniform1fv = epoxy_glUniform1fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1FVARBPROC epoxy_glUniform1fvARB = epoxy_glUniform1fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IPROC epoxy_glUniform1i = epoxy_glUniform1i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64ARBPROC epoxy_glUniform1i64ARB = epoxy_glUniform1i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64NVPROC epoxy_glUniform1i64NV = epoxy_glUniform1i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64VARBPROC epoxy_glUniform1i64vARB = epoxy_glUniform1i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1I64VNVPROC epoxy_glUniform1i64vNV = epoxy_glUniform1i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IARBPROC epoxy_glUniform1iARB = epoxy_glUniform1iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IVPROC epoxy_glUniform1iv = epoxy_glUniform1iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1IVARBPROC epoxy_glUniform1ivARB = epoxy_glUniform1ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIPROC epoxy_glUniform1ui = epoxy_glUniform1ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64ARBPROC epoxy_glUniform1ui64ARB = epoxy_glUniform1ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64NVPROC epoxy_glUniform1ui64NV = epoxy_glUniform1ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64VARBPROC epoxy_glUniform1ui64vARB = epoxy_glUniform1ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UI64VNVPROC epoxy_glUniform1ui64vNV = epoxy_glUniform1ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIEXTPROC epoxy_glUniform1uiEXT = epoxy_glUniform1uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIVPROC epoxy_glUniform1uiv = epoxy_glUniform1uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM1UIVEXTPROC epoxy_glUniform1uivEXT = epoxy_glUniform1uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2DPROC epoxy_glUniform2d = epoxy_glUniform2d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2DVPROC epoxy_glUniform2dv = epoxy_glUniform2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FPROC epoxy_glUniform2f = epoxy_glUniform2f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FARBPROC epoxy_glUniform2fARB = epoxy_glUniform2fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FVPROC epoxy_glUniform2fv = epoxy_glUniform2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2FVARBPROC epoxy_glUniform2fvARB = epoxy_glUniform2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IPROC epoxy_glUniform2i = epoxy_glUniform2i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64ARBPROC epoxy_glUniform2i64ARB = epoxy_glUniform2i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64NVPROC epoxy_glUniform2i64NV = epoxy_glUniform2i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64VARBPROC epoxy_glUniform2i64vARB = epoxy_glUniform2i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2I64VNVPROC epoxy_glUniform2i64vNV = epoxy_glUniform2i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IARBPROC epoxy_glUniform2iARB = epoxy_glUniform2iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IVPROC epoxy_glUniform2iv = epoxy_glUniform2iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2IVARBPROC epoxy_glUniform2ivARB = epoxy_glUniform2ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIPROC epoxy_glUniform2ui = epoxy_glUniform2ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64ARBPROC epoxy_glUniform2ui64ARB = epoxy_glUniform2ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64NVPROC epoxy_glUniform2ui64NV = epoxy_glUniform2ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64VARBPROC epoxy_glUniform2ui64vARB = epoxy_glUniform2ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UI64VNVPROC epoxy_glUniform2ui64vNV = epoxy_glUniform2ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIEXTPROC epoxy_glUniform2uiEXT = epoxy_glUniform2uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIVPROC epoxy_glUniform2uiv = epoxy_glUniform2uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM2UIVEXTPROC epoxy_glUniform2uivEXT = epoxy_glUniform2uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3DPROC epoxy_glUniform3d = epoxy_glUniform3d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3DVPROC epoxy_glUniform3dv = epoxy_glUniform3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FPROC epoxy_glUniform3f = epoxy_glUniform3f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FARBPROC epoxy_glUniform3fARB = epoxy_glUniform3fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FVPROC epoxy_glUniform3fv = epoxy_glUniform3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3FVARBPROC epoxy_glUniform3fvARB = epoxy_glUniform3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IPROC epoxy_glUniform3i = epoxy_glUniform3i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64ARBPROC epoxy_glUniform3i64ARB = epoxy_glUniform3i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64NVPROC epoxy_glUniform3i64NV = epoxy_glUniform3i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64VARBPROC epoxy_glUniform3i64vARB = epoxy_glUniform3i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3I64VNVPROC epoxy_glUniform3i64vNV = epoxy_glUniform3i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IARBPROC epoxy_glUniform3iARB = epoxy_glUniform3iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IVPROC epoxy_glUniform3iv = epoxy_glUniform3iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3IVARBPROC epoxy_glUniform3ivARB = epoxy_glUniform3ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIPROC epoxy_glUniform3ui = epoxy_glUniform3ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64ARBPROC epoxy_glUniform3ui64ARB = epoxy_glUniform3ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64NVPROC epoxy_glUniform3ui64NV = epoxy_glUniform3ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64VARBPROC epoxy_glUniform3ui64vARB = epoxy_glUniform3ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UI64VNVPROC epoxy_glUniform3ui64vNV = epoxy_glUniform3ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIEXTPROC epoxy_glUniform3uiEXT = epoxy_glUniform3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIVPROC epoxy_glUniform3uiv = epoxy_glUniform3uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM3UIVEXTPROC epoxy_glUniform3uivEXT = epoxy_glUniform3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4DPROC epoxy_glUniform4d = epoxy_glUniform4d_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4DVPROC epoxy_glUniform4dv = epoxy_glUniform4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FPROC epoxy_glUniform4f = epoxy_glUniform4f_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FARBPROC epoxy_glUniform4fARB = epoxy_glUniform4fARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FVPROC epoxy_glUniform4fv = epoxy_glUniform4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4FVARBPROC epoxy_glUniform4fvARB = epoxy_glUniform4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IPROC epoxy_glUniform4i = epoxy_glUniform4i_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64ARBPROC epoxy_glUniform4i64ARB = epoxy_glUniform4i64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64NVPROC epoxy_glUniform4i64NV = epoxy_glUniform4i64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64VARBPROC epoxy_glUniform4i64vARB = epoxy_glUniform4i64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4I64VNVPROC epoxy_glUniform4i64vNV = epoxy_glUniform4i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IARBPROC epoxy_glUniform4iARB = epoxy_glUniform4iARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IVPROC epoxy_glUniform4iv = epoxy_glUniform4iv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4IVARBPROC epoxy_glUniform4ivARB = epoxy_glUniform4ivARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIPROC epoxy_glUniform4ui = epoxy_glUniform4ui_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64ARBPROC epoxy_glUniform4ui64ARB = epoxy_glUniform4ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64NVPROC epoxy_glUniform4ui64NV = epoxy_glUniform4ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64VARBPROC epoxy_glUniform4ui64vARB = epoxy_glUniform4ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UI64VNVPROC epoxy_glUniform4ui64vNV = epoxy_glUniform4ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIEXTPROC epoxy_glUniform4uiEXT = epoxy_glUniform4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIVPROC epoxy_glUniform4uiv = epoxy_glUniform4uiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORM4UIVEXTPROC epoxy_glUniform4uivEXT = epoxy_glUniform4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMBLOCKBINDINGPROC epoxy_glUniformBlockBinding = epoxy_glUniformBlockBinding_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMBUFFEREXTPROC epoxy_glUniformBufferEXT = epoxy_glUniformBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64ARBPROC epoxy_glUniformHandleui64ARB = epoxy_glUniformHandleui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64NVPROC epoxy_glUniformHandleui64NV = epoxy_glUniformHandleui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64VARBPROC epoxy_glUniformHandleui64vARB = epoxy_glUniformHandleui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMHANDLEUI64VNVPROC epoxy_glUniformHandleui64vNV = epoxy_glUniformHandleui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2DVPROC epoxy_glUniformMatrix2dv = epoxy_glUniformMatrix2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2FVPROC epoxy_glUniformMatrix2fv = epoxy_glUniformMatrix2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2FVARBPROC epoxy_glUniformMatrix2fvARB = epoxy_glUniformMatrix2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X3DVPROC epoxy_glUniformMatrix2x3dv = epoxy_glUniformMatrix2x3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X3FVPROC epoxy_glUniformMatrix2x3fv = epoxy_glUniformMatrix2x3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X3FVNVPROC epoxy_glUniformMatrix2x3fvNV = epoxy_glUniformMatrix2x3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X4DVPROC epoxy_glUniformMatrix2x4dv = epoxy_glUniformMatrix2x4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X4FVPROC epoxy_glUniformMatrix2x4fv = epoxy_glUniformMatrix2x4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX2X4FVNVPROC epoxy_glUniformMatrix2x4fvNV = epoxy_glUniformMatrix2x4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3DVPROC epoxy_glUniformMatrix3dv = epoxy_glUniformMatrix3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3FVPROC epoxy_glUniformMatrix3fv = epoxy_glUniformMatrix3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3FVARBPROC epoxy_glUniformMatrix3fvARB = epoxy_glUniformMatrix3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X2DVPROC epoxy_glUniformMatrix3x2dv = epoxy_glUniformMatrix3x2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X2FVPROC epoxy_glUniformMatrix3x2fv = epoxy_glUniformMatrix3x2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X2FVNVPROC epoxy_glUniformMatrix3x2fvNV = epoxy_glUniformMatrix3x2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X4DVPROC epoxy_glUniformMatrix3x4dv = epoxy_glUniformMatrix3x4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X4FVPROC epoxy_glUniformMatrix3x4fv = epoxy_glUniformMatrix3x4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX3X4FVNVPROC epoxy_glUniformMatrix3x4fvNV = epoxy_glUniformMatrix3x4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4DVPROC epoxy_glUniformMatrix4dv = epoxy_glUniformMatrix4dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4FVPROC epoxy_glUniformMatrix4fv = epoxy_glUniformMatrix4fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4FVARBPROC epoxy_glUniformMatrix4fvARB = epoxy_glUniformMatrix4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X2DVPROC epoxy_glUniformMatrix4x2dv = epoxy_glUniformMatrix4x2dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X2FVPROC epoxy_glUniformMatrix4x2fv = epoxy_glUniformMatrix4x2fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X2FVNVPROC epoxy_glUniformMatrix4x2fvNV = epoxy_glUniformMatrix4x2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X3DVPROC epoxy_glUniformMatrix4x3dv = epoxy_glUniformMatrix4x3dv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X3FVPROC epoxy_glUniformMatrix4x3fv = epoxy_glUniformMatrix4x3fv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMMATRIX4X3FVNVPROC epoxy_glUniformMatrix4x3fvNV = epoxy_glUniformMatrix4x3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMSUBROUTINESUIVPROC epoxy_glUniformSubroutinesuiv = epoxy_glUniformSubroutinesuiv_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMUI64NVPROC epoxy_glUniformui64NV = epoxy_glUniformui64NV_global_rewrite_ptr; + +PUBLIC PFNGLUNIFORMUI64VNVPROC epoxy_glUniformui64vNV = epoxy_glUniformui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLUNLOCKARRAYSEXTPROC epoxy_glUnlockArraysEXT = epoxy_glUnlockArraysEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPBUFFERPROC epoxy_glUnmapBuffer = epoxy_glUnmapBuffer_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPBUFFERARBPROC epoxy_glUnmapBufferARB = epoxy_glUnmapBufferARB_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPBUFFEROESPROC epoxy_glUnmapBufferOES = epoxy_glUnmapBufferOES_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPNAMEDBUFFERPROC epoxy_glUnmapNamedBuffer = epoxy_glUnmapNamedBuffer_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPNAMEDBUFFEREXTPROC epoxy_glUnmapNamedBufferEXT = epoxy_glUnmapNamedBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPOBJECTBUFFERATIPROC epoxy_glUnmapObjectBufferATI = epoxy_glUnmapObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLUNMAPTEXTURE2DINTELPROC epoxy_glUnmapTexture2DINTEL = epoxy_glUnmapTexture2DINTEL_global_rewrite_ptr; + +PUBLIC PFNGLUPDATEOBJECTBUFFERATIPROC epoxy_glUpdateObjectBufferATI = epoxy_glUpdateObjectBufferATI_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMPROC epoxy_glUseProgram = epoxy_glUseProgram_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMOBJECTARBPROC epoxy_glUseProgramObjectARB = epoxy_glUseProgramObjectARB_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMSTAGESPROC epoxy_glUseProgramStages = epoxy_glUseProgramStages_global_rewrite_ptr; + +PUBLIC PFNGLUSEPROGRAMSTAGESEXTPROC epoxy_glUseProgramStagesEXT = epoxy_glUseProgramStagesEXT_global_rewrite_ptr; + +PUBLIC PFNGLUSESHADERPROGRAMEXTPROC epoxy_glUseShaderProgramEXT = epoxy_glUseShaderProgramEXT_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUFININVPROC epoxy_glVDPAUFiniNV = epoxy_glVDPAUFiniNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUGETSURFACEIVNVPROC epoxy_glVDPAUGetSurfaceivNV = epoxy_glVDPAUGetSurfaceivNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUINITNVPROC epoxy_glVDPAUInitNV = epoxy_glVDPAUInitNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUISSURFACENVPROC epoxy_glVDPAUIsSurfaceNV = epoxy_glVDPAUIsSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUMAPSURFACESNVPROC epoxy_glVDPAUMapSurfacesNV = epoxy_glVDPAUMapSurfacesNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC epoxy_glVDPAURegisterOutputSurfaceNV = epoxy_glVDPAURegisterOutputSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUREGISTERVIDEOSURFACENVPROC epoxy_glVDPAURegisterVideoSurfaceNV = epoxy_glVDPAURegisterVideoSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUSURFACEACCESSNVPROC epoxy_glVDPAUSurfaceAccessNV = epoxy_glVDPAUSurfaceAccessNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUUNMAPSURFACESNVPROC epoxy_glVDPAUUnmapSurfacesNV = epoxy_glVDPAUUnmapSurfacesNV_global_rewrite_ptr; + +PUBLIC PFNGLVDPAUUNREGISTERSURFACENVPROC epoxy_glVDPAUUnregisterSurfaceNV = epoxy_glVDPAUUnregisterSurfaceNV_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMPROC epoxy_glValidateProgram = epoxy_glValidateProgram_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMARBPROC epoxy_glValidateProgramARB = epoxy_glValidateProgramARB_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMPIPELINEPROC epoxy_glValidateProgramPipeline = epoxy_glValidateProgramPipeline_global_rewrite_ptr; + +PUBLIC PFNGLVALIDATEPROGRAMPIPELINEEXTPROC epoxy_glValidateProgramPipelineEXT = epoxy_glValidateProgramPipelineEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTARRAYOBJECTATIPROC epoxy_glVariantArrayObjectATI = epoxy_glVariantArrayObjectATI_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTPOINTEREXTPROC epoxy_glVariantPointerEXT = epoxy_glVariantPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTBVEXTPROC epoxy_glVariantbvEXT = epoxy_glVariantbvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTDVEXTPROC epoxy_glVariantdvEXT = epoxy_glVariantdvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTFVEXTPROC epoxy_glVariantfvEXT = epoxy_glVariantfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTIVEXTPROC epoxy_glVariantivEXT = epoxy_glVariantivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTSVEXTPROC epoxy_glVariantsvEXT = epoxy_glVariantsvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTUBVEXTPROC epoxy_glVariantubvEXT = epoxy_glVariantubvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTUIVEXTPROC epoxy_glVariantuivEXT = epoxy_glVariantuivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVARIANTUSVEXTPROC epoxy_glVariantusvEXT = epoxy_glVariantusvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2BOESPROC epoxy_glVertex2bOES = epoxy_glVertex2bOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2BVOESPROC epoxy_glVertex2bvOES = epoxy_glVertex2bvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2DPROC epoxy_glVertex2d = epoxy_glVertex2d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2DVPROC epoxy_glVertex2dv = epoxy_glVertex2dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2FPROC epoxy_glVertex2f = epoxy_glVertex2f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2FVPROC epoxy_glVertex2fv = epoxy_glVertex2fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2HNVPROC epoxy_glVertex2hNV = epoxy_glVertex2hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2HVNVPROC epoxy_glVertex2hvNV = epoxy_glVertex2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2IPROC epoxy_glVertex2i = epoxy_glVertex2i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2IVPROC epoxy_glVertex2iv = epoxy_glVertex2iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2SPROC epoxy_glVertex2s = epoxy_glVertex2s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2SVPROC epoxy_glVertex2sv = epoxy_glVertex2sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2XOESPROC epoxy_glVertex2xOES = epoxy_glVertex2xOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX2XVOESPROC epoxy_glVertex2xvOES = epoxy_glVertex2xvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3BOESPROC epoxy_glVertex3bOES = epoxy_glVertex3bOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3BVOESPROC epoxy_glVertex3bvOES = epoxy_glVertex3bvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3DPROC epoxy_glVertex3d = epoxy_glVertex3d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3DVPROC epoxy_glVertex3dv = epoxy_glVertex3dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3FPROC epoxy_glVertex3f = epoxy_glVertex3f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3FVPROC epoxy_glVertex3fv = epoxy_glVertex3fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3HNVPROC epoxy_glVertex3hNV = epoxy_glVertex3hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3HVNVPROC epoxy_glVertex3hvNV = epoxy_glVertex3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3IPROC epoxy_glVertex3i = epoxy_glVertex3i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3IVPROC epoxy_glVertex3iv = epoxy_glVertex3iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3SPROC epoxy_glVertex3s = epoxy_glVertex3s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3SVPROC epoxy_glVertex3sv = epoxy_glVertex3sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3XOESPROC epoxy_glVertex3xOES = epoxy_glVertex3xOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX3XVOESPROC epoxy_glVertex3xvOES = epoxy_glVertex3xvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4BOESPROC epoxy_glVertex4bOES = epoxy_glVertex4bOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4BVOESPROC epoxy_glVertex4bvOES = epoxy_glVertex4bvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4DPROC epoxy_glVertex4d = epoxy_glVertex4d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4DVPROC epoxy_glVertex4dv = epoxy_glVertex4dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4FPROC epoxy_glVertex4f = epoxy_glVertex4f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4FVPROC epoxy_glVertex4fv = epoxy_glVertex4fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4HNVPROC epoxy_glVertex4hNV = epoxy_glVertex4hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4HVNVPROC epoxy_glVertex4hvNV = epoxy_glVertex4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4IPROC epoxy_glVertex4i = epoxy_glVertex4i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4IVPROC epoxy_glVertex4iv = epoxy_glVertex4iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4SPROC epoxy_glVertex4s = epoxy_glVertex4s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4SVPROC epoxy_glVertex4sv = epoxy_glVertex4sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4XOESPROC epoxy_glVertex4xOES = epoxy_glVertex4xOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEX4XVOESPROC epoxy_glVertex4xvOES = epoxy_glVertex4xvOES_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBBINDINGPROC epoxy_glVertexArrayAttribBinding = epoxy_glVertexArrayAttribBinding_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBFORMATPROC epoxy_glVertexArrayAttribFormat = epoxy_glVertexArrayAttribFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBIFORMATPROC epoxy_glVertexArrayAttribIFormat = epoxy_glVertexArrayAttribIFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYATTRIBLFORMATPROC epoxy_glVertexArrayAttribLFormat = epoxy_glVertexArrayAttribLFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC epoxy_glVertexArrayBindVertexBufferEXT = epoxy_glVertexArrayBindVertexBufferEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYBINDINGDIVISORPROC epoxy_glVertexArrayBindingDivisor = epoxy_glVertexArrayBindingDivisor_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYCOLOROFFSETEXTPROC epoxy_glVertexArrayColorOffsetEXT = epoxy_glVertexArrayColorOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC epoxy_glVertexArrayEdgeFlagOffsetEXT = epoxy_glVertexArrayEdgeFlagOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYELEMENTBUFFERPROC epoxy_glVertexArrayElementBuffer = epoxy_glVertexArrayElementBuffer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC epoxy_glVertexArrayFogCoordOffsetEXT = epoxy_glVertexArrayFogCoordOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYINDEXOFFSETEXTPROC epoxy_glVertexArrayIndexOffsetEXT = epoxy_glVertexArrayIndexOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC epoxy_glVertexArrayMultiTexCoordOffsetEXT = epoxy_glVertexArrayMultiTexCoordOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYNORMALOFFSETEXTPROC epoxy_glVertexArrayNormalOffsetEXT = epoxy_glVertexArrayNormalOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYPARAMETERIAPPLEPROC epoxy_glVertexArrayParameteriAPPLE = epoxy_glVertexArrayParameteriAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYRANGEAPPLEPROC epoxy_glVertexArrayRangeAPPLE = epoxy_glVertexArrayRangeAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYRANGENVPROC epoxy_glVertexArrayRangeNV = epoxy_glVertexArrayRangeNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC epoxy_glVertexArraySecondaryColorOffsetEXT = epoxy_glVertexArraySecondaryColorOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC epoxy_glVertexArrayTexCoordOffsetEXT = epoxy_glVertexArrayTexCoordOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC epoxy_glVertexArrayVertexAttribBindingEXT = epoxy_glVertexArrayVertexAttribBindingEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexArrayVertexAttribDivisorEXT = epoxy_glVertexArrayVertexAttribDivisorEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC epoxy_glVertexArrayVertexAttribFormatEXT = epoxy_glVertexArrayVertexAttribFormatEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC epoxy_glVertexArrayVertexAttribIFormatEXT = epoxy_glVertexArrayVertexAttribIFormatEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC epoxy_glVertexArrayVertexAttribIOffsetEXT = epoxy_glVertexArrayVertexAttribIOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC epoxy_glVertexArrayVertexAttribLFormatEXT = epoxy_glVertexArrayVertexAttribLFormatEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC epoxy_glVertexArrayVertexAttribLOffsetEXT = epoxy_glVertexArrayVertexAttribLOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC epoxy_glVertexArrayVertexAttribOffsetEXT = epoxy_glVertexArrayVertexAttribOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC epoxy_glVertexArrayVertexBindingDivisorEXT = epoxy_glVertexArrayVertexBindingDivisorEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXBUFFERPROC epoxy_glVertexArrayVertexBuffer = epoxy_glVertexArrayVertexBuffer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXBUFFERSPROC epoxy_glVertexArrayVertexBuffers = epoxy_glVertexArrayVertexBuffers_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC epoxy_glVertexArrayVertexOffsetEXT = epoxy_glVertexArrayVertexOffsetEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DPROC epoxy_glVertexAttrib1d = epoxy_glVertexAttrib1d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DARBPROC epoxy_glVertexAttrib1dARB = epoxy_glVertexAttrib1dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DNVPROC epoxy_glVertexAttrib1dNV = epoxy_glVertexAttrib1dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DVPROC epoxy_glVertexAttrib1dv = epoxy_glVertexAttrib1dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DVARBPROC epoxy_glVertexAttrib1dvARB = epoxy_glVertexAttrib1dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1DVNVPROC epoxy_glVertexAttrib1dvNV = epoxy_glVertexAttrib1dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FPROC epoxy_glVertexAttrib1f = epoxy_glVertexAttrib1f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FARBPROC epoxy_glVertexAttrib1fARB = epoxy_glVertexAttrib1fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FNVPROC epoxy_glVertexAttrib1fNV = epoxy_glVertexAttrib1fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FVPROC epoxy_glVertexAttrib1fv = epoxy_glVertexAttrib1fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FVARBPROC epoxy_glVertexAttrib1fvARB = epoxy_glVertexAttrib1fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1FVNVPROC epoxy_glVertexAttrib1fvNV = epoxy_glVertexAttrib1fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1HNVPROC epoxy_glVertexAttrib1hNV = epoxy_glVertexAttrib1hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1HVNVPROC epoxy_glVertexAttrib1hvNV = epoxy_glVertexAttrib1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SPROC epoxy_glVertexAttrib1s = epoxy_glVertexAttrib1s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SARBPROC epoxy_glVertexAttrib1sARB = epoxy_glVertexAttrib1sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SNVPROC epoxy_glVertexAttrib1sNV = epoxy_glVertexAttrib1sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SVPROC epoxy_glVertexAttrib1sv = epoxy_glVertexAttrib1sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SVARBPROC epoxy_glVertexAttrib1svARB = epoxy_glVertexAttrib1svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB1SVNVPROC epoxy_glVertexAttrib1svNV = epoxy_glVertexAttrib1svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DPROC epoxy_glVertexAttrib2d = epoxy_glVertexAttrib2d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DARBPROC epoxy_glVertexAttrib2dARB = epoxy_glVertexAttrib2dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DNVPROC epoxy_glVertexAttrib2dNV = epoxy_glVertexAttrib2dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DVPROC epoxy_glVertexAttrib2dv = epoxy_glVertexAttrib2dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DVARBPROC epoxy_glVertexAttrib2dvARB = epoxy_glVertexAttrib2dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2DVNVPROC epoxy_glVertexAttrib2dvNV = epoxy_glVertexAttrib2dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FPROC epoxy_glVertexAttrib2f = epoxy_glVertexAttrib2f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FARBPROC epoxy_glVertexAttrib2fARB = epoxy_glVertexAttrib2fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FNVPROC epoxy_glVertexAttrib2fNV = epoxy_glVertexAttrib2fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FVPROC epoxy_glVertexAttrib2fv = epoxy_glVertexAttrib2fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FVARBPROC epoxy_glVertexAttrib2fvARB = epoxy_glVertexAttrib2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2FVNVPROC epoxy_glVertexAttrib2fvNV = epoxy_glVertexAttrib2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2HNVPROC epoxy_glVertexAttrib2hNV = epoxy_glVertexAttrib2hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2HVNVPROC epoxy_glVertexAttrib2hvNV = epoxy_glVertexAttrib2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SPROC epoxy_glVertexAttrib2s = epoxy_glVertexAttrib2s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SARBPROC epoxy_glVertexAttrib2sARB = epoxy_glVertexAttrib2sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SNVPROC epoxy_glVertexAttrib2sNV = epoxy_glVertexAttrib2sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SVPROC epoxy_glVertexAttrib2sv = epoxy_glVertexAttrib2sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SVARBPROC epoxy_glVertexAttrib2svARB = epoxy_glVertexAttrib2svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB2SVNVPROC epoxy_glVertexAttrib2svNV = epoxy_glVertexAttrib2svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DPROC epoxy_glVertexAttrib3d = epoxy_glVertexAttrib3d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DARBPROC epoxy_glVertexAttrib3dARB = epoxy_glVertexAttrib3dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DNVPROC epoxy_glVertexAttrib3dNV = epoxy_glVertexAttrib3dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DVPROC epoxy_glVertexAttrib3dv = epoxy_glVertexAttrib3dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DVARBPROC epoxy_glVertexAttrib3dvARB = epoxy_glVertexAttrib3dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3DVNVPROC epoxy_glVertexAttrib3dvNV = epoxy_glVertexAttrib3dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FPROC epoxy_glVertexAttrib3f = epoxy_glVertexAttrib3f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FARBPROC epoxy_glVertexAttrib3fARB = epoxy_glVertexAttrib3fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FNVPROC epoxy_glVertexAttrib3fNV = epoxy_glVertexAttrib3fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FVPROC epoxy_glVertexAttrib3fv = epoxy_glVertexAttrib3fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FVARBPROC epoxy_glVertexAttrib3fvARB = epoxy_glVertexAttrib3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3FVNVPROC epoxy_glVertexAttrib3fvNV = epoxy_glVertexAttrib3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3HNVPROC epoxy_glVertexAttrib3hNV = epoxy_glVertexAttrib3hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3HVNVPROC epoxy_glVertexAttrib3hvNV = epoxy_glVertexAttrib3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SPROC epoxy_glVertexAttrib3s = epoxy_glVertexAttrib3s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SARBPROC epoxy_glVertexAttrib3sARB = epoxy_glVertexAttrib3sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SNVPROC epoxy_glVertexAttrib3sNV = epoxy_glVertexAttrib3sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SVPROC epoxy_glVertexAttrib3sv = epoxy_glVertexAttrib3sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SVARBPROC epoxy_glVertexAttrib3svARB = epoxy_glVertexAttrib3svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB3SVNVPROC epoxy_glVertexAttrib3svNV = epoxy_glVertexAttrib3svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NBVPROC epoxy_glVertexAttrib4Nbv = epoxy_glVertexAttrib4Nbv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NBVARBPROC epoxy_glVertexAttrib4NbvARB = epoxy_glVertexAttrib4NbvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NIVPROC epoxy_glVertexAttrib4Niv = epoxy_glVertexAttrib4Niv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NIVARBPROC epoxy_glVertexAttrib4NivARB = epoxy_glVertexAttrib4NivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NSVPROC epoxy_glVertexAttrib4Nsv = epoxy_glVertexAttrib4Nsv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NSVARBPROC epoxy_glVertexAttrib4NsvARB = epoxy_glVertexAttrib4NsvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBPROC epoxy_glVertexAttrib4Nub = epoxy_glVertexAttrib4Nub_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBARBPROC epoxy_glVertexAttrib4NubARB = epoxy_glVertexAttrib4NubARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBVPROC epoxy_glVertexAttrib4Nubv = epoxy_glVertexAttrib4Nubv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUBVARBPROC epoxy_glVertexAttrib4NubvARB = epoxy_glVertexAttrib4NubvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUIVPROC epoxy_glVertexAttrib4Nuiv = epoxy_glVertexAttrib4Nuiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUIVARBPROC epoxy_glVertexAttrib4NuivARB = epoxy_glVertexAttrib4NuivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUSVPROC epoxy_glVertexAttrib4Nusv = epoxy_glVertexAttrib4Nusv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4NUSVARBPROC epoxy_glVertexAttrib4NusvARB = epoxy_glVertexAttrib4NusvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4BVPROC epoxy_glVertexAttrib4bv = epoxy_glVertexAttrib4bv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4BVARBPROC epoxy_glVertexAttrib4bvARB = epoxy_glVertexAttrib4bvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DPROC epoxy_glVertexAttrib4d = epoxy_glVertexAttrib4d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DARBPROC epoxy_glVertexAttrib4dARB = epoxy_glVertexAttrib4dARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DNVPROC epoxy_glVertexAttrib4dNV = epoxy_glVertexAttrib4dNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DVPROC epoxy_glVertexAttrib4dv = epoxy_glVertexAttrib4dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DVARBPROC epoxy_glVertexAttrib4dvARB = epoxy_glVertexAttrib4dvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4DVNVPROC epoxy_glVertexAttrib4dvNV = epoxy_glVertexAttrib4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FPROC epoxy_glVertexAttrib4f = epoxy_glVertexAttrib4f_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FARBPROC epoxy_glVertexAttrib4fARB = epoxy_glVertexAttrib4fARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FNVPROC epoxy_glVertexAttrib4fNV = epoxy_glVertexAttrib4fNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FVPROC epoxy_glVertexAttrib4fv = epoxy_glVertexAttrib4fv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FVARBPROC epoxy_glVertexAttrib4fvARB = epoxy_glVertexAttrib4fvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4FVNVPROC epoxy_glVertexAttrib4fvNV = epoxy_glVertexAttrib4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4HNVPROC epoxy_glVertexAttrib4hNV = epoxy_glVertexAttrib4hNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4HVNVPROC epoxy_glVertexAttrib4hvNV = epoxy_glVertexAttrib4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4IVPROC epoxy_glVertexAttrib4iv = epoxy_glVertexAttrib4iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4IVARBPROC epoxy_glVertexAttrib4ivARB = epoxy_glVertexAttrib4ivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SPROC epoxy_glVertexAttrib4s = epoxy_glVertexAttrib4s_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SARBPROC epoxy_glVertexAttrib4sARB = epoxy_glVertexAttrib4sARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SNVPROC epoxy_glVertexAttrib4sNV = epoxy_glVertexAttrib4sNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SVPROC epoxy_glVertexAttrib4sv = epoxy_glVertexAttrib4sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SVARBPROC epoxy_glVertexAttrib4svARB = epoxy_glVertexAttrib4svARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4SVNVPROC epoxy_glVertexAttrib4svNV = epoxy_glVertexAttrib4svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBNVPROC epoxy_glVertexAttrib4ubNV = epoxy_glVertexAttrib4ubNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBVPROC epoxy_glVertexAttrib4ubv = epoxy_glVertexAttrib4ubv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBVARBPROC epoxy_glVertexAttrib4ubvARB = epoxy_glVertexAttrib4ubvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UBVNVPROC epoxy_glVertexAttrib4ubvNV = epoxy_glVertexAttrib4ubvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UIVPROC epoxy_glVertexAttrib4uiv = epoxy_glVertexAttrib4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4UIVARBPROC epoxy_glVertexAttrib4uivARB = epoxy_glVertexAttrib4uivARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4USVPROC epoxy_glVertexAttrib4usv = epoxy_glVertexAttrib4usv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIB4USVARBPROC epoxy_glVertexAttrib4usvARB = epoxy_glVertexAttrib4usvARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBARRAYOBJECTATIPROC epoxy_glVertexAttribArrayObjectATI = epoxy_glVertexAttribArrayObjectATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBBINDINGPROC epoxy_glVertexAttribBinding = epoxy_glVertexAttribBinding_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORPROC epoxy_glVertexAttribDivisor = epoxy_glVertexAttribDivisor_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORANGLEPROC epoxy_glVertexAttribDivisorANGLE = epoxy_glVertexAttribDivisorANGLE_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORARBPROC epoxy_glVertexAttribDivisorARB = epoxy_glVertexAttribDivisorARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISOREXTPROC epoxy_glVertexAttribDivisorEXT = epoxy_glVertexAttribDivisorEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBDIVISORNVPROC epoxy_glVertexAttribDivisorNV = epoxy_glVertexAttribDivisorNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBFORMATPROC epoxy_glVertexAttribFormat = epoxy_glVertexAttribFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBFORMATNVPROC epoxy_glVertexAttribFormatNV = epoxy_glVertexAttribFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IPROC epoxy_glVertexAttribI1i = epoxy_glVertexAttribI1i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IEXTPROC epoxy_glVertexAttribI1iEXT = epoxy_glVertexAttribI1iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IVPROC epoxy_glVertexAttribI1iv = epoxy_glVertexAttribI1iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1IVEXTPROC epoxy_glVertexAttribI1ivEXT = epoxy_glVertexAttribI1ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIPROC epoxy_glVertexAttribI1ui = epoxy_glVertexAttribI1ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIEXTPROC epoxy_glVertexAttribI1uiEXT = epoxy_glVertexAttribI1uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIVPROC epoxy_glVertexAttribI1uiv = epoxy_glVertexAttribI1uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI1UIVEXTPROC epoxy_glVertexAttribI1uivEXT = epoxy_glVertexAttribI1uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IPROC epoxy_glVertexAttribI2i = epoxy_glVertexAttribI2i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IEXTPROC epoxy_glVertexAttribI2iEXT = epoxy_glVertexAttribI2iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IVPROC epoxy_glVertexAttribI2iv = epoxy_glVertexAttribI2iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2IVEXTPROC epoxy_glVertexAttribI2ivEXT = epoxy_glVertexAttribI2ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIPROC epoxy_glVertexAttribI2ui = epoxy_glVertexAttribI2ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIEXTPROC epoxy_glVertexAttribI2uiEXT = epoxy_glVertexAttribI2uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIVPROC epoxy_glVertexAttribI2uiv = epoxy_glVertexAttribI2uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI2UIVEXTPROC epoxy_glVertexAttribI2uivEXT = epoxy_glVertexAttribI2uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IPROC epoxy_glVertexAttribI3i = epoxy_glVertexAttribI3i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IEXTPROC epoxy_glVertexAttribI3iEXT = epoxy_glVertexAttribI3iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IVPROC epoxy_glVertexAttribI3iv = epoxy_glVertexAttribI3iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3IVEXTPROC epoxy_glVertexAttribI3ivEXT = epoxy_glVertexAttribI3ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIPROC epoxy_glVertexAttribI3ui = epoxy_glVertexAttribI3ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIEXTPROC epoxy_glVertexAttribI3uiEXT = epoxy_glVertexAttribI3uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIVPROC epoxy_glVertexAttribI3uiv = epoxy_glVertexAttribI3uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI3UIVEXTPROC epoxy_glVertexAttribI3uivEXT = epoxy_glVertexAttribI3uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4BVPROC epoxy_glVertexAttribI4bv = epoxy_glVertexAttribI4bv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4BVEXTPROC epoxy_glVertexAttribI4bvEXT = epoxy_glVertexAttribI4bvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IPROC epoxy_glVertexAttribI4i = epoxy_glVertexAttribI4i_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IEXTPROC epoxy_glVertexAttribI4iEXT = epoxy_glVertexAttribI4iEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IVPROC epoxy_glVertexAttribI4iv = epoxy_glVertexAttribI4iv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4IVEXTPROC epoxy_glVertexAttribI4ivEXT = epoxy_glVertexAttribI4ivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4SVPROC epoxy_glVertexAttribI4sv = epoxy_glVertexAttribI4sv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4SVEXTPROC epoxy_glVertexAttribI4svEXT = epoxy_glVertexAttribI4svEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UBVPROC epoxy_glVertexAttribI4ubv = epoxy_glVertexAttribI4ubv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UBVEXTPROC epoxy_glVertexAttribI4ubvEXT = epoxy_glVertexAttribI4ubvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIPROC epoxy_glVertexAttribI4ui = epoxy_glVertexAttribI4ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIEXTPROC epoxy_glVertexAttribI4uiEXT = epoxy_glVertexAttribI4uiEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIVPROC epoxy_glVertexAttribI4uiv = epoxy_glVertexAttribI4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4UIVEXTPROC epoxy_glVertexAttribI4uivEXT = epoxy_glVertexAttribI4uivEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4USVPROC epoxy_glVertexAttribI4usv = epoxy_glVertexAttribI4usv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBI4USVEXTPROC epoxy_glVertexAttribI4usvEXT = epoxy_glVertexAttribI4usvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIFORMATPROC epoxy_glVertexAttribIFormat = epoxy_glVertexAttribIFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIFORMATNVPROC epoxy_glVertexAttribIFormatNV = epoxy_glVertexAttribIFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIPOINTERPROC epoxy_glVertexAttribIPointer = epoxy_glVertexAttribIPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBIPOINTEREXTPROC epoxy_glVertexAttribIPointerEXT = epoxy_glVertexAttribIPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DPROC epoxy_glVertexAttribL1d = epoxy_glVertexAttribL1d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DEXTPROC epoxy_glVertexAttribL1dEXT = epoxy_glVertexAttribL1dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DVPROC epoxy_glVertexAttribL1dv = epoxy_glVertexAttribL1dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1DVEXTPROC epoxy_glVertexAttribL1dvEXT = epoxy_glVertexAttribL1dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1I64NVPROC epoxy_glVertexAttribL1i64NV = epoxy_glVertexAttribL1i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1I64VNVPROC epoxy_glVertexAttribL1i64vNV = epoxy_glVertexAttribL1i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64ARBPROC epoxy_glVertexAttribL1ui64ARB = epoxy_glVertexAttribL1ui64ARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64NVPROC epoxy_glVertexAttribL1ui64NV = epoxy_glVertexAttribL1ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64VARBPROC epoxy_glVertexAttribL1ui64vARB = epoxy_glVertexAttribL1ui64vARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL1UI64VNVPROC epoxy_glVertexAttribL1ui64vNV = epoxy_glVertexAttribL1ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DPROC epoxy_glVertexAttribL2d = epoxy_glVertexAttribL2d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DEXTPROC epoxy_glVertexAttribL2dEXT = epoxy_glVertexAttribL2dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DVPROC epoxy_glVertexAttribL2dv = epoxy_glVertexAttribL2dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2DVEXTPROC epoxy_glVertexAttribL2dvEXT = epoxy_glVertexAttribL2dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2I64NVPROC epoxy_glVertexAttribL2i64NV = epoxy_glVertexAttribL2i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2I64VNVPROC epoxy_glVertexAttribL2i64vNV = epoxy_glVertexAttribL2i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2UI64NVPROC epoxy_glVertexAttribL2ui64NV = epoxy_glVertexAttribL2ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL2UI64VNVPROC epoxy_glVertexAttribL2ui64vNV = epoxy_glVertexAttribL2ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DPROC epoxy_glVertexAttribL3d = epoxy_glVertexAttribL3d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DEXTPROC epoxy_glVertexAttribL3dEXT = epoxy_glVertexAttribL3dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DVPROC epoxy_glVertexAttribL3dv = epoxy_glVertexAttribL3dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3DVEXTPROC epoxy_glVertexAttribL3dvEXT = epoxy_glVertexAttribL3dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3I64NVPROC epoxy_glVertexAttribL3i64NV = epoxy_glVertexAttribL3i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3I64VNVPROC epoxy_glVertexAttribL3i64vNV = epoxy_glVertexAttribL3i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3UI64NVPROC epoxy_glVertexAttribL3ui64NV = epoxy_glVertexAttribL3ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL3UI64VNVPROC epoxy_glVertexAttribL3ui64vNV = epoxy_glVertexAttribL3ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DPROC epoxy_glVertexAttribL4d = epoxy_glVertexAttribL4d_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DEXTPROC epoxy_glVertexAttribL4dEXT = epoxy_glVertexAttribL4dEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DVPROC epoxy_glVertexAttribL4dv = epoxy_glVertexAttribL4dv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4DVEXTPROC epoxy_glVertexAttribL4dvEXT = epoxy_glVertexAttribL4dvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4I64NVPROC epoxy_glVertexAttribL4i64NV = epoxy_glVertexAttribL4i64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4I64VNVPROC epoxy_glVertexAttribL4i64vNV = epoxy_glVertexAttribL4i64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4UI64NVPROC epoxy_glVertexAttribL4ui64NV = epoxy_glVertexAttribL4ui64NV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBL4UI64VNVPROC epoxy_glVertexAttribL4ui64vNV = epoxy_glVertexAttribL4ui64vNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLFORMATPROC epoxy_glVertexAttribLFormat = epoxy_glVertexAttribLFormat_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLFORMATNVPROC epoxy_glVertexAttribLFormatNV = epoxy_glVertexAttribLFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLPOINTERPROC epoxy_glVertexAttribLPointer = epoxy_glVertexAttribLPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBLPOINTEREXTPROC epoxy_glVertexAttribLPointerEXT = epoxy_glVertexAttribLPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP1UIPROC epoxy_glVertexAttribP1ui = epoxy_glVertexAttribP1ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP1UIVPROC epoxy_glVertexAttribP1uiv = epoxy_glVertexAttribP1uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP2UIPROC epoxy_glVertexAttribP2ui = epoxy_glVertexAttribP2ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP2UIVPROC epoxy_glVertexAttribP2uiv = epoxy_glVertexAttribP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP3UIPROC epoxy_glVertexAttribP3ui = epoxy_glVertexAttribP3ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP3UIVPROC epoxy_glVertexAttribP3uiv = epoxy_glVertexAttribP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP4UIPROC epoxy_glVertexAttribP4ui = epoxy_glVertexAttribP4ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBP4UIVPROC epoxy_glVertexAttribP4uiv = epoxy_glVertexAttribP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPARAMETERIAMDPROC epoxy_glVertexAttribParameteriAMD = epoxy_glVertexAttribParameteriAMD_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPOINTERPROC epoxy_glVertexAttribPointer = epoxy_glVertexAttribPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPOINTERARBPROC epoxy_glVertexAttribPointerARB = epoxy_glVertexAttribPointerARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBPOINTERNVPROC epoxy_glVertexAttribPointerNV = epoxy_glVertexAttribPointerNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1DVNVPROC epoxy_glVertexAttribs1dvNV = epoxy_glVertexAttribs1dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1FVNVPROC epoxy_glVertexAttribs1fvNV = epoxy_glVertexAttribs1fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1HVNVPROC epoxy_glVertexAttribs1hvNV = epoxy_glVertexAttribs1hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS1SVNVPROC epoxy_glVertexAttribs1svNV = epoxy_glVertexAttribs1svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2DVNVPROC epoxy_glVertexAttribs2dvNV = epoxy_glVertexAttribs2dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2FVNVPROC epoxy_glVertexAttribs2fvNV = epoxy_glVertexAttribs2fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2HVNVPROC epoxy_glVertexAttribs2hvNV = epoxy_glVertexAttribs2hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS2SVNVPROC epoxy_glVertexAttribs2svNV = epoxy_glVertexAttribs2svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3DVNVPROC epoxy_glVertexAttribs3dvNV = epoxy_glVertexAttribs3dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3FVNVPROC epoxy_glVertexAttribs3fvNV = epoxy_glVertexAttribs3fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3HVNVPROC epoxy_glVertexAttribs3hvNV = epoxy_glVertexAttribs3hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS3SVNVPROC epoxy_glVertexAttribs3svNV = epoxy_glVertexAttribs3svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4DVNVPROC epoxy_glVertexAttribs4dvNV = epoxy_glVertexAttribs4dvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4FVNVPROC epoxy_glVertexAttribs4fvNV = epoxy_glVertexAttribs4fvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4HVNVPROC epoxy_glVertexAttribs4hvNV = epoxy_glVertexAttribs4hvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4SVNVPROC epoxy_glVertexAttribs4svNV = epoxy_glVertexAttribs4svNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXATTRIBS4UBVNVPROC epoxy_glVertexAttribs4ubvNV = epoxy_glVertexAttribs4ubvNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBINDINGDIVISORPROC epoxy_glVertexBindingDivisor = epoxy_glVertexBindingDivisor_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBLENDARBPROC epoxy_glVertexBlendARB = epoxy_glVertexBlendARB_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBLENDENVFATIPROC epoxy_glVertexBlendEnvfATI = epoxy_glVertexBlendEnvfATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXBLENDENVIATIPROC epoxy_glVertexBlendEnviATI = epoxy_glVertexBlendEnviATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXFORMATNVPROC epoxy_glVertexFormatNV = epoxy_glVertexFormatNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP2UIPROC epoxy_glVertexP2ui = epoxy_glVertexP2ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP2UIVPROC epoxy_glVertexP2uiv = epoxy_glVertexP2uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP3UIPROC epoxy_glVertexP3ui = epoxy_glVertexP3ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP3UIVPROC epoxy_glVertexP3uiv = epoxy_glVertexP3uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP4UIPROC epoxy_glVertexP4ui = epoxy_glVertexP4ui_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXP4UIVPROC epoxy_glVertexP4uiv = epoxy_glVertexP4uiv_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTERPROC epoxy_glVertexPointer = epoxy_glVertexPointer_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTEREXTPROC epoxy_glVertexPointerEXT = epoxy_glVertexPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTERLISTIBMPROC epoxy_glVertexPointerListIBM = epoxy_glVertexPointerListIBM_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXPOINTERVINTELPROC epoxy_glVertexPointervINTEL = epoxy_glVertexPointervINTEL_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1DATIPROC epoxy_glVertexStream1dATI = epoxy_glVertexStream1dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1DVATIPROC epoxy_glVertexStream1dvATI = epoxy_glVertexStream1dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1FATIPROC epoxy_glVertexStream1fATI = epoxy_glVertexStream1fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1FVATIPROC epoxy_glVertexStream1fvATI = epoxy_glVertexStream1fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1IATIPROC epoxy_glVertexStream1iATI = epoxy_glVertexStream1iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1IVATIPROC epoxy_glVertexStream1ivATI = epoxy_glVertexStream1ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1SATIPROC epoxy_glVertexStream1sATI = epoxy_glVertexStream1sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM1SVATIPROC epoxy_glVertexStream1svATI = epoxy_glVertexStream1svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2DATIPROC epoxy_glVertexStream2dATI = epoxy_glVertexStream2dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2DVATIPROC epoxy_glVertexStream2dvATI = epoxy_glVertexStream2dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2FATIPROC epoxy_glVertexStream2fATI = epoxy_glVertexStream2fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2FVATIPROC epoxy_glVertexStream2fvATI = epoxy_glVertexStream2fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2IATIPROC epoxy_glVertexStream2iATI = epoxy_glVertexStream2iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2IVATIPROC epoxy_glVertexStream2ivATI = epoxy_glVertexStream2ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2SATIPROC epoxy_glVertexStream2sATI = epoxy_glVertexStream2sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM2SVATIPROC epoxy_glVertexStream2svATI = epoxy_glVertexStream2svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3DATIPROC epoxy_glVertexStream3dATI = epoxy_glVertexStream3dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3DVATIPROC epoxy_glVertexStream3dvATI = epoxy_glVertexStream3dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3FATIPROC epoxy_glVertexStream3fATI = epoxy_glVertexStream3fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3FVATIPROC epoxy_glVertexStream3fvATI = epoxy_glVertexStream3fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3IATIPROC epoxy_glVertexStream3iATI = epoxy_glVertexStream3iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3IVATIPROC epoxy_glVertexStream3ivATI = epoxy_glVertexStream3ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3SATIPROC epoxy_glVertexStream3sATI = epoxy_glVertexStream3sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM3SVATIPROC epoxy_glVertexStream3svATI = epoxy_glVertexStream3svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4DATIPROC epoxy_glVertexStream4dATI = epoxy_glVertexStream4dATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4DVATIPROC epoxy_glVertexStream4dvATI = epoxy_glVertexStream4dvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4FATIPROC epoxy_glVertexStream4fATI = epoxy_glVertexStream4fATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4FVATIPROC epoxy_glVertexStream4fvATI = epoxy_glVertexStream4fvATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4IATIPROC epoxy_glVertexStream4iATI = epoxy_glVertexStream4iATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4IVATIPROC epoxy_glVertexStream4ivATI = epoxy_glVertexStream4ivATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4SATIPROC epoxy_glVertexStream4sATI = epoxy_glVertexStream4sATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXSTREAM4SVATIPROC epoxy_glVertexStream4svATI = epoxy_glVertexStream4svATI_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTPOINTEREXTPROC epoxy_glVertexWeightPointerEXT = epoxy_glVertexWeightPointerEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTFEXTPROC epoxy_glVertexWeightfEXT = epoxy_glVertexWeightfEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTFVEXTPROC epoxy_glVertexWeightfvEXT = epoxy_glVertexWeightfvEXT_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTHNVPROC epoxy_glVertexWeighthNV = epoxy_glVertexWeighthNV_global_rewrite_ptr; + +PUBLIC PFNGLVERTEXWEIGHTHVNVPROC epoxy_glVertexWeighthvNV = epoxy_glVertexWeighthvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURENVPROC epoxy_glVideoCaptureNV = epoxy_glVideoCaptureNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC epoxy_glVideoCaptureStreamParameterdvNV = epoxy_glVideoCaptureStreamParameterdvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC epoxy_glVideoCaptureStreamParameterfvNV = epoxy_glVideoCaptureStreamParameterfvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC epoxy_glVideoCaptureStreamParameterivNV = epoxy_glVideoCaptureStreamParameterivNV_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTPROC epoxy_glViewport = epoxy_glViewport_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTARRAYVPROC epoxy_glViewportArrayv = epoxy_glViewportArrayv_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTARRAYVNVPROC epoxy_glViewportArrayvNV = epoxy_glViewportArrayvNV_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFPROC epoxy_glViewportIndexedf = epoxy_glViewportIndexedf_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFNVPROC epoxy_glViewportIndexedfNV = epoxy_glViewportIndexedfNV_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFVPROC epoxy_glViewportIndexedfv = epoxy_glViewportIndexedfv_global_rewrite_ptr; + +PUBLIC PFNGLVIEWPORTINDEXEDFVNVPROC epoxy_glViewportIndexedfvNV = epoxy_glViewportIndexedfvNV_global_rewrite_ptr; + +PUBLIC PFNGLWAITSYNCPROC epoxy_glWaitSync = epoxy_glWaitSync_global_rewrite_ptr; + +PUBLIC PFNGLWAITSYNCAPPLEPROC epoxy_glWaitSyncAPPLE = epoxy_glWaitSyncAPPLE_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTPATHSNVPROC epoxy_glWeightPathsNV = epoxy_glWeightPathsNV_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTPOINTERARBPROC epoxy_glWeightPointerARB = epoxy_glWeightPointerARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTPOINTEROESPROC epoxy_glWeightPointerOES = epoxy_glWeightPointerOES_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTBVARBPROC epoxy_glWeightbvARB = epoxy_glWeightbvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTDVARBPROC epoxy_glWeightdvARB = epoxy_glWeightdvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTFVARBPROC epoxy_glWeightfvARB = epoxy_glWeightfvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTIVARBPROC epoxy_glWeightivARB = epoxy_glWeightivARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTSVARBPROC epoxy_glWeightsvARB = epoxy_glWeightsvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTUBVARBPROC epoxy_glWeightubvARB = epoxy_glWeightubvARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTUIVARBPROC epoxy_glWeightuivARB = epoxy_glWeightuivARB_global_rewrite_ptr; + +PUBLIC PFNGLWEIGHTUSVARBPROC epoxy_glWeightusvARB = epoxy_glWeightusvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DPROC epoxy_glWindowPos2d = epoxy_glWindowPos2d_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DARBPROC epoxy_glWindowPos2dARB = epoxy_glWindowPos2dARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DMESAPROC epoxy_glWindowPos2dMESA = epoxy_glWindowPos2dMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DVPROC epoxy_glWindowPos2dv = epoxy_glWindowPos2dv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DVARBPROC epoxy_glWindowPos2dvARB = epoxy_glWindowPos2dvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2DVMESAPROC epoxy_glWindowPos2dvMESA = epoxy_glWindowPos2dvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FPROC epoxy_glWindowPos2f = epoxy_glWindowPos2f_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FARBPROC epoxy_glWindowPos2fARB = epoxy_glWindowPos2fARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FMESAPROC epoxy_glWindowPos2fMESA = epoxy_glWindowPos2fMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FVPROC epoxy_glWindowPos2fv = epoxy_glWindowPos2fv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FVARBPROC epoxy_glWindowPos2fvARB = epoxy_glWindowPos2fvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2FVMESAPROC epoxy_glWindowPos2fvMESA = epoxy_glWindowPos2fvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IPROC epoxy_glWindowPos2i = epoxy_glWindowPos2i_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IARBPROC epoxy_glWindowPos2iARB = epoxy_glWindowPos2iARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IMESAPROC epoxy_glWindowPos2iMESA = epoxy_glWindowPos2iMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IVPROC epoxy_glWindowPos2iv = epoxy_glWindowPos2iv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IVARBPROC epoxy_glWindowPos2ivARB = epoxy_glWindowPos2ivARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2IVMESAPROC epoxy_glWindowPos2ivMESA = epoxy_glWindowPos2ivMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SPROC epoxy_glWindowPos2s = epoxy_glWindowPos2s_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SARBPROC epoxy_glWindowPos2sARB = epoxy_glWindowPos2sARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SMESAPROC epoxy_glWindowPos2sMESA = epoxy_glWindowPos2sMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SVPROC epoxy_glWindowPos2sv = epoxy_glWindowPos2sv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SVARBPROC epoxy_glWindowPos2svARB = epoxy_glWindowPos2svARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS2SVMESAPROC epoxy_glWindowPos2svMESA = epoxy_glWindowPos2svMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DPROC epoxy_glWindowPos3d = epoxy_glWindowPos3d_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DARBPROC epoxy_glWindowPos3dARB = epoxy_glWindowPos3dARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DMESAPROC epoxy_glWindowPos3dMESA = epoxy_glWindowPos3dMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DVPROC epoxy_glWindowPos3dv = epoxy_glWindowPos3dv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DVARBPROC epoxy_glWindowPos3dvARB = epoxy_glWindowPos3dvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3DVMESAPROC epoxy_glWindowPos3dvMESA = epoxy_glWindowPos3dvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FPROC epoxy_glWindowPos3f = epoxy_glWindowPos3f_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FARBPROC epoxy_glWindowPos3fARB = epoxy_glWindowPos3fARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FMESAPROC epoxy_glWindowPos3fMESA = epoxy_glWindowPos3fMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FVPROC epoxy_glWindowPos3fv = epoxy_glWindowPos3fv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FVARBPROC epoxy_glWindowPos3fvARB = epoxy_glWindowPos3fvARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3FVMESAPROC epoxy_glWindowPos3fvMESA = epoxy_glWindowPos3fvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IPROC epoxy_glWindowPos3i = epoxy_glWindowPos3i_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IARBPROC epoxy_glWindowPos3iARB = epoxy_glWindowPos3iARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IMESAPROC epoxy_glWindowPos3iMESA = epoxy_glWindowPos3iMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IVPROC epoxy_glWindowPos3iv = epoxy_glWindowPos3iv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IVARBPROC epoxy_glWindowPos3ivARB = epoxy_glWindowPos3ivARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3IVMESAPROC epoxy_glWindowPos3ivMESA = epoxy_glWindowPos3ivMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SPROC epoxy_glWindowPos3s = epoxy_glWindowPos3s_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SARBPROC epoxy_glWindowPos3sARB = epoxy_glWindowPos3sARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SMESAPROC epoxy_glWindowPos3sMESA = epoxy_glWindowPos3sMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SVPROC epoxy_glWindowPos3sv = epoxy_glWindowPos3sv_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SVARBPROC epoxy_glWindowPos3svARB = epoxy_glWindowPos3svARB_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS3SVMESAPROC epoxy_glWindowPos3svMESA = epoxy_glWindowPos3svMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4DMESAPROC epoxy_glWindowPos4dMESA = epoxy_glWindowPos4dMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4DVMESAPROC epoxy_glWindowPos4dvMESA = epoxy_glWindowPos4dvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4FMESAPROC epoxy_glWindowPos4fMESA = epoxy_glWindowPos4fMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4FVMESAPROC epoxy_glWindowPos4fvMESA = epoxy_glWindowPos4fvMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4IMESAPROC epoxy_glWindowPos4iMESA = epoxy_glWindowPos4iMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4IVMESAPROC epoxy_glWindowPos4ivMESA = epoxy_glWindowPos4ivMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4SMESAPROC epoxy_glWindowPos4sMESA = epoxy_glWindowPos4sMESA_global_rewrite_ptr; + +PUBLIC PFNGLWINDOWPOS4SVMESAPROC epoxy_glWindowPos4svMESA = epoxy_glWindowPos4svMESA_global_rewrite_ptr; + +PUBLIC PFNGLWRITEMASKEXTPROC epoxy_glWriteMaskEXT = epoxy_glWriteMaskEXT_global_rewrite_ptr; + diff --git a/Engine/lib/epoxy/src/glx/dispatch_glx.c b/Engine/lib/epoxy/src/glx/dispatch_glx.c new file mode 100644 index 0000000000..ee9027b403 --- /dev/null +++ b/Engine/lib/epoxy/src/glx/dispatch_glx.c @@ -0,0 +1,106 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include +#include +#include + +#include "dispatch_common.h" + +/** + * If we can determine the GLX version from the current context, then + * return that, otherwise return a version that will just send us on + * to dlsym() or get_proc_address(). + */ +int +epoxy_conservative_glx_version(void) +{ + Display *dpy = glXGetCurrentDisplay(); + GLXContext ctx = glXGetCurrentContext(); + int screen; + + if (!dpy || !ctx) + return 14; + + glXQueryContext(dpy, ctx, GLX_SCREEN, &screen); + + return epoxy_glx_version(dpy, screen); +} + +PUBLIC int +epoxy_glx_version(Display *dpy, int screen) +{ + int server_major, server_minor; + int client_major, client_minor; + int server, client; + const char *version_string; + int ret=0, sscanf_ret; + + if ((version_string = glXQueryServerString(dpy, screen, GLX_VERSION))) + { + sscanf_ret = sscanf(version_string, "%d.%d", &server_major, &server_minor); + assert(sscanf_ret == 2); + server = server_major * 10 + server_minor; + if ((version_string = glXGetClientString(dpy, GLX_VERSION))) + { + sscanf_ret = sscanf(version_string, "%d.%d", &client_major, &client_minor); + assert(sscanf_ret == 2); + client = client_major * 10 + client_minor; + ret = client <= server ? client : server; + } + } + + return ret; +} + +/** + * If we can determine the GLX extension support from the current + * context, then return that, otherwise give the answer that will just + * send us on to get_proc_address(). + */ +bool +epoxy_conservative_has_glx_extension(const char *ext) +{ + Display *dpy = glXGetCurrentDisplay(); + GLXContext ctx = glXGetCurrentContext(); + int screen; + + if (!dpy || !ctx) + return true; + + glXQueryContext(dpy, ctx, GLX_SCREEN, &screen); + + return epoxy_has_glx_extension(dpy, screen, ext); +} + +PUBLIC bool +epoxy_has_glx_extension(Display *dpy, int screen, const char *ext) + { + /* No, you can't just use glXGetClientString or + * glXGetServerString() here. Those each tell you about one half + * of what's needed for an extension to be supported, and + * glXQueryExtensionsString() is what gives you the intersection + * of the two. + */ + return epoxy_extension_in_string(glXQueryExtensionsString(dpy, screen), ext); +} diff --git a/Engine/lib/epoxy/src/glx/glx_generated_dispatch.c b/Engine/lib/epoxy/src/glx/glx_generated_dispatch.c new file mode 100644 index 0000000000..667268c495 --- /dev/null +++ b/Engine/lib/epoxy/src/glx/glx_generated_dispatch.c @@ -0,0 +1,4812 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/glx.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNGLXBINDCHANNELTOWINDOWSGIXPROC epoxy_glXBindChannelToWindowSGIX; + PFNGLXBINDHYPERPIPESGIXPROC epoxy_glXBindHyperpipeSGIX; + PFNGLXBINDSWAPBARRIERNVPROC epoxy_glXBindSwapBarrierNV; + PFNGLXBINDSWAPBARRIERSGIXPROC epoxy_glXBindSwapBarrierSGIX; + PFNGLXBINDTEXIMAGEEXTPROC epoxy_glXBindTexImageEXT; + PFNGLXBINDVIDEOCAPTUREDEVICENVPROC epoxy_glXBindVideoCaptureDeviceNV; + PFNGLXBINDVIDEODEVICENVPROC epoxy_glXBindVideoDeviceNV; + PFNGLXBINDVIDEOIMAGENVPROC epoxy_glXBindVideoImageNV; + PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_glXBlitContextFramebufferAMD; + PFNGLXCHANNELRECTSGIXPROC epoxy_glXChannelRectSGIX; + PFNGLXCHANNELRECTSYNCSGIXPROC epoxy_glXChannelRectSyncSGIX; + PFNGLXCHOOSEFBCONFIGPROC epoxy_glXChooseFBConfig; + PFNGLXCHOOSEFBCONFIGSGIXPROC epoxy_glXChooseFBConfigSGIX; + PFNGLXCHOOSEVISUALPROC epoxy_glXChooseVisual; + PFNGLXCOPYBUFFERSUBDATANVPROC epoxy_glXCopyBufferSubDataNV; + PFNGLXCOPYCONTEXTPROC epoxy_glXCopyContext; + PFNGLXCOPYIMAGESUBDATANVPROC epoxy_glXCopyImageSubDataNV; + PFNGLXCOPYSUBBUFFERMESAPROC epoxy_glXCopySubBufferMESA; + PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC epoxy_glXCreateAssociatedContextAMD; + PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_glXCreateAssociatedContextAttribsAMD; + PFNGLXCREATECONTEXTPROC epoxy_glXCreateContext; + PFNGLXCREATECONTEXTATTRIBSARBPROC epoxy_glXCreateContextAttribsARB; + PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC epoxy_glXCreateContextWithConfigSGIX; + PFNGLXCREATEGLXPBUFFERSGIXPROC epoxy_glXCreateGLXPbufferSGIX; + PFNGLXCREATEGLXPIXMAPPROC epoxy_glXCreateGLXPixmap; + PFNGLXCREATEGLXPIXMAPMESAPROC epoxy_glXCreateGLXPixmapMESA; + PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC epoxy_glXCreateGLXPixmapWithConfigSGIX; + PFNGLXCREATENEWCONTEXTPROC epoxy_glXCreateNewContext; + PFNGLXCREATEPBUFFERPROC epoxy_glXCreatePbuffer; + PFNGLXCREATEPIXMAPPROC epoxy_glXCreatePixmap; + PFNGLXCREATEWINDOWPROC epoxy_glXCreateWindow; + PFNGLXCUSHIONSGIPROC epoxy_glXCushionSGI; + PFNGLXDELAYBEFORESWAPNVPROC epoxy_glXDelayBeforeSwapNV; + PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC epoxy_glXDeleteAssociatedContextAMD; + PFNGLXDESTROYCONTEXTPROC epoxy_glXDestroyContext; + PFNGLXDESTROYGLXPBUFFERSGIXPROC epoxy_glXDestroyGLXPbufferSGIX; + PFNGLXDESTROYGLXPIXMAPPROC epoxy_glXDestroyGLXPixmap; + PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC epoxy_glXDestroyGLXVideoSourceSGIX; + PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC epoxy_glXDestroyHyperpipeConfigSGIX; + PFNGLXDESTROYPBUFFERPROC epoxy_glXDestroyPbuffer; + PFNGLXDESTROYPIXMAPPROC epoxy_glXDestroyPixmap; + PFNGLXDESTROYWINDOWPROC epoxy_glXDestroyWindow; + PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_glXEnumerateVideoCaptureDevicesNV; + PFNGLXENUMERATEVIDEODEVICESNVPROC epoxy_glXEnumerateVideoDevicesNV; + PFNGLXFREECONTEXTEXTPROC epoxy_glXFreeContextEXT; + PFNGLXGETAGPOFFSETMESAPROC epoxy_glXGetAGPOffsetMESA; + PFNGLXGETCLIENTSTRINGPROC epoxy_glXGetClientString; + PFNGLXGETCONFIGPROC epoxy_glXGetConfig; + PFNGLXGETCONTEXTGPUIDAMDPROC epoxy_glXGetContextGPUIDAMD; + PFNGLXGETCONTEXTIDEXTPROC epoxy_glXGetContextIDEXT; + PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_glXGetCurrentAssociatedContextAMD; + PFNGLXGETCURRENTCONTEXTPROC epoxy_glXGetCurrentContext; + PFNGLXGETCURRENTDISPLAYPROC epoxy_glXGetCurrentDisplay; + PFNGLXGETCURRENTDISPLAYEXTPROC epoxy_glXGetCurrentDisplayEXT; + PFNGLXGETCURRENTDRAWABLEPROC epoxy_glXGetCurrentDrawable; + PFNGLXGETCURRENTREADDRAWABLEPROC epoxy_glXGetCurrentReadDrawable; + PFNGLXGETCURRENTREADDRAWABLESGIPROC epoxy_glXGetCurrentReadDrawableSGI; + PFNGLXGETFBCONFIGATTRIBPROC epoxy_glXGetFBConfigAttrib; + PFNGLXGETFBCONFIGATTRIBSGIXPROC epoxy_glXGetFBConfigAttribSGIX; + PFNGLXGETFBCONFIGFROMVISUALSGIXPROC epoxy_glXGetFBConfigFromVisualSGIX; + PFNGLXGETFBCONFIGSPROC epoxy_glXGetFBConfigs; + PFNGLXGETGPUIDSAMDPROC epoxy_glXGetGPUIDsAMD; + PFNGLXGETGPUINFOAMDPROC epoxy_glXGetGPUInfoAMD; + PFNGLXGETMSCRATEOMLPROC epoxy_glXGetMscRateOML; + PFNGLXGETPROCADDRESSPROC epoxy_glXGetProcAddress; + PFNGLXGETPROCADDRESSARBPROC epoxy_glXGetProcAddressARB; + PFNGLXGETSELECTEDEVENTPROC epoxy_glXGetSelectedEvent; + PFNGLXGETSELECTEDEVENTSGIXPROC epoxy_glXGetSelectedEventSGIX; + PFNGLXGETSYNCVALUESOMLPROC epoxy_glXGetSyncValuesOML; + PFNGLXGETTRANSPARENTINDEXSUNPROC epoxy_glXGetTransparentIndexSUN; + PFNGLXGETVIDEODEVICENVPROC epoxy_glXGetVideoDeviceNV; + PFNGLXGETVIDEOINFONVPROC epoxy_glXGetVideoInfoNV; + PFNGLXGETVIDEOSYNCSGIPROC epoxy_glXGetVideoSyncSGI; + PFNGLXGETVISUALFROMFBCONFIGPROC epoxy_glXGetVisualFromFBConfig; + PFNGLXGETVISUALFROMFBCONFIGSGIXPROC epoxy_glXGetVisualFromFBConfigSGIX; + PFNGLXHYPERPIPEATTRIBSGIXPROC epoxy_glXHyperpipeAttribSGIX; + PFNGLXHYPERPIPECONFIGSGIXPROC epoxy_glXHyperpipeConfigSGIX; + PFNGLXIMPORTCONTEXTEXTPROC epoxy_glXImportContextEXT; + PFNGLXISDIRECTPROC epoxy_glXIsDirect; + PFNGLXJOINSWAPGROUPNVPROC epoxy_glXJoinSwapGroupNV; + PFNGLXJOINSWAPGROUPSGIXPROC epoxy_glXJoinSwapGroupSGIX; + PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC epoxy_glXLockVideoCaptureDeviceNV; + PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_glXMakeAssociatedContextCurrentAMD; + PFNGLXMAKECONTEXTCURRENTPROC epoxy_glXMakeContextCurrent; + PFNGLXMAKECURRENTPROC epoxy_glXMakeCurrent; + PFNGLXMAKECURRENTREADSGIPROC epoxy_glXMakeCurrentReadSGI; + PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC epoxy_glXNamedCopyBufferSubDataNV; + PFNGLXQUERYCHANNELDELTASSGIXPROC epoxy_glXQueryChannelDeltasSGIX; + PFNGLXQUERYCHANNELRECTSGIXPROC epoxy_glXQueryChannelRectSGIX; + PFNGLXQUERYCONTEXTPROC epoxy_glXQueryContext; + PFNGLXQUERYCONTEXTINFOEXTPROC epoxy_glXQueryContextInfoEXT; + PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC epoxy_glXQueryCurrentRendererIntegerMESA; + PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC epoxy_glXQueryCurrentRendererStringMESA; + PFNGLXQUERYDRAWABLEPROC epoxy_glXQueryDrawable; + PFNGLXQUERYEXTENSIONPROC epoxy_glXQueryExtension; + PFNGLXQUERYEXTENSIONSSTRINGPROC epoxy_glXQueryExtensionsString; + PFNGLXQUERYFRAMECOUNTNVPROC epoxy_glXQueryFrameCountNV; + PFNGLXQUERYGLXPBUFFERSGIXPROC epoxy_glXQueryGLXPbufferSGIX; + PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC epoxy_glXQueryHyperpipeAttribSGIX; + PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC epoxy_glXQueryHyperpipeBestAttribSGIX; + PFNGLXQUERYHYPERPIPECONFIGSGIXPROC epoxy_glXQueryHyperpipeConfigSGIX; + PFNGLXQUERYHYPERPIPENETWORKSGIXPROC epoxy_glXQueryHyperpipeNetworkSGIX; + PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC epoxy_glXQueryMaxSwapBarriersSGIX; + PFNGLXQUERYMAXSWAPGROUPSNVPROC epoxy_glXQueryMaxSwapGroupsNV; + PFNGLXQUERYRENDERERINTEGERMESAPROC epoxy_glXQueryRendererIntegerMESA; + PFNGLXQUERYRENDERERSTRINGMESAPROC epoxy_glXQueryRendererStringMESA; + PFNGLXQUERYSERVERSTRINGPROC epoxy_glXQueryServerString; + PFNGLXQUERYSWAPGROUPNVPROC epoxy_glXQuerySwapGroupNV; + PFNGLXQUERYVERSIONPROC epoxy_glXQueryVersion; + PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC epoxy_glXQueryVideoCaptureDeviceNV; + PFNGLXRELEASEBUFFERSMESAPROC epoxy_glXReleaseBuffersMESA; + PFNGLXRELEASETEXIMAGEEXTPROC epoxy_glXReleaseTexImageEXT; + PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_glXReleaseVideoCaptureDeviceNV; + PFNGLXRELEASEVIDEODEVICENVPROC epoxy_glXReleaseVideoDeviceNV; + PFNGLXRELEASEVIDEOIMAGENVPROC epoxy_glXReleaseVideoImageNV; + PFNGLXRESETFRAMECOUNTNVPROC epoxy_glXResetFrameCountNV; + PFNGLXSELECTEVENTPROC epoxy_glXSelectEvent; + PFNGLXSELECTEVENTSGIXPROC epoxy_glXSelectEventSGIX; + PFNGLXSENDPBUFFERTOVIDEONVPROC epoxy_glXSendPbufferToVideoNV; + PFNGLXSET3DFXMODEMESAPROC epoxy_glXSet3DfxModeMESA; + PFNGLXSWAPBUFFERSPROC epoxy_glXSwapBuffers; + PFNGLXSWAPBUFFERSMSCOMLPROC epoxy_glXSwapBuffersMscOML; + PFNGLXSWAPINTERVALEXTPROC epoxy_glXSwapIntervalEXT; + PFNGLXSWAPINTERVALSGIPROC epoxy_glXSwapIntervalSGI; + PFNGLXUSEXFONTPROC epoxy_glXUseXFont; + PFNGLXWAITFORMSCOMLPROC epoxy_glXWaitForMscOML; + PFNGLXWAITFORSBCOMLPROC epoxy_glXWaitForSbcOML; + PFNGLXWAITGLPROC epoxy_glXWaitGL; + PFNGLXWAITVIDEOSYNCSGIPROC epoxy_glXWaitVideoSyncSGI; + PFNGLXWAITXPROC epoxy_glXWaitX; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum glx_provider { + glx_provider_terminator = 0, + GLX_10, + GLX_11, + GLX_12, + GLX_13, + GLX_extension_GLX_AMD_gpu_association, + GLX_extension_GLX_ARB_create_context, + GLX_extension_GLX_ARB_get_proc_address, + GLX_extension_GLX_EXT_import_context, + GLX_extension_GLX_EXT_swap_control, + GLX_extension_GLX_EXT_texture_from_pixmap, + GLX_extension_GLX_MESA_agp_offset, + GLX_extension_GLX_MESA_copy_sub_buffer, + GLX_extension_GLX_MESA_pixmap_colormap, + GLX_extension_GLX_MESA_query_renderer, + GLX_extension_GLX_MESA_release_buffers, + GLX_extension_GLX_MESA_set_3dfx_mode, + GLX_extension_GLX_NV_copy_buffer, + GLX_extension_GLX_NV_copy_image, + GLX_extension_GLX_NV_delay_before_swap, + GLX_extension_GLX_NV_present_video, + GLX_extension_GLX_NV_swap_group, + GLX_extension_GLX_NV_video_capture, + GLX_extension_GLX_NV_video_out, + GLX_extension_GLX_OML_sync_control, + GLX_extension_GLX_SGIX_fbconfig, + GLX_extension_GLX_SGIX_hyperpipe, + GLX_extension_GLX_SGIX_pbuffer, + GLX_extension_GLX_SGIX_swap_barrier, + GLX_extension_GLX_SGIX_swap_group, + GLX_extension_GLX_SGIX_video_resize, + GLX_extension_GLX_SGIX_video_source, + GLX_extension_GLX_SGI_cushion, + GLX_extension_GLX_SGI_make_current_read, + GLX_extension_GLX_SGI_swap_control, + GLX_extension_GLX_SGI_video_sync, + GLX_extension_GLX_SUN_get_transparent_index, + always_present, +} PACKED; + +static const char *enum_string = + "GLX 10\0" + "GLX 11\0" + "GLX 12\0" + "GLX 13\0" + "GLX extension \"GLX_AMD_gpu_association\"\0" + "GLX extension \"GLX_ARB_create_context\"\0" + "GLX extension \"GLX_ARB_get_proc_address\"\0" + "GLX extension \"GLX_EXT_import_context\"\0" + "GLX extension \"GLX_EXT_swap_control\"\0" + "GLX extension \"GLX_EXT_texture_from_pixmap\"\0" + "GLX extension \"GLX_MESA_agp_offset\"\0" + "GLX extension \"GLX_MESA_copy_sub_buffer\"\0" + "GLX extension \"GLX_MESA_pixmap_colormap\"\0" + "GLX extension \"GLX_MESA_query_renderer\"\0" + "GLX extension \"GLX_MESA_release_buffers\"\0" + "GLX extension \"GLX_MESA_set_3dfx_mode\"\0" + "GLX extension \"GLX_NV_copy_buffer\"\0" + "GLX extension \"GLX_NV_copy_image\"\0" + "GLX extension \"GLX_NV_delay_before_swap\"\0" + "GLX extension \"GLX_NV_present_video\"\0" + "GLX extension \"GLX_NV_swap_group\"\0" + "GLX extension \"GLX_NV_video_capture\"\0" + "GLX extension \"GLX_NV_video_out\"\0" + "GLX extension \"GLX_OML_sync_control\"\0" + "GLX extension \"GLX_SGIX_fbconfig\"\0" + "GLX extension \"GLX_SGIX_hyperpipe\"\0" + "GLX extension \"GLX_SGIX_pbuffer\"\0" + "GLX extension \"GLX_SGIX_swap_barrier\"\0" + "GLX extension \"GLX_SGIX_swap_group\"\0" + "GLX extension \"GLX_SGIX_video_resize\"\0" + "GLX extension \"GLX_SGIX_video_source\"\0" + "GLX extension \"GLX_SGI_cushion\"\0" + "GLX extension \"GLX_SGI_make_current_read\"\0" + "GLX extension \"GLX_SGI_swap_control\"\0" + "GLX extension \"GLX_SGI_video_sync\"\0" + "GLX extension \"GLX_SUN_get_transparent_index\"\0" + "always present\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* glx_provider_terminator, unused */ + 0, /* GLX_10 */ + 7, /* GLX_11 */ + 14, /* GLX_12 */ + 21, /* GLX_13 */ + 28, /* GLX_extension_GLX_AMD_gpu_association */ + 68, /* GLX_extension_GLX_ARB_create_context */ + 107, /* GLX_extension_GLX_ARB_get_proc_address */ + 148, /* GLX_extension_GLX_EXT_import_context */ + 187, /* GLX_extension_GLX_EXT_swap_control */ + 224, /* GLX_extension_GLX_EXT_texture_from_pixmap */ + 268, /* GLX_extension_GLX_MESA_agp_offset */ + 304, /* GLX_extension_GLX_MESA_copy_sub_buffer */ + 345, /* GLX_extension_GLX_MESA_pixmap_colormap */ + 386, /* GLX_extension_GLX_MESA_query_renderer */ + 426, /* GLX_extension_GLX_MESA_release_buffers */ + 467, /* GLX_extension_GLX_MESA_set_3dfx_mode */ + 506, /* GLX_extension_GLX_NV_copy_buffer */ + 541, /* GLX_extension_GLX_NV_copy_image */ + 575, /* GLX_extension_GLX_NV_delay_before_swap */ + 616, /* GLX_extension_GLX_NV_present_video */ + 653, /* GLX_extension_GLX_NV_swap_group */ + 687, /* GLX_extension_GLX_NV_video_capture */ + 724, /* GLX_extension_GLX_NV_video_out */ + 757, /* GLX_extension_GLX_OML_sync_control */ + 794, /* GLX_extension_GLX_SGIX_fbconfig */ + 828, /* GLX_extension_GLX_SGIX_hyperpipe */ + 863, /* GLX_extension_GLX_SGIX_pbuffer */ + 896, /* GLX_extension_GLX_SGIX_swap_barrier */ + 934, /* GLX_extension_GLX_SGIX_swap_group */ + 970, /* GLX_extension_GLX_SGIX_video_resize */ + 1008, /* GLX_extension_GLX_SGIX_video_source */ + 1046, /* GLX_extension_GLX_SGI_cushion */ + 1078, /* GLX_extension_GLX_SGI_make_current_read */ + 1120, /* GLX_extension_GLX_SGI_swap_control */ + 1157, /* GLX_extension_GLX_SGI_video_sync */ + 1192, /* GLX_extension_GLX_SUN_get_transparent_index */ + 1238, /* always_present */ +}; + +static const char entrypoint_strings[] = { + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'T', + 'o', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 'S', + 'G', + 'I', + 'X', + 0, // glXBindChannelToWindowSGIX + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glXBindHyperpipeSGIX + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // glXBindSwapBarrierNV + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXBindSwapBarrierSGIX + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glXBindTexImageEXT + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXBindVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXBindVideoDeviceNV + 'g', + 'l', + 'X', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glXBindVideoImageNV + 'g', + 'l', + 'X', + 'B', + 'l', + 'i', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'M', + 'D', + 0, // glXBlitContextFramebufferAMD + 'g', + 'l', + 'X', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'R', + 'e', + 'c', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXChannelRectSGIX + 'g', + 'l', + 'X', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'R', + 'e', + 'c', + 't', + 'S', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 'X', + 0, // glXChannelRectSyncSGIX + 'g', + 'l', + 'X', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // glXChooseFBConfig + 'g', + 'l', + 'X', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXChooseFBConfigSGIX + 'g', + 'l', + 'X', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 0, // glXChooseVisual + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glXCopyBufferSubDataNV + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXCopyContext + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glXCopyImageSubDataNV + 'g', + 'l', + 'X', + 'C', + 'o', + 'p', + 'y', + 'S', + 'u', + 'b', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'M', + 'E', + 'S', + 'A', + 0, // glXCopySubBufferMESA + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // glXCreateAssociatedContextAMD + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'M', + 'D', + 0, // glXCreateAssociatedContextAttribsAMD + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXCreateContext + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'R', + 'B', + 0, // glXCreateContextAttribsARB + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'W', + 'i', + 't', + 'h', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXCreateContextWithConfigSGIX + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXCreateGLXPbufferSGIX + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXCreateGLXPixmap + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'M', + 'E', + 'S', + 'A', + 0, // glXCreateGLXPixmapMESA + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 'W', + 'i', + 't', + 'h', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXCreateGLXPixmapWithConfigSGIX + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'N', + 'e', + 'w', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXCreateNewContext + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glXCreatePbuffer + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXCreatePixmap + 'g', + 'l', + 'X', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 0, // glXCreateWindow + 'g', + 'l', + 'X', + 'C', + 'u', + 's', + 'h', + 'i', + 'o', + 'n', + 'S', + 'G', + 'I', + 0, // glXCushionSGI + 'g', + 'l', + 'X', + 'D', + 'e', + 'l', + 'a', + 'y', + 'B', + 'e', + 'f', + 'o', + 'r', + 'e', + 'S', + 'w', + 'a', + 'p', + 'N', + 'V', + 0, // glXDelayBeforeSwapNV + 'g', + 'l', + 'X', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // glXDeleteAssociatedContextAMD + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXDestroyContext + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'G', + 'L', + 'X', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXDestroyGLXPbufferSGIX + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'G', + 'L', + 'X', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXDestroyGLXPixmap + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'G', + 'L', + 'X', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'S', + 'G', + 'I', + 'X', + 0, // glXDestroyGLXVideoSourceSGIX + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXDestroyHyperpipeConfigSGIX + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 0, // glXDestroyPbuffer + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'i', + 'x', + 'm', + 'a', + 'p', + 0, // glXDestroyPixmap + 'g', + 'l', + 'X', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'W', + 'i', + 'n', + 'd', + 'o', + 'w', + 0, // glXDestroyWindow + 'g', + 'l', + 'X', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glXEnumerateVideoCaptureDevicesNV + 'g', + 'l', + 'X', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // glXEnumerateVideoDevicesNV + 'g', + 'l', + 'X', + 'F', + 'r', + 'e', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'E', + 'X', + 'T', + 0, // glXFreeContextEXT + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'A', + 'G', + 'P', + 'O', + 'f', + 'f', + 's', + 'e', + 't', + 'M', + 'E', + 'S', + 'A', + 0, // glXGetAGPOffsetMESA + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'l', + 'i', + 'e', + 'n', + 't', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glXGetClientString + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // glXGetConfig + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 'A', + 'M', + 'D', + 0, // glXGetContextGPUIDAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'I', + 'D', + 'E', + 'X', + 'T', + 0, // glXGetContextIDEXT + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // glXGetCurrentAssociatedContextAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXGetCurrentContext + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 0, // glXGetCurrentDisplay + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'E', + 'X', + 'T', + 0, // glXGetCurrentDisplayEXT + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 0, // glXGetCurrentDrawable + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 0, // glXGetCurrentReadDrawable + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 'S', + 'G', + 'I', + 0, // glXGetCurrentReadDrawableSGI + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 0, // glXGetFBConfigAttrib + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetFBConfigAttribSGIX + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'F', + 'r', + 'o', + 'm', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetFBConfigFromVisualSGIX + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 's', + 0, // glXGetFBConfigs + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 's', + 'A', + 'M', + 'D', + 0, // glXGetGPUIDsAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'n', + 'f', + 'o', + 'A', + 'M', + 'D', + 0, // glXGetGPUInfoAMD + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'M', + 's', + 'c', + 'R', + 'a', + 't', + 'e', + 'O', + 'M', + 'L', + 0, // glXGetMscRateOML + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // glXGetProcAddress + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 'A', + 'R', + 'B', + 0, // glXGetProcAddressARB + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'e', + 'd', + 'E', + 'v', + 'e', + 'n', + 't', + 0, // glXGetSelectedEvent + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'e', + 'd', + 'E', + 'v', + 'e', + 'n', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetSelectedEventSGIX + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'O', + 'M', + 'L', + 0, // glXGetSyncValuesOML + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'T', + 'r', + 'a', + 'n', + 's', + 'p', + 'a', + 'r', + 'e', + 'n', + 't', + 'I', + 'n', + 'd', + 'e', + 'x', + 'S', + 'U', + 'N', + 0, // glXGetTransparentIndexSUN + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXGetVideoDeviceNV + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'n', + 'f', + 'o', + 'N', + 'V', + 0, // glXGetVideoInfoNV + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 0, // glXGetVideoSyncSGI + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 'F', + 'r', + 'o', + 'm', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 0, // glXGetVisualFromFBConfig + 'g', + 'l', + 'X', + 'G', + 'e', + 't', + 'V', + 'i', + 's', + 'u', + 'a', + 'l', + 'F', + 'r', + 'o', + 'm', + 'F', + 'B', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXGetVisualFromFBConfigSGIX + 'g', + 'l', + 'X', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXHyperpipeAttribSGIX + 'g', + 'l', + 'X', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXHyperpipeConfigSGIX + 'g', + 'l', + 'X', + 'I', + 'm', + 'p', + 'o', + 'r', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'E', + 'X', + 'T', + 0, // glXImportContextEXT + 'g', + 'l', + 'X', + 'I', + 's', + 'D', + 'i', + 'r', + 'e', + 'c', + 't', + 0, // glXIsDirect + 'g', + 'l', + 'X', + 'J', + 'o', + 'i', + 'n', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // glXJoinSwapGroupNV + 'g', + 'l', + 'X', + 'J', + 'o', + 'i', + 'n', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'S', + 'G', + 'I', + 'X', + 0, // glXJoinSwapGroupSGIX + 'g', + 'l', + 'X', + 'L', + 'o', + 'c', + 'k', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXLockVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 'M', + 'D', + 0, // glXMakeAssociatedContextCurrentAMD + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // glXMakeContextCurrent + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // glXMakeCurrent + 'g', + 'l', + 'X', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'S', + 'G', + 'I', + 0, // glXMakeCurrentReadSGI + 'g', + 'l', + 'X', + 'N', + 'a', + 'm', + 'e', + 'd', + 'C', + 'o', + 'p', + 'y', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // glXNamedCopyBufferSubDataNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'D', + 'e', + 'l', + 't', + 'a', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryChannelDeltasSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'h', + 'a', + 'n', + 'n', + 'e', + 'l', + 'R', + 'e', + 'c', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryChannelRectSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // glXQueryContext + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'I', + 'n', + 'f', + 'o', + 'E', + 'X', + 'T', + 0, // glXQueryContextInfoEXT + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryCurrentRendererIntegerMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryCurrentRendererStringMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'D', + 'r', + 'a', + 'w', + 'a', + 'b', + 'l', + 'e', + 0, // glXQueryDrawable + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 0, // glXQueryExtension + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 's', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glXQueryExtensionsString + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glXQueryFrameCountNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'G', + 'L', + 'X', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryGLXPbufferSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeAttribSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'B', + 'e', + 's', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeBestAttribSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'C', + 'o', + 'n', + 'f', + 'i', + 'g', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeConfigSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'H', + 'y', + 'p', + 'e', + 'r', + 'p', + 'i', + 'p', + 'e', + 'N', + 'e', + 't', + 'w', + 'o', + 'r', + 'k', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryHyperpipeNetworkSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 'x', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 's', + 'S', + 'G', + 'I', + 'X', + 0, // glXQueryMaxSwapBarriersSGIX + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 'x', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 's', + 'N', + 'V', + 0, // glXQueryMaxSwapGroupsNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'I', + 'n', + 't', + 'e', + 'g', + 'e', + 'r', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryRendererIntegerMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'R', + 'e', + 'n', + 'd', + 'e', + 'r', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'M', + 'E', + 'S', + 'A', + 0, // glXQueryRendererStringMESA + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'e', + 'r', + 'v', + 'e', + 'r', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 0, // glXQueryServerString + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // glXQuerySwapGroupNV + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'V', + 'e', + 'r', + 's', + 'i', + 'o', + 'n', + 0, // glXQueryVersion + 'g', + 'l', + 'X', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXQueryVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 'E', + 'S', + 'A', + 0, // glXReleaseBuffersMESA + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'E', + 'X', + 'T', + 0, // glXReleaseTexImageEXT + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXReleaseVideoCaptureDeviceNV + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // glXReleaseVideoDeviceNV + 'g', + 'l', + 'X', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // glXReleaseVideoImageNV + 'g', + 'l', + 'X', + 'R', + 'e', + 's', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // glXResetFrameCountNV + 'g', + 'l', + 'X', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'E', + 'v', + 'e', + 'n', + 't', + 0, // glXSelectEvent + 'g', + 'l', + 'X', + 'S', + 'e', + 'l', + 'e', + 'c', + 't', + 'E', + 'v', + 'e', + 'n', + 't', + 'S', + 'G', + 'I', + 'X', + 0, // glXSelectEventSGIX + 'g', + 'l', + 'X', + 'S', + 'e', + 'n', + 'd', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'o', + 'V', + 'i', + 'd', + 'e', + 'o', + 'N', + 'V', + 0, // glXSendPbufferToVideoNV + 'g', + 'l', + 'X', + 'S', + 'e', + 't', + '3', + 'D', + 'f', + 'x', + 'M', + 'o', + 'd', + 'e', + 'M', + 'E', + 'S', + 'A', + 0, // glXSet3DfxModeMESA + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // glXSwapBuffers + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // glXSwapBuffersMscOML + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // glXSwapIntervalEXT + 'g', + 'l', + 'X', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'S', + 'G', + 'I', + 0, // glXSwapIntervalSGI + 'g', + 'l', + 'X', + 'U', + 's', + 'e', + 'X', + 'F', + 'o', + 'n', + 't', + 0, // glXUseXFont + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // glXWaitForMscOML + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'S', + 'b', + 'c', + 'O', + 'M', + 'L', + 0, // glXWaitForSbcOML + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'G', + 'L', + 0, // glXWaitGL + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'S', + 'y', + 'n', + 'c', + 'S', + 'G', + 'I', + 0, // glXWaitVideoSyncSGI + 'g', + 'l', + 'X', + 'W', + 'a', + 'i', + 't', + 'X', + 0, // glXWaitX + 0 }; + +static void *glx_provider_resolver(const char *name, + const enum glx_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != glx_provider_terminator; i++) { + switch (providers[i]) { + case GLX_10: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_11: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_12: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_13: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_AMD_gpu_association: + if (epoxy_conservative_has_glx_extension("GLX_AMD_gpu_association")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_ARB_create_context: + if (epoxy_conservative_has_glx_extension("GLX_ARB_create_context")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_ARB_get_proc_address: + if (epoxy_conservative_has_glx_extension("GLX_ARB_get_proc_address")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_EXT_import_context: + if (epoxy_conservative_has_glx_extension("GLX_EXT_import_context")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_EXT_swap_control: + if (epoxy_conservative_has_glx_extension("GLX_EXT_swap_control")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_EXT_texture_from_pixmap: + if (epoxy_conservative_has_glx_extension("GLX_EXT_texture_from_pixmap")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_agp_offset: + if (epoxy_conservative_has_glx_extension("GLX_MESA_agp_offset")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_copy_sub_buffer: + if (epoxy_conservative_has_glx_extension("GLX_MESA_copy_sub_buffer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_pixmap_colormap: + if (epoxy_conservative_has_glx_extension("GLX_MESA_pixmap_colormap")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_query_renderer: + if (epoxy_conservative_has_glx_extension("GLX_MESA_query_renderer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_release_buffers: + if (epoxy_conservative_has_glx_extension("GLX_MESA_release_buffers")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_MESA_set_3dfx_mode: + if (epoxy_conservative_has_glx_extension("GLX_MESA_set_3dfx_mode")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_copy_buffer: + if (epoxy_conservative_has_glx_extension("GLX_NV_copy_buffer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_copy_image: + if (epoxy_conservative_has_glx_extension("GLX_NV_copy_image")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_delay_before_swap: + if (epoxy_conservative_has_glx_extension("GLX_NV_delay_before_swap")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_present_video: + if (epoxy_conservative_has_glx_extension("GLX_NV_present_video")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_swap_group: + if (epoxy_conservative_has_glx_extension("GLX_NV_swap_group")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_video_capture: + if (epoxy_conservative_has_glx_extension("GLX_NV_video_capture")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_NV_video_out: + if (epoxy_conservative_has_glx_extension("GLX_NV_video_out")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_OML_sync_control: + if (epoxy_conservative_has_glx_extension("GLX_OML_sync_control")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_fbconfig: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_fbconfig")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_hyperpipe: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_hyperpipe")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_pbuffer: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_pbuffer")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_swap_barrier: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_swap_barrier")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_swap_group: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_swap_group")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_video_resize: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_video_resize")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGIX_video_source: + if (epoxy_conservative_has_glx_extension("GLX_SGIX_video_source")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_cushion: + if (epoxy_conservative_has_glx_extension("GLX_SGI_cushion")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_make_current_read: + if (epoxy_conservative_has_glx_extension("GLX_SGI_make_current_read")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_swap_control: + if (epoxy_conservative_has_glx_extension("GLX_SGI_swap_control")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SGI_video_sync: + if (epoxy_conservative_has_glx_extension("GLX_SGI_video_sync")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case GLX_extension_GLX_SUN_get_transparent_index: + if (epoxy_conservative_has_glx_extension("GLX_SUN_get_transparent_index")) + return glXGetProcAddress((const GLubyte *)entrypoint_strings + entrypoints[i]); + break; + case always_present: + if (true) + return epoxy_glx_dlsym(entrypoint_strings + entrypoints[i]); + break; + case glx_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != glx_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == glx_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +glx_single_resolver(const enum glx_provider provider, const uint32_t entrypoint_offset); + +static void * +glx_single_resolver(const enum glx_provider provider, const uint32_t entrypoint_offset) +{ + const enum glx_provider providers[] = { + provider, + glx_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return glx_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNGLXBINDCHANNELTOWINDOWSGIXPROC +epoxy_glXBindChannelToWindowSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 0 /* glXBindChannelToWindowSGIX */); +} + +static PFNGLXBINDHYPERPIPESGIXPROC +epoxy_glXBindHyperpipeSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 27 /* glXBindHyperpipeSGIX */); +} + +static PFNGLXBINDSWAPBARRIERNVPROC +epoxy_glXBindSwapBarrierNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 48 /* glXBindSwapBarrierNV */); +} + +static PFNGLXBINDSWAPBARRIERSGIXPROC +epoxy_glXBindSwapBarrierSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_swap_barrier, 69 /* glXBindSwapBarrierSGIX */); +} + +static PFNGLXBINDTEXIMAGEEXTPROC +epoxy_glXBindTexImageEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_texture_from_pixmap, 92 /* glXBindTexImageEXT */); +} + +static PFNGLXBINDVIDEOCAPTUREDEVICENVPROC +epoxy_glXBindVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 111 /* glXBindVideoCaptureDeviceNV */); +} + +static PFNGLXBINDVIDEODEVICENVPROC +epoxy_glXBindVideoDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_present_video, 139 /* glXBindVideoDeviceNV */); +} + +static PFNGLXBINDVIDEOIMAGENVPROC +epoxy_glXBindVideoImageNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 160 /* glXBindVideoImageNV */); +} + +static PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC +epoxy_glXBlitContextFramebufferAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 180 /* glXBlitContextFramebufferAMD */); +} + +static PFNGLXCHANNELRECTSGIXPROC +epoxy_glXChannelRectSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 209 /* glXChannelRectSGIX */); +} + +static PFNGLXCHANNELRECTSYNCSGIXPROC +epoxy_glXChannelRectSyncSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 228 /* glXChannelRectSyncSGIX */); +} + +static PFNGLXCHOOSEFBCONFIGPROC +epoxy_glXChooseFBConfig_resolver(void) +{ + return glx_single_resolver(GLX_13, 251 /* glXChooseFBConfig */); +} + +static PFNGLXCHOOSEFBCONFIGSGIXPROC +epoxy_glXChooseFBConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 269 /* glXChooseFBConfigSGIX */); +} + +static PFNGLXCHOOSEVISUALPROC +epoxy_glXChooseVisual_resolver(void) +{ + return glx_single_resolver(GLX_10, 291 /* glXChooseVisual */); +} + +static PFNGLXCOPYBUFFERSUBDATANVPROC +epoxy_glXCopyBufferSubDataNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_copy_buffer, 307 /* glXCopyBufferSubDataNV */); +} + +static PFNGLXCOPYCONTEXTPROC +epoxy_glXCopyContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 330 /* glXCopyContext */); +} + +static PFNGLXCOPYIMAGESUBDATANVPROC +epoxy_glXCopyImageSubDataNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_copy_image, 345 /* glXCopyImageSubDataNV */); +} + +static PFNGLXCOPYSUBBUFFERMESAPROC +epoxy_glXCopySubBufferMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_copy_sub_buffer, 367 /* glXCopySubBufferMESA */); +} + +static PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC +epoxy_glXCreateAssociatedContextAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 388 /* glXCreateAssociatedContextAMD */); +} + +static PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC +epoxy_glXCreateAssociatedContextAttribsAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 418 /* glXCreateAssociatedContextAttribsAMD */); +} + +static PFNGLXCREATECONTEXTPROC +epoxy_glXCreateContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 455 /* glXCreateContext */); +} + +static PFNGLXCREATECONTEXTATTRIBSARBPROC +epoxy_glXCreateContextAttribsARB_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_ARB_create_context, 472 /* glXCreateContextAttribsARB */); +} + +static PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC +epoxy_glXCreateContextWithConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 499 /* glXCreateContextWithConfigSGIX */); +} + +static PFNGLXCREATEGLXPBUFFERSGIXPROC +epoxy_glXCreateGLXPbufferSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 530 /* glXCreateGLXPbufferSGIX */); +} + +static PFNGLXCREATEGLXPIXMAPPROC +epoxy_glXCreateGLXPixmap_resolver(void) +{ + return glx_single_resolver(GLX_10, 554 /* glXCreateGLXPixmap */); +} + +static PFNGLXCREATEGLXPIXMAPMESAPROC +epoxy_glXCreateGLXPixmapMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_pixmap_colormap, 573 /* glXCreateGLXPixmapMESA */); +} + +static PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC +epoxy_glXCreateGLXPixmapWithConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 596 /* glXCreateGLXPixmapWithConfigSGIX */); +} + +static PFNGLXCREATENEWCONTEXTPROC +epoxy_glXCreateNewContext_resolver(void) +{ + return glx_single_resolver(GLX_13, 629 /* glXCreateNewContext */); +} + +static PFNGLXCREATEPBUFFERPROC +epoxy_glXCreatePbuffer_resolver(void) +{ + return glx_single_resolver(GLX_13, 649 /* glXCreatePbuffer */); +} + +static PFNGLXCREATEPIXMAPPROC +epoxy_glXCreatePixmap_resolver(void) +{ + return glx_single_resolver(GLX_13, 666 /* glXCreatePixmap */); +} + +static PFNGLXCREATEWINDOWPROC +epoxy_glXCreateWindow_resolver(void) +{ + return glx_single_resolver(GLX_13, 682 /* glXCreateWindow */); +} + +static PFNGLXCUSHIONSGIPROC +epoxy_glXCushionSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_cushion, 698 /* glXCushionSGI */); +} + +static PFNGLXDELAYBEFORESWAPNVPROC +epoxy_glXDelayBeforeSwapNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_delay_before_swap, 712 /* glXDelayBeforeSwapNV */); +} + +static PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC +epoxy_glXDeleteAssociatedContextAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 733 /* glXDeleteAssociatedContextAMD */); +} + +static PFNGLXDESTROYCONTEXTPROC +epoxy_glXDestroyContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 763 /* glXDestroyContext */); +} + +static PFNGLXDESTROYGLXPBUFFERSGIXPROC +epoxy_glXDestroyGLXPbufferSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 781 /* glXDestroyGLXPbufferSGIX */); +} + +static PFNGLXDESTROYGLXPIXMAPPROC +epoxy_glXDestroyGLXPixmap_resolver(void) +{ + return glx_single_resolver(GLX_10, 806 /* glXDestroyGLXPixmap */); +} + +static PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC +epoxy_glXDestroyGLXVideoSourceSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_source, 826 /* glXDestroyGLXVideoSourceSGIX */); +} + +static PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC +epoxy_glXDestroyHyperpipeConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 855 /* glXDestroyHyperpipeConfigSGIX */); +} + +static PFNGLXDESTROYPBUFFERPROC +epoxy_glXDestroyPbuffer_resolver(void) +{ + return glx_single_resolver(GLX_13, 885 /* glXDestroyPbuffer */); +} + +static PFNGLXDESTROYPIXMAPPROC +epoxy_glXDestroyPixmap_resolver(void) +{ + return glx_single_resolver(GLX_13, 903 /* glXDestroyPixmap */); +} + +static PFNGLXDESTROYWINDOWPROC +epoxy_glXDestroyWindow_resolver(void) +{ + return glx_single_resolver(GLX_13, 920 /* glXDestroyWindow */); +} + +static PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC +epoxy_glXEnumerateVideoCaptureDevicesNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 937 /* glXEnumerateVideoCaptureDevicesNV */); +} + +static PFNGLXENUMERATEVIDEODEVICESNVPROC +epoxy_glXEnumerateVideoDevicesNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_present_video, 971 /* glXEnumerateVideoDevicesNV */); +} + +static PFNGLXFREECONTEXTEXTPROC +epoxy_glXFreeContextEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 998 /* glXFreeContextEXT */); +} + +static PFNGLXGETAGPOFFSETMESAPROC +epoxy_glXGetAGPOffsetMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_agp_offset, 1016 /* glXGetAGPOffsetMESA */); +} + +static PFNGLXGETCLIENTSTRINGPROC +epoxy_glXGetClientString_resolver(void) +{ + return glx_single_resolver(GLX_11, 1036 /* glXGetClientString */); +} + +static PFNGLXGETCONFIGPROC +epoxy_glXGetConfig_resolver(void) +{ + return glx_single_resolver(GLX_10, 1055 /* glXGetConfig */); +} + +static PFNGLXGETCONTEXTGPUIDAMDPROC +epoxy_glXGetContextGPUIDAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1068 /* glXGetContextGPUIDAMD */); +} + +static PFNGLXGETCONTEXTIDEXTPROC +epoxy_glXGetContextIDEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 1090 /* glXGetContextIDEXT */); +} + +static PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC +epoxy_glXGetCurrentAssociatedContextAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1109 /* glXGetCurrentAssociatedContextAMD */); +} + +static PFNGLXGETCURRENTCONTEXTPROC +epoxy_glXGetCurrentContext_resolver(void) +{ + return glx_single_resolver(GLX_10, 1143 /* glXGetCurrentContext */); +} + +static PFNGLXGETCURRENTDISPLAYPROC +epoxy_glXGetCurrentDisplay_resolver(void) +{ + return glx_single_resolver(GLX_12, 1164 /* glXGetCurrentDisplay */); +} + +static PFNGLXGETCURRENTDISPLAYEXTPROC +epoxy_glXGetCurrentDisplayEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 1185 /* glXGetCurrentDisplayEXT */); +} + +static PFNGLXGETCURRENTDRAWABLEPROC +epoxy_glXGetCurrentDrawable_resolver(void) +{ + return glx_single_resolver(GLX_10, 1209 /* glXGetCurrentDrawable */); +} + +static PFNGLXGETCURRENTREADDRAWABLEPROC +epoxy_glXGetCurrentReadDrawable_resolver(void) +{ + return glx_single_resolver(GLX_13, 1231 /* glXGetCurrentReadDrawable */); +} + +static PFNGLXGETCURRENTREADDRAWABLESGIPROC +epoxy_glXGetCurrentReadDrawableSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_make_current_read, 1257 /* glXGetCurrentReadDrawableSGI */); +} + +static PFNGLXGETFBCONFIGATTRIBPROC +epoxy_glXGetFBConfigAttrib_resolver(void) +{ + return glx_single_resolver(GLX_13, 1286 /* glXGetFBConfigAttrib */); +} + +static PFNGLXGETFBCONFIGATTRIBSGIXPROC +epoxy_glXGetFBConfigAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 1307 /* glXGetFBConfigAttribSGIX */); +} + +static PFNGLXGETFBCONFIGFROMVISUALSGIXPROC +epoxy_glXGetFBConfigFromVisualSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 1332 /* glXGetFBConfigFromVisualSGIX */); +} + +static PFNGLXGETFBCONFIGSPROC +epoxy_glXGetFBConfigs_resolver(void) +{ + return glx_single_resolver(GLX_13, 1361 /* glXGetFBConfigs */); +} + +static PFNGLXGETGPUIDSAMDPROC +epoxy_glXGetGPUIDsAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1377 /* glXGetGPUIDsAMD */); +} + +static PFNGLXGETGPUINFOAMDPROC +epoxy_glXGetGPUInfoAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1393 /* glXGetGPUInfoAMD */); +} + +static PFNGLXGETMSCRATEOMLPROC +epoxy_glXGetMscRateOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 1410 /* glXGetMscRateOML */); +} + +static PFNGLXGETPROCADDRESSPROC +epoxy_glXGetProcAddress_resolver(void) +{ + return glx_single_resolver(always_present, 1427 /* glXGetProcAddress */); +} + +static PFNGLXGETPROCADDRESSARBPROC +epoxy_glXGetProcAddressARB_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_ARB_get_proc_address, 1445 /* glXGetProcAddressARB */); +} + +static PFNGLXGETSELECTEDEVENTPROC +epoxy_glXGetSelectedEvent_resolver(void) +{ + return glx_single_resolver(GLX_13, 1466 /* glXGetSelectedEvent */); +} + +static PFNGLXGETSELECTEDEVENTSGIXPROC +epoxy_glXGetSelectedEventSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 1486 /* glXGetSelectedEventSGIX */); +} + +static PFNGLXGETSYNCVALUESOMLPROC +epoxy_glXGetSyncValuesOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 1510 /* glXGetSyncValuesOML */); +} + +static PFNGLXGETTRANSPARENTINDEXSUNPROC +epoxy_glXGetTransparentIndexSUN_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SUN_get_transparent_index, 1530 /* glXGetTransparentIndexSUN */); +} + +static PFNGLXGETVIDEODEVICENVPROC +epoxy_glXGetVideoDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 1556 /* glXGetVideoDeviceNV */); +} + +static PFNGLXGETVIDEOINFONVPROC +epoxy_glXGetVideoInfoNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 1576 /* glXGetVideoInfoNV */); +} + +static PFNGLXGETVIDEOSYNCSGIPROC +epoxy_glXGetVideoSyncSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_video_sync, 1594 /* glXGetVideoSyncSGI */); +} + +static PFNGLXGETVISUALFROMFBCONFIGPROC +epoxy_glXGetVisualFromFBConfig_resolver(void) +{ + return glx_single_resolver(GLX_13, 1613 /* glXGetVisualFromFBConfig */); +} + +static PFNGLXGETVISUALFROMFBCONFIGSGIXPROC +epoxy_glXGetVisualFromFBConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_fbconfig, 1638 /* glXGetVisualFromFBConfigSGIX */); +} + +static PFNGLXHYPERPIPEATTRIBSGIXPROC +epoxy_glXHyperpipeAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 1667 /* glXHyperpipeAttribSGIX */); +} + +static PFNGLXHYPERPIPECONFIGSGIXPROC +epoxy_glXHyperpipeConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 1690 /* glXHyperpipeConfigSGIX */); +} + +static PFNGLXIMPORTCONTEXTEXTPROC +epoxy_glXImportContextEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 1713 /* glXImportContextEXT */); +} + +static PFNGLXISDIRECTPROC +epoxy_glXIsDirect_resolver(void) +{ + return glx_single_resolver(GLX_10, 1733 /* glXIsDirect */); +} + +static PFNGLXJOINSWAPGROUPNVPROC +epoxy_glXJoinSwapGroupNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 1745 /* glXJoinSwapGroupNV */); +} + +static PFNGLXJOINSWAPGROUPSGIXPROC +epoxy_glXJoinSwapGroupSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_swap_group, 1764 /* glXJoinSwapGroupSGIX */); +} + +static PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC +epoxy_glXLockVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 1785 /* glXLockVideoCaptureDeviceNV */); +} + +static PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC +epoxy_glXMakeAssociatedContextCurrentAMD_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_AMD_gpu_association, 1813 /* glXMakeAssociatedContextCurrentAMD */); +} + +static PFNGLXMAKECONTEXTCURRENTPROC +epoxy_glXMakeContextCurrent_resolver(void) +{ + return glx_single_resolver(GLX_13, 1848 /* glXMakeContextCurrent */); +} + +static PFNGLXMAKECURRENTPROC +epoxy_glXMakeCurrent_resolver(void) +{ + return glx_single_resolver(GLX_10, 1870 /* glXMakeCurrent */); +} + +static PFNGLXMAKECURRENTREADSGIPROC +epoxy_glXMakeCurrentReadSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_make_current_read, 1885 /* glXMakeCurrentReadSGI */); +} + +static PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC +epoxy_glXNamedCopyBufferSubDataNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_copy_buffer, 1907 /* glXNamedCopyBufferSubDataNV */); +} + +static PFNGLXQUERYCHANNELDELTASSGIXPROC +epoxy_glXQueryChannelDeltasSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 1935 /* glXQueryChannelDeltasSGIX */); +} + +static PFNGLXQUERYCHANNELRECTSGIXPROC +epoxy_glXQueryChannelRectSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_video_resize, 1961 /* glXQueryChannelRectSGIX */); +} + +static PFNGLXQUERYCONTEXTPROC +epoxy_glXQueryContext_resolver(void) +{ + return glx_single_resolver(GLX_13, 1985 /* glXQueryContext */); +} + +static PFNGLXQUERYCONTEXTINFOEXTPROC +epoxy_glXQueryContextInfoEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_import_context, 2001 /* glXQueryContextInfoEXT */); +} + +static PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC +epoxy_glXQueryCurrentRendererIntegerMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2024 /* glXQueryCurrentRendererIntegerMESA */); +} + +static PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC +epoxy_glXQueryCurrentRendererStringMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2059 /* glXQueryCurrentRendererStringMESA */); +} + +static PFNGLXQUERYDRAWABLEPROC +epoxy_glXQueryDrawable_resolver(void) +{ + return glx_single_resolver(GLX_13, 2093 /* glXQueryDrawable */); +} + +static PFNGLXQUERYEXTENSIONPROC +epoxy_glXQueryExtension_resolver(void) +{ + return glx_single_resolver(GLX_10, 2110 /* glXQueryExtension */); +} + +static PFNGLXQUERYEXTENSIONSSTRINGPROC +epoxy_glXQueryExtensionsString_resolver(void) +{ + return glx_single_resolver(GLX_11, 2128 /* glXQueryExtensionsString */); +} + +static PFNGLXQUERYFRAMECOUNTNVPROC +epoxy_glXQueryFrameCountNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2153 /* glXQueryFrameCountNV */); +} + +static PFNGLXQUERYGLXPBUFFERSGIXPROC +epoxy_glXQueryGLXPbufferSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 2174 /* glXQueryGLXPbufferSGIX */); +} + +static PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC +epoxy_glXQueryHyperpipeAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2197 /* glXQueryHyperpipeAttribSGIX */); +} + +static PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC +epoxy_glXQueryHyperpipeBestAttribSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2225 /* glXQueryHyperpipeBestAttribSGIX */); +} + +static PFNGLXQUERYHYPERPIPECONFIGSGIXPROC +epoxy_glXQueryHyperpipeConfigSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2257 /* glXQueryHyperpipeConfigSGIX */); +} + +static PFNGLXQUERYHYPERPIPENETWORKSGIXPROC +epoxy_glXQueryHyperpipeNetworkSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_hyperpipe, 2285 /* glXQueryHyperpipeNetworkSGIX */); +} + +static PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC +epoxy_glXQueryMaxSwapBarriersSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_swap_barrier, 2314 /* glXQueryMaxSwapBarriersSGIX */); +} + +static PFNGLXQUERYMAXSWAPGROUPSNVPROC +epoxy_glXQueryMaxSwapGroupsNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2342 /* glXQueryMaxSwapGroupsNV */); +} + +static PFNGLXQUERYRENDERERINTEGERMESAPROC +epoxy_glXQueryRendererIntegerMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2366 /* glXQueryRendererIntegerMESA */); +} + +static PFNGLXQUERYRENDERERSTRINGMESAPROC +epoxy_glXQueryRendererStringMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_query_renderer, 2394 /* glXQueryRendererStringMESA */); +} + +static PFNGLXQUERYSERVERSTRINGPROC +epoxy_glXQueryServerString_resolver(void) +{ + return glx_single_resolver(GLX_11, 2421 /* glXQueryServerString */); +} + +static PFNGLXQUERYSWAPGROUPNVPROC +epoxy_glXQuerySwapGroupNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2442 /* glXQuerySwapGroupNV */); +} + +static PFNGLXQUERYVERSIONPROC +epoxy_glXQueryVersion_resolver(void) +{ + return glx_single_resolver(GLX_10, 2462 /* glXQueryVersion */); +} + +static PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC +epoxy_glXQueryVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 2478 /* glXQueryVideoCaptureDeviceNV */); +} + +static PFNGLXRELEASEBUFFERSMESAPROC +epoxy_glXReleaseBuffersMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_release_buffers, 2507 /* glXReleaseBuffersMESA */); +} + +static PFNGLXRELEASETEXIMAGEEXTPROC +epoxy_glXReleaseTexImageEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_texture_from_pixmap, 2529 /* glXReleaseTexImageEXT */); +} + +static PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC +epoxy_glXReleaseVideoCaptureDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_capture, 2551 /* glXReleaseVideoCaptureDeviceNV */); +} + +static PFNGLXRELEASEVIDEODEVICENVPROC +epoxy_glXReleaseVideoDeviceNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 2582 /* glXReleaseVideoDeviceNV */); +} + +static PFNGLXRELEASEVIDEOIMAGENVPROC +epoxy_glXReleaseVideoImageNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 2606 /* glXReleaseVideoImageNV */); +} + +static PFNGLXRESETFRAMECOUNTNVPROC +epoxy_glXResetFrameCountNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_swap_group, 2629 /* glXResetFrameCountNV */); +} + +static PFNGLXSELECTEVENTPROC +epoxy_glXSelectEvent_resolver(void) +{ + return glx_single_resolver(GLX_13, 2650 /* glXSelectEvent */); +} + +static PFNGLXSELECTEVENTSGIXPROC +epoxy_glXSelectEventSGIX_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGIX_pbuffer, 2665 /* glXSelectEventSGIX */); +} + +static PFNGLXSENDPBUFFERTOVIDEONVPROC +epoxy_glXSendPbufferToVideoNV_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_NV_video_out, 2684 /* glXSendPbufferToVideoNV */); +} + +static PFNGLXSET3DFXMODEMESAPROC +epoxy_glXSet3DfxModeMESA_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_MESA_set_3dfx_mode, 2708 /* glXSet3DfxModeMESA */); +} + +static PFNGLXSWAPBUFFERSPROC +epoxy_glXSwapBuffers_resolver(void) +{ + return glx_single_resolver(GLX_10, 2727 /* glXSwapBuffers */); +} + +static PFNGLXSWAPBUFFERSMSCOMLPROC +epoxy_glXSwapBuffersMscOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 2742 /* glXSwapBuffersMscOML */); +} + +static PFNGLXSWAPINTERVALEXTPROC +epoxy_glXSwapIntervalEXT_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_EXT_swap_control, 2763 /* glXSwapIntervalEXT */); +} + +static PFNGLXSWAPINTERVALSGIPROC +epoxy_glXSwapIntervalSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_swap_control, 2782 /* glXSwapIntervalSGI */); +} + +static PFNGLXUSEXFONTPROC +epoxy_glXUseXFont_resolver(void) +{ + return glx_single_resolver(GLX_10, 2801 /* glXUseXFont */); +} + +static PFNGLXWAITFORMSCOMLPROC +epoxy_glXWaitForMscOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 2813 /* glXWaitForMscOML */); +} + +static PFNGLXWAITFORSBCOMLPROC +epoxy_glXWaitForSbcOML_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_OML_sync_control, 2830 /* glXWaitForSbcOML */); +} + +static PFNGLXWAITGLPROC +epoxy_glXWaitGL_resolver(void) +{ + return glx_single_resolver(GLX_10, 2847 /* glXWaitGL */); +} + +static PFNGLXWAITVIDEOSYNCSGIPROC +epoxy_glXWaitVideoSyncSGI_resolver(void) +{ + return glx_single_resolver(GLX_extension_GLX_SGI_video_sync, 2857 /* glXWaitVideoSyncSGI */); +} + +static PFNGLXWAITXPROC +epoxy_glXWaitX_resolver(void) +{ + return glx_single_resolver(GLX_10, 2877 /* glXWaitX */); +} + +GEN_THUNKS_RET(int, glXBindChannelToWindowSGIX, (Display * display, int screen, int channel, Window window), (display, screen, channel, window)) +GEN_THUNKS_RET(int, glXBindHyperpipeSGIX, (Display * dpy, int hpId), (dpy, hpId)) +GEN_THUNKS_RET(Bool, glXBindSwapBarrierNV, (Display * dpy, GLuint group, GLuint barrier), (dpy, group, barrier)) +GEN_THUNKS(glXBindSwapBarrierSGIX, (Display * dpy, GLXDrawable drawable, int barrier), (dpy, drawable, barrier)) +GEN_THUNKS(glXBindTexImageEXT, (Display * dpy, GLXDrawable drawable, int buffer, const int * attrib_list), (dpy, drawable, buffer, attrib_list)) +GEN_THUNKS_RET(int, glXBindVideoCaptureDeviceNV, (Display * dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device), (dpy, video_capture_slot, device)) +GEN_THUNKS_RET(int, glXBindVideoDeviceNV, (Display * dpy, unsigned int video_slot, unsigned int video_device, const int * attrib_list), (dpy, video_slot, video_device, attrib_list)) +GEN_THUNKS_RET(int, glXBindVideoImageNV, (Display * dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer), (dpy, VideoDevice, pbuf, iVideoBuffer)) +GEN_THUNKS(glXBlitContextFramebufferAMD, (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (dstCtx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS_RET(int, glXChannelRectSGIX, (Display * display, int screen, int channel, int x, int y, int w, int h), (display, screen, channel, x, y, w, h)) +GEN_THUNKS_RET(int, glXChannelRectSyncSGIX, (Display * display, int screen, int channel, GLenum synctype), (display, screen, channel, synctype)) +GEN_THUNKS_RET(GLXFBConfig *, glXChooseFBConfig, (Display * dpy, int screen, const int * attrib_list, int * nelements), (dpy, screen, attrib_list, nelements)) +GEN_THUNKS_RET(GLXFBConfigSGIX *, glXChooseFBConfigSGIX, (Display * dpy, int screen, int * attrib_list, int * nelements), (dpy, screen, attrib_list, nelements)) +GEN_THUNKS_RET(XVisualInfo *, glXChooseVisual, (Display * dpy, int screen, int * attribList), (dpy, screen, attribList)) +GEN_THUNKS(glXCopyBufferSubDataNV, (Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (dpy, readCtx, writeCtx, readTarget, writeTarget, readOffset, writeOffset, size)) +GEN_THUNKS(glXCopyContext, (Display * dpy, GLXContext src, GLXContext dst, unsigned long mask), (dpy, src, dst, mask)) +GEN_THUNKS(glXCopyImageSubDataNV, (Display * dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth), (dpy, srcCtx, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstCtx, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth)) +GEN_THUNKS(glXCopySubBufferMESA, (Display * dpy, GLXDrawable drawable, int x, int y, int width, int height), (dpy, drawable, x, y, width, height)) +GEN_THUNKS_RET(GLXContext, glXCreateAssociatedContextAMD, (unsigned int id, GLXContext share_list), (id, share_list)) +GEN_THUNKS_RET(GLXContext, glXCreateAssociatedContextAttribsAMD, (unsigned int id, GLXContext share_context, const int * attribList), (id, share_context, attribList)) +GEN_THUNKS_RET(GLXContext, glXCreateContext, (Display * dpy, XVisualInfo * vis, GLXContext shareList, Bool direct), (dpy, vis, shareList, direct)) +GEN_THUNKS_RET(GLXContext, glXCreateContextAttribsARB, (Display * dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int * attrib_list), (dpy, config, share_context, direct, attrib_list)) +GEN_THUNKS_RET(GLXContext, glXCreateContextWithConfigSGIX, (Display * dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct), (dpy, config, render_type, share_list, direct)) +GEN_THUNKS_RET(GLXPbufferSGIX, glXCreateGLXPbufferSGIX, (Display * dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int * attrib_list), (dpy, config, width, height, attrib_list)) +GEN_THUNKS_RET(GLXPixmap, glXCreateGLXPixmap, (Display * dpy, XVisualInfo * visual, Pixmap pixmap), (dpy, visual, pixmap)) +GEN_THUNKS_RET(GLXPixmap, glXCreateGLXPixmapMESA, (Display * dpy, XVisualInfo * visual, Pixmap pixmap, Colormap cmap), (dpy, visual, pixmap, cmap)) +GEN_THUNKS_RET(GLXPixmap, glXCreateGLXPixmapWithConfigSGIX, (Display * dpy, GLXFBConfigSGIX config, Pixmap pixmap), (dpy, config, pixmap)) +GEN_THUNKS_RET(GLXContext, glXCreateNewContext, (Display * dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct), (dpy, config, render_type, share_list, direct)) +GEN_THUNKS_RET(GLXPbuffer, glXCreatePbuffer, (Display * dpy, GLXFBConfig config, const int * attrib_list), (dpy, config, attrib_list)) +GEN_THUNKS_RET(GLXPixmap, glXCreatePixmap, (Display * dpy, GLXFBConfig config, Pixmap pixmap, const int * attrib_list), (dpy, config, pixmap, attrib_list)) +GEN_THUNKS_RET(GLXWindow, glXCreateWindow, (Display * dpy, GLXFBConfig config, Window win, const int * attrib_list), (dpy, config, win, attrib_list)) +GEN_THUNKS(glXCushionSGI, (Display * dpy, Window window, float cushion), (dpy, window, cushion)) +GEN_THUNKS_RET(Bool, glXDelayBeforeSwapNV, (Display * dpy, GLXDrawable drawable, GLfloat seconds), (dpy, drawable, seconds)) +GEN_THUNKS_RET(Bool, glXDeleteAssociatedContextAMD, (GLXContext ctx), (ctx)) +GEN_THUNKS(glXDestroyContext, (Display * dpy, GLXContext ctx), (dpy, ctx)) +GEN_THUNKS(glXDestroyGLXPbufferSGIX, (Display * dpy, GLXPbufferSGIX pbuf), (dpy, pbuf)) +GEN_THUNKS(glXDestroyGLXPixmap, (Display * dpy, GLXPixmap pixmap), (dpy, pixmap)) +GEN_THUNKS(glXDestroyGLXVideoSourceSGIX, (Display * dpy, GLXVideoSourceSGIX glxvideosource), (dpy, glxvideosource)) +GEN_THUNKS_RET(int, glXDestroyHyperpipeConfigSGIX, (Display * dpy, int hpId), (dpy, hpId)) +GEN_THUNKS(glXDestroyPbuffer, (Display * dpy, GLXPbuffer pbuf), (dpy, pbuf)) +GEN_THUNKS(glXDestroyPixmap, (Display * dpy, GLXPixmap pixmap), (dpy, pixmap)) +GEN_THUNKS(glXDestroyWindow, (Display * dpy, GLXWindow win), (dpy, win)) +GEN_THUNKS_RET(GLXVideoCaptureDeviceNV *, glXEnumerateVideoCaptureDevicesNV, (Display * dpy, int screen, int * nelements), (dpy, screen, nelements)) +GEN_THUNKS_RET(unsigned int *, glXEnumerateVideoDevicesNV, (Display * dpy, int screen, int * nelements), (dpy, screen, nelements)) +GEN_THUNKS(glXFreeContextEXT, (Display * dpy, GLXContext context), (dpy, context)) +GEN_THUNKS_RET(unsigned int, glXGetAGPOffsetMESA, (const void * pointer), (pointer)) +GEN_THUNKS_RET(const char *, glXGetClientString, (Display * dpy, int name), (dpy, name)) +GEN_THUNKS_RET(int, glXGetConfig, (Display * dpy, XVisualInfo * visual, int attrib, int * value), (dpy, visual, attrib, value)) +GEN_THUNKS_RET(unsigned int, glXGetContextGPUIDAMD, (GLXContext ctx), (ctx)) +GEN_THUNKS_RET(GLXContextID, glXGetContextIDEXT, (const GLXContext context), (context)) +GEN_THUNKS_RET(GLXContext, glXGetCurrentAssociatedContextAMD, (void), ()) +GEN_THUNKS_RET(GLXContext, glXGetCurrentContext, (void), ()) +GEN_THUNKS_RET(Display *, glXGetCurrentDisplay, (void), ()) +GEN_THUNKS_RET(Display *, glXGetCurrentDisplayEXT, (void), ()) +GEN_THUNKS_RET(GLXDrawable, glXGetCurrentDrawable, (void), ()) +GEN_THUNKS_RET(GLXDrawable, glXGetCurrentReadDrawable, (void), ()) +GEN_THUNKS_RET(GLXDrawable, glXGetCurrentReadDrawableSGI, (void), ()) +GEN_THUNKS_RET(int, glXGetFBConfigAttrib, (Display * dpy, GLXFBConfig config, int attribute, int * value), (dpy, config, attribute, value)) +GEN_THUNKS_RET(int, glXGetFBConfigAttribSGIX, (Display * dpy, GLXFBConfigSGIX config, int attribute, int * value), (dpy, config, attribute, value)) +GEN_THUNKS_RET(GLXFBConfigSGIX, glXGetFBConfigFromVisualSGIX, (Display * dpy, XVisualInfo * vis), (dpy, vis)) +GEN_THUNKS_RET(GLXFBConfig *, glXGetFBConfigs, (Display * dpy, int screen, int * nelements), (dpy, screen, nelements)) +GEN_THUNKS_RET(unsigned int, glXGetGPUIDsAMD, (unsigned int maxCount, unsigned int * ids), (maxCount, ids)) +GEN_THUNKS_RET(int, glXGetGPUInfoAMD, (unsigned int id, int property, GLenum dataType, unsigned int size, void * data), (id, property, dataType, size, data)) +GEN_THUNKS_RET(Bool, glXGetMscRateOML, (Display * dpy, GLXDrawable drawable, int32_t * numerator, int32_t * denominator), (dpy, drawable, numerator, denominator)) +GEN_THUNKS_RET(__GLXextFuncPtr, glXGetProcAddress, (const GLubyte * procName), (procName)) +GEN_THUNKS_RET(__GLXextFuncPtr, glXGetProcAddressARB, (const GLubyte * procName), (procName)) +GEN_THUNKS(glXGetSelectedEvent, (Display * dpy, GLXDrawable draw, unsigned long * event_mask), (dpy, draw, event_mask)) +GEN_THUNKS(glXGetSelectedEventSGIX, (Display * dpy, GLXDrawable drawable, unsigned long * mask), (dpy, drawable, mask)) +GEN_THUNKS_RET(Bool, glXGetSyncValuesOML, (Display * dpy, GLXDrawable drawable, int64_t * ust, int64_t * msc, int64_t * sbc), (dpy, drawable, ust, msc, sbc)) +GEN_THUNKS_RET(Status, glXGetTransparentIndexSUN, (Display * dpy, Window overlay, Window underlay, long * pTransparentIndex), (dpy, overlay, underlay, pTransparentIndex)) +GEN_THUNKS_RET(int, glXGetVideoDeviceNV, (Display * dpy, int screen, int numVideoDevices, GLXVideoDeviceNV * pVideoDevice), (dpy, screen, numVideoDevices, pVideoDevice)) +GEN_THUNKS_RET(int, glXGetVideoInfoNV, (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo), (dpy, screen, VideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo)) +GEN_THUNKS_RET(int, glXGetVideoSyncSGI, (unsigned int * count), (count)) +GEN_THUNKS_RET(XVisualInfo *, glXGetVisualFromFBConfig, (Display * dpy, GLXFBConfig config), (dpy, config)) +GEN_THUNKS_RET(XVisualInfo *, glXGetVisualFromFBConfigSGIX, (Display * dpy, GLXFBConfigSGIX config), (dpy, config)) +GEN_THUNKS_RET(int, glXHyperpipeAttribSGIX, (Display * dpy, int timeSlice, int attrib, int size, void * attribList), (dpy, timeSlice, attrib, size, attribList)) +GEN_THUNKS_RET(int, glXHyperpipeConfigSGIX, (Display * dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX * cfg, int * hpId), (dpy, networkId, npipes, cfg, hpId)) +GEN_THUNKS_RET(GLXContext, glXImportContextEXT, (Display * dpy, GLXContextID contextID), (dpy, contextID)) +GEN_THUNKS_RET(Bool, glXIsDirect, (Display * dpy, GLXContext ctx), (dpy, ctx)) +GEN_THUNKS_RET(Bool, glXJoinSwapGroupNV, (Display * dpy, GLXDrawable drawable, GLuint group), (dpy, drawable, group)) +GEN_THUNKS(glXJoinSwapGroupSGIX, (Display * dpy, GLXDrawable drawable, GLXDrawable member), (dpy, drawable, member)) +GEN_THUNKS(glXLockVideoCaptureDeviceNV, (Display * dpy, GLXVideoCaptureDeviceNV device), (dpy, device)) +GEN_THUNKS_RET(Bool, glXMakeAssociatedContextCurrentAMD, (GLXContext ctx), (ctx)) +GEN_THUNKS_RET(Bool, glXMakeContextCurrent, (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx), (dpy, draw, read, ctx)) +GEN_THUNKS_RET(Bool, glXMakeCurrent, (Display * dpy, GLXDrawable drawable, GLXContext ctx), (dpy, drawable, ctx)) +GEN_THUNKS_RET(Bool, glXMakeCurrentReadSGI, (Display * dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx), (dpy, draw, read, ctx)) +GEN_THUNKS(glXNamedCopyBufferSubDataNV, (Display * dpy, GLXContext readCtx, GLXContext writeCtx, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size), (dpy, readCtx, writeCtx, readBuffer, writeBuffer, readOffset, writeOffset, size)) +GEN_THUNKS_RET(int, glXQueryChannelDeltasSGIX, (Display * display, int screen, int channel, int * x, int * y, int * w, int * h), (display, screen, channel, x, y, w, h)) +GEN_THUNKS_RET(int, glXQueryChannelRectSGIX, (Display * display, int screen, int channel, int * dx, int * dy, int * dw, int * dh), (display, screen, channel, dx, dy, dw, dh)) +GEN_THUNKS_RET(int, glXQueryContext, (Display * dpy, GLXContext ctx, int attribute, int * value), (dpy, ctx, attribute, value)) +GEN_THUNKS_RET(int, glXQueryContextInfoEXT, (Display * dpy, GLXContext context, int attribute, int * value), (dpy, context, attribute, value)) +GEN_THUNKS_RET(Bool, glXQueryCurrentRendererIntegerMESA, (int attribute, unsigned int * value), (attribute, value)) +GEN_THUNKS_RET(const char *, glXQueryCurrentRendererStringMESA, (int attribute), (attribute)) +GEN_THUNKS(glXQueryDrawable, (Display * dpy, GLXDrawable draw, int attribute, unsigned int * value), (dpy, draw, attribute, value)) +GEN_THUNKS_RET(Bool, glXQueryExtension, (Display * dpy, int * errorb, int * event), (dpy, errorb, event)) +GEN_THUNKS_RET(const char *, glXQueryExtensionsString, (Display * dpy, int screen), (dpy, screen)) +GEN_THUNKS_RET(Bool, glXQueryFrameCountNV, (Display * dpy, int screen, GLuint * count), (dpy, screen, count)) +GEN_THUNKS_RET(int, glXQueryGLXPbufferSGIX, (Display * dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int * value), (dpy, pbuf, attribute, value)) +GEN_THUNKS_RET(int, glXQueryHyperpipeAttribSGIX, (Display * dpy, int timeSlice, int attrib, int size, void * returnAttribList), (dpy, timeSlice, attrib, size, returnAttribList)) +GEN_THUNKS_RET(int, glXQueryHyperpipeBestAttribSGIX, (Display * dpy, int timeSlice, int attrib, int size, void * attribList, void * returnAttribList), (dpy, timeSlice, attrib, size, attribList, returnAttribList)) +GEN_THUNKS_RET(GLXHyperpipeConfigSGIX *, glXQueryHyperpipeConfigSGIX, (Display * dpy, int hpId, int * npipes), (dpy, hpId, npipes)) +GEN_THUNKS_RET(GLXHyperpipeNetworkSGIX *, glXQueryHyperpipeNetworkSGIX, (Display * dpy, int * npipes), (dpy, npipes)) +GEN_THUNKS_RET(Bool, glXQueryMaxSwapBarriersSGIX, (Display * dpy, int screen, int * max), (dpy, screen, max)) +GEN_THUNKS_RET(Bool, glXQueryMaxSwapGroupsNV, (Display * dpy, int screen, GLuint * maxGroups, GLuint * maxBarriers), (dpy, screen, maxGroups, maxBarriers)) +GEN_THUNKS_RET(Bool, glXQueryRendererIntegerMESA, (Display * dpy, int screen, int renderer, int attribute, unsigned int * value), (dpy, screen, renderer, attribute, value)) +GEN_THUNKS_RET(const char *, glXQueryRendererStringMESA, (Display * dpy, int screen, int renderer, int attribute), (dpy, screen, renderer, attribute)) +GEN_THUNKS_RET(const char *, glXQueryServerString, (Display * dpy, int screen, int name), (dpy, screen, name)) +GEN_THUNKS_RET(Bool, glXQuerySwapGroupNV, (Display * dpy, GLXDrawable drawable, GLuint * group, GLuint * barrier), (dpy, drawable, group, barrier)) +GEN_THUNKS_RET(Bool, glXQueryVersion, (Display * dpy, int * maj, int * min), (dpy, maj, min)) +GEN_THUNKS_RET(int, glXQueryVideoCaptureDeviceNV, (Display * dpy, GLXVideoCaptureDeviceNV device, int attribute, int * value), (dpy, device, attribute, value)) +GEN_THUNKS_RET(Bool, glXReleaseBuffersMESA, (Display * dpy, GLXDrawable drawable), (dpy, drawable)) +GEN_THUNKS(glXReleaseTexImageEXT, (Display * dpy, GLXDrawable drawable, int buffer), (dpy, drawable, buffer)) +GEN_THUNKS(glXReleaseVideoCaptureDeviceNV, (Display * dpy, GLXVideoCaptureDeviceNV device), (dpy, device)) +GEN_THUNKS_RET(int, glXReleaseVideoDeviceNV, (Display * dpy, int screen, GLXVideoDeviceNV VideoDevice), (dpy, screen, VideoDevice)) +GEN_THUNKS_RET(int, glXReleaseVideoImageNV, (Display * dpy, GLXPbuffer pbuf), (dpy, pbuf)) +GEN_THUNKS_RET(Bool, glXResetFrameCountNV, (Display * dpy, int screen), (dpy, screen)) +GEN_THUNKS(glXSelectEvent, (Display * dpy, GLXDrawable draw, unsigned long event_mask), (dpy, draw, event_mask)) +GEN_THUNKS(glXSelectEventSGIX, (Display * dpy, GLXDrawable drawable, unsigned long mask), (dpy, drawable, mask)) +GEN_THUNKS_RET(int, glXSendPbufferToVideoNV, (Display * dpy, GLXPbuffer pbuf, int iBufferType, unsigned long * pulCounterPbuffer, GLboolean bBlock), (dpy, pbuf, iBufferType, pulCounterPbuffer, bBlock)) +GEN_THUNKS_RET(Bool, glXSet3DfxModeMESA, (int mode), (mode)) +GEN_THUNKS(glXSwapBuffers, (Display * dpy, GLXDrawable drawable), (dpy, drawable)) +GEN_THUNKS_RET(int64_t, glXSwapBuffersMscOML, (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder), (dpy, drawable, target_msc, divisor, remainder)) +GEN_THUNKS(glXSwapIntervalEXT, (Display * dpy, GLXDrawable drawable, int interval), (dpy, drawable, interval)) +GEN_THUNKS_RET(int, glXSwapIntervalSGI, (int interval), (interval)) +GEN_THUNKS(glXUseXFont, (Font font, int first, int count, int list), (font, first, count, list)) +GEN_THUNKS_RET(Bool, glXWaitForMscOML, (Display * dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t * ust, int64_t * msc, int64_t * sbc), (dpy, drawable, target_msc, divisor, remainder, ust, msc, sbc)) +GEN_THUNKS_RET(Bool, glXWaitForSbcOML, (Display * dpy, GLXDrawable drawable, int64_t target_sbc, int64_t * ust, int64_t * msc, int64_t * sbc), (dpy, drawable, target_sbc, ust, msc, sbc)) +GEN_THUNKS(glXWaitGL, (void), ()) +GEN_THUNKS_RET(int, glXWaitVideoSyncSGI, (int divisor, int remainder, unsigned int * count), (divisor, remainder, count)) +GEN_THUNKS(glXWaitX, (void), ()) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_glXBindChannelToWindowSGIX_dispatch_table_rewrite_ptr, /* glXBindChannelToWindowSGIX */ + epoxy_glXBindHyperpipeSGIX_dispatch_table_rewrite_ptr, /* glXBindHyperpipeSGIX */ + epoxy_glXBindSwapBarrierNV_dispatch_table_rewrite_ptr, /* glXBindSwapBarrierNV */ + epoxy_glXBindSwapBarrierSGIX_dispatch_table_rewrite_ptr, /* glXBindSwapBarrierSGIX */ + epoxy_glXBindTexImageEXT_dispatch_table_rewrite_ptr, /* glXBindTexImageEXT */ + epoxy_glXBindVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXBindVideoCaptureDeviceNV */ + epoxy_glXBindVideoDeviceNV_dispatch_table_rewrite_ptr, /* glXBindVideoDeviceNV */ + epoxy_glXBindVideoImageNV_dispatch_table_rewrite_ptr, /* glXBindVideoImageNV */ + epoxy_glXBlitContextFramebufferAMD_dispatch_table_rewrite_ptr, /* glXBlitContextFramebufferAMD */ + epoxy_glXChannelRectSGIX_dispatch_table_rewrite_ptr, /* glXChannelRectSGIX */ + epoxy_glXChannelRectSyncSGIX_dispatch_table_rewrite_ptr, /* glXChannelRectSyncSGIX */ + epoxy_glXChooseFBConfig_dispatch_table_rewrite_ptr, /* glXChooseFBConfig */ + epoxy_glXChooseFBConfigSGIX_dispatch_table_rewrite_ptr, /* glXChooseFBConfigSGIX */ + epoxy_glXChooseVisual_dispatch_table_rewrite_ptr, /* glXChooseVisual */ + epoxy_glXCopyBufferSubDataNV_dispatch_table_rewrite_ptr, /* glXCopyBufferSubDataNV */ + epoxy_glXCopyContext_dispatch_table_rewrite_ptr, /* glXCopyContext */ + epoxy_glXCopyImageSubDataNV_dispatch_table_rewrite_ptr, /* glXCopyImageSubDataNV */ + epoxy_glXCopySubBufferMESA_dispatch_table_rewrite_ptr, /* glXCopySubBufferMESA */ + epoxy_glXCreateAssociatedContextAMD_dispatch_table_rewrite_ptr, /* glXCreateAssociatedContextAMD */ + epoxy_glXCreateAssociatedContextAttribsAMD_dispatch_table_rewrite_ptr, /* glXCreateAssociatedContextAttribsAMD */ + epoxy_glXCreateContext_dispatch_table_rewrite_ptr, /* glXCreateContext */ + epoxy_glXCreateContextAttribsARB_dispatch_table_rewrite_ptr, /* glXCreateContextAttribsARB */ + epoxy_glXCreateContextWithConfigSGIX_dispatch_table_rewrite_ptr, /* glXCreateContextWithConfigSGIX */ + epoxy_glXCreateGLXPbufferSGIX_dispatch_table_rewrite_ptr, /* glXCreateGLXPbufferSGIX */ + epoxy_glXCreateGLXPixmap_dispatch_table_rewrite_ptr, /* glXCreateGLXPixmap */ + epoxy_glXCreateGLXPixmapMESA_dispatch_table_rewrite_ptr, /* glXCreateGLXPixmapMESA */ + epoxy_glXCreateGLXPixmapWithConfigSGIX_dispatch_table_rewrite_ptr, /* glXCreateGLXPixmapWithConfigSGIX */ + epoxy_glXCreateNewContext_dispatch_table_rewrite_ptr, /* glXCreateNewContext */ + epoxy_glXCreatePbuffer_dispatch_table_rewrite_ptr, /* glXCreatePbuffer */ + epoxy_glXCreatePixmap_dispatch_table_rewrite_ptr, /* glXCreatePixmap */ + epoxy_glXCreateWindow_dispatch_table_rewrite_ptr, /* glXCreateWindow */ + epoxy_glXCushionSGI_dispatch_table_rewrite_ptr, /* glXCushionSGI */ + epoxy_glXDelayBeforeSwapNV_dispatch_table_rewrite_ptr, /* glXDelayBeforeSwapNV */ + epoxy_glXDeleteAssociatedContextAMD_dispatch_table_rewrite_ptr, /* glXDeleteAssociatedContextAMD */ + epoxy_glXDestroyContext_dispatch_table_rewrite_ptr, /* glXDestroyContext */ + epoxy_glXDestroyGLXPbufferSGIX_dispatch_table_rewrite_ptr, /* glXDestroyGLXPbufferSGIX */ + epoxy_glXDestroyGLXPixmap_dispatch_table_rewrite_ptr, /* glXDestroyGLXPixmap */ + epoxy_glXDestroyGLXVideoSourceSGIX_dispatch_table_rewrite_ptr, /* glXDestroyGLXVideoSourceSGIX */ + epoxy_glXDestroyHyperpipeConfigSGIX_dispatch_table_rewrite_ptr, /* glXDestroyHyperpipeConfigSGIX */ + epoxy_glXDestroyPbuffer_dispatch_table_rewrite_ptr, /* glXDestroyPbuffer */ + epoxy_glXDestroyPixmap_dispatch_table_rewrite_ptr, /* glXDestroyPixmap */ + epoxy_glXDestroyWindow_dispatch_table_rewrite_ptr, /* glXDestroyWindow */ + epoxy_glXEnumerateVideoCaptureDevicesNV_dispatch_table_rewrite_ptr, /* glXEnumerateVideoCaptureDevicesNV */ + epoxy_glXEnumerateVideoDevicesNV_dispatch_table_rewrite_ptr, /* glXEnumerateVideoDevicesNV */ + epoxy_glXFreeContextEXT_dispatch_table_rewrite_ptr, /* glXFreeContextEXT */ + epoxy_glXGetAGPOffsetMESA_dispatch_table_rewrite_ptr, /* glXGetAGPOffsetMESA */ + epoxy_glXGetClientString_dispatch_table_rewrite_ptr, /* glXGetClientString */ + epoxy_glXGetConfig_dispatch_table_rewrite_ptr, /* glXGetConfig */ + epoxy_glXGetContextGPUIDAMD_dispatch_table_rewrite_ptr, /* glXGetContextGPUIDAMD */ + epoxy_glXGetContextIDEXT_dispatch_table_rewrite_ptr, /* glXGetContextIDEXT */ + epoxy_glXGetCurrentAssociatedContextAMD_dispatch_table_rewrite_ptr, /* glXGetCurrentAssociatedContextAMD */ + epoxy_glXGetCurrentContext_dispatch_table_rewrite_ptr, /* glXGetCurrentContext */ + epoxy_glXGetCurrentDisplay_dispatch_table_rewrite_ptr, /* glXGetCurrentDisplay */ + epoxy_glXGetCurrentDisplayEXT_dispatch_table_rewrite_ptr, /* glXGetCurrentDisplayEXT */ + epoxy_glXGetCurrentDrawable_dispatch_table_rewrite_ptr, /* glXGetCurrentDrawable */ + epoxy_glXGetCurrentReadDrawable_dispatch_table_rewrite_ptr, /* glXGetCurrentReadDrawable */ + epoxy_glXGetCurrentReadDrawableSGI_dispatch_table_rewrite_ptr, /* glXGetCurrentReadDrawableSGI */ + epoxy_glXGetFBConfigAttrib_dispatch_table_rewrite_ptr, /* glXGetFBConfigAttrib */ + epoxy_glXGetFBConfigAttribSGIX_dispatch_table_rewrite_ptr, /* glXGetFBConfigAttribSGIX */ + epoxy_glXGetFBConfigFromVisualSGIX_dispatch_table_rewrite_ptr, /* glXGetFBConfigFromVisualSGIX */ + epoxy_glXGetFBConfigs_dispatch_table_rewrite_ptr, /* glXGetFBConfigs */ + epoxy_glXGetGPUIDsAMD_dispatch_table_rewrite_ptr, /* glXGetGPUIDsAMD */ + epoxy_glXGetGPUInfoAMD_dispatch_table_rewrite_ptr, /* glXGetGPUInfoAMD */ + epoxy_glXGetMscRateOML_dispatch_table_rewrite_ptr, /* glXGetMscRateOML */ + epoxy_glXGetProcAddress_dispatch_table_rewrite_ptr, /* glXGetProcAddress */ + epoxy_glXGetProcAddressARB_dispatch_table_rewrite_ptr, /* glXGetProcAddressARB */ + epoxy_glXGetSelectedEvent_dispatch_table_rewrite_ptr, /* glXGetSelectedEvent */ + epoxy_glXGetSelectedEventSGIX_dispatch_table_rewrite_ptr, /* glXGetSelectedEventSGIX */ + epoxy_glXGetSyncValuesOML_dispatch_table_rewrite_ptr, /* glXGetSyncValuesOML */ + epoxy_glXGetTransparentIndexSUN_dispatch_table_rewrite_ptr, /* glXGetTransparentIndexSUN */ + epoxy_glXGetVideoDeviceNV_dispatch_table_rewrite_ptr, /* glXGetVideoDeviceNV */ + epoxy_glXGetVideoInfoNV_dispatch_table_rewrite_ptr, /* glXGetVideoInfoNV */ + epoxy_glXGetVideoSyncSGI_dispatch_table_rewrite_ptr, /* glXGetVideoSyncSGI */ + epoxy_glXGetVisualFromFBConfig_dispatch_table_rewrite_ptr, /* glXGetVisualFromFBConfig */ + epoxy_glXGetVisualFromFBConfigSGIX_dispatch_table_rewrite_ptr, /* glXGetVisualFromFBConfigSGIX */ + epoxy_glXHyperpipeAttribSGIX_dispatch_table_rewrite_ptr, /* glXHyperpipeAttribSGIX */ + epoxy_glXHyperpipeConfigSGIX_dispatch_table_rewrite_ptr, /* glXHyperpipeConfigSGIX */ + epoxy_glXImportContextEXT_dispatch_table_rewrite_ptr, /* glXImportContextEXT */ + epoxy_glXIsDirect_dispatch_table_rewrite_ptr, /* glXIsDirect */ + epoxy_glXJoinSwapGroupNV_dispatch_table_rewrite_ptr, /* glXJoinSwapGroupNV */ + epoxy_glXJoinSwapGroupSGIX_dispatch_table_rewrite_ptr, /* glXJoinSwapGroupSGIX */ + epoxy_glXLockVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXLockVideoCaptureDeviceNV */ + epoxy_glXMakeAssociatedContextCurrentAMD_dispatch_table_rewrite_ptr, /* glXMakeAssociatedContextCurrentAMD */ + epoxy_glXMakeContextCurrent_dispatch_table_rewrite_ptr, /* glXMakeContextCurrent */ + epoxy_glXMakeCurrent_dispatch_table_rewrite_ptr, /* glXMakeCurrent */ + epoxy_glXMakeCurrentReadSGI_dispatch_table_rewrite_ptr, /* glXMakeCurrentReadSGI */ + epoxy_glXNamedCopyBufferSubDataNV_dispatch_table_rewrite_ptr, /* glXNamedCopyBufferSubDataNV */ + epoxy_glXQueryChannelDeltasSGIX_dispatch_table_rewrite_ptr, /* glXQueryChannelDeltasSGIX */ + epoxy_glXQueryChannelRectSGIX_dispatch_table_rewrite_ptr, /* glXQueryChannelRectSGIX */ + epoxy_glXQueryContext_dispatch_table_rewrite_ptr, /* glXQueryContext */ + epoxy_glXQueryContextInfoEXT_dispatch_table_rewrite_ptr, /* glXQueryContextInfoEXT */ + epoxy_glXQueryCurrentRendererIntegerMESA_dispatch_table_rewrite_ptr, /* glXQueryCurrentRendererIntegerMESA */ + epoxy_glXQueryCurrentRendererStringMESA_dispatch_table_rewrite_ptr, /* glXQueryCurrentRendererStringMESA */ + epoxy_glXQueryDrawable_dispatch_table_rewrite_ptr, /* glXQueryDrawable */ + epoxy_glXQueryExtension_dispatch_table_rewrite_ptr, /* glXQueryExtension */ + epoxy_glXQueryExtensionsString_dispatch_table_rewrite_ptr, /* glXQueryExtensionsString */ + epoxy_glXQueryFrameCountNV_dispatch_table_rewrite_ptr, /* glXQueryFrameCountNV */ + epoxy_glXQueryGLXPbufferSGIX_dispatch_table_rewrite_ptr, /* glXQueryGLXPbufferSGIX */ + epoxy_glXQueryHyperpipeAttribSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeAttribSGIX */ + epoxy_glXQueryHyperpipeBestAttribSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeBestAttribSGIX */ + epoxy_glXQueryHyperpipeConfigSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeConfigSGIX */ + epoxy_glXQueryHyperpipeNetworkSGIX_dispatch_table_rewrite_ptr, /* glXQueryHyperpipeNetworkSGIX */ + epoxy_glXQueryMaxSwapBarriersSGIX_dispatch_table_rewrite_ptr, /* glXQueryMaxSwapBarriersSGIX */ + epoxy_glXQueryMaxSwapGroupsNV_dispatch_table_rewrite_ptr, /* glXQueryMaxSwapGroupsNV */ + epoxy_glXQueryRendererIntegerMESA_dispatch_table_rewrite_ptr, /* glXQueryRendererIntegerMESA */ + epoxy_glXQueryRendererStringMESA_dispatch_table_rewrite_ptr, /* glXQueryRendererStringMESA */ + epoxy_glXQueryServerString_dispatch_table_rewrite_ptr, /* glXQueryServerString */ + epoxy_glXQuerySwapGroupNV_dispatch_table_rewrite_ptr, /* glXQuerySwapGroupNV */ + epoxy_glXQueryVersion_dispatch_table_rewrite_ptr, /* glXQueryVersion */ + epoxy_glXQueryVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXQueryVideoCaptureDeviceNV */ + epoxy_glXReleaseBuffersMESA_dispatch_table_rewrite_ptr, /* glXReleaseBuffersMESA */ + epoxy_glXReleaseTexImageEXT_dispatch_table_rewrite_ptr, /* glXReleaseTexImageEXT */ + epoxy_glXReleaseVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* glXReleaseVideoCaptureDeviceNV */ + epoxy_glXReleaseVideoDeviceNV_dispatch_table_rewrite_ptr, /* glXReleaseVideoDeviceNV */ + epoxy_glXReleaseVideoImageNV_dispatch_table_rewrite_ptr, /* glXReleaseVideoImageNV */ + epoxy_glXResetFrameCountNV_dispatch_table_rewrite_ptr, /* glXResetFrameCountNV */ + epoxy_glXSelectEvent_dispatch_table_rewrite_ptr, /* glXSelectEvent */ + epoxy_glXSelectEventSGIX_dispatch_table_rewrite_ptr, /* glXSelectEventSGIX */ + epoxy_glXSendPbufferToVideoNV_dispatch_table_rewrite_ptr, /* glXSendPbufferToVideoNV */ + epoxy_glXSet3DfxModeMESA_dispatch_table_rewrite_ptr, /* glXSet3DfxModeMESA */ + epoxy_glXSwapBuffers_dispatch_table_rewrite_ptr, /* glXSwapBuffers */ + epoxy_glXSwapBuffersMscOML_dispatch_table_rewrite_ptr, /* glXSwapBuffersMscOML */ + epoxy_glXSwapIntervalEXT_dispatch_table_rewrite_ptr, /* glXSwapIntervalEXT */ + epoxy_glXSwapIntervalSGI_dispatch_table_rewrite_ptr, /* glXSwapIntervalSGI */ + epoxy_glXUseXFont_dispatch_table_rewrite_ptr, /* glXUseXFont */ + epoxy_glXWaitForMscOML_dispatch_table_rewrite_ptr, /* glXWaitForMscOML */ + epoxy_glXWaitForSbcOML_dispatch_table_rewrite_ptr, /* glXWaitForSbcOML */ + epoxy_glXWaitGL_dispatch_table_rewrite_ptr, /* glXWaitGL */ + epoxy_glXWaitVideoSyncSGI_dispatch_table_rewrite_ptr, /* glXWaitVideoSyncSGI */ + epoxy_glXWaitX_dispatch_table_rewrite_ptr, /* glXWaitX */ +}; + +uint32_t glx_tls_index; +uint32_t glx_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(glx_tls_index); +} + +void +glx_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +glx_switch_to_dispatch_table(void) +{ + epoxy_glXBindChannelToWindowSGIX = epoxy_glXBindChannelToWindowSGIX_dispatch_table_thunk; + epoxy_glXBindHyperpipeSGIX = epoxy_glXBindHyperpipeSGIX_dispatch_table_thunk; + epoxy_glXBindSwapBarrierNV = epoxy_glXBindSwapBarrierNV_dispatch_table_thunk; + epoxy_glXBindSwapBarrierSGIX = epoxy_glXBindSwapBarrierSGIX_dispatch_table_thunk; + epoxy_glXBindTexImageEXT = epoxy_glXBindTexImageEXT_dispatch_table_thunk; + epoxy_glXBindVideoCaptureDeviceNV = epoxy_glXBindVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXBindVideoDeviceNV = epoxy_glXBindVideoDeviceNV_dispatch_table_thunk; + epoxy_glXBindVideoImageNV = epoxy_glXBindVideoImageNV_dispatch_table_thunk; + epoxy_glXBlitContextFramebufferAMD = epoxy_glXBlitContextFramebufferAMD_dispatch_table_thunk; + epoxy_glXChannelRectSGIX = epoxy_glXChannelRectSGIX_dispatch_table_thunk; + epoxy_glXChannelRectSyncSGIX = epoxy_glXChannelRectSyncSGIX_dispatch_table_thunk; + epoxy_glXChooseFBConfig = epoxy_glXChooseFBConfig_dispatch_table_thunk; + epoxy_glXChooseFBConfigSGIX = epoxy_glXChooseFBConfigSGIX_dispatch_table_thunk; + epoxy_glXChooseVisual = epoxy_glXChooseVisual_dispatch_table_thunk; + epoxy_glXCopyBufferSubDataNV = epoxy_glXCopyBufferSubDataNV_dispatch_table_thunk; + epoxy_glXCopyContext = epoxy_glXCopyContext_dispatch_table_thunk; + epoxy_glXCopyImageSubDataNV = epoxy_glXCopyImageSubDataNV_dispatch_table_thunk; + epoxy_glXCopySubBufferMESA = epoxy_glXCopySubBufferMESA_dispatch_table_thunk; + epoxy_glXCreateAssociatedContextAMD = epoxy_glXCreateAssociatedContextAMD_dispatch_table_thunk; + epoxy_glXCreateAssociatedContextAttribsAMD = epoxy_glXCreateAssociatedContextAttribsAMD_dispatch_table_thunk; + epoxy_glXCreateContext = epoxy_glXCreateContext_dispatch_table_thunk; + epoxy_glXCreateContextAttribsARB = epoxy_glXCreateContextAttribsARB_dispatch_table_thunk; + epoxy_glXCreateContextWithConfigSGIX = epoxy_glXCreateContextWithConfigSGIX_dispatch_table_thunk; + epoxy_glXCreateGLXPbufferSGIX = epoxy_glXCreateGLXPbufferSGIX_dispatch_table_thunk; + epoxy_glXCreateGLXPixmap = epoxy_glXCreateGLXPixmap_dispatch_table_thunk; + epoxy_glXCreateGLXPixmapMESA = epoxy_glXCreateGLXPixmapMESA_dispatch_table_thunk; + epoxy_glXCreateGLXPixmapWithConfigSGIX = epoxy_glXCreateGLXPixmapWithConfigSGIX_dispatch_table_thunk; + epoxy_glXCreateNewContext = epoxy_glXCreateNewContext_dispatch_table_thunk; + epoxy_glXCreatePbuffer = epoxy_glXCreatePbuffer_dispatch_table_thunk; + epoxy_glXCreatePixmap = epoxy_glXCreatePixmap_dispatch_table_thunk; + epoxy_glXCreateWindow = epoxy_glXCreateWindow_dispatch_table_thunk; + epoxy_glXCushionSGI = epoxy_glXCushionSGI_dispatch_table_thunk; + epoxy_glXDelayBeforeSwapNV = epoxy_glXDelayBeforeSwapNV_dispatch_table_thunk; + epoxy_glXDeleteAssociatedContextAMD = epoxy_glXDeleteAssociatedContextAMD_dispatch_table_thunk; + epoxy_glXDestroyContext = epoxy_glXDestroyContext_dispatch_table_thunk; + epoxy_glXDestroyGLXPbufferSGIX = epoxy_glXDestroyGLXPbufferSGIX_dispatch_table_thunk; + epoxy_glXDestroyGLXPixmap = epoxy_glXDestroyGLXPixmap_dispatch_table_thunk; + epoxy_glXDestroyGLXVideoSourceSGIX = epoxy_glXDestroyGLXVideoSourceSGIX_dispatch_table_thunk; + epoxy_glXDestroyHyperpipeConfigSGIX = epoxy_glXDestroyHyperpipeConfigSGIX_dispatch_table_thunk; + epoxy_glXDestroyPbuffer = epoxy_glXDestroyPbuffer_dispatch_table_thunk; + epoxy_glXDestroyPixmap = epoxy_glXDestroyPixmap_dispatch_table_thunk; + epoxy_glXDestroyWindow = epoxy_glXDestroyWindow_dispatch_table_thunk; + epoxy_glXEnumerateVideoCaptureDevicesNV = epoxy_glXEnumerateVideoCaptureDevicesNV_dispatch_table_thunk; + epoxy_glXEnumerateVideoDevicesNV = epoxy_glXEnumerateVideoDevicesNV_dispatch_table_thunk; + epoxy_glXFreeContextEXT = epoxy_glXFreeContextEXT_dispatch_table_thunk; + epoxy_glXGetAGPOffsetMESA = epoxy_glXGetAGPOffsetMESA_dispatch_table_thunk; + epoxy_glXGetClientString = epoxy_glXGetClientString_dispatch_table_thunk; + epoxy_glXGetConfig = epoxy_glXGetConfig_dispatch_table_thunk; + epoxy_glXGetContextGPUIDAMD = epoxy_glXGetContextGPUIDAMD_dispatch_table_thunk; + epoxy_glXGetContextIDEXT = epoxy_glXGetContextIDEXT_dispatch_table_thunk; + epoxy_glXGetCurrentAssociatedContextAMD = epoxy_glXGetCurrentAssociatedContextAMD_dispatch_table_thunk; + epoxy_glXGetCurrentContext = epoxy_glXGetCurrentContext_dispatch_table_thunk; + epoxy_glXGetCurrentDisplay = epoxy_glXGetCurrentDisplay_dispatch_table_thunk; + epoxy_glXGetCurrentDisplayEXT = epoxy_glXGetCurrentDisplayEXT_dispatch_table_thunk; + epoxy_glXGetCurrentDrawable = epoxy_glXGetCurrentDrawable_dispatch_table_thunk; + epoxy_glXGetCurrentReadDrawable = epoxy_glXGetCurrentReadDrawable_dispatch_table_thunk; + epoxy_glXGetCurrentReadDrawableSGI = epoxy_glXGetCurrentReadDrawableSGI_dispatch_table_thunk; + epoxy_glXGetFBConfigAttrib = epoxy_glXGetFBConfigAttrib_dispatch_table_thunk; + epoxy_glXGetFBConfigAttribSGIX = epoxy_glXGetFBConfigAttribSGIX_dispatch_table_thunk; + epoxy_glXGetFBConfigFromVisualSGIX = epoxy_glXGetFBConfigFromVisualSGIX_dispatch_table_thunk; + epoxy_glXGetFBConfigs = epoxy_glXGetFBConfigs_dispatch_table_thunk; + epoxy_glXGetGPUIDsAMD = epoxy_glXGetGPUIDsAMD_dispatch_table_thunk; + epoxy_glXGetGPUInfoAMD = epoxy_glXGetGPUInfoAMD_dispatch_table_thunk; + epoxy_glXGetMscRateOML = epoxy_glXGetMscRateOML_dispatch_table_thunk; + epoxy_glXGetProcAddress = epoxy_glXGetProcAddress_dispatch_table_thunk; + epoxy_glXGetProcAddressARB = epoxy_glXGetProcAddressARB_dispatch_table_thunk; + epoxy_glXGetSelectedEvent = epoxy_glXGetSelectedEvent_dispatch_table_thunk; + epoxy_glXGetSelectedEventSGIX = epoxy_glXGetSelectedEventSGIX_dispatch_table_thunk; + epoxy_glXGetSyncValuesOML = epoxy_glXGetSyncValuesOML_dispatch_table_thunk; + epoxy_glXGetTransparentIndexSUN = epoxy_glXGetTransparentIndexSUN_dispatch_table_thunk; + epoxy_glXGetVideoDeviceNV = epoxy_glXGetVideoDeviceNV_dispatch_table_thunk; + epoxy_glXGetVideoInfoNV = epoxy_glXGetVideoInfoNV_dispatch_table_thunk; + epoxy_glXGetVideoSyncSGI = epoxy_glXGetVideoSyncSGI_dispatch_table_thunk; + epoxy_glXGetVisualFromFBConfig = epoxy_glXGetVisualFromFBConfig_dispatch_table_thunk; + epoxy_glXGetVisualFromFBConfigSGIX = epoxy_glXGetVisualFromFBConfigSGIX_dispatch_table_thunk; + epoxy_glXHyperpipeAttribSGIX = epoxy_glXHyperpipeAttribSGIX_dispatch_table_thunk; + epoxy_glXHyperpipeConfigSGIX = epoxy_glXHyperpipeConfigSGIX_dispatch_table_thunk; + epoxy_glXImportContextEXT = epoxy_glXImportContextEXT_dispatch_table_thunk; + epoxy_glXIsDirect = epoxy_glXIsDirect_dispatch_table_thunk; + epoxy_glXJoinSwapGroupNV = epoxy_glXJoinSwapGroupNV_dispatch_table_thunk; + epoxy_glXJoinSwapGroupSGIX = epoxy_glXJoinSwapGroupSGIX_dispatch_table_thunk; + epoxy_glXLockVideoCaptureDeviceNV = epoxy_glXLockVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXMakeAssociatedContextCurrentAMD = epoxy_glXMakeAssociatedContextCurrentAMD_dispatch_table_thunk; + epoxy_glXMakeContextCurrent = epoxy_glXMakeContextCurrent_dispatch_table_thunk; + epoxy_glXMakeCurrent = epoxy_glXMakeCurrent_dispatch_table_thunk; + epoxy_glXMakeCurrentReadSGI = epoxy_glXMakeCurrentReadSGI_dispatch_table_thunk; + epoxy_glXNamedCopyBufferSubDataNV = epoxy_glXNamedCopyBufferSubDataNV_dispatch_table_thunk; + epoxy_glXQueryChannelDeltasSGIX = epoxy_glXQueryChannelDeltasSGIX_dispatch_table_thunk; + epoxy_glXQueryChannelRectSGIX = epoxy_glXQueryChannelRectSGIX_dispatch_table_thunk; + epoxy_glXQueryContext = epoxy_glXQueryContext_dispatch_table_thunk; + epoxy_glXQueryContextInfoEXT = epoxy_glXQueryContextInfoEXT_dispatch_table_thunk; + epoxy_glXQueryCurrentRendererIntegerMESA = epoxy_glXQueryCurrentRendererIntegerMESA_dispatch_table_thunk; + epoxy_glXQueryCurrentRendererStringMESA = epoxy_glXQueryCurrentRendererStringMESA_dispatch_table_thunk; + epoxy_glXQueryDrawable = epoxy_glXQueryDrawable_dispatch_table_thunk; + epoxy_glXQueryExtension = epoxy_glXQueryExtension_dispatch_table_thunk; + epoxy_glXQueryExtensionsString = epoxy_glXQueryExtensionsString_dispatch_table_thunk; + epoxy_glXQueryFrameCountNV = epoxy_glXQueryFrameCountNV_dispatch_table_thunk; + epoxy_glXQueryGLXPbufferSGIX = epoxy_glXQueryGLXPbufferSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeAttribSGIX = epoxy_glXQueryHyperpipeAttribSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeBestAttribSGIX = epoxy_glXQueryHyperpipeBestAttribSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeConfigSGIX = epoxy_glXQueryHyperpipeConfigSGIX_dispatch_table_thunk; + epoxy_glXQueryHyperpipeNetworkSGIX = epoxy_glXQueryHyperpipeNetworkSGIX_dispatch_table_thunk; + epoxy_glXQueryMaxSwapBarriersSGIX = epoxy_glXQueryMaxSwapBarriersSGIX_dispatch_table_thunk; + epoxy_glXQueryMaxSwapGroupsNV = epoxy_glXQueryMaxSwapGroupsNV_dispatch_table_thunk; + epoxy_glXQueryRendererIntegerMESA = epoxy_glXQueryRendererIntegerMESA_dispatch_table_thunk; + epoxy_glXQueryRendererStringMESA = epoxy_glXQueryRendererStringMESA_dispatch_table_thunk; + epoxy_glXQueryServerString = epoxy_glXQueryServerString_dispatch_table_thunk; + epoxy_glXQuerySwapGroupNV = epoxy_glXQuerySwapGroupNV_dispatch_table_thunk; + epoxy_glXQueryVersion = epoxy_glXQueryVersion_dispatch_table_thunk; + epoxy_glXQueryVideoCaptureDeviceNV = epoxy_glXQueryVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXReleaseBuffersMESA = epoxy_glXReleaseBuffersMESA_dispatch_table_thunk; + epoxy_glXReleaseTexImageEXT = epoxy_glXReleaseTexImageEXT_dispatch_table_thunk; + epoxy_glXReleaseVideoCaptureDeviceNV = epoxy_glXReleaseVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_glXReleaseVideoDeviceNV = epoxy_glXReleaseVideoDeviceNV_dispatch_table_thunk; + epoxy_glXReleaseVideoImageNV = epoxy_glXReleaseVideoImageNV_dispatch_table_thunk; + epoxy_glXResetFrameCountNV = epoxy_glXResetFrameCountNV_dispatch_table_thunk; + epoxy_glXSelectEvent = epoxy_glXSelectEvent_dispatch_table_thunk; + epoxy_glXSelectEventSGIX = epoxy_glXSelectEventSGIX_dispatch_table_thunk; + epoxy_glXSendPbufferToVideoNV = epoxy_glXSendPbufferToVideoNV_dispatch_table_thunk; + epoxy_glXSet3DfxModeMESA = epoxy_glXSet3DfxModeMESA_dispatch_table_thunk; + epoxy_glXSwapBuffers = epoxy_glXSwapBuffers_dispatch_table_thunk; + epoxy_glXSwapBuffersMscOML = epoxy_glXSwapBuffersMscOML_dispatch_table_thunk; + epoxy_glXSwapIntervalEXT = epoxy_glXSwapIntervalEXT_dispatch_table_thunk; + epoxy_glXSwapIntervalSGI = epoxy_glXSwapIntervalSGI_dispatch_table_thunk; + epoxy_glXUseXFont = epoxy_glXUseXFont_dispatch_table_thunk; + epoxy_glXWaitForMscOML = epoxy_glXWaitForMscOML_dispatch_table_thunk; + epoxy_glXWaitForSbcOML = epoxy_glXWaitForSbcOML_dispatch_table_thunk; + epoxy_glXWaitGL = epoxy_glXWaitGL_dispatch_table_thunk; + epoxy_glXWaitVideoSyncSGI = epoxy_glXWaitVideoSyncSGI_dispatch_table_thunk; + epoxy_glXWaitX = epoxy_glXWaitX_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNGLXBINDCHANNELTOWINDOWSGIXPROC epoxy_glXBindChannelToWindowSGIX = epoxy_glXBindChannelToWindowSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXBINDHYPERPIPESGIXPROC epoxy_glXBindHyperpipeSGIX = epoxy_glXBindHyperpipeSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXBINDSWAPBARRIERNVPROC epoxy_glXBindSwapBarrierNV = epoxy_glXBindSwapBarrierNV_global_rewrite_ptr; + +PUBLIC PFNGLXBINDSWAPBARRIERSGIXPROC epoxy_glXBindSwapBarrierSGIX = epoxy_glXBindSwapBarrierSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXBINDTEXIMAGEEXTPROC epoxy_glXBindTexImageEXT = epoxy_glXBindTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLXBINDVIDEOCAPTUREDEVICENVPROC epoxy_glXBindVideoCaptureDeviceNV = epoxy_glXBindVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXBINDVIDEODEVICENVPROC epoxy_glXBindVideoDeviceNV = epoxy_glXBindVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXBINDVIDEOIMAGENVPROC epoxy_glXBindVideoImageNV = epoxy_glXBindVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_glXBlitContextFramebufferAMD = epoxy_glXBlitContextFramebufferAMD_global_rewrite_ptr; + +PUBLIC PFNGLXCHANNELRECTSGIXPROC epoxy_glXChannelRectSGIX = epoxy_glXChannelRectSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCHANNELRECTSYNCSGIXPROC epoxy_glXChannelRectSyncSGIX = epoxy_glXChannelRectSyncSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCHOOSEFBCONFIGPROC epoxy_glXChooseFBConfig = epoxy_glXChooseFBConfig_global_rewrite_ptr; + +PUBLIC PFNGLXCHOOSEFBCONFIGSGIXPROC epoxy_glXChooseFBConfigSGIX = epoxy_glXChooseFBConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCHOOSEVISUALPROC epoxy_glXChooseVisual = epoxy_glXChooseVisual_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYBUFFERSUBDATANVPROC epoxy_glXCopyBufferSubDataNV = epoxy_glXCopyBufferSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYCONTEXTPROC epoxy_glXCopyContext = epoxy_glXCopyContext_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYIMAGESUBDATANVPROC epoxy_glXCopyImageSubDataNV = epoxy_glXCopyImageSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLXCOPYSUBBUFFERMESAPROC epoxy_glXCopySubBufferMESA = epoxy_glXCopySubBufferMESA_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC epoxy_glXCreateAssociatedContextAMD = epoxy_glXCreateAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_glXCreateAssociatedContextAttribsAMD = epoxy_glXCreateAssociatedContextAttribsAMD_global_rewrite_ptr; + +PUBLIC PFNGLXCREATECONTEXTPROC epoxy_glXCreateContext = epoxy_glXCreateContext_global_rewrite_ptr; + +PUBLIC PFNGLXCREATECONTEXTATTRIBSARBPROC epoxy_glXCreateContextAttribsARB = epoxy_glXCreateContextAttribsARB_global_rewrite_ptr; + +PUBLIC PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC epoxy_glXCreateContextWithConfigSGIX = epoxy_glXCreateContextWithConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPBUFFERSGIXPROC epoxy_glXCreateGLXPbufferSGIX = epoxy_glXCreateGLXPbufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPIXMAPPROC epoxy_glXCreateGLXPixmap = epoxy_glXCreateGLXPixmap_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPIXMAPMESAPROC epoxy_glXCreateGLXPixmapMESA = epoxy_glXCreateGLXPixmapMESA_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC epoxy_glXCreateGLXPixmapWithConfigSGIX = epoxy_glXCreateGLXPixmapWithConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXCREATENEWCONTEXTPROC epoxy_glXCreateNewContext = epoxy_glXCreateNewContext_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEPBUFFERPROC epoxy_glXCreatePbuffer = epoxy_glXCreatePbuffer_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEPIXMAPPROC epoxy_glXCreatePixmap = epoxy_glXCreatePixmap_global_rewrite_ptr; + +PUBLIC PFNGLXCREATEWINDOWPROC epoxy_glXCreateWindow = epoxy_glXCreateWindow_global_rewrite_ptr; + +PUBLIC PFNGLXCUSHIONSGIPROC epoxy_glXCushionSGI = epoxy_glXCushionSGI_global_rewrite_ptr; + +PUBLIC PFNGLXDELAYBEFORESWAPNVPROC epoxy_glXDelayBeforeSwapNV = epoxy_glXDelayBeforeSwapNV_global_rewrite_ptr; + +PUBLIC PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC epoxy_glXDeleteAssociatedContextAMD = epoxy_glXDeleteAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYCONTEXTPROC epoxy_glXDestroyContext = epoxy_glXDestroyContext_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYGLXPBUFFERSGIXPROC epoxy_glXDestroyGLXPbufferSGIX = epoxy_glXDestroyGLXPbufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYGLXPIXMAPPROC epoxy_glXDestroyGLXPixmap = epoxy_glXDestroyGLXPixmap_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC epoxy_glXDestroyGLXVideoSourceSGIX = epoxy_glXDestroyGLXVideoSourceSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC epoxy_glXDestroyHyperpipeConfigSGIX = epoxy_glXDestroyHyperpipeConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYPBUFFERPROC epoxy_glXDestroyPbuffer = epoxy_glXDestroyPbuffer_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYPIXMAPPROC epoxy_glXDestroyPixmap = epoxy_glXDestroyPixmap_global_rewrite_ptr; + +PUBLIC PFNGLXDESTROYWINDOWPROC epoxy_glXDestroyWindow = epoxy_glXDestroyWindow_global_rewrite_ptr; + +PUBLIC PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_glXEnumerateVideoCaptureDevicesNV = epoxy_glXEnumerateVideoCaptureDevicesNV_global_rewrite_ptr; + +PUBLIC PFNGLXENUMERATEVIDEODEVICESNVPROC epoxy_glXEnumerateVideoDevicesNV = epoxy_glXEnumerateVideoDevicesNV_global_rewrite_ptr; + +PUBLIC PFNGLXFREECONTEXTEXTPROC epoxy_glXFreeContextEXT = epoxy_glXFreeContextEXT_global_rewrite_ptr; + +PUBLIC PFNGLXGETAGPOFFSETMESAPROC epoxy_glXGetAGPOffsetMESA = epoxy_glXGetAGPOffsetMESA_global_rewrite_ptr; + +PUBLIC PFNGLXGETCLIENTSTRINGPROC epoxy_glXGetClientString = epoxy_glXGetClientString_global_rewrite_ptr; + +PUBLIC PFNGLXGETCONFIGPROC epoxy_glXGetConfig = epoxy_glXGetConfig_global_rewrite_ptr; + +PUBLIC PFNGLXGETCONTEXTGPUIDAMDPROC epoxy_glXGetContextGPUIDAMD = epoxy_glXGetContextGPUIDAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETCONTEXTIDEXTPROC epoxy_glXGetContextIDEXT = epoxy_glXGetContextIDEXT_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_glXGetCurrentAssociatedContextAMD = epoxy_glXGetCurrentAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTCONTEXTPROC epoxy_glXGetCurrentContext = epoxy_glXGetCurrentContext_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTDISPLAYPROC epoxy_glXGetCurrentDisplay = epoxy_glXGetCurrentDisplay_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTDISPLAYEXTPROC epoxy_glXGetCurrentDisplayEXT = epoxy_glXGetCurrentDisplayEXT_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTDRAWABLEPROC epoxy_glXGetCurrentDrawable = epoxy_glXGetCurrentDrawable_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTREADDRAWABLEPROC epoxy_glXGetCurrentReadDrawable = epoxy_glXGetCurrentReadDrawable_global_rewrite_ptr; + +PUBLIC PFNGLXGETCURRENTREADDRAWABLESGIPROC epoxy_glXGetCurrentReadDrawableSGI = epoxy_glXGetCurrentReadDrawableSGI_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGATTRIBPROC epoxy_glXGetFBConfigAttrib = epoxy_glXGetFBConfigAttrib_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGATTRIBSGIXPROC epoxy_glXGetFBConfigAttribSGIX = epoxy_glXGetFBConfigAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGFROMVISUALSGIXPROC epoxy_glXGetFBConfigFromVisualSGIX = epoxy_glXGetFBConfigFromVisualSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXGETFBCONFIGSPROC epoxy_glXGetFBConfigs = epoxy_glXGetFBConfigs_global_rewrite_ptr; + +PUBLIC PFNGLXGETGPUIDSAMDPROC epoxy_glXGetGPUIDsAMD = epoxy_glXGetGPUIDsAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETGPUINFOAMDPROC epoxy_glXGetGPUInfoAMD = epoxy_glXGetGPUInfoAMD_global_rewrite_ptr; + +PUBLIC PFNGLXGETMSCRATEOMLPROC epoxy_glXGetMscRateOML = epoxy_glXGetMscRateOML_global_rewrite_ptr; + +PUBLIC PFNGLXGETPROCADDRESSPROC epoxy_glXGetProcAddress = epoxy_glXGetProcAddress_global_rewrite_ptr; + +PUBLIC PFNGLXGETPROCADDRESSARBPROC epoxy_glXGetProcAddressARB = epoxy_glXGetProcAddressARB_global_rewrite_ptr; + +PUBLIC PFNGLXGETSELECTEDEVENTPROC epoxy_glXGetSelectedEvent = epoxy_glXGetSelectedEvent_global_rewrite_ptr; + +PUBLIC PFNGLXGETSELECTEDEVENTSGIXPROC epoxy_glXGetSelectedEventSGIX = epoxy_glXGetSelectedEventSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXGETSYNCVALUESOMLPROC epoxy_glXGetSyncValuesOML = epoxy_glXGetSyncValuesOML_global_rewrite_ptr; + +PUBLIC PFNGLXGETTRANSPARENTINDEXSUNPROC epoxy_glXGetTransparentIndexSUN = epoxy_glXGetTransparentIndexSUN_global_rewrite_ptr; + +PUBLIC PFNGLXGETVIDEODEVICENVPROC epoxy_glXGetVideoDeviceNV = epoxy_glXGetVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXGETVIDEOINFONVPROC epoxy_glXGetVideoInfoNV = epoxy_glXGetVideoInfoNV_global_rewrite_ptr; + +PUBLIC PFNGLXGETVIDEOSYNCSGIPROC epoxy_glXGetVideoSyncSGI = epoxy_glXGetVideoSyncSGI_global_rewrite_ptr; + +PUBLIC PFNGLXGETVISUALFROMFBCONFIGPROC epoxy_glXGetVisualFromFBConfig = epoxy_glXGetVisualFromFBConfig_global_rewrite_ptr; + +PUBLIC PFNGLXGETVISUALFROMFBCONFIGSGIXPROC epoxy_glXGetVisualFromFBConfigSGIX = epoxy_glXGetVisualFromFBConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXHYPERPIPEATTRIBSGIXPROC epoxy_glXHyperpipeAttribSGIX = epoxy_glXHyperpipeAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXHYPERPIPECONFIGSGIXPROC epoxy_glXHyperpipeConfigSGIX = epoxy_glXHyperpipeConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXIMPORTCONTEXTEXTPROC epoxy_glXImportContextEXT = epoxy_glXImportContextEXT_global_rewrite_ptr; + +PUBLIC PFNGLXISDIRECTPROC epoxy_glXIsDirect = epoxy_glXIsDirect_global_rewrite_ptr; + +PUBLIC PFNGLXJOINSWAPGROUPNVPROC epoxy_glXJoinSwapGroupNV = epoxy_glXJoinSwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNGLXJOINSWAPGROUPSGIXPROC epoxy_glXJoinSwapGroupSGIX = epoxy_glXJoinSwapGroupSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC epoxy_glXLockVideoCaptureDeviceNV = epoxy_glXLockVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_glXMakeAssociatedContextCurrentAMD = epoxy_glXMakeAssociatedContextCurrentAMD_global_rewrite_ptr; + +PUBLIC PFNGLXMAKECONTEXTCURRENTPROC epoxy_glXMakeContextCurrent = epoxy_glXMakeContextCurrent_global_rewrite_ptr; + +PUBLIC PFNGLXMAKECURRENTPROC epoxy_glXMakeCurrent = epoxy_glXMakeCurrent_global_rewrite_ptr; + +PUBLIC PFNGLXMAKECURRENTREADSGIPROC epoxy_glXMakeCurrentReadSGI = epoxy_glXMakeCurrentReadSGI_global_rewrite_ptr; + +PUBLIC PFNGLXNAMEDCOPYBUFFERSUBDATANVPROC epoxy_glXNamedCopyBufferSubDataNV = epoxy_glXNamedCopyBufferSubDataNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCHANNELDELTASSGIXPROC epoxy_glXQueryChannelDeltasSGIX = epoxy_glXQueryChannelDeltasSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCHANNELRECTSGIXPROC epoxy_glXQueryChannelRectSGIX = epoxy_glXQueryChannelRectSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCONTEXTPROC epoxy_glXQueryContext = epoxy_glXQueryContext_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCONTEXTINFOEXTPROC epoxy_glXQueryContextInfoEXT = epoxy_glXQueryContextInfoEXT_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCURRENTRENDERERINTEGERMESAPROC epoxy_glXQueryCurrentRendererIntegerMESA = epoxy_glXQueryCurrentRendererIntegerMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYCURRENTRENDERERSTRINGMESAPROC epoxy_glXQueryCurrentRendererStringMESA = epoxy_glXQueryCurrentRendererStringMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYDRAWABLEPROC epoxy_glXQueryDrawable = epoxy_glXQueryDrawable_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYEXTENSIONPROC epoxy_glXQueryExtension = epoxy_glXQueryExtension_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYEXTENSIONSSTRINGPROC epoxy_glXQueryExtensionsString = epoxy_glXQueryExtensionsString_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYFRAMECOUNTNVPROC epoxy_glXQueryFrameCountNV = epoxy_glXQueryFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYGLXPBUFFERSGIXPROC epoxy_glXQueryGLXPbufferSGIX = epoxy_glXQueryGLXPbufferSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC epoxy_glXQueryHyperpipeAttribSGIX = epoxy_glXQueryHyperpipeAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC epoxy_glXQueryHyperpipeBestAttribSGIX = epoxy_glXQueryHyperpipeBestAttribSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPECONFIGSGIXPROC epoxy_glXQueryHyperpipeConfigSGIX = epoxy_glXQueryHyperpipeConfigSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYHYPERPIPENETWORKSGIXPROC epoxy_glXQueryHyperpipeNetworkSGIX = epoxy_glXQueryHyperpipeNetworkSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC epoxy_glXQueryMaxSwapBarriersSGIX = epoxy_glXQueryMaxSwapBarriersSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYMAXSWAPGROUPSNVPROC epoxy_glXQueryMaxSwapGroupsNV = epoxy_glXQueryMaxSwapGroupsNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYRENDERERINTEGERMESAPROC epoxy_glXQueryRendererIntegerMESA = epoxy_glXQueryRendererIntegerMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYRENDERERSTRINGMESAPROC epoxy_glXQueryRendererStringMESA = epoxy_glXQueryRendererStringMESA_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYSERVERSTRINGPROC epoxy_glXQueryServerString = epoxy_glXQueryServerString_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYSWAPGROUPNVPROC epoxy_glXQuerySwapGroupNV = epoxy_glXQuerySwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYVERSIONPROC epoxy_glXQueryVersion = epoxy_glXQueryVersion_global_rewrite_ptr; + +PUBLIC PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC epoxy_glXQueryVideoCaptureDeviceNV = epoxy_glXQueryVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEBUFFERSMESAPROC epoxy_glXReleaseBuffersMESA = epoxy_glXReleaseBuffersMESA_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASETEXIMAGEEXTPROC epoxy_glXReleaseTexImageEXT = epoxy_glXReleaseTexImageEXT_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_glXReleaseVideoCaptureDeviceNV = epoxy_glXReleaseVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEVIDEODEVICENVPROC epoxy_glXReleaseVideoDeviceNV = epoxy_glXReleaseVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNGLXRELEASEVIDEOIMAGENVPROC epoxy_glXReleaseVideoImageNV = epoxy_glXReleaseVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNGLXRESETFRAMECOUNTNVPROC epoxy_glXResetFrameCountNV = epoxy_glXResetFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNGLXSELECTEVENTPROC epoxy_glXSelectEvent = epoxy_glXSelectEvent_global_rewrite_ptr; + +PUBLIC PFNGLXSELECTEVENTSGIXPROC epoxy_glXSelectEventSGIX = epoxy_glXSelectEventSGIX_global_rewrite_ptr; + +PUBLIC PFNGLXSENDPBUFFERTOVIDEONVPROC epoxy_glXSendPbufferToVideoNV = epoxy_glXSendPbufferToVideoNV_global_rewrite_ptr; + +PUBLIC PFNGLXSET3DFXMODEMESAPROC epoxy_glXSet3DfxModeMESA = epoxy_glXSet3DfxModeMESA_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPBUFFERSPROC epoxy_glXSwapBuffers = epoxy_glXSwapBuffers_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPBUFFERSMSCOMLPROC epoxy_glXSwapBuffersMscOML = epoxy_glXSwapBuffersMscOML_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPINTERVALEXTPROC epoxy_glXSwapIntervalEXT = epoxy_glXSwapIntervalEXT_global_rewrite_ptr; + +PUBLIC PFNGLXSWAPINTERVALSGIPROC epoxy_glXSwapIntervalSGI = epoxy_glXSwapIntervalSGI_global_rewrite_ptr; + +PUBLIC PFNGLXUSEXFONTPROC epoxy_glXUseXFont = epoxy_glXUseXFont_global_rewrite_ptr; + +PUBLIC PFNGLXWAITFORMSCOMLPROC epoxy_glXWaitForMscOML = epoxy_glXWaitForMscOML_global_rewrite_ptr; + +PUBLIC PFNGLXWAITFORSBCOMLPROC epoxy_glXWaitForSbcOML = epoxy_glXWaitForSbcOML_global_rewrite_ptr; + +PUBLIC PFNGLXWAITGLPROC epoxy_glXWaitGL = epoxy_glXWaitGL_global_rewrite_ptr; + +PUBLIC PFNGLXWAITVIDEOSYNCSGIPROC epoxy_glXWaitVideoSyncSGI = epoxy_glXWaitVideoSyncSGI_global_rewrite_ptr; + +PUBLIC PFNGLXWAITXPROC epoxy_glXWaitX = epoxy_glXWaitX_global_rewrite_ptr; + diff --git a/Engine/lib/epoxy/src/wgl/dispatch_wgl.c b/Engine/lib/epoxy/src/wgl/dispatch_wgl.c new file mode 100644 index 0000000000..b1b215c3ef --- /dev/null +++ b/Engine/lib/epoxy/src/wgl/dispatch_wgl.c @@ -0,0 +1,217 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 (including the next + * paragraph) 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. + */ + +#include +#include +#include + +#include "dispatch_common.h" + +static bool first_context_current = false; +static bool already_switched_to_dispatch_table = false; + +/** + * If we can determine the WGL extension support from the current + * context, then return that, otherwise give the answer that will just + * send us on to get_proc_address(). + */ +bool +epoxy_conservative_has_wgl_extension(const char *ext) +{ + HDC hdc = wglGetCurrentDC(); + + if (!hdc) + return true; + + return epoxy_has_wgl_extension(hdc, ext); +} + +PUBLIC bool +epoxy_has_wgl_extension(HDC hdc, const char *ext) + { + PFNWGLGETEXTENSIONSSTRINGARBPROC getext; + + getext = (void *)wglGetProcAddress("wglGetExtensionsStringARB"); + if (!getext) { + fprintf(stderr, + "Implementation unexpectedly missing " + "WGL_ARB_extensions_string. Probably a libepoxy bug.\n"); + return false; + } + + return epoxy_extension_in_string(getext(hdc), ext); +} + +/** + * Does the work necessary to update the win32 per-thread dispatch + * tables when wglMakeCurrent() is called. + * + * Right now, we use global function pointers until the second + * MakeCurrent occurs, at which point we switch to dispatch tables. + * This could be improved in the future to track a resolved dispatch + * table per context and reuse it when the context is made current + * again. + */ +PUBLIC void +epoxy_handle_external_wglMakeCurrent(void) +{ + if (!first_context_current) { + first_context_current = true; + } else { + if (!already_switched_to_dispatch_table) { + already_switched_to_dispatch_table = true; + gl_switch_to_dispatch_table(); + wgl_switch_to_dispatch_table(); + } + + gl_init_dispatch_table(); + wgl_init_dispatch_table(); + } +} + +/** + * This global symbol is apparently looked up by Windows when loading + * a DLL, but it doesn't declare the prototype. + */ +BOOL WINAPI +DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved); + +BOOL WINAPI +DllMain(HINSTANCE dll, DWORD reason, LPVOID reserved) +{ + void *data; + + switch (reason) { + case DLL_PROCESS_ATTACH: + gl_tls_index = TlsAlloc(); + if (gl_tls_index == TLS_OUT_OF_INDEXES) + return FALSE; + wgl_tls_index = TlsAlloc(); + if (wgl_tls_index == TLS_OUT_OF_INDEXES) + return FALSE; + + first_context_current = false; + + /* FALLTHROUGH */ + + case DLL_THREAD_ATTACH: + data = LocalAlloc(LPTR, gl_tls_size); + TlsSetValue(gl_tls_index, data); + + data = LocalAlloc(LPTR, wgl_tls_size); + TlsSetValue(wgl_tls_index, data); + + break; + + case DLL_THREAD_DETACH: + case DLL_PROCESS_DETACH: + data = TlsGetValue(gl_tls_index); + LocalFree(data); + + data = TlsGetValue(wgl_tls_index); + LocalFree(data); + + if (reason == DLL_PROCESS_DETACH) { + TlsFree(gl_tls_index); + TlsFree(wgl_tls_index); + } + break; + } + + return TRUE; +} + +#ifndef EPOXY_DLL +#ifdef __GNUC__ + PIMAGE_TLS_CALLBACK dllmain_callback __attribute__((section(".CRT$XLB"))) = (PIMAGE_TLS_CALLBACK)DllMain; +#else +# ifdef _WIN64 +# pragma comment(linker, "/INCLUDE:_tls_used") +# pragma comment(linker, "/INCLUDE:dllmain_callback") +# pragma const_seg(".CRT$XLB") + extern const PIMAGE_TLS_CALLBACK dllmain_callback; + const PIMAGE_TLS_CALLBACK dllmain_callback = DllMain; +# pragma const_seg() +# else +# pragma comment(linker, "/INCLUDE:__tls_used") +# pragma comment(linker, "/INCLUDE:_dllmain_callback") +# pragma data_seg(".CRT$XLB") + PIMAGE_TLS_CALLBACK dllmain_callback = DllMain; +# pragma data_seg() +# endif +#endif +#endif + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeCurrent)(HDC hdc, HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeCurrent_unwrapped(hdc, hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeContextCurrentARB)(HDC hDrawDC, + HDC hReadDC, + HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeContextCurrentARB_unwrapped(hDrawDC, hReadDC, + hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeContextCurrentEXT)(HDC hDrawDC, + HDC hReadDC, + HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeContextCurrentEXT_unwrapped(hDrawDC, hReadDC, + hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + + +WRAPPER_VISIBILITY (BOOL) +WRAPPER(epoxy_wglMakeAssociatedContextCurrentAMD)(HGLRC hglrc) +{ + BOOL ret = epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped(hglrc); + + epoxy_handle_external_wglMakeCurrent(); + + return ret; +} + +PUBLIC PFNWGLMAKECURRENTPROC epoxy_wglMakeCurrent = epoxy_wglMakeCurrent_wrapped; +PUBLIC PFNWGLMAKECONTEXTCURRENTEXTPROC epoxy_wglMakeContextCurrentEXT = epoxy_wglMakeContextCurrentEXT_wrapped; +PUBLIC PFNWGLMAKECONTEXTCURRENTARBPROC epoxy_wglMakeContextCurrentARB = epoxy_wglMakeContextCurrentARB_wrapped; +PUBLIC PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_wglMakeAssociatedContextCurrentEXT = epoxy_wglMakeAssociatedContextCurrentAMD_wrapped; diff --git a/Engine/lib/epoxy/src/wgl/wgl_generated_dispatch.c b/Engine/lib/epoxy/src/wgl/wgl_generated_dispatch.c new file mode 100644 index 0000000000..426a61d35e --- /dev/null +++ b/Engine/lib/epoxy/src/wgl/wgl_generated_dispatch.c @@ -0,0 +1,5250 @@ +/* GL dispatch code. + * This is code-generated from the GL API XML files from Khronos. + */ + +#include +#include +#include + +#include "dispatch_common.h" +#include "epoxy/wgl.h" + +#ifdef __GNUC__ +#define EPOXY_NOINLINE __attribute__((noinline)) +#define EPOXY_INLINE inline +#elif defined (_MSC_VER) +#define EPOXY_NOINLINE __declspec(noinline) +#define EPOXY_INLINE +#endif +struct dispatch_table { + PFNWGLALLOCATEMEMORYNVPROC epoxy_wglAllocateMemoryNV; + PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC epoxy_wglAssociateImageBufferEventsI3D; + PFNWGLBEGINFRAMETRACKINGI3DPROC epoxy_wglBeginFrameTrackingI3D; + PFNWGLBINDDISPLAYCOLORTABLEEXTPROC epoxy_wglBindDisplayColorTableEXT; + PFNWGLBINDSWAPBARRIERNVPROC epoxy_wglBindSwapBarrierNV; + PFNWGLBINDTEXIMAGEARBPROC epoxy_wglBindTexImageARB; + PFNWGLBINDVIDEOCAPTUREDEVICENVPROC epoxy_wglBindVideoCaptureDeviceNV; + PFNWGLBINDVIDEODEVICENVPROC epoxy_wglBindVideoDeviceNV; + PFNWGLBINDVIDEOIMAGENVPROC epoxy_wglBindVideoImageNV; + PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_wglBlitContextFramebufferAMD; + PFNWGLCHOOSEPIXELFORMATARBPROC epoxy_wglChoosePixelFormatARB; + PFNWGLCHOOSEPIXELFORMATEXTPROC epoxy_wglChoosePixelFormatEXT; + PFNWGLCOPYCONTEXTPROC epoxy_wglCopyContext; + PFNWGLCOPYIMAGESUBDATANVPROC epoxy_wglCopyImageSubDataNV; + PFNWGLCREATEAFFINITYDCNVPROC epoxy_wglCreateAffinityDCNV; + PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC epoxy_wglCreateAssociatedContextAMD; + PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_wglCreateAssociatedContextAttribsAMD; + PFNWGLCREATEBUFFERREGIONARBPROC epoxy_wglCreateBufferRegionARB; + PFNWGLCREATECONTEXTPROC epoxy_wglCreateContext; + PFNWGLCREATECONTEXTATTRIBSARBPROC epoxy_wglCreateContextAttribsARB; + PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC epoxy_wglCreateDisplayColorTableEXT; + PFNWGLCREATEIMAGEBUFFERI3DPROC epoxy_wglCreateImageBufferI3D; + PFNWGLCREATELAYERCONTEXTPROC epoxy_wglCreateLayerContext; + PFNWGLCREATEPBUFFERARBPROC epoxy_wglCreatePbufferARB; + PFNWGLCREATEPBUFFEREXTPROC epoxy_wglCreatePbufferEXT; + PFNWGLDXCLOSEDEVICENVPROC epoxy_wglDXCloseDeviceNV; + PFNWGLDXLOCKOBJECTSNVPROC epoxy_wglDXLockObjectsNV; + PFNWGLDXOBJECTACCESSNVPROC epoxy_wglDXObjectAccessNV; + PFNWGLDXOPENDEVICENVPROC epoxy_wglDXOpenDeviceNV; + PFNWGLDXREGISTEROBJECTNVPROC epoxy_wglDXRegisterObjectNV; + PFNWGLDXSETRESOURCESHAREHANDLENVPROC epoxy_wglDXSetResourceShareHandleNV; + PFNWGLDXUNLOCKOBJECTSNVPROC epoxy_wglDXUnlockObjectsNV; + PFNWGLDXUNREGISTEROBJECTNVPROC epoxy_wglDXUnregisterObjectNV; + PFNWGLDELAYBEFORESWAPNVPROC epoxy_wglDelayBeforeSwapNV; + PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC epoxy_wglDeleteAssociatedContextAMD; + PFNWGLDELETEBUFFERREGIONARBPROC epoxy_wglDeleteBufferRegionARB; + PFNWGLDELETECONTEXTPROC epoxy_wglDeleteContext; + PFNWGLDELETEDCNVPROC epoxy_wglDeleteDCNV; + PFNWGLDESCRIBELAYERPLANEPROC epoxy_wglDescribeLayerPlane; + PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC epoxy_wglDestroyDisplayColorTableEXT; + PFNWGLDESTROYIMAGEBUFFERI3DPROC epoxy_wglDestroyImageBufferI3D; + PFNWGLDESTROYPBUFFERARBPROC epoxy_wglDestroyPbufferARB; + PFNWGLDESTROYPBUFFEREXTPROC epoxy_wglDestroyPbufferEXT; + PFNWGLDISABLEFRAMELOCKI3DPROC epoxy_wglDisableFrameLockI3D; + PFNWGLDISABLEGENLOCKI3DPROC epoxy_wglDisableGenlockI3D; + PFNWGLENABLEFRAMELOCKI3DPROC epoxy_wglEnableFrameLockI3D; + PFNWGLENABLEGENLOCKI3DPROC epoxy_wglEnableGenlockI3D; + PFNWGLENDFRAMETRACKINGI3DPROC epoxy_wglEndFrameTrackingI3D; + PFNWGLENUMGPUDEVICESNVPROC epoxy_wglEnumGpuDevicesNV; + PFNWGLENUMGPUSFROMAFFINITYDCNVPROC epoxy_wglEnumGpusFromAffinityDCNV; + PFNWGLENUMGPUSNVPROC epoxy_wglEnumGpusNV; + PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_wglEnumerateVideoCaptureDevicesNV; + PFNWGLENUMERATEVIDEODEVICESNVPROC epoxy_wglEnumerateVideoDevicesNV; + PFNWGLFREEMEMORYNVPROC epoxy_wglFreeMemoryNV; + PFNWGLGENLOCKSAMPLERATEI3DPROC epoxy_wglGenlockSampleRateI3D; + PFNWGLGENLOCKSOURCEDELAYI3DPROC epoxy_wglGenlockSourceDelayI3D; + PFNWGLGENLOCKSOURCEEDGEI3DPROC epoxy_wglGenlockSourceEdgeI3D; + PFNWGLGENLOCKSOURCEI3DPROC epoxy_wglGenlockSourceI3D; + PFNWGLGETCONTEXTGPUIDAMDPROC epoxy_wglGetContextGPUIDAMD; + PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_wglGetCurrentAssociatedContextAMD; + PFNWGLGETCURRENTCONTEXTPROC epoxy_wglGetCurrentContext; + PFNWGLGETCURRENTDCPROC epoxy_wglGetCurrentDC; + PFNWGLGETCURRENTREADDCARBPROC epoxy_wglGetCurrentReadDCARB; + PFNWGLGETCURRENTREADDCEXTPROC epoxy_wglGetCurrentReadDCEXT; + PFNWGLGETDEFAULTPROCADDRESSPROC epoxy_wglGetDefaultProcAddress; + PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglGetDigitalVideoParametersI3D; + PFNWGLGETEXTENSIONSSTRINGARBPROC epoxy_wglGetExtensionsStringARB; + PFNWGLGETEXTENSIONSSTRINGEXTPROC epoxy_wglGetExtensionsStringEXT; + PFNWGLGETFRAMEUSAGEI3DPROC epoxy_wglGetFrameUsageI3D; + PFNWGLGETGPUIDSAMDPROC epoxy_wglGetGPUIDsAMD; + PFNWGLGETGPUINFOAMDPROC epoxy_wglGetGPUInfoAMD; + PFNWGLGETGAMMATABLEI3DPROC epoxy_wglGetGammaTableI3D; + PFNWGLGETGAMMATABLEPARAMETERSI3DPROC epoxy_wglGetGammaTableParametersI3D; + PFNWGLGETGENLOCKSAMPLERATEI3DPROC epoxy_wglGetGenlockSampleRateI3D; + PFNWGLGETGENLOCKSOURCEDELAYI3DPROC epoxy_wglGetGenlockSourceDelayI3D; + PFNWGLGETGENLOCKSOURCEEDGEI3DPROC epoxy_wglGetGenlockSourceEdgeI3D; + PFNWGLGETGENLOCKSOURCEI3DPROC epoxy_wglGetGenlockSourceI3D; + PFNWGLGETLAYERPALETTEENTRIESPROC epoxy_wglGetLayerPaletteEntries; + PFNWGLGETMSCRATEOMLPROC epoxy_wglGetMscRateOML; + PFNWGLGETPBUFFERDCARBPROC epoxy_wglGetPbufferDCARB; + PFNWGLGETPBUFFERDCEXTPROC epoxy_wglGetPbufferDCEXT; + PFNWGLGETPIXELFORMATATTRIBFVARBPROC epoxy_wglGetPixelFormatAttribfvARB; + PFNWGLGETPIXELFORMATATTRIBFVEXTPROC epoxy_wglGetPixelFormatAttribfvEXT; + PFNWGLGETPIXELFORMATATTRIBIVARBPROC epoxy_wglGetPixelFormatAttribivARB; + PFNWGLGETPIXELFORMATATTRIBIVEXTPROC epoxy_wglGetPixelFormatAttribivEXT; + PFNWGLGETPROCADDRESSPROC epoxy_wglGetProcAddress; + PFNWGLGETSWAPINTERVALEXTPROC epoxy_wglGetSwapIntervalEXT; + PFNWGLGETSYNCVALUESOMLPROC epoxy_wglGetSyncValuesOML; + PFNWGLGETVIDEODEVICENVPROC epoxy_wglGetVideoDeviceNV; + PFNWGLGETVIDEOINFONVPROC epoxy_wglGetVideoInfoNV; + PFNWGLISENABLEDFRAMELOCKI3DPROC epoxy_wglIsEnabledFrameLockI3D; + PFNWGLISENABLEDGENLOCKI3DPROC epoxy_wglIsEnabledGenlockI3D; + PFNWGLJOINSWAPGROUPNVPROC epoxy_wglJoinSwapGroupNV; + PFNWGLLOADDISPLAYCOLORTABLEEXTPROC epoxy_wglLoadDisplayColorTableEXT; + PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC epoxy_wglLockVideoCaptureDeviceNV; + PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped; + PFNWGLMAKECONTEXTCURRENTARBPROC epoxy_wglMakeContextCurrentARB_unwrapped; + PFNWGLMAKECONTEXTCURRENTEXTPROC epoxy_wglMakeContextCurrentEXT_unwrapped; + PFNWGLMAKECURRENTPROC epoxy_wglMakeCurrent_unwrapped; + PFNWGLQUERYCURRENTCONTEXTNVPROC epoxy_wglQueryCurrentContextNV; + PFNWGLQUERYFRAMECOUNTNVPROC epoxy_wglQueryFrameCountNV; + PFNWGLQUERYFRAMELOCKMASTERI3DPROC epoxy_wglQueryFrameLockMasterI3D; + PFNWGLQUERYFRAMETRACKINGI3DPROC epoxy_wglQueryFrameTrackingI3D; + PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC epoxy_wglQueryGenlockMaxSourceDelayI3D; + PFNWGLQUERYMAXSWAPGROUPSNVPROC epoxy_wglQueryMaxSwapGroupsNV; + PFNWGLQUERYPBUFFERARBPROC epoxy_wglQueryPbufferARB; + PFNWGLQUERYPBUFFEREXTPROC epoxy_wglQueryPbufferEXT; + PFNWGLQUERYSWAPGROUPNVPROC epoxy_wglQuerySwapGroupNV; + PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC epoxy_wglQueryVideoCaptureDeviceNV; + PFNWGLREALIZELAYERPALETTEPROC epoxy_wglRealizeLayerPalette; + PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC epoxy_wglReleaseImageBufferEventsI3D; + PFNWGLRELEASEPBUFFERDCARBPROC epoxy_wglReleasePbufferDCARB; + PFNWGLRELEASEPBUFFERDCEXTPROC epoxy_wglReleasePbufferDCEXT; + PFNWGLRELEASETEXIMAGEARBPROC epoxy_wglReleaseTexImageARB; + PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_wglReleaseVideoCaptureDeviceNV; + PFNWGLRELEASEVIDEODEVICENVPROC epoxy_wglReleaseVideoDeviceNV; + PFNWGLRELEASEVIDEOIMAGENVPROC epoxy_wglReleaseVideoImageNV; + PFNWGLRESETFRAMECOUNTNVPROC epoxy_wglResetFrameCountNV; + PFNWGLRESTOREBUFFERREGIONARBPROC epoxy_wglRestoreBufferRegionARB; + PFNWGLSAVEBUFFERREGIONARBPROC epoxy_wglSaveBufferRegionARB; + PFNWGLSENDPBUFFERTOVIDEONVPROC epoxy_wglSendPbufferToVideoNV; + PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglSetDigitalVideoParametersI3D; + PFNWGLSETGAMMATABLEI3DPROC epoxy_wglSetGammaTableI3D; + PFNWGLSETGAMMATABLEPARAMETERSI3DPROC epoxy_wglSetGammaTableParametersI3D; + PFNWGLSETLAYERPALETTEENTRIESPROC epoxy_wglSetLayerPaletteEntries; + PFNWGLSETPBUFFERATTRIBARBPROC epoxy_wglSetPbufferAttribARB; + PFNWGLSETSTEREOEMITTERSTATE3DLPROC epoxy_wglSetStereoEmitterState3DL; + PFNWGLSHARELISTSPROC epoxy_wglShareLists; + PFNWGLSWAPBUFFERSMSCOMLPROC epoxy_wglSwapBuffersMscOML; + PFNWGLSWAPINTERVALEXTPROC epoxy_wglSwapIntervalEXT; + PFNWGLSWAPLAYERBUFFERSPROC epoxy_wglSwapLayerBuffers; + PFNWGLSWAPLAYERBUFFERSMSCOMLPROC epoxy_wglSwapLayerBuffersMscOML; + PFNWGLUSEFONTBITMAPSAPROC epoxy_wglUseFontBitmapsA; + PFNWGLUSEFONTBITMAPSWPROC epoxy_wglUseFontBitmapsW; + PFNWGLUSEFONTOUTLINESPROC epoxy_wglUseFontOutlines; + PFNWGLUSEFONTOUTLINESAPROC epoxy_wglUseFontOutlinesA; + PFNWGLUSEFONTOUTLINESWPROC epoxy_wglUseFontOutlinesW; + PFNWGLWAITFORMSCOMLPROC epoxy_wglWaitForMscOML; + PFNWGLWAITFORSBCOMLPROC epoxy_wglWaitForSbcOML; +}; + +#if USING_DISPATCH_TABLE +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void); + +#endif +enum wgl_provider { + wgl_provider_terminator = 0, + WGL_10, + WGL_extension_WGL_3DL_stereo_control, + WGL_extension_WGL_AMD_gpu_association, + WGL_extension_WGL_ARB_buffer_region, + WGL_extension_WGL_ARB_create_context, + WGL_extension_WGL_ARB_extensions_string, + WGL_extension_WGL_ARB_make_current_read, + WGL_extension_WGL_ARB_pbuffer, + WGL_extension_WGL_ARB_pixel_format, + WGL_extension_WGL_ARB_render_texture, + WGL_extension_WGL_EXT_display_color_table, + WGL_extension_WGL_EXT_extensions_string, + WGL_extension_WGL_EXT_make_current_read, + WGL_extension_WGL_EXT_pbuffer, + WGL_extension_WGL_EXT_pixel_format, + WGL_extension_WGL_EXT_swap_control, + WGL_extension_WGL_I3D_digital_video_control, + WGL_extension_WGL_I3D_gamma, + WGL_extension_WGL_I3D_genlock, + WGL_extension_WGL_I3D_image_buffer, + WGL_extension_WGL_I3D_swap_frame_lock, + WGL_extension_WGL_I3D_swap_frame_usage, + WGL_extension_WGL_NV_DX_interop, + WGL_extension_WGL_NV_copy_image, + WGL_extension_WGL_NV_delay_before_swap, + WGL_extension_WGL_NV_gpu_affinity, + WGL_extension_WGL_NV_present_video, + WGL_extension_WGL_NV_swap_group, + WGL_extension_WGL_NV_vertex_array_range, + WGL_extension_WGL_NV_video_capture, + WGL_extension_WGL_NV_video_output, + WGL_extension_WGL_OML_sync_control, +} PACKED; + +static const char *enum_string = + "WGL 10\0" + "WGL extension \"WGL_3DL_stereo_control\"\0" + "WGL extension \"WGL_AMD_gpu_association\"\0" + "WGL extension \"WGL_ARB_buffer_region\"\0" + "WGL extension \"WGL_ARB_create_context\"\0" + "WGL extension \"WGL_ARB_extensions_string\"\0" + "WGL extension \"WGL_ARB_make_current_read\"\0" + "WGL extension \"WGL_ARB_pbuffer\"\0" + "WGL extension \"WGL_ARB_pixel_format\"\0" + "WGL extension \"WGL_ARB_render_texture\"\0" + "WGL extension \"WGL_EXT_display_color_table\"\0" + "WGL extension \"WGL_EXT_extensions_string\"\0" + "WGL extension \"WGL_EXT_make_current_read\"\0" + "WGL extension \"WGL_EXT_pbuffer\"\0" + "WGL extension \"WGL_EXT_pixel_format\"\0" + "WGL extension \"WGL_EXT_swap_control\"\0" + "WGL extension \"WGL_I3D_digital_video_control\"\0" + "WGL extension \"WGL_I3D_gamma\"\0" + "WGL extension \"WGL_I3D_genlock\"\0" + "WGL extension \"WGL_I3D_image_buffer\"\0" + "WGL extension \"WGL_I3D_swap_frame_lock\"\0" + "WGL extension \"WGL_I3D_swap_frame_usage\"\0" + "WGL extension \"WGL_NV_DX_interop\"\0" + "WGL extension \"WGL_NV_copy_image\"\0" + "WGL extension \"WGL_NV_delay_before_swap\"\0" + "WGL extension \"WGL_NV_gpu_affinity\"\0" + "WGL extension \"WGL_NV_present_video\"\0" + "WGL extension \"WGL_NV_swap_group\"\0" + "WGL extension \"WGL_NV_vertex_array_range\"\0" + "WGL extension \"WGL_NV_video_capture\"\0" + "WGL extension \"WGL_NV_video_output\"\0" + "WGL extension \"WGL_OML_sync_control\"\0" + ; + +static const uint16_t enum_string_offsets[] = { + -1, /* wgl_provider_terminator, unused */ + 0, /* WGL_10 */ + 7, /* WGL_extension_WGL_3DL_stereo_control */ + 46, /* WGL_extension_WGL_AMD_gpu_association */ + 86, /* WGL_extension_WGL_ARB_buffer_region */ + 124, /* WGL_extension_WGL_ARB_create_context */ + 163, /* WGL_extension_WGL_ARB_extensions_string */ + 205, /* WGL_extension_WGL_ARB_make_current_read */ + 247, /* WGL_extension_WGL_ARB_pbuffer */ + 279, /* WGL_extension_WGL_ARB_pixel_format */ + 316, /* WGL_extension_WGL_ARB_render_texture */ + 355, /* WGL_extension_WGL_EXT_display_color_table */ + 399, /* WGL_extension_WGL_EXT_extensions_string */ + 441, /* WGL_extension_WGL_EXT_make_current_read */ + 483, /* WGL_extension_WGL_EXT_pbuffer */ + 515, /* WGL_extension_WGL_EXT_pixel_format */ + 552, /* WGL_extension_WGL_EXT_swap_control */ + 589, /* WGL_extension_WGL_I3D_digital_video_control */ + 635, /* WGL_extension_WGL_I3D_gamma */ + 665, /* WGL_extension_WGL_I3D_genlock */ + 697, /* WGL_extension_WGL_I3D_image_buffer */ + 734, /* WGL_extension_WGL_I3D_swap_frame_lock */ + 774, /* WGL_extension_WGL_I3D_swap_frame_usage */ + 815, /* WGL_extension_WGL_NV_DX_interop */ + 849, /* WGL_extension_WGL_NV_copy_image */ + 883, /* WGL_extension_WGL_NV_delay_before_swap */ + 924, /* WGL_extension_WGL_NV_gpu_affinity */ + 960, /* WGL_extension_WGL_NV_present_video */ + 997, /* WGL_extension_WGL_NV_swap_group */ + 1031, /* WGL_extension_WGL_NV_vertex_array_range */ + 1073, /* WGL_extension_WGL_NV_video_capture */ + 1110, /* WGL_extension_WGL_NV_video_output */ + 1146, /* WGL_extension_WGL_OML_sync_control */ +}; + +static const char entrypoint_strings[] = { + 'w', + 'g', + 'l', + 'A', + 'l', + 'l', + 'o', + 'c', + 'a', + 't', + 'e', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'N', + 'V', + 0, // wglAllocateMemoryNV + 'w', + 'g', + 'l', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'v', + 'e', + 'n', + 't', + 's', + 'I', + '3', + 'D', + 0, // wglAssociateImageBufferEventsI3D + 'w', + 'g', + 'l', + 'B', + 'e', + 'g', + 'i', + 'n', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'r', + 'a', + 'c', + 'k', + 'i', + 'n', + 'g', + 'I', + '3', + 'D', + 0, // wglBeginFrameTrackingI3D + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglBindDisplayColorTableEXT + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'S', + 'w', + 'a', + 'p', + 'B', + 'a', + 'r', + 'r', + 'i', + 'e', + 'r', + 'N', + 'V', + 0, // wglBindSwapBarrierNV + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // wglBindTexImageARB + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglBindVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglBindVideoDeviceNV + 'w', + 'g', + 'l', + 'B', + 'i', + 'n', + 'd', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // wglBindVideoImageNV + 'w', + 'g', + 'l', + 'B', + 'l', + 'i', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'M', + 'D', + 0, // wglBlitContextFramebufferAMD + 'w', + 'g', + 'l', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 'R', + 'B', + 0, // wglChoosePixelFormatARB + 'w', + 'g', + 'l', + 'C', + 'h', + 'o', + 'o', + 's', + 'e', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'E', + 'X', + 'T', + 0, // wglChoosePixelFormatEXT + 'w', + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglCopyContext + 'w', + 'g', + 'l', + 'C', + 'o', + 'p', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'S', + 'u', + 'b', + 'D', + 'a', + 't', + 'a', + 'N', + 'V', + 0, // wglCopyImageSubDataNV + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 'f', + 'f', + 'i', + 'n', + 'i', + 't', + 'y', + 'D', + 'C', + 'N', + 'V', + 0, // wglCreateAffinityDCNV + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // wglCreateAssociatedContextAMD + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'M', + 'D', + 0, // wglCreateAssociatedContextAttribsAMD + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglCreateBufferRegionARB + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglCreateContext + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 's', + 'A', + 'R', + 'B', + 0, // wglCreateContextAttribsARB + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglCreateDisplayColorTableEXT + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'I', + '3', + 'D', + 0, // wglCreateImageBufferI3D + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglCreateLayerContext + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // wglCreatePbufferARB + 'w', + 'g', + 'l', + 'C', + 'r', + 'e', + 'a', + 't', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // wglCreatePbufferEXT + 'w', + 'g', + 'l', + 'D', + 'X', + 'C', + 'l', + 'o', + 's', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglDXCloseDeviceNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'L', + 'o', + 'c', + 'k', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 's', + 'N', + 'V', + 0, // wglDXLockObjectsNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'A', + 'c', + 'c', + 'e', + 's', + 's', + 'N', + 'V', + 0, // wglDXObjectAccessNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'O', + 'p', + 'e', + 'n', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglDXOpenDeviceNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'R', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'N', + 'V', + 0, // wglDXRegisterObjectNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'S', + 'e', + 't', + 'R', + 'e', + 's', + 'o', + 'u', + 'r', + 'c', + 'e', + 'S', + 'h', + 'a', + 'r', + 'e', + 'H', + 'a', + 'n', + 'd', + 'l', + 'e', + 'N', + 'V', + 0, // wglDXSetResourceShareHandleNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'U', + 'n', + 'l', + 'o', + 'c', + 'k', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 's', + 'N', + 'V', + 0, // wglDXUnlockObjectsNV + 'w', + 'g', + 'l', + 'D', + 'X', + 'U', + 'n', + 'r', + 'e', + 'g', + 'i', + 's', + 't', + 'e', + 'r', + 'O', + 'b', + 'j', + 'e', + 'c', + 't', + 'N', + 'V', + 0, // wglDXUnregisterObjectNV + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'a', + 'y', + 'B', + 'e', + 'f', + 'o', + 'r', + 'e', + 'S', + 'w', + 'a', + 'p', + 'N', + 'V', + 0, // wglDelayBeforeSwapNV + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // wglDeleteAssociatedContextAMD + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglDeleteBufferRegionARB + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglDeleteContext + 'w', + 'g', + 'l', + 'D', + 'e', + 'l', + 'e', + 't', + 'e', + 'D', + 'C', + 'N', + 'V', + 0, // wglDeleteDCNV + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 'c', + 'r', + 'i', + 'b', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'l', + 'a', + 'n', + 'e', + 0, // wglDescribeLayerPlane + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglDestroyDisplayColorTableEXT + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'I', + '3', + 'D', + 0, // wglDestroyImageBufferI3D + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // wglDestroyPbufferARB + 'w', + 'g', + 'l', + 'D', + 'e', + 's', + 't', + 'r', + 'o', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // wglDestroyPbufferEXT + 'w', + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglDisableFrameLockI3D + 'w', + 'g', + 'l', + 'D', + 'i', + 's', + 'a', + 'b', + 'l', + 'e', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglDisableGenlockI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglEnableFrameLockI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglEnableGenlockI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'r', + 'a', + 'c', + 'k', + 'i', + 'n', + 'g', + 'I', + '3', + 'D', + 0, // wglEndFrameTrackingI3D + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'G', + 'p', + 'u', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // wglEnumGpuDevicesNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'G', + 'p', + 'u', + 's', + 'F', + 'r', + 'o', + 'm', + 'A', + 'f', + 'f', + 'i', + 'n', + 'i', + 't', + 'y', + 'D', + 'C', + 'N', + 'V', + 0, // wglEnumGpusFromAffinityDCNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'G', + 'p', + 'u', + 's', + 'N', + 'V', + 0, // wglEnumGpusNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // wglEnumerateVideoCaptureDevicesNV + 'w', + 'g', + 'l', + 'E', + 'n', + 'u', + 'm', + 'e', + 'r', + 'a', + 't', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 's', + 'N', + 'V', + 0, // wglEnumerateVideoDevicesNV + 'w', + 'g', + 'l', + 'F', + 'r', + 'e', + 'e', + 'M', + 'e', + 'm', + 'o', + 'r', + 'y', + 'N', + 'V', + 0, // wglFreeMemoryNV + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'R', + 'a', + 't', + 'e', + 'I', + '3', + 'D', + 0, // wglGenlockSampleRateI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'D', + 'e', + 'l', + 'a', + 'y', + 'I', + '3', + 'D', + 0, // wglGenlockSourceDelayI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'E', + 'd', + 'g', + 'e', + 'I', + '3', + 'D', + 0, // wglGenlockSourceEdgeI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'I', + '3', + 'D', + 0, // wglGenlockSourceI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 'A', + 'M', + 'D', + 0, // wglGetContextGPUIDAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'A', + 'M', + 'D', + 0, // wglGetCurrentAssociatedContextAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 0, // wglGetCurrentContext + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'D', + 'C', + 0, // wglGetCurrentDC + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'C', + 'A', + 'R', + 'B', + 0, // wglGetCurrentReadDCARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'R', + 'e', + 'a', + 'd', + 'D', + 'C', + 'E', + 'X', + 'T', + 0, // wglGetCurrentReadDCEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'e', + 'f', + 'a', + 'u', + 'l', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // wglGetDefaultProcAddress + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'D', + 'i', + 'g', + 'i', + 't', + 'a', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglGetDigitalVideoParametersI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 's', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'A', + 'R', + 'B', + 0, // wglGetExtensionsStringARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'E', + 'x', + 't', + 'e', + 'n', + 's', + 'i', + 'o', + 'n', + 's', + 'S', + 't', + 'r', + 'i', + 'n', + 'g', + 'E', + 'X', + 'T', + 0, // wglGetExtensionsStringEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'U', + 's', + 'a', + 'g', + 'e', + 'I', + '3', + 'D', + 0, // wglGetFrameUsageI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'D', + 's', + 'A', + 'M', + 'D', + 0, // wglGetGPUIDsAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'P', + 'U', + 'I', + 'n', + 'f', + 'o', + 'A', + 'M', + 'D', + 0, // wglGetGPUInfoAMD + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGammaTableI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglGetGammaTableParametersI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'a', + 'm', + 'p', + 'l', + 'e', + 'R', + 'a', + 't', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGenlockSampleRateI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'D', + 'e', + 'l', + 'a', + 'y', + 'I', + '3', + 'D', + 0, // wglGetGenlockSourceDelayI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'E', + 'd', + 'g', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGenlockSourceEdgeI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'I', + '3', + 'D', + 0, // wglGetGenlockSourceI3D + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'E', + 'n', + 't', + 'r', + 'i', + 'e', + 's', + 0, // wglGetLayerPaletteEntries + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'M', + 's', + 'c', + 'R', + 'a', + 't', + 'e', + 'O', + 'M', + 'L', + 0, // wglGetMscRateOML + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'A', + 'R', + 'B', + 0, // wglGetPbufferDCARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'E', + 'X', + 'T', + 0, // wglGetPbufferDCEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'A', + 'R', + 'B', + 0, // wglGetPixelFormatAttribfvARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'f', + 'v', + 'E', + 'X', + 'T', + 0, // wglGetPixelFormatAttribfvEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'A', + 'R', + 'B', + 0, // wglGetPixelFormatAttribivARB + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'i', + 'x', + 'e', + 'l', + 'F', + 'o', + 'r', + 'm', + 'a', + 't', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'i', + 'v', + 'E', + 'X', + 'T', + 0, // wglGetPixelFormatAttribivEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'P', + 'r', + 'o', + 'c', + 'A', + 'd', + 'd', + 'r', + 'e', + 's', + 's', + 0, // wglGetProcAddress + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // wglGetSwapIntervalEXT + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'S', + 'y', + 'n', + 'c', + 'V', + 'a', + 'l', + 'u', + 'e', + 's', + 'O', + 'M', + 'L', + 0, // wglGetSyncValuesOML + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglGetVideoDeviceNV + 'w', + 'g', + 'l', + 'G', + 'e', + 't', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'n', + 'f', + 'o', + 'N', + 'V', + 0, // wglGetVideoInfoNV + 'w', + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglIsEnabledFrameLockI3D + 'w', + 'g', + 'l', + 'I', + 's', + 'E', + 'n', + 'a', + 'b', + 'l', + 'e', + 'd', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'I', + '3', + 'D', + 0, // wglIsEnabledGenlockI3D + 'w', + 'g', + 'l', + 'J', + 'o', + 'i', + 'n', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // wglJoinSwapGroupNV + 'w', + 'g', + 'l', + 'L', + 'o', + 'a', + 'd', + 'D', + 'i', + 's', + 'p', + 'l', + 'a', + 'y', + 'C', + 'o', + 'l', + 'o', + 'r', + 'T', + 'a', + 'b', + 'l', + 'e', + 'E', + 'X', + 'T', + 0, // wglLoadDisplayColorTableEXT + 'w', + 'g', + 'l', + 'L', + 'o', + 'c', + 'k', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglLockVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'A', + 's', + 's', + 'o', + 'c', + 'i', + 'a', + 't', + 'e', + 'd', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 'M', + 'D', + 0, // wglMakeAssociatedContextCurrentAMD + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'A', + 'R', + 'B', + 0, // wglMakeContextCurrentARB + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'E', + 'X', + 'T', + 0, // wglMakeContextCurrentEXT + 'w', + 'g', + 'l', + 'M', + 'a', + 'k', + 'e', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 0, // wglMakeCurrent + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'C', + 'u', + 'r', + 'r', + 'e', + 'n', + 't', + 'C', + 'o', + 'n', + 't', + 'e', + 'x', + 't', + 'N', + 'V', + 0, // wglQueryCurrentContextNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // wglQueryFrameCountNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'L', + 'o', + 'c', + 'k', + 'M', + 'a', + 's', + 't', + 'e', + 'r', + 'I', + '3', + 'D', + 0, // wglQueryFrameLockMasterI3D + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'F', + 'r', + 'a', + 'm', + 'e', + 'T', + 'r', + 'a', + 'c', + 'k', + 'i', + 'n', + 'g', + 'I', + '3', + 'D', + 0, // wglQueryFrameTrackingI3D + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'G', + 'e', + 'n', + 'l', + 'o', + 'c', + 'k', + 'M', + 'a', + 'x', + 'S', + 'o', + 'u', + 'r', + 'c', + 'e', + 'D', + 'e', + 'l', + 'a', + 'y', + 'I', + '3', + 'D', + 0, // wglQueryGenlockMaxSourceDelayI3D + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'M', + 'a', + 'x', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 's', + 'N', + 'V', + 0, // wglQueryMaxSwapGroupsNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 'R', + 'B', + 0, // wglQueryPbufferARB + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'X', + 'T', + 0, // wglQueryPbufferEXT + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'S', + 'w', + 'a', + 'p', + 'G', + 'r', + 'o', + 'u', + 'p', + 'N', + 'V', + 0, // wglQuerySwapGroupNV + 'w', + 'g', + 'l', + 'Q', + 'u', + 'e', + 'r', + 'y', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglQueryVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'R', + 'e', + 'a', + 'l', + 'i', + 'z', + 'e', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 0, // wglRealizeLayerPalette + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'I', + 'm', + 'a', + 'g', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'E', + 'v', + 'e', + 'n', + 't', + 's', + 'I', + '3', + 'D', + 0, // wglReleaseImageBufferEventsI3D + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'A', + 'R', + 'B', + 0, // wglReleasePbufferDCARB + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'D', + 'C', + 'E', + 'X', + 'T', + 0, // wglReleasePbufferDCEXT + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'T', + 'e', + 'x', + 'I', + 'm', + 'a', + 'g', + 'e', + 'A', + 'R', + 'B', + 0, // wglReleaseTexImageARB + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'C', + 'a', + 'p', + 't', + 'u', + 'r', + 'e', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglReleaseVideoCaptureDeviceNV + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'D', + 'e', + 'v', + 'i', + 'c', + 'e', + 'N', + 'V', + 0, // wglReleaseVideoDeviceNV + 'w', + 'g', + 'l', + 'R', + 'e', + 'l', + 'e', + 'a', + 's', + 'e', + 'V', + 'i', + 'd', + 'e', + 'o', + 'I', + 'm', + 'a', + 'g', + 'e', + 'N', + 'V', + 0, // wglReleaseVideoImageNV + 'w', + 'g', + 'l', + 'R', + 'e', + 's', + 'e', + 't', + 'F', + 'r', + 'a', + 'm', + 'e', + 'C', + 'o', + 'u', + 'n', + 't', + 'N', + 'V', + 0, // wglResetFrameCountNV + 'w', + 'g', + 'l', + 'R', + 'e', + 's', + 't', + 'o', + 'r', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglRestoreBufferRegionARB + 'w', + 'g', + 'l', + 'S', + 'a', + 'v', + 'e', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 'R', + 'e', + 'g', + 'i', + 'o', + 'n', + 'A', + 'R', + 'B', + 0, // wglSaveBufferRegionARB + 'w', + 'g', + 'l', + 'S', + 'e', + 'n', + 'd', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'T', + 'o', + 'V', + 'i', + 'd', + 'e', + 'o', + 'N', + 'V', + 0, // wglSendPbufferToVideoNV + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'D', + 'i', + 'g', + 'i', + 't', + 'a', + 'l', + 'V', + 'i', + 'd', + 'e', + 'o', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglSetDigitalVideoParametersI3D + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'I', + '3', + 'D', + 0, // wglSetGammaTableI3D + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'G', + 'a', + 'm', + 'm', + 'a', + 'T', + 'a', + 'b', + 'l', + 'e', + 'P', + 'a', + 'r', + 'a', + 'm', + 'e', + 't', + 'e', + 'r', + 's', + 'I', + '3', + 'D', + 0, // wglSetGammaTableParametersI3D + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'L', + 'a', + 'y', + 'e', + 'r', + 'P', + 'a', + 'l', + 'e', + 't', + 't', + 'e', + 'E', + 'n', + 't', + 'r', + 'i', + 'e', + 's', + 0, // wglSetLayerPaletteEntries + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'P', + 'b', + 'u', + 'f', + 'f', + 'e', + 'r', + 'A', + 't', + 't', + 'r', + 'i', + 'b', + 'A', + 'R', + 'B', + 0, // wglSetPbufferAttribARB + 'w', + 'g', + 'l', + 'S', + 'e', + 't', + 'S', + 't', + 'e', + 'r', + 'e', + 'o', + 'E', + 'm', + 'i', + 't', + 't', + 'e', + 'r', + 'S', + 't', + 'a', + 't', + 'e', + '3', + 'D', + 'L', + 0, // wglSetStereoEmitterState3DL + 'w', + 'g', + 'l', + 'S', + 'h', + 'a', + 'r', + 'e', + 'L', + 'i', + 's', + 't', + 's', + 0, // wglShareLists + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // wglSwapBuffersMscOML + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'I', + 'n', + 't', + 'e', + 'r', + 'v', + 'a', + 'l', + 'E', + 'X', + 'T', + 0, // wglSwapIntervalEXT + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'L', + 'a', + 'y', + 'e', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 0, // wglSwapLayerBuffers + 'w', + 'g', + 'l', + 'S', + 'w', + 'a', + 'p', + 'L', + 'a', + 'y', + 'e', + 'r', + 'B', + 'u', + 'f', + 'f', + 'e', + 'r', + 's', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // wglSwapLayerBuffersMscOML + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 's', + 'A', + 0, // wglUseFontBitmapsA + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'B', + 'i', + 't', + 'm', + 'a', + 'p', + 's', + 'W', + 0, // wglUseFontBitmapsW + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'O', + 'u', + 't', + 'l', + 'i', + 'n', + 'e', + 's', + 0, // wglUseFontOutlines + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'O', + 'u', + 't', + 'l', + 'i', + 'n', + 'e', + 's', + 'A', + 0, // wglUseFontOutlinesA + 'w', + 'g', + 'l', + 'U', + 's', + 'e', + 'F', + 'o', + 'n', + 't', + 'O', + 'u', + 't', + 'l', + 'i', + 'n', + 'e', + 's', + 'W', + 0, // wglUseFontOutlinesW + 'w', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'M', + 's', + 'c', + 'O', + 'M', + 'L', + 0, // wglWaitForMscOML + 'w', + 'g', + 'l', + 'W', + 'a', + 'i', + 't', + 'F', + 'o', + 'r', + 'S', + 'b', + 'c', + 'O', + 'M', + 'L', + 0, // wglWaitForSbcOML + 0 }; + +static void *wgl_provider_resolver(const char *name, + const enum wgl_provider *providers, + const uint32_t *entrypoints) +{ + int i; + for (i = 0; providers[i] != wgl_provider_terminator; i++) { + switch (providers[i]) { + case WGL_10: + if (true) + return epoxy_gl_dlsym(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_3DL_stereo_control: + if (epoxy_conservative_has_wgl_extension("WGL_3DL_stereo_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_AMD_gpu_association: + if (epoxy_conservative_has_wgl_extension("WGL_AMD_gpu_association")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_buffer_region: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_buffer_region")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_create_context: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_create_context")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_extensions_string: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_extensions_string")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_make_current_read: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_make_current_read")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_pbuffer: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_pbuffer")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_pixel_format: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_pixel_format")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_ARB_render_texture: + if (epoxy_conservative_has_wgl_extension("WGL_ARB_render_texture")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_display_color_table: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_display_color_table")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_extensions_string: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_extensions_string")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_make_current_read: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_make_current_read")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_pbuffer: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_pbuffer")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_pixel_format: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_pixel_format")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_EXT_swap_control: + if (epoxy_conservative_has_wgl_extension("WGL_EXT_swap_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_digital_video_control: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_digital_video_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_gamma: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_gamma")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_genlock: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_genlock")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_image_buffer: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_image_buffer")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_swap_frame_lock: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_swap_frame_lock")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_I3D_swap_frame_usage: + if (epoxy_conservative_has_wgl_extension("WGL_I3D_swap_frame_usage")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_DX_interop: + if (epoxy_conservative_has_wgl_extension("WGL_NV_DX_interop")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_copy_image: + if (epoxy_conservative_has_wgl_extension("WGL_NV_copy_image")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_delay_before_swap: + if (epoxy_conservative_has_wgl_extension("WGL_NV_delay_before_swap")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_gpu_affinity: + if (epoxy_conservative_has_wgl_extension("WGL_NV_gpu_affinity")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_present_video: + if (epoxy_conservative_has_wgl_extension("WGL_NV_present_video")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_swap_group: + if (epoxy_conservative_has_wgl_extension("WGL_NV_swap_group")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_vertex_array_range: + if (epoxy_conservative_has_wgl_extension("WGL_NV_vertex_array_range")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_video_capture: + if (epoxy_conservative_has_wgl_extension("WGL_NV_video_capture")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_NV_video_output: + if (epoxy_conservative_has_wgl_extension("WGL_NV_video_output")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case WGL_extension_WGL_OML_sync_control: + if (epoxy_conservative_has_wgl_extension("WGL_OML_sync_control")) + return wglGetProcAddress(entrypoint_strings + entrypoints[i]); + break; + case wgl_provider_terminator: + abort(); /* Not reached */ + } + } + + fprintf(stderr, "No provider of %s found. Requires one of:\n", name); + for (i = 0; providers[i] != wgl_provider_terminator; i++) { + fprintf(stderr, " %s\n", enum_string + enum_string_offsets[providers[i]]); + } + if (providers[0] == wgl_provider_terminator) { + fprintf(stderr, " No known providers. This is likely a bug " + "in libepoxy code generation\n"); + } + abort(); +} + +EPOXY_NOINLINE static void * +wgl_single_resolver(const enum wgl_provider provider, const uint32_t entrypoint_offset); + +static void * +wgl_single_resolver(const enum wgl_provider provider, const uint32_t entrypoint_offset) +{ + const enum wgl_provider providers[] = { + provider, + wgl_provider_terminator + }; + const uint32_t entrypoints[] = { + entrypoint_offset + }; + return wgl_provider_resolver(entrypoint_strings + entrypoint_offset, + providers, entrypoints); +} + +static PFNWGLALLOCATEMEMORYNVPROC +epoxy_wglAllocateMemoryNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_vertex_array_range, 0 /* wglAllocateMemoryNV */); +} + +static PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC +epoxy_wglAssociateImageBufferEventsI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 20 /* wglAssociateImageBufferEventsI3D */); +} + +static PFNWGLBEGINFRAMETRACKINGI3DPROC +epoxy_wglBeginFrameTrackingI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 53 /* wglBeginFrameTrackingI3D */); +} + +static PFNWGLBINDDISPLAYCOLORTABLEEXTPROC +epoxy_wglBindDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 78 /* wglBindDisplayColorTableEXT */); +} + +static PFNWGLBINDSWAPBARRIERNVPROC +epoxy_wglBindSwapBarrierNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 106 /* wglBindSwapBarrierNV */); +} + +static PFNWGLBINDTEXIMAGEARBPROC +epoxy_wglBindTexImageARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_render_texture, 127 /* wglBindTexImageARB */); +} + +static PFNWGLBINDVIDEOCAPTUREDEVICENVPROC +epoxy_wglBindVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 146 /* wglBindVideoCaptureDeviceNV */); +} + +static PFNWGLBINDVIDEODEVICENVPROC +epoxy_wglBindVideoDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_present_video, 174 /* wglBindVideoDeviceNV */); +} + +static PFNWGLBINDVIDEOIMAGENVPROC +epoxy_wglBindVideoImageNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 195 /* wglBindVideoImageNV */); +} + +static PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC +epoxy_wglBlitContextFramebufferAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 215 /* wglBlitContextFramebufferAMD */); +} + +static PFNWGLCHOOSEPIXELFORMATARBPROC +epoxy_wglChoosePixelFormatARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pixel_format, 244 /* wglChoosePixelFormatARB */); +} + +static PFNWGLCHOOSEPIXELFORMATEXTPROC +epoxy_wglChoosePixelFormatEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pixel_format, 268 /* wglChoosePixelFormatEXT */); +} + +static PFNWGLCOPYCONTEXTPROC +epoxy_wglCopyContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 292 /* wglCopyContext */); +} + +static PFNWGLCOPYIMAGESUBDATANVPROC +epoxy_wglCopyImageSubDataNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_copy_image, 307 /* wglCopyImageSubDataNV */); +} + +static PFNWGLCREATEAFFINITYDCNVPROC +epoxy_wglCreateAffinityDCNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 329 /* wglCreateAffinityDCNV */); +} + +static PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC +epoxy_wglCreateAssociatedContextAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 351 /* wglCreateAssociatedContextAMD */); +} + +static PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC +epoxy_wglCreateAssociatedContextAttribsAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 381 /* wglCreateAssociatedContextAttribsAMD */); +} + +static PFNWGLCREATEBUFFERREGIONARBPROC +epoxy_wglCreateBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 418 /* wglCreateBufferRegionARB */); +} + +static PFNWGLCREATECONTEXTPROC +epoxy_wglCreateContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 443 /* wglCreateContext */); +} + +static PFNWGLCREATECONTEXTATTRIBSARBPROC +epoxy_wglCreateContextAttribsARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_create_context, 460 /* wglCreateContextAttribsARB */); +} + +static PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC +epoxy_wglCreateDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 487 /* wglCreateDisplayColorTableEXT */); +} + +static PFNWGLCREATEIMAGEBUFFERI3DPROC +epoxy_wglCreateImageBufferI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 517 /* wglCreateImageBufferI3D */); +} + +static PFNWGLCREATELAYERCONTEXTPROC +epoxy_wglCreateLayerContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 541 /* wglCreateLayerContext */); +} + +static PFNWGLCREATEPBUFFERARBPROC +epoxy_wglCreatePbufferARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 563 /* wglCreatePbufferARB */); +} + +static PFNWGLCREATEPBUFFEREXTPROC +epoxy_wglCreatePbufferEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 583 /* wglCreatePbufferEXT */); +} + +static PFNWGLDXCLOSEDEVICENVPROC +epoxy_wglDXCloseDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 603 /* wglDXCloseDeviceNV */); +} + +static PFNWGLDXLOCKOBJECTSNVPROC +epoxy_wglDXLockObjectsNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 622 /* wglDXLockObjectsNV */); +} + +static PFNWGLDXOBJECTACCESSNVPROC +epoxy_wglDXObjectAccessNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 641 /* wglDXObjectAccessNV */); +} + +static PFNWGLDXOPENDEVICENVPROC +epoxy_wglDXOpenDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 661 /* wglDXOpenDeviceNV */); +} + +static PFNWGLDXREGISTEROBJECTNVPROC +epoxy_wglDXRegisterObjectNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 679 /* wglDXRegisterObjectNV */); +} + +static PFNWGLDXSETRESOURCESHAREHANDLENVPROC +epoxy_wglDXSetResourceShareHandleNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 701 /* wglDXSetResourceShareHandleNV */); +} + +static PFNWGLDXUNLOCKOBJECTSNVPROC +epoxy_wglDXUnlockObjectsNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 731 /* wglDXUnlockObjectsNV */); +} + +static PFNWGLDXUNREGISTEROBJECTNVPROC +epoxy_wglDXUnregisterObjectNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_DX_interop, 752 /* wglDXUnregisterObjectNV */); +} + +static PFNWGLDELAYBEFORESWAPNVPROC +epoxy_wglDelayBeforeSwapNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_delay_before_swap, 776 /* wglDelayBeforeSwapNV */); +} + +static PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC +epoxy_wglDeleteAssociatedContextAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 797 /* wglDeleteAssociatedContextAMD */); +} + +static PFNWGLDELETEBUFFERREGIONARBPROC +epoxy_wglDeleteBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 827 /* wglDeleteBufferRegionARB */); +} + +static PFNWGLDELETECONTEXTPROC +epoxy_wglDeleteContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 852 /* wglDeleteContext */); +} + +static PFNWGLDELETEDCNVPROC +epoxy_wglDeleteDCNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 869 /* wglDeleteDCNV */); +} + +static PFNWGLDESCRIBELAYERPLANEPROC +epoxy_wglDescribeLayerPlane_resolver(void) +{ + return wgl_single_resolver(WGL_10, 883 /* wglDescribeLayerPlane */); +} + +static PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC +epoxy_wglDestroyDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 905 /* wglDestroyDisplayColorTableEXT */); +} + +static PFNWGLDESTROYIMAGEBUFFERI3DPROC +epoxy_wglDestroyImageBufferI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 936 /* wglDestroyImageBufferI3D */); +} + +static PFNWGLDESTROYPBUFFERARBPROC +epoxy_wglDestroyPbufferARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 961 /* wglDestroyPbufferARB */); +} + +static PFNWGLDESTROYPBUFFEREXTPROC +epoxy_wglDestroyPbufferEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 982 /* wglDestroyPbufferEXT */); +} + +static PFNWGLDISABLEFRAMELOCKI3DPROC +epoxy_wglDisableFrameLockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 1003 /* wglDisableFrameLockI3D */); +} + +static PFNWGLDISABLEGENLOCKI3DPROC +epoxy_wglDisableGenlockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1026 /* wglDisableGenlockI3D */); +} + +static PFNWGLENABLEFRAMELOCKI3DPROC +epoxy_wglEnableFrameLockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 1047 /* wglEnableFrameLockI3D */); +} + +static PFNWGLENABLEGENLOCKI3DPROC +epoxy_wglEnableGenlockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1069 /* wglEnableGenlockI3D */); +} + +static PFNWGLENDFRAMETRACKINGI3DPROC +epoxy_wglEndFrameTrackingI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 1089 /* wglEndFrameTrackingI3D */); +} + +static PFNWGLENUMGPUDEVICESNVPROC +epoxy_wglEnumGpuDevicesNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 1112 /* wglEnumGpuDevicesNV */); +} + +static PFNWGLENUMGPUSFROMAFFINITYDCNVPROC +epoxy_wglEnumGpusFromAffinityDCNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 1132 /* wglEnumGpusFromAffinityDCNV */); +} + +static PFNWGLENUMGPUSNVPROC +epoxy_wglEnumGpusNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_gpu_affinity, 1160 /* wglEnumGpusNV */); +} + +static PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC +epoxy_wglEnumerateVideoCaptureDevicesNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 1174 /* wglEnumerateVideoCaptureDevicesNV */); +} + +static PFNWGLENUMERATEVIDEODEVICESNVPROC +epoxy_wglEnumerateVideoDevicesNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_present_video, 1208 /* wglEnumerateVideoDevicesNV */); +} + +static PFNWGLFREEMEMORYNVPROC +epoxy_wglFreeMemoryNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_vertex_array_range, 1235 /* wglFreeMemoryNV */); +} + +static PFNWGLGENLOCKSAMPLERATEI3DPROC +epoxy_wglGenlockSampleRateI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1251 /* wglGenlockSampleRateI3D */); +} + +static PFNWGLGENLOCKSOURCEDELAYI3DPROC +epoxy_wglGenlockSourceDelayI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1275 /* wglGenlockSourceDelayI3D */); +} + +static PFNWGLGENLOCKSOURCEEDGEI3DPROC +epoxy_wglGenlockSourceEdgeI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1300 /* wglGenlockSourceEdgeI3D */); +} + +static PFNWGLGENLOCKSOURCEI3DPROC +epoxy_wglGenlockSourceI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1324 /* wglGenlockSourceI3D */); +} + +static PFNWGLGETCONTEXTGPUIDAMDPROC +epoxy_wglGetContextGPUIDAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1344 /* wglGetContextGPUIDAMD */); +} + +static PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC +epoxy_wglGetCurrentAssociatedContextAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1366 /* wglGetCurrentAssociatedContextAMD */); +} + +static PFNWGLGETCURRENTCONTEXTPROC +epoxy_wglGetCurrentContext_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1400 /* wglGetCurrentContext */); +} + +static PFNWGLGETCURRENTDCPROC +epoxy_wglGetCurrentDC_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1421 /* wglGetCurrentDC */); +} + +static PFNWGLGETCURRENTREADDCARBPROC +epoxy_wglGetCurrentReadDCARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_make_current_read, 1437 /* wglGetCurrentReadDCARB */); +} + +static PFNWGLGETCURRENTREADDCEXTPROC +epoxy_wglGetCurrentReadDCEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_make_current_read, 1460 /* wglGetCurrentReadDCEXT */); +} + +static PFNWGLGETDEFAULTPROCADDRESSPROC +epoxy_wglGetDefaultProcAddress_resolver(void) +{ + static const enum wgl_provider providers[] = { + wgl_provider_terminator + }; + static const uint32_t entrypoints[] = { + 0 /* None */, + }; + return wgl_provider_resolver(entrypoint_strings + 1483 /* "wglGetDefaultProcAddress" */, + providers, entrypoints); +} + +static PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC +epoxy_wglGetDigitalVideoParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_digital_video_control, 1508 /* wglGetDigitalVideoParametersI3D */); +} + +static PFNWGLGETEXTENSIONSSTRINGARBPROC +epoxy_wglGetExtensionsStringARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_extensions_string, 1540 /* wglGetExtensionsStringARB */); +} + +static PFNWGLGETEXTENSIONSSTRINGEXTPROC +epoxy_wglGetExtensionsStringEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_extensions_string, 1566 /* wglGetExtensionsStringEXT */); +} + +static PFNWGLGETFRAMEUSAGEI3DPROC +epoxy_wglGetFrameUsageI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 1592 /* wglGetFrameUsageI3D */); +} + +static PFNWGLGETGPUIDSAMDPROC +epoxy_wglGetGPUIDsAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1612 /* wglGetGPUIDsAMD */); +} + +static PFNWGLGETGPUINFOAMDPROC +epoxy_wglGetGPUInfoAMD_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 1628 /* wglGetGPUInfoAMD */); +} + +static PFNWGLGETGAMMATABLEI3DPROC +epoxy_wglGetGammaTableI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 1645 /* wglGetGammaTableI3D */); +} + +static PFNWGLGETGAMMATABLEPARAMETERSI3DPROC +epoxy_wglGetGammaTableParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 1665 /* wglGetGammaTableParametersI3D */); +} + +static PFNWGLGETGENLOCKSAMPLERATEI3DPROC +epoxy_wglGetGenlockSampleRateI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1695 /* wglGetGenlockSampleRateI3D */); +} + +static PFNWGLGETGENLOCKSOURCEDELAYI3DPROC +epoxy_wglGetGenlockSourceDelayI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1722 /* wglGetGenlockSourceDelayI3D */); +} + +static PFNWGLGETGENLOCKSOURCEEDGEI3DPROC +epoxy_wglGetGenlockSourceEdgeI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1750 /* wglGetGenlockSourceEdgeI3D */); +} + +static PFNWGLGETGENLOCKSOURCEI3DPROC +epoxy_wglGetGenlockSourceI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 1777 /* wglGetGenlockSourceI3D */); +} + +static PFNWGLGETLAYERPALETTEENTRIESPROC +epoxy_wglGetLayerPaletteEntries_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1800 /* wglGetLayerPaletteEntries */); +} + +static PFNWGLGETMSCRATEOMLPROC +epoxy_wglGetMscRateOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 1826 /* wglGetMscRateOML */); +} + +static PFNWGLGETPBUFFERDCARBPROC +epoxy_wglGetPbufferDCARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 1843 /* wglGetPbufferDCARB */); +} + +static PFNWGLGETPBUFFERDCEXTPROC +epoxy_wglGetPbufferDCEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 1862 /* wglGetPbufferDCEXT */); +} + +static PFNWGLGETPIXELFORMATATTRIBFVARBPROC +epoxy_wglGetPixelFormatAttribfvARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pixel_format, 1881 /* wglGetPixelFormatAttribfvARB */); +} + +static PFNWGLGETPIXELFORMATATTRIBFVEXTPROC +epoxy_wglGetPixelFormatAttribfvEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pixel_format, 1910 /* wglGetPixelFormatAttribfvEXT */); +} + +static PFNWGLGETPIXELFORMATATTRIBIVARBPROC +epoxy_wglGetPixelFormatAttribivARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pixel_format, 1939 /* wglGetPixelFormatAttribivARB */); +} + +static PFNWGLGETPIXELFORMATATTRIBIVEXTPROC +epoxy_wglGetPixelFormatAttribivEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pixel_format, 1968 /* wglGetPixelFormatAttribivEXT */); +} + +static PFNWGLGETPROCADDRESSPROC +epoxy_wglGetProcAddress_resolver(void) +{ + return wgl_single_resolver(WGL_10, 1997 /* wglGetProcAddress */); +} + +static PFNWGLGETSWAPINTERVALEXTPROC +epoxy_wglGetSwapIntervalEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_swap_control, 2015 /* wglGetSwapIntervalEXT */); +} + +static PFNWGLGETSYNCVALUESOMLPROC +epoxy_wglGetSyncValuesOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 2037 /* wglGetSyncValuesOML */); +} + +static PFNWGLGETVIDEODEVICENVPROC +epoxy_wglGetVideoDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2057 /* wglGetVideoDeviceNV */); +} + +static PFNWGLGETVIDEOINFONVPROC +epoxy_wglGetVideoInfoNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2077 /* wglGetVideoInfoNV */); +} + +static PFNWGLISENABLEDFRAMELOCKI3DPROC +epoxy_wglIsEnabledFrameLockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 2095 /* wglIsEnabledFrameLockI3D */); +} + +static PFNWGLISENABLEDGENLOCKI3DPROC +epoxy_wglIsEnabledGenlockI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 2120 /* wglIsEnabledGenlockI3D */); +} + +static PFNWGLJOINSWAPGROUPNVPROC +epoxy_wglJoinSwapGroupNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2143 /* wglJoinSwapGroupNV */); +} + +static PFNWGLLOADDISPLAYCOLORTABLEEXTPROC +epoxy_wglLoadDisplayColorTableEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_display_color_table, 2162 /* wglLoadDisplayColorTableEXT */); +} + +static PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC +epoxy_wglLockVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 2190 /* wglLockVideoCaptureDeviceNV */); +} + +static PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC +epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_AMD_gpu_association, 2218 /* wglMakeAssociatedContextCurrentAMD */); +} + +static PFNWGLMAKECONTEXTCURRENTARBPROC +epoxy_wglMakeContextCurrentARB_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_make_current_read, 2253 /* wglMakeContextCurrentARB */); +} + +static PFNWGLMAKECONTEXTCURRENTEXTPROC +epoxy_wglMakeContextCurrentEXT_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_make_current_read, 2278 /* wglMakeContextCurrentEXT */); +} + +static PFNWGLMAKECURRENTPROC +epoxy_wglMakeCurrent_unwrapped_resolver(void) +{ + return wgl_single_resolver(WGL_10, 2303 /* wglMakeCurrent */); +} + +static PFNWGLQUERYCURRENTCONTEXTNVPROC +epoxy_wglQueryCurrentContextNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_present_video, 2318 /* wglQueryCurrentContextNV */); +} + +static PFNWGLQUERYFRAMECOUNTNVPROC +epoxy_wglQueryFrameCountNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2343 /* wglQueryFrameCountNV */); +} + +static PFNWGLQUERYFRAMELOCKMASTERI3DPROC +epoxy_wglQueryFrameLockMasterI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_lock, 2364 /* wglQueryFrameLockMasterI3D */); +} + +static PFNWGLQUERYFRAMETRACKINGI3DPROC +epoxy_wglQueryFrameTrackingI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_swap_frame_usage, 2391 /* wglQueryFrameTrackingI3D */); +} + +static PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC +epoxy_wglQueryGenlockMaxSourceDelayI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_genlock, 2416 /* wglQueryGenlockMaxSourceDelayI3D */); +} + +static PFNWGLQUERYMAXSWAPGROUPSNVPROC +epoxy_wglQueryMaxSwapGroupsNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2449 /* wglQueryMaxSwapGroupsNV */); +} + +static PFNWGLQUERYPBUFFERARBPROC +epoxy_wglQueryPbufferARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 2473 /* wglQueryPbufferARB */); +} + +static PFNWGLQUERYPBUFFEREXTPROC +epoxy_wglQueryPbufferEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 2492 /* wglQueryPbufferEXT */); +} + +static PFNWGLQUERYSWAPGROUPNVPROC +epoxy_wglQuerySwapGroupNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2511 /* wglQuerySwapGroupNV */); +} + +static PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC +epoxy_wglQueryVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 2531 /* wglQueryVideoCaptureDeviceNV */); +} + +static PFNWGLREALIZELAYERPALETTEPROC +epoxy_wglRealizeLayerPalette_resolver(void) +{ + return wgl_single_resolver(WGL_10, 2560 /* wglRealizeLayerPalette */); +} + +static PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC +epoxy_wglReleaseImageBufferEventsI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_image_buffer, 2583 /* wglReleaseImageBufferEventsI3D */); +} + +static PFNWGLRELEASEPBUFFERDCARBPROC +epoxy_wglReleasePbufferDCARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_pbuffer, 2614 /* wglReleasePbufferDCARB */); +} + +static PFNWGLRELEASEPBUFFERDCEXTPROC +epoxy_wglReleasePbufferDCEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_pbuffer, 2637 /* wglReleasePbufferDCEXT */); +} + +static PFNWGLRELEASETEXIMAGEARBPROC +epoxy_wglReleaseTexImageARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_render_texture, 2660 /* wglReleaseTexImageARB */); +} + +static PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC +epoxy_wglReleaseVideoCaptureDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_capture, 2682 /* wglReleaseVideoCaptureDeviceNV */); +} + +static PFNWGLRELEASEVIDEODEVICENVPROC +epoxy_wglReleaseVideoDeviceNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2713 /* wglReleaseVideoDeviceNV */); +} + +static PFNWGLRELEASEVIDEOIMAGENVPROC +epoxy_wglReleaseVideoImageNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2737 /* wglReleaseVideoImageNV */); +} + +static PFNWGLRESETFRAMECOUNTNVPROC +epoxy_wglResetFrameCountNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_swap_group, 2760 /* wglResetFrameCountNV */); +} + +static PFNWGLRESTOREBUFFERREGIONARBPROC +epoxy_wglRestoreBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 2781 /* wglRestoreBufferRegionARB */); +} + +static PFNWGLSAVEBUFFERREGIONARBPROC +epoxy_wglSaveBufferRegionARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_buffer_region, 2807 /* wglSaveBufferRegionARB */); +} + +static PFNWGLSENDPBUFFERTOVIDEONVPROC +epoxy_wglSendPbufferToVideoNV_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_NV_video_output, 2830 /* wglSendPbufferToVideoNV */); +} + +static PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC +epoxy_wglSetDigitalVideoParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_digital_video_control, 2854 /* wglSetDigitalVideoParametersI3D */); +} + +static PFNWGLSETGAMMATABLEI3DPROC +epoxy_wglSetGammaTableI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 2886 /* wglSetGammaTableI3D */); +} + +static PFNWGLSETGAMMATABLEPARAMETERSI3DPROC +epoxy_wglSetGammaTableParametersI3D_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_I3D_gamma, 2906 /* wglSetGammaTableParametersI3D */); +} + +static PFNWGLSETLAYERPALETTEENTRIESPROC +epoxy_wglSetLayerPaletteEntries_resolver(void) +{ + return wgl_single_resolver(WGL_10, 2936 /* wglSetLayerPaletteEntries */); +} + +static PFNWGLSETPBUFFERATTRIBARBPROC +epoxy_wglSetPbufferAttribARB_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_ARB_render_texture, 2962 /* wglSetPbufferAttribARB */); +} + +static PFNWGLSETSTEREOEMITTERSTATE3DLPROC +epoxy_wglSetStereoEmitterState3DL_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_3DL_stereo_control, 2985 /* wglSetStereoEmitterState3DL */); +} + +static PFNWGLSHARELISTSPROC +epoxy_wglShareLists_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3013 /* wglShareLists */); +} + +static PFNWGLSWAPBUFFERSMSCOMLPROC +epoxy_wglSwapBuffersMscOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3027 /* wglSwapBuffersMscOML */); +} + +static PFNWGLSWAPINTERVALEXTPROC +epoxy_wglSwapIntervalEXT_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_EXT_swap_control, 3048 /* wglSwapIntervalEXT */); +} + +static PFNWGLSWAPLAYERBUFFERSPROC +epoxy_wglSwapLayerBuffers_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3067 /* wglSwapLayerBuffers */); +} + +static PFNWGLSWAPLAYERBUFFERSMSCOMLPROC +epoxy_wglSwapLayerBuffersMscOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3087 /* wglSwapLayerBuffersMscOML */); +} + +static PFNWGLUSEFONTBITMAPSAPROC +epoxy_wglUseFontBitmapsA_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3113 /* wglUseFontBitmapsA */); +} + +static PFNWGLUSEFONTBITMAPSWPROC +epoxy_wglUseFontBitmapsW_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3132 /* wglUseFontBitmapsW */); +} + +static PFNWGLUSEFONTOUTLINESPROC +epoxy_wglUseFontOutlines_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3151 /* wglUseFontOutlines */); +} + +static PFNWGLUSEFONTOUTLINESAPROC +epoxy_wglUseFontOutlinesA_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3170 /* wglUseFontOutlinesA */); +} + +static PFNWGLUSEFONTOUTLINESWPROC +epoxy_wglUseFontOutlinesW_resolver(void) +{ + return wgl_single_resolver(WGL_10, 3190 /* wglUseFontOutlinesW */); +} + +static PFNWGLWAITFORMSCOMLPROC +epoxy_wglWaitForMscOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3210 /* wglWaitForMscOML */); +} + +static PFNWGLWAITFORSBCOMLPROC +epoxy_wglWaitForSbcOML_resolver(void) +{ + return wgl_single_resolver(WGL_extension_WGL_OML_sync_control, 3227 /* wglWaitForSbcOML */); +} + +GEN_THUNKS_RET(void *, wglAllocateMemoryNV, (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority), (size, readfreq, writefreq, priority)) +GEN_THUNKS_RET(BOOL, wglAssociateImageBufferEventsI3D, (HDC hDC, const HANDLE * pEvent, const LPVOID * pAddress, const DWORD * pSize, UINT count), (hDC, pEvent, pAddress, pSize, count)) +GEN_THUNKS_RET(BOOL, wglBeginFrameTrackingI3D, (void), ()) +GEN_THUNKS_RET(GLboolean, wglBindDisplayColorTableEXT, (GLushort id), (id)) +GEN_THUNKS_RET(BOOL, wglBindSwapBarrierNV, (GLuint group, GLuint barrier), (group, barrier)) +GEN_THUNKS_RET(BOOL, wglBindTexImageARB, (HPBUFFERARB hPbuffer, int iBuffer), (hPbuffer, iBuffer)) +GEN_THUNKS_RET(BOOL, wglBindVideoCaptureDeviceNV, (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice), (uVideoSlot, hDevice)) +GEN_THUNKS_RET(BOOL, wglBindVideoDeviceNV, (HDC hDC, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int * piAttribList), (hDC, uVideoSlot, hVideoDevice, piAttribList)) +GEN_THUNKS_RET(BOOL, wglBindVideoImageNV, (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer), (hVideoDevice, hPbuffer, iVideoBuffer)) +GEN_THUNKS(wglBlitContextFramebufferAMD, (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter), (dstCtx, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)) +GEN_THUNKS_RET(BOOL, wglChoosePixelFormatARB, (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats), (hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats)) +GEN_THUNKS_RET(BOOL, wglChoosePixelFormatEXT, (HDC hdc, const int * piAttribIList, const FLOAT * pfAttribFList, UINT nMaxFormats, int * piFormats, UINT * nNumFormats), (hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats)) +GEN_THUNKS_RET(BOOL, wglCopyContext, (HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask), (hglrcSrc, hglrcDst, mask)) +GEN_THUNKS_RET(BOOL, wglCopyImageSubDataNV, (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth), (hSrcRC, srcName, srcTarget, srcLevel, srcX, srcY, srcZ, hDstRC, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, width, height, depth)) +GEN_THUNKS_RET(HDC, wglCreateAffinityDCNV, (const HGPUNV * phGpuList), (phGpuList)) +GEN_THUNKS_RET(HGLRC, wglCreateAssociatedContextAMD, (UINT id), (id)) +GEN_THUNKS_RET(HGLRC, wglCreateAssociatedContextAttribsAMD, (UINT id, HGLRC hShareContext, const int * attribList), (id, hShareContext, attribList)) +GEN_THUNKS_RET(HANDLE, wglCreateBufferRegionARB, (HDC hDC, int iLayerPlane, UINT uType), (hDC, iLayerPlane, uType)) +GEN_THUNKS_RET(HGLRC, wglCreateContext, (HDC hDc), (hDc)) +GEN_THUNKS_RET(HGLRC, wglCreateContextAttribsARB, (HDC hDC, HGLRC hShareContext, const int * attribList), (hDC, hShareContext, attribList)) +GEN_THUNKS_RET(GLboolean, wglCreateDisplayColorTableEXT, (GLushort id), (id)) +GEN_THUNKS_RET(LPVOID, wglCreateImageBufferI3D, (HDC hDC, DWORD dwSize, UINT uFlags), (hDC, dwSize, uFlags)) +GEN_THUNKS_RET(HGLRC, wglCreateLayerContext, (HDC hDc, int level), (hDc, level)) +GEN_THUNKS_RET(HPBUFFERARB, wglCreatePbufferARB, (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList), (hDC, iPixelFormat, iWidth, iHeight, piAttribList)) +GEN_THUNKS_RET(HPBUFFEREXT, wglCreatePbufferEXT, (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int * piAttribList), (hDC, iPixelFormat, iWidth, iHeight, piAttribList)) +GEN_THUNKS_RET(BOOL, wglDXCloseDeviceNV, (HANDLE hDevice), (hDevice)) +GEN_THUNKS_RET(BOOL, wglDXLockObjectsNV, (HANDLE hDevice, GLint count, HANDLE * hObjects), (hDevice, count, hObjects)) +GEN_THUNKS_RET(BOOL, wglDXObjectAccessNV, (HANDLE hObject, GLenum access), (hObject, access)) +GEN_THUNKS_RET(HANDLE, wglDXOpenDeviceNV, (void * dxDevice), (dxDevice)) +GEN_THUNKS_RET(HANDLE, wglDXRegisterObjectNV, (HANDLE hDevice, void * dxObject, GLuint name, GLenum type, GLenum access), (hDevice, dxObject, name, type, access)) +GEN_THUNKS_RET(BOOL, wglDXSetResourceShareHandleNV, (void * dxObject, HANDLE shareHandle), (dxObject, shareHandle)) +GEN_THUNKS_RET(BOOL, wglDXUnlockObjectsNV, (HANDLE hDevice, GLint count, HANDLE * hObjects), (hDevice, count, hObjects)) +GEN_THUNKS_RET(BOOL, wglDXUnregisterObjectNV, (HANDLE hDevice, HANDLE hObject), (hDevice, hObject)) +GEN_THUNKS_RET(BOOL, wglDelayBeforeSwapNV, (HDC hDC, GLfloat seconds), (hDC, seconds)) +GEN_THUNKS_RET(BOOL, wglDeleteAssociatedContextAMD, (HGLRC hglrc), (hglrc)) +GEN_THUNKS(wglDeleteBufferRegionARB, (HANDLE hRegion), (hRegion)) +GEN_THUNKS_RET(BOOL, wglDeleteContext, (HGLRC oldContext), (oldContext)) +GEN_THUNKS_RET(BOOL, wglDeleteDCNV, (HDC hdc), (hdc)) +GEN_THUNKS_RET(BOOL, wglDescribeLayerPlane, (HDC hDc, int pixelFormat, int layerPlane, UINT nBytes, const LAYERPLANEDESCRIPTOR * plpd), (hDc, pixelFormat, layerPlane, nBytes, plpd)) +GEN_THUNKS(wglDestroyDisplayColorTableEXT, (GLushort id), (id)) +GEN_THUNKS_RET(BOOL, wglDestroyImageBufferI3D, (HDC hDC, LPVOID pAddress), (hDC, pAddress)) +GEN_THUNKS_RET(BOOL, wglDestroyPbufferARB, (HPBUFFERARB hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(BOOL, wglDestroyPbufferEXT, (HPBUFFEREXT hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(BOOL, wglDisableFrameLockI3D, (void), ()) +GEN_THUNKS_RET(BOOL, wglDisableGenlockI3D, (HDC hDC), (hDC)) +GEN_THUNKS_RET(BOOL, wglEnableFrameLockI3D, (void), ()) +GEN_THUNKS_RET(BOOL, wglEnableGenlockI3D, (HDC hDC), (hDC)) +GEN_THUNKS_RET(BOOL, wglEndFrameTrackingI3D, (void), ()) +GEN_THUNKS_RET(BOOL, wglEnumGpuDevicesNV, (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice), (hGpu, iDeviceIndex, lpGpuDevice)) +GEN_THUNKS_RET(BOOL, wglEnumGpusFromAffinityDCNV, (HDC hAffinityDC, UINT iGpuIndex, HGPUNV * hGpu), (hAffinityDC, iGpuIndex, hGpu)) +GEN_THUNKS_RET(BOOL, wglEnumGpusNV, (UINT iGpuIndex, HGPUNV * phGpu), (iGpuIndex, phGpu)) +GEN_THUNKS_RET(UINT, wglEnumerateVideoCaptureDevicesNV, (HDC hDc, HVIDEOINPUTDEVICENV * phDeviceList), (hDc, phDeviceList)) +GEN_THUNKS_RET(int, wglEnumerateVideoDevicesNV, (HDC hDC, HVIDEOOUTPUTDEVICENV * phDeviceList), (hDC, phDeviceList)) +GEN_THUNKS(wglFreeMemoryNV, (void * pointer), (pointer)) +GEN_THUNKS_RET(BOOL, wglGenlockSampleRateI3D, (HDC hDC, UINT uRate), (hDC, uRate)) +GEN_THUNKS_RET(BOOL, wglGenlockSourceDelayI3D, (HDC hDC, UINT uDelay), (hDC, uDelay)) +GEN_THUNKS_RET(BOOL, wglGenlockSourceEdgeI3D, (HDC hDC, UINT uEdge), (hDC, uEdge)) +GEN_THUNKS_RET(BOOL, wglGenlockSourceI3D, (HDC hDC, UINT uSource), (hDC, uSource)) +GEN_THUNKS_RET(UINT, wglGetContextGPUIDAMD, (HGLRC hglrc), (hglrc)) +GEN_THUNKS_RET(HGLRC, wglGetCurrentAssociatedContextAMD, (void), ()) +GEN_THUNKS_RET(HGLRC, wglGetCurrentContext, (void), ()) +GEN_THUNKS_RET(HDC, wglGetCurrentDC, (void), ()) +GEN_THUNKS_RET(HDC, wglGetCurrentReadDCARB, (void), ()) +GEN_THUNKS_RET(HDC, wglGetCurrentReadDCEXT, (void), ()) +GEN_THUNKS_RET(PROC, wglGetDefaultProcAddress, (LPCSTR lpszProc), (lpszProc)) +GEN_THUNKS_RET(BOOL, wglGetDigitalVideoParametersI3D, (HDC hDC, int iAttribute, int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(const char *, wglGetExtensionsStringARB, (HDC hdc), (hdc)) +GEN_THUNKS_RET(const char *, wglGetExtensionsStringEXT, (void), ()) +GEN_THUNKS_RET(BOOL, wglGetFrameUsageI3D, (float * pUsage), (pUsage)) +GEN_THUNKS_RET(UINT, wglGetGPUIDsAMD, (UINT maxCount, UINT * ids), (maxCount, ids)) +GEN_THUNKS_RET(INT, wglGetGPUInfoAMD, (UINT id, int property, GLenum dataType, UINT size, void * data), (id, property, dataType, size, data)) +GEN_THUNKS_RET(BOOL, wglGetGammaTableI3D, (HDC hDC, int iEntries, USHORT * puRed, USHORT * puGreen, USHORT * puBlue), (hDC, iEntries, puRed, puGreen, puBlue)) +GEN_THUNKS_RET(BOOL, wglGetGammaTableParametersI3D, (HDC hDC, int iAttribute, int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSampleRateI3D, (HDC hDC, UINT * uRate), (hDC, uRate)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSourceDelayI3D, (HDC hDC, UINT * uDelay), (hDC, uDelay)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSourceEdgeI3D, (HDC hDC, UINT * uEdge), (hDC, uEdge)) +GEN_THUNKS_RET(BOOL, wglGetGenlockSourceI3D, (HDC hDC, UINT * uSource), (hDC, uSource)) +GEN_THUNKS_RET(int, wglGetLayerPaletteEntries, (HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr), (hdc, iLayerPlane, iStart, cEntries, pcr)) +GEN_THUNKS_RET(BOOL, wglGetMscRateOML, (HDC hdc, INT32 * numerator, INT32 * denominator), (hdc, numerator, denominator)) +GEN_THUNKS_RET(HDC, wglGetPbufferDCARB, (HPBUFFERARB hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(HDC, wglGetPbufferDCEXT, (HPBUFFEREXT hPbuffer), (hPbuffer)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribfvARB, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, FLOAT * pfValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribfvEXT, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, FLOAT * pfValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, pfValues)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribivARB, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int * piAttributes, int * piValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues)) +GEN_THUNKS_RET(BOOL, wglGetPixelFormatAttribivEXT, (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int * piAttributes, int * piValues), (hdc, iPixelFormat, iLayerPlane, nAttributes, piAttributes, piValues)) +GEN_THUNKS_RET(PROC, wglGetProcAddress, (LPCSTR lpszProc), (lpszProc)) +GEN_THUNKS_RET(int, wglGetSwapIntervalEXT, (void), ()) +GEN_THUNKS_RET(BOOL, wglGetSyncValuesOML, (HDC hdc, INT64 * ust, INT64 * msc, INT64 * sbc), (hdc, ust, msc, sbc)) +GEN_THUNKS_RET(BOOL, wglGetVideoDeviceNV, (HDC hDC, int numDevices, HPVIDEODEV * hVideoDevice), (hDC, numDevices, hVideoDevice)) +GEN_THUNKS_RET(BOOL, wglGetVideoInfoNV, (HPVIDEODEV hpVideoDevice, unsigned long * pulCounterOutputPbuffer, unsigned long * pulCounterOutputVideo), (hpVideoDevice, pulCounterOutputPbuffer, pulCounterOutputVideo)) +GEN_THUNKS_RET(BOOL, wglIsEnabledFrameLockI3D, (BOOL * pFlag), (pFlag)) +GEN_THUNKS_RET(BOOL, wglIsEnabledGenlockI3D, (HDC hDC, BOOL * pFlag), (hDC, pFlag)) +GEN_THUNKS_RET(BOOL, wglJoinSwapGroupNV, (HDC hDC, GLuint group), (hDC, group)) +GEN_THUNKS_RET(GLboolean, wglLoadDisplayColorTableEXT, (const GLushort * table, GLuint length), (table, length)) +GEN_THUNKS_RET(BOOL, wglLockVideoCaptureDeviceNV, (HDC hDc, HVIDEOINPUTDEVICENV hDevice), (hDc, hDevice)) +GEN_THUNKS_RET(BOOL, wglMakeAssociatedContextCurrentAMD_unwrapped, (HGLRC hglrc), (hglrc)) +GEN_THUNKS_RET(BOOL, wglMakeContextCurrentARB_unwrapped, (HDC hDrawDC, HDC hReadDC, HGLRC hglrc), (hDrawDC, hReadDC, hglrc)) +GEN_THUNKS_RET(BOOL, wglMakeContextCurrentEXT_unwrapped, (HDC hDrawDC, HDC hReadDC, HGLRC hglrc), (hDrawDC, hReadDC, hglrc)) +GEN_THUNKS_RET(BOOL, wglMakeCurrent_unwrapped, (HDC hDc, HGLRC newContext), (hDc, newContext)) +GEN_THUNKS_RET(BOOL, wglQueryCurrentContextNV, (int iAttribute, int * piValue), (iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglQueryFrameCountNV, (HDC hDC, GLuint * count), (hDC, count)) +GEN_THUNKS_RET(BOOL, wglQueryFrameLockMasterI3D, (BOOL * pFlag), (pFlag)) +GEN_THUNKS_RET(BOOL, wglQueryFrameTrackingI3D, (DWORD * pFrameCount, DWORD * pMissedFrames, float * pLastMissedUsage), (pFrameCount, pMissedFrames, pLastMissedUsage)) +GEN_THUNKS_RET(BOOL, wglQueryGenlockMaxSourceDelayI3D, (HDC hDC, UINT * uMaxLineDelay, UINT * uMaxPixelDelay), (hDC, uMaxLineDelay, uMaxPixelDelay)) +GEN_THUNKS_RET(BOOL, wglQueryMaxSwapGroupsNV, (HDC hDC, GLuint * maxGroups, GLuint * maxBarriers), (hDC, maxGroups, maxBarriers)) +GEN_THUNKS_RET(BOOL, wglQueryPbufferARB, (HPBUFFERARB hPbuffer, int iAttribute, int * piValue), (hPbuffer, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglQueryPbufferEXT, (HPBUFFEREXT hPbuffer, int iAttribute, int * piValue), (hPbuffer, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglQuerySwapGroupNV, (HDC hDC, GLuint * group, GLuint * barrier), (hDC, group, barrier)) +GEN_THUNKS_RET(BOOL, wglQueryVideoCaptureDeviceNV, (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int * piValue), (hDc, hDevice, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglRealizeLayerPalette, (HDC hdc, int iLayerPlane, BOOL bRealize), (hdc, iLayerPlane, bRealize)) +GEN_THUNKS_RET(BOOL, wglReleaseImageBufferEventsI3D, (HDC hDC, const LPVOID * pAddress, UINT count), (hDC, pAddress, count)) +GEN_THUNKS_RET(int, wglReleasePbufferDCARB, (HPBUFFERARB hPbuffer, HDC hDC), (hPbuffer, hDC)) +GEN_THUNKS_RET(int, wglReleasePbufferDCEXT, (HPBUFFEREXT hPbuffer, HDC hDC), (hPbuffer, hDC)) +GEN_THUNKS_RET(BOOL, wglReleaseTexImageARB, (HPBUFFERARB hPbuffer, int iBuffer), (hPbuffer, iBuffer)) +GEN_THUNKS_RET(BOOL, wglReleaseVideoCaptureDeviceNV, (HDC hDc, HVIDEOINPUTDEVICENV hDevice), (hDc, hDevice)) +GEN_THUNKS_RET(BOOL, wglReleaseVideoDeviceNV, (HPVIDEODEV hVideoDevice), (hVideoDevice)) +GEN_THUNKS_RET(BOOL, wglReleaseVideoImageNV, (HPBUFFERARB hPbuffer, int iVideoBuffer), (hPbuffer, iVideoBuffer)) +GEN_THUNKS_RET(BOOL, wglResetFrameCountNV, (HDC hDC), (hDC)) +GEN_THUNKS_RET(BOOL, wglRestoreBufferRegionARB, (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc), (hRegion, x, y, width, height, xSrc, ySrc)) +GEN_THUNKS_RET(BOOL, wglSaveBufferRegionARB, (HANDLE hRegion, int x, int y, int width, int height), (hRegion, x, y, width, height)) +GEN_THUNKS_RET(BOOL, wglSendPbufferToVideoNV, (HPBUFFERARB hPbuffer, int iBufferType, unsigned long * pulCounterPbuffer, BOOL bBlock), (hPbuffer, iBufferType, pulCounterPbuffer, bBlock)) +GEN_THUNKS_RET(BOOL, wglSetDigitalVideoParametersI3D, (HDC hDC, int iAttribute, const int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(BOOL, wglSetGammaTableI3D, (HDC hDC, int iEntries, const USHORT * puRed, const USHORT * puGreen, const USHORT * puBlue), (hDC, iEntries, puRed, puGreen, puBlue)) +GEN_THUNKS_RET(BOOL, wglSetGammaTableParametersI3D, (HDC hDC, int iAttribute, const int * piValue), (hDC, iAttribute, piValue)) +GEN_THUNKS_RET(int, wglSetLayerPaletteEntries, (HDC hdc, int iLayerPlane, int iStart, int cEntries, const COLORREF * pcr), (hdc, iLayerPlane, iStart, cEntries, pcr)) +GEN_THUNKS_RET(BOOL, wglSetPbufferAttribARB, (HPBUFFERARB hPbuffer, const int * piAttribList), (hPbuffer, piAttribList)) +GEN_THUNKS_RET(BOOL, wglSetStereoEmitterState3DL, (HDC hDC, UINT uState), (hDC, uState)) +GEN_THUNKS_RET(BOOL, wglShareLists, (HGLRC hrcSrvShare, HGLRC hrcSrvSource), (hrcSrvShare, hrcSrvSource)) +GEN_THUNKS_RET(INT64, wglSwapBuffersMscOML, (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder), (hdc, target_msc, divisor, remainder)) +GEN_THUNKS_RET(BOOL, wglSwapIntervalEXT, (int interval), (interval)) +GEN_THUNKS_RET(BOOL, wglSwapLayerBuffers, (HDC hdc, UINT fuFlags), (hdc, fuFlags)) +GEN_THUNKS_RET(INT64, wglSwapLayerBuffersMscOML, (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder), (hdc, fuPlanes, target_msc, divisor, remainder)) +GEN_THUNKS_RET(BOOL, wglUseFontBitmapsA, (HDC hDC, DWORD first, DWORD count, DWORD listBase), (hDC, first, count, listBase)) +GEN_THUNKS_RET(BOOL, wglUseFontBitmapsW, (HDC hDC, DWORD first, DWORD count, DWORD listBase), (hDC, first, count, listBase)) +GEN_THUNKS_RET(BOOL, wglUseFontOutlines, (HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf), (hDC, first, count, listBase, deviation, extrusion, format, lpgmf)) +GEN_THUNKS_RET(BOOL, wglUseFontOutlinesA, (HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf), (hDC, first, count, listBase, deviation, extrusion, format, lpgmf)) +GEN_THUNKS_RET(BOOL, wglUseFontOutlinesW, (HDC hDC, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf), (hDC, first, count, listBase, deviation, extrusion, format, lpgmf)) +GEN_THUNKS_RET(BOOL, wglWaitForMscOML, (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 * ust, INT64 * msc, INT64 * sbc), (hdc, target_msc, divisor, remainder, ust, msc, sbc)) +GEN_THUNKS_RET(BOOL, wglWaitForSbcOML, (HDC hdc, INT64 target_sbc, INT64 * ust, INT64 * msc, INT64 * sbc), (hdc, target_sbc, ust, msc, sbc)) + +#if USING_DISPATCH_TABLE +static struct dispatch_table resolver_table = { + epoxy_wglAllocateMemoryNV_dispatch_table_rewrite_ptr, /* wglAllocateMemoryNV */ + epoxy_wglAssociateImageBufferEventsI3D_dispatch_table_rewrite_ptr, /* wglAssociateImageBufferEventsI3D */ + epoxy_wglBeginFrameTrackingI3D_dispatch_table_rewrite_ptr, /* wglBeginFrameTrackingI3D */ + epoxy_wglBindDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglBindDisplayColorTableEXT */ + epoxy_wglBindSwapBarrierNV_dispatch_table_rewrite_ptr, /* wglBindSwapBarrierNV */ + epoxy_wglBindTexImageARB_dispatch_table_rewrite_ptr, /* wglBindTexImageARB */ + epoxy_wglBindVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglBindVideoCaptureDeviceNV */ + epoxy_wglBindVideoDeviceNV_dispatch_table_rewrite_ptr, /* wglBindVideoDeviceNV */ + epoxy_wglBindVideoImageNV_dispatch_table_rewrite_ptr, /* wglBindVideoImageNV */ + epoxy_wglBlitContextFramebufferAMD_dispatch_table_rewrite_ptr, /* wglBlitContextFramebufferAMD */ + epoxy_wglChoosePixelFormatARB_dispatch_table_rewrite_ptr, /* wglChoosePixelFormatARB */ + epoxy_wglChoosePixelFormatEXT_dispatch_table_rewrite_ptr, /* wglChoosePixelFormatEXT */ + epoxy_wglCopyContext_dispatch_table_rewrite_ptr, /* wglCopyContext */ + epoxy_wglCopyImageSubDataNV_dispatch_table_rewrite_ptr, /* wglCopyImageSubDataNV */ + epoxy_wglCreateAffinityDCNV_dispatch_table_rewrite_ptr, /* wglCreateAffinityDCNV */ + epoxy_wglCreateAssociatedContextAMD_dispatch_table_rewrite_ptr, /* wglCreateAssociatedContextAMD */ + epoxy_wglCreateAssociatedContextAttribsAMD_dispatch_table_rewrite_ptr, /* wglCreateAssociatedContextAttribsAMD */ + epoxy_wglCreateBufferRegionARB_dispatch_table_rewrite_ptr, /* wglCreateBufferRegionARB */ + epoxy_wglCreateContext_dispatch_table_rewrite_ptr, /* wglCreateContext */ + epoxy_wglCreateContextAttribsARB_dispatch_table_rewrite_ptr, /* wglCreateContextAttribsARB */ + epoxy_wglCreateDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglCreateDisplayColorTableEXT */ + epoxy_wglCreateImageBufferI3D_dispatch_table_rewrite_ptr, /* wglCreateImageBufferI3D */ + epoxy_wglCreateLayerContext_dispatch_table_rewrite_ptr, /* wglCreateLayerContext */ + epoxy_wglCreatePbufferARB_dispatch_table_rewrite_ptr, /* wglCreatePbufferARB */ + epoxy_wglCreatePbufferEXT_dispatch_table_rewrite_ptr, /* wglCreatePbufferEXT */ + epoxy_wglDXCloseDeviceNV_dispatch_table_rewrite_ptr, /* wglDXCloseDeviceNV */ + epoxy_wglDXLockObjectsNV_dispatch_table_rewrite_ptr, /* wglDXLockObjectsNV */ + epoxy_wglDXObjectAccessNV_dispatch_table_rewrite_ptr, /* wglDXObjectAccessNV */ + epoxy_wglDXOpenDeviceNV_dispatch_table_rewrite_ptr, /* wglDXOpenDeviceNV */ + epoxy_wglDXRegisterObjectNV_dispatch_table_rewrite_ptr, /* wglDXRegisterObjectNV */ + epoxy_wglDXSetResourceShareHandleNV_dispatch_table_rewrite_ptr, /* wglDXSetResourceShareHandleNV */ + epoxy_wglDXUnlockObjectsNV_dispatch_table_rewrite_ptr, /* wglDXUnlockObjectsNV */ + epoxy_wglDXUnregisterObjectNV_dispatch_table_rewrite_ptr, /* wglDXUnregisterObjectNV */ + epoxy_wglDelayBeforeSwapNV_dispatch_table_rewrite_ptr, /* wglDelayBeforeSwapNV */ + epoxy_wglDeleteAssociatedContextAMD_dispatch_table_rewrite_ptr, /* wglDeleteAssociatedContextAMD */ + epoxy_wglDeleteBufferRegionARB_dispatch_table_rewrite_ptr, /* wglDeleteBufferRegionARB */ + epoxy_wglDeleteContext_dispatch_table_rewrite_ptr, /* wglDeleteContext */ + epoxy_wglDeleteDCNV_dispatch_table_rewrite_ptr, /* wglDeleteDCNV */ + epoxy_wglDescribeLayerPlane_dispatch_table_rewrite_ptr, /* wglDescribeLayerPlane */ + epoxy_wglDestroyDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglDestroyDisplayColorTableEXT */ + epoxy_wglDestroyImageBufferI3D_dispatch_table_rewrite_ptr, /* wglDestroyImageBufferI3D */ + epoxy_wglDestroyPbufferARB_dispatch_table_rewrite_ptr, /* wglDestroyPbufferARB */ + epoxy_wglDestroyPbufferEXT_dispatch_table_rewrite_ptr, /* wglDestroyPbufferEXT */ + epoxy_wglDisableFrameLockI3D_dispatch_table_rewrite_ptr, /* wglDisableFrameLockI3D */ + epoxy_wglDisableGenlockI3D_dispatch_table_rewrite_ptr, /* wglDisableGenlockI3D */ + epoxy_wglEnableFrameLockI3D_dispatch_table_rewrite_ptr, /* wglEnableFrameLockI3D */ + epoxy_wglEnableGenlockI3D_dispatch_table_rewrite_ptr, /* wglEnableGenlockI3D */ + epoxy_wglEndFrameTrackingI3D_dispatch_table_rewrite_ptr, /* wglEndFrameTrackingI3D */ + epoxy_wglEnumGpuDevicesNV_dispatch_table_rewrite_ptr, /* wglEnumGpuDevicesNV */ + epoxy_wglEnumGpusFromAffinityDCNV_dispatch_table_rewrite_ptr, /* wglEnumGpusFromAffinityDCNV */ + epoxy_wglEnumGpusNV_dispatch_table_rewrite_ptr, /* wglEnumGpusNV */ + epoxy_wglEnumerateVideoCaptureDevicesNV_dispatch_table_rewrite_ptr, /* wglEnumerateVideoCaptureDevicesNV */ + epoxy_wglEnumerateVideoDevicesNV_dispatch_table_rewrite_ptr, /* wglEnumerateVideoDevicesNV */ + epoxy_wglFreeMemoryNV_dispatch_table_rewrite_ptr, /* wglFreeMemoryNV */ + epoxy_wglGenlockSampleRateI3D_dispatch_table_rewrite_ptr, /* wglGenlockSampleRateI3D */ + epoxy_wglGenlockSourceDelayI3D_dispatch_table_rewrite_ptr, /* wglGenlockSourceDelayI3D */ + epoxy_wglGenlockSourceEdgeI3D_dispatch_table_rewrite_ptr, /* wglGenlockSourceEdgeI3D */ + epoxy_wglGenlockSourceI3D_dispatch_table_rewrite_ptr, /* wglGenlockSourceI3D */ + epoxy_wglGetContextGPUIDAMD_dispatch_table_rewrite_ptr, /* wglGetContextGPUIDAMD */ + epoxy_wglGetCurrentAssociatedContextAMD_dispatch_table_rewrite_ptr, /* wglGetCurrentAssociatedContextAMD */ + epoxy_wglGetCurrentContext_dispatch_table_rewrite_ptr, /* wglGetCurrentContext */ + epoxy_wglGetCurrentDC_dispatch_table_rewrite_ptr, /* wglGetCurrentDC */ + epoxy_wglGetCurrentReadDCARB_dispatch_table_rewrite_ptr, /* wglGetCurrentReadDCARB */ + epoxy_wglGetCurrentReadDCEXT_dispatch_table_rewrite_ptr, /* wglGetCurrentReadDCEXT */ + epoxy_wglGetDefaultProcAddress_dispatch_table_rewrite_ptr, /* wglGetDefaultProcAddress */ + epoxy_wglGetDigitalVideoParametersI3D_dispatch_table_rewrite_ptr, /* wglGetDigitalVideoParametersI3D */ + epoxy_wglGetExtensionsStringARB_dispatch_table_rewrite_ptr, /* wglGetExtensionsStringARB */ + epoxy_wglGetExtensionsStringEXT_dispatch_table_rewrite_ptr, /* wglGetExtensionsStringEXT */ + epoxy_wglGetFrameUsageI3D_dispatch_table_rewrite_ptr, /* wglGetFrameUsageI3D */ + epoxy_wglGetGPUIDsAMD_dispatch_table_rewrite_ptr, /* wglGetGPUIDsAMD */ + epoxy_wglGetGPUInfoAMD_dispatch_table_rewrite_ptr, /* wglGetGPUInfoAMD */ + epoxy_wglGetGammaTableI3D_dispatch_table_rewrite_ptr, /* wglGetGammaTableI3D */ + epoxy_wglGetGammaTableParametersI3D_dispatch_table_rewrite_ptr, /* wglGetGammaTableParametersI3D */ + epoxy_wglGetGenlockSampleRateI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSampleRateI3D */ + epoxy_wglGetGenlockSourceDelayI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSourceDelayI3D */ + epoxy_wglGetGenlockSourceEdgeI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSourceEdgeI3D */ + epoxy_wglGetGenlockSourceI3D_dispatch_table_rewrite_ptr, /* wglGetGenlockSourceI3D */ + epoxy_wglGetLayerPaletteEntries_dispatch_table_rewrite_ptr, /* wglGetLayerPaletteEntries */ + epoxy_wglGetMscRateOML_dispatch_table_rewrite_ptr, /* wglGetMscRateOML */ + epoxy_wglGetPbufferDCARB_dispatch_table_rewrite_ptr, /* wglGetPbufferDCARB */ + epoxy_wglGetPbufferDCEXT_dispatch_table_rewrite_ptr, /* wglGetPbufferDCEXT */ + epoxy_wglGetPixelFormatAttribfvARB_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribfvARB */ + epoxy_wglGetPixelFormatAttribfvEXT_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribfvEXT */ + epoxy_wglGetPixelFormatAttribivARB_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribivARB */ + epoxy_wglGetPixelFormatAttribivEXT_dispatch_table_rewrite_ptr, /* wglGetPixelFormatAttribivEXT */ + epoxy_wglGetProcAddress_dispatch_table_rewrite_ptr, /* wglGetProcAddress */ + epoxy_wglGetSwapIntervalEXT_dispatch_table_rewrite_ptr, /* wglGetSwapIntervalEXT */ + epoxy_wglGetSyncValuesOML_dispatch_table_rewrite_ptr, /* wglGetSyncValuesOML */ + epoxy_wglGetVideoDeviceNV_dispatch_table_rewrite_ptr, /* wglGetVideoDeviceNV */ + epoxy_wglGetVideoInfoNV_dispatch_table_rewrite_ptr, /* wglGetVideoInfoNV */ + epoxy_wglIsEnabledFrameLockI3D_dispatch_table_rewrite_ptr, /* wglIsEnabledFrameLockI3D */ + epoxy_wglIsEnabledGenlockI3D_dispatch_table_rewrite_ptr, /* wglIsEnabledGenlockI3D */ + epoxy_wglJoinSwapGroupNV_dispatch_table_rewrite_ptr, /* wglJoinSwapGroupNV */ + epoxy_wglLoadDisplayColorTableEXT_dispatch_table_rewrite_ptr, /* wglLoadDisplayColorTableEXT */ + epoxy_wglLockVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglLockVideoCaptureDeviceNV */ + epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeAssociatedContextCurrentAMD_unwrapped */ + epoxy_wglMakeContextCurrentARB_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeContextCurrentARB_unwrapped */ + epoxy_wglMakeContextCurrentEXT_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeContextCurrentEXT_unwrapped */ + epoxy_wglMakeCurrent_unwrapped_dispatch_table_rewrite_ptr, /* wglMakeCurrent_unwrapped */ + epoxy_wglQueryCurrentContextNV_dispatch_table_rewrite_ptr, /* wglQueryCurrentContextNV */ + epoxy_wglQueryFrameCountNV_dispatch_table_rewrite_ptr, /* wglQueryFrameCountNV */ + epoxy_wglQueryFrameLockMasterI3D_dispatch_table_rewrite_ptr, /* wglQueryFrameLockMasterI3D */ + epoxy_wglQueryFrameTrackingI3D_dispatch_table_rewrite_ptr, /* wglQueryFrameTrackingI3D */ + epoxy_wglQueryGenlockMaxSourceDelayI3D_dispatch_table_rewrite_ptr, /* wglQueryGenlockMaxSourceDelayI3D */ + epoxy_wglQueryMaxSwapGroupsNV_dispatch_table_rewrite_ptr, /* wglQueryMaxSwapGroupsNV */ + epoxy_wglQueryPbufferARB_dispatch_table_rewrite_ptr, /* wglQueryPbufferARB */ + epoxy_wglQueryPbufferEXT_dispatch_table_rewrite_ptr, /* wglQueryPbufferEXT */ + epoxy_wglQuerySwapGroupNV_dispatch_table_rewrite_ptr, /* wglQuerySwapGroupNV */ + epoxy_wglQueryVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglQueryVideoCaptureDeviceNV */ + epoxy_wglRealizeLayerPalette_dispatch_table_rewrite_ptr, /* wglRealizeLayerPalette */ + epoxy_wglReleaseImageBufferEventsI3D_dispatch_table_rewrite_ptr, /* wglReleaseImageBufferEventsI3D */ + epoxy_wglReleasePbufferDCARB_dispatch_table_rewrite_ptr, /* wglReleasePbufferDCARB */ + epoxy_wglReleasePbufferDCEXT_dispatch_table_rewrite_ptr, /* wglReleasePbufferDCEXT */ + epoxy_wglReleaseTexImageARB_dispatch_table_rewrite_ptr, /* wglReleaseTexImageARB */ + epoxy_wglReleaseVideoCaptureDeviceNV_dispatch_table_rewrite_ptr, /* wglReleaseVideoCaptureDeviceNV */ + epoxy_wglReleaseVideoDeviceNV_dispatch_table_rewrite_ptr, /* wglReleaseVideoDeviceNV */ + epoxy_wglReleaseVideoImageNV_dispatch_table_rewrite_ptr, /* wglReleaseVideoImageNV */ + epoxy_wglResetFrameCountNV_dispatch_table_rewrite_ptr, /* wglResetFrameCountNV */ + epoxy_wglRestoreBufferRegionARB_dispatch_table_rewrite_ptr, /* wglRestoreBufferRegionARB */ + epoxy_wglSaveBufferRegionARB_dispatch_table_rewrite_ptr, /* wglSaveBufferRegionARB */ + epoxy_wglSendPbufferToVideoNV_dispatch_table_rewrite_ptr, /* wglSendPbufferToVideoNV */ + epoxy_wglSetDigitalVideoParametersI3D_dispatch_table_rewrite_ptr, /* wglSetDigitalVideoParametersI3D */ + epoxy_wglSetGammaTableI3D_dispatch_table_rewrite_ptr, /* wglSetGammaTableI3D */ + epoxy_wglSetGammaTableParametersI3D_dispatch_table_rewrite_ptr, /* wglSetGammaTableParametersI3D */ + epoxy_wglSetLayerPaletteEntries_dispatch_table_rewrite_ptr, /* wglSetLayerPaletteEntries */ + epoxy_wglSetPbufferAttribARB_dispatch_table_rewrite_ptr, /* wglSetPbufferAttribARB */ + epoxy_wglSetStereoEmitterState3DL_dispatch_table_rewrite_ptr, /* wglSetStereoEmitterState3DL */ + epoxy_wglShareLists_dispatch_table_rewrite_ptr, /* wglShareLists */ + epoxy_wglSwapBuffersMscOML_dispatch_table_rewrite_ptr, /* wglSwapBuffersMscOML */ + epoxy_wglSwapIntervalEXT_dispatch_table_rewrite_ptr, /* wglSwapIntervalEXT */ + epoxy_wglSwapLayerBuffers_dispatch_table_rewrite_ptr, /* wglSwapLayerBuffers */ + epoxy_wglSwapLayerBuffersMscOML_dispatch_table_rewrite_ptr, /* wglSwapLayerBuffersMscOML */ + epoxy_wglUseFontBitmapsA_dispatch_table_rewrite_ptr, /* wglUseFontBitmapsA */ + epoxy_wglUseFontBitmapsW_dispatch_table_rewrite_ptr, /* wglUseFontBitmapsW */ + epoxy_wglUseFontOutlines_dispatch_table_rewrite_ptr, /* wglUseFontOutlines */ + epoxy_wglUseFontOutlinesA_dispatch_table_rewrite_ptr, /* wglUseFontOutlinesA */ + epoxy_wglUseFontOutlinesW_dispatch_table_rewrite_ptr, /* wglUseFontOutlinesW */ + epoxy_wglWaitForMscOML_dispatch_table_rewrite_ptr, /* wglWaitForMscOML */ + epoxy_wglWaitForSbcOML_dispatch_table_rewrite_ptr, /* wglWaitForSbcOML */ +}; + +uint32_t wgl_tls_index; +uint32_t wgl_tls_size = sizeof(struct dispatch_table); + +static EPOXY_INLINE struct dispatch_table * +get_dispatch_table(void) +{ + return TlsGetValue(wgl_tls_index); +} + +void +wgl_init_dispatch_table(void) +{ + struct dispatch_table *dispatch_table = get_dispatch_table(); + memcpy(dispatch_table, &resolver_table, sizeof(resolver_table)); +} + +void +wgl_switch_to_dispatch_table(void) +{ + epoxy_wglAllocateMemoryNV = epoxy_wglAllocateMemoryNV_dispatch_table_thunk; + epoxy_wglAssociateImageBufferEventsI3D = epoxy_wglAssociateImageBufferEventsI3D_dispatch_table_thunk; + epoxy_wglBeginFrameTrackingI3D = epoxy_wglBeginFrameTrackingI3D_dispatch_table_thunk; + epoxy_wglBindDisplayColorTableEXT = epoxy_wglBindDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglBindSwapBarrierNV = epoxy_wglBindSwapBarrierNV_dispatch_table_thunk; + epoxy_wglBindTexImageARB = epoxy_wglBindTexImageARB_dispatch_table_thunk; + epoxy_wglBindVideoCaptureDeviceNV = epoxy_wglBindVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglBindVideoDeviceNV = epoxy_wglBindVideoDeviceNV_dispatch_table_thunk; + epoxy_wglBindVideoImageNV = epoxy_wglBindVideoImageNV_dispatch_table_thunk; + epoxy_wglBlitContextFramebufferAMD = epoxy_wglBlitContextFramebufferAMD_dispatch_table_thunk; + epoxy_wglChoosePixelFormatARB = epoxy_wglChoosePixelFormatARB_dispatch_table_thunk; + epoxy_wglChoosePixelFormatEXT = epoxy_wglChoosePixelFormatEXT_dispatch_table_thunk; + epoxy_wglCopyContext = epoxy_wglCopyContext_dispatch_table_thunk; + epoxy_wglCopyImageSubDataNV = epoxy_wglCopyImageSubDataNV_dispatch_table_thunk; + epoxy_wglCreateAffinityDCNV = epoxy_wglCreateAffinityDCNV_dispatch_table_thunk; + epoxy_wglCreateAssociatedContextAMD = epoxy_wglCreateAssociatedContextAMD_dispatch_table_thunk; + epoxy_wglCreateAssociatedContextAttribsAMD = epoxy_wglCreateAssociatedContextAttribsAMD_dispatch_table_thunk; + epoxy_wglCreateBufferRegionARB = epoxy_wglCreateBufferRegionARB_dispatch_table_thunk; + epoxy_wglCreateContext = epoxy_wglCreateContext_dispatch_table_thunk; + epoxy_wglCreateContextAttribsARB = epoxy_wglCreateContextAttribsARB_dispatch_table_thunk; + epoxy_wglCreateDisplayColorTableEXT = epoxy_wglCreateDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglCreateImageBufferI3D = epoxy_wglCreateImageBufferI3D_dispatch_table_thunk; + epoxy_wglCreateLayerContext = epoxy_wglCreateLayerContext_dispatch_table_thunk; + epoxy_wglCreatePbufferARB = epoxy_wglCreatePbufferARB_dispatch_table_thunk; + epoxy_wglCreatePbufferEXT = epoxy_wglCreatePbufferEXT_dispatch_table_thunk; + epoxy_wglDXCloseDeviceNV = epoxy_wglDXCloseDeviceNV_dispatch_table_thunk; + epoxy_wglDXLockObjectsNV = epoxy_wglDXLockObjectsNV_dispatch_table_thunk; + epoxy_wglDXObjectAccessNV = epoxy_wglDXObjectAccessNV_dispatch_table_thunk; + epoxy_wglDXOpenDeviceNV = epoxy_wglDXOpenDeviceNV_dispatch_table_thunk; + epoxy_wglDXRegisterObjectNV = epoxy_wglDXRegisterObjectNV_dispatch_table_thunk; + epoxy_wglDXSetResourceShareHandleNV = epoxy_wglDXSetResourceShareHandleNV_dispatch_table_thunk; + epoxy_wglDXUnlockObjectsNV = epoxy_wglDXUnlockObjectsNV_dispatch_table_thunk; + epoxy_wglDXUnregisterObjectNV = epoxy_wglDXUnregisterObjectNV_dispatch_table_thunk; + epoxy_wglDelayBeforeSwapNV = epoxy_wglDelayBeforeSwapNV_dispatch_table_thunk; + epoxy_wglDeleteAssociatedContextAMD = epoxy_wglDeleteAssociatedContextAMD_dispatch_table_thunk; + epoxy_wglDeleteBufferRegionARB = epoxy_wglDeleteBufferRegionARB_dispatch_table_thunk; + epoxy_wglDeleteContext = epoxy_wglDeleteContext_dispatch_table_thunk; + epoxy_wglDeleteDCNV = epoxy_wglDeleteDCNV_dispatch_table_thunk; + epoxy_wglDescribeLayerPlane = epoxy_wglDescribeLayerPlane_dispatch_table_thunk; + epoxy_wglDestroyDisplayColorTableEXT = epoxy_wglDestroyDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglDestroyImageBufferI3D = epoxy_wglDestroyImageBufferI3D_dispatch_table_thunk; + epoxy_wglDestroyPbufferARB = epoxy_wglDestroyPbufferARB_dispatch_table_thunk; + epoxy_wglDestroyPbufferEXT = epoxy_wglDestroyPbufferEXT_dispatch_table_thunk; + epoxy_wglDisableFrameLockI3D = epoxy_wglDisableFrameLockI3D_dispatch_table_thunk; + epoxy_wglDisableGenlockI3D = epoxy_wglDisableGenlockI3D_dispatch_table_thunk; + epoxy_wglEnableFrameLockI3D = epoxy_wglEnableFrameLockI3D_dispatch_table_thunk; + epoxy_wglEnableGenlockI3D = epoxy_wglEnableGenlockI3D_dispatch_table_thunk; + epoxy_wglEndFrameTrackingI3D = epoxy_wglEndFrameTrackingI3D_dispatch_table_thunk; + epoxy_wglEnumGpuDevicesNV = epoxy_wglEnumGpuDevicesNV_dispatch_table_thunk; + epoxy_wglEnumGpusFromAffinityDCNV = epoxy_wglEnumGpusFromAffinityDCNV_dispatch_table_thunk; + epoxy_wglEnumGpusNV = epoxy_wglEnumGpusNV_dispatch_table_thunk; + epoxy_wglEnumerateVideoCaptureDevicesNV = epoxy_wglEnumerateVideoCaptureDevicesNV_dispatch_table_thunk; + epoxy_wglEnumerateVideoDevicesNV = epoxy_wglEnumerateVideoDevicesNV_dispatch_table_thunk; + epoxy_wglFreeMemoryNV = epoxy_wglFreeMemoryNV_dispatch_table_thunk; + epoxy_wglGenlockSampleRateI3D = epoxy_wglGenlockSampleRateI3D_dispatch_table_thunk; + epoxy_wglGenlockSourceDelayI3D = epoxy_wglGenlockSourceDelayI3D_dispatch_table_thunk; + epoxy_wglGenlockSourceEdgeI3D = epoxy_wglGenlockSourceEdgeI3D_dispatch_table_thunk; + epoxy_wglGenlockSourceI3D = epoxy_wglGenlockSourceI3D_dispatch_table_thunk; + epoxy_wglGetContextGPUIDAMD = epoxy_wglGetContextGPUIDAMD_dispatch_table_thunk; + epoxy_wglGetCurrentAssociatedContextAMD = epoxy_wglGetCurrentAssociatedContextAMD_dispatch_table_thunk; + epoxy_wglGetCurrentContext = epoxy_wglGetCurrentContext_dispatch_table_thunk; + epoxy_wglGetCurrentDC = epoxy_wglGetCurrentDC_dispatch_table_thunk; + epoxy_wglGetCurrentReadDCARB = epoxy_wglGetCurrentReadDCARB_dispatch_table_thunk; + epoxy_wglGetCurrentReadDCEXT = epoxy_wglGetCurrentReadDCEXT_dispatch_table_thunk; + epoxy_wglGetDefaultProcAddress = epoxy_wglGetDefaultProcAddress_dispatch_table_thunk; + epoxy_wglGetDigitalVideoParametersI3D = epoxy_wglGetDigitalVideoParametersI3D_dispatch_table_thunk; + epoxy_wglGetExtensionsStringARB = epoxy_wglGetExtensionsStringARB_dispatch_table_thunk; + epoxy_wglGetExtensionsStringEXT = epoxy_wglGetExtensionsStringEXT_dispatch_table_thunk; + epoxy_wglGetFrameUsageI3D = epoxy_wglGetFrameUsageI3D_dispatch_table_thunk; + epoxy_wglGetGPUIDsAMD = epoxy_wglGetGPUIDsAMD_dispatch_table_thunk; + epoxy_wglGetGPUInfoAMD = epoxy_wglGetGPUInfoAMD_dispatch_table_thunk; + epoxy_wglGetGammaTableI3D = epoxy_wglGetGammaTableI3D_dispatch_table_thunk; + epoxy_wglGetGammaTableParametersI3D = epoxy_wglGetGammaTableParametersI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSampleRateI3D = epoxy_wglGetGenlockSampleRateI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSourceDelayI3D = epoxy_wglGetGenlockSourceDelayI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSourceEdgeI3D = epoxy_wglGetGenlockSourceEdgeI3D_dispatch_table_thunk; + epoxy_wglGetGenlockSourceI3D = epoxy_wglGetGenlockSourceI3D_dispatch_table_thunk; + epoxy_wglGetLayerPaletteEntries = epoxy_wglGetLayerPaletteEntries_dispatch_table_thunk; + epoxy_wglGetMscRateOML = epoxy_wglGetMscRateOML_dispatch_table_thunk; + epoxy_wglGetPbufferDCARB = epoxy_wglGetPbufferDCARB_dispatch_table_thunk; + epoxy_wglGetPbufferDCEXT = epoxy_wglGetPbufferDCEXT_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribfvARB = epoxy_wglGetPixelFormatAttribfvARB_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribfvEXT = epoxy_wglGetPixelFormatAttribfvEXT_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribivARB = epoxy_wglGetPixelFormatAttribivARB_dispatch_table_thunk; + epoxy_wglGetPixelFormatAttribivEXT = epoxy_wglGetPixelFormatAttribivEXT_dispatch_table_thunk; + epoxy_wglGetProcAddress = epoxy_wglGetProcAddress_dispatch_table_thunk; + epoxy_wglGetSwapIntervalEXT = epoxy_wglGetSwapIntervalEXT_dispatch_table_thunk; + epoxy_wglGetSyncValuesOML = epoxy_wglGetSyncValuesOML_dispatch_table_thunk; + epoxy_wglGetVideoDeviceNV = epoxy_wglGetVideoDeviceNV_dispatch_table_thunk; + epoxy_wglGetVideoInfoNV = epoxy_wglGetVideoInfoNV_dispatch_table_thunk; + epoxy_wglIsEnabledFrameLockI3D = epoxy_wglIsEnabledFrameLockI3D_dispatch_table_thunk; + epoxy_wglIsEnabledGenlockI3D = epoxy_wglIsEnabledGenlockI3D_dispatch_table_thunk; + epoxy_wglJoinSwapGroupNV = epoxy_wglJoinSwapGroupNV_dispatch_table_thunk; + epoxy_wglLoadDisplayColorTableEXT = epoxy_wglLoadDisplayColorTableEXT_dispatch_table_thunk; + epoxy_wglLockVideoCaptureDeviceNV = epoxy_wglLockVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped = epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_dispatch_table_thunk; + epoxy_wglMakeContextCurrentARB_unwrapped = epoxy_wglMakeContextCurrentARB_unwrapped_dispatch_table_thunk; + epoxy_wglMakeContextCurrentEXT_unwrapped = epoxy_wglMakeContextCurrentEXT_unwrapped_dispatch_table_thunk; + epoxy_wglMakeCurrent_unwrapped = epoxy_wglMakeCurrent_unwrapped_dispatch_table_thunk; + epoxy_wglQueryCurrentContextNV = epoxy_wglQueryCurrentContextNV_dispatch_table_thunk; + epoxy_wglQueryFrameCountNV = epoxy_wglQueryFrameCountNV_dispatch_table_thunk; + epoxy_wglQueryFrameLockMasterI3D = epoxy_wglQueryFrameLockMasterI3D_dispatch_table_thunk; + epoxy_wglQueryFrameTrackingI3D = epoxy_wglQueryFrameTrackingI3D_dispatch_table_thunk; + epoxy_wglQueryGenlockMaxSourceDelayI3D = epoxy_wglQueryGenlockMaxSourceDelayI3D_dispatch_table_thunk; + epoxy_wglQueryMaxSwapGroupsNV = epoxy_wglQueryMaxSwapGroupsNV_dispatch_table_thunk; + epoxy_wglQueryPbufferARB = epoxy_wglQueryPbufferARB_dispatch_table_thunk; + epoxy_wglQueryPbufferEXT = epoxy_wglQueryPbufferEXT_dispatch_table_thunk; + epoxy_wglQuerySwapGroupNV = epoxy_wglQuerySwapGroupNV_dispatch_table_thunk; + epoxy_wglQueryVideoCaptureDeviceNV = epoxy_wglQueryVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglRealizeLayerPalette = epoxy_wglRealizeLayerPalette_dispatch_table_thunk; + epoxy_wglReleaseImageBufferEventsI3D = epoxy_wglReleaseImageBufferEventsI3D_dispatch_table_thunk; + epoxy_wglReleasePbufferDCARB = epoxy_wglReleasePbufferDCARB_dispatch_table_thunk; + epoxy_wglReleasePbufferDCEXT = epoxy_wglReleasePbufferDCEXT_dispatch_table_thunk; + epoxy_wglReleaseTexImageARB = epoxy_wglReleaseTexImageARB_dispatch_table_thunk; + epoxy_wglReleaseVideoCaptureDeviceNV = epoxy_wglReleaseVideoCaptureDeviceNV_dispatch_table_thunk; + epoxy_wglReleaseVideoDeviceNV = epoxy_wglReleaseVideoDeviceNV_dispatch_table_thunk; + epoxy_wglReleaseVideoImageNV = epoxy_wglReleaseVideoImageNV_dispatch_table_thunk; + epoxy_wglResetFrameCountNV = epoxy_wglResetFrameCountNV_dispatch_table_thunk; + epoxy_wglRestoreBufferRegionARB = epoxy_wglRestoreBufferRegionARB_dispatch_table_thunk; + epoxy_wglSaveBufferRegionARB = epoxy_wglSaveBufferRegionARB_dispatch_table_thunk; + epoxy_wglSendPbufferToVideoNV = epoxy_wglSendPbufferToVideoNV_dispatch_table_thunk; + epoxy_wglSetDigitalVideoParametersI3D = epoxy_wglSetDigitalVideoParametersI3D_dispatch_table_thunk; + epoxy_wglSetGammaTableI3D = epoxy_wglSetGammaTableI3D_dispatch_table_thunk; + epoxy_wglSetGammaTableParametersI3D = epoxy_wglSetGammaTableParametersI3D_dispatch_table_thunk; + epoxy_wglSetLayerPaletteEntries = epoxy_wglSetLayerPaletteEntries_dispatch_table_thunk; + epoxy_wglSetPbufferAttribARB = epoxy_wglSetPbufferAttribARB_dispatch_table_thunk; + epoxy_wglSetStereoEmitterState3DL = epoxy_wglSetStereoEmitterState3DL_dispatch_table_thunk; + epoxy_wglShareLists = epoxy_wglShareLists_dispatch_table_thunk; + epoxy_wglSwapBuffersMscOML = epoxy_wglSwapBuffersMscOML_dispatch_table_thunk; + epoxy_wglSwapIntervalEXT = epoxy_wglSwapIntervalEXT_dispatch_table_thunk; + epoxy_wglSwapLayerBuffers = epoxy_wglSwapLayerBuffers_dispatch_table_thunk; + epoxy_wglSwapLayerBuffersMscOML = epoxy_wglSwapLayerBuffersMscOML_dispatch_table_thunk; + epoxy_wglUseFontBitmapsA = epoxy_wglUseFontBitmapsA_dispatch_table_thunk; + epoxy_wglUseFontBitmapsW = epoxy_wglUseFontBitmapsW_dispatch_table_thunk; + epoxy_wglUseFontOutlines = epoxy_wglUseFontOutlines_dispatch_table_thunk; + epoxy_wglUseFontOutlinesA = epoxy_wglUseFontOutlinesA_dispatch_table_thunk; + epoxy_wglUseFontOutlinesW = epoxy_wglUseFontOutlinesW_dispatch_table_thunk; + epoxy_wglWaitForMscOML = epoxy_wglWaitForMscOML_dispatch_table_thunk; + epoxy_wglWaitForSbcOML = epoxy_wglWaitForSbcOML_dispatch_table_thunk; +} + +#endif /* !USING_DISPATCH_TABLE */ +PUBLIC PFNWGLALLOCATEMEMORYNVPROC epoxy_wglAllocateMemoryNV = epoxy_wglAllocateMemoryNV_global_rewrite_ptr; + +PUBLIC PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC epoxy_wglAssociateImageBufferEventsI3D = epoxy_wglAssociateImageBufferEventsI3D_global_rewrite_ptr; + +PUBLIC PFNWGLBEGINFRAMETRACKINGI3DPROC epoxy_wglBeginFrameTrackingI3D = epoxy_wglBeginFrameTrackingI3D_global_rewrite_ptr; + +PUBLIC PFNWGLBINDDISPLAYCOLORTABLEEXTPROC epoxy_wglBindDisplayColorTableEXT = epoxy_wglBindDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLBINDSWAPBARRIERNVPROC epoxy_wglBindSwapBarrierNV = epoxy_wglBindSwapBarrierNV_global_rewrite_ptr; + +PUBLIC PFNWGLBINDTEXIMAGEARBPROC epoxy_wglBindTexImageARB = epoxy_wglBindTexImageARB_global_rewrite_ptr; + +PUBLIC PFNWGLBINDVIDEOCAPTUREDEVICENVPROC epoxy_wglBindVideoCaptureDeviceNV = epoxy_wglBindVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLBINDVIDEODEVICENVPROC epoxy_wglBindVideoDeviceNV = epoxy_wglBindVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLBINDVIDEOIMAGENVPROC epoxy_wglBindVideoImageNV = epoxy_wglBindVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC epoxy_wglBlitContextFramebufferAMD = epoxy_wglBlitContextFramebufferAMD_global_rewrite_ptr; + +PUBLIC PFNWGLCHOOSEPIXELFORMATARBPROC epoxy_wglChoosePixelFormatARB = epoxy_wglChoosePixelFormatARB_global_rewrite_ptr; + +PUBLIC PFNWGLCHOOSEPIXELFORMATEXTPROC epoxy_wglChoosePixelFormatEXT = epoxy_wglChoosePixelFormatEXT_global_rewrite_ptr; + +PUBLIC PFNWGLCOPYCONTEXTPROC epoxy_wglCopyContext = epoxy_wglCopyContext_global_rewrite_ptr; + +PUBLIC PFNWGLCOPYIMAGESUBDATANVPROC epoxy_wglCopyImageSubDataNV = epoxy_wglCopyImageSubDataNV_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEAFFINITYDCNVPROC epoxy_wglCreateAffinityDCNV = epoxy_wglCreateAffinityDCNV_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC epoxy_wglCreateAssociatedContextAMD = epoxy_wglCreateAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC epoxy_wglCreateAssociatedContextAttribsAMD = epoxy_wglCreateAssociatedContextAttribsAMD_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEBUFFERREGIONARBPROC epoxy_wglCreateBufferRegionARB = epoxy_wglCreateBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLCREATECONTEXTPROC epoxy_wglCreateContext = epoxy_wglCreateContext_global_rewrite_ptr; + +PUBLIC PFNWGLCREATECONTEXTATTRIBSARBPROC epoxy_wglCreateContextAttribsARB = epoxy_wglCreateContextAttribsARB_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC epoxy_wglCreateDisplayColorTableEXT = epoxy_wglCreateDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEIMAGEBUFFERI3DPROC epoxy_wglCreateImageBufferI3D = epoxy_wglCreateImageBufferI3D_global_rewrite_ptr; + +PUBLIC PFNWGLCREATELAYERCONTEXTPROC epoxy_wglCreateLayerContext = epoxy_wglCreateLayerContext_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEPBUFFERARBPROC epoxy_wglCreatePbufferARB = epoxy_wglCreatePbufferARB_global_rewrite_ptr; + +PUBLIC PFNWGLCREATEPBUFFEREXTPROC epoxy_wglCreatePbufferEXT = epoxy_wglCreatePbufferEXT_global_rewrite_ptr; + +PUBLIC PFNWGLDXCLOSEDEVICENVPROC epoxy_wglDXCloseDeviceNV = epoxy_wglDXCloseDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXLOCKOBJECTSNVPROC epoxy_wglDXLockObjectsNV = epoxy_wglDXLockObjectsNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXOBJECTACCESSNVPROC epoxy_wglDXObjectAccessNV = epoxy_wglDXObjectAccessNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXOPENDEVICENVPROC epoxy_wglDXOpenDeviceNV = epoxy_wglDXOpenDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXREGISTEROBJECTNVPROC epoxy_wglDXRegisterObjectNV = epoxy_wglDXRegisterObjectNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXSETRESOURCESHAREHANDLENVPROC epoxy_wglDXSetResourceShareHandleNV = epoxy_wglDXSetResourceShareHandleNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXUNLOCKOBJECTSNVPROC epoxy_wglDXUnlockObjectsNV = epoxy_wglDXUnlockObjectsNV_global_rewrite_ptr; + +PUBLIC PFNWGLDXUNREGISTEROBJECTNVPROC epoxy_wglDXUnregisterObjectNV = epoxy_wglDXUnregisterObjectNV_global_rewrite_ptr; + +PUBLIC PFNWGLDELAYBEFORESWAPNVPROC epoxy_wglDelayBeforeSwapNV = epoxy_wglDelayBeforeSwapNV_global_rewrite_ptr; + +PUBLIC PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC epoxy_wglDeleteAssociatedContextAMD = epoxy_wglDeleteAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNWGLDELETEBUFFERREGIONARBPROC epoxy_wglDeleteBufferRegionARB = epoxy_wglDeleteBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLDELETECONTEXTPROC epoxy_wglDeleteContext = epoxy_wglDeleteContext_global_rewrite_ptr; + +PUBLIC PFNWGLDELETEDCNVPROC epoxy_wglDeleteDCNV = epoxy_wglDeleteDCNV_global_rewrite_ptr; + +PUBLIC PFNWGLDESCRIBELAYERPLANEPROC epoxy_wglDescribeLayerPlane = epoxy_wglDescribeLayerPlane_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC epoxy_wglDestroyDisplayColorTableEXT = epoxy_wglDestroyDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYIMAGEBUFFERI3DPROC epoxy_wglDestroyImageBufferI3D = epoxy_wglDestroyImageBufferI3D_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYPBUFFERARBPROC epoxy_wglDestroyPbufferARB = epoxy_wglDestroyPbufferARB_global_rewrite_ptr; + +PUBLIC PFNWGLDESTROYPBUFFEREXTPROC epoxy_wglDestroyPbufferEXT = epoxy_wglDestroyPbufferEXT_global_rewrite_ptr; + +PUBLIC PFNWGLDISABLEFRAMELOCKI3DPROC epoxy_wglDisableFrameLockI3D = epoxy_wglDisableFrameLockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLDISABLEGENLOCKI3DPROC epoxy_wglDisableGenlockI3D = epoxy_wglDisableGenlockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENABLEFRAMELOCKI3DPROC epoxy_wglEnableFrameLockI3D = epoxy_wglEnableFrameLockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENABLEGENLOCKI3DPROC epoxy_wglEnableGenlockI3D = epoxy_wglEnableGenlockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENDFRAMETRACKINGI3DPROC epoxy_wglEndFrameTrackingI3D = epoxy_wglEndFrameTrackingI3D_global_rewrite_ptr; + +PUBLIC PFNWGLENUMGPUDEVICESNVPROC epoxy_wglEnumGpuDevicesNV = epoxy_wglEnumGpuDevicesNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMGPUSFROMAFFINITYDCNVPROC epoxy_wglEnumGpusFromAffinityDCNV = epoxy_wglEnumGpusFromAffinityDCNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMGPUSNVPROC epoxy_wglEnumGpusNV = epoxy_wglEnumGpusNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC epoxy_wglEnumerateVideoCaptureDevicesNV = epoxy_wglEnumerateVideoCaptureDevicesNV_global_rewrite_ptr; + +PUBLIC PFNWGLENUMERATEVIDEODEVICESNVPROC epoxy_wglEnumerateVideoDevicesNV = epoxy_wglEnumerateVideoDevicesNV_global_rewrite_ptr; + +PUBLIC PFNWGLFREEMEMORYNVPROC epoxy_wglFreeMemoryNV = epoxy_wglFreeMemoryNV_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSAMPLERATEI3DPROC epoxy_wglGenlockSampleRateI3D = epoxy_wglGenlockSampleRateI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSOURCEDELAYI3DPROC epoxy_wglGenlockSourceDelayI3D = epoxy_wglGenlockSourceDelayI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSOURCEEDGEI3DPROC epoxy_wglGenlockSourceEdgeI3D = epoxy_wglGenlockSourceEdgeI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGENLOCKSOURCEI3DPROC epoxy_wglGenlockSourceI3D = epoxy_wglGenlockSourceI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETCONTEXTGPUIDAMDPROC epoxy_wglGetContextGPUIDAMD = epoxy_wglGetContextGPUIDAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC epoxy_wglGetCurrentAssociatedContextAMD = epoxy_wglGetCurrentAssociatedContextAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTCONTEXTPROC epoxy_wglGetCurrentContext = epoxy_wglGetCurrentContext_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTDCPROC epoxy_wglGetCurrentDC = epoxy_wglGetCurrentDC_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTREADDCARBPROC epoxy_wglGetCurrentReadDCARB = epoxy_wglGetCurrentReadDCARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETCURRENTREADDCEXTPROC epoxy_wglGetCurrentReadDCEXT = epoxy_wglGetCurrentReadDCEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETDEFAULTPROCADDRESSPROC epoxy_wglGetDefaultProcAddress = epoxy_wglGetDefaultProcAddress_global_rewrite_ptr; + +PUBLIC PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglGetDigitalVideoParametersI3D = epoxy_wglGetDigitalVideoParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETEXTENSIONSSTRINGARBPROC epoxy_wglGetExtensionsStringARB = epoxy_wglGetExtensionsStringARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETEXTENSIONSSTRINGEXTPROC epoxy_wglGetExtensionsStringEXT = epoxy_wglGetExtensionsStringEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETFRAMEUSAGEI3DPROC epoxy_wglGetFrameUsageI3D = epoxy_wglGetFrameUsageI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGPUIDSAMDPROC epoxy_wglGetGPUIDsAMD = epoxy_wglGetGPUIDsAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETGPUINFOAMDPROC epoxy_wglGetGPUInfoAMD = epoxy_wglGetGPUInfoAMD_global_rewrite_ptr; + +PUBLIC PFNWGLGETGAMMATABLEI3DPROC epoxy_wglGetGammaTableI3D = epoxy_wglGetGammaTableI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGAMMATABLEPARAMETERSI3DPROC epoxy_wglGetGammaTableParametersI3D = epoxy_wglGetGammaTableParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSAMPLERATEI3DPROC epoxy_wglGetGenlockSampleRateI3D = epoxy_wglGetGenlockSampleRateI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSOURCEDELAYI3DPROC epoxy_wglGetGenlockSourceDelayI3D = epoxy_wglGetGenlockSourceDelayI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSOURCEEDGEI3DPROC epoxy_wglGetGenlockSourceEdgeI3D = epoxy_wglGetGenlockSourceEdgeI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETGENLOCKSOURCEI3DPROC epoxy_wglGetGenlockSourceI3D = epoxy_wglGetGenlockSourceI3D_global_rewrite_ptr; + +PUBLIC PFNWGLGETLAYERPALETTEENTRIESPROC epoxy_wglGetLayerPaletteEntries = epoxy_wglGetLayerPaletteEntries_global_rewrite_ptr; + +PUBLIC PFNWGLGETMSCRATEOMLPROC epoxy_wglGetMscRateOML = epoxy_wglGetMscRateOML_global_rewrite_ptr; + +PUBLIC PFNWGLGETPBUFFERDCARBPROC epoxy_wglGetPbufferDCARB = epoxy_wglGetPbufferDCARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETPBUFFERDCEXTPROC epoxy_wglGetPbufferDCEXT = epoxy_wglGetPbufferDCEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBFVARBPROC epoxy_wglGetPixelFormatAttribfvARB = epoxy_wglGetPixelFormatAttribfvARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBFVEXTPROC epoxy_wglGetPixelFormatAttribfvEXT = epoxy_wglGetPixelFormatAttribfvEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBIVARBPROC epoxy_wglGetPixelFormatAttribivARB = epoxy_wglGetPixelFormatAttribivARB_global_rewrite_ptr; + +PUBLIC PFNWGLGETPIXELFORMATATTRIBIVEXTPROC epoxy_wglGetPixelFormatAttribivEXT = epoxy_wglGetPixelFormatAttribivEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETPROCADDRESSPROC epoxy_wglGetProcAddress = epoxy_wglGetProcAddress_global_rewrite_ptr; + +PUBLIC PFNWGLGETSWAPINTERVALEXTPROC epoxy_wglGetSwapIntervalEXT = epoxy_wglGetSwapIntervalEXT_global_rewrite_ptr; + +PUBLIC PFNWGLGETSYNCVALUESOMLPROC epoxy_wglGetSyncValuesOML = epoxy_wglGetSyncValuesOML_global_rewrite_ptr; + +PUBLIC PFNWGLGETVIDEODEVICENVPROC epoxy_wglGetVideoDeviceNV = epoxy_wglGetVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLGETVIDEOINFONVPROC epoxy_wglGetVideoInfoNV = epoxy_wglGetVideoInfoNV_global_rewrite_ptr; + +PUBLIC PFNWGLISENABLEDFRAMELOCKI3DPROC epoxy_wglIsEnabledFrameLockI3D = epoxy_wglIsEnabledFrameLockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLISENABLEDGENLOCKI3DPROC epoxy_wglIsEnabledGenlockI3D = epoxy_wglIsEnabledGenlockI3D_global_rewrite_ptr; + +PUBLIC PFNWGLJOINSWAPGROUPNVPROC epoxy_wglJoinSwapGroupNV = epoxy_wglJoinSwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNWGLLOADDISPLAYCOLORTABLEEXTPROC epoxy_wglLoadDisplayColorTableEXT = epoxy_wglLoadDisplayColorTableEXT_global_rewrite_ptr; + +PUBLIC PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC epoxy_wglLockVideoCaptureDeviceNV = epoxy_wglLockVideoCaptureDeviceNV_global_rewrite_ptr; + +PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped = epoxy_wglMakeAssociatedContextCurrentAMD_unwrapped_global_rewrite_ptr; + +PFNWGLMAKECONTEXTCURRENTARBPROC epoxy_wglMakeContextCurrentARB_unwrapped = epoxy_wglMakeContextCurrentARB_unwrapped_global_rewrite_ptr; + +PFNWGLMAKECONTEXTCURRENTEXTPROC epoxy_wglMakeContextCurrentEXT_unwrapped = epoxy_wglMakeContextCurrentEXT_unwrapped_global_rewrite_ptr; + +PFNWGLMAKECURRENTPROC epoxy_wglMakeCurrent_unwrapped = epoxy_wglMakeCurrent_unwrapped_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYCURRENTCONTEXTNVPROC epoxy_wglQueryCurrentContextNV = epoxy_wglQueryCurrentContextNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYFRAMECOUNTNVPROC epoxy_wglQueryFrameCountNV = epoxy_wglQueryFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYFRAMELOCKMASTERI3DPROC epoxy_wglQueryFrameLockMasterI3D = epoxy_wglQueryFrameLockMasterI3D_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYFRAMETRACKINGI3DPROC epoxy_wglQueryFrameTrackingI3D = epoxy_wglQueryFrameTrackingI3D_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC epoxy_wglQueryGenlockMaxSourceDelayI3D = epoxy_wglQueryGenlockMaxSourceDelayI3D_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYMAXSWAPGROUPSNVPROC epoxy_wglQueryMaxSwapGroupsNV = epoxy_wglQueryMaxSwapGroupsNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYPBUFFERARBPROC epoxy_wglQueryPbufferARB = epoxy_wglQueryPbufferARB_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYPBUFFEREXTPROC epoxy_wglQueryPbufferEXT = epoxy_wglQueryPbufferEXT_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYSWAPGROUPNVPROC epoxy_wglQuerySwapGroupNV = epoxy_wglQuerySwapGroupNV_global_rewrite_ptr; + +PUBLIC PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC epoxy_wglQueryVideoCaptureDeviceNV = epoxy_wglQueryVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLREALIZELAYERPALETTEPROC epoxy_wglRealizeLayerPalette = epoxy_wglRealizeLayerPalette_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC epoxy_wglReleaseImageBufferEventsI3D = epoxy_wglReleaseImageBufferEventsI3D_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEPBUFFERDCARBPROC epoxy_wglReleasePbufferDCARB = epoxy_wglReleasePbufferDCARB_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEPBUFFERDCEXTPROC epoxy_wglReleasePbufferDCEXT = epoxy_wglReleasePbufferDCEXT_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASETEXIMAGEARBPROC epoxy_wglReleaseTexImageARB = epoxy_wglReleaseTexImageARB_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC epoxy_wglReleaseVideoCaptureDeviceNV = epoxy_wglReleaseVideoCaptureDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEVIDEODEVICENVPROC epoxy_wglReleaseVideoDeviceNV = epoxy_wglReleaseVideoDeviceNV_global_rewrite_ptr; + +PUBLIC PFNWGLRELEASEVIDEOIMAGENVPROC epoxy_wglReleaseVideoImageNV = epoxy_wglReleaseVideoImageNV_global_rewrite_ptr; + +PUBLIC PFNWGLRESETFRAMECOUNTNVPROC epoxy_wglResetFrameCountNV = epoxy_wglResetFrameCountNV_global_rewrite_ptr; + +PUBLIC PFNWGLRESTOREBUFFERREGIONARBPROC epoxy_wglRestoreBufferRegionARB = epoxy_wglRestoreBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLSAVEBUFFERREGIONARBPROC epoxy_wglSaveBufferRegionARB = epoxy_wglSaveBufferRegionARB_global_rewrite_ptr; + +PUBLIC PFNWGLSENDPBUFFERTOVIDEONVPROC epoxy_wglSendPbufferToVideoNV = epoxy_wglSendPbufferToVideoNV_global_rewrite_ptr; + +PUBLIC PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC epoxy_wglSetDigitalVideoParametersI3D = epoxy_wglSetDigitalVideoParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLSETGAMMATABLEI3DPROC epoxy_wglSetGammaTableI3D = epoxy_wglSetGammaTableI3D_global_rewrite_ptr; + +PUBLIC PFNWGLSETGAMMATABLEPARAMETERSI3DPROC epoxy_wglSetGammaTableParametersI3D = epoxy_wglSetGammaTableParametersI3D_global_rewrite_ptr; + +PUBLIC PFNWGLSETLAYERPALETTEENTRIESPROC epoxy_wglSetLayerPaletteEntries = epoxy_wglSetLayerPaletteEntries_global_rewrite_ptr; + +PUBLIC PFNWGLSETPBUFFERATTRIBARBPROC epoxy_wglSetPbufferAttribARB = epoxy_wglSetPbufferAttribARB_global_rewrite_ptr; + +PUBLIC PFNWGLSETSTEREOEMITTERSTATE3DLPROC epoxy_wglSetStereoEmitterState3DL = epoxy_wglSetStereoEmitterState3DL_global_rewrite_ptr; + +PUBLIC PFNWGLSHARELISTSPROC epoxy_wglShareLists = epoxy_wglShareLists_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPBUFFERSMSCOMLPROC epoxy_wglSwapBuffersMscOML = epoxy_wglSwapBuffersMscOML_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPINTERVALEXTPROC epoxy_wglSwapIntervalEXT = epoxy_wglSwapIntervalEXT_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPLAYERBUFFERSPROC epoxy_wglSwapLayerBuffers = epoxy_wglSwapLayerBuffers_global_rewrite_ptr; + +PUBLIC PFNWGLSWAPLAYERBUFFERSMSCOMLPROC epoxy_wglSwapLayerBuffersMscOML = epoxy_wglSwapLayerBuffersMscOML_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTBITMAPSAPROC epoxy_wglUseFontBitmapsA = epoxy_wglUseFontBitmapsA_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTBITMAPSWPROC epoxy_wglUseFontBitmapsW = epoxy_wglUseFontBitmapsW_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTOUTLINESPROC epoxy_wglUseFontOutlines = epoxy_wglUseFontOutlines_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTOUTLINESAPROC epoxy_wglUseFontOutlinesA = epoxy_wglUseFontOutlinesA_global_rewrite_ptr; + +PUBLIC PFNWGLUSEFONTOUTLINESWPROC epoxy_wglUseFontOutlinesW = epoxy_wglUseFontOutlinesW_global_rewrite_ptr; + +PUBLIC PFNWGLWAITFORMSCOMLPROC epoxy_wglWaitForMscOML = epoxy_wglWaitForMscOML_global_rewrite_ptr; + +PUBLIC PFNWGLWAITFORSBCOMLPROC epoxy_wglWaitForSbcOML = epoxy_wglWaitForSbcOML_global_rewrite_ptr; + From 6683fc0f24c263b733fdbac5e70245e1c798c24d Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 02:19:48 -0400 Subject: [PATCH 166/324] remove glew --- Engine/lib/glew/LICENSE.txt | 73 - Engine/lib/glew/Makefile | 402 - Engine/lib/glew/README.txt | 18 - Engine/lib/glew/TODO.txt | 12 - Engine/lib/glew/auto/Makefile | 389 - Engine/lib/glew/auto/blacklist | 14 - .../glew/auto/core/gl/GLX_AMD_gpu_association | 22 - .../auto/core/gl/GLX_ARB_get_proc_address | 4 - .../auto/core/gl/GLX_ATI_pixel_format_float | 4 - .../glew/auto/core/gl/GLX_ATI_render_texture | 41 - .../gl/GLX_EXT_create_context_es2_profile | 4 - .../core/gl/GLX_EXT_create_context_es_profile | 4 - .../core/gl/GLX_EXT_fbconfig_packed_float | 5 - .../auto/core/gl/GLX_EXT_framebuffer_sRGB | 4 - .../glew/auto/core/gl/GLX_MESA_swap_control | 5 - .../lib/glew/auto/core/gl/GLX_NV_float_buffer | 4 - .../auto/core/gl/GLX_NV_vertex_array_range | 5 - .../auto/core/gl/GLX_SGIS_shared_multisample | 5 - .../lib/glew/auto/core/gl/GLX_SGIX_hyperpipe | 25 - .../glew/auto/core/gl/GLX_SGIX_swap_barrier | 5 - .../lib/glew/auto/core/gl/GLX_SGIX_swap_group | 4 - .../lib/glew/auto/core/gl/GLX_SGI_video_sync | 5 - .../glew/auto/core/gl/GLX_SUN_video_resize | 7 - Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 | 4 - Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 | 82 - Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 | 6 - .../glew/auto/core/gl/GL_APPLE_float_pixels | 17 - .../glew/auto/core/gl/GL_APPLE_pixel_buffer | 4 - .../glew/auto/core/gl/GL_APPLE_texture_range | 12 - .../glew/auto/core/gl/GL_ARB_draw_instanced | 3 - Engine/lib/glew/auto/core/gl/GL_ARB_imaging | 112 - .../glew/auto/core/gl/GL_ARB_instanced_arrays | 7 - .../auto/core/gl/GL_ARB_internalformat_query2 | 103 - .../glew/auto/core/gl/GL_ARB_matrix_palette | 18 - .../lib/glew/auto/core/gl/GL_ARB_multitexture | 72 - .../lib/glew/auto/core/gl/GL_ARB_robustness | 30 - .../core/gl/GL_ARB_separate_shader_objects | 72 - .../auto/core/gl/GL_ARB_vertex_attrib_64bit | 13 - .../lib/glew/auto/core/gl/GL_ARB_vertex_blend | 55 - .../glew/auto/core/gl/GL_ATIX_point_sprites | 9 - .../auto/core/gl/GL_ATIX_texture_env_combine3 | 6 - .../auto/core/gl/GL_ATIX_texture_env_route | 6 - .../GL_ATIX_vertex_shader_output_point_size | 4 - .../glew/auto/core/gl/GL_ATI_envmap_bumpmap | 15 - .../auto/core/gl/GL_ATI_map_object_buffer | 5 - .../lib/glew/auto/core/gl/GL_ATI_pn_triangles | 14 - .../glew/auto/core/gl/GL_ATI_separate_stencil | 9 - .../auto/core/gl/GL_ATI_shader_texture_lod | 3 - .../core/gl/GL_ATI_texture_compression_3dc | 4 - .../glew/auto/core/gl/GL_ATI_vertex_streams | 58 - Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader | 5 - .../glew/auto/core/gl/GL_EXT_bindable_uniform | 12 - .../lib/glew/auto/core/gl/GL_EXT_debug_marker | 6 - .../auto/core/gl/GL_EXT_depth_bounds_test | 6 - .../glew/auto/core/gl/GL_EXT_draw_instanced | 5 - .../auto/core/gl/GL_EXT_draw_range_elements | 6 - Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord | 16 - .../glew/auto/core/gl/GL_EXT_framebuffer_sRGB | 5 - .../glew/auto/core/gl/GL_EXT_geometry_shader4 | 26 - .../core/gl/GL_EXT_gpu_program_parameters | 5 - .../lib/glew/auto/core/gl/GL_EXT_gpu_shader4 | 63 - .../lib/glew/auto/core/gl/GL_EXT_packed_float | 6 - .../auto/core/gl/GL_EXT_pixel_buffer_object | 7 - .../glew/auto/core/gl/GL_EXT_secondary_color | 27 - .../glew/auto/core/gl/GL_EXT_texture_array | 12 - .../auto/core/gl/GL_EXT_texture_buffer_object | 9 - .../core/gl/GL_EXT_texture_compression_latc | 7 - .../core/gl/GL_EXT_texture_compression_rgtc | 7 - .../glew/auto/core/gl/GL_EXT_texture_cube_map | 15 - .../auto/core/gl/GL_EXT_texture_edge_clamp | 4 - .../glew/auto/core/gl/GL_EXT_texture_integer | 56 - .../auto/core/gl/GL_EXT_texture_rectangle | 7 - .../core/gl/GL_EXT_texture_shared_exponent | 6 - .../lib/glew/auto/core/gl/GL_EXT_timer_query | 6 - .../glew/auto/core/gl/GL_EXT_vertex_shader | 156 - .../glew/auto/core/gl/GL_KTX_buffer_region | 12 - .../glew/auto/core/gl/GL_NVX_gpu_memory_info | 8 - .../auto/core/gl/GL_NV_depth_buffer_float | 10 - .../auto/core/gl/GL_NV_depth_range_unclamped | 8 - .../glew/auto/core/gl/GL_NV_fragment_program2 | 8 - .../glew/auto/core/gl/GL_NV_fragment_program4 | 3 - .../core/gl/GL_NV_fragment_program_option | 3 - .../gl/GL_NV_framebuffer_multisample_coverage | 8 - .../glew/auto/core/gl/GL_NV_geometry_program4 | 7 - .../glew/auto/core/gl/GL_NV_geometry_shader4 | 3 - .../lib/glew/auto/core/gl/GL_NV_gpu_program4 | 23 - .../lib/glew/auto/core/gl/GL_NV_gpu_program5 | 9 - .../core/gl/GL_NV_parameter_buffer_object | 11 - .../glew/auto/core/gl/GL_NV_path_rendering | 180 - .../lib/glew/auto/core/gl/GL_NV_present_video | 15 - .../auto/core/gl/GL_NV_tessellation_program5 | 8 - .../auto/core/gl/GL_NV_transform_feedback | 39 - .../lib/glew/auto/core/gl/GL_NV_vdpau_interop | 18 - .../auto/core/gl/GL_NV_vertex_program2_option | 5 - .../glew/auto/core/gl/GL_NV_vertex_program3 | 4 - .../glew/auto/core/gl/GL_NV_vertex_program4 | 4 - Engine/lib/glew/auto/core/gl/GL_SGIX_shadow | 7 - .../auto/core/gl/GL_SUN_read_video_pixels | 4 - Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 | 49 - Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 | 3 - Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 | 146 - Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 | 89 - Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 | 74 - Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 | 180 - Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 | 32 - Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 | 163 - Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 | 41 - Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 | 28 - Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 | 6 - Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 | 20 - Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 | 3 - Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 | 8 - Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 | 5 - Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 | 5 - Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint | 4 - .../glew/auto/core/gl/WGL_ARB_create_context | 12 - .../core/gl/WGL_ATI_render_texture_rectangle | 4 - .../gl/WGL_EXT_create_context_es2_profile | 4 - .../core/gl/WGL_EXT_create_context_es_profile | 4 - .../auto/core/gl/WGL_EXT_framebuffer_sRGB | 4 - .../core/gl/WGL_EXT_pixel_format_packed_float | 4 - .../lib/glew/auto/core/gl/WGL_NV_gpu_affinity | 12 - .../auto/core/gl/WGL_NV_vertex_array_range | 5 - Engine/lib/glew/auto/custom.txt | 7 - Engine/lib/glew/auto/doc/advanced.html | 169 - Engine/lib/glew/auto/doc/basic.html | 180 - Engine/lib/glew/auto/doc/build.html | 47 - Engine/lib/glew/auto/doc/credits.html | 25 - Engine/lib/glew/auto/doc/index.html | 118 - Engine/lib/glew/auto/doc/install.html | 126 - Engine/lib/glew/auto/doc/log.html | 912 - Engine/lib/glew/auto/extensions/gl/.dummy | 0 .../auto/extensions/gl/GLX_3DFX_multisample | 5 - .../extensions/gl/GLX_AMD_gpu_association | 22 - .../auto/extensions/gl/GLX_ARB_create_context | 9 - .../gl/GLX_ARB_create_context_profile | 6 - .../gl/GLX_ARB_create_context_robustness | 7 - .../auto/extensions/gl/GLX_ARB_fbconfig_float | 5 - .../extensions/gl/GLX_ARB_framebuffer_sRGB | 4 - .../extensions/gl/GLX_ARB_get_proc_address | 4 - .../auto/extensions/gl/GLX_ARB_multisample | 5 - .../GLX_ARB_robustness_application_isolation | 4 - .../GLX_ARB_robustness_share_group_isolation | 4 - .../gl/GLX_ARB_vertex_buffer_object | 4 - .../extensions/gl/GLX_ATI_pixel_format_float | 4 - .../auto/extensions/gl/GLX_ATI_render_texture | 41 - .../auto/extensions/gl/GLX_EXT_buffer_age | 4 - .../gl/GLX_EXT_create_context_es2_profile | 4 - .../gl/GLX_EXT_create_context_es_profile | 4 - .../gl/GLX_EXT_fbconfig_packed_float | 5 - .../extensions/gl/GLX_EXT_framebuffer_sRGB | 4 - .../auto/extensions/gl/GLX_EXT_import_context | 11 - .../auto/extensions/gl/GLX_EXT_scene_marker | 3 - .../auto/extensions/gl/GLX_EXT_swap_control | 6 - .../extensions/gl/GLX_EXT_swap_control_tear | 4 - .../extensions/gl/GLX_EXT_texture_from_pixmap | 36 - .../auto/extensions/gl/GLX_EXT_visual_info | 19 - .../auto/extensions/gl/GLX_EXT_visual_rating | 6 - .../auto/extensions/gl/GLX_INTEL_swap_event | 7 - .../auto/extensions/gl/GLX_MESA_agp_offset | 4 - .../extensions/gl/GLX_MESA_copy_sub_buffer | 4 - .../extensions/gl/GLX_MESA_pixmap_colormap | 4 - .../extensions/gl/GLX_MESA_release_buffers | 4 - .../auto/extensions/gl/GLX_MESA_set_3dfx_mode | 6 - .../auto/extensions/gl/GLX_MESA_swap_control | 5 - .../glew/auto/extensions/gl/GLX_NV_copy_image | 4 - .../auto/extensions/gl/GLX_NV_float_buffer | 4 - .../extensions/gl/GLX_NV_multisample_coverage | 5 - .../auto/extensions/gl/GLX_NV_present_video | 6 - .../glew/auto/extensions/gl/GLX_NV_swap_group | 9 - .../extensions/gl/GLX_NV_vertex_array_range | 5 - .../auto/extensions/gl/GLX_NV_video_capture | 12 - .../auto/extensions/gl/GLX_NV_video_output | 19 - .../auto/extensions/gl/GLX_OML_swap_method | 7 - .../auto/extensions/gl/GLX_OML_sync_control | 8 - .../extensions/gl/GLX_SGIS_blended_overlay | 4 - .../auto/extensions/gl/GLX_SGIS_color_range | 3 - .../auto/extensions/gl/GLX_SGIS_multisample | 5 - .../extensions/gl/GLX_SGIS_shared_multisample | 5 - .../glew/auto/extensions/gl/GLX_SGIX_fbconfig | 22 - .../auto/extensions/gl/GLX_SGIX_hyperpipe | 25 - .../glew/auto/extensions/gl/GLX_SGIX_pbuffer | 35 - .../auto/extensions/gl/GLX_SGIX_swap_barrier | 5 - .../auto/extensions/gl/GLX_SGIX_swap_group | 4 - .../auto/extensions/gl/GLX_SGIX_video_resize | 10 - .../gl/GLX_SGIX_visual_select_group | 4 - .../glew/auto/extensions/gl/GLX_SGI_cushion | 4 - .../extensions/gl/GLX_SGI_make_current_read | 5 - .../auto/extensions/gl/GLX_SGI_swap_control | 4 - .../auto/extensions/gl/GLX_SGI_video_sync | 5 - .../gl/GLX_SUN_get_transparent_index | 4 - .../auto/extensions/gl/GLX_SUN_video_resize | 7 - .../auto/extensions/gl/GL_3DFX_multisample | 7 - .../glew/auto/extensions/gl/GL_3DFX_tbuffer | 4 - .../gl/GL_3DFX_texture_compression_FXT1 | 5 - .../extensions/gl/GL_AMD_blend_minmax_factor | 5 - .../extensions/gl/GL_AMD_conservative_depth | 3 - .../auto/extensions/gl/GL_AMD_debug_output | 22 - .../extensions/gl/GL_AMD_depth_clamp_separate | 5 - .../extensions/gl/GL_AMD_draw_buffers_blend | 7 - .../extensions/gl/GL_AMD_interleaved_elements | 13 - .../extensions/gl/GL_AMD_multi_draw_indirect | 5 - .../auto/extensions/gl/GL_AMD_name_gen_delete | 11 - .../extensions/gl/GL_AMD_performance_monitor | 21 - .../auto/extensions/gl/GL_AMD_pinned_memory | 4 - .../extensions/gl/GL_AMD_query_buffer_object | 6 - .../extensions/gl/GL_AMD_sample_positions | 5 - .../gl/GL_AMD_seamless_cubemap_per_texture | 4 - .../gl/GL_AMD_shader_stencil_export | 3 - .../gl/GL_AMD_shader_trinary_minmax | 3 - .../auto/extensions/gl/GL_AMD_sparse_texture | 14 - .../gl/GL_AMD_stencil_operation_extended | 8 - .../extensions/gl/GL_AMD_texture_texture4 | 3 - ...GL_AMD_transform_feedback3_lines_triangles | 3 - .../extensions/gl/GL_AMD_vertex_shader_layer | 3 - .../gl/GL_AMD_vertex_shader_tessellator | 12 - .../gl/GL_AMD_vertex_shader_viewport_index | 3 - .../auto/extensions/gl/GL_ANGLE_depth_texture | 3 - .../extensions/gl/GL_ANGLE_framebuffer_blit | 8 - .../gl/GL_ANGLE_framebuffer_multisample | 7 - .../extensions/gl/GL_ANGLE_instanced_arrays | 7 - .../gl/GL_ANGLE_pack_reverse_row_order | 4 - .../extensions/gl/GL_ANGLE_program_binary | 4 - .../gl/GL_ANGLE_texture_compression_dxt1 | 7 - .../gl/GL_ANGLE_texture_compression_dxt3 | 7 - .../gl/GL_ANGLE_texture_compression_dxt5 | 7 - .../auto/extensions/gl/GL_ANGLE_texture_usage | 5 - .../auto/extensions/gl/GL_ANGLE_timer_query | 20 - .../gl/GL_ANGLE_translated_shader_source | 5 - .../extensions/gl/GL_APPLE_aux_depth_stencil | 4 - .../extensions/gl/GL_APPLE_client_storage | 4 - .../auto/extensions/gl/GL_APPLE_element_array | 11 - .../glew/auto/extensions/gl/GL_APPLE_fence | 13 - .../auto/extensions/gl/GL_APPLE_float_pixels | 17 - .../extensions/gl/GL_APPLE_flush_buffer_range | 7 - .../extensions/gl/GL_APPLE_object_purgeable | 12 - .../auto/extensions/gl/GL_APPLE_pixel_buffer | 4 - .../glew/auto/extensions/gl/GL_APPLE_rgb_422 | 6 - .../auto/extensions/gl/GL_APPLE_row_bytes | 5 - .../extensions/gl/GL_APPLE_specular_vector | 4 - .../auto/extensions/gl/GL_APPLE_texture_range | 12 - .../extensions/gl/GL_APPLE_transform_hint | 4 - .../gl/GL_APPLE_vertex_array_object | 8 - .../extensions/gl/GL_APPLE_vertex_array_range | 14 - .../gl/GL_APPLE_vertex_program_evaluators | 20 - .../auto/extensions/gl/GL_APPLE_ycbcr_422 | 4 - .../extensions/gl/GL_ARB_ES2_compatibility | 25 - .../extensions/gl/GL_ARB_ES3_compatibility | 17 - .../extensions/gl/GL_ARB_arrays_of_arrays | 3 - .../auto/extensions/gl/GL_ARB_base_instance | 6 - .../extensions/gl/GL_ARB_bindless_texture | 20 - .../extensions/gl/GL_ARB_blend_func_extended | 9 - .../auto/extensions/gl/GL_ARB_buffer_storage | 14 - .../glew/auto/extensions/gl/GL_ARB_cl_event | 8 - .../extensions/gl/GL_ARB_clear_buffer_object | 7 - .../auto/extensions/gl/GL_ARB_clear_texture | 6 - .../extensions/gl/GL_ARB_color_buffer_float | 9 - .../auto/extensions/gl/GL_ARB_compatibility | 3 - .../GL_ARB_compressed_texture_pixel_storage | 11 - .../auto/extensions/gl/GL_ARB_compute_shader | 23 - .../gl/GL_ARB_compute_variable_group_size | 8 - .../extensions/gl/GL_ARB_conservative_depth | 3 - .../auto/extensions/gl/GL_ARB_copy_buffer | 6 - .../glew/auto/extensions/gl/GL_ARB_copy_image | 4 - .../auto/extensions/gl/GL_ARB_debug_output | 30 - .../extensions/gl/GL_ARB_depth_buffer_float | 6 - .../auto/extensions/gl/GL_ARB_depth_clamp | 4 - .../auto/extensions/gl/GL_ARB_depth_texture | 8 - .../auto/extensions/gl/GL_ARB_draw_buffers | 21 - .../extensions/gl/GL_ARB_draw_buffers_blend | 7 - .../gl/GL_ARB_draw_elements_base_vertex | 7 - .../auto/extensions/gl/GL_ARB_draw_indirect | 7 - .../auto/extensions/gl/GL_ARB_draw_instanced | 3 - .../extensions/gl/GL_ARB_enhanced_layouts | 6 - .../gl/GL_ARB_explicit_attrib_location | 3 - .../gl/GL_ARB_explicit_uniform_location | 4 - .../gl/GL_ARB_fragment_coord_conventions | 3 - .../gl/GL_ARB_fragment_layer_viewport | 3 - .../extensions/gl/GL_ARB_fragment_program | 18 - .../gl/GL_ARB_fragment_program_shadow | 3 - .../auto/extensions/gl/GL_ARB_fragment_shader | 6 - .../gl/GL_ARB_framebuffer_no_attachments | 16 - .../extensions/gl/GL_ARB_framebuffer_object | 97 - .../extensions/gl/GL_ARB_framebuffer_sRGB | 4 - .../extensions/gl/GL_ARB_geometry_shader4 | 26 - .../extensions/gl/GL_ARB_get_program_binary | 10 - .../auto/extensions/gl/GL_ARB_gpu_shader5 | 9 - .../auto/extensions/gl/GL_ARB_gpu_shader_fp64 | 33 - .../extensions/gl/GL_ARB_half_float_pixel | 4 - .../extensions/gl/GL_ARB_half_float_vertex | 4 - .../glew/auto/extensions/gl/GL_ARB_imaging | 112 - .../extensions/gl/GL_ARB_indirect_parameters | 7 - .../extensions/gl/GL_ARB_instanced_arrays | 7 - .../extensions/gl/GL_ARB_internalformat_query | 5 - .../gl/GL_ARB_internalformat_query2 | 103 - .../extensions/gl/GL_ARB_invalidate_subdata | 9 - .../extensions/gl/GL_ARB_map_buffer_alignment | 4 - .../extensions/gl/GL_ARB_map_buffer_range | 11 - .../auto/extensions/gl/GL_ARB_matrix_palette | 18 - .../glew/auto/extensions/gl/GL_ARB_multi_bind | 9 - .../extensions/gl/GL_ARB_multi_draw_indirect | 5 - .../auto/extensions/gl/GL_ARB_multisample | 13 - .../auto/extensions/gl/GL_ARB_multitexture | 72 - .../auto/extensions/gl/GL_ARB_occlusion_query | 16 - .../extensions/gl/GL_ARB_occlusion_query2 | 4 - .../extensions/gl/GL_ARB_pixel_buffer_object | 7 - .../extensions/gl/GL_ARB_point_parameters | 9 - .../auto/extensions/gl/GL_ARB_point_sprite | 5 - .../gl/GL_ARB_program_interface_query | 56 - .../extensions/gl/GL_ARB_provoking_vertex | 8 - .../extensions/gl/GL_ARB_query_buffer_object | 7 - .../gl/GL_ARB_robust_buffer_access_behavior | 3 - .../glew/auto/extensions/gl/GL_ARB_robustness | 30 - .../GL_ARB_robustness_application_isolation | 3 - .../GL_ARB_robustness_share_group_isolation | 3 - .../auto/extensions/gl/GL_ARB_sample_shading | 6 - .../auto/extensions/gl/GL_ARB_sampler_objects | 18 - .../extensions/gl/GL_ARB_seamless_cube_map | 4 - .../gl/GL_ARB_seamless_cubemap_per_texture | 4 - .../gl/GL_ARB_separate_shader_objects | 72 - .../gl/GL_ARB_shader_atomic_counters | 33 - .../extensions/gl/GL_ARB_shader_bit_encoding | 3 - .../gl/GL_ARB_shader_draw_parameters | 3 - .../extensions/gl/GL_ARB_shader_group_vote | 3 - .../gl/GL_ARB_shader_image_load_store | 69 - .../extensions/gl/GL_ARB_shader_image_size | 3 - .../auto/extensions/gl/GL_ARB_shader_objects | 78 - .../extensions/gl/GL_ARB_shader_precision | 3 - .../gl/GL_ARB_shader_stencil_export | 3 - .../gl/GL_ARB_shader_storage_buffer_object | 20 - .../extensions/gl/GL_ARB_shader_subroutine | 20 - .../extensions/gl/GL_ARB_shader_texture_lod | 3 - .../extensions/gl/GL_ARB_shading_language_100 | 4 - .../gl/GL_ARB_shading_language_420pack | 3 - .../gl/GL_ARB_shading_language_include | 12 - .../gl/GL_ARB_shading_language_packing | 3 - .../lib/glew/auto/extensions/gl/GL_ARB_shadow | 6 - .../auto/extensions/gl/GL_ARB_shadow_ambient | 4 - .../auto/extensions/gl/GL_ARB_sparse_texture | 16 - .../extensions/gl/GL_ARB_stencil_texturing | 4 - .../lib/glew/auto/extensions/gl/GL_ARB_sync | 25 - .../extensions/gl/GL_ARB_tessellation_shader | 37 - .../extensions/gl/GL_ARB_texture_border_clamp | 4 - .../gl/GL_ARB_texture_buffer_object | 9 - .../gl/GL_ARB_texture_buffer_object_rgb32 | 3 - .../extensions/gl/GL_ARB_texture_buffer_range | 8 - .../extensions/gl/GL_ARB_texture_compression | 21 - .../gl/GL_ARB_texture_compression_bptc | 7 - .../gl/GL_ARB_texture_compression_rgtc | 7 - .../extensions/gl/GL_ARB_texture_cube_map | 15 - .../gl/GL_ARB_texture_cube_map_array | 10 - .../auto/extensions/gl/GL_ARB_texture_env_add | 3 - .../extensions/gl/GL_ARB_texture_env_combine | 25 - .../extensions/gl/GL_ARB_texture_env_crossbar | 3 - .../extensions/gl/GL_ARB_texture_env_dot3 | 5 - .../auto/extensions/gl/GL_ARB_texture_float | 23 - .../auto/extensions/gl/GL_ARB_texture_gather | 6 - .../gl/GL_ARB_texture_mirror_clamp_to_edge | 4 - .../gl/GL_ARB_texture_mirrored_repeat | 4 - .../extensions/gl/GL_ARB_texture_multisample | 28 - .../gl/GL_ARB_texture_non_power_of_two | 3 - .../extensions/gl/GL_ARB_texture_query_levels | 3 - .../extensions/gl/GL_ARB_texture_query_lod | 3 - .../extensions/gl/GL_ARB_texture_rectangle | 9 - .../glew/auto/extensions/gl/GL_ARB_texture_rg | 27 - .../extensions/gl/GL_ARB_texture_rgb10_a2ui | 4 - .../extensions/gl/GL_ARB_texture_stencil8 | 5 - .../auto/extensions/gl/GL_ARB_texture_storage | 10 - .../gl/GL_ARB_texture_storage_multisample | 7 - .../auto/extensions/gl/GL_ARB_texture_swizzle | 8 - .../auto/extensions/gl/GL_ARB_texture_view | 9 - .../auto/extensions/gl/GL_ARB_timer_query | 8 - .../extensions/gl/GL_ARB_transform_feedback2 | 14 - .../extensions/gl/GL_ARB_transform_feedback3 | 9 - .../gl/GL_ARB_transform_feedback_instanced | 5 - .../extensions/gl/GL_ARB_transpose_matrix | 11 - .../gl/GL_ARB_uniform_buffer_object | 46 - .../extensions/gl/GL_ARB_vertex_array_bgra | 4 - .../extensions/gl/GL_ARB_vertex_array_object | 8 - .../extensions/gl/GL_ARB_vertex_attrib_64bit | 13 - .../gl/GL_ARB_vertex_attrib_binding | 16 - .../auto/extensions/gl/GL_ARB_vertex_blend | 55 - .../extensions/gl/GL_ARB_vertex_buffer_object | 47 - .../auto/extensions/gl/GL_ARB_vertex_program | 144 - .../auto/extensions/gl/GL_ARB_vertex_shader | 13 - .../gl/GL_ARB_vertex_type_10f_11f_11f_rev | 4 - .../gl/GL_ARB_vertex_type_2_10_10_10_rev | 43 - .../auto/extensions/gl/GL_ARB_viewport_array | 26 - .../glew/auto/extensions/gl/GL_ARB_window_pos | 19 - .../auto/extensions/gl/GL_ATIX_point_sprites | 9 - .../gl/GL_ATIX_texture_env_combine3 | 6 - .../extensions/gl/GL_ATIX_texture_env_route | 6 - .../GL_ATIX_vertex_shader_output_point_size | 4 - .../auto/extensions/gl/GL_ATI_draw_buffers | 21 - .../auto/extensions/gl/GL_ATI_element_array | 9 - .../auto/extensions/gl/GL_ATI_envmap_bumpmap | 15 - .../auto/extensions/gl/GL_ATI_fragment_shader | 71 - .../extensions/gl/GL_ATI_map_object_buffer | 5 - .../glew/auto/extensions/gl/GL_ATI_meminfo | 6 - .../auto/extensions/gl/GL_ATI_pn_triangles | 14 - .../extensions/gl/GL_ATI_separate_stencil | 9 - .../extensions/gl/GL_ATI_shader_texture_lod | 3 - .../extensions/gl/GL_ATI_text_fragment_shader | 4 - .../gl/GL_ATI_texture_compression_3dc | 4 - .../extensions/gl/GL_ATI_texture_env_combine3 | 6 - .../auto/extensions/gl/GL_ATI_texture_float | 15 - .../extensions/gl/GL_ATI_texture_mirror_once | 5 - .../extensions/gl/GL_ATI_vertex_array_object | 23 - .../gl/GL_ATI_vertex_attrib_array_object | 6 - .../auto/extensions/gl/GL_ATI_vertex_streams | 58 - .../glew/auto/extensions/gl/GL_EXT_422_pixels | 7 - .../glew/auto/extensions/gl/GL_EXT_Cg_shader | 5 - .../lib/glew/auto/extensions/gl/GL_EXT_abgr | 4 - .../lib/glew/auto/extensions/gl/GL_EXT_bgra | 5 - .../extensions/gl/GL_EXT_bindable_uniform | 12 - .../auto/extensions/gl/GL_EXT_blend_color | 9 - .../gl/GL_EXT_blend_equation_separate | 6 - .../extensions/gl/GL_EXT_blend_func_separate | 8 - .../auto/extensions/gl/GL_EXT_blend_logic_op | 3 - .../auto/extensions/gl/GL_EXT_blend_minmax | 8 - .../auto/extensions/gl/GL_EXT_blend_subtract | 5 - .../extensions/gl/GL_EXT_clip_volume_hint | 4 - .../lib/glew/auto/extensions/gl/GL_EXT_cmyka | 7 - .../auto/extensions/gl/GL_EXT_color_subtable | 5 - .../gl/GL_EXT_compiled_vertex_array | 7 - .../auto/extensions/gl/GL_EXT_convolution | 36 - .../extensions/gl/GL_EXT_coordinate_frame | 19 - .../auto/extensions/gl/GL_EXT_copy_texture | 8 - .../auto/extensions/gl/GL_EXT_cull_vertex | 8 - .../auto/extensions/gl/GL_EXT_debug_marker | 6 - .../extensions/gl/GL_EXT_depth_bounds_test | 6 - .../extensions/gl/GL_EXT_direct_state_access | 219 - .../auto/extensions/gl/GL_EXT_draw_buffers2 | 9 - .../auto/extensions/gl/GL_EXT_draw_instanced | 5 - .../extensions/gl/GL_EXT_draw_range_elements | 6 - .../glew/auto/extensions/gl/GL_EXT_fog_coord | 16 - .../extensions/gl/GL_EXT_fragment_lighting | 35 - .../extensions/gl/GL_EXT_framebuffer_blit | 8 - .../gl/GL_EXT_framebuffer_multisample | 9 - ...GL_EXT_framebuffer_multisample_blit_scaled | 5 - .../extensions/gl/GL_EXT_framebuffer_object | 71 - .../extensions/gl/GL_EXT_framebuffer_sRGB | 5 - .../extensions/gl/GL_EXT_geometry_shader4 | 26 - .../gl/GL_EXT_gpu_program_parameters | 5 - .../auto/extensions/gl/GL_EXT_gpu_shader4 | 63 - .../glew/auto/extensions/gl/GL_EXT_histogram | 26 - .../extensions/gl/GL_EXT_index_array_formats | 3 - .../glew/auto/extensions/gl/GL_EXT_index_func | 4 - .../auto/extensions/gl/GL_EXT_index_material | 4 - .../auto/extensions/gl/GL_EXT_index_texture | 3 - .../auto/extensions/gl/GL_EXT_light_texture | 15 - .../auto/extensions/gl/GL_EXT_misc_attribute | 3 - .../extensions/gl/GL_EXT_multi_draw_arrays | 5 - .../auto/extensions/gl/GL_EXT_multisample | 22 - .../extensions/gl/GL_EXT_packed_depth_stencil | 7 - .../auto/extensions/gl/GL_EXT_packed_float | 6 - .../auto/extensions/gl/GL_EXT_packed_pixels | 8 - .../extensions/gl/GL_EXT_paletted_texture | 28 - .../extensions/gl/GL_EXT_pixel_buffer_object | 7 - .../auto/extensions/gl/GL_EXT_pixel_transform | 18 - .../gl/GL_EXT_pixel_transform_color_table | 3 - .../extensions/gl/GL_EXT_point_parameters | 9 - .../auto/extensions/gl/GL_EXT_polygon_offset | 7 - .../extensions/gl/GL_EXT_provoking_vertex | 8 - .../auto/extensions/gl/GL_EXT_rescale_normal | 4 - .../auto/extensions/gl/GL_EXT_scene_marker | 5 - .../auto/extensions/gl/GL_EXT_secondary_color | 27 - .../gl/GL_EXT_separate_shader_objects | 7 - .../gl/GL_EXT_separate_specular_color | 6 - .../gl/GL_EXT_shader_image_load_store | 60 - .../auto/extensions/gl/GL_EXT_shadow_funcs | 3 - .../gl/GL_EXT_shared_texture_palette | 4 - .../extensions/gl/GL_EXT_stencil_clear_tag | 5 - .../extensions/gl/GL_EXT_stencil_two_side | 6 - .../auto/extensions/gl/GL_EXT_stencil_wrap | 5 - .../glew/auto/extensions/gl/GL_EXT_subtexture | 6 - .../glew/auto/extensions/gl/GL_EXT_texture | 45 - .../glew/auto/extensions/gl/GL_EXT_texture3D | 13 - .../auto/extensions/gl/GL_EXT_texture_array | 12 - .../gl/GL_EXT_texture_buffer_object | 9 - .../gl/GL_EXT_texture_compression_dxt1 | 3 - .../gl/GL_EXT_texture_compression_latc | 7 - .../gl/GL_EXT_texture_compression_rgtc | 7 - .../gl/GL_EXT_texture_compression_s3tc | 7 - .../extensions/gl/GL_EXT_texture_cube_map | 15 - .../extensions/gl/GL_EXT_texture_edge_clamp | 4 - .../auto/extensions/gl/GL_EXT_texture_env | 3 - .../auto/extensions/gl/GL_EXT_texture_env_add | 3 - .../extensions/gl/GL_EXT_texture_env_combine | 24 - .../extensions/gl/GL_EXT_texture_env_dot3 | 5 - .../gl/GL_EXT_texture_filter_anisotropic | 5 - .../auto/extensions/gl/GL_EXT_texture_integer | 56 - .../extensions/gl/GL_EXT_texture_lod_bias | 6 - .../extensions/gl/GL_EXT_texture_mirror_clamp | 6 - .../auto/extensions/gl/GL_EXT_texture_object | 14 - .../gl/GL_EXT_texture_perturb_normal | 6 - .../extensions/gl/GL_EXT_texture_rectangle | 7 - .../auto/extensions/gl/GL_EXT_texture_sRGB | 19 - .../extensions/gl/GL_EXT_texture_sRGB_decode | 6 - .../gl/GL_EXT_texture_shared_exponent | 6 - .../auto/extensions/gl/GL_EXT_texture_snorm | 28 - .../auto/extensions/gl/GL_EXT_texture_swizzle | 8 - .../auto/extensions/gl/GL_EXT_timer_query | 6 - .../extensions/gl/GL_EXT_transform_feedback | 25 - .../auto/extensions/gl/GL_EXT_vertex_array | 44 - .../extensions/gl/GL_EXT_vertex_array_bgra | 4 - .../extensions/gl/GL_EXT_vertex_attrib_64bit | 26 - .../auto/extensions/gl/GL_EXT_vertex_shader | 156 - .../extensions/gl/GL_EXT_vertex_weighting | 19 - .../auto/extensions/gl/GL_EXT_x11_sync_object | 5 - .../extensions/gl/GL_GREMEDY_frame_terminator | 4 - .../extensions/gl/GL_GREMEDY_string_marker | 4 - .../gl/GL_HP_convolution_border_modes | 3 - .../auto/extensions/gl/GL_HP_image_transform | 9 - .../auto/extensions/gl/GL_HP_occlusion_test | 3 - .../auto/extensions/gl/GL_HP_texture_lighting | 3 - .../auto/extensions/gl/GL_IBM_cull_vertex | 4 - .../gl/GL_IBM_multimode_draw_arrays | 5 - .../auto/extensions/gl/GL_IBM_rasterpos_clip | 4 - .../auto/extensions/gl/GL_IBM_static_data | 5 - .../gl/GL_IBM_texture_mirrored_repeat | 4 - .../extensions/gl/GL_IBM_vertex_array_lists | 27 - .../auto/extensions/gl/GL_INGR_color_clamp | 11 - .../auto/extensions/gl/GL_INGR_interlace_read | 4 - .../auto/extensions/gl/GL_INTEL_map_texture | 10 - .../extensions/gl/GL_INTEL_parallel_arrays | 12 - .../extensions/gl/GL_INTEL_texture_scissor | 5 - .../lib/glew/auto/extensions/gl/GL_KHR_debug | 54 - .../gl/GL_KHR_texture_compression_astc_ldr | 31 - .../auto/extensions/gl/GL_KTX_buffer_region | 12 - .../auto/extensions/gl/GL_MESAX_texture_stack | 9 - .../auto/extensions/gl/GL_MESA_pack_invert | 4 - .../auto/extensions/gl/GL_MESA_resize_buffers | 4 - .../auto/extensions/gl/GL_MESA_window_pos | 27 - .../auto/extensions/gl/GL_MESA_ycbcr_texture | 6 - .../extensions/gl/GL_NVX_conditional_render | 5 - .../auto/extensions/gl/GL_NVX_gpu_memory_info | 8 - .../gl/GL_NV_bindless_multi_draw_indirect | 5 - .../auto/extensions/gl/GL_NV_bindless_texture | 16 - .../gl/GL_NV_blend_equation_advanced | 51 - .../gl/GL_NV_blend_equation_advanced_coherent | 3 - .../auto/extensions/gl/GL_NV_blend_square | 3 - .../auto/extensions/gl/GL_NV_compute_program5 | 5 - .../extensions/gl/GL_NV_conditional_render | 9 - .../extensions/gl/GL_NV_copy_depth_to_color | 5 - .../glew/auto/extensions/gl/GL_NV_copy_image | 4 - .../auto/extensions/gl/GL_NV_deep_texture3D | 5 - .../extensions/gl/GL_NV_depth_buffer_float | 10 - .../glew/auto/extensions/gl/GL_NV_depth_clamp | 4 - .../extensions/gl/GL_NV_depth_range_unclamped | 8 - .../auto/extensions/gl/GL_NV_draw_texture | 4 - .../glew/auto/extensions/gl/GL_NV_evaluators | 36 - .../extensions/gl/GL_NV_explicit_multisample | 16 - .../lib/glew/auto/extensions/gl/GL_NV_fence | 13 - .../auto/extensions/gl/GL_NV_float_buffer | 18 - .../auto/extensions/gl/GL_NV_fog_distance | 6 - .../auto/extensions/gl/GL_NV_fragment_program | 15 - .../extensions/gl/GL_NV_fragment_program2 | 8 - .../extensions/gl/GL_NV_fragment_program4 | 3 - .../gl/GL_NV_fragment_program_option | 3 - .../gl/GL_NV_framebuffer_multisample_coverage | 8 - .../extensions/gl/GL_NV_geometry_program4 | 7 - .../auto/extensions/gl/GL_NV_geometry_shader4 | 3 - .../auto/extensions/gl/GL_NV_gpu_program4 | 23 - .../auto/extensions/gl/GL_NV_gpu_program5 | 9 - .../gl/GL_NV_gpu_program5_mem_extended | 3 - .../auto/extensions/gl/GL_NV_gpu_program_fp64 | 3 - .../glew/auto/extensions/gl/GL_NV_gpu_shader5 | 65 - .../glew/auto/extensions/gl/GL_NV_half_float | 51 - .../extensions/gl/GL_NV_light_max_exponent | 5 - .../extensions/gl/GL_NV_multisample_coverage | 4 - .../gl/GL_NV_multisample_filter_hint | 4 - .../auto/extensions/gl/GL_NV_occlusion_query | 14 - .../extensions/gl/GL_NV_packed_depth_stencil | 5 - .../gl/GL_NV_parameter_buffer_object | 11 - .../gl/GL_NV_parameter_buffer_object2 | 3 - .../auto/extensions/gl/GL_NV_path_rendering | 180 - .../auto/extensions/gl/GL_NV_pixel_data_range | 11 - .../auto/extensions/gl/GL_NV_point_sprite | 8 - .../auto/extensions/gl/GL_NV_present_video | 15 - .../extensions/gl/GL_NV_primitive_restart | 7 - .../extensions/gl/GL_NV_register_combiners | 67 - .../extensions/gl/GL_NV_register_combiners2 | 6 - .../gl/GL_NV_shader_atomic_counters | 3 - .../extensions/gl/GL_NV_shader_atomic_float | 3 - .../extensions/gl/GL_NV_shader_buffer_load | 19 - .../gl/GL_NV_shader_storage_buffer_object | 3 - .../extensions/gl/GL_NV_tessellation_program5 | 8 - .../auto/extensions/gl/GL_NV_texgen_emboss | 6 - .../extensions/gl/GL_NV_texgen_reflection | 5 - .../auto/extensions/gl/GL_NV_texture_barrier | 4 - .../gl/GL_NV_texture_compression_vtc | 3 - .../extensions/gl/GL_NV_texture_env_combine4 | 8 - .../extensions/gl/GL_NV_texture_expand_normal | 4 - .../extensions/gl/GL_NV_texture_multisample | 11 - .../extensions/gl/GL_NV_texture_rectangle | 7 - .../auto/extensions/gl/GL_NV_texture_shader | 76 - .../auto/extensions/gl/GL_NV_texture_shader2 | 31 - .../auto/extensions/gl/GL_NV_texture_shader3 | 20 - .../extensions/gl/GL_NV_transform_feedback | 39 - .../extensions/gl/GL_NV_transform_feedback2 | 14 - .../auto/extensions/gl/GL_NV_vdpau_interop | 18 - .../extensions/gl/GL_NV_vertex_array_range | 10 - .../extensions/gl/GL_NV_vertex_array_range2 | 4 - .../gl/GL_NV_vertex_attrib_integer_64bit | 24 - .../gl/GL_NV_vertex_buffer_unified_memory | 40 - .../auto/extensions/gl/GL_NV_vertex_program | 150 - .../extensions/gl/GL_NV_vertex_program1_1 | 3 - .../auto/extensions/gl/GL_NV_vertex_program2 | 3 - .../gl/GL_NV_vertex_program2_option | 5 - .../auto/extensions/gl/GL_NV_vertex_program3 | 4 - .../auto/extensions/gl/GL_NV_vertex_program4 | 4 - .../auto/extensions/gl/GL_NV_video_capture | 44 - .../extensions/gl/GL_OES_byte_coordinates | 3 - .../gl/GL_OES_compressed_paletted_texture | 13 - .../auto/extensions/gl/GL_OES_read_format | 5 - .../extensions/gl/GL_OES_single_precision | 9 - .../glew/auto/extensions/gl/GL_OML_interlace | 5 - .../glew/auto/extensions/gl/GL_OML_resample | 9 - .../glew/auto/extensions/gl/GL_OML_subsample | 5 - .../glew/auto/extensions/gl/GL_PGI_misc_hints | 23 - .../auto/extensions/gl/GL_PGI_vertex_hints | 25 - .../gl/GL_REGAL_ES1_0_compatibility | 35 - .../gl/GL_REGAL_ES1_1_compatibility | 16 - .../glew/auto/extensions/gl/GL_REGAL_enable | 13 - .../auto/extensions/gl/GL_REGAL_error_string | 4 - .../extensions/gl/GL_REGAL_extension_query | 5 - .../lib/glew/auto/extensions/gl/GL_REGAL_log | 14 - .../extensions/gl/GL_REND_screen_coordinates | 5 - Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc | 9 - .../auto/extensions/gl/GL_SGIS_color_range | 12 - .../auto/extensions/gl/GL_SGIS_detail_texture | 5 - .../auto/extensions/gl/GL_SGIS_fog_function | 5 - .../extensions/gl/GL_SGIS_generate_mipmap | 5 - .../auto/extensions/gl/GL_SGIS_multisample | 21 - .../auto/extensions/gl/GL_SGIS_pixel_texture | 3 - .../extensions/gl/GL_SGIS_point_line_texgen | 11 - .../extensions/gl/GL_SGIS_sharpen_texture | 5 - .../glew/auto/extensions/gl/GL_SGIS_texture4D | 5 - .../gl/GL_SGIS_texture_border_clamp | 4 - .../extensions/gl/GL_SGIS_texture_edge_clamp | 4 - .../extensions/gl/GL_SGIS_texture_filter4 | 5 - .../auto/extensions/gl/GL_SGIS_texture_lod | 7 - .../auto/extensions/gl/GL_SGIS_texture_select | 3 - .../lib/glew/auto/extensions/gl/GL_SGIX_async | 10 - .../extensions/gl/GL_SGIX_async_histogram | 5 - .../auto/extensions/gl/GL_SGIX_async_pixel | 9 - .../extensions/gl/GL_SGIX_blend_alpha_minmax | 5 - .../glew/auto/extensions/gl/GL_SGIX_clipmap | 3 - .../gl/GL_SGIX_convolution_accuracy | 4 - .../auto/extensions/gl/GL_SGIX_depth_texture | 6 - .../auto/extensions/gl/GL_SGIX_flush_raster | 4 - .../auto/extensions/gl/GL_SGIX_fog_offset | 5 - .../auto/extensions/gl/GL_SGIX_fog_texture | 7 - .../gl/GL_SGIX_fragment_specular_lighting | 20 - .../glew/auto/extensions/gl/GL_SGIX_framezoom | 4 - .../glew/auto/extensions/gl/GL_SGIX_interlace | 4 - .../auto/extensions/gl/GL_SGIX_ir_instrument1 | 3 - .../auto/extensions/gl/GL_SGIX_list_priority | 3 - .../auto/extensions/gl/GL_SGIX_pixel_texture | 4 - .../extensions/gl/GL_SGIX_pixel_texture_bits | 3 - .../extensions/gl/GL_SGIX_reference_plane | 4 - .../glew/auto/extensions/gl/GL_SGIX_resample | 8 - .../glew/auto/extensions/gl/GL_SGIX_shadow | 7 - .../auto/extensions/gl/GL_SGIX_shadow_ambient | 4 - .../glew/auto/extensions/gl/GL_SGIX_sprite | 7 - .../extensions/gl/GL_SGIX_tag_sample_buffer | 4 - .../extensions/gl/GL_SGIX_texture_add_env | 3 - .../gl/GL_SGIX_texture_coordinate_clamp | 6 - .../extensions/gl/GL_SGIX_texture_lod_bias | 3 - .../gl/GL_SGIX_texture_multi_buffer | 4 - .../auto/extensions/gl/GL_SGIX_texture_range | 31 - .../extensions/gl/GL_SGIX_texture_scale_bias | 7 - .../auto/extensions/gl/GL_SGIX_vertex_preclip | 5 - .../extensions/gl/GL_SGIX_vertex_preclip_hint | 5 - .../lib/glew/auto/extensions/gl/GL_SGIX_ycrcb | 3 - .../auto/extensions/gl/GL_SGI_color_matrix | 14 - .../auto/extensions/gl/GL_SGI_color_table | 26 - .../extensions/gl/GL_SGI_texture_color_table | 5 - .../auto/extensions/gl/GL_SUNX_constant_data | 6 - .../gl/GL_SUN_convolution_border_modes | 4 - .../auto/extensions/gl/GL_SUN_global_alpha | 13 - .../glew/auto/extensions/gl/GL_SUN_mesh_array | 5 - .../extensions/gl/GL_SUN_read_video_pixels | 4 - .../auto/extensions/gl/GL_SUN_slice_accum | 4 - .../auto/extensions/gl/GL_SUN_triangle_list | 27 - .../lib/glew/auto/extensions/gl/GL_SUN_vertex | 43 - .../auto/extensions/gl/GL_WIN_phong_shading | 5 - .../auto/extensions/gl/GL_WIN_specular_fog | 4 - .../glew/auto/extensions/gl/GL_WIN_swap_hint | 4 - .../auto/extensions/gl/WGL_3DFX_multisample | 5 - .../auto/extensions/gl/WGL_3DL_stereo_control | 8 - .../extensions/gl/WGL_AMD_gpu_association | 22 - .../auto/extensions/gl/WGL_ARB_buffer_region | 11 - .../auto/extensions/gl/WGL_ARB_create_context | 12 - .../gl/WGL_ARB_create_context_profile | 6 - .../gl/WGL_ARB_create_context_robustness | 7 - .../extensions/gl/WGL_ARB_extensions_string | 4 - .../extensions/gl/WGL_ARB_framebuffer_sRGB | 4 - .../extensions/gl/WGL_ARB_make_current_read | 7 - .../auto/extensions/gl/WGL_ARB_multisample | 5 - .../glew/auto/extensions/gl/WGL_ARB_pbuffer | 17 - .../auto/extensions/gl/WGL_ARB_pixel_format | 55 - .../extensions/gl/WGL_ARB_pixel_format_float | 4 - .../auto/extensions/gl/WGL_ARB_render_texture | 39 - .../WGL_ARB_robustness_application_isolation | 4 - .../WGL_ARB_robustness_share_group_isolation | 4 - .../extensions/gl/WGL_ATI_pixel_format_float | 6 - .../gl/WGL_ATI_render_texture_rectangle | 4 - .../gl/WGL_EXT_create_context_es2_profile | 4 - .../gl/WGL_EXT_create_context_es_profile | 4 - .../auto/extensions/gl/WGL_EXT_depth_float | 4 - .../extensions/gl/WGL_EXT_display_color_table | 7 - .../extensions/gl/WGL_EXT_extensions_string | 4 - .../extensions/gl/WGL_EXT_framebuffer_sRGB | 4 - .../extensions/gl/WGL_EXT_make_current_read | 6 - .../auto/extensions/gl/WGL_EXT_multisample | 5 - .../glew/auto/extensions/gl/WGL_EXT_pbuffer | 18 - .../auto/extensions/gl/WGL_EXT_pixel_format | 51 - .../gl/WGL_EXT_pixel_format_packed_float | 4 - .../auto/extensions/gl/WGL_EXT_swap_control | 5 - .../extensions/gl/WGL_EXT_swap_control_tear | 3 - .../gl/WGL_I3D_digital_video_control | 9 - .../lib/glew/auto/extensions/gl/WGL_I3D_gamma | 9 - .../glew/auto/extensions/gl/WGL_I3D_genlock | 24 - .../auto/extensions/gl/WGL_I3D_image_buffer | 9 - .../extensions/gl/WGL_I3D_swap_frame_lock | 7 - .../extensions/gl/WGL_I3D_swap_frame_usage | 7 - .../glew/auto/extensions/gl/WGL_NV_DX_interop | 14 - .../auto/extensions/gl/WGL_NV_DX_interop2 | 3 - .../glew/auto/extensions/gl/WGL_NV_copy_image | 4 - .../auto/extensions/gl/WGL_NV_float_buffer | 12 - .../auto/extensions/gl/WGL_NV_gpu_affinity | 12 - .../extensions/gl/WGL_NV_multisample_coverage | 5 - .../auto/extensions/gl/WGL_NV_present_video | 8 - .../extensions/gl/WGL_NV_render_depth_texture | 9 - .../gl/WGL_NV_render_texture_rectangle | 6 - .../glew/auto/extensions/gl/WGL_NV_swap_group | 9 - .../extensions/gl/WGL_NV_vertex_array_range | 5 - .../auto/extensions/gl/WGL_NV_video_capture | 11 - .../auto/extensions/gl/WGL_NV_video_output | 23 - .../auto/extensions/gl/WGL_OML_sync_control | 9 - Engine/lib/glew/auto/lib/OpenGL/Spec.pm | 202 - Engine/lib/glew/auto/src/footer.html | 4 - Engine/lib/glew/auto/src/glew.rc | 77 - Engine/lib/glew/auto/src/glew_head.c | 249 - Engine/lib/glew/auto/src/glew_head.h | 1113 - Engine/lib/glew/auto/src/glew_init_gl.c | 72 - Engine/lib/glew/auto/src/glew_init_glx.c | 53 - Engine/lib/glew/auto/src/glew_init_tail.c | 57 - Engine/lib/glew/auto/src/glew_init_wgl.c | 41 - Engine/lib/glew/auto/src/glew_license.h | 31 - Engine/lib/glew/auto/src/glew_str_glx.c | 21 - Engine/lib/glew/auto/src/glew_str_head.c | 13 - Engine/lib/glew/auto/src/glew_str_tail.c | 7 - Engine/lib/glew/auto/src/glew_str_wgl.c | 21 - Engine/lib/glew/auto/src/glew_tail.h | 74 - Engine/lib/glew/auto/src/glew_utils.c | 162 - Engine/lib/glew/auto/src/glew_utils.h | 101 - Engine/lib/glew/auto/src/glewinfo.rc | 57 - Engine/lib/glew/auto/src/glewinfo_gl.c | 7 - Engine/lib/glew/auto/src/glewinfo_glx.c | 6 - Engine/lib/glew/auto/src/glewinfo_head.c | 81 - Engine/lib/glew/auto/src/glewinfo_tail.c | 283 - Engine/lib/glew/auto/src/glewinfo_wgl.c | 8 - Engine/lib/glew/auto/src/glxew_head.h | 106 - Engine/lib/glew/auto/src/glxew_mid.h | 9 - Engine/lib/glew/auto/src/glxew_tail.h | 30 - Engine/lib/glew/auto/src/header.html | 99 - Engine/lib/glew/auto/src/khronos_license.h | 23 - Engine/lib/glew/auto/src/mesa_license.h | 24 - Engine/lib/glew/auto/src/visualinfo.rc | 57 - Engine/lib/glew/auto/src/wglew_head.h | 36 - Engine/lib/glew/auto/src/wglew_mid.h | 9 - Engine/lib/glew/auto/src/wglew_tail.h | 32 - Engine/lib/glew/config/Makefile.cygming | 25 - Engine/lib/glew/config/Makefile.cygwin | 24 - Engine/lib/glew/config/Makefile.darwin | 28 - Engine/lib/glew/config/Makefile.darwin-ppc | 28 - Engine/lib/glew/config/Makefile.darwin-x86_64 | 28 - .../lib/glew/config/Makefile.fedora-mingw32 | 11 - Engine/lib/glew/config/Makefile.freebsd | 22 - Engine/lib/glew/config/Makefile.gnu | 22 - Engine/lib/glew/config/Makefile.irix | 22 - Engine/lib/glew/config/Makefile.kfreebsd | 22 - Engine/lib/glew/config/Makefile.linux | 36 - Engine/lib/glew/config/Makefile.linux-mingw32 | 26 - Engine/lib/glew/config/Makefile.linux-mingw64 | 26 - Engine/lib/glew/config/Makefile.mingw | 21 - Engine/lib/glew/config/Makefile.nacl-32 | 36 - Engine/lib/glew/config/Makefile.nacl-64 | 36 - Engine/lib/glew/config/Makefile.netbsd | 22 - Engine/lib/glew/config/Makefile.openbsd | 22 - Engine/lib/glew/config/Makefile.solaris | 18 - Engine/lib/glew/config/Makefile.solaris-gcc | 20 - Engine/lib/glew/config/config.guess | 1523 -- Engine/lib/glew/config/version | 7 - Engine/lib/glew/doc/advanced.html | 272 - Engine/lib/glew/doc/basic.html | 283 - Engine/lib/glew/doc/build.html | 150 - Engine/lib/glew/doc/credits.html | 128 - Engine/lib/glew/doc/glew.css | 187 - Engine/lib/glew/doc/glew.html | 635 - Engine/lib/glew/doc/glew.png | Bin 9298 -> 0 bytes Engine/lib/glew/doc/glew.txt | 28 - Engine/lib/glew/doc/glxew.html | 179 - Engine/lib/glew/doc/gpl.txt | 340 - Engine/lib/glew/doc/index.html | 221 - Engine/lib/glew/doc/install.html | 229 - Engine/lib/glew/doc/khronos.txt | 20 - Engine/lib/glew/doc/log.html | 1015 - Engine/lib/glew/doc/mesa.txt | 21 - Engine/lib/glew/doc/new.png | Bin 1180 -> 0 bytes Engine/lib/glew/doc/ogl_sm.jpg | Bin 1617 -> 0 bytes Engine/lib/glew/doc/wglew.html | 167 - Engine/lib/glew/glew.pc.in | 11 - Engine/lib/glew/include/GL/glew.h | 18062 --------------- Engine/lib/glew/include/GL/glxew.h | 1669 -- Engine/lib/glew/include/GL/wglew.h | 1421 -- Engine/lib/glew/src/glew.c | 18123 ---------------- Engine/lib/glew/src/glewinfo.c | 10681 --------- Engine/lib/glew/src/visualinfo.c | 1178 - 822 files changed, 73252 deletions(-) delete mode 100644 Engine/lib/glew/LICENSE.txt delete mode 100644 Engine/lib/glew/Makefile delete mode 100644 Engine/lib/glew/README.txt delete mode 100644 Engine/lib/glew/TODO.txt delete mode 100644 Engine/lib/glew/auto/Makefile delete mode 100644 Engine/lib/glew/auto/blacklist delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_AMD_gpu_association delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_ARB_get_proc_address delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_ATI_pixel_format_float delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_ATI_render_texture delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es2_profile delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es_profile delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_MESA_swap_control delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_NV_float_buffer delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_NV_vertex_array_range delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_SGIS_shared_multisample delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_SGIX_hyperpipe delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_barrier delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_group delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_SGI_video_sync delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_SUN_video_resize delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 delete mode 100644 Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_APPLE_float_pixels delete mode 100644 Engine/lib/glew/auto/core/gl/GL_APPLE_pixel_buffer delete mode 100644 Engine/lib/glew/auto/core/gl/GL_APPLE_texture_range delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_draw_instanced delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_imaging delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_instanced_arrays delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_internalformat_query2 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_matrix_palette delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_multitexture delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_robustness delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_separate_shader_objects delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ARB_vertex_blend delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATIX_point_sprites delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_combine3 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_route delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATI_envmap_bumpmap delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATI_map_object_buffer delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATI_pn_triangles delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATI_separate_stencil delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATI_shader_texture_lod delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATI_texture_compression_3dc delete mode 100644 Engine/lib/glew/auto/core/gl/GL_ATI_vertex_streams delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_bindable_uniform delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_debug_marker delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_depth_bounds_test delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_draw_instanced delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_draw_range_elements delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_geometry_shader4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_gpu_program_parameters delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_gpu_shader4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_packed_float delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_pixel_buffer_object delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_secondary_color delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_array delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_buffer_object delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_latc delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_rgtc delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_cube_map delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_edge_clamp delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_integer delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_rectangle delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_texture_shared_exponent delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_timer_query delete mode 100644 Engine/lib/glew/auto/core/gl/GL_EXT_vertex_shader delete mode 100644 Engine/lib/glew/auto/core/gl/GL_KTX_buffer_region delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NVX_gpu_memory_info delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_depth_buffer_float delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_depth_range_unclamped delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_fragment_program2 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_fragment_program4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_fragment_program_option delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_geometry_program4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_geometry_shader4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_gpu_program4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_gpu_program5 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_parameter_buffer_object delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_path_rendering delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_present_video delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_tessellation_program5 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_transform_feedback delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_vdpau_interop delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_vertex_program2_option delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_vertex_program3 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_NV_vertex_program4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_SGIX_shadow delete mode 100644 Engine/lib/glew/auto/core/gl/GL_SUN_read_video_pixels delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 delete mode 100644 Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_ARB_create_context delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_ATI_render_texture_rectangle delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es2_profile delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es_profile delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_NV_gpu_affinity delete mode 100644 Engine/lib/glew/auto/core/gl/WGL_NV_vertex_array_range delete mode 100644 Engine/lib/glew/auto/custom.txt delete mode 100644 Engine/lib/glew/auto/doc/advanced.html delete mode 100644 Engine/lib/glew/auto/doc/basic.html delete mode 100644 Engine/lib/glew/auto/doc/build.html delete mode 100644 Engine/lib/glew/auto/doc/credits.html delete mode 100644 Engine/lib/glew/auto/doc/index.html delete mode 100644 Engine/lib/glew/auto/doc/install.html delete mode 100644 Engine/lib/glew/auto/doc/log.html delete mode 100644 Engine/lib/glew/auto/extensions/gl/.dummy delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_3DFX_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_AMD_gpu_association delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_profile delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_robustness delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_fbconfig_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_get_proc_address delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_application_isolation delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_share_group_isolation delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ARB_vertex_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ATI_pixel_format_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_ATI_render_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_buffer_age delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es2_profile delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es_profile delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_fbconfig_packed_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_import_context delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_scene_marker delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control_tear delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_texture_from_pixmap delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_info delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_rating delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_INTEL_swap_event delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_MESA_agp_offset delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_MESA_copy_sub_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_MESA_pixmap_colormap delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_MESA_release_buffers delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_MESA_set_3dfx_mode delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_MESA_swap_control delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_copy_image delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_float_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_multisample_coverage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_present_video delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_swap_group delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_vertex_array_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_video_capture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_NV_video_output delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_OML_swap_method delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_OML_sync_control delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIS_blended_overlay delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIS_color_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIS_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIS_shared_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIX_fbconfig delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIX_hyperpipe delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIX_pbuffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_barrier delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_group delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIX_video_resize delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGIX_visual_select_group delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGI_cushion delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGI_make_current_read delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGI_swap_control delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SGI_video_sync delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SUN_get_transparent_index delete mode 100644 Engine/lib/glew/auto/extensions/gl/GLX_SUN_video_resize delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_3DFX_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_3DFX_tbuffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_3DFX_texture_compression_FXT1 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_blend_minmax_factor delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_conservative_depth delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_debug_output delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_depth_clamp_separate delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_draw_buffers_blend delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_interleaved_elements delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_multi_draw_indirect delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_name_gen_delete delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_performance_monitor delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_pinned_memory delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_query_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_sample_positions delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_seamless_cubemap_per_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_stencil_export delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_trinary_minmax delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_sparse_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_stencil_operation_extended delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_texture_texture4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_transform_feedback3_lines_triangles delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_layer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_tessellator delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_viewport_index delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_depth_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_blit delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_instanced_arrays delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_pack_reverse_row_order delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_program_binary delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt1 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt5 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_usage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_timer_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ANGLE_translated_shader_source delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_aux_depth_stencil delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_client_storage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_element_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_fence delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_float_pixels delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_flush_buffer_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_object_purgeable delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_pixel_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_rgb_422 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_row_bytes delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_specular_vector delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_texture_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_transform_hint delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_program_evaluators delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_APPLE_ycbcr_422 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_ES2_compatibility delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_ES3_compatibility delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_arrays_of_arrays delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_base_instance delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_bindless_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_blend_func_extended delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_buffer_storage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_cl_event delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_color_buffer_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_compatibility delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_compressed_texture_pixel_storage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_variable_group_size delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_conservative_depth delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_image delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_debug_output delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_buffer_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers_blend delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_elements_base_vertex delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_indirect delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_instanced delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_enhanced_layouts delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_attrib_location delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_uniform_location delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_coord_conventions delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_layer_viewport delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program_shadow delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_no_attachments delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_geometry_shader4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_get_program_binary delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader5 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader_fp64 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_pixel delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_vertex delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_imaging delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_indirect_parameters delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_instanced_arrays delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_invalidate_subdata delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_alignment delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_matrix_palette delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_bind delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_draw_indirect delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_multitexture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_pixel_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_point_parameters delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_point_sprite delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_program_interface_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_provoking_vertex delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_query_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_robust_buffer_access_behavior delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_application_isolation delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_share_group_isolation delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_sample_shading delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_sampler_objects delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cube_map delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cubemap_per_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_separate_shader_objects delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_atomic_counters delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_bit_encoding delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_draw_parameters delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_group_vote delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_load_store delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_size delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_objects delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_precision delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_stencil_export delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_storage_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_subroutine delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_texture_lod delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_100 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_420pack delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_include delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_packing delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow_ambient delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_sparse_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_stencil_texturing delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_sync delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_tessellation_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_border_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object_rgb32 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_bptc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_rgtc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_add delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_combine delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_crossbar delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_dot3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_gather delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirror_clamp_to_edge delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirrored_repeat delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_non_power_of_two delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_levels delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_lod delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rectangle delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rg delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rgb10_a2ui delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_stencil8 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_swizzle delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_view delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_timer_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback_instanced delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_transpose_matrix delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_uniform_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_bgra delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_64bit delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_binding delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_blend delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_program delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_10f_11f_11f_rev delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_2_10_10_10_rev delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_viewport_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ARB_window_pos delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATIX_point_sprites delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_combine3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_route delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATIX_vertex_shader_output_point_size delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_draw_buffers delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_element_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_envmap_bumpmap delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_fragment_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_map_object_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_meminfo delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_pn_triangles delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_separate_stencil delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_shader_texture_lod delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_text_fragment_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_compression_3dc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_env_combine3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_mirror_once delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_array_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_attrib_array_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_streams delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_422_pixels delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_Cg_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_abgr delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_bgra delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_bindable_uniform delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_color delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_equation_separate delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_func_separate delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_logic_op delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_minmax delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_subtract delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_clip_volume_hint delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_cmyka delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_color_subtable delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_compiled_vertex_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_convolution delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_coordinate_frame delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_copy_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_cull_vertex delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_debug_marker delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_depth_bounds_test delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_direct_state_access delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_buffers2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_instanced delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_range_elements delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_fog_coord delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_fragment_lighting delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_blit delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample_blit_scaled delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_geometry_shader4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_program_parameters delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_shader4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_histogram delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_index_array_formats delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_index_func delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_index_material delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_index_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_light_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_misc_attribute delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_multi_draw_arrays delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_depth_stencil delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_pixels delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_paletted_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform_color_table delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_point_parameters delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_polygon_offset delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_provoking_vertex delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_rescale_normal delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_scene_marker delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_secondary_color delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_shader_objects delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_specular_color delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_shader_image_load_store delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_shadow_funcs delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_shared_texture_palette delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_clear_tag delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_two_side delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_wrap delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_subtexture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture3D delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_dxt1 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_latc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_rgtc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_s3tc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_cube_map delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_edge_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_add delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_combine delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_dot3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_filter_anisotropic delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_integer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_lod_bias delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_mirror_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_perturb_normal delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_rectangle delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB_decode delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_shared_exponent delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_snorm delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_swizzle delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_timer_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_transform_feedback delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array_bgra delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_attrib_64bit delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_weighting delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_EXT_x11_sync_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_frame_terminator delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_string_marker delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_HP_convolution_border_modes delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_HP_image_transform delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_HP_occlusion_test delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_HP_texture_lighting delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_IBM_cull_vertex delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_IBM_multimode_draw_arrays delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_IBM_rasterpos_clip delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_IBM_static_data delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_IBM_texture_mirrored_repeat delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_IBM_vertex_array_lists delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_INGR_color_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_INGR_interlace_read delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_INTEL_map_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_INTEL_parallel_arrays delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_INTEL_texture_scissor delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_KHR_debug delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_KHR_texture_compression_astc_ldr delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_KTX_buffer_region delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_MESAX_texture_stack delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_MESA_pack_invert delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_MESA_resize_buffers delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_MESA_window_pos delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_MESA_ycbcr_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NVX_conditional_render delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NVX_gpu_memory_info delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_multi_draw_indirect delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced_coherent delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_blend_square delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_compute_program5 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_conditional_render delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_copy_depth_to_color delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_copy_image delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_deep_texture3D delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_depth_buffer_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_depth_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_depth_range_unclamped delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_draw_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_evaluators delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_explicit_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_fence delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_float_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_fog_distance delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program_option delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_framebuffer_multisample_coverage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_program4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_shader4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5_mem_extended delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program_fp64 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_shader5 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_half_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_light_max_exponent delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_coverage delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_filter_hint delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_occlusion_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_packed_depth_stencil delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_path_rendering delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_pixel_data_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_point_sprite delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_present_video delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_primitive_restart delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_counters delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_shader_buffer_load delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_shader_storage_buffer_object delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_tessellation_program5 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_emboss delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_reflection delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_barrier delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_compression_vtc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_env_combine4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_expand_normal delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_rectangle delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vdpau_interop delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_attrib_integer_64bit delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_buffer_unified_memory delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program1_1 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2_option delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program3 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_NV_video_capture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_OES_byte_coordinates delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_OES_compressed_paletted_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_OES_read_format delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_OES_single_precision delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_OML_interlace delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_OML_resample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_OML_subsample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_PGI_misc_hints delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_PGI_vertex_hints delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_0_compatibility delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_1_compatibility delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_REGAL_enable delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_REGAL_error_string delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_REGAL_extension_query delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_REGAL_log delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_REND_screen_coordinates delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_color_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_detail_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_fog_function delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_generate_mipmap delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_pixel_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_point_line_texgen delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_sharpen_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture4D delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_border_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_edge_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_filter4 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_lod delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_select delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_async delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_histogram delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_pixel delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_blend_alpha_minmax delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_clipmap delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_convolution_accuracy delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_depth_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_flush_raster delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_offset delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_fragment_specular_lighting delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_framezoom delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_interlace delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_ir_instrument1 delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_list_priority delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture_bits delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_reference_plane delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_resample delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow_ambient delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_sprite delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_tag_sample_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_add_env delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_coordinate_clamp delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_lod_bias delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_multi_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_scale_bias delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip_hint delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGIX_ycrcb delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGI_color_matrix delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGI_color_table delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SGI_texture_color_table delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUNX_constant_data delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUN_convolution_border_modes delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUN_global_alpha delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUN_mesh_array delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUN_read_video_pixels delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUN_slice_accum delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUN_triangle_list delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_SUN_vertex delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_WIN_phong_shading delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_WIN_specular_fog delete mode 100644 Engine/lib/glew/auto/extensions/gl/GL_WIN_swap_hint delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_3DFX_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_3DL_stereo_control delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_AMD_gpu_association delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_buffer_region delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_profile delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_robustness delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_extensions_string delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_make_current_read delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_pbuffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_render_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_application_isolation delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_share_group_isolation delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ATI_pixel_format_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_ATI_render_texture_rectangle delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es2_profile delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es_profile delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_depth_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_display_color_table delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_extensions_string delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_framebuffer_sRGB delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_make_current_read delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_multisample delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_pbuffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format_packed_float delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control_tear delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_I3D_digital_video_control delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_I3D_gamma delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_I3D_genlock delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_I3D_image_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_lock delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_usage delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop2 delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_copy_image delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_float_buffer delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_gpu_affinity delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_multisample_coverage delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_present_video delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_render_depth_texture delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_render_texture_rectangle delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_swap_group delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_vertex_array_range delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_video_capture delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_NV_video_output delete mode 100644 Engine/lib/glew/auto/extensions/gl/WGL_OML_sync_control delete mode 100644 Engine/lib/glew/auto/lib/OpenGL/Spec.pm delete mode 100644 Engine/lib/glew/auto/src/footer.html delete mode 100644 Engine/lib/glew/auto/src/glew.rc delete mode 100644 Engine/lib/glew/auto/src/glew_head.c delete mode 100644 Engine/lib/glew/auto/src/glew_head.h delete mode 100644 Engine/lib/glew/auto/src/glew_init_gl.c delete mode 100644 Engine/lib/glew/auto/src/glew_init_glx.c delete mode 100644 Engine/lib/glew/auto/src/glew_init_tail.c delete mode 100644 Engine/lib/glew/auto/src/glew_init_wgl.c delete mode 100644 Engine/lib/glew/auto/src/glew_license.h delete mode 100644 Engine/lib/glew/auto/src/glew_str_glx.c delete mode 100644 Engine/lib/glew/auto/src/glew_str_head.c delete mode 100644 Engine/lib/glew/auto/src/glew_str_tail.c delete mode 100644 Engine/lib/glew/auto/src/glew_str_wgl.c delete mode 100644 Engine/lib/glew/auto/src/glew_tail.h delete mode 100644 Engine/lib/glew/auto/src/glew_utils.c delete mode 100644 Engine/lib/glew/auto/src/glew_utils.h delete mode 100644 Engine/lib/glew/auto/src/glewinfo.rc delete mode 100644 Engine/lib/glew/auto/src/glewinfo_gl.c delete mode 100644 Engine/lib/glew/auto/src/glewinfo_glx.c delete mode 100644 Engine/lib/glew/auto/src/glewinfo_head.c delete mode 100644 Engine/lib/glew/auto/src/glewinfo_tail.c delete mode 100644 Engine/lib/glew/auto/src/glewinfo_wgl.c delete mode 100644 Engine/lib/glew/auto/src/glxew_head.h delete mode 100644 Engine/lib/glew/auto/src/glxew_mid.h delete mode 100644 Engine/lib/glew/auto/src/glxew_tail.h delete mode 100644 Engine/lib/glew/auto/src/header.html delete mode 100644 Engine/lib/glew/auto/src/khronos_license.h delete mode 100644 Engine/lib/glew/auto/src/mesa_license.h delete mode 100644 Engine/lib/glew/auto/src/visualinfo.rc delete mode 100644 Engine/lib/glew/auto/src/wglew_head.h delete mode 100644 Engine/lib/glew/auto/src/wglew_mid.h delete mode 100644 Engine/lib/glew/auto/src/wglew_tail.h delete mode 100644 Engine/lib/glew/config/Makefile.cygming delete mode 100644 Engine/lib/glew/config/Makefile.cygwin delete mode 100644 Engine/lib/glew/config/Makefile.darwin delete mode 100644 Engine/lib/glew/config/Makefile.darwin-ppc delete mode 100644 Engine/lib/glew/config/Makefile.darwin-x86_64 delete mode 100644 Engine/lib/glew/config/Makefile.fedora-mingw32 delete mode 100644 Engine/lib/glew/config/Makefile.freebsd delete mode 100644 Engine/lib/glew/config/Makefile.gnu delete mode 100644 Engine/lib/glew/config/Makefile.irix delete mode 100644 Engine/lib/glew/config/Makefile.kfreebsd delete mode 100644 Engine/lib/glew/config/Makefile.linux delete mode 100644 Engine/lib/glew/config/Makefile.linux-mingw32 delete mode 100644 Engine/lib/glew/config/Makefile.linux-mingw64 delete mode 100644 Engine/lib/glew/config/Makefile.mingw delete mode 100644 Engine/lib/glew/config/Makefile.nacl-32 delete mode 100644 Engine/lib/glew/config/Makefile.nacl-64 delete mode 100644 Engine/lib/glew/config/Makefile.netbsd delete mode 100644 Engine/lib/glew/config/Makefile.openbsd delete mode 100644 Engine/lib/glew/config/Makefile.solaris delete mode 100644 Engine/lib/glew/config/Makefile.solaris-gcc delete mode 100644 Engine/lib/glew/config/config.guess delete mode 100644 Engine/lib/glew/config/version delete mode 100644 Engine/lib/glew/doc/advanced.html delete mode 100644 Engine/lib/glew/doc/basic.html delete mode 100644 Engine/lib/glew/doc/build.html delete mode 100644 Engine/lib/glew/doc/credits.html delete mode 100644 Engine/lib/glew/doc/glew.css delete mode 100644 Engine/lib/glew/doc/glew.html delete mode 100644 Engine/lib/glew/doc/glew.png delete mode 100644 Engine/lib/glew/doc/glew.txt delete mode 100644 Engine/lib/glew/doc/glxew.html delete mode 100644 Engine/lib/glew/doc/gpl.txt delete mode 100644 Engine/lib/glew/doc/index.html delete mode 100644 Engine/lib/glew/doc/install.html delete mode 100644 Engine/lib/glew/doc/khronos.txt delete mode 100644 Engine/lib/glew/doc/log.html delete mode 100644 Engine/lib/glew/doc/mesa.txt delete mode 100644 Engine/lib/glew/doc/new.png delete mode 100644 Engine/lib/glew/doc/ogl_sm.jpg delete mode 100644 Engine/lib/glew/doc/wglew.html delete mode 100644 Engine/lib/glew/glew.pc.in delete mode 100644 Engine/lib/glew/include/GL/glew.h delete mode 100644 Engine/lib/glew/include/GL/glxew.h delete mode 100644 Engine/lib/glew/include/GL/wglew.h delete mode 100644 Engine/lib/glew/src/glew.c delete mode 100644 Engine/lib/glew/src/glewinfo.c delete mode 100644 Engine/lib/glew/src/visualinfo.c diff --git a/Engine/lib/glew/LICENSE.txt b/Engine/lib/glew/LICENSE.txt deleted file mode 100644 index f7078042e9..0000000000 --- a/Engine/lib/glew/LICENSE.txt +++ /dev/null @@ -1,73 +0,0 @@ -The OpenGL Extension Wrangler Library -Copyright (C) 2002-2007, Milan Ikits -Copyright (C) 2002-2007, Marcelo E. Magallon -Copyright (C) 2002, Lev Povalahev -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* The name of the author may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. - - -Mesa 3-D graphics library -Version: 7.0 - -Copyright (C) 1999-2007 Brian Paul 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 -BRIAN PAUL 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. - - -Copyright (c) 2007 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. diff --git a/Engine/lib/glew/Makefile b/Engine/lib/glew/Makefile deleted file mode 100644 index e6f08a72c2..0000000000 --- a/Engine/lib/glew/Makefile +++ /dev/null @@ -1,402 +0,0 @@ -#!gmake -## The OpenGL Extension Wrangler Library -## Copyright (C) 2002-2008, Milan Ikits -## Copyright (C) 2002-2008, Marcelo E. Magallon -## Copyright (C) 2002, Lev Povalahev -## All rights reserved. -## -## Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are met: -## -## * Redistributions of source code must retain the above copyright notice, -## this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright notice, -## this list of conditions and the following disclaimer in the documentation -## and/or other materials provided with the distribution. -## * The name of the author may be used to endorse or promote products -## derived from this software without specific prior written permission. -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -## THE POSSIBILITY OF SUCH DAMAGE. - -include config/version - -SHELL = /bin/sh -SYSTEM ?= $(shell config/config.guess | cut -d - -f 3 | sed -e 's/[0-9\.]//g;') -SYSTEM.SUPPORTED = $(shell test -f config/Makefile.$(SYSTEM) && echo 1) - -ifeq ($(SYSTEM.SUPPORTED), 1) -include config/Makefile.$(SYSTEM) -else -$(error "Platform '$(SYSTEM)' not supported") -endif - -GLEW_DEST ?= /usr -BINDIR ?= $(GLEW_DEST)/bin -LIBDIR ?= $(GLEW_DEST)/lib -INCDIR ?= $(GLEW_DEST)/include/GL - -DIST_NAME ?= glew-$(GLEW_VERSION) -DIST_SRC_ZIP ?= $(shell pwd)/$(DIST_NAME).zip -DIST_SRC_TGZ ?= $(shell pwd)/$(DIST_NAME).tgz -DIST_WIN32 ?= $(shell pwd)/$(DIST_NAME)-win32.zip - -DIST_DIR := $(shell mktemp -d /tmp/glew.XXXXXX)/$(DIST_NAME) - -# To disable stripping of binaries either: -# - use STRIP= on gmake command-line -# - edit this makefile to set STRIP to the empty string -# -# To disable symlinks: -# - use LN= on gmake command-line - -AR ?= ar -INSTALL ?= install -STRIP ?= strip -RM ?= rm -f -LN ?= ln -sf - -ifeq ($(MAKECMDGOALS), debug) -OPT = -g -else -OPT = $(POPT) -endif -INCLUDE = -Iinclude -CFLAGS = $(OPT) $(WARN) $(INCLUDE) $(CFLAGS.EXTRA) - -all debug: glew.lib glew.lib.mx glew.bin - -# GLEW shared and static libraries - -LIB.LDFLAGS := $(LDFLAGS.EXTRA) $(LDFLAGS.GL) -LIB.LIBS := $(GL_LDFLAGS) - -LIB.SRCS := src/glew.c -LIB.SRCS.NAMES := $(notdir $(LIB.SRCS)) - -LIB.OBJS := $(addprefix tmp/$(SYSTEM)/default/static/,$(LIB.SRCS.NAMES)) -LIB.OBJS := $(LIB.OBJS:.c=.o) -LIB.SOBJS := $(addprefix tmp/$(SYSTEM)/default/shared/,$(LIB.SRCS.NAMES)) -LIB.SOBJS := $(LIB.SOBJS:.c=.o) - -LIB.OBJS.MX := $(addprefix tmp/$(SYSTEM)/mx/static/,$(LIB.SRCS.NAMES)) -LIB.OBJS.MX := $(LIB.OBJS.MX:.c=.o) -LIB.SOBJS.MX := $(addprefix tmp/$(SYSTEM)/mx/shared/,$(LIB.SRCS.NAMES)) -LIB.SOBJS.MX := $(LIB.SOBJS.MX:.c=.o) - -glew.lib: lib lib/$(LIB.SHARED) lib/$(LIB.STATIC) glew.pc - -lib: - mkdir lib - -lib/$(LIB.STATIC): $(LIB.OBJS) - $(AR) cr $@ $^ -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -lib/$(LIB.SHARED): $(LIB.SOBJS) - $(LD) $(LDFLAGS.SO) -o $@ $^ $(LIB.LDFLAGS) $(LIB.LIBS) -ifneq ($(LN),) - $(LN) $(LIB.SHARED) lib/$(LIB.SONAME) - $(LN) $(LIB.SHARED) lib/$(LIB.DEVLNK) -endif -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -tmp/$(SYSTEM)/default/static/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_STATIC $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -tmp/$(SYSTEM)/default/shared/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -# Force re-write of glew.pc, GLEW_DEST can vary - -.PHONY: glew.pc - -glew.pc: glew.pc.in - sed \ - -e "s|@prefix@|$(GLEW_DEST)|g" \ - -e "s|@libdir@|$(LIBDIR)|g" \ - -e "s|@exec_prefix@|$(BINDIR)|g" \ - -e "s|@includedir@|$(INCDIR)|g" \ - -e "s|@version@|$(GLEW_VERSION)|g" \ - -e "s|@cflags@||g" \ - -e "s|@libname@|GLEW|g" \ - < $< > $@ - -# GLEW MX static and shared libraries - -glew.lib.mx: lib lib/$(LIB.SHARED.MX) lib/$(LIB.STATIC.MX) glewmx.pc - -lib/$(LIB.STATIC.MX): $(LIB.OBJS.MX) - $(AR) cr $@ $^ - -lib/$(LIB.SHARED.MX): $(LIB.SOBJS.MX) - $(LD) $(LDFLAGS.SO.MX) -o $@ $^ $(LIB.LDFLAGS) $(LIB.LIBS) -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) lib/$(LIB.SONAME.MX) - $(LN) $(LIB.SHARED.MX) lib/$(LIB.DEVLNK.MX) -endif -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -tmp/$(SYSTEM)/mx/static/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_MX -DGLEW_STATIC $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -tmp/$(SYSTEM)/mx/shared/glew.o: src/glew.c include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU -DGLEW_MX $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -# Force re-write of glewmx.pc, GLEW_DEST can vary - -.PHONY: glewmx.pc - -glewmx.pc: glew.pc.in - sed \ - -e "s|@prefix@|$(GLEW_DEST)|g" \ - -e "s|@libdir@|$(LIBDIR)|g" \ - -e "s|@exec_prefix@|$(BINDIR)|g" \ - -e "s|@includedir@|$(INCDIR)|g" \ - -e "s|@version@|$(GLEW_VERSION)|g" \ - -e "s|@cflags@|-DGLEW_MX|g" \ - -e "s|@libname@|GLEWmx|g" \ - < $< > $@ - -# GLEW utility programs - -BIN.LIBS = -Llib $(LDFLAGS.DYNAMIC) -l$(NAME) $(LDFLAGS.EXTRA) $(LDFLAGS.GL) - -GLEWINFO.BIN := glewinfo$(BIN.SUFFIX) -GLEWINFO.BIN.SRC := src/glewinfo.c -GLEWINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(GLEWINFO.BIN.SRC))) -GLEWINFO.BIN.OBJ := $(GLEWINFO.BIN.OBJ:.c=.o) - -VISUALINFO.BIN := visualinfo$(BIN.SUFFIX) -VISUALINFO.BIN.SRC := src/visualinfo.c -VISUALINFO.BIN.OBJ := $(addprefix tmp/$(SYSTEM)/default/shared/,$(notdir $(VISUALINFO.BIN.SRC))) -VISUALINFO.BIN.OBJ := $(VISUALINFO.BIN.OBJ:.c=.o) - -# Don't build glewinfo or visualinfo for NaCL, yet. - -ifneq ($(filter nacl%,$(SYSTEM)),) -glew.bin: glew.lib bin -else -glew.bin: glew.lib bin bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) -endif - -bin: - mkdir bin - -bin/$(GLEWINFO.BIN): $(GLEWINFO.BIN.OBJ) lib/$(LIB.SHARED) - $(CC) $(CFLAGS) -o $@ $(GLEWINFO.BIN.OBJ) $(BIN.LIBS) -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -bin/$(VISUALINFO.BIN): $(VISUALINFO.BIN.OBJ) lib/$(LIB.SHARED) - $(CC) $(CFLAGS) -o $@ $(VISUALINFO.BIN.OBJ) $(BIN.LIBS) -ifneq ($(STRIP),) - $(STRIP) -x $@ -endif - -$(GLEWINFO.BIN.OBJ): $(GLEWINFO.BIN.SRC) include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -$(VISUALINFO.BIN.OBJ): $(VISUALINFO.BIN.SRC) include/GL/glew.h include/GL/wglew.h include/GL/glxew.h - @mkdir -p $(dir $@) - $(CC) -DGLEW_NO_GLU $(CFLAGS) $(CFLAGS.SO) -o $@ -c $< - -# Install targets - -install.all: install install.mx install.bin - -install: install.include install.lib install.pkgconfig - -install.mx: install.include install.lib.mx install.pkgconfig.mx - -install.lib: glew.lib - $(INSTALL) -d -m 0755 $(LIBDIR) -# runtime -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -d -m 0755 $(BINDIR) - $(INSTALL) -m 0755 lib/$(LIB.SHARED) $(BINDIR)/ -else - $(INSTALL) -m 0644 lib/$(LIB.SHARED) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED) $(LIBDIR)/$(LIB.SONAME) -endif - -# development files -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -m 0644 lib/$(LIB.DEVLNK) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED) $(LIBDIR)/$(LIB.DEVLNK) -endif - $(INSTALL) -m 0644 lib/$(LIB.STATIC) $(LIBDIR)/ - -install.lib.mx: glew.lib.mx - $(INSTALL) -d -m 0755 $(LIBDIR) -# runtime -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -d -m 0755 $(BINDIR) - $(INSTALL) -m 0755 lib/$(LIB.SHARED.MX) $(BINDIR)/ -else - $(INSTALL) -m 0644 lib/$(LIB.SHARED.MX) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) $(LIBDIR)/$(LIB.SONAME.MX) -endif -# development files -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(INSTALL) -m 0644 lib/$(LIB.DEVLNK.MX) $(LIBDIR)/ -endif -ifneq ($(LN),) - $(LN) $(LIB.SHARED.MX) $(LIBDIR)/$(LIB.DEVLNK.MX) -endif - $(INSTALL) -m 0644 lib/$(LIB.STATIC.MX) $(LIBDIR)/ - -install.bin: glew.bin - $(INSTALL) -d -m 0755 $(BINDIR) - $(INSTALL) -s -m 0755 bin/$(GLEWINFO.BIN) bin/$(VISUALINFO.BIN) $(BINDIR)/ - -install.include: - $(INSTALL) -d -m 0755 $(INCDIR) - $(INSTALL) -m 0644 include/GL/wglew.h $(INCDIR)/ - $(INSTALL) -m 0644 include/GL/glew.h $(INCDIR)/ - $(INSTALL) -m 0644 include/GL/glxew.h $(INCDIR)/ - -install.pkgconfig: glew.pc - $(INSTALL) -d -m 0755 $(LIBDIR) - $(INSTALL) -d -m 0755 $(LIBDIR)/pkgconfig - $(INSTALL) -m 0644 glew.pc $(LIBDIR)/pkgconfig/ - -install.pkgconfig.mx: glewmx.pc - $(INSTALL) -d -m 0755 $(LIBDIR) - $(INSTALL) -d -m 0755 $(LIBDIR)/pkgconfig - $(INSTALL) -m 0644 glewmx.pc $(LIBDIR)/pkgconfig/ - -uninstall: - $(RM) $(INCDIR)/wglew.h - $(RM) $(INCDIR)/glew.h - $(RM) $(INCDIR)/glxew.h - $(RM) $(LIBDIR)/$(LIB.DEVLNK) $(LIBDIR)/$(LIB.DEVLNK.MX) -ifeq ($(filter-out mingw% cygwin,$(SYSTEM)),) - $(RM) $(BINDIR)/$(LIB.SHARED) $(BINDIR)/$(LIB.SHARED.MX) -else - $(RM) $(LIBDIR)/$(LIB.SONAME) $(LIBDIR)/$(LIB.SONAME.MX) - $(RM) $(LIBDIR)/$(LIB.SHARED) $(LIBDIR)/$(LIB.SHARED.MX) -endif - $(RM) $(LIBDIR)/$(LIB.STATIC) $(LIBDIR)/$(LIB.STATIC.MX) - $(RM) $(BINDIR)/$(GLEWINFO.BIN) $(BINDIR)/$(VISUALINFO.BIN) - -clean: - $(RM) -r tmp/ - $(RM) -r lib/ - $(RM) -r bin/ - $(RM) glew.pc glewmx.pc - -distclean: clean - find . -name \*~ | xargs $(RM) - find . -name .\*.sw\? | xargs $(RM) - -# Distributions - -dist-win32: - $(RM) -r $(DIST_DIR) - mkdir -p $(DIST_DIR) - cp -a include $(DIST_DIR) - cp -a doc $(DIST_DIR) - cp -a *.txt $(DIST_DIR) - cp -a bin $(DIST_DIR) - cp -a lib $(DIST_DIR) - $(RM) -f $(DIST_DIR)/bin/*/*/*.pdb $(DIST_DIR)/bin/*/*/*.exp - $(RM) -f $(DIST_DIR)/bin/*/*/glewinfo-*.exe $(DIST_DIR)/bin/*/*/visualinfo-*.exe - $(RM) -f $(DIST_DIR)/lib/*/*/*.pdb $(DIST_DIR)/lib/*/*/*.exp - unix2dos $(DIST_DIR)/include/GL/*.h - unix2dos $(DIST_DIR)/doc/*.txt - unix2dos $(DIST_DIR)/doc/*.html - unix2dos $(DIST_DIR)/*.txt - rm -f $(DIST_WIN32) - cd $(DIST_DIR)/.. && zip -rv9 $(DIST_WIN32) $(DIST_NAME) - $(RM) -r $(DIST_DIR) - -dist-src: - $(RM) -r $(DIST_DIR) - mkdir -p $(DIST_DIR) - mkdir -p $(DIST_DIR)/bin - mkdir -p $(DIST_DIR)/lib - cp -a auto $(DIST_DIR) - $(RM) -Rf $(DIST_DIR)/auto/registry - cp -a build $(DIST_DIR) - cp -a config $(DIST_DIR) - cp -a src $(DIST_DIR) - cp -a doc $(DIST_DIR) - cp -a include $(DIST_DIR) - cp -a *.txt $(DIST_DIR) - cp -a Makefile $(DIST_DIR) - cp -a glew.pc.in $(DIST_DIR) - find $(DIST_DIR) -name '*.o' | xargs $(RM) -r - find $(DIST_DIR) -name '*~' | xargs $(RM) -r - find $(DIST_DIR) -name CVS -o -name .cvsignore | xargs $(RM) -r - find $(DIST_DIR) -name .svn | xargs $(RM) -r - find $(DIST_DIR) -name "*.patch" | xargs $(RM) -r - dos2unix $(DIST_DIR)/Makefile - dos2unix $(DIST_DIR)/auto/Makefile - dos2unix $(DIST_DIR)/config/* - unix2dos $(DIST_DIR)/auto/core/* - unix2dos $(DIST_DIR)/auto/extensions/* - find $(DIST_DIR) -name '*.h' | xargs unix2dos - find $(DIST_DIR) -name '*.c' | xargs unix2dos - find $(DIST_DIR) -name '*.txt' | xargs unix2dos - find $(DIST_DIR) -name '*.html' | xargs unix2dos - find $(DIST_DIR) -name '*.css' | xargs unix2dos - find $(DIST_DIR) -name '*.sh' | xargs unix2dos - find $(DIST_DIR) -name '*.pl' | xargs unix2dos - find $(DIST_DIR) -name 'Makefile' | xargs unix2dos - find $(DIST_DIR) -name '*.in' | xargs unix2dos - find $(DIST_DIR) -name '*.pm' | xargs unix2dos - find $(DIST_DIR) -name '*.rc' | xargs unix2dos - rm -f $(DIST_SRC_ZIP) - cd $(DIST_DIR)/.. && zip -rv9 $(DIST_SRC_ZIP) $(DIST_NAME) - dos2unix $(DIST_DIR)/Makefile - dos2unix $(DIST_DIR)/auto/Makefile - dos2unix $(DIST_DIR)/config/* - dos2unix $(DIST_DIR)/auto/core/* - dos2unix $(DIST_DIR)/auto/extensions/* - find $(DIST_DIR) -name '*.h' | xargs dos2unix - find $(DIST_DIR) -name '*.c' | xargs dos2unix - find $(DIST_DIR) -name '*.txt' | xargs dos2unix - find $(DIST_DIR) -name '*.html' | xargs dos2unix - find $(DIST_DIR) -name '*.css' | xargs dos2unix - find $(DIST_DIR) -name '*.sh' | xargs dos2unix - find $(DIST_DIR) -name '*.pl' | xargs dos2unix - find $(DIST_DIR) -name 'Makefile' | xargs dos2unix - find $(DIST_DIR) -name '*.in' | xargs dos2unix - find $(DIST_DIR) -name '*.pm' | xargs dos2unix - find $(DIST_DIR) -name '*.rc' | xargs dos2unix - rm -f $(DIST_SRC_TGZ) - cd $(DIST_DIR)/.. && env GZIP=-9 tar cvzf $(DIST_SRC_TGZ) $(DIST_NAME) - $(RM) -r $(DIST_DIR) - -extensions: - $(MAKE) -C auto - -.PHONY: clean distclean tardist dist-win32 dist-src diff --git a/Engine/lib/glew/README.txt b/Engine/lib/glew/README.txt deleted file mode 100644 index 1b19c53523..0000000000 --- a/Engine/lib/glew/README.txt +++ /dev/null @@ -1,18 +0,0 @@ -See doc/index.html for more information. - -If you downloaded the tarball from the GLEW website, you just need to: - - Unix: - - make - - Windows: - - use the project file in build/vc6/ - -If you wish to build GLEW from scratch (update the extension data from -the net or add your own extension information), you need a Unix -environment (including wget, perl, and GNU make). The extension data -is regenerated from the top level source directory with: - - make extensions diff --git a/Engine/lib/glew/TODO.txt b/Engine/lib/glew/TODO.txt deleted file mode 100644 index d2701b652e..0000000000 --- a/Engine/lib/glew/TODO.txt +++ /dev/null @@ -1,12 +0,0 @@ -Major: - - add support for windows mini-client drivers - - add windows installer (msi) - - separate build of static and shared object files (for mingw and - cygwin) - - start designing GLEW 2.0 - -Minor: - - make auto scripts work with text mode cygwin mounts - - add support for all SUN, MTX, and OML extensions - - make auto/Makefile more robust against auto/core/*~ mistakes - - web poll on separating glew, glxew and wglew diff --git a/Engine/lib/glew/auto/Makefile b/Engine/lib/glew/auto/Makefile deleted file mode 100644 index 113313f2a1..0000000000 --- a/Engine/lib/glew/auto/Makefile +++ /dev/null @@ -1,389 +0,0 @@ -## Copyright (C) 2002-2008, Marcelo E. Magallon -## Copyright (C) 2002-2008, Milan Ikits -## -## This program is distributed under the terms and conditions of the GNU -## General Public License Version 2 as published by the Free Software -## Foundation or, at your option, any later version. - -include ../config/version - -#GLEW_SPLIT_SOURCE = yes - -SHELL = bash - -### Use git repository for GL extension specifications - -GIT_CLONE ?= git clone --branch glew https://github.com/nigels-com/glfixes.git - -### -### Conventional desktop OpenGL settings -### - -REGISTRY = registry/gl/specs -EXT = extensions/gl -FILTER = filter_gl_ext.sh -CORE = core/gl -REGISTRY_URL = http://www.opengl.org/registry/ - -### -### Experimental OpenGL ES settings -### - -# REGISTRY = registry/gles -# EXT = extensions/gles -# FILTER = filter_gles_ext.sh -# CORE = core/gles -# REGISTRY_URL = http://www.khronos.org/registry/gles/ - -BIN = bin -SRC = src -BLACKLIST = blacklist - -GL_CORE_SPEC := $(CORE)/GL_VERSION* -GLX_CORE_SPEC := $(CORE)/GLX_VERSION* -ifeq (custom,$(MAKECMDGOALS)) -#GL_CORE_SPEC := $(shell grep GL_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") -GL_EXT_SPEC := $(shell grep "^[ \t]*GL_" custom.txt | grep -v GL_VERSION | perl -pi -e "s=^=$(EXT)/=g;") -WGL_EXT_SPEC := $(shell grep "^[ \t]*WGL_" custom.txt | perl -pi -e "s=^=$(EXT)/=g;") -#GLX_CORE_SPEC := $(shell grep GLX_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;") -GLX_EXT_SPEC := $(shell grep "^[ \t]*GLX_" custom.txt | grep -v GLX_VERSION | perl -pi -e "s=^=$(EXT)/=g;") -else -GL_EXT_SPEC := $(EXT)/GL_* -WGL_EXT_SPEC := $(EXT)/WGL_* -GLX_EXT_SPEC := $(EXT)/GLX_* -endif - -PARSE_SPEC = parse_spec.pl -SYSTEM = $(strip $(shell uname -s)) - -TOP = .. -I.DEST = $(TOP)/include/GL -S.DEST = $(TOP)/src -D.DEST = $(TOP)/doc -B.DEST = $(TOP)/build - -I.TARGETS = \ - $(I.DEST)/glew.h \ - $(I.DEST)/wglew.h \ - $(I.DEST)/glxew.h - -ifeq (yes,$(GLEW_SPLIT_SOURCE)) -S.TARGETS = \ - $(S.DEST)/glew_def.c \ - $(S.DEST)/glew_init.c \ - $(S.DEST)/glew_str.c \ - $(S.DEST)/glewinfo.c -else -S.TARGETS = \ - $(S.DEST)/glew.c \ - $(S.DEST)/glewinfo.c -endif - -D.TARGETS = \ - $(D.DEST)/index.html \ - $(D.DEST)/install.html \ - $(D.DEST)/basic.html \ - $(D.DEST)/advanced.html \ - $(D.DEST)/build.html \ - $(D.DEST)/credits.html \ - $(D.DEST)/log.html \ - $(D.DEST)/glew.html \ - $(D.DEST)/wglew.html \ - $(D.DEST)/glxew.html - -B.TARGETS = \ - $(B.DEST)/glew.rc \ - $(B.DEST)/glewinfo.rc \ - $(B.DEST)/visualinfo.rc - -all custom: $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS) - -registry: $(REGISTRY)/.dummy -ext: $(EXT)/.dummy - -$(REGISTRY)/.dummy: - @echo "--------------------------------------------------------------------" - @echo "Downloading registry" - @echo "--------------------------------------------------------------------" - $(GIT_CLONE) registry - touch $@ - -$(EXT)/.dummy: $(REGISTRY)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating descriptors" - @echo "--------------------------------------------------------------------" - rm -rf $(EXT) - $(BIN)/update_ext.sh $(EXT) $(REGISTRY) $(BLACKLIST) - $(BIN)/$(FILTER) $(EXT) -ifeq ($(patsubst Darwin%,Darwin,$(SYSTEM)), Darwin) - find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ - xargs -J % cp % $(EXT) -else - find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \ - xargs cp --target-directory=$(EXT) -endif - touch $@ - -$(I.DEST)/glew.h: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glew.h" - @echo "--------------------------------------------------------------------" - test -d $(I.DEST) || mkdir -p $(I.DEST) - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/mesa_license.h >> $@ - cat $(SRC)/khronos_license.h >> $@ - cat $(SRC)/glew_head.h >> $@ - $(BIN)/make_header.pl GLAPIENTRY GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_header.pl GLAPIENTRY GL $(GL_EXT_SPEC) >> $@ - echo -e "/* ------------------------------------------------------------------------- */\n\n#if defined(GLEW_MX) && defined(_WIN32)\n#define GLEW_FUN_EXPORT\n#else\n#define GLEW_FUN_EXPORT GLEWAPI\n#endif /* GLEW_MX */\n" >> $@ - echo -e "#if defined(GLEW_MX)\n#define GLEW_VAR_EXPORT\n#else\n#define GLEW_VAR_EXPORT GLEWAPI\n#endif /* GLEW_MX */\n" >> $@ - echo -e "#if defined(GLEW_MX) && defined(_WIN32)\nstruct GLEWContextStruct\n{\n#endif /* GLEW_MX */" >> $@ - $(BIN)/make_struct_fun.pl GLEW_FUN_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e "\n#if defined(GLEW_MX) && !defined(_WIN32)\nstruct GLEWContextStruct\n{\n#endif /* GLEW_MX */\n" >> $@ - $(BIN)/make_struct_var.pl GLEW_VAR_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* GLEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ - perl -e "s/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;\nGLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/" -pi $@ - rm -f $@.bak - cat $(SRC)/glew_tail.h >> $@ - -$(I.DEST)/wglew.h: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating wglew.h" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/khronos_license.h >> $@ - cat $(SRC)/wglew_head.h >> $@ - $(BIN)/make_header.pl WINAPI WGL $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/wglew_mid.h >> $@ - echo -e "\n#ifdef GLEW_MX\nstruct WGLEWContextStruct\n{\n#endif /* GLEW_MX */" >> $@ - $(BIN)/make_struct_fun.pl WGLEW_FUN_EXPORT $(WGL_EXT_SPEC) >> $@ - $(BIN)/make_struct_var.pl WGLEW_VAR_EXPORT $(WGL_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* WGLEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ - cat $(SRC)/wglew_tail.h >> $@ - -$(I.DEST)/glxew.h: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glxew.h" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/mesa_license.h >> $@ - cat $(SRC)/khronos_license.h >> $@ - cat $(SRC)/glxew_head.h >> $@ - $(BIN)/make_header.pl "" GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_header.pl "" GLX $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glxew_mid.h >> $@ - $(BIN)/make_struct_fun.pl GLXEW_FUN_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if defined(GLEW_MX)\nstruct GLXEWContextStruct\n{\n#endif /* GLEW_MX */\n" >> $@ - $(BIN)/make_struct_var.pl GLXEW_VAR_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - echo -e "\n#ifdef GLEW_MX\n}; /* GLXEWContextStruct */\n#endif /* GLEW_MX */\n" >> $@ - perl -e "s/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/" -pi $@ - cat $(SRC)/glxew_tail.h >> $@ - -$(S.DEST)/glew.c: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glew.c" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/glew_head.c >> $@ - echo -e "\n#if !defined(_WIN32) || !defined(GLEW_MX)" >> $@ - $(BIN)/make_def_fun.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !WIN32 || !GLEW_MX */" >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; - echo -e "\nGLboolean __GLEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; - $(BIN)/make_init.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GL $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_gl.c >> $@ - $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ - $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n" >> $@ - echo -e "\n#if defined(_WIN32)" >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@ - $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ - $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; - $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_wgl.c >> $@ - $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}" >> $@; - echo -e "\n#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; - echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ - echo -e "GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */\n" >> $@; - $(BIN)/make_init.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GLX $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_glx.c >> $@ - $(BIN)/make_list.pl $(CORE)/GLX_VERSION_1_3 | grep -v '\"GLX_VERSION' >> $@ - $(BIN)/make_list.pl $(GLX_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}" >> $@ - echo -e "\n#endif /* !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */\n" >> $@; - cat $(SRC)/glew_init_tail.c >> $@ - cat $(SRC)/glew_str_head.c >> $@ - $(BIN)/make_str.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_wgl.c >> $@ - $(BIN)/make_str.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_glx.c >> $@ - $(BIN)/make_str.pl $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_tail.c >> $@ - perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ - perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@ - perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(GLEW_CONTEXT_ARG_VAR_INIT\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }/g" -pi $@ - perl -e "s/\(\(glColorSubTable = /((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)\"glBlendEquation\")) == NULL) || r;\n r = ((glColorSubTable = /g" -pi $@ - rm -f $@.bak - -$(S.DEST)/glew_def.c: $(EXT)/.dummy - cp -f $(SRC)/glew_license.h $@ - echo -e "#include \"glew_utils.h\"\n\n#if !defined(_WIN32) || !defined(GLEW_MX)" >> $@ - $(BIN)/make_def_fun.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#endif /* !WIN32 || !GLEW_MX */" >> $@ - echo -e "\n#if !defined(GLEW_MX)\n\nGLboolean __GLEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@ - echo -e "\n#if defined(_WIN32)" >> $@ - $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@ - $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@ - echo -e "\n#endif /* _WIN32 */" >> $@ - echo -e "\n#endif /* !GLEW_MX */" >> $@; - echo -e "\n#if !defined(_WIN32) && !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#if !defined(GLEW_MX)" >> $@; - echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@ - echo -e "GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;" >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_def_var.pl GLX $(GLX_EXT_SPEC) >> $@ - echo -e "\n#endif /* !GLEW_MX */" >> $@; - echo -e "\n#endif /* !defined(_WIN32) && !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */" >> $@; - rm -f $@.bak - -$(S.DEST)/glew_init.c: $(EXT)/.dummy - cp -f $(SRC)/glew_license.h $@ - echo -e "#include \"glew_utils.h\"\n" >> $@ - $(BIN)/make_init.pl GL $(GL_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GL $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_gl.c >> $@ - $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@ - $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n\n#if defined(_WIN32)\n" >> $@; - $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_wgl.c >> $@ - $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n\n" >> $@; - echo -e "\n#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX)\n" >> $@ - $(BIN)/make_init.pl GLX $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_init.pl GLX $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_init_glx.c >> $@ - $(BIN)/make_list.pl $(CORE)/GLX_VERSION_1_3 | grep -v '\"GLX_VERSION' >> $@ - $(BIN)/make_list.pl $(GLX_EXT_SPEC) >> $@ - echo -e "\n return GLEW_OK;\n}\n\n#endif /* !__APPLE__ || GLEW_APPLE_GLX */\n" >> $@; - cat $(SRC)/glew_init_tail.c >> $@ - perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ - perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@ - perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@ - perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(GLEW_CONTEXT_ARG_VAR_INIT\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }/g" -pi $@ - perl -e "s/\(\(glBlendColor = /((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)\"glBlendEquation\")) == NULL) || r;\n r = ((glBlendColor = /g" -pi $@ - rm -f $@.bak - -$(S.DEST)/glew_str.c: $(EXT)/.dummy - cp -f $(SRC)/glew_license.h $@ - echo -e "\n#include \"glew_utils.h\"\n" >> $@ - cat $(SRC)/glew_str_head.c >> $@ - $(BIN)/make_str.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_wgl.c >> $@ - $(BIN)/make_str.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_glx.c >> $@ - $(BIN)/make_str.pl $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glew_str_tail.c >> $@ -# perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@ -# perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(GLEW_CONTEXT_ARG_VAR_INIT\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); _glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); }/g" -pi $@ - rm -f $@.bak - -$(S.DEST)/glewinfo.c: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glewinfo.c" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/glew_license.h $@ - cat $(SRC)/glewinfo_head.c >> $@ - $(BIN)/make_info.pl $(GL_CORE_SPEC) >> $@ - $(BIN)/make_info.pl $(GL_EXT_SPEC) >> $@ - echo -e "#ifdef _WIN32\n" >> $@ - $(BIN)/make_info.pl $(WGL_EXT_SPEC) >> $@ - echo -e "#else /* _UNIX */\n" >> $@ - $(BIN)/make_info.pl $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_info.pl $(GLX_EXT_SPEC) >> $@ - echo -e "#endif /* _WIN32 */\n" >> $@ - - cat $(SRC)/glewinfo_gl.c >> $@ - $(BIN)/make_info_list.pl $(GL_CORE_SPEC) >> $@ - $(BIN)/make_info_list.pl $(GL_EXT_SPEC) >> $@ - cat $(SRC)/glewinfo_wgl.c >> $@ - $(BIN)/make_info_list.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/glewinfo_glx.c >> $@ - $(BIN)/make_info_list.pl $(GLX_CORE_SPEC) >> $@ - $(BIN)/make_info_list.pl $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/glewinfo_tail.c >> $@ - perl -e 's/"glColorSubTable"/"glBlendEquation", glBlendEquation == NULL);\n glewInfoFunc("glColorSubTable"/g' -pi $@ - rm -f $@.bak - -# Update documentation - -$(D.DEST)/%.html: doc/%.html - @echo "--------------------------------------------------------------------" - @echo "Creating $(@F)" - @echo "--------------------------------------------------------------------" - cat $(SRC)/header.html $< $(SRC)/footer.html | \ - perl -pe 's#
(.*)#\1#' > $@ - -$(D.DEST)/glew.html: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glew.html" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/header.html $@ - echo -e "

Supported OpenGL Extensions

\n" >> $@ - $(BIN)/make_html.pl $(GL_EXT_SPEC) >> $@ - cat $(SRC)/footer.html >> $@ - perl -i -pe 's#(.*)#\1#' $@ - -$(D.DEST)/wglew.html: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating wglew.html" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/header.html $@ - echo -e "

Supported WGL Extensions

\n" >> $@ - $(BIN)/make_html.pl $(WGL_EXT_SPEC) >> $@ - cat $(SRC)/footer.html >> $@ - perl -i -pe 's#(.*)#\1#' $@ - -$(D.DEST)/glxew.html: $(EXT)/.dummy - @echo "--------------------------------------------------------------------" - @echo "Creating glxew.html" - @echo "--------------------------------------------------------------------" - cp -f $(SRC)/header.html $@ - echo -e "

Supported GLX Extensions

\n" >> $@ - $(BIN)/make_html.pl $(GLX_EXT_SPEC) >> $@ - cat $(SRC)/footer.html >> $@ - perl -i -pe 's#(.*)#\1#' $@ - -$(B.DEST)/%.rc: src/%.rc $(EXT)/.dummy - perl -e "s/GLEW_MAJOR/$(GLEW_MAJOR)/g;s/GLEW_MINOR/$(GLEW_MINOR)/g;s/GLEW_MICRO/$(GLEW_MICRO)/g;" -p $< > $@ - -clean: - rm -rf $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS) - -clobber: clean - rm -rf $(EXT) - -destroy: clobber - rm -rf registry diff --git a/Engine/lib/glew/auto/blacklist b/Engine/lib/glew/auto/blacklist deleted file mode 100644 index 6cd0e1149f..0000000000 --- a/Engine/lib/glew/auto/blacklist +++ /dev/null @@ -1,14 +0,0 @@ -EXT/draw_range_elements.txt -EXT/static_vertex_array.txt -EXT/vertex_array_set.alt.txt -EXT/vertex_array_set.txt -EXT/nurbs_tessellator.txt -EXT/object_space_tess.txt -SGI/filter4_parameters.txt -SGIS/texture_color_mask.txt -SGIX/dmbuffer.txt -SGIX/instruments.txt -SGIX/video_source.txt -SGIX/hyperpipe_group.txt -OES/OES_fixed_point.txt -OES/OES_query_matrix.txt diff --git a/Engine/lib/glew/auto/core/gl/GLX_AMD_gpu_association b/Engine/lib/glew/auto/core/gl/GLX_AMD_gpu_association deleted file mode 100644 index 002164e8d9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_AMD_gpu_association +++ /dev/null @@ -1,22 +0,0 @@ -GLX_AMD_gpu_association -http://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt -GLX_AMD_gpu_association - GLX_GPU_VENDOR_AMD 0x1F00 - GLX_GPU_RENDERER_STRING_AMD 0x1F01 - GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 - GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 - GLX_GPU_RAM_AMD 0x21A3 - GLX_GPU_CLOCK_AMD 0x21A4 - GLX_GPU_NUM_PIPES_AMD 0x21A5 - GLX_GPU_NUM_SIMD_AMD 0x21A6 - GLX_GPU_NUM_RB_AMD 0x21A7 - GLX_GPU_NUM_SPI_AMD 0x21A8 - void glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - GLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list) - GLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int* attribList) - Bool glXDeleteAssociatedContextAMD (GLXContext ctx) - unsigned int glXGetContextGPUIDAMD (GLXContext ctx) - GLXContext glXGetCurrentAssociatedContextAMD (void) - unsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int* ids) - int glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void* data) - Bool glXMakeAssociatedContextCurrentAMD (GLXContext ctx) diff --git a/Engine/lib/glew/auto/core/gl/GLX_ARB_get_proc_address b/Engine/lib/glew/auto/core/gl/GLX_ARB_get_proc_address deleted file mode 100644 index 5c066d7d00..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_ARB_get_proc_address +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_get_proc_address -http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.txt -GLX_ARB_get_proc_address - extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); diff --git a/Engine/lib/glew/auto/core/gl/GLX_ATI_pixel_format_float b/Engine/lib/glew/auto/core/gl/GLX_ATI_pixel_format_float deleted file mode 100644 index 854ca716ba..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_ATI_pixel_format_float +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ATI_pixel_format_float - -GLX_ATI_pixel_format_float - GLX_RGBA_FLOAT_ATI_BIT 0x00000100 diff --git a/Engine/lib/glew/auto/core/gl/GLX_ATI_render_texture b/Engine/lib/glew/auto/core/gl/GLX_ATI_render_texture deleted file mode 100644 index 254eb9f3bc..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_ATI_render_texture +++ /dev/null @@ -1,41 +0,0 @@ -GLX_ATI_render_texture - -GLX_ATI_render_texture - GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 - GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 - GLX_TEXTURE_FORMAT_ATI 0x9802 - GLX_TEXTURE_TARGET_ATI 0x9803 - GLX_MIPMAP_TEXTURE_ATI 0x9804 - GLX_TEXTURE_RGB_ATI 0x9805 - GLX_TEXTURE_RGBA_ATI 0x9806 - GLX_NO_TEXTURE_ATI 0x9807 - GLX_TEXTURE_CUBE_MAP_ATI 0x9808 - GLX_TEXTURE_1D_ATI 0x9809 - GLX_TEXTURE_2D_ATI 0x980A - GLX_MIPMAP_LEVEL_ATI 0x980B - GLX_CUBE_MAP_FACE_ATI 0x980C - GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D - GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E - GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 - GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 - GLX_FRONT_LEFT_ATI 0x9813 - GLX_FRONT_RIGHT_ATI 0x9814 - GLX_BACK_LEFT_ATI 0x9815 - GLX_BACK_RIGHT_ATI 0x9816 - GLX_AUX0_ATI 0x9817 - GLX_AUX1_ATI 0x9818 - GLX_AUX2_ATI 0x9819 - GLX_AUX3_ATI 0x981A - GLX_AUX4_ATI 0x981B - GLX_AUX5_ATI 0x981C - GLX_AUX6_ATI 0x981D - GLX_AUX7_ATI 0x981E - GLX_AUX8_ATI 0x981F - GLX_AUX9_ATI 0x9820 - GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 - GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 - void glXBindTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXReleaseTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXDrawableAttribATI (Display *dpy, GLXDrawable draw, const int *attrib_list) diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es2_profile b/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es2_profile deleted file mode 100644 index 3093baa3bd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es2_profile.txt -GLX_EXT_create_context_es2_profile - GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es_profile b/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es_profile deleted file mode 100644 index 845f65ee71..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es_profile.txt -GLX_EXT_create_context_es_profile - GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float b/Engine/lib/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float deleted file mode 100644 index 7c7822d81a..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float +++ /dev/null @@ -1,5 +0,0 @@ -GLX_EXT_fbconfig_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GLX_EXT_fbconfig_packed_float - GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 - GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 diff --git a/Engine/lib/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB deleted file mode 100644 index f51c484afd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GLX_EXT_framebuffer_sRGB - GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 diff --git a/Engine/lib/glew/auto/core/gl/GLX_MESA_swap_control b/Engine/lib/glew/auto/core/gl/GLX_MESA_swap_control deleted file mode 100644 index 4416519379..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_MESA_swap_control +++ /dev/null @@ -1,5 +0,0 @@ -GLX_MESA_swap_control -http://cgit.freedesktop.org/mesa/mesa/plain/docs/MESA_swap_control.spec -GLX_MESA_swap_control - int glXGetSwapIntervalMESA (void) - int glXSwapIntervalMESA (unsigned int interval) diff --git a/Engine/lib/glew/auto/core/gl/GLX_NV_float_buffer b/Engine/lib/glew/auto/core/gl/GLX_NV_float_buffer deleted file mode 100644 index cc9185ee94..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_NV_float_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GLX_NV_float_buffer -http://cvs1.nvidia.com/inc/GL/glxtokens.h -GLX_NV_float_buffer - GLX_FLOAT_COMPONENTS_NV 0x20B0 diff --git a/Engine/lib/glew/auto/core/gl/GLX_NV_vertex_array_range b/Engine/lib/glew/auto/core/gl/GLX_NV_vertex_array_range deleted file mode 100644 index 11afe17406..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -GLX_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -GLX_NV_vertex_array_range - void * glXAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void glXFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIS_shared_multisample b/Engine/lib/glew/auto/core/gl/GLX_SGIS_shared_multisample deleted file mode 100644 index 274e90f76e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIS_shared_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIS_shared_multisample - -GLX_SGIS_shared_multisample - GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 - GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIX_hyperpipe b/Engine/lib/glew/auto/core/gl/GLX_SGIX_hyperpipe deleted file mode 100644 index 79ec30295c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIX_hyperpipe +++ /dev/null @@ -1,25 +0,0 @@ -GLX_SGIX_hyperpipe -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/hyperpipe_group.txt -GLX_SGIX_hyperpipe - GLX_HYPERPIPE_ID_SGIX 0x8030 - GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 - GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 - GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 - GLX_PIPE_RECT_SGIX 0x00000001 - GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 - GLX_HYPERPIPE_STEREO_SGIX 0x00000003 - GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 - GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 - GLX_BAD_HYPERPIPE_SGIX 92 - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; - GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes) - int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId) - GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes) - int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId) - int glXBindHyperpipeSGIX (Display *dpy, int hpId) - int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList) - int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList) - int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_barrier b/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_barrier deleted file mode 100644 index 57dd60dbb0..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_barrier +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIX_swap_barrier -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_barrier.txt -GLX_SGIX_swap_barrier - void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier) - Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_group b/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_group deleted file mode 100644 index 3530604605..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGIX_swap_group +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIX_swap_group -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_group.txt -GLX_SGIX_swap_group - void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SGI_video_sync b/Engine/lib/glew/auto/core/gl/GLX_SGI_video_sync deleted file mode 100644 index dcdb968c65..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SGI_video_sync +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGI_video_sync -http://www.opengl.org/registry/specs/SGI/video_sync.txt -GLX_SGI_video_sync - int glXGetVideoSyncSGI (unsigned int* count) - int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int* count) diff --git a/Engine/lib/glew/auto/core/gl/GLX_SUN_video_resize b/Engine/lib/glew/auto/core/gl/GLX_SUN_video_resize deleted file mode 100644 index 0a0cefe3db..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_SUN_video_resize +++ /dev/null @@ -1,7 +0,0 @@ -GLX_SUN_video_resize -http://wwws.sun.com/software/graphics/opengl/extensions/glx_sun_video_resize.txt -GLX_SUN_video_resize - GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD - GLX_VIDEO_RESIZE_SUN 0x8171 - int glXVideoResizeSUN (Display* display, GLXDrawable window, float factor) - int glXGetVideoResizeSUN (Display* display, GLXDrawable window, float* factor) diff --git a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 b/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 deleted file mode 100644 index 39d7a09bc8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_2 +++ /dev/null @@ -1,4 +0,0 @@ -GLX_VERSION_1_2 -http://www.opengl.org/documentation/specs/glx/glx1.2.ps -GLX_VERSION_1_2 - Display* glXGetCurrentDisplay (void) diff --git a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 b/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 deleted file mode 100644 index 46eedb979c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_3 +++ /dev/null @@ -1,82 +0,0 @@ -GLX_VERSION_1_3 -http://www.opengl.org/documentation/specs/glx/glx1.3.pdf -GLX_VERSION_1_3 - GLX_WINDOW_BIT 0x00000001 - GLX_PIXMAP_BIT 0x00000002 - GLX_PBUFFER_BIT 0x00000004 - GLX_RGBA_BIT 0x00000001 - GLX_COLOR_INDEX_BIT 0x00000002 - GLX_PBUFFER_CLOBBER_MASK 0x08000000 - GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 - GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 - GLX_BACK_LEFT_BUFFER_BIT 0x00000004 - GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 - GLX_AUX_BUFFERS_BIT 0x00000010 - GLX_DEPTH_BUFFER_BIT 0x00000020 - GLX_STENCIL_BUFFER_BIT 0x00000040 - GLX_ACCUM_BUFFER_BIT 0x00000080 - GLX_CONFIG_CAVEAT 0x20 - GLX_X_VISUAL_TYPE 0x22 - GLX_TRANSPARENT_TYPE 0x23 - GLX_TRANSPARENT_INDEX_VALUE 0x24 - GLX_TRANSPARENT_RED_VALUE 0x25 - GLX_TRANSPARENT_GREEN_VALUE 0x26 - GLX_TRANSPARENT_BLUE_VALUE 0x27 - GLX_TRANSPARENT_ALPHA_VALUE 0x28 - GLX_DONT_CARE 0xFFFFFFFF - GLX_NONE 0x8000 - GLX_SLOW_CONFIG 0x8001 - GLX_TRUE_COLOR 0x8002 - GLX_DIRECT_COLOR 0x8003 - GLX_PSEUDO_COLOR 0x8004 - GLX_STATIC_COLOR 0x8005 - GLX_GRAY_SCALE 0x8006 - GLX_STATIC_GRAY 0x8007 - GLX_TRANSPARENT_RGB 0x8008 - GLX_TRANSPARENT_INDEX 0x8009 - GLX_VISUAL_ID 0x800B - GLX_SCREEN 0x800C - GLX_NON_CONFORMANT_CONFIG 0x800D - GLX_DRAWABLE_TYPE 0x8010 - GLX_RENDER_TYPE 0x8011 - GLX_X_RENDERABLE 0x8012 - GLX_FBCONFIG_ID 0x8013 - GLX_RGBA_TYPE 0x8014 - GLX_COLOR_INDEX_TYPE 0x8015 - GLX_MAX_PBUFFER_WIDTH 0x8016 - GLX_MAX_PBUFFER_HEIGHT 0x8017 - GLX_MAX_PBUFFER_PIXELS 0x8018 - GLX_PRESERVED_CONTENTS 0x801B - GLX_LARGEST_PBUFFER 0x801C - GLX_WIDTH 0x801D - GLX_HEIGHT 0x801E - GLX_EVENT_MASK 0x801F - GLX_DAMAGED 0x8020 - GLX_SAVED 0x8021 - GLX_WINDOW 0x8022 - GLX_PBUFFER 0x8023 - GLX_PBUFFER_HEIGHT 0x8040 - GLX_PBUFFER_WIDTH 0x8041 - GLXFBConfig* glXChooseFBConfig (Display *dpy, int screen, const int *attrib_list, int *nelements) - GLXFBConfig* glXGetFBConfigs (Display *dpy, int screen, int *nelements) - XVisualInfo* glXGetVisualFromFBConfig (Display *dpy, GLXFBConfig config) - int glXGetFBConfigAttrib (Display *dpy, GLXFBConfig config, int attribute, int *value) - GLXWindow glXCreateWindow (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list) - void glXDestroyWindow (Display *dpy, GLXWindow win) - GLXPixmap glXCreatePixmap (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list) - void glXDestroyPixmap (Display *dpy, GLXPixmap pixmap) - GLXPbuffer glXCreatePbuffer (Display *dpy, GLXFBConfig config, const int *attrib_list) - void glXDestroyPbuffer (Display *dpy, GLXPbuffer pbuf) - void glXQueryDrawable (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value) - GLXContext glXCreateNewContext (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) - Bool glXMakeContextCurrent (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx) - GLXDrawable glXGetCurrentReadDrawable (void) - int glXQueryContext (Display *dpy, GLXContext ctx, int attribute, int *value) - void glXSelectEvent (Display *dpy, GLXDrawable draw, unsigned long event_mask) - void glXGetSelectedEvent (Display *dpy, GLXDrawable draw, unsigned long *event_mask) - typedef XID GLXWindow - typedef XID GLXPbuffer - typedef XID GLXFBConfigID - typedef struct __GLXFBConfigRec *GLXFBConfig - typedef struct { int event_type; int draw_type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; unsigned int buffer_mask; unsigned int aux_buffer; int x, y; int width, height; int count; } GLXPbufferClobberEvent; - typedef union __GLXEvent { GLXPbufferClobberEvent glxpbufferclobber; long pad[24]; } GLXEvent; diff --git a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 b/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 deleted file mode 100644 index 138262161e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GLX_VERSION_1_4 +++ /dev/null @@ -1,6 +0,0 @@ -GLX_VERSION_1_4 -http://www.opengl.org/documentation/specs/glx/glx1.4.pdf -GLX_VERSION_1_4 - GLX_SAMPLE_BUFFERS 100000 - GLX_SAMPLES 100001 - extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); diff --git a/Engine/lib/glew/auto/core/gl/GL_APPLE_float_pixels b/Engine/lib/glew/auto/core/gl/GL_APPLE_float_pixels deleted file mode 100644 index 2bf7458089..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_APPLE_float_pixels +++ /dev/null @@ -1,17 +0,0 @@ -GL_APPLE_float_pixels -http://www.opengl.org/registry/specs/APPLE/float_pixels.txt -GL_APPLE_float_pixels - GL_HALF_APPLE 0x140B - GL_COLOR_FLOAT_APPLE 0x8A0F - GL_RGBA_FLOAT32_APPLE 0x8814 - GL_RGB_FLOAT32_APPLE 0x8815 - GL_ALPHA_FLOAT32_APPLE 0x8816 - GL_INTENSITY_FLOAT32_APPLE 0x8817 - GL_LUMINANCE_FLOAT32_APPLE 0x8818 - GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 - GL_RGBA_FLOAT16_APPLE 0x881A - GL_RGB_FLOAT16_APPLE 0x881B - GL_ALPHA_FLOAT16_APPLE 0x881C - GL_INTENSITY_FLOAT16_APPLE 0x881D - GL_LUMINANCE_FLOAT16_APPLE 0x881E - GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F diff --git a/Engine/lib/glew/auto/core/gl/GL_APPLE_pixel_buffer b/Engine/lib/glew/auto/core/gl/GL_APPLE_pixel_buffer deleted file mode 100644 index 7449f2918e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_APPLE_pixel_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_pixel_buffer - -GL_APPLE_pixel_buffer - GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 diff --git a/Engine/lib/glew/auto/core/gl/GL_APPLE_texture_range b/Engine/lib/glew/auto/core/gl/GL_APPLE_texture_range deleted file mode 100644 index 7ca9b9bad8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_APPLE_texture_range +++ /dev/null @@ -1,12 +0,0 @@ -GL_APPLE_texture_range -http://www.opengl.org/registry/specs/APPLE/texture_range.txt -GL_APPLE_texture_range - GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC - GL_STORAGE_PRIVATE_APPLE 0x85BD - GL_STORAGE_CACHED_APPLE 0x85BE - GL_STORAGE_SHARED_APPLE 0x85BF - GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 - GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 - void glTextureRangeAPPLE (GLenum target, GLsizei length, GLvoid *pointer) - void glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid **params) - diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_draw_instanced b/Engine/lib/glew/auto/core/gl/GL_ARB_draw_instanced deleted file mode 100644 index 4140beaaa6..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_draw_instanced +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_draw_instanced -http://www.opengl.org/registry/specs/ARB/draw_instanced.txt -GL_ARB_draw_instanced diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_imaging b/Engine/lib/glew/auto/core/gl/GL_ARB_imaging deleted file mode 100644 index 0efd0c1b8e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_imaging +++ /dev/null @@ -1,112 +0,0 @@ -GL_ARB_imaging - -GL_ARB_imaging - GL_CONSTANT_COLOR 0x8001 - GL_ONE_MINUS_CONSTANT_COLOR 0x8002 - GL_CONSTANT_ALPHA 0x8003 - GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 - GL_BLEND_COLOR 0x8005 - GL_FUNC_ADD 0x8006 - GL_MIN 0x8007 - GL_MAX 0x8008 - GL_BLEND_EQUATION 0x8009 - GL_FUNC_SUBTRACT 0x800A - GL_FUNC_REVERSE_SUBTRACT 0x800B - GL_CONVOLUTION_1D 0x8010 - GL_CONVOLUTION_2D 0x8011 - GL_SEPARABLE_2D 0x8012 - GL_CONVOLUTION_BORDER_MODE 0x8013 - GL_CONVOLUTION_FILTER_SCALE 0x8014 - GL_CONVOLUTION_FILTER_BIAS 0x8015 - GL_REDUCE 0x8016 - GL_CONVOLUTION_FORMAT 0x8017 - GL_CONVOLUTION_WIDTH 0x8018 - GL_CONVOLUTION_HEIGHT 0x8019 - GL_MAX_CONVOLUTION_WIDTH 0x801A - GL_MAX_CONVOLUTION_HEIGHT 0x801B - GL_POST_CONVOLUTION_RED_SCALE 0x801C - GL_POST_CONVOLUTION_GREEN_SCALE 0x801D - GL_POST_CONVOLUTION_BLUE_SCALE 0x801E - GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F - GL_POST_CONVOLUTION_RED_BIAS 0x8020 - GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 - GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 - GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 - GL_HISTOGRAM 0x8024 - GL_PROXY_HISTOGRAM 0x8025 - GL_HISTOGRAM_WIDTH 0x8026 - GL_HISTOGRAM_FORMAT 0x8027 - GL_HISTOGRAM_RED_SIZE 0x8028 - GL_HISTOGRAM_GREEN_SIZE 0x8029 - GL_HISTOGRAM_BLUE_SIZE 0x802A - GL_HISTOGRAM_ALPHA_SIZE 0x802B - GL_HISTOGRAM_LUMINANCE_SIZE 0x802C - GL_HISTOGRAM_SINK 0x802D - GL_MINMAX 0x802E - GL_MINMAX_FORMAT 0x802F - GL_MINMAX_SINK 0x8030 - GL_TABLE_TOO_LARGE 0x8031 - GL_COLOR_MATRIX 0x80B1 - GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 - GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 - GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 - GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 - GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 - GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 - GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 - GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 - GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA - GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB - GL_COLOR_TABLE 0x80D0 - GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 - GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 - GL_PROXY_COLOR_TABLE 0x80D3 - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 - GL_COLOR_TABLE_SCALE 0x80D6 - GL_COLOR_TABLE_BIAS 0x80D7 - GL_COLOR_TABLE_FORMAT 0x80D8 - GL_COLOR_TABLE_WIDTH 0x80D9 - GL_COLOR_TABLE_RED_SIZE 0x80DA - GL_COLOR_TABLE_GREEN_SIZE 0x80DB - GL_COLOR_TABLE_BLUE_SIZE 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF - GL_IGNORE_BORDER 0x8150 - GL_CONSTANT_BORDER 0x8151 - GL_WRAP_BORDER 0x8152 - GL_REPLICATE_BORDER 0x8153 - GL_CONVOLUTION_BORDER_COLOR 0x8154 - void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) - void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) - void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params) - void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) - void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table) - void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params) - void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) - void glResetHistogram (GLenum target) - void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params) - void glMinmax (GLenum target, GLenum internalformat, GLboolean sink) - void glResetMinmax (GLenum target) - void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params) - void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params) - void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glConvolutionParameteri (GLenum target, GLenum pname, GLint params) - void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params) - void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) - void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image) - void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params) - void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) - void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) - void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_instanced_arrays b/Engine/lib/glew/auto/core/gl/GL_ARB_instanced_arrays deleted file mode 100644 index b1c88734d1..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_instanced_arrays +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_instanced_arrays -http://www.opengl.org/registry/specs/ARB/instanced_arrays.txt -GL_ARB_instanced_arrays - GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE - void glVertexAttribDivisorARB (GLuint index, GLuint divisor) - void glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_internalformat_query2 b/Engine/lib/glew/auto/core/gl/GL_ARB_internalformat_query2 deleted file mode 100644 index 1210966327..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_internalformat_query2 +++ /dev/null @@ -1,103 +0,0 @@ -GL_ARB_internalformat_query2 -http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt -GL_ARB_internalformat_query2 - GL_INTERNALFORMAT_SUPPORTED 0x826F - GL_INTERNALFORMAT_PREFERRED 0x8270 - GL_INTERNALFORMAT_RED_SIZE 0x8271 - GL_INTERNALFORMAT_GREEN_SIZE 0x8272 - GL_INTERNALFORMAT_BLUE_SIZE 0x8273 - GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 - GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 - GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 - GL_INTERNALFORMAT_SHARED_SIZE 0x8277 - GL_INTERNALFORMAT_RED_TYPE 0x8278 - GL_INTERNALFORMAT_GREEN_TYPE 0x8279 - GL_INTERNALFORMAT_BLUE_TYPE 0x827A - GL_INTERNALFORMAT_ALPHA_TYPE 0x827B - GL_INTERNALFORMAT_DEPTH_TYPE 0x827C - GL_INTERNALFORMAT_STENCIL_TYPE 0x827D - GL_MAX_WIDTH 0x827E - GL_MAX_HEIGHT 0x827F - GL_MAX_DEPTH 0x8280 - GL_MAX_LAYERS 0x8281 - GL_MAX_COMBINED_DIMENSIONS 0x8282 - GL_COLOR_COMPONENTS 0x8283 - GL_DEPTH_COMPONENTS 0x8284 - GL_STENCIL_COMPONENTS 0x8285 - GL_COLOR_RENDERABLE 0x8286 - GL_DEPTH_RENDERABLE 0x8287 - GL_STENCIL_RENDERABLE 0x8288 - GL_FRAMEBUFFER_RENDERABLE 0x8289 - GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A - GL_FRAMEBUFFER_BLEND 0x828B - GL_READ_PIXELS 0x828C - GL_READ_PIXELS_FORMAT 0x828D - GL_READ_PIXELS_TYPE 0x828E - GL_TEXTURE_IMAGE_FORMAT 0x828F - GL_TEXTURE_IMAGE_TYPE 0x8290 - GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 - GL_GET_TEXTURE_IMAGE_TYPE 0x8292 - GL_MIPMAP 0x8293 - GL_MANUAL_GENERATE_MIPMAP 0x8294 - GL_AUTO_GENERATE_MIPMAP 0x8295 - GL_COLOR_ENCODING 0x8296 - GL_SRGB_READ 0x8297 - GL_SRGB_WRITE 0x8298 - GL_SRGB_DECODE_ARB 0x8299 - GL_FILTER 0x829A - GL_VERTEX_TEXTURE 0x829B - GL_TESS_CONTROL_TEXTURE 0x829C - GL_TESS_EVALUATION_TEXTURE 0x829D - GL_GEOMETRY_TEXTURE 0x829E - GL_FRAGMENT_TEXTURE 0x829F - GL_COMPUTE_TEXTURE 0x82A0 - GL_TEXTURE_SHADOW 0x82A1 - GL_TEXTURE_GATHER 0x82A2 - GL_TEXTURE_GATHER_SHADOW 0x82A3 - GL_SHADER_IMAGE_LOAD 0x82A4 - GL_SHADER_IMAGE_STORE 0x82A5 - GL_SHADER_IMAGE_ATOMIC 0x82A6 - GL_IMAGE_TEXEL_SIZE 0x82A7 - GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 - GL_IMAGE_PIXEL_FORMAT 0x82A9 - GL_IMAGE_PIXEL_TYPE 0x82AA - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF - GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 - GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 - GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 - GL_CLEAR_BUFFER 0x82B4 - GL_TEXTURE_VIEW 0x82B5 - GL_VIEW_COMPATIBILITY_CLASS 0x82B6 - GL_FULL_SUPPORT 0x82B7 - GL_CAVEAT_SUPPORT 0x82B8 - GL_IMAGE_CLASS_4_X_32 0x82B9 - GL_IMAGE_CLASS_2_X_32 0x82BA - GL_IMAGE_CLASS_1_X_32 0x82BB - GL_IMAGE_CLASS_4_X_16 0x82BC - GL_IMAGE_CLASS_2_X_16 0x82BD - GL_IMAGE_CLASS_1_X_16 0x82BE - GL_IMAGE_CLASS_4_X_8 0x82BF - GL_IMAGE_CLASS_2_X_8 0x82C0 - GL_IMAGE_CLASS_1_X_8 0x82C1 - GL_IMAGE_CLASS_11_11_10 0x82C2 - GL_IMAGE_CLASS_10_10_10_2 0x82C3 - GL_VIEW_CLASS_128_BITS 0x82C4 - GL_VIEW_CLASS_96_BITS 0x82C5 - GL_VIEW_CLASS_64_BITS 0x82C6 - GL_VIEW_CLASS_48_BITS 0x82C7 - GL_VIEW_CLASS_32_BITS 0x82C8 - GL_VIEW_CLASS_24_BITS 0x82C9 - GL_VIEW_CLASS_16_BITS 0x82CA - GL_VIEW_CLASS_8_BITS 0x82CB - GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC - GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD - GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE - GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF - GL_VIEW_CLASS_RGTC1_RED 0x82D0 - GL_VIEW_CLASS_RGTC2_RG 0x82D1 - GL_VIEW_CLASS_BPTC_UNORM 0x82D2 - GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 - void glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_matrix_palette b/Engine/lib/glew/auto/core/gl/GL_ARB_matrix_palette deleted file mode 100644 index 4b67c15cf4..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_matrix_palette +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_matrix_palette -http://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt -GL_ARB_matrix_palette - GL_MATRIX_PALETTE_ARB 0x8840 - GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 - GL_MAX_PALETTE_MATRICES_ARB 0x8842 - GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 - GL_MATRIX_INDEX_ARRAY_ARB 0x8844 - GL_CURRENT_MATRIX_INDEX_ARB 0x8845 - GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 - GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 - GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 - GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 - void glCurrentPaletteMatrixARB (GLint index) - void glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glMatrixIndexubvARB (GLint size, GLubyte *indices) - void glMatrixIndexusvARB (GLint size, GLushort *indices) - void glMatrixIndexuivARB (GLint size, GLuint *indices) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_multitexture b/Engine/lib/glew/auto/core/gl/GL_ARB_multitexture deleted file mode 100644 index ee80791831..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_multitexture +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_multitexture -http://oss.sgi.com/projects/ogl-sample/registry/ARB/multitexture.txt -GL_ARB_multitexture - GL_TEXTURE0_ARB 0x84C0 - GL_TEXTURE1_ARB 0x84C1 - GL_TEXTURE2_ARB 0x84C2 - GL_TEXTURE3_ARB 0x84C3 - GL_TEXTURE4_ARB 0x84C4 - GL_TEXTURE5_ARB 0x84C5 - GL_TEXTURE6_ARB 0x84C6 - GL_TEXTURE7_ARB 0x84C7 - GL_TEXTURE8_ARB 0x84C8 - GL_TEXTURE9_ARB 0x84C9 - GL_TEXTURE10_ARB 0x84CA - GL_TEXTURE11_ARB 0x84CB - GL_TEXTURE12_ARB 0x84CC - GL_TEXTURE13_ARB 0x84CD - GL_TEXTURE14_ARB 0x84CE - GL_TEXTURE15_ARB 0x84CF - GL_TEXTURE16_ARB 0x84D0 - GL_TEXTURE17_ARB 0x84D1 - GL_TEXTURE18_ARB 0x84D2 - GL_TEXTURE19_ARB 0x84D3 - GL_TEXTURE20_ARB 0x84D4 - GL_TEXTURE21_ARB 0x84D5 - GL_TEXTURE22_ARB 0x84D6 - GL_TEXTURE23_ARB 0x84D7 - GL_TEXTURE24_ARB 0x84D8 - GL_TEXTURE25_ARB 0x84D9 - GL_TEXTURE26_ARB 0x84DA - GL_TEXTURE27_ARB 0x84DB - GL_TEXTURE28_ARB 0x84DC - GL_TEXTURE29_ARB 0x84DD - GL_TEXTURE30_ARB 0x84DE - GL_TEXTURE31_ARB 0x84DF - GL_ACTIVE_TEXTURE_ARB 0x84E0 - GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 - GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - void glActiveTextureARB (GLenum texture) - void glClientActiveTextureARB (GLenum texture) - void glMultiTexCoord1dARB (GLenum target, GLdouble s) - void glMultiTexCoord1dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord1fARB (GLenum target, GLfloat s) - void glMultiTexCoord1fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord1iARB (GLenum target, GLint s) - void glMultiTexCoord1ivARB (GLenum target, const GLint *v) - void glMultiTexCoord1sARB (GLenum target, GLshort s) - void glMultiTexCoord1svARB (GLenum target, const GLshort *v) - void glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t) - void glMultiTexCoord2dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t) - void glMultiTexCoord2fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord2iARB (GLenum target, GLint s, GLint t) - void glMultiTexCoord2ivARB (GLenum target, const GLint *v) - void glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t) - void glMultiTexCoord2svARB (GLenum target, const GLshort *v) - void glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r) - void glMultiTexCoord3dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r) - void glMultiTexCoord3fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r) - void glMultiTexCoord3ivARB (GLenum target, const GLint *v) - void glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r) - void glMultiTexCoord3svARB (GLenum target, const GLshort *v) - void glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) - void glMultiTexCoord4dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) - void glMultiTexCoord4fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q) - void glMultiTexCoord4ivARB (GLenum target, const GLint *v) - void glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) - void glMultiTexCoord4svARB (GLenum target, const GLshort *v) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_robustness b/Engine/lib/glew/auto/core/gl/GL_ARB_robustness deleted file mode 100644 index cdeeb4ff94..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_robustness +++ /dev/null @@ -1,30 +0,0 @@ -GL_ARB_robustness -http://www.opengl.org/registry/specs/ARB/robustness.txt -GL_ARB_robustness - GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 - GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - GL_GUILTY_CONTEXT_RESET_ARB 0x8253 - GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 - GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 - GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - GL_NO_RESET_NOTIFICATION_ARB 0x8261 - GLenum glGetGraphicsResetStatusARB (void) - void glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table) - void glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void* img) - void glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image) - void glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v) - void glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v) - void glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint* v) - void glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat* values) - void glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint* values) - void glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort* values) - void glGetnPolygonStippleARB (GLsizei bufSize, GLubyte* pattern) - void glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, GLvoid*column, GLvoid*span) - void glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img) - void glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble* params) - void glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat* params) - void glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint* params) - void glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint* params) - void glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_separate_shader_objects b/Engine/lib/glew/auto/core/gl/GL_ARB_separate_shader_objects deleted file mode 100644 index b90b68ab4e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_separate_shader_objects +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_separate_shader_objects -http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt -GL_ARB_separate_shader_objects - GL_VERTEX_SHADER_BIT 0x00000001 - GL_FRAGMENT_SHADER_BIT 0x00000002 - GL_GEOMETRY_SHADER_BIT 0x00000004 - GL_TESS_CONTROL_SHADER_BIT 0x00000008 - GL_TESS_EVALUATION_SHADER_BIT 0x00000010 - GL_PROGRAM_SEPARABLE 0x8258 - GL_ACTIVE_PROGRAM 0x8259 - GL_PROGRAM_PIPELINE_BINDING 0x825A - GL_ALL_SHADER_BITS 0xFFFFFFFF - void glActiveShaderProgram (GLuint pipeline, GLuint program) - void glBindProgramPipeline (GLuint pipeline) - GLuint glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar ** strings) - void glDeleteProgramPipelines (GLsizei n, const GLuint* pipelines) - void glGenProgramPipelines (GLsizei n, GLuint* pipelines) - void glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar *infoLog) - void glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint* params) - GLboolean glIsProgramPipeline (GLuint pipeline) - void glProgramUniform1d (GLuint program, GLint location, GLdouble x) - void glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform1f (GLuint program, GLint location, GLfloat x) - void glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform1i (GLuint program, GLint location, GLint x) - void glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform1ui (GLuint program, GLint location, GLuint x) - void glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform2d (GLuint program, GLint location, GLdouble x, GLdouble y) - void glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform2f (GLuint program, GLint location, GLfloat x, GLfloat y) - void glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform2i (GLuint program, GLint location, GLint x, GLint y) - void glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform2ui (GLuint program, GLint location, GLuint x, GLuint y) - void glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform3d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z) - void glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform3f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z) - void glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform3i (GLuint program, GLint location, GLint x, GLint y, GLint z) - void glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform3ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z) - void glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform4d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform4f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform4i (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w) - void glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform4ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program) - void glValidateProgramPipeline (GLuint pipeline) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit b/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit deleted file mode 100644 index a30aa06252..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_vertex_attrib_64bit -http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt -GL_ARB_vertex_attrib_64bit - void glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble* params) - void glVertexAttribL1d (GLuint index, GLdouble x) - void glVertexAttribL1dv (GLuint index, const GLdouble* v) - void glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y) - void glVertexAttribL2dv (GLuint index, const GLdouble* v) - void glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttribL3dv (GLuint index, const GLdouble* v) - void glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttribL4dv (GLuint index, const GLdouble* v) - void glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_blend b/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_blend deleted file mode 100644 index 8da2c785b9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ARB_vertex_blend +++ /dev/null @@ -1,55 +0,0 @@ -GL_ARB_vertex_blend -http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_blend.txt -GL_ARB_vertex_blend - GL_MAX_VERTEX_UNITS_ARB 0x86A4 - GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 - GL_WEIGHT_SUM_UNITY_ARB 0x86A6 - GL_VERTEX_BLEND_ARB 0x86A7 - GL_CURRENT_WEIGHT_ARB 0x86A8 - GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 - GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA - GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB - GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC - GL_WEIGHT_ARRAY_ARB 0x86AD - GL_MODELVIEW0_ARB 0x1700 - GL_MODELVIEW1_ARB 0x850A - GL_MODELVIEW2_ARB 0x8722 - GL_MODELVIEW3_ARB 0x8723 - GL_MODELVIEW4_ARB 0x8724 - GL_MODELVIEW5_ARB 0x8725 - GL_MODELVIEW6_ARB 0x8726 - GL_MODELVIEW7_ARB 0x8727 - GL_MODELVIEW8_ARB 0x8728 - GL_MODELVIEW9_ARB 0x8729 - GL_MODELVIEW10_ARB 0x872A - GL_MODELVIEW11_ARB 0x872B - GL_MODELVIEW12_ARB 0x872C - GL_MODELVIEW13_ARB 0x872D - GL_MODELVIEW14_ARB 0x872E - GL_MODELVIEW15_ARB 0x872F - GL_MODELVIEW16_ARB 0x8730 - GL_MODELVIEW17_ARB 0x8731 - GL_MODELVIEW18_ARB 0x8732 - GL_MODELVIEW19_ARB 0x8733 - GL_MODELVIEW20_ARB 0x8734 - GL_MODELVIEW21_ARB 0x8735 - GL_MODELVIEW22_ARB 0x8736 - GL_MODELVIEW23_ARB 0x8737 - GL_MODELVIEW24_ARB 0x8738 - GL_MODELVIEW25_ARB 0x8739 - GL_MODELVIEW26_ARB 0x873A - GL_MODELVIEW27_ARB 0x873B - GL_MODELVIEW28_ARB 0x873C - GL_MODELVIEW29_ARB 0x873D - GL_MODELVIEW30_ARB 0x873E - GL_MODELVIEW31_ARB 0x873F - void glWeightbvARB (GLint size, GLbyte *weights) - void glWeightsvARB (GLint size, GLshort *weights) - void glWeightivARB (GLint size, GLint *weights) - void glWeightfvARB (GLint size, GLfloat *weights) - void glWeightdvARB (GLint size, GLdouble *weights) - void glWeightubvARB (GLint size, GLubyte *weights) - void glWeightusvARB (GLint size, GLushort *weights) - void glWeightuivARB (GLint size, GLuint *weights) - void glWeightPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glVertexBlendARB (GLint count) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_point_sprites b/Engine/lib/glew/auto/core/gl/GL_ATIX_point_sprites deleted file mode 100644 index 0f4f574131..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_point_sprites +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATIX_point_sprites -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_point_sprites - GL_TEXTURE_POINT_MODE_ATIX 0x60B0 - GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 - GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 - GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 - GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 - GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_combine3 b/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_combine3 deleted file mode 100644 index 537426b95d..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_combine3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_combine3 -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_texture_env_combine3 - GL_MODULATE_ADD_ATIX 0x8744 - GL_MODULATE_SIGNED_ADD_ATIX 0x8745 - GL_MODULATE_SUBTRACT_ATIX 0x8746 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_route b/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_route deleted file mode 100644 index 939ae09b95..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_texture_env_route +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_route -http://www.ati.com/developer/sdk/RadeonSDK/Html/Info/ATIX_texture_env_route.txt -GL_ATIX_texture_env_route - GL_SECONDARY_COLOR_ATIX 0x8747 - GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 - GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size b/Engine/lib/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size deleted file mode 100644 index 277a3136cb..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATIX_vertex_shader_output_point_size -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_vertex_shader_output_point_size - GL_OUTPUT_POINT_SIZE_ATIX 0x610E diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_envmap_bumpmap b/Engine/lib/glew/auto/core/gl/GL_ATI_envmap_bumpmap deleted file mode 100644 index fbd992551e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_envmap_bumpmap +++ /dev/null @@ -1,15 +0,0 @@ -GL_ATI_envmap_bumpmap -http://oss.sgi.com/projects/ogl-sample/registry/ATI/envmap_bumpmap.txt -GL_ATI_envmap_bumpmap - GL_BUMP_ROT_MATRIX_ATI 0x8775 - GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 - GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 - GL_BUMP_TEX_UNITS_ATI 0x8778 - GL_DUDV_ATI 0x8779 - GL_DU8DV8_ATI 0x877A - GL_BUMP_ENVMAP_ATI 0x877B - GL_BUMP_TARGET_ATI 0x877C - void glTexBumpParameterivATI (GLenum pname, GLint *param) - void glTexBumpParameterfvATI (GLenum pname, GLfloat *param) - void glGetTexBumpParameterivATI (GLenum pname, GLint *param) - void glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_map_object_buffer b/Engine/lib/glew/auto/core/gl/GL_ATI_map_object_buffer deleted file mode 100644 index 573afd273f..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_map_object_buffer +++ /dev/null @@ -1,5 +0,0 @@ -GL_ATI_map_object_buffer -http://www.opengl.org/registry/specs/ATI/map_object_buffer.txt -GL_ATI_map_object_buffer - GLvoid * glMapObjectBufferATI (GLuint buffer) - void glUnmapObjectBufferATI (GLuint buffer) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_pn_triangles b/Engine/lib/glew/auto/core/gl/GL_ATI_pn_triangles deleted file mode 100644 index a61e27a061..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_pn_triangles +++ /dev/null @@ -1,14 +0,0 @@ -GL_ATI_pn_triangles -http://www.opengl.org/registry/specs/ATI/pn_triangles.txt -GL_ATI_pn_triangles - GL_PN_TRIANGLES_ATI 0x87F0 - GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 - GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 - GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 - GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 - GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 - GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 - GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 - GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 - void glPNTrianglesiATI (GLenum pname, GLint param) - void glPNTrianglesfATI (GLenum pname, GLfloat param) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_separate_stencil b/Engine/lib/glew/auto/core/gl/GL_ATI_separate_stencil deleted file mode 100644 index be55bb44f5..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_separate_stencil +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATI_separate_stencil -http://www.opengl.org/registry/specs/ATI/separate_stencil.txt -GL_ATI_separate_stencil - GL_STENCIL_BACK_FUNC_ATI 0x8800 - GL_STENCIL_BACK_FAIL_ATI 0x8801 - GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 - GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 - void glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) - void glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_shader_texture_lod b/Engine/lib/glew/auto/core/gl/GL_ATI_shader_texture_lod deleted file mode 100644 index 5fbc624a6b..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_shader_texture_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ATI_shader_texture_lod - -GL_ATI_shader_texture_lod diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_texture_compression_3dc b/Engine/lib/glew/auto/core/gl/GL_ATI_texture_compression_3dc deleted file mode 100644 index 2548b30ead..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_texture_compression_3dc +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATI_texture_compression_3dc - -GL_ATI_texture_compression_3dc - GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 diff --git a/Engine/lib/glew/auto/core/gl/GL_ATI_vertex_streams b/Engine/lib/glew/auto/core/gl/GL_ATI_vertex_streams deleted file mode 100644 index 060f8446e2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_ATI_vertex_streams +++ /dev/null @@ -1,58 +0,0 @@ -GL_ATI_vertex_streams -http://www.opengl.org/registry/specs/ATI/vertex_streams.txt -GL_ATI_vertex_streams - GL_MAX_VERTEX_STREAMS_ATI 0x876B - GL_VERTEX_SOURCE_ATI 0x876C - GL_VERTEX_STREAM0_ATI 0x876D - GL_VERTEX_STREAM1_ATI 0x876E - GL_VERTEX_STREAM2_ATI 0x876F - GL_VERTEX_STREAM3_ATI 0x8770 - GL_VERTEX_STREAM4_ATI 0x8771 - GL_VERTEX_STREAM5_ATI 0x8772 - GL_VERTEX_STREAM6_ATI 0x8773 - GL_VERTEX_STREAM7_ATI 0x8774 - void glClientActiveVertexStreamATI (GLenum stream) - void glVertexBlendEnviATI (GLenum pname, GLint param) - void glVertexBlendEnvfATI (GLenum pname, GLfloat param) - void glVertexStream1sATI (GLenum stream, GLshort x) - void glVertexStream1svATI (GLenum stream, const GLshort *coords) - void glVertexStream1iATI (GLenum stream, GLint x) - void glVertexStream1ivATI (GLenum stream, const GLint *coords) - void glVertexStream1fATI (GLenum stream, GLfloat x) - void glVertexStream1fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream1dATI (GLenum stream, GLdouble x) - void glVertexStream1dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream2sATI (GLenum stream, GLshort x, GLshort y) - void glVertexStream2svATI (GLenum stream, const GLshort *coords) - void glVertexStream2iATI (GLenum stream, GLint x, GLint y) - void glVertexStream2ivATI (GLenum stream, const GLint *coords) - void glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y) - void glVertexStream2fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y) - void glVertexStream2dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glVertexStream3svATI (GLenum stream, const GLshort *coords) - void glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glVertexStream3ivATI (GLenum stream, const GLint *coords) - void glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glVertexStream3fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glVertexStream3dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexStream4svATI (GLenum stream, const GLshort *coords) - void glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w) - void glVertexStream4ivATI (GLenum stream, const GLint *coords) - void glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexStream4fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexStream4dvATI (GLenum stream, const GLdouble *coords) - void glNormalStream3bATI (GLenum stream, GLbyte x, GLbyte y, GLbyte z) - void glNormalStream3bvATI (GLenum stream, const GLbyte *coords) - void glNormalStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glNormalStream3svATI (GLenum stream, const GLshort *coords) - void glNormalStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glNormalStream3ivATI (GLenum stream, const GLint *coords) - void glNormalStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glNormalStream3fvATI (GLenum stream, const GLfloat *coords) - void glNormalStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glNormalStream3dvATI (GLenum stream, const GLdouble *coords) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader b/Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader deleted file mode 100644 index 34d3152931..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_Cg_shader +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_Cg_shader -http://download.nvidia.com/developer/GLSL/GLSL%20Release%20Notes%20for%20Release%2060.pdf -GL_EXT_Cg_shader - GL_CG_VERTEX_SHADER_EXT 0x890E - GL_CG_FRAGMENT_SHADER_EXT 0x890F diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_bindable_uniform b/Engine/lib/glew/auto/core/gl/GL_EXT_bindable_uniform deleted file mode 100644 index 809123b659..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_bindable_uniform +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_bindable_uniform -http://developer.download.nvidia.com/opengl/specs/GL_EXT_bindable_uniform.txt -GL_EXT_bindable_uniform - GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 - GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 - GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 - GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED - GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF - GL_UNIFORM_BUFFER_EXT 0x8DEE - void glUniformBufferEXT (GLuint program, GLint location, GLuint buffer) - GLint glGetUniformBufferSizeEXT (GLuint program, GLint location) - GLintptr glGetUniformOffsetEXT (GLuint program, GLint location) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_debug_marker b/Engine/lib/glew/auto/core/gl/GL_EXT_debug_marker deleted file mode 100644 index 9d0628c8fe..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_debug_marker +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_debug_marker -http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt -GL_EXT_debug_marker - void glInsertEventMarkerEXT (GLsizei length, const GLchar* marker) - void glPushGroupMarkerEXT (GLsizei length, const GLchar* marker) - void glPopGroupMarkerEXT (void) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_depth_bounds_test b/Engine/lib/glew/auto/core/gl/GL_EXT_depth_bounds_test deleted file mode 100644 index 62528b7b0c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_depth_bounds_test +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_depth_bounds_test -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_depth_bounds_test.txt -GL_EXT_depth_bounds_test - GL_DEPTH_BOUNDS_TEST_EXT 0x8890 - GL_DEPTH_BOUNDS_EXT 0x8891 - void glDepthBoundsEXT (GLclampd zmin, GLclampd zmax) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_instanced b/Engine/lib/glew/auto/core/gl/GL_EXT_draw_instanced deleted file mode 100644 index afafa27f3e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_instanced +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_draw_instanced -http://developer.download.nvidia.com/opengl/specs/GL_EXT_draw_instanced.txt -GL_EXT_draw_instanced - void glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_range_elements b/Engine/lib/glew/auto/core/gl/GL_EXT_draw_range_elements deleted file mode 100644 index 347ce62eb2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_draw_range_elements +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_draw_range_elements -http://oss.sgi.com/projects/ogl-sample/registry/EXT/draw_range_elements.txt -GL_EXT_draw_range_elements - GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 - GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 - void glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord b/Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord deleted file mode 100644 index ac7868aa32..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_fog_coord +++ /dev/null @@ -1,16 +0,0 @@ -GL_EXT_fog_coord -http://oss.sgi.com/projects/ogl-sample/registry/EXT/fog_coord.txt -GL_EXT_fog_coord - GL_FOG_COORDINATE_SOURCE_EXT 0x8450 - GL_FOG_COORDINATE_EXT 0x8451 - GL_FRAGMENT_DEPTH_EXT 0x8452 - GL_CURRENT_FOG_COORDINATE_EXT 0x8453 - GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 - GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 - GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 - GL_FOG_COORDINATE_ARRAY_EXT 0x8457 - void glFogCoordfEXT (GLfloat coord) - void glFogCoordfvEXT (const GLfloat *coord) - void glFogCoorddEXT (GLdouble coord) - void glFogCoorddvEXT (const GLdouble *coord) - void glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/core/gl/GL_EXT_framebuffer_sRGB deleted file mode 100644 index 4ca897b1fd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GL_EXT_framebuffer_sRGB - GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 - GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_geometry_shader4 b/Engine/lib/glew/auto/core/gl/GL_EXT_geometry_shader4 deleted file mode 100644 index f6f6785988..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_geometry_shader4 +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt -GL_EXT_geometry_shader4 - GL_GEOMETRY_SHADER_EXT 0x8DD9 - GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD - GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE - GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 - GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA - GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB - GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 - GL_LINES_ADJACENCY_EXT 0xA - GL_LINE_STRIP_ADJACENCY_EXT 0xB - GL_TRIANGLES_ADJACENCY_EXT 0xC - GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD - GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 - GL_PROGRAM_POINT_SIZE_EXT 0x8642 - void glProgramParameteriEXT (GLuint program, GLenum pname, GLint value) - void glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level) - void glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_program_parameters b/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_program_parameters deleted file mode 100644 index 9048c98d96..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_program_parameters +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_gpu_program_parameters -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_program_parameters.txt -GL_EXT_gpu_program_parameters - void glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) - void glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_shader4 b/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_shader4 deleted file mode 100644 index 0e89f0db06..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_gpu_shader4 +++ /dev/null @@ -1,63 +0,0 @@ -GL_EXT_gpu_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_shader4.txt -GL_EXT_gpu_shader4 - GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 - GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 - GL_SAMPLER_BUFFER_EXT 0x8DC2 - GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 - GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 - GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 - GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 - GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 - GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 - GL_INT_SAMPLER_1D_EXT 0x8DC9 - GL_INT_SAMPLER_2D_EXT 0x8DCA - GL_INT_SAMPLER_3D_EXT 0x8DCB - GL_INT_SAMPLER_CUBE_EXT 0x8DCC - GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD - GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE - GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF - GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 - GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 - GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 - GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 - GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 - GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 - GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 - GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 - GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD - void glGetUniformuivEXT (GLuint program, GLint location, GLuint *params) - void glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name) - GLint glGetFragDataLocationEXT (GLuint program, const GLchar *name) - void glUniform1uiEXT (GLint location, GLuint v0) - void glUniform2uiEXT (GLint location, GLuint v0, GLuint v1) - void glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2) - void glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) - void glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value) - void glVertexAttribI1iEXT (GLuint index, GLint x) - void glVertexAttribI2iEXT (GLuint index, GLint x, GLint y) - void glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z) - void glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w) - void glVertexAttribI1uiEXT (GLuint index, GLuint x) - void glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y) - void glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z) - void glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glVertexAttribI1ivEXT (GLuint index, const GLint *v) - void glVertexAttribI2ivEXT (GLuint index, const GLint *v) - void glVertexAttribI3ivEXT (GLuint index, const GLint *v) - void glVertexAttribI4ivEXT (GLuint index, const GLint *v) - void glVertexAttribI1uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI2uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI3uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4bvEXT (GLuint index, const GLbyte *v) - void glVertexAttribI4svEXT (GLuint index, const GLshort *v) - void glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v) - void glVertexAttribI4usvEXT (GLuint index, const GLushort *v) - void glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params) - void glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_packed_float b/Engine/lib/glew/auto/core/gl/GL_EXT_packed_float deleted file mode 100644 index bcb22557d6..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_packed_float +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GL_EXT_packed_float - GL_R11F_G11F_B10F_EXT 0x8C3A - GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B - GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_pixel_buffer_object b/Engine/lib/glew/auto/core/gl/GL_EXT_pixel_buffer_object deleted file mode 100644 index a7f8f2c80e..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_pixel_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_pixel_buffer_object -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_pixel_buffer_object.txt -GL_EXT_pixel_buffer_object - GL_PIXEL_PACK_BUFFER_EXT 0x88EB - GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_secondary_color b/Engine/lib/glew/auto/core/gl/GL_EXT_secondary_color deleted file mode 100644 index e915455003..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_secondary_color +++ /dev/null @@ -1,27 +0,0 @@ -GL_EXT_secondary_color -http://oss.sgi.com/projects/ogl-sample/registry/EXT/secondary_color.txt -GL_EXT_secondary_color - GL_COLOR_SUM_EXT 0x8458 - GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 - GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A - GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B - GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C - GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D - GL_SECONDARY_COLOR_ARRAY_EXT 0x845E - void glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue) - void glSecondaryColor3bvEXT (const GLbyte *v) - void glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue) - void glSecondaryColor3dvEXT (const GLdouble *v) - void glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue) - void glSecondaryColor3fvEXT (const GLfloat *v) - void glSecondaryColor3iEXT (GLint red, GLint green, GLint blue) - void glSecondaryColor3ivEXT (const GLint *v) - void glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue) - void glSecondaryColor3svEXT (const GLshort *v) - void glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue) - void glSecondaryColor3ubvEXT (const GLubyte *v) - void glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue) - void glSecondaryColor3uivEXT (const GLuint *v) - void glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue) - void glSecondaryColor3usvEXT (const GLushort *v) - void glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_array b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_array deleted file mode 100644 index 11877f0e56..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_array +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_texture_array -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_array.txt -GL_EXT_texture_array - GL_TEXTURE_1D_ARRAY_EXT 0x8C18 - GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 - GL_TEXTURE_2D_ARRAY_EXT 0x8C1A - GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B - GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C - GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D - GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF - GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E - void glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_buffer_object b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_buffer_object deleted file mode 100644 index c00e1f3367..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_buffer_object +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_texture_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_buffer_object.txt -GL_EXT_texture_buffer_object - GL_TEXTURE_BUFFER_EXT 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B - GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D - GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E - void glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_latc b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_latc deleted file mode 100644 index ddf8d26449..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_latc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_latc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_latc.txt -GL_EXT_texture_compression_latc - GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 - GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 - GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 - GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_rgtc b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_rgtc deleted file mode 100644 index 7c5c57ff83..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_compression_rgtc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_rgtc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_rgtc.txt -GL_EXT_texture_compression_rgtc - GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB - GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC - GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD - GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_cube_map b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_cube_map deleted file mode 100644 index 5909f4803c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_cube_map +++ /dev/null @@ -1,15 +0,0 @@ -GL_EXT_texture_cube_map -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_texture_cube_map.txt -GL_EXT_texture_cube_map - GL_NORMAL_MAP_EXT 0x8511 - GL_REFLECTION_MAP_EXT 0x8512 - GL_TEXTURE_CUBE_MAP_EXT 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A - GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_edge_clamp b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_edge_clamp deleted file mode 100644 index 4df0997d74..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_edge_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_texture_edge_clamp -http://www.opengl.org/developers/documentation/Version1.2/1.2specs/texture_edge_clamp.txt -GL_EXT_texture_edge_clamp - GL_CLAMP_TO_EDGE_EXT 0x812F diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_integer b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_integer deleted file mode 100644 index 1c57e40d87..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_integer +++ /dev/null @@ -1,56 +0,0 @@ -GL_EXT_texture_integer -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_integer.txt -GL_EXT_texture_integer - GL_RGBA32UI_EXT 0x8D70 - GL_RGB32UI_EXT 0x8D71 - GL_ALPHA32UI_EXT 0x8D72 - GL_INTENSITY32UI_EXT 0x8D73 - GL_LUMINANCE32UI_EXT 0x8D74 - GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 - GL_RGBA16UI_EXT 0x8D76 - GL_RGB16UI_EXT 0x8D77 - GL_ALPHA16UI_EXT 0x8D78 - GL_INTENSITY16UI_EXT 0x8D79 - GL_LUMINANCE16UI_EXT 0x8D7A - GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B - GL_RGBA8UI_EXT 0x8D7C - GL_RGB8UI_EXT 0x8D7D - GL_ALPHA8UI_EXT 0x8D7E - GL_INTENSITY8UI_EXT 0x8D7F - GL_LUMINANCE8UI_EXT 0x8D80 - GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 - GL_RGBA32I_EXT 0x8D82 - GL_RGB32I_EXT 0x8D83 - GL_ALPHA32I_EXT 0x8D84 - GL_INTENSITY32I_EXT 0x8D85 - GL_LUMINANCE32I_EXT 0x8D86 - GL_LUMINANCE_ALPHA32I_EXT 0x8D87 - GL_RGBA16I_EXT 0x8D88 - GL_RGB16I_EXT 0x8D89 - GL_ALPHA16I_EXT 0x8D8A - GL_INTENSITY16I_EXT 0x8D8B - GL_LUMINANCE16I_EXT 0x8D8C - GL_LUMINANCE_ALPHA16I_EXT 0x8D8D - GL_RGBA8I_EXT 0x8D8E - GL_RGB8I_EXT 0x8D8F - GL_ALPHA8I_EXT 0x8D90 - GL_INTENSITY8I_EXT 0x8D91 - GL_LUMINANCE8I_EXT 0x8D92 - GL_LUMINANCE_ALPHA8I_EXT 0x8D93 - GL_RED_INTEGER_EXT 0x8D94 - GL_GREEN_INTEGER_EXT 0x8D95 - GL_BLUE_INTEGER_EXT 0x8D96 - GL_ALPHA_INTEGER_EXT 0x8D97 - GL_RGB_INTEGER_EXT 0x8D98 - GL_RGBA_INTEGER_EXT 0x8D99 - GL_BGR_INTEGER_EXT 0x8D9A - GL_BGRA_INTEGER_EXT 0x8D9B - GL_LUMINANCE_INTEGER_EXT 0x8D9C - GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D - GL_RGBA_INTEGER_MODE_EXT 0x8D9E - void glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params) - void glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params) - void glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params) - void glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params) - void glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha) - void glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_rectangle b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_rectangle deleted file mode 100644 index 4028a9e671..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_rectangle +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_rectangle -http://developer.apple.com/opengl/extensions/ext_texture_rectangle.html -GL_EXT_texture_rectangle - GL_TEXTURE_RECTANGLE_EXT 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_shared_exponent b/Engine/lib/glew/auto/core/gl/GL_EXT_texture_shared_exponent deleted file mode 100644 index 4ff7efcd35..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_texture_shared_exponent +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_shared_exponent -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_shared_exponent.txt -GL_EXT_texture_shared_exponent - GL_RGB9_E5_EXT 0x8C3D - GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E - GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_timer_query b/Engine/lib/glew/auto/core/gl/GL_EXT_timer_query deleted file mode 100644 index 390e6fc0cd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_timer_query +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_timer_query -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_timer_query.txt -GL_EXT_timer_query - GL_TIME_ELAPSED_EXT 0x88BF - void glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params) - void glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_EXT_vertex_shader b/Engine/lib/glew/auto/core/gl/GL_EXT_vertex_shader deleted file mode 100644 index eb125b6083..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_EXT_vertex_shader +++ /dev/null @@ -1,156 +0,0 @@ -GL_EXT_vertex_shader -http://oss.sgi.com/projects/ogl-sample/registry/EXT/vertex_shader.txt -GL_EXT_vertex_shader - GL_VERTEX_SHADER_EXT 0x8780 - GL_VERTEX_SHADER_BINDING_EXT 0x8781 - GL_OP_INDEX_EXT 0x8782 - GL_OP_NEGATE_EXT 0x8783 - GL_OP_DOT3_EXT 0x8784 - GL_OP_DOT4_EXT 0x8785 - GL_OP_MUL_EXT 0x8786 - GL_OP_ADD_EXT 0x8787 - GL_OP_MADD_EXT 0x8788 - GL_OP_FRAC_EXT 0x8789 - GL_OP_MAX_EXT 0x878A - GL_OP_MIN_EXT 0x878B - GL_OP_SET_GE_EXT 0x878C - GL_OP_SET_LT_EXT 0x878D - GL_OP_CLAMP_EXT 0x878E - GL_OP_FLOOR_EXT 0x878F - GL_OP_ROUND_EXT 0x8790 - GL_OP_EXP_BASE_2_EXT 0x8791 - GL_OP_LOG_BASE_2_EXT 0x8792 - GL_OP_POWER_EXT 0x8793 - GL_OP_RECIP_EXT 0x8794 - GL_OP_RECIP_SQRT_EXT 0x8795 - GL_OP_SUB_EXT 0x8796 - GL_OP_CROSS_PRODUCT_EXT 0x8797 - GL_OP_MULTIPLY_MATRIX_EXT 0x8798 - GL_OP_MOV_EXT 0x8799 - GL_OUTPUT_VERTEX_EXT 0x879A - GL_OUTPUT_COLOR0_EXT 0x879B - GL_OUTPUT_COLOR1_EXT 0x879C - GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D - GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E - GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F - GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 - GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 - GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 - GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 - GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 - GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 - GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 - GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 - GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 - GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 - GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA - GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB - GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC - GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD - GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE - GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF - GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 - GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 - GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 - GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 - GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 - GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 - GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 - GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 - GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 - GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 - GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA - GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB - GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC - GL_OUTPUT_FOG_EXT 0x87BD - GL_SCALAR_EXT 0x87BE - GL_VECTOR_EXT 0x87BF - GL_MATRIX_EXT 0x87C0 - GL_VARIANT_EXT 0x87C1 - GL_INVARIANT_EXT 0x87C2 - GL_LOCAL_CONSTANT_EXT 0x87C3 - GL_LOCAL_EXT 0x87C4 - GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 - GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 - GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 - GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 - GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 - GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA - GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB - GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE - GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF - GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 - GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 - GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 - GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 - GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 - GL_X_EXT 0x87D5 - GL_Y_EXT 0x87D6 - GL_Z_EXT 0x87D7 - GL_W_EXT 0x87D8 - GL_NEGATIVE_X_EXT 0x87D9 - GL_NEGATIVE_Y_EXT 0x87DA - GL_NEGATIVE_Z_EXT 0x87DB - GL_NEGATIVE_W_EXT 0x87DC - GL_ZERO_EXT 0x87DD - GL_ONE_EXT 0x87DE - GL_NEGATIVE_ONE_EXT 0x87DF - GL_NORMALIZED_RANGE_EXT 0x87E0 - GL_FULL_RANGE_EXT 0x87E1 - GL_CURRENT_VERTEX_EXT 0x87E2 - GL_MVP_MATRIX_EXT 0x87E3 - GL_VARIANT_VALUE_EXT 0x87E4 - GL_VARIANT_DATATYPE_EXT 0x87E5 - GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 - GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 - GL_VARIANT_ARRAY_EXT 0x87E8 - GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 - GL_INVARIANT_VALUE_EXT 0x87EA - GL_INVARIANT_DATATYPE_EXT 0x87EB - GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC - GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED - - void glBeginVertexShaderEXT (void) - void glEndVertexShaderEXT (void) - void glBindVertexShaderEXT (GLuint id) - GLuint glGenVertexShadersEXT (GLuint range) - void glDeleteVertexShaderEXT (GLuint id) - void glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1) - void glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2) - void glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) - void glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glInsertComponentEXT (GLuint res, GLuint src, GLuint num) - void glExtractComponentEXT (GLuint res, GLuint src, GLuint num) - GLuint glGenSymbolsEXT (GLenum dataType, GLenum storageType, GLenum range, GLuint components) - void glSetInvariantEXT (GLuint id, GLenum type, GLvoid *addr) - void glSetLocalConstantEXT (GLuint id, GLenum type, GLvoid *addr) - void glVariantbvEXT (GLuint id, GLbyte *addr) - void glVariantsvEXT (GLuint id, GLshort *addr) - void glVariantivEXT (GLuint id, GLint *addr) - void glVariantfvEXT (GLuint id, GLfloat *addr) - void glVariantdvEXT (GLuint id, GLdouble *addr) - void glVariantubvEXT (GLuint id, GLubyte *addr) - void glVariantusvEXT (GLuint id, GLushort *addr) - void glVariantuivEXT (GLuint id, GLuint *addr) - void glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, GLvoid *addr) - void glEnableVariantClientStateEXT (GLuint id) - void glDisableVariantClientStateEXT (GLuint id) - GLuint glBindLightParameterEXT (GLenum light, GLenum value) - GLuint glBindMaterialParameterEXT (GLenum face, GLenum value) - GLuint glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value) - GLuint glBindTextureUnitParameterEXT (GLenum unit, GLenum value) - GLuint glBindParameterEXT (GLenum value) - GLboolean glIsVariantEnabledEXT (GLuint id, GLenum cap) - void glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid **data) - void glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data) diff --git a/Engine/lib/glew/auto/core/gl/GL_KTX_buffer_region b/Engine/lib/glew/auto/core/gl/GL_KTX_buffer_region deleted file mode 100644 index adc6c6f6ab..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_KTX_buffer_region +++ /dev/null @@ -1,12 +0,0 @@ -GL_KTX_buffer_region - -GL_KTX_buffer_region - GL_KTX_FRONT_REGION 0x0 - GL_KTX_BACK_REGION 0x1 - GL_KTX_Z_REGION 0x2 - GL_KTX_STENCIL_REGION 0x3 - GLuint glBufferRegionEnabled (void) - GLuint glNewBufferRegion (GLenum region) - void glDeleteBufferRegion (GLenum region) - void glReadBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height) - void glDrawBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest) diff --git a/Engine/lib/glew/auto/core/gl/GL_NVX_gpu_memory_info b/Engine/lib/glew/auto/core/gl/GL_NVX_gpu_memory_info deleted file mode 100644 index 6dd7bdddd3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NVX_gpu_memory_info +++ /dev/null @@ -1,8 +0,0 @@ -GL_NVX_gpu_memory_info -http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt -GL_NVX_gpu_memory_info - GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 - GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 - GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 - GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A - GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_depth_buffer_float b/Engine/lib/glew/auto/core/gl/GL_NV_depth_buffer_float deleted file mode 100644 index 493b245589..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_depth_buffer_float +++ /dev/null @@ -1,10 +0,0 @@ -GL_NV_depth_buffer_float -http://developer.download.nvidia.com/opengl/specs/GL_NV_depth_buffer_float.txt -GL_NV_depth_buffer_float - GL_DEPTH_COMPONENT32F_NV 0x8DAB - GL_DEPTH32F_STENCIL8_NV 0x8DAC - GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD - GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF - void glDepthRangedNV (GLdouble zNear, GLdouble zFar) - void glClearDepthdNV (GLdouble depth) - void glDepthBoundsdNV (GLdouble zmin, GLdouble zmax) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_depth_range_unclamped b/Engine/lib/glew/auto/core/gl/GL_NV_depth_range_unclamped deleted file mode 100644 index 62b4e59fa7..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_depth_range_unclamped +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_depth_range_unclamped - -GL_NV_depth_range_unclamped - GL_SAMPLE_COUNT_BITS_NV 0x8864 - GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 - GL_QUERY_RESULT_NV 0x8866 - GL_QUERY_RESULT_AVAILABLE_NV 0x8867 - GL_SAMPLE_COUNT_NV 0x8914 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program2 b/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program2 deleted file mode 100644 index 7fb59eea1b..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program2 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_fragment_program2 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program2.txt -GL_NV_fragment_program2 - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 - GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 - GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 - GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program4 deleted file mode 100644 index 0ae2598795..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_fragment_program4.txt -GL_NV_gpu_program4 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program_option b/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program_option deleted file mode 100644 index 7af9731bd8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_fragment_program_option +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program_option.txt -GL_NV_fragment_program_option diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage b/Engine/lib/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage deleted file mode 100644 index d1d066056c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_framebuffer_multisample_coverage -http://developer.download.nvidia.com/opengl/specs/GL_NV_framebuffer_multisample_coverage.txt -GL_NV_framebuffer_multisample_coverage - GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB - GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 - GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 - GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 - void glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_geometry_program4 deleted file mode 100644 index 3f82b195d3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_program4 +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_geometry_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_program4.txt -GL_NV_gpu_program4 - GL_GEOMETRY_PROGRAM_NV 0x8C26 - GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 - GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 - void glProgramVertexLimitNV (GLenum target, GLint limit) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_shader4 b/Engine/lib/glew/auto/core/gl/GL_NV_geometry_shader4 deleted file mode 100644 index 2040c0dbb3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_geometry_shader4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_shader4.txt -GL_NV_geometry_shader4 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program4 deleted file mode 100644 index 030f68e1cc..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program4 +++ /dev/null @@ -1,23 +0,0 @@ -GL_NV_gpu_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_gpu_program4.txt -GL_NV_gpu_program4 - GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 - GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 - GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 - GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 - GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 - GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 - GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 - GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 - void glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) - void glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program5 b/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program5 deleted file mode 100644 index 18bb28fed0..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_gpu_program5 +++ /dev/null @@ -1,9 +0,0 @@ -GL_NV_gpu_program5 -http://www.opengl.org/registry/specs/NV/gpu_program5.txt -GL_NV_gpu_program5 - GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A - GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B - GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C - GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_parameter_buffer_object b/Engine/lib/glew/auto/core/gl/GL_NV_parameter_buffer_object deleted file mode 100644 index d2525a1766..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_parameter_buffer_object +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_parameter_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_NV_parameter_buffer_object.txt -GL_NV_parameter_buffer_object - GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 - GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 - GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 - GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 - GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 - void glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params) - void glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params) - void glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_path_rendering b/Engine/lib/glew/auto/core/gl/GL_NV_path_rendering deleted file mode 100644 index 42e1336327..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_path_rendering +++ /dev/null @@ -1,180 +0,0 @@ -GL_NV_path_rendering -http://www.opengl.org/registry/specs/NV/path_rendering.txt -GL_NV_path_rendering - GL_CLOSE_PATH_NV 0x00 - GL_BOLD_BIT_NV 0x01 - GL_GLYPH_WIDTH_BIT_NV 0x01 - GL_GLYPH_HEIGHT_BIT_NV 0x02 - GL_ITALIC_BIT_NV 0x02 - GL_MOVE_TO_NV 0x02 - GL_RELATIVE_MOVE_TO_NV 0x03 - GL_LINE_TO_NV 0x04 - GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 - GL_RELATIVE_LINE_TO_NV 0x05 - GL_HORIZONTAL_LINE_TO_NV 0x06 - GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 - GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 - GL_VERTICAL_LINE_TO_NV 0x08 - GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 - GL_QUADRATIC_CURVE_TO_NV 0x0A - GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B - GL_CUBIC_CURVE_TO_NV 0x0C - GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D - GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E - GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F - GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 - GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 - GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 - GL_SMALL_CCW_ARC_TO_NV 0x12 - GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 - GL_SMALL_CW_ARC_TO_NV 0x14 - GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 - GL_LARGE_CCW_ARC_TO_NV 0x16 - GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 - GL_LARGE_CW_ARC_TO_NV 0x18 - GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 - GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 - GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 - GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 - GL_RESTART_PATH_NV 0xF0 - GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 - GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 - GL_RECT_NV 0xF6 - GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 - GL_CIRCULAR_CW_ARC_TO_NV 0xFA - GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC - GL_ARC_TO_NV 0xFE - GL_RELATIVE_ARC_TO_NV 0xFF - GL_GLYPH_HAS_KERNING_BIT_NV 0x100 - GL_PRIMARY_COLOR 0x8577 - GL_PATH_FORMAT_SVG_NV 0x9070 - GL_PATH_FORMAT_PS_NV 0x9071 - GL_STANDARD_FONT_NAME_NV 0x9072 - GL_SYSTEM_FONT_NAME_NV 0x9073 - GL_FILE_NAME_NV 0x9074 - GL_PATH_STROKE_WIDTH_NV 0x9075 - GL_PATH_END_CAPS_NV 0x9076 - GL_PATH_INITIAL_END_CAP_NV 0x9077 - GL_PATH_TERMINAL_END_CAP_NV 0x9078 - GL_PATH_JOIN_STYLE_NV 0x9079 - GL_PATH_MITER_LIMIT_NV 0x907A - GL_PATH_DASH_CAPS_NV 0x907B - GL_PATH_INITIAL_DASH_CAP_NV 0x907C - GL_PATH_TERMINAL_DASH_CAP_NV 0x907D - GL_PATH_DASH_OFFSET_NV 0x907E - GL_PATH_CLIENT_LENGTH_NV 0x907F - GL_PATH_FILL_MODE_NV 0x9080 - GL_PATH_FILL_MASK_NV 0x9081 - GL_PATH_FILL_COVER_MODE_NV 0x9082 - GL_PATH_STROKE_COVER_MODE_NV 0x9083 - GL_PATH_STROKE_MASK_NV 0x9084 - GL_COUNT_UP_NV 0x9088 - GL_COUNT_DOWN_NV 0x9089 - GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A - GL_CONVEX_HULL_NV 0x908B - GL_BOUNDING_BOX_NV 0x908D - GL_TRANSLATE_X_NV 0x908E - GL_TRANSLATE_Y_NV 0x908F - GL_TRANSLATE_2D_NV 0x9090 - GL_TRANSLATE_3D_NV 0x9091 - GL_AFFINE_2D_NV 0x9092 - GL_AFFINE_3D_NV 0x9094 - GL_TRANSPOSE_AFFINE_2D_NV 0x9096 - GL_TRANSPOSE_AFFINE_3D_NV 0x9098 - GL_UTF8_NV 0x909A - GL_UTF16_NV 0x909B - GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C - GL_PATH_COMMAND_COUNT_NV 0x909D - GL_PATH_COORD_COUNT_NV 0x909E - GL_PATH_DASH_ARRAY_COUNT_NV 0x909F - GL_PATH_COMPUTED_LENGTH_NV 0x90A0 - GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 - GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 - GL_SQUARE_NV 0x90A3 - GL_ROUND_NV 0x90A4 - GL_TRIANGULAR_NV 0x90A5 - GL_BEVEL_NV 0x90A6 - GL_MITER_REVERT_NV 0x90A7 - GL_MITER_TRUNCATE_NV 0x90A8 - GL_SKIP_MISSING_GLYPH_NV 0x90A9 - GL_USE_MISSING_GLYPH_NV 0x90AA - GL_PATH_ERROR_POSITION_NV 0x90AB - GL_PATH_FOG_GEN_MODE_NV 0x90AC - GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD - GL_ADJACENT_PAIRS_NV 0x90AE - GL_FIRST_TO_REST_NV 0x90AF - GL_PATH_GEN_MODE_NV 0x90B0 - GL_PATH_GEN_COEFF_NV 0x90B1 - GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 - GL_PATH_GEN_COMPONENTS_NV 0x90B3 - GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 - GL_MOVE_TO_RESETS_NV 0x90B5 - GL_MOVE_TO_CONTINUES_NV 0x90B6 - GL_PATH_STENCIL_FUNC_NV 0x90B7 - GL_PATH_STENCIL_REF_NV 0x90B8 - GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 - GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD - GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE - GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF - GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 - GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 - GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 - GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 - GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 - GL_FONT_ASCENDER_BIT_NV 0x00200000 - GL_FONT_DESCENDER_BIT_NV 0x00400000 - GL_FONT_HEIGHT_BIT_NV 0x00800000 - GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 - GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 - GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 - GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 - GL_FONT_HAS_KERNING_BIT_NV 0x10000000 - void glCopyPathNV (GLuint resultPath, GLuint srcPath) - void glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverFillPathNV (GLuint path, GLenum coverMode) - void glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverStrokePathNV (GLuint name, GLenum coverMode) - void glDeletePathsNV (GLuint path, GLsizei range) - GLuint glGenPathsNV (GLsizei range) - void glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat* value) - void glGetPathColorGenivNV (GLenum color, GLenum pname, GLint* value) - void glGetPathCommandsNV (GLuint name, GLubyte* commands) - void glGetPathCoordsNV (GLuint name, GLfloat* coords) - void glGetPathDashArrayNV (GLuint name, GLfloat* dashArray) - GLfloat glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments) - void glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics) - void glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics) - void glGetPathParameterfvNV (GLuint name, GLenum param, GLfloat* value) - void glGetPathParameterivNV (GLuint name, GLenum param, GLint* value) - void glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing) - void glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat* value) - void glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint* value) - void glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) - GLboolean glIsPathNV (GLuint path) - GLboolean glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y) - GLboolean glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y) - void glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs) - void glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathCoverDepthFuncNV (GLenum zfunc) - void glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat* dashArray) - void glPathFogGenNV (GLenum genMode) - void glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathParameterfNV (GLuint path, GLenum pname, GLfloat value) - void glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat* value) - void glPathParameteriNV (GLuint path, GLenum pname, GLint value) - void glPathParameterivNV (GLuint path, GLenum pname, const GLint* value) - void glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units) - void glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask) - void glPathStringNV (GLuint path, GLenum format, GLsizei length, const void* pathString) - void glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs) - GLboolean glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY) - void glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask) - void glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask) - void glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues) - void glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_present_video b/Engine/lib/glew/auto/core/gl/GL_NV_present_video deleted file mode 100644 index 893c74c8e9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_present_video +++ /dev/null @@ -1,15 +0,0 @@ -GL_NV_present_video -http://www.opengl.org/registry/specs/NV/present_video.txt -GL_NV_present_video - GL_FRAME_NV 0x8E26 - GL_FIELDS_NV 0x8E27 - GL_CURRENT_TIME_NV 0x8E28 - GL_NUM_FILL_STREAMS_NV 0x8E29 - GL_PRESENT_TIME_NV 0x8E2A - GL_PRESENT_DURATION_NV 0x8E2B - void glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT* params) - void glGetVideoivNV (GLuint video_slot, GLenum pname, GLint* params) - void glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT* params) - void glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint* params) - void glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3) - void glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_tessellation_program5 b/Engine/lib/glew/auto/core/gl/GL_NV_tessellation_program5 deleted file mode 100644 index b663c974dc..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_tessellation_program5 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_tessellation_program5 -http://www.opengl.org/registry/specs/NV/tessellation_program5.txt -GL_NV_gpu_program5 - GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 - GL_TESS_CONTROL_PROGRAM_NV 0x891E - GL_TESS_EVALUATION_PROGRAM_NV 0x891F - GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 - GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_transform_feedback b/Engine/lib/glew/auto/core/gl/GL_NV_transform_feedback deleted file mode 100644 index fce47571e8..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_transform_feedback +++ /dev/null @@ -1,39 +0,0 @@ -GL_NV_transform_feedback -http://developer.download.nvidia.com/opengl/specs/GL_NV_transform_feedback.txt -GL_NV_transform_feedback - GL_BACK_PRIMARY_COLOR_NV 0x8C77 - GL_BACK_SECONDARY_COLOR_NV 0x8C78 - GL_TEXTURE_COORD_NV 0x8C79 - GL_CLIP_DISTANCE_NV 0x8C7A - GL_VERTEX_ID_NV 0x8C7B - GL_PRIMITIVE_ID_NV 0x8C7C - GL_GENERIC_ATTRIB_NV 0x8C7D - GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E - GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 - GL_ACTIVE_VARYINGS_NV 0x8C81 - GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 - GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 - GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 - GL_PRIMITIVES_GENERATED_NV 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 - GL_RASTERIZER_DISCARD_NV 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B - GL_INTERLEAVED_ATTRIBS_NV 0x8C8C - GL_SEPARATE_ATTRIBS_NV 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F - void glBeginTransformFeedbackNV (GLenum primitiveMode) - void glEndTransformFeedbackNV (void) - void glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode) - void glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset) - void glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer) - void glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode) - void glActiveVaryingNV (GLuint program, const GLchar *name) - GLint glGetVaryingLocationNV (GLuint program, const GLchar *name) - void glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) - void glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location) diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vdpau_interop b/Engine/lib/glew/auto/core/gl/GL_NV_vdpau_interop deleted file mode 100644 index a2b68b2a68..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vdpau_interop +++ /dev/null @@ -1,18 +0,0 @@ -GL_NV_vdpau_interop -http://www.opengl.org/registry/specs/NV/vdpau_interop.txt -GL_NV_vdpau_interop - GL_SURFACE_STATE_NV 0x86EB - GL_SURFACE_REGISTERED_NV 0x86FD - GL_SURFACE_MAPPED_NV 0x8700 - GL_WRITE_DISCARD_NV 0x88BE - void glVDPAUFiniNV (void) - void glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values) - void glVDPAUInitNV (const void* vdpDevice, const GLvoid*getProcAddress) - void glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface) - void glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces) - GLvdpauSurfaceNV glVDPAURegisterOutputSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - GLvdpauSurfaceNV glVDPAURegisterVideoSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - void glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access) - void glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces) - void glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface) - typedef GLintptr GLvdpauSurfaceNV diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program2_option b/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program2_option deleted file mode 100644 index 1fecc4c040..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program2_option +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_vertex_program2_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program2_option.txt -GL_NV_vertex_program2_option - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program3 b/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program3 deleted file mode 100644 index 6510e0649c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program3 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program3 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program3.txt -GL_NV_vertex_program3 - MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C diff --git a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program4 b/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program4 deleted file mode 100644 index c51d08a5cd..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_NV_vertex_program4 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_vertex_program4.txt -GL_NV_gpu_program4 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD diff --git a/Engine/lib/glew/auto/core/gl/GL_SGIX_shadow b/Engine/lib/glew/auto/core/gl/GL_SGIX_shadow deleted file mode 100644 index 2b34cc83a9..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_SGIX_shadow +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_shadow -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/shadow.txt -GL_SGIX_shadow - GL_TEXTURE_COMPARE_SGIX 0x819A - GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B - GL_TEXTURE_LEQUAL_R_SGIX 0x819C - GL_TEXTURE_GEQUAL_R_SGIX 0x819D diff --git a/Engine/lib/glew/auto/core/gl/GL_SUN_read_video_pixels b/Engine/lib/glew/auto/core/gl/GL_SUN_read_video_pixels deleted file mode 100644 index faa55f972c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_SUN_read_video_pixels +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_read_video_pixels -http://wwws.sun.com/software/graphics/opengl/extensions/gl_sun_read_video_pixels.txt -GL_SUN_read_video_pixels - void glReadVideoPixelsSUN (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 deleted file mode 100644 index 977fec03ce..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2 +++ /dev/null @@ -1,49 +0,0 @@ -GL_VERSION_1_2 -http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf - - GL_UNSIGNED_BYTE_3_3_2 0x8032 - GL_UNSIGNED_SHORT_4_4_4_4 0x8033 - GL_UNSIGNED_SHORT_5_5_5_1 0x8034 - GL_UNSIGNED_INT_8_8_8_8 0x8035 - GL_UNSIGNED_INT_10_10_10_2 0x8036 - GL_RESCALE_NORMAL 0x803A - GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 - GL_UNSIGNED_SHORT_5_6_5 0x8363 - GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 - GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 - GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 - GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 - GL_BGR 0x80E0 - GL_BGRA 0x80E1 - GL_MAX_ELEMENTS_VERTICES 0x80E8 - GL_MAX_ELEMENTS_INDICES 0x80E9 - GL_CLAMP_TO_EDGE 0x812F - GL_TEXTURE_MIN_LOD 0x813A - GL_TEXTURE_MAX_LOD 0x813B - GL_TEXTURE_BASE_LEVEL 0x813C - GL_TEXTURE_MAX_LEVEL 0x813D - GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 - GL_SINGLE_COLOR 0x81F9 - GL_SEPARATE_SPECULAR_COLOR 0x81FA - GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 - GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 - GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 - GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 - GL_ALIASED_POINT_SIZE_RANGE 0x846D - GL_ALIASED_LINE_WIDTH_RANGE 0x846E - GL_PACK_SKIP_IMAGES 0x806B - GL_PACK_IMAGE_HEIGHT 0x806C - GL_UNPACK_SKIP_IMAGES 0x806D - GL_UNPACK_IMAGE_HEIGHT 0x806E - GL_TEXTURE_3D 0x806F - GL_PROXY_TEXTURE_3D 0x8070 - GL_TEXTURE_DEPTH 0x8071 - GL_TEXTURE_WRAP_R 0x8072 - GL_MAX_3D_TEXTURE_SIZE 0x8073 - GL_TEXTURE_BINDING_3D 0x806A - GL_MAX_ELEMENTS_VERTICES 0x80E8 - GL_MAX_ELEMENTS_INDICES 0x80E9 - void glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) - void glTexImage3D (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) - void glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 deleted file mode 100644 index a6ecf242c2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_2_1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_VERSION_1_2_1 -http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf - diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 deleted file mode 100644 index 737ad7c0d3..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_3 +++ /dev/null @@ -1,146 +0,0 @@ -GL_VERSION_1_3 -http://www.opengl.org/documentation/specs/version1.3/glspec13.pdf - - GL_TEXTURE0 0x84C0 - GL_TEXTURE1 0x84C1 - GL_TEXTURE2 0x84C2 - GL_TEXTURE3 0x84C3 - GL_TEXTURE4 0x84C4 - GL_TEXTURE5 0x84C5 - GL_TEXTURE6 0x84C6 - GL_TEXTURE7 0x84C7 - GL_TEXTURE8 0x84C8 - GL_TEXTURE9 0x84C9 - GL_TEXTURE10 0x84CA - GL_TEXTURE11 0x84CB - GL_TEXTURE12 0x84CC - GL_TEXTURE13 0x84CD - GL_TEXTURE14 0x84CE - GL_TEXTURE15 0x84CF - GL_TEXTURE16 0x84D0 - GL_TEXTURE17 0x84D1 - GL_TEXTURE18 0x84D2 - GL_TEXTURE19 0x84D3 - GL_TEXTURE20 0x84D4 - GL_TEXTURE21 0x84D5 - GL_TEXTURE22 0x84D6 - GL_TEXTURE23 0x84D7 - GL_TEXTURE24 0x84D8 - GL_TEXTURE25 0x84D9 - GL_TEXTURE26 0x84DA - GL_TEXTURE27 0x84DB - GL_TEXTURE28 0x84DC - GL_TEXTURE29 0x84DD - GL_TEXTURE30 0x84DE - GL_TEXTURE31 0x84DF - GL_ACTIVE_TEXTURE 0x84E0 - GL_CLIENT_ACTIVE_TEXTURE 0x84E1 - GL_MAX_TEXTURE_UNITS 0x84E2 - GL_NORMAL_MAP 0x8511 - GL_REFLECTION_MAP 0x8512 - GL_TEXTURE_CUBE_MAP 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A - GL_PROXY_TEXTURE_CUBE_MAP 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C - GL_COMPRESSED_ALPHA 0x84E9 - GL_COMPRESSED_LUMINANCE 0x84EA - GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB - GL_COMPRESSED_INTENSITY 0x84EC - GL_COMPRESSED_RGB 0x84ED - GL_COMPRESSED_RGBA 0x84EE - GL_TEXTURE_COMPRESSION_HINT 0x84EF - GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 - GL_TEXTURE_COMPRESSED 0x86A1 - GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 - GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 - GL_MULTISAMPLE 0x809D - GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E - GL_SAMPLE_ALPHA_TO_ONE 0x809F - GL_SAMPLE_COVERAGE 0x80A0 - GL_SAMPLE_BUFFERS 0x80A8 - GL_SAMPLES 0x80A9 - GL_SAMPLE_COVERAGE_VALUE 0x80AA - GL_SAMPLE_COVERAGE_INVERT 0x80AB - GL_MULTISAMPLE_BIT 0x20000000 - GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 - GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 - GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 - GL_TRANSPOSE_COLOR_MATRIX 0x84E6 - GL_COMBINE 0x8570 - GL_COMBINE_RGB 0x8571 - GL_COMBINE_ALPHA 0x8572 - GL_SOURCE0_RGB 0x8580 - GL_SOURCE1_RGB 0x8581 - GL_SOURCE2_RGB 0x8582 - GL_SOURCE0_ALPHA 0x8588 - GL_SOURCE1_ALPHA 0x8589 - GL_SOURCE2_ALPHA 0x858A - GL_OPERAND0_RGB 0x8590 - GL_OPERAND1_RGB 0x8591 - GL_OPERAND2_RGB 0x8592 - GL_OPERAND0_ALPHA 0x8598 - GL_OPERAND1_ALPHA 0x8599 - GL_OPERAND2_ALPHA 0x859A - GL_RGB_SCALE 0x8573 - GL_ADD_SIGNED 0x8574 - GL_INTERPOLATE 0x8575 - GL_SUBTRACT 0x84E7 - GL_CONSTANT 0x8576 - GL_PRIMARY_COLOR 0x8577 - GL_PREVIOUS 0x8578 - GL_DOT3_RGB 0x86AE - GL_DOT3_RGBA 0x86AF - GL_CLAMP_TO_BORDER 0x812D - - void glActiveTexture (GLenum texture) - void glClientActiveTexture (GLenum texture) - void glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glGetCompressedTexImage (GLenum target, GLint lod, GLvoid *img) - void glLoadTransposeMatrixd (const GLdouble m[16]) - void glLoadTransposeMatrixf (const GLfloat m[16]) - void glMultTransposeMatrixd (const GLdouble m[16]) - void glMultTransposeMatrixf (const GLfloat m[16]) - void glMultiTexCoord1d (GLenum target, GLdouble s) - void glMultiTexCoord1dv (GLenum target, const GLdouble *v) - void glMultiTexCoord1f (GLenum target, GLfloat s) - void glMultiTexCoord1fv (GLenum target, const GLfloat *v) - void glMultiTexCoord1i (GLenum target, GLint s) - void glMultiTexCoord1iv (GLenum target, const GLint *v) - void glMultiTexCoord1s (GLenum target, GLshort s) - void glMultiTexCoord1sv (GLenum target, const GLshort *v) - void glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t) - void glMultiTexCoord2dv (GLenum target, const GLdouble *v) - void glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t) - void glMultiTexCoord2fv (GLenum target, const GLfloat *v) - void glMultiTexCoord2i (GLenum target, GLint s, GLint t) - void glMultiTexCoord2iv (GLenum target, const GLint *v) - void glMultiTexCoord2s (GLenum target, GLshort s, GLshort t) - void glMultiTexCoord2sv (GLenum target, const GLshort *v) - void glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r) - void glMultiTexCoord3dv (GLenum target, const GLdouble *v) - void glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r) - void glMultiTexCoord3fv (GLenum target, const GLfloat *v) - void glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r) - void glMultiTexCoord3iv (GLenum target, const GLint *v) - void glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r) - void glMultiTexCoord3sv (GLenum target, const GLshort *v) - void glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) - void glMultiTexCoord4dv (GLenum target, const GLdouble *v) - void glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) - void glMultiTexCoord4fv (GLenum target, const GLfloat *v) - void glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q) - void glMultiTexCoord4iv (GLenum target, const GLint *v) - void glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) - void glMultiTexCoord4sv (GLenum target, const GLshort *v) - void glSampleCoverage (GLclampf value, GLboolean invert) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 deleted file mode 100644 index ed5b4e8263..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_4 +++ /dev/null @@ -1,89 +0,0 @@ -GL_VERSION_1_4 -http://www.opengl.org/documentation/specs/version1.4/glspec14.pdf - - GL_GENERATE_MIPMAP 0x8191 - GL_GENERATE_MIPMAP_HINT 0x8192 - GL_DEPTH_COMPONENT16 0x81A5 - GL_DEPTH_COMPONENT24 0x81A6 - GL_DEPTH_COMPONENT32 0x81A7 - GL_TEXTURE_DEPTH_SIZE 0x884A - GL_DEPTH_TEXTURE_MODE 0x884B - GL_TEXTURE_COMPARE_MODE 0x884C - GL_TEXTURE_COMPARE_FUNC 0x884D - GL_COMPARE_R_TO_TEXTURE 0x884E - GL_FOG_COORDINATE_SOURCE 0x8450 - GL_FOG_COORDINATE 0x8451 - GL_FRAGMENT_DEPTH 0x8452 - GL_CURRENT_FOG_COORDINATE 0x8453 - GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 - GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 - GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 - GL_FOG_COORDINATE_ARRAY 0x8457 - GL_POINT_SIZE_MIN 0x8126 - GL_POINT_SIZE_MAX 0x8127 - GL_POINT_FADE_THRESHOLD_SIZE 0x8128 - GL_POINT_DISTANCE_ATTENUATION 0x8129 - GL_COLOR_SUM 0x8458 - GL_CURRENT_SECONDARY_COLOR 0x8459 - GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A - GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B - GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C - GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D - GL_SECONDARY_COLOR_ARRAY 0x845E - GL_BLEND_DST_RGB 0x80C8 - GL_BLEND_SRC_RGB 0x80C9 - GL_BLEND_DST_ALPHA 0x80CA - GL_BLEND_SRC_ALPHA 0x80CB - GL_INCR_WRAP 0x8507 - GL_DECR_WRAP 0x8508 - GL_TEXTURE_FILTER_CONTROL 0x8500 - GL_TEXTURE_LOD_BIAS 0x8501 - GL_MAX_TEXTURE_LOD_BIAS 0x84FD - GL_MIRRORED_REPEAT 0x8370 - void glBlendEquation (GLenum mode) - void glBlendColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) - void glFogCoordf (GLfloat coord) - void glFogCoordfv (const GLfloat *coord) - void glFogCoordd (GLdouble coord) - void glFogCoorddv (const GLdouble *coord) - void glFogCoordPointer (GLenum type, GLsizei stride, const GLvoid *pointer) - void glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount) - void glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei drawcount) - void glPointParameteri (GLenum pname, GLint param) - void glPointParameteriv (GLenum pname, const GLint *params) - void glPointParameterf (GLenum pname, GLfloat param) - void glPointParameterfv (GLenum pname, const GLfloat *params) - void glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue) - void glSecondaryColor3bv (const GLbyte *v) - void glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue) - void glSecondaryColor3dv (const GLdouble *v) - void glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue) - void glSecondaryColor3fv (const GLfloat *v) - void glSecondaryColor3i (GLint red, GLint green, GLint blue) - void glSecondaryColor3iv (const GLint *v) - void glSecondaryColor3s (GLshort red, GLshort green, GLshort blue) - void glSecondaryColor3sv (const GLshort *v) - void glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue) - void glSecondaryColor3ubv (const GLubyte *v) - void glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue) - void glSecondaryColor3uiv (const GLuint *v) - void glSecondaryColor3us (GLushort red, GLushort green, GLushort blue) - void glSecondaryColor3usv (const GLushort *v) - void glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) - void glWindowPos2d (GLdouble x, GLdouble y) - void glWindowPos2f (GLfloat x, GLfloat y) - void glWindowPos2i (GLint x, GLint y) - void glWindowPos2s (GLshort x, GLshort y) - void glWindowPos2dv (const GLdouble *p) - void glWindowPos2fv (const GLfloat *p) - void glWindowPos2iv (const GLint *p) - void glWindowPos2sv (const GLshort *p) - void glWindowPos3d (GLdouble x, GLdouble y, GLdouble z) - void glWindowPos3f (GLfloat x, GLfloat y, GLfloat z) - void glWindowPos3i (GLint x, GLint y, GLint z) - void glWindowPos3s (GLshort x, GLshort y, GLshort z) - void glWindowPos3dv (const GLdouble *p) - void glWindowPos3fv (const GLfloat *p) - void glWindowPos3iv (const GLint *p) - void glWindowPos3sv (const GLshort *p) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 b/Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 deleted file mode 100644 index d1ec8d4b27..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_1_5 +++ /dev/null @@ -1,74 +0,0 @@ -GL_VERSION_1_5 -http://www.opengl.org/documentation/specs/version1.5/glspec15.pdf - - GL_BUFFER_SIZE 0x8764 - GL_BUFFER_USAGE 0x8765 - GL_QUERY_COUNTER_BITS 0x8864 - GL_CURRENT_QUERY 0x8865 - GL_QUERY_RESULT 0x8866 - GL_QUERY_RESULT_AVAILABLE 0x8867 - GL_ARRAY_BUFFER 0x8892 - GL_ELEMENT_ARRAY_BUFFER 0x8893 - GL_ARRAY_BUFFER_BINDING 0x8894 - GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 - GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 - GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 - GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 - GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 - GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A - GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B - GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C - GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D - GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E - GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F - GL_READ_ONLY 0x88B8 - GL_WRITE_ONLY 0x88B9 - GL_READ_WRITE 0x88BA - GL_BUFFER_ACCESS 0x88BB - GL_BUFFER_MAPPED 0x88BC - GL_BUFFER_MAP_POINTER 0x88BD - GL_STREAM_DRAW 0x88E0 - GL_STREAM_READ 0x88E1 - GL_STREAM_COPY 0x88E2 - GL_STATIC_DRAW 0x88E4 - GL_STATIC_READ 0x88E5 - GL_STATIC_COPY 0x88E6 - GL_DYNAMIC_DRAW 0x88E8 - GL_DYNAMIC_READ 0x88E9 - GL_DYNAMIC_COPY 0x88EA - GL_SAMPLES_PASSED 0x8914 - GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE - GL_FOG_COORD GL_FOG_COORDINATE - GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE - GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE - GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE - GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER - GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY - GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING - GL_SRC0_RGB GL_SOURCE0_RGB - GL_SRC1_RGB GL_SOURCE1_RGB - GL_SRC2_RGB GL_SOURCE2_RGB - GL_SRC0_ALPHA GL_SOURCE0_ALPHA - GL_SRC1_ALPHA GL_SOURCE1_ALPHA - GL_SRC2_ALPHA GL_SOURCE2_ALPHA - void glGenQueries (GLsizei n, GLuint* ids) - void glDeleteQueries (GLsizei n, const GLuint* ids) - GLboolean glIsQuery (GLuint id) - void glBeginQuery (GLenum target, GLuint id) - void glEndQuery (GLenum target) - void glGetQueryiv (GLenum target, GLenum pname, GLint* params) - void glGetQueryObjectiv (GLuint id, GLenum pname, GLint* params) - void glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint* params) - void glBindBuffer (GLenum target, GLuint buffer) - void glDeleteBuffers (GLsizei n, const GLuint* buffers) - void glGenBuffers (GLsizei n, GLuint* buffers) - GLboolean glIsBuffer (GLuint buffer) - void glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) - void glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) - void glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data) - GLvoid* glMapBuffer (GLenum target, GLenum access) - GLboolean glUnmapBuffer (GLenum target) - void glGetBufferParameteriv (GLenum target, GLenum pname, GLint* params) - void glGetBufferPointerv (GLenum target, GLenum pname, GLvoid** params) - typedef ptrdiff_t GLsizeiptr - typedef ptrdiff_t GLintptr diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 b/Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 deleted file mode 100644 index 2b65bd8d6c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_0 +++ /dev/null @@ -1,180 +0,0 @@ -GL_VERSION_2_0 -http://www.opengl.org/documentation/specs/version2.0/glspec20.pdf - - GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION - GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 - GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 - GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 - GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 - GL_CURRENT_VERTEX_ATTRIB 0x8626 - GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 - GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 - GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 - GL_STENCIL_BACK_FUNC 0x8800 - GL_STENCIL_BACK_FAIL 0x8801 - GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 - GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 - GL_MAX_DRAW_BUFFERS 0x8824 - GL_DRAW_BUFFER0 0x8825 - GL_DRAW_BUFFER1 0x8826 - GL_DRAW_BUFFER2 0x8827 - GL_DRAW_BUFFER3 0x8828 - GL_DRAW_BUFFER4 0x8829 - GL_DRAW_BUFFER5 0x882A - GL_DRAW_BUFFER6 0x882B - GL_DRAW_BUFFER7 0x882C - GL_DRAW_BUFFER8 0x882D - GL_DRAW_BUFFER9 0x882E - GL_DRAW_BUFFER10 0x882F - GL_DRAW_BUFFER11 0x8830 - GL_DRAW_BUFFER12 0x8831 - GL_DRAW_BUFFER13 0x8832 - GL_DRAW_BUFFER14 0x8833 - GL_DRAW_BUFFER15 0x8834 - GL_BLEND_EQUATION_ALPHA 0x883D - GL_POINT_SPRITE 0x8861 - GL_COORD_REPLACE 0x8862 - GL_MAX_VERTEX_ATTRIBS 0x8869 - GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A - GL_MAX_TEXTURE_COORDS 0x8871 - GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 - GL_FRAGMENT_SHADER 0x8B30 - GL_VERTEX_SHADER 0x8B31 - GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 - GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A - GL_MAX_VARYING_FLOATS 0x8B4B - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D - GL_SHADER_TYPE 0x8B4F - GL_FLOAT_VEC2 0x8B50 - GL_FLOAT_VEC3 0x8B51 - GL_FLOAT_VEC4 0x8B52 - GL_INT_VEC2 0x8B53 - GL_INT_VEC3 0x8B54 - GL_INT_VEC4 0x8B55 - GL_BOOL 0x8B56 - GL_BOOL_VEC2 0x8B57 - GL_BOOL_VEC3 0x8B58 - GL_BOOL_VEC4 0x8B59 - GL_FLOAT_MAT2 0x8B5A - GL_FLOAT_MAT3 0x8B5B - GL_FLOAT_MAT4 0x8B5C - GL_SAMPLER_1D 0x8B5D - GL_SAMPLER_2D 0x8B5E - GL_SAMPLER_3D 0x8B5F - GL_SAMPLER_CUBE 0x8B60 - GL_SAMPLER_1D_SHADOW 0x8B61 - GL_SAMPLER_2D_SHADOW 0x8B62 - GL_DELETE_STATUS 0x8B80 - GL_COMPILE_STATUS 0x8B81 - GL_LINK_STATUS 0x8B82 - GL_VALIDATE_STATUS 0x8B83 - GL_INFO_LOG_LENGTH 0x8B84 - GL_ATTACHED_SHADERS 0x8B85 - GL_ACTIVE_UNIFORMS 0x8B86 - GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 - GL_SHADER_SOURCE_LENGTH 0x8B88 - GL_ACTIVE_ATTRIBUTES 0x8B89 - GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A - GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B - GL_SHADING_LANGUAGE_VERSION 0x8B8C - GL_CURRENT_PROGRAM 0x8B8D - GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 - GL_LOWER_LEFT 0x8CA1 - GL_UPPER_LEFT 0x8CA2 - GL_STENCIL_BACK_REF 0x8CA3 - GL_STENCIL_BACK_VALUE_MASK 0x8CA4 - GL_STENCIL_BACK_WRITEMASK 0x8CA5 - void glBlendEquationSeparate (GLenum, GLenum) - void glDrawBuffers (GLsizei n, const GLenum* bufs) - void glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) - void glStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) - void glStencilMaskSeparate (GLenum, GLuint) - void glAttachShader (GLuint program, GLuint shader) - void glBindAttribLocation (GLuint program, GLuint index, const GLchar* name) - void glCompileShader (GLuint shader) - GLuint glCreateProgram (void) - GLuint glCreateShader (GLenum type) - void glDeleteProgram (GLuint program) - void glDeleteShader (GLuint shader) - void glDetachShader (GLuint program, GLuint shader) - void glDisableVertexAttribArray (GLuint) - void glEnableVertexAttribArray (GLuint) - void glGetActiveAttrib (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name) - void glGetActiveUniform (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name) - void glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders) - GLint glGetAttribLocation (GLuint program, const GLchar* name) - void glGetProgramiv (GLuint program, GLenum pname, GLint* param) - void glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog) - void glGetShaderiv (GLuint shader, GLenum pname, GLint* param) - void glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog) - void glShaderSource (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths) - GLint glGetUniformLocation (GLuint program, const GLchar* name) - void glGetUniformfv (GLuint program, GLint location, GLfloat* params) - void glGetUniformiv (GLuint program, GLint location, GLint* params) - void glGetVertexAttribdv (GLuint, GLenum, GLdouble*) - void glGetVertexAttribfv (GLuint, GLenum, GLfloat*) - void glGetVertexAttribiv (GLuint, GLenum, GLint*) - void glGetVertexAttribPointerv (GLuint, GLenum, GLvoid**) - GLboolean glIsProgram (GLuint program) - GLboolean glIsShader (GLuint shader) - void glLinkProgram (GLuint program) - void glGetShaderSource (GLuint obj, GLsizei maxLength, GLsizei* length, GLchar* source) - void glUseProgram (GLuint program) - void glUniform1f (GLint location, GLfloat v0) - void glUniform1fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform1i (GLint location, GLint v0) - void glUniform1iv (GLint location, GLsizei count, const GLint* value) - void glUniform2f (GLint location, GLfloat v0, GLfloat v1) - void glUniform2fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform2i (GLint location, GLint v0, GLint v1) - void glUniform2iv (GLint location, GLsizei count, const GLint* value) - void glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2) - void glUniform3fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform3i (GLint location, GLint v0, GLint v1, GLint v2) - void glUniform3iv (GLint location, GLsizei count, const GLint* value) - void glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) - void glUniform4fv (GLint location, GLsizei count, const GLfloat* value) - void glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3) - void glUniform4iv (GLint location, GLsizei count, const GLint* value) - void glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glValidateProgram (GLuint program) - void glVertexAttrib1d (GLuint index, GLdouble x) - void glVertexAttrib1dv (GLuint index, const GLdouble* v) - void glVertexAttrib1f (GLuint index, GLfloat x) - void glVertexAttrib1fv (GLuint index, const GLfloat* v) - void glVertexAttrib1s (GLuint index, GLshort x) - void glVertexAttrib1sv (GLuint index, const GLshort* v) - void glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y) - void glVertexAttrib2dv (GLuint index, const GLdouble* v) - void glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y) - void glVertexAttrib2fv (GLuint index, const GLfloat* v) - void glVertexAttrib2s (GLuint index, GLshort x, GLshort y) - void glVertexAttrib2sv (GLuint index, const GLshort* v) - void glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttrib3dv (GLuint index, const GLdouble* v) - void glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z) - void glVertexAttrib3fv (GLuint index, const GLfloat* v) - void glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z) - void glVertexAttrib3sv (GLuint index, const GLshort* v) - void glVertexAttrib4Nbv (GLuint index, const GLbyte* v) - void glVertexAttrib4Niv (GLuint index, const GLint* v) - void glVertexAttrib4Nsv (GLuint index, const GLshort* v) - void glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) - void glVertexAttrib4Nubv (GLuint index, const GLubyte* v) - void glVertexAttrib4Nuiv (GLuint index, const GLuint* v) - void glVertexAttrib4Nusv (GLuint index, const GLushort* v) - void glVertexAttrib4bv (GLuint index, const GLbyte* v) - void glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttrib4dv (GLuint index, const GLdouble* v) - void glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexAttrib4fv (GLuint index, const GLfloat* v) - void glVertexAttrib4iv (GLuint index, const GLint* v) - void glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexAttrib4sv (GLuint index, const GLshort* v) - void glVertexAttrib4ubv (GLuint index, const GLubyte* v) - void glVertexAttrib4uiv (GLuint index, const GLuint* v) - void glVertexAttrib4usv (GLuint index, const GLushort* v) - void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 deleted file mode 100644 index 51aa95b840..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_2_1 +++ /dev/null @@ -1,32 +0,0 @@ -GL_VERSION_2_1 -http://www.opengl.org/documentation/specs/version2.1/glspec21.pdf - - GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F - GL_PIXEL_PACK_BUFFER 0x88EB - GL_PIXEL_UNPACK_BUFFER 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF - GL_FLOAT_MAT2x3 0x8B65 - GL_FLOAT_MAT2x4 0x8B66 - GL_FLOAT_MAT3x2 0x8B67 - GL_FLOAT_MAT3x4 0x8B68 - GL_FLOAT_MAT4x2 0x8B69 - GL_FLOAT_MAT4x3 0x8B6A - GL_SRGB 0x8C40 - GL_SRGB8 0x8C41 - GL_SRGB_ALPHA 0x8C42 - GL_SRGB8_ALPHA8 0x8C43 - GL_SLUMINANCE_ALPHA 0x8C44 - GL_SLUMINANCE8_ALPHA8 0x8C45 - GL_SLUMINANCE 0x8C46 - GL_SLUMINANCE8 0x8C47 - GL_COMPRESSED_SRGB 0x8C48 - GL_COMPRESSED_SRGB_ALPHA 0x8C49 - GL_COMPRESSED_SLUMINANCE 0x8C4A - GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B - void glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) - void glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 deleted file mode 100644 index 747eb83294..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_0 +++ /dev/null @@ -1,163 +0,0 @@ -GL_VERSION_3_0 -http://www.opengl.org/registry/doc/glspec30.20080811.pdf - - GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB - GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 - GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 - GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 - GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 - GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 - GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 - GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES - GL_MAJOR_VERSION 0x821B - GL_MINOR_VERSION 0x821C - GL_NUM_EXTENSIONS 0x821D - GL_CONTEXT_FLAGS 0x821E - GL_DEPTH_BUFFER 0x8223 - GL_STENCIL_BUFFER 0x8224 - GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 - GL_RGBA32F 0x8814 - GL_RGB32F 0x8815 - GL_RGBA16F 0x881A - GL_RGB16F 0x881B - GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD - GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF - GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 - GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 - GL_CLAMP_VERTEX_COLOR 0x891A - GL_CLAMP_FRAGMENT_COLOR 0x891B - GL_CLAMP_READ_COLOR 0x891C - GL_FIXED_ONLY 0x891D - GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS - GL_TEXTURE_RED_TYPE 0x8C10 - GL_TEXTURE_GREEN_TYPE 0x8C11 - GL_TEXTURE_BLUE_TYPE 0x8C12 - GL_TEXTURE_ALPHA_TYPE 0x8C13 - GL_TEXTURE_LUMINANCE_TYPE 0x8C14 - GL_TEXTURE_INTENSITY_TYPE 0x8C15 - GL_TEXTURE_DEPTH_TYPE 0x8C16 - GL_TEXTURE_1D_ARRAY 0x8C18 - GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 - GL_TEXTURE_2D_ARRAY 0x8C1A - GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B - GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C - GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D - GL_R11F_G11F_B10F 0x8C3A - GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B - GL_RGB9_E5 0x8C3D - GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E - GL_TEXTURE_SHARED_SIZE 0x8C3F - GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 - GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 - GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 - GL_PRIMITIVES_GENERATED 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 - GL_RASTERIZER_DISCARD 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B - GL_INTERLEAVED_ATTRIBS 0x8C8C - GL_SEPARATE_ATTRIBS 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F - GL_RGBA32UI 0x8D70 - GL_RGB32UI 0x8D71 - GL_RGBA16UI 0x8D76 - GL_RGB16UI 0x8D77 - GL_RGBA8UI 0x8D7C - GL_RGB8UI 0x8D7D - GL_RGBA32I 0x8D82 - GL_RGB32I 0x8D83 - GL_RGBA16I 0x8D88 - GL_RGB16I 0x8D89 - GL_RGBA8I 0x8D8E - GL_RGB8I 0x8D8F - GL_RED_INTEGER 0x8D94 - GL_GREEN_INTEGER 0x8D95 - GL_BLUE_INTEGER 0x8D96 - GL_ALPHA_INTEGER 0x8D97 - GL_RGB_INTEGER 0x8D98 - GL_RGBA_INTEGER 0x8D99 - GL_BGR_INTEGER 0x8D9A - GL_BGRA_INTEGER 0x8D9B - GL_SAMPLER_1D_ARRAY 0x8DC0 - GL_SAMPLER_2D_ARRAY 0x8DC1 - GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 - GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 - GL_SAMPLER_CUBE_SHADOW 0x8DC5 - GL_UNSIGNED_INT_VEC2 0x8DC6 - GL_UNSIGNED_INT_VEC3 0x8DC7 - GL_UNSIGNED_INT_VEC4 0x8DC8 - GL_INT_SAMPLER_1D 0x8DC9 - GL_INT_SAMPLER_2D 0x8DCA - GL_INT_SAMPLER_3D 0x8DCB - GL_INT_SAMPLER_CUBE 0x8DCC - GL_INT_SAMPLER_1D_ARRAY 0x8DCE - GL_INT_SAMPLER_2D_ARRAY 0x8DCF - GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 - GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 - GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 - GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 - GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 - GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 - GL_QUERY_WAIT 0x8E13 - GL_QUERY_NO_WAIT 0x8E14 - GL_QUERY_BY_REGION_WAIT 0x8E15 - GL_QUERY_BY_REGION_NO_WAIT 0x8E16 - void glColorMaski (GLuint, GLboolean, GLboolean, GLboolean, GLboolean) - void glGetBooleani_v (GLenum, GLuint, GLboolean*) - void glEnablei (GLenum, GLuint) - void glDisablei (GLenum, GLuint) - GLboolean glIsEnabledi (GLenum, GLuint) - void glBeginTransformFeedback (GLenum) - void glEndTransformFeedback (void) - void glTransformFeedbackVaryings (GLuint, GLsizei, const GLchar **, GLenum) - void glGetTransformFeedbackVarying (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *) - void glClampColor (GLenum, GLenum) - void glBeginConditionalRender (GLuint, GLenum) - void glEndConditionalRender (void) - void glVertexAttribI1i (GLuint, GLint) - void glVertexAttribI2i (GLuint, GLint, GLint) - void glVertexAttribI3i (GLuint, GLint, GLint, GLint) - void glVertexAttribI4i (GLuint, GLint, GLint, GLint, GLint) - void glVertexAttribI1ui (GLuint, GLuint) - void glVertexAttribI2ui (GLuint, GLuint, GLuint) - void glVertexAttribI3ui (GLuint, GLuint, GLuint, GLuint) - void glVertexAttribI4ui (GLuint, GLuint, GLuint, GLuint, GLuint) - void glVertexAttribI1iv (GLuint, const GLint*) - void glVertexAttribI2iv (GLuint, const GLint*) - void glVertexAttribI3iv (GLuint, const GLint*) - void glVertexAttribI4iv (GLuint, const GLint*) - void glVertexAttribI1uiv (GLuint, const GLuint*) - void glVertexAttribI2uiv (GLuint, const GLuint*) - void glVertexAttribI3uiv (GLuint, const GLuint*) - void glVertexAttribI4uiv (GLuint, const GLuint*) - void glVertexAttribI4bv (GLuint, const GLbyte*) - void glVertexAttribI4sv (GLuint, const GLshort*) - void glVertexAttribI4ubv (GLuint, const GLubyte*) - void glVertexAttribI4usv (GLuint, const GLushort*) - void glVertexAttribIPointer (GLuint, GLint, GLenum, GLsizei, const GLvoid*) - void glGetVertexAttribIiv (GLuint, GLenum, GLint*) - void glGetVertexAttribIuiv (GLuint, GLenum, GLuint*) - void glGetUniformuiv (GLuint, GLint, GLuint*) - void glBindFragDataLocation (GLuint, GLuint, const GLchar*) - GLint glGetFragDataLocation (GLuint, const GLchar*) - void glUniform1ui (GLint, GLuint) - void glUniform2ui (GLint, GLuint, GLuint) - void glUniform3ui (GLint, GLuint, GLuint, GLuint) - void glUniform4ui (GLint, GLuint, GLuint, GLuint, GLuint) - void glUniform1uiv (GLint, GLsizei, const GLuint*) - void glUniform2uiv (GLint, GLsizei, const GLuint*) - void glUniform3uiv (GLint, GLsizei, const GLuint*) - void glUniform4uiv (GLint, GLsizei, const GLuint*) - void glTexParameterIiv (GLenum, GLenum, const GLint*) - void glTexParameterIuiv (GLenum, GLenum, const GLuint*) - void glGetTexParameterIiv (GLenum, GLenum, GLint*) - void glGetTexParameterIuiv (GLenum, GLenum, GLuint*) - void glClearBufferiv (GLenum, GLint, const GLint*) - void glClearBufferuiv (GLenum, GLint, const GLuint*) - void glClearBufferfv (GLenum, GLint, const GLfloat*) - void glClearBufferfi (GLenum, GLint, GLfloat, GLint) - const GLubyte* glGetStringi (GLenum, GLuint) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 deleted file mode 100644 index 3e387a3c9c..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_1 +++ /dev/null @@ -1,41 +0,0 @@ -GL_VERSION_3_1 -http://www.opengl.org/registry/doc/glspec30.20080811.pdf - - GL_SAMPLER_2D_RECT 0x8B63 - GL_SAMPLER_2D_RECT_SHADOW 0x8B64 - GL_SAMPLER_BUFFER 0x8DC2 - GL_INT_SAMPLER_2D_RECT 0x8DCD - GL_INT_SAMPLER_BUFFER 0x8DD0 - GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 - GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 - GL_TEXTURE_BUFFER 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B - GL_TEXTURE_BINDING_BUFFER 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D - GL_TEXTURE_BUFFER_FORMAT 0x8C2E - GL_TEXTURE_RECTANGLE 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 - GL_RED_SNORM 0x8F90 - GL_RG_SNORM 0x8F91 - GL_RGB_SNORM 0x8F92 - GL_RGBA_SNORM 0x8F93 - GL_R8_SNORM 0x8F94 - GL_RG8_SNORM 0x8F95 - GL_RGB8_SNORM 0x8F96 - GL_RGBA8_SNORM 0x8F97 - GL_R16_SNORM 0x8F98 - GL_RG16_SNORM 0x8F99 - GL_RGB16_SNORM 0x8F9A - GL_RGBA16_SNORM 0x8F9B - GL_SIGNED_NORMALIZED 0x8F9C - GL_PRIMITIVE_RESTART 0x8F9D - GL_PRIMITIVE_RESTART_INDEX 0x8F9E - GL_BUFFER_ACCESS_FLAGS 0x911F - GL_BUFFER_MAP_LENGTH 0x9120 - GL_BUFFER_MAP_OFFSET 0x9121 - void glDrawArraysInstanced (GLenum, GLint, GLsizei, GLsizei) - void glDrawElementsInstanced (GLenum, GLsizei, GLenum, const GLvoid*, GLsizei) - void glTexBuffer (GLenum, GLenum, GLuint) - void glPrimitiveRestartIndex (GLuint) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 deleted file mode 100644 index 81ba55dcc2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_2 +++ /dev/null @@ -1,28 +0,0 @@ -GL_VERSION_3_2 -http://www.opengl.org/registry/doc/glspec32.core.20090803.pdf - - GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 - GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 - GL_LINES_ADJACENCY 0x000A - GL_LINE_STRIP_ADJACENCY 0x000B - GL_TRIANGLES_ADJACENCY 0x000C - GL_TRIANGLE_STRIP_ADJACENCY 0x000D - GL_PROGRAM_POINT_SIZE 0x8642 - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 - GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 - GL_GEOMETRY_SHADER 0x8DD9 - GL_GEOMETRY_VERTICES_OUT 0x8916 - GL_GEOMETRY_INPUT_TYPE 0x8917 - GL_GEOMETRY_OUTPUT_TYPE 0x8918 - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 - GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 - GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 - GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 - GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 - GL_CONTEXT_PROFILE_MASK 0x9126 - void glGetInteger64i_v (GLenum, GLuint, GLint64 *) - void glGetBufferParameteri64v (GLenum, GLenum, GLint64 *) - void glFramebufferTexture (GLenum, GLenum, GLuint, GLint) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 b/Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 deleted file mode 100644 index 1fbe90b97a..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_3_3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_VERSION_3_3 -http://www.opengl.org/registry/doc/glspec32.core.20090803.pdf - - GL_RGB10_A2UI 0x906F - GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE - void glVertexAttribDivisor (GLuint index, GLuint divisor) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 deleted file mode 100644 index dc33f9179f..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_0 +++ /dev/null @@ -1,20 +0,0 @@ -GL_VERSION_4_0 -http://www.opengl.org/registry/doc/glspec32.core.20090803.pdf - - GL_SAMPLE_SHADING 0x8C36 - GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F - GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F - GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 - GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A - GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B - GL_SAMPLER_CUBE_MAP_ARRAY 0x900C - GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D - GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E - GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F - void glMinSampleShading (GLclampf value) - void glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha) - void glBlendEquationi (GLuint buf, GLenum mode) - void glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) - void glBlendFunci (GLuint buf, GLenum src, GLenum dst) diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 deleted file mode 100644 index 4c51e00973..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_VERSION_4_1 -http://www.opengl.org/registry/doc/glspec41.core.20100725.pdf - diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 deleted file mode 100644 index 401fb633c4..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_2 +++ /dev/null @@ -1,8 +0,0 @@ -GL_VERSION_4_2 -http://www.opengl.org/registry/doc/glspec42.core.20110822.pdf - - GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C - GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D - GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E - GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F - diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 deleted file mode 100644 index 333109f7af..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_3 +++ /dev/null @@ -1,5 +0,0 @@ -GL_VERSION_4_3 -http://www.opengl.org/registry/ - - GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E - GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 diff --git a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 b/Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 deleted file mode 100644 index dfa3bf2291..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_VERSION_4_4 +++ /dev/null @@ -1,5 +0,0 @@ -GL_VERSION_4_4 -http://www.opengl.org/registry/ - - GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 - diff --git a/Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint b/Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint deleted file mode 100644 index 6916189eb2..0000000000 --- a/Engine/lib/glew/auto/core/gl/GL_WIN_swap_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_WIN_swap_hint -http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_16zy.asp -GL_WIN_swap_hint - void glAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/core/gl/WGL_ARB_create_context b/Engine/lib/glew/auto/core/gl/WGL_ARB_create_context deleted file mode 100644 index 20b3119c80..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_ARB_create_context +++ /dev/null @@ -1,12 +0,0 @@ -WGL_ARB_create_context -http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt -WGL_ARB_create_context - WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 - WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 - WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 - WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 - WGL_CONTEXT_FLAGS_ARB 0x2094 - ERROR_INVALID_VERSION_ARB 0x2095 - ERROR_INVALID_PROFILE_ARB 0x2096 - HGLRC wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int* attribList) diff --git a/Engine/lib/glew/auto/core/gl/WGL_ATI_render_texture_rectangle b/Engine/lib/glew/auto/core/gl/WGL_ATI_render_texture_rectangle deleted file mode 100644 index 55df114d31..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_ATI_render_texture_rectangle +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ATI_render_texture_rectangle - -WGL_ATI_render_texture_rectangle - WGL_TEXTURE_RECTANGLE_ATI 0x21A5 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es2_profile b/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es2_profile deleted file mode 100644 index ca9881af6b..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es2_profile.txt -WGL_EXT_create_context_es2_profile - WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es_profile b/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es_profile deleted file mode 100644 index 6eb7cddfb3..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es_profile.txt -WGL_EXT_create_context_es_profile - WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB deleted file mode 100644 index e4a40322fd..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -WGL_EXT_framebuffer_sRGB - WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 diff --git a/Engine/lib/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float b/Engine/lib/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float deleted file mode 100644 index 30925fc5da..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_pixel_format_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -WGL_EXT_pixel_format_packed_float - WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 diff --git a/Engine/lib/glew/auto/core/gl/WGL_NV_gpu_affinity b/Engine/lib/glew/auto/core/gl/WGL_NV_gpu_affinity deleted file mode 100644 index f722204cd7..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_NV_gpu_affinity +++ /dev/null @@ -1,12 +0,0 @@ -WGL_NV_gpu_affinity -http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt -WGL_NV_gpu_affinity - WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 - WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 - BOOL wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu) - BOOL wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice) - HDC wglCreateAffinityDCNV (const HGPUNV *phGpuList) - BOOL wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu) - BOOL wglDeleteDCNV (HDC hdc) - DECLARE_HANDLE(HGPUNV); - typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; diff --git a/Engine/lib/glew/auto/core/gl/WGL_NV_vertex_array_range b/Engine/lib/glew/auto/core/gl/WGL_NV_vertex_array_range deleted file mode 100644 index ca22d31a3e..0000000000 --- a/Engine/lib/glew/auto/core/gl/WGL_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -WGL_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -WGL_NV_vertex_array_range - void * wglAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void wglFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/custom.txt b/Engine/lib/glew/auto/custom.txt deleted file mode 100644 index b797b95887..0000000000 --- a/Engine/lib/glew/auto/custom.txt +++ /dev/null @@ -1,7 +0,0 @@ -WGL_ARB_extensions_string -WGL_EXT_extensions_string -WGL_ARB_pixel_format -WGL_ARB_pbuffer -WGL_NV_float_buffer -WGL_ATI_pixel_format_float -WGL_ARB_multisample diff --git a/Engine/lib/glew/auto/doc/advanced.html b/Engine/lib/glew/auto/doc/advanced.html deleted file mode 100644 index 4bf2aa8817..0000000000 --- a/Engine/lib/glew/auto/doc/advanced.html +++ /dev/null @@ -1,169 +0,0 @@ -

Automatic Code Generation

- -

-Starting from release 1.1.0, the source code and parts of the -documentation are automatically generated from the extension -specifications in a two-step process. In the first step, -specification files from the OpenGL registry are downloaded and -parsed. Skeleton descriptors are created for each extension. These -descriptors contain all necessary information for creating the source -code and documentation in a simple and compact format, including the -name of the extension, url link to the specification, tokens, function -declarations, typedefs and struct definitions. In the second step, -the header files as well as the library and glewinfo source are -generated from the descriptor files. The code generation scripts are -located in the auto subdirectory. -

- -

-The code generation scripts require GNU make, wget, and perl. On -Windows, the simplest way to get access to these tools is to install -Cygwin, but make sure that the -root directory is mounted in binary mode. The makefile in the -auto directory provides the following build targets: -

- - - - - - - - - - - - -
makeCreate the source files from the descriptors.
If the -descriptors do not exist, create them from the spec files.
If the spec -files do not exist, download them from the OpenGL repository.
make cleanDelete the source files.
make clobberDelete the source files and the descriptors.
make destroyDelete the source files, the descriptors, and the spec files.
make customCreate the source files for the extensions -listed in auto/custom.txt.
See "Custom Code -Generation" below for more details.
- -

Adding a New Extension

- -

-To add a new extension, create a descriptor file for the extension in -auto/core and rerun the code generation scripts by typing -make clean; make in the auto directory. -

- -

-The format of the descriptor file is given below. Items in -brackets are optional. -

- -

-<Extension Name>
-[<URL of Specification File>]
-    [<Token Name> <Token Value>]
-    [<Token Name> <Token Value>]
-    ...
-    [<Typedef>]
-    [<Typedef>]
-    ...
-    [<Function Signature>]
-    [<Function Signature>]
-    ...
- -

- - - -

-Take a look at one of the files in auto/core for an -example. Note that typedefs and function signatures should not be -terminated with a semicolon. -

- -

Custom Code Generation

-

-Starting from GLEW 1.3.0, it is possible to control which extensions -to include in the libarary by specifying a list in -auto/custom.txt. This is useful when you do not need all the -extensions and would like to reduce the size of the source files. -Type make clean; make custom in the auto directory -to rerun the scripts with the custom list of extensions. -

- -

-For example, the following is the list of extensions needed to get GLEW and the -utilities to compile. -

- -

-WGL_ARB_extensions_string
-WGL_ARB_multisample
-WGL_ARB_pixel_format
-WGL_ARB_pbuffer
-WGL_EXT_extensions_string
-WGL_ATI_pixel_format_float
-WGL_NV_float_buffer
-

- -

Multiple Rendering Contexts (GLEW MX)

- -

Starting with release 1.2.0, thread-safe support for multiple -rendering contexts, possibly with different capabilities, is -available. Since this is not required by most users, it is not added -to the binary releases to maintain compatibility between different -versions. To include multi-context support, you have to do the -following:

-
    -
  1. Compile and use GLEW with the GLEW_MX preprocessor token -defined.
  2. -
  3. For each rendering context, create a GLEWContext object -that will be available as long as the rendering context exists.
  4. -
  5. Define a macro or function called glewGetContext() that -returns a pointer to the GLEWContext object associated with -the rendering context from which OpenGL/WGL/GLX calls are issued. This -dispatch mechanism is primitive, but generic. -
  6. Make sure that you call glewInit() after creating the -GLEWContext object in each rendering context. Note, that the -GLEWContext pointer returned by glewGetContext() has -to reside in global or thread-local memory. -
- -

Note that according to the MSDN -WGL documentation, you have to initialize the entry points for -every rendering context that use pixel formats with different -capabilities For example, the pixel formats provided by the generic -software OpenGL implementation by Microsoft vs. the hardware -accelerated pixel formats have different capabilities. GLEW by -default ignores this requirement, and does not define per-context -entry points (you can however do this using the steps described -above). Assuming a global namespace for the entry points works in -most situations, because typically all hardware accelerated pixel -formats provide the same entry points and capabilities. This means -that unless you use the multi-context version of GLEW, you need to -call glewInit() only once in your program, or more precisely, -once per process.

- -

Separate Namespace

- -

-To avoid name clashes when linking with libraries that include the -same symbols, extension entry points are declared in a separate -namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL -function names to their GLEW equivalents. For instance, -glFancyFunction is simply an alias to -glewFancyFunction. The separate namespace does not effect -token and function pointer definitions. -

- -

Known Issues

- -

-GLEW requires GLX 1.2 for compatibility with GLUT. -

- diff --git a/Engine/lib/glew/auto/doc/basic.html b/Engine/lib/glew/auto/doc/basic.html deleted file mode 100644 index 693575ba5a..0000000000 --- a/Engine/lib/glew/auto/doc/basic.html +++ /dev/null @@ -1,180 +0,0 @@ -

Initializing GLEW

-

-First you need to create a valid OpenGL rendering context and call -glewInit() to initialize the extension entry points. If -glewInit() returns GLEW_OK, the initialization -succeeded and you can use the available extensions as well as core -OpenGL functionality. For example: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-...
-glutInit(&argc, argv);
-glutCreateWindow("GLEW Test");
-GLenum err = glewInit();
-if (GLEW_OK != err)
-{
-  /* Problem: glewInit failed, something is seriously wrong. */
-  fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
-  ...
-}
-fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
-

- -

Checking for Extensions

- -

-Starting from GLEW 1.1.0, you can find out if a particular extension -is available on your platform by querying globally defined variables -of the form GLEW_{extension_name}: -

- -

-if (GLEW_ARB_vertex_program)
-{
-  /* It is safe to use the ARB_vertex_program extension here. */
-  glGenProgramsARB(...);
-}
-

- -

-In GLEW 1.0.x, a global structure was used for this task. To ensure -binary compatibility between releases, the struct was replaced with a -set of variables. -

- -

-You can also check for core OpenGL functionality. For example, to -see if OpenGL 1.3 is supported, do the following: -

- -

-if (GLEW_VERSION_1_3)
-{
-  /* Yay! OpenGL 1.3 is supported! */
-}
-

- -

-In general, you can check if GLEW_{extension_name} or -GLEW_VERSION_{version} is true or false. -

- -

-It is also possible to perform extension checks from string -input. Starting from the 1.3.0 release, use glewIsSupported -to check if the required core or extension functionality is -available: -

- -

-if (glewIsSupported("GL_VERSION_1_4  GL_ARB_point_sprite"))
-{
-  /* Great, we have OpenGL 1.4 + point sprites. */
-}
-

- -

-For extensions only, glewGetExtension provides a slower alternative -(GLEW 1.0.x-1.2.x). Note that in the 1.3.0 release -glewGetExtension was replaced with -glewIsSupported. -

- -

-if (glewGetExtension("GL_ARB_fragment_program"))
-{
-  /* Looks like ARB_fragment_program is supported. */
-}
-

- -

Experimental Drivers

- -

-GLEW obtains information on the supported extensions from the graphics -driver. Experimental or pre-release drivers, however, might not -report every available extension through the standard mechanism, in -which case GLEW will report it unsupported. To circumvent this -situation, the glewExperimental global switch can be turned -on by setting it to GL_TRUE before calling -glewInit(), which ensures that all extensions with valid -entry points will be exposed. -

- -

Platform Specific Extensions

- -

-Platform specific extensions are separated into two header files: -wglew.h and glxew.h, which define the available -WGL and GLX extensions. To determine if a certain -extension is supported, query WGLEW_{extension name} or -GLXEW_{extension_name}. For example: -

- -

-#include <GL/wglew.h>
-
-if (WGLEW_ARB_pbuffer)
-{
-  /* OK, we can use pbuffers. */
-}
-else
-{
-  /* Sorry, pbuffers will not work on this platform. */
-}
-

- -

-Alternatively, use wglewIsSupported or -glxewIsSupported to check for extensions from a string: -

- -

-if (wglewIsSupported("WGL_ARB_pbuffer"))
-{
-  /* OK, we can use pbuffers. */
-}
-

- -

Utilities

- -

-GLEW provides two command-line utilities: one for creating a list of -available extensions and visuals; and another for verifying extension -entry points. -

- -

visualinfo: extensions and visuals

- -

-visualinfo is an extended version of glxinfo. The -Windows version creates a file called visualinfo.txt, which -contains a list of available OpenGL, WGL, and GLU extensions as well -as a table of visuals aka. pixel formats. Pbuffer and MRT capable -visuals are also included. For additional usage information, type -visualinfo -h. -

- -

glewinfo: extension verification utility

- -

-glewinfo allows you to verify the entry points for the -extensions supported on your platform. The Windows version -reports the results to a text file called glewinfo.txt. The -Unix version prints the results to stdout. -

- -

Windows usage:

-
glewinfo [-pf <id>]
- -

where <id> is the pixel format id for which the -capabilities are displayed.

- -

Unix usage:

-
glewinfo [-display <dpy>] [-visual <id>]
- -

where <dpy> is the X11 display and <id> is -the visual id for which the capabilities are displayed.

- diff --git a/Engine/lib/glew/auto/doc/build.html b/Engine/lib/glew/auto/doc/build.html deleted file mode 100644 index ef06a85cbe..0000000000 --- a/Engine/lib/glew/auto/doc/build.html +++ /dev/null @@ -1,47 +0,0 @@ -

Building GLEW

- -

Windows

- -

A MS Visual Studio project is provided in the build/vc6 directory.

-

Pre-built shared and static libraries are also available for download.

- -

Makefile

- -

For platforms other than MS Windows, the provided Makefile is used.

- -

Command-line variables

- - - - - - -
SYSTEMautoTarget system to build: darwin, linux, solaris, etc.
For a full list of supported targets: ls config/Makefile.*
-config.guess is used to auto detect, as necessary.
GLEW_DEST/usrBase directory for installation.
- -

Make targets

- - - - - - - - - - - - -
allBuild everything.
glew.libBuild static and dynamic GLEW libraries.
glew.lib.mxBuild static and dynamic GLEWmx libraries.
glew.binBuild glewinfo and visualinfo utilities.
cleanDelete temporary and built files.
install.allInstall everything.
installInstall GLEW libraries.
install.mxInstall GLEWmx libraries.
install.binInstall glewinfo and visualinfo utilities.
uninstallDelete installed files.
- -

Requirements

- -
    -
  • GNU make
  • -
  • perl
  • -
  • wget
  • -
  • GNU sed
  • -
  • gcc compiler
  • -
- -Ubuntu:
sudo apt-get install Xmu-dev Xi-Dev
diff --git a/Engine/lib/glew/auto/doc/credits.html b/Engine/lib/glew/auto/doc/credits.html deleted file mode 100644 index 7f1b8d9a87..0000000000 --- a/Engine/lib/glew/auto/doc/credits.html +++ /dev/null @@ -1,25 +0,0 @@ -

Credits

- -

-GLEW was developed by Milan -Ikits and Marcelo -Magallon. They also perform occasional maintainance to make sure -that GLEW stays in mint condition. Aaron Lefohn, Joe Kniss, and Chris -Wyman were the first users and also assisted with the design and -debugging process. The acronym GLEW originates from Aaron Lefohn. -Pasi Kärkkäinen identified and fixed several problems with -GLX and SDL. Nate Robins created the wglinfo utility, to -which modifications were made by Michael Wimmer. -

- -

Copyright

- -

-GLEW is originally derived from the EXTGL project by Lev Povalahev. -The source code is licensed under the Modified BSD -License, the Mesa 3-D License (MIT -License), and the Khronos License (MIT -License). The automatic code generation scripts are released under -the GNU GPL. -

diff --git a/Engine/lib/glew/auto/doc/index.html b/Engine/lib/glew/auto/doc/index.html deleted file mode 100644 index 1650becc0e..0000000000 --- a/Engine/lib/glew/auto/doc/index.html +++ /dev/null @@ -1,118 +0,0 @@ -

-The OpenGL Extension Wrangler Library (GLEW) is a cross-platform -open-source C/C++ extension loading library. GLEW provides efficient -run-time mechanisms for determining which OpenGL extensions are -supported on the target platform. OpenGL core and extension -functionality is exposed in a single header file. GLEW has been -tested on a variety of operating systems, including Windows, Linux, -Mac OS X, FreeBSD, Irix, and Solaris. -

- -

Downloads

-

-GLEW is distributed -as source and precompiled binaries.
-The latest release is -1.10.0[07-22-13]: -

-

-

-

- - - -
- - - - - - - - - - - - - - - -
Source -ZIP |  -TGZ
Binaries -Windows 32-bit and 64-bit |  -
-
- -

-

-An up-to-date copy is also available using git: -

-
    -
  • github
    -git clone https://github.com/nigels-com/glew.git glew
     
  • -
  • Sourceforge
    -git clone git://git.code.sf.net/p/glew/code glew
     
  • -
- -

-

-Unsupported snapshots are also available: -

- - -

Supported Extensions

-

-The latest release contains support for OpenGL 4.4 and the following extensions: -

- - -

News

-
    -
  • [07-22-13] GLEW 1.10.0 adds support for OpenGL 4.4, new extensions
  • -
  • [08-06-12] GLEW 1.9.0 adds support for OpenGL 4.3, new extensions
  • -
  • [07-17-12] GLEW 1.8.0 fixes minor bugs and adds new extensions
  • -
  • [08-26-11] GLEW 1.7.0 adds support for OpenGL 4.2, new extensions, fixes bugs
  • -
  • [04-27-11] GLEW 1.6.0 fixes minor bugs and adds eight new extensions
  • -
  • [01-31-11] GLEW 1.5.8 fixes minor bugs and adds two new extensions
  • -
  • [11-03-10] GLEW 1.5.7 fixes minor bugs and adds one new extension
  • -
  • [09-07-10] GLEW 1.5.6 adds support for OpenGL 4.1, fixes bugs
  • -
  • [07-13-10] GLEW 1.5.5 fixes minor bugs and adds new extensions
  • -
  • [04-21-10] GLEW 1.5.4 adds support for OpenGL 3.3, OpenGL 4.0 and new extensions, fixes bugs
  • -
  • [02-28-10] GLEW 1.5.3 fixes minor bugs and adds three new extensions
  • -
  • [12-31-09] GLEW 1.5.2 adds support for OpenGL 3.1, OpenGL 3.2 and new extensions
  • -
  • [11-03-08] GLEW 1.5.1 adds support for OpenGL 3.0 and 31 new extensions
  • -
  • [12-27-07] GLEW 1.5.0 is released under less restrictive licenses
  • -
  • [04-27-07] GLEW 1.4.0 is released
  • -
  • [03-08-07] GLEW is included in the NVIDIA OpenGL SDK
  • -
  • [03-04-07] GLEW 1.3.6 is released
  • -
  • [02-28-07] Repository is migrated to SVN
  • -
  • [02-25-07] GLEW is included in the OpenGL SDK
  • -
  • [11-21-06] GLEW 1.3.5 adds OpenGL 2.1 and NVIDIA G80 extensions
  • -
  • [03-04-06] GLEW 1.3.4 adds support for five new extensions
  • -
  • [05-16-05] GLEW 1.3.3 is released
  • -
  • [03-16-05] GLEW 1.3.2 adds support for GL_APPLE_pixel_buffer
  • -
  • [02-11-05] gljava and sdljava provide a Java binding to OpenGL via GLEW
  • -
  • [02-02-05] GLEW 1.3.1 adds support for GL_EXT_framebuffer_object
  • -
  • [01-04-05] GLEW 1.3.0 adds core OpenGL 2.0 support plus many enhancements
  • -
  • [12-22-04] GLEWpy Python wrapper announced
  • -
  • [12-12-04] Mailing lists created on sourceforge
  • -
  • [12-06-04] GLEW 1.2.5 adds new extensions and support for FreeBSD
  • -
- -

Links

- - diff --git a/Engine/lib/glew/auto/doc/install.html b/Engine/lib/glew/auto/doc/install.html deleted file mode 100644 index 448aafd819..0000000000 --- a/Engine/lib/glew/auto/doc/install.html +++ /dev/null @@ -1,126 +0,0 @@ -

Installation

- -

-To use the shared library version of GLEW, you need to copy the -headers and libraries into their destination directories. On Windows -this typically boils down to copying: -

- - - - - - - - - - -
bin/glew32.dll    to    %SystemRoot%/system32
lib/glew32.lib    to    {VC Root}/Lib
include/GL/glew.h    to    {VC Root}/Include/GL
include/GL/wglew.h    to    {VC Root}/Include/GL
-

-

- -

-where {VC Root} is the Visual C++ root directory, typically -C:/Program Files/Microsoft Visual Studio/VC98 for Visual -Studio 6.0 or C:/Program Files/Microsoft Visual -Studio .NET 2003/Vc7/PlatformSDK for Visual Studio .NET. -

- -

-On Unix, typing make install will attempt to install GLEW -into /usr/include/GL and /usr/lib. You can -customize the installation target via the GLEW_DEST -environment variable if you do not have write access to these -directories. -

- -

Building Your Project with GLEW

-

-There are two ways to build your project with GLEW. -

-

Including the source files / project file

-

-The simpler but less flexible way is to include glew.h and -glew.c into your project. On Windows, you also need to -define the GLEW_STATIC preprocessor token when building a -static library or executable, and the GLEW_BUILD preprocessor -token when building a dll. You also need to replace -<GL/gl.h> and <GL/glu.h> with -<glew.h> in your code and set the appropriate include -flag (-I) to tell the compiler where to look for it. For -example: -

-

-#include <glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

-

-Depending on where you put glew.h you may also need to change -the include directives in glew.c. Note that if you are using -GLEW together with GLUT, you have to include glew.h first. -In addition, glew.h includes glu.h, so you do not -need to include it separately. -

-

-On Windows, you also have the option of adding the supplied project -file glew_static.dsp to your workspace (solution) and compile -it together with your other projects. In this case you also need to -change the GLEW_BUILD preprocessor constant to -GLEW_STATIC when building a static library or executable, -otherwise you get build errors. -

-

-Note that GLEW does not use the C -runtime library, so it does not matter which version (single-threaded, -multi-threaded or multi-threaded DLL) it is linked with (without -debugging information). It is, however, always a good idea to compile all -your projects including GLEW with the same C runtime settings. -

- -

Using GLEW as a shared library

- -

-Alternatively, you can use the provided project files / makefile to -build a separate shared library you can link your projects with later. -In this case the best practice is to install glew.h, -glew32.lib, and glew32.dll / libGLEW.so to -where the OpenGL equivalents gl.h, opengl32.lib, and -opengl32.dll / libGL.so are located. Note that you -need administrative privileges to do this. If you do not have -administrator access and your system administrator will not do it for -you, you can install GLEW into your own lib and include subdirectories -and tell the compiler where to find it. Then you can just replace -<GL/gl.h> with <GL/glew.h> in your -program: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

- -

-or: -

- -

-#include <GL/glew.h>
-<gl and glu functionality is available here>
-

- -

-Remember to link your project with glew32.lib, -glu32.lib, and opengl32.lib on Windows and -libGLEW.so, libGLU.so, and libGL.so on -Unix (-lGLEW -lGLU -lGL). -

- -

-It is important to keep in mind that glew.h includes neither -windows.h nor gl.h. Also, GLEW will warn you by -issuing a preprocessor error in case you have included gl.h, -glext.h, or glATI.h before glew.h. -

- diff --git a/Engine/lib/glew/auto/doc/log.html b/Engine/lib/glew/auto/doc/log.html deleted file mode 100644 index 13b18a5964..0000000000 --- a/Engine/lib/glew/auto/doc/log.html +++ /dev/null @@ -1,912 +0,0 @@ -

Change Log

- -
-
    -
  • 1.10.0 [07-22-13] -
      -
    • New features: -
        -
      • Support for OpenGL 4.4 -
      -
    • New extensions: -
        -
      • GL_AMD_interleaved_elements -
      • GL_AMD_shader_trinary_minmax -
      • GL_AMD_sparse_texture -
      • GL_ANGLE_depth_texture -
      • GL_ANGLE_framebuffer_blit -
      • GL_ANGLE_framebuffer_multisample -
      • GL_ANGLE_instanced_arrays -
      • GL_ANGLE_pack_reverse_row_order -
      • GL_ANGLE_program_binary -
      • GL_ANGLE_texture_compression_dxt1 -
      • GL_ANGLE_texture_compression_dxt3 -
      • GL_ANGLE_texture_compression_dxt5 -
      • GL_ANGLE_texture_usage -
      • GL_ANGLE_timer_query -
      • GL_ANGLE_translated_shader_source -
      • GL_ARB_bindless_texture -
      • GL_ARB_buffer_storage -
      • GL_ARB_clear_texture -
      • GL_ARB_compute_variable_group_size -
      • GL_ARB_enhanced_layouts -
      • GL_ARB_indirect_parameters -
      • GL_ARB_multi_bind -
      • GL_ARB_query_buffer_object -
      • GL_ARB_seamless_cubemap_per_texture -
      • GL_ARB_shader_draw_parameters -
      • GL_ARB_shader_group_vote -
      • GL_ARB_sparse_texture -
      • GL_ARB_texture_mirror_clamp_to_edge -
      • GL_ARB_texture_stencil8 -
      • GL_ARB_vertex_type_10f_11f_11f_rev -
      • GL_INTEL_map_texture -
      • GL_NVX_conditional_render -
      • GL_NV_bindless_multi_draw_indirect -
      • GL_NV_blend_equation_advanced -
      • GL_NV_compute_program5 -
      • GL_NV_deep_texture3D -
      • GL_NV_draw_texture -
      • GL_NV_shader_atomic_counters -
      • GL_NV_shader_storage_buffer_object -
      • GL_REGAL_ES1_0_compatibility -
      • GL_REGAL_ES1_1_compatibility -
      • GL_REGAL_enable -
      • GLX_EXT_buffer_age -
      • WGL_ARB_robustness_application_isolation -
      • WGL_ARB_robustness_share_group_isolation -
      -
    • Bug fixes -
    -
- -
-
    -
  • 1.9.0 [08-06-12] -
      -
    • New features: - -
    • New extensions: -
        -
      • GL_ARB_ES3_compatibility -
      • GL_ARB_clear_buffer_object -
      • GL_ARB_compute_shader -
      • GL_ARB_copy_image -
      • GL_ARB_explicit_uniform_location -
      • GL_ARB_fragment_layer_viewport -
      • GL_ARB_framebuffer_no_attachments -
      • GL_ARB_internalformat_query2 -
      • GL_ARB_multi_draw_indirect -
      • GL_ARB_program_interface_query -
      • GL_ARB_robust_buffer_access_behavior -
      • GL_ARB_robustness_application_isolation -
      • GL_ARB_robustness_share_group_isolation -
      • GL_ARB_shader_image_size -
      • GL_ARB_shader_storage_buffer_object -
      • GL_ARB_stencil_texturing -
      • GL_ARB_texture_buffer_range -
      • GL_ARB_texture_query_levels -
      • GL_ARB_texture_storage_multisample -
      • GL_ARB_texture_view -
      • GL_ARB_vertex_attrib_binding -
      • GL_EXT_debug_marker -
      • GL_KHR_debug -
      • GL_REGAL_error_string -
      • GL_REGAL_extension_query -
      • GL_REGAL_log -
      • GLX_ARB_robustness_application_isolation -
      • GLX_ARB_robustness_share_group_isolation -
      • GLX_EXT_create_context_es_profile -
      • WGL_EXT_create_context_es_profile -
      -
    • Bug fixes: -
        -
      • Not using GLU library for Makefile builds. -
      -
    -
- -
-
    -
  • 1.8.0 [07-17-12] -
      -
    • New extensions: -
        -
      • GL_AMD_pinned_memory -
      • GL_AMD_query_buffer_object -
      • GL_AMD_stencil_operation_extended -
      • GL_AMD_vertex_shader_layer -
      • GL_AMD_vertex_shader_viewport_index -
      • GL_NV_bindless_texture -
      • GL_NV_shader_atomic_float -
      • GLX_EXT_swap_control_tear -
      • WGL_EXT_swap_control_tear -
      • WGL_NV_DX_interop2 -
      -
    • Bug fixes: -
        -
      • MS Visual Studio 2010 projects added -
      • GLX_NV_video_out replaces GLX_NV_video_output -
      • ANSI C prototype for glewInit -
      • Improved CentOS build support -
      • Improved GL_ARB_gpu_shader_fp64 support -
      • ARB_texture_compression_bptc and ARB_copy_buffer constants -
      • Linux needs to define GLEW_STATIC for static library builds -
      • Custom code generation problem resolved -
      • GLEWAPIENTRY added to glew.h for calling convention customization -
      • Correction for glPathStencilDepthOffsetNV -
      • Resolve OSX gcc warnings -
      • Added build support for NetBSD -
      -
    -
- -
-
    -
  • 1.7.0 [08-26-11] -
      -
    • New features: -
        -
      • Support for OpenGL 4.2 -
      -
    • New extensions: -
        -
      • GL_AMD_multi_draw_indirect -
      • GL_ARB_base_instance -
      • GL_ARB_compressed_texture_pixel_storage -
      • GL_ARB_conservative_depth -
      • GL_ARB_internalformat_query -
      • GL_ARB_map_buffer_alignment -
      • GL_ARB_shader_atomic_counters -
      • GL_ARB_shader_image_load_store -
      • GL_ARB_shading_language_420pack -
      • GL_ARB_shading_language_packing -
      • GL_ARB_texture_storage -
      • GL_ARB_transform_feedback_instanced -
      • GL_EXT_framebuffer_multisample_blit_scaled -
      • GL_NV_path_rendering -
      • GL_NV_path_rendering -
      • GLX_MESA_swap_control -
      -
    • Bug fixes: -
        -
      • const qualifiers for GL 1.4 MultiDrawArrays, MultiDrawElements -
      • Add glGetGraphicsResetStatusARB to GL_ARB_robustness -
      • Remove EXT suffix from GL_KTX_buffer_region entry points -
      • Solaris needs inttypes.h -
      • Add ERROR_INVALID_VERSION_ARB and ERROR_INVALID_PROFILE_ARB to WGL_ARB_create_context -
      • Add GLX_MESA_swap_control -
      • Set -install_name for OSX -
      • Add 64-bit darwin build option (SYSTEM=darwin_x86-64) -
      • Add GL_NV_path_rendering -
      -
    -
- -
-
    -
  • 1.6.0 [04-27-11] -
      -
    • New extensions: -
        -
      • GL_AMD_blend_minmax_factor -
      • GL_AMD_sample_positions -
      • GL_EXT_x11_sync_object -
      • GL_NV_texture_multisample -
      • GL_NV_video_capture -
      • GLX_NV_video_capture -
      • WGL_NV_DX_interop -
      • WGL_NV_video_capture -
      -
    • Bug fixes: -
        -
      • Define GLEW_NO_GLU for no glu dependency. -
      • mx suffix for GLEW MX libraries, build both libraries by default. -
      • Cygwin build improvements -
      • Soname of GLEWmx shared libraries -
      • Query GL extension string only once -
      • GLX_OML_sync_control no longer requires C99 -
      • glDraw*InstancedARB moved from GL_ARB_draw_instanced to GL_ARB_instanced_arrays -
      • glFramebufferTextureLayerEXT moved from GL_EXT_geometry_shader4 to GL_EXT_texture_array -
      • Fixes for BSD build -
      -
    -
- -
-
    -
  • 1.5.8 [01-31-11] -
      -
    • New extensions: -
        -
      • GL_AMD_depth_clamp_separate -
      • GL_EXT_texture_sRGB_decode -
      -
    • Bug fixes: -
        -
      • Borland C++ fix for __int64 -
      • GL_DOUBLE_MATNxM enumerants for OpenGL 4.0 -
      • Correction to glGetTransformFeedbackVarying -
      • Correction to glSecondaryColorPointer -
      • Corrections to glGetVertexAttribPointerv and glGetShaderSource -
      • Switched code repository from svn to git -
      -
    -
- -
-
    -
  • 1.5.7 [11-03-10] -
      -
    • New extension: -
        -
      • GL_NVX_gpu_memory_info -
      -
    • Bug fixes: -
        -
      • Improved mingw32 build support -
      • Improved cygwin build support -
      • glGetPointervEXT fix -
      • Add GLEW_VERSION_1_2_1 -
      -
    -
- -
-
    -
  • 1.5.6 [09-07-10] -
      -
    • New features: -
        -
      • Support for OpenGL 4.1 -
      -
    • New extensions: -
        -
      • GL_ARB_ES2_compatibility -
      • GL_ARB_cl_event -
      • GL_ARB_debug_output -
      • GL_ARB_get_program_binary -
      • GL_ARB_robustness -
      • GL_ARB_separate_shader_objects -
      • GL_ARB_shader_precision -
      • GL_ARB_shader_stencil_export -
      • GL_ARB_vertex_attrib_64bit -
      • GL_ARB_viewport_array -
      • GLX_ARB_create_context_robustness -
      • GLX_EXT_create_context_es2_profile -
      • WGL_ARB_create_context_robustness -
      • WGL_EXT_create_context_es2_profile -
      -
    -
- -
-
    -
  • 1.5.5 [07-13-10] -
      -
    • New extensions: -
        -
      • GL_AMD_debug_output -
      • GL_AMD_name_gen_delete -
      • GL_AMD_transform_feedback3_lines_triangles -
      • GL_NV_multisample_coverage -
      • GL_NV_vdpau_interop -
      • GLX_AMD_gpu_association -
      • GLX_NV_multisample_coverage -
      • WGL_NV_multisample_coverage -
      -
    • Bug fixes: -
        -
      • Compilation issue with GLX_SGI_video_sync -
      • OpenGL 4.0 double-precision uniform functions added -
      • Constness of glPointParameterfvARB and glPointParameterfvEXT -
      • Added glVertexAttribDivisor -
      • Compilation issue with Nvidia GLX headers -
      -
    -
- -
-
    -
  • 1.5.4 [04-21-10] -
      -
    • New features: -
        -
      • Support for OpenGL 3.3 -
      • Support for OpenGL 4.0 -
      -
    • New extensions: -
        -
      • GL_AMD_conservative_depth -
      • GL_ARB_blend_func_extended -
      • GL_ARB_draw_indirect -
      • GL_ARB_explicit_attrib_location -
      • GL_ARB_gpu_shader5 -
      • GL_ARB_gpu_shader_fp64 -
      • GL_ARB_occlusion_query2 -
      • GL_ARB_sampler_objects -
      • GL_ARB_shader_bit_encoding -
      • GL_ARB_shader_subroutine -
      • GL_ARB_shading_language_include -
      • GL_ARB_tessellation_shader -
      • GL_ARB_texture_buffer_object_rgb32 -
      • GL_ARB_texture_compression_bptc -
      • GL_ARB_texture_rgb10_a2ui -
      • GL_ARB_texture_swizzle -
      • GL_ARB_timer_query -
      • GL_ARB_transform_feedback2 -
      • GL_ARB_transform_feedback3 -
      • GL_ARB_vertex_type_2_10_10_10_rev -
      • GL_EXT_shader_image_load_store -
      • GL_EXT_vertex_attrib_64bit -
      • GL_NV_gpu_program5 -
      • GL_NV_gpu_program_fp64 -
      • GL_NV_gpu_shader5 -
      • GL_NV_tessellation_program5 -
      • GL_NV_vertex_attrib_integer_64bit -
      • GLX_ARB_vertex_buffer_object -
      -
    • Bug fixes: -
        -
      • Parameter constness fix for glPointParameteriv and glPointParameterfv -
      -
    -
- -
-
    -
  • 1.5.3 [02-28-10] -
      -
    • New extensions: -
        -
      • GLX_INTEL_swap_event -
      • GL_AMD_seamless_cubemap_per_texture -
      • GL_AMD_shader_stencil_export -
      -
    • Bug fixes: -
        -
      • Correct version detection for GL 3.1 and 3.2 -
      • Missing 3.1 enumerants -
      • Add glew.pc -
      -
    -
- -
-
    -
  • 1.5.2 [12-31-09] -
      -
    • New features: -
        -
      • Support for OpenGL 3.1 -
      • Support for OpenGL 3.2 -
      -
    • New extensions: -
        -
      • GL_AMD_draw_buffers_blend -
      • GL_AMD_performance_monitor -
      • GL_AMD_texture_texture4 -
      • GL_AMD_vertex_shader_tessellator -
      • GL_APPLE_aux_depth_stencil -
      • GL_APPLE_object_purgeable -
      • GL_APPLE_rgb_422 -
      • GL_APPLE_row_bytes -
      • GL_APPLE_vertex_program_evaluators -
      • GL_ARB_compatibility -
      • GL_ARB_copy_buffer -
      • GL_ARB_depth_clamp -
      • GL_ARB_draw_buffers_blend -
      • GL_ARB_draw_elements_base_vertex -
      • GL_ARB_fragment_coord_conventions -
      • GL_ARB_provoking_vertex -
      • GL_ARB_sample_shading -
      • GL_ARB_seamless_cube_map -
      • GL_ARB_shader_texture_lod -
      • GL_ARB_sync -
      • GL_ARB_texture_cube_map_array -
      • GL_ARB_texture_gather -
      • GL_ARB_texture_multisample -
      • GL_ARB_texture_query_lod -
      • GL_ARB_uniform_buffer_object -
      • GL_ARB_vertex_array_bgra -
      • GL_ATI_meminfo -
      • GL_EXT_provoking_vertex -
      • GL_EXT_separate_shader_objects -
      • GL_EXT_texture_snorm -
      • GL_NV_copy_image -
      • GL_NV_parameter_buffer_object2 -
      • GL_NV_shader_buffer_load -
      • GL_NV_texture_barrier -
      • GL_NV_transform_feedback2 -
      • GL_NV_vertex_buffer_unified_memory -
      • WGL_AMD_gpu_association -
      • WGL_ARB_create_context_profile -
      • WGL_NV_copy_image -
      • GLX_ARB_create_context_profile -
      • GLX_EXT_swap_control -
      • GLX_NV_copy_image -
      -
    • Bug fixes: -
        -
      • DOS line endings for windows .zip archives only. -
      • glTransformFeedbackVaryings arguments. -
      • Resource leak in glewinfo and visualinfo tools. -
      • WIN32_LEAN_AND_MEAN preprocessor pollution. -
      • Fixed version detection for GLEW_VERSION_2_1 and GLEW_VERSION_3_0. -
      • MesaGLUT glut.h GLAPIENTRY dependency. -
      • glFramebufferTextureLayer correction. -
      • OSX compiler warnings resolved. -
      • Cygwin linking to opengl32 by default, rather than X11 OpenGL. -
      • SnowLeopard (OSX 10.6) gl.h detection. -
      • Use $(STRIP) consistently. -
      -
    -
- -
-
    -
  • 1.5.1 [11-03-08] -
      -
    • New features: -
        -
      • Support for OpenGL 3.0 -
      -
    • New extensions: -
        -
      • GL_ARB_depth_buffer_float -
      • GL_ARB_draw_instance, -
      • GL_ARB_framebuffer_object -
      • GL_ARB_framebuffer_sRGB -
      • GL_ARB_geometry_shader4 -
      • GL_ARB_half_float_pixel -
      • GL_ARB_half_float_vertex -
      • GL_ARB_instanced_arrays -
      • GL_ARB_map_buffer_range -
      • GL_ARB_texture_buffer_object -
      • GL_ARB_texture_compression_rgtc -
      • GL_ARB_vertex_array_object -
      • GL_EXT_direct_state_access -
      • GL_EXT_texture_swizzle -
      • GL_EXT_transform_feedback -
      • GL_EXT_vertex_array_bgra -
      • GL_NV_conditional_render -
      • GL_NV_explicit_multisample -
      • GL_NV_present_video -
      • GL_SGIS_point_line_texgen -
      • GL_SGIX_convolution_accuracy -
      • WGL_ARB_create_context -
      • WGL_ARB_framebuffer_sRGB -
      • WGL_NV_present_video -
      • WGL_NV_swap_group -
      • WGL_NV_video_output -
      • GLX_ARB_create_context -
      • GLX_ARB_framebuffer_sRGB -
      • GLX_NV_present_video -
      • GLX_NV_swap_group -
      • GLX_NV_video_output -
      -
    • Bug fixes: -
        -
      • Licensing issues with documentation -
      • Problems with long long and _MSC_VER on MINGW -
      • Incorrect parameter for glGetUniformLocation -
      • glewGetExtension fails on last entry -
      • Incomplete GL_NV_texture_shader tokens -
      • Scripting problems on Cygwin -
      • Incorrect definition for GLint on OS X -
      -
    -
- -
-
    -
  • 1.5.0 [12-27-07] -
      -
    • New features: -
        -
      • Licensing change (BSD, Mesa 3-D, Khronos) -
      • Switch to using registry on www.opengl.org -
      • Support for major and minor version strings -
      -
    • New extensions: -
        -
      • GL_APPLE_flush_buffer_range -
      • GL_GREMEDY_frame_terminator -
      • GLX_EXT_texture_from_pixmap -
      -
    • Bug fixes: -
        -
      • Incorrent 64-bit type definitions -
      • Do not strip static library on install -
      • Missing tokens in GL_ATI_fragment_shader and WGL_{ARB,EXT}_make_current_read -
      • Missing tokens in GL_VERSION_2_1 -
      • Missing functions in GL_VERSION_1_4 -
      • Incorrect parameter type for glXCopyContext -
      -
    -
-
-
    -
  • 1.4.0 [04-27-07] -
      -
    • New features: -
        -
      • Extension variables are declared const to avoid possible -corruption of their values -
      -
    • New extensions: -
        -
      • GL_NV_depth_range_unclamped -
      -
    • Bug fixes: -
        -
      • Incorrect tokens in GL_NV_transform_feedback and GL_NV_framebuffer_multisample_coverage -
      • Incorrect function names in GL_EXT_gpu_program_parameters -
      • Missing tokens in GL_EXT_framebuffer_multisample -
      • GLEW_MX initialization problem for WGL_{ARB,EXT}_extensions_string -
      -
    -
-
-
    -
  • 1.3.6 [03-04-07] -
      -
    • New extensions: -
        -
      • GL_ATI_shader_texture_lod -
      • GL_EXT_gpu_program_parameters -
      • GL_NV_geometry_shader4 -
      • WGL_NV_gpu_affinity -
      • GLX_SGIX_hyperpipe -
      -
    • Bug fixes: -
        -
      • Missing include guards in glxew.h -
      • Makefile and install problems for Cygwin builds -
      • Install problem for Linux AMD64 builds -
      • Incorrent token in GL_ATI_texture_compression_3dc -
      • Missing tokens from GL_ATIX_point_sprites -
      -
    -
-
-
    -
  • 1.3.5 [11-21-06] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.1 -
      • Debug support for glewIsSupported -
      -
    • New extensions: -
        -
      • GL_EXT_bindable_uniform -
      • GL_EXT_draw_buffers2 -
      • GL_EXT_draw_instanced -
      • GL_EXT_framebuffer_sRGB -
      • GL_EXT_geometry_shader4 -
      • GL_EXT_gpu_shader4 -
      • GL_EXT_packed_float -
      • GL_EXT_texture_array -
      • GL_EXT_texture_buffer_object -
      • GL_EXT_texture_compression_latc -
      • GL_EXT_texture_compression_rgtc -
      • GL_EXT_texture_integer -
      • GL_EXT_texture_shared_exponent -
      • GL_EXT_timer_query -
      • GL_NV_depth_buffer_float -
      • GL_NV_fragment_program4 -
      • GL_NV_framebuffer_multisample_coverage -
      • GL_NV_geometry_program4 -
      • GL_NV_gpu_program4 -
      • GL_NV_parameter_buffer_object -
      • GL_NV_transform_feedback -
      • GL_NV_vertex_program4 -
      • GL_OES_byte_coordinates -
      • GL_OES_compressed_paletted_texture -
      • GL_OES_read_format -
      • GL_OES_single_precision -
      • WGL_EXT_pixel_format_packed_float -
      • WGL_EXT_framebuffer_sRGB -
      • GLX_EXT_fbconfig_packed_float -
      • GLX_EXT_framebuffer_sRGB -
      -
    • Bug fixes: -
        -
      • Wrong GLXContext definition on Solaris -
      • Makefile problem for parallel builds -
      -
    -
-
-
    -
  • 1.3.4 [03-04-06] -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_blit -
      • GL_EXT_framebuffer_multisample -
      • GL_EXT_packed_depth_stencil -
      • GL_MESAX_texture_stack -
      • WGL_3DL_stereo_control -
      -
    -
      -
    • Bug fixes: -
        -
      • glBlendEquation missing from GL_ARB_imaging -
      • Wrong APIENTRY definition for Cygwin -
      • Incorrect OS X OpenGL types -
      • Unix 64-bit installation patch -
      -
    -
-
-
    -
  • 1.3.3 [05-16-05] -
      -
    • New feature: -
        -
      • Code generation option to split source into multiple files -
      -
    -
      -
    • Bug fixes: -
        -
      • OpenGL 2.0 core initialization problems -
      • Wrong value for token GL_SHADER_TYPE -
      • Missing tokens in GL_ATI_fragment_shader -
      • Missing entry points in GL_ARB_transpose_matrix -
      -
    -
-
-
    -
  • 1.3.2 [03-16-05] -
      -
    • New extension: -
        -
      • GL_APPLE_pixel_buffer -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 entry points -
      • Missing tokens in GL_SGIX_shadow -
      • MinGW makefile problem -
      • Check for incorrect OpenGL version string on SiS hardware -
      • Documentation update to meet the HTML 4.01 Transitional specification -
      -
    -
-
-
    -
  • 1.3.1 [02-02-05] -
      -
    • New features: -
        -
      • Consistent Unix and Windows versioning -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_object -
      • GL_ARB_pixel_buffer_object -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 tokens -
      • Incorrect typedefs (GLhandleARB and GLhalf) -
      • Borland compiler problems -
      -
    -
-
-
    -
  • 1.3.0 [01-04-05] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.0 -
      • glewIsSupported provides efficient string-based extension checks -
      • Custom code generation from a list of extensions -
      • Makefile changes -
      -
    • New extensions: -
        -
      • WGL_ATI_render_texture_rectangle -
      -
    • Bug fixes: -
        -
      • Incorrect function signature in OpenGL 1.5 core -
      -
    -
-
-
    -
  • 1.2.5 [12-06-04] -
      -
    • New extensions: -
        -
      • GL_ATI_texture_compression_3dc -
      • GL_EXT_Cg_shader -
      • GL_EXT_draw_range_elements -
      • GL_KTX_buffer_region -
      -
    • Bug fixes: -
        -
      • OpenGL version detection bug -
      • Problems with wxWindows and MinGW compilation -
      • visualinfo compilation problem with GLEW_MX specified -
      • Wrong token name in OpenGL 1.5 core -
      -
    • Support for FreeBSD -
    -
-
-
    -
  • 1.2.4 [09-06-04] -
      -
    • Added ARB_draw_buffers and ARB_texture_rectangle -
    • Fixed bug in ARB_shader_objects -
    • Replaced wglinfo with visualinfo -
    -
-
-
    -
  • 1.2.3 [06-10-04] -
      -
    • Added GL_NV_fragment_program2, GL_NV_fragment_program_option, GL_NV_vertex_program2_option, GL_NV_vertex_program3 -
    • Bug fix in GL_ARB_vertex_blend -
    -
-
-
    -
  • 1.2.2 [05-08-04] -
      -
    • Added GL_EXT_pixel_buffer_object, removed GL_NV_element_array -
    • Fixed GLEW_MX problems -
    • Bug fix in GL_EXT_texture_rectangle and wglinfo -
    -
-
-
    -
  • 1.2.1 [03-18-04] -
      -
    • Bug fix in OpenGL version query (early release of 1.2.0 contained this bug) -
    • Bug fix in GL_ARB_shader_objects and temporary bug fix in GL_ARB_vertex_shader -
    • Added flags on GDI support and multisampling to wglinfo -
    -
-
-
    -
  • 1.2.0 [02-19-04] -
      -
    • Added full OpenGL 1.5 support -
    • Added support for multiple rendering contexts with different capabilities -
    • Added command line flags to glewinfo for selecting displays and visuals -
    • Added GLX_SGIS_multisample, GLX_SUN_video_resize, and GL_SUN_read_video_pixels -
    • Added MinGW/MSYS support -
    • Bug fixes in GL_ARB_shader_objects and the OS X build -
    -
-
-
    -
  • 1.1.4 [12-15-03] -
      -
    • Added GL_APPLE_float_pixels, GL_APPLE_texture_range, -GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, -GLX_ATI_pixel_format_float, and GLX_ATI_render_texture -
    • Bug fixes in GL_ATI_map_object_buffer and GL_ATI_fragment_shader -
    -
-
-
    -
  • 1.1.3 [10-28-03] -
      -
    • Added Solaris and Darwin support -
    • Added GL_ARB_fragment_shader, GL_ARB_shader_objects, and GL_ARB_vertex_shader -
    • Fixed bug in GL_WIN_swap_hint -
    • Removed glewinfo's dependency on GLUT -
    -
-
-
    -
  • 1.1.2 [09-15-03] -
      -
    • Removed dependency on WGL_{ARB,EXT}_extensions_string to make GLEW run on Matrox cards -
    • Added glewGetString for querying the GLEW version string -
    -
-
-
    -
  • 1.1.1 [08-11-03] -
      -
    • Added GLX_NV_float_buffer, GL_ARB_shading_language_100, and GL_ARB_texture_non_power_of_two -
    • Fixed bug in GL_ARB_vertex_buffer_object -
    • Minor updates in documentation -
    -
-
-
    -
  • 1.1.0 [07-08-03] -
      -
    • Added automatic code generation -
    • Added almost every extension in the registry -
    • Added separate namespace -
    • Added Irix support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.7 [06-29-03] -
      -
    • Added GL_EXT_depth_bounds_test -
    • Fixed typos -
    -
-
-
    -
  • 1.0.6 [05-05-03] -
      -
    • Added ARB_vertex_buffer_object and NV_half_float -
    • Updated wglinfo -
    • Temporary Linux bug fixes (problems with SDL and MESA) -
    -
-
-
    -
  • 1.0.5 [02-17-03] -
      -
    • Bug fixes -
    • Added wglinfo -
    • Updated documentation -
    -
-
-
    -
  • 1.0.4 [02-02-03] -
      -
    • Added NV_texture_expand_normal -
    • Added mingw support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.3 [01-09-03] -
      -
    • Cleaned up ATI extensions -
    • Changed function prototypes to match glext.h -
    • Added EXT_texture3D -
    • Fixed typos in ATI_vertex_attrib_array_object and ATI_draw_buffers -
    -
-
-
    -
  • 1.0.2 [12-21-02] -
      -
    • Added list of supported extensions to documentation -
    • Added NV_half_float and NV_texgen_emboss -
    -
-
-
    -
  • 1.0.1 [12-17-02] -
      -
    • Bug fixes -
    • Added glewGetExtension -
    -
-
-
    -
  • 1.0.0 [12-12-02] -
      -
    • Initial release -
    -
-
- diff --git a/Engine/lib/glew/auto/extensions/gl/.dummy b/Engine/lib/glew/auto/extensions/gl/.dummy deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_3DFX_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_3DFX_multisample deleted file mode 100644 index cccfa90c3f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_3DFX_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_3DFX_multisample -http://www.opengl.org/registry/specs/gl/3DFX/3dfx_multisample.txt -GLX_3DFX_multisample - GLX_SAMPLE_BUFFERS_3DFX 0x8050 - GLX_SAMPLES_3DFX 0x8051 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_AMD_gpu_association b/Engine/lib/glew/auto/extensions/gl/GLX_AMD_gpu_association deleted file mode 100644 index 002164e8d9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_AMD_gpu_association +++ /dev/null @@ -1,22 +0,0 @@ -GLX_AMD_gpu_association -http://www.opengl.org/registry/specs/AMD/glx_gpu_association.txt -GLX_AMD_gpu_association - GLX_GPU_VENDOR_AMD 0x1F00 - GLX_GPU_RENDERER_STRING_AMD 0x1F01 - GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 - GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 - GLX_GPU_RAM_AMD 0x21A3 - GLX_GPU_CLOCK_AMD 0x21A4 - GLX_GPU_NUM_PIPES_AMD 0x21A5 - GLX_GPU_NUM_SIMD_AMD 0x21A6 - GLX_GPU_NUM_RB_AMD 0x21A7 - GLX_GPU_NUM_SPI_AMD 0x21A8 - void glXBlitContextFramebufferAMD (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - GLXContext glXCreateAssociatedContextAMD (unsigned int id, GLXContext share_list) - GLXContext glXCreateAssociatedContextAttribsAMD (unsigned int id, GLXContext share_context, const int* attribList) - Bool glXDeleteAssociatedContextAMD (GLXContext ctx) - unsigned int glXGetContextGPUIDAMD (GLXContext ctx) - GLXContext glXGetCurrentAssociatedContextAMD (void) - unsigned int glXGetGPUIDsAMD (unsigned int maxCount, unsigned int* ids) - int glXGetGPUInfoAMD (unsigned int id, int property, GLenum dataType, unsigned int size, void* data) - Bool glXMakeAssociatedContextCurrentAMD (GLXContext ctx) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context deleted file mode 100644 index adeabb1bd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context +++ /dev/null @@ -1,9 +0,0 @@ -GLX_ARB_create_context -http://www.opengl.org/registry/specs/gl/ARB/glx_create_context.txt -GLX_ARB_create_context - GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 - GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 - GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 - GLX_CONTEXT_FLAGS_ARB 0x2094 - GLXContext glXCreateContextAttribsARB (Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_profile b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_profile deleted file mode 100644 index dd42fac77b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_profile +++ /dev/null @@ -1,6 +0,0 @@ -GLX_ARB_create_context_profile -http://www.opengl.org/registry/specs/gl/ARB/glx_create_context.txt -GLX_ARB_create_context_profile - GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 - GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 - GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_robustness b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_robustness deleted file mode 100644 index 338a18421c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_create_context_robustness +++ /dev/null @@ -1,7 +0,0 @@ -GLX_ARB_create_context_robustness -http://www.opengl.org/registry/specs/gl/ARB/glx_create_context_robustness.txt -GLX_ARB_create_context_robustness - GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 - GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - GLX_NO_RESET_NOTIFICATION_ARB 0x8261 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_fbconfig_float b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_fbconfig_float deleted file mode 100644 index 0db2664872..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_fbconfig_float +++ /dev/null @@ -1,5 +0,0 @@ -GLX_ARB_fbconfig_float -http://www.opengl.org/registry/specs/gl/ARB/color_buffer_float.txt -GLX_ARB_fbconfig_float - GLX_RGBA_FLOAT_BIT 0x00000004 - GLX_RGBA_FLOAT_TYPE 0x20B9 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_framebuffer_sRGB deleted file mode 100644 index bbe0829d6a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_framebuffer_sRGB -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_sRGB.txt -GLX_ARB_framebuffer_sRGB - GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_get_proc_address b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_get_proc_address deleted file mode 100644 index 5c066d7d00..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_get_proc_address +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_get_proc_address -http://oss.sgi.com/projects/ogl-sample/registry/ARB/get_proc_address.txt -GLX_ARB_get_proc_address - extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_multisample deleted file mode 100644 index 27dcc86c95..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_ARB_multisample -http://www.opengl.org/registry/specs/gl/ARB/multisample.txt -GLX_ARB_multisample - GLX_SAMPLE_BUFFERS_ARB 100000 - GLX_SAMPLES_ARB 100001 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_application_isolation b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_application_isolation deleted file mode 100644 index c05fce291f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_application_isolation +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_robustness_application_isolation -http://www.opengl.org/registry/specs/gl/ARB/glx_robustness_isolation.txt -GLX_ARB_robustness_application_isolation - GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_share_group_isolation b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_share_group_isolation deleted file mode 100644 index bb2e8e0bdc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_robustness_share_group_isolation +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_robustness_share_group_isolation -http://www.opengl.org/registry/specs/gl/ARB/glx_robustness_isolation.txt -GLX_ARB_robustness_share_group_isolation - GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_vertex_buffer_object b/Engine/lib/glew/auto/extensions/gl/GLX_ARB_vertex_buffer_object deleted file mode 100644 index de367dacdb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ARB_vertex_buffer_object +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ARB_vertex_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/vertex_buffer_object.txt -GLX_ARB_vertex_buffer_object - GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_pixel_format_float b/Engine/lib/glew/auto/extensions/gl/GLX_ATI_pixel_format_float deleted file mode 100644 index 854ca716ba..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_pixel_format_float +++ /dev/null @@ -1,4 +0,0 @@ -GLX_ATI_pixel_format_float - -GLX_ATI_pixel_format_float - GLX_RGBA_FLOAT_ATI_BIT 0x00000100 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_render_texture b/Engine/lib/glew/auto/extensions/gl/GLX_ATI_render_texture deleted file mode 100644 index 254eb9f3bc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_ATI_render_texture +++ /dev/null @@ -1,41 +0,0 @@ -GLX_ATI_render_texture - -GLX_ATI_render_texture - GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 - GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 - GLX_TEXTURE_FORMAT_ATI 0x9802 - GLX_TEXTURE_TARGET_ATI 0x9803 - GLX_MIPMAP_TEXTURE_ATI 0x9804 - GLX_TEXTURE_RGB_ATI 0x9805 - GLX_TEXTURE_RGBA_ATI 0x9806 - GLX_NO_TEXTURE_ATI 0x9807 - GLX_TEXTURE_CUBE_MAP_ATI 0x9808 - GLX_TEXTURE_1D_ATI 0x9809 - GLX_TEXTURE_2D_ATI 0x980A - GLX_MIPMAP_LEVEL_ATI 0x980B - GLX_CUBE_MAP_FACE_ATI 0x980C - GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D - GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E - GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 - GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 - GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 - GLX_FRONT_LEFT_ATI 0x9813 - GLX_FRONT_RIGHT_ATI 0x9814 - GLX_BACK_LEFT_ATI 0x9815 - GLX_BACK_RIGHT_ATI 0x9816 - GLX_AUX0_ATI 0x9817 - GLX_AUX1_ATI 0x9818 - GLX_AUX2_ATI 0x9819 - GLX_AUX3_ATI 0x981A - GLX_AUX4_ATI 0x981B - GLX_AUX5_ATI 0x981C - GLX_AUX6_ATI 0x981D - GLX_AUX7_ATI 0x981E - GLX_AUX8_ATI 0x981F - GLX_AUX9_ATI 0x9820 - GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 - GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 - void glXBindTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXReleaseTexImageATI (Display *dpy, GLXPbuffer pbuf, int buffer) - void glXDrawableAttribATI (Display *dpy, GLXDrawable draw, const int *attrib_list) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_buffer_age b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_buffer_age deleted file mode 100644 index c944bc1dbf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_buffer_age +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_buffer_age -http://www.opengl.org/registry/specs/gl/EXT/glx_buffer_age.txt -GLX_EXT_buffer_age - GLX_BACK_BUFFER_AGE_EXT 0x20F4 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es2_profile b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es2_profile deleted file mode 100644 index 3093baa3bd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es2_profile.txt -GLX_EXT_create_context_es2_profile - GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es_profile b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es_profile deleted file mode 100644 index 845f65ee71..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/glx_create_context_es_profile.txt -GLX_EXT_create_context_es_profile - GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_fbconfig_packed_float b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_fbconfig_packed_float deleted file mode 100644 index 7c7822d81a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_fbconfig_packed_float +++ /dev/null @@ -1,5 +0,0 @@ -GLX_EXT_fbconfig_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GLX_EXT_fbconfig_packed_float - GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 - GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_framebuffer_sRGB deleted file mode 100644 index f51c484afd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GLX_EXT_framebuffer_sRGB - GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_import_context b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_import_context deleted file mode 100644 index 336ed852ad..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_import_context +++ /dev/null @@ -1,11 +0,0 @@ -GLX_EXT_import_context -http://www.opengl.org/registry/specs/gl/EXT/import_context.txt -GLX_EXT_import_context - GLX_SHARE_CONTEXT_EXT 0x800A - GLX_VISUAL_ID_EXT 0x800B - GLX_SCREEN_EXT 0x800C - void glXFreeContextEXT (Display* dpy, GLXContext context) - GLXContextID glXGetContextIDEXT (const GLXContext context) - GLXContext glXImportContextEXT (Display* dpy, GLXContextID contextID) - int glXQueryContextInfoEXT (Display* dpy, GLXContext context, int attribute,int *value) - typedef XID GLXContextID diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_scene_marker b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_scene_marker deleted file mode 100644 index 2ac9523ec7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_scene_marker +++ /dev/null @@ -1,3 +0,0 @@ -GLX_EXT_scene_marker -http://www.opengl.org/registry/specs/gl/EXT/scene_marker.txt -GLX_EXT_scene_marker diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control deleted file mode 100644 index 3eb54439de..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control +++ /dev/null @@ -1,6 +0,0 @@ -GLX_EXT_swap_control -http://www.opengl.org/registry/specs/gl/EXT/swap_control.txt -GLX_EXT_swap_control - GLX_SWAP_INTERVAL_EXT 0x20F1 - GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 - void glXSwapIntervalEXT (Display* dpy, GLXDrawable drawable, int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control_tear b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control_tear deleted file mode 100644 index f832830d27..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_swap_control_tear +++ /dev/null @@ -1,4 +0,0 @@ -GLX_EXT_swap_control_tear -http://www.opengl.org/registry/specs/gl/EXT/glx_swap_control_tear.txt -GLX_EXT_swap_control_tear - GLX_LATE_SWAPS_TEAR_EXT 0x20F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_texture_from_pixmap b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_texture_from_pixmap deleted file mode 100644 index 794a406ecb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_texture_from_pixmap +++ /dev/null @@ -1,36 +0,0 @@ -GLX_EXT_texture_from_pixmap -http://www.opengl.org/registry/specs/gl/EXT/texture_from_pixmap.txt -GLX_EXT_texture_from_pixmap - GLX_TEXTURE_1D_BIT_EXT 0x00000001 - GLX_TEXTURE_2D_BIT_EXT 0x00000002 - GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 - GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 - GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 - GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 - GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 - GLX_Y_INVERTED_EXT 0x20D4 - GLX_TEXTURE_FORMAT_EXT 0x20D5 - GLX_TEXTURE_TARGET_EXT 0x20D6 - GLX_MIPMAP_TEXTURE_EXT 0x20D7 - GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 - GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 - GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA - GLX_TEXTURE_1D_EXT 0x20DB - GLX_TEXTURE_2D_EXT 0x20DC - GLX_TEXTURE_RECTANGLE_EXT 0x20DD - GLX_FRONT_LEFT_EXT 0x20DE - GLX_FRONT_RIGHT_EXT 0x20DF - GLX_BACK_LEFT_EXT 0x20E0 - GLX_BACK_RIGHT_EXT 0x20E1 - GLX_AUX0_EXT 0x20E2 - GLX_AUX1_EXT 0x20E3 - GLX_AUX2_EXT 0x20E4 - GLX_AUX3_EXT 0x20E5 - GLX_AUX4_EXT 0x20E6 - GLX_AUX5_EXT 0x20E7 - GLX_AUX6_EXT 0x20E8 - GLX_AUX7_EXT 0x20E9 - GLX_AUX8_EXT 0x20EA - GLX_AUX9_EXT 0x20EB - void glXBindTexImageEXT (Display* display, GLXDrawable drawable, int buffer, const int *attrib_list) - void glXReleaseTexImageEXT (Display* display, GLXDrawable drawable, int buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_info b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_info deleted file mode 100644 index ead815487a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_info +++ /dev/null @@ -1,19 +0,0 @@ -GLX_EXT_visual_info -http://www.opengl.org/registry/specs/gl/EXT/visual_info.txt -GLX_EXT_visual_info - GLX_X_VISUAL_TYPE_EXT 0x22 - GLX_TRANSPARENT_TYPE_EXT 0x23 - GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 - GLX_TRANSPARENT_RED_VALUE_EXT 0x25 - GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 - GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 - GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 - GLX_NONE_EXT 0x8000 - GLX_TRUE_COLOR_EXT 0x8002 - GLX_DIRECT_COLOR_EXT 0x8003 - GLX_PSEUDO_COLOR_EXT 0x8004 - GLX_STATIC_COLOR_EXT 0x8005 - GLX_GRAY_SCALE_EXT 0x8006 - GLX_STATIC_GRAY_EXT 0x8007 - GLX_TRANSPARENT_RGB_EXT 0x8008 - GLX_TRANSPARENT_INDEX_EXT 0x8009 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_rating b/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_rating deleted file mode 100644 index b5fd56b902..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_EXT_visual_rating +++ /dev/null @@ -1,6 +0,0 @@ -GLX_EXT_visual_rating -http://www.opengl.org/registry/specs/gl/EXT/visual_rating.txt -GLX_EXT_visual_rating - GLX_VISUAL_CAVEAT_EXT 0x20 - GLX_SLOW_VISUAL_EXT 0x8001 - GLX_NON_CONFORMANT_VISUAL_EXT 0x800D diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_INTEL_swap_event b/Engine/lib/glew/auto/extensions/gl/GLX_INTEL_swap_event deleted file mode 100644 index bd407af55b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_INTEL_swap_event +++ /dev/null @@ -1,7 +0,0 @@ -GLX_INTEL_swap_event -http://www.opengl.org/registry/specs/gl/INTEL/swap_event.txt -GLX_INTEL_swap_event - GLX_EXCHANGE_COMPLETE_INTEL 0x8180 - GLX_COPY_COMPLETE_INTEL 0x8181 - GLX_FLIP_COMPLETE_INTEL 0x8182 - GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_agp_offset b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_agp_offset deleted file mode 100644 index cbbf7bbfc3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_agp_offset +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_agp_offset -http://www.opengl.org/registry/specs/gl/MESA/agp_offset.txt -GLX_MESA_agp_offset - unsigned int glXGetAGPOffsetMESA (const void* pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_copy_sub_buffer b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_copy_sub_buffer deleted file mode 100644 index 318bf2964a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_copy_sub_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_copy_sub_buffer -http://www.opengl.org/registry/specs/gl/MESA/copy_sub_buffer.txt -GLX_MESA_copy_sub_buffer - void glXCopySubBufferMESA (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_pixmap_colormap b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_pixmap_colormap deleted file mode 100644 index 1cd79c4cf0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_pixmap_colormap +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_pixmap_colormap -http://www.opengl.org/registry/specs/gl/MESA/pixmap_colormap.txt -GLX_MESA_pixmap_colormap - GLXPixmap glXCreateGLXPixmapMESA (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_release_buffers b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_release_buffers deleted file mode 100644 index dc8bf0e948..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_release_buffers +++ /dev/null @@ -1,4 +0,0 @@ -GLX_MESA_release_buffers -http://www.opengl.org/registry/specs/gl/MESA/release_buffers.txt -GLX_MESA_release_buffers - Bool glXReleaseBuffersMESA (Display* dpy, GLXDrawable d) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_set_3dfx_mode b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_set_3dfx_mode deleted file mode 100644 index da51ee9bf9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_set_3dfx_mode +++ /dev/null @@ -1,6 +0,0 @@ -GLX_MESA_set_3dfx_mode -http://www.opengl.org/registry/specs/gl/MESA/set_3dfx_mode.txt -GLX_MESA_set_3dfx_mode - GLX_3DFX_WINDOW_MODE_MESA 0x1 - GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 - GLboolean glXSet3DfxModeMESA (GLint mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_swap_control b/Engine/lib/glew/auto/extensions/gl/GLX_MESA_swap_control deleted file mode 100644 index 4416519379..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_MESA_swap_control +++ /dev/null @@ -1,5 +0,0 @@ -GLX_MESA_swap_control -http://cgit.freedesktop.org/mesa/mesa/plain/docs/MESA_swap_control.spec -GLX_MESA_swap_control - int glXGetSwapIntervalMESA (void) - int glXSwapIntervalMESA (unsigned int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_copy_image b/Engine/lib/glew/auto/extensions/gl/GLX_NV_copy_image deleted file mode 100644 index 4ca2597d18..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -GLX_NV_copy_image -http://www.opengl.org/registry/specs/gl/NV/copy_image.txt -GLX_NV_copy_image - void glXCopyImageSubDataNV (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_float_buffer b/Engine/lib/glew/auto/extensions/gl/GLX_NV_float_buffer deleted file mode 100644 index cc9185ee94..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_float_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GLX_NV_float_buffer -http://cvs1.nvidia.com/inc/GL/glxtokens.h -GLX_NV_float_buffer - GLX_FLOAT_COMPONENTS_NV 0x20B0 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/GLX_NV_multisample_coverage deleted file mode 100644 index ee3a30f25a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_multisample_coverage +++ /dev/null @@ -1,5 +0,0 @@ -GLX_NV_multisample_coverage -http://www.opengl.org/registry/specs/gl/NV/multisample_coverage.txt -GLX_NV_multisample_coverage - GLX_COLOR_SAMPLES_NV 0x20B3 - GLX_COVERAGE_SAMPLES_NV 100001 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_present_video b/Engine/lib/glew/auto/extensions/gl/GLX_NV_present_video deleted file mode 100644 index bd8b3812a5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_present_video +++ /dev/null @@ -1,6 +0,0 @@ -GLX_NV_present_video -http://www.opengl.org/registry/specs/gl/NV/present_video.txt -GLX_NV_present_video - GLX_NUM_VIDEO_SLOTS_NV 0x20F0 - int glXBindVideoDeviceNV (Display* dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list) - unsigned int* glXEnumerateVideoDevicesNV (Display *dpy, int screen, int *nelements) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_swap_group b/Engine/lib/glew/auto/extensions/gl/GLX_NV_swap_group deleted file mode 100644 index e5534b35aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_swap_group +++ /dev/null @@ -1,9 +0,0 @@ -GLX_NV_swap_group -http://www.opengl.org/registry/specs/gl/NV/glx_swap_group.txt -GLX_NV_swap_group - Bool glXBindSwapBarrierNV (Display* dpy, GLuint group, GLuint barrier) - Bool glXJoinSwapGroupNV (Display* dpy, GLXDrawable drawable, GLuint group) - Bool glXQueryFrameCountNV (Display* dpy, int screen, GLuint *count) - Bool glXQueryMaxSwapGroupsNV (Display* dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers) - Bool glXQuerySwapGroupNV (Display* dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier) - Bool glXResetFrameCountNV (Display* dpy, int screen) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/GLX_NV_vertex_array_range deleted file mode 100644 index 11afe17406..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -GLX_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -GLX_NV_vertex_array_range - void * glXAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void glXFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_capture b/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_capture deleted file mode 100644 index d8aa6131f7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_capture +++ /dev/null @@ -1,12 +0,0 @@ -GLX_NV_video_capture -http://www.opengl.org/registry/specs/gl/NV/video_capture.txt -GLX_NV_video_capture - GLX_DEVICE_ID_NV 0x20CD - GLX_UNIQUE_ID_NV 0x20CE - GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - int glXBindVideoCaptureDeviceNV (Display* dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device) - GLXVideoCaptureDeviceNV * glXEnumerateVideoCaptureDevicesNV (Display* dpy, int screen, int *nelements) - void glXLockVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device) - int glXQueryVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value) - void glXReleaseVideoCaptureDeviceNV (Display* dpy, GLXVideoCaptureDeviceNV device) - typedef XID GLXVideoCaptureDeviceNV diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_output b/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_output deleted file mode 100644 index a476ba68bf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_NV_video_output +++ /dev/null @@ -1,19 +0,0 @@ -GLX_NV_video_output -http://www.opengl.org/registry/specs/gl/NV/glx_video_output.txt -GLX_NV_video_output - GLX_VIDEO_OUT_COLOR_NV 0x20C3 - GLX_VIDEO_OUT_ALPHA_NV 0x20C4 - GLX_VIDEO_OUT_DEPTH_NV 0x20C5 - GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 - GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 - GLX_VIDEO_OUT_FRAME_NV 0x20C8 - GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 - GLX_VIDEO_OUT_FIELD_2_NV 0x20CA - GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB - GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC - int glXBindVideoImageNV (Display* dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer) - int glXGetVideoDeviceNV (Display* dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice) - int glXGetVideoInfoNV (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo) - int glXReleaseVideoDeviceNV (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice) - int glXReleaseVideoImageNV (Display* dpy, GLXPbuffer pbuf) - int glXSendPbufferToVideoNV (Display* dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_OML_swap_method b/Engine/lib/glew/auto/extensions/gl/GLX_OML_swap_method deleted file mode 100644 index aa7d97e50a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_OML_swap_method +++ /dev/null @@ -1,7 +0,0 @@ -GLX_OML_swap_method -http://www.opengl.org/registry/specs/gl/OML/glx_swap_method.txt -GLX_OML_swap_method - GLX_SWAP_METHOD_OML 0x8060 - GLX_SWAP_EXCHANGE_OML 0x8061 - GLX_SWAP_COPY_OML 0x8062 - GLX_SWAP_UNDEFINED_OML 0x8063 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_OML_sync_control b/Engine/lib/glew/auto/extensions/gl/GLX_OML_sync_control deleted file mode 100644 index 4ef4765df9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_OML_sync_control +++ /dev/null @@ -1,8 +0,0 @@ -GLX_OML_sync_control -http://www.opengl.org/registry/specs/gl/OML/glx_sync_control.txt -GLX_OML_sync_control - Bool glXGetMscRateOML (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator) - Bool glXGetSyncValuesOML (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc) - int64_t glXSwapBuffersMscOML (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder) - Bool glXWaitForMscOML (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc) - Bool glXWaitForSbcOML (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_blended_overlay b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_blended_overlay deleted file mode 100644 index ab2201d1d3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_blended_overlay +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIS_blended_overlay -http://www.opengl.org/registry/specs/gl/SGIS/blended_overlay.txt -GLX_SGIS_blended_overlay - GLX_BLENDED_RGBA_SGIS 0x8025 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_color_range b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_color_range deleted file mode 100644 index 073f6dc00f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_color_range +++ /dev/null @@ -1,3 +0,0 @@ -GLX_SGIS_color_range -http://www.opengl.org/registry/specs/gl/SGIS/color_range.txt -GLX_SGIS_color_range diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_multisample deleted file mode 100644 index 6cc1019449..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIS_multisample -http://www.opengl.org/registry/specs/gl/SGIS/multisample.txt -GLX_SGIS_multisample - GLX_SAMPLE_BUFFERS_SGIS 100000 - GLX_SAMPLES_SGIS 100001 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_shared_multisample b/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_shared_multisample deleted file mode 100644 index 274e90f76e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIS_shared_multisample +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIS_shared_multisample - -GLX_SGIS_shared_multisample - GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 - GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_fbconfig b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_fbconfig deleted file mode 100644 index 59b33f8352..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_fbconfig +++ /dev/null @@ -1,22 +0,0 @@ -GLX_SGIX_fbconfig -http://www.opengl.org/registry/specs/gl/SGIX/fbconfig.txt -GLX_SGIX_fbconfig - GLX_WINDOW_BIT_SGIX 0x00000001 - GLX_RGBA_BIT_SGIX 0x00000001 - GLX_PIXMAP_BIT_SGIX 0x00000002 - GLX_COLOR_INDEX_BIT_SGIX 0x00000002 - GLX_SCREEN_EXT 0x800C - GLX_DRAWABLE_TYPE_SGIX 0x8010 - GLX_RENDER_TYPE_SGIX 0x8011 - GLX_X_RENDERABLE_SGIX 0x8012 - GLX_FBCONFIG_ID_SGIX 0x8013 - GLX_RGBA_TYPE_SGIX 0x8014 - GLX_COLOR_INDEX_TYPE_SGIX 0x8015 - GLXFBConfigSGIX* glXChooseFBConfigSGIX (Display *dpy, int screen, const int *attrib_list, int *nelements) - GLXContext glXCreateContextWithConfigSGIX (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct) - GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display* dpy, GLXFBConfig config, Pixmap pixmap) - int glXGetFBConfigAttribSGIX (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value) - GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display* dpy, XVisualInfo *vis) - XVisualInfo* glXGetVisualFromFBConfigSGIX (Display *dpy, GLXFBConfig config) - typedef XID GLXFBConfigIDSGIX - typedef struct __GLXFBConfigRec *GLXFBConfigSGIX diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_hyperpipe b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_hyperpipe deleted file mode 100644 index 79ec30295c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_hyperpipe +++ /dev/null @@ -1,25 +0,0 @@ -GLX_SGIX_hyperpipe -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/hyperpipe_group.txt -GLX_SGIX_hyperpipe - GLX_HYPERPIPE_ID_SGIX 0x8030 - GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 - GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 - GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 - GLX_PIPE_RECT_SGIX 0x00000001 - GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 - GLX_HYPERPIPE_STEREO_SGIX 0x00000003 - GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 - GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 - GLX_BAD_HYPERPIPE_SGIX 92 - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int networkId; } GLXHyperpipeNetworkSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int channel; unsigned int participationType; int timeSlice; } GLXHyperpipeConfigSGIX; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int srcXOrigin; int srcYOrigin; int srcWidth; int srcHeight; int destXOrigin; int destYOrigin; int destWidth; int destHeight; } GLXPipeRect; - typedef struct { char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; int XOrigin; int YOrigin; int maxHeight; int maxWidth; } GLXPipeRectLimits; - GLXHyperpipeNetworkSGIX * glXQueryHyperpipeNetworkSGIX (Display *dpy, int *npipes) - int glXHyperpipeConfigSGIX (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId) - GLXHyperpipeConfigSGIX * glXQueryHyperpipeConfigSGIX (Display *dpy, int hpId, int *npipes) - int glXDestroyHyperpipeConfigSGIX (Display *dpy, int hpId) - int glXBindHyperpipeSGIX (Display *dpy, int hpId) - int glXQueryHyperpipeBestAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList) - int glXHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *attribList) - int glXQueryHyperpipeAttribSGIX (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_pbuffer b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_pbuffer deleted file mode 100644 index 6740d8289b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_pbuffer +++ /dev/null @@ -1,35 +0,0 @@ -GLX_SGIX_pbuffer -http://www.opengl.org/registry/specs/gl/SGIX/pbuffer.txt -GLX_SGIX_pbuffer - GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 - GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 - GLX_PBUFFER_BIT_SGIX 0x00000004 - GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 - GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 - GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 - GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 - GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 - GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 - GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 - GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 - GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 - GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 - GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 - GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A - GLX_PRESERVED_CONTENTS_SGIX 0x801B - GLX_LARGEST_PBUFFER_SGIX 0x801C - GLX_WIDTH_SGIX 0x801D - GLX_HEIGHT_SGIX 0x801E - GLX_EVENT_MASK_SGIX 0x801F - GLX_DAMAGED_SGIX 0x8020 - GLX_SAVED_SGIX 0x8021 - GLX_WINDOW_SGIX 0x8022 - GLX_PBUFFER_SGIX 0x8023 - GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 - GLXPbuffer glXCreateGLXPbufferSGIX (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list) - void glXDestroyGLXPbufferSGIX (Display* dpy, GLXPbuffer pbuf) - void glXGetSelectedEventSGIX (Display* dpy, GLXDrawable drawable, unsigned long *mask) - void glXQueryGLXPbufferSGIX (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value) - void glXSelectEventSGIX (Display* dpy, GLXDrawable drawable, unsigned long mask) - typedef XID GLXPbufferSGIX - typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_barrier b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_barrier deleted file mode 100644 index 57dd60dbb0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_barrier +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGIX_swap_barrier -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_barrier.txt -GLX_SGIX_swap_barrier - void glXBindSwapBarrierSGIX (Display *dpy, GLXDrawable drawable, int barrier) - Bool glXQueryMaxSwapBarriersSGIX (Display *dpy, int screen, int *max) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_group b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_group deleted file mode 100644 index 3530604605..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_swap_group +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIX_swap_group -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/swap_group.txt -GLX_SGIX_swap_group - void glXJoinSwapGroupSGIX (Display *dpy, GLXDrawable drawable, GLXDrawable member) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_video_resize b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_video_resize deleted file mode 100644 index 8591e30140..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_video_resize +++ /dev/null @@ -1,10 +0,0 @@ -GLX_SGIX_video_resize -http://www.opengl.org/registry/specs/gl/SGIX/video_resize.txt -GLX_SGIX_video_resize - GLX_SYNC_FRAME_SGIX 0x00000000 - GLX_SYNC_SWAP_SGIX 0x00000001 - int glXBindChannelToWindowSGIX (Display* display, int screen, int channel, Window window) - int glXChannelRectSGIX (Display* display, int screen, int channel, int x, int y, int w, int h) - int glXChannelRectSyncSGIX (Display* display, int screen, int channel, GLenum synctype) - int glXQueryChannelDeltasSGIX (Display* display, int screen, int channel, int *x, int *y, int *w, int *h) - int glXQueryChannelRectSGIX (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_visual_select_group b/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_visual_select_group deleted file mode 100644 index 572563f822..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGIX_visual_select_group +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGIX_visual_select_group -http://www.opengl.org/registry/specs/gl/SGIX/visual_select_group.txt -GLX_SGIX_visual_select_group - GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_cushion b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_cushion deleted file mode 100644 index 2c934fdcf9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_cushion +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGI_cushion -http://www.opengl.org/registry/specs/gl/SGI/cushion.txt -GLX_SGI_cushion - void glXCushionSGI (Display* dpy, Window window, float cushion) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_make_current_read b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_make_current_read deleted file mode 100644 index 8978949272..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_make_current_read +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGI_make_current_read -http://www.opengl.org/registry/specs/gl/SGI/make_current_read.txt -GLX_SGI_make_current_read - GLXDrawable glXGetCurrentReadDrawableSGI (void) - Bool glXMakeCurrentReadSGI (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_swap_control b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_swap_control deleted file mode 100644 index 71d2411a9f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_swap_control +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SGI_swap_control -http://www.opengl.org/registry/specs/gl/SGI/swap_control.txt -GLX_SGI_swap_control - int glXSwapIntervalSGI (int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_video_sync b/Engine/lib/glew/auto/extensions/gl/GLX_SGI_video_sync deleted file mode 100644 index dcdb968c65..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SGI_video_sync +++ /dev/null @@ -1,5 +0,0 @@ -GLX_SGI_video_sync -http://www.opengl.org/registry/specs/SGI/video_sync.txt -GLX_SGI_video_sync - int glXGetVideoSyncSGI (unsigned int* count) - int glXWaitVideoSyncSGI (int divisor, int remainder, unsigned int* count) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_get_transparent_index b/Engine/lib/glew/auto/extensions/gl/GLX_SUN_get_transparent_index deleted file mode 100644 index ae7bee6dd8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_get_transparent_index +++ /dev/null @@ -1,4 +0,0 @@ -GLX_SUN_get_transparent_index -http://www.opengl.org/registry/specs/gl/SUN/get_transparent_index.txt -GLX_SUN_get_transparent_index - Status glXGetTransparentIndexSUN (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex) diff --git a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_video_resize b/Engine/lib/glew/auto/extensions/gl/GLX_SUN_video_resize deleted file mode 100644 index 0a0cefe3db..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GLX_SUN_video_resize +++ /dev/null @@ -1,7 +0,0 @@ -GLX_SUN_video_resize -http://wwws.sun.com/software/graphics/opengl/extensions/glx_sun_video_resize.txt -GLX_SUN_video_resize - GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD - GLX_VIDEO_RESIZE_SUN 0x8171 - int glXVideoResizeSUN (Display* display, GLXDrawable window, float factor) - int glXGetVideoResizeSUN (Display* display, GLXDrawable window, float* factor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_multisample b/Engine/lib/glew/auto/extensions/gl/GL_3DFX_multisample deleted file mode 100644 index d78f3d7988..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_multisample +++ /dev/null @@ -1,7 +0,0 @@ -GL_3DFX_multisample -http://www.opengl.org/registry/specs/gl/3DFX/3dfx_multisample.txt -GL_3DFX_multisample - GL_MULTISAMPLE_3DFX 0x86B2 - GL_SAMPLE_BUFFERS_3DFX 0x86B3 - GL_SAMPLES_3DFX 0x86B4 - GL_MULTISAMPLE_BIT_3DFX 0x20000000 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_tbuffer b/Engine/lib/glew/auto/extensions/gl/GL_3DFX_tbuffer deleted file mode 100644 index eeed6ceab3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_tbuffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_3DFX_tbuffer -http://www.opengl.org/registry/specs/gl/3DFX/tbuffer.txt -GL_3DFX_tbuffer - void glTbufferMask3DFX (GLuint mask) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_texture_compression_FXT1 b/Engine/lib/glew/auto/extensions/gl/GL_3DFX_texture_compression_FXT1 deleted file mode 100644 index 87a98d1008..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_3DFX_texture_compression_FXT1 +++ /dev/null @@ -1,5 +0,0 @@ -GL_3DFX_texture_compression_FXT1 -http://www.opengl.org/registry/specs/gl/3DFX/texture_compression_FXT1.txt -GL_3DFX_texture_compression_FXT1 - GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 - GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_blend_minmax_factor b/Engine/lib/glew/auto/extensions/gl/GL_AMD_blend_minmax_factor deleted file mode 100644 index d231b8b049..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_blend_minmax_factor +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_blend_minmax_factor -http://www.opengl.org/registry/specs/gl/AMD/blend_minmax_factor.txt -GL_AMD_blend_minmax_factor - GL_FACTOR_MIN_AMD 0x901C - GL_FACTOR_MAX_AMD 0x901D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_conservative_depth b/Engine/lib/glew/auto/extensions/gl/GL_AMD_conservative_depth deleted file mode 100644 index 2501e7c82b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_conservative_depth +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_conservative_depth -http://www.opengl.org/registry/specs/gl/AMD/conservative_depth.txt -GL_AMD_conservative_depth diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_debug_output b/Engine/lib/glew/auto/extensions/gl/GL_AMD_debug_output deleted file mode 100644 index a70ff683c6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_debug_output +++ /dev/null @@ -1,22 +0,0 @@ -GL_AMD_debug_output -http://www.opengl.org/registry/specs/gl/AMD/debug_output.txt -GL_AMD_debug_output - GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 - GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 - GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 - GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 - GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 - GL_DEBUG_SEVERITY_LOW_AMD 0x9148 - GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 - GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A - GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B - GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C - GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D - GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E - GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F - GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 - void glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, GLvoid *userParam) - void glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) - void glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf) - GLuint glGetDebugMessageLogAMD (GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message) - typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_depth_clamp_separate b/Engine/lib/glew/auto/extensions/gl/GL_AMD_depth_clamp_separate deleted file mode 100644 index d1bc82005e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_depth_clamp_separate +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_depth_clamp_separate -http://www.opengl.org/registry/specs/gl/AMD/depth_clamp_separate.txt -GL_AMD_depth_clamp_separate - GL_DEPTH_CLAMP_NEAR_AMD 0x901E - GL_DEPTH_CLAMP_FAR_AMD 0x901F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_draw_buffers_blend b/Engine/lib/glew/auto/extensions/gl/GL_AMD_draw_buffers_blend deleted file mode 100644 index f69023ef4d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_draw_buffers_blend +++ /dev/null @@ -1,7 +0,0 @@ -GL_AMD_draw_buffers_blend -http://www.opengl.org/registry/specs/gl/AMD/draw_buffers_blend.txt -GL_AMD_draw_buffers_blend - void glBlendEquationIndexedAMD (GLuint buf, GLenum mode) - void glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha) - void glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst) - void glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_interleaved_elements b/Engine/lib/glew/auto/extensions/gl/GL_AMD_interleaved_elements deleted file mode 100644 index 936e7adcfe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_interleaved_elements +++ /dev/null @@ -1,13 +0,0 @@ -GL_AMD_interleaved_elements -http://www.opengl.org/registry/specs/gl/AMD/interleaved_elements.txt -GL_AMD_interleaved_elements - GL_RED 0x1903 - GL_GREEN 0x1904 - GL_BLUE 0x1905 - GL_ALPHA 0x1906 - GL_RG8UI 0x8238 - GL_RG16UI 0x823A - GL_RGBA8UI 0x8D7C - GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 - GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 - void glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_multi_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_AMD_multi_draw_indirect deleted file mode 100644 index 9c52a80623..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_multi_draw_indirect +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_multi_draw_indirect -http://www.opengl.org/registry/specs/gl/AMD/multi_draw_indirect.txt -GL_AMD_multi_draw_indirect - void glMultiDrawArraysIndirectAMD (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride) - void glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_name_gen_delete b/Engine/lib/glew/auto/extensions/gl/GL_AMD_name_gen_delete deleted file mode 100644 index a8b69ff7c9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_name_gen_delete +++ /dev/null @@ -1,11 +0,0 @@ -GL_AMD_name_gen_delete -http://www.opengl.org/registry/specs/gl/AMD/name_gen_delete.txt -GL_AMD_name_gen_delete - GL_DATA_BUFFER_AMD 0x9151 - GL_PERFORMANCE_MONITOR_AMD 0x9152 - GL_QUERY_OBJECT_AMD 0x9153 - GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 - GL_SAMPLER_OBJECT_AMD 0x9155 - void glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint* names) - void glGenNamesAMD (GLenum identifier, GLuint num, GLuint* names) - GLboolean glIsNameAMD (GLenum identifier, GLuint name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_performance_monitor b/Engine/lib/glew/auto/extensions/gl/GL_AMD_performance_monitor deleted file mode 100644 index 0135859da8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_performance_monitor +++ /dev/null @@ -1,21 +0,0 @@ -GL_AMD_performance_monitor -http://www.opengl.org/registry/specs/gl/AMD/performance_monitor.txt -GL_AMD_performance_monitor - GL_COUNTER_TYPE_AMD 0x8BC0 - GL_COUNTER_RANGE_AMD 0x8BC1 - GL_UNSIGNED_INT64_AMD 0x8BC2 - GL_PERCENTAGE_AMD 0x8BC3 - GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 - GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 - GL_PERFMON_RESULT_AMD 0x8BC6 - void glBeginPerfMonitorAMD (GLuint monitor) - void glDeletePerfMonitorsAMD (GLsizei n, GLuint* monitors) - void glEndPerfMonitorAMD (GLuint monitor) - void glGenPerfMonitorsAMD (GLsizei n, GLuint* monitors) - void glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint *bytesWritten) - void glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, GLvoid *data) - void glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar *counterString) - void glGetPerfMonitorCountersAMD (GLuint group, GLint* numCounters, GLint *maxActiveCounters, GLsizei countersSize, GLuint *counters) - void glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei* length, GLchar *groupString) - void glGetPerfMonitorGroupsAMD (GLint* numGroups, GLsizei groupsSize, GLuint *groups) - void glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* counterList) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_pinned_memory b/Engine/lib/glew/auto/extensions/gl/GL_AMD_pinned_memory deleted file mode 100644 index 2a39cae5d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_pinned_memory +++ /dev/null @@ -1,4 +0,0 @@ -GL_AMD_pinned_memory -http://www.opengl.org/registry/specs/gl/AMD/pinned_memory.txt -GL_AMD_pinned_memory - GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_query_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_AMD_query_buffer_object deleted file mode 100644 index ed36d63beb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_query_buffer_object +++ /dev/null @@ -1,6 +0,0 @@ -GL_AMD_query_buffer_object -http://www.opengl.org/registry/specs/gl/AMD/query_buffer_object.txt -GL_AMD_query_buffer_object - GL_QUERY_BUFFER_AMD 0x9192 - GL_QUERY_BUFFER_BINDING_AMD 0x9193 - GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sample_positions b/Engine/lib/glew/auto/extensions/gl/GL_AMD_sample_positions deleted file mode 100644 index 88b94c6048..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sample_positions +++ /dev/null @@ -1,5 +0,0 @@ -GL_AMD_sample_positions -http://www.opengl.org/registry/specs/gl/AMD/sample_positions.txt -GL_AMD_sample_positions - GL_SUBSAMPLE_DISTANCE_AMD 0x883F - void glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat* val) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_seamless_cubemap_per_texture b/Engine/lib/glew/auto/extensions/gl/GL_AMD_seamless_cubemap_per_texture deleted file mode 100644 index c9c317196d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_seamless_cubemap_per_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_AMD_seamless_cubemap_per_texture -http://www.opengl.org/registry/specs/gl/AMD/seamless_cubemap_per_texture.txt -GL_AMD_seamless_cubemap_per_texture - GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_stencil_export b/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_stencil_export deleted file mode 100644 index ff90459b43..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_stencil_export +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_shader_stencil_export -http://www.opengl.org/registry/specs/gl/AMD/shader_stencil_export.txt -GL_AMD_shader_stencil_export diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_trinary_minmax b/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_trinary_minmax deleted file mode 100644 index c6f4be7962..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_shader_trinary_minmax +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_shader_trinary_minmax -http://www.opengl.org/registry/specs/gl/AMD/shader_trinary_minmax.txt -GL_AMD_shader_trinary_minmax diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sparse_texture b/Engine/lib/glew/auto/extensions/gl/GL_AMD_sparse_texture deleted file mode 100644 index da930fcfdf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_sparse_texture +++ /dev/null @@ -1,14 +0,0 @@ -GL_AMD_sparse_texture -http://www.opengl.org/registry/specs/gl/AMD/sparse_texture.txt -GL_AMD_sparse_texture - GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 - GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 - GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 - GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 - GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 - GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 - GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A - GL_MIN_SPARSE_LEVEL_AMD 0x919B - GL_MIN_LOD_WARNING_AMD 0x919C - void glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) - void glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_stencil_operation_extended b/Engine/lib/glew/auto/extensions/gl/GL_AMD_stencil_operation_extended deleted file mode 100644 index 150f1129f3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_stencil_operation_extended +++ /dev/null @@ -1,8 +0,0 @@ -GL_AMD_stencil_operation_extended -http://www.opengl.org/registry/specs/gl/AMD/stencil_operation_extended.txt -GL_AMD_stencil_operation_extended - GL_SET_AMD 0x874A - GL_REPLACE_VALUE_AMD 0x874B - GL_STENCIL_OP_VALUE_AMD 0x874C - GL_STENCIL_BACK_OP_VALUE_AMD 0x874D - void glStencilOpValueAMD (GLenum face, GLuint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_texture_texture4 b/Engine/lib/glew/auto/extensions/gl/GL_AMD_texture_texture4 deleted file mode 100644 index 618a61626c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_texture_texture4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_texture_texture4 -http://www.opengl.org/registry/specs/gl/AMD/texture_texture4.txt -GL_AMD_texture_texture4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_transform_feedback3_lines_triangles b/Engine/lib/glew/auto/extensions/gl/GL_AMD_transform_feedback3_lines_triangles deleted file mode 100644 index 7f3c99eec0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_transform_feedback3_lines_triangles +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_transform_feedback3_lines_triangles -http://www.opengl.org/registry/specs/gl/AMD/transform_feedback3_lines_triangles.txt -GL_AMD_transform_feedback3_lines_triangles diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_layer b/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_layer deleted file mode 100644 index e93d575091..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_layer +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_vertex_shader_layer -http://www.opengl.org/registry/specs/gl/AMD/vertex_shader_layer.txt -GL_AMD_vertex_shader_layer diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_tessellator b/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_tessellator deleted file mode 100644 index d61c90691c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_tessellator +++ /dev/null @@ -1,12 +0,0 @@ -GL_AMD_vertex_shader_tessellator -http://www.opengl.org/registry/specs/gl/AMD/vertex_shader_tessellator.txt -GL_AMD_vertex_shader_tessellator - GL_SAMPLER_BUFFER_AMD 0x9001 - GL_INT_SAMPLER_BUFFER_AMD 0x9002 - GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 - GL_TESSELLATION_MODE_AMD 0x9004 - GL_TESSELLATION_FACTOR_AMD 0x9005 - GL_DISCRETE_AMD 0x9006 - GL_CONTINUOUS_AMD 0x9007 - void glTessellationFactorAMD (GLfloat factor) - void glTessellationModeAMD (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_viewport_index b/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_viewport_index deleted file mode 100644 index 31010b3304..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_AMD_vertex_shader_viewport_index +++ /dev/null @@ -1,3 +0,0 @@ -GL_AMD_vertex_shader_viewport_index -http://www.opengl.org/registry/specs/gl/AMD/vertex_shader_viewport_index.txt -GL_AMD_vertex_shader_viewport_index diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_depth_texture b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_depth_texture deleted file mode 100644 index 608ea62e2b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_depth_texture +++ /dev/null @@ -1,3 +0,0 @@ -GL_ANGLE_depth_texture -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_depth_texture diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_blit b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_blit deleted file mode 100644 index 8c8a305e95..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_blit +++ /dev/null @@ -1,8 +0,0 @@ -GL_ANGLE_framebuffer_blit -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_framebuffer_blit - GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 - GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 - GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 - GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA - void glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_multisample deleted file mode 100644 index b6a66cbd09..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_framebuffer_multisample +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_framebuffer_multisample -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_framebuffer_multisample - GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 - GL_MAX_SAMPLES_ANGLE 0x8D57 - void glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_instanced_arrays b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_instanced_arrays deleted file mode 100644 index ec2f3ac7b9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_instanced_arrays +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_instanced_arrays -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_instanced_arrays - GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE - void glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount) - void glVertexAttribDivisorANGLE (GLuint index, GLuint divisor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_pack_reverse_row_order b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_pack_reverse_row_order deleted file mode 100644 index 6d9697ee91..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_pack_reverse_row_order +++ /dev/null @@ -1,4 +0,0 @@ -GL_ANGLE_pack_reverse_row_order -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_pack_reverse_row_order - GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_program_binary b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_program_binary deleted file mode 100644 index 40ebd5a03d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_program_binary +++ /dev/null @@ -1,4 +0,0 @@ -GL_ANGLE_program_binary -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_program_binary - GL_PROGRAM_BINARY_ANGLE 0x93A6 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt1 b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt1 deleted file mode 100644 index 1ea73ba1d4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt1 +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_texture_compression_dxt1 -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_compression_dxt1 - GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt3 b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt3 deleted file mode 100644 index 4ca07dd001..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt3 +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_texture_compression_dxt3 -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_compression_dxt3 - GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt5 b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt5 deleted file mode 100644 index ebaa7f623a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_compression_dxt5 +++ /dev/null @@ -1,7 +0,0 @@ -GL_ANGLE_texture_compression_dxt5 -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_compression_dxt5 - GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_usage b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_usage deleted file mode 100644 index 903e1bbea7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_texture_usage +++ /dev/null @@ -1,5 +0,0 @@ -GL_ANGLE_texture_usage -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_texture_usage - GL_TEXTURE_USAGE_ANGLE 0x93A2 - GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_timer_query b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_timer_query deleted file mode 100644 index 05f905ee75..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_timer_query +++ /dev/null @@ -1,20 +0,0 @@ -GL_ANGLE_timer_query -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_timer_query - GL_QUERY_COUNTER_BITS_ANGLE 0x8864 - GL_CURRENT_QUERY_ANGLE 0x8865 - GL_QUERY_RESULT_ANGLE 0x8866 - GL_QUERY_RESULT_AVAILABLE_ANGLE 0x8867 - GL_TIME_ELAPSED_ANGLE 0x88BF - GL_TIMESTAMP_ANGLE 0x8E28 - void glBeginQueryANGLE (GLenum target, GLuint id) - void glDeleteQueriesANGLE (GLsizei n, const GLuint* ids) - void glEndQueryANGLE (GLenum target) - void glGenQueriesANGLE (GLsizei n, GLuint* ids) - void glGetQueryObjecti64vANGLE (GLuint id, GLenum pname, GLint64* params) - void glGetQueryObjectivANGLE (GLuint id, GLenum pname, GLint* params) - void glGetQueryObjectui64vANGLE (GLuint id, GLenum pname, GLuint64* params) - void glGetQueryObjectuivANGLE (GLuint id, GLenum pname, GLuint* params) - void glGetQueryivANGLE (GLenum target, GLenum pname, GLint* params) - GLboolean glIsQueryANGLE (GLuint id) - void glQueryCounterANGLE (GLuint id, GLenum target) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_translated_shader_source b/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_translated_shader_source deleted file mode 100644 index 3296048943..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ANGLE_translated_shader_source +++ /dev/null @@ -1,5 +0,0 @@ -GL_ANGLE_translated_shader_source -https://code.google.com/p/angleproject/source/browse/#git%2Fextensions -GL_ANGLE_translated_shader_source - GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 - void glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_aux_depth_stencil b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_aux_depth_stencil deleted file mode 100644 index 730cdb4f98..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_aux_depth_stencil +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_aux_depth_stencil -http://www.opengl.org/registry/specs/gl/APPLE/aux_depth_stencil.txt -GL_APPLE_aux_depth_stencil - GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_client_storage b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_client_storage deleted file mode 100644 index 8f40a5ca04..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_client_storage +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_client_storage -http://www.opengl.org/registry/specs/gl/APPLE/client_storage.txt -GL_APPLE_client_storage - GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_element_array b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_element_array deleted file mode 100644 index f719ccd3b3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_element_array +++ /dev/null @@ -1,11 +0,0 @@ -GL_APPLE_element_array -http://www.opengl.org/registry/specs/gl/APPLE/element_array.txt -GL_APPLE_element_array - GL_ELEMENT_ARRAY_APPLE 0x8A0C - GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D - GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E - void glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count) - void glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count) - void glElementPointerAPPLE (GLenum type, const GLvoid *pointer) - void glMultiDrawElementArrayAPPLE (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount) - void glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_fence b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_fence deleted file mode 100644 index d21cd342d5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_fence +++ /dev/null @@ -1,13 +0,0 @@ -GL_APPLE_fence -http://www.opengl.org/registry/specs/gl/APPLE/fence.txt -GL_APPLE_fence - GL_DRAW_PIXELS_APPLE 0x8A0A - GL_FENCE_APPLE 0x8A0B - void glDeleteFencesAPPLE (GLsizei n, const GLuint* fences) - void glFinishFenceAPPLE (GLuint fence) - void glFinishObjectAPPLE (GLenum object, GLint name) - void glGenFencesAPPLE (GLsizei n, GLuint* fences) - GLboolean glIsFenceAPPLE (GLuint fence) - void glSetFenceAPPLE (GLuint fence) - GLboolean glTestFenceAPPLE (GLuint fence) - GLboolean glTestObjectAPPLE (GLenum object, GLuint name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_float_pixels b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_float_pixels deleted file mode 100644 index 2bf7458089..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_float_pixels +++ /dev/null @@ -1,17 +0,0 @@ -GL_APPLE_float_pixels -http://www.opengl.org/registry/specs/APPLE/float_pixels.txt -GL_APPLE_float_pixels - GL_HALF_APPLE 0x140B - GL_COLOR_FLOAT_APPLE 0x8A0F - GL_RGBA_FLOAT32_APPLE 0x8814 - GL_RGB_FLOAT32_APPLE 0x8815 - GL_ALPHA_FLOAT32_APPLE 0x8816 - GL_INTENSITY_FLOAT32_APPLE 0x8817 - GL_LUMINANCE_FLOAT32_APPLE 0x8818 - GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 - GL_RGBA_FLOAT16_APPLE 0x881A - GL_RGB_FLOAT16_APPLE 0x881B - GL_ALPHA_FLOAT16_APPLE 0x881C - GL_INTENSITY_FLOAT16_APPLE 0x881D - GL_LUMINANCE_FLOAT16_APPLE 0x881E - GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_flush_buffer_range b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_flush_buffer_range deleted file mode 100644 index e1b283e7e7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_flush_buffer_range +++ /dev/null @@ -1,7 +0,0 @@ -GL_APPLE_flush_buffer_range -http://www.opengl.org/registry/specs/gl/APPLE/flush_buffer_range.txt -GL_APPLE_flush_buffer_range - GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 - GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 - void glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param) - void glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_object_purgeable b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_object_purgeable deleted file mode 100644 index 35a653269c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_object_purgeable +++ /dev/null @@ -1,12 +0,0 @@ -GL_APPLE_object_purgeable -http://www.opengl.org/registry/specs/gl/APPLE/object_purgeable.txt -GL_APPLE_object_purgeable - GL_BUFFER_OBJECT_APPLE 0x85B3 - GL_RELEASED_APPLE 0x8A19 - GL_VOLATILE_APPLE 0x8A1A - GL_RETAINED_APPLE 0x8A1B - GL_UNDEFINED_APPLE 0x8A1C - GL_PURGEABLE_APPLE 0x8A1D - void glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint* params) - GLenum glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option) - GLenum glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_pixel_buffer b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_pixel_buffer deleted file mode 100644 index 7449f2918e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_pixel_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_pixel_buffer - -GL_APPLE_pixel_buffer - GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_rgb_422 b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_rgb_422 deleted file mode 100644 index 5ec30449a5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_rgb_422 +++ /dev/null @@ -1,6 +0,0 @@ -GL_APPLE_rgb_422 -http://www.opengl.org/registry/specs/gl/APPLE/rgb_422.txt -GL_APPLE_rgb_422 - GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA - GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB - GL_RGB_422_APPLE 0x8A1F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_row_bytes b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_row_bytes deleted file mode 100644 index d7c24b0756..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_row_bytes +++ /dev/null @@ -1,5 +0,0 @@ -GL_APPLE_row_bytes -http://www.opengl.org/registry/specs/gl/APPLE/row_bytes.txt -GL_APPLE_row_bytes - GL_PACK_ROW_BYTES_APPLE 0x8A15 - GL_UNPACK_ROW_BYTES_APPLE 0x8A16 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_specular_vector b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_specular_vector deleted file mode 100644 index 5c7296aacb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_specular_vector +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_specular_vector -http://www.opengl.org/registry/specs/gl/APPLE/specular_vector.txt -GL_APPLE_specular_vector - GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_texture_range b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_texture_range deleted file mode 100644 index 7ca9b9bad8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_texture_range +++ /dev/null @@ -1,12 +0,0 @@ -GL_APPLE_texture_range -http://www.opengl.org/registry/specs/APPLE/texture_range.txt -GL_APPLE_texture_range - GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC - GL_STORAGE_PRIVATE_APPLE 0x85BD - GL_STORAGE_CACHED_APPLE 0x85BE - GL_STORAGE_SHARED_APPLE 0x85BF - GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 - GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 - void glTextureRangeAPPLE (GLenum target, GLsizei length, GLvoid *pointer) - void glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, GLvoid **params) - diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_transform_hint b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_transform_hint deleted file mode 100644 index 1b7dd206e6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_transform_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_transform_hint -http://www.opengl.org/registry/specs/gl/APPLE/transform_hint.txt -GL_APPLE_transform_hint - GL_TRANSFORM_HINT_APPLE 0x85B1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_object b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_object deleted file mode 100644 index 9c7bc04c9f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_object +++ /dev/null @@ -1,8 +0,0 @@ -GL_APPLE_vertex_array_object -http://www.opengl.org/registry/specs/gl/APPLE/vertex_array_object.txt -GL_APPLE_vertex_array_object - GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 - void glBindVertexArrayAPPLE (GLuint array) - void glDeleteVertexArraysAPPLE (GLsizei n, const GLuint* arrays) - void glGenVertexArraysAPPLE (GLsizei n, const GLuint* arrays) - GLboolean glIsVertexArrayAPPLE (GLuint array) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_range deleted file mode 100644 index e52e5f69ec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_array_range +++ /dev/null @@ -1,14 +0,0 @@ -GL_APPLE_vertex_array_range -http://www.opengl.org/registry/specs/gl/APPLE/vertex_array_range.txt -GL_APPLE_vertex_array_range - GL_VERTEX_ARRAY_RANGE_APPLE 0x851D - GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E - GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F - GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520 - GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 - GL_STORAGE_CLIENT_APPLE 0x85B4 - GL_STORAGE_CACHED_APPLE 0x85BE - GL_STORAGE_SHARED_APPLE 0x85BF - void glFlushVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer) - void glVertexArrayParameteriAPPLE (GLenum pname, GLint param) - void glVertexArrayRangeAPPLE (GLsizei length, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_program_evaluators b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_program_evaluators deleted file mode 100644 index 2171a74fb5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_vertex_program_evaluators +++ /dev/null @@ -1,20 +0,0 @@ -GL_APPLE_vertex_program_evaluators -http://www.opengl.org/registry/specs/gl/APPLE/vertex_program_evaluators.txt -GL_APPLE_vertex_program_evaluators - GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 - GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 - GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 - GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 - GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 - GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 - GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 - GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 - GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 - GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 - void glDisableVertexAttribAPPLE (GLuint index, GLenum pname) - void glEnableVertexAttribAPPLE (GLuint index, GLenum pname) - GLboolean glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname) - void glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points) - void glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points) - void glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points) - void glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_ycbcr_422 b/Engine/lib/glew/auto/extensions/gl/GL_APPLE_ycbcr_422 deleted file mode 100644 index 068ee10e9a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_APPLE_ycbcr_422 +++ /dev/null @@ -1,4 +0,0 @@ -GL_APPLE_ycbcr_422 -http://www.opengl.org/registry/specs/gl/APPLE/ycbcr_422.txt -GL_APPLE_ycbcr_422 - GL_YCBCR_422_APPLE 0x85B9 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES2_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES2_compatibility deleted file mode 100644 index a89355bbd0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES2_compatibility +++ /dev/null @@ -1,25 +0,0 @@ -GL_ARB_ES2_compatibility -http://www.opengl.org/registry/specs/gl/ARB/ES2_compatibility.txt -GL_ARB_ES2_compatibility - GL_FIXED 0x140C - GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A - GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B - GL_RGB565 0x8D62 - GL_LOW_FLOAT 0x8DF0 - GL_MEDIUM_FLOAT 0x8DF1 - GL_HIGH_FLOAT 0x8DF2 - GL_LOW_INT 0x8DF3 - GL_MEDIUM_INT 0x8DF4 - GL_HIGH_INT 0x8DF5 - GL_SHADER_BINARY_FORMATS 0x8DF8 - GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 - GL_SHADER_COMPILER 0x8DFA - GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB - GL_MAX_VARYING_VECTORS 0x8DFC - GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD - void glClearDepthf (GLclampf d) - void glDepthRangef (GLclampf n, GLclampf f) - void glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint* range, GLint *precision) - void glReleaseShaderCompiler (void) - void glShaderBinary (GLsizei count, const GLuint* shaders, GLenum binaryformat, const GLvoid*binary, GLsizei length) - typedef int GLfixed diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES3_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES3_compatibility deleted file mode 100644 index 9cfe8f0453..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_ES3_compatibility +++ /dev/null @@ -1,17 +0,0 @@ -GL_ARB_ES3_compatibility -http://www.opengl.org/registry/specs/gl/ARB/ES3_compatibility.txt -GL_ARB_ES3_compatibility - GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF - GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 - GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A - GL_MAX_ELEMENT_INDEX 0x8D6B - GL_COMPRESSED_R11_EAC 0x9270 - GL_COMPRESSED_SIGNED_R11_EAC 0x9271 - GL_COMPRESSED_RG11_EAC 0x9272 - GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 - GL_COMPRESSED_RGB8_ETC2 0x9274 - GL_COMPRESSED_SRGB8_ETC2 0x9275 - GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 - GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 - GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 - GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_arrays_of_arrays b/Engine/lib/glew/auto/extensions/gl/GL_ARB_arrays_of_arrays deleted file mode 100644 index 82c99c87d0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_arrays_of_arrays +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_arrays_of_arrays -http://www.opengl.org/registry/specs/gl/ARB/arrays_of_arrays.txt -GL_ARB_arrays_of_arrays diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_base_instance b/Engine/lib/glew/auto/extensions/gl/GL_ARB_base_instance deleted file mode 100644 index e86711de53..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_base_instance +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_base_instance -http://www.opengl.org/registry/specs/gl/ARB/base_instance.txt -GL_ARB_base_instance - void glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance) - void glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLuint baseinstance) - void glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_bindless_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_bindless_texture deleted file mode 100644 index d77436072d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_bindless_texture +++ /dev/null @@ -1,20 +0,0 @@ -GL_ARB_bindless_texture -http://www.opengl.org/registry/specs/gl/ARB/bindless_texture.txt -GL_ARB_bindless_texture - GL_UNSIGNED_INT64_ARB 0x140F - GLuint64 glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) - GLuint64 glGetTextureHandleARB (GLuint texture) - GLuint64 glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler) - void glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT* params) - GLboolean glIsImageHandleResidentARB (GLuint64 handle) - GLboolean glIsTextureHandleResidentARB (GLuint64 handle) - void glMakeImageHandleNonResidentARB (GLuint64 handle) - void glMakeImageHandleResidentARB (GLuint64 handle, GLenum access) - void glMakeTextureHandleNonResidentARB (GLuint64 handle) - void glMakeTextureHandleResidentARB (GLuint64 handle) - void glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value) - void glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64* values) - void glUniformHandleui64ARB (GLint location, GLuint64 value) - void glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64* value) - void glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x) - void glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT* v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_blend_func_extended b/Engine/lib/glew/auto/extensions/gl/GL_ARB_blend_func_extended deleted file mode 100644 index 9f3dbb9909..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_blend_func_extended +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_blend_func_extended -http://www.opengl.org/registry/specs/gl/ARB/blend_func_extended.txt -GL_ARB_blend_func_extended - GL_SRC1_COLOR 0x88F9 - GL_ONE_MINUS_SRC1_COLOR 0x88FA - GL_ONE_MINUS_SRC1_ALPHA 0x88FB - GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC - void glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name) - GLint glGetFragDataIndex (GLuint program, const GLchar * name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_buffer_storage b/Engine/lib/glew/auto/extensions/gl/GL_ARB_buffer_storage deleted file mode 100644 index 03d8d97283..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_buffer_storage +++ /dev/null @@ -1,14 +0,0 @@ -GL_ARB_buffer_storage -http://www.opengl.org/registry/specs/gl/ARB/buffer_storage.txt -GL_ARB_buffer_storage - GL_MAP_READ_BIT 0x0001 - GL_MAP_WRITE_BIT 0x0002 - GL_MAP_PERSISTENT_BIT 0x00000040 - GL_MAP_COHERENT_BIT 0x00000080 - GL_DYNAMIC_STORAGE_BIT 0x0100 - GL_CLIENT_STORAGE_BIT 0x0200 - GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 - GL_BUFFER_IMMUTABLE_STORAGE 0x821F - GL_BUFFER_STORAGE_FLAGS 0x8220 - void glBufferStorage (GLenum target, GLsizeiptr size, const GLvoid* data, GLbitfield flags) - void glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const GLvoid* data, GLbitfield flags) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_cl_event b/Engine/lib/glew/auto/extensions/gl/GL_ARB_cl_event deleted file mode 100644 index 8469e239dd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_cl_event +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_cl_event -http://www.opengl.org/registry/specs/gl/ARB/cl_event.txt -GL_ARB_cl_event - GL_SYNC_CL_EVENT_ARB 0x8240 - GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 - GLsync glCreateSyncFromCLeventARB (cl_context context, cl_event event, GLbitfield flags) - typedef struct _cl_context *cl_context - typedef struct _cl_event *cl_event diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_buffer_object deleted file mode 100644 index d2cba8c50f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_clear_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/clear_buffer_object.txt -GL_ARB_clear_buffer_object - void glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data) - void glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data) - void glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data) - void glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_texture deleted file mode 100644 index 2879aa0abc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_clear_texture +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_clear_texture -http://www.opengl.org/registry/specs/gl/ARB/clear_texture.txt -GL_ARB_clear_texture - GL_CLEAR_TEXTURE 0x9365 - void glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const GLvoid* data) - void glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_color_buffer_float b/Engine/lib/glew/auto/extensions/gl/GL_ARB_color_buffer_float deleted file mode 100644 index d070f52311..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_color_buffer_float +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_color_buffer_float -http://www.opengl.org/registry/specs/gl/ARB/color_buffer_float.txt -GL_ARB_color_buffer_float - GL_RGBA_FLOAT_MODE_ARB 0x8820 - GL_CLAMP_VERTEX_COLOR_ARB 0x891A - GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B - GL_CLAMP_READ_COLOR_ARB 0x891C - GL_FIXED_ONLY_ARB 0x891D - void glClampColorARB (GLenum target, GLenum clamp) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compatibility deleted file mode 100644 index a2fe3711d0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compatibility +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_compatibility -http://www.opengl.org/registry/specs/gl/ARB/compatibility.txt -GL_ARB_compatibility diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compressed_texture_pixel_storage b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compressed_texture_pixel_storage deleted file mode 100644 index a4a3951332..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compressed_texture_pixel_storage +++ /dev/null @@ -1,11 +0,0 @@ -GL_ARB_compressed_texture_pixel_storage -http://www.opengl.org/registry/specs/gl/ARB/compressed_texture_pixel_storage.txt -GL_ARB_compressed_texture_pixel_storage - GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 - GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 - GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 - GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A - GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B - GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C - GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D - GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_shader deleted file mode 100644 index c36257e552..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_shader +++ /dev/null @@ -1,23 +0,0 @@ -GL_ARB_compute_shader -http://www.opengl.org/registry/specs/gl/ARB/compute_shader.txt -GL_ARB_compute_shader - GL_COMPUTE_SHADER_BIT 0x00000020 - GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 - GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 - GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 - GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 - GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 - GL_COMPUTE_WORK_GROUP_SIZE 0x8267 - GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB - GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED - GL_DISPATCH_INDIRECT_BUFFER 0x90EE - GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF - GL_COMPUTE_SHADER 0x91B9 - GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB - GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC - GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD - GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE - GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF - void glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z) - void glDispatchComputeIndirect (GLintptr indirect) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_variable_group_size b/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_variable_group_size deleted file mode 100644 index 4d2a5ba6d6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_compute_variable_group_size +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_compute_variable_group_size -http://www.opengl.org/registry/specs/gl/ARB/compute_variable_group_size.txt -GL_ARB_compute_variable_group_size - GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB - GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF - GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 - GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 - void glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_conservative_depth b/Engine/lib/glew/auto/extensions/gl/GL_ARB_conservative_depth deleted file mode 100644 index c2e2c3aa54..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_conservative_depth +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_conservative_depth -http://www.opengl.org/registry/specs/gl/ARB/conservative_depth.txt -GL_ARB_conservative_depth diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_buffer b/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_buffer deleted file mode 100644 index 401dda60b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_buffer +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_copy_buffer -http://www.opengl.org/registry/specs/gl/ARB/copy_buffer.txt -GL_ARB_copy_buffer - GL_COPY_READ_BUFFER 0x8F36 - GL_COPY_WRITE_BUFFER 0x8F37 - void glCopyBufferSubData (GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_image b/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_image deleted file mode 100644 index a65e038105..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_copy_image -http://www.opengl.org/registry/specs/gl/ARB/copy_image.txt -GL_ARB_copy_image - void glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_debug_output b/Engine/lib/glew/auto/extensions/gl/GL_ARB_debug_output deleted file mode 100644 index c047939816..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_debug_output +++ /dev/null @@ -1,30 +0,0 @@ -GL_ARB_debug_output -http://www.opengl.org/registry/specs/gl/ARB/debug_output.txt -GL_ARB_debug_output - GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 - GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 - GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 - GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 - GL_DEBUG_SOURCE_API_ARB 0x8246 - GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 - GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 - GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 - GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A - GL_DEBUG_SOURCE_OTHER_ARB 0x824B - GL_DEBUG_TYPE_ERROR_ARB 0x824C - GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D - GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E - GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F - GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 - GL_DEBUG_TYPE_OTHER_ARB 0x8251 - GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 - GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 - GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 - GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 - GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 - GL_DEBUG_SEVERITY_LOW_ARB 0x9148 - void glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const GLvoid *userParam) - void glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) - void glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf) - GLuint glGetDebugMessageLogARB (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog) - typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_buffer_float b/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_buffer_float deleted file mode 100644 index 325f65ba59..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_buffer_float +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_depth_buffer_float -http://www.opengl.org/registry/specs/gl/ARB/depth_buffer_float.txt -GL_ARB_depth_buffer_float - GL_DEPTH_COMPONENT32F 0x8CAC - GL_DEPTH32F_STENCIL8 0x8CAD - GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_clamp b/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_clamp deleted file mode 100644 index 94c22bb13d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_depth_clamp -http://www.opengl.org/registry/specs/gl/ARB/depth_clamp.txt -GL_ARB_depth_clamp - GL_DEPTH_CLAMP 0x864F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_texture deleted file mode 100644 index 13f20d9b42..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_depth_texture +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_depth_texture -http://www.opengl.org/registry/specs/gl/ARB/depth_texture.txt -GL_ARB_depth_texture - GL_DEPTH_COMPONENT16_ARB 0x81A5 - GL_DEPTH_COMPONENT24_ARB 0x81A6 - GL_DEPTH_COMPONENT32_ARB 0x81A7 - GL_TEXTURE_DEPTH_SIZE_ARB 0x884A - GL_DEPTH_TEXTURE_MODE_ARB 0x884B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers deleted file mode 100644 index 5550c2d13c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers +++ /dev/null @@ -1,21 +0,0 @@ -GL_ARB_draw_buffers -http://www.opengl.org/registry/specs/gl/ARB/draw_buffers.txt -GL_ARB_draw_buffers - GL_MAX_DRAW_BUFFERS_ARB 0x8824 - GL_DRAW_BUFFER0_ARB 0x8825 - GL_DRAW_BUFFER1_ARB 0x8826 - GL_DRAW_BUFFER2_ARB 0x8827 - GL_DRAW_BUFFER3_ARB 0x8828 - GL_DRAW_BUFFER4_ARB 0x8829 - GL_DRAW_BUFFER5_ARB 0x882A - GL_DRAW_BUFFER6_ARB 0x882B - GL_DRAW_BUFFER7_ARB 0x882C - GL_DRAW_BUFFER8_ARB 0x882D - GL_DRAW_BUFFER9_ARB 0x882E - GL_DRAW_BUFFER10_ARB 0x882F - GL_DRAW_BUFFER11_ARB 0x8830 - GL_DRAW_BUFFER12_ARB 0x8831 - GL_DRAW_BUFFER13_ARB 0x8832 - GL_DRAW_BUFFER14_ARB 0x8833 - GL_DRAW_BUFFER15_ARB 0x8834 - void glDrawBuffersARB (GLsizei n, const GLenum* bufs) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers_blend b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers_blend deleted file mode 100644 index e90578bc45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_buffers_blend +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_draw_buffers_blend -http://www.opengl.org/registry/specs/gl/ARB/draw_buffers_blend.txt -GL_ARB_draw_buffers_blend - void glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha) - void glBlendEquationiARB (GLuint buf, GLenum mode) - void glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) - void glBlendFunciARB (GLuint buf, GLenum src, GLenum dst) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_elements_base_vertex b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_elements_base_vertex deleted file mode 100644 index 452296049e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_elements_base_vertex +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_draw_elements_base_vertex -http://www.opengl.org/registry/specs/gl/ARB/draw_elements_base_vertex.txt -GL_ARB_draw_elements_base_vertex - void glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex) - void glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex) - void glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex) - void glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const *indices, GLsizei primcount, const GLint *basevertex) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_indirect deleted file mode 100644 index 1868e8a3c3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_indirect +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_draw_indirect -http://www.opengl.org/registry/specs/gl/ARB/draw_indirect.txt -GL_ARB_draw_indirect - GL_DRAW_INDIRECT_BUFFER 0x8F3F - GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 - void glDrawArraysIndirect (GLenum mode, const GLvoid *indirect) - void glDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_instanced b/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_instanced deleted file mode 100644 index 4140beaaa6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_draw_instanced +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_draw_instanced -http://www.opengl.org/registry/specs/ARB/draw_instanced.txt -GL_ARB_draw_instanced diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_enhanced_layouts b/Engine/lib/glew/auto/extensions/gl/GL_ARB_enhanced_layouts deleted file mode 100644 index 81f007b1b2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_enhanced_layouts +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_enhanced_layouts -http://www.opengl.org/registry/specs/gl/ARB/enhanced_layouts.txt -GL_ARB_enhanced_layouts - GL_LOCATION_COMPONENT 0x934A - GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B - GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_attrib_location b/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_attrib_location deleted file mode 100644 index 63a0b15a81..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_attrib_location +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_explicit_attrib_location -http://www.opengl.org/registry/specs/gl/ARB/explicit_attrib_location.txt -GL_ARB_explicit_attrib_location diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_uniform_location b/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_uniform_location deleted file mode 100644 index 6b737058ab..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_explicit_uniform_location +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_explicit_uniform_location -http://www.opengl.org/registry/specs/gl/ARB/explicit_uniform_location.txt -GL_ARB_explicit_uniform_location - GL_MAX_UNIFORM_LOCATIONS 0x826E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_coord_conventions b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_coord_conventions deleted file mode 100644 index 897721a619..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_coord_conventions +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_fragment_coord_conventions -http://www.opengl.org/registry/specs/gl/ARB/fragment_coord_conventions.txt -GL_ARB_fragment_coord_conventions diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_layer_viewport b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_layer_viewport deleted file mode 100644 index e959b48b25..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_layer_viewport +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_fragment_layer_viewport -http://www.opengl.org/registry/specs/gl/ARB/fragment_layer_viewport.txt -GL_ARB_fragment_layer_viewport diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program deleted file mode 100644 index 2c7f5bb6dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_fragment_program -http://www.opengl.org/registry/specs/gl/ARB/fragment_program.txt -GL_ARB_fragment_program - GL_FRAGMENT_PROGRAM_ARB 0x8804 - GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 - GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 - GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 - GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 - GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 - GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A - GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B - GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C - GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D - GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E - GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F - GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 - GL_MAX_TEXTURE_COORDS_ARB 0x8871 - GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program_shadow b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program_shadow deleted file mode 100644 index bed6654304..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_program_shadow +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_fragment_program_shadow -http://www.opengl.org/registry/specs/gl/ARB/fragment_program_shadow.txt -GL_ARB_fragment_program_shadow diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_shader deleted file mode 100644 index fd6b3a20de..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_fragment_shader +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_fragment_shader -http://www.opengl.org/registry/specs/gl/ARB/fragment_shader.txt -GL_ARB_fragment_shader - GL_FRAGMENT_SHADER_ARB 0x8B30 - GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 - GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_no_attachments b/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_no_attachments deleted file mode 100644 index 04143e8ec1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_no_attachments +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_framebuffer_no_attachments -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_no_attachments.txt -GL_ARB_framebuffer_no_attachments - GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 - GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 - GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 - GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 - GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 - GL_MAX_FRAMEBUFFER_WIDTH 0x9315 - GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 - GL_MAX_FRAMEBUFFER_LAYERS 0x9317 - GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 - void glFramebufferParameteri (GLenum target, GLenum pname, GLint param) - void glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint* params) - void glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint* params) - void glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_object deleted file mode 100644 index 33b4b1943d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_object +++ /dev/null @@ -1,97 +0,0 @@ -GL_ARB_framebuffer_object -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_object.txt -GL_ARB_framebuffer_object - GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 - GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 - GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 - GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 - GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 - GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 - GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 - GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 - GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 - GL_FRAMEBUFFER_DEFAULT 0x8218 - GL_FRAMEBUFFER_UNDEFINED 0x8219 - GL_DEPTH_STENCIL_ATTACHMENT 0x821A - GL_INDEX 0x8222 - GL_MAX_RENDERBUFFER_SIZE 0x84E8 - GL_DEPTH_STENCIL 0x84F9 - GL_UNSIGNED_INT_24_8 0x84FA - GL_DEPTH24_STENCIL8 0x88F0 - GL_TEXTURE_STENCIL_SIZE 0x88F1 - GL_UNSIGNED_NORMALIZED 0x8C17 - GL_SRGB 0x8C40 - GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 - GL_FRAMEBUFFER_BINDING 0x8CA6 - GL_RENDERBUFFER_BINDING 0x8CA7 - GL_READ_FRAMEBUFFER 0x8CA8 - GL_DRAW_FRAMEBUFFER 0x8CA9 - GL_READ_FRAMEBUFFER_BINDING 0x8CAA - GL_RENDERBUFFER_SAMPLES 0x8CAB - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 - GL_FRAMEBUFFER_COMPLETE 0x8CD5 - GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 - GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB - GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC - GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD - GL_MAX_COLOR_ATTACHMENTS 0x8CDF - GL_COLOR_ATTACHMENT0 0x8CE0 - GL_COLOR_ATTACHMENT1 0x8CE1 - GL_COLOR_ATTACHMENT2 0x8CE2 - GL_COLOR_ATTACHMENT3 0x8CE3 - GL_COLOR_ATTACHMENT4 0x8CE4 - GL_COLOR_ATTACHMENT5 0x8CE5 - GL_COLOR_ATTACHMENT6 0x8CE6 - GL_COLOR_ATTACHMENT7 0x8CE7 - GL_COLOR_ATTACHMENT8 0x8CE8 - GL_COLOR_ATTACHMENT9 0x8CE9 - GL_COLOR_ATTACHMENT10 0x8CEA - GL_COLOR_ATTACHMENT11 0x8CEB - GL_COLOR_ATTACHMENT12 0x8CEC - GL_COLOR_ATTACHMENT13 0x8CED - GL_COLOR_ATTACHMENT14 0x8CEE - GL_COLOR_ATTACHMENT15 0x8CEF - GL_DEPTH_ATTACHMENT 0x8D00 - GL_STENCIL_ATTACHMENT 0x8D20 - GL_FRAMEBUFFER 0x8D40 - GL_RENDERBUFFER 0x8D41 - GL_RENDERBUFFER_WIDTH 0x8D42 - GL_RENDERBUFFER_HEIGHT 0x8D43 - GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 - GL_STENCIL_INDEX1 0x8D46 - GL_STENCIL_INDEX4 0x8D47 - GL_STENCIL_INDEX8 0x8D48 - GL_STENCIL_INDEX16 0x8D49 - GL_RENDERBUFFER_RED_SIZE 0x8D50 - GL_RENDERBUFFER_GREEN_SIZE 0x8D51 - GL_RENDERBUFFER_BLUE_SIZE 0x8D52 - GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 - GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 - GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 - GL_MAX_SAMPLES 0x8D57 - void glBindFramebuffer (GLenum target, GLuint framebuffer) - void glBindRenderbuffer (GLenum target, GLuint renderbuffer) - void glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - GLenum glCheckFramebufferStatus (GLenum target) - void glDeleteFramebuffers (GLsizei n, const GLuint* framebuffers) - void glDeleteRenderbuffers (GLsizei n, const GLuint* renderbuffers) - void glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) - void glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer) - void glFramebufferTextureLayer (GLenum target,GLenum attachment, GLuint texture,GLint level,GLint layer) - void glGenFramebuffers (GLsizei n, GLuint* framebuffers) - void glGenRenderbuffers (GLsizei n, GLuint* renderbuffers) - void glGenerateMipmap (GLenum target) - void glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint* params) - void glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint* params) - GLboolean glIsFramebuffer (GLuint framebuffer) - GLboolean glIsRenderbuffer (GLuint renderbuffer) - void glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height) - void glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_sRGB deleted file mode 100644 index 848f2338e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_framebuffer_sRGB -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_sRGB.txt -GL_ARB_framebuffer_sRGB - GL_FRAMEBUFFER_SRGB 0x8DB9 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_geometry_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_geometry_shader4 deleted file mode 100644 index b24a071443..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_geometry_shader4 +++ /dev/null @@ -1,26 +0,0 @@ -GL_ARB_geometry_shader4 -http://www.opengl.org/registry/specs/gl/ARB/geometry_shader4.txt -GL_ARB_geometry_shader4 - GL_LINES_ADJACENCY_ARB 0xA - GL_LINE_STRIP_ADJACENCY_ARB 0xB - GL_TRIANGLES_ADJACENCY_ARB 0xC - GL_TRIANGLE_STRIP_ADJACENCY_ARB 0xD - GL_PROGRAM_POINT_SIZE_ARB 0x8642 - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 - GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 - GL_GEOMETRY_SHADER_ARB 0x8DD9 - GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA - GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB - GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC - GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD - GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 - void glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level) - void glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) - void glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) - void glProgramParameteriARB (GLuint program, GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_get_program_binary b/Engine/lib/glew/auto/extensions/gl/GL_ARB_get_program_binary deleted file mode 100644 index 8e52552fa1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_get_program_binary +++ /dev/null @@ -1,10 +0,0 @@ -GL_ARB_get_program_binary -http://www.opengl.org/registry/specs/gl/ARB/get_program_binary.txt -GL_ARB_get_program_binary - GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 - GL_PROGRAM_BINARY_LENGTH 0x8741 - GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE - GL_PROGRAM_BINARY_FORMATS 0x87FF - void glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei* length, GLenum *binaryFormat, GLvoid*binary) - void glProgramBinary (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length) - void glProgramParameteri (GLuint program, GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader5 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader5 deleted file mode 100644 index 5d5c91af0b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader5 +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_gpu_shader5 -http://www.opengl.org/registry/specs/gl/ARB/gpu_shader5.txt -GL_ARB_gpu_shader5 - GL_GEOMETRY_SHADER_INVOCATIONS 0x887F - GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A - GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B - GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C - GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D - GL_MAX_VERTEX_STREAMS 0x8E71 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader_fp64 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader_fp64 deleted file mode 100644 index bcdd7c33dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_gpu_shader_fp64 +++ /dev/null @@ -1,33 +0,0 @@ -GL_ARB_gpu_shader_fp64 -http://www.opengl.org/registry/specs/gl/ARB/gpu_shader_fp64.txt -GL_ARB_gpu_shader_fp64 - GL_DOUBLE_MAT2 0x8F46 - GL_DOUBLE_MAT3 0x8F47 - GL_DOUBLE_MAT4 0x8F48 - GL_DOUBLE_MAT2x3 0x8F49 - GL_DOUBLE_MAT2x4 0x8F4A - GL_DOUBLE_MAT3x2 0x8F4B - GL_DOUBLE_MAT3x4 0x8F4C - GL_DOUBLE_MAT4x2 0x8F4D - GL_DOUBLE_MAT4x3 0x8F4E - GL_DOUBLE_VEC2 0x8FFC - GL_DOUBLE_VEC3 0x8FFD - GL_DOUBLE_VEC4 0x8FFE - void glGetUniformdv (GLuint program, GLint location, GLdouble* params) - void glUniform1d (GLint location, GLdouble x) - void glUniform1dv (GLint location, GLsizei count, const GLdouble* value) - void glUniform2d (GLint location, GLdouble x, GLdouble y) - void glUniform2dv (GLint location, GLsizei count, const GLdouble* value) - void glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z) - void glUniform3dv (GLint location, GLsizei count, const GLdouble* value) - void glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glUniform4dv (GLint location, GLsizei count, const GLdouble* value) - void glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_pixel b/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_pixel deleted file mode 100644 index b8e7e53a66..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_pixel +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_half_float_pixel -http://www.opengl.org/registry/specs/gl/ARB/half_float_pixel.txt -GL_ARB_half_float_pixel - GL_HALF_FLOAT_ARB 0x140B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_vertex b/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_vertex deleted file mode 100644 index abed78e9d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_half_float_vertex +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_half_float_vertex -http://www.opengl.org/registry/specs/gl/ARB/half_float_vertex.txt -GL_ARB_half_float_vertex - GL_HALF_FLOAT 0x140B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_imaging b/Engine/lib/glew/auto/extensions/gl/GL_ARB_imaging deleted file mode 100644 index 0efd0c1b8e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_imaging +++ /dev/null @@ -1,112 +0,0 @@ -GL_ARB_imaging - -GL_ARB_imaging - GL_CONSTANT_COLOR 0x8001 - GL_ONE_MINUS_CONSTANT_COLOR 0x8002 - GL_CONSTANT_ALPHA 0x8003 - GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 - GL_BLEND_COLOR 0x8005 - GL_FUNC_ADD 0x8006 - GL_MIN 0x8007 - GL_MAX 0x8008 - GL_BLEND_EQUATION 0x8009 - GL_FUNC_SUBTRACT 0x800A - GL_FUNC_REVERSE_SUBTRACT 0x800B - GL_CONVOLUTION_1D 0x8010 - GL_CONVOLUTION_2D 0x8011 - GL_SEPARABLE_2D 0x8012 - GL_CONVOLUTION_BORDER_MODE 0x8013 - GL_CONVOLUTION_FILTER_SCALE 0x8014 - GL_CONVOLUTION_FILTER_BIAS 0x8015 - GL_REDUCE 0x8016 - GL_CONVOLUTION_FORMAT 0x8017 - GL_CONVOLUTION_WIDTH 0x8018 - GL_CONVOLUTION_HEIGHT 0x8019 - GL_MAX_CONVOLUTION_WIDTH 0x801A - GL_MAX_CONVOLUTION_HEIGHT 0x801B - GL_POST_CONVOLUTION_RED_SCALE 0x801C - GL_POST_CONVOLUTION_GREEN_SCALE 0x801D - GL_POST_CONVOLUTION_BLUE_SCALE 0x801E - GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F - GL_POST_CONVOLUTION_RED_BIAS 0x8020 - GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 - GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 - GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 - GL_HISTOGRAM 0x8024 - GL_PROXY_HISTOGRAM 0x8025 - GL_HISTOGRAM_WIDTH 0x8026 - GL_HISTOGRAM_FORMAT 0x8027 - GL_HISTOGRAM_RED_SIZE 0x8028 - GL_HISTOGRAM_GREEN_SIZE 0x8029 - GL_HISTOGRAM_BLUE_SIZE 0x802A - GL_HISTOGRAM_ALPHA_SIZE 0x802B - GL_HISTOGRAM_LUMINANCE_SIZE 0x802C - GL_HISTOGRAM_SINK 0x802D - GL_MINMAX 0x802E - GL_MINMAX_FORMAT 0x802F - GL_MINMAX_SINK 0x8030 - GL_TABLE_TOO_LARGE 0x8031 - GL_COLOR_MATRIX 0x80B1 - GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 - GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 - GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 - GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 - GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 - GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 - GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 - GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 - GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA - GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB - GL_COLOR_TABLE 0x80D0 - GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 - GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 - GL_PROXY_COLOR_TABLE 0x80D3 - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 - GL_COLOR_TABLE_SCALE 0x80D6 - GL_COLOR_TABLE_BIAS 0x80D7 - GL_COLOR_TABLE_FORMAT 0x80D8 - GL_COLOR_TABLE_WIDTH 0x80D9 - GL_COLOR_TABLE_RED_SIZE 0x80DA - GL_COLOR_TABLE_GREEN_SIZE 0x80DB - GL_COLOR_TABLE_BLUE_SIZE 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF - GL_IGNORE_BORDER 0x8150 - GL_CONSTANT_BORDER 0x8151 - GL_WRAP_BORDER 0x8152 - GL_REPLICATE_BORDER 0x8153 - GL_CONVOLUTION_BORDER_COLOR 0x8154 - void glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) - void glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) - void glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params) - void glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) - void glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glGetColorTable (GLenum target, GLenum format, GLenum type, GLvoid *table) - void glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params) - void glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) - void glResetHistogram (GLenum target) - void glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params) - void glMinmax (GLenum target, GLenum internalformat, GLboolean sink) - void glResetMinmax (GLenum target) - void glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params) - void glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params) - void glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params) - void glConvolutionParameteri (GLenum target, GLenum pname, GLint params) - void glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params) - void glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) - void glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, GLvoid *image) - void glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params) - void glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params) - void glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) - void glGetSeparableFilter (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) - void glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_indirect_parameters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_indirect_parameters deleted file mode 100644 index 1b189a028f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_indirect_parameters +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_indirect_parameters -http://www.opengl.org/registry/specs/gl/ARB/indirect_parameters.txt -GL_ARB_indirect_parameters - GL_PARAMETER_BUFFER_ARB 0x80EE - GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF - void glMultiDrawArraysIndirectCountARB (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) - void glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_instanced_arrays b/Engine/lib/glew/auto/extensions/gl/GL_ARB_instanced_arrays deleted file mode 100644 index b1c88734d1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_instanced_arrays +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_instanced_arrays -http://www.opengl.org/registry/specs/ARB/instanced_arrays.txt -GL_ARB_instanced_arrays - GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE - void glVertexAttribDivisorARB (GLuint index, GLuint divisor) - void glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query deleted file mode 100644 index fcaa9be1aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_internalformat_query -http://www.opengl.org/registry/specs/gl/ARB/internalformat_query.txt -GL_ARB_internalformat_query - GL_NUM_SAMPLE_COUNTS 0x9380 - void glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query2 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query2 deleted file mode 100644 index 1210966327..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_internalformat_query2 +++ /dev/null @@ -1,103 +0,0 @@ -GL_ARB_internalformat_query2 -http://www.opengl.org/registry/specs/ARB/internalformat_query2.txt -GL_ARB_internalformat_query2 - GL_INTERNALFORMAT_SUPPORTED 0x826F - GL_INTERNALFORMAT_PREFERRED 0x8270 - GL_INTERNALFORMAT_RED_SIZE 0x8271 - GL_INTERNALFORMAT_GREEN_SIZE 0x8272 - GL_INTERNALFORMAT_BLUE_SIZE 0x8273 - GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 - GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 - GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 - GL_INTERNALFORMAT_SHARED_SIZE 0x8277 - GL_INTERNALFORMAT_RED_TYPE 0x8278 - GL_INTERNALFORMAT_GREEN_TYPE 0x8279 - GL_INTERNALFORMAT_BLUE_TYPE 0x827A - GL_INTERNALFORMAT_ALPHA_TYPE 0x827B - GL_INTERNALFORMAT_DEPTH_TYPE 0x827C - GL_INTERNALFORMAT_STENCIL_TYPE 0x827D - GL_MAX_WIDTH 0x827E - GL_MAX_HEIGHT 0x827F - GL_MAX_DEPTH 0x8280 - GL_MAX_LAYERS 0x8281 - GL_MAX_COMBINED_DIMENSIONS 0x8282 - GL_COLOR_COMPONENTS 0x8283 - GL_DEPTH_COMPONENTS 0x8284 - GL_STENCIL_COMPONENTS 0x8285 - GL_COLOR_RENDERABLE 0x8286 - GL_DEPTH_RENDERABLE 0x8287 - GL_STENCIL_RENDERABLE 0x8288 - GL_FRAMEBUFFER_RENDERABLE 0x8289 - GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A - GL_FRAMEBUFFER_BLEND 0x828B - GL_READ_PIXELS 0x828C - GL_READ_PIXELS_FORMAT 0x828D - GL_READ_PIXELS_TYPE 0x828E - GL_TEXTURE_IMAGE_FORMAT 0x828F - GL_TEXTURE_IMAGE_TYPE 0x8290 - GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 - GL_GET_TEXTURE_IMAGE_TYPE 0x8292 - GL_MIPMAP 0x8293 - GL_MANUAL_GENERATE_MIPMAP 0x8294 - GL_AUTO_GENERATE_MIPMAP 0x8295 - GL_COLOR_ENCODING 0x8296 - GL_SRGB_READ 0x8297 - GL_SRGB_WRITE 0x8298 - GL_SRGB_DECODE_ARB 0x8299 - GL_FILTER 0x829A - GL_VERTEX_TEXTURE 0x829B - GL_TESS_CONTROL_TEXTURE 0x829C - GL_TESS_EVALUATION_TEXTURE 0x829D - GL_GEOMETRY_TEXTURE 0x829E - GL_FRAGMENT_TEXTURE 0x829F - GL_COMPUTE_TEXTURE 0x82A0 - GL_TEXTURE_SHADOW 0x82A1 - GL_TEXTURE_GATHER 0x82A2 - GL_TEXTURE_GATHER_SHADOW 0x82A3 - GL_SHADER_IMAGE_LOAD 0x82A4 - GL_SHADER_IMAGE_STORE 0x82A5 - GL_SHADER_IMAGE_ATOMIC 0x82A6 - GL_IMAGE_TEXEL_SIZE 0x82A7 - GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 - GL_IMAGE_PIXEL_FORMAT 0x82A9 - GL_IMAGE_PIXEL_TYPE 0x82AA - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD - GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE - GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF - GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 - GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 - GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 - GL_CLEAR_BUFFER 0x82B4 - GL_TEXTURE_VIEW 0x82B5 - GL_VIEW_COMPATIBILITY_CLASS 0x82B6 - GL_FULL_SUPPORT 0x82B7 - GL_CAVEAT_SUPPORT 0x82B8 - GL_IMAGE_CLASS_4_X_32 0x82B9 - GL_IMAGE_CLASS_2_X_32 0x82BA - GL_IMAGE_CLASS_1_X_32 0x82BB - GL_IMAGE_CLASS_4_X_16 0x82BC - GL_IMAGE_CLASS_2_X_16 0x82BD - GL_IMAGE_CLASS_1_X_16 0x82BE - GL_IMAGE_CLASS_4_X_8 0x82BF - GL_IMAGE_CLASS_2_X_8 0x82C0 - GL_IMAGE_CLASS_1_X_8 0x82C1 - GL_IMAGE_CLASS_11_11_10 0x82C2 - GL_IMAGE_CLASS_10_10_10_2 0x82C3 - GL_VIEW_CLASS_128_BITS 0x82C4 - GL_VIEW_CLASS_96_BITS 0x82C5 - GL_VIEW_CLASS_64_BITS 0x82C6 - GL_VIEW_CLASS_48_BITS 0x82C7 - GL_VIEW_CLASS_32_BITS 0x82C8 - GL_VIEW_CLASS_24_BITS 0x82C9 - GL_VIEW_CLASS_16_BITS 0x82CA - GL_VIEW_CLASS_8_BITS 0x82CB - GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC - GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD - GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE - GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF - GL_VIEW_CLASS_RGTC1_RED 0x82D0 - GL_VIEW_CLASS_RGTC2_RG 0x82D1 - GL_VIEW_CLASS_BPTC_UNORM 0x82D2 - GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 - void glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_invalidate_subdata b/Engine/lib/glew/auto/extensions/gl/GL_ARB_invalidate_subdata deleted file mode 100644 index 1313cb636f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_invalidate_subdata +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_invalidate_subdata -http://www.opengl.org/registry/specs/gl/ARB/invalidate_subdata.txt -GL_ARB_invalidate_subdata - void glInvalidateBufferData (GLuint buffer) - void glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length) - void glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments) - void glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) - void glInvalidateTexImage (GLuint texture, GLint level) - void glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_alignment b/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_alignment deleted file mode 100644 index cafeb012dd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_alignment +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_map_buffer_alignment -http://www.opengl.org/registry/specs/gl/ARB/map_buffer_alignment.txt -GL_ARB_map_buffer_alignment - GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_range b/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_range deleted file mode 100644 index f79a0feee8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_map_buffer_range +++ /dev/null @@ -1,11 +0,0 @@ -GL_ARB_map_buffer_range -http://www.opengl.org/registry/specs/gl/ARB/map_buffer_range.txt -GL_ARB_map_buffer_range - GL_MAP_READ_BIT 0x0001 - GL_MAP_WRITE_BIT 0x0002 - GL_MAP_INVALIDATE_RANGE_BIT 0x0004 - GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 - GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 - GL_MAP_UNSYNCHRONIZED_BIT 0x0020 - void glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length) - GLvoid * glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_matrix_palette b/Engine/lib/glew/auto/extensions/gl/GL_ARB_matrix_palette deleted file mode 100644 index 4b67c15cf4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_matrix_palette +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_matrix_palette -http://oss.sgi.com/projects/ogl-sample/registry/ARB/matrix_palette.txt -GL_ARB_matrix_palette - GL_MATRIX_PALETTE_ARB 0x8840 - GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 - GL_MAX_PALETTE_MATRICES_ARB 0x8842 - GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 - GL_MATRIX_INDEX_ARRAY_ARB 0x8844 - GL_CURRENT_MATRIX_INDEX_ARB 0x8845 - GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 - GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 - GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 - GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 - void glCurrentPaletteMatrixARB (GLint index) - void glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glMatrixIndexubvARB (GLint size, GLubyte *indices) - void glMatrixIndexusvARB (GLint size, GLushort *indices) - void glMatrixIndexuivARB (GLint size, GLuint *indices) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_bind b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_bind deleted file mode 100644 index 31d1d31482..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_bind +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_multi_bind -http://www.opengl.org/registry/specs/gl/ARB/multi_bind.txt -GL_ARB_multi_bind - void glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint* buffers) - void glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizeiptr *sizes) - void glBindImageTextures (GLuint first, GLsizei count, const GLuint* textures) - void glBindSamplers (GLuint first, GLsizei count, const GLuint* samplers) - void glBindTextures (GLuint first, GLsizei count, const GLuint* textures) - void glBindVertexBuffers (GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizei *strides) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_draw_indirect deleted file mode 100644 index 1c2d4dda60..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multi_draw_indirect +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_multi_draw_indirect -http://www.opengl.org/registry/specs/gl/ARB/multi_draw_indirect.txt -GL_ARB_multi_draw_indirect - void glMultiDrawArraysIndirect (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride) - void glMultiDrawElementsIndirect (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multisample deleted file mode 100644 index 10d35d0054..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multisample +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_multisample -http://www.opengl.org/registry/specs/gl/ARB/multisample.txt -GL_ARB_multisample - GL_MULTISAMPLE_ARB 0x809D - GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E - GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F - GL_SAMPLE_COVERAGE_ARB 0x80A0 - GL_SAMPLE_BUFFERS_ARB 0x80A8 - GL_SAMPLES_ARB 0x80A9 - GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA - GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB - GL_MULTISAMPLE_BIT_ARB 0x20000000 - void glSampleCoverageARB (GLclampf value, GLboolean invert) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multitexture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_multitexture deleted file mode 100644 index ee80791831..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_multitexture +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_multitexture -http://oss.sgi.com/projects/ogl-sample/registry/ARB/multitexture.txt -GL_ARB_multitexture - GL_TEXTURE0_ARB 0x84C0 - GL_TEXTURE1_ARB 0x84C1 - GL_TEXTURE2_ARB 0x84C2 - GL_TEXTURE3_ARB 0x84C3 - GL_TEXTURE4_ARB 0x84C4 - GL_TEXTURE5_ARB 0x84C5 - GL_TEXTURE6_ARB 0x84C6 - GL_TEXTURE7_ARB 0x84C7 - GL_TEXTURE8_ARB 0x84C8 - GL_TEXTURE9_ARB 0x84C9 - GL_TEXTURE10_ARB 0x84CA - GL_TEXTURE11_ARB 0x84CB - GL_TEXTURE12_ARB 0x84CC - GL_TEXTURE13_ARB 0x84CD - GL_TEXTURE14_ARB 0x84CE - GL_TEXTURE15_ARB 0x84CF - GL_TEXTURE16_ARB 0x84D0 - GL_TEXTURE17_ARB 0x84D1 - GL_TEXTURE18_ARB 0x84D2 - GL_TEXTURE19_ARB 0x84D3 - GL_TEXTURE20_ARB 0x84D4 - GL_TEXTURE21_ARB 0x84D5 - GL_TEXTURE22_ARB 0x84D6 - GL_TEXTURE23_ARB 0x84D7 - GL_TEXTURE24_ARB 0x84D8 - GL_TEXTURE25_ARB 0x84D9 - GL_TEXTURE26_ARB 0x84DA - GL_TEXTURE27_ARB 0x84DB - GL_TEXTURE28_ARB 0x84DC - GL_TEXTURE29_ARB 0x84DD - GL_TEXTURE30_ARB 0x84DE - GL_TEXTURE31_ARB 0x84DF - GL_ACTIVE_TEXTURE_ARB 0x84E0 - GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 - GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - void glActiveTextureARB (GLenum texture) - void glClientActiveTextureARB (GLenum texture) - void glMultiTexCoord1dARB (GLenum target, GLdouble s) - void glMultiTexCoord1dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord1fARB (GLenum target, GLfloat s) - void glMultiTexCoord1fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord1iARB (GLenum target, GLint s) - void glMultiTexCoord1ivARB (GLenum target, const GLint *v) - void glMultiTexCoord1sARB (GLenum target, GLshort s) - void glMultiTexCoord1svARB (GLenum target, const GLshort *v) - void glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t) - void glMultiTexCoord2dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t) - void glMultiTexCoord2fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord2iARB (GLenum target, GLint s, GLint t) - void glMultiTexCoord2ivARB (GLenum target, const GLint *v) - void glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t) - void glMultiTexCoord2svARB (GLenum target, const GLshort *v) - void glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r) - void glMultiTexCoord3dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r) - void glMultiTexCoord3fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r) - void glMultiTexCoord3ivARB (GLenum target, const GLint *v) - void glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r) - void glMultiTexCoord3svARB (GLenum target, const GLshort *v) - void glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q) - void glMultiTexCoord4dvARB (GLenum target, const GLdouble *v) - void glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q) - void glMultiTexCoord4fvARB (GLenum target, const GLfloat *v) - void glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q) - void glMultiTexCoord4ivARB (GLenum target, const GLint *v) - void glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q) - void glMultiTexCoord4svARB (GLenum target, const GLshort *v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query deleted file mode 100644 index efc2bdadde..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_occlusion_query -http://www.opengl.org/registry/specs/gl/ARB/occlusion_query.txt -GL_ARB_occlusion_query - GL_QUERY_COUNTER_BITS_ARB 0x8864 - GL_CURRENT_QUERY_ARB 0x8865 - GL_QUERY_RESULT_ARB 0x8866 - GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 - GL_SAMPLES_PASSED_ARB 0x8914 - void glBeginQueryARB (GLenum target, GLuint id) - void glDeleteQueriesARB (GLsizei n, const GLuint* ids) - void glEndQueryARB (GLenum target) - void glGenQueriesARB (GLsizei n, GLuint* ids) - void glGetQueryObjectivARB (GLuint id, GLenum pname, GLint* params) - void glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint* params) - void glGetQueryivARB (GLenum target, GLenum pname, GLint* params) - GLboolean glIsQueryARB (GLuint id) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query2 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query2 deleted file mode 100644 index 3134ed969b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_occlusion_query2 +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_occlusion_query2 -http://www.opengl.org/registry/specs/gl/ARB/occlusion_query2.txt -GL_ARB_occlusion_query2 - GL_ANY_SAMPLES_PASSED 0x8C2F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_pixel_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_pixel_buffer_object deleted file mode 100644 index 33c00a86b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_pixel_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_pixel_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/pixel_buffer_object.txt -GL_ARB_pixel_buffer_object - GL_PIXEL_PACK_BUFFER_ARB 0x88EB - GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_parameters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_parameters deleted file mode 100644 index b982043f58..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_parameters +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_point_parameters -http://www.opengl.org/registry/specs/gl/ARB/point_parameters.txt -GL_ARB_point_parameters - GL_POINT_SIZE_MIN_ARB 0x8126 - GL_POINT_SIZE_MAX_ARB 0x8127 - GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 - GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 - void glPointParameterfARB (GLenum pname, GLfloat param) - void glPointParameterfvARB (GLenum pname, const GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_sprite b/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_sprite deleted file mode 100644 index 414138e482..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_point_sprite +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_point_sprite -http://www.opengl.org/registry/specs/gl/ARB/point_sprite.txt -GL_ARB_point_sprite - GL_POINT_SPRITE_ARB 0x8861 - GL_COORD_REPLACE_ARB 0x8862 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_program_interface_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_program_interface_query deleted file mode 100644 index 096f086c76..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_program_interface_query +++ /dev/null @@ -1,56 +0,0 @@ -GL_ARB_program_interface_query -http://www.opengl.org/registry/specs/gl/ARB/program_interface_query.txt -GL_ARB_program_interface_query - GL_UNIFORM 0x92E1 - GL_UNIFORM_BLOCK 0x92E2 - GL_PROGRAM_INPUT 0x92E3 - GL_PROGRAM_OUTPUT 0x92E4 - GL_BUFFER_VARIABLE 0x92E5 - GL_SHADER_STORAGE_BLOCK 0x92E6 - GL_IS_PER_PATCH 0x92E7 - GL_VERTEX_SUBROUTINE 0x92E8 - GL_TESS_CONTROL_SUBROUTINE 0x92E9 - GL_TESS_EVALUATION_SUBROUTINE 0x92EA - GL_GEOMETRY_SUBROUTINE 0x92EB - GL_FRAGMENT_SUBROUTINE 0x92EC - GL_COMPUTE_SUBROUTINE 0x92ED - GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE - GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF - GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 - GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 - GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 - GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 - GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 - GL_ACTIVE_RESOURCES 0x92F5 - GL_MAX_NAME_LENGTH 0x92F6 - GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 - GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 - GL_NAME_LENGTH 0x92F9 - GL_TYPE 0x92FA - GL_ARRAY_SIZE 0x92FB - GL_OFFSET 0x92FC - GL_BLOCK_INDEX 0x92FD - GL_ARRAY_STRIDE 0x92FE - GL_MATRIX_STRIDE 0x92FF - GL_IS_ROW_MAJOR 0x9300 - GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 - GL_BUFFER_BINDING 0x9302 - GL_BUFFER_DATA_SIZE 0x9303 - GL_NUM_ACTIVE_VARIABLES 0x9304 - GL_ACTIVE_VARIABLES 0x9305 - GL_REFERENCED_BY_VERTEX_SHADER 0x9306 - GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 - GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 - GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 - GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A - GL_REFERENCED_BY_COMPUTE_SHADER 0x930B - GL_TOP_LEVEL_ARRAY_SIZE 0x930C - GL_TOP_LEVEL_ARRAY_STRIDE 0x930D - GL_LOCATION 0x930E - GL_LOCATION_INDEX 0x930F - void glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint* params) - GLuint glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar* name) - GLint glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar* name) - GLint glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar* name) - void glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar *name) - void glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_provoking_vertex b/Engine/lib/glew/auto/extensions/gl/GL_ARB_provoking_vertex deleted file mode 100644 index 61609112ee..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_provoking_vertex +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_provoking_vertex -http://www.opengl.org/registry/specs/gl/ARB/provoking_vertex.txt -GL_ARB_provoking_vertex - GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C - GL_FIRST_VERTEX_CONVENTION 0x8E4D - GL_LAST_VERTEX_CONVENTION 0x8E4E - GL_PROVOKING_VERTEX 0x8E4F - void glProvokingVertex (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_query_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_query_buffer_object deleted file mode 100644 index 3de28a5a9b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_query_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_query_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/query_buffer_object.txt -GL_ARB_query_buffer_object - GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 - GL_QUERY_BUFFER 0x9192 - GL_QUERY_BUFFER_BINDING 0x9193 - GL_QUERY_RESULT_NO_WAIT 0x9194 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robust_buffer_access_behavior b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robust_buffer_access_behavior deleted file mode 100644 index b973c08323..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robust_buffer_access_behavior +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_robust_buffer_access_behavior -http://www.opengl.org/registry/specs/gl/ARB/robust_buffer_access_behavior.txt -GL_ARB_robust_buffer_access_behavior diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness deleted file mode 100644 index cdeeb4ff94..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness +++ /dev/null @@ -1,30 +0,0 @@ -GL_ARB_robustness -http://www.opengl.org/registry/specs/ARB/robustness.txt -GL_ARB_robustness - GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 - GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - GL_GUILTY_CONTEXT_RESET_ARB 0x8253 - GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 - GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 - GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - GL_NO_RESET_NOTIFICATION_ARB 0x8261 - GLenum glGetGraphicsResetStatusARB (void) - void glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table) - void glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void* img) - void glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image) - void glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v) - void glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v) - void glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint* v) - void glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values) - void glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat* values) - void glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint* values) - void glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort* values) - void glGetnPolygonStippleARB (GLsizei bufSize, GLubyte* pattern) - void glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, GLvoid*column, GLvoid*span) - void glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img) - void glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble* params) - void glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat* params) - void glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint* params) - void glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint* params) - void glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_application_isolation b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_application_isolation deleted file mode 100644 index 229707e4ae..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_application_isolation +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_robustness_application_isolation -http://www.opengl.org/registry/specs/gl/ARB/robustness_isolation.txt -GL_ARB_robustness_application_isolation diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_share_group_isolation b/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_share_group_isolation deleted file mode 100644 index 39be33c888..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_robustness_share_group_isolation +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_robustness_share_group_isolation -http://www.opengl.org/registry/specs/gl/ARB/robustness_isolation.txt -GL_ARB_robustness_share_group_isolation diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sample_shading b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sample_shading deleted file mode 100644 index 8761659aae..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sample_shading +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_sample_shading -http://www.opengl.org/registry/specs/gl/ARB/sample_shading.txt -GL_ARB_sample_shading - GL_SAMPLE_SHADING_ARB 0x8C36 - GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 - void glMinSampleShadingARB (GLclampf value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sampler_objects b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sampler_objects deleted file mode 100644 index 8847cc9a64..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sampler_objects +++ /dev/null @@ -1,18 +0,0 @@ -GL_ARB_sampler_objects -http://www.opengl.org/registry/specs/gl/ARB/sampler_objects.txt -GL_ARB_sampler_objects - GL_SAMPLER_BINDING 0x8919 - void glBindSampler (GLuint unit, GLuint sampler) - void glDeleteSamplers (GLsizei count, const GLuint * samplers) - void glGenSamplers (GLsizei count, GLuint* samplers) - void glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint* params) - void glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint* params) - void glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat* params) - void glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint* params) - GLboolean glIsSampler (GLuint sampler) - void glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint* params) - void glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint* params) - void glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param) - void glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat* params) - void glSamplerParameteri (GLuint sampler, GLenum pname, GLint param) - void glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cube_map b/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cube_map deleted file mode 100644 index 6c129c68b8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cube_map +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_seamless_cube_map -http://www.opengl.org/registry/specs/gl/ARB/seamless_cube_map.txt -GL_ARB_seamless_cube_map - GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cubemap_per_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cubemap_per_texture deleted file mode 100644 index 54e1975b56..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_seamless_cubemap_per_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_seamless_cubemap_per_texture -http://www.opengl.org/registry/specs/gl/ARB/seamless_cubemap_per_texture.txt -GL_ARB_seamless_cubemap_per_texture - GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_separate_shader_objects b/Engine/lib/glew/auto/extensions/gl/GL_ARB_separate_shader_objects deleted file mode 100644 index b90b68ab4e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_separate_shader_objects +++ /dev/null @@ -1,72 +0,0 @@ -GL_ARB_separate_shader_objects -http://www.opengl.org/registry/specs/ARB/separate_shader_objects.txt -GL_ARB_separate_shader_objects - GL_VERTEX_SHADER_BIT 0x00000001 - GL_FRAGMENT_SHADER_BIT 0x00000002 - GL_GEOMETRY_SHADER_BIT 0x00000004 - GL_TESS_CONTROL_SHADER_BIT 0x00000008 - GL_TESS_EVALUATION_SHADER_BIT 0x00000010 - GL_PROGRAM_SEPARABLE 0x8258 - GL_ACTIVE_PROGRAM 0x8259 - GL_PROGRAM_PIPELINE_BINDING 0x825A - GL_ALL_SHADER_BITS 0xFFFFFFFF - void glActiveShaderProgram (GLuint pipeline, GLuint program) - void glBindProgramPipeline (GLuint pipeline) - GLuint glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar ** strings) - void glDeleteProgramPipelines (GLsizei n, const GLuint* pipelines) - void glGenProgramPipelines (GLsizei n, GLuint* pipelines) - void glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar *infoLog) - void glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint* params) - GLboolean glIsProgramPipeline (GLuint pipeline) - void glProgramUniform1d (GLuint program, GLint location, GLdouble x) - void glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform1f (GLuint program, GLint location, GLfloat x) - void glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform1i (GLuint program, GLint location, GLint x) - void glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform1ui (GLuint program, GLint location, GLuint x) - void glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform2d (GLuint program, GLint location, GLdouble x, GLdouble y) - void glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform2f (GLuint program, GLint location, GLfloat x, GLfloat y) - void glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform2i (GLuint program, GLint location, GLint x, GLint y) - void glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform2ui (GLuint program, GLint location, GLuint x, GLuint y) - void glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform3d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z) - void glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform3f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z) - void glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform3i (GLuint program, GLint location, GLint x, GLint y, GLint z) - void glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform3ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z) - void glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform4d (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble* value) - void glProgramUniform4f (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform4i (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w) - void glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform4ui (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value) - void glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program) - void glValidateProgramPipeline (GLuint pipeline) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_atomic_counters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_atomic_counters deleted file mode 100644 index 5cf5311bf1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_atomic_counters +++ /dev/null @@ -1,33 +0,0 @@ -GL_ARB_shader_atomic_counters -http://www.opengl.org/registry/specs/gl/ARB/shader_atomic_counters.txt -GL_ARB_shader_atomic_counters - GL_ATOMIC_COUNTER_BUFFER 0x92C0 - GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 - GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 - GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 - GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 - GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 - GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA - GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB - GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC - GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD - GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE - GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF - GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 - GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 - GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 - GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 - GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 - GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 - GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 - GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 - GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 - GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 - GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA - GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB - GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC - void glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_bit_encoding b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_bit_encoding deleted file mode 100644 index ccf032ca64..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_bit_encoding +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_bit_encoding -http://www.opengl.org/registry/specs/gl/ARB/shader_bit_encoding.txt -GL_ARB_shader_bit_encoding diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_draw_parameters b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_draw_parameters deleted file mode 100644 index 478c4a2042..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_draw_parameters +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_draw_parameters -http://www.opengl.org/registry/specs/gl/ARB/shader_draw_parameters.txt -GL_ARB_shader_draw_parameters diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_group_vote b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_group_vote deleted file mode 100644 index 10251109d6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_group_vote +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_group_vote -http://www.opengl.org/registry/specs/gl/ARB/shader_group_vote.txt -GL_ARB_shader_group_vote diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_load_store b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_load_store deleted file mode 100644 index efcb45bb45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_load_store +++ /dev/null @@ -1,69 +0,0 @@ -GL_ARB_shader_image_load_store -http://www.opengl.org/registry/specs/gl/ARB/shader_image_load_store.txt -GL_ARB_shader_image_load_store - GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 - GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 - GL_UNIFORM_BARRIER_BIT 0x00000004 - GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 - GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 - GL_COMMAND_BARRIER_BIT 0x00000040 - GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 - GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 - GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 - GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 - GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 - GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 - GL_MAX_IMAGE_UNITS 0x8F38 - GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 - GL_IMAGE_BINDING_NAME 0x8F3A - GL_IMAGE_BINDING_LEVEL 0x8F3B - GL_IMAGE_BINDING_LAYERED 0x8F3C - GL_IMAGE_BINDING_LAYER 0x8F3D - GL_IMAGE_BINDING_ACCESS 0x8F3E - GL_IMAGE_1D 0x904C - GL_IMAGE_2D 0x904D - GL_IMAGE_3D 0x904E - GL_IMAGE_2D_RECT 0x904F - GL_IMAGE_CUBE 0x9050 - GL_IMAGE_BUFFER 0x9051 - GL_IMAGE_1D_ARRAY 0x9052 - GL_IMAGE_2D_ARRAY 0x9053 - GL_IMAGE_CUBE_MAP_ARRAY 0x9054 - GL_IMAGE_2D_MULTISAMPLE 0x9055 - GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 - GL_INT_IMAGE_1D 0x9057 - GL_INT_IMAGE_2D 0x9058 - GL_INT_IMAGE_3D 0x9059 - GL_INT_IMAGE_2D_RECT 0x905A - GL_INT_IMAGE_CUBE 0x905B - GL_INT_IMAGE_BUFFER 0x905C - GL_INT_IMAGE_1D_ARRAY 0x905D - GL_INT_IMAGE_2D_ARRAY 0x905E - GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F - GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 - GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 - GL_UNSIGNED_INT_IMAGE_1D 0x9062 - GL_UNSIGNED_INT_IMAGE_2D 0x9063 - GL_UNSIGNED_INT_IMAGE_3D 0x9064 - GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 - GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 - GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 - GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 - GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 - GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C - GL_MAX_IMAGE_SAMPLES 0x906D - GL_IMAGE_BINDING_FORMAT 0x906E - GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 - GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 - GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 - GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA - GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB - GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC - GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD - GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE - GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF - GL_ALL_BARRIER_BITS 0xFFFFFFFF - void glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format) - void glMemoryBarrier (GLbitfield barriers) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_size b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_size deleted file mode 100644 index 456213e3dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_image_size +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_image_size -http://www.opengl.org/registry/specs/gl/ARB/shader_image_size.txt -GL_ARB_shader_image_size diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_objects b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_objects deleted file mode 100644 index ca12d114fb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_objects +++ /dev/null @@ -1,78 +0,0 @@ -GL_ARB_shader_objects -http://www.opengl.org/registry/specs/gl/ARB/shader_objects.txt -GL_ARB_shader_objects - GL_PROGRAM_OBJECT_ARB 0x8B40 - GL_SHADER_OBJECT_ARB 0x8B48 - GL_OBJECT_TYPE_ARB 0x8B4E - GL_OBJECT_SUBTYPE_ARB 0x8B4F - GL_FLOAT_VEC2_ARB 0x8B50 - GL_FLOAT_VEC3_ARB 0x8B51 - GL_FLOAT_VEC4_ARB 0x8B52 - GL_INT_VEC2_ARB 0x8B53 - GL_INT_VEC3_ARB 0x8B54 - GL_INT_VEC4_ARB 0x8B55 - GL_BOOL_ARB 0x8B56 - GL_BOOL_VEC2_ARB 0x8B57 - GL_BOOL_VEC3_ARB 0x8B58 - GL_BOOL_VEC4_ARB 0x8B59 - GL_FLOAT_MAT2_ARB 0x8B5A - GL_FLOAT_MAT3_ARB 0x8B5B - GL_FLOAT_MAT4_ARB 0x8B5C - GL_SAMPLER_1D_ARB 0x8B5D - GL_SAMPLER_2D_ARB 0x8B5E - GL_SAMPLER_3D_ARB 0x8B5F - GL_SAMPLER_CUBE_ARB 0x8B60 - GL_SAMPLER_1D_SHADOW_ARB 0x8B61 - GL_SAMPLER_2D_SHADOW_ARB 0x8B62 - GL_SAMPLER_2D_RECT_ARB 0x8B63 - GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 - GL_OBJECT_DELETE_STATUS_ARB 0x8B80 - GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 - GL_OBJECT_LINK_STATUS_ARB 0x8B82 - GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 - GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 - GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 - GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 - GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 - GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 - void glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj) - void glCompileShaderARB (GLhandleARB shaderObj) - GLhandleARB glCreateProgramObjectARB (void) - GLhandleARB glCreateShaderObjectARB (GLenum shaderType) - void glDeleteObjectARB (GLhandleARB obj) - void glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj) - void glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name) - void glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj) - GLhandleARB glGetHandleARB (GLenum pname) - void glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog) - void glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat* params) - void glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint* params) - void glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source) - GLint glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB* name) - void glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat* params) - void glGetUniformivARB (GLhandleARB programObj, GLint location, GLint* params) - void glLinkProgramARB (GLhandleARB programObj) - void glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length) - void glUniform1fARB (GLint location, GLfloat v0) - void glUniform1fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform1iARB (GLint location, GLint v0) - void glUniform1ivARB (GLint location, GLsizei count, const GLint* value) - void glUniform2fARB (GLint location, GLfloat v0, GLfloat v1) - void glUniform2fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform2iARB (GLint location, GLint v0, GLint v1) - void glUniform2ivARB (GLint location, GLsizei count, const GLint* value) - void glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2) - void glUniform3fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2) - void glUniform3ivARB (GLint location, GLsizei count, const GLint* value) - void glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) - void glUniform4fvARB (GLint location, GLsizei count, const GLfloat* value) - void glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3) - void glUniform4ivARB (GLint location, GLsizei count, const GLint* value) - void glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glUseProgramObjectARB (GLhandleARB programObj) - void glValidateProgramARB (GLhandleARB programObj) - typedef char GLcharARB - typedef unsigned int GLhandleARB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_precision b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_precision deleted file mode 100644 index 72e6a88828..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_precision +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_precision -http://www.opengl.org/registry/specs/gl/ARB/shader_precision.txt -GL_ARB_shader_precision diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_stencil_export b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_stencil_export deleted file mode 100644 index 609d6180a9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_stencil_export +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_stencil_export -http://www.opengl.org/registry/specs/gl/ARB/shader_stencil_export.txt -GL_ARB_shader_stencil_export diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_storage_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_storage_buffer_object deleted file mode 100644 index 062774e142..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_storage_buffer_object +++ /dev/null @@ -1,20 +0,0 @@ -GL_ARB_shader_storage_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/shader_storage_buffer_object.txt -GL_ARB_shader_storage_buffer_object - GL_SHADER_STORAGE_BARRIER_BIT 0x2000 - GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 - GL_SHADER_STORAGE_BUFFER 0x90D2 - GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 - GL_SHADER_STORAGE_BUFFER_START 0x90D4 - GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 - GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 - GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 - GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 - GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 - GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA - GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB - GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC - GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD - GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE - GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF - void glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_subroutine b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_subroutine deleted file mode 100644 index 322d74ceac..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_subroutine +++ /dev/null @@ -1,20 +0,0 @@ -GL_ARB_shader_subroutine -http://www.opengl.org/registry/specs/gl/ARB/shader_subroutine.txt -GL_ARB_shader_subroutine - GL_ACTIVE_SUBROUTINES 0x8DE5 - GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 - GL_MAX_SUBROUTINES 0x8DE7 - GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 - GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 - GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 - GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 - GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A - GL_COMPATIBLE_SUBROUTINES 0x8E4B - void glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name) - void glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name) - void glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values) - void glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint* values) - GLuint glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar* name) - GLint glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar* name) - void glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint* params) - void glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint* indices) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_texture_lod b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_texture_lod deleted file mode 100644 index cf56fef4ca..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shader_texture_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shader_texture_lod -http://www.opengl.org/registry/specs/gl/ARB/shader_texture_lod.txt -GL_ARB_shader_texture_lod diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_100 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_100 deleted file mode 100644 index 46c30defbf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_100 +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_shading_language_100 -http://www.opengl.org/registry/specs/gl/ARB/shading_language_100.txt -GL_ARB_shading_language_100 - GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_420pack b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_420pack deleted file mode 100644 index f4eeba49b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_420pack +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shading_language_420pack -http://www.opengl.org/registry/specs/gl/ARB/shading_language_420pack.txt -GL_ARB_shading_language_420pack diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_include b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_include deleted file mode 100644 index 2cb1127213..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_include +++ /dev/null @@ -1,12 +0,0 @@ -GL_ARB_shading_language_include -http://www.opengl.org/registry/specs/gl/ARB/shading_language_include.txt -GL_ARB_shading_language_include - GL_SHADER_INCLUDE_ARB 0x8DAE - GL_NAMED_STRING_LENGTH_ARB 0x8DE9 - GL_NAMED_STRING_TYPE_ARB 0x8DEA - void glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar* const *path, const GLint *length) - void glDeleteNamedStringARB (GLint namelen, const GLchar* name) - void glGetNamedStringARB (GLint namelen, const GLchar* name, GLsizei bufSize, GLint *stringlen, GLchar *string) - void glGetNamedStringivARB (GLint namelen, const GLchar* name, GLenum pname, GLint *params) - GLboolean glIsNamedStringARB (GLint namelen, const GLchar* name) - void glNamedStringARB (GLenum type, GLint namelen, const GLchar* name, GLint stringlen, const GLchar *string) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_packing b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_packing deleted file mode 100644 index 4d83cf0577..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shading_language_packing +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_shading_language_packing -http://www.opengl.org/registry/specs/gl/ARB/shading_language_packing.txt -GL_ARB_shading_language_packing diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow deleted file mode 100644 index 12fb91ca7a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_shadow -http://www.opengl.org/registry/specs/gl/ARB/shadow.txt -GL_ARB_shadow - GL_TEXTURE_COMPARE_MODE_ARB 0x884C - GL_TEXTURE_COMPARE_FUNC_ARB 0x884D - GL_COMPARE_R_TO_TEXTURE_ARB 0x884E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow_ambient b/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow_ambient deleted file mode 100644 index 03f0095be0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_shadow_ambient +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_shadow_ambient -http://www.opengl.org/registry/specs/gl/ARB/shadow_ambient.txt -GL_ARB_shadow_ambient - GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sparse_texture b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sparse_texture deleted file mode 100644 index 69985673d0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sparse_texture +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_sparse_texture -http://www.opengl.org/registry/specs/gl/ARB/sparse_texture.txt -GL_ARB_sparse_texture - GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 - GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 - GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 - GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 - GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 - GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A - GL_TEXTURE_SPARSE_ARB 0x91A6 - GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 - GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 - GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 - GL_NUM_SPARSE_LEVELS_ARB 0x91AA - void glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit) - void glTexturePageCommitmentEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_stencil_texturing b/Engine/lib/glew/auto/extensions/gl/GL_ARB_stencil_texturing deleted file mode 100644 index f486c2e98d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_stencil_texturing +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_stencil_texturing -http://www.opengl.org/registry/specs/gl/ARB/stencil_texturing.txt -GL_ARB_stencil_texturing - GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sync b/Engine/lib/glew/auto/extensions/gl/GL_ARB_sync deleted file mode 100644 index d0421d9de9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_sync +++ /dev/null @@ -1,25 +0,0 @@ -GL_ARB_sync -http://www.opengl.org/registry/specs/gl/ARB/sync.txt -GL_ARB_sync - GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 - GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 - GL_OBJECT_TYPE 0x9112 - GL_SYNC_CONDITION 0x9113 - GL_SYNC_STATUS 0x9114 - GL_SYNC_FLAGS 0x9115 - GL_SYNC_FENCE 0x9116 - GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 - GL_UNSIGNALED 0x9118 - GL_SIGNALED 0x9119 - GL_ALREADY_SIGNALED 0x911A - GL_TIMEOUT_EXPIRED 0x911B - GL_CONDITION_SATISFIED 0x911C - GL_WAIT_FAILED 0x911D - GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF - GLenum glClientWaitSync (GLsync GLsync,GLbitfield flags,GLuint64 timeout) - void glDeleteSync (GLsync GLsync) - GLsync glFenceSync (GLenum condition,GLbitfield flags) - void glGetInteger64v (GLenum pname, GLint64* params) - void glGetSynciv (GLsync GLsync,GLenum pname,GLsizei bufSize,GLsizei* length, GLint *values) - GLboolean glIsSync (GLsync GLsync) - void glWaitSync (GLsync GLsync,GLbitfield flags,GLuint64 timeout) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_tessellation_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_tessellation_shader deleted file mode 100644 index 97fbfec457..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_tessellation_shader +++ /dev/null @@ -1,37 +0,0 @@ -GL_ARB_tessellation_shader -http://www.opengl.org/registry/specs/gl/ARB/tessellation_shader.txt -GL_ARB_tessellation_shader - GL_PATCHES 0xE - GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 - GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 - GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C - GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D - GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E - GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F - GL_PATCH_VERTICES 0x8E72 - GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 - GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 - GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 - GL_TESS_GEN_MODE 0x8E76 - GL_TESS_GEN_SPACING 0x8E77 - GL_TESS_GEN_VERTEX_ORDER 0x8E78 - GL_TESS_GEN_POINT_MODE 0x8E79 - GL_ISOLINES 0x8E7A - GL_FRACTIONAL_ODD 0x8E7B - GL_FRACTIONAL_EVEN 0x8E7C - GL_MAX_PATCH_VERTICES 0x8E7D - GL_MAX_TESS_GEN_LEVEL 0x8E7E - GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F - GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 - GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 - GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 - GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 - GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 - GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 - GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 - GL_TESS_EVALUATION_SHADER 0x8E87 - GL_TESS_CONTROL_SHADER 0x8E88 - GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 - GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A - void glPatchParameterfv (GLenum pname, const GLfloat* values) - void glPatchParameteri (GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_border_clamp b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_border_clamp deleted file mode 100644 index f9916e0771..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_border_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_border_clamp -http://www.opengl.org/registry/specs/gl/ARB/texture_border_clamp.txt -GL_ARB_texture_border_clamp - GL_CLAMP_TO_BORDER_ARB 0x812D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object deleted file mode 100644 index 8209839a42..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_texture_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/texture_buffer_object.txt -GL_ARB_texture_buffer_object - GL_TEXTURE_BUFFER_ARB 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B - GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D - GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E - void glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object_rgb32 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object_rgb32 deleted file mode 100644 index 49a60e008a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_object_rgb32 +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_buffer_object_rgb32 -http://www.opengl.org/registry/specs/gl/ARB/texture_buffer_object_rgb32.txt -GL_ARB_texture_buffer_object_rgb32 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_range b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_range deleted file mode 100644 index 6dd8d29a1c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_buffer_range +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_texture_buffer_range -http://www.opengl.org/registry/specs/gl/ARB/texture_buffer_range.txt -GL_ARB_texture_buffer_range - GL_TEXTURE_BUFFER_OFFSET 0x919D - GL_TEXTURE_BUFFER_SIZE 0x919E - GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F - void glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression deleted file mode 100644 index 7419fa8bec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression +++ /dev/null @@ -1,21 +0,0 @@ -GL_ARB_texture_compression -http://www.opengl.org/registry/specs/gl/ARB/texture_compression.txt -GL_ARB_texture_compression - GL_COMPRESSED_ALPHA_ARB 0x84E9 - GL_COMPRESSED_LUMINANCE_ARB 0x84EA - GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB - GL_COMPRESSED_INTENSITY_ARB 0x84EC - GL_COMPRESSED_RGB_ARB 0x84ED - GL_COMPRESSED_RGBA_ARB 0x84EE - GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF - GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 - GL_TEXTURE_COMPRESSED_ARB 0x86A1 - GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 - GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 - void glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glGetCompressedTexImageARB (GLenum target, GLint lod, GLvoid *img) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_bptc b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_bptc deleted file mode 100644 index 3461d963fc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_bptc +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_texture_compression_bptc -http://www.opengl.org/registry/specs/gl/ARB/texture_compression_bptc.txt -GL_ARB_texture_compression_bptc - GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C - GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D - GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E - GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_rgtc b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_rgtc deleted file mode 100644 index 7bbc9eca0b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_compression_rgtc +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_texture_compression_rgtc -http://www.opengl.org/registry/specs/gl/ARB/texture_compression_rgtc.txt -GL_ARB_texture_compression_rgtc - GL_COMPRESSED_RED_RGTC1 0x8DBB - GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC - GL_COMPRESSED_RG_RGTC2 0x8DBD - GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map deleted file mode 100644 index e91076bbc7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map +++ /dev/null @@ -1,15 +0,0 @@ -GL_ARB_texture_cube_map -http://www.opengl.org/registry/specs/gl/ARB/texture_cube_map.txt -GL_ARB_texture_cube_map - GL_NORMAL_MAP_ARB 0x8511 - GL_REFLECTION_MAP_ARB 0x8512 - GL_TEXTURE_CUBE_MAP_ARB 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A - GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map_array b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map_array deleted file mode 100644 index 40c679a63c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_cube_map_array +++ /dev/null @@ -1,10 +0,0 @@ -GL_ARB_texture_cube_map_array -http://www.opengl.org/registry/specs/gl/ARB/texture_cube_map_array.txt -GL_ARB_texture_cube_map_array - GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 - GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A - GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B - GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C - GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D - GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E - GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_add b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_add deleted file mode 100644 index c937c02d90..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_add +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_env_add -http://www.opengl.org/registry/specs/gl/ARB/texture_env_add.txt -GL_ARB_texture_env_add diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_combine b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_combine deleted file mode 100644 index f7bc6410f8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_combine +++ /dev/null @@ -1,25 +0,0 @@ -GL_ARB_texture_env_combine -http://www.opengl.org/registry/specs/gl/ARB/texture_env_combine.txt -GL_ARB_texture_env_combine - GL_SUBTRACT_ARB 0x84E7 - GL_COMBINE_ARB 0x8570 - GL_COMBINE_RGB_ARB 0x8571 - GL_COMBINE_ALPHA_ARB 0x8572 - GL_RGB_SCALE_ARB 0x8573 - GL_ADD_SIGNED_ARB 0x8574 - GL_INTERPOLATE_ARB 0x8575 - GL_CONSTANT_ARB 0x8576 - GL_PRIMARY_COLOR_ARB 0x8577 - GL_PREVIOUS_ARB 0x8578 - GL_SOURCE0_RGB_ARB 0x8580 - GL_SOURCE1_RGB_ARB 0x8581 - GL_SOURCE2_RGB_ARB 0x8582 - GL_SOURCE0_ALPHA_ARB 0x8588 - GL_SOURCE1_ALPHA_ARB 0x8589 - GL_SOURCE2_ALPHA_ARB 0x858A - GL_OPERAND0_RGB_ARB 0x8590 - GL_OPERAND1_RGB_ARB 0x8591 - GL_OPERAND2_RGB_ARB 0x8592 - GL_OPERAND0_ALPHA_ARB 0x8598 - GL_OPERAND1_ALPHA_ARB 0x8599 - GL_OPERAND2_ALPHA_ARB 0x859A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_crossbar b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_crossbar deleted file mode 100644 index d0b74c0ef8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_crossbar +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_env_crossbar -http://www.opengl.org/registry/specs/gl/ARB/texture_env_crossbar.txt -GL_ARB_texture_env_crossbar diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_dot3 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_dot3 deleted file mode 100644 index 488911b9c0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_env_dot3 +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_texture_env_dot3 -http://www.opengl.org/registry/specs/gl/ARB/texture_env_dot3.txt -GL_ARB_texture_env_dot3 - GL_DOT3_RGB_ARB 0x86AE - GL_DOT3_RGBA_ARB 0x86AF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_float b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_float deleted file mode 100644 index a48a387034..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_float +++ /dev/null @@ -1,23 +0,0 @@ -GL_ARB_texture_float -http://www.opengl.org/registry/specs/gl/ARB/texture_float.txt -GL_ARB_texture_float - GL_RGBA32F_ARB 0x8814 - GL_RGB32F_ARB 0x8815 - GL_ALPHA32F_ARB 0x8816 - GL_INTENSITY32F_ARB 0x8817 - GL_LUMINANCE32F_ARB 0x8818 - GL_LUMINANCE_ALPHA32F_ARB 0x8819 - GL_RGBA16F_ARB 0x881A - GL_RGB16F_ARB 0x881B - GL_ALPHA16F_ARB 0x881C - GL_INTENSITY16F_ARB 0x881D - GL_LUMINANCE16F_ARB 0x881E - GL_LUMINANCE_ALPHA16F_ARB 0x881F - GL_TEXTURE_RED_TYPE_ARB 0x8C10 - GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 - GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 - GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 - GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 - GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 - GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 - GL_UNSIGNED_NORMALIZED_ARB 0x8C17 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_gather b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_gather deleted file mode 100644 index e1af3a0cbd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_gather +++ /dev/null @@ -1,6 +0,0 @@ -GL_ARB_texture_gather -http://www.opengl.org/registry/specs/gl/ARB/texture_gather.txt -GL_ARB_texture_gather - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F - GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirror_clamp_to_edge b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirror_clamp_to_edge deleted file mode 100644 index a484fd14b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirror_clamp_to_edge +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_mirror_clamp_to_edge -http://www.opengl.org/registry/specs/gl/ARB/texture_mirror_clamp_to_edge.txt -GL_ARB_texture_mirror_clamp_to_edge - GL_MIRROR_CLAMP_TO_EDGE 0x8743 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirrored_repeat b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirrored_repeat deleted file mode 100644 index 46ffd19f4b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_mirrored_repeat +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_mirrored_repeat -http://www.opengl.org/registry/specs/gl/ARB/texture_mirrored_repeat.txt -GL_ARB_texture_mirrored_repeat - GL_MIRRORED_REPEAT_ARB 0x8370 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_multisample deleted file mode 100644 index f664421ade..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_multisample +++ /dev/null @@ -1,28 +0,0 @@ -GL_ARB_texture_multisample -http://www.opengl.org/registry/specs/gl/ARB/texture_multisample.txt -GL_ARB_texture_multisample - GL_SAMPLE_POSITION 0x8E50 - GL_SAMPLE_MASK 0x8E51 - GL_SAMPLE_MASK_VALUE 0x8E52 - GL_MAX_SAMPLE_MASK_WORDS 0x8E59 - GL_TEXTURE_2D_MULTISAMPLE 0x9100 - GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 - GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 - GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 - GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 - GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 - GL_TEXTURE_SAMPLES 0x9106 - GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 - GL_SAMPLER_2D_MULTISAMPLE 0x9108 - GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 - GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A - GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B - GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C - GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D - GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E - GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F - GL_MAX_INTEGER_SAMPLES 0x9110 - void glGetMultisamplefv (GLenum pname, GLuint index, GLfloat* val) - void glSampleMaski (GLuint index, GLbitfield mask) - void glTexImage2DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) - void glTexImage3DMultisample (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_non_power_of_two b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_non_power_of_two deleted file mode 100644 index c46ea3e3d2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_non_power_of_two +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_non_power_of_two -http://www.opengl.org/registry/specs/gl/ARB/texture_non_power_of_two.txt -GL_ARB_texture_non_power_of_two diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_levels b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_levels deleted file mode 100644 index bfd9060b24..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_levels +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_query_levels -http://www.opengl.org/registry/specs/gl/ARB/texture_query_levels.txt -GL_ARB_texture_query_levels diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_lod b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_lod deleted file mode 100644 index c443775dd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_query_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ARB_texture_query_lod -http://www.opengl.org/registry/specs/gl/ARB/texture_query_lod.txt -GL_ARB_texture_query_lod diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rectangle deleted file mode 100644 index 715446cbc2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rectangle +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_texture_rectangle -http://www.opengl.org/registry/specs/gl/ARB/texture_rectangle.txt -GL_ARB_texture_rectangle - GL_TEXTURE_RECTANGLE_ARB 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 - GL_SAMPLER_2D_RECT_ARB 0x8B63 - GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rg b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rg deleted file mode 100644 index 1bda4f22dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rg +++ /dev/null @@ -1,27 +0,0 @@ -GL_ARB_texture_rg -http://www.opengl.org/registry/specs/gl/ARB/texture_rg.txt -GL_ARB_texture_rg - GL_COMPRESSED_RED 0x8225 - GL_COMPRESSED_RG 0x8226 - GL_RG 0x8227 - GL_RG_INTEGER 0x8228 - GL_R8 0x8229 - GL_R16 0x822A - GL_RG8 0x822B - GL_RG16 0x822C - GL_R16F 0x822D - GL_R32F 0x822E - GL_RG16F 0x822F - GL_RG32F 0x8230 - GL_R8I 0x8231 - GL_R8UI 0x8232 - GL_R16I 0x8233 - GL_R16UI 0x8234 - GL_R32I 0x8235 - GL_R32UI 0x8236 - GL_RG8I 0x8237 - GL_RG8UI 0x8238 - GL_RG16I 0x8239 - GL_RG16UI 0x823A - GL_RG32I 0x823B - GL_RG32UI 0x823C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rgb10_a2ui b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rgb10_a2ui deleted file mode 100644 index e66f7be4f7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_rgb10_a2ui +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_texture_rgb10_a2ui -http://www.opengl.org/registry/specs/gl/ARB/texture_rgb10_a2ui.txt -GL_ARB_texture_rgb10_a2ui - GL_RGB10_A2UI 0x906F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_stencil8 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_stencil8 deleted file mode 100644 index 83d2e1aee9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_stencil8 +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_texture_stencil8 -http://www.opengl.org/registry/specs/gl/ARB/texture_stencil8.txt -GL_ARB_texture_stencil8 - GL_STENCIL_INDEX 0x1901 - GL_STENCIL_INDEX8 0x8D48 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage deleted file mode 100644 index 83026e095a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage +++ /dev/null @@ -1,10 +0,0 @@ -GL_ARB_texture_storage -http://www.opengl.org/registry/specs/gl/ARB/texture_storage.txt -GL_ARB_texture_storage - GL_TEXTURE_IMMUTABLE_FORMAT 0x912F - void glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) - void glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) - void glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) - void glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) - void glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) - void glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage_multisample b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage_multisample deleted file mode 100644 index 4ca59e65fb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_storage_multisample +++ /dev/null @@ -1,7 +0,0 @@ -GL_ARB_texture_storage_multisample -http://www.opengl.org/registry/specs/gl/ARB/texture_storage_multisample.txt -GL_ARB_texture_storage_multisample - void glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) - void glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) - void glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations) - void glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_swizzle b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_swizzle deleted file mode 100644 index 09ba7d6c6c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_swizzle +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_texture_swizzle -http://www.opengl.org/registry/specs/gl/ARB/texture_swizzle.txt -GL_ARB_texture_swizzle - GL_TEXTURE_SWIZZLE_R 0x8E42 - GL_TEXTURE_SWIZZLE_G 0x8E43 - GL_TEXTURE_SWIZZLE_B 0x8E44 - GL_TEXTURE_SWIZZLE_A 0x8E45 - GL_TEXTURE_SWIZZLE_RGBA 0x8E46 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_view b/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_view deleted file mode 100644 index 337e3413fb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_texture_view +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_texture_view -http://www.opengl.org/registry/specs/gl/ARB/texture_view.txt -GL_ARB_texture_view - GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB - GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC - GL_TEXTURE_VIEW_MIN_LAYER 0x82DD - GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE - GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF - void glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_timer_query b/Engine/lib/glew/auto/extensions/gl/GL_ARB_timer_query deleted file mode 100644 index 7b2cb1c6b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_timer_query +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_timer_query -http://www.opengl.org/registry/specs/gl/ARB/timer_query.txt -GL_ARB_timer_query - GL_TIME_ELAPSED 0x88BF - GL_TIMESTAMP 0x8E28 - void glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64* params) - void glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64* params) - void glQueryCounter (GLuint id, GLenum target) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback2 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback2 deleted file mode 100644 index 7caaf98d5b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback2 +++ /dev/null @@ -1,14 +0,0 @@ -GL_ARB_transform_feedback2 -http://www.opengl.org/registry/specs/gl/ARB/transform_feedback2.txt -GL_ARB_transform_feedback2 - GL_TRANSFORM_FEEDBACK 0x8E22 - GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 - GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 - GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 - void glBindTransformFeedback (GLenum target, GLuint id) - void glDeleteTransformFeedbacks (GLsizei n, const GLuint* ids) - void glDrawTransformFeedback (GLenum mode, GLuint id) - void glGenTransformFeedbacks (GLsizei n, GLuint* ids) - GLboolean glIsTransformFeedback (GLuint id) - void glPauseTransformFeedback (void) - void glResumeTransformFeedback (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback3 b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback3 deleted file mode 100644 index 07e7ec902e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback3 +++ /dev/null @@ -1,9 +0,0 @@ -GL_ARB_transform_feedback3 -http://www.opengl.org/registry/specs/gl/ARB/transform_feedback3.txt -GL_ARB_transform_feedback3 - GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 - GL_MAX_VERTEX_STREAMS 0x8E71 - void glBeginQueryIndexed (GLenum target, GLuint index, GLuint id) - void glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream) - void glEndQueryIndexed (GLenum target, GLuint index) - void glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback_instanced b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback_instanced deleted file mode 100644 index 1f651c42a8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transform_feedback_instanced +++ /dev/null @@ -1,5 +0,0 @@ -GL_ARB_transform_feedback_instanced -http://www.opengl.org/registry/specs/gl/ARB/transform_feedback_instanced.txt -GL_ARB_transform_feedback_instanced - void glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei primcount) - void glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transpose_matrix b/Engine/lib/glew/auto/extensions/gl/GL_ARB_transpose_matrix deleted file mode 100644 index f7e0902789..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_transpose_matrix +++ /dev/null @@ -1,11 +0,0 @@ -GL_ARB_transpose_matrix -http://www.opengl.org/registry/specs/gl/ARB/transpose_matrix.txt -GL_ARB_transpose_matrix - GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 - GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 - GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 - GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 - void glLoadTransposeMatrixfARB (GLfloat m[16]) - void glLoadTransposeMatrixdARB (GLdouble m[16]) - void glMultTransposeMatrixfARB (GLfloat m[16]) - void glMultTransposeMatrixdARB (GLdouble m[16]) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_uniform_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_uniform_buffer_object deleted file mode 100644 index 4a83f14cc4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_uniform_buffer_object +++ /dev/null @@ -1,46 +0,0 @@ -GL_ARB_uniform_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/uniform_buffer_object.txt -GL_ARB_uniform_buffer_object - GL_UNIFORM_BUFFER 0x8A11 - GL_UNIFORM_BUFFER_BINDING 0x8A28 - GL_UNIFORM_BUFFER_START 0x8A29 - GL_UNIFORM_BUFFER_SIZE 0x8A2A - GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B - GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C - GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D - GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E - GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F - GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 - GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 - GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 - GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 - GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 - GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 - GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 - GL_UNIFORM_TYPE 0x8A37 - GL_UNIFORM_SIZE 0x8A38 - GL_UNIFORM_NAME_LENGTH 0x8A39 - GL_UNIFORM_BLOCK_INDEX 0x8A3A - GL_UNIFORM_OFFSET 0x8A3B - GL_UNIFORM_ARRAY_STRIDE 0x8A3C - GL_UNIFORM_MATRIX_STRIDE 0x8A3D - GL_UNIFORM_IS_ROW_MAJOR 0x8A3E - GL_UNIFORM_BLOCK_BINDING 0x8A3F - GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 - GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 - GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 - GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 - GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 - GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 - GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 - GL_INVALID_INDEX 0xFFFFFFFF - void glBindBufferBase (GLenum target, GLuint index, GLuint buffer) - void glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) - void glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) - void glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName) - void glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) - void glGetIntegeri_v (GLenum target, GLuint index, GLint* data) - GLuint glGetUniformBlockIndex (GLuint program, const GLchar* uniformBlockName) - void glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar** uniformNames, GLuint* uniformIndices) - void glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_bgra b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_bgra deleted file mode 100644 index 1869a2b68a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_bgra +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_vertex_array_bgra -http://www.opengl.org/registry/specs/gl/ARB/vertex_array_bgra.txt -GL_ARB_vertex_array_bgra - GL_BGRA 0x80E1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_object deleted file mode 100644 index 3413324313..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_array_object +++ /dev/null @@ -1,8 +0,0 @@ -GL_ARB_vertex_array_object -http://www.opengl.org/registry/specs/gl/ARB/vertex_array_object.txt -GL_ARB_vertex_array_object - GL_VERTEX_ARRAY_BINDING 0x85B5 - void glBindVertexArray (GLuint array) - void glDeleteVertexArrays (GLsizei n, const GLuint* arrays) - void glGenVertexArrays (GLsizei n, GLuint* arrays) - GLboolean glIsVertexArray (GLuint array) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_64bit b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_64bit deleted file mode 100644 index a30aa06252..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_64bit +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_vertex_attrib_64bit -http://www.opengl.org/registry/specs/ARB/vertex_attrib_64bit.txt -GL_ARB_vertex_attrib_64bit - void glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble* params) - void glVertexAttribL1d (GLuint index, GLdouble x) - void glVertexAttribL1dv (GLuint index, const GLdouble* v) - void glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y) - void glVertexAttribL2dv (GLuint index, const GLdouble* v) - void glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttribL3dv (GLuint index, const GLdouble* v) - void glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttribL4dv (GLuint index, const GLdouble* v) - void glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_binding b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_binding deleted file mode 100644 index 53492cd08b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_attrib_binding +++ /dev/null @@ -1,16 +0,0 @@ -GL_ARB_vertex_attrib_binding -http://www.opengl.org/registry/specs/gl/ARB/vertex_attrib_binding.txt -GL_ARB_vertex_attrib_binding - GL_VERTEX_ATTRIB_BINDING 0x82D4 - GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 - GL_VERTEX_BINDING_DIVISOR 0x82D6 - GL_VERTEX_BINDING_OFFSET 0x82D7 - GL_VERTEX_BINDING_STRIDE 0x82D8 - GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 - GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA - void glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride) - void glVertexAttribBinding (GLuint attribindex, GLuint bindingindex) - void glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset) - void glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) - void glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset) - void glVertexBindingDivisor (GLuint bindingindex, GLuint divisor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_blend b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_blend deleted file mode 100644 index 8da2c785b9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_blend +++ /dev/null @@ -1,55 +0,0 @@ -GL_ARB_vertex_blend -http://oss.sgi.com/projects/ogl-sample/registry/ARB/vertex_blend.txt -GL_ARB_vertex_blend - GL_MAX_VERTEX_UNITS_ARB 0x86A4 - GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 - GL_WEIGHT_SUM_UNITY_ARB 0x86A6 - GL_VERTEX_BLEND_ARB 0x86A7 - GL_CURRENT_WEIGHT_ARB 0x86A8 - GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 - GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA - GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB - GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC - GL_WEIGHT_ARRAY_ARB 0x86AD - GL_MODELVIEW0_ARB 0x1700 - GL_MODELVIEW1_ARB 0x850A - GL_MODELVIEW2_ARB 0x8722 - GL_MODELVIEW3_ARB 0x8723 - GL_MODELVIEW4_ARB 0x8724 - GL_MODELVIEW5_ARB 0x8725 - GL_MODELVIEW6_ARB 0x8726 - GL_MODELVIEW7_ARB 0x8727 - GL_MODELVIEW8_ARB 0x8728 - GL_MODELVIEW9_ARB 0x8729 - GL_MODELVIEW10_ARB 0x872A - GL_MODELVIEW11_ARB 0x872B - GL_MODELVIEW12_ARB 0x872C - GL_MODELVIEW13_ARB 0x872D - GL_MODELVIEW14_ARB 0x872E - GL_MODELVIEW15_ARB 0x872F - GL_MODELVIEW16_ARB 0x8730 - GL_MODELVIEW17_ARB 0x8731 - GL_MODELVIEW18_ARB 0x8732 - GL_MODELVIEW19_ARB 0x8733 - GL_MODELVIEW20_ARB 0x8734 - GL_MODELVIEW21_ARB 0x8735 - GL_MODELVIEW22_ARB 0x8736 - GL_MODELVIEW23_ARB 0x8737 - GL_MODELVIEW24_ARB 0x8738 - GL_MODELVIEW25_ARB 0x8739 - GL_MODELVIEW26_ARB 0x873A - GL_MODELVIEW27_ARB 0x873B - GL_MODELVIEW28_ARB 0x873C - GL_MODELVIEW29_ARB 0x873D - GL_MODELVIEW30_ARB 0x873E - GL_MODELVIEW31_ARB 0x873F - void glWeightbvARB (GLint size, GLbyte *weights) - void glWeightsvARB (GLint size, GLshort *weights) - void glWeightivARB (GLint size, GLint *weights) - void glWeightfvARB (GLint size, GLfloat *weights) - void glWeightdvARB (GLint size, GLdouble *weights) - void glWeightubvARB (GLint size, GLubyte *weights) - void glWeightusvARB (GLint size, GLushort *weights) - void glWeightuivARB (GLint size, GLuint *weights) - void glWeightPointerARB (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glVertexBlendARB (GLint count) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_buffer_object deleted file mode 100644 index 2e094fdd1b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_buffer_object +++ /dev/null @@ -1,47 +0,0 @@ -GL_ARB_vertex_buffer_object -http://www.opengl.org/registry/specs/gl/ARB/vertex_buffer_object.txt -GL_ARB_vertex_buffer_object - GL_BUFFER_SIZE_ARB 0x8764 - GL_BUFFER_USAGE_ARB 0x8765 - GL_ARRAY_BUFFER_ARB 0x8892 - GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 - GL_ARRAY_BUFFER_BINDING_ARB 0x8894 - GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 - GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 - GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 - GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 - GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 - GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A - GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B - GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C - GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D - GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E - GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F - GL_READ_ONLY_ARB 0x88B8 - GL_WRITE_ONLY_ARB 0x88B9 - GL_READ_WRITE_ARB 0x88BA - GL_BUFFER_ACCESS_ARB 0x88BB - GL_BUFFER_MAPPED_ARB 0x88BC - GL_BUFFER_MAP_POINTER_ARB 0x88BD - GL_STREAM_DRAW_ARB 0x88E0 - GL_STREAM_READ_ARB 0x88E1 - GL_STREAM_COPY_ARB 0x88E2 - GL_STATIC_DRAW_ARB 0x88E4 - GL_STATIC_READ_ARB 0x88E5 - GL_STATIC_COPY_ARB 0x88E6 - GL_DYNAMIC_DRAW_ARB 0x88E8 - GL_DYNAMIC_READ_ARB 0x88E9 - GL_DYNAMIC_COPY_ARB 0x88EA - void glBindBufferARB (GLenum target, GLuint buffer) - void glBufferDataARB (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage) - void glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data) - void glDeleteBuffersARB (GLsizei n, const GLuint* buffers) - void glGenBuffersARB (GLsizei n, GLuint* buffers) - void glGetBufferParameterivARB (GLenum target, GLenum pname, GLint* params) - void glGetBufferPointervARB (GLenum target, GLenum pname, GLvoid** params) - void glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data) - GLboolean glIsBufferARB (GLuint buffer) - GLvoid * glMapBufferARB (GLenum target, GLenum access) - GLboolean glUnmapBufferARB (GLenum target) - typedef ptrdiff_t GLsizeiptrARB - typedef ptrdiff_t GLintptrARB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_program b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_program deleted file mode 100644 index 2a5f94dbff..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_program +++ /dev/null @@ -1,144 +0,0 @@ -GL_ARB_vertex_program -http://www.opengl.org/registry/specs/gl/ARB/vertex_program.txt -GL_ARB_vertex_program - GL_COLOR_SUM_ARB 0x8458 - GL_VERTEX_PROGRAM_ARB 0x8620 - GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 - GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 - GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 - GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 - GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 - GL_PROGRAM_LENGTH_ARB 0x8627 - GL_PROGRAM_STRING_ARB 0x8628 - GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E - GL_MAX_PROGRAM_MATRICES_ARB 0x862F - GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 - GL_CURRENT_MATRIX_ARB 0x8641 - GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 - GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 - GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 - GL_PROGRAM_ERROR_POSITION_ARB 0x864B - GL_PROGRAM_BINDING_ARB 0x8677 - GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 - GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A - GL_PROGRAM_ERROR_STRING_ARB 0x8874 - GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 - GL_PROGRAM_FORMAT_ARB 0x8876 - GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 - GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 - GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 - GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 - GL_PROGRAM_TEMPORARIES_ARB 0x88A4 - GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 - GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 - GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 - GL_PROGRAM_PARAMETERS_ARB 0x88A8 - GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 - GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA - GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB - GL_PROGRAM_ATTRIBS_ARB 0x88AC - GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD - GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE - GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF - GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 - GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 - GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 - GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 - GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 - GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 - GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 - GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 - GL_MATRIX0_ARB 0x88C0 - GL_MATRIX1_ARB 0x88C1 - GL_MATRIX2_ARB 0x88C2 - GL_MATRIX3_ARB 0x88C3 - GL_MATRIX4_ARB 0x88C4 - GL_MATRIX5_ARB 0x88C5 - GL_MATRIX6_ARB 0x88C6 - GL_MATRIX7_ARB 0x88C7 - GL_MATRIX8_ARB 0x88C8 - GL_MATRIX9_ARB 0x88C9 - GL_MATRIX10_ARB 0x88CA - GL_MATRIX11_ARB 0x88CB - GL_MATRIX12_ARB 0x88CC - GL_MATRIX13_ARB 0x88CD - GL_MATRIX14_ARB 0x88CE - GL_MATRIX15_ARB 0x88CF - GL_MATRIX16_ARB 0x88D0 - GL_MATRIX17_ARB 0x88D1 - GL_MATRIX18_ARB 0x88D2 - GL_MATRIX19_ARB 0x88D3 - GL_MATRIX20_ARB 0x88D4 - GL_MATRIX21_ARB 0x88D5 - GL_MATRIX22_ARB 0x88D6 - GL_MATRIX23_ARB 0x88D7 - GL_MATRIX24_ARB 0x88D8 - GL_MATRIX25_ARB 0x88D9 - GL_MATRIX26_ARB 0x88DA - GL_MATRIX27_ARB 0x88DB - GL_MATRIX28_ARB 0x88DC - GL_MATRIX29_ARB 0x88DD - GL_MATRIX30_ARB 0x88DE - GL_MATRIX31_ARB 0x88DF - void glBindProgramARB (GLenum target, GLuint program) - void glDeleteProgramsARB (GLsizei n, const GLuint* programs) - void glDisableVertexAttribArrayARB (GLuint index) - void glEnableVertexAttribArrayARB (GLuint index) - void glGenProgramsARB (GLsizei n, GLuint* programs) - void glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble* params) - void glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat* params) - void glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble* params) - void glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat* params) - void glGetProgramStringARB (GLenum target, GLenum pname, GLvoid *string) - void glGetProgramivARB (GLenum target, GLenum pname, GLint* params) - void glGetVertexAttribPointervARB (GLuint index, GLenum pname, GLvoid** pointer) - void glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble* params) - void glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat* params) - void glGetVertexAttribivARB (GLuint index, GLenum pname, GLint* params) - GLboolean glIsProgramARB (GLuint program) - void glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble* params) - void glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat* params) - void glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble* params) - void glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat* params) - void glProgramStringARB (GLenum target, GLenum format, GLsizei len, const GLvoid *string) - void glVertexAttrib1dARB (GLuint index, GLdouble x) - void glVertexAttrib1dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib1fARB (GLuint index, GLfloat x) - void glVertexAttrib1fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib1sARB (GLuint index, GLshort x) - void glVertexAttrib1svARB (GLuint index, const GLshort* v) - void glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y) - void glVertexAttrib2dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y) - void glVertexAttrib2fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y) - void glVertexAttrib2svARB (GLuint index, const GLshort* v) - void glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttrib3dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z) - void glVertexAttrib3fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z) - void glVertexAttrib3svARB (GLuint index, const GLshort* v) - void glVertexAttrib4NbvARB (GLuint index, const GLbyte* v) - void glVertexAttrib4NivARB (GLuint index, const GLint* v) - void glVertexAttrib4NsvARB (GLuint index, const GLshort* v) - void glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) - void glVertexAttrib4NubvARB (GLuint index, const GLubyte* v) - void glVertexAttrib4NuivARB (GLuint index, const GLuint* v) - void glVertexAttrib4NusvARB (GLuint index, const GLushort* v) - void glVertexAttrib4bvARB (GLuint index, const GLbyte* v) - void glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttrib4dvARB (GLuint index, const GLdouble* v) - void glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexAttrib4fvARB (GLuint index, const GLfloat* v) - void glVertexAttrib4ivARB (GLuint index, const GLint* v) - void glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexAttrib4svARB (GLuint index, const GLshort* v) - void glVertexAttrib4ubvARB (GLuint index, const GLubyte* v) - void glVertexAttrib4uivARB (GLuint index, const GLuint* v) - void glVertexAttrib4usvARB (GLuint index, const GLushort* v) - void glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_shader b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_shader deleted file mode 100644 index 6a235f2356..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_shader +++ /dev/null @@ -1,13 +0,0 @@ -GL_ARB_vertex_shader -http://www.opengl.org/registry/specs/gl/ARB/vertex_shader.txt -GL_ARB_vertex_shader - GL_VERTEX_SHADER_ARB 0x8B31 - GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A - GL_MAX_VARYING_FLOATS_ARB 0x8B4B - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D - GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 - GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A - void glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB* name) - void glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name) - GLint glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB* name) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_10f_11f_11f_rev b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_10f_11f_11f_rev deleted file mode 100644 index 662af3474b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_10f_11f_11f_rev +++ /dev/null @@ -1,4 +0,0 @@ -GL_ARB_vertex_type_10f_11f_11f_rev -http://www.opengl.org/registry/specs/gl/ARB/vertex_type_10f_11f_11f_rev.txt -GL_ARB_vertex_type_10f_11f_11f_rev - GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_2_10_10_10_rev b/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_2_10_10_10_rev deleted file mode 100644 index b46b266dff..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_vertex_type_2_10_10_10_rev +++ /dev/null @@ -1,43 +0,0 @@ -GL_ARB_vertex_type_2_10_10_10_rev -http://www.opengl.org/registry/specs/gl/ARB/vertex_type_2_10_10_10_rev.txt -GL_ARB_vertex_type_2_10_10_10_rev - GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 - GL_INT_2_10_10_10_REV 0x8D9F - void glColorP3ui (GLenum type, GLuint color) - void glColorP3uiv (GLenum type, const GLuint* color) - void glColorP4ui (GLenum type, GLuint color) - void glColorP4uiv (GLenum type, const GLuint* color) - void glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint* coords) - void glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint* coords) - void glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint* coords) - void glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords) - void glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint* coords) - void glNormalP3ui (GLenum type, GLuint coords) - void glNormalP3uiv (GLenum type, const GLuint* coords) - void glSecondaryColorP3ui (GLenum type, GLuint color) - void glSecondaryColorP3uiv (GLenum type, const GLuint* color) - void glTexCoordP1ui (GLenum type, GLuint coords) - void glTexCoordP1uiv (GLenum type, const GLuint* coords) - void glTexCoordP2ui (GLenum type, GLuint coords) - void glTexCoordP2uiv (GLenum type, const GLuint* coords) - void glTexCoordP3ui (GLenum type, GLuint coords) - void glTexCoordP3uiv (GLenum type, const GLuint* coords) - void glTexCoordP4ui (GLenum type, GLuint coords) - void glTexCoordP4uiv (GLenum type, const GLuint* coords) - void glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value) - void glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint* value) - void glVertexP2ui (GLenum type, GLuint value) - void glVertexP2uiv (GLenum type, const GLuint* value) - void glVertexP3ui (GLenum type, GLuint value) - void glVertexP3uiv (GLenum type, const GLuint* value) - void glVertexP4ui (GLenum type, GLuint value) - void glVertexP4uiv (GLenum type, const GLuint* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_viewport_array b/Engine/lib/glew/auto/extensions/gl/GL_ARB_viewport_array deleted file mode 100644 index e8a012b21c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_viewport_array +++ /dev/null @@ -1,26 +0,0 @@ -GL_ARB_viewport_array -http://www.opengl.org/registry/specs/gl/ARB/viewport_array.txt -GL_ARB_viewport_array - GL_DEPTH_RANGE 0x0B70 - GL_VIEWPORT 0x0BA2 - GL_SCISSOR_BOX 0x0C10 - GL_SCISSOR_TEST 0x0C11 - GL_MAX_VIEWPORTS 0x825B - GL_VIEWPORT_SUBPIXEL_BITS 0x825C - GL_VIEWPORT_BOUNDS_RANGE 0x825D - GL_LAYER_PROVOKING_VERTEX 0x825E - GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F - GL_UNDEFINED_VERTEX 0x8260 - GL_FIRST_VERTEX_CONVENTION 0x8E4D - GL_LAST_VERTEX_CONVENTION 0x8E4E - GL_PROVOKING_VERTEX 0x8E4F - void glDepthRangeArrayv (GLuint first, GLsizei count, const GLclampd * v) - void glDepthRangeIndexed (GLuint index, GLclampd n, GLclampd f) - void glGetDoublei_v (GLenum target, GLuint index, GLdouble* data) - void glGetFloati_v (GLenum target, GLuint index, GLfloat* data) - void glScissorArrayv (GLuint first, GLsizei count, const GLint * v) - void glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) - void glScissorIndexedv (GLuint index, const GLint * v) - void glViewportArrayv (GLuint first, GLsizei count, const GLfloat * v) - void glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) - void glViewportIndexedfv (GLuint index, const GLfloat * v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ARB_window_pos b/Engine/lib/glew/auto/extensions/gl/GL_ARB_window_pos deleted file mode 100644 index 75a52ad5ca..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ARB_window_pos +++ /dev/null @@ -1,19 +0,0 @@ -GL_ARB_window_pos -http://www.opengl.org/registry/specs/gl/ARB/window_pos.txt -GL_ARB_window_pos - void glWindowPos2dARB (GLdouble x, GLdouble y) - void glWindowPos2dvARB (const GLdouble* p) - void glWindowPos2fARB (GLfloat x, GLfloat y) - void glWindowPos2fvARB (const GLfloat* p) - void glWindowPos2iARB (GLint x, GLint y) - void glWindowPos2ivARB (const GLint* p) - void glWindowPos2sARB (GLshort x, GLshort y) - void glWindowPos2svARB (const GLshort* p) - void glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z) - void glWindowPos3dvARB (const GLdouble* p) - void glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z) - void glWindowPos3fvARB (const GLfloat* p) - void glWindowPos3iARB (GLint x, GLint y, GLint z) - void glWindowPos3ivARB (const GLint* p) - void glWindowPos3sARB (GLshort x, GLshort y, GLshort z) - void glWindowPos3svARB (const GLshort* p) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_point_sprites b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_point_sprites deleted file mode 100644 index 0f4f574131..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_point_sprites +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATIX_point_sprites -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_point_sprites - GL_TEXTURE_POINT_MODE_ATIX 0x60B0 - GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 - GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 - GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 - GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 - GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_combine3 b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_combine3 deleted file mode 100644 index 537426b95d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_combine3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_combine3 -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_texture_env_combine3 - GL_MODULATE_ADD_ATIX 0x8744 - GL_MODULATE_SIGNED_ADD_ATIX 0x8745 - GL_MODULATE_SUBTRACT_ATIX 0x8746 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_route b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_route deleted file mode 100644 index 939ae09b95..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_texture_env_route +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATIX_texture_env_route -http://www.ati.com/developer/sdk/RadeonSDK/Html/Info/ATIX_texture_env_route.txt -GL_ATIX_texture_env_route - GL_SECONDARY_COLOR_ATIX 0x8747 - GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 - GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_vertex_shader_output_point_size b/Engine/lib/glew/auto/extensions/gl/GL_ATIX_vertex_shader_output_point_size deleted file mode 100644 index 277a3136cb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATIX_vertex_shader_output_point_size +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATIX_vertex_shader_output_point_size -http://www.ati.com/developer/atiopengl.pdf -GL_ATIX_vertex_shader_output_point_size - GL_OUTPUT_POINT_SIZE_ATIX 0x610E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_draw_buffers b/Engine/lib/glew/auto/extensions/gl/GL_ATI_draw_buffers deleted file mode 100644 index 9761b24530..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_draw_buffers +++ /dev/null @@ -1,21 +0,0 @@ -GL_ATI_draw_buffers -http://www.opengl.org/registry/specs/gl/ATI/draw_buffers.txt -GL_ATI_draw_buffers - GL_MAX_DRAW_BUFFERS_ATI 0x8824 - GL_DRAW_BUFFER0_ATI 0x8825 - GL_DRAW_BUFFER1_ATI 0x8826 - GL_DRAW_BUFFER2_ATI 0x8827 - GL_DRAW_BUFFER3_ATI 0x8828 - GL_DRAW_BUFFER4_ATI 0x8829 - GL_DRAW_BUFFER5_ATI 0x882A - GL_DRAW_BUFFER6_ATI 0x882B - GL_DRAW_BUFFER7_ATI 0x882C - GL_DRAW_BUFFER8_ATI 0x882D - GL_DRAW_BUFFER9_ATI 0x882E - GL_DRAW_BUFFER10_ATI 0x882F - GL_DRAW_BUFFER11_ATI 0x8830 - GL_DRAW_BUFFER12_ATI 0x8831 - GL_DRAW_BUFFER13_ATI 0x8832 - GL_DRAW_BUFFER14_ATI 0x8833 - GL_DRAW_BUFFER15_ATI 0x8834 - void glDrawBuffersATI (GLsizei n, const GLenum* bufs) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_element_array b/Engine/lib/glew/auto/extensions/gl/GL_ATI_element_array deleted file mode 100644 index 5dfa2c04e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_element_array +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATI_element_array -http://www.opengl.org/registry/specs/gl/ATI/element_array.txt -GL_ATI_element_array - GL_ELEMENT_ARRAY_ATI 0x8768 - GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 - GL_ELEMENT_ARRAY_POINTER_ATI 0x876A - void glDrawElementArrayATI (GLenum mode, GLsizei count) - void glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count) - void glElementPointerATI (GLenum type, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_envmap_bumpmap b/Engine/lib/glew/auto/extensions/gl/GL_ATI_envmap_bumpmap deleted file mode 100644 index fbd992551e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_envmap_bumpmap +++ /dev/null @@ -1,15 +0,0 @@ -GL_ATI_envmap_bumpmap -http://oss.sgi.com/projects/ogl-sample/registry/ATI/envmap_bumpmap.txt -GL_ATI_envmap_bumpmap - GL_BUMP_ROT_MATRIX_ATI 0x8775 - GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 - GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 - GL_BUMP_TEX_UNITS_ATI 0x8778 - GL_DUDV_ATI 0x8779 - GL_DU8DV8_ATI 0x877A - GL_BUMP_ENVMAP_ATI 0x877B - GL_BUMP_TARGET_ATI 0x877C - void glTexBumpParameterivATI (GLenum pname, GLint *param) - void glTexBumpParameterfvATI (GLenum pname, GLfloat *param) - void glGetTexBumpParameterivATI (GLenum pname, GLint *param) - void glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_fragment_shader b/Engine/lib/glew/auto/extensions/gl/GL_ATI_fragment_shader deleted file mode 100644 index da65d9ab0e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_fragment_shader +++ /dev/null @@ -1,71 +0,0 @@ -GL_ATI_fragment_shader -http://www.opengl.org/registry/specs/gl/ATI/fragment_shader.txt -GL_ATI_fragment_shader - GL_RED_BIT_ATI 0x00000001 - GL_2X_BIT_ATI 0x00000001 - GL_4X_BIT_ATI 0x00000002 - GL_GREEN_BIT_ATI 0x00000002 - GL_COMP_BIT_ATI 0x00000002 - GL_BLUE_BIT_ATI 0x00000004 - GL_8X_BIT_ATI 0x00000004 - GL_NEGATE_BIT_ATI 0x00000004 - GL_BIAS_BIT_ATI 0x00000008 - GL_HALF_BIT_ATI 0x00000008 - GL_QUARTER_BIT_ATI 0x00000010 - GL_EIGHTH_BIT_ATI 0x00000020 - GL_SATURATE_BIT_ATI 0x00000040 - GL_FRAGMENT_SHADER_ATI 0x8920 - GL_REG_0_ATI 0x8921 - GL_REG_1_ATI 0x8922 - GL_REG_2_ATI 0x8923 - GL_REG_3_ATI 0x8924 - GL_REG_4_ATI 0x8925 - GL_REG_5_ATI 0x8926 - GL_CON_0_ATI 0x8941 - GL_CON_1_ATI 0x8942 - GL_CON_2_ATI 0x8943 - GL_CON_3_ATI 0x8944 - GL_CON_4_ATI 0x8945 - GL_CON_5_ATI 0x8946 - GL_CON_6_ATI 0x8947 - GL_CON_7_ATI 0x8948 - GL_MOV_ATI 0x8961 - GL_ADD_ATI 0x8963 - GL_MUL_ATI 0x8964 - GL_SUB_ATI 0x8965 - GL_DOT3_ATI 0x8966 - GL_DOT4_ATI 0x8967 - GL_MAD_ATI 0x8968 - GL_LERP_ATI 0x8969 - GL_CND_ATI 0x896A - GL_CND0_ATI 0x896B - GL_DOT2_ADD_ATI 0x896C - GL_SECONDARY_INTERPOLATOR_ATI 0x896D - GL_SWIZZLE_STR_ATI 0x8976 - GL_SWIZZLE_STQ_ATI 0x8977 - GL_SWIZZLE_STR_DR_ATI 0x8978 - GL_SWIZZLE_STQ_DQ_ATI 0x8979 - void glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) - void glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) - void glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) - void glBeginFragmentShaderATI (void) - void glBindFragmentShaderATI (GLuint id) - void glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod) - void glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod) - void glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod) - void glDeleteFragmentShaderATI (GLuint id) - void glEndFragmentShaderATI (void) - GLuint glGenFragmentShadersATI (GLuint range) - void glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle) - void glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle) - void glSetFragmentShaderConstantATI (GLuint dst, const GLfloat* value) - GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E - GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F - GL_NUM_PASSES_ATI 0x8970 - GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 - GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 - GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 - GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 - GL_COLOR_ALPHA_PAIRING_ATI 0x8975 - GL_SWIZZLE_STRQ_ATI 0x897A - GL_SWIZZLE_STRQ_DQ_ATI 0x897B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_map_object_buffer b/Engine/lib/glew/auto/extensions/gl/GL_ATI_map_object_buffer deleted file mode 100644 index 573afd273f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_map_object_buffer +++ /dev/null @@ -1,5 +0,0 @@ -GL_ATI_map_object_buffer -http://www.opengl.org/registry/specs/ATI/map_object_buffer.txt -GL_ATI_map_object_buffer - GLvoid * glMapObjectBufferATI (GLuint buffer) - void glUnmapObjectBufferATI (GLuint buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_meminfo b/Engine/lib/glew/auto/extensions/gl/GL_ATI_meminfo deleted file mode 100644 index e8a4ee97cb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_meminfo +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATI_meminfo -http://www.opengl.org/registry/specs/gl/ATI/meminfo.txt -GL_ATI_meminfo - GL_VBO_FREE_MEMORY_ATI 0x87FB - GL_TEXTURE_FREE_MEMORY_ATI 0x87FC - GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_pn_triangles b/Engine/lib/glew/auto/extensions/gl/GL_ATI_pn_triangles deleted file mode 100644 index a61e27a061..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_pn_triangles +++ /dev/null @@ -1,14 +0,0 @@ -GL_ATI_pn_triangles -http://www.opengl.org/registry/specs/ATI/pn_triangles.txt -GL_ATI_pn_triangles - GL_PN_TRIANGLES_ATI 0x87F0 - GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 - GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 - GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 - GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 - GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 - GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 - GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 - GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 - void glPNTrianglesiATI (GLenum pname, GLint param) - void glPNTrianglesfATI (GLenum pname, GLfloat param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_separate_stencil b/Engine/lib/glew/auto/extensions/gl/GL_ATI_separate_stencil deleted file mode 100644 index be55bb44f5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_separate_stencil +++ /dev/null @@ -1,9 +0,0 @@ -GL_ATI_separate_stencil -http://www.opengl.org/registry/specs/ATI/separate_stencil.txt -GL_ATI_separate_stencil - GL_STENCIL_BACK_FUNC_ATI 0x8800 - GL_STENCIL_BACK_FAIL_ATI 0x8801 - GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 - GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 - void glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass) - void glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_shader_texture_lod b/Engine/lib/glew/auto/extensions/gl/GL_ATI_shader_texture_lod deleted file mode 100644 index 5fbc624a6b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_shader_texture_lod +++ /dev/null @@ -1,3 +0,0 @@ -GL_ATI_shader_texture_lod - -GL_ATI_shader_texture_lod diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_text_fragment_shader b/Engine/lib/glew/auto/extensions/gl/GL_ATI_text_fragment_shader deleted file mode 100644 index d12a66f0bf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_text_fragment_shader +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATI_text_fragment_shader -http://www.opengl.org/registry/specs/gl/ATI/text_fragment_shader.txt -GL_ATI_text_fragment_shader - GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_compression_3dc b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_compression_3dc deleted file mode 100644 index 2548b30ead..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_compression_3dc +++ /dev/null @@ -1,4 +0,0 @@ -GL_ATI_texture_compression_3dc - -GL_ATI_texture_compression_3dc - GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_env_combine3 b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_env_combine3 deleted file mode 100644 index 8dfeecf7f8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_env_combine3 +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATI_texture_env_combine3 -http://www.opengl.org/registry/specs/gl/ATI/texture_env_combine3.txt -GL_ATI_texture_env_combine3 - GL_MODULATE_ADD_ATI 0x8744 - GL_MODULATE_SIGNED_ADD_ATI 0x8745 - GL_MODULATE_SUBTRACT_ATI 0x8746 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_float b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_float deleted file mode 100644 index 9d935f5789..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_float +++ /dev/null @@ -1,15 +0,0 @@ -GL_ATI_texture_float -http://www.opengl.org/registry/specs/gl/ATI/texture_float.txt -GL_ATI_texture_float - GL_RGBA_FLOAT32_ATI 0x8814 - GL_RGB_FLOAT32_ATI 0x8815 - GL_ALPHA_FLOAT32_ATI 0x8816 - GL_INTENSITY_FLOAT32_ATI 0x8817 - GL_LUMINANCE_FLOAT32_ATI 0x8818 - GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 - GL_RGBA_FLOAT16_ATI 0x881A - GL_RGB_FLOAT16_ATI 0x881B - GL_ALPHA_FLOAT16_ATI 0x881C - GL_INTENSITY_FLOAT16_ATI 0x881D - GL_LUMINANCE_FLOAT16_ATI 0x881E - GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_mirror_once b/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_mirror_once deleted file mode 100644 index a3a9c273b8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_texture_mirror_once +++ /dev/null @@ -1,5 +0,0 @@ -GL_ATI_texture_mirror_once -http://www.opengl.org/registry/specs/gl/ATI/texture_mirror_once.txt -GL_ATI_texture_mirror_once - GL_MIRROR_CLAMP_ATI 0x8742 - GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_array_object b/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_array_object deleted file mode 100644 index b6ea168ba1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_array_object +++ /dev/null @@ -1,23 +0,0 @@ -GL_ATI_vertex_array_object -http://www.opengl.org/registry/specs/gl/ATI/vertex_array_object.txt -GL_ATI_vertex_array_object - GL_STATIC_ATI 0x8760 - GL_DYNAMIC_ATI 0x8761 - GL_PRESERVE_ATI 0x8762 - GL_DISCARD_ATI 0x8763 - GL_OBJECT_BUFFER_SIZE_ATI 0x8764 - GL_OBJECT_BUFFER_USAGE_ATI 0x8765 - GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 - GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 - void glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) - void glFreeObjectBufferATI (GLuint buffer) - void glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat* params) - void glGetArrayObjectivATI (GLenum array, GLenum pname, GLint* params) - void glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat* params) - void glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint* params) - void glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat* params) - void glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint* params) - GLboolean glIsObjectBufferATI (GLuint buffer) - GLuint glNewObjectBufferATI (GLsizei size, const GLvoid *pointer, GLenum usage) - void glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve) - void glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_attrib_array_object b/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_attrib_array_object deleted file mode 100644 index b47304d979..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_attrib_array_object +++ /dev/null @@ -1,6 +0,0 @@ -GL_ATI_vertex_attrib_array_object -http://www.opengl.org/registry/specs/gl/ATI/vertex_attrib_array_object.txt -GL_ATI_vertex_attrib_array_object - void glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat* params) - void glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint* params) - void glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_streams b/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_streams deleted file mode 100644 index 060f8446e2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_ATI_vertex_streams +++ /dev/null @@ -1,58 +0,0 @@ -GL_ATI_vertex_streams -http://www.opengl.org/registry/specs/ATI/vertex_streams.txt -GL_ATI_vertex_streams - GL_MAX_VERTEX_STREAMS_ATI 0x876B - GL_VERTEX_SOURCE_ATI 0x876C - GL_VERTEX_STREAM0_ATI 0x876D - GL_VERTEX_STREAM1_ATI 0x876E - GL_VERTEX_STREAM2_ATI 0x876F - GL_VERTEX_STREAM3_ATI 0x8770 - GL_VERTEX_STREAM4_ATI 0x8771 - GL_VERTEX_STREAM5_ATI 0x8772 - GL_VERTEX_STREAM6_ATI 0x8773 - GL_VERTEX_STREAM7_ATI 0x8774 - void glClientActiveVertexStreamATI (GLenum stream) - void glVertexBlendEnviATI (GLenum pname, GLint param) - void glVertexBlendEnvfATI (GLenum pname, GLfloat param) - void glVertexStream1sATI (GLenum stream, GLshort x) - void glVertexStream1svATI (GLenum stream, const GLshort *coords) - void glVertexStream1iATI (GLenum stream, GLint x) - void glVertexStream1ivATI (GLenum stream, const GLint *coords) - void glVertexStream1fATI (GLenum stream, GLfloat x) - void glVertexStream1fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream1dATI (GLenum stream, GLdouble x) - void glVertexStream1dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream2sATI (GLenum stream, GLshort x, GLshort y) - void glVertexStream2svATI (GLenum stream, const GLshort *coords) - void glVertexStream2iATI (GLenum stream, GLint x, GLint y) - void glVertexStream2ivATI (GLenum stream, const GLint *coords) - void glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y) - void glVertexStream2fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y) - void glVertexStream2dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glVertexStream3svATI (GLenum stream, const GLshort *coords) - void glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glVertexStream3ivATI (GLenum stream, const GLint *coords) - void glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glVertexStream3fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glVertexStream3dvATI (GLenum stream, const GLdouble *coords) - void glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexStream4svATI (GLenum stream, const GLshort *coords) - void glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w) - void glVertexStream4ivATI (GLenum stream, const GLint *coords) - void glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexStream4fvATI (GLenum stream, const GLfloat *coords) - void glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexStream4dvATI (GLenum stream, const GLdouble *coords) - void glNormalStream3bATI (GLenum stream, GLbyte x, GLbyte y, GLbyte z) - void glNormalStream3bvATI (GLenum stream, const GLbyte *coords) - void glNormalStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z) - void glNormalStream3svATI (GLenum stream, const GLshort *coords) - void glNormalStream3iATI (GLenum stream, GLint x, GLint y, GLint z) - void glNormalStream3ivATI (GLenum stream, const GLint *coords) - void glNormalStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z) - void glNormalStream3fvATI (GLenum stream, const GLfloat *coords) - void glNormalStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z) - void glNormalStream3dvATI (GLenum stream, const GLdouble *coords) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_422_pixels b/Engine/lib/glew/auto/extensions/gl/GL_EXT_422_pixels deleted file mode 100644 index 0eb2c856c2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_422_pixels +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_422_pixels -http://www.opengl.org/registry/specs/gl/EXT/422_pixels.txt -GL_EXT_422_pixels - GL_422_EXT 0x80CC - GL_422_REV_EXT 0x80CD - GL_422_AVERAGE_EXT 0x80CE - GL_422_REV_AVERAGE_EXT 0x80CF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_Cg_shader b/Engine/lib/glew/auto/extensions/gl/GL_EXT_Cg_shader deleted file mode 100644 index 34d3152931..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_Cg_shader +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_Cg_shader -http://download.nvidia.com/developer/GLSL/GLSL%20Release%20Notes%20for%20Release%2060.pdf -GL_EXT_Cg_shader - GL_CG_VERTEX_SHADER_EXT 0x890E - GL_CG_FRAGMENT_SHADER_EXT 0x890F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_abgr b/Engine/lib/glew/auto/extensions/gl/GL_EXT_abgr deleted file mode 100644 index 6de4d4d1aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_abgr +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_abgr -http://www.opengl.org/registry/specs/gl/EXT/abgr.txt -GL_EXT_abgr - GL_ABGR_EXT 0x8000 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bgra b/Engine/lib/glew/auto/extensions/gl/GL_EXT_bgra deleted file mode 100644 index 8b95a71abf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bgra +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_bgra -http://www.opengl.org/registry/specs/gl/EXT/bgra.txt -GL_EXT_bgra - GL_BGR_EXT 0x80E0 - GL_BGRA_EXT 0x80E1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bindable_uniform b/Engine/lib/glew/auto/extensions/gl/GL_EXT_bindable_uniform deleted file mode 100644 index 809123b659..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_bindable_uniform +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_bindable_uniform -http://developer.download.nvidia.com/opengl/specs/GL_EXT_bindable_uniform.txt -GL_EXT_bindable_uniform - GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 - GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 - GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 - GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED - GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF - GL_UNIFORM_BUFFER_EXT 0x8DEE - void glUniformBufferEXT (GLuint program, GLint location, GLuint buffer) - GLint glGetUniformBufferSizeEXT (GLuint program, GLint location) - GLintptr glGetUniformOffsetEXT (GLuint program, GLint location) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_color b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_color deleted file mode 100644 index eb9c8409fe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_color +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_blend_color -http://www.opengl.org/registry/specs/gl/EXT/blend_color.txt -GL_EXT_blend_color - GL_CONSTANT_COLOR_EXT 0x8001 - GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 - GL_CONSTANT_ALPHA_EXT 0x8003 - GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 - GL_BLEND_COLOR_EXT 0x8005 - void glBlendColorEXT (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_equation_separate b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_equation_separate deleted file mode 100644 index 198dd4cc4e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_equation_separate +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_blend_equation_separate -http://www.opengl.org/registry/specs/gl/EXT/blend_equation_separate.txt -GL_EXT_blend_equation_separate - GL_BLEND_EQUATION_RGB_EXT 0x8009 - GL_BLEND_EQUATION_ALPHA_EXT 0x883D - void glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_func_separate b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_func_separate deleted file mode 100644 index 01939ba72b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_func_separate +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_blend_func_separate -http://www.opengl.org/registry/specs/gl/EXT/blend_func_separate.txt -GL_EXT_blend_func_separate - GL_BLEND_DST_RGB_EXT 0x80C8 - GL_BLEND_SRC_RGB_EXT 0x80C9 - GL_BLEND_DST_ALPHA_EXT 0x80CA - GL_BLEND_SRC_ALPHA_EXT 0x80CB - void glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_logic_op b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_logic_op deleted file mode 100644 index e67cefae00..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_logic_op +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_blend_logic_op -http://www.opengl.org/registry/specs/gl/EXT/blend_logic_op.txt -GL_EXT_blend_logic_op diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_minmax b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_minmax deleted file mode 100644 index af567c0942..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_minmax +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_blend_minmax -http://www.opengl.org/registry/specs/gl/EXT/blend_minmax.txt -GL_EXT_blend_minmax - GL_FUNC_ADD_EXT 0x8006 - GL_MIN_EXT 0x8007 - GL_MAX_EXT 0x8008 - GL_BLEND_EQUATION_EXT 0x8009 - void glBlendEquationEXT (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_subtract b/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_subtract deleted file mode 100644 index 027e49e056..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_blend_subtract +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_blend_subtract -http://www.opengl.org/registry/specs/gl/EXT/blend_subtract.txt -GL_EXT_blend_subtract - GL_FUNC_SUBTRACT_EXT 0x800A - GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_clip_volume_hint b/Engine/lib/glew/auto/extensions/gl/GL_EXT_clip_volume_hint deleted file mode 100644 index 9de1cb6d6f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_clip_volume_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_clip_volume_hint -http://www.opengl.org/registry/specs/gl/EXT/clip_volume_hint.txt -GL_EXT_clip_volume_hint - GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cmyka b/Engine/lib/glew/auto/extensions/gl/GL_EXT_cmyka deleted file mode 100644 index 11c568db90..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cmyka +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_cmyka -http://www.opengl.org/registry/specs/gl/EXT/cmyka.txt -GL_EXT_cmyka - GL_CMYK_EXT 0x800C - GL_CMYKA_EXT 0x800D - GL_PACK_CMYK_HINT_EXT 0x800E - GL_UNPACK_CMYK_HINT_EXT 0x800F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_color_subtable b/Engine/lib/glew/auto/extensions/gl/GL_EXT_color_subtable deleted file mode 100644 index f50224367c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_color_subtable +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_color_subtable -http://www.opengl.org/registry/specs/gl/EXT/color_subtable.txt -GL_EXT_color_subtable - void glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data) - void glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_compiled_vertex_array b/Engine/lib/glew/auto/extensions/gl/GL_EXT_compiled_vertex_array deleted file mode 100644 index cc6ae26dd6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_compiled_vertex_array +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_compiled_vertex_array -http://www.opengl.org/registry/specs/gl/EXT/compiled_vertex_array.txt -GL_EXT_compiled_vertex_array - GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 - GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 - void glLockArraysEXT (GLint first, GLsizei count) - void glUnlockArraysEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_convolution b/Engine/lib/glew/auto/extensions/gl/GL_EXT_convolution deleted file mode 100644 index f2df4f084a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_convolution +++ /dev/null @@ -1,36 +0,0 @@ -GL_EXT_convolution -http://www.opengl.org/registry/specs/gl/EXT/convolution.txt -GL_EXT_convolution - GL_CONVOLUTION_1D_EXT 0x8010 - GL_CONVOLUTION_2D_EXT 0x8011 - GL_SEPARABLE_2D_EXT 0x8012 - GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 - GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 - GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 - GL_REDUCE_EXT 0x8016 - GL_CONVOLUTION_FORMAT_EXT 0x8017 - GL_CONVOLUTION_WIDTH_EXT 0x8018 - GL_CONVOLUTION_HEIGHT_EXT 0x8019 - GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A - GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B - GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C - GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D - GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E - GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F - GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 - GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 - GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 - GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 - void glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image) - void glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat param) - void glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params) - void glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint param) - void glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint* params) - void glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height) - void glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *image) - void glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint* params) - void glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span) - void glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_coordinate_frame b/Engine/lib/glew/auto/extensions/gl/GL_EXT_coordinate_frame deleted file mode 100644 index fc87321507..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_coordinate_frame +++ /dev/null @@ -1,19 +0,0 @@ -GL_EXT_coordinate_frame -http://www.opengl.org/registry/specs/gl/EXT/coordinate_frame.txt -GL_EXT_coordinate_frame - GL_TANGENT_ARRAY_EXT 0x8439 - GL_BINORMAL_ARRAY_EXT 0x843A - GL_CURRENT_TANGENT_EXT 0x843B - GL_CURRENT_BINORMAL_EXT 0x843C - GL_TANGENT_ARRAY_TYPE_EXT 0x843E - GL_TANGENT_ARRAY_STRIDE_EXT 0x843F - GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 - GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 - GL_TANGENT_ARRAY_POINTER_EXT 0x8442 - GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 - GL_MAP1_TANGENT_EXT 0x8444 - GL_MAP2_TANGENT_EXT 0x8445 - GL_MAP1_BINORMAL_EXT 0x8446 - GL_MAP2_BINORMAL_EXT 0x8447 - void glBinormalPointerEXT (GLenum type, GLsizei stride, GLvoid *pointer) - void glTangentPointerEXT (GLenum type, GLsizei stride, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_copy_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_copy_texture deleted file mode 100644 index 361407ed8b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_copy_texture +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_copy_texture -http://www.opengl.org/registry/specs/gl/EXT/copy_texture.txt -GL_EXT_copy_texture - void glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) - void glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) - void glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) - void glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cull_vertex b/Engine/lib/glew/auto/extensions/gl/GL_EXT_cull_vertex deleted file mode 100644 index fb8120c7ff..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_cull_vertex +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_cull_vertex -http://www.opengl.org/registry/specs/gl/EXT/cull_vertex.txt -GL_EXT_cull_vertex - GL_CULL_VERTEX_EXT 0x81AA - GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB - GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC - void glCullParameterdvEXT (GLenum pname, GLdouble* params) - void glCullParameterfvEXT (GLenum pname, GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_debug_marker b/Engine/lib/glew/auto/extensions/gl/GL_EXT_debug_marker deleted file mode 100644 index 9d0628c8fe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_debug_marker +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_debug_marker -http://www.khronos.org/registry/gles/extensions/EXT/EXT_debug_marker.txt -GL_EXT_debug_marker - void glInsertEventMarkerEXT (GLsizei length, const GLchar* marker) - void glPushGroupMarkerEXT (GLsizei length, const GLchar* marker) - void glPopGroupMarkerEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_depth_bounds_test b/Engine/lib/glew/auto/extensions/gl/GL_EXT_depth_bounds_test deleted file mode 100644 index 62528b7b0c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_depth_bounds_test +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_depth_bounds_test -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_depth_bounds_test.txt -GL_EXT_depth_bounds_test - GL_DEPTH_BOUNDS_TEST_EXT 0x8890 - GL_DEPTH_BOUNDS_EXT 0x8891 - void glDepthBoundsEXT (GLclampd zmin, GLclampd zmax) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_direct_state_access b/Engine/lib/glew/auto/extensions/gl/GL_EXT_direct_state_access deleted file mode 100644 index 851209e7e2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_direct_state_access +++ /dev/null @@ -1,219 +0,0 @@ -GL_EXT_direct_state_access -http://www.opengl.org/registry/specs/gl/EXT/direct_state_access.txt -GL_EXT_direct_state_access - GL_PROGRAM_MATRIX_EXT 0x8E2D - GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E - GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F - void glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture) - GLenum glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target) - void glClientAttribDefaultEXT (GLbitfield mask) - void glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data) - void glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) - void glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) - void glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) - void glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border) - void glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) - void glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width) - void glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) - void glDisableClientStateIndexedEXT (GLenum array, GLuint index) - void glDisableClientStateiEXT (GLenum array, GLuint index) - void glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index) - void glDisableVertexArrayEXT (GLuint vaobj, GLenum array) - void glEnableClientStateIndexedEXT (GLenum array, GLuint index) - void glEnableClientStateiEXT (GLenum array, GLuint index) - void glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index) - void glEnableVertexArrayEXT (GLuint vaobj, GLenum array) - void glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length) - void glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode) - void glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum* bufs) - void glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode) - void glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target) - void glGenerateTextureMipmapEXT (GLuint texture, GLenum target) - void glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLvoid *img) - void glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint level, GLvoid *img) - void glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble* params) - void glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble* params) - void glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat* params) - void glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat* params) - void glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint* param) - void glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat* params) - void glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params) - void glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params) - void glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params) - void glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint* params) - void glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels) - void glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params) - void glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params) - void glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params) - void glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint* params) - void glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat* params) - void glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint* params) - void glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint* params) - void glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void** params) - void glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data) - void glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params) - void glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint* params) - void glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint* params) - void glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble* params) - void glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat* params) - void glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, GLvoid *string) - void glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint* params) - void glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint* params) - void glGetPointerIndexedvEXT (GLenum target, GLuint index, GLvoid** params) - void glGetPointeri_vEXT (GLenum pname, GLuint index, GLvoid** params) - void glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels) - void glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params) - void glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params) - void glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint* params) - void glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint* params) - void glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat* params) - void glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint* params) - void glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint* param) - void glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint* param) - void glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLvoid** param) - void glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, GLvoid** param) - GLvoid * glMapNamedBufferEXT (GLuint buffer, GLenum access) - GLvoid * glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access) - void glMatrixFrustumEXT (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f) - void glMatrixLoadIdentityEXT (GLenum matrixMode) - void glMatrixLoadTransposedEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixLoadTransposefEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixLoaddEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixLoadfEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixMultTransposedEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixMultTransposefEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixMultdEXT (GLenum matrixMode, const GLdouble* m) - void glMatrixMultfEXT (GLenum matrixMode, const GLfloat* m) - void glMatrixOrthoEXT (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f) - void glMatrixPopEXT (GLenum matrixMode) - void glMatrixPushEXT (GLenum matrixMode) - void glMatrixRotatedEXT (GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z) - void glMatrixRotatefEXT (GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z) - void glMatrixScaledEXT (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z) - void glMatrixScalefEXT (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z) - void glMatrixTranslatedEXT (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z) - void glMatrixTranslatefEXT (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z) - void glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer) - void glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param) - void glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params) - void glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param) - void glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* params) - void glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param) - void glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params) - void glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param) - void glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params) - void glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param) - void glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint* params) - void glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* params) - void glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint* params) - void glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param) - void glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat* param) - void glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param) - void glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint* param) - void glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer) - void glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) - void glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) - void glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage) - void glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data) - void glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) - void glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) - void glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) - void glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level) - void glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face) - void glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer) - void glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble* params) - void glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat* params) - void glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint* params) - void glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint* params) - void glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params) - void glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params) - void glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params) - void glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string) - void glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height) - void glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) - void glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) - void glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0) - void glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform1iEXT (GLuint program, GLint location, GLint v0) - void glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0) - void glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1) - void glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1) - void glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1) - void glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2) - void glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2) - void glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2) - void glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) - void glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat* value) - void glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3) - void glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint* value) - void glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) - void glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint* value) - void glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) - void glPushClientAttribDefaultEXT (GLbitfield mask) - void glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer) - void glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint* params) - void glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint* params) - void glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param) - void glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat* param) - void glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param) - void glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint* param) - void glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer) - void glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) - void glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) - GLboolean glUnmapNamedBufferEXT (GLuint buffer) - void glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset) - void glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset) - void glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_buffers2 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_buffers2 deleted file mode 100644 index e075b7f46d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_buffers2 +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_draw_buffers2 -http://www.opengl.org/registry/specs/gl/EXT/draw_buffers2.txt -GL_EXT_draw_buffers2 - void glColorMaskIndexedEXT (GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a) - void glDisableIndexedEXT (GLenum target, GLuint index) - void glEnableIndexedEXT (GLenum target, GLuint index) - void glGetBooleanIndexedvEXT (GLenum value, GLuint index, GLboolean* data) - void glGetIntegerIndexedvEXT (GLenum value, GLuint index, GLint* data) - GLboolean glIsEnabledIndexedEXT (GLenum target, GLuint index) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_instanced b/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_instanced deleted file mode 100644 index afafa27f3e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_instanced +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_draw_instanced -http://developer.download.nvidia.com/opengl/specs/GL_EXT_draw_instanced.txt -GL_EXT_draw_instanced - void glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount) - void glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_range_elements b/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_range_elements deleted file mode 100644 index 347ce62eb2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_draw_range_elements +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_draw_range_elements -http://oss.sgi.com/projects/ogl-sample/registry/EXT/draw_range_elements.txt -GL_EXT_draw_range_elements - GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 - GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 - void glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fog_coord b/Engine/lib/glew/auto/extensions/gl/GL_EXT_fog_coord deleted file mode 100644 index ac7868aa32..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fog_coord +++ /dev/null @@ -1,16 +0,0 @@ -GL_EXT_fog_coord -http://oss.sgi.com/projects/ogl-sample/registry/EXT/fog_coord.txt -GL_EXT_fog_coord - GL_FOG_COORDINATE_SOURCE_EXT 0x8450 - GL_FOG_COORDINATE_EXT 0x8451 - GL_FRAGMENT_DEPTH_EXT 0x8452 - GL_CURRENT_FOG_COORDINATE_EXT 0x8453 - GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 - GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 - GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 - GL_FOG_COORDINATE_ARRAY_EXT 0x8457 - void glFogCoordfEXT (GLfloat coord) - void glFogCoordfvEXT (const GLfloat *coord) - void glFogCoorddEXT (GLdouble coord) - void glFogCoorddvEXT (const GLdouble *coord) - void glFogCoordPointerEXT (GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fragment_lighting b/Engine/lib/glew/auto/extensions/gl/GL_EXT_fragment_lighting deleted file mode 100644 index 1f93aac96c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_fragment_lighting +++ /dev/null @@ -1,35 +0,0 @@ -GL_EXT_fragment_lighting -http://www.opengl.org/registry/specs/gl/EXT/fragment_lighting.txt -GL_EXT_fragment_lighting - GL_FRAGMENT_LIGHTING_EXT 0x8400 - GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 - GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 - GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 - GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 - GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 - GL_CURRENT_RASTER_NORMAL_EXT 0x8406 - GL_LIGHT_ENV_MODE_EXT 0x8407 - GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 - GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 - GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A - GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B - GL_FRAGMENT_LIGHT0_EXT 0x840C - GL_FRAGMENT_LIGHT7_EXT 0x8413 - void glFragmentColorMaterialEXT (GLenum face, GLenum mode) - void glFragmentLightModelfEXT (GLenum pname, GLfloat param) - void glFragmentLightModelfvEXT (GLenum pname, GLfloat* params) - void glFragmentLightModeliEXT (GLenum pname, GLint param) - void glFragmentLightModelivEXT (GLenum pname, GLint* params) - void glFragmentLightfEXT (GLenum light, GLenum pname, GLfloat param) - void glFragmentLightfvEXT (GLenum light, GLenum pname, GLfloat* params) - void glFragmentLightiEXT (GLenum light, GLenum pname, GLint param) - void glFragmentLightivEXT (GLenum light, GLenum pname, GLint* params) - void glFragmentMaterialfEXT (GLenum face, GLenum pname, const GLfloat param) - void glFragmentMaterialfvEXT (GLenum face, GLenum pname, const GLfloat* params) - void glFragmentMaterialiEXT (GLenum face, GLenum pname, const GLint param) - void glFragmentMaterialivEXT (GLenum face, GLenum pname, const GLint* params) - void glGetFragmentLightfvEXT (GLenum light, GLenum pname, GLfloat* params) - void glGetFragmentLightivEXT (GLenum light, GLenum pname, GLint* params) - void glGetFragmentMaterialfvEXT (GLenum face, GLenum pname, const GLfloat* params) - void glGetFragmentMaterialivEXT (GLenum face, GLenum pname, const GLint* params) - void glLightEnviEXT (GLenum pname, GLint param) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_blit b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_blit deleted file mode 100644 index e2be219a3b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_blit +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_framebuffer_blit -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_blit.txt -GL_EXT_framebuffer_blit - GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 - GL_READ_FRAMEBUFFER_EXT 0x8CA8 - GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 - GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA - void glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample deleted file mode 100644 index 4f96470453..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_framebuffer_multisample -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_multisample.txt -GL_EXT_framebuffer_multisample - GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 - GL_MAX_SAMPLES_EXT 0x8D57 - void glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) - GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 - GL_MAX_SAMPLES_EXT 0x8D57 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample_blit_scaled b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample_blit_scaled deleted file mode 100644 index dc133c2a07..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_multisample_blit_scaled +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_framebuffer_multisample_blit_scaled -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_multisample_blit_scaled.txt -GL_EXT_framebuffer_multisample_blit_scaled - GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA - GL_SCALED_RESOLVE_NICEST_EXT 0x90BB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_object deleted file mode 100644 index bb3d5b23b8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_object +++ /dev/null @@ -1,71 +0,0 @@ -GL_EXT_framebuffer_object -http://www.opengl.org/registry/specs/gl/EXT/framebuffer_object.txt -GL_EXT_framebuffer_object - GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 - GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 - GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 - GL_RENDERBUFFER_BINDING_EXT 0x8CA7 - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 - GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 - GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 - GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 - GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA - GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB - GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC - GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD - GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF - GL_COLOR_ATTACHMENT0_EXT 0x8CE0 - GL_COLOR_ATTACHMENT1_EXT 0x8CE1 - GL_COLOR_ATTACHMENT2_EXT 0x8CE2 - GL_COLOR_ATTACHMENT3_EXT 0x8CE3 - GL_COLOR_ATTACHMENT4_EXT 0x8CE4 - GL_COLOR_ATTACHMENT5_EXT 0x8CE5 - GL_COLOR_ATTACHMENT6_EXT 0x8CE6 - GL_COLOR_ATTACHMENT7_EXT 0x8CE7 - GL_COLOR_ATTACHMENT8_EXT 0x8CE8 - GL_COLOR_ATTACHMENT9_EXT 0x8CE9 - GL_COLOR_ATTACHMENT10_EXT 0x8CEA - GL_COLOR_ATTACHMENT11_EXT 0x8CEB - GL_COLOR_ATTACHMENT12_EXT 0x8CEC - GL_COLOR_ATTACHMENT13_EXT 0x8CED - GL_COLOR_ATTACHMENT14_EXT 0x8CEE - GL_COLOR_ATTACHMENT15_EXT 0x8CEF - GL_DEPTH_ATTACHMENT_EXT 0x8D00 - GL_STENCIL_ATTACHMENT_EXT 0x8D20 - GL_FRAMEBUFFER_EXT 0x8D40 - GL_RENDERBUFFER_EXT 0x8D41 - GL_RENDERBUFFER_WIDTH_EXT 0x8D42 - GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 - GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 - GL_STENCIL_INDEX1_EXT 0x8D46 - GL_STENCIL_INDEX4_EXT 0x8D47 - GL_STENCIL_INDEX8_EXT 0x8D48 - GL_STENCIL_INDEX16_EXT 0x8D49 - GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 - GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 - GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 - GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 - GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 - GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 - void glBindFramebufferEXT (GLenum target, GLuint framebuffer) - void glBindRenderbufferEXT (GLenum target, GLuint renderbuffer) - GLenum glCheckFramebufferStatusEXT (GLenum target) - void glDeleteFramebuffersEXT (GLsizei n, const GLuint* framebuffers) - void glDeleteRenderbuffersEXT (GLsizei n, const GLuint* renderbuffers) - void glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) - void glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) - void glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset) - void glGenFramebuffersEXT (GLsizei n, GLuint* framebuffers) - void glGenRenderbuffersEXT (GLsizei n, GLuint* renderbuffers) - void glGenerateMipmapEXT (GLenum target) - void glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint* params) - void glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint* params) - GLboolean glIsFramebufferEXT (GLuint framebuffer) - GLboolean glIsRenderbufferEXT (GLuint renderbuffer) - void glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_sRGB deleted file mode 100644 index 4ca897b1fd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -GL_EXT_framebuffer_sRGB - GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 - GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_geometry_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_geometry_shader4 deleted file mode 100644 index f6f6785988..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_geometry_shader4 +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_geometry_shader4.txt -GL_EXT_geometry_shader4 - GL_GEOMETRY_SHADER_EXT 0x8DD9 - GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD - GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE - GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B - GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF - GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 - GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 - GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA - GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB - GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC - GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 - GL_LINES_ADJACENCY_EXT 0xA - GL_LINE_STRIP_ADJACENCY_EXT 0xB - GL_TRIANGLES_ADJACENCY_EXT 0xC - GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD - GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 - GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 - GL_PROGRAM_POINT_SIZE_EXT 0x8642 - void glProgramParameteriEXT (GLuint program, GLenum pname, GLint value) - void glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level) - void glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_program_parameters b/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_program_parameters deleted file mode 100644 index 9048c98d96..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_program_parameters +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_gpu_program_parameters -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_program_parameters.txt -GL_EXT_gpu_program_parameters - void glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) - void glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_shader4 deleted file mode 100644 index 0e89f0db06..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_gpu_shader4 +++ /dev/null @@ -1,63 +0,0 @@ -GL_EXT_gpu_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_EXT_gpu_shader4.txt -GL_EXT_gpu_shader4 - GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 - GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 - GL_SAMPLER_BUFFER_EXT 0x8DC2 - GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 - GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 - GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 - GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 - GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 - GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 - GL_INT_SAMPLER_1D_EXT 0x8DC9 - GL_INT_SAMPLER_2D_EXT 0x8DCA - GL_INT_SAMPLER_3D_EXT 0x8DCB - GL_INT_SAMPLER_CUBE_EXT 0x8DCC - GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD - GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE - GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF - GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 - GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 - GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 - GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 - GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 - GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 - GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 - GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 - GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD - void glGetUniformuivEXT (GLuint program, GLint location, GLuint *params) - void glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name) - GLint glGetFragDataLocationEXT (GLuint program, const GLchar *name) - void glUniform1uiEXT (GLint location, GLuint v0) - void glUniform2uiEXT (GLint location, GLuint v0, GLuint v1) - void glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2) - void glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) - void glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value) - void glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value) - void glVertexAttribI1iEXT (GLuint index, GLint x) - void glVertexAttribI2iEXT (GLuint index, GLint x, GLint y) - void glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z) - void glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w) - void glVertexAttribI1uiEXT (GLuint index, GLuint x) - void glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y) - void glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z) - void glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glVertexAttribI1ivEXT (GLuint index, const GLint *v) - void glVertexAttribI2ivEXT (GLuint index, const GLint *v) - void glVertexAttribI3ivEXT (GLuint index, const GLint *v) - void glVertexAttribI4ivEXT (GLuint index, const GLint *v) - void glVertexAttribI1uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI2uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI3uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4uivEXT (GLuint index, const GLuint *v) - void glVertexAttribI4bvEXT (GLuint index, const GLbyte *v) - void glVertexAttribI4svEXT (GLuint index, const GLshort *v) - void glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v) - void glVertexAttribI4usvEXT (GLuint index, const GLushort *v) - void glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params) - void glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_histogram b/Engine/lib/glew/auto/extensions/gl/GL_EXT_histogram deleted file mode 100644 index 4392ca63cb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_histogram +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_histogram -http://www.opengl.org/registry/specs/gl/EXT/histogram.txt -GL_EXT_histogram - GL_HISTOGRAM_EXT 0x8024 - GL_PROXY_HISTOGRAM_EXT 0x8025 - GL_HISTOGRAM_WIDTH_EXT 0x8026 - GL_HISTOGRAM_FORMAT_EXT 0x8027 - GL_HISTOGRAM_RED_SIZE_EXT 0x8028 - GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 - GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A - GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B - GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C - GL_HISTOGRAM_SINK_EXT 0x802D - GL_MINMAX_EXT 0x802E - GL_MINMAX_FORMAT_EXT 0x802F - GL_MINMAX_SINK_EXT 0x8030 - void glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint* params) - void glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) - void glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint* params) - void glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink) - void glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink) - void glResetHistogramEXT (GLenum target) - void glResetMinmaxEXT (GLenum target) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_array_formats b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_array_formats deleted file mode 100644 index 1fdd3d9e86..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_array_formats +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_index_array_formats -http://www.opengl.org/registry/specs/gl/EXT/index_array_formats.txt -GL_EXT_index_array_formats diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_func b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_func deleted file mode 100644 index 7802afff10..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_func +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_index_func -http://www.opengl.org/registry/specs/gl/EXT/index_func.txt -GL_EXT_index_func - void glIndexFuncEXT (GLenum func, GLfloat ref) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_material b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_material deleted file mode 100644 index 96012baf45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_material +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_index_material -http://www.opengl.org/registry/specs/gl/EXT/index_material.txt -GL_EXT_index_material - void glIndexMaterialEXT (GLenum face, GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_texture deleted file mode 100644 index dbd9e319ec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_index_texture +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_index_texture -http://www.opengl.org/registry/specs/gl/EXT/index_texture.txt -GL_EXT_index_texture diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_light_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_light_texture deleted file mode 100644 index bdfd545b3a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_light_texture +++ /dev/null @@ -1,15 +0,0 @@ -GL_EXT_light_texture -http://www.opengl.org/registry/specs/gl/EXT/light_texture.txt -GL_EXT_light_texture - GL_FRAGMENT_MATERIAL_EXT 0x8349 - GL_FRAGMENT_NORMAL_EXT 0x834A - GL_FRAGMENT_COLOR_EXT 0x834C - GL_ATTENUATION_EXT 0x834D - GL_SHADOW_ATTENUATION_EXT 0x834E - GL_TEXTURE_APPLICATION_MODE_EXT 0x834F - GL_TEXTURE_LIGHT_EXT 0x8350 - GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 - GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 - void glApplyTextureEXT (GLenum mode) - void glTextureLightEXT (GLenum pname) - void glTextureMaterialEXT (GLenum face, GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_misc_attribute b/Engine/lib/glew/auto/extensions/gl/GL_EXT_misc_attribute deleted file mode 100644 index 72504f6770..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_misc_attribute +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_misc_attribute -http://www.opengl.org/registry/specs/gl/EXT/misc_attribute.txt -GL_EXT_misc_attribute diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multi_draw_arrays b/Engine/lib/glew/auto/extensions/gl/GL_EXT_multi_draw_arrays deleted file mode 100644 index b9c81edfd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multi_draw_arrays +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_multi_draw_arrays -http://www.opengl.org/registry/specs/gl/EXT/multi_draw_arrays.txt -GL_EXT_multi_draw_arrays - void glMultiDrawArraysEXT (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount) - void glMultiDrawElementsEXT (GLenum mode, GLsizei* count, GLenum type, const GLvoid * const *indices, GLsizei primcount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multisample b/Engine/lib/glew/auto/extensions/gl/GL_EXT_multisample deleted file mode 100644 index 099f73502f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_multisample +++ /dev/null @@ -1,22 +0,0 @@ -GL_EXT_multisample -http://www.opengl.org/registry/specs/gl/EXT/wgl_multisample.txt -GL_EXT_multisample - GL_MULTISAMPLE_EXT 0x809D - GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E - GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F - GL_SAMPLE_MASK_EXT 0x80A0 - GL_1PASS_EXT 0x80A1 - GL_2PASS_0_EXT 0x80A2 - GL_2PASS_1_EXT 0x80A3 - GL_4PASS_0_EXT 0x80A4 - GL_4PASS_1_EXT 0x80A5 - GL_4PASS_2_EXT 0x80A6 - GL_4PASS_3_EXT 0x80A7 - GL_SAMPLE_BUFFERS_EXT 0x80A8 - GL_SAMPLES_EXT 0x80A9 - GL_SAMPLE_MASK_VALUE_EXT 0x80AA - GL_SAMPLE_MASK_INVERT_EXT 0x80AB - GL_SAMPLE_PATTERN_EXT 0x80AC - GL_MULTISAMPLE_BIT_EXT 0x20000000 - void glSampleMaskEXT (GLclampf value, GLboolean invert) - void glSamplePatternEXT (GLenum pattern) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_depth_stencil b/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_depth_stencil deleted file mode 100644 index 7dbc43dd02..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_depth_stencil +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_packed_depth_stencil -http://www.opengl.org/registry/specs/gl/EXT/packed_depth_stencil.txt -GL_EXT_packed_depth_stencil - GL_DEPTH_STENCIL_EXT 0x84F9 - GL_UNSIGNED_INT_24_8_EXT 0x84FA - GL_DEPTH24_STENCIL8_EXT 0x88F0 - GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_float b/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_float deleted file mode 100644 index bcb22557d6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_float +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -GL_EXT_packed_float - GL_R11F_G11F_B10F_EXT 0x8C3A - GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B - GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_pixels b/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_pixels deleted file mode 100644 index 85fc9df882..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_packed_pixels +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_packed_pixels -http://www.opengl.org/registry/specs/gl/EXT/packed_pixels.txt -GL_EXT_packed_pixels - GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 - GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 - GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 - GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 - GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_paletted_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_paletted_texture deleted file mode 100644 index f4e1a9e9d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_paletted_texture +++ /dev/null @@ -1,28 +0,0 @@ -GL_EXT_paletted_texture -http://www.opengl.org/registry/specs/gl/EXT/paletted_texture.txt -GL_EXT_paletted_texture - GL_TEXTURE_1D 0x0DE0 - GL_TEXTURE_2D 0x0DE1 - GL_PROXY_TEXTURE_1D 0x8063 - GL_PROXY_TEXTURE_2D 0x8064 - GL_COLOR_TABLE_FORMAT_EXT 0x80D8 - GL_COLOR_TABLE_WIDTH_EXT 0x80D9 - GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA - GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB - GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF - GL_COLOR_INDEX1_EXT 0x80E2 - GL_COLOR_INDEX2_EXT 0x80E3 - GL_COLOR_INDEX4_EXT 0x80E4 - GL_COLOR_INDEX8_EXT 0x80E5 - GL_COLOR_INDEX12_EXT 0x80E6 - GL_COLOR_INDEX16_EXT 0x80E7 - GL_TEXTURE_INDEX_SIZE_EXT 0x80ED - GL_TEXTURE_CUBE_MAP_ARB 0x8513 - GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B - void glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *data) - void glGetColorTableEXT (GLenum target, GLenum format, GLenum type, GLvoid *data) - void glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat* params) - void glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_buffer_object deleted file mode 100644 index a7f8f2c80e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_buffer_object +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_pixel_buffer_object -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_pixel_buffer_object.txt -GL_EXT_pixel_buffer_object - GL_PIXEL_PACK_BUFFER_EXT 0x88EB - GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC - GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED - GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform b/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform deleted file mode 100644 index 20eef6f2a7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform +++ /dev/null @@ -1,18 +0,0 @@ -GL_EXT_pixel_transform -http://www.opengl.org/registry/specs/gl/EXT/pixel_transform.txt -GL_EXT_pixel_transform - GL_PIXEL_TRANSFORM_2D_EXT 0x8330 - GL_PIXEL_MAG_FILTER_EXT 0x8331 - GL_PIXEL_MIN_FILTER_EXT 0x8332 - GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 - GL_CUBIC_EXT 0x8334 - GL_AVERAGE_EXT 0x8335 - GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 - GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 - GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 - void glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params) - void glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint* params) - void glPixelTransformParameterfEXT (GLenum target, GLenum pname, const GLfloat param) - void glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat* params) - void glPixelTransformParameteriEXT (GLenum target, GLenum pname, const GLint param) - void glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform_color_table b/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform_color_table deleted file mode 100644 index 5488505da8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_pixel_transform_color_table +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_pixel_transform_color_table -http://www.opengl.org/registry/specs/gl/EXT/pixel_transform_color_table.txt -GL_EXT_pixel_transform_color_table diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_point_parameters b/Engine/lib/glew/auto/extensions/gl/GL_EXT_point_parameters deleted file mode 100644 index 94679c107b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_point_parameters +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_point_parameters -http://www.opengl.org/registry/specs/gl/EXT/point_parameters.txt -GL_EXT_point_parameters - GL_POINT_SIZE_MIN_EXT 0x8126 - GL_POINT_SIZE_MAX_EXT 0x8127 - GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 - GL_DISTANCE_ATTENUATION_EXT 0x8129 - void glPointParameterfEXT (GLenum pname, GLfloat param) - void glPointParameterfvEXT (GLenum pname, const GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_polygon_offset b/Engine/lib/glew/auto/extensions/gl/GL_EXT_polygon_offset deleted file mode 100644 index bf7c1960d2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_polygon_offset +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_polygon_offset -http://www.opengl.org/registry/specs/gl/EXT/polygon_offset.txt -GL_EXT_polygon_offset - GL_POLYGON_OFFSET_EXT 0x8037 - GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 - GL_POLYGON_OFFSET_BIAS_EXT 0x8039 - void glPolygonOffsetEXT (GLfloat factor, GLfloat bias) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_provoking_vertex b/Engine/lib/glew/auto/extensions/gl/GL_EXT_provoking_vertex deleted file mode 100644 index 67190742d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_provoking_vertex +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_provoking_vertex -http://www.opengl.org/registry/specs/gl/EXT/provoking_vertex.txt -GL_EXT_provoking_vertex - GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C - GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D - GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E - GL_PROVOKING_VERTEX_EXT 0x8E4F - void glProvokingVertexEXT (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_rescale_normal b/Engine/lib/glew/auto/extensions/gl/GL_EXT_rescale_normal deleted file mode 100644 index 5d2fb22404..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_rescale_normal +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_rescale_normal -http://www.opengl.org/registry/specs/gl/EXT/rescale_normal.txt -GL_EXT_rescale_normal - GL_RESCALE_NORMAL_EXT 0x803A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_scene_marker b/Engine/lib/glew/auto/extensions/gl/GL_EXT_scene_marker deleted file mode 100644 index 16d8688929..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_scene_marker +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_scene_marker -http://www.opengl.org/registry/specs/gl/EXT/scene_marker.txt -GL_EXT_scene_marker - void glBeginSceneEXT (void) - void glEndSceneEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_secondary_color b/Engine/lib/glew/auto/extensions/gl/GL_EXT_secondary_color deleted file mode 100644 index e915455003..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_secondary_color +++ /dev/null @@ -1,27 +0,0 @@ -GL_EXT_secondary_color -http://oss.sgi.com/projects/ogl-sample/registry/EXT/secondary_color.txt -GL_EXT_secondary_color - GL_COLOR_SUM_EXT 0x8458 - GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 - GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A - GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B - GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C - GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D - GL_SECONDARY_COLOR_ARRAY_EXT 0x845E - void glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue) - void glSecondaryColor3bvEXT (const GLbyte *v) - void glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue) - void glSecondaryColor3dvEXT (const GLdouble *v) - void glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue) - void glSecondaryColor3fvEXT (const GLfloat *v) - void glSecondaryColor3iEXT (GLint red, GLint green, GLint blue) - void glSecondaryColor3ivEXT (const GLint *v) - void glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue) - void glSecondaryColor3svEXT (const GLshort *v) - void glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue) - void glSecondaryColor3ubvEXT (const GLubyte *v) - void glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue) - void glSecondaryColor3uivEXT (const GLuint *v) - void glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue) - void glSecondaryColor3usvEXT (const GLushort *v) - void glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_shader_objects b/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_shader_objects deleted file mode 100644 index 3a5b982eec..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_shader_objects +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_separate_shader_objects -http://www.opengl.org/registry/specs/gl/EXT/separate_shader_objects.txt -GL_EXT_separate_shader_objects - GL_ACTIVE_PROGRAM_EXT 0x8B8D - void glActiveProgramEXT (GLuint program) - GLuint glCreateShaderProgramEXT (GLenum type, const GLchar* string) - void glUseShaderProgramEXT (GLenum type, GLuint program) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_specular_color b/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_specular_color deleted file mode 100644 index 93d212eb0e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_separate_specular_color +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_separate_specular_color -http://www.opengl.org/registry/specs/gl/EXT/separate_specular_color.txt -GL_EXT_separate_specular_color - GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 - GL_SINGLE_COLOR_EXT 0x81F9 - GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shader_image_load_store b/Engine/lib/glew/auto/extensions/gl/GL_EXT_shader_image_load_store deleted file mode 100644 index 701874db36..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shader_image_load_store +++ /dev/null @@ -1,60 +0,0 @@ -GL_EXT_shader_image_load_store -http://www.opengl.org/registry/specs/gl/EXT/shader_image_load_store.txt -GL_EXT_shader_image_load_store - GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 - GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 - GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 - GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 - GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 - GL_COMMAND_BARRIER_BIT_EXT 0x00000040 - GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 - GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 - GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 - GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 - GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 - GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 - GL_MAX_IMAGE_UNITS_EXT 0x8F38 - GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 - GL_IMAGE_BINDING_NAME_EXT 0x8F3A - GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B - GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C - GL_IMAGE_BINDING_LAYER_EXT 0x8F3D - GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E - GL_IMAGE_1D_EXT 0x904C - GL_IMAGE_2D_EXT 0x904D - GL_IMAGE_3D_EXT 0x904E - GL_IMAGE_2D_RECT_EXT 0x904F - GL_IMAGE_CUBE_EXT 0x9050 - GL_IMAGE_BUFFER_EXT 0x9051 - GL_IMAGE_1D_ARRAY_EXT 0x9052 - GL_IMAGE_2D_ARRAY_EXT 0x9053 - GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 - GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 - GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 - GL_INT_IMAGE_1D_EXT 0x9057 - GL_INT_IMAGE_2D_EXT 0x9058 - GL_INT_IMAGE_3D_EXT 0x9059 - GL_INT_IMAGE_2D_RECT_EXT 0x905A - GL_INT_IMAGE_CUBE_EXT 0x905B - GL_INT_IMAGE_BUFFER_EXT 0x905C - GL_INT_IMAGE_1D_ARRAY_EXT 0x905D - GL_INT_IMAGE_2D_ARRAY_EXT 0x905E - GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F - GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 - GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 - GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 - GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 - GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 - GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 - GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 - GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 - GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 - GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 - GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B - GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C - GL_MAX_IMAGE_SAMPLES_EXT 0x906D - GL_IMAGE_BINDING_FORMAT_EXT 0x906E - GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF - void glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format) - void glMemoryBarrierEXT (GLbitfield barriers) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shadow_funcs b/Engine/lib/glew/auto/extensions/gl/GL_EXT_shadow_funcs deleted file mode 100644 index 2d9ff5c684..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shadow_funcs +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_shadow_funcs -http://www.opengl.org/registry/specs/gl/EXT/shadow_funcs.txt -GL_EXT_shadow_funcs diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shared_texture_palette b/Engine/lib/glew/auto/extensions/gl/GL_EXT_shared_texture_palette deleted file mode 100644 index 2f03293a62..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_shared_texture_palette +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_shared_texture_palette -http://www.opengl.org/registry/specs/gl/EXT/shared_texture_palette.txt -GL_EXT_shared_texture_palette - GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_clear_tag b/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_clear_tag deleted file mode 100644 index 7fe0f86da0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_clear_tag +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_stencil_clear_tag -http://www.opengl.org/registry/specs/gl/EXT/stencil_clear_tag.txt -GL_EXT_stencil_clear_tag - GL_STENCIL_TAG_BITS_EXT 0x88F2 - GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_two_side b/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_two_side deleted file mode 100644 index fdd1017010..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_two_side +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_stencil_two_side -http://www.opengl.org/registry/specs/gl/EXT/stencil_two_side.txt -GL_EXT_stencil_two_side - GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 - GL_ACTIVE_STENCIL_FACE_EXT 0x8911 - void glActiveStencilFaceEXT (GLenum face) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_wrap b/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_wrap deleted file mode 100644 index 9fdf4313bd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_stencil_wrap +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_stencil_wrap -http://www.opengl.org/registry/specs/gl/EXT/stencil_wrap.txt -GL_EXT_stencil_wrap - GL_INCR_WRAP_EXT 0x8507 - GL_DECR_WRAP_EXT 0x8508 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_subtexture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_subtexture deleted file mode 100644 index 39c8c704a6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_subtexture +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_subtexture -http://www.opengl.org/registry/specs/gl/EXT/subtexture.txt -GL_EXT_subtexture - void glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture deleted file mode 100644 index 7087c88024..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture +++ /dev/null @@ -1,45 +0,0 @@ -GL_EXT_texture -http://www.opengl.org/registry/specs/gl/EXT/texture.txt -GL_EXT_texture - GL_ALPHA4_EXT 0x803B - GL_ALPHA8_EXT 0x803C - GL_ALPHA12_EXT 0x803D - GL_ALPHA16_EXT 0x803E - GL_LUMINANCE4_EXT 0x803F - GL_LUMINANCE8_EXT 0x8040 - GL_LUMINANCE12_EXT 0x8041 - GL_LUMINANCE16_EXT 0x8042 - GL_LUMINANCE4_ALPHA4_EXT 0x8043 - GL_LUMINANCE6_ALPHA2_EXT 0x8044 - GL_LUMINANCE8_ALPHA8_EXT 0x8045 - GL_LUMINANCE12_ALPHA4_EXT 0x8046 - GL_LUMINANCE12_ALPHA12_EXT 0x8047 - GL_LUMINANCE16_ALPHA16_EXT 0x8048 - GL_INTENSITY_EXT 0x8049 - GL_INTENSITY4_EXT 0x804A - GL_INTENSITY8_EXT 0x804B - GL_INTENSITY12_EXT 0x804C - GL_INTENSITY16_EXT 0x804D - GL_RGB2_EXT 0x804E - GL_RGB4_EXT 0x804F - GL_RGB5_EXT 0x8050 - GL_RGB8_EXT 0x8051 - GL_RGB10_EXT 0x8052 - GL_RGB12_EXT 0x8053 - GL_RGB16_EXT 0x8054 - GL_RGBA2_EXT 0x8055 - GL_RGBA4_EXT 0x8056 - GL_RGB5_A1_EXT 0x8057 - GL_RGBA8_EXT 0x8058 - GL_RGB10_A2_EXT 0x8059 - GL_RGBA12_EXT 0x805A - GL_RGBA16_EXT 0x805B - GL_TEXTURE_RED_SIZE_EXT 0x805C - GL_TEXTURE_GREEN_SIZE_EXT 0x805D - GL_TEXTURE_BLUE_SIZE_EXT 0x805E - GL_TEXTURE_ALPHA_SIZE_EXT 0x805F - GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 - GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 - GL_REPLACE_EXT 0x8062 - GL_PROXY_TEXTURE_1D_EXT 0x8063 - GL_PROXY_TEXTURE_2D_EXT 0x8064 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture3D b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture3D deleted file mode 100644 index 86a272b5c6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture3D +++ /dev/null @@ -1,13 +0,0 @@ -GL_EXT_texture3D -http://www.opengl.org/registry/specs/gl/EXT/texture3D.txt -GL_EXT_texture3D - GL_PACK_SKIP_IMAGES_EXT 0x806B - GL_PACK_IMAGE_HEIGHT_EXT 0x806C - GL_UNPACK_SKIP_IMAGES_EXT 0x806D - GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E - GL_TEXTURE_3D_EXT 0x806F - GL_PROXY_TEXTURE_3D_EXT 0x8070 - GL_TEXTURE_DEPTH_EXT 0x8071 - GL_TEXTURE_WRAP_R_EXT 0x8072 - GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 - void glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_array b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_array deleted file mode 100644 index 11877f0e56..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_array +++ /dev/null @@ -1,12 +0,0 @@ -GL_EXT_texture_array -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_array.txt -GL_EXT_texture_array - GL_TEXTURE_1D_ARRAY_EXT 0x8C18 - GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 - GL_TEXTURE_2D_ARRAY_EXT 0x8C1A - GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B - GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C - GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D - GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF - GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E - void glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_buffer_object deleted file mode 100644 index c00e1f3367..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_buffer_object +++ /dev/null @@ -1,9 +0,0 @@ -GL_EXT_texture_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_buffer_object.txt -GL_EXT_texture_buffer_object - GL_TEXTURE_BUFFER_EXT 0x8C2A - GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B - GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C - GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D - GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E - void glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_dxt1 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_dxt1 deleted file mode 100644 index 84608288ef..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_dxt1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_texture_compression_dxt1 -http://www.opengl.org/registry/specs/gl/EXT/texture_compression_dxt1.txt -GL_EXT_texture_compression_dxt1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_latc b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_latc deleted file mode 100644 index ddf8d26449..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_latc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_latc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_latc.txt -GL_EXT_texture_compression_latc - GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 - GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 - GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 - GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_rgtc b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_rgtc deleted file mode 100644 index 7c5c57ff83..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_rgtc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_rgtc -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_compression_rgtc.txt -GL_EXT_texture_compression_rgtc - GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB - GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC - GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD - GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_s3tc b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_s3tc deleted file mode 100644 index fb9aa97413..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_compression_s3tc +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_compression_s3tc -http://www.opengl.org/registry/specs/gl/EXT/texture_compression_s3tc.txt -GL_EXT_texture_compression_s3tc - GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 - GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 - GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 - GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_cube_map b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_cube_map deleted file mode 100644 index 5909f4803c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_cube_map +++ /dev/null @@ -1,15 +0,0 @@ -GL_EXT_texture_cube_map -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_texture_cube_map.txt -GL_EXT_texture_cube_map - GL_NORMAL_MAP_EXT 0x8511 - GL_REFLECTION_MAP_EXT 0x8512 - GL_TEXTURE_CUBE_MAP_EXT 0x8513 - GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 - GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A - GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B - GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_edge_clamp b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_edge_clamp deleted file mode 100644 index 4df0997d74..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_edge_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_texture_edge_clamp -http://www.opengl.org/developers/documentation/Version1.2/1.2specs/texture_edge_clamp.txt -GL_EXT_texture_edge_clamp - GL_CLAMP_TO_EDGE_EXT 0x812F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env deleted file mode 100644 index 86601de348..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_texture_env -http://www.opengl.org/registry/specs/gl/EXT/texture_env.txt -GL_EXT_texture_env diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_add b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_add deleted file mode 100644 index b93523f967..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_add +++ /dev/null @@ -1,3 +0,0 @@ -GL_EXT_texture_env_add -http://www.opengl.org/registry/specs/gl/EXT/texture_env_add.txt -GL_EXT_texture_env_add diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_combine b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_combine deleted file mode 100644 index cc917f5103..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_combine +++ /dev/null @@ -1,24 +0,0 @@ -GL_EXT_texture_env_combine -http://www.opengl.org/registry/specs/gl/EXT/texture_env_combine.txt -GL_EXT_texture_env_combine - GL_COMBINE_EXT 0x8570 - GL_COMBINE_RGB_EXT 0x8571 - GL_COMBINE_ALPHA_EXT 0x8572 - GL_RGB_SCALE_EXT 0x8573 - GL_ADD_SIGNED_EXT 0x8574 - GL_INTERPOLATE_EXT 0x8575 - GL_CONSTANT_EXT 0x8576 - GL_PRIMARY_COLOR_EXT 0x8577 - GL_PREVIOUS_EXT 0x8578 - GL_SOURCE0_RGB_EXT 0x8580 - GL_SOURCE1_RGB_EXT 0x8581 - GL_SOURCE2_RGB_EXT 0x8582 - GL_SOURCE0_ALPHA_EXT 0x8588 - GL_SOURCE1_ALPHA_EXT 0x8589 - GL_SOURCE2_ALPHA_EXT 0x858A - GL_OPERAND0_RGB_EXT 0x8590 - GL_OPERAND1_RGB_EXT 0x8591 - GL_OPERAND2_RGB_EXT 0x8592 - GL_OPERAND0_ALPHA_EXT 0x8598 - GL_OPERAND1_ALPHA_EXT 0x8599 - GL_OPERAND2_ALPHA_EXT 0x859A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_dot3 b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_dot3 deleted file mode 100644 index f21c7fd3bd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_env_dot3 +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_texture_env_dot3 -http://www.opengl.org/registry/specs/gl/EXT/texture_env_dot3.txt -GL_EXT_texture_env_dot3 - GL_DOT3_RGB_EXT 0x8740 - GL_DOT3_RGBA_EXT 0x8741 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_filter_anisotropic b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_filter_anisotropic deleted file mode 100644 index 8091701cb8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_filter_anisotropic +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_texture_filter_anisotropic -http://www.opengl.org/registry/specs/gl/EXT/texture_filter_anisotropic.txt -GL_EXT_texture_filter_anisotropic - GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE - GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_integer b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_integer deleted file mode 100644 index 1c57e40d87..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_integer +++ /dev/null @@ -1,56 +0,0 @@ -GL_EXT_texture_integer -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_integer.txt -GL_EXT_texture_integer - GL_RGBA32UI_EXT 0x8D70 - GL_RGB32UI_EXT 0x8D71 - GL_ALPHA32UI_EXT 0x8D72 - GL_INTENSITY32UI_EXT 0x8D73 - GL_LUMINANCE32UI_EXT 0x8D74 - GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 - GL_RGBA16UI_EXT 0x8D76 - GL_RGB16UI_EXT 0x8D77 - GL_ALPHA16UI_EXT 0x8D78 - GL_INTENSITY16UI_EXT 0x8D79 - GL_LUMINANCE16UI_EXT 0x8D7A - GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B - GL_RGBA8UI_EXT 0x8D7C - GL_RGB8UI_EXT 0x8D7D - GL_ALPHA8UI_EXT 0x8D7E - GL_INTENSITY8UI_EXT 0x8D7F - GL_LUMINANCE8UI_EXT 0x8D80 - GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 - GL_RGBA32I_EXT 0x8D82 - GL_RGB32I_EXT 0x8D83 - GL_ALPHA32I_EXT 0x8D84 - GL_INTENSITY32I_EXT 0x8D85 - GL_LUMINANCE32I_EXT 0x8D86 - GL_LUMINANCE_ALPHA32I_EXT 0x8D87 - GL_RGBA16I_EXT 0x8D88 - GL_RGB16I_EXT 0x8D89 - GL_ALPHA16I_EXT 0x8D8A - GL_INTENSITY16I_EXT 0x8D8B - GL_LUMINANCE16I_EXT 0x8D8C - GL_LUMINANCE_ALPHA16I_EXT 0x8D8D - GL_RGBA8I_EXT 0x8D8E - GL_RGB8I_EXT 0x8D8F - GL_ALPHA8I_EXT 0x8D90 - GL_INTENSITY8I_EXT 0x8D91 - GL_LUMINANCE8I_EXT 0x8D92 - GL_LUMINANCE_ALPHA8I_EXT 0x8D93 - GL_RED_INTEGER_EXT 0x8D94 - GL_GREEN_INTEGER_EXT 0x8D95 - GL_BLUE_INTEGER_EXT 0x8D96 - GL_ALPHA_INTEGER_EXT 0x8D97 - GL_RGB_INTEGER_EXT 0x8D98 - GL_RGBA_INTEGER_EXT 0x8D99 - GL_BGR_INTEGER_EXT 0x8D9A - GL_BGRA_INTEGER_EXT 0x8D9B - GL_LUMINANCE_INTEGER_EXT 0x8D9C - GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D - GL_RGBA_INTEGER_MODE_EXT 0x8D9E - void glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params) - void glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params) - void glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params) - void glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params) - void glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha) - void glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_lod_bias b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_lod_bias deleted file mode 100644 index 4e6978369b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_lod_bias +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_lod_bias -http://www.opengl.org/registry/specs/gl/EXT/texture_lod_bias.txt -GL_EXT_texture_lod_bias - GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD - GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 - GL_TEXTURE_LOD_BIAS_EXT 0x8501 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_mirror_clamp b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_mirror_clamp deleted file mode 100644 index 1bad3c3c38..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_mirror_clamp +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_mirror_clamp -http://www.opengl.org/registry/specs/gl/EXT/texture_mirror_clamp.txt -GL_EXT_texture_mirror_clamp - GL_MIRROR_CLAMP_EXT 0x8742 - GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 - GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_object deleted file mode 100644 index 5885a1febe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_object +++ /dev/null @@ -1,14 +0,0 @@ -GL_EXT_texture_object -http://www.opengl.org/registry/specs/gl/EXT/texture_object.txt -GL_EXT_texture_object - GL_TEXTURE_PRIORITY_EXT 0x8066 - GL_TEXTURE_RESIDENT_EXT 0x8067 - GL_TEXTURE_1D_BINDING_EXT 0x8068 - GL_TEXTURE_2D_BINDING_EXT 0x8069 - GL_TEXTURE_3D_BINDING_EXT 0x806A - GLboolean glAreTexturesResidentEXT (GLsizei n, const GLuint* textures, GLboolean* residences) - void glBindTextureEXT (GLenum target, GLuint texture) - void glDeleteTexturesEXT (GLsizei n, const GLuint* textures) - void glGenTexturesEXT (GLsizei n, GLuint* textures) - GLboolean glIsTextureEXT (GLuint texture) - void glPrioritizeTexturesEXT (GLsizei n, const GLuint* textures, const GLclampf* priorities) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_perturb_normal b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_perturb_normal deleted file mode 100644 index b376846627..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_perturb_normal +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_perturb_normal -http://www.opengl.org/registry/specs/gl/EXT/texture_perturb_normal.txt -GL_EXT_texture_perturb_normal - GL_PERTURB_EXT 0x85AE - GL_TEXTURE_NORMAL_EXT 0x85AF - void glTextureNormalEXT (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_rectangle deleted file mode 100644 index 4028a9e671..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_rectangle +++ /dev/null @@ -1,7 +0,0 @@ -GL_EXT_texture_rectangle -http://developer.apple.com/opengl/extensions/ext_texture_rectangle.html -GL_EXT_texture_rectangle - GL_TEXTURE_RECTANGLE_EXT 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB deleted file mode 100644 index f68917a680..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB +++ /dev/null @@ -1,19 +0,0 @@ -GL_EXT_texture_sRGB -http://www.opengl.org/registry/specs/gl/EXT/texture_sRGB.txt -GL_EXT_texture_sRGB - GL_SRGB_EXT 0x8C40 - GL_SRGB8_EXT 0x8C41 - GL_SRGB_ALPHA_EXT 0x8C42 - GL_SRGB8_ALPHA8_EXT 0x8C43 - GL_SLUMINANCE_ALPHA_EXT 0x8C44 - GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 - GL_SLUMINANCE_EXT 0x8C46 - GL_SLUMINANCE8_EXT 0x8C47 - GL_COMPRESSED_SRGB_EXT 0x8C48 - GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 - GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A - GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B - GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C - GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D - GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E - GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB_decode b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB_decode deleted file mode 100644 index e03f31926f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_sRGB_decode +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_sRGB_decode -http://www.opengl.org/registry/specs/gl/EXT/texture_sRGB_decode.txt -GL_EXT_texture_sRGB_decode - GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 - GL_DECODE_EXT 0x8A49 - GL_SKIP_DECODE_EXT 0x8A4A diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_shared_exponent b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_shared_exponent deleted file mode 100644 index 4ff7efcd35..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_shared_exponent +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_texture_shared_exponent -http://developer.download.nvidia.com/opengl/specs/GL_EXT_texture_shared_exponent.txt -GL_EXT_texture_shared_exponent - GL_RGB9_E5_EXT 0x8C3D - GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E - GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_snorm b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_snorm deleted file mode 100644 index b516d46ae0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_snorm +++ /dev/null @@ -1,28 +0,0 @@ -GL_EXT_texture_snorm -http://www.opengl.org/registry/specs/gl/EXT/texture_snorm.txt -GL_EXT_texture_snorm - GL_RED_SNORM 0x8F90 - GL_RG_SNORM 0x8F91 - GL_RGB_SNORM 0x8F92 - GL_RGBA_SNORM 0x8F93 - GL_R8_SNORM 0x8F94 - GL_RG8_SNORM 0x8F95 - GL_RGB8_SNORM 0x8F96 - GL_RGBA8_SNORM 0x8F97 - GL_R16_SNORM 0x8F98 - GL_RG16_SNORM 0x8F99 - GL_RGB16_SNORM 0x8F9A - GL_RGBA16_SNORM 0x8F9B - GL_SIGNED_NORMALIZED 0x8F9C - GL_ALPHA_SNORM 0x9010 - GL_LUMINANCE_SNORM 0x9011 - GL_LUMINANCE_ALPHA_SNORM 0x9012 - GL_INTENSITY_SNORM 0x9013 - GL_ALPHA8_SNORM 0x9014 - GL_LUMINANCE8_SNORM 0x9015 - GL_LUMINANCE8_ALPHA8_SNORM 0x9016 - GL_INTENSITY8_SNORM 0x9017 - GL_ALPHA16_SNORM 0x9018 - GL_LUMINANCE16_SNORM 0x9019 - GL_LUMINANCE16_ALPHA16_SNORM 0x901A - GL_INTENSITY16_SNORM 0x901B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_swizzle b/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_swizzle deleted file mode 100644 index c2cffee1e9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_texture_swizzle +++ /dev/null @@ -1,8 +0,0 @@ -GL_EXT_texture_swizzle -http://www.opengl.org/registry/specs/gl/EXT/texture_swizzle.txt -GL_EXT_texture_swizzle - GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 - GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 - GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 - GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 - GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_timer_query b/Engine/lib/glew/auto/extensions/gl/GL_EXT_timer_query deleted file mode 100644 index 390e6fc0cd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_timer_query +++ /dev/null @@ -1,6 +0,0 @@ -GL_EXT_timer_query -http://www.nvidia.com/dev_content/nvopenglspecs/GL_EXT_timer_query.txt -GL_EXT_timer_query - GL_TIME_ELAPSED_EXT 0x88BF - void glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64EXT *params) - void glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64EXT *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_transform_feedback b/Engine/lib/glew/auto/extensions/gl/GL_EXT_transform_feedback deleted file mode 100644 index 4ca6e53966..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_transform_feedback +++ /dev/null @@ -1,25 +0,0 @@ -GL_EXT_transform_feedback -http://www.opengl.org/registry/specs/gl/EXT/transform_feedback.txt -GL_EXT_transform_feedback - GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 - GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 - GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 - GL_PRIMITIVES_GENERATED_EXT 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 - GL_RASTERIZER_DISCARD_EXT 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B - GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C - GL_SEPARATE_ATTRIBS_EXT 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F - void glBeginTransformFeedbackEXT (GLenum primitiveMode) - void glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer) - void glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset) - void glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glEndTransformFeedbackEXT (void) - void glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, GLchar *name) - void glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar * const* varyings, GLenum bufferMode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array deleted file mode 100644 index 6804627448..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array +++ /dev/null @@ -1,44 +0,0 @@ -GL_EXT_vertex_array -http://www.opengl.org/registry/specs/gl/EXT/vertex_array.txt -GL_EXT_vertex_array - GL_DOUBLE_EXT 0x140A - GL_VERTEX_ARRAY_EXT 0x8074 - GL_NORMAL_ARRAY_EXT 0x8075 - GL_COLOR_ARRAY_EXT 0x8076 - GL_INDEX_ARRAY_EXT 0x8077 - GL_TEXTURE_COORD_ARRAY_EXT 0x8078 - GL_EDGE_FLAG_ARRAY_EXT 0x8079 - GL_VERTEX_ARRAY_SIZE_EXT 0x807A - GL_VERTEX_ARRAY_TYPE_EXT 0x807B - GL_VERTEX_ARRAY_STRIDE_EXT 0x807C - GL_VERTEX_ARRAY_COUNT_EXT 0x807D - GL_NORMAL_ARRAY_TYPE_EXT 0x807E - GL_NORMAL_ARRAY_STRIDE_EXT 0x807F - GL_NORMAL_ARRAY_COUNT_EXT 0x8080 - GL_COLOR_ARRAY_SIZE_EXT 0x8081 - GL_COLOR_ARRAY_TYPE_EXT 0x8082 - GL_COLOR_ARRAY_STRIDE_EXT 0x8083 - GL_COLOR_ARRAY_COUNT_EXT 0x8084 - GL_INDEX_ARRAY_TYPE_EXT 0x8085 - GL_INDEX_ARRAY_STRIDE_EXT 0x8086 - GL_INDEX_ARRAY_COUNT_EXT 0x8087 - GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 - GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 - GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A - GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B - GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C - GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D - GL_VERTEX_ARRAY_POINTER_EXT 0x808E - GL_NORMAL_ARRAY_POINTER_EXT 0x808F - GL_COLOR_ARRAY_POINTER_EXT 0x8090 - GL_INDEX_ARRAY_POINTER_EXT 0x8091 - GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 - GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 - void glArrayElementEXT (GLint i) - void glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glDrawArraysEXT (GLenum mode, GLint first, GLsizei count) - void glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean* pointer) - void glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) - void glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array_bgra b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array_bgra deleted file mode 100644 index 640773d240..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_array_bgra +++ /dev/null @@ -1,4 +0,0 @@ -GL_EXT_vertex_array_bgra -http://www.opengl.org/registry/specs/gl/EXT/vertex_array_bgra.txt -GL_EXT_vertex_array_bgra - GL_BGRA 0x80E1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_attrib_64bit b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_attrib_64bit deleted file mode 100644 index 969030d1ae..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_attrib_64bit +++ /dev/null @@ -1,26 +0,0 @@ -GL_EXT_vertex_attrib_64bit -http://www.opengl.org/registry/specs/gl/EXT/vertex_attrib_64bit.txt -GL_EXT_vertex_attrib_64bit - GL_DOUBLE_MAT2_EXT 0x8F46 - GL_DOUBLE_MAT3_EXT 0x8F47 - GL_DOUBLE_MAT4_EXT 0x8F48 - GL_DOUBLE_MAT2x3_EXT 0x8F49 - GL_DOUBLE_MAT2x4_EXT 0x8F4A - GL_DOUBLE_MAT3x2_EXT 0x8F4B - GL_DOUBLE_MAT3x4_EXT 0x8F4C - GL_DOUBLE_MAT4x2_EXT 0x8F4D - GL_DOUBLE_MAT4x3_EXT 0x8F4E - GL_DOUBLE_VEC2_EXT 0x8FFC - GL_DOUBLE_VEC3_EXT 0x8FFD - GL_DOUBLE_VEC4_EXT 0x8FFE - void glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble* params) - void glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset) - void glVertexAttribL1dEXT (GLuint index, GLdouble x) - void glVertexAttribL1dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y) - void glVertexAttribL2dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttribL3dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttribL4dvEXT (GLuint index, const GLdouble* v) - void glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_shader b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_shader deleted file mode 100644 index eb125b6083..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_shader +++ /dev/null @@ -1,156 +0,0 @@ -GL_EXT_vertex_shader -http://oss.sgi.com/projects/ogl-sample/registry/EXT/vertex_shader.txt -GL_EXT_vertex_shader - GL_VERTEX_SHADER_EXT 0x8780 - GL_VERTEX_SHADER_BINDING_EXT 0x8781 - GL_OP_INDEX_EXT 0x8782 - GL_OP_NEGATE_EXT 0x8783 - GL_OP_DOT3_EXT 0x8784 - GL_OP_DOT4_EXT 0x8785 - GL_OP_MUL_EXT 0x8786 - GL_OP_ADD_EXT 0x8787 - GL_OP_MADD_EXT 0x8788 - GL_OP_FRAC_EXT 0x8789 - GL_OP_MAX_EXT 0x878A - GL_OP_MIN_EXT 0x878B - GL_OP_SET_GE_EXT 0x878C - GL_OP_SET_LT_EXT 0x878D - GL_OP_CLAMP_EXT 0x878E - GL_OP_FLOOR_EXT 0x878F - GL_OP_ROUND_EXT 0x8790 - GL_OP_EXP_BASE_2_EXT 0x8791 - GL_OP_LOG_BASE_2_EXT 0x8792 - GL_OP_POWER_EXT 0x8793 - GL_OP_RECIP_EXT 0x8794 - GL_OP_RECIP_SQRT_EXT 0x8795 - GL_OP_SUB_EXT 0x8796 - GL_OP_CROSS_PRODUCT_EXT 0x8797 - GL_OP_MULTIPLY_MATRIX_EXT 0x8798 - GL_OP_MOV_EXT 0x8799 - GL_OUTPUT_VERTEX_EXT 0x879A - GL_OUTPUT_COLOR0_EXT 0x879B - GL_OUTPUT_COLOR1_EXT 0x879C - GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D - GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E - GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F - GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 - GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 - GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 - GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 - GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 - GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 - GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 - GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 - GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 - GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 - GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA - GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB - GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC - GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD - GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE - GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF - GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 - GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 - GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 - GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 - GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 - GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 - GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 - GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 - GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 - GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 - GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA - GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB - GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC - GL_OUTPUT_FOG_EXT 0x87BD - GL_SCALAR_EXT 0x87BE - GL_VECTOR_EXT 0x87BF - GL_MATRIX_EXT 0x87C0 - GL_VARIANT_EXT 0x87C1 - GL_INVARIANT_EXT 0x87C2 - GL_LOCAL_CONSTANT_EXT 0x87C3 - GL_LOCAL_EXT 0x87C4 - GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 - GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 - GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 - GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 - GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 - GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA - GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB - GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE - GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF - GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 - GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 - GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 - GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 - GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 - GL_X_EXT 0x87D5 - GL_Y_EXT 0x87D6 - GL_Z_EXT 0x87D7 - GL_W_EXT 0x87D8 - GL_NEGATIVE_X_EXT 0x87D9 - GL_NEGATIVE_Y_EXT 0x87DA - GL_NEGATIVE_Z_EXT 0x87DB - GL_NEGATIVE_W_EXT 0x87DC - GL_ZERO_EXT 0x87DD - GL_ONE_EXT 0x87DE - GL_NEGATIVE_ONE_EXT 0x87DF - GL_NORMALIZED_RANGE_EXT 0x87E0 - GL_FULL_RANGE_EXT 0x87E1 - GL_CURRENT_VERTEX_EXT 0x87E2 - GL_MVP_MATRIX_EXT 0x87E3 - GL_VARIANT_VALUE_EXT 0x87E4 - GL_VARIANT_DATATYPE_EXT 0x87E5 - GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 - GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 - GL_VARIANT_ARRAY_EXT 0x87E8 - GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 - GL_INVARIANT_VALUE_EXT 0x87EA - GL_INVARIANT_DATATYPE_EXT 0x87EB - GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC - GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED - - void glBeginVertexShaderEXT (void) - void glEndVertexShaderEXT (void) - void glBindVertexShaderEXT (GLuint id) - GLuint glGenVertexShadersEXT (GLuint range) - void glDeleteVertexShaderEXT (GLuint id) - void glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1) - void glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2) - void glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3) - void glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW) - void glInsertComponentEXT (GLuint res, GLuint src, GLuint num) - void glExtractComponentEXT (GLuint res, GLuint src, GLuint num) - GLuint glGenSymbolsEXT (GLenum dataType, GLenum storageType, GLenum range, GLuint components) - void glSetInvariantEXT (GLuint id, GLenum type, GLvoid *addr) - void glSetLocalConstantEXT (GLuint id, GLenum type, GLvoid *addr) - void glVariantbvEXT (GLuint id, GLbyte *addr) - void glVariantsvEXT (GLuint id, GLshort *addr) - void glVariantivEXT (GLuint id, GLint *addr) - void glVariantfvEXT (GLuint id, GLfloat *addr) - void glVariantdvEXT (GLuint id, GLdouble *addr) - void glVariantubvEXT (GLuint id, GLubyte *addr) - void glVariantusvEXT (GLuint id, GLushort *addr) - void glVariantuivEXT (GLuint id, GLuint *addr) - void glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, GLvoid *addr) - void glEnableVariantClientStateEXT (GLuint id) - void glDisableVariantClientStateEXT (GLuint id) - GLuint glBindLightParameterEXT (GLenum light, GLenum value) - GLuint glBindMaterialParameterEXT (GLenum face, GLenum value) - GLuint glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value) - GLuint glBindTextureUnitParameterEXT (GLenum unit, GLenum value) - GLuint glBindParameterEXT (GLenum value) - GLboolean glIsVariantEnabledEXT (GLuint id, GLenum cap) - void glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetVariantPointervEXT (GLuint id, GLenum value, GLvoid **data) - void glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data) - void glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data) - void glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data) - void glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_weighting b/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_weighting deleted file mode 100644 index 32e7bc6ef3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_vertex_weighting +++ /dev/null @@ -1,19 +0,0 @@ -GL_EXT_vertex_weighting -http://www.opengl.org/registry/specs/gl/EXT/vertex_weighting.txt -GL_EXT_vertex_weighting - GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 - GL_MODELVIEW0_MATRIX_EXT 0x0BA6 - GL_MODELVIEW0_EXT 0x1700 - GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 - GL_MODELVIEW1_MATRIX_EXT 0x8506 - GL_VERTEX_WEIGHTING_EXT 0x8509 - GL_MODELVIEW1_EXT 0x850A - GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B - GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C - GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D - GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E - GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F - GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 - void glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, GLvoid *pointer) - void glVertexWeightfEXT (GLfloat weight) - void glVertexWeightfvEXT (GLfloat* weight) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_EXT_x11_sync_object b/Engine/lib/glew/auto/extensions/gl/GL_EXT_x11_sync_object deleted file mode 100644 index a5ee698154..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_EXT_x11_sync_object +++ /dev/null @@ -1,5 +0,0 @@ -GL_EXT_x11_sync_object -http://www.opengl.org/registry/specs/gl/EXT/x11_sync_object.txt -GL_EXT_x11_sync_object - GL_SYNC_X11_FENCE_EXT 0x90E1 - GLsync glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_frame_terminator b/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_frame_terminator deleted file mode 100644 index b4e9f8dfcd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_frame_terminator +++ /dev/null @@ -1,4 +0,0 @@ -GL_GREMEDY_frame_terminator -http://www.opengl.org/registry/specs/gl/GREMEDY/frame_terminator.txt -GL_GREMEDY_frame_terminator - void glFrameTerminatorGREMEDY (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_string_marker b/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_string_marker deleted file mode 100644 index 1b2fd1acf1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_GREMEDY_string_marker +++ /dev/null @@ -1,4 +0,0 @@ -GL_GREMEDY_string_marker -http://www.opengl.org/registry/specs/gl/GREMEDY/string_marker.txt -GL_GREMEDY_string_marker - void glStringMarkerGREMEDY (GLsizei len, const GLvoid *string) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_convolution_border_modes b/Engine/lib/glew/auto/extensions/gl/GL_HP_convolution_border_modes deleted file mode 100644 index e0074aab49..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_convolution_border_modes +++ /dev/null @@ -1,3 +0,0 @@ -GL_HP_convolution_border_modes -http://www.opengl.org/registry/specs/gl/HP/convolution_border_modes.txt -GL_HP_convolution_border_modes diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_image_transform b/Engine/lib/glew/auto/extensions/gl/GL_HP_image_transform deleted file mode 100644 index 48b4bdaadd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_image_transform +++ /dev/null @@ -1,9 +0,0 @@ -GL_HP_image_transform -http://www.opengl.org/registry/specs/gl/HP/image_transform.txt -GL_HP_image_transform - void glGetImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat* params) - void glGetImageTransformParameterivHP (GLenum target, GLenum pname, const GLint* params) - void glImageTransformParameterfHP (GLenum target, GLenum pname, const GLfloat param) - void glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat* params) - void glImageTransformParameteriHP (GLenum target, GLenum pname, const GLint param) - void glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_occlusion_test b/Engine/lib/glew/auto/extensions/gl/GL_HP_occlusion_test deleted file mode 100644 index ecc1148428..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_occlusion_test +++ /dev/null @@ -1,3 +0,0 @@ -GL_HP_occlusion_test -http://www.opengl.org/registry/specs/gl/HP/occlusion_test.txt -GL_HP_occlusion_test diff --git a/Engine/lib/glew/auto/extensions/gl/GL_HP_texture_lighting b/Engine/lib/glew/auto/extensions/gl/GL_HP_texture_lighting deleted file mode 100644 index 574737eeeb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_HP_texture_lighting +++ /dev/null @@ -1,3 +0,0 @@ -GL_HP_texture_lighting -http://www.opengl.org/registry/specs/gl/HP/texture_lighting.txt -GL_HP_texture_lighting diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_cull_vertex b/Engine/lib/glew/auto/extensions/gl/GL_IBM_cull_vertex deleted file mode 100644 index 0f2ad120e9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_cull_vertex +++ /dev/null @@ -1,4 +0,0 @@ -GL_IBM_cull_vertex -http://www.opengl.org/registry/specs/gl/IBM/cull_vertex.txt -GL_IBM_cull_vertex - GL_CULL_VERTEX_IBM 103050 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_multimode_draw_arrays b/Engine/lib/glew/auto/extensions/gl/GL_IBM_multimode_draw_arrays deleted file mode 100644 index f215f2e449..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_multimode_draw_arrays +++ /dev/null @@ -1,5 +0,0 @@ -GL_IBM_multimode_draw_arrays -http://www.opengl.org/registry/specs/gl/IBM/multimode_draw_arrays.txt -GL_IBM_multimode_draw_arrays - void glMultiModeDrawArraysIBM (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride) - void glMultiModeDrawElementsIBM (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_rasterpos_clip b/Engine/lib/glew/auto/extensions/gl/GL_IBM_rasterpos_clip deleted file mode 100644 index 7c410b3093..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_rasterpos_clip +++ /dev/null @@ -1,4 +0,0 @@ -GL_IBM_rasterpos_clip -http://www.opengl.org/registry/specs/gl/IBM/rasterpos_clip.txt -GL_IBM_rasterpos_clip - GL_RASTER_POSITION_UNCLIPPED_IBM 103010 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_static_data b/Engine/lib/glew/auto/extensions/gl/GL_IBM_static_data deleted file mode 100644 index ca3dc2567a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_static_data +++ /dev/null @@ -1,5 +0,0 @@ -GL_IBM_static_data -http://www.opengl.org/registry/specs/gl/IBM/static_data.txt -GL_IBM_static_data - GL_ALL_STATIC_DATA_IBM 103060 - GL_STATIC_VERTEX_ARRAY_IBM 103061 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_texture_mirrored_repeat b/Engine/lib/glew/auto/extensions/gl/GL_IBM_texture_mirrored_repeat deleted file mode 100644 index 49b1f63386..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_texture_mirrored_repeat +++ /dev/null @@ -1,4 +0,0 @@ -GL_IBM_texture_mirrored_repeat -http://www.opengl.org/registry/specs/gl/IBM/texture_mirrored_repeat.txt -GL_IBM_texture_mirrored_repeat - GL_MIRRORED_REPEAT_IBM 0x8370 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_IBM_vertex_array_lists b/Engine/lib/glew/auto/extensions/gl/GL_IBM_vertex_array_lists deleted file mode 100644 index bdc4ab5011..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_IBM_vertex_array_lists +++ /dev/null @@ -1,27 +0,0 @@ -GL_IBM_vertex_array_lists -http://www.opengl.org/registry/specs/gl/IBM/vertex_array_lists.txt -GL_IBM_vertex_array_lists - GL_VERTEX_ARRAY_LIST_IBM 103070 - GL_NORMAL_ARRAY_LIST_IBM 103071 - GL_COLOR_ARRAY_LIST_IBM 103072 - GL_INDEX_ARRAY_LIST_IBM 103073 - GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 - GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 - GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 - GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 - GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 - GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 - GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 - GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 - GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 - GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 - GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 - GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 - void glColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glEdgeFlagPointerListIBM (GLint stride, const GLboolean ** pointer, GLint ptrstride) - void glFogCoordPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glIndexPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glNormalPointerListIBM (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) - void glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INGR_color_clamp b/Engine/lib/glew/auto/extensions/gl/GL_INGR_color_clamp deleted file mode 100644 index f8a50eeba3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INGR_color_clamp +++ /dev/null @@ -1,11 +0,0 @@ -GL_INGR_color_clamp -http://www.opengl.org/registry/specs/gl/INGR/color_clamp.txt -GL_INGR_color_clamp - GL_RED_MIN_CLAMP_INGR 0x8560 - GL_GREEN_MIN_CLAMP_INGR 0x8561 - GL_BLUE_MIN_CLAMP_INGR 0x8562 - GL_ALPHA_MIN_CLAMP_INGR 0x8563 - GL_RED_MAX_CLAMP_INGR 0x8564 - GL_GREEN_MAX_CLAMP_INGR 0x8565 - GL_BLUE_MAX_CLAMP_INGR 0x8566 - GL_ALPHA_MAX_CLAMP_INGR 0x8567 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INGR_interlace_read b/Engine/lib/glew/auto/extensions/gl/GL_INGR_interlace_read deleted file mode 100644 index 247f995d8c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INGR_interlace_read +++ /dev/null @@ -1,4 +0,0 @@ -GL_INGR_interlace_read -http://www.opengl.org/registry/specs/gl/INGR/interlace_read.txt -GL_INGR_interlace_read - GL_INTERLACE_READ_INGR 0x8568 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_map_texture b/Engine/lib/glew/auto/extensions/gl/GL_INTEL_map_texture deleted file mode 100644 index 8a6c1cd7f9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_map_texture +++ /dev/null @@ -1,10 +0,0 @@ -GL_INTEL_map_texture -http://www.opengl.org/registry/specs/gl/INTEL/map_texture.txt -GL_INTEL_map_texture - GL_LAYOUT_DEFAULT_INTEL 0 - GL_LAYOUT_LINEAR_INTEL 1 - GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 - GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF - GLvoid * glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint* stride, GLenum *layout) - void glSyncTextureINTEL (GLuint texture) - void glUnmapTexture2DINTEL (GLuint texture, GLint level) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_parallel_arrays b/Engine/lib/glew/auto/extensions/gl/GL_INTEL_parallel_arrays deleted file mode 100644 index 3077600b27..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_parallel_arrays +++ /dev/null @@ -1,12 +0,0 @@ -GL_INTEL_parallel_arrays -http://www.opengl.org/registry/specs/gl/INTEL/parallel_arrays.txt -GL_INTEL_parallel_arrays - GL_PARALLEL_ARRAYS_INTEL 0x83F4 - GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 - GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 - GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 - GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 - void glColorPointervINTEL (GLint size, GLenum type, const void** pointer) - void glNormalPointervINTEL (GLenum type, const void** pointer) - void glTexCoordPointervINTEL (GLint size, GLenum type, const void** pointer) - void glVertexPointervINTEL (GLint size, GLenum type, const void** pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_texture_scissor b/Engine/lib/glew/auto/extensions/gl/GL_INTEL_texture_scissor deleted file mode 100644 index 436e261a43..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_INTEL_texture_scissor +++ /dev/null @@ -1,5 +0,0 @@ -GL_INTEL_texture_scissor -http://www.opengl.org/registry/specs/gl/INTEL/texture_scissor.txt -GL_INTEL_texture_scissor - void glTexScissorFuncINTEL (GLenum target, GLenum lfunc, GLenum hfunc) - void glTexScissorINTEL (GLenum target, GLclampf tlow, GLclampf thigh) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_KHR_debug b/Engine/lib/glew/auto/extensions/gl/GL_KHR_debug deleted file mode 100644 index c985da6c97..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_KHR_debug +++ /dev/null @@ -1,54 +0,0 @@ -GL_KHR_debug -http://www.opengl.org/registry/specs/gl/KHR/debug.txt -GL_KHR_debug - GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 - GL_STACK_OVERFLOW 0x0503 - GL_STACK_UNDERFLOW 0x0504 - GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 - GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 - GL_DEBUG_CALLBACK_FUNCTION 0x8244 - GL_DEBUG_CALLBACK_USER_PARAM 0x8245 - GL_DEBUG_SOURCE_API 0x8246 - GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 - GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 - GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 - GL_DEBUG_SOURCE_APPLICATION 0x824A - GL_DEBUG_SOURCE_OTHER 0x824B - GL_DEBUG_TYPE_ERROR 0x824C - GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D - GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E - GL_DEBUG_TYPE_PORTABILITY 0x824F - GL_DEBUG_TYPE_PERFORMANCE 0x8250 - GL_DEBUG_TYPE_OTHER 0x8251 - GL_DEBUG_TYPE_MARKER 0x8268 - GL_DEBUG_TYPE_PUSH_GROUP 0x8269 - GL_DEBUG_TYPE_POP_GROUP 0x826A - GL_DEBUG_SEVERITY_NOTIFICATION 0x826B - GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C - GL_DEBUG_GROUP_STACK_DEPTH 0x826D - GL_BUFFER 0x82E0 - GL_SHADER 0x82E1 - GL_PROGRAM 0x82E2 - GL_QUERY 0x82E3 - GL_PROGRAM_PIPELINE 0x82E4 - GL_SAMPLER 0x82E6 - GL_DISPLAY_LIST 0x82E7 - GL_MAX_LABEL_LENGTH 0x82E8 - GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 - GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 - GL_DEBUG_LOGGED_MESSAGES 0x9145 - GL_DEBUG_SEVERITY_HIGH 0x9146 - GL_DEBUG_SEVERITY_MEDIUM 0x9147 - GL_DEBUG_SEVERITY_LOW 0x9148 - GL_DEBUG_OUTPUT 0x92E0 - void glDebugMessageCallback (GLDEBUGPROC callback, const GLvoid *userParam) - void glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled) - void glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf) - GLuint glGetDebugMessageLog (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog) - void glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar *label) - void glGetObjectPtrLabel (void* ptr, GLsizei bufSize, GLsizei* length, GLchar *label) - void glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar* label) - void glObjectPtrLabel (void* ptr, GLsizei length, const GLchar* label) - void glPopDebugGroup (void) - void glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar * message) - typedef void (APIENTRY *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_KHR_texture_compression_astc_ldr b/Engine/lib/glew/auto/extensions/gl/GL_KHR_texture_compression_astc_ldr deleted file mode 100644 index 906a051e83..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_KHR_texture_compression_astc_ldr +++ /dev/null @@ -1,31 +0,0 @@ -GL_KHR_texture_compression_astc_ldr -http://www.opengl.org/registry/specs/gl/KHR/texture_compression_astc_ldr.txt -GL_KHR_texture_compression_astc_ldr - GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 - GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 - GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 - GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 - GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 - GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 - GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 - GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 - GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 - GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 - GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA - GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB - GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC - GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC - GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_KTX_buffer_region b/Engine/lib/glew/auto/extensions/gl/GL_KTX_buffer_region deleted file mode 100644 index adc6c6f6ab..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_KTX_buffer_region +++ /dev/null @@ -1,12 +0,0 @@ -GL_KTX_buffer_region - -GL_KTX_buffer_region - GL_KTX_FRONT_REGION 0x0 - GL_KTX_BACK_REGION 0x1 - GL_KTX_Z_REGION 0x2 - GL_KTX_STENCIL_REGION 0x3 - GLuint glBufferRegionEnabled (void) - GLuint glNewBufferRegion (GLenum region) - void glDeleteBufferRegion (GLenum region) - void glReadBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height) - void glDrawBufferRegion (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESAX_texture_stack b/Engine/lib/glew/auto/extensions/gl/GL_MESAX_texture_stack deleted file mode 100644 index 88fab302b3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESAX_texture_stack +++ /dev/null @@ -1,9 +0,0 @@ -GL_MESAX_texture_stack -http://www.opengl.org/registry/specs/gl/MESAX/texture_stack.txt -GL_MESAX_texture_stack - GL_TEXTURE_1D_STACK_MESAX 0x8759 - GL_TEXTURE_2D_STACK_MESAX 0x875A - GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B - GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C - GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D - GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_pack_invert b/Engine/lib/glew/auto/extensions/gl/GL_MESA_pack_invert deleted file mode 100644 index 03357a5880..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_pack_invert +++ /dev/null @@ -1,4 +0,0 @@ -GL_MESA_pack_invert -http://www.opengl.org/registry/specs/gl/MESA/pack_invert.txt -GL_MESA_pack_invert - GL_PACK_INVERT_MESA 0x8758 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_resize_buffers b/Engine/lib/glew/auto/extensions/gl/GL_MESA_resize_buffers deleted file mode 100644 index 31433742d3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_resize_buffers +++ /dev/null @@ -1,4 +0,0 @@ -GL_MESA_resize_buffers -http://www.opengl.org/registry/specs/gl/MESA/resize_buffers.txt -GL_MESA_resize_buffers - void glResizeBuffersMESA (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_window_pos b/Engine/lib/glew/auto/extensions/gl/GL_MESA_window_pos deleted file mode 100644 index 12d3454f22..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_window_pos +++ /dev/null @@ -1,27 +0,0 @@ -GL_MESA_window_pos -http://www.opengl.org/registry/specs/gl/MESA/window_pos.txt -GL_MESA_window_pos - void glWindowPos2dMESA (GLdouble x, GLdouble y) - void glWindowPos2dvMESA (const GLdouble* p) - void glWindowPos2fMESA (GLfloat x, GLfloat y) - void glWindowPos2fvMESA (const GLfloat* p) - void glWindowPos2iMESA (GLint x, GLint y) - void glWindowPos2ivMESA (const GLint* p) - void glWindowPos2sMESA (GLshort x, GLshort y) - void glWindowPos2svMESA (const GLshort* p) - void glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z) - void glWindowPos3dvMESA (const GLdouble* p) - void glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z) - void glWindowPos3fvMESA (const GLfloat* p) - void glWindowPos3iMESA (GLint x, GLint y, GLint z) - void glWindowPos3ivMESA (const GLint* p) - void glWindowPos3sMESA (GLshort x, GLshort y, GLshort z) - void glWindowPos3svMESA (const GLshort* p) - void glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble) - void glWindowPos4dvMESA (const GLdouble* p) - void glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glWindowPos4fvMESA (const GLfloat* p) - void glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w) - void glWindowPos4ivMESA (const GLint* p) - void glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w) - void glWindowPos4svMESA (const GLshort* p) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_MESA_ycbcr_texture b/Engine/lib/glew/auto/extensions/gl/GL_MESA_ycbcr_texture deleted file mode 100644 index ac91880943..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_MESA_ycbcr_texture +++ /dev/null @@ -1,6 +0,0 @@ -GL_MESA_ycbcr_texture -http://www.opengl.org/registry/specs/gl/MESA/ycbcr_texture.txt -GL_MESA_ycbcr_texture - GL_UNSIGNED_SHORT_8_8_MESA 0x85BA - GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB - GL_YCBCR_MESA 0x8757 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NVX_conditional_render b/Engine/lib/glew/auto/extensions/gl/GL_NVX_conditional_render deleted file mode 100644 index e47bce648e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NVX_conditional_render +++ /dev/null @@ -1,5 +0,0 @@ -GL_NVX_conditional_render -http://www.opengl.org/registry/specs/gl/NVX/nvx_conditional_render.txt -GL_NVX_conditional_render - void glBeginConditionalRenderNVX (GLuint id) - void glEndConditionalRenderNVX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NVX_gpu_memory_info b/Engine/lib/glew/auto/extensions/gl/GL_NVX_gpu_memory_info deleted file mode 100644 index 6dd7bdddd3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NVX_gpu_memory_info +++ /dev/null @@ -1,8 +0,0 @@ -GL_NVX_gpu_memory_info -http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt -GL_NVX_gpu_memory_info - GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 - GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 - GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 - GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A - GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_multi_draw_indirect b/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_multi_draw_indirect deleted file mode 100644 index db12aae048..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_multi_draw_indirect +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_bindless_multi_draw_indirect -http://www.opengl.org/registry/specs/gl/NV/bindless_multi_draw_indirect.txt -GL_NV_bindless_multi_draw_indirect - void glMultiDrawArraysIndirectBindlessNV (GLenum mode, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount) - void glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_texture b/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_texture deleted file mode 100644 index 7f337b92da..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_bindless_texture +++ /dev/null @@ -1,16 +0,0 @@ -GL_NV_bindless_texture -http://www.opengl.org/registry/specs/gl/NV/bindless_texture.txt -GL_NV_bindless_texture - GLuint64 glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format) - GLuint64 glGetTextureHandleNV (GLuint texture) - GLuint64 glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler) - GLboolean glIsImageHandleResidentNV (GLuint64 handle) - GLboolean glIsTextureHandleResidentNV (GLuint64 handle) - void glMakeImageHandleNonResidentNV (GLuint64 handle) - void glMakeImageHandleResidentNV (GLuint64 handle, GLenum access) - void glMakeTextureHandleNonResidentNV (GLuint64 handle) - void glMakeTextureHandleResidentNV (GLuint64 handle) - void glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value) - void glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64* values) - void glUniformHandleui64NV (GLint location, GLuint64 value) - void glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced b/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced deleted file mode 100644 index f125830cb6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced +++ /dev/null @@ -1,51 +0,0 @@ -GL_NV_blend_equation_advanced -http://www.opengl.org/registry/specs/gl/NV/blend_equation_advanced.txt -GL_NV_blend_equation_advanced - GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 - GL_BLEND_OVERLAP_NV 0x9281 - GL_UNCORRELATED_NV 0x9282 - GL_DISJOINT_NV 0x9283 - GL_CONJOINT_NV 0x9284 - GL_BLEND_ADVANCED_COHERENT_NV 0x9285 - GL_SRC_NV 0x9286 - GL_DST_NV 0x9287 - GL_SRC_OVER_NV 0x9288 - GL_DST_OVER_NV 0x9289 - GL_SRC_IN_NV 0x928A - GL_DST_IN_NV 0x928B - GL_SRC_OUT_NV 0x928C - GL_DST_OUT_NV 0x928D - GL_SRC_ATOP_NV 0x928E - GL_DST_ATOP_NV 0x928F - GL_PLUS_NV 0x9291 - GL_PLUS_DARKER_NV 0x9292 - GL_MULTIPLY_NV 0x9294 - GL_SCREEN_NV 0x9295 - GL_OVERLAY_NV 0x9296 - GL_DARKEN_NV 0x9297 - GL_LIGHTEN_NV 0x9298 - GL_COLORDODGE_NV 0x9299 - GL_COLORBURN_NV 0x929A - GL_HARDLIGHT_NV 0x929B - GL_SOFTLIGHT_NV 0x929C - GL_DIFFERENCE_NV 0x929E - GL_MINUS_NV 0x929F - GL_EXCLUSION_NV 0x92A0 - GL_CONTRAST_NV 0x92A1 - GL_INVERT_RGB_NV 0x92A3 - GL_LINEARDODGE_NV 0x92A4 - GL_LINEARBURN_NV 0x92A5 - GL_VIVIDLIGHT_NV 0x92A6 - GL_LINEARLIGHT_NV 0x92A7 - GL_PINLIGHT_NV 0x92A8 - GL_HARDMIX_NV 0x92A9 - GL_HSL_HUE_NV 0x92AD - GL_HSL_SATURATION_NV 0x92AE - GL_HSL_COLOR_NV 0x92AF - GL_HSL_LUMINOSITY_NV 0x92B0 - GL_PLUS_CLAMPED_NV 0x92B1 - GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 - GL_MINUS_CLAMPED_NV 0x92B3 - GL_INVERT_OVG_NV 0x92B4 - void glBlendBarrierNV (void) - void glBlendParameteriNV (GLenum pname, GLint value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced_coherent b/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced_coherent deleted file mode 100644 index 5d93c3263f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_equation_advanced_coherent +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_blend_equation_advanced_coherent -http://www.opengl.org/registry/specs/gl/NV/blend_equation_advanced.txt -GL_NV_blend_equation_advanced_coherent diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_square b/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_square deleted file mode 100644 index 939a2061fa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_blend_square +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_blend_square -http://www.opengl.org/registry/specs/gl/NV/blend_square.txt -GL_NV_blend_square diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_compute_program5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_compute_program5 deleted file mode 100644 index 7631dc0b72..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_compute_program5 +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_compute_program5 -http://www.opengl.org/registry/specs/gl/NV/compute_program5.txt -GL_NV_compute_program5 - GL_COMPUTE_PROGRAM_NV 0x90FB - GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_conditional_render b/Engine/lib/glew/auto/extensions/gl/GL_NV_conditional_render deleted file mode 100644 index b5710e8d12..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_conditional_render +++ /dev/null @@ -1,9 +0,0 @@ -GL_NV_conditional_render -http://www.opengl.org/registry/specs/gl/NV/conditional_render.txt -GL_NV_conditional_render - GL_QUERY_WAIT_NV 0x8E13 - GL_QUERY_NO_WAIT_NV 0x8E14 - GL_QUERY_BY_REGION_WAIT_NV 0x8E15 - GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 - void glBeginConditionalRenderNV (GLuint id, GLenum mode) - void glEndConditionalRenderNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_depth_to_color b/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_depth_to_color deleted file mode 100644 index 7547e8c065..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_depth_to_color +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_copy_depth_to_color -http://www.opengl.org/registry/specs/gl/NV/copy_depth_to_color.txt -GL_NV_copy_depth_to_color - GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E - GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_image b/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_image deleted file mode 100644 index 668467537b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_copy_image -http://www.opengl.org/registry/specs/gl/NV/copy_image.txt -GL_NV_copy_image - void glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_deep_texture3D b/Engine/lib/glew/auto/extensions/gl/GL_NV_deep_texture3D deleted file mode 100644 index 1191fac228..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_deep_texture3D +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_deep_texture3D -http://www.opengl.org/registry/specs/gl/NV/deep_texture3D.txt -GL_NV_deep_texture3D - GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 - GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_buffer_float b/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_buffer_float deleted file mode 100644 index 493b245589..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_buffer_float +++ /dev/null @@ -1,10 +0,0 @@ -GL_NV_depth_buffer_float -http://developer.download.nvidia.com/opengl/specs/GL_NV_depth_buffer_float.txt -GL_NV_depth_buffer_float - GL_DEPTH_COMPONENT32F_NV 0x8DAB - GL_DEPTH32F_STENCIL8_NV 0x8DAC - GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD - GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF - void glDepthRangedNV (GLdouble zNear, GLdouble zFar) - void glClearDepthdNV (GLdouble depth) - void glDepthBoundsdNV (GLdouble zmin, GLdouble zmax) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_clamp b/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_clamp deleted file mode 100644 index b1bdef659f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_depth_clamp -http://www.opengl.org/registry/specs/gl/NV/depth_clamp.txt -GL_NV_depth_clamp - GL_DEPTH_CLAMP_NV 0x864F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_range_unclamped b/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_range_unclamped deleted file mode 100644 index 62b4e59fa7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_depth_range_unclamped +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_depth_range_unclamped - -GL_NV_depth_range_unclamped - GL_SAMPLE_COUNT_BITS_NV 0x8864 - GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 - GL_QUERY_RESULT_NV 0x8866 - GL_QUERY_RESULT_AVAILABLE_NV 0x8867 - GL_SAMPLE_COUNT_NV 0x8914 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_draw_texture b/Engine/lib/glew/auto/extensions/gl/GL_NV_draw_texture deleted file mode 100644 index 6ede8af5fa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_draw_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_draw_texture -http://www.opengl.org/registry/specs/gl/NV/draw_texture.txt -GL_NV_draw_texture - void glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_evaluators b/Engine/lib/glew/auto/extensions/gl/GL_NV_evaluators deleted file mode 100644 index 70ec157b0e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_evaluators +++ /dev/null @@ -1,36 +0,0 @@ -GL_NV_evaluators -http://www.opengl.org/registry/specs/gl/NV/evaluators.txt -GL_NV_evaluators - GL_EVAL_2D_NV 0x86C0 - GL_EVAL_TRIANGULAR_2D_NV 0x86C1 - GL_MAP_TESSELLATION_NV 0x86C2 - GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 - GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 - GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 - GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 - GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 - GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 - GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 - GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA - GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB - GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC - GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD - GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE - GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF - GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 - GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 - GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 - GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 - GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 - GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 - GL_MAX_MAP_TESSELLATION_NV 0x86D6 - GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 - void glEvalMapsNV (GLenum target, GLenum mode) - void glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat* params) - void glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint* params) - void glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points) - void glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat* params) - void glGetMapParameterivNV (GLenum target, GLenum pname, GLint* params) - void glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points) - void glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat* params) - void glMapParameterivNV (GLenum target, GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_explicit_multisample b/Engine/lib/glew/auto/extensions/gl/GL_NV_explicit_multisample deleted file mode 100644 index 4270984673..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_explicit_multisample +++ /dev/null @@ -1,16 +0,0 @@ -GL_NV_explicit_multisample -http://www.opengl.org/registry/specs/gl/NV/explicit_multisample.txt -GL_NV_explicit_multisample - GL_SAMPLE_POSITION_NV 0x8E50 - GL_SAMPLE_MASK_NV 0x8E51 - GL_SAMPLE_MASK_VALUE_NV 0x8E52 - GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 - GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 - GL_TEXTURE_RENDERBUFFER_NV 0x8E55 - GL_SAMPLER_RENDERBUFFER_NV 0x8E56 - GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 - GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 - GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 - void glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat* val) - void glSampleMaskIndexedNV (GLuint index, GLbitfield mask) - void glTexRenderbufferNV (GLenum target, GLuint renderbuffer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fence b/Engine/lib/glew/auto/extensions/gl/GL_NV_fence deleted file mode 100644 index aeb24c759a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fence +++ /dev/null @@ -1,13 +0,0 @@ -GL_NV_fence -http://www.opengl.org/registry/specs/gl/NV/fence.txt -GL_NV_fence - GL_ALL_COMPLETED_NV 0x84F2 - GL_FENCE_STATUS_NV 0x84F3 - GL_FENCE_CONDITION_NV 0x84F4 - void glDeleteFencesNV (GLsizei n, const GLuint* fences) - void glFinishFenceNV (GLuint fence) - void glGenFencesNV (GLsizei n, GLuint* fences) - void glGetFenceivNV (GLuint fence, GLenum pname, GLint* params) - GLboolean glIsFenceNV (GLuint fence) - void glSetFenceNV (GLuint fence, GLenum condition) - GLboolean glTestFenceNV (GLuint fence) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_float_buffer b/Engine/lib/glew/auto/extensions/gl/GL_NV_float_buffer deleted file mode 100644 index 175e171b44..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_float_buffer +++ /dev/null @@ -1,18 +0,0 @@ -GL_NV_float_buffer -http://www.opengl.org/registry/specs/gl/NV/float_buffer.txt -GL_NV_float_buffer - GL_FLOAT_R_NV 0x8880 - GL_FLOAT_RG_NV 0x8881 - GL_FLOAT_RGB_NV 0x8882 - GL_FLOAT_RGBA_NV 0x8883 - GL_FLOAT_R16_NV 0x8884 - GL_FLOAT_R32_NV 0x8885 - GL_FLOAT_RG16_NV 0x8886 - GL_FLOAT_RG32_NV 0x8887 - GL_FLOAT_RGB16_NV 0x8888 - GL_FLOAT_RGB32_NV 0x8889 - GL_FLOAT_RGBA16_NV 0x888A - GL_FLOAT_RGBA32_NV 0x888B - GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C - GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D - GL_FLOAT_RGBA_MODE_NV 0x888E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fog_distance b/Engine/lib/glew/auto/extensions/gl/GL_NV_fog_distance deleted file mode 100644 index bcb065ba21..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fog_distance +++ /dev/null @@ -1,6 +0,0 @@ -GL_NV_fog_distance -http://www.opengl.org/registry/specs/gl/NV/fog_distance.txt -GL_NV_fog_distance - GL_FOG_DISTANCE_MODE_NV 0x855A - GL_EYE_RADIAL_NV 0x855B - GL_EYE_PLANE_ABSOLUTE_NV 0x855C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program deleted file mode 100644 index 334fa04a6e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program +++ /dev/null @@ -1,15 +0,0 @@ -GL_NV_fragment_program -http://www.opengl.org/registry/specs/gl/NV/fragment_program.txt -GL_NV_fragment_program - GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 - GL_FRAGMENT_PROGRAM_NV 0x8870 - GL_MAX_TEXTURE_COORDS_NV 0x8871 - GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 - GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 - GL_PROGRAM_ERROR_STRING_NV 0x8874 - void glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params) - void glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params) - void glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]) - void glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program2 deleted file mode 100644 index 7fb59eea1b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program2 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_fragment_program2 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program2.txt -GL_NV_fragment_program2 - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 - GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 - GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 - GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program4 deleted file mode 100644 index 0ae2598795..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_fragment_program4.txt -GL_NV_gpu_program4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program_option b/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program_option deleted file mode 100644 index 7af9731bd8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_fragment_program_option +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_fragment_program_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_fragment_program_option.txt -GL_NV_fragment_program_option diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_framebuffer_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/GL_NV_framebuffer_multisample_coverage deleted file mode 100644 index d1d066056c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_framebuffer_multisample_coverage +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_framebuffer_multisample_coverage -http://developer.download.nvidia.com/opengl/specs/GL_NV_framebuffer_multisample_coverage.txt -GL_NV_framebuffer_multisample_coverage - GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB - GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 - GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 - GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 - void glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_program4 deleted file mode 100644 index 3f82b195d3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_program4 +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_geometry_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_program4.txt -GL_NV_gpu_program4 - GL_GEOMETRY_PROGRAM_NV 0x8C26 - GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 - GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 - void glProgramVertexLimitNV (GLenum target, GLint limit) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_shader4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_shader4 deleted file mode 100644 index 2040c0dbb3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_geometry_shader4 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_geometry_shader4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_geometry_shader4.txt -GL_NV_geometry_shader4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program4 deleted file mode 100644 index 030f68e1cc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program4 +++ /dev/null @@ -1,23 +0,0 @@ -GL_NV_gpu_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_gpu_program4.txt -GL_NV_gpu_program4 - GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 - GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 - GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 - GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 - GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 - GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 - GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 - GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 - void glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) - void glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w) - void glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params) - void glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params) - void glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) - void glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params) - void glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5 deleted file mode 100644 index 18bb28fed0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5 +++ /dev/null @@ -1,9 +0,0 @@ -GL_NV_gpu_program5 -http://www.opengl.org/registry/specs/NV/gpu_program5.txt -GL_NV_gpu_program5 - GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A - GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B - GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C - GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D - GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E - GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5_mem_extended b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5_mem_extended deleted file mode 100644 index 9e24534e73..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program5_mem_extended +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_gpu_program5_mem_extended -http://www.opengl.org/registry/specs/gl/NV/gpu_program5_mem_extended.txt -GL_NV_gpu_program5_mem_extended diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program_fp64 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program_fp64 deleted file mode 100644 index ff7a87c757..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_program_fp64 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_gpu_program_fp64 -http://www.opengl.org/registry/specs/gl/NV/gpu_program5.txt -GL_NV_gpu_program_fp64 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_shader5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_shader5 deleted file mode 100644 index 7c3fbb9f30..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_gpu_shader5 +++ /dev/null @@ -1,65 +0,0 @@ -GL_NV_gpu_shader5 -http://www.opengl.org/registry/specs/gl/NV/gpu_shader5.txt -GL_NV_gpu_shader5 - GL_INT64_NV 0x140E - GL_UNSIGNED_INT64_NV 0x140F - GL_INT8_NV 0x8FE0 - GL_INT8_VEC2_NV 0x8FE1 - GL_INT8_VEC3_NV 0x8FE2 - GL_INT8_VEC4_NV 0x8FE3 - GL_INT16_NV 0x8FE4 - GL_INT16_VEC2_NV 0x8FE5 - GL_INT16_VEC3_NV 0x8FE6 - GL_INT16_VEC4_NV 0x8FE7 - GL_INT64_VEC2_NV 0x8FE9 - GL_INT64_VEC3_NV 0x8FEA - GL_INT64_VEC4_NV 0x8FEB - GL_UNSIGNED_INT8_NV 0x8FEC - GL_UNSIGNED_INT8_VEC2_NV 0x8FED - GL_UNSIGNED_INT8_VEC3_NV 0x8FEE - GL_UNSIGNED_INT8_VEC4_NV 0x8FEF - GL_UNSIGNED_INT16_NV 0x8FF0 - GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 - GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 - GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 - GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 - GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 - GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 - GL_FLOAT16_NV 0x8FF8 - GL_FLOAT16_VEC2_NV 0x8FF9 - GL_FLOAT16_VEC3_NV 0x8FFA - GL_FLOAT16_VEC4_NV 0x8FFB - void glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT* params) - void glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT* params) - void glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x) - void glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x) - void glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y) - void glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y) - void glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) - void glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) - void glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) - void glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT* value) - void glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) - void glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform1i64NV (GLint location, GLint64EXT x) - void glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform1ui64NV (GLint location, GLuint64EXT x) - void glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y) - void glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y) - void glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z) - void glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) - void glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) - void glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) - void glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT* value) - void glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) - void glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_half_float b/Engine/lib/glew/auto/extensions/gl/GL_NV_half_float deleted file mode 100644 index 059d5e02aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_half_float +++ /dev/null @@ -1,51 +0,0 @@ -GL_NV_half_float -http://www.opengl.org/registry/specs/gl/NV/half_float.txt -GL_NV_half_float - GL_HALF_FLOAT_NV 0x140B - void glColor3hNV (GLhalf red, GLhalf green, GLhalf blue) - void glColor3hvNV (const GLhalf* v) - void glColor4hNV (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha) - void glColor4hvNV (const GLhalf* v) - void glFogCoordhNV (GLhalf fog) - void glFogCoordhvNV (const GLhalf* fog) - void glMultiTexCoord1hNV (GLenum target, GLhalf s) - void glMultiTexCoord1hvNV (GLenum target, const GLhalf* v) - void glMultiTexCoord2hNV (GLenum target, GLhalf s, GLhalf t) - void glMultiTexCoord2hvNV (GLenum target, const GLhalf* v) - void glMultiTexCoord3hNV (GLenum target, GLhalf s, GLhalf t, GLhalf r) - void glMultiTexCoord3hvNV (GLenum target, const GLhalf* v) - void glMultiTexCoord4hNV (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q) - void glMultiTexCoord4hvNV (GLenum target, const GLhalf* v) - void glNormal3hNV (GLhalf nx, GLhalf ny, GLhalf nz) - void glNormal3hvNV (const GLhalf* v) - void glSecondaryColor3hNV (GLhalf red, GLhalf green, GLhalf blue) - void glSecondaryColor3hvNV (const GLhalf* v) - void glTexCoord1hNV (GLhalf s) - void glTexCoord1hvNV (const GLhalf* v) - void glTexCoord2hNV (GLhalf s, GLhalf t) - void glTexCoord2hvNV (const GLhalf* v) - void glTexCoord3hNV (GLhalf s, GLhalf t, GLhalf r) - void glTexCoord3hvNV (const GLhalf* v) - void glTexCoord4hNV (GLhalf s, GLhalf t, GLhalf r, GLhalf q) - void glTexCoord4hvNV (const GLhalf* v) - void glVertex2hNV (GLhalf x, GLhalf y) - void glVertex2hvNV (const GLhalf* v) - void glVertex3hNV (GLhalf x, GLhalf y, GLhalf z) - void glVertex3hvNV (const GLhalf* v) - void glVertex4hNV (GLhalf x, GLhalf y, GLhalf z, GLhalf w) - void glVertex4hvNV (const GLhalf* v) - void glVertexAttrib1hNV (GLuint index, GLhalf x) - void glVertexAttrib1hvNV (GLuint index, const GLhalf* v) - void glVertexAttrib2hNV (GLuint index, GLhalf x, GLhalf y) - void glVertexAttrib2hvNV (GLuint index, const GLhalf* v) - void glVertexAttrib3hNV (GLuint index, GLhalf x, GLhalf y, GLhalf z) - void glVertexAttrib3hvNV (GLuint index, const GLhalf* v) - void glVertexAttrib4hNV (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w) - void glVertexAttrib4hvNV (GLuint index, const GLhalf* v) - void glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalf* v) - void glVertexWeighthNV (GLhalf weight) - void glVertexWeighthvNV (const GLhalf* weight) - typedef unsigned short GLhalf diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_light_max_exponent b/Engine/lib/glew/auto/extensions/gl/GL_NV_light_max_exponent deleted file mode 100644 index 9f7c4632f2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_light_max_exponent +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_light_max_exponent -http://www.opengl.org/registry/specs/gl/NV/light_max_exponent.txt -GL_NV_light_max_exponent - GL_MAX_SHININESS_NV 0x8504 - GL_MAX_SPOT_EXPONENT_NV 0x8505 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_coverage deleted file mode 100644 index 5413d52bdf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_coverage +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_multisample_coverage -http://www.opengl.org/registry/specs/gl/NV/multisample_coverage.txt -GL_NV_multisample_coverage - GL_COLOR_SAMPLES_NV 0x8E20 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_filter_hint b/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_filter_hint deleted file mode 100644 index 2f4791994f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_multisample_filter_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_multisample_filter_hint -http://www.opengl.org/registry/specs/gl/NV/multisample_filter_hint.txt -GL_NV_multisample_filter_hint - GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_occlusion_query b/Engine/lib/glew/auto/extensions/gl/GL_NV_occlusion_query deleted file mode 100644 index a767ada46a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_occlusion_query +++ /dev/null @@ -1,14 +0,0 @@ -GL_NV_occlusion_query -http://www.opengl.org/registry/specs/gl/NV/occlusion_query.txt -GL_NV_occlusion_query - GL_PIXEL_COUNTER_BITS_NV 0x8864 - GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 - GL_PIXEL_COUNT_NV 0x8866 - GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 - void glBeginOcclusionQueryNV (GLuint id) - void glDeleteOcclusionQueriesNV (GLsizei n, const GLuint* ids) - void glEndOcclusionQueryNV (void) - void glGenOcclusionQueriesNV (GLsizei n, GLuint* ids) - void glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint* params) - void glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint* params) - GLboolean glIsOcclusionQueryNV (GLuint id) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_packed_depth_stencil b/Engine/lib/glew/auto/extensions/gl/GL_NV_packed_depth_stencil deleted file mode 100644 index ffe3d11a6c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_packed_depth_stencil +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_packed_depth_stencil -http://www.opengl.org/registry/specs/gl/NV/packed_depth_stencil.txt -GL_NV_packed_depth_stencil - GL_DEPTH_STENCIL_NV 0x84F9 - GL_UNSIGNED_INT_24_8_NV 0x84FA diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object deleted file mode 100644 index d2525a1766..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_parameter_buffer_object -http://developer.download.nvidia.com/opengl/specs/GL_NV_parameter_buffer_object.txt -GL_NV_parameter_buffer_object - GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 - GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 - GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 - GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 - GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 - void glProgramBufferParametersfvNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params) - void glProgramBufferParametersIivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params) - void glProgramBufferParametersIuivNV (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object2 deleted file mode 100644 index 8a6755705a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_parameter_buffer_object2 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_parameter_buffer_object2 -http://www.opengl.org/registry/specs/gl/NV/parameter_buffer_object2.txt -GL_NV_parameter_buffer_object2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_path_rendering b/Engine/lib/glew/auto/extensions/gl/GL_NV_path_rendering deleted file mode 100644 index 42e1336327..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_path_rendering +++ /dev/null @@ -1,180 +0,0 @@ -GL_NV_path_rendering -http://www.opengl.org/registry/specs/NV/path_rendering.txt -GL_NV_path_rendering - GL_CLOSE_PATH_NV 0x00 - GL_BOLD_BIT_NV 0x01 - GL_GLYPH_WIDTH_BIT_NV 0x01 - GL_GLYPH_HEIGHT_BIT_NV 0x02 - GL_ITALIC_BIT_NV 0x02 - GL_MOVE_TO_NV 0x02 - GL_RELATIVE_MOVE_TO_NV 0x03 - GL_LINE_TO_NV 0x04 - GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 - GL_RELATIVE_LINE_TO_NV 0x05 - GL_HORIZONTAL_LINE_TO_NV 0x06 - GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 - GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 - GL_VERTICAL_LINE_TO_NV 0x08 - GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 - GL_QUADRATIC_CURVE_TO_NV 0x0A - GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B - GL_CUBIC_CURVE_TO_NV 0x0C - GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D - GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E - GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F - GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 - GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 - GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 - GL_SMALL_CCW_ARC_TO_NV 0x12 - GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 - GL_SMALL_CW_ARC_TO_NV 0x14 - GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 - GL_LARGE_CCW_ARC_TO_NV 0x16 - GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 - GL_LARGE_CW_ARC_TO_NV 0x18 - GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 - GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 - GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 - GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 - GL_RESTART_PATH_NV 0xF0 - GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 - GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 - GL_RECT_NV 0xF6 - GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 - GL_CIRCULAR_CW_ARC_TO_NV 0xFA - GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC - GL_ARC_TO_NV 0xFE - GL_RELATIVE_ARC_TO_NV 0xFF - GL_GLYPH_HAS_KERNING_BIT_NV 0x100 - GL_PRIMARY_COLOR 0x8577 - GL_PATH_FORMAT_SVG_NV 0x9070 - GL_PATH_FORMAT_PS_NV 0x9071 - GL_STANDARD_FONT_NAME_NV 0x9072 - GL_SYSTEM_FONT_NAME_NV 0x9073 - GL_FILE_NAME_NV 0x9074 - GL_PATH_STROKE_WIDTH_NV 0x9075 - GL_PATH_END_CAPS_NV 0x9076 - GL_PATH_INITIAL_END_CAP_NV 0x9077 - GL_PATH_TERMINAL_END_CAP_NV 0x9078 - GL_PATH_JOIN_STYLE_NV 0x9079 - GL_PATH_MITER_LIMIT_NV 0x907A - GL_PATH_DASH_CAPS_NV 0x907B - GL_PATH_INITIAL_DASH_CAP_NV 0x907C - GL_PATH_TERMINAL_DASH_CAP_NV 0x907D - GL_PATH_DASH_OFFSET_NV 0x907E - GL_PATH_CLIENT_LENGTH_NV 0x907F - GL_PATH_FILL_MODE_NV 0x9080 - GL_PATH_FILL_MASK_NV 0x9081 - GL_PATH_FILL_COVER_MODE_NV 0x9082 - GL_PATH_STROKE_COVER_MODE_NV 0x9083 - GL_PATH_STROKE_MASK_NV 0x9084 - GL_COUNT_UP_NV 0x9088 - GL_COUNT_DOWN_NV 0x9089 - GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A - GL_CONVEX_HULL_NV 0x908B - GL_BOUNDING_BOX_NV 0x908D - GL_TRANSLATE_X_NV 0x908E - GL_TRANSLATE_Y_NV 0x908F - GL_TRANSLATE_2D_NV 0x9090 - GL_TRANSLATE_3D_NV 0x9091 - GL_AFFINE_2D_NV 0x9092 - GL_AFFINE_3D_NV 0x9094 - GL_TRANSPOSE_AFFINE_2D_NV 0x9096 - GL_TRANSPOSE_AFFINE_3D_NV 0x9098 - GL_UTF8_NV 0x909A - GL_UTF16_NV 0x909B - GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C - GL_PATH_COMMAND_COUNT_NV 0x909D - GL_PATH_COORD_COUNT_NV 0x909E - GL_PATH_DASH_ARRAY_COUNT_NV 0x909F - GL_PATH_COMPUTED_LENGTH_NV 0x90A0 - GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 - GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 - GL_SQUARE_NV 0x90A3 - GL_ROUND_NV 0x90A4 - GL_TRIANGULAR_NV 0x90A5 - GL_BEVEL_NV 0x90A6 - GL_MITER_REVERT_NV 0x90A7 - GL_MITER_TRUNCATE_NV 0x90A8 - GL_SKIP_MISSING_GLYPH_NV 0x90A9 - GL_USE_MISSING_GLYPH_NV 0x90AA - GL_PATH_ERROR_POSITION_NV 0x90AB - GL_PATH_FOG_GEN_MODE_NV 0x90AC - GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD - GL_ADJACENT_PAIRS_NV 0x90AE - GL_FIRST_TO_REST_NV 0x90AF - GL_PATH_GEN_MODE_NV 0x90B0 - GL_PATH_GEN_COEFF_NV 0x90B1 - GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 - GL_PATH_GEN_COMPONENTS_NV 0x90B3 - GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 - GL_MOVE_TO_RESETS_NV 0x90B5 - GL_MOVE_TO_CONTINUES_NV 0x90B6 - GL_PATH_STENCIL_FUNC_NV 0x90B7 - GL_PATH_STENCIL_REF_NV 0x90B8 - GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 - GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD - GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE - GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF - GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 - GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 - GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 - GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 - GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 - GL_FONT_ASCENDER_BIT_NV 0x00200000 - GL_FONT_DESCENDER_BIT_NV 0x00400000 - GL_FONT_HEIGHT_BIT_NV 0x00800000 - GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 - GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 - GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 - GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 - GL_FONT_HAS_KERNING_BIT_NV 0x10000000 - void glCopyPathNV (GLuint resultPath, GLuint srcPath) - void glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverFillPathNV (GLuint path, GLenum coverMode) - void glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues) - void glCoverStrokePathNV (GLuint name, GLenum coverMode) - void glDeletePathsNV (GLuint path, GLsizei range) - GLuint glGenPathsNV (GLsizei range) - void glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat* value) - void glGetPathColorGenivNV (GLenum color, GLenum pname, GLint* value) - void glGetPathCommandsNV (GLuint name, GLubyte* commands) - void glGetPathCoordsNV (GLuint name, GLfloat* coords) - void glGetPathDashArrayNV (GLuint name, GLfloat* dashArray) - GLfloat glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments) - void glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics) - void glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics) - void glGetPathParameterfvNV (GLuint name, GLenum param, GLfloat* value) - void glGetPathParameterivNV (GLuint name, GLenum param, GLint* value) - void glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing) - void glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat* value) - void glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint* value) - void glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight) - GLboolean glIsPathNV (GLuint path) - GLboolean glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y) - GLboolean glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y) - void glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs) - void glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathCoverDepthFuncNV (GLenum zfunc) - void glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat* dashArray) - void glPathFogGenNV (GLenum genMode) - void glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale) - void glPathParameterfNV (GLuint path, GLenum pname, GLfloat value) - void glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat* value) - void glPathParameteriNV (GLuint path, GLenum pname, GLint value) - void glPathParameterivNV (GLuint path, GLenum pname, const GLint* value) - void glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units) - void glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask) - void glPathStringNV (GLuint path, GLenum format, GLsizei length, const void* pathString) - void glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords) - void glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords) - void glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs) - GLboolean glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY) - void glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask) - void glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues) - void glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask) - void glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues) - void glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_pixel_data_range b/Engine/lib/glew/auto/extensions/gl/GL_NV_pixel_data_range deleted file mode 100644 index 8783ea11fa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_pixel_data_range +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_pixel_data_range -http://www.opengl.org/registry/specs/gl/NV/pixel_data_range.txt -GL_NV_pixel_data_range - GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 - GL_READ_PIXEL_DATA_RANGE_NV 0x8879 - GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A - GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B - GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C - GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D - void glFlushPixelDataRangeNV (GLenum target) - void glPixelDataRangeNV (GLenum target, GLsizei length, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_point_sprite b/Engine/lib/glew/auto/extensions/gl/GL_NV_point_sprite deleted file mode 100644 index f6f96957d9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_point_sprite +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_point_sprite -http://www.opengl.org/registry/specs/gl/NV/point_sprite.txt -GL_NV_point_sprite - GL_POINT_SPRITE_NV 0x8861 - GL_COORD_REPLACE_NV 0x8862 - GL_POINT_SPRITE_R_MODE_NV 0x8863 - void glPointParameteriNV (GLenum pname, GLint param) - void glPointParameterivNV (GLenum pname, const GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_present_video b/Engine/lib/glew/auto/extensions/gl/GL_NV_present_video deleted file mode 100644 index 893c74c8e9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_present_video +++ /dev/null @@ -1,15 +0,0 @@ -GL_NV_present_video -http://www.opengl.org/registry/specs/NV/present_video.txt -GL_NV_present_video - GL_FRAME_NV 0x8E26 - GL_FIELDS_NV 0x8E27 - GL_CURRENT_TIME_NV 0x8E28 - GL_NUM_FILL_STREAMS_NV 0x8E29 - GL_PRESENT_TIME_NV 0x8E2A - GL_PRESENT_DURATION_NV 0x8E2B - void glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT* params) - void glGetVideoivNV (GLuint video_slot, GLenum pname, GLint* params) - void glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT* params) - void glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint* params) - void glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3) - void glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_primitive_restart b/Engine/lib/glew/auto/extensions/gl/GL_NV_primitive_restart deleted file mode 100644 index 7d9995c83f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_primitive_restart +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_primitive_restart -http://www.opengl.org/registry/specs/gl/NV/primitive_restart.txt -GL_NV_primitive_restart - GL_PRIMITIVE_RESTART_NV 0x8558 - GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 - void glPrimitiveRestartIndexNV (GLuint index) - void glPrimitiveRestartNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners b/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners deleted file mode 100644 index 684f7b3cfe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners +++ /dev/null @@ -1,67 +0,0 @@ -GL_NV_register_combiners -http://www.opengl.org/registry/specs/gl/NV/register_combiners.txt -GL_NV_register_combiners - GL_REGISTER_COMBINERS_NV 0x8522 - GL_VARIABLE_A_NV 0x8523 - GL_VARIABLE_B_NV 0x8524 - GL_VARIABLE_C_NV 0x8525 - GL_VARIABLE_D_NV 0x8526 - GL_VARIABLE_E_NV 0x8527 - GL_VARIABLE_F_NV 0x8528 - GL_VARIABLE_G_NV 0x8529 - GL_CONSTANT_COLOR0_NV 0x852A - GL_CONSTANT_COLOR1_NV 0x852B - GL_PRIMARY_COLOR_NV 0x852C - GL_SECONDARY_COLOR_NV 0x852D - GL_SPARE0_NV 0x852E - GL_SPARE1_NV 0x852F - GL_DISCARD_NV 0x8530 - GL_E_TIMES_F_NV 0x8531 - GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 - GL_UNSIGNED_IDENTITY_NV 0x8536 - GL_UNSIGNED_INVERT_NV 0x8537 - GL_EXPAND_NORMAL_NV 0x8538 - GL_EXPAND_NEGATE_NV 0x8539 - GL_HALF_BIAS_NORMAL_NV 0x853A - GL_HALF_BIAS_NEGATE_NV 0x853B - GL_SIGNED_IDENTITY_NV 0x853C - GL_SIGNED_NEGATE_NV 0x853D - GL_SCALE_BY_TWO_NV 0x853E - GL_SCALE_BY_FOUR_NV 0x853F - GL_SCALE_BY_ONE_HALF_NV 0x8540 - GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 - GL_COMBINER_INPUT_NV 0x8542 - GL_COMBINER_MAPPING_NV 0x8543 - GL_COMBINER_COMPONENT_USAGE_NV 0x8544 - GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 - GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 - GL_COMBINER_MUX_SUM_NV 0x8547 - GL_COMBINER_SCALE_NV 0x8548 - GL_COMBINER_BIAS_NV 0x8549 - GL_COMBINER_AB_OUTPUT_NV 0x854A - GL_COMBINER_CD_OUTPUT_NV 0x854B - GL_COMBINER_SUM_OUTPUT_NV 0x854C - GL_MAX_GENERAL_COMBINERS_NV 0x854D - GL_NUM_GENERAL_COMBINERS_NV 0x854E - GL_COLOR_SUM_CLAMP_NV 0x854F - GL_COMBINER0_NV 0x8550 - GL_COMBINER1_NV 0x8551 - GL_COMBINER2_NV 0x8552 - GL_COMBINER3_NV 0x8553 - GL_COMBINER4_NV 0x8554 - GL_COMBINER5_NV 0x8555 - GL_COMBINER6_NV 0x8556 - GL_COMBINER7_NV 0x8557 - void glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) - void glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum) - void glCombinerParameterfNV (GLenum pname, GLfloat param) - void glCombinerParameterfvNV (GLenum pname, const GLfloat* params) - void glCombinerParameteriNV (GLenum pname, GLint param) - void glCombinerParameterivNV (GLenum pname, const GLint* params) - void glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage) - void glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params) - void glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params) - void glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat* params) - void glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint* params) - void glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat* params) - void glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners2 deleted file mode 100644 index 3368f4d2dd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_register_combiners2 +++ /dev/null @@ -1,6 +0,0 @@ -GL_NV_register_combiners2 -http://www.opengl.org/registry/specs/gl/NV/register_combiners2.txt -GL_NV_register_combiners2 - GL_PER_STAGE_CONSTANTS_NV 0x8535 - void glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat* params) - void glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_counters b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_counters deleted file mode 100644 index 91a70cfbcd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_counters +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_shader_atomic_counters -http://www.opengl.org/registry/specs/gl/NV/shader_atomic_counters.txt -GL_NV_shader_atomic_counters diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_float b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_float deleted file mode 100644 index 9376c5ffbc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_atomic_float +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_shader_atomic_float -http://www.opengl.org/registry/specs/gl/NV/shader_atomic_float.txt -GL_NV_shader_atomic_float diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_buffer_load b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_buffer_load deleted file mode 100644 index d46da164d4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_buffer_load +++ /dev/null @@ -1,19 +0,0 @@ -GL_NV_shader_buffer_load -http://www.opengl.org/registry/specs/gl/NV/shader_buffer_load.txt -GL_NV_shader_buffer_load - GL_BUFFER_GPU_ADDRESS_NV 0x8F1D - GL_GPU_ADDRESS_NV 0x8F34 - GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 - void glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT* params) - void glGetIntegerui64vNV (GLenum value, GLuint64EXT* result) - void glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT* params) - GLboolean glIsBufferResidentNV (GLenum target) - GLboolean glIsNamedBufferResidentNV (GLuint buffer) - void glMakeBufferNonResidentNV (GLenum target) - void glMakeBufferResidentNV (GLenum target, GLenum access) - void glMakeNamedBufferNonResidentNV (GLuint buffer) - void glMakeNamedBufferResidentNV (GLuint buffer, GLenum access) - void glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value) - void glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value) - void glUniformui64NV (GLint location, GLuint64EXT value) - void glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT* value) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_storage_buffer_object b/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_storage_buffer_object deleted file mode 100644 index 23990fc41f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_shader_storage_buffer_object +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_shader_storage_buffer_object -http://www.opengl.org/registry/specs/gl/NV/shader_storage_buffer_object.txt -GL_NV_shader_storage_buffer_object diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_tessellation_program5 b/Engine/lib/glew/auto/extensions/gl/GL_NV_tessellation_program5 deleted file mode 100644 index b663c974dc..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_tessellation_program5 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_tessellation_program5 -http://www.opengl.org/registry/specs/NV/tessellation_program5.txt -GL_NV_gpu_program5 - GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 - GL_TESS_CONTROL_PROGRAM_NV 0x891E - GL_TESS_EVALUATION_PROGRAM_NV 0x891F - GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 - GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_emboss b/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_emboss deleted file mode 100644 index d3cb134d50..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_emboss +++ /dev/null @@ -1,6 +0,0 @@ -GL_NV_texgen_emboss -http://www.opengl.org/registry/specs/gl/NV/texgen_emboss.txt -GL_NV_texgen_emboss - GL_EMBOSS_LIGHT_NV 0x855D - GL_EMBOSS_CONSTANT_NV 0x855E - GL_EMBOSS_MAP_NV 0x855F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_reflection b/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_reflection deleted file mode 100644 index 3ca2180900..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texgen_reflection +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_texgen_reflection -http://www.opengl.org/registry/specs/gl/NV/texgen_reflection.txt -GL_NV_texgen_reflection - GL_NORMAL_MAP_NV 0x8511 - GL_REFLECTION_MAP_NV 0x8512 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_barrier b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_barrier deleted file mode 100644 index c3a08fded5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_barrier +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_texture_barrier -http://www.opengl.org/registry/specs/gl/NV/texture_barrier.txt -GL_NV_texture_barrier - void glTextureBarrierNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_compression_vtc b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_compression_vtc deleted file mode 100644 index 2fe9071d23..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_compression_vtc +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_texture_compression_vtc -http://www.opengl.org/registry/specs/gl/NV/texture_compression_vtc.txt -GL_NV_texture_compression_vtc diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_env_combine4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_env_combine4 deleted file mode 100644 index 11445f45d4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_env_combine4 +++ /dev/null @@ -1,8 +0,0 @@ -GL_NV_texture_env_combine4 -http://www.opengl.org/registry/specs/gl/NV/texture_env_combine4.txt -GL_NV_texture_env_combine4 - GL_COMBINE4_NV 0x8503 - GL_SOURCE3_RGB_NV 0x8583 - GL_SOURCE3_ALPHA_NV 0x858B - GL_OPERAND3_RGB_NV 0x8593 - GL_OPERAND3_ALPHA_NV 0x859B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_expand_normal b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_expand_normal deleted file mode 100644 index aadb93d859..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_expand_normal +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_texture_expand_normal -http://www.opengl.org/registry/specs/gl/NV/texture_expand_normal.txt -GL_NV_texture_expand_normal - GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_multisample b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_multisample deleted file mode 100644 index 942abc98cf..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_multisample +++ /dev/null @@ -1,11 +0,0 @@ -GL_NV_texture_multisample -http://www.opengl.org/registry/specs/gl/NV/texture_multisample.txt -GL_NV_texture_multisample - GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 - GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 - void glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) - void glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) - void glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) - void glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations) - void glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) - void glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_rectangle deleted file mode 100644 index 2cf7e54974..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_rectangle +++ /dev/null @@ -1,7 +0,0 @@ -GL_NV_texture_rectangle -http://www.opengl.org/registry/specs/gl/NV/texture_rectangle.txt -GL_NV_texture_rectangle - GL_TEXTURE_RECTANGLE_NV 0x84F5 - GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 - GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 - GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader deleted file mode 100644 index 4f5bd09a9e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader +++ /dev/null @@ -1,76 +0,0 @@ -GL_NV_texture_shader -http://www.opengl.org/registry/specs/gl/NV/texture_shader.txt -GL_NV_texture_shader - GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C - GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D - GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E - GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 - GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA - GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB - GL_DSDT_MAG_INTENSITY_NV 0x86DC - GL_SHADER_CONSISTENT_NV 0x86DD - GL_TEXTURE_SHADER_NV 0x86DE - GL_SHADER_OPERATION_NV 0x86DF - GL_CULL_MODES_NV 0x86E0 - GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 - GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 - GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 - GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 - GL_CONST_EYE_NV 0x86E5 - GL_PASS_THROUGH_NV 0x86E6 - GL_CULL_FRAGMENT_NV 0x86E7 - GL_OFFSET_TEXTURE_2D_NV 0x86E8 - GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 - GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA - GL_DOT_PRODUCT_NV 0x86EC - GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED - GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE - GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 - GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 - GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 - GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 - GL_HILO_NV 0x86F4 - GL_DSDT_NV 0x86F5 - GL_DSDT_MAG_NV 0x86F6 - GL_DSDT_MAG_VIB_NV 0x86F7 - GL_HILO16_NV 0x86F8 - GL_SIGNED_HILO_NV 0x86F9 - GL_SIGNED_HILO16_NV 0x86FA - GL_SIGNED_RGBA_NV 0x86FB - GL_SIGNED_RGBA8_NV 0x86FC - GL_SIGNED_RGB_NV 0x86FE - GL_SIGNED_RGB8_NV 0x86FF - GL_SIGNED_LUMINANCE_NV 0x8701 - GL_SIGNED_LUMINANCE8_NV 0x8702 - GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 - GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 - GL_SIGNED_ALPHA_NV 0x8705 - GL_SIGNED_ALPHA8_NV 0x8706 - GL_SIGNED_INTENSITY_NV 0x8707 - GL_SIGNED_INTENSITY8_NV 0x8708 - GL_DSDT8_NV 0x8709 - GL_DSDT8_MAG8_NV 0x870A - GL_DSDT8_MAG8_INTENSITY8_NV 0x870B - GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C - GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D - GL_HI_SCALE_NV 0x870E - GL_LO_SCALE_NV 0x870F - GL_DS_SCALE_NV 0x8710 - GL_DT_SCALE_NV 0x8711 - GL_MAGNITUDE_SCALE_NV 0x8712 - GL_VIBRANCE_SCALE_NV 0x8713 - GL_HI_BIAS_NV 0x8714 - GL_LO_BIAS_NV 0x8715 - GL_DS_BIAS_NV 0x8716 - GL_DT_BIAS_NV 0x8717 - GL_MAGNITUDE_BIAS_NV 0x8718 - GL_VIBRANCE_BIAS_NV 0x8719 - GL_TEXTURE_BORDER_VALUES_NV 0x871A - GL_TEXTURE_HI_SIZE_NV 0x871B - GL_TEXTURE_LO_SIZE_NV 0x871C - GL_TEXTURE_DS_SIZE_NV 0x871D - GL_TEXTURE_DT_SIZE_NV 0x871E - GL_TEXTURE_MAG_SIZE_NV 0x871F - GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 - GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 - GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader2 deleted file mode 100644 index a9e6bac619..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader2 +++ /dev/null @@ -1,31 +0,0 @@ -GL_NV_texture_shader2 -http://www.opengl.org/registry/specs/gl/NV/texture_shader2.txt -GL_NV_texture_shader2 - GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA - GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB - GL_DSDT_MAG_INTENSITY_NV 0x86DC - GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF - GL_HILO_NV 0x86F4 - GL_DSDT_NV 0x86F5 - GL_DSDT_MAG_NV 0x86F6 - GL_DSDT_MAG_VIB_NV 0x86F7 - GL_HILO16_NV 0x86F8 - GL_SIGNED_HILO_NV 0x86F9 - GL_SIGNED_HILO16_NV 0x86FA - GL_SIGNED_RGBA_NV 0x86FB - GL_SIGNED_RGBA8_NV 0x86FC - GL_SIGNED_RGB_NV 0x86FE - GL_SIGNED_RGB8_NV 0x86FF - GL_SIGNED_LUMINANCE_NV 0x8701 - GL_SIGNED_LUMINANCE8_NV 0x8702 - GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 - GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 - GL_SIGNED_ALPHA_NV 0x8705 - GL_SIGNED_ALPHA8_NV 0x8706 - GL_SIGNED_INTENSITY_NV 0x8707 - GL_SIGNED_INTENSITY8_NV 0x8708 - GL_DSDT8_NV 0x8709 - GL_DSDT8_MAG8_NV 0x870A - GL_DSDT8_MAG8_INTENSITY8_NV 0x870B - GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C - GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader3 b/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader3 deleted file mode 100644 index c75823ac8d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_texture_shader3 +++ /dev/null @@ -1,20 +0,0 @@ -GL_NV_texture_shader3 -http://www.opengl.org/registry/specs/gl/NV/texture_shader3.txt -GL_NV_texture_shader3 - GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 - GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 - GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 - GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 - GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 - GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 - GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 - GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 - GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 - GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 - GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A - GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B - GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C - GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D - GL_HILO8_NV 0x885E - GL_SIGNED_HILO8_NV 0x885F - GL_FORCE_BLUE_TO_ONE_NV 0x8860 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback b/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback deleted file mode 100644 index fce47571e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback +++ /dev/null @@ -1,39 +0,0 @@ -GL_NV_transform_feedback -http://developer.download.nvidia.com/opengl/specs/GL_NV_transform_feedback.txt -GL_NV_transform_feedback - GL_BACK_PRIMARY_COLOR_NV 0x8C77 - GL_BACK_SECONDARY_COLOR_NV 0x8C78 - GL_TEXTURE_COORD_NV 0x8C79 - GL_CLIP_DISTANCE_NV 0x8C7A - GL_VERTEX_ID_NV 0x8C7B - GL_PRIMITIVE_ID_NV 0x8C7C - GL_GENERIC_ATTRIB_NV 0x8C7D - GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E - GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 - GL_ACTIVE_VARYINGS_NV 0x8C81 - GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 - GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 - GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 - GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 - GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 - GL_PRIMITIVES_GENERATED_NV 0x8C87 - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 - GL_RASTERIZER_DISCARD_NV 0x8C89 - GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A - GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B - GL_INTERLEAVED_ATTRIBS_NV 0x8C8C - GL_SEPARATE_ATTRIBS_NV 0x8C8D - GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E - GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F - void glBeginTransformFeedbackNV (GLenum primitiveMode) - void glEndTransformFeedbackNV (void) - void glTransformFeedbackAttribsNV (GLuint count, const GLint *attribs, GLenum bufferMode) - void glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) - void glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset) - void glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer) - void glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode) - void glActiveVaryingNV (GLuint program, const GLchar *name) - GLint glGetVaryingLocationNV (GLuint program, const GLchar *name) - void glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name) - void glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback2 deleted file mode 100644 index 771861f8b5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_transform_feedback2 +++ /dev/null @@ -1,14 +0,0 @@ -GL_NV_transform_feedback2 -http://www.opengl.org/registry/specs/gl/NV/transform_feedback2.txt -GL_NV_transform_feedback2 - GL_TRANSFORM_FEEDBACK_NV 0x8E22 - GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 - GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 - GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 - void glBindTransformFeedbackNV (GLenum target, GLuint id) - void glDeleteTransformFeedbacksNV (GLsizei n, const GLuint* ids) - void glDrawTransformFeedbackNV (GLenum mode, GLuint id) - void glGenTransformFeedbacksNV (GLsizei n, GLuint* ids) - GLboolean glIsTransformFeedbackNV (GLuint id) - void glPauseTransformFeedbackNV (void) - void glResumeTransformFeedbackNV (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vdpau_interop b/Engine/lib/glew/auto/extensions/gl/GL_NV_vdpau_interop deleted file mode 100644 index a2b68b2a68..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vdpau_interop +++ /dev/null @@ -1,18 +0,0 @@ -GL_NV_vdpau_interop -http://www.opengl.org/registry/specs/NV/vdpau_interop.txt -GL_NV_vdpau_interop - GL_SURFACE_STATE_NV 0x86EB - GL_SURFACE_REGISTERED_NV 0x86FD - GL_SURFACE_MAPPED_NV 0x8700 - GL_WRITE_DISCARD_NV 0x88BE - void glVDPAUFiniNV (void) - void glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values) - void glVDPAUInitNV (const void* vdpDevice, const GLvoid*getProcAddress) - void glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface) - void glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces) - GLvdpauSurfaceNV glVDPAURegisterOutputSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - GLvdpauSurfaceNV glVDPAURegisterVideoSurfaceNV (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames) - void glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access) - void glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces) - void glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface) - typedef GLintptr GLvdpauSurfaceNV diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range deleted file mode 100644 index 7ba11bdffd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range +++ /dev/null @@ -1,10 +0,0 @@ -GL_NV_vertex_array_range -http://www.opengl.org/registry/specs/gl/NV/vertex_array_range.txt -GL_NV_vertex_array_range - GL_VERTEX_ARRAY_RANGE_NV 0x851D - GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E - GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F - GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 - GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 - void glFlushVertexArrayRangeNV (void) - void glVertexArrayRangeNV (GLsizei length, GLvoid *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range2 deleted file mode 100644 index 57b6cb0f9b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_array_range2 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_array_range2 -http://www.opengl.org/registry/specs/gl/NV/vertex_array_range2.txt -GL_NV_vertex_array_range2 - GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_attrib_integer_64bit b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_attrib_integer_64bit deleted file mode 100644 index 833a167029..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_attrib_integer_64bit +++ /dev/null @@ -1,24 +0,0 @@ -GL_NV_vertex_attrib_integer_64bit -http://www.opengl.org/registry/specs/gl/NV/vertex_attrib_integer_64bit.txt -GL_NV_vertex_attrib_integer_64bit - GL_INT64_NV 0x140E - GL_UNSIGNED_INT64_NV 0x140F - void glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT* params) - void glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT* params) - void glVertexAttribL1i64NV (GLuint index, GLint64EXT x) - void glVertexAttribL1i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x) - void glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y) - void glVertexAttribL2i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y) - void glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z) - void glVertexAttribL3i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z) - void glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w) - void glVertexAttribL4i64vNV (GLuint index, const GLint64EXT* v) - void glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w) - void glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT* v) - void glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_buffer_unified_memory b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_buffer_unified_memory deleted file mode 100644 index 4e65f4da7d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_buffer_unified_memory +++ /dev/null @@ -1,40 +0,0 @@ -GL_NV_vertex_buffer_unified_memory -http://www.opengl.org/registry/specs/gl/NV/vertex_buffer_unified_memory.txt -GL_NV_vertex_buffer_unified_memory - GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E - GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F - GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 - GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 - GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 - GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 - GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 - GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 - GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 - GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 - GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 - GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 - GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A - GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B - GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C - GL_COLOR_ARRAY_LENGTH_NV 0x8F2D - GL_INDEX_ARRAY_LENGTH_NV 0x8F2E - GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F - GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 - GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 - GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 - GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 - void glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length) - void glColorFormatNV (GLint size, GLenum type, GLsizei stride) - void glEdgeFlagFormatNV (GLsizei stride) - void glFogCoordFormatNV (GLenum type, GLsizei stride) - void glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT result[]) - void glIndexFormatNV (GLenum type, GLsizei stride) - void glNormalFormatNV (GLenum type, GLsizei stride) - void glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride) - void glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride) - void glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride) - void glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride) - void glVertexFormatNV (GLint size, GLenum type, GLsizei stride) - GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 - GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 - GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program deleted file mode 100644 index 21d1cd2d66..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program +++ /dev/null @@ -1,150 +0,0 @@ -GL_NV_vertex_program -http://www.opengl.org/registry/specs/gl/NV/vertex_program.txt -GL_NV_vertex_program - GL_VERTEX_PROGRAM_NV 0x8620 - GL_VERTEX_STATE_PROGRAM_NV 0x8621 - GL_ATTRIB_ARRAY_SIZE_NV 0x8623 - GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 - GL_ATTRIB_ARRAY_TYPE_NV 0x8625 - GL_CURRENT_ATTRIB_NV 0x8626 - GL_PROGRAM_LENGTH_NV 0x8627 - GL_PROGRAM_STRING_NV 0x8628 - GL_MODELVIEW_PROJECTION_NV 0x8629 - GL_IDENTITY_NV 0x862A - GL_INVERSE_NV 0x862B - GL_TRANSPOSE_NV 0x862C - GL_INVERSE_TRANSPOSE_NV 0x862D - GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E - GL_MAX_TRACK_MATRICES_NV 0x862F - GL_MATRIX0_NV 0x8630 - GL_MATRIX1_NV 0x8631 - GL_MATRIX2_NV 0x8632 - GL_MATRIX3_NV 0x8633 - GL_MATRIX4_NV 0x8634 - GL_MATRIX5_NV 0x8635 - GL_MATRIX6_NV 0x8636 - GL_MATRIX7_NV 0x8637 - GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 - GL_CURRENT_MATRIX_NV 0x8641 - GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 - GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 - GL_PROGRAM_PARAMETER_NV 0x8644 - GL_ATTRIB_ARRAY_POINTER_NV 0x8645 - GL_PROGRAM_TARGET_NV 0x8646 - GL_PROGRAM_RESIDENT_NV 0x8647 - GL_TRACK_MATRIX_NV 0x8648 - GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 - GL_VERTEX_PROGRAM_BINDING_NV 0x864A - GL_PROGRAM_ERROR_POSITION_NV 0x864B - GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 - GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 - GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 - GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 - GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 - GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 - GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 - GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 - GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 - GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 - GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A - GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B - GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C - GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D - GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E - GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F - GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 - GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 - GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 - GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 - GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 - GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 - GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 - GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 - GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 - GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 - GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A - GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B - GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C - GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D - GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E - GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F - GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 - GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 - GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 - GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 - GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 - GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 - GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 - GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 - GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 - GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 - GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A - GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B - GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C - GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D - GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E - GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F - GLboolean glAreProgramsResidentNV (GLsizei n, const GLuint* ids, GLboolean *residences) - void glBindProgramNV (GLenum target, GLuint id) - void glDeleteProgramsNV (GLsizei n, const GLuint* ids) - void glExecuteProgramNV (GLenum target, GLuint id, const GLfloat* params) - void glGenProgramsNV (GLsizei n, GLuint* ids) - void glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble* params) - void glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat* params) - void glGetProgramStringNV (GLuint id, GLenum pname, GLubyte* program) - void glGetProgramivNV (GLuint id, GLenum pname, GLint* params) - void glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint* params) - void glGetVertexAttribPointervNV (GLuint index, GLenum pname, GLvoid** pointer) - void glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble* params) - void glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat* params) - void glGetVertexAttribivNV (GLuint index, GLenum pname, GLint* params) - GLboolean glIsProgramNV (GLuint id) - void glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte* program) - void glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble* params) - void glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat* params) - void glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei num, const GLdouble* params) - void glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei num, const GLfloat* params) - void glRequestResidentProgramsNV (GLsizei n, GLuint* ids) - void glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform) - void glVertexAttrib1dNV (GLuint index, GLdouble x) - void glVertexAttrib1dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib1fNV (GLuint index, GLfloat x) - void glVertexAttrib1fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib1sNV (GLuint index, GLshort x) - void glVertexAttrib1svNV (GLuint index, const GLshort* v) - void glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y) - void glVertexAttrib2dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y) - void glVertexAttrib2fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y) - void glVertexAttrib2svNV (GLuint index, const GLshort* v) - void glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z) - void glVertexAttrib3dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z) - void glVertexAttrib3fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z) - void glVertexAttrib3svNV (GLuint index, const GLshort* v) - void glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w) - void glVertexAttrib4dvNV (GLuint index, const GLdouble* v) - void glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glVertexAttrib4fvNV (GLuint index, const GLfloat* v) - void glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w) - void glVertexAttrib4svNV (GLuint index, const GLshort* v) - void glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w) - void glVertexAttrib4ubvNV (GLuint index, const GLubyte* v) - void glVertexAttribPointerNV (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer) - void glVertexAttribs1dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs1fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs1svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs2dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs2fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs2svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs3dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs3fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs3svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs4dvNV (GLuint index, GLsizei n, const GLdouble* v) - void glVertexAttribs4fvNV (GLuint index, GLsizei n, const GLfloat* v) - void glVertexAttribs4svNV (GLuint index, GLsizei n, const GLshort* v) - void glVertexAttribs4ubvNV (GLuint index, GLsizei n, const GLubyte* v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program1_1 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program1_1 deleted file mode 100644 index 32d7b09dad..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program1_1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_vertex_program1_1 -http://www.opengl.org/registry/specs/gl/NV/vertex_program1_1.txt -GL_NV_vertex_program1_1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2 deleted file mode 100644 index e8256b03f8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2 +++ /dev/null @@ -1,3 +0,0 @@ -GL_NV_vertex_program2 -http://www.opengl.org/registry/specs/gl/NV/vertex_program2.txt -GL_NV_vertex_program2 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2_option b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2_option deleted file mode 100644 index 1fecc4c040..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program2_option +++ /dev/null @@ -1,5 +0,0 @@ -GL_NV_vertex_program2_option -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program2_option.txt -GL_NV_vertex_program2_option - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 - GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program3 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program3 deleted file mode 100644 index 6510e0649c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program3 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program3 -http://www.nvidia.com/dev_content/nvopenglspecs/GL_NV_vertex_program3.txt -GL_NV_vertex_program3 - MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program4 b/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program4 deleted file mode 100644 index c51d08a5cd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_vertex_program4 +++ /dev/null @@ -1,4 +0,0 @@ -GL_NV_vertex_program4 -http://developer.download.nvidia.com/opengl/specs/GL_NV_vertex_program4.txt -GL_NV_gpu_program4 - GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_NV_video_capture b/Engine/lib/glew/auto/extensions/gl/GL_NV_video_capture deleted file mode 100644 index 09675d531a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_NV_video_capture +++ /dev/null @@ -1,44 +0,0 @@ -GL_NV_video_capture -http://www.opengl.org/registry/specs/gl/NV/video_capture.txt -GL_NV_video_capture - GL_VIDEO_BUFFER_NV 0x9020 - GL_VIDEO_BUFFER_BINDING_NV 0x9021 - GL_FIELD_UPPER_NV 0x9022 - GL_FIELD_LOWER_NV 0x9023 - GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 - GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 - GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 - GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 - GL_VIDEO_BUFFER_PITCH_NV 0x9028 - GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 - GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A - GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B - GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C - GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D - GL_PARTIAL_SUCCESS_NV 0x902E - GL_SUCCESS_NV 0x902F - GL_FAILURE_NV 0x9030 - GL_YCBYCR8_422_NV 0x9031 - GL_YCBAYCR8A_4224_NV 0x9032 - GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 - GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 - GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 - GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 - GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 - GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 - GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 - GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A - GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B - GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C - void glBeginVideoCaptureNV (GLuint video_capture_slot) - void glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset) - void glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture) - void glEndVideoCaptureNV (GLuint video_capture_slot) - void glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint* params) - GLenum glVideoCaptureNV (GLuint video_capture_slot, GLuint* sequence_num, GLuint64EXT *capture_time) - void glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint* params) - void glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat* params) - void glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble* params) - void glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint* params) - void glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat* params) - void glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_byte_coordinates b/Engine/lib/glew/auto/extensions/gl/GL_OES_byte_coordinates deleted file mode 100644 index ae4b655311..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_byte_coordinates +++ /dev/null @@ -1,3 +0,0 @@ -GL_OES_byte_coordinates -http://www.opengl.org/registry/specs/gl/OES/OES_byte_coordinates.txt -GL_OES_byte_coordinates diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_compressed_paletted_texture b/Engine/lib/glew/auto/extensions/gl/GL_OES_compressed_paletted_texture deleted file mode 100644 index 2cdf65e9b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_compressed_paletted_texture +++ /dev/null @@ -1,13 +0,0 @@ -GL_OES_compressed_paletted_texture -http://www.opengl.org/registry/specs/gl/OES/OES_compressed_paletted_texture.txt -GL_OES_compressed_paletted_texture - GL_PALETTE4_RGB8_OES 0x8B90 - GL_PALETTE4_RGBA8_OES 0x8B91 - GL_PALETTE4_R5_G6_B5_OES 0x8B92 - GL_PALETTE4_RGBA4_OES 0x8B93 - GL_PALETTE4_RGB5_A1_OES 0x8B94 - GL_PALETTE8_RGB8_OES 0x8B95 - GL_PALETTE8_RGBA8_OES 0x8B96 - GL_PALETTE8_R5_G6_B5_OES 0x8B97 - GL_PALETTE8_RGBA4_OES 0x8B98 - GL_PALETTE8_RGB5_A1_OES 0x8B99 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_read_format b/Engine/lib/glew/auto/extensions/gl/GL_OES_read_format deleted file mode 100644 index 9248136ed4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_read_format +++ /dev/null @@ -1,5 +0,0 @@ -GL_OES_read_format -http://www.opengl.org/registry/specs/gl/OES/OES_read_format.txt -GL_OES_read_format - GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A - GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OES_single_precision b/Engine/lib/glew/auto/extensions/gl/GL_OES_single_precision deleted file mode 100644 index 1e2091c658..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OES_single_precision +++ /dev/null @@ -1,9 +0,0 @@ -GL_OES_single_precision -http://www.opengl.org/registry/specs/gl/OES/OES_single_precision.txt -GL_OES_single_precision - void glClearDepthfOES (GLclampd depth) - void glClipPlanefOES (GLenum plane, const GLfloat* equation) - void glDepthRangefOES (GLclampf n, GLclampf f) - void glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) - void glGetClipPlanefOES (GLenum plane, GLfloat* equation) - void glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OML_interlace b/Engine/lib/glew/auto/extensions/gl/GL_OML_interlace deleted file mode 100644 index c18da1a111..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OML_interlace +++ /dev/null @@ -1,5 +0,0 @@ -GL_OML_interlace -http://www.opengl.org/registry/specs/gl/OML/interlace.txt -GL_OML_interlace - GL_INTERLACE_OML 0x8980 - GL_INTERLACE_READ_OML 0x8981 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OML_resample b/Engine/lib/glew/auto/extensions/gl/GL_OML_resample deleted file mode 100644 index 342b2c48b7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OML_resample +++ /dev/null @@ -1,9 +0,0 @@ -GL_OML_resample -http://www.opengl.org/registry/specs/gl/OML/resample.txt -GL_OML_resample - GL_PACK_RESAMPLE_OML 0x8984 - GL_UNPACK_RESAMPLE_OML 0x8985 - GL_RESAMPLE_REPLICATE_OML 0x8986 - GL_RESAMPLE_ZERO_FILL_OML 0x8987 - GL_RESAMPLE_AVERAGE_OML 0x8988 - GL_RESAMPLE_DECIMATE_OML 0x8989 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_OML_subsample b/Engine/lib/glew/auto/extensions/gl/GL_OML_subsample deleted file mode 100644 index 2a1fa866d8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_OML_subsample +++ /dev/null @@ -1,5 +0,0 @@ -GL_OML_subsample -http://www.opengl.org/registry/specs/gl/OML/subsample.txt -GL_OML_subsample - GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 - GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_PGI_misc_hints b/Engine/lib/glew/auto/extensions/gl/GL_PGI_misc_hints deleted file mode 100644 index a1bd97a1fe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_PGI_misc_hints +++ /dev/null @@ -1,23 +0,0 @@ -GL_PGI_misc_hints -http://www.opengl.org/registry/specs/gl/PGI/misc_hints.txt -GL_PGI_misc_hints - GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000 - GL_CONSERVE_MEMORY_HINT_PGI 107005 - GL_RECLAIM_MEMORY_HINT_PGI 107006 - GL_NATIVE_GRAPHICS_HANDLE_PGI 107010 - GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011 - GL_NATIVE_GRAPHICS_END_HINT_PGI 107012 - GL_ALWAYS_FAST_HINT_PGI 107020 - GL_ALWAYS_SOFT_HINT_PGI 107021 - GL_ALLOW_DRAW_OBJ_HINT_PGI 107022 - GL_ALLOW_DRAW_WIN_HINT_PGI 107023 - GL_ALLOW_DRAW_FRG_HINT_PGI 107024 - GL_ALLOW_DRAW_MEM_HINT_PGI 107025 - GL_STRICT_DEPTHFUNC_HINT_PGI 107030 - GL_STRICT_LIGHTING_HINT_PGI 107031 - GL_STRICT_SCISSOR_HINT_PGI 107032 - GL_FULL_STIPPLE_HINT_PGI 107033 - GL_CLIP_NEAR_HINT_PGI 107040 - GL_CLIP_FAR_HINT_PGI 107041 - GL_WIDE_LINE_HINT_PGI 107042 - GL_BACK_NORMALS_HINT_PGI 107043 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_PGI_vertex_hints b/Engine/lib/glew/auto/extensions/gl/GL_PGI_vertex_hints deleted file mode 100644 index 1761a8f723..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_PGI_vertex_hints +++ /dev/null @@ -1,25 +0,0 @@ -GL_PGI_vertex_hints -http://www.opengl.org/registry/specs/gl/PGI/vertex_hints.txt -GL_PGI_vertex_hints - GL_VERTEX23_BIT_PGI 0x00000004 - GL_VERTEX4_BIT_PGI 0x00000008 - GL_COLOR3_BIT_PGI 0x00010000 - GL_COLOR4_BIT_PGI 0x00020000 - GL_EDGEFLAG_BIT_PGI 0x00040000 - GL_INDEX_BIT_PGI 0x00080000 - GL_MAT_AMBIENT_BIT_PGI 0x00100000 - GL_VERTEX_DATA_HINT_PGI 107050 - GL_VERTEX_CONSISTENT_HINT_PGI 107051 - GL_MATERIAL_SIDE_HINT_PGI 107052 - GL_MAX_VERTEX_HINT_PGI 107053 - GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 - GL_MAT_DIFFUSE_BIT_PGI 0x00400000 - GL_MAT_EMISSION_BIT_PGI 0x00800000 - GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 - GL_MAT_SHININESS_BIT_PGI 0x02000000 - GL_MAT_SPECULAR_BIT_PGI 0x04000000 - GL_NORMAL_BIT_PGI 0x08000000 - GL_TEXCOORD1_BIT_PGI 0x10000000 - GL_TEXCOORD2_BIT_PGI 0x20000000 - GL_TEXCOORD3_BIT_PGI 0x40000000 - GL_TEXCOORD4_BIT_PGI 0x80000000 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_0_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_0_compatibility deleted file mode 100644 index 2ead46fd7e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_0_compatibility +++ /dev/null @@ -1,35 +0,0 @@ -GL_REGAL_ES1_0_compatibility -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_ES1_0_compatibility - void glAlphaFuncx (GLenum func, GLclampx ref) - void glClearColorx (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) - void glClearDepthx (GLclampx depth) - void glColor4x (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) - void glDepthRangex (GLclampx zNear, GLclampx zFar) - void glFogx (GLenum pname, GLfixed param) - void glFogxv (GLenum pname, const GLfixed* params) - void glFrustumf (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) - void glFrustumx (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) - void glLightModelx (GLenum pname, GLfixed param) - void glLightModelxv (GLenum pname, const GLfixed* params) - void glLightx (GLenum light, GLenum pname, GLfixed param) - void glLightxv (GLenum light, GLenum pname, const GLfixed* params) - void glLineWidthx (GLfixed width) - void glLoadMatrixx (const GLfixed* m) - void glMaterialx (GLenum face, GLenum pname, GLfixed param) - void glMaterialxv (GLenum face, GLenum pname, const GLfixed* params) - void glMultMatrixx (const GLfixed* m) - void glMultiTexCoord4x (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q) - void glNormal3x (GLfixed nx, GLfixed ny, GLfixed nz) - void glOrthof (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) - void glOrthox (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) - void glPointSizex (GLfixed size) - void glPolygonOffsetx (GLfixed factor, GLfixed units) - void glRotatex (GLfixed angle, GLfixed x, GLfixed y, GLfixed z) - void glSampleCoveragex (GLclampx value, GLboolean invert) - void glScalex (GLfixed x, GLfixed y, GLfixed z) - void glTexEnvx (GLenum target, GLenum pname, GLfixed param) - void glTexEnvxv (GLenum target, GLenum pname, const GLfixed* params) - void glTexParameterx (GLenum target, GLenum pname, GLfixed param) - void glTranslatex (GLfixed x, GLfixed y, GLfixed z) - typedef int GLclampx diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_1_compatibility b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_1_compatibility deleted file mode 100644 index c760d62351..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_ES1_1_compatibility +++ /dev/null @@ -1,16 +0,0 @@ -GL_REGAL_ES1_1_compatibility -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_ES1_1_compatibility - void glClipPlanef (GLenum plane, const GLfloat* equation) - void glClipPlanex (GLenum plane, const GLfixed* equation) - void glGetClipPlanef (GLenum pname, GLfloat eqn[4]) - void glGetClipPlanex (GLenum pname, GLfixed eqn[4]) - void glGetFixedv (GLenum pname, GLfixed* params) - void glGetLightxv (GLenum light, GLenum pname, GLfixed* params) - void glGetMaterialxv (GLenum face, GLenum pname, GLfixed* params) - void glGetTexEnvxv (GLenum env, GLenum pname, GLfixed* params) - void glGetTexParameterxv (GLenum target, GLenum pname, GLfixed* params) - void glPointParameterx (GLenum pname, GLfixed param) - void glPointParameterxv (GLenum pname, const GLfixed* params) - void glPointSizePointerOES (GLenum type, GLsizei stride, const GLvoid* pointer) - void glTexParameterxv (GLenum target, GLenum pname, const GLfixed* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_enable b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_enable deleted file mode 100644 index 6139a91e45..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_enable +++ /dev/null @@ -1,13 +0,0 @@ -GL_REGAL_enable -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_enable - GL_ERROR_REGAL 0x9322 - GL_DEBUG_REGAL 0x9323 - GL_LOG_REGAL 0x9324 - GL_EMULATION_REGAL 0x9325 - GL_DRIVER_REGAL 0x9326 - GL_MISSING_REGAL 0x9360 - GL_TRACE_REGAL 0x9361 - GL_CACHE_REGAL 0x9362 - GL_CODE_REGAL 0x9363 - GL_STATISTICS_REGAL 0x9364 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_error_string b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_error_string deleted file mode 100644 index 415f32a0e8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_error_string +++ /dev/null @@ -1,4 +0,0 @@ -GL_REGAL_error_string -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_error_string - const GLchar* glErrorStringREGAL (GLenum error) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_extension_query b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_extension_query deleted file mode 100644 index a72934fa61..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_extension_query +++ /dev/null @@ -1,5 +0,0 @@ -GL_REGAL_extension_query -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_extension_query - GLboolean glGetExtensionREGAL (const GLchar* ext) - GLboolean glIsSupportedREGAL (const GLchar* ext) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_log b/Engine/lib/glew/auto/extensions/gl/GL_REGAL_log deleted file mode 100644 index fc42416404..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REGAL_log +++ /dev/null @@ -1,14 +0,0 @@ -GL_REGAL_log -https://github.com/p3/regal/tree/master/doc/extensions -GL_REGAL_log - GL_LOG_ERROR_REGAL 0x9319 - GL_LOG_WARNING_REGAL 0x931A - GL_LOG_INFO_REGAL 0x931B - GL_LOG_APP_REGAL 0x931C - GL_LOG_DRIVER_REGAL 0x931D - GL_LOG_INTERNAL_REGAL 0x931E - GL_LOG_DEBUG_REGAL 0x931F - GL_LOG_STATUS_REGAL 0x9320 - GL_LOG_HTTP_REGAL 0x9321 - void glLogMessageCallbackREGAL (GLLOGPROCREGAL callback) - typedef void (APIENTRY *GLLOGPROCREGAL)(GLenum stream, GLsizei length, const GLchar *message, GLvoid *context) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_REND_screen_coordinates b/Engine/lib/glew/auto/extensions/gl/GL_REND_screen_coordinates deleted file mode 100644 index 3902d5ffb9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_REND_screen_coordinates +++ /dev/null @@ -1,5 +0,0 @@ -GL_REND_screen_coordinates -http://www.opengl.org/registry/specs/gl/REND/screen_coordinates.txt -GL_REND_screen_coordinates - GL_SCREEN_COORDINATES_REND 0x8490 - GL_INVERTED_SCREEN_W_REND 0x8491 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc b/Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc deleted file mode 100644 index fc02b37e4f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_S3_s3tc +++ /dev/null @@ -1,9 +0,0 @@ -GL_S3_s3tc -http://www.opengl.org/registry/specs/gl/S3/s3tc.txt -GL_S3_s3tc - GL_RGB_S3TC 0x83A0 - GL_RGB4_S3TC 0x83A1 - GL_RGBA_S3TC 0x83A2 - GL_RGBA4_S3TC 0x83A3 - GL_RGBA_DXT5_S3TC 0x83A4 - GL_RGBA4_DXT5_S3TC 0x83A5 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_color_range b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_color_range deleted file mode 100644 index 18962bb246..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_color_range +++ /dev/null @@ -1,12 +0,0 @@ -GL_SGIS_color_range -http://www.opengl.org/registry/specs/gl/SGIS/color_range.txt -GL_SGIS_color_range - GL_EXTENDED_RANGE_SGIS 0x85A5 - GL_MIN_RED_SGIS 0x85A6 - GL_MAX_RED_SGIS 0x85A7 - GL_MIN_GREEN_SGIS 0x85A8 - GL_MAX_GREEN_SGIS 0x85A9 - GL_MIN_BLUE_SGIS 0x85AA - GL_MAX_BLUE_SGIS 0x85AB - GL_MIN_ALPHA_SGIS 0x85AC - GL_MAX_ALPHA_SGIS 0x85AD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_detail_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_detail_texture deleted file mode 100644 index 1fc421f648..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_detail_texture +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_detail_texture -http://www.opengl.org/registry/specs/gl/SGIS/detail_texture.txt -GL_SGIS_detail_texture - void glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat* points) - void glGetDetailTexFuncSGIS (GLenum target, GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_fog_function b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_fog_function deleted file mode 100644 index 964ea54865..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_fog_function +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_fog_function -http://www.opengl.org/registry/specs/gl/SGIS/fog_func.txt -GL_SGIS_fog_function - void glFogFuncSGIS (GLsizei n, const GLfloat* points) - void glGetFogFuncSGIS (GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_generate_mipmap b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_generate_mipmap deleted file mode 100644 index d1f448a6e6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_generate_mipmap +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_generate_mipmap -http://www.opengl.org/registry/specs/gl/SGIS/generate_mipmap.txt -GL_SGIS_generate_mipmap - GL_GENERATE_MIPMAP_SGIS 0x8191 - GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_multisample b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_multisample deleted file mode 100644 index 53960cedfe..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_multisample +++ /dev/null @@ -1,21 +0,0 @@ -GL_SGIS_multisample -http://www.opengl.org/registry/specs/gl/SGIS/multisample.txt -GL_SGIS_multisample - GL_MULTISAMPLE_SGIS 0x809D - GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E - GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F - GL_SAMPLE_MASK_SGIS 0x80A0 - GL_1PASS_SGIS 0x80A1 - GL_2PASS_0_SGIS 0x80A2 - GL_2PASS_1_SGIS 0x80A3 - GL_4PASS_0_SGIS 0x80A4 - GL_4PASS_1_SGIS 0x80A5 - GL_4PASS_2_SGIS 0x80A6 - GL_4PASS_3_SGIS 0x80A7 - GL_SAMPLE_BUFFERS_SGIS 0x80A8 - GL_SAMPLES_SGIS 0x80A9 - GL_SAMPLE_MASK_VALUE_SGIS 0x80AA - GL_SAMPLE_MASK_INVERT_SGIS 0x80AB - GL_SAMPLE_PATTERN_SGIS 0x80AC - void glSampleMaskSGIS (GLclampf value, GLboolean invert) - void glSamplePatternSGIS (GLenum pattern) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_pixel_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_pixel_texture deleted file mode 100644 index df7441b7d1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_pixel_texture +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIS_pixel_texture -http://www.opengl.org/registry/specs/gl/SGIS/pixel_texture.txt -GL_SGIS_pixel_texture diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_point_line_texgen b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_point_line_texgen deleted file mode 100644 index f5379b8196..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_point_line_texgen +++ /dev/null @@ -1,11 +0,0 @@ -GL_SGIS_point_line_texgen -http://www.opengl.org/registry/specs/gl/SGIS/point_line_texgen.txt -GL_SGIS_point_line_texgen - GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 - GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 - GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 - GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 - GL_EYE_POINT_SGIS 0x81F4 - GL_OBJECT_POINT_SGIS 0x81F5 - GL_EYE_LINE_SGIS 0x81F6 - GL_OBJECT_LINE_SGIS 0x81F7 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_sharpen_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_sharpen_texture deleted file mode 100644 index 1f55e90f15..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_sharpen_texture +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_sharpen_texture -http://www.opengl.org/registry/specs/gl/SGIS/sharpen_texture.txt -GL_SGIS_sharpen_texture - void glGetSharpenTexFuncSGIS (GLenum target, GLfloat* points) - void glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat* points) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture4D b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture4D deleted file mode 100644 index c5a3d51f6d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture4D +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_texture4D -http://www.opengl.org/registry/specs/gl/SGIS/texture4D.txt -GL_SGIS_texture4D - void glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const GLvoid *pixels) - void glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const GLvoid *pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_border_clamp b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_border_clamp deleted file mode 100644 index 46a02b17b9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_border_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIS_texture_border_clamp -http://www.opengl.org/registry/specs/gl/SGIS/texture_border_clamp.txt -GL_SGIS_texture_border_clamp - GL_CLAMP_TO_BORDER_SGIS 0x812D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_edge_clamp b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_edge_clamp deleted file mode 100644 index b8ffbce9f4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_edge_clamp +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIS_texture_edge_clamp -http://www.opengl.org/registry/specs/gl/SGIS/texture_edge_clamp.txt -GL_SGIS_texture_edge_clamp - GL_CLAMP_TO_EDGE_SGIS 0x812F diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_filter4 b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_filter4 deleted file mode 100644 index bb9af98af2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_filter4 +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIS_texture_filter4 -http://www.opengl.org/registry/specs/gl/SGIS/texture_filter4.txt -GL_SGIS_texture_filter4 - void glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat* weights) - void glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_lod b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_lod deleted file mode 100644 index a46110a025..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_lod +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIS_texture_lod -http://www.opengl.org/registry/specs/gl/SGIS/texture_lod.txt -GL_SGIS_texture_lod - GL_TEXTURE_MIN_LOD_SGIS 0x813A - GL_TEXTURE_MAX_LOD_SGIS 0x813B - GL_TEXTURE_BASE_LEVEL_SGIS 0x813C - GL_TEXTURE_MAX_LEVEL_SGIS 0x813D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_select b/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_select deleted file mode 100644 index e74b6abe49..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIS_texture_select +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIS_texture_select -http://www.opengl.org/registry/specs/gl/SGIS/texture_select.txt -GL_SGIS_texture_select diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async deleted file mode 100644 index 5f0150ead5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async +++ /dev/null @@ -1,10 +0,0 @@ -GL_SGIX_async -http://www.opengl.org/registry/specs/gl/SGIX/async.txt -GL_SGIX_async - GL_ASYNC_MARKER_SGIX 0x8329 - void glAsyncMarkerSGIX (GLuint marker) - void glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range) - GLint glFinishAsyncSGIX (GLuint* markerp) - GLuint glGenAsyncMarkersSGIX (GLsizei range) - GLboolean glIsAsyncMarkerSGIX (GLuint marker) - GLint glPollAsyncSGIX (GLuint* markerp) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_histogram b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_histogram deleted file mode 100644 index 2317e97d2a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_histogram +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_async_histogram -http://www.opengl.org/registry/specs/gl/SGIX/async_histogram.txt -GL_SGIX_async_histogram - GL_ASYNC_HISTOGRAM_SGIX 0x832C - GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_pixel b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_pixel deleted file mode 100644 index 3435cb055f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_async_pixel +++ /dev/null @@ -1,9 +0,0 @@ -GL_SGIX_async_pixel -http://www.opengl.org/registry/specs/gl/SGIX/async_pixel.txt -GL_SGIX_async_pixel - GL_ASYNC_TEX_IMAGE_SGIX 0x835C - GL_ASYNC_DRAW_PIXELS_SGIX 0x835D - GL_ASYNC_READ_PIXELS_SGIX 0x835E - GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F - GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 - GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_blend_alpha_minmax b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_blend_alpha_minmax deleted file mode 100644 index 651004a7c6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_blend_alpha_minmax +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_blend_alpha_minmax -http://www.opengl.org/registry/specs/gl/SGIX/blend_alpha_minmax.txt -GL_SGIX_blend_alpha_minmax - GL_ALPHA_MIN_SGIX 0x8320 - GL_ALPHA_MAX_SGIX 0x8321 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_clipmap b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_clipmap deleted file mode 100644 index be80ef67d2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_clipmap +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_clipmap -http://www.opengl.org/registry/specs/gl/SGIX/clipmap.txt -GL_SGIX_clipmap diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_convolution_accuracy b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_convolution_accuracy deleted file mode 100644 index b912c42aa0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_convolution_accuracy +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_convolution_accuracy -http://www.opengl.org/registry/specs/gl/SGIX/convolution_accuracy.txt -GL_SGIX_convolution_accuracy - GL_CONVOLUTION_HINT_SGIX 0x8316 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_depth_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_depth_texture deleted file mode 100644 index 38e348a065..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_depth_texture +++ /dev/null @@ -1,6 +0,0 @@ -GL_SGIX_depth_texture -http://www.opengl.org/registry/specs/gl/SGIX/depth_texture.txt -GL_SGIX_depth_texture - GL_DEPTH_COMPONENT16_SGIX 0x81A5 - GL_DEPTH_COMPONENT24_SGIX 0x81A6 - GL_DEPTH_COMPONENT32_SGIX 0x81A7 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_flush_raster b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_flush_raster deleted file mode 100644 index 65c955d28d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_flush_raster +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_flush_raster -http://www.opengl.org/registry/specs/gl/SGIX/flush_raster.txt -GL_SGIX_flush_raster - void glFlushRasterSGIX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_offset b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_offset deleted file mode 100644 index be6bb83ca7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_offset +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_fog_offset -http://www.opengl.org/registry/specs/gl/SGIX/fog_offset.txt -GL_SGIX_fog_offset - GL_FOG_OFFSET_SGIX 0x8198 - GL_FOG_OFFSET_VALUE_SGIX 0x8199 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_texture deleted file mode 100644 index 168affb259..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fog_texture +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_fog_texture -http://www.opengl.org/registry/specs/gl/SGIX/fog_texture.txt -GL_SGIX_fog_texture - GL_TEXTURE_FOG_SGIX 0 - GL_FOG_PATCHY_FACTOR_SGIX 0 - GL_FRAGMENT_FOG_SGIX 0 - void glTextureFogSGIX (GLenum pname) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fragment_specular_lighting b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fragment_specular_lighting deleted file mode 100644 index 098ae6006d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_fragment_specular_lighting +++ /dev/null @@ -1,20 +0,0 @@ -GL_SGIX_fragment_specular_lighting -http://www.opengl.org/registry/specs/gl/SGIX/fragment_specular_lighting.txt -GL_SGIX_fragment_specular_lighting - void glFragmentColorMaterialSGIX (GLenum face, GLenum mode) - void glFragmentLightModelfSGIX (GLenum pname, GLfloat param) - void glFragmentLightModelfvSGIX (GLenum pname, GLfloat* params) - void glFragmentLightModeliSGIX (GLenum pname, GLint param) - void glFragmentLightModelivSGIX (GLenum pname, GLint* params) - void glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param) - void glFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat* params) - void glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param) - void glFragmentLightivSGIX (GLenum light, GLenum pname, GLint* params) - void glFragmentMaterialfSGIX (GLenum face, GLenum pname, const GLfloat param) - void glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat* params) - void glFragmentMaterialiSGIX (GLenum face, GLenum pname, const GLint param) - void glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint* params) - void glGetFragmentLightfvSGIX (GLenum light, GLenum value, GLfloat* data) - void glGetFragmentLightivSGIX (GLenum light, GLenum value, GLint* data) - void glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat* data) - void glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint* data) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_framezoom b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_framezoom deleted file mode 100644 index 24bfd258a3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_framezoom +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_framezoom -http://www.opengl.org/registry/specs/gl/SGIX/framezoom.txt -GL_SGIX_framezoom - void glFrameZoomSGIX (GLint factor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_interlace b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_interlace deleted file mode 100644 index 9c83a90f2e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_interlace +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_interlace -http://www.opengl.org/registry/specs/gl/SGIX/interlace.txt -GL_SGIX_interlace - GL_INTERLACE_SGIX 0x8094 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ir_instrument1 b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ir_instrument1 deleted file mode 100644 index 775b15524d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ir_instrument1 +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_ir_instrument1 -http://www.opengl.org/registry/specs/gl/SGIX/ir_instrument1.txt -GL_SGIX_ir_instrument1 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_list_priority b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_list_priority deleted file mode 100644 index 713b8c9053..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_list_priority +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_list_priority -http://www.opengl.org/registry/specs/gl/SGIX/list_priority.txt -GL_SGIX_list_priority diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture deleted file mode 100644 index f84a66bbeb..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_pixel_texture -http://www.opengl.org/registry/specs/gl/SGIX/sgix_pixel_texture.txt -GL_SGIX_pixel_texture - void glPixelTexGenSGIX (GLenum mode) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture_bits b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture_bits deleted file mode 100644 index d14788fa67..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_pixel_texture_bits +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_pixel_texture_bits -http://www.opengl.org/registry/specs/gl/SGIX/pixel_texture_bits.txt -GL_SGIX_pixel_texture_bits diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_reference_plane b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_reference_plane deleted file mode 100644 index 5b27c9de29..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_reference_plane +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_reference_plane -http://www.opengl.org/registry/specs/gl/SGIX/reference_plane.txt -GL_SGIX_reference_plane - void glReferencePlaneSGIX (const GLdouble* equation) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_resample b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_resample deleted file mode 100644 index 5569c1f51d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_resample +++ /dev/null @@ -1,8 +0,0 @@ -GL_SGIX_resample -http://www.opengl.org/registry/specs/gl/SGIX/resample.txt -GL_SGIX_resample - GL_PACK_RESAMPLE_SGIX 0x842E - GL_UNPACK_RESAMPLE_SGIX 0x842F - GL_RESAMPLE_DECIMATE_SGIX 0x8430 - GL_RESAMPLE_REPLICATE_SGIX 0x8433 - GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow deleted file mode 100644 index 2b34cc83a9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_shadow -http://oss.sgi.com/projects/ogl-sample/registry/SGIX/shadow.txt -GL_SGIX_shadow - GL_TEXTURE_COMPARE_SGIX 0x819A - GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B - GL_TEXTURE_LEQUAL_R_SGIX 0x819C - GL_TEXTURE_GEQUAL_R_SGIX 0x819D diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow_ambient b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow_ambient deleted file mode 100644 index 19d9898ce5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_shadow_ambient +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_shadow_ambient -http://www.opengl.org/registry/specs/gl/SGIX/shadow_ambient.txt -GL_SGIX_shadow_ambient - GL_SHADOW_AMBIENT_SGIX 0x80BF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_sprite b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_sprite deleted file mode 100644 index d501097d3a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_sprite +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_sprite -http://www.opengl.org/registry/specs/gl/SGIX/sprite.txt -GL_SGIX_sprite - void glSpriteParameterfSGIX (GLenum pname, GLfloat param) - void glSpriteParameterfvSGIX (GLenum pname, GLfloat* params) - void glSpriteParameteriSGIX (GLenum pname, GLint param) - void glSpriteParameterivSGIX (GLenum pname, GLint* params) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_tag_sample_buffer b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_tag_sample_buffer deleted file mode 100644 index 65bbf5daf9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_tag_sample_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_tag_sample_buffer -http://www.opengl.org/registry/specs/gl/SGIX/tag_sample_buffer.txt -GL_SGIX_tag_sample_buffer - void glTagSampleBufferSGIX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_add_env b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_add_env deleted file mode 100644 index cc4d1e239a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_add_env +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_texture_add_env -http://www.opengl.org/registry/specs/gl/SGIX/texture_env_add.txt -GL_SGIX_texture_add_env diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_coordinate_clamp b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_coordinate_clamp deleted file mode 100644 index 6c0265dc47..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_coordinate_clamp +++ /dev/null @@ -1,6 +0,0 @@ -GL_SGIX_texture_coordinate_clamp -http://www.opengl.org/registry/specs/gl/SGIX/texture_coordinate_clamp.txt -GL_SGIX_texture_coordinate_clamp - GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 - GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A - GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_lod_bias b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_lod_bias deleted file mode 100644 index f2499f71c1..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_lod_bias +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_texture_lod_bias -http://www.opengl.org/registry/specs/gl/SGIX/texture_lod_bias.txt -GL_SGIX_texture_lod_bias diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_multi_buffer b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_multi_buffer deleted file mode 100644 index 7238f46f14..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_multi_buffer +++ /dev/null @@ -1,4 +0,0 @@ -GL_SGIX_texture_multi_buffer -http://www.opengl.org/registry/specs/gl/SGIX/texture_multi_buffer.txt -GL_SGIX_texture_multi_buffer - GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_range b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_range deleted file mode 100644 index 6b2761bdc4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_range +++ /dev/null @@ -1,31 +0,0 @@ -GL_SGIX_texture_range -http://www.opengl.org/registry/specs/gl/SGIX/texture_range.txt -GL_SGIX_texture_range - GL_RGB_SIGNED_SGIX 0x85E0 - GL_RGBA_SIGNED_SGIX 0x85E1 - GL_ALPHA_SIGNED_SGIX 0x85E2 - GL_LUMINANCE_SIGNED_SGIX 0x85E3 - GL_INTENSITY_SIGNED_SGIX 0x85E4 - GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 - GL_RGB16_SIGNED_SGIX 0x85E6 - GL_RGBA16_SIGNED_SGIX 0x85E7 - GL_ALPHA16_SIGNED_SGIX 0x85E8 - GL_LUMINANCE16_SIGNED_SGIX 0x85E9 - GL_INTENSITY16_SIGNED_SGIX 0x85EA - GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB - GL_RGB_EXTENDED_RANGE_SGIX 0x85EC - GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED - GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE - GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF - GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 - GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 - GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 - GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 - GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 - GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 - GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 - GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 - GL_MIN_LUMINANCE_SGIS 0x85F8 - GL_MAX_LUMINANCE_SGIS 0x85F9 - GL_MIN_INTENSITY_SGIS 0x85FA - GL_MAX_INTENSITY_SGIS 0x85FB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_scale_bias b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_scale_bias deleted file mode 100644 index dc6e5bd141..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_texture_scale_bias +++ /dev/null @@ -1,7 +0,0 @@ -GL_SGIX_texture_scale_bias -http://www.opengl.org/registry/specs/gl/SGIX/texture_scale_bias.txt -GL_SGIX_texture_scale_bias - GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 - GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A - GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B - GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip deleted file mode 100644 index 8412b7c442..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_vertex_preclip -http://www.opengl.org/registry/specs/gl/SGIX/vertex_preclip.txt -GL_SGIX_vertex_preclip - GL_VERTEX_PRECLIP_SGIX 0x83EE - GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip_hint b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip_hint deleted file mode 100644 index 42c56a5d26..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_vertex_preclip_hint +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGIX_vertex_preclip_hint -http://www.opengl.org/registry/specs/gl/SGIX/vertex_preclip.txt -GL_SGIX_vertex_preclip_hint - GL_VERTEX_PRECLIP_SGIX 0x83EE - GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ycrcb b/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ycrcb deleted file mode 100644 index 3f553e0020..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGIX_ycrcb +++ /dev/null @@ -1,3 +0,0 @@ -GL_SGIX_ycrcb -http://www.opengl.org/registry/specs/gl/SGIX/ycrcb.txt -GL_SGIX_ycrcb diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_matrix b/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_matrix deleted file mode 100644 index 49dee1df47..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_matrix +++ /dev/null @@ -1,14 +0,0 @@ -GL_SGI_color_matrix -http://www.opengl.org/registry/specs/gl/SGI/color_matrix.txt -GL_SGI_color_matrix - GL_COLOR_MATRIX_SGI 0x80B1 - GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 - GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 - GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 - GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 - GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 - GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 - GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 - GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 - GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA - GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_table b/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_table deleted file mode 100644 index efa027e9c0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGI_color_table +++ /dev/null @@ -1,26 +0,0 @@ -GL_SGI_color_table -http://www.opengl.org/registry/specs/gl/SGI/color_table.txt -GL_SGI_color_table - GL_COLOR_TABLE_SGI 0x80D0 - GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 - GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 - GL_PROXY_COLOR_TABLE_SGI 0x80D3 - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 - GL_COLOR_TABLE_SCALE_SGI 0x80D6 - GL_COLOR_TABLE_BIAS_SGI 0x80D7 - GL_COLOR_TABLE_FORMAT_SGI 0x80D8 - GL_COLOR_TABLE_WIDTH_SGI 0x80D9 - GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA - GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB - GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC - GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD - GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE - GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF - void glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat* params) - void glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint* params) - void glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table) - void glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width) - void glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat* params) - void glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint* params) - void glGetColorTableSGI (GLenum target, GLenum format, GLenum type, GLvoid *table) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SGI_texture_color_table b/Engine/lib/glew/auto/extensions/gl/GL_SGI_texture_color_table deleted file mode 100644 index ceff38b456..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SGI_texture_color_table +++ /dev/null @@ -1,5 +0,0 @@ -GL_SGI_texture_color_table -http://www.opengl.org/registry/specs/gl/SGI/texture_color_table.txt -GL_SGI_texture_color_table - GL_TEXTURE_COLOR_TABLE_SGI 0x80BC - GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUNX_constant_data b/Engine/lib/glew/auto/extensions/gl/GL_SUNX_constant_data deleted file mode 100644 index ab77e7434b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUNX_constant_data +++ /dev/null @@ -1,6 +0,0 @@ -GL_SUNX_constant_data -http://www.opengl.org/registry/specs/gl/SUNX/constant_data.txt -GL_SUNX_constant_data - GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 - GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 - void glFinishTextureSUNX (void) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_convolution_border_modes b/Engine/lib/glew/auto/extensions/gl/GL_SUN_convolution_border_modes deleted file mode 100644 index 7a4250ea6e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_convolution_border_modes +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_convolution_border_modes -http://www.opengl.org/registry/specs/gl/SUN/convolution_border_modes.txt -GL_SUN_convolution_border_modes - GL_WRAP_BORDER_SUN 0x81D4 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_global_alpha b/Engine/lib/glew/auto/extensions/gl/GL_SUN_global_alpha deleted file mode 100644 index d3378b6f11..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_global_alpha +++ /dev/null @@ -1,13 +0,0 @@ -GL_SUN_global_alpha -http://www.opengl.org/registry/specs/gl/SUN/global_alpha.txt -GL_SUN_global_alpha - GL_GLOBAL_ALPHA_SUN 0x81D9 - GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA - void glGlobalAlphaFactorbSUN (GLbyte factor) - void glGlobalAlphaFactordSUN (GLdouble factor) - void glGlobalAlphaFactorfSUN (GLfloat factor) - void glGlobalAlphaFactoriSUN (GLint factor) - void glGlobalAlphaFactorsSUN (GLshort factor) - void glGlobalAlphaFactorubSUN (GLubyte factor) - void glGlobalAlphaFactoruiSUN (GLuint factor) - void glGlobalAlphaFactorusSUN (GLushort factor) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_mesh_array b/Engine/lib/glew/auto/extensions/gl/GL_SUN_mesh_array deleted file mode 100644 index f35e2b76ce..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_mesh_array +++ /dev/null @@ -1,5 +0,0 @@ -GL_SUN_mesh_array -http://www.opengl.org/registry/specs/gl/SUN/mesh_array.txt -GL_SUN_mesh_array - GL_QUAD_MESH_SUN 0x8614 - GL_TRIANGLE_MESH_SUN 0x8615 diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_read_video_pixels b/Engine/lib/glew/auto/extensions/gl/GL_SUN_read_video_pixels deleted file mode 100644 index faa55f972c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_read_video_pixels +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_read_video_pixels -http://wwws.sun.com/software/graphics/opengl/extensions/gl_sun_read_video_pixels.txt -GL_SUN_read_video_pixels - void glReadVideoPixelsSUN (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_slice_accum b/Engine/lib/glew/auto/extensions/gl/GL_SUN_slice_accum deleted file mode 100644 index cacd7a520e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_slice_accum +++ /dev/null @@ -1,4 +0,0 @@ -GL_SUN_slice_accum -http://www.opengl.org/registry/specs/gl/SUN/slice_accum.txt -GL_SUN_slice_accum - GL_SLICE_ACCUM_SUN 0x85CC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_triangle_list b/Engine/lib/glew/auto/extensions/gl/GL_SUN_triangle_list deleted file mode 100644 index 2d38968265..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_triangle_list +++ /dev/null @@ -1,27 +0,0 @@ -GL_SUN_triangle_list -http://www.opengl.org/registry/specs/gl/SUN/triangle_list.txt -GL_SUN_triangle_list - GL_RESTART_SUN 0x01 - GL_REPLACE_MIDDLE_SUN 0x02 - GL_REPLACE_OLDEST_SUN 0x03 - GL_TRIANGLE_LIST_SUN 0x81D7 - GL_REPLACEMENT_CODE_SUN 0x81D8 - GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 - GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 - GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 - GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 - GL_R1UI_V3F_SUN 0x85C4 - GL_R1UI_C4UB_V3F_SUN 0x85C5 - GL_R1UI_C3F_V3F_SUN 0x85C6 - GL_R1UI_N3F_V3F_SUN 0x85C7 - GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 - GL_R1UI_T2F_V3F_SUN 0x85C9 - GL_R1UI_T2F_N3F_V3F_SUN 0x85CA - GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB - void glReplacementCodePointerSUN (GLenum type, GLsizei stride, const GLvoid *pointer) - void glReplacementCodeubSUN (GLubyte code) - void glReplacementCodeubvSUN (const GLubyte* code) - void glReplacementCodeuiSUN (GLuint code) - void glReplacementCodeuivSUN (const GLuint* code) - void glReplacementCodeusSUN (GLushort code) - void glReplacementCodeusvSUN (const GLushort* code) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_SUN_vertex b/Engine/lib/glew/auto/extensions/gl/GL_SUN_vertex deleted file mode 100644 index 576e27e0d5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_SUN_vertex +++ /dev/null @@ -1,43 +0,0 @@ -GL_SUN_vertex -http://www.opengl.org/registry/specs/gl/SUN/vertex.txt -GL_SUN_vertex - void glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) - void glColor3fVertex3fvSUN (const GLfloat* c, const GLfloat *v) - void glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glColor4fNormal3fVertex3fvSUN (const GLfloat* c, const GLfloat *n, const GLfloat *v) - void glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y) - void glColor4ubVertex2fvSUN (const GLubyte* c, const GLfloat *v) - void glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) - void glColor4ubVertex3fvSUN (const GLubyte* c, const GLfloat *v) - void glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glNormal3fVertex3fvSUN (const GLfloat* n, const GLfloat *v) - void glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiColor3fVertex3fvSUN (const GLuint* rc, const GLfloat *c, const GLfloat *v) - void glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint* rc, const GLubyte *c, const GLfloat *v) - void glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v) - void glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint* rc, const GLfloat *tc, const GLfloat *v) - void glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z) - void glReplacementCodeuiVertex3fvSUN (const GLuint* rc, const GLfloat *v) - void glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fColor3fVertex3fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *v) - void glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fColor4ubVertex3fvSUN (const GLfloat* tc, const GLubyte *c, const GLfloat *v) - void glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fNormal3fVertex3fvSUN (const GLfloat* tc, const GLfloat *n, const GLfloat *v) - void glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z) - void glTexCoord2fVertex3fvSUN (const GLfloat* tc, const GLfloat *v) - void glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v) - void glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w) - void glTexCoord4fVertex4fvSUN (const GLfloat* tc, const GLfloat *v) diff --git a/Engine/lib/glew/auto/extensions/gl/GL_WIN_phong_shading b/Engine/lib/glew/auto/extensions/gl/GL_WIN_phong_shading deleted file mode 100644 index 44d7ca5c6a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_WIN_phong_shading +++ /dev/null @@ -1,5 +0,0 @@ -GL_WIN_phong_shading -http://www.opengl.org/registry/specs/gl/WIN/phong_shading.txt -GL_WIN_phong_shading - GL_PHONG_WIN 0x80EA - GL_PHONG_HINT_WIN 0x80EB diff --git a/Engine/lib/glew/auto/extensions/gl/GL_WIN_specular_fog b/Engine/lib/glew/auto/extensions/gl/GL_WIN_specular_fog deleted file mode 100644 index 2cb203b43c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_WIN_specular_fog +++ /dev/null @@ -1,4 +0,0 @@ -GL_WIN_specular_fog -http://www.opengl.org/registry/specs/gl/WIN/specular_fog.txt -GL_WIN_specular_fog - GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC diff --git a/Engine/lib/glew/auto/extensions/gl/GL_WIN_swap_hint b/Engine/lib/glew/auto/extensions/gl/GL_WIN_swap_hint deleted file mode 100644 index 6916189eb2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/GL_WIN_swap_hint +++ /dev/null @@ -1,4 +0,0 @@ -GL_WIN_swap_hint -http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc01_16zy.asp -GL_WIN_swap_hint - void glAddSwapHintRectWIN (GLint x, GLint y, GLsizei width, GLsizei height) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_3DFX_multisample b/Engine/lib/glew/auto/extensions/gl/WGL_3DFX_multisample deleted file mode 100644 index ec588470de..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_3DFX_multisample +++ /dev/null @@ -1,5 +0,0 @@ -WGL_3DFX_multisample -http://www.opengl.org/registry/specs/gl/3DFX/3dfx_multisample.txt -WGL_3DFX_multisample - WGL_SAMPLE_BUFFERS_3DFX 0x2060 - WGL_SAMPLES_3DFX 0x2061 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_3DL_stereo_control b/Engine/lib/glew/auto/extensions/gl/WGL_3DL_stereo_control deleted file mode 100644 index e34c4d1fba..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_3DL_stereo_control +++ /dev/null @@ -1,8 +0,0 @@ -WGL_3DL_stereo_control -http://www.opengl.org/registry/specs/gl/3DL/stereo_control.txt -WGL_3DL_stereo_control - WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 - WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 - WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 - WGL_STEREO_POLARITY_INVERT_3DL 0x2058 - BOOL wglSetStereoEmitterState3DL (HDC hDC, UINT uState) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_AMD_gpu_association b/Engine/lib/glew/auto/extensions/gl/WGL_AMD_gpu_association deleted file mode 100644 index ea9ce4ce4c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_AMD_gpu_association +++ /dev/null @@ -1,22 +0,0 @@ -WGL_AMD_gpu_association -http://www.opengl.org/registry/specs/gl/AMD/wgl_gpu_association.txt -WGL_AMD_gpu_association - WGL_GPU_VENDOR_AMD 0x1F00 - WGL_GPU_RENDERER_STRING_AMD 0x1F01 - WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 - WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 - WGL_GPU_RAM_AMD 0x21A3 - WGL_GPU_CLOCK_AMD 0x21A4 - WGL_GPU_NUM_PIPES_AMD 0x21A5 - WGL_GPU_NUM_SIMD_AMD 0x21A6 - WGL_GPU_NUM_RB_AMD 0x21A7 - WGL_GPU_NUM_SPI_AMD 0x21A8 - VOID wglBlitContextFramebufferAMD (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) - HGLRC wglCreateAssociatedContextAMD (UINT id) - HGLRC wglCreateAssociatedContextAttribsAMD (UINT id, HGLRC hShareContext, const int* attribList) - BOOL wglDeleteAssociatedContextAMD (HGLRC hglrc) - UINT wglGetContextGPUIDAMD (HGLRC hglrc) - HGLRC wglGetCurrentAssociatedContextAMD (void) - UINT wglGetGPUIDsAMD (UINT maxCount, UINT* ids) - INT wglGetGPUInfoAMD (UINT id, INT property, GLenum dataType, UINT size, void* data) - BOOL wglMakeAssociatedContextCurrentAMD (HGLRC hglrc) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_buffer_region b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_buffer_region deleted file mode 100644 index fade0eb2e2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_buffer_region +++ /dev/null @@ -1,11 +0,0 @@ -WGL_ARB_buffer_region -http://www.opengl.org/registry/specs/gl/ARB/wgl_buffer_region.txt -WGL_ARB_buffer_region - WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 - WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 - WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 - WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 - HANDLE wglCreateBufferRegionARB (HDC hDC, int iLayerPlane, UINT uType) - VOID wglDeleteBufferRegionARB (HANDLE hRegion) - BOOL wglRestoreBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc) - BOOL wglSaveBufferRegionARB (HANDLE hRegion, int x, int y, int width, int height) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context deleted file mode 100644 index 20b3119c80..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context +++ /dev/null @@ -1,12 +0,0 @@ -WGL_ARB_create_context -http://www.opengl.org/registry/specs/ARB/wgl_create_context.txt -WGL_ARB_create_context - WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 - WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 - WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 - WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 - WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 - WGL_CONTEXT_FLAGS_ARB 0x2094 - ERROR_INVALID_VERSION_ARB 0x2095 - ERROR_INVALID_PROFILE_ARB 0x2096 - HGLRC wglCreateContextAttribsARB (HDC hDC, HGLRC hShareContext, const int* attribList) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_profile b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_profile deleted file mode 100644 index cac5a44d4b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_profile +++ /dev/null @@ -1,6 +0,0 @@ -WGL_ARB_create_context_profile -http://www.opengl.org/registry/specs/gl/ARB/wgl_create_context.txt -WGL_ARB_create_context_profile - WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 - WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 - WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_robustness b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_robustness deleted file mode 100644 index bb2fb9ffea..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_create_context_robustness +++ /dev/null @@ -1,7 +0,0 @@ -WGL_ARB_create_context_robustness -http://www.opengl.org/registry/specs/gl/ARB/wgl_create_context_robustness.txt -WGL_ARB_create_context_robustness - WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 - WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 - WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 - WGL_NO_RESET_NOTIFICATION_ARB 0x8261 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_extensions_string b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_extensions_string deleted file mode 100644 index 1fad95a42a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_extensions_string +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_extensions_string -http://www.opengl.org/registry/specs/gl/ARB/wgl_extensions_string.txt -WGL_ARB_extensions_string - const char* wglGetExtensionsStringARB (HDC hdc) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_framebuffer_sRGB deleted file mode 100644 index a913c72ba8..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_framebuffer_sRGB -http://www.opengl.org/registry/specs/gl/ARB/framebuffer_sRGB.txt -WGL_ARB_framebuffer_sRGB - WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_make_current_read b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_make_current_read deleted file mode 100644 index d91181d874..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_make_current_read +++ /dev/null @@ -1,7 +0,0 @@ -WGL_ARB_make_current_read -http://www.opengl.org/registry/specs/gl/ARB/wgl_make_current_read.txt -WGL_ARB_make_current_read - HDC wglGetCurrentReadDCARB (VOID) - BOOL wglMakeContextCurrentARB (HDC hDrawDC, HDC hReadDC, HGLRC hglrc) - ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 - ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_multisample b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_multisample deleted file mode 100644 index 2eb8dace90..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_multisample +++ /dev/null @@ -1,5 +0,0 @@ -WGL_ARB_multisample -http://www.opengl.org/registry/specs/gl/ARB/multisample.txt -WGL_ARB_multisample - WGL_SAMPLE_BUFFERS_ARB 0x2041 - WGL_SAMPLES_ARB 0x2042 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pbuffer b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pbuffer deleted file mode 100644 index e5553ba71d..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pbuffer +++ /dev/null @@ -1,17 +0,0 @@ -WGL_ARB_pbuffer -http://www.opengl.org/registry/specs/gl/ARB/wgl_pbuffer.txt -WGL_ARB_pbuffer - WGL_DRAW_TO_PBUFFER_ARB 0x202D - WGL_MAX_PBUFFER_PIXELS_ARB 0x202E - WGL_MAX_PBUFFER_WIDTH_ARB 0x202F - WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 - WGL_PBUFFER_LARGEST_ARB 0x2033 - WGL_PBUFFER_WIDTH_ARB 0x2034 - WGL_PBUFFER_HEIGHT_ARB 0x2035 - WGL_PBUFFER_LOST_ARB 0x2036 - HPBUFFERARB wglCreatePbufferARB (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList) - BOOL wglDestroyPbufferARB (HPBUFFERARB hPbuffer) - HDC wglGetPbufferDCARB (HPBUFFERARB hPbuffer) - BOOL wglQueryPbufferARB (HPBUFFERARB hPbuffer, int iAttribute, int* piValue) - int wglReleasePbufferDCARB (HPBUFFERARB hPbuffer, HDC hDC) - DECLARE_HANDLE(HPBUFFERARB); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format deleted file mode 100644 index 6df791c9e0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format +++ /dev/null @@ -1,55 +0,0 @@ -WGL_ARB_pixel_format -http://www.opengl.org/registry/specs/gl/ARB/wgl_pixel_format.txt -WGL_ARB_pixel_format - WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 - WGL_DRAW_TO_WINDOW_ARB 0x2001 - WGL_DRAW_TO_BITMAP_ARB 0x2002 - WGL_ACCELERATION_ARB 0x2003 - WGL_NEED_PALETTE_ARB 0x2004 - WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 - WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 - WGL_SWAP_METHOD_ARB 0x2007 - WGL_NUMBER_OVERLAYS_ARB 0x2008 - WGL_NUMBER_UNDERLAYS_ARB 0x2009 - WGL_TRANSPARENT_ARB 0x200A - WGL_SHARE_DEPTH_ARB 0x200C - WGL_SHARE_STENCIL_ARB 0x200D - WGL_SHARE_ACCUM_ARB 0x200E - WGL_SUPPORT_GDI_ARB 0x200F - WGL_SUPPORT_OPENGL_ARB 0x2010 - WGL_DOUBLE_BUFFER_ARB 0x2011 - WGL_STEREO_ARB 0x2012 - WGL_PIXEL_TYPE_ARB 0x2013 - WGL_COLOR_BITS_ARB 0x2014 - WGL_RED_BITS_ARB 0x2015 - WGL_RED_SHIFT_ARB 0x2016 - WGL_GREEN_BITS_ARB 0x2017 - WGL_GREEN_SHIFT_ARB 0x2018 - WGL_BLUE_BITS_ARB 0x2019 - WGL_BLUE_SHIFT_ARB 0x201A - WGL_ALPHA_BITS_ARB 0x201B - WGL_ALPHA_SHIFT_ARB 0x201C - WGL_ACCUM_BITS_ARB 0x201D - WGL_ACCUM_RED_BITS_ARB 0x201E - WGL_ACCUM_GREEN_BITS_ARB 0x201F - WGL_ACCUM_BLUE_BITS_ARB 0x2020 - WGL_ACCUM_ALPHA_BITS_ARB 0x2021 - WGL_DEPTH_BITS_ARB 0x2022 - WGL_STENCIL_BITS_ARB 0x2023 - WGL_AUX_BUFFERS_ARB 0x2024 - WGL_NO_ACCELERATION_ARB 0x2025 - WGL_GENERIC_ACCELERATION_ARB 0x2026 - WGL_FULL_ACCELERATION_ARB 0x2027 - WGL_SWAP_EXCHANGE_ARB 0x2028 - WGL_SWAP_COPY_ARB 0x2029 - WGL_SWAP_UNDEFINED_ARB 0x202A - WGL_TYPE_RGBA_ARB 0x202B - WGL_TYPE_COLORINDEX_ARB 0x202C - WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 - WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 - WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 - WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A - WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B - BOOL wglChoosePixelFormatARB (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats) - BOOL wglGetPixelFormatAttribfvARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues) - BOOL wglGetPixelFormatAttribivARB (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format_float b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format_float deleted file mode 100644 index 8c135dbd6b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_pixel_format_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_pixel_format_float -http://www.opengl.org/registry/specs/gl/ARB/color_buffer_float.txt -WGL_ARB_pixel_format_float - WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_render_texture b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_render_texture deleted file mode 100644 index 4c0ddf944a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_render_texture +++ /dev/null @@ -1,39 +0,0 @@ -WGL_ARB_render_texture -http://www.opengl.org/registry/specs/gl/ARB/wgl_render_texture.txt -WGL_ARB_render_texture - WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 - WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 - WGL_TEXTURE_FORMAT_ARB 0x2072 - WGL_TEXTURE_TARGET_ARB 0x2073 - WGL_MIPMAP_TEXTURE_ARB 0x2074 - WGL_TEXTURE_RGB_ARB 0x2075 - WGL_TEXTURE_RGBA_ARB 0x2076 - WGL_NO_TEXTURE_ARB 0x2077 - WGL_TEXTURE_CUBE_MAP_ARB 0x2078 - WGL_TEXTURE_1D_ARB 0x2079 - WGL_TEXTURE_2D_ARB 0x207A - WGL_MIPMAP_LEVEL_ARB 0x207B - WGL_CUBE_MAP_FACE_ARB 0x207C - WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D - WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E - WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F - WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 - WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 - WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 - WGL_FRONT_LEFT_ARB 0x2083 - WGL_FRONT_RIGHT_ARB 0x2084 - WGL_BACK_LEFT_ARB 0x2085 - WGL_BACK_RIGHT_ARB 0x2086 - WGL_AUX0_ARB 0x2087 - WGL_AUX1_ARB 0x2088 - WGL_AUX2_ARB 0x2089 - WGL_AUX3_ARB 0x208A - WGL_AUX4_ARB 0x208B - WGL_AUX5_ARB 0x208C - WGL_AUX6_ARB 0x208D - WGL_AUX7_ARB 0x208E - WGL_AUX8_ARB 0x208F - WGL_AUX9_ARB 0x2090 - BOOL wglBindTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) - BOOL wglReleaseTexImageARB (HPBUFFERARB hPbuffer, int iBuffer) - BOOL wglSetPbufferAttribARB (HPBUFFERARB hPbuffer, const int* piAttribList) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_application_isolation b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_application_isolation deleted file mode 100644 index b480049564..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_application_isolation +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_robustness_application_isolation -http://www.opengl.org/registry/specs/gl/ARB/wgl_robustness_isolation.txt -WGL_ARB_robustness_application_isolation - WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_share_group_isolation b/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_share_group_isolation deleted file mode 100644 index dfaa9c2b69..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ARB_robustness_share_group_isolation +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ARB_robustness_share_group_isolation -http://www.opengl.org/registry/specs/gl/ARB/wgl_robustness_isolation.txt -WGL_ARB_robustness_share_group_isolation - WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_pixel_format_float b/Engine/lib/glew/auto/extensions/gl/WGL_ATI_pixel_format_float deleted file mode 100644 index 1065604d20..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_pixel_format_float +++ /dev/null @@ -1,6 +0,0 @@ -WGL_ATI_pixel_format_float -http://www.opengl.org/registry/specs/gl/ATI/pixel_format_float.txt -WGL_ATI_pixel_format_float - WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 - GL_RGBA_FLOAT_MODE_ATI 0x8820 - GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_render_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/WGL_ATI_render_texture_rectangle deleted file mode 100644 index 55df114d31..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_ATI_render_texture_rectangle +++ /dev/null @@ -1,4 +0,0 @@ -WGL_ATI_render_texture_rectangle - -WGL_ATI_render_texture_rectangle - WGL_TEXTURE_RECTANGLE_ATI 0x21A5 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es2_profile b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es2_profile deleted file mode 100644 index ca9881af6b..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es2_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es2_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es2_profile.txt -WGL_EXT_create_context_es2_profile - WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es_profile b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es_profile deleted file mode 100644 index 6eb7cddfb3..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_create_context_es_profile +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_create_context_es_profile -http://www.opengl.org/registry/specs/EXT/wgl_create_context_es_profile.txt -WGL_EXT_create_context_es_profile - WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_depth_float b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_depth_float deleted file mode 100644 index c9d5bf5d86..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_depth_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_depth_float -http://www.opengl.org/registry/specs/gl/EXT/wgl_depth_float.txt -WGL_EXT_depth_float - WGL_DEPTH_FLOAT_EXT 0x2040 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_display_color_table b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_display_color_table deleted file mode 100644 index b0607bb4b2..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_display_color_table +++ /dev/null @@ -1,7 +0,0 @@ -WGL_EXT_display_color_table -http://www.opengl.org/registry/specs/gl/EXT/wgl_display_color_table.txt -WGL_EXT_display_color_table - GLboolean wglBindDisplayColorTableEXT (GLushort id) - GLboolean wglCreateDisplayColorTableEXT (GLushort id) - void wglDestroyDisplayColorTableEXT (GLushort id) - GLboolean wglLoadDisplayColorTableEXT (GLushort* table, GLuint length) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_extensions_string b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_extensions_string deleted file mode 100644 index 1b546fa189..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_extensions_string +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_extensions_string -http://www.opengl.org/registry/specs/gl/EXT/wgl_extensions_string.txt -WGL_EXT_extensions_string - const char* wglGetExtensionsStringEXT (void) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_framebuffer_sRGB b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_framebuffer_sRGB deleted file mode 100644 index e4a40322fd..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_framebuffer_sRGB +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_framebuffer_sRGB -http://developer.download.nvidia.com/opengl/specs/GL_EXT_framebuffer_sRGB.txt -WGL_EXT_framebuffer_sRGB - WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_make_current_read b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_make_current_read deleted file mode 100644 index 61935dc4ee..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_make_current_read +++ /dev/null @@ -1,6 +0,0 @@ -WGL_EXT_make_current_read -http://www.opengl.org/registry/specs/gl/EXT/wgl_make_current_read.txt -WGL_EXT_make_current_read - HDC wglGetCurrentReadDCEXT (VOID) - BOOL wglMakeContextCurrentEXT (HDC hDrawDC, HDC hReadDC, HGLRC hglrc) - ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_multisample b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_multisample deleted file mode 100644 index 55c76bed0f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_multisample +++ /dev/null @@ -1,5 +0,0 @@ -WGL_EXT_multisample -http://www.opengl.org/registry/specs/gl/EXT/wgl_multisample.txt -WGL_EXT_multisample - WGL_SAMPLE_BUFFERS_EXT 0x2041 - WGL_SAMPLES_EXT 0x2042 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pbuffer b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pbuffer deleted file mode 100644 index 3e0da7c4a6..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pbuffer +++ /dev/null @@ -1,18 +0,0 @@ -WGL_EXT_pbuffer -http://www.opengl.org/registry/specs/gl/EXT/wgl_pbuffer.txt -WGL_EXT_pbuffer - WGL_DRAW_TO_PBUFFER_EXT 0x202D - WGL_MAX_PBUFFER_PIXELS_EXT 0x202E - WGL_MAX_PBUFFER_WIDTH_EXT 0x202F - WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 - WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 - WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 - WGL_PBUFFER_LARGEST_EXT 0x2033 - WGL_PBUFFER_WIDTH_EXT 0x2034 - WGL_PBUFFER_HEIGHT_EXT 0x2035 - HPBUFFEREXT wglCreatePbufferEXT (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList) - BOOL wglDestroyPbufferEXT (HPBUFFEREXT hPbuffer) - HDC wglGetPbufferDCEXT (HPBUFFEREXT hPbuffer) - BOOL wglQueryPbufferEXT (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue) - int wglReleasePbufferDCEXT (HPBUFFEREXT hPbuffer, HDC hDC) - DECLARE_HANDLE(HPBUFFEREXT); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format deleted file mode 100644 index 19aa219ad9..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format +++ /dev/null @@ -1,51 +0,0 @@ -WGL_EXT_pixel_format -http://www.opengl.org/registry/specs/gl/EXT/wgl_pixel_format.txt -WGL_EXT_pixel_format - WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 - WGL_DRAW_TO_WINDOW_EXT 0x2001 - WGL_DRAW_TO_BITMAP_EXT 0x2002 - WGL_ACCELERATION_EXT 0x2003 - WGL_NEED_PALETTE_EXT 0x2004 - WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 - WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 - WGL_SWAP_METHOD_EXT 0x2007 - WGL_NUMBER_OVERLAYS_EXT 0x2008 - WGL_NUMBER_UNDERLAYS_EXT 0x2009 - WGL_TRANSPARENT_EXT 0x200A - WGL_TRANSPARENT_VALUE_EXT 0x200B - WGL_SHARE_DEPTH_EXT 0x200C - WGL_SHARE_STENCIL_EXT 0x200D - WGL_SHARE_ACCUM_EXT 0x200E - WGL_SUPPORT_GDI_EXT 0x200F - WGL_SUPPORT_OPENGL_EXT 0x2010 - WGL_DOUBLE_BUFFER_EXT 0x2011 - WGL_STEREO_EXT 0x2012 - WGL_PIXEL_TYPE_EXT 0x2013 - WGL_COLOR_BITS_EXT 0x2014 - WGL_RED_BITS_EXT 0x2015 - WGL_RED_SHIFT_EXT 0x2016 - WGL_GREEN_BITS_EXT 0x2017 - WGL_GREEN_SHIFT_EXT 0x2018 - WGL_BLUE_BITS_EXT 0x2019 - WGL_BLUE_SHIFT_EXT 0x201A - WGL_ALPHA_BITS_EXT 0x201B - WGL_ALPHA_SHIFT_EXT 0x201C - WGL_ACCUM_BITS_EXT 0x201D - WGL_ACCUM_RED_BITS_EXT 0x201E - WGL_ACCUM_GREEN_BITS_EXT 0x201F - WGL_ACCUM_BLUE_BITS_EXT 0x2020 - WGL_ACCUM_ALPHA_BITS_EXT 0x2021 - WGL_DEPTH_BITS_EXT 0x2022 - WGL_STENCIL_BITS_EXT 0x2023 - WGL_AUX_BUFFERS_EXT 0x2024 - WGL_NO_ACCELERATION_EXT 0x2025 - WGL_GENERIC_ACCELERATION_EXT 0x2026 - WGL_FULL_ACCELERATION_EXT 0x2027 - WGL_SWAP_EXCHANGE_EXT 0x2028 - WGL_SWAP_COPY_EXT 0x2029 - WGL_SWAP_UNDEFINED_EXT 0x202A - WGL_TYPE_RGBA_EXT 0x202B - WGL_TYPE_COLORINDEX_EXT 0x202C - BOOL wglChoosePixelFormatEXT (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats) - BOOL wglGetPixelFormatAttribfvEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues) - BOOL wglGetPixelFormatAttribivEXT (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format_packed_float b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format_packed_float deleted file mode 100644 index 30925fc5da..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_pixel_format_packed_float +++ /dev/null @@ -1,4 +0,0 @@ -WGL_EXT_pixel_format_packed_float -http://developer.download.nvidia.com/opengl/specs/GL_EXT_packed_float.txt -WGL_EXT_pixel_format_packed_float - WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control deleted file mode 100644 index e806726eee..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control +++ /dev/null @@ -1,5 +0,0 @@ -WGL_EXT_swap_control -http://www.opengl.org/registry/specs/gl/EXT/wgl_swap_control.txt -WGL_EXT_swap_control - int wglGetSwapIntervalEXT (void) - BOOL wglSwapIntervalEXT (int interval) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control_tear b/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control_tear deleted file mode 100644 index b8d8d295f7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_EXT_swap_control_tear +++ /dev/null @@ -1,3 +0,0 @@ -WGL_EXT_swap_control_tear -http://www.opengl.org/registry/specs/gl/EXT/wgl_swap_control_tear.txt -WGL_EXT_swap_control_tear diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_digital_video_control b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_digital_video_control deleted file mode 100644 index 8ab1870d74..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_digital_video_control +++ /dev/null @@ -1,9 +0,0 @@ -WGL_I3D_digital_video_control -http://www.opengl.org/registry/specs/gl/I3D/wgl_digital_video_control.txt -WGL_I3D_digital_video_control - WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 - WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 - WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 - WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 - BOOL wglGetDigitalVideoParametersI3D (HDC hDC, int iAttribute, int* piValue) - BOOL wglSetDigitalVideoParametersI3D (HDC hDC, int iAttribute, const int* piValue) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_gamma b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_gamma deleted file mode 100644 index 4f2ec324af..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_gamma +++ /dev/null @@ -1,9 +0,0 @@ -WGL_I3D_gamma -http://www.opengl.org/registry/specs/gl/I3D/wgl_gamma.txt -WGL_I3D_gamma - WGL_GAMMA_TABLE_SIZE_I3D 0x204E - WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F - BOOL wglGetGammaTableI3D (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue) - BOOL wglGetGammaTableParametersI3D (HDC hDC, int iAttribute, int* piValue) - BOOL wglSetGammaTableI3D (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue) - BOOL wglSetGammaTableParametersI3D (HDC hDC, int iAttribute, const int* piValue) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_genlock b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_genlock deleted file mode 100644 index 8b990d32b4..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_genlock +++ /dev/null @@ -1,24 +0,0 @@ -WGL_I3D_genlock -http://www.opengl.org/registry/specs/gl/I3D/wgl_genlock.txt -WGL_I3D_genlock - WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 - WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 - WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 - WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 - WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 - WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 - WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A - WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B - WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C - BOOL wglDisableGenlockI3D (HDC hDC) - BOOL wglEnableGenlockI3D (HDC hDC) - BOOL wglGenlockSampleRateI3D (HDC hDC, UINT uRate) - BOOL wglGenlockSourceDelayI3D (HDC hDC, UINT uDelay) - BOOL wglGenlockSourceEdgeI3D (HDC hDC, UINT uEdge) - BOOL wglGenlockSourceI3D (HDC hDC, UINT uSource) - BOOL wglGetGenlockSampleRateI3D (HDC hDC, UINT* uRate) - BOOL wglGetGenlockSourceDelayI3D (HDC hDC, UINT* uDelay) - BOOL wglGetGenlockSourceEdgeI3D (HDC hDC, UINT* uEdge) - BOOL wglGetGenlockSourceI3D (HDC hDC, UINT* uSource) - BOOL wglIsEnabledGenlockI3D (HDC hDC, BOOL* pFlag) - BOOL wglQueryGenlockMaxSourceDelayI3D (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_image_buffer b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_image_buffer deleted file mode 100644 index bf735c0023..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_image_buffer +++ /dev/null @@ -1,9 +0,0 @@ -WGL_I3D_image_buffer -http://www.opengl.org/registry/specs/gl/I3D/wgl_image_buffer.txt -WGL_I3D_image_buffer - WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 - WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 - BOOL wglAssociateImageBufferEventsI3D (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count) - LPVOID wglCreateImageBufferI3D (HDC hDC, DWORD dwSize, UINT uFlags) - BOOL wglDestroyImageBufferI3D (HDC hDC, LPVOID pAddress) - BOOL wglReleaseImageBufferEventsI3D (HDC hdc, LPVOID* pAddress, UINT count) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_lock b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_lock deleted file mode 100644 index d009ea741e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_lock +++ /dev/null @@ -1,7 +0,0 @@ -WGL_I3D_swap_frame_lock -http://www.opengl.org/registry/specs/gl/I3D/wgl_swap_frame_lock.txt -WGL_I3D_swap_frame_lock - BOOL wglDisableFrameLockI3D (VOID) - BOOL wglEnableFrameLockI3D (VOID) - BOOL wglIsEnabledFrameLockI3D (BOOL* pFlag) - BOOL wglQueryFrameLockMasterI3D (BOOL* pFlag) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_usage b/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_usage deleted file mode 100644 index 8f41ee8194..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_I3D_swap_frame_usage +++ /dev/null @@ -1,7 +0,0 @@ -WGL_I3D_swap_frame_usage -http://www.opengl.org/registry/specs/gl/I3D/wgl_swap_frame_usage.txt -WGL_I3D_swap_frame_usage - BOOL wglBeginFrameTrackingI3D (void) - BOOL wglEndFrameTrackingI3D (void) - BOOL wglGetFrameUsageI3D (float* pUsage) - BOOL wglQueryFrameTrackingI3D (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop b/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop deleted file mode 100644 index 31cea77efa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop +++ /dev/null @@ -1,14 +0,0 @@ -WGL_NV_DX_interop -http://www.opengl.org/registry/specs/gl/NV/DX_interop.txt -WGL_NV_DX_interop - WGL_ACCESS_READ_ONLY_NV 0x0000 - WGL_ACCESS_READ_WRITE_NV 0x0001 - WGL_ACCESS_WRITE_DISCARD_NV 0x0002 - BOOL wglDXCloseDeviceNV (HANDLE hDevice) - BOOL wglDXLockObjectsNV (HANDLE hDevice, GLint count, HANDLE* hObjects) - BOOL wglDXObjectAccessNV (HANDLE hObject, GLenum access) - HANDLE wglDXOpenDeviceNV (void* dxDevice) - HANDLE wglDXRegisterObjectNV (HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access) - BOOL wglDXSetResourceShareHandleNV (void* dxObject, HANDLE shareHandle) - BOOL wglDXUnlockObjectsNV (HANDLE hDevice, GLint count, HANDLE* hObjects) - BOOL wglDXUnregisterObjectNV (HANDLE hDevice, HANDLE hObject) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop2 b/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop2 deleted file mode 100644 index fe0fb9ef05..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_DX_interop2 +++ /dev/null @@ -1,3 +0,0 @@ -WGL_NV_DX_interop2 -http://www.opengl.org/registry/specs/gl/NV/DX_interop2.txt -WGL_NV_DX_interop2 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_copy_image b/Engine/lib/glew/auto/extensions/gl/WGL_NV_copy_image deleted file mode 100644 index 493b45d950..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_copy_image +++ /dev/null @@ -1,4 +0,0 @@ -WGL_NV_copy_image -http://www.opengl.org/registry/specs/gl/NV/copy_image.txt -WGL_NV_copy_image - BOOL wglCopyImageSubDataNV (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_float_buffer b/Engine/lib/glew/auto/extensions/gl/WGL_NV_float_buffer deleted file mode 100644 index fb32fd27aa..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_float_buffer +++ /dev/null @@ -1,12 +0,0 @@ -WGL_NV_float_buffer -http://www.opengl.org/registry/specs/gl/NV/float_buffer.txt -WGL_NV_float_buffer - WGL_FLOAT_COMPONENTS_NV 0x20B0 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 - WGL_TEXTURE_FLOAT_R_NV 0x20B5 - WGL_TEXTURE_FLOAT_RG_NV 0x20B6 - WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 - WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_gpu_affinity b/Engine/lib/glew/auto/extensions/gl/WGL_NV_gpu_affinity deleted file mode 100644 index f722204cd7..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_gpu_affinity +++ /dev/null @@ -1,12 +0,0 @@ -WGL_NV_gpu_affinity -http://developer.download.nvidia.com/opengl/specs/WGL_nv_gpu_affinity.txt -WGL_NV_gpu_affinity - WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 - WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 - BOOL wglEnumGpusNV (UINT iGpuIndex, HGPUNV *phGpu) - BOOL wglEnumGpuDevicesNV (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice) - HDC wglCreateAffinityDCNV (const HGPUNV *phGpuList) - BOOL wglEnumGpusFromAffinityDCNV (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu) - BOOL wglDeleteDCNV (HDC hdc) - DECLARE_HANDLE(HGPUNV); - typedef struct _GPU_DEVICE { DWORD cb; CHAR DeviceName[32]; CHAR DeviceString[128]; DWORD Flags; RECT rcVirtualScreen; } GPU_DEVICE, *PGPU_DEVICE; diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_multisample_coverage b/Engine/lib/glew/auto/extensions/gl/WGL_NV_multisample_coverage deleted file mode 100644 index c3e748474f..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_multisample_coverage +++ /dev/null @@ -1,5 +0,0 @@ -WGL_NV_multisample_coverage -http://www.opengl.org/registry/specs/gl/NV/multisample_coverage.txt -WGL_NV_multisample_coverage - WGL_COVERAGE_SAMPLES_NV 0x2042 - WGL_COLOR_SAMPLES_NV 0x20B9 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_present_video b/Engine/lib/glew/auto/extensions/gl/WGL_NV_present_video deleted file mode 100644 index 2b5ca9f80c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_present_video +++ /dev/null @@ -1,8 +0,0 @@ -WGL_NV_present_video -http://www.opengl.org/registry/specs/gl/NV/present_video.txt -WGL_NV_present_video - WGL_NUM_VIDEO_SLOTS_NV 0x20F0 - BOOL wglBindVideoDeviceNV (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int* piAttribList) - int wglEnumerateVideoDevicesNV (HDC hDc, HVIDEOOUTPUTDEVICENV* phDeviceList) - BOOL wglQueryCurrentContextNV (int iAttribute, int* piValue) - DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_depth_texture b/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_depth_texture deleted file mode 100644 index 2fc36cbe6a..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_depth_texture +++ /dev/null @@ -1,9 +0,0 @@ -WGL_NV_render_depth_texture -http://www.opengl.org/registry/specs/gl/NV/render_depth_texture.txt -WGL_NV_render_depth_texture - WGL_NO_TEXTURE_ARB 0x2077 - WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 - WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 - WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 - WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 - WGL_DEPTH_COMPONENT_NV 0x20A7 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_texture_rectangle b/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_texture_rectangle deleted file mode 100644 index ec410c0da5..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_render_texture_rectangle +++ /dev/null @@ -1,6 +0,0 @@ -WGL_NV_render_texture_rectangle -http://www.opengl.org/registry/specs/gl/NV/render_texture_rectangle.txt -WGL_NV_render_texture_rectangle - WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 - WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 - WGL_TEXTURE_RECTANGLE_NV 0x20A2 diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_swap_group b/Engine/lib/glew/auto/extensions/gl/WGL_NV_swap_group deleted file mode 100644 index 5a9d012646..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_swap_group +++ /dev/null @@ -1,9 +0,0 @@ -WGL_NV_swap_group -http://www.opengl.org/registry/specs/gl/NV/wgl_swap_group.txt -WGL_NV_swap_group - BOOL wglBindSwapBarrierNV (GLuint group, GLuint barrier) - BOOL wglJoinSwapGroupNV (HDC hDC, GLuint group) - BOOL wglQueryFrameCountNV (HDC hDC, GLuint* count) - BOOL wglQueryMaxSwapGroupsNV (HDC hDC, GLuint* maxGroups, GLuint *maxBarriers) - BOOL wglQuerySwapGroupNV (HDC hDC, GLuint* group, GLuint *barrier) - BOOL wglResetFrameCountNV (HDC hDC) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_vertex_array_range b/Engine/lib/glew/auto/extensions/gl/WGL_NV_vertex_array_range deleted file mode 100644 index ca22d31a3e..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_vertex_array_range +++ /dev/null @@ -1,5 +0,0 @@ -WGL_NV_vertex_array_range -http://oss.sgi.com/projects/ogl-sample/registry/NV/vertex_array_range.txt -WGL_NV_vertex_array_range - void * wglAllocateMemoryNV (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority) - void wglFreeMemoryNV (void *pointer) diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_capture b/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_capture deleted file mode 100644 index 8c4c68ac36..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_capture +++ /dev/null @@ -1,11 +0,0 @@ -WGL_NV_video_capture -http://www.opengl.org/registry/specs/gl/NV/video_capture.txt -WGL_NV_video_capture - WGL_UNIQUE_ID_NV 0x20CE - WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - BOOL wglBindVideoCaptureDeviceNV (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice) - UINT wglEnumerateVideoCaptureDevicesNV (HDC hDc, HVIDEOINPUTDEVICENV* phDeviceList) - BOOL wglLockVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice) - BOOL wglQueryVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int* piValue) - BOOL wglReleaseVideoCaptureDeviceNV (HDC hDc, HVIDEOINPUTDEVICENV hDevice) - DECLARE_HANDLE(HVIDEOINPUTDEVICENV); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_output b/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_output deleted file mode 100644 index a3c39164a0..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_NV_video_output +++ /dev/null @@ -1,23 +0,0 @@ -WGL_NV_video_output -http://www.opengl.org/registry/specs/gl/NV/wgl_video_output.txt -WGL_NV_video_output - WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 - WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 - WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 - WGL_VIDEO_OUT_COLOR_NV 0x20C3 - WGL_VIDEO_OUT_ALPHA_NV 0x20C4 - WGL_VIDEO_OUT_DEPTH_NV 0x20C5 - WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 - WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 - WGL_VIDEO_OUT_FRAME 0x20C8 - WGL_VIDEO_OUT_FIELD_1 0x20C9 - WGL_VIDEO_OUT_FIELD_2 0x20CA - WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB - WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC - BOOL wglBindVideoImageNV (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer) - BOOL wglGetVideoDeviceNV (HDC hDC, int numDevices, HPVIDEODEV* hVideoDevice) - BOOL wglGetVideoInfoNV (HPVIDEODEV hpVideoDevice, unsigned long* pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo) - BOOL wglReleaseVideoDeviceNV (HPVIDEODEV hVideoDevice) - BOOL wglReleaseVideoImageNV (HPBUFFERARB hPbuffer, int iVideoBuffer) - BOOL wglSendPbufferToVideoNV (HPBUFFERARB hPbuffer, int iBufferType, unsigned long* pulCounterPbuffer, BOOL bBlock) - DECLARE_HANDLE(HPVIDEODEV); diff --git a/Engine/lib/glew/auto/extensions/gl/WGL_OML_sync_control b/Engine/lib/glew/auto/extensions/gl/WGL_OML_sync_control deleted file mode 100644 index f9c810022c..0000000000 --- a/Engine/lib/glew/auto/extensions/gl/WGL_OML_sync_control +++ /dev/null @@ -1,9 +0,0 @@ -WGL_OML_sync_control -http://www.opengl.org/registry/specs/gl/OML/wgl_sync_control.txt -WGL_OML_sync_control - BOOL wglGetMscRateOML (HDC hdc, INT32* numerator, INT32 *denominator) - BOOL wglGetSyncValuesOML (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc) - INT64 wglSwapBuffersMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder) - INT64 wglSwapLayerBuffersMscOML (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder) - BOOL wglWaitForMscOML (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc) - BOOL wglWaitForSbcOML (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc) diff --git a/Engine/lib/glew/auto/lib/OpenGL/Spec.pm b/Engine/lib/glew/auto/lib/OpenGL/Spec.pm deleted file mode 100644 index 1311b394dd..0000000000 --- a/Engine/lib/glew/auto/lib/OpenGL/Spec.pm +++ /dev/null @@ -1,202 +0,0 @@ -package OpenGL::Spec; - -# A very simple task further complicated by the fact that some people -# can't read, others use legacy Operating Systems, and others don't give -# a damn about using a halfway decent text editor. -# -# The code to parse the _template_ is so simple and straightforward... -# yet the code to parse the real spec files is this mess. - -my %typemap = ( - bitfield => "GLbitfield", - boolean => "GLboolean", - # fsck up in EXT_vertex_array - Boolean => "GLboolean", - byte => "GLbyte", - clampd => "GLclampd", - clampf => "GLclampf", - double => "GLdouble", - enum => "GLenum", - # Intel fsck up - Glenum => "GLenum", - float => "GLfloat", - half => "GLuint", - int => "GLint", - short => "GLshort", - sizei => "GLsizei", - ubyte => "GLubyte", - uint => "GLuint", - ushort => "GLushort", - DMbuffer => "void *", - - # ARB VBO introduces these - sizeiptrARB => "GLsizeiptrARB", - intptrARB => "GLintptrARB", - - # ARB shader objects introduces these, charARB is at least 8 bits, - # handleARB is at least 32 bits - charARB => "GLcharARB", - handleARB => "GLhandleARB", - - # GLX 1.3 defines new types which might not be available at compile time - #GLXFBConfig => "void*", - #GLXFBConfigID => "XID", - #GLXContextID => "XID", - #GLXWindow => "XID", - #GLXPbuffer => "XID", - - # Weird stuff for some SGIX extension - #GLXFBConfigSGIX => "void*", - #GLXFBConfigIDSGIX => "XID", -); - -my %void_typemap = ( - void => "GLvoid", -); - -my $section_re = qr{^[A-Z]}; -my $function_re = qr{^(.+) ([a-z][a-z0-9_]*) \((.+)\)$}i; -my $token_re = qr{^([A-Z0-9][A-Z0-9_]*):?\s+((?:0x)?[0-9A-F]+)(.*)$}; -my $prefix_re = qr{^(?:AGL | GLX | WGL)_}x; -my $eofnc_re = qr{ \);?$ | ^$ }x; -my $function_re = qr{^(.+) ([a-z][a-z0-9_]*) \((.+)\)$}i; -my $prefix_re = qr{^(?:gl | agl | wgl | glX)}x; -my $types_re = __compile_wordlist_cap(keys %typemap); -my $voidtype_re = __compile_wordlist_cap(keys %void_typemap); - -sub new($) -{ - my $class = shift; - my $self = { section => {} }; - $self->{filename} = shift; - local $/; - open(my $fh, "<$self->{filename}") or die "Can't open $self->{filename}"; - my $content = <$fh>; - my $section; - my $s = $self->{section}; - - $content =~ s{[ \t]+$}{}mg; - # Join lines that end with a word-character and ones that *begin* - # with one - $content =~ s{(\w)\n(\w)}{$1 $2}sg; - - foreach (split /\n/, $content) - { - if (/$section_re/) - { - chomp; - s/^Name String$/Name Strings/; # Fix common mistake - $section = $_; - $s->{$section} = ""; - } - elsif (defined $section and exists $s->{$section}) - { - s{^\s+}{}mg; # Remove leading whitespace - $s->{$section} .= $_ . "\n"; - } - } - - $s->{$_} =~ s{(?:^\n+|\n+$)}{}s foreach keys %$s; - - bless $self, $class; -} - -sub sections() -{ - my $self = shift; - keys %{$self->{section}}; -} - -sub name() -{ - my $self = shift; - $self->{section}->{Name}; -} - -sub name_strings() -{ - my $self = shift; - split("\n", $self->{section}->{"Name Strings"}); -} - -sub tokens() -{ - my $self = shift; - my %tokens = (); - foreach (split /\n/, $self->{section}->{"New Tokens"}) - { - next unless /$token_re/; - my ($name, $value) = ($1, $2); - $name =~ s{^}{GL_} unless $name =~ /$prefix_re/; - $tokens{$name} = $value; - } - - return %tokens; -} - -sub functions() -{ - my $self = shift; - my %functions = (); - my @fnc = (); - - foreach (split /\n/, $self->{section}->{"New Procedures and Functions"}) - { - push @fnc, $_ unless ($_ eq "" or $_ eq "None"); - - next unless /$eofnc_re/; - - if (__normalize_proto(@fnc) =~ /$function_re/) - { - my ($return, $name, $parms) = ($1, $2, $3); - if (!__ignore_function($name, $extname)) - { - $name =~ s/^/gl/ unless $name =~ /$prefix_re/; - if ($name =~ /^gl/ && $name !~ /^glX/) - { - $return =~ s/$types_re/$typemap{$1}/g; - $return =~ s/$voidtype_re/$void_typemap{$1}/g; - $parms =~ s/$types_re/$typemap{$1}/g; - $parms =~ s/$voidtype_re/$void_typemap{$1}/g; - } - $functions{$name} = { - rtype => $return, - parms => $parms, - }; - } - } - @fnc = (); - } - - return %functions; -} - -sub __normalize_proto -{ - local $_ = join(" ", @_); - s/\s+/ /g; # multiple whitespace -> single space - s/\s*\(\s*/ \(/; # exactly one space before ( and none after - s/\s*\)\s*/\)/; # no after before or after ) - s/\s*\*([a-zA-Z])/\* $1/; # "* identifier" XXX: g missing? - s/\*wgl/\* wgl/; # "* wgl" XXX: why doesn't the - s/\*glX/\* glX/; # "* glX" previous re catch this? - s/\.\.\./void/; # ... -> void - s/;$//; # remove ; at the end of the line - return $_; -} - -sub __ignore_function -{ - return 0; -} - -sub __compile_regex -{ - my $regex = join('', @_); - return qr/$regex/ -} - -sub __compile_wordlist_cap -{ - __compile_regex('\b(', join('|', @_), ')\b'); -} diff --git a/Engine/lib/glew/auto/src/footer.html b/Engine/lib/glew/auto/src/footer.html deleted file mode 100644 index 3adb9c14cb..0000000000 --- a/Engine/lib/glew/auto/src/footer.html +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/Engine/lib/glew/auto/src/glew.rc b/Engine/lib/glew/auto/src/glew.rc deleted file mode 100644 index 5674cc9cd5..0000000000 --- a/Engine/lib/glew/auto/src/glew.rc +++ /dev/null @@ -1,77 +0,0 @@ - -#include - -#ifdef GLEW_MX -# ifdef GLEW_STATIC -# ifdef _DEBUG -# define FILENAME "glew32mxsd.dll" -# else -# define FILENAME "glew32mxs.dll" -# endif -# else -# ifdef _DEBUG -# define FILENAME "glew32mxd.dll" -# else -# define FILENAME "glew32mx.dll" -# endif -# endif -#else -# ifdef GLEW_STATIC -# ifdef _DEBUG -# define FILENAME "glew32sd.dll" -# else -# define FILENAME "glew32s.dll" -# endif -# else -# ifdef _DEBUG -# define FILENAME "glew32d.dll" -# else -# define FILENAME "glew32.dll" -# endif -# endif -#endif - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// -VS_VERSION_INFO VERSIONINFO -FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG -FILEFLAGS VS_FF_DEBUG -#else -FILEFLAGS 0x0L -#endif -FILEOS VOS__WINDOWS32 -#ifdef GLEW_STATIC -FILETYPE VFT_STATIC_LIB -#else -FILETYPE VFT_DLL -#endif -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "The OpenGL Extension Wrangler Library\r\nCopyright (C) 2002-2008, Milan Ikits \r\nCopyright (C) 2002-2008, Marcelo E. Magallon \r\nCopyright (C) 2002, Lev Povalahev\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without \r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, \r\n this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright notice, \r\n this list of conditions and the following disclaimer in the documentation \r\n and/or other materials provided with the distribution.\r\n* The name of the author may be used to endorse or promote products \r\n derived from this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' \r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\nTHE POSSIBILITY OF SUCH DAMAGE.\r\n\r\n\r\nMesa 3-D graphics library\r\n\r\nVersion: 7.0\r\n\r\nCopyright (C) 1999-2007 Brian Paul All Rights Reserved.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of this software and associated documentation files (the ''Software''),\r\nto deal in the Software without restriction, including without limitation\r\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\r\nand/or sell copies of the Software, and to permit persons to whom the\r\nSoftware is furnished to do so, subject to the following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included\r\nin all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r\nBRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN\r\nAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n\r\nCopyright (c) 2007 The Khronos Group Inc.\r\n\r\nPermission is hereby granted, free of charge, to any person obtaining a\r\ncopy of this software and/or associated documentation files (the\r\n''Materials''), to deal in the Materials without restriction, including\r\nwithout limitation the rights to use, copy, modify, merge, publish,\r\ndistribute, sublicense, and/or sell copies of the Materials, and to\r\npermit persons to whom the Materials are furnished to do so, subject to\r\nthe following conditions:\r\n\r\nThe above copyright notice and this permission notice shall be included\r\nin all copies or substantial portions of the Materials.\r\n\r\nTHE MATERIALS ARE PROVIDED ''AS IS'', WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r\nMATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.\0" - VALUE "CompanyName", "\0" - VALUE "FileDescription", "The OpenGL Extension Wrangler Library\0" - VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "InternalName", "GLEW\0" - VALUE "LegalCopyright", "© 2002-2008 Milan Ikits & Marcelo Magallon\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", FILENAME "\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" - VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/Engine/lib/glew/auto/src/glew_head.c b/Engine/lib/glew/auto/src/glew_head.c deleted file mode 100644 index 252d55a8ea..0000000000 --- a/Engine/lib/glew/auto/src/glew_head.c +++ /dev/null @@ -1,249 +0,0 @@ -#include - -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -/* - * Define glewGetContext and related helper macros. - */ -#ifdef GLEW_MX -# define glewGetContext() ctx -# ifdef _WIN32 -# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx -# define GLEW_CONTEXT_ARG_VAR_INIT ctx -# define wglewGetContext() ctx -# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx -# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx -# else /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define glxewGetContext() ctx -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx -# endif /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx -#else /* GLEW_MX */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define GLEW_CONTEXT_ARG_DEF_LIST void -# define WGLEW_CONTEXT_ARG_DEF_INIT void -# define WGLEW_CONTEXT_ARG_DEF_LIST void -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST void -#endif /* GLEW_MX */ - -#if defined(__sgi) || defined (__sun) || defined(GLEW_APPLE_GLX) -#include -#include -#include - -void* dlGetProcAddress (const GLubyte* name) -{ - static void* h = NULL; - static void* gpa; - - if (h == NULL) - { - if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; - gpa = dlsym(h, "glXGetProcAddress"); - } - - if (gpa != NULL) - return ((void*(*)(const GLubyte*))gpa)(name); - else - return dlsym(h, (const char*)name); -} -#endif /* __sgi || __sun || GLEW_APPLE_GLX */ - -#if defined(__APPLE__) -#include -#include -#include - -#ifdef MAC_OS_X_VERSION_10_3 - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static void* image = NULL; - void* addr; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = dlopen("libRegal.dylib", RTLD_LAZY); -#else - image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY); -#endif - } - if( !image ) return NULL; - addr = dlsym(image, (const char*)name); - if( addr ) return addr; -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#else - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static const struct mach_header* image = NULL; - NSSymbol symbol; - char* symbolName; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = NSAddImage("libRegal.dylib", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#else - image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#endif - } - /* prepend a '_' for the Unix C symbol mangling convention */ - symbolName = malloc(strlen((const char*)name) + 2); - strcpy(symbolName+1, (const char*)name); - symbolName[0] = '_'; - symbol = NULL; - /* if (NSIsSymbolNameDefined(symbolName)) - symbol = NSLookupAndBindSymbol(symbolName); */ - symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; - free(symbolName); - if( symbol ) return NSAddressOfSymbol(symbol); -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#endif /* MAC_OS_X_VERSION_10_3 */ -#endif /* __APPLE__ */ - -/* - * Define glewGetProcAddress. - */ -#if defined(_WIN32) -# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) -# define glewGetProcAddress(name) NSGLGetProcAddress(name) -#elif defined(__sgi) || defined(__sun) -# define glewGetProcAddress(name) dlGetProcAddress(name) -#elif defined(__ANDROID__) -# define glewGetProcAddress(name) NULL /* TODO */ -#elif defined(__native_client__) -# define glewGetProcAddress(name) NULL /* TODO */ -#else /* __linux */ -# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) -#endif - -/* - * Define GLboolean const cast. - */ -#define CONST_CAST(x) (*(GLboolean*)&x) - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the functionality required in this file. - */ -static GLuint _glewStrLen (const GLubyte* s) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0') i++; - return i; -} - -static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0' && s[i] != c) i++; - return (s[i] == '\0' || s[i] == c) ? i : 0; -} - -static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) -{ - GLuint i=0; - if(a == NULL || b == NULL) - return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; - while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; - return i == n ? GL_TRUE : GL_FALSE; -} - -static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) - { - (*a)++; - (*na)--; - } - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -/* - * Search for name in the extensions string. Use of strstr() - * is not sufficient because extension names can be prefixes of - * other extension names. Could use strtok() but the constant - * string returned by glGetString might be in read-only memory. - */ -static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) -{ - const GLubyte* p; - GLuint len = _glewStrLen((const GLubyte*)name); - p = start; - while (p < end) - { - GLuint n = _glewStrCLen(p, ' '); - if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; - p += n+1; - } - return GL_FALSE; -} diff --git a/Engine/lib/glew/auto/src/glew_head.h b/Engine/lib/glew/auto/src/glew_head.h deleted file mode 100644 index f33f4403de..0000000000 --- a/Engine/lib/glew/auto/src/glew_head.h +++ /dev/null @@ -1,1113 +0,0 @@ -#ifndef __glew_h__ -#define __glew_h__ -#define __GLEW_H__ - -#if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H) -#error gl.h included before glew.h -#endif -#if defined(__gl2_h_) -#error gl2.h included before glew.h -#endif -#if defined(__gltypes_h_) -#error gltypes.h included before glew.h -#endif -#if defined(__REGAL_H__) -#error Regal.h included before glew.h -#endif -#if defined(__glext_h_) || defined(__GLEXT_H_) -#error glext.h included before glew.h -#endif -#if defined(__gl_ATI_h_) -#error glATI.h included before glew.h -#endif - -#define __gl_h_ -#define __gl2_h_ -#define __GL_H__ -#define __gltypes_h_ -#define __REGAL_H__ -#define __X_GL_H -#define __glext_h_ -#define __GLEXT_H_ -#define __gl_ATI_h_ - -#if defined(_WIN32) - -/* - * GLEW does not include to avoid name space pollution. - * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t - * defined properly. - */ -/* */ -#ifndef APIENTRY -#define GLEW_APIENTRY_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define APIENTRY __stdcall -# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) -# define APIENTRY __stdcall -# else -# define APIENTRY -# endif -#endif -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# endif -#endif -/* */ -#ifndef CALLBACK -#define GLEW_CALLBACK_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define CALLBACK __attribute__ ((__stdcall__)) -# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) -# define CALLBACK __stdcall -# else -# define CALLBACK -# endif -#endif -/* and */ -#ifndef WINGDIAPI -#define GLEW_WINGDIAPI_DEFINED -#define WINGDIAPI __declspec(dllimport) -#endif -/* */ -#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) -typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -#endif -/* */ -#if !defined(_W64) -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && defined(_MSC_VER) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif -#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) && !defined(__MINGW64__) -# ifdef _WIN64 -typedef __int64 ptrdiff_t; -# else -typedef _W64 int ptrdiff_t; -# endif -# define _PTRDIFF_T_DEFINED -# define _PTRDIFF_T_ -#endif - -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# else -# define GLAPI WINGDIAPI -# endif -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY APIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY APIENTRY -#endif - -/* - * GLEW_STATIC is defined for static library. - * GLEW_BUILD is defined for building the DLL library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#else /* _UNIX */ - -/* - * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO - * C. On my system, this amounts to _3 lines_ of included code, all of - * them pretty much harmless. If you know of a way of detecting 32 vs - * 64 _targets_ at compile time you are free to replace this with - * something that's portable. For now, _this_ is the portable solution. - * (mem, 2004-01-04) - */ - -#include - -/* SGI MIPSPro doesn't like stdint.h in C++ mode */ -/* ID: 3376260 Solaris 9 has inttypes.h, but not stdint.h */ - -#if (defined(__sgi) || defined(__sun)) && !defined(__GNUC__) -#include -#else -#include -#endif - -#define GLEW_APIENTRY_DEFINED -#define APIENTRY - -/* - * GLEW_STATIC is defined for static library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# if defined(__GNUC__) && __GNUC__>=4 -# define GLEWAPI extern __attribute__ ((visibility("default"))) -# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) -# define GLEWAPI extern __global -# else -# define GLEWAPI extern -# endif -#endif - -/* */ -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY -#endif - -#endif /* _WIN32 */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* ----------------------------- GL_VERSION_1_1 ---------------------------- */ - -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 - -typedef unsigned int GLenum; -typedef unsigned int GLbitfield; -typedef unsigned int GLuint; -typedef int GLint; -typedef int GLsizei; -typedef unsigned char GLboolean; -typedef signed char GLbyte; -typedef short GLshort; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; -typedef unsigned long GLulong; -typedef float GLfloat; -typedef float GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void GLvoid; -#if defined(_MSC_VER) && _MSC_VER < 1400 -typedef __int64 GLint64EXT; -typedef unsigned __int64 GLuint64EXT; -#elif defined(_MSC_VER) || defined(__BORLANDC__) -typedef signed long long GLint64EXT; -typedef unsigned long long GLuint64EXT; -#else -# if defined(__MINGW32__) || defined(__CYGWIN__) -#include -# endif -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif -typedef GLint64EXT GLint64; -typedef GLuint64EXT GLuint64; -typedef struct __GLsync *GLsync; - -typedef char GLchar; - -#define GL_ZERO 0 -#define GL_FALSE 0 -#define GL_LOGIC_OP 0x0BF1 -#define GL_NONE 0 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_NO_ERROR 0 -#define GL_POINTS 0x0000 -#define GL_CURRENT_BIT 0x00000001 -#define GL_TRUE 1 -#define GL_ONE 1 -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_POINT_BIT 0x00000002 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_LINE_STRIP 0x0003 -#define GL_LINE_BIT 0x00000004 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON 0x0009 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM 0x0100 -#define GL_LOAD 0x0101 -#define GL_RETURN 0x0102 -#define GL_MULT 0x0103 -#define GL_ADD 0x0104 -#define GL_NEVER 0x0200 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_EXP 0x0800 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_EXP2 0x0801 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LIST_MODE 0x0B30 -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_SHADE_MODEL 0x0B54 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_FOG 0x0B60 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_COLOR 0x0B66 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_MATRIX_MODE 0x0BA0 -#define GL_NORMALIZE 0x0BA1 -#define GL_VIEWPORT 0x0BA2 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_INDEX_MODE 0x0C30 -#define GL_RGBA_MODE 0x0C31 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_RENDER_MODE 0x0C40 -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_FOG_HINT 0x0C54 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_INDEX_BITS 0x0D51 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_DOUBLE 0x140A -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_EMISSION 0x1600 -#define GL_SHININESS 0x1601 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_COLOR_INDEX 0x1900 -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_BITMAP 0x1A00 -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_RENDER 0x1C00 -#define GL_FEEDBACK 0x1C01 -#define GL_SELECT 0x1C02 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_S 0x2000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 -#define GL_MODULATE 0x2100 -#define GL_DECAL 0x2101 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_ENV 0x2300 -#define GL_EYE_LINEAR 0x2400 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_SPHERE_MAP 0x2402 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_PLANE 0x2502 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_CLAMP 0x2900 -#define GL_REPEAT 0x2901 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_R3_G3_B2 0x2A10 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 -#define GL_LIGHT0 0x4000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_HINT_BIT 0x00008000 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0x000fffff -#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff - -GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value); -GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref); -GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void GLAPIENTRY glArrayElement (GLint i); -GLAPI void GLAPIENTRY glBegin (GLenum mode); -GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); -GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); -GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GLAPI void GLAPIENTRY glCallList (GLuint list); -GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); -GLAPI void GLAPIENTRY glClear (GLbitfield mask); -GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); -GLAPI void GLAPIENTRY glClearIndex (GLfloat c); -GLAPI void GLAPIENTRY glClearStencil (GLint s); -GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation); -GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue); -GLAPI void GLAPIENTRY glColor3iv (const GLint *v); -GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void GLAPIENTRY glColor3sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void GLAPIENTRY glColor3usv (const GLushort *v); -GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void GLAPIENTRY glColor4iv (const GLint *v); -GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); -GLAPI void GLAPIENTRY glColor4sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); -GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); -GLAPI void GLAPIENTRY glColor4usv (const GLushort *v); -GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); -GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glCullFace (GLenum mode); -GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range); -GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); -GLAPI void GLAPIENTRY glDepthFunc (GLenum func); -GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); -GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); -GLAPI void GLAPIENTRY glDisable (GLenum cap); -GLAPI void GLAPIENTRY glDisableClientState (GLenum array); -GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); -GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag); -GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag); -GLAPI void GLAPIENTRY glEnable (GLenum cap); -GLAPI void GLAPIENTRY glEnableClientState (GLenum array); -GLAPI void GLAPIENTRY glEnd (void); -GLAPI void GLAPIENTRY glEndList (void); -GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u); -GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u); -GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v); -GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v); -GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); -GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -GLAPI void GLAPIENTRY glEvalPoint1 (GLint i); -GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j); -GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); -GLAPI void GLAPIENTRY glFinish (void); -GLAPI void GLAPIENTRY glFlush (void); -GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glFrontFace (GLenum mode); -GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range); -GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); -GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); -GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); -GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); -GLAPI GLenum GLAPIENTRY glGetError (void); -GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); -GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); -GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); -GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); -GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); -GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values); -GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params); -GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask); -GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); -GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); -GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); -GLAPI void GLAPIENTRY glIndexMask (GLuint mask); -GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glIndexd (GLdouble c); -GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c); -GLAPI void GLAPIENTRY glIndexf (GLfloat c); -GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c); -GLAPI void GLAPIENTRY glIndexi (GLint c); -GLAPI void GLAPIENTRY glIndexiv (const GLint *c); -GLAPI void GLAPIENTRY glIndexs (GLshort c); -GLAPI void GLAPIENTRY glIndexsv (const GLshort *c); -GLAPI void GLAPIENTRY glIndexub (GLubyte c); -GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c); -GLAPI void GLAPIENTRY glInitNames (void); -GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); -GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); -GLAPI GLboolean GLAPIENTRY glIsList (GLuint list); -GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); -GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern); -GLAPI void GLAPIENTRY glLineWidth (GLfloat width); -GLAPI void GLAPIENTRY glListBase (GLuint base); -GLAPI void GLAPIENTRY glLoadIdentity (void); -GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glLoadName (GLuint name); -GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); -GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); -GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); -GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glMatrixMode (GLenum mode); -GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode); -GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); -GLAPI void GLAPIENTRY glNormal3iv (const GLint *v); -GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); -GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v); -GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void GLAPIENTRY glPassThrough (GLfloat token); -GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values); -GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); -GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); -GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); -GLAPI void GLAPIENTRY glPointSize (GLfloat size); -GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask); -GLAPI void GLAPIENTRY glPopAttrib (void); -GLAPI void GLAPIENTRY glPopClientAttrib (void); -GLAPI void GLAPIENTRY glPopMatrix (void); -GLAPI void GLAPIENTRY glPopName (void); -GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); -GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushMatrix (void); -GLAPI void GLAPIENTRY glPushName (GLuint name); -GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v); -GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); -GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); -GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); -GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); -GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2); -GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); -GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2); -GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode); -GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); -GLAPI void GLAPIENTRY glShadeModel (GLenum mode); -GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GLAPI void GLAPIENTRY glStencilMask (GLuint mask); -GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s); -GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s); -GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord1i (GLint s); -GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord1s (GLshort s); -GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t); -GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t); -GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); -GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glVertex2iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glVertex3iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glVertex4iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) - -#endif /* GL_VERSION_1_1 */ - -/* ---------------------------------- GLU ---------------------------------- */ - -#ifndef GLEW_NO_GLU -/* this is where we can safely include GLU */ -# if defined(__APPLE__) && defined(__MACH__) -# include -# else -# include -# endif -#endif - diff --git a/Engine/lib/glew/auto/src/glew_init_gl.c b/Engine/lib/glew/auto/src/glew_init_gl.c deleted file mode 100644 index 39efd2c38a..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_gl.c +++ /dev/null @@ -1,72 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -GLboolean GLEWAPIENTRY glewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - start = (const GLubyte*)glGetString(GL_EXTENSIONS); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -/* ------------------------------------------------------------------------- */ - -#ifndef GLEW_MX -static -#endif -GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) -{ - const GLubyte* s; - GLuint dot; - GLint major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* query opengl version */ - s = glGetString(GL_VERSION); - dot = _glewStrCLen(s, '.'); - if (dot == 0) - return GLEW_ERROR_NO_GL_VERSION; - - major = s[dot-1]-'0'; - minor = s[dot+1]-'0'; - - if (minor < 0 || minor > 9) - minor = 0; - if (major<0 || major>9) - return GLEW_ERROR_NO_GL_VERSION; - - - if (major == 1 && minor == 0) - { - return GLEW_ERROR_GL_VERSION_10_ONLY; - } - else - { - CONST_CAST(GLEW_VERSION_4_4) = ( major > 4 ) || ( major == 4 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_3) = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_2) = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_1) = GLEW_VERSION_4_2 == GL_TRUE || ( major == 4 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_0) = GLEW_VERSION_4_1 == GL_TRUE || ( major == 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_3) = GLEW_VERSION_4_0 == GL_TRUE || ( major == 3 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_2) = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_1) = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_0) = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_1) = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_0) = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_5) = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_4) = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_3) = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2_1) = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2) = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_1) = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - } - - /* query opengl extensions string */ - extStart = glGetString(GL_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte*)""; - extEnd = extStart + _glewStrLen(extStart); - - /* initialize extensions */ diff --git a/Engine/lib/glew/auto/src/glew_init_glx.c b/Engine/lib/glew/auto/src/glew_init_glx.c deleted file mode 100644 index f5b393b2da..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_glx.c +++ /dev/null @@ -1,53 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -GLboolean glxewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - - if (glXGetCurrentDisplay == NULL) return GL_FALSE; - start = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (0 == start) return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) -{ - int major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* initialize core GLX 1.2 */ - if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; - /* initialize flags */ - CONST_CAST(GLXEW_VERSION_1_0) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_1) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_2) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_4) = GL_TRUE; - /* query GLX version */ - glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); - if (major == 1 && minor <= 3) - { - switch (minor) - { - case 3: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - break; - case 2: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_FALSE; - break; - default: - return GLEW_ERROR_GLX_VERSION_11_ONLY; - break; - } - } - /* query GLX extension string */ - extStart = 0; - if (glXGetCurrentDisplay != NULL) - extStart = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte *)""; - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ diff --git a/Engine/lib/glew/auto/src/glew_init_tail.c b/Engine/lib/glew/auto/src/glew_init_tail.c deleted file mode 100644 index 2316fb3207..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_tail.c +++ /dev/null @@ -1,57 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error) -{ - static const GLubyte* _glewErrorString[] = - { - (const GLubyte*)"No error", - (const GLubyte*)"Missing GL version", - (const GLubyte*)"GL 1.1 and up are not supported", - (const GLubyte*)"GLX 1.2 and up are not supported", - (const GLubyte*)"Unknown error" - }; - const int max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; - return _glewErrorString[(int)error > max_error ? max_error : (int)error]; -} - -const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) -{ - static const GLubyte* _glewString[] = - { - (const GLubyte*)NULL, - (const GLubyte*)"GLEW_VERSION_STRING", - (const GLubyte*)"GLEW_VERSION_MAJOR_STRING", - (const GLubyte*)"GLEW_VERSION_MINOR_STRING", - (const GLubyte*)"GLEW_VERSION_MICRO_STRING" - }; - const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; - return _glewString[(int)name > max_string ? 0 : (int)name]; -} - -/* ------------------------------------------------------------------------ */ - -GLboolean glewExperimental = GL_FALSE; - -#if !defined(GLEW_MX) - -#if defined(_WIN32) -extern GLenum GLEWAPIENTRY wglewContextInit (void); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -extern GLenum GLEWAPIENTRY glxewContextInit (void); -#endif /* _WIN32 */ - -GLenum GLEWAPIENTRY glewInit (void) -{ - GLenum r; - r = glewContextInit(); - if ( r != 0 ) return r; -#if defined(_WIN32) - return wglewContextInit(); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ - return glxewContextInit(); -#else - return r; -#endif /* _WIN32 */ -} - -#endif /* !GLEW_MX */ diff --git a/Engine/lib/glew/auto/src/glew_init_wgl.c b/Engine/lib/glew/auto/src/glew_init_wgl.c deleted file mode 100644 index 7e76099a56..0000000000 --- a/Engine/lib/glew/auto/src/glew_init_wgl.c +++ /dev/null @@ -1,41 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; -static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; - -GLboolean GLEWAPIENTRY wglewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - return GL_FALSE; - else - start = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - start = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) -{ - GLboolean crippled; - const GLubyte* extStart; - const GLubyte* extEnd; - /* find wgl extension string query functions */ - _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); - _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); - /* query wgl extension string */ - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - extStart = (const GLubyte*)""; - else - extStart = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - extStart = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ - crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; diff --git a/Engine/lib/glew/auto/src/glew_license.h b/Engine/lib/glew/auto/src/glew_license.h deleted file mode 100644 index 5c3e781f71..0000000000 --- a/Engine/lib/glew/auto/src/glew_license.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - diff --git a/Engine/lib/glew/auto/src/glew_str_glx.c b/Engine/lib/glew/auto/src/glew_str_glx.c deleted file mode 100644 index f6ddc6c6a5..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_glx.c +++ /dev/null @@ -1,21 +0,0 @@ - } - ret = (len == 0); - } - return ret; -} - -#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - -#if defined(GLEW_MX) -GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) -#else -GLboolean glxewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) - { diff --git a/Engine/lib/glew/auto/src/glew_str_head.c b/Engine/lib/glew/auto/src/glew_str_head.c deleted file mode 100644 index ebeb48d637..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_head.c +++ /dev/null @@ -1,13 +0,0 @@ -#ifdef GLEW_MX -GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY glewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) - { diff --git a/Engine/lib/glew/auto/src/glew_str_tail.c b/Engine/lib/glew/auto/src/glew_str_tail.c deleted file mode 100644 index caa95727d3..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_tail.c +++ /dev/null @@ -1,7 +0,0 @@ - } - ret = (len == 0); - } - return ret; -} - -#endif /* _WIN32 */ diff --git a/Engine/lib/glew/auto/src/glew_str_wgl.c b/Engine/lib/glew/auto/src/glew_str_wgl.c deleted file mode 100644 index 20552bd7cb..0000000000 --- a/Engine/lib/glew/auto/src/glew_str_wgl.c +++ /dev/null @@ -1,21 +0,0 @@ - } - ret = (len == 0); - } - return ret; -} - -#if defined(_WIN32) - -#if defined(GLEW_MX) -GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) - { diff --git a/Engine/lib/glew/auto/src/glew_tail.h b/Engine/lib/glew/auto/src/glew_tail.h deleted file mode 100644 index 54023e35c2..0000000000 --- a/Engine/lib/glew/auto/src/glew_tail.h +++ /dev/null @@ -1,74 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -/* error codes */ -#define GLEW_OK 0 -#define GLEW_NO_ERROR 0 -#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ -#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */ -#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */ - -/* string codes */ -#define GLEW_VERSION 1 -#define GLEW_VERSION_MAJOR 2 -#define GLEW_VERSION_MINOR 3 -#define GLEW_VERSION_MICRO 4 - -/* API */ -#ifdef GLEW_MX - -typedef struct GLEWContextStruct GLEWContext; -GLEWAPI GLenum GLEWAPIENTRY glewContextInit (GLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext *ctx, const char *name); - -#define glewInit() glewContextInit(glewGetContext()) -#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x)) -#ifdef _WIN32 -# define GLEW_GET_FUN(x) glewGetContext()->x -#else -# define GLEW_GET_FUN(x) x -#endif - -#else /* GLEW_MX */ - -GLEWAPI GLenum GLEWAPIENTRY glewInit (void); -GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLEW_GET_FUN(x) x - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean glewExperimental; -GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetString (GLenum name); - -#ifdef __cplusplus -} -#endif - -#ifdef GLEW_APIENTRY_DEFINED -#undef GLEW_APIENTRY_DEFINED -#undef APIENTRY -#undef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifdef GLEW_CALLBACK_DEFINED -#undef GLEW_CALLBACK_DEFINED -#undef CALLBACK -#endif - -#ifdef GLEW_WINGDIAPI_DEFINED -#undef GLEW_WINGDIAPI_DEFINED -#undef WINGDIAPI -#endif - -#undef GLAPI -/* #undef GLEWAPI */ - -#endif /* __glew_h__ */ diff --git a/Engine/lib/glew/auto/src/glew_utils.c b/Engine/lib/glew/auto/src/glew_utils.c deleted file mode 100644 index a7748df238..0000000000 --- a/Engine/lib/glew/auto/src/glew_utils.c +++ /dev/null @@ -1,162 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -#include "glew_utils.h" - -#if defined(__APPLE__) -#include -#include -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - NSSymbol symbol; - char* symbolName; - /* prepend a '_' for the Unix C symbol mangling convention */ - symbolName = malloc(strlen((const char*)name) + 2); - strcpy(symbolName+1, (const char*)name); - symbolName[0] = '_'; - symbol = NULL; - if (NSIsSymbolNameDefined(symbolName)) - symbol = NSLookupAndBindSymbol(symbolName); - free(symbolName); - return symbol ? NSAddressOfSymbol(symbol) : NULL; -} -#endif /* __APPLE__ */ - -#if defined(__sgi) || defined (__sun) -#include -#include -#include - -void* dlGetProcAddress (const GLubyte* name) -{ - static void* h = NULL; - static void* gpa; - - if (h == NULL) - { - if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; - gpa = dlsym(h, "glXGetProcAddress"); - } - - if (gpa != NULL) - return ((void*(*)(const GLubyte*))gpa)(name); - else - return dlsym(h, (const char*)name); -} -#endif /* __sgi || __sun */ - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the functionality required in this file. - */ - -GLuint _glewStrLen (const GLubyte* s) -{ - GLuint i=0; - while (s+i != NULL && s[i] != '\0') i++; - return i; -} - -GLuint _glewStrCLen (const GLubyte* s, GLubyte c) -{ - GLuint i=0; - while (s+i != NULL && s[i] != '\0' && s[i] != c) i++; - return i; -} - -GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) -{ - GLuint i=0; - while (i < n && a+i != NULL && b+i != NULL && a[i] == b[i]) i++; - return i == n ? GL_TRUE : GL_FALSE; -} - -GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) - { - *a++; - *na--; - } - if(*na >= nb) - { - GLuint i=0; - while (i < nb && *a+i != NULL && b+i != NULL && *a[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && *a+i != NULL && b+i != NULL && *a[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && *a+i != NULL && b+i != NULL && *a[i] == b[i]) i++; - if (i == nb && (*na == nb || *a[i] == ' ' || *a[i] == '\n' || *a[i] == '\r' || *a[i] == '\t')) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} diff --git a/Engine/lib/glew/auto/src/glew_utils.h b/Engine/lib/glew/auto/src/glew_utils.h deleted file mode 100644 index 4291972a40..0000000000 --- a/Engine/lib/glew/auto/src/glew_utils.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef __glew_utils_h__ -#define __glew_utils_h__ - -#include -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -/* - * Define glewGetContext and related helper macros. - */ -#ifdef GLEW_MX -# define glewGetContext() ctx -# ifdef _WIN32 -# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx -# define GLEW_CONTEXT_ARG_VAR_INIT ctx -# define wglewGetContext() ctx -# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx -# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx -# else /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define glxewGetContext() ctx -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx -# endif /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx -#else /* GLEW_MX */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define GLEW_CONTEXT_ARG_DEF_LIST void -# define WGLEW_CONTEXT_ARG_DEF_INIT void -# define WGLEW_CONTEXT_ARG_DEF_LIST void -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST void -#endif /* GLEW_MX */ - -/* - * Define glewGetProcAddress. - */ -#if defined(_WIN32) -# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) -#else -# if defined(__APPLE__) - extern void* NSGLGetProcAddress (const GLubyte* name); -# define glewGetProcAddress(name) NSGLGetProcAddress(name) -# else -# if defined(__sgi) || defined(__sun) - extern void* dlGetProcAddress (const GLubyte* name); -# define glewGetProcAddress(name) dlGetProcAddress(name) -# else /* __linux */ -# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) -# endif -# endif -#endif - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the string processing functionality required in the library. - */ -extern GLuint _glewStrLen (const GLubyte* s); -extern GLuint _glewStrCLen (const GLubyte* s, GLubyte c); -extern GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n); -extern GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb); -extern GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb); -extern GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) - -#endif /* __glew_utils_h__ */ diff --git a/Engine/lib/glew/auto/src/glewinfo.rc b/Engine/lib/glew/auto/src/glewinfo.rc deleted file mode 100644 index 60b001dfdb..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo.rc +++ /dev/null @@ -1,57 +0,0 @@ - -#include - -#ifdef GLEW_MX -# ifdef _DEBUG -# define FILENAME "glewinfo-mxd.exe" -# else -# define FILENAME "glewinfo-mx.exe" -# endif -#else -# ifdef _DEBUG -# define FILENAME "glewinfod.exe" -# else -# define FILENAME "glewinfo.exe" -# endif -#endif - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// -VS_VERSION_INFO VERSIONINFO -FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG -FILEFLAGS VS_FF_DEBUG -#else -FILEFLAGS 0x0L -#endif -FILEOS VOS__WINDOWS32 -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "The OpenGL Extension Wrangler Library\r\nCopyright (C) 2002-2008, Milan Ikits \r\nCopyright (C) 2002-2008, Marcelo E. Magallon \r\nCopyright (C) 2002, Lev Povalahev\r\nAll rights reserved.\r\n \r\nRedistribution and use in source and binary forms, with or without \r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, \r\n this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright notice, \r\n this list of conditions and the following disclaimer in the documentation \r\n and/or other materials provided with the distribution.\r\n* The name of the author may be used to endorse or promote products \r\n derived from this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' \r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\nTHE POSSIBILITY OF SUCH DAMAGE.\r\n\r\nLicense Applicability. Except to the extent portions of this file are\r\nmade subject to an alternative license as permitted in the SGI Free\r\nSoftware License B, Version 1.1 (the 'License'), the contents of this\r\nfile are subject only to the provisions of the License. You may not use\r\nthis file except in compliance with the License. You may obtain a copy\r\nof the License at Silicon Graphics, Inc., attn: Legal Services, 1600\r\nAmphitheatre Parkway, Mountain View, CA 94043-1351, or at:\r\n\r\nhttp://oss.sgi.com/projects/FreeB\r\n\r\nNote that, as provided in the License, the Software is distributed on an\r\n'AS IS' basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS\r\nDISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND\r\nCONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A\r\nPARTICULAR PURPOSE, AND NON-INFRINGEMENT.\r\n\r\nOriginal Code. The Original Code is: OpenGL Sample Implementation,\r\nVersion 1.2.1, released January 26, 2000, developed by Silicon Graphics,\r\nInc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.\r\nCopyright in any portions created by third parties is as indicated\r\nelsewhere herein. All Rights Reserved.\r\n\r\nAdditional Notice Provisions: This software was created using the\r\nOpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has\r\nnot been independently verified as being compliant with the OpenGL(R)\r\nversion 1.2.1 Specification.\0" - VALUE "CompanyName", "\0" - VALUE "FileDescription", "Utility for verifying extension entry points\0" - VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "InternalName", "glewinfo\0" - VALUE "LegalCopyright", "© 2002-2008 Milan Ikits & Marcelo Magallon\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", FILENAME "\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" - VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/Engine/lib/glew/auto/src/glewinfo_gl.c b/Engine/lib/glew/auto/src/glewinfo_gl.c deleted file mode 100644 index 9d7835d0b8..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_gl.c +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -static void glewInfo (void) -{ -#ifdef GL_VERSION_1_1 - _glewInfo_GL_VERSION_1_1(); -#endif /* GL_VERSION_1_1 */ diff --git a/Engine/lib/glew/auto/src/glewinfo_glx.c b/Engine/lib/glew/auto/src/glewinfo_glx.c deleted file mode 100644 index 287d7e1fd1..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_glx.c +++ /dev/null @@ -1,6 +0,0 @@ -} - -#else /* _UNIX */ - -static void glxewInfo () -{ diff --git a/Engine/lib/glew/auto/src/glewinfo_head.c b/Engine/lib/glew/auto/src/glewinfo_head.c deleted file mode 100644 index 95a36a7d5a..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_head.c +++ /dev/null @@ -1,81 +0,0 @@ -#include -#include -#include -#include -#if defined(_WIN32) -#include -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -#include -#endif - -#ifdef GLEW_REGAL -#include -#endif - -static FILE* f; - -#ifdef GLEW_MX -GLEWContext _glewctx; -#define glewGetContext() (&_glewctx) -#ifdef _WIN32 -WGLEWContext _wglewctx; -#define wglewGetContext() (&_wglewctx) -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLXEWContext _glxewctx; -#define glxewGetContext() (&_glxewctx) -#endif -#endif - -#if defined(_WIN32) -GLboolean glewCreateContext (int* pixelformat); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewCreateContext (const char* display, int* visual); -#else -GLboolean glewCreateContext (); -#endif - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual); -#endif - -void glewDestroyContext (); - -/* ------------------------------------------------------------------------- */ - -static void glewPrintExt (const char* name, GLboolean def1, GLboolean def2, GLboolean def3) -{ - unsigned int i; - fprintf(f, "\n%s:", name); - for (i=0; i<62-strlen(name); i++) fprintf(f, " "); - fprintf(f, "%s ", def1 ? "OK" : "MISSING"); - if (def1 != def2) - fprintf(f, "[%s] ", def2 ? "OK" : "MISSING"); - if (def1 != def3) - fprintf(f, "[%s]\n", def3 ? "OK" : "MISSING"); - else - fprintf(f, "\n"); - for (i=0; i]\n"); -#else - fprintf(stderr, "Usage: glewinfo [-display ] [-visual ]\n"); -#endif - return 1; - } -#endif - -#if defined(_WIN32) - if (GL_TRUE == glewCreateContext(&visual)) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - if (GL_TRUE == glewCreateContext()) -#else - if (GL_TRUE == glewCreateContext(display, &visual)) -#endif - { - fprintf(stderr, "Error: glewCreateContext failed\n"); - glewDestroyContext(); - return 1; - } - glewExperimental = GL_TRUE; -#ifdef GLEW_MX - err = glewContextInit(glewGetContext()); -#ifdef _WIN32 - err = err || wglewContextInit(wglewGetContext()); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - err = err || glxewContextInit(glxewGetContext()); -#endif - -#else - err = glewInit(); -#endif - if (GLEW_OK != err) - { - fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); - glewDestroyContext(); - return 1; - } -#if defined(_WIN32) - f = fopen("glewinfo.txt", "w"); - if (f == NULL) f = stdout; -#else - f = stdout; -#endif - fprintf(f, "---------------------------\n"); - fprintf(f, " GLEW Extension Info\n"); - fprintf(f, "---------------------------\n\n"); - fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); -#if defined(_WIN32) - fprintf(f, "Reporting capabilities of pixelformat %d\n", visual); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", - display == NULL ? getenv("DISPLAY") : display, visual); -#endif - fprintf(f, "Running on a %s from %s\n", - glGetString(GL_RENDERER), glGetString(GL_VENDOR)); - fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); - glewInfo(); -#if defined(_WIN32) - wglewInfo(); -#else - glxewInfo(); -#endif - if (f != stdout) fclose(f); - glewDestroyContext(); - return 0; -} - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual) -{ - int p = 0; - while (p < argc) - { -#if defined(_WIN32) - if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) - { - if (++p >= argc) return GL_TRUE; - *display = 0; - *visual = strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#else - if (!strcmp(argv[p], "-display")) - { - if (++p >= argc) return GL_TRUE; - *display = argv[p++]; - } - else if (!strcmp(argv[p], "-visual")) - { - if (++p >= argc) return GL_TRUE; - *visual = (int)strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#endif - } - return GL_FALSE; -} -#endif - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) - -HWND wnd = NULL; -HDC dc = NULL; -HGLRC rc = NULL; - -GLboolean glewCreateContext (int* pixelformat) -{ - WNDCLASS wc; - PIXELFORMATDESCRIPTOR pfd; - /* register window class */ - ZeroMemory(&wc, sizeof(WNDCLASS)); - wc.hInstance = GetModuleHandle(NULL); - wc.lpfnWndProc = DefWindowProc; - wc.lpszClassName = "GLEW"; - if (0 == RegisterClass(&wc)) return GL_TRUE; - /* create window */ - wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), NULL); - if (NULL == wnd) return GL_TRUE; - /* get the device context */ - dc = GetDC(wnd); - if (NULL == dc) return GL_TRUE; - /* find pixel format */ - ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); - if (*pixelformat == -1) /* find default */ - { - pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - *pixelformat = ChoosePixelFormat(dc, &pfd); - if (*pixelformat == 0) return GL_TRUE; - } - /* set the pixel format for the dc */ - if (FALSE == SetPixelFormat(dc, *pixelformat, &pfd)) return GL_TRUE; - /* create rendering context */ - rc = wglCreateContext(dc); - if (NULL == rc) return GL_TRUE; - if (FALSE == wglMakeCurrent(dc, rc)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != rc) wglMakeCurrent(NULL, NULL); - if (NULL != rc) wglDeleteContext(rc); - if (NULL != wnd && NULL != dc) ReleaseDC(wnd, dc); - if (NULL != wnd) DestroyWindow(wnd); - UnregisterClass("GLEW", GetModuleHandle(NULL)); -} - -/* ------------------------------------------------------------------------ */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -#include - -AGLContext ctx, octx; - -GLboolean glewCreateContext () -{ - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - /*int major, minor; - SetPortWindowPort(wnd); - aglGetVersion(&major, &minor); - fprintf(stderr, "GL %d.%d\n", major, minor);*/ - pf = aglChoosePixelFormat(NULL, 0, attrib); - if (NULL == pf) return GL_TRUE; - ctx = aglCreateContext(pf, NULL); - if (NULL == ctx || AGL_NO_ERROR != aglGetError()) return GL_TRUE; - aglDestroyPixelFormat(pf); - /*aglSetDrawable(ctx, GetWindowPort(wnd));*/ - octx = aglGetCurrentContext(); - if (GL_FALSE == aglSetCurrentContext(ctx)) return GL_TRUE; - /* Needed for Regal on the Mac */ - #if defined(GLEW_REGAL) && defined(__APPLE__) - RegalMakeCurrent(octx); - #endif - return GL_FALSE; -} - -void glewDestroyContext () -{ - aglSetCurrentContext(octx); - if (NULL != ctx) aglDestroyContext(ctx); -} - -/* ------------------------------------------------------------------------ */ - -#else /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -Display* dpy = NULL; -XVisualInfo* vi = NULL; -XVisualInfo* vis = NULL; -GLXContext ctx = NULL; -Window wnd = 0; -Colormap cmap = 0; - -GLboolean glewCreateContext (const char* display, int* visual) -{ - int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; - int erb, evb; - XSetWindowAttributes swa; - /* open display */ - dpy = XOpenDisplay(display); - if (NULL == dpy) return GL_TRUE; - /* query for glx */ - if (!glXQueryExtension(dpy, &erb, &evb)) return GL_TRUE; - /* choose visual */ - if (*visual == -1) - { - vi = glXChooseVisual(dpy, DefaultScreen(dpy), attrib); - if (NULL == vi) return GL_TRUE; - *visual = (int)XVisualIDFromVisual(vi->visual); - } - else - { - int n_vis, i; - vis = XGetVisualInfo(dpy, 0, NULL, &n_vis); - for (i=0; iscreen), 0, 0, 1, 1, 1, 0, 0);*/ - cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); - swa.border_pixel = 0; - swa.colormap = cmap; - wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), - 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, - CWBorderPixel | CWColormap, &swa); - /* make context current */ - if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != dpy && NULL != ctx) glXDestroyContext(dpy, ctx); - if (NULL != dpy && 0 != wnd) XDestroyWindow(dpy, wnd); - if (NULL != dpy && 0 != cmap) XFreeColormap(dpy, cmap); - if (NULL != vis) - XFree(vis); - else if (NULL != vi) - XFree(vi); - if (NULL != dpy) XCloseDisplay(dpy); -} - -#endif /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ diff --git a/Engine/lib/glew/auto/src/glewinfo_wgl.c b/Engine/lib/glew/auto/src/glewinfo_wgl.c deleted file mode 100644 index 61f101a090..0000000000 --- a/Engine/lib/glew/auto/src/glewinfo_wgl.c +++ /dev/null @@ -1,8 +0,0 @@ -} - -/* ------------------------------------------------------------------------ */ - -#ifdef _WIN32 - -static void wglewInfo () -{ diff --git a/Engine/lib/glew/auto/src/glxew_head.h b/Engine/lib/glew/auto/src/glxew_head.h deleted file mode 100644 index 16fdfa4126..0000000000 --- a/Engine/lib/glew/auto/src/glxew_head.h +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef __glxew_h__ -#define __glxew_h__ -#define __GLXEW_H__ - -#ifdef __glxext_h_ -#error glxext.h included before glxew.h -#endif - -#if defined(GLX_H) || defined(__GLX_glx_h__) || defined(__glx_h__) -#error glx.h included before glxew.h -#endif - -#define __glxext_h_ - -#define GLX_H -#define __GLX_glx_h__ -#define __glx_h__ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* ---------------------------- GLX_VERSION_1_0 --------------------------- */ - -#ifndef GLX_VERSION_1_0 -#define GLX_VERSION_1_0 1 - -#define GLX_USE_GL 1 -#define GLX_BUFFER_SIZE 2 -#define GLX_LEVEL 3 -#define GLX_RGBA 4 -#define GLX_DOUBLEBUFFER 5 -#define GLX_STEREO 6 -#define GLX_AUX_BUFFERS 7 -#define GLX_RED_SIZE 8 -#define GLX_GREEN_SIZE 9 -#define GLX_BLUE_SIZE 10 -#define GLX_ALPHA_SIZE 11 -#define GLX_DEPTH_SIZE 12 -#define GLX_STENCIL_SIZE 13 -#define GLX_ACCUM_RED_SIZE 14 -#define GLX_ACCUM_GREEN_SIZE 15 -#define GLX_ACCUM_BLUE_SIZE 16 -#define GLX_ACCUM_ALPHA_SIZE 17 -#define GLX_BAD_SCREEN 1 -#define GLX_BAD_ATTRIBUTE 2 -#define GLX_NO_EXTENSION 3 -#define GLX_BAD_VISUAL 4 -#define GLX_BAD_CONTEXT 5 -#define GLX_BAD_VALUE 6 -#define GLX_BAD_ENUM 7 - -typedef XID GLXDrawable; -typedef XID GLXPixmap; -#ifdef __sun -typedef struct __glXContextRec *GLXContext; -#else -typedef struct __GLXcontextRec *GLXContext; -#endif - -typedef unsigned int GLXVideoDeviceNV; - -extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); -extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); -extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); -extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); -extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); -extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); -extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); -extern void glXDestroyContext (Display *dpy, GLXContext ctx); -extern Bool glXIsDirect (Display *dpy, GLXContext ctx); -extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask); -extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); -extern GLXContext glXGetCurrentContext (void); -extern GLXDrawable glXGetCurrentDrawable (void); -extern void glXWaitGL (void); -extern void glXWaitX (void); -extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); -extern void glXUseXFont (Font font, int first, int count, int listBase); - -#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) - -#endif /* GLX_VERSION_1_0 */ - -/* ---------------------------- GLX_VERSION_1_1 --------------------------- */ - -#ifndef GLX_VERSION_1_1 -#define GLX_VERSION_1_1 - -#define GLX_VENDOR 0x1 -#define GLX_VERSION 0x2 -#define GLX_EXTENSIONS 0x3 - -extern const char* glXQueryExtensionsString (Display *dpy, int screen); -extern const char* glXGetClientString (Display *dpy, int name); -extern const char* glXQueryServerString (Display *dpy, int screen, int name); - -#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) - -#endif /* GLX_VERSION_1_1 */ - diff --git a/Engine/lib/glew/auto/src/glxew_mid.h b/Engine/lib/glew/auto/src/glxew_mid.h deleted file mode 100644 index e9a3391ace..0000000000 --- a/Engine/lib/glew/auto/src/glxew_mid.h +++ /dev/null @@ -1,9 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT -#else -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ diff --git a/Engine/lib/glew/auto/src/glxew_tail.h b/Engine/lib/glew/auto/src/glxew_tail.h deleted file mode 100644 index 39e9953923..0000000000 --- a/Engine/lib/glew/auto/src/glxew_tail.h +++ /dev/null @@ -1,30 +0,0 @@ -/* ------------------------------------------------------------------------ */ - -#ifdef GLEW_MX - -typedef struct GLXEWContextStruct GLXEWContext; -GLEWAPI GLenum GLEWAPIENTRY glxewContextInit (GLXEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glxewContextIsSupported (const GLXEWContext *ctx, const char *name); - -#define glxewInit() glxewContextInit(glxewGetContext()) -#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x)) -#define GLXEW_GET_FUN(x) x - -#else /* GLEW_MX */ - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLXEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* __glxew_h__ */ diff --git a/Engine/lib/glew/auto/src/header.html b/Engine/lib/glew/auto/src/header.html deleted file mode 100644 index 95fcd739af..0000000000 --- a/Engine/lib/glew/auto/src/header.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -we*%oNFCn$3^d)bi<^5R(8JpSjNloouGwv4p-2bpYce*VpG93vSs_F(%YQy0whjF;FSGY;>>IBaj- zQMwXt@Q?c7#(gjEJ0jcsS$59DKhG0?`_hM(E|uOSa`gP_cC+DmSj_v)*W1JFnm&!i z|EyWFA`;JEw`BWAUD)((u&pE9lhYQk4@7l8v6#ZThgJ8RFE>0x+;eP_{-5-LK7fla z@Vvgk_JMFu8xVZnf4_lio>8szB|OGI_DJ3V{GX78gCq66kAKNQHXxCshkxFu4OqXv zws{(R_U(zb@5~<)^2Z62y7X|tztSn*fKDfQ&x*sxu=gA>XGz%1lY+Pee^Mm zm;6^E%YY5wZ<@QqzM=}f^2(3Tv`%bwpITx+ zf~AV@nXyqfKcd0>_~~u>wP!D^tQf91Pdv8sS$?}O54*Q6$J(&QtlirBlnv&vI2to1 z-7b;NvQKmQ%H_{x>3exUY!e_`X9u7YLs6zxZGiTjFM|JND=?P?<3yxJ*WOG2*st#h zV^Qpf7FmCoVd;f9^}~|xi`%--h2y>v?j=QX`F!a}eQ;S#XG~2+I=)YRxw=J3I2Db-N%N0RE>~zxixP&bp`ZcJ@g-9kTj^_AvFuk{x?ym}hhI zjBb(Q6&LOj4!m(5kLrKcIhK5Vlix4y|L$K~-=ATgB}%gOzxud@e~T%dLx0Cd?ugbr zwWjKPSpWNtT=Tr`bx*HzH1iWPqY)!URA7Z^rJbY?K)EHjFMxmcPuje@dHz-8UsrzE zkCM@slI8bPU$DQ&PfL7P$9GW~alQbbMcp|_#~eWRb5Fbx<5i&PAD`~<_x$&sZ+G9asIGEe3+EiHdU91VpGJ1gmy7!El^?bn z)OIM;eh@BW&UZ-I$1x$Tp>y9xooq46H9M1Uo*Z!<52;!nt*vI5&vPEN%7=EC>+DpH z)#7XB@7TMx!k(#JiLuS?NYfDMY*8IApDSiBP>us=2mJA1U*DyBJlE3IFV-Jm*wg1` z>PMG|3;C13O-|g)29QfW;?iGn>q{^!+=*An+q8pe2jtJQU(dB(RC6;upb;QUxi>`Snuc|PK{-e*|;fOzWLl(qN$GIv;b_4kD8Phee0}J5u@0Bff+{3@E`)CW?`~j;&S^AlE-?j^FIP3Y2 zzHjpuz@Km`p5QSnonCx;FN+t(zxTc8H$NZotSsT4oP8b%?)AKvo~r5Bdkt{nUSxHR zbwB1ame@xdy)$eW+gd1pwhR6Wb=H3PtNZ2GCfxX^D!U;=hPX9m>;p*rROywcCv0n5 zvi_+Hd*ku?oo#d1K9AeIYy*>QUCXfg^~5=k#rp3Yi?IC}>PHl>rvFNhc(v!7{ky)K za8F(wx3l9s#1!Sy>~s{3&&rx%ju%O9;`-$PbjuOeD1N?d?{^ONeS3rQb#?&fN^MB6 zPhTK_|J1$MUtqh{QG6~H*PoIs_8C@xy!f;`rn!Af)bBp@V(hPP$n9B$J}_~$7sdVd zb}DU1yPgwgyGO)vMa|96((eR!@i<7?T(zu@NKtNxUK7Y=e(cC1SjmR-XuF2o^%Uw;WcbS)` z*FWv(?tAWzMvWSk)bC0cWybnH$#;8<-+OJiYGt6`F<(EKmnb`>bc>^2`42qrun%71 zzYF8v+6I)>X*hfBV;Cp@vYmhH*XJtdMtHw-`b9Y7DB>CKGiJ_kwDxOjBa-kdF5Rn_ z%Pu4w_GityHIDf0iIdU459-smk0U?7vK!*ucZGXwi?o~INs`28SYyCf06QlKAnek0MkHUwtF`b z8zCKNk9%sv^Bimv`x;0bYa$iZ`2_c>M}7Z8{hBeC-O(Cd&S??R259dkalbv}+Yil~ zq#Yo!KQ+~-T4!BcH2<|em*75@6LC))l~u;VKe3N*b^G(Wi{Pg_Jp=r_nS}Ehz64wF z)X0$|Uj}9BLzbS@ec!7urElVD&x@;FFJ3SHWe4c&5fr3pxHT(lf6SeJbBQ{MrY$%uxQPg4)pTZNvJLrIRO5{wZ)qa%01) zr^S7Lx#Bu&9HNu&Gd~(*&>5lP?8nO@o_Cj`n{b^&74ckyxIsfN!MG`D=s}XrWjmzL z$?ar&b7YQj7@pO8q1A;le0XEI8RZ9^I69^qR<2w*2X^7M39S?U8T4z|fL~YO-K*d8 z>YLo(dc<=X#B+2vH=gpnTt5!;uU-N6XEsAu$~cZ3djXqpCJ8?E5YTv)=b zc95KHDDjtzzs|B<@%*F3D8sVOKLXnM9ch~}*8MsW#@q*kmXc=AnZ0!Sozs_%9W$1+ z9pu`n{Rg1G;j})E3ge+0`vvs>H6Af|$lyrCeM;lC$3F%CGU)5-`xrbJ&w=<}@8c@R zbbKy^o?o^kX-F|@s{B& z5$G8a`UbvXY0f=!z9Cxq*vfBUob8(%zO~_-;B&!SuwJX>2mcCr#DqE6EhLOtv_NJp zlo|MGvgf?s{j1$AJAS^S1^cHsSwfC2K2gSeR_~Sk$nn(=x3Y$w4kvBhwsrWX=QpKj z?Ygy>82SSC{MjHvzxM{5ca+B<4 z2TJ^x7&y`~Q0BkHK&bOiRjr4E!jQ0hRb1Emg>I#B9BsRN}BlsZuAK&bOiRjr4E!jQ0hRb1Emg>I#B9BsRN}BlsZuAK&bOiRjr4E!jQ0hRb z1Emg>I#B9BsRN}BlsZuAK&bOiRjr4E!jQ0hRb1Emg>I#B9BsRN}BlsZuA zK&bOiRjr4E!jQ0hRb1Emg>I#B9BsRN}BlsZuAK&bOiRjr4E!j UQ0hRb1Emg>I#B9BXY0WK4>RWDjQ{`u literal 0 HcmV?d00001 diff --git a/Engine/lib/sdl/test/testatomic.c b/Engine/lib/sdl/test/testatomic.c new file mode 100644 index 0000000000..41cc9ab1b3 --- /dev/null +++ b/Engine/lib/sdl/test/testatomic.c @@ -0,0 +1,724 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include + +#include "SDL.h" + +/* + Absolutely basic tests just to see if we get the expected value + after calling each function. +*/ + +static +char * +tf(SDL_bool tf) +{ + static char *t = "TRUE"; + static char *f = "FALSE"; + + if (tf) + { + return t; + } + + return f; +} + +static +void RunBasicTest() +{ + int value; + SDL_SpinLock lock = 0; + + SDL_atomic_t v; + SDL_bool tfret = SDL_FALSE; + + SDL_Log("\nspin lock---------------------------------------\n\n"); + + SDL_AtomicLock(&lock); + SDL_Log("AtomicLock lock=%d\n", lock); + SDL_AtomicUnlock(&lock); + SDL_Log("AtomicUnlock lock=%d\n", lock); + + SDL_Log("\natomic -----------------------------------------\n\n"); + + SDL_AtomicSet(&v, 0); + tfret = SDL_AtomicSet(&v, 10) == 0 ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicSet(10) tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = SDL_AtomicAdd(&v, 10) == 10 ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicAdd(10) tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + + SDL_AtomicSet(&v, 0); + SDL_AtomicIncRef(&v); + tfret = (SDL_AtomicGet(&v) == 1) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicIncRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + SDL_AtomicIncRef(&v); + tfret = (SDL_AtomicGet(&v) == 2) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicIncRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = (SDL_AtomicDecRef(&v) == SDL_FALSE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicDecRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + tfret = (SDL_AtomicDecRef(&v) == SDL_TRUE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicDecRef() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + + SDL_AtomicSet(&v, 10); + tfret = (SDL_AtomicCAS(&v, 0, 20) == SDL_FALSE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicCAS() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); + value = SDL_AtomicGet(&v); + tfret = (SDL_AtomicCAS(&v, value, 20) == SDL_TRUE) ? SDL_TRUE : SDL_FALSE; + SDL_Log("AtomicCAS() tfret=%s val=%d\n", tf(tfret), SDL_AtomicGet(&v)); +} + +/**************************************************************************/ +/* Atomic operation test + * Adapted with permission from code by Michael Davidsaver at: + * http://bazaar.launchpad.net/~mdavidsaver/epics-base/atomic/revision/12105#src/libCom/test/epicsAtomicTest.c + * Original copyright 2010 Brookhaven Science Associates as operator of Brookhaven National Lab + * http://www.aps.anl.gov/epics/license/open.php + */ + +/* Tests semantics of atomic operations. Also a stress test + * to see if they are really atomic. + * + * Several threads adding to the same variable. + * at the end the value is compared with the expected + * and with a non-atomic counter. + */ + +/* Number of concurrent incrementers */ +#define NThreads 2 +#define CountInc 100 +#define VALBITS (sizeof(atomicValue)*8) + +#define atomicValue int +#define CountTo ((atomicValue)((unsigned int)(1<<(VALBITS-1))-1)) +#define NInter (CountTo/CountInc/NThreads) +#define Expect (CountTo-NInter*CountInc*NThreads) + +SDL_COMPILE_TIME_ASSERT(size, CountTo>0); /* check for rollover */ + +static SDL_atomic_t good = { 42 }; + +static atomicValue bad = 42; + +static SDL_atomic_t threadsRunning; + +static SDL_sem *threadDone; + +static +int adder(void* junk) +{ + unsigned long N=NInter; + SDL_Log("Thread subtracting %d %lu times\n",CountInc,N); + while (N--) { + SDL_AtomicAdd(&good, -CountInc); + bad-=CountInc; + } + SDL_AtomicAdd(&threadsRunning, -1); + SDL_SemPost(threadDone); + return 0; +} + +static +void runAdder(void) +{ + Uint32 start, end; + int T=NThreads; + + start = SDL_GetTicks(); + + threadDone = SDL_CreateSemaphore(0); + + SDL_AtomicSet(&threadsRunning, NThreads); + + while (T--) + SDL_CreateThread(adder, "Adder", NULL); + + while (SDL_AtomicGet(&threadsRunning) > 0) + SDL_SemWait(threadDone); + + SDL_DestroySemaphore(threadDone); + + end = SDL_GetTicks(); + + SDL_Log("Finished in %f sec\n", (end - start) / 1000.f); +} + +static +void RunEpicTest() +{ + int b; + atomicValue v; + + SDL_Log("\nepic test---------------------------------------\n\n"); + + SDL_Log("Size asserted to be >= 32-bit\n"); + SDL_assert(sizeof(atomicValue)>=4); + + SDL_Log("Check static initializer\n"); + v=SDL_AtomicGet(&good); + SDL_assert(v==42); + + SDL_assert(bad==42); + + SDL_Log("Test negative values\n"); + SDL_AtomicSet(&good, -5); + v=SDL_AtomicGet(&good); + SDL_assert(v==-5); + + SDL_Log("Verify maximum value\n"); + SDL_AtomicSet(&good, CountTo); + v=SDL_AtomicGet(&good); + SDL_assert(v==CountTo); + + SDL_Log("Test compare and exchange\n"); + + b=SDL_AtomicCAS(&good, 500, 43); + SDL_assert(!b); /* no swap since CountTo!=500 */ + v=SDL_AtomicGet(&good); + SDL_assert(v==CountTo); /* ensure no swap */ + + b=SDL_AtomicCAS(&good, CountTo, 44); + SDL_assert(!!b); /* will swap */ + v=SDL_AtomicGet(&good); + SDL_assert(v==44); + + SDL_Log("Test Add\n"); + + v=SDL_AtomicAdd(&good, 1); + SDL_assert(v==44); + v=SDL_AtomicGet(&good); + SDL_assert(v==45); + + v=SDL_AtomicAdd(&good, 10); + SDL_assert(v==45); + v=SDL_AtomicGet(&good); + SDL_assert(v==55); + + SDL_Log("Test Add (Negative values)\n"); + + v=SDL_AtomicAdd(&good, -20); + SDL_assert(v==55); + v=SDL_AtomicGet(&good); + SDL_assert(v==35); + + v=SDL_AtomicAdd(&good, -50); /* crossing zero down */ + SDL_assert(v==35); + v=SDL_AtomicGet(&good); + SDL_assert(v==-15); + + v=SDL_AtomicAdd(&good, 30); /* crossing zero up */ + SDL_assert(v==-15); + v=SDL_AtomicGet(&good); + SDL_assert(v==15); + + SDL_Log("Reset before count down test\n"); + SDL_AtomicSet(&good, CountTo); + v=SDL_AtomicGet(&good); + SDL_assert(v==CountTo); + + bad=CountTo; + SDL_assert(bad==CountTo); + + SDL_Log("Counting down from %d, Expect %d remaining\n",CountTo,Expect); + runAdder(); + + v=SDL_AtomicGet(&good); + SDL_Log("Atomic %d Non-Atomic %d\n",v,bad); + SDL_assert(v==Expect); + SDL_assert(bad!=Expect); +} + +/* End atomic operation test */ +/**************************************************************************/ + +/**************************************************************************/ +/* Lock-free FIFO test */ + +/* This is useful to test the impact of another thread locking the queue + entirely for heavy-weight manipulation. + */ +#define TEST_SPINLOCK_FIFO + +#define NUM_READERS 4 +#define NUM_WRITERS 4 +#define EVENTS_PER_WRITER 1000000 + +/* The number of entries must be a power of 2 */ +#define MAX_ENTRIES 256 +#define WRAP_MASK (MAX_ENTRIES-1) + +typedef struct +{ + SDL_atomic_t sequence; + SDL_Event event; +} SDL_EventQueueEntry; + +typedef struct +{ + SDL_EventQueueEntry entries[MAX_ENTRIES]; + + char cache_pad1[SDL_CACHELINE_SIZE-((sizeof(SDL_EventQueueEntry)*MAX_ENTRIES)%SDL_CACHELINE_SIZE)]; + + SDL_atomic_t enqueue_pos; + + char cache_pad2[SDL_CACHELINE_SIZE-sizeof(SDL_atomic_t)]; + + SDL_atomic_t dequeue_pos; + + char cache_pad3[SDL_CACHELINE_SIZE-sizeof(SDL_atomic_t)]; + +#ifdef TEST_SPINLOCK_FIFO + SDL_SpinLock lock; + SDL_atomic_t rwcount; + SDL_atomic_t watcher; + + char cache_pad4[SDL_CACHELINE_SIZE-sizeof(SDL_SpinLock)-2*sizeof(SDL_atomic_t)]; +#endif + + volatile SDL_bool active; + + /* Only needed for the mutex test */ + SDL_mutex *mutex; + +} SDL_EventQueue; + +static void InitEventQueue(SDL_EventQueue *queue) +{ + int i; + + for (i = 0; i < MAX_ENTRIES; ++i) { + SDL_AtomicSet(&queue->entries[i].sequence, i); + } + SDL_AtomicSet(&queue->enqueue_pos, 0); + SDL_AtomicSet(&queue->dequeue_pos, 0); +#ifdef TEST_SPINLOCK_FIFO + queue->lock = 0; + SDL_AtomicSet(&queue->rwcount, 0); + SDL_AtomicSet(&queue->watcher, 0); +#endif + queue->active = SDL_TRUE; +} + +static SDL_bool EnqueueEvent_LockFree(SDL_EventQueue *queue, const SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status; + +#ifdef TEST_SPINLOCK_FIFO + /* This is a gate so an external thread can lock the queue */ + SDL_AtomicLock(&queue->lock); + SDL_assert(SDL_AtomicGet(&queue->watcher) == 0); + SDL_AtomicIncRef(&queue->rwcount); + SDL_AtomicUnlock(&queue->lock); +#endif + + queue_pos = (unsigned)SDL_AtomicGet(&queue->enqueue_pos); + for ( ; ; ) { + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)SDL_AtomicGet(&entry->sequence); + + delta = (int)(entry_seq - queue_pos); + if (delta == 0) { + /* The entry and the queue position match, try to increment the queue position */ + if (SDL_AtomicCAS(&queue->enqueue_pos, (int)queue_pos, (int)(queue_pos+1))) { + /* We own the object, fill it! */ + entry->event = *event; + SDL_AtomicSet(&entry->sequence, (int)(queue_pos + 1)); + status = SDL_TRUE; + break; + } + } else if (delta < 0) { + /* We ran into an old queue entry, which means it still needs to be dequeued */ + status = SDL_FALSE; + break; + } else { + /* We ran into a new queue entry, get the new queue position */ + queue_pos = (unsigned)SDL_AtomicGet(&queue->enqueue_pos); + } + } + +#ifdef TEST_SPINLOCK_FIFO + SDL_AtomicDecRef(&queue->rwcount); +#endif + return status; +} + +static SDL_bool DequeueEvent_LockFree(SDL_EventQueue *queue, SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status; + +#ifdef TEST_SPINLOCK_FIFO + /* This is a gate so an external thread can lock the queue */ + SDL_AtomicLock(&queue->lock); + SDL_assert(SDL_AtomicGet(&queue->watcher) == 0); + SDL_AtomicIncRef(&queue->rwcount); + SDL_AtomicUnlock(&queue->lock); +#endif + + queue_pos = (unsigned)SDL_AtomicGet(&queue->dequeue_pos); + for ( ; ; ) { + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)SDL_AtomicGet(&entry->sequence); + + delta = (int)(entry_seq - (queue_pos + 1)); + if (delta == 0) { + /* The entry and the queue position match, try to increment the queue position */ + if (SDL_AtomicCAS(&queue->dequeue_pos, (int)queue_pos, (int)(queue_pos+1))) { + /* We own the object, fill it! */ + *event = entry->event; + SDL_AtomicSet(&entry->sequence, (int)(queue_pos+MAX_ENTRIES)); + status = SDL_TRUE; + break; + } + } else if (delta < 0) { + /* We ran into an old queue entry, which means we've hit empty */ + status = SDL_FALSE; + break; + } else { + /* We ran into a new queue entry, get the new queue position */ + queue_pos = (unsigned)SDL_AtomicGet(&queue->dequeue_pos); + } + } + +#ifdef TEST_SPINLOCK_FIFO + SDL_AtomicDecRef(&queue->rwcount); +#endif + return status; +} + +static SDL_bool EnqueueEvent_Mutex(SDL_EventQueue *queue, const SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status = SDL_FALSE; + + SDL_LockMutex(queue->mutex); + + queue_pos = (unsigned)queue->enqueue_pos.value; + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)entry->sequence.value; + + delta = (int)(entry_seq - queue_pos); + if (delta == 0) { + ++queue->enqueue_pos.value; + + /* We own the object, fill it! */ + entry->event = *event; + entry->sequence.value = (int)(queue_pos + 1); + status = SDL_TRUE; + } else if (delta < 0) { + /* We ran into an old queue entry, which means it still needs to be dequeued */ + } else { + SDL_Log("ERROR: mutex failed!\n"); + } + + SDL_UnlockMutex(queue->mutex); + + return status; +} + +static SDL_bool DequeueEvent_Mutex(SDL_EventQueue *queue, SDL_Event *event) +{ + SDL_EventQueueEntry *entry; + unsigned queue_pos; + unsigned entry_seq; + int delta; + SDL_bool status = SDL_FALSE; + + SDL_LockMutex(queue->mutex); + + queue_pos = (unsigned)queue->dequeue_pos.value; + entry = &queue->entries[queue_pos & WRAP_MASK]; + entry_seq = (unsigned)entry->sequence.value; + + delta = (int)(entry_seq - (queue_pos + 1)); + if (delta == 0) { + ++queue->dequeue_pos.value; + + /* We own the object, fill it! */ + *event = entry->event; + entry->sequence.value = (int)(queue_pos + MAX_ENTRIES); + status = SDL_TRUE; + } else if (delta < 0) { + /* We ran into an old queue entry, which means we've hit empty */ + } else { + SDL_Log("ERROR: mutex failed!\n"); + } + + SDL_UnlockMutex(queue->mutex); + + return status; +} + +static SDL_sem *writersDone; +static SDL_sem *readersDone; +static SDL_atomic_t writersRunning; +static SDL_atomic_t readersRunning; + +typedef struct +{ + SDL_EventQueue *queue; + int index; + char padding1[SDL_CACHELINE_SIZE-(sizeof(SDL_EventQueue*)+sizeof(int))%SDL_CACHELINE_SIZE]; + int waits; + SDL_bool lock_free; + char padding2[SDL_CACHELINE_SIZE-sizeof(int)-sizeof(SDL_bool)]; +} WriterData; + +typedef struct +{ + SDL_EventQueue *queue; + int counters[NUM_WRITERS]; + int waits; + SDL_bool lock_free; + char padding[SDL_CACHELINE_SIZE-(sizeof(SDL_EventQueue*)+sizeof(int)*NUM_WRITERS+sizeof(int)+sizeof(SDL_bool))%SDL_CACHELINE_SIZE]; +} ReaderData; + +static int FIFO_Writer(void* _data) +{ + WriterData *data = (WriterData *)_data; + SDL_EventQueue *queue = data->queue; + int i; + SDL_Event event; + + event.type = SDL_USEREVENT; + event.user.windowID = 0; + event.user.code = 0; + event.user.data1 = data; + event.user.data2 = NULL; + + if (data->lock_free) { + for (i = 0; i < EVENTS_PER_WRITER; ++i) { + event.user.code = i; + while (!EnqueueEvent_LockFree(queue, &event)) { + ++data->waits; + SDL_Delay(0); + } + } + } else { + for (i = 0; i < EVENTS_PER_WRITER; ++i) { + event.user.code = i; + while (!EnqueueEvent_Mutex(queue, &event)) { + ++data->waits; + SDL_Delay(0); + } + } + } + SDL_AtomicAdd(&writersRunning, -1); + SDL_SemPost(writersDone); + return 0; +} + +static int FIFO_Reader(void* _data) +{ + ReaderData *data = (ReaderData *)_data; + SDL_EventQueue *queue = data->queue; + SDL_Event event; + + if (data->lock_free) { + for ( ; ; ) { + if (DequeueEvent_LockFree(queue, &event)) { + WriterData *writer = (WriterData*)event.user.data1; + ++data->counters[writer->index]; + } else if (queue->active) { + ++data->waits; + SDL_Delay(0); + } else { + /* We drained the queue, we're done! */ + break; + } + } + } else { + for ( ; ; ) { + if (DequeueEvent_Mutex(queue, &event)) { + WriterData *writer = (WriterData*)event.user.data1; + ++data->counters[writer->index]; + } else if (queue->active) { + ++data->waits; + SDL_Delay(0); + } else { + /* We drained the queue, we're done! */ + break; + } + } + } + SDL_AtomicAdd(&readersRunning, -1); + SDL_SemPost(readersDone); + return 0; +} + +#ifdef TEST_SPINLOCK_FIFO +/* This thread periodically locks the queue for no particular reason */ +static int FIFO_Watcher(void* _data) +{ + SDL_EventQueue *queue = (SDL_EventQueue *)_data; + + while (queue->active) { + SDL_AtomicLock(&queue->lock); + SDL_AtomicIncRef(&queue->watcher); + while (SDL_AtomicGet(&queue->rwcount) > 0) { + SDL_Delay(0); + } + /* Do queue manipulation here... */ + SDL_AtomicDecRef(&queue->watcher); + SDL_AtomicUnlock(&queue->lock); + + /* Wait a bit... */ + SDL_Delay(1); + } + return 0; +} +#endif /* TEST_SPINLOCK_FIFO */ + +static void RunFIFOTest(SDL_bool lock_free) +{ + SDL_EventQueue queue; + WriterData writerData[NUM_WRITERS]; + ReaderData readerData[NUM_READERS]; + Uint32 start, end; + int i, j; + int grand_total; + char textBuffer[1024]; + int len; + + SDL_Log("\nFIFO test---------------------------------------\n\n"); + SDL_Log("Mode: %s\n", lock_free ? "LockFree" : "Mutex"); + + readersDone = SDL_CreateSemaphore(0); + writersDone = SDL_CreateSemaphore(0); + + SDL_memset(&queue, 0xff, sizeof(queue)); + + InitEventQueue(&queue); + if (!lock_free) { + queue.mutex = SDL_CreateMutex(); + } + + start = SDL_GetTicks(); + +#ifdef TEST_SPINLOCK_FIFO + /* Start a monitoring thread */ + if (lock_free) { + SDL_CreateThread(FIFO_Watcher, "FIFOWatcher", &queue); + } +#endif + + /* Start the readers first */ + SDL_Log("Starting %d readers\n", NUM_READERS); + SDL_zero(readerData); + SDL_AtomicSet(&readersRunning, NUM_READERS); + for (i = 0; i < NUM_READERS; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "FIFOReader%d", i); + readerData[i].queue = &queue; + readerData[i].lock_free = lock_free; + SDL_CreateThread(FIFO_Reader, name, &readerData[i]); + } + + /* Start up the writers */ + SDL_Log("Starting %d writers\n", NUM_WRITERS); + SDL_zero(writerData); + SDL_AtomicSet(&writersRunning, NUM_WRITERS); + for (i = 0; i < NUM_WRITERS; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "FIFOWriter%d", i); + writerData[i].queue = &queue; + writerData[i].index = i; + writerData[i].lock_free = lock_free; + SDL_CreateThread(FIFO_Writer, name, &writerData[i]); + } + + /* Wait for the writers */ + while (SDL_AtomicGet(&writersRunning) > 0) { + SDL_SemWait(writersDone); + } + + /* Shut down the queue so readers exit */ + queue.active = SDL_FALSE; + + /* Wait for the readers */ + while (SDL_AtomicGet(&readersRunning) > 0) { + SDL_SemWait(readersDone); + } + + end = SDL_GetTicks(); + + SDL_DestroySemaphore(readersDone); + SDL_DestroySemaphore(writersDone); + + if (!lock_free) { + SDL_DestroyMutex(queue.mutex); + } + + SDL_Log("Finished in %f sec\n", (end - start) / 1000.f); + + SDL_Log("\n"); + for (i = 0; i < NUM_WRITERS; ++i) { + SDL_Log("Writer %d wrote %d events, had %d waits\n", i, EVENTS_PER_WRITER, writerData[i].waits); + } + SDL_Log("Writers wrote %d total events\n", NUM_WRITERS*EVENTS_PER_WRITER); + + /* Print a breakdown of which readers read messages from which writer */ + SDL_Log("\n"); + grand_total = 0; + for (i = 0; i < NUM_READERS; ++i) { + int total = 0; + for (j = 0; j < NUM_WRITERS; ++j) { + total += readerData[i].counters[j]; + } + grand_total += total; + SDL_Log("Reader %d read %d events, had %d waits\n", i, total, readerData[i].waits); + SDL_snprintf(textBuffer, sizeof(textBuffer), " { "); + for (j = 0; j < NUM_WRITERS; ++j) { + if (j > 0) { + len = SDL_strlen(textBuffer); + SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, ", "); + } + len = SDL_strlen(textBuffer); + SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, "%d", readerData[i].counters[j]); + } + len = SDL_strlen(textBuffer); + SDL_snprintf(textBuffer + len, sizeof(textBuffer) - len, " }\n"); + SDL_Log("%s", textBuffer); + } + SDL_Log("Readers read %d total events\n", grand_total); +} + +/* End FIFO test */ +/**************************************************************************/ + +int +main(int argc, char *argv[]) +{ + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + RunBasicTest(); + RunEpicTest(); +/* This test is really slow, so don't run it by default */ +#if 0 + RunFIFOTest(SDL_FALSE); +#endif + RunFIFOTest(SDL_TRUE); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testaudiohotplug.c b/Engine/lib/sdl/test/testaudiohotplug.c new file mode 100644 index 0000000000..e13868ec2e --- /dev/null +++ b/Engine/lib/sdl/test/testaudiohotplug.c @@ -0,0 +1,183 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Program to test hotplugging of audio devices */ + +#include "SDL_config.h" + +#include +#include + +#if HAVE_SIGNAL_H +#include +#endif + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +static SDL_AudioSpec spec; +static Uint8 *sound = NULL; /* Pointer to wave data */ +static Uint32 soundlen = 0; /* Length of wave data */ + +static int posindex = 0; +static Uint32 positions[64]; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +void SDLCALL +fillerup(void *_pos, Uint8 * stream, int len) +{ + Uint32 pos = *((Uint32 *) _pos); + Uint8 *waveptr; + int waveleft; + + /* Set up the pointers */ + waveptr = sound + pos; + waveleft = soundlen - pos; + + /* Go! */ + while (waveleft <= len) { + SDL_memcpy(stream, waveptr, waveleft); + stream += waveleft; + len -= waveleft; + waveptr = sound; + waveleft = soundlen; + pos = 0; + } + SDL_memcpy(stream, waveptr, len); + pos += len; + *((Uint32 *) _pos) = pos; +} + +static int done = 0; +void +poked(int sig) +{ + done = 1; +} + +static void +iteration() +{ + SDL_Event e; + SDL_AudioDeviceID dev; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) { + done = 1; + } else if (e.type == SDL_AUDIODEVICEADDED) { + const char *name = SDL_GetAudioDeviceName(e.adevice.which, 0); + SDL_Log("New %s audio device: %s\n", e.adevice.iscapture ? "capture" : "output", name); + if (!e.adevice.iscapture) { + positions[posindex] = 0; + spec.userdata = &positions[posindex++]; + spec.callback = fillerup; + dev = SDL_OpenAudioDevice(name, 0, &spec, NULL, 0); + if (!dev) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open '%s': %s\n", name, SDL_GetError()); + } else { + SDL_Log("Opened '%s' as %u\n", name, (unsigned int) dev); + SDL_PauseAudioDevice(dev, 0); + } + } + } else if (e.type == SDL_AUDIODEVICEREMOVED) { + dev = (SDL_AudioDeviceID) e.adevice.which; + SDL_Log("%s device %u removed.\n", e.adevice.iscapture ? "capture" : "output", (unsigned int) dev); + SDL_CloseAudioDevice(dev); + } + } +} + +#ifdef __EMSCRIPTEN__ +void +loop() +{ + if(done) + emscripten_cancel_main_loop(); + else + iteration(); +} +#endif + +int +main(int argc, char *argv[]) +{ + int i; + char filename[4096]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Some targets (Mac CoreAudio) need an event queue for audio hotplug, so make and immediately hide a window. */ + SDL_MinimizeWindow(SDL_CreateWindow("testaudiohotplug", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0)); + + if (argc > 1) { + SDL_strlcpy(filename, argv[1], sizeof(filename)); + } else { + SDL_strlcpy(filename, "sample.wav", sizeof(filename)); + } + /* Load the wave file into memory */ + if (SDL_LoadWAV(filename, &spec, &sound, &soundlen) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", filename, SDL_GetError()); + quit(1); + } + +#if HAVE_SIGNAL_H + /* Set the signals */ +#ifdef SIGHUP + signal(SIGHUP, poked); +#endif + signal(SIGINT, poked); +#ifdef SIGQUIT + signal(SIGQUIT, poked); +#endif + signal(SIGTERM, poked); +#endif /* HAVE_SIGNAL_H */ + + /* Show the list of available drivers */ + SDL_Log("Available audio drivers:"); + for (i = 0; i < SDL_GetNumAudioDrivers(); ++i) { + SDL_Log("%i: %s", i, SDL_GetAudioDriver(i)); + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + SDL_Delay(100); + iteration(); + } +#endif + + /* Clean up on signal */ + SDL_FreeWAV(sound); + SDL_Quit(); + return (0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testaudioinfo.c b/Engine/lib/sdl/test/testaudioinfo.c new file mode 100644 index 0000000000..53bf0f5e2f --- /dev/null +++ b/Engine/lib/sdl/test/testaudioinfo.c @@ -0,0 +1,70 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include "SDL.h" + +static void +print_devices(int iscapture) +{ + const char *typestr = ((iscapture) ? "capture" : "output"); + int n = SDL_GetNumAudioDevices(iscapture); + + SDL_Log("%s devices:\n", typestr); + + if (n == -1) + SDL_Log(" Driver can't detect specific %s devices.\n\n", typestr); + else if (n == 0) + SDL_Log(" No %s devices found.\n\n", typestr); + else { + int i; + for (i = 0; i < n; i++) { + SDL_Log(" %s\n", SDL_GetAudioDeviceName(i, iscapture)); + } + SDL_Log("\n"); + } +} + +int +main(int argc, char **argv) +{ + int n; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Print available audio drivers */ + n = SDL_GetNumAudioDrivers(); + if (n == 0) { + SDL_Log("No built-in audio drivers\n\n"); + } else { + int i; + SDL_Log("Built-in audio drivers:\n"); + for (i = 0; i < n; ++i) { + SDL_Log(" %s\n", SDL_GetAudioDriver(i)); + } + SDL_Log("\n"); + } + + SDL_Log("Using audio driver: %s\n\n", SDL_GetCurrentAudioDriver()); + + print_devices(0); + print_devices(1); + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testautomation.c b/Engine/lib/sdl/test/testautomation.c new file mode 100644 index 0000000000..eea74b3b86 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation.c @@ -0,0 +1,124 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +#include "testautomation_suites.h" + +static SDLTest_CommonState *state; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +int +main(int argc, char *argv[]) +{ + int result; + int testIterations = 1; + Uint64 userExecKey = 0; + char *userRunSeed = NULL; + char *filter = NULL; + int i, done; + SDL_Event event; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + /* Parse commandline */ + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--iterations") == 0) { + if (argv[i + 1]) { + testIterations = SDL_atoi(argv[i + 1]); + if (testIterations < 1) testIterations = 1; + consumed = 2; + } + } + else if (SDL_strcasecmp(argv[i], "--execKey") == 0) { + if (argv[i + 1]) { + SDL_sscanf(argv[i + 1], "%"SDL_PRIu64, (long long unsigned int *)&userExecKey); + consumed = 2; + } + } + else if (SDL_strcasecmp(argv[i], "--seed") == 0) { + if (argv[i + 1]) { + userRunSeed = SDL_strdup(argv[i + 1]); + consumed = 2; + } + } + else if (SDL_strcasecmp(argv[i], "--filter") == 0) { + if (argv[i + 1]) { + filter = SDL_strdup(argv[i + 1]); + consumed = 2; + } + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--iterations #] [--execKey #] [--seed string] [--filter suite_name|test_name]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + + i += consumed; + } + + /* Initialize common state */ + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create the windows, initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + } + + /* Call Harness */ + result = SDLTest_RunSuites(testSuites, (const char *)userRunSeed, userExecKey, (const char *)filter, testIterations); + + /* Empty event queue */ + done = 0; + for (i=0; i<100; i++) { + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + SDL_Delay(10); + } + + /* Clean up */ + SDL_free(userRunSeed); + SDL_free(filter); + + /* Shutdown everything */ + quit(result); + return(result); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testautomation_audio.c b/Engine/lib/sdl/test/testautomation_audio.c new file mode 100644 index 0000000000..bef838dde0 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_audio.c @@ -0,0 +1,1038 @@ +/** + * Original code: automated SDL audio test written by Edgar Simo "bobbens" + * New/updated tests: aschiffler at ferzkopp dot net + */ + +/* quiet windows compiler warnings */ +#define _CRT_SECURE_NO_WARNINGS + +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Fixture */ + +void +_audioSetUp(void *arg) +{ + /* Start SDL audio subsystem */ + int ret = SDL_InitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_AUDIO)"); + SDLTest_AssertCheck(ret==0, "Check result from SDL_InitSubSystem(SDL_INIT_AUDIO)"); + if (ret != 0) { + SDLTest_LogError("%s", SDL_GetError()); + } +} + +void +_audioTearDown(void *arg) +{ + /* Remove a possibly created file from SDL disk writer audio driver; ignore errors */ + remove("sdlaudio.raw"); + + SDLTest_AssertPass("Cleanup of test files completed"); +} + + +/* Global counter for callback invocation */ +int _audio_testCallbackCounter; + +/* Global accumulator for total callback length */ +int _audio_testCallbackLength; + + +/* Test callback function */ +void _audio_testCallback(void *userdata, Uint8 *stream, int len) +{ + /* track that callback was called */ + _audio_testCallbackCounter++; + _audio_testCallbackLength += len; +} + + +/* Test case functions */ + +/** + * \brief Stop and restart audio subsystem + * + * \sa https://wiki.libsdl.org/SDL_QuitSubSystem + * \sa https://wiki.libsdl.org/SDL_InitSubSystem + */ +int audio_quitInitAudioSubSystem() +{ + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Start and stop audio directly + * + * \sa https://wiki.libsdl.org/SDL_InitAudio + * \sa https://wiki.libsdl.org/SDL_QuitAudio + */ +int audio_initQuitAudio() +{ + int result; + int i, iMax; + const char* audioDriver; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Call Quit */ + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit()"); + } + + /* NULL driver specification */ + audioDriver = NULL; + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit(NULL)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Call Quit */ + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit()"); + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Start, open, close and stop audio + * + * \sa https://wiki.libsdl.org/SDL_InitAudio + * \sa https://wiki.libsdl.org/SDL_OpenAudio + * \sa https://wiki.libsdl.org/SDL_CloseAudio + * \sa https://wiki.libsdl.org/SDL_QuitAudio + */ +int audio_initOpenCloseQuitAudio() +{ + int result, expectedResult; + int i, iMax, j, k; + const char* audioDriver; + SDL_AudioSpec desired; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); + + /* Change specs */ + for (j = 0; j < 2; j++) { + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Set spec */ + SDL_memset(&desired, 0, sizeof(desired)); + switch (j) { + case 0: + /* Set standard desired spec */ + desired.freq = 22050; + desired.format = AUDIO_S16SYS; + desired.channels = 2; + desired.samples = 4096; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + + case 1: + /* Set custom desired spec */ + desired.freq = 48000; + desired.format = AUDIO_F32SYS; + desired.channels = 2; + desired.samples = 2048; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + break; + } + + /* Call Open (maybe multiple times) */ + for (k=0; k <= j; k++) { + result = SDL_OpenAudio(&desired, NULL); + SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL), call %d", j, k+1); + expectedResult = (k==0) ? 0 : -1; + SDLTest_AssertCheck(result == expectedResult, "Verify return value; expected: %d, got: %d", expectedResult, result); + } + + /* Call Close (maybe multiple times) */ + for (k=0; k <= j; k++) { + SDL_CloseAudio(); + SDLTest_AssertPass("Call to SDL_CloseAudio(), call %d", k+1); + } + + /* Call Quit (maybe multiple times) */ + for (k=0; k <= j; k++) { + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit(), call %d", k+1); + } + + } /* spec loop */ + } /* driver loop */ + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Pause and unpause audio + * + * \sa https://wiki.libsdl.org/SDL_PauseAudio + */ +int audio_pauseUnpauseAudio() +{ + int result; + int i, iMax, j, k, l; + int totalDelay; + int pause_on; + int originalCounter; + const char* audioDriver; + SDL_AudioSpec desired; + + /* Stop SDL audio subsystem */ + SDL_QuitSubSystem( SDL_INIT_AUDIO ); + SDLTest_AssertPass("Call to SDL_QuitSubSystem(SDL_INIT_AUDIO)"); + + /* Loop over all available audio drivers */ + iMax = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(iMax > 0, "Validate number of audio drivers; expected: >0 got: %d", iMax); + for (i = 0; i < iMax; i++) { + audioDriver = SDL_GetAudioDriver(i); + SDLTest_AssertPass("Call to SDL_GetAudioDriver(%d)", i); + SDLTest_AssertCheck(audioDriver != NULL, "Audio driver name is not NULL"); + SDLTest_AssertCheck(audioDriver[0] != '\0', "Audio driver name is not empty; got: %s", audioDriver); + + /* Change specs */ + for (j = 0; j < 2; j++) { + + /* Call Init */ + result = SDL_AudioInit(audioDriver); + SDLTest_AssertPass("Call to SDL_AudioInit('%s')", audioDriver); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0 got: %d", result); + + /* Set spec */ + SDL_memset(&desired, 0, sizeof(desired)); + switch (j) { + case 0: + /* Set standard desired spec */ + desired.freq = 22050; + desired.format = AUDIO_S16SYS; + desired.channels = 2; + desired.samples = 4096; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + + case 1: + /* Set custom desired spec */ + desired.freq = 48000; + desired.format = AUDIO_F32SYS; + desired.channels = 2; + desired.samples = 2048; + desired.callback = _audio_testCallback; + desired.userdata = NULL; + break; + } + + /* Call Open */ + result = SDL_OpenAudio(&desired, NULL); + SDLTest_AssertPass("Call to SDL_OpenAudio(desired_spec_%d, NULL)", j); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0 got: %d", result); + + /* Start and stop audio multiple times */ + for (l=0; l<3; l++) { + SDLTest_Log("Pause/Unpause iteration: %d", l+1); + + /* Reset callback counters */ + _audio_testCallbackCounter = 0; + _audio_testCallbackLength = 0; + + /* Un-pause audio to start playing (maybe multiple times) */ + pause_on = 0; + for (k=0; k <= j; k++) { + SDL_PauseAudio(pause_on); + SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1); + } + + /* Wait for callback */ + totalDelay = 0; + do { + SDL_Delay(10); + totalDelay += 10; + } + while (_audio_testCallbackCounter == 0 && totalDelay < 1000); + SDLTest_AssertCheck(_audio_testCallbackCounter > 0, "Verify callback counter; expected: >0 got: %d", _audio_testCallbackCounter); + SDLTest_AssertCheck(_audio_testCallbackLength > 0, "Verify callback length; expected: >0 got: %d", _audio_testCallbackLength); + + /* Pause audio to stop playing (maybe multiple times) */ + for (k=0; k <= j; k++) { + pause_on = (k==0) ? 1 : SDLTest_RandomIntegerInRange(99, 9999); + SDL_PauseAudio(pause_on); + SDLTest_AssertPass("Call to SDL_PauseAudio(%d), call %d", pause_on, k+1); + } + + /* Ensure callback is not called again */ + originalCounter = _audio_testCallbackCounter; + SDL_Delay(totalDelay + 10); + SDLTest_AssertCheck(originalCounter == _audio_testCallbackCounter, "Verify callback counter; expected: %d, got: %d", originalCounter, _audio_testCallbackCounter); + } + + /* Call Close */ + SDL_CloseAudio(); + SDLTest_AssertPass("Call to SDL_CloseAudio()"); + + /* Call Quit */ + SDL_AudioQuit(); + SDLTest_AssertPass("Call to SDL_AudioQuit()"); + + } /* spec loop */ + } /* driver loop */ + + /* Restart audio again */ + _audioSetUp(NULL); + + return TEST_COMPLETED; +} + +/** + * \brief Enumerate and name available audio devices (output and capture). + * + * \sa https://wiki.libsdl.org/SDL_GetNumAudioDevices + * \sa https://wiki.libsdl.org/SDL_GetAudioDeviceName + */ +int audio_enumerateAndNameAudioDevices() +{ + int t, tt; + int i, n, nn; + const char *name, *nameAgain; + + /* Iterate over types: t=0 output device, t=1 input/capture device */ + for (t=0; t<2; t++) { + + /* Get number of devices. */ + n = SDL_GetNumAudioDevices(t); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(%i)", t); + SDLTest_Log("Number of %s devices < 0, reported as %i", (t) ? "capture" : "output", n); + SDLTest_AssertCheck(n >= 0, "Validate result is >= 0, got: %i", n); + + /* Variation of non-zero type */ + if (t==1) { + tt = t + SDLTest_RandomIntegerInRange(1,10); + nn = SDL_GetNumAudioDevices(tt); + SDLTest_AssertCheck(n==nn, "Verify result from SDL_GetNumAudioDevices(%i), expected same number of audio devices %i, got %i", tt, n, nn); + nn = SDL_GetNumAudioDevices(-tt); + SDLTest_AssertCheck(n==nn, "Verify result from SDL_GetNumAudioDevices(%i), expected same number of audio devices %i, got %i", -tt, n, nn); + } + + /* List devices. */ + if (n>0) { + for (i=0; i0) && (no>nc) && (t==1)) { + i = no-1; + name = SDL_GetAudioDeviceName(i, t); + SDLTest_AssertPass("Call to SDL_GetAudioDeviceName(%i, %i)", i, t); + SDLTest_AssertCheck(name == NULL, "Check SDL_GetAudioDeviceName(%i, %i) result, expected: NULL, got: %s", i, t, (name == NULL) ? "NULL" : name); + } + } + + return TEST_COMPLETED; +} + + +/** + * \brief Checks available audio driver names. + * + * \sa https://wiki.libsdl.org/SDL_GetNumAudioDrivers + * \sa https://wiki.libsdl.org/SDL_GetAudioDriver + */ +int audio_printAudioDrivers() +{ + int i, n; + const char *name; + + /* Get number of drivers */ + n = SDL_GetNumAudioDrivers(); + SDLTest_AssertPass("Call to SDL_GetNumAudioDrivers()"); + SDLTest_AssertCheck(n>=0, "Verify number of audio drivers >= 0, got: %i", n); + + /* List drivers. */ + if (n>0) + { + for (i=0; i spec1)"); + SDLTest_AssertCheck(result == 0, "Verify result value; expected: 0, got: %i", result); + + /* Typical conversion */ + spec1.format = AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = AUDIO_S16LSB; + spec2.channels = 2; + spec2.freq = 44100; + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(spec1 ==> spec2)"); + SDLTest_AssertCheck(result == 1, "Verify result value; expected: 1, got: %i", result); + + /* All source conversions with random conversion targets, allow 'null' conversions */ + for (i = 0; i < _numAudioFormats; i++) { + for (j = 0; j < _numAudioChannels; j++) { + for (k = 0; k < _numAudioFrequencies; k++) { + spec1.format = _audioFormats[i]; + spec1.channels = _audioChannels[j]; + spec1.freq = _audioFrequencies[k]; + ii = SDLTest_RandomIntegerInRange(0, _numAudioFormats - 1); + jj = SDLTest_RandomIntegerInRange(0, _numAudioChannels - 1); + kk = SDLTest_RandomIntegerInRange(0, _numAudioFrequencies - 1); + spec2.format = _audioFormats[ii]; + spec2.channels = _audioChannels[jj]; + spec2.freq = _audioFrequencies[kk]; + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)", + i, _audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, _audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq); + SDLTest_AssertCheck(result == 0 || result == 1, "Verify result value; expected: 0 or 1, got: %i", result); + if (result<0) { + SDLTest_LogError("%s", SDL_GetError()); + } else { + SDLTest_AssertCheck(cvt.len_mult > 0, "Verify that cvt.len_mult value; expected: >0, got: %i", cvt.len_mult); + } + } + } + } + + return TEST_COMPLETED; +} + +/** + * \brief Checkes calls with invalid input to SDL_BuildAudioCVT + * + * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT + */ +int audio_buildAudioCVTNegative() +{ + const char *expectedError = "Parameter 'cvt' is invalid"; + const char *error; + int result; + SDL_AudioCVT cvt; + SDL_AudioSpec spec1; + SDL_AudioSpec spec2; + int i; + char message[256]; + + /* Valid format */ + spec1.format = AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = AUDIO_S16LSB; + spec2.channels = 2; + spec2.freq = 44100; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* NULL input for CVT buffer */ + result = SDL_BuildAudioCVT((SDL_AudioCVT *)NULL, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(NULL,...)"); + SDLTest_AssertCheck(result == -1, "Verify result value; expected: -1, got: %i", result); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + + /* Invalid conversions */ + for (i = 1; i < 64; i++) { + /* Valid format to start with */ + spec1.format = AUDIO_S8; + spec1.channels = 1; + spec1.freq = 22050; + spec2.format = AUDIO_S16LSB; + spec2.channels = 2; + spec2.freq = 44100; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Set various invalid format inputs */ + SDL_strlcpy(message, "Invalid: ", 256); + if (i & 1) { + SDL_strlcat(message, " spec1.format", 256); + spec1.format = 0; + } + if (i & 2) { + SDL_strlcat(message, " spec1.channels", 256); + spec1.channels = 0; + } + if (i & 4) { + SDL_strlcat(message, " spec1.freq", 256); + spec1.freq = 0; + } + if (i & 8) { + SDL_strlcat(message, " spec2.format", 256); + spec2.format = 0; + } + if (i & 16) { + SDL_strlcat(message, " spec2.channels", 256); + spec2.channels = 0; + } + if (i & 32) { + SDL_strlcat(message, " spec2.freq", 256); + spec2.freq = 0; + } + SDLTest_Log("%s", message); + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(spec1 ==> spec2)"); + SDLTest_AssertCheck(result == -1, "Verify result value; expected: -1, got: %i", result); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL && error[0] != '\0', "Validate that error message was not NULL or empty"); + } + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * \brief Checks current audio status. + * + * \sa https://wiki.libsdl.org/SDL_GetAudioStatus + */ +int audio_getAudioStatus() +{ + SDL_AudioStatus result; + + /* Check current audio status */ + result = SDL_GetAudioStatus(); + SDLTest_AssertPass("Call to SDL_GetAudioStatus()"); + SDLTest_AssertCheck(result == SDL_AUDIO_STOPPED || result == SDL_AUDIO_PLAYING || result == SDL_AUDIO_PAUSED, + "Verify returned value; expected: STOPPED (%i) | PLAYING (%i) | PAUSED (%i), got: %i", + SDL_AUDIO_STOPPED, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED, result); + + return TEST_COMPLETED; +} + + + +/** + * \brief Opens, checks current audio status, and closes a device. + * + * \sa https://wiki.libsdl.org/SDL_GetAudioStatus + */ +int audio_openCloseAndGetAudioStatus() +{ + SDL_AudioStatus result; + int i; + int count; + char *device; + SDL_AudioDeviceID id; + SDL_AudioSpec desired, obtained; + + /* Get number of devices. */ + count = SDL_GetNumAudioDevices(0); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)"); + if (count > 0) { + for (i = 0; i < count; i++) { + /* Get device name */ + device = (char *)SDL_GetAudioDeviceName(i, 0); + SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i); + SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL"); + if (device == NULL) return TEST_ABORTED; + + /* Set standard desired spec */ + desired.freq=22050; + desired.format=AUDIO_S16SYS; + desired.channels=2; + desired.samples=4096; + desired.callback=_audio_testCallback; + desired.userdata=NULL; + + /* Open device */ + id = SDL_OpenAudioDevice((const char *)device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device); + SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >=2, got: %i", id); + if (id > 1) { + + /* Check device audio status */ + result = SDL_GetAudioDeviceStatus(id); + SDLTest_AssertPass("Call to SDL_GetAudioDeviceStatus()"); + SDLTest_AssertCheck(result == SDL_AUDIO_STOPPED || result == SDL_AUDIO_PLAYING || result == SDL_AUDIO_PAUSED, + "Verify returned value; expected: STOPPED (%i) | PLAYING (%i) | PAUSED (%i), got: %i", + SDL_AUDIO_STOPPED, SDL_AUDIO_PLAYING, SDL_AUDIO_PAUSED, result); + + /* Close device again */ + SDL_CloseAudioDevice(id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice()"); + } + } + } else { + SDLTest_Log("No devices to test with"); + } + + return TEST_COMPLETED; +} + +/** + * \brief Locks and unlocks open audio device. + * + * \sa https://wiki.libsdl.org/SDL_LockAudioDevice + * \sa https://wiki.libsdl.org/SDL_UnlockAudioDevice + */ +int audio_lockUnlockOpenAudioDevice() +{ + int i; + int count; + char *device; + SDL_AudioDeviceID id; + SDL_AudioSpec desired, obtained; + + /* Get number of devices. */ + count = SDL_GetNumAudioDevices(0); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)"); + if (count > 0) { + for (i = 0; i < count; i++) { + /* Get device name */ + device = (char *)SDL_GetAudioDeviceName(i, 0); + SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i); + SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL"); + if (device == NULL) return TEST_ABORTED; + + /* Set standard desired spec */ + desired.freq=22050; + desired.format=AUDIO_S16SYS; + desired.channels=2; + desired.samples=4096; + desired.callback=_audio_testCallback; + desired.userdata=NULL; + + /* Open device */ + id = SDL_OpenAudioDevice((const char *)device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device); + SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >=2, got: %i", id); + if (id > 1) { + /* Lock to protect callback */ + SDL_LockAudioDevice(id); + SDLTest_AssertPass("SDL_LockAudioDevice(%i)", id); + + /* Simulate callback processing */ + SDL_Delay(10); + SDLTest_Log("Simulate callback processing - delay"); + + /* Unlock again */ + SDL_UnlockAudioDevice(id); + SDLTest_AssertPass("SDL_UnlockAudioDevice(%i)", id); + + /* Close device again */ + SDL_CloseAudioDevice(id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice()"); + } + } + } else { + SDLTest_Log("No devices to test with"); + } + + return TEST_COMPLETED; +} + + +/** + * \brief Convert audio using various conversion structures + * + * \sa https://wiki.libsdl.org/SDL_BuildAudioCVT + * \sa https://wiki.libsdl.org/SDL_ConvertAudio + */ +int audio_convertAudio() +{ + int result; + SDL_AudioCVT cvt; + SDL_AudioSpec spec1; + SDL_AudioSpec spec2; + int c; + char message[128]; + int i, ii, j, jj, k, kk, l, ll; + + /* Iterate over bitmask that determines which parameters are modified in the conversion */ + for (c = 1; c < 8; c++) { + SDL_strlcpy(message, "Changing:", 128); + if (c & 1) { + SDL_strlcat(message, " Format", 128); + } + if (c & 2) { + SDL_strlcat(message, " Channels", 128); + } + if (c & 4) { + SDL_strlcat(message, " Frequencies", 128); + } + SDLTest_Log("%s", message); + /* All source conversions with random conversion targets */ + for (i = 0; i < _numAudioFormats; i++) { + for (j = 0; j < _numAudioChannels; j++) { + for (k = 0; k < _numAudioFrequencies; k++) { + spec1.format = _audioFormats[i]; + spec1.channels = _audioChannels[j]; + spec1.freq = _audioFrequencies[k]; + + /* Ensure we have a different target format */ + do { + if (c & 1) { + ii = SDLTest_RandomIntegerInRange(0, _numAudioFormats - 1); + } else { + ii = 1; + } + if (c & 2) { + jj = SDLTest_RandomIntegerInRange(0, _numAudioChannels - 1); + } else { + jj= j; + } + if (c & 4) { + kk = SDLTest_RandomIntegerInRange(0, _numAudioFrequencies - 1); + } else { + kk = k; + } + } while ((i == ii) && (j == jj) && (k == kk)); + spec2.format = _audioFormats[ii]; + spec2.channels = _audioChannels[jj]; + spec2.freq = _audioFrequencies[kk]; + + result = SDL_BuildAudioCVT(&cvt, spec1.format, spec1.channels, spec1.freq, + spec2.format, spec2.channels, spec2.freq); + SDLTest_AssertPass("Call to SDL_BuildAudioCVT(format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i ==> format[%i]=%s(%i),channels[%i]=%i,freq[%i]=%i)", + i, _audioFormatsVerbose[i], spec1.format, j, spec1.channels, k, spec1.freq, ii, _audioFormatsVerbose[ii], spec2.format, jj, spec2.channels, kk, spec2.freq); + SDLTest_AssertCheck(result == 1, "Verify result value; expected: 1, got: %i", result); + if (result != 1) { + SDLTest_LogError("%s", SDL_GetError()); + } else { + SDLTest_AssertCheck(cvt.len_mult > 0, "Verify that cvt.len_mult value; expected: >0, got: %i", cvt.len_mult); + if (cvt.len_mult < 1) return TEST_ABORTED; + + /* Create some random data to convert */ + l = 64; + ll = l * cvt.len_mult; + SDLTest_Log("Creating dummy sample buffer of %i length (%i bytes)", l, ll); + cvt.len = l; + cvt.buf = (Uint8 *)SDL_malloc(ll); + SDLTest_AssertCheck(cvt.buf != NULL, "Check data buffer to convert is not NULL"); + if (cvt.buf == NULL) return TEST_ABORTED; + + /* Convert the data */ + result = SDL_ConvertAudio(&cvt); + SDLTest_AssertPass("Call to SDL_ConvertAudio()"); + SDLTest_AssertCheck(result == 0, "Verify result value; expected: 0; got: %i", result); + SDLTest_AssertCheck(cvt.buf != NULL, "Verify conversion buffer is not NULL"); + SDLTest_AssertCheck(cvt.len_ratio > 0.0, "Verify conversion length ratio; expected: >0; got: %f", cvt.len_ratio); + + /* Free converted buffer */ + SDL_free(cvt.buf); + cvt.buf = NULL; + } + } + } + } + } + + return TEST_COMPLETED; +} + + +/** + * \brief Opens, checks current connected status, and closes a device. + * + * \sa https://wiki.libsdl.org/SDL_AudioDeviceConnected + */ +int audio_openCloseAudioDeviceConnected() +{ + int result = -1; + int i; + int count; + char *device; + SDL_AudioDeviceID id; + SDL_AudioSpec desired, obtained; + + /* Get number of devices. */ + count = SDL_GetNumAudioDevices(0); + SDLTest_AssertPass("Call to SDL_GetNumAudioDevices(0)"); + if (count > 0) { + for (i = 0; i < count; i++) { + /* Get device name */ + device = (char *)SDL_GetAudioDeviceName(i, 0); + SDLTest_AssertPass("SDL_GetAudioDeviceName(%i,0)", i); + SDLTest_AssertCheck(device != NULL, "Validate device name is not NULL; got: %s", (device != NULL) ? device : "NULL"); + if (device == NULL) return TEST_ABORTED; + + /* Set standard desired spec */ + desired.freq=22050; + desired.format=AUDIO_S16SYS; + desired.channels=2; + desired.samples=4096; + desired.callback=_audio_testCallback; + desired.userdata=NULL; + + /* Open device */ + id = SDL_OpenAudioDevice((const char *)device, 0, &desired, &obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + SDLTest_AssertPass("SDL_OpenAudioDevice('%s',...)", device); + SDLTest_AssertCheck(id > 1, "Validate device ID; expected: >1, got: %i", id); + if (id > 1) { + +/* TODO: enable test code when function is available in SDL2 */ + +#ifdef AUDIODEVICECONNECTED_DEFINED + /* Get connected status */ + result = SDL_AudioDeviceConnected(id); + SDLTest_AssertPass("Call to SDL_AudioDeviceConnected()"); +#endif + SDLTest_AssertCheck(result == 1, "Verify returned value; expected: 1; got: %i", result); + + /* Close device again */ + SDL_CloseAudioDevice(id); + SDLTest_AssertPass("Call to SDL_CloseAudioDevice()"); + } + } + } else { + SDLTest_Log("No devices to test with"); + } + + return TEST_COMPLETED; +} + + + +/* ================= Test Case References ================== */ + +/* Audio test cases */ +static const SDLTest_TestCaseReference audioTest1 = + { (SDLTest_TestCaseFp)audio_enumerateAndNameAudioDevices, "audio_enumerateAndNameAudioDevices", "Enumerate and name available audio devices (output and capture)", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest2 = + { (SDLTest_TestCaseFp)audio_enumerateAndNameAudioDevicesNegativeTests, "audio_enumerateAndNameAudioDevicesNegativeTests", "Negative tests around enumeration and naming of audio devices.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest3 = + { (SDLTest_TestCaseFp)audio_printAudioDrivers, "audio_printAudioDrivers", "Checks available audio driver names.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest4 = + { (SDLTest_TestCaseFp)audio_printCurrentAudioDriver, "audio_printCurrentAudioDriver", "Checks current audio driver name with initialized audio.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest5 = + { (SDLTest_TestCaseFp)audio_buildAudioCVT, "audio_buildAudioCVT", "Builds various audio conversion structures.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest6 = + { (SDLTest_TestCaseFp)audio_buildAudioCVTNegative, "audio_buildAudioCVTNegative", "Checks calls with invalid input to SDL_BuildAudioCVT", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest7 = + { (SDLTest_TestCaseFp)audio_getAudioStatus, "audio_getAudioStatus", "Checks current audio status.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest8 = + { (SDLTest_TestCaseFp)audio_openCloseAndGetAudioStatus, "audio_openCloseAndGetAudioStatus", "Opens and closes audio device and get audio status.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest9 = + { (SDLTest_TestCaseFp)audio_lockUnlockOpenAudioDevice, "audio_lockUnlockOpenAudioDevice", "Locks and unlocks an open audio device.", TEST_ENABLED }; + +/* TODO: enable test when SDL_ConvertAudio segfaults on cygwin have been fixed. */ +/* For debugging, test case can be run manually using --filter audio_convertAudio */ + +static const SDLTest_TestCaseReference audioTest10 = + { (SDLTest_TestCaseFp)audio_convertAudio, "audio_convertAudio", "Convert audio using available formats.", TEST_DISABLED }; + +/* TODO: enable test when SDL_AudioDeviceConnected has been implemented. */ + +static const SDLTest_TestCaseReference audioTest11 = + { (SDLTest_TestCaseFp)audio_openCloseAudioDeviceConnected, "audio_openCloseAudioDeviceConnected", "Opens and closes audio device and get connected status.", TEST_DISABLED }; + +static const SDLTest_TestCaseReference audioTest12 = + { (SDLTest_TestCaseFp)audio_quitInitAudioSubSystem, "audio_quitInitAudioSubSystem", "Quit and re-init audio subsystem.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest13 = + { (SDLTest_TestCaseFp)audio_initQuitAudio, "audio_initQuitAudio", "Init and quit audio drivers directly.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest14 = + { (SDLTest_TestCaseFp)audio_initOpenCloseQuitAudio, "audio_initOpenCloseQuitAudio", "Cycle through init, open, close and quit with various audio specs.", TEST_ENABLED }; + +static const SDLTest_TestCaseReference audioTest15 = + { (SDLTest_TestCaseFp)audio_pauseUnpauseAudio, "audio_pauseUnpauseAudio", "Pause and Unpause audio for various audio specs while testing callback.", TEST_ENABLED }; + +/* Sequence of Audio test cases */ +static const SDLTest_TestCaseReference *audioTests[] = { + &audioTest1, &audioTest2, &audioTest3, &audioTest4, &audioTest5, &audioTest6, + &audioTest7, &audioTest8, &audioTest9, &audioTest10, &audioTest11, + &audioTest12, &audioTest13, &audioTest14, &audioTest15, NULL +}; + +/* Audio test suite (global) */ +SDLTest_TestSuiteReference audioTestSuite = { + "Audio", + _audioSetUp, + audioTests, + _audioTearDown +}; diff --git a/Engine/lib/sdl/test/testautomation_clipboard.c b/Engine/lib/sdl/test/testautomation_clipboard.c new file mode 100644 index 0000000000..f943ffee79 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_clipboard.c @@ -0,0 +1,184 @@ +/** + * New/updated tests: aschiffler at ferzkopp dot net + */ + +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/** + * \brief Check call to SDL_HasClipboardText + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasClipboardText + */ +int +clipboard_testHasClipboardText(void *arg) +{ + SDL_bool result; + result = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_GetClipboardText + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetClipboardText + */ +int +clipboard_testGetClipboardText(void *arg) +{ + char *charResult; + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + + SDL_free(charResult); + + return TEST_COMPLETED; +} + +/** + * \brief Check call to SDL_SetClipboardText + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetClipboardText + */ +int +clipboard_testSetClipboardText(void *arg) +{ + char *textRef = SDLTest_RandomAsciiString(); + char *text = SDL_strdup(textRef); + int result; + result = SDL_SetClipboardText((const char *)text); + SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded"); + SDLTest_AssertCheck( + result == 0, + "Validate SDL_SetClipboardText result, expected 0, got %i", + result); + SDLTest_AssertCheck( + SDL_strcmp(textRef, text) == 0, + "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'", + textRef, text); + + /* Cleanup */ + SDL_free(textRef); + SDL_free(text); + + return TEST_COMPLETED; +} + +/** + * \brief End-to-end test of SDL_xyzClipboardText functions + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasClipboardText + * http://wiki.libsdl.org/moin.cgi/SDL_GetClipboardText + * http://wiki.libsdl.org/moin.cgi/SDL_SetClipboardText + */ +int +clipboard_testClipboardTextFunctions(void *arg) +{ + char *textRef = SDLTest_RandomAsciiString(); + char *text = SDL_strdup(textRef); + SDL_bool boolResult; + int intResult; + char *charResult; + + /* Clear clipboard text state */ + boolResult = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + if (boolResult == SDL_TRUE) { + intResult = SDL_SetClipboardText((const char *)NULL); + SDLTest_AssertPass("Call to SDL_SetClipboardText(NULL) succeeded"); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i", + intResult); + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + SDL_free(charResult); + boolResult = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + SDLTest_AssertCheck( + boolResult == SDL_FALSE, + "Verify SDL_HasClipboardText returned SDL_FALSE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + } + + /* Empty clipboard */ + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + SDLTest_AssertCheck( + charResult != NULL, + "Verify SDL_GetClipboardText did not return NULL"); + SDLTest_AssertCheck( + charResult[0] == '\0', + "Verify SDL_GetClipboardText returned string with length 0, got length %i", + SDL_strlen(charResult)); + intResult = SDL_SetClipboardText((const char *)text); + SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded"); + SDLTest_AssertCheck( + intResult == 0, + "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i", + intResult); + SDLTest_AssertCheck( + SDL_strcmp(textRef, text) == 0, + "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'", + textRef, text); + boolResult = SDL_HasClipboardText(); + SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded"); + SDLTest_AssertCheck( + boolResult == SDL_TRUE, + "Verify SDL_HasClipboardText returned SDL_TRUE, got %s", + (boolResult) ? "SDL_TRUE" : "SDL_FALSE"); + SDL_free(charResult); + charResult = SDL_GetClipboardText(); + SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded"); + SDLTest_AssertCheck( + SDL_strcmp(textRef, charResult) == 0, + "Verify SDL_GetClipboardText returned correct string, expected '%s', got '%s'", + textRef, charResult); + + /* Cleanup */ + SDL_free(textRef); + SDL_free(text); + SDL_free(charResult); + + return TEST_COMPLETED; +} + + +/* ================= Test References ================== */ + +/* Clipboard test cases */ +static const SDLTest_TestCaseReference clipboardTest1 = + { (SDLTest_TestCaseFp)clipboard_testHasClipboardText, "clipboard_testHasClipboardText", "Check call to SDL_HasClipboardText", TEST_ENABLED }; + +static const SDLTest_TestCaseReference clipboardTest2 = + { (SDLTest_TestCaseFp)clipboard_testGetClipboardText, "clipboard_testGetClipboardText", "Check call to SDL_GetClipboardText", TEST_ENABLED }; + +static const SDLTest_TestCaseReference clipboardTest3 = + { (SDLTest_TestCaseFp)clipboard_testSetClipboardText, "clipboard_testSetClipboardText", "Check call to SDL_SetClipboardText", TEST_ENABLED }; + +static const SDLTest_TestCaseReference clipboardTest4 = + { (SDLTest_TestCaseFp)clipboard_testClipboardTextFunctions, "clipboard_testClipboardTextFunctions", "End-to-end test of SDL_xyzClipboardText functions", TEST_ENABLED }; + +/* Sequence of Clipboard test cases */ +static const SDLTest_TestCaseReference *clipboardTests[] = { + &clipboardTest1, &clipboardTest2, &clipboardTest3, &clipboardTest4, NULL +}; + +/* Clipboard test suite (global) */ +SDLTest_TestSuiteReference clipboardTestSuite = { + "Clipboard", + NULL, + clipboardTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_events.c b/Engine/lib/sdl/test/testautomation_events.c new file mode 100644 index 0000000000..f9eb5bb9e8 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_events.c @@ -0,0 +1,201 @@ +/** + * Events test suite + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/* Flag indicating if the userdata should be checked */ +int _userdataCheck = 0; + +/* Userdata value to check */ +int _userdataValue = 0; + +/* Flag indicating that the filter was called */ +int _eventFilterCalled = 0; + +/* Userdata values for event */ +int _userdataValue1 = 1; +int _userdataValue2 = 2; + +/* Event filter that sets some flags and optionally checks userdata */ +int _events_sampleNullEventFilter(void *userdata, SDL_Event *event) +{ + _eventFilterCalled = 1; + + if (_userdataCheck != 0) { + SDLTest_AssertCheck(userdata != NULL, "Check userdata pointer, expected: non-NULL, got: %s", (userdata != NULL) ? "non-NULL" : "NULL"); + if (userdata != NULL) { + SDLTest_AssertCheck(*(int *)userdata == _userdataValue, "Check userdata value, expected: %i, got: %i", _userdataValue, *(int *)userdata); + } + } + + return 0; +} + +/** + * @brief Test pumping and peeking events. + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_PumpEvents + * @sa http://wiki.libsdl.org/moin.cgi/SDL_PollEvent + */ +int +events_pushPumpAndPollUserevent(void *arg) +{ + SDL_Event event1; + SDL_Event event2; + int result; + + /* Create user event */ + event1.type = SDL_USEREVENT; + event1.user.code = SDLTest_RandomSint32(); + event1.user.data1 = (void *)&_userdataValue1; + event1.user.data2 = (void *)&_userdataValue2; + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event1); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Poll for user event */ + result = SDL_PollEvent(&event2); + SDLTest_AssertPass("Call to SDL_PollEvent()"); + SDLTest_AssertCheck(result == 1, "Check result from SDL_PollEvent, expected: 1, got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Adds and deletes an event watch function with NULL userdata + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch + * @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch + * + */ +int +events_addDelEventWatch(void *arg) +{ + SDL_Event event; + + /* Create user event */ + event.type = SDL_USEREVENT; + event.user.code = SDLTest_RandomSint32();; + event.user.data1 = (void *)&_userdataValue1; + event.user.data2 = (void *)&_userdataValue2; + + /* Disable userdata check */ + _userdataCheck = 0; + + /* Reset event filter call tracker */ + _eventFilterCalled = 0; + + /* Add watch */ + SDL_AddEventWatch(_events_sampleNullEventFilter, NULL); + SDLTest_AssertPass("Call to SDL_AddEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called"); + + /* Delete watch */ + SDL_DelEventWatch(_events_sampleNullEventFilter, NULL); + SDLTest_AssertPass("Call to SDL_DelEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + _eventFilterCalled = 0; + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called"); + + return TEST_COMPLETED; +} + +/** + * @brief Adds and deletes an event watch function with userdata + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_AddEventWatch + * @sa http://wiki.libsdl.org/moin.cgi/SDL_DelEventWatch + * + */ +int +events_addDelEventWatchWithUserdata(void *arg) +{ + SDL_Event event; + + /* Create user event */ + event.type = SDL_USEREVENT; + event.user.code = SDLTest_RandomSint32();; + event.user.data1 = (void *)&_userdataValue1; + event.user.data2 = (void *)&_userdataValue2; + + /* Enable userdata check and set a value to check */ + _userdataCheck = 1; + _userdataValue = SDLTest_RandomIntegerInRange(-1024, 1024); + + /* Reset event filter call tracker */ + _eventFilterCalled = 0; + + /* Add watch */ + SDL_AddEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); + SDLTest_AssertPass("Call to SDL_AddEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 1, "Check that event filter was called"); + + /* Delete watch */ + SDL_DelEventWatch(_events_sampleNullEventFilter, (void *)&_userdataValue); + SDLTest_AssertPass("Call to SDL_DelEventWatch()"); + + /* Push a user event onto the queue and force queue update */ + _eventFilterCalled = 0; + SDL_PushEvent(&event); + SDLTest_AssertPass("Call to SDL_PushEvent()"); + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + SDLTest_AssertCheck(_eventFilterCalled == 0, "Check that event filter was NOT called"); + + return TEST_COMPLETED; +} + + +/* ================= Test References ================== */ + +/* Events test cases */ +static const SDLTest_TestCaseReference eventsTest1 = + { (SDLTest_TestCaseFp)events_pushPumpAndPollUserevent, "events_pushPumpAndPollUserevent", "Pushes, pumps and polls a user event", TEST_ENABLED }; + +static const SDLTest_TestCaseReference eventsTest2 = + { (SDLTest_TestCaseFp)events_addDelEventWatch, "events_addDelEventWatch", "Adds and deletes an event watch function with NULL userdata", TEST_ENABLED }; + +static const SDLTest_TestCaseReference eventsTest3 = + { (SDLTest_TestCaseFp)events_addDelEventWatchWithUserdata, "events_addDelEventWatchWithUserdata", "Adds and deletes an event watch function with userdata", TEST_ENABLED }; + +/* Sequence of Events test cases */ +static const SDLTest_TestCaseReference *eventsTests[] = { + &eventsTest1, &eventsTest2, &eventsTest3, NULL +}; + +/* Events test suite (global) */ +SDLTest_TestSuiteReference eventsTestSuite = { + "Events", + NULL, + eventsTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_hints.c b/Engine/lib/sdl/test/testautomation_hints.c new file mode 100644 index 0000000000..a6beb88d76 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_hints.c @@ -0,0 +1,168 @@ +/** + * Hints test suite + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + + +const int _numHintsEnum = 25; +char* _HintsEnum[] = + { + SDL_HINT_ACCELEROMETER_AS_JOYSTICK, + SDL_HINT_FRAMEBUFFER_ACCELERATION, + SDL_HINT_GAMECONTROLLERCONFIG, + SDL_HINT_GRAB_KEYBOARD, + SDL_HINT_IDLE_TIMER_DISABLED, + SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, + SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK, + SDL_HINT_MOUSE_RELATIVE_MODE_WARP, + SDL_HINT_ORIENTATIONS, + SDL_HINT_RENDER_DIRECT3D_THREADSAFE, + SDL_HINT_RENDER_DRIVER, + SDL_HINT_RENDER_OPENGL_SHADERS, + SDL_HINT_RENDER_SCALE_QUALITY, + SDL_HINT_RENDER_VSYNC, + SDL_HINT_TIMER_RESOLUTION, + SDL_HINT_VIDEO_ALLOW_SCREENSAVER, + SDL_HINT_VIDEO_HIGHDPI_DISABLED, + SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES, + SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, + SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT, + SDL_HINT_VIDEO_WIN_D3DCOMPILER, + SDL_HINT_VIDEO_X11_XINERAMA, + SDL_HINT_VIDEO_X11_XRANDR, + SDL_HINT_VIDEO_X11_XVIDMODE, + SDL_HINT_XINPUT_ENABLED, + }; +char* _HintsVerbose[] = + { + "SDL_HINT_ACCELEROMETER_AS_JOYSTICK", + "SDL_HINT_FRAMEBUFFER_ACCELERATION", + "SDL_HINT_GAMECONTROLLERCONFIG", + "SDL_HINT_GRAB_KEYBOARD", + "SDL_HINT_IDLE_TIMER_DISABLED", + "SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS", + "SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK", + "SDL_HINT_MOUSE_RELATIVE_MODE_WARP", + "SDL_HINT_ORIENTATIONS", + "SDL_HINT_RENDER_DIRECT3D_THREADSAFE", + "SDL_HINT_RENDER_DRIVER", + "SDL_HINT_RENDER_OPENGL_SHADERS", + "SDL_HINT_RENDER_SCALE_QUALITY", + "SDL_HINT_RENDER_VSYNC", + "SDL_HINT_TIMER_RESOLUTION", + "SDL_HINT_VIDEO_ALLOW_SCREENSAVER", + "SDL_HINT_VIDEO_HIGHDPI_DISABLED", + "SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES", + "SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS", + "SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT", + "SDL_HINT_VIDEO_WIN_D3DCOMPILER", + "SDL_HINT_VIDEO_X11_XINERAMA", + "SDL_HINT_VIDEO_X11_XRANDR", + "SDL_HINT_VIDEO_X11_XVIDMODE", + "SDL_HINT_XINPUT_ENABLED" + }; + + +/* Test case functions */ + +/** + * @brief Call to SDL_GetHint + */ +int +hints_getHint(void *arg) +{ + char *result1; + char *result2; + int i; + + for (i=0; i<_numHintsEnum; i++) { + result1 = (char *)SDL_GetHint((char*)_HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using define definition", (char*)_HintsEnum[i]); + result2 = (char *)SDL_GetHint((char *)_HintsVerbose[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char*)_HintsVerbose[i]); + SDLTest_AssertCheck( + (result1 == NULL && result2 == NULL) || (SDL_strcmp(result1, result2) == 0), + "Verify returned values are equal; got: result1='%s' result2='%s", + (result1 == NULL) ? "null" : result1, + (result2 == NULL) ? "null" : result2); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_SetHint + */ +int +hints_setHint(void *arg) +{ + char *originalValue; + char *value; + char *testValue; + SDL_bool result; + int i, j; + + /* Create random values to set */ + value = SDLTest_RandomAsciiStringOfSize(10); + + for (i=0; i<_numHintsEnum; i++) { + /* Capture current value */ + originalValue = (char *)SDL_GetHint((char*)_HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s)", (char*)_HintsEnum[i]); + + /* Set value (twice) */ + for (j=1; j<=2; j++) { + result = SDL_SetHint((char*)_HintsEnum[i], value); + SDLTest_AssertPass("Call to SDL_SetHint(%s, %s) (iteration %i)", (char*)_HintsEnum[i], value, j); + SDLTest_AssertCheck( + result == SDL_TRUE || result == SDL_FALSE, + "Verify valid result was returned, got: %i", + (int)result); + testValue = (char *)SDL_GetHint((char*)_HintsEnum[i]); + SDLTest_AssertPass("Call to SDL_GetHint(%s) - using string definition", (char*)_HintsVerbose[i]); + SDLTest_AssertCheck( + (SDL_strcmp(value, testValue) == 0), + "Verify returned value equals set value; got: testValue='%s' value='%s", + (testValue == NULL) ? "null" : testValue, + value); + } + + /* Reset original value */ + result = SDL_SetHint((char*)_HintsEnum[i], originalValue); + SDLTest_AssertPass("Call to SDL_SetHint(%s, originalValue)", (char*)_HintsEnum[i]); + SDLTest_AssertCheck( + result == SDL_TRUE || result == SDL_FALSE, + "Verify valid result was returned, got: %i", + (int)result); + } + + SDL_free(value); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Hints test cases */ +static const SDLTest_TestCaseReference hintsTest1 = + { (SDLTest_TestCaseFp)hints_getHint, "hints_getHint", "Call to SDL_GetHint", TEST_ENABLED }; + +static const SDLTest_TestCaseReference hintsTest2 = + { (SDLTest_TestCaseFp)hints_setHint, "hints_setHint", "Call to SDL_SetHint", TEST_ENABLED }; + +/* Sequence of Hints test cases */ +static const SDLTest_TestCaseReference *hintsTests[] = { + &hintsTest1, &hintsTest2, NULL +}; + +/* Hints test suite (global) */ +SDLTest_TestSuiteReference hintsTestSuite = { + "Hints", + NULL, + hintsTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_keyboard.c b/Engine/lib/sdl/test/testautomation_keyboard.c new file mode 100644 index 0000000000..453832e256 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_keyboard.c @@ -0,0 +1,713 @@ +/** + * Keyboard test suite + */ + +#include +#include + +#include "SDL_config.h" +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/** + * @brief Check call to SDL_GetKeyboardState with and without numkeys reference. + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyboardState + */ +int +keyboard_getKeyboardState(void *arg) +{ + int numkeys; + Uint8 *state; + + /* Case where numkeys pointer is NULL */ + state = (Uint8 *)SDL_GetKeyboardState(NULL); + SDLTest_AssertPass("Call to SDL_GetKeyboardState(NULL)"); + SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); + + /* Case where numkeys pointer is not NULL */ + numkeys = -1; + state = (Uint8 *)SDL_GetKeyboardState(&numkeys); + SDLTest_AssertPass("Call to SDL_GetKeyboardState(&numkeys)"); + SDLTest_AssertCheck(state != NULL, "Validate that return value from SDL_GetKeyboardState is not NULL"); + SDLTest_AssertCheck(numkeys >= 0, "Validate that value of numkeys is >= 0, got: %i", numkeys); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetKeyboardFocus + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyboardFocus + */ +int +keyboard_getKeyboardFocus(void *arg) +{ + SDL_Window* window; + + /* Call, but ignore return value */ + window = SDL_GetKeyboardFocus(); + SDLTest_AssertPass("Call to SDL_GetKeyboardFocus()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetKeyFromName for known, unknown and invalid name. + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyFromName + */ +int +keyboard_getKeyFromName(void *arg) +{ + SDL_Keycode result; + + /* Case where Key is known, 1 character input */ + result = SDL_GetKeyFromName("A"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/single)"); + SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %i", SDLK_a, result); + + /* Case where Key is known, 2 character input */ + result = SDL_GetKeyFromName("F1"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/double)"); + SDLTest_AssertCheck(result == SDLK_F1, "Verify result from call, expected: %i, got: %i", SDLK_F1, result); + + /* Case where Key is known, 3 character input */ + result = SDL_GetKeyFromName("End"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/triple)"); + SDLTest_AssertCheck(result == SDLK_END, "Verify result from call, expected: %i, got: %i", SDLK_END, result); + + /* Case where Key is known, 4 character input */ + result = SDL_GetKeyFromName("Find"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/quad)"); + SDLTest_AssertCheck(result == SDLK_FIND, "Verify result from call, expected: %i, got: %i", SDLK_FIND, result); + + /* Case where Key is known, multiple character input */ + result = SDL_GetKeyFromName("AudioStop"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/multi)"); + SDLTest_AssertCheck(result == SDLK_AUDIOSTOP, "Verify result from call, expected: %i, got: %i", SDLK_AUDIOSTOP, result); + + /* Case where Key is unknown */ + result = SDL_GetKeyFromName("NotThere"); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(unknown)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + + /* Case where input is NULL/invalid */ + result = SDL_GetKeyFromName(NULL); + SDLTest_AssertPass("Call to SDL_GetKeyFromName(NULL)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + + return TEST_COMPLETED; +} + +/* + * Local helper to check for the invalid scancode error message + */ +void +_checkInvalidScancodeError() +{ + const char *expectedError = "Parameter 'scancode' is invalid"; + const char *error; + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Check call to SDL_GetKeyFromScancode + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyFromScancode + */ +int +keyboard_getKeyFromScancode(void *arg) +{ + SDL_Keycode result; + + /* Case where input is valid */ + result = SDL_GetKeyFromScancode(SDL_SCANCODE_A); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(valid)"); + SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %i", SDLK_a, result); + + /* Case where input is zero */ + result = SDL_GetKeyFromScancode(0); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(0)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Case where input is invalid (too small) */ + result = SDL_GetKeyFromScancode(-999); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(-999)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + _checkInvalidScancodeError(); + + /* Case where input is invalid (too big) */ + result = SDL_GetKeyFromScancode(999); + SDLTest_AssertPass("Call to SDL_GetKeyFromScancode(999)"); + SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result); + _checkInvalidScancodeError(); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetKeyName + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyName + */ +int +keyboard_getKeyName(void *arg) +{ + char *result; + char *expected; + + /* Case where key has a 1 character name */ + expected = "3"; + result = (char *)SDL_GetKeyName(SDLK_3); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 2 character name */ + expected = "F1"; + result = (char *)SDL_GetKeyName(SDLK_F1); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 3 character name */ + expected = "Cut"; + result = (char *)SDL_GetKeyName(SDLK_CUT); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a 4 character name */ + expected = "Down"; + result = (char *)SDL_GetKeyName(SDLK_DOWN); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a N character name */ + expected = "BrightnessUp"; + result = (char *)SDL_GetKeyName(SDLK_BRIGHTNESSUP); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + /* Case where key has a N character name with space */ + expected = "Keypad MemStore"; + result = (char *)SDL_GetKeyName(SDLK_KP_MEMSTORE); + SDLTest_AssertPass("Call to SDL_GetKeyName()"); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: %s, got: %s", expected, result); + + return TEST_COMPLETED; +} + +/** + * @brief SDL_GetScancodeName negative cases + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeName + */ +int +keyboard_getScancodeNameNegative(void *arg) +{ + SDL_Scancode scancode; + char *result; + char *expected = ""; + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Out-of-bounds scancode */ + scancode = (SDL_Scancode)SDL_NUM_SCANCODES; + result = (char *)SDL_GetScancodeName(scancode); + SDLTest_AssertPass("Call to SDL_GetScancodeName(%d/large)", scancode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + _checkInvalidScancodeError(); + + return TEST_COMPLETED; +} + +/** + * @brief SDL_GetKeyName negative cases + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyName + */ +int +keyboard_getKeyNameNegative(void *arg) +{ + SDL_Keycode keycode; + char *result; + char *expected = ""; + + /* Unknown keycode */ + keycode = SDLK_UNKNOWN; + result = (char *)SDL_GetKeyName(keycode); + SDLTest_AssertPass("Call to SDL_GetKeyName(%d/unknown)", keycode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Negative keycode */ + keycode = (SDL_Keycode)SDLTest_RandomIntegerInRange(-255, -1); + result = (char *)SDL_GetKeyName(keycode); + SDLTest_AssertPass("Call to SDL_GetKeyName(%d/negative)", keycode); + SDLTest_AssertCheck(result != NULL, "Verify result from call is not NULL"); + SDLTest_AssertCheck(SDL_strcmp(result, expected) == 0, "Verify result from call is valid, expected: '%s', got: '%s'", expected, result); + _checkInvalidScancodeError(); + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetModState and SDL_SetModState + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetModState + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetModState + */ +int +keyboard_getSetModState(void *arg) +{ + SDL_Keymod result; + SDL_Keymod currentState; + SDL_Keymod newState; + SDL_Keymod allStates = + KMOD_NONE | + KMOD_LSHIFT | + KMOD_RSHIFT | + KMOD_LCTRL | + KMOD_RCTRL | + KMOD_LALT | + KMOD_RALT | + KMOD_LGUI | + KMOD_RGUI | + KMOD_NUM | + KMOD_CAPS | + KMOD_MODE | + KMOD_RESERVED; + + /* Get state, cache for later reset */ + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result >=0 && result <= allStates, "Verify result from call is valid, expected: 0 <= result <= %i, got: %i", allStates, result); + currentState = result; + + /* Set random state */ + newState = SDLTest_RandomIntegerInRange(0, allStates); + SDL_SetModState(newState); + SDLTest_AssertPass("Call to SDL_SetModState(%i)", newState); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == newState, "Verify result from call is valid, expected: %i, got: %i", newState, result); + + /* Set zero state */ + SDL_SetModState(0); + SDLTest_AssertPass("Call to SDL_SetModState(0)"); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == 0, "Verify result from call is valid, expected: 0, got: %i", result); + + /* Revert back to cached current state if needed */ + if (currentState != 0) { + SDL_SetModState(currentState); + SDLTest_AssertPass("Call to SDL_SetModState(%i)", currentState); + result = SDL_GetModState(); + SDLTest_AssertPass("Call to SDL_GetModState()"); + SDLTest_AssertCheck(result == currentState, "Verify result from call is valid, expected: %i, got: %i", currentState, result); + } + + return TEST_COMPLETED; +} + + +/** + * @brief Check call to SDL_StartTextInput and SDL_StopTextInput + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_StartTextInput + * @sa http://wiki.libsdl.org/moin.cgi/SDL_StopTextInput + */ +int +keyboard_startStopTextInput(void *arg) +{ + /* Start-Stop */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + + /* Stop-Start */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + + /* Start-Start */ + SDL_StartTextInput(); + SDLTest_AssertPass("Call to SDL_StartTextInput()"); + + /* Stop-Stop */ + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + SDL_StopTextInput(); + SDLTest_AssertPass("Call to SDL_StopTextInput()"); + + return TEST_COMPLETED; +} + +/* Internal function to test SDL_SetTextInputRect */ +void _testSetTextInputRect(SDL_Rect refRect) +{ + SDL_Rect testRect; + + testRect = refRect; + SDL_SetTextInputRect(&testRect); + SDLTest_AssertPass("Call to SDL_SetTextInputRect with refRect(x:%i,y:%i,w:%i,h:%i)", refRect.x, refRect.y, refRect.w, refRect.h); + SDLTest_AssertCheck( + (refRect.x == testRect.x) && (refRect.y == testRect.y) && (refRect.w == testRect.w) && (refRect.h == testRect.h), + "Check that input data was not modified, expected: x:%i,y:%i,w:%i,h:%i, got: x:%i,y:%i,w:%i,h:%i", + refRect.x, refRect.y, refRect.w, refRect.h, + testRect.x, testRect.y, testRect.w, testRect.h); +} + +/** + * @brief Check call to SDL_SetTextInputRect + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetTextInputRect + */ +int +keyboard_setTextInputRect(void *arg) +{ + SDL_Rect refRect; + + /* Normal visible refRect, origin inside */ + refRect.x = SDLTest_RandomIntegerInRange(1, 50);; + refRect.y = SDLTest_RandomIntegerInRange(1, 50);; + refRect.w = SDLTest_RandomIntegerInRange(10, 50); + refRect.h = SDLTest_RandomIntegerInRange(10, 50); + _testSetTextInputRect(refRect); + + /* Normal visible refRect, origin 0,0 */ + refRect.x = 0; + refRect.y = 0; + refRect.w = SDLTest_RandomIntegerInRange(10, 50); + refRect.h = SDLTest_RandomIntegerInRange(10, 50); + _testSetTextInputRect(refRect); + + /* 1Pixel refRect */ + refRect.x = SDLTest_RandomIntegerInRange(10, 50);; + refRect.y = SDLTest_RandomIntegerInRange(10, 50);; + refRect.w = 1; + refRect.h = 1; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 1; + refRect.h = 0; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 0; + refRect.h = 1; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 1; + refRect.y = 1; + refRect.w = 0; + refRect.h = 0; + _testSetTextInputRect(refRect); + + /* 0pixel refRect */ + refRect.x = 0; + refRect.y = 0; + refRect.w = 0; + refRect.h = 0; + _testSetTextInputRect(refRect); + + /* negative refRect */ + refRect.x = SDLTest_RandomIntegerInRange(-200, -100);; + refRect.y = SDLTest_RandomIntegerInRange(-200, -100);; + refRect.w = 50; + refRect.h = 50; + _testSetTextInputRect(refRect); + + /* oversized refRect */ + refRect.x = SDLTest_RandomIntegerInRange(1, 50);; + refRect.y = SDLTest_RandomIntegerInRange(1, 50);; + refRect.w = 5000; + refRect.h = 5000; + _testSetTextInputRect(refRect); + + /* NULL refRect */ + SDL_SetTextInputRect(NULL); + SDLTest_AssertPass("Call to SDL_SetTextInputRect(NULL)"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_SetTextInputRect with invalid data + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetTextInputRect + */ +int +keyboard_setTextInputRectNegative(void *arg) +{ + /* Some platforms set also an error message; prepare for checking it */ +#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_COCOA + const char *expectedError = "Parameter 'rect' is invalid"; + const char *error; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); +#endif + + /* NULL refRect */ + SDL_SetTextInputRect(NULL); + SDLTest_AssertPass("Call to SDL_SetTextInputRect(NULL)"); + + /* Some platforms set also an error message; so check it */ +#if SDL_VIDEO_DRIVER_WINDOWS || SDL_VIDEO_DRIVER_ANDROID || SDL_VIDEO_DRIVER_COCOA + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); +#endif + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetScancodeFromKey + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeFromKey + * @sa http://wiki.libsdl.org/moin.cgi/SDL_Keycode + */ +int +keyboard_getScancodeFromKey(void *arg) +{ + SDL_Scancode scancode; + + /* Regular key */ + scancode = SDL_GetScancodeFromKey(SDLK_4); + SDLTest_AssertPass("Call to SDL_GetScancodeFromKey(SDLK_4)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_4, "Validate return value from SDL_GetScancodeFromKey, expected: %i, got: %i", SDL_SCANCODE_4, scancode); + + /* Virtual key */ + scancode = SDL_GetScancodeFromKey(SDLK_PLUS); + SDLTest_AssertPass("Call to SDL_GetScancodeFromKey(SDLK_PLUS)"); + SDLTest_AssertCheck(scancode == 0, "Validate return value from SDL_GetScancodeFromKey, expected: 0, got: %i", scancode); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetScancodeFromName + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeFromName + * @sa http://wiki.libsdl.org/moin.cgi/SDL_Keycode + */ +int +keyboard_getScancodeFromName(void *arg) +{ + SDL_Scancode scancode; + + /* Regular key, 1 character, first name in list */ + scancode = SDL_GetScancodeFromName("A"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('A')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_A, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_A, scancode); + + /* Regular key, 1 character */ + scancode = SDL_GetScancodeFromName("4"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('4')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_4, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_4, scancode); + + /* Regular key, 2 characters */ + scancode = SDL_GetScancodeFromName("F1"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('F1')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_F1, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_F1, scancode); + + /* Regular key, 3 characters */ + scancode = SDL_GetScancodeFromName("End"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('End')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_END, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_END, scancode); + + /* Regular key, 4 characters */ + scancode = SDL_GetScancodeFromName("Find"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Find')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_FIND, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_FIND, scancode); + + /* Regular key, several characters */ + scancode = SDL_GetScancodeFromName("Backspace"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Backspace')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_BACKSPACE, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_BACKSPACE, scancode); + + /* Regular key, several characters with space */ + scancode = SDL_GetScancodeFromName("Keypad Enter"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Keypad Enter')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_KP_ENTER, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_KP_ENTER, scancode); + + /* Regular key, last name in list */ + scancode = SDL_GetScancodeFromName("Sleep"); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('Sleep')"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_SLEEP, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_SLEEP, scancode); + + return TEST_COMPLETED; +} + +/* + * Local helper to check for the invalid scancode error message + */ +void +_checkInvalidNameError() +{ + const char *expectedError = "Parameter 'name' is invalid"; + const char *error; + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Check call to SDL_GetScancodeFromName with invalid data + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetScancodeFromName + * @sa http://wiki.libsdl.org/moin.cgi/SDL_Keycode + */ +int +keyboard_getScancodeFromNameNegative(void *arg) +{ + char *name; + SDL_Scancode scancode; + + /* Clear error message */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Random string input */ + name = SDLTest_RandomAsciiStringOfSize(32); + SDLTest_Assert(name != NULL, "Check that random name is not NULL"); + if (name == NULL) { + return TEST_ABORTED; + } + scancode = SDL_GetScancodeFromName((const char *)name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName('%s')", name); + SDL_free(name); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + _checkInvalidNameError(); + + /* Zero length string input */ + name = ""; + scancode = SDL_GetScancodeFromName((const char *)name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + _checkInvalidNameError(); + + /* NULL input */ + name = NULL; + scancode = SDL_GetScancodeFromName((const char *)name); + SDLTest_AssertPass("Call to SDL_GetScancodeFromName(NULL)"); + SDLTest_AssertCheck(scancode == SDL_SCANCODE_UNKNOWN, "Validate return value from SDL_GetScancodeFromName, expected: %i, got: %i", SDL_SCANCODE_UNKNOWN, scancode); + _checkInvalidNameError(); + + return TEST_COMPLETED; +} + + + +/* ================= Test References ================== */ + +/* Keyboard test cases */ +static const SDLTest_TestCaseReference keyboardTest1 = + { (SDLTest_TestCaseFp)keyboard_getKeyboardState, "keyboard_getKeyboardState", "Check call to SDL_GetKeyboardState with and without numkeys reference", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest2 = + { (SDLTest_TestCaseFp)keyboard_getKeyboardFocus, "keyboard_getKeyboardFocus", "Check call to SDL_GetKeyboardFocus", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest3 = + { (SDLTest_TestCaseFp)keyboard_getKeyFromName, "keyboard_getKeyFromName", "Check call to SDL_GetKeyFromName for known, unknown and invalid name", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest4 = + { (SDLTest_TestCaseFp)keyboard_getKeyFromScancode, "keyboard_getKeyFromScancode", "Check call to SDL_GetKeyFromScancode", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest5 = + { (SDLTest_TestCaseFp)keyboard_getKeyName, "keyboard_getKeyName", "Check call to SDL_GetKeyName", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest6 = + { (SDLTest_TestCaseFp)keyboard_getSetModState, "keyboard_getSetModState", "Check call to SDL_GetModState and SDL_SetModState", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest7 = + { (SDLTest_TestCaseFp)keyboard_startStopTextInput, "keyboard_startStopTextInput", "Check call to SDL_StartTextInput and SDL_StopTextInput", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest8 = + { (SDLTest_TestCaseFp)keyboard_setTextInputRect, "keyboard_setTextInputRect", "Check call to SDL_SetTextInputRect", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest9 = + { (SDLTest_TestCaseFp)keyboard_setTextInputRectNegative, "keyboard_setTextInputRectNegative", "Check call to SDL_SetTextInputRect with invalid data", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest10 = + { (SDLTest_TestCaseFp)keyboard_getScancodeFromKey, "keyboard_getScancodeFromKey", "Check call to SDL_GetScancodeFromKey", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest11 = + { (SDLTest_TestCaseFp)keyboard_getScancodeFromName, "keyboard_getScancodeFromName", "Check call to SDL_GetScancodeFromName", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest12 = + { (SDLTest_TestCaseFp)keyboard_getScancodeFromNameNegative, "keyboard_getScancodeFromNameNegative", "Check call to SDL_GetScancodeFromName with invalid data", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest13 = + { (SDLTest_TestCaseFp)keyboard_getKeyNameNegative, "keyboard_getKeyNameNegative", "Check call to SDL_GetKeyName with invalid data", TEST_ENABLED }; + +static const SDLTest_TestCaseReference keyboardTest14 = + { (SDLTest_TestCaseFp)keyboard_getScancodeNameNegative, "keyboard_getScancodeNameNegative", "Check call to SDL_GetScancodeName with invalid data", TEST_ENABLED }; + +/* Sequence of Keyboard test cases */ +static const SDLTest_TestCaseReference *keyboardTests[] = { + &keyboardTest1, &keyboardTest2, &keyboardTest3, &keyboardTest4, &keyboardTest5, &keyboardTest6, + &keyboardTest7, &keyboardTest8, &keyboardTest9, &keyboardTest10, &keyboardTest11, &keyboardTest12, + &keyboardTest13, &keyboardTest14, NULL +}; + +/* Keyboard test suite (global) */ +SDLTest_TestSuiteReference keyboardTestSuite = { + "Keyboard", + NULL, + keyboardTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_main.c b/Engine/lib/sdl/test/testautomation_main.c new file mode 100644 index 0000000000..ef8f19e9e7 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_main.c @@ -0,0 +1,157 @@ +/** + * Automated SDL subsystems management test. + * + * Written by J�rgen Tjern� "jorgenpt" + * + * Released under Public Domain. + */ + +#include "SDL.h" +#include "SDL_test.h" + + +/* ! + * \brief Tests SDL_Init() and SDL_Quit() of Joystick and Haptic subsystems + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_Init + * http://wiki.libsdl.org/moin.cgi/SDL_Quit + */ +static int main_testInitQuitJoystickHaptic (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_HAPTIC_DISABLED + return TEST_SKIPPED; +#else + int enabled_subsystems; + int initialized_subsystems = SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC; + + SDLTest_AssertCheck( SDL_Init(initialized_subsystems) == 0, "SDL_Init multiple systems." ); + + enabled_subsystems = SDL_WasInit(initialized_subsystems); + SDLTest_AssertCheck( enabled_subsystems == initialized_subsystems, "SDL_WasInit(SDL_INIT_EVERYTHING) contains all systems (%i)", enabled_subsystems ); + + SDL_Quit(); + + enabled_subsystems = SDL_WasInit(initialized_subsystems); + SDLTest_AssertCheck( enabled_subsystems == 0, "SDL_Quit should shut down everything (%i)", enabled_subsystems ); + + return TEST_COMPLETED; +#endif +} + +/* ! + * \brief Tests SDL_InitSubSystem() and SDL_QuitSubSystem() + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_Init + * http://wiki.libsdl.org/moin.cgi/SDL_Quit + */ +static int main_testInitQuitSubSystem (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_HAPTIC_DISABLED || defined SDL_GAMECONTROLLER_DISABLED + return TEST_SKIPPED; +#else + int i; + int subsystems[] = { SDL_INIT_JOYSTICK, SDL_INIT_HAPTIC, SDL_INIT_GAMECONTROLLER }; + + for (i = 0; i < SDL_arraysize(subsystems); ++i) { + int initialized_system; + int subsystem = subsystems[i]; + + SDLTest_AssertCheck( (SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) before init should be false", subsystem ); + SDLTest_AssertCheck( SDL_InitSubSystem(subsystem) == 0, "SDL_InitSubSystem(%x)", subsystem ); + + initialized_system = SDL_WasInit(subsystem); + SDLTest_AssertCheck( (initialized_system & subsystem) != 0, "SDL_WasInit(%x) should be true (%x)", subsystem, initialized_system ); + + SDL_QuitSubSystem(subsystem); + + SDLTest_AssertCheck( (SDL_WasInit(subsystem) & subsystem) == 0, "SDL_WasInit(%x) after shutdown should be false", subsystem ); + } + + return TEST_COMPLETED; +#endif +} + +const int joy_and_controller = SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER; +static int main_testImpliedJoystickInit (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED + return TEST_SKIPPED; +#else + int initialized_system; + + /* First initialize the controller */ + SDLTest_AssertCheck( (SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller" ); + SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) == 0, "SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER)" ); + + /* Then make sure this implicitly initialized the joystick subsystem */ + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)", initialized_system ); + + /* Then quit the controller, and make sure that implicitly also quits the */ + /* joystick subsystem */ + SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == 0, "SDL_WasInit() should be false for joystick & controller (%x)", initialized_system ); + + return TEST_COMPLETED; +#endif +} + +static int main_testImpliedJoystickQuit (void *arg) +{ +#if defined SDL_JOYSTICK_DISABLED || defined SDL_GAMECONTROLLER_DISABLED + return TEST_SKIPPED; +#else + int initialized_system; + + /* First initialize the controller and the joystick (explicitly) */ + SDLTest_AssertCheck( (SDL_WasInit(joy_and_controller) & joy_and_controller) == 0, "SDL_WasInit() before init should be false for joystick & controller" ); + SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_JOYSTICK) == 0, "SDL_InitSubSystem(SDL_INIT_JOYSTICK)" ); + SDLTest_AssertCheck( SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER) == 0, "SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER)" ); + + /* Then make sure they're both initialized properly */ + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == joy_and_controller, "SDL_WasInit() should be true for joystick & controller (%x)", initialized_system ); + + /* Then quit the controller, and make sure that it does NOT quit the */ + /* explicitly initialized joystick subsystem. */ + SDL_QuitSubSystem(SDL_INIT_GAMECONTROLLER); + initialized_system = SDL_WasInit(joy_and_controller); + SDLTest_AssertCheck( (initialized_system & joy_and_controller) == SDL_INIT_JOYSTICK, "SDL_WasInit() should be false for joystick & controller (%x)", initialized_system ); + + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); + + return TEST_COMPLETED; +#endif +} + +static const SDLTest_TestCaseReference mainTest1 = + { (SDLTest_TestCaseFp)main_testInitQuitJoystickHaptic, "main_testInitQuitJoystickHaptic", "Tests SDL_Init/Quit of Joystick and Haptic subsystem", TEST_ENABLED}; + +static const SDLTest_TestCaseReference mainTest2 = + { (SDLTest_TestCaseFp)main_testInitQuitSubSystem, "main_testInitQuitSubSystem", "Tests SDL_InitSubSystem/QuitSubSystem", TEST_ENABLED}; + +static const SDLTest_TestCaseReference mainTest3 = + { (SDLTest_TestCaseFp)main_testImpliedJoystickInit, "main_testImpliedJoystickInit", "Tests that init for gamecontroller properly implies joystick", TEST_ENABLED}; + +static const SDLTest_TestCaseReference mainTest4 = + { (SDLTest_TestCaseFp)main_testImpliedJoystickQuit, "main_testImpliedJoystickQuit", "Tests that quit for gamecontroller doesn't quit joystick if you inited it explicitly", TEST_ENABLED}; + +/* Sequence of Platform test cases */ +static const SDLTest_TestCaseReference *mainTests[] = { + &mainTest1, + &mainTest2, + &mainTest3, + &mainTest4, + NULL +}; + +/* Platform test suite (global) */ +SDLTest_TestSuiteReference mainTestSuite = { + "Main", + NULL, + mainTests, + NULL +}; + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testautomation_mouse.c b/Engine/lib/sdl/test/testautomation_mouse.c new file mode 100644 index 0000000000..57cadee2eb --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_mouse.c @@ -0,0 +1,594 @@ +/** + * Mouse test suite + */ + +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Test case functions */ + +/* Helper to evaluate state returned from SDL_GetMouseState */ +int _mouseStateCheck(Uint32 state) +{ + return (state == 0) || + (state == SDL_BUTTON(SDL_BUTTON_LEFT)) || + (state == SDL_BUTTON(SDL_BUTTON_MIDDLE)) || + (state == SDL_BUTTON(SDL_BUTTON_RIGHT)) || + (state == SDL_BUTTON(SDL_BUTTON_X1)) || + (state == SDL_BUTTON(SDL_BUTTON_X2)); +} + +/** + * @brief Check call to SDL_GetMouseState + * + */ +int +mouse_getMouseState(void *arg) +{ + int x; + int y; + Uint32 state; + + /* Pump some events to update mouse state */ + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Case where x, y pointer is NULL */ + state = SDL_GetMouseState(NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, NULL)"); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x pointer is not NULL */ + x = INT_MIN; + state = SDL_GetMouseState(&x, NULL); + SDLTest_AssertPass("Call to SDL_GetMouseState(&x, NULL)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where y pointer is not NULL */ + y = INT_MIN; + state = SDL_GetMouseState(NULL, &y); + SDLTest_AssertPass("Call to SDL_GetMouseState(NULL, &y)"); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x and y pointer is not NULL */ + x = INT_MIN; + y = INT_MIN; + state = SDL_GetMouseState(&x, &y); + SDLTest_AssertPass("Call to SDL_GetMouseState(&x, &y)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetRelativeMouseState + * + */ +int +mouse_getRelativeMouseState(void *arg) +{ + int x; + int y; + Uint32 state; + + /* Pump some events to update mouse state */ + SDL_PumpEvents(); + SDLTest_AssertPass("Call to SDL_PumpEvents()"); + + /* Case where x, y pointer is NULL */ + state = SDL_GetRelativeMouseState(NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, NULL)"); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x pointer is not NULL */ + x = INT_MIN; + state = SDL_GetRelativeMouseState(&x, NULL); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, NULL)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where y pointer is not NULL */ + y = INT_MIN; + state = SDL_GetRelativeMouseState(NULL, &y); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(NULL, &y)"); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + /* Case where x and y pointer is not NULL */ + x = INT_MIN; + y = INT_MIN; + state = SDL_GetRelativeMouseState(&x, &y); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseState(&x, &y)"); + SDLTest_AssertCheck(x > INT_MIN, "Validate that value of x is > INT_MIN, got: %i", x); + SDLTest_AssertCheck(y > INT_MIN, "Validate that value of y is > INT_MIN, got: %i", y); + SDLTest_AssertCheck(_mouseStateCheck(state), "Validate state returned from function, got: %i", state); + + return TEST_COMPLETED; +} + + +/* XPM definition of mouse Cursor */ +static const char *_mouseArrowData[] = { + /* pixels */ + "X ", + "XX ", + "X.X ", + "X..X ", + "X...X ", + "X....X ", + "X.....X ", + "X......X ", + "X.......X ", + "X........X ", + "X.....XXXXX ", + "X..X..X ", + "X.X X..X ", + "XX X..X ", + "X X..X ", + " X..X ", + " X..X ", + " X..X ", + " XX ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " +}; + +/* Helper that creates a new mouse cursor from an XPM */ +static SDL_Cursor *_initArrowCursor(const char *image[]) +{ + SDL_Cursor *cursor; + int i, row, col; + Uint8 data[4*32]; + Uint8 mask[4*32]; + + i = -1; + for ( row=0; row<32; ++row ) { + for ( col=0; col<32; ++col ) { + if ( col % 8 ) { + data[i] <<= 1; + mask[i] <<= 1; + } else { + ++i; + data[i] = mask[i] = 0; + } + switch (image[row][col]) { + case 'X': + data[i] |= 0x01; + mask[i] |= 0x01; + break; + case '.': + mask[i] |= 0x01; + break; + case ' ': + break; + } + } + } + + cursor = SDL_CreateCursor(data, mask, 32, 32, 0, 0); + return cursor; +} + +/** + * @brief Check call to SDL_CreateCursor and SDL_FreeCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_CreateCursor + * @sa http://wiki.libsdl.org/moin.cgi/SDL_FreeCursor + */ +int +mouse_createFreeCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Create a cursor */ + cursor = _initArrowCursor(_mouseArrowData); + SDLTest_AssertPass("Call to SDL_CreateCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL"); + if (cursor == NULL) { + return TEST_ABORTED; + } + + /* Free cursor again */ + SDL_FreeCursor(cursor); + SDLTest_AssertPass("Call to SDL_FreeCursor()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_CreateColorCursor and SDL_FreeCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_CreateColorCursor + * @sa http://wiki.libsdl.org/moin.cgi/SDL_FreeCursor + */ +int +mouse_createFreeColorCursor(void *arg) +{ + SDL_Surface *face; + SDL_Cursor *cursor; + + /* Get sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Validate sample input image is not NULL"); + if (face == NULL) return TEST_ABORTED; + + /* Create a color cursor from surface */ + cursor = SDL_CreateColorCursor(face, 0, 0); + SDLTest_AssertPass("Call to SDL_CreateColorCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateColorCursor() is not NULL"); + if (cursor == NULL) { + SDL_FreeSurface(face); + return TEST_ABORTED; + } + + /* Free cursor again */ + SDL_FreeCursor(cursor); + SDLTest_AssertPass("Call to SDL_FreeCursor()"); + + /* Clean up */ + SDL_FreeSurface(face); + + return TEST_COMPLETED; +} + +/* Helper that changes cursor visibility */ +void _changeCursorVisibility(int state) +{ + int oldState; + int newState; + int result; + + oldState = SDL_ShowCursor(SDL_QUERY); + SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)"); + + result = SDL_ShowCursor(state); + SDLTest_AssertPass("Call to SDL_ShowCursor(%s)", (state == SDL_ENABLE) ? "SDL_ENABLE" : "SDL_DISABLE"); + SDLTest_AssertCheck(result == oldState, "Validate result from SDL_ShowCursor(%s), expected: %i, got: %i", + (state == SDL_ENABLE) ? "SDL_ENABLE" : "SDL_DISABLE", oldState, result); + + newState = SDL_ShowCursor(SDL_QUERY); + SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)"); + SDLTest_AssertCheck(state == newState, "Validate new state, expected: %i, got: %i", + state, newState); +} + +/** + * @brief Check call to SDL_ShowCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_ShowCursor + */ +int +mouse_showCursor(void *arg) +{ + int currentState; + + /* Get current state */ + currentState = SDL_ShowCursor(SDL_QUERY); + SDLTest_AssertPass("Call to SDL_ShowCursor(SDL_QUERY)"); + SDLTest_AssertCheck(currentState == SDL_DISABLE || currentState == SDL_ENABLE, + "Validate result is %i or %i, got: %i", SDL_DISABLE, SDL_ENABLE, currentState); + if (currentState == SDL_DISABLE) { + /* Show the cursor, then hide it again */ + _changeCursorVisibility(SDL_ENABLE); + _changeCursorVisibility(SDL_DISABLE); + } else if (currentState == SDL_ENABLE) { + /* Hide the cursor, then show it again */ + _changeCursorVisibility(SDL_DISABLE); + _changeCursorVisibility(SDL_ENABLE); + } else { + return TEST_ABORTED; + } + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_SetCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetCursor + */ +int +mouse_setCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Create a cursor */ + cursor = _initArrowCursor(_mouseArrowData); + SDLTest_AssertPass("Call to SDL_CreateCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_CreateCursor() is not NULL"); + if (cursor == NULL) { + return TEST_ABORTED; + } + + /* Set the arrow cursor */ + SDL_SetCursor(cursor); + SDLTest_AssertPass("Call to SDL_SetCursor(cursor)"); + + /* Force redraw */ + SDL_SetCursor(NULL); + SDLTest_AssertPass("Call to SDL_SetCursor(NULL)"); + + /* Free cursor again */ + SDL_FreeCursor(cursor); + SDLTest_AssertPass("Call to SDL_FreeCursor()"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetCursor + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetCursor + */ +int +mouse_getCursor(void *arg) +{ + SDL_Cursor *cursor; + + /* Get current cursor */ + cursor = SDL_GetCursor(); + SDLTest_AssertPass("Call to SDL_GetCursor()"); + SDLTest_AssertCheck(cursor != NULL, "Validate result from SDL_GetCursor() is not NULL"); + + return TEST_COMPLETED; +} + +/** + * @brief Check call to SDL_GetRelativeMouseMode and SDL_SetRelativeMouseMode + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetRelativeMouseMode + * @sa http://wiki.libsdl.org/moin.cgi/SDL_SetRelativeMouseMode + */ +int +mouse_getSetRelativeMouseMode(void *arg) +{ + int result; + int i; + SDL_bool initialState; + SDL_bool currentState; + + /* Capture original state so we can revert back to it later */ + initialState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + + /* Repeat twice to check D->D transition */ + for (i=0; i<2; i++) { + /* Disable - should always be supported */ + result = SDL_SetRelativeMouseMode(SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(FALSE)"); + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_FALSE, "Validate current state is FALSE, got: %i", currentState); + } + + /* Repeat twice to check D->E->E transition */ + for (i=0; i<2; i++) { + /* Enable - may not be supported */ + result = SDL_SetRelativeMouseMode(SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(TRUE)"); + if (result != -1) { + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_TRUE, "Validate current state is TRUE, got: %i", currentState); + } + } + + /* Disable to check E->D transition */ + result = SDL_SetRelativeMouseMode(SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetRelativeMouseMode(FALSE)"); + SDLTest_AssertCheck(result == 0, "Validate result value from SDL_SetRelativeMouseMode, expected: 0, got: %i", result); + currentState = SDL_GetRelativeMouseMode(); + SDLTest_AssertPass("Call to SDL_GetRelativeMouseMode()"); + SDLTest_AssertCheck(currentState == SDL_FALSE, "Validate current state is FALSE, got: %i", currentState); + + /* Revert to original state - ignore result */ + result = SDL_SetRelativeMouseMode(initialState); + + return TEST_COMPLETED; +} + +#define MOUSE_TESTWINDOW_WIDTH 320 +#define MOUSE_TESTWINDOW_HEIGHT 200 + +/** + * Creates a test window + */ +SDL_Window *_createMouseSuiteTestWindow() +{ + int posX = 100, posY = 100, width = MOUSE_TESTWINDOW_WIDTH, height = MOUSE_TESTWINDOW_HEIGHT; + SDL_Window *window; + window = SDL_CreateWindow("mouse_createMouseSuiteTestWindow", posX, posY, width, height, 0); + SDLTest_AssertPass("SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result"); + return window; +} + +/* + * Destroy test window + */ +void _destroyMouseSuiteTestWindow(SDL_Window *window) +{ + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("SDL_DestroyWindow()"); + } +} + +/** + * @brief Check call to SDL_WarpMouseInWindow + * + * @sa http://wiki.libsdl.org/moin.cgi/SDL_WarpMouseInWindow + */ +int +mouse_warpMouseInWindow(void *arg) +{ + const int w = MOUSE_TESTWINDOW_WIDTH, h = MOUSE_TESTWINDOW_HEIGHT; + int numPositions = 6; + int xPositions[] = {-1, 0, 1, w-1, w, w+1 }; + int yPositions[] = {-1, 0, 1, h-1, h, h+1 }; + int x, y, i, j; + SDL_Window *window; + + /* Create test window */ + window = _createMouseSuiteTestWindow(); + if (window == NULL) return TEST_ABORTED; + + /* Mouse to random position inside window */ + x = SDLTest_RandomIntegerInRange(1, w-1); + y = SDLTest_RandomIntegerInRange(1, h-1); + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y); + + /* Same position again */ + SDL_WarpMouseInWindow(window, x, y); + SDLTest_AssertPass("SDL_WarpMouseInWindow(...,%i,%i)", x, y); + + /* Mouse to various boundary positions */ + for (i=0; i + +#include "SDL.h" +#include "SDL_test.h" + +/* Test case functions */ + +/* Definition of all RGB formats used to test pixel conversions */ +const int _numRGBPixelFormats = 30; +Uint32 _RGBPixelFormats[] = + { + SDL_PIXELFORMAT_INDEX1LSB, + SDL_PIXELFORMAT_INDEX1MSB, + SDL_PIXELFORMAT_INDEX4LSB, + SDL_PIXELFORMAT_INDEX4MSB, + SDL_PIXELFORMAT_INDEX8, + SDL_PIXELFORMAT_RGB332, + SDL_PIXELFORMAT_RGB444, + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_BGR555, + SDL_PIXELFORMAT_ARGB4444, + SDL_PIXELFORMAT_RGBA4444, + SDL_PIXELFORMAT_ABGR4444, + SDL_PIXELFORMAT_BGRA4444, + SDL_PIXELFORMAT_ARGB1555, + SDL_PIXELFORMAT_RGBA5551, + SDL_PIXELFORMAT_ABGR1555, + SDL_PIXELFORMAT_BGRA5551, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_BGR565, + SDL_PIXELFORMAT_RGB24, + SDL_PIXELFORMAT_BGR24, + SDL_PIXELFORMAT_RGB888, + SDL_PIXELFORMAT_RGBX8888, + SDL_PIXELFORMAT_BGR888, + SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ARGB2101010 + }; +char* _RGBPixelFormatsVerbose[] = + { + "SDL_PIXELFORMAT_INDEX1LSB", + "SDL_PIXELFORMAT_INDEX1MSB", + "SDL_PIXELFORMAT_INDEX4LSB", + "SDL_PIXELFORMAT_INDEX4MSB", + "SDL_PIXELFORMAT_INDEX8", + "SDL_PIXELFORMAT_RGB332", + "SDL_PIXELFORMAT_RGB444", + "SDL_PIXELFORMAT_RGB555", + "SDL_PIXELFORMAT_BGR555", + "SDL_PIXELFORMAT_ARGB4444", + "SDL_PIXELFORMAT_RGBA4444", + "SDL_PIXELFORMAT_ABGR4444", + "SDL_PIXELFORMAT_BGRA4444", + "SDL_PIXELFORMAT_ARGB1555", + "SDL_PIXELFORMAT_RGBA5551", + "SDL_PIXELFORMAT_ABGR1555", + "SDL_PIXELFORMAT_BGRA5551", + "SDL_PIXELFORMAT_RGB565", + "SDL_PIXELFORMAT_BGR565", + "SDL_PIXELFORMAT_RGB24", + "SDL_PIXELFORMAT_BGR24", + "SDL_PIXELFORMAT_RGB888", + "SDL_PIXELFORMAT_RGBX8888", + "SDL_PIXELFORMAT_BGR888", + "SDL_PIXELFORMAT_BGRX8888", + "SDL_PIXELFORMAT_ARGB8888", + "SDL_PIXELFORMAT_RGBA8888", + "SDL_PIXELFORMAT_ABGR8888", + "SDL_PIXELFORMAT_BGRA8888", + "SDL_PIXELFORMAT_ARGB2101010" + }; + +/* Definition of all Non-RGB formats used to test pixel conversions */ +const int _numNonRGBPixelFormats = 7; +Uint32 _nonRGBPixelFormats[] = + { + SDL_PIXELFORMAT_YV12, + SDL_PIXELFORMAT_IYUV, + SDL_PIXELFORMAT_YUY2, + SDL_PIXELFORMAT_UYVY, + SDL_PIXELFORMAT_YVYU, + SDL_PIXELFORMAT_NV12, + SDL_PIXELFORMAT_NV21 + }; +char* _nonRGBPixelFormatsVerbose[] = + { + "SDL_PIXELFORMAT_YV12", + "SDL_PIXELFORMAT_IYUV", + "SDL_PIXELFORMAT_YUY2", + "SDL_PIXELFORMAT_UYVY", + "SDL_PIXELFORMAT_YVYU", + "SDL_PIXELFORMAT_NV12", + "SDL_PIXELFORMAT_NV21" + }; + +/* Definition of some invalid formats for negative tests */ +const int _numInvalidPixelFormats = 2; +Uint32 _invalidPixelFormats[] = + { + 0xfffffffe, + 0xffffffff + }; +char* _invalidPixelFormatsVerbose[] = + { + "SDL_PIXELFORMAT_UNKNOWN", + "SDL_PIXELFORMAT_UNKNOWN" + }; + +/* Test case functions */ + +/** + * @brief Call to SDL_AllocFormat and SDL_FreeFormat + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocFormat + * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreeFormat + */ +int +pixels_allocFreeFormat(void *arg) +{ + const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN"; + const char *expectedError = "Parameter 'format' is invalid"; + const char *error; + int i; + Uint32 format; + Uint32 masks; + SDL_PixelFormat* result; + + /* Blank/unknown format */ + format = 0; + SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format); + + /* Allocate format */ + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format); + SDLTest_AssertCheck(result->BitsPerPixel == 0, "Verify value of result.BitsPerPixel; expected: 0, got %u", result->BitsPerPixel); + SDLTest_AssertCheck(result->BytesPerPixel == 0, "Verify value of result.BytesPerPixel; expected: 0, got %u", result->BytesPerPixel); + masks = result->Rmask | result->Gmask | result->Bmask | result->Amask; + SDLTest_AssertCheck(masks == 0, "Verify value of result.[RGBA]mask combined; expected: 0, got %u", masks); + + /* Deallocate again */ + SDL_FreeFormat(result); + SDLTest_AssertPass("Call to SDL_FreeFormat()"); + } + + /* RGB formats */ + for (i = 0; i < _numRGBPixelFormats; i++) { + format = _RGBPixelFormats[i]; + SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format); + + /* Allocate format */ + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format); + SDLTest_AssertCheck(result->BitsPerPixel > 0, "Verify value of result.BitsPerPixel; expected: >0, got %u", result->BitsPerPixel); + SDLTest_AssertCheck(result->BytesPerPixel > 0, "Verify value of result.BytesPerPixel; expected: >0, got %u", result->BytesPerPixel); + if (result->palette != NULL) { + masks = result->Rmask | result->Gmask | result->Bmask | result->Amask; + SDLTest_AssertCheck(masks > 0, "Verify value of result.[RGBA]mask combined; expected: >0, got %u", masks); + } + + /* Deallocate again */ + SDL_FreeFormat(result); + SDLTest_AssertPass("Call to SDL_FreeFormat()"); + } + } + + /* Non-RGB formats */ + for (i = 0; i < _numNonRGBPixelFormats; i++) { + format = _nonRGBPixelFormats[i]; + SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format); + + /* Try to allocate format */ + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat()"); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + } + + /* Negative cases */ + + /* Invalid Formats */ + for (i = 0; i < _numInvalidPixelFormats; i++) { + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + format = _invalidPixelFormats[i]; + result = SDL_AllocFormat(format); + SDLTest_AssertPass("Call to SDL_AllocFormat(%u)", format); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + } + + /* Invalid free pointer */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_FreeFormat(NULL); + SDLTest_AssertPass("Call to SDL_FreeFormat(NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError, error); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_GetPixelFormatName + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetPixelFormatName + */ +int +pixels_getPixelFormatName(void *arg) +{ + const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN"; + const char *error; + int i; + Uint32 format; + char* result; + + /* Blank/undefined format */ + format = 0; + SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format); + + /* Get name of format */ + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, unknownFormat) == 0, + "Verify result text; expected: %s, got %s", unknownFormat, result); + } + + /* RGB formats */ + for (i = 0; i < _numRGBPixelFormats; i++) { + format = _RGBPixelFormats[i]; + SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format); + + /* Get name of format */ + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, _RGBPixelFormatsVerbose[i]) == 0, + "Verify result text; expected: %s, got %s", _RGBPixelFormatsVerbose[i], result); + } + } + + /* Non-RGB formats */ + for (i = 0; i < _numNonRGBPixelFormats; i++) { + format = _nonRGBPixelFormats[i]; + SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format); + + /* Get name of format */ + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName()"); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty"); + SDLTest_AssertCheck(SDL_strcmp(result, _nonRGBPixelFormatsVerbose[i]) == 0, + "Verify result text; expected: %s, got %s", _nonRGBPixelFormatsVerbose[i], result); + } + } + + /* Negative cases */ + + /* Invalid Formats */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (i = 0; i < _numInvalidPixelFormats; i++) { + format = _invalidPixelFormats[i]; + result = (char *)SDL_GetPixelFormatName(format); + SDLTest_AssertPass("Call to SDL_GetPixelFormatName(%u)", format); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result[0] != '\0', + "Verify result is non-empty; got: %s", result); + SDLTest_AssertCheck(SDL_strcmp(result, _invalidPixelFormatsVerbose[i]) == 0, + "Validate name is UNKNOWN, expected: '%s', got: '%s'", _invalidPixelFormatsVerbose[i], result); + } + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty"); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_AllocPalette and SDL_FreePalette + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocPalette + * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreePalette + */ +int +pixels_allocFreePalette(void *arg) +{ + const char *expectedError1 = "Parameter 'ncolors' is invalid"; + const char *expectedError2 = "Parameter 'palette' is invalid"; + const char *error; + int variation; + int i; + int ncolors; + SDL_Palette* result; + + /* Allocate palette */ + for (variation = 1; variation <= 3; variation++) { + switch (variation) { + /* Just one color */ + case 1: + ncolors = 1; + break; + /* Two colors */ + case 2: + ncolors = 2; + break; + /* More than two colors */ + case 3: + ncolors = SDLTest_RandomIntegerInRange(8, 16); + break; + } + + result = SDL_AllocPalette(ncolors); + SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors); + SDLTest_AssertCheck(result != NULL, "Verify result is not NULL"); + if (result != NULL) { + SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors); + if (result->ncolors > 0) { + SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL"); + if (result->colors != NULL) { + for(i = 0; i < result->ncolors; i++) { + SDLTest_AssertCheck(result->colors[i].r == 255, "Verify value of result.colors[%d].r; expected: 255, got %u", i, result->colors[i].r); + SDLTest_AssertCheck(result->colors[i].g == 255, "Verify value of result.colors[%d].g; expected: 255, got %u", i, result->colors[i].g); + SDLTest_AssertCheck(result->colors[i].b == 255, "Verify value of result.colors[%d].b; expected: 255, got %u", i, result->colors[i].b); + } + } + } + + /* Deallocate again */ + SDL_FreePalette(result); + SDLTest_AssertPass("Call to SDL_FreePalette()"); + } + } + + /* Negative cases */ + + /* Invalid number of colors */ + for (ncolors = 0; ncolors > -3; ncolors--) { + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + result = SDL_AllocPalette(ncolors); + SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError1, error); + } + } + + /* Invalid free pointer */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_FreePalette(NULL); + SDLTest_AssertPass("Call to SDL_FreePalette(NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError2, error); + } + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_CalculateGammaRamp + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_CalculateGammaRamp + */ +int +pixels_calcGammaRamp(void *arg) +{ + const char *expectedError1 = "Parameter 'gamma' is invalid"; + const char *expectedError2 = "Parameter 'ramp' is invalid"; + const char *error; + float gamma; + Uint16 *ramp; + int variation; + int i; + int changed; + Uint16 magic = 0xbeef; + + /* Allocate temp ramp array and fill with some value */ + ramp = (Uint16 *)SDL_malloc(256 * sizeof(Uint16)); + SDLTest_AssertCheck(ramp != NULL, "Validate temp ramp array could be allocated"); + if (ramp == NULL) return TEST_ABORTED; + + /* Make call with different gamma values */ + for (variation = 0; variation < 4; variation++) { + switch (variation) { + /* gamma = 0 all black */ + case 0: + gamma = 0.0f; + break; + /* gamma = 1 identity */ + case 1: + gamma = 1.0f; + break; + /* gamma = [0.2,0.8] normal range */ + case 2: + gamma = 0.2f + 0.8f * SDLTest_RandomUnitFloat(); + break; + /* gamma = >1.1 non-standard range */ + case 3: + gamma = 1.1f + SDLTest_RandomUnitFloat(); + break; + } + + /* Make call and check that values were updated */ + for (i = 0; i < 256; i++) ramp[i] = magic; + SDL_CalculateGammaRamp(gamma, ramp); + SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma); + changed = 0; + for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++; + SDLTest_AssertCheck(changed > 250, "Validate that ramp was calculated; expected: >250 values changed, got: %d values changed", changed); + + /* Additional value checks for some cases */ + i = SDLTest_RandomIntegerInRange(64,192); + switch (variation) { + case 0: + SDLTest_AssertCheck(ramp[i] == 0, "Validate value at position %d; expected: 0, got: %d", i, ramp[i]); + break; + case 1: + SDLTest_AssertCheck(ramp[i] == ((i << 8) | i), "Validate value at position %d; expected: %d, got: %d", i, (i << 8) | i, ramp[i]); + break; + case 2: + case 3: + SDLTest_AssertCheck(ramp[i] > 0, "Validate value at position %d; expected: >0, got: %d", i, ramp[i]); + break; + } + } + + /* Negative cases */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + gamma = -1; + for (i=0; i<256; i++) ramp[i] = magic; + SDL_CalculateGammaRamp(gamma, ramp); + SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError1, error); + } + changed = 0; + for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++; + SDLTest_AssertCheck(changed ==0, "Validate that ramp unchanged; expected: 0 values changed got: %d values changed", changed); + + SDL_CalculateGammaRamp(0.5f, NULL); + SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(0.5,NULL)"); + error = SDL_GetError(); + SDLTest_AssertPass("Call to SDL_GetError()"); + SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL"); + if (error != NULL) { + SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0, + "Validate error message, expected: '%s', got: '%s'", expectedError2, error); + } + + /* Cleanup */ + SDL_free(ramp); + + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Pixels test cases */ +static const SDLTest_TestCaseReference pixelsTest1 = + { (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_AllocFormat and SDL_FreeFormat", TEST_ENABLED }; + +static const SDLTest_TestCaseReference pixelsTest2 = + { (SDLTest_TestCaseFp)pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_AllocPalette and SDL_FreePalette", TEST_ENABLED }; + +static const SDLTest_TestCaseReference pixelsTest3 = + { (SDLTest_TestCaseFp)pixels_calcGammaRamp, "pixels_calcGammaRamp", "Call to SDL_CalculateGammaRamp", TEST_ENABLED }; + +static const SDLTest_TestCaseReference pixelsTest4 = + { (SDLTest_TestCaseFp)pixels_getPixelFormatName, "pixels_getPixelFormatName", "Call to SDL_GetPixelFormatName", TEST_ENABLED }; + +/* Sequence of Pixels test cases */ +static const SDLTest_TestCaseReference *pixelsTests[] = { + &pixelsTest1, &pixelsTest2, &pixelsTest3, &pixelsTest4, NULL +}; + +/* Pixels test suite (global) */ +SDLTest_TestSuiteReference pixelsTestSuite = { + "Pixels", + NULL, + pixelsTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_platform.c b/Engine/lib/sdl/test/testautomation_platform.c new file mode 100644 index 0000000000..5211a4a70c --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_platform.c @@ -0,0 +1,584 @@ +/** + * Original code: automated SDL platform test written by Edgar Simo "bobbens" + * Extended and updated by aschiffler at ferzkopp dot net + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +/** + * @brief Compare sizes of types. + * + * @note Watcom C flags these as Warning 201: "Unreachable code" if you just + * compare them directly, so we push it through a function to keep the + * compiler quiet. --ryan. + */ +static int _compareSizeOfType( size_t sizeoftype, size_t hardcodetype ) +{ + return sizeoftype != hardcodetype; +} + +/* Test case functions */ + +/** + * @brief Tests type sizes. + */ +int platform_testTypes(void *arg) +{ + int ret; + + ret = _compareSizeOfType( sizeof(Uint8), 1 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint8) = %lu, expected 1", (unsigned long)sizeof(Uint8) ); + + ret = _compareSizeOfType( sizeof(Uint16), 2 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint16) = %lu, expected 2", (unsigned long)sizeof(Uint16) ); + + ret = _compareSizeOfType( sizeof(Uint32), 4 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint32) = %lu, expected 4", (unsigned long)sizeof(Uint32) ); + + ret = _compareSizeOfType( sizeof(Uint64), 8 ); + SDLTest_AssertCheck( ret == 0, "sizeof(Uint64) = %lu, expected 8", (unsigned long)sizeof(Uint64) ); + + return TEST_COMPLETED; +} + +/** + * @brief Tests platform endianness and SDL_SwapXY functions. + */ +int platform_testEndianessAndSwap(void *arg) +{ + int real_byteorder; + Uint16 value = 0x1234; + Uint16 value16 = 0xCDAB; + Uint16 swapped16 = 0xABCD; + Uint32 value32 = 0xEFBEADDE; + Uint32 swapped32 = 0xDEADBEEF; + + Uint64 value64, swapped64; + value64 = 0xEFBEADDE; + value64 <<= 32; + value64 |= 0xCDAB3412; + swapped64 = 0x1234ABCD; + swapped64 <<= 32; + swapped64 |= 0xDEADBEEF; + + if ((*((char *) &value) >> 4) == 0x1) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + + /* Test endianness. */ + SDLTest_AssertCheck( real_byteorder == SDL_BYTEORDER, + "Machine detected as %s endian, appears to be %s endian.", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" ); + + /* Test 16 swap. */ + SDLTest_AssertCheck( SDL_Swap16(value16) == swapped16, + "SDL_Swap16(): 16 bit swapped: 0x%X => 0x%X", + value16, SDL_Swap16(value16) ); + + /* Test 32 swap. */ + SDLTest_AssertCheck( SDL_Swap32(value32) == swapped32, + "SDL_Swap32(): 32 bit swapped: 0x%X => 0x%X", + value32, SDL_Swap32(value32) ); + + /* Test 64 swap. */ + SDLTest_AssertCheck( SDL_Swap64(value64) == swapped64, + "SDL_Swap64(): 64 bit swapped: 0x%"SDL_PRIX64" => 0x%"SDL_PRIX64, + value64, SDL_Swap64(value64) ); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_GetXYZ() functions + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetPlatform + * http://wiki.libsdl.org/moin.cgi/SDL_GetCPUCount + * http://wiki.libsdl.org/moin.cgi/SDL_GetCPUCacheLineSize + * http://wiki.libsdl.org/moin.cgi/SDL_GetRevision + * http://wiki.libsdl.org/moin.cgi/SDL_GetRevisionNumber + */ +int platform_testGetFunctions (void *arg) +{ + char *platform; + char *revision; + int ret; + int len; + + platform = (char *)SDL_GetPlatform(); + SDLTest_AssertPass("SDL_GetPlatform()"); + SDLTest_AssertCheck(platform != NULL, "SDL_GetPlatform() != NULL"); + if (platform != NULL) { + len = SDL_strlen(platform); + SDLTest_AssertCheck(len > 0, + "SDL_GetPlatform(): expected non-empty platform, was platform: '%s', len: %i", + platform, + len); + } + + ret = SDL_GetCPUCount(); + SDLTest_AssertPass("SDL_GetCPUCount()"); + SDLTest_AssertCheck(ret > 0, + "SDL_GetCPUCount(): expected count > 0, was: %i", + ret); + + ret = SDL_GetCPUCacheLineSize(); + SDLTest_AssertPass("SDL_GetCPUCacheLineSize()"); + SDLTest_AssertCheck(ret >= 0, + "SDL_GetCPUCacheLineSize(): expected size >= 0, was: %i", + ret); + + revision = (char *)SDL_GetRevision(); + SDLTest_AssertPass("SDL_GetRevision()"); + SDLTest_AssertCheck(revision != NULL, "SDL_GetRevision() != NULL"); + + ret = SDL_GetRevisionNumber(); + SDLTest_AssertPass("SDL_GetRevisionNumber()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasXYZ() functions + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_Has3DNow + * http://wiki.libsdl.org/moin.cgi/SDL_HasAltiVec + * http://wiki.libsdl.org/moin.cgi/SDL_HasMMX + * http://wiki.libsdl.org/moin.cgi/SDL_HasRDTSC + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE2 + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE3 + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE41 + * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE42 + * http://wiki.libsdl.org/moin.cgi/SDL_HasAVX + */ +int platform_testHasFunctions (void *arg) +{ + int ret; + + /* TODO: independently determine and compare values as well */ + + ret = SDL_HasRDTSC(); + SDLTest_AssertPass("SDL_HasRDTSC()"); + + ret = SDL_HasAltiVec(); + SDLTest_AssertPass("SDL_HasAltiVec()"); + + ret = SDL_HasMMX(); + SDLTest_AssertPass("SDL_HasMMX()"); + + ret = SDL_Has3DNow(); + SDLTest_AssertPass("SDL_Has3DNow()"); + + ret = SDL_HasSSE(); + SDLTest_AssertPass("SDL_HasSSE()"); + + ret = SDL_HasSSE2(); + SDLTest_AssertPass("SDL_HasSSE2()"); + + ret = SDL_HasSSE3(); + SDLTest_AssertPass("SDL_HasSSE3()"); + + ret = SDL_HasSSE41(); + SDLTest_AssertPass("SDL_HasSSE41()"); + + ret = SDL_HasSSE42(); + SDLTest_AssertPass("SDL_HasSSE42()"); + + ret = SDL_HasAVX(); + SDLTest_AssertPass("SDL_HasAVX()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_GetVersion + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetVersion + */ +int platform_testGetVersion(void *arg) +{ + SDL_version linked; + int major = SDL_MAJOR_VERSION; + int minor = SDL_MINOR_VERSION; + + SDL_GetVersion(&linked); + SDLTest_AssertCheck( linked.major >= major, + "SDL_GetVersion(): returned major %i (>= %i)", + linked.major, + major); + SDLTest_AssertCheck( linked.minor >= minor, + "SDL_GetVersion(): returned minor %i (>= %i)", + linked.minor, + minor); + + return TEST_COMPLETED; +} + + +/* ! + * \brief Tests SDL_VERSION macro + */ +int platform_testSDLVersion(void *arg) +{ + SDL_version compiled; + int major = SDL_MAJOR_VERSION; + int minor = SDL_MINOR_VERSION; + + SDL_VERSION(&compiled); + SDLTest_AssertCheck( compiled.major >= major, + "SDL_VERSION() returned major %i (>= %i)", + compiled.major, + major); + SDLTest_AssertCheck( compiled.minor >= minor, + "SDL_VERSION() returned minor %i (>= %i)", + compiled.minor, + minor); + + return TEST_COMPLETED; +} + + +/* ! + * \brief Tests default SDL_Init + */ +int platform_testDefaultInit(void *arg) +{ + int ret; + int subsystem; + + subsystem = SDL_WasInit(SDL_INIT_EVERYTHING); + SDLTest_AssertCheck( subsystem != 0, + "SDL_WasInit(0): returned %i, expected != 0", + subsystem); + + ret = SDL_Init(SDL_WasInit(SDL_INIT_EVERYTHING)); + SDLTest_AssertCheck( ret == 0, + "SDL_Init(0): returned %i, expected 0, error: %s", + ret, + SDL_GetError()); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_Get/Set/ClearError + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetError + * http://wiki.libsdl.org/moin.cgi/SDL_SetError + * http://wiki.libsdl.org/moin.cgi/SDL_ClearError + */ +int platform_testGetSetClearError(void *arg) +{ + int result; + const char *testError = "Testing"; + char *lastError; + int len; + + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0, + "SDL_GetError(): no message expected, len: %i", len); + } + + result = SDL_SetError("%s", testError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(testError), + "SDL_GetError(): expected message len %i, was len: %i", + SDL_strlen(testError), + len); + SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0, + "SDL_GetError(): expected message %s, was message: %s", + testError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_SetError with empty input + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetError + */ +int platform_testSetErrorEmptyInput(void *arg) +{ + int result; + const char *testError = ""; + char *lastError; + int len; + + result = SDL_SetError("%s", testError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(testError), + "SDL_GetError(): expected message len %i, was len: %i", + SDL_strlen(testError), + len); + SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + testError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_SetError with invalid input + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetError + */ +int platform_testSetErrorInvalidInput(void *arg) +{ + int result; + const char *invalidError = NULL; + const char *probeError = "Testing"; + char *lastError; + int len; + + /* Reset */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* Check for no-op */ + result = SDL_SetError(invalidError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0, + "SDL_GetError(): expected message len 0, was len: %i", + len); + } + + /* Set */ + result = SDL_SetError(probeError); + SDLTest_AssertPass("SDL_SetError('%s')", probeError); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + + /* Check for no-op */ + result = SDL_SetError(invalidError); + SDLTest_AssertPass("SDL_SetError(NULL)"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == 0, + "SDL_GetError(): expected message len 0, was len: %i", + len); + } + + /* Reset */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* Set and check */ + result = SDL_SetError(probeError); + SDLTest_AssertPass("SDL_SetError()"); + SDLTest_AssertCheck(result == -1, "SDL_SetError: expected -1, got: %i", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertCheck(lastError != NULL, + "SDL_GetError() != NULL"); + if (lastError != NULL) + { + len = SDL_strlen(lastError); + SDLTest_AssertCheck(len == SDL_strlen(probeError), + "SDL_GetError(): expected message len %i, was len: %i", + SDL_strlen(probeError), + len); + SDLTest_AssertCheck(SDL_strcmp(lastError, probeError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + probeError, + lastError); + } + + /* Clean up */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_GetPowerInfo + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetPowerInfo + */ +int platform_testGetPowerInfo(void *arg) +{ + SDL_PowerState state; + SDL_PowerState stateAgain; + int secs; + int secsAgain; + int pct; + int pctAgain; + + state = SDL_GetPowerInfo(&secs, &pct); + SDLTest_AssertPass("SDL_GetPowerInfo()"); + SDLTest_AssertCheck( + state==SDL_POWERSTATE_UNKNOWN || + state==SDL_POWERSTATE_ON_BATTERY || + state==SDL_POWERSTATE_NO_BATTERY || + state==SDL_POWERSTATE_CHARGING || + state==SDL_POWERSTATE_CHARGED, + "SDL_GetPowerInfo(): state %i is one of the expected values", + (int)state); + + if (state==SDL_POWERSTATE_ON_BATTERY) + { + SDLTest_AssertCheck( + secs >= 0, + "SDL_GetPowerInfo(): on battery, secs >= 0, was: %i", + secs); + SDLTest_AssertCheck( + (pct >= 0) && (pct <= 100), + "SDL_GetPowerInfo(): on battery, pct=[0,100], was: %i", + pct); + } + + if (state==SDL_POWERSTATE_UNKNOWN || + state==SDL_POWERSTATE_NO_BATTERY) + { + SDLTest_AssertCheck( + secs == -1, + "SDL_GetPowerInfo(): no battery, secs == -1, was: %i", + secs); + SDLTest_AssertCheck( + pct == -1, + "SDL_GetPowerInfo(): no battery, pct == -1, was: %i", + pct); + } + + /* Partial return value variations */ + stateAgain = SDL_GetPowerInfo(&secsAgain, NULL); + SDLTest_AssertCheck( + state==stateAgain, + "State %i returned when only 'secs' requested", + stateAgain); + SDLTest_AssertCheck( + secs==secsAgain, + "Value %i matches when only 'secs' requested", + secsAgain); + stateAgain = SDL_GetPowerInfo(NULL, &pctAgain); + SDLTest_AssertCheck( + state==stateAgain, + "State %i returned when only 'pct' requested", + stateAgain); + SDLTest_AssertCheck( + pct==pctAgain, + "Value %i matches when only 'pct' requested", + pctAgain); + stateAgain = SDL_GetPowerInfo(NULL, NULL); + SDLTest_AssertCheck( + state==stateAgain, + "State %i returned when no value requested", + stateAgain); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Platform test cases */ +static const SDLTest_TestCaseReference platformTest1 = + { (SDLTest_TestCaseFp)platform_testTypes, "platform_testTypes", "Tests predefined types", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest2 = + { (SDLTest_TestCaseFp)platform_testEndianessAndSwap, "platform_testEndianessAndSwap", "Tests endianess and swap functions", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest3 = + { (SDLTest_TestCaseFp)platform_testGetFunctions, "platform_testGetFunctions", "Tests various SDL_GetXYZ functions", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest4 = + { (SDLTest_TestCaseFp)platform_testHasFunctions, "platform_testHasFunctions", "Tests various SDL_HasXYZ functions", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest5 = + { (SDLTest_TestCaseFp)platform_testGetVersion, "platform_testGetVersion", "Tests SDL_GetVersion function", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest6 = + { (SDLTest_TestCaseFp)platform_testSDLVersion, "platform_testSDLVersion", "Tests SDL_VERSION macro", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest7 = + { (SDLTest_TestCaseFp)platform_testDefaultInit, "platform_testDefaultInit", "Tests default SDL_Init", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest8 = + { (SDLTest_TestCaseFp)platform_testGetSetClearError, "platform_testGetSetClearError", "Tests SDL_Get/Set/ClearError", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest9 = + { (SDLTest_TestCaseFp)platform_testSetErrorEmptyInput, "platform_testSetErrorEmptyInput", "Tests SDL_SetError with empty input", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest10 = + { (SDLTest_TestCaseFp)platform_testSetErrorInvalidInput, "platform_testSetErrorInvalidInput", "Tests SDL_SetError with invalid input", TEST_ENABLED}; + +static const SDLTest_TestCaseReference platformTest11 = + { (SDLTest_TestCaseFp)platform_testGetPowerInfo, "platform_testGetPowerInfo", "Tests SDL_GetPowerInfo function", TEST_ENABLED }; + +/* Sequence of Platform test cases */ +static const SDLTest_TestCaseReference *platformTests[] = { + &platformTest1, + &platformTest2, + &platformTest3, + &platformTest4, + &platformTest5, + &platformTest6, + &platformTest7, + &platformTest8, + &platformTest9, + &platformTest10, + &platformTest11, + NULL +}; + +/* Platform test suite (global) */ +SDLTest_TestSuiteReference platformTestSuite = { + "Platform", + NULL, + platformTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_rect.c b/Engine/lib/sdl/test/testautomation_rect.c new file mode 100644 index 0000000000..abf19f593d --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_rect.c @@ -0,0 +1,1696 @@ +/** + * Original code: automated SDL rect test written by Edgar Simo "bobbens" + * New/updated tests: aschiffler at ferzkopp dot net + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +/* Helper functions */ + +/* ! + * \brief Private helper to check SDL_IntersectRectAndLine results + */ +void _validateIntersectRectAndLineResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rect, SDL_Rect * refRect, + int x1, int y1, int x2, int y2, + int x1Ref, int y1Ref, int x2Ref, int y2Ref) +{ + SDLTest_AssertCheck(intersection == expectedIntersection, + "Check for correct intersection result: expected %s, got %s intersecting rect (%d,%d,%d,%d) with line (%d,%d - %d,%d)", + (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + refRect->x, refRect->y, refRect->w, refRect->h, + x1Ref, y1Ref, x2Ref, y2Ref); + SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, + "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rect->x, rect->y, rect->w, rect->h, + refRect->x, refRect->y, refRect->w, refRect->h); + SDLTest_AssertCheck(x1 == x1Ref && y1 == y1Ref && x2 == x2Ref && y2 == y2Ref, + "Check if line was incorrectly clipped or modified: got (%d,%d - %d,%d) expected (%d,%d - %d,%d)", + x1, y1, x2, y2, + x1Ref, y1Ref, x2Ref, y2Ref); +} + +/* Test case functions */ + +/* ! + * \brief Tests SDL_IntersectRectAndLine() clipping cases + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLine (void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); + int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); + int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); + int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); + + x1 = xLeft; + y1 = 15; + x2 = xRight; + y2 = 15; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 15, 31, 15); + + x1 = 15; + y1 = yTop; + x2 = 15; + y2 = yBottom; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 15, 0, 15, 31); + + x1 = -refRect.w; + y1 = -refRect.h; + x2 = 2*refRect.w; + y2 = 2*refRect.h; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 0, 31, 31); + + x1 = 2*refRect.w; + y1 = 2*refRect.h; + x2 = -refRect.w; + y2 = -refRect.h; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 31, 0, 0); + + x1 = -1; + y1 = 32; + x2 = 32; + y2 = -1; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 31, 31, 0); + + x1 = 32; + y1 = -1; + x2 = -1; + y2 = 32; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 0, 0, 31); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRectAndLine() non-clipping case line inside + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineInside (void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xmin = refRect.x; + int xmax = refRect.x + refRect.w - 1; + int ymin = refRect.y; + int ymax = refRect.y + refRect.h - 1; + int x1Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); + int y1Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); + int x2Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); + int y2Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); + + x1 = x1Ref; + y1 = y1Ref; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); + + x1 = x1Ref; + y1 = y1Ref; + x2 = xmax; + y2 = ymax; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, xmax, ymax); + + x1 = xmin; + y1 = ymin; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, x2Ref, y2Ref); + + x1 = xmin; + y1 = ymin; + x2 = xmax; + y2 = ymax; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, xmax, ymax); + + x1 = xmin; + y1 = ymax; + x2 = xmax; + y2 = ymin; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymax, xmax, ymin); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRectAndLine() non-clipping cases outside + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineOutside (void *arg) +{ + SDL_Rect refRect = { 0, 0, 32, 32 }; + SDL_Rect rect; + int x1, y1; + int x2, y2; + SDL_bool intersected; + + int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); + int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); + int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); + int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); + + x1 = xLeft; + y1 = 0; + x2 = xLeft; + y2 = 31; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xLeft, 0, xLeft, 31); + + x1 = xRight; + y1 = 0; + x2 = xRight; + y2 = 31; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xRight, 0, xRight, 31); + + x1 = 0; + y1 = yTop; + x2 = 31; + y2 = yTop; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yTop, 31, yTop); + + x1 = 0; + y1 = yBottom; + x2 = 31; + y2 = yBottom; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yBottom, 31, yBottom); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRectAndLine() with empty rectangle + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineEmpty (void *arg) +{ + SDL_Rect refRect; + SDL_Rect rect; + int x1, y1, x1Ref, y1Ref; + int x2, y2, x2Ref, y2Ref; + SDL_bool intersected; + + refRect.x = SDLTest_RandomIntegerInRange(1, 1024); + refRect.y = SDLTest_RandomIntegerInRange(1, 1024); + refRect.w = 0; + refRect.h = 0; + x1Ref = refRect.x; + y1Ref = refRect.y; + x2Ref = SDLTest_RandomIntegerInRange(1, 1024); + y2Ref = SDLTest_RandomIntegerInRange(1, 1024); + + x1 = x1Ref; + y1 = y1Ref; + x2 = x2Ref; + y2 = y2Ref; + rect = refRect; + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_IntersectRectAndLine() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine + */ +int +rect_testIntersectRectAndLineParam (void *arg) +{ + SDL_Rect rect = { 0, 0, 32, 32 }; + int x1 = rect.w / 2; + int y1 = rect.h / 2; + int x2 = x1; + int y2 = 2 * rect.h; + SDL_bool intersected; + + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_TRUE, "Check that intersection result was SDL_TRUE"); + + intersected = SDL_IntersectRectAndLine((SDL_Rect *)NULL, &x1, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, (int *)NULL, &y1, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, &x1, (int *)NULL, &x2, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 3rd parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, (int *)NULL, &y2); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 4th parameter is NULL"); + intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, (int *)NULL); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 5th parameter is NULL"); + intersected = SDL_IntersectRectAndLine((SDL_Rect *)NULL, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL); + SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Private helper to check SDL_HasIntersection results + */ +void _validateHasIntersectionResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) +{ + SDLTest_AssertCheck(intersection == expectedIntersection, + "Check intersection result: expected %s, got %s intersecting A (%d,%d,%d,%d) with B (%d,%d,%d,%d)", + (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h); + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); +} + +/* ! + * \brief Private helper to check SDL_IntersectRect results + */ +void _validateIntersectRectResults( + SDL_bool intersection, SDL_bool expectedIntersection, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, + SDL_Rect *result, SDL_Rect *expectedResult) +{ + _validateHasIntersectionResults(intersection, expectedIntersection, rectA, rectB, refRectA, refRectB); + if (result && expectedResult) { + SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, + "Check that intersection of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h, + result->x, result->y, result->w, result->h, + expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); + } +} + +/* ! + * \brief Private helper to check SDL_UnionRect results + */ +void _validateUnionRectResults( + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, + SDL_Rect *result, SDL_Rect *expectedResult) +{ + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); + SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, + "Check that union of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h, + result->x, result->y, result->w, result->h, + expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); +} + +/* ! + * \brief Private helper to check SDL_RectEmpty results + */ +void _validateRectEmptyResults( + SDL_bool empty, SDL_bool expectedEmpty, + SDL_Rect *rect, SDL_Rect *refRect) +{ + SDLTest_AssertCheck(empty == expectedEmpty, + "Check for correct empty result: expected %s, got %s testing (%d,%d,%d,%d)", + (expectedEmpty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rect->x, rect->y, rect->w, rect->h); + SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, + "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rect->x, rect->y, rect->w, rect->h, + refRect->x, refRect->y, refRect->w, refRect->h); +} + +/* ! + * \brief Private helper to check SDL_RectEquals results + */ +void _validateRectEqualsResults( + SDL_bool equals, SDL_bool expectedEquals, + SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) +{ + SDLTest_AssertCheck(equals == expectedEquals, + "Check for correct equals result: expected %s, got %s testing (%d,%d,%d,%d) and (%d,%d,%d,%d)", + (expectedEquals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (equals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + rectA->x, rectA->y, rectA->w, rectA->h, + rectB->x, rectB->y, rectB->w, rectB->h); + SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, + "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectA->x, rectA->y, rectA->w, rectA->h, + refRectA->x, refRectA->y, refRectA->w, refRectA->h); + SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, + "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)", + rectB->x, rectB->y, rectB->w, rectB->h, + refRectB->x, refRectB->y, refRectB->w, refRectB->h); +} + +/* ! + * \brief Tests SDL_IntersectRect() with B fully inside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectInside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* rectB fully contained in rectA */ + refRectB.x = 0; + refRectB.y = 0; + refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with B fully outside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectOutside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* rectB fully outside of rectA */ + refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); + refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with B partially intersecting A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectPartial (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_Rect expectedResult; + SDL_bool intersection; + + /* rectB partially contained in rectA */ + refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = refRectA.w - refRectB.x; + expectedResult.h = refRectA.h - refRectB.y; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB right edge */ + refRectB.x = rectA.w - 1; + refRectB.y = rectA.y; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = 1; + expectedResult.h = refRectB.h; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB left edge */ + refRectB.x = 1 - rectA.w; + refRectB.y = rectA.y; + refRectB.w = refRectA.w; + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = 0; + expectedResult.y = refRectB.y; + expectedResult.w = 1; + expectedResult.h = refRectB.h; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB bottom edge */ + refRectB.x = rectA.x; + refRectB.y = rectA.h - 1; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = refRectB.y; + expectedResult.w = refRectB.w; + expectedResult.h = 1; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* rectB top edge */ + refRectB.x = rectA.x; + refRectB.y = 1 - rectA.h; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = rectA.h; + rectA = refRectA; + rectB = refRectB; + expectedResult.x = refRectB.x; + expectedResult.y = 0; + expectedResult.w = refRectB.w; + expectedResult.h = 1; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with 1x1 pixel sized rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectPoint (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 1, 1 }; + SDL_Rect refRectB = { 0, 0, 1, 1 }; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + int offsetX, offsetY; + + /* intersecting pixels */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectA); + + /* non-intersecting pixels cases */ + for (offsetX = -1; offsetX <= 1; offsetX++) { + for (offsetY = -1; offsetY <= 1; offsetY++) { + if (offsetX != 0 || offsetY != 0) { + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + refRectB.x += offsetX; + refRectB.y += offsetY; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_IntersectRect() with empty rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectEmpty (void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + SDL_bool empty; + + /* Rect A empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = (SDL_bool)SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + /* Rect B empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = (SDL_bool)SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + /* Rect A and B empty */ + result.w = SDLTest_RandomIntegerInRange(1, 100); + result.h = SDLTest_RandomIntegerInRange(1, 100); + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_IntersectRect(&rectA, &rectB, &result); + _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + empty = (SDL_bool)SDL_RectEmpty(&result); + SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s", (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_IntersectRect() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_IntersectRect + */ +int rect_testIntersectRectParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB; + SDL_Rect result; + SDL_bool intersection; + + /* invalid parameter combinations */ + intersection = SDL_IntersectRect((SDL_Rect *)NULL, &rectB, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersection = SDL_IntersectRect(&rectA, (SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2st parameter is NULL"); + intersection = SDL_IntersectRect(&rectA, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 3st parameter is NULL"); + intersection = SDL_IntersectRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, &result); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameters are NULL"); + intersection = SDL_IntersectRect((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 3rd parameters are NULL "); + intersection = SDL_IntersectRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with B fully inside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionInside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB fully contained in rectA */ + refRectB.x = 0; + refRectB.y = 0; + refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with B fully outside A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionOutside (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB fully outside of rectA */ + refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); + refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with B partially intersecting A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionPartial (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 32, 32 }; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* rectB partially contained in rectA */ + refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); + refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); + refRectB.w = refRectA.w; + refRectB.h = refRectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB right edge */ + refRectB.x = rectA.w - 1; + refRectB.y = rectA.y; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB left edge */ + refRectB.x = 1 - rectA.w; + refRectB.y = rectA.y; + refRectB.w = refRectA.w; + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB bottom edge */ + refRectB.x = rectA.x; + refRectB.y = rectA.h - 1; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* rectB top edge */ + refRectB.x = rectA.x; + refRectB.y = 1 - rectA.h; + refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); + refRectB.h = rectA.h; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with 1x1 pixel sized rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionPoint (void *arg) +{ + SDL_Rect refRectA = { 0, 0, 1, 1 }; + SDL_Rect refRectB = { 0, 0, 1, 1 }; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + int offsetX, offsetY; + + /* intersecting pixels */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); + + /* non-intersecting pixels cases */ + for (offsetX = -1; offsetX <= 1; offsetX++) { + for (offsetY = -1; offsetY <= 1; offsetY++) { + if (offsetX != 0 || offsetY != 0) { + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectB.x = refRectA.x; + refRectB.y = refRectA.y; + refRectB.x += offsetX; + refRectB.y += offsetY; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_HasIntersection() with empty rectangles + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionEmpty (void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* Rect A empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + /* Rect B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + /* Rect A and B empty */ + refRectA.x = SDLTest_RandomIntegerInRange(1, 100); + refRectA.y = SDLTest_RandomIntegerInRange(1, 100); + refRectA.w = SDLTest_RandomIntegerInRange(1, 100); + refRectA.h = SDLTest_RandomIntegerInRange(1, 100); + refRectB = refRectA; + refRectA.w = 0; + refRectA.h = 0; + refRectB.w = 0; + refRectB.h = 0; + rectA = refRectA; + rectB = refRectB; + intersection = SDL_HasIntersection(&rectA, &rectB); + _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_HasIntersection() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_HasIntersection + */ +int rect_testHasIntersectionParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool intersection; + + /* invalid parameter combinations */ + intersection = SDL_HasIntersection((SDL_Rect *)NULL, &rectB); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + intersection = SDL_HasIntersection(&rectA, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2st parameter is NULL"); + intersection = SDL_HasIntersection((SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Test SDL_EnclosePoints() without clipping + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_EnclosePoints + */ +int rect_testEnclosePoints(void *arg) +{ + const int numPoints = 16; + SDL_Point refPoints[16]; + SDL_Point points[16]; + SDL_Rect result; + SDL_bool anyEnclosed; + SDL_bool anyEnclosedNoResult; + SDL_bool expectedEnclosed = SDL_TRUE; + int newx, newy; + int minx = 0, maxx = 0, miny = 0, maxy = 0; + int i; + + /* Create input data, tracking result */ + for (i=0; i maxx) maxx = newx; + if (newy < miny) miny = newy; + if (newy > maxy) maxy = newy; + } + } + + /* Call function and validate - special case: no result requested */ + anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, + "Check expected return value %s, got %s", + (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i=0; i maxx) maxx = newx; + if (newy < miny) miny = newy; + if (newy > maxy) maxy = newy; + } + } + + /* Call function and validate - special case: no result requested */ + anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, + "Check return value %s, got %s", + (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i=0; i=refClip.x) && (newx<(refClip.x + refClip.w)) && + (newy>=refClip.y) && (newy<(refClip.y + refClip.h))) { + if (expectedEnclosed==SDL_FALSE) { + minx = newx; + maxx = newx; + miny = newy; + maxy = newy; + } else { + if (newx < minx) minx = newx; + if (newx > maxx) maxx = newx; + if (newy < miny) miny = newy; + if (newy > maxy) maxy = newy; + } + expectedEnclosed = SDL_TRUE; + } + } + + /* Call function and validate - special case: no result requested */ + clip = refClip; + anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, (SDL_Rect *)NULL); + SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, + "Expected return value %s, got %s", + (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE", + (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE"); + for (i=0; irefRectB.x) ? refRectA.x : refRectB.x; + miny = (refRectA.yrefRectB.y) ? refRectA.y : refRectB.y; + expectedResult.x = minx; + expectedResult.y = miny; + expectedResult.w = maxx - minx + 1; + expectedResult.h = maxy - miny + 1; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + /* Union outside overlap */ + for (dx = -1; dx < 2; dx++) { + for (dy = -1; dy < 2; dy++) { + if ((dx != 0) || (dy != 0)) { + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(256, 512); + refRectA.h=SDLTest_RandomIntegerInRange(256, 512); + refRectB.x=refRectA.x + 1 + dx*2; + refRectB.y=refRectA.y + 1 + dy*2; + refRectB.w=refRectA.w - 2; + refRectB.h=refRectA.h - 2; + expectedResult = refRectA; + if (dx == -1) expectedResult.x--; + if (dy == -1) expectedResult.y--; + if ((dx == 1) || (dx == -1)) expectedResult.w++; + if ((dy == 1) || (dy == -1)) expectedResult.h++; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_UnionRect() where rect A or rect B are empty + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_UnionRect + */ +int rect_testUnionRectEmpty(void *arg) +{ + SDL_Rect refRectA, refRectB; + SDL_Rect rectA, rectB; + SDL_Rect expectedResult; + SDL_Rect result; + + /* A empty */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=0; + refRectA.h=0; + refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w=SDLTest_RandomIntegerInRange(1, 1024); + refRectB.h=SDLTest_RandomIntegerInRange(1, 1024); + expectedResult = refRectB; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* B empty */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(1, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(1, 1024); + refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w=0; + refRectB.h=0; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* A and B empty */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=0; + refRectA.h=0; + refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectB.w=0; + refRectB.h=0; + result.x=0; + result.y=0; + result.w=0; + result.h=0; + expectedResult = result; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_UnionRect() where rect B is inside rect A + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_UnionRect + */ +int rect_testUnionRectInside(void *arg) +{ + SDL_Rect refRectA, refRectB; + SDL_Rect rectA, rectB; + SDL_Rect expectedResult; + SDL_Rect result; + int dx, dy; + + /* Union 1x1 with itself */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=1; + refRectA.h=1; + expectedResult = refRectA; + rectA = refRectA; + SDL_UnionRect(&rectA, &rectA, &result); + _validateUnionRectResults(&rectA, &rectA, &refRectA, &refRectA, &result, &expectedResult); + + /* Union 1x1 somewhere inside */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(256, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(256, 1024); + refRectB.x=refRectA.x + 1 + SDLTest_RandomIntegerInRange(1, refRectA.w - 2); + refRectB.y=refRectA.y + 1 + SDLTest_RandomIntegerInRange(1, refRectA.h - 2); + refRectB.w=1; + refRectB.h=1; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + + /* Union inside with edges modified */ + for (dx = -1; dx < 2; dx++) { + for (dy = -1; dy < 2; dy++) { + if ((dx != 0) || (dy != 0)) { + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(256, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(256, 1024); + refRectB = refRectA; + if (dx == -1) refRectB.x++; + if ((dx == 1) || (dx == -1)) refRectB.w--; + if (dy == -1) refRectB.y++; + if ((dy == 1) || (dy == -1)) refRectB.h--; + expectedResult = refRectA; + rectA = refRectA; + rectB = refRectB; + SDL_UnionRect(&rectA, &rectB, &result); + _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_UnionRect() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_UnionRect + */ +int rect_testUnionRectParam(void *arg) +{ + SDL_Rect rectA, rectB; + SDL_Rect result; + + /* invalid parameter combinations */ + SDL_UnionRect((SDL_Rect *)NULL, &rectB, &result); + SDLTest_AssertPass("Check that function returns when 1st parameter is NULL"); + SDL_UnionRect(&rectA, (SDL_Rect *)NULL, &result); + SDLTest_AssertPass("Check that function returns when 2nd parameter is NULL"); + SDL_UnionRect(&rectA, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 3rd parameter is NULL"); + SDL_UnionRect((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 1st and 3rd parameter are NULL"); + SDL_UnionRect(&rectA, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when 2nd and 3rd parameter are NULL"); + SDL_UnionRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); + SDLTest_AssertPass("Check that function returns when all parameters are NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_RectEmpty() with various inputs + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEmpty + */ +int rect_testRectEmpty(void *arg) +{ + SDL_Rect refRect; + SDL_Rect rect; + SDL_bool expectedResult; + SDL_bool result; + int w, h; + + /* Non-empty case */ + refRect.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.w=SDLTest_RandomIntegerInRange(256, 1024); + refRect.h=SDLTest_RandomIntegerInRange(256, 1024); + expectedResult = SDL_FALSE; + rect = refRect; + result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)&rect); + _validateRectEmptyResults(result, expectedResult, &rect, &refRect); + + /* Empty case */ + for (w=-1; w<2; w++) { + for (h=-1; h<2; h++) { + if ((w != 1) || (h != 1)) { + refRect.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRect.w=w; + refRect.h=h; + expectedResult = SDL_TRUE; + rect = refRect; + result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)&rect); + _validateRectEmptyResults(result, expectedResult, &rect, &refRect); + } + } + } + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_RectEmpty() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEmpty + */ +int rect_testRectEmptyParam(void *arg) +{ + SDL_bool result; + + /* invalid parameter combinations */ + result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)NULL); + SDLTest_AssertCheck(result == SDL_TRUE, "Check that function returns TRUE when 1st parameter is NULL"); + + return TEST_COMPLETED; +} + +/* ! + * \brief Tests SDL_RectEquals() with various inputs + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEquals + */ +int rect_testRectEquals(void *arg) +{ + SDL_Rect refRectA; + SDL_Rect refRectB; + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool expectedResult; + SDL_bool result; + + /* Equals */ + refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + refRectA.w=SDLTest_RandomIntegerInRange(1, 1024); + refRectA.h=SDLTest_RandomIntegerInRange(1, 1024); + refRectB = refRectA; + expectedResult = SDL_TRUE; + rectA = refRectA; + rectB = refRectB; + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)&rectA, (const SDL_Rect *)&rectB); + _validateRectEqualsResults(result, expectedResult, &rectA, &rectB, &refRectA, &refRectB); + + return TEST_COMPLETED; +} + +/* ! + * \brief Negative tests against SDL_RectEquals() with invalid parameters + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RectEquals + */ +int rect_testRectEqualsParam(void *arg) +{ + SDL_Rect rectA; + SDL_Rect rectB; + SDL_bool result; + + /* data setup */ + rectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); + rectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); + rectA.w=SDLTest_RandomIntegerInRange(1, 1024); + rectA.h=SDLTest_RandomIntegerInRange(1, 1024); + rectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); + rectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); + rectB.w=SDLTest_RandomIntegerInRange(1, 1024); + rectB.h=SDLTest_RandomIntegerInRange(1, 1024); + + /* invalid parameter combinations */ + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)NULL, (const SDL_Rect *)&rectB); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL"); + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)&rectA, (const SDL_Rect *)NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL"); + result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)NULL, (const SDL_Rect *)NULL); + SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameter are NULL"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Rect test cases */ + +/* SDL_IntersectRectAndLine */ +static const SDLTest_TestCaseReference rectTest1 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLine,"rect_testIntersectRectAndLine", "Tests SDL_IntersectRectAndLine clipping cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest2 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineInside, "rect_testIntersectRectAndLineInside", "Tests SDL_IntersectRectAndLine with line fully contained in rect", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest3 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineOutside, "rect_testIntersectRectAndLineOutside", "Tests SDL_IntersectRectAndLine with line fully outside of rect", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest4 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineEmpty, "rect_testIntersectRectAndLineEmpty", "Tests SDL_IntersectRectAndLine with empty rectangle ", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest5 = + { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineParam, "rect_testIntersectRectAndLineParam", "Negative tests against SDL_IntersectRectAndLine with invalid parameters", TEST_ENABLED }; + +/* SDL_IntersectRect */ +static const SDLTest_TestCaseReference rectTest6 = + { (SDLTest_TestCaseFp)rect_testIntersectRectInside, "rect_testIntersectRectInside", "Tests SDL_IntersectRect with B fully contained in A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest7 = + { (SDLTest_TestCaseFp)rect_testIntersectRectOutside, "rect_testIntersectRectOutside", "Tests SDL_IntersectRect with B fully outside of A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest8 = + { (SDLTest_TestCaseFp)rect_testIntersectRectPartial, "rect_testIntersectRectPartial", "Tests SDL_IntersectRect with B partially intersecting A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest9 = + { (SDLTest_TestCaseFp)rect_testIntersectRectPoint, "rect_testIntersectRectPoint", "Tests SDL_IntersectRect with 1x1 sized rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest10 = + { (SDLTest_TestCaseFp)rect_testIntersectRectEmpty, "rect_testIntersectRectEmpty", "Tests SDL_IntersectRect with empty rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest11 = + { (SDLTest_TestCaseFp)rect_testIntersectRectParam, "rect_testIntersectRectParam", "Negative tests against SDL_IntersectRect with invalid parameters", TEST_ENABLED }; + +/* SDL_HasIntersection */ +static const SDLTest_TestCaseReference rectTest12 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionInside, "rect_testHasIntersectionInside", "Tests SDL_HasIntersection with B fully contained in A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest13 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionOutside, "rect_testHasIntersectionOutside", "Tests SDL_HasIntersection with B fully outside of A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest14 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionPartial,"rect_testHasIntersectionPartial", "Tests SDL_HasIntersection with B partially intersecting A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest15 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionPoint, "rect_testHasIntersectionPoint", "Tests SDL_HasIntersection with 1x1 sized rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest16 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionEmpty, "rect_testHasIntersectionEmpty", "Tests SDL_HasIntersection with empty rectangles", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest17 = + { (SDLTest_TestCaseFp)rect_testHasIntersectionParam, "rect_testHasIntersectionParam", "Negative tests against SDL_HasIntersection with invalid parameters", TEST_ENABLED }; + +/* SDL_EnclosePoints */ +static const SDLTest_TestCaseReference rectTest18 = + { (SDLTest_TestCaseFp)rect_testEnclosePoints, "rect_testEnclosePoints", "Tests SDL_EnclosePoints without clipping", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest19 = + { (SDLTest_TestCaseFp)rect_testEnclosePointsWithClipping, "rect_testEnclosePointsWithClipping", "Tests SDL_EnclosePoints with clipping", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest20 = + { (SDLTest_TestCaseFp)rect_testEnclosePointsRepeatedInput, "rect_testEnclosePointsRepeatedInput", "Tests SDL_EnclosePoints with repeated input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest21 = + { (SDLTest_TestCaseFp)rect_testEnclosePointsParam, "rect_testEnclosePointsParam", "Negative tests against SDL_EnclosePoints with invalid parameters", TEST_ENABLED }; + +/* SDL_UnionRect */ +static const SDLTest_TestCaseReference rectTest22 = + { (SDLTest_TestCaseFp)rect_testUnionRectInside, "rect_testUnionRectInside", "Tests SDL_UnionRect where rect B is inside rect A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest23 = + { (SDLTest_TestCaseFp)rect_testUnionRectOutside, "rect_testUnionRectOutside", "Tests SDL_UnionRect where rect B is outside rect A", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest24 = + { (SDLTest_TestCaseFp)rect_testUnionRectEmpty, "rect_testUnionRectEmpty", "Tests SDL_UnionRect where rect A or rect B are empty", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest25 = + { (SDLTest_TestCaseFp)rect_testUnionRectParam, "rect_testUnionRectParam", "Negative tests against SDL_UnionRect with invalid parameters", TEST_ENABLED }; + +/* SDL_RectEmpty */ +static const SDLTest_TestCaseReference rectTest26 = + { (SDLTest_TestCaseFp)rect_testRectEmpty, "rect_testRectEmpty", "Tests SDL_RectEmpty with various inputs", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest27 = + { (SDLTest_TestCaseFp)rect_testRectEmptyParam, "rect_testRectEmptyParam", "Negative tests against SDL_RectEmpty with invalid parameters", TEST_ENABLED }; + +/* SDL_RectEquals */ + +static const SDLTest_TestCaseReference rectTest28 = + { (SDLTest_TestCaseFp)rect_testRectEquals, "rect_testRectEquals", "Tests SDL_RectEquals with various inputs", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rectTest29 = + { (SDLTest_TestCaseFp)rect_testRectEqualsParam, "rect_testRectEqualsParam", "Negative tests against SDL_RectEquals with invalid parameters", TEST_ENABLED }; + + +/* ! + * \brief Sequence of Rect test cases; functions that handle simple rectangles including overlaps and merges. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/CategoryRect + */ +static const SDLTest_TestCaseReference *rectTests[] = { + &rectTest1, &rectTest2, &rectTest3, &rectTest4, &rectTest5, &rectTest6, &rectTest7, &rectTest8, &rectTest9, &rectTest10, &rectTest11, &rectTest12, &rectTest13, &rectTest14, + &rectTest15, &rectTest16, &rectTest17, &rectTest18, &rectTest19, &rectTest20, &rectTest21, &rectTest22, &rectTest23, &rectTest24, &rectTest25, &rectTest26, &rectTest27, + &rectTest28, &rectTest29, NULL +}; + + +/* Rect test suite (global) */ +SDLTest_TestSuiteReference rectTestSuite = { + "Rect", + NULL, + rectTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_render.c b/Engine/lib/sdl/test/testautomation_render.c new file mode 100644 index 0000000000..5a1bc9b8c5 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_render.c @@ -0,0 +1,1099 @@ +/** + * Original code: automated SDL platform test written by Edgar Simo "bobbens" + * Extended and extensively updated by aschiffler at ferzkopp dot net + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +#define TESTRENDER_SCREEN_W 80 +#define TESTRENDER_SCREEN_H 60 + +#define RENDER_COMPARE_FORMAT SDL_PIXELFORMAT_ARGB8888 +#define RENDER_COMPARE_AMASK 0xff000000 /**< Alpha bit mask. */ +#define RENDER_COMPARE_RMASK 0x00ff0000 /**< Red bit mask. */ +#define RENDER_COMPARE_GMASK 0x0000ff00 /**< Green bit mask. */ +#define RENDER_COMPARE_BMASK 0x000000ff /**< Blue bit mask. */ + +#define ALLOWABLE_ERROR_OPAQUE 0 +#define ALLOWABLE_ERROR_BLENDED 64 + +/* Test window and renderer */ +SDL_Window *window = NULL; +SDL_Renderer *renderer = NULL; + +/* Prototypes for helper functions */ + +static int _clearScreen (void); +static void _compare(SDL_Surface *reference, int allowable_error); +static int _hasTexAlpha(void); +static int _hasTexColor(void); +static SDL_Texture *_loadTestFace(void); +static int _hasBlendModes(void); +static int _hasDrawColor(void); +static int _isSupported(int code); + +/** + * Create software renderer for tests + */ +void InitCreateRenderer(void *arg) +{ + int posX = 100, posY = 100, width = 320, height = 240; + renderer = NULL; + window = SDL_CreateWindow("render_testCreateRenderer", posX, posY, width, height, 0); + SDLTest_AssertPass("SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check SDL_CreateWindow result"); + if (window == NULL) { + return; + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + SDLTest_AssertPass("SDL_CreateRenderer()"); + SDLTest_AssertCheck(renderer != 0, "Check SDL_CreateRenderer result"); + if (renderer == NULL) { + SDL_DestroyWindow(window); + return; + } +} + +/* + * Destroy renderer for tests + */ +void CleanupDestroyRenderer(void *arg) +{ + if (renderer != NULL) { + SDL_DestroyRenderer(renderer); + renderer = NULL; + SDLTest_AssertPass("SDL_DestroyRenderer()"); + } + + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("SDL_DestroyWindow"); + } +} + + +/** + * @brief Tests call to SDL_GetNumRenderDrivers + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_GetNumRenderDrivers + */ +int +render_testGetNumRenderDrivers(void *arg) +{ + int n; + n = SDL_GetNumRenderDrivers(); + SDLTest_AssertCheck(n >= 1, "Number of renderers >= 1, reported as %i", n); + return TEST_COMPLETED; +} + + +/** + * @brief Tests the SDL primitives for rendering. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_SetRenderDrawColor + * http://wiki.libsdl.org/moin.cgi/SDL_RenderFillRect + * http://wiki.libsdl.org/moin.cgi/SDL_RenderDrawLine + * + */ +int render_testPrimitives (void *arg) +{ + int ret; + int x, y; + SDL_Rect rect; + SDL_Surface *referenceSurface = NULL; + int checkFailCount1; + int checkFailCount2; + + /* Clear surface. */ + _clearScreen(); + + /* Need drawcolor or just skip test. */ + SDLTest_AssertCheck(_hasDrawColor(), "_hasDrawColor"); + + /* Draw a rectangle. */ + rect.x = 40; + rect.y = 0; + rect.w = 40; + rect.h = 80; + + ret = SDL_SetRenderDrawColor(renderer, 13, 73, 200, SDL_ALPHA_OPAQUE ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret); + + ret = SDL_RenderFillRect(renderer, &rect ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret); + + /* Draw a rectangle. */ + rect.x = 10; + rect.y = 10; + rect.w = 60; + rect.h = 40; + ret = SDL_SetRenderDrawColor(renderer, 200, 0, 100, SDL_ALPHA_OPAQUE ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_SetRenderDrawColor, expected: 0, got: %i", ret); + + ret = SDL_RenderFillRect(renderer, &rect ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDL_RenderFillRect, expected: 0, got: %i", ret); + + /* Draw some points like so: + * X.X.X.X.. + * .X.X.X.X. + * X.X.X.X.. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + for (y=0; y<3; y++) { + for (x = y % 2; x + +#include "SDL.h" +#include "SDL_test.h" + +/* ================= Test Case Implementation ================== */ + +const char* RWopsReadTestFilename = "rwops_read"; +const char* RWopsWriteTestFilename = "rwops_write"; +const char* RWopsAlphabetFilename = "rwops_alphabet"; + +static const char RWopsHelloWorldTestString[] = "Hello World!"; +static const char RWopsHelloWorldCompString[] = "Hello World!"; +static const char RWopsAlphabetString[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + +/* Fixture */ + +void +RWopsSetUp(void *arg) +{ + int fileLen; + FILE *handle; + int writtenLen; + int result; + + /* Clean up from previous runs (if any); ignore errors */ + remove(RWopsReadTestFilename); + remove(RWopsWriteTestFilename); + remove(RWopsAlphabetFilename); + + /* Create a test file */ + handle = fopen(RWopsReadTestFilename, "w"); + SDLTest_AssertCheck(handle != NULL, "Verify creation of file '%s' returned non NULL handle", RWopsReadTestFilename); + if (handle == NULL) return; + + /* Write some known text into it */ + fileLen = SDL_strlen(RWopsHelloWorldTestString); + writtenLen = (int)fwrite(RWopsHelloWorldTestString, 1, fileLen, handle); + SDLTest_AssertCheck(fileLen == writtenLen, "Verify number of written bytes, expected %i, got %i", fileLen, writtenLen); + result = fclose(handle); + SDLTest_AssertCheck(result == 0, "Verify result from fclose, expected 0, got %i", result); + + /* Create a second test file */ + handle = fopen(RWopsAlphabetFilename, "w"); + SDLTest_AssertCheck(handle != NULL, "Verify creation of file '%s' returned non NULL handle", RWopsAlphabetFilename); + if (handle == NULL) return; + + /* Write alphabet text into it */ + fileLen = SDL_strlen(RWopsAlphabetString); + writtenLen = (int)fwrite(RWopsAlphabetString, 1, fileLen, handle); + SDLTest_AssertCheck(fileLen == writtenLen, "Verify number of written bytes, expected %i, got %i", fileLen, writtenLen); + result = fclose(handle); + SDLTest_AssertCheck(result == 0, "Verify result from fclose, expected 0, got %i", result); + + SDLTest_AssertPass("Creation of test file completed"); +} + +void +RWopsTearDown(void *arg) +{ + int result; + + /* Remove the created files to clean up; ignore errors for write filename */ + result = remove(RWopsReadTestFilename); + SDLTest_AssertCheck(result == 0, "Verify result from remove(%s), expected 0, got %i", RWopsReadTestFilename, result); + remove(RWopsWriteTestFilename); + result = remove(RWopsAlphabetFilename); + SDLTest_AssertCheck(result == 0, "Verify result from remove(%s), expected 0, got %i", RWopsAlphabetFilename, result); + + SDLTest_AssertPass("Cleanup of test files completed"); +} + +/** + * @brief Makes sure parameters work properly. Local helper function. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWseek + * http://wiki.libsdl.org/moin.cgi/SDL_RWread + */ +void +_testGenericRWopsValidations(SDL_RWops *rw, int write) +{ + char buf[sizeof(RWopsHelloWorldTestString)]; + Sint64 i; + size_t s; + int seekPos = SDLTest_RandomIntegerInRange(4, 8); + + /* Clear buffer */ + SDL_zero(buf); + + /* Set to start. */ + i = SDL_RWseek(rw, 0, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %"SDL_PRIs64, i); + + /* Test write. */ + s = SDL_RWwrite(rw, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1, 1); + SDLTest_AssertPass("Call to SDL_RWwrite succeeded"); + if (write) { + SDLTest_AssertCheck(s == (size_t)1, "Verify result of writing one byte with SDL_RWwrite, expected 1, got %i", s); + } + else { + SDLTest_AssertCheck(s == (size_t)0, "Verify result of writing with SDL_RWwrite, expected: 0, got %i", s); + } + + /* Test seek to random position */ + i = SDL_RWseek( rw, seekPos, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)seekPos, "Verify seek to %i with SDL_RWseek (RW_SEEK_SET), expected %i, got %"SDL_PRIs64, seekPos, seekPos, i); + + /* Test seek back to start */ + i = SDL_RWseek(rw, 0, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %"SDL_PRIs64, i); + + /* Test read */ + s = SDL_RWread( rw, buf, 1, sizeof(RWopsHelloWorldTestString)-1 ); + SDLTest_AssertPass("Call to SDL_RWread succeeded"); + SDLTest_AssertCheck( + s == (size_t)(sizeof(RWopsHelloWorldTestString)-1), + "Verify result from SDL_RWread, expected %i, got %i", + sizeof(RWopsHelloWorldTestString)-1, + s); + SDLTest_AssertCheck( + SDL_memcmp(buf, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1 ) == 0, + "Verify read bytes match expected string, expected '%s', got '%s'", RWopsHelloWorldTestString, buf); + + /* More seek tests. */ + i = SDL_RWseek( rw, -4, RW_SEEK_CUR ); + SDLTest_AssertPass("Call to SDL_RWseek(...,-4,RW_SEEK_CUR) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(sizeof(RWopsHelloWorldTestString)-5), + "Verify seek to -4 with SDL_RWseek (RW_SEEK_CUR), expected %i, got %"SDL_PRIs64, + sizeof(RWopsHelloWorldTestString)-5, + i); + + i = SDL_RWseek( rw, -1, RW_SEEK_END ); + SDLTest_AssertPass("Call to SDL_RWseek(...,-1,RW_SEEK_END) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(sizeof(RWopsHelloWorldTestString)-2), + "Verify seek to -1 with SDL_RWseek (RW_SEEK_END), expected %i, got %"SDL_PRIs64, + sizeof(RWopsHelloWorldTestString)-2, + i); + + /* Invalid whence seek */ + i = SDL_RWseek( rw, 0, 999 ); + SDLTest_AssertPass("Call to SDL_RWseek(...,0,invalid_whence) succeeded"); + SDLTest_AssertCheck( + i == (Sint64)(-1), + "Verify seek with SDL_RWseek (invalid_whence); expected: -1, got %"SDL_PRIs64, + i); +} + +/* ! + * Negative test for SDL_RWFromFile parameters + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * + */ +int +rwops_testParamNegative (void) +{ + SDL_RWops *rwops; + + /* These should all fail. */ + rwops = SDL_RWFromFile(NULL, NULL); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, NULL) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, NULL) returns NULL"); + + rwops = SDL_RWFromFile(NULL, "ab+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"ab+\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"ab+\") returns NULL"); + + rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj"); + SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"sldfkjsldkfj\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"sldfkjsldkfj\") returns NULL"); + + rwops = SDL_RWFromFile("something", ""); + SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", \"\") succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", \"\") returns NULL"); + + rwops = SDL_RWFromFile("something", NULL); + SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", NULL) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", NULL) returns NULL"); + + rwops = SDL_RWFromMem((void *)NULL, 10); + SDLTest_AssertPass("Call to SDL_RWFromMem(NULL, 10) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromMem(NULL, 10) returns NULL"); + + rwops = SDL_RWFromMem((void *)RWopsAlphabetString, 0); + SDLTest_AssertPass("Call to SDL_RWFromMem(data, 0) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromMem(data, 0) returns NULL"); + + rwops = SDL_RWFromConstMem((const void *)RWopsAlphabetString, 0); + SDLTest_AssertPass("Call to SDL_RWFromConstMem(data, 0) succeeded"); + SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromConstMem(data, 0) returns NULL"); + + return TEST_COMPLETED; +} + +/** + * @brief Tests opening from memory. + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromMem + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testMem (void) +{ + char mem[sizeof(RWopsHelloWorldTestString)]; + SDL_RWops *rw; + int result; + + /* Clear buffer */ + SDL_zero(mem); + + /* Open */ + rw = SDL_RWFromMem(mem, sizeof(RWopsHelloWorldTestString)-1); + SDLTest_AssertPass("Call to SDL_RWFromMem() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromMem does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ + SDLTest_AssertCheck(rw->type == SDL_RWOPS_MEMORY, "Verify RWops type is SDL_RWOPS_MEMORY; expected: %d, got: %d", SDL_RWOPS_MEMORY, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations(rw, 1); + + /* Close */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests opening from memory. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromConstMem + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testConstMem (void) +{ + SDL_RWops *rw; + int result; + + /* Open handle */ + rw = SDL_RWFromConstMem( RWopsHelloWorldCompString, sizeof(RWopsHelloWorldCompString)-1 ); + SDLTest_AssertPass("Call to SDL_RWFromConstMem() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromConstMem does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ + SDLTest_AssertCheck(rw->type == SDL_RWOPS_MEMORY_RO, "Verify RWops type is SDL_RWOPS_MEMORY_RO; expected: %d, got: %d", SDL_RWOPS_MEMORY_RO, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 0 ); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests reading from file. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testFileRead(void) +{ + SDL_RWops *rw; + int result; + + /* Read test. */ + rw = SDL_RWFromFile(RWopsReadTestFilename, "r"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"r\") succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in read mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ +#if defined(__ANDROID__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE || rw->type == SDL_RWOPS_JNIFILE, + "Verify RWops type is SDL_RWOPS_STDFILE or SDL_RWOPS_JNIFILE; expected: %d|%d, got: %d", SDL_RWOPS_STDFILE, SDL_RWOPS_JNIFILE, rw->type); +#elif defined(__WIN32__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_WINFILE, + "Verify RWops type is SDL_RWOPS_WINFILE; expected: %d, got: %d", SDL_RWOPS_WINFILE, rw->type); +#else + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); +#endif + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 0 ); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Tests writing from file. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + */ +int +rwops_testFileWrite(void) +{ + SDL_RWops *rw; + int result; + + /* Write test. */ + rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\") succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Check type */ +#if defined(__ANDROID__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE || rw->type == SDL_RWOPS_JNIFILE, + "Verify RWops type is SDL_RWOPS_STDFILE or SDL_RWOPS_JNIFILE; expected: %d|%d, got: %d", SDL_RWOPS_STDFILE, SDL_RWOPS_JNIFILE, rw->type); +#elif defined(__WIN32__) + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_WINFILE, + "Verify RWops type is SDL_RWOPS_WINFILE; expected: %d, got: %d", SDL_RWOPS_WINFILE, rw->type); +#else + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); +#endif + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 1 ); + + /* Close handle */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests reading from file handle + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFP + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + * + */ +int +rwops_testFPRead(void) +{ + FILE *fp; + SDL_RWops *rw; + int result; + + /* Run read tests. */ + fp = fopen(RWopsReadTestFilename, "r"); + SDLTest_AssertCheck(fp != NULL, "Verify handle from opening file '%s' in read mode is not NULL", RWopsReadTestFilename); + + /* Bail out if NULL */ + if (fp == NULL) return TEST_ABORTED; + + /* Open */ + rw = SDL_RWFromFP( fp, SDL_TRUE ); + SDLTest_AssertPass("Call to SDL_RWFromFP() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFP in read mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + fclose(fp); + return TEST_ABORTED; + } + + /* Check type */ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 0 ); + + /* Close handle - does fclose() */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests writing to file handle + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFP + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + * + */ +int +rwops_testFPWrite(void) +{ + FILE *fp; + SDL_RWops *rw; + int result; + + /* Run write tests. */ + fp = fopen(RWopsWriteTestFilename, "w+"); + SDLTest_AssertCheck(fp != NULL, "Verify handle from opening file '%s' in write mode is not NULL", RWopsWriteTestFilename); + + /* Bail out if NULL */ + if (fp == NULL) return TEST_ABORTED; + + /* Open */ + rw = SDL_RWFromFP( fp, SDL_TRUE ); + SDLTest_AssertPass("Call to SDL_RWFromFP() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFP in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) { + fclose(fp); + return TEST_ABORTED; + } + + /* Check type */ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_STDFILE, + "Verify RWops type is SDL_RWOPS_STDFILE; expected: %d, got: %d", SDL_RWOPS_STDFILE, rw->type); + + /* Run generic tests */ + _testGenericRWopsValidations( rw, 1 ); + + /* Close handle - does fclose() */ + result = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Tests alloc and free RW context. + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_AllocRW + * \sa http://wiki.libsdl.org/moin.cgi/SDL_FreeRW + */ +int +rwops_testAllocFree (void) +{ + /* Allocate context */ + SDL_RWops *rw = SDL_AllocRW(); + SDLTest_AssertPass("Call to SDL_AllocRW() succeeded"); + SDLTest_AssertCheck(rw != NULL, "Validate result from SDL_AllocRW() is not NULL"); + if (rw==NULL) return TEST_ABORTED; + + /* Check type */ + SDLTest_AssertCheck( + rw->type == SDL_RWOPS_UNKNOWN, + "Verify RWops type is SDL_RWOPS_UNKNOWN; expected: %d, got: %d", SDL_RWOPS_UNKNOWN, rw->type); + + /* Free context again */ + SDL_FreeRW(rw); + SDLTest_AssertPass("Call to SDL_FreeRW() succeeded"); + + return TEST_COMPLETED; +} + +/** + * @brief Compare memory and file reads + * + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromMem + * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + */ +int +rwops_testCompareRWFromMemWithRWFromFile(void) +{ + int slen = 26; + char buffer_file[27]; + char buffer_mem[27]; + size_t rv_file; + size_t rv_mem; + Uint64 sv_file; + Uint64 sv_mem; + SDL_RWops* rwops_file; + SDL_RWops* rwops_mem; + int size; + int result; + + + for (size=5; size<10; size++) + { + /* Terminate buffer */ + buffer_file[slen] = 0; + buffer_mem[slen] = 0; + + /* Read/seek from memory */ + rwops_mem = SDL_RWFromMem((void *)RWopsAlphabetString, slen); + SDLTest_AssertPass("Call to SDL_RWFromMem()"); + rv_mem = SDL_RWread(rwops_mem, buffer_mem, size, 6); + SDLTest_AssertPass("Call to SDL_RWread(mem, size=%d)", size); + sv_mem = SDL_RWseek(rwops_mem, 0, SEEK_END); + SDLTest_AssertPass("Call to SDL_RWseek(mem,SEEK_END)"); + result = SDL_RWclose(rwops_mem); + SDLTest_AssertPass("Call to SDL_RWclose(mem)"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + /* Read/see from file */ + rwops_file = SDL_RWFromFile(RWopsAlphabetFilename, "r"); + SDLTest_AssertPass("Call to SDL_RWFromFile()"); + rv_file = SDL_RWread(rwops_file, buffer_file, size, 6); + SDLTest_AssertPass("Call to SDL_RWread(file, size=%d)", size); + sv_file = SDL_RWseek(rwops_file, 0, SEEK_END); + SDLTest_AssertPass("Call to SDL_RWseek(file,SEEK_END)"); + result = SDL_RWclose(rwops_file); + SDLTest_AssertPass("Call to SDL_RWclose(file)"); + SDLTest_AssertCheck(result == 0, "Verify result value is 0; got: %d", result); + + /* Compare */ + SDLTest_AssertCheck(rv_mem == rv_file, "Verify returned read blocks matches for mem and file reads; got: rv_mem=%d rv_file=%d", rv_mem, rv_file); + SDLTest_AssertCheck(sv_mem == sv_file, "Verify SEEK_END position matches for mem and file seeks; got: sv_mem=%"SDL_PRIu64" sv_file=%"SDL_PRIu64, sv_mem, sv_file); + SDLTest_AssertCheck(buffer_mem[slen] == 0, "Verify mem buffer termination; expected: 0, got: %d", buffer_mem[slen]); + SDLTest_AssertCheck(buffer_file[slen] == 0, "Verify file buffer termination; expected: 0, got: %d", buffer_file[slen]); + SDLTest_AssertCheck( + SDL_strncmp(buffer_mem, RWopsAlphabetString, slen) == 0, + "Verify mem buffer contain alphabet string; expected: %s, got: %s", RWopsAlphabetString, buffer_mem); + SDLTest_AssertCheck( + SDL_strncmp(buffer_file, RWopsAlphabetString, slen) == 0, + "Verify file buffer contain alphabet string; expected: %s, got: %s", RWopsAlphabetString, buffer_file); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests writing and reading from file using endian aware functions. + * + * \sa + * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile + * http://wiki.libsdl.org/moin.cgi/SDL_RWClose + * http://wiki.libsdl.org/moin.cgi/SDL_ReadBE16 + * http://wiki.libsdl.org/moin.cgi/SDL_WriteBE16 + */ +int +rwops_testFileWriteReadEndian(void) +{ + SDL_RWops *rw; + Sint64 result; + int mode; + size_t objectsWritten; + Uint16 BE16value; + Uint32 BE32value; + Uint64 BE64value; + Uint16 LE16value; + Uint32 LE32value; + Uint64 LE64value; + Uint16 BE16test; + Uint32 BE32test; + Uint64 BE64test; + Uint16 LE16test; + Uint32 LE32test; + Uint64 LE64test; + int cresult; + + for (mode = 0; mode < 3; mode++) { + + /* Create test data */ + switch (mode) { + case 0: + SDLTest_Log("All 0 values"); + BE16value = 0; + BE32value = 0; + BE64value = 0; + LE16value = 0; + LE32value = 0; + LE64value = 0; + break; + case 1: + SDLTest_Log("All 1 values"); + BE16value = 1; + BE32value = 1; + BE64value = 1; + LE16value = 1; + LE32value = 1; + LE64value = 1; + break; + case 2: + SDLTest_Log("Random values"); + BE16value = SDLTest_RandomUint16(); + BE32value = SDLTest_RandomUint32(); + BE64value = SDLTest_RandomUint64(); + LE16value = SDLTest_RandomUint16(); + LE32value = SDLTest_RandomUint32(); + LE64value = SDLTest_RandomUint64(); + break; + } + + /* Write test. */ + rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+"); + SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\")"); + SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL"); + + /* Bail out if NULL */ + if (rw == NULL) return TEST_ABORTED; + + /* Write test data */ + objectsWritten = SDL_WriteBE16(rw, BE16value); + SDLTest_AssertPass("Call to SDL_WriteBE16()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteBE32(rw, BE32value); + SDLTest_AssertPass("Call to SDL_WriteBE32()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteBE64(rw, BE64value); + SDLTest_AssertPass("Call to SDL_WriteBE64()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteLE16(rw, LE16value); + SDLTest_AssertPass("Call to SDL_WriteLE16()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteLE32(rw, LE32value); + SDLTest_AssertPass("Call to SDL_WriteLE32()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + objectsWritten = SDL_WriteLE64(rw, LE64value); + SDLTest_AssertPass("Call to SDL_WriteLE64()"); + SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten); + + /* Test seek to start */ + result = SDL_RWseek( rw, 0, RW_SEEK_SET ); + SDLTest_AssertPass("Call to SDL_RWseek succeeded"); + SDLTest_AssertCheck(result == 0, "Verify result from position 0 with SDL_RWseek, expected 0, got %"SDL_PRIs64, result); + + /* Read test data */ + BE16test = SDL_ReadBE16(rw); + SDLTest_AssertPass("Call to SDL_ReadBE16()"); + SDLTest_AssertCheck(BE16test == BE16value, "Validate return value from SDL_ReadBE16, expected: %hu, got: %hu", BE16value, BE16test); + BE32test = SDL_ReadBE32(rw); + SDLTest_AssertPass("Call to SDL_ReadBE32()"); + SDLTest_AssertCheck(BE32test == BE32value, "Validate return value from SDL_ReadBE32, expected: %u, got: %u", BE32value, BE32test); + BE64test = SDL_ReadBE64(rw); + SDLTest_AssertPass("Call to SDL_ReadBE64()"); + SDLTest_AssertCheck(BE64test == BE64value, "Validate return value from SDL_ReadBE64, expected: %"SDL_PRIu64", got: %"SDL_PRIu64, BE64value, BE64test); + LE16test = SDL_ReadLE16(rw); + SDLTest_AssertPass("Call to SDL_ReadLE16()"); + SDLTest_AssertCheck(LE16test == LE16value, "Validate return value from SDL_ReadLE16, expected: %hu, got: %hu", LE16value, LE16test); + LE32test = SDL_ReadLE32(rw); + SDLTest_AssertPass("Call to SDL_ReadLE32()"); + SDLTest_AssertCheck(LE32test == LE32value, "Validate return value from SDL_ReadLE32, expected: %u, got: %u", LE32value, LE32test); + LE64test = SDL_ReadLE64(rw); + SDLTest_AssertPass("Call to SDL_ReadLE64()"); + SDLTest_AssertCheck(LE64test == LE64value, "Validate return value from SDL_ReadLE64, expected: %"SDL_PRIu64", got: %"SDL_PRIu64, LE64value, LE64test); + + /* Close handle */ + cresult = SDL_RWclose(rw); + SDLTest_AssertPass("Call to SDL_RWclose() succeeded"); + SDLTest_AssertCheck(cresult == 0, "Verify result value is 0; got: %d", cresult); + } + + return TEST_COMPLETED; +} + + +/* ================= Test References ================== */ + +/* RWops test cases */ +static const SDLTest_TestCaseReference rwopsTest1 = + { (SDLTest_TestCaseFp)rwops_testParamNegative, "rwops_testParamNegative", "Negative test for SDL_RWFromFile parameters", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest2 = + { (SDLTest_TestCaseFp)rwops_testMem, "rwops_testMem", "Tests opening from memory", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest3 = + { (SDLTest_TestCaseFp)rwops_testConstMem, "rwops_testConstMem", "Tests opening from (const) memory", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest4 = + { (SDLTest_TestCaseFp)rwops_testFileRead, "rwops_testFileRead", "Tests reading from a file", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest5 = + { (SDLTest_TestCaseFp)rwops_testFileWrite, "rwops_testFileWrite", "Test writing to a file", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest6 = + { (SDLTest_TestCaseFp)rwops_testFPRead, "rwops_testFPRead", "Test reading from file pointer", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest7 = + { (SDLTest_TestCaseFp)rwops_testFPWrite, "rwops_testFPWrite", "Test writing to file pointer", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest8 = + { (SDLTest_TestCaseFp)rwops_testAllocFree, "rwops_testAllocFree", "Test alloc and free of RW context", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest9 = + { (SDLTest_TestCaseFp)rwops_testFileWriteReadEndian, "rwops_testFileWriteReadEndian", "Test writing and reading via the Endian aware functions", TEST_ENABLED }; + +static const SDLTest_TestCaseReference rwopsTest10 = + { (SDLTest_TestCaseFp)rwops_testCompareRWFromMemWithRWFromFile, "rwops_testCompareRWFromMemWithRWFromFile", "Compare RWFromMem and RWFromFile RWops for read and seek", TEST_ENABLED }; + +/* Sequence of RWops test cases */ +static const SDLTest_TestCaseReference *rwopsTests[] = { + &rwopsTest1, &rwopsTest2, &rwopsTest3, &rwopsTest4, &rwopsTest5, &rwopsTest6, + &rwopsTest7, &rwopsTest8, &rwopsTest9, &rwopsTest10, NULL +}; + +/* RWops test suite (global) */ +SDLTest_TestSuiteReference rwopsTestSuite = { + "RWops", + RWopsSetUp, + rwopsTests, + RWopsTearDown +}; diff --git a/Engine/lib/sdl/test/testautomation_sdltest.c b/Engine/lib/sdl/test/testautomation_sdltest.c new file mode 100644 index 0000000000..ec1da8a50e --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_sdltest.c @@ -0,0 +1,1315 @@ +/** + * SDL_test test suite + */ + +/* Visual Studio 2008 doesn't have stdint.h */ +#if defined(_MSC_VER) && _MSC_VER <= 1500 +#define UINT8_MAX ~(Uint8)0 +#define UINT16_MAX ~(Uint16)0 +#define UINT32_MAX ~(Uint32)0 +#define UINT64_MAX ~(Uint64)0 +#else +#include +#endif +#include +#include +#include +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* Test case functions */ + +/* Forward declarations for internal harness functions */ +extern char *SDLTest_GenerateRunSeed(const int length); + +/** + * @brief Calls to SDLTest_GenerateRunSeed() + */ +int +sdltest_generateRunSeed(void *arg) +{ + char* result; + int i, l; + + for (i = 1; i <= 10; i += 3) { + result = SDLTest_GenerateRunSeed((const int)i); + SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); + SDLTest_AssertCheck(result != NULL, "Verify returned value is not NULL"); + if (result != NULL) { + l = SDL_strlen(result); + SDLTest_AssertCheck(l == i, "Verify length of returned value is %d, got: %d", i, l); + SDL_free(result); + } + } + + /* Negative cases */ + for (i = -2; i <= 0; i++) { + result = SDLTest_GenerateRunSeed((const int)i); + SDLTest_AssertPass("Call to SDLTest_GenerateRunSeed()"); + SDLTest_AssertCheck(result == NULL, "Verify returned value is not NULL"); + } + + return TEST_COMPLETED; +} + +/** + * @brief Calls to SDLTest_GetFuzzerInvocationCount() + */ +int +sdltest_getFuzzerInvocationCount(void *arg) +{ + Uint8 result; + int fuzzerCount1, fuzzerCount2; + + fuzzerCount1 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount1 >= 0, "Verify returned value, expected: >=0, got: %d", fuzzerCount1); + + result = SDLTest_RandomUint8(); + SDLTest_AssertPass("Call to SDLTest_RandomUint8(), returned %d", result); + + fuzzerCount2 = SDLTest_GetFuzzerInvocationCount(); + SDLTest_AssertPass("Call to SDLTest_GetFuzzerInvocationCount()"); + SDLTest_AssertCheck(fuzzerCount2 > fuzzerCount1, "Verify returned value, expected: >%d, got: %d", fuzzerCount1, fuzzerCount2); + + return TEST_COMPLETED; +} + + +/** + * @brief Calls to random number generators + */ +int +sdltest_randomNumber(void *arg) +{ + Sint64 result; + Uint64 uresult; + double dresult; + Uint64 umax; + Sint64 min, max; + + result = (Sint64)SDLTest_RandomUint8(); + umax = (1 << 8) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint8"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%"SDL_PRIu64"], got: %"SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint8(); + min = 0 - (1 << 7); + max = (1 << 7) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint8"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%"SDL_PRIs64",%"SDL_PRIs64"], got: %"SDL_PRIs64, min, max, result); + + result = (Sint64)SDLTest_RandomUint16(); + umax = (1 << 16) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint16"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%"SDL_PRIu64"], got: %"SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint16(); + min = 0 - (1 << 15); + max = (1 << 15) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint16"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%"SDL_PRIs64",%"SDL_PRIs64"], got: %"SDL_PRIs64, min, max, result); + + result = (Sint64)SDLTest_RandomUint32(); + umax = ((Uint64)1 << 32) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomUint32"); + SDLTest_AssertCheck(result >= 0 && result <= (Sint64)umax, "Verify result value, expected: [0,%"SDL_PRIu64"], got: %"SDL_PRIs64, umax, result); + + result = (Sint64)SDLTest_RandomSint32(); + min = 0 - ((Sint64)1 << 31); + max = ((Sint64)1 << 31) - 1; + SDLTest_AssertPass("Call to SDLTest_RandomSint32"); + SDLTest_AssertCheck(result >= min && result <= max, "Verify result value, expected: [%"SDL_PRIs64",%"SDL_PRIs64"], got: %"SDL_PRIs64, min, max, result); + + uresult = SDLTest_RandomUint64(); + SDLTest_AssertPass("Call to SDLTest_RandomUint64"); + + result = SDLTest_RandomSint64(); + SDLTest_AssertPass("Call to SDLTest_RandomSint64"); + + dresult = (double)SDLTest_RandomUnitFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitFloat"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = (double)SDLTest_RandomFloat(); + SDLTest_AssertPass("Call to SDLTest_RandomFloat"); + SDLTest_AssertCheck(dresult >= (double)(-FLT_MAX) && dresult <= (double)FLT_MAX, "Verify result value, expected: [%e,%e], got: %e", (double)(-FLT_MAX), (double)FLT_MAX, dresult); + + dresult = (double)SDLTest_RandomUnitDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomUnitDouble"); + SDLTest_AssertCheck(dresult >= 0.0 && dresult < 1.0, "Verify result value, expected: [0.0,1.0[, got: %e", dresult); + + dresult = SDLTest_RandomDouble(); + SDLTest_AssertPass("Call to SDLTest_RandomDouble"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint8 + */ +int +sdltest_randomBoundaryNumberUint8(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(1, 255, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,255,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfe, SDL_FALSE) returns 0xff (no error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 254, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xff, + "Validate result value for parameters (0,254,SDL_FALSE); expected: 0xff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint8BoundaryValue(0, 255, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint8BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,255,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint16 + */ +int +sdltest_randomBoundaryNumberUint16(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(1, 0xffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffe, SDL_FALSE) returns 0xffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 0xfffe, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xffff, + "Validate result value for parameters (0,0xfffe,SDL_FALSE); expected: 0xffff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint16BoundaryValue(0, 0xffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint16BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint32 + */ +int +sdltest_randomBoundaryNumberUint32(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffffffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(1, 0xffffffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffffffe, SDL_FALSE) returns 0xffffffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 0xfffffffe, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0xffffffff, + "Validate result value for parameters (0,0xfffffffe,SDL_FALSE); expected: 0xffffffff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffffffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint32BoundaryValue(0, 0xffffffff, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint32BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Uint64 + */ +int +sdltest_randomBoundaryNumberUint64(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Uint64 uresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomUintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 12 || uresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 10 || uresult == 11 || uresult == 19 || uresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0 || uresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(0, 99, SDL_FALSE) returns 100 */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(0, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 100, + "Validate result value for parameters (0,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, uresult); + + /* RandomUintXBoundaryValue(1, 0xffffffffffffffff, SDL_FALSE) returns 0 (no error) */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(1, (Uint64)0xffffffffffffffffULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters (1,0xffffffffffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xfffffffffffffffe, SDL_FALSE) returns 0xffffffffffffffff (no error) */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(0, (Uint64)0xfffffffffffffffeULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == (Uint64)0xffffffffffffffffULL, + "Validate result value for parameters (0,0xfffffffffffffffe,SDL_FALSE); expected: 0xffffffffffffffff, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomUintXBoundaryValue(0, 0xffffffffffffffff, SDL_FALSE) returns 0 (sets error) */ + uresult = (Uint64)SDLTest_RandomUint64BoundaryValue(0, (Uint64)0xffffffffffffffffULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomUint64BoundaryValue"); + SDLTest_AssertCheck( + uresult == 0, + "Validate result value for parameters(0,0xffffffffffffffff,SDL_FALSE); expected: 0, got: %"SDL_PRIs64, uresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint8 + */ +int +sdltest_randomBoundaryNumberSint8(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SCHAR_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (SCHAR_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SCHAR_MIN + 1, SCHAR_MAX, SDL_FALSE) returns SCHAR_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN + 1, SCHAR_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MIN, + "Validate result value for parameters (SCHAR_MIN + 1,SCHAR_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SCHAR_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SCHAR_MIN, SCHAR_MAX - 1, SDL_FALSE) returns SCHAR_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, SCHAR_MAX -1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MAX, + "Validate result value for parameters (SCHAR_MIN,SCHAR_MAX - 1,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SCHAR_MAX, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SCHAR_MIN, SCHAR_MAX, SDL_FALSE) returns SCHAR_MIN (sets error) */ + sresult = (Sint64)SDLTest_RandomSint8BoundaryValue(SCHAR_MIN, SCHAR_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint8BoundaryValue"); + SDLTest_AssertCheck( + sresult == SCHAR_MIN, + "Validate result value for parameters(SCHAR_MIN,SCHAR_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SCHAR_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint16 + */ +int +sdltest_randomBoundaryNumberSint16(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SHRT_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (SHRT_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(SHRT_MIN + 1, SHRT_MAX, SDL_FALSE) returns SHRT_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN + 1, SHRT_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MIN, + "Validate result value for parameters (SHRT_MIN+1,SHRT_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SHRT_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SHRT_MIN, SHRT_MAX - 1, SDL_FALSE) returns SHRT_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, SHRT_MAX - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MAX, + "Validate result value for parameters (SHRT_MIN,SHRT_MAX - 1,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SHRT_MAX, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(SHRT_MIN, SHRT_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint16BoundaryValue(SHRT_MIN, SHRT_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint16BoundaryValue"); + SDLTest_AssertCheck( + sresult == SHRT_MIN, + "Validate result value for parameters(SHRT_MIN,SHRT_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, SHRT_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint32 + */ +int +sdltest_randomBoundaryNumberSint32(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; +#if ((ULONG_MAX) == (UINT_MAX)) + Sint32 long_min = LONG_MIN; + Sint32 long_max = LONG_MAX; +#else + Sint32 long_min = INT_MIN; + Sint32 long_max = INT_MAX; +#endif + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LONG_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (LONG_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LONG_MIN + 1, LONG_MAX, SDL_FALSE) returns LONG_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min + 1, long_max, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_min, + "Validate result value for parameters (LONG_MIN+1,LONG_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, long_min, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LONG_MIN, LONG_MAX - 1, SDL_FALSE) returns LONG_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, long_max - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_max, + "Validate result value for parameters (LONG_MIN,LONG_MAX - 1,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, long_max, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LONG_MIN, LONG_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint32BoundaryValue(long_min, long_max, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint32BoundaryValue"); + SDLTest_AssertCheck( + sresult == long_min, + "Validate result value for parameters(LONG_MIN,LONG_MAX,SDL_FALSE); expected: %d, got: %"SDL_PRIs64, long_min, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/* + * @brief Calls to random boundary number generators for Sint64 + */ +int +sdltest_randomBoundaryNumberSint64(void *arg) +{ + const char *expectedError = "That operation is not supported"; + char *lastError; + Sint64 sresult; + + /* Clean error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + /* RandomSintXBoundaryValue(10, 10, SDL_TRUE) returns 10 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10, + "Validate result value for parameters (10,10,SDL_TRUE); expected: 10, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 11, SDL_TRUE) returns 10, 11 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 11, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11, + "Validate result value for parameters (10,11,SDL_TRUE); expected: 10|11, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 12, SDL_TRUE) returns 10, 11, 12 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 12, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12, + "Validate result value for parameters (10,12,SDL_TRUE); expected: 10|11|12, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 13, SDL_TRUE) returns 10, 11, 12, 13 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 13, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 12 || sresult == 13, + "Validate result value for parameters (10,13,SDL_TRUE); expected: 10|11|12|13, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(10, 20, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (10,20,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(20, 10, SDL_TRUE) returns 10, 11, 19 or 20 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(20, 10, SDL_TRUE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 10 || sresult == 11 || sresult == 19 || sresult == 20, + "Validate result value for parameters (20,10,SDL_TRUE); expected: 10|11|19|20, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(1, 20, SDL_FALSE) returns 0, 21 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(1, 20, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 0 || sresult == 21, + "Validate result value for parameters (1,20,SDL_FALSE); expected: 0|21, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LLONG_MIN, 99, SDL_FALSE) returns 100 */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN, 99, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == 100, + "Validate result value for parameters (LLONG_MIN,99,SDL_FALSE); expected: 100, got: %"SDL_PRIs64, sresult); + + /* RandomSintXBoundaryValue(LLONG_MIN + 1, LLONG_MAX, SDL_FALSE) returns LLONG_MIN (no error) */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN + 1, LLONG_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == LLONG_MIN, + "Validate result value for parameters (LLONG_MIN+1,LLONG_MAX,SDL_FALSE); expected: %"SDL_PRIs64", got: %"SDL_PRIs64, LLONG_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LLONG_MIN, LLONG_MAX - 1, SDL_FALSE) returns LLONG_MAX (no error) */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN, LLONG_MAX - 1, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == LLONG_MAX, + "Validate result value for parameters (LLONG_MIN,LLONG_MAX - 1,SDL_FALSE); expected: %"SDL_PRIs64", got: %"SDL_PRIs64, LLONG_MAX, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError == NULL || lastError[0] == '\0', "Validate no error message was set"); + + /* RandomSintXBoundaryValue(LLONG_MIN, LLONG_MAX, SDL_FALSE) returns 0 (sets error) */ + sresult = (Sint64)SDLTest_RandomSint64BoundaryValue(LLONG_MIN, LLONG_MAX, SDL_FALSE); + SDLTest_AssertPass("Call to SDLTest_RandomSint64BoundaryValue"); + SDLTest_AssertCheck( + sresult == LLONG_MIN, + "Validate result value for parameters(LLONG_MIN,LLONG_MAX,SDL_FALSE); expected: %"SDL_PRIs64", got: %"SDL_PRIs64, LLONG_MIN, sresult); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL && SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + + /* Clear error messages */ + SDL_ClearError(); + SDLTest_AssertPass("SDL_ClearError()"); + + return TEST_COMPLETED; +} + +/** + * @brief Calls to SDLTest_RandomIntegerInRange + */ +int +sdltest_randomIntegerInRange(void *arg) +{ + Sint32 min, max; + Sint32 result; +#if ((ULONG_MAX) == (UINT_MAX)) + Sint32 long_min = LONG_MIN; + Sint32 long_max = LONG_MAX; +#else + Sint32 long_min = INT_MIN; + Sint32 long_max = INT_MAX; +#endif + + /* Standard range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + (Sint32)SDLTest_RandomUint8() + 2; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,max)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* One Range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + 1; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,min+1)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Zero range */ + min = (Sint32)SDLTest_RandomSint16(); + max = min; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(min,min)"); + SDLTest_AssertCheck(min == result, "Validated returned value; expected: %d, got: %d", min, result); + + /* Zero range at zero */ + min = 0; + max = 0; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(0,0)"); + SDLTest_AssertCheck(result == 0, "Validated returned value; expected: 0, got: %d", result); + + /* Swapped min-max */ + min = (Sint32)SDLTest_RandomSint16(); + max = min + (Sint32)SDLTest_RandomUint8() + 2; + result = SDLTest_RandomIntegerInRange(max, min); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(max,min)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Range with min at integer limit */ + min = long_min; + max = long_max + (Sint32)SDLTest_RandomSint16(); + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(SINT32_MIN,...)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Range with max at integer limit */ + min = long_min - (Sint32)SDLTest_RandomSint16();; + max = long_max; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(...,SINT32_MAX)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + /* Full integer range */ + min = long_min; + max = long_max; + result = SDLTest_RandomIntegerInRange(min, max); + SDLTest_AssertPass("Call to SDLTest_RandomIntegerInRange(SINT32_MIN,SINT32_MAX)"); + SDLTest_AssertCheck(min <= result && result <= max, "Validated returned value; expected: [%d,%d], got: %d", min, max, result); + + return TEST_COMPLETED; +} + +/** + * @brief Calls to SDLTest_RandomAsciiString + */ +int +sdltest_randomAsciiString(void *arg) +{ + char* result; + int len; + int nonAsciiCharacters; + int i; + + result = SDLTest_RandomAsciiString(); + SDLTest_AssertPass("Call to SDLTest_RandomAsciiString()"); + SDLTest_AssertCheck(result != NULL, "Validate that result is not NULL"); + if (result != NULL) { + len = SDL_strlen(result); + SDLTest_AssertCheck(len >= 0 && len <= 255, "Validate that result length; expected: len=[1,255], got: %d", len); + nonAsciiCharacters = 0; + for (i=0; i= 0 && len <= targetLen, "Validate that result length; expected: len=[1,%d], got: %d", targetLen, len); + nonAsciiCharacters = 0; + for (i=0; i + +#include "SDL.h" +#include "SDL_test.h" + + +/* Test case functions */ + +/** + * @brief Call to SDL_strlcpy + */ +#undef SDL_strlcpy +int +stdlib_strlcpy(void *arg) +{ + size_t result; + char text[1024]; + const char *expected; + + result = SDL_strlcpy(text, "foo", sizeof(text)); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_strlcpy(text, "foo", 2); + expected = "f"; + SDLTest_AssertPass("Call to SDL_strlcpy(\"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_snprintf + */ +#undef SDL_snprintf +int +stdlib_snprintf(void *arg) +{ + int result; + char text[1024]; + const char *expected; + + result = SDL_snprintf(text, sizeof(text), "%s", "foo"); + expected = "foo"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\")"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, 2, "%s", "foo"); + expected = "f"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%s\", \"foo\") with buffer size 2"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_snprintf(NULL, 0, "%s", "foo"); + SDLTest_AssertCheck(result == 3, "Check result value, expected: 3, got: %d", result); + + result = SDL_snprintf(text, sizeof(text), "%f", 1.0); + expected = "1.000000"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%.f", 1.0); + expected = "1"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%.f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%#.f", 1.0); + expected = "1."; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%#.f\", 1.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%f", 1.0 + 1.0 / 3.0); + expected = "1.333333"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%+f", 1.0 + 1.0 / 3.0); + expected = "+1.333333"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%+f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%.2f", 1.0 + 1.0 / 3.0); + expected = "1.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: %s, got: %s", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%6.2f", 1.0 + 1.0 / 3.0); + expected = " 1.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%6.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, sizeof(text), "%06.2f", 1.0 + 1.0 / 3.0); + expected = "001.33"; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0)"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == SDL_strlen(text), "Check result value, expected: %d, got: %d", SDL_strlen(text), result); + + result = SDL_snprintf(text, 5, "%06.2f", 1.0 + 1.0 / 3.0); + expected = "001."; + SDLTest_AssertPass("Call to SDL_snprintf(\"%%06.2f\", 1.0 + 1.0 / 3.0) with buffer size 5"); + SDLTest_AssertCheck(SDL_strcmp(text, expected) == 0, "Check text, expected: '%s', got: '%s'", expected, text); + SDLTest_AssertCheck(result == 6, "Check result value, expected: 6, got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_getenv and SDL_setenv + */ +int +stdlib_getsetenv(void *arg) +{ + const int nameLen = 16; + char name[17]; + int counter; + int result; + char * value1; + char * value2; + char * expected; + int overwrite; + char * text; + + /* Create a random name. This tests SDL_getenv, since we need to */ + /* make sure the variable is not set yet (it shouldn't). */ + do { + for(counter = 0; counter < nameLen; counter++) { + name[counter] = (char)SDLTest_RandomIntegerInRange(65, 90); + } + name[nameLen] = '\0'; + + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + if (text != NULL) { + SDLTest_Log("Expected: NULL, Got: '%s' (%i)", text, SDL_strlen(text)); + } + } while (text != NULL); + + /* Create random values to set */ + value1 = SDLTest_RandomAsciiStringOfSize(10); + value2 = SDLTest_RandomAsciiStringOfSize(10); + + /* Set value 1 without overwrite */ + overwrite = 0; + expected = value1; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 2 with overwrite */ + overwrite = 1; + expected = value2; + result = SDL_setenv(name, value2, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value2, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 1 without overwrite */ + overwrite = 0; + expected = value2; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Set value 1 without overwrite */ + overwrite = 1; + expected = value1; + result = SDL_setenv(name, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s','%s', %i)", name, value1, overwrite); + SDLTest_AssertCheck(result == 0, "Check result, expected: 0, got: %i", result); + + /* Check value */ + text = SDL_getenv(name); + SDLTest_AssertPass("Call to SDL_getenv('%s')", name); + SDLTest_AssertCheck(text != NULL, "Verify returned text is not NULL"); + if (text != NULL) { + SDLTest_AssertCheck( + SDL_strcmp(text, expected) == 0, + "Verify returned text, expected: %s, got: %s", + expected, + text); + } + + /* Negative cases */ + for (overwrite=0; overwrite <= 1; overwrite++) { + result = SDL_setenv(NULL, value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv(NULL,'%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv("", value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('','%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv("=", value1, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('=','%s', %i)", value1, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + result = SDL_setenv(name, NULL, overwrite); + SDLTest_AssertPass("Call to SDL_setenv('%s', NULL, %i)", name, overwrite); + SDLTest_AssertCheck(result == -1, "Check result, expected: -1, got: %i", result); + } + + /* Clean up */ + SDL_free(value1); + SDL_free(value2); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Standard C routine test cases */ +static const SDLTest_TestCaseReference stdlibTest1 = + { (SDLTest_TestCaseFp)stdlib_strlcpy, "stdlib_strlcpy", "Call to SDL_strlcpy", TEST_ENABLED }; + +static const SDLTest_TestCaseReference stdlibTest2 = + { (SDLTest_TestCaseFp)stdlib_snprintf, "stdlib_snprintf", "Call to SDL_snprintf", TEST_ENABLED }; + +static const SDLTest_TestCaseReference stdlibTest3 = + { (SDLTest_TestCaseFp)stdlib_getsetenv, "stdlib_getsetenv", "Call to SDL_getenv and SDL_setenv", TEST_ENABLED }; + +/* Sequence of Standard C routine test cases */ +static const SDLTest_TestCaseReference *stdlibTests[] = { + &stdlibTest1, &stdlibTest2, &stdlibTest3, NULL +}; + +/* Timer test suite (global) */ +SDLTest_TestSuiteReference stdlibTestSuite = { + "Stdlib", + NULL, + stdlibTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_suites.h b/Engine/lib/sdl/test/testautomation_suites.h new file mode 100644 index 0000000000..b5f921e3da --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_suites.h @@ -0,0 +1,54 @@ +/** + * Reference to all test suites. + * + */ + +#ifndef _testsuites_h +#define _testsuites_h + +#include "SDL_test.h" + +/* Test collections */ +extern SDLTest_TestSuiteReference audioTestSuite; +extern SDLTest_TestSuiteReference clipboardTestSuite; +extern SDLTest_TestSuiteReference eventsTestSuite; +extern SDLTest_TestSuiteReference keyboardTestSuite; +extern SDLTest_TestSuiteReference mainTestSuite; +extern SDLTest_TestSuiteReference mouseTestSuite; +extern SDLTest_TestSuiteReference pixelsTestSuite; +extern SDLTest_TestSuiteReference platformTestSuite; +extern SDLTest_TestSuiteReference rectTestSuite; +extern SDLTest_TestSuiteReference renderTestSuite; +extern SDLTest_TestSuiteReference rwopsTestSuite; +extern SDLTest_TestSuiteReference sdltestTestSuite; +extern SDLTest_TestSuiteReference stdlibTestSuite; +extern SDLTest_TestSuiteReference surfaceTestSuite; +extern SDLTest_TestSuiteReference syswmTestSuite; +extern SDLTest_TestSuiteReference timerTestSuite; +extern SDLTest_TestSuiteReference videoTestSuite; +extern SDLTest_TestSuiteReference hintsTestSuite; + +/* All test suites */ +SDLTest_TestSuiteReference *testSuites[] = { + &audioTestSuite, + &clipboardTestSuite, + &eventsTestSuite, + &keyboardTestSuite, + &mainTestSuite, + &mouseTestSuite, + &pixelsTestSuite, + &platformTestSuite, + &rectTestSuite, + &renderTestSuite, + &rwopsTestSuite, + &sdltestTestSuite, + &stdlibTestSuite, + &surfaceTestSuite, + &syswmTestSuite, + &timerTestSuite, + &videoTestSuite, + &hintsTestSuite, + NULL +}; + +#endif diff --git a/Engine/lib/sdl/test/testautomation_surface.c b/Engine/lib/sdl/test/testautomation_surface.c new file mode 100644 index 0000000000..ca41d4a0cd --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_surface.c @@ -0,0 +1,647 @@ +/** + * Original code: automated SDL surface test written by Edgar Simo "bobbens" + * Adapted/rewritten for test lib by Andreas Schiffler + */ + +/* Supress C4996 VS compiler warnings for unlink() */ +#define _CRT_SECURE_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE + +#include +#ifndef _MSC_VER +#include +#endif +#include + +#include "SDL.h" +#include "SDL_test.h" + +#ifdef __MACOSX__ +#include /* For unlink() */ +#endif + +/* ================= Test Case Implementation ================== */ + +/* Shared test surface */ + +static SDL_Surface *referenceSurface = NULL; +static SDL_Surface *testSurface = NULL; + +/* Helper functions for the test cases */ + +#define TEST_SURFACE_WIDTH testSurface->w +#define TEST_SURFACE_HEIGHT testSurface->h + +/* Fixture */ + +/* Create a 32-bit writable surface for blitting tests */ +void +_surfaceSetUp(void *arg) +{ + int result; + SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + SDL_BlendMode currentBlendMode; + Uint32 rmask, gmask, bmask, amask; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + rmask = 0xff000000; + gmask = 0x00ff0000; + bmask = 0x0000ff00; + amask = 0x000000ff; +#else + rmask = 0x000000ff; + gmask = 0x0000ff00; + bmask = 0x00ff0000; + amask = 0xff000000; +#endif + + referenceSurface = SDLTest_ImageBlit(); /* For size info */ + testSurface = SDL_CreateRGBSurface(SDL_SWSURFACE, referenceSurface->w, referenceSurface->h, 32, rmask, gmask, bmask, amask); + SDLTest_AssertCheck(testSurface != NULL, "Check that testSurface is not NULL"); + if (testSurface != NULL) { + /* Disable blend mode for target surface */ + result = SDL_SetSurfaceBlendMode(testSurface, blendMode); + SDLTest_AssertCheck(result == 0, "Validate result from SDL_SetSurfaceBlendMode, expected: 0, got: %i", result); + result = SDL_GetSurfaceBlendMode(testSurface, ¤tBlendMode); + SDLTest_AssertCheck(result == 0, "Validate result from SDL_GetSurfaceBlendMode, expected: 0, got: %i", result); + SDLTest_AssertCheck(currentBlendMode == blendMode, "Validate blendMode, expected: %i, got: %i", blendMode, currentBlendMode); + } +} + +void +_surfaceTearDown(void *arg) +{ + SDL_FreeSurface(referenceSurface); + referenceSurface = NULL; + SDL_FreeSurface(testSurface); + testSurface = NULL; +} + +/** + * Helper that clears the test surface + */ +void _clearTestSurface() +{ + int ret; + Uint32 color; + + /* Clear surface. */ + color = SDL_MapRGBA( testSurface->format, 0, 0, 0, 0); + SDLTest_AssertPass("Call to SDL_MapRGBA()"); + ret = SDL_FillRect( testSurface, NULL, color); + SDLTest_AssertPass("Call to SDL_FillRect()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_FillRect, expected: 0, got: %i", ret); +} + +/** + * Helper that blits in a specific blend mode, -1 for basic blitting, -2 for color mod, -3 for alpha mod, -4 for mixed blend modes. + */ +void _testBlitBlendMode(int mode) +{ + int ret; + int i, j, ni, nj; + SDL_Surface *face; + SDL_Rect rect; + int nmode; + SDL_BlendMode bmode; + int checkFailCount1; + int checkFailCount2; + int checkFailCount3; + int checkFailCount4; + + /* Check test surface */ + SDLTest_AssertCheck(testSurface != NULL, "Verify testSurface is not NULL"); + if (testSurface == NULL) return; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) return; + + /* Reset alpha modulation */ + ret = SDL_SetSurfaceAlphaMod(face, 255); + SDLTest_AssertPass("Call to SDL_SetSurfaceAlphaMod()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceAlphaMod(), expected: 0, got: %i", ret); + + /* Reset color modulation */ + ret = SDL_SetSurfaceColorMod(face, 255, 255, 255); + SDLTest_AssertPass("Call to SDL_SetSurfaceColorMod()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceColorMod(), expected: 0, got: %i", ret); + + /* Reset color key */ + ret = SDL_SetColorKey(face, SDL_FALSE, 0); + SDLTest_AssertPass("Call to SDL_SetColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetColorKey(), expected: 0, got: %i", ret); + + /* Clear the test surface */ + _clearTestSurface(); + + /* Target rect size */ + rect.w = face->w; + rect.h = face->h; + + /* Steps to take */ + ni = testSurface->w - face->w; + nj = testSurface->h - face->h; + + /* Optionally set blend mode. */ + if (mode >= 0) { + ret = SDL_SetSurfaceBlendMode( face, (SDL_BlendMode)mode ); + SDLTest_AssertPass("Call to SDL_SetSurfaceBlendMode()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetSurfaceBlendMode(..., %i), expected: 0, got: %i", mode, ret); + } + + /* Test blend mode. */ + checkFailCount1 = 0; + checkFailCount2 = 0; + checkFailCount3 = 0; + checkFailCount4 = 0; + for (j=0; j <= nj; j+=4) { + for (i=0; i <= ni; i+=4) { + if (mode == -2) { + /* Set color mod. */ + ret = SDL_SetSurfaceColorMod( face, (255/nj)*j, (255/ni)*i, (255/nj)*j ); + if (ret != 0) checkFailCount2++; + } + else if (mode == -3) { + /* Set alpha mod. */ + ret = SDL_SetSurfaceAlphaMod( face, (255/ni)*i ); + if (ret != 0) checkFailCount3++; + } + else if (mode == -4) { + /* Crazy blending mode magic. */ + nmode = (i/4*j/4) % 4; + if (nmode==0) { + bmode = SDL_BLENDMODE_NONE; + } else if (nmode==1) { + bmode = SDL_BLENDMODE_BLEND; + } else if (nmode==2) { + bmode = SDL_BLENDMODE_ADD; + } else if (nmode==3) { + bmode = SDL_BLENDMODE_MOD; + } + ret = SDL_SetSurfaceBlendMode( face, bmode ); + if (ret != 0) checkFailCount4++; + } + + /* Blitting. */ + rect.x = i; + rect.y = j; + ret = SDL_BlitSurface( face, NULL, testSurface, &rect ); + if (ret != 0) checkFailCount1++; + } + } + SDLTest_AssertCheck(checkFailCount1 == 0, "Validate results from calls to SDL_BlitSurface, expected: 0, got: %i", checkFailCount1); + SDLTest_AssertCheck(checkFailCount2 == 0, "Validate results from calls to SDL_SetSurfaceColorMod, expected: 0, got: %i", checkFailCount2); + SDLTest_AssertCheck(checkFailCount3 == 0, "Validate results from calls to SDL_SetSurfaceAlphaMod, expected: 0, got: %i", checkFailCount3); + SDLTest_AssertCheck(checkFailCount4 == 0, "Validate results from calls to SDL_SetSurfaceBlendMode, expected: 0, got: %i", checkFailCount4); + + /* Clean up */ + SDL_FreeSurface(face); + face = NULL; +} + +/* Helper to check that a file exists */ +void +_AssertFileExist(const char *filename) +{ + struct stat st; + int ret = stat(filename, &st); + + SDLTest_AssertCheck(ret == 0, "Verify file '%s' exists", filename); +} + + +/* Test case functions */ + +/** + * @brief Tests sprite saving and loading + */ +int +surface_testSaveLoadBitmap(void *arg) +{ + int ret; + const char *sampleFilename = "testSaveLoadBitmap.bmp"; + SDL_Surface *face; + SDL_Surface *rface; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) return TEST_ABORTED; + + /* Delete test file; ignore errors */ + unlink(sampleFilename); + + /* Save a surface */ + ret = SDL_SaveBMP(face, sampleFilename); + SDLTest_AssertPass("Call to SDL_SaveBMP()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SaveBMP, expected: 0, got: %i", ret); + _AssertFileExist(sampleFilename); + + /* Load a surface */ + rface = SDL_LoadBMP(sampleFilename); + SDLTest_AssertPass("Call to SDL_LoadBMP()"); + SDLTest_AssertCheck(rface != NULL, "Verify result from SDL_LoadBMP is not NULL"); + if (rface != NULL) { + SDLTest_AssertCheck(face->w == rface->w, "Verify width of loaded surface, expected: %i, got: %i", face->w, rface->w); + SDLTest_AssertCheck(face->h == rface->h, "Verify height of loaded surface, expected: %i, got: %i", face->h, rface->h); + } + + /* Delete test file; ignore errors */ + unlink(sampleFilename); + + /* Clean up */ + SDL_FreeSurface(face); + face = NULL; + SDL_FreeSurface(rface); + rface = NULL; + + return TEST_COMPLETED; +} + +/* ! + * Tests surface conversion. + */ +int +surface_testSurfaceConversion(void *arg) +{ + SDL_Surface *rface = NULL, *face = NULL; + int ret = 0; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) + return TEST_ABORTED; + + /* Set transparent pixel as the pixel at (0,0) */ + if (face->format->palette) { + ret = SDL_SetColorKey(face, SDL_RLEACCEL, *(Uint8 *) face->pixels); + SDLTest_AssertPass("Call to SDL_SetColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetColorKey, expected: 0, got: %i", ret); + } + + /* Convert to 32 bit to compare. */ + rface = SDL_ConvertSurface( face, testSurface->format, 0 ); + SDLTest_AssertPass("Call to SDL_ConvertSurface()"); + SDLTest_AssertCheck(rface != NULL, "Verify result from SDL_ConvertSurface is not NULL"); + + /* Compare surface. */ + ret = SDLTest_CompareSurfaces( rface, face, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(face); + face = NULL; + SDL_FreeSurface(rface); + rface = NULL; + + return TEST_COMPLETED; +} + + +/* ! + * Tests surface conversion across all pixel formats. + */ +int +surface_testCompleteSurfaceConversion(void *arg) +{ + Uint32 pixel_formats[] = { + SDL_PIXELFORMAT_INDEX8, + SDL_PIXELFORMAT_RGB332, + SDL_PIXELFORMAT_RGB444, + SDL_PIXELFORMAT_RGB555, + SDL_PIXELFORMAT_BGR555, + SDL_PIXELFORMAT_ARGB4444, + SDL_PIXELFORMAT_RGBA4444, + SDL_PIXELFORMAT_ABGR4444, + SDL_PIXELFORMAT_BGRA4444, + SDL_PIXELFORMAT_ARGB1555, + SDL_PIXELFORMAT_RGBA5551, + SDL_PIXELFORMAT_ABGR1555, + SDL_PIXELFORMAT_BGRA5551, + SDL_PIXELFORMAT_RGB565, + SDL_PIXELFORMAT_BGR565, + SDL_PIXELFORMAT_RGB24, + SDL_PIXELFORMAT_BGR24, + SDL_PIXELFORMAT_RGB888, + SDL_PIXELFORMAT_RGBX8888, + SDL_PIXELFORMAT_BGR888, + SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ARGB2101010, + }; + SDL_Surface *face = NULL, *cvt1, *cvt2, *final; + SDL_PixelFormat *fmt1, *fmt2; + int i, j, ret = 0; + + /* Create sample surface */ + face = SDLTest_ImageFace(); + SDLTest_AssertCheck(face != NULL, "Verify face surface is not NULL"); + if (face == NULL) + return TEST_ABORTED; + + /* Set transparent pixel as the pixel at (0,0) */ + if (face->format->palette) { + ret = SDL_SetColorKey(face, SDL_RLEACCEL, *(Uint8 *) face->pixels); + SDLTest_AssertPass("Call to SDL_SetColorKey()"); + SDLTest_AssertCheck(ret == 0, "Verify result from SDL_SetColorKey, expected: 0, got: %i", ret); + } + + for ( i = 0; i < SDL_arraysize(pixel_formats); ++i ) { + for ( j = 0; j < SDL_arraysize(pixel_formats); ++j ) { + fmt1 = SDL_AllocFormat(pixel_formats[i]); + SDL_assert(fmt1 != NULL); + cvt1 = SDL_ConvertSurface(face, fmt1, 0); + SDL_assert(cvt1 != NULL); + + fmt2 = SDL_AllocFormat(pixel_formats[j]); + SDL_assert(fmt1 != NULL); + cvt2 = SDL_ConvertSurface(cvt1, fmt2, 0); + SDL_assert(cvt2 != NULL); + + if ( fmt1->BytesPerPixel == face->format->BytesPerPixel && + fmt2->BytesPerPixel == face->format->BytesPerPixel && + (fmt1->Amask != 0) == (face->format->Amask != 0) && + (fmt2->Amask != 0) == (face->format->Amask != 0) ) { + final = SDL_ConvertSurface( cvt2, face->format, 0 ); + SDL_assert(final != NULL); + + /* Compare surface. */ + ret = SDLTest_CompareSurfaces( face, final, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + SDL_FreeSurface(final); + } + + SDL_FreeSurface(cvt1); + SDL_FreeFormat(fmt1); + SDL_FreeSurface(cvt2); + SDL_FreeFormat(fmt2); + } + } + + /* Clean up. */ + SDL_FreeSurface( face ); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests sprite loading. A failure case. + */ +int +surface_testLoadFailure(void *arg) +{ + SDL_Surface *face = SDL_LoadBMP("nonexistant.bmp"); + SDLTest_AssertCheck(face == NULL, "SDL_CreateLoadBmp"); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some blitting routines. + */ +int +surface_testBlit(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting */ + _testBlitBlendMode(-1); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlit(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some blitting routines with color mod + */ +int +surface_testBlitColorMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting with color mod */ + _testBlitBlendMode(-2); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitColor(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some blitting routines with alpha mod + */ +int +surface_testBlitAlphaMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting with alpha mod */ + _testBlitBlendMode(-3); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitAlpha(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendNone(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Basic blitting */ + _testBlitBlendMode(SDL_BLENDMODE_NONE); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendNone(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendBlend(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Blend blitting */ + _testBlitBlendMode(SDL_BLENDMODE_BLEND); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlend(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendAdd(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Add blitting */ + _testBlitBlendMode(SDL_BLENDMODE_ADD); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendAdd(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines. + */ +int +surface_testBlitBlendMod(void *arg) +{ + int ret; + SDL_Surface *compareSurface; + + /* Mod blitting */ + _testBlitBlendMode(SDL_BLENDMODE_MOD); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendMod(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; +} + +/** + * @brief Tests some more blitting routines with loop + */ +int +surface_testBlitBlendLoop(void *arg) { + + int ret; + SDL_Surface *compareSurface; + + /* All blitting modes */ + _testBlitBlendMode(-4); + + /* Verify result by comparing surfaces */ + compareSurface = SDLTest_ImageBlitBlendAll(); + ret = SDLTest_CompareSurfaces( testSurface, compareSurface, 0 ); + SDLTest_AssertCheck(ret == 0, "Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i", ret); + + /* Clean up. */ + SDL_FreeSurface(compareSurface); + + return TEST_COMPLETED; + +} + +/* ================= Test References ================== */ + +/* Surface test cases */ +static const SDLTest_TestCaseReference surfaceTest1 = + { (SDLTest_TestCaseFp)surface_testSaveLoadBitmap, "surface_testSaveLoadBitmap", "Tests sprite saving and loading.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest2 = + { (SDLTest_TestCaseFp)surface_testBlit, "surface_testBlit", "Tests basic blitting.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest3 = + { (SDLTest_TestCaseFp)surface_testBlitBlendNone, "surface_testBlitBlendNone", "Tests blitting routines with none blending mode.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest4 = + { (SDLTest_TestCaseFp)surface_testLoadFailure, "surface_testLoadFailure", "Tests sprite loading. A failure case.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest5 = + { (SDLTest_TestCaseFp)surface_testSurfaceConversion, "surface_testSurfaceConversion", "Tests surface conversion.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest6 = + { (SDLTest_TestCaseFp)surface_testCompleteSurfaceConversion, "surface_testCompleteSurfaceConversion", "Tests surface conversion across all pixel formats", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest7 = + { (SDLTest_TestCaseFp)surface_testBlitColorMod, "surface_testBlitColorMod", "Tests some blitting routines with color mod.", TEST_ENABLED}; + +static const SDLTest_TestCaseReference surfaceTest8 = + { (SDLTest_TestCaseFp)surface_testBlitAlphaMod, "surface_testBlitAlphaMod", "Tests some blitting routines with alpha mod.", TEST_ENABLED}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest9 = + { (SDLTest_TestCaseFp)surface_testBlitBlendLoop, "surface_testBlitBlendLoop", "Test blitting routines with various blending modes", TEST_DISABLED}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest10 = + { (SDLTest_TestCaseFp)surface_testBlitBlendBlend, "surface_testBlitBlendBlend", "Tests blitting routines with blend blending mode.", TEST_DISABLED}; + +/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */ +static const SDLTest_TestCaseReference surfaceTest11 = + { (SDLTest_TestCaseFp)surface_testBlitBlendAdd, "surface_testBlitBlendAdd", "Tests blitting routines with add blending mode.", TEST_DISABLED}; + +static const SDLTest_TestCaseReference surfaceTest12 = + { (SDLTest_TestCaseFp)surface_testBlitBlendMod, "surface_testBlitBlendMod", "Tests blitting routines with mod blending mode.", TEST_ENABLED}; + +/* Sequence of Surface test cases */ +static const SDLTest_TestCaseReference *surfaceTests[] = { + &surfaceTest1, &surfaceTest2, &surfaceTest3, &surfaceTest4, &surfaceTest5, + &surfaceTest6, &surfaceTest7, &surfaceTest8, &surfaceTest9, &surfaceTest10, + &surfaceTest11, &surfaceTest12, NULL +}; + +/* Surface test suite (global) */ +SDLTest_TestSuiteReference surfaceTestSuite = { + "Surface", + _surfaceSetUp, + surfaceTests, + _surfaceTearDown + +}; diff --git a/Engine/lib/sdl/test/testautomation_syswm.c b/Engine/lib/sdl/test/testautomation_syswm.c new file mode 100644 index 0000000000..d9fd982b37 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_syswm.c @@ -0,0 +1,61 @@ +/** + * SysWM test suite + */ + +#include + +#include "SDL.h" +#include "SDL_syswm.h" +#include "SDL_test.h" + +/* Test case functions */ + +/** + * @brief Call to SDL_GetWindowWMInfo + */ +int +syswm_getWindowWMInfo(void *arg) +{ + SDL_bool result; + SDL_Window *window; + SDL_SysWMinfo info; + + window = SDL_CreateWindow("", 0, 0, 0, 0, SDL_WINDOW_HIDDEN); + SDLTest_AssertPass("Call to SDL_CreateWindow()"); + SDLTest_AssertCheck(window != NULL, "Check that value returned from SDL_CreateWindow is not NULL"); + if (window == NULL) { + return TEST_ABORTED; + } + + /* Initialize info structure with SDL version info */ + SDL_VERSION(&info.version); + + /* Make call */ + result = SDL_GetWindowWMInfo(window, &info); + SDLTest_AssertPass("Call to SDL_GetWindowWMInfo()"); + SDLTest_Log((result == SDL_TRUE) ? "Got window information" : "Couldn't get window information"); + + SDL_DestroyWindow(window); + SDLTest_AssertPass("Call to SDL_DestroyWindow()"); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* SysWM test cases */ +static const SDLTest_TestCaseReference syswmTest1 = + { (SDLTest_TestCaseFp)syswm_getWindowWMInfo, "syswm_getWindowWMInfo", "Call to SDL_GetWindowWMInfo", TEST_ENABLED }; + +/* Sequence of SysWM test cases */ +static const SDLTest_TestCaseReference *syswmTests[] = { + &syswmTest1, NULL +}; + +/* SysWM test suite (global) */ +SDLTest_TestSuiteReference syswmTestSuite = { + "SysWM", + NULL, + syswmTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_timer.c b/Engine/lib/sdl/test/testautomation_timer.c new file mode 100644 index 0000000000..6d73856ee2 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_timer.c @@ -0,0 +1,201 @@ +/** + * Timer test suite + */ + +#include + +#include "SDL.h" +#include "SDL_test.h" + +/* Flag indicating if the param should be checked */ +int _paramCheck = 0; + +/* Userdata value to check */ +int _paramValue = 0; + +/* Flag indicating that the callback was called */ +int _timerCallbackCalled = 0; + +/* Fixture */ + +void +_timerSetUp(void *arg) +{ + /* Start SDL timer subsystem */ + int ret = SDL_InitSubSystem( SDL_INIT_TIMER ); + SDLTest_AssertPass("Call to SDL_InitSubSystem(SDL_INIT_TIMER)"); + SDLTest_AssertCheck(ret==0, "Check result from SDL_InitSubSystem(SDL_INIT_TIMER)"); + if (ret != 0) { + SDLTest_LogError("%s", SDL_GetError()); + } +} + +/* Test case functions */ + +/** + * @brief Call to SDL_GetPerformanceCounter + */ +int +timer_getPerformanceCounter(void *arg) +{ + Uint64 result; + + result = SDL_GetPerformanceCounter(); + SDLTest_AssertPass("Call to SDL_GetPerformanceCounter()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %"SDL_PRIu64, result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_GetPerformanceFrequency + */ +int +timer_getPerformanceFrequency(void *arg) +{ + Uint64 result; + + result = SDL_GetPerformanceFrequency(); + SDLTest_AssertPass("Call to SDL_GetPerformanceFrequency()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %"SDL_PRIu64, result); + + return TEST_COMPLETED; +} + +/** + * @brief Call to SDL_Delay and SDL_GetTicks + */ +int +timer_delayAndGetTicks(void *arg) +{ + const Uint32 testDelay = 100; + const Uint32 marginOfError = 25; + Uint32 result; + Uint32 result2; + Uint32 difference; + + /* Zero delay */ + SDL_Delay(0); + SDLTest_AssertPass("Call to SDL_Delay(0)"); + + /* Non-zero delay */ + SDL_Delay(1); + SDLTest_AssertPass("Call to SDL_Delay(1)"); + + SDL_Delay(SDLTest_RandomIntegerInRange(5, 15)); + SDLTest_AssertPass("Call to SDL_Delay()"); + + /* Get ticks count - should be non-zero by now */ + result = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result > 0, "Check result value, expected: >0, got: %d", result); + + /* Delay a bit longer and measure ticks and verify difference */ + SDL_Delay(testDelay); + SDLTest_AssertPass("Call to SDL_Delay(%d)", testDelay); + result2 = SDL_GetTicks(); + SDLTest_AssertPass("Call to SDL_GetTicks()"); + SDLTest_AssertCheck(result2 > 0, "Check result value, expected: >0, got: %d", result2); + difference = result2 - result; + SDLTest_AssertCheck(difference > (testDelay - marginOfError), "Check difference, expected: >%d, got: %d", testDelay - marginOfError, difference); + SDLTest_AssertCheck(difference < (testDelay + marginOfError), "Check difference, expected: <%d, got: %d", testDelay + marginOfError, difference); + + return TEST_COMPLETED; +} + +/* Test callback */ +Uint32 _timerTestCallback(Uint32 interval, void *param) +{ + _timerCallbackCalled = 1; + + if (_paramCheck != 0) { + SDLTest_AssertCheck(param != NULL, "Check param pointer, expected: non-NULL, got: %s", (param != NULL) ? "non-NULL" : "NULL"); + if (param != NULL) { + SDLTest_AssertCheck(*(int *)param == _paramValue, "Check param value, expected: %i, got: %i", _paramValue, *(int *)param); + } + } + + return 0; +} + +/** + * @brief Call to SDL_AddTimer and SDL_RemoveTimer + */ +int +timer_addRemoveTimer(void *arg) +{ + SDL_TimerID id; + SDL_bool result; + int param; + + /* Reset state */ + _paramCheck = 0; + _timerCallbackCalled = 0; + + /* Set timer with a long delay */ + id = SDL_AddTimer(10000, _timerTestCallback, NULL); + SDLTest_AssertPass("Call to SDL_AddTimer(10000,...)"); + SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); + + /* Remove timer again and check that callback was not called */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Check result value, expected: %i, got: %i", SDL_TRUE, result); + SDLTest_AssertCheck(_timerCallbackCalled == 0, "Check callback WAS NOT called, expected: 0, got: %i", _timerCallbackCalled); + + /* Try to remove timer again (should be a NOOP) */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); + + /* Reset state */ + param = SDLTest_RandomIntegerInRange(-1024, 1024); + _paramCheck = 1; + _paramValue = param; + _timerCallbackCalled = 0; + + /* Set timer with a short delay */ + id = SDL_AddTimer(10, _timerTestCallback, (void *)¶m); + SDLTest_AssertPass("Call to SDL_AddTimer(10, param)"); + SDLTest_AssertCheck(id > 0, "Check result value, expected: >0, got: %d", id); + + /* Wait to let timer trigger callback */ + SDL_Delay(100); + SDLTest_AssertPass("Call to SDL_Delay(100)"); + + /* Remove timer again and check that callback was called */ + result = SDL_RemoveTimer(id); + SDLTest_AssertPass("Call to SDL_RemoveTimer()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Check result value, expected: %i, got: %i", SDL_FALSE, result); + SDLTest_AssertCheck(_timerCallbackCalled == 1, "Check callback WAS called, expected: 1, got: %i", _timerCallbackCalled); + + return TEST_COMPLETED; +} + +/* ================= Test References ================== */ + +/* Timer test cases */ +static const SDLTest_TestCaseReference timerTest1 = + { (SDLTest_TestCaseFp)timer_getPerformanceCounter, "timer_getPerformanceCounter", "Call to SDL_GetPerformanceCounter", TEST_ENABLED }; + +static const SDLTest_TestCaseReference timerTest2 = + { (SDLTest_TestCaseFp)timer_getPerformanceFrequency, "timer_getPerformanceFrequency", "Call to SDL_GetPerformanceFrequency", TEST_ENABLED }; + +static const SDLTest_TestCaseReference timerTest3 = + { (SDLTest_TestCaseFp)timer_delayAndGetTicks, "timer_delayAndGetTicks", "Call to SDL_Delay and SDL_GetTicks", TEST_ENABLED }; + +static const SDLTest_TestCaseReference timerTest4 = + { (SDLTest_TestCaseFp)timer_addRemoveTimer, "timer_addRemoveTimer", "Call to SDL_AddTimer and SDL_RemoveTimer", TEST_ENABLED }; + +/* Sequence of Timer test cases */ +static const SDLTest_TestCaseReference *timerTests[] = { + &timerTest1, &timerTest2, &timerTest3, &timerTest4, NULL +}; + +/* Timer test suite (global) */ +SDLTest_TestSuiteReference timerTestSuite = { + "Timer", + _timerSetUp, + timerTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testautomation_video.c b/Engine/lib/sdl/test/testautomation_video.c new file mode 100644 index 0000000000..7b86cfba90 --- /dev/null +++ b/Engine/lib/sdl/test/testautomation_video.c @@ -0,0 +1,1811 @@ +/** + * Video test suite + */ + +#include +#include + +/* Visual Studio 2008 doesn't have stdint.h */ +#if defined(_MSC_VER) && _MSC_VER <= 1500 +#define UINT8_MAX ~(Uint8)0 +#define UINT16_MAX ~(Uint16)0 +#define UINT32_MAX ~(Uint32)0 +#define UINT64_MAX ~(Uint64)0 +#else +#include +#endif + +#include "SDL.h" +#include "SDL_test.h" + +/* Private helpers */ + +/* + * Create a test window + */ +SDL_Window *_createVideoSuiteTestWindow(const char *title) +{ + SDL_Window* window; + int x, y, w, h; + SDL_WindowFlags flags; + + /* Standard window */ + x = SDLTest_RandomIntegerInRange(1, 100); + y = SDLTest_RandomIntegerInRange(1, 100); + w = SDLTest_RandomIntegerInRange(320, 1024); + h = SDLTest_RandomIntegerInRange(320, 768); + flags = SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + + window = SDL_CreateWindow(title, x, y, w, h, flags); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + return window; +} + +/* + * Destroy test window + */ +void _destroyVideoSuiteTestWindow(SDL_Window *window) +{ + if (window != NULL) { + SDL_DestroyWindow(window); + window = NULL; + SDLTest_AssertPass("Call to SDL_DestroyWindow()"); + } +} + +/* Test case functions */ + +/** + * @brief Enable and disable screensaver while checking state + */ +int +video_enableDisableScreensaver(void *arg) +{ + SDL_bool initialResult; + SDL_bool result; + + /* Get current state and proceed according to current state */ + initialResult = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + if (initialResult == SDL_TRUE) { + + /* Currently enabled: disable first, then enable again */ + + /* Disable screensaver and check */ + SDL_DisableScreenSaver(); + SDLTest_AssertPass("Call to SDL_DisableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_FALSE, result); + + /* Enable screensaver and check */ + SDL_EnableScreenSaver(); + SDLTest_AssertPass("Call to SDL_EnableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_TRUE, result); + + } else { + + /* Currently disabled: enable first, then disable again */ + + /* Enable screensaver and check */ + SDL_EnableScreenSaver(); + SDLTest_AssertPass("Call to SDL_EnableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_TRUE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_TRUE, result); + + /* Disable screensaver and check */ + SDL_DisableScreenSaver(); + SDLTest_AssertPass("Call to SDL_DisableScreenSaver()"); + result = SDL_IsScreenSaverEnabled(); + SDLTest_AssertPass("Call to SDL_IsScreenSaverEnabled()"); + SDLTest_AssertCheck(result == SDL_FALSE, "Verify result from SDL_IsScreenSaverEnabled, expected: %i, got: %i", SDL_FALSE, result); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_CreateWindow function using different positions + */ +int +video_createWindowVariousPositions(void *arg) +{ + SDL_Window* window; + const char* title = "video_createWindowVariousPositions Test Window"; + int x, y, w, h; + int xVariation, yVariation; + + for (xVariation = 0; xVariation < 6; xVariation++) { + for (yVariation = 0; yVariation < 6; yVariation++) { + switch(xVariation) { + case 0: + /* Zero X Position */ + x = 0; + break; + case 1: + /* Random X position inside screen */ + x = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + x = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random X position outside screen (negative) */ + x = SDLTest_RandomIntegerInRange(-1000, -100); + break; + case 4: + /* Centered X position */ + x = SDL_WINDOWPOS_CENTERED; + break; + case 5: + /* Undefined X position */ + x = SDL_WINDOWPOS_UNDEFINED; + break; + } + + switch(yVariation) { + case 0: + /* Zero X Position */ + y = 0; + break; + case 1: + /* Random X position inside screen */ + y = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + y = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random Y position outside screen (negative) */ + y = SDLTest_RandomIntegerInRange(-1000, -100); + break; + case 4: + /* Centered Y position */ + y = SDL_WINDOWPOS_CENTERED; + break; + case 5: + /* Undefined Y position */ + y = SDL_WINDOWPOS_UNDEFINED; + break; + } + + w = SDLTest_RandomIntegerInRange(32, 96); + h = SDLTest_RandomIntegerInRange(32, 96); + window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + } + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_CreateWindow function using different sizes + */ +int +video_createWindowVariousSizes(void *arg) +{ + SDL_Window* window; + const char* title = "video_createWindowVariousSizes Test Window"; + int x, y, w, h; + int wVariation, hVariation; + + x = SDLTest_RandomIntegerInRange(1, 100); + y = SDLTest_RandomIntegerInRange(1, 100); + for (wVariation = 0; wVariation < 3; wVariation++) { + for (hVariation = 0; hVariation < 3; hVariation++) { + switch(wVariation) { + case 0: + /* Width of 1 */ + w = 1; + break; + case 1: + /* Random "normal" width */ + w = SDLTest_RandomIntegerInRange(320, 1920); + break; + case 2: + /* Random "large" width */ + w = SDLTest_RandomIntegerInRange(2048, 4095); + break; + } + + switch(hVariation) { + case 0: + /* Height of 1 */ + h = 1; + break; + case 1: + /* Random "normal" height */ + h = SDLTest_RandomIntegerInRange(320, 1080); + break; + case 2: + /* Random "large" height */ + h = SDLTest_RandomIntegerInRange(2048, 4095); + break; + } + + window = SDL_CreateWindow(title, x, y, w, h, SDL_WINDOW_SHOWN); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,SHOWN)", x, y, w, h); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + } + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_CreateWindow function using different flags + */ +int +video_createWindowVariousFlags(void *arg) +{ + SDL_Window* window; + const char* title = "video_createWindowVariousFlags Test Window"; + int x, y, w, h; + int fVariation; + SDL_WindowFlags flags; + + /* Standard window */ + x = SDLTest_RandomIntegerInRange(1, 100); + y = SDLTest_RandomIntegerInRange(1, 100); + w = SDLTest_RandomIntegerInRange(320, 1024); + h = SDLTest_RandomIntegerInRange(320, 768); + + for (fVariation = 0; fVariation < 13; fVariation++) { + switch(fVariation) { + case 0: + flags = SDL_WINDOW_FULLSCREEN; + /* Skip - blanks screen; comment out next line to run test */ + continue; + break; + case 1: + flags = SDL_WINDOW_FULLSCREEN_DESKTOP; + /* Skip - blanks screen; comment out next line to run test */ + continue; + break; + case 2: + flags = SDL_WINDOW_OPENGL; + break; + case 3: + flags = SDL_WINDOW_SHOWN; + break; + case 4: + flags = SDL_WINDOW_HIDDEN; + break; + case 5: + flags = SDL_WINDOW_BORDERLESS; + break; + case 6: + flags = SDL_WINDOW_RESIZABLE; + break; + case 7: + flags = SDL_WINDOW_MINIMIZED; + break; + case 8: + flags = SDL_WINDOW_MAXIMIZED; + break; + case 9: + flags = SDL_WINDOW_INPUT_GRABBED; + break; + case 10: + flags = SDL_WINDOW_INPUT_FOCUS; + break; + case 11: + flags = SDL_WINDOW_MOUSE_FOCUS; + break; + case 12: + flags = SDL_WINDOW_FOREIGN; + break; + } + + window = SDL_CreateWindow(title, x, y, w, h, flags); + SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%d,%d,%d)", x, y, w, h, flags); + SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + } + + return TEST_COMPLETED; +} + + +/** + * @brief Tests the functionality of the SDL_GetWindowFlags function + */ +int +video_getWindowFlags(void *arg) +{ + SDL_Window* window; + const char* title = "video_getWindowFlags Test Window"; + SDL_WindowFlags flags; + Uint32 actualFlags; + + /* Reliable flag set always set in test window */ + flags = SDL_WINDOW_SHOWN; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window != NULL) { + actualFlags = SDL_GetWindowFlags(window); + SDLTest_AssertPass("Call to SDL_GetWindowFlags()"); + SDLTest_AssertCheck((flags & actualFlags) == flags, "Verify returned value has flags %d set, got: %d", flags, actualFlags); + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_GetNumDisplayModes function + */ +int +video_getNumDisplayModes(void *arg) +{ + int result; + int displayNum; + int i; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Make call for each display */ + for (i=0; i= 1, "Validate returned value from function; expected: >=1; got: %d", result); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests negative call to SDL_GetNumDisplayModes function + */ +int +video_getNumDisplayModesNegative(void *arg) +{ + int result; + int displayNum; + int displayIndex; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Invalid boundary values */ + displayIndex = SDLTest_RandomSint32BoundaryValue(0, displayNum, SDL_FALSE); + result = SDL_GetNumDisplayModes(displayIndex); + SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/boundary)", displayIndex); + SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result); + + /* Large (out-of-bounds) display index */ + displayIndex = SDLTest_RandomIntegerInRange(-2000, -1000); + result = SDL_GetNumDisplayModes(displayIndex); + SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/large negative)", displayIndex); + SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result); + + displayIndex = SDLTest_RandomIntegerInRange(1000, 2000); + result = SDL_GetNumDisplayModes(displayIndex); + SDLTest_AssertPass("Call to SDL_GetNumDisplayModes(%d=out-of-bounds/large positive)", displayIndex); + SDLTest_AssertCheck(result < 0, "Validate returned value from function; expected: <0; got: %d", result); + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_GetClosestDisplayMode function against current resolution + */ +int +video_getClosestDisplayModeCurrentResolution(void *arg) +{ + int result; + SDL_DisplayMode current; + SDL_DisplayMode target; + SDL_DisplayMode closest; + SDL_DisplayMode* dResult; + int displayNum; + int i; + int variation; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Make calls for each display */ + for (i=0; iw, "Verify return value matches assigned value; expected: %d, got: %d", closest.w, dResult->w); + SDLTest_AssertCheck(closest.h == dResult->h, "Verify return value matches assigned value; expected: %d, got: %d", closest.h, dResult->h); + } + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests the functionality of the SDL_GetClosestDisplayMode function against random resolution + */ +int +video_getClosestDisplayModeRandomResolution(void *arg) +{ + SDL_DisplayMode target; + SDL_DisplayMode closest; + SDL_DisplayMode* dResult; + int displayNum; + int i; + int variation; + + /* Get number of displays */ + displayNum = SDL_GetNumVideoDisplays(); + SDLTest_AssertPass("Call to SDL_GetNumVideoDisplays()"); + + /* Make calls for each display */ + for (i=0; i= 0.0 && result <= 1.0, "Validate range of result value; expected: [0.0, 1.0], got: %f", result); + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowBrightness with invalid input + * +* @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowBrightness + */ +int +video_getWindowBrightnessNegative(void *arg) +{ + const char *invalidWindowError = "Invalid window"; + char *lastError; + float result; + + /* Call against invalid window */ + result = SDL_GetWindowBrightness(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowBrightness(window=NULL)"); + SDLTest_AssertCheck(result == 1.0, "Validate result value; expected: 1.0, got: %f", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strcmp(lastError, invalidWindowError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + invalidWindowError, + lastError); + } + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowDisplayMode + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowDisplayMode + */ +int +video_getWindowDisplayMode(void *arg) +{ + SDL_Window* window; + const char* title = "video_getWindowDisplayMode Test Window"; + SDL_DisplayMode mode; + int result; + + /* Invalidate part of the mode content so we can check values later */ + mode.w = -1; + mode.h = -1; + mode.refresh_rate = -1; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window != NULL) { + result = SDL_GetWindowDisplayMode(window, &mode); + SDLTest_AssertPass("Call to SDL_GetWindowDisplayMode()"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + SDLTest_AssertCheck(mode.w > 0, "Validate mode.w content; expected: >0, got: %d", mode.w); + SDLTest_AssertCheck(mode.h > 0, "Validate mode.h content; expected: >0, got: %d", mode.h); + SDLTest_AssertCheck(mode.refresh_rate > 0, "Validate mode.refresh_rate content; expected: >0, got: %d", mode.refresh_rate); + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/* Helper function that checks for an 'Invalid window' error */ +void _checkInvalidWindowError() +{ + const char *invalidWindowError = "Invalid window"; + char *lastError; + + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strcmp(lastError, invalidWindowError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + invalidWindowError, + lastError); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Tests call to SDL_GetWindowDisplayMode with invalid input + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowDisplayMode + */ +int +video_getWindowDisplayModeNegative(void *arg) +{ + const char *expectedError = "Parameter 'mode' is invalid"; + char *lastError; + SDL_Window* window; + const char* title = "video_getWindowDisplayModeNegative Test Window"; + SDL_DisplayMode mode; + int result; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window != NULL) { + result = SDL_GetWindowDisplayMode(window, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowDisplayMode(...,mode=NULL)"); + SDLTest_AssertCheck(result == -1, "Validate result value; expected: -1, got: %d", result); + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strcmp(lastError, expectedError) == 0, + "SDL_GetError(): expected message '%s', was message: '%s'", + expectedError, + lastError); + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Call against invalid window */ + result = SDL_GetWindowDisplayMode(NULL, &mode); + SDLTest_AssertPass("Call to SDL_GetWindowDisplayMode(window=NULL,...)"); + SDLTest_AssertCheck(result == -1, "Validate result value; expected: -1, got: %d", result); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowGammaRamp + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowGammaRamp + */ +int +video_getWindowGammaRamp(void *arg) +{ + SDL_Window* window; + const char* title = "video_getWindowGammaRamp Test Window"; + Uint16 red[256]; + Uint16 green[256]; + Uint16 blue[256]; + int result; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Retrieve no channel */ + result = SDL_GetWindowGammaRamp(window, NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(all NULL)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Retrieve single channel */ + result = SDL_GetWindowGammaRamp(window, red, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, NULL, green, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(g)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, NULL, NULL, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Retrieve two channels */ + result = SDL_GetWindowGammaRamp(window, red, green, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r, g)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, NULL, green, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(g,b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + result = SDL_GetWindowGammaRamp(window, red, NULL, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r,b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Retrieve all channels */ + result = SDL_GetWindowGammaRamp(window, red, green, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(r,g,b)"); + SDLTest_AssertCheck(result == 0, "Validate result value; expected: 0, got: %d", result); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowGammaRamp with invalid input + * +* @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowGammaRamp + */ +int +video_getWindowGammaRampNegative(void *arg) +{ + Uint16 red[256]; + Uint16 green[256]; + Uint16 blue[256]; + int result; + + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Call against invalid window */ + result = SDL_GetWindowGammaRamp(NULL, red, green, blue); + SDLTest_AssertPass("Call to SDL_GetWindowGammaRamp(window=NULL,r,g,b)"); + SDLTest_AssertCheck(result == -1, "Validate result value; expected: -1, got: %i", result); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/* Helper for setting and checking the window grab state */ +void +_setAndCheckWindowGrabState(SDL_Window* window, SDL_bool desiredState) +{ + SDL_bool currentState; + + /* Set state */ + SDL_SetWindowGrab(window, desiredState); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(%s)", (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + /* Get and check state */ + currentState = SDL_GetWindowGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowGrab()"); + SDLTest_AssertCheck( + currentState == desiredState, + "Validate returned state; expected: %s, got: %s", + (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE", + (currentState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); +} + +/** + * @brief Tests call to SDL_GetWindowGrab and SDL_SetWindowGrab + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowGrab + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowGrab + */ +int +video_getSetWindowGrab(void *arg) +{ + const char* title = "video_getSetWindowGrab Test Window"; + SDL_Window* window; + SDL_bool originalState, dummyState, currentState, desiredState; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Get state */ + originalState = SDL_GetWindowGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowGrab()"); + + /* F */ + _setAndCheckWindowGrabState(window, SDL_FALSE); + + /* F --> F */ + _setAndCheckWindowGrabState(window, SDL_FALSE); + + /* F --> T */ + _setAndCheckWindowGrabState(window, SDL_TRUE); + + /* T --> T */ + _setAndCheckWindowGrabState(window, SDL_TRUE); + + /* T --> F */ + _setAndCheckWindowGrabState(window, SDL_FALSE); + + /* Negative tests */ + dummyState = SDL_GetWindowGrab(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowGrab(window=NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowGrab(NULL, SDL_FALSE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(window=NULL,SDL_FALSE)"); + _checkInvalidWindowError(); + + SDL_SetWindowGrab(NULL, SDL_TRUE); + SDLTest_AssertPass("Call to SDL_SetWindowGrab(window=NULL,SDL_FALSE)"); + _checkInvalidWindowError(); + + /* State should still be F */ + desiredState = SDL_FALSE; + currentState = SDL_GetWindowGrab(window); + SDLTest_AssertPass("Call to SDL_GetWindowGrab()"); + SDLTest_AssertCheck( + currentState == desiredState, + "Validate returned state; expected: %s, got: %s", + (desiredState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE", + (currentState == SDL_FALSE) ? "SDL_FALSE" : "SDL_TRUE"); + + /* Restore state */ + _setAndCheckWindowGrabState(window, originalState); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests call to SDL_GetWindowID and SDL_GetWindowFromID + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowID + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowFromID + */ +int +video_getWindowId(void *arg) +{ + const char* title = "video_getWindowId Test Window"; + SDL_Window* window; + SDL_Window* result; + Uint32 id, randomId; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Get ID */ + id = SDL_GetWindowID(window); + SDLTest_AssertPass("Call to SDL_GetWindowID()"); + + /* Get window from ID */ + result = SDL_GetWindowFromID(id); + SDLTest_AssertPass("Call to SDL_GetWindowID(%d)", id); + SDLTest_AssertCheck(result == window, "Verify result matches window pointer"); + + /* Get window from random large ID, no result check */ + randomId = SDLTest_RandomIntegerInRange(UINT8_MAX,UINT16_MAX); + result = SDL_GetWindowFromID(randomId); + SDLTest_AssertPass("Call to SDL_GetWindowID(%d/random_large)", randomId); + + /* Get window from 0 and Uint32 max ID, no result check */ + result = SDL_GetWindowFromID(0); + SDLTest_AssertPass("Call to SDL_GetWindowID(0)"); + result = SDL_GetWindowFromID(UINT32_MAX); + SDLTest_AssertPass("Call to SDL_GetWindowID(UINT32_MAX)"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Get window from ID for closed window */ + result = SDL_GetWindowFromID(id); + SDLTest_AssertPass("Call to SDL_GetWindowID(%d/closed_window)", id); + SDLTest_AssertCheck(result == NULL, "Verify result is NULL"); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + id = SDL_GetWindowID(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowID(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowPixelFormat + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowPixelFormat + */ +int +video_getWindowPixelFormat(void *arg) +{ + const char* title = "video_getWindowPixelFormat Test Window"; + SDL_Window* window; + Uint32 format; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Get format */ + format = SDL_GetWindowPixelFormat(window); + SDLTest_AssertPass("Call to SDL_GetWindowPixelFormat()"); + SDLTest_AssertCheck(format != SDL_PIXELFORMAT_UNKNOWN, "Verify that returned format is valid; expected: != %d, got: %d", SDL_PIXELFORMAT_UNKNOWN, format); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + format = SDL_GetWindowPixelFormat(NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPixelFormat(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowPosition and SDL_SetWindowPosition + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowPosition + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowPosition + */ +int +video_getSetWindowPosition(void *arg) +{ + const char* title = "video_getSetWindowPosition Test Window"; + SDL_Window* window; + int xVariation, yVariation; + int referenceX, referenceY; + int currentX, currentY; + int desiredX, desiredY; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + for (xVariation = 0; xVariation < 4; xVariation++) { + for (yVariation = 0; yVariation < 4; yVariation++) { + switch(xVariation) { + case 0: + /* Zero X Position */ + desiredX = 0; + break; + case 1: + /* Random X position inside screen */ + desiredX = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + desiredX = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random X position outside screen (negative) */ + desiredX = SDLTest_RandomIntegerInRange(-1000, -100); + break; + } + + switch(yVariation) { + case 0: + /* Zero X Position */ + desiredY = 0; + break; + case 1: + /* Random X position inside screen */ + desiredY = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Random X position outside screen (positive) */ + desiredY = SDLTest_RandomIntegerInRange(10000, 11000); + break; + case 3: + /* Random Y position outside screen (negative) */ + desiredY = SDLTest_RandomIntegerInRange(-1000, -100); + break; + } + + /* Set position */ + SDL_SetWindowPosition(window, desiredX, desiredY); + SDLTest_AssertPass("Call to SDL_SetWindowPosition(...,%d,%d)", desiredX, desiredY); + + /* Get position */ + currentX = desiredX + 1; + currentY = desiredY + 1; + SDL_GetWindowPosition(window, ¤tX, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition()"); + SDLTest_AssertCheck(desiredX == currentX, "Verify returned X position; expected: %d, got: %d", desiredX, currentX); + SDLTest_AssertCheck(desiredY == currentY, "Verify returned Y position; expected: %d, got: %d", desiredY, currentY); + + /* Get position X */ + currentX = desiredX + 1; + SDL_GetWindowPosition(window, ¤tX, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&y=NULL)"); + SDLTest_AssertCheck(desiredX == currentX, "Verify returned X position; expected: %d, got: %d", desiredX, currentX); + + /* Get position Y */ + currentY = desiredY + 1; + SDL_GetWindowPosition(window, NULL, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&x=NULL)"); + SDLTest_AssertCheck(desiredY == currentY, "Verify returned Y position; expected: %d, got: %d", desiredY, currentY); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowPosition(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(&x=NULL,&y=NULL)"); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceX = SDLTest_RandomSint32(); + referenceY = SDLTest_RandomSint32(); + currentX = referenceX; + currentY = referenceY; + desiredX = SDLTest_RandomSint32(); + desiredY = SDLTest_RandomSint32(); + + /* Negative tests */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowPosition(NULL, ¤tX, ¤tY); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(window=NULL)"); + SDLTest_AssertCheck( + currentX == referenceX && currentY == referenceY, + "Verify that content of X and Y pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceX, referenceY, + currentX, currentY); + _checkInvalidWindowError(); + + SDL_GetWindowPosition(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowPosition(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowPosition(NULL, desiredX, desiredY); + SDLTest_AssertPass("Call to SDL_SetWindowPosition(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/* Helper function that checks for an 'Invalid parameter' error */ +void _checkInvalidParameterError() +{ + const char *invalidParameterError = "Parameter"; + char *lastError; + + lastError = (char *)SDL_GetError(); + SDLTest_AssertPass("SDL_GetError()"); + SDLTest_AssertCheck(lastError != NULL, "Verify error message is not NULL"); + if (lastError != NULL) { + SDLTest_AssertCheck(SDL_strncmp(lastError, invalidParameterError, SDL_strlen(invalidParameterError)) == 0, + "SDL_GetError(): expected message starts with '%s', was message: '%s'", + invalidParameterError, + lastError); + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + } +} + +/** + * @brief Tests call to SDL_GetWindowSize and SDL_SetWindowSize + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowSize + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowSize + */ +int +video_getSetWindowSize(void *arg) +{ + const char* title = "video_getSetWindowSize Test Window"; + SDL_Window* window; + int result; + SDL_Rect display; + int maxwVariation, maxhVariation; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW, desiredH; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(0, &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) return TEST_ABORTED; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + +#ifdef __WIN32__ + /* Platform clips window size to screen size */ + maxwVariation = 4; + maxhVariation = 4; +#else + /* Platform allows window size >= screen size */ + maxwVariation = 5; + maxhVariation = 5; +#endif + + for (wVariation = 0; wVariation < maxwVariation; wVariation++) { + for (hVariation = 0; hVariation < maxhVariation; hVariation++) { + switch(wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Width 1 pixel smaller than screen */ + desiredW = display.w - 1; + break; + case 3: + /* Width at screen size */ + desiredW = display.w; + break; + case 4: + /* Width 1 pixel larger than screen */ + desiredW = display.w + 1; + break; + } + + switch(hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(1, 100); + break; + case 2: + /* Height 1 pixel smaller than screen */ + desiredH = display.h - 1; + break; + case 3: + /* Height at screen size */ + desiredH = display.h; + break; + case 4: + /* Height 1 pixel larger than screen */ + desiredH = display.h + 1; + break; + } + + /* Set size */ + SDL_SetWindowSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW <= 0 || desiredH <= 0) { + SDL_SetWindowSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(...,%d,%d)", desiredW, desiredH); + _checkInvalidParameterError(); + } + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests for window input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + _checkInvalidWindowError(); + + SDL_GetWindowSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowSize(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowSize(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowMinimumSize and SDL_SetWindowMinimumSize + * + */ +int +video_getSetWindowMinimumSize(void *arg) +{ + const char* title = "video_getSetWindowMinimumSize Test Window"; + SDL_Window* window; + int result; + SDL_Rect display; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW, desiredH; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(0, &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) return TEST_ABORTED; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + for (wVariation = 0; wVariation < 5; wVariation++) { + for (hVariation = 0; hVariation < 5; hVariation++) { + switch(wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(2, display.w - 1); + break; + case 2: + /* Width at screen size */ + desiredW = display.w; + break; + } + + switch(hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(2, display.h - 1); + break; + case 2: + /* Height at screen size */ + desiredH = display.h; + break; + case 4: + /* Height 1 pixel larger than screen */ + desiredH = display.h + 1; + break; + } + + /* Set size */ + SDL_SetWindowMinimumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowMinimumSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowMinimumSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentH); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowMinimumSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredW, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowMinimumSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW <= 0 || desiredH <= 0) { + SDL_SetWindowMinimumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(...,%d,%d)", desiredW, desiredH); + _checkInvalidParameterError(); + } + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests for window input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowMinimumSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + _checkInvalidWindowError(); + + SDL_GetWindowMinimumSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMinimumSize(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowMinimumSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMinimumSize(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + +/** + * @brief Tests call to SDL_GetWindowMaximumSize and SDL_SetWindowMaximumSize + * + */ +int +video_getSetWindowMaximumSize(void *arg) +{ + const char* title = "video_getSetWindowMaximumSize Test Window"; + SDL_Window* window; + int result; + SDL_Rect display; + int wVariation, hVariation; + int referenceW, referenceH; + int currentW, currentH; + int desiredW, desiredH; + + /* Get display bounds for size range */ + result = SDL_GetDisplayBounds(0, &display); + SDLTest_AssertPass("SDL_GetDisplayBounds()"); + SDLTest_AssertCheck(result == 0, "Verify return value; expected: 0, got: %d", result); + if (result != 0) return TEST_ABORTED; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + for (wVariation = 0; wVariation < 3; wVariation++) { + for (hVariation = 0; hVariation < 3; hVariation++) { + switch(wVariation) { + case 0: + /* 1 Pixel Wide */ + desiredW = 1; + break; + case 1: + /* Random width inside screen */ + desiredW = SDLTest_RandomIntegerInRange(2, display.w - 1); + break; + case 2: + /* Width at screen size */ + desiredW = display.w; + break; + } + + switch(hVariation) { + case 0: + /* 1 Pixel High */ + desiredH = 1; + break; + case 1: + /* Random height inside screen */ + desiredH = SDLTest_RandomIntegerInRange(2, display.h - 1); + break; + case 2: + /* Height at screen size */ + desiredH = display.h; + break; + } + + /* Set size */ + SDL_SetWindowMaximumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(...,%d,%d)", desiredW, desiredH); + + /* Get size */ + currentW = desiredW + 1; + currentH = desiredH + 1; + SDL_GetWindowMaximumSize(window, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize()"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentW); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredH, currentH); + + /* Get just width */ + currentW = desiredW + 1; + SDL_GetWindowMaximumSize(window, ¤tW, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&h=NULL)"); + SDLTest_AssertCheck(desiredW == currentW, "Verify returned width; expected: %d, got: %d", desiredW, currentH); + + /* Get just height */ + currentH = desiredH + 1; + SDL_GetWindowMaximumSize(window, NULL, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&w=NULL)"); + SDLTest_AssertCheck(desiredH == currentH, "Verify returned height; expected: %d, got: %d", desiredW, currentH); + } + } + + /* Dummy call with both pointers NULL */ + SDL_GetWindowMaximumSize(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(&w=NULL,&h=NULL)"); + + /* Negative tests for parameter input */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + for (desiredH = -2; desiredH < 2; desiredH++) { + for (desiredW = -2; desiredW < 2; desiredW++) { + if (desiredW <= 0 || desiredH <= 0) { + SDL_SetWindowMaximumSize(window, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(...,%d,%d)", desiredW, desiredH); + _checkInvalidParameterError(); + } + } + } + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + /* Set some 'magic' value for later check that nothing was changed */ + referenceW = SDLTest_RandomSint32(); + referenceH = SDLTest_RandomSint32(); + currentW = referenceW; + currentH = referenceH; + desiredW = SDLTest_RandomSint32(); + desiredH = SDLTest_RandomSint32(); + + /* Negative tests */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + SDL_GetWindowMaximumSize(NULL, ¤tW, ¤tH); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(window=NULL)"); + SDLTest_AssertCheck( + currentW == referenceW && currentH == referenceH, + "Verify that content of W and H pointers has not been modified; expected: %d,%d; got: %d,%d", + referenceW, referenceH, + currentW, currentH); + _checkInvalidWindowError(); + + SDL_GetWindowMaximumSize(NULL, NULL, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowMaximumSize(NULL, NULL, NULL)"); + _checkInvalidWindowError(); + + SDL_SetWindowMaximumSize(NULL, desiredW, desiredH); + SDLTest_AssertPass("Call to SDL_SetWindowMaximumSize(window=NULL)"); + _checkInvalidWindowError(); + + return TEST_COMPLETED; +} + + +/** + * @brief Tests call to SDL_SetWindowData and SDL_GetWindowData + * + * @sa http://wiki.libsdl.org/moin.fcg/SDL_SetWindowData + * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetWindowData + */ +int +video_getSetWindowData(void *arg) +{ + int returnValue = TEST_COMPLETED; + const char* title = "video_setGetWindowData Test Window"; + SDL_Window* window; + const char *referenceName = "TestName"; + const char *name = "TestName"; + const char *referenceName2 = "TestName2"; + const char *name2 = "TestName2"; + int datasize; + char *referenceUserdata = NULL; + char *userdata = NULL; + char *referenceUserdata2 = NULL; + char *userdata2 = NULL; + char *result; + int iteration; + + /* Call against new test window */ + window = _createVideoSuiteTestWindow(title); + if (window == NULL) return TEST_ABORTED; + + /* Create testdata */ + datasize = SDLTest_RandomIntegerInRange(1, 32); + referenceUserdata = SDLTest_RandomAsciiStringOfSize(datasize); + if (referenceUserdata == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + userdata = SDL_strdup(referenceUserdata); + if (userdata == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + datasize = SDLTest_RandomIntegerInRange(1, 32); + referenceUserdata2 = SDLTest_RandomAsciiStringOfSize(datasize); + if (referenceUserdata2 == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + userdata2 = (char *)SDL_strdup(referenceUserdata2); + if (userdata2 == NULL) { + returnValue = TEST_ABORTED; + goto cleanup; + } + + /* Get non-existent data */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data */ + result = (char *)SDL_SetWindowData(window, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s)", name, userdata); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + + /* Get data (twice) */ + for (iteration = 1; iteration <= 2; iteration++) { + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [iteration %d]", name, iteration); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + } + + /* Set data again twice */ + for (iteration = 1; iteration <= 2; iteration++) { + result = (char *)SDL_SetWindowData(window, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [iteration %d]", name, userdata, iteration); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + } + + /* Get data again */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [again]", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data with new data */ + result = (char *)SDL_SetWindowData(window, name, userdata2); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [new userdata]", name, userdata2); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Set data with new data again */ + result = (char *)SDL_SetWindowData(window, name, userdata2); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [new userdata again]", name, userdata2); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata2, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Get new data */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata2, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Set data with NULL to clear */ + result = (char *)SDL_SetWindowData(window, name, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,NULL)", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata2, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Set data with NULL to clear again */ + result = (char *)SDL_SetWindowData(window, name, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,NULL) [again]", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata2, userdata2) == 0, "Validate that userdata2 was not changed, expected: %s, got: %s", referenceUserdata2, userdata2); + + /* Get non-existent data */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Get non-existent data new name */ + result = (char *)SDL_GetWindowData(window, name2); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s)", name2); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName2, name2) == 0, "Validate that name2 was not changed, expected: %s, got: %s", referenceName2, name2); + + /* Set data (again) */ + result = (char *)SDL_SetWindowData(window, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(...%s,%s) [again, after clear]", name, userdata); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, userdata) == 0, "Validate that userdata was not changed, expected: %s, got: %s", referenceUserdata, userdata); + + /* Get data (again) */ + result = (char *)SDL_GetWindowData(window, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(..,%s) [again, after clear]", name); + SDLTest_AssertCheck(SDL_strcmp(referenceUserdata, result) == 0, "Validate that correct result was returned; expected: %s, got: %s", referenceUserdata, result); + SDLTest_AssertCheck(SDL_strcmp(referenceName, name) == 0, "Validate that name was not changed, expected: %s, got: %s", referenceName, name); + + /* Negative test */ + SDL_ClearError(); + SDLTest_AssertPass("Call to SDL_ClearError()"); + + /* Set with invalid window */ + result = (char *)SDL_SetWindowData(NULL, name, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(window=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidWindowError(); + + /* Set data with NULL name, valid userdata */ + result = (char *)SDL_SetWindowData(window, NULL, userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(name=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Set data with empty name, valid userdata */ + result = (char *)SDL_SetWindowData(window, "", userdata); + SDLTest_AssertPass("Call to SDL_SetWindowData(name='')"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Set data with NULL name, NULL userdata */ + result = (char *)SDL_SetWindowData(window, NULL, NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name=NULL,userdata=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Set data with empty name, NULL userdata */ + result = (char *)SDL_SetWindowData(window, "", NULL); + SDLTest_AssertPass("Call to SDL_SetWindowData(name='',userdata=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Get with invalid window */ + result = (char *)SDL_GetWindowData(NULL, name); + SDLTest_AssertPass("Call to SDL_GetWindowData(window=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidWindowError(); + + /* Get data with NULL name */ + result = (char *)SDL_GetWindowData(window, NULL); + SDLTest_AssertPass("Call to SDL_GetWindowData(name=NULL)"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Get data with empty name */ + result = (char *)SDL_GetWindowData(window, ""); + SDLTest_AssertPass("Call to SDL_GetWindowData(name='')"); + SDLTest_AssertCheck(result == NULL, "Validate that result is NULL"); + _checkInvalidParameterError(); + + /* Clean up */ + _destroyVideoSuiteTestWindow(window); + + cleanup: + SDL_free(referenceUserdata); + SDL_free(referenceUserdata2); + SDL_free(userdata); + SDL_free(userdata2); + + return returnValue; +} + + +/* ================= Test References ================== */ + +/* Video test cases */ +static const SDLTest_TestCaseReference videoTest1 = + { (SDLTest_TestCaseFp)video_enableDisableScreensaver, "video_enableDisableScreensaver", "Enable and disable screenaver while checking state", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest2 = + { (SDLTest_TestCaseFp)video_createWindowVariousPositions, "video_createWindowVariousPositions", "Create windows at various locations", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest3 = + { (SDLTest_TestCaseFp)video_createWindowVariousSizes, "video_createWindowVariousSizes", "Create windows with various sizes", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest4 = + { (SDLTest_TestCaseFp)video_createWindowVariousFlags, "video_createWindowVariousFlags", "Create windows using various flags", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest5 = + { (SDLTest_TestCaseFp)video_getWindowFlags, "video_getWindowFlags", "Get window flags set during SDL_CreateWindow", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest6 = + { (SDLTest_TestCaseFp)video_getNumDisplayModes, "video_getNumDisplayModes", "Use SDL_GetNumDisplayModes function to get number of display modes", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest7 = + { (SDLTest_TestCaseFp)video_getNumDisplayModesNegative, "video_getNumDisplayModesNegative", "Negative tests for SDL_GetNumDisplayModes", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest8 = + { (SDLTest_TestCaseFp)video_getClosestDisplayModeCurrentResolution, "video_getClosestDisplayModeCurrentResolution", "Use function to get closes match to requested display mode for current resolution", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest9 = + { (SDLTest_TestCaseFp)video_getClosestDisplayModeRandomResolution, "video_getClosestDisplayModeRandomResolution", "Use function to get closes match to requested display mode for random resolution", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest10 = + { (SDLTest_TestCaseFp)video_getWindowBrightness, "video_getWindowBrightness", "Get window brightness", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest11 = + { (SDLTest_TestCaseFp)video_getWindowBrightnessNegative, "video_getWindowBrightnessNegative", "Get window brightness with invalid input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest12 = + { (SDLTest_TestCaseFp)video_getWindowDisplayMode, "video_getWindowDisplayMode", "Get window display mode", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest13 = + { (SDLTest_TestCaseFp)video_getWindowDisplayModeNegative, "video_getWindowDisplayModeNegative", "Get window display mode with invalid input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest14 = + { (SDLTest_TestCaseFp)video_getWindowGammaRamp, "video_getWindowGammaRamp", "Get window gamma ramp", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest15 = + { (SDLTest_TestCaseFp)video_getWindowGammaRampNegative, "video_getWindowGammaRampNegative", "Get window gamma ramp against invalid input", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest16 = + { (SDLTest_TestCaseFp)video_getSetWindowGrab, "video_getSetWindowGrab", "Checks SDL_GetWindowGrab and SDL_SetWindowGrab positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest17 = + { (SDLTest_TestCaseFp)video_getWindowId, "video_getWindowId", "Checks SDL_GetWindowID and SDL_GetWindowFromID", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest18 = + { (SDLTest_TestCaseFp)video_getWindowPixelFormat, "video_getWindowPixelFormat", "Checks SDL_GetWindowPixelFormat", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest19 = + { (SDLTest_TestCaseFp)video_getSetWindowPosition, "video_getSetWindowPosition", "Checks SDL_GetWindowPosition and SDL_SetWindowPosition positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest20 = + { (SDLTest_TestCaseFp)video_getSetWindowSize, "video_getSetWindowSize", "Checks SDL_GetWindowSize and SDL_SetWindowSize positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest21 = + { (SDLTest_TestCaseFp)video_getSetWindowMinimumSize, "video_getSetWindowMinimumSize", "Checks SDL_GetWindowMinimumSize and SDL_SetWindowMinimumSize positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest22 = + { (SDLTest_TestCaseFp)video_getSetWindowMaximumSize, "video_getSetWindowMaximumSize", "Checks SDL_GetWindowMaximumSize and SDL_SetWindowMaximumSize positive and negative cases", TEST_ENABLED }; + +static const SDLTest_TestCaseReference videoTest23 = + { (SDLTest_TestCaseFp)video_getSetWindowData, "video_getSetWindowData", "Checks SDL_SetWindowData and SDL_GetWindowData positive and negative cases", TEST_ENABLED }; + +/* Sequence of Video test cases */ +static const SDLTest_TestCaseReference *videoTests[] = { + &videoTest1, &videoTest2, &videoTest3, &videoTest4, &videoTest5, &videoTest6, + &videoTest7, &videoTest8, &videoTest9, &videoTest10, &videoTest11, &videoTest12, + &videoTest13, &videoTest14, &videoTest15, &videoTest16, &videoTest17, + &videoTest18, &videoTest19, &videoTest20, &videoTest21, &videoTest22, + &videoTest23, NULL +}; + +/* Video test suite (global) */ +SDLTest_TestSuiteReference videoTestSuite = { + "Video", + NULL, + videoTests, + NULL +}; diff --git a/Engine/lib/sdl/test/testdisplayinfo.c b/Engine/lib/sdl/test/testdisplayinfo.c new file mode 100644 index 0000000000..c228eb6b2d --- /dev/null +++ b/Engine/lib/sdl/test/testdisplayinfo.c @@ -0,0 +1,89 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Program to test querying of display info */ + +#include "SDL.h" + +#include +#include + +static void +print_mode(const char *prefix, const SDL_DisplayMode *mode) +{ + if (!mode) + return; + + SDL_Log("%s: fmt=%s w=%d h=%d refresh=%d\n", + prefix, SDL_GetPixelFormatName(mode->format), + mode->w, mode->h, mode->refresh_rate); +} + +int +main(int argc, char *argv[]) +{ + SDL_DisplayMode mode; + int num_displays, dpy; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_Log("Using video target '%s'.\n", SDL_GetCurrentVideoDriver()); + num_displays = SDL_GetNumVideoDisplays(); + + SDL_Log("See %d displays.\n", num_displays); + + for (dpy = 0; dpy < num_displays; dpy++) { + const int num_modes = SDL_GetNumDisplayModes(dpy); + SDL_Rect rect = { 0, 0, 0, 0 }; + int m; + + SDL_GetDisplayBounds(dpy, &rect); + SDL_Log("%d: \"%s\" (%dx%d, (%d, %d)), %d modes.\n", dpy, SDL_GetDisplayName(dpy), rect.w, rect.h, rect.x, rect.y, num_modes); + + if (SDL_GetCurrentDisplayMode(dpy, &mode) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " CURRENT: failed to query (%s)\n", SDL_GetError()); + } else { + print_mode("CURRENT", &mode); + } + + if (SDL_GetDesktopDisplayMode(dpy, &mode) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " DESKTOP: failed to query (%s)\n", SDL_GetError()); + } else { + print_mode("DESKTOP", &mode); + } + + for (m = 0; m < num_modes; m++) { + if (SDL_GetDisplayMode(dpy, m, &mode) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, " MODE %d: failed to query (%s)\n", m, SDL_GetError()); + } else { + char prefix[64]; + SDL_snprintf(prefix, sizeof (prefix), " MODE %d", m); + print_mode(prefix, &mode); + } + } + + SDL_Log("\n"); + } + + SDL_Quit(); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ + diff --git a/Engine/lib/sdl/test/testdraw2.c b/Engine/lib/sdl/test/testdraw2.c new file mode 100644 index 0000000000..77bd8c1fe6 --- /dev/null +++ b/Engine/lib/sdl/test/testdraw2.c @@ -0,0 +1,305 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program: draw as many random objects on the screen as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#define NUM_OBJECTS 100 + +static SDLTest_CommonState *state; +static int num_objects; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 255; +static int current_color = 255; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + +int done; + +void +DrawPoints(SDL_Renderer * renderer) +{ + int i; + int x, y; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects * 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + x = rand() % viewport.w; + y = rand() % viewport.h; + SDL_RenderDrawPoint(renderer, x, y); + } +} + +void +DrawLines(SDL_Renderer * renderer) +{ + int i; + int x1, y1, x2, y2; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + if (i == 0) { + SDL_RenderDrawLine(renderer, 0, 0, viewport.w - 1, viewport.h - 1); + SDL_RenderDrawLine(renderer, 0, viewport.h - 1, viewport.w - 1, 0); + SDL_RenderDrawLine(renderer, 0, viewport.h / 2, viewport.w - 1, viewport.h / 2); + SDL_RenderDrawLine(renderer, viewport.w / 2, 0, viewport.w / 2, viewport.h - 1); + } else { + x1 = (rand() % (viewport.w*2)) - viewport.w; + x2 = (rand() % (viewport.w*2)) - viewport.w; + y1 = (rand() % (viewport.h*2)) - viewport.h; + y2 = (rand() % (viewport.h*2)) - viewport.h; + SDL_RenderDrawLine(renderer, x1, y1, x2, y2); + } + } +} + +void +DrawRects(SDL_Renderer * renderer) +{ + int i; + SDL_Rect rect; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects / 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + rect.w = rand() % (viewport.h / 2); + rect.h = rand() % (viewport.h / 2); + rect.x = (rand() % (viewport.w*2) - viewport.w) - (rect.w / 2); + rect.y = (rand() % (viewport.h*2) - viewport.h) - (rect.h / 2); + SDL_RenderFillRect(renderer, &rect); + } +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + DrawRects(renderer); + DrawLines(renderer); + DrawPoints(renderer); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + num_objects = NUM_OBJECTS; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_objects = SDL_atoi(argv[i]); + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha]\n", + argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, blendMode); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand((unsigned int)time(NULL)); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + + SDLTest_CommonQuit(state); + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testdrawchessboard.c b/Engine/lib/sdl/test/testdrawchessboard.c new file mode 100644 index 0000000000..f2a1469d47 --- /dev/null +++ b/Engine/lib/sdl/test/testdrawchessboard.c @@ -0,0 +1,135 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. + + This file is created by : Nitin Jain (nitin.j4@samsung.com) +*/ + +/* Sample program: Draw a Chess Board by using SDL_CreateSoftwareRenderer API */ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +SDL_Window *window; +SDL_Renderer *renderer; +int done; + +void +DrawChessBoard(SDL_Renderer * renderer) +{ + int row = 0,column = 0,x = 0; + SDL_Rect rect, darea; + + /* Get the Size of drawing surface */ + SDL_RenderGetViewport(renderer, &darea); + + for( ; row < 8; row++) + { + column = row%2; + x = column; + for( ; column < 4+(row%2); column++) + { + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0xFF); + + rect.w = darea.w/8; + rect.h = darea.h/8; + rect.x = x * rect.w; + rect.y = row * rect.h; + x = x + 2; + SDL_RenderFillRect(renderer, &rect); + } + } +} + +void +loop() +{ + SDL_Event e; + while (SDL_PollEvent(&e)) { + if (e.type == SDL_QUIT) { + done = 1; +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + return; + } + + if ((e.type == SDL_KEYDOWN) && (e.key.keysym.sym == SDLK_ESCAPE)) { + done = 1; +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + return; + } + } + + DrawChessBoard(renderer); + + /* Got everything on rendering surface, + now Update the drawing image on window screen */ + SDL_UpdateWindowSurface(window); +} + +int +main(int argc, char *argv[]) +{ + SDL_Surface *surface; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL */ + if(SDL_Init(SDL_INIT_VIDEO) != 0) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init fail : %s\n", SDL_GetError()); + return 1; + } + + + /* Create window and renderer for given surface */ + window = SDL_CreateWindow("Chess Board", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); + if(!window) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Window creation fail : %s\n",SDL_GetError()); + return 1; + } + surface = SDL_GetWindowSurface(window); + renderer = SDL_CreateSoftwareRenderer(surface); + if(!renderer) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Render creation for surface fail : %s\n",SDL_GetError()); + return 1; + } + + /* Clear the rendering surface with the specified color */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + SDL_RenderClear(renderer); + + + /* Draw the Image on rendering surface */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_Quit(); + return 0; +} + diff --git a/Engine/lib/sdl/test/testdropfile.c b/Engine/lib/sdl/test/testdropfile.c new file mode 100644 index 0000000000..b7f215ee81 --- /dev/null +++ b/Engine/lib/sdl/test/testdropfile.c @@ -0,0 +1,93 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include +#include + +#include "SDL_test_common.h" + +static SDLTest_CommonState *state; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +int +main(int argc, char *argv[]) +{ + int i, done; + SDL_Event event; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + /* needed voodoo to allow app to launch via OS X Finder */ + if (SDL_strncmp(argv[i], "-psn", 4)==0) { + consumed = 1; + } + if (consumed == 0) { + consumed = -1; + } + if (consumed < 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + SDL_RenderPresent(renderer); + } + + SDL_EventState(SDL_DROPFILE, SDL_ENABLE); + + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + + if (event.type == SDL_DROPFILE) { + char *dropped_filedir = event.drop.file; + SDL_Log("File dropped on window: %s", dropped_filedir); + SDL_free(dropped_filedir); + } + } + } + + quit(0); + /* keep the compiler happy ... */ + return(0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testerror.c b/Engine/lib/sdl/test/testerror.c new file mode 100644 index 0000000000..b5fa3fbc08 --- /dev/null +++ b/Engine/lib/sdl/test/testerror.c @@ -0,0 +1,77 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL threading code and error handling */ + +#include +#include +#include + +#include "SDL.h" + +static int alive = 0; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +int SDLCALL +ThreadFunc(void *data) +{ + /* Set the child thread error string */ + SDL_SetError("Thread %s (%lu) had a problem: %s", + (char *) data, SDL_ThreadID(), "nevermind"); + while (alive) { + SDL_Log("Thread '%s' is alive!\n", (char *) data); + SDL_Delay(1 * 1000); + } + SDL_Log("Child thread error string: %s\n", SDL_GetError()); + return (0); +} + +int +main(int argc, char *argv[]) +{ + SDL_Thread *thread; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Set the error value for the main thread */ + SDL_SetError("No worries"); + + alive = 1; + thread = SDL_CreateThread(ThreadFunc, NULL, "#1"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + SDL_Delay(5 * 1000); + SDL_Log("Waiting for thread #1\n"); + alive = 0; + SDL_WaitThread(thread, NULL); + + SDL_Log("Main thread error string: %s\n", SDL_GetError()); + + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testfile.c b/Engine/lib/sdl/test/testfile.c new file mode 100644 index 0000000000..b45795f630 --- /dev/null +++ b/Engine/lib/sdl/test/testfile.c @@ -0,0 +1,283 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* sanity tests on SDL_rwops.c (usefull for alternative implementations of stdio rwops) */ + +/* quiet windows compiler warnings */ +#define _CRT_NONSTDC_NO_WARNINGS + +#include + +#ifndef _MSC_VER +#include +#endif + +#include "SDL.h" + + +#include + +/* WARNING ! those 2 files will be destroyed by this test program */ + +#ifdef __IPHONEOS__ +#define FBASENAME1 "../Documents/sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "../Documents/sdldata2" /* this file should not exist before starting test */ +#else +#define FBASENAME1 "sdldata1" /* this file will be created during tests */ +#define FBASENAME2 "sdldata2" /* this file should not exist before starting test */ +#endif + +#ifndef NULL +#define NULL ((void *)0) +#endif + +static void +cleanup(void) +{ + unlink(FBASENAME1); + unlink(FBASENAME2); +} + +static void +rwops_error_quit(unsigned line, SDL_RWops * rwops) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "testfile.c(%d): failed\n", line); + if (rwops) { + rwops->close(rwops); /* This calls SDL_FreeRW(rwops); */ + } + cleanup(); + exit(1); /* quit with rwops error (test failed) */ +} + +#define RWOP_ERR_QUIT(x) rwops_error_quit( __LINE__, (x) ) + + + +int +main(int argc, char *argv[]) +{ + SDL_RWops *rwops = NULL; + char test_buf[30]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + cleanup(); + +/* test 1 : basic argument test: all those calls to SDL_RWFromFile should fail */ + + rwops = SDL_RWFromFile(NULL, NULL); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL, "ab+"); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj"); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something", ""); + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile("something", NULL); + if (rwops) + RWOP_ERR_QUIT(rwops); + SDL_Log("test1 OK\n"); + +/* test 2 : check that inexistent file is not successfully opened/created when required */ +/* modes : r, r+ imply that file MUST exist + modes : a, a+, w, w+ checks that it succeeds (file may not exists) + + */ + rwops = SDL_RWFromFile(FBASENAME2, "rb"); /* this file doesn't exist that call must fail */ + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2, "rb+"); /* this file doesn't exist that call must fail */ + if (rwops) + RWOP_ERR_QUIT(rwops); + rwops = SDL_RWFromFile(FBASENAME2, "wb"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "wb+"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "ab"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + rwops = SDL_RWFromFile(FBASENAME2, "ab+"); + if (!rwops) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + unlink(FBASENAME2); + SDL_Log("test2 OK\n"); + +/* test 3 : creation, writing , reading, seeking, + test : w mode, r mode, w+ mode + */ + rwops = SDL_RWFromFile(FBASENAME1, "wb"); /* write only */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* we are in write only mode */ + rwops->close(rwops); + + rwops = SDL_RWFromFile(FBASENAME1, "rb"); /* read mode, file must exists */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (20 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + if (2 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "12345678901234567890", 20)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->write(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* readonly mode */ + rwops->close(rwops); + +/* test 3: same with w+ mode */ + rwops = SDL_RWFromFile(FBASENAME1, "wb+"); /* write + read + truncation */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (20 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + if (2 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "12345678901234567890", 20)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + SDL_Log("test3 OK\n"); + +/* test 4: same in r+ mode */ + rwops = SDL_RWFromFile(FBASENAME1, "rb+"); /* write + read + file must exists, no truncation */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); /* we are in read/write mode */ + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (20 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + if (2 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "12345678901234567890", 20)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + SDL_Log("test4 OK\n"); + +/* test5 : append mode */ + rwops = SDL_RWFromFile(FBASENAME1, "ab+"); /* write + read + append */ + if (!rwops) + RWOP_ERR_QUIT(rwops); + if (1 != rwops->write(rwops, "1234567890", 10, 1)) + RWOP_ERR_QUIT(rwops); + if (10 != rwops->write(rwops, "1234567890", 1, 10)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->write(rwops, "1234567", 1, 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + + if (1 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + + if (20 + 27 != rwops->seek(rwops, -7, RW_SEEK_END)) + RWOP_ERR_QUIT(rwops); + if (7 != rwops->read(rwops, test_buf, 1, 7)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "1234567", 7)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 1, 1)) + RWOP_ERR_QUIT(rwops); + if (0 != rwops->read(rwops, test_buf, 10, 100)) + RWOP_ERR_QUIT(rwops); + + if (27 != rwops->seek(rwops, -27, RW_SEEK_CUR)) + RWOP_ERR_QUIT(rwops); + + if (0 != rwops->seek(rwops, 0L, RW_SEEK_SET)) + RWOP_ERR_QUIT(rwops); + if (3 != rwops->read(rwops, test_buf, 10, 3)) + RWOP_ERR_QUIT(rwops); + if (SDL_memcmp(test_buf, "123456789012345678901234567123", 30)) + RWOP_ERR_QUIT(rwops); + rwops->close(rwops); + SDL_Log("test5 OK\n"); + cleanup(); + return 0; /* all ok */ +} diff --git a/Engine/lib/sdl/test/testfilesystem.c b/Engine/lib/sdl/test/testfilesystem.c new file mode 100644 index 0000000000..abd301c0e0 --- /dev/null +++ b/Engine/lib/sdl/test/testfilesystem.c @@ -0,0 +1,52 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple test of filesystem functions. */ + +#include +#include "SDL.h" + +int +main(int argc, char *argv[]) +{ + char *base_path; + char *pref_path; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(0) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 1; + } + + base_path = SDL_GetBasePath(); + if(base_path == NULL){ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find base path: %s\n", + SDL_GetError()); + return 0; + } + + SDL_Log("base path: '%s'\n", base_path); + SDL_free(base_path); + + pref_path = SDL_GetPrefPath("libsdl", "testfilesystem"); + if(pref_path == NULL){ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find pref path: %s\n", + SDL_GetError()); + return 0; + } + SDL_Log("pref path: '%s'\n", pref_path); + SDL_free(pref_path); + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testgamecontroller.c b/Engine/lib/sdl/test/testgamecontroller.c new file mode 100644 index 0000000000..ec1dfd3229 --- /dev/null +++ b/Engine/lib/sdl/test/testgamecontroller.c @@ -0,0 +1,348 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program to test the SDL game controller routines */ + +#include +#include +#include + +#include "SDL.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#ifndef SDL_JOYSTICK_DISABLED + +#ifdef __IPHONEOS__ +#define SCREEN_WIDTH 480 +#define SCREEN_HEIGHT 320 +#else +#define SCREEN_WIDTH 512 +#define SCREEN_HEIGHT 317 +#endif + +/* This is indexed by SDL_GameControllerButton. */ +static const struct { int x; int y; } button_positions[] = { + {387, 167}, /* A */ + {431, 132}, /* B */ + {342, 132}, /* X */ + {389, 101}, /* Y */ + {174, 132}, /* BACK */ + {233, 132}, /* GUIDE */ + {289, 132}, /* START */ + {75, 154}, /* LEFTSTICK */ + {305, 230}, /* RIGHTSTICK */ + {77, 40}, /* LEFTSHOULDER */ + {396, 36}, /* RIGHTSHOULDER */ + {154, 188}, /* DPAD_UP */ + {154, 249}, /* DPAD_DOWN */ + {116, 217}, /* DPAD_LEFT */ + {186, 217}, /* DPAD_RIGHT */ +}; + +/* This is indexed by SDL_GameControllerAxis. */ +static const struct { int x; int y; double angle; } axis_positions[] = { + {75, 154, 0.0}, /* LEFTX */ + {75, 154, 90.0}, /* LEFTY */ + {305, 230, 0.0}, /* RIGHTX */ + {305, 230, 90.0}, /* RIGHTY */ + {91, 0, 90.0}, /* TRIGGERLEFT */ + {375, 0, 90.0}, /* TRIGGERRIGHT */ +}; + +SDL_Renderer *screen = NULL; +SDL_bool retval = SDL_FALSE; +SDL_bool done = SDL_FALSE; +SDL_Texture *background, *button, *axis; + +static SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp = NULL; + SDL_Texture *texture = NULL; + + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + } else { + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->BytesPerPixel == 1) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *)temp->pixels); + } else { + SDL_assert(!temp->format->palette); + SDL_assert(temp->format->BitsPerPixel == 24); + SDL_SetColorKey(temp, SDL_TRUE, (*(Uint32 *)temp->pixels) & 0x00FFFFFF); + } + } + + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + } + } + if (temp) { + SDL_FreeSurface(temp); + } + return texture; +} + +void +loop(void *arg) +{ + SDL_Event event; + int i; + SDL_GameController *gamecontroller = (SDL_GameController *)arg; + + /* blank screen, set up for drawing this frame. */ + SDL_SetRenderDrawColor(screen, 0xFF, 0xFF, 0xFF, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_RenderCopy(screen, background, NULL, NULL); + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_KEYDOWN: + if (event.key.keysym.sym != SDLK_ESCAPE) { + break; + } + /* Fall through to signal quit */ + case SDL_QUIT: + done = SDL_TRUE; + break; + default: + break; + } + } + + /* Update visual controller state */ + for (i = 0; i < SDL_CONTROLLER_BUTTON_MAX; ++i) { + if (SDL_GameControllerGetButton(gamecontroller, (SDL_GameControllerButton)i) == SDL_PRESSED) { + const SDL_Rect dst = { button_positions[i].x, button_positions[i].y, 50, 50 }; + SDL_RenderCopyEx(screen, button, NULL, &dst, 0, NULL, 0); + } + } + + for (i = 0; i < SDL_CONTROLLER_AXIS_MAX; ++i) { + const Sint16 deadzone = 8000; /* !!! FIXME: real deadzone */ + const Sint16 value = SDL_GameControllerGetAxis(gamecontroller, (SDL_GameControllerAxis)(i)); + if (value < -deadzone) { + const SDL_Rect dst = { axis_positions[i].x, axis_positions[i].y, 50, 50 }; + const double angle = axis_positions[i].angle; + SDL_RenderCopyEx(screen, axis, NULL, &dst, angle, NULL, 0); + } else if (value > deadzone) { + const SDL_Rect dst = { axis_positions[i].x, axis_positions[i].y, 50, 50 }; + const double angle = axis_positions[i].angle + 180.0; + SDL_RenderCopyEx(screen, axis, NULL, &dst, angle, NULL, 0); + } + } + + SDL_RenderPresent(screen); + + if (!SDL_GameControllerGetAttached(gamecontroller)) { + done = SDL_TRUE; + retval = SDL_TRUE; /* keep going, wait for reattach. */ + } + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +SDL_bool +WatchGameController(SDL_GameController * gamecontroller) +{ + const char *name = SDL_GameControllerName(gamecontroller); + const char *basetitle = "Game Controller Test: "; + const size_t titlelen = SDL_strlen(basetitle) + SDL_strlen(name) + 1; + char *title = (char *)SDL_malloc(titlelen); + SDL_Window *window = NULL; + + retval = SDL_FALSE; + done = SDL_FALSE; + + if (title) { + SDL_snprintf(title, titlelen, "%s%s", basetitle, name); + } + + /* Create a window to display controller state */ + window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, + SCREEN_HEIGHT, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return SDL_FALSE; + } + + screen = SDL_CreateRenderer(window, -1, 0); + if (screen == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + return SDL_FALSE; + } + + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_RenderPresent(screen); + SDL_RaiseWindow(window); + + /* scale for platforms that don't give you the window size you asked for. */ + SDL_RenderSetLogicalSize(screen, SCREEN_WIDTH, SCREEN_HEIGHT); + + background = LoadTexture(screen, "controllermap.bmp", SDL_FALSE); + button = LoadTexture(screen, "button.bmp", SDL_TRUE); + axis = LoadTexture(screen, "axis.bmp", SDL_TRUE); + + if (!background || !button || !axis) { + SDL_DestroyRenderer(screen); + SDL_DestroyWindow(window); + return SDL_FALSE; + } + SDL_SetTextureColorMod(button, 10, 255, 21); + SDL_SetTextureColorMod(axis, 10, 255, 21); + + /* !!! FIXME: */ + /*SDL_RenderSetLogicalSize(screen, background->w, background->h);*/ + + /* Print info about the controller we are watching */ + SDL_Log("Watching controller %s\n", name ? name : "Unknown Controller"); + + /* Loop, getting controller events! */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(loop, gamecontroller, 0, 1); +#else + while (!done) { + loop(gamecontroller); + } +#endif + + SDL_DestroyRenderer(screen); + screen = NULL; + background = NULL; + button = NULL; + axis = NULL; + SDL_DestroyWindow(window); + return retval; +} + +int +main(int argc, char *argv[]) +{ + int i; + int nController = 0; + int retcode = 0; + char guid[64]; + SDL_GameController *gamecontroller; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER ) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + SDL_GameControllerAddMappingsFromFile("gamecontrollerdb.txt"); + + /* Print information about the controller */ + for (i = 0; i < SDL_NumJoysticks(); ++i) { + const char *name; + const char *description; + + SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(i), + guid, sizeof (guid)); + + if ( SDL_IsGameController(i) ) + { + nController++; + name = SDL_GameControllerNameForIndex(i); + description = "Controller"; + } else { + name = SDL_JoystickNameForIndex(i); + description = "Joystick"; + } + SDL_Log("%s %d: %s (guid %s)\n", description, i, name ? name : "Unknown", guid); + } + SDL_Log("There are %d game controller(s) attached (%d joystick(s))\n", nController, SDL_NumJoysticks()); + + if (argv[1]) { + SDL_bool reportederror = SDL_FALSE; + SDL_bool keepGoing = SDL_TRUE; + SDL_Event event; + int device = atoi(argv[1]); + if (device >= SDL_NumJoysticks()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%i is an invalid joystick index.\n", device); + retcode = 1; + } else { + SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(device), + guid, sizeof (guid)); + SDL_Log("Attempting to open device %i, guid %s\n", device, guid); + gamecontroller = SDL_GameControllerOpen(device); + + if (gamecontroller != NULL) { + SDL_assert(SDL_GameControllerFromInstanceID(SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(gamecontroller))) == gamecontroller); + } + + while (keepGoing) { + if (gamecontroller == NULL) { + if (!reportederror) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't open gamecontroller %d: %s\n", device, SDL_GetError()); + retcode = 1; + keepGoing = SDL_FALSE; + reportederror = SDL_TRUE; + } + } else { + reportederror = SDL_FALSE; + keepGoing = WatchGameController(gamecontroller); + SDL_GameControllerClose(gamecontroller); + } + + gamecontroller = NULL; + if (keepGoing) { + SDL_Log("Waiting for attach\n"); + } + while (keepGoing) { + SDL_WaitEvent(&event); + if ((event.type == SDL_QUIT) || (event.type == SDL_FINGERDOWN) + || (event.type == SDL_MOUSEBUTTONDOWN)) { + keepGoing = SDL_FALSE; + } else if (event.type == SDL_CONTROLLERDEVICEADDED) { + gamecontroller = SDL_GameControllerOpen(event.cdevice.which); + if (gamecontroller != NULL) { + SDL_assert(SDL_GameControllerFromInstanceID(SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(gamecontroller))) == gamecontroller); + } + break; + } + } + } + } + } + + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER); + + return retcode; +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testgesture.c b/Engine/lib/sdl/test/testgesture.c new file mode 100644 index 0000000000..a289ce133a --- /dev/null +++ b/Engine/lib/sdl/test/testgesture.c @@ -0,0 +1,310 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Usage: + * Spacebar to begin recording a gesture on all touches. + * s to save all touches into "./gestureSave" + * l to load all touches from "./gestureSave" + */ + +#include "SDL.h" +#include /* for exit() */ + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#define WIDTH 640 +#define HEIGHT 480 +#define BPP 4 +#define DEPTH 32 + +/* MUST BE A POWER OF 2! */ +#define EVENT_BUF_SIZE 256 + + +#define VERBOSE 0 + +static SDL_Event events[EVENT_BUF_SIZE]; +static int eventWrite; + + +static int colors[7] = {0xFF,0xFF00,0xFF0000,0xFFFF00,0x00FFFF,0xFF00FF,0xFFFFFF}; + +SDL_Surface *screen; +SDL_Window *window; +SDL_bool quitting = SDL_FALSE; + +typedef struct { + float x,y; +} Point; + +typedef struct { + float ang,r; + Point p; +} Knob; + +static Knob knob; + +void setpix(SDL_Surface *screen, float _x, float _y, unsigned int col) +{ + Uint32 *pixmem32; + Uint32 colour; + Uint8 r,g,b; + int x = (int)_x; + int y = (int)_y; + float a; + + if(x < 0 || x >= screen->w) return; + if(y < 0 || y >= screen->h) return; + + pixmem32 = (Uint32*) screen->pixels + y*screen->pitch/BPP + x; + + SDL_memcpy(&colour,pixmem32,screen->format->BytesPerPixel); + + SDL_GetRGB(colour,screen->format,&r,&g,&b); + /* r = 0;g = 0; b = 0; */ + a = (float)((col>>24)&0xFF); + if(a == 0) a = 0xFF; /* Hack, to make things easier. */ + a /= 0xFF; + r = (Uint8)(r*(1-a) + ((col>>16)&0xFF)*(a)); + g = (Uint8)(g*(1-a) + ((col>> 8)&0xFF)*(a)); + b = (Uint8)(b*(1-a) + ((col>> 0)&0xFF)*(a)); + colour = SDL_MapRGB( screen->format,r, g, b); + + + *pixmem32 = colour; +} + +void drawLine(SDL_Surface *screen,float x0,float y0,float x1,float y1,unsigned int col) { + float t; + for(t=0;t<1;t+=(float)(1.f/SDL_max(SDL_fabs(x0-x1),SDL_fabs(y0-y1)))) + setpix(screen,x1+t*(x0-x1),y1+t*(y0-y1),col); +} + +void drawCircle(SDL_Surface* screen,float x,float y,float r,unsigned int c) +{ + float tx,ty; + float xr; + for(ty = (float)-SDL_fabs(r);ty <= (float)SDL_fabs((int)r);ty++) { + xr = (float)SDL_sqrt(r*r - ty*ty); + if(r > 0) { /* r > 0 ==> filled circle */ + for(tx=-xr+.5f;tx<=xr-.5;tx++) { + setpix(screen,x+tx,y+ty,c); + } + } + else { + setpix(screen,x-xr+.5f,y+ty,c); + setpix(screen,x+xr-.5f,y+ty,c); + } + } +} + +void drawKnob(SDL_Surface* screen,Knob k) { + drawCircle(screen,k.p.x*screen->w,k.p.y*screen->h,k.r*screen->w,0xFFFFFF); + drawCircle(screen,(k.p.x+k.r/2*SDL_cosf(k.ang))*screen->w, + (k.p.y+k.r/2*SDL_sinf(k.ang))*screen->h,k.r/4*screen->w,0); +} + +void DrawScreen(SDL_Surface* screen, SDL_Window* window) +{ + int i; +#if 1 + SDL_FillRect(screen, NULL, 0); +#else + int x, y; + for(y = 0;y < screen->h;y++) + for(x = 0;x < screen->w;x++) + setpix(screen,(float)x,(float)y,((x%255)<<16) + ((y%255)<<8) + (x+y)%255); +#endif + + /* draw Touch History */ + for(i = eventWrite; i < eventWrite+EVENT_BUF_SIZE; ++i) { + const SDL_Event *event = &events[i&(EVENT_BUF_SIZE-1)]; + float age = (float)(i - eventWrite) / EVENT_BUF_SIZE; + float x, y; + unsigned int c, col; + + if(event->type == SDL_FINGERMOTION || + event->type == SDL_FINGERDOWN || + event->type == SDL_FINGERUP) { + x = event->tfinger.x; + y = event->tfinger.y; + + /* draw the touch: */ + c = colors[event->tfinger.fingerId%7]; + col = ((unsigned int)(c*(.1+.85))) | (unsigned int)(0xFF*age)<<24; + + if(event->type == SDL_FINGERMOTION) + drawCircle(screen,x*screen->w,y*screen->h,5,col); + else if(event->type == SDL_FINGERDOWN) + drawCircle(screen,x*screen->w,y*screen->h,-10,col); + } + } + + if(knob.p.x > 0) + drawKnob(screen,knob); + + SDL_UpdateWindowSurface(window); +} + +/* Returns a new SDL_Window if window is NULL or window if not. */ +SDL_Window* initWindow(SDL_Window *window, int width,int height) +{ + if (!window) { + window = SDL_CreateWindow("Gesture Test", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + width, height, SDL_WINDOW_RESIZABLE); + } + return window; +} + +void loop() +{ + SDL_Event event; + SDL_RWops *stream; + + while(SDL_PollEvent(&event)) + { + /* Record _all_ events */ + events[eventWrite & (EVENT_BUF_SIZE-1)] = event; + eventWrite++; + + switch (event.type) + { + case SDL_QUIT: + quitting = SDL_TRUE; + break; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) + { + case SDLK_i: + { + int i; + for (i = 0; i < SDL_GetNumTouchDevices(); ++i) { + SDL_TouchID id = SDL_GetTouchDevice(i); + SDL_Log("Fingers Down on device %"SDL_PRIs64": %d", id, SDL_GetNumTouchFingers(id)); + } + break; + } + case SDLK_SPACE: + SDL_RecordGesture(-1); + break; + case SDLK_s: + stream = SDL_RWFromFile("gestureSave", "w"); + SDL_Log("Wrote %i templates", SDL_SaveAllDollarTemplates(stream)); + SDL_RWclose(stream); + break; + case SDLK_l: + stream = SDL_RWFromFile("gestureSave", "r"); + SDL_Log("Loaded: %i", SDL_LoadDollarTemplates(-1, stream)); + SDL_RWclose(stream); + break; + case SDLK_ESCAPE: + quitting = SDL_TRUE; + break; + } + break; + case SDL_WINDOWEVENT: + if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + if (!(window = initWindow(window, event.window.data1, event.window.data2)) || + !(screen = SDL_GetWindowSurface(window))) + { + SDL_Quit(); + exit(1); + } + } + break; + case SDL_FINGERMOTION: +#if VERBOSE + SDL_Log("Finger: %"SDL_PRIs64",x: %f, y: %f",event.tfinger.fingerId, + event.tfinger.x,event.tfinger.y); +#endif + break; + case SDL_FINGERDOWN: +#if VERBOSE + SDL_Log("Finger: %"SDL_PRIs64" down - x: %f, y: %f", + event.tfinger.fingerId,event.tfinger.x,event.tfinger.y); +#endif + break; + case SDL_FINGERUP: +#if VERBOSE + SDL_Log("Finger: %"SDL_PRIs64" up - x: %f, y: %f", + event.tfinger.fingerId,event.tfinger.x,event.tfinger.y); +#endif + break; + case SDL_MULTIGESTURE: +#if VERBOSE + SDL_Log("Multi Gesture: x = %f, y = %f, dAng = %f, dR = %f", + event.mgesture.x, + event.mgesture.y, + event.mgesture.dTheta, + event.mgesture.dDist); + SDL_Log("MG: numDownTouch = %i",event.mgesture.numFingers); +#endif + knob.p.x = event.mgesture.x; + knob.p.y = event.mgesture.y; + knob.ang += event.mgesture.dTheta; + knob.r += event.mgesture.dDist; + break; + case SDL_DOLLARGESTURE: + SDL_Log("Gesture %"SDL_PRIs64" performed, error: %f", + event.dgesture.gestureId, + event.dgesture.error); + break; + case SDL_DOLLARRECORD: + SDL_Log("Recorded gesture: %"SDL_PRIs64"",event.dgesture.gestureId); + break; + } + } + DrawScreen(screen, window); + +#ifdef __EMSCRIPTEN__ + if (quitting) { + emscripten_cancel_main_loop(); + } +#endif +} + +int main(int argc, char* argv[]) +{ + window = NULL; + screen = NULL; + quitting = SDL_FALSE; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* gesture variables */ + knob.r = .1f; + knob.ang = 0; + + if (SDL_Init(SDL_INIT_VIDEO) < 0 ) return 1; + + if (!(window = initWindow(window, WIDTH, HEIGHT)) || + !(screen = SDL_GetWindowSurface(window))) + { + SDL_Quit(); + return 1; + } + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while(!quitting) { + loop(); + } +#endif + + SDL_Quit(); + return 0; +} + diff --git a/Engine/lib/sdl/test/testgl2.c b/Engine/lib/sdl/test/testgl2.c new file mode 100644 index 0000000000..74147f9fb9 --- /dev/null +++ b/Engine/lib/sdl/test/testgl2.c @@ -0,0 +1,416 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include + +#include "SDL_test_common.h" + +#ifdef __MACOS__ +#define HAVE_OPENGL +#endif + +#ifdef HAVE_OPENGL + +#include "SDL_opengl.h" + +typedef struct GL_Context +{ +#define SDL_PROC(ret,func,params) ret (APIENTRY *func) params; +#include "../src/render/opengl/SDL_glfuncs.h" +#undef SDL_PROC +} GL_Context; + + +/* Undefine this if you want a flat cube instead of a rainbow cube */ +#define SHADED_CUBE + +static SDLTest_CommonState *state; +static SDL_GLContext context; +static GL_Context ctx; + +static int LoadContext(GL_Context * data) +{ +#if SDL_VIDEO_DRIVER_UIKIT +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_ANDROID +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_PANDORA +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined __SDL_NOGETPROCADDR__ +#define SDL_PROC(ret,func,params) data->func=func; +#else +#define SDL_PROC(ret,func,params) \ + do { \ + data->func = SDL_GL_GetProcAddress(#func); \ + if ( ! data->func ) { \ + return SDL_SetError("Couldn't load GL function %s: %s\n", #func, SDL_GetError()); \ + } \ + } while ( 0 ); +#endif /* __SDL_NOGETPROCADDR__ */ + +#include "../src/render/opengl/SDL_glfuncs.h" +#undef SDL_PROC + return 0; +} + + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + if (context) { + /* SDL_GL_MakeCurrent(0, NULL); *//* doesn't do anything */ + SDL_GL_DeleteContext(context); + } + SDLTest_CommonQuit(state); + exit(rc); +} + +static void +Render() +{ + static float color[8][3] = { + {1.0, 1.0, 0.0}, + {1.0, 0.0, 0.0}, + {0.0, 0.0, 0.0}, + {0.0, 1.0, 0.0}, + {0.0, 1.0, 1.0}, + {1.0, 1.0, 1.0}, + {1.0, 0.0, 1.0}, + {0.0, 0.0, 1.0} + }; + static float cube[8][3] = { + {0.5, 0.5, -0.5}, + {0.5, -0.5, -0.5}, + {-0.5, -0.5, -0.5}, + {-0.5, 0.5, -0.5}, + {-0.5, 0.5, 0.5}, + {0.5, 0.5, 0.5}, + {0.5, -0.5, 0.5}, + {-0.5, -0.5, 0.5} + }; + + /* Do our drawing, too. */ + ctx.glClearColor(0.0, 0.0, 0.0, 1.0); + ctx.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + ctx.glBegin(GL_QUADS); + +#ifdef SHADED_CUBE + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + + ctx.glColor3fv(color[5]); + ctx.glVertex3fv(cube[5]); + ctx.glColor3fv(color[0]); + ctx.glVertex3fv(cube[0]); + ctx.glColor3fv(color[3]); + ctx.glVertex3fv(cube[3]); + ctx.glColor3fv(color[4]); + ctx.glVertex3fv(cube[4]); + + ctx.glColor3fv(color[6]); + ctx.glVertex3fv(cube[6]); + ctx.glColor3fv(color[1]); + ctx.glVertex3fv(cube[1]); + ctx.glColor3fv(color[2]); + ctx.glVertex3fv(cube[2]); + ctx.glColor3fv(color[7]); + ctx.glVertex3fv(cube[7]); +#else /* flat cube */ + ctx.glColor3f(1.0, 0.0, 0.0); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[1]); + ctx.glVertex3fv(cube[2]); + ctx.glVertex3fv(cube[3]); + + ctx.glColor3f(0.0, 1.0, 0.0); + ctx.glVertex3fv(cube[3]); + ctx.glVertex3fv(cube[4]); + ctx.glVertex3fv(cube[7]); + ctx.glVertex3fv(cube[2]); + + ctx.glColor3f(0.0, 0.0, 1.0); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[6]); + ctx.glVertex3fv(cube[1]); + + ctx.glColor3f(0.0, 1.0, 1.0); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[4]); + ctx.glVertex3fv(cube[7]); + ctx.glVertex3fv(cube[6]); + + ctx.glColor3f(1.0, 1.0, 0.0); + ctx.glVertex3fv(cube[5]); + ctx.glVertex3fv(cube[0]); + ctx.glVertex3fv(cube[3]); + ctx.glVertex3fv(cube[4]); + + ctx.glColor3f(1.0, 0.0, 1.0); + ctx.glVertex3fv(cube[6]); + ctx.glVertex3fv(cube[1]); + ctx.glVertex3fv(cube[2]); + ctx.glVertex3fv(cube[7]); +#endif /* SHADED_CUBE */ + + ctx.glEnd(); + + ctx.glMatrixMode(GL_MODELVIEW); + ctx.glRotatef(5.0, 1.0, 1.0, 1.0); +} + +int +main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i, done; + SDL_DisplayMode mode; + SDL_Event event; + Uint32 then, now, frames; + int status; + int dw, dh; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + fsaa = 0; + accel = -1; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0 && i+1 < argc) { + fsaa = atoi(argv[i+1]); + consumed = 2; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0 && i+1 < argc) { + accel = atoi(argv[i+1]); + consumed = 2; + } else { + consumed = -1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--fsaa n] [--accel n]\n", argv[0], + SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = 16; + state->gl_double_buffer = 1; + if (fsaa) { + state->gl_multisamplebuffers = 1; + state->gl_multisamplesamples = fsaa; + } + if (accel >= 0) { + state->gl_accelerated = accel; + } + + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create OpenGL context */ + context = SDL_GL_CreateContext(state->windows[0]); + if (!context) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + + /* Important: call this *after* creating the context */ + if (LoadContext(&ctx) < 0) { + SDL_Log("Could not load GL functions\n"); + quit(2); + return 0; + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + /* try late-swap-tearing first. If not supported, try normal vsync. */ + if (SDL_GL_SetSwapInterval(-1) == -1) { + SDL_GL_SetSwapInterval(1); + } + } else { + SDL_GL_SetSwapInterval(0); /* disable vsync. */ + } + + SDL_GetCurrentDisplayMode(0, &mode); + SDL_Log("Screen BPP : %d\n", SDL_BITSPERPIXEL(mode.format)); + SDL_Log("Swap Interval : %d\n", SDL_GL_GetSwapInterval()); + SDL_GetWindowSize(state->windows[0], &dw, &dh); + SDL_Log("Window Size : %d,%d\n", dw, dh); + SDL_GL_GetDrawableSize(state->windows[0], &dw, &dh); + SDL_Log("Draw Size : %d,%d\n", dw, dh); + SDL_Log("\n"); + SDL_Log("Vendor : %s\n", ctx.glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", ctx.glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", ctx.glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", ctx.glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_RED_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_GREEN_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_BLUE_SIZE: %s\n", SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", 16, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_DEPTH_SIZE: %s\n", SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel >= 0) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested %d, got %d\n", accel, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + /* Set rendering settings */ + ctx.glMatrixMode(GL_PROJECTION); + ctx.glLoadIdentity(); + ctx.glOrtho(-2.0, 2.0, -2.0, 2.0, -20.0, 20.0); + ctx.glMatrixMode(GL_MODELVIEW); + ctx.glLoadIdentity(); + ctx.glEnable(GL_DEPTH_TEST); + ctx.glDepthFunc(GL_LESS); + ctx.glShadeModel(GL_SMOOTH); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + while (!done) { + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + int w, h; + if (state->windows[i] == NULL) + continue; + SDL_GL_MakeCurrent(state->windows[i], context); + SDL_GL_GetDrawableSize(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + Render(); + SDL_GL_SwapWindow(state->windows[i]); + } + } + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double) frames * 1000) / (now - then)); + } + quit(0); + return 0; +} + +#else /* HAVE_OPENGL */ + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGL */ diff --git a/Engine/lib/sdl/test/testgles.c b/Engine/lib/sdl/test/testgles.c new file mode 100644 index 0000000000..291661a09d --- /dev/null +++ b/Engine/lib/sdl/test/testgles.c @@ -0,0 +1,355 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include + +#include "SDL_test_common.h" + +#if defined(__IPHONEOS__) || defined(__ANDROID__) +#define HAVE_OPENGLES +#endif + +#ifdef HAVE_OPENGLES + +#include "SDL_opengles.h" + +static SDLTest_CommonState *state; +static SDL_GLContext *context = NULL; +static int depth = 16; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + if (context != NULL) { + for (i = 0; i < state->num_windows; i++) { + if (context[i]) { + SDL_GL_DeleteContext(context[i]); + } + } + + SDL_free(context); + } + + SDLTest_CommonQuit(state); + exit(rc); +} + +static void +Render() +{ + static GLubyte color[8][4] = { {255, 0, 0, 0}, + {255, 0, 0, 255}, + {0, 255, 0, 255}, + {0, 255, 0, 255}, + {0, 255, 0, 255}, + {255, 255, 255, 255}, + {255, 0, 255, 255}, + {0, 0, 255, 255} + }; + static GLfloat cube[8][3] = { {0.5, 0.5, -0.5}, + {0.5f, -0.5f, -0.5f}, + {-0.5f, -0.5f, -0.5f}, + {-0.5f, 0.5f, -0.5f}, + {-0.5f, 0.5f, 0.5f}, + {0.5f, 0.5f, 0.5f}, + {0.5f, -0.5f, 0.5f}, + {-0.5f, -0.5f, 0.5f} + }; + static GLubyte indices[36] = { 0, 3, 4, + 4, 5, 0, + 0, 5, 6, + 6, 1, 0, + 6, 7, 2, + 2, 1, 6, + 7, 4, 3, + 3, 2, 7, + 5, 4, 7, + 7, 6, 5, + 2, 3, 1, + 3, 0, 1 + }; + + + /* Do our drawing, too. */ + glClearColor(0.0, 0.0, 0.0, 1.0); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + /* Draw the cube */ + glColorPointer(4, GL_UNSIGNED_BYTE, 0, color); + glEnableClientState(GL_COLOR_ARRAY); + glVertexPointer(3, GL_FLOAT, 0, cube); + glEnableClientState(GL_VERTEX_ARRAY); + glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices); + + glMatrixMode(GL_MODELVIEW); + glRotatef(5.0, 1.0, 1.0, 1.0); +} + +int +main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i, done; + SDL_DisplayMode mode; + SDL_Event event; + Uint32 then, now, frames; + int status; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + fsaa = 0; + accel = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0) { + ++fsaa; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0) { + ++accel; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) { + i++; + if (!argv[i]) { + consumed = -1; + } else { + depth = SDL_atoi(argv[i]); + consumed = 1; + } + } else { + consumed = -1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--fsaa] [--accel] [--zdepth %%d]\n", argv[0], + SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = depth; + state->gl_major_version = 1; + state->gl_minor_version = 1; + state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES; + if (fsaa) { + state->gl_multisamplebuffers=1; + state->gl_multisamplesamples=fsaa; + } + if (accel) { + state->gl_accelerated=1; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + context = SDL_calloc(state->num_windows, sizeof(context)); + if (context == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + + /* Create OpenGL ES contexts */ + for (i = 0; i < state->num_windows; i++) { + context[i] = SDL_GL_CreateContext(state->windows[i]); + if (!context[i]) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + } + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + SDL_GL_SetSwapInterval(1); + } else { + SDL_GL_SetSwapInterval(0); + } + + SDL_GetCurrentDisplayMode(0, &mode); + SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode.format)); + SDL_Log("\n"); + SDL_Log("Vendor : %s\n", glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_RED_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_GREEN_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_BLUE_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_DEPTH_SIZE: %s\n", + SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + /* Set rendering settings for each context */ + for (i = 0; i < state->num_windows; ++i) { + float aspectAdjust; + + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + + aspectAdjust = (4.0f / 3.0f) / ((float)state->window_w / state->window_h); + glViewport(0, 0, state->window_w, state->window_h); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrthof(-2.0, 2.0, -2.0 * aspectAdjust, 2.0 * aspectAdjust, -20.0, 20.0); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); + glShadeModel(GL_SMOOTH); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + while (!done) { + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_RESIZED: + for (i = 0; i < state->num_windows; ++i) { + if (event.window.windowID == SDL_GetWindowID(state->windows[i])) { + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + break; + } + /* Change view port to the new window dimensions */ + glViewport(0, 0, event.window.data1, event.window.data2); + /* Update window content */ + Render(); + SDL_GL_SwapWindow(state->windows[i]); + break; + } + } + break; + } + } + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + Render(); + SDL_GL_SwapWindow(state->windows[i]); + } + } + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double) frames * 1000) / (now - then)); + } +#if !defined(__ANDROID__) + quit(0); +#endif + return 0; +} + +#else /* HAVE_OPENGLES */ + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL ES support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGLES */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testgles2.c b/Engine/lib/sdl/test/testgles2.c new file mode 100644 index 0000000000..af5962ba48 --- /dev/null +++ b/Engine/lib/sdl/test/testgles2.c @@ -0,0 +1,731 @@ +/* + Copyright (r) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#if defined(__IPHONEOS__) || defined(__ANDROID__) || defined(__EMSCRIPTEN__) || defined(__NACL__) +#define HAVE_OPENGLES2 +#endif + +#ifdef HAVE_OPENGLES2 + +#include "SDL_opengles2.h" + +typedef struct GLES2_Context +{ +#define SDL_PROC(ret,func,params) ret (APIENTRY *func) params; +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC +} GLES2_Context; + + +static SDLTest_CommonState *state; +static SDL_GLContext *context = NULL; +static int depth = 16; +static GLES2_Context ctx; + +static int LoadContext(GLES2_Context * data) +{ +#if SDL_VIDEO_DRIVER_UIKIT +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_ANDROID +#define __SDL_NOGETPROCADDR__ +#elif SDL_VIDEO_DRIVER_PANDORA +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined __SDL_NOGETPROCADDR__ +#define SDL_PROC(ret,func,params) data->func=func; +#else +#define SDL_PROC(ret,func,params) \ + do { \ + data->func = SDL_GL_GetProcAddress(#func); \ + if ( ! data->func ) { \ + return SDL_SetError("Couldn't load GLES2 function %s: %s\n", #func, SDL_GetError()); \ + } \ + } while ( 0 ); +#endif /* __SDL_NOGETPROCADDR__ */ + +#include "../src/render/opengles2/SDL_gles2funcs.h" +#undef SDL_PROC + return 0; +} + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + int i; + + if (context != NULL) { + for (i = 0; i < state->num_windows; i++) { + if (context[i]) { + SDL_GL_DeleteContext(context[i]); + } + } + + SDL_free(context); + } + + SDLTest_CommonQuit(state); + exit(rc); +} + +#define GL_CHECK(x) \ + x; \ + { \ + GLenum glError = ctx.glGetError(); \ + if(glError != GL_NO_ERROR) { \ + SDL_Log("glGetError() = %i (0x%.8x) at line %i\n", glError, glError, __LINE__); \ + quit(1); \ + } \ + } + +/* + * Simulates desktop's glRotatef. The matrix is returned in column-major + * order. + */ +static void +rotate_matrix(float angle, float x, float y, float z, float *r) +{ + float radians, c, s, c1, u[3], length; + int i, j; + + radians = (float)(angle * M_PI) / 180.0f; + + c = SDL_cosf(radians); + s = SDL_sinf(radians); + + c1 = 1.0f - SDL_cosf(radians); + + length = (float)SDL_sqrt(x * x + y * y + z * z); + + u[0] = x / length; + u[1] = y / length; + u[2] = z / length; + + for (i = 0; i < 16; i++) { + r[i] = 0.0; + } + + r[15] = 1.0; + + for (i = 0; i < 3; i++) { + r[i * 4 + (i + 1) % 3] = u[(i + 2) % 3] * s; + r[i * 4 + (i + 2) % 3] = -u[(i + 1) % 3] * s; + } + + for (i = 0; i < 3; i++) { + for (j = 0; j < 3; j++) { + r[i * 4 + j] += c1 * u[i] * u[j] + (i == j ? c : 0.0f); + } + } +} + +/* + * Simulates gluPerspectiveMatrix + */ +static void +perspective_matrix(float fovy, float aspect, float znear, float zfar, float *r) +{ + int i; + float f; + + f = 1.0f/SDL_tanf(fovy * 0.5f); + + for (i = 0; i < 16; i++) { + r[i] = 0.0; + } + + r[0] = f / aspect; + r[5] = f; + r[10] = (znear + zfar) / (znear - zfar); + r[11] = -1.0f; + r[14] = (2.0f * znear * zfar) / (znear - zfar); + r[15] = 0.0f; +} + +/* + * Multiplies lhs by rhs and writes out to r. All matrices are 4x4 and column + * major. In-place multiplication is supported. + */ +static void +multiply_matrix(float *lhs, float *rhs, float *r) +{ + int i, j, k; + float tmp[16]; + + for (i = 0; i < 4; i++) { + for (j = 0; j < 4; j++) { + tmp[j * 4 + i] = 0.0; + + for (k = 0; k < 4; k++) { + tmp[j * 4 + i] += lhs[k * 4 + i] * rhs[j * 4 + k]; + } + } + } + + for (i = 0; i < 16; i++) { + r[i] = tmp[i]; + } +} + +/* + * Create shader, load in source, compile, dump debug as necessary. + * + * shader: Pointer to return created shader ID. + * source: Passed-in shader source code. + * shader_type: Passed to GL, e.g. GL_VERTEX_SHADER. + */ +void +process_shader(GLuint *shader, const char * source, GLint shader_type) +{ + GLint status = GL_FALSE; + const char *shaders[1] = { NULL }; + char buffer[1024]; + GLsizei length; + + /* Create shader and load into GL. */ + *shader = GL_CHECK(ctx.glCreateShader(shader_type)); + + shaders[0] = source; + + GL_CHECK(ctx.glShaderSource(*shader, 1, shaders, NULL)); + + /* Clean up shader source. */ + shaders[0] = NULL; + + /* Try compiling the shader. */ + GL_CHECK(ctx.glCompileShader(*shader)); + GL_CHECK(ctx.glGetShaderiv(*shader, GL_COMPILE_STATUS, &status)); + + /* Dump debug info (source and log) if compilation failed. */ + if(status != GL_TRUE) { + ctx.glGetProgramInfoLog(*shader, sizeof(buffer), &length, &buffer[0]); + buffer[length] = '\0'; + SDL_Log("Shader compilation failed: %s", buffer);fflush(stderr); + quit(-1); + } +} + +/* 3D data. Vertex range -0.5..0.5 in all axes. +* Z -0.5 is near, 0.5 is far. */ +const float _vertices[] = +{ + /* Front face. */ + /* Bottom left */ + -0.5, 0.5, -0.5, + 0.5, -0.5, -0.5, + -0.5, -0.5, -0.5, + /* Top right */ + -0.5, 0.5, -0.5, + 0.5, 0.5, -0.5, + 0.5, -0.5, -0.5, + /* Left face */ + /* Bottom left */ + -0.5, 0.5, 0.5, + -0.5, -0.5, -0.5, + -0.5, -0.5, 0.5, + /* Top right */ + -0.5, 0.5, 0.5, + -0.5, 0.5, -0.5, + -0.5, -0.5, -0.5, + /* Top face */ + /* Bottom left */ + -0.5, 0.5, 0.5, + 0.5, 0.5, -0.5, + -0.5, 0.5, -0.5, + /* Top right */ + -0.5, 0.5, 0.5, + 0.5, 0.5, 0.5, + 0.5, 0.5, -0.5, + /* Right face */ + /* Bottom left */ + 0.5, 0.5, -0.5, + 0.5, -0.5, 0.5, + 0.5, -0.5, -0.5, + /* Top right */ + 0.5, 0.5, -0.5, + 0.5, 0.5, 0.5, + 0.5, -0.5, 0.5, + /* Back face */ + /* Bottom left */ + 0.5, 0.5, 0.5, + -0.5, -0.5, 0.5, + 0.5, -0.5, 0.5, + /* Top right */ + 0.5, 0.5, 0.5, + -0.5, 0.5, 0.5, + -0.5, -0.5, 0.5, + /* Bottom face */ + /* Bottom left */ + -0.5, -0.5, -0.5, + 0.5, -0.5, 0.5, + -0.5, -0.5, 0.5, + /* Top right */ + -0.5, -0.5, -0.5, + 0.5, -0.5, -0.5, + 0.5, -0.5, 0.5, +}; + +const float _colors[] = +{ + /* Front face */ + /* Bottom left */ + 1.0, 0.0, 0.0, /* red */ + 0.0, 0.0, 1.0, /* blue */ + 0.0, 1.0, 0.0, /* green */ + /* Top right */ + 1.0, 0.0, 0.0, /* red */ + 1.0, 1.0, 0.0, /* yellow */ + 0.0, 0.0, 1.0, /* blue */ + /* Left face */ + /* Bottom left */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 1.0, 0.0, /* green */ + 0.0, 1.0, 1.0, /* cyan */ + /* Top right */ + 1.0, 1.0, 1.0, /* white */ + 1.0, 0.0, 0.0, /* red */ + 0.0, 1.0, 0.0, /* green */ + /* Top face */ + /* Bottom left */ + 1.0, 1.0, 1.0, /* white */ + 1.0, 1.0, 0.0, /* yellow */ + 1.0, 0.0, 0.0, /* red */ + /* Top right */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 1.0, 0.0, /* yellow */ + /* Right face */ + /* Bottom left */ + 1.0, 1.0, 0.0, /* yellow */ + 1.0, 0.0, 1.0, /* magenta */ + 0.0, 0.0, 1.0, /* blue */ + /* Top right */ + 1.0, 1.0, 0.0, /* yellow */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 0.0, 1.0, /* magenta */ + /* Back face */ + /* Bottom left */ + 0.0, 0.0, 0.0, /* black */ + 0.0, 1.0, 1.0, /* cyan */ + 1.0, 0.0, 1.0, /* magenta */ + /* Top right */ + 0.0, 0.0, 0.0, /* black */ + 1.0, 1.0, 1.0, /* white */ + 0.0, 1.0, 1.0, /* cyan */ + /* Bottom face */ + /* Bottom left */ + 0.0, 1.0, 0.0, /* green */ + 1.0, 0.0, 1.0, /* magenta */ + 0.0, 1.0, 1.0, /* cyan */ + /* Top right */ + 0.0, 1.0, 0.0, /* green */ + 0.0, 0.0, 1.0, /* blue */ + 1.0, 0.0, 1.0, /* magenta */ +}; + +const char* _shader_vert_src = +" attribute vec4 av4position; " +" attribute vec3 av3color; " +" uniform mat4 mvp; " +" varying vec3 vv3color; " +" void main() { " +" vv3color = av3color; " +" gl_Position = mvp * av4position; " +" } "; + +const char* _shader_frag_src = +" precision lowp float; " +" varying vec3 vv3color; " +" void main() { " +" gl_FragColor = vec4(vv3color, 1.0); " +" } "; + +typedef struct shader_data +{ + GLuint shader_program, shader_frag, shader_vert; + + GLint attr_position; + GLint attr_color, attr_mvp; + + int angle_x, angle_y, angle_z; + +} shader_data; + +static void +Render(unsigned int width, unsigned int height, shader_data* data) +{ + float matrix_rotate[16], matrix_modelview[16], matrix_perspective[16], matrix_mvp[16]; + + /* + * Do some rotation with Euler angles. It is not a fixed axis as + * quaterions would be, but the effect is cool. + */ + rotate_matrix((float)data->angle_x, 1.0f, 0.0f, 0.0f, matrix_modelview); + rotate_matrix((float)data->angle_y, 0.0f, 1.0f, 0.0f, matrix_rotate); + + multiply_matrix(matrix_rotate, matrix_modelview, matrix_modelview); + + rotate_matrix((float)data->angle_z, 0.0f, 1.0f, 0.0f, matrix_rotate); + + multiply_matrix(matrix_rotate, matrix_modelview, matrix_modelview); + + /* Pull the camera back from the cube */ + matrix_modelview[14] -= 2.5; + + perspective_matrix(45.0f, (float)width/height, 0.01f, 100.0f, matrix_perspective); + multiply_matrix(matrix_perspective, matrix_modelview, matrix_mvp); + + GL_CHECK(ctx.glUniformMatrix4fv(data->attr_mvp, 1, GL_FALSE, matrix_mvp)); + + data->angle_x += 3; + data->angle_y += 2; + data->angle_z += 1; + + if(data->angle_x >= 360) data->angle_x -= 360; + if(data->angle_x < 0) data->angle_x += 360; + if(data->angle_y >= 360) data->angle_y -= 360; + if(data->angle_y < 0) data->angle_y += 360; + if(data->angle_z >= 360) data->angle_z -= 360; + if(data->angle_z < 0) data->angle_z += 360; + + GL_CHECK(ctx.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT)); + GL_CHECK(ctx.glDrawArrays(GL_TRIANGLES, 0, 36)); +} + +int done; +Uint32 frames; +shader_data *datas; + +void loop() +{ + SDL_Event event; + int i; + int status; + + /* Check for events */ + ++frames; + while (SDL_PollEvent(&event) && !done) { + switch (event.type) { + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_RESIZED: + for (i = 0; i < state->num_windows; ++i) { + if (event.window.windowID == SDL_GetWindowID(state->windows[i])) { + int w, h; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + break; + } + /* Change view port to the new window dimensions */ + SDL_GL_GetDrawableSize(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + state->window_w = event.window.data1; + state->window_h = event.window.data2; + /* Update window content */ + Render(event.window.data1, event.window.data2, &datas[i]); + SDL_GL_SwapWindow(state->windows[i]); + break; + } + } + break; + } + } + SDLTest_CommonEvent(state, &event, &done); + } + if (!done) { + for (i = 0; i < state->num_windows; ++i) { + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + Render(state->window_w, state->window_h, &datas[i]); + SDL_GL_SwapWindow(state->windows[i]); + } + } +#ifdef __EMSCRIPTEN__ + else { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int fsaa, accel; + int value; + int i; + SDL_DisplayMode mode; + Uint32 then, now; + int status; + shader_data *data; + + /* Initialize parameters */ + fsaa = 0; + accel = 0; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + if (SDL_strcasecmp(argv[i], "--fsaa") == 0) { + ++fsaa; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--accel") == 0) { + ++accel; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--zdepth") == 0) { + i++; + if (!argv[i]) { + consumed = -1; + } else { + depth = SDL_atoi(argv[i]); + consumed = 1; + } + } else { + consumed = -1; + } + } + if (consumed < 0) { + SDL_Log ("Usage: %s %s [--fsaa] [--accel] [--zdepth %%d]\n", argv[0], + SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + + /* Set OpenGL parameters */ + state->window_flags |= SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_BORDERLESS; + state->gl_red_size = 5; + state->gl_green_size = 5; + state->gl_blue_size = 5; + state->gl_depth_size = depth; + state->gl_major_version = 2; + state->gl_minor_version = 0; + state->gl_profile_mask = SDL_GL_CONTEXT_PROFILE_ES; + + if (fsaa) { + state->gl_multisamplebuffers=1; + state->gl_multisamplesamples=fsaa; + } + if (accel) { + state->gl_accelerated=1; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + return 0; + } + + context = SDL_calloc(state->num_windows, sizeof(context)); + if (context == NULL) { + SDL_Log("Out of memory!\n"); + quit(2); + } + + /* Create OpenGL ES contexts */ + for (i = 0; i < state->num_windows; i++) { + context[i] = SDL_GL_CreateContext(state->windows[i]); + if (!context[i]) { + SDL_Log("SDL_GL_CreateContext(): %s\n", SDL_GetError()); + quit(2); + } + } + + /* Important: call this *after* creating the context */ + if (LoadContext(&ctx) < 0) { + SDL_Log("Could not load GLES2 functions\n"); + quit(2); + return 0; + } + + + + if (state->render_flags & SDL_RENDERER_PRESENTVSYNC) { + SDL_GL_SetSwapInterval(1); + } else { + SDL_GL_SetSwapInterval(0); + } + + SDL_GetCurrentDisplayMode(0, &mode); + SDL_Log("Screen bpp: %d\n", SDL_BITSPERPIXEL(mode.format)); + SDL_Log("\n"); + SDL_Log("Vendor : %s\n", ctx.glGetString(GL_VENDOR)); + SDL_Log("Renderer : %s\n", ctx.glGetString(GL_RENDERER)); + SDL_Log("Version : %s\n", ctx.glGetString(GL_VERSION)); + SDL_Log("Extensions : %s\n", ctx.glGetString(GL_EXTENSIONS)); + SDL_Log("\n"); + + status = SDL_GL_GetAttribute(SDL_GL_RED_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_RED_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log( "Failed to get SDL_GL_RED_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_GREEN_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_GREEN_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log( "Failed to get SDL_GL_GREEN_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_BLUE_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_BLUE_SIZE: requested %d, got %d\n", 5, value); + } else { + SDL_Log( "Failed to get SDL_GL_BLUE_SIZE: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_DEPTH_SIZE, &value); + if (!status) { + SDL_Log("SDL_GL_DEPTH_SIZE: requested %d, got %d\n", depth, value); + } else { + SDL_Log( "Failed to get SDL_GL_DEPTH_SIZE: %s\n", + SDL_GetError()); + } + if (fsaa) { + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLEBUFFERS, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLEBUFFERS: requested 1, got %d\n", value); + } else { + SDL_Log( "Failed to get SDL_GL_MULTISAMPLEBUFFERS: %s\n", + SDL_GetError()); + } + status = SDL_GL_GetAttribute(SDL_GL_MULTISAMPLESAMPLES, &value); + if (!status) { + SDL_Log("SDL_GL_MULTISAMPLESAMPLES: requested %d, got %d\n", fsaa, + value); + } else { + SDL_Log( "Failed to get SDL_GL_MULTISAMPLESAMPLES: %s\n", + SDL_GetError()); + } + } + if (accel) { + status = SDL_GL_GetAttribute(SDL_GL_ACCELERATED_VISUAL, &value); + if (!status) { + SDL_Log("SDL_GL_ACCELERATED_VISUAL: requested 1, got %d\n", value); + } else { + SDL_Log( "Failed to get SDL_GL_ACCELERATED_VISUAL: %s\n", + SDL_GetError()); + } + } + + datas = SDL_calloc(state->num_windows, sizeof(shader_data)); + + /* Set rendering settings for each context */ + for (i = 0; i < state->num_windows; ++i) { + + int w, h; + status = SDL_GL_MakeCurrent(state->windows[i], context[i]); + if (status) { + SDL_Log("SDL_GL_MakeCurrent(): %s\n", SDL_GetError()); + + /* Continue for next window */ + continue; + } + SDL_GL_GetDrawableSize(state->windows[i], &w, &h); + ctx.glViewport(0, 0, w, h); + + data = &datas[i]; + data->angle_x = 0; data->angle_y = 0; data->angle_z = 0; + + /* Shader Initialization */ + process_shader(&data->shader_vert, _shader_vert_src, GL_VERTEX_SHADER); + process_shader(&data->shader_frag, _shader_frag_src, GL_FRAGMENT_SHADER); + + /* Create shader_program (ready to attach shaders) */ + data->shader_program = GL_CHECK(ctx.glCreateProgram()); + + /* Attach shaders and link shader_program */ + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_vert)); + GL_CHECK(ctx.glAttachShader(data->shader_program, data->shader_frag)); + GL_CHECK(ctx.glLinkProgram(data->shader_program)); + + /* Get attribute locations of non-fixed attributes like color and texture coordinates. */ + data->attr_position = GL_CHECK(ctx.glGetAttribLocation(data->shader_program, "av4position")); + data->attr_color = GL_CHECK(ctx.glGetAttribLocation(data->shader_program, "av3color")); + + /* Get uniform locations */ + data->attr_mvp = GL_CHECK(ctx.glGetUniformLocation(data->shader_program, "mvp")); + + GL_CHECK(ctx.glUseProgram(data->shader_program)); + + /* Enable attributes for position, color and texture coordinates etc. */ + GL_CHECK(ctx.glEnableVertexAttribArray(data->attr_position)); + GL_CHECK(ctx.glEnableVertexAttribArray(data->attr_color)); + + /* Populate attributes for position, color and texture coordinates etc. */ + GL_CHECK(ctx.glVertexAttribPointer(data->attr_position, 3, GL_FLOAT, GL_FALSE, 0, _vertices)); + GL_CHECK(ctx.glVertexAttribPointer(data->attr_color, 3, GL_FLOAT, GL_FALSE, 0, _colors)); + + GL_CHECK(ctx.glEnable(GL_CULL_FACE)); + GL_CHECK(ctx.glEnable(GL_DEPTH_TEST)); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + SDL_Log("%2.2f frames per second\n", + ((double) frames * 1000) / (now - then)); + } +#if !defined(__ANDROID__) && !defined(__NACL__) + quit(0); +#endif + return 0; +} + +#else /* HAVE_OPENGLES2 */ + +int +main(int argc, char *argv[]) +{ + SDL_Log("No OpenGL ES support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGLES2 */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testhaptic.c b/Engine/lib/sdl/test/testhaptic.c new file mode 100644 index 0000000000..bffe4467de --- /dev/null +++ b/Engine/lib/sdl/test/testhaptic.c @@ -0,0 +1,369 @@ +/* +Copyright (c) 2008, Edgar Simo Serra +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the Simple Directmedia Layer (SDL) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * includes + */ +#include +#include /* strstr */ +#include /* isdigit */ + +#include "SDL.h" + +#ifndef SDL_HAPTIC_DISABLED + +static SDL_Haptic *haptic; + + +/* + * prototypes + */ +static void abort_execution(void); +static void HapticPrintSupported(SDL_Haptic * haptic); + + +/** + * @brief The entry point of this force feedback demo. + * @param[in] argc Number of arguments. + * @param[in] argv Array of argc arguments. + */ +int +main(int argc, char **argv) +{ + int i; + char *name; + int index; + SDL_HapticEffect efx[9]; + int id[9]; + int nefx; + unsigned int supported; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + name = NULL; + index = -1; + if (argc > 1) { + name = argv[1]; + if ((strcmp(name, "--help") == 0) || (strcmp(name, "-h") == 0)) { + SDL_Log("USAGE: %s [device]\n" + "If device is a two-digit number it'll use it as an index, otherwise\n" + "it'll use it as if it were part of the device's name.\n", + argv[0]); + return 0; + } + + i = strlen(name); + if ((i < 3) && isdigit(name[0]) && ((i == 1) || isdigit(name[1]))) { + index = atoi(name); + name = NULL; + } + } + + /* Initialize the force feedbackness */ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK | + SDL_INIT_HAPTIC); + SDL_Log("%d Haptic devices detected.\n", SDL_NumHaptics()); + if (SDL_NumHaptics() > 0) { + /* We'll just use index or the first force feedback device found */ + if (name == NULL) { + i = (index != -1) ? index : 0; + } + /* Try to find matching device */ + else { + for (i = 0; i < SDL_NumHaptics(); i++) { + if (strstr(SDL_HapticName(i), name) != NULL) + break; + } + + if (i >= SDL_NumHaptics()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to find device matching '%s', aborting.\n", + name); + return 1; + } + } + + haptic = SDL_HapticOpen(i); + if (haptic == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create the haptic device: %s\n", + SDL_GetError()); + return 1; + } + SDL_Log("Device: %s\n", SDL_HapticName(i)); + HapticPrintSupported(haptic); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Haptic devices found!\n"); + return 1; + } + + /* We only want force feedback errors. */ + SDL_ClearError(); + + /* Create effects. */ + memset(&efx, 0, sizeof(efx)); + nefx = 0; + supported = SDL_HapticQuery(haptic); + + SDL_Log("\nUploading effects\n"); + /* First we'll try a SINE effect. */ + if (supported & SDL_HAPTIC_SINE) { + SDL_Log(" effect %d: Sine Wave\n", nefx); + efx[nefx].type = SDL_HAPTIC_SINE; + efx[nefx].periodic.period = 1000; + efx[nefx].periodic.magnitude = -0x2000; /* Negative magnitude and ... */ + efx[nefx].periodic.phase = 18000; /* ... 180 degrees phase shift => cancel eachother */ + efx[nefx].periodic.length = 5000; + efx[nefx].periodic.attack_length = 1000; + efx[nefx].periodic.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* Now we'll try a SAWTOOTHUP */ + if (supported & SDL_HAPTIC_SAWTOOTHUP) { + SDL_Log(" effect %d: Sawtooth Up\n", nefx); + efx[nefx].type = SDL_HAPTIC_SAWTOOTHUP; + efx[nefx].periodic.period = 500; + efx[nefx].periodic.magnitude = 0x5000; + efx[nefx].periodic.length = 5000; + efx[nefx].periodic.attack_length = 1000; + efx[nefx].periodic.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Now the classical constant effect. */ + if (supported & SDL_HAPTIC_CONSTANT) { + SDL_Log(" effect %d: Constant Force\n", nefx); + efx[nefx].type = SDL_HAPTIC_CONSTANT; + efx[nefx].constant.direction.type = SDL_HAPTIC_POLAR; + efx[nefx].constant.direction.dir[0] = 20000; /* Force comes from the south-west. */ + efx[nefx].constant.length = 5000; + efx[nefx].constant.level = 0x6000; + efx[nefx].constant.attack_length = 1000; + efx[nefx].constant.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* The cute spring effect. */ + if (supported & SDL_HAPTIC_SPRING) { + SDL_Log(" effect %d: Condition Spring\n", nefx); + efx[nefx].type = SDL_HAPTIC_SPRING; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + efx[nefx].condition.center[i] = 0x1000; /* Displace the center for it to move. */ + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The interesting damper effect. */ + if (supported & SDL_HAPTIC_DAMPER) { + SDL_Log(" effect %d: Condition Damper\n", nefx); + efx[nefx].type = SDL_HAPTIC_DAMPER; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The pretty awesome inertia effect. */ + if (supported & SDL_HAPTIC_INERTIA) { + SDL_Log(" effect %d: Condition Inertia\n", nefx); + efx[nefx].type = SDL_HAPTIC_INERTIA; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + efx[nefx].condition.deadband[i] = 0x1000; /* 1/16th of axis-range around the center is 'dead'. */ + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + /* The hot friction effect. */ + if (supported & SDL_HAPTIC_FRICTION) { + SDL_Log(" effect %d: Condition Friction\n", nefx); + efx[nefx].type = SDL_HAPTIC_FRICTION; + efx[nefx].condition.length = 5000; + for (i = 0; i < SDL_HapticNumAxes(haptic); i++) { + efx[nefx].condition.right_sat[i] = 0xFFFF; + efx[nefx].condition.left_sat[i] = 0xFFFF; + efx[nefx].condition.right_coeff[i] = 0x2000; + efx[nefx].condition.left_coeff[i] = 0x2000; + } + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Now we'll try a ramp effect */ + if (supported & SDL_HAPTIC_RAMP) { + SDL_Log(" effect %d: Ramp\n", nefx); + efx[nefx].type = SDL_HAPTIC_RAMP; + efx[nefx].ramp.direction.type = SDL_HAPTIC_CARTESIAN; + efx[nefx].ramp.direction.dir[0] = 1; /* Force comes from */ + efx[nefx].ramp.direction.dir[1] = -1; /* the north-east. */ + efx[nefx].ramp.length = 5000; + efx[nefx].ramp.start = 0x4000; + efx[nefx].ramp.end = -0x4000; + efx[nefx].ramp.attack_length = 1000; + efx[nefx].ramp.fade_length = 1000; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + /* Finally we'll try a left/right effect. */ + if (supported & SDL_HAPTIC_LEFTRIGHT) { + SDL_Log(" effect %d: Left/Right\n", nefx); + efx[nefx].type = SDL_HAPTIC_LEFTRIGHT; + efx[nefx].leftright.length = 5000; + efx[nefx].leftright.large_magnitude = 0x3000; + efx[nefx].leftright.small_magnitude = 0xFFFF; + id[nefx] = SDL_HapticNewEffect(haptic, &efx[nefx]); + if (id[nefx] < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "UPLOADING EFFECT ERROR: %s\n", SDL_GetError()); + abort_execution(); + } + nefx++; + } + + + SDL_Log + ("\nNow playing effects for 5 seconds each with 1 second delay between\n"); + for (i = 0; i < nefx; i++) { + SDL_Log(" Playing effect %d\n", i); + SDL_HapticRunEffect(haptic, id[i], 1); + SDL_Delay(6000); /* Effects only have length 5000 */ + } + + /* Quit */ + if (haptic != NULL) + SDL_HapticClose(haptic); + SDL_Quit(); + + return 0; +} + + +/* + * Cleans up a bit. + */ +static void +abort_execution(void) +{ + SDL_Log("\nAborting program execution.\n"); + + SDL_HapticClose(haptic); + SDL_Quit(); + + exit(1); +} + + +/* + * Displays information about the haptic device. + */ +static void +HapticPrintSupported(SDL_Haptic * haptic) +{ + unsigned int supported; + + supported = SDL_HapticQuery(haptic); + SDL_Log(" Supported effects [%d effects, %d playing]:\n", + SDL_HapticNumEffects(haptic), SDL_HapticNumEffectsPlaying(haptic)); + if (supported & SDL_HAPTIC_CONSTANT) + SDL_Log(" constant\n"); + if (supported & SDL_HAPTIC_SINE) + SDL_Log(" sine\n"); + /* !!! FIXME: put this back when we have more bits in 2.1 */ + /* if (supported & SDL_HAPTIC_SQUARE) + SDL_Log(" square\n"); */ + if (supported & SDL_HAPTIC_TRIANGLE) + SDL_Log(" triangle\n"); + if (supported & SDL_HAPTIC_SAWTOOTHUP) + SDL_Log(" sawtoothup\n"); + if (supported & SDL_HAPTIC_SAWTOOTHDOWN) + SDL_Log(" sawtoothdown\n"); + if (supported & SDL_HAPTIC_RAMP) + SDL_Log(" ramp\n"); + if (supported & SDL_HAPTIC_FRICTION) + SDL_Log(" friction\n"); + if (supported & SDL_HAPTIC_SPRING) + SDL_Log(" spring\n"); + if (supported & SDL_HAPTIC_DAMPER) + SDL_Log(" damper\n"); + if (supported & SDL_HAPTIC_INERTIA) + SDL_Log(" inertia\n"); + if (supported & SDL_HAPTIC_CUSTOM) + SDL_Log(" custom\n"); + if (supported & SDL_HAPTIC_LEFTRIGHT) + SDL_Log(" left/right\n"); + SDL_Log(" Supported capabilities:\n"); + if (supported & SDL_HAPTIC_GAIN) + SDL_Log(" gain\n"); + if (supported & SDL_HAPTIC_AUTOCENTER) + SDL_Log(" autocenter\n"); + if (supported & SDL_HAPTIC_STATUS) + SDL_Log(" status\n"); +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Haptic support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testhittesting.c b/Engine/lib/sdl/test/testhittesting.c new file mode 100644 index 0000000000..5e32be42d0 --- /dev/null +++ b/Engine/lib/sdl/test/testhittesting.c @@ -0,0 +1,134 @@ +#include +#include "SDL.h" + +/* !!! FIXME: rewrite this to be wired in to test framework. */ + +#define RESIZE_BORDER 20 + +const SDL_Rect drag_areas[] = { + { 20, 20, 100, 100 }, + { 200, 70, 100, 100 }, + { 400, 90, 100, 100 } +}; + +static const SDL_Rect *areas = drag_areas; +static int numareas = SDL_arraysize(drag_areas); + +static SDL_HitTestResult +hitTest(SDL_Window *window, const SDL_Point *pt, void *data) +{ + int i; + int w, h; + + for (i = 0; i < numareas; i++) { + if (SDL_PointInRect(pt, &areas[i])) { + SDL_Log("HIT-TEST: DRAGGABLE\n"); + return SDL_HITTEST_DRAGGABLE; + } + } + + SDL_GetWindowSize(window, &w, &h); + + #define REPORT_RESIZE_HIT(name) { \ + SDL_Log("HIT-TEST: RESIZE_" #name "\n"); \ + return SDL_HITTEST_RESIZE_##name; \ + } + + if (pt->x < RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOPLEFT); + } else if (pt->x > RESIZE_BORDER && pt->x < w - RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOP); + } else if (pt->x > w - RESIZE_BORDER && pt->y < RESIZE_BORDER) { + REPORT_RESIZE_HIT(TOPRIGHT); + } else if (pt->x > w - RESIZE_BORDER && pt->y > RESIZE_BORDER && pt->y < h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(RIGHT); + } else if (pt->x > w - RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOMRIGHT); + } else if (pt->x < w - RESIZE_BORDER && pt->x > RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOM); + } else if (pt->x < RESIZE_BORDER && pt->y > h - RESIZE_BORDER) { + REPORT_RESIZE_HIT(BOTTOMLEFT); + } else if (pt->x < RESIZE_BORDER && pt->y < h - RESIZE_BORDER && pt->y > RESIZE_BORDER) { + REPORT_RESIZE_HIT(LEFT); + } + + SDL_Log("HIT-TEST: NORMAL\n"); + return SDL_HITTEST_NORMAL; +} + + +int main(int argc, char **argv) +{ + int done = 0; + SDL_Window *window; + SDL_Renderer *renderer; + + /* !!! FIXME: check for errors. */ + SDL_Init(SDL_INIT_VIDEO); + window = SDL_CreateWindow("Drag the red boxes", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_BORDERLESS | SDL_WINDOW_RESIZABLE); + renderer = SDL_CreateRenderer(window, -1, 0); + + if (SDL_SetWindowHitTest(window, hitTest, NULL) == -1) { + SDL_Log("Enabling hit-testing failed!\n"); + SDL_Quit(); + return 1; + } + + while (!done) + { + SDL_Event e; + int nothing_to_do = 1; + + SDL_SetRenderDrawColor(renderer, 0, 0, 127, 255); + SDL_RenderClear(renderer); + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderFillRects(renderer, areas, SDL_arraysize(drag_areas)); + SDL_RenderPresent(renderer); + + while (SDL_PollEvent(&e)) { + nothing_to_do = 0; + + switch (e.type) + { + case SDL_MOUSEBUTTONDOWN: + SDL_Log("button down!\n"); + break; + + case SDL_MOUSEBUTTONUP: + SDL_Log("button up!\n"); + break; + + case SDL_WINDOWEVENT: + if (e.window.event == SDL_WINDOWEVENT_MOVED) { + SDL_Log("Window event moved to (%d, %d)!\n", (int) e.window.data1, (int) e.window.data2); + } + break; + + case SDL_KEYDOWN: + if (e.key.keysym.sym == SDLK_ESCAPE) { + done = 1; + } else if (e.key.keysym.sym == SDLK_x) { + if (!areas) { + areas = drag_areas; + numareas = SDL_arraysize(drag_areas); + } else { + areas = NULL; + numareas = 0; + } + } + break; + + case SDL_QUIT: + done = 1; + break; + } + } + + if (nothing_to_do) { + SDL_Delay(50); + } + } + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testhotplug.c b/Engine/lib/sdl/test/testhotplug.c new file mode 100644 index 0000000000..1fa9637548 --- /dev/null +++ b/Engine/lib/sdl/test/testhotplug.c @@ -0,0 +1,162 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program to test the SDL joystick hotplugging */ + +#include +#include +#include + +#include "SDL.h" + +#if !defined SDL_JOYSTICK_DISABLED && !defined SDL_HAPTIC_DISABLED + +int +main(int argc, char *argv[]) +{ + SDL_Joystick *joystick = NULL; + SDL_Haptic *haptic = NULL; + SDL_JoystickID instance = -1; + SDL_bool keepGoing = SDL_TRUE; + int i; + SDL_bool enable_haptic = SDL_TRUE; + Uint32 init_subsystems = SDL_INIT_VIDEO | SDL_INIT_JOYSTICK; + + for (i = 1; i < argc; ++i) { + if (SDL_strcasecmp(argv[i], "--nohaptic") == 0) { + enable_haptic = SDL_FALSE; + } + } + + if(enable_haptic) { + init_subsystems |= SDL_INIT_HAPTIC; + } + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(init_subsystems) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* + //SDL_CreateWindow("Dummy", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 128, 128, 0); + */ + + SDL_Log("There are %d joysticks at startup\n", SDL_NumJoysticks()); + if (enable_haptic) + SDL_Log("There are %d haptic devices at startup\n", SDL_NumHaptics()); + + while(keepGoing) + { + SDL_Event event; + while(SDL_PollEvent(&event)) + { + switch(event.type) + { + case SDL_QUIT: + keepGoing = SDL_FALSE; + break; + case SDL_JOYDEVICEADDED: + if (joystick != NULL) + { + SDL_Log("Only one joystick supported by this test\n"); + } + else + { + joystick = SDL_JoystickOpen(event.jdevice.which); + instance = SDL_JoystickInstanceID(joystick); + SDL_Log("Joy Added : %d : %s\n", event.jdevice.which, SDL_JoystickName(joystick)); + if (enable_haptic) + { + if (SDL_JoystickIsHaptic(joystick)) + { + haptic = SDL_HapticOpenFromJoystick(joystick); + if (haptic) + { + SDL_Log("Joy Haptic Opened\n"); + if (SDL_HapticRumbleInit( haptic ) != 0) + { + SDL_Log("Could not init Rumble!: %s\n", SDL_GetError()); + SDL_HapticClose(haptic); + haptic = NULL; + } + } else { + SDL_Log("Joy haptic open FAILED!: %s\n", SDL_GetError()); + } + } + else + { + SDL_Log("No haptic found\n"); + } + } + } + break; + case SDL_JOYDEVICEREMOVED: + if (instance == event.jdevice.which) + { + SDL_Log("Joy Removed: %d\n", event.jdevice.which); + instance = -1; + if(enable_haptic && haptic) + { + SDL_HapticClose(haptic); + haptic = NULL; + } + SDL_JoystickClose(joystick); + joystick = NULL; + } else { + SDL_Log("Unknown joystick diconnected\n"); + } + break; + case SDL_JOYAXISMOTION: +/* +// SDL_Log("Axis Move: %d\n", event.jaxis.axis); +*/ + if (enable_haptic) + SDL_HapticRumblePlay(haptic, 0.25, 250); + break; + case SDL_JOYBUTTONDOWN: + SDL_Log("Button Press: %d\n", event.jbutton.button); + if(enable_haptic && haptic) + { + SDL_HapticRumblePlay(haptic, 0.25, 250); + } + if (event.jbutton.button == 0) { + SDL_Log("Exiting due to button press of button 0\n"); + keepGoing = SDL_FALSE; + } + break; + case SDL_JOYBUTTONUP: + SDL_Log("Button Release: %d\n", event.jbutton.button); + break; + } + } + } + + SDL_Quit(); + + return 0; +} +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick and haptic support.\n"); + return 1; +} + +#endif diff --git a/Engine/lib/sdl/test/testiconv.c b/Engine/lib/sdl/test/testiconv.c new file mode 100644 index 0000000000..79efec8aaa --- /dev/null +++ b/Engine/lib/sdl/test/testiconv.c @@ -0,0 +1,88 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include + +#include "SDL.h" + +static size_t +widelen(char *data) +{ + size_t len = 0; + Uint32 *p = (Uint32 *) data; + while (*p++) { + ++len; + } + return len; +} + +int +main(int argc, char *argv[]) +{ + const char *formats[] = { + "UTF8", + "UTF-8", + "UTF16BE", + "UTF-16BE", + "UTF16LE", + "UTF-16LE", + "UTF32BE", + "UTF-32BE", + "UTF32LE", + "UTF-32LE", + "UCS4", + "UCS-4", + }; + char buffer[BUFSIZ]; + char *ucs4; + char *test[2]; + int i; + FILE *file; + int errors = 0; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (!argv[1]) { + argv[1] = "utf8.txt"; + } + file = fopen(argv[1], "rb"); + if (!file) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to open %s\n", argv[1]); + return (1); + } + + while (fgets(buffer, sizeof(buffer), file)) { + /* Convert to UCS-4 */ + size_t len; + ucs4 = + SDL_iconv_string("UCS-4", "UTF-8", buffer, + SDL_strlen(buffer) + 1); + len = (widelen(ucs4) + 1) * 4; + for (i = 0; i < SDL_arraysize(formats); ++i) { + test[0] = SDL_iconv_string(formats[i], "UCS-4", ucs4, len); + test[1] = SDL_iconv_string("UCS-4", formats[i], test[0], len); + if (!test[1] || SDL_memcmp(test[1], ucs4, len) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "FAIL: %s\n", formats[i]); + ++errors; + } + SDL_free(test[0]); + SDL_free(test[1]); + } + test[0] = SDL_iconv_string("UTF-8", "UCS-4", ucs4, len); + SDL_free(ucs4); + fputs(test[0], stdout); + SDL_free(test[0]); + } + fclose(file); + return (errors ? errors + 1 : 0); +} diff --git a/Engine/lib/sdl/test/testime.c b/Engine/lib/sdl/test/testime.c new file mode 100644 index 0000000000..d6e7ea1f26 --- /dev/null +++ b/Engine/lib/sdl/test/testime.c @@ -0,0 +1,373 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* A simple program to test the Input Method support in the SDL library (2.0+) */ + +#include +#include +#include + +#include "SDL.h" +#ifdef HAVE_SDL_TTF +#include "SDL_ttf.h" +#endif + +#include "SDL_test_common.h" + +#define DEFAULT_PTSIZE 30 +#define DEFAULT_FONT "/System/Library/Fonts/åŽæ–‡ç»†é»‘.ttf" +#define MAX_TEXT_LENGTH 256 + +static SDLTest_CommonState *state; +static SDL_Rect textRect, markedRect; +static SDL_Color lineColor = {0,0,0,0}; +static SDL_Color backColor = {255,255,255,0}; +static SDL_Color textColor = {0,0,0,0}; +static char text[MAX_TEXT_LENGTH], markedText[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; +static int cursor = 0; +#ifdef HAVE_SDL_TTF +static TTF_Font *font; +#endif + +size_t utf8_length(unsigned char c) +{ + c = (unsigned char)(0xff & c); + if (c < 0x80) + return 1; + else if ((c >> 5) ==0x6) + return 2; + else if ((c >> 4) == 0xe) + return 3; + else if ((c >> 3) == 0x1e) + return 4; + else + return 0; +} + +char *utf8_next(char *p) +{ + size_t len = utf8_length(*p); + size_t i = 0; + if (!len) + return 0; + + for (; i < len; ++i) + { + ++p; + if (!*p) + return 0; + } + return p; +} + +char *utf8_advance(char *p, size_t distance) +{ + size_t i = 0; + for (; i < distance && p; ++i) + { + p = utf8_next(p); + } + return p; +} + +void usage() +{ + SDL_Log("usage: testime [--font fontfile]\n"); + exit(0); +} + +void InitInput() +{ + + /* Prepare a rect for text input */ + textRect.x = textRect.y = 100; + textRect.w = DEFAULT_WINDOW_WIDTH - 2 * textRect.x; + textRect.h = 50; + + text[0] = 0; + markedRect = textRect; + markedText[0] = 0; + + SDL_StartTextInput(); +} + +void CleanupVideo() +{ + SDL_StopTextInput(); +#ifdef HAVE_SDL_TTF + TTF_CloseFont(font); + TTF_Quit(); +#endif +} + + +void _Redraw(SDL_Renderer * renderer) { + int w = 0, h = textRect.h; + SDL_Rect cursorRect, underlineRect; + + SDL_SetRenderDrawColor(renderer, 255,255,255,255); + SDL_RenderFillRect(renderer,&textRect); + +#ifdef HAVE_SDL_TTF + if (*text) + { + SDL_Surface *textSur = TTF_RenderUTF8_Blended(font, text, textColor); + SDL_Rect dest = {textRect.x, textRect.y, textSur->w, textSur->h }; + + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer,textSur); + SDL_FreeSurface(textSur); + + SDL_RenderCopy(renderer,texture,NULL,&dest); + SDL_DestroyTexture(texture); + TTF_SizeUTF8(font, text, &w, &h); + } +#endif + + markedRect.x = textRect.x + w; + markedRect.w = textRect.w - w; + if (markedRect.w < 0) + { + /* Stop text input because we cannot hold any more characters */ + SDL_StopTextInput(); + return; + } + else + { + SDL_StartTextInput(); + } + + cursorRect = markedRect; + cursorRect.w = 2; + cursorRect.h = h; + + SDL_SetRenderDrawColor(renderer, 255,255,255,255); + SDL_RenderFillRect(renderer,&markedRect); + + if (markedText[0]) + { +#ifdef HAVE_SDL_TTF + if (cursor) + { + char *p = utf8_advance(markedText, cursor); + char c = 0; + if (!p) + p = &markedText[strlen(markedText)]; + + c = *p; + *p = 0; + TTF_SizeUTF8(font, markedText, &w, 0); + cursorRect.x += w; + *p = c; + } + SDL_Surface *textSur = TTF_RenderUTF8_Blended(font, markedText, textColor); + SDL_Rect dest = {markedRect.x, markedRect.y, textSur->w, textSur->h }; + TTF_SizeUTF8(font, markedText, &w, &h); + SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer,textSur); + SDL_FreeSurface(textSur); + + SDL_RenderCopy(renderer,texture,NULL,&dest); + SDL_DestroyTexture(texture); +#endif + + underlineRect = markedRect; + underlineRect.y += (h - 2); + underlineRect.h = 2; + underlineRect.w = w; + + SDL_SetRenderDrawColor(renderer, 0,0,0,0); + SDL_RenderFillRect(renderer,&markedRect); + } + + SDL_SetRenderDrawColor(renderer, 0,0,0,0); + SDL_RenderFillRect(renderer,&cursorRect); + + SDL_SetTextInputRect(&markedRect); +} + +void Redraw() { + int i; + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); + SDL_RenderClear(renderer); + + _Redraw(renderer); + + SDL_RenderPresent(renderer); + } +} + +int main(int argc, char *argv[]) { + int i, done; + SDL_Event event; + const char *fontname = DEFAULT_FONT; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;i++) { + SDLTest_CommonArg(state, i); + } + for (argc--, argv++; argc > 0; argc--, argv++) + { + if (strcmp(argv[0], "--help") == 0) { + usage(); + return 0; + } + + else if (strcmp(argv[0], "--font") == 0) + { + argc--; + argv++; + + if (argc > 0) + fontname = argv[0]; + else { + usage(); + return 0; + } + } + } + + if (!SDLTest_CommonInit(state)) { + return 2; + } + + +#ifdef HAVE_SDL_TTF + /* Initialize fonts */ + TTF_Init(); + + font = TTF_OpenFont(fontname, DEFAULT_PTSIZE); + if (! font) + { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to find font: %s\n", TTF_GetError()); + exit(-1); + } +#endif + + SDL_Log("Using font: %s\n", fontname); + atexit(SDL_Quit); + + InitInput(); + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + Redraw(); + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch(event.type) { + case SDL_KEYDOWN: { + switch (event.key.keysym.sym) + { + case SDLK_RETURN: + text[0]=0x00; + Redraw(); + break; + case SDLK_BACKSPACE: + { + size_t textlen = SDL_strlen(text); + + do { + if (textlen==0) + { + break; + } + if ((text[textlen-1] & 0x80) == 0x00) + { + /* One byte */ + text[textlen-1]=0x00; + break; + } + if ((text[textlen-1] & 0xC0) == 0x80) + { + /* Byte from the multibyte sequence */ + text[textlen-1]=0x00; + textlen--; + } + if ((text[textlen-1] & 0xC0) == 0xC0) + { + /* First byte of multibyte sequence */ + text[textlen-1]=0x00; + break; + } + } while(1); + + Redraw(); + } + break; + } + + if (done) + { + break; + } + + SDL_Log("Keyboard: scancode 0x%08X = %s, keycode 0x%08X = %s\n", + event.key.keysym.scancode, + SDL_GetScancodeName(event.key.keysym.scancode), + event.key.keysym.sym, SDL_GetKeyName(event.key.keysym.sym)); + break; + + case SDL_TEXTINPUT: + if (event.text.text[0] == '\0' || event.text.text[0] == '\n' || + markedRect.w < 0) + break; + + SDL_Log("Keyboard: text input \"%s\"\n", event.text.text); + + if (SDL_strlen(text) + SDL_strlen(event.text.text) < sizeof(text)) + SDL_strlcat(text, event.text.text, sizeof(text)); + + SDL_Log("text inputed: %s\n", text); + + /* After text inputed, we can clear up markedText because it */ + /* is committed */ + markedText[0] = 0; + Redraw(); + break; + + case SDL_TEXTEDITING: + SDL_Log("text editing \"%s\", selected range (%d, %d)\n", + event.edit.text, event.edit.start, event.edit.length); + + strcpy(markedText, event.edit.text); + cursor = event.edit.start; + Redraw(); + break; + } + break; + + } + } + } + CleanupVideo(); + SDLTest_CommonQuit(state); + return 0; +} + + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testintersections.c b/Engine/lib/sdl/test/testintersections.c new file mode 100644 index 0000000000..82aae63388 --- /dev/null +++ b/Engine/lib/sdl/test/testintersections.c @@ -0,0 +1,363 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program: draw as many random objects on the screen as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#define SWAP(typ,a,b) do{typ t=a;a=b;b=t;}while(0) +#define NUM_OBJECTS 100 + +static SDLTest_CommonState *state; +static int num_objects; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 255; +static int current_color = 255; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; + +int mouse_begin_x = -1, mouse_begin_y = -1; +int done; + +void +DrawPoints(SDL_Renderer * renderer) +{ + int i; + int x, y; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + for (i = 0; i < num_objects * 4; ++i) { + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + } + SDL_SetRenderDrawColor(renderer, 255, (Uint8) current_color, + (Uint8) current_color, (Uint8) current_alpha); + + x = rand() % viewport.w; + y = rand() % viewport.h; + SDL_RenderDrawPoint(renderer, x, y); + } +} + +#define MAX_LINES 16 +int num_lines = 0; +SDL_Rect lines[MAX_LINES]; +static int +add_line(int x1, int y1, int x2, int y2) +{ + if (num_lines >= MAX_LINES) + return 0; + if ((x1 == x2) && (y1 == y2)) + return 0; + + SDL_Log("adding line (%d, %d), (%d, %d)\n", x1, y1, x2, y2); + lines[num_lines].x = x1; + lines[num_lines].y = y1; + lines[num_lines].w = x2; + lines[num_lines].h = y2; + + return ++num_lines; +} + + +void +DrawLines(SDL_Renderer * renderer) +{ + int i; + SDL_Rect viewport; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + + for (i = 0; i < num_lines; ++i) { + if (i == -1) { + SDL_RenderDrawLine(renderer, 0, 0, viewport.w - 1, viewport.h - 1); + SDL_RenderDrawLine(renderer, 0, viewport.h - 1, viewport.w - 1, 0); + SDL_RenderDrawLine(renderer, 0, viewport.h / 2, viewport.w - 1, viewport.h / 2); + SDL_RenderDrawLine(renderer, viewport.w / 2, 0, viewport.w / 2, viewport.h - 1); + } else { + SDL_RenderDrawLine(renderer, lines[i].x, lines[i].y, lines[i].w, lines[i].h); + } + } +} + +#define MAX_RECTS 16 +int num_rects = 0; +SDL_Rect rects[MAX_RECTS]; +static int +add_rect(int x1, int y1, int x2, int y2) +{ + if (num_rects >= MAX_RECTS) + return 0; + if ((x1 == x2) || (y1 == y2)) + return 0; + + if (x1 > x2) + SWAP(int, x1, x2); + if (y1 > y2) + SWAP(int, y1, y2); + + SDL_Log("adding rect (%d, %d), (%d, %d) [%dx%d]\n", x1, y1, x2, y2, + x2 - x1, y2 - y1); + + rects[num_rects].x = x1; + rects[num_rects].y = y1; + rects[num_rects].w = x2 - x1; + rects[num_rects].h = y2 - y1; + + return ++num_rects; +} + +static void +DrawRects(SDL_Renderer * renderer) +{ + SDL_SetRenderDrawColor(renderer, 255, 127, 0, 255); + SDL_RenderFillRects(renderer, rects, num_rects); +} + +static void +DrawRectLineIntersections(SDL_Renderer * renderer) +{ + int i, j; + + SDL_SetRenderDrawColor(renderer, 0, 255, 55, 255); + + for (i = 0; i < num_rects; i++) + for (j = 0; j < num_lines; j++) { + int x1, y1, x2, y2; + SDL_Rect r; + + r = rects[i]; + x1 = lines[j].x; + y1 = lines[j].y; + x2 = lines[j].w; + y2 = lines[j].h; + + if (SDL_IntersectRectAndLine(&r, &x1, &y1, &x2, &y2)) { + SDL_RenderDrawLine(renderer, x1, y1, x2, y2); + } + } +} + +static void +DrawRectRectIntersections(SDL_Renderer * renderer) +{ + int i, j; + + SDL_SetRenderDrawColor(renderer, 255, 200, 0, 255); + + for (i = 0; i < num_rects; i++) + for (j = i + 1; j < num_rects; j++) { + SDL_Rect r; + if (SDL_IntersectRect(&rects[i], &rects[j], &r)) { + SDL_RenderFillRect(renderer, &r); + } + } +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch (event.type) { + case SDL_MOUSEBUTTONDOWN: + mouse_begin_x = event.button.x; + mouse_begin_y = event.button.y; + break; + case SDL_MOUSEBUTTONUP: + if (event.button.button == 3) + add_line(mouse_begin_x, mouse_begin_y, event.button.x, + event.button.y); + if (event.button.button == 1) + add_rect(mouse_begin_x, mouse_begin_y, event.button.x, + event.button.y); + break; + case SDL_KEYDOWN: + switch (event.key.keysym.sym) { + case 'l': + if (event.key.keysym.mod & KMOD_SHIFT) + num_lines = 0; + else + add_line(rand() % 640, rand() % 480, rand() % 640, + rand() % 480); + break; + case 'r': + if (event.key.keysym.mod & KMOD_SHIFT) + num_rects = 0; + else + add_rect(rand() % 640, rand() % 480, rand() % 640, + rand() % 480); + break; + } + break; + default: + break; + } + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + DrawRects(renderer); + DrawPoints(renderer); + DrawRectRectIntersections(renderer); + DrawLines(renderer); + DrawRectLineIntersections(renderer); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize parameters */ + num_objects = NUM_OBJECTS; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_objects = SDL_atoi(argv[i]); + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha]\n", + argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, blendMode); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand(time(NULL)); + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + SDLTest_CommonQuit(state); + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testjoystick.c b/Engine/lib/sdl/test/testjoystick.c new file mode 100644 index 0000000000..bed27212e1 --- /dev/null +++ b/Engine/lib/sdl/test/testjoystick.c @@ -0,0 +1,346 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program to test the SDL joystick routines */ + +#include +#include +#include + +#include "SDL.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#ifndef SDL_JOYSTICK_DISABLED + +#ifdef __IPHONEOS__ +#define SCREEN_WIDTH 320 +#define SCREEN_HEIGHT 480 +#else +#define SCREEN_WIDTH 640 +#define SCREEN_HEIGHT 480 +#endif + +SDL_Renderer *screen = NULL; +SDL_bool retval = SDL_FALSE; +SDL_bool done = SDL_FALSE; + +static void +DrawRect(SDL_Renderer *r, const int x, const int y, const int w, const int h) +{ + const SDL_Rect area = { x, y, w, h }; + SDL_RenderFillRect(r, &area); +} + +void +loop(void *arg) +{ + SDL_Event event; + int i; + SDL_Joystick *joystick = (SDL_Joystick *)arg; + + /* blank screen, set up for drawing this frame. */ + SDL_SetRenderDrawColor(screen, 0x0, 0x0, 0x0, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + + while (SDL_PollEvent(&event)) { + switch (event.type) { + + case SDL_JOYDEVICEREMOVED: + SDL_Log("Joystick device %d removed.\n", (int) event.jdevice.which); + SDL_Log("Our instance ID is %d\n", (int) SDL_JoystickInstanceID(joystick)); + break; + + case SDL_JOYAXISMOTION: + SDL_Log("Joystick %d axis %d value: %d\n", + event.jaxis.which, + event.jaxis.axis, event.jaxis.value); + break; + case SDL_JOYHATMOTION: + SDL_Log("Joystick %d hat %d value:", + event.jhat.which, event.jhat.hat); + if (event.jhat.value == SDL_HAT_CENTERED) + SDL_Log(" centered"); + if (event.jhat.value & SDL_HAT_UP) + SDL_Log(" up"); + if (event.jhat.value & SDL_HAT_RIGHT) + SDL_Log(" right"); + if (event.jhat.value & SDL_HAT_DOWN) + SDL_Log(" down"); + if (event.jhat.value & SDL_HAT_LEFT) + SDL_Log(" left"); + SDL_Log("\n"); + break; + case SDL_JOYBALLMOTION: + SDL_Log("Joystick %d ball %d delta: (%d,%d)\n", + event.jball.which, + event.jball.ball, event.jball.xrel, event.jball.yrel); + break; + case SDL_JOYBUTTONDOWN: + SDL_Log("Joystick %d button %d down\n", + event.jbutton.which, event.jbutton.button); + break; + case SDL_JOYBUTTONUP: + SDL_Log("Joystick %d button %d up\n", + event.jbutton.which, event.jbutton.button); + break; + case SDL_KEYDOWN: + if ((event.key.keysym.sym != SDLK_ESCAPE) && + (event.key.keysym.sym != SDLK_AC_BACK)) { + break; + } + /* Fall through to signal quit */ + case SDL_FINGERDOWN: + case SDL_MOUSEBUTTONDOWN: + case SDL_QUIT: + done = SDL_TRUE; + break; + default: + break; + } + } + /* Update visual joystick state */ + SDL_SetRenderDrawColor(screen, 0x00, 0xFF, 0x00, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumButtons(joystick); ++i) { + if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) { + DrawRect(screen, (i%20) * 34, SCREEN_HEIGHT - 68 + (i/20) * 34, 32, 32); + } + } + + SDL_SetRenderDrawColor(screen, 0xFF, 0x00, 0x00, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumAxes(joystick); ++i) { + /* Draw the X/Y axis */ + int x, y; + x = (((int) SDL_JoystickGetAxis(joystick, i)) + 32768); + x *= SCREEN_WIDTH; + x /= 65535; + if (x < 0) { + x = 0; + } else if (x > (SCREEN_WIDTH - 16)) { + x = SCREEN_WIDTH - 16; + } + ++i; + if (i < SDL_JoystickNumAxes(joystick)) { + y = (((int) SDL_JoystickGetAxis(joystick, i)) + 32768); + } else { + y = 32768; + } + y *= SCREEN_HEIGHT; + y /= 65535; + if (y < 0) { + y = 0; + } else if (y > (SCREEN_HEIGHT - 16)) { + y = SCREEN_HEIGHT - 16; + } + + DrawRect(screen, x, y, 16, 16); + } + + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0xFF, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumHats(joystick); ++i) { + /* Derive the new position */ + int x = SCREEN_WIDTH/2; + int y = SCREEN_HEIGHT/2; + const Uint8 hat_pos = SDL_JoystickGetHat(joystick, i); + + if (hat_pos & SDL_HAT_UP) { + y = 0; + } else if (hat_pos & SDL_HAT_DOWN) { + y = SCREEN_HEIGHT-8; + } + + if (hat_pos & SDL_HAT_LEFT) { + x = 0; + } else if (hat_pos & SDL_HAT_RIGHT) { + x = SCREEN_WIDTH-8; + } + + DrawRect(screen, x, y, 8, 8); + } + + SDL_RenderPresent(screen); + + if (SDL_JoystickGetAttached( joystick ) == 0) { + done = SDL_TRUE; + retval = SDL_TRUE; /* keep going, wait for reattach. */ + } + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +static SDL_bool +WatchJoystick(SDL_Joystick * joystick) +{ + SDL_Window *window = NULL; + const char *name = NULL; + + retval = SDL_FALSE; + done = SDL_FALSE; + + /* Create a window to display joystick axis position */ + window = SDL_CreateWindow("Joystick Test", SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, + SCREEN_HEIGHT, 0); + if (window == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window: %s\n", SDL_GetError()); + return SDL_FALSE; + } + + screen = SDL_CreateRenderer(window, -1, 0); + if (screen == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + SDL_DestroyWindow(window); + return SDL_FALSE; + } + + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + SDL_RenderPresent(screen); + SDL_RaiseWindow(window); + + /* Print info about the joystick we are watching */ + name = SDL_JoystickName(joystick); + SDL_Log("Watching joystick %d: (%s)\n", SDL_JoystickInstanceID(joystick), + name ? name : "Unknown Joystick"); + SDL_Log("Joystick has %d axes, %d hats, %d balls, and %d buttons\n", + SDL_JoystickNumAxes(joystick), SDL_JoystickNumHats(joystick), + SDL_JoystickNumBalls(joystick), SDL_JoystickNumButtons(joystick)); + + /* Loop, getting joystick events! */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop_arg(loop, joystick, 0, 1); +#else + while (!done) { + loop(joystick); + } +#endif + + SDL_DestroyRenderer(screen); + screen = NULL; + SDL_DestroyWindow(window); + return retval; +} + +int +main(int argc, char *argv[]) +{ + const char *name; + int i; + SDL_Joystick *joystick; + + SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, "0"); + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL (Note: video is required to start event loop) */ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* Print information about the joysticks */ + SDL_Log("There are %d joysticks attached\n", SDL_NumJoysticks()); + for (i = 0; i < SDL_NumJoysticks(); ++i) { + name = SDL_JoystickNameForIndex(i); + SDL_Log("Joystick %d: %s\n", i, name ? name : "Unknown Joystick"); + joystick = SDL_JoystickOpen(i); + if (joystick == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_JoystickOpen(%d) failed: %s\n", i, + SDL_GetError()); + } else { + char guid[64]; + SDL_assert(SDL_JoystickFromInstanceID(SDL_JoystickInstanceID(joystick)) == joystick); + SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joystick), + guid, sizeof (guid)); + SDL_Log(" axes: %d\n", SDL_JoystickNumAxes(joystick)); + SDL_Log(" balls: %d\n", SDL_JoystickNumBalls(joystick)); + SDL_Log(" hats: %d\n", SDL_JoystickNumHats(joystick)); + SDL_Log(" buttons: %d\n", SDL_JoystickNumButtons(joystick)); + SDL_Log("instance id: %d\n", SDL_JoystickInstanceID(joystick)); + SDL_Log(" guid: %s\n", guid); + SDL_JoystickClose(joystick); + } + } + +#if defined(__ANDROID__) || defined(__IPHONEOS__) + if (SDL_NumJoysticks() > 0) { +#else + if (argv[1]) { +#endif + SDL_bool reportederror = SDL_FALSE; + SDL_bool keepGoing = SDL_TRUE; + SDL_Event event; + int device; +#if defined(__ANDROID__) || defined(__IPHONEOS__) + device = 0; +#else + device = atoi(argv[1]); +#endif + joystick = SDL_JoystickOpen(device); + if (joystick != NULL) { + SDL_assert(SDL_JoystickFromInstanceID(SDL_JoystickInstanceID(joystick)) == joystick); + } + + while ( keepGoing ) { + if (joystick == NULL) { + if ( !reportederror ) { + SDL_Log("Couldn't open joystick %d: %s\n", device, SDL_GetError()); + keepGoing = SDL_FALSE; + reportederror = SDL_TRUE; + } + } else { + reportederror = SDL_FALSE; + keepGoing = WatchJoystick(joystick); + SDL_JoystickClose(joystick); + } + + joystick = NULL; + if (keepGoing) { + SDL_Log("Waiting for attach\n"); + } + while (keepGoing) { + SDL_WaitEvent(&event); + if ((event.type == SDL_QUIT) || (event.type == SDL_FINGERDOWN) + || (event.type == SDL_MOUSEBUTTONDOWN)) { + keepGoing = SDL_FALSE; + } else if (event.type == SDL_JOYDEVICEADDED) { + joystick = SDL_JoystickOpen(device); + if (joystick != NULL) { + SDL_assert(SDL_JoystickFromInstanceID(SDL_JoystickInstanceID(joystick)) == joystick); + } + break; + } + } + } + } + SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); + + return 0; +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testkeys.c b/Engine/lib/sdl/test/testkeys.c new file mode 100644 index 0000000000..aea496caaf --- /dev/null +++ b/Engine/lib/sdl/test/testkeys.c @@ -0,0 +1,40 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Print out all the scancodes we have, just to verify them */ + +#include +#include +#include +#include + +#include "SDL.h" + +int +main(int argc, char *argv[]) +{ + SDL_Scancode scancode; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + for (scancode = 0; scancode < SDL_NUM_SCANCODES; ++scancode) { + SDL_Log("Scancode #%d, \"%s\"\n", scancode, + SDL_GetScancodeName(scancode)); + } + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testloadso.c b/Engine/lib/sdl/test/testloadso.c new file mode 100644 index 0000000000..fb87fbed7a --- /dev/null +++ b/Engine/lib/sdl/test/testloadso.c @@ -0,0 +1,82 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test program to test dynamic loading with the loadso subsystem. +*/ + +#include +#include +#include + +#include "SDL.h" + +typedef int (*fntype) (const char *); + +int +main(int argc, char *argv[]) +{ + int retval = 0; + int hello = 0; + const char *libname = NULL; + const char *symname = NULL; + void *lib = NULL; + fntype fn = NULL; + + if (argc != 3) { + const char *app = argv[0]; + SDL_Log("USAGE: %s \n", app); + SDL_Log(" %s --hello \n", app); + return 1; + } + + /* Initialize SDL */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 2; + } + + if (strcmp(argv[1], "--hello") == 0) { + hello = 1; + libname = argv[2]; + symname = "puts"; + } else { + libname = argv[1]; + symname = argv[2]; + } + + lib = SDL_LoadObject(libname); + if (lib == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadObject('%s') failed: %s\n", + libname, SDL_GetError()); + retval = 3; + } else { + fn = (fntype) SDL_LoadFunction(lib, symname); + if (fn == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_LoadFunction('%s') failed: %s\n", + symname, SDL_GetError()); + retval = 4; + } else { + SDL_Log("Found %s in %s at %p\n", symname, libname, fn); + if (hello) { + SDL_Log("Calling function...\n"); + fflush(stdout); + fn(" HELLO, WORLD!\n"); + SDL_Log("...apparently, we survived. :)\n"); + SDL_Log("Unloading library...\n"); + fflush(stdout); + } + } + SDL_UnloadObject(lib); + } + SDL_Quit(); + return retval; +} diff --git a/Engine/lib/sdl/test/testlock.c b/Engine/lib/sdl/test/testlock.c new file mode 100644 index 0000000000..1106ec3bf0 --- /dev/null +++ b/Engine/lib/sdl/test/testlock.c @@ -0,0 +1,126 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test the thread and mutex locking functions + Also exercises the system's signal/thread interaction +*/ + +#include +#include +#include /* for atexit() */ + +#include "SDL.h" + +static SDL_mutex *mutex = NULL; +static SDL_threadID mainthread; +static SDL_Thread *threads[6]; +static volatile int doterminate = 0; + +/* + * SDL_Quit() shouldn't be used with atexit() directly because + * calling conventions may differ... + */ +static void +SDL_Quit_Wrapper(void) +{ + SDL_Quit(); +} + +void +printid(void) +{ + SDL_Log("Process %lu: exiting\n", SDL_ThreadID()); +} + +void +terminate(int sig) +{ + signal(SIGINT, terminate); + doterminate = 1; +} + +void +closemutex(int sig) +{ + SDL_threadID id = SDL_ThreadID(); + int i; + SDL_Log("Process %lu: Cleaning up...\n", id == mainthread ? 0 : id); + doterminate = 1; + for (i = 0; i < 6; ++i) + SDL_WaitThread(threads[i], NULL); + SDL_DestroyMutex(mutex); + exit(sig); +} + +int SDLCALL +Run(void *data) +{ + if (SDL_ThreadID() == mainthread) + signal(SIGTERM, closemutex); + while (!doterminate) { + SDL_Log("Process %lu ready to work\n", SDL_ThreadID()); + if (SDL_LockMutex(mutex) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't lock mutex: %s", SDL_GetError()); + exit(1); + } + SDL_Log("Process %lu, working!\n", SDL_ThreadID()); + SDL_Delay(1 * 1000); + SDL_Log("Process %lu, done!\n", SDL_ThreadID()); + if (SDL_UnlockMutex(mutex) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't unlock mutex: %s", SDL_GetError()); + exit(1); + } + /* If this sleep isn't done, then threads may starve */ + SDL_Delay(10); + } + if (SDL_ThreadID() == mainthread && doterminate) { + SDL_Log("Process %lu: raising SIGTERM\n", SDL_ThreadID()); + raise(SIGTERM); + } + return (0); +} + +int +main(int argc, char *argv[]) +{ + int i; + int maxproc = 6; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s\n", SDL_GetError()); + exit(1); + } + atexit(SDL_Quit_Wrapper); + + if ((mutex = SDL_CreateMutex()) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create mutex: %s\n", SDL_GetError()); + exit(1); + } + + mainthread = SDL_ThreadID(); + SDL_Log("Main thread: %lu\n", mainthread); + atexit(printid); + for (i = 0; i < maxproc; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Worker%d", i); + if ((threads[i] = SDL_CreateThread(Run, name, NULL)) == NULL) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread!\n"); + } + signal(SIGINT, terminate); + Run(NULL); + + return (0); /* Never reached */ +} diff --git a/Engine/lib/sdl/test/testmessage.c b/Engine/lib/sdl/test/testmessage.c new file mode 100644 index 0000000000..91968c322c --- /dev/null +++ b/Engine/lib/sdl/test/testmessage.c @@ -0,0 +1,193 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL MessageBox API */ + +#include +#include +#include + +#include "SDL.h" + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +static int +button_messagebox(void *eventNumber) +{ + const SDL_MessageBoxButtonData buttons[] = { + { + SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, + 0, + "OK" + },{ + SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, + 1, + "Cancel" + }, + }; + + SDL_MessageBoxData data = { + SDL_MESSAGEBOX_INFORMATION, + NULL, /* no parent window */ + "Custom MessageBox", + "This is a custom messagebox", + 2, + buttons, + NULL /* Default color scheme */ + }; + + int button = -1; + int success = 0; + if (eventNumber) { + data.message = "This is a custom messagebox from a background thread."; + } + + success = SDL_ShowMessageBox(&data, &button); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + if (eventNumber) { + SDL_UserEvent event; + event.type = (intptr_t)eventNumber; + SDL_PushEvent((SDL_Event*)&event); + return 1; + } else { + quit(2); + } + } + SDL_Log("Pressed button: %d, %s\n", button, button == -1 ? "[closed]" : button == 1 ? "Cancel" : "OK"); + + if (eventNumber) { + SDL_UserEvent event; + event.type = (intptr_t)eventNumber; + SDL_PushEvent((SDL_Event*)&event); + } + + return 0; +} + +int +main(int argc, char *argv[]) +{ + int success; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple error MessageBox", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple MessageBox with a newline:\r\nHello world!", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "UTF-8 Simple MessageBox", + "Unicode text: '牛肉西蘭花' ...", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "UTF-8 Simple MessageBox", + "Unicode text and newline:\r\n'牛肉西蘭花'\n'牛肉西蘭花'", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + /* Google says this is Traditional Chinese for "beef with broccoli" */ + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "牛肉西蘭花", + "Unicode text in the title.", + NULL); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + button_messagebox(NULL); + + /* Test showing a message box from a background thread. + + On Mac OS X, the video subsystem needs to be initialized for this + to work, since the message box events are dispatched by the Cocoa + subsystem on the main thread. + */ + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video subsystem: %s\n", SDL_GetError()); + return (1); + } + { + int status = 0; + SDL_Event event; + intptr_t eventNumber = SDL_RegisterEvents(1); + SDL_Thread* thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void*)eventNumber); + + while (SDL_WaitEvent(&event)) + { + if (event.type == eventNumber) { + break; + } + } + + SDL_WaitThread(thread, &status); + + SDL_Log("Message box thread return %i\n", status); + } + + /* Test showing a message box with a parent window */ + { + SDL_Event event; + SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0); + + success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, + "Simple MessageBox", + "This is a simple error MessageBox with a parent window", + window); + if (success == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError()); + quit(1); + } + + while (SDL_WaitEvent(&event)) + { + if (event.type == SDL_QUIT || event.type == SDL_KEYUP) { + break; + } + } + } + + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testmultiaudio.c b/Engine/lib/sdl/test/testmultiaudio.c new file mode 100644 index 0000000000..117ef2696c --- /dev/null +++ b/Engine/lib/sdl/test/testmultiaudio.c @@ -0,0 +1,200 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include "SDL.h" + +#include /* for fflush() and stdout */ + +#ifdef __EMSCRIPTEN__ +#include +#endif + +static SDL_AudioSpec spec; +static Uint8 *sound = NULL; /* Pointer to wave data */ +static Uint32 soundlen = 0; /* Length of wave data */ + +typedef struct +{ + SDL_AudioDeviceID dev; + int soundpos; + volatile int done; +} callback_data; + +callback_data cbd[64]; + +void SDLCALL +play_through_once(void *arg, Uint8 * stream, int len) +{ + callback_data *cbd = (callback_data *) arg; + Uint8 *waveptr = sound + cbd->soundpos; + int waveleft = soundlen - cbd->soundpos; + int cpy = len; + if (cpy > waveleft) + cpy = waveleft; + + SDL_memcpy(stream, waveptr, cpy); + len -= cpy; + cbd->soundpos += cpy; + if (len > 0) { + stream += cpy; + SDL_memset(stream, spec.silence, len); + cbd->done++; + } +} + +void +loop() +{ + if(cbd[0].done) { +#ifdef __EMSCRIPTEN__ + emscripten_cancel_main_loop(); +#endif + SDL_PauseAudioDevice(cbd[0].dev, 1); + SDL_CloseAudioDevice(cbd[0].dev); + SDL_FreeWAV(sound); + SDL_Quit(); + } +} + +static void +test_multi_audio(int devcount) +{ + int keep_going = 1; + int i; + +#ifdef __ANDROID__ + SDL_Event event; + + /* Create a Window to get fully initialized event processing for testing pause on Android. */ + SDL_CreateWindow("testmultiaudio", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 320, 240, 0); +#endif + + if (devcount > 64) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Too many devices (%d), clamping to 64...\n", + devcount); + devcount = 64; + } + + spec.callback = play_through_once; + + for (i = 0; i < devcount; i++) { + const char *devname = SDL_GetAudioDeviceName(i, 0); + SDL_Log("playing on device #%d: ('%s')...", i, devname); + fflush(stdout); + + SDL_memset(&cbd[0], '\0', sizeof(callback_data)); + spec.userdata = &cbd[0]; + cbd[0].dev = SDL_OpenAudioDevice(devname, 0, &spec, NULL, 0); + if (cbd[0].dev == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Open device failed: %s\n", SDL_GetError()); + } else { + SDL_PauseAudioDevice(cbd[0].dev, 0); +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!cbd[0].done) + { + #ifdef __ANDROID__ + /* Empty queue, some application events would prevent pause. */ + while (SDL_PollEvent(&event)){} + #endif + SDL_Delay(100); + } + SDL_PauseAudioDevice(cbd[0].dev, 1); +#endif + SDL_Log("done.\n"); + SDL_CloseAudioDevice(cbd[0].dev); + } + } + + SDL_memset(cbd, '\0', sizeof(cbd)); + + SDL_Log("playing on all devices...\n"); + for (i = 0; i < devcount; i++) { + const char *devname = SDL_GetAudioDeviceName(i, 0); + spec.userdata = &cbd[i]; + cbd[i].dev = SDL_OpenAudioDevice(devname, 0, &spec, NULL, 0); + if (cbd[i].dev == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Open device %d failed: %s\n", i, SDL_GetError()); + } + } + + for (i = 0; i < devcount; i++) { + if (cbd[i].dev) { + SDL_PauseAudioDevice(cbd[i].dev, 0); + } + } + + while (keep_going) { + keep_going = 0; + for (i = 0; i < devcount; i++) { + if ((cbd[i].dev) && (!cbd[i].done)) { + keep_going = 1; + } + } + #ifdef __ANDROID__ + /* Empty queue, some application events would prevent pause. */ + while (SDL_PollEvent(&event)){} + #endif + + SDL_Delay(100); + } + +#ifndef __EMSCRIPTEN__ + for (i = 0; i < devcount; i++) { + if (cbd[i].dev) { + SDL_PauseAudioDevice(cbd[i].dev, 1); + SDL_CloseAudioDevice(cbd[i].dev); + } + } + + SDL_Log("All done!\n"); +#endif +} + + +int +main(int argc, char **argv) +{ + int devcount = 0; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + SDL_Log("Using audio driver: %s\n", SDL_GetCurrentAudioDriver()); + + devcount = SDL_GetNumAudioDevices(0); + if (devcount < 1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Don't see any specific audio devices!\n"); + } else { + if (argv[1] == NULL) { + argv[1] = "sample.wav"; + } + + /* Load the wave file into memory */ + if (SDL_LoadWAV(argv[1], &spec, &sound, &soundlen) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", argv[1], + SDL_GetError()); + } else { + test_multi_audio(devcount); + SDL_FreeWAV(sound); + } + } + + SDL_Quit(); + return 0; +} diff --git a/Engine/lib/sdl/test/testnative.c b/Engine/lib/sdl/test/testnative.c new file mode 100644 index 0000000000..049c4c83e9 --- /dev/null +++ b/Engine/lib/sdl/test/testnative.c @@ -0,0 +1,237 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Create a native window and attach an SDL renderer */ + +#include +#include /* for srand() */ +#include /* for time() */ + +#include "testnative.h" + +#define WINDOW_W 640 +#define WINDOW_H 480 +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static NativeWindowFactory *factories[] = { +#ifdef TEST_NATIVE_WINDOWS + &WindowsWindowFactory, +#endif +#ifdef TEST_NATIVE_X11 + &X11WindowFactory, +#endif +#ifdef TEST_NATIVE_COCOA + &CocoaWindowFactory, +#endif + NULL +}; +static NativeWindowFactory *factory = NULL; +static void *native_window; +static SDL_Rect *positions, *velocities; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_VideoQuit(); + if (native_window) { + factory->DestroyNativeWindow(native_window); + } + exit(rc); +} + +SDL_Texture * +LoadSprite(SDL_Renderer *renderer, char *file) +{ + SDL_Surface *temp; + SDL_Texture *sprite; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return 0; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (temp->format->palette) { + SDL_SetColorKey(temp, 1, *(Uint8 *) temp->pixels); + } + + /* Create textures from the image */ + sprite = SDL_CreateTextureFromSurface(renderer, temp); + if (!sprite) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return 0; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return sprite; +} + +void +MoveSprites(SDL_Renderer * renderer, SDL_Texture * sprite) +{ + int sprite_w, sprite_h; + int i; + SDL_Rect viewport; + SDL_Rect *position, *velocity; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + SDL_QueryTexture(sprite, NULL, NULL, &sprite_w, &sprite_h); + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Move the sprite, bounce at the wall, and draw */ + for (i = 0; i < NUM_SPRITES; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (viewport.w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (viewport.h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + /* Blit the sprite onto the screen */ + SDL_RenderCopy(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +int +main(int argc, char *argv[]) +{ + int i, done; + const char *driver; + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *sprite; + int window_w, window_h; + int sprite_w, sprite_h; + SDL_Event event; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_VideoInit(NULL) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video: %s\n", + SDL_GetError()); + exit(1); + } + driver = SDL_GetCurrentVideoDriver(); + + /* Find a native window driver and create a native window */ + for (i = 0; factories[i]; ++i) { + if (SDL_strcmp(driver, factories[i]->tag) == 0) { + factory = factories[i]; + break; + } + } + if (!factory) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't find native window code for %s driver\n", + driver); + quit(2); + } + SDL_Log("Creating native window for %s driver\n", driver); + native_window = factory->CreateNativeWindow(WINDOW_W, WINDOW_H); + if (!native_window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create native window\n"); + quit(3); + } + window = SDL_CreateWindowFrom(native_window); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create SDL window: %s\n", SDL_GetError()); + quit(4); + } + SDL_SetWindowTitle(window, "SDL Native Window Test"); + + /* Create the renderer */ + renderer = SDL_CreateRenderer(window, -1, 0); + if (!renderer) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create renderer: %s\n", SDL_GetError()); + quit(5); + } + + /* Clear the window, load the sprite and go! */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + sprite = LoadSprite(renderer, "icon.bmp"); + if (!sprite) { + quit(6); + } + + /* Allocate memory for the sprite info */ + SDL_GetWindowSize(window, &window_w, &window_h); + SDL_QueryTexture(sprite, NULL, NULL, &sprite_w, &sprite_h); + positions = (SDL_Rect *) SDL_malloc(NUM_SPRITES * sizeof(SDL_Rect)); + velocities = (SDL_Rect *) SDL_malloc(NUM_SPRITES * sizeof(SDL_Rect)); + if (!positions || !velocities) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + srand(time(NULL)); + for (i = 0; i < NUM_SPRITES; ++i) { + positions[i].x = rand() % (window_w - sprite_w); + positions[i].y = rand() % (window_h - sprite_h); + positions[i].w = sprite_w; + positions[i].h = sprite_h; + velocities[i].x = 0; + velocities[i].y = 0; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + } + } + + /* Main render loop */ + done = 0; + while (!done) { + /* Check for events */ + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_WINDOWEVENT: + switch (event.window.event) { + case SDL_WINDOWEVENT_EXPOSED: + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + break; + } + break; + case SDL_QUIT: + done = 1; + break; + default: + break; + } + } + MoveSprites(renderer, sprite); + } + + quit(0); + + return 0; /* to prevent compiler warning */ +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testnative.h b/Engine/lib/sdl/test/testnative.h new file mode 100644 index 0000000000..ed2bf7e52c --- /dev/null +++ b/Engine/lib/sdl/test/testnative.h @@ -0,0 +1,46 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Definitions for platform dependent windowing functions to test SDL + integration with native windows +*/ + +#include "SDL.h" + +/* This header includes all the necessary system headers for native windows */ +#include "SDL_syswm.h" + +typedef struct +{ + const char *tag; + void *(*CreateNativeWindow) (int w, int h); + void (*DestroyNativeWindow) (void *window); +} NativeWindowFactory; + +#ifdef SDL_VIDEO_DRIVER_WINDOWS +#define TEST_NATIVE_WINDOWS +extern NativeWindowFactory WindowsWindowFactory; +#endif + +#ifdef SDL_VIDEO_DRIVER_X11 +#define TEST_NATIVE_X11 +extern NativeWindowFactory X11WindowFactory; +#endif + +#ifdef SDL_VIDEO_DRIVER_COCOA +/* Actually, we don't really do this, since it involves adding Objective C + support to the build system, which is a little tricky. You can uncomment + it manually though and link testnativecocoa.m into the test application. +*/ +#define TEST_NATIVE_COCOA +extern NativeWindowFactory CocoaWindowFactory; +#endif diff --git a/Engine/lib/sdl/test/testnativecocoa.m b/Engine/lib/sdl/test/testnativecocoa.m new file mode 100644 index 0000000000..030607d665 --- /dev/null +++ b/Engine/lib/sdl/test/testnativecocoa.m @@ -0,0 +1,51 @@ + +#include "testnative.h" + +#ifdef TEST_NATIVE_COCOA + +#include + +static void *CreateWindowCocoa(int w, int h); +static void DestroyWindowCocoa(void *window); + +NativeWindowFactory CocoaWindowFactory = { + "cocoa", + CreateWindowCocoa, + DestroyWindowCocoa +}; + +static void *CreateWindowCocoa(int w, int h) +{ + NSAutoreleasePool *pool; + NSWindow *nswindow; + NSRect rect; + unsigned int style; + + pool = [[NSAutoreleasePool alloc] init]; + + rect.origin.x = 0; + rect.origin.y = 0; + rect.size.width = w; + rect.size.height = h; + rect.origin.y = CGDisplayPixelsHigh(kCGDirectMainDisplay) - rect.origin.y - rect.size.height; + + style = (NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask); + + nswindow = [[NSWindow alloc] initWithContentRect:rect styleMask:style backing:NSBackingStoreBuffered defer:FALSE]; + [nswindow makeKeyAndOrderFront:nil]; + + [pool release]; + + return nswindow; +} + +static void DestroyWindowCocoa(void *window) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSWindow *nswindow = (NSWindow *)window; + + [nswindow close]; + [pool release]; +} + +#endif diff --git a/Engine/lib/sdl/test/testnativew32.c b/Engine/lib/sdl/test/testnativew32.c new file mode 100644 index 0000000000..aaea267d26 --- /dev/null +++ b/Engine/lib/sdl/test/testnativew32.c @@ -0,0 +1,86 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include "testnative.h" + +#ifdef TEST_NATIVE_WINDOWS + +static void *CreateWindowNative(int w, int h); +static void DestroyWindowNative(void *window); + +NativeWindowFactory WindowsWindowFactory = { + "windows", + CreateWindowNative, + DestroyWindowNative +}; + +LRESULT CALLBACK +WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) { + case WM_CLOSE: + DestroyWindow(hwnd); + break; + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hwnd, msg, wParam, lParam); + } + return 0; +} + +static void * +CreateWindowNative(int w, int h) +{ + HWND hwnd; + WNDCLASS wc; + + wc.style = 0; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = GetModuleHandle(NULL); + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); + wc.lpszMenuName = NULL; + wc.lpszClassName = "SDL Test"; + + if (!RegisterClass(&wc)) { + MessageBox(NULL, "Window Registration Failed!", "Error!", + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + hwnd = + CreateWindow("SDL Test", "", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, + CW_USEDEFAULT, w, h, NULL, NULL, GetModuleHandle(NULL), + NULL); + if (hwnd == NULL) { + MessageBox(NULL, "Window Creation Failed!", "Error!", + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + ShowWindow(hwnd, SW_SHOW); + + return hwnd; +} + +static void +DestroyWindowNative(void *window) +{ + DestroyWindow((HWND) window); +} + +#endif diff --git a/Engine/lib/sdl/test/testnativex11.c b/Engine/lib/sdl/test/testnativex11.c new file mode 100644 index 0000000000..69fa37bbf1 --- /dev/null +++ b/Engine/lib/sdl/test/testnativex11.c @@ -0,0 +1,53 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include "testnative.h" + +#ifdef TEST_NATIVE_X11 + +static void *CreateWindowX11(int w, int h); +static void DestroyWindowX11(void *window); + +NativeWindowFactory X11WindowFactory = { + "x11", + CreateWindowX11, + DestroyWindowX11 +}; + +static Display *dpy; + +static void * +CreateWindowX11(int w, int h) +{ + Window window = 0; + + dpy = XOpenDisplay(NULL); + if (dpy) { + window = + XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, w, h, 0, 0, + 0); + XMapRaised(dpy, window); + XSync(dpy, False); + } + return (void *) window; +} + +static void +DestroyWindowX11(void *window) +{ + if (dpy) { + XDestroyWindow(dpy, (Window) window); + XCloseDisplay(dpy); + } +} + +#endif diff --git a/Engine/lib/sdl/test/testoverlay2.c b/Engine/lib/sdl/test/testoverlay2.c new file mode 100644 index 0000000000..453f0f443a --- /dev/null +++ b/Engine/lib/sdl/test/testoverlay2.c @@ -0,0 +1,511 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/******************************************************************************** + * * + * Test of the overlay used for moved pictures, test more closed to real life. * + * Running trojan moose :) Coded by Mike Gorchak. * + * * + ********************************************************************************/ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +#define MOOSEPIC_W 64 +#define MOOSEPIC_H 88 + +#define MOOSEFRAME_SIZE (MOOSEPIC_W * MOOSEPIC_H) +#define MOOSEFRAMES_COUNT 10 + +SDL_Color MooseColors[84] = { + {49, 49, 49} + , {66, 24, 0} + , {66, 33, 0} + , {66, 66, 66} + , + {66, 115, 49} + , {74, 33, 0} + , {74, 41, 16} + , {82, 33, 8} + , + {82, 41, 8} + , {82, 49, 16} + , {82, 82, 82} + , {90, 41, 8} + , + {90, 41, 16} + , {90, 57, 24} + , {99, 49, 16} + , {99, 66, 24} + , + {99, 66, 33} + , {99, 74, 33} + , {107, 57, 24} + , {107, 82, 41} + , + {115, 57, 33} + , {115, 66, 33} + , {115, 66, 41} + , {115, 74, 0} + , + {115, 90, 49} + , {115, 115, 115} + , {123, 82, 0} + , {123, 99, 57} + , + {132, 66, 41} + , {132, 74, 41} + , {132, 90, 8} + , {132, 99, 33} + , + {132, 99, 66} + , {132, 107, 66} + , {140, 74, 49} + , {140, 99, 16} + , + {140, 107, 74} + , {140, 115, 74} + , {148, 107, 24} + , {148, 115, 82} + , + {148, 123, 74} + , {148, 123, 90} + , {156, 115, 33} + , {156, 115, 90} + , + {156, 123, 82} + , {156, 132, 82} + , {156, 132, 99} + , {156, 156, 156} + , + {165, 123, 49} + , {165, 123, 90} + , {165, 132, 82} + , {165, 132, 90} + , + {165, 132, 99} + , {165, 140, 90} + , {173, 132, 57} + , {173, 132, 99} + , + {173, 140, 107} + , {173, 140, 115} + , {173, 148, 99} + , {173, 173, 173} + , + {181, 140, 74} + , {181, 148, 115} + , {181, 148, 123} + , {181, 156, 107} + , + {189, 148, 123} + , {189, 156, 82} + , {189, 156, 123} + , {189, 156, 132} + , + {189, 189, 189} + , {198, 156, 123} + , {198, 165, 132} + , {206, 165, 99} + , + {206, 165, 132} + , {206, 173, 140} + , {206, 206, 206} + , {214, 173, 115} + , + {214, 173, 140} + , {222, 181, 148} + , {222, 189, 132} + , {222, 189, 156} + , + {222, 222, 222} + , {231, 198, 165} + , {231, 231, 231} + , {239, 206, 173} +}; + +Uint8 MooseFrame[MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE*2]; +SDL_Texture *MooseTexture; +SDL_Rect displayrect; +int window_w; +int window_h; +SDL_Window *window; +SDL_Renderer *renderer; +int paused = 0; +int i; +SDL_bool done = SDL_FALSE; +Uint32 pixel_format = SDL_PIXELFORMAT_YV12; +int fpsdelay; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +/* All RGB2YUV conversion code and some other parts of code has been taken from testoverlay.c */ + +/* NOTE: These RGB conversion functions are not intended for speed, + only as examples. +*/ + +void +RGBtoYUV(Uint8 * rgb, int *yuv, int monochrome, int luminance) +{ + if (monochrome) { +#if 1 /* these are the two formulas that I found on the FourCC site... */ + yuv[0] = (int)(0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]); + yuv[1] = 128; + yuv[2] = 128; +#else + yuv[0] = (int)(0.257 * rgb[0]) + (0.504 * rgb[1]) + (0.098 * rgb[2]) + 16; + yuv[1] = 128; + yuv[2] = 128; +#endif + } else { +#if 1 /* these are the two formulas that I found on the FourCC site... */ + yuv[0] = (int)(0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]); + yuv[1] = (int)((rgb[2] - yuv[0]) * 0.565 + 128); + yuv[2] = (int)((rgb[0] - yuv[0]) * 0.713 + 128); +#else + yuv[0] = (0.257 * rgb[0]) + (0.504 * rgb[1]) + (0.098 * rgb[2]) + 16; + yuv[1] = 128 - (0.148 * rgb[0]) - (0.291 * rgb[1]) + (0.439 * rgb[2]); + yuv[2] = 128 + (0.439 * rgb[0]) - (0.368 * rgb[1]) - (0.071 * rgb[2]); +#endif + } + + if (luminance != 100) { + yuv[0] = yuv[0] * luminance / 100; + if (yuv[0] > 255) + yuv[0] = 255; + } +} + +void +ConvertRGBtoYV12(Uint8 *rgb, Uint8 *out, int w, int h, + int monochrome, int luminance) +{ + int x, y; + int yuv[3]; + Uint8 *op[3]; + + op[0] = out; + op[1] = op[0] + w*h; + op[2] = op[1] + w*h/4; + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + RGBtoYUV(rgb, yuv, monochrome, luminance); + *(op[0]++) = yuv[0]; + if (x % 2 == 0 && y % 2 == 0) { + *(op[1]++) = yuv[2]; + *(op[2]++) = yuv[1]; + } + rgb += 3; + } + } +} + +void +ConvertRGBtoNV12(Uint8 *rgb, Uint8 *out, int w, int h, + int monochrome, int luminance) +{ + int x, y; + int yuv[3]; + Uint8 *op[2]; + + op[0] = out; + op[1] = op[0] + w*h; + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + RGBtoYUV(rgb, yuv, monochrome, luminance); + *(op[0]++) = yuv[0]; + if (x % 2 == 0 && y % 2 == 0) { + *(op[1]++) = yuv[1]; + *(op[1]++) = yuv[2]; + } + rgb += 3; + } + } +} + +static void +PrintUsage(char *argv0) +{ + SDL_Log("Usage: %s [arg] [arg] [arg] ...\n", argv0); + SDL_Log("\n"); + SDL_Log("Where 'arg' is any of the following options:\n"); + SDL_Log("\n"); + SDL_Log(" -fps \n"); + SDL_Log(" -nodelay\n"); + SDL_Log(" -format (one of the: YV12, IYUV, YUY2, UYVY, YVYU)\n"); + SDL_Log(" -scale (initial scale of the overlay)\n"); + SDL_Log(" -help (shows this help)\n"); + SDL_Log("\n"); + SDL_Log("Press ESC to exit, or SPACE to freeze the movie while application running.\n"); + SDL_Log("\n"); +} + +void +loop() +{ + SDL_Event event; + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_WINDOWEVENT: + if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + SDL_RenderSetViewport(renderer, NULL); + displayrect.w = window_w = event.window.data1; + displayrect.h = window_h = event.window.data2; + } + break; + case SDL_MOUSEBUTTONDOWN: + displayrect.x = event.button.x - window_w / 2; + displayrect.y = event.button.y - window_h / 2; + break; + case SDL_MOUSEMOTION: + if (event.motion.state) { + displayrect.x = event.motion.x - window_w / 2; + displayrect.y = event.motion.y - window_h / 2; + } + break; + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_SPACE) { + paused = !paused; + break; + } + if (event.key.keysym.sym != SDLK_ESCAPE) { + break; + } + case SDL_QUIT: + done = SDL_TRUE; + break; + } + } + +#ifndef __EMSCRIPTEN__ + SDL_Delay(fpsdelay); +#endif + + if (!paused) { + i = (i + 1) % MOOSEFRAMES_COUNT; + + SDL_UpdateTexture(MooseTexture, NULL, MooseFrame[i], MOOSEPIC_W*SDL_BYTESPERPIXEL(pixel_format)); + } + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, MooseTexture, NULL, &displayrect); + SDL_RenderPresent(renderer); + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char **argv) +{ + Uint8 *RawMooseData; + SDL_RWops *handle; + SDL_Window *window; + int j; + int fps = 12; + int fpsdelay; + int nodelay = 0; +#ifdef TEST_NV12 + Uint32 pixel_format = SDL_PIXELFORMAT_NV12; +#else + Uint32 pixel_format = SDL_PIXELFORMAT_YV12; +#endif + int scale = 5; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 3; + } + + while (argc > 1) { + if (strcmp(argv[1], "-fps") == 0) { + if (argv[2]) { + fps = atoi(argv[2]); + if (fps == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + if ((fps < 0) || (fps > 1000)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option must be in range from 1 to 1000, default is 12.\n"); + quit(10); + } + argv += 2; + argc -= 2; + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + } else if (strcmp(argv[1], "-nodelay") == 0) { + nodelay = 1; + argv += 1; + argc -= 1; + } else if (strcmp(argv[1], "-scale") == 0) { + if (argv[2]) { + scale = atoi(argv[2]); + if (scale == 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -scale option requires an argument [from 1 to 50], default is 5.\n"); + quit(10); + } + if ((scale < 0) || (scale > 50)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -scale option must be in range from 1 to 50, default is 5.\n"); + quit(10); + } + argv += 2; + argc -= 2; + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, + "The -fps option requires an argument [from 1 to 1000], default is 12.\n"); + quit(10); + } + } else if ((strcmp(argv[1], "-help") == 0) + || (strcmp(argv[1], "-h") == 0)) { + PrintUsage(argv[0]); + quit(0); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unrecognized option: %s.\n", argv[1]); + quit(10); + } + break; + } + + RawMooseData = (Uint8 *) malloc(MOOSEFRAME_SIZE * MOOSEFRAMES_COUNT); + if (RawMooseData == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't allocate memory for movie !\n"); + free(RawMooseData); + quit(1); + } + + /* load the trojan moose images */ + handle = SDL_RWFromFile("moose.dat", "rb"); + if (handle == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't find the file moose.dat !\n"); + free(RawMooseData); + quit(2); + } + + SDL_RWread(handle, RawMooseData, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT); + + SDL_RWclose(handle); + + /* Create the window and renderer */ + window_w = MOOSEPIC_W * scale; + window_h = MOOSEPIC_H * scale; + window = SDL_CreateWindow("Happy Moose", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + window_w, window_h, + SDL_WINDOW_RESIZABLE); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create window: %s\n", SDL_GetError()); + free(RawMooseData); + quit(4); + } + + renderer = SDL_CreateRenderer(window, -1, 0); + if (!renderer) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create renderer: %s\n", SDL_GetError()); + free(RawMooseData); + quit(4); + } + + MooseTexture = SDL_CreateTexture(renderer, pixel_format, SDL_TEXTUREACCESS_STREAMING, MOOSEPIC_W, MOOSEPIC_H); + if (!MooseTexture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError()); + free(RawMooseData); + quit(5); + } + /* Uncomment this to check vertex color with a YUV texture */ + /* SDL_SetTextureColorMod(MooseTexture, 0xff, 0x80, 0x80); */ + + for (i = 0; i < MOOSEFRAMES_COUNT; i++) { + Uint8 MooseFrameRGB[MOOSEFRAME_SIZE*3]; + Uint8 *rgb; + Uint8 *frame; + + rgb = MooseFrameRGB; + frame = RawMooseData + i * MOOSEFRAME_SIZE; + for (j = 0; j < MOOSEFRAME_SIZE; ++j) { + rgb[0] = MooseColors[frame[j]].r; + rgb[1] = MooseColors[frame[j]].g; + rgb[2] = MooseColors[frame[j]].b; + rgb += 3; + } + switch (pixel_format) { + case SDL_PIXELFORMAT_YV12: + ConvertRGBtoYV12(MooseFrameRGB, MooseFrame[i], MOOSEPIC_W, MOOSEPIC_H, 0, 100); + break; + case SDL_PIXELFORMAT_NV12: + ConvertRGBtoNV12(MooseFrameRGB, MooseFrame[i], MOOSEPIC_W, MOOSEPIC_H, 0, 100); + break; + default: + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unsupported pixel format\n"); + break; + } + } + + free(RawMooseData); + + /* set the start frame */ + i = 0; + if (nodelay) { + fpsdelay = 0; + } else { + fpsdelay = 1000 / fps; + } + + displayrect.x = 0; + displayrect.y = 0; + displayrect.w = window_w; + displayrect.h = window_h; + + /* Ignore key up events, they don't even get filtered */ + SDL_EventState(SDL_KEYUP, SDL_IGNORE); + + /* Loop, waiting for QUIT or RESIZE */ +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, nodelay ? 0 : fps, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_DestroyRenderer(renderer); + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testplatform.c b/Engine/lib/sdl/test/testplatform.c new file mode 100644 index 0000000000..14acac4b11 --- /dev/null +++ b/Engine/lib/sdl/test/testplatform.c @@ -0,0 +1,204 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include + +#include "SDL.h" + +/* + * Watcom C flags these as Warning 201: "Unreachable code" if you just + * compare them directly, so we push it through a function to keep the + * compiler quiet. --ryan. + */ +static int +badsize(size_t sizeoftype, size_t hardcodetype) +{ + return sizeoftype != hardcodetype; +} + +int +TestTypes(SDL_bool verbose) +{ + int error = 0; + + if (badsize(sizeof(Uint8), 1)) { + if (verbose) + SDL_Log("sizeof(Uint8) != 1, instead = %u\n", + (unsigned int)sizeof(Uint8)); + ++error; + } + if (badsize(sizeof(Uint16), 2)) { + if (verbose) + SDL_Log("sizeof(Uint16) != 2, instead = %u\n", + (unsigned int)sizeof(Uint16)); + ++error; + } + if (badsize(sizeof(Uint32), 4)) { + if (verbose) + SDL_Log("sizeof(Uint32) != 4, instead = %u\n", + (unsigned int)sizeof(Uint32)); + ++error; + } + if (badsize(sizeof(Uint64), 8)) { + if (verbose) + SDL_Log("sizeof(Uint64) != 8, instead = %u\n", + (unsigned int)sizeof(Uint64)); + ++error; + } + if (verbose && !error) + SDL_Log("All data types are the expected size.\n"); + + return (error ? 1 : 0); +} + +int +TestEndian(SDL_bool verbose) +{ + int error = 0; + Uint16 value = 0x1234; + int real_byteorder; + Uint16 value16 = 0xCDAB; + Uint16 swapped16 = 0xABCD; + Uint32 value32 = 0xEFBEADDE; + Uint32 swapped32 = 0xDEADBEEF; + Uint64 value64, swapped64; + + value64 = 0xEFBEADDE; + value64 <<= 32; + value64 |= 0xCDAB3412; + swapped64 = 0x1234ABCD; + swapped64 <<= 32; + swapped64 |= 0xDEADBEEF; + + if (verbose) { + SDL_Log("Detected a %s endian machine.\n", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big"); + } + if ((*((char *) &value) >> 4) == 0x1) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + if (real_byteorder != SDL_BYTEORDER) { + if (verbose) { + SDL_Log("Actually a %s endian machine!\n", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 16 = 0x%X, swapped = 0x%X\n", value16, + SDL_Swap16(value16)); + } + if (SDL_Swap16(value16) != swapped16) { + if (verbose) { + SDL_Log("16 bit value swapped incorrectly!\n"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 32 = 0x%X, swapped = 0x%X\n", value32, + SDL_Swap32(value32)); + } + if (SDL_Swap32(value32) != swapped32) { + if (verbose) { + SDL_Log("32 bit value swapped incorrectly!\n"); + } + ++error; + } + if (verbose) { + SDL_Log("Value 64 = 0x%"SDL_PRIX64", swapped = 0x%"SDL_PRIX64"\n", value64, + SDL_Swap64(value64)); + } + if (SDL_Swap64(value64) != swapped64) { + if (verbose) { + SDL_Log("64 bit value swapped incorrectly!\n"); + } + ++error; + } + return (error ? 1 : 0); +} + + +int +TestCPUInfo(SDL_bool verbose) +{ + if (verbose) { + SDL_Log("CPU count: %d\n", SDL_GetCPUCount()); + SDL_Log("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize()); + SDL_Log("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected"); + SDL_Log("AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected"); + SDL_Log("MMX %s\n", SDL_HasMMX()? "detected" : "not detected"); + SDL_Log("3DNow! %s\n", SDL_Has3DNow()? "detected" : "not detected"); + SDL_Log("SSE %s\n", SDL_HasSSE()? "detected" : "not detected"); + SDL_Log("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected"); + SDL_Log("SSE3 %s\n", SDL_HasSSE3()? "detected" : "not detected"); + SDL_Log("SSE4.1 %s\n", SDL_HasSSE41()? "detected" : "not detected"); + SDL_Log("SSE4.2 %s\n", SDL_HasSSE42()? "detected" : "not detected"); + SDL_Log("AVX %s\n", SDL_HasAVX()? "detected" : "not detected"); + SDL_Log("System RAM %d MB\n", SDL_GetSystemRAM()); + } + return (0); +} + +int +TestAssertions(SDL_bool verbose) +{ + SDL_assert(1); + SDL_assert_release(1); + SDL_assert_paranoid(1); + SDL_assert(0 || 1); + SDL_assert_release(0 || 1); + SDL_assert_paranoid(0 || 1); + +#if 0 /* enable this to test assertion failures. */ + SDL_assert_release(1 == 2); + SDL_assert_release(5 < 4); + SDL_assert_release(0 && "This is a test"); +#endif + + { + const SDL_AssertData *item = SDL_GetAssertionReport(); + while (item) { + SDL_Log("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", + item->condition, item->function, item->filename, + item->linenum, item->trigger_count, + item->always_ignore ? "yes" : "no"); + item = item->next; + } + } + return (0); +} + +int +main(int argc, char *argv[]) +{ + SDL_bool verbose = SDL_TRUE; + int status = 0; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) { + verbose = SDL_FALSE; + } + if (verbose) { + SDL_Log("This system is running %s\n", SDL_GetPlatform()); + } + + status += TestTypes(verbose); + status += TestEndian(verbose); + status += TestCPUInfo(verbose); + status += TestAssertions(verbose); + + return status; +} diff --git a/Engine/lib/sdl/test/testpower.c b/Engine/lib/sdl/test/testpower.c new file mode 100644 index 0000000000..300d21a24d --- /dev/null +++ b/Engine/lib/sdl/test/testpower.c @@ -0,0 +1,80 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple test of power subsystem. */ + +#include +#include "SDL.h" + +static void +report_power(void) +{ + int seconds, percent; + const SDL_PowerState state = SDL_GetPowerInfo(&seconds, &percent); + char *statestr = NULL; + + SDL_Log("SDL-reported power info...\n"); + switch (state) { + case SDL_POWERSTATE_UNKNOWN: + statestr = "Unknown"; + break; + case SDL_POWERSTATE_ON_BATTERY: + statestr = "On battery"; + break; + case SDL_POWERSTATE_NO_BATTERY: + statestr = "No battery"; + break; + case SDL_POWERSTATE_CHARGING: + statestr = "Charging"; + break; + case SDL_POWERSTATE_CHARGED: + statestr = "Charged"; + break; + default: + statestr = "!!API ERROR!!"; + break; + } + + SDL_Log("State: %s\n", statestr); + + if (percent == -1) { + SDL_Log("Percent left: unknown\n"); + } else { + SDL_Log("Percent left: %d%%\n", percent); + } + + if (seconds == -1) { + SDL_Log("Time left: unknown\n"); + } else { + SDL_Log("Time left: %d minutes, %d seconds\n", (int) (seconds / 60), + (int) (seconds % 60)); + } +} + + +int +main(int argc, char *argv[]) +{ + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(0) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 1; + } + + report_power(); + + SDL_Quit(); + return 0; +} + +/* end of testpower.c ... */ diff --git a/Engine/lib/sdl/test/testrelative.c b/Engine/lib/sdl/test/testrelative.c new file mode 100644 index 0000000000..59d23f6388 --- /dev/null +++ b/Engine/lib/sdl/test/testrelative.c @@ -0,0 +1,126 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple program: Test relative mouse motion */ + +#include +#include +#include + +#include "SDL_test_common.h" + +#ifdef __EMSCRIPTEN__ +#include +#endif + +static SDLTest_CommonState *state; +int i, done; +SDL_Rect rect; +SDL_Event event; + +static void +DrawRects(SDL_Renderer * renderer, SDL_Rect * rect) +{ + SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); + SDL_RenderFillRect(renderer, rect); +} + +static void +loop(){ + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + switch(event.type) { + case SDL_MOUSEMOTION: + { + rect.x += event.motion.xrel; + rect.y += event.motion.yrel; + } + break; + } + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Rect viewport; + SDL_Renderer *renderer = state->renderers[i]; + if (state->windows[i] == NULL) + continue; + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0x00, 0xFF); + SDL_RenderClear(renderer); + + /* Wrap the cursor rectangle at the screen edges to keep it visible */ + SDL_RenderGetViewport(renderer, &viewport); + if (rect.x < viewport.x) rect.x += viewport.w; + if (rect.y < viewport.y) rect.y += viewport.h; + if (rect.x > viewport.x + viewport.w) rect.x -= viewport.w; + if (rect.y > viewport.y + viewport.h) rect.y -= viewport.h; + + DrawRects(renderer, &rect); + + SDL_RenderPresent(renderer); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc; ++i) { + SDLTest_CommonArg(state, i); + } + if (!SDLTest_CommonInit(state)) { + return 2; + } + + /* Create the windows and initialize the renderers */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE); + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + srand((unsigned int)time(NULL)); + if(SDL_SetRelativeMouseMode(SDL_TRUE) < 0) { + return 3; + }; + + rect.x = DEFAULT_WINDOW_WIDTH / 2; + rect.y = DEFAULT_WINDOW_HEIGHT / 2; + rect.w = 10; + rect.h = 10; + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + SDLTest_CommonQuit(state); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testrendercopyex.c b/Engine/lib/sdl/test/testrendercopyex.c new file mode 100644 index 0000000000..856abf7d0b --- /dev/null +++ b/Engine/lib/sdl/test/testrendercopyex.c @@ -0,0 +1,233 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + + +static SDLTest_CommonState *state; + +typedef struct { + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_Rect sprite_rect; + int scale_direction; +} DrawState; + +DrawState *drawstates; +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp; + SDL_Texture *texture; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return NULL; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + } + + /* Create textures from the image */ + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return NULL; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return texture; +} + +void +Draw(DrawState *s) +{ + SDL_Rect viewport; + SDL_Texture *target; + SDL_Point *center=NULL; + SDL_Point origin = {0,0}; + + SDL_RenderGetViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background */ + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + center = &origin; + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopyEx(s->renderer, s->sprite, NULL, &s->sprite_rect, (double)s->sprite_rect.w, center, s->scale_direction); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderCopy(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + /* SDL_Delay(10); */ +} + +void loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + Draw(&drawstates[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + int frames; + Uint32 then, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE); + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, + &drawstate->sprite_rect.w, &drawstate->sprite_rect.h); + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testrendertarget.c b/Engine/lib/sdl/test/testrendertarget.c new file mode 100644 index 0000000000..c5e1dce05b --- /dev/null +++ b/Engine/lib/sdl/test/testrendertarget.c @@ -0,0 +1,335 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + + +static SDLTest_CommonState *state; + +typedef struct { + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_Rect sprite_rect; + int scale_direction; +} DrawState; + +DrawState *drawstates; +int done; +SDL_bool test_composite = SDL_FALSE; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp; + SDL_Texture *texture; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return NULL; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + } + + /* Create textures from the image */ + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return NULL; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return texture; +} + +SDL_bool +DrawComposite(DrawState *s) +{ + SDL_Rect viewport, R; + SDL_Texture *target; + + static SDL_bool blend_tested = SDL_FALSE; + if (!blend_tested) { + SDL_Texture *A, *B; + Uint32 P; + + A = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1); + SDL_SetTextureBlendMode(A, SDL_BLENDMODE_BLEND); + + B = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, 1, 1); + SDL_SetTextureBlendMode(B, SDL_BLENDMODE_BLEND); + + SDL_SetRenderTarget(s->renderer, A); + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x80); + SDL_RenderFillRect(s->renderer, NULL); + + SDL_SetRenderTarget(s->renderer, B); + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00); + SDL_RenderFillRect(s->renderer, NULL); + SDL_RenderCopy(s->renderer, A, NULL, NULL); + SDL_RenderReadPixels(s->renderer, NULL, SDL_PIXELFORMAT_ARGB8888, &P, sizeof(P)); + + SDL_Log("Blended pixel: 0x%8.8X\n", P); + + SDL_DestroyTexture(A); + SDL_DestroyTexture(B); + blend_tested = SDL_TRUE; + } + + SDL_RenderGetViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + SDL_SetTextureBlendMode(target, SDL_BLENDMODE_BLEND); + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background. + This is solid black so when the sprite is copied to it, any per-pixel alpha will be blended through. + */ + SDL_SetRenderDrawColor(s->renderer, 0x00, 0x00, 0x00, 0x00); + SDL_RenderFillRect(s->renderer, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_BLEND); + SDL_SetRenderDrawColor(s->renderer, 0xff, 0x00, 0x00, 0x80); + R.x = 0; + R.y = 0; + R.w = 100; + R.h = 100; + SDL_RenderFillRect(s->renderer, &R); + SDL_SetRenderDrawBlendMode(s->renderer, SDL_BLENDMODE_NONE); + + SDL_RenderCopy(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + return SDL_TRUE; +} + +SDL_bool +Draw(DrawState *s) +{ + SDL_Rect viewport; + SDL_Texture *target; + + SDL_RenderGetViewport(s->renderer, &viewport); + + target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); + if (!target) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create render target texture: %s\n", SDL_GetError()); + return SDL_FALSE; + } + SDL_SetRenderTarget(s->renderer, target); + + /* Draw the background */ + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect); + + SDL_SetRenderTarget(s->renderer, NULL); + SDL_RenderCopy(s->renderer, target, NULL, NULL); + SDL_DestroyTexture(target); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); + return SDL_TRUE; +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + if (test_composite) { + if (!DrawComposite(&drawstates[i])) done = 1; + } else { + if (!Draw(&drawstates[i])) done = 1; + } + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + int frames; + Uint32 then, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--composite") == 0) { + test_composite = SDL_TRUE; + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--composite]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + if (test_composite) { + drawstate->sprite = LoadTexture(drawstate->renderer, "icon-alpha.bmp", SDL_TRUE); + } else { + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE); + } + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, + &drawstate->sprite_rect.w, &drawstate->sprite_rect.h); + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testresample.c b/Engine/lib/sdl/test/testresample.c new file mode 100644 index 0000000000..0e92bbe11a --- /dev/null +++ b/Engine/lib/sdl/test/testresample.c @@ -0,0 +1,118 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include "SDL.h" + +int +main(int argc, char **argv) +{ + SDL_AudioSpec spec; + SDL_AudioCVT cvt; + Uint32 len = 0; + Uint8 *data = NULL; + int cvtfreq = 0; + int bitsize = 0; + int blockalign = 0; + int avgbytes = 0; + SDL_RWops *io = NULL; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argc != 4) { + SDL_Log("USAGE: %s in.wav out.wav newfreq\n", argv[0]); + return 1; + } + + cvtfreq = SDL_atoi(argv[3]); + + if (SDL_Init(SDL_INIT_AUDIO) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Init() failed: %s\n", SDL_GetError()); + return 2; + } + + if (SDL_LoadWAV(argv[1], &spec, &data, &len) == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "failed to load %s: %s\n", argv[1], SDL_GetError()); + SDL_Quit(); + return 3; + } + + if (SDL_BuildAudioCVT(&cvt, spec.format, spec.channels, spec.freq, + spec.format, spec.channels, cvtfreq) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "failed to build CVT: %s\n", SDL_GetError()); + SDL_FreeWAV(data); + SDL_Quit(); + return 4; + } + + cvt.len = len; + cvt.buf = (Uint8 *) SDL_malloc(len * cvt.len_mult); + if (cvt.buf == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory.\n"); + SDL_FreeWAV(data); + SDL_Quit(); + return 5; + } + SDL_memcpy(cvt.buf, data, len); + + if (SDL_ConvertAudio(&cvt) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Conversion failed: %s\n", SDL_GetError()); + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 6; + } + + /* write out a WAV header... */ + io = SDL_RWFromFile(argv[2], "wb"); + if (io == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fopen('%s') failed: %s\n", argv[2], SDL_GetError()); + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 7; + } + + bitsize = SDL_AUDIO_BITSIZE(spec.format); + blockalign = (bitsize / 8) * spec.channels; + avgbytes = cvtfreq * blockalign; + + SDL_WriteLE32(io, 0x46464952); /* RIFF */ + SDL_WriteLE32(io, len * cvt.len_mult + 36); + SDL_WriteLE32(io, 0x45564157); /* WAVE */ + SDL_WriteLE32(io, 0x20746D66); /* fmt */ + SDL_WriteLE32(io, 16); /* chunk size */ + SDL_WriteLE16(io, 1); /* uncompressed */ + SDL_WriteLE16(io, spec.channels); /* channels */ + SDL_WriteLE32(io, cvtfreq); /* sample rate */ + SDL_WriteLE32(io, avgbytes); /* average bytes per second */ + SDL_WriteLE16(io, blockalign); /* block align */ + SDL_WriteLE16(io, bitsize); /* significant bits per sample */ + SDL_WriteLE32(io, 0x61746164); /* data */ + SDL_WriteLE32(io, cvt.len_cvt); /* size */ + SDL_RWwrite(io, cvt.buf, cvt.len_cvt, 1); + + if (SDL_RWclose(io) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "fclose('%s') failed: %s\n", argv[2], SDL_GetError()); + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 8; + } /* if */ + + SDL_free(cvt.buf); + SDL_FreeWAV(data); + SDL_Quit(); + return 0; +} /* main */ + +/* end of testresample.c ... */ diff --git a/Engine/lib/sdl/test/testrumble.c b/Engine/lib/sdl/test/testrumble.c new file mode 100644 index 0000000000..ea7466d2da --- /dev/null +++ b/Engine/lib/sdl/test/testrumble.c @@ -0,0 +1,152 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* +Copyright (c) 2011, Edgar Simo Serra +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of the Simple Directmedia Layer (SDL) nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * includes + */ +#include +#include /* strstr */ +#include /* isdigit */ + +#include "SDL.h" + +#ifndef SDL_HAPTIC_DISABLED + +static SDL_Haptic *haptic; + + +/** + * @brief The entry point of this force feedback demo. + * @param[in] argc Number of arguments. + * @param[in] argv Array of argc arguments. + */ +int +main(int argc, char **argv) +{ + int i; + char *name; + int index; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + name = NULL; + index = -1; + if (argc > 1) { + name = argv[1]; + if ((strcmp(name, "--help") == 0) || (strcmp(name, "-h") == 0)) { + SDL_Log("USAGE: %s [device]\n" + "If device is a two-digit number it'll use it as an index, otherwise\n" + "it'll use it as if it were part of the device's name.\n", + argv[0]); + return 0; + } + + i = strlen(name); + if ((i < 3) && isdigit(name[0]) && ((i == 1) || isdigit(name[1]))) { + index = atoi(name); + name = NULL; + } + } + + /* Initialize the force feedbackness */ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_JOYSTICK | + SDL_INIT_HAPTIC); + SDL_Log("%d Haptic devices detected.\n", SDL_NumHaptics()); + if (SDL_NumHaptics() > 0) { + /* We'll just use index or the first force feedback device found */ + if (name == NULL) { + i = (index != -1) ? index : 0; + } + /* Try to find matching device */ + else { + for (i = 0; i < SDL_NumHaptics(); i++) { + if (strstr(SDL_HapticName(i), name) != NULL) + break; + } + + if (i >= SDL_NumHaptics()) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to find device matching '%s', aborting.\n", + name); + return 1; + } + } + + haptic = SDL_HapticOpen(i); + if (haptic == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create the haptic device: %s\n", + SDL_GetError()); + return 1; + } + SDL_Log("Device: %s\n", SDL_HapticName(i)); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No Haptic devices found!\n"); + return 1; + } + + /* We only want force feedback errors. */ + SDL_ClearError(); + + if (SDL_HapticRumbleSupported(haptic) == SDL_FALSE) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Rumble not supported!\n"); + return 1; + } + if (SDL_HapticRumbleInit(haptic) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to initialize rumble: %s\n", SDL_GetError()); + return 1; + } + SDL_Log("Playing 2 second rumble at 0.5 magnitude.\n"); + if (SDL_HapticRumblePlay(haptic, 0.5, 5000) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to play rumble: %s\n", SDL_GetError() ); + return 1; + } + SDL_Delay(2000); + SDL_Log("Stopping rumble.\n"); + SDL_HapticRumbleStop(haptic); + SDL_Delay(2000); + SDL_Log("Playing 2 second rumble at 0.3 magnitude.\n"); + if (SDL_HapticRumblePlay(haptic, 0.3f, 5000) != 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to play rumble: %s\n", SDL_GetError() ); + return 1; + } + SDL_Delay(2000); + + /* Quit */ + if (haptic != NULL) + SDL_HapticClose(haptic); + SDL_Quit(); + + return 0; +} + +#else + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Haptic support.\n"); + exit(1); +} + +#endif diff --git a/Engine/lib/sdl/test/testscale.c b/Engine/lib/sdl/test/testscale.c new file mode 100644 index 0000000000..9f5fdbff10 --- /dev/null +++ b/Engine/lib/sdl/test/testscale.c @@ -0,0 +1,224 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +#define WINDOW_WIDTH 640 +#define WINDOW_HEIGHT 480 + +static SDLTest_CommonState *state; + +typedef struct { + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Texture *background; + SDL_Texture *sprite; + SDL_Rect sprite_rect; + int scale_direction; +} DrawState; + +DrawState *drawstates; +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +SDL_Texture * +LoadTexture(SDL_Renderer *renderer, char *file, SDL_bool transparent) +{ + SDL_Surface *temp; + SDL_Texture *texture; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return NULL; + } + + /* Set transparent pixel as the pixel at (0,0) */ + if (transparent) { + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + } + + /* Create textures from the image */ + texture = SDL_CreateTextureFromSurface(renderer, temp); + if (!texture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return NULL; + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return texture; +} + +void +Draw(DrawState *s) +{ + SDL_Rect viewport; + + SDL_RenderGetViewport(s->renderer, &viewport); + + /* Draw the background */ + SDL_RenderCopy(s->renderer, s->background, NULL, NULL); + + /* Scale and draw the sprite */ + s->sprite_rect.w += s->scale_direction; + s->sprite_rect.h += s->scale_direction; + if (s->scale_direction > 0) { + if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { + s->scale_direction = -1; + } + } else { + if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { + s->scale_direction = 1; + } + } + s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; + s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; + + SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect); + + /* Update the screen! */ + SDL_RenderPresent(s->renderer); +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + Draw(&drawstates[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + int frames; + Uint32 then, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + return 1; + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + drawstates = SDL_stack_alloc(DrawState, state->num_windows); + for (i = 0; i < state->num_windows; ++i) { + DrawState *drawstate = &drawstates[i]; + + drawstate->window = state->windows[i]; + drawstate->renderer = state->renderers[i]; + drawstate->sprite = LoadTexture(drawstate->renderer, "icon.bmp", SDL_TRUE); + drawstate->background = LoadTexture(drawstate->renderer, "sample.bmp", SDL_FALSE); + if (!drawstate->sprite || !drawstate->background) { + quit(2); + } + SDL_QueryTexture(drawstate->sprite, NULL, NULL, + &drawstate->sprite_rect.w, &drawstate->sprite_rect.h); + drawstate->scale_direction = 1; + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + + SDL_stack_free(drawstates); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testsem.c b/Engine/lib/sdl/test/testsem.c new file mode 100644 index 0000000000..b8d3b27491 --- /dev/null +++ b/Engine/lib/sdl/test/testsem.c @@ -0,0 +1,130 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL semaphore code */ + +#include +#include +#include + +#include "SDL.h" + +#define NUM_THREADS 10 + +static SDL_sem *sem; +int alive = 1; + +int SDLCALL +ThreadFunc(void *data) +{ + int threadnum = (int) (uintptr_t) data; + while (alive) { + SDL_SemWait(sem); + SDL_Log("Thread number %d has got the semaphore (value = %d)!\n", + threadnum, SDL_SemValue(sem)); + SDL_Delay(200); + SDL_SemPost(sem); + SDL_Log("Thread number %d has released the semaphore (value = %d)!\n", + threadnum, SDL_SemValue(sem)); + SDL_Delay(1); /* For the scheduler */ + } + SDL_Log("Thread number %d exiting.\n", threadnum); + return 0; +} + +static void +killed(int sig) +{ + alive = 0; +} + +static void +TestWaitTimeout(void) +{ + Uint32 start_ticks; + Uint32 end_ticks; + Uint32 duration; + int retval; + + sem = SDL_CreateSemaphore(0); + SDL_Log("Waiting 2 seconds on semaphore\n"); + + start_ticks = SDL_GetTicks(); + retval = SDL_SemWaitTimeout(sem, 2000); + end_ticks = SDL_GetTicks(); + + duration = end_ticks - start_ticks; + + /* Accept a little offset in the effective wait */ + if (duration > 1900 && duration < 2050) + SDL_Log("Wait done.\n"); + else + SDL_Log("Wait took %d milliseconds\n", duration); + + /* Check to make sure the return value indicates timed out */ + if (retval != SDL_MUTEX_TIMEDOUT) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_SemWaitTimeout returned: %d; expected: %d\n", retval, SDL_MUTEX_TIMEDOUT); +} + +int +main(int argc, char **argv) +{ + SDL_Thread *threads[NUM_THREADS]; + uintptr_t i; + int init_sem; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (argc < 2) { + SDL_Log("Usage: %s init_value\n", argv[0]); + return (1); + } + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + signal(SIGTERM, killed); + signal(SIGINT, killed); + + init_sem = atoi(argv[1]); + sem = SDL_CreateSemaphore(init_sem); + + SDL_Log("Running %d threads, semaphore value = %d\n", NUM_THREADS, + init_sem); + /* Create all the threads */ + for (i = 0; i < NUM_THREADS; ++i) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Thread%u", (unsigned int) i); + threads[i] = SDL_CreateThread(ThreadFunc, name, (void *) i); + } + + /* Wait 10 seconds */ + SDL_Delay(10 * 1000); + + /* Wait for all threads to finish */ + SDL_Log("Waiting for threads to finish\n"); + alive = 0; + for (i = 0; i < NUM_THREADS; ++i) { + SDL_WaitThread(threads[i], NULL); + } + SDL_Log("Finished waiting for threads\n"); + + SDL_DestroySemaphore(sem); + + TestWaitTimeout(); + + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testshader.c b/Engine/lib/sdl/test/testshader.c new file mode 100644 index 0000000000..fc6da29875 --- /dev/null +++ b/Engine/lib/sdl/test/testshader.c @@ -0,0 +1,500 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* This is a simple example of using GLSL shaders with SDL */ + +#include "SDL.h" + +#ifdef HAVE_OPENGL + +#include "SDL_opengl.h" + + +static SDL_bool shaders_supported; +static int current_shader = 0; + +enum { + SHADER_COLOR, + SHADER_TEXTURE, + SHADER_TEXCOORDS, + NUM_SHADERS +}; + +typedef struct { + GLhandleARB program; + GLhandleARB vert_shader; + GLhandleARB frag_shader; + const char *vert_source; + const char *frag_source; +} ShaderData; + +static ShaderData shaders[NUM_SHADERS] = { + + /* SHADER_COLOR */ + { 0, 0, 0, + /* vertex shader */ +"varying vec4 v_color;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_color = gl_Color;\n" +"}", + /* fragment shader */ +"varying vec4 v_color;\n" +"\n" +"void main()\n" +"{\n" +" gl_FragColor = v_color;\n" +"}" + }, + + /* SHADER_TEXTURE */ + { 0, 0, 0, + /* vertex shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_color = gl_Color;\n" +" v_texCoord = vec2(gl_MultiTexCoord0);\n" +"}", + /* fragment shader */ +"varying vec4 v_color;\n" +"varying vec2 v_texCoord;\n" +"uniform sampler2D tex0;\n" +"\n" +"void main()\n" +"{\n" +" gl_FragColor = texture2D(tex0, v_texCoord) * v_color;\n" +"}" + }, + + /* SHADER_TEXCOORDS */ + { 0, 0, 0, + /* vertex shader */ +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" +" v_texCoord = vec2(gl_MultiTexCoord0);\n" +"}", + /* fragment shader */ +"varying vec2 v_texCoord;\n" +"\n" +"void main()\n" +"{\n" +" vec4 color;\n" +" vec2 delta;\n" +" float dist;\n" +"\n" +" delta = vec2(0.5, 0.5) - v_texCoord;\n" +" dist = dot(delta, delta);\n" +"\n" +" color.r = v_texCoord.x;\n" +" color.g = v_texCoord.x * v_texCoord.y;\n" +" color.b = v_texCoord.y;\n" +" color.a = 1.0 - (dist * 4.0);\n" +" gl_FragColor = color;\n" +"}" + }, +}; + +static PFNGLATTACHOBJECTARBPROC glAttachObjectARB; +static PFNGLCOMPILESHADERARBPROC glCompileShaderARB; +static PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB; +static PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB; +static PFNGLDELETEOBJECTARBPROC glDeleteObjectARB; +static PFNGLGETINFOLOGARBPROC glGetInfoLogARB; +static PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB; +static PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB; +static PFNGLLINKPROGRAMARBPROC glLinkProgramARB; +static PFNGLSHADERSOURCEARBPROC glShaderSourceARB; +static PFNGLUNIFORM1IARBPROC glUniform1iARB; +static PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB; + +static SDL_bool CompileShader(GLhandleARB shader, const char *source) +{ + GLint status; + + glShaderSourceARB(shader, 1, &source, NULL); + glCompileShaderARB(shader); + glGetObjectParameterivARB(shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); + if (status == 0) { + GLint length; + char *info; + + glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); + info = SDL_stack_alloc(char, length+1); + glGetInfoLogARB(shader, length, NULL, info); + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Failed to compile shader:\n%s\n%s", source, info); + SDL_stack_free(info); + + return SDL_FALSE; + } else { + return SDL_TRUE; + } +} + +static SDL_bool CompileShaderProgram(ShaderData *data) +{ + const int num_tmus_bound = 4; + int i; + GLint location; + + glGetError(); + + /* Create one program object to rule them all */ + data->program = glCreateProgramObjectARB(); + + /* Create the vertex shader */ + data->vert_shader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); + if (!CompileShader(data->vert_shader, data->vert_source)) { + return SDL_FALSE; + } + + /* Create the fragment shader */ + data->frag_shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); + if (!CompileShader(data->frag_shader, data->frag_source)) { + return SDL_FALSE; + } + + /* ... and in the darkness bind them */ + glAttachObjectARB(data->program, data->vert_shader); + glAttachObjectARB(data->program, data->frag_shader); + glLinkProgramARB(data->program); + + /* Set up some uniform variables */ + glUseProgramObjectARB(data->program); + for (i = 0; i < num_tmus_bound; ++i) { + char tex_name[5]; + SDL_snprintf(tex_name, SDL_arraysize(tex_name), "tex%d", i); + location = glGetUniformLocationARB(data->program, tex_name); + if (location >= 0) { + glUniform1iARB(location, i); + } + } + glUseProgramObjectARB(0); + + return (glGetError() == GL_NO_ERROR) ? SDL_TRUE : SDL_FALSE; +} + +static void DestroyShaderProgram(ShaderData *data) +{ + if (shaders_supported) { + glDeleteObjectARB(data->vert_shader); + glDeleteObjectARB(data->frag_shader); + glDeleteObjectARB(data->program); + } +} + +static SDL_bool InitShaders() +{ + int i; + + /* Check for shader support */ + shaders_supported = SDL_FALSE; + if (SDL_GL_ExtensionSupported("GL_ARB_shader_objects") && + SDL_GL_ExtensionSupported("GL_ARB_shading_language_100") && + SDL_GL_ExtensionSupported("GL_ARB_vertex_shader") && + SDL_GL_ExtensionSupported("GL_ARB_fragment_shader")) { + glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) SDL_GL_GetProcAddress("glAttachObjectARB"); + glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) SDL_GL_GetProcAddress("glCompileShaderARB"); + glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glCreateProgramObjectARB"); + glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) SDL_GL_GetProcAddress("glCreateShaderObjectARB"); + glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) SDL_GL_GetProcAddress("glDeleteObjectARB"); + glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) SDL_GL_GetProcAddress("glGetInfoLogARB"); + glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) SDL_GL_GetProcAddress("glGetObjectParameterivARB"); + glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) SDL_GL_GetProcAddress("glGetUniformLocationARB"); + glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) SDL_GL_GetProcAddress("glLinkProgramARB"); + glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) SDL_GL_GetProcAddress("glShaderSourceARB"); + glUniform1iARB = (PFNGLUNIFORM1IARBPROC) SDL_GL_GetProcAddress("glUniform1iARB"); + glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) SDL_GL_GetProcAddress("glUseProgramObjectARB"); + if (glAttachObjectARB && + glCompileShaderARB && + glCreateProgramObjectARB && + glCreateShaderObjectARB && + glDeleteObjectARB && + glGetInfoLogARB && + glGetObjectParameterivARB && + glGetUniformLocationARB && + glLinkProgramARB && + glShaderSourceARB && + glUniform1iARB && + glUseProgramObjectARB) { + shaders_supported = SDL_TRUE; + } + } + + if (!shaders_supported) { + return SDL_FALSE; + } + + /* Compile all the shaders */ + for (i = 0; i < NUM_SHADERS; ++i) { + if (!CompileShaderProgram(&shaders[i])) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to compile shader!\n"); + return SDL_FALSE; + } + } + + /* We're done! */ + return SDL_TRUE; +} + +static void QuitShaders() +{ + int i; + + for (i = 0; i < NUM_SHADERS; ++i) { + DestroyShaderProgram(&shaders[i]); + } +} + +/* Quick utility function for texture creation */ +static int +power_of_two(int input) +{ + int value = 1; + + while (value < input) { + value <<= 1; + } + return value; +} + +GLuint +SDL_GL_LoadTexture(SDL_Surface * surface, GLfloat * texcoord) +{ + GLuint texture; + int w, h; + SDL_Surface *image; + SDL_Rect area; + SDL_BlendMode saved_mode; + + /* Use the surface width and height expanded to powers of 2 */ + w = power_of_two(surface->w); + h = power_of_two(surface->h); + texcoord[0] = 0.0f; /* Min X */ + texcoord[1] = 0.0f; /* Min Y */ + texcoord[2] = (GLfloat) surface->w / w; /* Max X */ + texcoord[3] = (GLfloat) surface->h / h; /* Max Y */ + + image = SDL_CreateRGBSurface(SDL_SWSURFACE, w, h, 32, +#if SDL_BYTEORDER == SDL_LIL_ENDIAN /* OpenGL RGBA masks */ + 0x000000FF, + 0x0000FF00, 0x00FF0000, 0xFF000000 +#else + 0xFF000000, + 0x00FF0000, 0x0000FF00, 0x000000FF +#endif + ); + if (image == NULL) { + return 0; + } + + /* Save the alpha blending attributes */ + SDL_GetSurfaceBlendMode(surface, &saved_mode); + SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_NONE); + + /* Copy the surface into the GL texture image */ + area.x = 0; + area.y = 0; + area.w = surface->w; + area.h = surface->h; + SDL_BlitSurface(surface, &area, image, &area); + + /* Restore the alpha blending attributes */ + SDL_SetSurfaceBlendMode(surface, saved_mode); + + /* Create an OpenGL texture for the image */ + glGenTextures(1, &texture); + glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, + 0, + GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); + SDL_FreeSurface(image); /* No longer needed */ + + return texture; +} + +/* A general OpenGL initialization function. Sets all of the initial parameters. */ +void InitGL(int Width, int Height) /* We call this right after our OpenGL window is created. */ +{ + GLdouble aspect; + + glViewport(0, 0, Width, Height); + glClearColor(0.0f, 0.0f, 0.0f, 0.0f); /* This Will Clear The Background Color To Black */ + glClearDepth(1.0); /* Enables Clearing Of The Depth Buffer */ + glDepthFunc(GL_LESS); /* The Type Of Depth Test To Do */ + glEnable(GL_DEPTH_TEST); /* Enables Depth Testing */ + glShadeModel(GL_SMOOTH); /* Enables Smooth Color Shading */ + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); /* Reset The Projection Matrix */ + + aspect = (GLdouble)Width / Height; + glOrtho(-3.0, 3.0, -3.0 / aspect, 3.0 / aspect, 0.0, 1.0); + + glMatrixMode(GL_MODELVIEW); +} + +/* The main drawing function. */ +void DrawGLScene(SDL_Window *window, GLuint texture, GLfloat * texcoord) +{ + /* Texture coordinate lookup, to make it simple */ + enum { + MINX, + MINY, + MAXX, + MAXY + }; + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* Clear The Screen And The Depth Buffer */ + glLoadIdentity(); /* Reset The View */ + + glTranslatef(-1.5f,0.0f,0.0f); /* Move Left 1.5 Units */ + + /* draw a triangle (in smooth coloring mode) */ + glBegin(GL_POLYGON); /* start drawing a polygon */ + glColor3f(1.0f,0.0f,0.0f); /* Set The Color To Red */ + glVertex3f( 0.0f, 1.0f, 0.0f); /* Top */ + glColor3f(0.0f,1.0f,0.0f); /* Set The Color To Green */ + glVertex3f( 1.0f,-1.0f, 0.0f); /* Bottom Right */ + glColor3f(0.0f,0.0f,1.0f); /* Set The Color To Blue */ + glVertex3f(-1.0f,-1.0f, 0.0f); /* Bottom Left */ + glEnd(); /* we're done with the polygon (smooth color interpolation) */ + + glTranslatef(3.0f,0.0f,0.0f); /* Move Right 3 Units */ + + /* Enable blending */ + glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + /* draw a textured square (quadrilateral) */ + glEnable(GL_TEXTURE_2D); + glBindTexture(GL_TEXTURE_2D, texture); + glColor3f(1.0f,1.0f,1.0f); + if (shaders_supported) { + glUseProgramObjectARB(shaders[current_shader].program); + } + + glBegin(GL_QUADS); /* start drawing a polygon (4 sided) */ + glTexCoord2f(texcoord[MINX], texcoord[MINY]); + glVertex3f(-1.0f, 1.0f, 0.0f); /* Top Left */ + glTexCoord2f(texcoord[MAXX], texcoord[MINY]); + glVertex3f( 1.0f, 1.0f, 0.0f); /* Top Right */ + glTexCoord2f(texcoord[MAXX], texcoord[MAXY]); + glVertex3f( 1.0f,-1.0f, 0.0f); /* Bottom Right */ + glTexCoord2f(texcoord[MINX], texcoord[MAXY]); + glVertex3f(-1.0f,-1.0f, 0.0f); /* Bottom Left */ + glEnd(); /* done with the polygon */ + + if (shaders_supported) { + glUseProgramObjectARB(0); + } + glDisable(GL_TEXTURE_2D); + + /* swap buffers to display, since we're double buffered. */ + SDL_GL_SwapWindow(window); +} + +int main(int argc, char **argv) +{ + int done; + SDL_Window *window; + SDL_Surface *surface; + GLuint texture; + GLfloat texcoords[4]; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Initialize SDL for video output */ + if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to initialize SDL: %s\n", SDL_GetError()); + exit(1); + } + + /* Create a 640x480 OpenGL screen */ + window = SDL_CreateWindow( "Shader Demo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL ); + if ( !window ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create OpenGL window: %s\n", SDL_GetError()); + SDL_Quit(); + exit(2); + } + + if ( !SDL_GL_CreateContext(window)) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to create OpenGL context: %s\n", SDL_GetError()); + SDL_Quit(); + exit(2); + } + + surface = SDL_LoadBMP("icon.bmp"); + if ( ! surface ) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Unable to load icon.bmp: %s\n", SDL_GetError()); + SDL_Quit(); + exit(3); + } + texture = SDL_GL_LoadTexture(surface, texcoords); + SDL_FreeSurface(surface); + + /* Loop, drawing and checking events */ + InitGL(640, 480); + if (InitShaders()) { + SDL_Log("Shaders supported, press SPACE to cycle them.\n"); + } else { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Shaders not supported!\n"); + } + done = 0; + while ( ! done ) { + DrawGLScene(window, texture, texcoords); + + /* This could go in a separate function */ + { SDL_Event event; + while ( SDL_PollEvent(&event) ) { + if ( event.type == SDL_QUIT ) { + done = 1; + } + if ( event.type == SDL_KEYDOWN ) { + if ( event.key.keysym.sym == SDLK_SPACE ) { + current_shader = (current_shader + 1) % NUM_SHADERS; + } + if ( event.key.keysym.sym == SDLK_ESCAPE ) { + done = 1; + } + } + } + } + } + QuitShaders(); + SDL_Quit(); + return 1; +} + +#else /* HAVE_OPENGL */ + +int +main(int argc, char *argv[]) +{ + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "No OpenGL support on this system\n"); + return 1; +} + +#endif /* HAVE_OPENGL */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testshape.c b/Engine/lib/sdl/test/testshape.c new file mode 100644 index 0000000000..00750a9708 --- /dev/null +++ b/Engine/lib/sdl/test/testshape.c @@ -0,0 +1,201 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +#include +#include +#include +#include "SDL.h" +#include "SDL_shape.h" + +#define SHAPED_WINDOW_X 150 +#define SHAPED_WINDOW_Y 150 +#define SHAPED_WINDOW_DIMENSION 640 + +typedef struct LoadedPicture { + SDL_Surface *surface; + SDL_Texture *texture; + SDL_WindowShapeMode mode; + const char* name; +} LoadedPicture; + +void render(SDL_Renderer *renderer,SDL_Texture *texture,SDL_Rect texture_dimensions) +{ + /* Clear render-target to blue. */ + SDL_SetRenderDrawColor(renderer,0x00,0x00,0xff,0xff); + SDL_RenderClear(renderer); + + /* Render the texture. */ + SDL_RenderCopy(renderer,texture,&texture_dimensions,&texture_dimensions); + + SDL_RenderPresent(renderer); +} + +int main(int argc,char** argv) +{ + Uint8 num_pictures; + LoadedPicture* pictures; + int i, j; + SDL_PixelFormat* format = NULL; + SDL_Window *window; + SDL_Renderer *renderer; + SDL_Color black = {0,0,0,0xff}; + SDL_Event event; + int event_pending = 0; + int should_exit = 0; + unsigned int current_picture; + int button_down; + Uint32 pixelFormat = 0; + int access = 0; + SDL_Rect texture_dimensions; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if(argc < 2) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_Shape requires at least one bitmap file as argument."); + exit(-1); + } + + if(SDL_VideoInit(NULL) == -1) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Could not initialize SDL video."); + exit(-2); + } + + num_pictures = argc - 1; + pictures = (LoadedPicture *)SDL_malloc(sizeof(LoadedPicture)*num_pictures); + for(i=0;iformat; + if(SDL_ISPIXELFORMAT_ALPHA(format->format)) { + pictures[i].mode.mode = ShapeModeBinarizeAlpha; + pictures[i].mode.parameters.binarizationCutoff = 255; + } + else { + pictures[i].mode.mode = ShapeModeColorKey; + pictures[i].mode.parameters.colorKey = black; + } + } + + window = SDL_CreateShapedWindow("SDL_Shape test", + SHAPED_WINDOW_X, SHAPED_WINDOW_Y, + SHAPED_WINDOW_DIMENSION,SHAPED_WINDOW_DIMENSION, + 0); + SDL_SetWindowPosition(window, SHAPED_WINDOW_X, SHAPED_WINDOW_Y); + if(window == NULL) { + for(i=0;i= num_pictures) + current_picture = 0; + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Changing to shaped bmp: %s", pictures[current_picture].name); + SDL_QueryTexture(pictures[current_picture].texture,(Uint32 *)&pixelFormat,(int *)&access,&texture_dimensions.w,&texture_dimensions.h); + SDL_SetWindowSize(window,texture_dimensions.w,texture_dimensions.h); + SDL_SetWindowShape(window,pictures[current_picture].surface,&pictures[current_picture].mode); + } + if(event.type == SDL_QUIT) + should_exit = 1; + event_pending = 0; + } + render(renderer,pictures[current_picture].texture,texture_dimensions); + SDL_Delay(10); + } + + /* Free the textures. */ + for(i=0;i + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test.h" +#include "SDL_test_common.h" + +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static SDLTest_CommonState *state; +static int num_sprites; +static SDL_Texture **sprites; +static SDL_bool cycle_color; +static SDL_bool cycle_alpha; +static int cycle_direction = 1; +static int current_alpha = 0; +static int current_color = 0; +static SDL_Rect *positions; +static SDL_Rect *velocities; +static int sprite_w, sprite_h; +static SDL_BlendMode blendMode = SDL_BLENDMODE_BLEND; + +/* Number of iterations to move sprites - used for visual tests. */ +/* -1: infinite random moves (default); >=0: enables N deterministic moves */ +static int iterations = -1; + +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_free(sprites); + SDL_free(positions); + SDL_free(velocities); + SDLTest_CommonQuit(state); + exit(rc); +} + +int +LoadSprite(const char *file) +{ + int i; + SDL_Surface *temp; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s", file, SDL_GetError()); + return (-1); + } + sprite_w = temp->w; + sprite_h = temp->h; + + /* Set transparent pixel as the pixel at (0,0) */ + if (temp->format->palette) { + SDL_SetColorKey(temp, 1, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, 1, (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, 1, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, 1, (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, 1, *(Uint32 *) temp->pixels); + break; + } + } + + /* Create textures from the image */ + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + sprites[i] = SDL_CreateTextureFromSurface(renderer, temp); + if (!sprites[i]) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return (-1); + } + SDL_SetTextureBlendMode(sprites[i], blendMode); + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return (0); +} + +void +MoveSprites(SDL_Renderer * renderer, SDL_Texture * sprite) +{ + int i; + SDL_Rect viewport, temp; + SDL_Rect *position, *velocity; + + /* Query the sizes */ + SDL_RenderGetViewport(renderer, &viewport); + + /* Cycle the color and alpha, if desired */ + if (cycle_color) { + current_color += cycle_direction; + if (current_color < 0) { + current_color = 0; + cycle_direction = -cycle_direction; + } + if (current_color > 255) { + current_color = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureColorMod(sprite, 255, (Uint8) current_color, + (Uint8) current_color); + } + if (cycle_alpha) { + current_alpha += cycle_direction; + if (current_alpha < 0) { + current_alpha = 0; + cycle_direction = -cycle_direction; + } + if (current_alpha > 255) { + current_alpha = 255; + cycle_direction = -cycle_direction; + } + SDL_SetTextureAlphaMod(sprite, (Uint8) current_alpha); + } + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Test points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0x00, 0x00, 0xFF); + SDL_RenderDrawPoint(renderer, 0, 0); + SDL_RenderDrawPoint(renderer, viewport.w-1, 0); + SDL_RenderDrawPoint(renderer, 0, viewport.h-1); + SDL_RenderDrawPoint(renderer, viewport.w-1, viewport.h-1); + + /* Test horizontal and vertical lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderDrawLine(renderer, 1, 0, viewport.w-2, 0); + SDL_RenderDrawLine(renderer, 1, viewport.h-1, viewport.w-2, viewport.h-1); + SDL_RenderDrawLine(renderer, 0, 1, 0, viewport.h-2); + SDL_RenderDrawLine(renderer, viewport.w-1, 1, viewport.w-1, viewport.h-2); + + /* Test fill and copy */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); + temp.x = 1; + temp.y = 1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + temp.x = viewport.w-sprite_w-1; + temp.y = 1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + temp.x = 1; + temp.y = viewport.h-sprite_h-1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + temp.x = viewport.w-sprite_w-1; + temp.y = viewport.h-sprite_h-1; + temp.w = sprite_w; + temp.h = sprite_h; + SDL_RenderFillRect(renderer, &temp); + SDL_RenderCopy(renderer, sprite, NULL, &temp); + + /* Test diagonal lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderDrawLine(renderer, sprite_w, sprite_h, + viewport.w-sprite_w-2, viewport.h-sprite_h-2); + SDL_RenderDrawLine(renderer, viewport.w-sprite_w-2, sprite_h, + sprite_w, viewport.h-sprite_h-2); + + /* Conditionally move the sprites, bounce at the wall */ + if (iterations == -1 || iterations > 0) { + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (viewport.w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (viewport.h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + } + + /* Countdown sprite-move iterations and disable color changes at iteration end - used for visual tests. */ + if (iterations > 0) { + iterations--; + if (iterations == 0) { + cycle_alpha = SDL_FALSE; + cycle_color = SDL_FALSE; + } + } + } + + /* Draw sprites */ + for (i = 0; i < num_sprites; ++i) { + position = &positions[i]; + + /* Blit the sprite onto the screen */ + SDL_RenderCopy(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +void +loop() +{ + int i; + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + MoveSprites(state->renderers[i], sprites[i]); + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + Uint64 seed; + const char *icon = "icon.bmp"; + + /* Initialize parameters */ + num_sprites = NUM_SPRITES; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--blend") == 0) { + if (argv[i + 1]) { + if (SDL_strcasecmp(argv[i + 1], "none") == 0) { + blendMode = SDL_BLENDMODE_NONE; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) { + blendMode = SDL_BLENDMODE_BLEND; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "add") == 0) { + blendMode = SDL_BLENDMODE_ADD; + consumed = 2; + } else if (SDL_strcasecmp(argv[i + 1], "mod") == 0) { + blendMode = SDL_BLENDMODE_MOD; + consumed = 2; + } + } + } else if (SDL_strcasecmp(argv[i], "--iterations") == 0) { + if (argv[i + 1]) { + iterations = SDL_atoi(argv[i + 1]); + if (iterations < -1) iterations = -1; + consumed = 2; + } + } else if (SDL_strcasecmp(argv[i], "--cyclecolor") == 0) { + cycle_color = SDL_TRUE; + consumed = 1; + } else if (SDL_strcasecmp(argv[i], "--cyclealpha") == 0) { + cycle_alpha = SDL_TRUE; + consumed = 1; + } else if (SDL_isdigit(*argv[i])) { + num_sprites = SDL_atoi(argv[i]); + consumed = 1; + } else if (argv[i][0] != '-') { + icon = argv[i]; + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--blend none|blend|add|mod] [--cyclecolor] [--cyclealpha] [--iterations N] [num_sprites] [icon.bmp]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Create the windows, initialize the renderers, and load the textures */ + sprites = + (SDL_Texture **) SDL_malloc(state->num_windows * sizeof(*sprites)); + if (!sprites) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + if (LoadSprite(icon) < 0) { + quit(2); + } + + /* Allocate memory for the sprite info */ + positions = (SDL_Rect *) SDL_malloc(num_sprites * sizeof(SDL_Rect)); + velocities = (SDL_Rect *) SDL_malloc(num_sprites * sizeof(SDL_Rect)); + if (!positions || !velocities) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Out of memory!\n"); + quit(2); + } + + /* Position sprites and set their velocities using the fuzzer */ + if (iterations >= 0) { + /* Deterministic seed - used for visual tests */ + seed = (Uint64)iterations; + } else { + /* Pseudo-random seed generated from the time */ + seed = (Uint64)time(NULL); + } + SDLTest_FuzzerInit(seed); + for (i = 0; i < num_sprites; ++i) { + positions[i].x = SDLTest_RandomIntegerInRange(0, state->window_w - sprite_w); + positions[i].y = SDLTest_RandomIntegerInRange(0, state->window_h - sprite_h); + positions[i].w = sprite_w; + positions[i].h = sprite_h; + velocities[i].x = 0; + velocities[i].y = 0; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = SDLTest_RandomIntegerInRange(-MAX_SPEED, MAX_SPEED); + velocities[i].y = SDLTest_RandomIntegerInRange(-MAX_SPEED, MAX_SPEED); + } + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testspriteminimal.c b/Engine/lib/sdl/test/testspriteminimal.c new file mode 100644 index 0000000000..05f97309c0 --- /dev/null +++ b/Engine/lib/sdl/test/testspriteminimal.c @@ -0,0 +1,194 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Move N sprites around on the screen as fast as possible */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +#define WINDOW_WIDTH 640 +#define WINDOW_HEIGHT 480 +#define NUM_SPRITES 100 +#define MAX_SPEED 1 + +static SDL_Texture *sprite; +static SDL_Rect positions[NUM_SPRITES]; +static SDL_Rect velocities[NUM_SPRITES]; +static int sprite_w, sprite_h; + +SDL_Renderer *renderer; +int done; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + exit(rc); +} + +int +LoadSprite(char *file, SDL_Renderer *renderer) +{ + SDL_Surface *temp; + + /* Load the sprite image */ + temp = SDL_LoadBMP(file); + if (temp == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", file, SDL_GetError()); + return (-1); + } + sprite_w = temp->w; + sprite_h = temp->h; + + /* Set transparent pixel as the pixel at (0,0) */ + if (temp->format->palette) { + SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels); + } else { + switch (temp->format->BitsPerPixel) { + case 15: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint16 *) temp->pixels) & 0x00007FFF); + break; + case 16: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels); + break; + case 24: + SDL_SetColorKey(temp, SDL_TRUE, + (*(Uint32 *) temp->pixels) & 0x00FFFFFF); + break; + case 32: + SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels); + break; + } + } + + /* Create textures from the image */ + sprite = SDL_CreateTextureFromSurface(renderer, temp); + if (!sprite) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError()); + SDL_FreeSurface(temp); + return (-1); + } + SDL_FreeSurface(temp); + + /* We're ready to roll. :) */ + return (0); +} + +void +MoveSprites(SDL_Renderer * renderer, SDL_Texture * sprite) +{ + int i; + int window_w = WINDOW_WIDTH; + int window_h = WINDOW_HEIGHT; + SDL_Rect *position, *velocity; + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + + /* Move the sprite, bounce at the wall, and draw */ + for (i = 0; i < NUM_SPRITES; ++i) { + position = &positions[i]; + velocity = &velocities[i]; + position->x += velocity->x; + if ((position->x < 0) || (position->x >= (window_w - sprite_w))) { + velocity->x = -velocity->x; + position->x += velocity->x; + } + position->y += velocity->y; + if ((position->y < 0) || (position->y >= (window_h - sprite_h))) { + velocity->y = -velocity->y; + position->y += velocity->y; + } + + /* Blit the sprite onto the screen */ + SDL_RenderCopy(renderer, sprite, NULL, position); + } + + /* Update the screen! */ + SDL_RenderPresent(renderer); +} + +void loop() +{ + SDL_Event event; + + /* Check for events */ + while (SDL_PollEvent(&event)) { + if (event.type == SDL_QUIT || event.type == SDL_KEYDOWN) { + done = 1; + } + } + MoveSprites(renderer, sprite); +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + SDL_Window *window; + int i; + + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) { + quit(2); + } + + if (LoadSprite("icon.bmp", renderer) < 0) { + quit(2); + } + + /* Initialize the sprite positions */ + srand(time(NULL)); + for (i = 0; i < NUM_SPRITES; ++i) { + positions[i].x = rand() % (WINDOW_WIDTH - sprite_w); + positions[i].y = rand() % (WINDOW_HEIGHT - sprite_h); + positions[i].w = sprite_w; + positions[i].h = sprite_h; + velocities[i].x = 0; + velocities[i].y = 0; + while (!velocities[i].x && !velocities[i].y) { + velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED; + } + } + + /* Main render loop */ + done = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + quit(0); + + return 0; /* to prevent compiler warning */ +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/teststreaming.c b/Engine/lib/sdl/test/teststreaming.c new file mode 100644 index 0000000000..86cc13917b --- /dev/null +++ b/Engine/lib/sdl/test/teststreaming.c @@ -0,0 +1,190 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/******************************************************************************** + * * + * Running moose :) Coded by Mike Gorchak. * + * * + ********************************************************************************/ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL.h" + +#define MOOSEPIC_W 64 +#define MOOSEPIC_H 88 + +#define MOOSEFRAME_SIZE (MOOSEPIC_W * MOOSEPIC_H) +#define MOOSEFRAMES_COUNT 10 + +SDL_Color MooseColors[84] = { + {49, 49, 49, 255}, {66, 24, 0, 255}, {66, 33, 0, 255}, {66, 66, 66, 255}, + {66, 115, 49, 255}, {74, 33, 0, 255}, {74, 41, 16, 255}, {82, 33, 8, 255}, + {82, 41, 8, 255}, {82, 49, 16, 255}, {82, 82, 82, 255}, {90, 41, 8, 255}, + {90, 41, 16, 255}, {90, 57, 24, 255}, {99, 49, 16, 255}, {99, 66, 24, 255}, + {99, 66, 33, 255}, {99, 74, 33, 255}, {107, 57, 24, 255}, {107, 82, 41, 255}, + {115, 57, 33, 255}, {115, 66, 33, 255}, {115, 66, 41, 255}, {115, 74, 0, 255}, + {115, 90, 49, 255}, {115, 115, 115, 255}, {123, 82, 0, 255}, {123, 99, 57, 255}, + {132, 66, 41, 255}, {132, 74, 41, 255}, {132, 90, 8, 255}, {132, 99, 33, 255}, + {132, 99, 66, 255}, {132, 107, 66, 255}, {140, 74, 49, 255}, {140, 99, 16, 255}, + {140, 107, 74, 255}, {140, 115, 74, 255}, {148, 107, 24, 255}, {148, 115, 82, 255}, + {148, 123, 74, 255}, {148, 123, 90, 255}, {156, 115, 33, 255}, {156, 115, 90, 255}, + {156, 123, 82, 255}, {156, 132, 82, 255}, {156, 132, 99, 255}, {156, 156, 156, 255}, + {165, 123, 49, 255}, {165, 123, 90, 255}, {165, 132, 82, 255}, {165, 132, 90, 255}, + {165, 132, 99, 255}, {165, 140, 90, 255}, {173, 132, 57, 255}, {173, 132, 99, 255}, + {173, 140, 107, 255}, {173, 140, 115, 255}, {173, 148, 99, 255}, {173, 173, 173, 255}, + {181, 140, 74, 255}, {181, 148, 115, 255}, {181, 148, 123, 255}, {181, 156, 107, 255}, + {189, 148, 123, 255}, {189, 156, 82, 255}, {189, 156, 123, 255}, {189, 156, 132, 255}, + {189, 189, 189, 255}, {198, 156, 123, 255}, {198, 165, 132, 255}, {206, 165, 99, 255}, + {206, 165, 132, 255}, {206, 173, 140, 255}, {206, 206, 206, 255}, {214, 173, 115, 255}, + {214, 173, 140, 255}, {222, 181, 148, 255}, {222, 189, 132, 255}, {222, 189, 156, 255}, + {222, 222, 222, 255}, {231, 198, 165, 255}, {231, 231, 231, 255}, {239, 206, 173, 255} +}; + +Uint8 MooseFrames[MOOSEFRAMES_COUNT][MOOSEFRAME_SIZE]; + +SDL_Renderer *renderer; +int frame; +SDL_Texture *MooseTexture; +SDL_bool done = SDL_FALSE; + +void quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +void UpdateTexture(SDL_Texture *texture, int frame) +{ + SDL_Color *color; + Uint8 *src; + Uint32 *dst; + int row, col; + void *pixels; + int pitch; + + if (SDL_LockTexture(texture, NULL, &pixels, &pitch) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't lock texture: %s\n", SDL_GetError()); + quit(5); + } + src = MooseFrames[frame]; + for (row = 0; row < MOOSEPIC_H; ++row) { + dst = (Uint32*)((Uint8*)pixels + row * pitch); + for (col = 0; col < MOOSEPIC_W; ++col) { + color = &MooseColors[*src++]; + *dst++ = (0xFF000000|(color->r<<16)|(color->g<<8)|color->b); + } + } + SDL_UnlockTexture(texture); +} + +void +loop() +{ + SDL_Event event; + + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_KEYDOWN: + if (event.key.keysym.sym == SDLK_ESCAPE) { + done = SDL_TRUE; + } + break; + case SDL_QUIT: + done = SDL_TRUE; + break; + } + } + + frame = (frame + 1) % MOOSEFRAMES_COUNT; + UpdateTexture(MooseTexture, frame); + + SDL_RenderClear(renderer); + SDL_RenderCopy(renderer, MooseTexture, NULL, NULL); + SDL_RenderPresent(renderer); + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char **argv) +{ + SDL_Window *window; + SDL_RWops *handle; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_VIDEO) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + /* load the moose images */ + handle = SDL_RWFromFile("moose.dat", "rb"); + if (handle == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Can't find the file moose.dat !\n"); + quit(2); + } + SDL_RWread(handle, MooseFrames, MOOSEFRAME_SIZE, MOOSEFRAMES_COUNT); + SDL_RWclose(handle); + + + /* Create the window and renderer */ + window = SDL_CreateWindow("Happy Moose", + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + MOOSEPIC_W*4, MOOSEPIC_H*4, + SDL_WINDOW_RESIZABLE); + if (!window) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create window: %s\n", SDL_GetError()); + quit(3); + } + + renderer = SDL_CreateRenderer(window, -1, 0); + if (!renderer) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create renderer: %s\n", SDL_GetError()); + quit(4); + } + + MooseTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, MOOSEPIC_W, MOOSEPIC_H); + if (!MooseTexture) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set create texture: %s\n", SDL_GetError()); + quit(5); + } + + /* Loop, waiting for QUIT or the escape key */ + frame = 0; + +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + + SDL_DestroyRenderer(renderer); + + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testthread.c b/Engine/lib/sdl/test/testthread.c new file mode 100644 index 0000000000..90e2c60c58 --- /dev/null +++ b/Engine/lib/sdl/test/testthread.c @@ -0,0 +1,98 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL threading code */ + +#include +#include +#include + +#include "SDL.h" + +static SDL_TLSID tls; +static int alive = 0; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +int SDLCALL +ThreadFunc(void *data) +{ + SDL_TLSSet(tls, "baby thread", NULL); + SDL_Log("Started thread %s: My thread id is %lu, thread data = %s\n", + (char *) data, SDL_ThreadID(), (const char *)SDL_TLSGet(tls)); + while (alive) { + SDL_Log("Thread '%s' is alive!\n", (char *) data); + SDL_Delay(1 * 1000); + } + SDL_Log("Thread '%s' exiting!\n", (char *) data); + return (0); +} + +static void +killed(int sig) +{ + SDL_Log("Killed with SIGTERM, waiting 5 seconds to exit\n"); + SDL_Delay(5 * 1000); + alive = 0; + quit(0); +} + +int +main(int argc, char *argv[]) +{ + SDL_Thread *thread; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + tls = SDL_TLSCreate(); + SDL_assert(tls); + SDL_TLSSet(tls, "main thread", NULL); + SDL_Log("Main thread data initially: %s\n", (const char *)SDL_TLSGet(tls)); + + alive = 1; + thread = SDL_CreateThread(ThreadFunc, "One", "#1"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + SDL_Delay(5 * 1000); + SDL_Log("Waiting for thread #1\n"); + alive = 0; + SDL_WaitThread(thread, NULL); + + SDL_Log("Main thread data finally: %s\n", (const char *)SDL_TLSGet(tls)); + + alive = 1; + signal(SIGTERM, killed); + thread = SDL_CreateThread(ThreadFunc, "Two", "#2"); + if (thread == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + raise(SIGTERM); + + SDL_Quit(); /* Never reached */ + return (0); /* Never reached */ +} diff --git a/Engine/lib/sdl/test/testtimer.c b/Engine/lib/sdl/test/testtimer.c new file mode 100644 index 0000000000..32b7490982 --- /dev/null +++ b/Engine/lib/sdl/test/testtimer.c @@ -0,0 +1,122 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test program to check the resolution of the SDL timer on the current + platform +*/ + +#include +#include + +#include "SDL.h" + +#define DEFAULT_RESOLUTION 1 + +static int ticks = 0; + +static Uint32 SDLCALL +ticktock(Uint32 interval, void *param) +{ + ++ticks; + return (interval); +} + +static Uint32 SDLCALL +callback(Uint32 interval, void *param) +{ + SDL_Log("Timer %d : param = %d\n", interval, (int) (uintptr_t) param); + return interval; +} + +int +main(int argc, char *argv[]) +{ + int i, desired; + SDL_TimerID t1, t2, t3; + Uint32 start32, now32; + Uint64 start, now; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + if (SDL_Init(SDL_INIT_TIMER) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + /* Start the timer */ + desired = 0; + if (argv[1]) { + desired = atoi(argv[1]); + } + if (desired == 0) { + desired = DEFAULT_RESOLUTION; + } + t1 = SDL_AddTimer(desired, ticktock, NULL); + + /* Wait 10 seconds */ + SDL_Log("Waiting 10 seconds\n"); + SDL_Delay(10 * 1000); + + /* Stop the timer */ + SDL_RemoveTimer(t1); + + /* Print the results */ + if (ticks) { + SDL_Log("Timer resolution: desired = %d ms, actual = %f ms\n", + desired, (double) (10 * 1000) / ticks); + } + + /* Test multiple timers */ + SDL_Log("Testing multiple timers...\n"); + t1 = SDL_AddTimer(100, callback, (void *) 1); + if (!t1) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 1: %s\n", SDL_GetError()); + t2 = SDL_AddTimer(50, callback, (void *) 2); + if (!t2) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 2: %s\n", SDL_GetError()); + t3 = SDL_AddTimer(233, callback, (void *) 3); + if (!t3) + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,"Could not create timer 3: %s\n", SDL_GetError()); + + /* Wait 10 seconds */ + SDL_Log("Waiting 10 seconds\n"); + SDL_Delay(10 * 1000); + + SDL_Log("Removing timer 1 and waiting 5 more seconds\n"); + SDL_RemoveTimer(t1); + + SDL_Delay(5 * 1000); + + SDL_RemoveTimer(t2); + SDL_RemoveTimer(t3); + + start = SDL_GetPerformanceCounter(); + for (i = 0; i < 1000000; ++i) { + ticktock(0, NULL); + } + now = SDL_GetPerformanceCounter(); + SDL_Log("1 million iterations of ticktock took %f ms\n", (double)((now - start)*1000) / SDL_GetPerformanceFrequency()); + + SDL_Log("Performance counter frequency: %"SDL_PRIu64"\n", (unsigned long long) SDL_GetPerformanceFrequency()); + start32 = SDL_GetTicks(); + start = SDL_GetPerformanceCounter(); + SDL_Delay(1000); + now = SDL_GetPerformanceCounter(); + now32 = SDL_GetTicks(); + SDL_Log("Delay 1 second = %d ms in ticks, %f ms according to performance counter\n", (now32-start32), (double)((now - start)*1000) / SDL_GetPerformanceFrequency()); + + SDL_Quit(); + return (0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testver.c b/Engine/lib/sdl/test/testver.c new file mode 100644 index 0000000000..f0e3bcf3c2 --- /dev/null +++ b/Engine/lib/sdl/test/testver.c @@ -0,0 +1,47 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Test program to compare the compile-time version of SDL with the linked + version of SDL +*/ + +#include +#include + +#include "SDL.h" +#include "SDL_revision.h" + +int +main(int argc, char *argv[]) +{ + SDL_version compiled; + SDL_version linked; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + +#if SDL_VERSION_ATLEAST(2, 0, 0) + SDL_Log("Compiled with SDL 2.0 or newer\n"); +#else + SDL_Log("Compiled with SDL older than 2.0\n"); +#endif + SDL_VERSION(&compiled); + SDL_Log("Compiled version: %d.%d.%d.%d (%s)\n", + compiled.major, compiled.minor, compiled.patch, + SDL_REVISION_NUMBER, SDL_REVISION); + SDL_GetVersion(&linked); + SDL_Log("Linked version: %d.%d.%d.%d (%s)\n", + linked.major, linked.minor, linked.patch, + SDL_GetRevisionNumber(), SDL_GetRevision()); + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/testviewport.c b/Engine/lib/sdl/test/testviewport.c new file mode 100644 index 0000000000..7ed4e6ec35 --- /dev/null +++ b/Engine/lib/sdl/test/testviewport.c @@ -0,0 +1,217 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ +/* Simple program: Check viewports */ + +#include +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test.h" +#include "SDL_test_common.h" + + +static SDLTest_CommonState *state; + +SDL_Rect viewport; +int done, j; +SDL_bool use_target = SDL_FALSE; +#ifdef __EMSCRIPTEN__ +Uint32 wait_start; +#endif + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +void +DrawOnViewport(SDL_Renderer * renderer, SDL_Rect viewport) +{ + SDL_Rect rect; + + /* Set the viewport */ + SDL_RenderSetViewport(renderer, &viewport); + + /* Draw a gray background */ + SDL_SetRenderDrawColor(renderer, 0x80, 0x80, 0x80, 0xFF); + SDL_RenderClear(renderer); + + /* Test inside points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xF, 0xFF); + SDL_RenderDrawPoint(renderer, viewport.h/2 + 10, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 - 10, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 - 10); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 + 10); + + /* Test horizontal and vertical lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0xFF, 0x00, 0xFF); + SDL_RenderDrawLine(renderer, 1, 0, viewport.w-2, 0); + SDL_RenderDrawLine(renderer, 1, viewport.h-1, viewport.w-2, viewport.h-1); + SDL_RenderDrawLine(renderer, 0, 1, 0, viewport.h-2); + SDL_RenderDrawLine(renderer, viewport.w-1, 1, viewport.w-1, viewport.h-2); + + /* Test diagonal lines */ + SDL_SetRenderDrawColor(renderer, 0x00, 0x00, 0xFF, 0xFF); + SDL_RenderDrawLine(renderer, 0, 0, + viewport.w-1, viewport.h-1); + SDL_RenderDrawLine(renderer, viewport.w-1, 0, + 0, viewport.h-1); + + /* Test outside points */ + SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xF, 0xFF); + SDL_RenderDrawPoint(renderer, viewport.h/2 + viewport.h, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 - viewport.h, viewport.w/2); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 - viewport.w); + SDL_RenderDrawPoint(renderer, viewport.h/2 , viewport.w/2 + viewport.w); + + /* Add a box at the top */ + rect.w = 8; + rect.h = 8; + rect.x = (viewport.w - rect.w) / 2; + rect.y = 0; + SDL_RenderFillRect(renderer, &rect); +} + +void +loop() +{ +#ifdef __EMSCRIPTEN__ + /* Avoid using delays */ + if(SDL_GetTicks() - wait_start < 1000) + return; + wait_start = SDL_GetTicks(); +#endif + SDL_Event event; + int i; + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + } + + /* Move a viewport box in steps around the screen */ + viewport.x = j * 100; + viewport.y = viewport.x; + viewport.w = 100 + j * 50; + viewport.h = 100 + j * 50; + j = (j + 1) % 4; + SDL_Log("Current Viewport x=%i y=%i w=%i h=%i", viewport.x, viewport.y, viewport.w, viewport.h); + + for (i = 0; i < state->num_windows; ++i) { + if (state->windows[i] == NULL) + continue; + + /* Draw using viewport */ + DrawOnViewport(state->renderers[i], viewport); + + /* Update the screen! */ + if (use_target) { + SDL_SetRenderTarget(state->renderers[i], NULL); + SDL_RenderCopy(state->renderers[i], state->targets[i], NULL, NULL); + SDL_RenderPresent(state->renderers[i]); + SDL_SetRenderTarget(state->renderers[i], state->targets[i]); + } else { + SDL_RenderPresent(state->renderers[i]); + } + } + +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + Uint32 then, now, frames; + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_strcasecmp(argv[i], "--target") == 0) { + use_target = SDL_TRUE; + consumed = 1; + } + } + if (consumed < 0) { + SDL_Log("Usage: %s %s [--target]\n", + argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + if (use_target) { + int w, h; + + for (i = 0; i < state->num_windows; ++i) { + SDL_GetWindowSize(state->windows[i], &w, &h); + state->targets[i] = SDL_CreateTexture(state->renderers[i], SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, w, h); + SDL_SetRenderTarget(state->renderers[i], state->targets[i]); + } + } + + for (i = 0; i < state->num_windows; ++i) { + SDL_Renderer *renderer = state->renderers[i]; + SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); + SDL_RenderClear(renderer); + } + + /* Main render loop */ + frames = 0; + then = SDL_GetTicks(); + done = 0; + j = 0; + +#ifdef __EMSCRIPTEN__ + wait_start = SDL_GetTicks(); + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + ++frames; + loop(); + SDL_Delay(1000); + } +#endif + + /* Print out some timing information */ + now = SDL_GetTicks(); + if (now > then) { + double fps = ((double) frames * 1000) / (now - then); + SDL_Log("%2.2f frames per second\n", fps); + } + quit(0); + return 0; +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/testwm2.c b/Engine/lib/sdl/test/testwm2.c new file mode 100644 index 0000000000..94ba513bed --- /dev/null +++ b/Engine/lib/sdl/test/testwm2.c @@ -0,0 +1,159 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +#include +#include + +#ifdef __EMSCRIPTEN__ +#include +#endif + +#include "SDL_test_common.h" + +static SDLTest_CommonState *state; +int done; + +static const char *cursorNames[] = { + "arrow", + "ibeam", + "wait", + "crosshair", + "waitarrow", + "sizeNWSE", + "sizeNESW", + "sizeWE", + "sizeNS", + "sizeALL", + "NO", + "hand", +}; +int system_cursor = -1; +SDL_Cursor *cursor = NULL; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDLTest_CommonQuit(state); + exit(rc); +} + +void +loop() +{ + SDL_Event event; + /* Check for events */ + while (SDL_PollEvent(&event)) { + SDLTest_CommonEvent(state, &event, &done); + + if (event.type == SDL_WINDOWEVENT) { + if (event.window.event == SDL_WINDOWEVENT_RESIZED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %d resized to %dx%d\n", + event.window.windowID, + event.window.data1, + event.window.data2); + } + } + if (event.window.event == SDL_WINDOWEVENT_MOVED) { + SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); + if (window) { + SDL_Log("Window %d moved to %d,%d (display %s)\n", + event.window.windowID, + event.window.data1, + event.window.data2, + SDL_GetDisplayName(SDL_GetWindowDisplayIndex(window))); + } + } + } + if (event.type == SDL_KEYUP) { + SDL_bool updateCursor = SDL_FALSE; + + if (event.key.keysym.sym == SDLK_LEFT) { + --system_cursor; + if (system_cursor < 0) { + system_cursor = SDL_NUM_SYSTEM_CURSORS - 1; + } + updateCursor = SDL_TRUE; + } else if (event.key.keysym.sym == SDLK_RIGHT) { + ++system_cursor; + if (system_cursor >= SDL_NUM_SYSTEM_CURSORS) { + system_cursor = 0; + } + updateCursor = SDL_TRUE; + } + if (updateCursor) { + SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]); + SDL_FreeCursor(cursor); + cursor = SDL_CreateSystemCursor((SDL_SystemCursor)system_cursor); + SDL_SetCursor(cursor); + } + } + } +#ifdef __EMSCRIPTEN__ + if (done) { + emscripten_cancel_main_loop(); + } +#endif +} + +int +main(int argc, char *argv[]) +{ + int i; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + SDL_assert(SDL_arraysize(cursorNames) == SDL_NUM_SYSTEM_CURSORS); + + /* Initialize test framework */ + state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); + if (!state) { + return 1; + } + state->skip_renderer = SDL_TRUE; + for (i = 1; i < argc;) { + int consumed; + + consumed = SDLTest_CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + } + if (consumed < 0) { + SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state)); + quit(1); + } + i += consumed; + } + if (!SDLTest_CommonInit(state)) { + quit(2); + } + + /* Main render loop */ + done = 0; +#ifdef __EMSCRIPTEN__ + emscripten_set_main_loop(loop, 0, 1); +#else + while (!done) { + loop(); + } +#endif + SDL_FreeCursor(cursor); + + quit(0); + /* keep the compiler happy ... */ + return(0); +} + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/Engine/lib/sdl/test/torturethread.c b/Engine/lib/sdl/test/torturethread.c new file mode 100644 index 0000000000..5719a71950 --- /dev/null +++ b/Engine/lib/sdl/test/torturethread.c @@ -0,0 +1,113 @@ +/* + Copyright (C) 1997-2016 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely. +*/ + +/* Simple test of the SDL threading code */ + +#include +#include +#include +#include + +#include "SDL.h" + +#define NUMTHREADS 10 + +static char volatile time_for_threads_to_die[NUMTHREADS]; + +/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ +static void +quit(int rc) +{ + SDL_Quit(); + exit(rc); +} + +int SDLCALL +SubThreadFunc(void *data) +{ + while (!*(int volatile *) data) { + ; /* SDL_Delay(10); *//* do nothing */ + } + return 0; +} + +int SDLCALL +ThreadFunc(void *data) +{ + SDL_Thread *sub_threads[NUMTHREADS]; + int flags[NUMTHREADS]; + int i; + int tid = (int) (uintptr_t) data; + + SDL_Log("Creating Thread %d\n", tid); + + for (i = 0; i < NUMTHREADS; i++) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Child%d_%d", tid, i); + flags[i] = 0; + sub_threads[i] = SDL_CreateThread(SubThreadFunc, name, &flags[i]); + } + + SDL_Log("Thread '%d' waiting for signal\n", tid); + while (time_for_threads_to_die[tid] != 1) { + ; /* do nothing */ + } + + SDL_Log("Thread '%d' sending signals to subthreads\n", tid); + for (i = 0; i < NUMTHREADS; i++) { + flags[i] = 1; + SDL_WaitThread(sub_threads[i], NULL); + } + + SDL_Log("Thread '%d' exiting!\n", tid); + + return 0; +} + +int +main(int argc, char *argv[]) +{ + SDL_Thread *threads[NUMTHREADS]; + int i; + + /* Enable standard application logging */ + SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); + + /* Load the SDL library */ + if (SDL_Init(0) < 0) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return (1); + } + + signal(SIGSEGV, SIG_DFL); + for (i = 0; i < NUMTHREADS; i++) { + char name[64]; + SDL_snprintf(name, sizeof (name), "Parent%d", i); + time_for_threads_to_die[i] = 0; + threads[i] = SDL_CreateThread(ThreadFunc, name, (void*) (uintptr_t) i); + + if (threads[i] == NULL) { + SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create thread: %s\n", SDL_GetError()); + quit(1); + } + } + + for (i = 0; i < NUMTHREADS; i++) { + time_for_threads_to_die[i] = 1; + } + + for (i = 0; i < NUMTHREADS; i++) { + SDL_WaitThread(threads[i], NULL); + } + SDL_Quit(); + return (0); +} diff --git a/Engine/lib/sdl/test/utf8.txt b/Engine/lib/sdl/test/utf8.txt new file mode 100644 index 0000000000..aab22f1d02 --- /dev/null +++ b/Engine/lib/sdl/test/utf8.txt @@ -0,0 +1,287 @@ +UTF-8 decoder capability and stress test +---------------------------------------- + +Markus Kuhn - 2003-02-19 + +This test file can help you examine, how your UTF-8 decoder handles +various types of correct, malformed, or otherwise interesting UTF-8 +sequences. This file is not meant to be a conformance test. It does +not prescribes any particular outcome and therefore there is no way to +"pass" or "fail" this test file, even though the texts suggests a +preferable decoder behaviour at some places. The aim is instead to +help you think about and test the behaviour of your UTF-8 on a +systematic collection of unusual inputs. Experience so far suggests +that most first-time authors of UTF-8 decoders find at least one +serious problem in their decoder by using this file. + +The test lines below cover boundary conditions, malformed UTF-8 +sequences as well as correctly encoded UTF-8 sequences of Unicode code +points that should never occur in a correct UTF-8 file. + +According to ISO 10646-1:2000, sections D.7 and 2.3c, a device +receiving UTF-8 shall interpret a "malformed sequence in the same way +that it interprets a character that is outside the adopted subset" and +"characters that are not within the adopted subset shall be indicated +to the user" by a receiving device. A quite commonly used approach in +UTF-8 decoders is to replace any malformed UTF-8 sequence by a +replacement character (U+FFFD), which looks a bit like an inverted +question mark, or a similar symbol. It might be a good idea to +visually distinguish a malformed UTF-8 sequence from a correctly +encoded Unicode character that is just not available in the current +font but otherwise fully legal, even though ISO 10646-1 doesn't +mandate this. In any case, just ignoring malformed sequences or +unavailable characters does not conform to ISO 10646, will make +debugging more difficult, and can lead to user confusion. + +Please check, whether a malformed UTF-8 sequence is (1) represented at +all, (2) represented by exactly one single replacement character (or +equivalent signal), and (3) the following quotation mark after an +illegal UTF-8 sequence is correctly displayed, i.e. proper +resynchronization takes place immageately after any malformed +sequence. This file says "THE END" in the last line, so if you don't +see that, your decoder crashed somehow before, which should always be +cause for concern. + +All lines in this file are exactly 79 characters long (plus the line +feed). In addition, all lines end with "|", except for the two test +lines 2.1.1 and 2.2.1, which contain non-printable ASCII controls +U+0000 and U+007F. If you display this file with a fixed-width font, +these "|" characters should all line up in column 79 (right margin). +This allows you to test quickly, whether your UTF-8 decoder finds the +correct number of characters in every line, that is whether each +malformed sequences is replaced by a single replacement character. + +Note that as an alternative to the notion of malformed sequence used +here, it is also a perfectly acceptable (and in some situations even +preferable) solution to represent each individual byte of a malformed +sequence by a replacement character. If you follow this strategy in +your decoder, then please ignore the "|" column. + + +Here come the tests: | + | +1 Some correct UTF-8 text | + | +(The codepoints for this test are: | + U+03BA U+1F79 U+03C3 U+03BC U+03B5 --ryan.) | + | +You should see the Greek word 'kosme': "κόσμε" | + | + | +2 Boundary condition test cases | + | +2.1 First possible sequence of a certain length | + | +(byte zero skipped...there's a null added at the end of the test. --ryan.) | + | +2.1.2 2 bytes (U-00000080): "€" | +2.1.3 3 bytes (U-00000800): "à €" | +2.1.4 4 bytes (U-00010000): "ð€€" | + | +(5 and 6 byte sequences were made illegal in rfc3629. --ryan.) | +2.1.5 5 bytes (U-00200000): "øˆ€€€" | +2.1.6 6 bytes (U-04000000): "ü„€€€€" | + | +2.2 Last possible sequence of a certain length | + | +2.2.1 1 byte (U-0000007F): "" | +2.2.2 2 bytes (U-000007FF): "ß¿" | + | +(Section 5.3.2 below calls this illegal. --ryan.) | +2.2.3 3 bytes (U-0000FFFF): "ï¿¿" | + | +(5 and 6 bytes sequences, and 4 bytes sequences > 0x10FFFF were made illegal | + in rfc3629, so these next three should be replaced with a invalid | + character codepoint. --ryan.) | +2.2.4 4 bytes (U-001FFFFF): "÷¿¿¿" | +2.2.5 5 bytes (U-03FFFFFF): "û¿¿¿¿" | +2.2.6 6 bytes (U-7FFFFFFF): "ý¿¿¿¿¿" | + | +2.3 Other boundary conditions | + | +2.3.1 U-0000D7FF = ed 9f bf = "퟿" | +2.3.2 U-0000E000 = ee 80 80 = "" | +2.3.3 U-0000FFFD = ef bf bd = "�" | +2.3.4 U-0010FFFF = f4 8f bf bf = "ô¿¿" | + | +(This one is bogus in rfc3629. --ryan.) | +2.3.5 U-00110000 = f4 90 80 80 = "ô€€" | + | +3 Malformed sequences | + | +3.1 Unexpected continuation bytes | + | +Each unexpected continuation byte should be separately signalled as a | +malformed sequence of its own. | + | +3.1.1 First continuation byte 0x80: "€" | +3.1.2 Last continuation byte 0xbf: "¿" | + | +3.1.3 2 continuation bytes: "€¿" | +3.1.4 3 continuation bytes: "€¿€" | +3.1.5 4 continuation bytes: "€¿€¿" | +3.1.6 5 continuation bytes: "€¿€¿€" | +3.1.7 6 continuation bytes: "€¿€¿€¿" | +3.1.8 7 continuation bytes: "€¿€¿€¿€" | + | +3.1.9 Sequence of all 64 possible continuation bytes (0x80-0xbf): | + | + "€‚ƒ„…†‡ˆ‰Š‹ŒŽ | + ‘’“”•–—˜™š›œžŸ | +  ¡¢£¤¥¦§¨©ª«¬­®¯ | + °±²³´µ¶·¸¹º»¼½¾¿" | + | +3.2 Lonely start characters | + | +3.2.1 All 32 first bytes of 2-byte sequences (0xc0-0xdf), | + each followed by a space character: | + | + "À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï | + Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß " | + | +3.2.2 All 16 first bytes of 3-byte sequences (0xe0-0xef), | + each followed by a space character: | + | + "à á â ã ä å æ ç è é ê ë ì í î ï " | + | +3.2.3 All 8 first bytes of 4-byte sequences (0xf0-0xf7), | + each followed by a space character: | + | + "ð ñ ò ó ô õ ö ÷ " | + | +3.2.4 All 4 first bytes of 5-byte sequences (0xf8-0xfb), | + each followed by a space character: | + | + "ø ù ú û " | + | +3.2.5 All 2 first bytes of 6-byte sequences (0xfc-0xfd), | + each followed by a space character: | + | + "ü ý " | + | +3.3 Sequences with last continuation byte missing | + | +All bytes of an incomplete sequence should be signalled as a single | +malformed sequence, i.e., you should see only a single replacement | +character in each of the next 10 tests. (Characters as in section 2) | + | +3.3.1 2-byte sequence with last byte missing (U+0000): "À" | +3.3.2 3-byte sequence with last byte missing (U+0000): "à€" | +3.3.3 4-byte sequence with last byte missing (U+0000): "ð€€" | +3.3.4 5-byte sequence with last byte missing (U+0000): "ø€€€" | +3.3.5 6-byte sequence with last byte missing (U+0000): "ü€€€€" | +3.3.6 2-byte sequence with last byte missing (U-000007FF): "ß" | +3.3.7 3-byte sequence with last byte missing (U-0000FFFF): "ï¿" | +3.3.8 4-byte sequence with last byte missing (U-001FFFFF): "÷¿¿" | +3.3.9 5-byte sequence with last byte missing (U-03FFFFFF): "û¿¿¿" | +3.3.10 6-byte sequence with last byte missing (U-7FFFFFFF): "ý¿¿¿¿" | + | +3.4 Concatenation of incomplete sequences | + | +All the 10 sequences of 3.3 concatenated, you should see 10 malformed | +sequences being signalled: | + | + "Àà€ð€€ø€€€ü€€€€ßï¿÷¿¿û¿¿¿ý¿¿¿¿" | + | +3.5 Impossible bytes | + | +The following two bytes cannot appear in a correct UTF-8 string | + | +3.5.1 fe = "þ" | +3.5.2 ff = "ÿ" | +3.5.3 fe fe ff ff = "þþÿÿ" | + | +4 Overlong sequences | + | +The following sequences are not malformed according to the letter of | +the Unicode 2.0 standard. However, they are longer then necessary and | +a correct UTF-8 encoder is not allowed to produce them. A "safe UTF-8 | +decoder" should reject them just like malformed sequences for two | +reasons: (1) It helps to debug applications if overlong sequences are | +not treated as valid representations of characters, because this helps | +to spot problems more quickly. (2) Overlong sequences provide | +alternative representations of characters, that could maliciously be | +used to bypass filters that check only for ASCII characters. For | +instance, a 2-byte encoded line feed (LF) would not be caught by a | +line counter that counts only 0x0a bytes, but it would still be | +processed as a line feed by an unsafe UTF-8 decoder later in the | +pipeline. From a security point of view, ASCII compatibility of UTF-8 | +sequences means also, that ASCII characters are *only* allowed to be | +represented by ASCII bytes in the range 0x00-0x7f. To ensure this | +aspect of ASCII compatibility, use only "safe UTF-8 decoders" that | +reject overlong UTF-8 sequences for which a shorter encoding exists. | + | +4.1 Examples of an overlong ASCII character | + | +With a safe UTF-8 decoder, all of the following five overlong | +representations of the ASCII character slash ("/") should be rejected | +like a malformed UTF-8 sequence, for instance by substituting it with | +a replacement character. If you see a slash below, you do not have a | +safe UTF-8 decoder! | + | +4.1.1 U+002F = c0 af = "À¯" | +4.1.2 U+002F = e0 80 af = "à€¯" | +4.1.3 U+002F = f0 80 80 af = "ð€€¯" | +4.1.4 U+002F = f8 80 80 80 af = "ø€€€¯" | +4.1.5 U+002F = fc 80 80 80 80 af = "ü€€€€¯" | + | +4.2 Maximum overlong sequences | + | +Below you see the highest Unicode value that is still resulting in an | +overlong sequence if represented with the given number of bytes. This | +is a boundary test for safe UTF-8 decoders. All five characters should | +be rejected like malformed UTF-8 sequences. | + | +4.2.1 U-0000007F = c1 bf = "Á¿" | +4.2.2 U-000007FF = e0 9f bf = "àŸ¿" | +4.2.3 U-0000FFFF = f0 8f bf bf = "ð¿¿" | +4.2.4 U-001FFFFF = f8 87 bf bf bf = "ø‡¿¿¿" | +4.2.5 U-03FFFFFF = fc 83 bf bf bf bf = "üƒ¿¿¿¿" | + | +4.3 Overlong representation of the NUL character | + | +The following five sequences should also be rejected like malformed | +UTF-8 sequences and should not be treated like the ASCII NUL | +character. | + | +4.3.1 U+0000 = c0 80 = "À€" | +4.3.2 U+0000 = e0 80 80 = "à€€" | +4.3.3 U+0000 = f0 80 80 80 = "ð€€€" | +4.3.4 U+0000 = f8 80 80 80 80 = "ø€€€€" | +4.3.5 U+0000 = fc 80 80 80 80 80 = "ü€€€€€" | + | +5 Illegal code positions | + | +The following UTF-8 sequences should be rejected like malformed | +sequences, because they never represent valid ISO 10646 characters and | +a UTF-8 decoder that accepts them might introduce security problems | +comparable to overlong UTF-8 sequences. | + | +5.1 Single UTF-16 surrogates | + | +5.1.1 U+D800 = ed a0 80 = "í €" | +5.1.2 U+DB7F = ed ad bf = "í­¿" | +5.1.3 U+DB80 = ed ae 80 = "í®€" | +5.1.4 U+DBFF = ed af bf = "í¯¿" | +5.1.5 U+DC00 = ed b0 80 = "í°€" | +5.1.6 U+DF80 = ed be 80 = "í¾€" | +5.1.7 U+DFFF = ed bf bf = "í¿¿" | + | +5.2 Paired UTF-16 surrogates | + | +5.2.1 U+D800 U+DC00 = ed a0 80 ed b0 80 = "𐀀" | +5.2.2 U+D800 U+DFFF = ed a0 80 ed bf bf = "𐏿" | +5.2.3 U+DB7F U+DC00 = ed ad bf ed b0 80 = "í­¿í°€" | +5.2.4 U+DB7F U+DFFF = ed ad bf ed bf bf = "í­¿í¿¿" | +5.2.5 U+DB80 U+DC00 = ed ae 80 ed b0 80 = "󰀀" | +5.2.6 U+DB80 U+DFFF = ed ae 80 ed bf bf = "󰏿" | +5.2.7 U+DBFF U+DC00 = ed af bf ed b0 80 = "􏰀" | +5.2.8 U+DBFF U+DFFF = ed af bf ed bf bf = "􏿿" | + | +5.3 Other illegal code positions | + | +5.3.1 U+FFFE = ef bf be = "￾" | +5.3.2 U+FFFF = ef bf bf = "ï¿¿" | + | +THE END | + From 5a4bb6b36d4a93f497fdae0b66187bd72ab4d0fb Mon Sep 17 00:00:00 2001 From: rextimmy Date: Fri, 8 Apr 2016 18:58:53 +1000 Subject: [PATCH 182/324] DX11/GL border offset fix for GFXDrawUtil::drawRect --- Engine/source/gfx/gfxDrawUtil.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Engine/source/gfx/gfxDrawUtil.cpp b/Engine/source/gfx/gfxDrawUtil.cpp index 3adbfb7b7b..9598220001 100644 --- a/Engine/source/gfx/gfxDrawUtil.cpp +++ b/Engine/source/gfx/gfxDrawUtil.cpp @@ -465,12 +465,12 @@ void GFXDrawUtil::drawRect( const Point2F &upperLeft, const Point2F &lowerRight, verts[0].point.set( upperLeft.x + ulOffset + nw.x, upperLeft.y + ulOffset + nw.y, 0.0f ); verts[1].point.set( upperLeft.x + ulOffset - nw.x, upperLeft.y + ulOffset - nw.y, 0.0f ); - verts[2].point.set( lowerRight.x + ne.x, upperLeft.y + ulOffset + ne.y, 0.0f ); - verts[3].point.set( lowerRight.x - ne.x, upperLeft.y + ulOffset - ne.y, 0.0f ); - verts[4].point.set( lowerRight.x - nw.x, lowerRight.y - nw.y, 0.0f ); - verts[5].point.set( lowerRight.x + nw.x, lowerRight.y + nw.y, 0.0f ); - verts[6].point.set( upperLeft.x + ulOffset - ne.x, lowerRight.y - ne.y, 0.0f ); - verts[7].point.set( upperLeft.x + ulOffset + ne.x, lowerRight.y + ne.y, 0.0f ); + verts[2].point.set( lowerRight.x + ulOffset + ne.x, upperLeft.y + ulOffset + ne.y, 0.0f); + verts[3].point.set( lowerRight.x + ulOffset - ne.x, upperLeft.y + ulOffset - ne.y, 0.0f); + verts[4].point.set( lowerRight.x + ulOffset - nw.x, lowerRight.y + ulOffset - nw.y, 0.0f); + verts[5].point.set( lowerRight.x + ulOffset + nw.x, lowerRight.y + ulOffset + nw.y, 0.0f); + verts[6].point.set( upperLeft.x + ulOffset - ne.x, lowerRight.y + ulOffset - ne.y, 0.0f); + verts[7].point.set( upperLeft.x + ulOffset + ne.x, lowerRight.y + ulOffset + ne.y, 0.0f); verts[8].point.set( upperLeft.x + ulOffset + nw.x, upperLeft.y + ulOffset + nw.y, 0.0f ); // same as 0 verts[9].point.set( upperLeft.x + ulOffset - nw.x, upperLeft.y + ulOffset - nw.y, 0.0f ); // same as 1 From b23ac9fb6a25efb17456c524b794b95afb8189af Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 8 Apr 2016 15:34:02 -0500 Subject: [PATCH 183/324] Removes some unnecessary extension checks for GL, as those formats are part of 3.2 core. SDL is having some conflicts with extension detection with GL. --- Engine/source/gfx/gl/gfxGLEnumTranslate.cpp | 50 +++++++-------------- 1 file changed, 15 insertions(+), 35 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp index c5af360bd6..3a00a639fe 100644 --- a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp +++ b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp @@ -198,45 +198,25 @@ void GFXGLEnumTranslate::init() GFXGLTextureSwizzle[GFXFormatL8] = Swizzle_GFXFormatL; // old GL_LUMINANCE8 GFXGLTextureSwizzle[GFXFormatL16] = Swizzle_GFXFormatL; // old GL_LUMINANCE16 - if( gglHasExtension(ARB_texture_float) ) - { - GFXGLTextureInternalFormat[GFXFormatR32F] = GL_R32F; - GFXGLTextureFormat[GFXFormatR32F] = GL_RED; - GFXGLTextureType[GFXFormatR32F] = GL_FLOAT; + GFXGLTextureInternalFormat[GFXFormatR32F] = GL_R32F; + GFXGLTextureFormat[GFXFormatR32F] = GL_RED; + GFXGLTextureType[GFXFormatR32F] = GL_FLOAT; - GFXGLTextureInternalFormat[GFXFormatR32G32B32A32F] = GL_RGBA32F_ARB; - GFXGLTextureFormat[GFXFormatR32G32B32A32F] = GL_RGBA; - GFXGLTextureType[GFXFormatR32G32B32A32F] = GL_FLOAT; + GFXGLTextureInternalFormat[GFXFormatR32G32B32A32F] = GL_RGBA32F_ARB; + GFXGLTextureFormat[GFXFormatR32G32B32A32F] = GL_RGBA; + GFXGLTextureType[GFXFormatR32G32B32A32F] = GL_FLOAT; - if( gglHasExtension(ARB_half_float_pixel) ) - { - GFXGLTextureInternalFormat[GFXFormatR16F] = GL_R16F; - GFXGLTextureFormat[GFXFormatR16F] = GL_RED; - GFXGLTextureType[GFXFormatR16F] = GL_HALF_FLOAT_ARB; + GFXGLTextureInternalFormat[GFXFormatR16F] = GL_R16F; + GFXGLTextureFormat[GFXFormatR16F] = GL_RED; + GFXGLTextureType[GFXFormatR16F] = GL_HALF_FLOAT_ARB; - GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RG16F; - GFXGLTextureFormat[GFXFormatR16G16F] = GL_RG; - GFXGLTextureType[GFXFormatR16G16F] = GL_HALF_FLOAT_ARB; + GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RG16F; + GFXGLTextureFormat[GFXFormatR16G16F] = GL_RG; + GFXGLTextureType[GFXFormatR16G16F] = GL_HALF_FLOAT_ARB; - GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA16F_ARB; - GFXGLTextureFormat[GFXFormatR16G16B16A16F] = GL_RGBA; - GFXGLTextureType[GFXFormatR16G16B16A16F] = GL_HALF_FLOAT_ARB; - } - else - { - GFXGLTextureInternalFormat[GFXFormatR16F] = GL_R32F; - GFXGLTextureFormat[GFXFormatR16F] = GL_RED; - GFXGLTextureType[GFXFormatR16F] = GL_FLOAT; - - GFXGLTextureInternalFormat[GFXFormatR16G16F] = GL_RG32F; - GFXGLTextureFormat[GFXFormatR16G16F] = GL_RG; - GFXGLTextureType[GFXFormatR16G16F] = GL_FLOAT; - - GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA32F_ARB; - GFXGLTextureFormat[GFXFormatR16G16B16A16F] = GL_RGBA; - GFXGLTextureType[GFXFormatR16G16B16A16F] = GL_FLOAT; - } - } + GFXGLTextureInternalFormat[GFXFormatR16G16B16A16F] = GL_RGBA16F_ARB; + GFXGLTextureFormat[GFXFormatR16G16B16A16F] = GL_RGBA; + GFXGLTextureType[GFXFormatR16G16B16A16F] = GL_HALF_FLOAT_ARB; if( gglHasExtension(ARB_ES2_compatibility) ) { From 00cc94901179d8405179b45dc559692219401a5e Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 15 Apr 2016 00:20:55 -0500 Subject: [PATCH 184/324] reimplements a form of subsurface scattering --- .../materials/processedShaderMaterial.cpp | 3 ++- .../lighting/advanced/vectorLightP.hlsl | 13 +++++++++-- .../gui/guiMaterialPropertiesWindow.ed.gui | 23 +++++++++++++++++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/Engine/source/materials/processedShaderMaterial.cpp b/Engine/source/materials/processedShaderMaterial.cpp index 6ff609ebeb..cd230ef534 100644 --- a/Engine/source/materials/processedShaderMaterial.cpp +++ b/Engine/source/materials/processedShaderMaterial.cpp @@ -1153,7 +1153,8 @@ void ProcessedShaderMaterial::_setShaderConstants(SceneRenderState * state, cons // Deferred Shading: Determine Material Info Flags S32 matInfoFlags = - (mMaterial->mEmissive[stageNum] ? 1 : 0); + (mMaterial->mEmissive[stageNum] ? 1 : 0) | //emissive + (mMaterial->mSubSurface[stageNum] ? 2 : 0); //subsurface mMaterial->mMatInfoFlags[stageNum] = matInfoFlags / 255.0f; shaderConsts->setSafe(handles->mMatInfoFlagsSC, mMaterial->mMatInfoFlags[stageNum]); if( handles->mAccuScaleSC->isValid() ) diff --git a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl index 1a97261718..e6ec5afb9a 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -202,6 +202,16 @@ float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 return float4(1.0, 1.0, 1.0, 0.0); } + float4 colorSample = TORQUE_TEX2D( colorBuffer, IN.uv0 ); + float3 subsurface = float3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface =colorSample; + if (colorSample.r>colorSample.g) + subsurface.r*=2; + else + subsurface.g*=2; + } // Sample/unpack the normal/z data float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, IN.uv0 ); float3 normal = prepassSample.rgb; @@ -314,6 +324,5 @@ float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 lightColorOut = debugColor; #endif - float4 colorSample = TORQUE_TEX2D( colorBuffer, IN.uv0 ); - return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); + return AL_DeferredOutput(lightColorOut+subsurface*(2.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index 63ce28e2a8..1e3b98189b 100644 --- a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -2240,6 +2240,29 @@ useMouseEvents = "0"; useInactiveState = "0"; }; + new GuiCheckBoxCtrl() { + canSaveDynamicFields = "0"; + internalName = "subSurfaceCheckbox"; + Enabled = "1"; + isContainer = "0"; + Profile = "ToolsGuiCheckBoxProfile"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "8 46"; + Extent = "79 16"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + Command = "MaterialEditorGui.updateActiveMaterial(\"subSurface[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getValue());"; + tooltipprofile = "ToolsGuiDefaultProfile"; + ToolTip = "Enables the use of subsurface scattering for this layer."; + hovertime = "1000"; + text = "Sub Surface"; + groupNum = "-1"; + buttonType = "ToggleButton"; + useMouseEvents = "0"; + useInactiveState = "0"; + }; }; }; }; From 88356ae37f23ef97ac46607a85a7a42873d4cbec Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 15 Apr 2016 16:06:10 -0500 Subject: [PATCH 185/324] subsurface followup: cleanups and corrections for vectorlightP, fillins for spot, point, and opengl equivalents --- .../common/lighting/advanced/gl/pointLightP.glsl | 14 ++++++++++++-- .../common/lighting/advanced/gl/spotLightP.glsl | 14 ++++++++++++-- .../common/lighting/advanced/gl/vectorLightP.glsl | 14 ++++++++++++-- .../common/lighting/advanced/pointLightP.hlsl | 13 +++++++++++-- .../common/lighting/advanced/spotLightP.hlsl | 14 ++++++++++++-- .../common/lighting/advanced/vectorLightP.hlsl | 8 ++++---- 6 files changed, 63 insertions(+), 14 deletions(-) diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl index 8a1aae3ca5..8fe127e041 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/pointLightP.glsl @@ -147,6 +147,17 @@ void main() return; } + vec4 colorSample = texture( colorBuffer, uvScene ); + vec3 subsurface = vec3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = vec3(0.772549, 0.337255, 0.262745); + else + subsurface = vec3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -258,6 +269,5 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - vec4 colorSample = texture( colorBuffer, uvScene ); - OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); + OUT_col = AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl index e7f3e88a72..c6ffa02a0e 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/spotLightP.glsl @@ -89,6 +89,17 @@ void main() return; } + vec4 colorSample = texture( colorBuffer, uvScene ); + vec3 subsurface = vec3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = vec3(0.772549, 0.337255, 0.262745); + else + subsurface = vec3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uvScene ); vec3 normal = prepassSample.rgb; @@ -195,6 +206,5 @@ void main() addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - vec4 colorSample = texture( colorBuffer, uvScene ); - OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); + OUT_col = AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl index 608524a5a6..15e0bf4771 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/vectorLightP.glsl @@ -202,6 +202,17 @@ void main() return; } + vec4 colorSample = texture( colorBuffer, uv0 ); + vec3 subsurface = vec3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = vec3(0.772549, 0.337255, 0.262745); + else + subsurface = vec3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data vec4 prepassSample = prepassUncondition( prePassBuffer, uv0 ); vec3 normal = prepassSample.rgb; @@ -312,6 +323,5 @@ void main() lightColorOut = debugColor; #endif - vec4 colorSample = texture( colorBuffer, uv0 ); - OUT_col = AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); + OUT_col = AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl index 540fd65c71..a8c0ea1059 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/pointLightP.hlsl @@ -149,6 +149,16 @@ float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 { return float4(0.0, 0.0, 0.0, 0.0); } + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + float3 subsurface = float3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = float3(0.772549, 0.337255, 0.262745); + else + subsurface = float3(0.337255, 0.772549, 0.262745); + } // Sample/unpack the normal/z data float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); @@ -263,6 +273,5 @@ float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); - return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); + return AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl index e1f3baf931..5040b15e21 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/spotLightP.hlsl @@ -87,6 +87,17 @@ float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 return float4(0.0, 0.0, 0.0, 0.0); } + float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); + float3 subsurface = float3(0.0,0.0,0.0); + if (getFlag( matInfo.r, 1 )) + { + subsurface = colorSample.rgb; + if (colorSample.r>colorSample.g) + subsurface = float3(0.772549, 0.337255, 0.262745); + else + subsurface = float3(0.337255, 0.772549, 0.262745); + } + // Sample/unpack the normal/z data float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, uvScene ); float3 normal = prepassSample.rgb; @@ -194,6 +205,5 @@ float4 main( ConvexConnectP IN ) : TORQUE_TARGET0 addToResult = ( 1.0 - shadowed ) * abs(lightMapParams); } - float4 colorSample = TORQUE_TEX2D( colorBuffer, uvScene ); - return AL_DeferredOutput(lightColorOut, colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); + return AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } diff --git a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl index e6ec5afb9a..9562279096 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/vectorLightP.hlsl @@ -206,11 +206,11 @@ float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 float3 subsurface = float3(0.0,0.0,0.0); if (getFlag( matInfo.r, 1 )) { - subsurface =colorSample; + subsurface = colorSample.rgb; if (colorSample.r>colorSample.g) - subsurface.r*=2; + subsurface = float3(0.772549, 0.337255, 0.262745); else - subsurface.g*=2; + subsurface = float3(0.337255, 0.772549, 0.262745); } // Sample/unpack the normal/z data float4 prepassSample = TORQUE_PREPASS_UNCONDITION( prePassBuffer, IN.uv0 ); @@ -324,5 +324,5 @@ float4 main( FarFrustumQuadConnectP IN ) : TORQUE_TARGET0 lightColorOut = debugColor; #endif - return AL_DeferredOutput(lightColorOut+subsurface*(2.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); + return AL_DeferredOutput(lightColorOut+subsurface*(1.0-Sat_NL_Att), colorSample.rgb, matInfo, addToResult, specular, Sat_NL_Att); } From 587ab6a39eed09709a01aefd4ae1fbd40a083151 Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 20 Apr 2016 00:46:41 -0500 Subject: [PATCH 186/324] Adds 2 fields to expose the net simulation functionality more readily to the NetGraph GUI. Also added a Tools option to the World Editor menubar, with the NetGraph as the first option to make it easier to activate the NetGraph in the editor. --- .../Full/game/core/art/gui/netGraphGui.gui | 409 ++++++++++++++++-- .../worldEditor/scripts/menuHandlers.ed.cs | 9 + .../tools/worldEditor/scripts/menus.ed.cs | 12 + 3 files changed, 385 insertions(+), 45 deletions(-) diff --git a/Templates/Full/game/core/art/gui/netGraphGui.gui b/Templates/Full/game/core/art/gui/netGraphGui.gui index b62e8ea23b..b034a447ee 100644 --- a/Templates/Full/game/core/art/gui/netGraphGui.gui +++ b/Templates/Full/game/core/art/gui/netGraphGui.gui @@ -73,100 +73,380 @@ new GuiControlProfile (NetGraphPacketLossProfile) }; //--- OBJECT WRITE BEGIN --- -new GuiControl(NetGraphGui) { - profile = "NetGraphProfile"; - horizSizing = "left"; - vertSizing = "bottom"; +%guiContent = new GuiControl(NetGraphGui) { position = "0 0"; - extent = "640 480"; + extent = "1024 768"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphProfile"; visible = "1"; - noCursor = "1"; - + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "1"; + noCursor = "1"; + new GuiGraphCtrl(NetGraph) { - profile = "NetGraphKeyContainerProfile"; - horizSizing = "left"; - vertSizing = "bottom"; - position = "432 5"; + centerY = "1"; + plotColor[0] = "1 1 1 1"; + plotColor[1] = "1 0 0 1"; + plotColor[2] = "0 1 0 1"; + plotColor[3] = "0 0 1 1"; + plotColor[4] = "0 1 1 1"; + plotColor[5] = "0 0 0 1"; + plotType[0] = "PolyLine"; + plotType[1] = "PolyLine"; + plotType[2] = "PolyLine"; + plotType[3] = "PolyLine"; + plotType[4] = "PolyLine"; + plotType[5] = "PolyLine"; + plotInterval[0] = "0"; + plotInterval[1] = "0"; + plotInterval[2] = "0"; + plotInterval[3] = "0"; + plotInterval[4] = "0"; + plotInterval[5] = "0"; + position = "816 5"; extent = "200 200"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphKeyContainerProfile"; visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; - new GuiControl() { - profile = "NetGraphKeyContainerProfile"; + position = "816 205"; + extent = "200 104"; + minExtent = "8 2"; horizSizing = "left"; vertSizing = "bottom"; - position = "432 205"; - extent = "200 52"; - minExtent = "8 2"; + profile = "NetGraphKeyContainerProfile"; visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiTextCtrl(GhostsActive) { - profile = "NetGraphGhostsActiveProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Ghosts Active"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "0 0"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphGhostsActiveProfile"; visible = "1"; - text = "Ghosts Active"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(GhostUpdates) { - profile = "NetGraphGhostUpdatesProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Ghost Updates"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "100 0"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphGhostUpdatesProfile"; visible = "1"; - text = "Ghost Updates"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(BitsSent) { - profile = "NetGraphBitsSentProfile"; - horizSizing = "left"; - vertSizing = "bottom"; - position = "0 18 "; + text = "Bytes Sent"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 18"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphBitsSentProfile"; visible = "1"; - text = "Bytes Sent"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(BitsReceived) { - profile = "NetGraphBitsReceivedProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Bytes Received"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "100 18"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphBitsReceivedProfile"; visible = "1"; - text = "Bytes Received"; - maxLength = "255"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiTextCtrl(Latency) { - profile = "NetGraphLatencyProfile"; - horizSizing = "left"; - vertSizing = "bottom"; + text = "Latency"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; position = "0 36"; extent = "100 18"; minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphLatencyProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl(PacketLoss) { + text = "Packet Loss"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "100 36"; + extent = "59 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; visible = "1"; - text = "Latency"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Network Simulation:"; maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 52"; + extent = "97 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; - new GuiTextCtrl(PacketLoss) { + new GuiTextCtrl() { + text = "Simulated Latency:"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 68"; + extent = "91 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "ms"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "179 68"; + extent = "20 18"; + minExtent = "8 2"; horizSizing = "left"; vertSizing = "bottom"; - position = "100 36"; - extent = "59 18"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(NetGraphSimLatency) { + historySize = "0"; + tabComplete = "0"; + sinkAllKeyEvents = "0"; + password = "0"; + passwordMask = "*"; + text = "0"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "112 67"; + extent = "64 18"; minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; visible = "1"; - text = "Packet Loss"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Simulated Packet Loss:"; maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "0 83"; + extent = "111 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "%"; + maxLength = "255"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "179 84"; + extent = "20 18"; + minExtent = "8 2"; + horizSizing = "left"; + vertSizing = "bottom"; + profile = "NetGraphPacketLossProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl(NetGraphSimPacket) { + historySize = "0"; + tabComplete = "0"; + sinkAllKeyEvents = "0"; + password = "0"; + passwordMask = "*"; + text = "0"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "112 85"; + extent = "64 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextEditProfile"; + visible = "1"; + active = "1"; + command = "if(NetGraphSimLatency.text $= \"\" || NetGraphSimLatency.text < 0)\n{\n NetGraphSimLatency.text = 0;\n}\n\nif(NetGraphSimPacket.text $= \"\" || NetGraphSimPacket.text < 0)\n{\n NetGraphSimLatency.text = 0;\n}\nelse if(NetGraphSimPacket.text > 100)\n{\n NetGraphSimPacket.text = 100;\n}\n\nnetSimulateLag( NetGraphSimLatency.text, NetGraphSimPacket.text );"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; @@ -186,7 +466,10 @@ function toggleNetGraph() Canvas.add(NetGraphGui); } else + { Canvas.remove(NetGraphGui); + netSimulateLag( 0, 0 ); + } } function NetGraph::updateStats() @@ -236,3 +519,39 @@ function NetGraph::toggleKey() PacketLoss.visible = 0; } } + +function NetGraphSimLatency::onReturn(%this) +{ + NetGraph.updateNetworkSimulation(); +} + +function NetGraphSimPacket::onReturn(%this) +{ + NetGraph.updateNetworkSimulation(); +} + +function NetGraph::updateNetworkSimulation(%this) +{ + %latency = NetGraphSimLatency.getText(); + + if(%latency $= "" || %latency < 0) + { + NetGraphSimLatency.text = 0; + %latency = 0; + } + + %packetLoss = NetGraphSimPacket.getText(); + + if(%packetLoss $= "" || %packetLoss < 0) + { + NetGraphSimLatency.text = 0; + %packetLoss = 0; + } + else if(%packetLoss > 100) + { + NetGraphSimPacket.text = 100; + %packetLoss = 100; + } + + netSimulateLag( %latency, %packetLoss ); +} \ No newline at end of file diff --git a/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs index b2a2f209e8..61f2141516 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/menuHandlers.ed.cs @@ -770,6 +770,15 @@ function EditorMenuEditPaste() // Set up min/max camera slider range eval("CameraSpeedDropdownCtrlContainer-->Slider.range = \"" @ %minSpeed @ " " @ %maxSpeed @ "\";"); } + +////////////////////////////////////////////////////////////////////////// +// Tools Menu Handler +////////////////////////////////////////////////////////////////////////// +function EditorUtilitiesMenu::onSelectItem(%this, %id, %text) +{ + return Parent::onSelectItem(%this, %id, %text); +} + ////////////////////////////////////////////////////////////////////////// // World Menu Handler Object Menu ////////////////////////////////////////////////////////////////////////// diff --git a/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs index 1e378ae112..102931dec3 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs @@ -252,6 +252,18 @@ class = "EditorLightingMenu"; // last menu items in EditorLightingMenu::onAdd(). }; %this.menuBar.insert(%lightingMenu, %this.menuBar.getCount()); + + // Tools Menu + %toolsMenu = new PopupMenu() + { + superClass = "MenuBuilder"; + class = "EditorUtilitiesMenu"; + + barTitle = "Tools"; + + item[0] = "Network Graph" TAB "n" TAB "toggleNetGraph();"; + }; + %this.menuBar.insert(%toolsMenu, %this.menuBar.getCount()); // Help Menu %helpMenu = new PopupMenu() From 25d2fd877b0c7076c98cd2019106b8d373ab32a3 Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 20 Apr 2016 01:06:31 -0500 Subject: [PATCH 187/324] Makes the profiler pop-up act on a toggle, and also adds an entry into the World Editor's Tool menu to easily activate it. --- Templates/Full/game/scripts/client/default.bind.cs | 7 ++++++- Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Templates/Full/game/scripts/client/default.bind.cs b/Templates/Full/game/scripts/client/default.bind.cs index d2ca237301..9dcbca96b5 100644 --- a/Templates/Full/game/scripts/client/default.bind.cs +++ b/Templates/Full/game/scripts/client/default.bind.cs @@ -618,7 +618,12 @@ function bringUpOptions(%val) function showMetrics(%val) { if(%val) - metrics("fps gfx shadow sfx terrain groundcover forest net"); + { + if(!Canvas.isMember(FrameOverlayGui)) + metrics("fps gfx shadow sfx terrain groundcover forest net"); + else + metrics(""); + } } GlobalActionMap.bind(keyboard, "ctrl F2", showMetrics); diff --git a/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs index 102931dec3..0916a00655 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/menus.ed.cs @@ -262,6 +262,7 @@ class = "EditorUtilitiesMenu"; barTitle = "Tools"; item[0] = "Network Graph" TAB "n" TAB "toggleNetGraph();"; + item[1] = "Profiler" TAB "ctrl F2" TAB "showMetrics(true);"; }; %this.menuBar.insert(%toolsMenu, %this.menuBar.getCount()); From 4b1895cba54ce09f71126eda4031ed092171ffbf Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sun, 24 Apr 2016 11:36:28 -0500 Subject: [PATCH 188/324] Certain plugins were not playing nice on the directx end with updating rendertargets. Provides a profile for targets intended to be continuously updated. --- Engine/source/gfx/gfxTextureProfile.cpp | 4 ++++ Engine/source/gfx/gfxTextureProfile.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/Engine/source/gfx/gfxTextureProfile.cpp b/Engine/source/gfx/gfxTextureProfile.cpp index 0272d6b315..80a2fbceb4 100644 --- a/Engine/source/gfx/gfxTextureProfile.cpp +++ b/Engine/source/gfx/gfxTextureProfile.cpp @@ -59,6 +59,10 @@ GFX_ImplementTextureProfile(GFXDefaultZTargetProfile, GFXTextureProfile::DiffuseMap, GFXTextureProfile::PreserveSize | GFXTextureProfile::NoMipmap | GFXTextureProfile::ZTarget | GFXTextureProfile::NoDiscard, GFXTextureProfile::NONE); +GFX_ImplementTextureProfile(GFXDynamicTextureProfile, + GFXTextureProfile::DiffuseMap, + GFXTextureProfile::Dynamic, + GFXTextureProfile::NONE); //----------------------------------------------------------------------------- diff --git a/Engine/source/gfx/gfxTextureProfile.h b/Engine/source/gfx/gfxTextureProfile.h index e5abbc4dac..95bc179447 100644 --- a/Engine/source/gfx/gfxTextureProfile.h +++ b/Engine/source/gfx/gfxTextureProfile.h @@ -215,5 +215,7 @@ GFX_DeclareTextureProfile(GFXDefaultStaticDXT5nmProfile); GFX_DeclareTextureProfile(GFXSystemMemProfile); // Depth buffer texture GFX_DeclareTextureProfile(GFXDefaultZTargetProfile); +// Dynamic Texure +GFX_DeclareTextureProfile(GFXDynamicTextureProfile); #endif From 3d6803865c46a4ea29e5f8ac1704fe13a00bba60 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 25 Apr 2016 11:36:23 -0500 Subject: [PATCH 189/324] missing samplerstate configurations --- .../scripts/client/lighting/advanced/shaders.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs index eaf7f70b8e..22d1bdbdf2 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs @@ -39,9 +39,11 @@ mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) mSamplerNames[1] = "shadowMap"; - samplerStates[2] = SamplerClampLinear; // SSAO Mask - mSamplerNames[2] = "ssaoMask"; - samplerStates[3] = SamplerWrapPoint; // Random Direction Map + samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) + mSamplerNames[2] = "dynamicShadowMap"; + samplerStates[3] = SamplerClampLinear; // SSAO Mask + mSamplerNames[3] = "ssaoMask"; + samplerStates[4] = SamplerWrapPoint; // Random Direction Map cullDefined = true; cullMode = GFXCullNone; @@ -114,8 +116,10 @@ mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) mSamplerNames[1] = "shadowMap"; - samplerStates[2] = SamplerClampLinear; // Cookie Map - samplerStates[3] = SamplerWrapPoint; // Random Direction Map + samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) + mSamplerNames[2] = "dynamicShadowMap"; + samplerStates[3] = SamplerClampLinear; // Cookie Map + samplerStates[4] = SamplerWrapPoint; // Random Direction Map cullDefined = true; cullMode = GFXCullCW; From c645475e5695780f7a5d57911e77489cd6730680 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 26 Apr 2016 11:30:24 -0500 Subject: [PATCH 190/324] Adds in some missing script functions that let projectiles damage and destroy physics shapes. --- .../Full/game/scripts/server/physicsShape.cs | 68 +++++++++++++++++++ .../Full/game/scripts/server/scriptExec.cs | 1 + .../Full/game/scripts/server/shapeBase.cs | 14 ++++ 3 files changed, 83 insertions(+) create mode 100644 Templates/Full/game/scripts/server/physicsShape.cs diff --git a/Templates/Full/game/scripts/server/physicsShape.cs b/Templates/Full/game/scripts/server/physicsShape.cs new file mode 100644 index 0000000000..8818a16139 --- /dev/null +++ b/Templates/Full/game/scripts/server/physicsShape.cs @@ -0,0 +1,68 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function PhysicsShapeData::damage(%this, %obj, %sourceObject, %position, %amount, %damageType) +{ + // Order of operations is extremely important here! + // Verify that any changes will not cause this method to overflow the stack + // recursively calling itself. + + // Note that invulerable, damageRadius, areaImpulse, radiusDamage, and damageType + // are only dynamic fields... This is fine so long as you are only calling + // this method server-side, just keep in mind these fields are NOT networked. + + if ( %this.invulnerable || + %amount < 0 || + ( %this.minDamageAmount != 0 && %amount < %this.minDamageAmount ) ) + return; + + // We cannot destroy things twice. + if ( %obj.isDestroyed() ) + return; + + // This sets a maskbit on the server PhysicsShape which will cause the + // client object to destroy ( spawn debris ) during the next ghost update. + %obj.destroy(); + + // Single-player hack... + // In a single-player situation the radial impulse NetEvent will + // be applied client-side immediately when we call it, which means it will + // happen before the next ghost update and the debris won't even exist yet! + // + // So we are explicitly calling destroy on the client-side object first, + // before sending the event. + // + if ( %obj.getClientObject() ) + %obj.getClientObject().destroy(); + + if ( %this.damageRadius > 0 ) + { + // Send impulse event to affect objects from the explosion of this object. + // Happens server-side and client-side. + if ( %this.areaImpulse > 0 ) + RadialImpulseEvent::send( %position, %this.damageRadius, %this.areaImpulse ); + + // Apply damage to objects from the explosion of this object. + if ( %this.radiusDamage > 0 ) + radiusDamage( %obj, %position, %this.damageRadius, %this.radiusDamage, %this.damageType ); + } +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/scriptExec.cs b/Templates/Full/game/scripts/server/scriptExec.cs index 26f4f82805..a612040400 100644 --- a/Templates/Full/game/scripts/server/scriptExec.cs +++ b/Templates/Full/game/scripts/server/scriptExec.cs @@ -32,6 +32,7 @@ exec("./projectile.cs"); exec("./radiusDamage.cs"); exec("./teleporter.cs"); +exec("./physicsShape.cs"); // Load our supporting weapon script, it contains methods used by all weapons. exec("./weapon.cs"); diff --git a/Templates/Full/game/scripts/server/shapeBase.cs b/Templates/Full/game/scripts/server/shapeBase.cs index 1282788831..ba0e9028b7 100644 --- a/Templates/Full/game/scripts/server/shapeBase.cs +++ b/Templates/Full/game/scripts/server/shapeBase.cs @@ -97,6 +97,20 @@ } } + +function GameBase::damage(%this, %sourceObject, %position, %damage, %damageType) +{ + // All damage applied by one object to another should go through this method. + // This function is provided to allow objects some chance of overriding or + // processing damage values and types. As opposed to having weapons call + // ShapeBase::applyDamage directly. Damage is redirected to the datablock, + // this is standard procedure for many built in callbacks. + + %datablock = %this.getDataBlock(); + if ( isObject( %datablock ) ) + %datablock.damage(%this, %sourceObject, %position, %damage, %damageType); +} + //----------------------------------------------------------------------------- // ShapeBase datablock //----------------------------------------------------------------------------- From ec6f9c05a6c72632a08c30fb62efd2db4d3a48a2 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 30 Apr 2016 15:48:33 -0500 Subject: [PATCH 191/324] Integrates the nativeFileDialog library to enable native file dialogs on the major platforms. It is activated with SDL. --- Engine/lib/nativeFileDialogs/LICENSE | 16 + Engine/lib/nativeFileDialogs/README.md | 137 ++++ Engine/lib/nativeFileDialogs/SConstruct | 99 +++ Engine/lib/nativeFileDialogs/common.h | 21 + Engine/lib/nativeFileDialogs/include/nfd.h | 69 ++ Engine/lib/nativeFileDialogs/nfd_cocoa.m | 235 ++++++ Engine/lib/nativeFileDialogs/nfd_common.c | 142 ++++ Engine/lib/nativeFileDialogs/nfd_common.h | 37 + Engine/lib/nativeFileDialogs/nfd_gtk.c | 326 ++++++++ Engine/lib/nativeFileDialogs/nfd_win.cpp | 619 +++++++++++++++ .../platform/nativeDialogs/fileDialog.cpp | 721 ++++++++++++++++++ .../nativeDialogs/fileDialog.cpp | 354 --------- Tools/CMake/basics.cmake | 3 + Tools/CMake/libraries/nativeFileDialogs.cmake | 29 + Tools/CMake/torque3d.cmake | 35 + 15 files changed, 2489 insertions(+), 354 deletions(-) create mode 100644 Engine/lib/nativeFileDialogs/LICENSE create mode 100644 Engine/lib/nativeFileDialogs/README.md create mode 100644 Engine/lib/nativeFileDialogs/SConstruct create mode 100644 Engine/lib/nativeFileDialogs/common.h create mode 100644 Engine/lib/nativeFileDialogs/include/nfd.h create mode 100644 Engine/lib/nativeFileDialogs/nfd_cocoa.m create mode 100644 Engine/lib/nativeFileDialogs/nfd_common.c create mode 100644 Engine/lib/nativeFileDialogs/nfd_common.h create mode 100644 Engine/lib/nativeFileDialogs/nfd_gtk.c create mode 100644 Engine/lib/nativeFileDialogs/nfd_win.cpp create mode 100644 Engine/source/platform/nativeDialogs/fileDialog.cpp delete mode 100644 Engine/source/platformX86UNIX/nativeDialogs/fileDialog.cpp create mode 100644 Tools/CMake/libraries/nativeFileDialogs.cmake diff --git a/Engine/lib/nativeFileDialogs/LICENSE b/Engine/lib/nativeFileDialogs/LICENSE new file mode 100644 index 0000000000..3ab103c551 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/LICENSE @@ -0,0 +1,16 @@ +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/Engine/lib/nativeFileDialogs/README.md b/Engine/lib/nativeFileDialogs/README.md new file mode 100644 index 0000000000..7ff1008a39 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/README.md @@ -0,0 +1,137 @@ +# Native File Dialog # + +A tiny, neat C library that portably invokes native file open and save dialogs. Write dialog code once and have it pop up native dialogs on all supported platforms. Avoid linking large dependencies like wxWidgets and qt. + +Features: + + - Lean C API, static library -- no ObjC, no C++, no STL. + - Zlib licensed. + - Consistent UTF-8 support on all platforms. + - Simple universal file filter syntax. + - Paid support available. + - Multiple file selection support. + - 64-bit and 32-bit friendly. + - GCC, Clang and Visual Studio supported. + - No third party dependencies. + - Support for Vista's modern `IFileDialog` on Windows. + - Support for non-deprecated Cocoa APIs on OS X. + - GTK+3 dialog on Linux. + - Tested, works alongside [http://www.libsdl.org](SDL2) on all platforms, for the game developers out there. + +# Example Usage # + +```C +#include +#include +#include + +int main( void ) +{ + nfdchar_t *outPath = NULL; + nfdresult_t result = NFD_OpenDialog( NULL, NULL, &outPath ); + + if ( result == NFD_OKAY ) { + puts("Success!"); + puts(outPath); + free(outPath); + } + else if ( result == NFD_CANCEL ) { + puts("User pressed cancel."); + } + else { + printf("Error: %s\n", NFD_GetError() ); + } + + return 0; +} +``` + +See [NFD.h](src/include/nfd.h) for more options. + +# Screenshots # + +![Windows 8 rendering an IFileOpenDialog](screens/open_win8.png?raw=true) +![GTK3 on Linux](screens/open_gtk3.png?raw=true) +![Cocoa on Yosemite](screens/open_cocoa.png?raw=true) + + +## Building ## + +NFD uses [SCons](http://www.scons.org) for cross-platform builds. After installing SCons, build it with: + + cd src + scons debug=[0,1] + +Alternatively, you can avoid Scons by just including NFD files to your existing project: + + 1. Add all header files in `src/` and `src/include` to your project. + 2. Add `src/include` to your include search path or copy it into your existing search path. + 3. Add `src/nfd_common.c` to your project. + 4. Add `src/nfd_` to your project, where `` is the NFD backend for the platform you are fixing to build. + 5. On Visual Studio, define `_CRT_SECURE_NO_WARNINGS` to avoid warnings. + +### Compiling Your Programs ### + + 1. Add `src/include` to your include search path. + 2. Add `nfd.lib` to the list of list of static libraries to link against. + 3. Add `src/` to the library search path. + +On Linux, you must compile and link against GTK+. Recommend use of `pkg-config --cflags --libs gtk+-3.0`. + +On Mac OS X, add `AppKit` to the list of frameworks. + +On Windows, ensure you are building against `comctl32.lib`. + +## Usage ## + +See `NFD.h` for API calls. See `tests/*.c` for example code. + +See `tests/SConstruct` for a working build script that compiles on all platforms. + +## File Filter Syntax ## + +There is a form of file filtering in every file dialog, but no consistent means of supporting it. NFD provides support for filtering files by groups of extensions, providing its own descriptions (where applicable) for the extensions. + +A wildcard filter is always added to every dialog. + +### Separators ### + + - `;` Begin a new filter. + - `,` Add a separate type to the filter. + +#### Examples #### + +`txt` The default filter is for text files. There is a wildcard option in a dropdown. + +`png,jpg;psd` The default filter is for png and jpg files. A second filter is available for psd files. There is a wildcard option in a dropdown. + +`NULL` Wildcard only. + +## Iterating Over PathSets ## + +See [test_opendialogmultiple.c](test/test_opendialogmultiple.c). + +# Known Limitations # + +I accept quality code patches, or will resolve these and other matters through support. + + - No support for Windows XP's legacy dialogs such as `GetOpenFileName`. + - No support for file filter names -- ex: "Image Files" (*.png, *.jpg). Nameless filters are supported, though. + - No support for selecting folders instead of files. + - On Linux, GTK+ cannot be uninitialized to save memory. Launching a file dialog costs memory. I am open to accepting an alternative `nfd_zenity.c` implementation which uses Zenity and pipes. + +# Copyright and Credit # + +Copyright © 2014 [Frogtoss Games](http://www.frogtoss.com), Inc. +File [LICENSE](LICENSE) covers all files in this repo. + +Native File Dialog by Michael Labbe + + +Tomasz Konojacki for [microutf8](http://puszcza.gnu.org.ua/software/microutf8/) + +## Support ## + +Directed support for this work is available from the original author under a paid agreement. + +[Contact Frogtoss Games](http://www.frogtoss.com/pages/contact.html). diff --git a/Engine/lib/nativeFileDialogs/SConstruct b/Engine/lib/nativeFileDialogs/SConstruct new file mode 100644 index 0000000000..342fa1a3a8 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/SConstruct @@ -0,0 +1,99 @@ +# +# Native File Dialog +# +# Scons build script -- GCC, Clang, Visual Studio +# Does not build test + + +import os + + +# target arch is build arch -- extend here for OS cross compiling +target_os=str(Platform()) + +# Corresponds to TARGET_ARCH set to environ. +target_arch = ARGUMENTS.get('target_arch', None) + +# visual studio does not import from environment +if target_os != 'win32': + IMPORT_FROM_ENV =['CC', 'CXX', 'CFLAGS', 'CXXFLAGS', 'ARFLAGS'] +else: + IMPORT_FROM_ENV =[] + + +debug = int(ARGUMENTS.get( 'debug', 0 )) + +nfd_files = ['nfd_common.c'] + +# Due to a Scons limitation, TARGET_ARCH cannot be appended to an existing environment. +if target_arch != None: + nfd_env = Environment( TARGET_ARCH=target_arch ) +else: + nfd_env = Environment() + +# import specific environment variables from the command line, overriding +# Scons environment defaults +for env_key in IMPORT_FROM_ENV: + if env_key in os.environ: + print "Making %s => %s" % ( env_key, os.environ[env_key] ) + nfd_env[env_key] = os.environ[env_key] + +# Windows runtime library types +win_rtl = {'debug': '/MDd', + 'release': '/MD'} + +def set_debug(env): + if target_os == 'win32': + env.Append( CCFLAGS=['/Z7', # obj contains full symbols + win_rtl['debug'] + ]) + else: + env.Append( CFLAGS=['-g'] ) + + +def set_release(env): + if target_os == 'win32': + env.Append( CCFLAGS=[win_rtl['release'], + '/O2'] ) + else: + env.Append( CFLAGS=['-O3'] ) + + +def set_warnings(env): + if target_os == 'win32': + env.Append( CCFLAGS=['/W3'], + CPPDEFINES=['_CRT_SECURE_NO_WARNINGS'] ) + else: + env.Append( CFLAGS=['-Wall', '-pedantic'] ) + + +def get_lib_name(base, is_debug): + if is_debug: + return base + '_d' + else: + return base + + +# Cocoa OS X builds - clang +if target_os == 'darwin': + nfd_files.append('nfd_cocoa.m') + nfd_env.CC='clang -fcolor-diagnostics' + +# Linux GTK+ 3 builds - GCC +elif target_os == 'posix': + nfd_files.append('nfd_gtk.c') + nfd_env.ParseConfig( 'pkg-config --cflags gtk+-3.0' ) + +# Windows builds - Visual Studio +elif target_os == 'win32': + nfd_files.append('nfd_win.cpp') + +if debug: + set_debug(nfd_env) +else: + set_release(nfd_env) + +set_warnings(nfd_env) + +nfd_env.Append( CPPPATH=['.','./include'] ) +nfd_env.StaticLibrary( get_lib_name('nfd', debug), nfd_files ) diff --git a/Engine/lib/nativeFileDialogs/common.h b/Engine/lib/nativeFileDialogs/common.h new file mode 100644 index 0000000000..688b0b1fdc --- /dev/null +++ b/Engine/lib/nativeFileDialogs/common.h @@ -0,0 +1,21 @@ +/* + Native File Dialog + + Internal, common across platforms + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_COMMON_H +#define _NFD_COMMON_H + +#define NFD_MAX_STRLEN 256 +#define _NFD_UNUSED(x) ((void)x) + +void *NFDi_Malloc( size_t bytes ); +void NFDi_Free( void *ptr ); +void NFDi_SetError( const char *msg ); +void NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ); + +#endif diff --git a/Engine/lib/nativeFileDialogs/include/nfd.h b/Engine/lib/nativeFileDialogs/include/nfd.h new file mode 100644 index 0000000000..03fe532069 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/include/nfd.h @@ -0,0 +1,69 @@ +/* + Native File Dialog + + User API + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_H +#define _NFD_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/* denotes UTF-8 char */ +typedef char nfdchar_t; + +/* opaque data structure -- see NFD_PathSet_* */ +typedef struct { + nfdchar_t *buf; + size_t *indices; /* byte offsets into buf */ + size_t count; /* number of indices into buf */ +}nfdpathset_t; + +typedef enum { + NFD_ERROR, /* programmatic error */ + NFD_OKAY, /* user pressed okay, or successful return */ + NFD_CANCEL /* user pressed cancel */ +}nfdresult_t; + + +/* nfd_.c */ + +/* single file open dialog */ +nfdresult_t NFD_OpenDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ); + +/* multiple file open dialog */ +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ); + +/* save dialog */ +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ); + +/* nfd_common.c */ + +/* get last error -- set when nfdresult_t returns NFD_ERROR */ +const char *NFD_GetError( void ); +/* get the number of entries stored in pathSet */ +size_t NFD_PathSet_GetCount( const nfdpathset_t *pathSet ); +/* Get the UTF-8 path at offset index */ +nfdchar_t *NFD_PathSet_GetPath( const nfdpathset_t *pathSet, size_t index ); +/* Free the pathSet */ +void NFD_PathSet_Free( nfdpathset_t *pathSet ); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Engine/lib/nativeFileDialogs/nfd_cocoa.m b/Engine/lib/nativeFileDialogs/nfd_cocoa.m new file mode 100644 index 0000000000..a73e15714a --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_cocoa.m @@ -0,0 +1,235 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +#include +#include "nfd.h" +#include "nfd_common.h" + +static NSArray *BuildAllowedFileTypes( const char *filterList ) +{ + // Commas and semicolons are the same thing on this platform + + NSMutableArray *buildFilterList = [[NSMutableArray alloc] init]; + + char typebuf[NFD_MAX_STRLEN] = {0}; + + size_t filterListLen = strlen(filterList); + char *p_typebuf = typebuf; + for ( size_t i = 0; i < filterListLen+1; ++i ) + { + if ( filterList[i] == ',' || filterList[i] == ';' || filterList[i] == '\0' ) + { + ++p_typebuf; + *p_typebuf = '\0'; + NSString *thisType = [NSString stringWithUTF8String: typebuf]; + [buildFilterList addObject:thisType]; + p_typebuf = typebuf; + *p_typebuf = '\0'; + } + else + { + *p_typebuf = filterList[i]; + ++p_typebuf; + + } + } + + NSArray *returnArray = [NSArray arrayWithArray:buildFilterList]; + + [buildFilterList release]; + return returnArray; +} + +static void AddFilterListToDialog( NSSavePanel *dialog, const char *filterList ) +{ + if ( !filterList || strlen(filterList) == 0 ) + return; + + NSArray *allowedFileTypes = BuildAllowedFileTypes( filterList ); + if ( [allowedFileTypes count] != 0 ) + { + [dialog setAllowedFileTypes:allowedFileTypes]; + } +} + +static void SetDefaultPath( NSSavePanel *dialog, const nfdchar_t *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return; + + NSString *defaultPathString = [NSString stringWithUTF8String: defaultPath]; + NSURL *url = [NSURL fileURLWithPath:defaultPathString isDirectory:YES]; + [dialog setDirectoryURL:url]; +} + + +/* fixme: pathset should be pathSet */ +static nfdresult_t AllocPathSet( NSArray *urls, nfdpathset_t *pathset ) +{ + assert(pathset); + assert([urls count]); + + pathset->count = (size_t)[urls count]; + pathset->indices = NFDi_Malloc( sizeof(size_t)*pathset->count ); + if ( !pathset->indices ) + { + return NFD_ERROR; + } + + // count the total space needed for buf + size_t bufsize = 0; + for ( NSURL *url in urls ) + { + NSString *path = [url path]; + bufsize += [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + } + + pathset->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufsize ); + if ( !pathset->buf ) + { + return NFD_ERROR; + } + + // fill buf + nfdchar_t *p_buf = pathset->buf; + size_t count = 0; + for ( NSURL *url in urls ) + { + NSString *path = [url path]; + const nfdchar_t *utf8Path = [path UTF8String]; + size_t byteLen = [path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + memcpy( p_buf, utf8Path, byteLen ); + + ptrdiff_t index = p_buf - pathset->buf; + assert( index >= 0 ); + pathset->indices[count] = (size_t)index; + + p_buf += byteLen; + ++count; + } + + return NFD_OKAY; +} + +/* public */ + + +nfdresult_t NFD_OpenDialog( const char *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + [dialog setAllowsMultipleSelection:NO]; + + // Build the filter list + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSURL *url = [dialog URL]; + const char *utf8Path = [[url path] UTF8String]; + + // byte count, not char count + size_t len = strlen(utf8Path);//NFDi_UTF8_Strlen(utf8Path); + + *outPath = NFDi_Malloc( len+1 ); + if ( !*outPath ) + { + [pool release]; + return NFD_ERROR; + } + memcpy( *outPath, utf8Path, len+1 ); /* copy null term */ + nfdResult = NFD_OKAY; + } + [pool release]; + + return nfdResult; +} + + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSOpenPanel *dialog = [NSOpenPanel openPanel]; + [dialog setAllowsMultipleSelection:YES]; + + // Build the fiter list. + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSArray *urls = [dialog URLs]; + + if ( [urls count] == 0 ) + { + [pool release]; + return NFD_CANCEL; + } + + if ( AllocPathSet( urls, outPaths ) == NFD_ERROR ) + { + [pool release]; + return NFD_ERROR; + } + + nfdResult = NFD_OKAY; + } + [pool release]; + + return nfdResult; +} + + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + NSSavePanel *dialog = [NSSavePanel savePanel]; + [dialog setExtensionHidden:NO]; + + // Build the filter list. + AddFilterListToDialog(dialog, filterList); + + // Set the starting directory + SetDefaultPath(dialog, defaultPath); + + nfdresult_t nfdResult = NFD_CANCEL; + if ( [dialog runModal] == NSModalResponseOK ) + { + NSURL *url = [dialog URL]; + const char *utf8Path = [[url path] UTF8String]; + + size_t byteLen = [url.path lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; + + *outPath = NFDi_Malloc( byteLen ); + if ( !*outPath ) + { + [pool release]; + return NFD_ERROR; + } + memcpy( *outPath, utf8Path, byteLen ); + nfdResult = NFD_OKAY; + } + + [pool release]; + + return nfdResult; +} diff --git a/Engine/lib/nativeFileDialogs/nfd_common.c b/Engine/lib/nativeFileDialogs/nfd_common.c new file mode 100644 index 0000000000..269fbd2135 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_common.c @@ -0,0 +1,142 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +#include +#include +#include +#include "nfd_common.h" + +static char g_errorstr[NFD_MAX_STRLEN] = {0}; + +/* public routines */ + +const char *NFD_GetError( void ) +{ + return g_errorstr; +} + +size_t NFD_PathSet_GetCount( const nfdpathset_t *pathset ) +{ + assert(pathset); + return pathset->count; +} + +nfdchar_t *NFD_PathSet_GetPath( const nfdpathset_t *pathset, size_t num ) +{ + assert(pathset); + assert(num < pathset->count); + + return pathset->buf + pathset->indices[num]; +} + +void NFD_PathSet_Free( nfdpathset_t *pathset ) +{ + assert(pathset); + NFDi_Free( pathset->indices ); + NFDi_Free( pathset->buf ); +} + +/* internal routines */ + +void *NFDi_Malloc( size_t bytes ) +{ + void *ptr = malloc(bytes); + if ( !ptr ) + NFDi_SetError("NFDi_Malloc failed."); + + return ptr; +} + +void NFDi_Free( void *ptr ) +{ + assert(ptr); + free(ptr); +} + +void NFDi_SetError( const char *msg ) +{ + int bTruncate = NFDi_SafeStrncpy( g_errorstr, msg, NFD_MAX_STRLEN ); + assert( !bTruncate ); _NFD_UNUSED(bTruncate); +} + + +int NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ) +{ + size_t n = maxCopy; + char *d = dst; + + assert( src ); + assert( dst ); + + while ( n > 0 && *src != '\0' ) + { + *d++ = *src++; + --n; + } + + /* Truncation case - + terminate string and return true */ + if ( n == 0 ) + { + dst[maxCopy-1] = '\0'; + return 1; + } + + /* No truncation. Append a single NULL and return. */ + *d = '\0'; + return 0; +} + + +/* adapted from microutf8 */ +size_t NFDi_UTF8_Strlen( const nfdchar_t *str ) +{ + /* This function doesn't properly check validity of UTF-8 character + sequence, it is supposed to use only with valid UTF-8 strings. */ + + size_t character_count = 0; + size_t i = 0; /* Counter used to iterate over string. */ + nfdchar_t maybe_bom[4]; + + /* If there is UTF-8 BOM ignore it. */ + if (strlen(str) > 2) + { + strncpy(maybe_bom, str, 3); + maybe_bom[3] = 0; + if (strcmp(maybe_bom, (nfdchar_t*)NFD_UTF8_BOM) == 0) + i += 3; + } + + while(str[i]) + { + if (str[i] >> 7 == 0) + { + /* If bit pattern begins with 0 we have ascii character. */ + ++character_count; + } + else if (str[i] >> 6 == 3) + { + /* If bit pattern begins with 11 it is beginning of UTF-8 byte sequence. */ + ++character_count; + } + else if (str[i] >> 6 == 2) + ; /* If bit pattern begins with 10 it is middle of utf-8 byte sequence. */ + else + { + /* In any other case this is not valid UTF-8. */ + return -1; + } + ++i; + } + + return character_count; +} + +int NFDi_IsFilterSegmentChar( char ch ) +{ + return (ch==','||ch==';'||ch=='\0'); +} + diff --git a/Engine/lib/nativeFileDialogs/nfd_common.h b/Engine/lib/nativeFileDialogs/nfd_common.h new file mode 100644 index 0000000000..a3f6b4ad64 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_common.h @@ -0,0 +1,37 @@ +/* + Native File Dialog + + Internal, common across platforms + + http://www.frogtoss.com/labs + */ + + +#ifndef _NFD_COMMON_H +#define _NFD_COMMON_H + +#include "nfd.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define NFD_MAX_STRLEN 256 +#define _NFD_UNUSED(x) ((void)x) + +#define NFD_UTF8_BOM "\xEF\xBB\xBF" + + +void *NFDi_Malloc( size_t bytes ); +void NFDi_Free( void *ptr ); +void NFDi_SetError( const char *msg ); +int NFDi_SafeStrncpy( char *dst, const char *src, size_t maxCopy ); +size_t NFDi_UTF8_Strlen( const nfdchar_t *str ); +int NFDi_IsFilterSegmentChar( char ch ); + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/Engine/lib/nativeFileDialogs/nfd_gtk.c b/Engine/lib/nativeFileDialogs/nfd_gtk.c new file mode 100644 index 0000000000..2d7b9b5f6e --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_gtk.c @@ -0,0 +1,326 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs +*/ + +#include +#include +#include +#include +#include "nfd.h" +#include "nfd_common.h" + + +const char INIT_FAIL_MSG[] = "gtk_init_check failed to initilaize GTK+"; + + +static void AddTypeToFilterName( const char *typebuf, char *filterName, size_t bufsize ) +{ + const char SEP[] = ", "; + + size_t len = strlen(filterName); + if ( len != 0 ) + { + strncat( filterName, SEP, bufsize - len - 1 ); + len += strlen(SEP); + } + + strncat( filterName, typebuf, bufsize - len - 1 ); +} + +static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList ) +{ + GtkFileFilter *filter; + char typebuf[NFD_MAX_STRLEN] = {0}; + const char *p_filterList = filterList; + char *p_typebuf = typebuf; + char filterName[NFD_MAX_STRLEN] = {0}; + + if ( !filterList || strlen(filterList) == 0 ) + return; + + filter = gtk_file_filter_new(); + while ( 1 ) + { + + if ( NFDi_IsFilterSegmentChar(*p_filterList) ) + { + char typebufWildcard[NFD_MAX_STRLEN]; + /* add another type to the filter */ + assert( strlen(typebuf) > 0 ); + assert( strlen(typebuf) < NFD_MAX_STRLEN-1 ); + + snprintf( typebufWildcard, NFD_MAX_STRLEN, "*.%s", typebuf ); + AddTypeToFilterName( typebuf, filterName, NFD_MAX_STRLEN ); + + gtk_file_filter_add_pattern( filter, typebufWildcard ); + + p_typebuf = typebuf; + memset( typebuf, 0, sizeof(char) * NFD_MAX_STRLEN ); + } + + if ( *p_filterList == ';' || *p_filterList == '\0' ) + { + /* end of filter -- add it to the dialog */ + + gtk_file_filter_set_name( filter, filterName ); + gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter ); + + filterName[0] = '\0'; + + if ( *p_filterList == '\0' ) + break; + + filter = gtk_file_filter_new(); + } + + if ( !NFDi_IsFilterSegmentChar( *p_filterList ) ) + { + *p_typebuf = *p_filterList; + p_typebuf++; + } + + p_filterList++; + } + + /* always append a wildcard option to the end*/ + + filter = gtk_file_filter_new(); + gtk_file_filter_set_name( filter, "*.*" ); + gtk_file_filter_add_pattern( filter, "*" ); + gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter ); +} + +static void SetDefaultPath( GtkWidget *dialog, const char *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return; + + /* GTK+ manual recommends not specifically setting the default path. + We do it anyway in order to be consistent across platforms. + + If consistency with the native OS is preferred, this is the line + to comment out. -ml */ + gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), defaultPath ); +} + +static nfdresult_t AllocPathSet( GSList *fileList, nfdpathset_t *pathSet ) +{ + size_t bufSize = 0; + GSList *node; + nfdchar_t *p_buf; + size_t count = 0; + + assert(fileList); + assert(pathSet); + + pathSet->count = (size_t)g_slist_length( fileList ); + assert( pathSet->count > 0 ); + + pathSet->indices = NFDi_Malloc( sizeof(size_t)*pathSet->count ); + if ( !pathSet->indices ) + { + return NFD_ERROR; + } + + /* count the total space needed for buf */ + for ( node = fileList; node; node = node->next ) + { + assert(node->data); + bufSize += strlen( (const gchar*)node->data ) + 1; + } + + pathSet->buf = NFDi_Malloc( sizeof(nfdchar_t) * bufSize ); + + /* fill buf */ + p_buf = pathSet->buf; + for ( node = fileList; node; node = node->next ) + { + nfdchar_t *path = (nfdchar_t*)(node->data); + size_t byteLen = strlen(path)+1; + ptrdiff_t index; + + memcpy( p_buf, path, byteLen ); + g_free(node->data); + + index = p_buf - pathSet->buf; + assert( index >= 0 ); + pathSet->indices[count] = (size_t)index; + + p_buf += byteLen; + ++count; + } + + g_slist_free( fileList ); + + return NFD_OKAY; +} + +static void WaitForCleanup(void) +{ + while (gtk_events_pending()) + gtk_main_iteration(); +} + +/* public */ + +nfdresult_t NFD_OpenDialog( const char *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Open File", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + char *filename; + + filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); + + { + size_t len = strlen(filename); + *outPath = NFDi_Malloc( len + 1 ); + memcpy( *outPath, filename, len + 1 ); + if ( !*outPath ) + { + g_free( filename ); + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + } + g_free( filename ); + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} + + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Open Files", + NULL, + GTK_FILE_CHOOSER_ACTION_OPEN, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Open", GTK_RESPONSE_ACCEPT, + NULL ); + gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER(dialog), TRUE ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + GSList *fileList = gtk_file_chooser_get_filenames( GTK_FILE_CHOOSER(dialog) ); + if ( AllocPathSet( fileList, outPaths ) == NFD_ERROR ) + { + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + GtkWidget *dialog; + nfdresult_t result; + + if ( !gtk_init_check( NULL, NULL ) ) + { + NFDi_SetError(INIT_FAIL_MSG); + return NFD_ERROR; + } + + dialog = gtk_file_chooser_dialog_new( "Save File", + NULL, + GTK_FILE_CHOOSER_ACTION_SAVE, + "_Cancel", GTK_RESPONSE_CANCEL, + "_Save", GTK_RESPONSE_ACCEPT, + NULL ); + gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(dialog), TRUE ); + + /* Build the filter list */ + AddFiltersToDialog(dialog, filterList); + + /* Set the default path */ + SetDefaultPath(dialog, defaultPath); + + result = NFD_CANCEL; + if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_ACCEPT ) + { + char *filename; + filename = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog) ); + + { + size_t len = strlen(filename); + *outPath = NFDi_Malloc( len + 1 ); + memcpy( *outPath, filename, len + 1 ); + if ( !*outPath ) + { + g_free( filename ); + gtk_widget_destroy(dialog); + return NFD_ERROR; + } + } + g_free(filename); + + result = NFD_OKAY; + } + + WaitForCleanup(); + gtk_widget_destroy(dialog); + WaitForCleanup(); + + return result; +} diff --git a/Engine/lib/nativeFileDialogs/nfd_win.cpp b/Engine/lib/nativeFileDialogs/nfd_win.cpp new file mode 100644 index 0000000000..b065d69cb7 --- /dev/null +++ b/Engine/lib/nativeFileDialogs/nfd_win.cpp @@ -0,0 +1,619 @@ +/* + Native File Dialog + + http://www.frogtoss.com/labs + */ + +/* only locally define UNICODE in this compilation unit */ +#ifndef UNICODE +#define UNICODE +#endif + + +#include +#include +#include +#include +#include +#include + +#include "nfd_common.h" + + +// allocs the space in outPath -- call free() +static void CopyWCharToNFDChar( const wchar_t *inStr, nfdchar_t **outStr ) +{ + int inStrCharacterCount = static_cast(wcslen(inStr)); + int bytesNeeded = WideCharToMultiByte( CP_UTF8, 0, + inStr, inStrCharacterCount, + NULL, 0, NULL, NULL ); + assert( bytesNeeded ); + bytesNeeded += 1; + + *outStr = (nfdchar_t*)NFDi_Malloc( bytesNeeded ); + if ( !*outStr ) + return; + + int bytesWritten = WideCharToMultiByte( CP_UTF8, 0, + inStr, -1, + *outStr, bytesNeeded, + NULL, NULL ); + assert( bytesWritten ); _NFD_UNUSED( bytesWritten ); +} + +/* includes NULL terminator byte in return */ +static size_t GetUTF8ByteCountForWChar( const wchar_t *str ) +{ + int bytesNeeded = WideCharToMultiByte( CP_UTF8, 0, + str, -1, + NULL, 0, NULL, NULL ); + assert( bytesNeeded ); + return bytesNeeded+1; +} + +// write to outPtr -- no free() necessary. No memory stomp tests are done -- they must be done +// before entering this function. +static int CopyWCharToExistingNFDCharBuffer( const wchar_t *inStr, nfdchar_t *outPtr ) +{ + int inStrCharacterCount = static_cast(wcslen(inStr)); + int bytesNeeded = static_cast(GetUTF8ByteCountForWChar( inStr )); + + /* invocation copies null term */ + int bytesWritten = WideCharToMultiByte( CP_UTF8, 0, + inStr, -1, + outPtr, bytesNeeded, + NULL, 0 ); + assert( bytesWritten ); + + return bytesWritten; + +} + + +// allocs the space in outStr -- call free() +static void CopyNFDCharToWChar( const nfdchar_t *inStr, wchar_t **outStr ) +{ + int inStrByteCount = static_cast(strlen(inStr)); + int charsNeeded = MultiByteToWideChar(CP_UTF8, 0, + inStr, inStrByteCount, + NULL, 0 ); + assert( charsNeeded ); + assert( !*outStr ); + charsNeeded += 1; // terminator + + *outStr = (wchar_t*)NFDi_Malloc( charsNeeded * sizeof(wchar_t) ); + if ( !*outStr ) + return; + + int ret = MultiByteToWideChar(CP_UTF8, 0, + inStr, inStrByteCount, + *outStr, charsNeeded); + (*outStr)[charsNeeded-1] = '\0'; + +#ifdef _DEBUG + int inStrCharacterCount = static_cast(NFDi_UTF8_Strlen(inStr)); + assert( ret == inStrCharacterCount ); +#else + _NFD_UNUSED(ret); +#endif +} + + +/* ext is in format "jpg", no wildcards or separators */ +static int AppendExtensionToSpecBuf( const char *ext, char *specBuf, size_t specBufLen ) +{ + const char SEP[] = ";"; + assert( specBufLen > strlen(ext)+3 ); + + if ( strlen(specBuf) > 0 ) + { + strncat( specBuf, SEP, specBufLen - strlen(specBuf) - 1 ); + specBufLen += strlen(SEP); + } + + char extWildcard[NFD_MAX_STRLEN]; + int bytesWritten = sprintf_s( extWildcard, NFD_MAX_STRLEN, "*.%s", ext ); + assert( bytesWritten == strlen(ext)+2 ); + + strncat( specBuf, extWildcard, specBufLen - strlen(specBuf) - 1 ); + + return NFD_OKAY; +} + +static nfdresult_t AddFiltersToDialog( ::IFileDialog *fileOpenDialog, const char *filterList ) +{ + const wchar_t EMPTY_WSTR[] = L""; + const wchar_t WILDCARD[] = L"*.*"; + + if ( !filterList || strlen(filterList) == 0 ) + return NFD_OKAY; + + // Count rows to alloc + UINT filterCount = 1; /* guaranteed to have one filter on a correct, non-empty parse */ + const char *p_filterList; + for ( p_filterList = filterList; *p_filterList; ++p_filterList ) + { + if ( *p_filterList == ';' ) + ++filterCount; + } + + assert(filterCount); + if ( !filterCount ) + { + NFDi_SetError("Error parsing filters."); + return NFD_ERROR; + } + + /* filterCount plus 1 because we hardcode the *.* wildcard after the while loop */ + COMDLG_FILTERSPEC *specList = (COMDLG_FILTERSPEC*)NFDi_Malloc( sizeof(COMDLG_FILTERSPEC) * (filterCount + 1) ); + if ( !specList ) + { + return NFD_ERROR; + } + for (size_t i = 0; i < filterCount+1; ++i ) + { + specList[i].pszName = NULL; + specList[i].pszSpec = NULL; + } + + size_t specIdx = 0; + p_filterList = filterList; + char typebuf[NFD_MAX_STRLEN] = {0}; /* one per comma or semicolon */ + char *p_typebuf = typebuf; + char filterName[NFD_MAX_STRLEN] = {0}; + + char specbuf[NFD_MAX_STRLEN] = {0}; /* one per semicolon */ + + while ( 1 ) + { + if ( NFDi_IsFilterSegmentChar(*p_filterList) ) + { + /* append a type to the specbuf (pending filter) */ + AppendExtensionToSpecBuf( typebuf, specbuf, NFD_MAX_STRLEN ); + + p_typebuf = typebuf; + memset( typebuf, 0, sizeof(char)*NFD_MAX_STRLEN ); + } + + if ( *p_filterList == ';' || *p_filterList == '\0' ) + { + /* end of filter -- add it to specList */ + + // Empty filter name -- Windows describes them by extension. + specList[specIdx].pszName = EMPTY_WSTR; + CopyNFDCharToWChar( specbuf, (wchar_t**)&specList[specIdx].pszSpec ); + + memset( specbuf, 0, sizeof(char)*NFD_MAX_STRLEN ); + ++specIdx; + if ( specIdx == filterCount ) + break; + } + + if ( !NFDi_IsFilterSegmentChar( *p_filterList )) + { + *p_typebuf = *p_filterList; + ++p_typebuf; + } + + ++p_filterList; + } + + /* Add wildcard */ + specList[specIdx].pszSpec = WILDCARD; + specList[specIdx].pszName = EMPTY_WSTR; + + fileOpenDialog->SetFileTypes( filterCount+1, specList ); + + /* free speclist */ + for ( size_t i = 0; i < filterCount; ++i ) + { + NFDi_Free( (void*)specList[i].pszSpec ); + } + NFDi_Free( specList ); + + return NFD_OKAY; +} + +static nfdresult_t AllocPathSet( IShellItemArray *shellItems, nfdpathset_t *pathSet ) +{ + const char ERRORMSG[] = "Error allocating pathset."; + + assert(shellItems); + assert(pathSet); + + // How many items in shellItems? + DWORD numShellItems; + HRESULT result = shellItems->GetCount(&numShellItems); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + pathSet->count = static_cast(numShellItems); + assert( pathSet->count > 0 ); + + pathSet->indices = (size_t*)NFDi_Malloc( sizeof(size_t)*pathSet->count ); + if ( !pathSet->indices ) + { + return NFD_ERROR; + } + + /* count the total bytes needed for buf */ + size_t bufSize = 0; + for ( DWORD i = 0; i < numShellItems; ++i ) + { + ::IShellItem *shellItem; + result = shellItems->GetItemAt(i, &shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + // Confirm SFGAO_FILESYSTEM is true for this shellitem, or ignore it. + SFGAOF attribs; + result = shellItem->GetAttributes( SFGAO_FILESYSTEM, &attribs ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + if ( !(attribs & SFGAO_FILESYSTEM) ) + continue; + + LPWSTR name; + shellItem->GetDisplayName(SIGDN_FILESYSPATH, &name); + + // Calculate length of name with UTF-8 encoding + bufSize += GetUTF8ByteCountForWChar( name ); + } + + assert(bufSize); + + pathSet->buf = (nfdchar_t*)NFDi_Malloc( sizeof(nfdchar_t) * bufSize ); + memset( pathSet->buf, 0, sizeof(nfdchar_t) * bufSize ); + + /* fill buf */ + nfdchar_t *p_buf = pathSet->buf; + for (DWORD i = 0; i < numShellItems; ++i ) + { + ::IShellItem *shellItem; + result = shellItems->GetItemAt(i, &shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + + // Confirm SFGAO_FILESYSTEM is true for this shellitem, or ignore it. + SFGAOF attribs; + result = shellItem->GetAttributes( SFGAO_FILESYSTEM, &attribs ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError(ERRORMSG); + return NFD_ERROR; + } + if ( !(attribs & SFGAO_FILESYSTEM) ) + continue; + + LPWSTR name; + shellItem->GetDisplayName(SIGDN_FILESYSPATH, &name); + + int bytesWritten = CopyWCharToExistingNFDCharBuffer(name, p_buf); + + ptrdiff_t index = p_buf - pathSet->buf; + assert( index >= 0 ); + pathSet->indices[i] = static_cast(index); + + p_buf += bytesWritten; + } + + return NFD_OKAY; +} + + +static nfdresult_t SetDefaultPath( IFileDialog *dialog, const char *defaultPath ) +{ + if ( !defaultPath || strlen(defaultPath) == 0 ) + return NFD_OKAY; + + wchar_t *defaultPathW = {0}; + CopyNFDCharToWChar( defaultPath, &defaultPathW ); + + IShellItem *folder; + HRESULT result = SHCreateItemFromParsingName( defaultPathW, NULL, IID_PPV_ARGS(&folder) ); + + // Valid non results. + if ( result == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) || result == HRESULT_FROM_WIN32(ERROR_INVALID_DRIVE) ) + { + NFDi_Free( defaultPathW ); + return NFD_OKAY; + } + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Error creating ShellItem"); + NFDi_Free( defaultPathW ); + return NFD_ERROR; + } + + // Could also call SetDefaultFolder(), but this guarantees defaultPath -- more consistency across API. + dialog->SetFolder( folder ); + + NFDi_Free( defaultPathW ); + folder->Release(); + + return NFD_OKAY; +} + +/* public */ + + +nfdresult_t NFD_OpenDialog( const char *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + // Init COM library. + HRESULT result = ::CoInitializeEx(NULL, + ::COINIT_APARTMENTTHREADED | + ::COINIT_DISABLE_OLE1DDE ); + if ( !SUCCEEDED(result)) + { + NFDi_SetError("Could not initialize COM."); + goto end; + } + + ::IFileOpenDialog *fileOpenDialog(NULL); + + // Create dialog + result = ::CoCreateInstance(::CLSID_FileOpenDialog, NULL, + CLSCTX_ALL, ::IID_IFileOpenDialog, + reinterpret_cast(&fileOpenDialog) ); + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileOpenDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileOpenDialog, defaultPath ) ) + { + goto end; + } + + // Show the dialog. + result = fileOpenDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + // Get the file name + ::IShellItem *shellItem(NULL); + result = fileOpenDialog->GetResult(&shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell item from dialog."); + goto end; + } + wchar_t *filePath(NULL); + result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get file path for selected."); + goto end; + } + + CopyWCharToNFDChar( filePath, outPath ); + CoTaskMemFree(filePath); + if ( !*outPath ) + { + /* error is malloc-based, error message would be redundant */ + goto end; + } + + nfdResult = NFD_OKAY; + shellItem->Release(); + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + + end: + ::CoUninitialize(); + + return nfdResult; +} + +nfdresult_t NFD_OpenDialogMultiple( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdpathset_t *outPaths ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + // Init COM library. + HRESULT result = ::CoInitializeEx(NULL, + ::COINIT_APARTMENTTHREADED | + ::COINIT_DISABLE_OLE1DDE ); + if ( !SUCCEEDED(result)) + { + NFDi_SetError("Could not initialize COM."); + return NFD_ERROR; + } + + ::IFileOpenDialog *fileOpenDialog(NULL); + + // Create dialog + result = ::CoCreateInstance(::CLSID_FileOpenDialog, NULL, + CLSCTX_ALL, ::IID_IFileOpenDialog, + reinterpret_cast(&fileOpenDialog) ); + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileOpenDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileOpenDialog, defaultPath ) ) + { + goto end; + } + + // Set a flag for multiple options + DWORD dwFlags; + result = fileOpenDialog->GetOptions(&dwFlags); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get options."); + goto end; + } + result = fileOpenDialog->SetOptions(dwFlags | FOS_ALLOWMULTISELECT); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not set options."); + goto end; + } + + // Show the dialog. + result = fileOpenDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + IShellItemArray *shellItems; + result = fileOpenDialog->GetResults( &shellItems ); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell items."); + goto end; + } + + if ( AllocPathSet( shellItems, outPaths ) == NFD_ERROR ) + { + goto end; + } + + shellItems->Release(); + nfdResult = NFD_OKAY; + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + + end: + ::CoUninitialize(); + + return nfdResult; +} + +nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, + const nfdchar_t *defaultPath, + nfdchar_t **outPath ) +{ + nfdresult_t nfdResult = NFD_ERROR; + + // Init COM library. + HRESULT result = ::CoInitializeEx(NULL, + ::COINIT_APARTMENTTHREADED | + ::COINIT_DISABLE_OLE1DDE ); + if ( !SUCCEEDED(result)) + { + NFDi_SetError("Could not initialize COM."); + return NFD_ERROR; + } + + ::IFileSaveDialog *fileSaveDialog(NULL); + + // Create dialog + result = ::CoCreateInstance(::CLSID_FileSaveDialog, NULL, + CLSCTX_ALL, ::IID_IFileSaveDialog, + reinterpret_cast(&fileSaveDialog) ); + + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not create dialog."); + goto end; + } + + // Build the filter list + if ( !AddFiltersToDialog( fileSaveDialog, filterList ) ) + { + goto end; + } + + // Set the default path + if ( !SetDefaultPath( fileSaveDialog, defaultPath ) ) + { + goto end; + } + + // Show the dialog. + result = fileSaveDialog->Show(NULL); + if ( SUCCEEDED(result) ) + { + // Get the file name + ::IShellItem *shellItem; + result = fileSaveDialog->GetResult(&shellItem); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get shell item from dialog."); + goto end; + } + wchar_t *filePath(NULL); + result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); + if ( !SUCCEEDED(result) ) + { + NFDi_SetError("Could not get file path for selected."); + goto end; + } + + CopyWCharToNFDChar( filePath, outPath ); + CoTaskMemFree(filePath); + if ( !*outPath ) + { + /* error is malloc-based, error message would be redundant */ + goto end; + } + + nfdResult = NFD_OKAY; + shellItem->Release(); + } + else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) + { + nfdResult = NFD_CANCEL; + } + else + { + NFDi_SetError("File dialog box show failed."); + nfdResult = NFD_ERROR; + } + + end: + ::CoUninitialize(); + + return nfdResult; +} diff --git a/Engine/source/platform/nativeDialogs/fileDialog.cpp b/Engine/source/platform/nativeDialogs/fileDialog.cpp new file mode 100644 index 0000000000..84b367618b --- /dev/null +++ b/Engine/source/platform/nativeDialogs/fileDialog.cpp @@ -0,0 +1,721 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "console/simBase.h" +#include "platform/nativeDialogs/fileDialog.h" +#include "platform/threads/mutex.h" +#include "core/util/safeDelete.h" +#include "math/mMath.h" +#include "core/strings/unicode.h" +#include "console/consoleTypes.h" +#include "platform/profiler.h" +#include "console/engineAPI.h" +#include +#include "core/strings/stringUnit.h" +#include "core/frameAllocator.h" + +#if defined(TORQUE_SDL) +//----------------------------------------------------------------------------- +// PlatformFileDlgData Implementation +//----------------------------------------------------------------------------- +FileDialogData::FileDialogData() +{ + // Default Path + // + // Try to provide consistent experience by recalling the last file path + // - else + // Default to Working Directory if last path is not set or is invalid + mDefaultPath = StringTable->insert(Con::getVariable("Tools::FileDialogs::LastFilePath")); + if (mDefaultPath == StringTable->lookup("") || !Platform::isDirectory(mDefaultPath)) + mDefaultPath = Platform::getCurrentDirectory(); + + mDefaultFile = StringTable->insert(""); + mFilters = StringTable->insert(""); + mFile = StringTable->insert(""); + mTitle = StringTable->insert(""); + + mStyle = 0; + +} +FileDialogData::~FileDialogData() +{ + +} + +//----------------------------------------------------------------------------- +// FileDialog Implementation +//----------------------------------------------------------------------------- +IMPLEMENT_CONOBJECT(FileDialog); + +ConsoleDocClass(FileDialog, + "@brief Base class responsible for displaying an OS file browser.\n\n" + + "FileDialog is a platform agnostic dialog interface for querying the user for " + "file locations. It is designed to be used through the exposed scripting interface.\n\n" + + "FileDialog is the base class for Native File Dialog controls in Torque. It provides these basic areas of functionality:\n\n" + " - Inherits from SimObject and is exposed to the scripting interface\n" + " - Provides blocking interface to allow instant return to script execution\n" + " - Simple object configuration makes practical use easy and effective\n\n" + + "FileDialog is *NOT* intended to be used directly in script and is only exposed to script to expose generic file dialog attributes.\n\n" + + "This base class is usable in TorqueScript, but is does not specify what functionality is intended (open or save?). " + "Its children, OpenFileDialog and SaveFileDialog, do make use of DialogStyle flags and do make use of specific funcationality. " + "These are the preferred classes to use\n\n" + + "However, the FileDialog base class does contain the key properties and important method for file browing. The most " + "important function is Execute(). This is used by both SaveFileDialog and OpenFileDialog to initiate the browser.\n\n" + + "@tsexample\n" + "// NOTE: This is not he preferred class to use, but this still works\n\n" + "// Create the file dialog\n" + "%baseFileDialog = new FileDialog()\n" + "{\n" + " // Allow browsing of all file types\n" + " filters = \"*.*\";\n\n" + " // No default file\n" + " defaultFile = "";\n\n" + " // Set default path relative to project\n" + " defaultPath = \"./\";\n\n" + " // Set the title\n" + " title = \"Durpa\";\n\n" + " // Allow changing of path you are browsing\n" + " changePath = true;\n" + "};\n\n" + " // Launch the file dialog\n" + " %baseFileDialog.Execute();\n" + " \n" + " // Don't forget to cleanup\n" + " %baseFileDialog.delete();\n\n\n" + "@endtsexample\n\n" + + "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" + + "@see OpenFileDialog for a practical example on opening a file\n" + "@see SaveFileDialog for a practical example of saving a file\n" + + "@ingroup FileSystem\n" + ); + +FileDialog::FileDialog() : mData() +{ + // Default to File Must Exist Open Dialog style + mData.mStyle = FileDialogData::FDS_OPEN | FileDialogData::FDS_MUSTEXIST; + mChangePath = false; +} + +FileDialog::~FileDialog() +{ +} + +void FileDialog::initPersistFields() +{ + addProtectedField("defaultPath", TypeString, Offset(mData.mDefaultPath, FileDialog), &setDefaultPath, &defaultProtectedGetFn, + "The default directory path when the dialog is shown."); + + addProtectedField("defaultFile", TypeString, Offset(mData.mDefaultFile, FileDialog), &setDefaultFile, &defaultProtectedGetFn, + "The default file path when the dialog is shown."); + + addProtectedField("fileName", TypeString, Offset(mData.mFile, FileDialog), &setFile, &defaultProtectedGetFn, + "The default file name when the dialog is shown."); + + addProtectedField("filters", TypeString, Offset(mData.mFilters, FileDialog), &setFilters, &defaultProtectedGetFn, + "The filter string for limiting the types of files visible in the dialog. It makes use of the pipe symbol '|' " + "as a delimiter. For example:\n\n" + "'All Files|*.*'\n\n" + "'Image Files|*.png;*.jpg|Png Files|*.png|Jepg Files|*.jpg'"); + + addField("title", TypeString, Offset(mData.mTitle, FileDialog), + "The title for the dialog."); + + addProtectedField("changePath", TypeBool, Offset(mChangePath, FileDialog), &setChangePath, &getChangePath, + "True/False whether to set the working directory to the directory returned by the dialog."); + + Parent::initPersistFields(); +} + +static const U32 convertUTF16toUTF8DoubleNULL(const UTF16 *unistring, UTF8 *outbuffer, U32 len) +{ + AssertFatal(len >= 1, "Buffer for unicode conversion must be large enough to hold at least the null terminator."); + PROFILE_START(convertUTF16toUTF8DoubleNULL); + U32 walked, nCodeunits, codeunitLen; + UTF32 middleman; + + nCodeunits = 0; + while (!(*unistring == '\0' && *(unistring + 1) == '\0') && nCodeunits + 3 < len) + { + walked = 1; + middleman = oneUTF16toUTF32(unistring, &walked); + codeunitLen = oneUTF32toUTF8(middleman, &outbuffer[nCodeunits]); + unistring += walked; + nCodeunits += codeunitLen; + } + + nCodeunits = getMin(nCodeunits, len - 1); + outbuffer[nCodeunits] = '\0'; + outbuffer[nCodeunits + 1] = '\0'; + + PROFILE_END(); + return nCodeunits; +} + +// +// Execute Method +// +bool FileDialog::Execute() +{ + String suffix; + + U32 filtersCount = StringUnit::getUnitCount(mData.mFilters, "|"); + + for (U32 i = 1; i < filtersCount; ++i) + { + //The first of each pair is the name, which we'll skip because NFD doesn't support named filters atm + const char *filter = StringUnit::getUnit(mData.mFilters, i, "|"); + + if (!dStrcmp(filter, "*.*")) + continue; + + U32 c = 2; + const char* tmpchr = &filter[c]; + String tString = String(tmpchr); + tString.ToLower(tString); + suffix += tString; + suffix += String(","); + suffix += tString.ToUpper(tString); + + ++i; + if (i < filtersCount-2) + suffix += String(";"); + } + String strippedFilters = suffix; + strippedFilters.replace(";",","); + strippedFilters += String(";") + suffix; + + // Get the current working directory, so we can back up to it once Windows has + // done its craziness and messed with it. + StringTableEntry cwd = Platform::getCurrentDirectory(); + if (mData.mDefaultPath == StringTable->lookup("") || !Platform::isDirectory(mData.mDefaultPath)) + mData.mDefaultPath = cwd; + + // Execute Dialog (Blocking Call) + nfdchar_t *outPath = NULL; + nfdpathset_t pathSet; + + nfdresult_t result = NFD_ERROR; + String defaultPath = String(mData.mDefaultPath); +#if defined(TORQUE_OS_WIN) + defaultPath.replace("/", "\\"); +#endif + + if (mData.mStyle & FileDialogData::FDS_OPEN) + result = NFD_OpenDialog(strippedFilters.c_str(), defaultPath.c_str(), &outPath); + else if (mData.mStyle & FileDialogData::FDS_SAVE) + result = NFD_SaveDialog(strippedFilters.c_str(), defaultPath.c_str(), &outPath); + else if (mData.mStyle & FileDialogData::FDS_MULTIPLEFILES) + result = NFD_OpenDialogMultiple(strippedFilters.c_str(), defaultPath.c_str(), &pathSet); + + // Did we select a file? + if (result != NFD_OKAY) + { + Con::errorf("NFD plugin error: %s", NFD_GetError()); + return false; + } + // Store the result on our object + if (mData.mStyle & FileDialogData::FDS_OPEN || mData.mStyle & FileDialogData::FDS_SAVE) + { + // Single file selection, do it the easy way + mData.mFile = StringTable->insert(outPath); + } + else if (mData.mStyle & FileDialogData::FDS_MULTIPLEFILES) + { + //check if we have multiple files actually selected or not + U32 fileCount = NFD_PathSet_GetCount(&pathSet); + if (fileCount > 1) + { + //yep, so parse through them and prep our return + for (U32 i = 0; i < fileCount; ++i) + { + nfdchar_t *path = NFD_PathSet_GetPath(&pathSet, i); + setDataField(StringTable->insert("files"), Con::getIntArg(i), path); + } + + setDataField(StringTable->insert("fileCount"), NULL, Con::getIntArg(fileCount)); + } + else + { + //nope, just one file, so set it as normal + setDataField(StringTable->insert("files"), "0", outPath); + setDataField(StringTable->insert("fileCount"), NULL, "1"); + } + } + + // Return success. + return true; + +} + +DefineEngineMethod(FileDialog, Execute, bool, (), , + "@brief Launches the OS file browser\n\n" + + "After an Execute() call, the chosen file name and path is available in one of two areas. " + "If only a single file selection is permitted, the results will be stored in the @a fileName " + "attribute.\n\n" + + "If multiple file selection is permitted, the results will be stored in the " + "@a files array. The total number of files in the array will be stored in the " + "@a fileCount attribute.\n\n" + + "@tsexample\n" + "// NOTE: This is not he preferred class to use, but this still works\n\n" + "// Create the file dialog\n" + "%baseFileDialog = new FileDialog()\n" + "{\n" + " // Allow browsing of all file types\n" + " filters = \"*.*\";\n\n" + " // No default file\n" + " defaultFile = "";\n\n" + " // Set default path relative to project\n" + " defaultPath = \"./\";\n\n" + " // Set the title\n" + " title = \"Durpa\";\n\n" + " // Allow changing of path you are browsing\n" + " changePath = true;\n" + "};\n\n" + " // Launch the file dialog\n" + " %baseFileDialog.Execute();\n" + " \n" + " // Don't forget to cleanup\n" + " %baseFileDialog.delete();\n\n\n" + + " // A better alternative is to use the \n" + " // derived classes which are specific to file open and save\n\n" + " // Create a dialog dedicated to opening files\n" + " %openFileDlg = new OpenFileDialog()\n" + " {\n" + " // Look for jpg image files\n" + " // First part is the descriptor|second part is the extension\n" + " Filters = \"Jepg Files|*.jpg\";\n" + " // Allow browsing through other folders\n" + " ChangePath = true;\n\n" + " // Only allow opening of one file at a time\n" + " MultipleFiles = false;\n" + " };\n\n" + " // Launch the open file dialog\n" + " %result = %openFileDlg.Execute();\n\n" + " // Obtain the chosen file name and path\n" + " if ( %result )\n" + " {\n" + " %seletedFile = %openFileDlg.file;\n" + " }\n" + " else\n" + " {\n" + " %selectedFile = \"\";\n" + " }\n" + " // Cleanup\n" + " %openFileDlg.delete();\n\n\n" + + " // Create a dialog dedicated to saving a file\n" + " %saveFileDlg = new SaveFileDialog()\n" + " {\n" + " // Only allow for saving of COLLADA files\n" + " Filters = \"COLLADA Files (*.dae)|*.dae|\";\n\n" + " // Default save path to where the WorldEditor last saved\n" + " DefaultPath = $pref::WorldEditor::LastPath;\n\n" + " // No default file specified\n" + " DefaultFile = \"\";\n\n" + " // Do not allow the user to change to a new directory\n" + " ChangePath = false;\n\n" + " // Prompt the user if they are going to overwrite an existing file\n" + " OverwritePrompt = true;\n" + " };\n\n" + " // Launch the save file dialog\n" + " %result = %saveFileDlg.Execute();\n\n" + " // Obtain the file name\n" + " %selectedFile = \"\";\n" + " if ( %result )\n" + " %selectedFile = %saveFileDlg.file;\n\n" + " // Cleanup\n" + " %saveFileDlg.delete();\n" + "@endtsexample\n\n" + + "@return True if the file was selected was successfully found (opened) or declared (saved).") +{ + return object->Execute(); +} + +//----------------------------------------------------------------------------- +// Dialog Filters +//----------------------------------------------------------------------------- +bool FileDialog::setFilters(void *object, const char *index, const char *data) +{ + // Will do validate on write at some point. + if (!data) + return true; + + return true; + +}; + + +//----------------------------------------------------------------------------- +// Default Path Property - String Validated on Write +//----------------------------------------------------------------------------- +bool FileDialog::setDefaultPath(void *object, const char *index, const char *data) +{ + if (!data || !dStrncmp(data, "", 1)) + return true; + + // Copy and Backslash the path (Windows dialogs are VERY picky about this format) + static char szPathValidate[512]; + dStrcpy(szPathValidate, data); + + Platform::makeFullPathName(data, szPathValidate, sizeof(szPathValidate)); + //backslash( szPathValidate ); + + // Remove any trailing \'s + S8 validateLen = dStrlen(szPathValidate); + if (szPathValidate[validateLen - 1] == '\\') + szPathValidate[validateLen - 1] = '\0'; + + // Now check + if (Platform::isDirectory(szPathValidate)) + { + // Finally, assign in proper format. + FileDialog *pDlg = static_cast(object); + pDlg->mData.mDefaultPath = StringTable->insert(szPathValidate); + } +#ifdef TORQUE_DEBUG + else + Con::errorf(ConsoleLogEntry::GUI, "FileDialog - Invalid Default Path Specified!"); +#endif + + return false; + +}; + +//----------------------------------------------------------------------------- +// Default File Property - String Validated on Write +//----------------------------------------------------------------------------- +bool FileDialog::setDefaultFile(void *object, const char *index, const char *data) +{ + if (!data || !dStrncmp(data, "", 1)) + return true; + + // Copy and Backslash the path (Windows dialogs are VERY picky about this format) + static char szPathValidate[512]; + Platform::makeFullPathName(data, szPathValidate, sizeof(szPathValidate)); + //backslash( szPathValidate ); + + // Remove any trailing \'s + S8 validateLen = dStrlen(szPathValidate); + if (szPathValidate[validateLen - 1] == '\\') + szPathValidate[validateLen - 1] = '\0'; + + // Finally, assign in proper format. + FileDialog *pDlg = static_cast(object); + pDlg->mData.mDefaultFile = StringTable->insert(szPathValidate); + + return false; +}; + +//----------------------------------------------------------------------------- +// ChangePath Property - Change working path on successful file selection +//----------------------------------------------------------------------------- +bool FileDialog::setChangePath(void *object, const char *index, const char *data) +{ + bool bMustExist = dAtob(data); + + FileDialog *pDlg = static_cast(object); + + if (bMustExist) + pDlg->mData.mStyle |= FileDialogData::FDS_CHANGEPATH; + else + pDlg->mData.mStyle &= ~FileDialogData::FDS_CHANGEPATH; + + return true; +}; + +const char* FileDialog::getChangePath(void* obj, const char* data) +{ + FileDialog *pDlg = static_cast(obj); + if (pDlg->mData.mStyle & FileDialogData::FDS_CHANGEPATH) + return StringTable->insert("true"); + else + return StringTable->insert("false"); +} + +bool FileDialog::setFile(void *object, const char *index, const char *data) +{ + return false; +}; + +//----------------------------------------------------------------------------- +// OpenFileDialog Implementation +//----------------------------------------------------------------------------- + +ConsoleDocClass(OpenFileDialog, + "@brief Derived from FileDialog, this class is responsible for opening a file browser with the intention of opening a file.\n\n" + + "The core usage of this dialog is to locate a file in the OS and return the path and name. This does not handle " + "the actual file parsing or data manipulation. That functionality is left up to the FileObject class.\n\n" + + "@tsexample\n" + " // Create a dialog dedicated to opening files\n" + " %openFileDlg = new OpenFileDialog()\n" + " {\n" + " // Look for jpg image files\n" + " // First part is the descriptor|second part is the extension\n" + " Filters = \"Jepg Files|*.jpg\";\n" + " // Allow browsing through other folders\n" + " ChangePath = true;\n\n" + " // Only allow opening of one file at a time\n" + " MultipleFiles = false;\n" + " };\n\n" + " // Launch the open file dialog\n" + " %result = %openFileDlg.Execute();\n\n" + " // Obtain the chosen file name and path\n" + " if ( %result )\n" + " {\n" + " %seletedFile = %openFileDlg.file;\n" + " }\n" + " else\n" + " {\n" + " %selectedFile = \"\";\n" + " }\n\n" + " // Cleanup\n" + " %openFileDlg.delete();\n\n\n" + "@endtsexample\n\n" + + "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" + + "@see FileDialog\n" + "@see SaveFileDialog\n" + "@see FileObject\n" + + "@ingroup FileSystem\n" + ); +OpenFileDialog::OpenFileDialog() +{ + // Default File Must Exist + mData.mStyle = FileDialogData::FDS_OPEN | FileDialogData::FDS_MUSTEXIST; +} + +OpenFileDialog::~OpenFileDialog() +{ + mMustExist = true; + mMultipleFiles = false; +} + +IMPLEMENT_CONOBJECT(OpenFileDialog); + +//----------------------------------------------------------------------------- +// Console Properties +//----------------------------------------------------------------------------- +void OpenFileDialog::initPersistFields() +{ + addProtectedField("MustExist", TypeBool, Offset(mMustExist, OpenFileDialog), &setMustExist, &getMustExist, "True/False whether the file returned must exist or not"); + addProtectedField("MultipleFiles", TypeBool, Offset(mMultipleFiles, OpenFileDialog), &setMultipleFiles, &getMultipleFiles, "True/False whether multiple files may be selected and returned or not"); + + Parent::initPersistFields(); +} + +//----------------------------------------------------------------------------- +// File Must Exist - Boolean +//----------------------------------------------------------------------------- +bool OpenFileDialog::setMustExist(void *object, const char *index, const char *data) +{ + bool bMustExist = dAtob(data); + + OpenFileDialog *pDlg = static_cast(object); + + if (bMustExist) + pDlg->mData.mStyle |= FileDialogData::FDS_MUSTEXIST; + else + pDlg->mData.mStyle &= ~FileDialogData::FDS_MUSTEXIST; + + return true; +}; + +const char* OpenFileDialog::getMustExist(void* obj, const char* data) +{ + OpenFileDialog *pDlg = static_cast(obj); + if (pDlg->mData.mStyle & FileDialogData::FDS_MUSTEXIST) + return StringTable->insert("true"); + else + return StringTable->insert("false"); +} + +//----------------------------------------------------------------------------- +// Can Select Multiple Files - Boolean +//----------------------------------------------------------------------------- +bool OpenFileDialog::setMultipleFiles(void *object, const char *index, const char *data) +{ + bool bMustExist = dAtob(data); + + OpenFileDialog *pDlg = static_cast(object); + + if (bMustExist) + pDlg->mData.mStyle |= FileDialogData::FDS_MULTIPLEFILES; + else + pDlg->mData.mStyle &= ~FileDialogData::FDS_MULTIPLEFILES; + + return true; +}; + +const char* OpenFileDialog::getMultipleFiles(void* obj, const char* data) +{ + OpenFileDialog *pDlg = static_cast(obj); + if (pDlg->mData.mStyle & FileDialogData::FDS_MULTIPLEFILES) + return StringTable->insert("true"); + else + return StringTable->insert("false"); +} + +//----------------------------------------------------------------------------- +// SaveFileDialog Implementation +//----------------------------------------------------------------------------- +ConsoleDocClass(SaveFileDialog, + "@brief Derived from FileDialog, this class is responsible for opening a file browser with the intention of saving a file.\n\n" + + "The core usage of this dialog is to locate a file in the OS and return the path and name. This does not handle " + "the actual file writing or data manipulation. That functionality is left up to the FileObject class.\n\n" + + "@tsexample\n" + " // Create a dialog dedicated to opening file\n" + " %saveFileDlg = new SaveFileDialog()\n" + " {\n" + " // Only allow for saving of COLLADA files\n" + " Filters = \"COLLADA Files (*.dae)|*.dae|\";\n\n" + " // Default save path to where the WorldEditor last saved\n" + " DefaultPath = $pref::WorldEditor::LastPath;\n\n" + " // No default file specified\n" + " DefaultFile = \"\";\n\n" + " // Do not allow the user to change to a new directory\n" + " ChangePath = false;\n\n" + " // Prompt the user if they are going to overwrite an existing file\n" + " OverwritePrompt = true;\n" + " };\n\n" + " // Launch the save file dialog\n" + " %saveFileDlg.Execute();\n\n" + " if ( %result )\n" + " {\n" + " %seletedFile = %openFileDlg.file;\n" + " }\n" + " else\n" + " {\n" + " %selectedFile = \"\";\n" + " }\n\n" + " // Cleanup\n" + " %saveFileDlg.delete();\n" + "@endtsexample\n\n" + + "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" + + "@see FileDialog\n" + "@see OpenFileDialog\n" + "@see FileObject\n" + + "@ingroup FileSystem\n" + ); +SaveFileDialog::SaveFileDialog() +{ + // Default File Must Exist + mData.mStyle = FileDialogData::FDS_SAVE | FileDialogData::FDS_OVERWRITEPROMPT; + mOverwritePrompt = true; +} + +SaveFileDialog::~SaveFileDialog() +{ +} + +IMPLEMENT_CONOBJECT(SaveFileDialog); + +//----------------------------------------------------------------------------- +// Console Properties +//----------------------------------------------------------------------------- +void SaveFileDialog::initPersistFields() +{ + addProtectedField("OverwritePrompt", TypeBool, Offset(mOverwritePrompt, SaveFileDialog), &setOverwritePrompt, &getOverwritePrompt, "True/False whether the dialog should prompt before accepting an existing file name"); + + Parent::initPersistFields(); +} + +//----------------------------------------------------------------------------- +// Prompt on Overwrite - Boolean +//----------------------------------------------------------------------------- +bool SaveFileDialog::setOverwritePrompt(void *object, const char *index, const char *data) +{ + bool bMustExist = dAtob(data); + + SaveFileDialog *pDlg = static_cast(object); + + if (bMustExist) + pDlg->mData.mStyle |= FileDialogData::FDS_OVERWRITEPROMPT; + else + pDlg->mData.mStyle &= ~FileDialogData::FDS_OVERWRITEPROMPT; + + return true; +}; + +const char* SaveFileDialog::getOverwritePrompt(void* obj, const char* data) +{ + SaveFileDialog *pDlg = static_cast(obj); + if (pDlg->mData.mStyle & FileDialogData::FDS_OVERWRITEPROMPT) + return StringTable->insert("true"); + else + return StringTable->insert("false"); +} + +//----------------------------------------------------------------------------- +// OpenFolderDialog Implementation +//----------------------------------------------------------------------------- + +OpenFolderDialog::OpenFolderDialog() +{ + mData.mStyle = FileDialogData::FDS_OPEN | FileDialogData::FDS_OVERWRITEPROMPT | FileDialogData::FDS_BROWSEFOLDER; + + mMustExistInDir = ""; +} + +IMPLEMENT_CONOBJECT(OpenFolderDialog); + +ConsoleDocClass(OpenFolderDialog, + "@brief OS level dialog used for browsing folder structures.\n\n" + + "This is essentially an OpenFileDialog, but only used for returning directory paths, not files.\n\n" + + "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" + + "@see OpenFileDialog for more details on functionality.\n\n" + + "@ingroup FileSystem\n" + ); + +void OpenFolderDialog::initPersistFields() +{ + addField("fileMustExist", TypeFilename, Offset(mMustExistInDir, OpenFolderDialog), "File that must be in selected folder for it to be valid"); + + Parent::initPersistFields(); +} +#endif diff --git a/Engine/source/platformX86UNIX/nativeDialogs/fileDialog.cpp b/Engine/source/platformX86UNIX/nativeDialogs/fileDialog.cpp deleted file mode 100644 index 40b40d1dba..0000000000 --- a/Engine/source/platformX86UNIX/nativeDialogs/fileDialog.cpp +++ /dev/null @@ -1,354 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#include "platform/nativeDialogs/fileDialog.h" - -#ifdef TORQUE_TOOLS -//----------------------------------------------------------------------------- -// PlatformFileDlgData Implementation -//----------------------------------------------------------------------------- -FileDialogData::FileDialogData() -{ - AssertFatal(0, "Not Implemented"); -} - -FileDialogData::~FileDialogData() -{ -} - -//----------------------------------------------------------------------------- -// FileDialog Implementation -//----------------------------------------------------------------------------- -IMPLEMENT_CONOBJECT(FileDialog); - -ConsoleDocClass( FileDialog, - "@brief Base class responsible for displaying an OS file browser.\n\n" - - "FileDialog is a platform agnostic dialog interface for querying the user for " - "file locations. It is designed to be used through the exposed scripting interface.\n\n" - - "FileDialog is the base class for Native File Dialog controls in Torque. It provides these basic areas of functionality:\n\n" - " - Inherits from SimObject and is exposed to the scripting interface\n" - " - Provides blocking interface to allow instant return to script execution\n" - " - Simple object configuration makes practical use easy and effective\n\n" - - "FileDialog is *NOT* intended to be used directly in script and is only exposed to script to expose generic file dialog attributes.\n\n" - - "This base class is usable in TorqueScript, but is does not specify what functionality is intended (open or save?). " - "Its children, OpenFileDialog and SaveFileDialog, do make use of DialogStyle flags and do make use of specific funcationality. " - "These are the preferred classes to use\n\n" - - "However, the FileDialog base class does contain the key properties and important method for file browing. The most " - "important function is Execute(). This is used by both SaveFileDialog and OpenFileDialog to initiate the browser.\n\n" - - "@tsexample\n" - "// NOTE: This is not he preferred class to use, but this still works\n\n" - "// Create the file dialog\n" - "%baseFileDialog = new FileDialog()\n" - "{\n" - " // Allow browsing of all file types\n" - " filters = \"*.*\";\n\n" - " // No default file\n" - " defaultFile = "";\n\n" - " // Set default path relative to project\n" - " defaultPath = \"./\";\n\n" - " // Set the title\n" - " title = \"Durpa\";\n\n" - " // Allow changing of path you are browsing\n" - " changePath = true;\n" - "};\n\n" - " // Launch the file dialog\n" - " %baseFileDialog.Execute();\n" - " \n" - " // Don't forget to cleanup\n" - " %baseFileDialog.delete();\n\n\n" - "@endtsexample\n\n" - - "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" - - "@see OpenFileDialog for a practical example on opening a file\n" - "@see SaveFileDialog for a practical example of saving a file\n" - - "@ingroup FileSystem\n" -); - -FileDialog::FileDialog() : mData() -{ - AssertFatal(0, "Not Implemented"); -} - -FileDialog::~FileDialog() -{ -} - -void FileDialog::initPersistFields() -{ - Parent::initPersistFields(); -} - -// -// Execute Method -// -bool FileDialog::Execute() -{ - return false; -} - -//----------------------------------------------------------------------------- -// Dialog Filters -//----------------------------------------------------------------------------- -bool FileDialog::setFilters( void *object, const char *index, const char *data ) -{ - return true; -}; - - -//----------------------------------------------------------------------------- -// Default Path Property - String Validated on Write -//----------------------------------------------------------------------------- -bool FileDialog::setDefaultPath( void *object, const char *index, const char *data ) -{ - return false; -}; - -//----------------------------------------------------------------------------- -// Default File Property - String Validated on Write -//----------------------------------------------------------------------------- -bool FileDialog::setDefaultFile( void *object, const char *index, const char *data ) -{ - return false; -}; - -//----------------------------------------------------------------------------- -// ChangePath Property - Change working path on successful file selection -//----------------------------------------------------------------------------- -bool FileDialog::setChangePath( void *object, const char *index, const char *data ) -{ - return true; -}; - -const char* FileDialog::getChangePath(void* obj, const char* data) -{ - return 0; -} - -bool FileDialog::setFile( void *object, const char *index, const char *data ) -{ - return false; -}; - -//----------------------------------------------------------------------------- -// OpenFileDialog Implementation -//----------------------------------------------------------------------------- - -ConsoleDocClass( OpenFileDialog, - "@brief Derived from FileDialog, this class is responsible for opening a file browser with the intention of opening a file.\n\n" - - "The core usage of this dialog is to locate a file in the OS and return the path and name. This does not handle " - "the actual file parsing or data manipulation. That functionality is left up to the FileObject class.\n\n" - - "@tsexample\n" - " // Create a dialog dedicated to opening files\n" - " %openFileDlg = new OpenFileDialog()\n" - " {\n" - " // Look for jpg image files\n" - " // First part is the descriptor|second part is the extension\n" - " Filters = \"Jepg Files|*.jpg\";\n" - " // Allow browsing through other folders\n" - " ChangePath = true;\n\n" - " // Only allow opening of one file at a time\n" - " MultipleFiles = false;\n" - " };\n\n" - " // Launch the open file dialog\n" - " %result = %openFileDlg.Execute();\n\n" - " // Obtain the chosen file name and path\n" - " if ( %result )\n" - " {\n" - " %seletedFile = %openFileDlg.file;\n" - " }\n" - " else\n" - " {\n" - " %selectedFile = \"\";\n" - " }\n\n" - " // Cleanup\n" - " %openFileDlg.delete();\n\n\n" - "@endtsexample\n\n" - - "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" - - "@see FileDialog\n" - "@see SaveFileDialog\n" - "@see FileObject\n" - - "@ingroup FileSystem\n" -); -OpenFileDialog::OpenFileDialog() -{ - AssertFatal(0, "Not Implemented"); -} - -OpenFileDialog::~OpenFileDialog() -{ -} - -IMPLEMENT_CONOBJECT(OpenFileDialog); - -//----------------------------------------------------------------------------- -// Console Properties -//----------------------------------------------------------------------------- -void OpenFileDialog::initPersistFields() -{ -} - -//----------------------------------------------------------------------------- -// File Must Exist - Boolean -//----------------------------------------------------------------------------- -bool OpenFileDialog::setMustExist( void *object, const char *index, const char *data ) -{ - return true; -}; - -const char* OpenFileDialog::getMustExist(void* obj, const char* data) -{ - return 0; -} - -//----------------------------------------------------------------------------- -// Can Select Multiple Files - Boolean -//----------------------------------------------------------------------------- -bool OpenFileDialog::setMultipleFiles( void *object, const char *index, const char *data ) -{ - return true; -}; - -const char* OpenFileDialog::getMultipleFiles(void* obj, const char* data) -{ - return 0; -} - -//----------------------------------------------------------------------------- -// SaveFileDialog Implementation -//----------------------------------------------------------------------------- -ConsoleDocClass( SaveFileDialog, - "@brief Derived from FileDialog, this class is responsible for opening a file browser with the intention of saving a file.\n\n" - - "The core usage of this dialog is to locate a file in the OS and return the path and name. This does not handle " - "the actual file writing or data manipulation. That functionality is left up to the FileObject class.\n\n" - - "@tsexample\n" - " // Create a dialog dedicated to opening file\n" - " %saveFileDlg = new SaveFileDialog()\n" - " {\n" - " // Only allow for saving of COLLADA files\n" - " Filters = \"COLLADA Files (*.dae)|*.dae|\";\n\n" - " // Default save path to where the WorldEditor last saved\n" - " DefaultPath = $pref::WorldEditor::LastPath;\n\n" - " // No default file specified\n" - " DefaultFile = \"\";\n\n" - " // Do not allow the user to change to a new directory\n" - " ChangePath = false;\n\n" - " // Prompt the user if they are going to overwrite an existing file\n" - " OverwritePrompt = true;\n" - " };\n\n" - " // Launch the save file dialog\n" - " %saveFileDlg.Execute();\n\n" - " if ( %result )\n" - " {\n" - " %seletedFile = %openFileDlg.file;\n" - " }\n" - " else\n" - " {\n" - " %selectedFile = \"\";\n" - " }\n\n" - " // Cleanup\n" - " %saveFileDlg.delete();\n" - "@endtsexample\n\n" - - "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" - - "@see FileDialog\n" - "@see OpenFileDialog\n" - "@see FileObject\n" - - "@ingroup FileSystem\n" -); -SaveFileDialog::SaveFileDialog() -{ - AssertFatal(0, "Not Implemented"); -} - -SaveFileDialog::~SaveFileDialog() -{ -} - -IMPLEMENT_CONOBJECT(SaveFileDialog); - -//----------------------------------------------------------------------------- -// Console Properties -//----------------------------------------------------------------------------- -void SaveFileDialog::initPersistFields() -{ - Parent::initPersistFields(); -} - -//----------------------------------------------------------------------------- -// Prompt on Overwrite - Boolean -//----------------------------------------------------------------------------- -bool SaveFileDialog::setOverwritePrompt( void *object, const char *index, const char *data ) -{ - return true; -}; - -const char* SaveFileDialog::getOverwritePrompt(void* obj, const char* data) -{ - return 0; -} - -//----------------------------------------------------------------------------- -// OpenFolderDialog Implementation -//----------------------------------------------------------------------------- - -OpenFolderDialog::OpenFolderDialog() -{ - AssertFatal(0, "Not Implemented"); -} - -IMPLEMENT_CONOBJECT(OpenFolderDialog); - -ConsoleDocClass( OpenFolderDialog, - "@brief OS level dialog used for browsing folder structures.\n\n" - - "This is essentially an OpenFileDialog, but only used for returning directory paths, not files.\n\n" - - "@note FileDialog and its related classes are only availble in a Tools build of Torque.\n\n" - - "@see OpenFileDialog for more details on functionality.\n\n" - - "@ingroup FileSystem\n" -); - -void OpenFolderDialog::initPersistFields() -{ - Parent::initPersistFields(); -} - -#endif \ No newline at end of file diff --git a/Tools/CMake/basics.cmake b/Tools/CMake/basics.cmake index 5592dd3fe3..f7c0d9442a 100644 --- a/Tools/CMake/basics.cmake +++ b/Tools/CMake/basics.cmake @@ -71,6 +71,9 @@ macro(addPath dir) ${dir}/*.h #${dir}/*.asm ) + foreach(entry ${BLACKLIST}) + list(REMOVE_ITEM tmp_files ${dir}/${entry}) + endforeach() LIST(APPEND ${PROJECT_NAME}_files "${tmp_files}") LIST(APPEND ${PROJECT_NAME}_paths "${dir}") #message(STATUS "addPath ${PROJECT_NAME} : ${tmp_files}") diff --git a/Tools/CMake/libraries/nativeFileDialogs.cmake b/Tools/CMake/libraries/nativeFileDialogs.cmake new file mode 100644 index 0000000000..69c29113e9 --- /dev/null +++ b/Tools/CMake/libraries/nativeFileDialogs.cmake @@ -0,0 +1,29 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2014 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +project(nativeFileDialogs) + +addPath("${libDir}/nativeFileDialogs" REC) + +addInclude(${libDir}/nativeFileDialogs/include) + +finishLibrary() diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index fd95bbf86b..7f6538dc51 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -195,7 +195,13 @@ addPath("${srcDir}/windowManager/test") addPath("${srcDir}/math") addPath("${srcDir}/math/util") addPath("${srcDir}/math/test") + +if(NOT TORQUE_SDL) + set(BLACKLIST "fileDialog.cpp" ) +endif() addPath("${srcDir}/platform") +set(BLACKLIST "" ) + addPath("${srcDir}/cinterface") addPath("${srcDir}/platform/nativeDialogs") if( NOT TORQUE_DEDICATED ) @@ -365,6 +371,28 @@ if(TORQUE_SDL) else() set(ENV{LDFLAGS} "${CXX_FLAG32} ${TORQUE_ADDITIONAL_LINKER_FLAGS}") endif() + + find_package(PkgConfig REQUIRED) + pkg_check_modules(GTK3 REQUIRED gtk+-3.0) + + # Setup CMake to use GTK+, tell the compiler where to look for headers + # and to the linker where to look for libraries + include_directories(${GTK3_INCLUDE_DIRS}) + link_directories(${GTK3_LIBRARY_DIRS}) + + # Add other flags to the compiler + add_definitions(${GTK3_CFLAGS_OTHER}) + + set(BLACKLIST "nfd_win.cpp" ) + addLib(nativeFileDialogs) + + set(BLACKLIST "" ) + target_link_libraries(nativeFileDialogs ${GTK3_LIBRARIES}) + else() + set(BLACKLIST "nfd_gtk.c" ) + addLib(nativeFileDialogs) + set(BLACKLIST "" ) + addLib(comctl32) endif() #override and hide SDL2 cache variables @@ -388,7 +416,11 @@ endforeach() ############################################################################### if(WIN32) addPath("${srcDir}/platformWin32") + if(TORQUE_SDL) + set(BLACKLIST "fileDialog.cpp" ) + endif() addPath("${srcDir}/platformWin32/nativeDialogs") + set(BLACKLIST "" ) addPath("${srcDir}/platformWin32/menus") addPath("${srcDir}/platformWin32/threads") addPath("${srcDir}/platformWin32/videoInfo") @@ -634,6 +666,9 @@ addInclude("${libDir}/libogg/include") addInclude("${libDir}/opcode") addInclude("${libDir}/collada/include") addInclude("${libDir}/collada/include/1.4") +if(TORQUE_SDL) + addInclude("${libDir}/nativeFileDialogs/include") +endif() if(TORQUE_OPENGL) addInclude("${libDir}/glew/include") endif() From 86dd8a8cf71a5d66050119672ce301154e5905a0 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 30 Apr 2016 23:32:10 -0500 Subject: [PATCH 192/324] Adds a onPostAdd callback to simObject so we can do handling AFTER the object and it's children have been added successfully. --- Engine/source/console/compiledEval.cpp | 4 ++++ Engine/source/console/simObject.h | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index bd4a7a5d98..a989826b43 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -994,6 +994,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi // This error is usually caused by failing to call Parent::initPersistFields in the class' initPersistFields(). Con::warnf(ConsoleLogEntry::General, "%s: Register object failed for object %s of class %s.", getFileLine(ip), currentNewObject->getName(), currentNewObject->getClassName()); delete currentNewObject; + currentNewObject = NULL; ip = failJump; // Prevent stack value corruption CSTK.popFrame(); @@ -1094,6 +1095,9 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi case OP_FINISH_OBJECT: { + if (currentNewObject) + currentNewObject->onPostAdd(); + //Assert( objectCreationStackIndex >= 0 ); // Restore the object info from the stack [7/9/2007 Black] currentNewObject = objectCreationStack[ --objectCreationStackIndex ].newObject; diff --git a/Engine/source/console/simObject.h b/Engine/source/console/simObject.h index eb6f3f0e0e..8a38e86753 100644 --- a/Engine/source/console/simObject.h +++ b/Engine/source/console/simObject.h @@ -606,6 +606,10 @@ class SimObject: public ConsoleObject, public TamlCallbacks /// Called when the object's name is changed. virtual void onNameChange(const char *name); + /// Called when the adding of the object to the sim is complete, all sub-objects have been processed as well + // This is a special-case function that only really gets used with Entities/BehaviorObjects. + virtual void onPostAdd() {} + /// /// Specifically, these are called by setDataField /// when a static or dynamic field is modified, see From de0fe06bc89e045d02ab5ec06f5520d5b854bdbb Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 30 Apr 2016 23:34:54 -0500 Subject: [PATCH 193/324] Makes netObjects inherit off simGroup as opposed to simObject so that just about any object can function as a parent with children. --- Engine/source/sim/netObject.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/sim/netObject.h b/Engine/source/sim/netObject.h index c6a9ca99ee..ced8a2cf38 100644 --- a/Engine/source/sim/netObject.h +++ b/Engine/source/sim/netObject.h @@ -217,7 +217,7 @@ struct GhostInfo; /// the documentation on AbstractClassRep for more details. /// /// @nosubgrouping -class NetObject: public SimObject +class NetObject : public SimGroup { // The Ghost Manager needs read/write access friend class NetConnection; @@ -228,7 +228,7 @@ class NetObject: public SimObject friend class GhostAlwaysObjectEvent; private: - typedef SimObject Parent; + typedef SimGroup Parent; /// Mask indicating which states are dirty and need to be retransmitted on this /// object. From b3bc199975ae4c0eb59a8677071702ca8a25186f Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 30 Apr 2016 23:38:35 -0500 Subject: [PATCH 194/324] Adds a TypeSimObjectPtr type for easy reference to other objects as a field. --- Engine/source/console/consoleTypes.cpp | 25 +++++++++++++++++++++++++ Engine/source/console/consoleTypes.h | 2 ++ 2 files changed, 27 insertions(+) diff --git a/Engine/source/console/consoleTypes.cpp b/Engine/source/console/consoleTypes.cpp index 6c993c4466..09765bf34e 100644 --- a/Engine/source/console/consoleTypes.cpp +++ b/Engine/source/console/consoleTypes.cpp @@ -710,6 +710,31 @@ ConsoleSetType( TypeColorI ) Con::printf("Color must be set as { r, g, b [,a] }, { r g b [b] } or { stockColorName }"); } +//----------------------------------------------------------------------------- +// TypeSimObjectPtr +//----------------------------------------------------------------------------- +ConsoleType(SimObject, TypeSimObjectPtr, SimObject*, "") + +ConsoleSetType(TypeSimObjectPtr) +{ + if (argc == 1) + { + SimObject **obj = (SimObject **)dptr; + *obj = Sim::findObject(argv[0]); + } + else + Con::printf("(TypeSimObjectPtr) Cannot set multiple args to a single S32."); +} + +ConsoleGetType(TypeSimObjectPtr) +{ + SimObject **obj = (SimObject**)dptr; + static const U32 bufSize = 128; + char* returnBuffer = Con::getReturnBuffer(bufSize); + dSprintf(returnBuffer, bufSize, "%s", *obj ? (*obj)->getName() ? (*obj)->getName() : (*obj)->getIdString() : ""); + return returnBuffer; +} + //----------------------------------------------------------------------------- // TypeSimObjectName //----------------------------------------------------------------------------- diff --git a/Engine/source/console/consoleTypes.h b/Engine/source/console/consoleTypes.h index c026b8e1ac..ce5e7134ab 100644 --- a/Engine/source/console/consoleTypes.h +++ b/Engine/source/console/consoleTypes.h @@ -123,6 +123,8 @@ DefineConsoleType( TypeColorF, ColorF ) DefineConsoleType( TypeSimObjectName, SimObject* ) DefineConsoleType( TypeShader, GFXShader * ) +DefineConsoleType(TypeSimObjectPtr, SimObject*) + /// A persistent reference to an object. This reference indirectly goes /// through the referenced object's persistent ID. DefineConsoleType( TypeSimPersistId, SimPersistID* ) From f1c8286c2f58ab10619c13050a4f2d81a80ae3dd Mon Sep 17 00:00:00 2001 From: rextimmy Date: Wed, 4 May 2016 10:05:34 +1000 Subject: [PATCH 195/324] Fix for Epoxy to work with SDL and VS 2015 --- Tools/CMake/libraries/epoxy.cmake | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Tools/CMake/libraries/epoxy.cmake b/Tools/CMake/libraries/epoxy.cmake index 8422d86905..3181a2a31e 100644 --- a/Tools/CMake/libraries/epoxy.cmake +++ b/Tools/CMake/libraries/epoxy.cmake @@ -30,10 +30,14 @@ if (WIN32) addDef(BUILD_WGL) else() addPath("${libDir}/epoxy/src/glx") - addDef(BUILD_GLX) + addDef(BUILD_GLX) endif() addInclude("${libDir}/epoxy/include") addInclude("${libDir}/epoxy/src") finishLibrary() +# VS 2015 has a problem with sdl and epoxy together and requires optimizations to be disabled +if (MSVC14) + target_compile_options(epoxy PRIVATE "/Od") +endif() From 8056a4bfa9f6a0f3cbb164589cbfbaa69a12f752 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Thu, 5 May 2016 22:25:34 +1000 Subject: [PATCH 196/324] GL fix for Epoxy and creating a 3.2 core context with win32 api. --- Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp b/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp index 045b2aa6ff..47fc979693 100644 --- a/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp +++ b/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp @@ -272,6 +272,11 @@ void GFXGLDevice::init( const GFXVideoMode &mode, PlatformWindow *window ) int debugFlag = 0; #endif + // Create a temp rendering context, needed a current context to use wglCreateContextAttribsARB + HGLRC tempGLRC = wglCreateContext(hdcGL); + if (!wglMakeCurrent(hdcGL, tempGLRC)) + AssertFatal(false, "Couldn't make temp GL context."); + if( gglHasWExtension(hdcGL, ARB_create_context) ) { int const create_attribs[] = { @@ -292,6 +297,10 @@ void GFXGLDevice::init( const GFXVideoMode &mode, PlatformWindow *window ) else mContext = wglCreateContext( hdcGL ); + // Delete temp rendering context + wglMakeCurrent(NULL, NULL); + wglDeleteContext(tempGLRC); + if( !wglMakeCurrent( hdcGL, (HGLRC)mContext ) ) AssertFatal( false , "GFXGLDevice::init - cannot make our context current. Or maybe we can't create it." ); From a63a636d03978b02b91b120f69653437f949465c Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 5 May 2016 22:59:17 -0500 Subject: [PATCH 197/324] Fixes the blacklist filter in the event we aren't using SDL to avoid including an unwanted file dialog codefile. --- Tools/CMake/torque3d.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index f2e929cfa5..b9972e467e 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -196,14 +196,15 @@ addPath("${srcDir}/math") addPath("${srcDir}/math/util") addPath("${srcDir}/math/test") +addPath("${srcDir}/platform") if(NOT TORQUE_SDL) set(BLACKLIST "fileDialog.cpp" ) endif() -addPath("${srcDir}/platform") +addPath("${srcDir}/platform/nativeDialogs") set(BLACKLIST "" ) addPath("${srcDir}/cinterface") -addPath("${srcDir}/platform/nativeDialogs") + if( NOT TORQUE_DEDICATED ) addPath("${srcDir}/platform/menus") endif() From bc9033da2e51cbeb7722157d6c4da03cd29f002e Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 6 May 2016 16:45:18 -0500 Subject: [PATCH 198/324] Rolls back OGL Projection correction. Epoxy looks to handle the projection depth range so it behaves more like D3D, so this change was doubling up and causing problems. --- Engine/source/math/mathUtils.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Engine/source/math/mathUtils.cpp b/Engine/source/math/mathUtils.cpp index ea57d93c3b..dba228fde0 100644 --- a/Engine/source/math/mathUtils.cpp +++ b/Engine/source/math/mathUtils.cpp @@ -30,7 +30,6 @@ #include "platform/profiler.h" #include "core/tAlgorithm.h" -#include "gfx/gfxDevice.h" namespace MathUtils { @@ -1450,8 +1449,6 @@ void makeProjection( MatrixF *outMatrix, F32 farPlane, bool gfxRotate ) { - bool isGL = GFX->getAdapterType() == OpenGL; - Point4F row; row.x = 2.0*nearPlane / (right-left); row.y = 0.0; @@ -1467,13 +1464,13 @@ void makeProjection( MatrixF *outMatrix, row.x = (left+right) / (right-left); row.y = (top+bottom) / (top-bottom); - row.z = isGL ? -(farPlane + nearPlane) / (farPlane - nearPlane) : farPlane / (nearPlane - farPlane); + row.z = farPlane / (nearPlane - farPlane); row.w = -1.0; outMatrix->setRow( 2, row ); row.x = 0.0; row.y = 0.0; - row.z = isGL ? 2 * nearPlane * farPlane / (nearPlane - farPlane) : nearPlane * farPlane / (nearPlane - farPlane); + row.z = nearPlane * farPlane / (nearPlane - farPlane); row.w = 0.0; outMatrix->setRow( 3, row ); @@ -1494,8 +1491,6 @@ void makeOrthoProjection( MatrixF *outMatrix, F32 farPlane, bool gfxRotate ) { - bool isGL = GFX->getAdapterType() == OpenGL; - Point4F row; row.x = 2.0f / (right - left); row.y = 0.0f; @@ -1513,15 +1508,15 @@ void makeOrthoProjection( MatrixF *outMatrix, row.y = 0.0f; row.w = 0.0f; - // This needs to be modified to work with OpenGL (d3d has 0..1 - // projection for z, vs -1..1 in OpenGL) - row.z = isGL ? 2.0f / (nearPlane - farPlane) : 1.0f / (nearPlane - farPlane); + //Unlike D3D, which has a 0-1 range, OpenGL uses a -1-1 range. + //However, epoxy internally handles the swap, so the math here is the same for both APIs + row.z = 1.0f / (nearPlane - farPlane); outMatrix->setRow( 2, row ); row.x = (left + right) / (left - right); row.y = (top + bottom) / (bottom - top); - row.z = isGL ? (nearPlane + farPlane) / (nearPlane - farPlane) : nearPlane / (nearPlane - farPlane); + row.z = nearPlane / (nearPlane - farPlane); row.w = 1.0f; outMatrix->setRow( 3, row ); From 5a27313e146beaea9ec03b82855f7736d1350d0b Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 6 May 2016 19:35:40 -0500 Subject: [PATCH 199/324] removes FrameAllocatorMarker usage from GL side _fastTextureLoad Repeatedly caused issues with 4096^2 atlases --- Engine/source/gfx/gl/gfxGLTextureManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLTextureManager.cpp b/Engine/source/gfx/gl/gfxGLTextureManager.cpp index 70a5e43038..478465bf4d 100644 --- a/Engine/source/gfx/gl/gfxGLTextureManager.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureManager.cpp @@ -234,10 +234,10 @@ static void _fastTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) if(pDL->getFormat() == GFXFormatR8G8B8A8 || pDL->getFormat() == GFXFormatR8G8B8X8) { - FrameAllocatorMarker mem; - U8* pboMemory = (U8*)mem.alloc(bufSize); + U8* pboMemory = (U8*)dMalloc(bufSize); GFX->getDeviceSwizzle32()->ToBuffer(pboMemory, pDL->getBits(0), bufSize); glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB, 0, bufSize, pboMemory ); + dFree(pboMemory); } else { From a216b4515ba83ef259163cb4f2b90d467dd6a329 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 6 May 2016 21:24:52 -0400 Subject: [PATCH 200/324] remove old legacy extensions that aren't being used. --- Engine/source/gfx/gl/gfxGLCardProfiler.cpp | 38 +------------------- Engine/source/gfx/gl/gfxGLDevice.cpp | 2 +- Engine/source/gfx/gl/gfxGLTextureManager.cpp | 3 +- Engine/source/gfx/gl/gfxGLTextureObject.cpp | 4 +-- 4 files changed, 5 insertions(+), 42 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp index 46119253bb..bc40d30a99 100644 --- a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp +++ b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp @@ -65,45 +65,9 @@ void GFXGLCardProfiler::setupCardCapabilities() setCapability("maxTextureHeight", maxTexSize); setCapability("maxTextureSize", maxTexSize); - // If extensions haven't been inited, we're in trouble here. - bool suppVBO = (gglHasExtension(ARB_vertex_buffer_object) || glVersion >= 1.499f); - setCapability("GL::suppVertexBufferObject", suppVBO); - - // check if render to texture supported is available - bool suppRTT = gglHasExtension(EXT_framebuffer_object); - setCapability("GL::suppRenderTexture", suppRTT); - - bool suppBlit = gglHasExtension(EXT_framebuffer_blit); - setCapability("GL::suppRTBlit", suppBlit); - - bool suppFloatTex = gglHasExtension(ARB_texture_float); - setCapability("GL::suppFloatTexture", suppFloatTex); - // Check for anisotropic filtering support. bool suppAnisotropic = gglHasExtension( EXT_texture_filter_anisotropic ); - setCapability( "GL::suppAnisotropic", suppAnisotropic ); - - // check to see if we have the fragment shader extension or the gl version is high enough for glsl to be core - // also check to see if the language version is high enough - F32 glslVersion = dAtof(reinterpret_cast(glGetString( GL_SHADING_LANGUAGE_VERSION))); - bool suppSPU = (gglHasExtension(ARB_fragment_shader) || glVersion >= 1.999f) && glslVersion >= 1.0999; - setCapability("GL::suppFragmentShader", suppSPU); - - bool suppAppleFence = gglHasExtension(APPLE_fence); - setCapability("GL::APPLE::suppFence", suppAppleFence); - - // When enabled, call glGenerateMipmapEXT() to generate mipmaps instead of relying on GL_GENERATE_MIPMAP - setCapability("GL::Workaround::needsExplicitGenerateMipmap", false); - // When enabled, binds and unbinds a texture target before doing the depth buffer copy. Failure to do - // so will cause a hard freeze on Mac OS 10.4 with a Radeon X1600 - setCapability("GL::Workaround::X1600DepthBufferCopy", false); - // When enabled, does not copy the last column and row of the depth buffer in a depth buffer copy. Failure - // to do so will cause a kernel panic on Mac OS 10.5(.1) with a Radeon HD 2600 (fixed in 10.5.2) - setCapability("GL::Workaround::HD2600DepthBufferCopy", false); - - // Certain Intel drivers have a divide by 0 crash if mipmaps are specified with - // glTexSubImage2D. - setCapability("GL::Workaround::noManualMips", false); + setCapability( "GL_EXT_TEXTURE_FILTER_ANISOTROPIC", suppAnisotropic ); } bool GFXGLCardProfiler::_queryCardCap(const String& query, U32& foundResult) diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index f59e8ac920..18aa0822b6 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -143,7 +143,7 @@ void GFXGLDevice::initGLState() // Setting mPixelShaderVersion to 3.0 will allow Advanced Lighting to run. mPixelShaderVersion = 3.0; - mSupportsAnisotropic = mCardProfiler->queryProfile( "GL::suppAnisotropic" ); + mSupportsAnisotropic = mCardProfiler->queryProfile( "GL_EXT_TEXTURE_FILTER_ANISOTROPIC" ); String vendorStr = (const char*)glGetString( GL_VENDOR ); if( vendorStr.find("NVIDIA", 0, String::NoCase | String::Left) != String::NPos) diff --git a/Engine/source/gfx/gl/gfxGLTextureManager.cpp b/Engine/source/gfx/gl/gfxGLTextureManager.cpp index 70a5e43038..8966da8064 100644 --- a/Engine/source/gfx/gl/gfxGLTextureManager.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureManager.cpp @@ -304,8 +304,7 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) glBindTexture(texture->getBinding(), texture->getHandle()); texture->mFormat = dds->mFormat; U32 numMips = dds->mSurfaces[0]->mMips.size(); - if(GFX->getCardProfiler()->queryProfile("GL::Workaround::noManualMips")) - numMips = 1; + for(U32 i = 0; i < numMips; i++) { if(isCompressedFormat(dds->mFormat)) diff --git a/Engine/source/gfx/gl/gfxGLTextureObject.cpp b/Engine/source/gfx/gl/gfxGLTextureObject.cpp index ed229e5d90..b4f43a7d5f 100644 --- a/Engine/source/gfx/gl/gfxGLTextureObject.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureObject.cpp @@ -298,8 +298,8 @@ void GFXGLTextureObject::reloadFromCache() else if(mBinding == GL_TEXTURE_1D) glTexSubImage1D(mBinding, 0, 0, (mTextureSize.x > 1 ? mTextureSize.x : mTextureSize.y), GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], mZombieCache); - if(GFX->getCardProfiler()->queryProfile("GL::Workaround::needsExplicitGenerateMipmap") && mMipLevels != 1) - glGenerateMipmapEXT(mBinding); + if(mMipLevels != 1) + glGenerateMipmap(mBinding); delete[] mZombieCache; mZombieCache = NULL; From f9b2aa397f3a180c2cf14e215aa356a99f382c7c Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 6 May 2016 21:50:11 -0400 Subject: [PATCH 201/324] cache OpenGL extensions that are not part of the 3.3 core profile, and that run more than initialization setup. --- Engine/source/gfx/gl/gfxGLCardProfiler.cpp | 24 +++++++++++++++---- .../gfx/gl/gfxGLCircularVolatileBuffer.h | 6 ++--- Engine/source/gfx/gl/gfxGLDevice.cpp | 13 +++++++++- Engine/source/gfx/gl/gfxGLDevice.h | 12 ++++++++++ Engine/source/gfx/gl/gfxGLShader.cpp | 3 ++- Engine/source/gfx/gl/gfxGLStateBlock.cpp | 4 ++-- Engine/source/gfx/gl/gfxGLTextureManager.cpp | 2 +- Engine/source/gfx/gl/gfxGLTextureObject.cpp | 2 +- Engine/source/gfx/gl/gfxGLTextureTarget.cpp | 2 +- Engine/source/gfx/gl/gfxGLVertexBuffer.cpp | 4 ++-- Engine/source/gfx/gl/gfxGLVertexDecl.cpp | 4 ++-- Engine/source/gfx/gl/gfxGLWindowTarget.cpp | 2 +- 12 files changed, 58 insertions(+), 20 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp index bc40d30a99..766f06bb28 100644 --- a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp +++ b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp @@ -56,9 +56,6 @@ void GFXGLCardProfiler::setupCardCapabilities() { GLint maxTexSize; glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTexSize); - - const char* versionString = reinterpret_cast(glGetString(GL_VERSION)); - F32 glVersion = dAtof(versionString); // OpenGL doesn't have separate maximum width/height. setCapability("maxTextureWidth", maxTexSize); @@ -66,8 +63,25 @@ void GFXGLCardProfiler::setupCardCapabilities() setCapability("maxTextureSize", maxTexSize); // Check for anisotropic filtering support. - bool suppAnisotropic = gglHasExtension( EXT_texture_filter_anisotropic ); - setCapability( "GL_EXT_TEXTURE_FILTER_ANISOTROPIC", suppAnisotropic ); + setCapability("GL_EXT_texture_filter_anisotropic", gglHasExtension(EXT_texture_filter_anisotropic)); + + // Check for buffer storage + setCapability("GL_ARB_buffer_storage", gglHasExtension(ARB_buffer_storage)); + + // Check for shader model 5.0 + setCapability("GL_ARB_gpu_shader5", gglHasExtension(ARB_gpu_shader5)); + + // Check for texture storage + setCapability("GL_ARB_texture_storage", gglHasExtension(ARB_texture_storage)); + + // Check for sampler objects + setCapability("GL_ARB_sampler_objects", gglHasExtension(ARB_sampler_objects)); + + // Check for copy image support + setCapability("GL_ARB_copy_image", gglHasExtension(ARB_copy_image)); + + // Check for vertex attrib binding + setCapability("GL_ARB_vertex_attrib_binding", gglHasExtension(ARB_vertex_attrib_binding)); } bool GFXGLCardProfiler::_queryCardCap(const String& query, U32& foundResult) diff --git a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h index 6d7d0e4b11..6047255eb9 100644 --- a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h +++ b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h @@ -158,7 +158,7 @@ class GLCircularVolatileBuffer const U32 cSizeInMB = 10; mBufferSize = (cSizeInMB << 20); - if( gglHasExtension(ARB_buffer_storage) ) + if( GFXGL->mCapabilities.bufferStorage ) { const GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT; glBufferStorage(mBinding, mBufferSize, NULL, flags); @@ -198,7 +198,7 @@ class GLCircularVolatileBuffer outOffset = mBufferFreePos; - if( gglHasExtension(ARB_buffer_storage) ) + if( GFXGL->mCapabilities.bufferStorage ) { outPtr = (U8*)(mBufferPtr) + mBufferFreePos; } @@ -227,7 +227,7 @@ class GLCircularVolatileBuffer void unlock() { - if( gglHasExtension(ARB_buffer_storage) ) + if( GFXGL->mCapabilities.bufferStorage ) { return; } diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 18aa0822b6..9e5df88869 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -140,10 +140,18 @@ void GFXGLDevice::initGLState() glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + // [JTH 5/6/2016] GLSL 1.50 is really SM 4.0 // Setting mPixelShaderVersion to 3.0 will allow Advanced Lighting to run. mPixelShaderVersion = 3.0; - mSupportsAnisotropic = mCardProfiler->queryProfile( "GL_EXT_TEXTURE_FILTER_ANISOTROPIC" ); + // Set capability extensions. + mCapabilities.anisotropicFiltering = mCardProfiler->queryProfile("GL_EXT_texture_filter_anisotropic"); + mCapabilities.bufferStorage = mCardProfiler->queryProfile("GL_ARB_buffer_storage"); + mCapabilities.shaderModel5 = mCardProfiler->queryProfile("GL_ARB_gpu_shader5"); + mCapabilities.textureStorage = mCardProfiler->queryProfile("GL_ARB_texture_storage"); + mCapabilities.samplerObjects = mCardProfiler->queryProfile("GL_ARB_sampler_objects"); + mCapabilities.copyImage = mCardProfiler->queryProfile("GL_ARB_copy_image"); + mCapabilities.vertexAttributeBinding = mCardProfiler->queryProfile("GL_ARB_vertex_attrib_binding"); String vendorStr = (const char*)glGetString( GL_VENDOR ); if( vendorStr.find("NVIDIA", 0, String::NoCase | String::Left) != String::NPos) @@ -216,6 +224,9 @@ GFXGLDevice::GFXGLDevice(U32 adapterIndex) : mCurrentVB_Divisor[i] = 0; } + // Initiailize capabilities to false. + memset(&mCapabilities, 0, sizeof(GLCapabilities)); + loadGLCore(); GFXGLEnumTranslate::init(); diff --git a/Engine/source/gfx/gl/gfxGLDevice.h b/Engine/source/gfx/gl/gfxGLDevice.h index 902bfb3f6c..e7649c6433 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.h +++ b/Engine/source/gfx/gl/gfxGLDevice.h @@ -45,6 +45,18 @@ class GFXGLVertexDecl; class GFXGLDevice : public GFXDevice { public: + struct GLCapabilities + { + bool anisotropicFiltering; + bool bufferStorage; + bool shaderModel5; + bool textureStorage; + bool samplerObjects; + bool copyImage; + bool vertexAttributeBinding; + }; + GLCapabilities mCapabilities; + void zombify(); void resurrect(); GFXGLDevice(U32 adapterIndex); diff --git a/Engine/source/gfx/gl/gfxGLShader.cpp b/Engine/source/gfx/gl/gfxGLShader.cpp index 2e63c61fea..50578cb5b4 100644 --- a/Engine/source/gfx/gl/gfxGLShader.cpp +++ b/Engine/source/gfx/gl/gfxGLShader.cpp @@ -23,6 +23,7 @@ #include "platform/platform.h" #include "gfx/gl/gfxGLShader.h" #include "gfx/gl/gfxGLVertexAttribLocation.h" +#include "gfx/gl/gfxGLDevice.h" #include "core/frameAllocator.h" #include "core/stream/fileStream.h" @@ -956,7 +957,7 @@ bool GFXGLShader::_loadShaderFromStream( GLuint shader, buffers.push_back( dStrdup( versionDecl ) ); lengths.push_back( dStrlen( versionDecl ) ); - if(gglHasExtension(ARB_gpu_shader5)) + if(GFXGL->mCapabilities.shaderModel5) { const char *extension = "#extension GL_ARB_gpu_shader5 : enable\r\n"; buffers.push_back( dStrdup( extension ) ); diff --git a/Engine/source/gfx/gl/gfxGLStateBlock.cpp b/Engine/source/gfx/gl/gfxGLStateBlock.cpp index 34f816dc90..1d23e4b2cf 100644 --- a/Engine/source/gfx/gl/gfxGLStateBlock.cpp +++ b/Engine/source/gfx/gl/gfxGLStateBlock.cpp @@ -39,7 +39,7 @@ GFXGLStateBlock::GFXGLStateBlock(const GFXStateBlockDesc& desc) : mDesc(desc), mCachedHashValue(desc.getHashValue()) { - if( !gglHasExtension(ARB_sampler_objects) ) + if( !GFXGL->mCapabilities.samplerObjects ) return; static Map mSamplersMap; @@ -165,7 +165,7 @@ void GFXGLStateBlock::activate(const GFXGLStateBlock* oldState) #undef CHECK_TOGGLE_STATE //sampler objects - if( gglHasExtension(ARB_sampler_objects) ) + if( GFXGL->mCapabilities.samplerObjects ) { for (U32 i = 0; i < getMin(getOwningDevice()->getNumSamplers(), (U32) TEXTURE_STAGE_COUNT); i++) { diff --git a/Engine/source/gfx/gl/gfxGLTextureManager.cpp b/Engine/source/gfx/gl/gfxGLTextureManager.cpp index 8966da8064..c0d43087a3 100644 --- a/Engine/source/gfx/gl/gfxGLTextureManager.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureManager.cpp @@ -146,7 +146,7 @@ void GFXGLTextureManager::innerCreateTexture( GFXGLTextureObject *retTex, glTexParameteri(binding, GL_TEXTURE_MAX_LEVEL, retTex->mMipLevels-1 ); - if( gglHasExtension(ARB_texture_storage) ) + if( GFXGL->mCapabilities.textureStorage ) { if(binding == GL_TEXTURE_2D) glTexStorage2D( retTex->getBinding(), retTex->mMipLevels, GFXGLTextureInternalFormat[format], width, height ); diff --git a/Engine/source/gfx/gl/gfxGLTextureObject.cpp b/Engine/source/gfx/gl/gfxGLTextureObject.cpp index b4f43a7d5f..219343b5f7 100644 --- a/Engine/source/gfx/gl/gfxGLTextureObject.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureObject.cpp @@ -211,7 +211,7 @@ void GFXGLTextureObject::bind(U32 textureUnit) glBindTexture(mBinding, mHandle); GFXGL->getOpenglCache()->setCacheBindedTex(textureUnit, mBinding, mHandle); - if( gglHasExtension(ARB_sampler_objects) ) + if(GFXGL->mCapabilities.samplerObjects) return; GFXGLStateBlockRef sb = mGLDevice->getCurrentStateBlock(); diff --git a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp index 2022651072..384871dd9a 100644 --- a/Engine/source/gfx/gl/gfxGLTextureTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureTarget.cpp @@ -410,7 +410,7 @@ void GFXGLTextureTarget::resolveTo(GFXTextureObject* obj) AssertFatal(dynamic_cast(obj), "GFXGLTextureTarget::resolveTo - Incorrect type of texture, expected a GFXGLTextureObject"); GFXGLTextureObject* glTexture = static_cast(obj); - if( gglHasExtension(ARB_copy_image) && mTargets[Color0]->isCompatible(glTexture) ) + if( GFXGL->mCapabilities.copyImage && mTargets[Color0]->isCompatible(glTexture) ) { GLenum binding = mTargets[Color0]->getBinding(); binding = (binding >= GL_TEXTURE_CUBE_MAP_POSITIVE_X && binding <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z) ? GL_TEXTURE_CUBE_MAP : binding; diff --git a/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp b/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp index 132172c1ad..2cf4cb6255 100644 --- a/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp +++ b/Engine/source/gfx/gl/gfxGLVertexBuffer.cpp @@ -78,7 +78,7 @@ void GFXGLVertexBuffer::lock( U32 vertexStart, U32 vertexEnd, void **vertexPtr ) if( mBufferType == GFXBufferTypeVolatile ) { AssertFatal(vertexStart == 0, ""); - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) { getCircularVolatileVertexBuffer()->lock( mNumVerts * mVertexSize, 0, mBufferOffset, *vertexPtr ); } @@ -136,7 +136,7 @@ void GFXGLVertexBuffer::prepare() void GFXGLVertexBuffer::prepare(U32 stream, U32 divisor) { - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) { glBindVertexBuffer( stream, mBuffer, mBufferOffset, mVertexSize ); glVertexBindingDivisor( stream, divisor ); diff --git a/Engine/source/gfx/gl/gfxGLVertexDecl.cpp b/Engine/source/gfx/gl/gfxGLVertexDecl.cpp index 10eda4401f..948a2b2de7 100644 --- a/Engine/source/gfx/gl/gfxGLVertexDecl.cpp +++ b/Engine/source/gfx/gl/gfxGLVertexDecl.cpp @@ -15,7 +15,7 @@ void GFXGLVertexDecl::init(const GFXVertexFormat *format) void GFXGLVertexDecl::prepareVertexFormat() const { AssertFatal(mFormat, "GFXGLVertexDecl - Not inited"); - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) { for ( U32 i=0; i < glVerticesFormat.size(); i++ ) { @@ -36,7 +36,7 @@ void GFXGLVertexDecl::prepareBuffer_old(U32 stream, GLint mBuffer, GLint mDiviso PROFILE_SCOPE(GFXGLVertexDecl_prepare); AssertFatal(mFormat, "GFXGLVertexDecl - Not inited"); - if( gglHasExtension(ARB_vertex_attrib_binding) ) + if( GFXGL->mCapabilities.vertexAttributeBinding ) return; // Bind the buffer... diff --git a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp index 5f8808cae0..116ad75e35 100644 --- a/Engine/source/gfx/gl/gfxGLWindowTarget.cpp +++ b/Engine/source/gfx/gl/gfxGLWindowTarget.cpp @@ -78,7 +78,7 @@ void GFXGLWindowTarget::resolveTo(GFXTextureObject* obj) AssertFatal(dynamic_cast(obj), "GFXGLTextureTarget::resolveTo - Incorrect type of texture, expected a GFXGLTextureObject"); GFXGLTextureObject* glTexture = static_cast(obj); - if( gglHasExtension(ARB_copy_image) ) + if( GFXGL->mCapabilities.copyImage ) { if(mBackBufferColorTex.getWidth() == glTexture->getWidth() && mBackBufferColorTex.getHeight() == glTexture->getHeight() From 30f0a9c5f92bc6daee0e991ce80620f3d208ab6d Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 6 May 2016 22:05:32 -0400 Subject: [PATCH 202/324] replaces GL_PIXEL_UNPACK_BUFFER_ARB with GL_PIXEL_UNPACK_BUFFER --- Engine/source/gfx/gl/gfxGLTextureManager.cpp | 10 +++++----- Engine/source/gfx/gl/gfxGLTextureObject.cpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLTextureManager.cpp b/Engine/source/gfx/gl/gfxGLTextureManager.cpp index 70a5e43038..3b5ff02944 100644 --- a/Engine/source/gfx/gl/gfxGLTextureManager.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureManager.cpp @@ -228,20 +228,20 @@ void GFXGLTextureManager::innerCreateTexture( GFXGLTextureObject *retTex, static void _fastTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) { - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, texture->getBuffer()); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, texture->getBuffer()); U32 bufSize = pDL->getWidth(0) * pDL->getHeight(0) * pDL->getBytesPerPixel(); - glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, bufSize, NULL, GL_STREAM_DRAW); + glBufferData(GL_PIXEL_UNPACK_BUFFER, bufSize, NULL, GL_STREAM_DRAW); if(pDL->getFormat() == GFXFormatR8G8B8A8 || pDL->getFormat() == GFXFormatR8G8B8X8) { FrameAllocatorMarker mem; U8* pboMemory = (U8*)mem.alloc(bufSize); GFX->getDeviceSwizzle32()->ToBuffer(pboMemory, pDL->getBits(0), bufSize); - glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB, 0, bufSize, pboMemory ); + glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, bufSize, pboMemory ); } else { - glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB, 0, bufSize, pDL->getBits(0) ); + glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, bufSize, pDL->getBits(0) ); } if(texture->getBinding() == GL_TEXTURE_2D) @@ -249,7 +249,7 @@ static void _fastTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) else glTexSubImage1D(texture->getBinding(), 0, 0, (pDL->getWidth(0) > 1 ? pDL->getWidth(0) : pDL->getHeight(0)), GFXGLTextureFormat[pDL->getFormat()], GFXGLTextureType[pDL->getFormat()], NULL); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } static void _slowTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) diff --git a/Engine/source/gfx/gl/gfxGLTextureObject.cpp b/Engine/source/gfx/gl/gfxGLTextureObject.cpp index ed229e5d90..0f76b9a181 100644 --- a/Engine/source/gfx/gl/gfxGLTextureObject.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureObject.cpp @@ -98,8 +98,8 @@ void GFXGLTextureObject::unlock(U32 mipLevel) PRESERVE_TEXTURE(mBinding); glBindTexture(mBinding, mHandle); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, mBuffer); - glBufferData(GL_PIXEL_UNPACK_BUFFER_ARB, (mLockedRectRect.extent.x + 1) * (mLockedRectRect.extent.y + 1) * mBytesPerTexel, mFrameAllocatorPtr, GL_STREAM_DRAW); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, mBuffer); + glBufferData(GL_PIXEL_UNPACK_BUFFER, (mLockedRectRect.extent.x + 1) * (mLockedRectRect.extent.y + 1) * mBytesPerTexel, mFrameAllocatorPtr, GL_STREAM_DRAW); if(mBinding == GL_TEXTURE_2D) glTexSubImage2D(mBinding, mipLevel, mLockedRectRect.point.x, mLockedRectRect.point.y, @@ -108,7 +108,7 @@ void GFXGLTextureObject::unlock(U32 mipLevel) glTexSubImage1D(mBinding, mipLevel, (mLockedRectRect.point.x > 1 ? mLockedRectRect.point.x : mLockedRectRect.point.y), (mLockedRectRect.extent.x > 1 ? mLockedRectRect.extent.x : mLockedRectRect.extent.y), GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], NULL); - glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, 0); + glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); mLockedRect.bits = NULL; #if TORQUE_DEBUG From a50600afaa4865b9b6edca3a6ab136b6a418921b Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 6 May 2016 22:57:35 -0400 Subject: [PATCH 203/324] tabs->spaces for TRON :) --- Engine/source/gfx/gl/gfxGLCardProfiler.cpp | 24 +++++++++++----------- Engine/source/gfx/gl/gfxGLDevice.cpp | 18 ++++++++-------- Engine/source/gfx/gl/gfxGLDevice.h | 22 ++++++++++---------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp index 766f06bb28..760a0d5ed7 100644 --- a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp +++ b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp @@ -65,23 +65,23 @@ void GFXGLCardProfiler::setupCardCapabilities() // Check for anisotropic filtering support. setCapability("GL_EXT_texture_filter_anisotropic", gglHasExtension(EXT_texture_filter_anisotropic)); - // Check for buffer storage - setCapability("GL_ARB_buffer_storage", gglHasExtension(ARB_buffer_storage)); + // Check for buffer storage + setCapability("GL_ARB_buffer_storage", gglHasExtension(ARB_buffer_storage)); - // Check for shader model 5.0 - setCapability("GL_ARB_gpu_shader5", gglHasExtension(ARB_gpu_shader5)); + // Check for shader model 5.0 + setCapability("GL_ARB_gpu_shader5", gglHasExtension(ARB_gpu_shader5)); - // Check for texture storage - setCapability("GL_ARB_texture_storage", gglHasExtension(ARB_texture_storage)); + // Check for texture storage + setCapability("GL_ARB_texture_storage", gglHasExtension(ARB_texture_storage)); - // Check for sampler objects - setCapability("GL_ARB_sampler_objects", gglHasExtension(ARB_sampler_objects)); + // Check for sampler objects + setCapability("GL_ARB_sampler_objects", gglHasExtension(ARB_sampler_objects)); - // Check for copy image support - setCapability("GL_ARB_copy_image", gglHasExtension(ARB_copy_image)); + // Check for copy image support + setCapability("GL_ARB_copy_image", gglHasExtension(ARB_copy_image)); - // Check for vertex attrib binding - setCapability("GL_ARB_vertex_attrib_binding", gglHasExtension(ARB_vertex_attrib_binding)); + // Check for vertex attrib binding + setCapability("GL_ARB_vertex_attrib_binding", gglHasExtension(ARB_vertex_attrib_binding)); } bool GFXGLCardProfiler::_queryCardCap(const String& query, U32& foundResult) diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 9e5df88869..b5881dd2ab 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -140,18 +140,18 @@ void GFXGLDevice::initGLState() glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - // [JTH 5/6/2016] GLSL 1.50 is really SM 4.0 + // [JTH 5/6/2016] GLSL 1.50 is really SM 4.0 // Setting mPixelShaderVersion to 3.0 will allow Advanced Lighting to run. mPixelShaderVersion = 3.0; // Set capability extensions. mCapabilities.anisotropicFiltering = mCardProfiler->queryProfile("GL_EXT_texture_filter_anisotropic"); - mCapabilities.bufferStorage = mCardProfiler->queryProfile("GL_ARB_buffer_storage"); - mCapabilities.shaderModel5 = mCardProfiler->queryProfile("GL_ARB_gpu_shader5"); - mCapabilities.textureStorage = mCardProfiler->queryProfile("GL_ARB_texture_storage"); - mCapabilities.samplerObjects = mCardProfiler->queryProfile("GL_ARB_sampler_objects"); - mCapabilities.copyImage = mCardProfiler->queryProfile("GL_ARB_copy_image"); - mCapabilities.vertexAttributeBinding = mCardProfiler->queryProfile("GL_ARB_vertex_attrib_binding"); + mCapabilities.bufferStorage = mCardProfiler->queryProfile("GL_ARB_buffer_storage"); + mCapabilities.shaderModel5 = mCardProfiler->queryProfile("GL_ARB_gpu_shader5"); + mCapabilities.textureStorage = mCardProfiler->queryProfile("GL_ARB_texture_storage"); + mCapabilities.samplerObjects = mCardProfiler->queryProfile("GL_ARB_sampler_objects"); + mCapabilities.copyImage = mCardProfiler->queryProfile("GL_ARB_copy_image"); + mCapabilities.vertexAttributeBinding = mCardProfiler->queryProfile("GL_ARB_vertex_attrib_binding"); String vendorStr = (const char*)glGetString( GL_VENDOR ); if( vendorStr.find("NVIDIA", 0, String::NoCase | String::Left) != String::NPos) @@ -224,8 +224,8 @@ GFXGLDevice::GFXGLDevice(U32 adapterIndex) : mCurrentVB_Divisor[i] = 0; } - // Initiailize capabilities to false. - memset(&mCapabilities, 0, sizeof(GLCapabilities)); + // Initiailize capabilities to false. + memset(&mCapabilities, 0, sizeof(GLCapabilities)); loadGLCore(); diff --git a/Engine/source/gfx/gl/gfxGLDevice.h b/Engine/source/gfx/gl/gfxGLDevice.h index e7649c6433..fc37d32207 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.h +++ b/Engine/source/gfx/gl/gfxGLDevice.h @@ -45,17 +45,17 @@ class GFXGLVertexDecl; class GFXGLDevice : public GFXDevice { public: - struct GLCapabilities - { - bool anisotropicFiltering; - bool bufferStorage; - bool shaderModel5; - bool textureStorage; - bool samplerObjects; - bool copyImage; - bool vertexAttributeBinding; - }; - GLCapabilities mCapabilities; + struct GLCapabilities + { + bool anisotropicFiltering; + bool bufferStorage; + bool shaderModel5; + bool textureStorage; + bool samplerObjects; + bool copyImage; + bool vertexAttributeBinding; + }; + GLCapabilities mCapabilities; void zombify(); void resurrect(); From db6d91925d74427be4fae97dd5f80845898c58ee Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 6 May 2016 23:44:41 -0400 Subject: [PATCH 204/324] Added profile blocks for GL. --- Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h | 6 ++++-- Engine/source/gfx/gl/gfxGLDevice.cpp | 5 +++++ Engine/source/gfx/gl/gfxGLShader.cpp | 4 ++++ Engine/source/gfx/gl/gfxGLStateBlock.cpp | 1 + Engine/source/gfx/gl/gfxGLTextureManager.cpp | 8 ++++++++ Engine/source/gfx/gl/gfxGLTextureObject.cpp | 7 +++++++ 6 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h index 6d7d0e4b11..dd25255c20 100644 --- a/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h +++ b/Engine/source/gfx/gl/gfxGLCircularVolatileBuffer.h @@ -20,7 +20,8 @@ class GLFenceRange } void init(U32 start, U32 end) - { + { + PROFILE_SCOPE(GFXGLQueryFence_issue); mStart = start; mEnd = end; mSync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); @@ -35,7 +36,8 @@ class GLFenceRange } void wait() - { + { + PROFILE_SCOPE(GFXGLQueryFence_block); GLbitfield waitFlags = 0; GLuint64 waitDuration = 0; while( 1 ) diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index f59e8ac920..4974a04e03 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -325,6 +325,7 @@ void GFXGLDevice::resurrect() GFXVertexBuffer* GFXGLDevice::findVolatileVBO(U32 numVerts, const GFXVertexFormat *vertexFormat, U32 vertSize) { + PROFILE_SCOPE(GFXGLDevice_findVBPool); for(U32 i = 0; i < mVolatileVBs.size(); i++) if ( mVolatileVBs[i]->mNumVerts >= numVerts && mVolatileVBs[i]->mVertexFormat.isEqual( *vertexFormat ) && @@ -333,6 +334,7 @@ GFXVertexBuffer* GFXGLDevice::findVolatileVBO(U32 numVerts, const GFXVertexForma return mVolatileVBs[i]; // No existing VB, so create one + PROFILE_SCOPE(GFXGLDevice_createVBPool); StrongRefPtr buf(new GFXGLVertexBuffer(GFX, numVerts, vertexFormat, vertSize, GFXBufferTypeVolatile)); buf->registerResourceWithDevice(this); mVolatileVBs.push_back(buf); @@ -358,6 +360,7 @@ GFXVertexBuffer *GFXGLDevice::allocVertexBuffer( U32 numVerts, GFXBufferType bufferType, void* data ) { + PROFILE_SCOPE(GFXGLDevice_allocVertexBuffer); if(bufferType == GFXBufferTypeVolatile) return findVolatileVBO(numVerts, vertexFormat, vertSize); @@ -523,6 +526,7 @@ inline GLsizei GFXGLDevice::primCountToIndexCount(GFXPrimitiveType primType, U32 GFXVertexDecl* GFXGLDevice::allocVertexDecl( const GFXVertexFormat *vertexFormat ) { + PROFILE_SCOPE(GFXGLDevice_allocVertexDecl); typedef Map GFXGLVertexDeclMap; static GFXGLVertexDeclMap declMap; GFXGLVertexDeclMap::Iterator itr = declMap.find( (void*)vertexFormat->getDescription().c_str() ); // description string are interned, safe to use c_str() @@ -855,6 +859,7 @@ void GFXGLDevice::setShader(GFXShader *shader, bool force) void GFXGLDevice::setShaderConstBufferInternal(GFXShaderConstBuffer* buffer) { + PROFILE_SCOPE(GFXGLDevice_setShaderConstBufferInternal); static_cast(buffer)->activate(); } diff --git a/Engine/source/gfx/gl/gfxGLShader.cpp b/Engine/source/gfx/gl/gfxGLShader.cpp index 2e63c61fea..960af7bd14 100644 --- a/Engine/source/gfx/gl/gfxGLShader.cpp +++ b/Engine/source/gfx/gl/gfxGLShader.cpp @@ -344,6 +344,7 @@ void GFXGLShaderConstBuffer::set(GFXShaderConstHandle* handle, const MatrixF* ma void GFXGLShaderConstBuffer::activate() { + PROFILE_SCOPE(GFXGLShaderConstBuffer_activate); mShader->setConstantsFromBuffer(this); mWasLost = false; } @@ -394,6 +395,7 @@ void GFXGLShader::clearShaders() bool GFXGLShader::_init() { + PROFILE_SCOPE(GFXGLShader_Init); // Don't initialize empty shaders. if ( mVertexFile.isEmpty() && mPixelFile.isEmpty() ) return false; @@ -1013,6 +1015,7 @@ bool GFXGLShader::initShader( const Torque::Path &file, bool isVertex, const Vector ¯os ) { + PROFILE_SCOPE(GFXGLShader_CompileShader); GLuint activeShader = glCreateShader(isVertex ? GL_VERTEX_SHADER : GL_FRAGMENT_SHADER); if(isVertex) mVertexShader = activeShader; @@ -1072,6 +1075,7 @@ bool GFXGLShader::initShader( const Torque::Path &file, /// Returns our list of shader constants, the material can get this and just set the constants it knows about const Vector& GFXGLShader::getShaderConstDesc() const { + PROFILE_SCOPE(GFXGLShader_GetShaderConstants); return mConstants; } diff --git a/Engine/source/gfx/gl/gfxGLStateBlock.cpp b/Engine/source/gfx/gl/gfxGLStateBlock.cpp index 34f816dc90..f9ad73dba7 100644 --- a/Engine/source/gfx/gl/gfxGLStateBlock.cpp +++ b/Engine/source/gfx/gl/gfxGLStateBlock.cpp @@ -88,6 +88,7 @@ const GFXStateBlockDesc& GFXGLStateBlock::getDesc() const /// @param oldState The current state, used to make sure we don't set redundant states on the device. Pass NULL to reset all states. void GFXGLStateBlock::activate(const GFXGLStateBlock* oldState) { + PROFILE_SCOPE(GFXGLStateBlock_Activate); // Big scary warning copied from Apple docs // http://developer.apple.com/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/opengl_performance/chapter_13_section_2.html#//apple_ref/doc/uid/TP40001987-CH213-SW12 // Don't set a state that's already set. Once a feature is enabled, it does not need to be enabled again. diff --git a/Engine/source/gfx/gl/gfxGLTextureManager.cpp b/Engine/source/gfx/gl/gfxGLTextureManager.cpp index 70a5e43038..d9962691d2 100644 --- a/Engine/source/gfx/gl/gfxGLTextureManager.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureManager.cpp @@ -234,6 +234,7 @@ static void _fastTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) if(pDL->getFormat() == GFXFormatR8G8B8A8 || pDL->getFormat() == GFXFormatR8G8B8X8) { + PROFILE_SCOPE(Swizzle32_Upload); FrameAllocatorMarker mem; U8* pboMemory = (U8*)mem.alloc(bufSize); GFX->getDeviceSwizzle32()->ToBuffer(pboMemory, pDL->getBits(0), bufSize); @@ -241,6 +242,7 @@ static void _fastTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) } else { + PROFILE_SCOPE(SwizzleNull_Upload); glBufferSubData(GL_PIXEL_UNPACK_BUFFER_ARB, 0, bufSize, pDL->getBits(0) ); } @@ -262,6 +264,7 @@ static void _slowTextureLoad(GFXGLTextureObject* texture, GBitmap* pDL) bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, GBitmap *pDL) { + PROFILE_SCOPE(GFXGLTextureManager_loadTexture); GFXGLTextureObject *texture = static_cast(aTexture); AssertFatal(texture->getBinding() == GL_TEXTURE_1D || texture->getBinding() == GL_TEXTURE_2D, @@ -291,6 +294,8 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, GBitmap *pDL) bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) { + PROFILE_SCOPE(GFXGLTextureManager_loadTextureDDS); + AssertFatal(!(dds->mFormat == GFXFormatDXT2 || dds->mFormat == GFXFormatDXT4), "GFXGLTextureManager::_loadTexture - OpenGL does not support DXT2 or DXT4 compressed textures"); GFXGLTextureObject* texture = static_cast(aTexture); @@ -308,6 +313,8 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) numMips = 1; for(U32 i = 0; i < numMips; i++) { + PROFILE_SCOPE(GFXGLTexMan_loadSurface); + if(isCompressedFormat(dds->mFormat)) { if((!isPow2(dds->getWidth()) || !isPow2(dds->getHeight())) && GFX->getCardProfiler()->queryProfile("GL::Workaround::noCompressedNPoTTextures")) @@ -344,6 +351,7 @@ bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, DDSFile *dds) bool GFXGLTextureManager::_loadTexture(GFXTextureObject *aTexture, void *raw) { + PROFILE_SCOPE(GFXGLTextureManager_loadTextureRaw); if(aTexture->getDepth() < 1) return false; diff --git a/Engine/source/gfx/gl/gfxGLTextureObject.cpp b/Engine/source/gfx/gl/gfxGLTextureObject.cpp index ed229e5d90..36c9814157 100644 --- a/Engine/source/gfx/gl/gfxGLTextureObject.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureObject.cpp @@ -96,6 +96,9 @@ void GFXGLTextureObject::unlock(U32 mipLevel) if(!mLockedRect.bits) return; + // I know this is in unlock, but in GL we actually do our submission in unlock. + PROFILE_SCOPE(GFXGLTextureObject_lockRT); + PRESERVE_TEXTURE(mBinding); glBindTexture(mBinding, mHandle); glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, mBuffer); @@ -137,6 +140,8 @@ void GFXGLTextureObject::reInit() bool GFXGLTextureObject::copyToBmp(GBitmap * bmp) { + PROFILE_SCOPE(GFXGLTextureObject_copyToBmp); + if (!bmp) return false; @@ -175,6 +180,7 @@ bool GFXGLTextureObject::copyToBmp(GBitmap * bmp) glGetTexImage(mBinding, 0, GFXGLTextureFormat[mFormat], GFXGLTextureType[mFormat], orig); + PROFILE_START(GFXGLTextureObject_copyToBmp_pixCopy); for(int i = 0; i < srcPixelCount; ++i) { dest[0] = orig[0]; @@ -186,6 +192,7 @@ bool GFXGLTextureObject::copyToBmp(GBitmap * bmp) orig += srcBytesPerPixel; dest += dstBytesPerPixel; } + PROFILE_END(); return true; } From 909109713d5fbf6250908b870db2a494f2de6b15 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 6 May 2016 23:45:48 -0400 Subject: [PATCH 205/324] redefined the copyToBMP --- Engine/source/gfx/gl/gfxGLTextureObject.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLTextureObject.cpp b/Engine/source/gfx/gl/gfxGLTextureObject.cpp index 36c9814157..e22daa1d85 100644 --- a/Engine/source/gfx/gl/gfxGLTextureObject.cpp +++ b/Engine/source/gfx/gl/gfxGLTextureObject.cpp @@ -140,8 +140,6 @@ void GFXGLTextureObject::reInit() bool GFXGLTextureObject::copyToBmp(GBitmap * bmp) { - PROFILE_SCOPE(GFXGLTextureObject_copyToBmp); - if (!bmp) return false; From c104313f439f7b6bccb113a116e44f58415d375a Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sun, 8 May 2016 21:21:52 -0500 Subject: [PATCH 206/324] updated empty template with stray script files from devhead that had yet to be converted --- .../game/core/scripts/client/defaults.cs | 4 +- .../lighting/advanced/deferredShading.cs | 147 +++++++++++ .../scripts/client/lighting/advanced/init.cs | 7 + .../client/lighting/advanced/lightViz.cs | 21 +- .../client/lighting/advanced/shaders.cs | 24 +- .../core/scripts/client/postFx/GammaPostFX.cs | 6 +- .../core/scripts/client/postFx/caustics.cs | 4 +- .../game/core/scripts/client/postFx/hdr.cs | 18 +- .../core/scripts/client/postFx/turbulence.cs | 2 +- .../game/core/scripts/client/renderManager.cs | 31 +-- .../game/core/scripts/client/scatterSky.cs | 4 +- .../Empty/game/core/scripts/client/shaders.cs | 36 +++ .../advanced/gl/deferredShadingP.glsl | 2 +- .../gui/guiMaterialPropertiesWindow.ed.gui | 228 +----------------- .../Empty/game/tools/worldEditor/main.cs | 3 + .../worldEditor/scripts/menuHandlers.ed.cs | 2 + 16 files changed, 285 insertions(+), 254 deletions(-) create mode 100644 Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs diff --git a/Templates/Empty/game/core/scripts/client/defaults.cs b/Templates/Empty/game/core/scripts/client/defaults.cs index 0142a94108..d1805d337d 100644 --- a/Templates/Empty/game/core/scripts/client/defaults.cs +++ b/Templates/Empty/game/core/scripts/client/defaults.cs @@ -73,7 +73,9 @@ /// $pref::Video::disableParallaxMapping = false; -$pref::Video::Gamma = 1.0; +$pref::Video::Gamma = 2.2; +$pref::Video::Contrast = 1.0; +$pref::Video::Brightness = 0; // Console-friendly defaults if($platform $= "xenon") diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs new file mode 100644 index 0000000000..d53e6965f6 --- /dev/null +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs @@ -0,0 +1,147 @@ +singleton ShaderData( ClearGBufferShader ) +{ + DXVertexShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredClearGBufferP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredClearGBufferP.glsl"; + + pixVersion = 2.0; +}; + +singleton ShaderData( DeferredColorShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredColorShaderP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredColorShaderP.glsl"; + + pixVersion = 2.0; +}; + +// Primary Deferred Shader +new GFXStateBlockData( AL_DeferredShadingState : PFX_DefaultStateBlock ) +{ + cullMode = GFXCullNone; + + blendDefined = true; + blendEnable = true; + blendSrc = GFXBlendSrcAlpha; + blendDest = GFXBlendInvSrcAlpha; + + samplersDefined = true; + samplerStates[0] = SamplerWrapLinear; + samplerStates[1] = SamplerWrapLinear; + samplerStates[2] = SamplerWrapLinear; + samplerStates[3] = SamplerWrapLinear; +}; + +new ShaderData( AL_DeferredShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/deferredShadingP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/deferredShadingP.glsl"; + + samplerNames[0] = "colorBufferTex"; + samplerNames[1] = "lightPrePassTex"; + samplerNames[2] = "matInfoTex"; + samplerNames[3] = "prepassTex"; + + pixVersion = 2.0; +}; + +singleton PostEffect( AL_DeferredShading ) +{ + renderTime = "PFXBeforeBin"; + renderBin = "SkyBin"; + shader = AL_DeferredShader; + stateBlock = AL_DeferredShadingState; + texture[0] = "#color"; + texture[1] = "#lightinfo"; + texture[2] = "#matinfo"; + texture[3] = "#prepass"; + + target = "$backBuffer"; + renderPriority = 10000; + allowReflectPass = true; +}; + +// Debug Shaders. +new ShaderData( AL_ColorBufferShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/dbgColorBufferP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl"; + + samplerNames[0] = "colorBufferTex"; + pixVersion = 2.0; +}; + +singleton PostEffect( AL_ColorBufferVisualize ) +{ + shader = AL_ColorBufferShader; + stateBlock = AL_DefaultVisualizeState; + texture[0] = "#color"; + target = "$backBuffer"; + renderPriority = 9999; +}; + +/// Toggles the visualization of the AL lighting specular power buffer. +function toggleColorBufferViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_ColorBufferShaderVar = AL_ColorBufferVisualize.isEnabled() ? false : true; + AL_ColorBufferVisualize.toggle(); + } + else if ( %enable ) + { + AL_DeferredShading.disable(); + AL_ColorBufferVisualize.enable(); + } + else if ( !%enable ) + { + AL_ColorBufferVisualize.disable(); + AL_DeferredShading.enable(); + } +} + +new ShaderData( AL_SpecMapShader ) +{ + DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; + DXPixelShaderFile = "shaders/common/lighting/advanced/dbgSpecMapVisualizeP.hlsl"; + + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; + OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl"; + + samplerNames[0] = "matinfoTex"; + pixVersion = 2.0; +}; + +singleton PostEffect( AL_SpecMapVisualize ) +{ + shader = AL_SpecMapShader; + stateBlock = AL_DefaultVisualizeState; + texture[0] = "#matinfo"; + target = "$backBuffer"; + renderPriority = 9999; +}; + +/// Toggles the visualization of the AL lighting specular power buffer. +function toggleSpecMapViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_SpecMapShaderVar = AL_SpecMapVisualize.isEnabled() ? false : true; + AL_SpecMapVisualize.toggle(); + } + else if ( %enable ) + AL_SpecMapVisualize.enable(); + else if ( !%enable ) + AL_SpecMapVisualize.disable(); +} \ No newline at end of file diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/init.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/init.cs index 2c78e9ca42..d74aff69a9 100644 --- a/Templates/Empty/game/core/scripts/client/lighting/advanced/init.cs +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/init.cs @@ -43,6 +43,7 @@ exec( "./lightViz.cs" ); exec( "./shadowViz.cs" ); exec( "./shadowViz.gui" ); +exec( "./deferredShading.cs" ); function onActivateAdvancedLM() { @@ -58,12 +59,18 @@ function onActivateAdvancedLM() // Enable the offscreen target so that AL will work // with MSAA back buffers and for HDR rendering. AL_FormatToken.enable(); + + // Activate Deferred Shading + AL_DeferredShading.enable(); } function onDeactivateAdvancedLM() { // Disable the offscreen render target. AL_FormatToken.disable(); + + // Deactivate Deferred Shading + AL_DeferredShading.disable(); } function setAdvancedLighting() diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs index 22665120df..fcaf72942b 100644 --- a/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/lightViz.cs @@ -56,7 +56,7 @@ OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgDepthVisualizeP.glsl"; - samplerNames[0] = "prepassBuffer"; + samplerNames[0] = "prepassTex"; samplerNames[1] = "depthViz"; pixVersion = 2.0; @@ -113,7 +113,7 @@ singleton PostEffect( AL_GlowVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl"; - samplerNames[0] = "prepassBuffer"; + samplerNames[0] = "prepassTex"; pixVersion = 2.0; }; @@ -149,7 +149,7 @@ singleton PostEffect( AL_NormalsVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgLightColorVisualizeP.glsl"; - samplerNames[0] = "lightInfoBuffer"; + samplerNames[0] = "lightPrePassTex"; pixVersion = 2.0; }; @@ -184,7 +184,7 @@ singleton PostEffect( AL_LightColorVisualize ) OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/dbgLightSpecularVisualizeP.glsl"; - samplerNames[0] = "lightInfoBuffer"; + samplerNames[0] = "lightPrePassTex"; pixVersion = 2.0; }; @@ -280,3 +280,16 @@ function toggleLightSpecularViz( %enable ) AL_LightSpecularVisualize.disable(); } +function toggleBackbufferViz( %enable ) +{ + if ( %enable $= "" ) + { + $AL_BackbufferVisualizeVar = AL_DeferredShading.isEnabled() ? true : false; + AL_DeferredShading.toggle(); + } + else if ( %enable ) + AL_DeferredShading.disable(); + else if ( !%enable ) + AL_DeferredShading.enable(); +} + diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs index 2e73b65696..7e6816db3e 100644 --- a/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs @@ -36,8 +36,11 @@ samplersDefined = true; samplerStates[0] = SamplerClampPoint; // G-buffer + mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) + mSamplerNames[1] = "shadowMap"; samplerStates[2] = SamplerClampLinear; // SSAO Mask + mSamplerNames[2] = "ssaoMask"; samplerStates[3] = SamplerWrapPoint; // Random Direction Map cullDefined = true; @@ -66,7 +69,9 @@ samplerNames[2] = "$dynamicShadowMap"; samplerNames[3] = "$ssaoMask"; samplerNames[4] = "$gTapRotationTex"; - + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -79,6 +84,9 @@ sampler["shadowMap"] = "$dynamiclight"; sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["ssaoMask"] = "#ssaoMask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; @@ -103,7 +111,9 @@ samplersDefined = true; samplerStates[0] = SamplerClampPoint; // G-buffer + mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) + mSamplerNames[1] = "shadowMap"; samplerStates[2] = SamplerClampLinear; // Cookie Map samplerStates[3] = SamplerWrapPoint; // Random Direction Map @@ -133,6 +143,9 @@ samplerNames[2] = "$dynamicShadowMap"; samplerNames[3] = "$cookieMap"; samplerNames[4] = "$gTapRotationTex"; + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -146,6 +159,9 @@ sampler["shadowMap"] = "$dynamiclight"; sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; @@ -166,6 +182,9 @@ samplerNames[2] = "$dynamicShadowMap"; samplerNames[3] = "$cookieMap"; samplerNames[4] = "$gTapRotationTex"; + samplerNames[5] = "$lightBuffer"; + samplerNames[6] = "$colorBuffer"; + samplerNames[7] = "$matInfoBuffer"; pixVersion = 3.0; }; @@ -179,6 +198,9 @@ sampler["shadowMap"] = "$dynamiclight"; sampler["dynamicShadowMap"] = "$dynamicShadowMap"; sampler["cookieMap"] = "$dynamiclightmask"; + sampler["lightBuffer"] = "#lightinfo"; + sampler["colorBuffer"] = "#color"; + sampler["matInfoBuffer"] = "#matinfo"; target = "lightinfo"; diff --git a/Templates/Empty/game/core/scripts/client/postFx/GammaPostFX.cs b/Templates/Empty/game/core/scripts/client/postFx/GammaPostFX.cs index 383a0c8cda..b88f313057 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/GammaPostFX.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/GammaPostFX.cs @@ -44,7 +44,7 @@ singleton GFXStateBlockData( GammaStateBlock : PFX_DefaultStateBlock ) singleton PostEffect( GammaPostFX ) { isEnabled = true; - allowReflectPass = false; + allowReflectPass = true; renderTime = "PFXBeforeBin"; renderBin = "EditorBin"; @@ -65,6 +65,8 @@ singleton PostEffect( GammaPostFX ) function GammaPostFX::setShaderConsts( %this ) { - %clampedGamma = mClamp( $pref::Video::Gamma, 0.001, 2.2); + %clampedGamma = mClamp( $pref::Video::Gamma, 2.0, 2.5); %this.setShaderConst( "$OneOverGamma", 1 / %clampedGamma ); + %this.setShaderConst( "$Brightness", $pref::Video::Brightness ); + %this.setShaderConst( "$Contrast", $pref::Video::Contrast ); } \ No newline at end of file diff --git a/Templates/Empty/game/core/scripts/client/postFx/caustics.cs b/Templates/Empty/game/core/scripts/client/postFx/caustics.cs index 3e8b14de0b..a712ef82a5 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/caustics.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/caustics.cs @@ -38,7 +38,7 @@ singleton ShaderData( PFX_CausticsShader ) DXVertexShaderFile = "shaders/common/postFx/postFxV.hlsl"; DXPixelShaderFile = "shaders/common/postFx/caustics/causticsP.hlsl"; - OGLVertexShaderFile = "shaders/common/postFx/gl//postFxV.glsl"; + OGLVertexShaderFile = "shaders/common/postFx/gl/postFxV.glsl"; OGLPixelShaderFile = "shaders/common/postFx/caustics/gl/causticsP.glsl"; samplerNames[0] = "$prepassTex"; @@ -51,7 +51,7 @@ singleton ShaderData( PFX_CausticsShader ) singleton PostEffect( CausticsPFX ) { isEnabled = false; - renderTime = "PFXBeforeBin"; + renderTime = "PFXAfterDiffuse"; renderBin = "ObjTranslucentBin"; //renderPriority = 0.1; diff --git a/Templates/Empty/game/core/scripts/client/postFx/hdr.cs b/Templates/Empty/game/core/scripts/client/postFx/hdr.cs index a5c450799a..6c8e870d0e 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/hdr.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/hdr.cs @@ -172,6 +172,8 @@ singleton ShaderData( HDR_CombineShader ) samplerNames[2] = "$bloomTex"; samplerNames[3] = "$colorCorrectionTex"; + samplerNames[4] = "prepassTex"; + pixVersion = 3.0; }; @@ -253,8 +255,10 @@ singleton GFXStateBlockData( HDRStateBlock ) %combinePass.setShaderConst( "$g_fEnableBlueShift", $HDRPostFX::enableBlueShift ); %combinePass.setShaderConst( "$g_fBlueShiftColor", $HDRPostFX::blueShiftColor ); - %clampedGamma = mClamp( $pref::Video::Gamma, 0.001, 2.2); + %clampedGamma = mClamp( $pref::Video::Gamma, 2.0, 2.5); %combinePass.setShaderConst( "$g_fOneOverGamma", 1 / %clampedGamma ); + %combinePass.setShaderConst( "$Brightness", $pref::Video::Brightness ); + %combinePass.setShaderConst( "$Contrast", $pref::Video::Contrast ); %whiteCutoff = ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ) * ( $HDRPostFX::whiteCutoff * $HDRPostFX::whiteCutoff ); @@ -329,7 +333,7 @@ singleton GFXStateBlockData( HDRStateBlock ) singleton PostEffect( HDRPostFX ) { isEnabled = false; - allowReflectPass = false; + allowReflectPass = true; // Resolve the HDR before we render any editor stuff // and before we resolve the scene to the backbuffer. @@ -355,6 +359,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownScale4x4Shader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -365,6 +370,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomH"; shader = HDR_BloomGaussBlurHShader; @@ -376,6 +382,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; internalName = "bloomV"; shader = HDR_BloomGaussBlurVShader; @@ -390,6 +397,7 @@ singleton PostEffect( HDRPostFX ) // Now calculate the adapted luminance. new PostEffect() { + allowReflectPass = true; internalName = "adaptLum"; shader = HDR_SampleLumShader; @@ -401,6 +409,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -411,6 +420,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -421,6 +431,7 @@ singleton PostEffect( HDRPostFX ) new PostEffect() { + allowReflectPass = true; shader = HDR_DownSampleLumShader; stateBlock = HDR_DownSampleStateBlock; texture[0] = "$inTex"; @@ -434,6 +445,7 @@ singleton PostEffect( HDRPostFX ) // one... PostEffect takes care to manage that. new PostEffect() { + allowReflectPass = true; internalName = "finalLum"; shader = HDR_CalcAdaptedLumShader; stateBlock = HDR_DownSampleStateBlock; @@ -450,6 +462,7 @@ singleton PostEffect( HDRPostFX ) // version of the scene. new PostEffect() { + allowReflectPass = true; internalName = "combinePass"; shader = HDR_CombineShader; @@ -458,6 +471,7 @@ singleton PostEffect( HDRPostFX ) texture[1] = "#adaptedLum"; texture[2] = "#bloomFinal"; texture[3] = $HDRPostFX::colorCorrectionRamp; + texture[4] = "#prepass"; target = "$backBuffer"; }; }; diff --git a/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs b/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs index c2309f8086..dd8c0e2dc1 100644 --- a/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs +++ b/Templates/Empty/game/core/scripts/client/postFx/turbulence.cs @@ -47,7 +47,7 @@ singleton PostEffect( TurbulenceFx ) isEnabled = false; allowReflectPass = true; - renderTime = "PFXAfterBin"; + renderTime = "PFXAfterDiffuse"; renderBin = "GlowBin"; renderPriority = 0.5; // Render after the glows themselves diff --git a/Templates/Empty/game/core/scripts/client/renderManager.cs b/Templates/Empty/game/core/scripts/client/renderManager.cs index 5734bbce60..f746c45278 100644 --- a/Templates/Empty/game/core/scripts/client/renderManager.cs +++ b/Templates/Empty/game/core/scripts/client/renderManager.cs @@ -33,7 +33,7 @@ function initRenderManager() { enabled = "false"; - format = "GFXFormatR8G8B8A8"; + format = "GFXFormatR16G16B16A16F"; depthFormat = "GFXFormatD24S8"; aaLevel = 0; // -1 = match backbuffer @@ -49,20 +49,21 @@ function initRenderManager() // We really need to fix the sky to render after all the // meshes... but that causes issues in reflections. - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(SkyBin) { bintype = "Sky"; renderOrder = 0.1; processAddOrder = 0.1; } ); //DiffuseRenderPassManager.addManager( new RenderVistaMgr() { bintype = "Vista"; renderOrder = 0.15; processAddOrder = 0.15; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(BeginBin) { bintype = "Begin"; renderOrder = 0.2; processAddOrder = 0.2; } ); // Normal mesh rendering. - DiffuseRenderPassManager.addManager( new RenderTerrainMgr() { renderOrder = 0.4; processAddOrder = 0.4; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; } ); - DiffuseRenderPassManager.addManager( new RenderImposterMgr() { renderOrder = 0.56; processAddOrder = 0.56; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); + DiffuseRenderPassManager.addManager( new RenderTerrainMgr(TerrainBin) { renderOrder = 0.4; processAddOrder = 0.4; basicOnly = true; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(MeshBin) { bintype = "Mesh"; renderOrder = 0.5; processAddOrder = 0.5; basicOnly = true; } ); + DiffuseRenderPassManager.addManager( new RenderImposterMgr(ImposterBin) { renderOrder = 0.56; processAddOrder = 0.56; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjectBin) { bintype = "Object"; renderOrder = 0.6; processAddOrder = 0.6; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); - DiffuseRenderPassManager.addManager( new RenderMeshMgr() { bintype = "Decal"; renderOrder = 0.8; processAddOrder = 0.8; } ); - DiffuseRenderPassManager.addManager( new RenderOcclusionMgr() { bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(ShadowBin) { bintype = "Shadow"; renderOrder = 0.7; processAddOrder = 0.7; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalRoadBin) { bintype = "DecalRoad"; renderOrder = 0.8; processAddOrder = 0.8; } ); + DiffuseRenderPassManager.addManager( new RenderMeshMgr(DecalBin) { bintype = "Decal"; renderOrder = 0.81; processAddOrder = 0.81; } ); + DiffuseRenderPassManager.addManager( new RenderOcclusionMgr(OccluderBin){ bintype = "Occluder"; renderOrder = 0.9; processAddOrder = 0.9; } ); // We now render translucent objects that should handle // their own fogging and lighting. @@ -70,10 +71,10 @@ function initRenderManager() // Note that the fog effect is triggered before this bin. DiffuseRenderPassManager.addManager( new RenderObjectMgr(ObjTranslucentBin) { bintype = "ObjectTranslucent"; renderOrder = 1.0; processAddOrder = 1.0; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); - DiffuseRenderPassManager.addManager( new RenderObjectMgr() { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); - DiffuseRenderPassManager.addManager( new RenderParticleMgr() { renderOrder = 1.35; processAddOrder = 1.35; } ); - DiffuseRenderPassManager.addManager( new RenderTranslucentMgr() { renderOrder = 1.4; processAddOrder = 1.4; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(WaterBin) { bintype = "Water"; renderOrder = 1.2; processAddOrder = 1.2; } ); + DiffuseRenderPassManager.addManager( new RenderObjectMgr(FoliageBin) { bintype = "Foliage"; renderOrder = 1.3; processAddOrder = 1.3; } ); + DiffuseRenderPassManager.addManager( new RenderParticleMgr(ParticleBin) { renderOrder = 1.35; processAddOrder = 1.35; } ); + DiffuseRenderPassManager.addManager( new RenderTranslucentMgr(TranslucentBin){ renderOrder = 1.4; processAddOrder = 1.4; } ); DiffuseRenderPassManager.addManager(new RenderObjectMgr(FogBin){ bintype = "ObjectVolumetricFog"; renderOrder = 1.45; processAddOrder = 1.45; } ); @@ -85,7 +86,7 @@ function initRenderManager() DiffuseRenderPassManager.addManager( new RenderObjectMgr(EditorBin) { bintype = "Editor"; renderOrder = 1.6; processAddOrder = 1.6; } ); // Resolve format change token last. - DiffuseRenderPassManager.addManager( new RenderPassStateBin() { renderOrder = 1.7; stateToken = AL_FormatToken; } ); + DiffuseRenderPassManager.addManager( new RenderPassStateBin(FinalBin) { renderOrder = 1.7; stateToken = AL_FormatToken; } ); } /// This post effect is used to copy data from the non-MSAA back-buffer to the diff --git a/Templates/Empty/game/core/scripts/client/scatterSky.cs b/Templates/Empty/game/core/scripts/client/scatterSky.cs index 48a8fdbc7a..57a8a9fb11 100644 --- a/Templates/Empty/game/core/scripts/client/scatterSky.cs +++ b/Templates/Empty/game/core/scripts/client/scatterSky.cs @@ -22,13 +22,13 @@ new GFXStateBlockData( ScatterSkySBData ) { - cullDefined = true; + //cullDefined = true; cullMode = "GFXCullNone"; zDefined = true; zEnable = true; zWriteEnable = false; - zFunc = "GFXCmpLessEqual"; + //zFunc = "GFXCmpLessEqual"; samplersDefined = true; samplerStates[0] = SamplerClampLinear; diff --git a/Templates/Empty/game/core/scripts/client/shaders.cs b/Templates/Empty/game/core/scripts/client/shaders.cs index 98d0529ebe..002053a1ac 100644 --- a/Templates/Empty/game/core/scripts/client/shaders.cs +++ b/Templates/Empty/game/core/scripts/client/shaders.cs @@ -101,4 +101,40 @@ singleton ShaderData( OffscreenParticleCompositeShaderData ) samplerNames[1] = "$alphaMap"; pixVersion = 1.4; +}; + +singleton ShaderData( VolumetricFogPrePassShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogPreP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogPreP.glsl"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogP.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogP.glsl"; + + samplerNames[0] = "$prepassTex"; + samplerNames[1] = "$depthBuffer"; + samplerNames[2] = "$frontBuffer"; + samplerNames[3] = "$density"; + + pixVersion = 3.0; +}; +singleton ShaderData( VolumetricFogReflectionShader ) +{ + DXVertexShaderFile = "shaders/common/VolumetricFog/VFogPreV.hlsl"; + DXPixelShaderFile = "shaders/common/VolumetricFog/VFogRefl.hlsl"; + + OGLVertexShaderFile = "shaders/common/VolumetricFog/gl/VFogPreV.glsl"; + OGLPixelShaderFile = "shaders/common/VolumetricFog/gl/VFogRefl.glsl"; + + pixVersion = 3.0; }; \ No newline at end of file diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl index 4ee4b1d81f..8af37ef0cc 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl @@ -22,7 +22,7 @@ #include "../../../gl/hlslCompat.glsl" #include "shadergen:/autogenConditioners.h" -#include "../../../postfx/gl/postFx.glsl" +#include "../../../postFx/gl/postFX.glsl" #include "../../../gl/torque.glsl" uniform sampler2D colorBufferTex; diff --git a/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index 2062f43f30..63ce28e2a8 100644 --- a/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Empty/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -1354,132 +1354,6 @@ bitmap = "tools/gui/images/delete"; }; }; - new GuiBitmapCtrl(){ - position="6 357"; - extent ="175 2"; - HorizSizing = "width"; - bitmap ="tools/gui/images/separator-v"; - }; - new GuiContainer(){ // Environment Map - profile="ToolsGuiDefaultProfile"; - isContainer = "1"; - position = "6 359"; - Extent = "185 52"; - HorizSizing = "width"; - - new GuiBitmapCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapDisplayBitmap"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; - wrap = "0"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "EditorTextProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "56 -3"; - Extent = "72 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "Env Map"; - maxLength = "1024"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "1 1"; - Extent = "48 48"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 1);"; - tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Change the active Environment Map for this layer."; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/materialEditor/gui/cubemapBtnBorder"; - }; - new GuiTextCtrl() { - canSaveDynamicFields = "0"; - internalName = "envMapNameText"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextProfile"; - HorizSizing = "width"; - VertSizing = "bottom"; - position = "56 16"; - Extent = "143 17"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - hovertime = "1000"; - Margin = "0 0 0 0"; - Padding = "0 0 0 0"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "None"; - maxLength = "1024"; - }; - new GuiButtonCtrl(){ - profile="ToolsGuiButtonProfile"; - text ="Edit"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "134 34"; - Extent = "40 16"; - buttonType = "PushButton"; - command="MaterialEditorGui.updateTextureMap(\"env\", 1);"; - }; - new GuiBitmapButtonCtrl() { - canSaveDynamicFields = "0"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiDefaultProfile"; - HorizSizing = "left"; - VertSizing = "bottom"; - position = "177 34"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateTextureMap(\"env\", 0);"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - bitmap = "tools/gui/images/delete"; - }; - }; }; }; new GuiRolloutCtrl() { @@ -1491,6 +1365,7 @@ Position = "0 0"; Extent = "195 0"; Caption = "Accumulation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -1967,6 +1842,7 @@ Position = "0 0"; Extent = "185 0"; Caption = "Lighting Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; container = true; @@ -2364,101 +2240,6 @@ useMouseEvents = "0"; useInactiveState = "0"; }; - new GuiCheckBoxCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceCheckbox"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiCheckBoxProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "8 46"; - Extent = "79 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateActiveMaterial(\"subSurface[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getValue());"; - tooltipprofile = "ToolsGuiDefaultProfile"; - ToolTip = "Enables the use of subsurface scattering for this layer."; - hovertime = "1000"; - text = "Sub Surface"; - groupNum = "-1"; - buttonType = "ToggleButton"; - useMouseEvents = "0"; - useInactiveState = "0"; - }; - new GuiSwatchButtonCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceColorSwatch"; - Enabled = "1"; - isContainer = "0"; - Profile = "GuiInspectorSwatchButtonProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "90 46"; - Extent = "16 16"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "getColorF(materialEd_PreviewMaterial.subSurfaceColor[MaterialEditorGui.currentLayer], \"MaterialEditorGui.updateSubSurfaceColor\");"; - tooltip = "Set the subsurface scattering color"; - hovertime = "1000"; - groupNum = "-1"; - buttonType = "PushButton"; - useMouseEvents = "0"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "subSurfaceRolloffTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 45"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - tooltip = "Set the subsurface rolloff factor"; - Command = "MaterialEditorGui.updateActiveMaterial(\"subSurfaceRolloff[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "5"; - }; - new GuiTextCtrl() { - HorizSizing = "right"; - VertSizing = "bottom"; - position = "9 65"; - Extent = "89 16"; - text = "Minnaert constant"; - }; - new GuiTextEditCtrl() { - canSaveDynamicFields = "0"; - internalName = "minnaertTextEdit"; - Enabled = "1"; - isContainer = "0"; - Profile = "ToolsGuiTextEditProfile"; - HorizSizing = "right"; - VertSizing = "bottom"; - position = "114 65"; - Extent = "29 18"; - MinExtent = "8 2"; - canSave = "1"; - Visible = "1"; - Command = "MaterialEditorGui.updateActiveMaterial(\"minnaertConstant[\" @ MaterialEditorGui.currentLayer @ \"]\", $ThisControl.getText());"; - hovertime = "1000"; - AnchorTop = "1"; - AnchorBottom = "0"; - AnchorLeft = "1"; - AnchorRight = "0"; - text = "32"; - maxLength = "3"; - }; }; }; }; @@ -2471,9 +2252,9 @@ Position = "0 0"; Extent = "185 0"; Caption = "Animation Properties"; + Expanded = false; Margin = "-1 0 0 0"; DragSizable = false; - Expanded = false; container = true; parentRollout = %this.rollout; object = %behavior; @@ -3283,6 +3064,7 @@ Position = "0 0"; Extent = "202 0"; Caption = "Advanced (all layers)"; + Expanded = false; Margin = "4 4 4 0"; DragSizable = false; container = true; @@ -3519,7 +3301,7 @@ Profile = "ToolsGuiCheckBoxProfile"; HorizSizing = "right"; VertSizing = "bottom"; - position = "100 56"; + position = "105 55"; Extent = "85 16"; MinExtent = "8 2"; canSave = "1"; diff --git a/Templates/Empty/game/tools/worldEditor/main.cs b/Templates/Empty/game/tools/worldEditor/main.cs index a6ecb2872b..59301ea53d 100644 --- a/Templates/Empty/game/tools/worldEditor/main.cs +++ b/Templates/Empty/game/tools/worldEditor/main.cs @@ -120,6 +120,9 @@ function initializeWorldEditor() EVisibility.addOption( "AL: Light Specular Viz", "$AL_LightSpecularVisualizeVar", "toggleLightSpecularViz" ); EVisibility.addOption( "AL: Normals Viz", "$AL_NormalsVisualizeVar", "toggleNormalsViz" ); EVisibility.addOption( "AL: Depth Viz", "$AL_DepthVisualizeVar", "toggleDepthViz" ); + EVisibility.addOption( "AL: Color Buffer", "$AL_ColorBufferShaderVar", "toggleColorBufferViz" ); + EVisibility.addOption( "AL: Spec Map", "$AL_SpecMapShaderVar", "toggleSpecMapViz"); + EVisibility.addOption( "AL: Backbuffer", "$AL_BackbufferVisualizeVar", "toggleBackbufferViz" ); EVisibility.addOption( "AL: Glow Buffer", "$AL_GlowVisualizeVar", "toggleGlowViz" ); EVisibility.addOption( "AL: PSSM Cascade Viz", "$AL::PSSMDebugRender", "" ); EVisibility.addOption( "Frustum Lock", "$Scene::lockCull", "" ); diff --git a/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs b/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs index 97ae5d2d70..8ee4f27ff5 100644 --- a/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs +++ b/Templates/Empty/game/tools/worldEditor/scripts/menuHandlers.ed.cs @@ -244,6 +244,8 @@ function EditorSaveMissionMenu() function EditorSaveMission() { + // just save the mission without renaming it + // first check for dirty and read-only files: if((EWorldEditor.isDirty || ETerrainEditor.isMissionDirty) && !isWriteableFileName($Server::MissionFile)) { From ad613f2e825b9d295a192e1f9554cade586f3d15 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Sun, 8 May 2016 21:52:00 -0500 Subject: [PATCH 207/324] alternate to https://github.com/GarageGames/Torque3D/pull/1602 --- Engine/source/T3D/lightAnimData.cpp | 8 +++++--- Engine/source/T3D/lightAnimData.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Engine/source/T3D/lightAnimData.cpp b/Engine/source/T3D/lightAnimData.cpp index b61d2b47d9..c5ef93b0f2 100644 --- a/Engine/source/T3D/lightAnimData.cpp +++ b/Engine/source/T3D/lightAnimData.cpp @@ -190,13 +190,15 @@ void LightAnimData::AnimValue::updateKey() } template -bool LightAnimData::AnimValue::animate( F32 time, F32 *output ) +bool LightAnimData::AnimValue::animate(F32 time, F32 *output, bool multiply) { F32 scaledTime, lerpFactor, valueRange, keyFrameLerp; U32 posFrom, posTo; S32 keyFrameFrom, keyFrameTo; F32 initialValue = *output; - + if (!multiply) + initialValue = 1; + bool wasAnimated = false; for ( U32 i=0; i < COUNT; i++ ) @@ -305,6 +307,6 @@ void LightAnimData::animate( LightInfo *lightInfo, LightAnimState *state ) lightInfo->setColor( color ); F32 brightness = state->brightness; - mBrightness.animate( time, &brightness ); + mBrightness.animate( time, &brightness, true ); lightInfo->setBrightness( brightness ); } diff --git a/Engine/source/T3D/lightAnimData.h b/Engine/source/T3D/lightAnimData.h index 69b2ff65df..d8c933674a 100644 --- a/Engine/source/T3D/lightAnimData.h +++ b/Engine/source/T3D/lightAnimData.h @@ -151,7 +151,7 @@ class LightAnimData : public SimDataBlock /// Performs the animation returning the results in the output if /// the time scale is greater than zero. /// @return Returns true if the animation was performed. - bool animate( F32 time, F32 *output ); + bool animate(F32 time, F32 *output, bool multiply = false); /// Called when the key string is changed to update the /// key length and time scale. From 5958e86e9af396b604baf4f4554a8ac2f6980544 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 9 May 2016 06:43:47 -0500 Subject: [PATCH 208/324] corrects native file dialogue return values --- .../source/platform/nativeDialogs/fileDialog.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Engine/source/platform/nativeDialogs/fileDialog.cpp b/Engine/source/platform/nativeDialogs/fileDialog.cpp index 84b367618b..f7eb26a53a 100644 --- a/Engine/source/platform/nativeDialogs/fileDialog.cpp +++ b/Engine/source/platform/nativeDialogs/fileDialog.cpp @@ -210,14 +210,14 @@ bool FileDialog::Execute() } String strippedFilters = suffix; strippedFilters.replace(";",","); - strippedFilters += String(";") + suffix; + strippedFilters += String(";") + suffix; // Get the current working directory, so we can back up to it once Windows has // done its craziness and messed with it. StringTableEntry cwd = Platform::getCurrentDirectory(); if (mData.mDefaultPath == StringTable->lookup("") || !Platform::isDirectory(mData.mDefaultPath)) mData.mDefaultPath = cwd; - + String rootDir = String(cwd); // Execute Dialog (Blocking Call) nfdchar_t *outPath = NULL; nfdpathset_t pathSet; @@ -226,6 +226,7 @@ bool FileDialog::Execute() String defaultPath = String(mData.mDefaultPath); #if defined(TORQUE_OS_WIN) defaultPath.replace("/", "\\"); + rootDir.replace("/", "\\"); #endif if (mData.mStyle & FileDialogData::FDS_OPEN) @@ -235,6 +236,11 @@ bool FileDialog::Execute() else if (mData.mStyle & FileDialogData::FDS_MULTIPLEFILES) result = NFD_OpenDialogMultiple(strippedFilters.c_str(), defaultPath.c_str(), &pathSet); + String resultPath = String(outPath).replace(rootDir, String("")); + resultPath = resultPath.replace(0, 1, String("")).c_str(); //kill '\\' prefix + resultPath = resultPath.replace(String("\\"), String("/")); + + // Did we select a file? if (result != NFD_OKAY) { @@ -245,7 +251,7 @@ bool FileDialog::Execute() if (mData.mStyle & FileDialogData::FDS_OPEN || mData.mStyle & FileDialogData::FDS_SAVE) { // Single file selection, do it the easy way - mData.mFile = StringTable->insert(outPath); + mData.mFile = Platform::makeRelativePathName(resultPath.c_str(), NULL); } else if (mData.mStyle & FileDialogData::FDS_MULTIPLEFILES) { @@ -265,7 +271,7 @@ bool FileDialog::Execute() else { //nope, just one file, so set it as normal - setDataField(StringTable->insert("files"), "0", outPath); + setDataField(StringTable->insert("files"), "0", Platform::makeRelativePathName(resultPath.c_str(), NULL)); setDataField(StringTable->insert("fileCount"), NULL, "1"); } } From 3a995415414c1d07ea7e894aac27838a7e194b7b Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 9 May 2016 13:43:06 -0500 Subject: [PATCH 209/324] Select camera when in material editor crashfix. When attempting to select a camera Object(so going into the editor, going into the freefloating camera and then back to the player camera and selecting the freefloating one) while the material editor was open, it would crash because it attempts to access the shapebase object's shapeInstance - but cameras don't have a shape. This fixes it so it makes sure there's a shapeinstance before trying to get the material data. --- Engine/source/T3D/shapeBase.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index 52ea070e37..e8e0674654 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -4888,7 +4888,8 @@ DefineEngineMethod( ShapeBase, getTargetCount, S32, (),, if ((ShapeBase*)obj->getClientObject()) obj = (ShapeBase*)obj->getClientObject(); - return obj->getShapeInstance()->getTargetCount(); + if (obj->getShapeInstance() != NULL) + return obj->getShapeInstance()->getTargetCount(); } return -1; From 27bb7a712a57c3769e9d3a395e2096908dd30349 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 9 May 2016 13:47:29 -0500 Subject: [PATCH 210/324] Corrects tabs. --- Engine/source/T3D/shapeBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index e8e0674654..c33cb7f735 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -4889,7 +4889,7 @@ DefineEngineMethod( ShapeBase, getTargetCount, S32, (),, obj = (ShapeBase*)obj->getClientObject(); if (obj->getShapeInstance() != NULL) - return obj->getShapeInstance()->getTargetCount(); + return obj->getShapeInstance()->getTargetCount(); } return -1; From 8d195f923693dd6012cd388b7250354f81d89c00 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 10 May 2016 10:58:03 -0500 Subject: [PATCH 211/324] Makes the tab/spaces consistent for the entire console method function rather than mix-n-matching the formatting. --- Engine/source/T3D/shapeBase.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index c33cb7f735..6f40cc134d 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -4881,18 +4881,18 @@ DefineEngineMethod( ShapeBase, getTargetCount, S32, (),, "@see getTargetName()\n") { - ShapeBase *obj = dynamic_cast< ShapeBase* > ( object ); - if(obj) - { - // Try to use the client object (so we get the reskinned targets in the Material Editor) - if ((ShapeBase*)obj->getClientObject()) - obj = (ShapeBase*)obj->getClientObject(); + ShapeBase *obj = dynamic_cast< ShapeBase* > ( object ); + if(obj) + { + // Try to use the client object (so we get the reskinned targets in the Material Editor) + if ((ShapeBase*)obj->getClientObject()) + obj = (ShapeBase*)obj->getClientObject(); if (obj->getShapeInstance() != NULL) return obj->getShapeInstance()->getTargetCount(); } - - return -1; + + return -1; } DefineEngineMethod( ShapeBase, changeMaterial, void, ( const char* mapTo, Material* oldMat, Material* newMat ),, From 01e3cb53de1ccb9dd173e815c117c74f418e3699 Mon Sep 17 00:00:00 2001 From: irei1as Date: Wed, 11 May 2016 17:47:05 +0200 Subject: [PATCH 212/324] Set textures as bitmapctrl in script A new method to GuiBitmapCtrl in order to set "named textures" as the image displayed in script. Those "named textures" are created in two places from script (not c++) that I know: as part of GuiOffscreenCanvas (targetName field) and, more useful, as the target of a PostEffect using target = "#name" (the '#' is not used for this method). --- Engine/source/gui/controls/guiBitmapCtrl.cpp | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Engine/source/gui/controls/guiBitmapCtrl.cpp b/Engine/source/gui/controls/guiBitmapCtrl.cpp index 1d0cd21c7e..c1d77c4c1f 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.cpp +++ b/Engine/source/gui/controls/guiBitmapCtrl.cpp @@ -29,6 +29,8 @@ #include "gfx/gfxDevice.h" #include "gfx/gfxDrawUtil.h" +#include "materials/matTextureTarget.h" + IMPLEMENT_CONOBJECT(GuiBitmapCtrl); @@ -264,3 +266,24 @@ DefineConsoleMethod( GuiBitmapCtrl, setBitmap, void, ( const char * fileRoot, bo Con::expandScriptFilename(filename, sizeof(filename), fileRoot); object->setBitmap(filename, resize ); } + +DefineEngineMethod( GuiBitmapCtrl, setNamedTexture, bool, (String namedtexture),, + "@brief Set a texture as the image.\n\n" + "@param namedtexture The name of the texture (NamedTexTarget).\n" + "@return true if the texture exists." ) +{ + GFXTexHandle theTex; + NamedTexTarget *namedTarget = NULL; + namedTarget = NamedTexTarget::find(namedtexture.c_str()); + if ( namedTarget ) + { + theTex = namedTarget->getTexture( 0 ); + } + + if ( theTex.isValid() ) + { + object->setBitmapHandle( theTex , false ); + return true; //a new texture was set correctly + } + return false; //we couldn't change the texture +} From 383d27f2ec8acb5e3005b07af8739170aaf6a3f9 Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 12 May 2016 00:45:16 -0500 Subject: [PATCH 213/324] The class is designed as a general-purpose rotation/orientation class to make it easy to work with rotations and swap between math types as easily as possible. --- Engine/source/console/consoleTypes.h | 2 + Engine/source/gui/editor/inspector/field.cpp | 3 +- Engine/source/math/mRotation.cpp | 299 ++++++++++++ Engine/source/math/mRotation.h | 465 +++++++++++++++++++ Engine/source/math/mathIO.h | 24 + Engine/source/math/mathTypes.cpp | 60 ++- Engine/source/math/mathTypes.h | 5 +- 7 files changed, 853 insertions(+), 5 deletions(-) create mode 100644 Engine/source/math/mRotation.cpp create mode 100644 Engine/source/math/mRotation.h diff --git a/Engine/source/console/consoleTypes.h b/Engine/source/console/consoleTypes.h index c026b8e1ac..ab5b97d62f 100644 --- a/Engine/source/console/consoleTypes.h +++ b/Engine/source/console/consoleTypes.h @@ -74,6 +74,8 @@ DefineConsoleType( TypeCommand, String ) DefineConsoleType( TypeFilename, const char * ) DefineConsoleType( TypeStringFilename, String ) +DefineConsoleType(TypeRotationF, RotationF) + /// A universally unique identifier. DefineConsoleType( TypeUUID, Torque::UUID ) diff --git a/Engine/source/gui/editor/inspector/field.cpp b/Engine/source/gui/editor/inspector/field.cpp index ac72b2e043..45aa1b2b0d 100644 --- a/Engine/source/gui/editor/inspector/field.cpp +++ b/Engine/source/gui/editor/inspector/field.cpp @@ -284,7 +284,8 @@ void GuiInspectorField::setData( const char* data, bool callbacks ) || type == TypeMatrixPosition || type == TypeMatrixRotation || type == TypeBox3F - || type == TypeRectUV ) + || type == TypeRectUV + || type == TypeRotationF) { //TODO: we should actually take strings into account and not chop things up between quotes diff --git a/Engine/source/math/mRotation.cpp b/Engine/source/math/mRotation.cpp new file mode 100644 index 0000000000..d915348d69 --- /dev/null +++ b/Engine/source/math/mRotation.cpp @@ -0,0 +1,299 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "math/mRotation.h" + +#ifdef TORQUE_TESTS_ENABLED +#include "testing/unitTesting.h" +#endif + +//==================================================================== +//Eulers setup +//==================================================================== +RotationF::RotationF(EulerF _euler, UnitFormat format) +{ + set(_euler.x, _euler.y, _euler.z, format); +} + +RotationF::RotationF(F32 _x, F32 _y, F32 _z, UnitFormat format) +{ + set(_x, _y, _z, format); +} + +void RotationF::set(EulerF _euler, UnitFormat format) +{ + x = format == Degrees ? mDegToRad(_euler.x) : _euler.x; + y = format == Degrees ? mDegToRad(_euler.y) : _euler.y; + z = format == Degrees ? mDegToRad(_euler.z) : _euler.z; + + mRotationType = Euler; +} + +void RotationF::set(F32 _x, F32 _y, F32 _z, UnitFormat format) +{ + EulerF tempEul; + if (format == Degrees) + { + tempEul.set(mDegToRad(_x), mDegToRad(_y), mDegToRad(_z)); + } + else + { + tempEul.set(_x, _y, _z); + } + + set(tempEul); +} + +//==================================================================== +//AxisAngle setup +//==================================================================== +RotationF::RotationF(AngAxisF _aa, UnitFormat format) +{ + set(_aa, format); +} + +void RotationF::set(AngAxisF _aa, UnitFormat format) +{ + x = _aa.axis.x; + y = _aa.axis.y; + z = _aa.axis.z; + + w = format == Degrees ? mDegToRad(_aa.angle) : _aa.angle; + + mRotationType = AxisAngle; +} + +//==================================================================== +//QuatF setup +//==================================================================== +RotationF::RotationF(QuatF _quat) +{ + set(_quat); +} + +void RotationF::set(QuatF _quat) +{ + AngAxisF tmpAA; + tmpAA.set(_quat); + + set(tmpAA); +} + +//==================================================================== +//MatrixF setup +//==================================================================== +RotationF::RotationF(MatrixF _mat) +{ + set(_mat); +} + +void RotationF::set(MatrixF _mat) +{ + set(_mat.toEuler()); +} + +// +inline F32 RotationF::len() const +{ + return asEulerF().len(); +} + +inline void RotationF::interpolate(const RotationF& _from, const RotationF& _to, F32 _factor) +{ + QuatF tmpQuat; + + tmpQuat.interpolate(_from.asQuatF(), _to.asQuatF(), _factor); + + set(tmpQuat); +} + +void RotationF::lookAt(const Point3F& _origin, const Point3F& _target, const Point3F& _up) +{ + MatrixF mat; + + VectorF newForward = _target - _origin; + newForward.normalize(); + + VectorF up(0.0f, 0.0f, 1.0f); + VectorF axisX; + VectorF axisY = newForward; + VectorF axisZ; + + if (_up != VectorF::Zero) + up = _up; + + // Validate and normalize input: + F32 lenSq; + lenSq = axisY.lenSquared(); + if (lenSq < 0.000001f) + { + //degenerate forward vector + axisY.set(0.0f, 1.0f, 0.0f); + } + else + { + axisY /= mSqrt(lenSq); + } + + + lenSq = up.lenSquared(); + if (lenSq < 0.000001f) + { + //degenerate up vector - too small + up.set(0.0f, 0.0f, 1.0f); + } + else + { + up /= mSqrt(lenSq); + } + + if (fabsf(mDot(up, axisY)) > 0.9999f) + { + //degenerate up vector - same as forward + F32 tmp = up.x; + up.x = -up.y; + up.y = up.z; + up.z = tmp; + } + + // construct the remaining axes: + mCross(axisY, up, &axisX); + mCross(axisX, axisY, &axisZ); + + mat.setColumn(0, axisX); + mat.setColumn(1, axisY); + mat.setColumn(2, axisZ); + + set(mat); +} + +//======================================================== +EulerF RotationF::asEulerF(UnitFormat _format) const +{ + if (mRotationType == Euler) + { + if (_format == Degrees) + { + return EulerF(mRadToDeg(x), mRadToDeg(y), mRadToDeg(z)); + } + else + { + return EulerF(x, y, z); + } + } + else + { + EulerF returnEuler = asMatrixF().toEuler(); + + if (_format == Degrees) + { + returnEuler.x = mRadToDeg(returnEuler.x); + returnEuler.y = mRadToDeg(returnEuler.y); + returnEuler.z = mRadToDeg(returnEuler.z); + } + + return returnEuler; + } +} + +AngAxisF RotationF::asAxisAngle(UnitFormat format) const +{ + AngAxisF returnAA; + + if (mRotationType == Euler) + { + returnAA.set(EulerF(x, y, z)); + } + else + { + returnAA.set(Point3F(x, y, z), w); + } + + if (format == Radians) + { + returnAA.angle = mDegToRad(returnAA.angle); + } + + return returnAA; +} + +MatrixF RotationF::asMatrixF() const +{ + MatrixF returnMat; + if (mRotationType == Euler) + { + returnMat.set(EulerF(x, y, z)); + } + else + { + AngAxisF aa; + aa.set(Point3F(x, y, z), w); + + aa.setMatrix(&returnMat); + } + + return returnMat; +} + +QuatF RotationF::asQuatF() const +{ + QuatF returnQuat; + if (mRotationType == Euler) + { + returnQuat.set(EulerF(x, y, z)); + } + else + { + AngAxisF aa; + aa.set(Point3F(x, y, z), w); + + returnQuat.set(aa); + } + + return returnQuat; +} + +void RotationF::normalize() +{ + if (mRotationType == Euler) + { + EulerF eul = EulerF(x, y, z); + eul.normalize(); + set(eul); + } + else + { + QuatF quat; + quat.set(Point3F(x, y, z), w); + + quat.normalize(); + + set(quat); + } +} + +//Testing +#ifdef TORQUE_TESTS_ENABLED +TEST(Maths, RotationF_Calculations) +{ + //TODO: implement unit test +}; +#endif \ No newline at end of file diff --git a/Engine/source/math/mRotation.h b/Engine/source/math/mRotation.h new file mode 100644 index 0000000000..a99510b8c3 --- /dev/null +++ b/Engine/source/math/mRotation.h @@ -0,0 +1,465 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef MROTATION_H +#define MROTATION_H + +#ifndef _MMATHFN_H_ +#include "math/mMathFn.h" +#endif + +#ifndef _MPOINT3_H_ +#include "math/mPoint3.h" +#endif + +#ifndef _MQUAT_H_ +#include "math/mQuat.h" +#endif + +#ifndef _MMATRIX_H_ +#include "math/mMatrix.h" +#endif + +#ifndef _MANGAXIS_H_ +#include "math/mAngAxis.h" +#endif + +//------------------------------------------------------------------------------ +/// Rotation Interop Utility class +/// +/// Useful for easily handling rotations/orientations in transforms while manipulating or converting between formats. +class RotationF +{ + //-------------------------------------- Public data +public: + F32 x; ///< X co-ordinate. + F32 y; ///< Y co-ordinate. + F32 z; ///< Z co-ordinate. + F32 w; ///< W co-ordinate. + + enum RotationTypes + { + Euler = 0, + AxisAngle + }; + RotationTypes mRotationType; + + enum UnitFormat + { + Radians = 0, + Degrees + }; + + RotationF(); ///< Create an uninitialized point. + RotationF(const RotationF&); ///< Copy constructor. + + // + //Eulers + RotationF(EulerF euler, UnitFormat format = Radians); + RotationF(F32 _x, F32 _y, F32 _z, UnitFormat format = Radians); + + void set(EulerF euler, UnitFormat format = Radians); + void set(F32 _x, F32 _y, F32 _z, UnitFormat format = Radians); + + //As with AxisAngles, we make the assumption here that if not told otherwise, inbound rotations are in Degrees. + RotationF operator=(const EulerF&); + RotationF operator-(const EulerF&) const; + RotationF operator+(const EulerF&) const; + RotationF& operator-=(const EulerF&); + RotationF& operator+=(const EulerF&); + S32 operator==(const EulerF&) const; + S32 operator!=(const EulerF&) const; + + // + //AxisAngle + RotationF(AngAxisF aa, UnitFormat format = Radians); + void set(AngAxisF aa, UnitFormat format = Radians); + + //As with Eulers, we make the assumption here that if not told otherwise, inbound rotations are in Degrees. + RotationF operator=(const AngAxisF&); + RotationF operator-(const AngAxisF&) const; + RotationF operator+(const AngAxisF&) const; + RotationF& operator-=(const AngAxisF&); + RotationF& operator+=(const AngAxisF&); + S32 operator==(const AngAxisF&) const; + S32 operator!=(const AngAxisF&) const; + + // + //Quat + RotationF(QuatF quat); + void set(QuatF _quat); + + RotationF operator=(const QuatF&); + RotationF operator-(const QuatF&) const; + RotationF operator+(const QuatF&) const; + RotationF& operator-=(const QuatF&); + RotationF& operator+=(const QuatF&); + S32 operator==(const QuatF&) const; + S32 operator!=(const QuatF&) const; + + // + //Matrix + RotationF(MatrixF mat); + void set(MatrixF _mat); + + RotationF operator=(const MatrixF&); + RotationF operator-(const MatrixF&) const; + RotationF operator+(const MatrixF&) const; + RotationF& operator-=(const MatrixF&); + RotationF& operator+=(const MatrixF&); + S32 operator==(const MatrixF&) const; + S32 operator!=(const MatrixF&) const; + + // + void interpolate(const RotationF& _pt1, const RotationF& _pt2, F32 _factor); + void lookAt(const Point3F& _origin, const Point3F& _target, const Point3F& _up = Point3F(0, 0, 1)); + + F32 len() const; + + void normalize(); + + //Non-converting operators + S32 operator ==(const RotationF &) const; + S32 operator !=(const RotationF &) const; + + RotationF operator+(const RotationF&) const; + RotationF& operator+=(const RotationF&); + RotationF operator-(const RotationF&) const; + RotationF& operator-=(const RotationF&); + + RotationF& operator=(const RotationF&); + + //Conversion stuffs + EulerF asEulerF(UnitFormat format = Radians) const; + AngAxisF asAxisAngle(UnitFormat format = Radians) const; + MatrixF asMatrixF() const; + QuatF asQuatF() const; +}; + +inline RotationF::RotationF() +{ + x = 0; + y = 0; + z = 0; + w = 0; + + mRotationType = AxisAngle; +} + +inline RotationF::RotationF(const RotationF& _copy) + : x(_copy.x), y(_copy.y), z(_copy.z), w(_copy.w), mRotationType(_copy.mRotationType) +{} + +inline int RotationF::operator ==(const RotationF& _rotation) const +{ + return (x == _rotation.x && y == _rotation.y && z == _rotation.z && w == _rotation.w); +} + +inline int RotationF::operator !=(const RotationF& _rotation) const +{ + return (x != _rotation.x || y != _rotation.y || z != _rotation.z || w != _rotation.w); +} + +//When it comes to actually trying to add rotations, we, in fact, actually multiply their data together. +//Since we're specifically operating on usability for RotationF, we'll operate on this, rather than the literal addition of the values +inline RotationF& RotationF::operator +=(const RotationF& _rotation) +{ + if (mRotationType == Euler) + { + x += _rotation.x; + y += _rotation.y; + z += _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + + tempMat.mul(tempMatAdd); + + this->set(tempMat); + } + + return *this; +} + +inline RotationF RotationF::operator +(const RotationF& _rotation) const +{ + RotationF result = *this; + + if (mRotationType == Euler) + { + result.x += _rotation.x; + result.y += _rotation.y; + result.z += _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + + tempMat.mul(tempMatAdd); + + result.set(tempMat); + } + + return result; +} + +//Much like addition, when subtracting, we're not literally subtracting the values, but infact multiplying the inverse. +//This subtracts the rotation angles to get the difference +inline RotationF& RotationF::operator -=(const RotationF& _rotation) +{ + if (mRotationType == Euler) + { + x -= _rotation.x; + y -= _rotation.y; + z -= _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + + tempMatAdd.inverse(); + + tempMat.mul(tempMatAdd); + + this->set(tempMat); + } + + return *this; +} + +inline RotationF RotationF::operator -(const RotationF& _rotation) const +{ + RotationF result = *this; + + if (mRotationType == Euler) + { + result.x += _rotation.x; + result.y += _rotation.y; + result.z += _rotation.z; + } + else + { + MatrixF tempMat = asMatrixF(); + MatrixF tempMatAdd = _rotation.asMatrixF(); + tempMatAdd.inverse(); + + tempMat.mul(tempMatAdd); + + result.set(tempMat); + } + + return result; +} + +inline RotationF& RotationF::operator =(const RotationF& _rotation) +{ + x = _rotation.x; + y = _rotation.y; + z = _rotation.z; + w = _rotation.w; + + mRotationType = _rotation.mRotationType; + + return *this; +} + +//==================================================================== +// Euler operators +//==================================================================== +inline RotationF RotationF::operator=(const EulerF& _euler) +{ + return RotationF(_euler, Radians); +} + +inline RotationF RotationF::operator-(const EulerF& _euler) const +{ + RotationF temp = *this; + temp -= RotationF(_euler, Radians); + return temp; +} + +inline RotationF RotationF::operator+(const EulerF& _euler) const +{ + RotationF temp = *this; + temp += RotationF(_euler, Radians); + return temp; +} + +inline RotationF& RotationF::operator-=(const EulerF& _euler) +{ + *this -= RotationF(_euler, Radians); + return *this; +} + +inline RotationF& RotationF::operator+=(const EulerF& _euler) +{ + *this += RotationF(_euler, Radians); + return *this; +} + +inline S32 RotationF::operator==(const EulerF& _euler) const +{ + return *this == RotationF(_euler); +} + +inline S32 RotationF::operator!=(const EulerF& _euler) const +{ + return *this != RotationF(_euler); +} + +//==================================================================== +// AxisAngle operators +//==================================================================== +inline RotationF RotationF::operator=(const AngAxisF& _aa) +{ + return RotationF(_aa, Radians); +} + +inline RotationF RotationF::operator-(const AngAxisF& _aa) const +{ + RotationF temp = *this; + temp -= RotationF(_aa, Radians); + return temp; +} + +inline RotationF RotationF::operator+(const AngAxisF& _aa) const +{ + RotationF temp = *this; + temp += RotationF(_aa, Radians); + return temp; +} + +inline RotationF& RotationF::operator-=(const AngAxisF& _aa) +{ + *this -= RotationF(_aa, Radians); + return *this; +} + +inline RotationF& RotationF::operator+=(const AngAxisF& _aa) +{ + *this += RotationF(_aa, Radians); + return *this; +} + +inline S32 RotationF::operator==(const AngAxisF& _aa) const +{ + return *this == RotationF(_aa); +} + +inline S32 RotationF::operator!=(const AngAxisF& _aa) const +{ + return *this != RotationF(_aa); +} + +//==================================================================== +// QuatF operators +//==================================================================== +inline RotationF RotationF::operator=(const QuatF& _quat) +{ + return RotationF(_quat); +} + +inline RotationF RotationF::operator-(const QuatF& _quat) const +{ + RotationF temp = *this; + temp -= RotationF(_quat); + return temp; +} + +inline RotationF RotationF::operator+(const QuatF& _quat) const +{ + RotationF temp = *this; + temp += RotationF(_quat); + return temp; +} + +inline RotationF& RotationF::operator-=(const QuatF& _quat) +{ + *this -= RotationF(_quat); + return *this; +} + +inline RotationF& RotationF::operator+=(const QuatF& _quat) +{ + *this += RotationF(_quat); + return *this; +} + +inline S32 RotationF::operator==(const QuatF& _quat) const +{ + return *this == RotationF(_quat); +} + +inline S32 RotationF::operator!=(const QuatF& _quat) const +{ + return *this != RotationF(_quat); +} + +//==================================================================== +// MatrixF operators +//==================================================================== +inline RotationF RotationF::operator=(const MatrixF& _mat) +{ + return RotationF(_mat); +} + +inline RotationF RotationF::operator-(const MatrixF& _mat) const +{ + RotationF temp = *this; + temp -= RotationF(_mat); + return temp; +} + +inline RotationF RotationF::operator+(const MatrixF& _mat) const +{ + RotationF temp = *this; + temp += RotationF(_mat); + return temp; +} + +inline RotationF& RotationF::operator-=(const MatrixF& _mat) +{ + *this -= RotationF(_mat); + return *this; +} + +inline RotationF& RotationF::operator+=(const MatrixF& _mat) +{ + *this += RotationF(_mat); + return *this; +} + +inline S32 RotationF::operator==(const MatrixF& _mat) const +{ + return *this == RotationF(_mat); +} + +inline S32 RotationF::operator!=(const MatrixF& _mat) const +{ + return *this != RotationF(_mat); +} + +#endif // MROTATION_H diff --git a/Engine/source/math/mathIO.h b/Engine/source/math/mathIO.h index ee2f0dcad4..6acbc1b522 100644 --- a/Engine/source/math/mathIO.h +++ b/Engine/source/math/mathIO.h @@ -149,6 +149,20 @@ inline bool mathRead(Stream& stream, EaseF* e) return success; } +inline bool mathRead(Stream& stream, RotationF* e) +{ + bool success = stream.read(&e->x); + success &= stream.read(&e->y); + success &= stream.read(&e->z); + success &= stream.read(&e->w); + + U32 rotType; + success &= stream.read(&rotType); + e->mRotationType = (RotationF::RotationTypes)rotType; + + return success; +} + //------------------------------------------------------------------------------ //-------------------------------------- WRITING // @@ -263,5 +277,15 @@ inline bool mathWrite(Stream& stream, const EaseF& e) return success; } +inline bool mathWrite(Stream& stream, const RotationF& e) +{ + bool success = stream.write(e.x); + success &= stream.write(e.y); + success &= stream.write(e.z); + success &= stream.write(e.w); + success &= stream.write(e.mRotationType); + return success;; +} + #endif //_MATHIO_H_ diff --git a/Engine/source/math/mathTypes.cpp b/Engine/source/math/mathTypes.cpp index 29c500b609..dd018b2a4d 100644 --- a/Engine/source/math/mathTypes.cpp +++ b/Engine/source/math/mathTypes.cpp @@ -36,7 +36,7 @@ #include "math/mRandom.h" #include "math/mEase.h" #include "math/mathUtils.h" - +#include "math/mRotation.h" #include "core/strings/stringUnit.h" IMPLEMENT_SCOPE( MathTypes, Math,, "" ); @@ -113,7 +113,14 @@ IMPLEMENT_STRUCT( EaseF, EaseF, MathTypes, "" ) END_IMPLEMENT_STRUCT; - +IMPLEMENT_STRUCT(RotationF, + RotationF, MathTypes, + "") + FIELD(x, x, 1, "X coordinate.") + FIELD(y, y, 1, "Y coordinate.") + FIELD(z, z, 1, "Z coordinate.") + FIELD(w, w, 1, "W coordinate.") +END_IMPLEMENT_STRUCT; //----------------------------------------------------------------------------- // TypePoint2I @@ -572,6 +579,55 @@ ConsoleSetType( TypeEaseF ) } } +//----------------------------------------------------------------------------- +// TypeRotationF +//----------------------------------------------------------------------------- +ConsoleType(RotationF, TypeRotationF, RotationF, "") +//ImplementConsoleTypeCasters( TypeRotationF, RotationF ) + +ConsoleGetType(TypeRotationF) +{ + RotationF *pt = (RotationF *)dptr; + static const U32 bufSize = 256; + char* returnBuffer = Con::getReturnBuffer(bufSize); + + EulerF out = pt->asEulerF(RotationF::Degrees); + dSprintf(returnBuffer, bufSize, "%g %g %g", out.x, out.y, out.z); + + return returnBuffer; +} + +ConsoleSetType(TypeRotationF) +{ + if (argc == 1) + { + U32 elements = StringUnit::getUnitCount(argv[0], " \t\n"); + if (elements == 3) + { + EulerF in; + dSscanf(argv[0], "%g %g %g", &in.x, &in.y, &in.z); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + else + { + AngAxisF in; + dSscanf(argv[0], "%g %g %g %g", &in.axis.x, &in.axis.y, &in.axis.z, &in.angle); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + } + else if (argc == 3) + { + EulerF in(dAtof(argv[0]), dAtof(argv[1]), dAtof(argv[2])); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + else if (argc == 4) + { + AngAxisF in(Point3F(dAtof(argv[0]), dAtof(argv[1]), dAtof(argv[2])), dAtof(argv[3])); + ((RotationF *)dptr)->set(in, RotationF::Degrees); + } + else + Con::printf("RotationF must be set as { x, y, z, w } or \"x y z w\""); +} //----------------------------------------------------------------------------- diff --git a/Engine/source/math/mathTypes.h b/Engine/source/math/mathTypes.h index b17329cf86..043d59e1fe 100644 --- a/Engine/source/math/mathTypes.h +++ b/Engine/source/math/mathTypes.h @@ -43,7 +43,7 @@ class Box3F; class EaseF; class AngAxisF; class TransformF; - +class RotationF; DECLARE_SCOPE( MathTypes ); @@ -60,6 +60,7 @@ DECLARE_STRUCT( AngAxisF ); DECLARE_STRUCT( TransformF ); DECLARE_STRUCT( Box3F ); DECLARE_STRUCT( EaseF ); +DECLARE_STRUCT(RotationF); // Legacy console types. @@ -77,6 +78,6 @@ DefineConsoleType( TypeAngAxisF, AngAxisF ) DefineConsoleType( TypeTransformF, TransformF ) DefineConsoleType( TypeBox3F, Box3F ) DefineConsoleType( TypeEaseF, EaseF ) - +DefineConsoleType(TypeRotationF, RotationF) #endif From 95ae0b98631a51551d754c6be3f150e4ff18a95c Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 12 May 2016 23:31:15 -0500 Subject: [PATCH 214/324] Removes the old component code and moves the IProcessInput interface file into platform/input/ directory. --- .../source/component/componentInterface.cpp | 82 ---- Engine/source/component/componentInterface.h | 234 --------- .../dynamicConsoleMethodComponent.cpp | 209 -------- .../component/dynamicConsoleMethodComponent.h | 89 ---- .../component/moreAdvancedComponent.cpp | 60 --- .../source/component/moreAdvancedComponent.h | 55 --- Engine/source/component/simComponent.cpp | 452 ------------------ Engine/source/component/simComponent.h | 256 ---------- Engine/source/component/simpleComponent.cpp | 31 -- Engine/source/component/simpleComponent.h | 159 ------ .../test/moreAdvancedComponentTest.cpp | 68 --- .../component/test/simComponentTest.cpp | 149 ------ .../component/test/simpleComponentTest.cpp | 131 ----- Engine/source/gui/core/guiCanvas.h | 2 +- .../input}/IProcessInput.h | 0 .../windowManager/windowInputGenerator.cpp | 2 +- 16 files changed, 2 insertions(+), 1977 deletions(-) delete mode 100644 Engine/source/component/componentInterface.cpp delete mode 100644 Engine/source/component/componentInterface.h delete mode 100644 Engine/source/component/dynamicConsoleMethodComponent.cpp delete mode 100644 Engine/source/component/dynamicConsoleMethodComponent.h delete mode 100644 Engine/source/component/moreAdvancedComponent.cpp delete mode 100644 Engine/source/component/moreAdvancedComponent.h delete mode 100644 Engine/source/component/simComponent.cpp delete mode 100644 Engine/source/component/simComponent.h delete mode 100644 Engine/source/component/simpleComponent.cpp delete mode 100644 Engine/source/component/simpleComponent.h delete mode 100644 Engine/source/component/test/moreAdvancedComponentTest.cpp delete mode 100644 Engine/source/component/test/simComponentTest.cpp delete mode 100644 Engine/source/component/test/simpleComponentTest.cpp rename Engine/source/{component/interfaces => platform/input}/IProcessInput.h (100%) diff --git a/Engine/source/component/componentInterface.cpp b/Engine/source/component/componentInterface.cpp deleted file mode 100644 index e489ca0f2c..0000000000 --- a/Engine/source/component/componentInterface.cpp +++ /dev/null @@ -1,82 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#include "component/simComponent.h" -#include "component/componentInterface.h" -#include "core/strings/findMatch.h" -#include "core/stringTable.h" - -bool ComponentInterfaceCache::add( const char *type, const char *name, const SimComponent *owner, ComponentInterface *cinterface ) -{ - if( ( mInterfaceList.size() == 0 ) || ( enumerate( NULL, type, name, owner ) == 0 ) ) - { - mInterfaceList.increment(); - // CodeReview [tom, 3/9/2007] Seems silly to keep calling last(), why not cache the var? Yes, I know I am pedantic. - mInterfaceList.last().type = ( type == NULL ? NULL : StringTable->insert( type ) ); - mInterfaceList.last().name = ( name == NULL ? NULL : StringTable->insert( name ) ); - mInterfaceList.last().owner = owner; - mInterfaceList.last().iface = cinterface; - - return true; - } - - return false; -} - -//------------------------------------------------------------------------------ - -void ComponentInterfaceCache::clear() -{ - mInterfaceList.clear(); -} - -//------------------------------------------------------------------------------ - -U32 ComponentInterfaceCache::enumerate( ComponentInterfaceList *list, const char *type /* = NULL */, - const char *name /* = NULL */, const SimComponent *owner /* = NULL */, bool notOwner /* = false */ ) const -{ - U32 numMatches = 0; - - for( _InterfaceEntryItr i = mInterfaceList.begin(); i != mInterfaceList.end(); i++ ) - { - // Early out if limiting results by component owner - if( owner != NULL && ( - ( (*i).owner == owner && notOwner ) || - ( (*i).owner != owner && !notOwner ) ) ) - continue; - - // Match the type, short circuit if type == NULL - if( type == NULL || FindMatch::isMatch( type, (*i).type ) ) - { - // Match the name - if( name == NULL || FindMatch::isMatch( name, (*i).name ) ) - { - numMatches++; - - if( list != NULL ) - list->push_back( (*i).iface ); - } - } - } - - return numMatches; -} \ No newline at end of file diff --git a/Engine/source/component/componentInterface.h b/Engine/source/component/componentInterface.h deleted file mode 100644 index 311862a1cd..0000000000 --- a/Engine/source/component/componentInterface.h +++ /dev/null @@ -1,234 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _COMPONENTINTERFACE_H_ -#define _COMPONENTINTERFACE_H_ - -#ifndef _TVECTOR_H_ -#include "core/util/tVector.h" -#endif - -#ifndef _SIMOBJECT_H_ -#include "console/simObject.h" -#endif - -#include "core/util/safeDelete.h" - - -class SimComponent; - - -// CodeReview [patw, 2, 13, 2007] The issue I have not addressed in this class is -// interface locking. I think that we want to do this, for sure, but I also want -// to keep it as light-weight as possible. For the most part, there should only -// ever be one thing doing something with a component at one time, but I can see -// many situations where this wouldn't be the case. When we decide to address -// the issues of locking, I believe it should be done here, at the ComponentInterface -// level. I would like lock functionality to be as centralized as possible, and -// so this is the place for it. The functionality is critical for safe useage of -// the ComponentProperty class, so implementation here would also be ideal. - -// CodeReview [patw, 2, 14, 2007] This really should be a ref-counted object -class ComponentInterface -{ - friend class SimComponent; -private: - SimObjectPtr mOwner; ///< SimComponent will directly modify this value - -public: - /// Default constructor - ComponentInterface() : mOwner(NULL) {}; - - /// Destructor - virtual ~ComponentInterface() - { - mOwner = NULL; - } - - /// This will return true if the interface is valid - virtual bool isValid() const - { - return mOwner != NULL; - } - - /// Get the owner of this interface - SimComponent *getOwner() { return mOwner; } - const SimComponent *getOwner() const { return mOwner; } -}; - -typedef VectorPtr ComponentInterfaceList; -typedef VectorPtr::iterator ComponentInterfaceListIterator; - -// These two asserts I found myself wanting a lot when doing interface methods -#ifdef TORQUE_ENABLE_ASSERTS -# define VALID_INTERFACE_ASSERT(OwningClassType) \ - AssertFatal( isValid(), "Interface validity check failed." ); \ - AssertFatal( dynamic_cast( getOwner() ) != NULL, avar( "Owner is not an instance of %s", #OwningClassType ) ) -#else -# define VALID_INTERFACE_ASSERT(OwningClassType) -#endif - -/// This class is designed to wrap an existing class or type easily to allow -/// a SimComponent to expose a property with custom processing code in an efficient -/// and safe way. Specialized templates could be written which include validation -/// on sets, and processing on gets. -/// -/// This class has a lot of "blow your leg off" potential, if you have bad aim. -/// I think that a lot of very intuitive functionality can be gained from using -/// this properly, however when implementing a specialized template, be mindful -/// of what you are doing, and - -// CodeReview [patw, 2, 13, 2007] I am very interested in making this as thin as -// possible. I really like the possibilities that it exposes as far as exposing -// "properties" to other components. I want it to be performant, however, so -// if anyone has notes on this, mark up the source, e-mail me, whatever. -template -class ComponentProperty : public ComponentInterface -{ - typedef ComponentInterface Parent; - -protected: - T *mValuePtr; - - // ComponentInterface Overrides -public: - - // Override this to add a check for valid memory. - virtual bool isValid() const - { - return ( mValuePtr != NULL ) && Parent::isValid(); - } - - // Operator overloads -public: - /// Dereferencing a value interface will allow get to do any processing and - /// return the reference to that - const T &operator*() - { - return get(); - } - - /// Assignment operator will invoke set. - const T &operator=( const T &lval ) - { - return set( lval ); - } - - // Constructors/Destructors, specialize these if needed -public: - /// Default Constructor. - ComponentProperty() : mValuePtr( NULL ) - { - mValuePtr = new T; - } - - /// Copy constructor - ComponentProperty( const T © ) - { - ComponentProperty(); - - // CodeReview [patw, 2, 13, 2007] So, the reasoning here is that I want to - // use the functionality that a specialized template implements in the set - // method. See the notes on the set method implementation. - set( copy ); - } - - /// Destructor, destroy memory - virtual ~ComponentProperty() - { - SAFE_DELETE( mValuePtr ); - } - - // This is the ComponentProperty interface that specializations of the class - // will be interested in. -public: - - /// Get the value associated with this interface. Processing code can be done - /// here for specialized implementations. - virtual const T &get() // 'const' is intentionally not used as a modifier here - { - return *mValuePtr; - } - - /// Set the value associated with this interface. Validation/processing code - /// can be done here. The copy-constructor uses the set method to do it's copy - /// so be mindful of that, or specialize the copy-constructor. - virtual const T &set( const T &t ) - { - // CodeReview [patw, 2, 13, 2007] So I am using the = operator here. Do you - // guys think that this should be the default behavior? I am trying to keep - // everything as object friendly as possible, so I figured I'd use this. - *mValuePtr = t; - return *mValuePtr; - } -}; - -/// This class is just designed to isolate the functionality of querying for, and -/// managing interfaces. -class ComponentInterfaceCache -{ - // CodeReview [patw, 2, 14, 2007] When we move this whole system to Juggernaught - // we may want to consider making safe pointers for ComponentInterfaces. Not - // sure why I put this note here. -private: - struct _InterfaceEntry - { - ComponentInterface *iface; - StringTableEntry type; - StringTableEntry name; - const SimComponent *owner; - }; - - Vector<_InterfaceEntry> mInterfaceList; - typedef Vector<_InterfaceEntry>::const_iterator _InterfaceEntryItr; - -public: - /// Add an interface to the cache. This function will return true if the interface - /// is added successfully. An interface will not be added successfully if an entry - /// in the list with the same values for 'type' and 'name' is present in the list. - /// - /// @param type Type of the interface being added. If NULL is passed, it will match any type string queried. - /// @param name Name of interface being added. If NULL is passed, it will match any name string queried. - /// @param owner The owner of the ComponentInterface being cached - /// @param cinterface The ComponentInterface being cached - virtual bool add( const char *type, const char *name, const SimComponent *owner, ComponentInterface *cinterface ); - - /// Clear the interface cache. This does not perform any operations on the contents - /// of the list. - virtual void clear(); - - /// Query the list for all of the interfaces it stores references to that match - /// the 'type' and 'name' parameters. The results of the query will be appended - /// to the list specified. Pattern matching is done using core/findMatch.h; for - /// more information on matching, see that code/header pair. Passing NULL for - /// one of these fields will match all values for that field. The return value - /// for the method will be the number of interfaces which match the query. - /// - /// @param list The list that this method will append search results on to. It is possible to pass NULL here and just receive the return value. - /// @param type An expression which the 'type' field on an added object must match to be included in results - /// @param name An expression which the 'name' field on an added object must match to be included in results - /// @param owner Limit results to components owned/not-owned by this SimComponent (see next param) - /// @param notOwner If set to true, this will enumerate only interfaces NOT owned by 'owner' - virtual U32 enumerate( ComponentInterfaceList *list, const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ) const; -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/dynamicConsoleMethodComponent.cpp b/Engine/source/component/dynamicConsoleMethodComponent.cpp deleted file mode 100644 index 75a88930ce..0000000000 --- a/Engine/source/component/dynamicConsoleMethodComponent.cpp +++ /dev/null @@ -1,209 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#include "component/dynamicConsoleMethodComponent.h" -#include "console/stringStack.h" - -extern StringStack STR; -extern ConsoleValueStack CSTK; - -IMPLEMENT_CO_NETOBJECT_V1(DynamicConsoleMethodComponent); - -ConsoleDocClass( DynamicConsoleMethodComponent, - "@brief Console object used for calling methods defined in script, from within other classes.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -//----------------------------------------------------------- -// Function name: SimComponent::handlesConsoleMethod -// Summary: -//----------------------------------------------------------- -bool DynamicConsoleMethodComponent::handlesConsoleMethod( const char *fname, S32 *routingId ) -{ - // CodeReview: Host object is now given priority over components for method - // redirection. [6/23/2007 Pat] - - // On this object? - if( isMethod( fname ) ) - { - *routingId = -1; // -1 denotes method on object -#ifdef TORQUE_DEBUG - // Inject Method. - injectMethodCall( fname ); -#endif - return true; - } - - // on this objects components? - S32 nI = 0; - VectorPtr &componentList = lockComponentList(); - for( SimComponentIterator nItr = componentList.begin(); nItr != componentList.end(); nItr++, nI++ ) - { - SimObject *pComponent = dynamic_cast(*nItr); - if( pComponent != NULL && pComponent->isMethod( fname ) ) - { - *routingId = -2; // -2 denotes method on component - unlockComponentList(); - -#ifdef TORQUE_DEBUG - // Inject Method. - injectMethodCall( fname ); -#endif - return true; - } - } - unlockComponentList(); - - return false; -} - -const char *DynamicConsoleMethodComponent::callMethod( S32 argc, const char* methodName, ... ) -{ - const char *argv[128]; - methodName = StringTable->insert( methodName ); - - argc++; - - va_list args; - va_start(args, methodName); - for(S32 i = 0; i < argc; i++) - argv[i+2] = va_arg(args, const char *); - va_end(args); - - // FIXME: the following seems a little excessive. I wonder why it's needed? - argv[0] = methodName; - argv[1] = methodName; - argv[2] = methodName; - - StringStackConsoleWrapper argsw(argc, argv); - - return callMethodArgList( argsw.count() , argsw ); -} - -#ifdef TORQUE_DEBUG -/// Inject Method Call. -void DynamicConsoleMethodComponent::injectMethodCall( const char* method ) -{ - // Get Call Method. - StringTableEntry callMethod = StringTable->insert( method ); - - // Find Call Method Metric. - callMethodMetricType::Iterator itr = mCallMethodMetrics.find( callMethod ); - - // Did we find the method? - if ( itr == mCallMethodMetrics.end() ) - { - // No, so set the call count to initially be 1. - itr = mCallMethodMetrics.insert( callMethod, 1 ); - } - else - { - // Increment Call Count. - itr->value++; - } -} -#endif - -const char* DynamicConsoleMethodComponent::callMethodArgList( U32 argc, ConsoleValueRef argv[], bool callThis /* = true */ ) -{ -#ifdef TORQUE_DEBUG - injectMethodCall( argv[0] ); -#endif - - return _callMethod( argc, argv, callThis ); -} - -// Call all components that implement methodName giving them a chance to operate -// Components are called in reverse order of addition -const char *DynamicConsoleMethodComponent::_callMethod( U32 argc, ConsoleValueRef argv[], bool callThis /* = true */ ) -{ - // Set Owner - SimObject *pThis = dynamic_cast( this ); - AssertFatal( pThis, "DynamicConsoleMethodComponent::callMethod : this should always exist!" ); - - const char *cbName = StringTable->insert(argv[0]); - - if( getComponentCount() > 0 ) - { - lockComponentList(); - for( S32 i = getComponentCount() - 1; i >= 0; i-- ) - //for( SimComponentIterator nItr = componentList.end(); nItr != componentList.begin(); nItr-- ) - { - argv[0] = cbName; - - SimComponent *pComponent = dynamic_cast( getComponent( i ) ); - AssertFatal( pComponent, "DynamicConsoleMethodComponent::callMethod - NULL component in list!" ); - - DynamicConsoleMethodComponent *pThisComponent = dynamic_cast( pComponent ); - AssertFatal( pThisComponent, "DynamicConsoleMethodComponent::callMethod - Non DynamicConsoleMethodComponent component attempting to callback!"); - - // Prevent stack corruption - STR.pushFrame(); - CSTK.pushFrame(); - // -- - - // Only call on first depth components - // Should isMethod check these calls? [11/22/2006 justind] - if(pComponent->isEnabled()) - Con::execute( pThisComponent, argc, argv ); - - // Prevent stack corruption - STR.popFrame(); - CSTK.popFrame(); - // -- - - // Bail if this was the first element - //if( nItr == componentList.begin() ) - // break; - } - unlockComponentList(); - } - - // Prevent stack corruption - STR.pushFrame(); - CSTK.pushFrame(); - // -- - - // Set Owner Field - const char* result = ""; - if(callThis) - result = Con::execute( pThis, argc, argv, true ); // true - exec method onThisOnly, not on DCMCs - - // Prevent stack corruption - STR.popFrame(); - CSTK.popFrame(); - // -- - return result; -} - -ConsoleMethod( DynamicConsoleMethodComponent, callMethod, void, 3, 64 , "(methodName, argi) Calls script defined method\n" - "@param methodName The method's name as a string\n" - "@param argi Any arguments to pass to the method\n" - "@return No return value" - "@note %obj.callMethod( %methodName, %arg1, %arg2, ... );\n") - -{ - object->callMethodArgList( argc - 1, argv + 2 ); -} - -////////////////////////////////////////////////////////////////////////// - diff --git a/Engine/source/component/dynamicConsoleMethodComponent.h b/Engine/source/component/dynamicConsoleMethodComponent.h deleted file mode 100644 index 32e594cd6b..0000000000 --- a/Engine/source/component/dynamicConsoleMethodComponent.h +++ /dev/null @@ -1,89 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _DYNAMIC_CONSOLEMETHOD_COMPONENT_H_ -#define _DYNAMIC_CONSOLEMETHOD_COMPONENT_H_ - -#ifndef _SIMCOMPONENT_H_ -#include "component/simComponent.h" -#endif - -#ifndef _CONSOLEINTERNAL_H_ -#include "console/consoleInternal.h" -#endif - -#ifndef _ICALLMETHOD_H_ -#include "console/ICallMethod.h" -#endif - -#ifdef TORQUE_DEBUG -#ifndef _TDICTIONARY_H_ -#include "core/util/tDictionary.h" -#endif -#endif - -//----------------------------------------------------------------------------- - -class DynamicConsoleMethodComponent : public SimComponent, public ICallMethod -{ -#ifdef TORQUE_DEBUG -public: - typedef Map callMethodMetricType; -#endif - -private: - typedef SimComponent Parent; - -#ifdef TORQUE_DEBUG - // Call Method Debug Stat. - callMethodMetricType mCallMethodMetrics; -#endif - -protected: - /// Internal callMethod : Actually does component notification and script method execution - /// @attention This method does some magic to the argc argv to make Con::execute act properly - /// as such it's internal and should not be exposed or used except by this class - virtual const char* _callMethod( U32 argc, ConsoleValueRef argv[], bool callThis = true ); - -public: - -#ifdef TORQUE_DEBUG - /// Call Method Metrics. - const callMethodMetricType& getCallMethodMetrics( void ) const { return mCallMethodMetrics; }; - - /// Inject Method Call. - void injectMethodCall( const char* method ); -#endif - - /// Call Method - virtual const char* callMethodArgList( U32 argc, ConsoleValueRef argv[], bool callThis = true ); - - /// Call Method format string - const char* callMethod( S32 argc, const char* methodName, ... ); - - // query for console method data - virtual bool handlesConsoleMethod(const char * fname, S32 * routingId); - - DECLARE_CONOBJECT(DynamicConsoleMethodComponent); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/moreAdvancedComponent.cpp b/Engine/source/component/moreAdvancedComponent.cpp deleted file mode 100644 index 7ddfac688f..0000000000 --- a/Engine/source/component/moreAdvancedComponent.cpp +++ /dev/null @@ -1,60 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#include "component/moreAdvancedComponent.h" - -// unitTest_runTests("Component/MoreAdvancedComponent"); - -////////////////////////////////////////////////////////////////////////// - -IMPLEMENT_CONOBJECT(MoreAdvancedComponent); - -ConsoleDocClass( MoreAdvancedComponent, - "@brief This is a slightly more advanced component which will be used to demonstrate " - "components which are dependent on other components.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -bool MoreAdvancedComponent::onComponentRegister( SimComponent *owner ) -{ - if( !Parent::onComponentRegister( owner ) ) - return false; - - // This will return the first interface of type SimpleComponent that is cached - // on the parent object. - mSCInterface = owner->getInterface(); - - // If we can't find this interface, our component can't function, so false - // will be returned, and this will signify, to the top-level component, that it - // should fail the onAdd call. - return ( mSCInterface != NULL ); -} - -bool MoreAdvancedComponent::testDependentInterface() -{ - // These two requirements must be met in order for the test to proceed, so - // lets check them. - if( mSCInterface == NULL || !mSCInterface->isValid() ) - return false; - - return mSCInterface->isFortyTwo( 42 ); -} \ No newline at end of file diff --git a/Engine/source/component/moreAdvancedComponent.h b/Engine/source/component/moreAdvancedComponent.h deleted file mode 100644 index d4891202d2..0000000000 --- a/Engine/source/component/moreAdvancedComponent.h +++ /dev/null @@ -1,55 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _MOREADVANCEDCOMPONENT_H_ -#define _MOREADVANCEDCOMPONENT_H_ - -#ifndef _SIMPLECOMPONENT_H_ -#include "component/simpleComponent.h" -#endif - -/// This is a slightly more advanced component which will be used to demonstrate -/// components which are dependent on other components. -class MoreAdvancedComponent : public SimComponent -{ - typedef SimComponent Parent; - -protected: - // This component is going to be dependent on a SimpleComponentInterface being - // queried off of it's parent object. This will store that interface that - // will get queried during onComponentRegister() - SimpleComponentInterface *mSCInterface; - -public: - DECLARE_CONOBJECT(MoreAdvancedComponent); - - // Firstly, take a look at the documentation for this function in simComponent.h. - // We will be overloading this method to query the component heirarchy for our - // dependent interface, as noted above. - virtual bool onComponentRegister( SimComponent *owner ); - - // This function will try to execute a function through the interface that this - // component is dependent on. - virtual bool testDependentInterface(); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/simComponent.cpp b/Engine/source/component/simComponent.cpp deleted file mode 100644 index 49cbef22e0..0000000000 --- a/Engine/source/component/simComponent.cpp +++ /dev/null @@ -1,452 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#include "platform/platform.h" -#include "console/simObject.h" -#include "console/consoleTypes.h" -#include "component/simComponent.h" -#include "core/stream/stream.h" -#include "console/engineAPI.h" - -SimComponent::SimComponent() : mOwner( NULL ) -{ - mComponentList.clear(); - mMutex = Mutex::createMutex(); - - mEnabled = true; - mTemplate = false; -} - -SimComponent::~SimComponent() -{ - Mutex::destroyMutex( mMutex ); - mMutex = NULL; -} - -IMPLEMENT_CO_NETOBJECT_V1(SimComponent); - -ConsoleDocClass( SimComponent, - "@brief Legacy component system, soon to be deprecated.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -bool SimComponent::onAdd() -{ - if( !Parent::onAdd() ) - return false; - - // Register - _registerInterfaces( this ); - - if( !_registerComponents( this ) ) - return false; - - //Con::executef( this, 1, "onAdd" ); - - return true; -} - -void SimComponent::_registerInterfaces( SimComponent *owner ) -{ - // First call this to expose the interfaces that this component will cache - // before examining the list of subcomponents - registerInterfaces( owner ); - - // Early out to avoid mutex lock and such - if( !hasComponents() ) - return; - - VectorPtr &components = lockComponentList(); - for( SimComponentIterator i = components.begin(); i != components.end(); i++ ) - { - (*i)->mOwner = owner; - - // Tell the component itself to register it's interfaces - (*i)->registerInterfaces( owner ); - - (*i)->mOwner = NULL; // This tests to see if the object's onComponentRegister call will call up to the parent. - - // Recurse - (*i)->_registerInterfaces( owner ); - } - - unlockComponentList(); -} - -bool SimComponent::_registerComponents( SimComponent *owner ) -{ - // This method will return true if the object contains no components. See the - // documentation for SimComponent::onComponentRegister for more information - // on this behavior. - bool ret = true; - - // If this doesn't contain components, don't even lock the list. - if( hasComponents() ) - { - VectorPtr &components = lockComponentList(); - for( SimComponentIterator i = components.begin(); i != components.end(); i++ ) - { - if( !(*i)->onComponentRegister( owner ) ) - { - ret = false; - break; - } - - AssertFatal( (*i)->mOwner == owner, "Component failed to call parent onComponentRegister!" ); - - // Recurse - if( !(*i)->_registerComponents( owner ) ) - { - ret = false; - break; - } - } - - unlockComponentList(); - } - - return ret; -} - -void SimComponent::_unregisterComponents() -{ - if( !hasComponents() ) - return; - - VectorPtr &components = lockComponentList(); - for( SimComponentIterator i = components.begin(); i != components.end(); i++ ) - { - (*i)->onComponentUnRegister(); - - AssertFatal( (*i)->mOwner == NULL, "Component failed to call parent onUnRegister" ); - - // Recurse - (*i)->_unregisterComponents(); - } - - unlockComponentList(); -} - -void SimComponent::onRemove() -{ - //Con::executef(this, 1, "onRemove"); - - _unregisterComponents(); - - // Delete all components - VectorPtr&componentList = lockComponentList(); - while(componentList.size() > 0) - { - SimComponent *c = componentList[0]; - componentList.erase( componentList.begin() ); - - if( c->isProperlyAdded() ) - c->deleteObject(); - else if( !c->isRemoved() && !c->isDeleted() ) - delete c; - // else, something else is deleting this, don't mess with it - } - unlockComponentList(); - - Parent::onRemove(); -} - -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::processArguments(S32 argc, ConsoleValueRef *argv) -{ - for(S32 i = 0; i < argc; i++) - { - SimComponent *obj = dynamic_cast (Sim::findObject(argv[i]) ); - if(obj) - addComponent(obj); - else - Con::printf("SimComponent::processArguments - Invalid Component Object \"%s\"", (const char*)argv[i]); - } - return true; -} - -////////////////////////////////////////////////////////////////////////// - -void SimComponent::initPersistFields() -{ - addGroup("Component"); - - addProtectedField( "Template", TypeBool, Offset(mTemplate, SimComponent), - &setIsTemplate, &defaultProtectedGetFn, - "Places the object in a component set for later use in new levels." ); - - endGroup("Component"); - - // Call Parent. - Parent::initPersistFields(); -} - -//------------------------------------------------------------------------------ - -bool SimComponent::getInterfaces( ComponentInterfaceList *list, const char *type /* = NULL */, const char *name /* = NULL */, - const SimComponent *owner /* = NULL */, bool notOwner /* = false */ ) -{ - AssertFatal( list != NULL, "Passing NULL for a list is not supported functionality for SimComponents." ); - return ( mInterfaceCache.enumerate( list, type, name, owner, notOwner ) > 0 ); -} - -bool SimComponent::registerCachedInterface( const char *type, const char *name, SimComponent *interfaceOwner, ComponentInterface *cinterface ) -{ - if( mInterfaceCache.add( type, name, interfaceOwner, cinterface ) ) - { - cinterface->mOwner = interfaceOwner; - - // Recurse - if( mOwner != NULL ) - return mOwner->registerCachedInterface( type, name, interfaceOwner, cinterface ); - - return true; - } - - // So this is not a good assert, because it will get triggered due to the recursive - // nature of interface caching. I want to keep it here, though, just so nobody - // else thinks, "Oh I'll add an assert here." - // - //AssertFatal( false, avar( "registerCachedInterface failed, probably because interface with type '%s', name '%s' and owner with SimObjectId '%d' already exists", - // type, name, interfaceOwner->getId() ) ); - - return false; -} - -////////////////////////////////////////////////////////////////////////// -// Component Management -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::addComponentFromField( void* obj, const char* data ) -{ - SimComponent *pComponent = dynamic_cast( Sim::findObject( data ) ); - if( pComponent != NULL ) - static_cast(obj)->addComponent( pComponent ); - return false; -} - -// Add Component to this one -bool SimComponent::addComponent( SimComponent *component ) -{ - AssertFatal( dynamic_cast(component), "SimComponent - Cannot add non SimObject derived components!" ); - - MutexHandle mh; - if( mh.lock( mMutex, true ) ) - { - for( SimComponentIterator nItr = mComponentList.begin(); nItr != mComponentList.end(); nItr++ ) - { - SimComponent *pComponent = dynamic_cast(*nItr); - AssertFatal( pComponent, "SimComponent::addComponent - NULL component in list!" ); - if( pComponent == component ) - return true; - } - - if(component->onComponentAdd(this)) - { - component->mOwner = this; - mComponentList.push_back( component ); - return true; - } - } - - return false; -} - -// Remove Component from this one -bool SimComponent::removeComponent( SimComponent *component ) -{ - MutexHandle mh; - if( mh.lock( mMutex, true ) ) - { - for( SimComponentIterator nItr = mComponentList.begin(); nItr != mComponentList.end(); nItr++ ) - { - SimComponent *pComponent = dynamic_cast(*nItr); - AssertFatal( pComponent, "SimComponent::removeComponent - NULL component in list!" ); - if( pComponent == component ) - { - AssertFatal( component->mOwner == this, "Somehow we contain a component who doesn't think we are it's owner." ); - (*nItr)->onComponentRemove(this); - component->mOwner = NULL; - mComponentList.erase( nItr ); - return true; - } - } - } - return false; -} - -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::onComponentAdd(SimComponent *target) -{ - Con::executef(this, "onComponentAdd", Con::getIntArg(target->getId())); - return true; -} - -void SimComponent::onComponentRemove(SimComponent *target) -{ - Con::executef(this, "onComponentRemove", Con::getIntArg(target->getId())); -} - -////////////////////////////////////////////////////////////////////////// - -ComponentInterface *SimComponent::getInterface(const char *type /* = NULL */, const char *name /* = NULL */, - const SimComponent *owner /* = NULL */, bool notOwner /* = false */) -{ - ComponentInterfaceList iLst; - - if( getInterfaces( &iLst, type, name, owner, notOwner ) ) - return iLst[0]; - - return NULL; -} - -////////////////////////////////////////////////////////////////////////// - -bool SimComponent::writeField(StringTableEntry fieldname, const char* value) -{ - if (!Parent::writeField(fieldname, value)) - return false; - - if( fieldname == StringTable->insert("owner") ) - return false; - - return true; -} - -void SimComponent::write(Stream &stream, U32 tabStop, U32 flags /* = 0 */) -{ - MutexHandle handle; - handle.lock(mMutex); // When this goes out of scope, it will unlock it - - // export selected only? - if((flags & SelectedOnly) && !isSelected()) - { - for(U32 i = 0; i < mComponentList.size(); i++) - mComponentList[i]->write(stream, tabStop, flags); - - return; - } - - stream.writeTabs(tabStop); - char buffer[1024]; - dSprintf(buffer, sizeof(buffer), "new %s(%s) {\r\n", getClassName(), getName() ? getName() : ""); - stream.write(dStrlen(buffer), buffer); - writeFields(stream, tabStop + 1); - - if(mComponentList.size()) - { - stream.write(2, "\r\n"); - - stream.writeTabs(tabStop+1); - stream.writeLine((U8 *)"// Note: This is a list of behaviors, not arbitrary SimObjects as in a SimGroup or SimSet.\r\n"); - - for(U32 i = 0; i < mComponentList.size(); i++) - mComponentList[i]->write(stream, tabStop + 1, flags); - } - - stream.writeTabs(tabStop); - stream.write(4, "};\r\n"); -} - -////////////////////////////////////////////////////////////////////////// -// Console Methods -////////////////////////////////////////////////////////////////////////// - -ConsoleMethod( SimComponent, addComponents, bool, 3, 64, "%obj.addComponents( %compObjName, %compObjName2, ... );\n" - "Adds additional components to current list.\n" - "@param Up to 62 component names\n" - "@return Returns true on success, false otherwise.") -{ - for(S32 i = 2; i < argc; i++) - { - SimComponent *obj = dynamic_cast (Sim::findObject(argv[i]) ); - if(obj) - object->addComponent(obj); - else - Con::printf("SimComponent::addComponents - Invalid Component Object \"%s\"", (const char*)argv[i]); - } - return true; -} - -ConsoleMethod( SimComponent, removeComponents, bool, 3, 64, "%obj.removeComponents( %compObjName, %compObjName2, ... );\n" - "Removes components by name from current list.\n" - "@param objNamex Up to 62 component names\n" - "@return Returns true on success, false otherwise.") -{ - for(S32 i = 2; i < argc; i++) - { - SimComponent *obj = dynamic_cast (Sim::findObject(argv[i]) ); - if(obj) - object->removeComponent(obj); - else - Con::printf("SimComponent::removeComponents - Invalid Component Object \"%s\"", (const char*)argv[i]); - } - return true; -} - -DefineConsoleMethod( SimComponent, getComponentCount, S32, (), , "() Get the current component count\n" - "@return The number of components in the list as an integer") -{ - return object->getComponentCount(); -} - -DefineConsoleMethod( SimComponent, getComponent, S32, (S32 idx), , "(idx) Get the component corresponding to the given index.\n" - "@param idx An integer index value corresponding to the desired component.\n" - "@return The id of the component at the given index as an integer") -{ - if(idx < 0 || idx >= object->getComponentCount()) - { - Con::errorf("SimComponent::getComponent - Invalid index %d", idx); - return 0; - } - - SimComponent *c = object->getComponent(idx); - return c ? c->getId() : 0; -} - -DefineConsoleMethod(SimComponent, setEnabled, void, (bool enabled), , "(enabled) Sets or unsets the enabled flag\n" - "@param enabled Boolean value\n" - "@return No return value") -{ - object->setEnabled(enabled); -} - -DefineConsoleMethod(SimComponent, isEnabled, bool, (), , "() Check whether SimComponent is currently enabled\n" - "@return true if enabled and false if not") -{ - return object->isEnabled(); -} - -DefineConsoleMethod(SimComponent, setIsTemplate, void, (bool templateFlag), , "(template) Sets or unsets the template flag\n" - "@param template Boolean value\n" - "@return No return value") -{ - object->setIsTemplate(templateFlag); -} - -DefineConsoleMethod(SimComponent, getIsTemplate, bool, (), , "() Check whether SimComponent is currently a template\n" - "@return true if is a template and false if not") -{ - return object->getIsTemplate(); -} diff --git a/Engine/source/component/simComponent.h b/Engine/source/component/simComponent.h deleted file mode 100644 index 70e41f69eb..0000000000 --- a/Engine/source/component/simComponent.h +++ /dev/null @@ -1,256 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _SIMCOMPONENT_H_ -#define _SIMCOMPONENT_H_ - -#ifndef _TVECTOR_H_ -#include "core/util/tVector.h" -#endif -#ifndef _STRINGTABLE_H_ -#include "core/stringTable.h" -#endif -#ifndef _NETOBJECT_H_ -#include "sim/netObject.h" -#endif -#ifndef _COMPONENTINTERFACE_H_ -#include "component/componentInterface.h" -#endif -#ifndef _PLATFORM_THREADS_MUTEX_H_ -#include "platform/threads/mutex.h" -#endif -#ifndef _STRINGFUNCTIONS_H_ -#include "core/strings/stringFunctions.h" -#endif - -// Forward refs -class Stream; -class ComponentInterface; -class ComponentInterfaceCache; - -class SimComponent : public NetObject -{ - typedef NetObject Parent; - -private: - VectorPtr mComponentList; ///< The Component List - void *mMutex; ///< Component List Mutex - - SimObjectPtr mOwner; ///< The component which owns this one. - - /// This is called internally to instruct the component to iterate over it's - // list of components and recursively call _registerInterfaces on their lists - // of components. - void _registerInterfaces( SimComponent *owner ); - - bool _registerComponents( SimComponent *owner ); - void _unregisterComponents(); - -protected: - ComponentInterfaceCache mInterfaceCache; ///< Stores the interfaces exposed by this component. - - bool mEnabled; - - bool mTemplate; - - // Non-const getOwner for derived classes - SimComponent *_getOwner() { return mOwner; } - - /// Returns a const reference to private mComponentList - typedef VectorPtr::iterator SimComponentIterator; - VectorPtr &lockComponentList() - { - Mutex::lockMutex( mMutex ); - return mComponentList; - }; - - void unlockComponentList() - { - Mutex::unlockMutex( mMutex ); - } - - /// onComponentRegister is called on each component by it's owner. If a component - /// has no owner, onComponentRegister will not be called on it. The purpose - /// of onComponentRegister is to allow a component to check for any external - /// interfaces, or other dependencies which it needs to function. If any component - /// in a component hierarchy returns false from it's onComponentRegister call - /// the entire hierarchy is invalid, and SimObject::onAdd will fail on the - /// top-level component. To put it another way, if a component contains other - /// components, it will be registered successfully with Sim iff each subcomponent - /// returns true from onComponentRegister. If a component does not contain - /// other components, it will not receive an onComponentRegister call. - /// - /// Overloads of this method must pass the call along to their parent, as is - /// shown in the example below. - /// - /// @code - /// bool FooComponent::onComponentRegister( SimComponent *owner ) - /// { - /// if( !Parent::onComponentRegister( owner ) ) - /// return false; - /// ... - /// } - /// @endcode - virtual bool onComponentRegister( SimComponent *owner ) - { - mOwner = owner; - return true; - } - - /// onUnregister is called when the owner is unregistering. Your object should - /// do cleanup here, as well as pass a call up the chain to the parent. - virtual void onComponentUnRegister() - { - mOwner = NULL; - } - - /// registerInterfaces is called on each component as it's owner is registering - /// it's interfaces. This is called before onComponentRegister, and should be used to - /// register all interfaces exposed by your component, as well as all callbacks - /// needed by your component. - virtual void registerInterfaces( SimComponent *owner ) - { - - } - -public: - DECLARE_CONOBJECT(SimComponent); - - /// Constructor - /// Add this component - SimComponent(); - - /// Destructor - /// Remove this component and destroy child references - virtual ~SimComponent(); - -public: - - virtual bool onAdd(); - virtual void onRemove(); - - static void initPersistFields(); - - virtual bool processArguments(S32 argc, ConsoleValueRef *argv); - - bool isEnabled() const { return mEnabled; } - - void setEnabled( bool value ) { mEnabled = value; } - - /// Will return true if this object contains components. - bool hasComponents() const { return ( mComponentList.size() > 0 ); }; - - /// The component which owns this object - const SimComponent *getOwner() const { return mOwner; }; - - // Component Information - inline virtual StringTableEntry getComponentName() { return StringTable->insert( getClassName() ); }; - - /// Protected 'Component' Field setter that will add a component to the list. - static bool addComponentFromField(void* obj, const char* data); - - /// Add Component to this one - virtual bool addComponent( SimComponent *component ); - - /// Remove Component from this one - virtual bool removeComponent( SimComponent *component ); - - /// Clear Child components of this one - virtual bool clearComponents() { mComponentList.clear(); return true; }; - - virtual bool onComponentAdd(SimComponent *target); - virtual void onComponentRemove(SimComponent *target); - - S32 getComponentCount() { return mComponentList.size(); } - SimComponent *getComponent(S32 idx) { return mComponentList[idx]; } - - SimComponentIterator find(SimComponentIterator first, SimComponentIterator last, SimComponent *value) - { - return ::find(first, last, value); - } - - static bool setIsTemplate( void *object, const char *index, const char *data ) - { static_cast(object)->setIsTemplate( dAtob( data ) ); return false; }; - virtual void setIsTemplate( const bool pTemplate ) { mTemplate = pTemplate; } - bool getIsTemplate() const { return mTemplate; } - - virtual void write(Stream &stream, U32 tabStop, U32 flags = 0); - virtual bool writeField(StringTableEntry fieldname, const char* value); - - - /// getInterfaces allows the caller to enumerate the interfaces exposed by - /// this component. This method can be overwritten to expose interfaces - /// which are not cached on the object, before passing the call to the Parent. - /// This can be used delay interface creation until it is queried for, instead - /// of creating it on initialization, and caching it. Returns false if no results - /// were found - /// - /// @param list The list that this method will append search results on to. - /// @param type An expression which the 'type' field on an added object must match to be included in results - /// @param name An expression which the 'name' field on an added object must match to be included in results - /// @param owner Limit results to components owned/not-owned by this SimComponent (see next param) - /// @param notOwner If set to true, this will enumerate only interfaces NOT owned by 'owner' - virtual bool getInterfaces( ComponentInterfaceList *list, const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ); // const omission intentional - - - /// These two methods allow for easy query of component interfaces if you know - /// exactly what you are looking for, and don't mind being passed back the first - /// matching result. - ComponentInterface *getInterface( const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ); - - template - T *getInterface( const char *type = NULL, const char *name = NULL, const SimComponent *owner = NULL, bool notOwner = false ); - - /// Add an interface to the cache. This function will return true if the interface - /// is added successfully. An interface will not be added successfully if an entry - /// in this components cache with the same values for 'type' and 'name' is present. - /// - /// @param type Type of the interface being added. If NULL is passed, it will match any type string queried. - /// @param name Name of interface being added. If NULL is passed, it will match any name string queried. - /// @param interfaceOwner The component which owns the interface being cached - /// @param cinterface The ComponentInterface being cached - bool registerCachedInterface( const char *type, const char *name, SimComponent *interfaceOwner, ComponentInterface *cinterface ); -}; - -////////////////////////////////////////////////////////////////////////// - -template -T *SimComponent::getInterface( const char *type /* = NULL */, const char *name /* = NULL */, - const SimComponent *owner /* = NULL */, bool notOwner /* = false */ ) -{ - ComponentInterfaceList iLst; - - if( getInterfaces( &iLst, type, name, owner, notOwner ) ) - { - ComponentInterfaceListIterator itr = iLst.begin(); - - while( dynamic_cast( *itr ) == NULL ) - itr++; - - if( itr != iLst.end() ) - return static_cast( *itr ); - } - - return NULL; -} - -#endif // _SIMCOMPONENT_H_ diff --git a/Engine/source/component/simpleComponent.cpp b/Engine/source/component/simpleComponent.cpp deleted file mode 100644 index 246672c28d..0000000000 --- a/Engine/source/component/simpleComponent.cpp +++ /dev/null @@ -1,31 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#include "component/simpleComponent.h" - -IMPLEMENT_CONOBJECT(SimpleComponent); - -ConsoleDocClass( SimpleComponent, - "@brief The purpose of this component is to provide a minimalistic component that " - "exposes a simple, cached interface\n\n" - "Soon to be deprecated, internal only.\n\n " - "@internal"); \ No newline at end of file diff --git a/Engine/source/component/simpleComponent.h b/Engine/source/component/simpleComponent.h deleted file mode 100644 index e4c32bfb39..0000000000 --- a/Engine/source/component/simpleComponent.h +++ /dev/null @@ -1,159 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2012 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifndef _SIMPLECOMPONENT_H_ -#define _SIMPLECOMPONENT_H_ - -#ifndef _SIMCOMPONENT_H_ -#include "component/simComponent.h" -#endif - -#ifndef _COMPONENTINTERFACE_H_ -#include "component/componentInterface.h" -#endif - -/// This is a very simple interface. Interfaces provide ways for components to -/// interact with each-other, and query each-other for functionality. It makes it -/// possible for two components to be interdependent on one another, as well. An -/// interface should make accessor calls to it's owner for functionality, and -/// generally be as thin of a layer as possible. -class SimpleComponentInterface : public ComponentInterface -{ -public: - bool isFortyTwo( const U32 test ); -}; - -////////////////////////////////////////////////////////////////////////// -/// The purpose of this component is to provide a minimalistic component that -/// exposes a simple, cached interface -class SimpleComponent : public SimComponent -{ - typedef SimComponent Parent; - -protected: - SimpleComponentInterface mSCInterface; - -public: - // Components are still SimObjects, and need to be declared and implemented - // with the standard macros - DECLARE_CONOBJECT(SimpleComponent); - - ////////////////////////////////////////////////////////////////////////// - // SimComponent overloads. - - // This method is called on each component as it's parent is getting onAdd - // called. The purpose of overloading this method is to expose cached interfaces - // before onComponentRegister is called, so that other components can depend on the - // interfaces you expose in order to register properly. This functionality - // will be demonstrated in a more advanced example. - virtual void registerInterfaces( SimComponent *owner ) - { - // While it is not imperative that we pass this call to the Parent in this - // example, if there existed a class-heirarchy of components, it would be - // critical, so for good practice, call up to the Parent. - Parent::registerInterfaces( owner ); - - // Now we should go ahead and register our cached interface. What we are doing - // is telling the component which contains this component (if it exists) - // all of the interfaces that we expose. When this call is made, it will - // recurse up the owner list. - // - // For example, there exists components A, B, and C. - // A owns B, and B owns C. - // - // If C exposes a cached interface, it will expose it via registerCachedInterface - // when registerInterfaces is recursively called. It will add it's interface to - // it's cache list, and then pass the register call up to it's parent. The parent - // will also cache the interface, and continue to pass the cache call up the - // child->parent chain until there exists no parent. - // - // The result is that, if C exposes an interface 'foo', and A owns B, and - // B owns C, an interface request for 'foo' given to component A will result - // in 'foo' being returned, even though A does not expose 'foo'. This makes - // it possible for a component to query it's owner for an interface, and - // not care where that interface is exposed. It also allows for game code - // to work with any SimComponent and query that component for any interface - // it wants without knowing or caring exactly where it is coming from. - // - // registerCachedInterface returns a boolean value if it was successful. - // Success results in the caching of this interface throughout the full - // child->parent chain. An interface will be added to a cache list - // successfully iff there exists no entry in that list that has matching - // values for 'type', 'name' and 'owner'. - owner->registerCachedInterface( - // The first parameter is the 'type' of the interface, this is not to be - // confused with any kind of existing console, or c++ type. It is simply - // a string which is can be set to any value - "example", - - // The next parameter is the 'name' of the interface. This is also a string - // which can be set to any value - "isfortytwo", - - // The owner of the interface. Note that the value being assigned here - // is this instance of SimpleComponent, and not the 'owner' argument - // of the function registerInterfaces that we are calling from. - this, - - // And finally the interface; a pointer to an object with type ComponentInterface - &mSCInterface ); - } - - ////////////////////////////////////////////////////////////////////////// - // Specific functionality - - /// This is the test method, it will return true if the number provided - /// is forty two - bool isFortyTwo( const U32 test ) const - { - return ( test == 42 ); - } -}; - -////////////////////////////////////////////////////////////////////////// -// Interface implementation -// -// Since interfaces themselves implement very little functionality, it is a good -// idea to inline them if at all possible. Interdependent components will be using -// these interfaces constantly, and so putting as thin of a layer between the -// functionality they expose, and the functionality the component implements is -// a good design practice. -inline bool SimpleComponentInterface::isFortyTwo( const U32 test ) -{ - // This code block will test for a valid owner in a debug build before - // performing operations on it's owner. It is worth noting that the - // ComponentInterface::isValid() method can be overridden to include - // validation specific to your interface and/or component. - AssertFatal( isValid(), "SimpleComponentInterface has not been registered properly by the component which exposes it." ); - - // This is a sanity check. The owner of this interface should have the type - // SimpleComponent, otherwise this won't work. (See further interface examples - // for some ways around this) - AssertFatal( dynamic_cast( getOwner() ) != NULL, "Owner of SimpleComponentInterface is not a SimpleComponent" ); - - // Component interfaces rely on being registered to set their mOwner - // field. This field is initialized to NULL, and then gets set by - // SimComponent when the interface is registered. - return static_cast( getOwner() )->isFortyTwo( test ); -} - -#endif \ No newline at end of file diff --git a/Engine/source/component/test/moreAdvancedComponentTest.cpp b/Engine/source/component/test/moreAdvancedComponentTest.cpp deleted file mode 100644 index a6a7335f47..0000000000 --- a/Engine/source/component/test/moreAdvancedComponentTest.cpp +++ /dev/null @@ -1,68 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2014 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifdef TORQUE_TESTS_ENABLED -#include "testing/unitTesting.h" -#include "component/moreAdvancedComponent.h" - -TEST(MoreAdvancedComponent, MoreAdvancedComponent) -{ - // Create component instances and compose them. - SimComponent *parentComponent = new SimComponent(); - SimpleComponent *simpleComponent = new SimpleComponent(); - MoreAdvancedComponent *moreAdvComponent = new MoreAdvancedComponent(); - // CodeReview note that the interface pointer isn't initialized in a ctor - // on the components, so it's bad memory against which you might - // be checking in testDependentInterface [3/3/2007 justind] - parentComponent->addComponent( simpleComponent ); - parentComponent->addComponent( moreAdvComponent ); - - simpleComponent->registerObject(); - moreAdvComponent->registerObject(); - - // Put a break-point here, follow the onAdd call, and observe the order in - // which the SimComponent::onAdd function executes. You will see the interfaces - // get cached, and the dependent interface query being made. - parentComponent->registerObject(); - - // If the MoreAdvancedComponent found an interface, than the parentComponent - // should have returned true, from onAdd, and should therefore be registered - // properly with the Sim - EXPECT_TRUE( parentComponent->isProperlyAdded() ) - << "Parent component not properly added!"; - - // Now lets test the interface. You can step through this, as well. - EXPECT_TRUE( moreAdvComponent->testDependentInterface() ) - << "Dependent interface test failed."; - - // CodeReview is there a reason we can't just delete the parentComponent here? [3/3/2007 justind] - // - // Clean up - parentComponent->removeComponent( simpleComponent ); - parentComponent->removeComponent( moreAdvComponent ); - - parentComponent->deleteObject(); - moreAdvComponent->deleteObject(); - simpleComponent->deleteObject(); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/test/simComponentTest.cpp b/Engine/source/component/test/simComponentTest.cpp deleted file mode 100644 index 407e3adceb..0000000000 --- a/Engine/source/component/test/simComponentTest.cpp +++ /dev/null @@ -1,149 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2014 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifdef TORQUE_TESTS_ENABLED -#include "testing/unitTesting.h" -#include "component/simComponent.h" - -class CachedInterfaceExampleComponent : public SimComponent -{ - typedef SimComponent Parent; - - ComponentProperty mMyId; - static U32 smNumInstances; - ComponentProperty *mpU32; // CodeReview [patw, 2, 17, 2007] Make ref objects when this is in Jugg - -public: - DECLARE_CONOBJECT( CachedInterfaceExampleComponent ); - - CachedInterfaceExampleComponent() : mpU32( NULL ) - { - mMyId = ( ( 1 << 24 ) | smNumInstances++ ); - } - virtual ~CachedInterfaceExampleComponent() - { - smNumInstances--; - } - -public: - ////////////////////////////////////////////////////////////////////////// - - virtual void registerInterfaces( SimComponent *owner ) - { - // Register a cached interface for this - owner->registerCachedInterface( NULL, "aU32", this, &mMyId ); - } - - ////////////////////////////////////////////////////////////////////////// - - bool onComponentRegister( SimComponent *owner ) - { - // Call up to the parent first - if( !Parent::onComponentRegister( owner ) ) - return false; - - // We want to get an interface from another object in our containing component - // to simulate component interdependency. - ComponentInterfaceList list; - - // Enumerate the interfaces on the owner, only ignore interfaces that this object owns - if( !owner->getInterfaces( &list, NULL, "aU32", this, true ) ) - return false; - - // Sanity check before just assigning all willy-nilly - for( ComponentInterfaceListIterator i = list.begin(); i != list.end(); i++ ) - { - mpU32 = dynamic_cast *>( (*i) ); - - if( mpU32 != NULL ) - return true; - } - - return false; - } - - ////////////////////////////////////////////////////////////////////////// - - // CodeReview [patw, 2, 17, 2007] I'm going to make another lightweight interface - // for this functionality later - void unit_test() - { - EXPECT_TRUE( mpU32 != NULL ) - << "Pointer to dependent interface is NULL"; - if( mpU32 ) - { - EXPECT_TRUE( *(*mpU32) & ( 1 << 24 ) ) - << "Pointer to interface data is bogus."; - EXPECT_TRUE( *(*mpU32) != *mMyId ) - << "Two of me have the same ID, bad!"; - } - } -}; - -IMPLEMENT_CONOBJECT( CachedInterfaceExampleComponent ); -U32 CachedInterfaceExampleComponent::smNumInstances = 0; - -ConsoleDocClass( CachedInterfaceExampleComponent, - "@brief Legacy from older component system.\n\n" - "Not intended for game development, for editors or internal use only.\n\n " - "@internal"); - -TEST(SimComponent, Composition) -{ - SimComponent *testComponent = new SimComponent(); - CachedInterfaceExampleComponent *componentA = new CachedInterfaceExampleComponent(); - CachedInterfaceExampleComponent *componentB = new CachedInterfaceExampleComponent(); - - // Register sub-components - EXPECT_TRUE( componentA->registerObject() ) - << "Failed to register componentA"; - EXPECT_TRUE( componentB->registerObject() ) - << "Failed to register componentB"; - - // Add the components - EXPECT_TRUE( testComponent->addComponent( componentA ) ) - << "Failed to add component a to testComponent"; - EXPECT_TRUE( testComponent->addComponent( componentB ) ) - << "Failed to add component b to testComponent"; - - EXPECT_EQ( componentA->getOwner(), testComponent ) - << "testComponent did not properly set the mOwner field of componentA to NULL."; - EXPECT_EQ( componentB->getOwner(), testComponent ) - << "testComponent did not properly set the mOwner field of componentB to NULL."; - - // Register the object with the simulation, kicking off the interface registration - ASSERT_TRUE( testComponent->registerObject() ) - << "Failed to register testComponent"; - - { - SCOPED_TRACE("componentA"); - componentA->unit_test(); - } - { - SCOPED_TRACE("componentB"); - componentB->unit_test(); - } - - testComponent->deleteObject(); -}; - -#endif \ No newline at end of file diff --git a/Engine/source/component/test/simpleComponentTest.cpp b/Engine/source/component/test/simpleComponentTest.cpp deleted file mode 100644 index a528e918ff..0000000000 --- a/Engine/source/component/test/simpleComponentTest.cpp +++ /dev/null @@ -1,131 +0,0 @@ -//----------------------------------------------------------------------------- -// Copyright (c) 2014 GarageGames, LLC -// -// 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. -//----------------------------------------------------------------------------- - -#ifdef TORQUE_TESTS_ENABLED -#include "testing/unitTesting.h" -#include "component/simpleComponent.h" - -TEST(SimpleComponent, SimpleComponent) -{ - // When instantiating, and working with a SimObject in C++ code, such as - // a unit test, you *may not* allocate a SimObject off of the stack. - // - // For example: - // SimpleComponent sc; - // is a stack allocation. This memory is allocated off of the program stack - // when the function is called. SimObject deletion is done via SimObject::deleteObject() - // and the last command of this method is 'delete this;' That command will - // cause an assert if it is called on stack-allocated memory. Therefor, when - // instantiating SimObjects in C++ code, it is imperitive that you keep in - // mind that if any script calls 'delete()' on that SimObject, or any other - // C++ code calls 'deleteObject()' on that SimObject, it will crash. - SimpleComponent *sc = new SimpleComponent(); - - // SimObject::registerObject must be called on a SimObject before it is - // fully 'hooked in' to the engine. - // - // Tracing execution of this function will let you see onAdd get called on - // the component, and you will see it cache the interface we exposed. - sc->registerObject(); - - // It is *not* required that a component always be owned by a component (obviously) - // however I am using an owner so that you can trace execution of recursive - // calls to cache interfaces and such. - SimComponent *testOwner = new SimComponent(); - - // Add the test component to it's owner. This will set the 'mOwner' field - // of 'sc' to the address of 'testOwner' - testOwner->addComponent( sc ); - - // If you step-into this registerObject the same way as the previous one, - // you will be able to see the recursive caching of the exposed interface. - testOwner->registerObject(); - - // Now to prove that object composition is working properly, lets ask - // both of these components for their interface lists... - - // The ComponentInterfaceList is a typedef for type 'VectorPtr' - // and it will be used by getInterfaces() to store the results of the interface - // query. This is the "complete" way to obtain an interface, and it is too - // heavy-weight for most cases. A simplified query will be performed next, - // to demonstrate the usage of both. - ComponentInterfaceList iLst; - - // This query requests all interfaces, on all components, regardless of name - // or owner. - sc->getInterfaces( &iLst, - // This is the type field. I am passing NULL here to signify that the query - // should match all values of 'type' in the list. - NULL, - - // The name field, let's pass NULL again just so when you trace execution - // you can see how queries work in the simple case, first. - NULL ); - - // Lets process the list that we've gotten back, and find the interface that - // we want. - SimpleComponentInterface *scQueriedInterface = NULL; - - for( ComponentInterfaceListIterator i = iLst.begin(); i != iLst.end(); i++ ) - { - scQueriedInterface = dynamic_cast( *i ); - - if( scQueriedInterface != NULL ) - break; - } - - AssertFatal( scQueriedInterface != NULL, "No valid SimpleComponentInterface was found in query" ); - - // Lets do it again, only we will execute the query on the parent instead, - // in a simplified way. Remember the parent component doesn't expose any - // interfaces at all, so the success of this behavior is entirely dependent - // on the recursive registration that occurs in registerInterfaces() - SimpleComponentInterface *ownerQueriedInterface = testOwner->getInterface(); - - AssertFatal( ownerQueriedInterface != NULL, "No valid SimpleComponentInterface was found in query" ); - - // We should now have two pointers to the same interface obtained by querying - // different components. - EXPECT_EQ( ownerQueriedInterface, scQueriedInterface ) - << "This really shouldn't be possible to fail given the setup of the test"; - - // Lets call the method that was exposed on the component via the interface. - // Trace the execution of this function, if you wish. - EXPECT_TRUE( ownerQueriedInterface->isFortyTwo( 42 ) ) - << "Don't panic, but it's a bad day in the component system."; - EXPECT_TRUE( scQueriedInterface->isFortyTwo( 42 ) ) - << "Don't panic, but it's a bad day in the component system."; - - // So there you have it. Writing a simple component that exposes a cached - // interface, and testing it. It's time to clean up. - testOwner->removeComponent( sc ); - - sc->deleteObject(); - testOwner->deleteObject(); - - // Interfaces do not need to be freed. In Juggernaught, these will be ref-counted - // for more robust behavior. Right now, however, the values of our two interface - // pointers, scQueriedInterface and ownerQueriedInterface, reference invalid - // memory. -}; - -#endif \ No newline at end of file diff --git a/Engine/source/gui/core/guiCanvas.h b/Engine/source/gui/core/guiCanvas.h index 0a2e44fa58..fa213f56ae 100644 --- a/Engine/source/gui/core/guiCanvas.h +++ b/Engine/source/gui/core/guiCanvas.h @@ -37,7 +37,7 @@ #include "core/util/tSignal.h" #endif -#include "component/interfaces/IProcessInput.h" +#include "platform/input/IProcessInput.h" #include "windowManager/platformWindowMgr.h" #include "gfx/gfxFence.h" diff --git a/Engine/source/component/interfaces/IProcessInput.h b/Engine/source/platform/input/IProcessInput.h similarity index 100% rename from Engine/source/component/interfaces/IProcessInput.h rename to Engine/source/platform/input/IProcessInput.h diff --git a/Engine/source/windowManager/windowInputGenerator.cpp b/Engine/source/windowManager/windowInputGenerator.cpp index 608aadb8ac..193d0248af 100644 --- a/Engine/source/windowManager/windowInputGenerator.cpp +++ b/Engine/source/windowManager/windowInputGenerator.cpp @@ -23,7 +23,7 @@ #include "windowManager/windowInputGenerator.h" #include "windowManager/platformWindow.h" #include "sim/actionMap.h" -#include "component/interfaces/IProcessInput.h" +#include "platform/input/IProcessInput.h" extern InputModifiers convertModifierBits(const U32 in); From 1b47bdd972fe83b529dc3d475b1ade7b7266eea1 Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 12 May 2016 23:49:06 -0500 Subject: [PATCH 215/324] Git apparently forgot to commit ALL the changes. --- Engine/source/math/mMath.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Engine/source/math/mMath.h b/Engine/source/math/mMath.h index a1e070db77..4710f6bf0f 100644 --- a/Engine/source/math/mMath.h +++ b/Engine/source/math/mMath.h @@ -48,5 +48,8 @@ #ifndef _MEASE_H_ #include "math/mEase.h" #endif +#ifndef MROTATION_H +#include "math/mRotation.h" +#endif #endif //_MMATH_H_ From 49a735e0515c77a2957cc0fec9ad7f4a18175c86 Mon Sep 17 00:00:00 2001 From: James Urquhart Date: Fri, 13 May 2016 12:09:40 +0100 Subject: [PATCH 216/324] Fix axis check in Box3F::extend method --- Engine/source/math/mBox.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/math/mBox.h b/Engine/source/math/mBox.h index 379d5291a1..b81775bb0e 100644 --- a/Engine/source/math/mBox.h +++ b/Engine/source/math/mBox.h @@ -415,7 +415,7 @@ inline void Box3F::extend(const Point3F & p) #define EXTEND_AXIS(AXIS) \ if (p.AXIS < minExtents.AXIS) \ minExtents.AXIS = p.AXIS; \ -else if (p.AXIS > maxExtents.AXIS) \ +if (p.AXIS > maxExtents.AXIS) \ maxExtents.AXIS = p.AXIS; EXTEND_AXIS(x) From 1299b527f1a405f78a79fd8ee045087fcc906d16 Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 13 May 2016 23:14:55 -0500 Subject: [PATCH 217/324] Adds the ability to the ShapeAsset to get the resource of the shape. --- Engine/source/T3D/assets/ShapeAsset.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h index 7c87cf8dec..dac95a45e8 100644 --- a/Engine/source/T3D/assets/ShapeAsset.h +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -76,6 +76,8 @@ class ShapeAsset : public AssetBase TSShape* getShape() { return mShape; } + Resource getShapeResource() { return mShape; } + protected: virtual void onAssetRefresh(void) {} }; From b64123a452d50ba53b9a8db476fed119ffe414d6 Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 13 May 2016 23:57:48 -0500 Subject: [PATCH 218/324] Adds findContact to regular physics bodies so that they can find contacting objects and surfaces in a way similar to players. --- Engine/source/T3D/physics/bullet/btBody.cpp | 64 ++++++++++++++++++++ Engine/source/T3D/physics/bullet/btBody.h | 2 + Engine/source/T3D/physics/physicsBody.h | 4 ++ Engine/source/T3D/physics/physx3/px3Body.cpp | 52 ++++++++++++++++ Engine/source/T3D/physics/physx3/px3Body.h | 3 + 5 files changed, 125 insertions(+) diff --git a/Engine/source/T3D/physics/bullet/btBody.cpp b/Engine/source/T3D/physics/bullet/btBody.cpp index 77c3b81159..eb722fd17d 100644 --- a/Engine/source/T3D/physics/bullet/btBody.cpp +++ b/Engine/source/T3D/physics/bullet/btBody.cpp @@ -378,3 +378,67 @@ void BtBody::setSimulationEnabled( bool enabled ) mIsEnabled = enabled; } + +void BtBody::findContact(SceneObject **contactObject, + VectorF *contactNormal, + Vector *outOverlapObjects) const +{ + AssertFatal(mActor, "BtPlayer::findContact - The controller is null!"); + + VectorF normal; + F32 maxDot = -1.0f; + + // Go thru the contact points... get the first contact. + //mWorld->getDynamicsWorld()->computeOverlappingPairs(); + btOverlappingPairCache *pairCache = mWorld->getDynamicsWorld()->getBroadphase()->getOverlappingPairCache(); + + btBroadphasePairArray& pairArray = pairCache->getOverlappingPairArray(); + U32 numPairs = pairArray.size(); + btManifoldArray manifoldArray; + + for (U32 i = 0; i < numPairs; i++) + { + const btBroadphasePair &pair = pairArray[i]; + + btBroadphasePair *collisionPair = pairCache->findPair(pair.m_pProxy0, pair.m_pProxy1); + if (!collisionPair || !collisionPair->m_algorithm) + continue; + + btCollisionObject *other = (btCollisionObject*)pair.m_pProxy0->m_clientObject; + if (other == mActor) + other = (btCollisionObject*)pair.m_pProxy1->m_clientObject; + + // AssertFatal(!outOverlapObjects->contains(PhysicsUserData::getObject(other->getUserPointer())), + // "Got multiple pairs of the same object!"); + outOverlapObjects->push_back(PhysicsUserData::getObject(other->getUserPointer())); + + if (other->getCollisionFlags() & btCollisionObject::CF_NO_CONTACT_RESPONSE) + continue; + + manifoldArray.clear(); + collisionPair->m_algorithm->getAllContactManifolds(manifoldArray); + + for (U32 j = 0; j < manifoldArray.size(); j++) + { + btPersistentManifold *manifold = manifoldArray[j]; + btScalar directionSign = manifold->getBody0() == mActor ? 1.0f : -1.0f; + + for (U32 p = 0; p < manifold->getNumContacts(); p++) + { + const btManifoldPoint &pt = manifold->getContactPoint(p); + + // Test the normal... is it the most vertical one we got? + normal = btCast(pt.m_normalWorldOnB * directionSign); + F32 dot = mDot(normal, VectorF(0, 0, 1)); + if (dot > maxDot) + { + maxDot = dot; + + btCollisionObject *colObject = (btCollisionObject*)collisionPair->m_pProxy0->m_clientObject; + *contactObject = PhysicsUserData::getObject(colObject->getUserPointer()); + *contactNormal = normal; + } + } + } + } +} diff --git a/Engine/source/T3D/physics/bullet/btBody.h b/Engine/source/T3D/physics/bullet/btBody.h index 0f1ab669cf..2de1215d28 100644 --- a/Engine/source/T3D/physics/bullet/btBody.h +++ b/Engine/source/T3D/physics/bullet/btBody.h @@ -111,6 +111,8 @@ class BtBody : public PhysicsBody F32 staticFriction ); virtual void applyCorrection( const MatrixF &xfm ); virtual void applyImpulse( const Point3F &origin, const Point3F &force ); + + virtual void findContact(SceneObject **contactObject, VectorF *contactNormal, Vector *outOverlapObjects) const; }; #endif // _T3D_PHYSICS_BTBODY_H_ diff --git a/Engine/source/T3D/physics/physicsBody.h b/Engine/source/T3D/physics/physicsBody.h index 15e94bcbd3..fd8cca0898 100644 --- a/Engine/source/T3D/physics/physicsBody.h +++ b/Engine/source/T3D/physics/physicsBody.h @@ -113,6 +113,10 @@ class PhysicsBody : public PhysicsObject /// virtual void applyImpulse( const Point3F &origin, const Point3F &force ) = 0; + + virtual void findContact(SceneObject **contactObject, + VectorF *contactNormal, + Vector *outOverlapObjects) const = 0; }; diff --git a/Engine/source/T3D/physics/physx3/px3Body.cpp b/Engine/source/T3D/physics/physx3/px3Body.cpp index 026309f088..e36e76d8da 100644 --- a/Engine/source/T3D/physics/physx3/px3Body.cpp +++ b/Engine/source/T3D/physics/physx3/px3Body.cpp @@ -417,3 +417,55 @@ void Px3Body::applyImpulse( const Point3F &origin, const Point3F &force ) } +void Px3Body::findContact(SceneObject **contactObject, + VectorF *contactNormal, + Vector *outOverlapObjects) const +{ + // Calculate the sweep motion... + F32 halfCapSize = mOriginOffset; + F32 halfSmallCapSize = halfCapSize * 0.8f; + F32 diff = halfCapSize - halfSmallCapSize; + + F32 distance = diff + mSkinWidth + 0.01f; + physx::PxVec3 dir(0, 0, -1); + + physx::PxScene *scene = mWorld->getScene(); + physx::PxHitFlags hitFlags(physx::PxHitFlag::eDEFAULT); + physx::PxQueryFilterData filterData(physx::PxQueryFlag::eDYNAMIC | physx::PxQueryFlag::eSTATIC); + filterData.data.word0 = PX3_DEFAULT; + physx::PxSweepHit sweepHit; + physx::PxRigidDynamic *actor = mController->getActor(); + physx::PxU32 shapeIndex; + + bool hit = physx::PxRigidBodyExt::linearSweepSingle(*actor, *scene, dir, distance, hitFlags, sweepHit, shapeIndex, filterData); + if (hit) + { + PhysicsUserData *data = PhysicsUserData::cast(sweepHit.actor->userData); + if (data) + { + *contactObject = data->getObject(); + *contactNormal = px3Cast(sweepHit.normal); + } + } + + // Check for overlapped objects ( triggers ) + + if (!outOverlapObjects) + return; + + filterData.data.word0 = PX3_TRIGGER; + + const physx::PxU32 bufferSize = 10; + physx::PxOverlapBufferN hitBuffer; + hit = scene->overlap(mGeometry, actor->getGlobalPose(), hitBuffer, filterData); + if (hit) + { + for (U32 i = 0; i < hitBuffer.nbTouches; i++) + { + PhysicsUserData *data = PhysicsUserData::cast(hitBuffer.touches[i].actor->userData); + if (data) + outOverlapObjects->push_back(data->getObject()); + } + } + +} \ No newline at end of file diff --git a/Engine/source/T3D/physics/physx3/px3Body.h b/Engine/source/T3D/physics/physx3/px3Body.h index 79096f57b1..831d54cdea 100644 --- a/Engine/source/T3D/physics/physx3/px3Body.h +++ b/Engine/source/T3D/physics/physx3/px3Body.h @@ -117,6 +117,9 @@ class Px3Body : public PhysicsBody F32 staticFriction ); virtual void applyCorrection( const MatrixF &xfm ); virtual void applyImpulse( const Point3F &origin, const Point3F &force ); + + virtual void findContact(SceneObject **contactObject, VectorF *contactNormal, + Vector *outOverlapObjects) const; }; #endif // _PX3BODY_H_ From 2e339bafbabc8cc4162a2fbeec4ae5046a5e91a1 Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 13 May 2016 23:58:57 -0500 Subject: [PATCH 219/324] Adds the Entity object. --- Engine/source/T3D/Entity.cpp | 1898 +++++++++++++++++++++++++++++++ Engine/source/T3D/Entity.h | 287 +++++ Engine/source/T3D/objectTypes.h | 13 +- 3 files changed, 2195 insertions(+), 3 deletions(-) create mode 100644 Engine/source/T3D/Entity.cpp create mode 100644 Engine/source/T3D/Entity.h diff --git a/Engine/source/T3D/Entity.cpp b/Engine/source/T3D/Entity.cpp new file mode 100644 index 0000000000..e80f4e8b85 --- /dev/null +++ b/Engine/source/T3D/Entity.cpp @@ -0,0 +1,1898 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "T3D/Entity.h" +#include "core/stream/bitStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "sim/netConnection.h" +#include "scene/sceneRenderState.h" +#include "scene/sceneManager.h" +#include "T3D/gameBase/gameProcess.h" +#include "console/engineAPI.h" +#include "T3D/gameBase/gameConnection.h" +#include "math/mathIO.h" +#include "math/mTransform.h" + +#include "T3D/Components/coreInterfaces.h" +#include "T3D/Components/render/renderComponentInterface.h" +#include "T3D/Components/Collision/collisionInterfaces.h" + +#include "gui/controls/guiTreeViewCtrl.h" + +#include "console/consoleInternal.h" +#include "T3D/gameBase/std/stdMoveList.h" + +#include "T3D/prefab.h" + +// +#include "gfx/sim/debugDraw.h" +// + +extern bool gEditingMission; + +// Client prediction +static F32 sMinWarpTicks = 0.5f; // Fraction of tick at which instant warp occurs +static S32 sMaxWarpTicks = 3; // Max warp duration in ticks +static S32 sMaxPredictionTicks = 30; // Number of ticks to predict + +IMPLEMENT_CO_NETOBJECT_V1(Entity); + +ConsoleDocClass(Entity, + "@brief Base Entity class.\n\n" + + "Entity is typically made up of a shape and up to two particle emitters. In most cases Entity objects are " + "not created directly. They are usually produced automatically by other means, such as through the Explosion " + "class. When an explosion goes off, its ExplosionData datablock determines what Entity to emit.\n" + + "@tsexample\n" + "datablock ExplosionData(GrenadeLauncherExplosion)\n" + "{\n" + " // Assiging Entity data\n" + " Entity = GrenadeEntity;\n\n" + " // Adjust how Entity is ejected\n" + " EntityThetaMin = 10;\n" + " EntityThetaMax = 60;\n" + " EntityNum = 4;\n" + " EntityNumVariance = 2;\n" + " EntityVelocity = 25;\n" + " EntityVelocityVariance = 5;\n\n" + " // Note: other ExplosionData properties are not listed for this example\n" + "};\n" + "@endtsexample\n\n" + + "@note Entity are client side only objects.\n" + + "@see EntityData\n" + "@see ExplosionData\n" + "@see Explosion\n" + + "@ingroup FX\n" + ); + +Entity::Entity() +{ + //mTypeMask |= DynamicShapeObjectType | StaticObjectType | ; + mTypeMask |= EntityObjectType; + mNetFlags.set(Ghostable | ScopeAlways); + + mPos = Point3F(0, 0, 0); + mRot = Point3F(0, 0, 0); + + mDelta.pos = mDelta.posVec = Point3F::Zero; + mDelta.rot[0].identity(); + mDelta.rot[1].identity(); + mDelta.warpOffset.set(0.0f, 0.0f, 0.0f); + + mDelta.warpTicks = mDelta.warpCount = 0; + mDelta.dt = 1.0f; + mDelta.move = NullMove; + + mComponents.clear(); + + mStartComponentUpdate = false; + + mInitialized = false; + +} + +Entity::~Entity() +{ + +} + +void Entity::initPersistFields() +{ + Parent::initPersistFields(); + + removeField("DataBlock"); + + addGroup("Transform"); + + removeField("Position"); + addProtectedField("Position", TypePoint3F, Offset(mPos, Entity), &_setPosition, &_getPosition, "Object world orientation."); + + removeField("Rotation"); + addProtectedField("Rotation", TypeRotationF, Offset(mRot, Entity), &_setRotation, &_getRotation, "Object world orientation."); + + //These are basically renamed mountPos/Rot. pretty much there for conveinence + addField("LocalPosition", TypeMatrixPosition, Offset(mMount.xfm, Entity), "Position we are mounted at ( object space of our mount object )."); + addField("LocalRotation", TypeMatrixRotation, Offset(mMount.xfm, Entity), "Rotation we are mounted at ( object space of our mount object )."); + + endGroup("Transform"); +} + +// +bool Entity::_setPosition(void *object, const char *index, const char *data) +{ + Entity* so = static_cast(object); + if (so) + { + Point3F pos; + + if (!dStrcmp(data, "")) + pos = Point3F(0, 0, 0); + else + Con::setData(TypePoint3F, &pos, 0, 1, &data); + + so->setTransform(pos, so->mRot); + } + return false; +} + +const char * Entity::_getPosition(void* obj, const char* data) +{ + Entity* so = static_cast(obj); + if (so) + { + Point3F pos = so->getPosition(); + + static const U32 bufSize = 256; + char* returnBuffer = Con::getReturnBuffer(bufSize); + dSprintf(returnBuffer, bufSize, "%g %g %g", pos.x, pos.y, pos.z); + return returnBuffer; + } + return "0 0 0"; +} + +bool Entity::_setRotation(void *object, const char *index, const char *data) +{ + Entity* so = static_cast(object); + if (so) + { + RotationF rot; + Con::setData(TypeRotationF, &rot, 0, 1, &data); + + //so->mRot = rot; + //MatrixF mat = rot.asMatrixF(); + //mat.setPosition(so->getPosition()); + //so->setTransform(mat); + so->setTransform(so->getPosition(), rot); + } + return false; +} + +const char * Entity::_getRotation(void* obj, const char* data) +{ + Entity* so = static_cast(obj); + if (so) + { + EulerF eulRot = so->mRot.asEulerF(); + + static const U32 bufSize = 256; + char* returnBuffer = Con::getReturnBuffer(bufSize); + dSprintf(returnBuffer, bufSize, "%g %g %g", mRadToDeg(eulRot.x), mRadToDeg(eulRot.y), mRadToDeg(eulRot.z)); + return returnBuffer; + } + return "0 0 0"; +} + +bool Entity::onAdd() +{ + if (!Parent::onAdd()) + return false; + + mObjBox = Box3F(Point3F(-1, -1, -1), Point3F(1, 1, 1)); + + resetWorldBox(); + setObjectBox(mObjBox); + + addToScene(); + + //Make sure we get positioned + setMaskBits(TransformMask); + + return true; +} + +void Entity::onRemove() +{ + clearComponents(false); + + removeFromScene(); + + onDataSet.removeAll(); + + Parent::onRemove(); +} + +void Entity::onPostAdd() +{ + mInitialized = true; + + //everything's done and added. go ahead and initialize the components + for (U32 i = 0; i < mComponents.size(); i++) + { + mComponents[i]->onComponentAdd(); + } + + if (isMethod("onAdd")) + Con::executef(this, "onAdd"); +} + +void Entity::setDataField(StringTableEntry slotName, const char *array, const char *value) +{ + Parent::setDataField(slotName, array, value); + + onDataSet.trigger(this, slotName, value); +} + +void Entity::onStaticModified(const char* slotName, const char* newValue) +{ + Parent::onStaticModified(slotName, newValue); + + onDataSet.trigger(this, slotName, newValue); +} + +//Updating +void Entity::processTick(const Move* move) +{ + if (!isHidden()) + { + if (mDelta.warpCount < mDelta.warpTicks) + { + mDelta.warpCount++; + + // Set new pos. + mObjToWorld.getColumn(3, &mDelta.pos); + mDelta.pos += mDelta.warpOffset; + mDelta.rot[0] = mDelta.rot[1]; + mDelta.rot[1].interpolate(mDelta.warpRot[0], mDelta.warpRot[1], F32(mDelta.warpCount) / mDelta.warpTicks); + setTransform(mDelta.pos, mDelta.rot[1]); + + // Pos backstepping + mDelta.posVec.x = -mDelta.warpOffset.x; + mDelta.posVec.y = -mDelta.warpOffset.y; + mDelta.posVec.z = -mDelta.warpOffset.z; + } + else + { + if (isMounted()) + { + MatrixF mat; + mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat); + Parent::setTransform(mat); + Parent::setRenderTransform(mat); + } + else + { + if (!move) + { + if (isGhost()) + { + // If we haven't run out of prediction time, + // predict using the last known move. + if (mPredictionCount-- <= 0) + return; + + move = &mDelta.move; + } + else + { + move = &NullMove; + } + } + } + } + + Move prevMove = lastMove; + + if (move != NULL) + lastMove = *move; + else + lastMove = NullMove; + + if (move && isServerObject()) + { + if ((move->y != 0 || prevMove.y != 0) + || (move->x != 0 || prevMove.x != 0) + || (move->z != 0 || prevMove.x != 0)) + { + if (isMethod("moveVectorEvent")) + Con::executef(this, "moveVectorEvent", move->x, move->y, move->z); + } + + if (move->yaw != 0) + { + if (isMethod("moveYawEvent")) + Con::executef(this, "moveYawEvent", move->yaw); + } + + if (move->pitch != 0) + { + if (isMethod("movePitchEvent")) + Con::executef(this, "movePitchEvent", move->pitch); + } + + if (move->roll != 0) + { + if (isMethod("moveRollEvent")) + Con::executef(this, "moveRollEvent", move->roll); + } + + for (U32 i = 0; i < MaxTriggerKeys; i++) + { + if (move->trigger[i] != prevMove.trigger[i]) + { + if (isMethod("moveTriggerEvent")) + Con::executef(this, "moveTriggerEvent", i, move->trigger[i]); + } + } + } + + if (isMethod("processTick")) + Con::executef(this, "processTick"); + } +} + +void Entity::advanceTime(F32 dt) +{ +} + +void Entity::interpolateTick(F32 dt) +{ + if (dt == 0.0f) + { + setRenderTransform(mDelta.pos, mDelta.rot[1]); + } + else + { + QuatF rot; + rot.interpolate(mDelta.rot[1], mDelta.rot[0], dt); + Point3F pos = mDelta.pos + mDelta.posVec * dt; + + setRenderTransform(pos, rot); + } + + mDelta.dt = dt; +} + +//Render +void Entity::prepRenderImage(SceneRenderState *state) +{ +} + +//Networking +U32 Entity::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & TransformMask)) + { + //mathWrite( *stream, getScale() ); + //stream->writeAffineTransform(mObjToWorld); + //mathWrite(*stream, getPosition()); + mathWrite(*stream, mPos); + + //mathWrite(*stream, getRotation()); + mathWrite(*stream, getRotation().asEulerF()); + + mDelta.move.pack(stream); + + stream->writeFlag(!(mask & NoWarpMask)); + } + + /*if (stream->writeFlag(mask & MountedMask)) + { + mathWrite(*stream, mMount.xfm.getPosition()); + mathWrite(*stream, mMount.xfm.toEuler()); + }*/ + + if (stream->writeFlag(mask & BoundsMask)) + { + mathWrite(*stream, mObjBox); + } + + //pass our behaviors around + if (mask & ComponentsMask || mask & InitialUpdateMask) + { + stream->writeFlag(true); + //now, we run through a list of our to-be-sent behaviors and begin sending them + //if any fail, we keep our list and re-queue the mask + S32 componentCount = mToLoadComponents.size(); + + //build our 'ready' list + //This requires both the instance and the instances' template to be prepped(if the template hasn't been ghosted, + //then we know we shouldn't be passing the instance's ghosts around yet) + U32 ghostedCompCnt = 0; + for (U32 i = 0; i < componentCount; i++) + { + if (con->getGhostIndex(mToLoadComponents[i]) != -1) + ghostedCompCnt++; + } + + if (ghostedCompCnt != 0) + { + stream->writeFlag(true); + + stream->writeFlag(mStartComponentUpdate); + + //if not all the behaviors have been ghosted, we'll need another pass + if (ghostedCompCnt != componentCount) + retMask |= ComponentsMask; + + //write the currently ghosted behavior count + stream->writeInt(ghostedCompCnt, 16); + + for (U32 i = 0; i < mToLoadComponents.size(); i++) + { + //now fetch them and pass the ghost + S32 ghostIndex = con->getGhostIndex(mToLoadComponents[i]); + if (ghostIndex != -1) + { + stream->writeInt(ghostIndex, NetConnection::GhostIdBitSize); + mToLoadComponents.erase(i); + i--; + + mStartComponentUpdate = false; + } + } + } + else if (componentCount) + { + //on the odd chance we have behaviors to ghost, but NONE of them have been yet, just set the flag now + stream->writeFlag(false); + retMask |= ComponentsMask; + } + else + stream->writeFlag(false); + } + else + stream->writeFlag(false); + + return retMask; +} + +void Entity::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + /*Point3F scale; + mathRead( *stream, &scale ); + setScale( scale);*/ + + //MatrixF objToWorld; + //stream->readAffineTransform(&objToWorld); + + Point3F pos; + + mathRead(*stream, &pos); + + RotationF rot; + + EulerF eRot; + mathRead(*stream, &eRot); + + rot = RotationF(eRot); + + mDelta.move.unpack(stream); + + if (stream->readFlag() && isProperlyAdded()) + { + // Determine number of ticks to warp based on the average + // of the client and server velocities. + /*mDelta.warpOffset = pos - mDelta.pos; + + F32 dt = mDelta.warpOffset.len() / (0.5f * TickSec); + + mDelta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f); + + //F32 as = (speed + mVelocity.len()) * 0.5f * TickSec; + //F32 dt = (as > 0.00001f) ? mDelta.warpOffset.len() / as : sMaxWarpTicks; + //mDelta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f); + + //mDelta.warpTicks = (S32)((dt > sMinWarpTicks) ? getMax(mFloor(dt + 0.5f), 1.0f) : 0.0f); + + //mDelta.warpTicks = sMaxWarpTicks; + + mDelta.warpTicks = 0; + + if (mDelta.warpTicks) + { + // Setup the warp to start on the next tick. + if (mDelta.warpTicks > sMaxWarpTicks) + mDelta.warpTicks = sMaxWarpTicks; + mDelta.warpOffset /= (F32)mDelta.warpTicks; + + mDelta.rot[0] = rot.asQuatF(); + mDelta.rot[1] = rot.asQuatF(); + + mDelta.rotOffset = rot.asEulerF() - mDelta.rot.asEulerF(); + + // Ignore small rotation differences + if (mFabs(mDelta.rotOffset.x) < 0.001f) + mDelta.rotOffset.x = 0; + + if (mFabs(mDelta.rotOffset.y) < 0.001f) + mDelta.rotOffset.y = 0; + + if (mFabs(mDelta.rotOffset.z) < 0.001f) + mDelta.rotOffset.z = 0; + + mDelta.rotOffset /= (F32)mDelta.warpTicks; + } + else + { + // Going to skip the warp, server and client are real close. + // Adjust the frame interpolation to move smoothly to the + // new position within the current tick. + Point3F cp = mDelta.pos + mDelta.posVec * mDelta.dt; + if (mDelta.dt == 0) + { + mDelta.posVec.set(0.0f, 0.0f, 0.0f); + mDelta.rotVec.set(0.0f, 0.0f, 0.0f); + } + else + { + F32 dti = 1.0f / mDelta.dt; + mDelta.posVec = (cp - pos) * dti; + mDelta.rotVec.z = mRot.z - rot.z; + + mDelta.rotVec.z *= dti; + } + + mDelta.pos = pos; + mDelta.rot = rot; + + setTransform(pos, rot); + }*/ + + Point3F cp = mDelta.pos + mDelta.posVec * mDelta.dt; + mDelta.warpOffset = pos - cp; + + // Calc the distance covered in one tick as the average of + // the old speed and the new speed from the server. + VectorF vel = pos - mDelta.pos; + F32 dt, as = vel.len() * 0.5 * TickSec; + + // Cal how many ticks it will take to cover the warp offset. + // If it's less than what's left in the current tick, we'll just + // warp in the remaining time. + if (!as || (dt = mDelta.warpOffset.len() / as) > sMaxWarpTicks) + dt = mDelta.dt + sMaxWarpTicks; + else + dt = (dt <= mDelta.dt) ? mDelta.dt : mCeil(dt - mDelta.dt) + mDelta.dt; + + // Adjust current frame interpolation + if (mDelta.dt) + { + mDelta.pos = cp + (mDelta.warpOffset * (mDelta.dt / dt)); + mDelta.posVec = (cp - mDelta.pos) / mDelta.dt; + QuatF cr; + cr.interpolate(mDelta.rot[1], mDelta.rot[0], mDelta.dt); + mDelta.rot[1].interpolate(cr, pos, mDelta.dt / dt); + mDelta.rot[0].extrapolate(mDelta.rot[1], cr, mDelta.dt); + } + + // Calculated multi-tick warp + mDelta.warpCount = 0; + mDelta.warpTicks = (S32)(mFloor(dt)); + if (mDelta.warpTicks) + { + mDelta.warpOffset = pos - mDelta.pos; + mDelta.warpOffset /= mDelta.warpTicks; + mDelta.warpRot[0] = mDelta.rot[1]; + mDelta.warpRot[1] = rot.asQuatF(); + } + } + else + { + // Set the entity to the server position + mDelta.dt = 0; + mDelta.pos = pos; + mDelta.posVec.set(0, 0, 0); + mDelta.rot[1] = mDelta.rot[0] = rot.asQuatF(); + mDelta.warpCount = mDelta.warpTicks = 0; + setTransform(pos, rot); + } + } + + /*if (stream->readFlag()) + { + Point3F mountOffset; + EulerF mountRot; + mathRead(*stream, &mountOffset); + mathRead(*stream, &mountRot); + + RotationF rot = RotationF(mountRot); + mountRot = rot.asEulerF(RotationF::Degrees); + + setMountOffset(mountOffset); + setMountRotation(mountRot); + }*/ + + if (stream->readFlag()) + { + mathRead(*stream, &mObjBox); + resetWorldBox(); + } + + if (stream->readFlag()) + { + //are we passing any behaviors currently? + if (stream->readFlag()) + { + //if we've just started the update, clear our behaviors + if (stream->readFlag()) + clearComponents(false); + + S32 componentCount = stream->readInt(16); + + for (U32 i = 0; i < componentCount; i++) + { + S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize); + addComponent(dynamic_cast(con->resolveGhost(gIndex))); + } + } + } +} + +//Manipulation +void Entity::setTransform(const MatrixF &mat) +{ + //setMaskBits(TransformMask); + setMaskBits(TransformMask | NoWarpMask); + + if (isMounted()) + { + // Use transform from mounted object + Point3F newPos = mat.getPosition(); + Point3F parentPos = mMount.object->getTransform().getPosition(); + + Point3F newOffset = newPos - parentPos; + + if (!newOffset.isZero()) + { + //setMountOffset(newOffset); + mPos = newOffset; + } + + Point3F matEul = mat.toEuler(); + + //mRot = Point3F(mRadToDeg(matEul.x), mRadToDeg(matEul.y), mRadToDeg(matEul.z)); + + if (matEul != Point3F(0, 0, 0)) + { + Point3F mountEul = mMount.object->getTransform().toEuler(); + Point3F diff = matEul - mountEul; + + //setMountRotation(Point3F(mRadToDeg(diff.x), mRadToDeg(diff.y), mRadToDeg(diff.z))); + mRot = diff; + } + else + { + //setMountRotation(Point3F(0, 0, 0)); + mRot = Point3F(0, 0, 0); + } + + RotationF addRot = mRot + RotationF(mMount.object->getTransform()); + MatrixF transf = addRot.asMatrixF(); + transf.setPosition(mPos + mMount.object->getPosition()); + + Parent::setTransform(transf); + } + else + { + //Are we part of a prefab? + /*Prefab* p = Prefab::getPrefabByChild(this); + if (p) + { + //just let our prefab know we moved + p->childTransformUpdated(this, mat); + }*/ + //else + { + //mRot.set(mat); + //Parent::setTransform(mat); + + RotationF rot = RotationF(mat); + + EulerF tempRot = rot.asEulerF(RotationF::Degrees); + + Point3F pos; + + mat.getColumn(3,&pos); + + setTransform(pos, rot); + } + } +} + +void Entity::setTransform(Point3F position, RotationF rotation) +{ + if (isMounted()) + { + mPos = position; + mRot = rotation; + + RotationF addRot = mRot + RotationF(mMount.object->getTransform()); + MatrixF transf = addRot.asMatrixF(); + transf.setPosition(mPos + mMount.object->getPosition()); + + Parent::setTransform(transf); + + setMaskBits(TransformMask); + } + else + { + /*MatrixF newMat, imat, xmat, ymat, zmat; + Point3F radRot = Point3F(mDegToRad(rotation.x), mDegToRad(rotation.y), mDegToRad(rotation.z)); + xmat.set(EulerF(radRot.x, 0, 0)); + ymat.set(EulerF(0.0f, radRot.y, 0.0f)); + zmat.set(EulerF(0, 0, radRot.z)); + imat.mul(zmat, xmat); + newMat.mul(imat, ymat);*/ + + MatrixF newMat = rotation.asMatrixF(); + + newMat.setColumn(3, position); + + mPos = position; + mRot = rotation; + + setMaskBits(TransformMask); + //if (isServerObject()) + // setMaskBits(TransformMask); + + //setTransform(temp); + + // This test is a bit expensive so turn it off in release. +#ifdef TORQUE_DEBUG + //AssertFatal( mat.isAffine(), "SceneObject::setTransform() - Bad transform (non affine)!" ); +#endif + + //PROFILE_SCOPE(Entity_setTransform); + + // Update the transforms. + + Parent::setTransform(newMat); + + onTransformSet.trigger(&newMat); + + /*mObjToWorld = mWorldToObj = newMat; + mWorldToObj.affineInverse(); + // Update the world-space AABB. + resetWorldBox(); + // If we're in a SceneManager, sync our scene state. + if (mSceneManager != NULL) + mSceneManager->notifyObjectDirty(this); + setRenderTransform(newMat);*/ + } +} + +void Entity::setRenderTransform(const MatrixF &mat) +{ + Parent::setRenderTransform(mat); +} + +void Entity::setRenderTransform(Point3F position, RotationF rotation) +{ + if (isMounted()) + { + mPos = position; + mRot = rotation; + + RotationF addRot = mRot + RotationF(mMount.object->getTransform()); + MatrixF transf = addRot.asMatrixF(); + transf.setPosition(mPos + mMount.object->getPosition()); + + Parent::setRenderTransform(transf); + } + else + { + MatrixF newMat = rotation.asMatrixF(); + + newMat.setColumn(3, position); + + mPos = position; + mRot = rotation; + + Parent::setRenderTransform(newMat); + + onTransformSet.trigger(&newMat); + } +} + +MatrixF Entity::getTransform() +{ + if (isMounted()) + { + MatrixF mat; + + //Use transform from mount + mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat); + + Point3F transPos = mat.getPosition() + mPos; + + mat.mul(mRot.asMatrixF()); + + mat.setPosition(transPos); + + return mat; + } + else + { + return Parent::getTransform(); + } +} + +void Entity::setMountOffset(Point3F posOffset) +{ + if (isMounted()) + { + mMount.xfm.setColumn(3, posOffset); + //mPos = posOffset; + setMaskBits(MountedMask); + } +} + +void Entity::setMountRotation(EulerF rotOffset) +{ + if (isMounted()) + { + MatrixF temp, imat, xmat, ymat, zmat; + + Point3F radRot = Point3F(mDegToRad(rotOffset.x), mDegToRad(rotOffset.y), mDegToRad(rotOffset.z)); + xmat.set(EulerF(radRot.x, 0, 0)); + ymat.set(EulerF(0.0f, radRot.y, 0.0f)); + zmat.set(EulerF(0, 0, radRot.z)); + + imat.mul(zmat, xmat); + temp.mul(imat, ymat); + + temp.setColumn(3, mMount.xfm.getPosition()); + + mMount.xfm = temp; + //mRot = RotationF(temp); + setMaskBits(MountedMask); + } +} +// +void Entity::getCameraTransform(F32* pos, MatrixF* mat) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) { + if ((*it)->getCameraTransform(pos, mat)) { + return; + } + } +} + +void Entity::getMountTransform(S32 index, const MatrixF &xfm, MatrixF *outMat) +{ + RenderComponentInterface* renderInterface = getComponent(); + + if (renderInterface) + { + renderInterface->getShapeInstance()->animate(); + S32 nodeCount = renderInterface->getShapeInstance()->getShape()->nodes.size(); + + if (index >= 0 && index < nodeCount) + { + MatrixF mountTransform = renderInterface->getShapeInstance()->mNodeTransforms[index]; + mountTransform.mul(xfm); + const Point3F& scale = getScale(); + + // The position of the mount point needs to be scaled. + Point3F position = mountTransform.getPosition(); + position.convolve(scale); + mountTransform.setPosition(position); + + // Also we would like the object to be scaled to the model. + outMat->mul(mObjToWorld, mountTransform); + return; + } + } + + // Then let SceneObject handle it. + Parent::getMountTransform(index, xfm, outMat); +} + +void Entity::getRenderMountTransform(F32 delta, S32 index, const MatrixF &xfm, MatrixF *outMat) +{ + RenderComponentInterface* renderInterface = getComponent(); + + if (renderInterface && renderInterface->getShapeInstance()) + { + renderInterface->getShapeInstance()->animate(); + S32 nodeCount = renderInterface->getShapeInstance()->getShape()->nodes.size(); + + if (index >= 0 && index < nodeCount) + { + MatrixF mountTransform = renderInterface->getShapeInstance()->mNodeTransforms[index]; + mountTransform.mul(xfm); + const Point3F& scale = getScale(); + + // The position of the mount point needs to be scaled. + Point3F position = mountTransform.getPosition(); + position.convolve(scale); + mountTransform.setPosition(position); + + // Also we would like the object to be scaled to the model. + outMat->mul(getRenderTransform(), mountTransform); + return; + } + } + + // Then let SceneObject handle it. + Parent::getMountTransform(index, xfm, outMat); +} + +void Entity::setForwardVector(VectorF newForward, VectorF upVector) +{ + MatrixF mat = getTransform(); + + VectorF up(0.0f, 0.0f, 1.0f); + VectorF axisX; + VectorF axisY = newForward; + VectorF axisZ; + + if (upVector != VectorF::Zero) + up = upVector; + + // Validate and normalize input: + F32 lenSq; + lenSq = axisY.lenSquared(); + if (lenSq < 0.000001f) + { + axisY.set(0.0f, 1.0f, 0.0f); + Con::errorf("Entity::setForwardVector() - degenerate forward vector"); + } + else + { + axisY /= mSqrt(lenSq); + } + + + lenSq = up.lenSquared(); + if (lenSq < 0.000001f) + { + up.set(0.0f, 0.0f, 1.0f); + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - too small"); + } + else + { + up /= mSqrt(lenSq); + } + + if (fabsf(mDot(up, axisY)) > 0.9999f) + { + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - same as forward"); + // i haven't really tested this, but i think it generates something which should be not parallel to the previous vector: + F32 tmp = up.x; + up.x = -up.y; + up.y = up.z; + up.z = tmp; + } + + // construct the remaining axes: + mCross(axisY, up, &axisX); + mCross(axisX, axisY, &axisZ); + + mat.setColumn(0, axisX); + mat.setColumn(1, axisY); + mat.setColumn(2, axisZ); + + setTransform(mat); +} +// +//These basically just redirect to any collision behaviors we have +bool Entity::castRay(const Point3F &start, const Point3F &end, RayInfo* info) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + if ((*it)->castRay(start, end, info)) + { + return true; + } + } + return false; +} + +bool Entity::castRayRendered(const Point3F &start, const Point3F &end, RayInfo *info) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + if ((*it)->castRayRendered(start, end, info)) + { + return true; + } + } + return false; +} + +bool Entity::buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + return (*it)->buildPolyList(context, polyList, box, sphere); + } + + return false; +} + +void Entity::buildConvex(const Box3F& box, Convex* convex) +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + (*it)->buildConvex(box, convex); + } +} + +// +// Mounting and heirarchy manipulation +void Entity::mountObject(SceneObject* objB, MatrixF txfm) +{ + Parent::mountObject(objB, -1, txfm); + Parent::addObject(objB); +} + +void Entity::mountObject(SceneObject *obj, S32 node, const MatrixF &xfm) +{ + Parent::mountObject(obj, node, xfm); +} + +void Entity::onMount(SceneObject *obj, S32 node) +{ + deleteNotify(obj); + + // Are we mounting to a GameBase object? + Entity *entityObj = dynamic_cast(obj); + + if (entityObj && entityObj->getControlObject() != this) + processAfter(entityObj); + + if (!isGhost()) { + setMaskBits(MountedMask); + + //TODO implement this callback + //onMount_callback( this, obj, node ); + } +} + +void Entity::onUnmount(SceneObject *obj, S32 node) +{ + clearNotify(obj); + + Entity *entityObj = dynamic_cast(obj); + + if (entityObj && entityObj->getControlObject() != this) + clearProcessAfter(); + + if (!isGhost()) { + setMaskBits(MountedMask); + + //TODO implement this callback + //onUnmount_callback( this, obj, node ); + } +} + +//Heirarchy stuff +void Entity::addObject(SimObject* object) +{ + Component* component = dynamic_cast(object); + if (component) + { + addComponent(component); + return; + } + + Entity* e = dynamic_cast(object); + if (e) + { + MatrixF offset; + + //offset.mul(getWorldTransform(), e->getWorldTransform()); + + //check if we're mounting to a node on a shape we have + String node = e->getDataField("mountNode", NULL); + if (!node.isEmpty()) + { + RenderComponentInterface *renderInterface = getComponent(); + if (renderInterface) + { + TSShape* shape = renderInterface->getShape(); + S32 nodeIdx = shape->findNode(node); + + mountObject(e, nodeIdx, MatrixF::Identity); + } + else + { + mountObject(e, MatrixF::Identity); + } + } + else + { + /*Point3F posOffset = mPos - e->getPosition(); + mPos = posOffset; + + RotationF rotOffset = mRot - e->getRotation(); + mRot = rotOffset; + setMaskBits(TransformMask); + mountObject(e, MatrixF::Identity);*/ + + mountObject(e, MatrixF::Identity); + } + + //e->setMountOffset(e->getPosition() - getPosition()); + + //Point3F diff = getWorldTransform().toEuler() - e->getWorldTransform().toEuler(); + + //e->setMountRotation(Point3F(mRadToDeg(diff.x),mRadToDeg(diff.y),mRadToDeg(diff.z))); + + //mountObject(e, offset); + } + else + { + SceneObject* so = dynamic_cast(object); + if (so) + { + //get the difference and build it as our offset! + Point3F posOffset = so->getPosition() - mPos; + RotationF rotOffset = RotationF(so->getTransform()) - mRot; + + MatrixF offset = rotOffset.asMatrixF(); + offset.setPosition(posOffset); + + mountObject(so, offset); + return; + } + } + + Parent::addObject(object); +} + +void Entity::removeObject(SimObject* object) +{ + Entity* e = dynamic_cast(object); + if (e) + { + mPos = mPos + e->getPosition(); + mRot = mRot + e->getRotation(); + unmountObject(e); + setMaskBits(TransformMask); + } + else + { + SceneObject* so = dynamic_cast(object); + if (so) + unmountObject(so); + } + + Parent::removeObject(object); +} + +bool Entity::addComponent(Component *comp) +{ + if (comp == NULL || !comp->isProperlyAdded()) + return false; + + //double-check were not re-adding anything + mComponents.push_back(comp); + + // Register the component with this owner. + comp->setOwner(this); + + //if we've already been added and this is being added after the fact(at runtime), + //then just go ahead and call it's onComponentAdd so it can get to work + if (mInitialized) + comp->onComponentAdd(); + + onComponentAdded.trigger(comp); + + return true; +} + +SimObject* Entity::findObjectByInternalName(StringTableEntry internalName, bool searchChildren) +{ + for (U32 i = 0; i < mComponents.size(); i++) + { + if (mComponents[i]->getInternalName() == internalName) + { + return mComponents[i]; + } + } + + return Parent::findObjectByInternalName(internalName, searchChildren); +} + +////////////////////////////////////////////////////////////////////////// + +bool Entity::removeComponent(Component *comp, bool deleteComponent) +{ + if (comp == NULL) + return false; + + if(mComponents.remove(comp)) + { + AssertFatal(comp->isProperlyAdded(), "Don't know how but a component is not registered w/ the sim"); + + //setComponentsDirty(); + + onComponentRemoved.trigger(comp); + + comp->setOwner(NULL); + + comp->onComponentRemove(); //in case the behavior needs to do cleanup on the owner + + if (deleteComponent) + comp->safeDeleteObject(); + + return true; + } + + return false; +} + +////////////////////////////////////////////////////////////////////////// +//NOTE: +//The actor class calls this and flags the deletion of the behaviors to false so that behaviors that should no longer be attached during +//a network update will indeed be removed from the object. The reason it doesn't delete them is because when clearing the local behavior +//list, it would delete them, purging the ghost, and causing a crash when the unpack update tried to fetch any existing behaviors' ghosts +//to re-add them. Need to implement a clean clear function that will clear the local list, and only delete unused behaviors during an update. +void Entity::clearComponents(bool deleteComponents) +{ + bool srv = isServerObject(); + if (!deleteComponents) + { + while (mComponents.size() > 0) + { + removeComponent(mComponents.first(), deleteComponents); + } + } + else + { + while (mComponents.size() > 0) + { + Component* comp = mComponents.first(); + + if (comp) + { + comp->onComponentRemove(); //in case the behavior needs to do cleanup on the owner + + bool removed = mComponents.remove(comp); + + //we only need to delete them on the server side. they'll be cleaned up on the client side + //via the ghosting system for us + if (isServerObject()) + comp->deleteObject(); + } + } + } +} + +////////////////////////////////////////////////////////////////////////// +Component *Entity::getComponent(const U32 index) const +{ + if (index < mComponents.size()) + return mComponents[index]; + + return NULL; +} + +Component *Entity::getComponent(String componentType) +{ + for (U32 i = 0; i < mComponents.size(); i++) + { + Component* comp = mComponents[i]; + + /*String namespaceName = comp->getNamespace()->mName; + //check our namespace first + if (namespaceName == componentType) + { + return comp; + } + else + {*/ + //lets scan up, just to be sure + Namespace *NS = comp->getNamespace(); + + //we shouldn't ever go past Component into net object, as we're no longer dealing with component classes + while (dStrcmp(NS->getName(), "NetObject")) + { + String namespaceName = NS->getName(); + + if (namespaceName == componentType) + { + return comp; + } + else + { + NS = NS->getParent(); + } + } + //} + } + + return NULL; +} + +void Entity::onInspect() +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) { + (*it)->onInspect(); + } + + GuiTreeViewCtrl *editorTree = dynamic_cast(Sim::findObject("EditorTree")); + if (!editorTree) + return; + + GuiTreeViewCtrl::Item *newItem, *parentItem; + + parentItem = editorTree->getItem(editorTree->findItemByObjectId(getId())); + + S32 componentID = editorTree->insertItem(parentItem->getID(), "Components"); + + newItem = editorTree->getItem(componentID); + newItem->mState.set(GuiTreeViewCtrl::Item::VirtualParent); + newItem->mState.set(GuiTreeViewCtrl::Item::DenyDrag); + //newItem->mState.set(GuiTreeViewCtrl::Item::InspectorData); + newItem->mState.set(GuiTreeViewCtrl::Item::ForceItemName); + //newItem->mInspectorInfo.mObject = this; + + for (U32 i = 0; i < mComponents.size(); i++) + { + String compName = mComponents[i]->getFriendlyName(); + S32 compID = editorTree->insertItem(componentID, compName); + newItem = editorTree->getItem(compID); + newItem->mInspectorInfo.mObject = mComponents[i]; + newItem->mState.set(GuiTreeViewCtrl::Item::ForceItemName); + newItem->mState.set(GuiTreeViewCtrl::Item::DenyDrag); + newItem->mState.set(GuiTreeViewCtrl::Item::InspectorData); + } + + editorTree->buildVisibleTree(true); +} + +void Entity::onEndInspect() +{ + Vector updaters = getComponents(); + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) { + (*it)->onEndInspect(); + } + + GuiTreeViewCtrl *editorTree = dynamic_cast(Sim::findObject("EditorTree")); + if (!editorTree) + return; + + S32 componentItemIdx = editorTree->findItemByName("Components"); + + editorTree->removeItem(componentItemIdx, false); +} + +static void writeTabs(Stream &stream, U32 count) +{ + char tab[] = " "; + while (count--) + stream.write(3, (void*)tab); +} + +void Entity::write(Stream &stream, U32 tabStop, U32 flags) +{ + // Do *not* call parent on this + + /*VectorPtr &componentList = lockComponentList(); + // export selected only? + if( ( flags & SelectedOnly ) && !isSelected() ) + { + for( BehaviorObjectIterator i = componentList.begin(); i != componentList.end(); i++ ) + (*i)->write(stream, tabStop, flags); + + goto write_end; + }*/ + + //catch if we have any written behavior fields already in the file, and clear them. We don't need to double-up + //the entries for no reason. + /*if(getFieldDictionary()) + { + //get our dynamic field count, then parse through them to see if they're a behavior or not + + //reset it + SimFieldDictionary* fieldDictionary = getFieldDictionary(); + SimFieldDictionaryIterator itr(fieldDictionary); + for (S32 i = 0; i < fieldDictionary->getNumFields(); i++) + { + if (!(*itr)) + break; + + SimFieldDictionary::Entry* entry = *itr; + if(strstr(entry->slotName, "_behavior")) + { + entry->slotName = ""; + entry->value = ""; + } + + ++itr; + } + }*/ + //all existing written behavior fields should be cleared. now write the object block + + writeTabs(stream, tabStop); + + char buffer[1024]; + dSprintf(buffer, sizeof(buffer), "new %s(%s) {\r\n", getClassName(), getName() ? getName() : ""); + stream.write(dStrlen(buffer), buffer); + writeFields(stream, tabStop + 1); + + stream.write(1, "\n"); + ////first, write out our behavior objects + + // NOW we write the behavior fields proper + if (mComponents.size() > 0) + { + // Pack out the behaviors into fields + U32 i = 0; + for (U32 i = 0; i < mComponents.size(); i++) + { + writeTabs(stream, tabStop + 1); + char buffer[1024]; + dSprintf(buffer, sizeof(buffer), "new %s() {\r\n", mComponents[i]->getClassName()); + stream.write(dStrlen(buffer), buffer); + //bi->writeFields( stream, tabStop + 2 ); + + mComponents[i]->packToStream(stream, tabStop + 2, i - 1, flags); + + writeTabs(stream, tabStop + 1); + stream.write(4, "};\r\n"); + } + } + + // + //if (size() > 0) + // stream.write(2, "\r\n"); + + for (U32 i = 0; i < size(); i++) + { + SimObject* child = (*this)[i]; + if (child->getCanSave()) + child->write(stream, tabStop + 1, flags); + } + + //stream.write(2, "\r\n"); + + writeTabs(stream, tabStop); + stream.write(4, "};\r\n"); + + //write_end: + //unlockComponentList(); +} + +SimObject* Entity::getTamlChild(const U32 childIndex) const +{ + // Sanity! + AssertFatal(childIndex < getTamlChildCount(), "SimSet::getTamlChild() - Child index is out of range."); + + // For when the assert is not used. + if (childIndex >= getTamlChildCount()) + return NULL; + + //we always order components first, child objects second + if (childIndex >= getComponentCount()) + return at(childIndex - getComponentCount()); + else + return getComponent(childIndex); +} +// +void Entity::onCameraScopeQuery(NetConnection* connection, CameraScopeQuery* query) +{ + // Object itself is in scope. + Parent::onCameraScopeQuery(connection, query); + + if (CameraInterface* cI = getComponent()) + { + cI->onCameraScopeQuery(connection, query); + } +} +// +void Entity::setObjectBox(Box3F objBox) +{ + mObjBox = objBox; + resetWorldBox(); + + if (isServerObject()) + setMaskBits(BoundsMask); +} + +void Entity::updateContainer() +{ + PROFILE_SCOPE(Entity_updateContainer); + + // Update container drag and buoyancy properties + containerInfo.box = getWorldBox(); + //containerInfo.mass = mMass; + + getContainer()->findObjects(containerInfo.box, WaterObjectType | PhysicalZoneObjectType, findRouter, &containerInfo); + + //mWaterCoverage = info.waterCoverage; + //mLiquidType = info.liquidType; + //mLiquidHeight = info.waterHeight; + //setCurrentWaterObject( info.waterObject ); + + // This value might be useful as a datablock value, + // This is what allows the player to stand in shallow water (below this coverage) + // without jiggling from buoyancy + /*if (info.waterCoverage >= 0.25f) + { + // water viscosity is used as drag for in water. + // ShapeBaseData drag is used for drag outside of water. + // Combine these two components to calculate this ShapeBase object's + // current drag. + mDrag = (info.waterCoverage * info.waterViscosity) + + (1.0f - info.waterCoverage) * mDrag; + //mBuoyancy = (info.waterDensity / mDataBlock->density) * info.waterCoverage; + } + + //mAppliedForce = info.appliedForce; + mGravityMod = info.gravityScale;*/ +} +// + +void Entity::setComponentsDirty() +{ + if (mToLoadComponents.empty()) + mStartComponentUpdate = true; + + //we need to build a list of behaviors that need to be pushed across the network + for (U32 i = 0; i < mComponents.size(); i++) + { + // We can do this because both are in the string table + Component *comp = mComponents[i]; + + if (comp->isNetworked()) + { + bool unique = true; + for (U32 i = 0; i < mToLoadComponents.size(); i++) + { + if (mToLoadComponents[i]->getId() == comp->getId()) + { + unique = false; + break; + } + } + if (unique) + mToLoadComponents.push_back(comp); + } + } + + setMaskBits(ComponentsMask); +} + +void Entity::setComponentDirty(Component *comp, bool forceUpdate) +{ + bool found = false; + for (U32 i = 0; i < mComponents.size(); i++) + { + if (mComponents[i]->getId() == comp->getId()) + { + mComponents[i]->setOwner(this); + return; + } + } + + if (!found) + return; + + //if(mToLoadComponents.empty()) + // mStartComponentUpdate = true; + + /*if (comp->isNetworked() || forceUpdate) + { + bool unique = true; + for (U32 i = 0; i < mToLoadComponents.size(); i++) + { + if (mToLoadComponents[i]->getId() == comp->getId()) + { + unique = false; + break; + } + } + if (unique) + mToLoadComponents.push_back(comp); + } + + setMaskBits(ComponentsMask);*/ + +} + +DefineEngineMethod(Entity, mountObject, bool, + (SceneObject* objB, TransformF txfm), (MatrixF::Identity), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (objB) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + object->mountObject(objB, /*MatrixF::Identity*/txfm.getMatrix()); + return true; + } + return false; +} + +DefineEngineMethod(Entity, setMountOffset, void, + (Point3F posOffset), (Point3F(0, 0, 0)), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + object->setMountOffset(posOffset); +} + +DefineEngineMethod(Entity, setMountRotation, void, + (EulerF rotOffset), (EulerF(0, 0, 0)), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + object->setMountRotation(rotOffset); +} + +DefineEngineMethod(Entity, getMountTransform, TransformF, (), , + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + MatrixF mat; + object->getMountTransform(0, MatrixF::Identity, &mat); + return mat; +} + +DefineEngineMethod(Entity, setBox, void, + (Point3F box), (Point3F(1, 1, 1)), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + object->setObjectBox(Box3F(-box, box)); +} + + +/*DefineConsoleMethod(Entity, callOnComponents, void, (const char* functionName), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->callOnComponents(functionName); +} + +ConsoleMethod(Entity, callMethod, void, 3, 64, "(methodName, argi) Calls script defined method\n" + "@param methodName The method's name as a string\n" + "@param argi Any arguments to pass to the method\n" + "@return No return value" + "@note %obj.callMethod( %methodName, %arg1, %arg2, ... );\n") + +{ + object->callMethodArgList(argc - 1, argv + 2); +} + +ConsoleMethod(Entity, addComponents, void, 2, 2, "() - Add all fielded behaviors\n" + "@return No return value") +{ + object->addComponents(); +}*/ + +ConsoleMethod(Entity, addComponent, bool, 3, 3, "(ComponentInstance bi) - Add a behavior to the object\n" + "@param bi The behavior instance to add" + "@return (bool success) Whether or not the behavior was successfully added") +{ + Component *comp = dynamic_cast(Sim::findObject(argv[2])); + + if (comp != NULL) + { + bool success = object->addComponent(comp); + + if (success) + { + //Placed here so we can differentiate against adding a new behavior during runtime, or when we load all + //fielded behaviors on mission load. This way, we can ensure that we only call the callback + //once everything is loaded. This avoids any problems with looking for behaviors that haven't been added yet, etc. + if (comp->isMethod("onBehaviorAdd")) + Con::executef(comp, "onBehaviorAdd"); + + return true; + } + } + + return false; +} + +ConsoleMethod(Entity, removeComponent, bool, 3, 4, "(ComponentInstance bi, [bool deleteBehavior = true])\n" + "@param bi The behavior instance to remove\n" + "@param deleteBehavior Whether or not to delete the behavior\n" + "@return (bool success) Whether the behavior was successfully removed") +{ + bool deleteComponent = true; + if (argc > 3) + deleteComponent = dAtob(argv[3]); + + return object->removeComponent(dynamic_cast(Sim::findObject(argv[2])), deleteComponent); +} + +ConsoleMethod(Entity, clearComponents, void, 2, 2, "() - Clear all behavior instances\n" + "@return No return value") +{ + object->clearComponents(); +} + +ConsoleMethod(Entity, getComponentByIndex, S32, 3, 3, "(int index) - Gets a particular behavior\n" + "@param index The index of the behavior to get\n" + "@return (ComponentInstance bi) The behavior instance you requested") +{ + Component *comp = object->getComponent(dAtoi(argv[2])); + + return (comp != NULL) ? comp->getId() : 0; +} + +DefineConsoleMethod(Entity, getComponent, S32, (String componentName), (""), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + Component *comp = object->getComponent(componentName); + + return (comp != NULL) ? comp->getId() : 0; + return 0; +} + +/*ConsoleMethod(Entity, getBehaviorByType, S32, 3, 3, "(string BehaviorTemplateName) - gets a behavior\n" + "@param BehaviorTemplateName The name of the template of the behavior instance you want\n" + "@return (ComponentInstance bi) The behavior instance you requested") +{ + ComponentInstance *bInstance = object->getComponentByType(StringTable->insert(argv[2])); + + return (bInstance != NULL) ? bInstance->getId() : 0; +}*/ + +/*ConsoleMethod(Entity, reOrder, bool, 3, 3, "(ComponentInstance inst, [int desiredIndex = 0])\n" + "@param inst The behavior instance you want to reorder\n" + "@param desiredIndex The index you want the behavior instance to be reordered to\n" + "@return (bool success) Whether or not the behavior instance was successfully reordered") +{ + Component *inst = dynamic_cast(Sim::findObject(argv[1])); + + if (inst == NULL) + return false; + + U32 idx = 0; + if (argc > 2) + idx = dAtoi(argv[2]); + + return object->reOrder(inst, idx); +}*/ + +ConsoleMethod(Entity, getComponentCount, S32, 2, 2, "() - Get the count of behaviors on an object\n" + "@return (int count) The number of behaviors on an object") +{ + return object->getComponentCount(); +} + +DefineConsoleMethod(Entity, setComponentDirty, void, (S32 componentID, bool forceUpdate), (0, false), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + /*Component* comp; + if (Sim::findObject(componentID, comp)) + object->setComponentDirty(comp, forceUpdate);*/ +} + +DefineConsoleMethod(Entity, getMoveVector, VectorF, (),, + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getControllingClient() != NULL) + { + //fetch our last move + if (object->lastMove.x != 0 || object->lastMove.y != 0 || object->lastMove.z != 0) + return VectorF(object->lastMove.x, object->lastMove.y, object->lastMove.z); + } + + return VectorF::Zero; +} + +DefineConsoleMethod(Entity, getMoveRotation, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + if(object->getControllingClient() != NULL) + { + //fetch our last move + if (object->lastMove.pitch != 0 || object->lastMove.roll != 0 || object->lastMove.yaw != 0) + return VectorF(object->lastMove.pitch, object->lastMove.roll, object->lastMove.yaw); + } + + return VectorF::Zero; +} + +DefineConsoleMethod(Entity, getMoveTrigger, bool, (S32 triggerNum), (0), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getControllingClient() != NULL && triggerNum < MaxTriggerKeys) + { + return object->lastMove.trigger[triggerNum]; + } + + return false; +} + +DefineConsoleMethod(Entity, setForwardVector, void, (VectorF newForward), (VectorF(0,0,0)), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->setForwardVector(newForward); +} + +DefineConsoleMethod(Entity, lookAt, void, (Point3F lookPosition),, + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + //object->setForwardVector(newForward); +} + +DefineConsoleMethod(Entity, rotateTo, void, (Point3F lookPosition, F32 degreePerSecond), (1.0), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + //object->setForwardVector(newForward); +} \ No newline at end of file diff --git a/Engine/source/T3D/Entity.h b/Engine/source/T3D/Entity.h new file mode 100644 index 0000000000..e2a35bf9f2 --- /dev/null +++ b/Engine/source/T3D/Entity.h @@ -0,0 +1,287 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef ENTITY_H +#define ENTITY_H + +#ifndef _GAMEBASE_H_ +#include "T3D/gameBase/gameBase.h" +#endif +#ifndef _MOVEMANAGER_H_ +#include "T3D/gameBase/moveManager.h" +#endif +#ifndef COMPONENT_H +#include "T3D/Components/Component.h" +#endif +#ifndef MROTATION_H +#include "math/mRotation.h" +#endif +#ifndef _CONTAINERQUERY_H_ +#include "T3D/containerQuery.h" +#endif + +//************************************************************************** +// Entity +//************************************************************************** +class Entity : public GameBase +{ + typedef GameBase Parent; + friend class Component; + +private: + Point3F mPos; + RotationF mRot; + + Vector mComponents; + + Vector mToLoadComponents; + + bool mStartComponentUpdate; + + ContainerQueryInfo containerInfo; + + bool mInitialized; + + Signal< void(Component*) > Entity::onComponentAdded; + Signal< void(Component*) > Entity::onComponentRemoved; + + Signal< void(MatrixF*) > Entity::onTransformSet; + +protected: + + virtual void processTick(const Move* move); + virtual void advanceTime(F32 dt); + virtual void interpolateTick(F32 delta); + + void prepRenderImage(SceneRenderState *state); + + virtual bool onAdd(); + virtual void onRemove(); + +public: + struct StateDelta + { + Move move; ///< Last move from server + F32 dt; ///< Last interpolation time + // Interpolation data + Point3F pos; + Point3F posVec; + QuatF rot[2]; + // Warp data + S32 warpTicks; ///< Number of ticks to warp + S32 warpCount; ///< Current pos in warp + Point3F warpOffset; + QuatF warpRot[2]; + }; + + enum MaskBits + { + TransformMask = Parent::NextFreeMask << 0, + BoundsMask = Parent::NextFreeMask << 1, + ComponentsMask = Parent::NextFreeMask << 2, + NoWarpMask = Parent::NextFreeMask << 3, + NextFreeMask = Parent::NextFreeMask << 4 + }; + + StateDelta mDelta; + S32 mPredictionCount; ///< Number of ticks to predict + + Move lastMove; + + // + Entity(); + ~Entity(); + + static void initPersistFields(); + virtual void onPostAdd(); + + virtual void setTransform(const MatrixF &mat); + virtual void setRenderTransform(const MatrixF &mat); + + void setTransform(Point3F position, RotationF rotation); + + void setRenderTransform(Point3F position, RotationF rotation); + + virtual MatrixF getTransform(); + virtual Point3F getPosition() const { return mPos; } + + //void setTransform(Point3F position, RotationF rot); + + //void setRotation(RotationF rotation); + + void setRotation(RotationF rotation) { + mRot = rotation; + setMaskBits(TransformMask); + }; + RotationF getRotation() { return mRot; } + + void setMountOffset(Point3F posOffset); + void setMountRotation(EulerF rotOffset); + + //static bool _setEulerRotation( void *object, const char *index, const char *data ); + static bool _setPosition(void *object, const char *index, const char *data); + static const char * _getPosition(void* obj, const char* data); + + static bool _setRotation(void *object, const char *index, const char *data); + static const char * _getRotation(void* obj, const char* data); + + virtual void getMountTransform(S32 index, const MatrixF &xfm, MatrixF *outMat); + virtual void getRenderMountTransform(F32 delta, S32 index, const MatrixF &xfm, MatrixF *outMat); + + void setForwardVector(VectorF newForward, VectorF upVector = VectorF::Zero); + + virtual void mountObject(SceneObject *obj, S32 node, const MatrixF &xfm = MatrixF::Identity); + void mountObject(SceneObject* objB, MatrixF txfm); + void onMount(SceneObject *obj, S32 node); + void onUnmount(SceneObject *obj, S32 node); + + // NetObject + U32 packUpdate(NetConnection *conn, U32 mask, BitStream *stream); + void unpackUpdate(NetConnection *conn, BitStream *stream); + + void setComponentsDirty(); + void setComponentDirty(Component *comp, bool forceUpdate = false); + + //Components + virtual bool deferAddingComponents() const { return true; } + + template + T* getComponent(); + template + Vector getComponents(); + + Component* getComponent(String componentType); + + U32 getComponentCount() const + { + return mComponents.size(); + } + + virtual void setObjectBox(Box3F objBox); + + void resetWorldBox() { Parent::resetWorldBox(); } + void resetObjectBox() { Parent::resetObjectBox(); } + void resetRenderWorldBox() { Parent::resetRenderWorldBox(); } + + //function redirects for collisions + bool castRay(const Point3F &start, const Point3F &end, RayInfo* info); + bool castRayRendered(const Point3F &start, const Point3F &end, RayInfo* info); + bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere); + virtual void buildConvex(const Box3F& box, Convex* convex); + + Signal< void(SimObject*, String, String) > onDataSet; + virtual void setDataField(StringTableEntry slotName, const char *array, const char *value); + virtual void onStaticModified(const char* slotName, const char* newValue); + + //void pushEvent(const char* eventName, Vector eventParams); + + void updateContainer(); + + ContainerQueryInfo getContainerInfo() { return containerInfo; } + + //camera stuff + virtual void getCameraTransform(F32* pos, MatrixF* mat); + virtual void onCameraScopeQuery(NetConnection* connection, CameraScopeQuery* query); + + //Heirarchy stuff + virtual void addObject(SimObject* object); + virtual void removeObject(SimObject* object); + + virtual SimObject* findObjectByInternalName(StringTableEntry internalName, bool searchChildren); + + //component stuff + bool addComponent(Component *comp); + bool removeComponent(Component *comp, bool deleteComponent); + void clearComponents(bool deleteComponents = true); + Component* getComponent(const U32 index) const; + + void onInspect(); + void onEndInspect(); + + virtual void write(Stream &stream, U32 tabStop, U32 flags); + + // TamlChildren + virtual U32 getTamlChildCount(void) const + { + U32 componentCount = getComponentCount(); + U32 childSize = (U32)size(); + return componentCount + childSize; + } + + virtual SimObject* getTamlChild(const U32 childIndex) const; + + virtual void addTamlChild(SimObject* pSimObject) + { + // Sanity! + AssertFatal(pSimObject != NULL, "SimSet::addTamlChild() - Cannot add a NULL child object."); + + addObject(pSimObject); + } + + Box3F getObjectBox() { return mObjBox; } + MatrixF getWorldToObj() { return mWorldToObj; } + MatrixF getObjToWorld() { return mObjToWorld; } + + DECLARE_CONOBJECT(Entity); + +}; + +template +T *Entity::getComponent() +{ + U32 componentCount = getComponentCount(); + for (U32 i = 0; i < componentCount; i++) + { + T* t = dynamic_cast(mComponents[i]); + + if (t) + { + return t; + } + } + return NULL; +} + +template +Vector Entity::getComponents() +{ + Vector foundObjects; + + T *curObj; + Component* comp; + + // Loop through our child objects. + for (U32 i = 0; i < mComponents.size(); i++) + { + if (!mComponents[i]->isEnabled()) + continue; + + curObj = dynamic_cast(mComponents[i]); + + // Add this child object if appropriate. + if (curObj) + foundObjects.push_back(curObj); + } + + return foundObjects; +} +#endif //ENTITY_H diff --git a/Engine/source/T3D/objectTypes.h b/Engine/source/T3D/objectTypes.h index e65745e1b1..5f32667080 100644 --- a/Engine/source/T3D/objectTypes.h +++ b/Engine/source/T3D/objectTypes.h @@ -147,21 +147,25 @@ enum SceneObjectTypes /// @see PhysicalZone PhysicalZoneObjectType = BIT( 22 ), + EntityObjectType = BIT(23), /// @} }; enum SceneObjectTypeMasks { - STATIC_COLLISION_TYPEMASK = StaticShapeObjectType, + STATIC_COLLISION_TYPEMASK = (StaticShapeObjectType | + EntityObjectType), DAMAGEABLE_TYPEMASK = ( PlayerObjectType | + EntityObjectType | VehicleObjectType ), /// Typemask for objects that should be rendered into shadow passes. /// These should be all objects that are either meant to receive or cast /// shadows or both. SHADOW_TYPEMASK = ( StaticShapeObjectType | - DynamicShapeObjectType ), + DynamicShapeObjectType | + EntityObjectType), /// Typemask for objects that should be subjected to more fine-grained /// culling tests. Anything that is trivial rendering stuff or doesn't @@ -172,6 +176,7 @@ enum SceneObjectTypeMasks CULLING_INCLUDE_TYPEMASK = ( GameBaseObjectType | // Includes most other renderable types; but broader than we ideally want. StaticShapeObjectType | DynamicShapeObjectType | + EntityObjectType | ZoneObjectType ), // This improves the result of zone traversals. /// Mask for objects that should be specifically excluded from zone culling. @@ -185,7 +190,9 @@ enum SceneObjectTypeMasks StaticShapeObjectType | DynamicShapeObjectType | LightObjectType | // Flares. - GameBaseObjectType ), + GameBaseObjectType | + TriggerObjectType | + EntityObjectType), /// Typemask to use for rendering when inside the editor. EDITOR_RENDER_TYPEMASK = U32( -1 ), From fa78a2f3547a6be8d95009221dae593c0f834a3e Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 14 May 2016 00:00:02 -0500 Subject: [PATCH 220/324] Adds Component, the various main component classes and their interfaces. --- .../Animation/animationComponent.cpp | 715 +++++++++++++++ .../components/Animation/animationComponent.h | 138 +++ .../animationComponent_ScriptBinding.h | 222 +++++ .../T3D/components/Camera/CameraComponent.cpp | 483 ++++++++++ .../T3D/components/Camera/CameraComponent.h | 159 ++++ .../Camera/CameraComponent_ScriptBinding.h | 91 ++ .../Camera/CameraOrbiterComponent.cpp | 146 +++ .../Camera/CameraOrbiterComponent.h | 71 ++ .../CollisionComponent_ScriptBinding.h | 172 ++++ .../Collision/collisionComponent.cpp | 582 ++++++++++++ .../components/Collision/collisionComponent.h | 208 +++++ .../Collision/collisionInterfaces.cpp | 258 ++++++ .../Collision/collisionInterfaces.h | 167 ++++ .../components/Collision/collisionTrigger.cpp | 619 +++++++++++++ .../components/Collision/collisionTrigger.h | 145 +++ Engine/source/T3D/components/Component.cpp | 638 +++++++++++++ Engine/source/T3D/components/Component.h | 197 ++++ .../components/Game/StateMachineComponent.cpp | 215 +++++ .../components/Game/StateMachineComponent.h | 81 ++ .../T3D/components/Game/stateMachine.cpp | 434 +++++++++ .../source/T3D/components/Game/stateMachine.h | 259 ++++++ .../T3D/components/Game/triggerComponent.cpp | 358 ++++++++ .../T3D/components/Game/triggerComponent.h | 74 ++ .../components/Physics/physicsBehavior.cpp | 368 ++++++++ .../T3D/components/Physics/physicsBehavior.h | 135 +++ .../Physics/physicsComponentInterface.cpp | 0 .../Physics/physicsComponentInterface.h | 49 + .../Physics/playerControllerComponent.cpp | 863 ++++++++++++++++++ .../Physics/playerControllerComponent.h | 212 +++++ .../components/Physics/rigidBodyComponent.cpp | 467 ++++++++++ .../components/Physics/rigidBodyComponent.h | 183 ++++ .../T3D/components/Render/MeshComponent.cpp | 524 +++++++++++ .../T3D/components/Render/MeshComponent.h | 183 ++++ .../Render/MeshComponent_ScriptBinding.h | 155 ++++ .../Render/renderComponentInterface.h | 62 ++ Engine/source/T3D/components/coreInterfaces.h | 101 ++ Engine/source/console/consoleObject.h | 2 + 37 files changed, 9736 insertions(+) create mode 100644 Engine/source/T3D/components/Animation/animationComponent.cpp create mode 100644 Engine/source/T3D/components/Animation/animationComponent.h create mode 100644 Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h create mode 100644 Engine/source/T3D/components/Camera/CameraComponent.cpp create mode 100644 Engine/source/T3D/components/Camera/CameraComponent.h create mode 100644 Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h create mode 100644 Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp create mode 100644 Engine/source/T3D/components/Camera/CameraOrbiterComponent.h create mode 100644 Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h create mode 100644 Engine/source/T3D/components/Collision/collisionComponent.cpp create mode 100644 Engine/source/T3D/components/Collision/collisionComponent.h create mode 100644 Engine/source/T3D/components/Collision/collisionInterfaces.cpp create mode 100644 Engine/source/T3D/components/Collision/collisionInterfaces.h create mode 100644 Engine/source/T3D/components/Collision/collisionTrigger.cpp create mode 100644 Engine/source/T3D/components/Collision/collisionTrigger.h create mode 100644 Engine/source/T3D/components/Component.cpp create mode 100644 Engine/source/T3D/components/Component.h create mode 100644 Engine/source/T3D/components/Game/StateMachineComponent.cpp create mode 100644 Engine/source/T3D/components/Game/StateMachineComponent.h create mode 100644 Engine/source/T3D/components/Game/stateMachine.cpp create mode 100644 Engine/source/T3D/components/Game/stateMachine.h create mode 100644 Engine/source/T3D/components/Game/triggerComponent.cpp create mode 100644 Engine/source/T3D/components/Game/triggerComponent.h create mode 100644 Engine/source/T3D/components/Physics/physicsBehavior.cpp create mode 100644 Engine/source/T3D/components/Physics/physicsBehavior.h create mode 100644 Engine/source/T3D/components/Physics/physicsComponentInterface.cpp create mode 100644 Engine/source/T3D/components/Physics/physicsComponentInterface.h create mode 100644 Engine/source/T3D/components/Physics/playerControllerComponent.cpp create mode 100644 Engine/source/T3D/components/Physics/playerControllerComponent.h create mode 100644 Engine/source/T3D/components/Physics/rigidBodyComponent.cpp create mode 100644 Engine/source/T3D/components/Physics/rigidBodyComponent.h create mode 100644 Engine/source/T3D/components/Render/MeshComponent.cpp create mode 100644 Engine/source/T3D/components/Render/MeshComponent.h create mode 100644 Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h create mode 100644 Engine/source/T3D/components/Render/renderComponentInterface.h create mode 100644 Engine/source/T3D/components/coreInterfaces.h diff --git a/Engine/source/T3D/components/Animation/animationComponent.cpp b/Engine/source/T3D/components/Animation/animationComponent.cpp new file mode 100644 index 0000000000..a43eedd7aa --- /dev/null +++ b/Engine/source/T3D/components/Animation/animationComponent.cpp @@ -0,0 +1,715 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/Animation/AnimationComponent.h" +#include "T3D/Components/Animation/AnimationComponent_ScriptBinding.h" +#include "T3D/components/Render/MeshComponent.h" + +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "sim/netConnection.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "gfx/sim/debugDraw.h" + +extern bool gEditingMission; + +////////////////////////////////////////////////////////////////////////// +// Callbacks +////////////////////////////////////////////////////////////////////////// +IMPLEMENT_CALLBACK( AnimationComponent, onAnimationStart, void, ( Component* obj, const String& animName ), ( obj, animName ), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + +IMPLEMENT_CALLBACK(AnimationComponent, onAnimationEnd, void, (Component* obj, const char* animName), (obj, animName), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + +IMPLEMENT_CALLBACK(AnimationComponent, onAnimationTrigger, void, (Component* obj, const String& animName, S32 triggerID), (obj, animName, triggerID), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +AnimationComponent::AnimationComponent() : Component() +{ + mNetworked = true; + mNetFlags.set(Ghostable | ScopeAlways); + + mFriendlyName = "Animation(Component)"; + mComponentType = "Render"; + + mDescription = getDescriptionText("Allows a rendered mesh to be animated"); + + mOwnerRenderInst = NULL; + + mOwnerShapeInstance = NULL; + + for (U32 i = 0; i < MaxScriptThreads; i++) + { + mAnimationThreads[i].sequence = -1; + mAnimationThreads[i].thread = 0; + mAnimationThreads[i].sound = 0; + mAnimationThreads[i].state = Thread::Stop; + mAnimationThreads[i].atEnd = false; + mAnimationThreads[i].timescale = 1.f; + mAnimationThreads[i].position = -1.f; + mAnimationThreads[i].transition = true; + } +} + +AnimationComponent::~AnimationComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(AnimationComponent); + +bool AnimationComponent::onAdd() +{ + if (!Parent::onAdd()) + return false; + + //we need at least one layer + for (U32 i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + + if (st.sequence != -1) + { + // TG: Need to see about suppressing non-cyclic sounds + // if the sequences were activated before the object was + // ghosted. + // TG: Cyclic animations need to have a random pos if + // they were started before the object was ghosted. + + // If there was something running on the old shape, the thread + // needs to be reset. Otherwise we assume that it's been + // initialized either by the constructor or from the server. + bool reset = st.thread != 0; + st.thread = 0; + + if (st.sequence != -1) + { + setThreadSequence(i, st.sequence, reset); + } + } + + if (st.thread) + updateThread(st); + } + + return true; +} + +void AnimationComponent::onRemove() +{ + Parent::onRemove(); +} + +void AnimationComponent::onComponentAdd() +{ + //test if this is a shape component! + RenderComponentInterface *shapeInstanceInterface = mOwner->getComponent(); + if (shapeInstanceInterface) + { + shapeInstanceInterface->onShapeInstanceChanged.notify(this, &AnimationComponent::targetShapeChanged); + targetShapeChanged(shapeInstanceInterface); + } +} + +void AnimationComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + RenderComponentInterface *shapeInstanceInterface = dynamic_cast(comp); + if (shapeInstanceInterface) + { + shapeInstanceInterface->onShapeInstanceChanged.notify(this, &AnimationComponent::targetShapeChanged); + targetShapeChanged(shapeInstanceInterface); + } +} + +void AnimationComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + RenderComponentInterface *shapeInstanceInterface = dynamic_cast(comp); + if (shapeInstanceInterface) + { + shapeInstanceInterface->onShapeInstanceChanged.remove(this, &AnimationComponent::targetShapeChanged); + mOwnerRenderInst = NULL; + } +} + +void AnimationComponent::targetShapeChanged(RenderComponentInterface* instanceInterface) +{ + mOwnerRenderInst = instanceInterface; + + if (!mOwnerRenderInst || !getShape()) + return; + + MeshComponent* meshComp = dynamic_cast(mOwnerRenderInst); + + mOwnerShapeInstance = meshComp->getShapeInstance(); + + if (!mOwnerShapeInstance) + return; + + for (U32 i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + + st.thread = mOwnerShapeInstance->addThread(); + } +} + +void AnimationComponent::initPersistFields() +{ + Parent::initPersistFields(); +} + +U32 AnimationComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + //early test if we lack an owner, ghost-wise + //no point in trying, just re-queue the mask and go + if (!mOwner || con->getGhostIndex(mOwner) == -1) + { + stream->writeFlag(false); + return retMask |= ThreadMask; + } + else + { + stream->writeFlag(true); + + for (int i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + if (stream->writeFlag( (st.sequence != -1 || st.state == Thread::Destroy) && (mask & (ThreadMaskN << i)) ) ) + { + stream->writeInt(st.sequence,ThreadSequenceBits); + stream->writeInt(st.state,2); + stream->write(st.timescale); + stream->write(st.position); + stream->writeFlag(st.atEnd); + stream->writeFlag(st.transition); + } + } + } + + return retMask; +} + +void AnimationComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + for (S32 i = 0; i < MaxScriptThreads; i++) + { + if (stream->readFlag()) + { + Thread& st = mAnimationThreads[i]; + U32 seq = stream->readInt(ThreadSequenceBits); + st.state = stream->readInt(2); + stream->read( &st.timescale ); + stream->read( &st.position ); + st.atEnd = stream->readFlag(); + bool transition = stream->readFlag(); + + if (!st.thread || st.sequence != seq && st.state != Thread::Destroy) + setThreadSequence(i, seq, false, transition); + else + updateThread(st); + + } + } + } +} +void AnimationComponent::processTick() +{ + Parent::processTick(); + + if (!isActive()) + return; + + if (isServerObject()) + { + // Server only... + advanceThreads(TickSec); + } +} + +void AnimationComponent::advanceTime(F32 dt) +{ + Parent::advanceTime(dt); + + // On the client, the shape threads and images are + // advanced at framerate. + advanceThreads(dt); +} +// +const char *AnimationComponent::getThreadSequenceName(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence == -1) + { + // Invalid Animation. + return ""; + } + + // Name Index + TSShape* shape = getShape(); + + if (shape) + { + const U32 nameIndex = shape->sequences[st.sequence].nameIndex; + + // Return Name. + return shape->getName(nameIndex); + } + + return ""; +} + +bool AnimationComponent::setThreadSequence(U32 slot, S32 seq, bool reset, bool transition, F32 transTime) +{ + if (!mOwnerShapeInstance) + return false; + + Thread& st = mAnimationThreads[slot]; + if (st.thread && st.sequence == seq && st.state == Thread::Play && !reset) + return true; + + // Handle a -1 sequence, as this may be set when a thread has been destroyed. + if (seq == -1) + return true; + + if (seq < MaxSequenceIndex) + { + setMaskBits(-1); + setMaskBits(ThreadMaskN << slot); + st.sequence = seq; + st.transition = transition; + + if (reset) + { + st.state = Thread::Play; + st.atEnd = false; + st.timescale = 1.f; + st.position = 0.f; + } + + if (mOwnerShapeInstance) + { + if (!st.thread) + st.thread = mOwnerShapeInstance->addThread(); + + if (transition) + { + mOwnerShapeInstance->transitionToSequence(st.thread, seq, st.position, transTime, true); + } + else + { + mOwnerShapeInstance->setSequence(st.thread, seq, 0); + stopThreadSound(st); + } + + updateThread(st); + } + return true; + } + return false; +} + +S32 AnimationComponent::getThreadSequenceID(S32 slot) +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + return mAnimationThreads[slot].sequence; + } + else + { + return -1; + } +} + +void AnimationComponent::updateThread(Thread& st) +{ + if (!mOwnerShapeInstance) + return; + + switch (st.state) + { + case Thread::Stop: + { + mOwnerShapeInstance->setTimeScale(st.thread, 1.f); + mOwnerShapeInstance->setPos(st.thread, (st.timescale > 0.f) ? 0.0f : 1.0f); + } // Drop through to pause state + + case Thread::Pause: + { + if (st.position != -1.f) + { + mOwnerShapeInstance->setTimeScale(st.thread, 1.f); + mOwnerShapeInstance->setPos(st.thread, st.position); + } + + mOwnerShapeInstance->setTimeScale(st.thread, 0.f); + stopThreadSound(st); + } break; + + case Thread::Play: + { + if (st.atEnd) + { + mOwnerShapeInstance->setTimeScale(st.thread, 1); + mOwnerShapeInstance->setPos(st.thread, (st.timescale > 0.f) ? 1.0f : 0.0f); + mOwnerShapeInstance->setTimeScale(st.thread, 0); + stopThreadSound(st); + st.state = Thread::Stop; + } + else + { + if (st.position != -1.f) + { + mOwnerShapeInstance->setTimeScale(st.thread, 1.f); + mOwnerShapeInstance->setPos(st.thread, st.position); + } + + mOwnerShapeInstance->setTimeScale(st.thread, st.timescale); + if (!st.sound) + { + startSequenceSound(st); + } + } + } break; + + case Thread::Destroy: + { + stopThreadSound(st); + st.atEnd = true; + st.sequence = -1; + if (st.thread) + { + mOwnerShapeInstance->destroyThread(st.thread); + st.thread = 0; + } + } break; + } +} + +bool AnimationComponent::stopThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Stop) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Stop; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::destroyThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Destroy) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Destroy; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::pauseThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Pause) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Pause; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::playThread(U32 slot) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1 && st.state != Thread::Play) + { + setMaskBits(ThreadMaskN << slot); + st.state = Thread::Play; + updateThread(st); + return true; + } + return false; +} + +bool AnimationComponent::playThread(U32 slot, const char* name, bool transition, F32 transitionTime) +{ + if (slot < AnimationComponent::MaxScriptThreads) + { + if (!dStrEqual(name, "")) + { + if (TSShape* shape = getShape()) + { + S32 seq = shape->findSequence(name); + if (seq != -1 && setThreadSequence(slot, seq, true, transition, transitionTime)) + { + return true; + } + else if (seq == -1) + { + //We tried to play a non-existaint sequence, so stop the thread just in case + destroyThread(slot); + return false; + } + } + } + else + { + if (playThread(slot)) + return true; + } + } + + return false; +} + +bool AnimationComponent::setThreadAnimation(U32 slot, const char* name) +{ + if (slot < AnimationComponent::MaxScriptThreads) + { + if (!dStrEqual(name, "")) + { + if (TSShape* shape = getShape()) + { + S32 seq = shape->findSequence(name); + if (seq != -1 && setThreadSequence(slot, seq, false, false)) + { + Thread& st = mAnimationThreads[slot]; + if (st.position == -1) + st.position = 0; + //st.state = Thread::Pause; + return true; + } + else if (seq == -1) + { + //We tried to play a non-existaint sequence, so stop the thread just in case + destroyThread(slot); + return false; + } + } + } + else + { + if (playThread(slot)) + return true; + } + } + + return false; +} + +bool AnimationComponent::setThreadPosition(U32 slot, F32 pos) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1) + { + setMaskBits(ThreadMaskN << slot); + st.position = pos; + st.atEnd = false; + updateThread(st); + + return true; + } + return false; +} + +bool AnimationComponent::setThreadDir(U32 slot, bool forward) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1) + { + if ((st.timescale >= 0.f) != forward) + { + setMaskBits(ThreadMaskN << slot); + st.timescale *= -1.f; + st.atEnd = false; + updateThread(st); + } + return true; + } + return false; +} + +bool AnimationComponent::setThreadTimeScale(U32 slot, F32 timeScale) +{ + Thread& st = mAnimationThreads[slot]; + if (st.sequence != -1) + { + if (st.timescale != timeScale) + { + setMaskBits(ThreadMaskN << slot); + st.timescale = timeScale; + updateThread(st); + } + return true; + } + return false; +} + +void AnimationComponent::stopThreadSound(Thread& thread) +{ + return; +} + +void AnimationComponent::startSequenceSound(Thread& thread) +{ + return; +} + +void AnimationComponent::advanceThreads(F32 dt) +{ + if (!mOwnerShapeInstance) + return; + + for (U32 i = 0; i < MaxScriptThreads; i++) + { + Thread& st = mAnimationThreads[i]; + if (st.thread && st.sequence != -1) + { + bool cyclic = getShape()->sequences[st.sequence].isCyclic(); + + if (!getShape()->sequences[st.sequence].isCyclic() && + !st.atEnd && + ((st.timescale > 0.f) ? mOwnerShapeInstance->getPos(st.thread) >= 1.0 : mOwnerShapeInstance->getPos(st.thread) <= 0)) + { + st.atEnd = true; + updateThread(st); + + if (!isGhost()) + { + Con::executef(this, "onAnimationEnd", st.thread->getSequenceName()); + } + } + + // Make sure the thread is still valid after the call to onEndSequence_callback(). + // Someone could have called destroyThread() while in there. + if (st.thread) + { + mOwnerShapeInstance->advanceTime(dt, st.thread); + } + + if (mOwnerShapeInstance && !isGhost()) + { + for (U32 i = 1; i < 32; i++) + { + if (mOwnerShapeInstance->getTriggerState(i)) + { + const char* animName = st.thread->getSequenceName().c_str(); + onAnimationTrigger_callback(this, animName, i); + } + } + } + + if (isGhost()) + mOwnerShapeInstance->animate(); + } + } +} + +TSShape* AnimationComponent::getShape() +{ + if (mOwner == NULL) + return NULL; + + if (mOwnerRenderInst == NULL) + return NULL; + + return mOwnerRenderInst->getShape(); +} + +S32 AnimationComponent::getAnimationCount() +{ + if (getShape()) + return getShape()->sequences.size(); + else + return 0; +} + +S32 AnimationComponent::getAnimationIndex(const char* name) +{ + if (getShape()) + return getShape()->findSequence(name); + else + return -1; +} + +const char* AnimationComponent::getAnimationName(S32 index) +{ + if (getShape()) + { + if (index >= 0 && index < getShape()->sequences.size()) + return getShape()->getName(getShape()->sequences[index].nameIndex); + } + + return ""; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Animation/animationComponent.h b/Engine/source/T3D/components/Animation/animationComponent.h new file mode 100644 index 0000000000..7e93788993 --- /dev/null +++ b/Engine/source/T3D/components/Animation/animationComponent.h @@ -0,0 +1,138 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef ANIMATION_COMPONENT_H +#define ANIMATION_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/Components/Component.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShapeInstance.h" +#endif +#ifndef ENTITY_H +#include "T3D/Entity.h" +#endif +#ifndef RENDER_COMPONENT_INTERFACE_H +#include "T3D/Components/render/renderComponentInterface.h" +#endif + +class SceneRenderState; + +class AnimationComponent : public Component +{ + typedef Component Parent; +public: + enum PublicConstants { + ThreadSequenceBits = 6, + MaxSequenceIndex = (1 << ThreadSequenceBits) - 1, + MaxScriptThreads = 16, ///< Should be a power of 2 + }; + + enum MaskBits { + ThreadMaskN = Parent::NextFreeMask << 0, + ThreadMask = (ThreadMaskN << MaxScriptThreads) - ThreadMaskN, + NextFreeMask = ThreadMaskN << MaxScriptThreads + }; + +protected: + + struct Thread + { + /// State of the animation thread. + enum State + { + Play, Stop, Pause, Destroy + }; + TSThread* thread; ///< Pointer to 3space data. + U32 state; ///< State of the thread + /// + /// @see Thread::State + S32 sequence; ///< The animation sequence which is running in this thread. + F32 timescale; ///< Timescale + U32 sound; ///< Handle to sound. + bool atEnd; ///< Are we at the end of this thread? + F32 position; + bool transition; + }; + + Thread mAnimationThreads[MaxScriptThreads]; + +protected: + RenderComponentInterface * mOwnerRenderInst; + + TSShapeInstance *mOwnerShapeInstance; + +public: + AnimationComponent(); + virtual ~AnimationComponent(); + DECLARE_CONOBJECT(AnimationComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + TSShape* getShape(); + + void targetShapeChanged(RenderComponentInterface* instanceInterface); + + virtual void processTick(); + virtual void advanceTime(F32 dt); + + const char *getThreadSequenceName(U32 slot); + bool setThreadSequence(U32 slot, S32 seq, bool reset = true, bool transition = true, F32 transitionTime = 0.5); + void updateThread(Thread& st); + bool stopThread(U32 slot); + bool destroyThread(U32 slot); + bool pauseThread(U32 slot); + bool playThread(U32 slot); + bool playThread(U32 slot, const char* name, bool transition, F32 transitionTime); + bool setThreadAnimation(U32 slot, const char* name); + bool setThreadPosition(U32 slot, F32 pos); + bool setThreadDir(U32 slot, bool forward); + bool setThreadTimeScale(U32 slot, F32 timeScale); + void stopThreadSound(Thread& thread); + void startSequenceSound(Thread& thread); + void advanceThreads(F32 dt); + + S32 getThreadSequenceID(S32 slot); + + //other helper functions + S32 getAnimationCount(); + S32 getAnimationIndex(const char* name); + const char* getAnimationName(S32 index); + + //callbacks + DECLARE_CALLBACK(void, onAnimationStart, (Component* obj, const String& animName)); + DECLARE_CALLBACK(void, onAnimationEnd, (Component* obj, const char* animName)); + DECLARE_CALLBACK(void, onAnimationTrigger, (Component* obj, const String& animName, S32 triggerID)); +}; + +#endif //_ANIMATION_COMPONENT_H \ No newline at end of file diff --git a/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h b/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h new file mode 100644 index 0000000000..ffba3f7905 --- /dev/null +++ b/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h @@ -0,0 +1,222 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "console/engineAPI.h" +#include "T3D/Components/Animation/animationComponent.h" + +DefineEngineMethod(AnimationComponent, playThread, bool, (S32 slot, const char* name, bool transition, F32 transitionTime), (-1, "", true, 0.5), + "@brief Start a new animation thread, or restart one that has been paused or " + "stopped.\n\n" + + "@param slot thread slot to play. Valid range is 0 - 3)\n" // 3 = AnimationComponent::MaxScriptThreads-1 + "@param name name of the animation sequence to play in this slot. If not " + "specified, the paused or stopped thread in this slot will be resumed.\n" + "@return true if successful, false if failed\n\n" + + "@tsexample\n" + "%obj.playThread( 0, \"ambient\" ); // Play the ambient sequence in slot 0\n" + "%obj.setThreadTimeScale( 0, 0.5 ); // Play at half-speed\n" + "%obj.pauseThread( 0 ); // Pause the sequence\n" + "%obj.playThread( 0 ); // Resume playback\n" + "%obj.playThread( 0, \"spin\" ); // Replace the sequence in slot 0\n" + "@endtsexample\n" + + "@see pauseThread()\n" + "@see stopThread()\n" + "@see setThreadDir()\n" + "@see setThreadTimeScale()\n" + "@see destroyThread()\n") +{ + return object->playThread(slot, name, transition, transitionTime); +} + +DefineEngineMethod(AnimationComponent, setThreadDir, bool, (S32 slot, bool fwd), , + "@brief Set the playback direction of an animation thread.\n\n" + + "@param slot thread slot to modify\n" + "@param fwd true to play the animation forwards, false to play backwards\n" + "@return true if successful, false if failed\n\n" + + "@see playThread()\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->setThreadDir(slot, fwd)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, setThreadTimeScale, bool, (S32 slot, F32 scale), , + "@brief Set the playback time scale of an animation thread.\n\n" + + "@param slot thread slot to modify\n" + "@param scale new thread time scale (1=normal speed, 0.5=half speed etc)\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->setThreadTimeScale(slot, scale)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, setThreadPosition, bool, (S32 slot, F32 pos), , + "@brief Set the position within an animation thread.\n\n" + + "@param slot thread slot to modify\n" + "@param pos position within thread\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->setThreadPosition(slot, pos)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, setThreadAnimation, bool, (S32 slot, const char* name), (""), + "@brief Force-sets the animation in a particular thread without starting it playing." + + "@param slot thread slot to play. Valid range is 0 - 3)\n" // 3 = AnimationComponent::MaxScriptThreads-1 + "@param name name of the animation sequence to play in this slot. If not " + "specified, the paused or stopped thread in this slot will be resumed.\n" + "@return true if successful, false if failed\n\n") +{ + return object->setThreadAnimation(slot, name); +} + +DefineEngineMethod(AnimationComponent, getThreadAnimation, String, (S32 slot), , + "@brief Force-sets the animation in a particular thread without starting it playing." + + "@param slot thread slot to play. Valid range is 0 - 3)\n" // 3 = AnimationComponent::MaxScriptThreads-1 + "@param name name of the animation sequence to play in this slot. If not " + "specified, the paused or stopped thread in this slot will be resumed.\n" + "@return true if successful, false if failed\n\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (TSShape* shape = object->getShape()) + { + S32 seq = object->getThreadSequenceID(slot); + if (seq != -1) + { + String animationName = object->getAnimationName(seq); + return animationName; + } + } + } + + return ""; +} + +DefineEngineMethod(AnimationComponent, stopThread, bool, (S32 slot), , + "@brief Stop an animation thread.\n\n" + + "If restarted using playThread, the animation " + "will start from the beginning again.\n" + "@param slot thread slot to stop\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->stopThread(slot)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, destroyThread, bool, (S32 slot), , + "@brief Destroy an animation thread, which prevents it from playing.\n\n" + + "@param slot thread slot to destroy\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->destroyThread(slot)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, pauseThread, bool, (S32 slot), , + "@brief Pause an animation thread.\n\n" + + "If restarted using playThread, the animation " + "will resume from the paused position.\n" + "@param slot thread slot to stop\n" + "@return true if successful, false if failed\n\n" + + "@see playThread\n") +{ + if (slot >= 0 && slot < AnimationComponent::MaxScriptThreads) + { + if (object->pauseThread(slot)) + return true; + } + return false; +} + +DefineEngineMethod(AnimationComponent, getAnimationCount, S32, (), , + "Get the total number of sequences in the shape.\n" + "@return the number of sequences in the shape\n\n") +{ + return object->getAnimationCount(); +} + +DefineEngineMethod(AnimationComponent, getAnimationIndex, S32, (const char* name), , + "Find the index of the sequence with the given name.\n" + "@param name name of the sequence to lookup\n" + "@return index of the sequence with matching name, or -1 if not found\n\n" + "@tsexample\n" + "// Check if a given sequence exists in the shape\n" + "if ( %this.getSequenceIndex( \"walk\" ) == -1 )\n" + " echo( \"Could not find 'walk' sequence\" );\n" + "@endtsexample\n") +{ + return object->getAnimationIndex(name); +} + +DefineEngineMethod(AnimationComponent, getAnimationName, const char*, (S32 index), , + "Get the name of the indexed sequence.\n" + "@param index index of the sequence to query (valid range is 0 - getSequenceCount()-1)\n" + "@return the name of the sequence\n\n" + "@tsexample\n" + "// print the name of all sequences in the shape\n" + "%count = %this.getSequenceCount();\n" + "for ( %i = 0; %i < %count; %i++ )\n" + " echo( %i SPC %this.getSequenceName( %i ) );\n" + "@endtsexample\n") +{ + return object->getAnimationName(index); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Camera/CameraComponent.cpp b/Engine/source/T3D/components/Camera/CameraComponent.cpp new file mode 100644 index 0000000000..5d914084c9 --- /dev/null +++ b/Engine/source/T3D/components/Camera/CameraComponent.cpp @@ -0,0 +1,483 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/camera/CameraComponent.h" +#include "T3D/Components/Camera/CameraComponent_ScriptBinding.h" +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/gameFunctions.h" +#include "math/mathUtils.h" +#include "T3D/Components/render/renderComponentInterface.h" + +IMPLEMENT_CALLBACK( CameraComponent, validateCameraFov, F32, (F32 fov), (fov), + "@brief Called on the server when the client has requested a FOV change.\n\n" + + "When the client requests that its field of view should be changed (because " + "they want to use a sniper scope, for example) this new FOV needs to be validated " + "by the server. This method is called if it exists (it is optional) to validate " + "the requested FOV, and modify it if necessary. This could be as simple as checking " + "that the FOV falls within a correct range, to making sure that the FOV matches the " + "capabilities of the current weapon.\n\n" + + "Following this method, ShapeBase ensures that the given FOV still falls within " + "the datablock's mCameraMinFov and mCameraMaxFov. If that is good enough for your " + "purposes, then you do not need to define the validateCameraFov() callback for " + "your ShapeBase.\n\n" + + "@param fov The FOV that has been requested by the client.\n" + "@return The FOV as validated by the server.\n\n" + + "@see ShapeBaseData\n\n"); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +CameraComponent::CameraComponent() : Component() +{ + mClientScreen = Point2F(1, 1); + + mCameraFov = mCameraDefaultFov = 80; + mCameraMinFov = 5; + mCameraMaxFov = 175; + + mTargetNodeIdx = -1; + + mPosOffset = Point3F(0, 0, 0); + mRotOffset = EulerF(0, 0, 0); + + mTargetNode = ""; + + mUseParentTransform = true; + + mFriendlyName = "Camera(Component)"; +} + +CameraComponent::~CameraComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(CameraComponent); + +bool CameraComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + return true; +} + +void CameraComponent::onRemove() +{ + Parent::onRemove(); +} + +void CameraComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addProtectedField("FOV", TypeF32, Offset(mCameraFov, CameraComponent), &_setCameraFov, defaultProtectedGetFn, ""); + + addField("MinFOV", TypeF32, Offset(mCameraMinFov, CameraComponent), ""); + + addField("MaxFOV", TypeF32, Offset(mCameraMaxFov, CameraComponent), ""); + + addField("ScreenAspect", TypePoint2I, Offset(mClientScreen, CameraComponent), ""); + + addProtectedField("targetNode", TypeString, Offset(mTargetNode, CameraComponent), &_setNode, defaultProtectedGetFn, ""); + + addProtectedField("positionOffset", TypePoint3F, Offset(mPosOffset, CameraComponent), &_setPosOffset, defaultProtectedGetFn, ""); + + addProtectedField("rotationOffset", TypeRotationF, Offset(mRotOffset, CameraComponent), &_setRotOffset, defaultProtectedGetFn, ""); + + addField("useParentTransform", TypeBool, Offset(mUseParentTransform, CameraComponent), ""); +} + +bool CameraComponent::_setNode(void *object, const char *index, const char *data) +{ + CameraComponent *mcc = static_cast(object); + + mcc->mTargetNode = StringTable->insert(data); + mcc->setMaskBits(OffsetMask); + + return true; +} + +bool CameraComponent::_setPosOffset(void *object, const char *index, const char *data) +{ + CameraComponent *mcc = static_cast(object); + + if (mcc) + { + Point3F pos; + Con::setData(TypePoint3F, &pos, 0, 1, &data); + + mcc->mPosOffset = pos; + mcc->setMaskBits(OffsetMask); + + return true; + } + + return false; +} + +bool CameraComponent::_setRotOffset(void *object, const char *index, const char *data) +{ + CameraComponent *mcc = static_cast(object); + + if (mcc) + { + RotationF rot; + Con::setData(TypeRotationF, &rot, 0, 1, &data); + + mcc->mRotOffset = rot; + mcc->setMaskBits(OffsetMask); + + return true; + } + + return false; +} + +bool CameraComponent::isValidCameraFov(F32 fov) +{ + return((fov >= mCameraMinFov) && (fov <= mCameraMaxFov)); +} + +bool CameraComponent::_setCameraFov(void *object, const char *index, const char *data) +{ + CameraComponent *cCI = static_cast(object); + cCI->setCameraFov(dAtof(data)); + return true; +} + +void CameraComponent::setCameraFov(F32 fov) +{ + mCameraFov = mClampF(fov, mCameraMinFov, mCameraMaxFov); + + if (isClientObject()) + GameSetCameraTargetFov(mCameraFov); + + if (isServerObject()) + setMaskBits(FOVMask); +} + +void CameraComponent::onCameraScopeQuery(NetConnection *cr, CameraScopeQuery * query) +{ + // update the camera query + query->camera = this; + + if(GameConnection * con = dynamic_cast(cr)) + { + // get the fov from the connection (in deg) + F32 fov; + if (con->getControlCameraFov(&fov)) + { + query->fov = mDegToRad(fov/2); + query->sinFov = mSin(query->fov); + query->cosFov = mCos(query->fov); + } + else + { + query->fov = mDegToRad(mCameraFov/2); + query->sinFov = mSin(query->fov); + query->cosFov = mCos(query->fov); + } + } + + // use eye rather than camera transform (good enough and faster) + MatrixF camTransform = mOwner->getTransform(); + camTransform.getColumn(3, &query->pos); + camTransform.getColumn(1, &query->orientation); + + // Get the visible distance. + if (mOwner->getSceneManager() != NULL) + query->visibleDistance = mOwner->getSceneManager()->getVisibleDistance(); +} + +bool CameraComponent::getCameraTransform(F32* pos,MatrixF* mat) +{ + // Returns camera to world space transform + // Handles first person / third person camera position + bool isServer = isServerObject(); + + if (mTargetNodeIdx == -1) + { + if (mUseParentTransform) + { + MatrixF rMat = mOwner->getRenderTransform(); + + rMat.mul(mRotOffset.asMatrixF()); + + mat->set(rMat.toEuler(), rMat.getPosition() + mPosOffset); + } + else + { + mat->set(mRotOffset.asEulerF(), mPosOffset); + } + + return true; + } + else + { + RenderComponentInterface *renderInterface = mOwner->getComponent(); + + if (!renderInterface) + return false; + + if (mUseParentTransform) + { + MatrixF rMat = mOwner->getRenderTransform(); + + Point3F position = rMat.getPosition(); + + RotationF rot = mRotOffset; + + if (mTargetNodeIdx != -1) + { + Point3F nodPos; + MatrixF nodeTrans = renderInterface->getNodeTransform(mTargetNodeIdx); + nodeTrans.getColumn(3, &nodPos); + + // Scale the camera position before applying the transform + const Point3F& scale = mOwner->getScale(); + nodPos.convolve(scale); + + mOwner->getRenderTransform().mulP(nodPos, &position); + + nodeTrans.mul(rMat); + + rot = nodeTrans; + } + + position += mPosOffset; + + MatrixF rotMat = rot.asMatrixF(); + + MatrixF rotOffsetMat = mRotOffset.asMatrixF(); + + rotMat.mul(rotOffsetMat); + + rot = RotationF(rotMat); + + mat->set(rot.asEulerF(), position); + } + else + { + MatrixF rMat = mOwner->getRenderTransform(); + + Point3F position = rMat.getPosition(); + + RotationF rot = mRotOffset; + + if (mTargetNodeIdx != -1) + { + Point3F nodPos; + MatrixF nodeTrans = renderInterface->getNodeTransform(mTargetNodeIdx); + nodeTrans.getColumn(3, &nodPos); + + // Scale the camera position before applying the transform + const Point3F& scale = mOwner->getScale(); + nodPos.convolve(scale); + + position = nodPos; + } + + position += mPosOffset; + + mat->set(rot.asEulerF(), position); + } + + return true; + } +} + +void CameraComponent::getCameraParameters(F32 *min, F32* max, Point3F* off, MatrixF* rot) +{ + *min = 0.2f; + *max = 0.f; + off->set(0, 0, 0); + rot->identity(); +} + +U32 CameraComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retmask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & FOVMask)) + { + stream->write(mCameraFov); + } + + if (stream->writeFlag(mask & OffsetMask)) + { + RenderComponentInterface* renderInterface = getOwner()->getComponent(); + + if (renderInterface && renderInterface->getShape()) + { + S32 nodeIndex = renderInterface->getShape()->findNode(mTargetNode); + + mTargetNodeIdx = nodeIndex; + } + + stream->writeInt(mTargetNodeIdx, 32); + //send offsets here + + stream->writeCompressedPoint(mPosOffset); + stream->writeCompressedPoint(mRotOffset.asEulerF()); + + stream->writeFlag(mUseParentTransform); + } + + return retmask; +} + +void CameraComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + F32 fov; + stream->read(&fov); + setCameraFov(fov); + } + + if(stream->readFlag()) + { + mTargetNodeIdx = stream->readInt(32); + + stream->readCompressedPoint(&mPosOffset); + + EulerF rot; + stream->readCompressedPoint(&rot); + + mRotOffset = RotationF(rot); + + mUseParentTransform = stream->readFlag(); + } +} + +void CameraComponent::setForwardVector(VectorF newForward, VectorF upVector) +{ + MatrixF mat; + F32 pos = 0; + getCameraTransform(&pos, &mat); + + mPosOffset = mat.getPosition(); + + VectorF up(0.0f, 0.0f, 1.0f); + VectorF axisX; + VectorF axisY = newForward; + VectorF axisZ; + + if (upVector != VectorF::Zero) + up = upVector; + + // Validate and normalize input: + F32 lenSq; + lenSq = axisY.lenSquared(); + if (lenSq < 0.000001f) + { + axisY.set(0.0f, 1.0f, 0.0f); + Con::errorf("Entity::setForwardVector() - degenerate forward vector"); + } + else + { + axisY /= mSqrt(lenSq); + } + + lenSq = up.lenSquared(); + if (lenSq < 0.000001f) + { + up.set(0.0f, 0.0f, 1.0f); + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - too small"); + } + else + { + up /= mSqrt(lenSq); + } + + if (fabsf(mDot(up, axisY)) > 0.9999f) + { + Con::errorf("SceneObject::setForwardVector() - degenerate up vector - same as forward"); + // i haven't really tested this, but i think it generates something which should be not parallel to the previous vector: + F32 tmp = up.x; + up.x = -up.y; + up.y = up.z; + up.z = tmp; + } + + // construct the remaining axes: + mCross(axisY, up, &axisX); + mCross(axisX, axisY, &axisZ); + + mat.setColumn(0, axisX); + mat.setColumn(1, axisY); + mat.setColumn(2, axisZ); + + mRotOffset = RotationF(mat.toEuler()); + mRotOffset.y = 0; + + setMaskBits(OffsetMask); +} + +void CameraComponent::setPosition(Point3F newPos) +{ + mPosOffset = newPos; + setMaskBits(OffsetMask); +} + +void CameraComponent::setRotation(RotationF newRot) +{ + mRotOffset = newRot; + setMaskBits(OffsetMask); +} + +Frustum CameraComponent::getFrustum() +{ + Frustum visFrustum; + F32 left, right, top, bottom; + F32 aspectRatio = mClientScreen.x / mClientScreen.y; + + visFrustum.set(false, mDegToRad(mCameraFov), aspectRatio, 0.1f, 1000, mOwner->getTransform()); + + return visFrustum; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Camera/CameraComponent.h b/Engine/source/T3D/components/Camera/CameraComponent.h new file mode 100644 index 0000000000..1e54038339 --- /dev/null +++ b/Engine/source/T3D/components/Camera/CameraComponent.h @@ -0,0 +1,159 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef CAMERA_COMPONENT_H +#define CAMERA_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/Components/Component.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/Entity.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/Components/coreInterfaces.h" +#endif + +class SceneRenderState; +struct CameraScopeQuery; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class CameraComponent : public Component, public CameraInterface +{ + typedef Component Parent; + + F32 mCameraFov; ///< The camera vertical FOV in degrees. + + Point2F mClientScreen; ///< The dimensions of the client's screen. Used to calculate the aspect ratio. + + F32 mCameraDefaultFov; ///< Default vertical FOV in degrees. + F32 mCameraMinFov; ///< Min vertical FOV allowed in degrees. + F32 mCameraMaxFov; ///< Max vertical FOV allowed in degrees. + +protected: + Point3F mPosOffset; + RotationF mRotOffset; + + StringTableEntry mTargetNode; + S32 mTargetNodeIdx; + + bool mUseParentTransform; + + enum + { + FOVMask = Parent::NextFreeMask, + OffsetMask = Parent::NextFreeMask << 1, + NextFreeMask = Parent::NextFreeMask << 2, + }; + +public: + CameraComponent(); + virtual ~CameraComponent(); + DECLARE_CONOBJECT(CameraComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + static bool _setCameraFov(void *object, const char *index, const char *data); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + static bool _setNode(void *object, const char *index, const char *data); + static bool _setPosOffset(void *object, const char *index, const char *data); + static bool _setRotOffset(void *object, const char *index, const char *data); + + void setRotOffset(RotationF rot) + { + mRotOffset = rot; + setMaskBits(OffsetMask); + } + + RotationF getRotOffset() + { + return mRotOffset; + } + + Point3F getPosOffset() + { + return mPosOffset; + } + + /// Gets the minimum viewing distance, maximum viewing distance, camera offsetand rotation + /// for this object, if the world were to be viewed through its eyes + /// @param min Minimum viewing distance + /// @param max Maximum viewing distance + /// @param offset Offset of the camera from the origin in local space + /// @param rot Rotation matrix + virtual void getCameraParameters(F32 *min, F32* max, Point3F* offset, MatrixF* rot); + + /// Gets the camera to world space transform matrix + /// @todo Find out what pos does + /// @param pos TODO: Find out what this does + /// @param mat Camera transform (out) + virtual bool getCameraTransform(F32* pos, MatrixF* mat); + + /// Returns the vertical field of view in degrees for + /// this object if used as a camera. + virtual F32 getCameraFov() { return mCameraFov; } + + /// Returns the default vertical field of view in degrees + /// if this object is used as a camera. + virtual F32 getDefaultCameraFov() { return mCameraDefaultFov; } + + /// Sets the vertical field of view in degrees for this + /// object if used as a camera. + /// @param yfov The vertical FOV in degrees to test. + virtual void setCameraFov(F32 fov); + + /// Returns true if the vertical FOV in degrees is within + /// allowable parameters of the datablock. + /// @param yfov The vertical FOV in degrees to test. + /// @see ShapeBaseData::cameraMinFov + /// @see ShapeBaseData::cameraMaxFov + virtual bool isValidCameraFov(F32 fov); + /// @} + + virtual Frustum getFrustum(); + + /// Control object scoping + void onCameraScopeQuery(NetConnection *cr, CameraScopeQuery *camInfo); + + void setForwardVector(VectorF newForward, VectorF upVector = VectorF::Zero); + void setPosition(Point3F newPos); + void setRotation(RotationF newRot); + +protected: + DECLARE_CALLBACK(F32, validateCameraFov, (F32 fov)); +}; + +#endif // CAMERA_BEHAVIOR_H diff --git a/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h b/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h new file mode 100644 index 0000000000..c7ed90cb12 --- /dev/null +++ b/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "console/engineAPI.h" +#include "T3D/Components/Camera/CameraComponent.h" + +//Basically, this only exists for backwards compatibility for parts of the editors +ConsoleMethod(CameraComponent, getMode, const char*, 2, 2, "() - We get the first behavior of the requested type on our owner object.\n" + "@return (string name) The type of the behavior we're requesting") +{ + return "fly"; +} + +DefineConsoleMethod(CameraComponent, getForwardVector, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF cameraMat; + object->getCameraTransform(&pos, &cameraMat); + + VectorF returnVec = cameraMat.getForwardVector(); + returnVec = VectorF(mRadToDeg(returnVec.x), mRadToDeg(returnVec.y), mRadToDeg(returnVec.z)); + returnVec.normalize(); + return returnVec; +} + +DefineConsoleMethod(CameraComponent, getRightVector, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF cameraMat; + object->getCameraTransform(&pos, &cameraMat); + + VectorF returnVec = cameraMat.getRightVector(); + returnVec = VectorF(mRadToDeg(returnVec.x), mRadToDeg(returnVec.y), mRadToDeg(returnVec.z)); + returnVec.normalize(); + return returnVec; +} + +DefineConsoleMethod(CameraComponent, getUpVector, VectorF, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF cameraMat; + object->getCameraTransform(&pos, &cameraMat); + + VectorF returnVec = cameraMat.getUpVector(); + returnVec = VectorF(mRadToDeg(returnVec.x), mRadToDeg(returnVec.y), mRadToDeg(returnVec.z)); + returnVec.normalize(); + return returnVec; +} + +DefineConsoleMethod(CameraComponent, setForwardVector, void, (VectorF newForward), (VectorF(0, 0, 0)), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->setForwardVector(newForward); +} + +DefineConsoleMethod(CameraComponent, getWorldPosition, Point3F, (), , + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + F32 pos = 0; + MatrixF mat; + object->getCameraTransform(&pos, &mat); + + return mat.getPosition(); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp new file mode 100644 index 0000000000..6b78668731 --- /dev/null +++ b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp @@ -0,0 +1,146 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/Camera/CameraOrbiterComponent.h" +#include "core/util/safeDelete.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "math/mathUtils.h" + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +CameraOrbiterComponent::CameraOrbiterComponent() : Component() +{ + mMinOrbitDist = 0.0f; + mMaxOrbitDist = 0.0f; + mCurOrbitDist = 8.0f; + mPosition.set(0.0f, 0.0f, 0.0f); + + mMaxPitchAngle = 70; + mMinPitchAngle = -10; + + mRotation.set(0, 0, 0); + + mCamera = NULL; +} + +CameraOrbiterComponent::~CameraOrbiterComponent() +{ +} + +IMPLEMENT_CO_NETOBJECT_V1(CameraOrbiterComponent); + +bool CameraOrbiterComponent::onAdd() +{ + if (!Parent::onAdd()) + return false; + + return true; +} + +void CameraOrbiterComponent::onRemove() +{ + Parent::onRemove(); +} +void CameraOrbiterComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("orbitDistance", TypeF32, Offset(mCurOrbitDist, CameraOrbiterComponent), "Object world orientation."); + addField("Rotation", TypeRotationF, Offset(mRotation, CameraOrbiterComponent), "Object world orientation."); + addField("maxPitchAngle", TypeF32, Offset(mMaxPitchAngle, CameraOrbiterComponent), "Object world orientation."); + addField("minPitchAngle", TypeF32, Offset(mMinPitchAngle, CameraOrbiterComponent), "Object world orientation."); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void CameraOrbiterComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + CameraComponent *cam = mOwner->getComponent(); + if (cam) + { + mCamera = cam; + } +} + +void CameraOrbiterComponent::onComponentRemove() +{ + Parent::onComponentRemove(); +} + +U32 CameraOrbiterComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + return retMask; +} + +void CameraOrbiterComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +void CameraOrbiterComponent::processTick() +{ + Parent::processTick(); + + if (!mOwner) + return; + + if (mCamera) + { + //Clamp our pitch to whatever range we allow, first. + mRotation.x = mClampF(mRotation.x, mDegToRad(mMinPitchAngle), mDegToRad(mMaxPitchAngle)); + + MatrixF ownerTrans = mOwner->getRenderTransform(); + Point3F ownerPos = ownerTrans.getPosition(); + + Point3F pos; + pos.x = mCurOrbitDist * mSin(mRotation.x + M_HALFPI_F) * mCos(-1.0f * (mRotation.z + M_HALFPI_F)); + pos.y = mCurOrbitDist * mSin(mRotation.x + M_HALFPI_F) * mSin(-1.0f * (mRotation.z + M_HALFPI_F)); + pos.z = mCurOrbitDist * mSin(mRotation.x); + + //orient the camera towards the owner + VectorF ownerVec = ownerPos - pos; + ownerVec.normalize(); + + MatrixF xRot, zRot, cameraMatrix; + xRot.set(EulerF(mRotation.x, 0.0f, 0.0f)); + zRot.set(EulerF(0.0f, 0.0f, mRotation.z)); + + cameraMatrix.mul(zRot, xRot); + cameraMatrix.getColumn(1, &ownerVec); + cameraMatrix.setColumn(3, pos - ownerVec * pos); + + RotationF camRot = RotationF(cameraMatrix); + + if (camRot != mCamera->getRotOffset()) + mCamera->setRotation(camRot); + + if (pos != mCamera->getPosOffset()) + mCamera->setPosition(pos); + } +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h new file mode 100644 index 0000000000..c13029f376 --- /dev/null +++ b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h @@ -0,0 +1,71 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef CAMERA_ORBITER_COMPONENT_H +#define CAMERA_ORBITER_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/Components/Component.h" +#endif +#ifndef CAMERA_COMPONENT_H +#include "T3D/Components/camera/cameraComponent.h" +#endif + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class CameraOrbiterComponent : public Component +{ + typedef Component Parent; + + F32 mMinOrbitDist; + F32 mMaxOrbitDist; + F32 mCurOrbitDist; + Point3F mPosition; + + F32 mMaxPitchAngle; + F32 mMinPitchAngle; + + RotationF mRotation; + + CameraComponent* mCamera; + +public: + CameraOrbiterComponent(); + virtual ~CameraOrbiterComponent(); + DECLARE_CONOBJECT(CameraOrbiterComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void processTick(); +}; + +#endif // EXAMPLEBEHAVIOR_H diff --git a/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h b/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h new file mode 100644 index 0000000000..f822bfb761 --- /dev/null +++ b/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h @@ -0,0 +1,172 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "console/engineAPI.h" +#include "T3D/Components/Collision/CollisionComponent.h" +#include "materials/baseMatInstance.h" + +DefineConsoleMethod(CollisionComponent, getNumberOfContacts, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + return object->getCollisionList()->getCount(); +} + +DefineConsoleMethod(CollisionComponent, getBestContact, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + return 0; +} + +DefineConsoleMethod(CollisionComponent, getContactNormal, Point3F, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + return object->getContactInfo()->contactNormal; + } + } + + return Point3F::Zero; +} + +DefineConsoleMethod(CollisionComponent, getContactMaterial, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + if (object->getContactInfo()->contactMaterial != NULL) + return object->getContactInfo()->contactMaterial->getMaterial()->getId(); + } + } + + return 0; +} + +DefineConsoleMethod(CollisionComponent, getContactObject, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + return object->getContactInfo()->contactObject != NULL ? object->getContactInfo()->contactObject->getId() : 0; + } + + return 0; +} + +DefineConsoleMethod(CollisionComponent, getContactPoint, Point3F, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + return object->getContactInfo()->contactPoint; + } + } + + return Point3F::Zero; +} + +DefineConsoleMethod(CollisionComponent, getContactTime, S32, (), , + "Gets the number of contacts this collider has hit.\n" + "@return The number of static fields defined on the object.") +{ + if (object->getContactInfo()) + { + if (object->getContactInfo()->contactObject) + { + return object->getContactInfo()->contactTimer; + } + } + + return 0; +} + +DefineEngineMethod(CollisionComponent, hasContact, bool, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->hasContact(); +} + +DefineEngineMethod(CollisionComponent, getCollisionCount, S32, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getCollisionCount(); +} + +DefineEngineMethod(CollisionComponent, getCollisionNormal, Point3F, (S32 collisionIndex), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getCollisionNormal(collisionIndex); +} + +DefineEngineMethod(CollisionComponent, getCollisionAngle, F32, (S32 collisionIndex, VectorF upVector), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getCollisionAngle(collisionIndex, upVector); +} + +DefineEngineMethod(CollisionComponent, getBestCollisionAngle, F32, (VectorF upVector), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getBestCollisionAngle(upVector); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Collision/collisionComponent.cpp b/Engine/source/T3D/components/Collision/collisionComponent.cpp new file mode 100644 index 0000000000..1ce851b0f5 --- /dev/null +++ b/Engine/source/T3D/components/Collision/collisionComponent.cpp @@ -0,0 +1,582 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/Collision/collisionComponent.h" +#include "T3D/Components/Collision/collisionComponent_ScriptBinding.h" +#include "T3D/Components/Physics/physicsBehavior.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "scene/sceneRenderState.h" +#include "gfx/gfxTransformSaver.h" +#include "gfx/gfxDrawUtil.h" +#include "console/engineAPI.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsCollision.h" +#include "T3D/gameBase/gameConnection.h" +#include "collision/extrudedPolyList.h" +#include "math/mathIO.h" +#include "gfx/sim/debugDraw.h" +#include "collision/concretePolyList.h" + +#include "T3D/trigger.h" +#include "opcode/Opcode.h" +#include "opcode/Ice/IceAABB.h" +#include "opcode/Ice/IcePoint.h" +#include "opcode/OPC_AABBTree.h" +#include "opcode/OPC_AABBCollider.h" + +#include "math/mathUtils.h" +#include "materials/baseMatInstance.h" +#include "collision/vertexPolyList.h" + +extern bool gEditingMission; + +static bool sRenderColliders = false; + +//Docs +ConsoleDocClass(CollisionComponent, + "@brief The Box Collider component uses a box or rectangular convex shape for collisions.\n\n" + + "Colliders are individualized components that are similarly based off the CollisionInterface core.\n" + "They are basically the entire functionality of how Torque handles collisions compacted into a single component.\n" + "A collider will both collide against and be collided with, other entities.\n" + "Individual colliders will offer different shapes. This box collider will generate a box/rectangle convex, \n" + "while the mesh collider will take the owner Entity's rendered shape and do polysoup collision on it, etc.\n\n" + + "The general flow of operations for how collisions happen is thus:\n" + " -When the component is added(or updated) prepCollision() is called.\n" + " This will set up our initial convex shape for usage later.\n\n" + + " -When we update via processTick(), we first test if our entity owner is mobile.\n" + " If our owner isn't mobile(as in, they have no components that provide it a velocity to move)\n" + " then we skip doing our active collision checks. Collisions are checked by the things moving, as\n" + " opposed to being reactionary. If we're moving, we call updateWorkingCollisionSet().\n" + " updateWorkingCollisionSet() estimates our bounding space for our current ticket based on our position and velocity.\n" + " If our bounding space has changed since the last tick, we proceed to call updateWorkingList() on our convex.\n" + " This notifies any object in the bounding space that they may be collided with, so they will call buildConvex().\n" + " buildConvex() will set up our ConvexList with our collision convex info.\n\n" + + " -When the component that is actually causing our movement, such as SimplePhysicsBehavior, updates, it will check collisions.\n" + " It will call checkCollisions() on us. checkCollisions() will first build a bounding shape for our convex, and test\n" + " if we can early out because we won't hit anything based on our starting point, velocity, and tick time.\n" + " If we don't early out, we proceed to call updateCollisions(). This builds an ExtrudePolyList, which is then extruded\n" + " based on our velocity. We then test our extruded polies on our working list of objects we build\n" + " up earlier via updateWorkingCollisionSet. Any collisions that happen here will be added to our mCollisionList.\n" + " Finally, we call handleCollisionList() on our collisionList, which then queues out the colliison notice\n" + " to the object(s) we collided with so they can do callbacks and the like. We also report back on if we did collide\n" + " to the physics component via our bool return in checkCollisions() so it can make the physics react accordingly.\n\n" + + "One interesting point to note is the usage of mBlockColliding.\n" + "This is set so that it dictates the return on checkCollisions(). If set to false, it will ensure checkCollisions()\n" + "will return false, regardless if we actually collided. This is useful, because even if checkCollisions() returns false,\n" + "we still handle the collisions so the callbacks happen. This enables us to apply a collider to an object that doesn't block\n" + "objects, but does have callbacks, so it can act as a trigger, allowing for arbitrarily shaped triggers, as any collider can\n" + "act as a trigger volume(including MeshCollider).\n\n" + + "@tsexample\n" + "new CollisionComponentInstance()\n" + "{\n" + " template = CollisionComponentTemplate;\n" + " colliderSize = \"1 1 2\";\n" + " blockColldingObject = \"1\";\n" + "};\n" + "@endtsexample\n" + + "@see SimplePhysicsBehavior\n" + "@ingroup Collision\n" + "@ingroup Components\n" + ); +//Docs + +///////////////////////////////////////////////////////////////////////// +ImplementEnumType(CollisionMeshMeshType, + "Type of mesh data available in a shape.\n" + "@ingroup gameObjects") +{ CollisionComponent::None, "None", "No mesh data." }, +{ CollisionComponent::Bounds, "Bounds", "Bounding box of the shape." }, +{ CollisionComponent::CollisionMesh, "Collision Mesh", "Specifically desingated \"collision\" meshes." }, +{ CollisionComponent::VisibleMesh, "Visible Mesh", "Rendered mesh polygons." }, +EndImplementEnumType; + +// +CollisionComponent::CollisionComponent() : Component() +{ + mNetFlags.set(Ghostable | ScopeAlways); + + mFriendlyName = "Collision(Component)"; + + mOwnerRenderInterface = NULL; + mOwnerPhysicsInterface = NULL; + + mBlockColliding = true; + + mCollisionType = CollisionMesh; + mLOSType = CollisionMesh; + mDecalType = CollisionMesh; + + colisionMeshPrefix = StringTable->insert("Collision"); + + CollisionMoveMask = (TerrainObjectType | PlayerObjectType | + StaticShapeObjectType | VehicleObjectType | + VehicleBlockerObjectType | DynamicShapeObjectType | StaticObjectType | EntityObjectType | TriggerObjectType); + + mPhysicsRep = NULL; + mPhysicsWorld = NULL; + + mTimeoutList = NULL; +} + +CollisionComponent::~CollisionComponent() +{ + for (S32 i = 0; i < mFields.size(); ++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(CollisionComponent); + +void CollisionComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + RenderComponentInterface *renderInterface = mOwner->getComponent(); + if (renderInterface) + { + renderInterface->onShapeInstanceChanged.notify(this, &CollisionComponent::targetShapeChanged); + mOwnerRenderInterface = renderInterface; + } + + //physicsInterface + PhysicsComponentInterface *physicsInterface = mOwner->getComponent(); + if (!physicsInterface) + { + mPhysicsRep = PHYSICSMGR->createBody(); + } + + prepCollision(); +} + +void CollisionComponent::onComponentRemove() +{ + SAFE_DELETE(mPhysicsRep); + + Parent::onComponentRemove(); +} + +void CollisionComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + RenderComponentInterface *renderInterface = dynamic_cast(comp); + if (renderInterface) + { + renderInterface->onShapeInstanceChanged.notify(this, &CollisionComponent::targetShapeChanged); + mOwnerRenderInterface = renderInterface; + prepCollision(); + } + + PhysicsComponentInterface *physicsInterface = dynamic_cast(comp); + if (physicsInterface) + { + if (mPhysicsRep) + SAFE_DELETE(mPhysicsRep); + + prepCollision(); + } +} + +void CollisionComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + RenderComponentInterface *renderInterface = dynamic_cast(comp); + if (renderInterface) + { + renderInterface->onShapeInstanceChanged.remove(this, &CollisionComponent::targetShapeChanged); + mOwnerRenderInterface = NULL; + prepCollision(); + } + + //physicsInterface + PhysicsComponentInterface *physicsInterface = dynamic_cast(comp); + if (physicsInterface) + { + mPhysicsRep = PHYSICSMGR->createBody(); + + prepCollision(); + } +} + +void CollisionComponent::checkDependencies() +{ +} + +void CollisionComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addGroup("Collision"); + + addField("CollisionType", TypeCollisionMeshMeshType, Offset(mCollisionType, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("LineOfSightType", TypeCollisionMeshMeshType, Offset(mLOSType, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("DecalType", TypeCollisionMeshMeshType, Offset(mDecalType, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("CollisionMeshPrefix", TypeString, Offset(colisionMeshPrefix, CollisionComponent), + "The type of mesh data to use for collision queries."); + + addField("BlockCollisions", TypeBool, Offset(mBlockColliding, CollisionComponent), ""); + + endGroup("Collision"); +} + +void CollisionComponent::inspectPostApply() +{ + // Apply any transformations set in the editor + Parent::inspectPostApply(); + + if (isServerObject()) + { + setMaskBits(ColliderMask); + prepCollision(); + } +} + +U32 CollisionComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & (ColliderMask | InitialUpdateMask))) + { + stream->write((U32)mCollisionType); + stream->writeString(colisionMeshPrefix); + } + + return retMask; +} + +void CollisionComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) // UpdateMask + { + U32 collisionType = CollisionMesh; + + stream->read(&collisionType); + + // Handle it if we have changed CollisionType's + if ((MeshType)collisionType != mCollisionType) + { + mCollisionType = (MeshType)collisionType; + + prepCollision(); + } + + char readBuffer[1024]; + + stream->readString(readBuffer); + colisionMeshPrefix = StringTable->insert(readBuffer); + } +} + +void CollisionComponent::ownerTransformSet(MatrixF *mat) +{ + if (mPhysicsRep) + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void CollisionComponent::targetShapeChanged(RenderComponentInterface* instanceInterface) +{ + prepCollision(); +} + +void CollisionComponent::prepCollision() +{ + if (!mOwner) + return; + + // Let the client know that the collision was updated + setMaskBits(ColliderMask); + + mOwner->disableCollision(); + + if ((!PHYSICSMGR || mCollisionType == None) || + (mOwnerRenderInterface == NULL && (mCollisionType == CollisionMesh || mCollisionType == VisibleMesh))) + return; + + PhysicsCollision *colShape = NULL; + + if (mCollisionType == Bounds) + { + MatrixF offset(true); + + if (mOwnerRenderInterface && mOwnerRenderInterface->getShape()) + offset.setPosition(mOwnerRenderInterface->getShape()->center); + + colShape = PHYSICSMGR->createCollision(); + colShape->addBox(mOwner->getObjBox().getExtents() * 0.5f * mOwner->getScale(), offset); + } + else if (mCollisionType == CollisionMesh || (mCollisionType == VisibleMesh /*&& !mOwner->getComponent()*/)) + { + colShape = buildColShapes(); + } + + if (colShape) + { + mPhysicsWorld = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + + if (mPhysicsRep) + { + if (mBlockColliding) + mPhysicsRep->init(colShape, 0, 0, mOwner, mPhysicsWorld); + else + mPhysicsRep->init(colShape, 0, PhysicsBody::BF_TRIGGER, mOwner, mPhysicsWorld); + + mPhysicsRep->setTransform(mOwner->getTransform()); + } + } + + mOwner->enableCollision(); + + onCollisionChanged.trigger(colShape); +} + +void CollisionComponent::processTick() +{ + if (!isActive()) + return; + + //ProcessTick is where our collision testing begins! + + //callback if we have a persisting contact + if (mContactInfo.contactObject) + { + if (mContactInfo.contactTimer > 0) + { + if (isMethod("updateContact")) + Con::executef(this, "updateContact"); + + if (mOwner->isMethod("updateContact")) + Con::executef(mOwner, "updateContact"); + } + + ++mContactInfo.contactTimer; + } + else if (mContactInfo.contactTimer != 0) + mContactInfo.clear(); +} + +void CollisionComponent::updatePhysics() +{ + +} + +PhysicsCollision* CollisionComponent::getCollisionData() +{ + if ((!PHYSICSMGR || mCollisionType == None) || mOwnerRenderInterface == NULL) + return NULL; + + PhysicsCollision *colShape = NULL; + if (mCollisionType == Bounds) + { + MatrixF offset(true); + offset.setPosition(mOwnerRenderInterface->getShape()->center); + colShape = PHYSICSMGR->createCollision(); + colShape->addBox(mOwner->getObjBox().getExtents() * 0.5f * mOwner->getScale(), offset); + } + else if (mCollisionType == CollisionMesh || (mCollisionType == VisibleMesh/* && !mOwner->getComponent()*/)) + { + colShape = buildColShapes(); + //colShape = mOwnerShapeInstance->getShape()->buildColShape(mCollisionType == VisibleMesh, mOwner->getScale()); + } + /*else if (mCollisionType == VisibleMesh && !mOwner->getComponent()) + { + //We don't have support for visible mesh collisions with animated meshes currently in the physics abstraction layer + //so we don't generate anything if we're set to use a visible mesh but have an animated mesh component. + colShape = mOwnerShapeInstance->getShape()->buildColShape(mCollisionType == VisibleMesh, mOwner->getScale()); + }*/ + else if (mCollisionType == VisibleMesh/* && mOwner->getComponent()*/) + { + Con::printf("CollisionComponent::updatePhysics: Cannot use visible mesh collisions with an animated mesh!"); + } + + return colShape; +} + +bool CollisionComponent::castRay(const Point3F &start, const Point3F &end, RayInfo* info) +{ + if (!mCollisionType == None) + { + if (mPhysicsWorld) + { + return mPhysicsWorld->castRay(start, end, info, Point3F::Zero); + } + } + + return false; +} + +PhysicsCollision* CollisionComponent::buildColShapes() +{ + PROFILE_SCOPE(CollisionComponent_buildColShapes); + + PhysicsCollision *colShape = NULL; + U32 surfaceKey = 0; + + TSShape* shape = mOwnerRenderInterface->getShape(); + + if (mCollisionType == VisibleMesh) + { + // Here we build triangle collision meshes from the + // visible detail levels. + + // A negative subshape on the detail means we don't have geometry. + const TSShape::Detail &detail = shape->details[0]; + if (detail.subShapeNum < 0) + return NULL; + + // We don't try to optimize the triangles we're given + // and assume the art was created properly for collision. + ConcretePolyList polyList; + polyList.setTransform(&MatrixF::Identity, mOwner->getScale()); + + // Create the collision meshes. + S32 start = shape->subShapeFirstObject[detail.subShapeNum]; + S32 end = start + shape->subShapeNumObjects[detail.subShapeNum]; + for (S32 o = start; o < end; o++) + { + const TSShape::Object &object = shape->objects[o]; + if (detail.objectDetailNum >= object.numMeshes) + continue; + + // No mesh or no verts.... nothing to do. + TSMesh *mesh = shape->meshes[object.startMeshIndex + detail.objectDetailNum]; + if (!mesh || mesh->mNumVerts == 0) + continue; + + // Gather the mesh triangles. + polyList.clear(); + mesh->buildPolyList(0, &polyList, surfaceKey, NULL); + + // Create the collision shape if we haven't already. + if (!colShape) + colShape = PHYSICSMGR->createCollision(); + + // Get the object space mesh transform. + MatrixF localXfm; + shape->getNodeWorldTransform(object.nodeIndex, &localXfm); + + colShape->addTriangleMesh(polyList.mVertexList.address(), + polyList.mVertexList.size(), + polyList.mIndexList.address(), + polyList.mIndexList.size() / 3, + localXfm); + } + + // Return what we built... if anything. + return colShape; + } + else if (mCollisionType == CollisionMesh) + { + + // Scan out the collision hulls... + // + // TODO: We need to support LOS collision for physics. + // + for (U32 i = 0; i < shape->details.size(); i++) + { + const TSShape::Detail &detail = shape->details[i]; + const String &name = shape->names[detail.nameIndex]; + + // Is this a valid collision detail. + if (!dStrStartsWith(name, colisionMeshPrefix) || detail.subShapeNum < 0) + continue; + + // Now go thru the meshes for this detail. + S32 start = shape->subShapeFirstObject[detail.subShapeNum]; + S32 end = start + shape->subShapeNumObjects[detail.subShapeNum]; + if (start >= end) + continue; + + for (S32 o = start; o < end; o++) + { + const TSShape::Object &object = shape->objects[o]; + const String &meshName = shape->names[object.nameIndex]; + + if (object.numMeshes <= detail.objectDetailNum) + continue; + + // No mesh, a flat bounds, or no verts.... nothing to do. + TSMesh *mesh = shape->meshes[object.startMeshIndex + detail.objectDetailNum]; + if (!mesh || mesh->getBounds().isEmpty() || mesh->mNumVerts == 0) + continue; + + // We need the default mesh transform. + MatrixF localXfm; + shape->getNodeWorldTransform(object.nodeIndex, &localXfm); + + // We have some sort of collision shape... so allocate it. + if (!colShape) + colShape = PHYSICSMGR->createCollision(); + + // Any other mesh name we assume as a generic convex hull. + // + // Collect the verts using the vertex polylist which will + // filter out duplicates. This is importaint as the convex + // generators can sometimes fail with duplicate verts. + // + VertexPolyList polyList; + MatrixF meshMat(localXfm); + + Point3F t = meshMat.getPosition(); + t.convolve(mOwner->getScale()); + meshMat.setPosition(t); + + polyList.setTransform(&MatrixF::Identity, mOwner->getScale()); + mesh->buildPolyList(0, &polyList, surfaceKey, NULL); + colShape->addConvex(polyList.getVertexList().address(), + polyList.getVertexList().size(), + meshMat); + } // objects + } // details + } + + return colShape; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Collision/collisionComponent.h b/Engine/source/T3D/components/Collision/collisionComponent.h new file mode 100644 index 0000000000..aa05dc1091 --- /dev/null +++ b/Engine/source/T3D/components/Collision/collisionComponent.h @@ -0,0 +1,208 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COLLISION_COMPONENT_H +#define COLLISION_COMPONENT_H + +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/Entity.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/Components/coreInterfaces.h" +#endif +#ifndef COLLISION_INTERFACES_H +#include "T3D/Components/collision/collisionInterfaces.h" +#endif +#ifndef RENDER_COMPONENT_INTERFACE_H +#include "T3D/Components/render/renderComponentInterface.h" +#endif +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#include "T3D/Components/physics/physicsComponentInterface.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif +#ifndef _T3D_PHYSICS_PHYSICSWORLD_H_ +#include "T3D/physics/physicsWorld.h" +#endif + +class TSShapeInstance; +class SceneRenderState; +class CollisionComponent; +class PhysicsBody; +class PhysicsWorld; + +class CollisionComponent : public Component, + public CollisionInterface, + public CastRayInterface +{ + typedef Component Parent; +public: + enum MeshType + { + None = 0, ///< No mesh + Bounds = 1, ///< Bounding box of the shape + CollisionMesh = 2, ///< Specifically designated collision meshes + VisibleMesh = 3 ///< Rendered mesh polygons + }; + + PhysicsWorld* mPhysicsWorld; + PhysicsBody* mPhysicsRep; + +protected: + MeshType mCollisionType; + MeshType mDecalType; + MeshType mLOSType; + + Vector mCollisionDetails; + Vector mLOSDetails; + + StringTableEntry colisionMeshPrefix; + + RenderComponentInterface* mOwnerRenderInterface; + + PhysicsComponentInterface* mOwnerPhysicsInterface; + + //only really relevent for the collision mesh type + //if we note an animation component is added, we flag as being animated. + //This way, if we're using collision meshes, we can set it up to update their transforms + //as needed + bool mAnimated; + + enum + { + ColliderMask = Parent::NextFreeMask, + }; + +public: + CollisionComponent(); + virtual ~CollisionComponent(); + DECLARE_CONOBJECT(CollisionComponent); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + virtual void ownerTransformSet(MatrixF *mat); + void targetShapeChanged(RenderComponentInterface* instanceInterface); + + virtual void onComponentRemove(); + virtual void onComponentAdd(); + + virtual void checkDependencies(); + + static void initPersistFields(); + + void inspectPostApply(); + + virtual void processTick(); + + void prepCollision(); + + PhysicsCollision* buildColShapes(); + + void updatePhysics(); + + virtual bool castRay(const Point3F &start, const Point3F &end, RayInfo* info); + + virtual bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere){ return false; } + + virtual PhysicsCollision* getCollisionData(); + + //Utility functions, mostly for script + Point3F getContactNormal() { return mContactInfo.contactNormal; } + bool hasContact() + { + if (mContactInfo.contactObject) + return true; + else + return false; + } + S32 getCollisionCount() + { + return mCollisionList.getCount(); + } + + Point3F getCollisionNormal(S32 collisionIndex) + { + if (collisionIndex < 0 || mCollisionList.getCount() < collisionIndex) + return Point3F::Zero; + + return mCollisionList[collisionIndex].normal; + } + + F32 getCollisionAngle(S32 collisionIndex, Point3F upVector) + { + if (collisionIndex < 0 || mCollisionList.getCount() < collisionIndex) + return 0.0f; + + return mRadToDeg(mAcos(mDot(mCollisionList[collisionIndex].normal, upVector))); + } + + S32 getBestCollision(Point3F upVector) + { + S32 bestCollision = -1; + + F32 bestAngle = 360.f; + S32 count = mCollisionList.getCount(); + for (U32 i = 0; i < count; ++i) + { + F32 angle = mRadToDeg(mAcos(mDot(mCollisionList[i].normal, upVector))); + + if (angle < bestAngle) + { + bestCollision = i; + bestAngle = angle; + } + } + + return bestCollision; + } + + F32 getBestCollisionAngle(VectorF upVector) + { + S32 bestCol = getBestCollision(upVector); + + if (bestCol == -1) + return 0; + + return getCollisionAngle(bestCol, upVector); + } +}; + +typedef CollisionComponent::MeshType CollisionMeshMeshType; +DefineEnumType(CollisionMeshMeshType); + +#endif // COLLISION_COMPONENT_H diff --git a/Engine/source/T3D/components/Collision/collisionInterfaces.cpp b/Engine/source/T3D/components/Collision/collisionInterfaces.cpp new file mode 100644 index 0000000000..4fba3e3c01 --- /dev/null +++ b/Engine/source/T3D/components/Collision/collisionInterfaces.cpp @@ -0,0 +1,258 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/collision/collisionInterfaces.h" +#include "scene/sceneObject.h" +#include "T3D/Entity.h" +#include "console/engineAPI.h" +#include "T3D/trigger.h" +#include "materials/baseMatInstance.h" + +void CollisionInterface::handleCollisionList( CollisionList &collisionList, VectorF velocity ) +{ + Collision bestCol; + + mCollisionList = collisionList; + + for (U32 i=0; i < collisionList.getCount(); ++i) + { + Collision& colCheck = collisionList[i]; + + if (colCheck.object) + { + if (colCheck.object->getTypeMask() & PlayerObjectType) + { + handleCollision( colCheck, velocity ); + } + else if (colCheck.object->getTypeMask() & TriggerObjectType) + { + // We've hit it's bounding box, that's close enough for triggers + Trigger* pTrigger = static_cast(colCheck.object); + + Component *comp = dynamic_cast(this); + pTrigger->potentialEnterObject(comp->getOwner()); + } + else if (colCheck.object->getTypeMask() & DynamicShapeObjectType) + { + Con::printf("HIT A GENERICALLY DYNAMIC OBJECT"); + handleCollision(colCheck, velocity); + } + else if(colCheck.object->getTypeMask() & EntityObjectType) + { + Entity* ent = dynamic_cast(colCheck.object); + if (ent) + { + CollisionInterface *colObjectInterface = ent->getComponent(); + if (colObjectInterface) + { + //convert us to our component + Component *thisComp = dynamic_cast(this); + if (thisComp) + { + colObjectInterface->onCollisionSignal.trigger(thisComp->getOwner()); + + //TODO: properly do this + Collision oppositeCol = colCheck; + oppositeCol.object = thisComp->getOwner(); + + colObjectInterface->handleCollision(oppositeCol, velocity); + } + } + } + } + else + { + handleCollision(colCheck, velocity); + } + } + } +} + +void CollisionInterface::handleCollision( Collision &col, VectorF velocity ) +{ + if (col.object && (mContactInfo.contactObject == NULL || + col.object->getId() != mContactInfo.contactObject->getId())) + { + queueCollision(col.object, velocity - col.object->getVelocity()); + + //do the callbacks to script for this collision + Component *comp = dynamic_cast(this); + if (comp->isMethod("onCollision")) + { + S32 matId = col.material != NULL ? col.material->getMaterial()->getId() : 0; + Con::executef(comp, "onCollision", col.object, col.normal, col.point, matId, velocity); + } + + if (comp->getOwner()->isMethod("onCollisionEvent")) + { + S32 matId = col.material != NULL ? col.material->getMaterial()->getId() : 0; + Con::executef(comp->getOwner(), "onCollisionEvent", col.object, col.normal, col.point, matId, velocity); + } + } +} + +void CollisionInterface::handleCollisionNotifyList() +{ + //special handling for any collision components we should notify that a collision happened. + for (U32 i = 0; i < mCollisionNotifyList.size(); ++i) + { + //convert us to our component + Component *thisComp = dynamic_cast(this); + if (thisComp) + { + mCollisionNotifyList[i]->onCollisionSignal.trigger(thisComp->getOwner()); + } + } + + mCollisionNotifyList.clear(); +} + +Chunker sTimeoutChunker; +CollisionInterface::CollisionTimeout* CollisionInterface::sFreeTimeoutList = 0; + +void CollisionInterface::queueCollision( SceneObject *obj, const VectorF &vec) +{ + // Add object to list of collisions. + SimTime time = Sim::getCurrentTime(); + S32 num = obj->getId(); + + CollisionTimeout** adr = &mTimeoutList; + CollisionTimeout* ptr = mTimeoutList; + while (ptr) + { + if (ptr->objectNumber == num) + { + if (ptr->expireTime < time) + { + ptr->expireTime = time + CollisionTimeoutValue; + ptr->object = obj; + ptr->vector = vec; + } + return; + } + // Recover expired entries + if (ptr->expireTime < time) + { + CollisionTimeout* cur = ptr; + *adr = ptr->next; + ptr = ptr->next; + cur->next = sFreeTimeoutList; + sFreeTimeoutList = cur; + } + else + { + adr = &ptr->next; + ptr = ptr->next; + } + } + + // New entry for the object + if (sFreeTimeoutList != NULL) + { + ptr = sFreeTimeoutList; + sFreeTimeoutList = ptr->next; + ptr->next = NULL; + } + else + { + ptr = sTimeoutChunker.alloc(); + } + + ptr->object = obj; + ptr->objectNumber = obj->getId(); + ptr->vector = vec; + ptr->expireTime = time + CollisionTimeoutValue; + ptr->next = mTimeoutList; + + mTimeoutList = ptr; +} + +bool CollisionInterface::checkEarlyOut(Point3F start, VectorF velocity, F32 time, Box3F objectBox, Point3F objectScale, + Box3F collisionBox, U32 collisionMask, CollisionWorkingList &colWorkingList) +{ + Point3F end = start + velocity * time; + Point3F distance = end - start; + + Box3F scaledBox = objectBox; + scaledBox.minExtents.convolve(objectScale); + scaledBox.maxExtents.convolve(objectScale); + + if (mFabs(distance.x) < objectBox.len_x() && + mFabs(distance.y) < objectBox.len_y() && + mFabs(distance.z) < objectBox.len_z()) + { + // We can potentially early out of this. If there are no polys in the clipped polylist at our + // end position, then we can bail, and just set start = end; + Box3F wBox = scaledBox; + wBox.minExtents += end; + wBox.maxExtents += end; + + static EarlyOutPolyList eaPolyList; + eaPolyList.clear(); + eaPolyList.mNormal.set(0.0f, 0.0f, 0.0f); + eaPolyList.mPlaneList.clear(); + eaPolyList.mPlaneList.setSize(6); + eaPolyList.mPlaneList[0].set(wBox.minExtents,VectorF(-1.0f, 0.0f, 0.0f)); + eaPolyList.mPlaneList[1].set(wBox.maxExtents,VectorF(0.0f, 1.0f, 0.0f)); + eaPolyList.mPlaneList[2].set(wBox.maxExtents,VectorF(1.0f, 0.0f, 0.0f)); + eaPolyList.mPlaneList[3].set(wBox.minExtents,VectorF(0.0f, -1.0f, 0.0f)); + eaPolyList.mPlaneList[4].set(wBox.minExtents,VectorF(0.0f, 0.0f, -1.0f)); + eaPolyList.mPlaneList[5].set(wBox.maxExtents,VectorF(0.0f, 0.0f, 1.0f)); + + // Build list from convex states here... + CollisionWorkingList& rList = colWorkingList; + CollisionWorkingList* pList = rList.wLink.mNext; + while (pList != &rList) + { + Convex* pConvex = pList->mConvex; + + if (pConvex->getObject()->getTypeMask() & collisionMask) + { + Box3F convexBox = pConvex->getBoundingBox(); + + if (wBox.isOverlapped(convexBox)) + { + // No need to separate out the physical zones here, we want those + // to cause a fallthrough as well... + pConvex->getPolyList(&eaPolyList); + } + } + pList = pList->wLink.mNext; + } + + if (eaPolyList.isEmpty()) + { + return true; + } + } + + return false; +} + + +Collision* CollisionInterface::getCollision(S32 col) +{ + if(col < mCollisionList.getCount() && col >= 0) + return &mCollisionList[col]; + else + return NULL; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Collision/collisionInterfaces.h b/Engine/source/T3D/components/Collision/collisionInterfaces.h new file mode 100644 index 0000000000..675230e07f --- /dev/null +++ b/Engine/source/T3D/components/Collision/collisionInterfaces.h @@ -0,0 +1,167 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COLLISION_INTERFACES_H +#define COLLISION_INTERFACES_H + +#ifndef _CONVEX_H_ +#include "collision/convex.h" +#endif +#ifndef _COLLISION_H_ +#include "collision/collision.h" +#endif +#ifndef _EARLYOUTPOLYLIST_H_ +#include "collision/earlyOutPolyList.h" +#endif +#ifndef _SIM_H_ +#include "console/sim.h" +#endif +#ifndef _SCENECONTAINER_H_ +#include "scene/sceneContainer.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif + +struct ContactInfo +{ + bool contacted, move; + SceneObject *contactObject; + VectorF idealContactNormal; + VectorF contactNormal; + Point3F contactPoint; + F32 contactTime; + S32 contactTimer; + BaseMatInstance *contactMaterial; + + void clear() + { + contacted=move=false; + contactObject = NULL; + contactNormal.set(0,0,0); + contactTime = 0.f; + contactTimer = 0; + idealContactNormal.set(0, 0, 1); + contactMaterial = NULL; + } + + ContactInfo() { clear(); } + +}; + +class CollisionInterface// : public Interface +{ +public: + // CollisionTimeout + // This struct lets us track our collisions and estimate when they've have timed out and we'll need to act on it. + struct CollisionTimeout + { + CollisionTimeout* next; + SceneObject* object; + U32 objectNumber; + SimTime expireTime; + VectorF vector; + }; + + Signal< void( SceneObject* ) > CollisionInterface::onCollisionSignal; + Signal< void( SceneObject* ) > CollisionInterface::onContactSignal; + +protected: + CollisionTimeout* mTimeoutList; + static CollisionTimeout* sFreeTimeoutList; + + CollisionList mCollisionList; + Vector mCollisionNotifyList; + + ContactInfo mContactInfo; + + Box3F mWorkingQueryBox; + + U32 CollisionMoveMask; + + Convex *mConvexList; + + bool mBlockColliding; + + void handleCollisionNotifyList(); + + void queueCollision( SceneObject *obj, const VectorF &vec); + + /// checkEarlyOut + /// This function lets you trying and early out of any expensive collision checks by using simple extruded poly boxes representing our objects + /// If it returns true, we know we won't hit with the given parameters and can successfully early out. If it returns false, our test case collided + /// and we should do the full collision sim. + bool checkEarlyOut(Point3F start, VectorF velocity, F32 time, Box3F objectBox, Point3F objectScale, + Box3F collisionBox, U32 collisionMask, CollisionWorkingList &colWorkingList); + +public: + /// checkCollisions + // This is our main function for checking if a collision is happening based on the start point, velocity and time + // We do the bulk of the collision checking in here + //virtual bool checkCollisions( const F32 travelTime, Point3F *velocity, Point3F start )=0; + + CollisionList *getCollisionList() { return &mCollisionList; } + + void clearCollisionList() { mCollisionList.clear(); } + + void clearCollisionNotifyList() { mCollisionNotifyList.clear(); } + + Collision *getCollision(S32 col); + + ContactInfo* getContactInfo() { return &mContactInfo; } + + Convex *getConvexList() { return mConvexList; } + + virtual bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere) = 0; + + enum PublicConstants { + CollisionTimeoutValue = 250 + }; + + bool doesBlockColliding() { return mBlockColliding; } + + /// handleCollisionList + /// This basically takes in a CollisionList and calls handleCollision for each. + void handleCollisionList(CollisionList &collisionList, VectorF velocity); + + /// handleCollision + /// This will take a collision and queue the collision info for the object so that in knows about the collision. + void handleCollision(Collision &col, VectorF velocity); + + virtual PhysicsCollision* getCollisionData() = 0; + + Signal< void(PhysicsCollision* collision) > CollisionInterface::onCollisionChanged; +}; + +class BuildConvexInterface //: public Interface +{ +public: + virtual void buildConvex(const Box3F& box, Convex* convex)=0; +}; + +class BuildPolyListInterface// : public Interface +{ +public: + virtual bool buildPolyList(PolyListContext context, AbstractPolyList* polyList, const Box3F &box, const SphereF &sphere) = 0; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/Collision/collisionTrigger.cpp b/Engine/source/T3D/components/Collision/collisionTrigger.cpp new file mode 100644 index 0000000000..ed1e86675d --- /dev/null +++ b/Engine/source/T3D/components/Collision/collisionTrigger.cpp @@ -0,0 +1,619 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "T3D/Components/Collision/CollisionTrigger.h" + +#include "scene/sceneRenderState.h" +#include "console/consoleTypes.h" +#include "console/engineAPI.h" +#include "collision/boxConvex.h" + +#include "core/stream/bitStream.h" +#include "math/mathIO.h" +#include "gfx/gfxTransformSaver.h" +#include "renderInstance/renderPassManager.h" +#include "gfx/gfxDrawUtil.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsCollision.h" + + +bool CollisionTrigger::smRenderCollisionTriggers = false; + +//----------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- +//-------------------------------------------------------------------------- + +IMPLEMENT_CO_NETOBJECT_V1(CollisionTrigger); + +ConsoleDocClass(CollisionTrigger, + "@brief A CollisionTrigger is a volume of space that initiates script callbacks " + "when objects pass through the CollisionTrigger.\n\n" + + "CollisionTriggerData provides the callbacks for the CollisionTrigger when an object enters, stays inside " + "or leaves the CollisionTrigger's volume.\n\n" + + "@see CollisionTriggerData\n" + "@ingroup gameObjects\n" + ); + +IMPLEMENT_CALLBACK(CollisionTrigger, onAdd, void, (U32 objectId), (objectId), + "@brief Called when the CollisionTrigger is being created.\n\n" + "@param objectId the object id of the CollisionTrigger being created\n"); + +IMPLEMENT_CALLBACK(CollisionTrigger, onRemove, void, (U32 objectId), (objectId), + "@brief Called just before the CollisionTrigger is deleted.\n\n" + "@param objectId the object id of the CollisionTrigger being deleted\n"); + +CollisionTrigger::CollisionTrigger() +{ + // Don't ghost by default. + mNetFlags.set(Ghostable | ScopeAlways); + + mTypeMask |= TriggerObjectType; + + mObjScale.set(1, 1, 1); + mObjToWorld.identity(); + mWorldToObj.identity(); + + mLastThink = 0; + mCurrTick = 0; + + mConvexList = new Convex; + + mPhysicsRep = NULL; +} + +CollisionTrigger::~CollisionTrigger() +{ + delete mConvexList; + mConvexList = NULL; + SAFE_DELETE(mPhysicsRep); +} + +bool CollisionTrigger::castRay(const Point3F &start, const Point3F &end, RayInfo* info) +{ + // Collide against bounding box + F32 st, et, fst = 0, fet = 1; + F32 *bmin = &mObjBox.minExtents.x; + F32 *bmax = &mObjBox.maxExtents.x; + F32 const *si = &start.x; + F32 const *ei = &end.x; + + for (S32 i = 0; i < 3; i++) + { + if (*si < *ei) + { + if (*si > *bmax || *ei < *bmin) + return false; + F32 di = *ei - *si; + st = (*si < *bmin) ? (*bmin - *si) / di : 0; + et = (*ei > *bmax) ? (*bmax - *si) / di : 1; + } + else + { + if (*ei > *bmax || *si < *bmin) + return false; + F32 di = *ei - *si; + st = (*si > *bmax) ? (*bmax - *si) / di : 0; + et = (*ei < *bmin) ? (*bmin - *si) / di : 1; + } + if (st > fst) fst = st; + if (et < fet) fet = et; + if (fet < fst) + return false; + bmin++; bmax++; + si++; ei++; + } + + info->normal = start - end; + info->normal.normalizeSafe(); + getTransform().mulV(info->normal); + + info->t = fst; + info->object = this; + info->point.interpolate(start, end, fst); + info->material = 0; + return true; +} + +//----------------------------------------------------------------------------- +void CollisionTrigger::consoleInit() +{ + Con::addVariable("$CollisionTrigger::renderCollisionTriggers", TypeBool, &smRenderCollisionTriggers, + "@brief Forces all CollisionTrigger's to render.\n\n" + "Used by the Tools and debug render modes.\n" + "@ingroup gameObjects"); +} + +void CollisionTrigger::initPersistFields() +{ + addField("polyhedron", TypeTriggerPolyhedron, Offset(mCollisionTriggerPolyhedron, CollisionTrigger), + "@brief Defines a non-rectangular area for the CollisionTrigger.\n\n" + "Rather than the standard rectangular bounds, this optional parameter defines a quadrilateral " + "CollisionTrigger area. The quadrilateral is defined as a corner point followed by three vectors " + "representing the edges extending from the corner.\n"); + + addProtectedField("enterCommand", TypeCommand, Offset(mEnterCommand, CollisionTrigger), &setEnterCmd, &defaultProtectedGetFn, + "The command to execute when an object enters this CollisionTrigger. Object id stored in %%obj. Maximum 1023 characters."); + addProtectedField("leaveCommand", TypeCommand, Offset(mLeaveCommand, CollisionTrigger), &setLeaveCmd, &defaultProtectedGetFn, + "The command to execute when an object leaves this CollisionTrigger. Object id stored in %%obj. Maximum 1023 characters."); + addProtectedField("tickCommand", TypeCommand, Offset(mTickCommand, CollisionTrigger), &setTickCmd, &defaultProtectedGetFn, + "The command to execute while an object is inside this CollisionTrigger. Maximum 1023 characters."); + + Parent::initPersistFields(); +} + +bool CollisionTrigger::setEnterCmd(void *object, const char *index, const char *data) +{ + static_cast(object)->setMaskBits(EnterCmdMask); + return true; // to update the actual field +} + +bool CollisionTrigger::setLeaveCmd(void *object, const char *index, const char *data) +{ + static_cast(object)->setMaskBits(LeaveCmdMask); + return true; // to update the actual field +} + +bool CollisionTrigger::setTickCmd(void *object, const char *index, const char *data) +{ + static_cast(object)->setMaskBits(TickCmdMask); + return true; // to update the actual field +} + +//-------------------------------------------------------------------------- + +bool CollisionTrigger::onAdd() +{ + if (!Parent::onAdd()) + return false; + + onAdd_callback(getId()); + + Polyhedron temp = mCollisionTriggerPolyhedron; + setTriggerPolyhedron(temp); + + addToScene(); + + if (isServerObject()) + scriptOnAdd(); + + return true; +} + +void CollisionTrigger::onRemove() +{ + onRemove_callback(getId()); + + mConvexList->nukeList(); + + removeFromScene(); + Parent::onRemove(); +} + +bool CollisionTrigger::onNewDataBlock(GameBaseData *dptr, bool reload) +{ + return true; +} + +void CollisionTrigger::onDeleteNotify(SimObject *obj) +{ + GameBase* pScene = dynamic_cast(obj); + + if (pScene != NULL) + { + for (U32 i = 0; i < mObjects.size(); i++) + { + if (pScene == mObjects[i]) + { + mObjects.erase(i); + //onLeaveCollisionTrigger_callback(this, pScene); + break; + } + } + } + + Parent::onDeleteNotify(obj); +} + +void CollisionTrigger::inspectPostApply() +{ + setTriggerPolyhedron(mCollisionTriggerPolyhedron); + setMaskBits(PolyMask); + Parent::inspectPostApply(); +} + +//-------------------------------------------------------------------------- + +void CollisionTrigger::buildConvex(const Box3F& box, Convex* convex) +{ + // These should really come out of a pool + mConvexList->collectGarbage(); + + Box3F realBox = box; + mWorldToObj.mul(realBox); + realBox.minExtents.convolveInverse(mObjScale); + realBox.maxExtents.convolveInverse(mObjScale); + + if (realBox.isOverlapped(getObjBox()) == false) + return; + + // Just return a box convex for the entire shape... + Convex* cc = 0; + CollisionWorkingList& wl = convex->getWorkingList(); + for (CollisionWorkingList* itr = wl.wLink.mNext; itr != &wl; itr = itr->wLink.mNext) { + if (itr->mConvex->getType() == BoxConvexType && + itr->mConvex->getObject() == this) { + cc = itr->mConvex; + break; + } + } + if (cc) + return; + + // Create a new convex. + BoxConvex* cp = new BoxConvex; + mConvexList->registerObject(cp); + convex->addToWorkingList(cp); + cp->init(this); + + mObjBox.getCenter(&cp->mCenter); + cp->mSize.x = mObjBox.len_x() / 2.0f; + cp->mSize.y = mObjBox.len_y() / 2.0f; + cp->mSize.z = mObjBox.len_z() / 2.0f; +} + + +//------------------------------------------------------------------------------ + +void CollisionTrigger::setTransform(const MatrixF & mat) +{ + Parent::setTransform(mat); + + if (mPhysicsRep) + mPhysicsRep->setTransform(mat); + + if (isServerObject()) { + MatrixF base(true); + base.scale(Point3F(1.0 / mObjScale.x, + 1.0 / mObjScale.y, + 1.0 / mObjScale.z)); + base.mul(mWorldToObj); + mClippedList.setBaseTransform(base); + + setMaskBits(TransformMask | ScaleMask); + } +} + +void CollisionTrigger::prepRenderImage(SceneRenderState *state) +{ + // only render if selected or render flag is set + if (!smRenderCollisionTriggers && !isSelected()) + return; + + ObjectRenderInst *ri = state->getRenderPass()->allocInst(); + ri->renderDelegate.bind(this, &CollisionTrigger::renderObject); + ri->type = RenderPassManager::RIT_Editor; + ri->translucentSort = true; + ri->defaultKey = 1; + state->getRenderPass()->addInst(ri); +} + +void CollisionTrigger::renderObject(ObjectRenderInst *ri, + SceneRenderState *state, + BaseMatInstance *overrideMat) +{ + if (overrideMat) + return; + + GFXStateBlockDesc desc; + desc.setZReadWrite(true, false); + desc.setBlend(true); + + // CollisionTrigger polyhedrons are set up with outward facing normals and CCW ordering + // so can't enable backface culling. + desc.setCullMode(GFXCullNone); + + GFXTransformSaver saver; + + MatrixF mat = getRenderTransform(); + mat.scale(getScale()); + + GFX->multWorld(mat); + + GFXDrawUtil *drawer = GFX->getDrawUtil(); + + drawer->drawPolyhedron(desc, mCollisionTriggerPolyhedron, ColorI(255, 192, 0, 45)); + + // Render wireframe. + + desc.setFillModeWireframe(); + drawer->drawPolyhedron(desc, mCollisionTriggerPolyhedron, ColorI::BLACK); +} + +void CollisionTrigger::setTriggerPolyhedron(const Polyhedron& rPolyhedron) +{ + mCollisionTriggerPolyhedron = rPolyhedron; + + if (mCollisionTriggerPolyhedron.pointList.size() != 0) { + mObjBox.minExtents.set(1e10, 1e10, 1e10); + mObjBox.maxExtents.set(-1e10, -1e10, -1e10); + for (U32 i = 0; i < mCollisionTriggerPolyhedron.pointList.size(); i++) { + mObjBox.minExtents.setMin(mCollisionTriggerPolyhedron.pointList[i]); + mObjBox.maxExtents.setMax(mCollisionTriggerPolyhedron.pointList[i]); + } + } + else { + mObjBox.minExtents.set(-0.5, -0.5, -0.5); + mObjBox.maxExtents.set(0.5, 0.5, 0.5); + } + + MatrixF xform = getTransform(); + setTransform(xform); + + mClippedList.clear(); + mClippedList.mPlaneList = mCollisionTriggerPolyhedron.planeList; + // for (U32 i = 0; i < mClippedList.mPlaneList.size(); i++) + // mClippedList.mPlaneList[i].neg(); + + MatrixF base(true); + base.scale(Point3F(1.0 / mObjScale.x, + 1.0 / mObjScale.y, + 1.0 / mObjScale.z)); + base.mul(mWorldToObj); + + mClippedList.setBaseTransform(base); + + SAFE_DELETE(mPhysicsRep); + + if (PHYSICSMGR) + { + PhysicsCollision *colShape = PHYSICSMGR->createCollision(); + + MatrixF colMat(true); + colMat.displace(Point3F(0, 0, mObjBox.getExtents().z * 0.5f * mObjScale.z)); + + colShape->addBox(mObjBox.getExtents() * 0.5f * mObjScale, colMat); + //MatrixF colMat( true ); + //colMat.scale( mObjScale ); + //colShape->addConvex( mCollisionTriggerPolyhedron.pointList.address(), mCollisionTriggerPolyhedron.pointList.size(), colMat ); + + PhysicsWorld *world = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init(colShape, 0, PhysicsBody::BF_TRIGGER | PhysicsBody::BF_KINEMATIC, this, world); + mPhysicsRep->setTransform(getTransform()); + } +} + + +//-------------------------------------------------------------------------- + +bool CollisionTrigger::testObject(GameBase* enter) +{ + if (mCollisionTriggerPolyhedron.pointList.size() == 0) + return false; + + mClippedList.clear(); + + SphereF sphere; + sphere.center = (mWorldBox.minExtents + mWorldBox.maxExtents) * 0.5; + VectorF bv = mWorldBox.maxExtents - sphere.center; + sphere.radius = bv.len(); + + enter->buildPolyList(PLC_Collision, &mClippedList, mWorldBox, sphere); + return mClippedList.isEmpty() == false; +} + + +void CollisionTrigger::potentialEnterObject(GameBase* enter) +{ + for (U32 i = 0; i < mObjects.size(); i++) { + if (mObjects[i] == enter) + return; + } + + if (testObject(enter) == true) { + mObjects.push_back(enter); + deleteNotify(enter); + + if (!mEnterCommand.isEmpty()) + { + String command = String("%obj = ") + enter->getIdString() + ";" + mEnterCommand; + Con::evaluate(command.c_str()); + } + + //onEnterCollisionTrigger_callback(this, enter); + } +} + + +void CollisionTrigger::processTick(const Move* move) +{ + Parent::processTick(move); + + // + if (mObjects.size() == 0) + return; + + if (mLastThink + 100 < mCurrTick) + { + mCurrTick = 0; + mLastThink = 0; + + for (S32 i = S32(mObjects.size() - 1); i >= 0; i--) + { + if (testObject(mObjects[i]) == false) + { + GameBase* remove = mObjects[i]; + mObjects.erase(i); + clearNotify(remove); + + if (!mLeaveCommand.isEmpty()) + { + String command = String("%obj = ") + remove->getIdString() + ";" + mLeaveCommand; + Con::evaluate(command.c_str()); + } + + //onLeaveCollisionTrigger_callback(this, remove); + } + } + + if (!mTickCommand.isEmpty()) + Con::evaluate(mTickCommand.c_str()); + + //if (mObjects.size() != 0) + // onTickCollisionTrigger_callback(this); + } + else + { + mCurrTick += TickMs; + } +} + +//-------------------------------------------------------------------------- + +U32 CollisionTrigger::packUpdate(NetConnection* con, U32 mask, BitStream* stream) +{ + U32 i; + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & TransformMask)) + { + stream->writeAffineTransform(mObjToWorld); + } + + // Write the polyhedron + if (stream->writeFlag(mask & PolyMask)) + { + stream->write(mCollisionTriggerPolyhedron.pointList.size()); + for (i = 0; i < mCollisionTriggerPolyhedron.pointList.size(); i++) + mathWrite(*stream, mCollisionTriggerPolyhedron.pointList[i]); + + stream->write(mCollisionTriggerPolyhedron.planeList.size()); + for (i = 0; i < mCollisionTriggerPolyhedron.planeList.size(); i++) + mathWrite(*stream, mCollisionTriggerPolyhedron.planeList[i]); + + stream->write(mCollisionTriggerPolyhedron.edgeList.size()); + for (i = 0; i < mCollisionTriggerPolyhedron.edgeList.size(); i++) { + const Polyhedron::Edge& rEdge = mCollisionTriggerPolyhedron.edgeList[i]; + + stream->write(rEdge.face[0]); + stream->write(rEdge.face[1]); + stream->write(rEdge.vertex[0]); + stream->write(rEdge.vertex[1]); + } + } + + if (stream->writeFlag(mask & EnterCmdMask)) + stream->writeLongString(CMD_SIZE - 1, mEnterCommand.c_str()); + if (stream->writeFlag(mask & LeaveCmdMask)) + stream->writeLongString(CMD_SIZE - 1, mLeaveCommand.c_str()); + if (stream->writeFlag(mask & TickCmdMask)) + stream->writeLongString(CMD_SIZE - 1, mTickCommand.c_str()); + + return retMask; +} + +void CollisionTrigger::unpackUpdate(NetConnection* con, BitStream* stream) +{ + Parent::unpackUpdate(con, stream); + + U32 i, size; + + // Transform + if (stream->readFlag()) + { + MatrixF temp; + stream->readAffineTransform(&temp); + setTransform(temp); + } + + // Read the polyhedron + if (stream->readFlag()) + { + Polyhedron tempPH; + stream->read(&size); + tempPH.pointList.setSize(size); + for (i = 0; i < tempPH.pointList.size(); i++) + mathRead(*stream, &tempPH.pointList[i]); + + stream->read(&size); + tempPH.planeList.setSize(size); + for (i = 0; i < tempPH.planeList.size(); i++) + mathRead(*stream, &tempPH.planeList[i]); + + stream->read(&size); + tempPH.edgeList.setSize(size); + for (i = 0; i < tempPH.edgeList.size(); i++) { + Polyhedron::Edge& rEdge = tempPH.edgeList[i]; + + stream->read(&rEdge.face[0]); + stream->read(&rEdge.face[1]); + stream->read(&rEdge.vertex[0]); + stream->read(&rEdge.vertex[1]); + } + setTriggerPolyhedron(tempPH); + } + + if (stream->readFlag()) + { + char buf[CMD_SIZE]; + stream->readLongString(CMD_SIZE - 1, buf); + mEnterCommand = buf; + } + if (stream->readFlag()) + { + char buf[CMD_SIZE]; + stream->readLongString(CMD_SIZE - 1, buf); + mLeaveCommand = buf; + } + if (stream->readFlag()) + { + char buf[CMD_SIZE]; + stream->readLongString(CMD_SIZE - 1, buf); + mTickCommand = buf; + } +} + +//ConsoleMethod( CollisionTrigger, getNumObjects, S32, 2, 2, "") +DefineEngineMethod(CollisionTrigger, getNumObjects, S32, (), , + "@brief Get the number of objects that are within the CollisionTrigger's bounds.\n\n" + "@see getObject()\n") +{ + return object->getNumCollisionTriggeringObjects(); +} + +//ConsoleMethod( CollisionTrigger, getObject, S32, 3, 3, "(int idx)") +DefineEngineMethod(CollisionTrigger, getObject, S32, (S32 index), , + "@brief Retrieve the requested object that is within the CollisionTrigger's bounds.\n\n" + "@param index Index of the object to get (range is 0 to getNumObjects()-1)\n" + "@returns The SimObjectID of the object, or -1 if the requested index is invalid.\n" + "@see getNumObjects()\n") +{ + if (index >= object->getNumCollisionTriggeringObjects() || index < 0) + return -1; + else + return object->getObject(U32(index))->getId(); +} diff --git a/Engine/source/T3D/components/Collision/collisionTrigger.h b/Engine/source/T3D/components/Collision/collisionTrigger.h new file mode 100644 index 0000000000..5673d61625 --- /dev/null +++ b/Engine/source/T3D/components/Collision/collisionTrigger.h @@ -0,0 +1,145 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _H_CollisionTrigger +#define _H_CollisionTrigger + +#ifndef _GAMEBASE_H_ +#include "T3D/gameBase/gameBase.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef _EARLYOUTPOLYLIST_H_ +#include "collision/earlyOutPolyList.h" +#endif +#ifndef _MPOLYHEDRON_H_ +#include "math/mPolyhedron.h" +#endif +#ifndef _TRIGGER_H_ +#include "T3D/trigger.h" +#endif + +class Convex; +class PhysicsBody; +class TriggerPolyhedronType; + +class CollisionTrigger : public GameBase +{ + typedef GameBase Parent; + + /// CollisionTrigger polyhedron with *outward* facing normals and CCW ordered + /// vertices. + Polyhedron mCollisionTriggerPolyhedron; + + EarlyOutPolyList mClippedList; + Vector mObjects; + + PhysicsBody *mPhysicsRep; + + U32 mLastThink; + U32 mCurrTick; + Convex *mConvexList; + + String mEnterCommand; + String mLeaveCommand; + String mTickCommand; + + enum CollisionTriggerUpdateBits + { + TransformMask = Parent::NextFreeMask << 0, + PolyMask = Parent::NextFreeMask << 1, + EnterCmdMask = Parent::NextFreeMask << 2, + LeaveCmdMask = Parent::NextFreeMask << 3, + TickCmdMask = Parent::NextFreeMask << 4, + NextFreeMask = Parent::NextFreeMask << 5, + }; + + static const U32 CMD_SIZE = 1024; + +protected: + + static bool smRenderCollisionTriggers; + bool testObject(GameBase* enter); + void processTick(const Move *move); + + void buildConvex(const Box3F& box, Convex* convex); + + static bool setEnterCmd(void *object, const char *index, const char *data); + static bool setLeaveCmd(void *object, const char *index, const char *data); + static bool setTickCmd(void *object, const char *index, const char *data); + +public: + CollisionTrigger(); + ~CollisionTrigger(); + + // SimObject + DECLARE_CONOBJECT(CollisionTrigger); + + DECLARE_CALLBACK(void, onAdd, (U32 objectId)); + DECLARE_CALLBACK(void, onRemove, (U32 objectId)); + + static void consoleInit(); + static void initPersistFields(); + bool onAdd(); + void onRemove(); + void onDeleteNotify(SimObject*); + void inspectPostApply(); + + // NetObject + U32 packUpdate(NetConnection *conn, U32 mask, BitStream* stream); + void unpackUpdate(NetConnection *conn, BitStream* stream); + + // SceneObject + void setTransform(const MatrixF &mat); + void prepRenderImage(SceneRenderState* state); + + // GameBase + bool onNewDataBlock(GameBaseData *dptr, bool reload); + + // CollisionTrigger + void setTriggerPolyhedron(const Polyhedron&); + + void potentialEnterObject(GameBase*); + U32 getNumCollisionTriggeringObjects() const; + GameBase* getObject(const U32); + const Vector& getObjects() const { return mObjects; } + + void renderObject(ObjectRenderInst *ri, SceneRenderState *state, BaseMatInstance *overrideMat); + + bool castRay(const Point3F &start, const Point3F &end, RayInfo* info); +}; + +inline U32 CollisionTrigger::getNumCollisionTriggeringObjects() const +{ + return mObjects.size(); +} + +inline GameBase* CollisionTrigger::getObject(const U32 index) +{ + AssertFatal(index < getNumCollisionTriggeringObjects(), "Error, out of range object index"); + + return mObjects[index]; +} + +#endif // _H_CollisionTrigger + diff --git a/Engine/source/T3D/components/Component.cpp b/Engine/source/T3D/components/Component.cpp new file mode 100644 index 0000000000..0c4475b793 --- /dev/null +++ b/Engine/source/T3D/components/Component.cpp @@ -0,0 +1,638 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "console/simBase.h" +#include "console/consoleTypes.h" +#include "T3D/Components/Component.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "console/consoleInternal.h" + +#define DECLARE_NATIVE_COMPONENT( ComponentType ) \ + Component* staticComponentTemplate = new ComponentType; \ + Sim::gNativeComponentSet->addObject(staticComponentTemplate); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +Component::Component() +{ + mFriendlyName = StringTable->lookup(""); + mFromResource = StringTable->lookup(""); + mComponentType = StringTable->lookup(""); + mComponentGroup = StringTable->lookup(""); + mNetworkType = StringTable->lookup(""); + mTemplateName = StringTable->lookup(""); + //mDependency = StringTable->lookup(""); + + mNetworked = false; + + + // [tom, 1/12/2007] We manage the memory for the description since it + // could be loaded from a file and thus massive. This is accomplished with + // protected fields, but since they still call Con::getData() the field + // needs to always be valid. This is pretty lame. + mDescription = new char[1]; + ((char *)mDescription)[0] = 0; + + mOwner = NULL; + + mCanSaveFieldDictionary = false; + + mNetFlags.set(Ghostable); +} + +Component::~Component() +{ + for (S32 i = 0; i < mFields.size(); ++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(Component); + +////////////////////////////////////////////////////////////////////////// + +void Component::initPersistFields() +{ + addGroup("Component"); + addField("componentType", TypeCaseString, Offset(mComponentType, Component), "The type of behavior.", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addField("networkType", TypeCaseString, Offset(mNetworkType, Component), "The type of behavior.", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addField("friendlyName", TypeCaseString, Offset(mFriendlyName, Component), "Human friendly name of this behavior", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addProtectedField("description", TypeCaseString, Offset(mDescription, Component), &setDescription, &getDescription, + "The description of this behavior which can be set to a \"string\" or a fileName\n", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + + addField("networked", TypeBool, Offset(mNetworked, Component), "Is this behavior ghosted to clients?", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + + addProtectedField("Owner", TypeSimObjectPtr, Offset(mOwner, Component), &setOwner, &defaultProtectedGetFn, "", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + + //addField("hidden", TypeBool, Offset(mHidden, Component), "Flags if this behavior is shown in the editor or not", AbstractClassRep::FieldFlags::FIELD_HideInInspectors); + addProtectedField("enabled", TypeBool, Offset(mEnabled, Component), &_setEnabled, &defaultProtectedGetFn, ""); + endGroup("Component"); + + Parent::initPersistFields(); + + //clear out irrelevent fields + removeField("name"); + //removeField("internalName"); + removeField("parentGroup"); + //removeField("class"); + removeField("superClass"); + removeField("hidden"); + removeField("canSave"); + removeField("canSaveDynamicFields"); + removeField("persistentId"); +} + +bool Component::_setEnabled(void *object, const char *index, const char *data) +{ + Component *c = static_cast(object); + + c->mEnabled = dAtob(data); + c->setMaskBits(EnableMask); + + return true; +} + +////////////////////////////////////////////////////////////////////////// + +bool Component::setDescription(void *object, const char *index, const char *data) +{ + Component *bT = static_cast(object); + SAFE_DELETE_ARRAY(bT->mDescription); + bT->mDescription = bT->getDescriptionText(data); + + // We return false since we don't want the console to mess with the data + return false; +} + +const char * Component::getDescription(void* obj, const char* data) +{ + Component *object = static_cast(obj); + + return object->mDescription ? object->mDescription : ""; +} + +////////////////////////////////////////////////////////////////////////// +bool Component::onAdd() +{ + if (!Parent::onAdd()) + return false; + + setMaskBits(UpdateMask); + + return true; +} + +void Component::onRemove() +{ + onDataSet.removeAll(); + + if (mOwner) + { + //notify our removal to the owner, so we have no loose ends + mOwner->removeComponent(this, false); + } + + Parent::onRemove(); +} + +void Component::onComponentAdd() +{ + if (isServerObject()) + { + if (isMethod("onAdd")) + Con::executef(this, "onAdd"); + } + + mEnabled = true; +} + +void Component::onComponentRemove() +{ + mEnabled = false; + + if (isServerObject()) + { + if (isMethod("onRemove")) + Con::executef(this, "onRemove"); + } + + if (mOwner) + { + mOwner->onComponentAdded.remove(this, &Component::componentAddedToOwner); + mOwner->onComponentRemoved.remove(this, &Component::componentRemovedFromOwner); + mOwner->onTransformSet.remove(this, &Component::ownerTransformSet); + } + + mOwner = NULL; + setDataField("owner", NULL, ""); +} + +void Component::setOwner(Entity* owner) +{ + //first, catch if we have an existing owner, and we're changing from it + if (mOwner && mOwner != owner) + { + mOwner->onComponentAdded.remove(this, &Component::componentAddedToOwner); + mOwner->onComponentRemoved.remove(this, &Component::componentRemovedFromOwner); + mOwner->onTransformSet.remove(this, &Component::ownerTransformSet); + + mOwner->removeComponent(this, false); + } + + mOwner = owner; + + if (mOwner != NULL) + { + mOwner->onComponentAdded.notify(this, &Component::componentAddedToOwner); + mOwner->onComponentRemoved.notify(this, &Component::componentRemovedFromOwner); + mOwner->onTransformSet.notify(this, &Component::ownerTransformSet); + } + + if (isServerObject()) + setMaskBits(OwnerMask); +} + +void Component::componentAddedToOwner(Component *comp) +{ + return; +} + +void Component::componentRemovedFromOwner(Component *comp) +{ + return; +} + +void Component::ownerTransformSet(MatrixF *mat) +{ + return; +} + +U32 Component::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (mask & OwnerMask) + { + if (mOwner != NULL) + { + S32 ghostIndex = con->getGhostIndex(mOwner); + + if (ghostIndex == -1) + { + stream->writeFlag(false); + retMask |= OwnerMask; + } + else + { + stream->writeFlag(true); + stream->writeFlag(true); + stream->writeInt(ghostIndex, NetConnection::GhostIdBitSize); + } + } + else + { + stream->writeFlag(true); + stream->writeFlag(false); + } + } + else + stream->writeFlag(false); + + if (stream->writeFlag(mask & EnableMask)) + { + stream->writeFlag(mEnabled); + } + + return retMask; +} + +void Component::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) + { + if (stream->readFlag()) + { + //we have an owner object, so fetch it + S32 gIndex = stream->readInt(NetConnection::GhostIdBitSize); + + Entity *e = dynamic_cast(con->resolveGhost(gIndex)); + if (e) + e->addComponent(this); + } + else + { + //it's being nulled out + setOwner(NULL); + } + } + + if (stream->readFlag()) + { + mEnabled = stream->readFlag(); + } +} + +void Component::packToStream(Stream &stream, U32 tabStop, S32 behaviorID, U32 flags /* = 0 */) +{ + char buffer[1024]; + + writeFields(stream, tabStop); + + // Write out the fields which the behavior template knows about + for (int i = 0; i < getComponentFieldCount(); i++) + { + ComponentField *field = getComponentField(i); + const char *objFieldValue = getDataField(field->mFieldName, NULL); + + // If the field holds the same value as the template's default value than it + // will get initialized by the template, and so it won't be included just + // to try to keep the object files looking as non-horrible as possible. + if (dStrcmp(field->mDefaultValue, objFieldValue) != 0) + { + dSprintf(buffer, sizeof(buffer), "%s = \"%s\";\n", field->mFieldName, (dStrlen(objFieldValue) > 0 ? objFieldValue : "0")); + + stream.writeTabs(tabStop); + stream.write(dStrlen(buffer), buffer); + } + } +} + +void Component::processTick() +{ + if (isServerObject() && mEnabled) + { + if (mOwner != NULL && isMethod("Update")) + Con::executef(this, "Update"); + } +} + +void Component::setDataField(StringTableEntry slotName, const char *array, const char *value) +{ + Parent::setDataField(slotName, array, value); + + onDataSet.trigger(this, slotName, value); +} + + +//catch any behavior field updates +void Component::onStaticModified(const char* slotName, const char* newValue) +{ + Parent::onStaticModified(slotName, newValue); + + //If we don't have an owner yet, then this is probably the initial setup, so we don't need the console callbacks yet. + if (!mOwner) + return; + + onDataSet.trigger(this, slotName, newValue); + + checkComponentFieldModified(slotName, newValue); +} + +void Component::onDynamicModified(const char* slotName, const char* newValue) +{ + Parent::onDynamicModified(slotName, newValue); + + //If we don't have an owner yet, then this is probably the initial setup, so we don't need the console callbacks yet. + if (!mOwner) + return; + + checkComponentFieldModified(slotName, newValue); +} + +void Component::checkComponentFieldModified(const char* slotName, const char* newValue) +{ + StringTableEntry slotNameEntry = StringTable->insert(slotName); + + //find if it's a behavior field + for (int i = 0; i < mFields.size(); i++) + { + ComponentField *field = getComponentField(i); + if (field->mFieldName == slotNameEntry) + { + //we have a match, do the script callback that we updated a field + if (isMethod("onInspectorUpdate")) + Con::executef(this, "onInspectorUpdate", slotName); + + return; + } + } +} +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +void Component::addComponentField(const char *fieldName, const char *desc, const char *type, const char *defaultValue /* = NULL */, const char *userData /* = NULL */, /*const char* dependency /* = NULL *//*,*/ bool hidden /* = false */) +{ + StringTableEntry stFieldName = StringTable->insert(fieldName); + + for (S32 i = 0; i < mFields.size(); ++i) + { + if (mFields[i].mFieldName == stFieldName) + return; + } + + ComponentField field; + field.mFieldName = stFieldName; + + //find the field type + S32 fieldTypeMask = -1; + StringTableEntry fieldType = StringTable->insert(type); + + if (fieldType == StringTable->insert("TypeS32")) + fieldTypeMask = TypeS32; + else if (fieldType == StringTable->insert("TypeF32")) + fieldTypeMask = TypeF32; + else if (fieldType == StringTable->insert("TypePoint3F")) + fieldTypeMask = TypePoint3F; + else if (fieldType == StringTable->insert("TypeMaterialName")) + fieldTypeMask = TypeMaterialName; + else if (fieldType == StringTable->insert("TypeImageFilename")) + fieldTypeMask = TypeImageFilename; + else if (fieldType == StringTable->insert("TypeShapeFilename")) + fieldTypeMask = TypeShapeFilename; + else if (fieldType == StringTable->insert("TypeBool")) + fieldTypeMask = TypeBool; + else + fieldTypeMask = TypeString; + + field.mFieldType = fieldTypeMask; + + field.mUserData = StringTable->insert(userData ? userData : ""); + field.mDefaultValue = StringTable->insert(defaultValue ? defaultValue : ""); + field.mFieldDescription = getDescriptionText(desc); + + field.mGroup = mComponentGroup; + + field.mHidden = hidden; + + mFields.push_back(field); + + //Before we set this, we need to do a test to see if this field was already set, like from the mission file or a taml file + const char* curFieldData = getDataField(field.mFieldName, NULL); + + if (dStrIsEmpty(curFieldData)) + setDataField(field.mFieldName, NULL, field.mDefaultValue); +} + +ComponentField* Component::getComponentField(const char *fieldName) +{ + StringTableEntry stFieldName = StringTable->insert(fieldName); + + for (S32 i = 0; i < mFields.size(); ++i) + { + if (mFields[i].mFieldName == stFieldName) + return &mFields[i]; + } + + return NULL; +} + +////////////////////////////////////////////////////////////////////////// + +const char * Component::getDescriptionText(const char *desc) +{ + if (desc == NULL) + return NULL; + + char *newDesc; + + // [tom, 1/12/2007] If it isn't a file, just do it the easy way + if (!Platform::isFile(desc)) + { + newDesc = new char[dStrlen(desc) + 1]; + dStrcpy(newDesc, desc); + + return newDesc; + } + + FileStream str; + str.open(desc, Torque::FS::File::Read); + + Stream *stream = &str; + if (stream == NULL){ + str.close(); + return NULL; + } + + U32 size = stream->getStreamSize(); + if (size > 0) + { + newDesc = new char[size + 1]; + if (stream->read(size, (void *)newDesc)) + newDesc[size] = 0; + else + { + SAFE_DELETE_ARRAY(newDesc); + } + } + + str.close(); + delete stream; + + return newDesc; +} +////////////////////////////////////////////////////////////////////////// +void Component::beginFieldGroup(const char* groupName) +{ + if (dStrcmp(mComponentGroup, "")) + { + Con::errorf("Component: attempting to begin new field group with a group already begun!"); + return; + } + + mComponentGroup = StringTable->insert(groupName); +} + +void Component::endFieldGroup() +{ + mComponentGroup = StringTable->insert(""); +} + +void Component::addDependency(StringTableEntry name) +{ + mDependencies.push_back_unique(name); +} + +////////////////////////////////////////////////////////////////////////// +// Console Methods +////////////////////////////////////////////////////////////////////////// +ConsoleMethod(Component, beginGroup, void, 3, 3, "(groupName)\n" + "Starts the grouping for following fields being added to be grouped into\n" + "@param groupName The name of this group\n" + "@param desc The Description of this field\n" + "@param type The DataType for this field (default, int, float, Point2F, bool, enum, Object, keybind, color)\n" + "@param defaultValue The Default value for this field\n" + "@param userData An extra data field that can be used for custom data on a per-field basis
Usage for default types
" + "-enum: a TAB separated list of possible values
" + "-object: the T2D object type that are valid choices for the field. The object types observe inheritance, so if you have a t2dSceneObject field you will be able to choose t2dStaticSrpites, t2dAnimatedSprites, etc.\n" + "@return Nothing\n") +{ + object->beginFieldGroup(argv[2]); +} + +ConsoleMethod(Component, endGroup, void, 2, 2, "()\n" + "Ends the grouping for prior fields being added to be grouped into\n" + "@param groupName The name of this group\n" + "@param desc The Description of this field\n" + "@param type The DataType for this field (default, int, float, Point2F, bool, enum, Object, keybind, color)\n" + "@param defaultValue The Default value for this field\n" + "@param userData An extra data field that can be used for custom data on a per-field basis
Usage for default types
" + "-enum: a TAB separated list of possible values
" + "-object: the T2D object type that are valid choices for the field. The object types observe inheritance, so if you have a t2dSceneObject field you will be able to choose t2dStaticSrpites, t2dAnimatedSprites, etc.\n" + "@return Nothing\n") +{ + object->endFieldGroup(); +} + +DefineConsoleMethod(Component, addComponentField, void, (String fieldName, String fieldDesc, String fieldType, String defValue, String userData, bool hidden), + ("", "", "", "", "", false), + "Get the number of static fields on the object.\n" + "@return The number of static fields defined on the object.") +{ + object->addComponentField(fieldName, fieldDesc, fieldType, defValue, userData, hidden); +} + +ConsoleMethod(Component, getComponentFieldCount, S32, 2, 2, "() - Get the number of ComponentField's on this object\n" + "@return Returns the number of BehaviorFields as a nonnegative integer\n") +{ + return object->getComponentFieldCount(); +} + +// [tom, 1/12/2007] Field accessors split into multiple methods to allow space +// for long descriptions and type data. + +ConsoleMethod(Component, getComponentField, const char *, 3, 3, "(int index) - Gets a Tab-Delimited list of information about a ComponentField specified by Index\n" + "@param index The index of the behavior\n" + "@return FieldName, FieldType and FieldDefaultValue, each separated by a TAB character.\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + char *buf = Con::getReturnBuffer(1024); + dSprintf(buf, 1024, "%s\t%s\t%s\t%s", field->mFieldName, field->mFieldType, field->mDefaultValue, field->mGroup); + + return buf; +} + +ConsoleMethod(Component, setComponentield, const char *, 3, 3, "(int index) - Gets a Tab-Delimited list of information about a ComponentField specified by Index\n" + "@param index The index of the behavior\n" + "@return FieldName, FieldType and FieldDefaultValue, each separated by a TAB character.\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + char *buf = Con::getReturnBuffer(1024); + dSprintf(buf, 1024, "%s\t%s\t%s", field->mFieldName, field->mFieldType, field->mDefaultValue); + + return buf; +} + +ConsoleMethod(Component, getBehaviorFieldUserData, const char *, 3, 3, "(int index) - Gets the UserData associated with a field by index in the field list\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the user data of this field\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + return field->mUserData; +} + +ConsoleMethod(Component, getComponentFieldDescription, const char *, 3, 3, "(int index) - Gets a field description by index\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the description of this field\n") +{ + ComponentField *field = object->getComponentField(dAtoi(argv[2])); + if (field == NULL) + return ""; + + return field->mFieldDescription ? field->mFieldDescription : ""; +} + +ConsoleMethod(Component, addDependency, void, 3, 3, "(string behaviorName) - Gets a field description by index\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the description of this field\n") +{ + object->addDependency(argv[2]); +} + +ConsoleMethod(Component, setDirty, void, 2, 2, "() - Gets a field description by index\n" + "@param index The index of the behavior\n" + "@return Returns a string representing the description of this field\n") +{ + object->setMaskBits(Component::OwnerMask); +} diff --git a/Engine/source/T3D/components/Component.h b/Engine/source/T3D/components/Component.h new file mode 100644 index 0000000000..98eea53bc2 --- /dev/null +++ b/Engine/source/T3D/components/Component.h @@ -0,0 +1,197 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COMPONENT_H +#define COMPONENT_H + +#ifndef _NETOBJECT_H_ +#include "sim/netObject.h" +#endif +#ifndef ENTITY_H +#include "T3D/Entity.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/Components/coreInterfaces.h" +#endif + +class Entity; + +struct ComponentField +{ + StringTableEntry mFieldName; + StringTableEntry mFieldDescription; + + S32 mFieldType; + StringTableEntry mUserData; + + StringTableEntry mDefaultValue; + + StringTableEntry mGroup; + + StringTableEntry mDependency; + + bool mHidden; +}; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class Component : public NetObject, public UpdateInterface +{ + typedef NetObject Parent; + +protected: + StringTableEntry mFriendlyName; + StringTableEntry mDescription; + + StringTableEntry mFromResource; + StringTableEntry mComponentGroup; + StringTableEntry mComponentType; + StringTableEntry mNetworkType; + StringTableEntry mTemplateName; + + Vector mDependencies; + Vector mFields; + + bool mNetworked; + + U32 componentIdx; + + Entity* mOwner; + bool mHidden; + bool mEnabled; + +public: + Component(); + virtual ~Component(); + DECLARE_CONOBJECT(Component); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void packToStream(Stream &stream, U32 tabStop, S32 behaviorID, U32 flags = 0); + + //This is called when we are added to an entity + virtual void onComponentAdd(); + //This is called when we are removed from an entity + virtual void onComponentRemove(); + + //This is called when a different component is added to our owner entity + virtual void componentAddedToOwner(Component *comp); + //This is called when a different component is removed from our owner entity + virtual void componentRemovedFromOwner(Component *comp); + + virtual void ownerTransformSet(MatrixF *mat); + + void setOwner(Entity* pOwner); + inline Entity *getOwner() { return mOwner ? mOwner : NULL; } + static bool setOwner(void *object, const char *index, const char *data) { return true; } + + bool isEnabled() { return mEnabled; } + void setEnabled(bool toggle) { mEnabled = toggle; setMaskBits(EnableMask); } + + bool isActive() { return mEnabled && mOwner != NULL; } + + static bool _setEnabled(void *object, const char *index, const char *data); + + virtual void processTick(); + virtual void interpolateTick(F32 dt){} + virtual void advanceTime(F32 dt){} + + /// @name Adding Named Fields + /// @{ + + /// Adds a named field to a Component that can specify a description, data type, default value and userData + /// + /// @param fieldName The name of the Field + /// @param desc The Description of the Field + /// @param type The Type of field that this is, example 'Text' or 'Bool' + /// @param defaultValue The Default value of this field + /// @param userData An extra optional field that can be used for user data + void addComponentField(const char *fieldName, const char *desc, const char *type, const char *defaultValue = NULL, const char *userData = NULL, bool hidden = false); + + /// Returns the number of ComponentField's on this template + inline S32 getComponentFieldCount() { return mFields.size(); }; + + /// Gets a ComponentField by its index in the mFields vector + /// @param idx The index of the field in the mField vector + inline ComponentField *getComponentField(S32 idx) + { + if (idx < 0 || idx >= mFields.size()) + return NULL; + + return &mFields[idx]; + } + + ComponentField *getComponentField(const char* fieldName); + + const char* getComponentType() { return mComponentType; } + + const char *getDescriptionText(const char *desc); + + const char *getName() { return mTemplateName; } + + const char *getFriendlyName() { return mFriendlyName; } + + bool isNetworked() { return mNetworked; } + + void beginFieldGroup(const char* groupName); + void endFieldGroup(); + + void addDependency(StringTableEntry name); + /// @} + + /// @name Description + /// @{ + static bool setDescription(void *object, const char *index, const char *data); + static const char* getDescription(void* obj, const char* data); + + /// @Primary usage functions + /// @These are used by the various engine-based behaviors to integrate with the component classes + enum NetMaskBits + { + InitialUpdateMask = BIT(0), + OwnerMask = BIT(1), + UpdateMask = BIT(2), + EnableMask = BIT(3), + NextFreeMask = BIT(4) + }; + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + /// @} + + Signal< void(SimObject*, String, String) > onDataSet; + virtual void setDataField(StringTableEntry slotName, const char *array, const char *value); + + virtual void onStaticModified(const char* slotName, const char* newValue); ///< Called when a static field is modified. + virtual void onDynamicModified(const char* slotName, const char*newValue = NULL); ///< Called when a dynamic field is modified. + + /// This is what we actually use to check if the modified field is one of our behavior fields. If it is, we update and make the correct callbacks + void checkComponentFieldModified(const char* slotName, const char* newValue); + + virtual void checkDependencies(){} +}; + +#endif // COMPONENT_H diff --git a/Engine/source/T3D/components/Game/StateMachineComponent.cpp b/Engine/source/T3D/components/Game/StateMachineComponent.cpp new file mode 100644 index 0000000000..68058af59e --- /dev/null +++ b/Engine/source/T3D/components/Game/StateMachineComponent.cpp @@ -0,0 +1,215 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/game/StateMachineComponent.h" + +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" + +IMPLEMENT_CALLBACK( StateMachineComponent, onStateChange, void, (), (), + "@brief Called when we collide with another object.\n\n" + "@param obj The ShapeBase object\n" + "@param collObj The object we collided with\n" + "@param vec Collision impact vector\n" + "@param len Length of the impact vector\n" ); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +StateMachineComponent::StateMachineComponent() : Component() +{ + mFriendlyName = "State Machine"; + mComponentType = "Game"; + + mDescription = getDescriptionText("A generic state machine."); + + mStateMachineFile = ""; + + //doesn't need to be networked + mNetworked = false; + mNetFlags.clear(); +} + +StateMachineComponent::~StateMachineComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(StateMachineComponent); + +bool StateMachineComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + // Register for the resource change signal. + ResourceManager::get().getChangedSignal().notify(this, &StateMachineComponent::_onResourceChanged); + + mStateMachine.onStateChanged.notify(this, &StateMachineComponent::onStateChanged); + + return true; +} + +void StateMachineComponent::onRemove() +{ + Parent::onRemove(); +} + +U32 StateMachineComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + return retMask; +} + +void StateMachineComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void StateMachineComponent::onComponentAdd() +{ + Parent::onComponentAdd(); +} + +void StateMachineComponent::onComponentRemove() +{ + Parent::onComponentRemove(); +} + +void StateMachineComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addProtectedField("stateMachineFile", TypeFilename, Offset(mStateMachineFile, StateMachineComponent), + &_setSMFile, &defaultProtectedGetFn, "The sim time of when we started this state"); +} + +bool StateMachineComponent::_setSMFile(void *object, const char *index, const char *data) +{ + StateMachineComponent* smComp = static_cast(object); + if (smComp) + { + smComp->setStateMachineFile(data); + smComp->loadStateMachineFile(); + + return true; + } + + return false; +} + +void StateMachineComponent::_onResourceChanged(const Torque::Path &path) +{ + if (path != Torque::Path(mStateMachineFile)) + return; + + loadStateMachineFile(); +} + +void StateMachineComponent::loadStateMachineFile() +{ + if (!dStrIsEmpty(mStateMachineFile)) + { + mStateMachine.mStateMachineFile = mStateMachineFile; + mStateMachine.loadStateMachineFile(); + + //now that it's loaded, we need to parse the SM's fields and set them as script vars on ourselves + S32 smFieldCount = mStateMachine.getFieldsCount(); + + for (U32 i = 0; i < smFieldCount; i++) + { + StateMachine::StateField field = mStateMachine.getField(i); + + char buffer[128]; + + if (field.fieldType == StateMachine::StateField::BooleanType) + { + dSprintf(buffer, sizeof(buffer), "%b", field.triggerBoolVal); + setDataField(field.name, NULL, buffer); + } + else if (field.fieldType == StateMachine::StateField::NumberType) + { + dSprintf(buffer, sizeof(buffer), "%g", field.triggerNumVal); + setDataField(field.name, NULL, buffer); + } + else if (field.fieldType == StateMachine::StateField::StringType) + { + setDataField(field.name, NULL, field.triggerStringVal); + } + } + } +} + +void StateMachineComponent::processTick() +{ + if (!isServerObject() || !isActive()) + return; + + mStateMachine.update(); +} + +void StateMachineComponent::onDynamicModified( const char* slotName, const char* newValue ) +{ + Parent::onDynamicModified(slotName, newValue); + + StringTableEntry fieldName = StringTable->insert(slotName); + mStateMachine.checkTransitions(fieldName, newValue); +} + +void StateMachineComponent::onStaticModified( const char* slotName, const char* newValue ) +{ + Parent::onStaticModified(slotName, newValue); + + StringTableEntry fieldName = StringTable->insert(slotName); + mStateMachine.checkTransitions(fieldName, newValue); +} + +void StateMachineComponent::onStateChanged(StateMachine* sm, S32 stateIdx) +{ + //do a script callback, if we have one + //check if we have a function for that, and then also check if our owner does + StringTableEntry callbackName = mStateMachine.getCurrentState().callbackName; + + if (isMethod(callbackName)) + Con::executef(this, callbackName); + + if (mOwner->isMethod(callbackName)) + Con::executef(mOwner, callbackName); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Game/StateMachineComponent.h b/Engine/source/T3D/components/Game/StateMachineComponent.h new file mode 100644 index 0000000000..00fc4c27ec --- /dev/null +++ b/Engine/source/T3D/components/Game/StateMachineComponent.h @@ -0,0 +1,81 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef STATE_MACHINE_COMPONENT_H +#define STATE_MACHINE_COMPONENT_H + +#ifndef COMPONENT_H + #include "T3D/Components/Component.h" +#endif +#ifndef STATE_MACHINE_H +#include "T3D/components/Game/stateMachine.h" +#endif + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class StateMachineComponent : public Component +{ + typedef Component Parent; + +public: + StateMachine mStateMachine; + +protected: + StringTableEntry mStateMachineFile; + +public: + StateMachineComponent(); + virtual ~StateMachineComponent(); + DECLARE_CONOBJECT(StateMachineComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + void _onResourceChanged(const Torque::Path &path); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void processTick(); + + virtual void onDynamicModified(const char* slotName, const char* newValue); + virtual void onStaticModified(const char* slotName, const char* newValue); + + virtual void loadStateMachineFile(); + + void setStateMachineFile(const char* fileName) { mStateMachineFile = StringTable->insert(fileName); } + + static bool _setSMFile(void *object, const char *index, const char *data); + + void onStateChanged(StateMachine* sm, S32 stateIdx); + + //Callbacks + DECLARE_CALLBACK(void, onStateChange, ()); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/Game/stateMachine.cpp b/Engine/source/T3D/components/Game/stateMachine.cpp new file mode 100644 index 0000000000..867e9cb19d --- /dev/null +++ b/Engine/source/T3D/components/Game/stateMachine.cpp @@ -0,0 +1,434 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/Game/stateMachine.h" + +StateMachine::StateMachine() +{ + mStateStartTime = -1; + mStateTime = 0; + + mStartingState = ""; + + mCurCreateState = NULL; +} + +StateMachine::~StateMachine() +{ +} + +void StateMachine::loadStateMachineFile() +{ + if (!mXMLReader) + { + SimXMLDocument *xmlrdr = new SimXMLDocument(); + xmlrdr->registerObject(); + + mXMLReader = xmlrdr; + } + + bool hasStartState = false; + + if (!dStrIsEmpty(mStateMachineFile)) + { + //use our xml reader to parse the file! + SimXMLDocument *reader = mXMLReader.getObject(); + if (!reader->loadFile(mStateMachineFile)) + Con::errorf("Could not load state machine file: &s", mStateMachineFile); + + if (!reader->pushFirstChildElement("StateMachine")) + return; + + //find our starting state + if (reader->pushFirstChildElement("StartingState")) + { + mStartingState = reader->getData(); + reader->popElement(); + hasStartState = true; + } + + readStates(); + } + + if (hasStartState) + mCurrentState = getStateByName(mStartingState); + + mStateStartTime = -1; + mStateTime = 0; +} + +void StateMachine::readStates() +{ + SimXMLDocument *reader = mXMLReader.getObject(); + + //iterate through our states now! + if (reader->pushFirstChildElement("State")) + { + //get our first state + State firstState; + + readStateName(&firstState, reader); + readStateScriptFunction(&firstState, reader); + + readTransitions(firstState); + + mStates.push_back(firstState); + + //now, iterate the siblings + while (reader->nextSiblingElement("State")) + { + State newState; + readStateName(&newState, reader); + readStateScriptFunction(&newState, reader); + + readTransitions(newState); + + mStates.push_back(newState); + } + } +} + +void StateMachine::readTransitions(State ¤tState) +{ + SimXMLDocument *reader = mXMLReader.getObject(); + + //iterate through our states now! + if (reader->pushFirstChildElement("Transition")) + { + //get our first state + StateTransition firstTransition; + + readTransitonTarget(&firstTransition, reader); + + readConditions(firstTransition); + + currentState.mTransitions.push_back(firstTransition); + + //now, iterate the siblings + while (reader->nextSiblingElement("Transition")) + { + StateTransition newTransition; + readTransitonTarget(&newTransition, reader); + + readConditions(newTransition); + + currentState.mTransitions.push_back(newTransition); + } + + reader->popElement(); + } +} + +void StateMachine::readConditions(StateTransition ¤tTransition) +{ + SimXMLDocument *reader = mXMLReader.getObject(); + + //iterate through our states now! + if (reader->pushFirstChildElement("Rule")) + { + //get our first state + StateTransition::Condition firstCondition; + StateField firstField; + bool fieldRead = false; + + readFieldName(&firstField, reader); + firstCondition.field = firstField; + + readFieldComparitor(&firstCondition, reader); + + readFieldValue(&firstCondition.field, reader); + + currentTransition.mTransitionRules.push_back(firstCondition); + + //now, iterate the siblings + while (reader->nextSiblingElement("Transition")) + { + StateTransition::Condition newCondition; + StateField newField; + + readFieldName(&newField, reader); + newCondition.field = newField; + + readFieldComparitor(&newCondition, reader); + + readFieldValue(&newCondition.field, reader); + + currentTransition.mTransitionRules.push_back(newCondition); + } + + reader->popElement(); + } +} + +S32 StateMachine::parseComparitor(const char* comparitorName) +{ + S32 targetType = -1; + + if (!dStrcmp("GreaterThan", comparitorName)) + targetType = StateMachine::StateTransition::Condition::GeaterThan; + else if (!dStrcmp("GreaterOrEqual", comparitorName)) + targetType = StateMachine::StateTransition::Condition::GreaterOrEqual; + else if (!dStrcmp("LessThan", comparitorName)) + targetType = StateMachine::StateTransition::Condition::LessThan; + else if (!dStrcmp("LessOrEqual", comparitorName)) + targetType = StateMachine::StateTransition::Condition::LessOrEqual; + else if (!dStrcmp("Equals", comparitorName)) + targetType = StateMachine::StateTransition::Condition::Equals; + else if (!dStrcmp("True", comparitorName)) + targetType = StateMachine::StateTransition::Condition::True; + else if (!dStrcmp("False", comparitorName)) + targetType = StateMachine::StateTransition::Condition::False; + else if (!dStrcmp("Negative", comparitorName)) + targetType = StateMachine::StateTransition::Condition::Negative; + else if (!dStrcmp("Positive", comparitorName)) + targetType = StateMachine::StateTransition::Condition::Positive; + else if (!dStrcmp("DoesNotEqual", comparitorName)) + targetType = StateMachine::StateTransition::Condition::DoesNotEqual; + + return targetType; +} + +void StateMachine::update() +{ + //we always check if there's a timout transition, as that's the most generic transition possible. + F32 curTime = Sim::getCurrentTime(); + + if (mStateStartTime == -1) + mStateStartTime = curTime; + + mStateTime = curTime - mStateStartTime; + + char buffer[64]; + dSprintf(buffer, sizeof(buffer), "%g", mStateTime); + + checkTransitions("stateTime", buffer); +} + +void StateMachine::checkTransitions(const char* slotName, const char* newValue) +{ + //because we use our current state's fields as dynamic fields on the instance + //we'll want to catch any fields being set so we can treat changes as transition triggers if + //any of the transitions on this state call for it + + //One example would be in order to implement burst fire on a weapon state machine. + //The behavior instance has a dynamic variable set up like: GunStateMachine.burstShotCount = 0; + + //We also have a transition in our fire state, as: GunStateMachine.addTransition("FireState", "burstShotCount", "DoneShooting", 3); + //What that does is for our fire state, we check the dynamicField burstShotCount if it's equal or greater than 3. If it is, we perform the transition. + + //As state fields are handled as dynamicFields for the instance, regular dynamicFields are processed as well as state fields. So we can use the regular + //dynamic fields for our transitions, to act as 'global' variables that are state-agnostic. Alternately, we can use state-specific fields, such as a transition + //like this: + //GunStateMachine.addTransition("IdleState", "Fidget", "Timeout", ">=", 5000); + + //That uses the the timeout field, which is reset each time the state changes, and so state-specific, to see if it's been 5 seconds. If it has been, we transition + //to our fidget state + + //so, lets check our current transitions + //now that we have the type, check our transitions! + for (U32 t = 0; t < mCurrentState.mTransitions.size(); t++) + { + //if (!dStrcmp(mCurrentState.mTransitions[t]., slotName)) + { + //found a transition looking for this variable, so do work + //first, figure out what data type thie field is + //S32 type = getVariableType(newValue); + + bool fail = false; + bool match = false; + S32 ruleCount = mCurrentState.mTransitions[t].mTransitionRules.size(); + + for (U32 r = 0; r < ruleCount; r++) + { + const char* fieldName = mCurrentState.mTransitions[t].mTransitionRules[r].field.name; + if (!dStrcmp(fieldName, slotName)) + { + match = true; + //now, check the value with the comparitor and see if we do the transition. + if (!passComparitorCheck(newValue, mCurrentState.mTransitions[t].mTransitionRules[r])) + { + fail = true; + break; + } + } + } + + //If we do have a transition rule for this field, and we didn't fail on the condition, go ahead and switch states + if (match && !fail) + { + setState(mCurrentState.mTransitions[t].mStateTarget); + + return; + } + } + } +} + +bool StateMachine::passComparitorCheck(const char* var, StateTransition::Condition transitionRule) +{ + F32 num = dAtof(var); + switch (transitionRule.field.fieldType) + { + case StateField::Type::VectorType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::Equals: + case StateTransition::Condition::GeaterThan: + case StateTransition::Condition::GreaterOrEqual: + case StateTransition::Condition::LessThan: + case StateTransition::Condition::LessOrEqual: + case StateTransition::Condition::DoesNotEqual: + //do + break; + default: + return false; + }; + case StateField::Type::StringType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::Equals: + if (!dStrcmp(var, transitionRule.field.triggerStringVal)) + return true; + else + return false; + case StateTransition::Condition::DoesNotEqual: + if (dStrcmp(var, transitionRule.field.triggerStringVal)) + return true; + else + return false; + default: + return false; + }; + case StateField::Type::BooleanType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::TriggerValueTarget::True: + if (dAtob(var)) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::False: + if (dAtob(var)) + return false; + else + return true; + default: + return false; + }; + case StateField::Type::NumberType: + switch (transitionRule.triggerComparitor) + { + case StateTransition::Condition::TriggerValueTarget::Equals: + if (num == transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::GeaterThan: + if (num > transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::GreaterOrEqual: + if (num >= transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::LessThan: + if (num < transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::LessOrEqual: + if (num <= transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::DoesNotEqual: + if (num != transitionRule.field.triggerNumVal) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::Positive: + if (num > 0) + return true; + else + return false; + case StateTransition::Condition::TriggerValueTarget::Negative: + if (num < 0) + return true; + else + return false; + default: + return false; + }; + default: + return false; + }; +} + +void StateMachine::setState(const char* stateName, bool clearFields) +{ + State oldState = mCurrentState; + StringTableEntry sName = StringTable->insert(stateName); + for (U32 i = 0; i < mStates.size(); i++) + { + //if(!dStrcmp(mStates[i]->stateName, stateName)) + if (!dStrcmp(mStates[i].stateName,sName)) + { + mCurrentState = mStates[i]; + mStateStartTime = Sim::getCurrentTime(); + + onStateChanged.trigger(this, i); + return; + } + } +} + +const char* StateMachine::getStateByIndex(S32 index) +{ + if (index >= 0 && mStates.size() > index) + return mStates[index].stateName; + else + return ""; +} + +StateMachine::State& StateMachine::getStateByName(const char* name) +{ + StringTableEntry stateName = StringTable->insert(name); + + for (U32 i = 0; i < mStates.size(); i++) + { + if (!dStrcmp(stateName, mStates[i].stateName)) + return mStates[i]; + } +} + +S32 StateMachine::findFieldByName(const char* name) +{ + for (U32 i = 0; i < mFields.size(); i++) + { + if (!dStrcmp(mFields[i].name, name)) + return i; + } + + return -1; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Game/stateMachine.h b/Engine/source/T3D/components/Game/stateMachine.h new file mode 100644 index 0000000000..8bf7b15fbc --- /dev/null +++ b/Engine/source/T3D/components/Game/stateMachine.h @@ -0,0 +1,259 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef STATE_MACHINE_H +#define STATE_MACHINE_H + +#ifndef _SIMBASE_H_ +#include "console/simBase.h" +#endif +#ifndef _OBJECTTYPES_H_ +#include "T3D/objectTypes.h" +#endif +#ifndef _MMATH_H_ +#include "math/mMath.h" +#endif +#ifndef _XMLDOC_H_ +#include "console/SimXMLDocument.h" +#endif + +class StateMachine +{ +public: + struct StateField + { + StringTableEntry name; + + bool triggerBoolVal; + float triggerNumVal; + Point3F triggerVectorVal; + String triggerStringVal; + + enum Type + { + BooleanType = 0, + NumberType, + VectorType, + StringType + }fieldType; + }; + + struct UniqueReference + { + SimObject* referenceObj; + const char* referenceVar; + const char* uniqueName; + }; + + struct StateTransition + { + struct Condition + { + enum TriggerValueTarget + { + Equals = 0, + GeaterThan, + LessThan, + GreaterOrEqual, + LessOrEqual, + True, + False, + Positive, + Negative, + DoesNotEqual + }; + + StateField field; + + TriggerValueTarget triggerComparitor; + + UniqueReference *valUniqueRef; + }; + + StringTableEntry mName; + StringTableEntry mStateTarget; + Vector mTransitionRules; + }; + + struct State + { + Vector mTransitions; + + StringTableEntry stateName; + + StringTableEntry callbackName; + }; + + StringTableEntry mStateMachineFile; + +protected: + Vector mStates; + + Vector mFields; + + Vector mUniqueReferences; + + State mCurrentState; + + F32 mStateStartTime; + F32 mStateTime; + + StringTableEntry mStartingState; + + State *mCurCreateSuperState; + State *mCurCreateState; + + SimObjectPtr mXMLReader; + +public: + StateMachine(); + virtual ~StateMachine(); + + void update(); + + void loadStateMachineFile(); + void readStates(); + void readTransitions(State ¤tState); + void readConditions(StateTransition &newTransition); + + void setState(const char* stateName, bool clearFields = true); + + const char* getCurrentStateName() { return mCurrentState.stateName; } + State& getCurrentState() { + return mCurrentState; + } + + S32 getStateCount() { return mStates.size(); } + const char* getStateByIndex(S32 index); + State& getStateByName(const char* name); + + void checkTransitions(const char* slotName, const char* newValue); + + bool passComparitorCheck(const char* var, StateTransition::Condition transitionRule); + + S32 findFieldByName(const char* name); + + S32 getFieldsCount() { return mFields.size(); } + + StateField getField(U32 index) + { + if (index <= mFields.size()) + return mFields[index]; + } + + Signal< void(StateMachine*, S32 stateIdx) > StateMachine::onStateChanged; + + // + inline bool readStateName(State* state, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("Name")) + { + state->stateName = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readStateScriptFunction(State* state, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("ScriptFunction")) + { + state->callbackName = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readTransitonTarget(StateTransition* transition, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("StateTarget")) + { + transition->mStateTarget = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + // + inline bool readFieldName(StateField* newField, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("FieldName")) + { + newField->name = reader->getData(); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readFieldComparitor(StateTransition::Condition* condition, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("Comparitor")) + { + S32 compIdx = parseComparitor(reader->getData()); + condition->triggerComparitor = static_cast(compIdx); + reader->popElement(); + + return true; + } + + return false; + } + inline bool readFieldValue(StateField* field, SimXMLDocument* reader) + { + if (reader->pushFirstChildElement("NumValue")) + { + field->fieldType = StateField::NumberType; + field->triggerNumVal = dAtof(reader->getData()); + reader->popElement(); + return true; + } + else if (reader->pushFirstChildElement("StringValue")) + { + field->fieldType = StateField::StringType; + field->triggerStringVal = reader->getData(); + reader->popElement(); + return true; + } + else if (reader->pushFirstChildElement("BoolValue")) + { + field->fieldType = StateField::BooleanType; + field->triggerBoolVal = dAtob(reader->getData()); + reader->popElement(); + return true; + } + + return false; + } + +private: + S32 parseComparitor(const char* comparitorName); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/Game/triggerComponent.cpp b/Engine/source/T3D/components/Game/triggerComponent.cpp new file mode 100644 index 0000000000..df61859ce2 --- /dev/null +++ b/Engine/source/T3D/components/Game/triggerComponent.cpp @@ -0,0 +1,358 @@ +//----------------------------------------------------------------------------- +// Torque Game Engine +// Copyright (C) GarageGames.com, Inc. +//----------------------------------------------------------------------------- +#include "console/consoleTypes.h" +#include "T3D/Components/game/TriggerComponent.h" +#include "core/util/safeDelete.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/Components/coreInterfaces.h" +#include "math/mathUtils.h" +#include "collision/concretePolyList.h" +#include "collision/clippedPolyList.h" + +#include "gfx/sim/debugDraw.h" + +IMPLEMENT_CALLBACK( TriggerComponent, onEnterViewCmd, void, + ( Entity* cameraEnt, bool firstTimeSeeing ), ( cameraEnt, firstTimeSeeing ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +IMPLEMENT_CALLBACK( TriggerComponent, onExitViewCmd, void, + ( Entity* cameraEnt ), ( cameraEnt ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +IMPLEMENT_CALLBACK( TriggerComponent, onUpdateInViewCmd, void, + ( Entity* cameraEnt ), ( cameraEnt ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +IMPLEMENT_CALLBACK( TriggerComponent, onUpdateOutOfViewCmd, void, + ( Entity* cameraEnt ), ( cameraEnt ), + "@brief Called when an object enters the volume of the Trigger instance using this TriggerData.\n\n" + + "@param trigger the Trigger instance whose volume the object entered\n" + "@param obj the object that entered the volume of the Trigger instance\n" ); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// + +TriggerComponent::TriggerComponent() : Component() +{ + mObjectList.clear(); + + mVisible = false; + + mFriendlyName = "Trigger"; + mComponentType = "Trigger"; + + mDescription = getDescriptionText("Calls trigger events when a client starts and stops seeing it. Also ticks while visible to clients."); +} + +TriggerComponent::~TriggerComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(TriggerComponent); + + +bool TriggerComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + return true; +} + +void TriggerComponent::onRemove() +{ + Parent::onRemove(); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void TriggerComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + CollisionInterface *colInt = mOwner->getComponent(); + + if(colInt) + { + colInt->onCollisionSignal.notify(this, &TriggerComponent::potentialEnterObject); + } +} + +void TriggerComponent::onComponentRemove() +{ + CollisionInterface *colInt = mOwner->getComponent(); + + if(colInt) + { + colInt->onCollisionSignal.remove(this, &TriggerComponent::potentialEnterObject); + } + + Parent::onComponentRemove(); +} + +void TriggerComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + CollisionInterface *colInt = mOwner->getComponent(); + + if (colInt) + { + colInt->onCollisionSignal.notify(this, &TriggerComponent::potentialEnterObject); + } +} + +void TriggerComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + CollisionInterface *colInt = mOwner->getComponent(); + + if (colInt) + { + colInt->onCollisionSignal.remove(this, &TriggerComponent::potentialEnterObject); + } +} + +void TriggerComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("visibile", TypeBool, Offset( mVisible, TriggerComponent ), "" ); + + addField("onEnterViewCmd", TypeCommand, Offset(mEnterCommand, TriggerComponent), ""); + addField("onExitViewCmd", TypeCommand, Offset(mOnExitCommand, TriggerComponent), ""); + addField("onUpdateInViewCmd", TypeCommand, Offset(mOnUpdateInViewCmd, TriggerComponent), ""); +} + +U32 TriggerComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + return retMask; +} + +void TriggerComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +void TriggerComponent::potentialEnterObject(SceneObject *collider) +{ + if(testObject(collider)) + { + bool found = false; + for(U32 i=0; i < mObjectList.size(); i++) + { + if(mObjectList[i]->getId() == collider->getId()) + { + found = true; + break; + } + } + + if (!found) + { + mObjectList.push_back(collider); + + if (!mEnterCommand.isEmpty()) + { + String command = String("%obj = ") + collider->getIdString() + ";" + + String("%this = ") + getIdString() + ";" + mEnterCommand; + Con::evaluate(command.c_str()); + } + + //onEnterTrigger_callback(this, enter); + } + } +} + +bool TriggerComponent::testObject(SceneObject* enter) +{ + //First, test to early out + Box3F enterBox = enter->getWorldBox(); + + //if(!mOwner->getWorldBox().intersect(enterBox) || !) + // return false; + + //We're still here, so we should do actual work + //We're going to be + ConcretePolyList mClippedList; + + SphereF sphere; + sphere.center = (mOwner->getWorldBox().minExtents + mOwner->getWorldBox().maxExtents) * 0.5; + VectorF bv = mOwner->getWorldBox().maxExtents - sphere.center; + sphere.radius = bv.len(); + + Entity* enterEntity = dynamic_cast(enter); + if(enterEntity) + { + //quick early out. If the bounds don't overlap, it cannot be colliding or inside + if (!mOwner->getWorldBox().isOverlapped(enterBox)) + return false; + + //check if the entity has a collision shape + CollisionInterface *cI = enterEntity->getComponent(); + if (cI) + { + cI->buildPolyList(PLC_Collision, &mClippedList, mOwner->getWorldBox(), sphere); + + if (!mClippedList.isEmpty()) + { + //well, it's clipped with, or inside, our bounds + //now to test the clipped list against our own collision mesh + CollisionInterface *myCI = mOwner->getComponent(); + + //wait, how would we NOT have this? + if (myCI) + { + //anywho, build our list and then we'll check intersections + ClippedPolyList myList; + + myList.setTransform(&(mOwner->getTransform()), mOwner->getScale()); + myList.setObject(mOwner); + + myCI->buildPolyList(PLC_Collision, &myList, enterBox, sphere); + + bool test = true; + } + } + } + } + + return mClippedList.isEmpty() == false; +} + +void TriggerComponent::processTick() +{ + Parent::processTick(); + + if (!isActive()) + return; + + //get our list of active clients, and see if they have cameras, if they do, build a frustum and see if we exist inside that + mVisible = false; + if(isServerObject()) + { + for(U32 i=0; i < mObjectList.size(); i++) + { + if(!testObject(mObjectList[i])) + { + if (!mOnExitCommand.isEmpty()) + { + String command = String("%obj = ") + mObjectList[i]->getIdString() + ";" + + String("%this = ") + getIdString() + ";" + mOnExitCommand; + Con::evaluate(command.c_str()); + } + + mObjectList.erase(i); + //mDataBlock->onLeaveTrigger_callback( this, remove ); + //onLeaveTrigger_callback(this, remove); + } + } + + /*if (!mTickCommand.isEmpty()) + Con::evaluate(mTickCommand.c_str()); + + if (mObjects.size() != 0) + onTickTrigger_callback(this);*/ + } +} + +void TriggerComponent::visualizeFrustums(F32 renderTimeMS) +{ + +} + +GameConnection* TriggerComponent::getConnection(S32 connectionID) +{ + for(NetConnection *conn = NetConnection::getConnectionList(); conn; conn = conn->getNext()) + { + GameConnection* gameConn = dynamic_cast(conn); + + if (!gameConn || (gameConn && gameConn->isAIControlled())) + continue; + + if(connectionID == gameConn->getId()) + return gameConn; + } + + return NULL; +} + +void TriggerComponent::addClient(S32 clientID) +{ + +} + +void TriggerComponent::removeClient(S32 clientID) +{ + +} + +DefineEngineMethod( TriggerComponent, addClient, void, + ( S32 clientID ), ( -1 ), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)" ) +{ + if(clientID == -1) + return; + + object->addClient( clientID ); +} + +DefineEngineMethod( TriggerComponent, removeClient, void, + ( S32 clientID ), ( -1 ), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)" ) +{ + if(clientID == -1) + return; + + object->removeClient( clientID ); +} + +DefineEngineMethod( TriggerComponent, visualizeFrustums, void, + (F32 renderTime), (1000), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)" ) +{ + object->visualizeFrustums(renderTime); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Game/triggerComponent.h b/Engine/source/T3D/components/Game/triggerComponent.h new file mode 100644 index 0000000000..3b790f27e2 --- /dev/null +++ b/Engine/source/T3D/components/Game/triggerComponent.h @@ -0,0 +1,74 @@ +//----------------------------------------------------------------------------- +// Torque Game Engine +// Copyright (C) GarageGames.com, Inc. +//----------------------------------------------------------------------------- +#ifndef _TRIGGER_COMPONENT_H_ +#define _TRIGGER_COMPONENT_H_ + +#ifndef _COMPONENT_H_ +#include "T3D/Components/Component.h" +#endif + +#ifndef _ENTITY_H_ +#include "T3D/Entity.h" +#endif + +#ifndef _COLLISION_INTERFACES_H_ +#include "T3D/Components/collision/collisionInterfaces.h" +#endif + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class TriggerComponent : public Component +{ + typedef Component Parent; + +protected: + Vector mObjectList; + + bool mVisible; + + String mEnterCommand; + String mOnExitCommand; + String mOnUpdateInViewCmd; + +public: + TriggerComponent(); + virtual ~TriggerComponent(); + DECLARE_CONOBJECT(TriggerComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + void potentialEnterObject(SceneObject *collider); + + bool testObject(SceneObject* enter); + + virtual void processTick(); + + GameConnection* getConnection(S32 connectionID); + + void addClient(S32 clientID); + void removeClient(S32 clientID); + + void visualizeFrustums(F32 renderTimeMS); + + DECLARE_CALLBACK(void, onEnterViewCmd, (Entity* cameraEnt, bool firstTimeSeeing)); + DECLARE_CALLBACK(void, onExitViewCmd, (Entity* cameraEnt)); + DECLARE_CALLBACK(void, onUpdateInViewCmd, (Entity* cameraEnt)); + DECLARE_CALLBACK(void, onUpdateOutOfViewCmd, (Entity* cameraEnt)); +}; + +#endif // _EXAMPLEBEHAVIOR_H_ diff --git a/Engine/source/T3D/components/Physics/physicsBehavior.cpp b/Engine/source/T3D/components/Physics/physicsBehavior.cpp new file mode 100644 index 0000000000..3737abc560 --- /dev/null +++ b/Engine/source/T3D/components/Physics/physicsBehavior.cpp @@ -0,0 +1,368 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/Physics/physicsBehavior.h" +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "T3D/gameBase/gameConnection.h" +#include "T3D/containerQuery.h" +#include "math/mathIO.h" + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +PhysicsComponent::PhysicsComponent() : Component() +{ + addComponentField("isStatic", "If enabled, object will not simulate physics", "bool", "0", ""); + addComponentField("gravity", "The direction of gravity affecting this object, as a vector", "vector", "0 0 -9", ""); + addComponentField("drag", "The drag coefficient that constantly affects the object", "float", "0.7", ""); + addComponentField("mass", "The mass of the object", "float", "1", ""); + + mStatic = false; + mAtRest = false; + mAtRestCounter = 0; + + mGravity = VectorF(0, 0, 0); + mVelocity = VectorF(0, 0, 0); + mDrag = 0.7f; + mMass = 1.f; + + mGravityMod = 1.f; + + csmAtRestTimer = 64; + sAtRestVelocity = 0.15f; + + mDelta.pos = Point3F(0, 0, 0); + mDelta.posVec = Point3F(0, 0, 0); + mDelta.warpTicks = mDelta.warpCount = 0; + mDelta.dt = 1; + mDelta.move = NullMove; + mPredictionCount = 0; +} + +PhysicsComponent::~PhysicsComponent() +{ + for(S32 i = 0;i < mFields.size();++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(PhysicsComponent); + +void PhysicsComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + // Initialize interpolation vars. + mDelta.rot[1] = mDelta.rot[0] = QuatF(mOwner->getTransform()); + mDelta.pos = mOwner->getPosition(); + mDelta.posVec = Point3F(0,0,0); +} + +void PhysicsComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("gravity", TypePoint3F, Offset(mGravity, PhysicsComponent)); + addField("velocity", TypePoint3F, Offset(mVelocity, PhysicsComponent)); + addField("isStatic", TypeBool, Offset(mStatic, PhysicsComponent)); +} + +U32 PhysicsComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if(stream->writeFlag(mask & VelocityMask)) + mathWrite( *stream, mVelocity ); + + if(stream->writeFlag(mask & UpdateMask)) + { + stream->writeFlag(mStatic); + stream->writeFlag(mAtRest); + stream->writeInt(mAtRestCounter,8); + + mathWrite( *stream, mGravity ); + + stream->writeFloat(mDrag, 12); + //stream->writeFloat(mMass, 12); + + stream->writeFloat(mGravityMod, 12); + } + return retMask; +} + +void PhysicsComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if(stream->readFlag()) + mathRead( *stream, &mVelocity ); + + if(stream->readFlag()) + { + mStatic = stream->readFlag(); + mAtRest = stream->readFlag(); + mAtRestCounter = stream->readInt(8); + + mathRead( *stream, &mGravity ); + + mDrag = stream->readFloat(12); + //mMass = stream->readFloat(12); + + mGravityMod = stream->readFloat(12); + } +} + +// +void PhysicsComponent::interpolateTick(F32 dt) +{ + Point3F pos = mDelta.pos + mDelta.posVec * dt; + //Point3F rot = mDelta.rot + mDelta.rotVec * dt; + + setRenderPosition(pos,dt); +} + +// +void PhysicsComponent::updateContainer() +{ + PROFILE_SCOPE( PhysicsBehaviorInstance_updateContainer ); + + // Update container drag and buoyancy properties + + // Set default values. + //mDrag = mDataBlock->drag; + //mBuoyancy = 0.0f; + //mGravityMod = 1.0; + //mAppliedForce.set(0,0,0); + + ContainerQueryInfo info; + info.box = mOwner->getWorldBox(); + info.mass = mMass; + + mOwner->getContainer()->findObjects(info.box, WaterObjectType|PhysicalZoneObjectType,findRouter,&info); + + //mWaterCoverage = info.waterCoverage; + //mLiquidType = info.liquidType; + //mLiquidHeight = info.waterHeight; + //setCurrentWaterObject( info.waterObject ); + + // This value might be useful as a datablock value, + // This is what allows the player to stand in shallow water (below this coverage) + // without jiggling from buoyancy + if (info.waterCoverage >= 0.25f) + { + // water viscosity is used as drag for in water. + // ShapeBaseData drag is used for drag outside of water. + // Combine these two components to calculate this ShapeBase object's + // current drag. + mDrag = ( info.waterCoverage * info.waterViscosity ) + + ( 1.0f - info.waterCoverage ) * mDrag; + //mBuoyancy = (info.waterDensity / mDataBlock->density) * info.waterCoverage; + } + + //mAppliedForce = info.appliedForce; + mGravityMod = info.gravityScale; +} +// +void PhysicsComponent::_updatePhysics() +{ + /*SAFE_DELETE( mOwner->mPhysicsRep ); + + if ( !PHYSICSMGR ) + return; + + if (mDataBlock->simpleServerCollision) + { + // We only need the trigger on the server. + if ( isServerObject() ) + { + PhysicsCollision *colShape = PHYSICSMGR->createCollision(); + colShape->addBox( mObjBox.getExtents() * 0.5f, MatrixF::Identity ); + + PhysicsWorld *world = PHYSICSMGR->getWorld( isServerObject() ? "server" : "client" ); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init( colShape, 0, PhysicsBody::BF_TRIGGER | PhysicsBody::BF_KINEMATIC, this, world ); + mPhysicsRep->setTransform( getTransform() ); + } + } + else + { + if ( !mShapeInstance ) + return; + + PhysicsCollision* colShape = mShapeInstance->getShape()->buildColShape( false, getScale() ); + + if ( colShape ) + { + PhysicsWorld *world = PHYSICSMGR->getWorld( isServerObject() ? "server" : "client" ); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init( colShape, 0, PhysicsBody::BF_KINEMATIC, this, world ); + mPhysicsRep->setTransform( getTransform() ); + } + }*/ + return; +} + +PhysicsBody *PhysicsComponent::getPhysicsRep() +{ + /*if(mOwner) + { + Entity* ac = dynamic_cast(mOwner); + if(ac) + return ac->mPhysicsRep; + }*/ + return NULL; +} +// +void PhysicsComponent::setTransform(const MatrixF& mat) +{ + mOwner->setTransform(mat); + + if (!mStatic) + { + mAtRest = false; + mAtRestCounter = 0; + } + + if ( getPhysicsRep() ) + getPhysicsRep()->setTransform( mOwner->getTransform() ); + + setMaskBits(UpdateMask); +} + +void PhysicsComponent::setPosition(const Point3F& pos) +{ + MatrixF mat = mOwner->getTransform(); + if (mOwner->isMounted()) { + // Use transform from mounted object + //mOwner->getObjectMount()->getMountTransform( mOwner->getMountNode(), mMount.xfm, &mat ); + return; + } + else { + mat.setColumn(3,pos); + } + + mOwner->setTransform(mat); + + if ( getPhysicsRep() ) + getPhysicsRep()->setTransform( mat ); +} + + +void PhysicsComponent::setRenderPosition(const Point3F& pos, F32 dt) +{ + MatrixF mat = mOwner->getRenderTransform(); + if (mOwner->isMounted()) { + // Use transform from mounted object + //mOwner->getObjectMount()->getMountRenderTransform( dt, mOwner->getMountNode(), mMount.xfm, &mat ); + return; + } + else { + mat.setColumn(3,pos); + } + + mOwner->setRenderTransform(mat); +} + +void PhysicsComponent::updateVelocity(const F32 dt) +{ +} + +void PhysicsComponent::setVelocity(const VectorF& vel) +{ + mVelocity = vel; + + mAtRest = false; + mAtRestCounter = 0; + setMaskBits(VelocityMask); +} + +void PhysicsComponent::getVelocity(const Point3F& r, Point3F* v) +{ + *v = mVelocity; +} + +void PhysicsComponent::getOriginVector(const Point3F &p,Point3F* r) +{ + *r = p - mOwner->getObjBox().getCenter(); +} + +F32 PhysicsComponent::getZeroImpulse(const Point3F& r,const Point3F& normal) +{ + Point3F a,b,c; + + //set up our inverse matrix + MatrixF iv,qmat; + MatrixF inverse = MatrixF::Identity; + qmat = mOwner->getTransform(); + iv.mul(qmat,inverse); + qmat.transpose(); + inverse.mul(iv,qmat); + + mCross(r, normal, &a); + inverse.mulV(a, &b); + mCross(b, r, &c); + + return 1 / ((1/mMass) + mDot(c, normal)); +} + +void PhysicsComponent::accumulateForce(F32 dt, Point3F force) +{ + mVelocity += force * dt; +} + +void PhysicsComponent::applyImpulse(const Point3F&,const VectorF& vec) +{ + // Items ignore angular velocity + VectorF vel; + vel.x = vec.x / mMass; + vel.y = vec.y / mMass; + vel.z = vec.z / mMass; + setVelocity(mVelocity + vel); +} + +DefineEngineMethod( PhysicsComponent, applyImpulse, bool, ( Point3F pos, VectorF vel ),, + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + object->applyImpulse(pos,vel); + return true; +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Physics/physicsBehavior.h b/Engine/source/T3D/components/Physics/physicsBehavior.h new file mode 100644 index 0000000000..707fc15e53 --- /dev/null +++ b/Engine/source/T3D/components/Physics/physicsBehavior.h @@ -0,0 +1,135 @@ +//----------------------------------------------------------------------------- +// Torque Game Engine +// Copyright (C) GarageGames.com, Inc. +//----------------------------------------------------------------------------- + +#ifndef _PHYSICSBEHAVIOR_H_ +#define _PHYSICSBEHAVIOR_H_ +#include "T3D/Components/Component.h" + +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef _ENTITY_H_ +#include "T3D/Entity.h" +#endif +#ifndef _CONVEX_H_ +#include "collision/convex.h" +#endif +#ifndef _BOXCONVEX_H_ +#include "collision/boxConvex.h" +#endif +#ifndef _RIGID_H_ +#include "T3D/rigid.h" +#endif +#ifndef _T3D_PHYSICS_PHYSICSBODY_H_ +#include "T3D/physics/physicsBody.h" +#endif + +#ifndef _RENDER_COMPONENT_INTERFACE_H_ +#include "T3D/Components/render/renderComponentInterface.h" +#endif + +class TSShapeInstance; +class SceneRenderState; +class PhysicsBody; +class PhysicsBehaviorInstance; +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class PhysicsComponent : public Component +{ + typedef Component Parent; + +protected: + bool mStatic; + bool mAtRest; + S32 mAtRestCounter; + + VectorF mGravity; + VectorF mVelocity; + F32 mDrag; + F32 mMass; + + F32 mGravityMod; + + S32 csmAtRestTimer; + F32 sAtRestVelocity; // Min speed after collisio + +public: + enum MaskBits { + PositionMask = Parent::NextFreeMask << 0, + FreezeMask = Parent::NextFreeMask << 1, + ForceMoveMask = Parent::NextFreeMask << 2, + VelocityMask = Parent::NextFreeMask << 3, + NextFreeMask = Parent::NextFreeMask << 4 + }; + + struct StateDelta + { + Move move; ///< Last move from server + F32 dt; ///< Last interpolation time + // Interpolation data + Point3F pos; + Point3F posVec; + QuatF rot[2]; + // Warp data + S32 warpTicks; ///< Number of ticks to warp + S32 warpCount; ///< Current pos in warp + Point3F warpOffset; + QuatF warpRot[2]; + }; + + StateDelta mDelta; + S32 mPredictionCount; ///< Number of ticks to predict + +public: + PhysicsComponent(); + virtual ~PhysicsComponent(); + DECLARE_CONOBJECT(PhysicsComponent); + + static void initPersistFields(); + + virtual void interpolateTick(F32 dt); + virtual void updatePos(const U32 /*mask*/, const F32 dt){} + virtual void _updatePhysics(); + virtual PhysicsBody *getPhysicsRep(); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void onComponentAdd(); + + void updateContainer(); + + virtual void updateVelocity(const F32 dt); + virtual Point3F getVelocity() { return mVelocity; } + virtual void getOriginVector(const Point3F &p, Point3F* r); + virtual void getVelocity(const Point3F& r, Point3F* v); + virtual void setVelocity(const VectorF& vel); + virtual void setTransform(const MatrixF& mat); + virtual void setPosition(const Point3F& pos); + void setRenderPosition(const Point3F& pos, F32 dt); + + virtual void applyImpulse(const Point3F&, const VectorF& vec); + virtual F32 getZeroImpulse(const Point3F& r, const Point3F& normal); + virtual void accumulateForce(F32 dt, Point3F force); + + //Rigid Body Collision Conveinence Hooks + virtual bool updateCollision(F32 dt, Rigid& ns, CollisionList &cList) { return false; } + virtual bool resolveContacts(Rigid& ns, CollisionList& cList, F32 dt) { return false; } + //virtual bool resolveCollision(Rigid& ns, CollisionList& cList) { return false; } + virtual bool resolveCollision(const Point3F& p, const Point3F &normal) { return false; } +}; + +#endif // _COMPONENT_H_ diff --git a/Engine/source/T3D/components/Physics/physicsComponentInterface.cpp b/Engine/source/T3D/components/Physics/physicsComponentInterface.cpp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Engine/source/T3D/components/Physics/physicsComponentInterface.h b/Engine/source/T3D/components/Physics/physicsComponentInterface.h new file mode 100644 index 0000000000..0f52348161 --- /dev/null +++ b/Engine/source/T3D/components/Physics/physicsComponentInterface.h @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#define PHYSICS_COMPONENT_INTERFACE_H + +#ifndef CORE_INTERFACES_H +#include "T3D/Components/coreInterfaces.h" +#endif + +class PhysicsComponentInterface : public Interface +{ +protected: + VectorF mVelocity; + F32 mMass; + + F32 mGravityMod; + +public: + void updateForces(); + + VectorF getVelocity() { return mVelocity; } + void setVelocity(VectorF vel) { mVelocity = vel; } + + F32 getMass() { return mMass; } + + Signal< void(VectorF normal, Vector overlappedObjects) > PhysicsComponentInterface::onPhysicsCollision; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/Physics/playerControllerComponent.cpp b/Engine/source/T3D/components/Physics/playerControllerComponent.cpp new file mode 100644 index 0000000000..bb5217659b --- /dev/null +++ b/Engine/source/T3D/components/Physics/playerControllerComponent.cpp @@ -0,0 +1,863 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/Physics/playerControllerComponent.h" +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "ts/tsShapeInstance.h" +#include "core/stream/bitStream.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "T3D/gameBase/gameConnection.h" +#include "collision/collision.h" +#include "T3D/physics/physicsPlayer.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/Components/Collision/collisionInterfaces.h" +#include "T3D/trigger.h" +#include "T3D/components/collision/collisionTrigger.h" + +// Movement constants +static F32 sVerticalStepDot = 0.173f; // 80 +static F32 sMinFaceDistance = 0.01f; +static F32 sTractionDistance = 0.04f; +static F32 sNormalElasticity = 0.01f; +static U32 sMoveRetryCount = 5; +static F32 sMaxImpulseVelocity = 200.0f; + +////////////////////////////////////////////////////////////////////////// +// Callbacks +IMPLEMENT_CALLBACK(PlayerControllerComponent, updateMove, void, (PlayerControllerComponent* obj), (obj), + "Called when the player updates it's movement, only called if object is set to callback in script(doUpdateMove).\n" + "@param obj the Player object\n"); + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +PlayerControllerComponent::PlayerControllerComponent() : Component() +{ + addComponentField("isStatic", "If enabled, object will not simulate physics", "bool", "0", ""); + addComponentField("gravity", "The direction of gravity affecting this object, as a vector", "vector", "0 0 -9", ""); + addComponentField("drag", "The drag coefficient that constantly affects the object", "float", "0.7", ""); + addComponentField("mass", "The mass of the object", "float", "1", ""); + + mBuoyancy = 0.f; + mFriction = 0.3f; + mElasticity = 0.4f; + mMaxVelocity = 3000.f; + mSticky = false; + + mFalling = false; + mSwimming = false; + mInWater = false; + + mDelta.pos = mDelta.posVec = Point3F::Zero; + mDelta.warpTicks = mDelta.warpCount = 0; + mDelta.rot[0].identity(); + mDelta.rot[1].identity(); + mDelta.dt = 1; + + mUseDirectMoveInput = false; + + mFriendlyName = "Player Controller"; + mComponentType = "Physics"; + + mDescription = getDescriptionText("A general-purpose physics player controller."); + + mNetFlags.set(Ghostable | ScopeAlways); + + mMass = 9.0f; // from ShapeBase + mDrag = 1.0f; // from ShapeBase + + maxStepHeight = 1.0f; + moveSurfaceAngle = 60.0f; + contactSurfaceAngle = 85.0f; + + fallingSpeedThreshold = -10.0f; + + horizMaxSpeed = 80.0f; + horizMaxAccel = 100.0f; + horizResistSpeed = 38.0f; + horizResistFactor = 1.0f; + + upMaxSpeed = 80.0f; + upMaxAccel = 100.0f; + upResistSpeed = 38.0f; + upResistFactor = 1.0f; + + // Air control + airControl = 0.0f; + + //Grav mod + mGravityMod = 1; + + mInputVelocity = Point3F(0, 0, 0); + + mPhysicsRep = NULL; + mPhysicsWorld = NULL; +} + +PlayerControllerComponent::~PlayerControllerComponent() +{ + for (S32 i = 0; i < mFields.size(); ++i) + { + ComponentField &field = mFields[i]; + SAFE_DELETE_ARRAY(field.mFieldDescription); + } + + SAFE_DELETE_ARRAY(mDescription); +} + +IMPLEMENT_CO_NETOBJECT_V1(PlayerControllerComponent); + +////////////////////////////////////////////////////////////////////////// + +bool PlayerControllerComponent::onAdd() +{ + if (!Parent::onAdd()) + return false; + + return true; +} + +void PlayerControllerComponent::onRemove() +{ + Parent::onRemove(); + + SAFE_DELETE(mPhysicsRep); +} + +void PlayerControllerComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + updatePhysics(); +} + +void PlayerControllerComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + CollisionInterface *collisionInterface = dynamic_cast(comp); + if (collisionInterface) + { + collisionInterface->onCollisionChanged.notify(this, &PlayerControllerComponent::updatePhysics); + mOwnerCollisionInterface = collisionInterface; + updatePhysics(); + } +} + +void PlayerControllerComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + CollisionInterface *collisionInterface = dynamic_cast(comp); + if (collisionInterface) + { + collisionInterface->onCollisionChanged.remove(this, &PlayerControllerComponent::updatePhysics); + mOwnerCollisionInterface = NULL; + updatePhysics(); + } +} + +void PlayerControllerComponent::updatePhysics(PhysicsCollision *collision) +{ + if (!PHYSICSMGR) + return; + + mPhysicsWorld = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + + //first, clear the old physRep + SAFE_DELETE(mPhysicsRep); + + mPhysicsRep = PHYSICSMGR->createPlayer(); + + F32 runSurfaceCos = mCos(mDegToRad(moveSurfaceAngle)); + + Point3F ownerBounds = mOwner->getObjBox().getExtents() * mOwner->getScale(); + + mPhysicsRep->init("", ownerBounds, runSurfaceCos, maxStepHeight, mOwner, mPhysicsWorld); + + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void PlayerControllerComponent::initPersistFields() +{ + Parent::initPersistFields(); + + addField("inputVelocity", TypePoint3F, Offset(mInputVelocity, PlayerControllerComponent), ""); + addField("useDirectMoveInput", TypePoint3F, Offset(mUseDirectMoveInput, PlayerControllerComponent), ""); +} + +U32 PlayerControllerComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + return retMask; +} + +void PlayerControllerComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); +} + +// +void PlayerControllerComponent::processTick() +{ + Parent::processTick(); + + if (!isServerObject() || !isActive()) + return; + + // Warp to catch up to server + if (mDelta.warpCount < mDelta.warpTicks) + { + mDelta.warpCount++; + + // Set new pos. + mDelta.pos = mOwner->getPosition(); + mDelta.pos += mDelta.warpOffset; + mDelta.rot[0] = mDelta.rot[1]; + mDelta.rot[1].interpolate(mDelta.warpRot[0], mDelta.warpRot[1], F32(mDelta.warpCount) / mDelta.warpTicks); + + MatrixF trans; + mDelta.rot[1].setMatrix(&trans); + trans.setPosition(mDelta.pos); + + mOwner->setTransform(trans); + + // Pos backstepping + mDelta.posVec.x = -mDelta.warpOffset.x; + mDelta.posVec.y = -mDelta.warpOffset.y; + mDelta.posVec.z = -mDelta.warpOffset.z; + } + else + { + // Save current rigid state interpolation + mDelta.posVec = mOwner->getPosition(); + mDelta.rot[0] = mOwner->getTransform(); + + updateMove(); + updatePos(TickSec); + + // Wrap up interpolation info + mDelta.pos = mOwner->getPosition(); + mDelta.posVec -= mOwner->getPosition(); + mDelta.rot[1] = mOwner->getTransform(); + + // Update container database + setTransform(mOwner->getTransform()); + + setMaskBits(VelocityMask); + setMaskBits(PositionMask); + } +} + +void PlayerControllerComponent::interpolateTick(F32 dt) +{ +} + +void PlayerControllerComponent::ownerTransformSet(MatrixF *mat) +{ + if (mPhysicsRep) + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void PlayerControllerComponent::setTransform(const MatrixF& mat) +{ + mOwner->setTransform(mat); + + setMaskBits(UpdateMask); +} + +// +void PlayerControllerComponent::updateMove() +{ + if (!PHYSICSMGR) + return; + + Move *move = &mOwner->lastMove; + + //If we're not set to use mUseDirectMoveInput, then we allow for an override in the form of mInputVelocity + if (!mUseDirectMoveInput) + { + move->x = mInputVelocity.x; + move->y = mInputVelocity.y; + move->z = mInputVelocity.z; + } + + // Is waterCoverage high enough to be 'swimming'? + { + bool swimming = mOwner->getContainerInfo().waterCoverage > 0.65f/* && canSwim()*/; + + if (swimming != mSwimming) + { + mSwimming = swimming; + } + } + + // Update current orientation + bool doStandardMove = true; + GameConnection* con = mOwner->getControllingClient(); + +#ifdef TORQUE_EXTENDED_MOVE + // Work with an absolute rotation from the ExtendedMove class? + if (con && con->getControlSchemeAbsoluteRotation()) + { + doStandardMove = false; + const ExtendedMove* emove = dynamic_cast(move); + U32 emoveIndex = smExtendedMoveHeadPosRotIndex; + if (emoveIndex >= ExtendedMove::MaxPositionsRotations) + emoveIndex = 0; + + if (emove->EulerBasedRotation[emoveIndex]) + { + // Head pitch + mHead.x += (emove->rotX[emoveIndex] - mLastAbsolutePitch); + + // Do we also include the relative yaw value? + if (con->getControlSchemeAddPitchToAbsRot()) + { + F32 x = move->pitch; + if (x > M_PI_F) + x -= M_2PI_F; + + mHead.x += x; + } + + // Constrain the range of mHead.x + while (mHead.x < -M_PI_F) + mHead.x += M_2PI_F; + while (mHead.x > M_PI_F) + mHead.x -= M_2PI_F; + + // Rotate (heading) head or body? + if (move->freeLook && ((isMounted() && getMountNode() == 0) || (con && !con->isFirstPerson()))) + { + // Rotate head + mHead.z += (emove->rotZ[emoveIndex] - mLastAbsoluteYaw); + + // Do we also include the relative yaw value? + if (con->getControlSchemeAddYawToAbsRot()) + { + F32 z = move->yaw; + if (z > M_PI_F) + z -= M_2PI_F; + + mHead.z += z; + } + + // Constrain the range of mHead.z + while (mHead.z < 0.0f) + mHead.z += M_2PI_F; + while (mHead.z > M_2PI_F) + mHead.z -= M_2PI_F; + } + else + { + // Rotate body + mRot.z += (emove->rotZ[emoveIndex] - mLastAbsoluteYaw); + + // Do we also include the relative yaw value? + if (con->getControlSchemeAddYawToAbsRot()) + { + F32 z = move->yaw; + if (z > M_PI_F) + z -= M_2PI_F; + + mRot.z += z; + } + + // Constrain the range of mRot.z + while (mRot.z < 0.0f) + mRot.z += M_2PI_F; + while (mRot.z > M_2PI_F) + mRot.z -= M_2PI_F; + } + mLastAbsoluteYaw = emove->rotZ[emoveIndex]; + mLastAbsolutePitch = emove->rotX[emoveIndex]; + + // Head bank + mHead.y = emove->rotY[emoveIndex]; + + // Constrain the range of mHead.y + while (mHead.y > M_PI_F) + mHead.y -= M_2PI_F; + } + } +#endif + + MatrixF zRot; + zRot.set(EulerF(0.0f, 0.0f, mOwner->getRotation().asEulerF().z)); + + // Desired move direction & speed + VectorF moveVec; + F32 moveSpeed = mInputVelocity.len(); + + zRot.getColumn(0, &moveVec); + moveVec *= move->x; + VectorF tv; + zRot.getColumn(1, &tv); + moveVec += tv * move->y; + + // Acceleration due to gravity + VectorF acc(mPhysicsWorld->getGravity() * mGravityMod * TickSec); + + // Determine ground contact normal. Only look for contacts if + // we can move and aren't mounted. + mContactInfo.contactNormal = VectorF::Zero; + mContactInfo.jump = false; + mContactInfo.run = false; + + bool jumpSurface = false, runSurface = false; + if (!mOwner->isMounted()) + findContact(&mContactInfo.run, &mContactInfo.jump, &mContactInfo.contactNormal); + if (mContactInfo.jump) + mJumpSurfaceNormal = mContactInfo.contactNormal; + + // If we don't have a runSurface but we do have a contactNormal, + // then we are standing on something that is too steep. + // Deflect the force of gravity by the normal so we slide. + // We could also try aligning it to the runSurface instead, + // but this seems to work well. + if (!mContactInfo.run && !mContactInfo.contactNormal.isZero()) + acc = (acc - 2 * mContactInfo.contactNormal * mDot(acc, mContactInfo.contactNormal)); + + // Acceleration on run surface + if (mContactInfo.run && !mSwimming) + { + mContactTimer = 0; + + VectorF pv = moveVec; + + // Adjust the player's requested dir. to be parallel + // to the contact surface. + F32 pvl = pv.len(); + + // Convert to acceleration + if (pvl) + pv *= moveSpeed / pvl; + VectorF runAcc = pv - (mVelocity + acc); + F32 runSpeed = runAcc.len(); + + // Clamp acceleration, player also accelerates faster when + // in his hard landing recover state. + F32 maxAcc; + + maxAcc = (horizMaxAccel / mMass) * TickSec; + + if (runSpeed > maxAcc) + runAcc *= maxAcc / runSpeed; + + acc += runAcc; + } + else if (!mSwimming && airControl > 0.0f) + { + VectorF pv; + pv = moveVec; + F32 pvl = pv.len(); + + if (pvl) + pv *= moveSpeed / pvl; + + VectorF runAcc = pv - (mVelocity + acc); + runAcc.z = 0; + runAcc.x = runAcc.x * airControl; + runAcc.y = runAcc.y * airControl; + F32 runSpeed = runAcc.len(); + + // We don't test for sprinting when performing air control + F32 maxAcc = (horizMaxAccel / mMass) * TickSec * 0.3f; + + if (runSpeed > maxAcc) + runAcc *= maxAcc / runSpeed; + + acc += runAcc; + + // There are no special air control animations + // so... increment this unless you really want to + // play the run anims in the air. + mContactTimer++; + } + else if (mSwimming) + { + // Remove acc into contact surface (should only be gravity) + // Clear out floating point acc errors, this will allow + // the player to "rest" on the ground. + F32 vd = -mDot(acc, mContactInfo.contactNormal); + if (vd > 0.0f) + { + VectorF dv = mContactInfo.contactNormal * (vd + 0.002f); + acc += dv; + if (acc.len() < 0.0001f) + acc.set(0.0f, 0.0f, 0.0f); + } + + // get the head pitch and add it to the moveVec + // This more accurate swim vector calc comes from Matt Fairfax + MatrixF xRot, zRot; + xRot.set(EulerF(mOwner->getRotation().asEulerF().x, 0, 0)); + zRot.set(EulerF(0, 0, mOwner->getRotation().asEulerF().z)); + MatrixF rot; + rot.mul(zRot, xRot); + rot.getColumn(0, &moveVec); + + moveVec *= move->x; + VectorF tv; + rot.getColumn(1, &tv); + moveVec += tv * move->y; + rot.getColumn(2, &tv); + moveVec += tv * move->z; + + // Force a 0 move if there is no energy, and only drain + // move energy if we're moving. + VectorF swimVec = moveVec; + + // If we are swimming but close enough to the shore/ground + // we can still have a surface-normal. In this case align the + // velocity to the normal to make getting out of water easier. + + moveVec.normalize(); + F32 isSwimUp = mDot(moveVec, mContactInfo.contactNormal); + + if (!mContactInfo.contactNormal.isZero() && isSwimUp < 0.1f) + { + F32 pvl = swimVec.len(); + + if (pvl) + { + VectorF nn; + mCross(swimVec, VectorF(0.0f, 0.0f, 1.0f), &nn); + nn *= 1.0f / pvl; + VectorF cv = mContactInfo.contactNormal; + cv -= nn * mDot(nn, cv); + swimVec -= cv * mDot(swimVec, cv); + } + } + + F32 swimVecLen = swimVec.len(); + + // Convert to acceleration. + if (swimVecLen) + swimVec *= moveSpeed / swimVecLen; + VectorF swimAcc = swimVec - (mVelocity + acc); + F32 swimSpeed = swimAcc.len(); + + // Clamp acceleration. + F32 maxAcc = (horizMaxAccel / mMass) * TickSec; + if (swimSpeed > maxAcc) + swimAcc *= maxAcc / swimSpeed; + + acc += swimAcc; + + mContactTimer++; + } + else + mContactTimer++; + + // Add in force from physical zones... + acc += (mOwner->getContainerInfo().appliedForce / mMass) * TickSec; + + // Adjust velocity with all the move & gravity acceleration + // TG: I forgot why doesn't the TickSec multiply happen here... + mVelocity += acc; + + // apply horizontal air resistance + + F32 hvel = mSqrt(mVelocity.x * mVelocity.x + mVelocity.y * mVelocity.y); + + if (hvel > horizResistSpeed) + { + F32 speedCap = hvel; + if (speedCap > horizMaxSpeed) + speedCap = horizMaxSpeed; + speedCap -= horizResistFactor * TickSec * (speedCap - horizResistSpeed); + F32 scale = speedCap / hvel; + mVelocity.x *= scale; + mVelocity.y *= scale; + } + if (mVelocity.z > upResistSpeed) + { + if (mVelocity.z > upMaxSpeed) + mVelocity.z = upMaxSpeed; + mVelocity.z -= upResistFactor * TickSec * (mVelocity.z - upResistSpeed); + } + + // Apply drag + mVelocity -= mVelocity * mDrag * TickSec; + + // Clamp very small velocity to zero + if (mVelocity.isZero()) + mVelocity = Point3F::Zero; + + // If we are not touching anything and have sufficient -z vel, + // we are falling. + if (mContactInfo.run) + { + mFalling = false; + } + else + { + VectorF vel; + mOwner->getWorldToObj().mulV(mVelocity, &vel); + mFalling = vel.z < fallingSpeedThreshold; + } + + // Enter/Leave Liquid + if (!mInWater && mOwner->getContainerInfo().waterCoverage > 0.0f) + { + mInWater = true; + } + else if (mInWater && mOwner->getContainerInfo().waterCoverage <= 0.0f) + { + mInWater = false; + } +} + +void PlayerControllerComponent::updatePos(const F32 travelTime) +{ + if (!PHYSICSMGR) + return; + + PROFILE_SCOPE(PlayerControllerComponent_UpdatePos); + + Point3F newPos; + + Collision col; + dMemset(&col, 0, sizeof(col)); + + static CollisionList collisionList; + collisionList.clear(); + + newPos = mPhysicsRep->move(mVelocity * travelTime, collisionList); + + bool haveCollisions = false; + bool wasFalling = mFalling; + if (collisionList.getCount() > 0) + { + mFalling = false; + haveCollisions = true; + + //TODO: clean this up so the phys component doesn't have to tell the col interface to do this + CollisionInterface* colInterface = mOwner->getComponent(); + if (colInterface) + { + colInterface->handleCollisionList(collisionList, mVelocity); + } + } + + if (haveCollisions) + { + // Pick the collision that most closely matches our direction + VectorF velNormal = mVelocity; + velNormal.normalizeSafe(); + const Collision *collision = &collisionList[0]; + F32 collisionDot = mDot(velNormal, collision->normal); + const Collision *cp = collision + 1; + const Collision *ep = collision + collisionList.getCount(); + for (; cp != ep; cp++) + { + F32 dp = mDot(velNormal, cp->normal); + if (dp < collisionDot) + { + collisionDot = dp; + collision = cp; + } + } + + // Modify our velocity based on collisions + for (U32 i = 0; i 0) + col = collisionList[collisionList.getCount() - 1]; + + // We'll handle any player-to-player collision, and the last collision + // with other obejct types. + for (U32 i = 0; isetTransform(newMat); + + mOwner->setPosition(newPos); +} + +// +void PlayerControllerComponent::setVelocity(const VectorF& vel) +{ + mVelocity = vel; + + // Clamp against the maximum velocity. + if (mMaxVelocity > 0) + { + F32 len = mVelocity.magnitudeSafe(); + if (len > mMaxVelocity) + { + Point3F excess = mVelocity * (1.0f - (mMaxVelocity / len)); + mVelocity -= excess; + } + } + + setMaskBits(VelocityMask); +} + +void PlayerControllerComponent::findContact(bool *run, bool *jump, VectorF *contactNormal) +{ + SceneObject *contactObject = NULL; + + Vector overlapObjects; + + mPhysicsRep->findContact(&contactObject, contactNormal, &overlapObjects); + + F32 vd = (*contactNormal).z; + *run = vd > mCos(mDegToRad(moveSurfaceAngle)); + *jump = vd > mCos(mDegToRad(contactSurfaceAngle)); + + // Check for triggers + for (U32 i = 0; i < overlapObjects.size(); i++) + { + SceneObject *obj = overlapObjects[i]; + U32 objectMask = obj->getTypeMask(); + + // Check: triggers, corpses and items... + // + if (objectMask & TriggerObjectType) + { + if (Trigger* pTrigger = dynamic_cast(obj)) + { + pTrigger->potentialEnterObject(mOwner); + } + else if (CollisionTrigger* pTriggerEx = dynamic_cast(obj)) + { + if (pTriggerEx) + pTriggerEx->potentialEnterObject(mOwner); + } + //Add any other custom classes and the sort here that should be filtered against + /*else if (TriggerExample* pTriggerEx = dynamic_cast(obj)) + { + if (pTriggerEx) + pTriggerEx->potentialEnterObject(mOwner); + }*/ + } + } + + mContactInfo.contacted = contactObject != NULL; + mContactInfo.contactObject = contactObject; + + if (mContactInfo.contacted) + mContactInfo.contactNormal = *contactNormal; +} + +void PlayerControllerComponent::applyImpulse(const Point3F &pos, const VectorF &vec) +{ + + AssertFatal(!mIsNaN(vec), "Player::applyImpulse() - The vector is NaN!"); + + // Players ignore angular velocity + VectorF vel; + vel.x = vec.x / getMass(); + vel.y = vec.y / getMass(); + vel.z = vec.z / getMass(); + + // Make sure the impulse isn't too bigg + F32 len = vel.magnitudeSafe(); + if (len > sMaxImpulseVelocity) + { + Point3F excess = vel * (1.0f - (sMaxImpulseVelocity / len)); + vel -= excess; + } + + setVelocity(mVelocity + vel); +} + +DefineEngineMethod(PlayerControllerComponent, applyImpulse, bool, (Point3F pos, VectorF vel), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + object->applyImpulse(pos, vel); + return true; +} + +DefineEngineMethod(PlayerControllerComponent, getContactNormal, Point3F, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getContactNormal(); +} + +DefineEngineMethod(PlayerControllerComponent, getContactObject, SceneObject*, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->getContactObject(); +} + +DefineEngineMethod(PlayerControllerComponent, isContacted, bool, (), , + "@brief Apply an impulse to this object as defined by a world position and velocity vector.\n\n" + + "@param pos impulse world position\n" + "@param vel impulse velocity (impulse force F = m * v)\n" + "@return Always true\n" + + "@note Not all objects that derrive from GameBase have this defined.\n") +{ + return object->isContacted(); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Physics/playerControllerComponent.h b/Engine/source/T3D/components/Physics/playerControllerComponent.h new file mode 100644 index 0000000000..903d0f1188 --- /dev/null +++ b/Engine/source/T3D/components/Physics/playerControllerComponent.h @@ -0,0 +1,212 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef PLAYER_CONTORLLER_COMPONENT_H +#define PLAYER_CONTORLLER_COMPONENT_H + +#ifndef PHYSICSBEHAVIOR_H +#include "T3D/Components/Physics/physicsBehavior.h" +#endif +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/Entity.h" +#endif +#ifndef _CONVEX_H_ +#include "collision/convex.h" +#endif +#ifndef _BOXCONVEX_H_ +#include "collision/boxConvex.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif +#ifndef _T3D_PHYSICS_PHYSICSWORLD_H_ +#include "T3D/physics/physicsWorld.h" +#endif +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#include "T3D/Components/physics/physicsComponentInterface.h" +#endif +#ifndef COLLISION_INTERFACES_H +#include "T3D/Components/collision/collisionInterfaces.h" +#endif + +class SceneRenderState; +class PhysicsWorld; +class PhysicsPlayer; +class SimplePhysicsBehaviorInstance; +class CollisionInterface; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class PlayerControllerComponent : public Component, + public PhysicsComponentInterface +{ + typedef Component Parent; + + enum MaskBits { + VelocityMask = Parent::NextFreeMask << 0, + PositionMask = Parent::NextFreeMask << 1, + NextFreeMask = Parent::NextFreeMask << 2 + }; + + struct StateDelta + { + Move move; ///< Last move from server + F32 dt; ///< Last interpolation time + // Interpolation data + Point3F pos; + Point3F posVec; + QuatF rot[2]; + // Warp data + S32 warpTicks; ///< Number of ticks to warp + S32 warpCount; ///< Current pos in warp + Point3F warpOffset; + QuatF warpRot[2]; + }; + + StateDelta mDelta; + + PhysicsPlayer *mPhysicsRep; + PhysicsWorld *mPhysicsWorld; + + CollisionInterface* mOwnerCollisionInterface; + + struct ContactInfo + { + bool contacted, jump, run; + SceneObject *contactObject; + VectorF contactNormal; + F32 contactTime; + + void clear() + { + contacted = jump = run = false; + contactObject = NULL; + contactNormal.set(1, 1, 1); + } + + ContactInfo() { clear(); } + + } mContactInfo; + +protected: + F32 mDrag; + F32 mBuoyancy; + F32 mFriction; + F32 mElasticity; + F32 mMaxVelocity; + bool mSticky; + + bool mFalling; + bool mSwimming; + bool mInWater; + + S32 mContactTimer; ///< Ticks since last contact + + U32 mIntegrationCount; + + Point3F mJumpSurfaceNormal; ///< Normal of the surface the player last jumped on + + F32 maxStepHeight; ///< Maximum height the player can step up + F32 moveSurfaceAngle; ///< Maximum angle from vertical in degrees the player can run up + F32 contactSurfaceAngle; ///< Maximum angle from vertical in degrees we consider having real 'contact' + + F32 horizMaxSpeed; ///< Max speed attainable in the horizontal + F32 horizMaxAccel; + F32 horizResistSpeed; ///< Speed at which resistance will take place + F32 horizResistFactor; ///< Factor of resistance once horizResistSpeed has been reached + + F32 upMaxSpeed; ///< Max vertical speed attainable + F32 upMaxAccel; + F32 upResistSpeed; ///< Speed at which resistance will take place + F32 upResistFactor; ///< Factor of resistance once upResistSpeed has been reached + + F32 fallingSpeedThreshold; ///< Downward speed at which we consider the player falling + + // Air control + F32 airControl; + + Point3F mInputVelocity; + + bool mUseDirectMoveInput; + +public: + PlayerControllerComponent(); + virtual ~PlayerControllerComponent(); + DECLARE_CONOBJECT(PlayerControllerComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual void ownerTransformSet(MatrixF *mat); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + void updatePhysics(PhysicsCollision *collision = NULL); + + virtual void processTick(); + virtual void interpolateTick(F32 dt); + virtual void updatePos(const F32 dt); + void updateMove(); + + virtual VectorF getVelocity() { return mVelocity; } + virtual void setVelocity(const VectorF& vel); + virtual void setTransform(const MatrixF& mat); + + void findContact(bool *run, bool *jump, VectorF *contactNormal); + Point3F getContactNormal() { return mContactInfo.contactNormal; } + SceneObject* getContactObject() { return mContactInfo.contactObject; } + bool isContacted() { return mContactInfo.contacted; } + + // + void applyImpulse(const Point3F &pos, const VectorF &vec); + + //This is a weird artifact of the PhysicsReps. We want the collision component to be privvy to any events that happen + //so when the physics components do a findContact test during their update, they'll have a signal collision components + //can be listening to to update themselves with that info + Signal< void(SceneObject*) > PlayerControllerComponent::onContactSignal; + + // + DECLARE_CALLBACK(void, updateMove, (PlayerControllerComponent* obj)); +}; + +#endif // _COMPONENT_H_ diff --git a/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp b/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp new file mode 100644 index 0000000000..e2d22fa25a --- /dev/null +++ b/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp @@ -0,0 +1,467 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "T3D/Components/physics/RigidBodyComponent.h" +#include "core/util/safeDelete.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "console/engineAPI.h" +#include "sim/netConnection.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsWorld.h" +#include "T3D/physics/physicsCollision.h" +#include "T3D/Components/Collision/collisionComponent.h" + +bool RigidBodyComponent::smNoCorrections = false; +bool RigidBodyComponent::smNoSmoothing = false; + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +RigidBodyComponent::RigidBodyComponent() : Component() +{ + mMass = 20; + mDynamicFriction = 1; + mStaticFriction = 0.1f; + mRestitution = 10; + mLinearDamping = 0; + mAngularDamping = 0; + mLinearSleepThreshold = 1; + mAngularSleepThreshold = 1; + mWaterDampingScale = 0.1f; + mBuoyancyDensity = 1; + + mSimType = SimType_ServerOnly; + + mPhysicsRep = NULL; + mResetPos = MatrixF::Identity; + + mOwnerColComponent = NULL; + + mFriendlyName = "RigidBody(Component)"; +} + +RigidBodyComponent::~RigidBodyComponent() +{ +} + +IMPLEMENT_CO_NETOBJECT_V1(RigidBodyComponent); + +bool RigidBodyComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + return true; +} + +void RigidBodyComponent::onRemove() +{ + Parent::onRemove(); +} +void RigidBodyComponent::initPersistFields() +{ + Parent::initPersistFields(); +} + +//This is mostly a catch for situations where the behavior is re-added to the object and the like and we may need to force an update to the behavior +void RigidBodyComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + if (isServerObject()) + { + storeRestorePos(); + PhysicsPlugin::getPhysicsResetSignal().notify(this, &RigidBodyComponent::_onPhysicsReset); + } + + CollisionComponent *colComp = mOwner->getComponent(); + if (colComp) + { + colComp->onCollisionChanged.notify(this, &RigidBodyComponent::updatePhysics); + updatePhysics(colComp->getCollisionData()); + } + else + updatePhysics(); +} + +void RigidBodyComponent::onComponentRemove() +{ + Parent::onComponentRemove(); + + if (isServerObject()) + { + PhysicsPlugin::getPhysicsResetSignal().remove(this, &RigidBodyComponent::_onPhysicsReset); + } + + CollisionComponent *colComp = mOwner->getComponent(); + if (colComp) + { + colComp->onCollisionChanged.remove(this, &RigidBodyComponent::updatePhysics); + } + + SAFE_DELETE(mPhysicsRep); +} + +void RigidBodyComponent::componentAddedToOwner(Component *comp) +{ + CollisionComponent *colComp = dynamic_cast(comp); + if (colComp) + { + colComp->onCollisionChanged.notify(this, &RigidBodyComponent::updatePhysics); + updatePhysics(colComp->getCollisionData()); + } +} + +void RigidBodyComponent::componentRemovedFromOwner(Component *comp) +{ + //test if this is a shape component! + CollisionComponent *colComp = dynamic_cast(comp); + if (colComp) + { + colComp->onCollisionChanged.remove(this, &RigidBodyComponent::updatePhysics); + updatePhysics(); + } +} + +void RigidBodyComponent::ownerTransformSet(MatrixF *mat) +{ + if (mPhysicsRep) + mPhysicsRep->setTransform(mOwner->getTransform()); +} + +void RigidBodyComponent::updatePhysics(PhysicsCollision* collision) +{ + SAFE_DELETE(mPhysicsRep); + + if (!PHYSICSMGR) + return; + + mWorld = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + + if (!collision) + return; + + mPhysicsRep = PHYSICSMGR->createBody(); + + mPhysicsRep->init(collision, mMass, 0, mOwner, mWorld); + + mPhysicsRep->setMaterial(mRestitution, mDynamicFriction, mStaticFriction); + + mPhysicsRep->setDamping(mLinearDamping, mAngularDamping); + mPhysicsRep->setSleepThreshold(mLinearSleepThreshold, mAngularSleepThreshold); + + mPhysicsRep->setTransform(mOwner->getTransform()); + + // The reset position is the transform on the server + // at creation time... its not used on the client. + if (isServerObject()) + { + storeRestorePos(); + PhysicsPlugin::getPhysicsResetSignal().notify(this, &RigidBodyComponent::_onPhysicsReset); + } +} + +U32 RigidBodyComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (stream->writeFlag(mask & StateMask)) + { + // This will encode the position relative to the control + // object position. + // + // This will compress the position to as little as 6.25 + // bytes if the position is within about 30 meters of the + // control object. + // + // Worst case its a full 12 bytes + 2 bits if the position + // is more than 500 meters from the control object. + // + stream->writeCompressedPoint(mState.position); + + // Use only 3.5 bytes to send the orientation. + stream->writeQuat(mState.orientation, 9); + + // If the server object has been set to sleep then + // we don't need to send any velocity. + if (!stream->writeFlag(mState.sleeping)) + { + // This gives me ~0.015f resolution in velocity magnitude + // while only costing me 1 bit of the velocity is zero length, + // <5 bytes in normal cases, and <8 bytes if the velocity is + // greater than 1000. + AssertWarn(mState.linVelocity.len() < 1000.0f, + "PhysicsShape::packUpdate - The linVelocity is out of range!"); + stream->writeVector(mState.linVelocity, 1000.0f, 16, 9); + + // For angular velocity we get < 0.01f resolution in magnitude + // with the most common case being under 4 bytes. + AssertWarn(mState.angVelocity.len() < 10.0f, + "PhysicsShape::packUpdate - The angVelocity is out of range!"); + stream->writeVector(mState.angVelocity, 10.0f, 10, 9); + } + } + + return retMask; +} + +void RigidBodyComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if (stream->readFlag()) // StateMask + { + PhysicsState state; + + // Read the encoded and compressed position... commonly only 6.25 bytes. + stream->readCompressedPoint(&state.position); + + // Read the compressed quaternion... 3.5 bytes. + stream->readQuat(&state.orientation, 9); + + state.sleeping = stream->readFlag(); + if (!state.sleeping) + { + stream->readVector(&state.linVelocity, 1000.0f, 16, 9); + stream->readVector(&state.angVelocity, 10.0f, 10, 9); + } + + if (!smNoCorrections && mPhysicsRep && mPhysicsRep->isDynamic()) + { + // Set the new state on the physics object immediately. + mPhysicsRep->applyCorrection(state.getTransform()); + + mPhysicsRep->setSleeping(state.sleeping); + if (!state.sleeping) + { + mPhysicsRep->setLinVelocity(state.linVelocity); + mPhysicsRep->setAngVelocity(state.angVelocity); + } + + mPhysicsRep->getState(&mState); + } + + // If there is no physics object then just set the + // new state... the tick will take care of the + // interpolation and extrapolation. + if (!mPhysicsRep || !mPhysicsRep->isDynamic()) + mState = state; + } +} + +void RigidBodyComponent::processTick() +{ + Parent::processTick(); + + if (!mPhysicsRep || !PHYSICSMGR) + return; + + // Note that unlike TSStatic, the serverside PhysicsShape does not + // need to play the ambient animation because even if the animation were + // to move collision shapes it would not affect the physx representation. + + PROFILE_START(RigidBodyComponent_ProcessTick); + + if (!mPhysicsRep->isDynamic()) + return; + + // SINGLE PLAYER HACK!!!! + if (PHYSICSMGR->isSinglePlayer() && isClientObject() && getServerObject()) + { + RigidBodyComponent *servObj = (RigidBodyComponent*)getServerObject(); + mOwner->setTransform(servObj->mState.getTransform()); + mRenderState[0] = servObj->mRenderState[0]; + mRenderState[1] = servObj->mRenderState[1]; + + return; + } + + // Store the last render state. + mRenderState[0] = mRenderState[1]; + + // If the last render state doesn't match the last simulation + // state then we got a correction and need to + Point3F errorDelta = mRenderState[1].position - mState.position; + const bool doSmoothing = !errorDelta.isZero() && !smNoSmoothing; + + const bool wasSleeping = mState.sleeping; + + // Get the new physics state. + mPhysicsRep->getState(&mState); + updateContainerForces(); + + // Smooth the correction back into the render state. + mRenderState[1] = mState; + if (doSmoothing) + { + F32 correction = mClampF(errorDelta.len() / 20.0f, 0.1f, 0.9f); + mRenderState[1].position.interpolate(mState.position, mRenderState[0].position, correction); + mRenderState[1].orientation.interpolate(mState.orientation, mRenderState[0].orientation, correction); + } + + //Check if any collisions occured + findContact(); + + // If we haven't been sleeping then update our transform + // and set ourselves as dirty for the next client update. + if (!wasSleeping || !mState.sleeping) + { + // Set the transform on the parent so that + // the physics object isn't moved. + mOwner->setTransform(mState.getTransform()); + + // If we're doing server simulation then we need + // to send the client a state update. + if (isServerObject() && mPhysicsRep && !smNoCorrections && + !PHYSICSMGR->isSinglePlayer() // SINGLE PLAYER HACK!!!! + ) + setMaskBits(StateMask); + } + + PROFILE_END(); +} + +void RigidBodyComponent::findContact() +{ + SceneObject *contactObject = NULL; + + VectorF *contactNormal = new VectorF(0, 0, 0); + + Vector overlapObjects; + + mPhysicsRep->findContact(&contactObject, contactNormal, &overlapObjects); + + if (!overlapObjects.empty()) + { + //fire our signal that the physics sim said collisions happened + onPhysicsCollision.trigger(*contactNormal, overlapObjects); + } +} + +void RigidBodyComponent::_onPhysicsReset(PhysicsResetEvent reset) +{ + if (reset == PhysicsResetEvent_Store) + mResetPos = mOwner->getTransform(); + + else if (reset == PhysicsResetEvent_Restore) + { + mOwner->setTransform(mResetPos); + } +} + +void RigidBodyComponent::storeRestorePos() +{ + mResetPos = mOwner->getTransform(); +} + +void RigidBodyComponent::applyImpulse(const Point3F &pos, const VectorF &vec) +{ + if (mPhysicsRep && mPhysicsRep->isDynamic()) + mPhysicsRep->applyImpulse(pos, vec); +} + +void RigidBodyComponent::applyRadialImpulse(const Point3F &origin, F32 radius, F32 magnitude) +{ + if (!mPhysicsRep || !mPhysicsRep->isDynamic()) + return; + + // TODO: Find a better approximation of the + // force vector using the object box. + + VectorF force = mOwner->getWorldBox().getCenter() - origin; + F32 dist = force.magnitudeSafe(); + force.normalize(); + + if (dist == 0.0f) + force *= magnitude; + else + force *= mClampF(radius / dist, 0.0f, 1.0f) * magnitude; + + mPhysicsRep->applyImpulse(origin, force); + + // TODO: There is no simple way to really sync this sort of an + // event with the client. + // + // The best is to send the current physics snapshot, calculate the + // time difference from when this event occured and the time when the + // client recieves it, and then extrapolate where it should be. + // + // Even then its impossible to be absolutely sure its synced. + // + // Bottom line... you shouldn't use physics over the network like this. + // +} + +void RigidBodyComponent::updateContainerForces() +{ + PROFILE_SCOPE(RigidBodyComponent_updateContainerForces); + + // If we're not simulating don't update forces. + PhysicsWorld *world = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + if (!world || !world->isEnabled()) + return; + + ContainerQueryInfo info; + info.box = mOwner->getWorldBox(); + info.mass = mMass; + + // Find and retreive physics info from intersecting WaterObject(s) + mOwner->getContainer()->findObjects(mOwner->getWorldBox(), WaterObjectType | PhysicalZoneObjectType, findRouter, &info); + + // Calculate buoyancy and drag + F32 angDrag = mAngularDamping; + F32 linDrag = mLinearDamping; + F32 buoyancy = 0.0f; + Point3F cmass = mPhysicsRep->getCMassPosition(); + + F32 density = mBuoyancyDensity; + if (density > 0.0f) + { + if (info.waterCoverage > 0.0f) + { + F32 waterDragScale = info.waterViscosity * mWaterDampingScale; + F32 powCoverage = mPow(info.waterCoverage, 0.25f); + + angDrag = mLerp(angDrag, angDrag * waterDragScale, powCoverage); + linDrag = mLerp(linDrag, linDrag * waterDragScale, powCoverage); + } + + buoyancy = (info.waterDensity / density) * mPow(info.waterCoverage, 2.0f); + + // A little hackery to prevent oscillation + // Based on this blog post: + // (http://reinot.blogspot.com/2005/11/oh-yes-they-float-georgie-they-all.html) + // JCF: disabled! + Point3F buoyancyForce = buoyancy * -world->getGravity() * TickSec * mMass; + mPhysicsRep->applyImpulse(cmass, buoyancyForce); + } + + // Update the dampening as the container might have changed. + mPhysicsRep->setDamping(linDrag, angDrag); + + // Apply physical zone forces. + if (!info.appliedForce.isZero()) + mPhysicsRep->applyImpulse(cmass, info.appliedForce); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Physics/rigidBodyComponent.h b/Engine/source/T3D/components/Physics/rigidBodyComponent.h new file mode 100644 index 0000000000..85b98379da --- /dev/null +++ b/Engine/source/T3D/components/Physics/rigidBodyComponent.h @@ -0,0 +1,183 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef RIGID_BODY_COMPONENT_H +#define RIGID_BODY_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/Components/Component.h" +#endif +#ifndef _T3D_PHYSICSCOMMON_H_ +#include "T3D/physics/physicsCommon.h" +#endif +#ifndef COLLISION_COMPONENT_H +#include "T3D/Components/collision/collisionComponent.h" +#endif +#ifndef PHYSICS_COMPONENT_INTERFACE_H +#include "T3D/Components/physics/physicsComponentInterface.h" +#endif + +class PhysicsBody; + +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class RigidBodyComponent : public Component, public PhysicsComponentInterface +{ + typedef Component Parent; + + enum SimType + { + /// This physics representation only exists on the client + /// world and the server only does ghosting. + SimType_ClientOnly, + + /// The physics representation only exists on the server world + /// and the client gets delta updates for rendering. + SimType_ServerOnly, + + /// The physics representation exists on the client and the server + /// worlds with corrections occuring when the client gets out of sync. + SimType_ClientServer, + + /// The bits used to pack the SimType field. + SimType_Bits = 3, + + } mSimType; + + // + // + /// The current physics state. + PhysicsState mState; + + /// The previous and current render states. + PhysicsState mRenderState[2]; + + /// The abstracted physics actor. + PhysicsBody *mPhysicsRep; + + PhysicsWorld *mWorld; + + /// The starting position to place the shape when + /// the level begins or is reset. + MatrixF mResetPos; + // + // + + /// If true then no corrections are sent from the server + /// and/or applied from the client. + /// + /// This is only ment for debugging. + /// + static bool smNoCorrections; + + /// If true then no smoothing is done on the client when + /// applying server corrections. + /// + /// This is only ment for debugging. + /// + static bool smNoSmoothing; + + /// + F32 mMass; + + /// + F32 mDynamicFriction; + + /// + F32 mStaticFriction; + + /// + F32 mRestitution; + + /// + F32 mLinearDamping; + + /// + F32 mAngularDamping; + + /// + F32 mLinearSleepThreshold; + + /// + F32 mAngularSleepThreshold; + + // A scale applied to the normal linear and angular damping + // when the object enters a water volume. + F32 mWaterDampingScale; + + // The density of this object used for water buoyancy effects. + F32 mBuoyancyDensity; + + CollisionComponent* mOwnerColComponent; + + enum MaskBits { + PositionMask = Parent::NextFreeMask << 0, + FreezeMask = Parent::NextFreeMask << 1, + StateMask = Parent::NextFreeMask << 2, + VelocityMask = Parent::NextFreeMask << 3, + NextFreeMask = Parent::NextFreeMask << 4 + }; + +public: + RigidBodyComponent(); + virtual ~RigidBodyComponent(); + DECLARE_CONOBJECT(RigidBodyComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void onComponentAdd(); + virtual void onComponentRemove(); + + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + + virtual void ownerTransformSet(MatrixF *mat); + + inline F32 getMass() { return mMass; } + Point3F getVelocity() const { return mState.linVelocity; } + void applyImpulse(const Point3F &pos, const VectorF &vec); + void applyRadialImpulse(const Point3F &origin, F32 radius, F32 magnitude); + + void updateContainerForces(); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + virtual void processTick(); + + void findContact(); + + /// Save the current transform as where we return to when a physics reset + /// event occurs. This is automatically set in onAdd but some manipulators + /// such as Prefab need to make use of this. + void storeRestorePos(); + + void updatePhysics(PhysicsCollision *collision = NULL); + + void _onPhysicsReset(PhysicsResetEvent reset); +}; + +#endif // _RIGID_BODY_COMPONENT_H_ diff --git a/Engine/source/T3D/components/Render/MeshComponent.cpp b/Engine/source/T3D/components/Render/MeshComponent.cpp new file mode 100644 index 0000000000..9444fa9176 --- /dev/null +++ b/Engine/source/T3D/components/Render/MeshComponent.cpp @@ -0,0 +1,524 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#include "platform/platform.h" +#include "console/consoleTypes.h" +#include "T3D/Components/Render/MeshComponent.h" +#include "core/util/safeDelete.h" +#include "core/resourceManager.h" +#include "core/stream/fileStream.h" +#include "console/consoleTypes.h" +#include "console/consoleObject.h" +#include "core/stream/bitStream.h" +#include "sim/netConnection.h" +#include "gfx/gfxTransformSaver.h" +#include "console/engineAPI.h" +#include "lighting/lightQuery.h" +#include "scene/sceneManager.h" +#include "gfx/bitmap/ddsFile.h" +#include "gfx/bitmap/ddsUtils.h" +#include "gfx/gfxTextureManager.h" +#include "materials/materialFeatureTypes.h" +#include "renderInstance/renderImposterMgr.h" +#include "util/imposterCapture.h" +#include "gfx/sim/debugDraw.h" +#include "gfx/gfxDrawUtil.h" +#include "materials/materialManager.h" +#include "materials/matInstance.h" +#include "core/strings/findMatch.h" +#include "T3D/components/Render/MeshComponent_ScriptBinding.h" + +////////////////////////////////////////////////////////////////////////// +// Constructor/Destructor +////////////////////////////////////////////////////////////////////////// +MeshComponent::MeshComponent() : Component() +{ + mShapeName = StringTable->insert(""); + mShapeAsset = StringTable->insert(""); + + mChangingMaterials.clear(); + + mMaterials.clear(); + + mFriendlyName = "Mesh Component"; + mComponentType = "Render"; + + mDescription = getDescriptionText("Causes the object to render a non-animating 3d shape using the file provided."); + + mNetworked = true; + mNetFlags.set(Ghostable | ScopeAlways); +} + +MeshComponent::~MeshComponent(){} + +IMPLEMENT_CO_NETOBJECT_V1(MeshComponent); + +//========================================================================================== +void MeshComponent::boneObject::addObject(SimObject* object) +{ + SceneObject* sc = dynamic_cast(object); + + if(sc && mOwner) + { + if(TSShape* shape = mOwner->getShape()) + { + S32 nodeID = shape->findNode(mBoneName); + + //we may have a offset on the shape's center + //so make sure we accomodate for that when setting up the mount offsets + MatrixF mat = mOwner->getNodeTransform(nodeID); + + mOwner->getOwner()->mountObject(sc, nodeID, mat); + } + } +} + +bool MeshComponent::onAdd() +{ + if(! Parent::onAdd()) + return false; + + // Register for the resource change signal. + ResourceManager::get().getChangedSignal().notify( this, &MeshComponent::_onResourceChanged ); + + return true; +} + +void MeshComponent::onComponentAdd() +{ + Parent::onComponentAdd(); + + //get the default shape, if any + updateShape(); +} + +void MeshComponent::onRemove() +{ + Parent::onRemove(); + + SAFE_DELETE(mShapeInstance); +} + +void MeshComponent::onComponentRemove() +{ + if(mOwner) + { + Point3F pos = mOwner->getPosition(); //store our center pos + mOwner->setObjectBox(Box3F(Point3F(-1,-1,-1), Point3F(1,1,1))); + mOwner->setPosition(pos); + } + + Parent::onComponentRemove(); +} + +void MeshComponent::initPersistFields() +{ + Parent::initPersistFields(); + + //create a hook to our internal variables + addGroup("Model"); + addProtectedField("MeshAsset", TypeAssetId, Offset(mShapeAsset, MeshComponent), &_setMesh, &defaultProtectedGetFn, + "The asset Id used for the mesh.", AbstractClassRep::FieldFlags::FIELD_ComponentInspectors); + endGroup("Model"); +} + +bool MeshComponent::_setMesh(void *object, const char *index, const char *data) +{ + MeshComponent *rbI = static_cast(object); + + // Sanity! + AssertFatal(data != NULL, "Cannot use a NULL asset Id."); + + return rbI->setMeshAsset(data); +} + +bool MeshComponent::_setShape( void *object, const char *index, const char *data ) +{ + MeshComponent *rbI = static_cast(object); + rbI->mShapeName = StringTable->insert(data); + rbI->updateShape(); //make sure we force the update to resize the owner bounds + rbI->setMaskBits(ShapeMask); + + return true; +} + +bool MeshComponent::setMeshAsset(const char* assetName) +{ + // Fetch the asset Id. + mMeshAssetId = StringTable->insert(assetName); + mMeshAsset.setAssetId(mMeshAssetId); + + if (mMeshAsset.isNull()) + { + Con::errorf("[MeshComponent] Failed to load mesh asset."); + return false; + } + + mShapeName = mMeshAssetId; + mShapeAsset = mShapeName; + updateShape(); //make sure we force the update to resize the owner bounds + setMaskBits(ShapeMask); + + return true; +} + +void MeshComponent::_onResourceChanged( const Torque::Path &path ) +{ + if ( path != Torque::Path( mShapeName ) ) + return; + + updateShape(); + setMaskBits(ShapeMask); +} + +void MeshComponent::inspectPostApply() +{ + Parent::inspectPostApply(); +} + +U32 MeshComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) +{ + U32 retMask = Parent::packUpdate(con, mask, stream); + + if (!mOwner || con->getGhostIndex(mOwner) == -1) + { + stream->writeFlag(false); + stream->writeFlag(false); + + if (mask & ShapeMask) + retMask |= ShapeMask; + if (mask & MaterialMask) + retMask |= MaterialMask; + return retMask; + } + + if (stream->writeFlag(mask & ShapeMask)) + { + stream->writeString(mShapeName); + } + + if (stream->writeFlag( mask & MaterialMask )) + { + stream->writeInt(mChangingMaterials.size(), 16); + + for(U32 i=0; i < mChangingMaterials.size(); i++) + { + stream->writeInt(mChangingMaterials[i].slot, 16); + con->packNetStringHandleU(stream, NetStringHandle(mChangingMaterials[i].matName)); + } + + mChangingMaterials.clear(); + } + + return retMask; +} + +void MeshComponent::unpackUpdate(NetConnection *con, BitStream *stream) +{ + Parent::unpackUpdate(con, stream); + + if(stream->readFlag()) + { + mShapeName = stream->readSTString(); + setMeshAsset(mShapeName); + updateShape(); + } + + if(stream->readFlag()) + { + mChangingMaterials.clear(); + U32 materialCount = stream->readInt(16); + + for(U32 i=0; i < materialCount; i++) + { + matMap newMatMap; + newMatMap.slot = stream->readInt(16); + newMatMap.matName = String(con->unpackNetStringHandleU(stream).getString()); + + mChangingMaterials.push_back(newMatMap); + } + + updateMaterials(); + } +} + +void MeshComponent::prepRenderImage( SceneRenderState *state ) +{ + if (!mEnabled || !mOwner || !mShapeInstance) + return; + + Point3F cameraOffset; + mOwner->getRenderTransform().getColumn(3, &cameraOffset); + cameraOffset -= state->getDiffuseCameraPosition(); + F32 dist = cameraOffset.len(); + if (dist < 0.01f) + dist = 0.01f; + + Point3F objScale = getOwner()->getScale(); + F32 invScale = (1.0f / getMax(getMax(objScale.x, objScale.y), objScale.z)); + + mShapeInstance->setDetailFromDistance(state, dist * invScale); + + if (mShapeInstance->getCurrentDetail() < 0) + return; + + GFXTransformSaver saver; + + // Set up our TS render state. + TSRenderState rdata; + rdata.setSceneState(state); + rdata.setFadeOverride(1.0f); + rdata.setOriginSort(false); + + // We might have some forward lit materials + // so pass down a query to gather lights. + LightQuery query; + query.init(mOwner->getWorldSphere()); + rdata.setLightQuery(&query); + + MatrixF mat = mOwner->getRenderTransform(); + Point3F renderPos = mat.getPosition(); + EulerF renderRot = mat.toEuler(); + mat.scale(objScale); + GFX->setWorldMatrix(mat); + + mShapeInstance->render(rdata); +} + +void MeshComponent::updateShape() +{ + bool isServer = isServerObject(); + + if ((mShapeName && mShapeName[0] != '\0') || (mShapeAsset && mShapeAsset[0] != '\0')) + { + if (mMeshAsset == NULL) + return; + + mShape = mMeshAsset->getShape(); + + if (!mShape) + return; + + setupShape(); + + //Do this on both the server and client + S32 materialCount = mShape->materialList->getMaterialNameList().size(); + + if(isServerObject()) + { + //we need to update the editor + for (U32 i = 0; i < mFields.size(); i++) + { + //find any with the materialslot title and clear them out + if (FindMatch::isMatch("MaterialSlot*", mFields[i].mFieldName, false)) + { + setDataField(mFields[i].mFieldName, NULL, ""); + mFields.erase(i); + continue; + } + } + + //next, get a listing of our materials in the shape, and build our field list for them + char matFieldName[128]; + + if(materialCount > 0) + mComponentGroup = StringTable->insert("Materials"); + + for(U32 i=0; i < materialCount; i++) + { + String materialname = mShape->materialList->getMaterialName(i); + if(materialname == String("ShapeBounds")) + continue; + + dSprintf(matFieldName, 128, "MaterialSlot%d", i); + + addComponentField(matFieldName, "A material used in the shape file", "TypeAssetId", materialname, ""); + } + + if(materialCount > 0) + mComponentGroup = ""; + } + + if(mOwner != NULL) + { + Point3F min, max, pos; + pos = mOwner->getPosition(); + + mOwner->getWorldToObj().mulP(pos); + + min = mShape->bounds.minExtents; + max = mShape->bounds.maxExtents; + + mShapeBounds.set(min, max); + + mOwner->setObjectBox(Box3F(min, max)); + + if( mOwner->getSceneManager() != NULL ) + mOwner->getSceneManager()->notifyObjectDirty( mOwner ); + } + + //finally, notify that our shape was changed + onShapeInstanceChanged.trigger(this); + } +} + +void MeshComponent::setupShape() +{ + mShapeInstance = new TSShapeInstance(mShape, true); +} + +void MeshComponent::updateMaterials() +{ + if (mChangingMaterials.empty() || !mShape) + return; + + TSMaterialList* pMatList = mShapeInstance->getMaterialList(); + pMatList->setTextureLookupPath(getShapeResource().getPath().getPath()); + + const Vector &materialNames = pMatList->getMaterialNameList(); + for ( S32 i = 0; i < materialNames.size(); i++ ) + { + const String &pName = materialNames[i]; + + for(U32 m=0; m < mChangingMaterials.size(); m++) + { + if(mChangingMaterials[m].slot == i) + { + pMatList->renameMaterial( i, mChangingMaterials[m].matName ); + } + } + + mChangingMaterials.clear(); + } + + // Initialize the material instances + mShapeInstance->initMaterialList(); +} + +MatrixF MeshComponent::getNodeTransform(S32 nodeIdx) +{ + if (mShape) + { + S32 nodeCount = getShape()->nodes.size(); + + if(nodeIdx >= 0 && nodeIdx < nodeCount) + { + //animate(); + MatrixF mountTransform = mShapeInstance->mNodeTransforms[nodeIdx]; + mountTransform.mul(mOwner->getRenderTransform()); + + return mountTransform; + } + } + + return MatrixF::Identity; +} + +S32 MeshComponent::getNodeByName(String nodeName) +{ + if (mShape) + { + S32 nodeIdx = getShape()->findNode(nodeName); + + return nodeIdx; + } + + return -1; +} + +bool MeshComponent::castRayRendered(const Point3F &start, const Point3F &end, RayInfo *info) +{ + return false; +} + +void MeshComponent::mountObjectToNode(SceneObject* objB, String node, MatrixF txfm) +{ + const char* test; + test = node.c_str(); + if(dIsdigit(test[0])) + { + getOwner()->mountObject(objB, dAtoi(node), txfm); + } + else + { + if(TSShape* shape = getShape()) + { + S32 idx = shape->findNode(node); + getOwner()->mountObject(objB, idx, txfm); + } + } +} + +void MeshComponent::onDynamicModified(const char* slotName, const char* newValue) +{ + if(FindMatch::isMatch( "materialslot*", slotName, false )) + { + if(!getShape()) + return; + + S32 slot = -1; + String outStr( String::GetTrailingNumber( slotName, slot ) ); + + if(slot == -1) + return; + + bool found = false; + for(U32 i=0; i < mChangingMaterials.size(); i++) + { + if(mChangingMaterials[i].slot == slot) + { + mChangingMaterials[i].matName = String(newValue); + found = true; + } + } + + if(!found) + { + matMap newMatMap; + newMatMap.slot = slot; + newMatMap.matName = String(newValue); + + mChangingMaterials.push_back(newMatMap); + } + + setMaskBits(MaterialMask); + } + + Parent::onDynamicModified(slotName, newValue); +} + +void MeshComponent::changeMaterial(U32 slot, const char* newMat) +{ + + char fieldName[512]; + + //update our respective field + dSprintf(fieldName, 512, "materialSlot%d", slot); + setDataField(fieldName, NULL, newMat); +} + +void MeshComponent::onInspect() +{ +} + +void MeshComponent::onEndInspect() +{ +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Render/MeshComponent.h b/Engine/source/T3D/components/Render/MeshComponent.h new file mode 100644 index 0000000000..e06a0ccee8 --- /dev/null +++ b/Engine/source/T3D/components/Render/MeshComponent.h @@ -0,0 +1,183 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef STATIC_MESH_COMPONENT_H +#define STATIC_MESH_COMPONENT_H + +#ifndef COMPONENT_H +#include "T3D/Components/Component.h" +#endif +#ifndef __RESOURCE_H__ +#include "core/resource.h" +#endif +#ifndef _TSSHAPE_H_ +#include "ts/tsShape.h" +#endif +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif +#ifndef _MBOX_H_ +#include "math/mBox.h" +#endif +#ifndef ENTITY_H +#include "T3D/Entity.h" +#endif +#ifndef _NETSTRINGTABLE_H_ + #include "sim/netStringTable.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/Components/coreInterfaces.h" +#endif +#ifndef RENDER_COMPONENT_INTERFACE_H +#include "T3D/Components/Render/renderComponentInterface.h" +#endif +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif +#ifndef _SHAPE_ASSET_H_ +#include "T3D/assets/ShapeAsset.h" +#endif +#ifndef _GFXVERTEXFORMAT_H_ +#include "gfx/gfxVertexFormat.h" +#endif + +class TSShapeInstance; +class SceneRenderState; +////////////////////////////////////////////////////////////////////////// +/// +/// +////////////////////////////////////////////////////////////////////////// +class MeshComponent : public Component, + public RenderComponentInterface, + public CastRayRenderedInterface, + public EditorInspectInterface +{ + typedef Component Parent; + +protected: + enum + { + ShapeMask = Parent::NextFreeMask, + MaterialMask = Parent::NextFreeMask << 1, + NextFreeMask = Parent::NextFreeMask << 2, + }; + + StringTableEntry mShapeName; + StringTableEntry mShapeAsset; + TSShape* mShape; + Box3F mShapeBounds; + Point3F mCenterOffset; + + struct matMap + { + String matName; + U32 slot; + }; + + Vector mChangingMaterials; + Vector mMaterials; + + class boneObject : public SimGroup + { + MeshComponent *mOwner; + public: + boneObject(MeshComponent *owner){ mOwner = owner; } + + StringTableEntry mBoneName; + S32 mItemID; + + virtual void addObject(SimObject *obj); + }; + + Vector mNodesList; + +public: + StringTableEntry mMeshAssetId; + AssetPtr mMeshAsset; + + TSShapeInstance* mShapeInstance; + +public: + MeshComponent(); + virtual ~MeshComponent(); + DECLARE_CONOBJECT(MeshComponent); + + virtual bool onAdd(); + virtual void onRemove(); + static void initPersistFields(); + + virtual void inspectPostApply(); + + virtual void prepRenderImage(SceneRenderState *state); + + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); + virtual void unpackUpdate(NetConnection *con, BitStream *stream); + + Box3F getShapeBounds() { return mShapeBounds; } + + virtual MatrixF getNodeTransform(S32 nodeIdx); + S32 getNodeByName(String nodeName); + + void setupShape(); + void updateShape(); + void updateMaterials(); + + virtual void onComponentRemove(); + virtual void onComponentAdd(); + + static bool _setMesh(void *object, const char *index, const char *data); + static bool _setShape(void *object, const char *index, const char *data); + const char* _getShape(void *object, const char *data); + + bool setMeshAsset(const char* assetName); + + virtual TSShape* getShape() { if (mMeshAsset) return mMeshAsset->getShape(); else return NULL; } + virtual TSShapeInstance* getShapeInstance() { return mShapeInstance; } + + Resource getShapeResource() { if (mMeshAsset) return mMeshAsset->getShapeResource(); else return NULL; } + + void _onResourceChanged(const Torque::Path &path); + + virtual bool castRayRendered(const Point3F &start, const Point3F &end, RayInfo *info); + + void mountObjectToNode(SceneObject* objB, String node, MatrixF txfm); + + virtual void onDynamicModified(const char* slotName, const char* newValue); + + void changeMaterial(U32 slot, const char* newMat); + + virtual void onInspect(); + virtual void onEndInspect(); + + virtual Vector getNodeTransforms() + { + Vector bob; + return bob; + } + + virtual void setNodeTransforms(Vector transforms) + { + return; + } +}; + +#endif diff --git a/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h b/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h new file mode 100644 index 0000000000..08dd6dbfd6 --- /dev/null +++ b/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h @@ -0,0 +1,155 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "console/engineAPI.h" +#include "T3D/components/Render/MeshComponent.h" +#include "scene/sceneObject.h" +#include "math/mTransform.h" + +DefineEngineMethod(MeshComponent, getShapeBounds, Box3F, (), , + "@brief Get the cobject we're in contact with.\n\n" + + "The controlling client is the one that will send moves to us to act on.\n" + + "@return the ID of the controlling GameConnection, or 0 if this object is not " + "controlled by any client.\n" + + "@see GameConnection\n") +{ + return object->getShapeBounds(); +} + +DefineEngineMethod(MeshComponent, mountObject, bool, + (SceneObject* objB, String node, TransformF txfm), (MatrixF::Identity), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (objB) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + object->mountObjectToNode(objB, node, /*MatrixF::Identity*/txfm.getMatrix()); + return true; + } + return false; +} + +DefineEngineMethod(MeshComponent, getNodeTransform, TransformF, + (S32 node), (-1), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (node != -1) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + MatrixF mat = object->getNodeTransform(node); + return mat; + } + + return TransformF::Identity; +} + +DefineEngineMethod(MeshComponent, getNodeEulerRot, EulerF, + (S32 node, bool radToDeg), (-1, true), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (node != -1) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + MatrixF mat = object->getNodeTransform(node); + + EulerF eul = mat.toEuler(); + if (radToDeg) + eul = EulerF(mRadToDeg(eul.x), mRadToDeg(eul.y), mRadToDeg(eul.z)); + + return eul; + } + + return EulerF(0, 0, 0); +} + +DefineEngineMethod(MeshComponent, getNodePosition, Point3F, + (S32 node), (-1), + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (node != -1) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + MatrixF mat = object->getNodeTransform(node); + + return mat.getPosition(); + } + + return Point3F(0, 0, 0); +} + +DefineEngineMethod(MeshComponent, getNodeByName, S32, + (String nodeName), , + "@brief Mount objB to this object at the desired slot with optional transform.\n\n" + + "@param objB Object to mount onto us\n" + "@param slot Mount slot ID\n" + "@param txfm (optional) mount offset transform\n" + "@return true if successful, false if failed (objB is not valid)") +{ + if (!nodeName.isEmpty()) + { + //BUG: Unsure how it broke, but atm the default transform passed in here is rotated 180 degrees. This doesn't happen + //for the SceneObject mountobject method. Hackish, but for now, just default to a clean MatrixF::Identity + //object->mountObjectToNode( objB, node, /*MatrixF::Identity*/txfm.getMatrix() ); + S32 node = object->getNodeByName(nodeName); + + return node; + } + + return -1; +} + +DefineEngineMethod(MeshComponent, changeMaterial, void, (U32 slot, const char* newMat), (0, ""), + "@brief Change one of the materials on the shape.\n\n") +{ + object->changeMaterial(slot, newMat); +} \ No newline at end of file diff --git a/Engine/source/T3D/components/Render/renderComponentInterface.h b/Engine/source/T3D/components/Render/renderComponentInterface.h new file mode 100644 index 0000000000..67d9a2f8fc --- /dev/null +++ b/Engine/source/T3D/components/Render/renderComponentInterface.h @@ -0,0 +1,62 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef RENDER_COMPONENT_INTERFACE_H +#define RENDER_COMPONENT_INTERFACE_H + +#ifndef _TSSHAPE_H_ +#include "ts/TSShape.h" +#endif +#ifndef _TSSHAPEINSTANCE_H_ +#include "ts/TSShapeInstance.h" +#endif +#ifndef CORE_INTERFACES_H +#include "T3D/Components/coreInterfaces.h" +#endif + +class RenderComponentInterface : public Interface < RenderComponentInterface > +{ +public: + virtual void prepRenderImage(SceneRenderState *state) = 0; + + virtual TSShape* getShape() = 0; + + Signal< void(RenderComponentInterface*) > RenderComponentInterface::onShapeChanged; + + virtual TSShapeInstance* getShapeInstance() = 0; + + virtual MatrixF getNodeTransform(S32 nodeIdx) = 0; + + virtual Vector getNodeTransforms() = 0; + + virtual void setNodeTransforms(Vector transforms) = 0; + + Signal< void(RenderComponentInterface*) > RenderComponentInterface::onShapeInstanceChanged; +}; + +class CastRayRenderedInterface// : public Interface +{ +public: + virtual bool castRayRendered(const Point3F &start, const Point3F &end, RayInfo* info)=0; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/T3D/components/coreInterfaces.h b/Engine/source/T3D/components/coreInterfaces.h new file mode 100644 index 0000000000..852628778c --- /dev/null +++ b/Engine/source/T3D/components/coreInterfaces.h @@ -0,0 +1,101 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef CORE_INTERFACES_H +#define CORE_INTERFACES_H + +#ifndef _SCENERENDERSTATE_H_ +#include "scene/sceneRenderState.h" +#endif + +template +class Interface +{ +public: + static Vector all; + + Interface() + { + all.push_back((T*)this); + } + virtual ~Interface() + { + for (U32 i = 0; i < all.size(); i++) + { + if (all[i] == (T*)this) + { + all.erase(i); + return; + } + } + } +}; +template Vector Interface::all(0); + +//Basically a file for generic interfaces that many behaviors may make use of +class SetTransformInterface// : public Interface +{ +public: + virtual void setTransform( MatrixF transform ); + virtual void setTransform( Point3F pos, EulerF rot ); +}; + +class UpdateInterface : public Interface +{ +public: + virtual void processTick(){} + virtual void interpolateTick(F32 dt){} + virtual void advanceTime(F32 dt){} +}; + +class BehaviorFieldInterface// : public Interface +{ +public: + virtual void onFieldChange(const char* fieldName, const char* newValue){}; +}; + +class CameraInterface// : public Interface +{ +public: + virtual bool getCameraTransform(F32* pos,MatrixF* mat)=0; + virtual void onCameraScopeQuery(NetConnection *cr, CameraScopeQuery * query)=0; + virtual Frustum getFrustum()=0; + virtual F32 getCameraFov()=0; + virtual void setCameraFov(F32 fov)=0; + + virtual bool isValidCameraFov(F32 fov)=0; +}; + +class CastRayInterface// : public Interface +{ +public: + virtual bool castRay(const Point3F &start, const Point3F &end, RayInfo* info)=0; +}; + +class EditorInspectInterface// : public Interface +{ +public: + virtual void onInspect()=0; + virtual void onEndInspect()=0; +}; + +#endif \ No newline at end of file diff --git a/Engine/source/console/consoleObject.h b/Engine/source/console/consoleObject.h index 8ecbb80317..749129ba16 100644 --- a/Engine/source/console/consoleObject.h +++ b/Engine/source/console/consoleObject.h @@ -473,6 +473,8 @@ class AbstractClassRep : public ConsoleBaseType enum FieldFlags { FIELD_HideInInspectors = BIT( 0 ), ///< Do not show the field in inspectors. + FIELD_ComponentInspectors = BIT(1), ///< Custom fields used by components. They are likely to be non-standard size/configuration, so + ///< They are handled specially }; struct Field From b3b50abd9bfd2293914b32499dbd31bae263c492 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 14 May 2016 12:40:13 -0500 Subject: [PATCH 221/324] Integrates components into the update and render loop. --- Engine/source/T3D/gameBase/processList.cpp | 8 ++++++ .../T3D/gameBase/std/stdGameProcess.cpp | 25 +++++++++++++++++++ Engine/source/scene/sceneRenderState.cpp | 14 ++++++++++- 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/Engine/source/T3D/gameBase/processList.cpp b/Engine/source/T3D/gameBase/processList.cpp index 32b04ca3c9..1f891fe092 100644 --- a/Engine/source/T3D/gameBase/processList.cpp +++ b/Engine/source/T3D/gameBase/processList.cpp @@ -27,6 +27,9 @@ #include "platform/profiler.h" #include "console/consoleTypes.h" +#include "T3D/Components/coreInterfaces.h" + +#include "T3D/Components/Component.h" //---------------------------------------------------------------------------- ProcessObject::ProcessObject() @@ -268,6 +271,11 @@ void ProcessList::advanceObjects() onTickObject(pobj); } + for (U32 i = 0; i < UpdateInterface::all.size(); i++) + { + UpdateInterface::all[i]->processTick(); + } + mTotalTicks++; PROFILE_END(); diff --git a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp index 63122b2231..51222568c2 100644 --- a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp +++ b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp @@ -36,6 +36,8 @@ #include "T3D/gameBase/gameConnection.h" #include "T3D/gameBase/std/stdMoveList.h" #include "T3D/fx/cameraFXMgr.h" +#include "T3D/Components/coreInterfaces.h" +#include "T3D/Components/Component.h" MODULE_BEGIN( ProcessList ) @@ -132,6 +134,16 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) obj = obj->mProcessLink.next; } + for (U32 i = 0; i < UpdateInterface::all.size(); i++) + { + Component *comp = dynamic_cast(UpdateInterface::all[i]); + + if (!comp->isClientObject() || !comp->isActive()) + continue; + + UpdateInterface::all[i]->interpolateTick(mLastDelta); + } + // Inform objects of total elapsed delta so they can advance // client side animations. F32 dt = F32(timeDelta) / 1000; @@ -146,6 +158,19 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) obj = obj->mProcessLink.next; } + for (U32 i = 0; i < UpdateInterface::all.size(); i++) + { + Component *comp = dynamic_cast(UpdateInterface::all[i]); + + if (comp) + { + if (!comp->isClientObject() || !comp->isActive()) + continue; + } + + UpdateInterface::all[i]->advanceTime(dt); + } + return ret; } diff --git a/Engine/source/scene/sceneRenderState.cpp b/Engine/source/scene/sceneRenderState.cpp index 0aeb1d273b..3d8db7c264 100644 --- a/Engine/source/scene/sceneRenderState.cpp +++ b/Engine/source/scene/sceneRenderState.cpp @@ -26,7 +26,8 @@ #include "renderInstance/renderPassManager.h" #include "math/util/matrixSet.h" - +#include "T3D/Components/render/renderComponentInterface.h" +#include "T3D/Components/Component.h" //----------------------------------------------------------------------------- @@ -104,6 +105,17 @@ void SceneRenderState::renderObjects( SceneObject** objects, U32 numObjects ) SceneObject* object = objects[ i ]; object->prepRenderImage( this ); } + + U32 interfaceCount = RenderComponentInterface::all.size(); + for (U32 i = 0; i < RenderComponentInterface::all.size(); i++) + { + Component* comp = dynamic_cast(RenderComponentInterface::all[i]); + + if (comp->isClientObject() && comp->isActive()) + { + RenderComponentInterface::all[i]->prepRenderImage(this); + } + } PROFILE_END(); // Render what the objects have batched. From 38c18870d396724d9d31cbe4493158ad3235482d Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 14 May 2016 14:03:19 -0500 Subject: [PATCH 222/324] Adjustments to allow Entities/Components to act as cameras and control objects. --- Engine/source/T3D/gameBase/gameConnection.cpp | 63 ++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/gameBase/gameConnection.cpp b/Engine/source/T3D/gameBase/gameConnection.cpp index 7aada8048f..cb8a5c1aff 100644 --- a/Engine/source/T3D/gameBase/gameConnection.cpp +++ b/Engine/source/T3D/gameBase/gameConnection.cpp @@ -38,6 +38,8 @@ #include "T3D/gameBase/gameConnectionEvents.h" #include "console/engineAPI.h" #include "math/mTransform.h" +#include "T3D/Entity.h" +#include "T3D/Components/coreInterfaces.h" #ifdef TORQUE_HIFI_NET #include "T3D/gameBase/hifi/hifiMoveList.h" @@ -551,7 +553,9 @@ void GameConnection::setControlObject(GameBase *obj) obj->setControllingClient(this); // Update the camera's FOV to match the new control object - setControlCameraFov( obj->getCameraFov() ); + //but only if we don't have a specific camera object + if (!mCameraObject) + setControlCameraFov(obj->getCameraFov()); } // Okay, set our control object. @@ -729,7 +733,17 @@ bool GameConnection::getControlCameraFov(F32 * fov) } if (cObj) { + if (Entity* ent = dynamic_cast(cObj)) + { + if (CameraInterface* camInterface = ent->getComponent()) + { + *fov = camInterface->getCameraFov(); + } + } + else + { *fov = cObj->getCameraFov(); + } return(true); } @@ -747,7 +761,22 @@ bool GameConnection::isValidControlCameraFov(F32 fov) obj = obj->getControlObject(); } - return cObj ? cObj->isValidCameraFov(fov) : NULL; + if (cObj) + { + if (Entity* ent = dynamic_cast(cObj)) + { + if (CameraInterface* camInterface = ent->getComponent()) + { + return camInterface->isValidCameraFov(fov); + } + } + else + { + return cObj->isValidCameraFov(fov); + } + } + + return NULL; } bool GameConnection::setControlCameraFov(F32 fov) @@ -762,9 +791,25 @@ bool GameConnection::setControlCameraFov(F32 fov) } if (cObj) { + F32 newFov = 90.f; + if (Entity* ent = dynamic_cast(cObj)) + { + if (CameraInterface* camInterface = ent->getComponent()) + { + camInterface->setCameraFov(mClampF(fov, MinCameraFov, MaxCameraFov)); + newFov = camInterface->getCameraFov(); + } + else + { + Con::errorf("Attempted to setControlCameraFov, but we don't have a camera!"); + } + } + else + { // allow shapebase to clamp fov to its datablock values cObj->setCameraFov(mClampF(fov, MinCameraFov, MaxCameraFov)); F32 newFov = cObj->getCameraFov(); + } // server fov of client has 1degree resolution if( S32(newFov) != S32(mCameraFov) || newFov != fov ) @@ -1147,10 +1192,17 @@ void GameConnection::readPacket(BitStream *bstream) if (bstream->readFlag()) { + bool callScript = false; + if (mCameraObject.isNull()) + callScript = true; + S32 gIndex = bstream->readInt(NetConnection::GhostIdBitSize); GameBase* obj = dynamic_cast(resolveGhost(gIndex)); setCameraObject(obj); obj->readPacketData(this, bstream); + + if (callScript) + initialControlSet_callback(); } else setCameraObject(0); @@ -1727,6 +1779,13 @@ DefineEngineMethod( GameConnection, transmitDataBlocks, void, (S32 sequence),, // Ensure that the client knows that the datablock send is done... object->sendConnectionMessage(GameConnection::DataBlocksDone, object->getDataBlockSequence()); } + + if (iCount == 0) + { + //if we have no datablocks to send, we still need to be able to complete the level load process + //so fire off our callback anyways + object->sendConnectionMessage(GameConnection::DataBlocksDone, object->getDataBlockSequence()); + } } else { From 827e70d6747226b7f38529d4c9b10833eb884fb9 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 14 May 2016 14:12:53 -0500 Subject: [PATCH 223/324] Integration of Entities into the inspector/editor so they can call back into the tool scripts for custom handling. --- .../source/gui/controls/guiTreeViewCtrl.cpp | 58 +- Engine/source/gui/controls/guiTreeViewCtrl.h | 13 +- Engine/source/gui/editor/guiInspector.cpp | 24 +- .../gui/editor/inspector/entityGroup.cpp | 135 +++++ .../source/gui/editor/inspector/entityGroup.h | 72 +++ .../gui/editor/inspector/mountingGroup.cpp | 507 ++++++++++++++++++ .../gui/editor/inspector/mountingGroup.h | 152 ++++++ Engine/source/gui/worldEditor/editor.cpp | 4 +- 8 files changed, 960 insertions(+), 5 deletions(-) create mode 100644 Engine/source/gui/editor/inspector/entityGroup.cpp create mode 100644 Engine/source/gui/editor/inspector/entityGroup.h create mode 100644 Engine/source/gui/editor/inspector/mountingGroup.cpp create mode 100644 Engine/source/gui/editor/inspector/mountingGroup.h diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.cpp b/Engine/source/gui/controls/guiTreeViewCtrl.cpp index 99fb8b4401..c243ce6eb1 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.cpp +++ b/Engine/source/gui/controls/guiTreeViewCtrl.cpp @@ -36,7 +36,7 @@ #include "gui/editor/editorFunctions.h" #endif #include "console/engineAPI.h" - +#include "T3D/Entity.h" IMPLEMENT_CONOBJECT(GuiTreeViewCtrl); @@ -486,6 +486,14 @@ void GuiTreeViewCtrl::Item::getDisplayText(U32 bufLen, char *buf) { FrameAllocatorMarker txtAlloc; + //if we're doing the special case of forcing the item text, just skip the rest of this junk + if (mState.test(ForceItemName)) + { + StringTableEntry text = (mScriptInfo.mText) ? mScriptInfo.mText : StringTable->EmptyString(); + dStrncpy(buf, text, bufLen); + return; + } + if( mState.test( InspectorData ) ) { SimObject *pObject = getObject(); @@ -637,6 +645,18 @@ void GuiTreeViewCtrl::Item::getTooltipText(U32 bufLen, char *buf) bool GuiTreeViewCtrl::Item::isParent() const { + //We might have a special case with entities + //So if our entity either has children, or has some component with the EditorInspect interface, we return true + if (mInspectorInfo.mObject) + { + Entity* e = dynamic_cast(mInspectorInfo.mObject.getObject()); + if (e) + { + if (e->size() > 0 || e->getComponentCount() != 0) + return true; + } + } + if(mState.test(VirtualParent)) { if( !isInspectorData() ) @@ -1518,6 +1538,11 @@ bool GuiTreeViewCtrl::isValidDragTarget( Item* item ) { bool isValid = true; + // First, check if we're just going to override this from manually setting the ForceAllowDrag flag + // If that's set, we're assuming special circumstances and will just let it go on it's way + if (item->isDragTargetAllowed()) + return true; + // If this is inspector data, first make sure the item accepts all // selected objects as children. This prevents bad surprises when // certain SimSet subclasses reject children and start shoving them @@ -3462,6 +3487,11 @@ void GuiTreeViewCtrl::onMouseDragged(const GuiEvent &event) if (mSelectedItems.size() == 0) return; + //Check through to make sure all attempted dragged items even allow it + for (U32 i = 0; i < mSelectedItems.size(); i++) + if (!mSelectedItems[i]->isDragAllowed()) + return; + // Give us a little delta before we actually start a mouse drag so that // if the user moves the mouse a little while clicking, he/she does not // accidentally trigger a drag. @@ -3756,6 +3786,23 @@ void GuiTreeViewCtrl::onMouseDown(const GuiEvent & event) if( !item->isInspectorData() && item->mState.test(Item::VirtualParent) ) onVirtualParentExpand(item); + //Slightly hacky, but I'm not sure of a better setup until we get major update to the editors + //We check if our object is an entity, and if it is, we call a 'onInspect' function. + //This function is pretty much a special notifier to the entity so if it has any behaviors that do special + //stuff in the editor, it can fire that up + Entity* e = dynamic_cast(item->getObject()); + if (item->mScriptInfo.mText != StringTable->insert("Components")) + { + Entity* e = dynamic_cast(item->getObject()); + if (e) + { + if (item->isExpanded()) + e->onInspect(); + else + e->onEndInspect(); + } + } + mFlags.set( RebuildVisible ); scrollVisible(item); } @@ -4490,6 +4537,11 @@ bool GuiTreeViewCtrl::objectSearch( const SimObject *object, Item **item ) Item *pItem = mItems[i]; if ( !pItem ) + continue; + + //A bit hackish, but we make a special exception here for items that are named 'Components', as they're merely + //virtual parents to act as a container to an Entity's components + if (pItem->mScriptInfo.mText == StringTable->insert("Components")) continue; SimObject *pObj = pItem->getObject(); @@ -4555,6 +4607,10 @@ bool GuiTreeViewCtrl::onVirtualParentBuild(Item *item, bool bForceFullUpdate) // Go through our items and purge those that have disappeared from // the set. + + //Entities will be a special case here, if we're an entity, skip this step + if (dynamic_cast(srcObj)) + return true; for( Item* ptr = item->mChild; ptr != NULL; ) { diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.h b/Engine/source/gui/controls/guiTreeViewCtrl.h index e2360ed873..91f842b3d6 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.h +++ b/Engine/source/gui/controls/guiTreeViewCtrl.h @@ -75,7 +75,10 @@ class GuiTreeViewCtrl : public GuiArrayCtrl ShowClassName = BIT( 11 ), ShowObjectName = BIT( 12 ), ShowInternalName = BIT( 13 ), - ShowClassNameForUnnamed = BIT( 14 ) + ShowClassNameForUnnamed = BIT( 14 ), + ForceItemName = BIT(15), + ForceDragTarget = BIT(16), + DenyDrag = BIT(17), }; GuiTreeViewCtrl* mParentControl; @@ -169,6 +172,14 @@ class GuiTreeViewCtrl : public GuiArrayCtrl /// or false if it's just an item. bool isInspectorData() const { return mState.test(InspectorData); }; + /// Returns true if we've been manually set to allow dragging overrides. + /// As it's a manually set flag, by default it is false. + bool isDragTargetAllowed() const { return mState.test(ForceDragTarget); }; + + /// Returns true if we've been manually set to allow dragging overrides. + /// As it's a manually set flag, by default it is false. + bool isDragAllowed() const { return !mState.test(DenyDrag); }; + /// Returns true if we should show the expand art /// and make the item interact with the mouse as if /// it were a parent. diff --git a/Engine/source/gui/editor/guiInspector.cpp b/Engine/source/gui/editor/guiInspector.cpp index af12b2810a..79905ea97e 100644 --- a/Engine/source/gui/editor/guiInspector.cpp +++ b/Engine/source/gui/editor/guiInspector.cpp @@ -28,7 +28,8 @@ #include "gui/editor/inspector/dynamicGroup.h" #include "gui/containers/guiScrollCtrl.h" #include "gui/editor/inspector/customField.h" - +#include "gui/editor/inspector/entityGroup.h" +#include "gui/editor/inspector/mountingGroup.h" IMPLEMENT_CONOBJECT(GuiInspector); @@ -584,6 +585,27 @@ void GuiInspector::refresh() mGroups.push_back(general); addObject(general); + //Behavior inspector group + if (mTargets.first()->getClassRep()->isSubclassOf("Entity")) + { + GuiInspectorEntityGroup *components = new GuiInspectorEntityGroup("Components", this); + if (components != NULL) + { + components->registerObject(); + mGroups.push_back(components); + addObject(components); + } + + //Mounting group override + GuiInspectorGroup *mounting = new GuiInspectorMountingGroup("Mounting", this); + if (mounting != NULL) + { + mounting->registerObject(); + mGroups.push_back(mounting); + addObject(mounting); + } + } + // Create the inspector groups for static fields. for( TargetVector::iterator iter = mTargets.begin(); iter != mTargets.end(); ++ iter ) diff --git a/Engine/source/gui/editor/inspector/entityGroup.cpp b/Engine/source/gui/editor/inspector/entityGroup.cpp new file mode 100644 index 0000000000..7c7bd2762d --- /dev/null +++ b/Engine/source/gui/editor/inspector/entityGroup.cpp @@ -0,0 +1,135 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gui/buttons/guiIconButtonCtrl.h" +#include "gui/editor/guiInspector.h" +#include "gui/editor/inspector/entityGroup.h" +#include "core/strings/stringUnit.h" +#include "T3D/Components/Component.h" + +#include "console/engineAPI.h" + +IMPLEMENT_CONOBJECT(GuiInspectorEntityGroup); + +ConsoleDocClass(GuiInspectorEntityGroup, + "@brief Used to inspect an object's FieldDictionary (dynamic fields) instead " + "of regular persistent fields.\n\n" + "Editor use only.\n\n" + "@internal" + ); + +bool GuiInspectorEntityGroup::onAdd() +{ + if (!Parent::onAdd()) + return false; +} + +//----------------------------------------------------------------------------- +// GuiInspectorEntityGroup - add custom controls +//----------------------------------------------------------------------------- +bool GuiInspectorEntityGroup::createContent() +{ + if(!Parent::createContent()) + return false; + + Con::evaluatef("%d.stack = %d;", this->getId(), mStack->getId()); + + Con::executef(this, "createContent"); + + return true; +} + +//----------------------------------------------------------------------------- +// GuiInspectorEntityGroup - inspectGroup override +//----------------------------------------------------------------------------- +bool GuiInspectorEntityGroup::inspectGroup() +{ + const U32 numTargets = mParent->getNumInspectObjects(); + if (numTargets == 1) + { + Entity* target = dynamic_cast(mParent->getInspectObject(0)); + + Con::executef(this, "inspectObject", target->getIdString()); + } + + return true; +} + +void GuiInspectorEntityGroup::updateAllFields() +{ + // We overload this to just reinspect the group. + inspectGroup(); +} + +void GuiInspectorEntityGroup::onMouseMove(const GuiEvent &event) +{ + //mParent->mOverDivider = false; +} +ConsoleMethod(GuiInspectorEntityGroup, inspectGroup, bool, 2, 2, "Refreshes the dynamic fields in the inspector.") +{ + return object->inspectGroup(); +} + +void GuiInspectorEntityGroup::clearFields() +{ +} + +SimFieldDictionary::Entry* GuiInspectorEntityGroup::findDynamicFieldInDictionary(StringTableEntry fieldName) +{ + SimFieldDictionary * fieldDictionary = mParent->getInspectObject()->getFieldDictionary(); + + for (SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) + { + SimFieldDictionary::Entry * entry = (*ditr); + + if (entry->slotName == fieldName) + return entry; + } + + return NULL; +} + +void GuiInspectorEntityGroup::addDynamicField() +{ +} + +AbstractClassRep::Field* GuiInspectorEntityGroup::findObjectBehaviorField(Component* target, String fieldName) +{ + AbstractClassRep::FieldList& fieldList = target->getClassRep()->mFieldList; + for (AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++itr) + { + AbstractClassRep::Field* field = &(*itr); + String fldNm(field->pFieldname); + if (fldNm == fieldName) + return field; + } + return NULL; +} +ConsoleMethod(GuiInspectorEntityGroup, addDynamicField, void, 2, 2, "obj.addDynamicField();") +{ + object->addDynamicField(); +} + +ConsoleMethod(GuiInspectorEntityGroup, removeDynamicField, void, 3, 3, "") +{ +} diff --git a/Engine/source/gui/editor/inspector/entityGroup.h b/Engine/source/gui/editor/inspector/entityGroup.h new file mode 100644 index 0000000000..3275398462 --- /dev/null +++ b/Engine/source/gui/editor/inspector/entityGroup.h @@ -0,0 +1,72 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GUI_INSPECTOR_ENTITY_GROUP_H +#define GUI_INSPECTOR_ENTITY_GROUP_H + +#include "gui/editor/inspector/group.h" +#include "console/simFieldDictionary.h" +#include "T3D/Components/Component.h" +#include "gui/controls/guiPopUpCtrlEx.h" + +class GuiInspectorEntityGroup : public GuiInspectorGroup +{ +private: + typedef GuiInspectorGroup Parent; + GuiControl* mAddCtrl; + + GuiPopUpMenuCtrlEx* mAddBhvrList; + +public: + DECLARE_CONOBJECT(GuiInspectorEntityGroup); + GuiInspectorEntityGroup() { /*mNeedScroll=false;*/ }; + GuiInspectorEntityGroup(StringTableEntry groupName, SimObjectPtr parent) + : GuiInspectorGroup(groupName, parent) { /*mNeedScroll=false;*/ + }; + + //----------------------------------------------------------------------------- + // inspectGroup is overridden in GuiInspectorEntityGroup to inspect an + // objects FieldDictionary (dynamic fields) instead of regular persistent + // fields. + virtual bool onAdd(); + bool inspectGroup(); + virtual void updateAllFields(); + + void onMouseMove(const GuiEvent &event); + + // For scriptable dynamic field additions + void addDynamicField(); + + // Clear our fields (delete them) + void clearFields(); + + // Find an already existent field by name in the dictionary + virtual SimFieldDictionary::Entry* findDynamicFieldInDictionary(StringTableEntry fieldName); + + AbstractClassRep::Field* findObjectBehaviorField(Component* target, String fieldName); +protected: + // create our inner controls when we add + virtual bool createContent(); + +}; + +#endif diff --git a/Engine/source/gui/editor/inspector/mountingGroup.cpp b/Engine/source/gui/editor/inspector/mountingGroup.cpp new file mode 100644 index 0000000000..bcfa19fa9c --- /dev/null +++ b/Engine/source/gui/editor/inspector/mountingGroup.cpp @@ -0,0 +1,507 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gui/buttons/guiIconButtonCtrl.h" +#include "gui/editor/guiInspector.h" +#include "gui/editor/inspector/mountingGroup.h" +#include "core/strings/stringUnit.h" +#include "T3D/Entity.h" +#include "T3D/Components/Component.h" + +//Need this to get node lists +#include "T3D/Components/render/renderComponentInterface.h" + +IMPLEMENT_CONOBJECT(GuiInspectorMountingGroup); + +ConsoleDocClass( GuiInspectorMountingGroup, + "@brief Used to inspect an object's FieldDictionary (dynamic fields) instead " + "of regular persistent fields.\n\n" + "Editor use only.\n\n" + "@internal" +); + +//----------------------------------------------------------------------------- +// GuiInspectorMountingGroup - add custom controls +//----------------------------------------------------------------------------- +GuiInspectorMountingGroup::GuiInspectorMountingGroup( StringTableEntry groupName, SimObjectPtr parent ) + : GuiInspectorGroup( groupName, parent) +{ + mParentInspector = parent; + + targetMountCtrl = NULL; + mountCtrl = NULL; +}; + +bool GuiInspectorMountingGroup::createContent() +{ + if(!Parent::createContent()) + return false; + + //give the necessary padding for the nested controls so it looks nice. + setMargin(RectI(4,0,4,4)); + + return true; +} + +GuiControl* GuiInspectorMountingGroup::buildMenuCtrl() +{ + GuiControl* retCtrl = new GuiPopUpMenuCtrl(); + + // If we couldn't construct the control, bail! + if( retCtrl == NULL ) + return retCtrl; + + GuiPopUpMenuCtrl *menu = dynamic_cast(retCtrl); + + // Let's make it look pretty. + retCtrl->setDataField( StringTable->insert("profile"), NULL, "GuiPopUpMenuProfile" ); + //GuiInspectorTypeMenuBase::_registerEditControl( retCtrl ); + + char szName[512]; + dSprintf( szName, 512, "IE_%s_%d_%s_Field", retCtrl->getClassName(), mParentInspector->getInspectObject()->getId(), mCaption); + + // Register the object + retCtrl->registerObject( szName ); + + // Configure it to update our value when the popup is closed + char szBuffer[512]; + dSprintf( szBuffer, 512, "%d.apply( %d.getText() );", getId(), menu->getId() ); + menu->setField("Command", szBuffer ); + + return menu; +} + +bool GuiInspectorMountingGroup::buildList(Entity* ent, GuiPopUpMenuCtrl* menu) +{ + RenderComponentInterface* renderInterface = ent->getComponent(); + + if (renderInterface) + { + TSShape* shape = renderInterface->getShape(); + S32 nodeCount = shape ? shape->nodes.size() : 0; + + for(U32 i=0; i < nodeCount; i++) + { + menu->addEntry(shape->names[i], i); + } + + return true; + } + + return false; +} + +//----------------------------------------------------------------------------- +// GuiInspectorMountingGroup - inspectGroup override +//----------------------------------------------------------------------------- +bool GuiInspectorMountingGroup::inspectGroup() +{ + // We can't inspect a group without a target! + if( !mParent->getNumInspectObjects() ) + return false; + + // to prevent crazy resizing, we'll just freeze our stack for a sec.. + mStack->freeze(true); + + bool bNoGroup = false; + + // Un-grouped fields are all sorted into the 'general' group + if ( dStricmp( mCaption, "General" ) == 0 ) + bNoGroup = true; + + // Just delete all fields and recreate them (like the dynamicGroup) + // because that makes creating controls for array fields a lot easier + clearFields(); + + bool bNewItems = false; + bool bMakingArray = false; + GuiStackControl *pArrayStack = NULL; + GuiRolloutCtrl *pArrayRollout = NULL; + bool bGrabItems = false; + + AbstractClassRep* commonAncestorClass = findCommonAncestorClass(); + AbstractClassRep::FieldList& fieldList = commonAncestorClass->mFieldList; + for( AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++ itr ) + { + AbstractClassRep::Field* field = &( *itr ); + if( field->type == AbstractClassRep::StartGroupFieldType ) + { + // If we're dealing with general fields, always set grabItems to true (to skip them) + if( bNoGroup == true ) + bGrabItems = true; + else if( dStricmp( field->pGroupname, mCaption ) == 0 ) + bGrabItems = true; + continue; + } + else if ( field->type == AbstractClassRep::EndGroupFieldType ) + { + // If we're dealing with general fields, always set grabItems to false (to grab them) + if( bNoGroup == true ) + bGrabItems = false; + else if( dStricmp( field->pGroupname, mCaption ) == 0 ) + bGrabItems = false; + continue; + } + + // Skip field if it has the HideInInspectors flag set. + + if( field->flag.test( AbstractClassRep::FIELD_HideInInspectors ) ) + continue; + + if( ( bGrabItems == true || ( bNoGroup == true && bGrabItems == false ) ) && itr->type != AbstractClassRep::DeprecatedFieldType ) + { + if( bNoGroup == true && bGrabItems == true ) + continue; + + // If the field already exists, just update it + GuiInspectorField *fieldGui = findField( field->pFieldname ); + if ( fieldGui != NULL ) + { + fieldGui->updateValue(); + continue; + } + + bNewItems = true; + + if(field->pFieldname == StringTable->insert("mountNode")) + { + fieldGui = new GuiInspectorNodeListField(); + + Entity* e = dynamic_cast(mParent->getInspectObject(0)); + if(e) + (dynamic_cast(fieldGui))->setTargetEntity(e); + } + else + { + fieldGui = constructField( field->type ); + if ( fieldGui == NULL ) + fieldGui = new GuiInspectorField(); + } + + fieldGui->init( mParent, this ); + fieldGui->setInspectorField( field ); + + if( fieldGui->registerObject() ) + { + #ifdef DEBUG_SPEW + Platform::outputDebugString( "[GuiInspectorGroup] Adding field '%s'", + field->pFieldname ); + #endif + + mChildren.push_back( fieldGui ); + mStack->addObject( fieldGui ); + } + else + { + SAFE_DELETE( fieldGui ); + } + } + } + mStack->freeze(false); + mStack->updatePanes(); + + // If we've no new items, there's no need to resize anything! + if( bNewItems == false && !mChildren.empty() ) + return true; + + sizeToContents(); + + setUpdate(); + + return true; +} + +void GuiInspectorMountingGroup::updateAllFields() +{ + // We overload this to just reinspect the group. + inspectGroup(); +} + +void GuiInspectorMountingGroup::onMouseMove(const GuiEvent &event) +{ + //mParent->mOverDivider = false; + bool test = false; +} +ConsoleMethod(GuiInspectorMountingGroup, inspectGroup, bool, 2, 2, "Refreshes the dynamic fields in the inspector.") +{ + return object->inspectGroup(); +} + +void GuiInspectorMountingGroup::clearFields() +{ +} + +bool GuiInspectorMountingGroup::resize( const Point2I &newPosition, const Point2I &newExtent ) +{ + if ( !Parent::resize( newPosition, newExtent ) ) + return false; + + //check if we're set up yet + if(!targetMountCtrl || !mountCtrl) + //no? bail + return false; + + targetMountCtrl->setExtent(newExtent.x, 18); + mountCtrl->setExtent(newExtent.x, 18); + + S32 dividerPos, dividerMargin; + mParentInspector->getDivider( dividerPos, dividerMargin ); + + Point2I fieldExtent = Point2I(newExtent.x, 18); + Point2I fieldPos = Point2I(newExtent.x, 18); + + S32 editWidth = dividerPos - dividerMargin; + + targetMountText->setPosition(0,0); + targetMountText->setExtent(fieldExtent.x - dividerPos - dividerMargin, fieldExtent.y); + + targetMountNode->setPosition(fieldExtent.x - dividerPos + dividerMargin, 1); + targetMountNode->setExtent(editWidth, fieldExtent.y - 1); + + mountText->setPosition(0,0); + mountText->setExtent(fieldExtent.x - dividerPos - dividerMargin, fieldExtent.y); + + mountNode->setPosition(fieldExtent.x - dividerPos + dividerMargin, 1); + mountNode->setExtent(editWidth, fieldExtent.y - 1); + + return true; +} + +SimFieldDictionary::Entry* GuiInspectorMountingGroup::findDynamicFieldInDictionary( StringTableEntry fieldName ) +{ + SimFieldDictionary * fieldDictionary = mParent->getInspectObject()->getFieldDictionary(); + + for(SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) + { + SimFieldDictionary::Entry * entry = (*ditr); + + if( entry->slotName == fieldName ) + return entry; + } + + return NULL; +} + +void GuiInspectorMountingGroup::addDynamicField() +{ +} + +AbstractClassRep::Field* GuiInspectorMountingGroup::findObjectComponentField(Component* target, String fieldName) +{ + AbstractClassRep::FieldList& fieldList = target->getClassRep()->mFieldList; + for( AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++ itr ) + { + AbstractClassRep::Field* field = &( *itr ); + String fldNm(field->pFieldname); + if(fldNm == fieldName) + return field; + } + return NULL; +} +ConsoleMethod( GuiInspectorMountingGroup, addDynamicField, void, 2, 2, "obj.addDynamicField();" ) +{ + object->addDynamicField(); +} + +ConsoleMethod( GuiInspectorMountingGroup, removeDynamicField, void, 3, 3, "" ) +{ +} + +// +IMPLEMENT_CONOBJECT( GuiInspectorNodeListField ); + +ConsoleDocClass( GuiInspectorNodeListField, + "@brief A control that allows to edit the custom properties (text) of one or more SimObjects.\n\n" + "Editor use only.\n\n" + "@internal" +); + +GuiInspectorNodeListField::GuiInspectorNodeListField( GuiInspector *inspector, + GuiInspectorGroup* parent, + SimFieldDictionary::Entry* field, + SimObjectPtr target ) +{ + mInspector = inspector; + mParent = parent; + setBounds(0,0,100,20); + mTargetEntity = target; +} + +GuiInspectorNodeListField::GuiInspectorNodeListField() +{ + mInspector = NULL; + mParent = NULL; +} + +void GuiInspectorNodeListField::setData( const char* data, bool callbacks ) +{ + mCustomValue = data; + + //We aren't updating any mounting info if we're not mounted already + if(mTargetEntity.getObject()) + { + Entity* target = dynamic_cast(mTargetEntity->getObjectMount()); + if(target) + { + RenderComponentInterface* renderInterface = target->getComponent(); + if (renderInterface) + { + if (renderInterface->getShape()) + { + S32 nodeIdx = renderInterface->getShape()->findNode(data); + + target->mountObject(mTargetEntity, nodeIdx, MatrixF::Identity); + mTargetEntity->setMaskBits(Entity::MountedMask); + } + } + } + } + + // Force our edit to update + updateValue(); +} + +const char* GuiInspectorNodeListField::getData( U32 inspectObjectIndex ) +{ + return mCustomValue; +} + +void GuiInspectorNodeListField::updateValue() +{ + mMenu->clear(); + //mMenu->addEntry("Origin"); + + //if(mCustomValue.isEmpty()) + if(mTargetEntity.getObject()) + { + Entity* target = dynamic_cast(mTargetEntity->getObjectMount()); + if(target) + { + mMenu->addEntry("Origin"); + mMenu->setActive(true); + + RenderComponentInterface* renderInterface = target->getComponent(); + + if (renderInterface) + { + TSShape* shape = renderInterface->getShape(); + + S32 nodeCount = shape ? shape->nodes.size() : 0; + + for(U32 i=0; i < nodeCount; i++) + { + mMenu->addEntry(shape->names[i], i); + } + + S32 targetNode = mTargetEntity->getMountNode(); + if(targetNode != -1) + { + String name = shape->names[targetNode]; + mCustomValue = name; + } + else + { + mCustomValue = String("Origin"); + } + + setValue( mCustomValue ); + return; + } + } + } + + setValue("Not Mounted"); + mMenu->setActive(false); +} + +void GuiInspectorNodeListField::setDoc( const char* doc ) +{ + mDoc = StringTable->insert( doc, true ); +} + +void GuiInspectorNodeListField::setToolTip( StringTableEntry data ) +{ + static StringTableEntry sTooltipProfile = StringTable->insert( "tooltipProfile" ); + static StringTableEntry sHoverTime = StringTable->insert( "hovertime" ); + static StringTableEntry sTooltip = StringTable->insert( "tooltip" ); + + mEdit->setDataField( sTooltipProfile, NULL, "GuiToolTipProfile" ); + mEdit->setDataField( sHoverTime, NULL, "1000" ); + mEdit->setDataField( sTooltip, NULL, data ); +} + +bool GuiInspectorNodeListField::onAdd() +{ + if( !Parent::onAdd() ) + return false; + + return true; +} + +void GuiInspectorNodeListField::setInspectorField( AbstractClassRep::Field *field, + StringTableEntry caption, + const char*arrayIndex ) +{ + // Override the base just to be sure it doesn't get called. + // We don't use an AbstractClassRep::Field... + + mField = field; + mCaption = field->pFieldname; + mDoc = field->pFieldDocs; +} + +GuiControl* GuiInspectorNodeListField::constructEditControl() +{ + GuiControl* retCtrl = new GuiPopUpMenuCtrl(); + + mMenu = dynamic_cast(retCtrl); + + static StringTableEntry sProfile = StringTable->insert( "profile" ); + retCtrl->setDataField( sProfile, NULL, "ToolsGuiPopUpMenuEditProfile" ); + + // Register the object + retCtrl->registerObject(); + + char szBuffer[512]; + dSprintf( szBuffer, 512, "%d.apply( %d.getText() );", getId(), mMenu->getId() ); + mMenu->setField("Command", szBuffer ); + + return retCtrl; +} + +void GuiInspectorNodeListField::setValue( const char* newValue ) +{ + GuiPopUpMenuCtrl *ctrl = dynamic_cast( mEdit ); + if( ctrl != NULL ) + ctrl->setText( newValue ); +} + +void GuiInspectorNodeListField::_executeSelectedCallback() +{ +} + +void GuiInspectorNodeListField::setTargetEntity(SimObjectPtr target) +{ + mTargetEntity = target; +} \ No newline at end of file diff --git a/Engine/source/gui/editor/inspector/mountingGroup.h b/Engine/source/gui/editor/inspector/mountingGroup.h new file mode 100644 index 0000000000..da8ed91a61 --- /dev/null +++ b/Engine/source/gui/editor/inspector/mountingGroup.h @@ -0,0 +1,152 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GUI_INSPECTOR_MOUNTINGGROUP_H +#define GUI_INSPECTOR_MOUNTINGGROUP_H + +#include "gui/editor/inspector/group.h" +#include "console/simFieldDictionary.h" +#include "T3D/Components/Component.h" +#include "gui/controls/guiPopUpCtrlEx.h" + +#ifndef _GUI_INSPECTOR_TYPES_H_ +#include "gui/editor/guiInspectorTypes.h" +#endif + +#ifndef _ENTITY_H_ +#include "T3D/Entity.h" +#endif + +class GuiInspectorMountingGroup; + +class GuiInspectorNodeListField : public GuiInspectorField +{ + typedef GuiInspectorField Parent; + friend class GuiInspectorMountingGroup; + +public: + + GuiInspectorNodeListField( GuiInspector *inspector, GuiInspectorGroup* parent, SimFieldDictionary::Entry* field, + SimObjectPtr target ); + GuiInspectorNodeListField(); + ~GuiInspectorNodeListField() {}; + + DECLARE_CONOBJECT( GuiInspectorNodeListField ); + + virtual void setData( const char* data, bool callbacks = true ); + virtual const char* getData( U32 inspectObjectIndex = 0 ); + virtual void updateValue(); + virtual StringTableEntry getFieldName() { return StringTable->EmptyString(); } + + virtual void setDoc( const char* doc ); + virtual void setToolTip( StringTableEntry data ); + + virtual bool onAdd(); + + virtual void setInspectorField( AbstractClassRep::Field *field, + StringTableEntry caption = NULL, + const char *arrayIndex = NULL ); + + virtual GuiControl* constructEditControl(); + + virtual void setValue( const char* newValue ); + + void setTargetEntity(SimObjectPtr target); + +protected: + + virtual void _executeSelectedCallback(); + +protected: + + String mCustomValue; + StringTableEntry mDoc; + + GuiPopUpMenuCtrl *mMenu; + + SimObjectPtr mTargetEntity; +}; + +class GuiInspectorMountingGroup : public GuiInspectorGroup +{ +private: + typedef GuiInspectorGroup Parent; + GuiControl* mAddCtrl; + + GuiPopUpMenuCtrlEx* mAddBhvrList; + + GuiTextCtrl *persistText; + GuiButtonCtrl *reloadFile; + GuiButtonCtrl *saveFile; + GuiButtonCtrl *overwriteFile; + GuiButtonCtrl *mBrowseButton; + GuiControl *filePath; + + GuiControl *targetMountCtrl; + GuiTextCtrl *targetMountText; + GuiPopUpMenuCtrl *targetMountNode; + + GuiControl *mountCtrl; + GuiTextCtrl *mountText; + GuiPopUpMenuCtrl *mountNode; + + GuiInspectorNodeListField* mountNodeList; + GuiInspectorNodeListField* targetMountNodeList; + + SimObjectPtr mParentInspector; + +public: + DECLARE_CONOBJECT(GuiInspectorMountingGroup); + GuiInspectorMountingGroup() { /*mNeedScroll=false;*/ }; + GuiInspectorMountingGroup( StringTableEntry groupName, SimObjectPtr parent ); + + //----------------------------------------------------------------------------- + // inspectGroup is overridden in GuiInspectorMountingGroup to inspect an + // objects FieldDictionary (dynamic fields) instead of regular persistent + // fields. + bool inspectGroup(); + virtual void updateAllFields(); + + void onMouseMove(const GuiEvent &event); + + // For scriptable dynamic field additions + void addDynamicField(); + + // Clear our fields (delete them) + void clearFields(); + + virtual bool resize( const Point2I &newPosition, const Point2I &newExtent ); + + // Find an already existent field by name in the dictionary + virtual SimFieldDictionary::Entry* findDynamicFieldInDictionary( StringTableEntry fieldName ); + + AbstractClassRep::Field* findObjectComponentField(Component* target, String fieldName); +protected: + // create our inner controls when we add + virtual bool createContent(); + + GuiControl* buildMenuCtrl(); + + bool buildList(Entity* ent, GuiPopUpMenuCtrl* menu); +}; + +#endif diff --git a/Engine/source/gui/worldEditor/editor.cpp b/Engine/source/gui/worldEditor/editor.cpp index cfcee744d7..2f05c96ad2 100644 --- a/Engine/source/gui/worldEditor/editor.cpp +++ b/Engine/source/gui/worldEditor/editor.cpp @@ -122,9 +122,9 @@ void EditManager::editorDisabled() static GameBase * getControlObj() { GameConnection * connection = GameConnection::getLocalClientConnection(); - ShapeBase* control = 0; + GameBase* control = 0; if(connection) - control = dynamic_cast(connection->getControlObject()); + control = connection->getControlObject(); return(control); } From b4bc405dce047396ce11519c96f2bd5b10d6f65e Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 14 May 2016 14:16:43 -0500 Subject: [PATCH 224/324] Updates the include guard in ShapeAsset --- Engine/source/T3D/assets/ShapeAsset.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h index dac95a45e8..6766d1682f 100644 --- a/Engine/source/T3D/assets/ShapeAsset.h +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -19,8 +19,8 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#ifndef _SHAPE_ASSET_H_ -#define _SHAPE_ASSET_H_ +#ifndef SHAPE_ASSET_H +#define SHAPE_ASSET_H #ifndef _ASSET_BASE_H_ #include "assets/assetBase.h" @@ -84,5 +84,5 @@ class ShapeAsset : public AssetBase DefineConsoleType(TypeShapeAssetPtr, ShapeAsset) -#endif // _ASSET_BASE_H_ +#endif From 6ccf97e35de99ce254504e574aad9a31c4c092ef Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 14 May 2016 14:17:33 -0500 Subject: [PATCH 225/324] Adds ComponentAsset so the editor scripts can be aware of what components have been defined/are useable. --- Engine/source/T3D/assets/ComponentAsset.cpp | 138 ++++++++++++++++++++ Engine/source/T3D/assets/ComponentAsset.h | 77 +++++++++++ 2 files changed, 215 insertions(+) create mode 100644 Engine/source/T3D/assets/ComponentAsset.cpp create mode 100644 Engine/source/T3D/assets/ComponentAsset.h diff --git a/Engine/source/T3D/assets/ComponentAsset.cpp b/Engine/source/T3D/assets/ComponentAsset.cpp new file mode 100644 index 0000000000..2f4d524acc --- /dev/null +++ b/Engine/source/T3D/assets/ComponentAsset.cpp @@ -0,0 +1,138 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef COMPONENT_ASSET_H +#include "ComponentAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(ComponentAsset); + +ConsoleType(ComponentAssetPtr, TypeComponentAssetPtr, ComponentAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeComponentAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeComponentAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +ComponentAsset::ComponentAsset() : + mAcquireReferenceCount(0), + mpOwningAssetManager(NULL), + mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); + + mComponentName = StringTable->lookup(""); + mComponentClass = StringTable->lookup(""); + mFriendlyName = StringTable->lookup(""); + mComponentType = StringTable->lookup(""); + mDescription = StringTable->lookup(""); +} + +//----------------------------------------------------------------------------- + +ComponentAsset::~ComponentAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void ComponentAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField("componentName", TypeString, Offset(mComponentName, ComponentAsset), "Unique Name of the component. Defines the namespace of the scripts for the component."); + addField("componentClass", TypeString, Offset(mComponentClass, ComponentAsset), "Class of object this component uses."); + addField("friendlyName", TypeString, Offset(mFriendlyName, ComponentAsset), "The human-readble name for the component."); + addField("componentType", TypeString, Offset(mComponentType, ComponentAsset), "The category of the component for organizing in the editor."); + addField("description", TypeString, Offset(mDescription, ComponentAsset), "Simple description of the component."); +} + +//------------------------------------------------------------------------------ + +void ComponentAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/ComponentAsset.h b/Engine/source/T3D/assets/ComponentAsset.h new file mode 100644 index 0000000000..0eaa5a86b0 --- /dev/null +++ b/Engine/source/T3D/assets/ComponentAsset.h @@ -0,0 +1,77 @@ +#pragma once +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef COMPONENT_ASSET_H +#define COMPONENT_ASSET_H + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- +class ComponentAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + + StringTableEntry mComponentName; + StringTableEntry mComponentClass; + StringTableEntry mFriendlyName; + StringTableEntry mComponentType; + StringTableEntry mDescription; + +public: + ComponentAsset(); + virtual ~ComponentAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Declare Console Object. + DECLARE_CONOBJECT(ComponentAsset); + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} +}; + +DefineConsoleType(TypeComponentAssetPtr, ComponentAsset) + +#endif // _ASSET_BASE_H_ + From 749ac4efc202a91b4b591cedcde8f4fb6a596d86 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 14 May 2016 15:36:58 -0500 Subject: [PATCH 226/324] Adds the onPostAdd callback for when objects are created via TAML. --- Engine/source/persistence/taml/taml.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Engine/source/persistence/taml/taml.cpp b/Engine/source/persistence/taml/taml.cpp index caea660cd8..dfe9266cfa 100644 --- a/Engine/source/persistence/taml/taml.cpp +++ b/Engine/source/persistence/taml/taml.cpp @@ -284,6 +284,10 @@ SimObject* Taml::read( const char* pFilename ) // No, so warn. Con::warnf( "Taml::read() - Failed to load an object from the file '%s'.", mFilePathBuffer ); } + else + { + pSimObject->onPostAdd(); + } return pSimObject; } From b04ad52b5d9a960cdc6bed55bd38cf4cf61ec0b3 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 15 May 2016 10:11:46 -0500 Subject: [PATCH 227/324] Ensure that inclusion of any entity/component stuff is properly bracketed with the preprocessor check. --- Engine/source/T3D/gameBase/gameConnection.cpp | 20 +++++++++++++- Engine/source/T3D/gameBase/processList.cpp | 5 +++- .../T3D/gameBase/std/stdGameProcess.cpp | 7 +++++ .../source/gui/controls/guiTreeViewCtrl.cpp | 11 +++++++- Engine/source/gui/editor/guiInspector.cpp | 7 ++++- Engine/source/scene/sceneRenderState.cpp | 5 ++++ Tools/CMake/torque3d.cmake | 26 +++++++++++++++++-- 7 files changed, 75 insertions(+), 6 deletions(-) diff --git a/Engine/source/T3D/gameBase/gameConnection.cpp b/Engine/source/T3D/gameBase/gameConnection.cpp index cb8a5c1aff..05ce141519 100644 --- a/Engine/source/T3D/gameBase/gameConnection.cpp +++ b/Engine/source/T3D/gameBase/gameConnection.cpp @@ -38,8 +38,11 @@ #include "T3D/gameBase/gameConnectionEvents.h" #include "console/engineAPI.h" #include "math/mTransform.h" + +#ifdef TORQUE_EXPERIMENTAL_EC #include "T3D/Entity.h" #include "T3D/Components/coreInterfaces.h" +#endif #ifdef TORQUE_HIFI_NET #include "T3D/gameBase/hifi/hifiMoveList.h" @@ -733,6 +736,7 @@ bool GameConnection::getControlCameraFov(F32 * fov) } if (cObj) { +#ifdef TORQUE_EXPERIMENTAL_EC if (Entity* ent = dynamic_cast(cObj)) { if (CameraInterface* camInterface = ent->getComponent()) @@ -744,6 +748,9 @@ bool GameConnection::getControlCameraFov(F32 * fov) { *fov = cObj->getCameraFov(); } +#else + *fov = cObj->getCameraFov(); +#endif return(true); } @@ -763,6 +770,7 @@ bool GameConnection::isValidControlCameraFov(F32 fov) if (cObj) { +#ifdef TORQUE_EXPERIMENTAL_EC if (Entity* ent = dynamic_cast(cObj)) { if (CameraInterface* camInterface = ent->getComponent()) @@ -774,6 +782,9 @@ bool GameConnection::isValidControlCameraFov(F32 fov) { return cObj->isValidCameraFov(fov); } +#else + return cObj->isValidCameraFov(fov); +#endif } return NULL; @@ -791,6 +802,8 @@ bool GameConnection::setControlCameraFov(F32 fov) } if (cObj) { + +#ifdef TORQUE_EXPERIMENTAL_EC F32 newFov = 90.f; if (Entity* ent = dynamic_cast(cObj)) { @@ -806,10 +819,15 @@ bool GameConnection::setControlCameraFov(F32 fov) } else { + // allow shapebase to clamp fov to its datablock values + cObj->setCameraFov(mClampF(fov, MinCameraFov, MaxCameraFov)); + newFov = cObj->getCameraFov(); + } +#else // allow shapebase to clamp fov to its datablock values cObj->setCameraFov(mClampF(fov, MinCameraFov, MaxCameraFov)); F32 newFov = cObj->getCameraFov(); - } +#endif // server fov of client has 1degree resolution if( S32(newFov) != S32(mCameraFov) || newFov != fov ) diff --git a/Engine/source/T3D/gameBase/processList.cpp b/Engine/source/T3D/gameBase/processList.cpp index 1f891fe092..e012c4c025 100644 --- a/Engine/source/T3D/gameBase/processList.cpp +++ b/Engine/source/T3D/gameBase/processList.cpp @@ -27,9 +27,10 @@ #include "platform/profiler.h" #include "console/consoleTypes.h" +#ifdef TORQUE_EXPERIMENTAL_EC #include "T3D/Components/coreInterfaces.h" - #include "T3D/Components/Component.h" +#endif //---------------------------------------------------------------------------- ProcessObject::ProcessObject() @@ -271,10 +272,12 @@ void ProcessList::advanceObjects() onTickObject(pobj); } +#ifdef TORQUE_EXPERIMENTAL_EC for (U32 i = 0; i < UpdateInterface::all.size(); i++) { UpdateInterface::all[i]->processTick(); } +#endif mTotalTicks++; diff --git a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp index 51222568c2..88d0891d51 100644 --- a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp +++ b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp @@ -36,8 +36,11 @@ #include "T3D/gameBase/gameConnection.h" #include "T3D/gameBase/std/stdMoveList.h" #include "T3D/fx/cameraFXMgr.h" + +#ifdef TORQUE_EXPERIMENTAL_EC #include "T3D/Components/coreInterfaces.h" #include "T3D/Components/Component.h" +#endif MODULE_BEGIN( ProcessList ) @@ -134,6 +137,7 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) obj = obj->mProcessLink.next; } +#ifdef TORQUE_EXPERIMENTAL_EC for (U32 i = 0; i < UpdateInterface::all.size(); i++) { Component *comp = dynamic_cast(UpdateInterface::all[i]); @@ -143,6 +147,7 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) UpdateInterface::all[i]->interpolateTick(mLastDelta); } +#endif // Inform objects of total elapsed delta so they can advance // client side animations. @@ -158,6 +163,7 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) obj = obj->mProcessLink.next; } +#ifdef TORQUE_EXPERIMENTAL_EC for (U32 i = 0; i < UpdateInterface::all.size(); i++) { Component *comp = dynamic_cast(UpdateInterface::all[i]); @@ -170,6 +176,7 @@ bool StdClientProcessList::advanceTime( SimTime timeDelta ) UpdateInterface::all[i]->advanceTime(dt); } +#endif return ret; } diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.cpp b/Engine/source/gui/controls/guiTreeViewCtrl.cpp index c243ce6eb1..1e3dfa7124 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.cpp +++ b/Engine/source/gui/controls/guiTreeViewCtrl.cpp @@ -36,7 +36,9 @@ #include "gui/editor/editorFunctions.h" #endif #include "console/engineAPI.h" +#ifdef TORQUE_EXPERIMENTAL_EC #include "T3D/Entity.h" +#endif IMPLEMENT_CONOBJECT(GuiTreeViewCtrl); @@ -645,6 +647,7 @@ void GuiTreeViewCtrl::Item::getTooltipText(U32 bufLen, char *buf) bool GuiTreeViewCtrl::Item::isParent() const { +#ifdef TORQUE_EXPERIMENTAL_EC //We might have a special case with entities //So if our entity either has children, or has some component with the EditorInspect interface, we return true if (mInspectorInfo.mObject) @@ -656,6 +659,7 @@ bool GuiTreeViewCtrl::Item::isParent() const return true; } } +#endif if(mState.test(VirtualParent)) { @@ -3786,6 +3790,7 @@ void GuiTreeViewCtrl::onMouseDown(const GuiEvent & event) if( !item->isInspectorData() && item->mState.test(Item::VirtualParent) ) onVirtualParentExpand(item); +#ifdef TORQUE_EXPERIMENTAL_EC //Slightly hacky, but I'm not sure of a better setup until we get major update to the editors //We check if our object is an entity, and if it is, we call a 'onInspect' function. //This function is pretty much a special notifier to the entity so if it has any behaviors that do special @@ -3802,6 +3807,7 @@ void GuiTreeViewCtrl::onMouseDown(const GuiEvent & event) e->onEndInspect(); } } +#endif mFlags.set( RebuildVisible ); scrollVisible(item); @@ -4539,10 +4545,12 @@ bool GuiTreeViewCtrl::objectSearch( const SimObject *object, Item **item ) if ( !pItem ) continue; +#ifdef TORQUE_EXPERIMENTAL_EC //A bit hackish, but we make a special exception here for items that are named 'Components', as they're merely //virtual parents to act as a container to an Entity's components if (pItem->mScriptInfo.mText == StringTable->insert("Components")) continue; +#endif SimObject *pObj = pItem->getObject(); @@ -4607,10 +4615,11 @@ bool GuiTreeViewCtrl::onVirtualParentBuild(Item *item, bool bForceFullUpdate) // Go through our items and purge those that have disappeared from // the set. - +#ifdef TORQUE_EXPERIMENTAL_EC //Entities will be a special case here, if we're an entity, skip this step if (dynamic_cast(srcObj)) return true; +#endif for( Item* ptr = item->mChild; ptr != NULL; ) { diff --git a/Engine/source/gui/editor/guiInspector.cpp b/Engine/source/gui/editor/guiInspector.cpp index 79905ea97e..811441e2da 100644 --- a/Engine/source/gui/editor/guiInspector.cpp +++ b/Engine/source/gui/editor/guiInspector.cpp @@ -28,8 +28,11 @@ #include "gui/editor/inspector/dynamicGroup.h" #include "gui/containers/guiScrollCtrl.h" #include "gui/editor/inspector/customField.h" + +#ifdef TORQUE_EXPERIMENTAL_EC #include "gui/editor/inspector/entityGroup.h" #include "gui/editor/inspector/mountingGroup.h" +#endif IMPLEMENT_CONOBJECT(GuiInspector); @@ -585,7 +588,8 @@ void GuiInspector::refresh() mGroups.push_back(general); addObject(general); - //Behavior inspector group +#ifdef TORQUE_EXPERIMENTAL_EC + //Entity inspector group if (mTargets.first()->getClassRep()->isSubclassOf("Entity")) { GuiInspectorEntityGroup *components = new GuiInspectorEntityGroup("Components", this); @@ -605,6 +609,7 @@ void GuiInspector::refresh() addObject(mounting); } } +#endif // Create the inspector groups for static fields. diff --git a/Engine/source/scene/sceneRenderState.cpp b/Engine/source/scene/sceneRenderState.cpp index 3d8db7c264..5d05e809db 100644 --- a/Engine/source/scene/sceneRenderState.cpp +++ b/Engine/source/scene/sceneRenderState.cpp @@ -26,8 +26,10 @@ #include "renderInstance/renderPassManager.h" #include "math/util/matrixSet.h" +#ifdef TORQUE_EXPERIMENTAL_EC #include "T3D/Components/render/renderComponentInterface.h" #include "T3D/Components/Component.h" +#endif //----------------------------------------------------------------------------- @@ -106,6 +108,7 @@ void SceneRenderState::renderObjects( SceneObject** objects, U32 numObjects ) object->prepRenderImage( this ); } +#ifdef TORQUE_EXPERIMENTAL_EC U32 interfaceCount = RenderComponentInterface::all.size(); for (U32 i = 0; i < RenderComponentInterface::all.size(); i++) { @@ -116,6 +119,8 @@ void SceneRenderState::renderObjects( SceneObject** objects, U32 numObjects ) RenderComponentInterface::all[i]->prepRenderImage(this); } } +#endif + PROFILE_END(); // Render what the objects have batched. diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index b9972e467e..c8c017583f 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -86,6 +86,9 @@ if(WIN32) option(TORQUE_D3D11 "Allow Direct3D 11 render" OFF) endif() +option(TORQUE_EXPERIMENTAL_EC "Experimental Entity/Component systems" OFF) +mark_as_advanced(TORQUE_EXPERIMENTAL_EC) + ############################################################################### # options ############################################################################### @@ -173,8 +176,6 @@ addPathRec("${srcDir}/app") addPath("${srcDir}/sfx/media") addPath("${srcDir}/sfx/null") addPath("${srcDir}/sfx") -addPath("${srcDir}/component") -addPath("${srcDir}/component/interfaces") addPath("${srcDir}/console") addPath("${srcDir}/core") addPath("${srcDir}/core/stream") @@ -254,7 +255,13 @@ addPath("${srcDir}/ts/arch") addPath("${srcDir}/physics") addPath("${srcDir}/gui/3d") addPath("${srcDir}/postFx") + +if(NOT TORQUE_EXPERIMENTAL_EC) + set(BLACKLIST "Entity.cpp;Entity.h" ) +endif() addPath("${srcDir}/T3D") +set(BLACKLIST "" ) + addPath("${srcDir}/T3D/examples") addPath("${srcDir}/T3D/fps") addPath("${srcDir}/T3D/fx") @@ -264,6 +271,17 @@ addPath("${srcDir}/T3D/decal") addPath("${srcDir}/T3D/sfx") addPath("${srcDir}/T3D/gameBase") addPath("${srcDir}/T3D/turret") + +if( TORQUE_EXPERIMENTAL_EC ) + addPath("${srcDir}/T3D/components/") + addPath("${srcDir}/T3D/components/animation") + addPath("${srcDir}/T3D/components/camera") + addPath("${srcDir}/T3D/components/collision") + addPath("${srcDir}/T3D/components/game") + addPath("${srcDir}/T3D/components/physics") + addPath("${srcDir}/T3D/components/render") +endif() + addPath("${srcDir}/main/") addPath("${srcDir}/assets") addPath("${srcDir}/module") @@ -341,7 +359,11 @@ if(TORQUE_TOOLS) addPath("${srcDir}/environment/editors") addPath("${srcDir}/forest/editor") addPath("${srcDir}/gui/editor") + if(NOT TORQUE_EXPERIMENTAL_EC) + set(BLACKLIST "entityGroup.cpp;entityGroup.h;mountingGroup.cpp;mountingGroup.h" ) + endif() addPath("${srcDir}/gui/editor/inspector") + set(BLACKLIST "" ) endif() if(TORQUE_HIFI) From 7bf49f0670f598432bed3c7016ca998d1d76f3ec Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 15 May 2016 10:12:24 -0500 Subject: [PATCH 228/324] Adds a GameObject asset type, to make tracking and management of GameObjects significantly easier. --- Engine/source/T3D/assets/GameObjectAsset.cpp | 134 +++++++++++++++++++ Engine/source/T3D/assets/GameObjectAsset.h | 75 +++++++++++ 2 files changed, 209 insertions(+) create mode 100644 Engine/source/T3D/assets/GameObjectAsset.cpp create mode 100644 Engine/source/T3D/assets/GameObjectAsset.h diff --git a/Engine/source/T3D/assets/GameObjectAsset.cpp b/Engine/source/T3D/assets/GameObjectAsset.cpp new file mode 100644 index 0000000000..07cbb2819e --- /dev/null +++ b/Engine/source/T3D/assets/GameObjectAsset.cpp @@ -0,0 +1,134 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GAME_OBJECT_ASSET_H +#include "GameObjectAsset.h" +#endif + +#ifndef _ASSET_MANAGER_H_ +#include "assets/assetManager.h" +#endif + +#ifndef _CONSOLETYPES_H_ +#include "console/consoleTypes.h" +#endif + +#ifndef _TAML_ +#include "persistence/taml/taml.h" +#endif + +#ifndef _ASSET_PTR_H_ +#include "assets/assetPtr.h" +#endif + +// Debug Profiling. +#include "platform/profiler.h" + +//----------------------------------------------------------------------------- + +IMPLEMENT_CONOBJECT(GameObjectAsset); + +ConsoleType(GameObjectAssetPtr, TypeGameObjectAssetPtr, GameObjectAsset, ASSET_ID_FIELD_PREFIX) + +//----------------------------------------------------------------------------- + +ConsoleGetType(TypeGameObjectAssetPtr) +{ + // Fetch asset Id. + return (*((AssetPtr*)dptr)).getAssetId(); +} + +//----------------------------------------------------------------------------- + +ConsoleSetType(TypeGameObjectAssetPtr) +{ + // Was a single argument specified? + if (argc == 1) + { + // Yes, so fetch field value. + const char* pFieldValue = argv[0]; + + // Fetch asset pointer. + AssetPtr* pAssetPtr = dynamic_cast*>((AssetPtrBase*)(dptr)); + + // Is the asset pointer the correct type? + if (pAssetPtr == NULL) + { + // No, so fail. + //Con::warnf("(TypeTextureAssetPtr) - Failed to set asset Id '%d'.", pFieldValue); + return; + } + + // Set asset. + pAssetPtr->setAssetId(pFieldValue); + + return; + } + + // Warn. + Con::warnf("(TypeTextureAssetPtr) - Cannot set multiple args to a single asset."); +} + +//----------------------------------------------------------------------------- + +GameObjectAsset::GameObjectAsset() : + mAcquireReferenceCount(0), + mpOwningAssetManager(NULL), + mAssetInitialized(false) +{ + // Generate an asset definition. + mpAssetDefinition = new AssetDefinition(); + + mGameObjectName = StringTable->lookup(""); + mScriptFilePath = StringTable->lookup(""); + mTAMLFilePath = StringTable->lookup(""); +} + +//----------------------------------------------------------------------------- + +GameObjectAsset::~GameObjectAsset() +{ + // If the asset manager does not own the asset then we own the + // asset definition so delete it. + if (!getOwned()) + delete mpAssetDefinition; +} + +//----------------------------------------------------------------------------- + +void GameObjectAsset::initPersistFields() +{ + // Call parent. + Parent::initPersistFields(); + + addField("gameObjectName", TypeString, Offset(mGameObjectName, GameObjectAsset), "Name of the game object. Defines the created object's class."); + addField("scriptFilePath", TypeString, Offset(mScriptFilePath, GameObjectAsset), "Path to the script file for the GameObject's script code."); + addField("TAMLFilePath", TypeString, Offset(mTAMLFilePath, GameObjectAsset), "Path to the taml file for the GameObject's heirarchy."); +} + +//------------------------------------------------------------------------------ + +void GameObjectAsset::copyTo(SimObject* object) +{ + // Call to parent. + Parent::copyTo(object); +} \ No newline at end of file diff --git a/Engine/source/T3D/assets/GameObjectAsset.h b/Engine/source/T3D/assets/GameObjectAsset.h new file mode 100644 index 0000000000..82230cd5c6 --- /dev/null +++ b/Engine/source/T3D/assets/GameObjectAsset.h @@ -0,0 +1,75 @@ +#pragma once +//----------------------------------------------------------------------------- +// Copyright (c) 2013 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +#ifndef GAME_OBJECT_ASSET_H +#define GAME_OBJECT_ASSET_H + +#ifndef _ASSET_BASE_H_ +#include "assets/assetBase.h" +#endif + +#ifndef _ASSET_DEFINITION_H_ +#include "assets/assetDefinition.h" +#endif + +#ifndef _STRINGUNIT_H_ +#include "string/stringUnit.h" +#endif + +#ifndef _ASSET_FIELD_TYPES_H_ +#include "assets/assetFieldTypes.h" +#endif + +//----------------------------------------------------------------------------- +class GameObjectAsset : public AssetBase +{ + typedef AssetBase Parent; + + AssetManager* mpOwningAssetManager; + bool mAssetInitialized; + AssetDefinition* mpAssetDefinition; + U32 mAcquireReferenceCount; + + StringTableEntry mGameObjectName; + StringTableEntry mScriptFilePath; + StringTableEntry mTAMLFilePath; + +public: + GameObjectAsset(); + virtual ~GameObjectAsset(); + + /// Engine. + static void initPersistFields(); + virtual void copyTo(SimObject* object); + + /// Declare Console Object. + DECLARE_CONOBJECT(GameObjectAsset); + +protected: + virtual void initializeAsset(void) {} + virtual void onAssetRefresh(void) {} +}; + +DefineConsoleType(TypeGameObjectAssetPtr, GameObjectAsset) + +#endif // _ASSET_BASE_H_ + From 6fe0b1789d700eaaa368f2d4f0a81703c81472c6 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 15 May 2016 16:24:47 -0500 Subject: [PATCH 229/324] Adds some example components, game objects and the tools and scripts to utilize them. --- Templates/Full/game/art/art.module.taml | 13 + .../shapes/actors/Soldier/soldier.asset.taml | 3 + Templates/Full/game/main.cs | 1 + .../Full/game/scripts/scripts.module.taml | 13 + .../components/animationComponent.asset.taml | 7 + .../cameraOrbiterComponent.asset.taml | 7 + .../components/collisionComponent.asset.taml | 7 + .../server/components/game/camera.asset.taml | 7 + .../scripts/server/components/game/camera.cs | 198 ++++++++++++++ .../components/game/controlObject.asset.taml | 7 + .../server/components/game/controlObject.cs | 91 +++++++ .../components/game/itemRotate.asset.taml | 7 + .../server/components/game/itemRotate.cs | 49 ++++ .../components/game/playerSpawner.asset.taml | 7 + .../server/components/game/playerSpawner.cs | 70 +++++ .../components/input/fpsControls.asset.taml | 7 + .../server/components/input/fpsControls.cs | 249 +++++++++++++++++ .../server/components/input/inputManager.cs | 82 ++++++ .../components/meshComponent.asset.taml | 7 + .../playerControllerComponent.asset.taml | 7 + .../stateMachineComponent.asset.taml | 7 + .../Full/game/scripts/server/gameCore.cs | 25 ++ .../server/gameObjects/GameObjectList.xml | 28 ++ .../server/gameObjects/GameObjectManager.cs | 75 ++++++ .../ThirdPersonPlayerObject.asset.taml | 5 + .../gameObjects/ThirdPersonPlayerObject.cs | 253 ++++++++++++++++++ .../gameObjects/ThirdPersonPlayerObject.taml | 99 +++++++ .../Full/game/scripts/server/scriptExec.cs | 20 ++ .../gui/superToolTipDlg.ed.gui | 45 ++++ .../Full/game/tools/componentEditor/main.cs | 28 ++ .../scripts/SuperToolTipDlg.ed.cs | 155 +++++++++++ .../scripts/componentEditor.ed.cs | 233 ++++++++++++++++ 32 files changed, 1812 insertions(+) create mode 100644 Templates/Full/game/art/art.module.taml create mode 100644 Templates/Full/game/art/shapes/actors/Soldier/soldier.asset.taml create mode 100644 Templates/Full/game/scripts/scripts.module.taml create mode 100644 Templates/Full/game/scripts/server/components/animationComponent.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/cameraOrbiterComponent.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/collisionComponent.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/game/camera.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/game/camera.cs create mode 100644 Templates/Full/game/scripts/server/components/game/controlObject.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/game/controlObject.cs create mode 100644 Templates/Full/game/scripts/server/components/game/itemRotate.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/game/itemRotate.cs create mode 100644 Templates/Full/game/scripts/server/components/game/playerSpawner.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/game/playerSpawner.cs create mode 100644 Templates/Full/game/scripts/server/components/input/fpsControls.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/input/fpsControls.cs create mode 100644 Templates/Full/game/scripts/server/components/input/inputManager.cs create mode 100644 Templates/Full/game/scripts/server/components/meshComponent.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/playerControllerComponent.asset.taml create mode 100644 Templates/Full/game/scripts/server/components/stateMachineComponent.asset.taml create mode 100644 Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml create mode 100644 Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs create mode 100644 Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.asset.taml create mode 100644 Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs create mode 100644 Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml create mode 100644 Templates/Full/game/tools/componentEditor/gui/superToolTipDlg.ed.gui create mode 100644 Templates/Full/game/tools/componentEditor/main.cs create mode 100644 Templates/Full/game/tools/componentEditor/scripts/SuperToolTipDlg.ed.cs create mode 100644 Templates/Full/game/tools/componentEditor/scripts/componentEditor.ed.cs diff --git a/Templates/Full/game/art/art.module.taml b/Templates/Full/game/art/art.module.taml new file mode 100644 index 0000000000..73855c09e9 --- /dev/null +++ b/Templates/Full/game/art/art.module.taml @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/Templates/Full/game/art/shapes/actors/Soldier/soldier.asset.taml b/Templates/Full/game/art/shapes/actors/Soldier/soldier.asset.taml new file mode 100644 index 0000000000..4ba732205c --- /dev/null +++ b/Templates/Full/game/art/shapes/actors/Soldier/soldier.asset.taml @@ -0,0 +1,3 @@ + diff --git a/Templates/Full/game/main.cs b/Templates/Full/game/main.cs index 955f5aa6c1..2a261201da 100644 --- a/Templates/Full/game/main.cs +++ b/Templates/Full/game/main.cs @@ -254,6 +254,7 @@ function loadDirs(%dirPath) //You can also explicitly decalre some modules here to be loaded by default if they are part of your game //Ex: ModuleDatabase.LoadExplicit( "AppCore" ); + ModuleDatabase.LoadGroup( "Game" ); if( !$isDedicated ) { diff --git a/Templates/Full/game/scripts/scripts.module.taml b/Templates/Full/game/scripts/scripts.module.taml new file mode 100644 index 0000000000..e1a6b57bef --- /dev/null +++ b/Templates/Full/game/scripts/scripts.module.taml @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/animationComponent.asset.taml b/Templates/Full/game/scripts/server/components/animationComponent.asset.taml new file mode 100644 index 0000000000..62f15cdf91 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/animationComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/cameraOrbiterComponent.asset.taml b/Templates/Full/game/scripts/server/components/cameraOrbiterComponent.asset.taml new file mode 100644 index 0000000000..e030815644 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/cameraOrbiterComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/collisionComponent.asset.taml b/Templates/Full/game/scripts/server/components/collisionComponent.asset.taml new file mode 100644 index 0000000000..9796df18de --- /dev/null +++ b/Templates/Full/game/scripts/server/components/collisionComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/camera.asset.taml b/Templates/Full/game/scripts/server/components/game/camera.asset.taml new file mode 100644 index 0000000000..5d00d1170e --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/camera.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/camera.cs b/Templates/Full/game/scripts/server/components/game/camera.cs new file mode 100644 index 0000000000..e0b6bc41e9 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/camera.cs @@ -0,0 +1,198 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function CameraComponent::onAdd(%this) +{ + Parent::onBehaviorAdd(%this); + + %this.addComponentField(clientOwner, "The client that views this camera", "int", "1", ""); + + %test = %this.clientOwner; + + %barf = ClientGroup.getCount(); + + %clientID = %this.getClientID(); + if(%clientID && !isObject(%clientID.camera)) + { + %this.scopeToClient(%clientID); + %this.setDirty(); + + %clientID.setCameraObject(%this.owner); + %clientID.setControlCameraFov(%this.FOV); + + %clientID.camera = %this.owner; + } + + %res = $pref::Video::mode; + %derp = 0; +} + +function CameraComponent::onRemove(%this) +{ + %clientID = %this.getClientID(); + if(%clientID) + %clientID.clearCameraObject(); +} + +function CameraComponent::onInspectorUpdate(%this) +{ + //if(%this.clientOwner) + //%this.clientOwner.setCameraObject(%this.owner); +} + +function CameraComponent::getClientID(%this) +{ + return ClientGroup.getObject(%this.clientOwner-1); +} + +function CameraComponent::isClientCamera(%this, %client) +{ + %clientID = ClientGroup.getObject(%this.clientOwner-1); + + if(%client.getID() == %clientID) + return true; + else + return false; +} + +function CameraComponent::onClientConnect(%this, %client) +{ + //if(%this.isClientCamera(%client) && !isObject(%client.camera)) + //{ + %this.scopeToClient(%client); + %this.setDirty(); + + %client.setCameraObject(%this.owner); + %client.setControlCameraFov(%this.FOV); + + %client.camera = %this.owner; + //} + //else + //{ + // echo("CONNECTED CLIENT IS NOT CAMERA OWNER!"); + //} +} + +function CameraComponent::onClientDisconnect(%this, %client) +{ + Parent::onClientDisconnect(%this, %client); + + if(isClientCamera(%client)){ + %this.clearScopeToClient(%client); + %client.clearCameraObject(); + } +} + +//move to the editor later +GlobalActionMap.bind("keyboard", "alt c", "toggleEditorCam"); + +function switchCamera(%client, %newCamEntity) +{ + if(!isObject(%client) || !isObject(%newCamEntity)) + return error("SwitchCamera: No client or target camera!"); + + %cam = %newCamEntity.getComponent(CameraComponent); + + if(!isObject(%cam)) + return error("SwitchCamera: Target camera doesn't have a camera behavior!"); + + //TODO: Cleanup clientOwner for previous camera! + if(%cam.clientOwner == 0 || %cam.clientOwner $= "") + %cam.clientOwner = 0; + + %cam.scopeToClient(%client); + %cam.setDirty(); + + %client.setCameraObject(%newCamEntity); + %client.setControlCameraFov(%cam.FOV); + + %client.camera = %newCamEntity; +} + +function buildEditorCamera() +{ + if(isObject("EditorCamera")) + return EditorCamera; + + %camObj = SGOManager.spawn("SpectatorObject", false); + + %camObj.name = "EditorCamera"; + + %client = ClientGroup.getObject(0); + + %camObj.getComponent(SpectatorControls).setupControls(%client); + + MissionCleanup.add(%camObj); + + return %camObj; +} + +//TODO: Move this somewhere else! +function toggleEditorCam(%val) +{ + if(!%val) + return; + + %client = ClientGroup.getObject(0); + + if(!isObject(%client.camera)) + return error("ToggleEditorCam: no existing camera!"); + + %editorCam = buildEditorCamera(); + + //if this is our first switch, just go to the editor camera + if(%client.lastCam $= "" || %client.camera.getId() != %editorCam.getId()) + { + if(%client.lastCam $= "") + { + //set up the position + %editorCam.position = %client.camera.position; + %editorCam.rotation = %client.camera.rotation; + } + + %client.lastCam = %client.camera; + %client.lastController = %client.getControlObject(); + switchCamera(%client, %editorCam); + switchControlObject(%client, %editorCam); + } + else + { + switchCamera(%client, %client.lastCam); + switchControlObject(%client, %client.lastController); + %client.lastCam = %editorCam; + %client.lastController = %editorCam; + } +} + +function serverCmdSetClientAspectRatio(%client, %width, %height) +{ + echo("Client: " @ %client SPC "changing screen res to: " @ %width SPC %height); + %client.screenExtent = %width SPC %height; + %cam = %client.getCameraObject(); + + if(!isObject(%cam)) + return; + + %cameraComp = %cam.getComponent(CameraComponent); + + %cameraComp.ScreenAspect = %width SPC %height; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/game/controlObject.asset.taml b/Templates/Full/game/scripts/server/components/game/controlObject.asset.taml new file mode 100644 index 0000000000..2c9d48e1c3 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/controlObject.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/controlObject.cs b/Templates/Full/game/scripts/server/components/game/controlObject.cs new file mode 100644 index 0000000000..5b67f394bd --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/controlObject.cs @@ -0,0 +1,91 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("ControlObjectComponent", "Component", "Control Object", "Game", false, "Allows the behavior owner to operate as a camera."); + +function ControlObjectComponent::onAdd(%this) +{ + Parent::onBehaviorAdd(%this); + + %this.addComponentField(clientOwner, "The shape to use for rendering", "int", "1", ""); + + %clientID = %this.getClientID(); + + if(%clientID && !isObject(%clientID.getControlObject())) + %clientID.setControlObject(%this.owner); +} + +function ControlObjectComponent::onRemove(%this) +{ + %clientID = %this.getClientID(); + + if(%clientID) + %clientID.setControlObject(0); +} + +function ControlObjectComponent::onClientConnect(%this, %client) +{ + if(%this.isControlClient(%client) && !isObject(%client.getControlObject())) + %client.setControlObject(%this.owner); +} + +function ControlObjectComponent::onClientDisconnect(%this, %client) +{ + if(%this.isControlClient(%client)) + %client.setControlObject(0); +} + +function ControlObjectComponent::getClientID(%this) +{ + return ClientGroup.getObject(%this.clientOwner-1); +} + +function ControlObjectComponent::isControlClient(%this, %client) +{ + %clientID = ClientGroup.getObject(%this.clientOwner-1); + + if(%client.getID() == %clientID) + return true; + else + return false; +} + +function ControlObjectComponent::onInspectorUpdate(%this, %field) +{ + %clientID = %this.getClientID(); + + if(%clientID && !isObject(%clientID.getControlObject())) + %clientID.setControlObject(%this.owner); +} + +function switchControlObject(%client, %newControlEntity) +{ + if(!isObject(%client) || !isObject(%newControlEntity)) + return error("SwitchControlObject: No client or target controller!"); + + %control = %newControlEntity.getComponent(ControlObjectComponent); + + if(!isObject(%control)) + return error("SwitchControlObject: Target controller has no conrol object behavior!"); + + %client.setControlObject(%newControlEntity); +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/game/itemRotate.asset.taml b/Templates/Full/game/scripts/server/components/game/itemRotate.asset.taml new file mode 100644 index 0000000000..8068b49f3f --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/itemRotate.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/itemRotate.cs b/Templates/Full/game/scripts/server/components/game/itemRotate.cs new file mode 100644 index 0000000000..259b441114 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/itemRotate.cs @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("ItemRotationComponent", "Component", "Item Rotation", "Game", false, "Rotates the entity around the z axis, like an item pickup."); + +function ItemRotationComponent::onAdd(%this) +{ + %this.addComponentField(rotationsPerMinute, "Number of rotations per minute", "float", "5", ""); + %this.addComponentField(forward, "Rotate forward or backwards", "bool", "1", ""); + %this.addComponentField(horizontal, "Rotate horizontal or verticle, true for horizontal", "bool", "1", ""); +} + +function ItemRotateBehavior::Update(%this) +{ + %tickRate = 0.032; + + //Rotations per second is calculated based on a standard update tick being 32ms. So we scale by the tick speed, then add that to our rotation to + //get a nice rotation speed. + if(%this.horizontal) + { + if(%this.forward) + %this.owner.rotation.z += ( ( 360 * %this.rotationsPerMinute ) / 60 ) * %tickRate; + else + %this.owner.rotation.z -= ( ( 360 * %this.rotationsPerMinute ) / 60 ) * %tickRate; + } + else + { + %this.owner.rotation.x += ( ( 360 * %this.rotationsPerMinute ) / 60 ) * %tickRate; + } +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/game/playerSpawner.asset.taml b/Templates/Full/game/scripts/server/components/game/playerSpawner.asset.taml new file mode 100644 index 0000000000..d181a86b4d --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/playerSpawner.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/game/playerSpawner.cs b/Templates/Full/game/scripts/server/components/game/playerSpawner.cs new file mode 100644 index 0000000000..fb6507d083 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/game/playerSpawner.cs @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("PlayerSpawner", "Component", +// "Player Spawner", "Game", false, "When a client connects, it spawns a player object for them and attaches them to it"); + +function PlayerSpawner::onAdd(%this) +{ + %this.clientCount = 1; + %this.friendlyName = "Player Spawner"; + %this.componentType = "Spawner"; + + %this.addComponentField("GameObjectName", "The name of the game object we spawn for the players", string, "PlayerObject"); +} + +function PlayerSpawner::onClientConnect(%this, %client) +{ + %playerObj = SGOManager.spawn(%this.GameObjectName); + + if(!isObject(%playerObj)) + return; + + %playerObj.position = %this.owner.position; + + MissionCleanup.add(%playerObj); + + for(%b = 0; %b < %playerObj.getComponentCount(); %b++) + { + %comp = %playerObj.getComponentByIndex(%b); + + if(%comp.isMethod("onClientConnect")) + %comp.onClientConnect(%client); + } + + switchControlObject(%client, %playerObj); + switchCamera(%client, %playerObj); + + //%playerObj.getComponent(FPSControls).setupControls(%client); + + %this.clientCount++; +} + +function PlayerSpawner::onClientDisConnect(%this, %client) +{ + +} + +function PlayerSpawner::getClientID(%this) +{ + return ClientGroup.getObject(%this.clientOwner-1); +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/input/fpsControls.asset.taml b/Templates/Full/game/scripts/server/components/input/fpsControls.asset.taml new file mode 100644 index 0000000000..34f31f1811 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/input/fpsControls.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/input/fpsControls.cs b/Templates/Full/game/scripts/server/components/input/fpsControls.cs new file mode 100644 index 0000000000..3e7f571bdd --- /dev/null +++ b/Templates/Full/game/scripts/server/components/input/fpsControls.cs @@ -0,0 +1,249 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//registerComponent("FPSControls", "Component", "FPS Controls", "Input", false, "First Person Shooter-type controls"); + +function FPSControls::onAdd(%this) +{ + Parent::onBehaviorAdd(%this); + + // + %this.beginGroup("Keys"); + %this.addComponentField(forwardKey, "Key to bind to vertical thrust", keybind, "keyboard w"); + %this.addComponentField(backKey, "Key to bind to vertical thrust", keybind, "keyboard s"); + %this.addComponentField(leftKey, "Key to bind to horizontal thrust", keybind, "keyboard a"); + %this.addComponentField(rightKey, "Key to bind to horizontal thrust", keybind, "keyboard d"); + + %this.addComponentField(jump, "Key to bind to horizontal thrust", keybind, "keyboard space"); + %this.endGroup(); + + %this.beginGroup("Mouse"); + %this.addComponentField(pitchAxis, "Key to bind to horizontal thrust", keybind, "mouse yaxis"); + %this.addComponentField(yawAxis, "Key to bind to horizontal thrust", keybind, "mouse xaxis"); + %this.endGroup(); + + %this.addComponentField(moveSpeed, "Horizontal thrust force", float, 300.0); + %this.addComponentField(jumpStrength, "Vertical thrust force", float, 3.0); + // + + %control = %this.owner.getComponent( ControlObjectComponent ); + if(!%control) + return echo("SPECTATOR CONTROLS: No Control Object behavior!"); + + //%this.Physics = %this.owner.getComponent( PlayerPhysicsComponent ); + + //%this.Animation = %this.owner.getComponent( AnimationComponent ); + + //%this.Camera = %this.owner.getComponent( MountedCameraComponent ); + + //%this.Animation.playThread(0, "look"); + + %this.setupControls(%control.getClientID()); +} + +function FPSControls::onRemove(%this) +{ + Parent::onBehaviorRemove(%this); + + commandToClient(%control.clientOwnerID, 'removeInput', %this.forwardKey); + commandToClient(%control.clientOwnerID, 'removeInput', %this.backKey); + commandToClient(%control.clientOwnerID, 'removeInput', %this.leftKey); + commandToClient(%control.clientOwnerID, 'removeInput', %this.rightKey); + + commandToClient(%control.clientOwnerID, 'removeInput', %this.pitchAxis); + commandToClient(%control.clientOwnerID, 'removeInput', %this.yawAxis); +} + +function FPSControls::onBehaviorFieldUpdate(%this, %field) +{ + %controller = %this.owner.getBehavior( ControlObjectBehavior ); + commandToClient(%controller.clientOwnerID, 'updateInput', %this.getFieldValue(%field), %field); +} + +function FPSControls::onClientConnect(%this, %client) +{ + %this.setupControls(%client); +} + + +function FPSControls::setupControls(%this, %client) +{ + %control = %this.owner.getComponent( ControlObjectComponent ); + if(!%control.isControlClient(%client)) + { + echo("FPS CONTROLS: Client Did Not Match"); + return; + } + + %inputCommand = "FPSControls"; + + %test = %this.forwardKey; + + /*SetInput(%client, %this.forwardKey.x, %this.forwardKey.y, %inputCommand@"_forwardKey"); + SetInput(%client, %this.backKey.x, %this.backKey.y, %inputCommand@"_backKey"); + SetInput(%client, %this.leftKey.x, %this.leftKey.y, %inputCommand@"_leftKey"); + SetInput(%client, %this.rightKey.x, %this.rightKey.y, %inputCommand@"_rightKey"); + + SetInput(%client, %this.jump.x, %this.jump.y, %inputCommand@"_jump"); + + SetInput(%client, %this.pitchAxis.x, %this.pitchAxis.y, %inputCommand@"_pitchAxis"); + SetInput(%client, %this.yawAxis.x, %this.yawAxis.y, %inputCommand@"_yawAxis");*/ + + SetInput(%client, "keyboard", "w", %inputCommand@"_forwardKey"); + SetInput(%client, "keyboard", "s", %inputCommand@"_backKey"); + SetInput(%client, "keyboard", "a", %inputCommand@"_leftKey"); + SetInput(%client, "keyboard", "d", %inputCommand@"_rightKey"); + + SetInput(%client, "keyboard", "space", %inputCommand@"_jump"); + + SetInput(%client, "mouse", "yaxis", %inputCommand@"_pitchAxis"); + SetInput(%client, "mouse", "xaxis", %inputCommand@"_yawAxis"); + + SetInput(%client, "keyboard", "f", %inputCommand@"_flashlight"); + +} + +function FPSControls::onMoveTrigger(%this, %triggerID) +{ + //check if our jump trigger was pressed! + if(%triggerID == 2) + { + %this.owner.applyImpulse("0 0 0", "0 0 " @ %this.jumpStrength); + } +} + +function FPSControls::Update(%this) +{ + return; + + %moveVector = %this.owner.getMoveVector(); + %moveRotation = %this.owner.getMoveRotation(); + + %this.Physics.moveVector = "0 0 0"; + + if(%moveVector.x != 0) + { + %fv = VectorNormalize(%this.owner.getRightVector()); + + %forMove = VectorScale(%fv, (%moveVector.x));// * (%this.moveSpeed * 0.032))); + + //%this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + + %this.Physics.moveVector = VectorAdd(%this.Physics.moveVector, %forMove); + + //if(%forMove > 0) + // %this.Animation.playThread(1, "run"); + } + /*else + { + %fv = VectorNormalize(%this.owner.getRightVector()); + + %forMove = VectorScale(%fv, (%moveVector.x * (%this.moveSpeed * 0.032))); + + if(%forMove <= 0) + %this.Animation.stopThread(1); + + }*/ + + if(%moveVector.y != 0) + { + %fv = VectorNormalize(%this.owner.getForwardVector()); + + %forMove = VectorScale(%fv, (%moveVector.y));// * (%this.moveSpeed * 0.032))); + + //%this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + + %this.Physics.moveVector = VectorAdd(%this.Physics.moveVector, %forMove); + + //if(VectorLen(%this.Physics.velocity) < 2) + // %this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + } + + /*if(%moveVector.z) + { + %fv = VectorNormalize(%this.owner.getUpVector()); + + %forMove = VectorScale(%fv, (%moveVector.z * (%this.moveSpeed * 0.032))); + + %this.Physics.velocity = VectorAdd(%this.Physics.velocity, %forMove); + }*/ + + if(%moveRotation.x != 0) + { + %look = mRadToDeg(%moveRotation.x) / 180; + + //%this.Animation.setThreadPos(0, %look); + + %this.owner.getComponent( MountedCameraComponent ).rotationOffset.x += mRadToDeg(%moveRotation.x); + + //%this.Camera.rotationOffset.x += mRadToDeg(%moveRotation.x); + } + // %this.owner.rotation.x += mRadToDeg(%moveRotation.x); + + if(%moveRotation.z != 0) + { + %zrot = mRadToDeg(%moveRotation.z); + %this.owner.getComponent( MountedCameraComponent ).rotationOffset.z += %zrot; + //%this.owner.rotation.z += %zrot; + } +} + +// +function FPSControls_forwardKey(%val) +{ + $mvForwardAction = %val; +} + +function FPSControls_backKey(%val) +{ + $mvBackwardAction = %val; +} + +function FPSControls_leftKey(%val) +{ + $mvLeftAction = %val; +} + +function FPSControls_rightKey(%val) +{ + $mvRightAction = %val; +} + +function FPSControls_yawAxis(%val) +{ + $mvYaw += getMouseAdjustAmount(%val); +} + +function FPSControls_pitchAxis(%val) +{ + $mvPitch += getMouseAdjustAmount(%val); +} + +function FPSControls_jump(%val) +{ + $mvTriggerCount2++; +} + +function FPSControls_flashLight(%val) +{ + $mvTriggerCount3++; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/input/inputManager.cs b/Templates/Full/game/scripts/server/components/input/inputManager.cs new file mode 100644 index 0000000000..c8123d1e3e --- /dev/null +++ b/Templates/Full/game/scripts/server/components/input/inputManager.cs @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function SetInput(%client, %device, %key, %command, %bindMap, %behav) +{ + commandToClient(%client, 'SetInput', %device, %key, %command, %bindMap, %behav); +} + +function RemoveInput(%client, %device, %key, %command, %bindMap) +{ + commandToClient(%client, 'removeInput', %device, %key, %command, %bindMap); +} + +function clientCmdSetInput(%device, %key, %command, %bindMap, %behav) +{ + //if we're requesting a custom bind map, set that up + if(%bindMap $= "") + %bindMap = moveMap; + + if (!isObject(%bindMap)){ + new ActionMap(moveMap); + moveMap.push(); + } + + //get our local + //%localID = ServerConnection.resolveGhostID(%behav); + + //%tmpl = %localID.getTemplate(); + //%tmpl.insantiateNamespace(%tmpl.getName()); + + //first, check if we have an existing command + %oldBind = %bindMap.getBinding(%command); + if(%oldBind !$= "") + %bindMap.unbind(getField(%oldBind, 0), getField(%oldBind, 1)); + + //now, set the requested bind + %bindMap.bind(%device, %key, %command); +} + +function clientCmdRemoveSpecCtrlInput(%device, %key, %bindMap) +{ + //if we're requesting a custom bind map, set that up + if(%bindMap $= "") + %bindMap = moveMap; + + if (!isObject(%bindMap)) + return; + + %bindMap.unbind(%device, %key); +} + +function clientCmdSetupClientBehavior(%bhvrGstID) +{ + %localID = ServerConnection.resolveGhostID(%bhvrGstID); + %tmpl = %localID.getTemplate(); + %tmpl.insantiateNamespace(%tmpl.getName()); +} + +function getMouseAdjustAmount(%val) +{ + // based on a default camera FOV of 90' + return(%val * ($cameraFov / 90) * 0.01) * $pref::Input::LinkMouseSensitivity; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/components/meshComponent.asset.taml b/Templates/Full/game/scripts/server/components/meshComponent.asset.taml new file mode 100644 index 0000000000..d019cd893b --- /dev/null +++ b/Templates/Full/game/scripts/server/components/meshComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/playerControllerComponent.asset.taml b/Templates/Full/game/scripts/server/components/playerControllerComponent.asset.taml new file mode 100644 index 0000000000..d5174644b1 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/playerControllerComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/components/stateMachineComponent.asset.taml b/Templates/Full/game/scripts/server/components/stateMachineComponent.asset.taml new file mode 100644 index 0000000000..a261bb1945 --- /dev/null +++ b/Templates/Full/game/scripts/server/components/stateMachineComponent.asset.taml @@ -0,0 +1,7 @@ + diff --git a/Templates/Full/game/scripts/server/gameCore.cs b/Templates/Full/game/scripts/server/gameCore.cs index abff15c0ad..bb7aed7140 100644 --- a/Templates/Full/game/scripts/server/gameCore.cs +++ b/Templates/Full/game/scripts/server/gameCore.cs @@ -573,6 +573,31 @@ function endGame() %client.isAiControlled(), %client.isAdmin, %client.isSuperAdmin); + + %entityIds = parseMissionGroupForIds("Entity", ""); + %entityCount = getWordCount(%entityIds); + + for(%i=0; %i < %entityCount; %i++) + { + %entity = getWord(%entityIds, %i); + + for(%e=0; %e < %entity.getCount(); %e++) + { + %child = %entity.getObject(%e); + if(%child.getCLassName() $= "Entity") + %entityIds = %entityIds SPC %child.getID(); + } + + for(%c=0; %c < %entity.getComponentCount(); %c++) + { + %comp = %entity.getComponentByIndex(%c); + + if(%comp.isMethod("onClientConnect")) + { + %comp.onClientConnect(%client); + } + } + } } function GameCore::onClientLeaveGame(%game, %client) diff --git a/Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml b/Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml new file mode 100644 index 0000000000..e9cc73c896 --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml @@ -0,0 +1,28 @@ + + + + ScriptedTriggerObject + data/EC/scripts/gameObjects/ScriptedTriggerObject.taml + data/EC/scripts/gameObjects/ScriptedTriggerObject.cs + + + PlayerObject + data/EC/scripts/gameObjects/playerObject.taml + data/EC/scripts/gameObjects/playerObject.cs + + + spectatorObject + data/EC/scripts/gameObjects/spectatorObject.taml + data/EC/scripts/gameObjects/spectatorObject.cs + + + ThirdPersonPlayerObject + data/EC/scripts/gameObjects/ThirdPersonPlayerObject.taml + data/EC/scripts/gameObjects/ThirdPersonPlayerObject.cs + + + FirstPersonArms + data/EC/scripts/gameObjects/FirstPersonArms.taml + data/EC/scripts/gameObjects/FirstPersonArms.cs + + diff --git a/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs new file mode 100644 index 0000000000..138bcb8be4 --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs @@ -0,0 +1,75 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- +function execGameObjects() +{ + //find all GameObjectAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset")) + return; //if we didn't find ANY, just exit + + %count = %assetQuery.getCount(); + + for(%i=0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %gameObjectAsset = AssetDatabase.acquireAsset(%assetId); + + if(isFile(%gameObjectAsset.scriptFilePath)) + exec(%gameObjectAsset.scriptFilePath); + } +} + +function spawnGameObject(%name, %addToMissionGroup) +{ + if(%addToMissionGroup $= "") + %addToMissionGroup = true; + + //find all GameObjectAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset")) + return; //if we didn't find ANY, just exit + + %count = %assetQuery.getCount(); + + for(%i=0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %gameObjectAsset = AssetDatabase.acquireAsset(%assetId); + + if(%gameObjectAsset.gameObjectName $= %name) + { + if(isFile(%gameObjectAsset.TAMLFilePath)) + { + %newSGOObject = TamlRead(%gameObjectAsset.TAMLFilePath); + + if(%addToMissionGroup == true) + MissionGroup.add(%newSGOObject); + + return %newSGOObject; + } + } + } + + return 0; +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.asset.taml b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.asset.taml new file mode 100644 index 0000000000..2d593a50b4 --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.asset.taml @@ -0,0 +1,5 @@ + diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs new file mode 100644 index 0000000000..bc92db12de --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs @@ -0,0 +1,253 @@ +function ThirdPersonPlayerObject::onAdd(%this) +{ + %this.turnRate = 0.3; + + %this.phys = %this.getComponent("PlayerControllerComponent"); + %this.collision = %this.getComponent("CollisionComponent"); + %this.cam = %this.getComponent("CameraComponent"); + %this.camArm = %this.getComponent("CameraOrbiterComponent"); + %this.animation = %this.getComponent("AnimationComponent"); + %this.stateMachine = %this.getComponent("StateMachineComponent"); + %this.mesh = %this.getComponent("MeshComponent"); + + %this.stateMachine.forwardVector = 0; + + %this.crouch = false; + + %this.firstPerson = false; + + %this.crouchSpeedMod = 0.5; + + %this.aimOrbitDist = 1.5; + %this.regularOrbitDist = 5; + + %this.regularOrbitMaxPitch = 70; + %this.regularOrbitMinPitch = -10; + + %this.aimedMaxPitch = 90; + %this.aimedMinPitch = -90; + + %this.arms = SGOManager.spawn("FirstPersonArms", true); + + %this.add(arms); + + //%this.mesh.mountObject(%this.arms, "Eye"); +} + +function ThirdPersonPlayerObject::onRemove(%this) +{ + +} + +function ThirdPersonPlayerObject::moveVectorEvent(%this) +{ + %moveVector = %this.getMoveVector(); + + // forward of the camera on the x-z plane + %cameraForward = %this.cam.getForwardVector(); + + %cameraRight = %this.cam.getRightVector(); + + %moveVec = VectorAdd(VectorScale(%cameraRight, %moveVector.x), VectorScale(%cameraForward, %moveVector.y)); + + if(%this.aiming || %this.firstPerson) + { + %forMove = "0 0 0"; + + if(%moveVector.x != 0) + { + %this.phys.inputVelocity.x = %moveVector.x * 10; + } + else + { + %this.phys.inputVelocity.x = 0; + } + + if(%moveVector.y != 0) + { + + %this.phys.inputVelocity.y = %moveVector.y * 10; + } + else + { + %this.phys.inputVelocity.y = 0; + } + } + else + { + if(%moveVec.x == 0 && %moveVec.y == 0) + { + %this.phys.inputVelocity = "0 0 0"; + %this.stateMachine.forwardVector = 0; + } + else + { + %moveVec.z = 0; + + %curForVec = %this.getForwardVector(); + + %newForVec = VectorLerp(%curForVec, %moveVec, %this.turnRate); + + %this.setForwardVector(%newForVec); + + %this.phys.inputVelocity.y = 10; + + %this.stateMachine.forwardVector = 1; + } + } + + if(%this.crouch) + %this.phys.inputVelocity = VectorScale(%this.phys.inputVelocity, %this.crouchSpeedMod); +} + +function ThirdPersonPlayerObject::moveYawEvent(%this) +{ + %moveRotation = %this.getMoveRotation(); + + %camOrb = %this.getComponent("CameraOrbiterComponent"); + + if(%this.aiming || %this.firstPerson) + { + %this.rotation.z += %moveRotation.z * 10; + } + + %camOrb.rotation.z += %moveRotation.z * 10; +} + +function ThirdPersonPlayerObject::movePitchEvent(%this) +{ + %moveRotation = %this.getMoveRotation(); + + %camOrb = %this.getComponent("CameraOrbiterComponent"); + + %camOrb.rotation.x += %moveRotation.x * 10; +} + +function ThirdPersonPlayerObject::moveRollEvent(%this){} + +function ThirdPersonPlayerObject::moveTriggerEvent(%this, %triggerNum, %triggerValue) +{ + if(%triggerNum == 3 && %triggerValue) + { + if(%triggerValue) + { + %this.firstPerson = !%this.firstPerson; + + if(%this.firstPerson) + { + %this.rotation.z = %this.cam.rotationOffset.z; + %this.camArm.orbitDistance = 0; + %this.camArm.maxPitchAngle = %this.aimedMaxPitch; + %this.camArm.minPitchAngle = %this.aimedMinPitch; + + %this.cam.positionOffset = "0 0 0"; + %this.cam.rotationOffset = "0 0 0"; + } + else if(%this.aiming) + { + %this.camArm.orbitDistance = %this.aimOrbitDist; + + %this.camArm.maxPitchAngle = %this.aimedMaxPitch; + %this.camArm.minPitchAngle = %this.aimedMinPitch; + } + else + { + %this.camArm.orbitDistance = %this.regularOrbitDist; + + %this.camArm.maxPitchAngle = %this.regularOrbitMaxPitch; + %this.camArm.minPitchAngle = %this.regularOrbitMinPitch; + } + + commandToClient(localclientConnection, 'SetClientRenderShapeVisibility', + localclientConnection.getGhostID(%this.getComponent("MeshComponent")), !%this.firstPerson); + } + } + else if(%triggerNum == 2 && %triggerValue == true) + { + //get our best collision assuming up is 0 0 1 + %collisionAngle = %this.collision.getBestCollisionAngle("0 0 1"); + + if(%collisionAngle >= 80) + { + %surfaceNormal = %this.collision.getCollisionNormal(0); + %jumpVector = VectorScale(%surfaceNormal, 200); + echo("Jump surface Angle is at: " @ %surfaceNormal); + + %this.phys.applyImpulse(%this.position, %jumpVector); + %this.setForwardVector(%jumpVector); + } + else + %this.phys.applyImpulse(%this.position, "0 0 300"); + } + else if(%triggerNum == 4) + { + %this.crouch = %triggerValue; + } + else if(%triggerNum == 1) + { + %this.aiming = %triggerValue; + + if(%this.aiming) + { + %this.rotation.z = %this.cam.rotationOffset.z; + %this.camArm.orbitDistance = %this.aimOrbitDist; + %this.camArm.maxPitchAngle = %this.aimedMaxPitch; + %this.camArm.minPitchAngle = %this.aimedMinPitch; + } + else + { + %this.camArm.orbitDistance = %this.regularOrbitDist; + %this.camArm.maxPitchAngle = %this.regularOrbitMaxPitch; + %this.camArm.minPitchAngle = %this.regularOrbitMinPitch; + } + } +} + +function ThirdPersonPlayerObject::onCollisionEvent(%this, %colObject, %colNormal, %colPoint, %colMatID, %velocity) +{ + if(!%this.phys.isContacted()) + echo(%this @ " collided with " @ %colObject); +} + +function ThirdPersonPlayerObject::processTick(%this) +{ + %moveVec = %this.getMoveVector(); + %bestFit = ""; + + if(%this.crouch) + { + if(%moveVec.x != 0 || %moveVec.y != 0) + %bestFit = "Crouch_Forward"; + else + %bestFit = "Crouch_Root"; + } + else + { + if(%moveVec.x != 0 || %moveVec.y != 0) + %bestFit = "Run"; + else + %bestFit = "Root"; + } + + if(%this.animation.getThreadAnimation(0) !$= %bestFit) + %this.animation.playThread(0, %bestFit); +} + +//Used for first person mode +function clientCmdSetClientRenderShapeVisibility(%id, %visiblilty) +{ + %localID = ServerConnection.resolveGhostID(%id); + %localID.enabled = %visiblilty; +} + +function serverToClientObject( %serverObject ) +{ + assert( isObject( LocalClientConnection ), "serverToClientObject() - No local client connection found!" ); + assert( isObject( ServerConnection ), "serverToClientObject() - No server connection found!" ); + + %ghostId = LocalClientConnection.getGhostId( %serverObject ); + if ( %ghostId == -1 ) + return 0; + + return ServerConnection.resolveGhostID( %ghostId ); +} \ No newline at end of file diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml new file mode 100644 index 0000000000..fcfead0d44 --- /dev/null +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml @@ -0,0 +1,99 @@ + + + + + + + + + + + diff --git a/Templates/Full/game/scripts/server/scriptExec.cs b/Templates/Full/game/scripts/server/scriptExec.cs index a612040400..d48e268e72 100644 --- a/Templates/Full/game/scripts/server/scriptExec.cs +++ b/Templates/Full/game/scripts/server/scriptExec.cs @@ -58,3 +58,23 @@ // Load our gametypes exec("./gameCore.cs"); // This is the 'core' of the gametype functionality. exec("./gameDM.cs"); // Overrides GameCore with DeathMatch functionality. + +//Entity/Component stuff +if(isFile("./components/game/camera.cs")) + exec("./components/game/camera.cs"); +if(isFile("./components/game/controlObject.cs")) + exec("./components/game/controlObject.cs"); +if(isFile("./components/game/itemRotate.cs")) + exec("./components/game/itemRotate.cs"); +if(isFile("./components/game/playerSpawner.cs")) + exec("./components/game/playerSpawner.cs"); +if(isFile("./components/input/fpsControls.cs")) + exec("./components/input/fpsControls.cs"); +if(isFile("./components/input/inputManager.cs")) + exec("./components/input/inputManager.cs"); + +if(isFile("./gameObjects/GameObjectManager.cs")) +{ + exec("./gameObjects/GameObjectManager.cs"); + execGameObjects(); +} \ No newline at end of file diff --git a/Templates/Full/game/tools/componentEditor/gui/superToolTipDlg.ed.gui b/Templates/Full/game/tools/componentEditor/gui/superToolTipDlg.ed.gui new file mode 100644 index 0000000000..ef506941a4 --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/gui/superToolTipDlg.ed.gui @@ -0,0 +1,45 @@ +%guiContent = new GuiControl(SuperTooltipDlg) { + canSaveDynamicFields = "0"; + Profile = "GuiTransparentProfileModeless"; + class = "SuperTooltip"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "0 0"; + Extent = "640 480"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + + new GuiControl(SuperTooltipWindow) { + canSaveDynamicFields = "0"; + Profile = "EditorTextEditBoldModeless"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "216 160"; + Extent = "221 134"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + internalName = "tooltipWindow"; + + new GuiMLTextCtrl(SuperTooltipMLText) { + canSaveDynamicFields = "0"; + Profile = "EditorMLTextProfileModeless"; + HorizSizing = "right"; + VertSizing = "bottom"; + position = "5 5"; + Extent = "210 14"; + MinExtent = "8 2"; + canSave = "1"; + Visible = "1"; + hovertime = "1000"; + lineSpacing = "2"; + allowColorChars = "0"; + maxChars = "-1"; + internalName = "tooltipMLText"; + }; + }; +}; + diff --git a/Templates/Full/game/tools/componentEditor/main.cs b/Templates/Full/game/tools/componentEditor/main.cs new file mode 100644 index 0000000000..56d74830a9 --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/main.cs @@ -0,0 +1,28 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +//Scripts +exec("./scripts/componentEditor.ed.cs"); +exec("./scripts/superToolTipDlg.ed.cs"); + +//gui +exec("./gui/superToolTipDlg.ed.gui"); diff --git a/Templates/Full/game/tools/componentEditor/scripts/SuperToolTipDlg.ed.cs b/Templates/Full/game/tools/componentEditor/scripts/SuperToolTipDlg.ed.cs new file mode 100644 index 0000000000..7f25bd5e67 --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/scripts/SuperToolTipDlg.ed.cs @@ -0,0 +1,155 @@ +function createSuperTooltipTheme(%name) +{ + %theme = new ScriptObject() + { + class = SuperTooltipTheme; + }; + + %theme.setName(%name); + + return %theme; +} + +function SuperTooltipTheme::addStyle(%this, %name, %style) +{ + %this.styles[%name] = %style; +} + +function SuperTooltipTheme::setDefaultStyle(%this, %type, %default) +{ + %this.defaultStyles[%type] = %default; +} + +function SuperTooltipTheme::setSpacing(%this, %verticalSpace, %horizontalSpace) +{ + %this.verticalSpace = %verticalSpace; + %this.horizontalSpace = %horizontalSpace; +} + +function SuperTooltipTheme::getStyle(%this, %name) +{ + return %this.styles[%name]; +} + +function SuperTooltip::init(%this, %theme) +{ + %this.clearTooltip(); + + if(isObject(%theme)) + %this.setTheme(%theme); +} + +function SuperTooltip::clearTooltip(%this) +{ + if(%this.paramCount > 0) + { + for(%i=0;%i<%this.paramCount;%i++) + %this.param[%i] = ""; + } + + %this.title = ""; + %this.paramCount = 0; +} + +function SuperTooltip::processTooltip(%this, %globalPos, %verticalAlign, %horizontalAlign) +{ + if (%verticalAlign $= "") + %verticalAlign = 1; + if (%horizontalAlign $= "") + %horizontalAlign = 0; + + %tooltipWindow = %this.findObjectByInternalName("tooltipWindow"); + + if(isObject(%tooltipWindow)) + %tooltipMLText = %tooltipWindow.findObjectByInternalName("tooltipMLText"); + else + return false; + + if(!isObject(%tooltipMLText)) + return false; + + %verticalSpace = %this.theme.verticalSpace; + %horizontalSpace = %this.theme.horizontalSpace; + + if (%verticalAlign == 1) + %verticalSpace = -%verticalSpace; + if (%horizontalAlign == 1) + %horizontalSpace = -%horizontalSpace; + + %text = %this.getFormatedText(); + %tooltipMLText.setText(%text); + + canvas.pushDialog(%this); + + %tooltipMLText.forceReflow(); + %MLExtent = %tooltipMLText.extent; + %MLHeight = getWord(%MLExtent, 1); + + %tooltipExtent = %tooltipWindow.extent; + %tooltipWidth = getWord(%tooltipExtent, 0); + %tooltipHeight = %MLHeight; + %tooltipWindow.extent = %tooltipWidth SPC %tooltipHeight; + + %globalPosX = getWord(%globalPos, 0); + %globalPosY = getWord(%globalPos, 1); + + %tooltipPosX = %globalPosX - (%horizontalAlign * %tooltipWidth) + %horizontalSpace; + %tooltipPosY = %globalPosY - (%verticalAlign * %tooltipHeight) + %verticalSpace; + + %tooltipWindow.setPosition(%tooltipPosX, %tooltipPosY); + + return true; +} + +function SuperTooltip::hide(%this) +{ + canvas.popDialog(%this); + + %this.clearTooltip(); +} + +function SuperTooltip::setTheme(%this, %theme) +{ + %this.theme = %theme; +} + +function SuperTooltip::setTitle(%this, %title, %style) +{ + if(%style !$= "") + %themeStyle = %this.theme.styles[%style]; + else + %themeStyle = %this.theme.getStyle(%this.theme.defaultStyles[Title]); + + %this.title = %themeStyle @ %title; +} + +function SuperTooltip::addParam(%this, %title, %text, %paramTitleStyle, %paramStyle) +{ + if(%paramTitleStyle !$= "") + %themeTitleStyle = %this.theme.styles[%paramTitleStyle]; + else + %themeTitleStyle = %this.theme.getStyle(%this.theme.defaultStyles[ParamTitle]); + + if(%paramStyle !$= "") + %themeStyle = %this.theme.styles[%paramStyle]; + else + %themeStyle = %this.theme.getStyle(%this.theme.defaultStyles[Param]); + + if (%title $= "") + %this.param[%this.paramCount] = %themeStyle @ %text @ "\n"; + else + %this.param[%this.paramCount] = %themeTitleStyle @ %title @ ": " @ %themeStyle @ %text @ "\n"; + %this.paramCount++; +} + +function SuperTooltip::getFormatedText(%this) +{ + %text = %this.title @ "\n\n"; + + for(%i=0;%i<%this.paramCount;%i++) + { + %text = %text @ %this.param[%i]; + } + + return %text; +} \ No newline at end of file diff --git a/Templates/Full/game/tools/componentEditor/scripts/componentEditor.ed.cs b/Templates/Full/game/tools/componentEditor/scripts/componentEditor.ed.cs new file mode 100644 index 0000000000..9a9ce33d6e --- /dev/null +++ b/Templates/Full/game/tools/componentEditor/scripts/componentEditor.ed.cs @@ -0,0 +1,233 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +function GuiInspectorEntityGroup::CreateContent(%this) +{ +} + +function GuiInspectorEntityGroup::InspectObject( %this, %targetObject ) +{ + %this.stack.clear(); + %this.stack.addGuiControl(%this.createAddComponentList()); +} + +function GuiInspectorEntityGroup::createAddComponentList(%this) +{ + %extent = %this.getExtent(); + + %container = new GuiControl() + { + Profile = "EditorContainerProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + Position = "0 0"; + Extent = %extent.x SPC "25"; + }; + + %componentList = new GuiPopUpMenuCtrlEx(QuickEditComponentList) + { + Profile = "GuiPopupMenuProfile"; + HorizSizing = "width"; + VertSizing = "bottom"; + position = "28 4"; + Extent = (%extent.x - 28) SPC "18"; + hovertime = "100"; + tooltip = "The component to add to the object"; + tooltipProfile = "EditorToolTipProfile"; + }; + + %addButton = new GuiIconButtonCtrl() { + class = AddComponentQuickEditButton; + Profile = "EditorButton"; + HorizSizing = "right"; + VertSizing = "bottom"; + Position = "2 0"; + Extent = "24 24"; + buttonMargin = "4 4"; + iconLocation = "Left"; + sizeIconToButton = "0"; + iconBitmap = "tools/gui/images/iconAdd.png"; + hovertime = "100"; + tooltip = "Add the selected component to the object"; + tooltipProfile = "EditorToolTipProfile"; + componentList = %componentList; + }; + + %componentList.refresh(); + + %container.add(%componentList); + %container.add(%addButton); + + if(!isObject("componentTooltipTheme")) + { + %theme = createsupertooltiptheme("componentTooltipTheme"); + %theme.addstyle("headerstyle", ""); + %theme.addstyle("headertwostyle", ""); + %theme.addstyle("basictextstyle", ""); + %theme.setdefaultstyle("title", "headerstyle"); + %theme.setdefaultstyle("paramtitle", "headertwostyle"); + %theme.setdefaultstyle("param", "basictextstyle"); + %theme.setspacing(3, 0); + } + + return %container; +} + +function QuickEditComponentList::refresh(%this) +{ + %this.clear(); + + //find all ComponentAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "ComponentAsset")) + return; //if we didn't find ANY, just exit + + // Find all the types. + %count = %assetQuery.getCount(); + + %categories = ""; + for (%i = 0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %componentAsset = AssetDatabase.acquireAsset(%assetId); + %componentType = %componentAsset.componentType; + if (!isInList(%componentType, %categories)) + %categories = %categories TAB %componentType; + } + + %categories = trim(%categories); + + %index = 0; + %categoryCount = getFieldCount(%categories); + for (%i = 0; %i < %categoryCount; %i++) + { + %category = getField(%categories, %i); + %this.addCategory(%category); + + for (%j = 0; %j < %count; %j++) + { + %assetId = %assetQuery.getAsset(%j); + + %componentAsset = AssetDatabase.acquireAsset(%assetId); + %componentType = %componentAsset.componentType; + %friendlyName = %componentAsset.friendlyName; + + if (%componentType $= %category) + { + //TODO: Haven't worked out getting categories to look distinct + //from entries in the drop-down so for now just indent them for the visual distinction + %spacedName = " " @ %friendlyName; + %this.add(%spacedName, %index); + %this.component[%index] = %componentAsset; + %index++; + } + } + } +} + +function QuickEditComponentList::onHotTrackItem( %this, %itemID ) +{ + %componentObj = %this.component[%itemID]; + if( isObject( %componentObj ) && %this.componentDesc != %componentObj ) + { + SuperTooltipDlg.init("componentTooltipTheme"); + SuperTooltipDlg.setTitle(%componentObj.friendlyName); + SuperTooltipDlg.addParam("", %componentObj.description @ "\n"); + + %fieldCount = %componentObj.getComponentFieldCount(); + for (%i = 0; %i < %fieldCount; %i++) + { + %name = getField(%componentObj.getComponentField(%i), 0); + + SuperTooltipDlg.addParam(%name, %description @ "\n"); + } + %position = %this.getGlobalPosition(); + SuperTooltipDlg.processTooltip( %position,0,1 ); + %this.opened = true; + %this.componentDesc = %componentObj; + } + else if( !isObject( %componentObj ) ) + { + if( %this.opened == true ) + SuperTooltipDlg.hide(); + %this.componentDesc = ""; + } +} + +function QuickEditComponentList::setProperty(%this, %object) +{ + %this.objectToAdd = %object; +} + +function QuickEditComponentList::onSelect(%this) +{ + if( %this.opened == true ) + SuperTooltipDlg.hide(); + + %this.componentToAdd = %this.component[%this.getSelected()]; +} + +function QuickEditComponentList::onCancel( %this ) +{ + if( %this.opened == true ) + SuperTooltipDlg.hide(); +} + +function AddComponentQuickEditButton::onClick(%this) +{ + %component = %this.componentList.componentToAdd; + + %componentName = %this.componentList.componentToAdd.componentName; + %componentClass = %this.componentList.componentToAdd.componentClass; + + %command = "$ComponentEditor::newComponent = new" SPC %componentClass SPC "(){ class = \"" + @ %componentName @ "\"; };"; + + eval(%command); + + %instance = $ComponentEditor::newComponent; + %undo = new UndoScriptAction() + { + actionName = "Added Component"; + class = UndoAddComponent; + object = %this.componentList.objectToAdd; + component = %instance; + }; + + %undo.addToManager(LevelBuilderUndoManager); + + %instance.owner = Inspector.getInspectObject(0); + %instance.owner.add(%instance); + + Inspector.schedule( 50, "refresh" ); + EWorldEditor.isDirty = true; +} + +function addComponent(%obj, %instance) +{ + echo("Adding the component!"); + %obj.addComponent(%instance); + Inspector.schedule( 50, "refresh" ); + EWorldEditor.isDirty = true; +} + From f703a842183748dc246aff79d13feef0ab1b4c6d Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 16 May 2016 13:21:44 -0500 Subject: [PATCH 230/324] Duplicates the missing samplerstate configurations in the empty template, for parity. --- .../scripts/client/lighting/advanced/shaders.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs index 7e6816db3e..08a82b8dc8 100644 --- a/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/shaders.cs @@ -39,9 +39,11 @@ mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) mSamplerNames[1] = "shadowMap"; - samplerStates[2] = SamplerClampLinear; // SSAO Mask - mSamplerNames[2] = "ssaoMask"; - samplerStates[3] = SamplerWrapPoint; // Random Direction Map + samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not change this to linear, as all cards can not filter equally.) + mSamplerNames[2] = "dynamicShadowMap"; + samplerStates[3] = SamplerClampLinear; // SSAO Mask + mSamplerNames[3] = "ssaoMask"; + samplerStates[4] = SamplerWrapPoint; // Random Direction Map cullDefined = true; cullMode = GFXCullNone; @@ -114,8 +116,10 @@ mSamplerNames[0] = "prePassBuffer"; samplerStates[1] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) mSamplerNames[1] = "shadowMap"; - samplerStates[2] = SamplerClampLinear; // Cookie Map - samplerStates[3] = SamplerWrapPoint; // Random Direction Map + samplerStates[2] = SamplerClampPoint; // Shadow Map (Do not use linear, these are perspective projections) + mSamplerNames[2] = "dynamicShadowMap"; + samplerStates[3] = SamplerClampLinear; // Cookie Map + samplerStates[4] = SamplerWrapPoint; // Random Direction Map cullDefined = true; cullMode = GFXCullCW; From c1f02c05e1267b52876fb3e5110a7eaa1386f188 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 16 May 2016 16:03:24 -0500 Subject: [PATCH 231/324] Adds some console methods to the non-class namespace Rotation for some convenient utility functions for dealing with rotations. --- Engine/source/math/mRotation.cpp | 51 +++++++++++++++++++++++++++++++- Engine/source/math/mathTypes.cpp | 2 +- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/Engine/source/math/mRotation.cpp b/Engine/source/math/mRotation.cpp index d915348d69..69dfca35d0 100644 --- a/Engine/source/math/mRotation.cpp +++ b/Engine/source/math/mRotation.cpp @@ -20,6 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- #include "math/mRotation.h" +#include "console/console.h" +#include "console/engineAPI.h" #ifdef TORQUE_TESTS_ENABLED #include "testing/unitTesting.h" @@ -296,4 +298,51 @@ TEST(Maths, RotationF_Calculations) { //TODO: implement unit test }; -#endif \ No newline at end of file +#endif + +DefineConsoleStaticMethod(Rotation, Add, RotationF, (RotationF a, RotationF b), , + "Adds two rotations together.\n" + "@param a Rotation one." + "@param b Rotation two." + "@returns v sum of both rotations." + "@ingroup Math") +{ + return a + b; +} + +DefineConsoleStaticMethod(Rotation, Subtract, RotationF, (RotationF a, RotationF b), , + "Subtracts two rotations.\n" + "@param a Rotation one." + "@param b Rotation two." + "@returns v difference of both rotations." + "@ingroup Math") +{ + return a - b; +} + +DefineConsoleStaticMethod(Rotation, Interpolate, RotationF, (RotationF a, RotationF b, F32 factor), , + "Interpolates between two rotations.\n" + "@param a Rotation one." + "@param b Rotation two." + "@param factor The amount to interpolate between the two." + "@returns v, interpolated result." + "@ingroup Math") +{ + RotationF result; + result.interpolate(a, b, factor); + return result; +} + +DefineConsoleStaticMethod(Rotation, LookAt, RotationF, (Point3F origin, Point3F target, Point3F up), + (Point3F(0, 0, 0), Point3F(0, 0, 0), Point3F(0, 0, 1)), + "Provides a rotation orientation to look at a target from a given position.\n" + "@param origin Position of the object doing the looking." + "@param target Position to be looked at." + "@param up The up angle to orient the rotation." + "@returns v orientation result." + "@ingroup Math") +{ + RotationF result; + result.lookAt(origin, target, up); + return result; +} \ No newline at end of file diff --git a/Engine/source/math/mathTypes.cpp b/Engine/source/math/mathTypes.cpp index dd018b2a4d..9e56052078 100644 --- a/Engine/source/math/mathTypes.cpp +++ b/Engine/source/math/mathTypes.cpp @@ -583,7 +583,7 @@ ConsoleSetType( TypeEaseF ) // TypeRotationF //----------------------------------------------------------------------------- ConsoleType(RotationF, TypeRotationF, RotationF, "") -//ImplementConsoleTypeCasters( TypeRotationF, RotationF ) +ImplementConsoleTypeCasters( TypeRotationF, RotationF ) ConsoleGetType(TypeRotationF) { From c0a96c908f861ef824aa971df0db7a431217558f Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 17 May 2016 12:46:39 -0500 Subject: [PATCH 232/324] Adds handling for if the user cancels out of the file dialog, and adds support for proper multi-filters. --- .../platform/nativeDialogs/fileDialog.cpp | 60 +++++++++++++------ 1 file changed, 43 insertions(+), 17 deletions(-) diff --git a/Engine/source/platform/nativeDialogs/fileDialog.cpp b/Engine/source/platform/nativeDialogs/fileDialog.cpp index f7eb26a53a..08d6895854 100644 --- a/Engine/source/platform/nativeDialogs/fileDialog.cpp +++ b/Engine/source/platform/nativeDialogs/fileDialog.cpp @@ -184,33 +184,56 @@ static const U32 convertUTF16toUTF8DoubleNULL(const UTF16 *unistring, UTF8 *out // bool FileDialog::Execute() { - String suffix; + String strippedFilters; U32 filtersCount = StringUnit::getUnitCount(mData.mFilters, "|"); for (U32 i = 1; i < filtersCount; ++i) { //The first of each pair is the name, which we'll skip because NFD doesn't support named filters atm - const char *filter = StringUnit::getUnit(mData.mFilters, i, "|"); + String filter = StringUnit::getUnit(mData.mFilters, i, "|"); - if (!dStrcmp(filter, "*.*")) + if (!dStrcmp(filter.c_str(), "*.*")) continue; - U32 c = 2; - const char* tmpchr = &filter[c]; - String tString = String(tmpchr); - tString.ToLower(tString); - suffix += tString; - suffix += String(","); - suffix += tString.ToUpper(tString); + U32 subFilterCount = StringUnit::getUnitCount(filter, ";"); + + //if we have a 'super filter', break it down to sub-options as well + if (subFilterCount > 1) + { + String suffixFilter; + String subFilters; + + for (U32 f = 0; f < subFilterCount; ++f) + { + String subFilter = StringUnit::getUnit(filter, f, ";"); + + suffixFilter += String::ToLower(subFilter) + "," + String::ToUpper(subFilter) + ","; + subFilters += String::ToLower(subFilter) + "," + String::ToUpper(subFilter) + ";"; + } + + suffixFilter = suffixFilter.substr(0, suffixFilter.length() - 1); + suffixFilter += ";"; + + strippedFilters += suffixFilter + subFilters; + } + else //otherwise, just add the filter + { + strippedFilters += String::ToLower(filter) + "," + String::ToUpper(filter) + ";"; + } ++i; - if (i < filtersCount-2) - suffix += String(";"); + if (i < filtersCount - 2) + strippedFilters += String(";"); } - String strippedFilters = suffix; - strippedFilters.replace(";",","); - strippedFilters += String(";") + suffix; + + //strip the last character, if it's unneeded + if (strippedFilters.endsWith(";")) + { + strippedFilters = strippedFilters.substr(0, strippedFilters.length() - 1); + } + + strippedFilters.replace("*.", ""); // Get the current working directory, so we can back up to it once Windows has // done its craziness and messed with it. @@ -236,10 +259,14 @@ bool FileDialog::Execute() else if (mData.mStyle & FileDialogData::FDS_MULTIPLEFILES) result = NFD_OpenDialogMultiple(strippedFilters.c_str(), defaultPath.c_str(), &pathSet); + if (result == NFD_CANCEL) + { + return false; + } + String resultPath = String(outPath).replace(rootDir, String("")); resultPath = resultPath.replace(0, 1, String("")).c_str(); //kill '\\' prefix resultPath = resultPath.replace(String("\\"), String("/")); - // Did we select a file? if (result != NFD_OKAY) @@ -278,7 +305,6 @@ bool FileDialog::Execute() // Return success. return true; - } DefineEngineMethod(FileDialog, Execute, bool, (), , From 36bb0b3c540600d8dbd81b9e0230bbeeb5e6bbf8 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 17 May 2016 23:57:30 -0500 Subject: [PATCH 233/324] Minor corrections to some component scripts to clear old references. --- .../scripts/server/components/game/camera.cs | 2 -- .../server/components/game/controlObject.cs | 2 -- .../server/components/input/fpsControls.cs | 2 -- .../server/gameObjects/GameObjectList.xml | 28 ------------------- .../gameObjects/ThirdPersonPlayerObject.cs | 6 ---- 5 files changed, 40 deletions(-) delete mode 100644 Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml diff --git a/Templates/Full/game/scripts/server/components/game/camera.cs b/Templates/Full/game/scripts/server/components/game/camera.cs index e0b6bc41e9..24363bd82e 100644 --- a/Templates/Full/game/scripts/server/components/game/camera.cs +++ b/Templates/Full/game/scripts/server/components/game/camera.cs @@ -22,8 +22,6 @@ function CameraComponent::onAdd(%this) { - Parent::onBehaviorAdd(%this); - %this.addComponentField(clientOwner, "The client that views this camera", "int", "1", ""); %test = %this.clientOwner; diff --git a/Templates/Full/game/scripts/server/components/game/controlObject.cs b/Templates/Full/game/scripts/server/components/game/controlObject.cs index 5b67f394bd..7f477ecca3 100644 --- a/Templates/Full/game/scripts/server/components/game/controlObject.cs +++ b/Templates/Full/game/scripts/server/components/game/controlObject.cs @@ -24,8 +24,6 @@ function ControlObjectComponent::onAdd(%this) { - Parent::onBehaviorAdd(%this); - %this.addComponentField(clientOwner, "The shape to use for rendering", "int", "1", ""); %clientID = %this.getClientID(); diff --git a/Templates/Full/game/scripts/server/components/input/fpsControls.cs b/Templates/Full/game/scripts/server/components/input/fpsControls.cs index 3e7f571bdd..8331e409d7 100644 --- a/Templates/Full/game/scripts/server/components/input/fpsControls.cs +++ b/Templates/Full/game/scripts/server/components/input/fpsControls.cs @@ -24,8 +24,6 @@ function FPSControls::onAdd(%this) { - Parent::onBehaviorAdd(%this); - // %this.beginGroup("Keys"); %this.addComponentField(forwardKey, "Key to bind to vertical thrust", keybind, "keyboard w"); diff --git a/Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml b/Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml deleted file mode 100644 index e9cc73c896..0000000000 --- a/Templates/Full/game/scripts/server/gameObjects/GameObjectList.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - ScriptedTriggerObject - data/EC/scripts/gameObjects/ScriptedTriggerObject.taml - data/EC/scripts/gameObjects/ScriptedTriggerObject.cs - - - PlayerObject - data/EC/scripts/gameObjects/playerObject.taml - data/EC/scripts/gameObjects/playerObject.cs - - - spectatorObject - data/EC/scripts/gameObjects/spectatorObject.taml - data/EC/scripts/gameObjects/spectatorObject.cs - - - ThirdPersonPlayerObject - data/EC/scripts/gameObjects/ThirdPersonPlayerObject.taml - data/EC/scripts/gameObjects/ThirdPersonPlayerObject.cs - - - FirstPersonArms - data/EC/scripts/gameObjects/FirstPersonArms.taml - data/EC/scripts/gameObjects/FirstPersonArms.cs - - diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs index bc92db12de..3ab05a79d4 100644 --- a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.cs @@ -26,12 +26,6 @@ %this.aimedMaxPitch = 90; %this.aimedMinPitch = -90; - - %this.arms = SGOManager.spawn("FirstPersonArms", true); - - %this.add(arms); - - //%this.mesh.mountObject(%this.arms, "Eye"); } function ThirdPersonPlayerObject::onRemove(%this) From 03e6228e562691693d34c3ff3a3700682b660c3a Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 17 May 2016 23:58:34 -0500 Subject: [PATCH 234/324] Adjusts the CMAKE install script to not install the E/C-related template files if that's not set as a flag. --- Tools/CMake/torque3d.cmake | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index c8c017583f..263ae5d786 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -726,7 +726,34 @@ endif() if(TORQUE_TEMPLATE) message("Prepare Template(${TORQUE_TEMPLATE}) install...") - INSTALL(DIRECTORY "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game" DESTINATION "${TORQUE_APP_DIR}") + file(GLOB_RECURSE INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/*") + + IF( NOT TORQUE_EXPERIMENTAL_EC) + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/art.module.taml") + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/art/shapes/actors/Soldier/soldier.asset.taml") + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/scripts.module.taml") + + foreach(ITEM ${INSTALL_FILES_AND_DIRS}) + get_filename_component( dir ${ITEM} DIRECTORY ) + get_filename_component( fileName ${ITEM} NAME ) + if( ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/game + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/components/input + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/scripts/server/gameObjects + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/gui + OR ${dir} STREQUAL ${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/game/tools/componentEditor/scripts ) + list(REMOVE_ITEM INSTALL_FILES_AND_DIRS ${dir}/${fileName}) + ENDIF() + endforeach() + ENDIF() + + foreach(ITEM ${INSTALL_FILES_AND_DIRS}) + get_filename_component( dir ${ITEM} DIRECTORY ) + STRING(REGEX REPLACE "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/" "${TORQUE_APP_DIR}/" INSTALL_DIR ${dir}) + install( FILES ${ITEM} DESTINATION ${INSTALL_DIR} ) + endforeach() + if(WIN32) INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/cleanShaders.bat" DESTINATION "${TORQUE_APP_DIR}") INSTALL(FILES "${CMAKE_SOURCE_DIR}/Templates/${TORQUE_TEMPLATE}/DeleteCachedDTSs.bat" DESTINATION "${TORQUE_APP_DIR}") From d79b9a2988f558c2134901cc841cb8ef7410d668 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 18 May 2016 06:38:13 -0500 Subject: [PATCH 235/324] removes w=z trick (was causing fisheye, effectively) --- Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp | 2 +- Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp | 2 +- .../core/scripts/client/lighting/advanced/deferredShading.cs | 2 +- Templates/Empty/game/shaders/common/basicCloudsV.hlsl | 1 - Templates/Empty/game/shaders/common/cloudLayerV.hlsl | 1 - Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl | 1 - Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl | 1 - .../core/scripts/client/lighting/advanced/deferredShading.cs | 2 +- Templates/Full/game/shaders/common/basicCloudsV.hlsl | 1 - Templates/Full/game/shaders/common/cloudLayerV.hlsl | 1 - Templates/Full/game/shaders/common/gl/basicCloudsV.glsl | 1 - Templates/Full/game/shaders/common/gl/cloudLayerV.glsl | 1 - 12 files changed, 4 insertions(+), 12 deletions(-) diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index 78c45a09cd..11081125c6 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -2805,7 +2805,7 @@ void DeferredSkyGLSL::processVert( Vector &componentList, { Var *outPosition = (Var*)LangElement::find( "gl_Position" ); MultiLine *meta = new MultiLine; - meta->addStatement( new GenOp( " @.w = @.z;\r\n", outPosition, outPosition ) ); + //meta->addStatement( new GenOp( " @.w = @.z;\r\n", outPosition, outPosition ) ); output = meta; } diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 8878f26004..78e1c3b898 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -3000,7 +3000,7 @@ void DeferredSkyHLSL::processVert( Vector &componentList, { Var *outPosition = (Var*)LangElement::find( "hpos" ); MultiLine *meta = new MultiLine; - meta->addStatement( new GenOp( " @.w = @.z;\r\n", outPosition, outPosition ) ); + //meta->addStatement( new GenOp( " @.w = @.z;\r\n", outPosition, outPosition ) ); output = meta; } diff --git a/Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs b/Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs index d53e6965f6..ad9732e0f2 100644 --- a/Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs +++ b/Templates/Empty/game/core/scripts/client/lighting/advanced/deferredShading.cs @@ -55,7 +55,7 @@ singleton ShaderData( DeferredColorShader ) singleton PostEffect( AL_DeferredShading ) { - renderTime = "PFXBeforeBin"; + renderTime = "PFXAfterBin"; renderBin = "SkyBin"; shader = AL_DeferredShader; stateBlock = AL_DeferredShadingState; diff --git a/Templates/Empty/game/shaders/common/basicCloudsV.hlsl b/Templates/Empty/game/shaders/common/basicCloudsV.hlsl index 477f17d508..a176fdbcdc 100644 --- a/Templates/Empty/game/shaders/common/basicCloudsV.hlsl +++ b/Templates/Empty/game/shaders/common/basicCloudsV.hlsl @@ -46,7 +46,6 @@ ConnectData main( CloudVert IN ) ConnectData OUT; OUT.hpos = mul(modelview, float4(IN.pos,1.0)); - OUT.hpos.w = OUT.hpos.z; float2 uv = IN.uv0; uv += texOffset; diff --git a/Templates/Empty/game/shaders/common/cloudLayerV.hlsl b/Templates/Empty/game/shaders/common/cloudLayerV.hlsl index 94f8b62cb6..d60dd251d8 100644 --- a/Templates/Empty/game/shaders/common/cloudLayerV.hlsl +++ b/Templates/Empty/game/shaders/common/cloudLayerV.hlsl @@ -63,7 +63,6 @@ ConnectData main( CloudVert IN ) ConnectData OUT; OUT.hpos = mul(modelview, float4(IN.pos,1.0)); - OUT.hpos.w = OUT.hpos.z; // Offset the uv so we don't have a seam directly over our head. float2 uv = IN.uv0 + float2( 0.5, 0.5 ); diff --git a/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl b/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl index 40c597120e..cccbafa8ca 100644 --- a/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl +++ b/Templates/Empty/game/shaders/common/gl/basicCloudsV.glsl @@ -41,7 +41,6 @@ out vec2 texCoord; void main() { gl_Position = tMul(modelview, IN_pos); - gl_Position.w = gl_Position.z; vec2 uv = IN_uv0; uv += texOffset; diff --git a/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl b/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl index cba5c009ad..395c6f286e 100644 --- a/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl +++ b/Templates/Empty/game/shaders/common/gl/cloudLayerV.glsl @@ -62,7 +62,6 @@ void main() vec2 IN_uv0 = vTexCoord0.st; gl_Position = modelview * IN_pos; - gl_Position.w = gl_Position.z; // Offset the uv so we don't have a seam directly over our head. vec2 uv = IN_uv0 + vec2( 0.5, 0.5 ); diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs index d53e6965f6..ad9732e0f2 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/deferredShading.cs @@ -55,7 +55,7 @@ singleton ShaderData( DeferredColorShader ) singleton PostEffect( AL_DeferredShading ) { - renderTime = "PFXBeforeBin"; + renderTime = "PFXAfterBin"; renderBin = "SkyBin"; shader = AL_DeferredShader; stateBlock = AL_DeferredShadingState; diff --git a/Templates/Full/game/shaders/common/basicCloudsV.hlsl b/Templates/Full/game/shaders/common/basicCloudsV.hlsl index 477f17d508..a176fdbcdc 100644 --- a/Templates/Full/game/shaders/common/basicCloudsV.hlsl +++ b/Templates/Full/game/shaders/common/basicCloudsV.hlsl @@ -46,7 +46,6 @@ ConnectData main( CloudVert IN ) ConnectData OUT; OUT.hpos = mul(modelview, float4(IN.pos,1.0)); - OUT.hpos.w = OUT.hpos.z; float2 uv = IN.uv0; uv += texOffset; diff --git a/Templates/Full/game/shaders/common/cloudLayerV.hlsl b/Templates/Full/game/shaders/common/cloudLayerV.hlsl index 94f8b62cb6..d60dd251d8 100644 --- a/Templates/Full/game/shaders/common/cloudLayerV.hlsl +++ b/Templates/Full/game/shaders/common/cloudLayerV.hlsl @@ -63,7 +63,6 @@ ConnectData main( CloudVert IN ) ConnectData OUT; OUT.hpos = mul(modelview, float4(IN.pos,1.0)); - OUT.hpos.w = OUT.hpos.z; // Offset the uv so we don't have a seam directly over our head. float2 uv = IN.uv0 + float2( 0.5, 0.5 ); diff --git a/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl b/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl index 40c597120e..cccbafa8ca 100644 --- a/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl +++ b/Templates/Full/game/shaders/common/gl/basicCloudsV.glsl @@ -41,7 +41,6 @@ out vec2 texCoord; void main() { gl_Position = tMul(modelview, IN_pos); - gl_Position.w = gl_Position.z; vec2 uv = IN_uv0; uv += texOffset; diff --git a/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl b/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl index cba5c009ad..395c6f286e 100644 --- a/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl +++ b/Templates/Full/game/shaders/common/gl/cloudLayerV.glsl @@ -62,7 +62,6 @@ void main() vec2 IN_uv0 = vTexCoord0.st; gl_Position = modelview * IN_pos; - gl_Position.w = gl_Position.z; // Offset the uv so we don't have a seam directly over our head. vec2 uv = IN_uv0 + vec2( 0.5, 0.5 ); From f54fde9c6b62443b74c24cb83fafaa8dd48d500c Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 19 May 2016 23:42:38 -0500 Subject: [PATCH 236/324] Missing the preprocessor define in the project generation. --- Tools/CMake/torque3d.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 263ae5d786..bb0b274cbc 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -428,6 +428,10 @@ if(TORQUE_DEDICATED) addDef(TORQUE_DEDICATED) endif() +if(TORQUE_EXPERIMENTAL_EC) + addDef(TORQUE_EXPERIMENTAL_EC) +endif() + #modules dir file(GLOB modules "modules/*.cmake") foreach(module ${modules}) From 7ae1d3d99627f73b41b0a702625c0ac8ccd4c256 Mon Sep 17 00:00:00 2001 From: John3 Date: Fri, 20 May 2016 17:04:56 -0500 Subject: [PATCH 237/324] Bug space folder in scene tree. Fix by David Robert Pemberton https://www.garagegames.com/community/blogs/view/22295 You can see the folder "soldier actor" --- .../Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs | 4 +++- .../game/tools/worldEditor/scripts/editors/creator.ed.cs | 4 +++- .../Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs | 4 +++- .../Full/game/tools/worldEditor/scripts/editors/creator.ed.cs | 4 +++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index 180a9a8ab5..d61fe79eaa 100644 --- a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -380,7 +380,8 @@ function strcapitalise( %str ) // Ignore assets in the tools folder %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %splitPath, "/", " " ); if ( getWord( %splitPath, 0 ) $= "tools" ) { %fullPath = findNextFileMultiExpr( %filePatterns ); @@ -393,6 +394,7 @@ function strcapitalise( %str ) // Add this file's path ( parent folders ) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "|", " " ); %r = ShapeEdSelectMenu.findText( %temp ); if ( %r == -1 ) ShapeEdSelectMenu.add( %temp ); diff --git a/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs index dc5d7f9916..afc9c7c850 100644 --- a/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -318,7 +318,8 @@ } %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFileMultiExpr( getFormatExtensions() ); @@ -332,6 +333,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "|", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { diff --git a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index 180a9a8ab5..d61fe79eaa 100644 --- a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -380,7 +380,8 @@ function strcapitalise( %str ) // Ignore assets in the tools folder %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %splitPath, "/", " " ); if ( getWord( %splitPath, 0 ) $= "tools" ) { %fullPath = findNextFileMultiExpr( %filePatterns ); @@ -393,6 +394,7 @@ function strcapitalise( %str ) // Add this file's path ( parent folders ) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "|", " " ); %r = ShapeEdSelectMenu.findText( %temp ); if ( %r == -1 ) ShapeEdSelectMenu.add( %temp ); diff --git a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs index 6832410dde..daad872014 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -318,7 +318,8 @@ } %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFileMultiExpr( getFormatExtensions() ); @@ -332,6 +333,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "|", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { From 6517b864919b7651a8de1b08d307af6e422638fb Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 21 May 2016 11:47:10 -0500 Subject: [PATCH 238/324] Editor integration for creation of entities and GameObjects. --- .../server/components/game/itemRotate.cs | 2 +- .../server/gameObjects/GameObjectManager.cs | 68 ++++++-- .../worldEditor/gui/GeneralSettingsTab.ed.gui | 71 ++++++++ .../tools/worldEditor/scripts/EditorGui.ed.cs | 163 ++++++++++++++++++ .../worldEditor/scripts/editorPrefs.ed.cs | 1 + .../worldEditor/scripts/editors/creator.ed.cs | 1 + 6 files changed, 294 insertions(+), 12 deletions(-) diff --git a/Templates/Full/game/scripts/server/components/game/itemRotate.cs b/Templates/Full/game/scripts/server/components/game/itemRotate.cs index 259b441114..947d192143 100644 --- a/Templates/Full/game/scripts/server/components/game/itemRotate.cs +++ b/Templates/Full/game/scripts/server/components/game/itemRotate.cs @@ -29,7 +29,7 @@ %this.addComponentField(horizontal, "Rotate horizontal or verticle, true for horizontal", "bool", "1", ""); } -function ItemRotateBehavior::Update(%this) +function ItemRotationComponent::Update(%this) { %tickRate = 0.032; diff --git a/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs index 138bcb8be4..57c47c5cfd 100644 --- a/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs +++ b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs @@ -39,15 +39,12 @@ function execGameObjects() } } -function spawnGameObject(%name, %addToMissionGroup) +function findGameObject(%name) { - if(%addToMissionGroup $= "") - %addToMissionGroup = true; - //find all GameObjectAssets %assetQuery = new AssetQuery(); if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset")) - return; //if we didn't find ANY, just exit + return 0; //if we didn't find ANY, just exit %count = %assetQuery.getCount(); @@ -61,15 +58,64 @@ function spawnGameObject(%name, %addToMissionGroup) { if(isFile(%gameObjectAsset.TAMLFilePath)) { - %newSGOObject = TamlRead(%gameObjectAsset.TAMLFilePath); - - if(%addToMissionGroup == true) - MissionGroup.add(%newSGOObject); - - return %newSGOObject; + return %gameObjectAsset; } } } return 0; +} + +function spawnGameObject(%name, %addToMissionGroup) +{ + if(%addToMissionGroup $= "") + %addToMissionGroup = true; + + %gameObjectAsset = findGameObject(%name); + + if(isObject(%gameObjectAsset)) + { + %newSGOObject = TamlRead(%gameObjectAsset.TAMLFilePath); + + if(%addToMissionGroup == true) + MissionGroup.add(%newSGOObject); + + return %newSGOObject; + } + + return 0; +} + +function saveGameObject(%name, %tamlPath, %scriptPath) +{ + %gameObjectAsset = findGameObject(%name); + + //find if it already exists. If it does, we'll update it, if it does not, we'll make a new asset + if(isObject(%gameObjectAsset)) + { + %assetID = %gameObjectAsset.getAssetId(); + + %gameObjectAsset.TAMLFilePath = %tamlPath; + %gameObjectAsset.scriptFilePath = %scriptPath; + + TAMLWrite(%gameObjectAsset, AssetDatabase.getAssetFilePath(%assetID)); + AssetDatabase.refreshAsset(%assetID); + } + else + { + //Doesn't exist, so make a new one + %gameObjectAsset = new GameObjectAsset() + { + assetName = %name @ "Asset"; + gameObjectName = %name; + TAMLFilePath = %tamlPath; + scriptFilePath = %scriptPath; + }; + + //Save it alongside the taml file + %path = filePath(%tamlPath); + + TAMLWrite(%gameObjectAsset, %path @ "/" @ %name @ ".asset.taml"); + AssetDatabase.refreshAllAssets(true); + } } \ No newline at end of file diff --git a/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui b/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui index d89ff1a4d9..b85e78ae0d 100644 --- a/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/GeneralSettingsTab.ed.gui @@ -204,6 +204,77 @@ editorSettingsWrite = "EditorGui.writeWorldEditorSettings();"; }; }; + new GuiControl() { + position = "0 0"; + extent = "430 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiDefaultProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + + new GuiTextCtrl() { + text = "New Game Objects"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "5 1"; + extent = "70 16"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "ToolsGuiTextRightProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextEditCtrl() { + historySize = "0"; + tabComplete = "0"; + sinkAllKeyEvents = "0"; + password = "0"; + passwordMask = "*"; + text = "scripts/server/gameObjects"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "81 0"; + extent = "345 17"; + minExtent = "8 2"; + horizSizing = "width"; + vertSizing = "bottom"; + profile = "ToolsGuiTextEditProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "ToolsGuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "1"; + class = "ESettingsWindowTextEdit"; + editorSettingsRead = "EditorGui.readWorldEditorSettings();"; + editorSettingsValue = "WorldEditor/newGameObjectDir"; + editorSettingsWrite = "EditorGui.writeWorldEditorSettings();"; + }; + }; }; }; }; diff --git a/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs index 6f80d9206d..f9ab055af4 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs @@ -1643,6 +1643,20 @@ function VisibilityDropdownToggle() object = -1; }; + + if(%obj.isMemberOfClass("Entity")) + { + %popup = ETEntityContextPopup; + if( !isObject( %popup ) ) + %popup = new PopupMenu( ETEntityContextPopup : ETSimGroupContextPopup ) + { + superClass = "MenuBuilder"; + isPopup = "1"; + + item[ 12 ] = "-"; + item[ 13 ] = "Convert to Game Object" TAB "" TAB "EWorldEditor.createGameObject( %this.object );"; + }; + } %popup.object = %obj; @@ -2204,6 +2218,155 @@ function updateEditorLightingProgress() EditorTree.buildVisibleTree( true ); } +function EWorldEditor::createGameObject( %this, %entity ) +{ + if(!isObject(GameObjectBuilder)) + { + new GuiControl(GameObjectBuilder, EditorGuiGroup) { + profile = "ToolsGuiDefaultProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "0 0"; + extent = "800 600"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + + new GuiWindowCtrl(GameObjectBuilderTargetWindow) { + profile = "ToolsGuiWindowProfile"; + horizSizing = "center"; + vertSizing = "center"; + position = "384 205"; + extent = "256 102"; + minExtent = "256 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + resizeWidth = "1"; + resizeHeight = "1"; + canMove = "1"; + canClose = "0"; + canMinimize = "0"; + canMaximize = "0"; + minSize = "50 50"; + text = "Create Object"; + + new GuiTextCtrl() { + profile = "GuiCenterTextProfile"; + horizSizing = "right"; + vertSizing = "bottom"; + position = "9 26"; + extent = "84 16"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + text = "Object Name:"; + }; + new GuiTextEditCtrl(GameObjectBuilderObjectName) { + class = ObjectBuilderGuiTextEditCtrl; + profile = "ToolsGuiTextEditProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "78 26"; + extent = "172 18"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + helpTag = "0"; + historySize = "0"; + }; + new GuiButtonCtrl(GameObjectBuilderOKButton) { + profile = "ToolsGuiButtonProfile"; + horizSizing = "width"; + vertSizing = "bottom"; + position = "7 250"; + extent = "156 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "EWorldEditor.buildGameObject();"; + helpTag = "0"; + text = "Create New"; + Accelerator = "return"; + }; + new GuiButtonCtrl(GameObjectBuilderCancelButton) { + profile = "ToolsGuiButtonProfile"; + horizSizing = "left"; + vertSizing = "bottom"; + position = "170 250"; + extent = "80 24"; + minExtent = "8 8"; + visible = "1"; + setFirstResponder = "0"; + modal = "1"; + command = "Canvas.popDialog(GameObjectBuilder);"; + helpTag = "0"; + text = "Cancel"; + Accelerator = "escape"; + }; + }; + }; + + GameObjectBuilderTargetWindow.extent = getWord(GameObjectBuilderTargetWindow.extent, 0) SPC 88; + GameObjectBuilderOKButton.position = getWord(GameObjectBuilderOKButton.position, 0) SPC 57; + GameObjectBuilderCancelButton.position = getWord(GameObjectBuilderCancelButton.position, 0) SPC 57; + } + + GameObjectBuilderObjectName.text = ""; + GameObjectBuilder.selectedEntity = %entity; + + Canvas.pushDialog(GameObjectBuilder); +} + +function EWorldEditor::buildGameObject(%this) +{ + if(GameObjectBuilderObjectName.getText() $= "") + { + error("Attempted to make a new Game Object with no name!"); + Canvas.popDialog(GameObjectBuilder); + return; + } + + %path = EditorSettings.value( "WorldEditor/newGameObjectDir" ); + %className = GameObjectBuilderObjectName.getText(); + GameObjectBuilder.selectedEntity.class = %className; + Inspector.inspect(GameObjectBuilder.selectedEntity); + + %file = new FileObject(); + + if(%file.openForWrite(%path @ "\\" @ %className @ ".cs")) + { + %file.writeline("function " @ %className @ "::onAdd(%this)\n{\n\n}\n"); + %file.writeline("function " @ %className @ "::onRemove(%this)\n{\n\n}\n"); + + //todo, pre-write any event functions of interest + + %file.close(); + } + + //set up the paths + %tamlPath = %path @ "/" @ %className @ ".taml"; + %scriptPath = %path @ "/" @ %className @ ".cs"; + saveGameObject(%className, %tamlPath, %scriptPath); + + //reload it + execGameObjects(); + + //now, add the script file and a ref to the taml into our SGO manifest so we can readily spawn it later. + TamlWrite(GameObjectBuilder.selectedEntity, %tamlpath); + + GameObjectBuilder.selectedEntity = ""; + + Canvas.popDialog(GameObjectBuilder); +} + function EWorldEditor::selectAllObjectsInSet( %this, %set, %deselect ) { if( !isObject( %set ) ) diff --git a/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs index 0cc14bff00..1704e06ad2 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/editorPrefs.ed.cs @@ -34,6 +34,7 @@ EditorSettings.setDefaultValue( "orthoShowGrid", "1" ); EditorSettings.setDefaultValue( "currentEditor", "WorldEditorInspectorPlugin" ); EditorSettings.setDefaultValue( "newLevelFile", "tools/levels/BlankRoom.mis" ); +EditorSettings.setDefaultValue( "newGameObjectDir", "scripts/server/gameObjects" ); if( isFile( "C:/Program Files/Torsion/Torsion.exe" ) ) EditorSettings.setDefaultValue( "torsionPath", "C:/Program Files/Torsion/Torsion.exe" ); diff --git a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs index 6832410dde..a6507cbaf9 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -85,6 +85,7 @@ %this.registerMissionObject( "SFXSpace", "Sound Space" ); %this.registerMissionObject( "OcclusionVolume", "Occlusion Volume" ); %this.registerMissionObject( "AccumulationVolume", "Accumulation Volume" ); + %this.registerMissionObject( "Entity", "Entity" ); %this.endGroup(); From 04adb9f2409df1f3520eceae7940e24882fb98e9 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 21 May 2016 14:44:24 -0500 Subject: [PATCH 239/324] Added a small sanity check so we don't pointlessly throw an error when expanding an Entity's component stack in the scene tree. --- Engine/source/gui/controls/guiTreeViewCtrl.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.cpp b/Engine/source/gui/controls/guiTreeViewCtrl.cpp index 1e3dfa7124..b964188457 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.cpp +++ b/Engine/source/gui/controls/guiTreeViewCtrl.cpp @@ -3795,16 +3795,19 @@ void GuiTreeViewCtrl::onMouseDown(const GuiEvent & event) //We check if our object is an entity, and if it is, we call a 'onInspect' function. //This function is pretty much a special notifier to the entity so if it has any behaviors that do special //stuff in the editor, it can fire that up - Entity* e = dynamic_cast(item->getObject()); - if (item->mScriptInfo.mText != StringTable->insert("Components")) + if (item->isInspectorData()) { Entity* e = dynamic_cast(item->getObject()); - if (e) + if (item->mScriptInfo.mText != StringTable->insert("Components")) { - if (item->isExpanded()) - e->onInspect(); - else - e->onEndInspect(); + Entity* e = dynamic_cast(item->getObject()); + if (e) + { + if (item->isExpanded()) + e->onInspect(); + else + e->onEndInspect(); + } } } #endif From 4bb63f277e3655139235b4b70d730ce2e5f61f79 Mon Sep 17 00:00:00 2001 From: John3 Date: Sat, 21 May 2016 15:10:35 -0500 Subject: [PATCH 240/324] change pipe to underscore and fix prefabs assets --- .../game/tools/shapeEditor/scripts/shapeEditor.ed.cs | 4 ++-- .../game/tools/worldEditor/scripts/editors/creator.ed.cs | 8 +++++--- .../Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs | 4 ++-- .../game/tools/worldEditor/scripts/editors/creator.ed.cs | 8 +++++--- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index d61fe79eaa..391e0b2170 100644 --- a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -380,7 +380,7 @@ function strcapitalise( %str ) // Ignore assets in the tools folder %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %fullPath, " ", "_" ); %splitPath = strreplace( %splitPath, "/", " " ); if ( getWord( %splitPath, 0 ) $= "tools" ) { @@ -394,7 +394,7 @@ function strcapitalise( %str ) // Add this file's path ( parent folders ) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); - %temp = strreplace( %temp, "|", " " ); + %temp = strreplace( %temp, "_", " " ); %r = ShapeEdSelectMenu.findText( %temp ); if ( %r == -1 ) ShapeEdSelectMenu.add( %temp ); diff --git a/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs index afc9c7c850..43d4fb65c1 100644 --- a/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Empty/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -318,7 +318,7 @@ } %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %fullPath, " ", "_" ); %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { @@ -333,7 +333,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); - %temp = strreplace( %temp, "|", " " ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { @@ -432,7 +432,8 @@ while ( %fullPath !$= "" ) { %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFile( %expr ); @@ -446,6 +447,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { diff --git a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index d61fe79eaa..391e0b2170 100644 --- a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -380,7 +380,7 @@ function strcapitalise( %str ) // Ignore assets in the tools folder %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %fullPath, " ", "_" ); %splitPath = strreplace( %splitPath, "/", " " ); if ( getWord( %splitPath, 0 ) $= "tools" ) { @@ -394,7 +394,7 @@ function strcapitalise( %str ) // Add this file's path ( parent folders ) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); - %temp = strreplace( %temp, "|", " " ); + %temp = strreplace( %temp, "_", " " ); %r = ShapeEdSelectMenu.findText( %temp ); if ( %r == -1 ) ShapeEdSelectMenu.add( %temp ); diff --git a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs index daad872014..9f015f3590 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -318,7 +318,7 @@ } %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, " ", "|" ); + %splitPath = strreplace( %fullPath, " ", "_" ); %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { @@ -333,7 +333,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); - %temp = strreplace( %temp, "|", " " ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { @@ -432,7 +432,8 @@ while ( %fullPath !$= "" ) { %fullPath = makeRelativePath( %fullPath, getMainDotCSDir() ); - %splitPath = strreplace( %fullPath, "/", " " ); + %splitPath = strreplace( %fullPath, " ", "_" ); + %splitPath = strreplace( %splitPath, "/", " " ); if( getWord(%splitPath, 0) $= "tools" ) { %fullPath = findNextFile( %expr ); @@ -446,6 +447,7 @@ // Add this file's path (parent folders) to the // popup menu if it isn't there yet. %temp = strreplace( %pathFolders, " ", "/" ); + %temp = strreplace( %temp, "_", " " ); %r = CreatorPopupMenu.findText( %temp ); if ( %r == -1 ) { From 8a7159c00e0cff62c00b36924e86a9aba1bbe182 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 22 May 2016 23:51:58 -0500 Subject: [PATCH 241/324] Fixes the drawUtil rendering of polyhedrons by correcting the index ordering to work with triangleStrip as opposed to Fan. --- Engine/source/gfx/gfxDrawUtil.cpp | 2 +- Engine/source/math/mPolyhedron.impl.h | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Engine/source/gfx/gfxDrawUtil.cpp b/Engine/source/gfx/gfxDrawUtil.cpp index 9598220001..42b146a10c 100644 --- a/Engine/source/gfx/gfxDrawUtil.cpp +++ b/Engine/source/gfx/gfxDrawUtil.cpp @@ -1015,7 +1015,7 @@ void GFXDrawUtil::_drawSolidPolyhedron( const GFXStateBlockDesc &desc, const Any // Allocate a temp buffer for the face indices. - const U32 numIndices = poly.getNumEdges() * 2; + const U32 numIndices = poly.getNumEdges() * 3; const U32 numPlanes = poly.getNumPlanes(); GFXPrimitiveBufferHandle prims( mDevice, numIndices, 0, GFXBufferTypeVolatile ); diff --git a/Engine/source/math/mPolyhedron.impl.h b/Engine/source/math/mPolyhedron.impl.h index ef74995abd..796f113506 100644 --- a/Engine/source/math/mPolyhedron.impl.h +++ b/Engine/source/math/mPolyhedron.impl.h @@ -385,6 +385,8 @@ U32 PolyhedronImpl< Base >::extractFace( U32 plane, IndexType* outIndices, U32 m // so it should be sufficiently fast to just loop over the original // set. + U32 indexItr = 0; + do { // Add the vertex for the current edge. @@ -392,7 +394,15 @@ U32 PolyhedronImpl< Base >::extractFace( U32 plane, IndexType* outIndices, U32 m if( idx >= maxOutIndices ) return 0; - outIndices[ idx ++ ] = currentVertex; + ++indexItr; + + if (indexItr >= 3) + { + outIndices[idx++] = firstEdge->vertex[0]; + indexItr = 0; + } + + outIndices[idx++] = currentVertex; // Look for next edge. From cfd15d47e448f2ae581380784fd1cab6cef38361 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 24 May 2016 20:09:24 -0500 Subject: [PATCH 242/324] Correction to interpolation/warp issue caused by using the wrong variable. --- Engine/source/T3D/Entity.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Engine/source/T3D/Entity.cpp b/Engine/source/T3D/Entity.cpp index e80f4e8b85..680f098d93 100644 --- a/Engine/source/T3D/Entity.cpp +++ b/Engine/source/T3D/Entity.cpp @@ -404,8 +404,7 @@ U32 Entity::packUpdate(NetConnection *con, U32 mask, BitStream *stream) //mathWrite(*stream, getPosition()); mathWrite(*stream, mPos); - //mathWrite(*stream, getRotation()); - mathWrite(*stream, getRotation().asEulerF()); + mathWrite(*stream, getRotation()); mDelta.move.pack(stream); @@ -502,10 +501,7 @@ void Entity::unpackUpdate(NetConnection *con, BitStream *stream) RotationF rot; - EulerF eRot; - mathRead(*stream, &eRot); - - rot = RotationF(eRot); + mathRead(*stream, &rot); mDelta.move.unpack(stream); @@ -602,7 +598,8 @@ void Entity::unpackUpdate(NetConnection *con, BitStream *stream) mDelta.posVec = (cp - mDelta.pos) / mDelta.dt; QuatF cr; cr.interpolate(mDelta.rot[1], mDelta.rot[0], mDelta.dt); - mDelta.rot[1].interpolate(cr, pos, mDelta.dt / dt); + + mDelta.rot[1].interpolate(cr, rot.asQuatF(), mDelta.dt / dt); mDelta.rot[0].extrapolate(mDelta.rot[1], cr, mDelta.dt); } From 942235d11462c2d0ecc336b7ab31fda2646ad693 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 25 May 2016 03:08:28 -0500 Subject: [PATCH 243/324] Fixes vertcolor code insertion order, and applies it adaptively based on defered or forward lit context --- Engine/source/materials/materialFeatureTypes.cpp | 2 +- Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp | 5 ++++- Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp | 5 ++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Engine/source/materials/materialFeatureTypes.cpp b/Engine/source/materials/materialFeatureTypes.cpp index 85fbd2895b..513474c778 100644 --- a/Engine/source/materials/materialFeatureTypes.cpp +++ b/Engine/source/materials/materialFeatureTypes.cpp @@ -30,7 +30,6 @@ ImplementFeatureType( MFT_VertTransform, MFG_Transform, 0, true ); ImplementFeatureType( MFT_TexAnim, MFG_PreTexture, 1.0f, true ); ImplementFeatureType( MFT_Parallax, MFG_PreTexture, 2.0f, true ); -ImplementFeatureType( MFT_DiffuseVertColor, MFG_PreTexture, 3.0f, true ); ImplementFeatureType( MFT_AccuScale, MFG_PreTexture, 4.0f, true ); ImplementFeatureType( MFT_AccuDirection, MFG_PreTexture, 4.0f, true ); @@ -42,6 +41,7 @@ ImplementFeatureType( MFT_DiffuseMap, MFG_Texture, 2.0f, true ); ImplementFeatureType( MFT_OverlayMap, MFG_Texture, 3.0f, true ); ImplementFeatureType( MFT_DetailMap, MFG_Texture, 4.0f, true ); ImplementFeatureType( MFT_DiffuseColor, MFG_Texture, 5.0f, true ); +ImplementFeatureType( MFT_DiffuseVertColor, MFG_Texture, 6.0f, true ); ImplementFeatureType( MFT_AlphaTest, MFG_Texture, 7.0f, true ); ImplementFeatureType( MFT_SpecularMap, MFG_Texture, 8.0f, true ); ImplementFeatureType( MFT_NormalMap, MFG_Texture, 9.0f, true ); diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index 11081125c6..e1433c11f7 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -1194,7 +1194,10 @@ void DiffuseVertColorFeatureGLSL::processPix( Vector &compon } MultiLine* meta = new MultiLine; - meta->addStatement( new GenOp( " @;\r\n", assignColor( vertColor, Material::Mul ) ) ); + if (fd.features[MFT_isDeferred]) + meta->addStatement(new GenOp(" @;\r\n", assignColor(vertColor, Material::Mul, NULL, ShaderFeature::RenderTarget1))); + else + meta->addStatement(new GenOp(" @;\r\n", assignColor(vertColor, Material::Mul))); output = meta; } diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index 78e1c3b898..879176a443 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -1258,7 +1258,10 @@ void DiffuseVertColorFeatureHLSL::processPix( Vector &compon } MultiLine* meta = new MultiLine; - meta->addStatement( new GenOp( " @;\r\n", assignColor( vertColor, Material::Mul ) ) ); + if (fd.features[MFT_isDeferred]) + meta->addStatement(new GenOp(" @;\r\n", assignColor(vertColor, Material::Mul, NULL, ShaderFeature::RenderTarget1))); + else + meta->addStatement(new GenOp(" @;\r\n", assignColor(vertColor, Material::Mul))); output = meta; } From 358bbdb7401c1a5d2c8387e9b72e12d4aa295430 Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 25 May 2016 13:32:20 -0500 Subject: [PATCH 244/324] Removed script calls to some fields that no longer exist, which was causing console errors. --- .../game/tools/materialEditor/scripts/materialEditor.ed.cs | 3 --- .../game/tools/materialEditor/scripts/materialEditor.ed.cs | 3 --- 2 files changed, 6 deletions(-) diff --git a/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs b/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs index be7d55c393..c1f01f1a77 100644 --- a/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs +++ b/Templates/Empty/game/tools/materialEditor/scripts/materialEditor.ed.cs @@ -918,9 +918,6 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->vertLitCheckbox.setValue((%material).vertLit[%layer]); MaterialEditorPropertiesWindow-->vertColorSwatch.color = (%material).vertColor[%layer]; MaterialEditorPropertiesWindow-->subSurfaceCheckbox.setValue((%material).subSurface[%layer]); - MaterialEditorPropertiesWindow-->subSurfaceColorSwatch.color = (%material).subSurfaceColor[%layer]; - MaterialEditorPropertiesWindow-->subSurfaceRolloffTextEdit.setText((%material).subSurfaceRolloff[%layer]); - MaterialEditorPropertiesWindow-->minnaertTextEdit.setText((%material).minnaertConstant[%layer]); // Animation properties MaterialEditorPropertiesWindow-->RotationAnimation.setValue(0); diff --git a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs index be7d55c393..c1f01f1a77 100644 --- a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs +++ b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs @@ -918,9 +918,6 @@ singleton Material(notDirtyMaterial) MaterialEditorPropertiesWindow-->vertLitCheckbox.setValue((%material).vertLit[%layer]); MaterialEditorPropertiesWindow-->vertColorSwatch.color = (%material).vertColor[%layer]; MaterialEditorPropertiesWindow-->subSurfaceCheckbox.setValue((%material).subSurface[%layer]); - MaterialEditorPropertiesWindow-->subSurfaceColorSwatch.color = (%material).subSurfaceColor[%layer]; - MaterialEditorPropertiesWindow-->subSurfaceRolloffTextEdit.setText((%material).subSurfaceRolloff[%layer]); - MaterialEditorPropertiesWindow-->minnaertTextEdit.setText((%material).minnaertConstant[%layer]); // Animation properties MaterialEditorPropertiesWindow-->RotationAnimation.setValue(0); From fb7e4f92ef4e6e38819ff871cbe2f260b5bcd162 Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 25 May 2016 22:16:24 -0500 Subject: [PATCH 245/324] Adds in a GameObjects folder that lists all available game objects to the Scripted objects tab in the creator panel in the editor. --- .../worldEditor/scripts/editors/creator.ed.cs | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs index a6507cbaf9..1712097ea5 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/editors/creator.ed.cs @@ -304,6 +304,36 @@ %this.addShapeIcon( %obj ); } } + + //Add a separate folder for Game Objects + if(isClass("Entity")) + { + if(%address $= "") + { + %this.addFolderIcon("GameObjects"); + } + else + { + //find all GameObjectAssets + %assetQuery = new AssetQuery(); + if(!AssetDatabase.findAssetType(%assetQuery, "GameObjectAsset")) + return 0; //if we didn't find ANY, just exit + + %count = %assetQuery.getCount(); + + for(%i=0; %i < %count; %i++) + { + %assetId = %assetQuery.getAsset(%i); + + %gameObjectAsset = AssetDatabase.acquireAsset(%assetId); + + if(isFile(%gameObjectAsset.TAMLFilePath)) + { + %this.addGameObjectIcon( %gameObjectAsset.gameObjectName ); + } + } + } + } } if ( %this.tab $= "Meshes" ) @@ -734,6 +764,22 @@ %this.contentCtrl.addGuiControl( %ctrl ); } +function EWCreatorWindow::addGameObjectIcon( %this, %gameObjectName ) +{ + %ctrl = %this.createIcon(); + + %ctrl.altCommand = "spawnGameObject( \"" @ %gameObjectName @ "\", true );"; + %ctrl.iconBitmap = EditorIconRegistry::findIconByClassName( "Prefab" ); + %ctrl.text = %gameObjectName; + %ctrl.class = "CreatorGameObjectIconBtn"; + %ctrl.tooltip = "Spawn the " @ %gameObjectName @ " GameObject"; + + %ctrl.buttonType = "radioButton"; + %ctrl.groupNum = "-1"; + + %this.contentCtrl.addGuiControl( %ctrl ); +} + function CreatorPopupMenu::onSelect( %this, %id, %text ) { %split = strreplace( %text, "/", " " ); From ec8882c3c88c28af1d56f8166679e3b20ee8059c Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 26 May 2016 01:37:14 -0500 Subject: [PATCH 246/324] Ensuring all names are the correct casing for Linux --- .../T3D/components/Animation/animationComponent.cpp | 6 +++--- .../T3D/components/Animation/animationComponent.h | 6 +++--- .../Animation/animationComponent_ScriptBinding.h | 2 +- .../source/T3D/components/Camera/CameraComponent.cpp | 6 +++--- .../source/T3D/components/Camera/CameraComponent.h | 6 +++--- .../Camera/CameraComponent_ScriptBinding.h | 2 +- .../T3D/components/Camera/CameraOrbiterComponent.cpp | 2 +- .../T3D/components/Camera/CameraOrbiterComponent.h | 4 ++-- .../Collision/CollisionComponent_ScriptBinding.h | 2 +- .../T3D/components/Collision/collisionComponent.cpp | 6 +++--- .../T3D/components/Collision/collisionComponent.h | 10 +++++----- .../T3D/components/Collision/collisionInterfaces.cpp | 4 ++-- .../T3D/components/Collision/collisionTrigger.cpp | 2 +- Engine/source/T3D/components/Component.cpp | 2 +- Engine/source/T3D/components/Component.h | 4 ++-- .../T3D/components/Game/StateMachineComponent.cpp | 2 +- .../T3D/components/Game/StateMachineComponent.h | 4 ++-- Engine/source/T3D/components/Game/stateMachine.cpp | 2 +- .../source/T3D/components/Game/triggerComponent.cpp | 4 ++-- Engine/source/T3D/components/Game/triggerComponent.h | 6 +++--- .../T3D/components/Physics/physicsBehavior.cpp | 2 +- .../source/T3D/components/Physics/physicsBehavior.h | 6 +++--- .../components/Physics/physicsComponentInterface.h | 2 +- .../components/Physics/playerControllerComponent.cpp | 4 ++-- .../components/Physics/playerControllerComponent.h | 8 ++++---- .../T3D/components/Physics/rigidBodyComponent.cpp | 4 ++-- .../T3D/components/Physics/rigidBodyComponent.h | 6 +++--- .../source/T3D/components/Render/MeshComponent.cpp | 4 ++-- Engine/source/T3D/components/Render/MeshComponent.h | 8 ++++---- .../components/Render/MeshComponent_ScriptBinding.h | 2 +- .../T3D/components/Render/renderComponentInterface.h | 2 +- Engine/source/T3D/{Entity.cpp => entity.cpp} | 8 ++++---- Engine/source/T3D/{Entity.h => entity.h} | 8 ++++---- Engine/source/T3D/gameBase/gameConnection.cpp | 4 ++-- Engine/source/T3D/gameBase/processList.cpp | 4 ++-- Engine/source/T3D/gameBase/std/stdGameProcess.cpp | 4 ++-- Engine/source/gui/controls/guiTreeViewCtrl.cpp | 2 +- Engine/source/gui/editor/inspector/entityGroup.cpp | 2 +- Engine/source/gui/editor/inspector/entityGroup.h | 2 +- Engine/source/gui/editor/inspector/mountingGroup.cpp | 6 +++--- Engine/source/gui/editor/inspector/mountingGroup.h | 4 ++-- Engine/source/scene/sceneRenderState.cpp | 4 ++-- .../{SuperToolTipDlg.ed.cs => superToolTipDlg.ed.cs} | 0 Tools/CMake/torque3d.cmake | 12 ++++++------ 44 files changed, 95 insertions(+), 95 deletions(-) rename Engine/source/T3D/{Entity.cpp => entity.cpp} (99%) rename Engine/source/T3D/{Entity.h => entity.h} (97%) rename Templates/Full/game/tools/componentEditor/scripts/{SuperToolTipDlg.ed.cs => superToolTipDlg.ed.cs} (100%) diff --git a/Engine/source/T3D/components/Animation/animationComponent.cpp b/Engine/source/T3D/components/Animation/animationComponent.cpp index a43eedd7aa..5c17a23696 100644 --- a/Engine/source/T3D/components/Animation/animationComponent.cpp +++ b/Engine/source/T3D/components/Animation/animationComponent.cpp @@ -20,9 +20,9 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/Animation/AnimationComponent.h" -#include "T3D/Components/Animation/AnimationComponent_ScriptBinding.h" -#include "T3D/components/Render/MeshComponent.h" +#include "T3D/components/animation/animationcomponent.h" +#include "T3D/components/animation/animationComponent_ScriptBinding.h" +#include "T3D/components/render/meshcomponent.h" #include "platform/platform.h" #include "console/consoleTypes.h" diff --git a/Engine/source/T3D/components/Animation/animationComponent.h b/Engine/source/T3D/components/Animation/animationComponent.h index 7e93788993..f1c01f40c9 100644 --- a/Engine/source/T3D/components/Animation/animationComponent.h +++ b/Engine/source/T3D/components/Animation/animationComponent.h @@ -24,16 +24,16 @@ #define ANIMATION_COMPONENT_H #ifndef COMPONENT_H -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #endif #ifndef _TSSHAPE_H_ #include "ts/tsShapeInstance.h" #endif #ifndef ENTITY_H -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef RENDER_COMPONENT_INTERFACE_H -#include "T3D/Components/render/renderComponentInterface.h" +#include "T3D/components/render/renderComponentInterface.h" #endif class SceneRenderState; diff --git a/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h b/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h index ffba3f7905..366cbb6ba5 100644 --- a/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/Components/Animation/animationComponent.h" +#include "T3D/components/animation/animationcomponent.h" DefineEngineMethod(AnimationComponent, playThread, bool, (S32 slot, const char* name, bool transition, F32 transitionTime), (-1, "", true, 0.5), "@brief Start a new animation thread, or restart one that has been paused or " diff --git a/Engine/source/T3D/components/Camera/CameraComponent.cpp b/Engine/source/T3D/components/Camera/CameraComponent.cpp index 5d914084c9..c42fb96ad2 100644 --- a/Engine/source/T3D/components/Camera/CameraComponent.cpp +++ b/Engine/source/T3D/components/Camera/CameraComponent.cpp @@ -20,8 +20,8 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/camera/CameraComponent.h" -#include "T3D/Components/Camera/CameraComponent_ScriptBinding.h" +#include "T3D/components/camera/cameracomponent.h" +#include "T3D/components/camera/cameraComponent_ScriptBinding.h" #include "platform/platform.h" #include "console/consoleTypes.h" #include "core/util/safeDelete.h" @@ -37,7 +37,7 @@ #include "T3D/gameBase/gameConnection.h" #include "T3D/gameFunctions.h" #include "math/mathUtils.h" -#include "T3D/Components/render/renderComponentInterface.h" +#include "T3D/components/render/renderComponentInterface.h" IMPLEMENT_CALLBACK( CameraComponent, validateCameraFov, F32, (F32 fov), (fov), "@brief Called on the server when the client has requested a FOV change.\n\n" diff --git a/Engine/source/T3D/components/Camera/CameraComponent.h b/Engine/source/T3D/components/Camera/CameraComponent.h index 1e54038339..9ae7aea99f 100644 --- a/Engine/source/T3D/components/Camera/CameraComponent.h +++ b/Engine/source/T3D/components/Camera/CameraComponent.h @@ -24,7 +24,7 @@ #define CAMERA_COMPONENT_H #ifndef COMPONENT_H -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #endif #ifndef _SCENERENDERSTATE_H_ #include "scene/sceneRenderState.h" @@ -33,10 +33,10 @@ #include "math/mBox.h" #endif #ifndef ENTITY_H -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef CORE_INTERFACES_H -#include "T3D/Components/coreInterfaces.h" +#include "T3D/components/coreInterfaces.h" #endif class SceneRenderState; diff --git a/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h b/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h index c7ed90cb12..caa6a38e7a 100644 --- a/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/Components/Camera/CameraComponent.h" +#include "T3D/components/camera/cameracomponent.h" //Basically, this only exists for backwards compatibility for parts of the editors ConsoleMethod(CameraComponent, getMode, const char*, 2, 2, "() - We get the first behavior of the requested type on our owner object.\n" diff --git a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp index 6b78668731..af91347ab9 100644 --- a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp +++ b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/Camera/CameraOrbiterComponent.h" +#include "T3D/components/camera/cameraOrbitercomponent.h" #include "core/util/safeDelete.h" #include "console/consoleTypes.h" #include "console/consoleObject.h" diff --git a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h index c13029f376..b4b495a1da 100644 --- a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h +++ b/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h @@ -24,10 +24,10 @@ #define CAMERA_ORBITER_COMPONENT_H #ifndef COMPONENT_H -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #endif #ifndef CAMERA_COMPONENT_H -#include "T3D/Components/camera/cameraComponent.h" +#include "T3D/components/camera/cameracomponent.h" #endif ////////////////////////////////////////////////////////////////////////// diff --git a/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h b/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h index f822bfb761..3d7bf6bb36 100644 --- a/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/Components/Collision/CollisionComponent.h" +#include "T3D/components/collision/collisioncomponent.h" #include "materials/baseMatInstance.h" DefineConsoleMethod(CollisionComponent, getNumberOfContacts, S32, (), , diff --git a/Engine/source/T3D/components/Collision/collisionComponent.cpp b/Engine/source/T3D/components/Collision/collisionComponent.cpp index 1ce851b0f5..0698b4b392 100644 --- a/Engine/source/T3D/components/Collision/collisionComponent.cpp +++ b/Engine/source/T3D/components/Collision/collisionComponent.cpp @@ -20,9 +20,9 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/Collision/collisionComponent.h" -#include "T3D/Components/Collision/collisionComponent_ScriptBinding.h" -#include "T3D/Components/Physics/physicsBehavior.h" +#include "T3D/components/collision/collisioncomponent.h" +#include "T3D/components/collision/collisionComponent_ScriptBinding.h" +#include "T3D/components/physics/physicsBehavior.h" #include "console/consoleTypes.h" #include "core/util/safeDelete.h" #include "core/resourceManager.h" diff --git a/Engine/source/T3D/components/Collision/collisionComponent.h b/Engine/source/T3D/components/Collision/collisionComponent.h index aa05dc1091..2d1be3098c 100644 --- a/Engine/source/T3D/components/Collision/collisionComponent.h +++ b/Engine/source/T3D/components/Collision/collisionComponent.h @@ -36,19 +36,19 @@ #include "math/mBox.h" #endif #ifndef ENTITY_H -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef CORE_INTERFACES_H -#include "T3D/Components/coreInterfaces.h" +#include "T3D/components/coreInterfaces.h" #endif #ifndef COLLISION_INTERFACES_H -#include "T3D/Components/collision/collisionInterfaces.h" +#include "T3D/components/collision/collisionInterfaces.h" #endif #ifndef RENDER_COMPONENT_INTERFACE_H -#include "T3D/Components/render/renderComponentInterface.h" +#include "T3D/components/render/renderComponentInterface.h" #endif #ifndef PHYSICS_COMPONENT_INTERFACE_H -#include "T3D/Components/physics/physicsComponentInterface.h" +#include "T3D/components/physics/physicsComponentInterface.h" #endif #ifndef _T3D_PHYSICSCOMMON_H_ #include "T3D/physics/physicsCommon.h" diff --git a/Engine/source/T3D/components/Collision/collisionInterfaces.cpp b/Engine/source/T3D/components/Collision/collisionInterfaces.cpp index 4fba3e3c01..9ddf01a407 100644 --- a/Engine/source/T3D/components/Collision/collisionInterfaces.cpp +++ b/Engine/source/T3D/components/Collision/collisionInterfaces.cpp @@ -20,9 +20,9 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/collision/collisionInterfaces.h" +#include "T3D/components/collision/collisionInterfaces.h" #include "scene/sceneObject.h" -#include "T3D/Entity.h" +#include "T3D/entity.h" #include "console/engineAPI.h" #include "T3D/trigger.h" #include "materials/baseMatInstance.h" diff --git a/Engine/source/T3D/components/Collision/collisionTrigger.cpp b/Engine/source/T3D/components/Collision/collisionTrigger.cpp index ed1e86675d..7d1f507066 100644 --- a/Engine/source/T3D/components/Collision/collisionTrigger.cpp +++ b/Engine/source/T3D/components/Collision/collisionTrigger.cpp @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "platform/platform.h" -#include "T3D/Components/Collision/CollisionTrigger.h" +#include "T3D/components/collision/collisionTrigger.h" #include "scene/sceneRenderState.h" #include "console/consoleTypes.h" diff --git a/Engine/source/T3D/components/Component.cpp b/Engine/source/T3D/components/Component.cpp index 0c4475b793..607df5e30c 100644 --- a/Engine/source/T3D/components/Component.cpp +++ b/Engine/source/T3D/components/Component.cpp @@ -23,7 +23,7 @@ #include "platform/platform.h" #include "console/simBase.h" #include "console/consoleTypes.h" -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #include "core/util/safeDelete.h" #include "core/resourceManager.h" #include "core/stream/fileStream.h" diff --git a/Engine/source/T3D/components/Component.h b/Engine/source/T3D/components/Component.h index 98eea53bc2..0259bacd00 100644 --- a/Engine/source/T3D/components/Component.h +++ b/Engine/source/T3D/components/Component.h @@ -27,10 +27,10 @@ #include "sim/netObject.h" #endif #ifndef ENTITY_H -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef CORE_INTERFACES_H -#include "T3D/Components/coreInterfaces.h" +#include "T3D/components/coreInterfaces.h" #endif class Entity; diff --git a/Engine/source/T3D/components/Game/StateMachineComponent.cpp b/Engine/source/T3D/components/Game/StateMachineComponent.cpp index 68058af59e..572f845e96 100644 --- a/Engine/source/T3D/components/Game/StateMachineComponent.cpp +++ b/Engine/source/T3D/components/Game/StateMachineComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/game/StateMachineComponent.h" +#include "T3D/components/game/StateMachinecomponent.h" #include "platform/platform.h" #include "console/consoleTypes.h" diff --git a/Engine/source/T3D/components/Game/StateMachineComponent.h b/Engine/source/T3D/components/Game/StateMachineComponent.h index 00fc4c27ec..5d4051075d 100644 --- a/Engine/source/T3D/components/Game/StateMachineComponent.h +++ b/Engine/source/T3D/components/Game/StateMachineComponent.h @@ -24,10 +24,10 @@ #define STATE_MACHINE_COMPONENT_H #ifndef COMPONENT_H - #include "T3D/Components/Component.h" + #include "T3D/components/component.h" #endif #ifndef STATE_MACHINE_H -#include "T3D/components/Game/stateMachine.h" +#include "T3D/components/game/stateMachine.h" #endif ////////////////////////////////////////////////////////////////////////// diff --git a/Engine/source/T3D/components/Game/stateMachine.cpp b/Engine/source/T3D/components/Game/stateMachine.cpp index 867e9cb19d..335b69db3d 100644 --- a/Engine/source/T3D/components/Game/stateMachine.cpp +++ b/Engine/source/T3D/components/Game/stateMachine.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/Game/stateMachine.h" +#include "T3D/components/game/stateMachine.h" StateMachine::StateMachine() { diff --git a/Engine/source/T3D/components/Game/triggerComponent.cpp b/Engine/source/T3D/components/Game/triggerComponent.cpp index df61859ce2..a9697af503 100644 --- a/Engine/source/T3D/components/Game/triggerComponent.cpp +++ b/Engine/source/T3D/components/Game/triggerComponent.cpp @@ -3,7 +3,7 @@ // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #include "console/consoleTypes.h" -#include "T3D/Components/game/TriggerComponent.h" +#include "T3D/components/game/Triggercomponent.h" #include "core/util/safeDelete.h" #include "console/consoleTypes.h" #include "console/consoleObject.h" @@ -11,7 +11,7 @@ #include "console/engineAPI.h" #include "sim/netConnection.h" #include "T3D/gameBase/gameConnection.h" -#include "T3D/Components/coreInterfaces.h" +#include "T3D/components/coreInterfaces.h" #include "math/mathUtils.h" #include "collision/concretePolyList.h" #include "collision/clippedPolyList.h" diff --git a/Engine/source/T3D/components/Game/triggerComponent.h b/Engine/source/T3D/components/Game/triggerComponent.h index 3b790f27e2..bac45b62a8 100644 --- a/Engine/source/T3D/components/Game/triggerComponent.h +++ b/Engine/source/T3D/components/Game/triggerComponent.h @@ -6,15 +6,15 @@ #define _TRIGGER_COMPONENT_H_ #ifndef _COMPONENT_H_ -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #endif #ifndef _ENTITY_H_ -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef _COLLISION_INTERFACES_H_ -#include "T3D/Components/collision/collisionInterfaces.h" +#include "T3D/components/collision/collisionInterfaces.h" #endif ////////////////////////////////////////////////////////////////////////// diff --git a/Engine/source/T3D/components/Physics/physicsBehavior.cpp b/Engine/source/T3D/components/Physics/physicsBehavior.cpp index 3737abc560..f281192c08 100644 --- a/Engine/source/T3D/components/Physics/physicsBehavior.cpp +++ b/Engine/source/T3D/components/Physics/physicsBehavior.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/Physics/physicsBehavior.h" +#include "T3D/components/physics/physicsBehavior.h" #include "platform/platform.h" #include "console/consoleTypes.h" #include "core/util/safeDelete.h" diff --git a/Engine/source/T3D/components/Physics/physicsBehavior.h b/Engine/source/T3D/components/Physics/physicsBehavior.h index 707fc15e53..bc09f3108b 100644 --- a/Engine/source/T3D/components/Physics/physicsBehavior.h +++ b/Engine/source/T3D/components/Physics/physicsBehavior.h @@ -5,7 +5,7 @@ #ifndef _PHYSICSBEHAVIOR_H_ #define _PHYSICSBEHAVIOR_H_ -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #ifndef __RESOURCE_H__ #include "core/resource.h" @@ -20,7 +20,7 @@ #include "math/mBox.h" #endif #ifndef _ENTITY_H_ -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef _CONVEX_H_ #include "collision/convex.h" @@ -36,7 +36,7 @@ #endif #ifndef _RENDER_COMPONENT_INTERFACE_H_ -#include "T3D/Components/render/renderComponentInterface.h" +#include "T3D/components/render/renderComponentInterface.h" #endif class TSShapeInstance; diff --git a/Engine/source/T3D/components/Physics/physicsComponentInterface.h b/Engine/source/T3D/components/Physics/physicsComponentInterface.h index 0f52348161..3d233a2227 100644 --- a/Engine/source/T3D/components/Physics/physicsComponentInterface.h +++ b/Engine/source/T3D/components/Physics/physicsComponentInterface.h @@ -24,7 +24,7 @@ #define PHYSICS_COMPONENT_INTERFACE_H #ifndef CORE_INTERFACES_H -#include "T3D/Components/coreInterfaces.h" +#include "T3D/components/coreInterfaces.h" #endif class PhysicsComponentInterface : public Interface diff --git a/Engine/source/T3D/components/Physics/playerControllerComponent.cpp b/Engine/source/T3D/components/Physics/playerControllerComponent.cpp index bb5217659b..53283ac34e 100644 --- a/Engine/source/T3D/components/Physics/playerControllerComponent.cpp +++ b/Engine/source/T3D/components/Physics/playerControllerComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/Physics/playerControllerComponent.h" +#include "T3D/components/physics/playerControllercomponent.h" #include "platform/platform.h" #include "console/consoleTypes.h" #include "core/util/safeDelete.h" @@ -37,7 +37,7 @@ #include "collision/collision.h" #include "T3D/physics/physicsPlayer.h" #include "T3D/physics/physicsPlugin.h" -#include "T3D/Components/Collision/collisionInterfaces.h" +#include "T3D/components/collision/collisionInterfaces.h" #include "T3D/trigger.h" #include "T3D/components/collision/collisionTrigger.h" diff --git a/Engine/source/T3D/components/Physics/playerControllerComponent.h b/Engine/source/T3D/components/Physics/playerControllerComponent.h index 903d0f1188..d384108884 100644 --- a/Engine/source/T3D/components/Physics/playerControllerComponent.h +++ b/Engine/source/T3D/components/Physics/playerControllerComponent.h @@ -24,7 +24,7 @@ #define PLAYER_CONTORLLER_COMPONENT_H #ifndef PHYSICSBEHAVIOR_H -#include "T3D/Components/Physics/physicsBehavior.h" +#include "T3D/components/physics/physicsBehavior.h" #endif #ifndef __RESOURCE_H__ #include "core/resource.h" @@ -39,7 +39,7 @@ #include "math/mBox.h" #endif #ifndef ENTITY_H -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef _CONVEX_H_ #include "collision/convex.h" @@ -54,10 +54,10 @@ #include "T3D/physics/physicsWorld.h" #endif #ifndef PHYSICS_COMPONENT_INTERFACE_H -#include "T3D/Components/physics/physicsComponentInterface.h" +#include "T3D/components/physics/physicsComponentInterface.h" #endif #ifndef COLLISION_INTERFACES_H -#include "T3D/Components/collision/collisionInterfaces.h" +#include "T3D/components/collision/collisionInterfaces.h" #endif class SceneRenderState; diff --git a/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp b/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp index e2d22fa25a..bdabafe3c4 100644 --- a/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp +++ b/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/Components/physics/RigidBodyComponent.h" +#include "T3D/components/physics/rigidBodycomponent.h" #include "core/util/safeDelete.h" #include "console/consoleTypes.h" #include "console/consoleObject.h" @@ -31,7 +31,7 @@ #include "T3D/physics/physicsPlugin.h" #include "T3D/physics/physicsWorld.h" #include "T3D/physics/physicsCollision.h" -#include "T3D/Components/Collision/collisionComponent.h" +#include "T3D/components/collision/collisioncomponent.h" bool RigidBodyComponent::smNoCorrections = false; bool RigidBodyComponent::smNoSmoothing = false; diff --git a/Engine/source/T3D/components/Physics/rigidBodyComponent.h b/Engine/source/T3D/components/Physics/rigidBodyComponent.h index 85b98379da..3c9aea61da 100644 --- a/Engine/source/T3D/components/Physics/rigidBodyComponent.h +++ b/Engine/source/T3D/components/Physics/rigidBodyComponent.h @@ -24,16 +24,16 @@ #define RIGID_BODY_COMPONENT_H #ifndef COMPONENT_H -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #endif #ifndef _T3D_PHYSICSCOMMON_H_ #include "T3D/physics/physicsCommon.h" #endif #ifndef COLLISION_COMPONENT_H -#include "T3D/Components/collision/collisionComponent.h" +#include "T3D/components/collision/collisioncomponent.h" #endif #ifndef PHYSICS_COMPONENT_INTERFACE_H -#include "T3D/Components/physics/physicsComponentInterface.h" +#include "T3D/components/physics/physicsComponentInterface.h" #endif class PhysicsBody; diff --git a/Engine/source/T3D/components/Render/MeshComponent.cpp b/Engine/source/T3D/components/Render/MeshComponent.cpp index 9444fa9176..e84c43ace2 100644 --- a/Engine/source/T3D/components/Render/MeshComponent.cpp +++ b/Engine/source/T3D/components/Render/MeshComponent.cpp @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "platform/platform.h" #include "console/consoleTypes.h" -#include "T3D/Components/Render/MeshComponent.h" +#include "T3D/components/render/meshcomponent.h" #include "core/util/safeDelete.h" #include "core/resourceManager.h" #include "core/stream/fileStream.h" @@ -44,7 +44,7 @@ #include "materials/materialManager.h" #include "materials/matInstance.h" #include "core/strings/findMatch.h" -#include "T3D/components/Render/MeshComponent_ScriptBinding.h" +#include "T3D/components/render/meshComponent_ScriptBinding.h" ////////////////////////////////////////////////////////////////////////// // Constructor/Destructor diff --git a/Engine/source/T3D/components/Render/MeshComponent.h b/Engine/source/T3D/components/Render/MeshComponent.h index e06a0ccee8..8aa02a64d7 100644 --- a/Engine/source/T3D/components/Render/MeshComponent.h +++ b/Engine/source/T3D/components/Render/MeshComponent.h @@ -24,7 +24,7 @@ #define STATIC_MESH_COMPONENT_H #ifndef COMPONENT_H -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #endif #ifndef __RESOURCE_H__ #include "core/resource.h" @@ -39,16 +39,16 @@ #include "math/mBox.h" #endif #ifndef ENTITY_H -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif #ifndef _NETSTRINGTABLE_H_ #include "sim/netStringTable.h" #endif #ifndef CORE_INTERFACES_H -#include "T3D/Components/coreInterfaces.h" +#include "T3D/components/coreInterfaces.h" #endif #ifndef RENDER_COMPONENT_INTERFACE_H -#include "T3D/Components/Render/renderComponentInterface.h" +#include "T3D/components/render/renderComponentInterface.h" #endif #ifndef _ASSET_PTR_H_ #include "assets/assetPtr.h" diff --git a/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h b/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h index 08dd6dbfd6..8181b3e7df 100644 --- a/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/components/Render/MeshComponent.h" +#include "T3D/components/render/meshcomponent.h" #include "scene/sceneObject.h" #include "math/mTransform.h" diff --git a/Engine/source/T3D/components/Render/renderComponentInterface.h b/Engine/source/T3D/components/Render/renderComponentInterface.h index 67d9a2f8fc..6948f38661 100644 --- a/Engine/source/T3D/components/Render/renderComponentInterface.h +++ b/Engine/source/T3D/components/Render/renderComponentInterface.h @@ -30,7 +30,7 @@ #include "ts/TSShapeInstance.h" #endif #ifndef CORE_INTERFACES_H -#include "T3D/Components/coreInterfaces.h" +#include "T3D/components/coreInterfaces.h" #endif class RenderComponentInterface : public Interface < RenderComponentInterface > diff --git a/Engine/source/T3D/Entity.cpp b/Engine/source/T3D/entity.cpp similarity index 99% rename from Engine/source/T3D/Entity.cpp rename to Engine/source/T3D/entity.cpp index 680f098d93..bff5895709 100644 --- a/Engine/source/T3D/Entity.cpp +++ b/Engine/source/T3D/entity.cpp @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "platform/platform.h" -#include "T3D/Entity.h" +#include "T3D/entity.h" #include "core/stream/bitStream.h" #include "console/consoleTypes.h" #include "console/consoleObject.h" @@ -34,9 +34,9 @@ #include "math/mathIO.h" #include "math/mTransform.h" -#include "T3D/Components/coreInterfaces.h" -#include "T3D/Components/render/renderComponentInterface.h" -#include "T3D/Components/Collision/collisionInterfaces.h" +#include "T3D/components/coreInterfaces.h" +#include "T3D/components/render/renderComponentInterface.h" +#include "T3D/components/collision/collisionInterfaces.h" #include "gui/controls/guiTreeViewCtrl.h" diff --git a/Engine/source/T3D/Entity.h b/Engine/source/T3D/entity.h similarity index 97% rename from Engine/source/T3D/Entity.h rename to Engine/source/T3D/entity.h index e2a35bf9f2..faaaea4cf1 100644 --- a/Engine/source/T3D/Entity.h +++ b/Engine/source/T3D/entity.h @@ -30,7 +30,7 @@ #include "T3D/gameBase/moveManager.h" #endif #ifndef COMPONENT_H -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #endif #ifndef MROTATION_H #include "math/mRotation.h" @@ -61,10 +61,10 @@ class Entity : public GameBase bool mInitialized; - Signal< void(Component*) > Entity::onComponentAdded; - Signal< void(Component*) > Entity::onComponentRemoved; + Signal< void(Component*) > onComponentAdded; + Signal< void(Component*) > onComponentRemoved; - Signal< void(MatrixF*) > Entity::onTransformSet; + Signal< void(MatrixF*) > onTransformSet; protected: diff --git a/Engine/source/T3D/gameBase/gameConnection.cpp b/Engine/source/T3D/gameBase/gameConnection.cpp index 05ce141519..0f36d63264 100644 --- a/Engine/source/T3D/gameBase/gameConnection.cpp +++ b/Engine/source/T3D/gameBase/gameConnection.cpp @@ -40,8 +40,8 @@ #include "math/mTransform.h" #ifdef TORQUE_EXPERIMENTAL_EC -#include "T3D/Entity.h" -#include "T3D/Components/coreInterfaces.h" +#include "T3D/entity.h" +#include "T3D/components/coreInterfaces.h" #endif #ifdef TORQUE_HIFI_NET diff --git a/Engine/source/T3D/gameBase/processList.cpp b/Engine/source/T3D/gameBase/processList.cpp index e012c4c025..8e524a2058 100644 --- a/Engine/source/T3D/gameBase/processList.cpp +++ b/Engine/source/T3D/gameBase/processList.cpp @@ -28,8 +28,8 @@ #include "console/consoleTypes.h" #ifdef TORQUE_EXPERIMENTAL_EC -#include "T3D/Components/coreInterfaces.h" -#include "T3D/Components/Component.h" +#include "T3D/components/coreInterfaces.h" +#include "T3D/components/component.h" #endif //---------------------------------------------------------------------------- diff --git a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp index 88d0891d51..b9c3a27f12 100644 --- a/Engine/source/T3D/gameBase/std/stdGameProcess.cpp +++ b/Engine/source/T3D/gameBase/std/stdGameProcess.cpp @@ -38,8 +38,8 @@ #include "T3D/fx/cameraFXMgr.h" #ifdef TORQUE_EXPERIMENTAL_EC -#include "T3D/Components/coreInterfaces.h" -#include "T3D/Components/Component.h" +#include "T3D/components/coreInterfaces.h" +#include "T3D/components/component.h" #endif MODULE_BEGIN( ProcessList ) diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.cpp b/Engine/source/gui/controls/guiTreeViewCtrl.cpp index b964188457..f8bc41c2e6 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.cpp +++ b/Engine/source/gui/controls/guiTreeViewCtrl.cpp @@ -37,7 +37,7 @@ #endif #include "console/engineAPI.h" #ifdef TORQUE_EXPERIMENTAL_EC -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif IMPLEMENT_CONOBJECT(GuiTreeViewCtrl); diff --git a/Engine/source/gui/editor/inspector/entityGroup.cpp b/Engine/source/gui/editor/inspector/entityGroup.cpp index 7c7bd2762d..2fd6e61722 100644 --- a/Engine/source/gui/editor/inspector/entityGroup.cpp +++ b/Engine/source/gui/editor/inspector/entityGroup.cpp @@ -24,7 +24,7 @@ #include "gui/editor/guiInspector.h" #include "gui/editor/inspector/entityGroup.h" #include "core/strings/stringUnit.h" -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #include "console/engineAPI.h" diff --git a/Engine/source/gui/editor/inspector/entityGroup.h b/Engine/source/gui/editor/inspector/entityGroup.h index 3275398462..00944cda13 100644 --- a/Engine/source/gui/editor/inspector/entityGroup.h +++ b/Engine/source/gui/editor/inspector/entityGroup.h @@ -25,7 +25,7 @@ #include "gui/editor/inspector/group.h" #include "console/simFieldDictionary.h" -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #include "gui/controls/guiPopUpCtrlEx.h" class GuiInspectorEntityGroup : public GuiInspectorGroup diff --git a/Engine/source/gui/editor/inspector/mountingGroup.cpp b/Engine/source/gui/editor/inspector/mountingGroup.cpp index bcfa19fa9c..bce47f66a9 100644 --- a/Engine/source/gui/editor/inspector/mountingGroup.cpp +++ b/Engine/source/gui/editor/inspector/mountingGroup.cpp @@ -24,11 +24,11 @@ #include "gui/editor/guiInspector.h" #include "gui/editor/inspector/mountingGroup.h" #include "core/strings/stringUnit.h" -#include "T3D/Entity.h" -#include "T3D/Components/Component.h" +#include "T3D/entity.h" +#include "T3D/components/component.h" //Need this to get node lists -#include "T3D/Components/render/renderComponentInterface.h" +#include "T3D/components/render/renderComponentInterface.h" IMPLEMENT_CONOBJECT(GuiInspectorMountingGroup); diff --git a/Engine/source/gui/editor/inspector/mountingGroup.h b/Engine/source/gui/editor/inspector/mountingGroup.h index da8ed91a61..5c4bdac753 100644 --- a/Engine/source/gui/editor/inspector/mountingGroup.h +++ b/Engine/source/gui/editor/inspector/mountingGroup.h @@ -25,7 +25,7 @@ #include "gui/editor/inspector/group.h" #include "console/simFieldDictionary.h" -#include "T3D/Components/Component.h" +#include "T3D/components/component.h" #include "gui/controls/guiPopUpCtrlEx.h" #ifndef _GUI_INSPECTOR_TYPES_H_ @@ -33,7 +33,7 @@ #endif #ifndef _ENTITY_H_ -#include "T3D/Entity.h" +#include "T3D/entity.h" #endif class GuiInspectorMountingGroup; diff --git a/Engine/source/scene/sceneRenderState.cpp b/Engine/source/scene/sceneRenderState.cpp index 5d05e809db..47bb8b4405 100644 --- a/Engine/source/scene/sceneRenderState.cpp +++ b/Engine/source/scene/sceneRenderState.cpp @@ -27,8 +27,8 @@ #include "math/util/matrixSet.h" #ifdef TORQUE_EXPERIMENTAL_EC -#include "T3D/Components/render/renderComponentInterface.h" -#include "T3D/Components/Component.h" +#include "T3D/components/render/renderComponentInterface.h" +#include "T3D/components/component.h" #endif //----------------------------------------------------------------------------- diff --git a/Templates/Full/game/tools/componentEditor/scripts/SuperToolTipDlg.ed.cs b/Templates/Full/game/tools/componentEditor/scripts/superToolTipDlg.ed.cs similarity index 100% rename from Templates/Full/game/tools/componentEditor/scripts/SuperToolTipDlg.ed.cs rename to Templates/Full/game/tools/componentEditor/scripts/superToolTipDlg.ed.cs diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index bb0b274cbc..fc7e2a9209 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -274,12 +274,12 @@ addPath("${srcDir}/T3D/turret") if( TORQUE_EXPERIMENTAL_EC ) addPath("${srcDir}/T3D/components/") - addPath("${srcDir}/T3D/components/animation") - addPath("${srcDir}/T3D/components/camera") - addPath("${srcDir}/T3D/components/collision") - addPath("${srcDir}/T3D/components/game") - addPath("${srcDir}/T3D/components/physics") - addPath("${srcDir}/T3D/components/render") + addPath("${srcDir}/T3D/components/Animation") + addPath("${srcDir}/T3D/components/Camera") + addPath("${srcDir}/T3D/components/Collision") + addPath("${srcDir}/T3D/components/Game") + addPath("${srcDir}/T3D/components/Physics") + addPath("${srcDir}/T3D/components/Render") endif() addPath("${srcDir}/main/") From 93e767f0c5fa3db7960448c29ba9595f8d3a473d Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 26 May 2016 01:39:06 -0500 Subject: [PATCH 247/324] Additional casing fixes. --- Engine/source/T3D/components/{Component.cpp => component.cpp} | 0 Engine/source/T3D/components/{Component.h => component.h} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename Engine/source/T3D/components/{Component.cpp => component.cpp} (100%) rename Engine/source/T3D/components/{Component.h => component.h} (100%) diff --git a/Engine/source/T3D/components/Component.cpp b/Engine/source/T3D/components/component.cpp similarity index 100% rename from Engine/source/T3D/components/Component.cpp rename to Engine/source/T3D/components/component.cpp diff --git a/Engine/source/T3D/components/Component.h b/Engine/source/T3D/components/component.h similarity index 100% rename from Engine/source/T3D/components/Component.h rename to Engine/source/T3D/components/component.h From f5e86a83b51a8259100085688aae609cb0f3591a Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 26 May 2016 13:56:19 -0500 Subject: [PATCH 248/324] Other renames to ensure linux case-sensitivity compliance and casing format consistency. --- .../components/{Animation => animation}/animationComponent.cpp | 0 .../T3D/components/{Animation => animation}/animationComponent.h | 0 .../{Animation => animation}/animationComponent_ScriptBinding.h | 0 .../{Camera/CameraComponent.cpp => camera/cameraComponent.cpp} | 0 .../{Camera/CameraComponent.h => camera/cameraComponent.h} | 0 .../cameraComponent_ScriptBinding.h} | 0 .../cameraOrbiterComponent.cpp} | 0 .../CameraOrbiterComponent.h => camera/cameraOrbiterComponent.h} | 0 .../components/{Collision => collision}/collisionComponent.cpp | 0 .../T3D/components/{Collision => collision}/collisionComponent.h | 0 .../collisionComponent_ScriptBinding.h} | 0 .../components/{Collision => collision}/collisionInterfaces.cpp | 0 .../T3D/components/{Collision => collision}/collisionInterfaces.h | 0 .../T3D/components/{Collision => collision}/collisionTrigger.cpp | 0 .../T3D/components/{Collision => collision}/collisionTrigger.h | 0 Engine/source/T3D/components/{Game => game}/stateMachine.cpp | 0 Engine/source/T3D/components/{Game => game}/stateMachine.h | 0 .../StateMachineComponent.cpp => game/stateMachineComponent.cpp} | 0 .../StateMachineComponent.h => game/stateMachineComponent.h} | 0 Engine/source/T3D/components/{Game => game}/triggerComponent.cpp | 0 Engine/source/T3D/components/{Game => game}/triggerComponent.h | 0 .../T3D/components/{Physics => physics}/physicsBehavior.cpp | 0 .../source/T3D/components/{Physics => physics}/physicsBehavior.h | 0 .../components/{Physics => physics}/physicsComponentInterface.cpp | 0 .../components/{Physics => physics}/physicsComponentInterface.h | 0 .../components/{Physics => physics}/playerControllerComponent.cpp | 0 .../components/{Physics => physics}/playerControllerComponent.h | 0 .../T3D/components/{Physics => physics}/rigidBodyComponent.cpp | 0 .../T3D/components/{Physics => physics}/rigidBodyComponent.h | 0 .../{Render/MeshComponent.cpp => render/meshComponent.cpp} | 0 .../components/{Render/MeshComponent.h => render/meshComponent.h} | 0 .../meshComponent_ScriptBinding.h} | 0 .../T3D/components/{Render => render}/renderComponentInterface.h | 0 33 files changed, 0 insertions(+), 0 deletions(-) rename Engine/source/T3D/components/{Animation => animation}/animationComponent.cpp (100%) rename Engine/source/T3D/components/{Animation => animation}/animationComponent.h (100%) rename Engine/source/T3D/components/{Animation => animation}/animationComponent_ScriptBinding.h (100%) rename Engine/source/T3D/components/{Camera/CameraComponent.cpp => camera/cameraComponent.cpp} (100%) rename Engine/source/T3D/components/{Camera/CameraComponent.h => camera/cameraComponent.h} (100%) rename Engine/source/T3D/components/{Camera/CameraComponent_ScriptBinding.h => camera/cameraComponent_ScriptBinding.h} (100%) rename Engine/source/T3D/components/{Camera/CameraOrbiterComponent.cpp => camera/cameraOrbiterComponent.cpp} (100%) rename Engine/source/T3D/components/{Camera/CameraOrbiterComponent.h => camera/cameraOrbiterComponent.h} (100%) rename Engine/source/T3D/components/{Collision => collision}/collisionComponent.cpp (100%) rename Engine/source/T3D/components/{Collision => collision}/collisionComponent.h (100%) rename Engine/source/T3D/components/{Collision/CollisionComponent_ScriptBinding.h => collision/collisionComponent_ScriptBinding.h} (100%) rename Engine/source/T3D/components/{Collision => collision}/collisionInterfaces.cpp (100%) rename Engine/source/T3D/components/{Collision => collision}/collisionInterfaces.h (100%) rename Engine/source/T3D/components/{Collision => collision}/collisionTrigger.cpp (100%) rename Engine/source/T3D/components/{Collision => collision}/collisionTrigger.h (100%) rename Engine/source/T3D/components/{Game => game}/stateMachine.cpp (100%) rename Engine/source/T3D/components/{Game => game}/stateMachine.h (100%) rename Engine/source/T3D/components/{Game/StateMachineComponent.cpp => game/stateMachineComponent.cpp} (100%) rename Engine/source/T3D/components/{Game/StateMachineComponent.h => game/stateMachineComponent.h} (100%) rename Engine/source/T3D/components/{Game => game}/triggerComponent.cpp (100%) rename Engine/source/T3D/components/{Game => game}/triggerComponent.h (100%) rename Engine/source/T3D/components/{Physics => physics}/physicsBehavior.cpp (100%) rename Engine/source/T3D/components/{Physics => physics}/physicsBehavior.h (100%) rename Engine/source/T3D/components/{Physics => physics}/physicsComponentInterface.cpp (100%) rename Engine/source/T3D/components/{Physics => physics}/physicsComponentInterface.h (100%) rename Engine/source/T3D/components/{Physics => physics}/playerControllerComponent.cpp (100%) rename Engine/source/T3D/components/{Physics => physics}/playerControllerComponent.h (100%) rename Engine/source/T3D/components/{Physics => physics}/rigidBodyComponent.cpp (100%) rename Engine/source/T3D/components/{Physics => physics}/rigidBodyComponent.h (100%) rename Engine/source/T3D/components/{Render/MeshComponent.cpp => render/meshComponent.cpp} (100%) rename Engine/source/T3D/components/{Render/MeshComponent.h => render/meshComponent.h} (100%) rename Engine/source/T3D/components/{Render/MeshComponent_ScriptBinding.h => render/meshComponent_ScriptBinding.h} (100%) rename Engine/source/T3D/components/{Render => render}/renderComponentInterface.h (100%) diff --git a/Engine/source/T3D/components/Animation/animationComponent.cpp b/Engine/source/T3D/components/animation/animationComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Animation/animationComponent.cpp rename to Engine/source/T3D/components/animation/animationComponent.cpp diff --git a/Engine/source/T3D/components/Animation/animationComponent.h b/Engine/source/T3D/components/animation/animationComponent.h similarity index 100% rename from Engine/source/T3D/components/Animation/animationComponent.h rename to Engine/source/T3D/components/animation/animationComponent.h diff --git a/Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h b/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h similarity index 100% rename from Engine/source/T3D/components/Animation/animationComponent_ScriptBinding.h rename to Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h diff --git a/Engine/source/T3D/components/Camera/CameraComponent.cpp b/Engine/source/T3D/components/camera/cameraComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Camera/CameraComponent.cpp rename to Engine/source/T3D/components/camera/cameraComponent.cpp diff --git a/Engine/source/T3D/components/Camera/CameraComponent.h b/Engine/source/T3D/components/camera/cameraComponent.h similarity index 100% rename from Engine/source/T3D/components/Camera/CameraComponent.h rename to Engine/source/T3D/components/camera/cameraComponent.h diff --git a/Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h b/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h similarity index 100% rename from Engine/source/T3D/components/Camera/CameraComponent_ScriptBinding.h rename to Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h diff --git a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp b/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Camera/CameraOrbiterComponent.cpp rename to Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp diff --git a/Engine/source/T3D/components/Camera/CameraOrbiterComponent.h b/Engine/source/T3D/components/camera/cameraOrbiterComponent.h similarity index 100% rename from Engine/source/T3D/components/Camera/CameraOrbiterComponent.h rename to Engine/source/T3D/components/camera/cameraOrbiterComponent.h diff --git a/Engine/source/T3D/components/Collision/collisionComponent.cpp b/Engine/source/T3D/components/collision/collisionComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Collision/collisionComponent.cpp rename to Engine/source/T3D/components/collision/collisionComponent.cpp diff --git a/Engine/source/T3D/components/Collision/collisionComponent.h b/Engine/source/T3D/components/collision/collisionComponent.h similarity index 100% rename from Engine/source/T3D/components/Collision/collisionComponent.h rename to Engine/source/T3D/components/collision/collisionComponent.h diff --git a/Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h b/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h similarity index 100% rename from Engine/source/T3D/components/Collision/CollisionComponent_ScriptBinding.h rename to Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h diff --git a/Engine/source/T3D/components/Collision/collisionInterfaces.cpp b/Engine/source/T3D/components/collision/collisionInterfaces.cpp similarity index 100% rename from Engine/source/T3D/components/Collision/collisionInterfaces.cpp rename to Engine/source/T3D/components/collision/collisionInterfaces.cpp diff --git a/Engine/source/T3D/components/Collision/collisionInterfaces.h b/Engine/source/T3D/components/collision/collisionInterfaces.h similarity index 100% rename from Engine/source/T3D/components/Collision/collisionInterfaces.h rename to Engine/source/T3D/components/collision/collisionInterfaces.h diff --git a/Engine/source/T3D/components/Collision/collisionTrigger.cpp b/Engine/source/T3D/components/collision/collisionTrigger.cpp similarity index 100% rename from Engine/source/T3D/components/Collision/collisionTrigger.cpp rename to Engine/source/T3D/components/collision/collisionTrigger.cpp diff --git a/Engine/source/T3D/components/Collision/collisionTrigger.h b/Engine/source/T3D/components/collision/collisionTrigger.h similarity index 100% rename from Engine/source/T3D/components/Collision/collisionTrigger.h rename to Engine/source/T3D/components/collision/collisionTrigger.h diff --git a/Engine/source/T3D/components/Game/stateMachine.cpp b/Engine/source/T3D/components/game/stateMachine.cpp similarity index 100% rename from Engine/source/T3D/components/Game/stateMachine.cpp rename to Engine/source/T3D/components/game/stateMachine.cpp diff --git a/Engine/source/T3D/components/Game/stateMachine.h b/Engine/source/T3D/components/game/stateMachine.h similarity index 100% rename from Engine/source/T3D/components/Game/stateMachine.h rename to Engine/source/T3D/components/game/stateMachine.h diff --git a/Engine/source/T3D/components/Game/StateMachineComponent.cpp b/Engine/source/T3D/components/game/stateMachineComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Game/StateMachineComponent.cpp rename to Engine/source/T3D/components/game/stateMachineComponent.cpp diff --git a/Engine/source/T3D/components/Game/StateMachineComponent.h b/Engine/source/T3D/components/game/stateMachineComponent.h similarity index 100% rename from Engine/source/T3D/components/Game/StateMachineComponent.h rename to Engine/source/T3D/components/game/stateMachineComponent.h diff --git a/Engine/source/T3D/components/Game/triggerComponent.cpp b/Engine/source/T3D/components/game/triggerComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Game/triggerComponent.cpp rename to Engine/source/T3D/components/game/triggerComponent.cpp diff --git a/Engine/source/T3D/components/Game/triggerComponent.h b/Engine/source/T3D/components/game/triggerComponent.h similarity index 100% rename from Engine/source/T3D/components/Game/triggerComponent.h rename to Engine/source/T3D/components/game/triggerComponent.h diff --git a/Engine/source/T3D/components/Physics/physicsBehavior.cpp b/Engine/source/T3D/components/physics/physicsBehavior.cpp similarity index 100% rename from Engine/source/T3D/components/Physics/physicsBehavior.cpp rename to Engine/source/T3D/components/physics/physicsBehavior.cpp diff --git a/Engine/source/T3D/components/Physics/physicsBehavior.h b/Engine/source/T3D/components/physics/physicsBehavior.h similarity index 100% rename from Engine/source/T3D/components/Physics/physicsBehavior.h rename to Engine/source/T3D/components/physics/physicsBehavior.h diff --git a/Engine/source/T3D/components/Physics/physicsComponentInterface.cpp b/Engine/source/T3D/components/physics/physicsComponentInterface.cpp similarity index 100% rename from Engine/source/T3D/components/Physics/physicsComponentInterface.cpp rename to Engine/source/T3D/components/physics/physicsComponentInterface.cpp diff --git a/Engine/source/T3D/components/Physics/physicsComponentInterface.h b/Engine/source/T3D/components/physics/physicsComponentInterface.h similarity index 100% rename from Engine/source/T3D/components/Physics/physicsComponentInterface.h rename to Engine/source/T3D/components/physics/physicsComponentInterface.h diff --git a/Engine/source/T3D/components/Physics/playerControllerComponent.cpp b/Engine/source/T3D/components/physics/playerControllerComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Physics/playerControllerComponent.cpp rename to Engine/source/T3D/components/physics/playerControllerComponent.cpp diff --git a/Engine/source/T3D/components/Physics/playerControllerComponent.h b/Engine/source/T3D/components/physics/playerControllerComponent.h similarity index 100% rename from Engine/source/T3D/components/Physics/playerControllerComponent.h rename to Engine/source/T3D/components/physics/playerControllerComponent.h diff --git a/Engine/source/T3D/components/Physics/rigidBodyComponent.cpp b/Engine/source/T3D/components/physics/rigidBodyComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Physics/rigidBodyComponent.cpp rename to Engine/source/T3D/components/physics/rigidBodyComponent.cpp diff --git a/Engine/source/T3D/components/Physics/rigidBodyComponent.h b/Engine/source/T3D/components/physics/rigidBodyComponent.h similarity index 100% rename from Engine/source/T3D/components/Physics/rigidBodyComponent.h rename to Engine/source/T3D/components/physics/rigidBodyComponent.h diff --git a/Engine/source/T3D/components/Render/MeshComponent.cpp b/Engine/source/T3D/components/render/meshComponent.cpp similarity index 100% rename from Engine/source/T3D/components/Render/MeshComponent.cpp rename to Engine/source/T3D/components/render/meshComponent.cpp diff --git a/Engine/source/T3D/components/Render/MeshComponent.h b/Engine/source/T3D/components/render/meshComponent.h similarity index 100% rename from Engine/source/T3D/components/Render/MeshComponent.h rename to Engine/source/T3D/components/render/meshComponent.h diff --git a/Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h b/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h similarity index 100% rename from Engine/source/T3D/components/Render/MeshComponent_ScriptBinding.h rename to Engine/source/T3D/components/render/meshComponent_ScriptBinding.h diff --git a/Engine/source/T3D/components/Render/renderComponentInterface.h b/Engine/source/T3D/components/render/renderComponentInterface.h similarity index 100% rename from Engine/source/T3D/components/Render/renderComponentInterface.h rename to Engine/source/T3D/components/render/renderComponentInterface.h From fd715f3ef3a466547ae3c74a818ef3579e584907 Mon Sep 17 00:00:00 2001 From: blackwc Date: Fri, 27 May 2016 02:22:39 -0400 Subject: [PATCH 249/324] add loop playback to GuiTheoraCtrl --- Engine/source/gui/theora/guiTheoraCtrl.cpp | 12 +++++++++++- Engine/source/gui/theora/guiTheoraCtrl.h | 2 ++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Engine/source/gui/theora/guiTheoraCtrl.cpp b/Engine/source/gui/theora/guiTheoraCtrl.cpp index 145b3474cd..f6d5fd2137 100644 --- a/Engine/source/gui/theora/guiTheoraCtrl.cpp +++ b/Engine/source/gui/theora/guiTheoraCtrl.cpp @@ -73,6 +73,7 @@ GuiTheoraCtrl::GuiTheoraCtrl() mPlayOnWake = true; mRenderDebugInfo = false; mTranscoder = OggTheoraDecoder::TRANSCODER_Auto; + mLoop = false; mBackgroundColor.set( 0, 0, 0, 255); } @@ -89,6 +90,8 @@ void GuiTheoraCtrl::initPersistFields() "Fill color when video is not playing." ); addField( "playOnWake", TypeBool, Offset( mPlayOnWake, GuiTheoraCtrl ), "Whether to start playing video when control is woken up." ); + addField( "loop", TypeBool, Offset( mLoop, GuiTheoraCtrl ), + "Loop playback." ); addField( "stopOnSleep", TypeBool, Offset( mStopOnSleep, GuiTheoraCtrl ), "Whether to stop video when control is set to sleep.\n\n" "If this is not set to true, the video will be paused when the control is put to sleep. This is because there is no support " @@ -221,7 +224,14 @@ void GuiTheoraCtrl::onRender(Point2I offset, const RectI &updateRect) } } else - mDone = true; + { + if(mLoop) + { + play(); + } else { + mDone = true; + } + } } else GFX->getDrawUtil()->drawRectFill(rect, mBackgroundColor); // black rect diff --git a/Engine/source/gui/theora/guiTheoraCtrl.h b/Engine/source/gui/theora/guiTheoraCtrl.h index e85ff69866..635c515dac 100644 --- a/Engine/source/gui/theora/guiTheoraCtrl.h +++ b/Engine/source/gui/theora/guiTheoraCtrl.h @@ -57,6 +57,8 @@ class GuiTheoraCtrl : public GuiControl /// If true, playback will start automatically when the control receives its /// onWake(). bool mPlayOnWake; + + bool mLoop; /// Which transcoder to use on the Theora decoder. This is mostly /// meant as a development aid. From 86f9c6f2e750714ea9b7c9f0e9a293e99d9782c9 Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 27 May 2016 14:32:36 -0500 Subject: [PATCH 250/324] When using bullet physics, it ensures the player does not move when the world sim is paused, as well as correcting the surface check when walking to test against the max run angle. --- Engine/source/T3D/physics/bullet/btPlayer.cpp | 25 +++++++++++-------- Engine/source/T3D/physics/bullet/btPlayer.h | 4 +++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/Engine/source/T3D/physics/bullet/btPlayer.cpp b/Engine/source/T3D/physics/bullet/btPlayer.cpp index 6e22b0cf81..793f6053cb 100644 --- a/Engine/source/T3D/physics/bullet/btPlayer.cpp +++ b/Engine/source/T3D/physics/bullet/btPlayer.cpp @@ -71,6 +71,7 @@ void BtPlayer::init( const char *type, mObject = obj; mWorld = (BtWorld*)world; + mSlopeAngle = runSurfaceCos; mStepHeight = stepHeight; //if ( dStricmp( type, "Capsule" ) == 0 ) @@ -102,6 +103,17 @@ Point3F BtPlayer::move( const VectorF &disp, CollisionList &outCol ) { AssertFatal( mGhostObject, "BtPlayer::move - The controller is null!" ); + if (!mWorld->isEnabled()) + { + btTransform currentTrans = mGhostObject->getWorldTransform(); + btVector3 currentPos = currentTrans.getOrigin(); + + Point3F returnPos = btCast(currentPos); + + returnPos.z -= mOriginOffset; + return returnPos; + } + // First recover from any penetrations from the previous tick. U32 numPenetrationLoops = 0; bool touchingContact = false; @@ -305,16 +317,9 @@ bool BtPlayer::_sweep( btVector3 *inOutCurrPos, const btVector3 &disp, Collision col.normal = btCast( callback.m_hitNormalWorld ); col.object = PhysicsUserData::getObject( callback.m_hitCollisionObject->getUserPointer() ); - if (disp.z() < 0.0f) - { - // We're sweeping down as part of the stepping routine. In this - // case we want to have the collision normal only point in the opposite direction. - // i.e. up If we include the sideways part of the normal then the Player class - // velocity calculations using this normal will affect the player's forwards - // momentum. This is especially noticable on stairs as the rounded bottom of - // the capsule slides up the corner of a stair. - col.normal.set(0.0f, 0.0f, 1.0f); - } + F32 vd = col.normal.z; + if (vd < mSlopeAngle) + return false; } return true; diff --git a/Engine/source/T3D/physics/bullet/btPlayer.h b/Engine/source/T3D/physics/bullet/btPlayer.h index 388035431c..2ad89a946a 100644 --- a/Engine/source/T3D/physics/bullet/btPlayer.h +++ b/Engine/source/T3D/physics/bullet/btPlayer.h @@ -57,6 +57,10 @@ class BtPlayer : public PhysicsPlayer /// F32 mOriginOffset; + /// + F32 mSlopeAngle; + /// + /// F32 mStepHeight; /// From 510b726f6fa3aaeac1a4ed69aa88f918fa0315a7 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 29 May 2016 00:58:02 -0500 Subject: [PATCH 251/324] Final Linux compliance changes(renames, tweaks for gcc compliance, etc) --- .../components/animation/animationComponent.cpp | 4 ++-- .../animation/animationComponent_ScriptBinding.h | 2 +- .../T3D/components/camera/cameraComponent.cpp | 2 +- .../camera/cameraComponent_ScriptBinding.h | 2 +- .../components/camera/cameraOrbiterComponent.cpp | 2 +- .../components/camera/cameraOrbiterComponent.h | 2 +- .../components/collision/collisionComponent.cpp | 2 +- .../collision/collisionComponent_ScriptBinding.h | 2 +- .../components/collision/collisionInterfaces.cpp | 4 ++-- .../components/collision/collisionInterfaces.h | 6 +++--- Engine/source/T3D/components/game/stateMachine.h | 2 +- .../components/game/stateMachineComponent.cpp | 2 +- .../T3D/components/game/triggerComponent.cpp | 5 +++-- .../physics/physicsComponentInterface.h | 2 +- .../physics/playerControllerComponent.cpp | 2 +- .../physics/playerControllerComponent.h | 2 +- .../components/physics/rigidBodyComponent.cpp | 4 ++-- .../T3D/components/physics/rigidBodyComponent.h | 2 +- .../T3D/components/render/meshComponent.cpp | 6 ++++-- .../source/T3D/components/render/meshComponent.h | 2 +- .../render/meshComponent_ScriptBinding.h | 2 +- .../components/render/renderComponentInterface.h | 8 ++++---- Engine/source/T3D/entity.h | 8 ++------ .../gui/editor/inspector/mountingGroup.cpp | 2 +- Tools/CMake/torque3d.cmake | 16 +++++++++------- 25 files changed, 47 insertions(+), 46 deletions(-) diff --git a/Engine/source/T3D/components/animation/animationComponent.cpp b/Engine/source/T3D/components/animation/animationComponent.cpp index 5c17a23696..4c009f599f 100644 --- a/Engine/source/T3D/components/animation/animationComponent.cpp +++ b/Engine/source/T3D/components/animation/animationComponent.cpp @@ -20,9 +20,9 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/components/animation/animationcomponent.h" +#include "T3D/components/animation/animationComponent.h" #include "T3D/components/animation/animationComponent_ScriptBinding.h" -#include "T3D/components/render/meshcomponent.h" +#include "T3D/components/render/meshComponent.h" #include "platform/platform.h" #include "console/consoleTypes.h" diff --git a/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h b/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h index 366cbb6ba5..2d26c5da17 100644 --- a/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/animation/animationComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/components/animation/animationcomponent.h" +#include "T3D/components/animation/animationComponent.h" DefineEngineMethod(AnimationComponent, playThread, bool, (S32 slot, const char* name, bool transition, F32 transitionTime), (-1, "", true, 0.5), "@brief Start a new animation thread, or restart one that has been paused or " diff --git a/Engine/source/T3D/components/camera/cameraComponent.cpp b/Engine/source/T3D/components/camera/cameraComponent.cpp index c42fb96ad2..60c62fb3a8 100644 --- a/Engine/source/T3D/components/camera/cameraComponent.cpp +++ b/Engine/source/T3D/components/camera/cameraComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/components/camera/cameracomponent.h" +#include "T3D/components/camera/cameraComponent.h" #include "T3D/components/camera/cameraComponent_ScriptBinding.h" #include "platform/platform.h" #include "console/consoleTypes.h" diff --git a/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h b/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h index caa6a38e7a..2c3f1dbeff 100644 --- a/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/camera/cameraComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/components/camera/cameracomponent.h" +#include "T3D/components/camera/cameraComponent.h" //Basically, this only exists for backwards compatibility for parts of the editors ConsoleMethod(CameraComponent, getMode, const char*, 2, 2, "() - We get the first behavior of the requested type on our owner object.\n" diff --git a/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp b/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp index af91347ab9..dbc7cde699 100644 --- a/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp +++ b/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/components/camera/cameraOrbitercomponent.h" +#include "T3D/components/camera/cameraOrbiterComponent.h" #include "core/util/safeDelete.h" #include "console/consoleTypes.h" #include "console/consoleObject.h" diff --git a/Engine/source/T3D/components/camera/cameraOrbiterComponent.h b/Engine/source/T3D/components/camera/cameraOrbiterComponent.h index b4b495a1da..8fb584a3ee 100644 --- a/Engine/source/T3D/components/camera/cameraOrbiterComponent.h +++ b/Engine/source/T3D/components/camera/cameraOrbiterComponent.h @@ -27,7 +27,7 @@ #include "T3D/components/component.h" #endif #ifndef CAMERA_COMPONENT_H -#include "T3D/components/camera/cameracomponent.h" +#include "T3D/components/camera/cameraComponent.h" #endif ////////////////////////////////////////////////////////////////////////// diff --git a/Engine/source/T3D/components/collision/collisionComponent.cpp b/Engine/source/T3D/components/collision/collisionComponent.cpp index 0698b4b392..e680665dcb 100644 --- a/Engine/source/T3D/components/collision/collisionComponent.cpp +++ b/Engine/source/T3D/components/collision/collisionComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/components/collision/collisioncomponent.h" +#include "T3D/components/collision/collisionComponent.h" #include "T3D/components/collision/collisionComponent_ScriptBinding.h" #include "T3D/components/physics/physicsBehavior.h" #include "console/consoleTypes.h" diff --git a/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h b/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h index 3d7bf6bb36..3b8e83d117 100644 --- a/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/collision/collisionComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/components/collision/collisioncomponent.h" +#include "T3D/components/collision/collisionComponent.h" #include "materials/baseMatInstance.h" DefineConsoleMethod(CollisionComponent, getNumberOfContacts, S32, (), , diff --git a/Engine/source/T3D/components/collision/collisionInterfaces.cpp b/Engine/source/T3D/components/collision/collisionInterfaces.cpp index 9ddf01a407..c45dbde483 100644 --- a/Engine/source/T3D/components/collision/collisionInterfaces.cpp +++ b/Engine/source/T3D/components/collision/collisionInterfaces.cpp @@ -126,7 +126,7 @@ void CollisionInterface::handleCollisionNotifyList() mCollisionNotifyList.clear(); } -Chunker sTimeoutChunker; +Chunker sCollisionTimeoutChunker; CollisionInterface::CollisionTimeout* CollisionInterface::sFreeTimeoutList = 0; void CollisionInterface::queueCollision( SceneObject *obj, const VectorF &vec) @@ -174,7 +174,7 @@ void CollisionInterface::queueCollision( SceneObject *obj, const VectorF &vec) } else { - ptr = sTimeoutChunker.alloc(); + ptr = sCollisionTimeoutChunker.alloc(); } ptr->object = obj; diff --git a/Engine/source/T3D/components/collision/collisionInterfaces.h b/Engine/source/T3D/components/collision/collisionInterfaces.h index 675230e07f..6592d60155 100644 --- a/Engine/source/T3D/components/collision/collisionInterfaces.h +++ b/Engine/source/T3D/components/collision/collisionInterfaces.h @@ -82,8 +82,8 @@ class CollisionInterface// : public Interface VectorF vector; }; - Signal< void( SceneObject* ) > CollisionInterface::onCollisionSignal; - Signal< void( SceneObject* ) > CollisionInterface::onContactSignal; + Signal< void( SceneObject* ) > onCollisionSignal; + Signal< void( SceneObject* ) > onContactSignal; protected: CollisionTimeout* mTimeoutList; @@ -149,7 +149,7 @@ class CollisionInterface// : public Interface virtual PhysicsCollision* getCollisionData() = 0; - Signal< void(PhysicsCollision* collision) > CollisionInterface::onCollisionChanged; + Signal< void(PhysicsCollision* collision) > onCollisionChanged; }; class BuildConvexInterface //: public Interface diff --git a/Engine/source/T3D/components/game/stateMachine.h b/Engine/source/T3D/components/game/stateMachine.h index 8bf7b15fbc..9ccc540e89 100644 --- a/Engine/source/T3D/components/game/stateMachine.h +++ b/Engine/source/T3D/components/game/stateMachine.h @@ -160,7 +160,7 @@ class StateMachine return mFields[index]; } - Signal< void(StateMachine*, S32 stateIdx) > StateMachine::onStateChanged; + Signal< void(StateMachine*, S32 stateIdx) > onStateChanged; // inline bool readStateName(State* state, SimXMLDocument* reader) diff --git a/Engine/source/T3D/components/game/stateMachineComponent.cpp b/Engine/source/T3D/components/game/stateMachineComponent.cpp index 572f845e96..991d41ce1f 100644 --- a/Engine/source/T3D/components/game/stateMachineComponent.cpp +++ b/Engine/source/T3D/components/game/stateMachineComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/components/game/StateMachinecomponent.h" +#include "T3D/components/game/stateMachineComponent.h" #include "platform/platform.h" #include "console/consoleTypes.h" diff --git a/Engine/source/T3D/components/game/triggerComponent.cpp b/Engine/source/T3D/components/game/triggerComponent.cpp index a9697af503..290fab4370 100644 --- a/Engine/source/T3D/components/game/triggerComponent.cpp +++ b/Engine/source/T3D/components/game/triggerComponent.cpp @@ -3,7 +3,7 @@ // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #include "console/consoleTypes.h" -#include "T3D/components/game/Triggercomponent.h" +#include "T3D/components/game/triggerComponent.h" #include "core/util/safeDelete.h" #include "console/consoleTypes.h" #include "console/consoleObject.h" @@ -234,7 +234,8 @@ bool TriggerComponent::testObject(SceneObject* enter) //anywho, build our list and then we'll check intersections ClippedPolyList myList; - myList.setTransform(&(mOwner->getTransform()), mOwner->getScale()); + MatrixF ownerTransform = mOwner->getTransform(); + myList.setTransform(&ownerTransform, mOwner->getScale()); myList.setObject(mOwner); myCI->buildPolyList(PLC_Collision, &myList, enterBox, sphere); diff --git a/Engine/source/T3D/components/physics/physicsComponentInterface.h b/Engine/source/T3D/components/physics/physicsComponentInterface.h index 3d233a2227..57f00b8d41 100644 --- a/Engine/source/T3D/components/physics/physicsComponentInterface.h +++ b/Engine/source/T3D/components/physics/physicsComponentInterface.h @@ -43,7 +43,7 @@ class PhysicsComponentInterface : public Interface F32 getMass() { return mMass; } - Signal< void(VectorF normal, Vector overlappedObjects) > PhysicsComponentInterface::onPhysicsCollision; + Signal< void(VectorF normal, Vector overlappedObjects) > onPhysicsCollision; }; #endif \ No newline at end of file diff --git a/Engine/source/T3D/components/physics/playerControllerComponent.cpp b/Engine/source/T3D/components/physics/playerControllerComponent.cpp index 53283ac34e..77db8dd1fb 100644 --- a/Engine/source/T3D/components/physics/playerControllerComponent.cpp +++ b/Engine/source/T3D/components/physics/playerControllerComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/components/physics/playerControllercomponent.h" +#include "T3D/components/physics/playerControllerComponent.h" #include "platform/platform.h" #include "console/consoleTypes.h" #include "core/util/safeDelete.h" diff --git a/Engine/source/T3D/components/physics/playerControllerComponent.h b/Engine/source/T3D/components/physics/playerControllerComponent.h index d384108884..49d4c175ce 100644 --- a/Engine/source/T3D/components/physics/playerControllerComponent.h +++ b/Engine/source/T3D/components/physics/playerControllerComponent.h @@ -203,7 +203,7 @@ class PlayerControllerComponent : public Component, //This is a weird artifact of the PhysicsReps. We want the collision component to be privvy to any events that happen //so when the physics components do a findContact test during their update, they'll have a signal collision components //can be listening to to update themselves with that info - Signal< void(SceneObject*) > PlayerControllerComponent::onContactSignal; + Signal< void(SceneObject*) > onContactSignal; // DECLARE_CALLBACK(void, updateMove, (PlayerControllerComponent* obj)); diff --git a/Engine/source/T3D/components/physics/rigidBodyComponent.cpp b/Engine/source/T3D/components/physics/rigidBodyComponent.cpp index bdabafe3c4..21e9ecdbe5 100644 --- a/Engine/source/T3D/components/physics/rigidBodyComponent.cpp +++ b/Engine/source/T3D/components/physics/rigidBodyComponent.cpp @@ -20,7 +20,7 @@ // IN THE SOFTWARE. //----------------------------------------------------------------------------- -#include "T3D/components/physics/rigidBodycomponent.h" +#include "T3D/components/physics/rigidBodyComponent.h" #include "core/util/safeDelete.h" #include "console/consoleTypes.h" #include "console/consoleObject.h" @@ -31,7 +31,7 @@ #include "T3D/physics/physicsPlugin.h" #include "T3D/physics/physicsWorld.h" #include "T3D/physics/physicsCollision.h" -#include "T3D/components/collision/collisioncomponent.h" +#include "T3D/components/collision/collisionComponent.h" bool RigidBodyComponent::smNoCorrections = false; bool RigidBodyComponent::smNoSmoothing = false; diff --git a/Engine/source/T3D/components/physics/rigidBodyComponent.h b/Engine/source/T3D/components/physics/rigidBodyComponent.h index 3c9aea61da..4bbe1f9274 100644 --- a/Engine/source/T3D/components/physics/rigidBodyComponent.h +++ b/Engine/source/T3D/components/physics/rigidBodyComponent.h @@ -30,7 +30,7 @@ #include "T3D/physics/physicsCommon.h" #endif #ifndef COLLISION_COMPONENT_H -#include "T3D/components/collision/collisioncomponent.h" +#include "T3D/components/collision/collisionComponent.h" #endif #ifndef PHYSICS_COMPONENT_INTERFACE_H #include "T3D/components/physics/physicsComponentInterface.h" diff --git a/Engine/source/T3D/components/render/meshComponent.cpp b/Engine/source/T3D/components/render/meshComponent.cpp index e84c43ace2..fdb005adfd 100644 --- a/Engine/source/T3D/components/render/meshComponent.cpp +++ b/Engine/source/T3D/components/render/meshComponent.cpp @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "platform/platform.h" #include "console/consoleTypes.h" -#include "T3D/components/render/meshcomponent.h" +#include "T3D/components/render/meshComponent.h" #include "core/util/safeDelete.h" #include "core/resourceManager.h" #include "core/stream/fileStream.h" @@ -222,7 +222,9 @@ U32 MeshComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) for(U32 i=0; i < mChangingMaterials.size(); i++) { stream->writeInt(mChangingMaterials[i].slot, 16); - con->packNetStringHandleU(stream, NetStringHandle(mChangingMaterials[i].matName)); + + NetStringHandle matNameStr = mChangingMaterials[i].matName.c_str(); + con->packNetStringHandleU(stream, matNameStr); } mChangingMaterials.clear(); diff --git a/Engine/source/T3D/components/render/meshComponent.h b/Engine/source/T3D/components/render/meshComponent.h index 8aa02a64d7..6adc2633e3 100644 --- a/Engine/source/T3D/components/render/meshComponent.h +++ b/Engine/source/T3D/components/render/meshComponent.h @@ -153,7 +153,7 @@ class MeshComponent : public Component, virtual TSShape* getShape() { if (mMeshAsset) return mMeshAsset->getShape(); else return NULL; } virtual TSShapeInstance* getShapeInstance() { return mShapeInstance; } - Resource getShapeResource() { if (mMeshAsset) return mMeshAsset->getShapeResource(); else return NULL; } + Resource getShapeResource() { return mMeshAsset->getShapeResource(); } void _onResourceChanged(const Torque::Path &path); diff --git a/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h b/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h index 8181b3e7df..5a19b8f088 100644 --- a/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h +++ b/Engine/source/T3D/components/render/meshComponent_ScriptBinding.h @@ -21,7 +21,7 @@ //----------------------------------------------------------------------------- #include "console/engineAPI.h" -#include "T3D/components/render/meshcomponent.h" +#include "T3D/components/render/meshComponent.h" #include "scene/sceneObject.h" #include "math/mTransform.h" diff --git a/Engine/source/T3D/components/render/renderComponentInterface.h b/Engine/source/T3D/components/render/renderComponentInterface.h index 6948f38661..ff51098f2c 100644 --- a/Engine/source/T3D/components/render/renderComponentInterface.h +++ b/Engine/source/T3D/components/render/renderComponentInterface.h @@ -24,10 +24,10 @@ #define RENDER_COMPONENT_INTERFACE_H #ifndef _TSSHAPE_H_ -#include "ts/TSShape.h" +#include "ts/tsShape.h" #endif #ifndef _TSSHAPEINSTANCE_H_ -#include "ts/TSShapeInstance.h" +#include "ts/tsShapeInstance.h" #endif #ifndef CORE_INTERFACES_H #include "T3D/components/coreInterfaces.h" @@ -40,7 +40,7 @@ class RenderComponentInterface : public Interface < RenderComponentInterface > virtual TSShape* getShape() = 0; - Signal< void(RenderComponentInterface*) > RenderComponentInterface::onShapeChanged; + Signal< void(RenderComponentInterface*) > onShapeChanged; virtual TSShapeInstance* getShapeInstance() = 0; @@ -50,7 +50,7 @@ class RenderComponentInterface : public Interface < RenderComponentInterface > virtual void setNodeTransforms(Vector transforms) = 0; - Signal< void(RenderComponentInterface*) > RenderComponentInterface::onShapeInstanceChanged; + Signal< void(RenderComponentInterface*) > onShapeInstanceChanged; }; class CastRayRenderedInterface// : public Interface diff --git a/Engine/source/T3D/entity.h b/Engine/source/T3D/entity.h index faaaea4cf1..52818f6f96 100644 --- a/Engine/source/T3D/entity.h +++ b/Engine/source/T3D/entity.h @@ -32,13 +32,12 @@ #ifndef COMPONENT_H #include "T3D/components/component.h" #endif -#ifndef MROTATION_H -#include "math/mRotation.h" -#endif #ifndef _CONTAINERQUERY_H_ #include "T3D/containerQuery.h" #endif +class Component; + //************************************************************************** // Entity //************************************************************************** @@ -272,9 +271,6 @@ Vector Entity::getComponents() // Loop through our child objects. for (U32 i = 0; i < mComponents.size(); i++) { - if (!mComponents[i]->isEnabled()) - continue; - curObj = dynamic_cast(mComponents[i]); // Add this child object if appropriate. diff --git a/Engine/source/gui/editor/inspector/mountingGroup.cpp b/Engine/source/gui/editor/inspector/mountingGroup.cpp index bce47f66a9..7afa531055 100644 --- a/Engine/source/gui/editor/inspector/mountingGroup.cpp +++ b/Engine/source/gui/editor/inspector/mountingGroup.cpp @@ -77,7 +77,7 @@ GuiControl* GuiInspectorMountingGroup::buildMenuCtrl() //GuiInspectorTypeMenuBase::_registerEditControl( retCtrl ); char szName[512]; - dSprintf( szName, 512, "IE_%s_%d_%s_Field", retCtrl->getClassName(), mParentInspector->getInspectObject()->getId(), mCaption); + dSprintf( szName, 512, "IE_%s_%d_%s_Field", retCtrl->getClassName(), mParentInspector->getInspectObject()->getId(), mCaption.c_str()); // Register the object retCtrl->registerObject( szName ); diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index fc7e2a9209..63a8c9ca92 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -35,6 +35,8 @@ if(UNIX) # for asm files SET (CMAKE_ASM_NASM_OBJECT_FORMAT "elf") ENABLE_LANGUAGE (ASM_NASM) + + set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") endif() # TODO: fmod support @@ -257,7 +259,7 @@ addPath("${srcDir}/gui/3d") addPath("${srcDir}/postFx") if(NOT TORQUE_EXPERIMENTAL_EC) - set(BLACKLIST "Entity.cpp;Entity.h" ) + set(BLACKLIST "entity.cpp;entity.h" ) endif() addPath("${srcDir}/T3D") set(BLACKLIST "" ) @@ -274,12 +276,12 @@ addPath("${srcDir}/T3D/turret") if( TORQUE_EXPERIMENTAL_EC ) addPath("${srcDir}/T3D/components/") - addPath("${srcDir}/T3D/components/Animation") - addPath("${srcDir}/T3D/components/Camera") - addPath("${srcDir}/T3D/components/Collision") - addPath("${srcDir}/T3D/components/Game") - addPath("${srcDir}/T3D/components/Physics") - addPath("${srcDir}/T3D/components/Render") + addPath("${srcDir}/T3D/components/animation") + addPath("${srcDir}/T3D/components/camera") + addPath("${srcDir}/T3D/components/collision") + addPath("${srcDir}/T3D/components/game") + addPath("${srcDir}/T3D/components/physics") + addPath("${srcDir}/T3D/components/render") endif() addPath("${srcDir}/main/") From e48ee1a03a5f0cb583b20e3317ea7962239873ab Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 29 May 2016 00:58:39 -0500 Subject: [PATCH 252/324] Fixes the recursive directory dump in the Linux platform code so that module/asset parsing works as expected. --- .../source/platformX86UNIX/x86UNIXFileio.cpp | 96 +++++++++++++------ 1 file changed, 65 insertions(+), 31 deletions(-) diff --git a/Engine/source/platformX86UNIX/x86UNIXFileio.cpp b/Engine/source/platformX86UNIX/x86UNIXFileio.cpp index 6c2dd69559..6e51b85e1b 100644 --- a/Engine/source/platformX86UNIX/x86UNIXFileio.cpp +++ b/Engine/source/platformX86UNIX/x86UNIXFileio.cpp @@ -1151,45 +1151,79 @@ bool dPathCopy(const char *fromName, const char *toName, bool nooverwrite) DIR *dip; struct dirent *d; - if (subPath && (dStrncmp(subPath, "", 1) != 0)) - { - if ((basePath[dStrlen(basePath) - 1]) == '/') - dSprintf(Path, 1024, "%s%s", basePath, subPath); - else - dSprintf(Path, 1024, "%s/%s", basePath, subPath); - } + dsize_t trLen = basePath ? dStrlen(basePath) : 0; + dsize_t subtrLen = subPath ? dStrlen(subPath) : 0; + char trail = trLen > 0 ? basePath[trLen - 1] : '\0'; + char subTrail = subtrLen > 0 ? subPath[subtrLen - 1] : '\0'; + char subLead = subtrLen > 0 ? subPath[0] : '\0'; + + if (trail == '/') + { + if (subPath && (dStrncmp(subPath, "", 1) != 0)) + { + if (subTrail == '/') + dSprintf(Path, 1024, "%s%s", basePath, subPath); + else + dSprintf(Path, 1024, "%s%s/", basePath, subPath); + } + else + dSprintf(Path, 1024, "%s", basePath); + } else - dSprintf(Path, 1024, "%s", basePath); + { + if (subPath && (dStrncmp(subPath, "", 1) != 0)) + { + if (subTrail == '/') + dSprintf(Path, 1024, "%s%s", basePath, subPath); + else + dSprintf(Path, 1024, "%s%s/", basePath, subPath); + } + else + dSprintf(Path, 1024, "%s/", basePath); + } + dip = opendir(Path); if (dip == NULL) return false; + ////////////////////////////////////////////////////////////////////////// // add path to our return list ( provided it is valid ) ////////////////////////////////////////////////////////////////////////// if (!Platform::isExcludedDirectory(subPath)) - { - if (noBasePath) - { - // We have a path and it's not an empty string or an excluded directory - if ( (subPath && (dStrncmp (subPath, "", 1) != 0)) ) - directoryVector.push_back(StringTable->insert(subPath)); - } - else - { - if ( (subPath && (dStrncmp(subPath, "", 1) != 0)) ) - { - char szPath[1024]; - dMemset(szPath, 0, 1024); - if ( (basePath[dStrlen(basePath) - 1]) != '/') - dSprintf(szPath, 1024, "%s%s", basePath, subPath); - else - dSprintf(szPath, 1024, "%s%s", basePath, &subPath[1]); - directoryVector.push_back(StringTable->insert(szPath)); - } - else - directoryVector.push_back(StringTable->insert(basePath)); - } - } + { + if (noBasePath) + { + // We have a path and it's not an empty string or an excluded directory + if ( (subPath && (dStrncmp (subPath, "", 1) != 0)) ) + directoryVector.push_back(StringTable->insert(subPath)); + } + else + { + if ( (subPath && (dStrncmp(subPath, "", 1) != 0)) ) + { + char szPath[1024]; + dMemset(szPath, 0, 1024); + if (trail == '/') + { + if ((basePath[dStrlen(basePath) - 1]) != '/') + dSprintf(szPath, 1024, "%s%s", basePath, &subPath[1]); + else + dSprintf(szPath, 1024, "%s%s", basePath, subPath); + } + else + { + if ((basePath[dStrlen(basePath) - 1]) != '/') + dSprintf(szPath, 1024, "%s%s", basePath, subPath); + else + dSprintf(szPath, 1024, "%s/%s", basePath, subPath); + } + + directoryVector.push_back(StringTable->insert(szPath)); + } + else + directoryVector.push_back(StringTable->insert(basePath)); + } + } ////////////////////////////////////////////////////////////////////////// // Iterate through and grab valid directories ////////////////////////////////////////////////////////////////////////// From 18184747e39d59b3b163f01389fbebfe22993f82 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sun, 29 May 2016 11:54:50 -0500 Subject: [PATCH 253/324] Fixes an issue where script-based components listed in the scene tree would not have a name on their tree item. --- Engine/source/T3D/assets/ComponentAsset.h | 6 ++++ Engine/source/T3D/entity.cpp | 44 +++++++++++++++++++++-- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/assets/ComponentAsset.h b/Engine/source/T3D/assets/ComponentAsset.h index 0eaa5a86b0..1db53b8c8c 100644 --- a/Engine/source/T3D/assets/ComponentAsset.h +++ b/Engine/source/T3D/assets/ComponentAsset.h @@ -66,6 +66,12 @@ class ComponentAsset : public AssetBase /// Declare Console Object. DECLARE_CONOBJECT(ComponentAsset); + StringTableEntry getComponentName() { return mComponentName; } + StringTableEntry getComponentClass() { return mComponentClass; } + StringTableEntry getFriendlyName() { return mFriendlyName; } + StringTableEntry getFriendlyType() { return mComponentType; } + StringTableEntry getDescription() { return mDescription; } + protected: virtual void initializeAsset(void) {} virtual void onAssetRefresh(void) {} diff --git a/Engine/source/T3D/entity.cpp b/Engine/source/T3D/entity.cpp index bff5895709..ae65863603 100644 --- a/Engine/source/T3D/entity.cpp +++ b/Engine/source/T3D/entity.cpp @@ -39,6 +39,9 @@ #include "T3D/components/collision/collisionInterfaces.h" #include "gui/controls/guiTreeViewCtrl.h" +#include "assets/assetManager.h" +#include "assets/assetQuery.h" +#include "T3D/assets/ComponentAsset.h" #include "console/consoleInternal.h" #include "T3D/gameBase/std/stdMoveList.h" @@ -1353,7 +1356,8 @@ Component *Entity::getComponent(String componentType) void Entity::onInspect() { Vector updaters = getComponents(); - for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) { + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { (*it)->onInspect(); } @@ -1374,9 +1378,45 @@ void Entity::onInspect() newItem->mState.set(GuiTreeViewCtrl::Item::ForceItemName); //newItem->mInspectorInfo.mObject = this; - for (U32 i = 0; i < mComponents.size(); i++) + AssetManager *assetDB = dynamic_cast(Sim::findObject("AssetDatabase")); + if (!assetDB) + return; + + //This is used in the event of script-created assets, which likely only have + //the name and other 'friendly' properties stored in a ComponentAsset. + //So we'll do a query for those assets and find the asset based on the component's + //class name + AssetQuery* qry = new AssetQuery(); + qry->registerObject(); + + assetDB->findAssetType(qry, "ComponentAsset"); + + for (U32 i = 0; i < mComponents.size(); ++i) { String compName = mComponents[i]->getFriendlyName(); + + if (compName == String("")) + { + String componentClass = mComponents[i]->getClassNamespace(); + + //Means that it's a script-derived component and we should consult the asset to try + //to get the info for it + S32 compAssetCount = qry->mAssetList.size(); + for (U32 c = 0; c < compAssetCount; ++c) + { + StringTableEntry assetID = qry->mAssetList[c]; + + ComponentAsset* compAsset = assetDB->acquireAsset(assetID); + + String compAssetClass = compAsset->getComponentName(); + if (componentClass == compAssetClass) + { + compName = compAsset->getFriendlyName(); + break; + } + } + } + S32 compID = editorTree->insertItem(componentID, compName); newItem = editorTree->getItem(compID); newItem->mInspectorInfo.mObject = mComponents[i]; From 74a2005d1527b1b1fd0cb1818aac1344bddec87f Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 30 May 2016 02:29:20 -0500 Subject: [PATCH 254/324] Fixes mistake where GuiInspectorEntityGroup's onAdd doesn't explicitly return true, which can cause problems in some compilers. --- Engine/source/gui/editor/inspector/entityGroup.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Engine/source/gui/editor/inspector/entityGroup.cpp b/Engine/source/gui/editor/inspector/entityGroup.cpp index 2fd6e61722..c833d336d4 100644 --- a/Engine/source/gui/editor/inspector/entityGroup.cpp +++ b/Engine/source/gui/editor/inspector/entityGroup.cpp @@ -41,6 +41,8 @@ bool GuiInspectorEntityGroup::onAdd() { if (!Parent::onAdd()) return false; + + return true; } //----------------------------------------------------------------------------- From 553cf260f1ca168777e1b9c544ae22c1072ddd2f Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 30 May 2016 03:13:19 -0500 Subject: [PATCH 255/324] Some converts of usage of Shapebase for Gamebase to make camera/control object swapping easier. --- Engine/source/T3D/fps/guiCrossHairHud.cpp | 2 +- Engine/source/T3D/gameFunctions.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/fps/guiCrossHairHud.cpp b/Engine/source/T3D/fps/guiCrossHairHud.cpp index a8cd3e1ba7..01761b7071 100644 --- a/Engine/source/T3D/fps/guiCrossHairHud.cpp +++ b/Engine/source/T3D/fps/guiCrossHairHud.cpp @@ -117,7 +117,7 @@ void GuiCrossHairHud::onRender(Point2I offset, const RectI &updateRect) GameConnection* conn = GameConnection::getConnectionToServer(); if (!conn) return; - ShapeBase* control = dynamic_cast(conn->getControlObject()); + GameBase* control = dynamic_cast(conn->getCameraObject()); if (!control || !(control->getTypeMask() & ObjectMask) || !conn->isFirstPerson()) return; diff --git a/Engine/source/T3D/gameFunctions.cpp b/Engine/source/T3D/gameFunctions.cpp index 7def7c252c..3c71b57b5c 100644 --- a/Engine/source/T3D/gameFunctions.cpp +++ b/Engine/source/T3D/gameFunctions.cpp @@ -339,7 +339,7 @@ bool GameProcessCameraQuery(CameraQuery *query) if (connection && connection->getControlCameraTransform(0.032f, &query->cameraMatrix)) { - query->object = dynamic_cast(connection->getControlObject()); + query->object = dynamic_cast(connection->getCameraObject()); query->nearPlane = gClientSceneGraph->getNearClip(); // Scale the normal visible distance by the performance From bbf7865a7719550ffb9e6cfd151c9190ff005554 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 30 May 2016 21:30:02 -0500 Subject: [PATCH 256/324] Makes sure if you don't spawn a game object into MissionGroup, it spawns it into MissionCleanup. --- .../Full/game/scripts/server/gameObjects/GameObjectManager.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs index 57c47c5cfd..f0b618920f 100644 --- a/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs +++ b/Templates/Full/game/scripts/server/gameObjects/GameObjectManager.cs @@ -77,8 +77,10 @@ function spawnGameObject(%name, %addToMissionGroup) { %newSGOObject = TamlRead(%gameObjectAsset.TAMLFilePath); - if(%addToMissionGroup == true) + if(%addToMissionGroup == true) //save instance when saving level MissionGroup.add(%newSGOObject); + else // clear instance on level exit + MissionCleanup.add(%newSGOObject); return %newSGOObject; } From 2464b620ba92adf0062dd9cfd28e4da8dffe2b99 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 31 May 2016 12:51:23 -0500 Subject: [PATCH 257/324] Fixes several minor initialization issues that were causing problems with deletion/management of components and entities. Also makes the ThirdPersonPlayer game object editor selectable again by removing an erroneously set field. --- .../animation/animationComponent.cpp | 6 +++-- .../camera/cameraOrbiterComponent.cpp | 26 +++++++++++++++++++ .../camera/cameraOrbiterComponent.h | 3 +++ .../physics/playerControllerComponent.cpp | 4 ++- .../T3D/components/render/meshComponent.cpp | 1 + Engine/source/T3D/entity.cpp | 14 ++++++---- .../gameObjects/ThirdPersonPlayerObject.taml | 1 - 7 files changed, 46 insertions(+), 9 deletions(-) diff --git a/Engine/source/T3D/components/animation/animationComponent.cpp b/Engine/source/T3D/components/animation/animationComponent.cpp index 4c009f599f..e1a71511cd 100644 --- a/Engine/source/T3D/components/animation/animationComponent.cpp +++ b/Engine/source/T3D/components/animation/animationComponent.cpp @@ -149,6 +149,8 @@ bool AnimationComponent::onAdd() void AnimationComponent::onRemove() { Parent::onRemove(); + + mOwnerRenderInst = NULL; } void AnimationComponent::onComponentAdd() @@ -387,7 +389,7 @@ S32 AnimationComponent::getThreadSequenceID(S32 slot) void AnimationComponent::updateThread(Thread& st) { - if (!mOwnerShapeInstance) + if (!mOwnerRenderInst) return; switch (st.state) @@ -628,7 +630,7 @@ void AnimationComponent::startSequenceSound(Thread& thread) void AnimationComponent::advanceThreads(F32 dt) { - if (!mOwnerShapeInstance) + if (!mOwnerRenderInst) return; for (U32 i = 0; i < MaxScriptThreads; i++) diff --git a/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp b/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp index dbc7cde699..7e53924d3b 100644 --- a/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp +++ b/Engine/source/T3D/components/camera/cameraOrbiterComponent.cpp @@ -92,6 +92,32 @@ void CameraOrbiterComponent::onComponentRemove() Parent::onComponentRemove(); } +void CameraOrbiterComponent::componentAddedToOwner(Component *comp) +{ + if (comp->getId() == getId()) + return; + + //test if this is a shape component! + CameraComponent *camComponent = dynamic_cast(comp); + if (camComponent) + { + mCamera = camComponent; + } +} + +void CameraOrbiterComponent::componentRemovedFromOwner(Component *comp) +{ + if (comp->getId() == getId()) //????????? + return; + + //test if this is a shape component! + CameraComponent *camComponent = dynamic_cast(comp); + if (camComponent) + { + mCamera = NULL; + } +} + U32 CameraOrbiterComponent::packUpdate(NetConnection *con, U32 mask, BitStream *stream) { U32 retMask = Parent::packUpdate(con, mask, stream); diff --git a/Engine/source/T3D/components/camera/cameraOrbiterComponent.h b/Engine/source/T3D/components/camera/cameraOrbiterComponent.h index 8fb584a3ee..2a091e15e2 100644 --- a/Engine/source/T3D/components/camera/cameraOrbiterComponent.h +++ b/Engine/source/T3D/components/camera/cameraOrbiterComponent.h @@ -62,6 +62,9 @@ class CameraOrbiterComponent : public Component virtual void onComponentAdd(); virtual void onComponentRemove(); + virtual void componentAddedToOwner(Component *comp); + virtual void componentRemovedFromOwner(Component *comp); + virtual U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream); virtual void unpackUpdate(NetConnection *con, BitStream *stream); diff --git a/Engine/source/T3D/components/physics/playerControllerComponent.cpp b/Engine/source/T3D/components/physics/playerControllerComponent.cpp index 77db8dd1fb..60945f68e8 100644 --- a/Engine/source/T3D/components/physics/playerControllerComponent.cpp +++ b/Engine/source/T3D/components/physics/playerControllerComponent.cpp @@ -69,6 +69,8 @@ PlayerControllerComponent::PlayerControllerComponent() : Component() mFriction = 0.3f; mElasticity = 0.4f; mMaxVelocity = 3000.f; + mVelocity = VectorF::Zero; + mContactTimer = 0; mSticky = false; mFalling = false; @@ -88,7 +90,7 @@ PlayerControllerComponent::PlayerControllerComponent() : Component() mDescription = getDescriptionText("A general-purpose physics player controller."); - mNetFlags.set(Ghostable | ScopeAlways); + //mNetFlags.set(Ghostable | ScopeAlways); mMass = 9.0f; // from ShapeBase mDrag = 1.0f; // from ShapeBase diff --git a/Engine/source/T3D/components/render/meshComponent.cpp b/Engine/source/T3D/components/render/meshComponent.cpp index fdb005adfd..50c8f7506f 100644 --- a/Engine/source/T3D/components/render/meshComponent.cpp +++ b/Engine/source/T3D/components/render/meshComponent.cpp @@ -53,6 +53,7 @@ MeshComponent::MeshComponent() : Component() { mShapeName = StringTable->insert(""); mShapeAsset = StringTable->insert(""); + mShapeInstance = NULL; mChangingMaterials.clear(); diff --git a/Engine/source/T3D/entity.cpp b/Engine/source/T3D/entity.cpp index ae65863603..f5ca1adb13 100644 --- a/Engine/source/T3D/entity.cpp +++ b/Engine/source/T3D/entity.cpp @@ -405,8 +405,9 @@ U32 Entity::packUpdate(NetConnection *con, U32 mask, BitStream *stream) //mathWrite( *stream, getScale() ); //stream->writeAffineTransform(mObjToWorld); //mathWrite(*stream, getPosition()); - mathWrite(*stream, mPos); + //mathWrite(*stream, mPos); + stream->writeCompressedPoint(mPos); mathWrite(*stream, getRotation()); mDelta.move.pack(stream); @@ -500,7 +501,8 @@ void Entity::unpackUpdate(NetConnection *con, BitStream *stream) Point3F pos; - mathRead(*stream, &pos); + stream->readCompressedPoint(&pos); + //mathRead(*stream, &pos); RotationF rot; @@ -893,8 +895,10 @@ void Entity::setMountRotation(EulerF rotOffset) void Entity::getCameraTransform(F32* pos, MatrixF* mat) { Vector updaters = getComponents(); - for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) { - if ((*it)->getCameraTransform(pos, mat)) { + for (Vector::iterator it = updaters.begin(); it != updaters.end(); it++) + { + if ((*it)->getCameraTransform(pos, mat)) + { return; } } @@ -1210,7 +1214,7 @@ void Entity::removeObject(SimObject* object) bool Entity::addComponent(Component *comp) { - if (comp == NULL || !comp->isProperlyAdded()) + if (comp == NULL) return false; //double-check were not re-adding anything diff --git a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml index fcfead0d44..df2397bb5c 100644 --- a/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml +++ b/Templates/Full/game/scripts/server/gameObjects/ThirdPersonPlayerObject.taml @@ -1,6 +1,5 @@ Date: Thu, 2 Jun 2016 22:40:29 -0500 Subject: [PATCH 258/324] Hooks the component fields back into the inspector so they are registered as proper fields of their types, as opposed to the regular string-only dynamic fields. --- Engine/source/T3D/components/component.cpp | 16 +- .../T3D/components/render/meshComponent.cpp | 2 + Engine/source/T3D/entity.cpp | 2 +- .../source/gui/controls/guiTreeViewCtrl.cpp | 2 +- Engine/source/gui/editor/guiInspector.cpp | 12 + .../gui/editor/inspector/componentGroup.cpp | 260 ++++++++++++++++++ .../gui/editor/inspector/componentGroup.h | 70 +++++ .../gui/editor/inspector/dynamicGroup.cpp | 14 + 8 files changed, 369 insertions(+), 9 deletions(-) create mode 100644 Engine/source/gui/editor/inspector/componentGroup.cpp create mode 100644 Engine/source/gui/editor/inspector/componentGroup.h diff --git a/Engine/source/T3D/components/component.cpp b/Engine/source/T3D/components/component.cpp index 607df5e30c..47784d4b24 100644 --- a/Engine/source/T3D/components/component.cpp +++ b/Engine/source/T3D/components/component.cpp @@ -410,20 +410,22 @@ void Component::addComponentField(const char *fieldName, const char *desc, const S32 fieldTypeMask = -1; StringTableEntry fieldType = StringTable->insert(type); - if (fieldType == StringTable->insert("TypeS32")) + if (fieldType == StringTable->insert("int")) fieldTypeMask = TypeS32; - else if (fieldType == StringTable->insert("TypeF32")) + else if (fieldType == StringTable->insert("float")) fieldTypeMask = TypeF32; - else if (fieldType == StringTable->insert("TypePoint3F")) + else if (fieldType == StringTable->insert("vector")) fieldTypeMask = TypePoint3F; - else if (fieldType == StringTable->insert("TypeMaterialName")) + else if (fieldType == StringTable->insert("material")) fieldTypeMask = TypeMaterialName; - else if (fieldType == StringTable->insert("TypeImageFilename")) + else if (fieldType == StringTable->insert("image")) fieldTypeMask = TypeImageFilename; - else if (fieldType == StringTable->insert("TypeShapeFilename")) + else if (fieldType == StringTable->insert("shape")) fieldTypeMask = TypeShapeFilename; - else if (fieldType == StringTable->insert("TypeBool")) + else if (fieldType == StringTable->insert("bool")) fieldTypeMask = TypeBool; + else if (fieldType == StringTable->insert("object")) + fieldTypeMask = TypeSimObjectPtr; else fieldTypeMask = TypeString; diff --git a/Engine/source/T3D/components/render/meshComponent.cpp b/Engine/source/T3D/components/render/meshComponent.cpp index 50c8f7506f..6f48356667 100644 --- a/Engine/source/T3D/components/render/meshComponent.cpp +++ b/Engine/source/T3D/components/render/meshComponent.cpp @@ -115,6 +115,8 @@ void MeshComponent::onRemove() { Parent::onRemove(); + mMeshAsset.clear(); + SAFE_DELETE(mShapeInstance); } diff --git a/Engine/source/T3D/entity.cpp b/Engine/source/T3D/entity.cpp index f5ca1adb13..00ecedad03 100644 --- a/Engine/source/T3D/entity.cpp +++ b/Engine/source/T3D/entity.cpp @@ -230,7 +230,7 @@ bool Entity::onAdd() void Entity::onRemove() { - clearComponents(false); + clearComponents(true); removeFromScene(); diff --git a/Engine/source/gui/controls/guiTreeViewCtrl.cpp b/Engine/source/gui/controls/guiTreeViewCtrl.cpp index f8bc41c2e6..a5e833a198 100644 --- a/Engine/source/gui/controls/guiTreeViewCtrl.cpp +++ b/Engine/source/gui/controls/guiTreeViewCtrl.cpp @@ -3798,7 +3798,7 @@ void GuiTreeViewCtrl::onMouseDown(const GuiEvent & event) if (item->isInspectorData()) { Entity* e = dynamic_cast(item->getObject()); - if (item->mScriptInfo.mText != StringTable->insert("Components")) + //if (item->mScriptInfo.mText != StringTable->insert("Components")) { Entity* e = dynamic_cast(item->getObject()); if (e) diff --git a/Engine/source/gui/editor/guiInspector.cpp b/Engine/source/gui/editor/guiInspector.cpp index 811441e2da..565597571c 100644 --- a/Engine/source/gui/editor/guiInspector.cpp +++ b/Engine/source/gui/editor/guiInspector.cpp @@ -32,6 +32,7 @@ #ifdef TORQUE_EXPERIMENTAL_EC #include "gui/editor/inspector/entityGroup.h" #include "gui/editor/inspector/mountingGroup.h" +#include "gui/editor/inspector/componentGroup.h" #endif IMPLEMENT_CONOBJECT(GuiInspector); @@ -609,6 +610,17 @@ void GuiInspector::refresh() addObject(mounting); } } + + if (mTargets.first()->getClassRep()->isSubclassOf("Component")) + { + //Build the component field groups as the component describes it + Component* comp = dynamic_cast(mTargets.first().getPointer()); + + GuiInspectorComponentGroup *compGroup = new GuiInspectorComponentGroup("Component Fields", this); + compGroup->registerObject(); + mGroups.push_back(compGroup); + addObject(compGroup); + } #endif // Create the inspector groups for static fields. diff --git a/Engine/source/gui/editor/inspector/componentGroup.cpp b/Engine/source/gui/editor/inspector/componentGroup.cpp new file mode 100644 index 0000000000..6dd6f379cb --- /dev/null +++ b/Engine/source/gui/editor/inspector/componentGroup.cpp @@ -0,0 +1,260 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gui/buttons/guiIconButtonCtrl.h" +#include "gui/editor/guiInspector.h" +#include "gui/editor/inspector/componentGroup.h" +#include "core/strings/stringUnit.h" +#include "T3D/components/component.h" +#include "gui/editor/inspector/field.h" + +#include "console/engineAPI.h" + +IMPLEMENT_CONOBJECT(GuiInspectorComponentGroup); + +ConsoleDocClass(GuiInspectorComponentGroup, + "@brief Used to inspect an object's FieldDictionary (dynamic fields) instead " + "of regular persistent fields.\n\n" + "Editor use only.\n\n" + "@internal" + ); + +GuiInspectorComponentGroup::GuiInspectorComponentGroup(StringTableEntry groupName, SimObjectPtr parent) +: GuiInspectorGroup(groupName, parent) +{ + /*mNeedScroll=false;*/ +}; + +bool GuiInspectorComponentGroup::onAdd() +{ + if (!Parent::onAdd()) + return false; + + return true; +} + +//----------------------------------------------------------------------------- +// GuiInspectorComponentGroup - add custom controls +//----------------------------------------------------------------------------- +bool GuiInspectorComponentGroup::createContent() +{ + if(!Parent::createContent()) + return false; + + Con::evaluatef("%d.stack = %d;", this->getId(), mStack->getId()); + + Con::executef(this, "createContent"); + + return true; +} + +//----------------------------------------------------------------------------- +// GuiInspectorComponentGroup - inspectGroup override +//----------------------------------------------------------------------------- +bool GuiInspectorComponentGroup::inspectGroup() +{ + // We can't inspect a group without a target! + if (!mParent || !mParent->getNumInspectObjects()) + return false; + + // to prevent crazy resizing, we'll just freeze our stack for a sec.. + mStack->freeze(true); + + mStack->clear(); + + bool bNoGroup = false; + + // Un-grouped fields are all sorted into the 'general' group + if (dStricmp(mCaption, "General") == 0) + bNoGroup = true; + + // Just delete all fields and recreate them (like the dynamicGroup) + // because that makes creating controls for array fields a lot easier + clearFields(); + + bool bNewItems = false; + bool bMakingArray = false; + GuiStackControl *pArrayStack = NULL; + GuiRolloutCtrl *pArrayRollout = NULL; + bool bGrabItems = false; + + Component* comp = dynamic_cast(getInspector()->getInspectObject(0)); + + //if this isn't a component, what are we even doing here? + if (!comp) + return false; + + for (U32 i = 0; i < comp->getComponentFieldCount(); i++) + { + ComponentField* field = comp->getComponentField(i); + + bNewItems = true; + + GuiInspectorField *fieldGui = constructField(field->mFieldType); + if (fieldGui == NULL) + fieldGui = new GuiInspectorField(); + + fieldGui->init(mParent, this); + + AbstractClassRep::Field *refField; + //check statics + refField = const_cast(comp->findField(field->mFieldName)); + if (!refField) + { + //check dynamics + SimFieldDictionary* fieldDictionary = comp->getFieldDictionary(); + SimFieldDictionaryIterator itr(fieldDictionary); + + while (*itr) + { + SimFieldDictionary::Entry* entry = *itr; + if (entry->slotName == field->mFieldName) + { + AbstractClassRep::Field f; + f.pFieldname = StringTable->insert(field->mFieldName); + + if (field->mFieldDescription) + f.pFieldDocs = field->mFieldDescription; + + f.type = field->mFieldType; + f.offset = -1; + f.elementCount = 1; + f.validator = NULL; + f.flag = 0; //change to be the component type + + f.setDataFn = &defaultProtectedSetFn; + f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; + + if (!dStrcmp(field->mGroup, "")) + f.pGroupname = "Component"; + else + f.pGroupname = field->mGroup; + + ConsoleBaseType* conType = ConsoleBaseType::getType(field->mFieldType); + AssertFatal(conType, "ConsoleObject::addField - invalid console type"); + f.table = conType->getEnumTable(); + + tempFields.push_back(f); + + refField = &f; + + break; + } + ++itr; + } + } + + if (!refField) + continue; + + fieldGui->setInspectorField(&tempFields[tempFields.size() - 1]); + + if (fieldGui->registerObject()) + { +#ifdef DEBUG_SPEW + Platform::outputDebugString("[GuiInspectorGroup] Adding field '%s'", + field->pFieldname); +#endif + + mChildren.push_back(fieldGui); + mStack->addObject(fieldGui); + } + else + { + SAFE_DELETE(fieldGui); + } + } + + mStack->freeze(false); + mStack->updatePanes(); + + // If we've no new items, there's no need to resize anything! + if (bNewItems == false && !mChildren.empty()) + return true; + + sizeToContents(); + + setUpdate(); + + return true; +} + +void GuiInspectorComponentGroup::updateAllFields() +{ + // We overload this to just reinspect the group. + inspectGroup(); +} + +void GuiInspectorComponentGroup::onMouseMove(const GuiEvent &event) +{ + //mParent->mOverDivider = false; +} +ConsoleMethod(GuiInspectorComponentGroup, inspectGroup, bool, 2, 2, "Refreshes the dynamic fields in the inspector.") +{ + return object->inspectGroup(); +} + +void GuiInspectorComponentGroup::clearFields() +{ +} + +SimFieldDictionary::Entry* GuiInspectorComponentGroup::findDynamicFieldInDictionary(StringTableEntry fieldName) +{ + SimFieldDictionary * fieldDictionary = mParent->getInspectObject()->getFieldDictionary(); + + for (SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) + { + SimFieldDictionary::Entry * entry = (*ditr); + + if (entry->slotName == fieldName) + return entry; + } + + return NULL; +} + +void GuiInspectorComponentGroup::addDynamicField() +{ +} + +AbstractClassRep::Field* GuiInspectorComponentGroup::findObjectBehaviorField(Component* target, String fieldName) +{ + AbstractClassRep::FieldList& fieldList = target->getClassRep()->mFieldList; + for (AbstractClassRep::FieldList::iterator itr = fieldList.begin(); + itr != fieldList.end(); ++itr) + { + AbstractClassRep::Field* field = &(*itr); + String fldNm(field->pFieldname); + if (fldNm == fieldName) + return field; + } + return NULL; +} +ConsoleMethod(GuiInspectorComponentGroup, addDynamicField, void, 2, 2, "obj.addDynamicField();") +{ + object->addDynamicField(); +} + +ConsoleMethod(GuiInspectorComponentGroup, removeDynamicField, void, 3, 3, "") +{ +} diff --git a/Engine/source/gui/editor/inspector/componentGroup.h b/Engine/source/gui/editor/inspector/componentGroup.h new file mode 100644 index 0000000000..34b748c98f --- /dev/null +++ b/Engine/source/gui/editor/inspector/componentGroup.h @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef GUI_INSPECTOR_COMPONENT_GROUP_H +#define GUI_INSPECTOR_COMPONENT_GROUP_H + +#include "gui/editor/inspector/group.h" +#include "console/simFieldDictionary.h" +#include "T3D/components/component.h" +#include "gui/controls/guiPopUpCtrlEx.h" + +class GuiInspectorComponentGroup : public GuiInspectorGroup +{ +private: + typedef GuiInspectorGroup Parent; + GuiControl* mAddCtrl; + + Vector tempFields; + +public: + DECLARE_CONOBJECT(GuiInspectorComponentGroup); + GuiInspectorComponentGroup() { /*mNeedScroll=false;*/ }; + GuiInspectorComponentGroup(StringTableEntry groupName, SimObjectPtr parent); + + //----------------------------------------------------------------------------- + // inspectGroup is overridden in GuiInspectorComponentGroup to inspect an + // objects FieldDictionary (dynamic fields) instead of regular persistent + // fields. + virtual bool onAdd(); + bool inspectGroup(); + virtual void updateAllFields(); + + void onMouseMove(const GuiEvent &event); + + // For scriptable dynamic field additions + void addDynamicField(); + + // Clear our fields (delete them) + void clearFields(); + + // Find an already existent field by name in the dictionary + virtual SimFieldDictionary::Entry* findDynamicFieldInDictionary(StringTableEntry fieldName); + + AbstractClassRep::Field* findObjectBehaviorField(Component* target, String fieldName); +protected: + // create our inner controls when we add + virtual bool createContent(); + +}; + +#endif diff --git a/Engine/source/gui/editor/inspector/dynamicGroup.cpp b/Engine/source/gui/editor/inspector/dynamicGroup.cpp index ef5d98b3ac..78d8c4bd8f 100644 --- a/Engine/source/gui/editor/inspector/dynamicGroup.cpp +++ b/Engine/source/gui/editor/inspector/dynamicGroup.cpp @@ -26,6 +26,10 @@ #include "gui/editor/inspector/dynamicField.h" #include "console/engineAPI.h" +#ifdef TORQUE_EXPERIMENTAL_EC +#include "T3D/components/component.h" +#endif + IMPLEMENT_CONOBJECT(GuiInspectorDynamicGroup); ConsoleDocClass( GuiInspectorDynamicGroup, @@ -122,6 +126,16 @@ bool GuiInspectorDynamicGroup::inspectGroup() SimFieldDictionary * fieldDictionary = target->getFieldDictionary(); for(SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) { +#ifdef TORQUE_EXPERIMENTAL_EC + if (target->getClassRep()->isSubclassOf("Component")) + { + Component* compTarget = dynamic_cast(target); + + ComponentField* compField = compTarget->getComponentField((*ditr)->slotName); + if (compField) + continue; + } +#endif if( i == 0 ) { flist.increment(); From 6ec899620dd9553b2c8e1dd7dc57f054b357d156 Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 2 Jun 2016 23:57:46 -0500 Subject: [PATCH 259/324] Tweak to the Component Fields to properly refresh the group. --- Engine/source/gui/editor/guiInspector.cpp | 11 ++- .../gui/editor/inspector/componentGroup.cpp | 82 +++++++++---------- 2 files changed, 44 insertions(+), 49 deletions(-) diff --git a/Engine/source/gui/editor/guiInspector.cpp b/Engine/source/gui/editor/guiInspector.cpp index 565597571c..c1f54a24df 100644 --- a/Engine/source/gui/editor/guiInspector.cpp +++ b/Engine/source/gui/editor/guiInspector.cpp @@ -616,10 +616,13 @@ void GuiInspector::refresh() //Build the component field groups as the component describes it Component* comp = dynamic_cast(mTargets.first().getPointer()); - GuiInspectorComponentGroup *compGroup = new GuiInspectorComponentGroup("Component Fields", this); - compGroup->registerObject(); - mGroups.push_back(compGroup); - addObject(compGroup); + if (comp->getComponentFieldCount() > 0) + { + GuiInspectorComponentGroup *compGroup = new GuiInspectorComponentGroup("Component Fields", this); + compGroup->registerObject(); + mGroups.push_back(compGroup); + addObject(compGroup); + } } #endif diff --git a/Engine/source/gui/editor/inspector/componentGroup.cpp b/Engine/source/gui/editor/inspector/componentGroup.cpp index 6dd6f379cb..7d6d30eaa1 100644 --- a/Engine/source/gui/editor/inspector/componentGroup.cpp +++ b/Engine/source/gui/editor/inspector/componentGroup.cpp @@ -76,21 +76,13 @@ bool GuiInspectorComponentGroup::inspectGroup() if (!mParent || !mParent->getNumInspectObjects()) return false; + clearFields(); + // to prevent crazy resizing, we'll just freeze our stack for a sec.. mStack->freeze(true); - mStack->clear(); - bool bNoGroup = false; - // Un-grouped fields are all sorted into the 'general' group - if (dStricmp(mCaption, "General") == 0) - bNoGroup = true; - - // Just delete all fields and recreate them (like the dynamicGroup) - // because that makes creating controls for array fields a lot easier - clearFields(); - bool bNewItems = false; bool bMakingArray = false; GuiStackControl *pArrayStack = NULL; @@ -116,52 +108,47 @@ bool GuiInspectorComponentGroup::inspectGroup() fieldGui->init(mParent, this); AbstractClassRep::Field *refField; - //check statics - refField = const_cast(comp->findField(field->mFieldName)); - if (!refField) - { - //check dynamics - SimFieldDictionary* fieldDictionary = comp->getFieldDictionary(); - SimFieldDictionaryIterator itr(fieldDictionary); - while (*itr) + //check dynamics + SimFieldDictionary* fieldDictionary = comp->getFieldDictionary(); + SimFieldDictionaryIterator itr(fieldDictionary); + + while (*itr) + { + SimFieldDictionary::Entry* entry = *itr; + if (entry->slotName == field->mFieldName) { - SimFieldDictionary::Entry* entry = *itr; - if (entry->slotName == field->mFieldName) - { - AbstractClassRep::Field f; - f.pFieldname = StringTable->insert(field->mFieldName); + AbstractClassRep::Field f; + f.pFieldname = StringTable->insert(field->mFieldName); - if (field->mFieldDescription) - f.pFieldDocs = field->mFieldDescription; + if (field->mFieldDescription) + f.pFieldDocs = field->mFieldDescription; - f.type = field->mFieldType; - f.offset = -1; - f.elementCount = 1; - f.validator = NULL; - f.flag = 0; //change to be the component type + f.type = field->mFieldType; + f.offset = -1; + f.elementCount = 1; + f.validator = NULL; + f.flag = 0; //change to be the component type - f.setDataFn = &defaultProtectedSetFn; - f.getDataFn = &defaultProtectedGetFn; - f.writeDataFn = &defaultProtectedWriteFn; + f.setDataFn = &defaultProtectedSetFn; + f.getDataFn = &defaultProtectedGetFn; + f.writeDataFn = &defaultProtectedWriteFn; - if (!dStrcmp(field->mGroup, "")) - f.pGroupname = "Component"; - else - f.pGroupname = field->mGroup; + f.pFieldDocs = field->mFieldDescription; - ConsoleBaseType* conType = ConsoleBaseType::getType(field->mFieldType); - AssertFatal(conType, "ConsoleObject::addField - invalid console type"); - f.table = conType->getEnumTable(); + f.pGroupname = "Component Fields"; - tempFields.push_back(f); + ConsoleBaseType* conType = ConsoleBaseType::getType(field->mFieldType); + AssertFatal(conType, "ConsoleObject::addField - invalid console type"); + f.table = conType->getEnumTable(); - refField = &f; + tempFields.push_back(f); - break; - } - ++itr; + refField = &f; + + break; } + ++itr; } if (!refField) @@ -216,6 +203,11 @@ ConsoleMethod(GuiInspectorComponentGroup, inspectGroup, bool, 2, 2, "Refreshes t void GuiInspectorComponentGroup::clearFields() { + // delete everything else + mStack->clear(); + + // clear the mChildren list. + mChildren.clear(); } SimFieldDictionary::Entry* GuiInspectorComponentGroup::findDynamicFieldInDictionary(StringTableEntry fieldName) From 37e030f8f4128976ef7a8f194baed502ebad87d2 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 4 Jun 2016 16:47:03 -0500 Subject: [PATCH 260/324] Makes vehicles work with the physics plugins. Makes vehicles create a basic physics body when using one of the physics plugins so that they can collide with other physics-enabled objects. Based on @rextimmy 's work. --- Engine/source/T3D/physics/bullet/btBody.cpp | 22 +++++++ Engine/source/T3D/physics/bullet/btBody.h | 2 + Engine/source/T3D/physics/physicsBody.h | 4 ++ Engine/source/T3D/physics/physx3/px3Body.cpp | 19 ++++++ Engine/source/T3D/physics/physx3/px3Body.h | 2 + Engine/source/T3D/physics/physx3/px3World.cpp | 59 ++++++++++++++++++- Engine/source/T3D/physics/physx3/px3World.h | 5 ++ Engine/source/T3D/vehicles/vehicle.cpp | 43 +++++++++++++- Engine/source/T3D/vehicles/vehicle.h | 7 +++ 9 files changed, 161 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/physics/bullet/btBody.cpp b/Engine/source/T3D/physics/bullet/btBody.cpp index 77c3b81159..95625d5203 100644 --- a/Engine/source/T3D/physics/bullet/btBody.cpp +++ b/Engine/source/T3D/physics/bullet/btBody.cpp @@ -378,3 +378,25 @@ void BtBody::setSimulationEnabled( bool enabled ) mIsEnabled = enabled; } + +void BtBody::moveKinematicTo(const MatrixF &transform) +{ + AssertFatal(mActor, "BtBody::moveKinematicTo - The actor is null!"); + + U32 bodyflags = mActor->getCollisionFlags(); + const bool isKinematic = bodyflags & BF_KINEMATIC; + if (!isKinematic) + { + Con::errorf("BtBody::moveKinematicTo is only for kinematic bodies."); + return; + } + + if (mCenterOfMass) + { + MatrixF xfm; + xfm.mul(transform, *mCenterOfMass); + mActor->setCenterOfMassTransform(btCast(xfm)); + } + else + mActor->setCenterOfMassTransform(btCast(transform)); +} \ No newline at end of file diff --git a/Engine/source/T3D/physics/bullet/btBody.h b/Engine/source/T3D/physics/bullet/btBody.h index 0f1ab669cf..fa6561c27a 100644 --- a/Engine/source/T3D/physics/bullet/btBody.h +++ b/Engine/source/T3D/physics/bullet/btBody.h @@ -111,6 +111,8 @@ class BtBody : public PhysicsBody F32 staticFriction ); virtual void applyCorrection( const MatrixF &xfm ); virtual void applyImpulse( const Point3F &origin, const Point3F &force ); + virtual void moveKinematicTo(const MatrixF &xfm); + }; #endif // _T3D_PHYSICS_BTBODY_H_ diff --git a/Engine/source/T3D/physics/physicsBody.h b/Engine/source/T3D/physics/physicsBody.h index 15e94bcbd3..a5250dea65 100644 --- a/Engine/source/T3D/physics/physicsBody.h +++ b/Engine/source/T3D/physics/physicsBody.h @@ -113,6 +113,10 @@ class PhysicsBody : public PhysicsObject /// virtual void applyImpulse( const Point3F &origin, const Point3F &force ) = 0; + + /// + virtual void moveKinematicTo(const MatrixF &xfm) = 0; + }; diff --git a/Engine/source/T3D/physics/physx3/px3Body.cpp b/Engine/source/T3D/physics/physx3/px3Body.cpp index 026309f088..e2fc3916fd 100644 --- a/Engine/source/T3D/physics/physx3/px3Body.cpp +++ b/Engine/source/T3D/physics/physx3/px3Body.cpp @@ -417,3 +417,22 @@ void Px3Body::applyImpulse( const Point3F &origin, const Point3F &force ) } +void Px3Body::moveKinematicTo(const MatrixF &transform) +{ + AssertFatal(mActor, "Px3Body::moveKinematicTo - The actor is null!"); + + const bool isKinematic = mBodyFlags & BF_KINEMATIC; + if (!isKinematic) + { + Con::errorf("Px3Body::moveKinematicTo is only for kinematic bodies."); + return; + } + + mWorld->lockScene(); + + physx::PxRigidDynamic *actor = mActor->is(); + actor->setKinematicTarget(px3Cast(transform)); + + mWorld->unlockScene(); +} + diff --git a/Engine/source/T3D/physics/physx3/px3Body.h b/Engine/source/T3D/physics/physx3/px3Body.h index 79096f57b1..223418c350 100644 --- a/Engine/source/T3D/physics/physx3/px3Body.h +++ b/Engine/source/T3D/physics/physx3/px3Body.h @@ -117,6 +117,8 @@ class Px3Body : public PhysicsBody F32 staticFriction ); virtual void applyCorrection( const MatrixF &xfm ); virtual void applyImpulse( const Point3F &origin, const Point3F &force ); + virtual void moveKinematicTo(const MatrixF &xfm); + }; #endif // _PX3BODY_H_ diff --git a/Engine/source/T3D/physics/physx3/px3World.cpp b/Engine/source/T3D/physics/physx3/px3World.cpp index c073423e9e..ca5be23026 100644 --- a/Engine/source/T3D/physics/physx3/px3World.cpp +++ b/Engine/source/T3D/physics/physx3/px3World.cpp @@ -62,7 +62,8 @@ Px3World::Px3World(): mScene( NULL ), mIsEnabled( false ), mEditorTimeScale( 1.0f ), mAccumulator( 0 ), - mControllerManager( NULL ) + mControllerManager(NULL), + mIsSceneLocked(false) { } @@ -335,6 +336,62 @@ void Px3World::releaseWriteLock() //AssertFatal( mScene->isWritable(), "PhysX3World::releaseWriteLock() - We should have been writable now!" ); } +void Px3World::lockScenes() +{ + Px3World *world = dynamic_cast(PHYSICSMGR->getWorld("server")); + + if (world) + world->lockScene(); + + world = dynamic_cast(PHYSICSMGR->getWorld("client")); + + if (world) + world->lockScene(); +} + +void Px3World::unlockScenes() +{ + Px3World *world = dynamic_cast(PHYSICSMGR->getWorld("server")); + + if (world) + world->unlockScene(); + + world = dynamic_cast(PHYSICSMGR->getWorld("client")); + + if (world) + world->unlockScene(); +} + +void Px3World::lockScene() +{ + if (!mScene) + return; + + if (mIsSceneLocked) + { + Con::printf("Px3World: Attempting to lock a scene that is already locked."); + return; + } + + mScene->lockWrite(); + mIsSceneLocked = true; +} + +void Px3World::unlockScene() +{ + if (!mScene) + return; + + if (!mIsSceneLocked) + { + Con::printf("Px3World: Attempting to unlock a scene that is not locked."); + return; + } + + mScene->unlockWrite(); + mIsSceneLocked = false; +} + bool Px3World::castRay( const Point3F &startPnt, const Point3F &endPnt, RayInfo *ri, const Point3F &impulse ) { diff --git a/Engine/source/T3D/physics/physx3/px3World.h b/Engine/source/T3D/physics/physx3/px3World.h index a1235d160e..9556aac4b9 100644 --- a/Engine/source/T3D/physics/physx3/px3World.h +++ b/Engine/source/T3D/physics/physx3/px3World.h @@ -56,6 +56,7 @@ class Px3World : public PhysicsWorld bool mIsEnabled; bool mIsSimulating; bool mIsServer; + bool mIsSceneLocked; U32 mTickCount; ProcessList *mProcessList; F32 mEditorTimeScale; @@ -96,11 +97,15 @@ class Px3World : public PhysicsWorld void releaseWriteLock(); bool isServer(){return mIsServer;} physx::PxController* createController( physx::PxControllerDesc &desc ); + void lockScene(); + void unlockScene(); //static static bool restartSDK( bool destroyOnly = false, Px3World *clientWorld = NULL, Px3World *serverWorld = NULL ); static void releaseWriteLocks(); static physx::PxCooking *getCooking(); static void setTiming(F32 stepTime,U32 maxIterations); + static void lockScenes(); + static void unlockScenes(); }; #endif // _PX3WORLD_H_ diff --git a/Engine/source/T3D/vehicles/vehicle.cpp b/Engine/source/T3D/vehicles/vehicle.cpp index 1f18b426f0..b6516fc3f4 100644 --- a/Engine/source/T3D/vehicles/vehicle.cpp +++ b/Engine/source/T3D/vehicles/vehicle.cpp @@ -46,6 +46,9 @@ #include "gfx/primBuilder.h" #include "gfx/gfxDrawUtil.h" #include "materials/materialDefinition.h" +#include "T3D/physics/physicsPlugin.h" +#include "T3D/physics/physicsBody.h" +#include "T3D/physics/physicsCollision.h" namespace { @@ -203,7 +206,8 @@ VehicleData::VehicleData() dMemset(waterSound, 0, sizeof(waterSound)); collDamageThresholdVel = 20; - collDamageMultiplier = 0.05f; + collDamageMultiplier = 0.05f; + enablePhysicsRep = true; } @@ -315,6 +319,7 @@ void VehicleData::packData(BitStream* stream) stream->write(softSplashSoundVel); stream->write(medSplashSoundVel); stream->write(hardSplashSoundVel); + stream->write(enablePhysicsRep); // write the water sound profiles for(i = 0; i < MaxSounds; i++) @@ -411,6 +416,7 @@ void VehicleData::unpackData(BitStream* stream) stream->read(&softSplashSoundVel); stream->read(&medSplashSoundVel); stream->read(&hardSplashSoundVel); + stream->read(&enablePhysicsRep); // write the water sound profiles for(i = 0; i < MaxSounds; i++) @@ -465,6 +471,11 @@ void VehicleData::unpackData(BitStream* stream) void VehicleData::initPersistFields() { + addGroup("Physics"); + addField("enablePhysicsRep", TypeBool, Offset(enablePhysicsRep, VehicleData), + "@brief Creates a representation of the object in the physics plugin.\n"); + endGroup("Physics"); + addField( "jetForce", TypeF32, Offset(jetForce, VehicleData), "@brief Additional force applied to the vehicle when it is jetting.\n\n" "For WheeledVehicles, the force is applied in the forward direction. For " @@ -682,6 +693,8 @@ Vehicle::Vehicle() mWorkingQueryBox.minExtents.set(-1e9f, -1e9f, -1e9f); mWorkingQueryBox.maxExtents.set(-1e9f, -1e9f, -1e9f); mWorkingQueryBoxCountDown = sWorkingQueryBoxStaleThreshold; + + mPhysicsRep = NULL; } U32 Vehicle::getCollisionMask() @@ -695,6 +708,25 @@ Point3F Vehicle::getVelocity() const return mRigid.linVelocity; } +void Vehicle::_createPhysics() +{ + SAFE_DELETE(mPhysicsRep); + + if (!PHYSICSMGR || !mDataBlock->enablePhysicsRep) + return; + + TSShape *shape = mShapeInstance->getShape(); + PhysicsCollision *colShape = NULL; + colShape = shape->buildColShape(false, getScale()); + + if (colShape) + { + PhysicsWorld *world = PHYSICSMGR->getWorld(isServerObject() ? "server" : "client"); + mPhysicsRep = PHYSICSMGR->createBody(); + mPhysicsRep->init(colShape, 0, PhysicsBody::BF_KINEMATIC, this, world); + mPhysicsRep->setTransform(getTransform()); + } +} //---------------------------------------------------------------------------- bool Vehicle::onAdd() @@ -776,11 +808,15 @@ bool Vehicle::onAdd() mConvex.box.maxExtents.convolve(mObjScale); mConvex.findNodeTransform(); + _createPhysics(); + return true; } void Vehicle::onRemove() { + SAFE_DELETE(mPhysicsRep); + U32 i=0; for( i=0; ienablePhysicsRep is false as mPhysicsRep will be NULL if it is + if (mPhysicsRep) + mPhysicsRep->moveKinematicTo(getTransform()); } } diff --git a/Engine/source/T3D/vehicles/vehicle.h b/Engine/source/T3D/vehicles/vehicle.h index 695c166861..dd8619fd66 100644 --- a/Engine/source/T3D/vehicles/vehicle.h +++ b/Engine/source/T3D/vehicles/vehicle.h @@ -127,6 +127,8 @@ struct VehicleData: public ShapeBaseData F32 splashFreqMod; F32 splashVelEpsilon; + bool enablePhysicsRep; + // VehicleData(); bool preload(bool server, String &errorStr); @@ -142,6 +144,7 @@ struct VehicleData: public ShapeBaseData //---------------------------------------------------------------------------- +class PhysicsBody; class Vehicle: public ShapeBase { @@ -177,6 +180,8 @@ class Vehicle: public ShapeBase Point3F cameraRotVec; }; + PhysicsBody *mPhysicsRep; + StateDelta mDelta; S32 mPredictionCount; ///< Number of ticks to predict VehicleData* mDataBlock; @@ -262,6 +267,8 @@ class Vehicle: public ShapeBase bool onAdd(); void onRemove(); + void _createPhysics(); + /// Interpolates between move ticks @see processTick /// @param dt Change in time between the last call and this call to the function void interpolateTick(F32 dt); From 14834bde58c89e26d8e6cc081c16f0c42dd35fa9 Mon Sep 17 00:00:00 2001 From: John3 Date: Mon, 6 Jun 2016 08:14:49 -0500 Subject: [PATCH 261/324] Fix for rapid firing setImageTrigger(0,1); issue #1630 --- Engine/source/T3D/aiPlayer.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Engine/source/T3D/aiPlayer.cpp b/Engine/source/T3D/aiPlayer.cpp index 40fcc47097..a13358a4f8 100644 --- a/Engine/source/T3D/aiPlayer.cpp +++ b/Engine/source/T3D/aiPlayer.cpp @@ -582,7 +582,10 @@ bool AIPlayer::getAIMove(Move *movePtr) // Replicate the trigger state into the move so that // triggers can be controlled from scripts. for( U32 i = 0; i < MaxTriggerKeys; i++ ) + { movePtr->trigger[ i ] = mMoveTriggers[ i ]; + movePtr->trigger[ i ] = getImageTriggerState( i ); + } #ifdef TORQUE_NAVIGATION_ENABLED if(mJump == Now) From 6419ba1e33d83550cff7e26ede45d99af35a2d14 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 6 Jun 2016 09:42:00 -0500 Subject: [PATCH 262/324] localization augmentations via rlranft RE: http://forums.torque3d.org/viewtopic.php?f=12&t=642&hilit=localization --- Engine/source/i18n/lang.cpp | 135 +++++++++++++++++++++++++++++++----- Engine/source/i18n/lang.h | 4 ++ 2 files changed, 121 insertions(+), 18 deletions(-) diff --git a/Engine/source/i18n/lang.cpp b/Engine/source/i18n/lang.cpp index 8d534a9160..24f2e2d59d 100644 --- a/Engine/source/i18n/lang.cpp +++ b/Engine/source/i18n/lang.cpp @@ -86,15 +86,16 @@ bool LangFile::load(const UTF8 *filename) bool LangFile::load(Stream *s) { - freeTable(); - - while(s->getStatus() != Stream::EOS) - { - char buf[256]; - s->readString(buf); - addString((const UTF8*)buf); - } - return true; + freeTable(); + + while (s->getStatus() == Stream::Ok) + { + char buf[2048]; + s->readLongString(2048, buf); + if (s->getStatus() == Stream::Ok) + addString((const UTF8*)buf); + } + return true; } bool LangFile::save(const UTF8 *filename) @@ -115,15 +116,15 @@ bool LangFile::save(const UTF8 *filename) bool LangFile::save(Stream *s) { - if(!isLoaded()) - return false; - - U32 i; - for(i = 0;i < mStringTable.size();i++) - { - s->writeString((char*)mStringTable[i]); - } - return true; + if (!isLoaded()) + return false; + + U32 i; + for (i = 0; i < mStringTable.size(); i++) + { + s->writeLongString(2048, (char*)mStringTable[i]); //irei1as_ lang + } + return true; } const UTF8 * LangFile::getString(U32 id) @@ -477,3 +478,101 @@ const LangTable *getModLangTable(const UTF8 *mod) } return NULL; } + +//lang_ localization +bool compiledFileNeedsUpdate(UTF8* filename) +{ + Torque::Path filePath = Torque::Path(filename); + Torque::FS::FileNodeRef sourceFile = Torque::FS::GetFileNode(filePath); + Torque::Path compiledPath = Torque::Path(filePath); + compiledPath.setExtension("lso"); + Torque::FS::FileNodeRef compiledFile = Torque::FS::GetFileNode(compiledPath); + + Torque::Time sourceModifiedTime, compiledModifiedTime; + + if (sourceFile != NULL) + sourceModifiedTime = sourceFile->getModifiedTime(); + + if (compiledFile != NULL) + compiledModifiedTime = compiledFile->getModifiedTime(); + + if (sourceModifiedTime > compiledModifiedTime) + return true; + return false; +} + +ConsoleFunction(CompileLanguage, void, 2, 3, "(string inputFile, [bool createMap]) Compiles a LSO language file." + " if createIndex is true, will also create languageMap.cs with" + " the global variables for each string index." + " The input file must follow this example layout:" + " TXT_HELLO_WORLD = Hello world in english!") +{ + UTF8 scriptFilenameBuffer[1024]; + Con::expandScriptFilename((char*)scriptFilenameBuffer, sizeof(scriptFilenameBuffer), argv[1]); + + if (!Torque::FS::IsFile(scriptFilenameBuffer)) + { + Con::errorf("CompileLanguage - file %s not found", scriptFilenameBuffer); + return; + } + + FileObject file; + if (!file.readMemory(scriptFilenameBuffer)) + { + Con::errorf("CompileLanguage - couldn't read file %s", scriptFilenameBuffer); + return; + } + + if (compiledFileNeedsUpdate(scriptFilenameBuffer)) + { + bool createMap = argc > 2 ? dAtob(argv[2]) : false; + FileStream *mapStream = NULL; + if (createMap) + { + Torque::Path mapPath = scriptFilenameBuffer; + mapPath.setFileName("languageMap"); + mapPath.setExtension("cs"); + if ((mapStream = FileStream::createAndOpen(mapPath, Torque::FS::File::Write)) == NULL) + Con::errorf("CompileLanguage - failed creating languageMap.cs"); + } + + LangFile langFile; + const U8* inLine = NULL; + const char* separatorStr = " = "; + S32 stringId = 0; + while ((inLine = file.readLine())[0] != 0) + { + char* line; + chompUTF8BOM((const char *)inLine, &line); + char* div = dStrstr(line, separatorStr); + if (div == NULL) + { + Con::errorf("Separator %s not found in line: %s", separatorStr, line); + Con::errorf("Could not determine string name ID"); + continue; + } + *div = 0; + char* text = div + dStrlen(separatorStr); + + langFile.addString((const UTF8*)text); + + if (mapStream) + { + String mapLine = String::ToString("$%s = %i;", line, stringId); + mapStream->writeLine((const U8*)mapLine.c_str()); + String commentLine = String::ToString("// %s", text); + mapStream->writeLine((const U8*)commentLine.c_str()); + } + + stringId++; + } + + Torque::Path lsoPath = scriptFilenameBuffer; + lsoPath.setExtension("lso"); + langFile.save(lsoPath.getFullPath()); + + if (mapStream) + delete mapStream; + } +} +//end lang_ localization \ No newline at end of file diff --git a/Engine/source/i18n/lang.h b/Engine/source/i18n/lang.h index edd031930e..8bf2d97973 100644 --- a/Engine/source/i18n/lang.h +++ b/Engine/source/i18n/lang.h @@ -27,6 +27,10 @@ #include "console/simBase.h" #include "core/util/tVector.h" +//lang_ localization +#include "core/fileObject.h" +#include "core/util/str.h" +#include "core/strings/unicode.h" #ifndef _LANG_H_ #define _LANG_H_ From a525b3bd096890c63fd66410b211791c6ec893c6 Mon Sep 17 00:00:00 2001 From: Davide Gessa Date: Mon, 6 Jun 2016 20:17:29 +0200 Subject: [PATCH 263/324] Remove assertion and handle error cases Fix #1633 --- Engine/lib/nativeFileDialogs/nfd_gtk.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Engine/lib/nativeFileDialogs/nfd_gtk.c b/Engine/lib/nativeFileDialogs/nfd_gtk.c index 2d7b9b5f6e..32f6a8d441 100644 --- a/Engine/lib/nativeFileDialogs/nfd_gtk.c +++ b/Engine/lib/nativeFileDialogs/nfd_gtk.c @@ -47,10 +47,13 @@ static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList ) if ( NFDi_IsFilterSegmentChar(*p_filterList) ) { char typebufWildcard[NFD_MAX_STRLEN]; - /* add another type to the filter */ - assert( strlen(typebuf) > 0 ); - assert( strlen(typebuf) < NFD_MAX_STRLEN-1 ); + /* add another type to the filter */ + if (strlen(typebuf) <= 0 || strlen(typebuf) > NFD_MAX_STRLEN-1) { + p_filterList++; + continue; + } + snprintf( typebufWildcard, NFD_MAX_STRLEN, "*.%s", typebuf ); AddTypeToFilterName( typebuf, filterName, NFD_MAX_STRLEN ); From d111484f895019ee78d1e2427a57a45b39d3aae7 Mon Sep 17 00:00:00 2001 From: Davide Gessa Date: Mon, 6 Jun 2016 20:19:33 +0200 Subject: [PATCH 264/324] Fix coding style --- Engine/lib/nativeFileDialogs/nfd_gtk.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Engine/lib/nativeFileDialogs/nfd_gtk.c b/Engine/lib/nativeFileDialogs/nfd_gtk.c index 32f6a8d441..fd15a86dd4 100644 --- a/Engine/lib/nativeFileDialogs/nfd_gtk.c +++ b/Engine/lib/nativeFileDialogs/nfd_gtk.c @@ -49,7 +49,8 @@ static void AddFiltersToDialog( GtkWidget *dialog, const char *filterList ) char typebufWildcard[NFD_MAX_STRLEN]; /* add another type to the filter */ - if (strlen(typebuf) <= 0 || strlen(typebuf) > NFD_MAX_STRLEN-1) { + if (strlen(typebuf) <= 0 || strlen(typebuf) > NFD_MAX_STRLEN-1) + { p_filterList++; continue; } From 0ec9438429ea745f8e72397c714496bc97cd6de8 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 6 Jun 2016 21:20:00 -0500 Subject: [PATCH 265/324] The default configuration is for the asset database to automatically unload an asset when it's no longer referenced. This causes problems when we would delete objects and then go to make more instances that reference the same asset while the same mission is going. So autounload is disabled to prevent excessive unloading of assets before the level is concluded. --- Engine/source/T3D/assets/ShapeAsset.cpp | 6 ++++-- Engine/source/T3D/assets/ShapeAsset.h | 2 +- Engine/source/T3D/components/render/meshComponent.cpp | 3 ++- Engine/source/assets/assetManager.cpp | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Engine/source/T3D/assets/ShapeAsset.cpp b/Engine/source/T3D/assets/ShapeAsset.cpp index 9b2aec3de7..ea4882add3 100644 --- a/Engine/source/T3D/assets/ShapeAsset.cpp +++ b/Engine/source/T3D/assets/ShapeAsset.cpp @@ -100,8 +100,6 @@ mAcquireReferenceCount(0), mpOwningAssetManager(NULL), mAssetInitialized(false) { - // Generate an asset definition. - mpAssetDefinition = new AssetDefinition(); } //----------------------------------------------------------------------------- @@ -154,4 +152,8 @@ void ShapeAsset::copyTo(SimObject* object) { // Call to parent. Parent::copyTo(object); +} + +void ShapeAsset::onAssetRefresh(void) +{ } \ No newline at end of file diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h index 6766d1682f..d727d0a1cd 100644 --- a/Engine/source/T3D/assets/ShapeAsset.h +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -79,7 +79,7 @@ class ShapeAsset : public AssetBase Resource getShapeResource() { return mShape; } protected: - virtual void onAssetRefresh(void) {} + virtual void onAssetRefresh(void); }; DefineConsoleType(TypeShapeAssetPtr, ShapeAsset) diff --git a/Engine/source/T3D/components/render/meshComponent.cpp b/Engine/source/T3D/components/render/meshComponent.cpp index 6f48356667..708a48ae17 100644 --- a/Engine/source/T3D/components/render/meshComponent.cpp +++ b/Engine/source/T3D/components/render/meshComponent.cpp @@ -167,7 +167,8 @@ bool MeshComponent::setMeshAsset(const char* assetName) { // Fetch the asset Id. mMeshAssetId = StringTable->insert(assetName); - mMeshAsset.setAssetId(mMeshAssetId); + + mMeshAsset = mMeshAssetId; if (mMeshAsset.isNull()) { diff --git a/Engine/source/assets/assetManager.cpp b/Engine/source/assets/assetManager.cpp index bfd21c6996..66df77d11d 100644 --- a/Engine/source/assets/assetManager.cpp +++ b/Engine/source/assets/assetManager.cpp @@ -76,7 +76,7 @@ AssetManager::AssetManager() : mMaxLoadedPrivateAssetsCount( 0 ), mAcquiredReferenceCount( 0 ), mEchoInfo( false ), - mIgnoreAutoUnload( false ) + mIgnoreAutoUnload( true ) { } From 6c73968bdc6793d80f391d65870dd88e577f1fb0 Mon Sep 17 00:00:00 2001 From: John3 Date: Tue, 7 Jun 2016 19:05:10 -0500 Subject: [PATCH 266/324] fix redundant movePtr->trigger[ i ] --- Engine/source/T3D/aiPlayer.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/Engine/source/T3D/aiPlayer.cpp b/Engine/source/T3D/aiPlayer.cpp index a13358a4f8..8bc040ceb2 100644 --- a/Engine/source/T3D/aiPlayer.cpp +++ b/Engine/source/T3D/aiPlayer.cpp @@ -582,10 +582,7 @@ bool AIPlayer::getAIMove(Move *movePtr) // Replicate the trigger state into the move so that // triggers can be controlled from scripts. for( U32 i = 0; i < MaxTriggerKeys; i++ ) - { - movePtr->trigger[ i ] = mMoveTriggers[ i ]; movePtr->trigger[ i ] = getImageTriggerState( i ); - } #ifdef TORQUE_NAVIGATION_ENABLED if(mJump == Now) From fc110706a3263421e8c6c80856b4ad07b11228fa Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 8 Jun 2016 15:28:40 -0500 Subject: [PATCH 267/324] corrects safety check for Stream::readLongString --- Engine/source/core/stream/stream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/core/stream/stream.cpp b/Engine/source/core/stream/stream.cpp index 8a7fb2b40a..50f99ae636 100644 --- a/Engine/source/core/stream/stream.cpp +++ b/Engine/source/core/stream/stream.cpp @@ -155,7 +155,7 @@ void Stream::readLongString(U32 maxStringLen, char *stringBuf) { U32 len; read(&len); - if(len > maxStringLen) + if(len >= maxStringLen) { m_streamStatus = IOError; return; From b6ec969fb3b6700b84561a3dbcc360f38e532f7b Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 8 Jun 2016 19:15:10 -0500 Subject: [PATCH 268/324] worst case scenario fallback for if we can't track down why vector lighting seems determined to shift positions periodically based upon some influence by the dynamicrefreshfrequency rate --- Engine/source/lighting/shadowMap/lightShadowMap.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Engine/source/lighting/shadowMap/lightShadowMap.cpp b/Engine/source/lighting/shadowMap/lightShadowMap.cpp index 984f6cbc6f..8be673ec25 100644 --- a/Engine/source/lighting/shadowMap/lightShadowMap.cpp +++ b/Engine/source/lighting/shadowMap/lightShadowMap.cpp @@ -313,9 +313,11 @@ void LightShadowMap::render( RenderPassManager* renderPass, return; mStaticRefreshTimer->reset(); + /* TODO: find out why this is causing issue with translucent objects if (_dynamic && (mDynamicRefreshTimer->getElapsedMs() < getLightInfo()->getDynamicRefreshFreq())) return; mDynamicRefreshTimer->reset(); + */ mDebugTarget.setTexture( NULL ); _render( renderPass, diffuseState ); From ddfa4eaf1831768a7aa3a3ea8abdcbdcdca2928e Mon Sep 17 00:00:00 2001 From: rextimmy Date: Thu, 9 Jun 2016 15:23:54 +1000 Subject: [PATCH 269/324] DX11 accumulation shadergen fix. --- Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp index 6010c82831..ca0a7b40e3 100644 --- a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp @@ -65,7 +65,11 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, // accu map Var *accuMap = new Var; - accuMap->setType( "sampler2D" ); + if (mIsDirect3D11) + accuMap->setType("SamplerState"); + else + accuMap->setType("sampler2D"); + accuMap->setName( "accuMap" ); accuMap->uniform = true; accuMap->sampler = true; From 92017332eb28c346caa61c9ca41c9454d914ee31 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Thu, 9 Jun 2016 16:23:53 +1000 Subject: [PATCH 270/324] Fixed AccuTexFeatHLSL implicit truncation error --- Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp index ca0a7b40e3..ca1ee27027 100644 --- a/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/accuFeatureHLSL.cpp @@ -170,7 +170,7 @@ void AccuTexFeatHLSL::processPix( Vector &componentList, meta->addStatement( new GenOp( " @.z *= @*2.0;\r\n", accuVec, accuDirection ) ); // saturate based on strength - meta->addStatement( new GenOp( " @ = saturate( dot( @, @.xyz * pow(@, 5) ) );\r\n", plcAccu, bumpNorm, accuVec, accuStrength ) ); + meta->addStatement( new GenOp( " @ = saturate( dot( @.xyz, @.xyz * pow(@, 5) ) );\r\n", plcAccu, bumpNorm, accuVec, accuStrength ) ); // add coverage meta->addStatement( new GenOp( " @.a += (2 * pow(@/2, 5)) - 0.5;\r\n", accuPlc, accuCoverage ) ); From b4dfb9ad08534fed0cbd69c06a1db201da1c2199 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 9 Jun 2016 13:23:37 -0500 Subject: [PATCH 271/324] corrects https://github.com/GarageGames/Torque3D/issues/1273 with suggested resolution --- .../shapeEditor/scripts/shapeEditor.ed.cs | 25 ++++++++++++------- .../shapeEditor/scripts/shapeEditor.ed.cs | 25 ++++++++++++------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index 391e0b2170..d799237763 100644 --- a/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Empty/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -2206,15 +2206,22 @@ function strcapitalise( %str ) function ShapeEdSequences::onAddTrigger( %this ) { - // Can only add triggers if a sequence is selected - %seqName = ShapeEdSequenceList.getSelectedName(); - if ( %seqName !$= "" ) - { - // Add a new trigger at the current frame - %frame = mRound( ShapeEdSeqSlider.getValue() ); - %state = ShapeEdTriggerList.rowCount() % 30; - ShapeEditor.doAddTrigger( %seqName, %frame, %state ); - } + // Can only add triggers if a sequence is selected + %seqName = ShapeEdSequenceList.getSelectedName(); + if ( %seqName !$= "" ) + { + // Add a new trigger at the current frame + %frame = mRound( ShapeEdSeqSlider.getValue() ) - %this-->startFrame.getText(); + if ((%frame < 0) || (%frame > %this-->endFrame.getText() - %this-->startFrame.getText())) + { + MessageBoxOK( "Error", "Trigger out of range of the selected animation." ); + } + else + { + %state = ShapeEdTriggerList.rowCount() % 30; + ShapeEditor.doAddTrigger( %seqName, %frame, %state ); + } + } } function ShapeEdTriggerList::onDeleteSelection( %this ) diff --git a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs index 391e0b2170..d799237763 100644 --- a/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs +++ b/Templates/Full/game/tools/shapeEditor/scripts/shapeEditor.ed.cs @@ -2206,15 +2206,22 @@ function strcapitalise( %str ) function ShapeEdSequences::onAddTrigger( %this ) { - // Can only add triggers if a sequence is selected - %seqName = ShapeEdSequenceList.getSelectedName(); - if ( %seqName !$= "" ) - { - // Add a new trigger at the current frame - %frame = mRound( ShapeEdSeqSlider.getValue() ); - %state = ShapeEdTriggerList.rowCount() % 30; - ShapeEditor.doAddTrigger( %seqName, %frame, %state ); - } + // Can only add triggers if a sequence is selected + %seqName = ShapeEdSequenceList.getSelectedName(); + if ( %seqName !$= "" ) + { + // Add a new trigger at the current frame + %frame = mRound( ShapeEdSeqSlider.getValue() ) - %this-->startFrame.getText(); + if ((%frame < 0) || (%frame > %this-->endFrame.getText() - %this-->startFrame.getText())) + { + MessageBoxOK( "Error", "Trigger out of range of the selected animation." ); + } + else + { + %state = ShapeEdTriggerList.rowCount() % 30; + ShapeEditor.doAddTrigger( %seqName, %frame, %state ); + } + } } function ShapeEdTriggerList::onDeleteSelection( %this ) From afcb731d18095cdcd229eb773162e5880a691362 Mon Sep 17 00:00:00 2001 From: Daniel Brall Date: Fri, 10 Jun 2016 10:34:00 +0200 Subject: [PATCH 272/324] Fixed compile errors on linux (obvious programming faults). --- Engine/lib/collada/src/dae/daeMetaGroup.cpp | 2 +- Engine/lib/convexDecomp/NvHashMap.h | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/Engine/lib/collada/src/dae/daeMetaGroup.cpp b/Engine/lib/collada/src/dae/daeMetaGroup.cpp index 0beb671518..f517034616 100644 --- a/Engine/lib/collada/src/dae/daeMetaGroup.cpp +++ b/Engine/lib/collada/src/dae/daeMetaGroup.cpp @@ -31,7 +31,7 @@ daeElement *daeMetaGroup::placeElement( daeElement *parent, daeElement *child, d (void)offset; daeString nm = child->getElementName(); if ( findChild( nm ) == NULL ) { - return false; + return NULL; } daeElementRef el; diff --git a/Engine/lib/convexDecomp/NvHashMap.h b/Engine/lib/convexDecomp/NvHashMap.h index 3d57da0dfa..c8dfd78778 100644 --- a/Engine/lib/convexDecomp/NvHashMap.h +++ b/Engine/lib/convexDecomp/NvHashMap.h @@ -692,9 +692,6 @@ namespace CONVEX_DECOMPOSITION mCapacity = t.mCapacity; copy(mData,t.mData,t.mSize); - mSize = t.mSize; - - return; } else { @@ -1521,7 +1518,7 @@ namespace CONVEX_DECOMPOSITION NX_INLINE const Entry *find(const Key &k) const { if(!mHash.size()) - return false; + return NULL; NxU32 h = hash(k); NxU32 index = mHash[h]; From 3cfc6f787cc2985703d925917a0b986de80e5f4d Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 11 Jun 2016 02:06:24 -0500 Subject: [PATCH 273/324] Adds some pointer cleanup in the event we bail out of creating a new object for whatever reason. --- Engine/source/console/compiledEval.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index a989826b43..88556cb468 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -902,6 +902,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi // Fail to create the object. delete object; + currentNewObject = NULL; ip = failJump; break; } @@ -1016,6 +1017,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi Con::errorf(ConsoleLogEntry::General, "%s: preload failed for %s: %s.", getFileLine(ip), currentNewObject->getName(), errorStr.c_str()); dataBlock->deleteObject(); + currentNewObject = NULL; ip = failJump; // Prevent stack value corruption From 060649dbadb39231e09fde85a25ecd6fb83ebfe3 Mon Sep 17 00:00:00 2001 From: John3 Date: Sun, 12 Jun 2016 14:34:26 -0500 Subject: [PATCH 274/324] typo "tomove" to "to move" --- Engine/source/T3D/aiPlayer.cpp | 2 +- Engine/source/navigation/navPath.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/aiPlayer.cpp b/Engine/source/T3D/aiPlayer.cpp index 40fcc47097..4c62075a7d 100644 --- a/Engine/source/T3D/aiPlayer.cpp +++ b/Engine/source/T3D/aiPlayer.cpp @@ -160,7 +160,7 @@ void AIPlayer::initPersistFields() addField("allowDrop", TypeBool, Offset(mLinkTypes.drop, AIPlayer), "Allow the character to use drop links."); addField("allowSwim", TypeBool, Offset(mLinkTypes.swim, AIPlayer), - "Allow the character tomove in water."); + "Allow the character to move in water."); addField("allowLedge", TypeBool, Offset(mLinkTypes.ledge, AIPlayer), "Allow the character to jump ledges."); addField("allowClimb", TypeBool, Offset(mLinkTypes.climb, AIPlayer), diff --git a/Engine/source/navigation/navPath.cpp b/Engine/source/navigation/navPath.cpp index 72ce494c7b..a945e7f8d2 100644 --- a/Engine/source/navigation/navPath.cpp +++ b/Engine/source/navigation/navPath.cpp @@ -224,7 +224,7 @@ void NavPath::initPersistFields() addField("allowDrop", TypeBool, Offset(mLinkTypes.drop, NavPath), "Allow the path to use drop links."); addField("allowSwim", TypeBool, Offset(mLinkTypes.swim, NavPath), - "Allow the path tomove in water."); + "Allow the path to move in water."); addField("allowLedge", TypeBool, Offset(mLinkTypes.ledge, NavPath), "Allow the path to jump ledges."); addField("allowClimb", TypeBool, Offset(mLinkTypes.climb, NavPath), From 66194245fff357368c39ab79b31887fa29ff73cb Mon Sep 17 00:00:00 2001 From: John3 Date: Wed, 15 Jun 2016 23:00:13 -0500 Subject: [PATCH 275/324] clean up energyPerDamagePoint --- Engine/source/T3D/staticShape.h | 1 - Templates/Full/game/art/datablocks/player.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/Engine/source/T3D/staticShape.h b/Engine/source/T3D/staticShape.h index 6dd9d0432c..caf8402d6e 100644 --- a/Engine/source/T3D/staticShape.h +++ b/Engine/source/T3D/staticShape.h @@ -38,7 +38,6 @@ struct StaticShapeData: public ShapeBaseData { bool noIndividualDamage; S32 dynamicTypeField; bool isShielded; - F32 energyPerDamagePoint; // DECLARE_CONOBJECT(StaticShapeData); diff --git a/Templates/Full/game/art/datablocks/player.cs b/Templates/Full/game/art/datablocks/player.cs index e920b3ccee..14253e857b 100644 --- a/Templates/Full/game/art/datablocks/player.cs +++ b/Templates/Full/game/art/datablocks/player.cs @@ -517,7 +517,6 @@ datablock PlayerData(DefaultPlayerData) maxDamage = 100; maxEnergy = 60; repairRate = 0.33; - energyPerDamagePoint = 75; rechargeRate = 0.256; From 072e7ad5636d585fbd29eea50d20c955e005fefe Mon Sep 17 00:00:00 2001 From: John3 Date: Wed, 15 Jun 2016 23:02:42 -0500 Subject: [PATCH 276/324] clean up observeParameters --- Templates/Full/game/art/datablocks/player.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Templates/Full/game/art/datablocks/player.cs b/Templates/Full/game/art/datablocks/player.cs index 14253e857b..280b37d4cd 100644 --- a/Templates/Full/game/art/datablocks/player.cs +++ b/Templates/Full/game/art/datablocks/player.cs @@ -649,7 +649,6 @@ datablock PlayerData(DefaultPlayerData) //exitingWater = ExitingWaterLightSound; - observeParameters = "0.5 4.5 4.5"; cameraMinDist = "0"; DecalData = "PlayerFootprint"; From c7917e566c4108fbf7ce69fe7a871bd2640cac91 Mon Sep 17 00:00:00 2001 From: John3 Date: Wed, 15 Jun 2016 23:17:00 -0500 Subject: [PATCH 277/324] cleanup observeParameters --- Templates/Full/game/art/datablocks/player.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Templates/Full/game/art/datablocks/player.cs b/Templates/Full/game/art/datablocks/player.cs index 280b37d4cd..a3d2e62a16 100644 --- a/Templates/Full/game/art/datablocks/player.cs +++ b/Templates/Full/game/art/datablocks/player.cs @@ -494,7 +494,6 @@ datablock PlayerData(DefaultPlayerData) imageAnimPrefixFP = "soldier"; shapeNameFP[0] = "art/shapes/actors/Soldier/FP/FP_SoldierArms.DAE"; - canObserve = 1; cmdCategory = "Clients"; cameraDefaultFov = 55.0; From dfb8f4f5e52f63519156c55e49a43fa2d82d5023 Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 17 Jun 2016 00:47:46 -0500 Subject: [PATCH 278/324] Makes point and spot lights be correctly culled with zoning like other objects. --- Engine/source/T3D/lightBase.cpp | 2 +- Engine/source/T3D/objectTypes.h | 3 ++- Engine/source/lighting/lightManager.cpp | 9 +++++++++ Engine/source/scene/sceneManager.cpp | 7 +++++++ Engine/source/scene/sceneManager.h | 4 ++++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Engine/source/T3D/lightBase.cpp b/Engine/source/T3D/lightBase.cpp index 028171f2ac..5c0ca1f876 100644 --- a/Engine/source/T3D/lightBase.cpp +++ b/Engine/source/T3D/lightBase.cpp @@ -68,7 +68,7 @@ LightBase::LightBase() mFlareScale( 1.0f ) { mNetFlags.set( Ghostable | ScopeAlways ); - mTypeMask = EnvironmentObjectType | LightObjectType; + mTypeMask = LightObjectType; mLight = LightManager::createLightInfo(); diff --git a/Engine/source/T3D/objectTypes.h b/Engine/source/T3D/objectTypes.h index 5f32667080..a67ea46287 100644 --- a/Engine/source/T3D/objectTypes.h +++ b/Engine/source/T3D/objectTypes.h @@ -177,7 +177,8 @@ enum SceneObjectTypeMasks StaticShapeObjectType | DynamicShapeObjectType | EntityObjectType | - ZoneObjectType ), // This improves the result of zone traversals. + ZoneObjectType | + LightObjectType ), // This improves the result of zone traversals. /// Mask for objects that should be specifically excluded from zone culling. CULLING_EXCLUDE_TYPEMASK = ( TerrainObjectType | diff --git a/Engine/source/lighting/lightManager.cpp b/Engine/source/lighting/lightManager.cpp index 2e2c4ff2ef..f53f5284d6 100644 --- a/Engine/source/lighting/lightManager.cpp +++ b/Engine/source/lighting/lightManager.cpp @@ -227,6 +227,15 @@ void LightManager::registerGlobalLights( const Frustum *frustum, bool staticLigh // Cull the lights using the frustum. getSceneManager()->getContainer()->findObjectList( *frustum, lightMask, &activeLights ); + for (U32 i = 0; i < activeLights.size(); ++i) + { + if (!getSceneManager()->mRenderedObjectsList.contains(activeLights[i])) + { + activeLights.erase(i); + --i; + } + } + // Store the culling position for sun placement // later... see setSpecialLight. mCullPos = frustum->getPosition(); diff --git a/Engine/source/scene/sceneManager.cpp b/Engine/source/scene/sceneManager.cpp index 0bb85784b9..b68de9defe 100644 --- a/Engine/source/scene/sceneManager.cpp +++ b/Engine/source/scene/sceneManager.cpp @@ -451,6 +451,13 @@ void SceneManager::_renderScene( SceneRenderState* state, U32 objectMask, SceneZ PROFILE_END(); + //store our rendered objects into a list we can easily look up against later if required + mRenderedObjectsList.clear(); + for (U32 i = 0; i < numRenderObjects; ++i) + { + mRenderedObjectsList.push_back(mBatchQueryList[i]); + } + // Render the remaining objects. PROFILE_START( Scene_renderObjects ); diff --git a/Engine/source/scene/sceneManager.h b/Engine/source/scene/sceneManager.h index 6347459130..3e7e65b61b 100644 --- a/Engine/source/scene/sceneManager.h +++ b/Engine/source/scene/sceneManager.h @@ -117,6 +117,10 @@ class SceneManager /// If true, render the AABBs of objects for debugging. static bool smRenderBoundingBoxes; + //A cache list of objects that made it through culling, so we don't have to attempt to re-test + //visibility of objects later. + Vector< SceneObject* > mRenderedObjectsList; + protected: /// Whether this is the client-side scene. From 8250e4728d7ed371a91aec948d04fecec3ed838a Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 9 Jun 2014 14:58:45 -0400 Subject: [PATCH 279/324] Mount Process Order Fix 1 Added a controlling object check to GameBase::onMount() so mounted objects will process after objects controlling them. --- Engine/source/T3D/gameBase/gameBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/T3D/gameBase/gameBase.cpp b/Engine/source/T3D/gameBase/gameBase.cpp index baede5c499..7cc745c11c 100644 --- a/Engine/source/T3D/gameBase/gameBase.cpp +++ b/Engine/source/T3D/gameBase/gameBase.cpp @@ -590,7 +590,7 @@ void GameBase::onMount( SceneObject *obj, S32 node ) // Are we mounting to a GameBase object? GameBase *gbaseObj = dynamic_cast( obj ); - if ( gbaseObj && gbaseObj->getControlObject() != this ) + if ( gbaseObj && gbaseObj->getControlObject() != this && gbaseObj->getControllingObject() != this) processAfter( gbaseObj ); if (!isGhost()) { From 172e62a8f115b347b861ee27db18290662919c3d Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 9 Jun 2014 14:59:36 -0400 Subject: [PATCH 280/324] Mount Process Order Fix 2 Added a check to SceneObject::setProcessTick() to prevent objects that have mounts from being removed from the process list so the processAfter chain of the mounted objects is not broken. --- Engine/source/scene/sceneObject.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Engine/source/scene/sceneObject.cpp b/Engine/source/scene/sceneObject.cpp index 1d16377af3..6bd7966079 100644 --- a/Engine/source/scene/sceneObject.cpp +++ b/Engine/source/scene/sceneObject.cpp @@ -945,7 +945,8 @@ void SceneObject::setProcessTick( bool t ) if ( mProcessTick ) { - plUnlink(); + if ( !getMountedObjectCount() ) + plUnlink(); // Only unlink if there is nothing mounted to us mProcessTick = false; } else From b5a957dfdc433aa795bc3337fd78c64d62d82389 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:46:25 -0400 Subject: [PATCH 281/324] ShapeBase Mounting Added mount transforms to ShapeBase --- Engine/source/T3D/shapeBase.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Engine/source/T3D/shapeBase.cpp b/Engine/source/T3D/shapeBase.cpp index 6f40cc134d..4bca5f23bf 100644 --- a/Engine/source/T3D/shapeBase.cpp +++ b/Engine/source/T3D/shapeBase.cpp @@ -1324,6 +1324,12 @@ void ShapeBase::processTick(const Move* move) if (mWhiteOut <= 0.0) mWhiteOut = 0.0; } + + if (isMounted()) { + MatrixF mat; + mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); + Parent::setTransform(mat); + } } void ShapeBase::advanceTime(F32 dt) @@ -1382,6 +1388,12 @@ void ShapeBase::advanceTime(F32 dt) mFadeVal = 1 - mFadeVal; } } + + if (isMounted()) { + MatrixF mat; + mMount.object->getRenderMountTransform( 0.0f, mMount.node, mMount.xfm, &mat ); + Parent::setRenderTransform(mat); + } } void ShapeBase::setControllingClient( GameConnection* client ) From c39ca2c25ebf80538d3621f07f224b56e7b8cf35 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:47:42 -0400 Subject: [PATCH 282/324] StaticShape Mounting --- Engine/source/T3D/staticShape.cpp | 16 ---------------- Engine/source/T3D/staticShape.h | 1 - 2 files changed, 17 deletions(-) diff --git a/Engine/source/T3D/staticShape.cpp b/Engine/source/T3D/staticShape.cpp index 0f882824a8..ffad91dd33 100644 --- a/Engine/source/T3D/staticShape.cpp +++ b/Engine/source/T3D/staticShape.cpp @@ -232,22 +232,6 @@ void StaticShape::processTick(const Move* move) setImageTriggerState(0,move->trigger[0]); setImageTriggerState(1,move->trigger[1]); } - - if (isMounted()) { - MatrixF mat; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); - Parent::setTransform(mat); - Parent::setRenderTransform(mat); - } -} - -void StaticShape::interpolateTick(F32 delta) -{ - if (isMounted()) { - MatrixF mat; - mMount.object->getRenderMountTransform( delta, mMount.node, mMount.xfm, &mat ); - Parent::setRenderTransform(mat); - } } void StaticShape::setTransform(const MatrixF& mat) diff --git a/Engine/source/T3D/staticShape.h b/Engine/source/T3D/staticShape.h index 6dd9d0432c..c6802a36fa 100644 --- a/Engine/source/T3D/staticShape.h +++ b/Engine/source/T3D/staticShape.h @@ -76,7 +76,6 @@ class StaticShape: public ShapeBase bool onNewDataBlock(GameBaseData *dptr, bool reload); void processTick(const Move *move); - void interpolateTick(F32 delta); void setTransform(const MatrixF &mat); U32 packUpdate (NetConnection *conn, U32 mask, BitStream *stream); From cd3b080526da6a24718db2f099f76bd6cb9857a4 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:48:47 -0400 Subject: [PATCH 283/324] Item Mounting --- Engine/source/T3D/item.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Engine/source/T3D/item.cpp b/Engine/source/T3D/item.cpp index c946ffa00b..8970e3e3cc 100644 --- a/Engine/source/T3D/item.cpp +++ b/Engine/source/T3D/item.cpp @@ -556,6 +556,9 @@ void Item::processTick(const Move* move) { Parent::processTick(move); + if ( isMounted() ) + return; + // if (mCollisionObject && !--mCollisionTimeout) mCollisionObject = 0; @@ -606,6 +609,8 @@ void Item::processTick(const Move* move) void Item::interpolateTick(F32 dt) { Parent::interpolateTick(dt); + if ( isMounted() ) + return; // Client side interpolation Point3F pos = delta.pos + delta.posVec * dt; @@ -1365,6 +1370,8 @@ void Item::buildConvex(const Box3F& box, Convex* convex) void Item::advanceTime(F32 dt) { Parent::advanceTime(dt); + if ( isMounted() ) + return; if( mRotate ) { From 3afd5461c6fa9ea8bd0c773a00a8c9260241077b Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:49:56 -0400 Subject: [PATCH 284/324] Camera Mounting --- Engine/source/T3D/camera.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Engine/source/T3D/camera.cpp b/Engine/source/T3D/camera.cpp index 027bd308fb..59002d9bf9 100644 --- a/Engine/source/T3D/camera.cpp +++ b/Engine/source/T3D/camera.cpp @@ -495,13 +495,6 @@ void Camera::processTick(const Move* move) if ( isMounted() ) { - // Fetch Mount Transform. - MatrixF mat; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); - - // Apply. - setTransform( mat ); - // Update SceneContainer. updateContainer(); return; @@ -868,16 +861,7 @@ void Camera::interpolateTick(F32 dt) Parent::interpolateTick(dt); if ( isMounted() ) - { - // Fetch Mount Transform. - MatrixF mat; - mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &mat ); - - // Apply. - setRenderTransform( mat ); - return; - } Point3F rot = mDelta.rot + mDelta.rotVec * dt; From a285b7b07b3398a69748a5b0e5be17f10d740a2a Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:53:10 -0400 Subject: [PATCH 285/324] SpawnSphere Mounting --- Engine/source/T3D/missionMarker.cpp | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/Engine/source/T3D/missionMarker.cpp b/Engine/source/T3D/missionMarker.cpp index 151cd73366..3a043b0951 100644 --- a/Engine/source/T3D/missionMarker.cpp +++ b/Engine/source/T3D/missionMarker.cpp @@ -442,22 +442,12 @@ void SpawnSphere::unpackUpdate(NetConnection * con, BitStream * stream) void SpawnSphere::processTick( const Move *move ) { - if ( isServerObject() && isMounted() ) - { - MatrixF mat( true ); - mMount.object->getRenderMountTransform( 0.f, mMount.node, mMount.xfm, &mat ); - setTransform( mat ); - } + Parent::processTick( move ); } void SpawnSphere::advanceTime( F32 timeDelta ) { - if ( isMounted() ) - { - MatrixF mat( true ); - mMount.object->getRenderMountTransform( 0.f, mMount.node, mMount.xfm, &mat ); - setTransform( mat ); - } + Parent::advanceTime( timeDelta ); } void SpawnSphere::initPersistFields() From 037ee82982c1f2c8b2a1d0bd873deb11b54bb4b0 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:55:58 -0400 Subject: [PATCH 286/324] Player Mounting Removes the z axis rotation for consistency with other mounted object types. --- Engine/source/T3D/player.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Engine/source/T3D/player.cpp b/Engine/source/T3D/player.cpp index 5f670abedc..2e365960d1 100644 --- a/Engine/source/T3D/player.cpp +++ b/Engine/source/T3D/player.cpp @@ -5316,10 +5316,10 @@ void Player::setPosition(const Point3F& pos,const Point3F& rot) MatrixF mat; if (isMounted()) { // Use transform from mounted object - MatrixF nmat,zrot; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &nmat ); - zrot.set(EulerF(0.0f, 0.0f, rot.z)); - mat.mul(nmat,zrot); + //MatrixF nmat,zrot; + mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); + //zrot.set(EulerF(0.0f, 0.0f, rot.z)); + //mat.mul(nmat,zrot); } else { mat.set(EulerF(0.0f, 0.0f, rot.z)); @@ -5338,10 +5338,10 @@ void Player::setRenderPosition(const Point3F& pos, const Point3F& rot, F32 dt) MatrixF mat; if (isMounted()) { // Use transform from mounted object - MatrixF nmat,zrot; - mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &nmat ); - zrot.set(EulerF(0.0f, 0.0f, rot.z)); - mat.mul(nmat,zrot); + //MatrixF nmat,zrot; + mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &mat ); + //zrot.set(EulerF(0.0f, 0.0f, rot.z)); + //mat.mul(nmat,zrot); } else { EulerF orient(0.0f, 0.0f, rot.z); From a27fddc29a623d72ca1aec82065b416ceba8a1e1 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:58:40 -0400 Subject: [PATCH 287/324] Turret Mounting --- Engine/source/T3D/turret/turretShape.cpp | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/Engine/source/T3D/turret/turretShape.cpp b/Engine/source/T3D/turret/turretShape.cpp index 13aa42bf16..dea5536996 100644 --- a/Engine/source/T3D/turret/turretShape.cpp +++ b/Engine/source/T3D/turret/turretShape.cpp @@ -632,13 +632,6 @@ void TurretShape::processTick(const Move* move) if (!isGhost()) updateAnimation(TickSec); - if (isMounted()) { - MatrixF mat; - mMount.object->getMountTransform( mMount.node, mMount.xfm, &mat ); - ShapeBase::setTransform(mat); - ShapeBase::setRenderTransform(mat); - } - updateMove(move); } @@ -679,19 +672,11 @@ void TurretShape::advanceTime(F32 dt) } } - // If there is a recoil or image-based thread then - // we also need to update the nodes. - if (mRecoilThread || mImageStateThread) - updateNodes = true; - Parent::advanceTime(dt); updateAnimation(dt); - if (updateNodes) - { - _updateNodes(mRot); - } + _setRotation(mRot); } void TurretShape::setTransform( const MatrixF& mat ) From 937b8830e11594e60a3dd0f3dd65a4e06a0690b3 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 20:59:19 -0400 Subject: [PATCH 288/324] Vehicle Mounting --- Engine/source/T3D/vehicles/vehicle.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Engine/source/T3D/vehicles/vehicle.cpp b/Engine/source/T3D/vehicles/vehicle.cpp index b6516fc3f4..5533099b33 100644 --- a/Engine/source/T3D/vehicles/vehicle.cpp +++ b/Engine/source/T3D/vehicles/vehicle.cpp @@ -859,6 +859,8 @@ void Vehicle::processTick(const Move* move) PROFILE_SCOPE( Vehicle_ProcessTick ); Parent::processTick(move); + if ( isMounted() ) + return; // Warp to catch up to server if (mDelta.warpCount < mDelta.warpTicks) @@ -929,6 +931,8 @@ void Vehicle::interpolateTick(F32 dt) PROFILE_SCOPE( Vehicle_InterpolateTick ); Parent::interpolateTick(dt); + if ( isMounted() ) + return; if(dt == 0.0f) setRenderPosition(mDelta.pos, mDelta.rot[1]); From a9f77c4ffda1a3ddd9f8540ab454b4b681e266b6 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 21:11:15 -0400 Subject: [PATCH 289/324] TSStatic Mounting --- Engine/source/T3D/tsStatic.cpp | 113 +++++++++++++++++++++++---------- Engine/source/T3D/tsStatic.h | 2 + 2 files changed, 83 insertions(+), 32 deletions(-) diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index 78240ce16a..6c401e9529 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -520,10 +520,15 @@ void TSStatic::reSkin() void TSStatic::processTick( const Move *move ) { - AssertFatal( mPlayAmbient && mAmbientThread, "TSSTatic::adanceTime called with nothing to play." ); - - if ( isServerObject() ) + if ( isServerObject() && mPlayAmbient && mAmbientThread ) mShapeInstance->advanceTime( TickSec, mAmbientThread ); + + if ( isMounted() ) + { + MatrixF mat( true ); + mMount.object->getMountTransform(mMount.node, mMount.xfm, &mat ); + setTransform( mat ); + } } void TSStatic::interpolateTick( F32 delta ) @@ -532,14 +537,20 @@ void TSStatic::interpolateTick( F32 delta ) void TSStatic::advanceTime( F32 dt ) { - AssertFatal( mPlayAmbient && mAmbientThread, "TSSTatic::advanceTime called with nothing to play." ); - - mShapeInstance->advanceTime( dt, mAmbientThread ); + if ( mPlayAmbient && mAmbientThread ) + mShapeInstance->advanceTime( dt, mAmbientThread ); + + if ( isMounted() ) + { + MatrixF mat( true ); + mMount.object->getRenderMountTransform( dt, mMount.node, mMount.xfm, &mat ); + setRenderTransform( mat ); + } } void TSStatic::_updateShouldTick() { - bool shouldTick = mPlayAmbient && mAmbientThread; + bool shouldTick = (mPlayAmbient && mAmbientThread) || isMounted(); if ( isTicking() != shouldTick ) setProcessTick( shouldTick ); @@ -708,12 +719,15 @@ void TSStatic::onScaleChanged() else _updatePhysics(); } + + setMaskBits( ScaleMask ); } void TSStatic::setTransform(const MatrixF & mat) { Parent::setTransform(mat); - setMaskBits( TransformMask ); + if ( !isMounted() ) + setMaskBits( TransformMask ); if ( mPhysicsRep ) mPhysicsRep->setTransform( mat ); @@ -734,9 +748,15 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream) { U32 retMask = Parent::packUpdate(con, mask, stream); - mathWrite( *stream, getTransform() ); - mathWrite( *stream, getScale() ); - stream->writeString( mShapeName ); + if ( stream->writeFlag( mask & TransformMask ) ) + mathWrite( *stream, getTransform() ); + + if ( stream->writeFlag( mask & ScaleMask ) ) + { + // Only write one bit if the scale is one. + if ( stream->writeFlag( mObjScale != Point3F::One ) ) + mathWrite( *stream, mObjScale ); + } if ( stream->writeFlag( mask & UpdateCollisionMask ) ) stream->write( (U32)mCollisionType ); @@ -744,17 +764,20 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream) if ( stream->writeFlag( mask & SkinMask ) ) con->packNetStringHandleU( stream, mSkinNameHandle ); - stream->write( (U32)mDecalType ); + if ( stream->writeFlag( mask & AdvancedStaticOptionsMask ) ) + { + stream->writeString( mShapeName ); + stream->write( (U32)mDecalType ); - stream->writeFlag( mAllowPlayerStep ); - stream->writeFlag( mMeshCulling ); - stream->writeFlag( mUseOriginSort ); + stream->writeFlag( mAllowPlayerStep ); + stream->writeFlag( mMeshCulling ); + stream->writeFlag( mUseOriginSort ); - stream->write( mRenderNormalScalar ); + stream->write( mRenderNormalScalar ); - stream->write( mForceDetail ); + stream->write( mForceDetail ); - stream->writeFlag( mPlayAmbient ); + stream->writeFlag( mPlayAmbient ); if ( stream->writeFlag(mUseAlphaFade) ) { @@ -777,14 +800,25 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) { Parent::unpackUpdate(con, stream); - MatrixF mat; - Point3F scale; - mathRead( *stream, &mat ); - mathRead( *stream, &scale ); - setScale( scale); - setTransform(mat); + if ( stream->readFlag() ) // TransformMask + { + MatrixF mat; + mathRead( *stream, &mat ); + setTransform(mat); + setRenderTransform(mat); + } - mShapeName = stream->readSTString(); + if ( stream->readFlag() ) // ScaleMask + { + if ( stream->readFlag() ) + { + VectorF scale; + mathRead( *stream, &scale ); + setScale( scale ); + } + else + setScale( Point3F::One ); + } if ( stream->readFlag() ) // UpdateCollisionMask { @@ -812,17 +846,19 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) } } - stream->read( (U32*)&mDecalType ); + if ( stream->readFlag() ) // AdvancedStaticOptionsMask + { + mShapeName = stream->readSTString(); - mAllowPlayerStep = stream->readFlag(); - mMeshCulling = stream->readFlag(); - mUseOriginSort = stream->readFlag(); + stream->read( (U32*)&mDecalType ); - stream->read( &mRenderNormalScalar ); + mAllowPlayerStep = stream->readFlag(); + mMeshCulling = stream->readFlag(); + mUseOriginSort = stream->readFlag(); - stream->read( &mForceDetail ); + stream->read( &mRenderNormalScalar ); - mPlayAmbient = stream->readFlag(); + stream->read( &mForceDetail ); mUseAlphaFade = stream->readFlag(); if (mUseAlphaFade) @@ -1160,6 +1196,19 @@ void TSStaticPolysoupConvex::getFeatures(const MatrixF& mat,const VectorF& n, Co // All done! } +void TSStatic::onMount( SceneObject *obj, S32 node ) +{ + Parent::onMount(obj, node); + _updateShouldTick(); +} + +void TSStatic::onUnmount( SceneObject *obj, S32 node ) +{ + Parent::onUnmount( obj, node ); + setMaskBits( TransformMask ); + _updateShouldTick(); +} + //------------------------------------------------------------------------ //These functions are duplicated in tsStatic and shapeBase. //They each function a little differently; but achieve the same purpose of gathering diff --git a/Engine/source/T3D/tsStatic.h b/Engine/source/T3D/tsStatic.h index 5bf4b53534..57a7fc695b 100644 --- a/Engine/source/T3D/tsStatic.h +++ b/Engine/source/T3D/tsStatic.h @@ -218,6 +218,8 @@ class TSStatic : public SceneObject void onScaleChanged(); void prepRenderImage( SceneRenderState *state ); void inspectPostApply(); + virtual void onMount( SceneObject *obj, S32 node ); + virtual void onUnmount( SceneObject *obj, S32 node ); /// The type of mesh data use for collision queries. MeshType getCollisionType() const { return mCollisionType; } From 16c547306fa113725cb247de752ceddbbe29d933 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Mon, 16 Jun 2014 21:13:27 -0400 Subject: [PATCH 290/324] Mounting demo script --- .../Full/game/scripts/server/mountTest.cs | 89 +++++++++++++++++++ .../Full/game/scripts/server/scriptExec.cs | 2 +- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 Templates/Full/game/scripts/server/mountTest.cs diff --git a/Templates/Full/game/scripts/server/mountTest.cs b/Templates/Full/game/scripts/server/mountTest.cs new file mode 100644 index 0000000000..3ad3687133 --- /dev/null +++ b/Templates/Full/game/scripts/server/mountTest.cs @@ -0,0 +1,89 @@ +datablock StaticShapeData( StaticShapeBoulder ) +{ + shapeFile = "art/shapes/rocks/boulder.dts"; +}; + +datablock ItemData( ItemBoulder ) +{ + shapeFile = "art/shapes/rocks/boulder.dts"; +}; + +datablock WheeledVehicleData(CustomCheetah : CheetahCar) +{ + nameTag = 'Custom Cheetah'; +}; + +function CustomCheetah::onAdd(%this, %obj) +{ + CheetahCar::onAdd(%this, %obj); + %obj.unmountImage(%this.turretSlot); + + // StaticShape + %staticRock = new StaticShape() { + datablock = StaticShapeBoulder; + scale = "0.2 0.2 0.2"; + }; + %staticRock.setShapeName("StaticShape"); + %obj.staticRock = %staticRock; + %staticRock.car = %obj; + %obj.mountObject(%staticRock, %this.turretSlot, "1.4 0 .5 0 0 1 0"); + + // Item + %itemRock = new Item() { + datablock = ItemBoulder; + scale = "0.2 0.2 0.2"; + }; + %itemRock.setShapeName("Item"); + %obj.itemRock = %itemRock; + %itemRock.car = %obj; + %obj.mountObject(%itemRock, %this.turretSlot, "-1.4 0 .5 0 0 1 0"); + + // Vehicle + %vehicleMount = new WheeledVehicle() { + datablock = CheetahCar; + scale = "0.1 0.1 0.1"; + }; + %vehicleMount.setShapeName("MountedCheetah"); + %obj.vehicleMount = %vehicleMount; + %vehicleMount.car = %obj; + %obj.mountObject(%vehicleMount, %this.turretSlot, "0 0 -.17 0 0 1 1.57"); + + // TSStatic + %tsStaticMount = new TSStatic() { + shapeName = "art/shapes/rocks/boulder.dts"; + scale = "0.1 0.1 0.1"; + }; + %obj.tsStaticMount = %tsStaticMount; + %tsStaticMount.car = %obj; + %obj.mountObject(%tsStaticMount, %this.turretSlot, "0 1.4 0 0 0 1 0"); +} + +function CustomCheetah::onRemove(%this, %obj) +{ + if( isObject(%obj.tsStaticMount) ) + { + %obj.unmountObject(%obj.tsStaticMount); + %obj.tsStaticMount.delete(); + } + + if( isObject(%obj.vehicleMount) ) + { + %obj.unmountObject(%obj.vehicleMount); + %obj.vehicleMount.delete(); + } + + if( isObject(%obj.itemRock) ) + { + %obj.unmountObject(%obj.itemRock); + %obj.itemRock.delete(); + } + + if( isObject(%obj.staticRock) ) + { + %obj.unmountObject(%obj.staticRock); + %obj.staticRock.delete(); + } + + CheetahCar::onRemove(%this, %obj); +} + diff --git a/Templates/Full/game/scripts/server/scriptExec.cs b/Templates/Full/game/scripts/server/scriptExec.cs index d48e268e72..f6eb29b7de 100644 --- a/Templates/Full/game/scripts/server/scriptExec.cs +++ b/Templates/Full/game/scripts/server/scriptExec.cs @@ -77,4 +77,4 @@ { exec("./gameObjects/GameObjectManager.cs"); execGameObjects(); -} \ No newline at end of file +} From 8c2d5ee82cc05c5251650da9d581a31f3e5595e6 Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Wed, 18 Jun 2014 19:32:39 -0400 Subject: [PATCH 291/324] RigidShape Mounting --- Engine/source/T3D/rigidShape.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Engine/source/T3D/rigidShape.cpp b/Engine/source/T3D/rigidShape.cpp index 6660486481..dab7d3627e 100644 --- a/Engine/source/T3D/rigidShape.cpp +++ b/Engine/source/T3D/rigidShape.cpp @@ -732,6 +732,8 @@ void RigidShape::onRemove() void RigidShape::processTick(const Move* move) { Parent::processTick(move); + if ( isMounted() ) + return; // Warp to catch up to server if (mDelta.warpCount < mDelta.warpTicks) @@ -795,6 +797,8 @@ void RigidShape::processTick(const Move* move) void RigidShape::interpolateTick(F32 dt) { Parent::interpolateTick(dt); + if ( isMounted() ) + return; if(dt == 0.0f) setRenderPosition(mDelta.pos, mDelta.rot[1]); @@ -814,6 +818,9 @@ void RigidShape::advanceTime(F32 dt) updateFroth(dt); + if ( isMounted() ) + return; + // Update 3rd person camera offset. Camera update is done // here as it's a client side only animation. mCameraOffset -= From b8565b2b80d66775946e47315142f437ce8b9f1a Mon Sep 17 00:00:00 2001 From: OTHGMars Date: Wed, 18 Jun 2014 19:33:50 -0400 Subject: [PATCH 292/324] Updated demo script --- Templates/Full/game/scripts/server/mountTest.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Templates/Full/game/scripts/server/mountTest.cs b/Templates/Full/game/scripts/server/mountTest.cs index 3ad3687133..4c05726b94 100644 --- a/Templates/Full/game/scripts/server/mountTest.cs +++ b/Templates/Full/game/scripts/server/mountTest.cs @@ -38,6 +38,16 @@ datablock WheeledVehicleData(CustomCheetah : CheetahCar) %itemRock.car = %obj; %obj.mountObject(%itemRock, %this.turretSlot, "-1.4 0 .5 0 0 1 0"); + // RigidShape + %rigidRock = new RigidShape() { + datablock = BouncingBoulder; + scale = "0.2 0.2 0.2"; + }; + %rigidRock.setShapeName("RigidShape"); + %obj.rigidRock = %itemRock; + %rigidRock.car = %obj; + %obj.mountObject(%rigidRock, %this.turretSlot, "0 1.4 .6 0 0 1 0"); + // Vehicle %vehicleMount = new WheeledVehicle() { datablock = CheetahCar; @@ -72,6 +82,12 @@ datablock WheeledVehicleData(CustomCheetah : CheetahCar) %obj.vehicleMount.delete(); } + if( isObject(%obj.rigidRock) ) + { + %obj.unmountObject(%obj.rigidRock); + %obj.rigidRock.delete(); + } + if( isObject(%obj.itemRock) ) { %obj.unmountObject(%obj.itemRock); From 161cdcb02d09f03fc419a7333f6bc1567d30bf1b Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 17 Jun 2016 10:34:53 -0500 Subject: [PATCH 293/324] Revert "Updated demo script" This reverts commit b288411d1f16d499f59ac89a5070dc88889ed043. --- Templates/Full/game/scripts/server/mountTest.cs | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Templates/Full/game/scripts/server/mountTest.cs b/Templates/Full/game/scripts/server/mountTest.cs index 4c05726b94..3ad3687133 100644 --- a/Templates/Full/game/scripts/server/mountTest.cs +++ b/Templates/Full/game/scripts/server/mountTest.cs @@ -38,16 +38,6 @@ datablock WheeledVehicleData(CustomCheetah : CheetahCar) %itemRock.car = %obj; %obj.mountObject(%itemRock, %this.turretSlot, "-1.4 0 .5 0 0 1 0"); - // RigidShape - %rigidRock = new RigidShape() { - datablock = BouncingBoulder; - scale = "0.2 0.2 0.2"; - }; - %rigidRock.setShapeName("RigidShape"); - %obj.rigidRock = %itemRock; - %rigidRock.car = %obj; - %obj.mountObject(%rigidRock, %this.turretSlot, "0 1.4 .6 0 0 1 0"); - // Vehicle %vehicleMount = new WheeledVehicle() { datablock = CheetahCar; @@ -82,12 +72,6 @@ datablock WheeledVehicleData(CustomCheetah : CheetahCar) %obj.vehicleMount.delete(); } - if( isObject(%obj.rigidRock) ) - { - %obj.unmountObject(%obj.rigidRock); - %obj.rigidRock.delete(); - } - if( isObject(%obj.itemRock) ) { %obj.unmountObject(%obj.itemRock); From e9039b22616c2e3d880c52479d7ad8a0dcca8d3d Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 17 Jun 2016 10:35:02 -0500 Subject: [PATCH 294/324] Revert "Mounting demo script" This reverts commit fb1fb5b7f39e4acb5a474789443cbe66b00cc414. --- .../Full/game/scripts/server/mountTest.cs | 89 ------------------- 1 file changed, 89 deletions(-) delete mode 100644 Templates/Full/game/scripts/server/mountTest.cs diff --git a/Templates/Full/game/scripts/server/mountTest.cs b/Templates/Full/game/scripts/server/mountTest.cs deleted file mode 100644 index 3ad3687133..0000000000 --- a/Templates/Full/game/scripts/server/mountTest.cs +++ /dev/null @@ -1,89 +0,0 @@ -datablock StaticShapeData( StaticShapeBoulder ) -{ - shapeFile = "art/shapes/rocks/boulder.dts"; -}; - -datablock ItemData( ItemBoulder ) -{ - shapeFile = "art/shapes/rocks/boulder.dts"; -}; - -datablock WheeledVehicleData(CustomCheetah : CheetahCar) -{ - nameTag = 'Custom Cheetah'; -}; - -function CustomCheetah::onAdd(%this, %obj) -{ - CheetahCar::onAdd(%this, %obj); - %obj.unmountImage(%this.turretSlot); - - // StaticShape - %staticRock = new StaticShape() { - datablock = StaticShapeBoulder; - scale = "0.2 0.2 0.2"; - }; - %staticRock.setShapeName("StaticShape"); - %obj.staticRock = %staticRock; - %staticRock.car = %obj; - %obj.mountObject(%staticRock, %this.turretSlot, "1.4 0 .5 0 0 1 0"); - - // Item - %itemRock = new Item() { - datablock = ItemBoulder; - scale = "0.2 0.2 0.2"; - }; - %itemRock.setShapeName("Item"); - %obj.itemRock = %itemRock; - %itemRock.car = %obj; - %obj.mountObject(%itemRock, %this.turretSlot, "-1.4 0 .5 0 0 1 0"); - - // Vehicle - %vehicleMount = new WheeledVehicle() { - datablock = CheetahCar; - scale = "0.1 0.1 0.1"; - }; - %vehicleMount.setShapeName("MountedCheetah"); - %obj.vehicleMount = %vehicleMount; - %vehicleMount.car = %obj; - %obj.mountObject(%vehicleMount, %this.turretSlot, "0 0 -.17 0 0 1 1.57"); - - // TSStatic - %tsStaticMount = new TSStatic() { - shapeName = "art/shapes/rocks/boulder.dts"; - scale = "0.1 0.1 0.1"; - }; - %obj.tsStaticMount = %tsStaticMount; - %tsStaticMount.car = %obj; - %obj.mountObject(%tsStaticMount, %this.turretSlot, "0 1.4 0 0 0 1 0"); -} - -function CustomCheetah::onRemove(%this, %obj) -{ - if( isObject(%obj.tsStaticMount) ) - { - %obj.unmountObject(%obj.tsStaticMount); - %obj.tsStaticMount.delete(); - } - - if( isObject(%obj.vehicleMount) ) - { - %obj.unmountObject(%obj.vehicleMount); - %obj.vehicleMount.delete(); - } - - if( isObject(%obj.itemRock) ) - { - %obj.unmountObject(%obj.itemRock); - %obj.itemRock.delete(); - } - - if( isObject(%obj.staticRock) ) - { - %obj.unmountObject(%obj.staticRock); - %obj.staticRock.delete(); - } - - CheetahCar::onRemove(%this, %obj); -} - From 9dadd28ab85e12d66da145ddeeb3e56f542778b8 Mon Sep 17 00:00:00 2001 From: John3 Date: Sun, 19 Jun 2016 10:03:15 -0500 Subject: [PATCH 295/324] Correct Bot aim. http://forums.torque3d.org/viewtopic.php?f=11&t=673&p=5718#p5718 --- Engine/source/T3D/aiPlayer.cpp | 24 ++++++++++++++++++++++++ Engine/source/T3D/aiPlayer.h | 1 + 2 files changed, 25 insertions(+) diff --git a/Engine/source/T3D/aiPlayer.cpp b/Engine/source/T3D/aiPlayer.cpp index 4c62075a7d..838a4ae0fe 100644 --- a/Engine/source/T3D/aiPlayer.cpp +++ b/Engine/source/T3D/aiPlayer.cpp @@ -293,6 +293,30 @@ void AIPlayer::clearAim() mAimOffset = Point3F(0.0f, 0.0f, 0.0f); } +/** + * Sets the correct aim for the bot to the target + */ +void AIPlayer::getMuzzleVector(U32 imageSlot,VectorF* vec) +{ + MatrixF mat; + getMuzzleTransform(imageSlot,&mat); + + MountedImage& image = mMountedImageList[imageSlot]; + + if (image.dataBlock->correctMuzzleVector) + { + disableHeadZCalc(); + if (getCorrectedAim(mat, vec)) + { + enableHeadZCalc(); + return; + } + enableHeadZCalc(); + + } + mat.getColumn(1,vec); +} + /** * Set the state of a movement trigger. * diff --git a/Engine/source/T3D/aiPlayer.h b/Engine/source/T3D/aiPlayer.h index e4f47eb9a0..d37cb896b6 100644 --- a/Engine/source/T3D/aiPlayer.h +++ b/Engine/source/T3D/aiPlayer.h @@ -170,6 +170,7 @@ class AIPlayer : public Player { void setAimLocation( const Point3F &location ); Point3F getAimLocation() const { return mAimLocation; } void clearAim(); + void AIPlayer::getMuzzleVector(U32 imageSlot,VectorF* vec); bool checkInLos(GameBase* target = NULL, bool _useMuzzle = false, bool _checkEnabled = false); bool checkInFoV(GameBase* target = NULL, F32 camFov = 45.0f, bool _checkEnabled = false); F32 getTargetDistance(GameBase* target, bool _checkEnabled); From 810ac82eaee5e11c24236ebf499ac8ebfb1fb0d8 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 20 Jun 2016 12:34:07 -0500 Subject: [PATCH 296/324] Adds a missed cleanup for currentNewObj. --- Engine/source/console/compiledEval.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Engine/source/console/compiledEval.cpp b/Engine/source/console/compiledEval.cpp index 88556cb468..d61a8f3531 100644 --- a/Engine/source/console/compiledEval.cpp +++ b/Engine/source/console/compiledEval.cpp @@ -871,6 +871,7 @@ ConsoleValueRef CodeBlock::exec(U32 ip, const char *functionName, Namespace *thi { Con::errorf(ConsoleLogEntry::General, "%s: Unable to instantiate non-SimObject class %s.", getFileLine(ip), (const char*)callArgv[1]); delete object; + currentNewObject = NULL; ip = failJump; break; } From 69244a8577d92a0662d8ac8a0aead851e8ef3f8c Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 20 Jun 2016 13:14:19 -0500 Subject: [PATCH 297/324] Readded some missed brackets --- Engine/source/T3D/tsStatic.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index 6c401e9529..6dd1e51e1f 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -764,20 +764,21 @@ U32 TSStatic::packUpdate(NetConnection *con, U32 mask, BitStream *stream) if ( stream->writeFlag( mask & SkinMask ) ) con->packNetStringHandleU( stream, mSkinNameHandle ); - if ( stream->writeFlag( mask & AdvancedStaticOptionsMask ) ) + if (stream->writeFlag(mask & AdvancedStaticOptionsMask)) { - stream->writeString( mShapeName ); - stream->write( (U32)mDecalType ); + stream->writeString(mShapeName); + stream->write((U32)mDecalType); - stream->writeFlag( mAllowPlayerStep ); - stream->writeFlag( mMeshCulling ); - stream->writeFlag( mUseOriginSort ); + stream->writeFlag(mAllowPlayerStep); + stream->writeFlag(mMeshCulling); + stream->writeFlag(mUseOriginSort); - stream->write( mRenderNormalScalar ); + stream->write(mRenderNormalScalar); - stream->write( mForceDetail ); + stream->write(mForceDetail); - stream->writeFlag( mPlayAmbient ); + stream->writeFlag(mPlayAmbient); + } if ( stream->writeFlag(mUseAlphaFade) ) { @@ -846,19 +847,20 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) } } - if ( stream->readFlag() ) // AdvancedStaticOptionsMask + if (stream->readFlag()) // AdvancedStaticOptionsMask { mShapeName = stream->readSTString(); - stream->read( (U32*)&mDecalType ); + stream->read((U32*)&mDecalType); mAllowPlayerStep = stream->readFlag(); - mMeshCulling = stream->readFlag(); + mMeshCulling = stream->readFlag(); mUseOriginSort = stream->readFlag(); - stream->read( &mRenderNormalScalar ); + stream->read(&mRenderNormalScalar); - stream->read( &mForceDetail ); + stream->read(&mForceDetail); + } mUseAlphaFade = stream->readFlag(); if (mUseAlphaFade) From afcbe83a26525b761a9bfb2926dc58f9e7005d01 Mon Sep 17 00:00:00 2001 From: John3 Date: Mon, 20 Jun 2016 19:30:54 -0500 Subject: [PATCH 298/324] Corrected "Pref::Server::ConnectionError" description. --- Templates/Empty/game/core/scripts/server/defaults.cs | 4 ++-- Templates/Full/game/core/scripts/server/defaults.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Templates/Empty/game/core/scripts/server/defaults.cs b/Templates/Empty/game/core/scripts/server/defaults.cs index 78ebdb8836..8109099ea4 100644 --- a/Templates/Empty/game/core/scripts/server/defaults.cs +++ b/Templates/Empty/game/core/scripts/server/defaults.cs @@ -36,9 +36,9 @@ // usefull to the client, such as the url or ftp address of where the // latest version of the game can be obtained. $Pref::Server::ConnectionError = - "You do not have the correct version of the FPS starter kit or "@ + "You do not have the correct version of Torque3D or "@ "the related art needed to play on this server, please contact "@ - "the server operator for more information."; + "the server administrator."; // The network port is also defined by the client, this value // overrides pref::net::port for dedicated servers diff --git a/Templates/Full/game/core/scripts/server/defaults.cs b/Templates/Full/game/core/scripts/server/defaults.cs index 78ebdb8836..8109099ea4 100644 --- a/Templates/Full/game/core/scripts/server/defaults.cs +++ b/Templates/Full/game/core/scripts/server/defaults.cs @@ -36,9 +36,9 @@ // usefull to the client, such as the url or ftp address of where the // latest version of the game can be obtained. $Pref::Server::ConnectionError = - "You do not have the correct version of the FPS starter kit or "@ + "You do not have the correct version of Torque3D or "@ "the related art needed to play on this server, please contact "@ - "the server operator for more information."; + "the server administrator."; // The network port is also defined by the client, this value // overrides pref::net::port for dedicated servers From 09660372115a4eb414a15dfdfab93dc43918f262 Mon Sep 17 00:00:00 2001 From: John3 Date: Mon, 20 Jun 2016 20:07:03 -0500 Subject: [PATCH 299/324] added $appName --- Templates/Empty/game/core/scripts/server/defaults.cs | 2 +- Templates/Full/game/core/scripts/server/defaults.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Templates/Empty/game/core/scripts/server/defaults.cs b/Templates/Empty/game/core/scripts/server/defaults.cs index 8109099ea4..73c50a1a40 100644 --- a/Templates/Empty/game/core/scripts/server/defaults.cs +++ b/Templates/Empty/game/core/scripts/server/defaults.cs @@ -36,7 +36,7 @@ // usefull to the client, such as the url or ftp address of where the // latest version of the game can be obtained. $Pref::Server::ConnectionError = - "You do not have the correct version of Torque3D or "@ + "You do not have the correct version of "@$appName@" or "@ "the related art needed to play on this server, please contact "@ "the server administrator."; diff --git a/Templates/Full/game/core/scripts/server/defaults.cs b/Templates/Full/game/core/scripts/server/defaults.cs index 8109099ea4..73c50a1a40 100644 --- a/Templates/Full/game/core/scripts/server/defaults.cs +++ b/Templates/Full/game/core/scripts/server/defaults.cs @@ -36,7 +36,7 @@ // usefull to the client, such as the url or ftp address of where the // latest version of the game can be obtained. $Pref::Server::ConnectionError = - "You do not have the correct version of Torque3D or "@ + "You do not have the correct version of "@$appName@" or "@ "the related art needed to play on this server, please contact "@ "the server administrator."; From 59f1c331c1a81b7c7c63e7df4c30b58ea74cc59c Mon Sep 17 00:00:00 2001 From: rextimmy Date: Tue, 21 Jun 2016 17:02:44 +1000 Subject: [PATCH 300/324] Linux vix shader fixes --- .../shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl | 1 - .../common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl | 1 - .../shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl | 1 - .../common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl | 1 - 4 files changed, 4 deletions(-) diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl index 48a96d47df..20dbf2de64 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl @@ -22,7 +22,6 @@ #include "../../../gl/hlslCompat.glsl" #include "shadergen:/autogenConditioners.h" -#include "../../../postfx/gl/postFx.glsl" uniform sampler2D colorBufferTex; diff --git a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl index 4ba9f67347..fd054626ed 100644 --- a/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl +++ b/Templates/Empty/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl @@ -21,7 +21,6 @@ //----------------------------------------------------------------------------- #include "../../../gl/hlslCompat.glsl" #include "shadergen:/autogenConditioners.h" -#include "../../../postfx/gl/postFx.glsl" uniform sampler2D matinfoTex; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl index 48a96d47df..20dbf2de64 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgColorBufferP.glsl @@ -22,7 +22,6 @@ #include "../../../gl/hlslCompat.glsl" #include "shadergen:/autogenConditioners.h" -#include "../../../postfx/gl/postFx.glsl" uniform sampler2D colorBufferTex; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl index 4ba9f67347..fd054626ed 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/dbgSpecMapVisualizeP.glsl @@ -21,7 +21,6 @@ //----------------------------------------------------------------------------- #include "../../../gl/hlslCompat.glsl" #include "shadergen:/autogenConditioners.h" -#include "../../../postfx/gl/postFx.glsl" uniform sampler2D matinfoTex; From a0dc2adff8226230a1bb950be58a2e67c30757f2 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 21 Jun 2016 20:53:08 -0500 Subject: [PATCH 301/324] suppresses a leak potentially caused by Knot::mType||Knot::mPath entries. --- Engine/source/T3D/cameraSpline.cpp | 10 ++++++++++ Engine/source/T3D/cameraSpline.h | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Engine/source/T3D/cameraSpline.cpp b/Engine/source/T3D/cameraSpline.cpp index 9b0f93d5bc..1129f91f8d 100644 --- a/Engine/source/T3D/cameraSpline.cpp +++ b/Engine/source/T3D/cameraSpline.cpp @@ -29,6 +29,16 @@ //----------------------------------------------------------------------------- +CameraSpline::Knot::Knot() +{ + mPosition = Point3F::Zero; + mRotation = QuatF::Identity; + mSpeed = 0.0f; + mType = NORMAL; + mPath = SPLINE; + prev = NULL; next = NULL; +}; + CameraSpline::Knot::Knot(const Knot &k) { mPosition = k.mPosition; diff --git a/Engine/source/T3D/cameraSpline.h b/Engine/source/T3D/cameraSpline.h index 31f79f1315..6396aa425f 100644 --- a/Engine/source/T3D/cameraSpline.h +++ b/Engine/source/T3D/cameraSpline.h @@ -54,7 +54,7 @@ class CameraSpline Knot *prev; Knot *next; - Knot() {}; + Knot(); Knot(const Knot &k); Knot(const Point3F &p, const QuatF &r, F32 s, Knot::Type type = NORMAL, Knot::Path path = SPLINE); }; From 4699a2142be64867bb10999f68994a75ab7d7df4 Mon Sep 17 00:00:00 2001 From: John3 Date: Tue, 21 Jun 2016 22:06:09 -0500 Subject: [PATCH 302/324] Enable to play recorded gameplay demo from main menu. --- Templates/Empty/game/art/gui/mainMenuGui.gui | 26 ++++++++++++++++--- .../Empty/game/core/scripts/client/core.cs | 1 + Templates/Full/game/art/gui/mainMenuGui.gui | 26 ++++++++++++++++--- .../Full/game/core/scripts/client/core.cs | 1 + 4 files changed, 48 insertions(+), 6 deletions(-) diff --git a/Templates/Empty/game/art/gui/mainMenuGui.gui b/Templates/Empty/game/art/gui/mainMenuGui.gui index bed700a83b..e9d5750939 100644 --- a/Templates/Empty/game/art/gui/mainMenuGui.gui +++ b/Templates/Empty/game/art/gui/mainMenuGui.gui @@ -16,7 +16,7 @@ isContainer = "1"; canSave = "1"; canSaveDynamicFields = "1"; - enabled = "1"; + Enabled = "1"; isDecoy = "0"; new GuiBitmapCtrl(MainMenuAppLogo) { @@ -35,7 +35,7 @@ isContainer = "0"; canSave = "1"; canSaveDynamicFields = "1"; - enabled = "1"; + Enabled = "1"; isDecoy = "0"; }; new GuiControl() { @@ -59,7 +59,7 @@ buttonType = "PushButton"; useMouseEvents = "1"; position = "9 26"; - extent = "289 75"; + extent = "219 75"; minExtent = "8 8"; horizSizing = "relative"; vertSizing = "bottom"; @@ -158,6 +158,26 @@ canSave = "1"; canSaveDynamicFields = "0"; }; + new GuiButtonCtrl() { + text = "Replay"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; + position = "215 26"; + extent = "83 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiMenuButtonProfile"; + visible = "1"; + active = "1"; + command = "Canvas.pushDialog(RecordingsDlg);"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; }; //--- OBJECT WRITE END --- diff --git a/Templates/Empty/game/core/scripts/client/core.cs b/Templates/Empty/game/core/scripts/client/core.cs index da26beeffd..ecf1626f88 100644 --- a/Templates/Empty/game/core/scripts/client/core.cs +++ b/Templates/Empty/game/core/scripts/client/core.cs @@ -73,6 +73,7 @@ function initializeCore() exec("~/art/gui/console.gui"); exec("~/art/gui/consoleVarDlg.gui"); exec("~/art/gui/netGraphGui.gui"); + exec("~/art/gui/RecordingsDlg.gui"); // Gui Helper Scripts. exec("~/scripts/gui/help.cs"); diff --git a/Templates/Full/game/art/gui/mainMenuGui.gui b/Templates/Full/game/art/gui/mainMenuGui.gui index ac38976d3a..bde78491ff 100644 --- a/Templates/Full/game/art/gui/mainMenuGui.gui +++ b/Templates/Full/game/art/gui/mainMenuGui.gui @@ -16,7 +16,7 @@ isContainer = "1"; canSave = "1"; canSaveDynamicFields = "1"; - enabled = "1"; + Enabled = "1"; isDecoy = "0"; new GuiBitmapCtrl(MainMenuAppLogo) { @@ -35,7 +35,7 @@ isContainer = "0"; canSave = "1"; canSaveDynamicFields = "1"; - enabled = "1"; + Enabled = "1"; isDecoy = "0"; }; new GuiControl() { @@ -59,7 +59,7 @@ buttonType = "PushButton"; useMouseEvents = "1"; position = "9 18"; - extent = "289 75"; + extent = "219 75"; minExtent = "8 8"; horizSizing = "relative"; vertSizing = "bottom"; @@ -178,6 +178,26 @@ canSave = "1"; canSaveDynamicFields = "0"; }; + new GuiButtonCtrl() { + text = "Replay"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; + position = "215 18"; + extent = "83 75"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiMenuButtonProfile"; + visible = "1"; + active = "1"; + command = "Canvas.pushDialog(RecordingsDlg);"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; }; }; //--- OBJECT WRITE END --- diff --git a/Templates/Full/game/core/scripts/client/core.cs b/Templates/Full/game/core/scripts/client/core.cs index da26beeffd..ecf1626f88 100644 --- a/Templates/Full/game/core/scripts/client/core.cs +++ b/Templates/Full/game/core/scripts/client/core.cs @@ -73,6 +73,7 @@ function initializeCore() exec("~/art/gui/console.gui"); exec("~/art/gui/consoleVarDlg.gui"); exec("~/art/gui/netGraphGui.gui"); + exec("~/art/gui/RecordingsDlg.gui"); // Gui Helper Scripts. exec("~/scripts/gui/help.cs"); From 9b8f0eee44ff806fcdb7870dac84af322f2d8746 Mon Sep 17 00:00:00 2001 From: John3 Date: Tue, 21 Jun 2016 22:09:06 -0500 Subject: [PATCH 303/324] added "how to use". Added delete button (Disabled right now) --- .../Empty/game/core/art/gui/RecordingsDlg.gui | 228 ++++++++++++++---- .../Full/game/core/art/gui/RecordingsDlg.gui | 228 ++++++++++++++---- 2 files changed, 358 insertions(+), 98 deletions(-) diff --git a/Templates/Empty/game/core/art/gui/RecordingsDlg.gui b/Templates/Empty/game/core/art/gui/RecordingsDlg.gui index 44df55ca11..28db1ae309 100644 --- a/Templates/Empty/game/core/art/gui/RecordingsDlg.gui +++ b/Templates/Empty/game/core/art/gui/RecordingsDlg.gui @@ -1,97 +1,227 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiControl(recordingsDlg) { - profile = "GuiDefaultProfile"; - horizSizing = "right"; - vertSizing = "bottom"; position = "0 0"; - extent = "640 480"; + extent = "1024 768"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; visible = "1"; - helpTag = "0"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "1"; + helpTag = "0"; new GuiWindowCtrl() { - profile = "GuiWindowProfile"; - horizSizing = "center"; - vertSizing = "center"; - position = "55 65"; - extent = "530 338"; - minExtent = "48 92"; - visible = "1"; - helpTag = "0"; text = "Demo Recordings"; - maxLength = "255"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "0"; canMaximize = "0"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "Canvas.popDialog(recordingsDlg);"; + edgeSnap = "1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "247 215"; + extent = "530 338"; + minExtent = "48 92"; + horizSizing = "center"; + vertSizing = "center"; + profile = "GuiWindowProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiScrollCtrl() { - profile = "GuiScrollProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "23 37"; - extent = "484 260"; - minExtent = "32 32"; - visible = "1"; - helpTag = "0"; willFirstRespond = "1"; hScrollBar = "dynamic"; vScrollBar = "alwaysOn"; - lockHorizScroll = "false"; - lockVertScroll = "false"; + lockHorizScroll = "0"; + lockVertScroll = "0"; constantThumbHeight = "0"; childMargin = "0 0"; - defaultLineHeight = "15"; + mouseWheelScrollSpeed = "-1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "23 60"; + extent = "484 237"; + minExtent = "32 32"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiScrollProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiTextListCtrl(RecordingsDlgList) { - profile = "GuiTextArrayProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "2 2"; - extent = "462 20"; - minExtent = "8 20"; - visible = "1"; - helpTag = "0"; - enumerate = "0"; columns = "0"; - resizeCell = "1"; fitParentWidth = "1"; clipColumnText = "0"; - noDuplicates = "false"; + position = "1 1"; + extent = "469 32"; + minExtent = "8 20"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextArrayProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; new GuiButtonCtrl(DR_CancelBtn) { - profile = "GuiButtonProfile"; - horizSizing = "right"; - vertSizing = "top"; + text = "Cancel"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; position = "396 306"; extent = "110 20"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "top"; + profile = "GuiButtonProfile"; visible = "1"; + active = "1"; command = "Canvas.popDialog(recordingsDlg);"; accelerator = "escape"; - helpTag = "0"; - text = "Cancel"; - groupNum = "-1"; - buttonType = "PushButton"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiButtonCtrl(DR_StartDemoBtn) { - profile = "GuiButtonProfile"; - horizSizing = "right"; - vertSizing = "top"; + text = "Play"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; position = "25 305"; extent = "110 20"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "top"; + profile = "GuiButtonProfile"; visible = "1"; + active = "1"; command = "StartSelectedDemo();"; - helpTag = "0"; - text = "Play"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "During gameplay press the following keys:"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "23 30"; + extent = "206 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Start = F3"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "253 32"; + extent = "50 15"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Stop = F4"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "320 32"; + extent = "49 13"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiButtonCtrl(DR_DelDemoBtn) { + text = "Delete"; groupNum = "-1"; buttonType = "PushButton"; + useMouseEvents = "0"; + position = "210 305"; + extent = "110 20"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiButtonProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; diff --git a/Templates/Full/game/core/art/gui/RecordingsDlg.gui b/Templates/Full/game/core/art/gui/RecordingsDlg.gui index 44df55ca11..28db1ae309 100644 --- a/Templates/Full/game/core/art/gui/RecordingsDlg.gui +++ b/Templates/Full/game/core/art/gui/RecordingsDlg.gui @@ -1,97 +1,227 @@ //--- OBJECT WRITE BEGIN --- %guiContent = new GuiControl(recordingsDlg) { - profile = "GuiDefaultProfile"; - horizSizing = "right"; - vertSizing = "bottom"; position = "0 0"; - extent = "640 480"; + extent = "1024 768"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiDefaultProfile"; visible = "1"; - helpTag = "0"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "1"; + helpTag = "0"; new GuiWindowCtrl() { - profile = "GuiWindowProfile"; - horizSizing = "center"; - vertSizing = "center"; - position = "55 65"; - extent = "530 338"; - minExtent = "48 92"; - visible = "1"; - helpTag = "0"; text = "Demo Recordings"; - maxLength = "255"; resizeWidth = "0"; resizeHeight = "0"; canMove = "1"; canClose = "1"; canMinimize = "0"; canMaximize = "0"; - minSize = "50 50"; + canCollapse = "0"; closeCommand = "Canvas.popDialog(recordingsDlg);"; + edgeSnap = "1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "247 215"; + extent = "530 338"; + minExtent = "48 92"; + horizSizing = "center"; + vertSizing = "center"; + profile = "GuiWindowProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiScrollCtrl() { - profile = "GuiScrollProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "23 37"; - extent = "484 260"; - minExtent = "32 32"; - visible = "1"; - helpTag = "0"; willFirstRespond = "1"; hScrollBar = "dynamic"; vScrollBar = "alwaysOn"; - lockHorizScroll = "false"; - lockVertScroll = "false"; + lockHorizScroll = "0"; + lockVertScroll = "0"; constantThumbHeight = "0"; childMargin = "0 0"; - defaultLineHeight = "15"; + mouseWheelScrollSpeed = "-1"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "23 60"; + extent = "484 237"; + minExtent = "32 32"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiScrollProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; new GuiTextListCtrl(RecordingsDlgList) { - profile = "GuiTextArrayProfile"; - horizSizing = "right"; - vertSizing = "bottom"; - position = "2 2"; - extent = "462 20"; - minExtent = "8 20"; - visible = "1"; - helpTag = "0"; - enumerate = "0"; columns = "0"; - resizeCell = "1"; fitParentWidth = "1"; clipColumnText = "0"; - noDuplicates = "false"; + position = "1 1"; + extent = "469 32"; + minExtent = "8 20"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextArrayProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; new GuiButtonCtrl(DR_CancelBtn) { - profile = "GuiButtonProfile"; - horizSizing = "right"; - vertSizing = "top"; + text = "Cancel"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; position = "396 306"; extent = "110 20"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "top"; + profile = "GuiButtonProfile"; visible = "1"; + active = "1"; command = "Canvas.popDialog(recordingsDlg);"; accelerator = "escape"; - helpTag = "0"; - text = "Cancel"; - groupNum = "-1"; - buttonType = "PushButton"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; new GuiButtonCtrl(DR_StartDemoBtn) { - profile = "GuiButtonProfile"; - horizSizing = "right"; - vertSizing = "top"; + text = "Play"; + groupNum = "-1"; + buttonType = "PushButton"; + useMouseEvents = "0"; position = "25 305"; extent = "110 20"; minExtent = "8 8"; + horizSizing = "right"; + vertSizing = "top"; + profile = "GuiButtonProfile"; visible = "1"; + active = "1"; command = "StartSelectedDemo();"; - helpTag = "0"; - text = "Play"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "During gameplay press the following keys:"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "23 30"; + extent = "206 18"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Start = F3"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "253 32"; + extent = "50 15"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiTextCtrl() { + text = "Stop = F4"; + maxLength = "1024"; + margin = "0 0 0 0"; + padding = "0 0 0 0"; + anchorTop = "1"; + anchorBottom = "0"; + anchorLeft = "1"; + anchorRight = "0"; + position = "320 32"; + extent = "49 13"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiTextProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "1"; + canSave = "1"; + canSaveDynamicFields = "0"; + }; + new GuiButtonCtrl(DR_DelDemoBtn) { + text = "Delete"; groupNum = "-1"; buttonType = "PushButton"; + useMouseEvents = "0"; + position = "210 305"; + extent = "110 20"; + minExtent = "8 2"; + horizSizing = "right"; + vertSizing = "bottom"; + profile = "GuiButtonProfile"; + visible = "1"; + active = "1"; + tooltipProfile = "GuiToolTipProfile"; + hovertime = "1000"; + isContainer = "0"; + canSave = "1"; + canSaveDynamicFields = "0"; }; }; }; From 2723bfbc91419883abb1c5bfe02441252ba5f308 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 23 Jun 2016 11:44:17 -0500 Subject: [PATCH 304/324] corrects corruption in precipitation class --- Engine/source/T3D/fx/precipitation.cpp | 2 +- Templates/Empty/game/shaders/common/precipP.hlsl | 2 +- Templates/Empty/game/shaders/common/precipV.hlsl | 5 +++-- Templates/Full/game/shaders/common/precipP.hlsl | 2 +- Templates/Full/game/shaders/common/precipV.hlsl | 5 +++-- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Engine/source/T3D/fx/precipitation.cpp b/Engine/source/T3D/fx/precipitation.cpp index 0cbcf7c7fc..b0d8440d5d 100644 --- a/Engine/source/T3D/fx/precipitation.cpp +++ b/Engine/source/T3D/fx/precipitation.cpp @@ -963,7 +963,7 @@ void Precipitation::initRenderObjects() // Create a volitile vertex buffer which // we'll lock and fill every frame. - mRainVB.set(GFX, mMaxVBDrops * 4, GFXBufferTypeVolatile); + mRainVB.set(GFX, mMaxVBDrops * 4, GFXBufferTypeDynamic); // Init the index buffer for rendering the // entire or a partially filled vb. diff --git a/Templates/Empty/game/shaders/common/precipP.hlsl b/Templates/Empty/game/shaders/common/precipP.hlsl index 0f5325154d..069ba4992b 100644 --- a/Templates/Empty/game/shaders/common/precipP.hlsl +++ b/Templates/Empty/game/shaders/common/precipP.hlsl @@ -29,7 +29,7 @@ struct Conn { float4 position : TORQUE_POSITION; - float4 texCoord : TEXCOORD0; + float2 texCoord : TEXCOORD0; float4 color : COLOR0; }; diff --git a/Templates/Empty/game/shaders/common/precipV.hlsl b/Templates/Empty/game/shaders/common/precipV.hlsl index c1e6d7c000..3c40942c72 100644 --- a/Templates/Empty/game/shaders/common/precipV.hlsl +++ b/Templates/Empty/game/shaders/common/precipV.hlsl @@ -32,13 +32,14 @@ struct Vert { float3 position : POSITION; - float4 texCoord : TEXCOORD0; + float2 texCoord : TEXCOORD0; + float4 color : COLOR0; }; struct Conn { float4 position : TORQUE_POSITION; - float4 texCoord : TEXCOORD0; + float2 texCoord : TEXCOORD0; float4 color : COLOR0; }; diff --git a/Templates/Full/game/shaders/common/precipP.hlsl b/Templates/Full/game/shaders/common/precipP.hlsl index 0f5325154d..069ba4992b 100644 --- a/Templates/Full/game/shaders/common/precipP.hlsl +++ b/Templates/Full/game/shaders/common/precipP.hlsl @@ -29,7 +29,7 @@ struct Conn { float4 position : TORQUE_POSITION; - float4 texCoord : TEXCOORD0; + float2 texCoord : TEXCOORD0; float4 color : COLOR0; }; diff --git a/Templates/Full/game/shaders/common/precipV.hlsl b/Templates/Full/game/shaders/common/precipV.hlsl index c1e6d7c000..3c40942c72 100644 --- a/Templates/Full/game/shaders/common/precipV.hlsl +++ b/Templates/Full/game/shaders/common/precipV.hlsl @@ -32,13 +32,14 @@ struct Vert { float3 position : POSITION; - float4 texCoord : TEXCOORD0; + float2 texCoord : TEXCOORD0; + float4 color : COLOR0; }; struct Conn { float4 position : TORQUE_POSITION; - float4 texCoord : TEXCOORD0; + float2 texCoord : TEXCOORD0; float4 color : COLOR0; }; From c67ba876d0cc0e7c6139a797b37faf49dbf8cea5 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 27 Jun 2016 13:48:11 -0500 Subject: [PATCH 305/324] raycast division safety - corrects issues with awesomium and the guionobject resources relating to WYSIWYG casts. --- Engine/source/ts/tsCollision.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Engine/source/ts/tsCollision.cpp b/Engine/source/ts/tsCollision.cpp index bb57bf1c58..8ab2505096 100644 --- a/Engine/source/ts/tsCollision.cpp +++ b/Engine/source/ts/tsCollision.cpp @@ -1630,7 +1630,12 @@ bool TSMesh::castRayOpcode( const Point3F &s, const Point3F &e, RayInfo *info, T } // slerp - Point3F s = ( (max - min) - (facePoint - min) ) / (max - min); + Point3F divSafe = (max - min); + if (divSafe.x == 0.0f) divSafe.x = POINT_EPSILON; + if (divSafe.y == 0.0f) divSafe.y = POINT_EPSILON; + if (divSafe.z == 0.0f) divSafe.z = POINT_EPSILON; + + Point3F s = ( (max - min) - (facePoint - min) ) / divSafe; // compute axis S32 bestAxis = 0; From 47366068c1f99cf042fcb7e7b1dcc96af04c4f4a Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 27 Jun 2016 19:35:40 -0500 Subject: [PATCH 306/324] revised torque_nsight_workaround --- Engine/source/gfx/gl/gfxGLCardProfiler.cpp | 4 ++++ Engine/source/gfx/gl/gfxGLDevice.cpp | 3 --- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp index 760a0d5ed7..09ddfb53af 100644 --- a/Engine/source/gfx/gl/gfxGLCardProfiler.cpp +++ b/Engine/source/gfx/gl/gfxGLCardProfiler.cpp @@ -66,7 +66,11 @@ void GFXGLCardProfiler::setupCardCapabilities() setCapability("GL_EXT_texture_filter_anisotropic", gglHasExtension(EXT_texture_filter_anisotropic)); // Check for buffer storage +#ifdef TORQUE_NSIGHT_WORKAROUND + setCapability("GL_ARB_buffer_storage", false); +#else setCapability("GL_ARB_buffer_storage", gglHasExtension(ARB_buffer_storage)); +#endif // Check for shader model 5.0 setCapability("GL_ARB_gpu_shader5", gglHasExtension(ARB_gpu_shader5)); diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 190de2f5a8..e3a1907bcd 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -165,9 +165,6 @@ void GFXGLDevice::initGLState() glBindFramebuffer = &_t3d_glBindFramebuffer; } -#ifdef TORQUE_NSIGHT_WORKAROUND - __GLEW_ARB_buffer_storage = false; -#endif #if TORQUE_DEBUG if( gglHasExtension(ARB_debug_output) ) { From c822d1310935eae4afaa28bd2c399bdd4bd2c591 Mon Sep 17 00:00:00 2001 From: John3 Date: Wed, 29 Jun 2016 19:16:25 -0500 Subject: [PATCH 307/324] added deleteDemo function --- .../Full/game/core/art/gui/RecordingsDlg.gui | 1 + .../Full/game/core/scripts/client/recordings.cs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Templates/Full/game/core/art/gui/RecordingsDlg.gui b/Templates/Full/game/core/art/gui/RecordingsDlg.gui index 28db1ae309..0e863fff58 100644 --- a/Templates/Full/game/core/art/gui/RecordingsDlg.gui +++ b/Templates/Full/game/core/art/gui/RecordingsDlg.gui @@ -217,6 +217,7 @@ profile = "GuiButtonProfile"; visible = "1"; active = "1"; + command = "deleteDemoRecord();"; tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; diff --git a/Templates/Full/game/core/scripts/client/recordings.cs b/Templates/Full/game/core/scripts/client/recordings.cs index 14f1a45d3b..5609f0337a 100644 --- a/Templates/Full/game/core/scripts/client/recordings.cs +++ b/Templates/Full/game/core/scripts/client/recordings.cs @@ -134,3 +134,19 @@ function demoPlaybackComplete() Canvas.pushDialog(RecordingsDlg); } + +function deleteDemoRecord() +{ + %sel = RecordingsDlgList.getSelectedId(); + %rowText = RecordingsDlgList.getRowTextById(%sel); + %file = $currentMod @ "/recordings/" @ getField(%rowText, 0) @ ".rec"; + + if(!isfile(%file)) + { + RecordingsDlgList.removeRowById(%sel); + return; + } + + RecordingsDlgList.removeRowById(%sel); + fileDelete(%file); +} From 100e18d232ee0234f6842d345a54b6fb34db30d0 Mon Sep 17 00:00:00 2001 From: John3 Date: Wed, 29 Jun 2016 19:21:01 -0500 Subject: [PATCH 308/324] forget the empty template XD added delete demo function --- .../Empty/game/core/art/gui/RecordingsDlg.gui | 1 + .../Empty/game/core/scripts/client/recordings.cs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Templates/Empty/game/core/art/gui/RecordingsDlg.gui b/Templates/Empty/game/core/art/gui/RecordingsDlg.gui index 28db1ae309..0e863fff58 100644 --- a/Templates/Empty/game/core/art/gui/RecordingsDlg.gui +++ b/Templates/Empty/game/core/art/gui/RecordingsDlg.gui @@ -217,6 +217,7 @@ profile = "GuiButtonProfile"; visible = "1"; active = "1"; + command = "deleteDemoRecord();"; tooltipProfile = "GuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; diff --git a/Templates/Empty/game/core/scripts/client/recordings.cs b/Templates/Empty/game/core/scripts/client/recordings.cs index 14f1a45d3b..5609f0337a 100644 --- a/Templates/Empty/game/core/scripts/client/recordings.cs +++ b/Templates/Empty/game/core/scripts/client/recordings.cs @@ -134,3 +134,19 @@ function demoPlaybackComplete() Canvas.pushDialog(RecordingsDlg); } + +function deleteDemoRecord() +{ + %sel = RecordingsDlgList.getSelectedId(); + %rowText = RecordingsDlgList.getRowTextById(%sel); + %file = $currentMod @ "/recordings/" @ getField(%rowText, 0) @ ".rec"; + + if(!isfile(%file)) + { + RecordingsDlgList.removeRowById(%sel); + return; + } + + RecordingsDlgList.removeRowById(%sel); + fileDelete(%file); +} From 36ec6c1b59285a3728873913ff8e76d16cbb8f13 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 30 Jun 2016 15:51:03 -0500 Subject: [PATCH 309/324] New: GuiBitmapBarCtrl clipped bitmap. by default clips the right hand side based on (the percent entry/100). options: vertical clips the bottom flipClip inverts direction (so vertical off would remove bits from the left, vertical on from the top) --- .../source/gui/controls/guiBitmapBarCtrl.cpp | 100 ++++++++++++++++++ Engine/source/gui/controls/guiBitmapBarCtrl.h | 49 +++++++++ 2 files changed, 149 insertions(+) create mode 100644 Engine/source/gui/controls/guiBitmapBarCtrl.cpp create mode 100644 Engine/source/gui/controls/guiBitmapBarCtrl.h diff --git a/Engine/source/gui/controls/guiBitmapBarCtrl.cpp b/Engine/source/gui/controls/guiBitmapBarCtrl.cpp new file mode 100644 index 0000000000..441bcb26cc --- /dev/null +++ b/Engine/source/gui/controls/guiBitmapBarCtrl.cpp @@ -0,0 +1,100 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "gui/controls/guiBitmapBarCtrl.h" + +#include "console/console.h" +#include "console/consoleTypes.h" +#include "console/engineAPI.h" +#include "gfx/gfxDevice.h" +#include "gfx/gfxDrawUtil.h" + + + +IMPLEMENT_CONOBJECT(GuiBitmapBarCtrl); + +GuiBitmapBarCtrl::GuiBitmapBarCtrl(void) +{ + mPercent = 100.0; + mVertical = false; + mFlipClip = false; +} + + +void GuiBitmapBarCtrl::initPersistFields() +{ + addField("percent", TypeF32, Offset(mPercent, GuiBitmapBarCtrl), + "% shown"); + addField("vertical", TypeBool, Offset(mVertical, GuiBitmapBarCtrl), + "If true, the bitmap is clipped vertically."); + addField("flipClip", TypeBool, Offset(mFlipClip, GuiBitmapBarCtrl), + "If true, the bitmap is clipped in the oposite direction."); + Parent::initPersistFields(); + removeField("wrap"); +} + +void GuiBitmapBarCtrl::onRender(Point2I offset, const RectI &updateRect) +{ + if (mTextureObject) + { + GFX->getDrawUtil()->clearBitmapModulation(); + F32 pct = (mPercent / 100.0); + GFXTextureObject* texture = mTextureObject; + Point2I modifiedSRC; + modifiedSRC.x = mVertical ? (F32)texture->mBitmapSize.x : (F32)(texture->mBitmapSize.x*pct); + modifiedSRC.y = mVertical ? (F32)(texture->mBitmapSize.y*pct) : (F32)texture->mBitmapSize.y; + RectI srcRegion; + Point2I offsetSRC = Point2I::Zero; + if (mFlipClip) + { + offsetSRC.x = texture->mBitmapSize.x - modifiedSRC.x; + offsetSRC.y = texture->mBitmapSize.y - modifiedSRC.y; + } + + srcRegion.set(offsetSRC, modifiedSRC); + + RectI destRegion; + Point2I modifiedDest; + modifiedDest.x = mVertical ? (F32)updateRect.len_x() : (F32)(updateRect.len_x()*pct); + modifiedDest.y = mVertical ? (F32)(updateRect.len_y()*pct) : (F32)updateRect.len_y(); + + Point2I offsetDest = Point2I::Zero; + if (mFlipClip) + { + offsetDest.x = updateRect.len_x() - modifiedDest.x; + offsetDest.y = updateRect.len_y() - modifiedDest.y; + } + offsetDest += offset; + destRegion.set(offsetDest, modifiedDest); + + GFX->getDrawUtil()->drawBitmapStretchSR(texture, destRegion, srcRegion, GFXBitmapFlip_None, GFXTextureFilterLinear, false); + } + + if (mProfile->mBorder || !mTextureObject) + { + RectI rect(offset, getExtent()); + GFX->getDrawUtil()->drawRect(rect, mProfile->mBorderColor); + } + + renderChildControls(offset, updateRect); +} \ No newline at end of file diff --git a/Engine/source/gui/controls/guiBitmapBarCtrl.h b/Engine/source/gui/controls/guiBitmapBarCtrl.h new file mode 100644 index 0000000000..5450e0df07 --- /dev/null +++ b/Engine/source/gui/controls/guiBitmapBarCtrl.h @@ -0,0 +1,49 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GUIBITMAPBARCTRL_H_ +#define _GUIBITMAPBARCTRL_H_ + +#ifndef _GUIBITMAPCTRL_H_ +#include "gui/controls/guiBitmapCtrl.h" +#endif + +class GuiBitmapBarCtrl : public GuiBitmapCtrl +{ +public: + typedef GuiBitmapCtrl Parent; + +protected: + F32 mPercent; + bool mVertical; + bool mFlipClip; +public: + GuiBitmapBarCtrl(); + static void initPersistFields(); + void onRender(Point2I offset, const RectI &updateRect); + + DECLARE_CONOBJECT(GuiBitmapBarCtrl); + DECLARE_CATEGORY("Gui Images"); + DECLARE_DESCRIPTION("A control that clips a bitmap based on %."); +}; + +#endif \ No newline at end of file From 7d82877f4e809d9e3ff981adc2d8408f1ba699ae Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sat, 2 Jul 2016 17:08:28 +1000 Subject: [PATCH 310/324] GFXD3D9Device generic shader support. --- Engine/source/gfx/D3D9/gfxD3D9Device.cpp | 83 ++++++++++++++++-------- Engine/source/gfx/D3D9/gfxD3D9Device.h | 6 +- 2 files changed, 60 insertions(+), 29 deletions(-) diff --git a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp index c6610ed14a..6c09beedd5 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Device.cpp +++ b/Engine/source/gfx/D3D9/gfxD3D9Device.cpp @@ -33,6 +33,7 @@ #include "gfx/D3D9/gfxD3D9OcclusionQuery.h" #include "gfx/D3D9/gfxD3D9Shader.h" #include "windowManager/platformWindow.h" +#include "materials/shaderData.h" #ifndef TORQUE_OS_XENON # include "windowManager/win32/win32Window.h" #endif @@ -83,6 +84,9 @@ GFXD3D9Device::GFXD3D9Device( LPDIRECT3D9 d3d, U32 index ) mOcclusionQuerySupported = false; + for (U32 i = 0; i < GS_COUNT; ++i) + mModelViewProjSC[i] = NULL; + // Set up the Enum translation tables GFXD3D9EnumTranslate::init(); @@ -139,40 +143,65 @@ GFXD3D9Device::~GFXD3D9Device() } //------------------------------------------------------------------------------ -// setupGenericShaders - This function is totally not needed on PC because there -// is fixed-function support in D3D9 +// setupGenericShaders //------------------------------------------------------------------------------ inline void GFXD3D9Device::setupGenericShaders( GenericShaderType type /* = GSColor */ ) { -#ifdef WANT_TO_SIMULATE_UI_ON_360 - if( mGenericShader[GSColor] == NULL ) - { - mGenericShader[GSColor] = createShader( "shaders/common/genericColorV.hlsl", - "shaders/common/genericColorP.hlsl", - 2.f ); + AssertFatal(type != GSTargetRestore, ""); //not used - mGenericShader[GSModColorTexture] = createShader( "shaders/common/genericModColorTextureV.hlsl", - "shaders/common/genericModColorTextureP.hlsl", - 2.f ); - - mGenericShader[GSAddColorTexture] = createShader( "shaders/common/genericAddColorTextureV.hlsl", - "shaders/common/genericAddColorTextureP.hlsl", - 2.f ); + if (mGenericShader[GSColor] == NULL) + { + ShaderData *shaderData; + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/colorV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/colorP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSColor] = shaderData->getShader(); + mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer(); + mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/modColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/modColorTextureP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSModColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/addColorTextureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/addColorTextureP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSAddColorTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer(); + mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + shaderData = new ShaderData(); + shaderData->setField("DXVertexShaderFile", "shaders/common/fixedFunction/textureV.hlsl"); + shaderData->setField("DXPixelShaderFile", "shaders/common/fixedFunction/textureP.hlsl"); + shaderData->setField("pixVersion", "3.0"); + shaderData->registerObject(); + mGenericShader[GSTexture] = shaderData->getShader(); + mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer(); + mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle("$modelView"); + Sim::getRootGroup()->addObject(shaderData); + + //Force an update + mViewportDirty = true; } - mGenericShader[type]->process(); + MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize]; + mGenericShaderBuffer[type]->setSafe(mModelViewProjSC[type], tempMatrix); - MatrixF world, view, proj; - mWorldMatrix[mWorldStackSize].transposeTo( world ); - mViewMatrix.transposeTo( view ); - mProjectionMatrix.transposeTo( proj ); - - mTempMatrix = world * view * proj; - - setVertexShaderConstF( VC_WORLD_PROJ, (F32 *)&mTempMatrix, 4 ); -#else - disableShaders(); -#endif + setShader(mGenericShader[type]); + setShaderConstBuffer(mGenericShaderBuffer[type]); } //----------------------------------------------------------------------------- diff --git a/Engine/source/gfx/D3D9/gfxD3D9Device.h b/Engine/source/gfx/D3D9/gfxD3D9Device.h index ef1c9be5dd..dfb880915d 100644 --- a/Engine/source/gfx/D3D9/gfxD3D9Device.h +++ b/Engine/source/gfx/D3D9/gfxD3D9Device.h @@ -150,6 +150,10 @@ class GFXD3D9Device : public GFXDevice IDirect3DVertexShader9 *mLastVertShader; IDirect3DPixelShader9 *mLastPixShader; + GFXShaderRef mGenericShader[GS_COUNT]; + GFXShaderConstBufferRef mGenericShaderBuffer[GS_COUNT]; + GFXShaderConstHandle *mModelViewProjSC[GS_COUNT]; + S32 mCreateFenceType; LPDIRECT3D9 mD3D; ///< D3D Handle @@ -326,8 +330,6 @@ class GFXD3D9Device : public GFXDevice /// Reset virtual void reset( D3DPRESENT_PARAMETERS &d3dpp ) = 0; - GFXShaderRef mGenericShader[GS_COUNT]; - virtual void setupGenericShaders( GenericShaderType type = GSColor ); // Function only really used on the, however a centralized function for From f71e13a686b2cba809d5de06303ecceb1bfcaf12 Mon Sep 17 00:00:00 2001 From: John3 Date: Sun, 3 Jul 2016 07:23:45 -0500 Subject: [PATCH 311/324] Fix bug #1664 by @Areloch --- Engine/source/T3D/tsStatic.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index 6dd1e51e1f..be0da4cf85 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -860,6 +860,7 @@ void TSStatic::unpackUpdate(NetConnection *con, BitStream *stream) stream->read(&mRenderNormalScalar); stream->read(&mForceDetail); + mPlayAmbient = stream->readFlag(); } mUseAlphaFade = stream->readFlag(); From 818b617972eea37893747922e182d0575d798b8e Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 4 Jul 2016 16:01:49 -0500 Subject: [PATCH 312/324] Implements the right-mouse popup menus in the editor in SDL to make it match to Windows. --- Engine/source/gui/editor/guiPopupMenuCtrl.cpp | 184 ++++++++++++++++++ Engine/source/gui/editor/guiPopupMenuCtrl.h | 85 ++++++++ .../menus/guiPlatformGenericMenuBar.h | 29 +++ .../source/platformSDL/menus/menuBarSDL.cpp | 26 +-- .../source/platformSDL/menus/popupMenuSDL.cpp | 146 +++++++++++++- 5 files changed, 443 insertions(+), 27 deletions(-) create mode 100644 Engine/source/gui/editor/guiPopupMenuCtrl.cpp create mode 100644 Engine/source/gui/editor/guiPopupMenuCtrl.h create mode 100644 Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h diff --git a/Engine/source/gui/editor/guiPopupMenuCtrl.cpp b/Engine/source/gui/editor/guiPopupMenuCtrl.cpp new file mode 100644 index 0000000000..36e6932030 --- /dev/null +++ b/Engine/source/gui/editor/guiPopupMenuCtrl.cpp @@ -0,0 +1,184 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "gui/editor/guiPopupMenuCtrl.h" +#include "gfx/gfxDrawUtil.h" +#include "gfx/primBuilder.h" +#include "gui/core/guiCanvas.h" + +GuiPopupMenuBackgroundCtrl::GuiPopupMenuBackgroundCtrl(GuiPopupMenuTextListCtrl *textList) +{ + mTextList = textList; + mTextList->mBackground = this; +} + +void GuiPopupMenuBackgroundCtrl::onMouseDown(const GuiEvent &event) +{ + mTextList->setSelectedCell(Point2I(-1, -1)); + close(); +} + +void GuiPopupMenuBackgroundCtrl::onMouseMove(const GuiEvent &event) +{ +} + +void GuiPopupMenuBackgroundCtrl::onMouseDragged(const GuiEvent &event) +{ +} + +void GuiPopupMenuBackgroundCtrl::close() +{ + getRoot()->removeObject(this); +} + +GuiPopupMenuTextListCtrl::GuiPopupMenuTextListCtrl() +{ + isSubMenu = false; // Added + mMenu = NULL; + mMenuBar = NULL; + mPopup = NULL; +} + +void GuiPopupMenuTextListCtrl::onRenderCell(Point2I offset, Point2I cell, bool selected, bool mouseOver) +{ + if (dStrcmp(mList[cell.y].text + 3, "-\t")) // Was: dStrcmp(mList[cell.y].text + 2, "-\t")) but has been changed to take into account the submenu flag + Parent::onRenderCell(offset, cell, selected, mouseOver); + else + { + S32 yp = offset.y + mCellSize.y / 2; + GFX->getDrawUtil()->drawLine(offset.x, yp, offset.x + mCellSize.x, yp, ColorI(128, 128, 128)); + GFX->getDrawUtil()->drawLine(offset.x, yp + 1, offset.x + mCellSize.x, yp + 1, ColorI(255, 255, 255)); + } + // now see if there's a bitmap... + U8 idx = mList[cell.y].text[0]; + if (idx != 1) + { + // there's a bitmap... + U32 index = U32(idx - 2) * 3; + if (!mList[cell.y].active) + index += 2; + else if (selected || mouseOver) + index++; + + if (mProfile->mBitmapArrayRects.size() > index) + { + RectI rect = mProfile->mBitmapArrayRects[index]; + Point2I off = maxBitmapSize - rect.extent; + off /= 2; + + GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->drawBitmapSR(mProfile->mTextureObject, offset + off, rect); + } + } + + // Check if this is a submenu + idx = mList[cell.y].text[1]; + if (idx != 1) + { + // This is a submenu, so draw an arrow + S32 left = offset.x + mCellSize.x - 12; + S32 right = left + 8; + S32 top = mCellSize.y / 2 + offset.y - 4; + S32 bottom = top + 8; + S32 middle = top + 4; + + PrimBuild::begin(GFXTriangleList, 3); + if (selected || mouseOver) + PrimBuild::color(mProfile->mFontColorHL); + else + PrimBuild::color(mProfile->mFontColor); + + PrimBuild::vertex2i(left, top); + PrimBuild::vertex2i(right, middle); + PrimBuild::vertex2i(left, bottom); + PrimBuild::end(); + } +} + +bool GuiPopupMenuTextListCtrl::onKeyDown(const GuiEvent &event) +{ + //if the control is a dead end, don't process the input: + if (!mVisible || !mActive || !mAwake) + return false; + + //see if the key down is a or not + if (event.modifier == 0) + { + if (event.keyCode == KEY_RETURN) + { + mBackground->close(); + return true; + } + else if (event.keyCode == KEY_ESCAPE) + { + mSelectedCell.set(-1, -1); + mBackground->close(); + return true; + } + } + + //otherwise, pass the event to it's parent + return Parent::onKeyDown(event); +} + +void GuiPopupMenuTextListCtrl::onMouseDown(const GuiEvent &event) +{ + Parent::onMouseDown(event); +} + +void GuiPopupMenuTextListCtrl::onMouseUp(const GuiEvent &event) +{ + Parent::onMouseUp(event); + + S32 selectionIndex = getSelectedCell().y; + + if (selectionIndex != -1) + { + GuiMenuBar::MenuItem *list = mMenu->firstMenuItem; + + while (selectionIndex && list) + { + list = list->nextMenuItem; + selectionIndex--; + } + if (list) + { + if (list->enabled) + dAtob(Con::executef(mPopup, "onSelectItem", Con::getIntArg(getSelectedCell().y), list->text ? list->text : "")); + } + } + + mSelectedCell.set(-1, -1); + mBackground->close(); +} + +void GuiPopupMenuTextListCtrl::onCellHighlighted(Point2I cell) +{ + // If this text list control is part of a submenu, then don't worry about + // passing this along + if (!isSubMenu) + { + RectI globalbounds(getBounds()); + Point2I globalpoint = localToGlobalCoord(globalbounds.point); + globalbounds.point = globalpoint; + } +} \ No newline at end of file diff --git a/Engine/source/gui/editor/guiPopupMenuCtrl.h b/Engine/source/gui/editor/guiPopupMenuCtrl.h new file mode 100644 index 0000000000..c26fa855de --- /dev/null +++ b/Engine/source/gui/editor/guiPopupMenuCtrl.h @@ -0,0 +1,85 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#pragma once + +#ifndef GUI_POPUP_MENU_CTRL_H +#define GUI_POPUP_MENU_CTRL_H + +#ifndef _GUITEXTLISTCTRL_H_ +#include "gui/controls/guiTextListCtrl.h" +#endif + +#ifndef _GUIMENUBAR_H_ +#include "gui/editor/guiMenuBar.h" +#endif + +#ifndef _POPUPMENU_H_ +#include "platform/menus/popupMenu.h" +#endif + +class GuiPopupMenuBackgroundCtrl; + +class GuiPopupMenuTextListCtrl : public GuiTextListCtrl +{ + friend class GuiPopupMenuBackgroundCtrl; + +private: + typedef GuiTextListCtrl Parent; + + GuiPopupMenuBackgroundCtrl* mBackground; + +public: + bool isSubMenu; // Indicates that this text list is in a submenu + Point2I maxBitmapSize; + GuiMenuBar::Menu* mMenu; + GuiMenuBar* mMenuBar; + PopupMenu* mPopup; + + GuiPopupMenuTextListCtrl(); + + // GuiControl overloads: + bool onKeyDown(const GuiEvent &event); + void onMouseDown(const GuiEvent &event); + void onMouseUp(const GuiEvent &event); + void onRenderCell(Point2I offset, Point2I cell, bool selected, bool mouseOver); + + virtual void onCellHighlighted(Point2I cell); // Added +}; + +class GuiPopupMenuBackgroundCtrl : public GuiControl +{ + typedef GuiControl Parent; + +protected: + GuiPopupMenuTextListCtrl *mTextList; + +public: + GuiPopupMenuBackgroundCtrl(GuiPopupMenuTextListCtrl* textList); + void onMouseDown(const GuiEvent &event); + void onMouseMove(const GuiEvent &event); + void onMouseDragged(const GuiEvent &event); + + void close(); +}; + +#endif \ No newline at end of file diff --git a/Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h b/Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h new file mode 100644 index 0000000000..d3ad36e920 --- /dev/null +++ b/Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h @@ -0,0 +1,29 @@ +#pragma once + +#include "gui/editor/guiMenuBar.h" +#include "platformSDL/menus/PlatformSDLPopupMenuData.h" +#include "platform/menus/popupMenu.h" + +class GuiPlatformGenericMenuBar : public GuiMenuBar +{ + typedef GuiMenuBar Parent; +public: + DECLARE_CONOBJECT(GuiPlatformGenericMenuBar); + + virtual void menuItemSelected(Menu *menu, MenuItem *item) + { + AssertFatal(menu && item, ""); + + PopupMenu *popupMenu = PlatformPopupMenuData::mMenuMap[menu]; + AssertFatal(popupMenu, ""); + + popupMenu->handleSelect(item->id); + + Parent::menuItemSelected(menu, item); + } + +protected: + /// menu id / item id + Map, String> mCmds; + +}; \ No newline at end of file diff --git a/Engine/source/platformSDL/menus/menuBarSDL.cpp b/Engine/source/platformSDL/menus/menuBarSDL.cpp index 211f7bb07d..a0ddb23708 100644 --- a/Engine/source/platformSDL/menus/menuBarSDL.cpp +++ b/Engine/source/platformSDL/menus/menuBarSDL.cpp @@ -31,6 +31,8 @@ #include "platformSDL/menus/PlatformSDLPopupMenuData.h" +#include "platformSDL/menus/guiPlatformGenericMenuBar.h" + #ifdef TORQUE_SDL //----------------------------------------------------------------------------- @@ -44,30 +46,6 @@ Map PlatformPopupMenuData::mMenuMap; -class GuiPlatformGenericMenuBar : public GuiMenuBar -{ - typedef GuiMenuBar Parent; -public: - DECLARE_CONOBJECT(GuiPlatformGenericMenuBar); - - virtual void menuItemSelected(Menu *menu, MenuItem *item) - { - AssertFatal(menu && item, ""); - - PopupMenu *popupMenu = PlatformPopupMenuData::mMenuMap[ menu ]; - AssertFatal(popupMenu, ""); - - popupMenu->handleSelect( item->id ); - - Parent::menuItemSelected(menu, item); - } - -protected: - /// menu id / item id - Map, String> mCmds; - -}; - IMPLEMENT_CONOBJECT(GuiPlatformGenericMenuBar); //----------------------------------------------------------------------------- diff --git a/Engine/source/platformSDL/menus/popupMenuSDL.cpp b/Engine/source/platformSDL/menus/popupMenuSDL.cpp index 3d196e1a28..154e16f329 100644 --- a/Engine/source/platformSDL/menus/popupMenuSDL.cpp +++ b/Engine/source/platformSDL/menus/popupMenuSDL.cpp @@ -23,7 +23,7 @@ #ifdef TORQUE_SDL #include "platform/menus/popupMenu.h" -#include "platform/menus//menuBar.h" +#include "platform/menus/menuBar.h" #include "console/consoleTypes.h" #include "gui/core/guiCanvas.h" #include "core/util/safeDelete.h" @@ -37,10 +37,25 @@ #include "platformSDL/menus/PlatformSDLPopupMenuData.h" #include "console/engineAPI.h" +#include "platformSDL/menus/guiPlatformGenericMenuBar.h" +#include "gui/editor/guiPopupMenuCtrl.h" + ////////////////////////////////////////////////////////////////////////// // Platform Menu Data ////////////////////////////////////////////////////////////////////////// - +GuiPlatformGenericMenuBar* findMenuBarCtrl() +{ + GuiControl* control; + Sim::findObject("PlatformGenericMenubar", control); + AssertFatal(control, ""); + if (!control) + return NULL; + + GuiPlatformGenericMenuBar* menuBar; + menuBar = dynamic_cast(control->findObjectByInternalName(StringTable->insert("menubar"), true)); + AssertFatal(menuBar, ""); + return menuBar; +} ////////////////////////////////////////////////////////////////////////// @@ -215,8 +230,133 @@ bool PopupMenu::handleSelect(U32 command, const char *text /* = NULL */) void PopupMenu::showPopup(GuiCanvas *owner, S32 x /* = -1 */, S32 y /* = -1 */) { - if(owner == NULL || isAttachedToMenuBar()) + if(owner == NULL) return; + + GuiControl* editorGui; + Sim::findObject("EditorGui", editorGui); + + if (editorGui) + { + GuiPopupMenuTextListCtrl* textList; + GuiPopupMenuBackgroundCtrl* backgroundCtrl; + Sim::findObject("PopUpMenuControl", backgroundCtrl); + + GuiControlProfile* profile; + Sim::findObject("GuiMenubarProfile", profile); + + if (!profile) + return; + + if (!backgroundCtrl) + { + textList = new GuiPopupMenuTextListCtrl(); + + textList->registerObject(); + + backgroundCtrl = new GuiPopupMenuBackgroundCtrl(textList); + + backgroundCtrl->registerObject("PopUpMenuControl"); + + textList->setControlProfile(profile); + + backgroundCtrl->addObject(textList); + } + else + { + textList = dynamic_cast(backgroundCtrl->first()); + } + + if (!backgroundCtrl || !textList) + return; + + owner->pushDialogControl(backgroundCtrl, 10); + + backgroundCtrl->setExtent(editorGui->getExtent()); + + textList->clear(); + textList->mMenu = mData->mMenuGui; + textList->mMenuBar = findMenuBarCtrl(); + textList->mPopup = this; + + S32 textWidth = 0, width = 0; + S32 acceleratorWidth = 0; + GFont *font = profile->mFont; + + Point2I maxBitmapSize = Point2I(0, 0); + + S32 numBitmaps = profile->mBitmapArrayRects.size(); + if (numBitmaps) + { + RectI *bitmapBounds = profile->mBitmapArrayRects.address(); + for (S32 i = 0; i < numBitmaps; i++) + { + if (bitmapBounds[i].extent.x > maxBitmapSize.x) + maxBitmapSize.x = bitmapBounds[i].extent.x; + if (bitmapBounds[i].extent.y > maxBitmapSize.y) + maxBitmapSize.y = bitmapBounds[i].extent.y; + } + } + + for (GuiMenuBar::MenuItem *walk = mData->mMenuGui->firstMenuItem; walk; walk = walk->nextMenuItem) + { + if (!walk->visible) + continue; + + S32 iTextWidth = font->getStrWidth(walk->text); + S32 iAcceleratorWidth = walk->accelerator ? font->getStrWidth(walk->accelerator) : 0; + + if (iTextWidth > textWidth) + textWidth = iTextWidth; + if (iAcceleratorWidth > acceleratorWidth) + acceleratorWidth = iAcceleratorWidth; + } + width = textWidth + acceleratorWidth + maxBitmapSize.x * 2 + 2 + 4; + + textList->setCellSize(Point2I(width, font->getHeight() + 2)); + textList->clearColumnOffsets(); + textList->addColumnOffset(-1); // add an empty column in for the bitmap index. + textList->addColumnOffset(maxBitmapSize.x + 1); + textList->addColumnOffset(maxBitmapSize.x + 1 + textWidth + 4); + + U32 entryCount = 0; + + for (GuiMenuBar::MenuItem *walk = mData->mMenuGui->firstMenuItem; walk; walk = walk->nextMenuItem) + { + if (!walk->visible) + continue; + + char buf[512]; + + // If this menu item is a submenu, then set the isSubmenu to 2 to indicate + // an arrow should be drawn. Otherwise set the isSubmenu normally. + char isSubmenu = 1; + if (walk->isSubmenu) + isSubmenu = 2; + + char bitmapIndex = 1; + if (walk->bitmapIndex >= 0 && (walk->bitmapIndex * 3 <= profile->mBitmapArrayRects.size())) + bitmapIndex = walk->bitmapIndex + 2; + dSprintf(buf, sizeof(buf), "%c%c\t%s\t%s", bitmapIndex, isSubmenu, walk->text, walk->accelerator ? walk->accelerator : ""); + textList->addEntry(entryCount, buf); + + if (!walk->enabled) + textList->setEntryActive(entryCount, false); + + entryCount++; + } + + Point2I pos = owner->getCursorPos(); + textList->setPosition(pos); + + //nudge in if we'd overshoot the screen + S32 widthDiff = (textList->getPosition().x + textList->getExtent().x) - backgroundCtrl->getWidth(); + if (widthDiff > 0) + { + Point2I popupPos = textList->getPosition(); + textList->setPosition(popupPos.x - widthDiff, popupPos.y); + } + } } ////////////////////////////////////////////////////////////////////////// From 906cc0ef3979b218d2f69ee1c1c338fbbe985ec5 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 4 Jul 2016 16:02:49 -0500 Subject: [PATCH 313/324] Forgot copyright header. --- .../menus/guiPlatformGenericMenuBar.h | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h b/Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h index d3ad36e920..b2129a8b17 100644 --- a/Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h +++ b/Engine/source/platformSDL/menus/guiPlatformGenericMenuBar.h @@ -1,3 +1,25 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + #pragma once #include "gui/editor/guiMenuBar.h" From 34ad0c39d5e5cefd70020bffe669808ea1ae5549 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 4 Jul 2016 16:19:08 -0500 Subject: [PATCH 314/324] Removes the body for the physicsBody's findContact function until it's ready to be finished/used with the entity/component stuff. This corrects an error for PhysX compilation due to unready code being inadvertently added in with the e/c update. --- Engine/source/T3D/physics/bullet/btBody.cpp | 58 -------------------- Engine/source/T3D/physics/physx3/px3Body.cpp | 49 +---------------- 2 files changed, 2 insertions(+), 105 deletions(-) diff --git a/Engine/source/T3D/physics/bullet/btBody.cpp b/Engine/source/T3D/physics/bullet/btBody.cpp index c71a0cc122..f897858544 100644 --- a/Engine/source/T3D/physics/bullet/btBody.cpp +++ b/Engine/source/T3D/physics/bullet/btBody.cpp @@ -383,64 +383,6 @@ void BtBody::findContact(SceneObject **contactObject, VectorF *contactNormal, Vector *outOverlapObjects) const { - AssertFatal(mActor, "BtPlayer::findContact - The controller is null!"); - - VectorF normal; - F32 maxDot = -1.0f; - - // Go thru the contact points... get the first contact. - //mWorld->getDynamicsWorld()->computeOverlappingPairs(); - btOverlappingPairCache *pairCache = mWorld->getDynamicsWorld()->getBroadphase()->getOverlappingPairCache(); - - btBroadphasePairArray& pairArray = pairCache->getOverlappingPairArray(); - U32 numPairs = pairArray.size(); - btManifoldArray manifoldArray; - - for (U32 i = 0; i < numPairs; i++) - { - const btBroadphasePair &pair = pairArray[i]; - - btBroadphasePair *collisionPair = pairCache->findPair(pair.m_pProxy0, pair.m_pProxy1); - if (!collisionPair || !collisionPair->m_algorithm) - continue; - - btCollisionObject *other = (btCollisionObject*)pair.m_pProxy0->m_clientObject; - if (other == mActor) - other = (btCollisionObject*)pair.m_pProxy1->m_clientObject; - - // AssertFatal(!outOverlapObjects->contains(PhysicsUserData::getObject(other->getUserPointer())), - // "Got multiple pairs of the same object!"); - outOverlapObjects->push_back(PhysicsUserData::getObject(other->getUserPointer())); - - if (other->getCollisionFlags() & btCollisionObject::CF_NO_CONTACT_RESPONSE) - continue; - - manifoldArray.clear(); - collisionPair->m_algorithm->getAllContactManifolds(manifoldArray); - - for (U32 j = 0; j < manifoldArray.size(); j++) - { - btPersistentManifold *manifold = manifoldArray[j]; - btScalar directionSign = manifold->getBody0() == mActor ? 1.0f : -1.0f; - - for (U32 p = 0; p < manifold->getNumContacts(); p++) - { - const btManifoldPoint &pt = manifold->getContactPoint(p); - - // Test the normal... is it the most vertical one we got? - normal = btCast(pt.m_normalWorldOnB * directionSign); - F32 dot = mDot(normal, VectorF(0, 0, 1)); - if (dot > maxDot) - { - maxDot = dot; - - btCollisionObject *colObject = (btCollisionObject*)collisionPair->m_pProxy0->m_clientObject; - *contactObject = PhysicsUserData::getObject(colObject->getUserPointer()); - *contactNormal = normal; - } - } - } - } } void BtBody::moveKinematicTo(const MatrixF &transform) diff --git a/Engine/source/T3D/physics/physx3/px3Body.cpp b/Engine/source/T3D/physics/physx3/px3Body.cpp index 14094e956b..877e80af3f 100644 --- a/Engine/source/T3D/physics/physx3/px3Body.cpp +++ b/Engine/source/T3D/physics/physx3/px3Body.cpp @@ -421,54 +421,9 @@ void Px3Body::findContact(SceneObject **contactObject, VectorF *contactNormal, Vector *outOverlapObjects) const { - // Calculate the sweep motion... - F32 halfCapSize = mOriginOffset; - F32 halfSmallCapSize = halfCapSize * 0.8f; - F32 diff = halfCapSize - halfSmallCapSize; - - F32 distance = diff + mSkinWidth + 0.01f; - physx::PxVec3 dir(0, 0, -1); - - physx::PxScene *scene = mWorld->getScene(); - physx::PxHitFlags hitFlags(physx::PxHitFlag::eDEFAULT); - physx::PxQueryFilterData filterData(physx::PxQueryFlag::eDYNAMIC | physx::PxQueryFlag::eSTATIC); - filterData.data.word0 = PX3_DEFAULT; - physx::PxSweepHit sweepHit; - physx::PxRigidDynamic *actor = mController->getActor(); - physx::PxU32 shapeIndex; - - bool hit = physx::PxRigidBodyExt::linearSweepSingle(*actor, *scene, dir, distance, hitFlags, sweepHit, shapeIndex, filterData); - if (hit) - { - PhysicsUserData *data = PhysicsUserData::cast(sweepHit.actor->userData); - if (data) - { - *contactObject = data->getObject(); - *contactNormal = px3Cast(sweepHit.normal); - } - } - - // Check for overlapped objects ( triggers ) - - if (!outOverlapObjects) - return; - - filterData.data.word0 = PX3_TRIGGER; - - const physx::PxU32 bufferSize = 10; - physx::PxOverlapBufferN hitBuffer; - hit = scene->overlap(mGeometry, actor->getGlobalPose(), hitBuffer, filterData); - if (hit) - { - for (U32 i = 0; i < hitBuffer.nbTouches; i++) - { - PhysicsUserData *data = PhysicsUserData::cast(hitBuffer.touches[i].actor->userData); - if (data) - outOverlapObjects->push_back(data->getObject()); - } - } +} -}void Px3Body::moveKinematicTo(const MatrixF &transform) +void Px3Body::moveKinematicTo(const MatrixF &transform) { AssertFatal(mActor, "Px3Body::moveKinematicTo - The actor is null!"); From 01051e418293186d2869d652d26c411a5fd4ed7d Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 4 Jul 2016 20:44:42 -0500 Subject: [PATCH 315/324] new: guiAnimBitmapCtrl - works similar to the particle animation system. feed it x and y for how many frames in a spritesheet, and let her run. also supports: either specific frames, a range to play, or a mix (string) fps specification, (int) loop, (bool) pausing, (bool) reverse (bool) play (bool) and has callbacks for onLoop, onCompleted, and onFrame (index and actual frame passed along) --- .../source/gui/controls/guiAnimBitmapCtrl.cpp | 294 ++++++++++++++++++ .../source/gui/controls/guiAnimBitmapCtrl.h | 70 +++++ 2 files changed, 364 insertions(+) create mode 100644 Engine/source/gui/controls/guiAnimBitmapCtrl.cpp create mode 100644 Engine/source/gui/controls/guiAnimBitmapCtrl.h diff --git a/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp b/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp new file mode 100644 index 0000000000..ec7505a094 --- /dev/null +++ b/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp @@ -0,0 +1,294 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#include "platform/platform.h" +#include "gui/controls/guiAnimBitmapCtrl.h" + +#include "console/console.h" +#include "console/consoleTypes.h" +#include "console/engineAPI.h" +#include "gfx/gfxDevice.h" +#include "gfx/gfxDrawUtil.h" + + + +IMPLEMENT_CONOBJECT(guiAnimBitmapCtrl); + +IMPLEMENT_CALLBACK(guiAnimBitmapCtrl, onLoop, void, (), + (), "triggered when a loop completes"); + +IMPLEMENT_CALLBACK(guiAnimBitmapCtrl, onCompleted, void, (), + (), "triggered when an animation completes"); + +IMPLEMENT_CALLBACK(guiAnimBitmapCtrl, onFrame, void, (S32 frameIndex, S32 frame), + (frameIndex, frame), "triggered when a frame increments"); + +guiAnimBitmapCtrl::guiAnimBitmapCtrl(void) +{ + mAnimTexTiling = Point2I::One; + mAnimTexFramesString = NULL; + mAnimTexFrames.clear(); + mNumFrames = 0; + mCurFrameIndex = 0; + mFramesPerSec = 60; + mAnimateTexture = false; + mFrameTime = PlatformTimer::create(); + mLoop = true; + mPlay = true; + mReverse = false; + mFinished = false; +} + +guiAnimBitmapCtrl::~guiAnimBitmapCtrl(void) +{ + mAnimTexFrames.clear(); +} +void guiAnimBitmapCtrl::initPersistFields() +{ + addField("AnimTexTiling", TYPEID< Point2I >(), Offset(mAnimTexTiling, guiAnimBitmapCtrl), + "@brief The number of frames, in rows and columns stored in textureName " + "(when animateTexture is true).\n\n" + "A maximum of 256 frames can be stored in a single texture when using " + "mAnimTexTiling. Value should be \"NumColumns NumRows\", for example \"4 4\"."); + addProtectedField("AnimTexFrames", TYPEID< StringTableEntry >(), Offset(mAnimTexFramesString, guiAnimBitmapCtrl), &ptSetFrameRanges, &defaultProtectedGetFn, + "@brief A list of frames and/or frame ranges to use for particle " + "animation if animateTexture is true.\n\n" + "Each frame token must be separated by whitespace. A frame token must be " + "a positive integer frame number or a range of frame numbers separated " + "with a '-'. The range separator, '-', cannot have any whitspace around " + "it.\n\n" + "Ranges can be specified to move through the frames in reverse as well " + "as forward (eg. 19-14). Frame numbers exceeding the number of tiles will " + "wrap.\n" + "@tsexample\n" + "mAnimTexFrames = \"0-16 20 19 18 17 31-21\";\n" + "@endtsexample\n"); + + addField("loop", TypeBool, Offset(mLoop, guiAnimBitmapCtrl), "loop?"); + addField("play", TypeBool, Offset(mPlay, guiAnimBitmapCtrl), "play?"); + addField("reverse", TypeBool, Offset(mReverse, guiAnimBitmapCtrl), "play reversed?"); + addField("fps", TypeS32, Offset(mFramesPerSec, guiAnimBitmapCtrl), "Frame Rate"); + + addProtectedField("curFrame", TypeS32, Offset(mCurFrameIndex, guiAnimBitmapCtrl), &ptSetFrame, &defaultProtectedGetFn, "Index of currently Displaying Frame "); + + Parent::initPersistFields(); + removeField("wrap"); +} + +bool guiAnimBitmapCtrl::onAdd() +{ + if (Parent::onAdd() == false) + return false; + + if (!mAnimTexFramesString || !mAnimTexFramesString[0]) + { + S32 n_tiles = mAnimTexTiling.x * mAnimTexTiling.y - 1; + for (S32 i = 0; i <= n_tiles; i++) + mAnimTexFrames.push_back(i); + mNumFrames = mAnimTexFrames.size() - 1; + if (mCurFrameIndex > mNumFrames) + mCurFrameIndex = mNumFrames; + return true; + } + + return true; +} + +bool guiAnimBitmapCtrl::ptSetFrame(void *object, const char *index, const char *data) +{ + guiAnimBitmapCtrl *pData = static_cast(object); + + if (!pData->mNumFrames) + { + pData->mCurFrameIndex = 0; + return false; + } + + S32 val = dAtoi(data); + U32 i; + + if (val < 0) + { + pData->mCurFrameIndex = pData->mNumFrames; + return false; + } + else if (val > pData->mNumFrames) + { + pData->mCurFrameIndex = 0; + return false; + }; + + pData->mCurFrameIndex = val; + return true; +} + +bool guiAnimBitmapCtrl::ptSetFrameRanges(void *object, const char *index, const char *data) +{ + guiAnimBitmapCtrl *pData = static_cast(object); + + // Here we parse mAnimTexFramesString into byte-size frame numbers in mAnimTexFrames. + // Each frame token must be separated by whitespace. + // A frame token must be a positive integer frame number or a range of frame numbers + // separated with a '-'. + // The range separator, '-', cannot have any whitspace around it. + // Ranges can be specified to move through the frames in reverse as well as forward. + // Frame numbers exceeding the number of tiles will wrap. + // example: + // "0-16 20 19 18 17 31-21" + + S32 n_tiles = pData->mAnimTexTiling.x * pData->mAnimTexTiling.y - 1; + + pData->mAnimTexFrames.clear(); + + if (!data || !data[0]) + { + for (S32 i = 0; i <= n_tiles; i++) + pData->mAnimTexFrames.push_back(i); + pData->mNumFrames = pData->mAnimTexFrames.size() - 1; + if (pData->mCurFrameIndex > pData->mNumFrames) + pData->mCurFrameIndex = pData->mNumFrames; + return true; + } + char* tokCopy = new char[dStrlen(data) + 1]; + dStrcpy(tokCopy, data); + + char* currTok = dStrtok(tokCopy, " \t"); + while (currTok != NULL) + { + char* minus = dStrchr(currTok, '-'); + if (minus) + { + // add a range of frames + *minus = '\0'; + S32 range_a = dAtoi(currTok); + S32 range_b = dAtoi(minus + 1); + if (range_b < range_a) + { + // reverse frame range + for (S32 i = range_a; i >= range_b; i--) + pData->mAnimTexFrames.push_back(i); + } + else + { + // forward frame range + for (S32 i = range_a; i <= range_b; i++) + pData->mAnimTexFrames.push_back(i); + } + } + else + { + // add one frame + pData->mAnimTexFrames.push_back(dAtoi(currTok)); + } + currTok = dStrtok(NULL, " \t"); + } + + // cleanup + delete[] tokCopy; + pData->mNumFrames = pData->mAnimTexFrames.size() - 1; + if (pData->mCurFrameIndex > pData->mNumFrames) + pData->mCurFrameIndex = pData->mNumFrames; + return true; +} + +void guiAnimBitmapCtrl::onRender(Point2I offset, const RectI &updateRect) +{ + if (mTextureObject) + { + if (mFrameTime->getElapsedMs() > 1000 / mFramesPerSec) //fps to msfp conversion + { + mFrameTime->reset(); + + if (mPlay) + { + if (mReverse) //play backward + { + mCurFrameIndex--; + if (mCurFrameIndex < 0) + { + if (mLoop) + { + mCurFrameIndex = mNumFrames; + onLoop_callback(); + mFinished = false; + } + else + { + mCurFrameIndex = 0; + if (!mFinished) + onCompleted_callback(); + mFinished = true; + } + } + else + onFrame_callback(mCurFrameIndex, mAnimTexFrames[mCurFrameIndex]); + } + else // play forward + { + mCurFrameIndex++; + + if (mCurFrameIndex > mNumFrames) + { + if (mLoop) + { + mCurFrameIndex = 0; + onLoop_callback(); + mFinished = false; + } + else + { + mCurFrameIndex = mNumFrames; + if (!mFinished) + onCompleted_callback(); + mFinished = true; + } + } + else + onFrame_callback(mCurFrameIndex, mAnimTexFrames[mCurFrameIndex]); + } + } + } + + GFX->getDrawUtil()->clearBitmapModulation(); + + GFXTextureObject* texture = mTextureObject; + + Point2I modifiedSRC = Point2I(texture->mBitmapSize.x / mAnimTexTiling.x, texture->mBitmapSize.y / mAnimTexTiling.y); + RectI srcRegion; + Point2I offsetSRC = Point2I::Zero; + + offsetSRC.x = (texture->mBitmapSize.x / mAnimTexTiling.x) * (mAnimTexFrames[mCurFrameIndex] % mAnimTexTiling.x); + offsetSRC.y = (texture->mBitmapSize.y / mAnimTexTiling.y) * (mAnimTexFrames[mCurFrameIndex] / mAnimTexTiling.x); + + srcRegion.set(offsetSRC, modifiedSRC); + + GFX->getDrawUtil()->drawBitmapStretchSR(texture, updateRect, srcRegion, GFXBitmapFlip_None, GFXTextureFilterLinear, false); + } + + if (mProfile->mBorder || !mTextureObject) + { + RectI rect(offset, getExtent()); + GFX->getDrawUtil()->drawRect(rect, mProfile->mBorderColor); + } + + renderChildControls(offset, updateRect); +} \ No newline at end of file diff --git a/Engine/source/gui/controls/guiAnimBitmapCtrl.h b/Engine/source/gui/controls/guiAnimBitmapCtrl.h new file mode 100644 index 0000000000..ba50649f2b --- /dev/null +++ b/Engine/source/gui/controls/guiAnimBitmapCtrl.h @@ -0,0 +1,70 @@ +//----------------------------------------------------------------------------- +// Copyright (c) 2012 GarageGames, LLC +// +// 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. +//----------------------------------------------------------------------------- + +#ifndef _GUIANIMBITMAPCTRL_H_ +#define _GUIANIMBITMAPCTRL_H_ + +#ifndef _GUIBITMAPCTRL_H_ +#include "gui/controls/guiBitmapCtrl.h" +#endif + +class guiAnimBitmapCtrl : public GuiBitmapCtrl +{ +public: + typedef GuiBitmapCtrl Parent; + +protected: + /// max frames (x,y) + Point2I mAnimTexTiling; + /// frames to use + StringTableEntry mAnimTexFramesString; + /// frames to use (internal) + Vector mAnimTexFrames; + U32 mNumFrames; + S32 mCurFrameIndex; + + bool mLoop; + bool mPlay; + bool mReverse; + S32 mFramesPerSec; + bool mAnimateTexture; + PlatformTimer * mFrameTime; + bool mFinished; + static bool ptSetFrame(void *object, const char *index, const char *data); + static bool ptSetFrameRanges(void *object, const char *index, const char *data); +public: + guiAnimBitmapCtrl(); + ~guiAnimBitmapCtrl(); + bool onAdd(); + + static void initPersistFields(); + void onRender(Point2I offset, const RectI &updateRect); + DECLARE_CONOBJECT(guiAnimBitmapCtrl); + DECLARE_CATEGORY("Gui Images"); + DECLARE_DESCRIPTION("A control that clips a bitmap based on %."); + + DECLARE_CALLBACK(void, onLoop, ()); + DECLARE_CALLBACK(void, onCompleted, ()); + DECLARE_CALLBACK(void, onFrame, (S32 frameIndex, S32 frame)); +}; + +#endif \ No newline at end of file From 51049b6e8ccf791c17ea623d02eca6e33d771e6b Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 6 Jul 2016 00:46:16 -0500 Subject: [PATCH 316/324] Fixes the member-of-class check order to properly sort the context. Also fixes a bug with the spacer entries being filtered from the popup menu, which threw off the selection. --- .../source/platformSDL/menus/popupMenuSDL.cpp | 4 ++- .../tools/worldEditor/scripts/EditorGui.ed.cs | 32 +++++++++---------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Engine/source/platformSDL/menus/popupMenuSDL.cpp b/Engine/source/platformSDL/menus/popupMenuSDL.cpp index 154e16f329..788d7c88e6 100644 --- a/Engine/source/platformSDL/menus/popupMenuSDL.cpp +++ b/Engine/source/platformSDL/menus/popupMenuSDL.cpp @@ -99,7 +99,9 @@ void PopupMenu::createPlatformMenu() S32 PopupMenu::insertItem(S32 pos, const char *title, const char* accelerator, const char* cmd) { GuiMenuBar::MenuItem *item = GuiMenuBar::findMenuItem( mData->mMenuGui, title ); - if(item) + + //We'll make a special exception for the spacer items + if(item && dStrcmp(title, "")) { setItem( pos, title, accelerator, cmd); return pos; diff --git a/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs index f9ab055af4..6321e44aa6 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs @@ -1619,7 +1619,7 @@ function VisibilityDropdownToggle() } // Open context menu if this is a SimGroup - else if( %obj.isMemberOfClass( "SimGroup" ) ) + else if( !%obj.isMemberOfClass( "SceneObject" ) ) { %popup = ETSimGroupContextPopup; if( !isObject( %popup ) ) @@ -1643,20 +1643,6 @@ function VisibilityDropdownToggle() object = -1; }; - - if(%obj.isMemberOfClass("Entity")) - { - %popup = ETEntityContextPopup; - if( !isObject( %popup ) ) - %popup = new PopupMenu( ETEntityContextPopup : ETSimGroupContextPopup ) - { - superClass = "MenuBuilder"; - isPopup = "1"; - - item[ 12 ] = "-"; - item[ 13 ] = "Convert to Game Object" TAB "" TAB "EWorldEditor.createGameObject( %this.object );"; - }; - } %popup.object = %obj; @@ -1689,9 +1675,23 @@ function VisibilityDropdownToggle() object = -1; }; + + if(%obj.isMemberOfClass("Entity")) + { + %popup = ETEntityContextPopup; + if( !isObject( %popup ) ) + %popup = new PopupMenu( ETEntityContextPopup : ETSimGroupContextPopup ) + { + superClass = "MenuBuilder"; + isPopup = "1"; + + item[ 12 ] = "-"; + item[ 13 ] = "Convert to Game Object" TAB "" TAB "EWorldEditor.createGameObject( %this.object );"; + }; + } // Specialized version for ConvexShapes. - if( %obj.isMemberOfClass( "ConvexShape" ) ) + else if( %obj.isMemberOfClass( "ConvexShape" ) ) { %popup = ETConvexShapeContextPopup; if( !isObject( %popup ) ) From f8368cd7e9bdeb1e48e47d87a00f3f8b6451f19f Mon Sep 17 00:00:00 2001 From: Azaezel Date: Wed, 6 Jul 2016 02:15:46 -0500 Subject: [PATCH 317/324] adds bitmap coloration to: guibitmapctrl, guibitmapbarctrl, guianimbitmapctrl (and guicrosshairhud by way of inheritance) --- Engine/source/gui/controls/guiAnimBitmapCtrl.cpp | 1 + Engine/source/gui/controls/guiBitmapBarCtrl.cpp | 1 + Engine/source/gui/controls/guiBitmapCtrl.cpp | 7 +++++-- Engine/source/gui/controls/guiBitmapCtrl.h | 1 + 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp b/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp index ec7505a094..3eea9fe56f 100644 --- a/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp +++ b/Engine/source/gui/controls/guiAnimBitmapCtrl.cpp @@ -269,6 +269,7 @@ void guiAnimBitmapCtrl::onRender(Point2I offset, const RectI &updateRect) } GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->setBitmapModulation(mColor); GFXTextureObject* texture = mTextureObject; diff --git a/Engine/source/gui/controls/guiBitmapBarCtrl.cpp b/Engine/source/gui/controls/guiBitmapBarCtrl.cpp index 441bcb26cc..0063090271 100644 --- a/Engine/source/gui/controls/guiBitmapBarCtrl.cpp +++ b/Engine/source/gui/controls/guiBitmapBarCtrl.cpp @@ -58,6 +58,7 @@ void GuiBitmapBarCtrl::onRender(Point2I offset, const RectI &updateRect) if (mTextureObject) { GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->setBitmapModulation(mColor); F32 pct = (mPercent / 100.0); GFXTextureObject* texture = mTextureObject; Point2I modifiedSRC; diff --git a/Engine/source/gui/controls/guiBitmapCtrl.cpp b/Engine/source/gui/controls/guiBitmapCtrl.cpp index 1d0cd21c7e..b87ca41014 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.cpp +++ b/Engine/source/gui/controls/guiBitmapCtrl.cpp @@ -56,7 +56,8 @@ ConsoleDocClass( GuiBitmapCtrl, GuiBitmapCtrl::GuiBitmapCtrl(void) : mBitmapName(), mStartPoint( 0, 0 ), - mWrap( false ) + mWrap( false ), + mColor(ColorI::WHITE) { } @@ -78,7 +79,8 @@ void GuiBitmapCtrl::initPersistFields() addProtectedField( "bitmap", TypeImageFilename, Offset( mBitmapName, GuiBitmapCtrl ), &setBitmapName, &defaultProtectedGetFn, - "The bitmap file to display in the control." ); + "The bitmap file to display in the control."); + addField("color", TypeColorI, Offset(mColor, GuiBitmapCtrl),"color mul"); addField( "wrap", TypeBool, Offset( mWrap, GuiBitmapCtrl ), "If true, the bitmap is tiled inside the control rather than stretched to fit." ); @@ -169,6 +171,7 @@ void GuiBitmapCtrl::onRender(Point2I offset, const RectI &updateRect) if (mTextureObject) { GFX->getDrawUtil()->clearBitmapModulation(); + GFX->getDrawUtil()->setBitmapModulation(mColor); if(mWrap) { // We manually draw each repeat because non power of two textures will diff --git a/Engine/source/gui/controls/guiBitmapCtrl.h b/Engine/source/gui/controls/guiBitmapCtrl.h index 0eb8af3532..27e3ddf856 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.h +++ b/Engine/source/gui/controls/guiBitmapCtrl.h @@ -44,6 +44,7 @@ class GuiBitmapCtrl : public GuiControl GFXTexHandle mTextureObject; Point2I mStartPoint; + ColorI mColor; /// If true, bitmap tiles inside control. Otherwise stretches. bool mWrap; From 59637bb1c70ce0d9a838aa1833cadb1da4b4b8d6 Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 6 Jul 2016 22:30:19 -0500 Subject: [PATCH 318/324] Adds a sanity check in the event we don't actually have any animation frames generated. --- Engine/source/T3D/fx/particleEmitter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/T3D/fx/particleEmitter.cpp b/Engine/source/T3D/fx/particleEmitter.cpp index 2391cfe9dd..1f1b2a3eba 100644 --- a/Engine/source/T3D/fx/particleEmitter.cpp +++ b/Engine/source/T3D/fx/particleEmitter.cpp @@ -1702,7 +1702,7 @@ void ParticleEmitter::setupBillboard( Particle *part, lVerts->color = partCol; } \ // Here we deal with UVs for animated particle (billboard) - if (part->dataBlock->animateTexture) + if (part->dataBlock->animateTexture && !part->dataBlock->animTexFrames.empty()) { S32 fm = (S32)(part->currentAge*(1.0/1000.0)*part->dataBlock->framesPerSec); U8 fm_tile = part->dataBlock->animTexFrames[fm % part->dataBlock->numFrames]; From ef3162616b2ebe73ff3d09777ef7a38a9fd7b9a6 Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 6 Jul 2016 22:48:17 -0500 Subject: [PATCH 319/324] Removes an extraneous Namespace usage on a function declaration that could cause compiler errors. --- Engine/source/T3D/aiPlayer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Engine/source/T3D/aiPlayer.h b/Engine/source/T3D/aiPlayer.h index d37cb896b6..a8430575c0 100644 --- a/Engine/source/T3D/aiPlayer.h +++ b/Engine/source/T3D/aiPlayer.h @@ -170,7 +170,7 @@ class AIPlayer : public Player { void setAimLocation( const Point3F &location ); Point3F getAimLocation() const { return mAimLocation; } void clearAim(); - void AIPlayer::getMuzzleVector(U32 imageSlot,VectorF* vec); + void getMuzzleVector(U32 imageSlot,VectorF* vec); bool checkInLos(GameBase* target = NULL, bool _useMuzzle = false, bool _checkEnabled = false); bool checkInFoV(GameBase* target = NULL, F32 camFov = 45.0f, bool _checkEnabled = false); F32 getTargetDistance(GameBase* target, bool _checkEnabled); From 911b2735d7b60d0ce4f3028562b3253e69c512fb Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 8 Jul 2016 21:33:30 -0500 Subject: [PATCH 320/324] Flipa the i386 preprocessor flag to use __i386__, which is appraently more standard. --- Engine/source/platform/types.gcc.h | 4 ++-- Engine/source/platformX86UNIX/x86UNIXMath.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Engine/source/platform/types.gcc.h b/Engine/source/platform/types.gcc.h index c8d8664df3..293c476bbe 100644 --- a/Engine/source/platform/types.gcc.h +++ b/Engine/source/platform/types.gcc.h @@ -103,7 +103,7 @@ typedef unsigned long U64; # define TORQUE_OS_STRING "MacOS X" # define TORQUE_OS_MAC # include "platform/types.mac.h" -# if defined(i386) +# if defined(__i386__) // Disabling ASM on XCode for shared library build code relocation issues // This could be reconfigured for static builds, though minimal impact //# define TORQUE_SUPPORTS_NASM @@ -115,7 +115,7 @@ typedef unsigned long U64; //-------------------------------------- // Identify the CPU -#if defined(i386) +#if defined(__i386__) # define TORQUE_CPU_STRING "Intel x86" # define TORQUE_CPU_X86 # define TORQUE_LITTLE_ENDIAN diff --git a/Engine/source/platformX86UNIX/x86UNIXMath.cpp b/Engine/source/platformX86UNIX/x86UNIXMath.cpp index 1d1ddd6d2a..8cf9a5b40e 100644 --- a/Engine/source/platformX86UNIX/x86UNIXMath.cpp +++ b/Engine/source/platformX86UNIX/x86UNIXMath.cpp @@ -131,7 +131,7 @@ F32 Platform::getRandom() } -#if defined(i386) || defined(__x86_64__) +#if defined(__i386__) || defined(__x86_64__) U32 Platform::getMathControlState() { From 7372c89dc7f671a062a31ae5ce6bdb55319cbf70 Mon Sep 17 00:00:00 2001 From: Areloch Date: Fri, 8 Jul 2016 22:48:24 -0500 Subject: [PATCH 321/324] Corrections suggested by timmy for both consistency, and making sure to catch all potential types. --- Engine/source/platform/types.gcc.h | 4 ++-- Engine/source/platformX86UNIX/x86UNIXMath.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Engine/source/platform/types.gcc.h b/Engine/source/platform/types.gcc.h index 293c476bbe..e61dcbafb5 100644 --- a/Engine/source/platform/types.gcc.h +++ b/Engine/source/platform/types.gcc.h @@ -103,7 +103,7 @@ typedef unsigned long U64; # define TORQUE_OS_STRING "MacOS X" # define TORQUE_OS_MAC # include "platform/types.mac.h" -# if defined(__i386__) +# if defined(i386) // Disabling ASM on XCode for shared library build code relocation issues // This could be reconfigured for static builds, though minimal impact //# define TORQUE_SUPPORTS_NASM @@ -115,7 +115,7 @@ typedef unsigned long U64; //-------------------------------------- // Identify the CPU -#if defined(__i386__) +#if defined(i386) || defined(__i386) || defined(__i386__) # define TORQUE_CPU_STRING "Intel x86" # define TORQUE_CPU_X86 # define TORQUE_LITTLE_ENDIAN diff --git a/Engine/source/platformX86UNIX/x86UNIXMath.cpp b/Engine/source/platformX86UNIX/x86UNIXMath.cpp index 8cf9a5b40e..6d3d141c3b 100644 --- a/Engine/source/platformX86UNIX/x86UNIXMath.cpp +++ b/Engine/source/platformX86UNIX/x86UNIXMath.cpp @@ -131,7 +131,7 @@ F32 Platform::getRandom() } -#if defined(__i386__) || defined(__x86_64__) +#if defined(TORQUE_CPU_X86) || defined(__x86_64__) U32 Platform::getMathControlState() { From 8424f990529d4eccbb76b2849947ebacef687ee3 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 9 Jul 2016 14:57:42 -0500 Subject: [PATCH 322/324] Some case sensitivity fixes. --- .../gui/{cubepreview.dts => cubePreview.dts} | Bin .../{cylinderpreview.dts => cylinderPreview.dts} | Bin .../gui/{spherepreview.dts => spherePreview.dts} | Bin .../gui/{toruspreview.dts => torusPreview.dts} | Bin .../{torusknotpreview.dts => torusknotPreview.dts} | Bin .../ToolsPaletteGroups/ForestEditorPalette.ed.gui | 6 +++--- .../images/{boxBrush_d.PNG => boxBrush_d.png} | Bin .../images/{boxBrush_h.PNG => boxBrush_h.png} | Bin .../images/{boxBrush_n.PNG => boxBrush_n.png} | Bin .../images/{circleBrush_d.PNG => circleBrush_d.png} | Bin .../images/{circleBrush_h.PNG => circleBrush_h.png} | Bin .../images/{circleBrush_n.PNG => circleBrush_n.png} | Bin .../images/{clearEmpty_d.PNG => clearEmpty_d.png} | Bin .../images/{clearEmpty_h.PNG => clearEmpty_h.png} | Bin .../images/{clearEmpty_n.PNG => clearEmpty_n.png} | Bin .../{flattenHeight_d.PNG => flattenHeight_d.png} | Bin .../{flattenHeight_h.PNG => flattenHeight_h.png} | Bin .../{flattenHeight_n.PNG => flattenHeight_n.png} | Bin .../images/{lowerHeight_d.PNG => lowerHeight_d.png} | Bin .../images/{lowerHeight_h.PNG => lowerHeight_h.png} | Bin .../images/{lowerHeight_n.PNG => lowerHeight_n.png} | Bin .../images/{raiseHeight_d.PNG => raiseHeight_d.png} | Bin .../images/{raiseHeight_h.PNG => raiseHeight_h.png} | Bin .../images/{raiseHeight_n.PNG => raiseHeight_n.png} | Bin .../images/{setEmpty_d.PNG => setEmpty_d.png} | Bin .../images/{setEmpty_h.PNG => setEmpty_h.png} | Bin .../images/{setEmpty_n.PNG => setEmpty_n.png} | Bin .../images/{setHeight_d.PNG => setHeight_d.png} | Bin .../images/{setHeight_h.PNG => setHeight_h.png} | Bin .../images/{setHeight_n.PNG => setHeight_n.png} | Bin .../{smoothHeight_d.PNG => smoothHeight_d.png} | Bin .../{smoothHeight_h.PNG => smoothHeight_h.png} | Bin .../{smoothHeight_n.PNG => smoothHeight_n.png} | Bin .../images/{softCurve_d.PNG => softCurve_d.png} | Bin .../images/{softCurve_h.PNG => softCurve_h.png} | Bin .../images/{softCurve_n.PNG => softCurve_n.png} | Bin 36 files changed, 3 insertions(+), 3 deletions(-) rename Templates/Full/game/tools/materialEditor/gui/{cubepreview.dts => cubePreview.dts} (100%) rename Templates/Full/game/tools/materialEditor/gui/{cylinderpreview.dts => cylinderPreview.dts} (100%) rename Templates/Full/game/tools/materialEditor/gui/{spherepreview.dts => spherePreview.dts} (100%) rename Templates/Full/game/tools/materialEditor/gui/{toruspreview.dts => torusPreview.dts} (100%) rename Templates/Full/game/tools/materialEditor/gui/{torusknotpreview.dts => torusknotPreview.dts} (100%) rename Templates/Full/game/tools/worldEditor/images/{boxBrush_d.PNG => boxBrush_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{boxBrush_h.PNG => boxBrush_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{boxBrush_n.PNG => boxBrush_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{circleBrush_d.PNG => circleBrush_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{circleBrush_h.PNG => circleBrush_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{circleBrush_n.PNG => circleBrush_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{clearEmpty_d.PNG => clearEmpty_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{clearEmpty_h.PNG => clearEmpty_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{clearEmpty_n.PNG => clearEmpty_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{flattenHeight_d.PNG => flattenHeight_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{flattenHeight_h.PNG => flattenHeight_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{flattenHeight_n.PNG => flattenHeight_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{lowerHeight_d.PNG => lowerHeight_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{lowerHeight_h.PNG => lowerHeight_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{lowerHeight_n.PNG => lowerHeight_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{raiseHeight_d.PNG => raiseHeight_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{raiseHeight_h.PNG => raiseHeight_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{raiseHeight_n.PNG => raiseHeight_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{setEmpty_d.PNG => setEmpty_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{setEmpty_h.PNG => setEmpty_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{setEmpty_n.PNG => setEmpty_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{setHeight_d.PNG => setHeight_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{setHeight_h.PNG => setHeight_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{setHeight_n.PNG => setHeight_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{smoothHeight_d.PNG => smoothHeight_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{smoothHeight_h.PNG => smoothHeight_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{smoothHeight_n.PNG => smoothHeight_n.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{softCurve_d.PNG => softCurve_d.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{softCurve_h.PNG => softCurve_h.png} (100%) rename Templates/Full/game/tools/worldEditor/images/{softCurve_n.PNG => softCurve_n.png} (100%) diff --git a/Templates/Full/game/tools/materialEditor/gui/cubepreview.dts b/Templates/Full/game/tools/materialEditor/gui/cubePreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/cubepreview.dts rename to Templates/Full/game/tools/materialEditor/gui/cubePreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/cylinderpreview.dts b/Templates/Full/game/tools/materialEditor/gui/cylinderPreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/cylinderpreview.dts rename to Templates/Full/game/tools/materialEditor/gui/cylinderPreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/spherepreview.dts b/Templates/Full/game/tools/materialEditor/gui/spherePreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/spherepreview.dts rename to Templates/Full/game/tools/materialEditor/gui/spherePreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/toruspreview.dts b/Templates/Full/game/tools/materialEditor/gui/torusPreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/toruspreview.dts rename to Templates/Full/game/tools/materialEditor/gui/torusPreview.dts diff --git a/Templates/Full/game/tools/materialEditor/gui/torusknotpreview.dts b/Templates/Full/game/tools/materialEditor/gui/torusknotPreview.dts similarity index 100% rename from Templates/Full/game/tools/materialEditor/gui/torusknotpreview.dts rename to Templates/Full/game/tools/materialEditor/gui/torusknotPreview.dts diff --git a/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui b/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui index 7eecbc9f8c..a1cc96ef57 100644 --- a/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/ToolsPaletteGroups/ForestEditorPalette.ed.gui @@ -113,7 +113,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; ToolTip = "Paint (5)"; hovertime = "1000"; - bitmap = "tools/foresteditor/images/paint-forest-btn"; + bitmap = "tools/forestEditor/images/paint-forest-btn"; buttonType = "RadioButton"; useMouseEvents = "0"; }; @@ -134,7 +134,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; ToolTip = "Erase (6)"; hovertime = "1000"; - bitmap = "tools/foresteditor/images/erase-all-btn"; + bitmap = "tools/forestEditor/images/erase-all-btn"; buttonType = "RadioButton"; useMouseEvents = "0"; }; @@ -156,7 +156,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; ToolTip = "Erase Selected (7)"; hovertime = "1000"; - bitmap = "tools/foresteditor/images/erase-element-btn"; + bitmap = "tools/forestEditor/images/erase-element-btn"; buttonType = "RadioButton"; useMouseEvents = "0"; }; diff --git a/Templates/Full/game/tools/worldEditor/images/boxBrush_d.PNG b/Templates/Full/game/tools/worldEditor/images/boxBrush_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/boxBrush_d.PNG rename to Templates/Full/game/tools/worldEditor/images/boxBrush_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/boxBrush_h.PNG b/Templates/Full/game/tools/worldEditor/images/boxBrush_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/boxBrush_h.PNG rename to Templates/Full/game/tools/worldEditor/images/boxBrush_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/boxBrush_n.PNG b/Templates/Full/game/tools/worldEditor/images/boxBrush_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/boxBrush_n.PNG rename to Templates/Full/game/tools/worldEditor/images/boxBrush_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/circleBrush_d.PNG b/Templates/Full/game/tools/worldEditor/images/circleBrush_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/circleBrush_d.PNG rename to Templates/Full/game/tools/worldEditor/images/circleBrush_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/circleBrush_h.PNG b/Templates/Full/game/tools/worldEditor/images/circleBrush_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/circleBrush_h.PNG rename to Templates/Full/game/tools/worldEditor/images/circleBrush_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/circleBrush_n.PNG b/Templates/Full/game/tools/worldEditor/images/circleBrush_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/circleBrush_n.PNG rename to Templates/Full/game/tools/worldEditor/images/circleBrush_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/clearEmpty_d.PNG b/Templates/Full/game/tools/worldEditor/images/clearEmpty_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/clearEmpty_d.PNG rename to Templates/Full/game/tools/worldEditor/images/clearEmpty_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/clearEmpty_h.PNG b/Templates/Full/game/tools/worldEditor/images/clearEmpty_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/clearEmpty_h.PNG rename to Templates/Full/game/tools/worldEditor/images/clearEmpty_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/clearEmpty_n.PNG b/Templates/Full/game/tools/worldEditor/images/clearEmpty_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/clearEmpty_n.PNG rename to Templates/Full/game/tools/worldEditor/images/clearEmpty_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/flattenHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/flattenHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/flattenHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/flattenHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/flattenHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/flattenHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/flattenHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/flattenHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/flattenHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/flattenHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/flattenHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/flattenHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/lowerHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/lowerHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/lowerHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/lowerHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/lowerHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/lowerHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/lowerHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/lowerHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/lowerHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/lowerHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/lowerHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/lowerHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/raiseHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/raiseHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/raiseHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/raiseHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/raiseHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/raiseHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/raiseHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/raiseHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/raiseHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/raiseHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/raiseHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/raiseHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/setEmpty_d.PNG b/Templates/Full/game/tools/worldEditor/images/setEmpty_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setEmpty_d.PNG rename to Templates/Full/game/tools/worldEditor/images/setEmpty_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/setEmpty_h.PNG b/Templates/Full/game/tools/worldEditor/images/setEmpty_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setEmpty_h.PNG rename to Templates/Full/game/tools/worldEditor/images/setEmpty_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/setEmpty_n.PNG b/Templates/Full/game/tools/worldEditor/images/setEmpty_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setEmpty_n.PNG rename to Templates/Full/game/tools/worldEditor/images/setEmpty_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/setHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/setHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/setHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/setHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/setHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/setHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/setHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/setHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/setHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/setHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/smoothHeight_d.PNG b/Templates/Full/game/tools/worldEditor/images/smoothHeight_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/smoothHeight_d.PNG rename to Templates/Full/game/tools/worldEditor/images/smoothHeight_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/smoothHeight_h.PNG b/Templates/Full/game/tools/worldEditor/images/smoothHeight_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/smoothHeight_h.PNG rename to Templates/Full/game/tools/worldEditor/images/smoothHeight_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/smoothHeight_n.PNG b/Templates/Full/game/tools/worldEditor/images/smoothHeight_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/smoothHeight_n.PNG rename to Templates/Full/game/tools/worldEditor/images/smoothHeight_n.png diff --git a/Templates/Full/game/tools/worldEditor/images/softCurve_d.PNG b/Templates/Full/game/tools/worldEditor/images/softCurve_d.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/softCurve_d.PNG rename to Templates/Full/game/tools/worldEditor/images/softCurve_d.png diff --git a/Templates/Full/game/tools/worldEditor/images/softCurve_h.PNG b/Templates/Full/game/tools/worldEditor/images/softCurve_h.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/softCurve_h.PNG rename to Templates/Full/game/tools/worldEditor/images/softCurve_h.png diff --git a/Templates/Full/game/tools/worldEditor/images/softCurve_n.PNG b/Templates/Full/game/tools/worldEditor/images/softCurve_n.png similarity index 100% rename from Templates/Full/game/tools/worldEditor/images/softCurve_n.PNG rename to Templates/Full/game/tools/worldEditor/images/softCurve_n.png From a2a4b1c5e3d62f33b3680fd9ef18ab56f97d1095 Mon Sep 17 00:00:00 2001 From: Areloch Date: Sat, 9 Jul 2016 16:07:57 -0500 Subject: [PATCH 323/324] more case sensitivity corrections. --- .../game/tools/decalEditor/decalEditorGui.cs | 4 +- .../gui/guiMaterialPreviewWindow.ed.gui | 12 ++-- .../gui/guiMaterialPropertiesWindow.ed.gui | 16 ++--- .../scripts/materialEditor.ed.cs | 58 +++++++++---------- .../particleEditor/ParticleEditor.ed.gui | 2 +- .../gui/TerrainPainterWindow.ed.gui | 2 +- .../gui/guiTerrainMaterialDlg.ed.gui | 16 ++--- .../interfaces/terrainMaterialDlg.ed.cs | 24 ++++---- 8 files changed, 67 insertions(+), 67 deletions(-) diff --git a/Templates/Full/game/tools/decalEditor/decalEditorGui.cs b/Templates/Full/game/tools/decalEditor/decalEditorGui.cs index c6e24b10b1..3636b29a12 100644 --- a/Templates/Full/game/tools/decalEditor/decalEditorGui.cs +++ b/Templates/Full/game/tools/decalEditor/decalEditorGui.cs @@ -315,7 +315,7 @@ if( isObject( %material ) ) DecalPreviewWindow-->decalPreview.setBitmap( MaterialEditorGui.searchForTexture( %material.getId(), %material.diffuseMap[0]) ); else - DecalPreviewWindow-->decalPreview.setBitmap("tools/materialeditor/gui/unknownImage"); + DecalPreviewWindow-->decalPreview.setBitmap("tools/materialEditor/gui/unknownImage"); } function DecalEditorGui::updateInstancePreview( %this, %material ) @@ -323,7 +323,7 @@ if( isObject( %material ) ) DecalPreviewWindow-->instancePreview.setBitmap( MaterialEditorGui.searchForTexture( %material.getId(), %material.diffuseMap[0]) ); else - DecalPreviewWindow-->instancePreview.setBitmap("tools/materialeditor/gui/unknownImage"); + DecalPreviewWindow-->instancePreview.setBitmap("tools/materialEditor/gui/unknownImage"); } function DecalEditorGui::rebuildInstanceTree( %this ) diff --git a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui index 54e55012e8..8110d2c34b 100644 --- a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui +++ b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPreviewWindow.ed.gui @@ -365,7 +365,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_xPosTxt) { @@ -408,7 +408,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_xNegTxt) { @@ -451,7 +451,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_yPosTxt) { @@ -494,7 +494,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_yNegTxt) { @@ -537,7 +537,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_zPosTxt) { @@ -580,7 +580,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl(matEd_cubeMapEd_zNegTxt) { diff --git a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui index 1e3b98189b..328d946b6c 100644 --- a/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui +++ b/Templates/Full/game/tools/materialEditor/gui/guiMaterialPropertiesWindow.ed.gui @@ -277,7 +277,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -429,7 +429,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -555,7 +555,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -713,7 +713,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -858,7 +858,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -1003,7 +1003,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -1129,7 +1129,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -1255,7 +1255,7 @@ canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { diff --git a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs index c1f01f1a77..b4e85229f2 100644 --- a/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs +++ b/Templates/Full/game/tools/materialEditor/scripts/materialEditor.ed.cs @@ -27,12 +27,12 @@ //Cubemap used to preview other cubemaps in the editor. singleton CubemapData( matEdCubeMapPreviewMat ) { - cubeFace[0] = "tools/materialeditor/gui/cube_xNeg"; - cubeFace[1] = "tools/materialeditor/gui/cube_xPos"; - cubeFace[2] = "tools/materialeditor/gui/cube_ZNeg"; - cubeFace[3] = "tools/materialeditor/gui/cube_ZPos"; - cubeFace[4] = "tools/materialeditor/gui/cube_YNeg"; - cubeFace[5] = "tools/materialeditor/gui/cube_YPos"; + cubeFace[0] = "tools/materialEditor/gui/cube_xNeg"; + cubeFace[1] = "tools/materialEditor/gui/cube_xPos"; + cubeFace[2] = "tools/materialEditor/gui/cube_ZNeg"; + cubeFace[3] = "tools/materialEditor/gui/cube_ZPos"; + cubeFace[4] = "tools/materialEditor/gui/cube_YNeg"; + cubeFace[5] = "tools/materialEditor/gui/cube_YPos"; parentGroup = "RootGroup"; }; @@ -40,7 +40,7 @@ singleton CubemapData( matEdCubeMapPreviewMat ) singleton Material(materialEd_previewMaterial) { mapTo = "matEd_mappedMat"; - diffuseMap[0] = "tools/materialeditor/gui/matEd_mappedMat"; + diffuseMap[0] = "tools/materialEditor/gui/matEd_mappedMat"; }; singleton CustomMaterial( materialEd_justAlphaMaterial ) @@ -371,32 +371,32 @@ singleton ShaderData( materialEd_justAlphaShader ) { case "sphere": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/spherePreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/spherePreview.dts"); matEd_previewObjectView.setOrbitDistance(4); case "cube": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/cubePreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/cubePreview.dts"); matEd_previewObjectView.setOrbitDistance(5); case "pyramid": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/pyramidPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/pyramidPreview.dts"); matEd_previewObjectView.setOrbitDistance(5); case "cylinder": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/cylinderPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/cylinderPreview.dts"); matEd_previewObjectView.setOrbitDistance(4.2); case "torus": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/torusPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/torusPreview.dts"); matEd_previewObjectView.setOrbitDistance(4.2); case "knot": matEd_quickPreview_Popup.selected = %newModel; - matEd_previewObjectView.setModel("tools/materialeditor/gui/torusknotPreview.dts"); + matEd_previewObjectView.setModel("tools/materialEditor/gui/torusknotPreview.dts"); } } @@ -802,7 +802,7 @@ singleton Material(notDirtyMaterial) if((%material).diffuseMap[%layer] $= "") { MaterialEditorPropertiesWindow-->diffuseMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->diffuseMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->diffuseMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -813,7 +813,7 @@ singleton Material(notDirtyMaterial) if((%material).normalMap[%layer] $= "") { MaterialEditorPropertiesWindow-->normalMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->normalMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->normalMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -824,7 +824,7 @@ singleton Material(notDirtyMaterial) if((%material).overlayMap[%layer] $= "") { MaterialEditorPropertiesWindow-->overlayMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->overlayMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->overlayMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -835,7 +835,7 @@ singleton Material(notDirtyMaterial) if((%material).detailMap[%layer] $= "") { MaterialEditorPropertiesWindow-->detailMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->detailMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->detailMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -846,7 +846,7 @@ singleton Material(notDirtyMaterial) if((%material).detailNormalMap[%layer] $= "") { MaterialEditorPropertiesWindow-->detailNormalMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->detailNormalMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->detailNormalMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -857,7 +857,7 @@ singleton Material(notDirtyMaterial) if((%material).lightMap[%layer] $= "") { MaterialEditorPropertiesWindow-->lightMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->lightMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->lightMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -868,7 +868,7 @@ singleton Material(notDirtyMaterial) if((%material).toneMap[%layer] $= "") { MaterialEditorPropertiesWindow-->toneMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->toneMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->toneMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -879,7 +879,7 @@ singleton Material(notDirtyMaterial) if((%material).specularMap[%layer] $= "") { MaterialEditorPropertiesWindow-->specMapNameText.setText( "None" ); - MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap( "tools/materialeditor/gui/unknownImage" ); + MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap( "tools/materialEditor/gui/unknownImage" ); } else { @@ -1141,7 +1141,7 @@ singleton Material(notDirtyMaterial) else { %textCtrl.setText("None"); - %bitmapCtrl.setBitmap("tools/materialeditor/gui/unknownImage"); + %bitmapCtrl.setBitmap("tools/materialEditor/gui/unknownImage"); MaterialEditorGui.updateActiveMaterial(%type @ "Map[" @ %layer @ "]",""); } } @@ -1185,7 +1185,7 @@ singleton Material(notDirtyMaterial) else { MaterialEditorPropertiesWindow-->specMapNameText.setText("None"); - MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap("tools/materialeditor/gui/unknownImage"); + MaterialEditorPropertiesWindow-->specMapDisplayBitmap.setBitmap("tools/materialEditor/gui/unknownImage"); MaterialEditorGui.updateActiveMaterial("specularMap[" @ %layer @ "]",""); } @@ -1604,12 +1604,12 @@ singleton Material(notDirtyMaterial) new CubemapData(%cubemap) { - cubeFace[0] = "tools/materialeditor/gui/cube_xNeg"; - cubeFace[1] = "tools/materialeditor/gui/cube_xPos"; - cubeFace[2] = "tools/materialeditor/gui/cube_ZNeg"; - cubeFace[3] = "tools/materialeditor/gui/cube_ZPos"; - cubeFace[4] = "tools/materialeditor/gui/cube_YNeg"; - cubeFace[5] = "tools/materialeditor/gui/cube_YPos"; + cubeFace[0] = "tools/materialEditor/gui/cube_xNeg"; + cubeFace[1] = "tools/materialEditor/gui/cube_xPos"; + cubeFace[2] = "tools/materialEditor/gui/cube_ZNeg"; + cubeFace[3] = "tools/materialEditor/gui/cube_ZPos"; + cubeFace[4] = "tools/materialEditor/gui/cube_YNeg"; + cubeFace[5] = "tools/materialEditor/gui/cube_YPos"; parentGroup = RootGroup; }; diff --git a/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui b/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui index 5d337b80f6..a2c87457ec 100644 --- a/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui +++ b/Templates/Full/game/tools/particleEditor/ParticleEditor.ed.gui @@ -1862,7 +1862,7 @@ $PE_guielement_ext_colorpicker = "18 18"; canSave = "1"; Visible = "1"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { diff --git a/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui b/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui index b9abec3c33..a08c058410 100644 --- a/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/TerrainPainterWindow.ed.gui @@ -158,7 +158,7 @@ tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; wrap = "0"; - bitmap= "tools/materialeditor/gui/unknownImage"; + bitmap= "tools/materialEditor/gui/unknownImage"; }; new GuiBitmapCtrl(ETerrainMaterialSelectedBorder) { canSaveDynamicFields = "0"; diff --git a/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui b/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui index 547dab6fa2..09a90ef267 100644 --- a/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui +++ b/Templates/Full/game/tools/worldEditor/gui/guiTerrainMaterialDlg.ed.gui @@ -261,7 +261,7 @@ Visible = "1"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -358,7 +358,7 @@ MinExtent = "8 2"; canSave = "1"; Visible = "1"; - Command = "TerrainMaterialDlg-->baseTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + Command = "TerrainMaterialDlg-->baseTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; groupNum = "-1"; @@ -466,7 +466,7 @@ Visible = "1"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiTextCtrl() { @@ -563,7 +563,7 @@ MinExtent = "8 2"; canSave = "1"; Visible = "1"; - Command = "TerrainMaterialDlg-->normTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + Command = "TerrainMaterialDlg-->normTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; groupNum = "-1"; @@ -662,7 +662,7 @@ canSaveDynamicFields = "0"; new GuiBitmapCtrl() { - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; position = "1 1"; extent = "47 47"; @@ -787,7 +787,7 @@ profile = "ToolsGuiDefaultProfile"; visible = "1"; active = "1"; - command = "TerrainMaterialDlg-->macroTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + command = "TerrainMaterialDlg-->macroTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipProfile = "ToolsGuiToolTipProfile"; hovertime = "1000"; isContainer = "0"; @@ -999,7 +999,7 @@ Visible = "1"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; - bitmap = "tools/materialeditor/gui/unknownImage"; + bitmap = "tools/materialEditor/gui/unknownImage"; wrap = "0"; }; new GuiBitmapButtonCtrl() { @@ -1096,7 +1096,7 @@ MinExtent = "8 2"; canSave = "1"; Visible = "1"; - Command = "TerrainMaterialDlg-->detailTexCtrl.setBitmap(\"tools/materialeditor/gui/unknownImage\");"; + Command = "TerrainMaterialDlg-->detailTexCtrl.setBitmap(\"tools/materialEditor/gui/unknownImage\");"; tooltipprofile = "ToolsGuiToolTipProfile"; hovertime = "1000"; groupNum = "-1"; diff --git a/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs b/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs index a83ddfb8a7..2ec8e17f32 100644 --- a/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs +++ b/Templates/Full/game/tools/worldEditor/scripts/interfaces/terrainMaterialDlg.ed.cs @@ -218,7 +218,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -240,7 +240,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -262,7 +262,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -285,7 +285,7 @@ if( %ctrl.bitmap !$= "" ) %file = %ctrl.bitmap; else - %file = "tools/materialeditor/gui/unknownImage"; + %file = "tools/materialEditor/gui/unknownImage"; } %file = makeRelativePath( %file, getMainDotCsDir() ); @@ -376,22 +376,22 @@ %this-->matNameCtrl.setText( %mat.internalName ); if (%mat.diffuseMap $= ""){ - %this-->baseTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->baseTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->baseTexCtrl.setBitmap( %mat.diffuseMap ); } if (%mat.detailMap $= ""){ - %this-->detailTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->detailTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->detailTexCtrl.setBitmap( %mat.detailMap ); } if (%mat.macroMap $= ""){ - %this-->macroTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->macroTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->macroTexCtrl.setBitmap( %mat.macroMap ); } if (%mat.normalMap $= ""){ - %this-->normTexCtrl.setBitmap( "tools/materialeditor/gui/unknownImage" ); + %this-->normTexCtrl.setBitmap( "tools/materialEditor/gui/unknownImage" ); }else{ %this-->normTexCtrl.setBitmap( %mat.normalMap ); } @@ -428,22 +428,22 @@ %newName = %this-->matNameCtrl.getText(); - if (%this-->baseTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->baseTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newDiffuse = ""; }else{ %newDiffuse = %this-->baseTexCtrl.bitmap; } - if (%this-->normTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->normTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newNormal = ""; }else{ %newNormal = %this-->normTexCtrl.bitmap; } - if (%this-->detailTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->detailTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newDetail = ""; }else{ %newDetail = %this-->detailTexCtrl.bitmap; } - if (%this-->macroTexCtrl.bitmap $= "tools/materialeditor/gui/unknownImage"){ + if (%this-->macroTexCtrl.bitmap $= "tools/materialEditor/gui/unknownImage"){ %newMacro = ""; }else{ %newMacro = %this-->macroTexCtrl.bitmap; From e06018aeea36cfe094f9a0edd49196c8c8afe4d5 Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 11 Jul 2016 22:27:27 -0500 Subject: [PATCH 324/324] Properly initiates the max number of drops per batch to avoid possible corruption issues. --- Engine/source/T3D/fx/precipitation.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Engine/source/T3D/fx/precipitation.cpp b/Engine/source/T3D/fx/precipitation.cpp index b0d8440d5d..19855e26fc 100644 --- a/Engine/source/T3D/fx/precipitation.cpp +++ b/Engine/source/T3D/fx/precipitation.cpp @@ -298,6 +298,7 @@ Precipitation::Precipitation() mSplashShaderCameraPosSC = NULL; mSplashShaderAmbientSC = NULL; + mMaxVBDrops = 5000; } Precipitation::~Precipitation()
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - diff --git a/Engine/lib/glew/auto/src/khronos_license.h b/Engine/lib/glew/auto/src/khronos_license.h deleted file mode 100644 index 420cd72273..0000000000 --- a/Engine/lib/glew/auto/src/khronos_license.h +++ /dev/null @@ -1,23 +0,0 @@ -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - diff --git a/Engine/lib/glew/auto/src/mesa_license.h b/Engine/lib/glew/auto/src/mesa_license.h deleted file mode 100644 index 3350cca3f0..0000000000 --- a/Engine/lib/glew/auto/src/mesa_license.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.0 - * - * Copyright (C) 1999-2007 Brian Paul 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 - * BRIAN PAUL 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. - */ - diff --git a/Engine/lib/glew/auto/src/visualinfo.rc b/Engine/lib/glew/auto/src/visualinfo.rc deleted file mode 100644 index 2373944577..0000000000 --- a/Engine/lib/glew/auto/src/visualinfo.rc +++ /dev/null @@ -1,57 +0,0 @@ - -#include - -#ifdef GLEW_MX -# ifdef _DEBUG -# define FILENAME "visualinfo-mxd.exe" -# else -# define FILENAME "visualinfo-mx.exe" -# endif -#else -# ifdef _DEBUG -# define FILENAME "visualinfod.exe" -# else -# define FILENAME "visualinfo.exe" -# endif -#endif - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// -VS_VERSION_INFO VERSIONINFO -FILEVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -PRODUCTVERSION GLEW_MAJOR, GLEW_MINOR, GLEW_MICRO, 0 -FILEFLAGSMASK VS_FFI_FILEFLAGSMASK -#ifdef _DEBUG -FILEFLAGS VS_FF_DEBUG -#else -FILEFLAGS 0x0L -#endif -FILEOS VOS__WINDOWS32 -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "The OpenGL Extension Wrangler Library\r\nCopyright (C) 2002-2008, Milan Ikits \r\nCopyright (C) 2002-2008, Marcelo E. Magallon \r\nCopyright (C) 2002, Lev Povalahev\r\nAll rights reserved.\r\n \r\nRedistribution and use in source and binary forms, with or without \r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n* Redistributions of source code must retain the above copyright notice, \r\n this list of conditions and the following disclaimer.\r\n* Redistributions in binary form must reproduce the above copyright notice, \r\n this list of conditions and the following disclaimer in the documentation \r\n and/or other materials provided with the distribution.\r\n* The name of the author may be used to endorse or promote products \r\n derived from this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' \r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE \r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\nARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE \r\nLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR \r\nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF \r\nSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\nINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\nCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\nARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\r\nTHE POSSIBILITY OF SUCH DAMAGE.\r\n\r\nLicense Applicability. Except to the extent portions of this file are\r\nmade subject to an alternative license as permitted in the SGI Free\r\nSoftware License B, Version 1.1 (the 'License'), the contents of this\r\nfile are subject only to the provisions of the License. You may not use\r\nthis file except in compliance with the License. You may obtain a copy\r\nof the License at Silicon Graphics, Inc., attn: Legal Services, 1600\r\nAmphitheatre Parkway, Mountain View, CA 94043-1351, or at:\r\n\r\nhttp://oss.sgi.com/projects/FreeB\r\n\r\nNote that, as provided in the License, the Software is distributed on an\r\n'AS IS' basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS\r\nDISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND\r\nCONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A\r\nPARTICULAR PURPOSE, AND NON-INFRINGEMENT.\r\n\r\nOriginal Code. The Original Code is: OpenGL Sample Implementation,\r\nVersion 1.2.1, released January 26, 2000, developed by Silicon Graphics,\r\nInc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.\r\nCopyright in any portions created by third parties is as indicated\r\nelsewhere herein. All Rights Reserved.\r\n\r\nAdditional Notice Provisions: This software was created using the\r\nOpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has\r\nnot been independently verified as being compliant with the OpenGL(R)\r\nversion 1.2.1 Specification.\0" - VALUE "CompanyName", "\0" - VALUE "FileDescription", "Utility for listing pixelformat capabilities\0" - VALUE "FileVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "InternalName", "visualinfo\0" - VALUE "LegalCopyright", "© 2002-2008 Milan Ikits & Marcelo Magallon\0" - VALUE "LegalTrademarks", "\0" - VALUE "OriginalFilename", FILENAME "\0" - VALUE "PrivateBuild", "\0" - VALUE "ProductName", "The OpenGL Extension Wrangler Library\0" - VALUE "ProductVersion", "GLEW_MAJOR,GLEW_MINOR,GLEW_MICRO,0\0" - VALUE "SpecialBuild", "\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END diff --git a/Engine/lib/glew/auto/src/wglew_head.h b/Engine/lib/glew/auto/src/wglew_head.h deleted file mode 100644 index df8850392f..0000000000 --- a/Engine/lib/glew/auto/src/wglew_head.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef __wglew_h__ -#define __wglew_h__ -#define __WGLEW_H__ - -#ifdef __wglext_h_ -#error wglext.h included before wglew.h -#endif - -#define __wglext_h_ - -#if !defined(WINAPI) -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN 1 -# endif -#include -# undef WIN32_LEAN_AND_MEAN -#endif - -/* - * GLEW_STATIC needs to be set when using the static version. - * GLEW_BUILD is set when building the DLL version. - */ -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - diff --git a/Engine/lib/glew/auto/src/wglew_mid.h b/Engine/lib/glew/auto/src/wglew_mid.h deleted file mode 100644 index a0a5ade406..0000000000 --- a/Engine/lib/glew/auto/src/wglew_mid.h +++ /dev/null @@ -1,9 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define WGLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT -#else -#define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ diff --git a/Engine/lib/glew/auto/src/wglew_tail.h b/Engine/lib/glew/auto/src/wglew_tail.h deleted file mode 100644 index 9bbe94572d..0000000000 --- a/Engine/lib/glew/auto/src/wglew_tail.h +++ /dev/null @@ -1,32 +0,0 @@ -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX - -typedef struct WGLEWContextStruct WGLEWContext; -GLEWAPI GLenum GLEWAPIENTRY wglewContextInit (WGLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext *ctx, const char *name); - -#define wglewInit() wglewContextInit(wglewGetContext()) -#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x)) -#define WGLEW_GET_FUN(x) wglewGetContext()->x - -#else /* GLEW_MX */ - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define WGLEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#undef GLEWAPI - -#endif /* __wglew_h__ */ diff --git a/Engine/lib/glew/config/Makefile.cygming b/Engine/lib/glew/config/Makefile.cygming deleted file mode 100644 index afdd851e4e..0000000000 --- a/Engine/lib/glew/config/Makefile.cygming +++ /dev/null @@ -1,25 +0,0 @@ -NAME = glew32 -GLEW_DEST = /usr -BINDIR = /usr/bin -LIBDIR = /usr/lib/mingw -INCDIR = /usr/include/mingw/GL -# use gcc for linking, with ld it does not work -CC := gcc -mno-cygwin -LD := gcc -mno-cygwin -LN := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -LDFLAGS.EXTRA = -L$(LIBDIR) -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -Wl,-soname,$(LIB.SONAME.MX) -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.cygwin b/Engine/lib/glew/config/Makefile.cygwin deleted file mode 100644 index b044273df2..0000000000 --- a/Engine/lib/glew/config/Makefile.cygwin +++ /dev/null @@ -1,24 +0,0 @@ -NAME = GLEW -GLEW_DEST ?= /usr -# use gcc for linking, with ld it does not work -CC := cc -LD := cc -LN := -LDFLAGS.EXTRA = -LIBDIR = $(GLEW_DEST)/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.DEVLNK = lib$(NAME).dll.a -LIB.SHARED = cyg$(NAME)-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = cyg$(NAME)mx-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a -LIB.SHARED.MX = cyg$(NAME)mx-$(GLEW_MAJOR)-$(GLEW_MINOR).dll -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.darwin b/Engine/lib/glew/config/Makefile.darwin deleted file mode 100644 index 0c05ed1b81..0000000000 --- a/Engine/lib/glew/config/Makefile.darwin +++ /dev/null @@ -1,28 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -CFLAGS.EXTRA = -dynamic -fno-common -#CFLAGS.EXTRA += -no-cpp-precomp -LDFLAGS.EXTRA = -ifneq (undefined, $(origin GLEW_APPLE_GLX)) -CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' -LDFLAGS.GL = -L/usr/X11R6/lib -lXmu -lXi -lGL -lXext -lX11 -else -LDFLAGS.GL = -framework AGL -framework OpenGL -endif -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib -LIB.DEVLNK = lib$(NAME).dylib -LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/Engine/lib/glew/config/Makefile.darwin-ppc b/Engine/lib/glew/config/Makefile.darwin-ppc deleted file mode 100644 index 2aaf66a45f..0000000000 --- a/Engine/lib/glew/config/Makefile.darwin-ppc +++ /dev/null @@ -1,28 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -CFLAGS.EXTRA = -arch ppc -dynamic -fno-common -#CFLAGS.EXTRA += -no-cpp-precomp -LDFLAGS.EXTRA = -arch ppc -ifneq (undefined, $(origin GLEW_APPLE_GLX)) -CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' -LDFLAGS.GL = -L/usr/X11R6/lib -lXmu -lXi -lGL -lXext -lX11 -else -LDFLAGS.GL = -framework AGL -framework OpenGL -endif -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib -LIB.DEVLNK = lib$(NAME).dylib -LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/Engine/lib/glew/config/Makefile.darwin-x86_64 b/Engine/lib/glew/config/Makefile.darwin-x86_64 deleted file mode 100644 index 83e5c474e5..0000000000 --- a/Engine/lib/glew/config/Makefile.darwin-x86_64 +++ /dev/null @@ -1,28 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -CFLAGS.EXTRA = -arch x86_64 -dynamic -fno-common -#CFLAGS.EXTRA += -no-cpp-precomp -LDFLAGS.EXTRA = -arch x86_64 -ifneq (undefined, $(origin GLEW_APPLE_GLX)) -CFLAGS.EXTRA += -I/usr/X11R6/include -D'GLEW_APPLE_GLX' -LDFLAGS.GL = -L/usr/X11R6/lib -lXmu -lXi -lGL -lXext -lX11 -else -LDFLAGS.GL = -framework AGL -framework OpenGL -endif -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).$(SO_MAJOR).dylib -LIB.DEVLNK = lib$(NAME).dylib -LIB.SHARED = lib$(NAME).$(SO_VERSION).dylib -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) -LIB.SONAME.MX = lib$(NAME)mx.$(SO_MAJOR).dylib -LIB.DEVLNK.MX = lib$(NAME)mx.dylib -LIB.SHARED.MX = lib$(NAME)mx.$(SO_VERSION).dylib -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -dynamiclib -install_name $(GLEW_DEST)/lib/$(LIB.SHARED.MX) -current_version $(SO_VERSION) -compatibility_version $(SO_MAJOR) diff --git a/Engine/lib/glew/config/Makefile.fedora-mingw32 b/Engine/lib/glew/config/Makefile.fedora-mingw32 deleted file mode 100644 index f27db344d3..0000000000 --- a/Engine/lib/glew/config/Makefile.fedora-mingw32 +++ /dev/null @@ -1,11 +0,0 @@ -# For cross-compiling from Linux to Windows x86 using mingw32 -# http://www.mingw.org/ -# -# $ make SYSTEM=fedora-mingw32 -# - -include config/Makefile.linux-mingw32 - -CC := i686-pc-mingw32-gcc -LD := i686-pc-mingw32-ld -LDFLAGS.GL += -L/usr/i686-pc-mingw32/sys-root/mingw/lib diff --git a/Engine/lib/glew/config/Makefile.freebsd b/Engine/lib/glew/config/Makefile.freebsd deleted file mode 100644 index ab9d9d90b2..0000000000 --- a/Engine/lib/glew/config/Makefile.freebsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -CFLAGS.EXTRA += -I/usr/X11R6/include -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.gnu b/Engine/lib/glew/config/Makefile.gnu deleted file mode 100644 index 2398ab0540..0000000000 --- a/Engine/lib/glew/config/Makefile.gnu +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.irix b/Engine/lib/glew/config/Makefile.irix deleted file mode 100644 index a1be5eeff8..0000000000 --- a/Engine/lib/glew/config/Makefile.irix +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -ABI = -64# -n32 -CC += $(ABI) -LD += $(ABI) -LDFLAGS.EXTRA = -LDFLAGS.GL = -lGL -lXext -lX11 -NAME = GLEW -WARN = -fullwarn -woff 1110,1498 -POPT = -O2 -OPT:Olimit=0 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.kfreebsd b/Engine/lib/glew/config/Makefile.kfreebsd deleted file mode 100644 index 9501091bb0..0000000000 --- a/Engine/lib/glew/config/Makefile.kfreebsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.linux b/Engine/lib/glew/config/Makefile.linux deleted file mode 100644 index 234adc65c3..0000000000 --- a/Engine/lib/glew/config/Makefile.linux +++ /dev/null @@ -1,36 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = cc -M_ARCH ?= $(shell uname -m) -ARCH64 = false -ifeq (x86_64,${M_ARCH}) - ARCH64 = true -endif -ifeq (ppc64,${M_ARCH}) - ARCH64 = true -endif -ifeq (${ARCH64},true) - LDFLAGS.EXTRA = -L/usr/X11R6/lib64 -L/usr/lib64 - LIBDIR = $(GLEW_DEST)/lib64 -else - LDFLAGS.EXTRA = -L/usr/X11R6/lib -L/usr/lib - LIBDIR = $(GLEW_DEST)/lib -endif -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -CFLAGS.EXTRA += -fPIC -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.linux-mingw32 b/Engine/lib/glew/config/Makefile.linux-mingw32 deleted file mode 100644 index d9573a7809..0000000000 --- a/Engine/lib/glew/config/Makefile.linux-mingw32 +++ /dev/null @@ -1,26 +0,0 @@ -# For cross-compiling from Linux to Windows x86 using mingw32 -# http://www.mingw.org/ -# -# $ make SYSTEM=linux-mingw32 -# - -NAME := glew32 -CC := i586-mingw32msvc-gcc -LD := i586-mingw32msvc-ld -LN := -STRIP := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) --out-implib lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.linux-mingw64 b/Engine/lib/glew/config/Makefile.linux-mingw64 deleted file mode 100644 index 6093351168..0000000000 --- a/Engine/lib/glew/config/Makefile.linux-mingw64 +++ /dev/null @@ -1,26 +0,0 @@ -# For cross-compiling from Linux to Windows amd64 using mingw32 -# http://www.mingw.org/ -# -# $ make SYSTEM=linux-mingw64 -# - -NAME := glew32 -CC := amd64-mingw32msvc-gcc -LD := amd64-mingw32msvc-ld -LN := -STRIP := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -soname $(LIB.SONAME) --out-implib lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) --out-implib lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.mingw b/Engine/lib/glew/config/Makefile.mingw deleted file mode 100644 index e74fd3c24d..0000000000 --- a/Engine/lib/glew/config/Makefile.mingw +++ /dev/null @@ -1,21 +0,0 @@ -NAME = glew32 -# use gcc for linking, with ld it does not work -CC := gcc -LD := gcc -LN := -CFLAGS.SO = -DGLEW_BUILD -LDFLAGS.GL = -lopengl32 -lgdi32 -luser32 -lkernel32 -LDFLAGS.EXTRA = -L/mingw/lib -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = .exe -LIB.SONAME = lib$(NAME).dll -LIB.DEVLNK = lib$(NAME).dll.a # for mingw this is the dll import lib -LIB.SHARED = $(NAME).dll -LIB.STATIC = lib$(NAME).a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO = -shared -Wl,-soname,$(LIB.SONAME) -Wl,--out-implib,lib/$(LIB.DEVLNK) -LIB.SONAME.MX = lib$(NAME)mx.dll -LIB.DEVLNK.MX = lib$(NAME)mx.dll.a # for mingw this is the dll import lib -LIB.SHARED.MX = $(NAME)mx.dll -LIB.STATIC.MX = lib$(NAME)mx.a # the static lib will be broken (see CFLAGS.SO) -LDFLAGS.SO.MX = -shared -Wl,-soname,$(LIB.SONAME.MX) -Wl,--out-implib,lib/$(LIB.DEVLNK.MX) diff --git a/Engine/lib/glew/config/Makefile.nacl-32 b/Engine/lib/glew/config/Makefile.nacl-32 deleted file mode 100644 index 2a5cec757a..0000000000 --- a/Engine/lib/glew/config/Makefile.nacl-32 +++ /dev/null @@ -1,36 +0,0 @@ -NAME = $(REGAL_NAME) - -M_PREFIX = i686 -M_NAME ?= $(shell uname -s) -ifeq (Linux,${M_NAME}) -M_PREFIX = i686 -endif - -CC = $(M_PREFIX)-nacl-gcc -CXX = $(M_PREFIX)-nacl-g++ -LD = $(M_PREFIX)-nacl-ld -STRIP ?= -EXT.DYNAMIC = so -LDFLAGS.EXTRA = -LIBDIR = -CFLAGS.EXTRA += -fPIC -CFLAGS.EXTRA += -m32 -LDFLAGS.EXTRA += -melf_nacl -LDFLAGS.GL = -LDFLAGS.GLU = -lRegalGLU -LDFLAGS.GLUT = -lRegalGLUT -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -shared -WARN = -Wall -W -Wno-unused-parameter -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.nacl-64 b/Engine/lib/glew/config/Makefile.nacl-64 deleted file mode 100644 index 37cb6e93bd..0000000000 --- a/Engine/lib/glew/config/Makefile.nacl-64 +++ /dev/null @@ -1,36 +0,0 @@ -NAME = $(REGAL_NAME) - -M_PREFIX = i686 -M_NAME ?= $(shell uname -s) -ifeq (Linux,${M_NAME}) -M_PREFIX = i686 -endif - -CC = $(M_PREFIX)-nacl-gcc -CXX = $(M_PREFIX)-nacl-g++ -LD = $(M_PREFIX)-nacl-ld -STRIP ?= -EXT.DYNAMIC = so -LDFLAGS.EXTRA = -LIBDIR = -CFLAGS.EXTRA += -fPIC -CFLAGS.EXTRA += -m64 -LDFLAGS.EXTRA += -melf64_nacl -LDFLAGS.GL = -LDFLAGS.GLU = -lRegalGLU -LDFLAGS.GLUT = -lRegalGLUT -LDFLAGS.STATIC = -LDFLAGS.DYNAMIC = -shared -WARN = -Wall -W -Wno-unused-parameter -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = $(LDFLAGS.DYNAMIC) -soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.netbsd b/Engine/lib/glew/config/Makefile.netbsd deleted file mode 100644 index 5f69cd60ef..0000000000 --- a/Engine/lib/glew/config/Makefile.netbsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -LDFLAGS.EXTRA = -L/usr/X11R7/lib -R /usr/X11R7/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -CFLAGS.EXTRA += -I/usr/X11R7/include -fPIC -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.openbsd b/Engine/lib/glew/config/Makefile.openbsd deleted file mode 100644 index 365ea9e4b8..0000000000 --- a/Engine/lib/glew/config/Makefile.openbsd +++ /dev/null @@ -1,22 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -LDFLAGS.EXTRA = -L/usr/X11R6/lib -LDFLAGS.GL = -lXmu -lXi -lGLU -lGL -lXext -lX11 -lm -LDFLAGS.STATIC = -Wl,-Bstatic -LDFLAGS.DYNAMIC = -Wl,-Bdynamic -CFLAGS.EXTRA += -I/usr/X11R6/include -NAME = GLEW -WARN = -Wall -W -POPT = -O2 -BIN.SUFFIX = -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -soname $(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -soname $(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/Makefile.solaris b/Engine/lib/glew/config/Makefile.solaris deleted file mode 100644 index befba5a838..0000000000 --- a/Engine/lib/glew/config/Makefile.solaris +++ /dev/null @@ -1,18 +0,0 @@ -NAME = $(GLEW_NAME) -CC = cc -LD = ld -CFLAGS.EXTRA = -I/usr/openwin/include -LDFLAGS.SO = -G -LDFLAGS.EXTRA = -L/usr/openwin/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -NAME = GLEW -BIN.SUFFIX = -POPT = -xO2 -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a diff --git a/Engine/lib/glew/config/Makefile.solaris-gcc b/Engine/lib/glew/config/Makefile.solaris-gcc deleted file mode 100644 index c0373f4d48..0000000000 --- a/Engine/lib/glew/config/Makefile.solaris-gcc +++ /dev/null @@ -1,20 +0,0 @@ -NAME = $(GLEW_NAME) -CC = gcc -LD = ld -CFLAGS.EXTRA = -I/usr/openwin/include -LDFLAGS.SO = -G -LDFLAGS.EXTRA = -L/usr/openwin/lib -LDFLAGS.GL = -lXmu -lXi -lGL -lXext -lX11 -NAME = GLEW -BIN.SUFFIX = -POPT = -O2 -LIB.SONAME = lib$(NAME).so.$(SO_MAJOR) -LIB.DEVLNK = lib$(NAME).so -LIB.SHARED = lib$(NAME).so.$(SO_VERSION) -LIB.STATIC = lib$(NAME).a -LDFLAGS.SO = -shared -Wl,-soname=$(LIB.SONAME) -LIB.SONAME.MX = lib$(NAME)mx.so.$(SO_MAJOR) -LIB.DEVLNK.MX = lib$(NAME)mx.so -LIB.SHARED.MX = lib$(NAME)mx.so.$(SO_VERSION) -LIB.STATIC.MX = lib$(NAME)mx.a -LDFLAGS.SO.MX = -shared -Wl,-soname=$(LIB.SONAME.MX) diff --git a/Engine/lib/glew/config/config.guess b/Engine/lib/glew/config/config.guess deleted file mode 100644 index 116b959ee5..0000000000 --- a/Engine/lib/glew/config/config.guess +++ /dev/null @@ -1,1523 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. - -timestamp='2012-02-10' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Operation modes: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > $dummy.c ; - for c in cc gcc c89 c99 ; do - if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -# Note: order is significant - the case branches are not exclusive. - -case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` - case "${UNAME_MACHINE_ARCH}" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval $set_cc_for_build - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "${UNAME_VERSION}" in - Debian*) - release='-gnu' - ;; - *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} - exit ;; - *:ekkoBSD:*:*) - echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} - exit ;; - *:SolidBSD:*:*) - echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd${UNAME_RELEASE} - exit ;; - *:MirBSD:*:*) - echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE="alpha" ;; - "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; - "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; - "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; - "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; - "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; - "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; - "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; - "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; - "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; - "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; - "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; - "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Alpha\ *:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # Should we change UNAME_MACHINE based on the output of uname instead - # of the specific Alpha model? - echo alpha-pc-interix - exit ;; - 21064:Windows_NT:50:3) - echo alpha-dec-winnt3.5 - exit ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo ${UNAME_MACHINE}-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix${UNAME_RELEASE} - exit ;; - arm:riscos:*:*|arm:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux${UNAME_RELEASE} - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval $set_cc_for_build - SUN_ARCH="i386" - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH="x86_64" - fi - fi - echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos${UNAME_RELEASE} - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos${UNAME_RELEASE} - ;; - sun4) - echo sparc-sun-sunos${UNAME_RELEASE} - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos${UNAME_RELEASE} - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten${UNAME_RELEASE} - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten${UNAME_RELEASE} - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix${UNAME_RELEASE} - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix${UNAME_RELEASE} - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix${UNAME_RELEASE} - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && - dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`$dummy $dummyarg` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos${UNAME_RELEASE} - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] - then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ - [ ${TARGET_BINARY_INTERFACE}x = x ] - then - echo m88k-dg-dgux${UNAME_RELEASE} - else - echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else - echo i586-dg-dgux${UNAME_RELEASE} - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} - fi - echo ${IBM_ARCH}-ibm-aix${IBM_REV} - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - case "${UNAME_MACHINE}" in - 9000/31? ) HP_ARCH=m68000 ;; - 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "${HP_ARCH}" = "" ]; then - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ ${HP_ARCH} = "hppa2.0w" ] - then - eval $set_cc_for_build - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH="hppa2.0w" - else - HP_ARCH="hppa64" - fi - fi - echo ${HP_ARCH}-hp-hpux${HPUX_REV} - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux${HPUX_REV} - exit ;; - 3050*:HI-UX:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-unknown-osf1mk - else - echo ${UNAME_MACHINE}-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:BSD/OS:*:*) - echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} - exit ;; - *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case ${UNAME_PROCESSOR} in - amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*:MSYS*:*) - echo ${UNAME_MACHINE}-pc-msys - exit ;; - i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 - exit ;; - i*:PW*:*) - echo ${UNAME_MACHINE}-pc-pw32 - exit ;; - *:Interix*:*) - case ${UNAME_MACHINE} in - x86) - echo i586-pc-interix${UNAME_RELEASE} - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix${UNAME_RELEASE} - exit ;; - IA64) - echo ia64-unknown-interix${UNAME_RELEASE} - exit ;; - esac ;; - [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) - echo i${UNAME_MACHINE}-pc-mks - exit ;; - 8664:Windows_NT:*) - echo x86_64-pc-mks - exit ;; - i*:Windows_NT*:* | Pentium*:Windows_NT*:*) - # How do we know it's Interix rather than the generic POSIX subsystem? - # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we - # UNAME_MACHINE based on the output of uname instead of i386? - echo i586-pc-interix - exit ;; - i*:UWIN*:*) - echo ${UNAME_MACHINE}-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` - exit ;; - *:GNU:*:*) - # the GNU system - echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; - arm*:Linux:*:*) - eval $set_cc_for_build - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo ${UNAME_MACHINE}-unknown-linux-gnu - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo ${UNAME_MACHINE}-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo ${UNAME_MACHINE}-unknown-stop - exit ;; - i*86:atheos:*:*) - echo ${UNAME_MACHINE}-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo ${UNAME_MACHINE}-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos${UNAME_RELEASE} - exit ;; - i*86:*DOS:*:*) - echo ${UNAME_MACHINE}-pc-msdosdjgpp - exit ;; - i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) - UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} - else - echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo ${UNAME_MACHINE}-pc-sco$UNAME_REL - else - echo ${UNAME_MACHINE}-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos${UNAME_RELEASE} - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos${UNAME_RELEASE} - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos${UNAME_RELEASE} - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos${UNAME_RELEASE} - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv${UNAME_RELEASE} - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo ${UNAME_MACHINE}-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo ${UNAME_MACHINE}-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux${UNAME_RELEASE} - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} - else - echo mips-unknown-sysv${UNAME_RELEASE} - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux${UNAME_RELEASE} - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux${UNAME_RELEASE} - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux${UNAME_RELEASE} - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux${UNAME_RELEASE} - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux${UNAME_RELEASE} - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-?:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk${UNAME_RELEASE} - exit ;; - NSE-?:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk${UNAME_RELEASE} - exit ;; - NSR-?:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk${UNAME_RELEASE} - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = "386"; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo ${UNAME_MACHINE}-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} - exit ;; - *:DragonFly:*:*) - echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "${UNAME_MACHINE}" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' - exit ;; - i*86:rdos:*:*) - echo ${UNAME_MACHINE}-pc-rdos - exit ;; - i*86:AROS:*:*) - echo ${UNAME_MACHINE}-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo ${UNAME_MACHINE}-unknown-esx - exit ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = ${UNAME_MACHINE} -UNAME_RELEASE = ${UNAME_RELEASE} -UNAME_SYSTEM = ${UNAME_SYSTEM} -UNAME_VERSION = ${UNAME_VERSION} -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/Engine/lib/glew/config/version b/Engine/lib/glew/config/version deleted file mode 100644 index 3d56f1959c..0000000000 --- a/Engine/lib/glew/config/version +++ /dev/null @@ -1,7 +0,0 @@ -GLEW_MAJOR = 1 -GLEW_MINOR = 10 -GLEW_MICRO = 0 -GLEW_VERSION = $(GLEW_MAJOR).$(GLEW_MINOR).$(GLEW_MICRO) -GLEW_NAME = GLEW -SO_MAJOR = $(GLEW_MAJOR).$(GLEW_MINOR) -SO_VERSION = $(GLEW_VERSION) diff --git a/Engine/lib/glew/doc/advanced.html b/Engine/lib/glew/doc/advanced.html deleted file mode 100644 index a3cb7db90a..0000000000 --- a/Engine/lib/glew/doc/advanced.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Automatic Code Generation

- -

-Starting from release 1.1.0, the source code and parts of the -documentation are automatically generated from the extension -specifications in a two-step process. In the first step, -specification files from the OpenGL registry are downloaded and -parsed. Skeleton descriptors are created for each extension. These -descriptors contain all necessary information for creating the source -code and documentation in a simple and compact format, including the -name of the extension, url link to the specification, tokens, function -declarations, typedefs and struct definitions. In the second step, -the header files as well as the library and glewinfo source are -generated from the descriptor files. The code generation scripts are -located in the auto subdirectory. -

- -

-The code generation scripts require GNU make, wget, and perl. On -Windows, the simplest way to get access to these tools is to install -Cygwin, but make sure that the -root directory is mounted in binary mode. The makefile in the -auto directory provides the following build targets: -

- - - - - - - - - - - - -
makeCreate the source files from the descriptors.
If the -descriptors do not exist, create them from the spec files.
If the spec -files do not exist, download them from the OpenGL repository.
make cleanDelete the source files.
make clobberDelete the source files and the descriptors.
make destroyDelete the source files, the descriptors, and the spec files.
make customCreate the source files for the extensions -listed in auto/custom.txt.
See "Custom Code -Generation" below for more details.
- -

Adding a New Extension

- -

-To add a new extension, create a descriptor file for the extension in -auto/core and rerun the code generation scripts by typing -make clean; make in the auto directory. -

- -

-The format of the descriptor file is given below. Items in -brackets are optional. -

- -

-<Extension Name>
-[<URL of Specification File>]
-    [<Token Name> <Token Value>]
-    [<Token Name> <Token Value>]
-    ...
-    [<Typedef>]
-    [<Typedef>]
-    ...
-    [<Function Signature>]
-    [<Function Signature>]
-    ...
- -

- - - -

-Take a look at one of the files in auto/core for an -example. Note that typedefs and function signatures should not be -terminated with a semicolon. -

- -

Custom Code Generation

-

-Starting from GLEW 1.3.0, it is possible to control which extensions -to include in the libarary by specifying a list in -auto/custom.txt. This is useful when you do not need all the -extensions and would like to reduce the size of the source files. -Type make clean; make custom in the auto directory -to rerun the scripts with the custom list of extensions. -

- -

-For example, the following is the list of extensions needed to get GLEW and the -utilities to compile. -

- -

-WGL_ARB_extensions_string
-WGL_ARB_multisample
-WGL_ARB_pixel_format
-WGL_ARB_pbuffer
-WGL_EXT_extensions_string
-WGL_ATI_pixel_format_float
-WGL_NV_float_buffer
-

- -

Multiple Rendering Contexts (GLEW MX)

- -

Starting with release 1.2.0, thread-safe support for multiple -rendering contexts, possibly with different capabilities, is -available. Since this is not required by most users, it is not added -to the binary releases to maintain compatibility between different -versions. To include multi-context support, you have to do the -following:

-
    -
  1. Compile and use GLEW with the GLEW_MX preprocessor token -defined.
  2. -
  3. For each rendering context, create a GLEWContext object -that will be available as long as the rendering context exists.
  4. -
  5. Define a macro or function called glewGetContext() that -returns a pointer to the GLEWContext object associated with -the rendering context from which OpenGL/WGL/GLX calls are issued. This -dispatch mechanism is primitive, but generic. -
  6. Make sure that you call glewInit() after creating the -GLEWContext object in each rendering context. Note, that the -GLEWContext pointer returned by glewGetContext() has -to reside in global or thread-local memory. -
- -

Note that according to the MSDN -WGL documentation, you have to initialize the entry points for -every rendering context that use pixel formats with different -capabilities For example, the pixel formats provided by the generic -software OpenGL implementation by Microsoft vs. the hardware -accelerated pixel formats have different capabilities. GLEW by -default ignores this requirement, and does not define per-context -entry points (you can however do this using the steps described -above). Assuming a global namespace for the entry points works in -most situations, because typically all hardware accelerated pixel -formats provide the same entry points and capabilities. This means -that unless you use the multi-context version of GLEW, you need to -call glewInit() only once in your program, or more precisely, -once per process.

- -

Separate Namespace

- -

-To avoid name clashes when linking with libraries that include the -same symbols, extension entry points are declared in a separate -namespace (release 1.1.0 and up). This is achieved by aliasing OpenGL -function names to their GLEW equivalents. For instance, -glFancyFunction is simply an alias to -glewFancyFunction. The separate namespace does not effect -token and function pointer definitions. -

- -

Known Issues

- -

-GLEW requires GLX 1.2 for compatibility with GLUT. -

- - -
- - diff --git a/Engine/lib/glew/doc/basic.html b/Engine/lib/glew/doc/basic.html deleted file mode 100644 index 4419b33b06..0000000000 --- a/Engine/lib/glew/doc/basic.html +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Initializing GLEW

-

-First you need to create a valid OpenGL rendering context and call -glewInit() to initialize the extension entry points. If -glewInit() returns GLEW_OK, the initialization -succeeded and you can use the available extensions as well as core -OpenGL functionality. For example: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-...
-glutInit(&argc, argv);
-glutCreateWindow("GLEW Test");
-GLenum err = glewInit();
-if (GLEW_OK != err)
-{
-  /* Problem: glewInit failed, something is seriously wrong. */
-  fprintf(stderr, "Error: %s\n", glewGetErrorString(err));
-  ...
-}
-fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
-

- -

Checking for Extensions

- -

-Starting from GLEW 1.1.0, you can find out if a particular extension -is available on your platform by querying globally defined variables -of the form GLEW_{extension_name}: -

- -

-if (GLEW_ARB_vertex_program)
-{
-  /* It is safe to use the ARB_vertex_program extension here. */
-  glGenProgramsARB(...);
-}
-

- -

-In GLEW 1.0.x, a global structure was used for this task. To ensure -binary compatibility between releases, the struct was replaced with a -set of variables. -

- -

-You can also check for core OpenGL functionality. For example, to -see if OpenGL 1.3 is supported, do the following: -

- -

-if (GLEW_VERSION_1_3)
-{
-  /* Yay! OpenGL 1.3 is supported! */
-}
-

- -

-In general, you can check if GLEW_{extension_name} or -GLEW_VERSION_{version} is true or false. -

- -

-It is also possible to perform extension checks from string -input. Starting from the 1.3.0 release, use glewIsSupported -to check if the required core or extension functionality is -available: -

- -

-if (glewIsSupported("GL_VERSION_1_4  GL_ARB_point_sprite"))
-{
-  /* Great, we have OpenGL 1.4 + point sprites. */
-}
-

- -

-For extensions only, glewGetExtension provides a slower alternative -(GLEW 1.0.x-1.2.x). Note that in the 1.3.0 release -glewGetExtension was replaced with -glewIsSupported. -

- -

-if (glewGetExtension("GL_ARB_fragment_program"))
-{
-  /* Looks like ARB_fragment_program is supported. */
-}
-

- -

Experimental Drivers

- -

-GLEW obtains information on the supported extensions from the graphics -driver. Experimental or pre-release drivers, however, might not -report every available extension through the standard mechanism, in -which case GLEW will report it unsupported. To circumvent this -situation, the glewExperimental global switch can be turned -on by setting it to GL_TRUE before calling -glewInit(), which ensures that all extensions with valid -entry points will be exposed. -

- -

Platform Specific Extensions

- -

-Platform specific extensions are separated into two header files: -wglew.h and glxew.h, which define the available -WGL and GLX extensions. To determine if a certain -extension is supported, query WGLEW_{extension name} or -GLXEW_{extension_name}. For example: -

- -

-#include <GL/wglew.h>
-
-if (WGLEW_ARB_pbuffer)
-{
-  /* OK, we can use pbuffers. */
-}
-else
-{
-  /* Sorry, pbuffers will not work on this platform. */
-}
-

- -

-Alternatively, use wglewIsSupported or -glxewIsSupported to check for extensions from a string: -

- -

-if (wglewIsSupported("WGL_ARB_pbuffer"))
-{
-  /* OK, we can use pbuffers. */
-}
-

- -

Utilities

- -

-GLEW provides two command-line utilities: one for creating a list of -available extensions and visuals; and another for verifying extension -entry points. -

- -

visualinfo: extensions and visuals

- -

-visualinfo is an extended version of glxinfo. The -Windows version creates a file called visualinfo.txt, which -contains a list of available OpenGL, WGL, and GLU extensions as well -as a table of visuals aka. pixel formats. Pbuffer and MRT capable -visuals are also included. For additional usage information, type -visualinfo -h. -

- -

glewinfo: extension verification utility

- -

-glewinfo allows you to verify the entry points for the -extensions supported on your platform. The Windows version -reports the results to a text file called glewinfo.txt. The -Unix version prints the results to stdout. -

- -

Windows usage:

-
glewinfo [-pf <id>]
- -

where <id> is the pixel format id for which the -capabilities are displayed.

- -

Unix usage:

-
glewinfo [-display <dpy>] [-visual <id>]
- -

where <dpy> is the X11 display and <id> is -the visual id for which the capabilities are displayed.

- - -
- - diff --git a/Engine/lib/glew/doc/build.html b/Engine/lib/glew/doc/build.html deleted file mode 100644 index 7e31e944ad..0000000000 --- a/Engine/lib/glew/doc/build.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Building GLEW

- -

Windows

- -

A MS Visual Studio project is provided in the build/vc6 directory.

-

Pre-built shared and static libraries are also available for download.

- -

Makefile

- -

For platforms other than MS Windows, the provided Makefile is used.

- -

Command-line variables

- - - - - - -
SYSTEMautoTarget system to build: darwin, linux, solaris, etc.
For a full list of supported targets: ls config/Makefile.*
-config.guess is used to auto detect, as necessary.
GLEW_DEST/usrBase directory for installation.
- -

Make targets

- - - - - - - - - - - - -
allBuild everything.
glew.libBuild static and dynamic GLEW libraries.
glew.lib.mxBuild static and dynamic GLEWmx libraries.
glew.binBuild glewinfo and visualinfo utilities.
cleanDelete temporary and built files.
install.allInstall everything.
installInstall GLEW libraries.
install.mxInstall GLEWmx libraries.
install.binInstall glewinfo and visualinfo utilities.
uninstallDelete installed files.
- -

Requirements

- -
    -
  • GNU make
  • -
  • perl
  • -
  • wget
  • -
  • GNU sed
  • -
  • gcc compiler
  • -
- -Ubuntu:
sudo apt-get install Xmu-dev Xi-Dev
- -
- - diff --git a/Engine/lib/glew/doc/credits.html b/Engine/lib/glew/doc/credits.html deleted file mode 100644 index 983fc7bfca..0000000000 --- a/Engine/lib/glew/doc/credits.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Credits

- -

-GLEW was developed by Milan -Ikits and Marcelo -Magallon. They also perform occasional maintainance to make sure -that GLEW stays in mint condition. Aaron Lefohn, Joe Kniss, and Chris -Wyman were the first users and also assisted with the design and -debugging process. The acronym GLEW originates from Aaron Lefohn. -Pasi Kärkkäinen identified and fixed several problems with -GLX and SDL. Nate Robins created the wglinfo utility, to -which modifications were made by Michael Wimmer. -

- -

Copyright

- -

-GLEW is originally derived from the EXTGL project by Lev Povalahev. -The source code is licensed under the Modified BSD -License, the Mesa 3-D License (MIT -License), and the Khronos License (MIT -License). The automatic code generation scripts are released under -the GNU GPL. -

- -
- - diff --git a/Engine/lib/glew/doc/glew.css b/Engine/lib/glew/doc/glew.css deleted file mode 100644 index 1bb7dd178a..0000000000 --- a/Engine/lib/glew/doc/glew.css +++ /dev/null @@ -1,187 +0,0 @@ -h1 -{ - color: black; - font: 23px "Verdana", "Arial", "Helvetica", sans-serif; - font-weight: bold; - text-align: center; - margin-top: 12px; - margin-bottom: 18px; -} - -h2 -{ - color: black; - font: 18px "Verdana", "Arial", "Helvetica", sans-serif; - font-weight: bold; - text-align: left; - padding-top: 0px; - padding-bottom: 0px; - margin-top: 18px; - margin-bottom: 12px; -} - -h3 -{ - color: black; - font: 17px "Verdana", "Arial", "Helvetica", sans-serif; - text-align: left; - padding-top: 0px; - padding-bottom: 0px; - margin-top: 12px; - margin-bottom: 12px; -} - -small -{ - font: 8pt "Verdana", "Arial", "Helvetica", sans-serif; -} - -body -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: left; -} - -td -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; -} - -tt -{ - color: rgb(0,120,0); -} -/* color: maroon; */ - -td.num -{ - color: lightgrey; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: right; -} - -blockquote -{ - color: rgb(0,120,0); - background: #f0f0f0; - text-align: left; - margin-left: 40px; - margin-right: 40px; - margin-bottom: 6px; - padding-bottom: 0px; - margin-top: 0px; - padding-top: 0px; - border-top: 0px; - border-width: 0px; -} - -pre -{ - color: rgb(0,120,0); - background: #f0f0f0; - text-align: left; - margin-left: 40px; - margin-right: 40px; - margin-bottom: 6px; - padding-bottom: 0px; - margin-top: 0px; - padding-top: 0px; - border-top: 0px; - border-width: 0px; -} - -p -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: left; - margin-bottom: 0px; - padding-bottom: 6px; - margin-top: 0px; - padding-top: 0px; -} - -p.right -{ - color: black; - font: 10pt "Verdana", "Arial", "Helvetica", sans-serif; - text-align: right; - margin-bottom: 0px; - padding-bottom: 6px; - margin-top: 0px; - padding-top: 0px; -} - -p.pre -{ - color: rgb(0,120,0); - font: 10pt "Courier New", "Courier", monospace; - background: #f0f0f0; - text-align: left; - margin-top: 0px; - margin-bottom: 6px; - margin-left: 40px; - margin-right: 40px; - padding-top: 0px; - padding-bottom: 6px; - padding-left: 6px; - padding-right: 6px; - border-top: 0px; - border-width: 0px; -} - -a:link -{ - color: rgb(0,0,139); - text-decoration: none; -} - -a:visited -{ - color: rgb(220,20,60); - text-decoration: none; -} - -a:hover -{ - color: rgb(220,20,60); - text-decoration: underline; - background: "#e8e8e8"; -} - -ul -{ - list-style-type: disc; - text-align: left; - margin-left: 40px; - margin-top: 0px; - padding-top: 0px; - margin-bottom: 0px; - padding-bottom: 3px; -} - -ul.none -{ - list-style-type: none; -} - -ol -{ - text-align: left; - margin-left: 40px; - margin-top: 0px; - padding-top: 0px; - margin-bottom: 0px; - padding-bottom: 12px; -} - -hr -{ - color: maroon; - background-color: maroon; - height: 1px; - border: 0px; - width: 80%; -} diff --git a/Engine/lib/glew/doc/glew.html b/Engine/lib/glew/doc/glew.html deleted file mode 100644 index 4800bbfa0b..0000000000 --- a/Engine/lib/glew/doc/glew.html +++ /dev/null @@ -1,635 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Supported OpenGL Extensions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 3DFX_multisample
2 3DFX_tbuffer
3 3DFX_texture_compression_FXT1

4 AMD_blend_minmax_factor
5 AMD_conservative_depth
6 AMD_debug_output
7 AMD_depth_clamp_separate
8 AMD_draw_buffers_blend
9 AMD_interleaved_elements
10 AMD_multi_draw_indirect
11 AMD_name_gen_delete
12 AMD_performance_monitor
13 AMD_pinned_memory
14 AMD_query_buffer_object
15 AMD_sample_positions
16 AMD_seamless_cubemap_per_texture
17 AMD_shader_stencil_export
18 AMD_shader_trinary_minmax
19 AMD_sparse_texture
20 AMD_stencil_operation_extended
21 AMD_texture_texture4
22 AMD_transform_feedback3_lines_triangles
23 AMD_vertex_shader_layer
24 AMD_vertex_shader_tessellator
25 AMD_vertex_shader_viewport_index

26 ANGLE_depth_texture
27 ANGLE_framebuffer_blit
28 ANGLE_framebuffer_multisample
29 ANGLE_instanced_arrays
30 ANGLE_pack_reverse_row_order
31 ANGLE_program_binary
32 ANGLE_texture_compression_dxt1
33 ANGLE_texture_compression_dxt3
34 ANGLE_texture_compression_dxt5
35 ANGLE_texture_usage
36 ANGLE_timer_query
37 ANGLE_translated_shader_source

38 APPLE_aux_depth_stencil
39 APPLE_client_storage
40 APPLE_element_array
41 APPLE_fence
42 APPLE_float_pixels
43 APPLE_flush_buffer_range
44 APPLE_object_purgeable
45 APPLE_pixel_buffer
46 APPLE_rgb_422
47 APPLE_row_bytes
48 APPLE_specular_vector
49 APPLE_texture_range
50 APPLE_transform_hint
51 APPLE_vertex_array_object
52 APPLE_vertex_array_range
53 APPLE_vertex_program_evaluators
54 APPLE_ycbcr_422

55 ARB_ES2_compatibility
56 ARB_ES3_compatibility
57 ARB_arrays_of_arrays
58 ARB_base_instance
59 ARB_bindless_texture
60 ARB_blend_func_extended
61 ARB_buffer_storage
62 ARB_cl_event
63 ARB_clear_buffer_object
64 ARB_clear_texture
65 ARB_color_buffer_float
66 ARB_compatibility
67 ARB_compressed_texture_pixel_storage
68 ARB_compute_shader
69 ARB_compute_variable_group_size
70 ARB_conservative_depth
71 ARB_copy_buffer
72 ARB_copy_image
73 ARB_debug_output
74 ARB_depth_buffer_float
75 ARB_depth_clamp
76 ARB_depth_texture
77 ARB_draw_buffers
78 ARB_draw_buffers_blend
79 ARB_draw_elements_base_vertex
80 ARB_draw_indirect
81 ARB_draw_instanced
82 ARB_enhanced_layouts
83 ARB_explicit_attrib_location
84 ARB_explicit_uniform_location
85 ARB_fragment_coord_conventions
86 ARB_fragment_layer_viewport
87 ARB_fragment_program
88 ARB_fragment_program_shadow
89 ARB_fragment_shader
90 ARB_framebuffer_no_attachments
91 ARB_framebuffer_object
92 ARB_framebuffer_sRGB
93 ARB_geometry_shader4
94 ARB_get_program_binary
95 ARB_gpu_shader5
96 ARB_gpu_shader_fp64
97 ARB_half_float_pixel
98 ARB_half_float_vertex
99 ARB_imaging
100 ARB_indirect_parameters
101 ARB_instanced_arrays
102 ARB_internalformat_query
103 ARB_internalformat_query2
104 ARB_invalidate_subdata
105 ARB_map_buffer_alignment
106 ARB_map_buffer_range
107 ARB_matrix_palette
108 ARB_multi_bind
109 ARB_multi_draw_indirect
110 ARB_multisample
111 ARB_multitexture
112 ARB_occlusion_query
113 ARB_occlusion_query2
114 ARB_pixel_buffer_object
115 ARB_point_parameters
116 ARB_point_sprite
117 ARB_program_interface_query
118 ARB_provoking_vertex
119 ARB_query_buffer_object
120 ARB_robust_buffer_access_behavior
121 ARB_robustness
122 ARB_robustness_application_isolation
123 ARB_robustness_share_group_isolation
124 ARB_sample_shading
125 ARB_sampler_objects
126 ARB_seamless_cube_map
127 ARB_seamless_cubemap_per_texture
128 ARB_separate_shader_objects
129 ARB_shader_atomic_counters
130 ARB_shader_bit_encoding
131 ARB_shader_draw_parameters
132 ARB_shader_group_vote
133 ARB_shader_image_load_store
134 ARB_shader_image_size
135 ARB_shader_objects
136 ARB_shader_precision
137 ARB_shader_stencil_export
138 ARB_shader_storage_buffer_object
139 ARB_shader_subroutine
140 ARB_shader_texture_lod
141 ARB_shading_language_100
142 ARB_shading_language_420pack
143 ARB_shading_language_include
144 ARB_shading_language_packing
145 ARB_shadow
146 ARB_shadow_ambient
147 ARB_sparse_texture
148 ARB_stencil_texturing
149 ARB_sync
150 ARB_tessellation_shader
151 ARB_texture_border_clamp
152 ARB_texture_buffer_object
153 ARB_texture_buffer_object_rgb32
154 ARB_texture_buffer_range
155 ARB_texture_compression
156 ARB_texture_compression_bptc
157 ARB_texture_compression_rgtc
158 ARB_texture_cube_map
159 ARB_texture_cube_map_array
160 ARB_texture_env_add
161 ARB_texture_env_combine
162 ARB_texture_env_crossbar
163 ARB_texture_env_dot3
164 ARB_texture_float
165 ARB_texture_gather
166 ARB_texture_mirror_clamp_to_edge
167 ARB_texture_mirrored_repeat
168 ARB_texture_multisample
169 ARB_texture_non_power_of_two
170 ARB_texture_query_levels
171 ARB_texture_query_lod
172 ARB_texture_rectangle
173 ARB_texture_rg
174 ARB_texture_rgb10_a2ui
175 ARB_texture_stencil8
176 ARB_texture_storage
177 ARB_texture_storage_multisample
178 ARB_texture_swizzle
179 ARB_texture_view
180 ARB_timer_query
181 ARB_transform_feedback2
182 ARB_transform_feedback3
183 ARB_transform_feedback_instanced
184 ARB_transpose_matrix
185 ARB_uniform_buffer_object
186 ARB_vertex_array_bgra
187 ARB_vertex_array_object
188 ARB_vertex_attrib_64bit
189 ARB_vertex_attrib_binding
190 ARB_vertex_blend
191 ARB_vertex_buffer_object
192 ARB_vertex_program
193 ARB_vertex_shader
194 ARB_vertex_type_10f_11f_11f_rev
195 ARB_vertex_type_2_10_10_10_rev
196 ARB_viewport_array
197 ARB_window_pos

198 ATIX_point_sprites
199 ATIX_texture_env_combine3
200 ATIX_texture_env_route
201 ATIX_vertex_shader_output_point_size

202 ATI_draw_buffers
203 ATI_element_array
204 ATI_envmap_bumpmap
205 ATI_fragment_shader
206 ATI_map_object_buffer
207 ATI_meminfo
208 ATI_pn_triangles
209 ATI_separate_stencil
210 ATI_shader_texture_lod
211 ATI_text_fragment_shader
212 ATI_texture_compression_3dc
213 ATI_texture_env_combine3
214 ATI_texture_float
215 ATI_texture_mirror_once
216 ATI_vertex_array_object
217 ATI_vertex_attrib_array_object
218 ATI_vertex_streams

219 EXT_422_pixels
220 EXT_Cg_shader
221 EXT_abgr
222 EXT_bgra
223 EXT_bindable_uniform
224 EXT_blend_color
225 EXT_blend_equation_separate
226 EXT_blend_func_separate
227 EXT_blend_logic_op
228 EXT_blend_minmax
229 EXT_blend_subtract
230 EXT_clip_volume_hint
231 EXT_cmyka
232 EXT_color_subtable
233 EXT_compiled_vertex_array
234 EXT_convolution
235 EXT_coordinate_frame
236 EXT_copy_texture
237 EXT_cull_vertex
238 EXT_debug_marker
239 EXT_depth_bounds_test
240 EXT_direct_state_access
241 EXT_draw_buffers2
242 EXT_draw_instanced
243 EXT_draw_range_elements
244 EXT_fog_coord
245 EXT_fragment_lighting
246 EXT_framebuffer_blit
247 EXT_framebuffer_multisample
248 EXT_framebuffer_multisample_blit_scaled
249 EXT_framebuffer_object
250 EXT_framebuffer_sRGB
251 EXT_geometry_shader4
252 EXT_gpu_program_parameters
253 EXT_gpu_shader4
254 EXT_histogram
255 EXT_index_array_formats
256 EXT_index_func
257 EXT_index_material
258 EXT_index_texture
259 EXT_light_texture
260 EXT_misc_attribute
261 EXT_multi_draw_arrays
262 EXT_multisample
263 EXT_packed_depth_stencil
264 EXT_packed_float
265 EXT_packed_pixels
266 EXT_paletted_texture
267 EXT_pixel_buffer_object
268 EXT_pixel_transform
269 EXT_pixel_transform_color_table
270 EXT_point_parameters
271 EXT_polygon_offset
272 EXT_provoking_vertex
273 EXT_rescale_normal
274 EXT_scene_marker
275 EXT_secondary_color
276 EXT_separate_shader_objects
277 EXT_separate_specular_color
278 EXT_shader_image_load_store
279 EXT_shadow_funcs
280 EXT_shared_texture_palette
281 EXT_stencil_clear_tag
282 EXT_stencil_two_side
283 EXT_stencil_wrap
284 EXT_subtexture
285 EXT_texture
286 EXT_texture3D
287 EXT_texture_array
288 EXT_texture_buffer_object
289 EXT_texture_compression_dxt1
290 EXT_texture_compression_latc
291 EXT_texture_compression_rgtc
292 EXT_texture_compression_s3tc
293 EXT_texture_cube_map
294 EXT_texture_edge_clamp
295 EXT_texture_env
296 EXT_texture_env_add
297 EXT_texture_env_combine
298 EXT_texture_env_dot3
299 EXT_texture_filter_anisotropic
300 EXT_texture_integer
301 EXT_texture_lod_bias
302 EXT_texture_mirror_clamp
303 EXT_texture_object
304 EXT_texture_perturb_normal
305 EXT_texture_rectangle
306 EXT_texture_sRGB
307 EXT_texture_sRGB_decode
308 EXT_texture_shared_exponent
309 EXT_texture_snorm
310 EXT_texture_swizzle
311 EXT_timer_query
312 EXT_transform_feedback
313 EXT_vertex_array
314 EXT_vertex_array_bgra
315 EXT_vertex_attrib_64bit
316 EXT_vertex_shader
317 EXT_vertex_weighting
318 EXT_x11_sync_object

319 GREMEDY_frame_terminator
320 GREMEDY_string_marker

321 HP_convolution_border_modes
322 HP_image_transform
323 HP_occlusion_test
324 HP_texture_lighting

325 IBM_cull_vertex
326 IBM_multimode_draw_arrays
327 IBM_rasterpos_clip
328 IBM_static_data
329 IBM_texture_mirrored_repeat
330 IBM_vertex_array_lists

331 INGR_color_clamp
332 INGR_interlace_read

333 INTEL_map_texture
334 INTEL_parallel_arrays
335 INTEL_texture_scissor

336 KHR_debug
337 KHR_texture_compression_astc_ldr

338 KTX_buffer_region

339 MESAX_texture_stack

340 MESA_pack_invert
341 MESA_resize_buffers
342 MESA_window_pos
343 MESA_ycbcr_texture

344 NVX_conditional_render
345 NVX_gpu_memory_info

346 NV_bindless_multi_draw_indirect
347 NV_bindless_texture
348 NV_blend_equation_advanced
349 NV_blend_equation_advanced_coherent
350 NV_blend_square
351 NV_compute_program5
352 NV_conditional_render
353 NV_copy_depth_to_color
354 NV_copy_image
355 NV_deep_texture3D
356 NV_depth_buffer_float
357 NV_depth_clamp
358 NV_depth_range_unclamped
359 NV_draw_texture
360 NV_evaluators
361 NV_explicit_multisample
362 NV_fence
363 NV_float_buffer
364 NV_fog_distance
365 NV_fragment_program
366 NV_fragment_program2
367 NV_fragment_program4
368 NV_fragment_program_option
369 NV_framebuffer_multisample_coverage
370 NV_geometry_program4
371 NV_geometry_shader4
372 NV_gpu_program4
373 NV_gpu_program5
374 NV_gpu_program5_mem_extended
375 NV_gpu_program_fp64
376 NV_gpu_shader5
377 NV_half_float
378 NV_light_max_exponent
379 NV_multisample_coverage
380 NV_multisample_filter_hint
381 NV_occlusion_query
382 NV_packed_depth_stencil
383 NV_parameter_buffer_object
384 NV_parameter_buffer_object2
385 NV_path_rendering
386 NV_pixel_data_range
387 NV_point_sprite
388 NV_present_video
389 NV_primitive_restart
390 NV_register_combiners
391 NV_register_combiners2
392 NV_shader_atomic_counters
393 NV_shader_atomic_float
394 NV_shader_buffer_load
395 NV_shader_storage_buffer_object
396 NV_tessellation_program5
397 NV_texgen_emboss
398 NV_texgen_reflection
399 NV_texture_barrier
400 NV_texture_compression_vtc
401 NV_texture_env_combine4
402 NV_texture_expand_normal
403 NV_texture_multisample
404 NV_texture_rectangle
405 NV_texture_shader
406 NV_texture_shader2
407 NV_texture_shader3
408 NV_transform_feedback
409 NV_transform_feedback2
410 NV_vdpau_interop
411 NV_vertex_array_range
412 NV_vertex_array_range2
413 NV_vertex_attrib_integer_64bit
414 NV_vertex_buffer_unified_memory
415 NV_vertex_program
416 NV_vertex_program1_1
417 NV_vertex_program2
418 NV_vertex_program2_option
419 NV_vertex_program3
420 NV_vertex_program4
421 NV_video_capture

422 OES_byte_coordinates
423 OES_compressed_paletted_texture
424 OES_read_format
425 OES_single_precision

426 OML_interlace
427 OML_resample
428 OML_subsample

429 PGI_misc_hints
430 PGI_vertex_hints

431 REGAL_ES1_0_compatibility
432 REGAL_ES1_1_compatibility
433 REGAL_enable
434 REGAL_error_string
435 REGAL_extension_query
436 REGAL_log

437 REND_screen_coordinates

438 S3_s3tc

439 SGIS_color_range
440 SGIS_detail_texture
441 SGIS_fog_function
442 SGIS_generate_mipmap
443 SGIS_multisample
444 SGIS_pixel_texture
445 SGIS_point_line_texgen
446 SGIS_sharpen_texture
447 SGIS_texture4D
448 SGIS_texture_border_clamp
449 SGIS_texture_edge_clamp
450 SGIS_texture_filter4
451 SGIS_texture_lod
452 SGIS_texture_select

453 SGIX_async
454 SGIX_async_histogram
455 SGIX_async_pixel
456 SGIX_blend_alpha_minmax
457 SGIX_clipmap
458 SGIX_convolution_accuracy
459 SGIX_depth_texture
460 SGIX_flush_raster
461 SGIX_fog_offset
462 SGIX_fog_texture
463 SGIX_fragment_specular_lighting
464 SGIX_framezoom
465 SGIX_interlace
466 SGIX_ir_instrument1
467 SGIX_list_priority
468 SGIX_pixel_texture
469 SGIX_pixel_texture_bits
470 SGIX_reference_plane
471 SGIX_resample
472 SGIX_shadow
473 SGIX_shadow_ambient
474 SGIX_sprite
475 SGIX_tag_sample_buffer
476 SGIX_texture_add_env
477 SGIX_texture_coordinate_clamp
478 SGIX_texture_lod_bias
479 SGIX_texture_multi_buffer
480 SGIX_texture_range
481 SGIX_texture_scale_bias
482 SGIX_vertex_preclip
483 SGIX_vertex_preclip_hint
484 SGIX_ycrcb

485 SGI_color_matrix
486 SGI_color_table
487 SGI_texture_color_table

488 SUNX_constant_data

489 SUN_convolution_border_modes
490 SUN_global_alpha
491 SUN_mesh_array
492 SUN_read_video_pixels
493 SUN_slice_accum
494 SUN_triangle_list
495 SUN_vertex

496 WIN_phong_shading
497 WIN_specular_fog
498 WIN_swap_hint
- -
- - diff --git a/Engine/lib/glew/doc/glew.png b/Engine/lib/glew/doc/glew.png deleted file mode 100644 index d46550f194988fe99362932b29f48aeded97111e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9298 zcmW++dpuMB|3BNz+(+*Bxt8)_E+t)TBve8rx5V5jNh*=cHkT;mR-qE1QYj;)i)^S| zLq*7C?s99G%dY4A_Wk{F_I_-8?7ZKv*B-Ce^Ywf_&rKI6dr2`BF#rH0k2u(#6s&%N z>zD{!@X9!qSRq(MBON?11Aw^f|1KDC|DlrLL!l7su>i0@0Dygk0HAm=&-bex0O+(Gv9)%M`Qy)nAY98hK!tc*7P!$m zkex_O;LdFoK*U5-9)A_0YunT=HG8hR>?H=y7?F1kL6F!W#8&m=FMDl zxVP=Z^Pc28KYP?Yr1p%rQ-0Yc-zSq#?A$%0aycyOceHSMejT!_b6>Obx)|o;jUV;Z zzM5xo9h(eEMb#;YNc*yiZr93GQ(NllGK4@r>UwcnF}Wy}4Etwphvnj0s;LqE-$^F~AtcRj{yWg)d#&ffRB+6HJ9O93=L~de;qQ-;%+1UY7OL2M z>(jttC9S3}UsmQcTedXY{KTh0PWwya>Z&6;1%exhk8b-h^=S@j{M4zpoyou<4wzF~ zRdo>9+ypx@k;rjU(mI_OI(tZRgb0DW(&A1SJl)A}eR+5Qo!u?YjI61tfw)`QuFFe? z5=-Hwr5sS!1N#^$tFxmAaEf-5lIn(Z^|cA<6qA;PF~oBeOAglZmz!vjBbGOZG0xZKXmQa(QV`n6TbcYbH~YHKLjDa|P9h`01; z(y2e&_yEkd0DFCd#NM({2;O6Qt`{2TXt;eQi@52pF9|yqH9T}=JffH9as_eTlu}-1 zcB(pNLS(;`m)b38ke@b>KuJ?9VMLS`;orSCta=!8#B(1F#oa!%MtXqK#4!b9ll*`|omz>4XNlTi()ZC#1eo692 zBzluX2ZiPchyMEjnMGczg%Yn#{d$(|x`q7z-&iHGR+js(DiFp9ft<}5Gs?@uCr@(F zuiFMaa+1`ZK1jYx&X?caYJwGuG;4TI1U298ml6crf`z|xf8>qp;xP|WP{K=ZKt7+# zsK!a?dbKsd7jm^0-a_d@NXMhJcQeH4dveme_|4gV*@f#uf{^6xXl)Ib=f|_>6v>u| zK5N0hjnk2>%!f)+Y=y$lym_OoR|Yv8hdDHTfxVa=e=a(>xozB!&-&Zk<4b-1SCIsi zomTpsxH;Z3s#BFY-joHEN?EDyq67!%nP!s4f`ec)`ggv`=-j&}TPfO|DWY$uAM7*R zWBl*z(=uNGo}Pl`uoru>OK?<(1@c?7eW}po_aLZb)T;g43hGWYtvkeTPI_Ab!Ove? zU(1@q_f{LnveWK-1$FeaJ$@th9Q!aN)2~*!GV9M}&UbUKF)HQl1W6%;3+>pN`Sr}b z=O4u5a0Ujph(w6B#n_Im^%!Cgen^c?t@v7Tmn16m`P$}Wd%0|ho|t`#%>>{g2QwQJxY3NYCdl{S<;%6EZz#L~Ap4pLKEua$AuX!Ow3Nc- z^0_^X%m(c!eImqzV$SbxVQ5N>H;WAJ&2u~HZ)4AGWmGNp{9L}_3=i(oi!H*~r%pEL;Gt*i8=8UB>z4pyzKH`Z?Of#ACcpuGDBdk)n zOiT$wg!rtDt>so$FL#NF(6N^76sK!MwW&7aV$fC`R(w z{)dHtP1JCGNog!B^!OIU$hfH1A?#CS*d^5RcXK13u317L_=n8qyZ^pAO}a}FY`SBU zF?yf{~OGQfGcb9%Fy0Zi{6%$!uW{41ZpzOZ)t4zg-vinE{Jah@w zOB{iv2$2#LV@?4cDr;s$K|$_p0yrCsjDdk{R?G)Bd(e}Ldmndcz`5`Z3@)N#$Dn`a zZ}LpHqqxMFJo0{&ceeH1j`6TGnXw~DJ5uDPUE~FbAfvEtd{&XeTArgqL}CK;E&bXR z$x1H6*ToWU?CGNNJ91Ge7ml^lM8yxVXHLttq;G72VmZNjCAIKC#AKtn@6EC#U67B(%;nHY7G@zNn=f(!V?DIDXkxS&coqv>=*&E-qa|&py5C zw~27=%VBvL06cTEYOi^g@?ql8JbFsqME3GSwT}8cxvc|h^|S;eOGPLuf{BFe#tQA! zbKV{M^XA-5o6{Aduj|AyggMg0M!xF9@bL*N{pm89ZIvqoo2X7=49H3A6DJ|HDyXod zMB3Ve6EGE^S>g*GI`aWvT&hF}^a}>JR!0{@0N9r`?f|2j!N`cJ zNt%XClHx_`vt%CKq*$sdcX)GqQcu#AjI#Zqn?Lqn7gUoRS|~ zJXf>nRHegrz0ehy_!JRJ5sD%5SnP%V^I-<2)`xEE z<#a5RU356P71cYgSvSgrwz7>6R8>I}yWy47glR%Z9JDGx?59=UqSi`cNkTIsm;zUG z5JC@n?VC~@^z@Lyq~N7R^CBg_pJxU$qqo$7@@%PZ#ZO<~nONkx+t) z2iM>`cOou(@sOcjN1JMYCk zC2Ny+mx}4qklyNPhw9b7J(W;J>!1B|bjxn3DxJ9PZ{6;GZ%=~TuvX@_j)%W~VD`2* zze0l?VP2#yM`BG2wH*H#19AWrh=Wsp9=FMtS7+iJNTGJZR zKFKNxiOD?elRqa7OLOhN5h1_3!tY&d+H}u9y(75?1yrbvSm~hR_-9%U$ix$ydJhn{5PfSr_97v`WfhIEj%jzZe*~| zP&~;7v&qRB#koZ?4WSt_tpt_ex0{--qhJX9NjWs`zkmxpE{3%SkwNyt(N0n@>%`Cp zYD+VkxJKVk@eK5?>dN=J+A^Qx+t#@Ub?OearnlKq{81QEp@2xVr-y!MUNqIO&=4JY zn-iH*{~#xBC#6<&Qo&`6hmstD96(+Vi#uoRsdu<_Iur69DSdJqD-QA4T!>CoYq{;{ za8Rbphk+Bm)2^^rQO>`sstaFF+dy1kZEfMqWE-f6DilObj3KAx&(n!9YC2DSNv{Qy zsIUnB$a*`i_SGb(sjqQ2_mMpxUkGr@*AhuOw8cEWakYP>!(A_iJrLj# z#+iG(eC*eIUaZA=>wu>})eqge~Ls2$Iw>}L2y-Xju3Uut>pK7!{DA$Z(kUq7Y3IpAI`84d1KG^M2FotmZw>L# z0}_4ugrv-98}Z3{<1rqOjZk9KUQ2|6c`||0SO?NqDJ)1jY=JGpCO@qpS%vud!)^dN zp%Owr|Cim(;ei5U-$R$%aXHR=2Q6Li9%jU|HWa<_2J zowch?DdT2=+kH7jaG7a&Q1iVFIBtvq#>7{*vXhSI{BhQuj5&2RogvfY8EG2&-Iuzpwx8VvV zcv%oz3nm}d#bypFL4bI$K4B^Y=?brb1w2f?dyIrqI#wD~K?A!4lr0g0SvGCPFM`*k~ zmLVT5my0%rI~GdieCkJZCdT3M$OBQ zBAuqpkDd~l$TZvGc}iNvzRmrWtIo_BvC}ubDrY@A)?gc>zck&G`PV}aAGG_Zsx~os z_0bWncVBDvmMm58vCuHDzEQqHv3qG)(e4hIj5S02mGDx?bMGL?=kVu8A8ci7B*bhk{o-DuS|z~ULh#70uBrptWl7ue{EzNT zGCf%}GD3T5f`uqGwV$u^|9xk=!{fcx9xfS{E)?bZx}-aM0EM=Aq-;$3lBVuqEQYgA z>l4Zn)C~dTAeR7;$6g)f+FxTd#IEs}!|n`?gKXC159p$=;G3SdrpMYH8(F@84(>`z zdm!8QiOoed_yJ+A=`!~{5@G7!%3lOe3rXV*N8%)I~P?Tfp+ z3vw{nQ$RpraWTK2sR$)PvxI=zY2;INA3_vjvwhVuh#>VMvbHAj*s=6u=?&L6)s#%A zAdkDjAAWVd-s!bZ6Ax@fDJy4ByJ~0{5eN{tw!vp^FFU$3rva_L$wvQYL^8e5tLiy&)c4Xc;hm=pA1= z^bD$ab&rn@yMz!o2-c7AAy;c!nVOldtgd$KY%307Z4WD*FDm+P$4;Otm2TBQyv(>= zcuPemw0l;w>wIstF(re!sQIZO1>Wl@0DB>~hZf!c0=bt;QY9x<>y)+nVwD}v$nWbC zdcILw9!;yAK1y?1kFd*KU{_l zu`V{JR9%B1khv+4PcDufOTT%v{gxSdPcBdIYNs$Il|9o^py;fTlvbfsVin8&+kG~U zs2O3UL74hG^J>v|jC%LS?~ti!xI)JGJ+THcc&HaxT=jz`d&+H-VeUpaa;jQ=nvwGu)LMgr%Wut?2-k*V2i&`7})l9Ca z%B-xA+iszV4JB`^FA5GZ+K6(kn3@b9pXuDLwF+5anf!P*Z#TtS*TBF?+fZcP?ESG# zG}J8HR;uozM_~w5uw#UG$UP-i5bJx#SDkXq*N%?Onb8Nst+y$cS9jd^!oD&2-~46O zjYMNGAaCPS&i#TqiO^0(!O1fbdv?6mJge0uZip^&Id>(r75Q7mR<6sjG=h(d6oVH; zmmc<@CPsut#PC^`s;d5ONPpuiLQ4LFzQTu(AD6$N?s87JK%eF&MS0GfY2n7zM_7I2 z7TS|~1_zFfj^*YTpbJYI6SUE;-o+X{zSMqTf%p>3qt}aopVMDbd6w z#&cQo!v#IG-@Wy82*R3Vq>E%672)&wTmNqApu5ik_eiyz8>L?IK`&Bd{$y}aRl;Bc zxBW?g@;70h5D{s-bh+~DVtVK1%pURms4DH`x>iUh>nau>(nnsFW6`8_Z^99`QrTMt z7tcS~Y1Ig}b!7Hsr78o}T9%f3yVTBlT7R+wF+DJ{f)LiUk;q)=e%o2CL6tp~XS&He zWx6L|Y7*|2D-b+bEB}7gU!;@mn9S7`CQKEzv=m;I1K;d1#_(3Tt#mrIk;q=#u)u~V zA`m3<&Eiuo4tQ5@R!>jKR!=eY5(^MleG}`FLaH*y-Ys(->Qw+@`U+u%p^awZsxRif zY!1Mr@x33GEUJADe6F)5Wg`k#WtK6a`6_!VMcTb{0L~WLq)X&HPz(c<#ww-yyJNM151dU z%A@0mo?{J#;G7_h8(0=-c-m25vQ7^krcYBDb{8P*tGmQ3k}qW0Ms6`J~M6 z$vUDVC;fvb#>WGBTinG~boD=a!u5@gQh66Nq|k&O+f$2_JTcPYc+hX_@al2b+E{|H3Ds@zdnJt>rLNHF(2Ih zcy5fnSZdgr-WQ*W{KcS4K~%xO2~}~9M(+!Gb+TF zmoAXb%U8UUD}N_%T4vkqtSrIb5BVgVa2lFJQ|?2orB$w?@z}vc-rB!c)eIaTSsgB$ zBPVfTnJ_iWW-e~8(@r`rWrDF=c>Kz~RCA0Nn4os2naijoAcWl$0l&i$WRC@jEZy)2a-pwtyxR(aYM7@MHWQuys#)B&w9@j}6 zS*R#CY6w?%!oJsbQ`6<*J!cnNyoc?PL)^|e=ZhuOnAnZA;sAU6uOiw%eZ~Fz6)h-| z$naedXH$OgnSh@4KsX87{aab;(~)jQH+<ErTlHd`Nq`7#dtYtMJWGV>qGiqFyao-%R>gLfJb;4KAkUu6OGFGZf1XT(y&Y=mS z$UDOK=#Gvw?MY*bUQ<&Of0aM{Y2Y=mD}k_Y+v%Kjqn8uoQ+(9W2jucl%cSJ@W-1j2 zPW0D_*bFyHNaJ_-2?d_r|0Zo?_`;rOrxhjLwZe9sEud8|p(L#%nsf9~YAU~VE;~)p z_$dhTme~+1$y_& zN^Pvd-J@aWAmMx7D-rq)Eu^+f7z4r|&iY0{<&9@4chtNdhzsak?^BgP*W*+$80GHM zwtB11Gzk_4-h+McAt|H?_6VGtxZ2+F?v}*d_#}(1{-h1IZ-za^EwLg7-VoAQSkvo5 z9}%NmY4l)Qa?+W1B7?Pr)wA(g8m|=(lw^reo}c5 zr=RK081u0Ea`WX2KDZ&9;FT$pa86_-ipQVW{_I7Vw1tIYuo6s2`W_a(IUez7^ebly zrn)~yN%3c(od(VyuMrhslWAmvdG!XCW+<+@3)@)Y-59^v)|6Jz4Y7Cychx^?XE>+$ z9zWyj;VPk&RysBaQK28RduxoVzW(-Rp^Nf(tpYPbOPlxL?(vhS9wZlR^;G+&!$p3e zgYf6y0*kfTbnxi8*o>nNe#>-0bKBe)qBjz$SFa;9J3|P|WK%Z6xTy#%U%%9gkeVmbm)c>WPv6M&>LSq#AM8&gOQEwwBgTBO}btrmtVWHg_}wi$OfpwIsin zTgf>4Gc_^{imTcQEq*0S-A0ML#D*_JTz2gm5OQmHTDO0M8l8{v( zxC!sk_e8Sxrlwe?+72R-h1P-u=U;)Kfah<(raVl14gCGAfGX~KP+3!Z8~G^F6c0=c zi?2=&CA(W}t-(}N9J_WX1n9ck0*}9JJ8-GVOstKL*My&eQ%S{T&YA)^;;=UsHGQoT zA=b<=_Zp6x06QKG@mssUw}0zsf_rIqi?ug*ErpLHHIKk~Y9qXnGMlQ04TcXN;;r@F z+z5}k=)RTIjYp8#VzECX+=s4 z;Q<+|i_ zDn#gnyEMq>&7kY+YLae<=Emg-+{eMo=MzC*0`%txol$-HG6jgs8*h@V2;PNQaM>bG zJAm2d+>{S_%5HWTi$(HsKapY*X*-PiT|rV}X*TY?E2Af4g85J5kW=#biU7h|=jh>O zM}M1&=`PvBMKIgC1$4#eka2ISCEs_4+~YpkQ}U_zpXtb=!jxI zxVF=Riz7(#HGkalvl)%p)clOWhiPI7#>Xc#2_`pXp8~;X!=eD{*aD^nUbh0X(rr!xc5ar6#nl8E0yFmm9 zN|r1tU%#q!qFLocm(JaYwl@{&IUKaWz+LK1068V8?oM{2j-)Ts2$aBk1ueaxCRHIH ztA@?RmW1f1CElfy&4xK&r3U$=%C#JRkI=E*Z5!r>^<{?B_(uorI;VDU6KKb5K|y^j zE@nfHBR{pHIFor%j&e(W2ocQAhr2h~%((*Rh=kay88Zxfw^<^sOzdYCtEY{0(nbe; zsr*`pOGuA$u2`J#v@*)>j{N#cyH%V2xn7SQmF+^|EFP=1xy`^p|CzDAL8t91TU~I< zx6HvrKFC}fN;bY&63<^r-+(Ok%tGO`F}S#@xjZ@g9Y0x5Z~9vwu`f*2)d&$2v7i~x zn!x?}hHKlWvl9OY*L#wIlYk0Yv9|Ilx~GLwZHttiPnrp)tTM3ZDlQR(Z?;=CB(fG4 zKb83UP)ztiejG&j@#Lr1Y2tT4GundTN_acbwo~?%W%9d^Qt!l+P0t|51_Y+XMZ)JT zK6;9%uMuH=*!oCpqP5A&!)?1^f~N#lym5qeh_^b`!gVhhJHY2IG8rW$|FgKaTHPa@ z6bRSg2V%tT!zL%kfoKN;cS=cF>+v_>QJBB2gaj<^65X2nntV_xn6Q6y(OICoTDv(} zDMa}BU9!~hv3`M)R1>s+ezz5mE&fxH%LPXlOXya7Hgk&3D1ks8Zv!!yjoj>OOitS9 zLHGJAM(PQgykz^~E*d6q23|X48Cx{8x2SOFLu@KC^(+2-%%JD|coYdh0L@MfiQ9h> SQv}cd07nix*}k?RB>f+9$xcWB diff --git a/Engine/lib/glew/doc/glew.txt b/Engine/lib/glew/doc/glew.txt deleted file mode 100644 index 31a31d3dbe..0000000000 --- a/Engine/lib/glew/doc/glew.txt +++ /dev/null @@ -1,28 +0,0 @@ -The OpenGL Extension Wrangler Library -Copyright (C) 2002-2008, Milan Ikits -Copyright (C) 2002-2008, Marcelo E. Magallon -Copyright (C) 2002, Lev Povalahev -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* The name of the author may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Engine/lib/glew/doc/glxew.html b/Engine/lib/glew/doc/glxew.html deleted file mode 100644 index 08f01079f7..0000000000 --- a/Engine/lib/glew/doc/glxew.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Supported GLX Extensions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 3DFX_multisample

2 AMD_gpu_association

3 ARB_create_context
4 ARB_create_context_profile
5 ARB_create_context_robustness
6 ARB_fbconfig_float
7 ARB_framebuffer_sRGB
8 ARB_get_proc_address
9 ARB_multisample
10 ARB_robustness_application_isolation
11 ARB_robustness_share_group_isolation
12 ARB_vertex_buffer_object

13 ATI_pixel_format_float
14 ATI_render_texture

15 EXT_buffer_age
16 EXT_create_context_es2_profile
17 EXT_create_context_es_profile
18 EXT_fbconfig_packed_float
19 EXT_framebuffer_sRGB
20 EXT_import_context
21 EXT_scene_marker
22 EXT_swap_control
23 EXT_swap_control_tear
24 EXT_texture_from_pixmap
25 EXT_visual_info
26 EXT_visual_rating

27 INTEL_swap_event

28 MESA_agp_offset
29 MESA_copy_sub_buffer
30 MESA_pixmap_colormap
31 MESA_release_buffers
32 MESA_set_3dfx_mode
33 MESA_swap_control

34 NV_copy_image
35 NV_float_buffer
36 NV_multisample_coverage
37 NV_present_video
38 NV_swap_group
39 NV_vertex_array_range
40 NV_video_capture
41 NV_video_output

42 OML_swap_method
43 OML_sync_control

44 SGIS_blended_overlay
45 SGIS_color_range
46 SGIS_multisample
47 SGIS_shared_multisample

48 SGIX_fbconfig
49 SGIX_hyperpipe
50 SGIX_pbuffer
51 SGIX_swap_barrier
52 SGIX_swap_group
53 SGIX_video_resize
54 SGIX_visual_select_group

55 SGI_cushion
56 SGI_make_current_read
57 SGI_swap_control
58 SGI_video_sync

59 SUN_get_transparent_index
60 SUN_video_resize
- -
- - diff --git a/Engine/lib/glew/doc/gpl.txt b/Engine/lib/glew/doc/gpl.txt deleted file mode 100644 index b7b5f53df1..0000000000 --- a/Engine/lib/glew/doc/gpl.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/Engine/lib/glew/doc/index.html b/Engine/lib/glew/doc/index.html deleted file mode 100644 index 2969b947f1..0000000000 --- a/Engine/lib/glew/doc/index.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

-The OpenGL Extension Wrangler Library (GLEW) is a cross-platform -open-source C/C++ extension loading library. GLEW provides efficient -run-time mechanisms for determining which OpenGL extensions are -supported on the target platform. OpenGL core and extension -functionality is exposed in a single header file. GLEW has been -tested on a variety of operating systems, including Windows, Linux, -Mac OS X, FreeBSD, Irix, and Solaris. -

- -

Downloads

-

-GLEW is distributed -as source and precompiled binaries.
-The latest release is -1.10.0[07-22-13]: -

-

-

-

- - - -
- - - - - - - - - - - - - - - -
Source -ZIP |  -TGZ
Binaries -Windows 32-bit and 64-bit |  -
-
- -

-

-An up-to-date copy is also available using git: -

-
    -
  • github
    -git clone https://github.com/nigels-com/glew.git glew
     
  • -
  • Sourceforge
    -git clone git://git.code.sf.net/p/glew/code glew
     
  • -
- -

-

-Unsupported snapshots are also available: -

- - -

Supported Extensions

-

-The latest release contains support for OpenGL 4.4 and the following extensions: -

- - -

News

-
    -
  • [07-22-13] GLEW 1.10.0 adds support for OpenGL 4.4, new extensions
  • -
  • [08-06-12] GLEW 1.9.0 adds support for OpenGL 4.3, new extensions
  • -
  • [07-17-12] GLEW 1.8.0 fixes minor bugs and adds new extensions
  • -
  • [08-26-11] GLEW 1.7.0 adds support for OpenGL 4.2, new extensions, fixes bugs
  • -
  • [04-27-11] GLEW 1.6.0 fixes minor bugs and adds eight new extensions
  • -
  • [01-31-11] GLEW 1.5.8 fixes minor bugs and adds two new extensions
  • -
  • [11-03-10] GLEW 1.5.7 fixes minor bugs and adds one new extension
  • -
  • [09-07-10] GLEW 1.5.6 adds support for OpenGL 4.1, fixes bugs
  • -
  • [07-13-10] GLEW 1.5.5 fixes minor bugs and adds new extensions
  • -
  • [04-21-10] GLEW 1.5.4 adds support for OpenGL 3.3, OpenGL 4.0 and new extensions, fixes bugs
  • -
  • [02-28-10] GLEW 1.5.3 fixes minor bugs and adds three new extensions
  • -
  • [12-31-09] GLEW 1.5.2 adds support for OpenGL 3.1, OpenGL 3.2 and new extensions
  • -
  • [11-03-08] GLEW 1.5.1 adds support for OpenGL 3.0 and 31 new extensions
  • -
  • [12-27-07] GLEW 1.5.0 is released under less restrictive licenses
  • -
  • [04-27-07] GLEW 1.4.0 is released
  • -
  • [03-08-07] GLEW is included in the NVIDIA OpenGL SDK
  • -
  • [03-04-07] GLEW 1.3.6 is released
  • -
  • [02-28-07] Repository is migrated to SVN
  • -
  • [02-25-07] GLEW is included in the OpenGL SDK
  • -
  • [11-21-06] GLEW 1.3.5 adds OpenGL 2.1 and NVIDIA G80 extensions
  • -
  • [03-04-06] GLEW 1.3.4 adds support for five new extensions
  • -
  • [05-16-05] GLEW 1.3.3 is released
  • -
  • [03-16-05] GLEW 1.3.2 adds support for GL_APPLE_pixel_buffer
  • -
  • [02-11-05] gljava and sdljava provide a Java binding to OpenGL via GLEW
  • -
  • [02-02-05] GLEW 1.3.1 adds support for GL_EXT_framebuffer_object
  • -
  • [01-04-05] GLEW 1.3.0 adds core OpenGL 2.0 support plus many enhancements
  • -
  • [12-22-04] GLEWpy Python wrapper announced
  • -
  • [12-12-04] Mailing lists created on sourceforge
  • -
  • [12-06-04] GLEW 1.2.5 adds new extensions and support for FreeBSD
  • -
- -

Links

- - - -
- - diff --git a/Engine/lib/glew/doc/install.html b/Engine/lib/glew/doc/install.html deleted file mode 100644 index b47d40fbba..0000000000 --- a/Engine/lib/glew/doc/install.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Installation

- -

-To use the shared library version of GLEW, you need to copy the -headers and libraries into their destination directories. On Windows -this typically boils down to copying: -

- - - - - - - - - - -
bin/glew32.dll    to    %SystemRoot%/system32
lib/glew32.lib    to    {VC Root}/Lib
include/GL/glew.h    to    {VC Root}/Include/GL
include/GL/wglew.h    to    {VC Root}/Include/GL
-

-

- -

-where {VC Root} is the Visual C++ root directory, typically -C:/Program Files/Microsoft Visual Studio/VC98 for Visual -Studio 6.0 or C:/Program Files/Microsoft Visual -Studio .NET 2003/Vc7/PlatformSDK for Visual Studio .NET. -

- -

-On Unix, typing make install will attempt to install GLEW -into /usr/include/GL and /usr/lib. You can -customize the installation target via the GLEW_DEST -environment variable if you do not have write access to these -directories. -

- -

Building Your Project with GLEW

-

-There are two ways to build your project with GLEW. -

-

Including the source files / project file

-

-The simpler but less flexible way is to include glew.h and -glew.c into your project. On Windows, you also need to -define the GLEW_STATIC preprocessor token when building a -static library or executable, and the GLEW_BUILD preprocessor -token when building a dll. You also need to replace -<GL/gl.h> and <GL/glu.h> with -<glew.h> in your code and set the appropriate include -flag (-I) to tell the compiler where to look for it. For -example: -

-

-#include <glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

-

-Depending on where you put glew.h you may also need to change -the include directives in glew.c. Note that if you are using -GLEW together with GLUT, you have to include glew.h first. -In addition, glew.h includes glu.h, so you do not -need to include it separately. -

-

-On Windows, you also have the option of adding the supplied project -file glew_static.dsp to your workspace (solution) and compile -it together with your other projects. In this case you also need to -change the GLEW_BUILD preprocessor constant to -GLEW_STATIC when building a static library or executable, -otherwise you get build errors. -

-

-Note that GLEW does not use the C -runtime library, so it does not matter which version (single-threaded, -multi-threaded or multi-threaded DLL) it is linked with (without -debugging information). It is, however, always a good idea to compile all -your projects including GLEW with the same C runtime settings. -

- -

Using GLEW as a shared library

- -

-Alternatively, you can use the provided project files / makefile to -build a separate shared library you can link your projects with later. -In this case the best practice is to install glew.h, -glew32.lib, and glew32.dll / libGLEW.so to -where the OpenGL equivalents gl.h, opengl32.lib, and -opengl32.dll / libGL.so are located. Note that you -need administrative privileges to do this. If you do not have -administrator access and your system administrator will not do it for -you, you can install GLEW into your own lib and include subdirectories -and tell the compiler where to find it. Then you can just replace -<GL/gl.h> with <GL/glew.h> in your -program: -

- -

-#include <GL/glew.h>
-#include <GL/glut.h>
-<gl, glu, and glut functionality is available here>
-

- -

-or: -

- -

-#include <GL/glew.h>
-<gl and glu functionality is available here>
-

- -

-Remember to link your project with glew32.lib, -glu32.lib, and opengl32.lib on Windows and -libGLEW.so, libGLU.so, and libGL.so on -Unix (-lGLEW -lGLU -lGL). -

- -

-It is important to keep in mind that glew.h includes neither -windows.h nor gl.h. Also, GLEW will warn you by -issuing a preprocessor error in case you have included gl.h, -glext.h, or glATI.h before glew.h. -

- - -
- - diff --git a/Engine/lib/glew/doc/khronos.txt b/Engine/lib/glew/doc/khronos.txt deleted file mode 100644 index ffc271c915..0000000000 --- a/Engine/lib/glew/doc/khronos.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2007 The Khronos Group Inc. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and/or associated documentation files (the -"Materials"), to deal in the Materials without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Materials, and to -permit persons to whom the Materials are 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 Materials. - -THE MATERIALS ARE 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 -MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. diff --git a/Engine/lib/glew/doc/log.html b/Engine/lib/glew/doc/log.html deleted file mode 100644 index b2998b9634..0000000000 --- a/Engine/lib/glew/doc/log.html +++ /dev/null @@ -1,1015 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Change Log

- -
-
    -
  • 1.10.0 [07-22-13] -
      -
    • New features: -
        -
      • Support for OpenGL 4.4 -
      -
    • New extensions: -
        -
      • GL_AMD_interleaved_elements -
      • GL_AMD_shader_trinary_minmax -
      • GL_AMD_sparse_texture -
      • GL_ANGLE_depth_texture -
      • GL_ANGLE_framebuffer_blit -
      • GL_ANGLE_framebuffer_multisample -
      • GL_ANGLE_instanced_arrays -
      • GL_ANGLE_pack_reverse_row_order -
      • GL_ANGLE_program_binary -
      • GL_ANGLE_texture_compression_dxt1 -
      • GL_ANGLE_texture_compression_dxt3 -
      • GL_ANGLE_texture_compression_dxt5 -
      • GL_ANGLE_texture_usage -
      • GL_ANGLE_timer_query -
      • GL_ANGLE_translated_shader_source -
      • GL_ARB_bindless_texture -
      • GL_ARB_buffer_storage -
      • GL_ARB_clear_texture -
      • GL_ARB_compute_variable_group_size -
      • GL_ARB_enhanced_layouts -
      • GL_ARB_indirect_parameters -
      • GL_ARB_multi_bind -
      • GL_ARB_query_buffer_object -
      • GL_ARB_seamless_cubemap_per_texture -
      • GL_ARB_shader_draw_parameters -
      • GL_ARB_shader_group_vote -
      • GL_ARB_sparse_texture -
      • GL_ARB_texture_mirror_clamp_to_edge -
      • GL_ARB_texture_stencil8 -
      • GL_ARB_vertex_type_10f_11f_11f_rev -
      • GL_INTEL_map_texture -
      • GL_NVX_conditional_render -
      • GL_NV_bindless_multi_draw_indirect -
      • GL_NV_blend_equation_advanced -
      • GL_NV_compute_program5 -
      • GL_NV_deep_texture3D -
      • GL_NV_draw_texture -
      • GL_NV_shader_atomic_counters -
      • GL_NV_shader_storage_buffer_object -
      • GL_REGAL_ES1_0_compatibility -
      • GL_REGAL_ES1_1_compatibility -
      • GL_REGAL_enable -
      • GLX_EXT_buffer_age -
      • WGL_ARB_robustness_application_isolation -
      • WGL_ARB_robustness_share_group_isolation -
      -
    • Bug fixes -
    -
- -
-
    -
  • 1.9.0 [08-06-12] -
      -
    • New features: - -
    • New extensions: -
        -
      • GL_ARB_ES3_compatibility -
      • GL_ARB_clear_buffer_object -
      • GL_ARB_compute_shader -
      • GL_ARB_copy_image -
      • GL_ARB_explicit_uniform_location -
      • GL_ARB_fragment_layer_viewport -
      • GL_ARB_framebuffer_no_attachments -
      • GL_ARB_internalformat_query2 -
      • GL_ARB_multi_draw_indirect -
      • GL_ARB_program_interface_query -
      • GL_ARB_robust_buffer_access_behavior -
      • GL_ARB_robustness_application_isolation -
      • GL_ARB_robustness_share_group_isolation -
      • GL_ARB_shader_image_size -
      • GL_ARB_shader_storage_buffer_object -
      • GL_ARB_stencil_texturing -
      • GL_ARB_texture_buffer_range -
      • GL_ARB_texture_query_levels -
      • GL_ARB_texture_storage_multisample -
      • GL_ARB_texture_view -
      • GL_ARB_vertex_attrib_binding -
      • GL_EXT_debug_marker -
      • GL_KHR_debug -
      • GL_REGAL_error_string -
      • GL_REGAL_extension_query -
      • GL_REGAL_log -
      • GLX_ARB_robustness_application_isolation -
      • GLX_ARB_robustness_share_group_isolation -
      • GLX_EXT_create_context_es_profile -
      • WGL_EXT_create_context_es_profile -
      -
    • Bug fixes: -
        -
      • Not using GLU library for Makefile builds. -
      -
    -
- -
-
    -
  • 1.8.0 [07-17-12] -
      -
    • New extensions: -
        -
      • GL_AMD_pinned_memory -
      • GL_AMD_query_buffer_object -
      • GL_AMD_stencil_operation_extended -
      • GL_AMD_vertex_shader_layer -
      • GL_AMD_vertex_shader_viewport_index -
      • GL_NV_bindless_texture -
      • GL_NV_shader_atomic_float -
      • GLX_EXT_swap_control_tear -
      • WGL_EXT_swap_control_tear -
      • WGL_NV_DX_interop2 -
      -
    • Bug fixes: -
        -
      • MS Visual Studio 2010 projects added -
      • GLX_NV_video_out replaces GLX_NV_video_output -
      • ANSI C prototype for glewInit -
      • Improved CentOS build support -
      • Improved GL_ARB_gpu_shader_fp64 support -
      • ARB_texture_compression_bptc and ARB_copy_buffer constants -
      • Linux needs to define GLEW_STATIC for static library builds -
      • Custom code generation problem resolved -
      • GLEWAPIENTRY added to glew.h for calling convention customization -
      • Correction for glPathStencilDepthOffsetNV -
      • Resolve OSX gcc warnings -
      • Added build support for NetBSD -
      -
    -
- -
-
    -
  • 1.7.0 [08-26-11] -
      -
    • New features: -
        -
      • Support for OpenGL 4.2 -
      -
    • New extensions: -
        -
      • GL_AMD_multi_draw_indirect -
      • GL_ARB_base_instance -
      • GL_ARB_compressed_texture_pixel_storage -
      • GL_ARB_conservative_depth -
      • GL_ARB_internalformat_query -
      • GL_ARB_map_buffer_alignment -
      • GL_ARB_shader_atomic_counters -
      • GL_ARB_shader_image_load_store -
      • GL_ARB_shading_language_420pack -
      • GL_ARB_shading_language_packing -
      • GL_ARB_texture_storage -
      • GL_ARB_transform_feedback_instanced -
      • GL_EXT_framebuffer_multisample_blit_scaled -
      • GL_NV_path_rendering -
      • GL_NV_path_rendering -
      • GLX_MESA_swap_control -
      -
    • Bug fixes: -
        -
      • const qualifiers for GL 1.4 MultiDrawArrays, MultiDrawElements -
      • Add glGetGraphicsResetStatusARB to GL_ARB_robustness -
      • Remove EXT suffix from GL_KTX_buffer_region entry points -
      • Solaris needs inttypes.h -
      • Add ERROR_INVALID_VERSION_ARB and ERROR_INVALID_PROFILE_ARB to WGL_ARB_create_context -
      • Add GLX_MESA_swap_control -
      • Set -install_name for OSX -
      • Add 64-bit darwin build option (SYSTEM=darwin_x86-64) -
      • Add GL_NV_path_rendering -
      -
    -
- -
-
    -
  • 1.6.0 [04-27-11] -
      -
    • New extensions: -
        -
      • GL_AMD_blend_minmax_factor -
      • GL_AMD_sample_positions -
      • GL_EXT_x11_sync_object -
      • GL_NV_texture_multisample -
      • GL_NV_video_capture -
      • GLX_NV_video_capture -
      • WGL_NV_DX_interop -
      • WGL_NV_video_capture -
      -
    • Bug fixes: -
        -
      • Define GLEW_NO_GLU for no glu dependency. -
      • mx suffix for GLEW MX libraries, build both libraries by default. -
      • Cygwin build improvements -
      • Soname of GLEWmx shared libraries -
      • Query GL extension string only once -
      • GLX_OML_sync_control no longer requires C99 -
      • glDraw*InstancedARB moved from GL_ARB_draw_instanced to GL_ARB_instanced_arrays -
      • glFramebufferTextureLayerEXT moved from GL_EXT_geometry_shader4 to GL_EXT_texture_array -
      • Fixes for BSD build -
      -
    -
- -
-
    -
  • 1.5.8 [01-31-11] -
      -
    • New extensions: -
        -
      • GL_AMD_depth_clamp_separate -
      • GL_EXT_texture_sRGB_decode -
      -
    • Bug fixes: -
        -
      • Borland C++ fix for __int64 -
      • GL_DOUBLE_MATNxM enumerants for OpenGL 4.0 -
      • Correction to glGetTransformFeedbackVarying -
      • Correction to glSecondaryColorPointer -
      • Corrections to glGetVertexAttribPointerv and glGetShaderSource -
      • Switched code repository from svn to git -
      -
    -
- -
-
    -
  • 1.5.7 [11-03-10] -
      -
    • New extension: -
        -
      • GL_NVX_gpu_memory_info -
      -
    • Bug fixes: -
        -
      • Improved mingw32 build support -
      • Improved cygwin build support -
      • glGetPointervEXT fix -
      • Add GLEW_VERSION_1_2_1 -
      -
    -
- -
-
    -
  • 1.5.6 [09-07-10] -
      -
    • New features: -
        -
      • Support for OpenGL 4.1 -
      -
    • New extensions: -
        -
      • GL_ARB_ES2_compatibility -
      • GL_ARB_cl_event -
      • GL_ARB_debug_output -
      • GL_ARB_get_program_binary -
      • GL_ARB_robustness -
      • GL_ARB_separate_shader_objects -
      • GL_ARB_shader_precision -
      • GL_ARB_shader_stencil_export -
      • GL_ARB_vertex_attrib_64bit -
      • GL_ARB_viewport_array -
      • GLX_ARB_create_context_robustness -
      • GLX_EXT_create_context_es2_profile -
      • WGL_ARB_create_context_robustness -
      • WGL_EXT_create_context_es2_profile -
      -
    -
- -
-
    -
  • 1.5.5 [07-13-10] -
      -
    • New extensions: -
        -
      • GL_AMD_debug_output -
      • GL_AMD_name_gen_delete -
      • GL_AMD_transform_feedback3_lines_triangles -
      • GL_NV_multisample_coverage -
      • GL_NV_vdpau_interop -
      • GLX_AMD_gpu_association -
      • GLX_NV_multisample_coverage -
      • WGL_NV_multisample_coverage -
      -
    • Bug fixes: -
        -
      • Compilation issue with GLX_SGI_video_sync -
      • OpenGL 4.0 double-precision uniform functions added -
      • Constness of glPointParameterfvARB and glPointParameterfvEXT -
      • Added glVertexAttribDivisor -
      • Compilation issue with Nvidia GLX headers -
      -
    -
- -
-
    -
  • 1.5.4 [04-21-10] -
      -
    • New features: -
        -
      • Support for OpenGL 3.3 -
      • Support for OpenGL 4.0 -
      -
    • New extensions: -
        -
      • GL_AMD_conservative_depth -
      • GL_ARB_blend_func_extended -
      • GL_ARB_draw_indirect -
      • GL_ARB_explicit_attrib_location -
      • GL_ARB_gpu_shader5 -
      • GL_ARB_gpu_shader_fp64 -
      • GL_ARB_occlusion_query2 -
      • GL_ARB_sampler_objects -
      • GL_ARB_shader_bit_encoding -
      • GL_ARB_shader_subroutine -
      • GL_ARB_shading_language_include -
      • GL_ARB_tessellation_shader -
      • GL_ARB_texture_buffer_object_rgb32 -
      • GL_ARB_texture_compression_bptc -
      • GL_ARB_texture_rgb10_a2ui -
      • GL_ARB_texture_swizzle -
      • GL_ARB_timer_query -
      • GL_ARB_transform_feedback2 -
      • GL_ARB_transform_feedback3 -
      • GL_ARB_vertex_type_2_10_10_10_rev -
      • GL_EXT_shader_image_load_store -
      • GL_EXT_vertex_attrib_64bit -
      • GL_NV_gpu_program5 -
      • GL_NV_gpu_program_fp64 -
      • GL_NV_gpu_shader5 -
      • GL_NV_tessellation_program5 -
      • GL_NV_vertex_attrib_integer_64bit -
      • GLX_ARB_vertex_buffer_object -
      -
    • Bug fixes: -
        -
      • Parameter constness fix for glPointParameteriv and glPointParameterfv -
      -
    -
- -
-
    -
  • 1.5.3 [02-28-10] -
      -
    • New extensions: -
        -
      • GLX_INTEL_swap_event -
      • GL_AMD_seamless_cubemap_per_texture -
      • GL_AMD_shader_stencil_export -
      -
    • Bug fixes: -
        -
      • Correct version detection for GL 3.1 and 3.2 -
      • Missing 3.1 enumerants -
      • Add glew.pc -
      -
    -
- -
-
    -
  • 1.5.2 [12-31-09] -
      -
    • New features: -
        -
      • Support for OpenGL 3.1 -
      • Support for OpenGL 3.2 -
      -
    • New extensions: -
        -
      • GL_AMD_draw_buffers_blend -
      • GL_AMD_performance_monitor -
      • GL_AMD_texture_texture4 -
      • GL_AMD_vertex_shader_tessellator -
      • GL_APPLE_aux_depth_stencil -
      • GL_APPLE_object_purgeable -
      • GL_APPLE_rgb_422 -
      • GL_APPLE_row_bytes -
      • GL_APPLE_vertex_program_evaluators -
      • GL_ARB_compatibility -
      • GL_ARB_copy_buffer -
      • GL_ARB_depth_clamp -
      • GL_ARB_draw_buffers_blend -
      • GL_ARB_draw_elements_base_vertex -
      • GL_ARB_fragment_coord_conventions -
      • GL_ARB_provoking_vertex -
      • GL_ARB_sample_shading -
      • GL_ARB_seamless_cube_map -
      • GL_ARB_shader_texture_lod -
      • GL_ARB_sync -
      • GL_ARB_texture_cube_map_array -
      • GL_ARB_texture_gather -
      • GL_ARB_texture_multisample -
      • GL_ARB_texture_query_lod -
      • GL_ARB_uniform_buffer_object -
      • GL_ARB_vertex_array_bgra -
      • GL_ATI_meminfo -
      • GL_EXT_provoking_vertex -
      • GL_EXT_separate_shader_objects -
      • GL_EXT_texture_snorm -
      • GL_NV_copy_image -
      • GL_NV_parameter_buffer_object2 -
      • GL_NV_shader_buffer_load -
      • GL_NV_texture_barrier -
      • GL_NV_transform_feedback2 -
      • GL_NV_vertex_buffer_unified_memory -
      • WGL_AMD_gpu_association -
      • WGL_ARB_create_context_profile -
      • WGL_NV_copy_image -
      • GLX_ARB_create_context_profile -
      • GLX_EXT_swap_control -
      • GLX_NV_copy_image -
      -
    • Bug fixes: -
        -
      • DOS line endings for windows .zip archives only. -
      • glTransformFeedbackVaryings arguments. -
      • Resource leak in glewinfo and visualinfo tools. -
      • WIN32_LEAN_AND_MEAN preprocessor pollution. -
      • Fixed version detection for GLEW_VERSION_2_1 and GLEW_VERSION_3_0. -
      • MesaGLUT glut.h GLAPIENTRY dependency. -
      • glFramebufferTextureLayer correction. -
      • OSX compiler warnings resolved. -
      • Cygwin linking to opengl32 by default, rather than X11 OpenGL. -
      • SnowLeopard (OSX 10.6) gl.h detection. -
      • Use $(STRIP) consistently. -
      -
    -
- -
-
    -
  • 1.5.1 [11-03-08] -
      -
    • New features: -
        -
      • Support for OpenGL 3.0 -
      -
    • New extensions: -
        -
      • GL_ARB_depth_buffer_float -
      • GL_ARB_draw_instance, -
      • GL_ARB_framebuffer_object -
      • GL_ARB_framebuffer_sRGB -
      • GL_ARB_geometry_shader4 -
      • GL_ARB_half_float_pixel -
      • GL_ARB_half_float_vertex -
      • GL_ARB_instanced_arrays -
      • GL_ARB_map_buffer_range -
      • GL_ARB_texture_buffer_object -
      • GL_ARB_texture_compression_rgtc -
      • GL_ARB_vertex_array_object -
      • GL_EXT_direct_state_access -
      • GL_EXT_texture_swizzle -
      • GL_EXT_transform_feedback -
      • GL_EXT_vertex_array_bgra -
      • GL_NV_conditional_render -
      • GL_NV_explicit_multisample -
      • GL_NV_present_video -
      • GL_SGIS_point_line_texgen -
      • GL_SGIX_convolution_accuracy -
      • WGL_ARB_create_context -
      • WGL_ARB_framebuffer_sRGB -
      • WGL_NV_present_video -
      • WGL_NV_swap_group -
      • WGL_NV_video_output -
      • GLX_ARB_create_context -
      • GLX_ARB_framebuffer_sRGB -
      • GLX_NV_present_video -
      • GLX_NV_swap_group -
      • GLX_NV_video_output -
      -
    • Bug fixes: -
        -
      • Licensing issues with documentation -
      • Problems with long long and _MSC_VER on MINGW -
      • Incorrect parameter for glGetUniformLocation -
      • glewGetExtension fails on last entry -
      • Incomplete GL_NV_texture_shader tokens -
      • Scripting problems on Cygwin -
      • Incorrect definition for GLint on OS X -
      -
    -
- -
-
    -
  • 1.5.0 [12-27-07] -
      -
    • New features: -
        -
      • Licensing change (BSD, Mesa 3-D, Khronos) -
      • Switch to using registry on www.opengl.org -
      • Support for major and minor version strings -
      -
    • New extensions: -
        -
      • GL_APPLE_flush_buffer_range -
      • GL_GREMEDY_frame_terminator -
      • GLX_EXT_texture_from_pixmap -
      -
    • Bug fixes: -
        -
      • Incorrent 64-bit type definitions -
      • Do not strip static library on install -
      • Missing tokens in GL_ATI_fragment_shader and WGL_{ARB,EXT}_make_current_read -
      • Missing tokens in GL_VERSION_2_1 -
      • Missing functions in GL_VERSION_1_4 -
      • Incorrect parameter type for glXCopyContext -
      -
    -
-
-
    -
  • 1.4.0 [04-27-07] -
      -
    • New features: -
        -
      • Extension variables are declared const to avoid possible -corruption of their values -
      -
    • New extensions: -
        -
      • GL_NV_depth_range_unclamped -
      -
    • Bug fixes: -
        -
      • Incorrect tokens in GL_NV_transform_feedback and GL_NV_framebuffer_multisample_coverage -
      • Incorrect function names in GL_EXT_gpu_program_parameters -
      • Missing tokens in GL_EXT_framebuffer_multisample -
      • GLEW_MX initialization problem for WGL_{ARB,EXT}_extensions_string -
      -
    -
-
-
    -
  • 1.3.6 [03-04-07] -
      -
    • New extensions: -
        -
      • GL_ATI_shader_texture_lod -
      • GL_EXT_gpu_program_parameters -
      • GL_NV_geometry_shader4 -
      • WGL_NV_gpu_affinity -
      • GLX_SGIX_hyperpipe -
      -
    • Bug fixes: -
        -
      • Missing include guards in glxew.h -
      • Makefile and install problems for Cygwin builds -
      • Install problem for Linux AMD64 builds -
      • Incorrent token in GL_ATI_texture_compression_3dc -
      • Missing tokens from GL_ATIX_point_sprites -
      -
    -
-
-
    -
  • 1.3.5 [11-21-06] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.1 -
      • Debug support for glewIsSupported -
      -
    • New extensions: -
        -
      • GL_EXT_bindable_uniform -
      • GL_EXT_draw_buffers2 -
      • GL_EXT_draw_instanced -
      • GL_EXT_framebuffer_sRGB -
      • GL_EXT_geometry_shader4 -
      • GL_EXT_gpu_shader4 -
      • GL_EXT_packed_float -
      • GL_EXT_texture_array -
      • GL_EXT_texture_buffer_object -
      • GL_EXT_texture_compression_latc -
      • GL_EXT_texture_compression_rgtc -
      • GL_EXT_texture_integer -
      • GL_EXT_texture_shared_exponent -
      • GL_EXT_timer_query -
      • GL_NV_depth_buffer_float -
      • GL_NV_fragment_program4 -
      • GL_NV_framebuffer_multisample_coverage -
      • GL_NV_geometry_program4 -
      • GL_NV_gpu_program4 -
      • GL_NV_parameter_buffer_object -
      • GL_NV_transform_feedback -
      • GL_NV_vertex_program4 -
      • GL_OES_byte_coordinates -
      • GL_OES_compressed_paletted_texture -
      • GL_OES_read_format -
      • GL_OES_single_precision -
      • WGL_EXT_pixel_format_packed_float -
      • WGL_EXT_framebuffer_sRGB -
      • GLX_EXT_fbconfig_packed_float -
      • GLX_EXT_framebuffer_sRGB -
      -
    • Bug fixes: -
        -
      • Wrong GLXContext definition on Solaris -
      • Makefile problem for parallel builds -
      -
    -
-
-
    -
  • 1.3.4 [03-04-06] -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_blit -
      • GL_EXT_framebuffer_multisample -
      • GL_EXT_packed_depth_stencil -
      • GL_MESAX_texture_stack -
      • WGL_3DL_stereo_control -
      -
    -
      -
    • Bug fixes: -
        -
      • glBlendEquation missing from GL_ARB_imaging -
      • Wrong APIENTRY definition for Cygwin -
      • Incorrect OS X OpenGL types -
      • Unix 64-bit installation patch -
      -
    -
-
-
    -
  • 1.3.3 [05-16-05] -
      -
    • New feature: -
        -
      • Code generation option to split source into multiple files -
      -
    -
      -
    • Bug fixes: -
        -
      • OpenGL 2.0 core initialization problems -
      • Wrong value for token GL_SHADER_TYPE -
      • Missing tokens in GL_ATI_fragment_shader -
      • Missing entry points in GL_ARB_transpose_matrix -
      -
    -
-
-
    -
  • 1.3.2 [03-16-05] -
      -
    • New extension: -
        -
      • GL_APPLE_pixel_buffer -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 entry points -
      • Missing tokens in GL_SGIX_shadow -
      • MinGW makefile problem -
      • Check for incorrect OpenGL version string on SiS hardware -
      • Documentation update to meet the HTML 4.01 Transitional specification -
      -
    -
-
-
    -
  • 1.3.1 [02-02-05] -
      -
    • New features: -
        -
      • Consistent Unix and Windows versioning -
      -
    • New extensions: -
        -
      • GL_EXT_framebuffer_object -
      • GL_ARB_pixel_buffer_object -
      -
    • Bug fixes: -
        -
      • Missing OpenGL 2.0 tokens -
      • Incorrect typedefs (GLhandleARB and GLhalf) -
      • Borland compiler problems -
      -
    -
-
-
    -
  • 1.3.0 [01-04-05] -
      -
    • New features: -
        -
      • Support for core OpenGL 2.0 -
      • glewIsSupported provides efficient string-based extension checks -
      • Custom code generation from a list of extensions -
      • Makefile changes -
      -
    • New extensions: -
        -
      • WGL_ATI_render_texture_rectangle -
      -
    • Bug fixes: -
        -
      • Incorrect function signature in OpenGL 1.5 core -
      -
    -
-
-
    -
  • 1.2.5 [12-06-04] -
      -
    • New extensions: -
        -
      • GL_ATI_texture_compression_3dc -
      • GL_EXT_Cg_shader -
      • GL_EXT_draw_range_elements -
      • GL_KTX_buffer_region -
      -
    • Bug fixes: -
        -
      • OpenGL version detection bug -
      • Problems with wxWindows and MinGW compilation -
      • visualinfo compilation problem with GLEW_MX specified -
      • Wrong token name in OpenGL 1.5 core -
      -
    • Support for FreeBSD -
    -
-
-
    -
  • 1.2.4 [09-06-04] -
      -
    • Added ARB_draw_buffers and ARB_texture_rectangle -
    • Fixed bug in ARB_shader_objects -
    • Replaced wglinfo with visualinfo -
    -
-
-
    -
  • 1.2.3 [06-10-04] -
      -
    • Added GL_NV_fragment_program2, GL_NV_fragment_program_option, GL_NV_vertex_program2_option, GL_NV_vertex_program3 -
    • Bug fix in GL_ARB_vertex_blend -
    -
-
-
    -
  • 1.2.2 [05-08-04] -
      -
    • Added GL_EXT_pixel_buffer_object, removed GL_NV_element_array -
    • Fixed GLEW_MX problems -
    • Bug fix in GL_EXT_texture_rectangle and wglinfo -
    -
-
-
    -
  • 1.2.1 [03-18-04] -
      -
    • Bug fix in OpenGL version query (early release of 1.2.0 contained this bug) -
    • Bug fix in GL_ARB_shader_objects and temporary bug fix in GL_ARB_vertex_shader -
    • Added flags on GDI support and multisampling to wglinfo -
    -
-
-
    -
  • 1.2.0 [02-19-04] -
      -
    • Added full OpenGL 1.5 support -
    • Added support for multiple rendering contexts with different capabilities -
    • Added command line flags to glewinfo for selecting displays and visuals -
    • Added GLX_SGIS_multisample, GLX_SUN_video_resize, and GL_SUN_read_video_pixels -
    • Added MinGW/MSYS support -
    • Bug fixes in GL_ARB_shader_objects and the OS X build -
    -
-
-
    -
  • 1.1.4 [12-15-03] -
      -
    • Added GL_APPLE_float_pixels, GL_APPLE_texture_range, -GL_EXT_texture_cube_map, GL_EXT_texture_edge_clamp, -GLX_ATI_pixel_format_float, and GLX_ATI_render_texture -
    • Bug fixes in GL_ATI_map_object_buffer and GL_ATI_fragment_shader -
    -
-
-
    -
  • 1.1.3 [10-28-03] -
      -
    • Added Solaris and Darwin support -
    • Added GL_ARB_fragment_shader, GL_ARB_shader_objects, and GL_ARB_vertex_shader -
    • Fixed bug in GL_WIN_swap_hint -
    • Removed glewinfo's dependency on GLUT -
    -
-
-
    -
  • 1.1.2 [09-15-03] -
      -
    • Removed dependency on WGL_{ARB,EXT}_extensions_string to make GLEW run on Matrox cards -
    • Added glewGetString for querying the GLEW version string -
    -
-
-
    -
  • 1.1.1 [08-11-03] -
      -
    • Added GLX_NV_float_buffer, GL_ARB_shading_language_100, and GL_ARB_texture_non_power_of_two -
    • Fixed bug in GL_ARB_vertex_buffer_object -
    • Minor updates in documentation -
    -
-
-
    -
  • 1.1.0 [07-08-03] -
      -
    • Added automatic code generation -
    • Added almost every extension in the registry -
    • Added separate namespace -
    • Added Irix support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.7 [06-29-03] -
      -
    • Added GL_EXT_depth_bounds_test -
    • Fixed typos -
    -
-
-
    -
  • 1.0.6 [05-05-03] -
      -
    • Added ARB_vertex_buffer_object and NV_half_float -
    • Updated wglinfo -
    • Temporary Linux bug fixes (problems with SDL and MESA) -
    -
-
-
    -
  • 1.0.5 [02-17-03] -
      -
    • Bug fixes -
    • Added wglinfo -
    • Updated documentation -
    -
-
-
    -
  • 1.0.4 [02-02-03] -
      -
    • Added NV_texture_expand_normal -
    • Added mingw support -
    • Updated documentation -
    -
-
-
    -
  • 1.0.3 [01-09-03] -
      -
    • Cleaned up ATI extensions -
    • Changed function prototypes to match glext.h -
    • Added EXT_texture3D -
    • Fixed typos in ATI_vertex_attrib_array_object and ATI_draw_buffers -
    -
-
-
    -
  • 1.0.2 [12-21-02] -
      -
    • Added list of supported extensions to documentation -
    • Added NV_half_float and NV_texgen_emboss -
    -
-
-
    -
  • 1.0.1 [12-17-02] -
      -
    • Bug fixes -
    • Added glewGetExtension -
    -
-
-
    -
  • 1.0.0 [12-12-02] -
      -
    • Initial release -
    -
-
- - -
- - diff --git a/Engine/lib/glew/doc/mesa.txt b/Engine/lib/glew/doc/mesa.txt deleted file mode 100644 index a82dd4bd44..0000000000 --- a/Engine/lib/glew/doc/mesa.txt +++ /dev/null @@ -1,21 +0,0 @@ -Mesa 3-D graphics library -Version: 7.0 - -Copyright (C) 1999-2007 Brian Paul 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 -BRIAN PAUL 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. diff --git a/Engine/lib/glew/doc/new.png b/Engine/lib/glew/doc/new.png deleted file mode 100644 index 7ce2b47960a7085d7e599044ae16187cdd79153a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180 zcmeAS@N?(olHy`uVBq!ia0vp^l0eME!3-o9=sc?gQk(@Ik;M!Q+`=Ht$S`Y;1W=GA z-O<;Pfnj4`&F{d;K)yn~JGFCa<74&D@oYeyX$c9*zYc!<&#ugD zEX;h`K5fE3d!7AtAbrBj%8&UMxaGCg^YE;B^S_bhGyeiTHjt*I2Wij#@s`{#4`Wk1 zcAm$Fr+$BdfkAy*0t1JF+Jam2V}O}iVy5K2zYp1VP2u#YVZOw`c!VS5Vy&Rj?)<-SyMXD!>frJ-_3sASzYj7t}CiK1p=3en~oMXMs0 zp<*ct%eofjl3TJ-(qdI^m2LK5SM7iMo##By?|HxX{oe2Ue&+~!1;YTbG`BDZ5C#BG z^Z|kiKrsvUV21$+U;zMzC^Q9>j6DP0y?|#8ia;VF-fI{{IaegvG-cAr$-% zyi7#UDPi1KI0RrU1%pFmWT|v@8d?~_U@-(7?w?{11_l&a4J!7qoUyIjV@;Yo9g$Iw zwoA&XHPNDe?Ybnep+RT?ECyP2fR@y#5;=^jl5$F?YX$v)1fw(xOhH%vF~{!Kxt)s! z?%_keW6F^I80R_JiZSj!yu+@s%A>_gC*>(!?^49Er%`#T7;Q9&4Uw z-EIlfky)}8LTeJxnIIg-y2UN(Ramxv8>^DkK%xQ=`xS0V{X=6p_H^~XW^`TSKPWN)tgl3YJ<~ubbI;-Vdj4CXCJwVady>xra zWO-bIaf9DJezwZYvKeN{Y>%_OxVSEq)8$u&oGBaVJCs-P>Ev=6UP{|LCtKbuuCsYb zwrcIZCe7;iKX5a-ePBh8!80*>E8H(f2trZ5ZBbvR1FLx?Cep3^o7pM8W1yVqJ;&VP zxuC_&2d{_Lf9$Aww>3yM182byPn0$qh<80wNYD-;>8IAc9ez4u`zii@+Gve>{khq$ z>G5AK9Q|WqyYh4~xi2D*^_k(Ly&s9lqx9v<^(L{2#--+t@6xRN%su9{9W+|Ks91BC z39Sda0z3w;C)+Y^&QP_oJ9s_D{_I%W_<-~mi7|fKMaSdGY~RNL0TNdU75ZmY%lw#( zllY9a?gx1#8^gF2ao%d>e(KHl3ZC>`R^_^cDE>6vm^%2E%kr=g3^8R>YMt0FKHaB1 zW>hs}f-J|pg_)d6Id<;xb&HZ8bqCVG0~J-*Zs(j<#}uTJWY3u*XPYPbpx#jvR$LA4Pc<>()X8nt`|KPF>{P;;dAT~9_is`OE)U>Od*|$Lt~cMlxqRfd zOjS~u*^y%P{tKGi zxAIr+b%`2l7=CRb>V&wl&l$rfPWVM(Q%zny9}ZOaeLHr>CTsVC<=7hmK>1((2_$yc zC?{l=;wf!lLZw(C7DIg`$M^!SzkT$|cdU_yaEySHfAJ9MAl{-{U?PU|tUl?g>!nO-738Ql%gH zTo<-ge()QhXCy`ef zqflsIxci3Yjr@#CFDbs(hM{>8iHSsr9!1Kqd>DF^R2HtmQ+;tPa^*XN(d8o?14x#X&d7--kaK%y3_cy2dRU7~S diff --git a/Engine/lib/glew/doc/wglew.html b/Engine/lib/glew/doc/wglew.html deleted file mode 100644 index 3f9cee4c68..0000000000 --- a/Engine/lib/glew/doc/wglew.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - -GLEW: The OpenGL Extension Wrangler Library - - - - - - - - -
- - - - - - - - -
- - - - - - - -
Latest Release: 1.10.0

GLEW Logo

- - - - - - - - - - - -
Download
Usage
Building
Installation
Source Generation
Credits & Copyright
Change Log
Project Page
Mailing Lists
Bug Tracker
-

-
- - - - - -
Last Update: 07-22-13
- OpenGL Logo - SourceForge Logo -
-
-
- -

The OpenGL Extension Wrangler Library

- - - - -

Supported WGL Extensions

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1 3DFX_multisample

2 3DL_stereo_control

3 AMD_gpu_association

4 ARB_buffer_region
5 ARB_create_context
6 ARB_create_context_profile
7 ARB_create_context_robustness
8 ARB_extensions_string
9 ARB_framebuffer_sRGB
10 ARB_make_current_read
11 ARB_multisample
12 ARB_pbuffer
13 ARB_pixel_format
14 ARB_pixel_format_float
15 ARB_render_texture
16 ARB_robustness_application_isolation
17 ARB_robustness_share_group_isolation

18 ATI_pixel_format_float
19 ATI_render_texture_rectangle

20 EXT_create_context_es2_profile
21 EXT_create_context_es_profile
22 EXT_depth_float
23 EXT_display_color_table
24 EXT_extensions_string
25 EXT_framebuffer_sRGB
26 EXT_make_current_read
27 EXT_multisample
28 EXT_pbuffer
29 EXT_pixel_format
30 EXT_pixel_format_packed_float
31 EXT_swap_control
32 EXT_swap_control_tear

33 I3D_digital_video_control
34 I3D_gamma
35 I3D_genlock
36 I3D_image_buffer
37 I3D_swap_frame_lock
38 I3D_swap_frame_usage

39 NV_DX_interop
40 NV_DX_interop2
41 NV_copy_image
42 NV_float_buffer
43 NV_gpu_affinity
44 NV_multisample_coverage
45 NV_present_video
46 NV_render_depth_texture
47 NV_render_texture_rectangle
48 NV_swap_group
49 NV_vertex_array_range
50 NV_video_capture
51 NV_video_output

52 OML_sync_control
- -
- - diff --git a/Engine/lib/glew/glew.pc.in b/Engine/lib/glew/glew.pc.in deleted file mode 100644 index 4c934af1a5..0000000000 --- a/Engine/lib/glew/glew.pc.in +++ /dev/null @@ -1,11 +0,0 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -Name: glew -Description: The OpenGL Extension Wrangler library -Version: @version@ -Cflags: -I${includedir} @cflags@ -Libs: -L${libdir} -l@libname@ -Requires: glu diff --git a/Engine/lib/glew/include/GL/glew.h b/Engine/lib/glew/include/GL/glew.h deleted file mode 100644 index 51a29ef8b9..0000000000 --- a/Engine/lib/glew/include/GL/glew.h +++ /dev/null @@ -1,18062 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - * Mesa 3-D graphics library - * Version: 7.0 - * - * Copyright (C) 1999-2007 Brian Paul 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 - * BRIAN PAUL 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. - */ - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#ifndef __glew_h__ -#define __glew_h__ -#define __GLEW_H__ - -#if defined(__gl_h_) || defined(__GL_H__) || defined(__X_GL_H) -#error gl.h included before glew.h -#endif -#if defined(__gl2_h_) -#error gl2.h included before glew.h -#endif -#if defined(__gltypes_h_) -#error gltypes.h included before glew.h -#endif -#if defined(__REGAL_H__) -#error Regal.h included before glew.h -#endif -#if defined(__glext_h_) || defined(__GLEXT_H_) -#error glext.h included before glew.h -#endif -#if defined(__gl_ATI_h_) -#error glATI.h included before glew.h -#endif - -#define __gl_h_ -#define __gl2_h_ -#define __GL_H__ -#define __gltypes_h_ -#define __REGAL_H__ -#define __X_GL_H -#define __glext_h_ -#define __GLEXT_H_ -#define __gl_ATI_h_ - -#if defined(_WIN32) - -/* - * GLEW does not include to avoid name space pollution. - * GL needs GLAPI and GLAPIENTRY, GLU needs APIENTRY, CALLBACK, and wchar_t - * defined properly. - */ -/* */ -#ifndef APIENTRY -#define GLEW_APIENTRY_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define APIENTRY __stdcall -# elif (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED) || defined(__BORLANDC__) -# define APIENTRY __stdcall -# else -# define APIENTRY -# endif -#endif -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# endif -#endif -/* */ -#ifndef CALLBACK -#define GLEW_CALLBACK_DEFINED -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define CALLBACK __attribute__ ((__stdcall__)) -# elif (defined(_M_MRX000) || defined(_M_IX86) || defined(_M_ALPHA) || defined(_M_PPC)) && !defined(MIDL_PASS) -# define CALLBACK __stdcall -# else -# define CALLBACK -# endif -#endif -/* and */ -#ifndef WINGDIAPI -#define GLEW_WINGDIAPI_DEFINED -#define WINGDIAPI __declspec(dllimport) -#endif -/* */ -#if (defined(_MSC_VER) || defined(__BORLANDC__)) && !defined(_WCHAR_T_DEFINED) -typedef unsigned short wchar_t; -# define _WCHAR_T_DEFINED -#endif -/* */ -#if !defined(_W64) -# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && defined(_MSC_VER) && _MSC_VER >= 1300 -# define _W64 __w64 -# else -# define _W64 -# endif -#endif -#if !defined(_PTRDIFF_T_DEFINED) && !defined(_PTRDIFF_T_) && !defined(__MINGW64__) -# ifdef _WIN64 -typedef __int64 ptrdiff_t; -# else -typedef _W64 int ptrdiff_t; -# endif -# define _PTRDIFF_T_DEFINED -# define _PTRDIFF_T_ -#endif - -#ifndef GLAPI -# if defined(__MINGW32__) || defined(__CYGWIN__) -# define GLAPI extern -# else -# define GLAPI WINGDIAPI -# endif -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY APIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY APIENTRY -#endif - -/* - * GLEW_STATIC is defined for static library. - * GLEW_BUILD is defined for building the DLL library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#else /* _UNIX */ - -/* - * Needed for ptrdiff_t in turn needed by VBO. This is defined by ISO - * C. On my system, this amounts to _3 lines_ of included code, all of - * them pretty much harmless. If you know of a way of detecting 32 vs - * 64 _targets_ at compile time you are free to replace this with - * something that's portable. For now, _this_ is the portable solution. - * (mem, 2004-01-04) - */ - -#include - -/* SGI MIPSPro doesn't like stdint.h in C++ mode */ -/* ID: 3376260 Solaris 9 has inttypes.h, but not stdint.h */ - -#if (defined(__sgi) || defined(__sun)) && !defined(__GNUC__) -#include -#else -#include -#endif - -#define GLEW_APIENTRY_DEFINED -#define APIENTRY - -/* - * GLEW_STATIC is defined for static library. - */ - -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# if defined(__GNUC__) && __GNUC__>=4 -# define GLEWAPI extern __attribute__ ((visibility("default"))) -# elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) -# define GLEWAPI extern __global -# else -# define GLEWAPI extern -# endif -#endif - -/* */ -#ifndef GLAPI -#define GLAPI extern -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifndef GLEWAPIENTRY -#define GLEWAPIENTRY -#endif - -#endif /* _WIN32 */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* ----------------------------- GL_VERSION_1_1 ---------------------------- */ - -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 - -typedef unsigned int GLenum; -typedef unsigned int GLbitfield; -typedef unsigned int GLuint; -typedef int GLint; -typedef int GLsizei; -typedef unsigned char GLboolean; -typedef signed char GLbyte; -typedef short GLshort; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; -typedef unsigned long GLulong; -typedef float GLfloat; -typedef float GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void GLvoid; -#if defined(_MSC_VER) && _MSC_VER < 1400 -typedef __int64 GLint64EXT; -typedef unsigned __int64 GLuint64EXT; -#elif defined(_MSC_VER) || defined(__BORLANDC__) -typedef signed long long GLint64EXT; -typedef unsigned long long GLuint64EXT; -#else -# if defined(__MINGW32__) || defined(__CYGWIN__) -#include -# endif -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -#endif -typedef GLint64EXT GLint64; -typedef GLuint64EXT GLuint64; -typedef struct __GLsync *GLsync; - -typedef char GLchar; - -#define GL_ZERO 0 -#define GL_FALSE 0 -#define GL_LOGIC_OP 0x0BF1 -#define GL_NONE 0 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_NO_ERROR 0 -#define GL_POINTS 0x0000 -#define GL_CURRENT_BIT 0x00000001 -#define GL_TRUE 1 -#define GL_ONE 1 -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_POINT_BIT 0x00000002 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_LINE_STRIP 0x0003 -#define GL_LINE_BIT 0x00000004 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON 0x0009 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_ACCUM 0x0100 -#define GL_LOAD 0x0101 -#define GL_RETURN 0x0102 -#define GL_MULT 0x0103 -#define GL_ADD 0x0104 -#define GL_NEVER 0x0200 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_EXP 0x0800 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_EXP2 0x0801 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_POINT_SMOOTH 0x0B10 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LIST_MODE 0x0B30 -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_SHADE_MODEL 0x0B54 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_FOG 0x0B60 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_COLOR 0x0B66 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_MATRIX_MODE 0x0BA0 -#define GL_NORMALIZE 0x0BA1 -#define GL_VIEWPORT 0x0BA2 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_INDEX_MODE 0x0C30 -#define GL_RGBA_MODE 0x0C31 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_RENDER_MODE 0x0C40 -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_FOG_HINT 0x0C54 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_INDEX_BITS 0x0D51 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_DOUBLE 0x140A -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_EMISSION 0x1600 -#define GL_SHININESS 0x1601 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_TEXTURE 0x1702 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_COLOR_INDEX 0x1900 -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_BITMAP 0x1A00 -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_RENDER 0x1C00 -#define GL_FEEDBACK 0x1C01 -#define GL_SELECT 0x1C02 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_S 0x2000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 -#define GL_MODULATE 0x2100 -#define GL_DECAL 0x2101 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_ENV 0x2300 -#define GL_EYE_LINEAR 0x2400 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_SPHERE_MAP 0x2402 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_PLANE 0x2502 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_CLAMP 0x2900 -#define GL_REPEAT 0x2901 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_R3_G3_B2 0x2A10 -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 -#define GL_LIGHT0 0x4000 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_HINT_BIT 0x00008000 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0x000fffff -#define GL_CLIENT_ALL_ATTRIB_BITS 0xffffffff - -GLAPI void GLAPIENTRY glAccum (GLenum op, GLfloat value); -GLAPI void GLAPIENTRY glAlphaFunc (GLenum func, GLclampf ref); -GLAPI GLboolean GLAPIENTRY glAreTexturesResident (GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI void GLAPIENTRY glArrayElement (GLint i); -GLAPI void GLAPIENTRY glBegin (GLenum mode); -GLAPI void GLAPIENTRY glBindTexture (GLenum target, GLuint texture); -GLAPI void GLAPIENTRY glBitmap (GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); -GLAPI void GLAPIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); -GLAPI void GLAPIENTRY glCallList (GLuint list); -GLAPI void GLAPIENTRY glCallLists (GLsizei n, GLenum type, const GLvoid *lists); -GLAPI void GLAPIENTRY glClear (GLbitfield mask); -GLAPI void GLAPIENTRY glClearAccum (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -GLAPI void GLAPIENTRY glClearDepth (GLclampd depth); -GLAPI void GLAPIENTRY glClearIndex (GLfloat c); -GLAPI void GLAPIENTRY glClearStencil (GLint s); -GLAPI void GLAPIENTRY glClipPlane (GLenum plane, const GLdouble *equation); -GLAPI void GLAPIENTRY glColor3b (GLbyte red, GLbyte green, GLbyte blue); -GLAPI void GLAPIENTRY glColor3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor3d (GLdouble red, GLdouble green, GLdouble blue); -GLAPI void GLAPIENTRY glColor3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor3f (GLfloat red, GLfloat green, GLfloat blue); -GLAPI void GLAPIENTRY glColor3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor3i (GLint red, GLint green, GLint blue); -GLAPI void GLAPIENTRY glColor3iv (const GLint *v); -GLAPI void GLAPIENTRY glColor3s (GLshort red, GLshort green, GLshort blue); -GLAPI void GLAPIENTRY glColor3sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor3ub (GLubyte red, GLubyte green, GLubyte blue); -GLAPI void GLAPIENTRY glColor3ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor3ui (GLuint red, GLuint green, GLuint blue); -GLAPI void GLAPIENTRY glColor3uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor3us (GLushort red, GLushort green, GLushort blue); -GLAPI void GLAPIENTRY glColor3usv (const GLushort *v); -GLAPI void GLAPIENTRY glColor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -GLAPI void GLAPIENTRY glColor4bv (const GLbyte *v); -GLAPI void GLAPIENTRY glColor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -GLAPI void GLAPIENTRY glColor4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI void GLAPIENTRY glColor4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glColor4i (GLint red, GLint green, GLint blue, GLint alpha); -GLAPI void GLAPIENTRY glColor4iv (const GLint *v); -GLAPI void GLAPIENTRY glColor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha); -GLAPI void GLAPIENTRY glColor4sv (const GLshort *v); -GLAPI void GLAPIENTRY glColor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -GLAPI void GLAPIENTRY glColor4ubv (const GLubyte *v); -GLAPI void GLAPIENTRY glColor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha); -GLAPI void GLAPIENTRY glColor4uiv (const GLuint *v); -GLAPI void GLAPIENTRY glColor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha); -GLAPI void GLAPIENTRY glColor4usv (const GLushort *v); -GLAPI void GLAPIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI void GLAPIENTRY glColorMaterial (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glColorPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glCopyPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); -GLAPI void GLAPIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI void GLAPIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI void GLAPIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI void GLAPIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glCullFace (GLenum mode); -GLAPI void GLAPIENTRY glDeleteLists (GLuint list, GLsizei range); -GLAPI void GLAPIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); -GLAPI void GLAPIENTRY glDepthFunc (GLenum func); -GLAPI void GLAPIENTRY glDepthMask (GLboolean flag); -GLAPI void GLAPIENTRY glDepthRange (GLclampd zNear, GLclampd zFar); -GLAPI void GLAPIENTRY glDisable (GLenum cap); -GLAPI void GLAPIENTRY glDisableClientState (GLenum array); -GLAPI void GLAPIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); -GLAPI void GLAPIENTRY glDrawBuffer (GLenum mode); -GLAPI void GLAPIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices); -GLAPI void GLAPIENTRY glDrawPixels (GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glEdgeFlag (GLboolean flag); -GLAPI void GLAPIENTRY glEdgeFlagPointer (GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glEdgeFlagv (const GLboolean *flag); -GLAPI void GLAPIENTRY glEnable (GLenum cap); -GLAPI void GLAPIENTRY glEnableClientState (GLenum array); -GLAPI void GLAPIENTRY glEnd (void); -GLAPI void GLAPIENTRY glEndList (void); -GLAPI void GLAPIENTRY glEvalCoord1d (GLdouble u); -GLAPI void GLAPIENTRY glEvalCoord1dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord1f (GLfloat u); -GLAPI void GLAPIENTRY glEvalCoord1fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalCoord2d (GLdouble u, GLdouble v); -GLAPI void GLAPIENTRY glEvalCoord2dv (const GLdouble *u); -GLAPI void GLAPIENTRY glEvalCoord2f (GLfloat u, GLfloat v); -GLAPI void GLAPIENTRY glEvalCoord2fv (const GLfloat *u); -GLAPI void GLAPIENTRY glEvalMesh1 (GLenum mode, GLint i1, GLint i2); -GLAPI void GLAPIENTRY glEvalMesh2 (GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -GLAPI void GLAPIENTRY glEvalPoint1 (GLint i); -GLAPI void GLAPIENTRY glEvalPoint2 (GLint i, GLint j); -GLAPI void GLAPIENTRY glFeedbackBuffer (GLsizei size, GLenum type, GLfloat *buffer); -GLAPI void GLAPIENTRY glFinish (void); -GLAPI void GLAPIENTRY glFlush (void); -GLAPI void GLAPIENTRY glFogf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glFogfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glFogi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glFogiv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glFrontFace (GLenum mode); -GLAPI void GLAPIENTRY glFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI GLuint GLAPIENTRY glGenLists (GLsizei range); -GLAPI void GLAPIENTRY glGenTextures (GLsizei n, GLuint *textures); -GLAPI void GLAPIENTRY glGetBooleanv (GLenum pname, GLboolean *params); -GLAPI void GLAPIENTRY glGetClipPlane (GLenum plane, GLdouble *equation); -GLAPI void GLAPIENTRY glGetDoublev (GLenum pname, GLdouble *params); -GLAPI GLenum GLAPIENTRY glGetError (void); -GLAPI void GLAPIENTRY glGetFloatv (GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetIntegerv (GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetLightfv (GLenum light, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetLightiv (GLenum light, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetMapdv (GLenum target, GLenum query, GLdouble *v); -GLAPI void GLAPIENTRY glGetMapfv (GLenum target, GLenum query, GLfloat *v); -GLAPI void GLAPIENTRY glGetMapiv (GLenum target, GLenum query, GLint *v); -GLAPI void GLAPIENTRY glGetMaterialfv (GLenum face, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetMaterialiv (GLenum face, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetPixelMapfv (GLenum map, GLfloat *values); -GLAPI void GLAPIENTRY glGetPixelMapuiv (GLenum map, GLuint *values); -GLAPI void GLAPIENTRY glGetPixelMapusv (GLenum map, GLushort *values); -GLAPI void GLAPIENTRY glGetPointerv (GLenum pname, GLvoid* *params); -GLAPI void GLAPIENTRY glGetPolygonStipple (GLubyte *mask); -GLAPI const GLubyte * GLAPIENTRY glGetString (GLenum name); -GLAPI void GLAPIENTRY glGetTexEnvfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexEnviv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexGendv (GLenum coord, GLenum pname, GLdouble *params); -GLAPI void GLAPIENTRY glGetTexGenfv (GLenum coord, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexGeniv (GLenum coord, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); -GLAPI void GLAPIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); -GLAPI void GLAPIENTRY glHint (GLenum target, GLenum mode); -GLAPI void GLAPIENTRY glIndexMask (GLuint mask); -GLAPI void GLAPIENTRY glIndexPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glIndexd (GLdouble c); -GLAPI void GLAPIENTRY glIndexdv (const GLdouble *c); -GLAPI void GLAPIENTRY glIndexf (GLfloat c); -GLAPI void GLAPIENTRY glIndexfv (const GLfloat *c); -GLAPI void GLAPIENTRY glIndexi (GLint c); -GLAPI void GLAPIENTRY glIndexiv (const GLint *c); -GLAPI void GLAPIENTRY glIndexs (GLshort c); -GLAPI void GLAPIENTRY glIndexsv (const GLshort *c); -GLAPI void GLAPIENTRY glIndexub (GLubyte c); -GLAPI void GLAPIENTRY glIndexubv (const GLubyte *c); -GLAPI void GLAPIENTRY glInitNames (void); -GLAPI void GLAPIENTRY glInterleavedArrays (GLenum format, GLsizei stride, const GLvoid *pointer); -GLAPI GLboolean GLAPIENTRY glIsEnabled (GLenum cap); -GLAPI GLboolean GLAPIENTRY glIsList (GLuint list); -GLAPI GLboolean GLAPIENTRY glIsTexture (GLuint texture); -GLAPI void GLAPIENTRY glLightModelf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightModelfv (GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLightModeli (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightModeliv (GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLightf (GLenum light, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glLightfv (GLenum light, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glLighti (GLenum light, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glLightiv (GLenum light, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glLineStipple (GLint factor, GLushort pattern); -GLAPI void GLAPIENTRY glLineWidth (GLfloat width); -GLAPI void GLAPIENTRY glListBase (GLuint base); -GLAPI void GLAPIENTRY glLoadIdentity (void); -GLAPI void GLAPIENTRY glLoadMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glLoadMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glLoadName (GLuint name); -GLAPI void GLAPIENTRY glLogicOp (GLenum opcode); -GLAPI void GLAPIENTRY glMap1d (GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI void GLAPIENTRY glMap1f (GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI void GLAPIENTRY glMap2d (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI void GLAPIENTRY glMap2f (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -GLAPI void GLAPIENTRY glMapGrid1d (GLint un, GLdouble u1, GLdouble u2); -GLAPI void GLAPIENTRY glMapGrid1f (GLint un, GLfloat u1, GLfloat u2); -GLAPI void GLAPIENTRY glMapGrid2d (GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -GLAPI void GLAPIENTRY glMapGrid2f (GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -GLAPI void GLAPIENTRY glMaterialf (GLenum face, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glMaterialfv (GLenum face, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glMateriali (GLenum face, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glMaterialiv (GLenum face, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glMatrixMode (GLenum mode); -GLAPI void GLAPIENTRY glMultMatrixd (const GLdouble *m); -GLAPI void GLAPIENTRY glMultMatrixf (const GLfloat *m); -GLAPI void GLAPIENTRY glNewList (GLuint list, GLenum mode); -GLAPI void GLAPIENTRY glNormal3b (GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI void GLAPIENTRY glNormal3bv (const GLbyte *v); -GLAPI void GLAPIENTRY glNormal3d (GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI void GLAPIENTRY glNormal3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glNormal3f (GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI void GLAPIENTRY glNormal3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glNormal3i (GLint nx, GLint ny, GLint nz); -GLAPI void GLAPIENTRY glNormal3iv (const GLint *v); -GLAPI void GLAPIENTRY glNormal3s (GLshort nx, GLshort ny, GLshort nz); -GLAPI void GLAPIENTRY glNormal3sv (const GLshort *v); -GLAPI void GLAPIENTRY glNormalPointer (GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glOrtho (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI void GLAPIENTRY glPassThrough (GLfloat token); -GLAPI void GLAPIENTRY glPixelMapfv (GLenum map, GLsizei mapsize, const GLfloat *values); -GLAPI void GLAPIENTRY glPixelMapuiv (GLenum map, GLsizei mapsize, const GLuint *values); -GLAPI void GLAPIENTRY glPixelMapusv (GLenum map, GLsizei mapsize, const GLushort *values); -GLAPI void GLAPIENTRY glPixelStoref (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelStorei (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelTransferf (GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glPixelTransferi (GLenum pname, GLint param); -GLAPI void GLAPIENTRY glPixelZoom (GLfloat xfactor, GLfloat yfactor); -GLAPI void GLAPIENTRY glPointSize (GLfloat size); -GLAPI void GLAPIENTRY glPolygonMode (GLenum face, GLenum mode); -GLAPI void GLAPIENTRY glPolygonOffset (GLfloat factor, GLfloat units); -GLAPI void GLAPIENTRY glPolygonStipple (const GLubyte *mask); -GLAPI void GLAPIENTRY glPopAttrib (void); -GLAPI void GLAPIENTRY glPopClientAttrib (void); -GLAPI void GLAPIENTRY glPopMatrix (void); -GLAPI void GLAPIENTRY glPopName (void); -GLAPI void GLAPIENTRY glPrioritizeTextures (GLsizei n, const GLuint *textures, const GLclampf *priorities); -GLAPI void GLAPIENTRY glPushAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushClientAttrib (GLbitfield mask); -GLAPI void GLAPIENTRY glPushMatrix (void); -GLAPI void GLAPIENTRY glPushName (GLuint name); -GLAPI void GLAPIENTRY glRasterPos2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glRasterPos2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glRasterPos2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glRasterPos2iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glRasterPos2sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRasterPos3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glRasterPos3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glRasterPos3iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glRasterPos3sv (const GLshort *v); -GLAPI void GLAPIENTRY glRasterPos4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glRasterPos4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glRasterPos4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glRasterPos4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glRasterPos4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glRasterPos4iv (const GLint *v); -GLAPI void GLAPIENTRY glRasterPos4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glRasterPos4sv (const GLshort *v); -GLAPI void GLAPIENTRY glReadBuffer (GLenum mode); -GLAPI void GLAPIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); -GLAPI void GLAPIENTRY glRectd (GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -GLAPI void GLAPIENTRY glRectdv (const GLdouble *v1, const GLdouble *v2); -GLAPI void GLAPIENTRY glRectf (GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -GLAPI void GLAPIENTRY glRectfv (const GLfloat *v1, const GLfloat *v2); -GLAPI void GLAPIENTRY glRecti (GLint x1, GLint y1, GLint x2, GLint y2); -GLAPI void GLAPIENTRY glRectiv (const GLint *v1, const GLint *v2); -GLAPI void GLAPIENTRY glRects (GLshort x1, GLshort y1, GLshort x2, GLshort y2); -GLAPI void GLAPIENTRY glRectsv (const GLshort *v1, const GLshort *v2); -GLAPI GLint GLAPIENTRY glRenderMode (GLenum mode); -GLAPI void GLAPIENTRY glRotated (GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glRotatef (GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScaled (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glScalef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI void GLAPIENTRY glSelectBuffer (GLsizei size, GLuint *buffer); -GLAPI void GLAPIENTRY glShadeModel (GLenum mode); -GLAPI void GLAPIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); -GLAPI void GLAPIENTRY glStencilMask (GLuint mask); -GLAPI void GLAPIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); -GLAPI void GLAPIENTRY glTexCoord1d (GLdouble s); -GLAPI void GLAPIENTRY glTexCoord1dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord1f (GLfloat s); -GLAPI void GLAPIENTRY glTexCoord1fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord1i (GLint s); -GLAPI void GLAPIENTRY glTexCoord1iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord1s (GLshort s); -GLAPI void GLAPIENTRY glTexCoord1sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord2d (GLdouble s, GLdouble t); -GLAPI void GLAPIENTRY glTexCoord2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord2f (GLfloat s, GLfloat t); -GLAPI void GLAPIENTRY glTexCoord2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord2i (GLint s, GLint t); -GLAPI void GLAPIENTRY glTexCoord2iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord2s (GLshort s, GLshort t); -GLAPI void GLAPIENTRY glTexCoord2sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord3d (GLdouble s, GLdouble t, GLdouble r); -GLAPI void GLAPIENTRY glTexCoord3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord3f (GLfloat s, GLfloat t, GLfloat r); -GLAPI void GLAPIENTRY glTexCoord3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord3i (GLint s, GLint t, GLint r); -GLAPI void GLAPIENTRY glTexCoord3iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord3s (GLshort s, GLshort t, GLshort r); -GLAPI void GLAPIENTRY glTexCoord3sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoord4d (GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI void GLAPIENTRY glTexCoord4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glTexCoord4f (GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI void GLAPIENTRY glTexCoord4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glTexCoord4i (GLint s, GLint t, GLint r, GLint q); -GLAPI void GLAPIENTRY glTexCoord4iv (const GLint *v); -GLAPI void GLAPIENTRY glTexCoord4s (GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI void GLAPIENTRY glTexCoord4sv (const GLshort *v); -GLAPI void GLAPIENTRY glTexCoordPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glTexEnvf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexEnvfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexEnvi (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexEnviv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexGend (GLenum coord, GLenum pname, GLdouble param); -GLAPI void GLAPIENTRY glTexGendv (GLenum coord, GLenum pname, const GLdouble *params); -GLAPI void GLAPIENTRY glTexGenf (GLenum coord, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexGenfv (GLenum coord, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexGeni (GLenum coord, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexGeniv (GLenum coord, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); -GLAPI void GLAPIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); -GLAPI void GLAPIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); -GLAPI void GLAPIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); -GLAPI void GLAPIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -GLAPI void GLAPIENTRY glTranslated (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glTranslatef (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex2d (GLdouble x, GLdouble y); -GLAPI void GLAPIENTRY glVertex2dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex2f (GLfloat x, GLfloat y); -GLAPI void GLAPIENTRY glVertex2fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex2i (GLint x, GLint y); -GLAPI void GLAPIENTRY glVertex2iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex2s (GLshort x, GLshort y); -GLAPI void GLAPIENTRY glVertex2sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex3d (GLdouble x, GLdouble y, GLdouble z); -GLAPI void GLAPIENTRY glVertex3dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex3f (GLfloat x, GLfloat y, GLfloat z); -GLAPI void GLAPIENTRY glVertex3fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex3i (GLint x, GLint y, GLint z); -GLAPI void GLAPIENTRY glVertex3iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex3s (GLshort x, GLshort y, GLshort z); -GLAPI void GLAPIENTRY glVertex3sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertex4d (GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI void GLAPIENTRY glVertex4dv (const GLdouble *v); -GLAPI void GLAPIENTRY glVertex4f (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI void GLAPIENTRY glVertex4fv (const GLfloat *v); -GLAPI void GLAPIENTRY glVertex4i (GLint x, GLint y, GLint z, GLint w); -GLAPI void GLAPIENTRY glVertex4iv (const GLint *v); -GLAPI void GLAPIENTRY glVertex4s (GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI void GLAPIENTRY glVertex4sv (const GLshort *v); -GLAPI void GLAPIENTRY glVertexPointer (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); - -#define GLEW_VERSION_1_1 GLEW_GET_VAR(__GLEW_VERSION_1_1) - -#endif /* GL_VERSION_1_1 */ - -/* ---------------------------------- GLU ---------------------------------- */ - -#ifndef GLEW_NO_GLU -/* this is where we can safely include GLU */ -# if defined(__APPLE__) && defined(__MACH__) -# include -# else -# include -# endif -#endif - -/* ----------------------------- GL_VERSION_1_2 ---------------------------- */ - -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 - -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_RESCALE_NORMAL 0x803A -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E - -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); - -#define glCopyTexSubImage3D GLEW_GET_FUN(__glewCopyTexSubImage3D) -#define glDrawRangeElements GLEW_GET_FUN(__glewDrawRangeElements) -#define glTexImage3D GLEW_GET_FUN(__glewTexImage3D) -#define glTexSubImage3D GLEW_GET_FUN(__glewTexSubImage3D) - -#define GLEW_VERSION_1_2 GLEW_GET_VAR(__GLEW_VERSION_1_2) - -#endif /* GL_VERSION_1_2 */ - -/* ---------------------------- GL_VERSION_1_2_1 --------------------------- */ - -#ifndef GL_VERSION_1_2_1 -#define GL_VERSION_1_2_1 1 - -#define GLEW_VERSION_1_2_1 GLEW_GET_VAR(__GLEW_VERSION_1_2_1) - -#endif /* GL_VERSION_1_2_1 */ - -/* ----------------------------- GL_VERSION_1_3 ---------------------------- */ - -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 - -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_SUBTRACT 0x84E7 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#define GL_MULTISAMPLE_BIT 0x20000000 - -typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLvoid *img); -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat m[16]); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); - -#define glActiveTexture GLEW_GET_FUN(__glewActiveTexture) -#define glClientActiveTexture GLEW_GET_FUN(__glewClientActiveTexture) -#define glCompressedTexImage1D GLEW_GET_FUN(__glewCompressedTexImage1D) -#define glCompressedTexImage2D GLEW_GET_FUN(__glewCompressedTexImage2D) -#define glCompressedTexImage3D GLEW_GET_FUN(__glewCompressedTexImage3D) -#define glCompressedTexSubImage1D GLEW_GET_FUN(__glewCompressedTexSubImage1D) -#define glCompressedTexSubImage2D GLEW_GET_FUN(__glewCompressedTexSubImage2D) -#define glCompressedTexSubImage3D GLEW_GET_FUN(__glewCompressedTexSubImage3D) -#define glGetCompressedTexImage GLEW_GET_FUN(__glewGetCompressedTexImage) -#define glLoadTransposeMatrixd GLEW_GET_FUN(__glewLoadTransposeMatrixd) -#define glLoadTransposeMatrixf GLEW_GET_FUN(__glewLoadTransposeMatrixf) -#define glMultTransposeMatrixd GLEW_GET_FUN(__glewMultTransposeMatrixd) -#define glMultTransposeMatrixf GLEW_GET_FUN(__glewMultTransposeMatrixf) -#define glMultiTexCoord1d GLEW_GET_FUN(__glewMultiTexCoord1d) -#define glMultiTexCoord1dv GLEW_GET_FUN(__glewMultiTexCoord1dv) -#define glMultiTexCoord1f GLEW_GET_FUN(__glewMultiTexCoord1f) -#define glMultiTexCoord1fv GLEW_GET_FUN(__glewMultiTexCoord1fv) -#define glMultiTexCoord1i GLEW_GET_FUN(__glewMultiTexCoord1i) -#define glMultiTexCoord1iv GLEW_GET_FUN(__glewMultiTexCoord1iv) -#define glMultiTexCoord1s GLEW_GET_FUN(__glewMultiTexCoord1s) -#define glMultiTexCoord1sv GLEW_GET_FUN(__glewMultiTexCoord1sv) -#define glMultiTexCoord2d GLEW_GET_FUN(__glewMultiTexCoord2d) -#define glMultiTexCoord2dv GLEW_GET_FUN(__glewMultiTexCoord2dv) -#define glMultiTexCoord2f GLEW_GET_FUN(__glewMultiTexCoord2f) -#define glMultiTexCoord2fv GLEW_GET_FUN(__glewMultiTexCoord2fv) -#define glMultiTexCoord2i GLEW_GET_FUN(__glewMultiTexCoord2i) -#define glMultiTexCoord2iv GLEW_GET_FUN(__glewMultiTexCoord2iv) -#define glMultiTexCoord2s GLEW_GET_FUN(__glewMultiTexCoord2s) -#define glMultiTexCoord2sv GLEW_GET_FUN(__glewMultiTexCoord2sv) -#define glMultiTexCoord3d GLEW_GET_FUN(__glewMultiTexCoord3d) -#define glMultiTexCoord3dv GLEW_GET_FUN(__glewMultiTexCoord3dv) -#define glMultiTexCoord3f GLEW_GET_FUN(__glewMultiTexCoord3f) -#define glMultiTexCoord3fv GLEW_GET_FUN(__glewMultiTexCoord3fv) -#define glMultiTexCoord3i GLEW_GET_FUN(__glewMultiTexCoord3i) -#define glMultiTexCoord3iv GLEW_GET_FUN(__glewMultiTexCoord3iv) -#define glMultiTexCoord3s GLEW_GET_FUN(__glewMultiTexCoord3s) -#define glMultiTexCoord3sv GLEW_GET_FUN(__glewMultiTexCoord3sv) -#define glMultiTexCoord4d GLEW_GET_FUN(__glewMultiTexCoord4d) -#define glMultiTexCoord4dv GLEW_GET_FUN(__glewMultiTexCoord4dv) -#define glMultiTexCoord4f GLEW_GET_FUN(__glewMultiTexCoord4f) -#define glMultiTexCoord4fv GLEW_GET_FUN(__glewMultiTexCoord4fv) -#define glMultiTexCoord4i GLEW_GET_FUN(__glewMultiTexCoord4i) -#define glMultiTexCoord4iv GLEW_GET_FUN(__glewMultiTexCoord4iv) -#define glMultiTexCoord4s GLEW_GET_FUN(__glewMultiTexCoord4s) -#define glMultiTexCoord4sv GLEW_GET_FUN(__glewMultiTexCoord4sv) -#define glSampleCoverage GLEW_GET_FUN(__glewSampleCoverage) - -#define GLEW_VERSION_1_3 GLEW_GET_VAR(__GLEW_VERSION_1_3) - -#endif /* GL_VERSION_1_3 */ - -/* ----------------------------- GL_VERSION_1_4 ---------------------------- */ - -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 - -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_COMPARE_R_TO_TEXTURE 0x884E - -typedef void (GLAPIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDPROC) (GLdouble coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDVPROC) (const GLdouble *coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFPROC) (GLfloat coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFVPROC) (const GLfloat *coord); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid **indices, GLsizei drawcount); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVPROC) (const GLdouble *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVPROC) (const GLfloat *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVPROC) (const GLint *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVPROC) (const GLshort *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVPROC) (const GLdouble *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVPROC) (const GLfloat *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVPROC) (const GLint *p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p); - -#define glBlendColor GLEW_GET_FUN(__glewBlendColor) -#define glBlendEquation GLEW_GET_FUN(__glewBlendEquation) -#define glBlendFuncSeparate GLEW_GET_FUN(__glewBlendFuncSeparate) -#define glFogCoordPointer GLEW_GET_FUN(__glewFogCoordPointer) -#define glFogCoordd GLEW_GET_FUN(__glewFogCoordd) -#define glFogCoorddv GLEW_GET_FUN(__glewFogCoorddv) -#define glFogCoordf GLEW_GET_FUN(__glewFogCoordf) -#define glFogCoordfv GLEW_GET_FUN(__glewFogCoordfv) -#define glMultiDrawArrays GLEW_GET_FUN(__glewMultiDrawArrays) -#define glMultiDrawElements GLEW_GET_FUN(__glewMultiDrawElements) -#define glPointParameterf GLEW_GET_FUN(__glewPointParameterf) -#define glPointParameterfv GLEW_GET_FUN(__glewPointParameterfv) -#define glPointParameteri GLEW_GET_FUN(__glewPointParameteri) -#define glPointParameteriv GLEW_GET_FUN(__glewPointParameteriv) -#define glSecondaryColor3b GLEW_GET_FUN(__glewSecondaryColor3b) -#define glSecondaryColor3bv GLEW_GET_FUN(__glewSecondaryColor3bv) -#define glSecondaryColor3d GLEW_GET_FUN(__glewSecondaryColor3d) -#define glSecondaryColor3dv GLEW_GET_FUN(__glewSecondaryColor3dv) -#define glSecondaryColor3f GLEW_GET_FUN(__glewSecondaryColor3f) -#define glSecondaryColor3fv GLEW_GET_FUN(__glewSecondaryColor3fv) -#define glSecondaryColor3i GLEW_GET_FUN(__glewSecondaryColor3i) -#define glSecondaryColor3iv GLEW_GET_FUN(__glewSecondaryColor3iv) -#define glSecondaryColor3s GLEW_GET_FUN(__glewSecondaryColor3s) -#define glSecondaryColor3sv GLEW_GET_FUN(__glewSecondaryColor3sv) -#define glSecondaryColor3ub GLEW_GET_FUN(__glewSecondaryColor3ub) -#define glSecondaryColor3ubv GLEW_GET_FUN(__glewSecondaryColor3ubv) -#define glSecondaryColor3ui GLEW_GET_FUN(__glewSecondaryColor3ui) -#define glSecondaryColor3uiv GLEW_GET_FUN(__glewSecondaryColor3uiv) -#define glSecondaryColor3us GLEW_GET_FUN(__glewSecondaryColor3us) -#define glSecondaryColor3usv GLEW_GET_FUN(__glewSecondaryColor3usv) -#define glSecondaryColorPointer GLEW_GET_FUN(__glewSecondaryColorPointer) -#define glWindowPos2d GLEW_GET_FUN(__glewWindowPos2d) -#define glWindowPos2dv GLEW_GET_FUN(__glewWindowPos2dv) -#define glWindowPos2f GLEW_GET_FUN(__glewWindowPos2f) -#define glWindowPos2fv GLEW_GET_FUN(__glewWindowPos2fv) -#define glWindowPos2i GLEW_GET_FUN(__glewWindowPos2i) -#define glWindowPos2iv GLEW_GET_FUN(__glewWindowPos2iv) -#define glWindowPos2s GLEW_GET_FUN(__glewWindowPos2s) -#define glWindowPos2sv GLEW_GET_FUN(__glewWindowPos2sv) -#define glWindowPos3d GLEW_GET_FUN(__glewWindowPos3d) -#define glWindowPos3dv GLEW_GET_FUN(__glewWindowPos3dv) -#define glWindowPos3f GLEW_GET_FUN(__glewWindowPos3f) -#define glWindowPos3fv GLEW_GET_FUN(__glewWindowPos3fv) -#define glWindowPos3i GLEW_GET_FUN(__glewWindowPos3i) -#define glWindowPos3iv GLEW_GET_FUN(__glewWindowPos3iv) -#define glWindowPos3s GLEW_GET_FUN(__glewWindowPos3s) -#define glWindowPos3sv GLEW_GET_FUN(__glewWindowPos3sv) - -#define GLEW_VERSION_1_4 GLEW_GET_VAR(__GLEW_VERSION_1_4) - -#endif /* GL_VERSION_1_4 */ - -/* ----------------------------- GL_VERSION_1_5 ---------------------------- */ - -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 - -#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE -#define GL_FOG_COORD GL_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY -#define GL_SRC0_RGB GL_SOURCE0_RGB -#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER -#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE -#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA -#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE -#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE -#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA -#define GL_SRC1_RGB GL_SOURCE1_RGB -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING -#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA -#define GL_SRC2_RGB GL_SOURCE2_RGB -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 - -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDQUERYPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGENBUFFERSPROC) (GLsizei n, GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLGENQUERIESPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid* data); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERPROC) (GLuint buffer); -typedef GLboolean (GLAPIENTRY * PFNGLISQUERYPROC) (GLuint id); -typedef GLvoid* (GLAPIENTRY * PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); -typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERPROC) (GLenum target); - -#define glBeginQuery GLEW_GET_FUN(__glewBeginQuery) -#define glBindBuffer GLEW_GET_FUN(__glewBindBuffer) -#define glBufferData GLEW_GET_FUN(__glewBufferData) -#define glBufferSubData GLEW_GET_FUN(__glewBufferSubData) -#define glDeleteBuffers GLEW_GET_FUN(__glewDeleteBuffers) -#define glDeleteQueries GLEW_GET_FUN(__glewDeleteQueries) -#define glEndQuery GLEW_GET_FUN(__glewEndQuery) -#define glGenBuffers GLEW_GET_FUN(__glewGenBuffers) -#define glGenQueries GLEW_GET_FUN(__glewGenQueries) -#define glGetBufferParameteriv GLEW_GET_FUN(__glewGetBufferParameteriv) -#define glGetBufferPointerv GLEW_GET_FUN(__glewGetBufferPointerv) -#define glGetBufferSubData GLEW_GET_FUN(__glewGetBufferSubData) -#define glGetQueryObjectiv GLEW_GET_FUN(__glewGetQueryObjectiv) -#define glGetQueryObjectuiv GLEW_GET_FUN(__glewGetQueryObjectuiv) -#define glGetQueryiv GLEW_GET_FUN(__glewGetQueryiv) -#define glIsBuffer GLEW_GET_FUN(__glewIsBuffer) -#define glIsQuery GLEW_GET_FUN(__glewIsQuery) -#define glMapBuffer GLEW_GET_FUN(__glewMapBuffer) -#define glUnmapBuffer GLEW_GET_FUN(__glewUnmapBuffer) - -#define GLEW_VERSION_1_5 GLEW_GET_VAR(__GLEW_VERSION_1_5) - -#endif /* GL_VERSION_1_5 */ - -/* ----------------------------- GL_VERSION_2_0 ---------------------------- */ - -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 - -#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_COORDS 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 - -typedef void (GLAPIENTRY * PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum, GLenum); -typedef void (GLAPIENTRY * PFNGLCOMPILESHADERPROC) (GLuint shader); -typedef GLuint (GLAPIENTRY * PFNGLCREATEPROGRAMPROC) (void); -typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROC) (GLenum type); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLDELETESHADERPROC) (GLuint shader); -typedef void (GLAPIENTRY * PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint); -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum* bufs); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint); -typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders); -typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEPROC) (GLuint obj, GLsizei maxLength, GLsizei* length, GLchar* source); -typedef void (GLAPIENTRY * PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint* param); -typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint, GLenum, GLvoid**); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVPROC) (GLuint, GLenum, GLdouble*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVPROC) (GLuint, GLenum, GLfloat*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVPROC) (GLuint, GLenum, GLint*); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPROC) (GLuint program); -typedef GLboolean (GLAPIENTRY * PFNGLISSHADERPROC) (GLuint shader); -typedef void (GLAPIENTRY * PFNGLLINKPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar** strings, const GLint* lengths); -typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -typedef void (GLAPIENTRY * PFNGLSTENCILMASKSEPARATEPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IPROC) (GLint location, GLint v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUSEPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer); - -#define glAttachShader GLEW_GET_FUN(__glewAttachShader) -#define glBindAttribLocation GLEW_GET_FUN(__glewBindAttribLocation) -#define glBlendEquationSeparate GLEW_GET_FUN(__glewBlendEquationSeparate) -#define glCompileShader GLEW_GET_FUN(__glewCompileShader) -#define glCreateProgram GLEW_GET_FUN(__glewCreateProgram) -#define glCreateShader GLEW_GET_FUN(__glewCreateShader) -#define glDeleteProgram GLEW_GET_FUN(__glewDeleteProgram) -#define glDeleteShader GLEW_GET_FUN(__glewDeleteShader) -#define glDetachShader GLEW_GET_FUN(__glewDetachShader) -#define glDisableVertexAttribArray GLEW_GET_FUN(__glewDisableVertexAttribArray) -#define glDrawBuffers GLEW_GET_FUN(__glewDrawBuffers) -#define glEnableVertexAttribArray GLEW_GET_FUN(__glewEnableVertexAttribArray) -#define glGetActiveAttrib GLEW_GET_FUN(__glewGetActiveAttrib) -#define glGetActiveUniform GLEW_GET_FUN(__glewGetActiveUniform) -#define glGetAttachedShaders GLEW_GET_FUN(__glewGetAttachedShaders) -#define glGetAttribLocation GLEW_GET_FUN(__glewGetAttribLocation) -#define glGetProgramInfoLog GLEW_GET_FUN(__glewGetProgramInfoLog) -#define glGetProgramiv GLEW_GET_FUN(__glewGetProgramiv) -#define glGetShaderInfoLog GLEW_GET_FUN(__glewGetShaderInfoLog) -#define glGetShaderSource GLEW_GET_FUN(__glewGetShaderSource) -#define glGetShaderiv GLEW_GET_FUN(__glewGetShaderiv) -#define glGetUniformLocation GLEW_GET_FUN(__glewGetUniformLocation) -#define glGetUniformfv GLEW_GET_FUN(__glewGetUniformfv) -#define glGetUniformiv GLEW_GET_FUN(__glewGetUniformiv) -#define glGetVertexAttribPointerv GLEW_GET_FUN(__glewGetVertexAttribPointerv) -#define glGetVertexAttribdv GLEW_GET_FUN(__glewGetVertexAttribdv) -#define glGetVertexAttribfv GLEW_GET_FUN(__glewGetVertexAttribfv) -#define glGetVertexAttribiv GLEW_GET_FUN(__glewGetVertexAttribiv) -#define glIsProgram GLEW_GET_FUN(__glewIsProgram) -#define glIsShader GLEW_GET_FUN(__glewIsShader) -#define glLinkProgram GLEW_GET_FUN(__glewLinkProgram) -#define glShaderSource GLEW_GET_FUN(__glewShaderSource) -#define glStencilFuncSeparate GLEW_GET_FUN(__glewStencilFuncSeparate) -#define glStencilMaskSeparate GLEW_GET_FUN(__glewStencilMaskSeparate) -#define glStencilOpSeparate GLEW_GET_FUN(__glewStencilOpSeparate) -#define glUniform1f GLEW_GET_FUN(__glewUniform1f) -#define glUniform1fv GLEW_GET_FUN(__glewUniform1fv) -#define glUniform1i GLEW_GET_FUN(__glewUniform1i) -#define glUniform1iv GLEW_GET_FUN(__glewUniform1iv) -#define glUniform2f GLEW_GET_FUN(__glewUniform2f) -#define glUniform2fv GLEW_GET_FUN(__glewUniform2fv) -#define glUniform2i GLEW_GET_FUN(__glewUniform2i) -#define glUniform2iv GLEW_GET_FUN(__glewUniform2iv) -#define glUniform3f GLEW_GET_FUN(__glewUniform3f) -#define glUniform3fv GLEW_GET_FUN(__glewUniform3fv) -#define glUniform3i GLEW_GET_FUN(__glewUniform3i) -#define glUniform3iv GLEW_GET_FUN(__glewUniform3iv) -#define glUniform4f GLEW_GET_FUN(__glewUniform4f) -#define glUniform4fv GLEW_GET_FUN(__glewUniform4fv) -#define glUniform4i GLEW_GET_FUN(__glewUniform4i) -#define glUniform4iv GLEW_GET_FUN(__glewUniform4iv) -#define glUniformMatrix2fv GLEW_GET_FUN(__glewUniformMatrix2fv) -#define glUniformMatrix3fv GLEW_GET_FUN(__glewUniformMatrix3fv) -#define glUniformMatrix4fv GLEW_GET_FUN(__glewUniformMatrix4fv) -#define glUseProgram GLEW_GET_FUN(__glewUseProgram) -#define glValidateProgram GLEW_GET_FUN(__glewValidateProgram) -#define glVertexAttrib1d GLEW_GET_FUN(__glewVertexAttrib1d) -#define glVertexAttrib1dv GLEW_GET_FUN(__glewVertexAttrib1dv) -#define glVertexAttrib1f GLEW_GET_FUN(__glewVertexAttrib1f) -#define glVertexAttrib1fv GLEW_GET_FUN(__glewVertexAttrib1fv) -#define glVertexAttrib1s GLEW_GET_FUN(__glewVertexAttrib1s) -#define glVertexAttrib1sv GLEW_GET_FUN(__glewVertexAttrib1sv) -#define glVertexAttrib2d GLEW_GET_FUN(__glewVertexAttrib2d) -#define glVertexAttrib2dv GLEW_GET_FUN(__glewVertexAttrib2dv) -#define glVertexAttrib2f GLEW_GET_FUN(__glewVertexAttrib2f) -#define glVertexAttrib2fv GLEW_GET_FUN(__glewVertexAttrib2fv) -#define glVertexAttrib2s GLEW_GET_FUN(__glewVertexAttrib2s) -#define glVertexAttrib2sv GLEW_GET_FUN(__glewVertexAttrib2sv) -#define glVertexAttrib3d GLEW_GET_FUN(__glewVertexAttrib3d) -#define glVertexAttrib3dv GLEW_GET_FUN(__glewVertexAttrib3dv) -#define glVertexAttrib3f GLEW_GET_FUN(__glewVertexAttrib3f) -#define glVertexAttrib3fv GLEW_GET_FUN(__glewVertexAttrib3fv) -#define glVertexAttrib3s GLEW_GET_FUN(__glewVertexAttrib3s) -#define glVertexAttrib3sv GLEW_GET_FUN(__glewVertexAttrib3sv) -#define glVertexAttrib4Nbv GLEW_GET_FUN(__glewVertexAttrib4Nbv) -#define glVertexAttrib4Niv GLEW_GET_FUN(__glewVertexAttrib4Niv) -#define glVertexAttrib4Nsv GLEW_GET_FUN(__glewVertexAttrib4Nsv) -#define glVertexAttrib4Nub GLEW_GET_FUN(__glewVertexAttrib4Nub) -#define glVertexAttrib4Nubv GLEW_GET_FUN(__glewVertexAttrib4Nubv) -#define glVertexAttrib4Nuiv GLEW_GET_FUN(__glewVertexAttrib4Nuiv) -#define glVertexAttrib4Nusv GLEW_GET_FUN(__glewVertexAttrib4Nusv) -#define glVertexAttrib4bv GLEW_GET_FUN(__glewVertexAttrib4bv) -#define glVertexAttrib4d GLEW_GET_FUN(__glewVertexAttrib4d) -#define glVertexAttrib4dv GLEW_GET_FUN(__glewVertexAttrib4dv) -#define glVertexAttrib4f GLEW_GET_FUN(__glewVertexAttrib4f) -#define glVertexAttrib4fv GLEW_GET_FUN(__glewVertexAttrib4fv) -#define glVertexAttrib4iv GLEW_GET_FUN(__glewVertexAttrib4iv) -#define glVertexAttrib4s GLEW_GET_FUN(__glewVertexAttrib4s) -#define glVertexAttrib4sv GLEW_GET_FUN(__glewVertexAttrib4sv) -#define glVertexAttrib4ubv GLEW_GET_FUN(__glewVertexAttrib4ubv) -#define glVertexAttrib4uiv GLEW_GET_FUN(__glewVertexAttrib4uiv) -#define glVertexAttrib4usv GLEW_GET_FUN(__glewVertexAttrib4usv) -#define glVertexAttribPointer GLEW_GET_FUN(__glewVertexAttribPointer) - -#define GLEW_VERSION_2_0 GLEW_GET_VAR(__GLEW_VERSION_2_0) - -#endif /* GL_VERSION_2_0 */ - -/* ----------------------------- GL_VERSION_2_1 ---------------------------- */ - -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 - -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B - -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); - -#define glUniformMatrix2x3fv GLEW_GET_FUN(__glewUniformMatrix2x3fv) -#define glUniformMatrix2x4fv GLEW_GET_FUN(__glewUniformMatrix2x4fv) -#define glUniformMatrix3x2fv GLEW_GET_FUN(__glewUniformMatrix3x2fv) -#define glUniformMatrix3x4fv GLEW_GET_FUN(__glewUniformMatrix3x4fv) -#define glUniformMatrix4x2fv GLEW_GET_FUN(__glewUniformMatrix4x2fv) -#define glUniformMatrix4x3fv GLEW_GET_FUN(__glewUniformMatrix4x3fv) - -#define GLEW_VERSION_2_1 GLEW_GET_VAR(__GLEW_VERSION_2_1) - -#endif /* GL_VERSION_2_1 */ - -/* ----------------------------- GL_VERSION_3_0 ---------------------------- */ - -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 - -#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES -#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5 -#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1 -#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3 -#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB -#define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0 -#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4 -#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2 -#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_DEPTH_BUFFER 0x8223 -#define GL_STENCIL_BUFFER 0x8224 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_ALPHA_INTEGER 0x8D97 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 - -typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERPROC) (GLuint, GLenum); -typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum); -typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONPROC) (GLuint, GLuint, const GLchar*); -typedef void (GLAPIENTRY * PFNGLCLAMPCOLORPROC) (GLenum, GLenum); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFIPROC) (GLenum, GLint, GLfloat, GLint); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERFVPROC) (GLenum, GLint, const GLfloat*); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERIVPROC) (GLenum, GLint, const GLint*); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERUIVPROC) (GLenum, GLint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLCOLORMASKIPROC) (GLuint, GLboolean, GLboolean, GLboolean, GLboolean); -typedef void (GLAPIENTRY * PFNGLDISABLEIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLENABLEIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERPROC) (void); -typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETBOOLEANI_VPROC) (GLenum, GLuint, GLboolean*); -typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONPROC) (GLuint, const GLchar*); -typedef const GLubyte* (GLAPIENTRY * PFNGLGETSTRINGIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVPROC) (GLenum, GLenum, GLint*); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVPROC) (GLenum, GLenum, GLuint*); -typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVPROC) (GLuint, GLint, GLuint*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVPROC) (GLuint, GLenum, GLint*); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint, GLenum, GLuint*); -typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDIPROC) (GLenum, GLuint); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVPROC) (GLenum, GLenum, const GLint*); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVPROC) (GLenum, GLenum, const GLuint*); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint, GLsizei, const GLchar **, GLenum); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIPROC) (GLint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIPROC) (GLint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIPROC) (GLint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIPROC) (GLint, GLuint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVPROC) (GLint, GLsizei, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IPROC) (GLuint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIPROC) (GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IPROC) (GLuint, GLint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIPROC) (GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IPROC) (GLuint, GLint, GLint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIPROC) (GLuint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVPROC) (GLuint, const GLbyte*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IPROC) (GLuint, GLint, GLint, GLint, GLint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVPROC) (GLuint, const GLint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVPROC) (GLuint, const GLshort*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVPROC) (GLuint, const GLubyte*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIPROC) (GLuint, GLuint, GLuint, GLuint, GLuint); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVPROC) (GLuint, const GLuint*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVPROC) (GLuint, const GLushort*); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint, GLint, GLenum, GLsizei, const GLvoid*); - -#define glBeginConditionalRender GLEW_GET_FUN(__glewBeginConditionalRender) -#define glBeginTransformFeedback GLEW_GET_FUN(__glewBeginTransformFeedback) -#define glBindFragDataLocation GLEW_GET_FUN(__glewBindFragDataLocation) -#define glClampColor GLEW_GET_FUN(__glewClampColor) -#define glClearBufferfi GLEW_GET_FUN(__glewClearBufferfi) -#define glClearBufferfv GLEW_GET_FUN(__glewClearBufferfv) -#define glClearBufferiv GLEW_GET_FUN(__glewClearBufferiv) -#define glClearBufferuiv GLEW_GET_FUN(__glewClearBufferuiv) -#define glColorMaski GLEW_GET_FUN(__glewColorMaski) -#define glDisablei GLEW_GET_FUN(__glewDisablei) -#define glEnablei GLEW_GET_FUN(__glewEnablei) -#define glEndConditionalRender GLEW_GET_FUN(__glewEndConditionalRender) -#define glEndTransformFeedback GLEW_GET_FUN(__glewEndTransformFeedback) -#define glGetBooleani_v GLEW_GET_FUN(__glewGetBooleani_v) -#define glGetFragDataLocation GLEW_GET_FUN(__glewGetFragDataLocation) -#define glGetStringi GLEW_GET_FUN(__glewGetStringi) -#define glGetTexParameterIiv GLEW_GET_FUN(__glewGetTexParameterIiv) -#define glGetTexParameterIuiv GLEW_GET_FUN(__glewGetTexParameterIuiv) -#define glGetTransformFeedbackVarying GLEW_GET_FUN(__glewGetTransformFeedbackVarying) -#define glGetUniformuiv GLEW_GET_FUN(__glewGetUniformuiv) -#define glGetVertexAttribIiv GLEW_GET_FUN(__glewGetVertexAttribIiv) -#define glGetVertexAttribIuiv GLEW_GET_FUN(__glewGetVertexAttribIuiv) -#define glIsEnabledi GLEW_GET_FUN(__glewIsEnabledi) -#define glTexParameterIiv GLEW_GET_FUN(__glewTexParameterIiv) -#define glTexParameterIuiv GLEW_GET_FUN(__glewTexParameterIuiv) -#define glTransformFeedbackVaryings GLEW_GET_FUN(__glewTransformFeedbackVaryings) -#define glUniform1ui GLEW_GET_FUN(__glewUniform1ui) -#define glUniform1uiv GLEW_GET_FUN(__glewUniform1uiv) -#define glUniform2ui GLEW_GET_FUN(__glewUniform2ui) -#define glUniform2uiv GLEW_GET_FUN(__glewUniform2uiv) -#define glUniform3ui GLEW_GET_FUN(__glewUniform3ui) -#define glUniform3uiv GLEW_GET_FUN(__glewUniform3uiv) -#define glUniform4ui GLEW_GET_FUN(__glewUniform4ui) -#define glUniform4uiv GLEW_GET_FUN(__glewUniform4uiv) -#define glVertexAttribI1i GLEW_GET_FUN(__glewVertexAttribI1i) -#define glVertexAttribI1iv GLEW_GET_FUN(__glewVertexAttribI1iv) -#define glVertexAttribI1ui GLEW_GET_FUN(__glewVertexAttribI1ui) -#define glVertexAttribI1uiv GLEW_GET_FUN(__glewVertexAttribI1uiv) -#define glVertexAttribI2i GLEW_GET_FUN(__glewVertexAttribI2i) -#define glVertexAttribI2iv GLEW_GET_FUN(__glewVertexAttribI2iv) -#define glVertexAttribI2ui GLEW_GET_FUN(__glewVertexAttribI2ui) -#define glVertexAttribI2uiv GLEW_GET_FUN(__glewVertexAttribI2uiv) -#define glVertexAttribI3i GLEW_GET_FUN(__glewVertexAttribI3i) -#define glVertexAttribI3iv GLEW_GET_FUN(__glewVertexAttribI3iv) -#define glVertexAttribI3ui GLEW_GET_FUN(__glewVertexAttribI3ui) -#define glVertexAttribI3uiv GLEW_GET_FUN(__glewVertexAttribI3uiv) -#define glVertexAttribI4bv GLEW_GET_FUN(__glewVertexAttribI4bv) -#define glVertexAttribI4i GLEW_GET_FUN(__glewVertexAttribI4i) -#define glVertexAttribI4iv GLEW_GET_FUN(__glewVertexAttribI4iv) -#define glVertexAttribI4sv GLEW_GET_FUN(__glewVertexAttribI4sv) -#define glVertexAttribI4ubv GLEW_GET_FUN(__glewVertexAttribI4ubv) -#define glVertexAttribI4ui GLEW_GET_FUN(__glewVertexAttribI4ui) -#define glVertexAttribI4uiv GLEW_GET_FUN(__glewVertexAttribI4uiv) -#define glVertexAttribI4usv GLEW_GET_FUN(__glewVertexAttribI4usv) -#define glVertexAttribIPointer GLEW_GET_FUN(__glewVertexAttribIPointer) - -#define GLEW_VERSION_3_0 GLEW_GET_VAR(__GLEW_VERSION_3_0) - -#endif /* GL_VERSION_3_0 */ - -/* ----------------------------- GL_VERSION_3_1 ---------------------------- */ - -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 - -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT 0x8C2E -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum, GLint, GLsizei, GLsizei); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum, GLsizei, GLenum, const GLvoid*, GLsizei); -typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint); -typedef void (GLAPIENTRY * PFNGLTEXBUFFERPROC) (GLenum, GLenum, GLuint); - -#define glDrawArraysInstanced GLEW_GET_FUN(__glewDrawArraysInstanced) -#define glDrawElementsInstanced GLEW_GET_FUN(__glewDrawElementsInstanced) -#define glPrimitiveRestartIndex GLEW_GET_FUN(__glewPrimitiveRestartIndex) -#define glTexBuffer GLEW_GET_FUN(__glewTexBuffer) - -#define GLEW_VERSION_3_1 GLEW_GET_VAR(__GLEW_VERSION_3_1) - -#endif /* GL_VERSION_3_1 */ - -/* ----------------------------- GL_VERSION_3_2 ---------------------------- */ - -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 - -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum, GLenum, GLuint, GLint); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum, GLenum, GLint64 *); -typedef void (GLAPIENTRY * PFNGLGETINTEGER64I_VPROC) (GLenum, GLuint, GLint64 *); - -#define glFramebufferTexture GLEW_GET_FUN(__glewFramebufferTexture) -#define glGetBufferParameteri64v GLEW_GET_FUN(__glewGetBufferParameteri64v) -#define glGetInteger64i_v GLEW_GET_FUN(__glewGetInteger64i_v) - -#define GLEW_VERSION_3_2 GLEW_GET_VAR(__GLEW_VERSION_3_2) - -#endif /* GL_VERSION_3_2 */ - -/* ----------------------------- GL_VERSION_3_3 ---------------------------- */ - -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 - -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_RGB10_A2UI 0x906F - -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); - -#define glVertexAttribDivisor GLEW_GET_FUN(__glewVertexAttribDivisor) - -#define GLEW_VERSION_3_3 GLEW_GET_VAR(__GLEW_VERSION_3_3) - -#endif /* GL_VERSION_3_3 */ - -/* ----------------------------- GL_VERSION_4_0 ---------------------------- */ - -#ifndef GL_VERSION_4_0 -#define GL_VERSION_4_0 1 - -#define GL_SAMPLE_SHADING 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS 0x8F9F -#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (GLAPIENTRY * PFNGLMINSAMPLESHADINGPROC) (GLclampf value); - -#define glBlendEquationSeparatei GLEW_GET_FUN(__glewBlendEquationSeparatei) -#define glBlendEquationi GLEW_GET_FUN(__glewBlendEquationi) -#define glBlendFuncSeparatei GLEW_GET_FUN(__glewBlendFuncSeparatei) -#define glBlendFunci GLEW_GET_FUN(__glewBlendFunci) -#define glMinSampleShading GLEW_GET_FUN(__glewMinSampleShading) - -#define GLEW_VERSION_4_0 GLEW_GET_VAR(__GLEW_VERSION_4_0) - -#endif /* GL_VERSION_4_0 */ - -/* ----------------------------- GL_VERSION_4_1 ---------------------------- */ - -#ifndef GL_VERSION_4_1 -#define GL_VERSION_4_1 1 - -#define GLEW_VERSION_4_1 GLEW_GET_VAR(__GLEW_VERSION_4_1) - -#endif /* GL_VERSION_4_1 */ - -/* ----------------------------- GL_VERSION_4_2 ---------------------------- */ - -#ifndef GL_VERSION_4_2 -#define GL_VERSION_4_2 1 - -#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F - -#define GLEW_VERSION_4_2 GLEW_GET_VAR(__GLEW_VERSION_4_2) - -#endif /* GL_VERSION_4_2 */ - -/* ----------------------------- GL_VERSION_4_3 ---------------------------- */ - -#ifndef GL_VERSION_4_3 -#define GL_VERSION_4_3 1 - -#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 -#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E - -#define GLEW_VERSION_4_3 GLEW_GET_VAR(__GLEW_VERSION_4_3) - -#endif /* GL_VERSION_4_3 */ - -/* ----------------------------- GL_VERSION_4_4 ---------------------------- */ - -#ifndef GL_VERSION_4_4 -#define GL_VERSION_4_4 1 - -#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 - -#define GLEW_VERSION_4_4 GLEW_GET_VAR(__GLEW_VERSION_4_4) - -#endif /* GL_VERSION_4_4 */ - -/* -------------------------- GL_3DFX_multisample -------------------------- */ - -#ifndef GL_3DFX_multisample -#define GL_3DFX_multisample 1 - -#define GL_MULTISAMPLE_3DFX 0x86B2 -#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 -#define GL_SAMPLES_3DFX 0x86B4 -#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 - -#define GLEW_3DFX_multisample GLEW_GET_VAR(__GLEW_3DFX_multisample) - -#endif /* GL_3DFX_multisample */ - -/* ---------------------------- GL_3DFX_tbuffer ---------------------------- */ - -#ifndef GL_3DFX_tbuffer -#define GL_3DFX_tbuffer 1 - -typedef void (GLAPIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); - -#define glTbufferMask3DFX GLEW_GET_FUN(__glewTbufferMask3DFX) - -#define GLEW_3DFX_tbuffer GLEW_GET_VAR(__GLEW_3DFX_tbuffer) - -#endif /* GL_3DFX_tbuffer */ - -/* -------------------- GL_3DFX_texture_compression_FXT1 ------------------- */ - -#ifndef GL_3DFX_texture_compression_FXT1 -#define GL_3DFX_texture_compression_FXT1 1 - -#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 -#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 - -#define GLEW_3DFX_texture_compression_FXT1 GLEW_GET_VAR(__GLEW_3DFX_texture_compression_FXT1) - -#endif /* GL_3DFX_texture_compression_FXT1 */ - -/* ----------------------- GL_AMD_blend_minmax_factor ---------------------- */ - -#ifndef GL_AMD_blend_minmax_factor -#define GL_AMD_blend_minmax_factor 1 - -#define GL_FACTOR_MIN_AMD 0x901C -#define GL_FACTOR_MAX_AMD 0x901D - -#define GLEW_AMD_blend_minmax_factor GLEW_GET_VAR(__GLEW_AMD_blend_minmax_factor) - -#endif /* GL_AMD_blend_minmax_factor */ - -/* ----------------------- GL_AMD_conservative_depth ----------------------- */ - -#ifndef GL_AMD_conservative_depth -#define GL_AMD_conservative_depth 1 - -#define GLEW_AMD_conservative_depth GLEW_GET_VAR(__GLEW_AMD_conservative_depth) - -#endif /* GL_AMD_conservative_depth */ - -/* -------------------------- GL_AMD_debug_output -------------------------- */ - -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 - -#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 - -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id, GLenum category, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); - -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, GLvoid *userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf); -typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message); - -#define glDebugMessageCallbackAMD GLEW_GET_FUN(__glewDebugMessageCallbackAMD) -#define glDebugMessageEnableAMD GLEW_GET_FUN(__glewDebugMessageEnableAMD) -#define glDebugMessageInsertAMD GLEW_GET_FUN(__glewDebugMessageInsertAMD) -#define glGetDebugMessageLogAMD GLEW_GET_FUN(__glewGetDebugMessageLogAMD) - -#define GLEW_AMD_debug_output GLEW_GET_VAR(__GLEW_AMD_debug_output) - -#endif /* GL_AMD_debug_output */ - -/* ---------------------- GL_AMD_depth_clamp_separate ---------------------- */ - -#ifndef GL_AMD_depth_clamp_separate -#define GL_AMD_depth_clamp_separate 1 - -#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E -#define GL_DEPTH_CLAMP_FAR_AMD 0x901F - -#define GLEW_AMD_depth_clamp_separate GLEW_GET_VAR(__GLEW_AMD_depth_clamp_separate) - -#endif /* GL_AMD_depth_clamp_separate */ - -/* ----------------------- GL_AMD_draw_buffers_blend ----------------------- */ - -#ifndef GL_AMD_draw_buffers_blend -#define GL_AMD_draw_buffers_blend 1 - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); - -#define glBlendEquationIndexedAMD GLEW_GET_FUN(__glewBlendEquationIndexedAMD) -#define glBlendEquationSeparateIndexedAMD GLEW_GET_FUN(__glewBlendEquationSeparateIndexedAMD) -#define glBlendFuncIndexedAMD GLEW_GET_FUN(__glewBlendFuncIndexedAMD) -#define glBlendFuncSeparateIndexedAMD GLEW_GET_FUN(__glewBlendFuncSeparateIndexedAMD) - -#define GLEW_AMD_draw_buffers_blend GLEW_GET_VAR(__GLEW_AMD_draw_buffers_blend) - -#endif /* GL_AMD_draw_buffers_blend */ - -/* ---------------------- GL_AMD_interleaved_elements ---------------------- */ - -#ifndef GL_AMD_interleaved_elements -#define GL_AMD_interleaved_elements 1 - -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RG8UI 0x8238 -#define GL_RG16UI 0x823A -#define GL_RGBA8UI 0x8D7C -#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 -#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 - -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); - -#define glVertexAttribParameteriAMD GLEW_GET_FUN(__glewVertexAttribParameteriAMD) - -#define GLEW_AMD_interleaved_elements GLEW_GET_VAR(__GLEW_AMD_interleaved_elements) - -#endif /* GL_AMD_interleaved_elements */ - -/* ----------------------- GL_AMD_multi_draw_indirect ---------------------- */ - -#ifndef GL_AMD_multi_draw_indirect -#define GL_AMD_multi_draw_indirect 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); - -#define glMultiDrawArraysIndirectAMD GLEW_GET_FUN(__glewMultiDrawArraysIndirectAMD) -#define glMultiDrawElementsIndirectAMD GLEW_GET_FUN(__glewMultiDrawElementsIndirectAMD) - -#define GLEW_AMD_multi_draw_indirect GLEW_GET_VAR(__GLEW_AMD_multi_draw_indirect) - -#endif /* GL_AMD_multi_draw_indirect */ - -/* ------------------------- GL_AMD_name_gen_delete ------------------------ */ - -#ifndef GL_AMD_name_gen_delete -#define GL_AMD_name_gen_delete 1 - -#define GL_DATA_BUFFER_AMD 0x9151 -#define GL_PERFORMANCE_MONITOR_AMD 0x9152 -#define GL_QUERY_OBJECT_AMD 0x9153 -#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 -#define GL_SAMPLER_OBJECT_AMD 0x9155 - -typedef void (GLAPIENTRY * PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint* names); -typedef void (GLAPIENTRY * PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint* names); -typedef GLboolean (GLAPIENTRY * PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); - -#define glDeleteNamesAMD GLEW_GET_FUN(__glewDeleteNamesAMD) -#define glGenNamesAMD GLEW_GET_FUN(__glewGenNamesAMD) -#define glIsNameAMD GLEW_GET_FUN(__glewIsNameAMD) - -#define GLEW_AMD_name_gen_delete GLEW_GET_VAR(__GLEW_AMD_name_gen_delete) - -#endif /* GL_AMD_name_gen_delete */ - -/* ----------------------- GL_AMD_performance_monitor ---------------------- */ - -#ifndef GL_AMD_performance_monitor -#define GL_AMD_performance_monitor 1 - -#define GL_COUNTER_TYPE_AMD 0x8BC0 -#define GL_COUNTER_RANGE_AMD 0x8BC1 -#define GL_UNSIGNED_INT64_AMD 0x8BC2 -#define GL_PERCENTAGE_AMD 0x8BC3 -#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 -#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 -#define GL_PERFMON_RESULT_AMD 0x8BC6 - -typedef void (GLAPIENTRY * PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GLAPIENTRY * PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint* monitors); -typedef void (GLAPIENTRY * PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); -typedef void (GLAPIENTRY * PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint* monitors); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint* data, GLint *bytesWritten); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei* length, GLchar *counterString); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint* numCounters, GLint *maxActiveCounters, GLsizei countersSize, GLuint *counters); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei* length, GLchar *groupString); -typedef void (GLAPIENTRY * PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint* numGroups, GLsizei groupsSize, GLuint *groups); -typedef void (GLAPIENTRY * PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint* counterList); - -#define glBeginPerfMonitorAMD GLEW_GET_FUN(__glewBeginPerfMonitorAMD) -#define glDeletePerfMonitorsAMD GLEW_GET_FUN(__glewDeletePerfMonitorsAMD) -#define glEndPerfMonitorAMD GLEW_GET_FUN(__glewEndPerfMonitorAMD) -#define glGenPerfMonitorsAMD GLEW_GET_FUN(__glewGenPerfMonitorsAMD) -#define glGetPerfMonitorCounterDataAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterDataAMD) -#define glGetPerfMonitorCounterInfoAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterInfoAMD) -#define glGetPerfMonitorCounterStringAMD GLEW_GET_FUN(__glewGetPerfMonitorCounterStringAMD) -#define glGetPerfMonitorCountersAMD GLEW_GET_FUN(__glewGetPerfMonitorCountersAMD) -#define glGetPerfMonitorGroupStringAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupStringAMD) -#define glGetPerfMonitorGroupsAMD GLEW_GET_FUN(__glewGetPerfMonitorGroupsAMD) -#define glSelectPerfMonitorCountersAMD GLEW_GET_FUN(__glewSelectPerfMonitorCountersAMD) - -#define GLEW_AMD_performance_monitor GLEW_GET_VAR(__GLEW_AMD_performance_monitor) - -#endif /* GL_AMD_performance_monitor */ - -/* -------------------------- GL_AMD_pinned_memory ------------------------- */ - -#ifndef GL_AMD_pinned_memory -#define GL_AMD_pinned_memory 1 - -#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 - -#define GLEW_AMD_pinned_memory GLEW_GET_VAR(__GLEW_AMD_pinned_memory) - -#endif /* GL_AMD_pinned_memory */ - -/* ----------------------- GL_AMD_query_buffer_object ---------------------- */ - -#ifndef GL_AMD_query_buffer_object -#define GL_AMD_query_buffer_object 1 - -#define GL_QUERY_BUFFER_AMD 0x9192 -#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 -#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 - -#define GLEW_AMD_query_buffer_object GLEW_GET_VAR(__GLEW_AMD_query_buffer_object) - -#endif /* GL_AMD_query_buffer_object */ - -/* ------------------------ GL_AMD_sample_positions ------------------------ */ - -#ifndef GL_AMD_sample_positions -#define GL_AMD_sample_positions 1 - -#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F - -typedef void (GLAPIENTRY * PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat* val); - -#define glSetMultisamplefvAMD GLEW_GET_FUN(__glewSetMultisamplefvAMD) - -#define GLEW_AMD_sample_positions GLEW_GET_VAR(__GLEW_AMD_sample_positions) - -#endif /* GL_AMD_sample_positions */ - -/* ------------------ GL_AMD_seamless_cubemap_per_texture ------------------ */ - -#ifndef GL_AMD_seamless_cubemap_per_texture -#define GL_AMD_seamless_cubemap_per_texture 1 - -#define GL_TEXTURE_CUBE_MAP_SEAMLESS_ARB 0x884F - -#define GLEW_AMD_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_AMD_seamless_cubemap_per_texture) - -#endif /* GL_AMD_seamless_cubemap_per_texture */ - -/* ---------------------- GL_AMD_shader_stencil_export --------------------- */ - -#ifndef GL_AMD_shader_stencil_export -#define GL_AMD_shader_stencil_export 1 - -#define GLEW_AMD_shader_stencil_export GLEW_GET_VAR(__GLEW_AMD_shader_stencil_export) - -#endif /* GL_AMD_shader_stencil_export */ - -/* ---------------------- GL_AMD_shader_trinary_minmax --------------------- */ - -#ifndef GL_AMD_shader_trinary_minmax -#define GL_AMD_shader_trinary_minmax 1 - -#define GLEW_AMD_shader_trinary_minmax GLEW_GET_VAR(__GLEW_AMD_shader_trinary_minmax) - -#endif /* GL_AMD_shader_trinary_minmax */ - -/* ------------------------- GL_AMD_sparse_texture ------------------------- */ - -#ifndef GL_AMD_sparse_texture -#define GL_AMD_sparse_texture 1 - -#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 -#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A -#define GL_MIN_SPARSE_LEVEL_AMD 0x919B -#define GL_MIN_LOD_WARNING_AMD 0x919C - -typedef void (GLAPIENTRY * PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); - -#define glTexStorageSparseAMD GLEW_GET_FUN(__glewTexStorageSparseAMD) -#define glTextureStorageSparseAMD GLEW_GET_FUN(__glewTextureStorageSparseAMD) - -#define GLEW_AMD_sparse_texture GLEW_GET_VAR(__GLEW_AMD_sparse_texture) - -#endif /* GL_AMD_sparse_texture */ - -/* ------------------- GL_AMD_stencil_operation_extended ------------------- */ - -#ifndef GL_AMD_stencil_operation_extended -#define GL_AMD_stencil_operation_extended 1 - -#define GL_SET_AMD 0x874A -#define GL_REPLACE_VALUE_AMD 0x874B -#define GL_STENCIL_OP_VALUE_AMD 0x874C -#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D - -typedef void (GLAPIENTRY * PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); - -#define glStencilOpValueAMD GLEW_GET_FUN(__glewStencilOpValueAMD) - -#define GLEW_AMD_stencil_operation_extended GLEW_GET_VAR(__GLEW_AMD_stencil_operation_extended) - -#endif /* GL_AMD_stencil_operation_extended */ - -/* ------------------------ GL_AMD_texture_texture4 ------------------------ */ - -#ifndef GL_AMD_texture_texture4 -#define GL_AMD_texture_texture4 1 - -#define GLEW_AMD_texture_texture4 GLEW_GET_VAR(__GLEW_AMD_texture_texture4) - -#endif /* GL_AMD_texture_texture4 */ - -/* --------------- GL_AMD_transform_feedback3_lines_triangles -------------- */ - -#ifndef GL_AMD_transform_feedback3_lines_triangles -#define GL_AMD_transform_feedback3_lines_triangles 1 - -#define GLEW_AMD_transform_feedback3_lines_triangles GLEW_GET_VAR(__GLEW_AMD_transform_feedback3_lines_triangles) - -#endif /* GL_AMD_transform_feedback3_lines_triangles */ - -/* ----------------------- GL_AMD_vertex_shader_layer ---------------------- */ - -#ifndef GL_AMD_vertex_shader_layer -#define GL_AMD_vertex_shader_layer 1 - -#define GLEW_AMD_vertex_shader_layer GLEW_GET_VAR(__GLEW_AMD_vertex_shader_layer) - -#endif /* GL_AMD_vertex_shader_layer */ - -/* -------------------- GL_AMD_vertex_shader_tessellator ------------------- */ - -#ifndef GL_AMD_vertex_shader_tessellator -#define GL_AMD_vertex_shader_tessellator 1 - -#define GL_SAMPLER_BUFFER_AMD 0x9001 -#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 -#define GL_TESSELLATION_MODE_AMD 0x9004 -#define GL_TESSELLATION_FACTOR_AMD 0x9005 -#define GL_DISCRETE_AMD 0x9006 -#define GL_CONTINUOUS_AMD 0x9007 - -typedef void (GLAPIENTRY * PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); -typedef void (GLAPIENTRY * PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); - -#define glTessellationFactorAMD GLEW_GET_FUN(__glewTessellationFactorAMD) -#define glTessellationModeAMD GLEW_GET_FUN(__glewTessellationModeAMD) - -#define GLEW_AMD_vertex_shader_tessellator GLEW_GET_VAR(__GLEW_AMD_vertex_shader_tessellator) - -#endif /* GL_AMD_vertex_shader_tessellator */ - -/* ------------------ GL_AMD_vertex_shader_viewport_index ------------------ */ - -#ifndef GL_AMD_vertex_shader_viewport_index -#define GL_AMD_vertex_shader_viewport_index 1 - -#define GLEW_AMD_vertex_shader_viewport_index GLEW_GET_VAR(__GLEW_AMD_vertex_shader_viewport_index) - -#endif /* GL_AMD_vertex_shader_viewport_index */ - -/* ------------------------- GL_ANGLE_depth_texture ------------------------ */ - -#ifndef GL_ANGLE_depth_texture -#define GL_ANGLE_depth_texture 1 - -#define GLEW_ANGLE_depth_texture GLEW_GET_VAR(__GLEW_ANGLE_depth_texture) - -#endif /* GL_ANGLE_depth_texture */ - -/* ----------------------- GL_ANGLE_framebuffer_blit ----------------------- */ - -#ifndef GL_ANGLE_framebuffer_blit -#define GL_ANGLE_framebuffer_blit 1 - -#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 -#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA - -typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); - -#define glBlitFramebufferANGLE GLEW_GET_FUN(__glewBlitFramebufferANGLE) - -#define GLEW_ANGLE_framebuffer_blit GLEW_GET_VAR(__GLEW_ANGLE_framebuffer_blit) - -#endif /* GL_ANGLE_framebuffer_blit */ - -/* -------------------- GL_ANGLE_framebuffer_multisample ------------------- */ - -#ifndef GL_ANGLE_framebuffer_multisample -#define GL_ANGLE_framebuffer_multisample 1 - -#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 -#define GL_MAX_SAMPLES_ANGLE 0x8D57 - -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glRenderbufferStorageMultisampleANGLE GLEW_GET_FUN(__glewRenderbufferStorageMultisampleANGLE) - -#define GLEW_ANGLE_framebuffer_multisample GLEW_GET_VAR(__GLEW_ANGLE_framebuffer_multisample) - -#endif /* GL_ANGLE_framebuffer_multisample */ - -/* ----------------------- GL_ANGLE_instanced_arrays ----------------------- */ - -#ifndef GL_ANGLE_instanced_arrays -#define GL_ANGLE_instanced_arrays 1 - -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); - -#define glDrawArraysInstancedANGLE GLEW_GET_FUN(__glewDrawArraysInstancedANGLE) -#define glDrawElementsInstancedANGLE GLEW_GET_FUN(__glewDrawElementsInstancedANGLE) -#define glVertexAttribDivisorANGLE GLEW_GET_FUN(__glewVertexAttribDivisorANGLE) - -#define GLEW_ANGLE_instanced_arrays GLEW_GET_VAR(__GLEW_ANGLE_instanced_arrays) - -#endif /* GL_ANGLE_instanced_arrays */ - -/* -------------------- GL_ANGLE_pack_reverse_row_order -------------------- */ - -#ifndef GL_ANGLE_pack_reverse_row_order -#define GL_ANGLE_pack_reverse_row_order 1 - -#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 - -#define GLEW_ANGLE_pack_reverse_row_order GLEW_GET_VAR(__GLEW_ANGLE_pack_reverse_row_order) - -#endif /* GL_ANGLE_pack_reverse_row_order */ - -/* ------------------------ GL_ANGLE_program_binary ------------------------ */ - -#ifndef GL_ANGLE_program_binary -#define GL_ANGLE_program_binary 1 - -#define GL_PROGRAM_BINARY_ANGLE 0x93A6 - -#define GLEW_ANGLE_program_binary GLEW_GET_VAR(__GLEW_ANGLE_program_binary) - -#endif /* GL_ANGLE_program_binary */ - -/* ------------------- GL_ANGLE_texture_compression_dxt1 ------------------- */ - -#ifndef GL_ANGLE_texture_compression_dxt1 -#define GL_ANGLE_texture_compression_dxt1 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 - -#define GLEW_ANGLE_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt1) - -#endif /* GL_ANGLE_texture_compression_dxt1 */ - -/* ------------------- GL_ANGLE_texture_compression_dxt3 ------------------- */ - -#ifndef GL_ANGLE_texture_compression_dxt3 -#define GL_ANGLE_texture_compression_dxt3 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 - -#define GLEW_ANGLE_texture_compression_dxt3 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt3) - -#endif /* GL_ANGLE_texture_compression_dxt3 */ - -/* ------------------- GL_ANGLE_texture_compression_dxt5 ------------------- */ - -#ifndef GL_ANGLE_texture_compression_dxt5 -#define GL_ANGLE_texture_compression_dxt5 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_ANGLE 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_ANGLE 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 - -#define GLEW_ANGLE_texture_compression_dxt5 GLEW_GET_VAR(__GLEW_ANGLE_texture_compression_dxt5) - -#endif /* GL_ANGLE_texture_compression_dxt5 */ - -/* ------------------------- GL_ANGLE_texture_usage ------------------------ */ - -#ifndef GL_ANGLE_texture_usage -#define GL_ANGLE_texture_usage 1 - -#define GL_TEXTURE_USAGE_ANGLE 0x93A2 -#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 - -#define GLEW_ANGLE_texture_usage GLEW_GET_VAR(__GLEW_ANGLE_texture_usage) - -#endif /* GL_ANGLE_texture_usage */ - -/* -------------------------- GL_ANGLE_timer_query ------------------------- */ - -#ifndef GL_ANGLE_timer_query -#define GL_ANGLE_timer_query 1 - -#define GL_QUERY_COUNTER_BITS_ANGLE 0x8864 -#define GL_CURRENT_QUERY_ANGLE 0x8865 -#define GL_QUERY_RESULT_ANGLE 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ANGLE 0x8867 -#define GL_TIME_ELAPSED_ANGLE 0x88BF -#define GL_TIMESTAMP_ANGLE 0x8E28 - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYANGLEPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEQUERIESANGLEPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDQUERYANGLEPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGENQUERIESANGLEPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VANGLEPROC) (GLuint id, GLenum pname, GLint64* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVANGLEPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VANGLEPROC) (GLuint id, GLenum pname, GLuint64* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVANGLEPROC) (GLuint id, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYIVANGLEPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISQUERYANGLEPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERANGLEPROC) (GLuint id, GLenum target); - -#define glBeginQueryANGLE GLEW_GET_FUN(__glewBeginQueryANGLE) -#define glDeleteQueriesANGLE GLEW_GET_FUN(__glewDeleteQueriesANGLE) -#define glEndQueryANGLE GLEW_GET_FUN(__glewEndQueryANGLE) -#define glGenQueriesANGLE GLEW_GET_FUN(__glewGenQueriesANGLE) -#define glGetQueryObjecti64vANGLE GLEW_GET_FUN(__glewGetQueryObjecti64vANGLE) -#define glGetQueryObjectivANGLE GLEW_GET_FUN(__glewGetQueryObjectivANGLE) -#define glGetQueryObjectui64vANGLE GLEW_GET_FUN(__glewGetQueryObjectui64vANGLE) -#define glGetQueryObjectuivANGLE GLEW_GET_FUN(__glewGetQueryObjectuivANGLE) -#define glGetQueryivANGLE GLEW_GET_FUN(__glewGetQueryivANGLE) -#define glIsQueryANGLE GLEW_GET_FUN(__glewIsQueryANGLE) -#define glQueryCounterANGLE GLEW_GET_FUN(__glewQueryCounterANGLE) - -#define GLEW_ANGLE_timer_query GLEW_GET_VAR(__GLEW_ANGLE_timer_query) - -#endif /* GL_ANGLE_timer_query */ - -/* ------------------- GL_ANGLE_translated_shader_source ------------------- */ - -#ifndef GL_ANGLE_translated_shader_source -#define GL_ANGLE_translated_shader_source 1 - -#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 - -typedef void (GLAPIENTRY * PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); - -#define glGetTranslatedShaderSourceANGLE GLEW_GET_FUN(__glewGetTranslatedShaderSourceANGLE) - -#define GLEW_ANGLE_translated_shader_source GLEW_GET_VAR(__GLEW_ANGLE_translated_shader_source) - -#endif /* GL_ANGLE_translated_shader_source */ - -/* ----------------------- GL_APPLE_aux_depth_stencil ---------------------- */ - -#ifndef GL_APPLE_aux_depth_stencil -#define GL_APPLE_aux_depth_stencil 1 - -#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 - -#define GLEW_APPLE_aux_depth_stencil GLEW_GET_VAR(__GLEW_APPLE_aux_depth_stencil) - -#endif /* GL_APPLE_aux_depth_stencil */ - -/* ------------------------ GL_APPLE_client_storage ------------------------ */ - -#ifndef GL_APPLE_client_storage -#define GL_APPLE_client_storage 1 - -#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 - -#define GLEW_APPLE_client_storage GLEW_GET_VAR(__GLEW_APPLE_client_storage) - -#endif /* GL_APPLE_client_storage */ - -/* ------------------------- GL_APPLE_element_array ------------------------ */ - -#ifndef GL_APPLE_element_array -#define GL_APPLE_element_array 1 - -#define GL_ELEMENT_ARRAY_APPLE 0x8A0C -#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D -#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E - -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint* first, const GLsizei *count, GLsizei primcount); - -#define glDrawElementArrayAPPLE GLEW_GET_FUN(__glewDrawElementArrayAPPLE) -#define glDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewDrawRangeElementArrayAPPLE) -#define glElementPointerAPPLE GLEW_GET_FUN(__glewElementPointerAPPLE) -#define glMultiDrawElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawElementArrayAPPLE) -#define glMultiDrawRangeElementArrayAPPLE GLEW_GET_FUN(__glewMultiDrawRangeElementArrayAPPLE) - -#define GLEW_APPLE_element_array GLEW_GET_VAR(__GLEW_APPLE_element_array) - -#endif /* GL_APPLE_element_array */ - -/* ----------------------------- GL_APPLE_fence ---------------------------- */ - -#ifndef GL_APPLE_fence -#define GL_APPLE_fence 1 - -#define GL_DRAW_PIXELS_APPLE 0x8A0A -#define GL_FENCE_APPLE 0x8A0B - -typedef void (GLAPIENTRY * PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint* fences); -typedef void (GLAPIENTRY * PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); -typedef void (GLAPIENTRY * PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint* fences); -typedef GLboolean (GLAPIENTRY * PFNGLISFENCEAPPLEPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLSETFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCEAPPLEPROC) (GLuint fence); -typedef GLboolean (GLAPIENTRY * PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); - -#define glDeleteFencesAPPLE GLEW_GET_FUN(__glewDeleteFencesAPPLE) -#define glFinishFenceAPPLE GLEW_GET_FUN(__glewFinishFenceAPPLE) -#define glFinishObjectAPPLE GLEW_GET_FUN(__glewFinishObjectAPPLE) -#define glGenFencesAPPLE GLEW_GET_FUN(__glewGenFencesAPPLE) -#define glIsFenceAPPLE GLEW_GET_FUN(__glewIsFenceAPPLE) -#define glSetFenceAPPLE GLEW_GET_FUN(__glewSetFenceAPPLE) -#define glTestFenceAPPLE GLEW_GET_FUN(__glewTestFenceAPPLE) -#define glTestObjectAPPLE GLEW_GET_FUN(__glewTestObjectAPPLE) - -#define GLEW_APPLE_fence GLEW_GET_VAR(__GLEW_APPLE_fence) - -#endif /* GL_APPLE_fence */ - -/* ------------------------- GL_APPLE_float_pixels ------------------------- */ - -#ifndef GL_APPLE_float_pixels -#define GL_APPLE_float_pixels 1 - -#define GL_HALF_APPLE 0x140B -#define GL_RGBA_FLOAT32_APPLE 0x8814 -#define GL_RGB_FLOAT32_APPLE 0x8815 -#define GL_ALPHA_FLOAT32_APPLE 0x8816 -#define GL_INTENSITY_FLOAT32_APPLE 0x8817 -#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 -#define GL_RGBA_FLOAT16_APPLE 0x881A -#define GL_RGB_FLOAT16_APPLE 0x881B -#define GL_ALPHA_FLOAT16_APPLE 0x881C -#define GL_INTENSITY_FLOAT16_APPLE 0x881D -#define GL_LUMINANCE_FLOAT16_APPLE 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F -#define GL_COLOR_FLOAT_APPLE 0x8A0F - -#define GLEW_APPLE_float_pixels GLEW_GET_VAR(__GLEW_APPLE_float_pixels) - -#endif /* GL_APPLE_float_pixels */ - -/* ---------------------- GL_APPLE_flush_buffer_range ---------------------- */ - -#ifndef GL_APPLE_flush_buffer_range -#define GL_APPLE_flush_buffer_range 1 - -#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 -#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 - -typedef void (GLAPIENTRY * PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); - -#define glBufferParameteriAPPLE GLEW_GET_FUN(__glewBufferParameteriAPPLE) -#define glFlushMappedBufferRangeAPPLE GLEW_GET_FUN(__glewFlushMappedBufferRangeAPPLE) - -#define GLEW_APPLE_flush_buffer_range GLEW_GET_VAR(__GLEW_APPLE_flush_buffer_range) - -#endif /* GL_APPLE_flush_buffer_range */ - -/* ----------------------- GL_APPLE_object_purgeable ----------------------- */ - -#ifndef GL_APPLE_object_purgeable -#define GL_APPLE_object_purgeable 1 - -#define GL_BUFFER_OBJECT_APPLE 0x85B3 -#define GL_RELEASED_APPLE 0x8A19 -#define GL_VOLATILE_APPLE 0x8A1A -#define GL_RETAINED_APPLE 0x8A1B -#define GL_UNDEFINED_APPLE 0x8A1C -#define GL_PURGEABLE_APPLE 0x8A1D - -typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint* params); -typedef GLenum (GLAPIENTRY * PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); -typedef GLenum (GLAPIENTRY * PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); - -#define glGetObjectParameterivAPPLE GLEW_GET_FUN(__glewGetObjectParameterivAPPLE) -#define glObjectPurgeableAPPLE GLEW_GET_FUN(__glewObjectPurgeableAPPLE) -#define glObjectUnpurgeableAPPLE GLEW_GET_FUN(__glewObjectUnpurgeableAPPLE) - -#define GLEW_APPLE_object_purgeable GLEW_GET_VAR(__GLEW_APPLE_object_purgeable) - -#endif /* GL_APPLE_object_purgeable */ - -/* ------------------------- GL_APPLE_pixel_buffer ------------------------- */ - -#ifndef GL_APPLE_pixel_buffer -#define GL_APPLE_pixel_buffer 1 - -#define GL_MIN_PBUFFER_VIEWPORT_DIMS_APPLE 0x8A10 - -#define GLEW_APPLE_pixel_buffer GLEW_GET_VAR(__GLEW_APPLE_pixel_buffer) - -#endif /* GL_APPLE_pixel_buffer */ - -/* ---------------------------- GL_APPLE_rgb_422 --------------------------- */ - -#ifndef GL_APPLE_rgb_422 -#define GL_APPLE_rgb_422 1 - -#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB -#define GL_RGB_422_APPLE 0x8A1F - -#define GLEW_APPLE_rgb_422 GLEW_GET_VAR(__GLEW_APPLE_rgb_422) - -#endif /* GL_APPLE_rgb_422 */ - -/* --------------------------- GL_APPLE_row_bytes -------------------------- */ - -#ifndef GL_APPLE_row_bytes -#define GL_APPLE_row_bytes 1 - -#define GL_PACK_ROW_BYTES_APPLE 0x8A15 -#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 - -#define GLEW_APPLE_row_bytes GLEW_GET_VAR(__GLEW_APPLE_row_bytes) - -#endif /* GL_APPLE_row_bytes */ - -/* ------------------------ GL_APPLE_specular_vector ----------------------- */ - -#ifndef GL_APPLE_specular_vector -#define GL_APPLE_specular_vector 1 - -#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 - -#define GLEW_APPLE_specular_vector GLEW_GET_VAR(__GLEW_APPLE_specular_vector) - -#endif /* GL_APPLE_specular_vector */ - -/* ------------------------- GL_APPLE_texture_range ------------------------ */ - -#ifndef GL_APPLE_texture_range -#define GL_APPLE_texture_range 1 - -#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 -#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 -#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC -#define GL_STORAGE_PRIVATE_APPLE 0x85BD -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF - -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, GLvoid **params); -typedef void (GLAPIENTRY * PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, GLvoid *pointer); - -#define glGetTexParameterPointervAPPLE GLEW_GET_FUN(__glewGetTexParameterPointervAPPLE) -#define glTextureRangeAPPLE GLEW_GET_FUN(__glewTextureRangeAPPLE) - -#define GLEW_APPLE_texture_range GLEW_GET_VAR(__GLEW_APPLE_texture_range) - -#endif /* GL_APPLE_texture_range */ - -/* ------------------------ GL_APPLE_transform_hint ------------------------ */ - -#ifndef GL_APPLE_transform_hint -#define GL_APPLE_transform_hint 1 - -#define GL_TRANSFORM_HINT_APPLE 0x85B1 - -#define GLEW_APPLE_transform_hint GLEW_GET_VAR(__GLEW_APPLE_transform_hint) - -#endif /* GL_APPLE_transform_hint */ - -/* ---------------------- GL_APPLE_vertex_array_object --------------------- */ - -#ifndef GL_APPLE_vertex_array_object -#define GL_APPLE_vertex_array_object 1 - -#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 - -typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); -typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); -typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint* arrays); -typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); - -#define glBindVertexArrayAPPLE GLEW_GET_FUN(__glewBindVertexArrayAPPLE) -#define glDeleteVertexArraysAPPLE GLEW_GET_FUN(__glewDeleteVertexArraysAPPLE) -#define glGenVertexArraysAPPLE GLEW_GET_FUN(__glewGenVertexArraysAPPLE) -#define glIsVertexArrayAPPLE GLEW_GET_FUN(__glewIsVertexArrayAPPLE) - -#define GLEW_APPLE_vertex_array_object GLEW_GET_VAR(__GLEW_APPLE_vertex_array_object) - -#endif /* GL_APPLE_vertex_array_object */ - -/* ---------------------- GL_APPLE_vertex_array_range ---------------------- */ - -#ifndef GL_APPLE_vertex_array_range -#define GL_APPLE_vertex_array_range 1 - -#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E -#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 -#define GL_STORAGE_CLIENT_APPLE 0x85B4 -#define GL_STORAGE_CACHED_APPLE 0x85BE -#define GL_STORAGE_SHARED_APPLE 0x85BF - -typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer); - -#define glFlushVertexArrayRangeAPPLE GLEW_GET_FUN(__glewFlushVertexArrayRangeAPPLE) -#define glVertexArrayParameteriAPPLE GLEW_GET_FUN(__glewVertexArrayParameteriAPPLE) -#define glVertexArrayRangeAPPLE GLEW_GET_FUN(__glewVertexArrayRangeAPPLE) - -#define GLEW_APPLE_vertex_array_range GLEW_GET_VAR(__GLEW_APPLE_vertex_array_range) - -#endif /* GL_APPLE_vertex_array_range */ - -/* ------------------- GL_APPLE_vertex_program_evaluators ------------------ */ - -#ifndef GL_APPLE_vertex_program_evaluators -#define GL_APPLE_vertex_program_evaluators 1 - -#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 -#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 -#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 -#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 -#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 -#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 -#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 -#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 -#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 -#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 - -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); -typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble* points); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat* points); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble* points); -typedef void (GLAPIENTRY * PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat* points); - -#define glDisableVertexAttribAPPLE GLEW_GET_FUN(__glewDisableVertexAttribAPPLE) -#define glEnableVertexAttribAPPLE GLEW_GET_FUN(__glewEnableVertexAttribAPPLE) -#define glIsVertexAttribEnabledAPPLE GLEW_GET_FUN(__glewIsVertexAttribEnabledAPPLE) -#define glMapVertexAttrib1dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1dAPPLE) -#define glMapVertexAttrib1fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib1fAPPLE) -#define glMapVertexAttrib2dAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2dAPPLE) -#define glMapVertexAttrib2fAPPLE GLEW_GET_FUN(__glewMapVertexAttrib2fAPPLE) - -#define GLEW_APPLE_vertex_program_evaluators GLEW_GET_VAR(__GLEW_APPLE_vertex_program_evaluators) - -#endif /* GL_APPLE_vertex_program_evaluators */ - -/* --------------------------- GL_APPLE_ycbcr_422 -------------------------- */ - -#ifndef GL_APPLE_ycbcr_422 -#define GL_APPLE_ycbcr_422 1 - -#define GL_YCBCR_422_APPLE 0x85B9 - -#define GLEW_APPLE_ycbcr_422 GLEW_GET_VAR(__GLEW_APPLE_ycbcr_422) - -#endif /* GL_APPLE_ycbcr_422 */ - -/* ------------------------ GL_ARB_ES2_compatibility ----------------------- */ - -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 - -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_RGB565 0x8D62 -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD - -typedef int GLfixed; - -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFPROC) (GLclampf d); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFPROC) (GLclampf n, GLclampf f); -typedef void (GLAPIENTRY * PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint* range, GLint *precision); -typedef void (GLAPIENTRY * PFNGLRELEASESHADERCOMPILERPROC) (void); -typedef void (GLAPIENTRY * PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint* shaders, GLenum binaryformat, const GLvoid*binary, GLsizei length); - -#define glClearDepthf GLEW_GET_FUN(__glewClearDepthf) -#define glDepthRangef GLEW_GET_FUN(__glewDepthRangef) -#define glGetShaderPrecisionFormat GLEW_GET_FUN(__glewGetShaderPrecisionFormat) -#define glReleaseShaderCompiler GLEW_GET_FUN(__glewReleaseShaderCompiler) -#define glShaderBinary GLEW_GET_FUN(__glewShaderBinary) - -#define GLEW_ARB_ES2_compatibility GLEW_GET_VAR(__GLEW_ARB_ES2_compatibility) - -#endif /* GL_ARB_ES2_compatibility */ - -/* ------------------------ GL_ARB_ES3_compatibility ----------------------- */ - -#ifndef GL_ARB_ES3_compatibility -#define GL_ARB_ES3_compatibility 1 - -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 - -#define GLEW_ARB_ES3_compatibility GLEW_GET_VAR(__GLEW_ARB_ES3_compatibility) - -#endif /* GL_ARB_ES3_compatibility */ - -/* ------------------------ GL_ARB_arrays_of_arrays ------------------------ */ - -#ifndef GL_ARB_arrays_of_arrays -#define GL_ARB_arrays_of_arrays 1 - -#define GLEW_ARB_arrays_of_arrays GLEW_GET_VAR(__GLEW_ARB_arrays_of_arrays) - -#endif /* GL_ARB_arrays_of_arrays */ - -/* -------------------------- GL_ARB_base_instance ------------------------- */ - -#ifndef GL_ARB_base_instance -#define GL_ARB_base_instance 1 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount, GLuint baseinstance); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLuint baseinstance); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance); - -#define glDrawArraysInstancedBaseInstance GLEW_GET_FUN(__glewDrawArraysInstancedBaseInstance) -#define glDrawElementsInstancedBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseInstance) -#define glDrawElementsInstancedBaseVertexBaseInstance GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertexBaseInstance) - -#define GLEW_ARB_base_instance GLEW_GET_VAR(__GLEW_ARB_base_instance) - -#endif /* GL_ARB_base_instance */ - -/* ------------------------ GL_ARB_bindless_texture ------------------------ */ - -#ifndef GL_ARB_bindless_texture -#define GL_ARB_bindless_texture 1 - -#define GL_UNSIGNED_INT64_ARB 0x140F - -typedef GLuint64 (GLAPIENTRY * PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT* params); -typedef GLboolean (GLAPIENTRY * PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64* values); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT* v); - -#define glGetImageHandleARB GLEW_GET_FUN(__glewGetImageHandleARB) -#define glGetTextureHandleARB GLEW_GET_FUN(__glewGetTextureHandleARB) -#define glGetTextureSamplerHandleARB GLEW_GET_FUN(__glewGetTextureSamplerHandleARB) -#define glGetVertexAttribLui64vARB GLEW_GET_FUN(__glewGetVertexAttribLui64vARB) -#define glIsImageHandleResidentARB GLEW_GET_FUN(__glewIsImageHandleResidentARB) -#define glIsTextureHandleResidentARB GLEW_GET_FUN(__glewIsTextureHandleResidentARB) -#define glMakeImageHandleNonResidentARB GLEW_GET_FUN(__glewMakeImageHandleNonResidentARB) -#define glMakeImageHandleResidentARB GLEW_GET_FUN(__glewMakeImageHandleResidentARB) -#define glMakeTextureHandleNonResidentARB GLEW_GET_FUN(__glewMakeTextureHandleNonResidentARB) -#define glMakeTextureHandleResidentARB GLEW_GET_FUN(__glewMakeTextureHandleResidentARB) -#define glProgramUniformHandleui64ARB GLEW_GET_FUN(__glewProgramUniformHandleui64ARB) -#define glProgramUniformHandleui64vARB GLEW_GET_FUN(__glewProgramUniformHandleui64vARB) -#define glUniformHandleui64ARB GLEW_GET_FUN(__glewUniformHandleui64ARB) -#define glUniformHandleui64vARB GLEW_GET_FUN(__glewUniformHandleui64vARB) -#define glVertexAttribL1ui64ARB GLEW_GET_FUN(__glewVertexAttribL1ui64ARB) -#define glVertexAttribL1ui64vARB GLEW_GET_FUN(__glewVertexAttribL1ui64vARB) - -#define GLEW_ARB_bindless_texture GLEW_GET_VAR(__GLEW_ARB_bindless_texture) - -#endif /* GL_ARB_bindless_texture */ - -/* ----------------------- GL_ARB_blend_func_extended ---------------------- */ - -#ifndef GL_ARB_blend_func_extended -#define GL_ARB_blend_func_extended 1 - -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC - -typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar * name); -typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar * name); - -#define glBindFragDataLocationIndexed GLEW_GET_FUN(__glewBindFragDataLocationIndexed) -#define glGetFragDataIndex GLEW_GET_FUN(__glewGetFragDataIndex) - -#define GLEW_ARB_blend_func_extended GLEW_GET_VAR(__GLEW_ARB_blend_func_extended) - -#endif /* GL_ARB_blend_func_extended */ - -/* ------------------------- GL_ARB_buffer_storage ------------------------- */ - -#ifndef GL_ARB_buffer_storage -#define GL_ARB_buffer_storage 1 - -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_PERSISTENT_BIT 0x00000040 -#define GL_MAP_COHERENT_BIT 0x00000080 -#define GL_DYNAMIC_STORAGE_BIT 0x0100 -#define GL_CLIENT_STORAGE_BIT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F -#define GL_BUFFER_STORAGE_FLAGS 0x8220 - -typedef void (GLAPIENTRY * PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const GLvoid* data, GLbitfield flags); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid* data, GLbitfield flags); - -#define glBufferStorage GLEW_GET_FUN(__glewBufferStorage) -#define glNamedBufferStorageEXT GLEW_GET_FUN(__glewNamedBufferStorageEXT) - -#define GLEW_ARB_buffer_storage GLEW_GET_VAR(__GLEW_ARB_buffer_storage) - -#endif /* GL_ARB_buffer_storage */ - -/* ---------------------------- GL_ARB_cl_event ---------------------------- */ - -#ifndef GL_ARB_cl_event -#define GL_ARB_cl_event 1 - -#define GL_SYNC_CL_EVENT_ARB 0x8240 -#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 - -typedef struct _cl_context *cl_context; -typedef struct _cl_event *cl_event; - -typedef GLsync (GLAPIENTRY * PFNGLCREATESYNCFROMCLEVENTARBPROC) (cl_context context, cl_event event, GLbitfield flags); - -#define glCreateSyncFromCLeventARB GLEW_GET_FUN(__glewCreateSyncFromCLeventARB) - -#define GLEW_ARB_cl_event GLEW_GET_VAR(__GLEW_ARB_cl_event) - -#endif /* GL_ARB_cl_event */ - -/* ----------------------- GL_ARB_clear_buffer_object ---------------------- */ - -#ifndef GL_ARB_clear_buffer_object -#define GL_ARB_clear_buffer_object 1 - -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const GLvoid* data); - -#define glClearBufferData GLEW_GET_FUN(__glewClearBufferData) -#define glClearBufferSubData GLEW_GET_FUN(__glewClearBufferSubData) -#define glClearNamedBufferDataEXT GLEW_GET_FUN(__glewClearNamedBufferDataEXT) -#define glClearNamedBufferSubDataEXT GLEW_GET_FUN(__glewClearNamedBufferSubDataEXT) - -#define GLEW_ARB_clear_buffer_object GLEW_GET_VAR(__GLEW_ARB_clear_buffer_object) - -#endif /* GL_ARB_clear_buffer_object */ - -/* -------------------------- GL_ARB_clear_texture ------------------------- */ - -#ifndef GL_ARB_clear_texture -#define GL_ARB_clear_texture 1 - -#define GL_CLEAR_TEXTURE 0x9365 - -typedef void (GLAPIENTRY * PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const GLvoid* data); -typedef void (GLAPIENTRY * PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* data); - -#define glClearTexImage GLEW_GET_FUN(__glewClearTexImage) -#define glClearTexSubImage GLEW_GET_FUN(__glewClearTexSubImage) - -#define GLEW_ARB_clear_texture GLEW_GET_VAR(__GLEW_ARB_clear_texture) - -#endif /* GL_ARB_clear_texture */ - -/* ----------------------- GL_ARB_color_buffer_float ----------------------- */ - -#ifndef GL_ARB_color_buffer_float -#define GL_ARB_color_buffer_float 1 - -#define GL_RGBA_FLOAT_MODE_ARB 0x8820 -#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A -#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B -#define GL_CLAMP_READ_COLOR_ARB 0x891C -#define GL_FIXED_ONLY_ARB 0x891D - -typedef void (GLAPIENTRY * PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); - -#define glClampColorARB GLEW_GET_FUN(__glewClampColorARB) - -#define GLEW_ARB_color_buffer_float GLEW_GET_VAR(__GLEW_ARB_color_buffer_float) - -#endif /* GL_ARB_color_buffer_float */ - -/* -------------------------- GL_ARB_compatibility ------------------------- */ - -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 - -#define GLEW_ARB_compatibility GLEW_GET_VAR(__GLEW_ARB_compatibility) - -#endif /* GL_ARB_compatibility */ - -/* ---------------- GL_ARB_compressed_texture_pixel_storage ---------------- */ - -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 - -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E - -#define GLEW_ARB_compressed_texture_pixel_storage GLEW_GET_VAR(__GLEW_ARB_compressed_texture_pixel_storage) - -#endif /* GL_ARB_compressed_texture_pixel_storage */ - -/* ------------------------- GL_ARB_compute_shader ------------------------- */ - -#ifndef GL_ARB_compute_shader -#define GL_ARB_compute_shader 1 - -#define GL_COMPUTE_SHADER_BIT 0x00000020 -#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 -#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 -#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 -#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 -#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 -#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 -#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB -#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED -#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE -#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF -#define GL_COMPUTE_SHADER 0x91B9 -#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB -#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC -#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD -#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE -#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF - -typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); -typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); - -#define glDispatchCompute GLEW_GET_FUN(__glewDispatchCompute) -#define glDispatchComputeIndirect GLEW_GET_FUN(__glewDispatchComputeIndirect) - -#define GLEW_ARB_compute_shader GLEW_GET_VAR(__GLEW_ARB_compute_shader) - -#endif /* GL_ARB_compute_shader */ - -/* ------------------- GL_ARB_compute_variable_group_size ------------------ */ - -#ifndef GL_ARB_compute_variable_group_size -#define GL_ARB_compute_variable_group_size 1 - -#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB -#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF -#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 -#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 - -typedef void (GLAPIENTRY * PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); - -#define glDispatchComputeGroupSizeARB GLEW_GET_FUN(__glewDispatchComputeGroupSizeARB) - -#define GLEW_ARB_compute_variable_group_size GLEW_GET_VAR(__GLEW_ARB_compute_variable_group_size) - -#endif /* GL_ARB_compute_variable_group_size */ - -/* ----------------------- GL_ARB_conservative_depth ----------------------- */ - -#ifndef GL_ARB_conservative_depth -#define GL_ARB_conservative_depth 1 - -#define GLEW_ARB_conservative_depth GLEW_GET_VAR(__GLEW_ARB_conservative_depth) - -#endif /* GL_ARB_conservative_depth */ - -/* --------------------------- GL_ARB_copy_buffer -------------------------- */ - -#ifndef GL_ARB_copy_buffer -#define GL_ARB_copy_buffer 1 - -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 - -typedef void (GLAPIENTRY * PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readtarget, GLenum writetarget, GLintptr readoffset, GLintptr writeoffset, GLsizeiptr size); - -#define glCopyBufferSubData GLEW_GET_FUN(__glewCopyBufferSubData) - -#define GLEW_ARB_copy_buffer GLEW_GET_VAR(__GLEW_ARB_copy_buffer) - -#endif /* GL_ARB_copy_buffer */ - -/* --------------------------- GL_ARB_copy_image --------------------------- */ - -#ifndef GL_ARB_copy_image -#define GL_ARB_copy_image 1 - -typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); - -#define glCopyImageSubData GLEW_GET_FUN(__glewCopyImageSubData) - -#define GLEW_ARB_copy_image GLEW_GET_VAR(__GLEW_ARB_copy_image) - -#endif /* GL_ARB_copy_image */ - -/* -------------------------- GL_ARB_debug_output -------------------------- */ - -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 - -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 - -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); - -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const GLvoid *userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); -typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); - -#define glDebugMessageCallbackARB GLEW_GET_FUN(__glewDebugMessageCallbackARB) -#define glDebugMessageControlARB GLEW_GET_FUN(__glewDebugMessageControlARB) -#define glDebugMessageInsertARB GLEW_GET_FUN(__glewDebugMessageInsertARB) -#define glGetDebugMessageLogARB GLEW_GET_FUN(__glewGetDebugMessageLogARB) - -#define GLEW_ARB_debug_output GLEW_GET_VAR(__GLEW_ARB_debug_output) - -#endif /* GL_ARB_debug_output */ - -/* ----------------------- GL_ARB_depth_buffer_float ----------------------- */ - -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 - -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD - -#define GLEW_ARB_depth_buffer_float GLEW_GET_VAR(__GLEW_ARB_depth_buffer_float) - -#endif /* GL_ARB_depth_buffer_float */ - -/* --------------------------- GL_ARB_depth_clamp -------------------------- */ - -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 - -#define GL_DEPTH_CLAMP 0x864F - -#define GLEW_ARB_depth_clamp GLEW_GET_VAR(__GLEW_ARB_depth_clamp) - -#endif /* GL_ARB_depth_clamp */ - -/* -------------------------- GL_ARB_depth_texture ------------------------- */ - -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 - -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B - -#define GLEW_ARB_depth_texture GLEW_GET_VAR(__GLEW_ARB_depth_texture) - -#endif /* GL_ARB_depth_texture */ - -/* -------------------------- GL_ARB_draw_buffers -------------------------- */ - -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 - -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 - -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum* bufs); - -#define glDrawBuffersARB GLEW_GET_FUN(__glewDrawBuffersARB) - -#define GLEW_ARB_draw_buffers GLEW_GET_VAR(__GLEW_ARB_draw_buffers) - -#endif /* GL_ARB_draw_buffers */ - -/* ----------------------- GL_ARB_draw_buffers_blend ----------------------- */ - -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -typedef void (GLAPIENTRY * PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); - -#define glBlendEquationSeparateiARB GLEW_GET_FUN(__glewBlendEquationSeparateiARB) -#define glBlendEquationiARB GLEW_GET_FUN(__glewBlendEquationiARB) -#define glBlendFuncSeparateiARB GLEW_GET_FUN(__glewBlendFuncSeparateiARB) -#define glBlendFunciARB GLEW_GET_FUN(__glewBlendFunciARB) - -#define GLEW_ARB_draw_buffers_blend GLEW_GET_VAR(__GLEW_ARB_draw_buffers_blend) - -#endif /* GL_ARB_draw_buffers_blend */ - -/* -------------------- GL_ARB_draw_elements_base_vertex ------------------- */ - -#ifndef GL_ARB_draw_elements_base_vertex -#define GL_ARB_draw_elements_base_vertex 1 - -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei* count, GLenum type, const GLvoid* const *indices, GLsizei primcount, const GLint *basevertex); - -#define glDrawElementsBaseVertex GLEW_GET_FUN(__glewDrawElementsBaseVertex) -#define glDrawElementsInstancedBaseVertex GLEW_GET_FUN(__glewDrawElementsInstancedBaseVertex) -#define glDrawRangeElementsBaseVertex GLEW_GET_FUN(__glewDrawRangeElementsBaseVertex) -#define glMultiDrawElementsBaseVertex GLEW_GET_FUN(__glewMultiDrawElementsBaseVertex) - -#define GLEW_ARB_draw_elements_base_vertex GLEW_GET_VAR(__GLEW_ARB_draw_elements_base_vertex) - -#endif /* GL_ARB_draw_elements_base_vertex */ - -/* -------------------------- GL_ARB_draw_indirect ------------------------- */ - -#ifndef GL_ARB_draw_indirect -#define GL_ARB_draw_indirect 1 - -#define GL_DRAW_INDIRECT_BUFFER 0x8F3F -#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect); - -#define glDrawArraysIndirect GLEW_GET_FUN(__glewDrawArraysIndirect) -#define glDrawElementsIndirect GLEW_GET_FUN(__glewDrawElementsIndirect) - -#define GLEW_ARB_draw_indirect GLEW_GET_VAR(__GLEW_ARB_draw_indirect) - -#endif /* GL_ARB_draw_indirect */ - -/* ------------------------- GL_ARB_draw_instanced ------------------------- */ - -#ifndef GL_ARB_draw_instanced -#define GL_ARB_draw_instanced 1 - -#define GLEW_ARB_draw_instanced GLEW_GET_VAR(__GLEW_ARB_draw_instanced) - -#endif /* GL_ARB_draw_instanced */ - -/* ------------------------ GL_ARB_enhanced_layouts ------------------------ */ - -#ifndef GL_ARB_enhanced_layouts -#define GL_ARB_enhanced_layouts 1 - -#define GL_LOCATION_COMPONENT 0x934A -#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B -#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C - -#define GLEW_ARB_enhanced_layouts GLEW_GET_VAR(__GLEW_ARB_enhanced_layouts) - -#endif /* GL_ARB_enhanced_layouts */ - -/* -------------------- GL_ARB_explicit_attrib_location -------------------- */ - -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 - -#define GLEW_ARB_explicit_attrib_location GLEW_GET_VAR(__GLEW_ARB_explicit_attrib_location) - -#endif /* GL_ARB_explicit_attrib_location */ - -/* -------------------- GL_ARB_explicit_uniform_location ------------------- */ - -#ifndef GL_ARB_explicit_uniform_location -#define GL_ARB_explicit_uniform_location 1 - -#define GL_MAX_UNIFORM_LOCATIONS 0x826E - -#define GLEW_ARB_explicit_uniform_location GLEW_GET_VAR(__GLEW_ARB_explicit_uniform_location) - -#endif /* GL_ARB_explicit_uniform_location */ - -/* ------------------- GL_ARB_fragment_coord_conventions ------------------- */ - -#ifndef GL_ARB_fragment_coord_conventions -#define GL_ARB_fragment_coord_conventions 1 - -#define GLEW_ARB_fragment_coord_conventions GLEW_GET_VAR(__GLEW_ARB_fragment_coord_conventions) - -#endif /* GL_ARB_fragment_coord_conventions */ - -/* --------------------- GL_ARB_fragment_layer_viewport -------------------- */ - -#ifndef GL_ARB_fragment_layer_viewport -#define GL_ARB_fragment_layer_viewport 1 - -#define GLEW_ARB_fragment_layer_viewport GLEW_GET_VAR(__GLEW_ARB_fragment_layer_viewport) - -#endif /* GL_ARB_fragment_layer_viewport */ - -/* ------------------------ GL_ARB_fragment_program ------------------------ */ - -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 - -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 - -#define GLEW_ARB_fragment_program GLEW_GET_VAR(__GLEW_ARB_fragment_program) - -#endif /* GL_ARB_fragment_program */ - -/* --------------------- GL_ARB_fragment_program_shadow -------------------- */ - -#ifndef GL_ARB_fragment_program_shadow -#define GL_ARB_fragment_program_shadow 1 - -#define GLEW_ARB_fragment_program_shadow GLEW_GET_VAR(__GLEW_ARB_fragment_program_shadow) - -#endif /* GL_ARB_fragment_program_shadow */ - -/* ------------------------- GL_ARB_fragment_shader ------------------------ */ - -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 - -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B - -#define GLEW_ARB_fragment_shader GLEW_GET_VAR(__GLEW_ARB_fragment_shader) - -#endif /* GL_ARB_fragment_shader */ - -/* ------------------- GL_ARB_framebuffer_no_attachments ------------------- */ - -#ifndef GL_ARB_framebuffer_no_attachments -#define GL_ARB_framebuffer_no_attachments 1 - -#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 -#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 -#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 -#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 -#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 -#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 -#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 -#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 -#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); - -#define glFramebufferParameteri GLEW_GET_FUN(__glewFramebufferParameteri) -#define glGetFramebufferParameteriv GLEW_GET_FUN(__glewGetFramebufferParameteriv) -#define glGetNamedFramebufferParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferParameterivEXT) -#define glNamedFramebufferParameteriEXT GLEW_GET_FUN(__glewNamedFramebufferParameteriEXT) - -#define GLEW_ARB_framebuffer_no_attachments GLEW_GET_VAR(__GLEW_ARB_framebuffer_no_attachments) - -#endif /* GL_ARB_framebuffer_no_attachments */ - -/* ----------------------- GL_ARB_framebuffer_object ----------------------- */ - -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 - -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_INDEX 0x8222 -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_SRGB 0x8C40 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 - -typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); -typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint layer); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target,GLenum attachment, GLuint texture,GLint level,GLint layer); -typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); -typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glBindFramebuffer GLEW_GET_FUN(__glewBindFramebuffer) -#define glBindRenderbuffer GLEW_GET_FUN(__glewBindRenderbuffer) -#define glBlitFramebuffer GLEW_GET_FUN(__glewBlitFramebuffer) -#define glCheckFramebufferStatus GLEW_GET_FUN(__glewCheckFramebufferStatus) -#define glDeleteFramebuffers GLEW_GET_FUN(__glewDeleteFramebuffers) -#define glDeleteRenderbuffers GLEW_GET_FUN(__glewDeleteRenderbuffers) -#define glFramebufferRenderbuffer GLEW_GET_FUN(__glewFramebufferRenderbuffer) -#define glFramebufferTexture1D GLEW_GET_FUN(__glewFramebufferTexture1D) -#define glFramebufferTexture2D GLEW_GET_FUN(__glewFramebufferTexture2D) -#define glFramebufferTexture3D GLEW_GET_FUN(__glewFramebufferTexture3D) -#define glFramebufferTextureLayer GLEW_GET_FUN(__glewFramebufferTextureLayer) -#define glGenFramebuffers GLEW_GET_FUN(__glewGenFramebuffers) -#define glGenRenderbuffers GLEW_GET_FUN(__glewGenRenderbuffers) -#define glGenerateMipmap GLEW_GET_FUN(__glewGenerateMipmap) -#define glGetFramebufferAttachmentParameteriv GLEW_GET_FUN(__glewGetFramebufferAttachmentParameteriv) -#define glGetRenderbufferParameteriv GLEW_GET_FUN(__glewGetRenderbufferParameteriv) -#define glIsFramebuffer GLEW_GET_FUN(__glewIsFramebuffer) -#define glIsRenderbuffer GLEW_GET_FUN(__glewIsRenderbuffer) -#define glRenderbufferStorage GLEW_GET_FUN(__glewRenderbufferStorage) -#define glRenderbufferStorageMultisample GLEW_GET_FUN(__glewRenderbufferStorageMultisample) - -#define GLEW_ARB_framebuffer_object GLEW_GET_VAR(__GLEW_ARB_framebuffer_object) - -#endif /* GL_ARB_framebuffer_object */ - -/* ------------------------ GL_ARB_framebuffer_sRGB ------------------------ */ - -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 - -#define GL_FRAMEBUFFER_SRGB 0x8DB9 - -#define GLEW_ARB_framebuffer_sRGB GLEW_GET_VAR(__GLEW_ARB_framebuffer_sRGB) - -#endif /* GL_ARB_framebuffer_sRGB */ - -/* ------------------------ GL_ARB_geometry_shader4 ------------------------ */ - -#ifndef GL_ARB_geometry_shader4 -#define GL_ARB_geometry_shader4 1 - -#define GL_LINES_ADJACENCY_ARB 0xA -#define GL_LINE_STRIP_ADJACENCY_ARB 0xB -#define GL_TRIANGLES_ADJACENCY_ARB 0xC -#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0xD -#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 -#define GL_GEOMETRY_SHADER_ARB 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); - -#define glFramebufferTextureARB GLEW_GET_FUN(__glewFramebufferTextureARB) -#define glFramebufferTextureFaceARB GLEW_GET_FUN(__glewFramebufferTextureFaceARB) -#define glFramebufferTextureLayerARB GLEW_GET_FUN(__glewFramebufferTextureLayerARB) -#define glProgramParameteriARB GLEW_GET_FUN(__glewProgramParameteriARB) - -#define GLEW_ARB_geometry_shader4 GLEW_GET_VAR(__GLEW_ARB_geometry_shader4) - -#endif /* GL_ARB_geometry_shader4 */ - -/* ----------------------- GL_ARB_get_program_binary ----------------------- */ - -#ifndef GL_ARB_get_program_binary -#define GL_ARB_get_program_binary 1 - -#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 -#define GL_PROGRAM_BINARY_LENGTH 0x8741 -#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE -#define GL_PROGRAM_BINARY_FORMATS 0x87FF - -typedef void (GLAPIENTRY * PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei* length, GLenum *binaryFormat, GLvoid*binary); -typedef void (GLAPIENTRY * PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const GLvoid *binary, GLsizei length); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); - -#define glGetProgramBinary GLEW_GET_FUN(__glewGetProgramBinary) -#define glProgramBinary GLEW_GET_FUN(__glewProgramBinary) -#define glProgramParameteri GLEW_GET_FUN(__glewProgramParameteri) - -#define GLEW_ARB_get_program_binary GLEW_GET_VAR(__GLEW_ARB_get_program_binary) - -#endif /* GL_ARB_get_program_binary */ - -/* --------------------------- GL_ARB_gpu_shader5 -------------------------- */ - -#ifndef GL_ARB_gpu_shader5 -#define GL_ARB_gpu_shader5 1 - -#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F -#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C -#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D -#define GL_MAX_VERTEX_STREAMS 0x8E71 - -#define GLEW_ARB_gpu_shader5 GLEW_GET_VAR(__GLEW_ARB_gpu_shader5) - -#endif /* GL_ARB_gpu_shader5 */ - -/* ------------------------- GL_ARB_gpu_shader_fp64 ------------------------ */ - -#ifndef GL_ARB_gpu_shader_fp64 -#define GL_ARB_gpu_shader_fp64 1 - -#define GL_DOUBLE_MAT2 0x8F46 -#define GL_DOUBLE_MAT3 0x8F47 -#define GL_DOUBLE_MAT4 0x8F48 -#define GL_DOUBLE_MAT2x3 0x8F49 -#define GL_DOUBLE_MAT2x4 0x8F4A -#define GL_DOUBLE_MAT3x2 0x8F4B -#define GL_DOUBLE_MAT3x4 0x8F4C -#define GL_DOUBLE_MAT4x2 0x8F4D -#define GL_DOUBLE_MAT4x3 0x8F4E -#define GL_DOUBLE_VEC2 0x8FFC -#define GL_DOUBLE_VEC3 0x8FFD -#define GL_DOUBLE_VEC4 0x8FFE - -typedef void (GLAPIENTRY * PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); -typedef void (GLAPIENTRY * PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); - -#define glGetUniformdv GLEW_GET_FUN(__glewGetUniformdv) -#define glUniform1d GLEW_GET_FUN(__glewUniform1d) -#define glUniform1dv GLEW_GET_FUN(__glewUniform1dv) -#define glUniform2d GLEW_GET_FUN(__glewUniform2d) -#define glUniform2dv GLEW_GET_FUN(__glewUniform2dv) -#define glUniform3d GLEW_GET_FUN(__glewUniform3d) -#define glUniform3dv GLEW_GET_FUN(__glewUniform3dv) -#define glUniform4d GLEW_GET_FUN(__glewUniform4d) -#define glUniform4dv GLEW_GET_FUN(__glewUniform4dv) -#define glUniformMatrix2dv GLEW_GET_FUN(__glewUniformMatrix2dv) -#define glUniformMatrix2x3dv GLEW_GET_FUN(__glewUniformMatrix2x3dv) -#define glUniformMatrix2x4dv GLEW_GET_FUN(__glewUniformMatrix2x4dv) -#define glUniformMatrix3dv GLEW_GET_FUN(__glewUniformMatrix3dv) -#define glUniformMatrix3x2dv GLEW_GET_FUN(__glewUniformMatrix3x2dv) -#define glUniformMatrix3x4dv GLEW_GET_FUN(__glewUniformMatrix3x4dv) -#define glUniformMatrix4dv GLEW_GET_FUN(__glewUniformMatrix4dv) -#define glUniformMatrix4x2dv GLEW_GET_FUN(__glewUniformMatrix4x2dv) -#define glUniformMatrix4x3dv GLEW_GET_FUN(__glewUniformMatrix4x3dv) - -#define GLEW_ARB_gpu_shader_fp64 GLEW_GET_VAR(__GLEW_ARB_gpu_shader_fp64) - -#endif /* GL_ARB_gpu_shader_fp64 */ - -/* ------------------------ GL_ARB_half_float_pixel ------------------------ */ - -#ifndef GL_ARB_half_float_pixel -#define GL_ARB_half_float_pixel 1 - -#define GL_HALF_FLOAT_ARB 0x140B - -#define GLEW_ARB_half_float_pixel GLEW_GET_VAR(__GLEW_ARB_half_float_pixel) - -#endif /* GL_ARB_half_float_pixel */ - -/* ------------------------ GL_ARB_half_float_vertex ----------------------- */ - -#ifndef GL_ARB_half_float_vertex -#define GL_ARB_half_float_vertex 1 - -#define GL_HALF_FLOAT 0x140B - -#define GLEW_ARB_half_float_vertex GLEW_GET_VAR(__GLEW_ARB_half_float_vertex) - -#endif /* GL_ARB_half_float_vertex */ - -/* ----------------------------- GL_ARB_imaging ---------------------------- */ - -#ifndef GL_ARB_imaging -#define GL_ARB_imaging 1 - -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BLEND_COLOR 0x8005 -#define GL_FUNC_ADD 0x8006 -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BLEND_EQUATION 0x8009 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_CONVOLUTION_1D 0x8010 -#define GL_CONVOLUTION_2D 0x8011 -#define GL_SEPARABLE_2D 0x8012 -#define GL_CONVOLUTION_BORDER_MODE 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS 0x8015 -#define GL_REDUCE 0x8016 -#define GL_CONVOLUTION_FORMAT 0x8017 -#define GL_CONVOLUTION_WIDTH 0x8018 -#define GL_CONVOLUTION_HEIGHT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 -#define GL_HISTOGRAM 0x8024 -#define GL_PROXY_HISTOGRAM 0x8025 -#define GL_HISTOGRAM_WIDTH 0x8026 -#define GL_HISTOGRAM_FORMAT 0x8027 -#define GL_HISTOGRAM_RED_SIZE 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C -#define GL_HISTOGRAM_SINK 0x802D -#define GL_MINMAX 0x802E -#define GL_MINMAX_FORMAT 0x802F -#define GL_MINMAX_SINK 0x8030 -#define GL_TABLE_TOO_LARGE 0x8031 -#define GL_COLOR_MATRIX 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB -#define GL_COLOR_TABLE 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 -#define GL_PROXY_COLOR_TABLE 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 -#define GL_COLOR_TABLE_SCALE 0x80D6 -#define GL_COLOR_TABLE_BIAS 0x80D7 -#define GL_COLOR_TABLE_FORMAT 0x80D8 -#define GL_COLOR_TABLE_WIDTH 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF -#define GL_IGNORE_BORDER 0x8150 -#define GL_CONSTANT_BORDER 0x8151 -#define GL_WRAP_BORDER 0x8152 -#define GL_REPLICATE_BORDER 0x8153 -#define GL_CONVOLUTION_BORDER_COLOR 0x8154 - -typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (GLAPIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLRESETMINMAXPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); - -#define glColorSubTable GLEW_GET_FUN(__glewColorSubTable) -#define glColorTable GLEW_GET_FUN(__glewColorTable) -#define glColorTableParameterfv GLEW_GET_FUN(__glewColorTableParameterfv) -#define glColorTableParameteriv GLEW_GET_FUN(__glewColorTableParameteriv) -#define glConvolutionFilter1D GLEW_GET_FUN(__glewConvolutionFilter1D) -#define glConvolutionFilter2D GLEW_GET_FUN(__glewConvolutionFilter2D) -#define glConvolutionParameterf GLEW_GET_FUN(__glewConvolutionParameterf) -#define glConvolutionParameterfv GLEW_GET_FUN(__glewConvolutionParameterfv) -#define glConvolutionParameteri GLEW_GET_FUN(__glewConvolutionParameteri) -#define glConvolutionParameteriv GLEW_GET_FUN(__glewConvolutionParameteriv) -#define glCopyColorSubTable GLEW_GET_FUN(__glewCopyColorSubTable) -#define glCopyColorTable GLEW_GET_FUN(__glewCopyColorTable) -#define glCopyConvolutionFilter1D GLEW_GET_FUN(__glewCopyConvolutionFilter1D) -#define glCopyConvolutionFilter2D GLEW_GET_FUN(__glewCopyConvolutionFilter2D) -#define glGetColorTable GLEW_GET_FUN(__glewGetColorTable) -#define glGetColorTableParameterfv GLEW_GET_FUN(__glewGetColorTableParameterfv) -#define glGetColorTableParameteriv GLEW_GET_FUN(__glewGetColorTableParameteriv) -#define glGetConvolutionFilter GLEW_GET_FUN(__glewGetConvolutionFilter) -#define glGetConvolutionParameterfv GLEW_GET_FUN(__glewGetConvolutionParameterfv) -#define glGetConvolutionParameteriv GLEW_GET_FUN(__glewGetConvolutionParameteriv) -#define glGetHistogram GLEW_GET_FUN(__glewGetHistogram) -#define glGetHistogramParameterfv GLEW_GET_FUN(__glewGetHistogramParameterfv) -#define glGetHistogramParameteriv GLEW_GET_FUN(__glewGetHistogramParameteriv) -#define glGetMinmax GLEW_GET_FUN(__glewGetMinmax) -#define glGetMinmaxParameterfv GLEW_GET_FUN(__glewGetMinmaxParameterfv) -#define glGetMinmaxParameteriv GLEW_GET_FUN(__glewGetMinmaxParameteriv) -#define glGetSeparableFilter GLEW_GET_FUN(__glewGetSeparableFilter) -#define glHistogram GLEW_GET_FUN(__glewHistogram) -#define glMinmax GLEW_GET_FUN(__glewMinmax) -#define glResetHistogram GLEW_GET_FUN(__glewResetHistogram) -#define glResetMinmax GLEW_GET_FUN(__glewResetMinmax) -#define glSeparableFilter2D GLEW_GET_FUN(__glewSeparableFilter2D) - -#define GLEW_ARB_imaging GLEW_GET_VAR(__GLEW_ARB_imaging) - -#endif /* GL_ARB_imaging */ - -/* ----------------------- GL_ARB_indirect_parameters ---------------------- */ - -#ifndef GL_ARB_indirect_parameters -#define GL_ARB_indirect_parameters 1 - -#define GL_PARAMETER_BUFFER_ARB 0x80EE -#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); - -#define glMultiDrawArraysIndirectCountARB GLEW_GET_FUN(__glewMultiDrawArraysIndirectCountARB) -#define glMultiDrawElementsIndirectCountARB GLEW_GET_FUN(__glewMultiDrawElementsIndirectCountARB) - -#define GLEW_ARB_indirect_parameters GLEW_GET_VAR(__GLEW_ARB_indirect_parameters) - -#endif /* GL_ARB_indirect_parameters */ - -/* ------------------------ GL_ARB_instanced_arrays ------------------------ */ - -#ifndef GL_ARB_instanced_arrays -#define GL_ARB_instanced_arrays 1 - -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); - -#define glDrawArraysInstancedARB GLEW_GET_FUN(__glewDrawArraysInstancedARB) -#define glDrawElementsInstancedARB GLEW_GET_FUN(__glewDrawElementsInstancedARB) -#define glVertexAttribDivisorARB GLEW_GET_FUN(__glewVertexAttribDivisorARB) - -#define GLEW_ARB_instanced_arrays GLEW_GET_VAR(__GLEW_ARB_instanced_arrays) - -#endif /* GL_ARB_instanced_arrays */ - -/* ---------------------- GL_ARB_internalformat_query ---------------------- */ - -#ifndef GL_ARB_internalformat_query -#define GL_ARB_internalformat_query 1 - -#define GL_NUM_SAMPLE_COUNTS 0x9380 - -typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params); - -#define glGetInternalformativ GLEW_GET_FUN(__glewGetInternalformativ) - -#define GLEW_ARB_internalformat_query GLEW_GET_VAR(__GLEW_ARB_internalformat_query) - -#endif /* GL_ARB_internalformat_query */ - -/* ---------------------- GL_ARB_internalformat_query2 --------------------- */ - -#ifndef GL_ARB_internalformat_query2 -#define GL_ARB_internalformat_query2 1 - -#define GL_INTERNALFORMAT_SUPPORTED 0x826F -#define GL_INTERNALFORMAT_PREFERRED 0x8270 -#define GL_INTERNALFORMAT_RED_SIZE 0x8271 -#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 -#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 -#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 -#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 -#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 -#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 -#define GL_INTERNALFORMAT_RED_TYPE 0x8278 -#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 -#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A -#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B -#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C -#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D -#define GL_MAX_WIDTH 0x827E -#define GL_MAX_HEIGHT 0x827F -#define GL_MAX_DEPTH 0x8280 -#define GL_MAX_LAYERS 0x8281 -#define GL_MAX_COMBINED_DIMENSIONS 0x8282 -#define GL_COLOR_COMPONENTS 0x8283 -#define GL_DEPTH_COMPONENTS 0x8284 -#define GL_STENCIL_COMPONENTS 0x8285 -#define GL_COLOR_RENDERABLE 0x8286 -#define GL_DEPTH_RENDERABLE 0x8287 -#define GL_STENCIL_RENDERABLE 0x8288 -#define GL_FRAMEBUFFER_RENDERABLE 0x8289 -#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A -#define GL_FRAMEBUFFER_BLEND 0x828B -#define GL_READ_PIXELS 0x828C -#define GL_READ_PIXELS_FORMAT 0x828D -#define GL_READ_PIXELS_TYPE 0x828E -#define GL_TEXTURE_IMAGE_FORMAT 0x828F -#define GL_TEXTURE_IMAGE_TYPE 0x8290 -#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 -#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 -#define GL_MIPMAP 0x8293 -#define GL_MANUAL_GENERATE_MIPMAP 0x8294 -#define GL_AUTO_GENERATE_MIPMAP 0x8295 -#define GL_COLOR_ENCODING 0x8296 -#define GL_SRGB_READ 0x8297 -#define GL_SRGB_WRITE 0x8298 -#define GL_SRGB_DECODE_ARB 0x8299 -#define GL_FILTER 0x829A -#define GL_VERTEX_TEXTURE 0x829B -#define GL_TESS_CONTROL_TEXTURE 0x829C -#define GL_TESS_EVALUATION_TEXTURE 0x829D -#define GL_GEOMETRY_TEXTURE 0x829E -#define GL_FRAGMENT_TEXTURE 0x829F -#define GL_COMPUTE_TEXTURE 0x82A0 -#define GL_TEXTURE_SHADOW 0x82A1 -#define GL_TEXTURE_GATHER 0x82A2 -#define GL_TEXTURE_GATHER_SHADOW 0x82A3 -#define GL_SHADER_IMAGE_LOAD 0x82A4 -#define GL_SHADER_IMAGE_STORE 0x82A5 -#define GL_SHADER_IMAGE_ATOMIC 0x82A6 -#define GL_IMAGE_TEXEL_SIZE 0x82A7 -#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 -#define GL_IMAGE_PIXEL_FORMAT 0x82A9 -#define GL_IMAGE_PIXEL_TYPE 0x82AA -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD -#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE -#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF -#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 -#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 -#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 -#define GL_CLEAR_BUFFER 0x82B4 -#define GL_TEXTURE_VIEW 0x82B5 -#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 -#define GL_FULL_SUPPORT 0x82B7 -#define GL_CAVEAT_SUPPORT 0x82B8 -#define GL_IMAGE_CLASS_4_X_32 0x82B9 -#define GL_IMAGE_CLASS_2_X_32 0x82BA -#define GL_IMAGE_CLASS_1_X_32 0x82BB -#define GL_IMAGE_CLASS_4_X_16 0x82BC -#define GL_IMAGE_CLASS_2_X_16 0x82BD -#define GL_IMAGE_CLASS_1_X_16 0x82BE -#define GL_IMAGE_CLASS_4_X_8 0x82BF -#define GL_IMAGE_CLASS_2_X_8 0x82C0 -#define GL_IMAGE_CLASS_1_X_8 0x82C1 -#define GL_IMAGE_CLASS_11_11_10 0x82C2 -#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 -#define GL_VIEW_CLASS_128_BITS 0x82C4 -#define GL_VIEW_CLASS_96_BITS 0x82C5 -#define GL_VIEW_CLASS_64_BITS 0x82C6 -#define GL_VIEW_CLASS_48_BITS 0x82C7 -#define GL_VIEW_CLASS_32_BITS 0x82C8 -#define GL_VIEW_CLASS_24_BITS 0x82C9 -#define GL_VIEW_CLASS_16_BITS 0x82CA -#define GL_VIEW_CLASS_8_BITS 0x82CB -#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC -#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD -#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE -#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF -#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 -#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 -#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 -#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 - -typedef void (GLAPIENTRY * PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint64* params); - -#define glGetInternalformati64v GLEW_GET_FUN(__glewGetInternalformati64v) - -#define GLEW_ARB_internalformat_query2 GLEW_GET_VAR(__GLEW_ARB_internalformat_query2) - -#endif /* GL_ARB_internalformat_query2 */ - -/* ----------------------- GL_ARB_invalidate_subdata ----------------------- */ - -#ifndef GL_ARB_invalidate_subdata -#define GL_ARB_invalidate_subdata 1 - -typedef void (GLAPIENTRY * PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (GLAPIENTRY * PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum* attachments); -typedef void (GLAPIENTRY * PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); - -#define glInvalidateBufferData GLEW_GET_FUN(__glewInvalidateBufferData) -#define glInvalidateBufferSubData GLEW_GET_FUN(__glewInvalidateBufferSubData) -#define glInvalidateFramebuffer GLEW_GET_FUN(__glewInvalidateFramebuffer) -#define glInvalidateSubFramebuffer GLEW_GET_FUN(__glewInvalidateSubFramebuffer) -#define glInvalidateTexImage GLEW_GET_FUN(__glewInvalidateTexImage) -#define glInvalidateTexSubImage GLEW_GET_FUN(__glewInvalidateTexSubImage) - -#define GLEW_ARB_invalidate_subdata GLEW_GET_VAR(__GLEW_ARB_invalidate_subdata) - -#endif /* GL_ARB_invalidate_subdata */ - -/* ---------------------- GL_ARB_map_buffer_alignment ---------------------- */ - -#ifndef GL_ARB_map_buffer_alignment -#define GL_ARB_map_buffer_alignment 1 - -#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC - -#define GLEW_ARB_map_buffer_alignment GLEW_GET_VAR(__GLEW_ARB_map_buffer_alignment) - -#endif /* GL_ARB_map_buffer_alignment */ - -/* ------------------------ GL_ARB_map_buffer_range ------------------------ */ - -#ifndef GL_ARB_map_buffer_range -#define GL_ARB_map_buffer_range 1 - -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 - -typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); - -#define glFlushMappedBufferRange GLEW_GET_FUN(__glewFlushMappedBufferRange) -#define glMapBufferRange GLEW_GET_FUN(__glewMapBufferRange) - -#define GLEW_ARB_map_buffer_range GLEW_GET_VAR(__GLEW_ARB_map_buffer_range) - -#endif /* GL_ARB_map_buffer_range */ - -/* ------------------------- GL_ARB_matrix_palette ------------------------- */ - -#ifndef GL_ARB_matrix_palette -#define GL_ARB_matrix_palette 1 - -#define GL_MATRIX_PALETTE_ARB 0x8840 -#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 -#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 -#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 -#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 -#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 -#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 -#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 -#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 -#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 - -typedef void (GLAPIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, GLubyte *indices); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, GLuint *indices); -typedef void (GLAPIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, GLushort *indices); - -#define glCurrentPaletteMatrixARB GLEW_GET_FUN(__glewCurrentPaletteMatrixARB) -#define glMatrixIndexPointerARB GLEW_GET_FUN(__glewMatrixIndexPointerARB) -#define glMatrixIndexubvARB GLEW_GET_FUN(__glewMatrixIndexubvARB) -#define glMatrixIndexuivARB GLEW_GET_FUN(__glewMatrixIndexuivARB) -#define glMatrixIndexusvARB GLEW_GET_FUN(__glewMatrixIndexusvARB) - -#define GLEW_ARB_matrix_palette GLEW_GET_VAR(__GLEW_ARB_matrix_palette) - -#endif /* GL_ARB_matrix_palette */ - -/* --------------------------- GL_ARB_multi_bind --------------------------- */ - -#ifndef GL_ARB_multi_bind -#define GL_ARB_multi_bind 1 - -typedef void (GLAPIENTRY * PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizeiptr *sizes); -typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint* textures); -typedef void (GLAPIENTRY * PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint* samplers); -typedef void (GLAPIENTRY * PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint* textures); -typedef void (GLAPIENTRY * PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint* buffers, const GLintptr *offsets, const GLsizei *strides); - -#define glBindBuffersBase GLEW_GET_FUN(__glewBindBuffersBase) -#define glBindBuffersRange GLEW_GET_FUN(__glewBindBuffersRange) -#define glBindImageTextures GLEW_GET_FUN(__glewBindImageTextures) -#define glBindSamplers GLEW_GET_FUN(__glewBindSamplers) -#define glBindTextures GLEW_GET_FUN(__glewBindTextures) -#define glBindVertexBuffers GLEW_GET_FUN(__glewBindVertexBuffers) - -#define GLEW_ARB_multi_bind GLEW_GET_VAR(__GLEW_ARB_multi_bind) - -#endif /* GL_ARB_multi_bind */ - -/* ----------------------- GL_ARB_multi_draw_indirect ---------------------- */ - -#ifndef GL_ARB_multi_draw_indirect -#define GL_ARB_multi_draw_indirect 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const GLvoid *indirect, GLsizei primcount, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei primcount, GLsizei stride); - -#define glMultiDrawArraysIndirect GLEW_GET_FUN(__glewMultiDrawArraysIndirect) -#define glMultiDrawElementsIndirect GLEW_GET_FUN(__glewMultiDrawElementsIndirect) - -#define GLEW_ARB_multi_draw_indirect GLEW_GET_VAR(__GLEW_ARB_multi_draw_indirect) - -#endif /* GL_ARB_multi_draw_indirect */ - -/* --------------------------- GL_ARB_multisample -------------------------- */ - -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 - -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 - -typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert); - -#define glSampleCoverageARB GLEW_GET_FUN(__glewSampleCoverageARB) - -#define GLEW_ARB_multisample GLEW_GET_VAR(__GLEW_ARB_multisample) - -#endif /* GL_ARB_multisample */ - -/* -------------------------- GL_ARB_multitexture -------------------------- */ - -#ifndef GL_ARB_multitexture -#define GL_ARB_multitexture 1 - -#define GL_TEXTURE0_ARB 0x84C0 -#define GL_TEXTURE1_ARB 0x84C1 -#define GL_TEXTURE2_ARB 0x84C2 -#define GL_TEXTURE3_ARB 0x84C3 -#define GL_TEXTURE4_ARB 0x84C4 -#define GL_TEXTURE5_ARB 0x84C5 -#define GL_TEXTURE6_ARB 0x84C6 -#define GL_TEXTURE7_ARB 0x84C7 -#define GL_TEXTURE8_ARB 0x84C8 -#define GL_TEXTURE9_ARB 0x84C9 -#define GL_TEXTURE10_ARB 0x84CA -#define GL_TEXTURE11_ARB 0x84CB -#define GL_TEXTURE12_ARB 0x84CC -#define GL_TEXTURE13_ARB 0x84CD -#define GL_TEXTURE14_ARB 0x84CE -#define GL_TEXTURE15_ARB 0x84CF -#define GL_TEXTURE16_ARB 0x84D0 -#define GL_TEXTURE17_ARB 0x84D1 -#define GL_TEXTURE18_ARB 0x84D2 -#define GL_TEXTURE19_ARB 0x84D3 -#define GL_TEXTURE20_ARB 0x84D4 -#define GL_TEXTURE21_ARB 0x84D5 -#define GL_TEXTURE22_ARB 0x84D6 -#define GL_TEXTURE23_ARB 0x84D7 -#define GL_TEXTURE24_ARB 0x84D8 -#define GL_TEXTURE25_ARB 0x84D9 -#define GL_TEXTURE26_ARB 0x84DA -#define GL_TEXTURE27_ARB 0x84DB -#define GL_TEXTURE28_ARB 0x84DC -#define GL_TEXTURE29_ARB 0x84DD -#define GL_TEXTURE30_ARB 0x84DE -#define GL_TEXTURE31_ARB 0x84DF -#define GL_ACTIVE_TEXTURE_ARB 0x84E0 -#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 -#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 - -typedef void (GLAPIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); - -#define glActiveTextureARB GLEW_GET_FUN(__glewActiveTextureARB) -#define glClientActiveTextureARB GLEW_GET_FUN(__glewClientActiveTextureARB) -#define glMultiTexCoord1dARB GLEW_GET_FUN(__glewMultiTexCoord1dARB) -#define glMultiTexCoord1dvARB GLEW_GET_FUN(__glewMultiTexCoord1dvARB) -#define glMultiTexCoord1fARB GLEW_GET_FUN(__glewMultiTexCoord1fARB) -#define glMultiTexCoord1fvARB GLEW_GET_FUN(__glewMultiTexCoord1fvARB) -#define glMultiTexCoord1iARB GLEW_GET_FUN(__glewMultiTexCoord1iARB) -#define glMultiTexCoord1ivARB GLEW_GET_FUN(__glewMultiTexCoord1ivARB) -#define glMultiTexCoord1sARB GLEW_GET_FUN(__glewMultiTexCoord1sARB) -#define glMultiTexCoord1svARB GLEW_GET_FUN(__glewMultiTexCoord1svARB) -#define glMultiTexCoord2dARB GLEW_GET_FUN(__glewMultiTexCoord2dARB) -#define glMultiTexCoord2dvARB GLEW_GET_FUN(__glewMultiTexCoord2dvARB) -#define glMultiTexCoord2fARB GLEW_GET_FUN(__glewMultiTexCoord2fARB) -#define glMultiTexCoord2fvARB GLEW_GET_FUN(__glewMultiTexCoord2fvARB) -#define glMultiTexCoord2iARB GLEW_GET_FUN(__glewMultiTexCoord2iARB) -#define glMultiTexCoord2ivARB GLEW_GET_FUN(__glewMultiTexCoord2ivARB) -#define glMultiTexCoord2sARB GLEW_GET_FUN(__glewMultiTexCoord2sARB) -#define glMultiTexCoord2svARB GLEW_GET_FUN(__glewMultiTexCoord2svARB) -#define glMultiTexCoord3dARB GLEW_GET_FUN(__glewMultiTexCoord3dARB) -#define glMultiTexCoord3dvARB GLEW_GET_FUN(__glewMultiTexCoord3dvARB) -#define glMultiTexCoord3fARB GLEW_GET_FUN(__glewMultiTexCoord3fARB) -#define glMultiTexCoord3fvARB GLEW_GET_FUN(__glewMultiTexCoord3fvARB) -#define glMultiTexCoord3iARB GLEW_GET_FUN(__glewMultiTexCoord3iARB) -#define glMultiTexCoord3ivARB GLEW_GET_FUN(__glewMultiTexCoord3ivARB) -#define glMultiTexCoord3sARB GLEW_GET_FUN(__glewMultiTexCoord3sARB) -#define glMultiTexCoord3svARB GLEW_GET_FUN(__glewMultiTexCoord3svARB) -#define glMultiTexCoord4dARB GLEW_GET_FUN(__glewMultiTexCoord4dARB) -#define glMultiTexCoord4dvARB GLEW_GET_FUN(__glewMultiTexCoord4dvARB) -#define glMultiTexCoord4fARB GLEW_GET_FUN(__glewMultiTexCoord4fARB) -#define glMultiTexCoord4fvARB GLEW_GET_FUN(__glewMultiTexCoord4fvARB) -#define glMultiTexCoord4iARB GLEW_GET_FUN(__glewMultiTexCoord4iARB) -#define glMultiTexCoord4ivARB GLEW_GET_FUN(__glewMultiTexCoord4ivARB) -#define glMultiTexCoord4sARB GLEW_GET_FUN(__glewMultiTexCoord4sARB) -#define glMultiTexCoord4svARB GLEW_GET_FUN(__glewMultiTexCoord4svARB) - -#define GLEW_ARB_multitexture GLEW_GET_VAR(__GLEW_ARB_multitexture) - -#endif /* GL_ARB_multitexture */ - -/* ------------------------- GL_ARB_occlusion_query ------------------------ */ - -#ifndef GL_ARB_occlusion_query -#define GL_ARB_occlusion_query 1 - -#define GL_QUERY_COUNTER_BITS_ARB 0x8864 -#define GL_CURRENT_QUERY_ARB 0x8865 -#define GL_QUERY_RESULT_ARB 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 -#define GL_SAMPLES_PASSED_ARB 0x8914 - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDQUERYARBPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISQUERYARBPROC) (GLuint id); - -#define glBeginQueryARB GLEW_GET_FUN(__glewBeginQueryARB) -#define glDeleteQueriesARB GLEW_GET_FUN(__glewDeleteQueriesARB) -#define glEndQueryARB GLEW_GET_FUN(__glewEndQueryARB) -#define glGenQueriesARB GLEW_GET_FUN(__glewGenQueriesARB) -#define glGetQueryObjectivARB GLEW_GET_FUN(__glewGetQueryObjectivARB) -#define glGetQueryObjectuivARB GLEW_GET_FUN(__glewGetQueryObjectuivARB) -#define glGetQueryivARB GLEW_GET_FUN(__glewGetQueryivARB) -#define glIsQueryARB GLEW_GET_FUN(__glewIsQueryARB) - -#define GLEW_ARB_occlusion_query GLEW_GET_VAR(__GLEW_ARB_occlusion_query) - -#endif /* GL_ARB_occlusion_query */ - -/* ------------------------ GL_ARB_occlusion_query2 ------------------------ */ - -#ifndef GL_ARB_occlusion_query2 -#define GL_ARB_occlusion_query2 1 - -#define GL_ANY_SAMPLES_PASSED 0x8C2F - -#define GLEW_ARB_occlusion_query2 GLEW_GET_VAR(__GLEW_ARB_occlusion_query2) - -#endif /* GL_ARB_occlusion_query2 */ - -/* ----------------------- GL_ARB_pixel_buffer_object ---------------------- */ - -#ifndef GL_ARB_pixel_buffer_object -#define GL_ARB_pixel_buffer_object 1 - -#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF - -#define GLEW_ARB_pixel_buffer_object GLEW_GET_VAR(__GLEW_ARB_pixel_buffer_object) - -#endif /* GL_ARB_pixel_buffer_object */ - -/* ------------------------ GL_ARB_point_parameters ------------------------ */ - -#ifndef GL_ARB_point_parameters -#define GL_ARB_point_parameters 1 - -#define GL_POINT_SIZE_MIN_ARB 0x8126 -#define GL_POINT_SIZE_MAX_ARB 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 -#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 - -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat* params); - -#define glPointParameterfARB GLEW_GET_FUN(__glewPointParameterfARB) -#define glPointParameterfvARB GLEW_GET_FUN(__glewPointParameterfvARB) - -#define GLEW_ARB_point_parameters GLEW_GET_VAR(__GLEW_ARB_point_parameters) - -#endif /* GL_ARB_point_parameters */ - -/* -------------------------- GL_ARB_point_sprite -------------------------- */ - -#ifndef GL_ARB_point_sprite -#define GL_ARB_point_sprite 1 - -#define GL_POINT_SPRITE_ARB 0x8861 -#define GL_COORD_REPLACE_ARB 0x8862 - -#define GLEW_ARB_point_sprite GLEW_GET_VAR(__GLEW_ARB_point_sprite) - -#endif /* GL_ARB_point_sprite */ - -/* --------------------- GL_ARB_program_interface_query -------------------- */ - -#ifndef GL_ARB_program_interface_query -#define GL_ARB_program_interface_query 1 - -#define GL_UNIFORM 0x92E1 -#define GL_UNIFORM_BLOCK 0x92E2 -#define GL_PROGRAM_INPUT 0x92E3 -#define GL_PROGRAM_OUTPUT 0x92E4 -#define GL_BUFFER_VARIABLE 0x92E5 -#define GL_SHADER_STORAGE_BLOCK 0x92E6 -#define GL_IS_PER_PATCH 0x92E7 -#define GL_VERTEX_SUBROUTINE 0x92E8 -#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 -#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA -#define GL_GEOMETRY_SUBROUTINE 0x92EB -#define GL_FRAGMENT_SUBROUTINE 0x92EC -#define GL_COMPUTE_SUBROUTINE 0x92ED -#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE -#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF -#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 -#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 -#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 -#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 -#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 -#define GL_ACTIVE_RESOURCES 0x92F5 -#define GL_MAX_NAME_LENGTH 0x92F6 -#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 -#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 -#define GL_NAME_LENGTH 0x92F9 -#define GL_TYPE 0x92FA -#define GL_ARRAY_SIZE 0x92FB -#define GL_OFFSET 0x92FC -#define GL_BLOCK_INDEX 0x92FD -#define GL_ARRAY_STRIDE 0x92FE -#define GL_MATRIX_STRIDE 0x92FF -#define GL_IS_ROW_MAJOR 0x9300 -#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 -#define GL_BUFFER_BINDING 0x9302 -#define GL_BUFFER_DATA_SIZE 0x9303 -#define GL_NUM_ACTIVE_VARIABLES 0x9304 -#define GL_ACTIVE_VARIABLES 0x9305 -#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 -#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 -#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 -#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 -#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A -#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B -#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C -#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D -#define GL_LOCATION 0x930E -#define GL_LOCATION_INDEX 0x930F - -typedef void (GLAPIENTRY * PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint* params); -typedef GLuint (GLAPIENTRY * PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar* name); -typedef GLint (GLAPIENTRY * PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar* name); -typedef GLint (GLAPIENTRY * PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLint *params); - -#define glGetProgramInterfaceiv GLEW_GET_FUN(__glewGetProgramInterfaceiv) -#define glGetProgramResourceIndex GLEW_GET_FUN(__glewGetProgramResourceIndex) -#define glGetProgramResourceLocation GLEW_GET_FUN(__glewGetProgramResourceLocation) -#define glGetProgramResourceLocationIndex GLEW_GET_FUN(__glewGetProgramResourceLocationIndex) -#define glGetProgramResourceName GLEW_GET_FUN(__glewGetProgramResourceName) -#define glGetProgramResourceiv GLEW_GET_FUN(__glewGetProgramResourceiv) - -#define GLEW_ARB_program_interface_query GLEW_GET_VAR(__GLEW_ARB_program_interface_query) - -#endif /* GL_ARB_program_interface_query */ - -/* ------------------------ GL_ARB_provoking_vertex ------------------------ */ - -#ifndef GL_ARB_provoking_vertex -#define GL_ARB_provoking_vertex 1 - -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F - -typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXPROC) (GLenum mode); - -#define glProvokingVertex GLEW_GET_FUN(__glewProvokingVertex) - -#define GLEW_ARB_provoking_vertex GLEW_GET_VAR(__GLEW_ARB_provoking_vertex) - -#endif /* GL_ARB_provoking_vertex */ - -/* ----------------------- GL_ARB_query_buffer_object ---------------------- */ - -#ifndef GL_ARB_query_buffer_object -#define GL_ARB_query_buffer_object 1 - -#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 -#define GL_QUERY_BUFFER 0x9192 -#define GL_QUERY_BUFFER_BINDING 0x9193 -#define GL_QUERY_RESULT_NO_WAIT 0x9194 - -#define GLEW_ARB_query_buffer_object GLEW_GET_VAR(__GLEW_ARB_query_buffer_object) - -#endif /* GL_ARB_query_buffer_object */ - -/* ------------------ GL_ARB_robust_buffer_access_behavior ----------------- */ - -#ifndef GL_ARB_robust_buffer_access_behavior -#define GL_ARB_robust_buffer_access_behavior 1 - -#define GLEW_ARB_robust_buffer_access_behavior GLEW_GET_VAR(__GLEW_ARB_robust_buffer_access_behavior) - -#endif /* GL_ARB_robust_buffer_access_behavior */ - -/* --------------------------- GL_ARB_robustness --------------------------- */ - -#ifndef GL_ARB_robustness -#define GL_ARB_robustness 1 - -#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 -#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 -#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 -#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 - -typedef GLenum (GLAPIENTRY * PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* table); -typedef void (GLAPIENTRY * PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void* img); -typedef void (GLAPIENTRY * PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void* image); -typedef void (GLAPIENTRY * PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values); -typedef void (GLAPIENTRY * PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble* v); -typedef void (GLAPIENTRY * PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat* v); -typedef void (GLAPIENTRY * PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint* v); -typedef void (GLAPIENTRY * PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void* values); -typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat* values); -typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint* values); -typedef void (GLAPIENTRY * PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort* values); -typedef void (GLAPIENTRY * PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte* pattern); -typedef void (GLAPIENTRY * PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void* row, GLsizei columnBufSize, GLvoid*column, GLvoid*span); -typedef void (GLAPIENTRY * PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* img); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint* params); -typedef void (GLAPIENTRY * PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void* data); - -#define glGetGraphicsResetStatusARB GLEW_GET_FUN(__glewGetGraphicsResetStatusARB) -#define glGetnColorTableARB GLEW_GET_FUN(__glewGetnColorTableARB) -#define glGetnCompressedTexImageARB GLEW_GET_FUN(__glewGetnCompressedTexImageARB) -#define glGetnConvolutionFilterARB GLEW_GET_FUN(__glewGetnConvolutionFilterARB) -#define glGetnHistogramARB GLEW_GET_FUN(__glewGetnHistogramARB) -#define glGetnMapdvARB GLEW_GET_FUN(__glewGetnMapdvARB) -#define glGetnMapfvARB GLEW_GET_FUN(__glewGetnMapfvARB) -#define glGetnMapivARB GLEW_GET_FUN(__glewGetnMapivARB) -#define glGetnMinmaxARB GLEW_GET_FUN(__glewGetnMinmaxARB) -#define glGetnPixelMapfvARB GLEW_GET_FUN(__glewGetnPixelMapfvARB) -#define glGetnPixelMapuivARB GLEW_GET_FUN(__glewGetnPixelMapuivARB) -#define glGetnPixelMapusvARB GLEW_GET_FUN(__glewGetnPixelMapusvARB) -#define glGetnPolygonStippleARB GLEW_GET_FUN(__glewGetnPolygonStippleARB) -#define glGetnSeparableFilterARB GLEW_GET_FUN(__glewGetnSeparableFilterARB) -#define glGetnTexImageARB GLEW_GET_FUN(__glewGetnTexImageARB) -#define glGetnUniformdvARB GLEW_GET_FUN(__glewGetnUniformdvARB) -#define glGetnUniformfvARB GLEW_GET_FUN(__glewGetnUniformfvARB) -#define glGetnUniformivARB GLEW_GET_FUN(__glewGetnUniformivARB) -#define glGetnUniformuivARB GLEW_GET_FUN(__glewGetnUniformuivARB) -#define glReadnPixelsARB GLEW_GET_FUN(__glewReadnPixelsARB) - -#define GLEW_ARB_robustness GLEW_GET_VAR(__GLEW_ARB_robustness) - -#endif /* GL_ARB_robustness */ - -/* ---------------- GL_ARB_robustness_application_isolation ---------------- */ - -#ifndef GL_ARB_robustness_application_isolation -#define GL_ARB_robustness_application_isolation 1 - -#define GLEW_ARB_robustness_application_isolation GLEW_GET_VAR(__GLEW_ARB_robustness_application_isolation) - -#endif /* GL_ARB_robustness_application_isolation */ - -/* ---------------- GL_ARB_robustness_share_group_isolation ---------------- */ - -#ifndef GL_ARB_robustness_share_group_isolation -#define GL_ARB_robustness_share_group_isolation 1 - -#define GLEW_ARB_robustness_share_group_isolation GLEW_GET_VAR(__GLEW_ARB_robustness_share_group_isolation) - -#endif /* GL_ARB_robustness_share_group_isolation */ - -/* ------------------------- GL_ARB_sample_shading ------------------------- */ - -#ifndef GL_ARB_sample_shading -#define GL_ARB_sample_shading 1 - -#define GL_SAMPLE_SHADING_ARB 0x8C36 -#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 - -typedef void (GLAPIENTRY * PFNGLMINSAMPLESHADINGARBPROC) (GLclampf value); - -#define glMinSampleShadingARB GLEW_GET_FUN(__glewMinSampleShadingARB) - -#define GLEW_ARB_sample_shading GLEW_GET_VAR(__GLEW_ARB_sample_shading) - -#endif /* GL_ARB_sample_shading */ - -/* ------------------------- GL_ARB_sampler_objects ------------------------ */ - -#ifndef GL_ARB_sampler_objects -#define GL_ARB_sampler_objects 1 - -#define GL_SAMPLER_BINDING 0x8919 - -typedef void (GLAPIENTRY * PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); -typedef void (GLAPIENTRY * PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint * samplers); -typedef void (GLAPIENTRY * PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint* samplers); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISSAMPLERPROC) (GLuint sampler); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint* params); - -#define glBindSampler GLEW_GET_FUN(__glewBindSampler) -#define glDeleteSamplers GLEW_GET_FUN(__glewDeleteSamplers) -#define glGenSamplers GLEW_GET_FUN(__glewGenSamplers) -#define glGetSamplerParameterIiv GLEW_GET_FUN(__glewGetSamplerParameterIiv) -#define glGetSamplerParameterIuiv GLEW_GET_FUN(__glewGetSamplerParameterIuiv) -#define glGetSamplerParameterfv GLEW_GET_FUN(__glewGetSamplerParameterfv) -#define glGetSamplerParameteriv GLEW_GET_FUN(__glewGetSamplerParameteriv) -#define glIsSampler GLEW_GET_FUN(__glewIsSampler) -#define glSamplerParameterIiv GLEW_GET_FUN(__glewSamplerParameterIiv) -#define glSamplerParameterIuiv GLEW_GET_FUN(__glewSamplerParameterIuiv) -#define glSamplerParameterf GLEW_GET_FUN(__glewSamplerParameterf) -#define glSamplerParameterfv GLEW_GET_FUN(__glewSamplerParameterfv) -#define glSamplerParameteri GLEW_GET_FUN(__glewSamplerParameteri) -#define glSamplerParameteriv GLEW_GET_FUN(__glewSamplerParameteriv) - -#define GLEW_ARB_sampler_objects GLEW_GET_VAR(__GLEW_ARB_sampler_objects) - -#endif /* GL_ARB_sampler_objects */ - -/* ------------------------ GL_ARB_seamless_cube_map ----------------------- */ - -#ifndef GL_ARB_seamless_cube_map -#define GL_ARB_seamless_cube_map 1 - -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F - -#define GLEW_ARB_seamless_cube_map GLEW_GET_VAR(__GLEW_ARB_seamless_cube_map) - -#endif /* GL_ARB_seamless_cube_map */ - -/* ------------------ GL_ARB_seamless_cubemap_per_texture ------------------ */ - -#ifndef GL_ARB_seamless_cubemap_per_texture -#define GL_ARB_seamless_cubemap_per_texture 1 - -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F - -#define GLEW_ARB_seamless_cubemap_per_texture GLEW_GET_VAR(__GLEW_ARB_seamless_cubemap_per_texture) - -#endif /* GL_ARB_seamless_cubemap_per_texture */ - -/* --------------------- GL_ARB_separate_shader_objects -------------------- */ - -#ifndef GL_ARB_separate_shader_objects -#define GL_ARB_separate_shader_objects 1 - -#define GL_VERTEX_SHADER_BIT 0x00000001 -#define GL_FRAGMENT_SHADER_BIT 0x00000002 -#define GL_GEOMETRY_SHADER_BIT 0x00000004 -#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 -#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 -#define GL_PROGRAM_SEPARABLE 0x8258 -#define GL_ACTIVE_PROGRAM 0x8259 -#define GL_PROGRAM_PIPELINE_BINDING 0x825A -#define GL_ALL_SHADER_BITS 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); -typedef void (GLAPIENTRY * PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar ** strings); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint* pipelines); -typedef void (GLAPIENTRY * PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint* pipelines); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei* length, GLchar *infoLog); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint x, GLuint y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint x, GLuint y, GLuint z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); -typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); - -#define glActiveShaderProgram GLEW_GET_FUN(__glewActiveShaderProgram) -#define glBindProgramPipeline GLEW_GET_FUN(__glewBindProgramPipeline) -#define glCreateShaderProgramv GLEW_GET_FUN(__glewCreateShaderProgramv) -#define glDeleteProgramPipelines GLEW_GET_FUN(__glewDeleteProgramPipelines) -#define glGenProgramPipelines GLEW_GET_FUN(__glewGenProgramPipelines) -#define glGetProgramPipelineInfoLog GLEW_GET_FUN(__glewGetProgramPipelineInfoLog) -#define glGetProgramPipelineiv GLEW_GET_FUN(__glewGetProgramPipelineiv) -#define glIsProgramPipeline GLEW_GET_FUN(__glewIsProgramPipeline) -#define glProgramUniform1d GLEW_GET_FUN(__glewProgramUniform1d) -#define glProgramUniform1dv GLEW_GET_FUN(__glewProgramUniform1dv) -#define glProgramUniform1f GLEW_GET_FUN(__glewProgramUniform1f) -#define glProgramUniform1fv GLEW_GET_FUN(__glewProgramUniform1fv) -#define glProgramUniform1i GLEW_GET_FUN(__glewProgramUniform1i) -#define glProgramUniform1iv GLEW_GET_FUN(__glewProgramUniform1iv) -#define glProgramUniform1ui GLEW_GET_FUN(__glewProgramUniform1ui) -#define glProgramUniform1uiv GLEW_GET_FUN(__glewProgramUniform1uiv) -#define glProgramUniform2d GLEW_GET_FUN(__glewProgramUniform2d) -#define glProgramUniform2dv GLEW_GET_FUN(__glewProgramUniform2dv) -#define glProgramUniform2f GLEW_GET_FUN(__glewProgramUniform2f) -#define glProgramUniform2fv GLEW_GET_FUN(__glewProgramUniform2fv) -#define glProgramUniform2i GLEW_GET_FUN(__glewProgramUniform2i) -#define glProgramUniform2iv GLEW_GET_FUN(__glewProgramUniform2iv) -#define glProgramUniform2ui GLEW_GET_FUN(__glewProgramUniform2ui) -#define glProgramUniform2uiv GLEW_GET_FUN(__glewProgramUniform2uiv) -#define glProgramUniform3d GLEW_GET_FUN(__glewProgramUniform3d) -#define glProgramUniform3dv GLEW_GET_FUN(__glewProgramUniform3dv) -#define glProgramUniform3f GLEW_GET_FUN(__glewProgramUniform3f) -#define glProgramUniform3fv GLEW_GET_FUN(__glewProgramUniform3fv) -#define glProgramUniform3i GLEW_GET_FUN(__glewProgramUniform3i) -#define glProgramUniform3iv GLEW_GET_FUN(__glewProgramUniform3iv) -#define glProgramUniform3ui GLEW_GET_FUN(__glewProgramUniform3ui) -#define glProgramUniform3uiv GLEW_GET_FUN(__glewProgramUniform3uiv) -#define glProgramUniform4d GLEW_GET_FUN(__glewProgramUniform4d) -#define glProgramUniform4dv GLEW_GET_FUN(__glewProgramUniform4dv) -#define glProgramUniform4f GLEW_GET_FUN(__glewProgramUniform4f) -#define glProgramUniform4fv GLEW_GET_FUN(__glewProgramUniform4fv) -#define glProgramUniform4i GLEW_GET_FUN(__glewProgramUniform4i) -#define glProgramUniform4iv GLEW_GET_FUN(__glewProgramUniform4iv) -#define glProgramUniform4ui GLEW_GET_FUN(__glewProgramUniform4ui) -#define glProgramUniform4uiv GLEW_GET_FUN(__glewProgramUniform4uiv) -#define glProgramUniformMatrix2dv GLEW_GET_FUN(__glewProgramUniformMatrix2dv) -#define glProgramUniformMatrix2fv GLEW_GET_FUN(__glewProgramUniformMatrix2fv) -#define glProgramUniformMatrix2x3dv GLEW_GET_FUN(__glewProgramUniformMatrix2x3dv) -#define glProgramUniformMatrix2x3fv GLEW_GET_FUN(__glewProgramUniformMatrix2x3fv) -#define glProgramUniformMatrix2x4dv GLEW_GET_FUN(__glewProgramUniformMatrix2x4dv) -#define glProgramUniformMatrix2x4fv GLEW_GET_FUN(__glewProgramUniformMatrix2x4fv) -#define glProgramUniformMatrix3dv GLEW_GET_FUN(__glewProgramUniformMatrix3dv) -#define glProgramUniformMatrix3fv GLEW_GET_FUN(__glewProgramUniformMatrix3fv) -#define glProgramUniformMatrix3x2dv GLEW_GET_FUN(__glewProgramUniformMatrix3x2dv) -#define glProgramUniformMatrix3x2fv GLEW_GET_FUN(__glewProgramUniformMatrix3x2fv) -#define glProgramUniformMatrix3x4dv GLEW_GET_FUN(__glewProgramUniformMatrix3x4dv) -#define glProgramUniformMatrix3x4fv GLEW_GET_FUN(__glewProgramUniformMatrix3x4fv) -#define glProgramUniformMatrix4dv GLEW_GET_FUN(__glewProgramUniformMatrix4dv) -#define glProgramUniformMatrix4fv GLEW_GET_FUN(__glewProgramUniformMatrix4fv) -#define glProgramUniformMatrix4x2dv GLEW_GET_FUN(__glewProgramUniformMatrix4x2dv) -#define glProgramUniformMatrix4x2fv GLEW_GET_FUN(__glewProgramUniformMatrix4x2fv) -#define glProgramUniformMatrix4x3dv GLEW_GET_FUN(__glewProgramUniformMatrix4x3dv) -#define glProgramUniformMatrix4x3fv GLEW_GET_FUN(__glewProgramUniformMatrix4x3fv) -#define glUseProgramStages GLEW_GET_FUN(__glewUseProgramStages) -#define glValidateProgramPipeline GLEW_GET_FUN(__glewValidateProgramPipeline) - -#define GLEW_ARB_separate_shader_objects GLEW_GET_VAR(__GLEW_ARB_separate_shader_objects) - -#endif /* GL_ARB_separate_shader_objects */ - -/* --------------------- GL_ARB_shader_atomic_counters --------------------- */ - -#ifndef GL_ARB_shader_atomic_counters -#define GL_ARB_shader_atomic_counters 1 - -#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 -#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 -#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 -#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 -#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 -#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA -#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB -#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE -#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF -#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 -#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 -#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 -#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 -#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 -#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 -#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 -#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 -#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 -#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 -#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA -#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB -#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC - -typedef void (GLAPIENTRY * PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint* params); - -#define glGetActiveAtomicCounterBufferiv GLEW_GET_FUN(__glewGetActiveAtomicCounterBufferiv) - -#define GLEW_ARB_shader_atomic_counters GLEW_GET_VAR(__GLEW_ARB_shader_atomic_counters) - -#endif /* GL_ARB_shader_atomic_counters */ - -/* ----------------------- GL_ARB_shader_bit_encoding ---------------------- */ - -#ifndef GL_ARB_shader_bit_encoding -#define GL_ARB_shader_bit_encoding 1 - -#define GLEW_ARB_shader_bit_encoding GLEW_GET_VAR(__GLEW_ARB_shader_bit_encoding) - -#endif /* GL_ARB_shader_bit_encoding */ - -/* --------------------- GL_ARB_shader_draw_parameters --------------------- */ - -#ifndef GL_ARB_shader_draw_parameters -#define GL_ARB_shader_draw_parameters 1 - -#define GLEW_ARB_shader_draw_parameters GLEW_GET_VAR(__GLEW_ARB_shader_draw_parameters) - -#endif /* GL_ARB_shader_draw_parameters */ - -/* ------------------------ GL_ARB_shader_group_vote ----------------------- */ - -#ifndef GL_ARB_shader_group_vote -#define GL_ARB_shader_group_vote 1 - -#define GLEW_ARB_shader_group_vote GLEW_GET_VAR(__GLEW_ARB_shader_group_vote) - -#endif /* GL_ARB_shader_group_vote */ - -/* --------------------- GL_ARB_shader_image_load_store -------------------- */ - -#ifndef GL_ARB_shader_image_load_store -#define GL_ARB_shader_image_load_store 1 - -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 -#define GL_COMMAND_BARRIER_BIT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 -#define GL_MAX_IMAGE_UNITS 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 -#define GL_IMAGE_BINDING_NAME 0x8F3A -#define GL_IMAGE_BINDING_LEVEL 0x8F3B -#define GL_IMAGE_BINDING_LAYERED 0x8F3C -#define GL_IMAGE_BINDING_LAYER 0x8F3D -#define GL_IMAGE_BINDING_ACCESS 0x8F3E -#define GL_IMAGE_1D 0x904C -#define GL_IMAGE_2D 0x904D -#define GL_IMAGE_3D 0x904E -#define GL_IMAGE_2D_RECT 0x904F -#define GL_IMAGE_CUBE 0x9050 -#define GL_IMAGE_BUFFER 0x9051 -#define GL_IMAGE_1D_ARRAY 0x9052 -#define GL_IMAGE_2D_ARRAY 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 -#define GL_INT_IMAGE_1D 0x9057 -#define GL_INT_IMAGE_2D 0x9058 -#define GL_INT_IMAGE_3D 0x9059 -#define GL_INT_IMAGE_2D_RECT 0x905A -#define GL_INT_IMAGE_CUBE 0x905B -#define GL_INT_IMAGE_BUFFER 0x905C -#define GL_INT_IMAGE_1D_ARRAY 0x905D -#define GL_INT_IMAGE_2D_ARRAY 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C -#define GL_MAX_IMAGE_SAMPLES 0x906D -#define GL_IMAGE_BINDING_FORMAT 0x906E -#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 -#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 -#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA -#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB -#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC -#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD -#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE -#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF -#define GL_ALL_BARRIER_BITS 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); -typedef void (GLAPIENTRY * PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); - -#define glBindImageTexture GLEW_GET_FUN(__glewBindImageTexture) -#define glMemoryBarrier GLEW_GET_FUN(__glewMemoryBarrier) - -#define GLEW_ARB_shader_image_load_store GLEW_GET_VAR(__GLEW_ARB_shader_image_load_store) - -#endif /* GL_ARB_shader_image_load_store */ - -/* ------------------------ GL_ARB_shader_image_size ----------------------- */ - -#ifndef GL_ARB_shader_image_size -#define GL_ARB_shader_image_size 1 - -#define GLEW_ARB_shader_image_size GLEW_GET_VAR(__GLEW_ARB_shader_image_size) - -#endif /* GL_ARB_shader_image_size */ - -/* ------------------------- GL_ARB_shader_objects ------------------------- */ - -#ifndef GL_ARB_shader_objects -#define GL_ARB_shader_objects 1 - -#define GL_PROGRAM_OBJECT_ARB 0x8B40 -#define GL_SHADER_OBJECT_ARB 0x8B48 -#define GL_OBJECT_TYPE_ARB 0x8B4E -#define GL_OBJECT_SUBTYPE_ARB 0x8B4F -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_INT_VEC2_ARB 0x8B53 -#define GL_INT_VEC3_ARB 0x8B54 -#define GL_INT_VEC4_ARB 0x8B55 -#define GL_BOOL_ARB 0x8B56 -#define GL_BOOL_VEC2_ARB 0x8B57 -#define GL_BOOL_VEC3_ARB 0x8B58 -#define GL_BOOL_VEC4_ARB 0x8B59 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_SAMPLER_1D_ARB 0x8B5D -#define GL_SAMPLER_2D_ARB 0x8B5E -#define GL_SAMPLER_3D_ARB 0x8B5F -#define GL_SAMPLER_CUBE_ARB 0x8B60 -#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 -#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 -#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 -#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 -#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 -#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 -#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 -#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 -#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 -#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 -#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 - -typedef char GLcharARB; -typedef unsigned int GLhandleARB; - -typedef void (GLAPIENTRY * PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); -typedef void (GLAPIENTRY * PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); -typedef GLhandleARB (GLAPIENTRY * PFNGLCREATEPROGRAMOBJECTARBPROC) (void); -typedef GLhandleARB (GLAPIENTRY * PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); -typedef void (GLAPIENTRY * PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); -typedef void (GLAPIENTRY * PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); -typedef void (GLAPIENTRY * PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei* count, GLhandleARB *obj); -typedef GLhandleARB (GLAPIENTRY * PFNGLGETHANDLEARBPROC) (GLenum pname); -typedef void (GLAPIENTRY * PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *infoLog); -typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei* length, GLcharARB *source); -typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint* params); -typedef void (GLAPIENTRY * PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); -typedef void (GLAPIENTRY * PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB ** string, const GLint *length); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); -typedef void (GLAPIENTRY * PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); - -#define glAttachObjectARB GLEW_GET_FUN(__glewAttachObjectARB) -#define glCompileShaderARB GLEW_GET_FUN(__glewCompileShaderARB) -#define glCreateProgramObjectARB GLEW_GET_FUN(__glewCreateProgramObjectARB) -#define glCreateShaderObjectARB GLEW_GET_FUN(__glewCreateShaderObjectARB) -#define glDeleteObjectARB GLEW_GET_FUN(__glewDeleteObjectARB) -#define glDetachObjectARB GLEW_GET_FUN(__glewDetachObjectARB) -#define glGetActiveUniformARB GLEW_GET_FUN(__glewGetActiveUniformARB) -#define glGetAttachedObjectsARB GLEW_GET_FUN(__glewGetAttachedObjectsARB) -#define glGetHandleARB GLEW_GET_FUN(__glewGetHandleARB) -#define glGetInfoLogARB GLEW_GET_FUN(__glewGetInfoLogARB) -#define glGetObjectParameterfvARB GLEW_GET_FUN(__glewGetObjectParameterfvARB) -#define glGetObjectParameterivARB GLEW_GET_FUN(__glewGetObjectParameterivARB) -#define glGetShaderSourceARB GLEW_GET_FUN(__glewGetShaderSourceARB) -#define glGetUniformLocationARB GLEW_GET_FUN(__glewGetUniformLocationARB) -#define glGetUniformfvARB GLEW_GET_FUN(__glewGetUniformfvARB) -#define glGetUniformivARB GLEW_GET_FUN(__glewGetUniformivARB) -#define glLinkProgramARB GLEW_GET_FUN(__glewLinkProgramARB) -#define glShaderSourceARB GLEW_GET_FUN(__glewShaderSourceARB) -#define glUniform1fARB GLEW_GET_FUN(__glewUniform1fARB) -#define glUniform1fvARB GLEW_GET_FUN(__glewUniform1fvARB) -#define glUniform1iARB GLEW_GET_FUN(__glewUniform1iARB) -#define glUniform1ivARB GLEW_GET_FUN(__glewUniform1ivARB) -#define glUniform2fARB GLEW_GET_FUN(__glewUniform2fARB) -#define glUniform2fvARB GLEW_GET_FUN(__glewUniform2fvARB) -#define glUniform2iARB GLEW_GET_FUN(__glewUniform2iARB) -#define glUniform2ivARB GLEW_GET_FUN(__glewUniform2ivARB) -#define glUniform3fARB GLEW_GET_FUN(__glewUniform3fARB) -#define glUniform3fvARB GLEW_GET_FUN(__glewUniform3fvARB) -#define glUniform3iARB GLEW_GET_FUN(__glewUniform3iARB) -#define glUniform3ivARB GLEW_GET_FUN(__glewUniform3ivARB) -#define glUniform4fARB GLEW_GET_FUN(__glewUniform4fARB) -#define glUniform4fvARB GLEW_GET_FUN(__glewUniform4fvARB) -#define glUniform4iARB GLEW_GET_FUN(__glewUniform4iARB) -#define glUniform4ivARB GLEW_GET_FUN(__glewUniform4ivARB) -#define glUniformMatrix2fvARB GLEW_GET_FUN(__glewUniformMatrix2fvARB) -#define glUniformMatrix3fvARB GLEW_GET_FUN(__glewUniformMatrix3fvARB) -#define glUniformMatrix4fvARB GLEW_GET_FUN(__glewUniformMatrix4fvARB) -#define glUseProgramObjectARB GLEW_GET_FUN(__glewUseProgramObjectARB) -#define glValidateProgramARB GLEW_GET_FUN(__glewValidateProgramARB) - -#define GLEW_ARB_shader_objects GLEW_GET_VAR(__GLEW_ARB_shader_objects) - -#endif /* GL_ARB_shader_objects */ - -/* ------------------------ GL_ARB_shader_precision ------------------------ */ - -#ifndef GL_ARB_shader_precision -#define GL_ARB_shader_precision 1 - -#define GLEW_ARB_shader_precision GLEW_GET_VAR(__GLEW_ARB_shader_precision) - -#endif /* GL_ARB_shader_precision */ - -/* ---------------------- GL_ARB_shader_stencil_export --------------------- */ - -#ifndef GL_ARB_shader_stencil_export -#define GL_ARB_shader_stencil_export 1 - -#define GLEW_ARB_shader_stencil_export GLEW_GET_VAR(__GLEW_ARB_shader_stencil_export) - -#endif /* GL_ARB_shader_stencil_export */ - -/* ------------------ GL_ARB_shader_storage_buffer_object ------------------ */ - -#ifndef GL_ARB_shader_storage_buffer_object -#define GL_ARB_shader_storage_buffer_object 1 - -#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000 -#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 -#define GL_SHADER_STORAGE_BUFFER 0x90D2 -#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 -#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 -#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 -#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 -#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 -#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 -#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 -#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA -#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB -#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC -#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD -#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE -#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF - -typedef void (GLAPIENTRY * PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); - -#define glShaderStorageBlockBinding GLEW_GET_FUN(__glewShaderStorageBlockBinding) - -#define GLEW_ARB_shader_storage_buffer_object GLEW_GET_VAR(__GLEW_ARB_shader_storage_buffer_object) - -#endif /* GL_ARB_shader_storage_buffer_object */ - -/* ------------------------ GL_ARB_shader_subroutine ----------------------- */ - -#ifndef GL_ARB_shader_subroutine -#define GL_ARB_shader_subroutine 1 - -#define GL_ACTIVE_SUBROUTINES 0x8DE5 -#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 -#define GL_MAX_SUBROUTINES 0x8DE7 -#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 -#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 -#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 -#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A -#define GL_COMPATIBLE_SUBROUTINES 0x8E4B - -typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufsize, GLsizei* length, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint* values); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint* values); -typedef GLuint (GLAPIENTRY * PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar* name); -typedef GLint (GLAPIENTRY * PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint* params); -typedef void (GLAPIENTRY * PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint* indices); - -#define glGetActiveSubroutineName GLEW_GET_FUN(__glewGetActiveSubroutineName) -#define glGetActiveSubroutineUniformName GLEW_GET_FUN(__glewGetActiveSubroutineUniformName) -#define glGetActiveSubroutineUniformiv GLEW_GET_FUN(__glewGetActiveSubroutineUniformiv) -#define glGetProgramStageiv GLEW_GET_FUN(__glewGetProgramStageiv) -#define glGetSubroutineIndex GLEW_GET_FUN(__glewGetSubroutineIndex) -#define glGetSubroutineUniformLocation GLEW_GET_FUN(__glewGetSubroutineUniformLocation) -#define glGetUniformSubroutineuiv GLEW_GET_FUN(__glewGetUniformSubroutineuiv) -#define glUniformSubroutinesuiv GLEW_GET_FUN(__glewUniformSubroutinesuiv) - -#define GLEW_ARB_shader_subroutine GLEW_GET_VAR(__GLEW_ARB_shader_subroutine) - -#endif /* GL_ARB_shader_subroutine */ - -/* ----------------------- GL_ARB_shader_texture_lod ----------------------- */ - -#ifndef GL_ARB_shader_texture_lod -#define GL_ARB_shader_texture_lod 1 - -#define GLEW_ARB_shader_texture_lod GLEW_GET_VAR(__GLEW_ARB_shader_texture_lod) - -#endif /* GL_ARB_shader_texture_lod */ - -/* ---------------------- GL_ARB_shading_language_100 ---------------------- */ - -#ifndef GL_ARB_shading_language_100 -#define GL_ARB_shading_language_100 1 - -#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C - -#define GLEW_ARB_shading_language_100 GLEW_GET_VAR(__GLEW_ARB_shading_language_100) - -#endif /* GL_ARB_shading_language_100 */ - -/* -------------------- GL_ARB_shading_language_420pack -------------------- */ - -#ifndef GL_ARB_shading_language_420pack -#define GL_ARB_shading_language_420pack 1 - -#define GLEW_ARB_shading_language_420pack GLEW_GET_VAR(__GLEW_ARB_shading_language_420pack) - -#endif /* GL_ARB_shading_language_420pack */ - -/* -------------------- GL_ARB_shading_language_include -------------------- */ - -#ifndef GL_ARB_shading_language_include -#define GL_ARB_shading_language_include 1 - -#define GL_SHADER_INCLUDE_ARB 0x8DAE -#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 -#define GL_NAMED_STRING_TYPE_ARB 0x8DEA - -typedef void (GLAPIENTRY * PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar* const *path, const GLint *length); -typedef void (GLAPIENTRY * PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name, GLsizei bufSize, GLint *stringlen, GLchar *string); -typedef void (GLAPIENTRY * PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar* name, GLenum pname, GLint *params); -typedef GLboolean (GLAPIENTRY * PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar* name); -typedef void (GLAPIENTRY * PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar* name, GLint stringlen, const GLchar *string); - -#define glCompileShaderIncludeARB GLEW_GET_FUN(__glewCompileShaderIncludeARB) -#define glDeleteNamedStringARB GLEW_GET_FUN(__glewDeleteNamedStringARB) -#define glGetNamedStringARB GLEW_GET_FUN(__glewGetNamedStringARB) -#define glGetNamedStringivARB GLEW_GET_FUN(__glewGetNamedStringivARB) -#define glIsNamedStringARB GLEW_GET_FUN(__glewIsNamedStringARB) -#define glNamedStringARB GLEW_GET_FUN(__glewNamedStringARB) - -#define GLEW_ARB_shading_language_include GLEW_GET_VAR(__GLEW_ARB_shading_language_include) - -#endif /* GL_ARB_shading_language_include */ - -/* -------------------- GL_ARB_shading_language_packing -------------------- */ - -#ifndef GL_ARB_shading_language_packing -#define GL_ARB_shading_language_packing 1 - -#define GLEW_ARB_shading_language_packing GLEW_GET_VAR(__GLEW_ARB_shading_language_packing) - -#endif /* GL_ARB_shading_language_packing */ - -/* ----------------------------- GL_ARB_shadow ----------------------------- */ - -#ifndef GL_ARB_shadow -#define GL_ARB_shadow 1 - -#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C -#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D -#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E - -#define GLEW_ARB_shadow GLEW_GET_VAR(__GLEW_ARB_shadow) - -#endif /* GL_ARB_shadow */ - -/* ------------------------- GL_ARB_shadow_ambient ------------------------- */ - -#ifndef GL_ARB_shadow_ambient -#define GL_ARB_shadow_ambient 1 - -#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF - -#define GLEW_ARB_shadow_ambient GLEW_GET_VAR(__GLEW_ARB_shadow_ambient) - -#endif /* GL_ARB_shadow_ambient */ - -/* ------------------------- GL_ARB_sparse_texture ------------------------- */ - -#ifndef GL_ARB_sparse_texture -#define GL_ARB_sparse_texture 1 - -#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 -#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 -#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 -#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 -#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 -#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A -#define GL_TEXTURE_SPARSE_ARB 0x91A6 -#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 -#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 -#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 -#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA - -typedef void (GLAPIENTRY * PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); -typedef void (GLAPIENTRY * PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); - -#define glTexPageCommitmentARB GLEW_GET_FUN(__glewTexPageCommitmentARB) -#define glTexturePageCommitmentEXT GLEW_GET_FUN(__glewTexturePageCommitmentEXT) - -#define GLEW_ARB_sparse_texture GLEW_GET_VAR(__GLEW_ARB_sparse_texture) - -#endif /* GL_ARB_sparse_texture */ - -/* ------------------------ GL_ARB_stencil_texturing ----------------------- */ - -#ifndef GL_ARB_stencil_texturing -#define GL_ARB_stencil_texturing 1 - -#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA - -#define GLEW_ARB_stencil_texturing GLEW_GET_VAR(__GLEW_ARB_stencil_texturing) - -#endif /* GL_ARB_stencil_texturing */ - -/* ------------------------------ GL_ARB_sync ------------------------------ */ - -#ifndef GL_ARB_sync -#define GL_ARB_sync 1 - -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF - -typedef GLenum (GLAPIENTRY * PFNGLCLIENTWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout); -typedef void (GLAPIENTRY * PFNGLDELETESYNCPROC) (GLsync GLsync); -typedef GLsync (GLAPIENTRY * PFNGLFENCESYNCPROC) (GLenum condition,GLbitfield flags); -typedef void (GLAPIENTRY * PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64* params); -typedef void (GLAPIENTRY * PFNGLGETSYNCIVPROC) (GLsync GLsync,GLenum pname,GLsizei bufSize,GLsizei* length, GLint *values); -typedef GLboolean (GLAPIENTRY * PFNGLISSYNCPROC) (GLsync GLsync); -typedef void (GLAPIENTRY * PFNGLWAITSYNCPROC) (GLsync GLsync,GLbitfield flags,GLuint64 timeout); - -#define glClientWaitSync GLEW_GET_FUN(__glewClientWaitSync) -#define glDeleteSync GLEW_GET_FUN(__glewDeleteSync) -#define glFenceSync GLEW_GET_FUN(__glewFenceSync) -#define glGetInteger64v GLEW_GET_FUN(__glewGetInteger64v) -#define glGetSynciv GLEW_GET_FUN(__glewGetSynciv) -#define glIsSync GLEW_GET_FUN(__glewIsSync) -#define glWaitSync GLEW_GET_FUN(__glewWaitSync) - -#define GLEW_ARB_sync GLEW_GET_VAR(__GLEW_ARB_sync) - -#endif /* GL_ARB_sync */ - -/* ----------------------- GL_ARB_tessellation_shader ---------------------- */ - -#ifndef GL_ARB_tessellation_shader -#define GL_ARB_tessellation_shader 1 - -#define GL_PATCHES 0xE -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 -#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C -#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D -#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E -#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F -#define GL_PATCH_VERTICES 0x8E72 -#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 -#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 -#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 -#define GL_TESS_GEN_MODE 0x8E76 -#define GL_TESS_GEN_SPACING 0x8E77 -#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 -#define GL_TESS_GEN_POINT_MODE 0x8E79 -#define GL_ISOLINES 0x8E7A -#define GL_FRACTIONAL_ODD 0x8E7B -#define GL_FRACTIONAL_EVEN 0x8E7C -#define GL_MAX_PATCH_VERTICES 0x8E7D -#define GL_MAX_TESS_GEN_LEVEL 0x8E7E -#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F -#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 -#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 -#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 -#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 -#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 -#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 -#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 -#define GL_TESS_EVALUATION_SHADER 0x8E87 -#define GL_TESS_CONTROL_SHADER 0x8E88 -#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 -#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A - -typedef void (GLAPIENTRY * PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat* values); -typedef void (GLAPIENTRY * PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); - -#define glPatchParameterfv GLEW_GET_FUN(__glewPatchParameterfv) -#define glPatchParameteri GLEW_GET_FUN(__glewPatchParameteri) - -#define GLEW_ARB_tessellation_shader GLEW_GET_VAR(__GLEW_ARB_tessellation_shader) - -#endif /* GL_ARB_tessellation_shader */ - -/* ---------------------- GL_ARB_texture_border_clamp ---------------------- */ - -#ifndef GL_ARB_texture_border_clamp -#define GL_ARB_texture_border_clamp 1 - -#define GL_CLAMP_TO_BORDER_ARB 0x812D - -#define GLEW_ARB_texture_border_clamp GLEW_GET_VAR(__GLEW_ARB_texture_border_clamp) - -#endif /* GL_ARB_texture_border_clamp */ - -/* ---------------------- GL_ARB_texture_buffer_object --------------------- */ - -#ifndef GL_ARB_texture_buffer_object -#define GL_ARB_texture_buffer_object 1 - -#define GL_TEXTURE_BUFFER_ARB 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E - -typedef void (GLAPIENTRY * PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); - -#define glTexBufferARB GLEW_GET_FUN(__glewTexBufferARB) - -#define GLEW_ARB_texture_buffer_object GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object) - -#endif /* GL_ARB_texture_buffer_object */ - -/* ------------------- GL_ARB_texture_buffer_object_rgb32 ------------------ */ - -#ifndef GL_ARB_texture_buffer_object_rgb32 -#define GL_ARB_texture_buffer_object_rgb32 1 - -#define GLEW_ARB_texture_buffer_object_rgb32 GLEW_GET_VAR(__GLEW_ARB_texture_buffer_object_rgb32) - -#endif /* GL_ARB_texture_buffer_object_rgb32 */ - -/* ---------------------- GL_ARB_texture_buffer_range ---------------------- */ - -#ifndef GL_ARB_texture_buffer_range -#define GL_ARB_texture_buffer_range 1 - -#define GL_TEXTURE_BUFFER_OFFSET 0x919D -#define GL_TEXTURE_BUFFER_SIZE 0x919E -#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F - -typedef void (GLAPIENTRY * PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); - -#define glTexBufferRange GLEW_GET_FUN(__glewTexBufferRange) -#define glTextureBufferRangeEXT GLEW_GET_FUN(__glewTextureBufferRangeEXT) - -#define GLEW_ARB_texture_buffer_range GLEW_GET_VAR(__GLEW_ARB_texture_buffer_range) - -#endif /* GL_ARB_texture_buffer_range */ - -/* ----------------------- GL_ARB_texture_compression ---------------------- */ - -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 - -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 - -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLvoid *img); - -#define glCompressedTexImage1DARB GLEW_GET_FUN(__glewCompressedTexImage1DARB) -#define glCompressedTexImage2DARB GLEW_GET_FUN(__glewCompressedTexImage2DARB) -#define glCompressedTexImage3DARB GLEW_GET_FUN(__glewCompressedTexImage3DARB) -#define glCompressedTexSubImage1DARB GLEW_GET_FUN(__glewCompressedTexSubImage1DARB) -#define glCompressedTexSubImage2DARB GLEW_GET_FUN(__glewCompressedTexSubImage2DARB) -#define glCompressedTexSubImage3DARB GLEW_GET_FUN(__glewCompressedTexSubImage3DARB) -#define glGetCompressedTexImageARB GLEW_GET_FUN(__glewGetCompressedTexImageARB) - -#define GLEW_ARB_texture_compression GLEW_GET_VAR(__GLEW_ARB_texture_compression) - -#endif /* GL_ARB_texture_compression */ - -/* -------------------- GL_ARB_texture_compression_bptc -------------------- */ - -#ifndef GL_ARB_texture_compression_bptc -#define GL_ARB_texture_compression_bptc 1 - -#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C -#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D -#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E -#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F - -#define GLEW_ARB_texture_compression_bptc GLEW_GET_VAR(__GLEW_ARB_texture_compression_bptc) - -#endif /* GL_ARB_texture_compression_bptc */ - -/* -------------------- GL_ARB_texture_compression_rgtc -------------------- */ - -#ifndef GL_ARB_texture_compression_rgtc -#define GL_ARB_texture_compression_rgtc 1 - -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE - -#define GLEW_ARB_texture_compression_rgtc GLEW_GET_VAR(__GLEW_ARB_texture_compression_rgtc) - -#endif /* GL_ARB_texture_compression_rgtc */ - -/* ------------------------ GL_ARB_texture_cube_map ------------------------ */ - -#ifndef GL_ARB_texture_cube_map -#define GL_ARB_texture_cube_map 1 - -#define GL_NORMAL_MAP_ARB 0x8511 -#define GL_REFLECTION_MAP_ARB 0x8512 -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C - -#define GLEW_ARB_texture_cube_map GLEW_GET_VAR(__GLEW_ARB_texture_cube_map) - -#endif /* GL_ARB_texture_cube_map */ - -/* --------------------- GL_ARB_texture_cube_map_array --------------------- */ - -#ifndef GL_ARB_texture_cube_map_array -#define GL_ARB_texture_cube_map_array 1 - -#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 -#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A -#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B -#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C -#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D -#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E -#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F - -#define GLEW_ARB_texture_cube_map_array GLEW_GET_VAR(__GLEW_ARB_texture_cube_map_array) - -#endif /* GL_ARB_texture_cube_map_array */ - -/* ------------------------- GL_ARB_texture_env_add ------------------------ */ - -#ifndef GL_ARB_texture_env_add -#define GL_ARB_texture_env_add 1 - -#define GLEW_ARB_texture_env_add GLEW_GET_VAR(__GLEW_ARB_texture_env_add) - -#endif /* GL_ARB_texture_env_add */ - -/* ----------------------- GL_ARB_texture_env_combine ---------------------- */ - -#ifndef GL_ARB_texture_env_combine -#define GL_ARB_texture_env_combine 1 - -#define GL_SUBTRACT_ARB 0x84E7 -#define GL_COMBINE_ARB 0x8570 -#define GL_COMBINE_RGB_ARB 0x8571 -#define GL_COMBINE_ALPHA_ARB 0x8572 -#define GL_RGB_SCALE_ARB 0x8573 -#define GL_ADD_SIGNED_ARB 0x8574 -#define GL_INTERPOLATE_ARB 0x8575 -#define GL_CONSTANT_ARB 0x8576 -#define GL_PRIMARY_COLOR_ARB 0x8577 -#define GL_PREVIOUS_ARB 0x8578 -#define GL_SOURCE0_RGB_ARB 0x8580 -#define GL_SOURCE1_RGB_ARB 0x8581 -#define GL_SOURCE2_RGB_ARB 0x8582 -#define GL_SOURCE0_ALPHA_ARB 0x8588 -#define GL_SOURCE1_ALPHA_ARB 0x8589 -#define GL_SOURCE2_ALPHA_ARB 0x858A -#define GL_OPERAND0_RGB_ARB 0x8590 -#define GL_OPERAND1_RGB_ARB 0x8591 -#define GL_OPERAND2_RGB_ARB 0x8592 -#define GL_OPERAND0_ALPHA_ARB 0x8598 -#define GL_OPERAND1_ALPHA_ARB 0x8599 -#define GL_OPERAND2_ALPHA_ARB 0x859A - -#define GLEW_ARB_texture_env_combine GLEW_GET_VAR(__GLEW_ARB_texture_env_combine) - -#endif /* GL_ARB_texture_env_combine */ - -/* ---------------------- GL_ARB_texture_env_crossbar ---------------------- */ - -#ifndef GL_ARB_texture_env_crossbar -#define GL_ARB_texture_env_crossbar 1 - -#define GLEW_ARB_texture_env_crossbar GLEW_GET_VAR(__GLEW_ARB_texture_env_crossbar) - -#endif /* GL_ARB_texture_env_crossbar */ - -/* ------------------------ GL_ARB_texture_env_dot3 ------------------------ */ - -#ifndef GL_ARB_texture_env_dot3 -#define GL_ARB_texture_env_dot3 1 - -#define GL_DOT3_RGB_ARB 0x86AE -#define GL_DOT3_RGBA_ARB 0x86AF - -#define GLEW_ARB_texture_env_dot3 GLEW_GET_VAR(__GLEW_ARB_texture_env_dot3) - -#endif /* GL_ARB_texture_env_dot3 */ - -/* -------------------------- GL_ARB_texture_float ------------------------- */ - -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 - -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 - -#define GLEW_ARB_texture_float GLEW_GET_VAR(__GLEW_ARB_texture_float) - -#endif /* GL_ARB_texture_float */ - -/* ------------------------- GL_ARB_texture_gather ------------------------- */ - -#ifndef GL_ARB_texture_gather -#define GL_ARB_texture_gather 1 - -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F -#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F - -#define GLEW_ARB_texture_gather GLEW_GET_VAR(__GLEW_ARB_texture_gather) - -#endif /* GL_ARB_texture_gather */ - -/* ------------------ GL_ARB_texture_mirror_clamp_to_edge ------------------ */ - -#ifndef GL_ARB_texture_mirror_clamp_to_edge -#define GL_ARB_texture_mirror_clamp_to_edge 1 - -#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 - -#define GLEW_ARB_texture_mirror_clamp_to_edge GLEW_GET_VAR(__GLEW_ARB_texture_mirror_clamp_to_edge) - -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ - -/* --------------------- GL_ARB_texture_mirrored_repeat -------------------- */ - -#ifndef GL_ARB_texture_mirrored_repeat -#define GL_ARB_texture_mirrored_repeat 1 - -#define GL_MIRRORED_REPEAT_ARB 0x8370 - -#define GLEW_ARB_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_ARB_texture_mirrored_repeat) - -#endif /* GL_ARB_texture_mirrored_repeat */ - -/* ----------------------- GL_ARB_texture_multisample ---------------------- */ - -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 - -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 - -typedef void (GLAPIENTRY * PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat* val); -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKIPROC) (GLuint index, GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); - -#define glGetMultisamplefv GLEW_GET_FUN(__glewGetMultisamplefv) -#define glSampleMaski GLEW_GET_FUN(__glewSampleMaski) -#define glTexImage2DMultisample GLEW_GET_FUN(__glewTexImage2DMultisample) -#define glTexImage3DMultisample GLEW_GET_FUN(__glewTexImage3DMultisample) - -#define GLEW_ARB_texture_multisample GLEW_GET_VAR(__GLEW_ARB_texture_multisample) - -#endif /* GL_ARB_texture_multisample */ - -/* -------------------- GL_ARB_texture_non_power_of_two -------------------- */ - -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 - -#define GLEW_ARB_texture_non_power_of_two GLEW_GET_VAR(__GLEW_ARB_texture_non_power_of_two) - -#endif /* GL_ARB_texture_non_power_of_two */ - -/* ---------------------- GL_ARB_texture_query_levels ---------------------- */ - -#ifndef GL_ARB_texture_query_levels -#define GL_ARB_texture_query_levels 1 - -#define GLEW_ARB_texture_query_levels GLEW_GET_VAR(__GLEW_ARB_texture_query_levels) - -#endif /* GL_ARB_texture_query_levels */ - -/* ------------------------ GL_ARB_texture_query_lod ----------------------- */ - -#ifndef GL_ARB_texture_query_lod -#define GL_ARB_texture_query_lod 1 - -#define GLEW_ARB_texture_query_lod GLEW_GET_VAR(__GLEW_ARB_texture_query_lod) - -#endif /* GL_ARB_texture_query_lod */ - -/* ------------------------ GL_ARB_texture_rectangle ----------------------- */ - -#ifndef GL_ARB_texture_rectangle -#define GL_ARB_texture_rectangle 1 - -#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 -#define GL_SAMPLER_2D_RECT_ARB 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 - -#define GLEW_ARB_texture_rectangle GLEW_GET_VAR(__GLEW_ARB_texture_rectangle) - -#endif /* GL_ARB_texture_rectangle */ - -/* --------------------------- GL_ARB_texture_rg --------------------------- */ - -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 - -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C - -#define GLEW_ARB_texture_rg GLEW_GET_VAR(__GLEW_ARB_texture_rg) - -#endif /* GL_ARB_texture_rg */ - -/* ----------------------- GL_ARB_texture_rgb10_a2ui ----------------------- */ - -#ifndef GL_ARB_texture_rgb10_a2ui -#define GL_ARB_texture_rgb10_a2ui 1 - -#define GL_RGB10_A2UI 0x906F - -#define GLEW_ARB_texture_rgb10_a2ui GLEW_GET_VAR(__GLEW_ARB_texture_rgb10_a2ui) - -#endif /* GL_ARB_texture_rgb10_a2ui */ - -/* ------------------------ GL_ARB_texture_stencil8 ------------------------ */ - -#ifndef GL_ARB_texture_stencil8 -#define GL_ARB_texture_stencil8 1 - -#define GL_STENCIL_INDEX 0x1901 -#define GL_STENCIL_INDEX8 0x8D48 - -#define GLEW_ARB_texture_stencil8 GLEW_GET_VAR(__GLEW_ARB_texture_stencil8) - -#endif /* GL_ARB_texture_stencil8 */ - -/* ------------------------- GL_ARB_texture_storage ------------------------ */ - -#ifndef GL_ARB_texture_storage -#define GL_ARB_texture_storage 1 - -#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F - -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); - -#define glTexStorage1D GLEW_GET_FUN(__glewTexStorage1D) -#define glTexStorage2D GLEW_GET_FUN(__glewTexStorage2D) -#define glTexStorage3D GLEW_GET_FUN(__glewTexStorage3D) -#define glTextureStorage1DEXT GLEW_GET_FUN(__glewTextureStorage1DEXT) -#define glTextureStorage2DEXT GLEW_GET_FUN(__glewTextureStorage2DEXT) -#define glTextureStorage3DEXT GLEW_GET_FUN(__glewTextureStorage3DEXT) - -#define GLEW_ARB_texture_storage GLEW_GET_VAR(__GLEW_ARB_texture_storage) - -#endif /* GL_ARB_texture_storage */ - -/* ------------------- GL_ARB_texture_storage_multisample ------------------ */ - -#ifndef GL_ARB_texture_storage_multisample -#define GL_ARB_texture_storage_multisample 1 - -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -typedef void (GLAPIENTRY * PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); - -#define glTexStorage2DMultisample GLEW_GET_FUN(__glewTexStorage2DMultisample) -#define glTexStorage3DMultisample GLEW_GET_FUN(__glewTexStorage3DMultisample) -#define glTextureStorage2DMultisampleEXT GLEW_GET_FUN(__glewTextureStorage2DMultisampleEXT) -#define glTextureStorage3DMultisampleEXT GLEW_GET_FUN(__glewTextureStorage3DMultisampleEXT) - -#define GLEW_ARB_texture_storage_multisample GLEW_GET_VAR(__GLEW_ARB_texture_storage_multisample) - -#endif /* GL_ARB_texture_storage_multisample */ - -/* ------------------------- GL_ARB_texture_swizzle ------------------------ */ - -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 - -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 - -#define GLEW_ARB_texture_swizzle GLEW_GET_VAR(__GLEW_ARB_texture_swizzle) - -#endif /* GL_ARB_texture_swizzle */ - -/* -------------------------- GL_ARB_texture_view -------------------------- */ - -#ifndef GL_ARB_texture_view -#define GL_ARB_texture_view 1 - -#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB -#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC -#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD -#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE -#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF - -typedef void (GLAPIENTRY * PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); - -#define glTextureView GLEW_GET_FUN(__glewTextureView) - -#define GLEW_ARB_texture_view GLEW_GET_VAR(__GLEW_ARB_texture_view) - -#endif /* GL_ARB_texture_view */ - -/* --------------------------- GL_ARB_timer_query -------------------------- */ - -#ifndef GL_ARB_timer_query -#define GL_ARB_timer_query 1 - -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 - -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64* params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64* params); -typedef void (GLAPIENTRY * PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); - -#define glGetQueryObjecti64v GLEW_GET_FUN(__glewGetQueryObjecti64v) -#define glGetQueryObjectui64v GLEW_GET_FUN(__glewGetQueryObjectui64v) -#define glQueryCounter GLEW_GET_FUN(__glewQueryCounter) - -#define GLEW_ARB_timer_query GLEW_GET_VAR(__GLEW_ARB_timer_query) - -#endif /* GL_ARB_timer_query */ - -/* ----------------------- GL_ARB_transform_feedback2 ---------------------- */ - -#ifndef GL_ARB_transform_feedback2 -#define GL_ARB_transform_feedback2 1 - -#define GL_TRANSFORM_FEEDBACK 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 - -typedef void (GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); -typedef void (GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint* ids); -typedef GLboolean (GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); -typedef void (GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); - -#define glBindTransformFeedback GLEW_GET_FUN(__glewBindTransformFeedback) -#define glDeleteTransformFeedbacks GLEW_GET_FUN(__glewDeleteTransformFeedbacks) -#define glDrawTransformFeedback GLEW_GET_FUN(__glewDrawTransformFeedback) -#define glGenTransformFeedbacks GLEW_GET_FUN(__glewGenTransformFeedbacks) -#define glIsTransformFeedback GLEW_GET_FUN(__glewIsTransformFeedback) -#define glPauseTransformFeedback GLEW_GET_FUN(__glewPauseTransformFeedback) -#define glResumeTransformFeedback GLEW_GET_FUN(__glewResumeTransformFeedback) - -#define GLEW_ARB_transform_feedback2 GLEW_GET_VAR(__GLEW_ARB_transform_feedback2) - -#endif /* GL_ARB_transform_feedback2 */ - -/* ----------------------- GL_ARB_transform_feedback3 ---------------------- */ - -#ifndef GL_ARB_transform_feedback3 -#define GL_ARB_transform_feedback3 1 - -#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 -#define GL_MAX_VERTEX_STREAMS 0x8E71 - -typedef void (GLAPIENTRY * PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); -typedef void (GLAPIENTRY * PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); -typedef void (GLAPIENTRY * PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params); - -#define glBeginQueryIndexed GLEW_GET_FUN(__glewBeginQueryIndexed) -#define glDrawTransformFeedbackStream GLEW_GET_FUN(__glewDrawTransformFeedbackStream) -#define glEndQueryIndexed GLEW_GET_FUN(__glewEndQueryIndexed) -#define glGetQueryIndexediv GLEW_GET_FUN(__glewGetQueryIndexediv) - -#define GLEW_ARB_transform_feedback3 GLEW_GET_VAR(__GLEW_ARB_transform_feedback3) - -#endif /* GL_ARB_transform_feedback3 */ - -/* ------------------ GL_ARB_transform_feedback_instanced ------------------ */ - -#ifndef GL_ARB_transform_feedback_instanced -#define GL_ARB_transform_feedback_instanced 1 - -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei primcount); - -#define glDrawTransformFeedbackInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackInstanced) -#define glDrawTransformFeedbackStreamInstanced GLEW_GET_FUN(__glewDrawTransformFeedbackStreamInstanced) - -#define GLEW_ARB_transform_feedback_instanced GLEW_GET_VAR(__GLEW_ARB_transform_feedback_instanced) - -#endif /* GL_ARB_transform_feedback_instanced */ - -/* ------------------------ GL_ARB_transpose_matrix ------------------------ */ - -#ifndef GL_ARB_transpose_matrix -#define GL_ARB_transpose_matrix 1 - -#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 - -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (GLdouble m[16]); -typedef void (GLAPIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (GLfloat m[16]); - -#define glLoadTransposeMatrixdARB GLEW_GET_FUN(__glewLoadTransposeMatrixdARB) -#define glLoadTransposeMatrixfARB GLEW_GET_FUN(__glewLoadTransposeMatrixfARB) -#define glMultTransposeMatrixdARB GLEW_GET_FUN(__glewMultTransposeMatrixdARB) -#define glMultTransposeMatrixfARB GLEW_GET_FUN(__glewMultTransposeMatrixfARB) - -#define GLEW_ARB_transpose_matrix GLEW_GET_VAR(__GLEW_ARB_transpose_matrix) - -#endif /* GL_ARB_transpose_matrix */ - -/* ---------------------- GL_ARB_uniform_buffer_object --------------------- */ - -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 - -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -typedef void (GLAPIENTRY * PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint* data); -typedef GLuint (GLAPIENTRY * PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar* uniformBlockName); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar** uniformNames, GLuint* uniformIndices); -typedef void (GLAPIENTRY * PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); - -#define glBindBufferBase GLEW_GET_FUN(__glewBindBufferBase) -#define glBindBufferRange GLEW_GET_FUN(__glewBindBufferRange) -#define glGetActiveUniformBlockName GLEW_GET_FUN(__glewGetActiveUniformBlockName) -#define glGetActiveUniformBlockiv GLEW_GET_FUN(__glewGetActiveUniformBlockiv) -#define glGetActiveUniformName GLEW_GET_FUN(__glewGetActiveUniformName) -#define glGetActiveUniformsiv GLEW_GET_FUN(__glewGetActiveUniformsiv) -#define glGetIntegeri_v GLEW_GET_FUN(__glewGetIntegeri_v) -#define glGetUniformBlockIndex GLEW_GET_FUN(__glewGetUniformBlockIndex) -#define glGetUniformIndices GLEW_GET_FUN(__glewGetUniformIndices) -#define glUniformBlockBinding GLEW_GET_FUN(__glewUniformBlockBinding) - -#define GLEW_ARB_uniform_buffer_object GLEW_GET_VAR(__GLEW_ARB_uniform_buffer_object) - -#endif /* GL_ARB_uniform_buffer_object */ - -/* ------------------------ GL_ARB_vertex_array_bgra ----------------------- */ - -#ifndef GL_ARB_vertex_array_bgra -#define GL_ARB_vertex_array_bgra 1 - -#define GL_BGRA 0x80E1 - -#define GLEW_ARB_vertex_array_bgra GLEW_GET_VAR(__GLEW_ARB_vertex_array_bgra) - -#endif /* GL_ARB_vertex_array_bgra */ - -/* ----------------------- GL_ARB_vertex_array_object ---------------------- */ - -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 - -#define GL_VERTEX_ARRAY_BINDING 0x85B5 - -typedef void (GLAPIENTRY * PFNGLBINDVERTEXARRAYPROC) (GLuint array); -typedef void (GLAPIENTRY * PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint* arrays); -typedef void (GLAPIENTRY * PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint* arrays); -typedef GLboolean (GLAPIENTRY * PFNGLISVERTEXARRAYPROC) (GLuint array); - -#define glBindVertexArray GLEW_GET_FUN(__glewBindVertexArray) -#define glDeleteVertexArrays GLEW_GET_FUN(__glewDeleteVertexArrays) -#define glGenVertexArrays GLEW_GET_FUN(__glewGenVertexArrays) -#define glIsVertexArray GLEW_GET_FUN(__glewIsVertexArray) - -#define GLEW_ARB_vertex_array_object GLEW_GET_VAR(__GLEW_ARB_vertex_array_object) - -#endif /* GL_ARB_vertex_array_object */ - -/* ----------------------- GL_ARB_vertex_attrib_64bit ---------------------- */ - -#ifndef GL_ARB_vertex_attrib_64bit -#define GL_ARB_vertex_attrib_64bit 1 - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); - -#define glGetVertexAttribLdv GLEW_GET_FUN(__glewGetVertexAttribLdv) -#define glVertexAttribL1d GLEW_GET_FUN(__glewVertexAttribL1d) -#define glVertexAttribL1dv GLEW_GET_FUN(__glewVertexAttribL1dv) -#define glVertexAttribL2d GLEW_GET_FUN(__glewVertexAttribL2d) -#define glVertexAttribL2dv GLEW_GET_FUN(__glewVertexAttribL2dv) -#define glVertexAttribL3d GLEW_GET_FUN(__glewVertexAttribL3d) -#define glVertexAttribL3dv GLEW_GET_FUN(__glewVertexAttribL3dv) -#define glVertexAttribL4d GLEW_GET_FUN(__glewVertexAttribL4d) -#define glVertexAttribL4dv GLEW_GET_FUN(__glewVertexAttribL4dv) -#define glVertexAttribLPointer GLEW_GET_FUN(__glewVertexAttribLPointer) - -#define GLEW_ARB_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_ARB_vertex_attrib_64bit) - -#endif /* GL_ARB_vertex_attrib_64bit */ - -/* ---------------------- GL_ARB_vertex_attrib_binding --------------------- */ - -#ifndef GL_ARB_vertex_attrib_binding -#define GL_ARB_vertex_attrib_binding 1 - -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA - -typedef void (GLAPIENTRY * PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -typedef void (GLAPIENTRY * PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); - -#define glBindVertexBuffer GLEW_GET_FUN(__glewBindVertexBuffer) -#define glVertexAttribBinding GLEW_GET_FUN(__glewVertexAttribBinding) -#define glVertexAttribFormat GLEW_GET_FUN(__glewVertexAttribFormat) -#define glVertexAttribIFormat GLEW_GET_FUN(__glewVertexAttribIFormat) -#define glVertexAttribLFormat GLEW_GET_FUN(__glewVertexAttribLFormat) -#define glVertexBindingDivisor GLEW_GET_FUN(__glewVertexBindingDivisor) - -#define GLEW_ARB_vertex_attrib_binding GLEW_GET_VAR(__GLEW_ARB_vertex_attrib_binding) - -#endif /* GL_ARB_vertex_attrib_binding */ - -/* -------------------------- GL_ARB_vertex_blend -------------------------- */ - -#ifndef GL_ARB_vertex_blend -#define GL_ARB_vertex_blend 1 - -#define GL_MODELVIEW0_ARB 0x1700 -#define GL_MODELVIEW1_ARB 0x850A -#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 -#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 -#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 -#define GL_VERTEX_BLEND_ARB 0x86A7 -#define GL_CURRENT_WEIGHT_ARB 0x86A8 -#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 -#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA -#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB -#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC -#define GL_WEIGHT_ARRAY_ARB 0x86AD -#define GL_MODELVIEW2_ARB 0x8722 -#define GL_MODELVIEW3_ARB 0x8723 -#define GL_MODELVIEW4_ARB 0x8724 -#define GL_MODELVIEW5_ARB 0x8725 -#define GL_MODELVIEW6_ARB 0x8726 -#define GL_MODELVIEW7_ARB 0x8727 -#define GL_MODELVIEW8_ARB 0x8728 -#define GL_MODELVIEW9_ARB 0x8729 -#define GL_MODELVIEW10_ARB 0x872A -#define GL_MODELVIEW11_ARB 0x872B -#define GL_MODELVIEW12_ARB 0x872C -#define GL_MODELVIEW13_ARB 0x872D -#define GL_MODELVIEW14_ARB 0x872E -#define GL_MODELVIEW15_ARB 0x872F -#define GL_MODELVIEW16_ARB 0x8730 -#define GL_MODELVIEW17_ARB 0x8731 -#define GL_MODELVIEW18_ARB 0x8732 -#define GL_MODELVIEW19_ARB 0x8733 -#define GL_MODELVIEW20_ARB 0x8734 -#define GL_MODELVIEW21_ARB 0x8735 -#define GL_MODELVIEW22_ARB 0x8736 -#define GL_MODELVIEW23_ARB 0x8737 -#define GL_MODELVIEW24_ARB 0x8738 -#define GL_MODELVIEW25_ARB 0x8739 -#define GL_MODELVIEW26_ARB 0x873A -#define GL_MODELVIEW27_ARB 0x873B -#define GL_MODELVIEW28_ARB 0x873C -#define GL_MODELVIEW29_ARB 0x873D -#define GL_MODELVIEW30_ARB 0x873E -#define GL_MODELVIEW31_ARB 0x873F - -typedef void (GLAPIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count); -typedef void (GLAPIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, GLbyte *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, GLdouble *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, GLfloat *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, GLint *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, GLshort *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, GLubyte *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, GLuint *weights); -typedef void (GLAPIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, GLushort *weights); - -#define glVertexBlendARB GLEW_GET_FUN(__glewVertexBlendARB) -#define glWeightPointerARB GLEW_GET_FUN(__glewWeightPointerARB) -#define glWeightbvARB GLEW_GET_FUN(__glewWeightbvARB) -#define glWeightdvARB GLEW_GET_FUN(__glewWeightdvARB) -#define glWeightfvARB GLEW_GET_FUN(__glewWeightfvARB) -#define glWeightivARB GLEW_GET_FUN(__glewWeightivARB) -#define glWeightsvARB GLEW_GET_FUN(__glewWeightsvARB) -#define glWeightubvARB GLEW_GET_FUN(__glewWeightubvARB) -#define glWeightuivARB GLEW_GET_FUN(__glewWeightuivARB) -#define glWeightusvARB GLEW_GET_FUN(__glewWeightusvARB) - -#define GLEW_ARB_vertex_blend GLEW_GET_VAR(__GLEW_ARB_vertex_blend) - -#endif /* GL_ARB_vertex_blend */ - -/* ---------------------- GL_ARB_vertex_buffer_object ---------------------- */ - -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 - -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA - -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; - -typedef void (GLAPIENTRY * PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint* buffers); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data); -typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERARBPROC) (GLuint buffer); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); -typedef GLboolean (GLAPIENTRY * PFNGLUNMAPBUFFERARBPROC) (GLenum target); - -#define glBindBufferARB GLEW_GET_FUN(__glewBindBufferARB) -#define glBufferDataARB GLEW_GET_FUN(__glewBufferDataARB) -#define glBufferSubDataARB GLEW_GET_FUN(__glewBufferSubDataARB) -#define glDeleteBuffersARB GLEW_GET_FUN(__glewDeleteBuffersARB) -#define glGenBuffersARB GLEW_GET_FUN(__glewGenBuffersARB) -#define glGetBufferParameterivARB GLEW_GET_FUN(__glewGetBufferParameterivARB) -#define glGetBufferPointervARB GLEW_GET_FUN(__glewGetBufferPointervARB) -#define glGetBufferSubDataARB GLEW_GET_FUN(__glewGetBufferSubDataARB) -#define glIsBufferARB GLEW_GET_FUN(__glewIsBufferARB) -#define glMapBufferARB GLEW_GET_FUN(__glewMapBufferARB) -#define glUnmapBufferARB GLEW_GET_FUN(__glewUnmapBufferARB) - -#define GLEW_ARB_vertex_buffer_object GLEW_GET_VAR(__GLEW_ARB_vertex_buffer_object) - -#endif /* GL_ARB_vertex_buffer_object */ - -/* ------------------------- GL_ARB_vertex_program ------------------------- */ - -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 - -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF - -typedef void (GLAPIENTRY * PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint* programs); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); -typedef void (GLAPIENTRY * PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint* programs); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid** pointer); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMARBPROC) (GLuint program); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); - -#define glBindProgramARB GLEW_GET_FUN(__glewBindProgramARB) -#define glDeleteProgramsARB GLEW_GET_FUN(__glewDeleteProgramsARB) -#define glDisableVertexAttribArrayARB GLEW_GET_FUN(__glewDisableVertexAttribArrayARB) -#define glEnableVertexAttribArrayARB GLEW_GET_FUN(__glewEnableVertexAttribArrayARB) -#define glGenProgramsARB GLEW_GET_FUN(__glewGenProgramsARB) -#define glGetProgramEnvParameterdvARB GLEW_GET_FUN(__glewGetProgramEnvParameterdvARB) -#define glGetProgramEnvParameterfvARB GLEW_GET_FUN(__glewGetProgramEnvParameterfvARB) -#define glGetProgramLocalParameterdvARB GLEW_GET_FUN(__glewGetProgramLocalParameterdvARB) -#define glGetProgramLocalParameterfvARB GLEW_GET_FUN(__glewGetProgramLocalParameterfvARB) -#define glGetProgramStringARB GLEW_GET_FUN(__glewGetProgramStringARB) -#define glGetProgramivARB GLEW_GET_FUN(__glewGetProgramivARB) -#define glGetVertexAttribPointervARB GLEW_GET_FUN(__glewGetVertexAttribPointervARB) -#define glGetVertexAttribdvARB GLEW_GET_FUN(__glewGetVertexAttribdvARB) -#define glGetVertexAttribfvARB GLEW_GET_FUN(__glewGetVertexAttribfvARB) -#define glGetVertexAttribivARB GLEW_GET_FUN(__glewGetVertexAttribivARB) -#define glIsProgramARB GLEW_GET_FUN(__glewIsProgramARB) -#define glProgramEnvParameter4dARB GLEW_GET_FUN(__glewProgramEnvParameter4dARB) -#define glProgramEnvParameter4dvARB GLEW_GET_FUN(__glewProgramEnvParameter4dvARB) -#define glProgramEnvParameter4fARB GLEW_GET_FUN(__glewProgramEnvParameter4fARB) -#define glProgramEnvParameter4fvARB GLEW_GET_FUN(__glewProgramEnvParameter4fvARB) -#define glProgramLocalParameter4dARB GLEW_GET_FUN(__glewProgramLocalParameter4dARB) -#define glProgramLocalParameter4dvARB GLEW_GET_FUN(__glewProgramLocalParameter4dvARB) -#define glProgramLocalParameter4fARB GLEW_GET_FUN(__glewProgramLocalParameter4fARB) -#define glProgramLocalParameter4fvARB GLEW_GET_FUN(__glewProgramLocalParameter4fvARB) -#define glProgramStringARB GLEW_GET_FUN(__glewProgramStringARB) -#define glVertexAttrib1dARB GLEW_GET_FUN(__glewVertexAttrib1dARB) -#define glVertexAttrib1dvARB GLEW_GET_FUN(__glewVertexAttrib1dvARB) -#define glVertexAttrib1fARB GLEW_GET_FUN(__glewVertexAttrib1fARB) -#define glVertexAttrib1fvARB GLEW_GET_FUN(__glewVertexAttrib1fvARB) -#define glVertexAttrib1sARB GLEW_GET_FUN(__glewVertexAttrib1sARB) -#define glVertexAttrib1svARB GLEW_GET_FUN(__glewVertexAttrib1svARB) -#define glVertexAttrib2dARB GLEW_GET_FUN(__glewVertexAttrib2dARB) -#define glVertexAttrib2dvARB GLEW_GET_FUN(__glewVertexAttrib2dvARB) -#define glVertexAttrib2fARB GLEW_GET_FUN(__glewVertexAttrib2fARB) -#define glVertexAttrib2fvARB GLEW_GET_FUN(__glewVertexAttrib2fvARB) -#define glVertexAttrib2sARB GLEW_GET_FUN(__glewVertexAttrib2sARB) -#define glVertexAttrib2svARB GLEW_GET_FUN(__glewVertexAttrib2svARB) -#define glVertexAttrib3dARB GLEW_GET_FUN(__glewVertexAttrib3dARB) -#define glVertexAttrib3dvARB GLEW_GET_FUN(__glewVertexAttrib3dvARB) -#define glVertexAttrib3fARB GLEW_GET_FUN(__glewVertexAttrib3fARB) -#define glVertexAttrib3fvARB GLEW_GET_FUN(__glewVertexAttrib3fvARB) -#define glVertexAttrib3sARB GLEW_GET_FUN(__glewVertexAttrib3sARB) -#define glVertexAttrib3svARB GLEW_GET_FUN(__glewVertexAttrib3svARB) -#define glVertexAttrib4NbvARB GLEW_GET_FUN(__glewVertexAttrib4NbvARB) -#define glVertexAttrib4NivARB GLEW_GET_FUN(__glewVertexAttrib4NivARB) -#define glVertexAttrib4NsvARB GLEW_GET_FUN(__glewVertexAttrib4NsvARB) -#define glVertexAttrib4NubARB GLEW_GET_FUN(__glewVertexAttrib4NubARB) -#define glVertexAttrib4NubvARB GLEW_GET_FUN(__glewVertexAttrib4NubvARB) -#define glVertexAttrib4NuivARB GLEW_GET_FUN(__glewVertexAttrib4NuivARB) -#define glVertexAttrib4NusvARB GLEW_GET_FUN(__glewVertexAttrib4NusvARB) -#define glVertexAttrib4bvARB GLEW_GET_FUN(__glewVertexAttrib4bvARB) -#define glVertexAttrib4dARB GLEW_GET_FUN(__glewVertexAttrib4dARB) -#define glVertexAttrib4dvARB GLEW_GET_FUN(__glewVertexAttrib4dvARB) -#define glVertexAttrib4fARB GLEW_GET_FUN(__glewVertexAttrib4fARB) -#define glVertexAttrib4fvARB GLEW_GET_FUN(__glewVertexAttrib4fvARB) -#define glVertexAttrib4ivARB GLEW_GET_FUN(__glewVertexAttrib4ivARB) -#define glVertexAttrib4sARB GLEW_GET_FUN(__glewVertexAttrib4sARB) -#define glVertexAttrib4svARB GLEW_GET_FUN(__glewVertexAttrib4svARB) -#define glVertexAttrib4ubvARB GLEW_GET_FUN(__glewVertexAttrib4ubvARB) -#define glVertexAttrib4uivARB GLEW_GET_FUN(__glewVertexAttrib4uivARB) -#define glVertexAttrib4usvARB GLEW_GET_FUN(__glewVertexAttrib4usvARB) -#define glVertexAttribPointerARB GLEW_GET_FUN(__glewVertexAttribPointerARB) - -#define GLEW_ARB_vertex_program GLEW_GET_VAR(__GLEW_ARB_vertex_program) - -#endif /* GL_ARB_vertex_program */ - -/* -------------------------- GL_ARB_vertex_shader ------------------------- */ - -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 - -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A - -typedef void (GLAPIENTRY * PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB* name); -typedef void (GLAPIENTRY * PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint *size, GLenum *type, GLcharARB *name); -typedef GLint (GLAPIENTRY * PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB* name); - -#define glBindAttribLocationARB GLEW_GET_FUN(__glewBindAttribLocationARB) -#define glGetActiveAttribARB GLEW_GET_FUN(__glewGetActiveAttribARB) -#define glGetAttribLocationARB GLEW_GET_FUN(__glewGetAttribLocationARB) - -#define GLEW_ARB_vertex_shader GLEW_GET_VAR(__GLEW_ARB_vertex_shader) - -#endif /* GL_ARB_vertex_shader */ - -/* ------------------- GL_ARB_vertex_type_10f_11f_11f_rev ------------------ */ - -#ifndef GL_ARB_vertex_type_10f_11f_11f_rev -#define GL_ARB_vertex_type_10f_11f_11f_rev 1 - -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B - -#define GLEW_ARB_vertex_type_10f_11f_11f_rev GLEW_GET_VAR(__GLEW_ARB_vertex_type_10f_11f_11f_rev) - -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ - -/* ------------------- GL_ARB_vertex_type_2_10_10_10_rev ------------------- */ - -#ifndef GL_ARB_vertex_type_2_10_10_10_rev -#define GL_ARB_vertex_type_2_10_10_10_rev 1 - -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_INT_2_10_10_10_REV 0x8D9F - -typedef void (GLAPIENTRY * PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (GLAPIENTRY * PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint* color); -typedef void (GLAPIENTRY * PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); -typedef void (GLAPIENTRY * PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint* color); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint* color); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); -typedef void (GLAPIENTRY * PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint* coords); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); -typedef void (GLAPIENTRY * PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint* value); - -#define glColorP3ui GLEW_GET_FUN(__glewColorP3ui) -#define glColorP3uiv GLEW_GET_FUN(__glewColorP3uiv) -#define glColorP4ui GLEW_GET_FUN(__glewColorP4ui) -#define glColorP4uiv GLEW_GET_FUN(__glewColorP4uiv) -#define glMultiTexCoordP1ui GLEW_GET_FUN(__glewMultiTexCoordP1ui) -#define glMultiTexCoordP1uiv GLEW_GET_FUN(__glewMultiTexCoordP1uiv) -#define glMultiTexCoordP2ui GLEW_GET_FUN(__glewMultiTexCoordP2ui) -#define glMultiTexCoordP2uiv GLEW_GET_FUN(__glewMultiTexCoordP2uiv) -#define glMultiTexCoordP3ui GLEW_GET_FUN(__glewMultiTexCoordP3ui) -#define glMultiTexCoordP3uiv GLEW_GET_FUN(__glewMultiTexCoordP3uiv) -#define glMultiTexCoordP4ui GLEW_GET_FUN(__glewMultiTexCoordP4ui) -#define glMultiTexCoordP4uiv GLEW_GET_FUN(__glewMultiTexCoordP4uiv) -#define glNormalP3ui GLEW_GET_FUN(__glewNormalP3ui) -#define glNormalP3uiv GLEW_GET_FUN(__glewNormalP3uiv) -#define glSecondaryColorP3ui GLEW_GET_FUN(__glewSecondaryColorP3ui) -#define glSecondaryColorP3uiv GLEW_GET_FUN(__glewSecondaryColorP3uiv) -#define glTexCoordP1ui GLEW_GET_FUN(__glewTexCoordP1ui) -#define glTexCoordP1uiv GLEW_GET_FUN(__glewTexCoordP1uiv) -#define glTexCoordP2ui GLEW_GET_FUN(__glewTexCoordP2ui) -#define glTexCoordP2uiv GLEW_GET_FUN(__glewTexCoordP2uiv) -#define glTexCoordP3ui GLEW_GET_FUN(__glewTexCoordP3ui) -#define glTexCoordP3uiv GLEW_GET_FUN(__glewTexCoordP3uiv) -#define glTexCoordP4ui GLEW_GET_FUN(__glewTexCoordP4ui) -#define glTexCoordP4uiv GLEW_GET_FUN(__glewTexCoordP4uiv) -#define glVertexAttribP1ui GLEW_GET_FUN(__glewVertexAttribP1ui) -#define glVertexAttribP1uiv GLEW_GET_FUN(__glewVertexAttribP1uiv) -#define glVertexAttribP2ui GLEW_GET_FUN(__glewVertexAttribP2ui) -#define glVertexAttribP2uiv GLEW_GET_FUN(__glewVertexAttribP2uiv) -#define glVertexAttribP3ui GLEW_GET_FUN(__glewVertexAttribP3ui) -#define glVertexAttribP3uiv GLEW_GET_FUN(__glewVertexAttribP3uiv) -#define glVertexAttribP4ui GLEW_GET_FUN(__glewVertexAttribP4ui) -#define glVertexAttribP4uiv GLEW_GET_FUN(__glewVertexAttribP4uiv) -#define glVertexP2ui GLEW_GET_FUN(__glewVertexP2ui) -#define glVertexP2uiv GLEW_GET_FUN(__glewVertexP2uiv) -#define glVertexP3ui GLEW_GET_FUN(__glewVertexP3ui) -#define glVertexP3uiv GLEW_GET_FUN(__glewVertexP3uiv) -#define glVertexP4ui GLEW_GET_FUN(__glewVertexP4ui) -#define glVertexP4uiv GLEW_GET_FUN(__glewVertexP4uiv) - -#define GLEW_ARB_vertex_type_2_10_10_10_rev GLEW_GET_VAR(__GLEW_ARB_vertex_type_2_10_10_10_rev) - -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ - -/* ------------------------- GL_ARB_viewport_array ------------------------- */ - -#ifndef GL_ARB_viewport_array -#define GL_ARB_viewport_array 1 - -#define GL_DEPTH_RANGE 0x0B70 -#define GL_VIEWPORT 0x0BA2 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_MAX_VIEWPORTS 0x825B -#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C -#define GL_VIEWPORT_BOUNDS_RANGE 0x825D -#define GL_LAYER_PROVOKING_VERTEX 0x825E -#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F -#define GL_UNDEFINED_VERTEX 0x8260 -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F - -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLclampd * v); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLclampd n, GLclampd f); -typedef void (GLAPIENTRY * PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble* data); -typedef void (GLAPIENTRY * PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat* data); -typedef void (GLAPIENTRY * PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint * v); -typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint * v); -typedef void (GLAPIENTRY * PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat * v); -typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); -typedef void (GLAPIENTRY * PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat * v); - -#define glDepthRangeArrayv GLEW_GET_FUN(__glewDepthRangeArrayv) -#define glDepthRangeIndexed GLEW_GET_FUN(__glewDepthRangeIndexed) -#define glGetDoublei_v GLEW_GET_FUN(__glewGetDoublei_v) -#define glGetFloati_v GLEW_GET_FUN(__glewGetFloati_v) -#define glScissorArrayv GLEW_GET_FUN(__glewScissorArrayv) -#define glScissorIndexed GLEW_GET_FUN(__glewScissorIndexed) -#define glScissorIndexedv GLEW_GET_FUN(__glewScissorIndexedv) -#define glViewportArrayv GLEW_GET_FUN(__glewViewportArrayv) -#define glViewportIndexedf GLEW_GET_FUN(__glewViewportIndexedf) -#define glViewportIndexedfv GLEW_GET_FUN(__glewViewportIndexedfv) - -#define GLEW_ARB_viewport_array GLEW_GET_VAR(__GLEW_ARB_viewport_array) - -#endif /* GL_ARB_viewport_array */ - -/* --------------------------- GL_ARB_window_pos --------------------------- */ - -#ifndef GL_ARB_window_pos -#define GL_ARB_window_pos 1 - -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort* p); - -#define glWindowPos2dARB GLEW_GET_FUN(__glewWindowPos2dARB) -#define glWindowPos2dvARB GLEW_GET_FUN(__glewWindowPos2dvARB) -#define glWindowPos2fARB GLEW_GET_FUN(__glewWindowPos2fARB) -#define glWindowPos2fvARB GLEW_GET_FUN(__glewWindowPos2fvARB) -#define glWindowPos2iARB GLEW_GET_FUN(__glewWindowPos2iARB) -#define glWindowPos2ivARB GLEW_GET_FUN(__glewWindowPos2ivARB) -#define glWindowPos2sARB GLEW_GET_FUN(__glewWindowPos2sARB) -#define glWindowPos2svARB GLEW_GET_FUN(__glewWindowPos2svARB) -#define glWindowPos3dARB GLEW_GET_FUN(__glewWindowPos3dARB) -#define glWindowPos3dvARB GLEW_GET_FUN(__glewWindowPos3dvARB) -#define glWindowPos3fARB GLEW_GET_FUN(__glewWindowPos3fARB) -#define glWindowPos3fvARB GLEW_GET_FUN(__glewWindowPos3fvARB) -#define glWindowPos3iARB GLEW_GET_FUN(__glewWindowPos3iARB) -#define glWindowPos3ivARB GLEW_GET_FUN(__glewWindowPos3ivARB) -#define glWindowPos3sARB GLEW_GET_FUN(__glewWindowPos3sARB) -#define glWindowPos3svARB GLEW_GET_FUN(__glewWindowPos3svARB) - -#define GLEW_ARB_window_pos GLEW_GET_VAR(__GLEW_ARB_window_pos) - -#endif /* GL_ARB_window_pos */ - -/* ------------------------- GL_ATIX_point_sprites ------------------------- */ - -#ifndef GL_ATIX_point_sprites -#define GL_ATIX_point_sprites 1 - -#define GL_TEXTURE_POINT_MODE_ATIX 0x60B0 -#define GL_TEXTURE_POINT_ONE_COORD_ATIX 0x60B1 -#define GL_TEXTURE_POINT_SPRITE_ATIX 0x60B2 -#define GL_POINT_SPRITE_CULL_MODE_ATIX 0x60B3 -#define GL_POINT_SPRITE_CULL_CENTER_ATIX 0x60B4 -#define GL_POINT_SPRITE_CULL_CLIP_ATIX 0x60B5 - -#define GLEW_ATIX_point_sprites GLEW_GET_VAR(__GLEW_ATIX_point_sprites) - -#endif /* GL_ATIX_point_sprites */ - -/* ---------------------- GL_ATIX_texture_env_combine3 --------------------- */ - -#ifndef GL_ATIX_texture_env_combine3 -#define GL_ATIX_texture_env_combine3 1 - -#define GL_MODULATE_ADD_ATIX 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATIX 0x8745 -#define GL_MODULATE_SUBTRACT_ATIX 0x8746 - -#define GLEW_ATIX_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATIX_texture_env_combine3) - -#endif /* GL_ATIX_texture_env_combine3 */ - -/* ----------------------- GL_ATIX_texture_env_route ----------------------- */ - -#ifndef GL_ATIX_texture_env_route -#define GL_ATIX_texture_env_route 1 - -#define GL_SECONDARY_COLOR_ATIX 0x8747 -#define GL_TEXTURE_OUTPUT_RGB_ATIX 0x8748 -#define GL_TEXTURE_OUTPUT_ALPHA_ATIX 0x8749 - -#define GLEW_ATIX_texture_env_route GLEW_GET_VAR(__GLEW_ATIX_texture_env_route) - -#endif /* GL_ATIX_texture_env_route */ - -/* ---------------- GL_ATIX_vertex_shader_output_point_size ---------------- */ - -#ifndef GL_ATIX_vertex_shader_output_point_size -#define GL_ATIX_vertex_shader_output_point_size 1 - -#define GL_OUTPUT_POINT_SIZE_ATIX 0x610E - -#define GLEW_ATIX_vertex_shader_output_point_size GLEW_GET_VAR(__GLEW_ATIX_vertex_shader_output_point_size) - -#endif /* GL_ATIX_vertex_shader_output_point_size */ - -/* -------------------------- GL_ATI_draw_buffers -------------------------- */ - -#ifndef GL_ATI_draw_buffers -#define GL_ATI_draw_buffers 1 - -#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 -#define GL_DRAW_BUFFER0_ATI 0x8825 -#define GL_DRAW_BUFFER1_ATI 0x8826 -#define GL_DRAW_BUFFER2_ATI 0x8827 -#define GL_DRAW_BUFFER3_ATI 0x8828 -#define GL_DRAW_BUFFER4_ATI 0x8829 -#define GL_DRAW_BUFFER5_ATI 0x882A -#define GL_DRAW_BUFFER6_ATI 0x882B -#define GL_DRAW_BUFFER7_ATI 0x882C -#define GL_DRAW_BUFFER8_ATI 0x882D -#define GL_DRAW_BUFFER9_ATI 0x882E -#define GL_DRAW_BUFFER10_ATI 0x882F -#define GL_DRAW_BUFFER11_ATI 0x8830 -#define GL_DRAW_BUFFER12_ATI 0x8831 -#define GL_DRAW_BUFFER13_ATI 0x8832 -#define GL_DRAW_BUFFER14_ATI 0x8833 -#define GL_DRAW_BUFFER15_ATI 0x8834 - -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum* bufs); - -#define glDrawBuffersATI GLEW_GET_FUN(__glewDrawBuffersATI) - -#define GLEW_ATI_draw_buffers GLEW_GET_VAR(__GLEW_ATI_draw_buffers) - -#endif /* GL_ATI_draw_buffers */ - -/* -------------------------- GL_ATI_element_array ------------------------- */ - -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 - -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A - -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); -typedef void (GLAPIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer); - -#define glDrawElementArrayATI GLEW_GET_FUN(__glewDrawElementArrayATI) -#define glDrawRangeElementArrayATI GLEW_GET_FUN(__glewDrawRangeElementArrayATI) -#define glElementPointerATI GLEW_GET_FUN(__glewElementPointerATI) - -#define GLEW_ATI_element_array GLEW_GET_VAR(__GLEW_ATI_element_array) - -#endif /* GL_ATI_element_array */ - -/* ------------------------- GL_ATI_envmap_bumpmap ------------------------- */ - -#ifndef GL_ATI_envmap_bumpmap -#define GL_ATI_envmap_bumpmap 1 - -#define GL_BUMP_ROT_MATRIX_ATI 0x8775 -#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 -#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 -#define GL_BUMP_TEX_UNITS_ATI 0x8778 -#define GL_DUDV_ATI 0x8779 -#define GL_DU8DV8_ATI 0x877A -#define GL_BUMP_ENVMAP_ATI 0x877B -#define GL_BUMP_TARGET_ATI 0x877C - -typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -typedef void (GLAPIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); -typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); -typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); - -#define glGetTexBumpParameterfvATI GLEW_GET_FUN(__glewGetTexBumpParameterfvATI) -#define glGetTexBumpParameterivATI GLEW_GET_FUN(__glewGetTexBumpParameterivATI) -#define glTexBumpParameterfvATI GLEW_GET_FUN(__glewTexBumpParameterfvATI) -#define glTexBumpParameterivATI GLEW_GET_FUN(__glewTexBumpParameterivATI) - -#define GLEW_ATI_envmap_bumpmap GLEW_GET_VAR(__GLEW_ATI_envmap_bumpmap) - -#endif /* GL_ATI_envmap_bumpmap */ - -/* ------------------------- GL_ATI_fragment_shader ------------------------ */ - -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 - -#define GL_RED_BIT_ATI 0x00000001 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B - -typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (GLAPIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (GLAPIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void); -typedef void (GLAPIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -typedef void (GLAPIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -typedef void (GLAPIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void); -typedef GLuint (GLAPIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); -typedef void (GLAPIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); -typedef void (GLAPIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); -typedef void (GLAPIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat* value); - -#define glAlphaFragmentOp1ATI GLEW_GET_FUN(__glewAlphaFragmentOp1ATI) -#define glAlphaFragmentOp2ATI GLEW_GET_FUN(__glewAlphaFragmentOp2ATI) -#define glAlphaFragmentOp3ATI GLEW_GET_FUN(__glewAlphaFragmentOp3ATI) -#define glBeginFragmentShaderATI GLEW_GET_FUN(__glewBeginFragmentShaderATI) -#define glBindFragmentShaderATI GLEW_GET_FUN(__glewBindFragmentShaderATI) -#define glColorFragmentOp1ATI GLEW_GET_FUN(__glewColorFragmentOp1ATI) -#define glColorFragmentOp2ATI GLEW_GET_FUN(__glewColorFragmentOp2ATI) -#define glColorFragmentOp3ATI GLEW_GET_FUN(__glewColorFragmentOp3ATI) -#define glDeleteFragmentShaderATI GLEW_GET_FUN(__glewDeleteFragmentShaderATI) -#define glEndFragmentShaderATI GLEW_GET_FUN(__glewEndFragmentShaderATI) -#define glGenFragmentShadersATI GLEW_GET_FUN(__glewGenFragmentShadersATI) -#define glPassTexCoordATI GLEW_GET_FUN(__glewPassTexCoordATI) -#define glSampleMapATI GLEW_GET_FUN(__glewSampleMapATI) -#define glSetFragmentShaderConstantATI GLEW_GET_FUN(__glewSetFragmentShaderConstantATI) - -#define GLEW_ATI_fragment_shader GLEW_GET_VAR(__GLEW_ATI_fragment_shader) - -#endif /* GL_ATI_fragment_shader */ - -/* ------------------------ GL_ATI_map_object_buffer ----------------------- */ - -#ifndef GL_ATI_map_object_buffer -#define GL_ATI_map_object_buffer 1 - -typedef GLvoid * (GLAPIENTRY * PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); - -#define glMapObjectBufferATI GLEW_GET_FUN(__glewMapObjectBufferATI) -#define glUnmapObjectBufferATI GLEW_GET_FUN(__glewUnmapObjectBufferATI) - -#define GLEW_ATI_map_object_buffer GLEW_GET_VAR(__GLEW_ATI_map_object_buffer) - -#endif /* GL_ATI_map_object_buffer */ - -/* ----------------------------- GL_ATI_meminfo ---------------------------- */ - -#ifndef GL_ATI_meminfo -#define GL_ATI_meminfo 1 - -#define GL_VBO_FREE_MEMORY_ATI 0x87FB -#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC -#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD - -#define GLEW_ATI_meminfo GLEW_GET_VAR(__GLEW_ATI_meminfo) - -#endif /* GL_ATI_meminfo */ - -/* -------------------------- GL_ATI_pn_triangles -------------------------- */ - -#ifndef GL_ATI_pn_triangles -#define GL_ATI_pn_triangles 1 - -#define GL_PN_TRIANGLES_ATI 0x87F0 -#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 -#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 -#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 -#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 -#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 -#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 -#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 -#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 - -typedef void (GLAPIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); - -#define glPNTrianglesfATI GLEW_GET_FUN(__glewPNTrianglesfATI) -#define glPNTrianglesiATI GLEW_GET_FUN(__glewPNTrianglesiATI) - -#define GLEW_ATI_pn_triangles GLEW_GET_VAR(__GLEW_ATI_pn_triangles) - -#endif /* GL_ATI_pn_triangles */ - -/* ------------------------ GL_ATI_separate_stencil ------------------------ */ - -#ifndef GL_ATI_separate_stencil -#define GL_ATI_separate_stencil 1 - -#define GL_STENCIL_BACK_FUNC_ATI 0x8800 -#define GL_STENCIL_BACK_FAIL_ATI 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 - -typedef void (GLAPIENTRY * PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); -typedef void (GLAPIENTRY * PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); - -#define glStencilFuncSeparateATI GLEW_GET_FUN(__glewStencilFuncSeparateATI) -#define glStencilOpSeparateATI GLEW_GET_FUN(__glewStencilOpSeparateATI) - -#define GLEW_ATI_separate_stencil GLEW_GET_VAR(__GLEW_ATI_separate_stencil) - -#endif /* GL_ATI_separate_stencil */ - -/* ----------------------- GL_ATI_shader_texture_lod ----------------------- */ - -#ifndef GL_ATI_shader_texture_lod -#define GL_ATI_shader_texture_lod 1 - -#define GLEW_ATI_shader_texture_lod GLEW_GET_VAR(__GLEW_ATI_shader_texture_lod) - -#endif /* GL_ATI_shader_texture_lod */ - -/* ---------------------- GL_ATI_text_fragment_shader ---------------------- */ - -#ifndef GL_ATI_text_fragment_shader -#define GL_ATI_text_fragment_shader 1 - -#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 - -#define GLEW_ATI_text_fragment_shader GLEW_GET_VAR(__GLEW_ATI_text_fragment_shader) - -#endif /* GL_ATI_text_fragment_shader */ - -/* --------------------- GL_ATI_texture_compression_3dc -------------------- */ - -#ifndef GL_ATI_texture_compression_3dc -#define GL_ATI_texture_compression_3dc 1 - -#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837 - -#define GLEW_ATI_texture_compression_3dc GLEW_GET_VAR(__GLEW_ATI_texture_compression_3dc) - -#endif /* GL_ATI_texture_compression_3dc */ - -/* ---------------------- GL_ATI_texture_env_combine3 ---------------------- */ - -#ifndef GL_ATI_texture_env_combine3 -#define GL_ATI_texture_env_combine3 1 - -#define GL_MODULATE_ADD_ATI 0x8744 -#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 -#define GL_MODULATE_SUBTRACT_ATI 0x8746 - -#define GLEW_ATI_texture_env_combine3 GLEW_GET_VAR(__GLEW_ATI_texture_env_combine3) - -#endif /* GL_ATI_texture_env_combine3 */ - -/* -------------------------- GL_ATI_texture_float ------------------------- */ - -#ifndef GL_ATI_texture_float -#define GL_ATI_texture_float 1 - -#define GL_RGBA_FLOAT32_ATI 0x8814 -#define GL_RGB_FLOAT32_ATI 0x8815 -#define GL_ALPHA_FLOAT32_ATI 0x8816 -#define GL_INTENSITY_FLOAT32_ATI 0x8817 -#define GL_LUMINANCE_FLOAT32_ATI 0x8818 -#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 -#define GL_RGBA_FLOAT16_ATI 0x881A -#define GL_RGB_FLOAT16_ATI 0x881B -#define GL_ALPHA_FLOAT16_ATI 0x881C -#define GL_INTENSITY_FLOAT16_ATI 0x881D -#define GL_LUMINANCE_FLOAT16_ATI 0x881E -#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F - -#define GLEW_ATI_texture_float GLEW_GET_VAR(__GLEW_ATI_texture_float) - -#endif /* GL_ATI_texture_float */ - -/* ----------------------- GL_ATI_texture_mirror_once ---------------------- */ - -#ifndef GL_ATI_texture_mirror_once -#define GL_ATI_texture_mirror_once 1 - -#define GL_MIRROR_CLAMP_ATI 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 - -#define GLEW_ATI_texture_mirror_once GLEW_GET_VAR(__GLEW_ATI_texture_mirror_once) - -#endif /* GL_ATI_texture_mirror_once */ - -/* ----------------------- GL_ATI_vertex_array_object ---------------------- */ - -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 - -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 - -typedef void (GLAPIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -typedef void (GLAPIENTRY * PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); -typedef GLuint (GLAPIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage); -typedef void (GLAPIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve); -typedef void (GLAPIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); - -#define glArrayObjectATI GLEW_GET_FUN(__glewArrayObjectATI) -#define glFreeObjectBufferATI GLEW_GET_FUN(__glewFreeObjectBufferATI) -#define glGetArrayObjectfvATI GLEW_GET_FUN(__glewGetArrayObjectfvATI) -#define glGetArrayObjectivATI GLEW_GET_FUN(__glewGetArrayObjectivATI) -#define glGetObjectBufferfvATI GLEW_GET_FUN(__glewGetObjectBufferfvATI) -#define glGetObjectBufferivATI GLEW_GET_FUN(__glewGetObjectBufferivATI) -#define glGetVariantArrayObjectfvATI GLEW_GET_FUN(__glewGetVariantArrayObjectfvATI) -#define glGetVariantArrayObjectivATI GLEW_GET_FUN(__glewGetVariantArrayObjectivATI) -#define glIsObjectBufferATI GLEW_GET_FUN(__glewIsObjectBufferATI) -#define glNewObjectBufferATI GLEW_GET_FUN(__glewNewObjectBufferATI) -#define glUpdateObjectBufferATI GLEW_GET_FUN(__glewUpdateObjectBufferATI) -#define glVariantArrayObjectATI GLEW_GET_FUN(__glewVariantArrayObjectATI) - -#define GLEW_ATI_vertex_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_array_object) - -#endif /* GL_ATI_vertex_array_object */ - -/* ------------------- GL_ATI_vertex_attrib_array_object ------------------- */ - -#ifndef GL_ATI_vertex_attrib_array_object -#define GL_ATI_vertex_attrib_array_object 1 - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); - -#define glGetVertexAttribArrayObjectfvATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectfvATI) -#define glGetVertexAttribArrayObjectivATI GLEW_GET_FUN(__glewGetVertexAttribArrayObjectivATI) -#define glVertexAttribArrayObjectATI GLEW_GET_FUN(__glewVertexAttribArrayObjectATI) - -#define GLEW_ATI_vertex_attrib_array_object GLEW_GET_VAR(__GLEW_ATI_vertex_attrib_array_object) - -#endif /* GL_ATI_vertex_attrib_array_object */ - -/* ------------------------- GL_ATI_vertex_streams ------------------------- */ - -#ifndef GL_ATI_vertex_streams -#define GL_ATI_vertex_streams 1 - -#define GL_MAX_VERTEX_STREAMS_ATI 0x876B -#define GL_VERTEX_SOURCE_ATI 0x876C -#define GL_VERTEX_STREAM0_ATI 0x876D -#define GL_VERTEX_STREAM1_ATI 0x876E -#define GL_VERTEX_STREAM2_ATI 0x876F -#define GL_VERTEX_STREAM3_ATI 0x8770 -#define GL_VERTEX_STREAM4_ATI 0x8771 -#define GL_VERTEX_STREAM5_ATI 0x8772 -#define GL_VERTEX_STREAM6_ATI 0x8773 -#define GL_VERTEX_STREAM7_ATI 0x8774 - -typedef void (GLAPIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte x, GLbyte y, GLbyte z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); - -#define glClientActiveVertexStreamATI GLEW_GET_FUN(__glewClientActiveVertexStreamATI) -#define glNormalStream3bATI GLEW_GET_FUN(__glewNormalStream3bATI) -#define glNormalStream3bvATI GLEW_GET_FUN(__glewNormalStream3bvATI) -#define glNormalStream3dATI GLEW_GET_FUN(__glewNormalStream3dATI) -#define glNormalStream3dvATI GLEW_GET_FUN(__glewNormalStream3dvATI) -#define glNormalStream3fATI GLEW_GET_FUN(__glewNormalStream3fATI) -#define glNormalStream3fvATI GLEW_GET_FUN(__glewNormalStream3fvATI) -#define glNormalStream3iATI GLEW_GET_FUN(__glewNormalStream3iATI) -#define glNormalStream3ivATI GLEW_GET_FUN(__glewNormalStream3ivATI) -#define glNormalStream3sATI GLEW_GET_FUN(__glewNormalStream3sATI) -#define glNormalStream3svATI GLEW_GET_FUN(__glewNormalStream3svATI) -#define glVertexBlendEnvfATI GLEW_GET_FUN(__glewVertexBlendEnvfATI) -#define glVertexBlendEnviATI GLEW_GET_FUN(__glewVertexBlendEnviATI) -#define glVertexStream1dATI GLEW_GET_FUN(__glewVertexStream1dATI) -#define glVertexStream1dvATI GLEW_GET_FUN(__glewVertexStream1dvATI) -#define glVertexStream1fATI GLEW_GET_FUN(__glewVertexStream1fATI) -#define glVertexStream1fvATI GLEW_GET_FUN(__glewVertexStream1fvATI) -#define glVertexStream1iATI GLEW_GET_FUN(__glewVertexStream1iATI) -#define glVertexStream1ivATI GLEW_GET_FUN(__glewVertexStream1ivATI) -#define glVertexStream1sATI GLEW_GET_FUN(__glewVertexStream1sATI) -#define glVertexStream1svATI GLEW_GET_FUN(__glewVertexStream1svATI) -#define glVertexStream2dATI GLEW_GET_FUN(__glewVertexStream2dATI) -#define glVertexStream2dvATI GLEW_GET_FUN(__glewVertexStream2dvATI) -#define glVertexStream2fATI GLEW_GET_FUN(__glewVertexStream2fATI) -#define glVertexStream2fvATI GLEW_GET_FUN(__glewVertexStream2fvATI) -#define glVertexStream2iATI GLEW_GET_FUN(__glewVertexStream2iATI) -#define glVertexStream2ivATI GLEW_GET_FUN(__glewVertexStream2ivATI) -#define glVertexStream2sATI GLEW_GET_FUN(__glewVertexStream2sATI) -#define glVertexStream2svATI GLEW_GET_FUN(__glewVertexStream2svATI) -#define glVertexStream3dATI GLEW_GET_FUN(__glewVertexStream3dATI) -#define glVertexStream3dvATI GLEW_GET_FUN(__glewVertexStream3dvATI) -#define glVertexStream3fATI GLEW_GET_FUN(__glewVertexStream3fATI) -#define glVertexStream3fvATI GLEW_GET_FUN(__glewVertexStream3fvATI) -#define glVertexStream3iATI GLEW_GET_FUN(__glewVertexStream3iATI) -#define glVertexStream3ivATI GLEW_GET_FUN(__glewVertexStream3ivATI) -#define glVertexStream3sATI GLEW_GET_FUN(__glewVertexStream3sATI) -#define glVertexStream3svATI GLEW_GET_FUN(__glewVertexStream3svATI) -#define glVertexStream4dATI GLEW_GET_FUN(__glewVertexStream4dATI) -#define glVertexStream4dvATI GLEW_GET_FUN(__glewVertexStream4dvATI) -#define glVertexStream4fATI GLEW_GET_FUN(__glewVertexStream4fATI) -#define glVertexStream4fvATI GLEW_GET_FUN(__glewVertexStream4fvATI) -#define glVertexStream4iATI GLEW_GET_FUN(__glewVertexStream4iATI) -#define glVertexStream4ivATI GLEW_GET_FUN(__glewVertexStream4ivATI) -#define glVertexStream4sATI GLEW_GET_FUN(__glewVertexStream4sATI) -#define glVertexStream4svATI GLEW_GET_FUN(__glewVertexStream4svATI) - -#define GLEW_ATI_vertex_streams GLEW_GET_VAR(__GLEW_ATI_vertex_streams) - -#endif /* GL_ATI_vertex_streams */ - -/* --------------------------- GL_EXT_422_pixels --------------------------- */ - -#ifndef GL_EXT_422_pixels -#define GL_EXT_422_pixels 1 - -#define GL_422_EXT 0x80CC -#define GL_422_REV_EXT 0x80CD -#define GL_422_AVERAGE_EXT 0x80CE -#define GL_422_REV_AVERAGE_EXT 0x80CF - -#define GLEW_EXT_422_pixels GLEW_GET_VAR(__GLEW_EXT_422_pixels) - -#endif /* GL_EXT_422_pixels */ - -/* ---------------------------- GL_EXT_Cg_shader --------------------------- */ - -#ifndef GL_EXT_Cg_shader -#define GL_EXT_Cg_shader 1 - -#define GL_CG_VERTEX_SHADER_EXT 0x890E -#define GL_CG_FRAGMENT_SHADER_EXT 0x890F - -#define GLEW_EXT_Cg_shader GLEW_GET_VAR(__GLEW_EXT_Cg_shader) - -#endif /* GL_EXT_Cg_shader */ - -/* ------------------------------ GL_EXT_abgr ------------------------------ */ - -#ifndef GL_EXT_abgr -#define GL_EXT_abgr 1 - -#define GL_ABGR_EXT 0x8000 - -#define GLEW_EXT_abgr GLEW_GET_VAR(__GLEW_EXT_abgr) - -#endif /* GL_EXT_abgr */ - -/* ------------------------------ GL_EXT_bgra ------------------------------ */ - -#ifndef GL_EXT_bgra -#define GL_EXT_bgra 1 - -#define GL_BGR_EXT 0x80E0 -#define GL_BGRA_EXT 0x80E1 - -#define GLEW_EXT_bgra GLEW_GET_VAR(__GLEW_EXT_bgra) - -#endif /* GL_EXT_bgra */ - -/* ------------------------ GL_EXT_bindable_uniform ------------------------ */ - -#ifndef GL_EXT_bindable_uniform -#define GL_EXT_bindable_uniform 1 - -#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 -#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 -#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 -#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED -#define GL_UNIFORM_BUFFER_EXT 0x8DEE -#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF - -typedef GLint (GLAPIENTRY * PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); -typedef GLintptr (GLAPIENTRY * PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); -typedef void (GLAPIENTRY * PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); - -#define glGetUniformBufferSizeEXT GLEW_GET_FUN(__glewGetUniformBufferSizeEXT) -#define glGetUniformOffsetEXT GLEW_GET_FUN(__glewGetUniformOffsetEXT) -#define glUniformBufferEXT GLEW_GET_FUN(__glewUniformBufferEXT) - -#define GLEW_EXT_bindable_uniform GLEW_GET_VAR(__GLEW_EXT_bindable_uniform) - -#endif /* GL_EXT_bindable_uniform */ - -/* --------------------------- GL_EXT_blend_color -------------------------- */ - -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 - -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 - -typedef void (GLAPIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); - -#define glBlendColorEXT GLEW_GET_FUN(__glewBlendColorEXT) - -#define GLEW_EXT_blend_color GLEW_GET_VAR(__GLEW_EXT_blend_color) - -#endif /* GL_EXT_blend_color */ - -/* --------------------- GL_EXT_blend_equation_separate -------------------- */ - -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 - -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); - -#define glBlendEquationSeparateEXT GLEW_GET_FUN(__glewBlendEquationSeparateEXT) - -#define GLEW_EXT_blend_equation_separate GLEW_GET_VAR(__GLEW_EXT_blend_equation_separate) - -#endif /* GL_EXT_blend_equation_separate */ - -/* ----------------------- GL_EXT_blend_func_separate ---------------------- */ - -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 - -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB - -typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); - -#define glBlendFuncSeparateEXT GLEW_GET_FUN(__glewBlendFuncSeparateEXT) - -#define GLEW_EXT_blend_func_separate GLEW_GET_VAR(__GLEW_EXT_blend_func_separate) - -#endif /* GL_EXT_blend_func_separate */ - -/* ------------------------- GL_EXT_blend_logic_op ------------------------- */ - -#ifndef GL_EXT_blend_logic_op -#define GL_EXT_blend_logic_op 1 - -#define GLEW_EXT_blend_logic_op GLEW_GET_VAR(__GLEW_EXT_blend_logic_op) - -#endif /* GL_EXT_blend_logic_op */ - -/* -------------------------- GL_EXT_blend_minmax -------------------------- */ - -#ifndef GL_EXT_blend_minmax -#define GL_EXT_blend_minmax 1 - -#define GL_FUNC_ADD_EXT 0x8006 -#define GL_MIN_EXT 0x8007 -#define GL_MAX_EXT 0x8008 -#define GL_BLEND_EQUATION_EXT 0x8009 - -typedef void (GLAPIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); - -#define glBlendEquationEXT GLEW_GET_FUN(__glewBlendEquationEXT) - -#define GLEW_EXT_blend_minmax GLEW_GET_VAR(__GLEW_EXT_blend_minmax) - -#endif /* GL_EXT_blend_minmax */ - -/* ------------------------- GL_EXT_blend_subtract ------------------------- */ - -#ifndef GL_EXT_blend_subtract -#define GL_EXT_blend_subtract 1 - -#define GL_FUNC_SUBTRACT_EXT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B - -#define GLEW_EXT_blend_subtract GLEW_GET_VAR(__GLEW_EXT_blend_subtract) - -#endif /* GL_EXT_blend_subtract */ - -/* ------------------------ GL_EXT_clip_volume_hint ------------------------ */ - -#ifndef GL_EXT_clip_volume_hint -#define GL_EXT_clip_volume_hint 1 - -#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 - -#define GLEW_EXT_clip_volume_hint GLEW_GET_VAR(__GLEW_EXT_clip_volume_hint) - -#endif /* GL_EXT_clip_volume_hint */ - -/* ------------------------------ GL_EXT_cmyka ----------------------------- */ - -#ifndef GL_EXT_cmyka -#define GL_EXT_cmyka 1 - -#define GL_CMYK_EXT 0x800C -#define GL_CMYKA_EXT 0x800D -#define GL_PACK_CMYK_HINT_EXT 0x800E -#define GL_UNPACK_CMYK_HINT_EXT 0x800F - -#define GLEW_EXT_cmyka GLEW_GET_VAR(__GLEW_EXT_cmyka) - -#endif /* GL_EXT_cmyka */ - -/* ------------------------- GL_EXT_color_subtable ------------------------- */ - -#ifndef GL_EXT_color_subtable -#define GL_EXT_color_subtable 1 - -typedef void (GLAPIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); - -#define glColorSubTableEXT GLEW_GET_FUN(__glewColorSubTableEXT) -#define glCopyColorSubTableEXT GLEW_GET_FUN(__glewCopyColorSubTableEXT) - -#define GLEW_EXT_color_subtable GLEW_GET_VAR(__GLEW_EXT_color_subtable) - -#endif /* GL_EXT_color_subtable */ - -/* ---------------------- GL_EXT_compiled_vertex_array --------------------- */ - -#ifndef GL_EXT_compiled_vertex_array -#define GL_EXT_compiled_vertex_array 1 - -#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 -#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 - -typedef void (GLAPIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void); - -#define glLockArraysEXT GLEW_GET_FUN(__glewLockArraysEXT) -#define glUnlockArraysEXT GLEW_GET_FUN(__glewUnlockArraysEXT) - -#define GLEW_EXT_compiled_vertex_array GLEW_GET_VAR(__GLEW_EXT_compiled_vertex_array) - -#endif /* GL_EXT_compiled_vertex_array */ - -/* --------------------------- GL_EXT_convolution -------------------------- */ - -#ifndef GL_EXT_convolution -#define GL_EXT_convolution 1 - -#define GL_CONVOLUTION_1D_EXT 0x8010 -#define GL_CONVOLUTION_2D_EXT 0x8011 -#define GL_SEPARABLE_2D_EXT 0x8012 -#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 -#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 -#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 -#define GL_REDUCE_EXT 0x8016 -#define GL_CONVOLUTION_FORMAT_EXT 0x8017 -#define GL_CONVOLUTION_WIDTH_EXT 0x8018 -#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 -#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A -#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B -#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C -#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D -#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E -#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F -#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 -#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 -#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 -#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 - -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span); -typedef void (GLAPIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column); - -#define glConvolutionFilter1DEXT GLEW_GET_FUN(__glewConvolutionFilter1DEXT) -#define glConvolutionFilter2DEXT GLEW_GET_FUN(__glewConvolutionFilter2DEXT) -#define glConvolutionParameterfEXT GLEW_GET_FUN(__glewConvolutionParameterfEXT) -#define glConvolutionParameterfvEXT GLEW_GET_FUN(__glewConvolutionParameterfvEXT) -#define glConvolutionParameteriEXT GLEW_GET_FUN(__glewConvolutionParameteriEXT) -#define glConvolutionParameterivEXT GLEW_GET_FUN(__glewConvolutionParameterivEXT) -#define glCopyConvolutionFilter1DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter1DEXT) -#define glCopyConvolutionFilter2DEXT GLEW_GET_FUN(__glewCopyConvolutionFilter2DEXT) -#define glGetConvolutionFilterEXT GLEW_GET_FUN(__glewGetConvolutionFilterEXT) -#define glGetConvolutionParameterfvEXT GLEW_GET_FUN(__glewGetConvolutionParameterfvEXT) -#define glGetConvolutionParameterivEXT GLEW_GET_FUN(__glewGetConvolutionParameterivEXT) -#define glGetSeparableFilterEXT GLEW_GET_FUN(__glewGetSeparableFilterEXT) -#define glSeparableFilter2DEXT GLEW_GET_FUN(__glewSeparableFilter2DEXT) - -#define GLEW_EXT_convolution GLEW_GET_VAR(__GLEW_EXT_convolution) - -#endif /* GL_EXT_convolution */ - -/* ------------------------ GL_EXT_coordinate_frame ------------------------ */ - -#ifndef GL_EXT_coordinate_frame -#define GL_EXT_coordinate_frame 1 - -#define GL_TANGENT_ARRAY_EXT 0x8439 -#define GL_BINORMAL_ARRAY_EXT 0x843A -#define GL_CURRENT_TANGENT_EXT 0x843B -#define GL_CURRENT_BINORMAL_EXT 0x843C -#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E -#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F -#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 -#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 -#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 -#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 -#define GL_MAP1_TANGENT_EXT 0x8444 -#define GL_MAP2_TANGENT_EXT 0x8445 -#define GL_MAP1_BINORMAL_EXT 0x8446 -#define GL_MAP2_BINORMAL_EXT 0x8447 - -typedef void (GLAPIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, GLvoid *pointer); - -#define glBinormalPointerEXT GLEW_GET_FUN(__glewBinormalPointerEXT) -#define glTangentPointerEXT GLEW_GET_FUN(__glewTangentPointerEXT) - -#define GLEW_EXT_coordinate_frame GLEW_GET_VAR(__GLEW_EXT_coordinate_frame) - -#endif /* GL_EXT_coordinate_frame */ - -/* -------------------------- GL_EXT_copy_texture -------------------------- */ - -#ifndef GL_EXT_copy_texture -#define GL_EXT_copy_texture 1 - -typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); - -#define glCopyTexImage1DEXT GLEW_GET_FUN(__glewCopyTexImage1DEXT) -#define glCopyTexImage2DEXT GLEW_GET_FUN(__glewCopyTexImage2DEXT) -#define glCopyTexSubImage1DEXT GLEW_GET_FUN(__glewCopyTexSubImage1DEXT) -#define glCopyTexSubImage2DEXT GLEW_GET_FUN(__glewCopyTexSubImage2DEXT) -#define glCopyTexSubImage3DEXT GLEW_GET_FUN(__glewCopyTexSubImage3DEXT) - -#define GLEW_EXT_copy_texture GLEW_GET_VAR(__GLEW_EXT_copy_texture) - -#endif /* GL_EXT_copy_texture */ - -/* --------------------------- GL_EXT_cull_vertex -------------------------- */ - -#ifndef GL_EXT_cull_vertex -#define GL_EXT_cull_vertex 1 - -#define GL_CULL_VERTEX_EXT 0x81AA -#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB -#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC - -typedef void (GLAPIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat* params); - -#define glCullParameterdvEXT GLEW_GET_FUN(__glewCullParameterdvEXT) -#define glCullParameterfvEXT GLEW_GET_FUN(__glewCullParameterfvEXT) - -#define GLEW_EXT_cull_vertex GLEW_GET_VAR(__GLEW_EXT_cull_vertex) - -#endif /* GL_EXT_cull_vertex */ - -/* -------------------------- GL_EXT_debug_marker -------------------------- */ - -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 - -typedef void (GLAPIENTRY * PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar* marker); -typedef void (GLAPIENTRY * PFNGLPOPGROUPMARKEREXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar* marker); - -#define glInsertEventMarkerEXT GLEW_GET_FUN(__glewInsertEventMarkerEXT) -#define glPopGroupMarkerEXT GLEW_GET_FUN(__glewPopGroupMarkerEXT) -#define glPushGroupMarkerEXT GLEW_GET_FUN(__glewPushGroupMarkerEXT) - -#define GLEW_EXT_debug_marker GLEW_GET_VAR(__GLEW_EXT_debug_marker) - -#endif /* GL_EXT_debug_marker */ - -/* ------------------------ GL_EXT_depth_bounds_test ----------------------- */ - -#ifndef GL_EXT_depth_bounds_test -#define GL_EXT_depth_bounds_test 1 - -#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 -#define GL_DEPTH_BOUNDS_EXT 0x8891 - -typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); - -#define glDepthBoundsEXT GLEW_GET_FUN(__glewDepthBoundsEXT) - -#define GLEW_EXT_depth_bounds_test GLEW_GET_VAR(__GLEW_EXT_depth_bounds_test) - -#endif /* GL_EXT_depth_bounds_test */ - -/* ----------------------- GL_EXT_direct_state_access ---------------------- */ - -#ifndef GL_EXT_direct_state_access -#define GL_EXT_direct_state_access 1 - -#define GL_PROGRAM_MATRIX_EXT 0x8E2D -#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E -#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F - -typedef void (GLAPIENTRY * PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); -typedef GLenum (GLAPIENTRY * PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); -typedef void (GLAPIENTRY * PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (GLAPIENTRY * PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); -typedef void (GLAPIENTRY * PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum* bufs); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); -typedef void (GLAPIENTRY * PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); -typedef void (GLAPIENTRY * PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLvoid *img); -typedef void (GLAPIENTRY * PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLvoid *img); -typedef void (GLAPIENTRY * PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void** params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, GLvoid *string); -typedef void (GLAPIENTRY * PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, GLvoid** params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint* param); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLvoid** param); -typedef void (GLAPIENTRY * PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, GLvoid** param); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); -typedef GLvoid * (GLAPIENTRY * PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); -typedef void (GLAPIENTRY * PFNGLMATRIXFRUSTUMEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum matrixMode); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXLOADFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTDEXTPROC) (GLenum matrixMode, const GLdouble* m); -typedef void (GLAPIENTRY * PFNGLMATRIXMULTFEXTPROC) (GLenum matrixMode, const GLfloat* m); -typedef void (GLAPIENTRY * PFNGLMATRIXORTHOEXTPROC) (GLenum matrixMode, GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f); -typedef void (GLAPIENTRY * PFNGLMATRIXPOPEXTPROC) (GLenum matrixMode); -typedef void (GLAPIENTRY * PFNGLMATRIXPUSHEXTPROC) (GLenum matrixMode); -typedef void (GLAPIENTRY * PFNGLMATRIXROTATEDEXTPROC) (GLenum matrixMode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLMATRIXROTATEFEXTPROC) (GLenum matrixMode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLMATRIXSCALEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLMATRIXSCALEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum matrixMode, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum matrixMode, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat* param); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint* param); -typedef void (GLAPIENTRY * PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const GLvoid *data, GLenum usage); -typedef void (GLAPIENTRY * PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const GLvoid *string); -typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint* params); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat* param); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint* param); -typedef void (GLAPIENTRY * PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); -typedef GLboolean (GLAPIENTRY * PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); - -#define glBindMultiTextureEXT GLEW_GET_FUN(__glewBindMultiTextureEXT) -#define glCheckNamedFramebufferStatusEXT GLEW_GET_FUN(__glewCheckNamedFramebufferStatusEXT) -#define glClientAttribDefaultEXT GLEW_GET_FUN(__glewClientAttribDefaultEXT) -#define glCompressedMultiTexImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage1DEXT) -#define glCompressedMultiTexImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage2DEXT) -#define glCompressedMultiTexImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexImage3DEXT) -#define glCompressedMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage1DEXT) -#define glCompressedMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage2DEXT) -#define glCompressedMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCompressedMultiTexSubImage3DEXT) -#define glCompressedTextureImage1DEXT GLEW_GET_FUN(__glewCompressedTextureImage1DEXT) -#define glCompressedTextureImage2DEXT GLEW_GET_FUN(__glewCompressedTextureImage2DEXT) -#define glCompressedTextureImage3DEXT GLEW_GET_FUN(__glewCompressedTextureImage3DEXT) -#define glCompressedTextureSubImage1DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage1DEXT) -#define glCompressedTextureSubImage2DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage2DEXT) -#define glCompressedTextureSubImage3DEXT GLEW_GET_FUN(__glewCompressedTextureSubImage3DEXT) -#define glCopyMultiTexImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexImage1DEXT) -#define glCopyMultiTexImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexImage2DEXT) -#define glCopyMultiTexSubImage1DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage1DEXT) -#define glCopyMultiTexSubImage2DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage2DEXT) -#define glCopyMultiTexSubImage3DEXT GLEW_GET_FUN(__glewCopyMultiTexSubImage3DEXT) -#define glCopyTextureImage1DEXT GLEW_GET_FUN(__glewCopyTextureImage1DEXT) -#define glCopyTextureImage2DEXT GLEW_GET_FUN(__glewCopyTextureImage2DEXT) -#define glCopyTextureSubImage1DEXT GLEW_GET_FUN(__glewCopyTextureSubImage1DEXT) -#define glCopyTextureSubImage2DEXT GLEW_GET_FUN(__glewCopyTextureSubImage2DEXT) -#define glCopyTextureSubImage3DEXT GLEW_GET_FUN(__glewCopyTextureSubImage3DEXT) -#define glDisableClientStateIndexedEXT GLEW_GET_FUN(__glewDisableClientStateIndexedEXT) -#define glDisableClientStateiEXT GLEW_GET_FUN(__glewDisableClientStateiEXT) -#define glDisableVertexArrayAttribEXT GLEW_GET_FUN(__glewDisableVertexArrayAttribEXT) -#define glDisableVertexArrayEXT GLEW_GET_FUN(__glewDisableVertexArrayEXT) -#define glEnableClientStateIndexedEXT GLEW_GET_FUN(__glewEnableClientStateIndexedEXT) -#define glEnableClientStateiEXT GLEW_GET_FUN(__glewEnableClientStateiEXT) -#define glEnableVertexArrayAttribEXT GLEW_GET_FUN(__glewEnableVertexArrayAttribEXT) -#define glEnableVertexArrayEXT GLEW_GET_FUN(__glewEnableVertexArrayEXT) -#define glFlushMappedNamedBufferRangeEXT GLEW_GET_FUN(__glewFlushMappedNamedBufferRangeEXT) -#define glFramebufferDrawBufferEXT GLEW_GET_FUN(__glewFramebufferDrawBufferEXT) -#define glFramebufferDrawBuffersEXT GLEW_GET_FUN(__glewFramebufferDrawBuffersEXT) -#define glFramebufferReadBufferEXT GLEW_GET_FUN(__glewFramebufferReadBufferEXT) -#define glGenerateMultiTexMipmapEXT GLEW_GET_FUN(__glewGenerateMultiTexMipmapEXT) -#define glGenerateTextureMipmapEXT GLEW_GET_FUN(__glewGenerateTextureMipmapEXT) -#define glGetCompressedMultiTexImageEXT GLEW_GET_FUN(__glewGetCompressedMultiTexImageEXT) -#define glGetCompressedTextureImageEXT GLEW_GET_FUN(__glewGetCompressedTextureImageEXT) -#define glGetDoubleIndexedvEXT GLEW_GET_FUN(__glewGetDoubleIndexedvEXT) -#define glGetDoublei_vEXT GLEW_GET_FUN(__glewGetDoublei_vEXT) -#define glGetFloatIndexedvEXT GLEW_GET_FUN(__glewGetFloatIndexedvEXT) -#define glGetFloati_vEXT GLEW_GET_FUN(__glewGetFloati_vEXT) -#define glGetFramebufferParameterivEXT GLEW_GET_FUN(__glewGetFramebufferParameterivEXT) -#define glGetMultiTexEnvfvEXT GLEW_GET_FUN(__glewGetMultiTexEnvfvEXT) -#define glGetMultiTexEnvivEXT GLEW_GET_FUN(__glewGetMultiTexEnvivEXT) -#define glGetMultiTexGendvEXT GLEW_GET_FUN(__glewGetMultiTexGendvEXT) -#define glGetMultiTexGenfvEXT GLEW_GET_FUN(__glewGetMultiTexGenfvEXT) -#define glGetMultiTexGenivEXT GLEW_GET_FUN(__glewGetMultiTexGenivEXT) -#define glGetMultiTexImageEXT GLEW_GET_FUN(__glewGetMultiTexImageEXT) -#define glGetMultiTexLevelParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterfvEXT) -#define glGetMultiTexLevelParameterivEXT GLEW_GET_FUN(__glewGetMultiTexLevelParameterivEXT) -#define glGetMultiTexParameterIivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIivEXT) -#define glGetMultiTexParameterIuivEXT GLEW_GET_FUN(__glewGetMultiTexParameterIuivEXT) -#define glGetMultiTexParameterfvEXT GLEW_GET_FUN(__glewGetMultiTexParameterfvEXT) -#define glGetMultiTexParameterivEXT GLEW_GET_FUN(__glewGetMultiTexParameterivEXT) -#define glGetNamedBufferParameterivEXT GLEW_GET_FUN(__glewGetNamedBufferParameterivEXT) -#define glGetNamedBufferPointervEXT GLEW_GET_FUN(__glewGetNamedBufferPointervEXT) -#define glGetNamedBufferSubDataEXT GLEW_GET_FUN(__glewGetNamedBufferSubDataEXT) -#define glGetNamedFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetNamedFramebufferAttachmentParameterivEXT) -#define glGetNamedProgramLocalParameterIivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIivEXT) -#define glGetNamedProgramLocalParameterIuivEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterIuivEXT) -#define glGetNamedProgramLocalParameterdvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterdvEXT) -#define glGetNamedProgramLocalParameterfvEXT GLEW_GET_FUN(__glewGetNamedProgramLocalParameterfvEXT) -#define glGetNamedProgramStringEXT GLEW_GET_FUN(__glewGetNamedProgramStringEXT) -#define glGetNamedProgramivEXT GLEW_GET_FUN(__glewGetNamedProgramivEXT) -#define glGetNamedRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetNamedRenderbufferParameterivEXT) -#define glGetPointerIndexedvEXT GLEW_GET_FUN(__glewGetPointerIndexedvEXT) -#define glGetPointeri_vEXT GLEW_GET_FUN(__glewGetPointeri_vEXT) -#define glGetTextureImageEXT GLEW_GET_FUN(__glewGetTextureImageEXT) -#define glGetTextureLevelParameterfvEXT GLEW_GET_FUN(__glewGetTextureLevelParameterfvEXT) -#define glGetTextureLevelParameterivEXT GLEW_GET_FUN(__glewGetTextureLevelParameterivEXT) -#define glGetTextureParameterIivEXT GLEW_GET_FUN(__glewGetTextureParameterIivEXT) -#define glGetTextureParameterIuivEXT GLEW_GET_FUN(__glewGetTextureParameterIuivEXT) -#define glGetTextureParameterfvEXT GLEW_GET_FUN(__glewGetTextureParameterfvEXT) -#define glGetTextureParameterivEXT GLEW_GET_FUN(__glewGetTextureParameterivEXT) -#define glGetVertexArrayIntegeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayIntegeri_vEXT) -#define glGetVertexArrayIntegervEXT GLEW_GET_FUN(__glewGetVertexArrayIntegervEXT) -#define glGetVertexArrayPointeri_vEXT GLEW_GET_FUN(__glewGetVertexArrayPointeri_vEXT) -#define glGetVertexArrayPointervEXT GLEW_GET_FUN(__glewGetVertexArrayPointervEXT) -#define glMapNamedBufferEXT GLEW_GET_FUN(__glewMapNamedBufferEXT) -#define glMapNamedBufferRangeEXT GLEW_GET_FUN(__glewMapNamedBufferRangeEXT) -#define glMatrixFrustumEXT GLEW_GET_FUN(__glewMatrixFrustumEXT) -#define glMatrixLoadIdentityEXT GLEW_GET_FUN(__glewMatrixLoadIdentityEXT) -#define glMatrixLoadTransposedEXT GLEW_GET_FUN(__glewMatrixLoadTransposedEXT) -#define glMatrixLoadTransposefEXT GLEW_GET_FUN(__glewMatrixLoadTransposefEXT) -#define glMatrixLoaddEXT GLEW_GET_FUN(__glewMatrixLoaddEXT) -#define glMatrixLoadfEXT GLEW_GET_FUN(__glewMatrixLoadfEXT) -#define glMatrixMultTransposedEXT GLEW_GET_FUN(__glewMatrixMultTransposedEXT) -#define glMatrixMultTransposefEXT GLEW_GET_FUN(__glewMatrixMultTransposefEXT) -#define glMatrixMultdEXT GLEW_GET_FUN(__glewMatrixMultdEXT) -#define glMatrixMultfEXT GLEW_GET_FUN(__glewMatrixMultfEXT) -#define glMatrixOrthoEXT GLEW_GET_FUN(__glewMatrixOrthoEXT) -#define glMatrixPopEXT GLEW_GET_FUN(__glewMatrixPopEXT) -#define glMatrixPushEXT GLEW_GET_FUN(__glewMatrixPushEXT) -#define glMatrixRotatedEXT GLEW_GET_FUN(__glewMatrixRotatedEXT) -#define glMatrixRotatefEXT GLEW_GET_FUN(__glewMatrixRotatefEXT) -#define glMatrixScaledEXT GLEW_GET_FUN(__glewMatrixScaledEXT) -#define glMatrixScalefEXT GLEW_GET_FUN(__glewMatrixScalefEXT) -#define glMatrixTranslatedEXT GLEW_GET_FUN(__glewMatrixTranslatedEXT) -#define glMatrixTranslatefEXT GLEW_GET_FUN(__glewMatrixTranslatefEXT) -#define glMultiTexBufferEXT GLEW_GET_FUN(__glewMultiTexBufferEXT) -#define glMultiTexCoordPointerEXT GLEW_GET_FUN(__glewMultiTexCoordPointerEXT) -#define glMultiTexEnvfEXT GLEW_GET_FUN(__glewMultiTexEnvfEXT) -#define glMultiTexEnvfvEXT GLEW_GET_FUN(__glewMultiTexEnvfvEXT) -#define glMultiTexEnviEXT GLEW_GET_FUN(__glewMultiTexEnviEXT) -#define glMultiTexEnvivEXT GLEW_GET_FUN(__glewMultiTexEnvivEXT) -#define glMultiTexGendEXT GLEW_GET_FUN(__glewMultiTexGendEXT) -#define glMultiTexGendvEXT GLEW_GET_FUN(__glewMultiTexGendvEXT) -#define glMultiTexGenfEXT GLEW_GET_FUN(__glewMultiTexGenfEXT) -#define glMultiTexGenfvEXT GLEW_GET_FUN(__glewMultiTexGenfvEXT) -#define glMultiTexGeniEXT GLEW_GET_FUN(__glewMultiTexGeniEXT) -#define glMultiTexGenivEXT GLEW_GET_FUN(__glewMultiTexGenivEXT) -#define glMultiTexImage1DEXT GLEW_GET_FUN(__glewMultiTexImage1DEXT) -#define glMultiTexImage2DEXT GLEW_GET_FUN(__glewMultiTexImage2DEXT) -#define glMultiTexImage3DEXT GLEW_GET_FUN(__glewMultiTexImage3DEXT) -#define glMultiTexParameterIivEXT GLEW_GET_FUN(__glewMultiTexParameterIivEXT) -#define glMultiTexParameterIuivEXT GLEW_GET_FUN(__glewMultiTexParameterIuivEXT) -#define glMultiTexParameterfEXT GLEW_GET_FUN(__glewMultiTexParameterfEXT) -#define glMultiTexParameterfvEXT GLEW_GET_FUN(__glewMultiTexParameterfvEXT) -#define glMultiTexParameteriEXT GLEW_GET_FUN(__glewMultiTexParameteriEXT) -#define glMultiTexParameterivEXT GLEW_GET_FUN(__glewMultiTexParameterivEXT) -#define glMultiTexRenderbufferEXT GLEW_GET_FUN(__glewMultiTexRenderbufferEXT) -#define glMultiTexSubImage1DEXT GLEW_GET_FUN(__glewMultiTexSubImage1DEXT) -#define glMultiTexSubImage2DEXT GLEW_GET_FUN(__glewMultiTexSubImage2DEXT) -#define glMultiTexSubImage3DEXT GLEW_GET_FUN(__glewMultiTexSubImage3DEXT) -#define glNamedBufferDataEXT GLEW_GET_FUN(__glewNamedBufferDataEXT) -#define glNamedBufferSubDataEXT GLEW_GET_FUN(__glewNamedBufferSubDataEXT) -#define glNamedCopyBufferSubDataEXT GLEW_GET_FUN(__glewNamedCopyBufferSubDataEXT) -#define glNamedFramebufferRenderbufferEXT GLEW_GET_FUN(__glewNamedFramebufferRenderbufferEXT) -#define glNamedFramebufferTexture1DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture1DEXT) -#define glNamedFramebufferTexture2DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture2DEXT) -#define glNamedFramebufferTexture3DEXT GLEW_GET_FUN(__glewNamedFramebufferTexture3DEXT) -#define glNamedFramebufferTextureEXT GLEW_GET_FUN(__glewNamedFramebufferTextureEXT) -#define glNamedFramebufferTextureFaceEXT GLEW_GET_FUN(__glewNamedFramebufferTextureFaceEXT) -#define glNamedFramebufferTextureLayerEXT GLEW_GET_FUN(__glewNamedFramebufferTextureLayerEXT) -#define glNamedProgramLocalParameter4dEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dEXT) -#define glNamedProgramLocalParameter4dvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4dvEXT) -#define glNamedProgramLocalParameter4fEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fEXT) -#define glNamedProgramLocalParameter4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameter4fvEXT) -#define glNamedProgramLocalParameterI4iEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4iEXT) -#define glNamedProgramLocalParameterI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4ivEXT) -#define glNamedProgramLocalParameterI4uiEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uiEXT) -#define glNamedProgramLocalParameterI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParameterI4uivEXT) -#define glNamedProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewNamedProgramLocalParameters4fvEXT) -#define glNamedProgramLocalParametersI4ivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4ivEXT) -#define glNamedProgramLocalParametersI4uivEXT GLEW_GET_FUN(__glewNamedProgramLocalParametersI4uivEXT) -#define glNamedProgramStringEXT GLEW_GET_FUN(__glewNamedProgramStringEXT) -#define glNamedRenderbufferStorageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageEXT) -#define glNamedRenderbufferStorageMultisampleCoverageEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleCoverageEXT) -#define glNamedRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewNamedRenderbufferStorageMultisampleEXT) -#define glProgramUniform1fEXT GLEW_GET_FUN(__glewProgramUniform1fEXT) -#define glProgramUniform1fvEXT GLEW_GET_FUN(__glewProgramUniform1fvEXT) -#define glProgramUniform1iEXT GLEW_GET_FUN(__glewProgramUniform1iEXT) -#define glProgramUniform1ivEXT GLEW_GET_FUN(__glewProgramUniform1ivEXT) -#define glProgramUniform1uiEXT GLEW_GET_FUN(__glewProgramUniform1uiEXT) -#define glProgramUniform1uivEXT GLEW_GET_FUN(__glewProgramUniform1uivEXT) -#define glProgramUniform2fEXT GLEW_GET_FUN(__glewProgramUniform2fEXT) -#define glProgramUniform2fvEXT GLEW_GET_FUN(__glewProgramUniform2fvEXT) -#define glProgramUniform2iEXT GLEW_GET_FUN(__glewProgramUniform2iEXT) -#define glProgramUniform2ivEXT GLEW_GET_FUN(__glewProgramUniform2ivEXT) -#define glProgramUniform2uiEXT GLEW_GET_FUN(__glewProgramUniform2uiEXT) -#define glProgramUniform2uivEXT GLEW_GET_FUN(__glewProgramUniform2uivEXT) -#define glProgramUniform3fEXT GLEW_GET_FUN(__glewProgramUniform3fEXT) -#define glProgramUniform3fvEXT GLEW_GET_FUN(__glewProgramUniform3fvEXT) -#define glProgramUniform3iEXT GLEW_GET_FUN(__glewProgramUniform3iEXT) -#define glProgramUniform3ivEXT GLEW_GET_FUN(__glewProgramUniform3ivEXT) -#define glProgramUniform3uiEXT GLEW_GET_FUN(__glewProgramUniform3uiEXT) -#define glProgramUniform3uivEXT GLEW_GET_FUN(__glewProgramUniform3uivEXT) -#define glProgramUniform4fEXT GLEW_GET_FUN(__glewProgramUniform4fEXT) -#define glProgramUniform4fvEXT GLEW_GET_FUN(__glewProgramUniform4fvEXT) -#define glProgramUniform4iEXT GLEW_GET_FUN(__glewProgramUniform4iEXT) -#define glProgramUniform4ivEXT GLEW_GET_FUN(__glewProgramUniform4ivEXT) -#define glProgramUniform4uiEXT GLEW_GET_FUN(__glewProgramUniform4uiEXT) -#define glProgramUniform4uivEXT GLEW_GET_FUN(__glewProgramUniform4uivEXT) -#define glProgramUniformMatrix2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2fvEXT) -#define glProgramUniformMatrix2x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x3fvEXT) -#define glProgramUniformMatrix2x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix2x4fvEXT) -#define glProgramUniformMatrix3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3fvEXT) -#define glProgramUniformMatrix3x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x2fvEXT) -#define glProgramUniformMatrix3x4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix3x4fvEXT) -#define glProgramUniformMatrix4fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4fvEXT) -#define glProgramUniformMatrix4x2fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x2fvEXT) -#define glProgramUniformMatrix4x3fvEXT GLEW_GET_FUN(__glewProgramUniformMatrix4x3fvEXT) -#define glPushClientAttribDefaultEXT GLEW_GET_FUN(__glewPushClientAttribDefaultEXT) -#define glTextureBufferEXT GLEW_GET_FUN(__glewTextureBufferEXT) -#define glTextureImage1DEXT GLEW_GET_FUN(__glewTextureImage1DEXT) -#define glTextureImage2DEXT GLEW_GET_FUN(__glewTextureImage2DEXT) -#define glTextureImage3DEXT GLEW_GET_FUN(__glewTextureImage3DEXT) -#define glTextureParameterIivEXT GLEW_GET_FUN(__glewTextureParameterIivEXT) -#define glTextureParameterIuivEXT GLEW_GET_FUN(__glewTextureParameterIuivEXT) -#define glTextureParameterfEXT GLEW_GET_FUN(__glewTextureParameterfEXT) -#define glTextureParameterfvEXT GLEW_GET_FUN(__glewTextureParameterfvEXT) -#define glTextureParameteriEXT GLEW_GET_FUN(__glewTextureParameteriEXT) -#define glTextureParameterivEXT GLEW_GET_FUN(__glewTextureParameterivEXT) -#define glTextureRenderbufferEXT GLEW_GET_FUN(__glewTextureRenderbufferEXT) -#define glTextureSubImage1DEXT GLEW_GET_FUN(__glewTextureSubImage1DEXT) -#define glTextureSubImage2DEXT GLEW_GET_FUN(__glewTextureSubImage2DEXT) -#define glTextureSubImage3DEXT GLEW_GET_FUN(__glewTextureSubImage3DEXT) -#define glUnmapNamedBufferEXT GLEW_GET_FUN(__glewUnmapNamedBufferEXT) -#define glVertexArrayColorOffsetEXT GLEW_GET_FUN(__glewVertexArrayColorOffsetEXT) -#define glVertexArrayEdgeFlagOffsetEXT GLEW_GET_FUN(__glewVertexArrayEdgeFlagOffsetEXT) -#define glVertexArrayFogCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayFogCoordOffsetEXT) -#define glVertexArrayIndexOffsetEXT GLEW_GET_FUN(__glewVertexArrayIndexOffsetEXT) -#define glVertexArrayMultiTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayMultiTexCoordOffsetEXT) -#define glVertexArrayNormalOffsetEXT GLEW_GET_FUN(__glewVertexArrayNormalOffsetEXT) -#define glVertexArraySecondaryColorOffsetEXT GLEW_GET_FUN(__glewVertexArraySecondaryColorOffsetEXT) -#define glVertexArrayTexCoordOffsetEXT GLEW_GET_FUN(__glewVertexArrayTexCoordOffsetEXT) -#define glVertexArrayVertexAttribIOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribIOffsetEXT) -#define glVertexArrayVertexAttribOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribOffsetEXT) -#define glVertexArrayVertexOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexOffsetEXT) - -#define GLEW_EXT_direct_state_access GLEW_GET_VAR(__GLEW_EXT_direct_state_access) - -#endif /* GL_EXT_direct_state_access */ - -/* -------------------------- GL_EXT_draw_buffers2 ------------------------- */ - -#ifndef GL_EXT_draw_buffers2 -#define GL_EXT_draw_buffers2 1 - -typedef void (GLAPIENTRY * PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -typedef void (GLAPIENTRY * PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (GLAPIENTRY * PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); -typedef void (GLAPIENTRY * PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum value, GLuint index, GLboolean* data); -typedef void (GLAPIENTRY * PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum value, GLuint index, GLint* data); -typedef GLboolean (GLAPIENTRY * PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); - -#define glColorMaskIndexedEXT GLEW_GET_FUN(__glewColorMaskIndexedEXT) -#define glDisableIndexedEXT GLEW_GET_FUN(__glewDisableIndexedEXT) -#define glEnableIndexedEXT GLEW_GET_FUN(__glewEnableIndexedEXT) -#define glGetBooleanIndexedvEXT GLEW_GET_FUN(__glewGetBooleanIndexedvEXT) -#define glGetIntegerIndexedvEXT GLEW_GET_FUN(__glewGetIntegerIndexedvEXT) -#define glIsEnabledIndexedEXT GLEW_GET_FUN(__glewIsEnabledIndexedEXT) - -#define GLEW_EXT_draw_buffers2 GLEW_GET_VAR(__GLEW_EXT_draw_buffers2) - -#endif /* GL_EXT_draw_buffers2 */ - -/* ------------------------- GL_EXT_draw_instanced ------------------------- */ - -#ifndef GL_EXT_draw_instanced -#define GL_EXT_draw_instanced 1 - -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount); - -#define glDrawArraysInstancedEXT GLEW_GET_FUN(__glewDrawArraysInstancedEXT) -#define glDrawElementsInstancedEXT GLEW_GET_FUN(__glewDrawElementsInstancedEXT) - -#define GLEW_EXT_draw_instanced GLEW_GET_VAR(__GLEW_EXT_draw_instanced) - -#endif /* GL_EXT_draw_instanced */ - -/* ----------------------- GL_EXT_draw_range_elements ---------------------- */ - -#ifndef GL_EXT_draw_range_elements -#define GL_EXT_draw_range_elements 1 - -#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 -#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 - -typedef void (GLAPIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); - -#define glDrawRangeElementsEXT GLEW_GET_FUN(__glewDrawRangeElementsEXT) - -#define GLEW_EXT_draw_range_elements GLEW_GET_VAR(__GLEW_EXT_draw_range_elements) - -#endif /* GL_EXT_draw_range_elements */ - -/* ---------------------------- GL_EXT_fog_coord --------------------------- */ - -#ifndef GL_EXT_fog_coord -#define GL_EXT_fog_coord 1 - -#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 -#define GL_FOG_COORDINATE_EXT 0x8451 -#define GL_FRAGMENT_DEPTH_EXT 0x8452 -#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 -#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 - -typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); - -#define glFogCoordPointerEXT GLEW_GET_FUN(__glewFogCoordPointerEXT) -#define glFogCoorddEXT GLEW_GET_FUN(__glewFogCoorddEXT) -#define glFogCoorddvEXT GLEW_GET_FUN(__glewFogCoorddvEXT) -#define glFogCoordfEXT GLEW_GET_FUN(__glewFogCoordfEXT) -#define glFogCoordfvEXT GLEW_GET_FUN(__glewFogCoordfvEXT) - -#define GLEW_EXT_fog_coord GLEW_GET_VAR(__GLEW_EXT_fog_coord) - -#endif /* GL_EXT_fog_coord */ - -/* ------------------------ GL_EXT_fragment_lighting ----------------------- */ - -#ifndef GL_EXT_fragment_lighting -#define GL_EXT_fragment_lighting 1 - -#define GL_FRAGMENT_LIGHTING_EXT 0x8400 -#define GL_FRAGMENT_COLOR_MATERIAL_EXT 0x8401 -#define GL_FRAGMENT_COLOR_MATERIAL_FACE_EXT 0x8402 -#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_EXT 0x8403 -#define GL_MAX_FRAGMENT_LIGHTS_EXT 0x8404 -#define GL_MAX_ACTIVE_LIGHTS_EXT 0x8405 -#define GL_CURRENT_RASTER_NORMAL_EXT 0x8406 -#define GL_LIGHT_ENV_MODE_EXT 0x8407 -#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_EXT 0x8408 -#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_EXT 0x8409 -#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_EXT 0x840A -#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_EXT 0x840B -#define GL_FRAGMENT_LIGHT0_EXT 0x840C -#define GL_FRAGMENT_LIGHT7_EXT 0x8413 - -typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALEXTPROC) (GLenum face, GLenum mode); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFEXTPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVEXTPROC) (GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIEXTPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVEXTPROC) (GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFEXTPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIEXTPROC) (GLenum light, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFEXTPROC) (GLenum face, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIEXTPROC) (GLenum face, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVEXTPROC) (GLenum light, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVEXTPROC) (GLenum light, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVEXTPROC) (GLenum face, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVEXTPROC) (GLenum face, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLLIGHTENVIEXTPROC) (GLenum pname, GLint param); - -#define glFragmentColorMaterialEXT GLEW_GET_FUN(__glewFragmentColorMaterialEXT) -#define glFragmentLightModelfEXT GLEW_GET_FUN(__glewFragmentLightModelfEXT) -#define glFragmentLightModelfvEXT GLEW_GET_FUN(__glewFragmentLightModelfvEXT) -#define glFragmentLightModeliEXT GLEW_GET_FUN(__glewFragmentLightModeliEXT) -#define glFragmentLightModelivEXT GLEW_GET_FUN(__glewFragmentLightModelivEXT) -#define glFragmentLightfEXT GLEW_GET_FUN(__glewFragmentLightfEXT) -#define glFragmentLightfvEXT GLEW_GET_FUN(__glewFragmentLightfvEXT) -#define glFragmentLightiEXT GLEW_GET_FUN(__glewFragmentLightiEXT) -#define glFragmentLightivEXT GLEW_GET_FUN(__glewFragmentLightivEXT) -#define glFragmentMaterialfEXT GLEW_GET_FUN(__glewFragmentMaterialfEXT) -#define glFragmentMaterialfvEXT GLEW_GET_FUN(__glewFragmentMaterialfvEXT) -#define glFragmentMaterialiEXT GLEW_GET_FUN(__glewFragmentMaterialiEXT) -#define glFragmentMaterialivEXT GLEW_GET_FUN(__glewFragmentMaterialivEXT) -#define glGetFragmentLightfvEXT GLEW_GET_FUN(__glewGetFragmentLightfvEXT) -#define glGetFragmentLightivEXT GLEW_GET_FUN(__glewGetFragmentLightivEXT) -#define glGetFragmentMaterialfvEXT GLEW_GET_FUN(__glewGetFragmentMaterialfvEXT) -#define glGetFragmentMaterialivEXT GLEW_GET_FUN(__glewGetFragmentMaterialivEXT) -#define glLightEnviEXT GLEW_GET_FUN(__glewLightEnviEXT) - -#define GLEW_EXT_fragment_lighting GLEW_GET_VAR(__GLEW_EXT_fragment_lighting) - -#endif /* GL_EXT_fragment_lighting */ - -/* ------------------------ GL_EXT_framebuffer_blit ------------------------ */ - -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 - -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA - -typedef void (GLAPIENTRY * PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); - -#define glBlitFramebufferEXT GLEW_GET_FUN(__glewBlitFramebufferEXT) - -#define GLEW_EXT_framebuffer_blit GLEW_GET_VAR(__GLEW_EXT_framebuffer_blit) - -#endif /* GL_EXT_framebuffer_blit */ - -/* --------------------- GL_EXT_framebuffer_multisample -------------------- */ - -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 - -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 - -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glRenderbufferStorageMultisampleEXT GLEW_GET_FUN(__glewRenderbufferStorageMultisampleEXT) - -#define GLEW_EXT_framebuffer_multisample GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample) - -#endif /* GL_EXT_framebuffer_multisample */ - -/* --------------- GL_EXT_framebuffer_multisample_blit_scaled -------------- */ - -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_EXT_framebuffer_multisample_blit_scaled 1 - -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB - -#define GLEW_EXT_framebuffer_multisample_blit_scaled GLEW_GET_VAR(__GLEW_EXT_framebuffer_multisample_blit_scaled) - -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ - -/* ----------------------- GL_EXT_framebuffer_object ----------------------- */ - -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 - -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 - -typedef void (GLAPIENTRY * PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); -typedef void (GLAPIENTRY * PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); -typedef GLenum (GLAPIENTRY * PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -typedef void (GLAPIENTRY * PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint* framebuffers); -typedef void (GLAPIENTRY * PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint* renderbuffers); -typedef void (GLAPIENTRY * PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); -typedef GLboolean (GLAPIENTRY * PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); - -#define glBindFramebufferEXT GLEW_GET_FUN(__glewBindFramebufferEXT) -#define glBindRenderbufferEXT GLEW_GET_FUN(__glewBindRenderbufferEXT) -#define glCheckFramebufferStatusEXT GLEW_GET_FUN(__glewCheckFramebufferStatusEXT) -#define glDeleteFramebuffersEXT GLEW_GET_FUN(__glewDeleteFramebuffersEXT) -#define glDeleteRenderbuffersEXT GLEW_GET_FUN(__glewDeleteRenderbuffersEXT) -#define glFramebufferRenderbufferEXT GLEW_GET_FUN(__glewFramebufferRenderbufferEXT) -#define glFramebufferTexture1DEXT GLEW_GET_FUN(__glewFramebufferTexture1DEXT) -#define glFramebufferTexture2DEXT GLEW_GET_FUN(__glewFramebufferTexture2DEXT) -#define glFramebufferTexture3DEXT GLEW_GET_FUN(__glewFramebufferTexture3DEXT) -#define glGenFramebuffersEXT GLEW_GET_FUN(__glewGenFramebuffersEXT) -#define glGenRenderbuffersEXT GLEW_GET_FUN(__glewGenRenderbuffersEXT) -#define glGenerateMipmapEXT GLEW_GET_FUN(__glewGenerateMipmapEXT) -#define glGetFramebufferAttachmentParameterivEXT GLEW_GET_FUN(__glewGetFramebufferAttachmentParameterivEXT) -#define glGetRenderbufferParameterivEXT GLEW_GET_FUN(__glewGetRenderbufferParameterivEXT) -#define glIsFramebufferEXT GLEW_GET_FUN(__glewIsFramebufferEXT) -#define glIsRenderbufferEXT GLEW_GET_FUN(__glewIsRenderbufferEXT) -#define glRenderbufferStorageEXT GLEW_GET_FUN(__glewRenderbufferStorageEXT) - -#define GLEW_EXT_framebuffer_object GLEW_GET_VAR(__GLEW_EXT_framebuffer_object) - -#endif /* GL_EXT_framebuffer_object */ - -/* ------------------------ GL_EXT_framebuffer_sRGB ------------------------ */ - -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 - -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA - -#define GLEW_EXT_framebuffer_sRGB GLEW_GET_VAR(__GLEW_EXT_framebuffer_sRGB) - -#endif /* GL_EXT_framebuffer_sRGB */ - -/* ------------------------ GL_EXT_geometry_shader4 ------------------------ */ - -#ifndef GL_EXT_geometry_shader4 -#define GL_EXT_geometry_shader4 1 - -#define GL_LINES_ADJACENCY_EXT 0xA -#define GL_LINE_STRIP_ADJACENCY_EXT 0xB -#define GL_TRIANGLES_ADJACENCY_EXT 0xC -#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0xD -#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 -#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 -#define GL_GEOMETRY_SHADER_EXT 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA -#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB -#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC -#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD -#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); - -#define glFramebufferTextureEXT GLEW_GET_FUN(__glewFramebufferTextureEXT) -#define glFramebufferTextureFaceEXT GLEW_GET_FUN(__glewFramebufferTextureFaceEXT) -#define glProgramParameteriEXT GLEW_GET_FUN(__glewProgramParameteriEXT) - -#define GLEW_EXT_geometry_shader4 GLEW_GET_VAR(__GLEW_EXT_geometry_shader4) - -#endif /* GL_EXT_geometry_shader4 */ - -/* --------------------- GL_EXT_gpu_program_parameters --------------------- */ - -#ifndef GL_EXT_gpu_program_parameters -#define GL_EXT_gpu_program_parameters 1 - -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat* params); - -#define glProgramEnvParameters4fvEXT GLEW_GET_FUN(__glewProgramEnvParameters4fvEXT) -#define glProgramLocalParameters4fvEXT GLEW_GET_FUN(__glewProgramLocalParameters4fvEXT) - -#define GLEW_EXT_gpu_program_parameters GLEW_GET_VAR(__GLEW_EXT_gpu_program_parameters) - -#endif /* GL_EXT_gpu_program_parameters */ - -/* --------------------------- GL_EXT_gpu_shader4 -------------------------- */ - -#ifndef GL_EXT_gpu_shader4 -#define GL_EXT_gpu_shader4 1 - -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD -#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 -#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 -#define GL_SAMPLER_BUFFER_EXT 0x8DC2 -#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 -#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 -#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 -#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 -#define GL_INT_SAMPLER_1D_EXT 0x8DC9 -#define GL_INT_SAMPLER_2D_EXT 0x8DCA -#define GL_INT_SAMPLER_3D_EXT 0x8DCB -#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC -#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD -#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF -#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 - -typedef void (GLAPIENTRY * PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); -typedef GLint (GLAPIENTRY * PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - -#define glBindFragDataLocationEXT GLEW_GET_FUN(__glewBindFragDataLocationEXT) -#define glGetFragDataLocationEXT GLEW_GET_FUN(__glewGetFragDataLocationEXT) -#define glGetUniformuivEXT GLEW_GET_FUN(__glewGetUniformuivEXT) -#define glGetVertexAttribIivEXT GLEW_GET_FUN(__glewGetVertexAttribIivEXT) -#define glGetVertexAttribIuivEXT GLEW_GET_FUN(__glewGetVertexAttribIuivEXT) -#define glUniform1uiEXT GLEW_GET_FUN(__glewUniform1uiEXT) -#define glUniform1uivEXT GLEW_GET_FUN(__glewUniform1uivEXT) -#define glUniform2uiEXT GLEW_GET_FUN(__glewUniform2uiEXT) -#define glUniform2uivEXT GLEW_GET_FUN(__glewUniform2uivEXT) -#define glUniform3uiEXT GLEW_GET_FUN(__glewUniform3uiEXT) -#define glUniform3uivEXT GLEW_GET_FUN(__glewUniform3uivEXT) -#define glUniform4uiEXT GLEW_GET_FUN(__glewUniform4uiEXT) -#define glUniform4uivEXT GLEW_GET_FUN(__glewUniform4uivEXT) -#define glVertexAttribI1iEXT GLEW_GET_FUN(__glewVertexAttribI1iEXT) -#define glVertexAttribI1ivEXT GLEW_GET_FUN(__glewVertexAttribI1ivEXT) -#define glVertexAttribI1uiEXT GLEW_GET_FUN(__glewVertexAttribI1uiEXT) -#define glVertexAttribI1uivEXT GLEW_GET_FUN(__glewVertexAttribI1uivEXT) -#define glVertexAttribI2iEXT GLEW_GET_FUN(__glewVertexAttribI2iEXT) -#define glVertexAttribI2ivEXT GLEW_GET_FUN(__glewVertexAttribI2ivEXT) -#define glVertexAttribI2uiEXT GLEW_GET_FUN(__glewVertexAttribI2uiEXT) -#define glVertexAttribI2uivEXT GLEW_GET_FUN(__glewVertexAttribI2uivEXT) -#define glVertexAttribI3iEXT GLEW_GET_FUN(__glewVertexAttribI3iEXT) -#define glVertexAttribI3ivEXT GLEW_GET_FUN(__glewVertexAttribI3ivEXT) -#define glVertexAttribI3uiEXT GLEW_GET_FUN(__glewVertexAttribI3uiEXT) -#define glVertexAttribI3uivEXT GLEW_GET_FUN(__glewVertexAttribI3uivEXT) -#define glVertexAttribI4bvEXT GLEW_GET_FUN(__glewVertexAttribI4bvEXT) -#define glVertexAttribI4iEXT GLEW_GET_FUN(__glewVertexAttribI4iEXT) -#define glVertexAttribI4ivEXT GLEW_GET_FUN(__glewVertexAttribI4ivEXT) -#define glVertexAttribI4svEXT GLEW_GET_FUN(__glewVertexAttribI4svEXT) -#define glVertexAttribI4ubvEXT GLEW_GET_FUN(__glewVertexAttribI4ubvEXT) -#define glVertexAttribI4uiEXT GLEW_GET_FUN(__glewVertexAttribI4uiEXT) -#define glVertexAttribI4uivEXT GLEW_GET_FUN(__glewVertexAttribI4uivEXT) -#define glVertexAttribI4usvEXT GLEW_GET_FUN(__glewVertexAttribI4usvEXT) -#define glVertexAttribIPointerEXT GLEW_GET_FUN(__glewVertexAttribIPointerEXT) - -#define GLEW_EXT_gpu_shader4 GLEW_GET_VAR(__GLEW_EXT_gpu_shader4) - -#endif /* GL_EXT_gpu_shader4 */ - -/* ---------------------------- GL_EXT_histogram --------------------------- */ - -#ifndef GL_EXT_histogram -#define GL_EXT_histogram 1 - -#define GL_HISTOGRAM_EXT 0x8024 -#define GL_PROXY_HISTOGRAM_EXT 0x8025 -#define GL_HISTOGRAM_WIDTH_EXT 0x8026 -#define GL_HISTOGRAM_FORMAT_EXT 0x8027 -#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 -#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 -#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A -#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B -#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C -#define GL_HISTOGRAM_SINK_EXT 0x802D -#define GL_MINMAX_EXT 0x802E -#define GL_MINMAX_FORMAT_EXT 0x802F -#define GL_MINMAX_SINK_EXT 0x8030 - -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); -typedef void (GLAPIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target); - -#define glGetHistogramEXT GLEW_GET_FUN(__glewGetHistogramEXT) -#define glGetHistogramParameterfvEXT GLEW_GET_FUN(__glewGetHistogramParameterfvEXT) -#define glGetHistogramParameterivEXT GLEW_GET_FUN(__glewGetHistogramParameterivEXT) -#define glGetMinmaxEXT GLEW_GET_FUN(__glewGetMinmaxEXT) -#define glGetMinmaxParameterfvEXT GLEW_GET_FUN(__glewGetMinmaxParameterfvEXT) -#define glGetMinmaxParameterivEXT GLEW_GET_FUN(__glewGetMinmaxParameterivEXT) -#define glHistogramEXT GLEW_GET_FUN(__glewHistogramEXT) -#define glMinmaxEXT GLEW_GET_FUN(__glewMinmaxEXT) -#define glResetHistogramEXT GLEW_GET_FUN(__glewResetHistogramEXT) -#define glResetMinmaxEXT GLEW_GET_FUN(__glewResetMinmaxEXT) - -#define GLEW_EXT_histogram GLEW_GET_VAR(__GLEW_EXT_histogram) - -#endif /* GL_EXT_histogram */ - -/* ----------------------- GL_EXT_index_array_formats ---------------------- */ - -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 - -#define GLEW_EXT_index_array_formats GLEW_GET_VAR(__GLEW_EXT_index_array_formats) - -#endif /* GL_EXT_index_array_formats */ - -/* --------------------------- GL_EXT_index_func --------------------------- */ - -#ifndef GL_EXT_index_func -#define GL_EXT_index_func 1 - -typedef void (GLAPIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLfloat ref); - -#define glIndexFuncEXT GLEW_GET_FUN(__glewIndexFuncEXT) - -#define GLEW_EXT_index_func GLEW_GET_VAR(__GLEW_EXT_index_func) - -#endif /* GL_EXT_index_func */ - -/* ------------------------- GL_EXT_index_material ------------------------- */ - -#ifndef GL_EXT_index_material -#define GL_EXT_index_material 1 - -typedef void (GLAPIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); - -#define glIndexMaterialEXT GLEW_GET_FUN(__glewIndexMaterialEXT) - -#define GLEW_EXT_index_material GLEW_GET_VAR(__GLEW_EXT_index_material) - -#endif /* GL_EXT_index_material */ - -/* -------------------------- GL_EXT_index_texture ------------------------- */ - -#ifndef GL_EXT_index_texture -#define GL_EXT_index_texture 1 - -#define GLEW_EXT_index_texture GLEW_GET_VAR(__GLEW_EXT_index_texture) - -#endif /* GL_EXT_index_texture */ - -/* -------------------------- GL_EXT_light_texture ------------------------- */ - -#ifndef GL_EXT_light_texture -#define GL_EXT_light_texture 1 - -#define GL_FRAGMENT_MATERIAL_EXT 0x8349 -#define GL_FRAGMENT_NORMAL_EXT 0x834A -#define GL_FRAGMENT_COLOR_EXT 0x834C -#define GL_ATTENUATION_EXT 0x834D -#define GL_SHADOW_ATTENUATION_EXT 0x834E -#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F -#define GL_TEXTURE_LIGHT_EXT 0x8350 -#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 -#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 - -typedef void (GLAPIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); -typedef void (GLAPIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); -typedef void (GLAPIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); - -#define glApplyTextureEXT GLEW_GET_FUN(__glewApplyTextureEXT) -#define glTextureLightEXT GLEW_GET_FUN(__glewTextureLightEXT) -#define glTextureMaterialEXT GLEW_GET_FUN(__glewTextureMaterialEXT) - -#define GLEW_EXT_light_texture GLEW_GET_VAR(__GLEW_EXT_light_texture) - -#endif /* GL_EXT_light_texture */ - -/* ------------------------- GL_EXT_misc_attribute ------------------------- */ - -#ifndef GL_EXT_misc_attribute -#define GL_EXT_misc_attribute 1 - -#define GLEW_EXT_misc_attribute GLEW_GET_VAR(__GLEW_EXT_misc_attribute) - -#endif /* GL_EXT_misc_attribute */ - -/* ------------------------ GL_EXT_multi_draw_arrays ----------------------- */ - -#ifndef GL_EXT_multi_draw_arrays -#define GL_EXT_multi_draw_arrays 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint* first, const GLsizei *count, GLsizei primcount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, GLsizei* count, GLenum type, const GLvoid * const *indices, GLsizei primcount); - -#define glMultiDrawArraysEXT GLEW_GET_FUN(__glewMultiDrawArraysEXT) -#define glMultiDrawElementsEXT GLEW_GET_FUN(__glewMultiDrawElementsEXT) - -#define GLEW_EXT_multi_draw_arrays GLEW_GET_VAR(__GLEW_EXT_multi_draw_arrays) - -#endif /* GL_EXT_multi_draw_arrays */ - -/* --------------------------- GL_EXT_multisample -------------------------- */ - -#ifndef GL_EXT_multisample -#define GL_EXT_multisample 1 - -#define GL_MULTISAMPLE_EXT 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F -#define GL_SAMPLE_MASK_EXT 0x80A0 -#define GL_1PASS_EXT 0x80A1 -#define GL_2PASS_0_EXT 0x80A2 -#define GL_2PASS_1_EXT 0x80A3 -#define GL_4PASS_0_EXT 0x80A4 -#define GL_4PASS_1_EXT 0x80A5 -#define GL_4PASS_2_EXT 0x80A6 -#define GL_4PASS_3_EXT 0x80A7 -#define GL_SAMPLE_BUFFERS_EXT 0x80A8 -#define GL_SAMPLES_EXT 0x80A9 -#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA -#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB -#define GL_SAMPLE_PATTERN_EXT 0x80AC -#define GL_MULTISAMPLE_BIT_EXT 0x20000000 - -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); -typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); - -#define glSampleMaskEXT GLEW_GET_FUN(__glewSampleMaskEXT) -#define glSamplePatternEXT GLEW_GET_FUN(__glewSamplePatternEXT) - -#define GLEW_EXT_multisample GLEW_GET_VAR(__GLEW_EXT_multisample) - -#endif /* GL_EXT_multisample */ - -/* ---------------------- GL_EXT_packed_depth_stencil ---------------------- */ - -#ifndef GL_EXT_packed_depth_stencil -#define GL_EXT_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_EXT 0x84F9 -#define GL_UNSIGNED_INT_24_8_EXT 0x84FA -#define GL_DEPTH24_STENCIL8_EXT 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 - -#define GLEW_EXT_packed_depth_stencil GLEW_GET_VAR(__GLEW_EXT_packed_depth_stencil) - -#endif /* GL_EXT_packed_depth_stencil */ - -/* -------------------------- GL_EXT_packed_float -------------------------- */ - -#ifndef GL_EXT_packed_float -#define GL_EXT_packed_float 1 - -#define GL_R11F_G11F_B10F_EXT 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B -#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C - -#define GLEW_EXT_packed_float GLEW_GET_VAR(__GLEW_EXT_packed_float) - -#endif /* GL_EXT_packed_float */ - -/* -------------------------- GL_EXT_packed_pixels ------------------------- */ - -#ifndef GL_EXT_packed_pixels -#define GL_EXT_packed_pixels 1 - -#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 - -#define GLEW_EXT_packed_pixels GLEW_GET_VAR(__GLEW_EXT_packed_pixels) - -#endif /* GL_EXT_packed_pixels */ - -/* ------------------------ GL_EXT_paletted_texture ------------------------ */ - -#ifndef GL_EXT_paletted_texture -#define GL_EXT_paletted_texture 1 - -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_COLOR_TABLE_FORMAT_EXT 0x80D8 -#define GL_COLOR_TABLE_WIDTH_EXT 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_EXT 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_EXT 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_EXT 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_EXT 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_EXT 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_EXT 0x80DF -#define GL_COLOR_INDEX1_EXT 0x80E2 -#define GL_COLOR_INDEX2_EXT 0x80E3 -#define GL_COLOR_INDEX4_EXT 0x80E4 -#define GL_COLOR_INDEX8_EXT 0x80E5 -#define GL_COLOR_INDEX12_EXT 0x80E6 -#define GL_COLOR_INDEX16_EXT 0x80E7 -#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED -#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 -#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B - -typedef void (GLAPIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint* params); - -#define glColorTableEXT GLEW_GET_FUN(__glewColorTableEXT) -#define glGetColorTableEXT GLEW_GET_FUN(__glewGetColorTableEXT) -#define glGetColorTableParameterfvEXT GLEW_GET_FUN(__glewGetColorTableParameterfvEXT) -#define glGetColorTableParameterivEXT GLEW_GET_FUN(__glewGetColorTableParameterivEXT) - -#define GLEW_EXT_paletted_texture GLEW_GET_VAR(__GLEW_EXT_paletted_texture) - -#endif /* GL_EXT_paletted_texture */ - -/* ----------------------- GL_EXT_pixel_buffer_object ---------------------- */ - -#ifndef GL_EXT_pixel_buffer_object -#define GL_EXT_pixel_buffer_object 1 - -#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB -#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF - -#define GLEW_EXT_pixel_buffer_object GLEW_GET_VAR(__GLEW_EXT_pixel_buffer_object) - -#endif /* GL_EXT_pixel_buffer_object */ - -/* ------------------------- GL_EXT_pixel_transform ------------------------ */ - -#ifndef GL_EXT_pixel_transform -#define GL_EXT_pixel_transform 1 - -#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 -#define GL_PIXEL_MAG_FILTER_EXT 0x8331 -#define GL_PIXEL_MIN_FILTER_EXT 0x8332 -#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 -#define GL_CUBIC_EXT 0x8334 -#define GL_AVERAGE_EXT 0x8335 -#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 -#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 -#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 - -typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint* params); - -#define glGetPixelTransformParameterfvEXT GLEW_GET_FUN(__glewGetPixelTransformParameterfvEXT) -#define glGetPixelTransformParameterivEXT GLEW_GET_FUN(__glewGetPixelTransformParameterivEXT) -#define glPixelTransformParameterfEXT GLEW_GET_FUN(__glewPixelTransformParameterfEXT) -#define glPixelTransformParameterfvEXT GLEW_GET_FUN(__glewPixelTransformParameterfvEXT) -#define glPixelTransformParameteriEXT GLEW_GET_FUN(__glewPixelTransformParameteriEXT) -#define glPixelTransformParameterivEXT GLEW_GET_FUN(__glewPixelTransformParameterivEXT) - -#define GLEW_EXT_pixel_transform GLEW_GET_VAR(__GLEW_EXT_pixel_transform) - -#endif /* GL_EXT_pixel_transform */ - -/* ------------------- GL_EXT_pixel_transform_color_table ------------------ */ - -#ifndef GL_EXT_pixel_transform_color_table -#define GL_EXT_pixel_transform_color_table 1 - -#define GLEW_EXT_pixel_transform_color_table GLEW_GET_VAR(__GLEW_EXT_pixel_transform_color_table) - -#endif /* GL_EXT_pixel_transform_color_table */ - -/* ------------------------ GL_EXT_point_parameters ------------------------ */ - -#ifndef GL_EXT_point_parameters -#define GL_EXT_point_parameters 1 - -#define GL_POINT_SIZE_MIN_EXT 0x8126 -#define GL_POINT_SIZE_MAX_EXT 0x8127 -#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 -#define GL_DISTANCE_ATTENUATION_EXT 0x8129 - -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat* params); - -#define glPointParameterfEXT GLEW_GET_FUN(__glewPointParameterfEXT) -#define glPointParameterfvEXT GLEW_GET_FUN(__glewPointParameterfvEXT) - -#define GLEW_EXT_point_parameters GLEW_GET_VAR(__GLEW_EXT_point_parameters) - -#endif /* GL_EXT_point_parameters */ - -/* ------------------------- GL_EXT_polygon_offset ------------------------- */ - -#ifndef GL_EXT_polygon_offset -#define GL_EXT_polygon_offset 1 - -#define GL_POLYGON_OFFSET_EXT 0x8037 -#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 -#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 - -typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); - -#define glPolygonOffsetEXT GLEW_GET_FUN(__glewPolygonOffsetEXT) - -#define GLEW_EXT_polygon_offset GLEW_GET_VAR(__GLEW_EXT_polygon_offset) - -#endif /* GL_EXT_polygon_offset */ - -/* ------------------------ GL_EXT_provoking_vertex ------------------------ */ - -#ifndef GL_EXT_provoking_vertex -#define GL_EXT_provoking_vertex 1 - -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D -#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E -#define GL_PROVOKING_VERTEX_EXT 0x8E4F - -typedef void (GLAPIENTRY * PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); - -#define glProvokingVertexEXT GLEW_GET_FUN(__glewProvokingVertexEXT) - -#define GLEW_EXT_provoking_vertex GLEW_GET_VAR(__GLEW_EXT_provoking_vertex) - -#endif /* GL_EXT_provoking_vertex */ - -/* ------------------------- GL_EXT_rescale_normal ------------------------- */ - -#ifndef GL_EXT_rescale_normal -#define GL_EXT_rescale_normal 1 - -#define GL_RESCALE_NORMAL_EXT 0x803A - -#define GLEW_EXT_rescale_normal GLEW_GET_VAR(__GLEW_EXT_rescale_normal) - -#endif /* GL_EXT_rescale_normal */ - -/* -------------------------- GL_EXT_scene_marker -------------------------- */ - -#ifndef GL_EXT_scene_marker -#define GL_EXT_scene_marker 1 - -typedef void (GLAPIENTRY * PFNGLBEGINSCENEEXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLENDSCENEEXTPROC) (void); - -#define glBeginSceneEXT GLEW_GET_FUN(__glewBeginSceneEXT) -#define glEndSceneEXT GLEW_GET_FUN(__glewEndSceneEXT) - -#define GLEW_EXT_scene_marker GLEW_GET_VAR(__GLEW_EXT_scene_marker) - -#endif /* GL_EXT_scene_marker */ - -/* ------------------------- GL_EXT_secondary_color ------------------------ */ - -#ifndef GL_EXT_secondary_color -#define GL_EXT_secondary_color 1 - -#define GL_COLOR_SUM_EXT 0x8458 -#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D -#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E - -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - -#define glSecondaryColor3bEXT GLEW_GET_FUN(__glewSecondaryColor3bEXT) -#define glSecondaryColor3bvEXT GLEW_GET_FUN(__glewSecondaryColor3bvEXT) -#define glSecondaryColor3dEXT GLEW_GET_FUN(__glewSecondaryColor3dEXT) -#define glSecondaryColor3dvEXT GLEW_GET_FUN(__glewSecondaryColor3dvEXT) -#define glSecondaryColor3fEXT GLEW_GET_FUN(__glewSecondaryColor3fEXT) -#define glSecondaryColor3fvEXT GLEW_GET_FUN(__glewSecondaryColor3fvEXT) -#define glSecondaryColor3iEXT GLEW_GET_FUN(__glewSecondaryColor3iEXT) -#define glSecondaryColor3ivEXT GLEW_GET_FUN(__glewSecondaryColor3ivEXT) -#define glSecondaryColor3sEXT GLEW_GET_FUN(__glewSecondaryColor3sEXT) -#define glSecondaryColor3svEXT GLEW_GET_FUN(__glewSecondaryColor3svEXT) -#define glSecondaryColor3ubEXT GLEW_GET_FUN(__glewSecondaryColor3ubEXT) -#define glSecondaryColor3ubvEXT GLEW_GET_FUN(__glewSecondaryColor3ubvEXT) -#define glSecondaryColor3uiEXT GLEW_GET_FUN(__glewSecondaryColor3uiEXT) -#define glSecondaryColor3uivEXT GLEW_GET_FUN(__glewSecondaryColor3uivEXT) -#define glSecondaryColor3usEXT GLEW_GET_FUN(__glewSecondaryColor3usEXT) -#define glSecondaryColor3usvEXT GLEW_GET_FUN(__glewSecondaryColor3usvEXT) -#define glSecondaryColorPointerEXT GLEW_GET_FUN(__glewSecondaryColorPointerEXT) - -#define GLEW_EXT_secondary_color GLEW_GET_VAR(__GLEW_EXT_secondary_color) - -#endif /* GL_EXT_secondary_color */ - -/* --------------------- GL_EXT_separate_shader_objects -------------------- */ - -#ifndef GL_EXT_separate_shader_objects -#define GL_EXT_separate_shader_objects 1 - -#define GL_ACTIVE_PROGRAM_EXT 0x8B8D - -typedef void (GLAPIENTRY * PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); -typedef GLuint (GLAPIENTRY * PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar* string); -typedef void (GLAPIENTRY * PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); - -#define glActiveProgramEXT GLEW_GET_FUN(__glewActiveProgramEXT) -#define glCreateShaderProgramEXT GLEW_GET_FUN(__glewCreateShaderProgramEXT) -#define glUseShaderProgramEXT GLEW_GET_FUN(__glewUseShaderProgramEXT) - -#define GLEW_EXT_separate_shader_objects GLEW_GET_VAR(__GLEW_EXT_separate_shader_objects) - -#endif /* GL_EXT_separate_shader_objects */ - -/* --------------------- GL_EXT_separate_specular_color -------------------- */ - -#ifndef GL_EXT_separate_specular_color -#define GL_EXT_separate_specular_color 1 - -#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 -#define GL_SINGLE_COLOR_EXT 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA - -#define GLEW_EXT_separate_specular_color GLEW_GET_VAR(__GLEW_EXT_separate_specular_color) - -#endif /* GL_EXT_separate_specular_color */ - -/* --------------------- GL_EXT_shader_image_load_store -------------------- */ - -#ifndef GL_EXT_shader_image_load_store -#define GL_EXT_shader_image_load_store 1 - -#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 -#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 -#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 -#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 -#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 -#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 -#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 -#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 -#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 -#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 -#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 -#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 -#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 -#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 -#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A -#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B -#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C -#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D -#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E -#define GL_IMAGE_1D_EXT 0x904C -#define GL_IMAGE_2D_EXT 0x904D -#define GL_IMAGE_3D_EXT 0x904E -#define GL_IMAGE_2D_RECT_EXT 0x904F -#define GL_IMAGE_CUBE_EXT 0x9050 -#define GL_IMAGE_BUFFER_EXT 0x9051 -#define GL_IMAGE_1D_ARRAY_EXT 0x9052 -#define GL_IMAGE_2D_ARRAY_EXT 0x9053 -#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 -#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 -#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 -#define GL_INT_IMAGE_1D_EXT 0x9057 -#define GL_INT_IMAGE_2D_EXT 0x9058 -#define GL_INT_IMAGE_3D_EXT 0x9059 -#define GL_INT_IMAGE_2D_RECT_EXT 0x905A -#define GL_INT_IMAGE_CUBE_EXT 0x905B -#define GL_INT_IMAGE_BUFFER_EXT 0x905C -#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D -#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E -#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F -#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 -#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 -#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 -#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 -#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 -#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 -#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 -#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 -#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 -#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 -#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B -#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C -#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D -#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E -#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF - -typedef void (GLAPIENTRY * PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); -typedef void (GLAPIENTRY * PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); - -#define glBindImageTextureEXT GLEW_GET_FUN(__glewBindImageTextureEXT) -#define glMemoryBarrierEXT GLEW_GET_FUN(__glewMemoryBarrierEXT) - -#define GLEW_EXT_shader_image_load_store GLEW_GET_VAR(__GLEW_EXT_shader_image_load_store) - -#endif /* GL_EXT_shader_image_load_store */ - -/* -------------------------- GL_EXT_shadow_funcs -------------------------- */ - -#ifndef GL_EXT_shadow_funcs -#define GL_EXT_shadow_funcs 1 - -#define GLEW_EXT_shadow_funcs GLEW_GET_VAR(__GLEW_EXT_shadow_funcs) - -#endif /* GL_EXT_shadow_funcs */ - -/* --------------------- GL_EXT_shared_texture_palette --------------------- */ - -#ifndef GL_EXT_shared_texture_palette -#define GL_EXT_shared_texture_palette 1 - -#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB - -#define GLEW_EXT_shared_texture_palette GLEW_GET_VAR(__GLEW_EXT_shared_texture_palette) - -#endif /* GL_EXT_shared_texture_palette */ - -/* ------------------------ GL_EXT_stencil_clear_tag ----------------------- */ - -#ifndef GL_EXT_stencil_clear_tag -#define GL_EXT_stencil_clear_tag 1 - -#define GL_STENCIL_TAG_BITS_EXT 0x88F2 -#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 - -#define GLEW_EXT_stencil_clear_tag GLEW_GET_VAR(__GLEW_EXT_stencil_clear_tag) - -#endif /* GL_EXT_stencil_clear_tag */ - -/* ------------------------ GL_EXT_stencil_two_side ------------------------ */ - -#ifndef GL_EXT_stencil_two_side -#define GL_EXT_stencil_two_side 1 - -#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 -#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 - -typedef void (GLAPIENTRY * PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); - -#define glActiveStencilFaceEXT GLEW_GET_FUN(__glewActiveStencilFaceEXT) - -#define GLEW_EXT_stencil_two_side GLEW_GET_VAR(__GLEW_EXT_stencil_two_side) - -#endif /* GL_EXT_stencil_two_side */ - -/* -------------------------- GL_EXT_stencil_wrap -------------------------- */ - -#ifndef GL_EXT_stencil_wrap -#define GL_EXT_stencil_wrap 1 - -#define GL_INCR_WRAP_EXT 0x8507 -#define GL_DECR_WRAP_EXT 0x8508 - -#define GLEW_EXT_stencil_wrap GLEW_GET_VAR(__GLEW_EXT_stencil_wrap) - -#endif /* GL_EXT_stencil_wrap */ - -/* --------------------------- GL_EXT_subtexture --------------------------- */ - -#ifndef GL_EXT_subtexture -#define GL_EXT_subtexture 1 - -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); - -#define glTexSubImage1DEXT GLEW_GET_FUN(__glewTexSubImage1DEXT) -#define glTexSubImage2DEXT GLEW_GET_FUN(__glewTexSubImage2DEXT) -#define glTexSubImage3DEXT GLEW_GET_FUN(__glewTexSubImage3DEXT) - -#define GLEW_EXT_subtexture GLEW_GET_VAR(__GLEW_EXT_subtexture) - -#endif /* GL_EXT_subtexture */ - -/* ----------------------------- GL_EXT_texture ---------------------------- */ - -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 - -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 - -#define GLEW_EXT_texture GLEW_GET_VAR(__GLEW_EXT_texture) - -#endif /* GL_EXT_texture */ - -/* ---------------------------- GL_EXT_texture3D --------------------------- */ - -#ifndef GL_EXT_texture3D -#define GL_EXT_texture3D 1 - -#define GL_PACK_SKIP_IMAGES_EXT 0x806B -#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C -#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D -#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E -#define GL_TEXTURE_3D_EXT 0x806F -#define GL_PROXY_TEXTURE_3D_EXT 0x8070 -#define GL_TEXTURE_DEPTH_EXT 0x8071 -#define GL_TEXTURE_WRAP_R_EXT 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 - -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); - -#define glTexImage3DEXT GLEW_GET_FUN(__glewTexImage3DEXT) - -#define GLEW_EXT_texture3D GLEW_GET_VAR(__GLEW_EXT_texture3D) - -#endif /* GL_EXT_texture3D */ - -/* -------------------------- GL_EXT_texture_array ------------------------- */ - -#ifndef GL_EXT_texture_array -#define GL_EXT_texture_array 1 - -#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E -#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF -#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 -#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D - -typedef void (GLAPIENTRY * PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); - -#define glFramebufferTextureLayerEXT GLEW_GET_FUN(__glewFramebufferTextureLayerEXT) - -#define GLEW_EXT_texture_array GLEW_GET_VAR(__GLEW_EXT_texture_array) - -#endif /* GL_EXT_texture_array */ - -/* ---------------------- GL_EXT_texture_buffer_object --------------------- */ - -#ifndef GL_EXT_texture_buffer_object -#define GL_EXT_texture_buffer_object 1 - -#define GL_TEXTURE_BUFFER_EXT 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D -#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E - -typedef void (GLAPIENTRY * PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); - -#define glTexBufferEXT GLEW_GET_FUN(__glewTexBufferEXT) - -#define GLEW_EXT_texture_buffer_object GLEW_GET_VAR(__GLEW_EXT_texture_buffer_object) - -#endif /* GL_EXT_texture_buffer_object */ - -/* -------------------- GL_EXT_texture_compression_dxt1 -------------------- */ - -#ifndef GL_EXT_texture_compression_dxt1 -#define GL_EXT_texture_compression_dxt1 1 - -#define GLEW_EXT_texture_compression_dxt1 GLEW_GET_VAR(__GLEW_EXT_texture_compression_dxt1) - -#endif /* GL_EXT_texture_compression_dxt1 */ - -/* -------------------- GL_EXT_texture_compression_latc -------------------- */ - -#ifndef GL_EXT_texture_compression_latc -#define GL_EXT_texture_compression_latc 1 - -#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 -#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 -#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 -#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 - -#define GLEW_EXT_texture_compression_latc GLEW_GET_VAR(__GLEW_EXT_texture_compression_latc) - -#endif /* GL_EXT_texture_compression_latc */ - -/* -------------------- GL_EXT_texture_compression_rgtc -------------------- */ - -#ifndef GL_EXT_texture_compression_rgtc -#define GL_EXT_texture_compression_rgtc 1 - -#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC -#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD -#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE - -#define GLEW_EXT_texture_compression_rgtc GLEW_GET_VAR(__GLEW_EXT_texture_compression_rgtc) - -#endif /* GL_EXT_texture_compression_rgtc */ - -/* -------------------- GL_EXT_texture_compression_s3tc -------------------- */ - -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 - -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 - -#define GLEW_EXT_texture_compression_s3tc GLEW_GET_VAR(__GLEW_EXT_texture_compression_s3tc) - -#endif /* GL_EXT_texture_compression_s3tc */ - -/* ------------------------ GL_EXT_texture_cube_map ------------------------ */ - -#ifndef GL_EXT_texture_cube_map -#define GL_EXT_texture_cube_map 1 - -#define GL_NORMAL_MAP_EXT 0x8511 -#define GL_REFLECTION_MAP_EXT 0x8512 -#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C - -#define GLEW_EXT_texture_cube_map GLEW_GET_VAR(__GLEW_EXT_texture_cube_map) - -#endif /* GL_EXT_texture_cube_map */ - -/* ----------------------- GL_EXT_texture_edge_clamp ----------------------- */ - -#ifndef GL_EXT_texture_edge_clamp -#define GL_EXT_texture_edge_clamp 1 - -#define GL_CLAMP_TO_EDGE_EXT 0x812F - -#define GLEW_EXT_texture_edge_clamp GLEW_GET_VAR(__GLEW_EXT_texture_edge_clamp) - -#endif /* GL_EXT_texture_edge_clamp */ - -/* --------------------------- GL_EXT_texture_env -------------------------- */ - -#ifndef GL_EXT_texture_env -#define GL_EXT_texture_env 1 - -#define GLEW_EXT_texture_env GLEW_GET_VAR(__GLEW_EXT_texture_env) - -#endif /* GL_EXT_texture_env */ - -/* ------------------------- GL_EXT_texture_env_add ------------------------ */ - -#ifndef GL_EXT_texture_env_add -#define GL_EXT_texture_env_add 1 - -#define GLEW_EXT_texture_env_add GLEW_GET_VAR(__GLEW_EXT_texture_env_add) - -#endif /* GL_EXT_texture_env_add */ - -/* ----------------------- GL_EXT_texture_env_combine ---------------------- */ - -#ifndef GL_EXT_texture_env_combine -#define GL_EXT_texture_env_combine 1 - -#define GL_COMBINE_EXT 0x8570 -#define GL_COMBINE_RGB_EXT 0x8571 -#define GL_COMBINE_ALPHA_EXT 0x8572 -#define GL_RGB_SCALE_EXT 0x8573 -#define GL_ADD_SIGNED_EXT 0x8574 -#define GL_INTERPOLATE_EXT 0x8575 -#define GL_CONSTANT_EXT 0x8576 -#define GL_PRIMARY_COLOR_EXT 0x8577 -#define GL_PREVIOUS_EXT 0x8578 -#define GL_SOURCE0_RGB_EXT 0x8580 -#define GL_SOURCE1_RGB_EXT 0x8581 -#define GL_SOURCE2_RGB_EXT 0x8582 -#define GL_SOURCE0_ALPHA_EXT 0x8588 -#define GL_SOURCE1_ALPHA_EXT 0x8589 -#define GL_SOURCE2_ALPHA_EXT 0x858A -#define GL_OPERAND0_RGB_EXT 0x8590 -#define GL_OPERAND1_RGB_EXT 0x8591 -#define GL_OPERAND2_RGB_EXT 0x8592 -#define GL_OPERAND0_ALPHA_EXT 0x8598 -#define GL_OPERAND1_ALPHA_EXT 0x8599 -#define GL_OPERAND2_ALPHA_EXT 0x859A - -#define GLEW_EXT_texture_env_combine GLEW_GET_VAR(__GLEW_EXT_texture_env_combine) - -#endif /* GL_EXT_texture_env_combine */ - -/* ------------------------ GL_EXT_texture_env_dot3 ------------------------ */ - -#ifndef GL_EXT_texture_env_dot3 -#define GL_EXT_texture_env_dot3 1 - -#define GL_DOT3_RGB_EXT 0x8740 -#define GL_DOT3_RGBA_EXT 0x8741 - -#define GLEW_EXT_texture_env_dot3 GLEW_GET_VAR(__GLEW_EXT_texture_env_dot3) - -#endif /* GL_EXT_texture_env_dot3 */ - -/* ------------------- GL_EXT_texture_filter_anisotropic ------------------- */ - -#ifndef GL_EXT_texture_filter_anisotropic -#define GL_EXT_texture_filter_anisotropic 1 - -#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF - -#define GLEW_EXT_texture_filter_anisotropic GLEW_GET_VAR(__GLEW_EXT_texture_filter_anisotropic) - -#endif /* GL_EXT_texture_filter_anisotropic */ - -/* ------------------------- GL_EXT_texture_integer ------------------------ */ - -#ifndef GL_EXT_texture_integer -#define GL_EXT_texture_integer 1 - -#define GL_RGBA32UI_EXT 0x8D70 -#define GL_RGB32UI_EXT 0x8D71 -#define GL_ALPHA32UI_EXT 0x8D72 -#define GL_INTENSITY32UI_EXT 0x8D73 -#define GL_LUMINANCE32UI_EXT 0x8D74 -#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 -#define GL_RGBA16UI_EXT 0x8D76 -#define GL_RGB16UI_EXT 0x8D77 -#define GL_ALPHA16UI_EXT 0x8D78 -#define GL_INTENSITY16UI_EXT 0x8D79 -#define GL_LUMINANCE16UI_EXT 0x8D7A -#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B -#define GL_RGBA8UI_EXT 0x8D7C -#define GL_RGB8UI_EXT 0x8D7D -#define GL_ALPHA8UI_EXT 0x8D7E -#define GL_INTENSITY8UI_EXT 0x8D7F -#define GL_LUMINANCE8UI_EXT 0x8D80 -#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 -#define GL_RGBA32I_EXT 0x8D82 -#define GL_RGB32I_EXT 0x8D83 -#define GL_ALPHA32I_EXT 0x8D84 -#define GL_INTENSITY32I_EXT 0x8D85 -#define GL_LUMINANCE32I_EXT 0x8D86 -#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 -#define GL_RGBA16I_EXT 0x8D88 -#define GL_RGB16I_EXT 0x8D89 -#define GL_ALPHA16I_EXT 0x8D8A -#define GL_INTENSITY16I_EXT 0x8D8B -#define GL_LUMINANCE16I_EXT 0x8D8C -#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D -#define GL_RGBA8I_EXT 0x8D8E -#define GL_RGB8I_EXT 0x8D8F -#define GL_ALPHA8I_EXT 0x8D90 -#define GL_INTENSITY8I_EXT 0x8D91 -#define GL_LUMINANCE8I_EXT 0x8D92 -#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 -#define GL_RED_INTEGER_EXT 0x8D94 -#define GL_GREEN_INTEGER_EXT 0x8D95 -#define GL_BLUE_INTEGER_EXT 0x8D96 -#define GL_ALPHA_INTEGER_EXT 0x8D97 -#define GL_RGB_INTEGER_EXT 0x8D98 -#define GL_RGBA_INTEGER_EXT 0x8D99 -#define GL_BGR_INTEGER_EXT 0x8D9A -#define GL_BGRA_INTEGER_EXT 0x8D9B -#define GL_LUMINANCE_INTEGER_EXT 0x8D9C -#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D -#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E - -typedef void (GLAPIENTRY * PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); -typedef void (GLAPIENTRY * PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); - -#define glClearColorIiEXT GLEW_GET_FUN(__glewClearColorIiEXT) -#define glClearColorIuiEXT GLEW_GET_FUN(__glewClearColorIuiEXT) -#define glGetTexParameterIivEXT GLEW_GET_FUN(__glewGetTexParameterIivEXT) -#define glGetTexParameterIuivEXT GLEW_GET_FUN(__glewGetTexParameterIuivEXT) -#define glTexParameterIivEXT GLEW_GET_FUN(__glewTexParameterIivEXT) -#define glTexParameterIuivEXT GLEW_GET_FUN(__glewTexParameterIuivEXT) - -#define GLEW_EXT_texture_integer GLEW_GET_VAR(__GLEW_EXT_texture_integer) - -#endif /* GL_EXT_texture_integer */ - -/* ------------------------ GL_EXT_texture_lod_bias ------------------------ */ - -#ifndef GL_EXT_texture_lod_bias -#define GL_EXT_texture_lod_bias 1 - -#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD -#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 -#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 - -#define GLEW_EXT_texture_lod_bias GLEW_GET_VAR(__GLEW_EXT_texture_lod_bias) - -#endif /* GL_EXT_texture_lod_bias */ - -/* ---------------------- GL_EXT_texture_mirror_clamp ---------------------- */ - -#ifndef GL_EXT_texture_mirror_clamp -#define GL_EXT_texture_mirror_clamp 1 - -#define GL_MIRROR_CLAMP_EXT 0x8742 -#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 -#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 - -#define GLEW_EXT_texture_mirror_clamp GLEW_GET_VAR(__GLEW_EXT_texture_mirror_clamp) - -#endif /* GL_EXT_texture_mirror_clamp */ - -/* ------------------------- GL_EXT_texture_object ------------------------- */ - -#ifndef GL_EXT_texture_object -#define GL_EXT_texture_object 1 - -#define GL_TEXTURE_PRIORITY_EXT 0x8066 -#define GL_TEXTURE_RESIDENT_EXT 0x8067 -#define GL_TEXTURE_1D_BINDING_EXT 0x8068 -#define GL_TEXTURE_2D_BINDING_EXT 0x8069 -#define GL_TEXTURE_3D_BINDING_EXT 0x806A - -typedef GLboolean (GLAPIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint* textures, GLboolean* residences); -typedef void (GLAPIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); -typedef void (GLAPIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint* textures); -typedef void (GLAPIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint* textures); -typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture); -typedef void (GLAPIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint* textures, const GLclampf* priorities); - -#define glAreTexturesResidentEXT GLEW_GET_FUN(__glewAreTexturesResidentEXT) -#define glBindTextureEXT GLEW_GET_FUN(__glewBindTextureEXT) -#define glDeleteTexturesEXT GLEW_GET_FUN(__glewDeleteTexturesEXT) -#define glGenTexturesEXT GLEW_GET_FUN(__glewGenTexturesEXT) -#define glIsTextureEXT GLEW_GET_FUN(__glewIsTextureEXT) -#define glPrioritizeTexturesEXT GLEW_GET_FUN(__glewPrioritizeTexturesEXT) - -#define GLEW_EXT_texture_object GLEW_GET_VAR(__GLEW_EXT_texture_object) - -#endif /* GL_EXT_texture_object */ - -/* --------------------- GL_EXT_texture_perturb_normal --------------------- */ - -#ifndef GL_EXT_texture_perturb_normal -#define GL_EXT_texture_perturb_normal 1 - -#define GL_PERTURB_EXT 0x85AE -#define GL_TEXTURE_NORMAL_EXT 0x85AF - -typedef void (GLAPIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode); - -#define glTextureNormalEXT GLEW_GET_FUN(__glewTextureNormalEXT) - -#define GLEW_EXT_texture_perturb_normal GLEW_GET_VAR(__GLEW_EXT_texture_perturb_normal) - -#endif /* GL_EXT_texture_perturb_normal */ - -/* ------------------------ GL_EXT_texture_rectangle ----------------------- */ - -#ifndef GL_EXT_texture_rectangle -#define GL_EXT_texture_rectangle 1 - -#define GL_TEXTURE_RECTANGLE_EXT 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_EXT 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_EXT 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT 0x84F8 - -#define GLEW_EXT_texture_rectangle GLEW_GET_VAR(__GLEW_EXT_texture_rectangle) - -#endif /* GL_EXT_texture_rectangle */ - -/* -------------------------- GL_EXT_texture_sRGB -------------------------- */ - -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 - -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F - -#define GLEW_EXT_texture_sRGB GLEW_GET_VAR(__GLEW_EXT_texture_sRGB) - -#endif /* GL_EXT_texture_sRGB */ - -/* ----------------------- GL_EXT_texture_sRGB_decode ---------------------- */ - -#ifndef GL_EXT_texture_sRGB_decode -#define GL_EXT_texture_sRGB_decode 1 - -#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 -#define GL_DECODE_EXT 0x8A49 -#define GL_SKIP_DECODE_EXT 0x8A4A - -#define GLEW_EXT_texture_sRGB_decode GLEW_GET_VAR(__GLEW_EXT_texture_sRGB_decode) - -#endif /* GL_EXT_texture_sRGB_decode */ - -/* --------------------- GL_EXT_texture_shared_exponent -------------------- */ - -#ifndef GL_EXT_texture_shared_exponent -#define GL_EXT_texture_shared_exponent 1 - -#define GL_RGB9_E5_EXT 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E -#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F - -#define GLEW_EXT_texture_shared_exponent GLEW_GET_VAR(__GLEW_EXT_texture_shared_exponent) - -#endif /* GL_EXT_texture_shared_exponent */ - -/* -------------------------- GL_EXT_texture_snorm ------------------------- */ - -#ifndef GL_EXT_texture_snorm -#define GL_EXT_texture_snorm 1 - -#define GL_RED_SNORM 0x8F90 -#define GL_RG_SNORM 0x8F91 -#define GL_RGB_SNORM 0x8F92 -#define GL_RGBA_SNORM 0x8F93 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_ALPHA_SNORM 0x9010 -#define GL_LUMINANCE_SNORM 0x9011 -#define GL_LUMINANCE_ALPHA_SNORM 0x9012 -#define GL_INTENSITY_SNORM 0x9013 -#define GL_ALPHA8_SNORM 0x9014 -#define GL_LUMINANCE8_SNORM 0x9015 -#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 -#define GL_INTENSITY8_SNORM 0x9017 -#define GL_ALPHA16_SNORM 0x9018 -#define GL_LUMINANCE16_SNORM 0x9019 -#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A -#define GL_INTENSITY16_SNORM 0x901B - -#define GLEW_EXT_texture_snorm GLEW_GET_VAR(__GLEW_EXT_texture_snorm) - -#endif /* GL_EXT_texture_snorm */ - -/* ------------------------- GL_EXT_texture_swizzle ------------------------ */ - -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 - -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 - -#define GLEW_EXT_texture_swizzle GLEW_GET_VAR(__GLEW_EXT_texture_swizzle) - -#endif /* GL_EXT_texture_swizzle */ - -/* --------------------------- GL_EXT_timer_query -------------------------- */ - -#ifndef GL_EXT_timer_query -#define GL_EXT_timer_query 1 - -#define GL_TIME_ELAPSED_EXT 0x88BF - -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64EXT *params); -typedef void (GLAPIENTRY * PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64EXT *params); - -#define glGetQueryObjecti64vEXT GLEW_GET_FUN(__glewGetQueryObjecti64vEXT) -#define glGetQueryObjectui64vEXT GLEW_GET_FUN(__glewGetQueryObjectui64vEXT) - -#define GLEW_EXT_timer_query GLEW_GET_VAR(__GLEW_EXT_timer_query) - -#endif /* GL_EXT_timer_query */ - -/* ----------------------- GL_EXT_transform_feedback ----------------------- */ - -#ifndef GL_EXT_transform_feedback -#define GL_EXT_transform_feedback 1 - -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 -#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 -#define GL_RASTERIZER_DISCARD_EXT 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C -#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F - -typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar * const* varyings, GLenum bufferMode); - -#define glBeginTransformFeedbackEXT GLEW_GET_FUN(__glewBeginTransformFeedbackEXT) -#define glBindBufferBaseEXT GLEW_GET_FUN(__glewBindBufferBaseEXT) -#define glBindBufferOffsetEXT GLEW_GET_FUN(__glewBindBufferOffsetEXT) -#define glBindBufferRangeEXT GLEW_GET_FUN(__glewBindBufferRangeEXT) -#define glEndTransformFeedbackEXT GLEW_GET_FUN(__glewEndTransformFeedbackEXT) -#define glGetTransformFeedbackVaryingEXT GLEW_GET_FUN(__glewGetTransformFeedbackVaryingEXT) -#define glTransformFeedbackVaryingsEXT GLEW_GET_FUN(__glewTransformFeedbackVaryingsEXT) - -#define GLEW_EXT_transform_feedback GLEW_GET_VAR(__GLEW_EXT_transform_feedback) - -#endif /* GL_EXT_transform_feedback */ - -/* -------------------------- GL_EXT_vertex_array -------------------------- */ - -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 - -#define GL_DOUBLE_EXT 0x140A -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 - -typedef void (GLAPIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i); -typedef void (GLAPIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); -typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean* pointer); -typedef void (GLAPIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer); - -#define glArrayElementEXT GLEW_GET_FUN(__glewArrayElementEXT) -#define glColorPointerEXT GLEW_GET_FUN(__glewColorPointerEXT) -#define glDrawArraysEXT GLEW_GET_FUN(__glewDrawArraysEXT) -#define glEdgeFlagPointerEXT GLEW_GET_FUN(__glewEdgeFlagPointerEXT) -#define glIndexPointerEXT GLEW_GET_FUN(__glewIndexPointerEXT) -#define glNormalPointerEXT GLEW_GET_FUN(__glewNormalPointerEXT) -#define glTexCoordPointerEXT GLEW_GET_FUN(__glewTexCoordPointerEXT) -#define glVertexPointerEXT GLEW_GET_FUN(__glewVertexPointerEXT) - -#define GLEW_EXT_vertex_array GLEW_GET_VAR(__GLEW_EXT_vertex_array) - -#endif /* GL_EXT_vertex_array */ - -/* ------------------------ GL_EXT_vertex_array_bgra ----------------------- */ - -#ifndef GL_EXT_vertex_array_bgra -#define GL_EXT_vertex_array_bgra 1 - -#define GL_BGRA 0x80E1 - -#define GLEW_EXT_vertex_array_bgra GLEW_GET_VAR(__GLEW_EXT_vertex_array_bgra) - -#endif /* GL_EXT_vertex_array_bgra */ - -/* ----------------------- GL_EXT_vertex_attrib_64bit ---------------------- */ - -#ifndef GL_EXT_vertex_attrib_64bit -#define GL_EXT_vertex_attrib_64bit 1 - -#define GL_DOUBLE_MAT2_EXT 0x8F46 -#define GL_DOUBLE_MAT3_EXT 0x8F47 -#define GL_DOUBLE_MAT4_EXT 0x8F48 -#define GL_DOUBLE_MAT2x3_EXT 0x8F49 -#define GL_DOUBLE_MAT2x4_EXT 0x8F4A -#define GL_DOUBLE_MAT3x2_EXT 0x8F4B -#define GL_DOUBLE_MAT3x4_EXT 0x8F4C -#define GL_DOUBLE_MAT4x2_EXT 0x8F4D -#define GL_DOUBLE_MAT4x3_EXT 0x8F4E -#define GL_DOUBLE_VEC2_EXT 0x8FFC -#define GL_DOUBLE_VEC3_EXT 0x8FFD -#define GL_DOUBLE_VEC4_EXT 0x8FFE - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); - -#define glGetVertexAttribLdvEXT GLEW_GET_FUN(__glewGetVertexAttribLdvEXT) -#define glVertexArrayVertexAttribLOffsetEXT GLEW_GET_FUN(__glewVertexArrayVertexAttribLOffsetEXT) -#define glVertexAttribL1dEXT GLEW_GET_FUN(__glewVertexAttribL1dEXT) -#define glVertexAttribL1dvEXT GLEW_GET_FUN(__glewVertexAttribL1dvEXT) -#define glVertexAttribL2dEXT GLEW_GET_FUN(__glewVertexAttribL2dEXT) -#define glVertexAttribL2dvEXT GLEW_GET_FUN(__glewVertexAttribL2dvEXT) -#define glVertexAttribL3dEXT GLEW_GET_FUN(__glewVertexAttribL3dEXT) -#define glVertexAttribL3dvEXT GLEW_GET_FUN(__glewVertexAttribL3dvEXT) -#define glVertexAttribL4dEXT GLEW_GET_FUN(__glewVertexAttribL4dEXT) -#define glVertexAttribL4dvEXT GLEW_GET_FUN(__glewVertexAttribL4dvEXT) -#define glVertexAttribLPointerEXT GLEW_GET_FUN(__glewVertexAttribLPointerEXT) - -#define GLEW_EXT_vertex_attrib_64bit GLEW_GET_VAR(__GLEW_EXT_vertex_attrib_64bit) - -#endif /* GL_EXT_vertex_attrib_64bit */ - -/* -------------------------- GL_EXT_vertex_shader ------------------------- */ - -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 - -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED - -typedef void (GLAPIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void); -typedef GLuint (GLAPIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); -typedef GLuint (GLAPIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); -typedef void (GLAPIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void); -typedef void (GLAPIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLuint (GLAPIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum dataType, GLenum storageType, GLenum range, GLuint components); -typedef GLuint (GLAPIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); -typedef void (GLAPIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (GLAPIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (GLAPIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (GLAPIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); -typedef void (GLAPIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid **data); -typedef void (GLAPIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); -typedef GLboolean (GLAPIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); -typedef void (GLAPIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); -typedef void (GLAPIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, GLvoid *addr); -typedef void (GLAPIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); -typedef void (GLAPIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); -typedef void (GLAPIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -typedef void (GLAPIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -typedef void (GLAPIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, GLvoid *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, GLbyte *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, GLdouble *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, GLfloat *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, GLint *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, GLshort *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, GLubyte *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, GLuint *addr); -typedef void (GLAPIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, GLushort *addr); -typedef void (GLAPIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); - -#define glBeginVertexShaderEXT GLEW_GET_FUN(__glewBeginVertexShaderEXT) -#define glBindLightParameterEXT GLEW_GET_FUN(__glewBindLightParameterEXT) -#define glBindMaterialParameterEXT GLEW_GET_FUN(__glewBindMaterialParameterEXT) -#define glBindParameterEXT GLEW_GET_FUN(__glewBindParameterEXT) -#define glBindTexGenParameterEXT GLEW_GET_FUN(__glewBindTexGenParameterEXT) -#define glBindTextureUnitParameterEXT GLEW_GET_FUN(__glewBindTextureUnitParameterEXT) -#define glBindVertexShaderEXT GLEW_GET_FUN(__glewBindVertexShaderEXT) -#define glDeleteVertexShaderEXT GLEW_GET_FUN(__glewDeleteVertexShaderEXT) -#define glDisableVariantClientStateEXT GLEW_GET_FUN(__glewDisableVariantClientStateEXT) -#define glEnableVariantClientStateEXT GLEW_GET_FUN(__glewEnableVariantClientStateEXT) -#define glEndVertexShaderEXT GLEW_GET_FUN(__glewEndVertexShaderEXT) -#define glExtractComponentEXT GLEW_GET_FUN(__glewExtractComponentEXT) -#define glGenSymbolsEXT GLEW_GET_FUN(__glewGenSymbolsEXT) -#define glGenVertexShadersEXT GLEW_GET_FUN(__glewGenVertexShadersEXT) -#define glGetInvariantBooleanvEXT GLEW_GET_FUN(__glewGetInvariantBooleanvEXT) -#define glGetInvariantFloatvEXT GLEW_GET_FUN(__glewGetInvariantFloatvEXT) -#define glGetInvariantIntegervEXT GLEW_GET_FUN(__glewGetInvariantIntegervEXT) -#define glGetLocalConstantBooleanvEXT GLEW_GET_FUN(__glewGetLocalConstantBooleanvEXT) -#define glGetLocalConstantFloatvEXT GLEW_GET_FUN(__glewGetLocalConstantFloatvEXT) -#define glGetLocalConstantIntegervEXT GLEW_GET_FUN(__glewGetLocalConstantIntegervEXT) -#define glGetVariantBooleanvEXT GLEW_GET_FUN(__glewGetVariantBooleanvEXT) -#define glGetVariantFloatvEXT GLEW_GET_FUN(__glewGetVariantFloatvEXT) -#define glGetVariantIntegervEXT GLEW_GET_FUN(__glewGetVariantIntegervEXT) -#define glGetVariantPointervEXT GLEW_GET_FUN(__glewGetVariantPointervEXT) -#define glInsertComponentEXT GLEW_GET_FUN(__glewInsertComponentEXT) -#define glIsVariantEnabledEXT GLEW_GET_FUN(__glewIsVariantEnabledEXT) -#define glSetInvariantEXT GLEW_GET_FUN(__glewSetInvariantEXT) -#define glSetLocalConstantEXT GLEW_GET_FUN(__glewSetLocalConstantEXT) -#define glShaderOp1EXT GLEW_GET_FUN(__glewShaderOp1EXT) -#define glShaderOp2EXT GLEW_GET_FUN(__glewShaderOp2EXT) -#define glShaderOp3EXT GLEW_GET_FUN(__glewShaderOp3EXT) -#define glSwizzleEXT GLEW_GET_FUN(__glewSwizzleEXT) -#define glVariantPointerEXT GLEW_GET_FUN(__glewVariantPointerEXT) -#define glVariantbvEXT GLEW_GET_FUN(__glewVariantbvEXT) -#define glVariantdvEXT GLEW_GET_FUN(__glewVariantdvEXT) -#define glVariantfvEXT GLEW_GET_FUN(__glewVariantfvEXT) -#define glVariantivEXT GLEW_GET_FUN(__glewVariantivEXT) -#define glVariantsvEXT GLEW_GET_FUN(__glewVariantsvEXT) -#define glVariantubvEXT GLEW_GET_FUN(__glewVariantubvEXT) -#define glVariantuivEXT GLEW_GET_FUN(__glewVariantuivEXT) -#define glVariantusvEXT GLEW_GET_FUN(__glewVariantusvEXT) -#define glWriteMaskEXT GLEW_GET_FUN(__glewWriteMaskEXT) - -#define GLEW_EXT_vertex_shader GLEW_GET_VAR(__GLEW_EXT_vertex_shader) - -#endif /* GL_EXT_vertex_shader */ - -/* ------------------------ GL_EXT_vertex_weighting ------------------------ */ - -#ifndef GL_EXT_vertex_weighting -#define GL_EXT_vertex_weighting 1 - -#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 -#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 -#define GL_MODELVIEW0_EXT 0x1700 -#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 -#define GL_MODELVIEW1_MATRIX_EXT 0x8506 -#define GL_VERTEX_WEIGHTING_EXT 0x8509 -#define GL_MODELVIEW1_EXT 0x850A -#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B -#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C -#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D -#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E -#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F -#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 - -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (GLfloat* weight); - -#define glVertexWeightPointerEXT GLEW_GET_FUN(__glewVertexWeightPointerEXT) -#define glVertexWeightfEXT GLEW_GET_FUN(__glewVertexWeightfEXT) -#define glVertexWeightfvEXT GLEW_GET_FUN(__glewVertexWeightfvEXT) - -#define GLEW_EXT_vertex_weighting GLEW_GET_VAR(__GLEW_EXT_vertex_weighting) - -#endif /* GL_EXT_vertex_weighting */ - -/* ------------------------- GL_EXT_x11_sync_object ------------------------ */ - -#ifndef GL_EXT_x11_sync_object -#define GL_EXT_x11_sync_object 1 - -#define GL_SYNC_X11_FENCE_EXT 0x90E1 - -typedef GLsync (GLAPIENTRY * PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); - -#define glImportSyncEXT GLEW_GET_FUN(__glewImportSyncEXT) - -#define GLEW_EXT_x11_sync_object GLEW_GET_VAR(__GLEW_EXT_x11_sync_object) - -#endif /* GL_EXT_x11_sync_object */ - -/* ---------------------- GL_GREMEDY_frame_terminator ---------------------- */ - -#ifndef GL_GREMEDY_frame_terminator -#define GL_GREMEDY_frame_terminator 1 - -typedef void (GLAPIENTRY * PFNGLFRAMETERMINATORGREMEDYPROC) (void); - -#define glFrameTerminatorGREMEDY GLEW_GET_FUN(__glewFrameTerminatorGREMEDY) - -#define GLEW_GREMEDY_frame_terminator GLEW_GET_VAR(__GLEW_GREMEDY_frame_terminator) - -#endif /* GL_GREMEDY_frame_terminator */ - -/* ------------------------ GL_GREMEDY_string_marker ----------------------- */ - -#ifndef GL_GREMEDY_string_marker -#define GL_GREMEDY_string_marker 1 - -typedef void (GLAPIENTRY * PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); - -#define glStringMarkerGREMEDY GLEW_GET_FUN(__glewStringMarkerGREMEDY) - -#define GLEW_GREMEDY_string_marker GLEW_GET_VAR(__GLEW_GREMEDY_string_marker) - -#endif /* GL_GREMEDY_string_marker */ - -/* --------------------- GL_HP_convolution_border_modes -------------------- */ - -#ifndef GL_HP_convolution_border_modes -#define GL_HP_convolution_border_modes 1 - -#define GLEW_HP_convolution_border_modes GLEW_GET_VAR(__GLEW_HP_convolution_border_modes) - -#endif /* GL_HP_convolution_border_modes */ - -/* ------------------------- GL_HP_image_transform ------------------------- */ - -#ifndef GL_HP_image_transform -#define GL_HP_image_transform 1 - -typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint* params); - -#define glGetImageTransformParameterfvHP GLEW_GET_FUN(__glewGetImageTransformParameterfvHP) -#define glGetImageTransformParameterivHP GLEW_GET_FUN(__glewGetImageTransformParameterivHP) -#define glImageTransformParameterfHP GLEW_GET_FUN(__glewImageTransformParameterfHP) -#define glImageTransformParameterfvHP GLEW_GET_FUN(__glewImageTransformParameterfvHP) -#define glImageTransformParameteriHP GLEW_GET_FUN(__glewImageTransformParameteriHP) -#define glImageTransformParameterivHP GLEW_GET_FUN(__glewImageTransformParameterivHP) - -#define GLEW_HP_image_transform GLEW_GET_VAR(__GLEW_HP_image_transform) - -#endif /* GL_HP_image_transform */ - -/* -------------------------- GL_HP_occlusion_test ------------------------- */ - -#ifndef GL_HP_occlusion_test -#define GL_HP_occlusion_test 1 - -#define GLEW_HP_occlusion_test GLEW_GET_VAR(__GLEW_HP_occlusion_test) - -#endif /* GL_HP_occlusion_test */ - -/* ------------------------- GL_HP_texture_lighting ------------------------ */ - -#ifndef GL_HP_texture_lighting -#define GL_HP_texture_lighting 1 - -#define GLEW_HP_texture_lighting GLEW_GET_VAR(__GLEW_HP_texture_lighting) - -#endif /* GL_HP_texture_lighting */ - -/* --------------------------- GL_IBM_cull_vertex -------------------------- */ - -#ifndef GL_IBM_cull_vertex -#define GL_IBM_cull_vertex 1 - -#define GL_CULL_VERTEX_IBM 103050 - -#define GLEW_IBM_cull_vertex GLEW_GET_VAR(__GLEW_IBM_cull_vertex) - -#endif /* GL_IBM_cull_vertex */ - -/* ---------------------- GL_IBM_multimode_draw_arrays --------------------- */ - -#ifndef GL_IBM_multimode_draw_arrays -#define GL_IBM_multimode_draw_arrays 1 - -typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum* mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); -typedef void (GLAPIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum* mode, const GLsizei *count, GLenum type, const GLvoid * const *indices, GLsizei primcount, GLint modestride); - -#define glMultiModeDrawArraysIBM GLEW_GET_FUN(__glewMultiModeDrawArraysIBM) -#define glMultiModeDrawElementsIBM GLEW_GET_FUN(__glewMultiModeDrawElementsIBM) - -#define GLEW_IBM_multimode_draw_arrays GLEW_GET_VAR(__GLEW_IBM_multimode_draw_arrays) - -#endif /* GL_IBM_multimode_draw_arrays */ - -/* ------------------------- GL_IBM_rasterpos_clip ------------------------- */ - -#ifndef GL_IBM_rasterpos_clip -#define GL_IBM_rasterpos_clip 1 - -#define GL_RASTER_POSITION_UNCLIPPED_IBM 103010 - -#define GLEW_IBM_rasterpos_clip GLEW_GET_VAR(__GLEW_IBM_rasterpos_clip) - -#endif /* GL_IBM_rasterpos_clip */ - -/* --------------------------- GL_IBM_static_data -------------------------- */ - -#ifndef GL_IBM_static_data -#define GL_IBM_static_data 1 - -#define GL_ALL_STATIC_DATA_IBM 103060 -#define GL_STATIC_VERTEX_ARRAY_IBM 103061 - -#define GLEW_IBM_static_data GLEW_GET_VAR(__GLEW_IBM_static_data) - -#endif /* GL_IBM_static_data */ - -/* --------------------- GL_IBM_texture_mirrored_repeat -------------------- */ - -#ifndef GL_IBM_texture_mirrored_repeat -#define GL_IBM_texture_mirrored_repeat 1 - -#define GL_MIRRORED_REPEAT_IBM 0x8370 - -#define GLEW_IBM_texture_mirrored_repeat GLEW_GET_VAR(__GLEW_IBM_texture_mirrored_repeat) - -#endif /* GL_IBM_texture_mirrored_repeat */ - -/* ----------------------- GL_IBM_vertex_array_lists ----------------------- */ - -#ifndef GL_IBM_vertex_array_lists -#define GL_IBM_vertex_array_lists 1 - -#define GL_VERTEX_ARRAY_LIST_IBM 103070 -#define GL_NORMAL_ARRAY_LIST_IBM 103071 -#define GL_COLOR_ARRAY_LIST_IBM 103072 -#define GL_INDEX_ARRAY_LIST_IBM 103073 -#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 -#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 -#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 -#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 -#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 -#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 -#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 -#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 -#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 -#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 -#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 -#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 - -typedef void (GLAPIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); -typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid ** pointer, GLint ptrstride); - -#define glColorPointerListIBM GLEW_GET_FUN(__glewColorPointerListIBM) -#define glEdgeFlagPointerListIBM GLEW_GET_FUN(__glewEdgeFlagPointerListIBM) -#define glFogCoordPointerListIBM GLEW_GET_FUN(__glewFogCoordPointerListIBM) -#define glIndexPointerListIBM GLEW_GET_FUN(__glewIndexPointerListIBM) -#define glNormalPointerListIBM GLEW_GET_FUN(__glewNormalPointerListIBM) -#define glSecondaryColorPointerListIBM GLEW_GET_FUN(__glewSecondaryColorPointerListIBM) -#define glTexCoordPointerListIBM GLEW_GET_FUN(__glewTexCoordPointerListIBM) -#define glVertexPointerListIBM GLEW_GET_FUN(__glewVertexPointerListIBM) - -#define GLEW_IBM_vertex_array_lists GLEW_GET_VAR(__GLEW_IBM_vertex_array_lists) - -#endif /* GL_IBM_vertex_array_lists */ - -/* -------------------------- GL_INGR_color_clamp -------------------------- */ - -#ifndef GL_INGR_color_clamp -#define GL_INGR_color_clamp 1 - -#define GL_RED_MIN_CLAMP_INGR 0x8560 -#define GL_GREEN_MIN_CLAMP_INGR 0x8561 -#define GL_BLUE_MIN_CLAMP_INGR 0x8562 -#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 -#define GL_RED_MAX_CLAMP_INGR 0x8564 -#define GL_GREEN_MAX_CLAMP_INGR 0x8565 -#define GL_BLUE_MAX_CLAMP_INGR 0x8566 -#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 - -#define GLEW_INGR_color_clamp GLEW_GET_VAR(__GLEW_INGR_color_clamp) - -#endif /* GL_INGR_color_clamp */ - -/* ------------------------- GL_INGR_interlace_read ------------------------ */ - -#ifndef GL_INGR_interlace_read -#define GL_INGR_interlace_read 1 - -#define GL_INTERLACE_READ_INGR 0x8568 - -#define GLEW_INGR_interlace_read GLEW_GET_VAR(__GLEW_INGR_interlace_read) - -#endif /* GL_INGR_interlace_read */ - -/* -------------------------- GL_INTEL_map_texture ------------------------- */ - -#ifndef GL_INTEL_map_texture -#define GL_INTEL_map_texture 1 - -#define GL_LAYOUT_DEFAULT_INTEL 0 -#define GL_LAYOUT_LINEAR_INTEL 1 -#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 -#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF - -typedef GLvoid * (GLAPIENTRY * PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint* stride, GLenum *layout); -typedef void (GLAPIENTRY * PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); -typedef void (GLAPIENTRY * PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); - -#define glMapTexture2DINTEL GLEW_GET_FUN(__glewMapTexture2DINTEL) -#define glSyncTextureINTEL GLEW_GET_FUN(__glewSyncTextureINTEL) -#define glUnmapTexture2DINTEL GLEW_GET_FUN(__glewUnmapTexture2DINTEL) - -#define GLEW_INTEL_map_texture GLEW_GET_VAR(__GLEW_INTEL_map_texture) - -#endif /* GL_INTEL_map_texture */ - -/* ------------------------ GL_INTEL_parallel_arrays ----------------------- */ - -#ifndef GL_INTEL_parallel_arrays -#define GL_INTEL_parallel_arrays 1 - -#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 -#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 -#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 -#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 -#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 - -typedef void (GLAPIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); -typedef void (GLAPIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void** pointer); -typedef void (GLAPIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void** pointer); - -#define glColorPointervINTEL GLEW_GET_FUN(__glewColorPointervINTEL) -#define glNormalPointervINTEL GLEW_GET_FUN(__glewNormalPointervINTEL) -#define glTexCoordPointervINTEL GLEW_GET_FUN(__glewTexCoordPointervINTEL) -#define glVertexPointervINTEL GLEW_GET_FUN(__glewVertexPointervINTEL) - -#define GLEW_INTEL_parallel_arrays GLEW_GET_VAR(__GLEW_INTEL_parallel_arrays) - -#endif /* GL_INTEL_parallel_arrays */ - -/* ------------------------ GL_INTEL_texture_scissor ----------------------- */ - -#ifndef GL_INTEL_texture_scissor -#define GL_INTEL_texture_scissor 1 - -typedef void (GLAPIENTRY * PFNGLTEXSCISSORFUNCINTELPROC) (GLenum target, GLenum lfunc, GLenum hfunc); -typedef void (GLAPIENTRY * PFNGLTEXSCISSORINTELPROC) (GLenum target, GLclampf tlow, GLclampf thigh); - -#define glTexScissorFuncINTEL GLEW_GET_FUN(__glewTexScissorFuncINTEL) -#define glTexScissorINTEL GLEW_GET_FUN(__glewTexScissorINTEL) - -#define GLEW_INTEL_texture_scissor GLEW_GET_VAR(__GLEW_INTEL_texture_scissor) - -#endif /* GL_INTEL_texture_scissor */ - -/* ------------------------------ GL_KHR_debug ----------------------------- */ - -#ifndef GL_KHR_debug -#define GL_KHR_debug 1 - -#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 -#define GL_DEBUG_SOURCE_API 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION 0x824A -#define GL_DEBUG_SOURCE_OTHER 0x824B -#define GL_DEBUG_TYPE_ERROR 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E -#define GL_DEBUG_TYPE_PORTABILITY 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 -#define GL_DEBUG_TYPE_OTHER 0x8251 -#define GL_DEBUG_TYPE_MARKER 0x8268 -#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 -#define GL_DEBUG_TYPE_POP_GROUP 0x826A -#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B -#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C -#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D -#define GL_BUFFER 0x82E0 -#define GL_SHADER 0x82E1 -#define GL_PROGRAM 0x82E2 -#define GL_QUERY 0x82E3 -#define GL_PROGRAM_PIPELINE 0x82E4 -#define GL_SAMPLER 0x82E6 -#define GL_DISPLAY_LIST 0x82E7 -#define GL_MAX_LABEL_LENGTH 0x82E8 -#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES 0x9145 -#define GL_DEBUG_SEVERITY_HIGH 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 -#define GL_DEBUG_SEVERITY_LOW 0x9148 -#define GL_DEBUG_OUTPUT 0x92E0 - -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, GLvoid* userParam); - -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const GLvoid *userParam); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -typedef void (GLAPIENTRY * PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); -typedef GLuint (GLAPIENTRY * PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufsize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); -typedef void (GLAPIENTRY * PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei* length, GLchar *label); -typedef void (GLAPIENTRY * PFNGLGETOBJECTPTRLABELPROC) (void* ptr, GLsizei bufSize, GLsizei* length, GLchar *label); -typedef void (GLAPIENTRY * PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar* label); -typedef void (GLAPIENTRY * PFNGLOBJECTPTRLABELPROC) (void* ptr, GLsizei length, const GLchar* label); -typedef void (GLAPIENTRY * PFNGLPOPDEBUGGROUPPROC) (void); -typedef void (GLAPIENTRY * PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar * message); - -#define glDebugMessageCallback GLEW_GET_FUN(__glewDebugMessageCallback) -#define glDebugMessageControl GLEW_GET_FUN(__glewDebugMessageControl) -#define glDebugMessageInsert GLEW_GET_FUN(__glewDebugMessageInsert) -#define glGetDebugMessageLog GLEW_GET_FUN(__glewGetDebugMessageLog) -#define glGetObjectLabel GLEW_GET_FUN(__glewGetObjectLabel) -#define glGetObjectPtrLabel GLEW_GET_FUN(__glewGetObjectPtrLabel) -#define glObjectLabel GLEW_GET_FUN(__glewObjectLabel) -#define glObjectPtrLabel GLEW_GET_FUN(__glewObjectPtrLabel) -#define glPopDebugGroup GLEW_GET_FUN(__glewPopDebugGroup) -#define glPushDebugGroup GLEW_GET_FUN(__glewPushDebugGroup) - -#define GLEW_KHR_debug GLEW_GET_VAR(__GLEW_KHR_debug) - -#endif /* GL_KHR_debug */ - -/* ------------------ GL_KHR_texture_compression_astc_ldr ------------------ */ - -#ifndef GL_KHR_texture_compression_astc_ldr -#define GL_KHR_texture_compression_astc_ldr 1 - -#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 -#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 -#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 -#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 -#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 -#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 -#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 -#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 -#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 -#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 -#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA -#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB -#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC -#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC -#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD - -#define GLEW_KHR_texture_compression_astc_ldr GLEW_GET_VAR(__GLEW_KHR_texture_compression_astc_ldr) - -#endif /* GL_KHR_texture_compression_astc_ldr */ - -/* -------------------------- GL_KTX_buffer_region ------------------------- */ - -#ifndef GL_KTX_buffer_region -#define GL_KTX_buffer_region 1 - -#define GL_KTX_FRONT_REGION 0x0 -#define GL_KTX_BACK_REGION 0x1 -#define GL_KTX_Z_REGION 0x2 -#define GL_KTX_STENCIL_REGION 0x3 - -typedef GLuint (GLAPIENTRY * PFNGLBUFFERREGIONENABLEDPROC) (void); -typedef void (GLAPIENTRY * PFNGLDELETEBUFFERREGIONPROC) (GLenum region); -typedef void (GLAPIENTRY * PFNGLDRAWBUFFERREGIONPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height, GLint xDest, GLint yDest); -typedef GLuint (GLAPIENTRY * PFNGLNEWBUFFERREGIONPROC) (GLenum region); -typedef void (GLAPIENTRY * PFNGLREADBUFFERREGIONPROC) (GLuint region, GLint x, GLint y, GLsizei width, GLsizei height); - -#define glBufferRegionEnabled GLEW_GET_FUN(__glewBufferRegionEnabled) -#define glDeleteBufferRegion GLEW_GET_FUN(__glewDeleteBufferRegion) -#define glDrawBufferRegion GLEW_GET_FUN(__glewDrawBufferRegion) -#define glNewBufferRegion GLEW_GET_FUN(__glewNewBufferRegion) -#define glReadBufferRegion GLEW_GET_FUN(__glewReadBufferRegion) - -#define GLEW_KTX_buffer_region GLEW_GET_VAR(__GLEW_KTX_buffer_region) - -#endif /* GL_KTX_buffer_region */ - -/* ------------------------- GL_MESAX_texture_stack ------------------------ */ - -#ifndef GL_MESAX_texture_stack -#define GL_MESAX_texture_stack 1 - -#define GL_TEXTURE_1D_STACK_MESAX 0x8759 -#define GL_TEXTURE_2D_STACK_MESAX 0x875A -#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B -#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C -#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D -#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E - -#define GLEW_MESAX_texture_stack GLEW_GET_VAR(__GLEW_MESAX_texture_stack) - -#endif /* GL_MESAX_texture_stack */ - -/* -------------------------- GL_MESA_pack_invert -------------------------- */ - -#ifndef GL_MESA_pack_invert -#define GL_MESA_pack_invert 1 - -#define GL_PACK_INVERT_MESA 0x8758 - -#define GLEW_MESA_pack_invert GLEW_GET_VAR(__GLEW_MESA_pack_invert) - -#endif /* GL_MESA_pack_invert */ - -/* ------------------------- GL_MESA_resize_buffers ------------------------ */ - -#ifndef GL_MESA_resize_buffers -#define GL_MESA_resize_buffers 1 - -typedef void (GLAPIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void); - -#define glResizeBuffersMESA GLEW_GET_FUN(__glewResizeBuffersMESA) - -#define GLEW_MESA_resize_buffers GLEW_GET_VAR(__GLEW_MESA_resize_buffers) - -#endif /* GL_MESA_resize_buffers */ - -/* --------------------------- GL_MESA_window_pos -------------------------- */ - -#ifndef GL_MESA_window_pos -#define GL_MESA_window_pos 1 - -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint* p); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort* p); - -#define glWindowPos2dMESA GLEW_GET_FUN(__glewWindowPos2dMESA) -#define glWindowPos2dvMESA GLEW_GET_FUN(__glewWindowPos2dvMESA) -#define glWindowPos2fMESA GLEW_GET_FUN(__glewWindowPos2fMESA) -#define glWindowPos2fvMESA GLEW_GET_FUN(__glewWindowPos2fvMESA) -#define glWindowPos2iMESA GLEW_GET_FUN(__glewWindowPos2iMESA) -#define glWindowPos2ivMESA GLEW_GET_FUN(__glewWindowPos2ivMESA) -#define glWindowPos2sMESA GLEW_GET_FUN(__glewWindowPos2sMESA) -#define glWindowPos2svMESA GLEW_GET_FUN(__glewWindowPos2svMESA) -#define glWindowPos3dMESA GLEW_GET_FUN(__glewWindowPos3dMESA) -#define glWindowPos3dvMESA GLEW_GET_FUN(__glewWindowPos3dvMESA) -#define glWindowPos3fMESA GLEW_GET_FUN(__glewWindowPos3fMESA) -#define glWindowPos3fvMESA GLEW_GET_FUN(__glewWindowPos3fvMESA) -#define glWindowPos3iMESA GLEW_GET_FUN(__glewWindowPos3iMESA) -#define glWindowPos3ivMESA GLEW_GET_FUN(__glewWindowPos3ivMESA) -#define glWindowPos3sMESA GLEW_GET_FUN(__glewWindowPos3sMESA) -#define glWindowPos3svMESA GLEW_GET_FUN(__glewWindowPos3svMESA) -#define glWindowPos4dMESA GLEW_GET_FUN(__glewWindowPos4dMESA) -#define glWindowPos4dvMESA GLEW_GET_FUN(__glewWindowPos4dvMESA) -#define glWindowPos4fMESA GLEW_GET_FUN(__glewWindowPos4fMESA) -#define glWindowPos4fvMESA GLEW_GET_FUN(__glewWindowPos4fvMESA) -#define glWindowPos4iMESA GLEW_GET_FUN(__glewWindowPos4iMESA) -#define glWindowPos4ivMESA GLEW_GET_FUN(__glewWindowPos4ivMESA) -#define glWindowPos4sMESA GLEW_GET_FUN(__glewWindowPos4sMESA) -#define glWindowPos4svMESA GLEW_GET_FUN(__glewWindowPos4svMESA) - -#define GLEW_MESA_window_pos GLEW_GET_VAR(__GLEW_MESA_window_pos) - -#endif /* GL_MESA_window_pos */ - -/* ------------------------- GL_MESA_ycbcr_texture ------------------------- */ - -#ifndef GL_MESA_ycbcr_texture -#define GL_MESA_ycbcr_texture 1 - -#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA -#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB -#define GL_YCBCR_MESA 0x8757 - -#define GLEW_MESA_ycbcr_texture GLEW_GET_VAR(__GLEW_MESA_ycbcr_texture) - -#endif /* GL_MESA_ycbcr_texture */ - -/* ----------------------- GL_NVX_conditional_render ----------------------- */ - -#ifndef GL_NVX_conditional_render -#define GL_NVX_conditional_render 1 - -typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVXPROC) (void); - -#define glBeginConditionalRenderNVX GLEW_GET_FUN(__glewBeginConditionalRenderNVX) -#define glEndConditionalRenderNVX GLEW_GET_FUN(__glewEndConditionalRenderNVX) - -#define GLEW_NVX_conditional_render GLEW_GET_VAR(__GLEW_NVX_conditional_render) - -#endif /* GL_NVX_conditional_render */ - -/* ------------------------- GL_NVX_gpu_memory_info ------------------------ */ - -#ifndef GL_NVX_gpu_memory_info -#define GL_NVX_gpu_memory_info 1 - -#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 -#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 -#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 -#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A -#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B - -#define GLEW_NVX_gpu_memory_info GLEW_GET_VAR(__GLEW_NVX_gpu_memory_info) - -#endif /* GL_NVX_gpu_memory_info */ - -/* ------------------- GL_NV_bindless_multi_draw_indirect ------------------ */ - -#ifndef GL_NV_bindless_multi_draw_indirect -#define GL_NV_bindless_multi_draw_indirect 1 - -typedef void (GLAPIENTRY * PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); -typedef void (GLAPIENTRY * PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const GLvoid *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); - -#define glMultiDrawArraysIndirectBindlessNV GLEW_GET_FUN(__glewMultiDrawArraysIndirectBindlessNV) -#define glMultiDrawElementsIndirectBindlessNV GLEW_GET_FUN(__glewMultiDrawElementsIndirectBindlessNV) - -#define GLEW_NV_bindless_multi_draw_indirect GLEW_GET_VAR(__GLEW_NV_bindless_multi_draw_indirect) - -#endif /* GL_NV_bindless_multi_draw_indirect */ - -/* ------------------------- GL_NV_bindless_texture ------------------------ */ - -#ifndef GL_NV_bindless_texture -#define GL_NV_bindless_texture 1 - -typedef GLuint64 (GLAPIENTRY * PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); -typedef GLuint64 (GLAPIENTRY * PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); -typedef GLboolean (GLAPIENTRY * PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef GLboolean (GLAPIENTRY * PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64* values); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); -typedef void (GLAPIENTRY * PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64* value); - -#define glGetImageHandleNV GLEW_GET_FUN(__glewGetImageHandleNV) -#define glGetTextureHandleNV GLEW_GET_FUN(__glewGetTextureHandleNV) -#define glGetTextureSamplerHandleNV GLEW_GET_FUN(__glewGetTextureSamplerHandleNV) -#define glIsImageHandleResidentNV GLEW_GET_FUN(__glewIsImageHandleResidentNV) -#define glIsTextureHandleResidentNV GLEW_GET_FUN(__glewIsTextureHandleResidentNV) -#define glMakeImageHandleNonResidentNV GLEW_GET_FUN(__glewMakeImageHandleNonResidentNV) -#define glMakeImageHandleResidentNV GLEW_GET_FUN(__glewMakeImageHandleResidentNV) -#define glMakeTextureHandleNonResidentNV GLEW_GET_FUN(__glewMakeTextureHandleNonResidentNV) -#define glMakeTextureHandleResidentNV GLEW_GET_FUN(__glewMakeTextureHandleResidentNV) -#define glProgramUniformHandleui64NV GLEW_GET_FUN(__glewProgramUniformHandleui64NV) -#define glProgramUniformHandleui64vNV GLEW_GET_FUN(__glewProgramUniformHandleui64vNV) -#define glUniformHandleui64NV GLEW_GET_FUN(__glewUniformHandleui64NV) -#define glUniformHandleui64vNV GLEW_GET_FUN(__glewUniformHandleui64vNV) - -#define GLEW_NV_bindless_texture GLEW_GET_VAR(__GLEW_NV_bindless_texture) - -#endif /* GL_NV_bindless_texture */ - -/* --------------------- GL_NV_blend_equation_advanced --------------------- */ - -#ifndef GL_NV_blend_equation_advanced -#define GL_NV_blend_equation_advanced 1 - -#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 -#define GL_BLEND_OVERLAP_NV 0x9281 -#define GL_UNCORRELATED_NV 0x9282 -#define GL_DISJOINT_NV 0x9283 -#define GL_CONJOINT_NV 0x9284 -#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 -#define GL_SRC_NV 0x9286 -#define GL_DST_NV 0x9287 -#define GL_SRC_OVER_NV 0x9288 -#define GL_DST_OVER_NV 0x9289 -#define GL_SRC_IN_NV 0x928A -#define GL_DST_IN_NV 0x928B -#define GL_SRC_OUT_NV 0x928C -#define GL_DST_OUT_NV 0x928D -#define GL_SRC_ATOP_NV 0x928E -#define GL_DST_ATOP_NV 0x928F -#define GL_PLUS_NV 0x9291 -#define GL_PLUS_DARKER_NV 0x9292 -#define GL_MULTIPLY_NV 0x9294 -#define GL_SCREEN_NV 0x9295 -#define GL_OVERLAY_NV 0x9296 -#define GL_DARKEN_NV 0x9297 -#define GL_LIGHTEN_NV 0x9298 -#define GL_COLORDODGE_NV 0x9299 -#define GL_COLORBURN_NV 0x929A -#define GL_HARDLIGHT_NV 0x929B -#define GL_SOFTLIGHT_NV 0x929C -#define GL_DIFFERENCE_NV 0x929E -#define GL_MINUS_NV 0x929F -#define GL_EXCLUSION_NV 0x92A0 -#define GL_CONTRAST_NV 0x92A1 -#define GL_INVERT_RGB_NV 0x92A3 -#define GL_LINEARDODGE_NV 0x92A4 -#define GL_LINEARBURN_NV 0x92A5 -#define GL_VIVIDLIGHT_NV 0x92A6 -#define GL_LINEARLIGHT_NV 0x92A7 -#define GL_PINLIGHT_NV 0x92A8 -#define GL_HARDMIX_NV 0x92A9 -#define GL_HSL_HUE_NV 0x92AD -#define GL_HSL_SATURATION_NV 0x92AE -#define GL_HSL_COLOR_NV 0x92AF -#define GL_HSL_LUMINOSITY_NV 0x92B0 -#define GL_PLUS_CLAMPED_NV 0x92B1 -#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 -#define GL_MINUS_CLAMPED_NV 0x92B3 -#define GL_INVERT_OVG_NV 0x92B4 - -typedef void (GLAPIENTRY * PFNGLBLENDBARRIERNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); - -#define glBlendBarrierNV GLEW_GET_FUN(__glewBlendBarrierNV) -#define glBlendParameteriNV GLEW_GET_FUN(__glewBlendParameteriNV) - -#define GLEW_NV_blend_equation_advanced GLEW_GET_VAR(__GLEW_NV_blend_equation_advanced) - -#endif /* GL_NV_blend_equation_advanced */ - -/* ----------------- GL_NV_blend_equation_advanced_coherent ---------------- */ - -#ifndef GL_NV_blend_equation_advanced_coherent -#define GL_NV_blend_equation_advanced_coherent 1 - -#define GLEW_NV_blend_equation_advanced_coherent GLEW_GET_VAR(__GLEW_NV_blend_equation_advanced_coherent) - -#endif /* GL_NV_blend_equation_advanced_coherent */ - -/* --------------------------- GL_NV_blend_square -------------------------- */ - -#ifndef GL_NV_blend_square -#define GL_NV_blend_square 1 - -#define GLEW_NV_blend_square GLEW_GET_VAR(__GLEW_NV_blend_square) - -#endif /* GL_NV_blend_square */ - -/* ------------------------- GL_NV_compute_program5 ------------------------ */ - -#ifndef GL_NV_compute_program5 -#define GL_NV_compute_program5 1 - -#define GL_COMPUTE_PROGRAM_NV 0x90FB -#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC - -#define GLEW_NV_compute_program5 GLEW_GET_VAR(__GLEW_NV_compute_program5) - -#endif /* GL_NV_compute_program5 */ - -/* ------------------------ GL_NV_conditional_render ----------------------- */ - -#ifndef GL_NV_conditional_render -#define GL_NV_conditional_render 1 - -#define GL_QUERY_WAIT_NV 0x8E13 -#define GL_QUERY_NO_WAIT_NV 0x8E14 -#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 - -typedef void (GLAPIENTRY * PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); -typedef void (GLAPIENTRY * PFNGLENDCONDITIONALRENDERNVPROC) (void); - -#define glBeginConditionalRenderNV GLEW_GET_FUN(__glewBeginConditionalRenderNV) -#define glEndConditionalRenderNV GLEW_GET_FUN(__glewEndConditionalRenderNV) - -#define GLEW_NV_conditional_render GLEW_GET_VAR(__GLEW_NV_conditional_render) - -#endif /* GL_NV_conditional_render */ - -/* ----------------------- GL_NV_copy_depth_to_color ----------------------- */ - -#ifndef GL_NV_copy_depth_to_color -#define GL_NV_copy_depth_to_color 1 - -#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E -#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F - -#define GLEW_NV_copy_depth_to_color GLEW_GET_VAR(__GLEW_NV_copy_depth_to_color) - -#endif /* GL_NV_copy_depth_to_color */ - -/* ---------------------------- GL_NV_copy_image --------------------------- */ - -#ifndef GL_NV_copy_image -#define GL_NV_copy_image 1 - -typedef void (GLAPIENTRY * PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); - -#define glCopyImageSubDataNV GLEW_GET_FUN(__glewCopyImageSubDataNV) - -#define GLEW_NV_copy_image GLEW_GET_VAR(__GLEW_NV_copy_image) - -#endif /* GL_NV_copy_image */ - -/* -------------------------- GL_NV_deep_texture3D ------------------------- */ - -#ifndef GL_NV_deep_texture3D -#define GL_NV_deep_texture3D 1 - -#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 -#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 - -#define GLEW_NV_deep_texture3D GLEW_GET_VAR(__GLEW_NV_deep_texture3D) - -#endif /* GL_NV_deep_texture3D */ - -/* ------------------------ GL_NV_depth_buffer_float ----------------------- */ - -#ifndef GL_NV_depth_buffer_float -#define GL_NV_depth_buffer_float 1 - -#define GL_DEPTH_COMPONENT32F_NV 0x8DAB -#define GL_DEPTH32F_STENCIL8_NV 0x8DAC -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD -#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF - -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); -typedef void (GLAPIENTRY * PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); - -#define glClearDepthdNV GLEW_GET_FUN(__glewClearDepthdNV) -#define glDepthBoundsdNV GLEW_GET_FUN(__glewDepthBoundsdNV) -#define glDepthRangedNV GLEW_GET_FUN(__glewDepthRangedNV) - -#define GLEW_NV_depth_buffer_float GLEW_GET_VAR(__GLEW_NV_depth_buffer_float) - -#endif /* GL_NV_depth_buffer_float */ - -/* --------------------------- GL_NV_depth_clamp --------------------------- */ - -#ifndef GL_NV_depth_clamp -#define GL_NV_depth_clamp 1 - -#define GL_DEPTH_CLAMP_NV 0x864F - -#define GLEW_NV_depth_clamp GLEW_GET_VAR(__GLEW_NV_depth_clamp) - -#endif /* GL_NV_depth_clamp */ - -/* ---------------------- GL_NV_depth_range_unclamped ---------------------- */ - -#ifndef GL_NV_depth_range_unclamped -#define GL_NV_depth_range_unclamped 1 - -#define GL_SAMPLE_COUNT_BITS_NV 0x8864 -#define GL_CURRENT_SAMPLE_COUNT_QUERY_NV 0x8865 -#define GL_QUERY_RESULT_NV 0x8866 -#define GL_QUERY_RESULT_AVAILABLE_NV 0x8867 -#define GL_SAMPLE_COUNT_NV 0x8914 - -#define GLEW_NV_depth_range_unclamped GLEW_GET_VAR(__GLEW_NV_depth_range_unclamped) - -#endif /* GL_NV_depth_range_unclamped */ - -/* --------------------------- GL_NV_draw_texture -------------------------- */ - -#ifndef GL_NV_draw_texture -#define GL_NV_draw_texture 1 - -typedef void (GLAPIENTRY * PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); - -#define glDrawTextureNV GLEW_GET_FUN(__glewDrawTextureNV) - -#define GLEW_NV_draw_texture GLEW_GET_VAR(__GLEW_NV_draw_texture) - -#endif /* GL_NV_draw_texture */ - -/* ---------------------------- GL_NV_evaluators --------------------------- */ - -#ifndef GL_NV_evaluators -#define GL_NV_evaluators 1 - -#define GL_EVAL_2D_NV 0x86C0 -#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 -#define GL_MAP_TESSELLATION_NV 0x86C2 -#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 -#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 -#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 -#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 -#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 -#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 -#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 -#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA -#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB -#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC -#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD -#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE -#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF -#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 -#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 -#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 -#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 -#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 -#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 -#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 -#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 - -typedef void (GLAPIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); -typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points); -typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points); -typedef void (GLAPIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint* params); - -#define glEvalMapsNV GLEW_GET_FUN(__glewEvalMapsNV) -#define glGetMapAttribParameterfvNV GLEW_GET_FUN(__glewGetMapAttribParameterfvNV) -#define glGetMapAttribParameterivNV GLEW_GET_FUN(__glewGetMapAttribParameterivNV) -#define glGetMapControlPointsNV GLEW_GET_FUN(__glewGetMapControlPointsNV) -#define glGetMapParameterfvNV GLEW_GET_FUN(__glewGetMapParameterfvNV) -#define glGetMapParameterivNV GLEW_GET_FUN(__glewGetMapParameterivNV) -#define glMapControlPointsNV GLEW_GET_FUN(__glewMapControlPointsNV) -#define glMapParameterfvNV GLEW_GET_FUN(__glewMapParameterfvNV) -#define glMapParameterivNV GLEW_GET_FUN(__glewMapParameterivNV) - -#define GLEW_NV_evaluators GLEW_GET_VAR(__GLEW_NV_evaluators) - -#endif /* GL_NV_evaluators */ - -/* ----------------------- GL_NV_explicit_multisample ---------------------- */ - -#ifndef GL_NV_explicit_multisample -#define GL_NV_explicit_multisample 1 - -#define GL_SAMPLE_POSITION_NV 0x8E50 -#define GL_SAMPLE_MASK_NV 0x8E51 -#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 -#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 -#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 -#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 -#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 -#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 -#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 -#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 - -typedef void (GLAPIENTRY * PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat* val); -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); -typedef void (GLAPIENTRY * PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); - -#define glGetMultisamplefvNV GLEW_GET_FUN(__glewGetMultisamplefvNV) -#define glSampleMaskIndexedNV GLEW_GET_FUN(__glewSampleMaskIndexedNV) -#define glTexRenderbufferNV GLEW_GET_FUN(__glewTexRenderbufferNV) - -#define GLEW_NV_explicit_multisample GLEW_GET_VAR(__GLEW_NV_explicit_multisample) - -#endif /* GL_NV_explicit_multisample */ - -/* ------------------------------ GL_NV_fence ------------------------------ */ - -#ifndef GL_NV_fence -#define GL_NV_fence 1 - -#define GL_ALL_COMPLETED_NV 0x84F2 -#define GL_FENCE_STATUS_NV 0x84F3 -#define GL_FENCE_CONDITION_NV 0x84F4 - -typedef void (GLAPIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint* fences); -typedef void (GLAPIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint* fences); -typedef void (GLAPIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISFENCENVPROC) (GLuint fence); -typedef void (GLAPIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); -typedef GLboolean (GLAPIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence); - -#define glDeleteFencesNV GLEW_GET_FUN(__glewDeleteFencesNV) -#define glFinishFenceNV GLEW_GET_FUN(__glewFinishFenceNV) -#define glGenFencesNV GLEW_GET_FUN(__glewGenFencesNV) -#define glGetFenceivNV GLEW_GET_FUN(__glewGetFenceivNV) -#define glIsFenceNV GLEW_GET_FUN(__glewIsFenceNV) -#define glSetFenceNV GLEW_GET_FUN(__glewSetFenceNV) -#define glTestFenceNV GLEW_GET_FUN(__glewTestFenceNV) - -#define GLEW_NV_fence GLEW_GET_VAR(__GLEW_NV_fence) - -#endif /* GL_NV_fence */ - -/* --------------------------- GL_NV_float_buffer -------------------------- */ - -#ifndef GL_NV_float_buffer -#define GL_NV_float_buffer 1 - -#define GL_FLOAT_R_NV 0x8880 -#define GL_FLOAT_RG_NV 0x8881 -#define GL_FLOAT_RGB_NV 0x8882 -#define GL_FLOAT_RGBA_NV 0x8883 -#define GL_FLOAT_R16_NV 0x8884 -#define GL_FLOAT_R32_NV 0x8885 -#define GL_FLOAT_RG16_NV 0x8886 -#define GL_FLOAT_RG32_NV 0x8887 -#define GL_FLOAT_RGB16_NV 0x8888 -#define GL_FLOAT_RGB32_NV 0x8889 -#define GL_FLOAT_RGBA16_NV 0x888A -#define GL_FLOAT_RGBA32_NV 0x888B -#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C -#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D -#define GL_FLOAT_RGBA_MODE_NV 0x888E - -#define GLEW_NV_float_buffer GLEW_GET_VAR(__GLEW_NV_float_buffer) - -#endif /* GL_NV_float_buffer */ - -/* --------------------------- GL_NV_fog_distance -------------------------- */ - -#ifndef GL_NV_fog_distance -#define GL_NV_fog_distance 1 - -#define GL_FOG_DISTANCE_MODE_NV 0x855A -#define GL_EYE_RADIAL_NV 0x855B -#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C - -#define GLEW_NV_fog_distance GLEW_GET_VAR(__GLEW_NV_fog_distance) - -#endif /* GL_NV_fog_distance */ - -/* ------------------------- GL_NV_fragment_program ------------------------ */ - -#ifndef GL_NV_fragment_program -#define GL_NV_fragment_program 1 - -#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 -#define GL_FRAGMENT_PROGRAM_NV 0x8870 -#define GL_MAX_TEXTURE_COORDS_NV 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 -#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 -#define GL_PROGRAM_ERROR_STRING_NV 0x8874 - -typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble *params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLdouble v[]); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte* name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte* name, const GLfloat v[]); - -#define glGetProgramNamedParameterdvNV GLEW_GET_FUN(__glewGetProgramNamedParameterdvNV) -#define glGetProgramNamedParameterfvNV GLEW_GET_FUN(__glewGetProgramNamedParameterfvNV) -#define glProgramNamedParameter4dNV GLEW_GET_FUN(__glewProgramNamedParameter4dNV) -#define glProgramNamedParameter4dvNV GLEW_GET_FUN(__glewProgramNamedParameter4dvNV) -#define glProgramNamedParameter4fNV GLEW_GET_FUN(__glewProgramNamedParameter4fNV) -#define glProgramNamedParameter4fvNV GLEW_GET_FUN(__glewProgramNamedParameter4fvNV) - -#define GLEW_NV_fragment_program GLEW_GET_VAR(__GLEW_NV_fragment_program) - -#endif /* GL_NV_fragment_program */ - -/* ------------------------ GL_NV_fragment_program2 ------------------------ */ - -#ifndef GL_NV_fragment_program2 -#define GL_NV_fragment_program2 1 - -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 -#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 -#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 -#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 - -#define GLEW_NV_fragment_program2 GLEW_GET_VAR(__GLEW_NV_fragment_program2) - -#endif /* GL_NV_fragment_program2 */ - -/* ------------------------ GL_NV_fragment_program4 ------------------------ */ - -#ifndef GL_NV_fragment_program4 -#define GL_NV_fragment_program4 1 - -#define GLEW_NV_fragment_program4 GLEW_GET_VAR(__GLEW_NV_fragment_program4) - -#endif /* GL_NV_fragment_program4 */ - -/* --------------------- GL_NV_fragment_program_option --------------------- */ - -#ifndef GL_NV_fragment_program_option -#define GL_NV_fragment_program_option 1 - -#define GLEW_NV_fragment_program_option GLEW_GET_VAR(__GLEW_NV_fragment_program_option) - -#endif /* GL_NV_fragment_program_option */ - -/* ----------------- GL_NV_framebuffer_multisample_coverage ---------------- */ - -#ifndef GL_NV_framebuffer_multisample_coverage -#define GL_NV_framebuffer_multisample_coverage 1 - -#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB -#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 -#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 -#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 - -typedef void (GLAPIENTRY * PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); - -#define glRenderbufferStorageMultisampleCoverageNV GLEW_GET_FUN(__glewRenderbufferStorageMultisampleCoverageNV) - -#define GLEW_NV_framebuffer_multisample_coverage GLEW_GET_VAR(__GLEW_NV_framebuffer_multisample_coverage) - -#endif /* GL_NV_framebuffer_multisample_coverage */ - -/* ------------------------ GL_NV_geometry_program4 ------------------------ */ - -#ifndef GL_NV_geometry_program4 -#define GL_NV_geometry_program4 1 - -#define GL_GEOMETRY_PROGRAM_NV 0x8C26 -#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 -#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 - -typedef void (GLAPIENTRY * PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); - -#define glProgramVertexLimitNV GLEW_GET_FUN(__glewProgramVertexLimitNV) - -#define GLEW_NV_geometry_program4 GLEW_GET_VAR(__GLEW_NV_geometry_program4) - -#endif /* GL_NV_geometry_program4 */ - -/* ------------------------- GL_NV_geometry_shader4 ------------------------ */ - -#ifndef GL_NV_geometry_shader4 -#define GL_NV_geometry_shader4 1 - -#define GLEW_NV_geometry_shader4 GLEW_GET_VAR(__GLEW_NV_geometry_shader4) - -#endif /* GL_NV_geometry_shader4 */ - -/* --------------------------- GL_NV_gpu_program4 -------------------------- */ - -#ifndef GL_NV_gpu_program4 -#define GL_NV_gpu_program4 1 - -#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 -#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 -#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 -#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 -#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 -#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 -#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 - -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); - -#define glProgramEnvParameterI4iNV GLEW_GET_FUN(__glewProgramEnvParameterI4iNV) -#define glProgramEnvParameterI4ivNV GLEW_GET_FUN(__glewProgramEnvParameterI4ivNV) -#define glProgramEnvParameterI4uiNV GLEW_GET_FUN(__glewProgramEnvParameterI4uiNV) -#define glProgramEnvParameterI4uivNV GLEW_GET_FUN(__glewProgramEnvParameterI4uivNV) -#define glProgramEnvParametersI4ivNV GLEW_GET_FUN(__glewProgramEnvParametersI4ivNV) -#define glProgramEnvParametersI4uivNV GLEW_GET_FUN(__glewProgramEnvParametersI4uivNV) -#define glProgramLocalParameterI4iNV GLEW_GET_FUN(__glewProgramLocalParameterI4iNV) -#define glProgramLocalParameterI4ivNV GLEW_GET_FUN(__glewProgramLocalParameterI4ivNV) -#define glProgramLocalParameterI4uiNV GLEW_GET_FUN(__glewProgramLocalParameterI4uiNV) -#define glProgramLocalParameterI4uivNV GLEW_GET_FUN(__glewProgramLocalParameterI4uivNV) -#define glProgramLocalParametersI4ivNV GLEW_GET_FUN(__glewProgramLocalParametersI4ivNV) -#define glProgramLocalParametersI4uivNV GLEW_GET_FUN(__glewProgramLocalParametersI4uivNV) - -#define GLEW_NV_gpu_program4 GLEW_GET_VAR(__GLEW_NV_gpu_program4) - -#endif /* GL_NV_gpu_program4 */ - -/* --------------------------- GL_NV_gpu_program5 -------------------------- */ - -#ifndef GL_NV_gpu_program5 -#define GL_NV_gpu_program5 1 - -#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A -#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B -#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C -#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D -#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E -#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F - -#define GLEW_NV_gpu_program5 GLEW_GET_VAR(__GLEW_NV_gpu_program5) - -#endif /* GL_NV_gpu_program5 */ - -/* -------------------- GL_NV_gpu_program5_mem_extended -------------------- */ - -#ifndef GL_NV_gpu_program5_mem_extended -#define GL_NV_gpu_program5_mem_extended 1 - -#define GLEW_NV_gpu_program5_mem_extended GLEW_GET_VAR(__GLEW_NV_gpu_program5_mem_extended) - -#endif /* GL_NV_gpu_program5_mem_extended */ - -/* ------------------------- GL_NV_gpu_program_fp64 ------------------------ */ - -#ifndef GL_NV_gpu_program_fp64 -#define GL_NV_gpu_program_fp64 1 - -#define GLEW_NV_gpu_program_fp64 GLEW_GET_VAR(__GLEW_NV_gpu_program_fp64) - -#endif /* GL_NV_gpu_program_fp64 */ - -/* --------------------------- GL_NV_gpu_shader5 --------------------------- */ - -#ifndef GL_NV_gpu_shader5 -#define GL_NV_gpu_shader5 1 - -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F -#define GL_INT8_NV 0x8FE0 -#define GL_INT8_VEC2_NV 0x8FE1 -#define GL_INT8_VEC3_NV 0x8FE2 -#define GL_INT8_VEC4_NV 0x8FE3 -#define GL_INT16_NV 0x8FE4 -#define GL_INT16_VEC2_NV 0x8FE5 -#define GL_INT16_VEC3_NV 0x8FE6 -#define GL_INT16_VEC4_NV 0x8FE7 -#define GL_INT64_VEC2_NV 0x8FE9 -#define GL_INT64_VEC3_NV 0x8FEA -#define GL_INT64_VEC4_NV 0x8FEB -#define GL_UNSIGNED_INT8_NV 0x8FEC -#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED -#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE -#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF -#define GL_UNSIGNED_INT16_NV 0x8FF0 -#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 -#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 -#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 -#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 -#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 -#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 -#define GL_FLOAT16_NV 0x8FF8 -#define GL_FLOAT16_VEC2_NV 0x8FF9 -#define GL_FLOAT16_VEC3_NV 0x8FFA -#define GL_FLOAT16_VEC4_NV 0x8FFB - -typedef void (GLAPIENTRY * PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); -typedef void (GLAPIENTRY * PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); -typedef void (GLAPIENTRY * PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); -typedef void (GLAPIENTRY * PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GLAPIENTRY * PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GLAPIENTRY * PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GLAPIENTRY * PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GLAPIENTRY * PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); - -#define glGetUniformi64vNV GLEW_GET_FUN(__glewGetUniformi64vNV) -#define glGetUniformui64vNV GLEW_GET_FUN(__glewGetUniformui64vNV) -#define glProgramUniform1i64NV GLEW_GET_FUN(__glewProgramUniform1i64NV) -#define glProgramUniform1i64vNV GLEW_GET_FUN(__glewProgramUniform1i64vNV) -#define glProgramUniform1ui64NV GLEW_GET_FUN(__glewProgramUniform1ui64NV) -#define glProgramUniform1ui64vNV GLEW_GET_FUN(__glewProgramUniform1ui64vNV) -#define glProgramUniform2i64NV GLEW_GET_FUN(__glewProgramUniform2i64NV) -#define glProgramUniform2i64vNV GLEW_GET_FUN(__glewProgramUniform2i64vNV) -#define glProgramUniform2ui64NV GLEW_GET_FUN(__glewProgramUniform2ui64NV) -#define glProgramUniform2ui64vNV GLEW_GET_FUN(__glewProgramUniform2ui64vNV) -#define glProgramUniform3i64NV GLEW_GET_FUN(__glewProgramUniform3i64NV) -#define glProgramUniform3i64vNV GLEW_GET_FUN(__glewProgramUniform3i64vNV) -#define glProgramUniform3ui64NV GLEW_GET_FUN(__glewProgramUniform3ui64NV) -#define glProgramUniform3ui64vNV GLEW_GET_FUN(__glewProgramUniform3ui64vNV) -#define glProgramUniform4i64NV GLEW_GET_FUN(__glewProgramUniform4i64NV) -#define glProgramUniform4i64vNV GLEW_GET_FUN(__glewProgramUniform4i64vNV) -#define glProgramUniform4ui64NV GLEW_GET_FUN(__glewProgramUniform4ui64NV) -#define glProgramUniform4ui64vNV GLEW_GET_FUN(__glewProgramUniform4ui64vNV) -#define glUniform1i64NV GLEW_GET_FUN(__glewUniform1i64NV) -#define glUniform1i64vNV GLEW_GET_FUN(__glewUniform1i64vNV) -#define glUniform1ui64NV GLEW_GET_FUN(__glewUniform1ui64NV) -#define glUniform1ui64vNV GLEW_GET_FUN(__glewUniform1ui64vNV) -#define glUniform2i64NV GLEW_GET_FUN(__glewUniform2i64NV) -#define glUniform2i64vNV GLEW_GET_FUN(__glewUniform2i64vNV) -#define glUniform2ui64NV GLEW_GET_FUN(__glewUniform2ui64NV) -#define glUniform2ui64vNV GLEW_GET_FUN(__glewUniform2ui64vNV) -#define glUniform3i64NV GLEW_GET_FUN(__glewUniform3i64NV) -#define glUniform3i64vNV GLEW_GET_FUN(__glewUniform3i64vNV) -#define glUniform3ui64NV GLEW_GET_FUN(__glewUniform3ui64NV) -#define glUniform3ui64vNV GLEW_GET_FUN(__glewUniform3ui64vNV) -#define glUniform4i64NV GLEW_GET_FUN(__glewUniform4i64NV) -#define glUniform4i64vNV GLEW_GET_FUN(__glewUniform4i64vNV) -#define glUniform4ui64NV GLEW_GET_FUN(__glewUniform4ui64NV) -#define glUniform4ui64vNV GLEW_GET_FUN(__glewUniform4ui64vNV) - -#define GLEW_NV_gpu_shader5 GLEW_GET_VAR(__GLEW_NV_gpu_shader5) - -#endif /* GL_NV_gpu_shader5 */ - -/* ---------------------------- GL_NV_half_float --------------------------- */ - -#ifndef GL_NV_half_float -#define GL_NV_half_float 1 - -#define GL_HALF_FLOAT_NV 0x140B - -typedef unsigned short GLhalf; - -typedef void (GLAPIENTRY * PFNGLCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); -typedef void (GLAPIENTRY * PFNGLCOLOR3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLCOLOR4HNVPROC) (GLhalf red, GLhalf green, GLhalf blue, GLhalf alpha); -typedef void (GLAPIENTRY * PFNGLCOLOR4HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLFOGCOORDHNVPROC) (GLhalf fog); -typedef void (GLAPIENTRY * PFNGLFOGCOORDHVNVPROC) (const GLhalf* fog); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalf s); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalf s, GLhalf t); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalf s, GLhalf t, GLhalf r, GLhalf q); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLNORMAL3HNVPROC) (GLhalf nx, GLhalf ny, GLhalf nz); -typedef void (GLAPIENTRY * PFNGLNORMAL3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HNVPROC) (GLhalf red, GLhalf green, GLhalf blue); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD1HNVPROC) (GLhalf s); -typedef void (GLAPIENTRY * PFNGLTEXCOORD1HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2HNVPROC) (GLhalf s, GLhalf t); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD3HNVPROC) (GLhalf s, GLhalf t, GLhalf r); -typedef void (GLAPIENTRY * PFNGLTEXCOORD3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4HNVPROC) (GLhalf s, GLhalf t, GLhalf r, GLhalf q); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEX2HNVPROC) (GLhalf x, GLhalf y); -typedef void (GLAPIENTRY * PFNGLVERTEX2HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEX3HNVPROC) (GLhalf x, GLhalf y, GLhalf z); -typedef void (GLAPIENTRY * PFNGLVERTEX3HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEX4HNVPROC) (GLhalf x, GLhalf y, GLhalf z, GLhalf w); -typedef void (GLAPIENTRY * PFNGLVERTEX4HVNVPROC) (const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalf x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalf x, GLhalf y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalf x, GLhalf y, GLhalf z, GLhalf w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalf* v); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHNVPROC) (GLhalf weight); -typedef void (GLAPIENTRY * PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalf* weight); - -#define glColor3hNV GLEW_GET_FUN(__glewColor3hNV) -#define glColor3hvNV GLEW_GET_FUN(__glewColor3hvNV) -#define glColor4hNV GLEW_GET_FUN(__glewColor4hNV) -#define glColor4hvNV GLEW_GET_FUN(__glewColor4hvNV) -#define glFogCoordhNV GLEW_GET_FUN(__glewFogCoordhNV) -#define glFogCoordhvNV GLEW_GET_FUN(__glewFogCoordhvNV) -#define glMultiTexCoord1hNV GLEW_GET_FUN(__glewMultiTexCoord1hNV) -#define glMultiTexCoord1hvNV GLEW_GET_FUN(__glewMultiTexCoord1hvNV) -#define glMultiTexCoord2hNV GLEW_GET_FUN(__glewMultiTexCoord2hNV) -#define glMultiTexCoord2hvNV GLEW_GET_FUN(__glewMultiTexCoord2hvNV) -#define glMultiTexCoord3hNV GLEW_GET_FUN(__glewMultiTexCoord3hNV) -#define glMultiTexCoord3hvNV GLEW_GET_FUN(__glewMultiTexCoord3hvNV) -#define glMultiTexCoord4hNV GLEW_GET_FUN(__glewMultiTexCoord4hNV) -#define glMultiTexCoord4hvNV GLEW_GET_FUN(__glewMultiTexCoord4hvNV) -#define glNormal3hNV GLEW_GET_FUN(__glewNormal3hNV) -#define glNormal3hvNV GLEW_GET_FUN(__glewNormal3hvNV) -#define glSecondaryColor3hNV GLEW_GET_FUN(__glewSecondaryColor3hNV) -#define glSecondaryColor3hvNV GLEW_GET_FUN(__glewSecondaryColor3hvNV) -#define glTexCoord1hNV GLEW_GET_FUN(__glewTexCoord1hNV) -#define glTexCoord1hvNV GLEW_GET_FUN(__glewTexCoord1hvNV) -#define glTexCoord2hNV GLEW_GET_FUN(__glewTexCoord2hNV) -#define glTexCoord2hvNV GLEW_GET_FUN(__glewTexCoord2hvNV) -#define glTexCoord3hNV GLEW_GET_FUN(__glewTexCoord3hNV) -#define glTexCoord3hvNV GLEW_GET_FUN(__glewTexCoord3hvNV) -#define glTexCoord4hNV GLEW_GET_FUN(__glewTexCoord4hNV) -#define glTexCoord4hvNV GLEW_GET_FUN(__glewTexCoord4hvNV) -#define glVertex2hNV GLEW_GET_FUN(__glewVertex2hNV) -#define glVertex2hvNV GLEW_GET_FUN(__glewVertex2hvNV) -#define glVertex3hNV GLEW_GET_FUN(__glewVertex3hNV) -#define glVertex3hvNV GLEW_GET_FUN(__glewVertex3hvNV) -#define glVertex4hNV GLEW_GET_FUN(__glewVertex4hNV) -#define glVertex4hvNV GLEW_GET_FUN(__glewVertex4hvNV) -#define glVertexAttrib1hNV GLEW_GET_FUN(__glewVertexAttrib1hNV) -#define glVertexAttrib1hvNV GLEW_GET_FUN(__glewVertexAttrib1hvNV) -#define glVertexAttrib2hNV GLEW_GET_FUN(__glewVertexAttrib2hNV) -#define glVertexAttrib2hvNV GLEW_GET_FUN(__glewVertexAttrib2hvNV) -#define glVertexAttrib3hNV GLEW_GET_FUN(__glewVertexAttrib3hNV) -#define glVertexAttrib3hvNV GLEW_GET_FUN(__glewVertexAttrib3hvNV) -#define glVertexAttrib4hNV GLEW_GET_FUN(__glewVertexAttrib4hNV) -#define glVertexAttrib4hvNV GLEW_GET_FUN(__glewVertexAttrib4hvNV) -#define glVertexAttribs1hvNV GLEW_GET_FUN(__glewVertexAttribs1hvNV) -#define glVertexAttribs2hvNV GLEW_GET_FUN(__glewVertexAttribs2hvNV) -#define glVertexAttribs3hvNV GLEW_GET_FUN(__glewVertexAttribs3hvNV) -#define glVertexAttribs4hvNV GLEW_GET_FUN(__glewVertexAttribs4hvNV) -#define glVertexWeighthNV GLEW_GET_FUN(__glewVertexWeighthNV) -#define glVertexWeighthvNV GLEW_GET_FUN(__glewVertexWeighthvNV) - -#define GLEW_NV_half_float GLEW_GET_VAR(__GLEW_NV_half_float) - -#endif /* GL_NV_half_float */ - -/* ------------------------ GL_NV_light_max_exponent ----------------------- */ - -#ifndef GL_NV_light_max_exponent -#define GL_NV_light_max_exponent 1 - -#define GL_MAX_SHININESS_NV 0x8504 -#define GL_MAX_SPOT_EXPONENT_NV 0x8505 - -#define GLEW_NV_light_max_exponent GLEW_GET_VAR(__GLEW_NV_light_max_exponent) - -#endif /* GL_NV_light_max_exponent */ - -/* ----------------------- GL_NV_multisample_coverage ---------------------- */ - -#ifndef GL_NV_multisample_coverage -#define GL_NV_multisample_coverage 1 - -#define GL_COLOR_SAMPLES_NV 0x8E20 - -#define GLEW_NV_multisample_coverage GLEW_GET_VAR(__GLEW_NV_multisample_coverage) - -#endif /* GL_NV_multisample_coverage */ - -/* --------------------- GL_NV_multisample_filter_hint --------------------- */ - -#ifndef GL_NV_multisample_filter_hint -#define GL_NV_multisample_filter_hint 1 - -#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 - -#define GLEW_NV_multisample_filter_hint GLEW_GET_VAR(__GLEW_NV_multisample_filter_hint) - -#endif /* GL_NV_multisample_filter_hint */ - -/* ------------------------- GL_NV_occlusion_query ------------------------- */ - -#ifndef GL_NV_occlusion_query -#define GL_NV_occlusion_query 1 - -#define GL_PIXEL_COUNTER_BITS_NV 0x8864 -#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 -#define GL_PIXEL_COUNT_NV 0x8866 -#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 - -typedef void (GLAPIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); - -#define glBeginOcclusionQueryNV GLEW_GET_FUN(__glewBeginOcclusionQueryNV) -#define glDeleteOcclusionQueriesNV GLEW_GET_FUN(__glewDeleteOcclusionQueriesNV) -#define glEndOcclusionQueryNV GLEW_GET_FUN(__glewEndOcclusionQueryNV) -#define glGenOcclusionQueriesNV GLEW_GET_FUN(__glewGenOcclusionQueriesNV) -#define glGetOcclusionQueryivNV GLEW_GET_FUN(__glewGetOcclusionQueryivNV) -#define glGetOcclusionQueryuivNV GLEW_GET_FUN(__glewGetOcclusionQueryuivNV) -#define glIsOcclusionQueryNV GLEW_GET_FUN(__glewIsOcclusionQueryNV) - -#define GLEW_NV_occlusion_query GLEW_GET_VAR(__GLEW_NV_occlusion_query) - -#endif /* GL_NV_occlusion_query */ - -/* ----------------------- GL_NV_packed_depth_stencil ---------------------- */ - -#ifndef GL_NV_packed_depth_stencil -#define GL_NV_packed_depth_stencil 1 - -#define GL_DEPTH_STENCIL_NV 0x84F9 -#define GL_UNSIGNED_INT_24_8_NV 0x84FA - -#define GLEW_NV_packed_depth_stencil GLEW_GET_VAR(__GLEW_NV_packed_depth_stencil) - -#endif /* GL_NV_packed_depth_stencil */ - -/* --------------------- GL_NV_parameter_buffer_object --------------------- */ - -#ifndef GL_NV_parameter_buffer_object -#define GL_NV_parameter_buffer_object 1 - -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 -#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 -#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 -#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 -#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 - -typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLuint *params); -typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint buffer, GLuint index, GLsizei count, const GLfloat *params); - -#define glProgramBufferParametersIivNV GLEW_GET_FUN(__glewProgramBufferParametersIivNV) -#define glProgramBufferParametersIuivNV GLEW_GET_FUN(__glewProgramBufferParametersIuivNV) -#define glProgramBufferParametersfvNV GLEW_GET_FUN(__glewProgramBufferParametersfvNV) - -#define GLEW_NV_parameter_buffer_object GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object) - -#endif /* GL_NV_parameter_buffer_object */ - -/* --------------------- GL_NV_parameter_buffer_object2 -------------------- */ - -#ifndef GL_NV_parameter_buffer_object2 -#define GL_NV_parameter_buffer_object2 1 - -#define GLEW_NV_parameter_buffer_object2 GLEW_GET_VAR(__GLEW_NV_parameter_buffer_object2) - -#endif /* GL_NV_parameter_buffer_object2 */ - -/* -------------------------- GL_NV_path_rendering ------------------------- */ - -#ifndef GL_NV_path_rendering -#define GL_NV_path_rendering 1 - -#define GL_CLOSE_PATH_NV 0x00 -#define GL_BOLD_BIT_NV 0x01 -#define GL_GLYPH_WIDTH_BIT_NV 0x01 -#define GL_GLYPH_HEIGHT_BIT_NV 0x02 -#define GL_ITALIC_BIT_NV 0x02 -#define GL_MOVE_TO_NV 0x02 -#define GL_RELATIVE_MOVE_TO_NV 0x03 -#define GL_LINE_TO_NV 0x04 -#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 -#define GL_RELATIVE_LINE_TO_NV 0x05 -#define GL_HORIZONTAL_LINE_TO_NV 0x06 -#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 -#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 -#define GL_VERTICAL_LINE_TO_NV 0x08 -#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 -#define GL_QUADRATIC_CURVE_TO_NV 0x0A -#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B -#define GL_CUBIC_CURVE_TO_NV 0x0C -#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D -#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E -#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F -#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 -#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 -#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 -#define GL_SMALL_CCW_ARC_TO_NV 0x12 -#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 -#define GL_SMALL_CW_ARC_TO_NV 0x14 -#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 -#define GL_LARGE_CCW_ARC_TO_NV 0x16 -#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 -#define GL_LARGE_CW_ARC_TO_NV 0x18 -#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 -#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 -#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 -#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 -#define GL_RESTART_PATH_NV 0xF0 -#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 -#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 -#define GL_RECT_NV 0xF6 -#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 -#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA -#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC -#define GL_ARC_TO_NV 0xFE -#define GL_RELATIVE_ARC_TO_NV 0xFF -#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PATH_FORMAT_SVG_NV 0x9070 -#define GL_PATH_FORMAT_PS_NV 0x9071 -#define GL_STANDARD_FONT_NAME_NV 0x9072 -#define GL_SYSTEM_FONT_NAME_NV 0x9073 -#define GL_FILE_NAME_NV 0x9074 -#define GL_PATH_STROKE_WIDTH_NV 0x9075 -#define GL_PATH_END_CAPS_NV 0x9076 -#define GL_PATH_INITIAL_END_CAP_NV 0x9077 -#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 -#define GL_PATH_JOIN_STYLE_NV 0x9079 -#define GL_PATH_MITER_LIMIT_NV 0x907A -#define GL_PATH_DASH_CAPS_NV 0x907B -#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C -#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D -#define GL_PATH_DASH_OFFSET_NV 0x907E -#define GL_PATH_CLIENT_LENGTH_NV 0x907F -#define GL_PATH_FILL_MODE_NV 0x9080 -#define GL_PATH_FILL_MASK_NV 0x9081 -#define GL_PATH_FILL_COVER_MODE_NV 0x9082 -#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 -#define GL_PATH_STROKE_MASK_NV 0x9084 -#define GL_COUNT_UP_NV 0x9088 -#define GL_COUNT_DOWN_NV 0x9089 -#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A -#define GL_CONVEX_HULL_NV 0x908B -#define GL_BOUNDING_BOX_NV 0x908D -#define GL_TRANSLATE_X_NV 0x908E -#define GL_TRANSLATE_Y_NV 0x908F -#define GL_TRANSLATE_2D_NV 0x9090 -#define GL_TRANSLATE_3D_NV 0x9091 -#define GL_AFFINE_2D_NV 0x9092 -#define GL_AFFINE_3D_NV 0x9094 -#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 -#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 -#define GL_UTF8_NV 0x909A -#define GL_UTF16_NV 0x909B -#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C -#define GL_PATH_COMMAND_COUNT_NV 0x909D -#define GL_PATH_COORD_COUNT_NV 0x909E -#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F -#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 -#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 -#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 -#define GL_SQUARE_NV 0x90A3 -#define GL_ROUND_NV 0x90A4 -#define GL_TRIANGULAR_NV 0x90A5 -#define GL_BEVEL_NV 0x90A6 -#define GL_MITER_REVERT_NV 0x90A7 -#define GL_MITER_TRUNCATE_NV 0x90A8 -#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 -#define GL_USE_MISSING_GLYPH_NV 0x90AA -#define GL_PATH_ERROR_POSITION_NV 0x90AB -#define GL_PATH_FOG_GEN_MODE_NV 0x90AC -#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD -#define GL_ADJACENT_PAIRS_NV 0x90AE -#define GL_FIRST_TO_REST_NV 0x90AF -#define GL_PATH_GEN_MODE_NV 0x90B0 -#define GL_PATH_GEN_COEFF_NV 0x90B1 -#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 -#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 -#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 -#define GL_MOVE_TO_RESETS_NV 0x90B5 -#define GL_MOVE_TO_CONTINUES_NV 0x90B6 -#define GL_PATH_STENCIL_FUNC_NV 0x90B7 -#define GL_PATH_STENCIL_REF_NV 0x90B8 -#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 -#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD -#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE -#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF -#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 -#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 -#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 -#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 -#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 -#define GL_FONT_ASCENDER_BIT_NV 0x00200000 -#define GL_FONT_DESCENDER_BIT_NV 0x00400000 -#define GL_FONT_HEIGHT_BIT_NV 0x00800000 -#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 -#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 -#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 -#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 -#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 - -typedef void (GLAPIENTRY * PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); -typedef void (GLAPIENTRY * PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); -typedef void (GLAPIENTRY * PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLCOVERSTROKEPATHNVPROC) (GLuint name, GLenum coverMode); -typedef void (GLAPIENTRY * PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); -typedef GLuint (GLAPIENTRY * PFNGLGENPATHSNVPROC) (GLsizei range); -typedef void (GLAPIENTRY * PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat* value); -typedef void (GLAPIENTRY * PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint* value); -typedef void (GLAPIENTRY * PFNGLGETPATHCOMMANDSNVPROC) (GLuint name, GLubyte* commands); -typedef void (GLAPIENTRY * PFNGLGETPATHCOORDSNVPROC) (GLuint name, GLfloat* coords); -typedef void (GLAPIENTRY * PFNGLGETPATHDASHARRAYNVPROC) (GLuint name, GLfloat* dashArray); -typedef GLfloat (GLAPIENTRY * PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); -typedef void (GLAPIENTRY * PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint fistPathName, GLsizei numPaths, GLsizei stride, GLfloat* metrics); -typedef void (GLAPIENTRY * PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); -typedef void (GLAPIENTRY * PFNGLGETPATHPARAMETERFVNVPROC) (GLuint name, GLenum param, GLfloat* value); -typedef void (GLAPIENTRY * PFNGLGETPATHPARAMETERIVNVPROC) (GLuint name, GLenum param, GLint* value); -typedef void (GLAPIENTRY * PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); -typedef void (GLAPIENTRY * PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat* value); -typedef void (GLAPIENTRY * PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint* value); -typedef void (GLAPIENTRY * PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); -typedef GLboolean (GLAPIENTRY * PFNGLISPATHNVPROC) (GLuint path); -typedef GLboolean (GLAPIENTRY * PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); -typedef GLboolean (GLAPIENTRY * PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat* coeffs); -typedef void (GLAPIENTRY * PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords); -typedef void (GLAPIENTRY * PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void* coords); -typedef void (GLAPIENTRY * PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum zfunc); -typedef void (GLAPIENTRY * PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat* dashArray); -typedef void (GLAPIENTRY * PFNGLPATHFOGGENNVPROC) (GLenum genMode); -typedef void (GLAPIENTRY * PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (GLAPIENTRY * PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void* fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const GLvoid*charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat* value); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); -typedef void (GLAPIENTRY * PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint* value); -typedef void (GLAPIENTRY * PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); -typedef void (GLAPIENTRY * PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); -typedef void (GLAPIENTRY * PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void* pathString); -typedef void (GLAPIENTRY * PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte* commands, GLsizei numCoords, GLenum coordType, const GLvoid*coords); -typedef void (GLAPIENTRY * PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void* coords); -typedef void (GLAPIENTRY * PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat* coeffs); -typedef GLboolean (GLAPIENTRY * PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat* x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); -typedef void (GLAPIENTRY * PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); -typedef void (GLAPIENTRY * PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void* paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); -typedef void (GLAPIENTRY * PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); -typedef void (GLAPIENTRY * PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat* transformValues); -typedef void (GLAPIENTRY * PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint paths[], const GLfloat weights[]); - -#define glCopyPathNV GLEW_GET_FUN(__glewCopyPathNV) -#define glCoverFillPathInstancedNV GLEW_GET_FUN(__glewCoverFillPathInstancedNV) -#define glCoverFillPathNV GLEW_GET_FUN(__glewCoverFillPathNV) -#define glCoverStrokePathInstancedNV GLEW_GET_FUN(__glewCoverStrokePathInstancedNV) -#define glCoverStrokePathNV GLEW_GET_FUN(__glewCoverStrokePathNV) -#define glDeletePathsNV GLEW_GET_FUN(__glewDeletePathsNV) -#define glGenPathsNV GLEW_GET_FUN(__glewGenPathsNV) -#define glGetPathColorGenfvNV GLEW_GET_FUN(__glewGetPathColorGenfvNV) -#define glGetPathColorGenivNV GLEW_GET_FUN(__glewGetPathColorGenivNV) -#define glGetPathCommandsNV GLEW_GET_FUN(__glewGetPathCommandsNV) -#define glGetPathCoordsNV GLEW_GET_FUN(__glewGetPathCoordsNV) -#define glGetPathDashArrayNV GLEW_GET_FUN(__glewGetPathDashArrayNV) -#define glGetPathLengthNV GLEW_GET_FUN(__glewGetPathLengthNV) -#define glGetPathMetricRangeNV GLEW_GET_FUN(__glewGetPathMetricRangeNV) -#define glGetPathMetricsNV GLEW_GET_FUN(__glewGetPathMetricsNV) -#define glGetPathParameterfvNV GLEW_GET_FUN(__glewGetPathParameterfvNV) -#define glGetPathParameterivNV GLEW_GET_FUN(__glewGetPathParameterivNV) -#define glGetPathSpacingNV GLEW_GET_FUN(__glewGetPathSpacingNV) -#define glGetPathTexGenfvNV GLEW_GET_FUN(__glewGetPathTexGenfvNV) -#define glGetPathTexGenivNV GLEW_GET_FUN(__glewGetPathTexGenivNV) -#define glInterpolatePathsNV GLEW_GET_FUN(__glewInterpolatePathsNV) -#define glIsPathNV GLEW_GET_FUN(__glewIsPathNV) -#define glIsPointInFillPathNV GLEW_GET_FUN(__glewIsPointInFillPathNV) -#define glIsPointInStrokePathNV GLEW_GET_FUN(__glewIsPointInStrokePathNV) -#define glPathColorGenNV GLEW_GET_FUN(__glewPathColorGenNV) -#define glPathCommandsNV GLEW_GET_FUN(__glewPathCommandsNV) -#define glPathCoordsNV GLEW_GET_FUN(__glewPathCoordsNV) -#define glPathCoverDepthFuncNV GLEW_GET_FUN(__glewPathCoverDepthFuncNV) -#define glPathDashArrayNV GLEW_GET_FUN(__glewPathDashArrayNV) -#define glPathFogGenNV GLEW_GET_FUN(__glewPathFogGenNV) -#define glPathGlyphRangeNV GLEW_GET_FUN(__glewPathGlyphRangeNV) -#define glPathGlyphsNV GLEW_GET_FUN(__glewPathGlyphsNV) -#define glPathParameterfNV GLEW_GET_FUN(__glewPathParameterfNV) -#define glPathParameterfvNV GLEW_GET_FUN(__glewPathParameterfvNV) -#define glPathParameteriNV GLEW_GET_FUN(__glewPathParameteriNV) -#define glPathParameterivNV GLEW_GET_FUN(__glewPathParameterivNV) -#define glPathStencilDepthOffsetNV GLEW_GET_FUN(__glewPathStencilDepthOffsetNV) -#define glPathStencilFuncNV GLEW_GET_FUN(__glewPathStencilFuncNV) -#define glPathStringNV GLEW_GET_FUN(__glewPathStringNV) -#define glPathSubCommandsNV GLEW_GET_FUN(__glewPathSubCommandsNV) -#define glPathSubCoordsNV GLEW_GET_FUN(__glewPathSubCoordsNV) -#define glPathTexGenNV GLEW_GET_FUN(__glewPathTexGenNV) -#define glPointAlongPathNV GLEW_GET_FUN(__glewPointAlongPathNV) -#define glStencilFillPathInstancedNV GLEW_GET_FUN(__glewStencilFillPathInstancedNV) -#define glStencilFillPathNV GLEW_GET_FUN(__glewStencilFillPathNV) -#define glStencilStrokePathInstancedNV GLEW_GET_FUN(__glewStencilStrokePathInstancedNV) -#define glStencilStrokePathNV GLEW_GET_FUN(__glewStencilStrokePathNV) -#define glTransformPathNV GLEW_GET_FUN(__glewTransformPathNV) -#define glWeightPathsNV GLEW_GET_FUN(__glewWeightPathsNV) - -#define GLEW_NV_path_rendering GLEW_GET_VAR(__GLEW_NV_path_rendering) - -#endif /* GL_NV_path_rendering */ - -/* ------------------------- GL_NV_pixel_data_range ------------------------ */ - -#ifndef GL_NV_pixel_data_range -#define GL_NV_pixel_data_range 1 - -#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 -#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 -#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A -#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B -#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C -#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D - -typedef void (GLAPIENTRY * PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer); - -#define glFlushPixelDataRangeNV GLEW_GET_FUN(__glewFlushPixelDataRangeNV) -#define glPixelDataRangeNV GLEW_GET_FUN(__glewPixelDataRangeNV) - -#define GLEW_NV_pixel_data_range GLEW_GET_VAR(__GLEW_NV_pixel_data_range) - -#endif /* GL_NV_pixel_data_range */ - -/* --------------------------- GL_NV_point_sprite -------------------------- */ - -#ifndef GL_NV_point_sprite -#define GL_NV_point_sprite 1 - -#define GL_POINT_SPRITE_NV 0x8861 -#define GL_COORD_REPLACE_NV 0x8862 -#define GL_POINT_SPRITE_R_MODE_NV 0x8863 - -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint* params); - -#define glPointParameteriNV GLEW_GET_FUN(__glewPointParameteriNV) -#define glPointParameterivNV GLEW_GET_FUN(__glewPointParameterivNV) - -#define GLEW_NV_point_sprite GLEW_GET_VAR(__GLEW_NV_point_sprite) - -#endif /* GL_NV_point_sprite */ - -/* -------------------------- GL_NV_present_video -------------------------- */ - -#ifndef GL_NV_present_video -#define GL_NV_present_video 1 - -#define GL_FRAME_NV 0x8E26 -#define GL_FIELDS_NV 0x8E27 -#define GL_CURRENT_TIME_NV 0x8E28 -#define GL_NUM_FILL_STREAMS_NV 0x8E29 -#define GL_PRESENT_TIME_NV 0x8E2A -#define GL_PRESENT_DURATION_NV 0x8E2B - -typedef void (GLAPIENTRY * PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint* params); -typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); -typedef void (GLAPIENTRY * PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); - -#define glGetVideoi64vNV GLEW_GET_FUN(__glewGetVideoi64vNV) -#define glGetVideoivNV GLEW_GET_FUN(__glewGetVideoivNV) -#define glGetVideoui64vNV GLEW_GET_FUN(__glewGetVideoui64vNV) -#define glGetVideouivNV GLEW_GET_FUN(__glewGetVideouivNV) -#define glPresentFrameDualFillNV GLEW_GET_FUN(__glewPresentFrameDualFillNV) -#define glPresentFrameKeyedNV GLEW_GET_FUN(__glewPresentFrameKeyedNV) - -#define GLEW_NV_present_video GLEW_GET_VAR(__GLEW_NV_present_video) - -#endif /* GL_NV_present_video */ - -/* ------------------------ GL_NV_primitive_restart ------------------------ */ - -#ifndef GL_NV_primitive_restart -#define GL_NV_primitive_restart 1 - -#define GL_PRIMITIVE_RESTART_NV 0x8558 -#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 - -typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); -typedef void (GLAPIENTRY * PFNGLPRIMITIVERESTARTNVPROC) (void); - -#define glPrimitiveRestartIndexNV GLEW_GET_FUN(__glewPrimitiveRestartIndexNV) -#define glPrimitiveRestartNV GLEW_GET_FUN(__glewPrimitiveRestartNV) - -#define GLEW_NV_primitive_restart GLEW_GET_VAR(__GLEW_NV_primitive_restart) - -#endif /* GL_NV_primitive_restart */ - -/* ------------------------ GL_NV_register_combiners ----------------------- */ - -#ifndef GL_NV_register_combiners -#define GL_NV_register_combiners 1 - -#define GL_REGISTER_COMBINERS_NV 0x8522 -#define GL_VARIABLE_A_NV 0x8523 -#define GL_VARIABLE_B_NV 0x8524 -#define GL_VARIABLE_C_NV 0x8525 -#define GL_VARIABLE_D_NV 0x8526 -#define GL_VARIABLE_E_NV 0x8527 -#define GL_VARIABLE_F_NV 0x8528 -#define GL_VARIABLE_G_NV 0x8529 -#define GL_CONSTANT_COLOR0_NV 0x852A -#define GL_CONSTANT_COLOR1_NV 0x852B -#define GL_PRIMARY_COLOR_NV 0x852C -#define GL_SECONDARY_COLOR_NV 0x852D -#define GL_SPARE0_NV 0x852E -#define GL_SPARE1_NV 0x852F -#define GL_DISCARD_NV 0x8530 -#define GL_E_TIMES_F_NV 0x8531 -#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 -#define GL_UNSIGNED_IDENTITY_NV 0x8536 -#define GL_UNSIGNED_INVERT_NV 0x8537 -#define GL_EXPAND_NORMAL_NV 0x8538 -#define GL_EXPAND_NEGATE_NV 0x8539 -#define GL_HALF_BIAS_NORMAL_NV 0x853A -#define GL_HALF_BIAS_NEGATE_NV 0x853B -#define GL_SIGNED_IDENTITY_NV 0x853C -#define GL_SIGNED_NEGATE_NV 0x853D -#define GL_SCALE_BY_TWO_NV 0x853E -#define GL_SCALE_BY_FOUR_NV 0x853F -#define GL_SCALE_BY_ONE_HALF_NV 0x8540 -#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 -#define GL_COMBINER_INPUT_NV 0x8542 -#define GL_COMBINER_MAPPING_NV 0x8543 -#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 -#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 -#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 -#define GL_COMBINER_MUX_SUM_NV 0x8547 -#define GL_COMBINER_SCALE_NV 0x8548 -#define GL_COMBINER_BIAS_NV 0x8549 -#define GL_COMBINER_AB_OUTPUT_NV 0x854A -#define GL_COMBINER_CD_OUTPUT_NV 0x854B -#define GL_COMBINER_SUM_OUTPUT_NV 0x854C -#define GL_MAX_GENERAL_COMBINERS_NV 0x854D -#define GL_NUM_GENERAL_COMBINERS_NV 0x854E -#define GL_COLOR_SUM_CLAMP_NV 0x854F -#define GL_COMBINER0_NV 0x8550 -#define GL_COMBINER1_NV 0x8551 -#define GL_COMBINER2_NV 0x8552 -#define GL_COMBINER3_NV 0x8553 -#define GL_COMBINER4_NV 0x8554 -#define GL_COMBINER5_NV 0x8555 -#define GL_COMBINER6_NV 0x8556 -#define GL_COMBINER7_NV 0x8557 - -typedef void (GLAPIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (GLAPIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); -typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint* params); - -#define glCombinerInputNV GLEW_GET_FUN(__glewCombinerInputNV) -#define glCombinerOutputNV GLEW_GET_FUN(__glewCombinerOutputNV) -#define glCombinerParameterfNV GLEW_GET_FUN(__glewCombinerParameterfNV) -#define glCombinerParameterfvNV GLEW_GET_FUN(__glewCombinerParameterfvNV) -#define glCombinerParameteriNV GLEW_GET_FUN(__glewCombinerParameteriNV) -#define glCombinerParameterivNV GLEW_GET_FUN(__glewCombinerParameterivNV) -#define glFinalCombinerInputNV GLEW_GET_FUN(__glewFinalCombinerInputNV) -#define glGetCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetCombinerInputParameterfvNV) -#define glGetCombinerInputParameterivNV GLEW_GET_FUN(__glewGetCombinerInputParameterivNV) -#define glGetCombinerOutputParameterfvNV GLEW_GET_FUN(__glewGetCombinerOutputParameterfvNV) -#define glGetCombinerOutputParameterivNV GLEW_GET_FUN(__glewGetCombinerOutputParameterivNV) -#define glGetFinalCombinerInputParameterfvNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterfvNV) -#define glGetFinalCombinerInputParameterivNV GLEW_GET_FUN(__glewGetFinalCombinerInputParameterivNV) - -#define GLEW_NV_register_combiners GLEW_GET_VAR(__GLEW_NV_register_combiners) - -#endif /* GL_NV_register_combiners */ - -/* ----------------------- GL_NV_register_combiners2 ----------------------- */ - -#ifndef GL_NV_register_combiners2 -#define GL_NV_register_combiners2 1 - -#define GL_PER_STAGE_CONSTANTS_NV 0x8535 - -typedef void (GLAPIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat* params); - -#define glCombinerStageParameterfvNV GLEW_GET_FUN(__glewCombinerStageParameterfvNV) -#define glGetCombinerStageParameterfvNV GLEW_GET_FUN(__glewGetCombinerStageParameterfvNV) - -#define GLEW_NV_register_combiners2 GLEW_GET_VAR(__GLEW_NV_register_combiners2) - -#endif /* GL_NV_register_combiners2 */ - -/* ---------------------- GL_NV_shader_atomic_counters --------------------- */ - -#ifndef GL_NV_shader_atomic_counters -#define GL_NV_shader_atomic_counters 1 - -#define GLEW_NV_shader_atomic_counters GLEW_GET_VAR(__GLEW_NV_shader_atomic_counters) - -#endif /* GL_NV_shader_atomic_counters */ - -/* ----------------------- GL_NV_shader_atomic_float ----------------------- */ - -#ifndef GL_NV_shader_atomic_float -#define GL_NV_shader_atomic_float 1 - -#define GLEW_NV_shader_atomic_float GLEW_GET_VAR(__GLEW_NV_shader_atomic_float) - -#endif /* GL_NV_shader_atomic_float */ - -/* ------------------------ GL_NV_shader_buffer_load ----------------------- */ - -#ifndef GL_NV_shader_buffer_load -#define GL_NV_shader_buffer_load 1 - -#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D -#define GL_GPU_ADDRESS_NV 0x8F34 -#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 - -typedef void (GLAPIENTRY * PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT* result); -typedef void (GLAPIENTRY * PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT* params); -typedef GLboolean (GLAPIENTRY * PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); -typedef GLboolean (GLAPIENTRY * PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); -typedef void (GLAPIENTRY * PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); -typedef void (GLAPIENTRY * PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); -typedef void (GLAPIENTRY * PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); -typedef void (GLAPIENTRY * PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT* value); -typedef void (GLAPIENTRY * PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); -typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT* value); - -#define glGetBufferParameterui64vNV GLEW_GET_FUN(__glewGetBufferParameterui64vNV) -#define glGetIntegerui64vNV GLEW_GET_FUN(__glewGetIntegerui64vNV) -#define glGetNamedBufferParameterui64vNV GLEW_GET_FUN(__glewGetNamedBufferParameterui64vNV) -#define glIsBufferResidentNV GLEW_GET_FUN(__glewIsBufferResidentNV) -#define glIsNamedBufferResidentNV GLEW_GET_FUN(__glewIsNamedBufferResidentNV) -#define glMakeBufferNonResidentNV GLEW_GET_FUN(__glewMakeBufferNonResidentNV) -#define glMakeBufferResidentNV GLEW_GET_FUN(__glewMakeBufferResidentNV) -#define glMakeNamedBufferNonResidentNV GLEW_GET_FUN(__glewMakeNamedBufferNonResidentNV) -#define glMakeNamedBufferResidentNV GLEW_GET_FUN(__glewMakeNamedBufferResidentNV) -#define glProgramUniformui64NV GLEW_GET_FUN(__glewProgramUniformui64NV) -#define glProgramUniformui64vNV GLEW_GET_FUN(__glewProgramUniformui64vNV) -#define glUniformui64NV GLEW_GET_FUN(__glewUniformui64NV) -#define glUniformui64vNV GLEW_GET_FUN(__glewUniformui64vNV) - -#define GLEW_NV_shader_buffer_load GLEW_GET_VAR(__GLEW_NV_shader_buffer_load) - -#endif /* GL_NV_shader_buffer_load */ - -/* ------------------- GL_NV_shader_storage_buffer_object ------------------ */ - -#ifndef GL_NV_shader_storage_buffer_object -#define GL_NV_shader_storage_buffer_object 1 - -#define GLEW_NV_shader_storage_buffer_object GLEW_GET_VAR(__GLEW_NV_shader_storage_buffer_object) - -#endif /* GL_NV_shader_storage_buffer_object */ - -/* ---------------------- GL_NV_tessellation_program5 ---------------------- */ - -#ifndef GL_NV_tessellation_program5 -#define GL_NV_tessellation_program5 1 - -#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 -#define GL_TESS_CONTROL_PROGRAM_NV 0x891E -#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F -#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 -#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 - -#define GLEW_NV_tessellation_program5 GLEW_GET_VAR(__GLEW_NV_tessellation_program5) - -#endif /* GL_NV_tessellation_program5 */ - -/* -------------------------- GL_NV_texgen_emboss -------------------------- */ - -#ifndef GL_NV_texgen_emboss -#define GL_NV_texgen_emboss 1 - -#define GL_EMBOSS_LIGHT_NV 0x855D -#define GL_EMBOSS_CONSTANT_NV 0x855E -#define GL_EMBOSS_MAP_NV 0x855F - -#define GLEW_NV_texgen_emboss GLEW_GET_VAR(__GLEW_NV_texgen_emboss) - -#endif /* GL_NV_texgen_emboss */ - -/* ------------------------ GL_NV_texgen_reflection ------------------------ */ - -#ifndef GL_NV_texgen_reflection -#define GL_NV_texgen_reflection 1 - -#define GL_NORMAL_MAP_NV 0x8511 -#define GL_REFLECTION_MAP_NV 0x8512 - -#define GLEW_NV_texgen_reflection GLEW_GET_VAR(__GLEW_NV_texgen_reflection) - -#endif /* GL_NV_texgen_reflection */ - -/* ------------------------- GL_NV_texture_barrier ------------------------- */ - -#ifndef GL_NV_texture_barrier -#define GL_NV_texture_barrier 1 - -typedef void (GLAPIENTRY * PFNGLTEXTUREBARRIERNVPROC) (void); - -#define glTextureBarrierNV GLEW_GET_FUN(__glewTextureBarrierNV) - -#define GLEW_NV_texture_barrier GLEW_GET_VAR(__GLEW_NV_texture_barrier) - -#endif /* GL_NV_texture_barrier */ - -/* --------------------- GL_NV_texture_compression_vtc --------------------- */ - -#ifndef GL_NV_texture_compression_vtc -#define GL_NV_texture_compression_vtc 1 - -#define GLEW_NV_texture_compression_vtc GLEW_GET_VAR(__GLEW_NV_texture_compression_vtc) - -#endif /* GL_NV_texture_compression_vtc */ - -/* ----------------------- GL_NV_texture_env_combine4 ---------------------- */ - -#ifndef GL_NV_texture_env_combine4 -#define GL_NV_texture_env_combine4 1 - -#define GL_COMBINE4_NV 0x8503 -#define GL_SOURCE3_RGB_NV 0x8583 -#define GL_SOURCE3_ALPHA_NV 0x858B -#define GL_OPERAND3_RGB_NV 0x8593 -#define GL_OPERAND3_ALPHA_NV 0x859B - -#define GLEW_NV_texture_env_combine4 GLEW_GET_VAR(__GLEW_NV_texture_env_combine4) - -#endif /* GL_NV_texture_env_combine4 */ - -/* ---------------------- GL_NV_texture_expand_normal ---------------------- */ - -#ifndef GL_NV_texture_expand_normal -#define GL_NV_texture_expand_normal 1 - -#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F - -#define GLEW_NV_texture_expand_normal GLEW_GET_VAR(__GLEW_NV_texture_expand_normal) - -#endif /* GL_NV_texture_expand_normal */ - -/* ----------------------- GL_NV_texture_multisample ----------------------- */ - -#ifndef GL_NV_texture_multisample -#define GL_NV_texture_multisample 1 - -#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 -#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 - -typedef void (GLAPIENTRY * PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); -typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); - -#define glTexImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage2DMultisampleCoverageNV) -#define glTexImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTexImage3DMultisampleCoverageNV) -#define glTextureImage2DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage2DMultisampleCoverageNV) -#define glTextureImage2DMultisampleNV GLEW_GET_FUN(__glewTextureImage2DMultisampleNV) -#define glTextureImage3DMultisampleCoverageNV GLEW_GET_FUN(__glewTextureImage3DMultisampleCoverageNV) -#define glTextureImage3DMultisampleNV GLEW_GET_FUN(__glewTextureImage3DMultisampleNV) - -#define GLEW_NV_texture_multisample GLEW_GET_VAR(__GLEW_NV_texture_multisample) - -#endif /* GL_NV_texture_multisample */ - -/* ------------------------ GL_NV_texture_rectangle ------------------------ */ - -#ifndef GL_NV_texture_rectangle -#define GL_NV_texture_rectangle 1 - -#define GL_TEXTURE_RECTANGLE_NV 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 - -#define GLEW_NV_texture_rectangle GLEW_GET_VAR(__GLEW_NV_texture_rectangle) - -#endif /* GL_NV_texture_rectangle */ - -/* -------------------------- GL_NV_texture_shader ------------------------- */ - -#ifndef GL_NV_texture_shader -#define GL_NV_texture_shader 1 - -#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C -#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D -#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E -#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_SHADER_CONSISTENT_NV 0x86DD -#define GL_TEXTURE_SHADER_NV 0x86DE -#define GL_SHADER_OPERATION_NV 0x86DF -#define GL_CULL_MODES_NV 0x86E0 -#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 -#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 -#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 -#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 -#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 -#define GL_CONST_EYE_NV 0x86E5 -#define GL_PASS_THROUGH_NV 0x86E6 -#define GL_CULL_FRAGMENT_NV 0x86E7 -#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 -#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 -#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA -#define GL_DOT_PRODUCT_NV 0x86EC -#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED -#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE -#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 -#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 -#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 -#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D -#define GL_HI_SCALE_NV 0x870E -#define GL_LO_SCALE_NV 0x870F -#define GL_DS_SCALE_NV 0x8710 -#define GL_DT_SCALE_NV 0x8711 -#define GL_MAGNITUDE_SCALE_NV 0x8712 -#define GL_VIBRANCE_SCALE_NV 0x8713 -#define GL_HI_BIAS_NV 0x8714 -#define GL_LO_BIAS_NV 0x8715 -#define GL_DS_BIAS_NV 0x8716 -#define GL_DT_BIAS_NV 0x8717 -#define GL_MAGNITUDE_BIAS_NV 0x8718 -#define GL_VIBRANCE_BIAS_NV 0x8719 -#define GL_TEXTURE_BORDER_VALUES_NV 0x871A -#define GL_TEXTURE_HI_SIZE_NV 0x871B -#define GL_TEXTURE_LO_SIZE_NV 0x871C -#define GL_TEXTURE_DS_SIZE_NV 0x871D -#define GL_TEXTURE_DT_SIZE_NV 0x871E -#define GL_TEXTURE_MAG_SIZE_NV 0x871F - -#define GLEW_NV_texture_shader GLEW_GET_VAR(__GLEW_NV_texture_shader) - -#endif /* GL_NV_texture_shader */ - -/* ------------------------- GL_NV_texture_shader2 ------------------------- */ - -#ifndef GL_NV_texture_shader2 -#define GL_NV_texture_shader2 1 - -#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA -#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB -#define GL_DSDT_MAG_INTENSITY_NV 0x86DC -#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF -#define GL_HILO_NV 0x86F4 -#define GL_DSDT_NV 0x86F5 -#define GL_DSDT_MAG_NV 0x86F6 -#define GL_DSDT_MAG_VIB_NV 0x86F7 -#define GL_HILO16_NV 0x86F8 -#define GL_SIGNED_HILO_NV 0x86F9 -#define GL_SIGNED_HILO16_NV 0x86FA -#define GL_SIGNED_RGBA_NV 0x86FB -#define GL_SIGNED_RGBA8_NV 0x86FC -#define GL_SIGNED_RGB_NV 0x86FE -#define GL_SIGNED_RGB8_NV 0x86FF -#define GL_SIGNED_LUMINANCE_NV 0x8701 -#define GL_SIGNED_LUMINANCE8_NV 0x8702 -#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 -#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 -#define GL_SIGNED_ALPHA_NV 0x8705 -#define GL_SIGNED_ALPHA8_NV 0x8706 -#define GL_SIGNED_INTENSITY_NV 0x8707 -#define GL_SIGNED_INTENSITY8_NV 0x8708 -#define GL_DSDT8_NV 0x8709 -#define GL_DSDT8_MAG8_NV 0x870A -#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B -#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C -#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D - -#define GLEW_NV_texture_shader2 GLEW_GET_VAR(__GLEW_NV_texture_shader2) - -#endif /* GL_NV_texture_shader2 */ - -/* ------------------------- GL_NV_texture_shader3 ------------------------- */ - -#ifndef GL_NV_texture_shader3 -#define GL_NV_texture_shader3 1 - -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 -#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 -#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 -#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 -#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 -#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 -#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 -#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 -#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A -#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B -#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C -#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D -#define GL_HILO8_NV 0x885E -#define GL_SIGNED_HILO8_NV 0x885F -#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 - -#define GLEW_NV_texture_shader3 GLEW_GET_VAR(__GLEW_NV_texture_shader3) - -#endif /* GL_NV_texture_shader3 */ - -/* ------------------------ GL_NV_transform_feedback ----------------------- */ - -#ifndef GL_NV_transform_feedback -#define GL_NV_transform_feedback 1 - -#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 -#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 -#define GL_TEXTURE_COORD_NV 0x8C79 -#define GL_CLIP_DISTANCE_NV 0x8C7A -#define GL_VERTEX_ID_NV 0x8C7B -#define GL_PRIMITIVE_ID_NV 0x8C7C -#define GL_GENERIC_ATTRIB_NV 0x8C7D -#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 -#define GL_ACTIVE_VARYINGS_NV 0x8C81 -#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 -#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 -#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 -#define GL_PRIMITIVES_GENERATED_NV 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 -#define GL_RASTERIZER_DISCARD_NV 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B -#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C -#define GL_SEPARATE_ATTRIBS_NV 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F - -typedef void (GLAPIENTRY * PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); -typedef void (GLAPIENTRY * PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); -typedef void (GLAPIENTRY * PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); -typedef void (GLAPIENTRY * PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -typedef void (GLAPIENTRY * PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -typedef void (GLAPIENTRY * PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); -typedef GLint (GLAPIENTRY * PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLuint count, const GLint *attribs, GLenum bufferMode); -typedef void (GLAPIENTRY * PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); - -#define glActiveVaryingNV GLEW_GET_FUN(__glewActiveVaryingNV) -#define glBeginTransformFeedbackNV GLEW_GET_FUN(__glewBeginTransformFeedbackNV) -#define glBindBufferBaseNV GLEW_GET_FUN(__glewBindBufferBaseNV) -#define glBindBufferOffsetNV GLEW_GET_FUN(__glewBindBufferOffsetNV) -#define glBindBufferRangeNV GLEW_GET_FUN(__glewBindBufferRangeNV) -#define glEndTransformFeedbackNV GLEW_GET_FUN(__glewEndTransformFeedbackNV) -#define glGetActiveVaryingNV GLEW_GET_FUN(__glewGetActiveVaryingNV) -#define glGetTransformFeedbackVaryingNV GLEW_GET_FUN(__glewGetTransformFeedbackVaryingNV) -#define glGetVaryingLocationNV GLEW_GET_FUN(__glewGetVaryingLocationNV) -#define glTransformFeedbackAttribsNV GLEW_GET_FUN(__glewTransformFeedbackAttribsNV) -#define glTransformFeedbackVaryingsNV GLEW_GET_FUN(__glewTransformFeedbackVaryingsNV) - -#define GLEW_NV_transform_feedback GLEW_GET_VAR(__GLEW_NV_transform_feedback) - -#endif /* GL_NV_transform_feedback */ - -/* ----------------------- GL_NV_transform_feedback2 ----------------------- */ - -#ifndef GL_NV_transform_feedback2 -#define GL_NV_transform_feedback2 1 - -#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 -#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 -#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 -#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 - -typedef void (GLAPIENTRY * PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); -typedef void (GLAPIENTRY * PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint* ids); -typedef GLboolean (GLAPIENTRY * PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); -typedef void (GLAPIENTRY * PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); - -#define glBindTransformFeedbackNV GLEW_GET_FUN(__glewBindTransformFeedbackNV) -#define glDeleteTransformFeedbacksNV GLEW_GET_FUN(__glewDeleteTransformFeedbacksNV) -#define glDrawTransformFeedbackNV GLEW_GET_FUN(__glewDrawTransformFeedbackNV) -#define glGenTransformFeedbacksNV GLEW_GET_FUN(__glewGenTransformFeedbacksNV) -#define glIsTransformFeedbackNV GLEW_GET_FUN(__glewIsTransformFeedbackNV) -#define glPauseTransformFeedbackNV GLEW_GET_FUN(__glewPauseTransformFeedbackNV) -#define glResumeTransformFeedbackNV GLEW_GET_FUN(__glewResumeTransformFeedbackNV) - -#define GLEW_NV_transform_feedback2 GLEW_GET_VAR(__GLEW_NV_transform_feedback2) - -#endif /* GL_NV_transform_feedback2 */ - -/* -------------------------- GL_NV_vdpau_interop -------------------------- */ - -#ifndef GL_NV_vdpau_interop -#define GL_NV_vdpau_interop 1 - -#define GL_SURFACE_STATE_NV 0x86EB -#define GL_SURFACE_REGISTERED_NV 0x86FD -#define GL_SURFACE_MAPPED_NV 0x8700 -#define GL_WRITE_DISCARD_NV 0x88BE - -typedef GLintptr GLvdpauSurfaceNV; - -typedef void (GLAPIENTRY * PFNGLVDPAUFININVPROC) (void); -typedef void (GLAPIENTRY * PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei bufSize, GLsizei* length, GLint *values); -typedef void (GLAPIENTRY * PFNGLVDPAUINITNVPROC) (const void* vdpDevice, const GLvoid*getProcAddress); -typedef void (GLAPIENTRY * PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); -typedef void (GLAPIENTRY * PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV* surfaces); -typedef GLvdpauSurfaceNV (GLAPIENTRY * PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef GLvdpauSurfaceNV (GLAPIENTRY * PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void* vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); -typedef void (GLAPIENTRY * PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); -typedef void (GLAPIENTRY * PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV* surfaces); -typedef void (GLAPIENTRY * PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); - -#define glVDPAUFiniNV GLEW_GET_FUN(__glewVDPAUFiniNV) -#define glVDPAUGetSurfaceivNV GLEW_GET_FUN(__glewVDPAUGetSurfaceivNV) -#define glVDPAUInitNV GLEW_GET_FUN(__glewVDPAUInitNV) -#define glVDPAUIsSurfaceNV GLEW_GET_FUN(__glewVDPAUIsSurfaceNV) -#define glVDPAUMapSurfacesNV GLEW_GET_FUN(__glewVDPAUMapSurfacesNV) -#define glVDPAURegisterOutputSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterOutputSurfaceNV) -#define glVDPAURegisterVideoSurfaceNV GLEW_GET_FUN(__glewVDPAURegisterVideoSurfaceNV) -#define glVDPAUSurfaceAccessNV GLEW_GET_FUN(__glewVDPAUSurfaceAccessNV) -#define glVDPAUUnmapSurfacesNV GLEW_GET_FUN(__glewVDPAUUnmapSurfacesNV) -#define glVDPAUUnregisterSurfaceNV GLEW_GET_FUN(__glewVDPAUUnregisterSurfaceNV) - -#define GLEW_NV_vdpau_interop GLEW_GET_VAR(__GLEW_NV_vdpau_interop) - -#endif /* GL_NV_vdpau_interop */ - -/* ------------------------ GL_NV_vertex_array_range ----------------------- */ - -#ifndef GL_NV_vertex_array_range -#define GL_NV_vertex_array_range 1 - -#define GL_VERTEX_ARRAY_RANGE_NV 0x851D -#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E -#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F -#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 -#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 - -typedef void (GLAPIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); -typedef void (GLAPIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, GLvoid *pointer); - -#define glFlushVertexArrayRangeNV GLEW_GET_FUN(__glewFlushVertexArrayRangeNV) -#define glVertexArrayRangeNV GLEW_GET_FUN(__glewVertexArrayRangeNV) - -#define GLEW_NV_vertex_array_range GLEW_GET_VAR(__GLEW_NV_vertex_array_range) - -#endif /* GL_NV_vertex_array_range */ - -/* ----------------------- GL_NV_vertex_array_range2 ----------------------- */ - -#ifndef GL_NV_vertex_array_range2 -#define GL_NV_vertex_array_range2 1 - -#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 - -#define GLEW_NV_vertex_array_range2 GLEW_GET_VAR(__GLEW_NV_vertex_array_range2) - -#endif /* GL_NV_vertex_array_range2 */ - -/* ------------------- GL_NV_vertex_attrib_integer_64bit ------------------- */ - -#ifndef GL_NV_vertex_attrib_integer_64bit -#define GL_NV_vertex_attrib_integer_64bit 1 - -#define GL_INT64_NV 0x140E -#define GL_UNSIGNED_INT64_NV 0x140F - -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT* params); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); - -#define glGetVertexAttribLi64vNV GLEW_GET_FUN(__glewGetVertexAttribLi64vNV) -#define glGetVertexAttribLui64vNV GLEW_GET_FUN(__glewGetVertexAttribLui64vNV) -#define glVertexAttribL1i64NV GLEW_GET_FUN(__glewVertexAttribL1i64NV) -#define glVertexAttribL1i64vNV GLEW_GET_FUN(__glewVertexAttribL1i64vNV) -#define glVertexAttribL1ui64NV GLEW_GET_FUN(__glewVertexAttribL1ui64NV) -#define glVertexAttribL1ui64vNV GLEW_GET_FUN(__glewVertexAttribL1ui64vNV) -#define glVertexAttribL2i64NV GLEW_GET_FUN(__glewVertexAttribL2i64NV) -#define glVertexAttribL2i64vNV GLEW_GET_FUN(__glewVertexAttribL2i64vNV) -#define glVertexAttribL2ui64NV GLEW_GET_FUN(__glewVertexAttribL2ui64NV) -#define glVertexAttribL2ui64vNV GLEW_GET_FUN(__glewVertexAttribL2ui64vNV) -#define glVertexAttribL3i64NV GLEW_GET_FUN(__glewVertexAttribL3i64NV) -#define glVertexAttribL3i64vNV GLEW_GET_FUN(__glewVertexAttribL3i64vNV) -#define glVertexAttribL3ui64NV GLEW_GET_FUN(__glewVertexAttribL3ui64NV) -#define glVertexAttribL3ui64vNV GLEW_GET_FUN(__glewVertexAttribL3ui64vNV) -#define glVertexAttribL4i64NV GLEW_GET_FUN(__glewVertexAttribL4i64NV) -#define glVertexAttribL4i64vNV GLEW_GET_FUN(__glewVertexAttribL4i64vNV) -#define glVertexAttribL4ui64NV GLEW_GET_FUN(__glewVertexAttribL4ui64NV) -#define glVertexAttribL4ui64vNV GLEW_GET_FUN(__glewVertexAttribL4ui64vNV) -#define glVertexAttribLFormatNV GLEW_GET_FUN(__glewVertexAttribLFormatNV) - -#define GLEW_NV_vertex_attrib_integer_64bit GLEW_GET_VAR(__GLEW_NV_vertex_attrib_integer_64bit) - -#endif /* GL_NV_vertex_attrib_integer_64bit */ - -/* ------------------- GL_NV_vertex_buffer_unified_memory ------------------ */ - -#ifndef GL_NV_vertex_buffer_unified_memory -#define GL_NV_vertex_buffer_unified_memory 1 - -#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E -#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F -#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 -#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 -#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 -#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 -#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 -#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 -#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 -#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 -#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 -#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 -#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A -#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B -#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C -#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D -#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E -#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F -#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 -#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 -#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 -#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 -#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 -#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 -#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 - -typedef void (GLAPIENTRY * PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); -typedef void (GLAPIENTRY * PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); -typedef void (GLAPIENTRY * PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT result[]); -typedef void (GLAPIENTRY * PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); -typedef void (GLAPIENTRY * PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); - -#define glBufferAddressRangeNV GLEW_GET_FUN(__glewBufferAddressRangeNV) -#define glColorFormatNV GLEW_GET_FUN(__glewColorFormatNV) -#define glEdgeFlagFormatNV GLEW_GET_FUN(__glewEdgeFlagFormatNV) -#define glFogCoordFormatNV GLEW_GET_FUN(__glewFogCoordFormatNV) -#define glGetIntegerui64i_vNV GLEW_GET_FUN(__glewGetIntegerui64i_vNV) -#define glIndexFormatNV GLEW_GET_FUN(__glewIndexFormatNV) -#define glNormalFormatNV GLEW_GET_FUN(__glewNormalFormatNV) -#define glSecondaryColorFormatNV GLEW_GET_FUN(__glewSecondaryColorFormatNV) -#define glTexCoordFormatNV GLEW_GET_FUN(__glewTexCoordFormatNV) -#define glVertexAttribFormatNV GLEW_GET_FUN(__glewVertexAttribFormatNV) -#define glVertexAttribIFormatNV GLEW_GET_FUN(__glewVertexAttribIFormatNV) -#define glVertexFormatNV GLEW_GET_FUN(__glewVertexFormatNV) - -#define GLEW_NV_vertex_buffer_unified_memory GLEW_GET_VAR(__GLEW_NV_vertex_buffer_unified_memory) - -#endif /* GL_NV_vertex_buffer_unified_memory */ - -/* -------------------------- GL_NV_vertex_program ------------------------- */ - -#ifndef GL_NV_vertex_program -#define GL_NV_vertex_program 1 - -#define GL_VERTEX_PROGRAM_NV 0x8620 -#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 -#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 -#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 -#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 -#define GL_CURRENT_ATTRIB_NV 0x8626 -#define GL_PROGRAM_LENGTH_NV 0x8627 -#define GL_PROGRAM_STRING_NV 0x8628 -#define GL_MODELVIEW_PROJECTION_NV 0x8629 -#define GL_IDENTITY_NV 0x862A -#define GL_INVERSE_NV 0x862B -#define GL_TRANSPOSE_NV 0x862C -#define GL_INVERSE_TRANSPOSE_NV 0x862D -#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E -#define GL_MAX_TRACK_MATRICES_NV 0x862F -#define GL_MATRIX0_NV 0x8630 -#define GL_MATRIX1_NV 0x8631 -#define GL_MATRIX2_NV 0x8632 -#define GL_MATRIX3_NV 0x8633 -#define GL_MATRIX4_NV 0x8634 -#define GL_MATRIX5_NV 0x8635 -#define GL_MATRIX6_NV 0x8636 -#define GL_MATRIX7_NV 0x8637 -#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 -#define GL_CURRENT_MATRIX_NV 0x8641 -#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 -#define GL_PROGRAM_PARAMETER_NV 0x8644 -#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 -#define GL_PROGRAM_TARGET_NV 0x8646 -#define GL_PROGRAM_RESIDENT_NV 0x8647 -#define GL_TRACK_MATRIX_NV 0x8648 -#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 -#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A -#define GL_PROGRAM_ERROR_POSITION_NV 0x864B -#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 -#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 -#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 -#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 -#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 -#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 -#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 -#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 -#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 -#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 -#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A -#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B -#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C -#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D -#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E -#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F -#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 -#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 -#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 -#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 -#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 -#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 -#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 -#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 -#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 -#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 -#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A -#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B -#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C -#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D -#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E -#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F -#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 -#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 -#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 -#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 -#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 -#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 -#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 -#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 -#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 -#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 -#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A -#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B -#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C -#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D -#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E -#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F - -typedef GLboolean (GLAPIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint* ids, GLboolean *residences); -typedef void (GLAPIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); -typedef void (GLAPIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint* ids); -typedef void (GLAPIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte* program); -typedef void (GLAPIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid** pointer); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint* params); -typedef GLboolean (GLAPIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id); -typedef void (GLAPIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte* program); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei num, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei num, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, GLuint* ids); -typedef void (GLAPIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei n, const GLdouble* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei n, const GLfloat* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei n, const GLshort* v); -typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei n, const GLubyte* v); - -#define glAreProgramsResidentNV GLEW_GET_FUN(__glewAreProgramsResidentNV) -#define glBindProgramNV GLEW_GET_FUN(__glewBindProgramNV) -#define glDeleteProgramsNV GLEW_GET_FUN(__glewDeleteProgramsNV) -#define glExecuteProgramNV GLEW_GET_FUN(__glewExecuteProgramNV) -#define glGenProgramsNV GLEW_GET_FUN(__glewGenProgramsNV) -#define glGetProgramParameterdvNV GLEW_GET_FUN(__glewGetProgramParameterdvNV) -#define glGetProgramParameterfvNV GLEW_GET_FUN(__glewGetProgramParameterfvNV) -#define glGetProgramStringNV GLEW_GET_FUN(__glewGetProgramStringNV) -#define glGetProgramivNV GLEW_GET_FUN(__glewGetProgramivNV) -#define glGetTrackMatrixivNV GLEW_GET_FUN(__glewGetTrackMatrixivNV) -#define glGetVertexAttribPointervNV GLEW_GET_FUN(__glewGetVertexAttribPointervNV) -#define glGetVertexAttribdvNV GLEW_GET_FUN(__glewGetVertexAttribdvNV) -#define glGetVertexAttribfvNV GLEW_GET_FUN(__glewGetVertexAttribfvNV) -#define glGetVertexAttribivNV GLEW_GET_FUN(__glewGetVertexAttribivNV) -#define glIsProgramNV GLEW_GET_FUN(__glewIsProgramNV) -#define glLoadProgramNV GLEW_GET_FUN(__glewLoadProgramNV) -#define glProgramParameter4dNV GLEW_GET_FUN(__glewProgramParameter4dNV) -#define glProgramParameter4dvNV GLEW_GET_FUN(__glewProgramParameter4dvNV) -#define glProgramParameter4fNV GLEW_GET_FUN(__glewProgramParameter4fNV) -#define glProgramParameter4fvNV GLEW_GET_FUN(__glewProgramParameter4fvNV) -#define glProgramParameters4dvNV GLEW_GET_FUN(__glewProgramParameters4dvNV) -#define glProgramParameters4fvNV GLEW_GET_FUN(__glewProgramParameters4fvNV) -#define glRequestResidentProgramsNV GLEW_GET_FUN(__glewRequestResidentProgramsNV) -#define glTrackMatrixNV GLEW_GET_FUN(__glewTrackMatrixNV) -#define glVertexAttrib1dNV GLEW_GET_FUN(__glewVertexAttrib1dNV) -#define glVertexAttrib1dvNV GLEW_GET_FUN(__glewVertexAttrib1dvNV) -#define glVertexAttrib1fNV GLEW_GET_FUN(__glewVertexAttrib1fNV) -#define glVertexAttrib1fvNV GLEW_GET_FUN(__glewVertexAttrib1fvNV) -#define glVertexAttrib1sNV GLEW_GET_FUN(__glewVertexAttrib1sNV) -#define glVertexAttrib1svNV GLEW_GET_FUN(__glewVertexAttrib1svNV) -#define glVertexAttrib2dNV GLEW_GET_FUN(__glewVertexAttrib2dNV) -#define glVertexAttrib2dvNV GLEW_GET_FUN(__glewVertexAttrib2dvNV) -#define glVertexAttrib2fNV GLEW_GET_FUN(__glewVertexAttrib2fNV) -#define glVertexAttrib2fvNV GLEW_GET_FUN(__glewVertexAttrib2fvNV) -#define glVertexAttrib2sNV GLEW_GET_FUN(__glewVertexAttrib2sNV) -#define glVertexAttrib2svNV GLEW_GET_FUN(__glewVertexAttrib2svNV) -#define glVertexAttrib3dNV GLEW_GET_FUN(__glewVertexAttrib3dNV) -#define glVertexAttrib3dvNV GLEW_GET_FUN(__glewVertexAttrib3dvNV) -#define glVertexAttrib3fNV GLEW_GET_FUN(__glewVertexAttrib3fNV) -#define glVertexAttrib3fvNV GLEW_GET_FUN(__glewVertexAttrib3fvNV) -#define glVertexAttrib3sNV GLEW_GET_FUN(__glewVertexAttrib3sNV) -#define glVertexAttrib3svNV GLEW_GET_FUN(__glewVertexAttrib3svNV) -#define glVertexAttrib4dNV GLEW_GET_FUN(__glewVertexAttrib4dNV) -#define glVertexAttrib4dvNV GLEW_GET_FUN(__glewVertexAttrib4dvNV) -#define glVertexAttrib4fNV GLEW_GET_FUN(__glewVertexAttrib4fNV) -#define glVertexAttrib4fvNV GLEW_GET_FUN(__glewVertexAttrib4fvNV) -#define glVertexAttrib4sNV GLEW_GET_FUN(__glewVertexAttrib4sNV) -#define glVertexAttrib4svNV GLEW_GET_FUN(__glewVertexAttrib4svNV) -#define glVertexAttrib4ubNV GLEW_GET_FUN(__glewVertexAttrib4ubNV) -#define glVertexAttrib4ubvNV GLEW_GET_FUN(__glewVertexAttrib4ubvNV) -#define glVertexAttribPointerNV GLEW_GET_FUN(__glewVertexAttribPointerNV) -#define glVertexAttribs1dvNV GLEW_GET_FUN(__glewVertexAttribs1dvNV) -#define glVertexAttribs1fvNV GLEW_GET_FUN(__glewVertexAttribs1fvNV) -#define glVertexAttribs1svNV GLEW_GET_FUN(__glewVertexAttribs1svNV) -#define glVertexAttribs2dvNV GLEW_GET_FUN(__glewVertexAttribs2dvNV) -#define glVertexAttribs2fvNV GLEW_GET_FUN(__glewVertexAttribs2fvNV) -#define glVertexAttribs2svNV GLEW_GET_FUN(__glewVertexAttribs2svNV) -#define glVertexAttribs3dvNV GLEW_GET_FUN(__glewVertexAttribs3dvNV) -#define glVertexAttribs3fvNV GLEW_GET_FUN(__glewVertexAttribs3fvNV) -#define glVertexAttribs3svNV GLEW_GET_FUN(__glewVertexAttribs3svNV) -#define glVertexAttribs4dvNV GLEW_GET_FUN(__glewVertexAttribs4dvNV) -#define glVertexAttribs4fvNV GLEW_GET_FUN(__glewVertexAttribs4fvNV) -#define glVertexAttribs4svNV GLEW_GET_FUN(__glewVertexAttribs4svNV) -#define glVertexAttribs4ubvNV GLEW_GET_FUN(__glewVertexAttribs4ubvNV) - -#define GLEW_NV_vertex_program GLEW_GET_VAR(__GLEW_NV_vertex_program) - -#endif /* GL_NV_vertex_program */ - -/* ------------------------ GL_NV_vertex_program1_1 ------------------------ */ - -#ifndef GL_NV_vertex_program1_1 -#define GL_NV_vertex_program1_1 1 - -#define GLEW_NV_vertex_program1_1 GLEW_GET_VAR(__GLEW_NV_vertex_program1_1) - -#endif /* GL_NV_vertex_program1_1 */ - -/* ------------------------- GL_NV_vertex_program2 ------------------------- */ - -#ifndef GL_NV_vertex_program2 -#define GL_NV_vertex_program2 1 - -#define GLEW_NV_vertex_program2 GLEW_GET_VAR(__GLEW_NV_vertex_program2) - -#endif /* GL_NV_vertex_program2 */ - -/* ---------------------- GL_NV_vertex_program2_option --------------------- */ - -#ifndef GL_NV_vertex_program2_option -#define GL_NV_vertex_program2_option 1 - -#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 -#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 - -#define GLEW_NV_vertex_program2_option GLEW_GET_VAR(__GLEW_NV_vertex_program2_option) - -#endif /* GL_NV_vertex_program2_option */ - -/* ------------------------- GL_NV_vertex_program3 ------------------------- */ - -#ifndef GL_NV_vertex_program3 -#define GL_NV_vertex_program3 1 - -#define MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C - -#define GLEW_NV_vertex_program3 GLEW_GET_VAR(__GLEW_NV_vertex_program3) - -#endif /* GL_NV_vertex_program3 */ - -/* ------------------------- GL_NV_vertex_program4 ------------------------- */ - -#ifndef GL_NV_vertex_program4 -#define GL_NV_vertex_program4 1 - -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD - -#define GLEW_NV_vertex_program4 GLEW_GET_VAR(__GLEW_NV_vertex_program4) - -#endif /* GL_NV_vertex_program4 */ - -/* -------------------------- GL_NV_video_capture -------------------------- */ - -#ifndef GL_NV_video_capture -#define GL_NV_video_capture 1 - -#define GL_VIDEO_BUFFER_NV 0x9020 -#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 -#define GL_FIELD_UPPER_NV 0x9022 -#define GL_FIELD_LOWER_NV 0x9023 -#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 -#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 -#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 -#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 -#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 -#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 -#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A -#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B -#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C -#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D -#define GL_PARTIAL_SUCCESS_NV 0x902E -#define GL_SUCCESS_NV 0x902F -#define GL_FAILURE_NV 0x9030 -#define GL_YCBYCR8_422_NV 0x9031 -#define GL_YCBAYCR8A_4224_NV 0x9032 -#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 -#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 -#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 -#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 -#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 -#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 -#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 -#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A -#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B -#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C - -typedef void (GLAPIENTRY * PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); -typedef void (GLAPIENTRY * PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); -typedef void (GLAPIENTRY * PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint* params); -typedef GLenum (GLAPIENTRY * PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint* sequence_num, GLuint64EXT *capture_time); -typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble* params); -typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint* params); - -#define glBeginVideoCaptureNV GLEW_GET_FUN(__glewBeginVideoCaptureNV) -#define glBindVideoCaptureStreamBufferNV GLEW_GET_FUN(__glewBindVideoCaptureStreamBufferNV) -#define glBindVideoCaptureStreamTextureNV GLEW_GET_FUN(__glewBindVideoCaptureStreamTextureNV) -#define glEndVideoCaptureNV GLEW_GET_FUN(__glewEndVideoCaptureNV) -#define glGetVideoCaptureStreamdvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamdvNV) -#define glGetVideoCaptureStreamfvNV GLEW_GET_FUN(__glewGetVideoCaptureStreamfvNV) -#define glGetVideoCaptureStreamivNV GLEW_GET_FUN(__glewGetVideoCaptureStreamivNV) -#define glGetVideoCaptureivNV GLEW_GET_FUN(__glewGetVideoCaptureivNV) -#define glVideoCaptureNV GLEW_GET_FUN(__glewVideoCaptureNV) -#define glVideoCaptureStreamParameterdvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterdvNV) -#define glVideoCaptureStreamParameterfvNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterfvNV) -#define glVideoCaptureStreamParameterivNV GLEW_GET_FUN(__glewVideoCaptureStreamParameterivNV) - -#define GLEW_NV_video_capture GLEW_GET_VAR(__GLEW_NV_video_capture) - -#endif /* GL_NV_video_capture */ - -/* ------------------------ GL_OES_byte_coordinates ------------------------ */ - -#ifndef GL_OES_byte_coordinates -#define GL_OES_byte_coordinates 1 - -#define GLEW_OES_byte_coordinates GLEW_GET_VAR(__GLEW_OES_byte_coordinates) - -#endif /* GL_OES_byte_coordinates */ - -/* ------------------- GL_OES_compressed_paletted_texture ------------------ */ - -#ifndef GL_OES_compressed_paletted_texture -#define GL_OES_compressed_paletted_texture 1 - -#define GL_PALETTE4_RGB8_OES 0x8B90 -#define GL_PALETTE4_RGBA8_OES 0x8B91 -#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 -#define GL_PALETTE4_RGBA4_OES 0x8B93 -#define GL_PALETTE4_RGB5_A1_OES 0x8B94 -#define GL_PALETTE8_RGB8_OES 0x8B95 -#define GL_PALETTE8_RGBA8_OES 0x8B96 -#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 -#define GL_PALETTE8_RGBA4_OES 0x8B98 -#define GL_PALETTE8_RGB5_A1_OES 0x8B99 - -#define GLEW_OES_compressed_paletted_texture GLEW_GET_VAR(__GLEW_OES_compressed_paletted_texture) - -#endif /* GL_OES_compressed_paletted_texture */ - -/* --------------------------- GL_OES_read_format -------------------------- */ - -#ifndef GL_OES_read_format -#define GL_OES_read_format 1 - -#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B - -#define GLEW_OES_read_format GLEW_GET_VAR(__GLEW_OES_read_format) - -#endif /* GL_OES_read_format */ - -/* ------------------------ GL_OES_single_precision ------------------------ */ - -#ifndef GL_OES_single_precision -#define GL_OES_single_precision 1 - -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHFOESPROC) (GLclampd depth); -typedef void (GLAPIENTRY * PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); -typedef void (GLAPIENTRY * PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); -typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); - -#define glClearDepthfOES GLEW_GET_FUN(__glewClearDepthfOES) -#define glClipPlanefOES GLEW_GET_FUN(__glewClipPlanefOES) -#define glDepthRangefOES GLEW_GET_FUN(__glewDepthRangefOES) -#define glFrustumfOES GLEW_GET_FUN(__glewFrustumfOES) -#define glGetClipPlanefOES GLEW_GET_FUN(__glewGetClipPlanefOES) -#define glOrthofOES GLEW_GET_FUN(__glewOrthofOES) - -#define GLEW_OES_single_precision GLEW_GET_VAR(__GLEW_OES_single_precision) - -#endif /* GL_OES_single_precision */ - -/* ---------------------------- GL_OML_interlace --------------------------- */ - -#ifndef GL_OML_interlace -#define GL_OML_interlace 1 - -#define GL_INTERLACE_OML 0x8980 -#define GL_INTERLACE_READ_OML 0x8981 - -#define GLEW_OML_interlace GLEW_GET_VAR(__GLEW_OML_interlace) - -#endif /* GL_OML_interlace */ - -/* ---------------------------- GL_OML_resample ---------------------------- */ - -#ifndef GL_OML_resample -#define GL_OML_resample 1 - -#define GL_PACK_RESAMPLE_OML 0x8984 -#define GL_UNPACK_RESAMPLE_OML 0x8985 -#define GL_RESAMPLE_REPLICATE_OML 0x8986 -#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 -#define GL_RESAMPLE_AVERAGE_OML 0x8988 -#define GL_RESAMPLE_DECIMATE_OML 0x8989 - -#define GLEW_OML_resample GLEW_GET_VAR(__GLEW_OML_resample) - -#endif /* GL_OML_resample */ - -/* ---------------------------- GL_OML_subsample --------------------------- */ - -#ifndef GL_OML_subsample -#define GL_OML_subsample 1 - -#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 -#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 - -#define GLEW_OML_subsample GLEW_GET_VAR(__GLEW_OML_subsample) - -#endif /* GL_OML_subsample */ - -/* --------------------------- GL_PGI_misc_hints --------------------------- */ - -#ifndef GL_PGI_misc_hints -#define GL_PGI_misc_hints 1 - -#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 107000 -#define GL_CONSERVE_MEMORY_HINT_PGI 107005 -#define GL_RECLAIM_MEMORY_HINT_PGI 107006 -#define GL_NATIVE_GRAPHICS_HANDLE_PGI 107010 -#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 107011 -#define GL_NATIVE_GRAPHICS_END_HINT_PGI 107012 -#define GL_ALWAYS_FAST_HINT_PGI 107020 -#define GL_ALWAYS_SOFT_HINT_PGI 107021 -#define GL_ALLOW_DRAW_OBJ_HINT_PGI 107022 -#define GL_ALLOW_DRAW_WIN_HINT_PGI 107023 -#define GL_ALLOW_DRAW_FRG_HINT_PGI 107024 -#define GL_ALLOW_DRAW_MEM_HINT_PGI 107025 -#define GL_STRICT_DEPTHFUNC_HINT_PGI 107030 -#define GL_STRICT_LIGHTING_HINT_PGI 107031 -#define GL_STRICT_SCISSOR_HINT_PGI 107032 -#define GL_FULL_STIPPLE_HINT_PGI 107033 -#define GL_CLIP_NEAR_HINT_PGI 107040 -#define GL_CLIP_FAR_HINT_PGI 107041 -#define GL_WIDE_LINE_HINT_PGI 107042 -#define GL_BACK_NORMALS_HINT_PGI 107043 - -#define GLEW_PGI_misc_hints GLEW_GET_VAR(__GLEW_PGI_misc_hints) - -#endif /* GL_PGI_misc_hints */ - -/* -------------------------- GL_PGI_vertex_hints -------------------------- */ - -#ifndef GL_PGI_vertex_hints -#define GL_PGI_vertex_hints 1 - -#define GL_VERTEX23_BIT_PGI 0x00000004 -#define GL_VERTEX4_BIT_PGI 0x00000008 -#define GL_COLOR3_BIT_PGI 0x00010000 -#define GL_COLOR4_BIT_PGI 0x00020000 -#define GL_EDGEFLAG_BIT_PGI 0x00040000 -#define GL_INDEX_BIT_PGI 0x00080000 -#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 -#define GL_VERTEX_DATA_HINT_PGI 107050 -#define GL_VERTEX_CONSISTENT_HINT_PGI 107051 -#define GL_MATERIAL_SIDE_HINT_PGI 107052 -#define GL_MAX_VERTEX_HINT_PGI 107053 -#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 -#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 -#define GL_MAT_EMISSION_BIT_PGI 0x00800000 -#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 -#define GL_MAT_SHININESS_BIT_PGI 0x02000000 -#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 -#define GL_NORMAL_BIT_PGI 0x08000000 -#define GL_TEXCOORD1_BIT_PGI 0x10000000 -#define GL_TEXCOORD2_BIT_PGI 0x20000000 -#define GL_TEXCOORD3_BIT_PGI 0x40000000 -#define GL_TEXCOORD4_BIT_PGI 0x80000000 - -#define GLEW_PGI_vertex_hints GLEW_GET_VAR(__GLEW_PGI_vertex_hints) - -#endif /* GL_PGI_vertex_hints */ - -/* ---------------------- GL_REGAL_ES1_0_compatibility --------------------- */ - -#ifndef GL_REGAL_ES1_0_compatibility -#define GL_REGAL_ES1_0_compatibility 1 - -typedef int GLclampx; - -typedef void (GLAPIENTRY * PFNGLALPHAFUNCXPROC) (GLenum func, GLclampx ref); -typedef void (GLAPIENTRY * PFNGLCLEARCOLORXPROC) (GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha); -typedef void (GLAPIENTRY * PFNGLCLEARDEPTHXPROC) (GLclampx depth); -typedef void (GLAPIENTRY * PFNGLCOLOR4XPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); -typedef void (GLAPIENTRY * PFNGLDEPTHRANGEXPROC) (GLclampx zNear, GLclampx zFar); -typedef void (GLAPIENTRY * PFNGLFOGXPROC) (GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLFOGXVPROC) (GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLFRUSTUMFPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); -typedef void (GLAPIENTRY * PFNGLFRUSTUMXPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); -typedef void (GLAPIENTRY * PFNGLLIGHTMODELXPROC) (GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLLIGHTMODELXVPROC) (GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLLIGHTXPROC) (GLenum light, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLLIGHTXVPROC) (GLenum light, GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLLINEWIDTHXPROC) (GLfixed width); -typedef void (GLAPIENTRY * PFNGLLOADMATRIXXPROC) (const GLfixed* m); -typedef void (GLAPIENTRY * PFNGLMATERIALXPROC) (GLenum face, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLMATERIALXVPROC) (GLenum face, GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLMULTMATRIXXPROC) (const GLfixed* m); -typedef void (GLAPIENTRY * PFNGLMULTITEXCOORD4XPROC) (GLenum target, GLfixed s, GLfixed t, GLfixed r, GLfixed q); -typedef void (GLAPIENTRY * PFNGLNORMAL3XPROC) (GLfixed nx, GLfixed ny, GLfixed nz); -typedef void (GLAPIENTRY * PFNGLORTHOFPROC) (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); -typedef void (GLAPIENTRY * PFNGLORTHOXPROC) (GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar); -typedef void (GLAPIENTRY * PFNGLPOINTSIZEXPROC) (GLfixed size); -typedef void (GLAPIENTRY * PFNGLPOLYGONOFFSETXPROC) (GLfixed factor, GLfixed units); -typedef void (GLAPIENTRY * PFNGLROTATEXPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); -typedef void (GLAPIENTRY * PFNGLSAMPLECOVERAGEXPROC) (GLclampx value, GLboolean invert); -typedef void (GLAPIENTRY * PFNGLSCALEXPROC) (GLfixed x, GLfixed y, GLfixed z); -typedef void (GLAPIENTRY * PFNGLTEXENVXPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLTEXENVXVPROC) (GLenum target, GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERXPROC) (GLenum target, GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLTRANSLATEXPROC) (GLfixed x, GLfixed y, GLfixed z); - -#define glAlphaFuncx GLEW_GET_FUN(__glewAlphaFuncx) -#define glClearColorx GLEW_GET_FUN(__glewClearColorx) -#define glClearDepthx GLEW_GET_FUN(__glewClearDepthx) -#define glColor4x GLEW_GET_FUN(__glewColor4x) -#define glDepthRangex GLEW_GET_FUN(__glewDepthRangex) -#define glFogx GLEW_GET_FUN(__glewFogx) -#define glFogxv GLEW_GET_FUN(__glewFogxv) -#define glFrustumf GLEW_GET_FUN(__glewFrustumf) -#define glFrustumx GLEW_GET_FUN(__glewFrustumx) -#define glLightModelx GLEW_GET_FUN(__glewLightModelx) -#define glLightModelxv GLEW_GET_FUN(__glewLightModelxv) -#define glLightx GLEW_GET_FUN(__glewLightx) -#define glLightxv GLEW_GET_FUN(__glewLightxv) -#define glLineWidthx GLEW_GET_FUN(__glewLineWidthx) -#define glLoadMatrixx GLEW_GET_FUN(__glewLoadMatrixx) -#define glMaterialx GLEW_GET_FUN(__glewMaterialx) -#define glMaterialxv GLEW_GET_FUN(__glewMaterialxv) -#define glMultMatrixx GLEW_GET_FUN(__glewMultMatrixx) -#define glMultiTexCoord4x GLEW_GET_FUN(__glewMultiTexCoord4x) -#define glNormal3x GLEW_GET_FUN(__glewNormal3x) -#define glOrthof GLEW_GET_FUN(__glewOrthof) -#define glOrthox GLEW_GET_FUN(__glewOrthox) -#define glPointSizex GLEW_GET_FUN(__glewPointSizex) -#define glPolygonOffsetx GLEW_GET_FUN(__glewPolygonOffsetx) -#define glRotatex GLEW_GET_FUN(__glewRotatex) -#define glSampleCoveragex GLEW_GET_FUN(__glewSampleCoveragex) -#define glScalex GLEW_GET_FUN(__glewScalex) -#define glTexEnvx GLEW_GET_FUN(__glewTexEnvx) -#define glTexEnvxv GLEW_GET_FUN(__glewTexEnvxv) -#define glTexParameterx GLEW_GET_FUN(__glewTexParameterx) -#define glTranslatex GLEW_GET_FUN(__glewTranslatex) - -#define GLEW_REGAL_ES1_0_compatibility GLEW_GET_VAR(__GLEW_REGAL_ES1_0_compatibility) - -#endif /* GL_REGAL_ES1_0_compatibility */ - -/* ---------------------- GL_REGAL_ES1_1_compatibility --------------------- */ - -#ifndef GL_REGAL_ES1_1_compatibility -#define GL_REGAL_ES1_1_compatibility 1 - -typedef void (GLAPIENTRY * PFNGLCLIPPLANEFPROC) (GLenum plane, const GLfloat* equation); -typedef void (GLAPIENTRY * PFNGLCLIPPLANEXPROC) (GLenum plane, const GLfixed* equation); -typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEFPROC) (GLenum pname, GLfloat eqn[4]); -typedef void (GLAPIENTRY * PFNGLGETCLIPPLANEXPROC) (GLenum pname, GLfixed eqn[4]); -typedef void (GLAPIENTRY * PFNGLGETFIXEDVPROC) (GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETLIGHTXVPROC) (GLenum light, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETMATERIALXVPROC) (GLenum face, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETTEXENVXVPROC) (GLenum env, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLGETTEXPARAMETERXVPROC) (GLenum target, GLenum pname, GLfixed* params); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERXPROC) (GLenum pname, GLfixed param); -typedef void (GLAPIENTRY * PFNGLPOINTPARAMETERXVPROC) (GLenum pname, const GLfixed* params); -typedef void (GLAPIENTRY * PFNGLPOINTSIZEPOINTEROESPROC) (GLenum type, GLsizei stride, const GLvoid* pointer); -typedef void (GLAPIENTRY * PFNGLTEXPARAMETERXVPROC) (GLenum target, GLenum pname, const GLfixed* params); - -#define glClipPlanef GLEW_GET_FUN(__glewClipPlanef) -#define glClipPlanex GLEW_GET_FUN(__glewClipPlanex) -#define glGetClipPlanef GLEW_GET_FUN(__glewGetClipPlanef) -#define glGetClipPlanex GLEW_GET_FUN(__glewGetClipPlanex) -#define glGetFixedv GLEW_GET_FUN(__glewGetFixedv) -#define glGetLightxv GLEW_GET_FUN(__glewGetLightxv) -#define glGetMaterialxv GLEW_GET_FUN(__glewGetMaterialxv) -#define glGetTexEnvxv GLEW_GET_FUN(__glewGetTexEnvxv) -#define glGetTexParameterxv GLEW_GET_FUN(__glewGetTexParameterxv) -#define glPointParameterx GLEW_GET_FUN(__glewPointParameterx) -#define glPointParameterxv GLEW_GET_FUN(__glewPointParameterxv) -#define glPointSizePointerOES GLEW_GET_FUN(__glewPointSizePointerOES) -#define glTexParameterxv GLEW_GET_FUN(__glewTexParameterxv) - -#define GLEW_REGAL_ES1_1_compatibility GLEW_GET_VAR(__GLEW_REGAL_ES1_1_compatibility) - -#endif /* GL_REGAL_ES1_1_compatibility */ - -/* ---------------------------- GL_REGAL_enable ---------------------------- */ - -#ifndef GL_REGAL_enable -#define GL_REGAL_enable 1 - -#define GL_ERROR_REGAL 0x9322 -#define GL_DEBUG_REGAL 0x9323 -#define GL_LOG_REGAL 0x9324 -#define GL_EMULATION_REGAL 0x9325 -#define GL_DRIVER_REGAL 0x9326 -#define GL_MISSING_REGAL 0x9360 -#define GL_TRACE_REGAL 0x9361 -#define GL_CACHE_REGAL 0x9362 -#define GL_CODE_REGAL 0x9363 -#define GL_STATISTICS_REGAL 0x9364 - -#define GLEW_REGAL_enable GLEW_GET_VAR(__GLEW_REGAL_enable) - -#endif /* GL_REGAL_enable */ - -/* ------------------------- GL_REGAL_error_string ------------------------- */ - -#ifndef GL_REGAL_error_string -#define GL_REGAL_error_string 1 - -typedef const GLchar* (GLAPIENTRY * PFNGLERRORSTRINGREGALPROC) (GLenum error); - -#define glErrorStringREGAL GLEW_GET_FUN(__glewErrorStringREGAL) - -#define GLEW_REGAL_error_string GLEW_GET_VAR(__GLEW_REGAL_error_string) - -#endif /* GL_REGAL_error_string */ - -/* ------------------------ GL_REGAL_extension_query ----------------------- */ - -#ifndef GL_REGAL_extension_query -#define GL_REGAL_extension_query 1 - -typedef GLboolean (GLAPIENTRY * PFNGLGETEXTENSIONREGALPROC) (const GLchar* ext); -typedef GLboolean (GLAPIENTRY * PFNGLISSUPPORTEDREGALPROC) (const GLchar* ext); - -#define glGetExtensionREGAL GLEW_GET_FUN(__glewGetExtensionREGAL) -#define glIsSupportedREGAL GLEW_GET_FUN(__glewIsSupportedREGAL) - -#define GLEW_REGAL_extension_query GLEW_GET_VAR(__GLEW_REGAL_extension_query) - -#endif /* GL_REGAL_extension_query */ - -/* ------------------------------ GL_REGAL_log ----------------------------- */ - -#ifndef GL_REGAL_log -#define GL_REGAL_log 1 - -#define GL_LOG_ERROR_REGAL 0x9319 -#define GL_LOG_WARNING_REGAL 0x931A -#define GL_LOG_INFO_REGAL 0x931B -#define GL_LOG_APP_REGAL 0x931C -#define GL_LOG_DRIVER_REGAL 0x931D -#define GL_LOG_INTERNAL_REGAL 0x931E -#define GL_LOG_DEBUG_REGAL 0x931F -#define GL_LOG_STATUS_REGAL 0x9320 -#define GL_LOG_HTTP_REGAL 0x9321 - -typedef void (APIENTRY *GLLOGPROCREGAL)(GLenum stream, GLsizei length, const GLchar *message, GLvoid *context); - -typedef void (GLAPIENTRY * PFNGLLOGMESSAGECALLBACKREGALPROC) (GLLOGPROCREGAL callback); - -#define glLogMessageCallbackREGAL GLEW_GET_FUN(__glewLogMessageCallbackREGAL) - -#define GLEW_REGAL_log GLEW_GET_VAR(__GLEW_REGAL_log) - -#endif /* GL_REGAL_log */ - -/* ----------------------- GL_REND_screen_coordinates ---------------------- */ - -#ifndef GL_REND_screen_coordinates -#define GL_REND_screen_coordinates 1 - -#define GL_SCREEN_COORDINATES_REND 0x8490 -#define GL_INVERTED_SCREEN_W_REND 0x8491 - -#define GLEW_REND_screen_coordinates GLEW_GET_VAR(__GLEW_REND_screen_coordinates) - -#endif /* GL_REND_screen_coordinates */ - -/* ------------------------------- GL_S3_s3tc ------------------------------ */ - -#ifndef GL_S3_s3tc -#define GL_S3_s3tc 1 - -#define GL_RGB_S3TC 0x83A0 -#define GL_RGB4_S3TC 0x83A1 -#define GL_RGBA_S3TC 0x83A2 -#define GL_RGBA4_S3TC 0x83A3 -#define GL_RGBA_DXT5_S3TC 0x83A4 -#define GL_RGBA4_DXT5_S3TC 0x83A5 - -#define GLEW_S3_s3tc GLEW_GET_VAR(__GLEW_S3_s3tc) - -#endif /* GL_S3_s3tc */ - -/* -------------------------- GL_SGIS_color_range -------------------------- */ - -#ifndef GL_SGIS_color_range -#define GL_SGIS_color_range 1 - -#define GL_EXTENDED_RANGE_SGIS 0x85A5 -#define GL_MIN_RED_SGIS 0x85A6 -#define GL_MAX_RED_SGIS 0x85A7 -#define GL_MIN_GREEN_SGIS 0x85A8 -#define GL_MAX_GREEN_SGIS 0x85A9 -#define GL_MIN_BLUE_SGIS 0x85AA -#define GL_MAX_BLUE_SGIS 0x85AB -#define GL_MIN_ALPHA_SGIS 0x85AC -#define GL_MAX_ALPHA_SGIS 0x85AD - -#define GLEW_SGIS_color_range GLEW_GET_VAR(__GLEW_SGIS_color_range) - -#endif /* GL_SGIS_color_range */ - -/* ------------------------- GL_SGIS_detail_texture ------------------------ */ - -#ifndef GL_SGIS_detail_texture -#define GL_SGIS_detail_texture 1 - -typedef void (GLAPIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); -typedef void (GLAPIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat* points); - -#define glDetailTexFuncSGIS GLEW_GET_FUN(__glewDetailTexFuncSGIS) -#define glGetDetailTexFuncSGIS GLEW_GET_FUN(__glewGetDetailTexFuncSGIS) - -#define GLEW_SGIS_detail_texture GLEW_GET_VAR(__GLEW_SGIS_detail_texture) - -#endif /* GL_SGIS_detail_texture */ - -/* -------------------------- GL_SGIS_fog_function ------------------------- */ - -#ifndef GL_SGIS_fog_function -#define GL_SGIS_fog_function 1 - -typedef void (GLAPIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat* points); -typedef void (GLAPIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat* points); - -#define glFogFuncSGIS GLEW_GET_FUN(__glewFogFuncSGIS) -#define glGetFogFuncSGIS GLEW_GET_FUN(__glewGetFogFuncSGIS) - -#define GLEW_SGIS_fog_function GLEW_GET_VAR(__GLEW_SGIS_fog_function) - -#endif /* GL_SGIS_fog_function */ - -/* ------------------------ GL_SGIS_generate_mipmap ------------------------ */ - -#ifndef GL_SGIS_generate_mipmap -#define GL_SGIS_generate_mipmap 1 - -#define GL_GENERATE_MIPMAP_SGIS 0x8191 -#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 - -#define GLEW_SGIS_generate_mipmap GLEW_GET_VAR(__GLEW_SGIS_generate_mipmap) - -#endif /* GL_SGIS_generate_mipmap */ - -/* -------------------------- GL_SGIS_multisample -------------------------- */ - -#ifndef GL_SGIS_multisample -#define GL_SGIS_multisample 1 - -#define GL_MULTISAMPLE_SGIS 0x809D -#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F -#define GL_SAMPLE_MASK_SGIS 0x80A0 -#define GL_1PASS_SGIS 0x80A1 -#define GL_2PASS_0_SGIS 0x80A2 -#define GL_2PASS_1_SGIS 0x80A3 -#define GL_4PASS_0_SGIS 0x80A4 -#define GL_4PASS_1_SGIS 0x80A5 -#define GL_4PASS_2_SGIS 0x80A6 -#define GL_4PASS_3_SGIS 0x80A7 -#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 -#define GL_SAMPLES_SGIS 0x80A9 -#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA -#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB -#define GL_SAMPLE_PATTERN_SGIS 0x80AC - -typedef void (GLAPIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); -typedef void (GLAPIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); - -#define glSampleMaskSGIS GLEW_GET_FUN(__glewSampleMaskSGIS) -#define glSamplePatternSGIS GLEW_GET_FUN(__glewSamplePatternSGIS) - -#define GLEW_SGIS_multisample GLEW_GET_VAR(__GLEW_SGIS_multisample) - -#endif /* GL_SGIS_multisample */ - -/* ------------------------- GL_SGIS_pixel_texture ------------------------- */ - -#ifndef GL_SGIS_pixel_texture -#define GL_SGIS_pixel_texture 1 - -#define GLEW_SGIS_pixel_texture GLEW_GET_VAR(__GLEW_SGIS_pixel_texture) - -#endif /* GL_SGIS_pixel_texture */ - -/* ----------------------- GL_SGIS_point_line_texgen ----------------------- */ - -#ifndef GL_SGIS_point_line_texgen -#define GL_SGIS_point_line_texgen 1 - -#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 -#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 -#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 -#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 -#define GL_EYE_POINT_SGIS 0x81F4 -#define GL_OBJECT_POINT_SGIS 0x81F5 -#define GL_EYE_LINE_SGIS 0x81F6 -#define GL_OBJECT_LINE_SGIS 0x81F7 - -#define GLEW_SGIS_point_line_texgen GLEW_GET_VAR(__GLEW_SGIS_point_line_texgen) - -#endif /* GL_SGIS_point_line_texgen */ - -/* ------------------------ GL_SGIS_sharpen_texture ------------------------ */ - -#ifndef GL_SGIS_sharpen_texture -#define GL_SGIS_sharpen_texture 1 - -typedef void (GLAPIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat* points); -typedef void (GLAPIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat* points); - -#define glGetSharpenTexFuncSGIS GLEW_GET_FUN(__glewGetSharpenTexFuncSGIS) -#define glSharpenTexFuncSGIS GLEW_GET_FUN(__glewSharpenTexFuncSGIS) - -#define GLEW_SGIS_sharpen_texture GLEW_GET_VAR(__GLEW_SGIS_sharpen_texture) - -#endif /* GL_SGIS_sharpen_texture */ - -/* --------------------------- GL_SGIS_texture4D --------------------------- */ - -#ifndef GL_SGIS_texture4D -#define GL_SGIS_texture4D 1 - -typedef void (GLAPIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLint border, GLenum format, GLenum type, const GLvoid *pixels); -typedef void (GLAPIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei extent, GLenum format, GLenum type, const GLvoid *pixels); - -#define glTexImage4DSGIS GLEW_GET_FUN(__glewTexImage4DSGIS) -#define glTexSubImage4DSGIS GLEW_GET_FUN(__glewTexSubImage4DSGIS) - -#define GLEW_SGIS_texture4D GLEW_GET_VAR(__GLEW_SGIS_texture4D) - -#endif /* GL_SGIS_texture4D */ - -/* ---------------------- GL_SGIS_texture_border_clamp --------------------- */ - -#ifndef GL_SGIS_texture_border_clamp -#define GL_SGIS_texture_border_clamp 1 - -#define GL_CLAMP_TO_BORDER_SGIS 0x812D - -#define GLEW_SGIS_texture_border_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_border_clamp) - -#endif /* GL_SGIS_texture_border_clamp */ - -/* ----------------------- GL_SGIS_texture_edge_clamp ---------------------- */ - -#ifndef GL_SGIS_texture_edge_clamp -#define GL_SGIS_texture_edge_clamp 1 - -#define GL_CLAMP_TO_EDGE_SGIS 0x812F - -#define GLEW_SGIS_texture_edge_clamp GLEW_GET_VAR(__GLEW_SGIS_texture_edge_clamp) - -#endif /* GL_SGIS_texture_edge_clamp */ - -/* ------------------------ GL_SGIS_texture_filter4 ------------------------ */ - -#ifndef GL_SGIS_texture_filter4 -#define GL_SGIS_texture_filter4 1 - -typedef void (GLAPIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat* weights); -typedef void (GLAPIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat* weights); - -#define glGetTexFilterFuncSGIS GLEW_GET_FUN(__glewGetTexFilterFuncSGIS) -#define glTexFilterFuncSGIS GLEW_GET_FUN(__glewTexFilterFuncSGIS) - -#define GLEW_SGIS_texture_filter4 GLEW_GET_VAR(__GLEW_SGIS_texture_filter4) - -#endif /* GL_SGIS_texture_filter4 */ - -/* -------------------------- GL_SGIS_texture_lod -------------------------- */ - -#ifndef GL_SGIS_texture_lod -#define GL_SGIS_texture_lod 1 - -#define GL_TEXTURE_MIN_LOD_SGIS 0x813A -#define GL_TEXTURE_MAX_LOD_SGIS 0x813B -#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C -#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D - -#define GLEW_SGIS_texture_lod GLEW_GET_VAR(__GLEW_SGIS_texture_lod) - -#endif /* GL_SGIS_texture_lod */ - -/* ------------------------- GL_SGIS_texture_select ------------------------ */ - -#ifndef GL_SGIS_texture_select -#define GL_SGIS_texture_select 1 - -#define GLEW_SGIS_texture_select GLEW_GET_VAR(__GLEW_SGIS_texture_select) - -#endif /* GL_SGIS_texture_select */ - -/* ----------------------------- GL_SGIX_async ----------------------------- */ - -#ifndef GL_SGIX_async -#define GL_SGIX_async 1 - -#define GL_ASYNC_MARKER_SGIX 0x8329 - -typedef void (GLAPIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker); -typedef void (GLAPIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); -typedef GLint (GLAPIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint* markerp); -typedef GLuint (GLAPIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); -typedef GLboolean (GLAPIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); -typedef GLint (GLAPIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint* markerp); - -#define glAsyncMarkerSGIX GLEW_GET_FUN(__glewAsyncMarkerSGIX) -#define glDeleteAsyncMarkersSGIX GLEW_GET_FUN(__glewDeleteAsyncMarkersSGIX) -#define glFinishAsyncSGIX GLEW_GET_FUN(__glewFinishAsyncSGIX) -#define glGenAsyncMarkersSGIX GLEW_GET_FUN(__glewGenAsyncMarkersSGIX) -#define glIsAsyncMarkerSGIX GLEW_GET_FUN(__glewIsAsyncMarkerSGIX) -#define glPollAsyncSGIX GLEW_GET_FUN(__glewPollAsyncSGIX) - -#define GLEW_SGIX_async GLEW_GET_VAR(__GLEW_SGIX_async) - -#endif /* GL_SGIX_async */ - -/* ------------------------ GL_SGIX_async_histogram ------------------------ */ - -#ifndef GL_SGIX_async_histogram -#define GL_SGIX_async_histogram 1 - -#define GL_ASYNC_HISTOGRAM_SGIX 0x832C -#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D - -#define GLEW_SGIX_async_histogram GLEW_GET_VAR(__GLEW_SGIX_async_histogram) - -#endif /* GL_SGIX_async_histogram */ - -/* -------------------------- GL_SGIX_async_pixel -------------------------- */ - -#ifndef GL_SGIX_async_pixel -#define GL_SGIX_async_pixel 1 - -#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C -#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D -#define GL_ASYNC_READ_PIXELS_SGIX 0x835E -#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F -#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 -#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 - -#define GLEW_SGIX_async_pixel GLEW_GET_VAR(__GLEW_SGIX_async_pixel) - -#endif /* GL_SGIX_async_pixel */ - -/* ----------------------- GL_SGIX_blend_alpha_minmax ---------------------- */ - -#ifndef GL_SGIX_blend_alpha_minmax -#define GL_SGIX_blend_alpha_minmax 1 - -#define GL_ALPHA_MIN_SGIX 0x8320 -#define GL_ALPHA_MAX_SGIX 0x8321 - -#define GLEW_SGIX_blend_alpha_minmax GLEW_GET_VAR(__GLEW_SGIX_blend_alpha_minmax) - -#endif /* GL_SGIX_blend_alpha_minmax */ - -/* ---------------------------- GL_SGIX_clipmap ---------------------------- */ - -#ifndef GL_SGIX_clipmap -#define GL_SGIX_clipmap 1 - -#define GLEW_SGIX_clipmap GLEW_GET_VAR(__GLEW_SGIX_clipmap) - -#endif /* GL_SGIX_clipmap */ - -/* ---------------------- GL_SGIX_convolution_accuracy --------------------- */ - -#ifndef GL_SGIX_convolution_accuracy -#define GL_SGIX_convolution_accuracy 1 - -#define GL_CONVOLUTION_HINT_SGIX 0x8316 - -#define GLEW_SGIX_convolution_accuracy GLEW_GET_VAR(__GLEW_SGIX_convolution_accuracy) - -#endif /* GL_SGIX_convolution_accuracy */ - -/* ------------------------- GL_SGIX_depth_texture ------------------------- */ - -#ifndef GL_SGIX_depth_texture -#define GL_SGIX_depth_texture 1 - -#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 -#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 -#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 - -#define GLEW_SGIX_depth_texture GLEW_GET_VAR(__GLEW_SGIX_depth_texture) - -#endif /* GL_SGIX_depth_texture */ - -/* -------------------------- GL_SGIX_flush_raster ------------------------- */ - -#ifndef GL_SGIX_flush_raster -#define GL_SGIX_flush_raster 1 - -typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void); - -#define glFlushRasterSGIX GLEW_GET_FUN(__glewFlushRasterSGIX) - -#define GLEW_SGIX_flush_raster GLEW_GET_VAR(__GLEW_SGIX_flush_raster) - -#endif /* GL_SGIX_flush_raster */ - -/* --------------------------- GL_SGIX_fog_offset -------------------------- */ - -#ifndef GL_SGIX_fog_offset -#define GL_SGIX_fog_offset 1 - -#define GL_FOG_OFFSET_SGIX 0x8198 -#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 - -#define GLEW_SGIX_fog_offset GLEW_GET_VAR(__GLEW_SGIX_fog_offset) - -#endif /* GL_SGIX_fog_offset */ - -/* -------------------------- GL_SGIX_fog_texture -------------------------- */ - -#ifndef GL_SGIX_fog_texture -#define GL_SGIX_fog_texture 1 - -#define GL_TEXTURE_FOG_SGIX 0 -#define GL_FOG_PATCHY_FACTOR_SGIX 0 -#define GL_FRAGMENT_FOG_SGIX 0 - -typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname); - -#define glTextureFogSGIX GLEW_GET_FUN(__glewTextureFogSGIX) - -#define GLEW_SGIX_fog_texture GLEW_GET_VAR(__GLEW_SGIX_fog_texture) - -#endif /* GL_SGIX_fog_texture */ - -/* ------------------- GL_SGIX_fragment_specular_lighting ------------------ */ - -#ifndef GL_SGIX_fragment_specular_lighting -#define GL_SGIX_fragment_specular_lighting 1 - -typedef void (GLAPIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, const GLfloat param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, const GLint param); -typedef void (GLAPIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum value, GLfloat* data); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum value, GLint* data); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat* data); -typedef void (GLAPIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint* data); - -#define glFragmentColorMaterialSGIX GLEW_GET_FUN(__glewFragmentColorMaterialSGIX) -#define glFragmentLightModelfSGIX GLEW_GET_FUN(__glewFragmentLightModelfSGIX) -#define glFragmentLightModelfvSGIX GLEW_GET_FUN(__glewFragmentLightModelfvSGIX) -#define glFragmentLightModeliSGIX GLEW_GET_FUN(__glewFragmentLightModeliSGIX) -#define glFragmentLightModelivSGIX GLEW_GET_FUN(__glewFragmentLightModelivSGIX) -#define glFragmentLightfSGIX GLEW_GET_FUN(__glewFragmentLightfSGIX) -#define glFragmentLightfvSGIX GLEW_GET_FUN(__glewFragmentLightfvSGIX) -#define glFragmentLightiSGIX GLEW_GET_FUN(__glewFragmentLightiSGIX) -#define glFragmentLightivSGIX GLEW_GET_FUN(__glewFragmentLightivSGIX) -#define glFragmentMaterialfSGIX GLEW_GET_FUN(__glewFragmentMaterialfSGIX) -#define glFragmentMaterialfvSGIX GLEW_GET_FUN(__glewFragmentMaterialfvSGIX) -#define glFragmentMaterialiSGIX GLEW_GET_FUN(__glewFragmentMaterialiSGIX) -#define glFragmentMaterialivSGIX GLEW_GET_FUN(__glewFragmentMaterialivSGIX) -#define glGetFragmentLightfvSGIX GLEW_GET_FUN(__glewGetFragmentLightfvSGIX) -#define glGetFragmentLightivSGIX GLEW_GET_FUN(__glewGetFragmentLightivSGIX) -#define glGetFragmentMaterialfvSGIX GLEW_GET_FUN(__glewGetFragmentMaterialfvSGIX) -#define glGetFragmentMaterialivSGIX GLEW_GET_FUN(__glewGetFragmentMaterialivSGIX) - -#define GLEW_SGIX_fragment_specular_lighting GLEW_GET_VAR(__GLEW_SGIX_fragment_specular_lighting) - -#endif /* GL_SGIX_fragment_specular_lighting */ - -/* --------------------------- GL_SGIX_framezoom --------------------------- */ - -#ifndef GL_SGIX_framezoom -#define GL_SGIX_framezoom 1 - -typedef void (GLAPIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor); - -#define glFrameZoomSGIX GLEW_GET_FUN(__glewFrameZoomSGIX) - -#define GLEW_SGIX_framezoom GLEW_GET_VAR(__GLEW_SGIX_framezoom) - -#endif /* GL_SGIX_framezoom */ - -/* --------------------------- GL_SGIX_interlace --------------------------- */ - -#ifndef GL_SGIX_interlace -#define GL_SGIX_interlace 1 - -#define GL_INTERLACE_SGIX 0x8094 - -#define GLEW_SGIX_interlace GLEW_GET_VAR(__GLEW_SGIX_interlace) - -#endif /* GL_SGIX_interlace */ - -/* ------------------------- GL_SGIX_ir_instrument1 ------------------------ */ - -#ifndef GL_SGIX_ir_instrument1 -#define GL_SGIX_ir_instrument1 1 - -#define GLEW_SGIX_ir_instrument1 GLEW_GET_VAR(__GLEW_SGIX_ir_instrument1) - -#endif /* GL_SGIX_ir_instrument1 */ - -/* ------------------------- GL_SGIX_list_priority ------------------------- */ - -#ifndef GL_SGIX_list_priority -#define GL_SGIX_list_priority 1 - -#define GLEW_SGIX_list_priority GLEW_GET_VAR(__GLEW_SGIX_list_priority) - -#endif /* GL_SGIX_list_priority */ - -/* ------------------------- GL_SGIX_pixel_texture ------------------------- */ - -#ifndef GL_SGIX_pixel_texture -#define GL_SGIX_pixel_texture 1 - -typedef void (GLAPIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); - -#define glPixelTexGenSGIX GLEW_GET_FUN(__glewPixelTexGenSGIX) - -#define GLEW_SGIX_pixel_texture GLEW_GET_VAR(__GLEW_SGIX_pixel_texture) - -#endif /* GL_SGIX_pixel_texture */ - -/* ----------------------- GL_SGIX_pixel_texture_bits ---------------------- */ - -#ifndef GL_SGIX_pixel_texture_bits -#define GL_SGIX_pixel_texture_bits 1 - -#define GLEW_SGIX_pixel_texture_bits GLEW_GET_VAR(__GLEW_SGIX_pixel_texture_bits) - -#endif /* GL_SGIX_pixel_texture_bits */ - -/* ------------------------ GL_SGIX_reference_plane ------------------------ */ - -#ifndef GL_SGIX_reference_plane -#define GL_SGIX_reference_plane 1 - -typedef void (GLAPIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble* equation); - -#define glReferencePlaneSGIX GLEW_GET_FUN(__glewReferencePlaneSGIX) - -#define GLEW_SGIX_reference_plane GLEW_GET_VAR(__GLEW_SGIX_reference_plane) - -#endif /* GL_SGIX_reference_plane */ - -/* ---------------------------- GL_SGIX_resample --------------------------- */ - -#ifndef GL_SGIX_resample -#define GL_SGIX_resample 1 - -#define GL_PACK_RESAMPLE_SGIX 0x842E -#define GL_UNPACK_RESAMPLE_SGIX 0x842F -#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 -#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 -#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 - -#define GLEW_SGIX_resample GLEW_GET_VAR(__GLEW_SGIX_resample) - -#endif /* GL_SGIX_resample */ - -/* ----------------------------- GL_SGIX_shadow ---------------------------- */ - -#ifndef GL_SGIX_shadow -#define GL_SGIX_shadow 1 - -#define GL_TEXTURE_COMPARE_SGIX 0x819A -#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B -#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C -#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D - -#define GLEW_SGIX_shadow GLEW_GET_VAR(__GLEW_SGIX_shadow) - -#endif /* GL_SGIX_shadow */ - -/* ------------------------- GL_SGIX_shadow_ambient ------------------------ */ - -#ifndef GL_SGIX_shadow_ambient -#define GL_SGIX_shadow_ambient 1 - -#define GL_SHADOW_AMBIENT_SGIX 0x80BF - -#define GLEW_SGIX_shadow_ambient GLEW_GET_VAR(__GLEW_SGIX_shadow_ambient) - -#endif /* GL_SGIX_shadow_ambient */ - -/* ----------------------------- GL_SGIX_sprite ---------------------------- */ - -#ifndef GL_SGIX_sprite -#define GL_SGIX_sprite 1 - -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); -typedef void (GLAPIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, GLint* params); - -#define glSpriteParameterfSGIX GLEW_GET_FUN(__glewSpriteParameterfSGIX) -#define glSpriteParameterfvSGIX GLEW_GET_FUN(__glewSpriteParameterfvSGIX) -#define glSpriteParameteriSGIX GLEW_GET_FUN(__glewSpriteParameteriSGIX) -#define glSpriteParameterivSGIX GLEW_GET_FUN(__glewSpriteParameterivSGIX) - -#define GLEW_SGIX_sprite GLEW_GET_VAR(__GLEW_SGIX_sprite) - -#endif /* GL_SGIX_sprite */ - -/* ----------------------- GL_SGIX_tag_sample_buffer ----------------------- */ - -#ifndef GL_SGIX_tag_sample_buffer -#define GL_SGIX_tag_sample_buffer 1 - -typedef void (GLAPIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); - -#define glTagSampleBufferSGIX GLEW_GET_FUN(__glewTagSampleBufferSGIX) - -#define GLEW_SGIX_tag_sample_buffer GLEW_GET_VAR(__GLEW_SGIX_tag_sample_buffer) - -#endif /* GL_SGIX_tag_sample_buffer */ - -/* ------------------------ GL_SGIX_texture_add_env ------------------------ */ - -#ifndef GL_SGIX_texture_add_env -#define GL_SGIX_texture_add_env 1 - -#define GLEW_SGIX_texture_add_env GLEW_GET_VAR(__GLEW_SGIX_texture_add_env) - -#endif /* GL_SGIX_texture_add_env */ - -/* -------------------- GL_SGIX_texture_coordinate_clamp ------------------- */ - -#ifndef GL_SGIX_texture_coordinate_clamp -#define GL_SGIX_texture_coordinate_clamp 1 - -#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 -#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A -#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B - -#define GLEW_SGIX_texture_coordinate_clamp GLEW_GET_VAR(__GLEW_SGIX_texture_coordinate_clamp) - -#endif /* GL_SGIX_texture_coordinate_clamp */ - -/* ------------------------ GL_SGIX_texture_lod_bias ----------------------- */ - -#ifndef GL_SGIX_texture_lod_bias -#define GL_SGIX_texture_lod_bias 1 - -#define GLEW_SGIX_texture_lod_bias GLEW_GET_VAR(__GLEW_SGIX_texture_lod_bias) - -#endif /* GL_SGIX_texture_lod_bias */ - -/* ---------------------- GL_SGIX_texture_multi_buffer --------------------- */ - -#ifndef GL_SGIX_texture_multi_buffer -#define GL_SGIX_texture_multi_buffer 1 - -#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E - -#define GLEW_SGIX_texture_multi_buffer GLEW_GET_VAR(__GLEW_SGIX_texture_multi_buffer) - -#endif /* GL_SGIX_texture_multi_buffer */ - -/* ------------------------- GL_SGIX_texture_range ------------------------- */ - -#ifndef GL_SGIX_texture_range -#define GL_SGIX_texture_range 1 - -#define GL_RGB_SIGNED_SGIX 0x85E0 -#define GL_RGBA_SIGNED_SGIX 0x85E1 -#define GL_ALPHA_SIGNED_SGIX 0x85E2 -#define GL_LUMINANCE_SIGNED_SGIX 0x85E3 -#define GL_INTENSITY_SIGNED_SGIX 0x85E4 -#define GL_LUMINANCE_ALPHA_SIGNED_SGIX 0x85E5 -#define GL_RGB16_SIGNED_SGIX 0x85E6 -#define GL_RGBA16_SIGNED_SGIX 0x85E7 -#define GL_ALPHA16_SIGNED_SGIX 0x85E8 -#define GL_LUMINANCE16_SIGNED_SGIX 0x85E9 -#define GL_INTENSITY16_SIGNED_SGIX 0x85EA -#define GL_LUMINANCE16_ALPHA16_SIGNED_SGIX 0x85EB -#define GL_RGB_EXTENDED_RANGE_SGIX 0x85EC -#define GL_RGBA_EXTENDED_RANGE_SGIX 0x85ED -#define GL_ALPHA_EXTENDED_RANGE_SGIX 0x85EE -#define GL_LUMINANCE_EXTENDED_RANGE_SGIX 0x85EF -#define GL_INTENSITY_EXTENDED_RANGE_SGIX 0x85F0 -#define GL_LUMINANCE_ALPHA_EXTENDED_RANGE_SGIX 0x85F1 -#define GL_RGB16_EXTENDED_RANGE_SGIX 0x85F2 -#define GL_RGBA16_EXTENDED_RANGE_SGIX 0x85F3 -#define GL_ALPHA16_EXTENDED_RANGE_SGIX 0x85F4 -#define GL_LUMINANCE16_EXTENDED_RANGE_SGIX 0x85F5 -#define GL_INTENSITY16_EXTENDED_RANGE_SGIX 0x85F6 -#define GL_LUMINANCE16_ALPHA16_EXTENDED_RANGE_SGIX 0x85F7 -#define GL_MIN_LUMINANCE_SGIS 0x85F8 -#define GL_MAX_LUMINANCE_SGIS 0x85F9 -#define GL_MIN_INTENSITY_SGIS 0x85FA -#define GL_MAX_INTENSITY_SGIS 0x85FB - -#define GLEW_SGIX_texture_range GLEW_GET_VAR(__GLEW_SGIX_texture_range) - -#endif /* GL_SGIX_texture_range */ - -/* ----------------------- GL_SGIX_texture_scale_bias ---------------------- */ - -#ifndef GL_SGIX_texture_scale_bias -#define GL_SGIX_texture_scale_bias 1 - -#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 -#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A -#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B -#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C - -#define GLEW_SGIX_texture_scale_bias GLEW_GET_VAR(__GLEW_SGIX_texture_scale_bias) - -#endif /* GL_SGIX_texture_scale_bias */ - -/* ------------------------- GL_SGIX_vertex_preclip ------------------------ */ - -#ifndef GL_SGIX_vertex_preclip -#define GL_SGIX_vertex_preclip 1 - -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF - -#define GLEW_SGIX_vertex_preclip GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip) - -#endif /* GL_SGIX_vertex_preclip */ - -/* ---------------------- GL_SGIX_vertex_preclip_hint ---------------------- */ - -#ifndef GL_SGIX_vertex_preclip_hint -#define GL_SGIX_vertex_preclip_hint 1 - -#define GL_VERTEX_PRECLIP_SGIX 0x83EE -#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF - -#define GLEW_SGIX_vertex_preclip_hint GLEW_GET_VAR(__GLEW_SGIX_vertex_preclip_hint) - -#endif /* GL_SGIX_vertex_preclip_hint */ - -/* ----------------------------- GL_SGIX_ycrcb ----------------------------- */ - -#ifndef GL_SGIX_ycrcb -#define GL_SGIX_ycrcb 1 - -#define GLEW_SGIX_ycrcb GLEW_GET_VAR(__GLEW_SGIX_ycrcb) - -#endif /* GL_SGIX_ycrcb */ - -/* -------------------------- GL_SGI_color_matrix -------------------------- */ - -#ifndef GL_SGI_color_matrix -#define GL_SGI_color_matrix 1 - -#define GL_COLOR_MATRIX_SGI 0x80B1 -#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 -#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 -#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 -#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 -#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 -#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 -#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 -#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 -#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA -#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB - -#define GLEW_SGI_color_matrix GLEW_GET_VAR(__GLEW_SGI_color_matrix) - -#endif /* GL_SGI_color_matrix */ - -/* --------------------------- GL_SGI_color_table -------------------------- */ - -#ifndef GL_SGI_color_table -#define GL_SGI_color_table 1 - -#define GL_COLOR_TABLE_SGI 0x80D0 -#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 -#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 -#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 -#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 -#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 -#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 -#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 -#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 -#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 -#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA -#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB -#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC -#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD -#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE -#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF - -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat* params); -typedef void (GLAPIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint* params); -typedef void (GLAPIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table); -typedef void (GLAPIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat* params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint* params); -typedef void (GLAPIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table); - -#define glColorTableParameterfvSGI GLEW_GET_FUN(__glewColorTableParameterfvSGI) -#define glColorTableParameterivSGI GLEW_GET_FUN(__glewColorTableParameterivSGI) -#define glColorTableSGI GLEW_GET_FUN(__glewColorTableSGI) -#define glCopyColorTableSGI GLEW_GET_FUN(__glewCopyColorTableSGI) -#define glGetColorTableParameterfvSGI GLEW_GET_FUN(__glewGetColorTableParameterfvSGI) -#define glGetColorTableParameterivSGI GLEW_GET_FUN(__glewGetColorTableParameterivSGI) -#define glGetColorTableSGI GLEW_GET_FUN(__glewGetColorTableSGI) - -#define GLEW_SGI_color_table GLEW_GET_VAR(__GLEW_SGI_color_table) - -#endif /* GL_SGI_color_table */ - -/* ----------------------- GL_SGI_texture_color_table ---------------------- */ - -#ifndef GL_SGI_texture_color_table -#define GL_SGI_texture_color_table 1 - -#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC -#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD - -#define GLEW_SGI_texture_color_table GLEW_GET_VAR(__GLEW_SGI_texture_color_table) - -#endif /* GL_SGI_texture_color_table */ - -/* ------------------------- GL_SUNX_constant_data ------------------------- */ - -#ifndef GL_SUNX_constant_data -#define GL_SUNX_constant_data 1 - -#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 -#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 - -typedef void (GLAPIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void); - -#define glFinishTextureSUNX GLEW_GET_FUN(__glewFinishTextureSUNX) - -#define GLEW_SUNX_constant_data GLEW_GET_VAR(__GLEW_SUNX_constant_data) - -#endif /* GL_SUNX_constant_data */ - -/* -------------------- GL_SUN_convolution_border_modes -------------------- */ - -#ifndef GL_SUN_convolution_border_modes -#define GL_SUN_convolution_border_modes 1 - -#define GL_WRAP_BORDER_SUN 0x81D4 - -#define GLEW_SUN_convolution_border_modes GLEW_GET_VAR(__GLEW_SUN_convolution_border_modes) - -#endif /* GL_SUN_convolution_border_modes */ - -/* -------------------------- GL_SUN_global_alpha -------------------------- */ - -#ifndef GL_SUN_global_alpha -#define GL_SUN_global_alpha 1 - -#define GL_GLOBAL_ALPHA_SUN 0x81D9 -#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA - -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); -typedef void (GLAPIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); - -#define glGlobalAlphaFactorbSUN GLEW_GET_FUN(__glewGlobalAlphaFactorbSUN) -#define glGlobalAlphaFactordSUN GLEW_GET_FUN(__glewGlobalAlphaFactordSUN) -#define glGlobalAlphaFactorfSUN GLEW_GET_FUN(__glewGlobalAlphaFactorfSUN) -#define glGlobalAlphaFactoriSUN GLEW_GET_FUN(__glewGlobalAlphaFactoriSUN) -#define glGlobalAlphaFactorsSUN GLEW_GET_FUN(__glewGlobalAlphaFactorsSUN) -#define glGlobalAlphaFactorubSUN GLEW_GET_FUN(__glewGlobalAlphaFactorubSUN) -#define glGlobalAlphaFactoruiSUN GLEW_GET_FUN(__glewGlobalAlphaFactoruiSUN) -#define glGlobalAlphaFactorusSUN GLEW_GET_FUN(__glewGlobalAlphaFactorusSUN) - -#define GLEW_SUN_global_alpha GLEW_GET_VAR(__GLEW_SUN_global_alpha) - -#endif /* GL_SUN_global_alpha */ - -/* --------------------------- GL_SUN_mesh_array --------------------------- */ - -#ifndef GL_SUN_mesh_array -#define GL_SUN_mesh_array 1 - -#define GL_QUAD_MESH_SUN 0x8614 -#define GL_TRIANGLE_MESH_SUN 0x8615 - -#define GLEW_SUN_mesh_array GLEW_GET_VAR(__GLEW_SUN_mesh_array) - -#endif /* GL_SUN_mesh_array */ - -/* ------------------------ GL_SUN_read_video_pixels ----------------------- */ - -#ifndef GL_SUN_read_video_pixels -#define GL_SUN_read_video_pixels 1 - -typedef void (GLAPIENTRY * PFNGLREADVIDEOPIXELSSUNPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels); - -#define glReadVideoPixelsSUN GLEW_GET_FUN(__glewReadVideoPixelsSUN) - -#define GLEW_SUN_read_video_pixels GLEW_GET_VAR(__GLEW_SUN_read_video_pixels) - -#endif /* GL_SUN_read_video_pixels */ - -/* --------------------------- GL_SUN_slice_accum -------------------------- */ - -#ifndef GL_SUN_slice_accum -#define GL_SUN_slice_accum 1 - -#define GL_SLICE_ACCUM_SUN 0x85CC - -#define GLEW_SUN_slice_accum GLEW_GET_VAR(__GLEW_SUN_slice_accum) - -#endif /* GL_SUN_slice_accum */ - -/* -------------------------- GL_SUN_triangle_list ------------------------- */ - -#ifndef GL_SUN_triangle_list -#define GL_SUN_triangle_list 1 - -#define GL_RESTART_SUN 0x01 -#define GL_REPLACE_MIDDLE_SUN 0x02 -#define GL_REPLACE_OLDEST_SUN 0x03 -#define GL_TRIANGLE_LIST_SUN 0x81D7 -#define GL_REPLACEMENT_CODE_SUN 0x81D8 -#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 -#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 -#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 -#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 -#define GL_R1UI_V3F_SUN 0x85C4 -#define GL_R1UI_C4UB_V3F_SUN 0x85C5 -#define GL_R1UI_C3F_V3F_SUN 0x85C6 -#define GL_R1UI_N3F_V3F_SUN 0x85C7 -#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 -#define GL_R1UI_T2F_V3F_SUN 0x85C9 -#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA -#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB - -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid *pointer); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte* code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint* code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort* code); - -#define glReplacementCodePointerSUN GLEW_GET_FUN(__glewReplacementCodePointerSUN) -#define glReplacementCodeubSUN GLEW_GET_FUN(__glewReplacementCodeubSUN) -#define glReplacementCodeubvSUN GLEW_GET_FUN(__glewReplacementCodeubvSUN) -#define glReplacementCodeuiSUN GLEW_GET_FUN(__glewReplacementCodeuiSUN) -#define glReplacementCodeuivSUN GLEW_GET_FUN(__glewReplacementCodeuivSUN) -#define glReplacementCodeusSUN GLEW_GET_FUN(__glewReplacementCodeusSUN) -#define glReplacementCodeusvSUN GLEW_GET_FUN(__glewReplacementCodeusvSUN) - -#define GLEW_SUN_triangle_list GLEW_GET_VAR(__GLEW_SUN_triangle_list) - -#endif /* GL_SUN_triangle_list */ - -/* ----------------------------- GL_SUN_vertex ----------------------------- */ - -#ifndef GL_SUN_vertex -#define GL_SUN_vertex 1 - -typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte* c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte* c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint* rc, const GLubyte *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *tc, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint* rc, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat* tc, const GLubyte *c, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); -typedef void (GLAPIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat* tc, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -typedef void (GLAPIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat* tc, const GLfloat *v); - -#define glColor3fVertex3fSUN GLEW_GET_FUN(__glewColor3fVertex3fSUN) -#define glColor3fVertex3fvSUN GLEW_GET_FUN(__glewColor3fVertex3fvSUN) -#define glColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fSUN) -#define glColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewColor4fNormal3fVertex3fvSUN) -#define glColor4ubVertex2fSUN GLEW_GET_FUN(__glewColor4ubVertex2fSUN) -#define glColor4ubVertex2fvSUN GLEW_GET_FUN(__glewColor4ubVertex2fvSUN) -#define glColor4ubVertex3fSUN GLEW_GET_FUN(__glewColor4ubVertex3fSUN) -#define glColor4ubVertex3fvSUN GLEW_GET_FUN(__glewColor4ubVertex3fvSUN) -#define glNormal3fVertex3fSUN GLEW_GET_FUN(__glewNormal3fVertex3fSUN) -#define glNormal3fVertex3fvSUN GLEW_GET_FUN(__glewNormal3fVertex3fvSUN) -#define glReplacementCodeuiColor3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fSUN) -#define glReplacementCodeuiColor3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor3fVertex3fvSUN) -#define glReplacementCodeuiColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fSUN) -#define glReplacementCodeuiColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4fNormal3fVertex3fvSUN) -#define glReplacementCodeuiColor4ubVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fSUN) -#define glReplacementCodeuiColor4ubVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiColor4ubVertex3fvSUN) -#define glReplacementCodeuiNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fSUN) -#define glReplacementCodeuiNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) -#define glReplacementCodeuiTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fSUN) -#define glReplacementCodeuiTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiTexCoord2fVertex3fvSUN) -#define glReplacementCodeuiVertex3fSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fSUN) -#define glReplacementCodeuiVertex3fvSUN GLEW_GET_FUN(__glewReplacementCodeuiVertex3fvSUN) -#define glTexCoord2fColor3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fSUN) -#define glTexCoord2fColor3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor3fVertex3fvSUN) -#define glTexCoord2fColor4fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fSUN) -#define glTexCoord2fColor4fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4fNormal3fVertex3fvSUN) -#define glTexCoord2fColor4ubVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fSUN) -#define glTexCoord2fColor4ubVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fColor4ubVertex3fvSUN) -#define glTexCoord2fNormal3fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fSUN) -#define glTexCoord2fNormal3fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fNormal3fVertex3fvSUN) -#define glTexCoord2fVertex3fSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fSUN) -#define glTexCoord2fVertex3fvSUN GLEW_GET_FUN(__glewTexCoord2fVertex3fvSUN) -#define glTexCoord4fColor4fNormal3fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fSUN) -#define glTexCoord4fColor4fNormal3fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fColor4fNormal3fVertex4fvSUN) -#define glTexCoord4fVertex4fSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fSUN) -#define glTexCoord4fVertex4fvSUN GLEW_GET_FUN(__glewTexCoord4fVertex4fvSUN) - -#define GLEW_SUN_vertex GLEW_GET_VAR(__GLEW_SUN_vertex) - -#endif /* GL_SUN_vertex */ - -/* -------------------------- GL_WIN_phong_shading ------------------------- */ - -#ifndef GL_WIN_phong_shading -#define GL_WIN_phong_shading 1 - -#define GL_PHONG_WIN 0x80EA -#define GL_PHONG_HINT_WIN 0x80EB - -#define GLEW_WIN_phong_shading GLEW_GET_VAR(__GLEW_WIN_phong_shading) - -#endif /* GL_WIN_phong_shading */ - -/* -------------------------- GL_WIN_specular_fog -------------------------- */ - -#ifndef GL_WIN_specular_fog -#define GL_WIN_specular_fog 1 - -#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC - -#define GLEW_WIN_specular_fog GLEW_GET_VAR(__GLEW_WIN_specular_fog) - -#endif /* GL_WIN_specular_fog */ - -/* ---------------------------- GL_WIN_swap_hint --------------------------- */ - -#ifndef GL_WIN_swap_hint -#define GL_WIN_swap_hint 1 - -typedef void (GLAPIENTRY * PFNGLADDSWAPHINTRECTWINPROC) (GLint x, GLint y, GLsizei width, GLsizei height); - -#define glAddSwapHintRectWIN GLEW_GET_FUN(__glewAddSwapHintRectWIN) - -#define GLEW_WIN_swap_hint GLEW_GET_VAR(__GLEW_WIN_swap_hint) - -#endif /* GL_WIN_swap_hint */ - -/* ------------------------------------------------------------------------- */ - -#if defined(GLEW_MX) && defined(_WIN32) -#define GLEW_FUN_EXPORT -#else -#define GLEW_FUN_EXPORT GLEWAPI -#endif /* GLEW_MX */ - -#if defined(GLEW_MX) -#define GLEW_VAR_EXPORT -#else -#define GLEW_VAR_EXPORT GLEWAPI -#endif /* GLEW_MX */ - -#if defined(GLEW_MX) && defined(_WIN32) -struct GLEWContextStruct -{ -#endif /* GLEW_MX */ - -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements; -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DPROC __glewTexImage3D; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D; - -GLEW_FUN_EXPORT PFNGLACTIVETEXTUREPROC __glewActiveTexture; -GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage; -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd; -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv; -GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage; - -GLEW_FUN_EXPORT PFNGLBLENDCOLORPROC __glewBlendColor; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONPROC __glewBlendEquation; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate; -GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer; -GLEW_FUN_EXPORT PFNGLFOGCOORDDPROC __glewFogCoordd; -GLEW_FUN_EXPORT PFNGLFOGCOORDDVPROC __glewFogCoorddv; -GLEW_FUN_EXPORT PFNGLFOGCOORDFPROC __glewFogCoordf; -GLEW_FUN_EXPORT PFNGLFOGCOORDFVPROC __glewFogCoordfv; -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFPROC __glewPointParameterf; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIPROC __glewPointParameteri; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DPROC __glewWindowPos2d; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FPROC __glewWindowPos2f; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IPROC __glewWindowPos2i; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SPROC __glewWindowPos2s; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DPROC __glewWindowPos3d; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FPROC __glewWindowPos3f; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IPROC __glewWindowPos3i; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SPROC __glewWindowPos3s; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYPROC __glewBeginQuery; -GLEW_FUN_EXPORT PFNGLBINDBUFFERPROC __glewBindBuffer; -GLEW_FUN_EXPORT PFNGLBUFFERDATAPROC __glewBufferData; -GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAPROC __glewBufferSubData; -GLEW_FUN_EXPORT PFNGLDELETEBUFFERSPROC __glewDeleteBuffers; -GLEW_FUN_EXPORT PFNGLDELETEQUERIESPROC __glewDeleteQueries; -GLEW_FUN_EXPORT PFNGLENDQUERYPROC __glewEndQuery; -GLEW_FUN_EXPORT PFNGLGENBUFFERSPROC __glewGenBuffers; -GLEW_FUN_EXPORT PFNGLGENQUERIESPROC __glewGenQueries; -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv; -GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv; -GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv; -GLEW_FUN_EXPORT PFNGLGETQUERYIVPROC __glewGetQueryiv; -GLEW_FUN_EXPORT PFNGLISBUFFERPROC __glewIsBuffer; -GLEW_FUN_EXPORT PFNGLISQUERYPROC __glewIsQuery; -GLEW_FUN_EXPORT PFNGLMAPBUFFERPROC __glewMapBuffer; -GLEW_FUN_EXPORT PFNGLUNMAPBUFFERPROC __glewUnmapBuffer; - -GLEW_FUN_EXPORT PFNGLATTACHSHADERPROC __glewAttachShader; -GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate; -GLEW_FUN_EXPORT PFNGLCOMPILESHADERPROC __glewCompileShader; -GLEW_FUN_EXPORT PFNGLCREATEPROGRAMPROC __glewCreateProgram; -GLEW_FUN_EXPORT PFNGLCREATESHADERPROC __glewCreateShader; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPROC __glewDeleteProgram; -GLEW_FUN_EXPORT PFNGLDELETESHADERPROC __glewDeleteShader; -GLEW_FUN_EXPORT PFNGLDETACHSHADERPROC __glewDetachShader; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray; -GLEW_FUN_EXPORT PFNGLDRAWBUFFERSPROC __glewDrawBuffers; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray; -GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform; -GLEW_FUN_EXPORT PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders; -GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation; -GLEW_FUN_EXPORT PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog; -GLEW_FUN_EXPORT PFNGLGETPROGRAMIVPROC __glewGetProgramiv; -GLEW_FUN_EXPORT PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog; -GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEPROC __glewGetShaderSource; -GLEW_FUN_EXPORT PFNGLGETSHADERIVPROC __glewGetShaderiv; -GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation; -GLEW_FUN_EXPORT PFNGLGETUNIFORMFVPROC __glewGetUniformfv; -GLEW_FUN_EXPORT PFNGLGETUNIFORMIVPROC __glewGetUniformiv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv; -GLEW_FUN_EXPORT PFNGLISPROGRAMPROC __glewIsProgram; -GLEW_FUN_EXPORT PFNGLISSHADERPROC __glewIsShader; -GLEW_FUN_EXPORT PFNGLLINKPROGRAMPROC __glewLinkProgram; -GLEW_FUN_EXPORT PFNGLSHADERSOURCEPROC __glewShaderSource; -GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate; -GLEW_FUN_EXPORT PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate; -GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate; -GLEW_FUN_EXPORT PFNGLUNIFORM1FPROC __glewUniform1f; -GLEW_FUN_EXPORT PFNGLUNIFORM1FVPROC __glewUniform1fv; -GLEW_FUN_EXPORT PFNGLUNIFORM1IPROC __glewUniform1i; -GLEW_FUN_EXPORT PFNGLUNIFORM1IVPROC __glewUniform1iv; -GLEW_FUN_EXPORT PFNGLUNIFORM2FPROC __glewUniform2f; -GLEW_FUN_EXPORT PFNGLUNIFORM2FVPROC __glewUniform2fv; -GLEW_FUN_EXPORT PFNGLUNIFORM2IPROC __glewUniform2i; -GLEW_FUN_EXPORT PFNGLUNIFORM2IVPROC __glewUniform2iv; -GLEW_FUN_EXPORT PFNGLUNIFORM3FPROC __glewUniform3f; -GLEW_FUN_EXPORT PFNGLUNIFORM3FVPROC __glewUniform3fv; -GLEW_FUN_EXPORT PFNGLUNIFORM3IPROC __glewUniform3i; -GLEW_FUN_EXPORT PFNGLUNIFORM3IVPROC __glewUniform3iv; -GLEW_FUN_EXPORT PFNGLUNIFORM4FPROC __glewUniform4f; -GLEW_FUN_EXPORT PFNGLUNIFORM4FVPROC __glewUniform4fv; -GLEW_FUN_EXPORT PFNGLUNIFORM4IPROC __glewUniform4i; -GLEW_FUN_EXPORT PFNGLUNIFORM4IVPROC __glewUniform4iv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv; -GLEW_FUN_EXPORT PFNGLUSEPROGRAMPROC __glewUseProgram; -GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPROC __glewValidateProgram; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer; - -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv; - -GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender; -GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback; -GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation; -GLEW_FUN_EXPORT PFNGLCLAMPCOLORPROC __glewClampColor; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERFIPROC __glewClearBufferfi; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERFVPROC __glewClearBufferfv; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERIVPROC __glewClearBufferiv; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv; -GLEW_FUN_EXPORT PFNGLCOLORMASKIPROC __glewColorMaski; -GLEW_FUN_EXPORT PFNGLDISABLEIPROC __glewDisablei; -GLEW_FUN_EXPORT PFNGLENABLEIPROC __glewEnablei; -GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender; -GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback; -GLEW_FUN_EXPORT PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v; -GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation; -GLEW_FUN_EXPORT PFNGLGETSTRINGIPROC __glewGetStringi; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv; -GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying; -GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv; -GLEW_FUN_EXPORT PFNGLISENABLEDIPROC __glewIsEnabledi; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIPROC __glewUniform1ui; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIVPROC __glewUniform1uiv; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIPROC __glewUniform2ui; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIVPROC __glewUniform2uiv; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIPROC __glewUniform3ui; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIVPROC __glewUniform3uiv; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIPROC __glewUniform4ui; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIVPROC __glewUniform4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDPROC __glewDrawArraysInstanced; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDPROC __glewDrawElementsInstanced; -GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXPROC __glewPrimitiveRestartIndex; -GLEW_FUN_EXPORT PFNGLTEXBUFFERPROC __glewTexBuffer; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREPROC __glewFramebufferTexture; -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERI64VPROC __glewGetBufferParameteri64v; -GLEW_FUN_EXPORT PFNGLGETINTEGER64I_VPROC __glewGetInteger64i_v; - -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORPROC __glewVertexAttribDivisor; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIPROC __glewBlendEquationSeparatei; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIPROC __glewBlendEquationi; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIPROC __glewBlendFuncSeparatei; -GLEW_FUN_EXPORT PFNGLBLENDFUNCIPROC __glewBlendFunci; -GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGPROC __glewMinSampleShading; - -GLEW_FUN_EXPORT PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX; - -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEENABLEAMDPROC __glewDebugMessageEnableAMD; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTAMDPROC __glewDebugMessageInsertAMD; -GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGAMDPROC __glewGetDebugMessageLogAMD; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONINDEXEDAMDPROC __glewBlendEquationIndexedAMD; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD; -GLEW_FUN_EXPORT PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD; - -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPARAMETERIAMDPROC __glewVertexAttribParameteriAMD; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD; - -GLEW_FUN_EXPORT PFNGLDELETENAMESAMDPROC __glewDeleteNamesAMD; -GLEW_FUN_EXPORT PFNGLGENNAMESAMDPROC __glewGenNamesAMD; -GLEW_FUN_EXPORT PFNGLISNAMEAMDPROC __glewIsNameAMD; - -GLEW_FUN_EXPORT PFNGLBEGINPERFMONITORAMDPROC __glewBeginPerfMonitorAMD; -GLEW_FUN_EXPORT PFNGLDELETEPERFMONITORSAMDPROC __glewDeletePerfMonitorsAMD; -GLEW_FUN_EXPORT PFNGLENDPERFMONITORAMDPROC __glewEndPerfMonitorAMD; -GLEW_FUN_EXPORT PFNGLGENPERFMONITORSAMDPROC __glewGenPerfMonitorsAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERDATAAMDPROC __glewGetPerfMonitorCounterDataAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERINFOAMDPROC __glewGetPerfMonitorCounterInfoAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC __glewGetPerfMonitorCounterStringAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORCOUNTERSAMDPROC __glewGetPerfMonitorCountersAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSTRINGAMDPROC __glewGetPerfMonitorGroupStringAMD; -GLEW_FUN_EXPORT PFNGLGETPERFMONITORGROUPSAMDPROC __glewGetPerfMonitorGroupsAMD; -GLEW_FUN_EXPORT PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD; - -GLEW_FUN_EXPORT PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD; - -GLEW_FUN_EXPORT PFNGLTEXSTORAGESPARSEAMDPROC __glewTexStorageSparseAMD; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGESPARSEAMDPROC __glewTextureStorageSparseAMD; - -GLEW_FUN_EXPORT PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD; - -GLEW_FUN_EXPORT PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD; -GLEW_FUN_EXPORT PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD; - -GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERANGLEPROC __glewBlitFramebufferANGLE; - -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC __glewRenderbufferStorageMultisampleANGLE; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDANGLEPROC __glewDrawArraysInstancedANGLE; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDANGLEPROC __glewDrawElementsInstancedANGLE; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORANGLEPROC __glewVertexAttribDivisorANGLE; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYANGLEPROC __glewBeginQueryANGLE; -GLEW_FUN_EXPORT PFNGLDELETEQUERIESANGLEPROC __glewDeleteQueriesANGLE; -GLEW_FUN_EXPORT PFNGLENDQUERYANGLEPROC __glewEndQueryANGLE; -GLEW_FUN_EXPORT PFNGLGENQUERIESANGLEPROC __glewGenQueriesANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VANGLEPROC __glewGetQueryObjecti64vANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVANGLEPROC __glewGetQueryObjectivANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VANGLEPROC __glewGetQueryObjectui64vANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVANGLEPROC __glewGetQueryObjectuivANGLE; -GLEW_FUN_EXPORT PFNGLGETQUERYIVANGLEPROC __glewGetQueryivANGLE; -GLEW_FUN_EXPORT PFNGLISQUERYANGLEPROC __glewIsQueryANGLE; -GLEW_FUN_EXPORT PFNGLQUERYCOUNTERANGLEPROC __glewQueryCounterANGLE; - -GLEW_FUN_EXPORT PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC __glewGetTranslatedShaderSourceANGLE; - -GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE; -GLEW_FUN_EXPORT PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE; -GLEW_FUN_EXPORT PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE; - -GLEW_FUN_EXPORT PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE; -GLEW_FUN_EXPORT PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE; -GLEW_FUN_EXPORT PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE; -GLEW_FUN_EXPORT PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE; -GLEW_FUN_EXPORT PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE; -GLEW_FUN_EXPORT PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE; -GLEW_FUN_EXPORT PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE; -GLEW_FUN_EXPORT PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE; - -GLEW_FUN_EXPORT PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE; -GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE; - -GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE; -GLEW_FUN_EXPORT PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE; -GLEW_FUN_EXPORT PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE; - -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE; -GLEW_FUN_EXPORT PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE; - -GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE; -GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE; -GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE; -GLEW_FUN_EXPORT PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE; - -GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE; - -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBAPPLEPROC __glewDisableVertexAttribAPPLE; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBAPPLEPROC __glewEnableVertexAttribAPPLE; -GLEW_FUN_EXPORT PFNGLISVERTEXATTRIBENABLEDAPPLEPROC __glewIsVertexAttribEnabledAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1DAPPLEPROC __glewMapVertexAttrib1dAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB1FAPPLEPROC __glewMapVertexAttrib1fAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2DAPPLEPROC __glewMapVertexAttrib2dAPPLE; -GLEW_FUN_EXPORT PFNGLMAPVERTEXATTRIB2FAPPLEPROC __glewMapVertexAttrib2fAPPLE; - -GLEW_FUN_EXPORT PFNGLCLEARDEPTHFPROC __glewClearDepthf; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEFPROC __glewDepthRangef; -GLEW_FUN_EXPORT PFNGLGETSHADERPRECISIONFORMATPROC __glewGetShaderPrecisionFormat; -GLEW_FUN_EXPORT PFNGLRELEASESHADERCOMPILERPROC __glewReleaseShaderCompiler; -GLEW_FUN_EXPORT PFNGLSHADERBINARYPROC __glewShaderBinary; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance; - -GLEW_FUN_EXPORT PFNGLGETIMAGEHANDLEARBPROC __glewGetImageHandleARB; -GLEW_FUN_EXPORT PFNGLGETTEXTUREHANDLEARBPROC __glewGetTextureHandleARB; -GLEW_FUN_EXPORT PFNGLGETTEXTURESAMPLERHANDLEARBPROC __glewGetTextureSamplerHandleARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLUI64VARBPROC __glewGetVertexAttribLui64vARB; -GLEW_FUN_EXPORT PFNGLISIMAGEHANDLERESIDENTARBPROC __glewIsImageHandleResidentARB; -GLEW_FUN_EXPORT PFNGLISTEXTUREHANDLERESIDENTARBPROC __glewIsTextureHandleResidentARB; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC __glewMakeImageHandleNonResidentARB; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLERESIDENTARBPROC __glewMakeImageHandleResidentARB; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC __glewMakeTextureHandleNonResidentARB; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLERESIDENTARBPROC __glewMakeTextureHandleResidentARB; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC __glewProgramUniformHandleui64ARB; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC __glewProgramUniformHandleui64vARB; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64ARBPROC __glewUniformHandleui64ARB; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VARBPROC __glewUniformHandleui64vARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64ARBPROC __glewVertexAttribL1ui64ARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64VARBPROC __glewVertexAttribL1ui64vARB; - -GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed; -GLEW_FUN_EXPORT PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex; - -GLEW_FUN_EXPORT PFNGLBUFFERSTORAGEPROC __glewBufferStorage; -GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT; - -GLEW_FUN_EXPORT PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB; - -GLEW_FUN_EXPORT PFNGLCLEARBUFFERDATAPROC __glewClearBufferData; -GLEW_FUN_EXPORT PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData; -GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT; -GLEW_FUN_EXPORT PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT; - -GLEW_FUN_EXPORT PFNGLCLEARTEXIMAGEPROC __glewClearTexImage; -GLEW_FUN_EXPORT PFNGLCLEARTEXSUBIMAGEPROC __glewClearTexSubImage; - -GLEW_FUN_EXPORT PFNGLCLAMPCOLORARBPROC __glewClampColorARB; - -GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute; -GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect; - -GLEW_FUN_EXPORT PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC __glewDispatchComputeGroupSizeARB; - -GLEW_FUN_EXPORT PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData; - -GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData; - -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKARBPROC __glewDebugMessageCallbackARB; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECONTROLARBPROC __glewDebugMessageControlARB; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTARBPROC __glewDebugMessageInsertARB; -GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGARBPROC __glewGetDebugMessageLogARB; - -GLEW_FUN_EXPORT PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEIARBPROC __glewBlendEquationSeparateiARB; -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONIARBPROC __glewBlendEquationiARB; -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEIARBPROC __glewBlendFuncSeparateiARB; -GLEW_FUN_EXPORT PFNGLBLENDFUNCIARBPROC __glewBlendFunciARB; - -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSBASEVERTEXPROC __glewDrawElementsBaseVertex; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC __glewDrawElementsInstancedBaseVertex; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC __glewDrawRangeElementsBaseVertex; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC __glewMultiDrawElementsBaseVertex; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINDIRECTPROC __glewDrawArraysIndirect; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINDIRECTPROC __glewDrawElementsIndirect; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERPARAMETERIPROC __glewFramebufferParameteri; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVPROC __glewGetFramebufferParameteriv; -GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC __glewGetNamedFramebufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC __glewNamedFramebufferParameteriEXT; - -GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer; -GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer; -GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer; -GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus; -GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers; -GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERPROC __glewFramebufferTextureLayer; -GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers; -GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers; -GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv; -GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv; -GLEW_FUN_EXPORT PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer; -GLEW_FUN_EXPORT PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer; -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage; -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB; - -GLEW_FUN_EXPORT PFNGLGETPROGRAMBINARYPROC __glewGetProgramBinary; -GLEW_FUN_EXPORT PFNGLPROGRAMBINARYPROC __glewProgramBinary; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri; - -GLEW_FUN_EXPORT PFNGLGETUNIFORMDVPROC __glewGetUniformdv; -GLEW_FUN_EXPORT PFNGLUNIFORM1DPROC __glewUniform1d; -GLEW_FUN_EXPORT PFNGLUNIFORM1DVPROC __glewUniform1dv; -GLEW_FUN_EXPORT PFNGLUNIFORM2DPROC __glewUniform2d; -GLEW_FUN_EXPORT PFNGLUNIFORM2DVPROC __glewUniform2dv; -GLEW_FUN_EXPORT PFNGLUNIFORM3DPROC __glewUniform3d; -GLEW_FUN_EXPORT PFNGLUNIFORM3DVPROC __glewUniform3dv; -GLEW_FUN_EXPORT PFNGLUNIFORM4DPROC __glewUniform4d; -GLEW_FUN_EXPORT PFNGLUNIFORM4DVPROC __glewUniform4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2DVPROC __glewUniformMatrix2dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X3DVPROC __glewUniformMatrix2x3dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2X4DVPROC __glewUniformMatrix2x4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3DVPROC __glewUniformMatrix3dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X2DVPROC __glewUniformMatrix3x2dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3X4DVPROC __glewUniformMatrix3x4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4DVPROC __glewUniformMatrix4dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X2DVPROC __glewUniformMatrix4x2dv; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4X3DVPROC __glewUniformMatrix4x3dv; - -GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEPROC __glewColorSubTable; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPROC __glewColorTable; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv; -GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable; -GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPROC __glewGetColorTable; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPROC __glewGetHistogram; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv; -GLEW_FUN_EXPORT PFNGLGETMINMAXPROC __glewGetMinmax; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv; -GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter; -GLEW_FUN_EXPORT PFNGLHISTOGRAMPROC __glewHistogram; -GLEW_FUN_EXPORT PFNGLMINMAXPROC __glewMinmax; -GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMPROC __glewResetHistogram; -GLEW_FUN_EXPORT PFNGLRESETMINMAXPROC __glewResetMinmax; -GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC __glewMultiDrawArraysIndirectCountARB; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC __glewMultiDrawElementsIndirectCountARB; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB; - -GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATIVPROC __glewGetInternalformativ; - -GLEW_FUN_EXPORT PFNGLGETINTERNALFORMATI64VPROC __glewGetInternalformati64v; - -GLEW_FUN_EXPORT PFNGLINVALIDATEBUFFERDATAPROC __glewInvalidateBufferData; -GLEW_FUN_EXPORT PFNGLINVALIDATEBUFFERSUBDATAPROC __glewInvalidateBufferSubData; -GLEW_FUN_EXPORT PFNGLINVALIDATEFRAMEBUFFERPROC __glewInvalidateFramebuffer; -GLEW_FUN_EXPORT PFNGLINVALIDATESUBFRAMEBUFFERPROC __glewInvalidateSubFramebuffer; -GLEW_FUN_EXPORT PFNGLINVALIDATETEXIMAGEPROC __glewInvalidateTexImage; -GLEW_FUN_EXPORT PFNGLINVALIDATETEXSUBIMAGEPROC __glewInvalidateTexSubImage; - -GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange; -GLEW_FUN_EXPORT PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange; - -GLEW_FUN_EXPORT PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB; -GLEW_FUN_EXPORT PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB; - -GLEW_FUN_EXPORT PFNGLBINDBUFFERSBASEPROC __glewBindBuffersBase; -GLEW_FUN_EXPORT PFNGLBINDBUFFERSRANGEPROC __glewBindBuffersRange; -GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTURESPROC __glewBindImageTextures; -GLEW_FUN_EXPORT PFNGLBINDSAMPLERSPROC __glewBindSamplers; -GLEW_FUN_EXPORT PFNGLBINDTEXTURESPROC __glewBindTextures; -GLEW_FUN_EXPORT PFNGLBINDVERTEXBUFFERSPROC __glewBindVertexBuffers; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect; - -GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB; - -GLEW_FUN_EXPORT PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB; -GLEW_FUN_EXPORT PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYARBPROC __glewBeginQueryARB; -GLEW_FUN_EXPORT PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB; -GLEW_FUN_EXPORT PFNGLENDQUERYARBPROC __glewEndQueryARB; -GLEW_FUN_EXPORT PFNGLGENQUERIESARBPROC __glewGenQueriesARB; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB; -GLEW_FUN_EXPORT PFNGLGETQUERYIVARBPROC __glewGetQueryivARB; -GLEW_FUN_EXPORT PFNGLISQUERYARBPROC __glewIsQueryARB; - -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB; - -GLEW_FUN_EXPORT PFNGLGETPROGRAMINTERFACEIVPROC __glewGetProgramInterfaceiv; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCEINDEXPROC __glewGetProgramResourceIndex; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONPROC __glewGetProgramResourceLocation; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC __glewGetProgramResourceLocationIndex; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCENAMEPROC __glewGetProgramResourceName; -GLEW_FUN_EXPORT PFNGLGETPROGRAMRESOURCEIVPROC __glewGetProgramResourceiv; - -GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXPROC __glewProvokingVertex; - -GLEW_FUN_EXPORT PFNGLGETGRAPHICSRESETSTATUSARBPROC __glewGetGraphicsResetStatusARB; -GLEW_FUN_EXPORT PFNGLGETNCOLORTABLEARBPROC __glewGetnColorTableARB; -GLEW_FUN_EXPORT PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC __glewGetnCompressedTexImageARB; -GLEW_FUN_EXPORT PFNGLGETNCONVOLUTIONFILTERARBPROC __glewGetnConvolutionFilterARB; -GLEW_FUN_EXPORT PFNGLGETNHISTOGRAMARBPROC __glewGetnHistogramARB; -GLEW_FUN_EXPORT PFNGLGETNMAPDVARBPROC __glewGetnMapdvARB; -GLEW_FUN_EXPORT PFNGLGETNMAPFVARBPROC __glewGetnMapfvARB; -GLEW_FUN_EXPORT PFNGLGETNMAPIVARBPROC __glewGetnMapivARB; -GLEW_FUN_EXPORT PFNGLGETNMINMAXARBPROC __glewGetnMinmaxARB; -GLEW_FUN_EXPORT PFNGLGETNPIXELMAPFVARBPROC __glewGetnPixelMapfvARB; -GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUIVARBPROC __glewGetnPixelMapuivARB; -GLEW_FUN_EXPORT PFNGLGETNPIXELMAPUSVARBPROC __glewGetnPixelMapusvARB; -GLEW_FUN_EXPORT PFNGLGETNPOLYGONSTIPPLEARBPROC __glewGetnPolygonStippleARB; -GLEW_FUN_EXPORT PFNGLGETNSEPARABLEFILTERARBPROC __glewGetnSeparableFilterARB; -GLEW_FUN_EXPORT PFNGLGETNTEXIMAGEARBPROC __glewGetnTexImageARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMDVARBPROC __glewGetnUniformdvARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMFVARBPROC __glewGetnUniformfvARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMIVARBPROC __glewGetnUniformivARB; -GLEW_FUN_EXPORT PFNGLGETNUNIFORMUIVARBPROC __glewGetnUniformuivARB; -GLEW_FUN_EXPORT PFNGLREADNPIXELSARBPROC __glewReadnPixelsARB; - -GLEW_FUN_EXPORT PFNGLMINSAMPLESHADINGARBPROC __glewMinSampleShadingARB; - -GLEW_FUN_EXPORT PFNGLBINDSAMPLERPROC __glewBindSampler; -GLEW_FUN_EXPORT PFNGLDELETESAMPLERSPROC __glewDeleteSamplers; -GLEW_FUN_EXPORT PFNGLGENSAMPLERSPROC __glewGenSamplers; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIIVPROC __glewGetSamplerParameterIiv; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIUIVPROC __glewGetSamplerParameterIuiv; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERFVPROC __glewGetSamplerParameterfv; -GLEW_FUN_EXPORT PFNGLGETSAMPLERPARAMETERIVPROC __glewGetSamplerParameteriv; -GLEW_FUN_EXPORT PFNGLISSAMPLERPROC __glewIsSampler; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIIVPROC __glewSamplerParameterIiv; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIUIVPROC __glewSamplerParameterIuiv; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFPROC __glewSamplerParameterf; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERFVPROC __glewSamplerParameterfv; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIPROC __glewSamplerParameteri; -GLEW_FUN_EXPORT PFNGLSAMPLERPARAMETERIVPROC __glewSamplerParameteriv; - -GLEW_FUN_EXPORT PFNGLACTIVESHADERPROGRAMPROC __glewActiveShaderProgram; -GLEW_FUN_EXPORT PFNGLBINDPROGRAMPIPELINEPROC __glewBindProgramPipeline; -GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMVPROC __glewCreateShaderProgramv; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMPIPELINESPROC __glewDeleteProgramPipelines; -GLEW_FUN_EXPORT PFNGLGENPROGRAMPIPELINESPROC __glewGenProgramPipelines; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEINFOLOGPROC __glewGetProgramPipelineInfoLog; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPIPELINEIVPROC __glewGetProgramPipelineiv; -GLEW_FUN_EXPORT PFNGLISPROGRAMPIPELINEPROC __glewIsProgramPipeline; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DPROC __glewProgramUniform1d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1DVPROC __glewProgramUniform1dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FPROC __glewProgramUniform1f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVPROC __glewProgramUniform1fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IPROC __glewProgramUniform1i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVPROC __glewProgramUniform1iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIPROC __glewProgramUniform1ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVPROC __glewProgramUniform1uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DPROC __glewProgramUniform2d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2DVPROC __glewProgramUniform2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FPROC __glewProgramUniform2f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVPROC __glewProgramUniform2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IPROC __glewProgramUniform2i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVPROC __glewProgramUniform2iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIPROC __glewProgramUniform2ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVPROC __glewProgramUniform2uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DPROC __glewProgramUniform3d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3DVPROC __glewProgramUniform3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FPROC __glewProgramUniform3f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVPROC __glewProgramUniform3fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IPROC __glewProgramUniform3i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVPROC __glewProgramUniform3iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIPROC __glewProgramUniform3ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVPROC __glewProgramUniform3uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DPROC __glewProgramUniform4d; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4DVPROC __glewProgramUniform4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FPROC __glewProgramUniform4f; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVPROC __glewProgramUniform4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IPROC __glewProgramUniform4i; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVPROC __glewProgramUniform4iv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIPROC __glewProgramUniform4ui; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVPROC __glewProgramUniform4uiv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2DVPROC __glewProgramUniformMatrix2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVPROC __glewProgramUniformMatrix2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC __glewProgramUniformMatrix2x3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC __glewProgramUniformMatrix2x3fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC __glewProgramUniformMatrix2x4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC __glewProgramUniformMatrix2x4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3DVPROC __glewProgramUniformMatrix3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVPROC __glewProgramUniformMatrix3fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC __glewProgramUniformMatrix3x2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC __glewProgramUniformMatrix3x2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC __glewProgramUniformMatrix3x4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC __glewProgramUniformMatrix3x4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4DVPROC __glewProgramUniformMatrix4dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVPROC __glewProgramUniformMatrix4fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC __glewProgramUniformMatrix4x2dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC __glewProgramUniformMatrix4x2fv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC __glewProgramUniformMatrix4x3dv; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC __glewProgramUniformMatrix4x3fv; -GLEW_FUN_EXPORT PFNGLUSEPROGRAMSTAGESPROC __glewUseProgramStages; -GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMPIPELINEPROC __glewValidateProgramPipeline; - -GLEW_FUN_EXPORT PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC __glewGetActiveAtomicCounterBufferiv; - -GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREPROC __glewBindImageTexture; -GLEW_FUN_EXPORT PFNGLMEMORYBARRIERPROC __glewMemoryBarrier; - -GLEW_FUN_EXPORT PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB; -GLEW_FUN_EXPORT PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB; -GLEW_FUN_EXPORT PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB; -GLEW_FUN_EXPORT PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB; -GLEW_FUN_EXPORT PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB; -GLEW_FUN_EXPORT PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB; -GLEW_FUN_EXPORT PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB; -GLEW_FUN_EXPORT PFNGLGETHANDLEARBPROC __glewGetHandleARB; -GLEW_FUN_EXPORT PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB; -GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB; -GLEW_FUN_EXPORT PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB; -GLEW_FUN_EXPORT PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB; -GLEW_FUN_EXPORT PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB; -GLEW_FUN_EXPORT PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB; -GLEW_FUN_EXPORT PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB; -GLEW_FUN_EXPORT PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB; -GLEW_FUN_EXPORT PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1FARBPROC __glewUniform1fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1IARBPROC __glewUniform1iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2FARBPROC __glewUniform2fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2IARBPROC __glewUniform2iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3FARBPROC __glewUniform3fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3IARBPROC __glewUniform3iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4FARBPROC __glewUniform4fARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4IARBPROC __glewUniform4iARB; -GLEW_FUN_EXPORT PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB; -GLEW_FUN_EXPORT PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB; -GLEW_FUN_EXPORT PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB; -GLEW_FUN_EXPORT PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB; - -GLEW_FUN_EXPORT PFNGLSHADERSTORAGEBLOCKBINDINGPROC __glewShaderStorageBlockBinding; - -GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINENAMEPROC __glewGetActiveSubroutineName; -GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC __glewGetActiveSubroutineUniformName; -GLEW_FUN_EXPORT PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC __glewGetActiveSubroutineUniformiv; -GLEW_FUN_EXPORT PFNGLGETPROGRAMSTAGEIVPROC __glewGetProgramStageiv; -GLEW_FUN_EXPORT PFNGLGETSUBROUTINEINDEXPROC __glewGetSubroutineIndex; -GLEW_FUN_EXPORT PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC __glewGetSubroutineUniformLocation; -GLEW_FUN_EXPORT PFNGLGETUNIFORMSUBROUTINEUIVPROC __glewGetUniformSubroutineuiv; -GLEW_FUN_EXPORT PFNGLUNIFORMSUBROUTINESUIVPROC __glewUniformSubroutinesuiv; - -GLEW_FUN_EXPORT PFNGLCOMPILESHADERINCLUDEARBPROC __glewCompileShaderIncludeARB; -GLEW_FUN_EXPORT PFNGLDELETENAMEDSTRINGARBPROC __glewDeleteNamedStringARB; -GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGARBPROC __glewGetNamedStringARB; -GLEW_FUN_EXPORT PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB; -GLEW_FUN_EXPORT PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB; -GLEW_FUN_EXPORT PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB; - -GLEW_FUN_EXPORT PFNGLTEXPAGECOMMITMENTARBPROC __glewTexPageCommitmentARB; -GLEW_FUN_EXPORT PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT; - -GLEW_FUN_EXPORT PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync; -GLEW_FUN_EXPORT PFNGLDELETESYNCPROC __glewDeleteSync; -GLEW_FUN_EXPORT PFNGLFENCESYNCPROC __glewFenceSync; -GLEW_FUN_EXPORT PFNGLGETINTEGER64VPROC __glewGetInteger64v; -GLEW_FUN_EXPORT PFNGLGETSYNCIVPROC __glewGetSynciv; -GLEW_FUN_EXPORT PFNGLISSYNCPROC __glewIsSync; -GLEW_FUN_EXPORT PFNGLWAITSYNCPROC __glewWaitSync; - -GLEW_FUN_EXPORT PFNGLPATCHPARAMETERFVPROC __glewPatchParameterfv; -GLEW_FUN_EXPORT PFNGLPATCHPARAMETERIPROC __glewPatchParameteri; - -GLEW_FUN_EXPORT PFNGLTEXBUFFERARBPROC __glewTexBufferARB; - -GLEW_FUN_EXPORT PFNGLTEXBUFFERRANGEPROC __glewTexBufferRange; -GLEW_FUN_EXPORT PFNGLTEXTUREBUFFERRANGEEXTPROC __glewTextureBufferRangeEXT; - -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB; - -GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVPROC __glewGetMultisamplefv; -GLEW_FUN_EXPORT PFNGLSAMPLEMASKIPROC __glewSampleMaski; -GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLEPROC __glewTexImage2DMultisample; -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample; - -GLEW_FUN_EXPORT PFNGLTEXSTORAGE1DPROC __glewTexStorage1D; -GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DPROC __glewTexStorage2D; -GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DPROC __glewTexStorage3D; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT; - -GLEW_FUN_EXPORT PFNGLTEXSTORAGE2DMULTISAMPLEPROC __glewTexStorage2DMultisample; -GLEW_FUN_EXPORT PFNGLTEXSTORAGE3DMULTISAMPLEPROC __glewTexStorage3DMultisample; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC __glewTextureStorage2DMultisampleEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC __glewTextureStorage3DMultisampleEXT; - -GLEW_FUN_EXPORT PFNGLTEXTUREVIEWPROC __glewTextureView; - -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VPROC __glewGetQueryObjecti64v; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VPROC __glewGetQueryObjectui64v; -GLEW_FUN_EXPORT PFNGLQUERYCOUNTERPROC __glewQueryCounter; - -GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKPROC __glewBindTransformFeedback; -GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSPROC __glewDeleteTransformFeedbacks; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKPROC __glewDrawTransformFeedback; -GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSPROC __glewGenTransformFeedbacks; -GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKPROC __glewIsTransformFeedback; -GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKPROC __glewPauseTransformFeedback; -GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKPROC __glewResumeTransformFeedback; - -GLEW_FUN_EXPORT PFNGLBEGINQUERYINDEXEDPROC __glewBeginQueryIndexed; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC __glewDrawTransformFeedbackStream; -GLEW_FUN_EXPORT PFNGLENDQUERYINDEXEDPROC __glewEndQueryIndexed; -GLEW_FUN_EXPORT PFNGLGETQUERYINDEXEDIVPROC __glewGetQueryIndexediv; - -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC __glewDrawTransformFeedbackInstanced; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC __glewDrawTransformFeedbackStreamInstanced; - -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB; -GLEW_FUN_EXPORT PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB; -GLEW_FUN_EXPORT PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB; - -GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEPROC __glewBindBufferBase; -GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC __glewGetActiveUniformBlockName; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMBLOCKIVPROC __glewGetActiveUniformBlockiv; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMNAMEPROC __glewGetActiveUniformName; -GLEW_FUN_EXPORT PFNGLGETACTIVEUNIFORMSIVPROC __glewGetActiveUniformsiv; -GLEW_FUN_EXPORT PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v; -GLEW_FUN_EXPORT PFNGLGETUNIFORMBLOCKINDEXPROC __glewGetUniformBlockIndex; -GLEW_FUN_EXPORT PFNGLGETUNIFORMINDICESPROC __glewGetUniformIndices; -GLEW_FUN_EXPORT PFNGLUNIFORMBLOCKBINDINGPROC __glewUniformBlockBinding; - -GLEW_FUN_EXPORT PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray; -GLEW_FUN_EXPORT PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays; -GLEW_FUN_EXPORT PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays; -GLEW_FUN_EXPORT PFNGLISVERTEXARRAYPROC __glewIsVertexArray; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVPROC __glewGetVertexAttribLdv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DPROC __glewVertexAttribL1d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVPROC __glewVertexAttribL1dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DPROC __glewVertexAttribL2d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVPROC __glewVertexAttribL2dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DPROC __glewVertexAttribL3d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVPROC __glewVertexAttribL3dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DPROC __glewVertexAttribL4d; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVPROC __glewVertexAttribL4dv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTERPROC __glewVertexAttribLPointer; - -GLEW_FUN_EXPORT PFNGLBINDVERTEXBUFFERPROC __glewBindVertexBuffer; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBBINDINGPROC __glewVertexAttribBinding; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBFORMATPROC __glewVertexAttribFormat; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIFORMATPROC __glewVertexAttribIFormat; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLFORMATPROC __glewVertexAttribLFormat; -GLEW_FUN_EXPORT PFNGLVERTEXBINDINGDIVISORPROC __glewVertexBindingDivisor; - -GLEW_FUN_EXPORT PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB; -GLEW_FUN_EXPORT PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB; -GLEW_FUN_EXPORT PFNGLWEIGHTBVARBPROC __glewWeightbvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTDVARBPROC __glewWeightdvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTFVARBPROC __glewWeightfvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTIVARBPROC __glewWeightivARB; -GLEW_FUN_EXPORT PFNGLWEIGHTSVARBPROC __glewWeightsvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTUBVARBPROC __glewWeightubvARB; -GLEW_FUN_EXPORT PFNGLWEIGHTUIVARBPROC __glewWeightuivARB; -GLEW_FUN_EXPORT PFNGLWEIGHTUSVARBPROC __glewWeightusvARB; - -GLEW_FUN_EXPORT PFNGLBINDBUFFERARBPROC __glewBindBufferARB; -GLEW_FUN_EXPORT PFNGLBUFFERDATAARBPROC __glewBufferDataARB; -GLEW_FUN_EXPORT PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB; -GLEW_FUN_EXPORT PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB; -GLEW_FUN_EXPORT PFNGLGENBUFFERSARBPROC __glewGenBuffersARB; -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB; -GLEW_FUN_EXPORT PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB; -GLEW_FUN_EXPORT PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB; -GLEW_FUN_EXPORT PFNGLISBUFFERARBPROC __glewIsBufferARB; -GLEW_FUN_EXPORT PFNGLMAPBUFFERARBPROC __glewMapBufferARB; -GLEW_FUN_EXPORT PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB; - -GLEW_FUN_EXPORT PFNGLBINDPROGRAMARBPROC __glewBindProgramARB; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB; -GLEW_FUN_EXPORT PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB; -GLEW_FUN_EXPORT PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB; -GLEW_FUN_EXPORT PFNGLISPROGRAMARBPROC __glewIsProgramARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB; -GLEW_FUN_EXPORT PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB; - -GLEW_FUN_EXPORT PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB; -GLEW_FUN_EXPORT PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB; -GLEW_FUN_EXPORT PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB; - -GLEW_FUN_EXPORT PFNGLCOLORP3UIPROC __glewColorP3ui; -GLEW_FUN_EXPORT PFNGLCOLORP3UIVPROC __glewColorP3uiv; -GLEW_FUN_EXPORT PFNGLCOLORP4UIPROC __glewColorP4ui; -GLEW_FUN_EXPORT PFNGLCOLORP4UIVPROC __glewColorP4uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIPROC __glewMultiTexCoordP1ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP1UIVPROC __glewMultiTexCoordP1uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIPROC __glewMultiTexCoordP2ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP2UIVPROC __glewMultiTexCoordP2uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIPROC __glewMultiTexCoordP3ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP3UIVPROC __glewMultiTexCoordP3uiv; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIPROC __glewMultiTexCoordP4ui; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDP4UIVPROC __glewMultiTexCoordP4uiv; -GLEW_FUN_EXPORT PFNGLNORMALP3UIPROC __glewNormalP3ui; -GLEW_FUN_EXPORT PFNGLNORMALP3UIVPROC __glewNormalP3uiv; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIPROC __glewSecondaryColorP3ui; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORP3UIVPROC __glewSecondaryColorP3uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIPROC __glewTexCoordP1ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP1UIVPROC __glewTexCoordP1uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIPROC __glewTexCoordP2ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP2UIVPROC __glewTexCoordP2uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIPROC __glewTexCoordP3ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP3UIVPROC __glewTexCoordP3uiv; -GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIPROC __glewTexCoordP4ui; -GLEW_FUN_EXPORT PFNGLTEXCOORDP4UIVPROC __glewTexCoordP4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIPROC __glewVertexAttribP1ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP1UIVPROC __glewVertexAttribP1uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIPROC __glewVertexAttribP2ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP2UIVPROC __glewVertexAttribP2uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIPROC __glewVertexAttribP3ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP3UIVPROC __glewVertexAttribP3uiv; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIPROC __glewVertexAttribP4ui; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBP4UIVPROC __glewVertexAttribP4uiv; -GLEW_FUN_EXPORT PFNGLVERTEXP2UIPROC __glewVertexP2ui; -GLEW_FUN_EXPORT PFNGLVERTEXP2UIVPROC __glewVertexP2uiv; -GLEW_FUN_EXPORT PFNGLVERTEXP3UIPROC __glewVertexP3ui; -GLEW_FUN_EXPORT PFNGLVERTEXP3UIVPROC __glewVertexP3uiv; -GLEW_FUN_EXPORT PFNGLVERTEXP4UIPROC __glewVertexP4ui; -GLEW_FUN_EXPORT PFNGLVERTEXP4UIVPROC __glewVertexP4uiv; - -GLEW_FUN_EXPORT PFNGLDEPTHRANGEARRAYVPROC __glewDepthRangeArrayv; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEINDEXEDPROC __glewDepthRangeIndexed; -GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VPROC __glewGetDoublei_v; -GLEW_FUN_EXPORT PFNGLGETFLOATI_VPROC __glewGetFloati_v; -GLEW_FUN_EXPORT PFNGLSCISSORARRAYVPROC __glewScissorArrayv; -GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDPROC __glewScissorIndexed; -GLEW_FUN_EXPORT PFNGLSCISSORINDEXEDVPROC __glewScissorIndexedv; -GLEW_FUN_EXPORT PFNGLVIEWPORTARRAYVPROC __glewViewportArrayv; -GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFPROC __glewViewportIndexedf; -GLEW_FUN_EXPORT PFNGLVIEWPORTINDEXEDFVPROC __glewViewportIndexedfv; - -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB; - -GLEW_FUN_EXPORT PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI; - -GLEW_FUN_EXPORT PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI; -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI; -GLEW_FUN_EXPORT PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI; - -GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI; -GLEW_FUN_EXPORT PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI; -GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI; -GLEW_FUN_EXPORT PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI; - -GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI; -GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI; -GLEW_FUN_EXPORT PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI; -GLEW_FUN_EXPORT PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI; -GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI; -GLEW_FUN_EXPORT PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI; -GLEW_FUN_EXPORT PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI; -GLEW_FUN_EXPORT PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI; -GLEW_FUN_EXPORT PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI; -GLEW_FUN_EXPORT PFNGLSAMPLEMAPATIPROC __glewSampleMapATI; -GLEW_FUN_EXPORT PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI; - -GLEW_FUN_EXPORT PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI; -GLEW_FUN_EXPORT PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI; - -GLEW_FUN_EXPORT PFNGLPNTRIANGLESFATIPROC __glewPNTrianglesfATI; -GLEW_FUN_EXPORT PFNGLPNTRIANGLESIATIPROC __glewPNTrianglesiATI; - -GLEW_FUN_EXPORT PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI; -GLEW_FUN_EXPORT PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI; - -GLEW_FUN_EXPORT PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI; -GLEW_FUN_EXPORT PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI; -GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI; -GLEW_FUN_EXPORT PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI; -GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI; -GLEW_FUN_EXPORT PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI; -GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI; -GLEW_FUN_EXPORT PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI; -GLEW_FUN_EXPORT PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI; -GLEW_FUN_EXPORT PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI; -GLEW_FUN_EXPORT PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI; -GLEW_FUN_EXPORT PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI; - -GLEW_FUN_EXPORT PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI; -GLEW_FUN_EXPORT PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI; -GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI; -GLEW_FUN_EXPORT PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1DATIPROC __glewVertexStream1dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1DVATIPROC __glewVertexStream1dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1FATIPROC __glewVertexStream1fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1FVATIPROC __glewVertexStream1fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1IATIPROC __glewVertexStream1iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1IVATIPROC __glewVertexStream1ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1SATIPROC __glewVertexStream1sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM1SVATIPROC __glewVertexStream1svATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI; -GLEW_FUN_EXPORT PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI; - -GLEW_FUN_EXPORT PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT; -GLEW_FUN_EXPORT PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT; -GLEW_FUN_EXPORT PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT; - -GLEW_FUN_EXPORT PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT; - -GLEW_FUN_EXPORT PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT; - -GLEW_FUN_EXPORT PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT; - -GLEW_FUN_EXPORT PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT; -GLEW_FUN_EXPORT PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT; - -GLEW_FUN_EXPORT PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT; -GLEW_FUN_EXPORT PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT; - -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT; -GLEW_FUN_EXPORT PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT; -GLEW_FUN_EXPORT PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT; - -GLEW_FUN_EXPORT PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT; -GLEW_FUN_EXPORT PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT; - -GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT; - -GLEW_FUN_EXPORT PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT; -GLEW_FUN_EXPORT PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT; - -GLEW_FUN_EXPORT PFNGLINSERTEVENTMARKEREXTPROC __glewInsertEventMarkerEXT; -GLEW_FUN_EXPORT PFNGLPOPGROUPMARKEREXTPROC __glewPopGroupMarkerEXT; -GLEW_FUN_EXPORT PFNGLPUSHGROUPMARKEREXTPROC __glewPushGroupMarkerEXT; - -GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT; - -GLEW_FUN_EXPORT PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT; -GLEW_FUN_EXPORT PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT; -GLEW_FUN_EXPORT PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT; -GLEW_FUN_EXPORT PFNGLDISABLECLIENTSTATEIEXTPROC __glewDisableClientStateiEXT; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC __glewDisableVertexArrayAttribEXT; -GLEW_FUN_EXPORT PFNGLDISABLEVERTEXARRAYEXTPROC __glewDisableVertexArrayEXT; -GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT; -GLEW_FUN_EXPORT PFNGLENABLECLIENTSTATEIEXTPROC __glewEnableClientStateiEXT; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYATTRIBEXTPROC __glewEnableVertexArrayAttribEXT; -GLEW_FUN_EXPORT PFNGLENABLEVERTEXARRAYEXTPROC __glewEnableVertexArrayEXT; -GLEW_FUN_EXPORT PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC __glewFlushMappedNamedBufferRangeEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT; -GLEW_FUN_EXPORT PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT; -GLEW_FUN_EXPORT PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT; -GLEW_FUN_EXPORT PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT; -GLEW_FUN_EXPORT PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETDOUBLEI_VEXTPROC __glewGetDoublei_vEXT; -GLEW_FUN_EXPORT PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETFLOATI_VEXTPROC __glewGetFloati_vEXT; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT; -GLEW_FUN_EXPORT PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETPOINTERI_VEXTPROC __glewGetPointeri_vEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC __glewGetVertexArrayIntegeri_vEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYINTEGERVEXTPROC __glewGetVertexArrayIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC __glewGetVertexArrayPointeri_vEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXARRAYPOINTERVEXTPROC __glewGetVertexArrayPointervEXT; -GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT; -GLEW_FUN_EXPORT PFNGLMAPNAMEDBUFFERRANGEEXTPROC __glewMapNamedBufferRangeEXT; -GLEW_FUN_EXPORT PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT; -GLEW_FUN_EXPORT PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT; -GLEW_FUN_EXPORT PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT; -GLEW_FUN_EXPORT PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT; -GLEW_FUN_EXPORT PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT; -GLEW_FUN_EXPORT PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT; -GLEW_FUN_EXPORT PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT; -GLEW_FUN_EXPORT PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT; -GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT; -GLEW_FUN_EXPORT PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT; -GLEW_FUN_EXPORT PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT; -GLEW_FUN_EXPORT PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC __glewNamedCopyBufferSubDataEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT; -GLEW_FUN_EXPORT PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT; -GLEW_FUN_EXPORT PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT; -GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT; -GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT; -GLEW_FUN_EXPORT PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT; -GLEW_FUN_EXPORT PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT; -GLEW_FUN_EXPORT PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT; -GLEW_FUN_EXPORT PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYCOLOROFFSETEXTPROC __glewVertexArrayColorOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC __glewVertexArrayEdgeFlagOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC __glewVertexArrayFogCoordOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYINDEXOFFSETEXTPROC __glewVertexArrayIndexOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC __glewVertexArrayMultiTexCoordOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYNORMALOFFSETEXTPROC __glewVertexArrayNormalOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC __glewVertexArraySecondaryColorOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC __glewVertexArrayTexCoordOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVertexAttribIOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT; - -GLEW_FUN_EXPORT PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT; -GLEW_FUN_EXPORT PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT; -GLEW_FUN_EXPORT PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT; -GLEW_FUN_EXPORT PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT; -GLEW_FUN_EXPORT PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT; -GLEW_FUN_EXPORT PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT; - -GLEW_FUN_EXPORT PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT; -GLEW_FUN_EXPORT PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT; - -GLEW_FUN_EXPORT PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT; - -GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT; -GLEW_FUN_EXPORT PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT; - -GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT; -GLEW_FUN_EXPORT PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT; - -GLEW_FUN_EXPORT PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT; - -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT; - -GLEW_FUN_EXPORT PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT; -GLEW_FUN_EXPORT PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT; -GLEW_FUN_EXPORT PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT; -GLEW_FUN_EXPORT PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT; -GLEW_FUN_EXPORT PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT; -GLEW_FUN_EXPORT PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT; -GLEW_FUN_EXPORT PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT; -GLEW_FUN_EXPORT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT; -GLEW_FUN_EXPORT PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT; -GLEW_FUN_EXPORT PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT; -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT; -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT; - -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT; - -GLEW_FUN_EXPORT PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT; -GLEW_FUN_EXPORT PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT; -GLEW_FUN_EXPORT PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT; -GLEW_FUN_EXPORT PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT; - -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT; -GLEW_FUN_EXPORT PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT; -GLEW_FUN_EXPORT PFNGLHISTOGRAMEXTPROC __glewHistogramEXT; -GLEW_FUN_EXPORT PFNGLMINMAXEXTPROC __glewMinmaxEXT; -GLEW_FUN_EXPORT PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT; -GLEW_FUN_EXPORT PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT; - -GLEW_FUN_EXPORT PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT; - -GLEW_FUN_EXPORT PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT; - -GLEW_FUN_EXPORT PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT; -GLEW_FUN_EXPORT PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT; -GLEW_FUN_EXPORT PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT; - -GLEW_FUN_EXPORT PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT; -GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT; - -GLEW_FUN_EXPORT PFNGLCOLORTABLEEXTPROC __glewColorTableEXT; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT; - -GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT; -GLEW_FUN_EXPORT PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT; -GLEW_FUN_EXPORT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT; - -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT; - -GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT; - -GLEW_FUN_EXPORT PFNGLPROVOKINGVERTEXEXTPROC __glewProvokingVertexEXT; - -GLEW_FUN_EXPORT PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT; -GLEW_FUN_EXPORT PFNGLENDSCENEEXTPROC __glewEndSceneEXT; - -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT; - -GLEW_FUN_EXPORT PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT; -GLEW_FUN_EXPORT PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT; -GLEW_FUN_EXPORT PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT; - -GLEW_FUN_EXPORT PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT; -GLEW_FUN_EXPORT PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT; - -GLEW_FUN_EXPORT PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT; - -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT; - -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT; - -GLEW_FUN_EXPORT PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT; - -GLEW_FUN_EXPORT PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT; - -GLEW_FUN_EXPORT PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT; -GLEW_FUN_EXPORT PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT; - -GLEW_FUN_EXPORT PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT; -GLEW_FUN_EXPORT PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT; -GLEW_FUN_EXPORT PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT; -GLEW_FUN_EXPORT PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT; -GLEW_FUN_EXPORT PFNGLISTEXTUREEXTPROC __glewIsTextureEXT; -GLEW_FUN_EXPORT PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT; - -GLEW_FUN_EXPORT PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT; - -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT; -GLEW_FUN_EXPORT PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT; - -GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT; -GLEW_FUN_EXPORT PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT; -GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT; -GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT; -GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT; -GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT; - -GLEW_FUN_EXPORT PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT; -GLEW_FUN_EXPORT PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT; -GLEW_FUN_EXPORT PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT; -GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT; -GLEW_FUN_EXPORT PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT; -GLEW_FUN_EXPORT PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT; -GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT; -GLEW_FUN_EXPORT PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1DVEXTPROC __glewVertexAttribL1dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DEXTPROC __glewVertexAttribL2dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2DVEXTPROC __glewVertexAttribL2dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DEXTPROC __glewVertexAttribL3dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3DVEXTPROC __glewVertexAttribL3dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DEXTPROC __glewVertexAttribL4dEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4DVEXTPROC __glewVertexAttribL4dvEXT; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLPOINTEREXTPROC __glewVertexAttribLPointerEXT; - -GLEW_FUN_EXPORT PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT; -GLEW_FUN_EXPORT PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT; -GLEW_FUN_EXPORT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT; -GLEW_FUN_EXPORT PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT; -GLEW_FUN_EXPORT PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT; -GLEW_FUN_EXPORT PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT; -GLEW_FUN_EXPORT PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT; -GLEW_FUN_EXPORT PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT; -GLEW_FUN_EXPORT PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT; -GLEW_FUN_EXPORT PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT; -GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT; -GLEW_FUN_EXPORT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT; -GLEW_FUN_EXPORT PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT; -GLEW_FUN_EXPORT PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT; -GLEW_FUN_EXPORT PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT; -GLEW_FUN_EXPORT PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT; -GLEW_FUN_EXPORT PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT; -GLEW_FUN_EXPORT PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT; -GLEW_FUN_EXPORT PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT; -GLEW_FUN_EXPORT PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT; -GLEW_FUN_EXPORT PFNGLSWIZZLEEXTPROC __glewSwizzleEXT; -GLEW_FUN_EXPORT PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT; -GLEW_FUN_EXPORT PFNGLVARIANTBVEXTPROC __glewVariantbvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTDVEXTPROC __glewVariantdvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTFVEXTPROC __glewVariantfvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTIVEXTPROC __glewVariantivEXT; -GLEW_FUN_EXPORT PFNGLVARIANTSVEXTPROC __glewVariantsvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT; -GLEW_FUN_EXPORT PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT; -GLEW_FUN_EXPORT PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT; -GLEW_FUN_EXPORT PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT; - -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT; - -GLEW_FUN_EXPORT PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT; - -GLEW_FUN_EXPORT PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY; - -GLEW_FUN_EXPORT PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY; - -GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP; -GLEW_FUN_EXPORT PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP; -GLEW_FUN_EXPORT PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP; - -GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM; -GLEW_FUN_EXPORT PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM; - -GLEW_FUN_EXPORT PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM; -GLEW_FUN_EXPORT PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM; -GLEW_FUN_EXPORT PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM; -GLEW_FUN_EXPORT PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM; -GLEW_FUN_EXPORT PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM; -GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM; -GLEW_FUN_EXPORT PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM; - -GLEW_FUN_EXPORT PFNGLMAPTEXTURE2DINTELPROC __glewMapTexture2DINTEL; -GLEW_FUN_EXPORT PFNGLSYNCTEXTUREINTELPROC __glewSyncTextureINTEL; -GLEW_FUN_EXPORT PFNGLUNMAPTEXTURE2DINTELPROC __glewUnmapTexture2DINTEL; - -GLEW_FUN_EXPORT PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL; -GLEW_FUN_EXPORT PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL; -GLEW_FUN_EXPORT PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL; -GLEW_FUN_EXPORT PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL; - -GLEW_FUN_EXPORT PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL; -GLEW_FUN_EXPORT PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL; - -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECALLBACKPROC __glewDebugMessageCallback; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGECONTROLPROC __glewDebugMessageControl; -GLEW_FUN_EXPORT PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert; -GLEW_FUN_EXPORT PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog; -GLEW_FUN_EXPORT PFNGLGETOBJECTLABELPROC __glewGetObjectLabel; -GLEW_FUN_EXPORT PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel; -GLEW_FUN_EXPORT PFNGLOBJECTLABELPROC __glewObjectLabel; -GLEW_FUN_EXPORT PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel; -GLEW_FUN_EXPORT PFNGLPOPDEBUGGROUPPROC __glewPopDebugGroup; -GLEW_FUN_EXPORT PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup; - -GLEW_FUN_EXPORT PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled; -GLEW_FUN_EXPORT PFNGLDELETEBUFFERREGIONPROC __glewDeleteBufferRegion; -GLEW_FUN_EXPORT PFNGLDRAWBUFFERREGIONPROC __glewDrawBufferRegion; -GLEW_FUN_EXPORT PFNGLNEWBUFFERREGIONPROC __glewNewBufferRegion; -GLEW_FUN_EXPORT PFNGLREADBUFFERREGIONPROC __glewReadBufferRegion; - -GLEW_FUN_EXPORT PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA; - -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA; -GLEW_FUN_EXPORT PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA; - -GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX; -GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX; - -GLEW_FUN_EXPORT PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV; -GLEW_FUN_EXPORT PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV; - -GLEW_FUN_EXPORT PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV; -GLEW_FUN_EXPORT PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV; -GLEW_FUN_EXPORT PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV; -GLEW_FUN_EXPORT PFNGLISIMAGEHANDLERESIDENTNVPROC __glewIsImageHandleResidentNV; -GLEW_FUN_EXPORT PFNGLISTEXTUREHANDLERESIDENTNVPROC __glewIsTextureHandleResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC __glewMakeImageHandleNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEIMAGEHANDLERESIDENTNVPROC __glewMakeImageHandleResidentNV; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC __glewMakeTextureHandleNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKETEXTUREHANDLERESIDENTNVPROC __glewMakeTextureHandleResidentNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC __glewProgramUniformHandleui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV; - -GLEW_FUN_EXPORT PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV; -GLEW_FUN_EXPORT PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV; - -GLEW_FUN_EXPORT PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV; -GLEW_FUN_EXPORT PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV; - -GLEW_FUN_EXPORT PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV; - -GLEW_FUN_EXPORT PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV; -GLEW_FUN_EXPORT PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV; - -GLEW_FUN_EXPORT PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV; - -GLEW_FUN_EXPORT PFNGLEVALMAPSNVPROC __glewEvalMapsNV; -GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV; -GLEW_FUN_EXPORT PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV; -GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV; -GLEW_FUN_EXPORT PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV; -GLEW_FUN_EXPORT PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV; -GLEW_FUN_EXPORT PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV; - -GLEW_FUN_EXPORT PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV; -GLEW_FUN_EXPORT PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV; -GLEW_FUN_EXPORT PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV; - -GLEW_FUN_EXPORT PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV; -GLEW_FUN_EXPORT PFNGLFINISHFENCENVPROC __glewFinishFenceNV; -GLEW_FUN_EXPORT PFNGLGENFENCESNVPROC __glewGenFencesNV; -GLEW_FUN_EXPORT PFNGLGETFENCEIVNVPROC __glewGetFenceivNV; -GLEW_FUN_EXPORT PFNGLISFENCENVPROC __glewIsFenceNV; -GLEW_FUN_EXPORT PFNGLSETFENCENVPROC __glewSetFenceNV; -GLEW_FUN_EXPORT PFNGLTESTFENCENVPROC __glewTestFenceNV; - -GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV; -GLEW_FUN_EXPORT PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV; - -GLEW_FUN_EXPORT PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV; - -GLEW_FUN_EXPORT PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV; - -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV; - -GLEW_FUN_EXPORT PFNGLGETUNIFORMI64VNVPROC __glewGetUniformi64vNV; -GLEW_FUN_EXPORT PFNGLGETUNIFORMUI64VNVPROC __glewGetUniformui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64NVPROC __glewProgramUniform1i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1I64VNVPROC __glewProgramUniform1i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64NVPROC __glewProgramUniform1ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM1UI64VNVPROC __glewProgramUniform1ui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64NVPROC __glewProgramUniform2i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2I64VNVPROC __glewProgramUniform2i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64NVPROC __glewProgramUniform2ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM2UI64VNVPROC __glewProgramUniform2ui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64NVPROC __glewProgramUniform3i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3I64VNVPROC __glewProgramUniform3i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64NVPROC __glewProgramUniform3ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM3UI64VNVPROC __glewProgramUniform3ui64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64NVPROC __glewProgramUniform4i64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4I64VNVPROC __glewProgramUniform4i64vNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64NVPROC __glewProgramUniform4ui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORM4UI64VNVPROC __glewProgramUniform4ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM1I64NVPROC __glewUniform1i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM1I64VNVPROC __glewUniform1i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM1UI64NVPROC __glewUniform1ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM1UI64VNVPROC __glewUniform1ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM2I64NVPROC __glewUniform2i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM2I64VNVPROC __glewUniform2i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM2UI64NVPROC __glewUniform2ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM2UI64VNVPROC __glewUniform2ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM3I64NVPROC __glewUniform3i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM3I64VNVPROC __glewUniform3i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM3UI64NVPROC __glewUniform3ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM3UI64VNVPROC __glewUniform3ui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM4I64NVPROC __glewUniform4i64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM4I64VNVPROC __glewUniform4i64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORM4UI64NVPROC __glewUniform4ui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORM4UI64VNVPROC __glewUniform4ui64vNV; - -GLEW_FUN_EXPORT PFNGLCOLOR3HNVPROC __glewColor3hNV; -GLEW_FUN_EXPORT PFNGLCOLOR3HVNVPROC __glewColor3hvNV; -GLEW_FUN_EXPORT PFNGLCOLOR4HNVPROC __glewColor4hNV; -GLEW_FUN_EXPORT PFNGLCOLOR4HVNVPROC __glewColor4hvNV; -GLEW_FUN_EXPORT PFNGLFOGCOORDHNVPROC __glewFogCoordhNV; -GLEW_FUN_EXPORT PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV; -GLEW_FUN_EXPORT PFNGLNORMAL3HNVPROC __glewNormal3hNV; -GLEW_FUN_EXPORT PFNGLNORMAL3HVNVPROC __glewNormal3hvNV; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV; -GLEW_FUN_EXPORT PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEX2HNVPROC __glewVertex2hNV; -GLEW_FUN_EXPORT PFNGLVERTEX2HVNVPROC __glewVertex2hvNV; -GLEW_FUN_EXPORT PFNGLVERTEX3HNVPROC __glewVertex3hNV; -GLEW_FUN_EXPORT PFNGLVERTEX3HVNVPROC __glewVertex3hvNV; -GLEW_FUN_EXPORT PFNGLVERTEX4HNVPROC __glewVertex4hNV; -GLEW_FUN_EXPORT PFNGLVERTEX4HVNVPROC __glewVertex4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV; -GLEW_FUN_EXPORT PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV; - -GLEW_FUN_EXPORT PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV; -GLEW_FUN_EXPORT PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV; -GLEW_FUN_EXPORT PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV; -GLEW_FUN_EXPORT PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV; -GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV; -GLEW_FUN_EXPORT PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV; -GLEW_FUN_EXPORT PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV; - -GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV; -GLEW_FUN_EXPORT PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV; - -GLEW_FUN_EXPORT PFNGLCOPYPATHNVPROC __glewCopyPathNV; -GLEW_FUN_EXPORT PFNGLCOVERFILLPATHINSTANCEDNVPROC __glewCoverFillPathInstancedNV; -GLEW_FUN_EXPORT PFNGLCOVERFILLPATHNVPROC __glewCoverFillPathNV; -GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHINSTANCEDNVPROC __glewCoverStrokePathInstancedNV; -GLEW_FUN_EXPORT PFNGLCOVERSTROKEPATHNVPROC __glewCoverStrokePathNV; -GLEW_FUN_EXPORT PFNGLDELETEPATHSNVPROC __glewDeletePathsNV; -GLEW_FUN_EXPORT PFNGLGENPATHSNVPROC __glewGenPathsNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENFVNVPROC __glewGetPathColorGenfvNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOLORGENIVNVPROC __glewGetPathColorGenivNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOMMANDSNVPROC __glewGetPathCommandsNV; -GLEW_FUN_EXPORT PFNGLGETPATHCOORDSNVPROC __glewGetPathCoordsNV; -GLEW_FUN_EXPORT PFNGLGETPATHDASHARRAYNVPROC __glewGetPathDashArrayNV; -GLEW_FUN_EXPORT PFNGLGETPATHLENGTHNVPROC __glewGetPathLengthNV; -GLEW_FUN_EXPORT PFNGLGETPATHMETRICRANGENVPROC __glewGetPathMetricRangeNV; -GLEW_FUN_EXPORT PFNGLGETPATHMETRICSNVPROC __glewGetPathMetricsNV; -GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERFVNVPROC __glewGetPathParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETPATHPARAMETERIVNVPROC __glewGetPathParameterivNV; -GLEW_FUN_EXPORT PFNGLGETPATHSPACINGNVPROC __glewGetPathSpacingNV; -GLEW_FUN_EXPORT PFNGLGETPATHTEXGENFVNVPROC __glewGetPathTexGenfvNV; -GLEW_FUN_EXPORT PFNGLGETPATHTEXGENIVNVPROC __glewGetPathTexGenivNV; -GLEW_FUN_EXPORT PFNGLINTERPOLATEPATHSNVPROC __glewInterpolatePathsNV; -GLEW_FUN_EXPORT PFNGLISPATHNVPROC __glewIsPathNV; -GLEW_FUN_EXPORT PFNGLISPOINTINFILLPATHNVPROC __glewIsPointInFillPathNV; -GLEW_FUN_EXPORT PFNGLISPOINTINSTROKEPATHNVPROC __glewIsPointInStrokePathNV; -GLEW_FUN_EXPORT PFNGLPATHCOLORGENNVPROC __glewPathColorGenNV; -GLEW_FUN_EXPORT PFNGLPATHCOMMANDSNVPROC __glewPathCommandsNV; -GLEW_FUN_EXPORT PFNGLPATHCOORDSNVPROC __glewPathCoordsNV; -GLEW_FUN_EXPORT PFNGLPATHCOVERDEPTHFUNCNVPROC __glewPathCoverDepthFuncNV; -GLEW_FUN_EXPORT PFNGLPATHDASHARRAYNVPROC __glewPathDashArrayNV; -GLEW_FUN_EXPORT PFNGLPATHFOGGENNVPROC __glewPathFogGenNV; -GLEW_FUN_EXPORT PFNGLPATHGLYPHRANGENVPROC __glewPathGlyphRangeNV; -GLEW_FUN_EXPORT PFNGLPATHGLYPHSNVPROC __glewPathGlyphsNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERFNVPROC __glewPathParameterfNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERFVNVPROC __glewPathParameterfvNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERINVPROC __glewPathParameteriNV; -GLEW_FUN_EXPORT PFNGLPATHPARAMETERIVNVPROC __glewPathParameterivNV; -GLEW_FUN_EXPORT PFNGLPATHSTENCILDEPTHOFFSETNVPROC __glewPathStencilDepthOffsetNV; -GLEW_FUN_EXPORT PFNGLPATHSTENCILFUNCNVPROC __glewPathStencilFuncNV; -GLEW_FUN_EXPORT PFNGLPATHSTRINGNVPROC __glewPathStringNV; -GLEW_FUN_EXPORT PFNGLPATHSUBCOMMANDSNVPROC __glewPathSubCommandsNV; -GLEW_FUN_EXPORT PFNGLPATHSUBCOORDSNVPROC __glewPathSubCoordsNV; -GLEW_FUN_EXPORT PFNGLPATHTEXGENNVPROC __glewPathTexGenNV; -GLEW_FUN_EXPORT PFNGLPOINTALONGPATHNVPROC __glewPointAlongPathNV; -GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHINSTANCEDNVPROC __glewStencilFillPathInstancedNV; -GLEW_FUN_EXPORT PFNGLSTENCILFILLPATHNVPROC __glewStencilFillPathNV; -GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC __glewStencilStrokePathInstancedNV; -GLEW_FUN_EXPORT PFNGLSTENCILSTROKEPATHNVPROC __glewStencilStrokePathNV; -GLEW_FUN_EXPORT PFNGLTRANSFORMPATHNVPROC __glewTransformPathNV; -GLEW_FUN_EXPORT PFNGLWEIGHTPATHSNVPROC __glewWeightPathsNV; - -GLEW_FUN_EXPORT PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV; -GLEW_FUN_EXPORT PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV; - -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV; - -GLEW_FUN_EXPORT PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV; -GLEW_FUN_EXPORT PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV; -GLEW_FUN_EXPORT PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV; - -GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV; -GLEW_FUN_EXPORT PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV; - -GLEW_FUN_EXPORT PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV; -GLEW_FUN_EXPORT PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV; -GLEW_FUN_EXPORT PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV; -GLEW_FUN_EXPORT PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV; -GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV; - -GLEW_FUN_EXPORT PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV; - -GLEW_FUN_EXPORT PFNGLGETBUFFERPARAMETERUI64VNVPROC __glewGetBufferParameterui64vNV; -GLEW_FUN_EXPORT PFNGLGETINTEGERUI64VNVPROC __glewGetIntegerui64vNV; -GLEW_FUN_EXPORT PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC __glewGetNamedBufferParameterui64vNV; -GLEW_FUN_EXPORT PFNGLISBUFFERRESIDENTNVPROC __glewIsBufferResidentNV; -GLEW_FUN_EXPORT PFNGLISNAMEDBUFFERRESIDENTNVPROC __glewIsNamedBufferResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEBUFFERNONRESIDENTNVPROC __glewMakeBufferNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKEBUFFERRESIDENTNVPROC __glewMakeBufferResidentNV; -GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC __glewMakeNamedBufferNonResidentNV; -GLEW_FUN_EXPORT PFNGLMAKENAMEDBUFFERRESIDENTNVPROC __glewMakeNamedBufferResidentNV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64NVPROC __glewProgramUniformui64NV; -GLEW_FUN_EXPORT PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV; -GLEW_FUN_EXPORT PFNGLUNIFORMUI64NVPROC __glewUniformui64NV; -GLEW_FUN_EXPORT PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV; - -GLEW_FUN_EXPORT PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV; - -GLEW_FUN_EXPORT PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTexImage3DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTextureImage2DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC __glewTextureImage2DMultisampleNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTextureImage3DMultisampleCoverageNV; -GLEW_FUN_EXPORT PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC __glewTextureImage3DMultisampleNV; - -GLEW_FUN_EXPORT PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV; -GLEW_FUN_EXPORT PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV; -GLEW_FUN_EXPORT PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV; -GLEW_FUN_EXPORT PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV; -GLEW_FUN_EXPORT PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV; -GLEW_FUN_EXPORT PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV; -GLEW_FUN_EXPORT PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV; -GLEW_FUN_EXPORT PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV; - -GLEW_FUN_EXPORT PFNGLBINDTRANSFORMFEEDBACKNVPROC __glewBindTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLDELETETRANSFORMFEEDBACKSNVPROC __glewDeleteTransformFeedbacksNV; -GLEW_FUN_EXPORT PFNGLDRAWTRANSFORMFEEDBACKNVPROC __glewDrawTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLGENTRANSFORMFEEDBACKSNVPROC __glewGenTransformFeedbacksNV; -GLEW_FUN_EXPORT PFNGLISTRANSFORMFEEDBACKNVPROC __glewIsTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLPAUSETRANSFORMFEEDBACKNVPROC __glewPauseTransformFeedbackNV; -GLEW_FUN_EXPORT PFNGLRESUMETRANSFORMFEEDBACKNVPROC __glewResumeTransformFeedbackNV; - -GLEW_FUN_EXPORT PFNGLVDPAUFININVPROC __glewVDPAUFiniNV; -GLEW_FUN_EXPORT PFNGLVDPAUGETSURFACEIVNVPROC __glewVDPAUGetSurfaceivNV; -GLEW_FUN_EXPORT PFNGLVDPAUINITNVPROC __glewVDPAUInitNV; -GLEW_FUN_EXPORT PFNGLVDPAUISSURFACENVPROC __glewVDPAUIsSurfaceNV; -GLEW_FUN_EXPORT PFNGLVDPAUMAPSURFACESNVPROC __glewVDPAUMapSurfacesNV; -GLEW_FUN_EXPORT PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC __glewVDPAURegisterOutputSurfaceNV; -GLEW_FUN_EXPORT PFNGLVDPAUREGISTERVIDEOSURFACENVPROC __glewVDPAURegisterVideoSurfaceNV; -GLEW_FUN_EXPORT PFNGLVDPAUSURFACEACCESSNVPROC __glewVDPAUSurfaceAccessNV; -GLEW_FUN_EXPORT PFNGLVDPAUUNMAPSURFACESNVPROC __glewVDPAUUnmapSurfacesNV; -GLEW_FUN_EXPORT PFNGLVDPAUUNREGISTERSURFACENVPROC __glewVDPAUUnregisterSurfaceNV; - -GLEW_FUN_EXPORT PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV; -GLEW_FUN_EXPORT PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV; - -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLI64VNVPROC __glewGetVertexAttribLi64vNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBLUI64VNVPROC __glewGetVertexAttribLui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64NVPROC __glewVertexAttribL1i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1I64VNVPROC __glewVertexAttribL1i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64NVPROC __glewVertexAttribL1ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL1UI64VNVPROC __glewVertexAttribL1ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64NVPROC __glewVertexAttribL2i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2I64VNVPROC __glewVertexAttribL2i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64NVPROC __glewVertexAttribL2ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL2UI64VNVPROC __glewVertexAttribL2ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64NVPROC __glewVertexAttribL3i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3I64VNVPROC __glewVertexAttribL3i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64NVPROC __glewVertexAttribL3ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL3UI64VNVPROC __glewVertexAttribL3ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64NVPROC __glewVertexAttribL4i64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4I64VNVPROC __glewVertexAttribL4i64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64NVPROC __glewVertexAttribL4ui64NV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBL4UI64VNVPROC __glewVertexAttribL4ui64vNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBLFORMATNVPROC __glewVertexAttribLFormatNV; - -GLEW_FUN_EXPORT PFNGLBUFFERADDRESSRANGENVPROC __glewBufferAddressRangeNV; -GLEW_FUN_EXPORT PFNGLCOLORFORMATNVPROC __glewColorFormatNV; -GLEW_FUN_EXPORT PFNGLEDGEFLAGFORMATNVPROC __glewEdgeFlagFormatNV; -GLEW_FUN_EXPORT PFNGLFOGCOORDFORMATNVPROC __glewFogCoordFormatNV; -GLEW_FUN_EXPORT PFNGLGETINTEGERUI64I_VNVPROC __glewGetIntegerui64i_vNV; -GLEW_FUN_EXPORT PFNGLINDEXFORMATNVPROC __glewIndexFormatNV; -GLEW_FUN_EXPORT PFNGLNORMALFORMATNVPROC __glewNormalFormatNV; -GLEW_FUN_EXPORT PFNGLSECONDARYCOLORFORMATNVPROC __glewSecondaryColorFormatNV; -GLEW_FUN_EXPORT PFNGLTEXCOORDFORMATNVPROC __glewTexCoordFormatNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBFORMATNVPROC __glewVertexAttribFormatNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBIFORMATNVPROC __glewVertexAttribIFormatNV; -GLEW_FUN_EXPORT PFNGLVERTEXFORMATNVPROC __glewVertexFormatNV; - -GLEW_FUN_EXPORT PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV; -GLEW_FUN_EXPORT PFNGLBINDPROGRAMNVPROC __glewBindProgramNV; -GLEW_FUN_EXPORT PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV; -GLEW_FUN_EXPORT PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV; -GLEW_FUN_EXPORT PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV; -GLEW_FUN_EXPORT PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV; -GLEW_FUN_EXPORT PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV; -GLEW_FUN_EXPORT PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV; -GLEW_FUN_EXPORT PFNGLISPROGRAMNVPROC __glewIsProgramNV; -GLEW_FUN_EXPORT PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV; -GLEW_FUN_EXPORT PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV; -GLEW_FUN_EXPORT PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV; -GLEW_FUN_EXPORT PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV; -GLEW_FUN_EXPORT PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV; - -GLEW_FUN_EXPORT PFNGLBEGINVIDEOCAPTURENVPROC __glewBeginVideoCaptureNV; -GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC __glewBindVideoCaptureStreamBufferNV; -GLEW_FUN_EXPORT PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC __glewBindVideoCaptureStreamTextureNV; -GLEW_FUN_EXPORT PFNGLENDVIDEOCAPTURENVPROC __glewEndVideoCaptureNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMDVNVPROC __glewGetVideoCaptureStreamdvNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMFVNVPROC __glewGetVideoCaptureStreamfvNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTURESTREAMIVNVPROC __glewGetVideoCaptureStreamivNV; -GLEW_FUN_EXPORT PFNGLGETVIDEOCAPTUREIVNVPROC __glewGetVideoCaptureivNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURENVPROC __glewVideoCaptureNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV; -GLEW_FUN_EXPORT PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV; - -GLEW_FUN_EXPORT PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES; -GLEW_FUN_EXPORT PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES; -GLEW_FUN_EXPORT PFNGLFRUSTUMFOESPROC __glewFrustumfOES; -GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES; -GLEW_FUN_EXPORT PFNGLORTHOFOESPROC __glewOrthofOES; - -GLEW_FUN_EXPORT PFNGLALPHAFUNCXPROC __glewAlphaFuncx; -GLEW_FUN_EXPORT PFNGLCLEARCOLORXPROC __glewClearColorx; -GLEW_FUN_EXPORT PFNGLCLEARDEPTHXPROC __glewClearDepthx; -GLEW_FUN_EXPORT PFNGLCOLOR4XPROC __glewColor4x; -GLEW_FUN_EXPORT PFNGLDEPTHRANGEXPROC __glewDepthRangex; -GLEW_FUN_EXPORT PFNGLFOGXPROC __glewFogx; -GLEW_FUN_EXPORT PFNGLFOGXVPROC __glewFogxv; -GLEW_FUN_EXPORT PFNGLFRUSTUMFPROC __glewFrustumf; -GLEW_FUN_EXPORT PFNGLFRUSTUMXPROC __glewFrustumx; -GLEW_FUN_EXPORT PFNGLLIGHTMODELXPROC __glewLightModelx; -GLEW_FUN_EXPORT PFNGLLIGHTMODELXVPROC __glewLightModelxv; -GLEW_FUN_EXPORT PFNGLLIGHTXPROC __glewLightx; -GLEW_FUN_EXPORT PFNGLLIGHTXVPROC __glewLightxv; -GLEW_FUN_EXPORT PFNGLLINEWIDTHXPROC __glewLineWidthx; -GLEW_FUN_EXPORT PFNGLLOADMATRIXXPROC __glewLoadMatrixx; -GLEW_FUN_EXPORT PFNGLMATERIALXPROC __glewMaterialx; -GLEW_FUN_EXPORT PFNGLMATERIALXVPROC __glewMaterialxv; -GLEW_FUN_EXPORT PFNGLMULTMATRIXXPROC __glewMultMatrixx; -GLEW_FUN_EXPORT PFNGLMULTITEXCOORD4XPROC __glewMultiTexCoord4x; -GLEW_FUN_EXPORT PFNGLNORMAL3XPROC __glewNormal3x; -GLEW_FUN_EXPORT PFNGLORTHOFPROC __glewOrthof; -GLEW_FUN_EXPORT PFNGLORTHOXPROC __glewOrthox; -GLEW_FUN_EXPORT PFNGLPOINTSIZEXPROC __glewPointSizex; -GLEW_FUN_EXPORT PFNGLPOLYGONOFFSETXPROC __glewPolygonOffsetx; -GLEW_FUN_EXPORT PFNGLROTATEXPROC __glewRotatex; -GLEW_FUN_EXPORT PFNGLSAMPLECOVERAGEXPROC __glewSampleCoveragex; -GLEW_FUN_EXPORT PFNGLSCALEXPROC __glewScalex; -GLEW_FUN_EXPORT PFNGLTEXENVXPROC __glewTexEnvx; -GLEW_FUN_EXPORT PFNGLTEXENVXVPROC __glewTexEnvxv; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERXPROC __glewTexParameterx; -GLEW_FUN_EXPORT PFNGLTRANSLATEXPROC __glewTranslatex; - -GLEW_FUN_EXPORT PFNGLCLIPPLANEFPROC __glewClipPlanef; -GLEW_FUN_EXPORT PFNGLCLIPPLANEXPROC __glewClipPlanex; -GLEW_FUN_EXPORT PFNGLGETCLIPPLANEFPROC __glewGetClipPlanef; -GLEW_FUN_EXPORT PFNGLGETCLIPPLANEXPROC __glewGetClipPlanex; -GLEW_FUN_EXPORT PFNGLGETFIXEDVPROC __glewGetFixedv; -GLEW_FUN_EXPORT PFNGLGETLIGHTXVPROC __glewGetLightxv; -GLEW_FUN_EXPORT PFNGLGETMATERIALXVPROC __glewGetMaterialxv; -GLEW_FUN_EXPORT PFNGLGETTEXENVXVPROC __glewGetTexEnvxv; -GLEW_FUN_EXPORT PFNGLGETTEXPARAMETERXVPROC __glewGetTexParameterxv; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERXPROC __glewPointParameterx; -GLEW_FUN_EXPORT PFNGLPOINTPARAMETERXVPROC __glewPointParameterxv; -GLEW_FUN_EXPORT PFNGLPOINTSIZEPOINTEROESPROC __glewPointSizePointerOES; -GLEW_FUN_EXPORT PFNGLTEXPARAMETERXVPROC __glewTexParameterxv; - -GLEW_FUN_EXPORT PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL; - -GLEW_FUN_EXPORT PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL; -GLEW_FUN_EXPORT PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL; - -GLEW_FUN_EXPORT PFNGLLOGMESSAGECALLBACKREGALPROC __glewLogMessageCallbackREGAL; - -GLEW_FUN_EXPORT PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS; -GLEW_FUN_EXPORT PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS; - -GLEW_FUN_EXPORT PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS; -GLEW_FUN_EXPORT PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS; - -GLEW_FUN_EXPORT PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS; -GLEW_FUN_EXPORT PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS; - -GLEW_FUN_EXPORT PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS; -GLEW_FUN_EXPORT PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS; - -GLEW_FUN_EXPORT PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS; -GLEW_FUN_EXPORT PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS; - -GLEW_FUN_EXPORT PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS; -GLEW_FUN_EXPORT PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS; - -GLEW_FUN_EXPORT PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX; -GLEW_FUN_EXPORT PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX; -GLEW_FUN_EXPORT PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX; -GLEW_FUN_EXPORT PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX; -GLEW_FUN_EXPORT PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX; -GLEW_FUN_EXPORT PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX; - -GLEW_FUN_EXPORT PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX; - -GLEW_FUN_EXPORT PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX; - -GLEW_FUN_EXPORT PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX; -GLEW_FUN_EXPORT PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX; -GLEW_FUN_EXPORT PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX; - -GLEW_FUN_EXPORT PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX; - -GLEW_FUN_EXPORT PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX; - -GLEW_FUN_EXPORT PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX; - -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX; -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX; -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX; -GLEW_FUN_EXPORT PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX; - -GLEW_FUN_EXPORT PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX; - -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI; -GLEW_FUN_EXPORT PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI; -GLEW_FUN_EXPORT PFNGLCOLORTABLESGIPROC __glewColorTableSGI; -GLEW_FUN_EXPORT PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI; -GLEW_FUN_EXPORT PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI; - -GLEW_FUN_EXPORT PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX; - -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN; -GLEW_FUN_EXPORT PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN; - -GLEW_FUN_EXPORT PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN; - -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN; - -GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN; -GLEW_FUN_EXPORT PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN; -GLEW_FUN_EXPORT PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN; -GLEW_FUN_EXPORT PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN; - -GLEW_FUN_EXPORT PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN; - -#if defined(GLEW_MX) && !defined(_WIN32) -struct GLEWContextStruct -{ -#endif /* GLEW_MX */ - -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_3; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_4; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_5; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_0; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_2_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_0; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_2; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_3_3; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_0; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_1; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_2; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_3; -GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_4_4; -GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_tbuffer; -GLEW_VAR_EXPORT GLboolean __GLEW_3DFX_texture_compression_FXT1; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_blend_minmax_factor; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_conservative_depth; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_debug_output; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_depth_clamp_separate; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_draw_buffers_blend; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_interleaved_elements; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_multi_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_name_gen_delete; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_performance_monitor; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_pinned_memory; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_query_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sample_positions; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_seamless_cubemap_per_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_stencil_export; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_shader_trinary_minmax; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sparse_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_stencil_operation_extended; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_texture4; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback3_lines_triangles; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_layer; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_tessellator; -GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_viewport_index; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_depth_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_blit; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_framebuffer_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_instanced_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_pack_reverse_row_order; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_program_binary; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt1; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt3; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_compression_dxt5; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_texture_usage; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_timer_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ANGLE_translated_shader_source; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_aux_depth_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_client_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_element_array; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_fence; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_float_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_flush_buffer_range; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_object_purgeable; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_pixel_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_rgb_422; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_row_bytes; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_specular_vector; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_texture_range; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_transform_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_array_range; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_vertex_program_evaluators; -GLEW_VAR_EXPORT GLboolean __GLEW_APPLE_ycbcr_422; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES2_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_ES3_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_arrays_of_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_base_instance; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_bindless_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_blend_func_extended; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_buffer_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_cl_event; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_clear_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_clear_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_color_buffer_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compressed_texture_pixel_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compute_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_compute_variable_group_size; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_conservative_depth; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_copy_image; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_debug_output; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_buffer_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_depth_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_buffers_blend; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_elements_base_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_draw_instanced; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_enhanced_layouts; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_attrib_location; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_explicit_uniform_location; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_coord_conventions; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_layer_viewport; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_program_shadow; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_fragment_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_no_attachments; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_framebuffer_sRGB; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_geometry_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_get_program_binary; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader5; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_gpu_shader_fp64; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_pixel; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_half_float_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_imaging; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_indirect_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_instanced_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_internalformat_query2; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_invalidate_subdata; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_alignment; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_map_buffer_range; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_matrix_palette; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multi_bind; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multi_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_multitexture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_occlusion_query2; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_pixel_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_point_sprite; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_program_interface_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_provoking_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_query_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robust_buffer_access_behavior; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_application_isolation; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_robustness_share_group_isolation; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sample_shading; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sampler_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cube_map; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_seamless_cubemap_per_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_separate_shader_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_atomic_counters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_bit_encoding; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_draw_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_group_vote; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_load_store; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_image_size; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_precision; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_stencil_export; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_storage_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_subroutine; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shader_texture_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_100; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_420pack; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_include; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shading_language_packing; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_shadow_ambient; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sparse_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_stencil_texturing; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_sync; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_tessellation_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_border_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_object_rgb32; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_buffer_range; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_bptc; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_compression_rgtc; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_cube_map_array; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_add; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_combine; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_crossbar; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_env_dot3; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_gather; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirror_clamp_to_edge; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_mirrored_repeat; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_non_power_of_two; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_levels; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_query_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rectangle; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rg; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_rgb10_a2ui; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_stencil8; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_storage_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_swizzle; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_texture_view; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_timer_query; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback2; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback3; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transform_feedback_instanced; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_transpose_matrix; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_uniform_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_bgra; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_attrib_64bit; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_attrib_binding; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_blend; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_program; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_10f_11f_11f_rev; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_viewport_array; -GLEW_VAR_EXPORT GLboolean __GLEW_ARB_window_pos; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_point_sprites; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_combine3; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_texture_env_route; -GLEW_VAR_EXPORT GLboolean __GLEW_ATIX_vertex_shader_output_point_size; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_draw_buffers; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_element_array; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_envmap_bumpmap; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_fragment_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_map_object_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_meminfo; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_pn_triangles; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_separate_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_shader_texture_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_text_fragment_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_compression_3dc; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_env_combine3; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_float; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_texture_mirror_once; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_attrib_array_object; -GLEW_VAR_EXPORT GLboolean __GLEW_ATI_vertex_streams; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_422_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_Cg_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_abgr; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bgra; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_bindable_uniform; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_color; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_equation_separate; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_func_separate; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_logic_op; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_minmax; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_blend_subtract; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_clip_volume_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cmyka; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_color_subtable; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_compiled_vertex_array; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_convolution; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_coordinate_frame; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_copy_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_cull_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_debug_marker; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_depth_bounds_test; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_direct_state_access; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_buffers2; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_instanced; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_draw_range_elements; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fog_coord; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_fragment_lighting; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_blit; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_framebuffer_sRGB; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_geometry_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_program_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_gpu_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_histogram; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_array_formats; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_func; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_material; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_index_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_light_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_misc_attribute; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multi_draw_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_depth_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_float; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_packed_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_paletted_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_pixel_transform_color_table; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_point_parameters; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_polygon_offset; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_provoking_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_rescale_normal; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_shader_objects; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_store; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shared_texture_palette; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_clear_tag; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_two_side; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_stencil_wrap; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_subtexture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture3D; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_array; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_dxt1; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_latc; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_rgtc; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_compression_s3tc; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_cube_map; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_edge_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_add; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_combine; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_env_dot3; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_filter_anisotropic; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_integer; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_lod_bias; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_mirror_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_object; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_perturb_normal; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_rectangle; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_sRGB_decode; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_shared_exponent; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_snorm; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_texture_swizzle; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_timer_query; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_transform_feedback; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_array_bgra; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_attrib_64bit; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_vertex_weighting; -GLEW_VAR_EXPORT GLboolean __GLEW_EXT_x11_sync_object; -GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_frame_terminator; -GLEW_VAR_EXPORT GLboolean __GLEW_GREMEDY_string_marker; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_convolution_border_modes; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_image_transform; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_occlusion_test; -GLEW_VAR_EXPORT GLboolean __GLEW_HP_texture_lighting; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_cull_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_multimode_draw_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_rasterpos_clip; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_static_data; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_texture_mirrored_repeat; -GLEW_VAR_EXPORT GLboolean __GLEW_IBM_vertex_array_lists; -GLEW_VAR_EXPORT GLboolean __GLEW_INGR_color_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_INGR_interlace_read; -GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_map_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_parallel_arrays; -GLEW_VAR_EXPORT GLboolean __GLEW_INTEL_texture_scissor; -GLEW_VAR_EXPORT GLboolean __GLEW_KHR_debug; -GLEW_VAR_EXPORT GLboolean __GLEW_KHR_texture_compression_astc_ldr; -GLEW_VAR_EXPORT GLboolean __GLEW_KTX_buffer_region; -GLEW_VAR_EXPORT GLboolean __GLEW_MESAX_texture_stack; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_pack_invert; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_resize_buffers; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_window_pos; -GLEW_VAR_EXPORT GLboolean __GLEW_MESA_ycbcr_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_NVX_conditional_render; -GLEW_VAR_EXPORT GLboolean __GLEW_NVX_gpu_memory_info; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_multi_draw_indirect; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_bindless_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_equation_advanced_coherent; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_blend_square; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_compute_program5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_conditional_render; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_depth_to_color; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_copy_image; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_deep_texture3D; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_buffer_float; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_depth_range_unclamped; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_draw_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_evaluators; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_explicit_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fence; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_float_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fog_distance; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_fragment_program_option; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_framebuffer_multisample_coverage; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_geometry_shader4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program5_mem_extended; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_program_fp64; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_gpu_shader5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_half_float; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_light_max_exponent; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_coverage; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_multisample_filter_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_occlusion_query; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_packed_depth_stencil; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_parameter_buffer_object2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_path_rendering; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_pixel_data_range; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_point_sprite; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_present_video; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_primitive_restart; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_register_combiners2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_counters; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_storage_buffer_object; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_barrier; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_compression_vtc; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_env_combine4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_expand_normal; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_rectangle; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_texture_shader3; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_transform_feedback2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vdpau_interop; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_array_range2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_attrib_integer_64bit; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_buffer_unified_memory; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program1_1; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program2_option; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program3; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_vertex_program4; -GLEW_VAR_EXPORT GLboolean __GLEW_NV_video_capture; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_byte_coordinates; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_compressed_paletted_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_read_format; -GLEW_VAR_EXPORT GLboolean __GLEW_OES_single_precision; -GLEW_VAR_EXPORT GLboolean __GLEW_OML_interlace; -GLEW_VAR_EXPORT GLboolean __GLEW_OML_resample; -GLEW_VAR_EXPORT GLboolean __GLEW_OML_subsample; -GLEW_VAR_EXPORT GLboolean __GLEW_PGI_misc_hints; -GLEW_VAR_EXPORT GLboolean __GLEW_PGI_vertex_hints; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_0_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_ES1_1_compatibility; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_enable; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_error_string; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_extension_query; -GLEW_VAR_EXPORT GLboolean __GLEW_REGAL_log; -GLEW_VAR_EXPORT GLboolean __GLEW_REND_screen_coordinates; -GLEW_VAR_EXPORT GLboolean __GLEW_S3_s3tc; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_color_range; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_detail_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_fog_function; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_generate_mipmap; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_multisample; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_pixel_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_point_line_texgen; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_sharpen_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture4D; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_border_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_edge_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_filter4; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_lod; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIS_texture_select; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_histogram; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_async_pixel; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_blend_alpha_minmax; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_clipmap; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_convolution_accuracy; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_depth_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_flush_raster; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_offset; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fog_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_fragment_specular_lighting; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_framezoom; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_interlace; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ir_instrument1; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_list_priority; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_pixel_texture_bits; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_reference_plane; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_resample; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_shadow_ambient; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_sprite; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_tag_sample_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_add_env; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_coordinate_clamp; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_lod_bias; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_multi_buffer; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_range; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_texture_scale_bias; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_vertex_preclip_hint; -GLEW_VAR_EXPORT GLboolean __GLEW_SGIX_ycrcb; -GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_matrix; -GLEW_VAR_EXPORT GLboolean __GLEW_SGI_color_table; -GLEW_VAR_EXPORT GLboolean __GLEW_SGI_texture_color_table; -GLEW_VAR_EXPORT GLboolean __GLEW_SUNX_constant_data; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_convolution_border_modes; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_global_alpha; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_mesh_array; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_read_video_pixels; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_slice_accum; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_triangle_list; -GLEW_VAR_EXPORT GLboolean __GLEW_SUN_vertex; -GLEW_VAR_EXPORT GLboolean __GLEW_WIN_phong_shading; -GLEW_VAR_EXPORT GLboolean __GLEW_WIN_specular_fog; -GLEW_VAR_EXPORT GLboolean __GLEW_WIN_swap_hint; - -#ifdef GLEW_MX -}; /* GLEWContextStruct */ -#endif /* GLEW_MX */ - -/* ------------------------------------------------------------------------- */ - -/* error codes */ -#define GLEW_OK 0 -#define GLEW_NO_ERROR 0 -#define GLEW_ERROR_NO_GL_VERSION 1 /* missing GL version */ -#define GLEW_ERROR_GL_VERSION_10_ONLY 2 /* Need at least OpenGL 1.1 */ -#define GLEW_ERROR_GLX_VERSION_11_ONLY 3 /* Need at least GLX 1.2 */ - -/* string codes */ -#define GLEW_VERSION 1 -#define GLEW_VERSION_MAJOR 2 -#define GLEW_VERSION_MINOR 3 -#define GLEW_VERSION_MICRO 4 - -/* API */ -#ifdef GLEW_MX - -typedef struct GLEWContextStruct GLEWContext; -GLEWAPI GLenum GLEWAPIENTRY glewContextInit (GLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext *ctx, const char *name); - -#define glewInit() glewContextInit(glewGetContext()) -#define glewIsSupported(x) glewContextIsSupported(glewGetContext(), x) -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&(glewGetContext()->x)) -#ifdef _WIN32 -# define GLEW_GET_FUN(x) glewGetContext()->x -#else -# define GLEW_GET_FUN(x) x -#endif - -#else /* GLEW_MX */ - -GLEWAPI GLenum GLEWAPIENTRY glewInit (void); -GLEWAPI GLboolean GLEWAPIENTRY glewIsSupported (const char *name); -#define glewIsExtensionSupported(x) glewIsSupported(x) - -#define GLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLEW_GET_FUN(x) x - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean glewExperimental; -GLEWAPI GLboolean GLEWAPIENTRY glewGetExtension (const char *name); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error); -GLEWAPI const GLubyte * GLEWAPIENTRY glewGetString (GLenum name); - -#ifdef __cplusplus -} -#endif - -#ifdef GLEW_APIENTRY_DEFINED -#undef GLEW_APIENTRY_DEFINED -#undef APIENTRY -#undef GLAPIENTRY -#define GLAPIENTRY -#endif - -#ifdef GLEW_CALLBACK_DEFINED -#undef GLEW_CALLBACK_DEFINED -#undef CALLBACK -#endif - -#ifdef GLEW_WINGDIAPI_DEFINED -#undef GLEW_WINGDIAPI_DEFINED -#undef WINGDIAPI -#endif - -#undef GLAPI -/* #undef GLEWAPI */ - -#endif /* __glew_h__ */ diff --git a/Engine/lib/glew/include/GL/glxew.h b/Engine/lib/glew/include/GL/glxew.h deleted file mode 100644 index 76a5f0d82a..0000000000 --- a/Engine/lib/glew/include/GL/glxew.h +++ /dev/null @@ -1,1669 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* - * Mesa 3-D graphics library - * Version: 7.0 - * - * Copyright (C) 1999-2007 Brian Paul 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 - * BRIAN PAUL 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. - */ - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#ifndef __glxew_h__ -#define __glxew_h__ -#define __GLXEW_H__ - -#ifdef __glxext_h_ -#error glxext.h included before glxew.h -#endif - -#if defined(GLX_H) || defined(__GLX_glx_h__) || defined(__glx_h__) -#error glx.h included before glxew.h -#endif - -#define __glxext_h_ - -#define GLX_H -#define __GLX_glx_h__ -#define __glx_h__ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* ---------------------------- GLX_VERSION_1_0 --------------------------- */ - -#ifndef GLX_VERSION_1_0 -#define GLX_VERSION_1_0 1 - -#define GLX_USE_GL 1 -#define GLX_BUFFER_SIZE 2 -#define GLX_LEVEL 3 -#define GLX_RGBA 4 -#define GLX_DOUBLEBUFFER 5 -#define GLX_STEREO 6 -#define GLX_AUX_BUFFERS 7 -#define GLX_RED_SIZE 8 -#define GLX_GREEN_SIZE 9 -#define GLX_BLUE_SIZE 10 -#define GLX_ALPHA_SIZE 11 -#define GLX_DEPTH_SIZE 12 -#define GLX_STENCIL_SIZE 13 -#define GLX_ACCUM_RED_SIZE 14 -#define GLX_ACCUM_GREEN_SIZE 15 -#define GLX_ACCUM_BLUE_SIZE 16 -#define GLX_ACCUM_ALPHA_SIZE 17 -#define GLX_BAD_SCREEN 1 -#define GLX_BAD_ATTRIBUTE 2 -#define GLX_NO_EXTENSION 3 -#define GLX_BAD_VISUAL 4 -#define GLX_BAD_CONTEXT 5 -#define GLX_BAD_VALUE 6 -#define GLX_BAD_ENUM 7 - -typedef XID GLXDrawable; -typedef XID GLXPixmap; -#ifdef __sun -typedef struct __glXContextRec *GLXContext; -#else -typedef struct __GLXcontextRec *GLXContext; -#endif - -typedef unsigned int GLXVideoDeviceNV; - -extern Bool glXQueryExtension (Display *dpy, int *errorBase, int *eventBase); -extern Bool glXQueryVersion (Display *dpy, int *major, int *minor); -extern int glXGetConfig (Display *dpy, XVisualInfo *vis, int attrib, int *value); -extern XVisualInfo* glXChooseVisual (Display *dpy, int screen, int *attribList); -extern GLXPixmap glXCreateGLXPixmap (Display *dpy, XVisualInfo *vis, Pixmap pixmap); -extern void glXDestroyGLXPixmap (Display *dpy, GLXPixmap pix); -extern GLXContext glXCreateContext (Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct); -extern void glXDestroyContext (Display *dpy, GLXContext ctx); -extern Bool glXIsDirect (Display *dpy, GLXContext ctx); -extern void glXCopyContext (Display *dpy, GLXContext src, GLXContext dst, GLulong mask); -extern Bool glXMakeCurrent (Display *dpy, GLXDrawable drawable, GLXContext ctx); -extern GLXContext glXGetCurrentContext (void); -extern GLXDrawable glXGetCurrentDrawable (void); -extern void glXWaitGL (void); -extern void glXWaitX (void); -extern void glXSwapBuffers (Display *dpy, GLXDrawable drawable); -extern void glXUseXFont (Font font, int first, int count, int listBase); - -#define GLXEW_VERSION_1_0 GLXEW_GET_VAR(__GLXEW_VERSION_1_0) - -#endif /* GLX_VERSION_1_0 */ - -/* ---------------------------- GLX_VERSION_1_1 --------------------------- */ - -#ifndef GLX_VERSION_1_1 -#define GLX_VERSION_1_1 - -#define GLX_VENDOR 0x1 -#define GLX_VERSION 0x2 -#define GLX_EXTENSIONS 0x3 - -extern const char* glXQueryExtensionsString (Display *dpy, int screen); -extern const char* glXGetClientString (Display *dpy, int name); -extern const char* glXQueryServerString (Display *dpy, int screen, int name); - -#define GLXEW_VERSION_1_1 GLXEW_GET_VAR(__GLXEW_VERSION_1_1) - -#endif /* GLX_VERSION_1_1 */ - -/* ---------------------------- GLX_VERSION_1_2 ---------------------------- */ - -#ifndef GLX_VERSION_1_2 -#define GLX_VERSION_1_2 1 - -typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void); - -#define glXGetCurrentDisplay GLXEW_GET_FUN(__glewXGetCurrentDisplay) - -#define GLXEW_VERSION_1_2 GLXEW_GET_VAR(__GLXEW_VERSION_1_2) - -#endif /* GLX_VERSION_1_2 */ - -/* ---------------------------- GLX_VERSION_1_3 ---------------------------- */ - -#ifndef GLX_VERSION_1_3 -#define GLX_VERSION_1_3 1 - -#define GLX_RGBA_BIT 0x00000001 -#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 -#define GLX_WINDOW_BIT 0x00000001 -#define GLX_COLOR_INDEX_BIT 0x00000002 -#define GLX_PIXMAP_BIT 0x00000002 -#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 -#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 -#define GLX_PBUFFER_BIT 0x00000004 -#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 -#define GLX_AUX_BUFFERS_BIT 0x00000010 -#define GLX_CONFIG_CAVEAT 0x20 -#define GLX_DEPTH_BUFFER_BIT 0x00000020 -#define GLX_X_VISUAL_TYPE 0x22 -#define GLX_TRANSPARENT_TYPE 0x23 -#define GLX_TRANSPARENT_INDEX_VALUE 0x24 -#define GLX_TRANSPARENT_RED_VALUE 0x25 -#define GLX_TRANSPARENT_GREEN_VALUE 0x26 -#define GLX_TRANSPARENT_BLUE_VALUE 0x27 -#define GLX_TRANSPARENT_ALPHA_VALUE 0x28 -#define GLX_STENCIL_BUFFER_BIT 0x00000040 -#define GLX_ACCUM_BUFFER_BIT 0x00000080 -#define GLX_NONE 0x8000 -#define GLX_SLOW_CONFIG 0x8001 -#define GLX_TRUE_COLOR 0x8002 -#define GLX_DIRECT_COLOR 0x8003 -#define GLX_PSEUDO_COLOR 0x8004 -#define GLX_STATIC_COLOR 0x8005 -#define GLX_GRAY_SCALE 0x8006 -#define GLX_STATIC_GRAY 0x8007 -#define GLX_TRANSPARENT_RGB 0x8008 -#define GLX_TRANSPARENT_INDEX 0x8009 -#define GLX_VISUAL_ID 0x800B -#define GLX_SCREEN 0x800C -#define GLX_NON_CONFORMANT_CONFIG 0x800D -#define GLX_DRAWABLE_TYPE 0x8010 -#define GLX_RENDER_TYPE 0x8011 -#define GLX_X_RENDERABLE 0x8012 -#define GLX_FBCONFIG_ID 0x8013 -#define GLX_RGBA_TYPE 0x8014 -#define GLX_COLOR_INDEX_TYPE 0x8015 -#define GLX_MAX_PBUFFER_WIDTH 0x8016 -#define GLX_MAX_PBUFFER_HEIGHT 0x8017 -#define GLX_MAX_PBUFFER_PIXELS 0x8018 -#define GLX_PRESERVED_CONTENTS 0x801B -#define GLX_LARGEST_PBUFFER 0x801C -#define GLX_WIDTH 0x801D -#define GLX_HEIGHT 0x801E -#define GLX_EVENT_MASK 0x801F -#define GLX_DAMAGED 0x8020 -#define GLX_SAVED 0x8021 -#define GLX_WINDOW 0x8022 -#define GLX_PBUFFER 0x8023 -#define GLX_PBUFFER_HEIGHT 0x8040 -#define GLX_PBUFFER_WIDTH 0x8041 -#define GLX_PBUFFER_CLOBBER_MASK 0x08000000 -#define GLX_DONT_CARE 0xFFFFFFFF - -typedef XID GLXFBConfigID; -typedef XID GLXPbuffer; -typedef XID GLXWindow; -typedef struct __GLXFBConfigRec *GLXFBConfig; - -typedef struct { - int event_type; - int draw_type; - unsigned long serial; - Bool send_event; - Display *display; - GLXDrawable drawable; - unsigned int buffer_mask; - unsigned int aux_buffer; - int x, y; - int width, height; - int count; -} GLXPbufferClobberEvent; -typedef union __GLXEvent { - GLXPbufferClobberEvent glxpbufferclobber; - long pad[24]; -} GLXEvent; - -typedef GLXFBConfig* ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); -typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); -typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list); -typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list); -typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list); -typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf); -typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap); -typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win); -typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void); -typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value); -typedef GLXFBConfig* ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements); -typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask); -typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config); -typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *display, GLXDrawable draw, GLXDrawable read, GLXContext ctx); -typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value); -typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value); -typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask); - -#define glXChooseFBConfig GLXEW_GET_FUN(__glewXChooseFBConfig) -#define glXCreateNewContext GLXEW_GET_FUN(__glewXCreateNewContext) -#define glXCreatePbuffer GLXEW_GET_FUN(__glewXCreatePbuffer) -#define glXCreatePixmap GLXEW_GET_FUN(__glewXCreatePixmap) -#define glXCreateWindow GLXEW_GET_FUN(__glewXCreateWindow) -#define glXDestroyPbuffer GLXEW_GET_FUN(__glewXDestroyPbuffer) -#define glXDestroyPixmap GLXEW_GET_FUN(__glewXDestroyPixmap) -#define glXDestroyWindow GLXEW_GET_FUN(__glewXDestroyWindow) -#define glXGetCurrentReadDrawable GLXEW_GET_FUN(__glewXGetCurrentReadDrawable) -#define glXGetFBConfigAttrib GLXEW_GET_FUN(__glewXGetFBConfigAttrib) -#define glXGetFBConfigs GLXEW_GET_FUN(__glewXGetFBConfigs) -#define glXGetSelectedEvent GLXEW_GET_FUN(__glewXGetSelectedEvent) -#define glXGetVisualFromFBConfig GLXEW_GET_FUN(__glewXGetVisualFromFBConfig) -#define glXMakeContextCurrent GLXEW_GET_FUN(__glewXMakeContextCurrent) -#define glXQueryContext GLXEW_GET_FUN(__glewXQueryContext) -#define glXQueryDrawable GLXEW_GET_FUN(__glewXQueryDrawable) -#define glXSelectEvent GLXEW_GET_FUN(__glewXSelectEvent) - -#define GLXEW_VERSION_1_3 GLXEW_GET_VAR(__GLXEW_VERSION_1_3) - -#endif /* GLX_VERSION_1_3 */ - -/* ---------------------------- GLX_VERSION_1_4 ---------------------------- */ - -#ifndef GLX_VERSION_1_4 -#define GLX_VERSION_1_4 1 - -#define GLX_SAMPLE_BUFFERS 100000 -#define GLX_SAMPLES 100001 - -extern void ( * glXGetProcAddress (const GLubyte *procName)) (void); - -#define GLXEW_VERSION_1_4 GLXEW_GET_VAR(__GLXEW_VERSION_1_4) - -#endif /* GLX_VERSION_1_4 */ - -/* -------------------------- GLX_3DFX_multisample ------------------------- */ - -#ifndef GLX_3DFX_multisample -#define GLX_3DFX_multisample 1 - -#define GLX_SAMPLE_BUFFERS_3DFX 0x8050 -#define GLX_SAMPLES_3DFX 0x8051 - -#define GLXEW_3DFX_multisample GLXEW_GET_VAR(__GLXEW_3DFX_multisample) - -#endif /* GLX_3DFX_multisample */ - -/* ------------------------ GLX_AMD_gpu_association ------------------------ */ - -#ifndef GLX_AMD_gpu_association -#define GLX_AMD_gpu_association 1 - -#define GLX_GPU_VENDOR_AMD 0x1F00 -#define GLX_GPU_RENDERER_STRING_AMD 0x1F01 -#define GLX_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 -#define GLX_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 -#define GLX_GPU_RAM_AMD 0x21A3 -#define GLX_GPU_CLOCK_AMD 0x21A4 -#define GLX_GPU_NUM_PIPES_AMD 0x21A5 -#define GLX_GPU_NUM_SIMD_AMD 0x21A6 -#define GLX_GPU_NUM_RB_AMD 0x21A7 -#define GLX_GPU_NUM_SPI_AMD 0x21A8 - -typedef void ( * PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC) (GLXContext dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef GLXContext ( * PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC) (unsigned int id, GLXContext share_list); -typedef GLXContext ( * PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (unsigned int id, GLXContext share_context, const int* attribList); -typedef Bool ( * PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC) (GLXContext ctx); -typedef unsigned int ( * PFNGLXGETCONTEXTGPUIDAMDPROC) (GLXContext ctx); -typedef GLXContext ( * PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); -typedef unsigned int ( * PFNGLXGETGPUIDSAMDPROC) (unsigned int maxCount, unsigned int* ids); -typedef int ( * PFNGLXGETGPUINFOAMDPROC) (unsigned int id, int property, GLenum dataType, unsigned int size, void* data); -typedef Bool ( * PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (GLXContext ctx); - -#define glXBlitContextFramebufferAMD GLXEW_GET_FUN(__glewXBlitContextFramebufferAMD) -#define glXCreateAssociatedContextAMD GLXEW_GET_FUN(__glewXCreateAssociatedContextAMD) -#define glXCreateAssociatedContextAttribsAMD GLXEW_GET_FUN(__glewXCreateAssociatedContextAttribsAMD) -#define glXDeleteAssociatedContextAMD GLXEW_GET_FUN(__glewXDeleteAssociatedContextAMD) -#define glXGetContextGPUIDAMD GLXEW_GET_FUN(__glewXGetContextGPUIDAMD) -#define glXGetCurrentAssociatedContextAMD GLXEW_GET_FUN(__glewXGetCurrentAssociatedContextAMD) -#define glXGetGPUIDsAMD GLXEW_GET_FUN(__glewXGetGPUIDsAMD) -#define glXGetGPUInfoAMD GLXEW_GET_FUN(__glewXGetGPUInfoAMD) -#define glXMakeAssociatedContextCurrentAMD GLXEW_GET_FUN(__glewXMakeAssociatedContextCurrentAMD) - -#define GLXEW_AMD_gpu_association GLXEW_GET_VAR(__GLXEW_AMD_gpu_association) - -#endif /* GLX_AMD_gpu_association */ - -/* ------------------------- GLX_ARB_create_context ------------------------ */ - -#ifndef GLX_ARB_create_context -#define GLX_ARB_create_context 1 - -#define GLX_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 -#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define GLX_CONTEXT_FLAGS_ARB 0x2094 - -typedef GLXContext ( * PFNGLXCREATECONTEXTATTRIBSARBPROC) (Display* dpy, GLXFBConfig config, GLXContext share_context, Bool direct, const int *attrib_list); - -#define glXCreateContextAttribsARB GLXEW_GET_FUN(__glewXCreateContextAttribsARB) - -#define GLXEW_ARB_create_context GLXEW_GET_VAR(__GLXEW_ARB_create_context) - -#endif /* GLX_ARB_create_context */ - -/* --------------------- GLX_ARB_create_context_profile -------------------- */ - -#ifndef GLX_ARB_create_context_profile -#define GLX_ARB_create_context_profile 1 - -#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126 - -#define GLXEW_ARB_create_context_profile GLXEW_GET_VAR(__GLXEW_ARB_create_context_profile) - -#endif /* GLX_ARB_create_context_profile */ - -/* ------------------- GLX_ARB_create_context_robustness ------------------- */ - -#ifndef GLX_ARB_create_context_robustness -#define GLX_ARB_create_context_robustness 1 - -#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261 - -#define GLXEW_ARB_create_context_robustness GLXEW_GET_VAR(__GLXEW_ARB_create_context_robustness) - -#endif /* GLX_ARB_create_context_robustness */ - -/* ------------------------- GLX_ARB_fbconfig_float ------------------------ */ - -#ifndef GLX_ARB_fbconfig_float -#define GLX_ARB_fbconfig_float 1 - -#define GLX_RGBA_FLOAT_BIT 0x00000004 -#define GLX_RGBA_FLOAT_TYPE 0x20B9 - -#define GLXEW_ARB_fbconfig_float GLXEW_GET_VAR(__GLXEW_ARB_fbconfig_float) - -#endif /* GLX_ARB_fbconfig_float */ - -/* ------------------------ GLX_ARB_framebuffer_sRGB ----------------------- */ - -#ifndef GLX_ARB_framebuffer_sRGB -#define GLX_ARB_framebuffer_sRGB 1 - -#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20B2 - -#define GLXEW_ARB_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_ARB_framebuffer_sRGB) - -#endif /* GLX_ARB_framebuffer_sRGB */ - -/* ------------------------ GLX_ARB_get_proc_address ----------------------- */ - -#ifndef GLX_ARB_get_proc_address -#define GLX_ARB_get_proc_address 1 - -extern void ( * glXGetProcAddressARB (const GLubyte *procName)) (void); - -#define GLXEW_ARB_get_proc_address GLXEW_GET_VAR(__GLXEW_ARB_get_proc_address) - -#endif /* GLX_ARB_get_proc_address */ - -/* -------------------------- GLX_ARB_multisample -------------------------- */ - -#ifndef GLX_ARB_multisample -#define GLX_ARB_multisample 1 - -#define GLX_SAMPLE_BUFFERS_ARB 100000 -#define GLX_SAMPLES_ARB 100001 - -#define GLXEW_ARB_multisample GLXEW_GET_VAR(__GLXEW_ARB_multisample) - -#endif /* GLX_ARB_multisample */ - -/* ---------------- GLX_ARB_robustness_application_isolation --------------- */ - -#ifndef GLX_ARB_robustness_application_isolation -#define GLX_ARB_robustness_application_isolation 1 - -#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define GLXEW_ARB_robustness_application_isolation GLXEW_GET_VAR(__GLXEW_ARB_robustness_application_isolation) - -#endif /* GLX_ARB_robustness_application_isolation */ - -/* ---------------- GLX_ARB_robustness_share_group_isolation --------------- */ - -#ifndef GLX_ARB_robustness_share_group_isolation -#define GLX_ARB_robustness_share_group_isolation 1 - -#define GLX_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define GLXEW_ARB_robustness_share_group_isolation GLXEW_GET_VAR(__GLXEW_ARB_robustness_share_group_isolation) - -#endif /* GLX_ARB_robustness_share_group_isolation */ - -/* ---------------------- GLX_ARB_vertex_buffer_object --------------------- */ - -#ifndef GLX_ARB_vertex_buffer_object -#define GLX_ARB_vertex_buffer_object 1 - -#define GLX_CONTEXT_ALLOW_BUFFER_BYTE_ORDER_MISMATCH_ARB 0x2095 - -#define GLXEW_ARB_vertex_buffer_object GLXEW_GET_VAR(__GLXEW_ARB_vertex_buffer_object) - -#endif /* GLX_ARB_vertex_buffer_object */ - -/* ----------------------- GLX_ATI_pixel_format_float ---------------------- */ - -#ifndef GLX_ATI_pixel_format_float -#define GLX_ATI_pixel_format_float 1 - -#define GLX_RGBA_FLOAT_ATI_BIT 0x00000100 - -#define GLXEW_ATI_pixel_format_float GLXEW_GET_VAR(__GLXEW_ATI_pixel_format_float) - -#endif /* GLX_ATI_pixel_format_float */ - -/* ------------------------- GLX_ATI_render_texture ------------------------ */ - -#ifndef GLX_ATI_render_texture -#define GLX_ATI_render_texture 1 - -#define GLX_BIND_TO_TEXTURE_RGB_ATI 0x9800 -#define GLX_BIND_TO_TEXTURE_RGBA_ATI 0x9801 -#define GLX_TEXTURE_FORMAT_ATI 0x9802 -#define GLX_TEXTURE_TARGET_ATI 0x9803 -#define GLX_MIPMAP_TEXTURE_ATI 0x9804 -#define GLX_TEXTURE_RGB_ATI 0x9805 -#define GLX_TEXTURE_RGBA_ATI 0x9806 -#define GLX_NO_TEXTURE_ATI 0x9807 -#define GLX_TEXTURE_CUBE_MAP_ATI 0x9808 -#define GLX_TEXTURE_1D_ATI 0x9809 -#define GLX_TEXTURE_2D_ATI 0x980A -#define GLX_MIPMAP_LEVEL_ATI 0x980B -#define GLX_CUBE_MAP_FACE_ATI 0x980C -#define GLX_TEXTURE_CUBE_MAP_POSITIVE_X_ATI 0x980D -#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_X_ATI 0x980E -#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Y_ATI 0x980F -#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Y_ATI 0x9810 -#define GLX_TEXTURE_CUBE_MAP_POSITIVE_Z_ATI 0x9811 -#define GLX_TEXTURE_CUBE_MAP_NEGATIVE_Z_ATI 0x9812 -#define GLX_FRONT_LEFT_ATI 0x9813 -#define GLX_FRONT_RIGHT_ATI 0x9814 -#define GLX_BACK_LEFT_ATI 0x9815 -#define GLX_BACK_RIGHT_ATI 0x9816 -#define GLX_AUX0_ATI 0x9817 -#define GLX_AUX1_ATI 0x9818 -#define GLX_AUX2_ATI 0x9819 -#define GLX_AUX3_ATI 0x981A -#define GLX_AUX4_ATI 0x981B -#define GLX_AUX5_ATI 0x981C -#define GLX_AUX6_ATI 0x981D -#define GLX_AUX7_ATI 0x981E -#define GLX_AUX8_ATI 0x981F -#define GLX_AUX9_ATI 0x9820 -#define GLX_BIND_TO_TEXTURE_LUMINANCE_ATI 0x9821 -#define GLX_BIND_TO_TEXTURE_INTENSITY_ATI 0x9822 - -typedef void ( * PFNGLXBINDTEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); -typedef void ( * PFNGLXDRAWABLEATTRIBATIPROC) (Display *dpy, GLXDrawable draw, const int *attrib_list); -typedef void ( * PFNGLXRELEASETEXIMAGEATIPROC) (Display *dpy, GLXPbuffer pbuf, int buffer); - -#define glXBindTexImageATI GLXEW_GET_FUN(__glewXBindTexImageATI) -#define glXDrawableAttribATI GLXEW_GET_FUN(__glewXDrawableAttribATI) -#define glXReleaseTexImageATI GLXEW_GET_FUN(__glewXReleaseTexImageATI) - -#define GLXEW_ATI_render_texture GLXEW_GET_VAR(__GLXEW_ATI_render_texture) - -#endif /* GLX_ATI_render_texture */ - -/* --------------------------- GLX_EXT_buffer_age -------------------------- */ - -#ifndef GLX_EXT_buffer_age -#define GLX_EXT_buffer_age 1 - -#define GLX_BACK_BUFFER_AGE_EXT 0x20F4 - -#define GLXEW_EXT_buffer_age GLXEW_GET_VAR(__GLXEW_EXT_buffer_age) - -#endif /* GLX_EXT_buffer_age */ - -/* ------------------- GLX_EXT_create_context_es2_profile ------------------ */ - -#ifndef GLX_EXT_create_context_es2_profile -#define GLX_EXT_create_context_es2_profile 1 - -#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 - -#define GLXEW_EXT_create_context_es2_profile GLXEW_GET_VAR(__GLXEW_EXT_create_context_es2_profile) - -#endif /* GLX_EXT_create_context_es2_profile */ - -/* ------------------- GLX_EXT_create_context_es_profile ------------------- */ - -#ifndef GLX_EXT_create_context_es_profile -#define GLX_EXT_create_context_es_profile 1 - -#define GLX_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 - -#define GLXEW_EXT_create_context_es_profile GLXEW_GET_VAR(__GLXEW_EXT_create_context_es_profile) - -#endif /* GLX_EXT_create_context_es_profile */ - -/* --------------------- GLX_EXT_fbconfig_packed_float --------------------- */ - -#ifndef GLX_EXT_fbconfig_packed_float -#define GLX_EXT_fbconfig_packed_float 1 - -#define GLX_RGBA_UNSIGNED_FLOAT_BIT_EXT 0x00000008 -#define GLX_RGBA_UNSIGNED_FLOAT_TYPE_EXT 0x20B1 - -#define GLXEW_EXT_fbconfig_packed_float GLXEW_GET_VAR(__GLXEW_EXT_fbconfig_packed_float) - -#endif /* GLX_EXT_fbconfig_packed_float */ - -/* ------------------------ GLX_EXT_framebuffer_sRGB ----------------------- */ - -#ifndef GLX_EXT_framebuffer_sRGB -#define GLX_EXT_framebuffer_sRGB 1 - -#define GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20B2 - -#define GLXEW_EXT_framebuffer_sRGB GLXEW_GET_VAR(__GLXEW_EXT_framebuffer_sRGB) - -#endif /* GLX_EXT_framebuffer_sRGB */ - -/* ------------------------- GLX_EXT_import_context ------------------------ */ - -#ifndef GLX_EXT_import_context -#define GLX_EXT_import_context 1 - -#define GLX_SHARE_CONTEXT_EXT 0x800A -#define GLX_VISUAL_ID_EXT 0x800B -#define GLX_SCREEN_EXT 0x800C - -typedef XID GLXContextID; - -typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display* dpy, GLXContext context); -typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (const GLXContext context); -typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display* dpy, GLXContextID contextID); -typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context, int attribute,int *value); - -#define glXFreeContextEXT GLXEW_GET_FUN(__glewXFreeContextEXT) -#define glXGetContextIDEXT GLXEW_GET_FUN(__glewXGetContextIDEXT) -#define glXImportContextEXT GLXEW_GET_FUN(__glewXImportContextEXT) -#define glXQueryContextInfoEXT GLXEW_GET_FUN(__glewXQueryContextInfoEXT) - -#define GLXEW_EXT_import_context GLXEW_GET_VAR(__GLXEW_EXT_import_context) - -#endif /* GLX_EXT_import_context */ - -/* -------------------------- GLX_EXT_scene_marker ------------------------- */ - -#ifndef GLX_EXT_scene_marker -#define GLX_EXT_scene_marker 1 - -#define GLXEW_EXT_scene_marker GLXEW_GET_VAR(__GLXEW_EXT_scene_marker) - -#endif /* GLX_EXT_scene_marker */ - -/* -------------------------- GLX_EXT_swap_control ------------------------- */ - -#ifndef GLX_EXT_swap_control -#define GLX_EXT_swap_control 1 - -#define GLX_SWAP_INTERVAL_EXT 0x20F1 -#define GLX_MAX_SWAP_INTERVAL_EXT 0x20F2 - -typedef void ( * PFNGLXSWAPINTERVALEXTPROC) (Display* dpy, GLXDrawable drawable, int interval); - -#define glXSwapIntervalEXT GLXEW_GET_FUN(__glewXSwapIntervalEXT) - -#define GLXEW_EXT_swap_control GLXEW_GET_VAR(__GLXEW_EXT_swap_control) - -#endif /* GLX_EXT_swap_control */ - -/* ----------------------- GLX_EXT_swap_control_tear ----------------------- */ - -#ifndef GLX_EXT_swap_control_tear -#define GLX_EXT_swap_control_tear 1 - -#define GLX_LATE_SWAPS_TEAR_EXT 0x20F3 - -#define GLXEW_EXT_swap_control_tear GLXEW_GET_VAR(__GLXEW_EXT_swap_control_tear) - -#endif /* GLX_EXT_swap_control_tear */ - -/* ---------------------- GLX_EXT_texture_from_pixmap ---------------------- */ - -#ifndef GLX_EXT_texture_from_pixmap -#define GLX_EXT_texture_from_pixmap 1 - -#define GLX_TEXTURE_1D_BIT_EXT 0x00000001 -#define GLX_TEXTURE_2D_BIT_EXT 0x00000002 -#define GLX_TEXTURE_RECTANGLE_BIT_EXT 0x00000004 -#define GLX_BIND_TO_TEXTURE_RGB_EXT 0x20D0 -#define GLX_BIND_TO_TEXTURE_RGBA_EXT 0x20D1 -#define GLX_BIND_TO_MIPMAP_TEXTURE_EXT 0x20D2 -#define GLX_BIND_TO_TEXTURE_TARGETS_EXT 0x20D3 -#define GLX_Y_INVERTED_EXT 0x20D4 -#define GLX_TEXTURE_FORMAT_EXT 0x20D5 -#define GLX_TEXTURE_TARGET_EXT 0x20D6 -#define GLX_MIPMAP_TEXTURE_EXT 0x20D7 -#define GLX_TEXTURE_FORMAT_NONE_EXT 0x20D8 -#define GLX_TEXTURE_FORMAT_RGB_EXT 0x20D9 -#define GLX_TEXTURE_FORMAT_RGBA_EXT 0x20DA -#define GLX_TEXTURE_1D_EXT 0x20DB -#define GLX_TEXTURE_2D_EXT 0x20DC -#define GLX_TEXTURE_RECTANGLE_EXT 0x20DD -#define GLX_FRONT_LEFT_EXT 0x20DE -#define GLX_FRONT_RIGHT_EXT 0x20DF -#define GLX_BACK_LEFT_EXT 0x20E0 -#define GLX_BACK_RIGHT_EXT 0x20E1 -#define GLX_AUX0_EXT 0x20E2 -#define GLX_AUX1_EXT 0x20E3 -#define GLX_AUX2_EXT 0x20E4 -#define GLX_AUX3_EXT 0x20E5 -#define GLX_AUX4_EXT 0x20E6 -#define GLX_AUX5_EXT 0x20E7 -#define GLX_AUX6_EXT 0x20E8 -#define GLX_AUX7_EXT 0x20E9 -#define GLX_AUX8_EXT 0x20EA -#define GLX_AUX9_EXT 0x20EB - -typedef void ( * PFNGLXBINDTEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer, const int *attrib_list); -typedef void ( * PFNGLXRELEASETEXIMAGEEXTPROC) (Display* display, GLXDrawable drawable, int buffer); - -#define glXBindTexImageEXT GLXEW_GET_FUN(__glewXBindTexImageEXT) -#define glXReleaseTexImageEXT GLXEW_GET_FUN(__glewXReleaseTexImageEXT) - -#define GLXEW_EXT_texture_from_pixmap GLXEW_GET_VAR(__GLXEW_EXT_texture_from_pixmap) - -#endif /* GLX_EXT_texture_from_pixmap */ - -/* -------------------------- GLX_EXT_visual_info -------------------------- */ - -#ifndef GLX_EXT_visual_info -#define GLX_EXT_visual_info 1 - -#define GLX_X_VISUAL_TYPE_EXT 0x22 -#define GLX_TRANSPARENT_TYPE_EXT 0x23 -#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 -#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 -#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 -#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 -#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 -#define GLX_NONE_EXT 0x8000 -#define GLX_TRUE_COLOR_EXT 0x8002 -#define GLX_DIRECT_COLOR_EXT 0x8003 -#define GLX_PSEUDO_COLOR_EXT 0x8004 -#define GLX_STATIC_COLOR_EXT 0x8005 -#define GLX_GRAY_SCALE_EXT 0x8006 -#define GLX_STATIC_GRAY_EXT 0x8007 -#define GLX_TRANSPARENT_RGB_EXT 0x8008 -#define GLX_TRANSPARENT_INDEX_EXT 0x8009 - -#define GLXEW_EXT_visual_info GLXEW_GET_VAR(__GLXEW_EXT_visual_info) - -#endif /* GLX_EXT_visual_info */ - -/* ------------------------- GLX_EXT_visual_rating ------------------------- */ - -#ifndef GLX_EXT_visual_rating -#define GLX_EXT_visual_rating 1 - -#define GLX_VISUAL_CAVEAT_EXT 0x20 -#define GLX_SLOW_VISUAL_EXT 0x8001 -#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D - -#define GLXEW_EXT_visual_rating GLXEW_GET_VAR(__GLXEW_EXT_visual_rating) - -#endif /* GLX_EXT_visual_rating */ - -/* -------------------------- GLX_INTEL_swap_event ------------------------- */ - -#ifndef GLX_INTEL_swap_event -#define GLX_INTEL_swap_event 1 - -#define GLX_EXCHANGE_COMPLETE_INTEL 0x8180 -#define GLX_COPY_COMPLETE_INTEL 0x8181 -#define GLX_FLIP_COMPLETE_INTEL 0x8182 -#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000 - -#define GLXEW_INTEL_swap_event GLXEW_GET_VAR(__GLXEW_INTEL_swap_event) - -#endif /* GLX_INTEL_swap_event */ - -/* -------------------------- GLX_MESA_agp_offset -------------------------- */ - -#ifndef GLX_MESA_agp_offset -#define GLX_MESA_agp_offset 1 - -typedef unsigned int ( * PFNGLXGETAGPOFFSETMESAPROC) (const void* pointer); - -#define glXGetAGPOffsetMESA GLXEW_GET_FUN(__glewXGetAGPOffsetMESA) - -#define GLXEW_MESA_agp_offset GLXEW_GET_VAR(__GLXEW_MESA_agp_offset) - -#endif /* GLX_MESA_agp_offset */ - -/* ------------------------ GLX_MESA_copy_sub_buffer ----------------------- */ - -#ifndef GLX_MESA_copy_sub_buffer -#define GLX_MESA_copy_sub_buffer 1 - -typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display* dpy, GLXDrawable drawable, int x, int y, int width, int height); - -#define glXCopySubBufferMESA GLXEW_GET_FUN(__glewXCopySubBufferMESA) - -#define GLXEW_MESA_copy_sub_buffer GLXEW_GET_VAR(__GLXEW_MESA_copy_sub_buffer) - -#endif /* GLX_MESA_copy_sub_buffer */ - -/* ------------------------ GLX_MESA_pixmap_colormap ----------------------- */ - -#ifndef GLX_MESA_pixmap_colormap -#define GLX_MESA_pixmap_colormap 1 - -typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display* dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap); - -#define glXCreateGLXPixmapMESA GLXEW_GET_FUN(__glewXCreateGLXPixmapMESA) - -#define GLXEW_MESA_pixmap_colormap GLXEW_GET_VAR(__GLXEW_MESA_pixmap_colormap) - -#endif /* GLX_MESA_pixmap_colormap */ - -/* ------------------------ GLX_MESA_release_buffers ----------------------- */ - -#ifndef GLX_MESA_release_buffers -#define GLX_MESA_release_buffers 1 - -typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display* dpy, GLXDrawable d); - -#define glXReleaseBuffersMESA GLXEW_GET_FUN(__glewXReleaseBuffersMESA) - -#define GLXEW_MESA_release_buffers GLXEW_GET_VAR(__GLXEW_MESA_release_buffers) - -#endif /* GLX_MESA_release_buffers */ - -/* ------------------------- GLX_MESA_set_3dfx_mode ------------------------ */ - -#ifndef GLX_MESA_set_3dfx_mode -#define GLX_MESA_set_3dfx_mode 1 - -#define GLX_3DFX_WINDOW_MODE_MESA 0x1 -#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2 - -typedef GLboolean ( * PFNGLXSET3DFXMODEMESAPROC) (GLint mode); - -#define glXSet3DfxModeMESA GLXEW_GET_FUN(__glewXSet3DfxModeMESA) - -#define GLXEW_MESA_set_3dfx_mode GLXEW_GET_VAR(__GLXEW_MESA_set_3dfx_mode) - -#endif /* GLX_MESA_set_3dfx_mode */ - -/* ------------------------- GLX_MESA_swap_control ------------------------- */ - -#ifndef GLX_MESA_swap_control -#define GLX_MESA_swap_control 1 - -typedef int ( * PFNGLXGETSWAPINTERVALMESAPROC) (void); -typedef int ( * PFNGLXSWAPINTERVALMESAPROC) (unsigned int interval); - -#define glXGetSwapIntervalMESA GLXEW_GET_FUN(__glewXGetSwapIntervalMESA) -#define glXSwapIntervalMESA GLXEW_GET_FUN(__glewXSwapIntervalMESA) - -#define GLXEW_MESA_swap_control GLXEW_GET_VAR(__GLXEW_MESA_swap_control) - -#endif /* GLX_MESA_swap_control */ - -/* --------------------------- GLX_NV_copy_image --------------------------- */ - -#ifndef GLX_NV_copy_image -#define GLX_NV_copy_image 1 - -typedef void ( * PFNGLXCOPYIMAGESUBDATANVPROC) (Display *dpy, GLXContext srcCtx, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLXContext dstCtx, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); - -#define glXCopyImageSubDataNV GLXEW_GET_FUN(__glewXCopyImageSubDataNV) - -#define GLXEW_NV_copy_image GLXEW_GET_VAR(__GLXEW_NV_copy_image) - -#endif /* GLX_NV_copy_image */ - -/* -------------------------- GLX_NV_float_buffer -------------------------- */ - -#ifndef GLX_NV_float_buffer -#define GLX_NV_float_buffer 1 - -#define GLX_FLOAT_COMPONENTS_NV 0x20B0 - -#define GLXEW_NV_float_buffer GLXEW_GET_VAR(__GLXEW_NV_float_buffer) - -#endif /* GLX_NV_float_buffer */ - -/* ---------------------- GLX_NV_multisample_coverage ---------------------- */ - -#ifndef GLX_NV_multisample_coverage -#define GLX_NV_multisample_coverage 1 - -#define GLX_COLOR_SAMPLES_NV 0x20B3 -#define GLX_COVERAGE_SAMPLES_NV 100001 - -#define GLXEW_NV_multisample_coverage GLXEW_GET_VAR(__GLXEW_NV_multisample_coverage) - -#endif /* GLX_NV_multisample_coverage */ - -/* -------------------------- GLX_NV_present_video ------------------------- */ - -#ifndef GLX_NV_present_video -#define GLX_NV_present_video 1 - -#define GLX_NUM_VIDEO_SLOTS_NV 0x20F0 - -typedef int ( * PFNGLXBINDVIDEODEVICENVPROC) (Display* dpy, unsigned int video_slot, unsigned int video_device, const int *attrib_list); -typedef unsigned int* ( * PFNGLXENUMERATEVIDEODEVICESNVPROC) (Display *dpy, int screen, int *nelements); - -#define glXBindVideoDeviceNV GLXEW_GET_FUN(__glewXBindVideoDeviceNV) -#define glXEnumerateVideoDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoDevicesNV) - -#define GLXEW_NV_present_video GLXEW_GET_VAR(__GLXEW_NV_present_video) - -#endif /* GLX_NV_present_video */ - -/* --------------------------- GLX_NV_swap_group --------------------------- */ - -#ifndef GLX_NV_swap_group -#define GLX_NV_swap_group 1 - -typedef Bool ( * PFNGLXBINDSWAPBARRIERNVPROC) (Display* dpy, GLuint group, GLuint barrier); -typedef Bool ( * PFNGLXJOINSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint group); -typedef Bool ( * PFNGLXQUERYFRAMECOUNTNVPROC) (Display* dpy, int screen, GLuint *count); -typedef Bool ( * PFNGLXQUERYMAXSWAPGROUPSNVPROC) (Display* dpy, int screen, GLuint *maxGroups, GLuint *maxBarriers); -typedef Bool ( * PFNGLXQUERYSWAPGROUPNVPROC) (Display* dpy, GLXDrawable drawable, GLuint *group, GLuint *barrier); -typedef Bool ( * PFNGLXRESETFRAMECOUNTNVPROC) (Display* dpy, int screen); - -#define glXBindSwapBarrierNV GLXEW_GET_FUN(__glewXBindSwapBarrierNV) -#define glXJoinSwapGroupNV GLXEW_GET_FUN(__glewXJoinSwapGroupNV) -#define glXQueryFrameCountNV GLXEW_GET_FUN(__glewXQueryFrameCountNV) -#define glXQueryMaxSwapGroupsNV GLXEW_GET_FUN(__glewXQueryMaxSwapGroupsNV) -#define glXQuerySwapGroupNV GLXEW_GET_FUN(__glewXQuerySwapGroupNV) -#define glXResetFrameCountNV GLXEW_GET_FUN(__glewXResetFrameCountNV) - -#define GLXEW_NV_swap_group GLXEW_GET_VAR(__GLXEW_NV_swap_group) - -#endif /* GLX_NV_swap_group */ - -/* ----------------------- GLX_NV_vertex_array_range ----------------------- */ - -#ifndef GLX_NV_vertex_array_range -#define GLX_NV_vertex_array_range 1 - -typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); -typedef void ( * PFNGLXFREEMEMORYNVPROC) (void *pointer); - -#define glXAllocateMemoryNV GLXEW_GET_FUN(__glewXAllocateMemoryNV) -#define glXFreeMemoryNV GLXEW_GET_FUN(__glewXFreeMemoryNV) - -#define GLXEW_NV_vertex_array_range GLXEW_GET_VAR(__GLXEW_NV_vertex_array_range) - -#endif /* GLX_NV_vertex_array_range */ - -/* -------------------------- GLX_NV_video_capture ------------------------- */ - -#ifndef GLX_NV_video_capture -#define GLX_NV_video_capture 1 - -#define GLX_DEVICE_ID_NV 0x20CD -#define GLX_UNIQUE_ID_NV 0x20CE -#define GLX_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - -typedef XID GLXVideoCaptureDeviceNV; - -typedef int ( * PFNGLXBINDVIDEOCAPTUREDEVICENVPROC) (Display* dpy, unsigned int video_capture_slot, GLXVideoCaptureDeviceNV device); -typedef GLXVideoCaptureDeviceNV * ( * PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC) (Display* dpy, int screen, int *nelements); -typedef void ( * PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device); -typedef int ( * PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device, int attribute, int *value); -typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoCaptureDeviceNV device); - -#define glXBindVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXBindVideoCaptureDeviceNV) -#define glXEnumerateVideoCaptureDevicesNV GLXEW_GET_FUN(__glewXEnumerateVideoCaptureDevicesNV) -#define glXLockVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXLockVideoCaptureDeviceNV) -#define glXQueryVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXQueryVideoCaptureDeviceNV) -#define glXReleaseVideoCaptureDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoCaptureDeviceNV) - -#define GLXEW_NV_video_capture GLXEW_GET_VAR(__GLXEW_NV_video_capture) - -#endif /* GLX_NV_video_capture */ - -/* -------------------------- GLX_NV_video_output -------------------------- */ - -#ifndef GLX_NV_video_output -#define GLX_NV_video_output 1 - -#define GLX_VIDEO_OUT_COLOR_NV 0x20C3 -#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4 -#define GLX_VIDEO_OUT_DEPTH_NV 0x20C5 -#define GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 -#define GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 -#define GLX_VIDEO_OUT_FRAME_NV 0x20C8 -#define GLX_VIDEO_OUT_FIELD_1_NV 0x20C9 -#define GLX_VIDEO_OUT_FIELD_2_NV 0x20CA -#define GLX_VIDEO_OUT_STACKED_FIELDS_1_2_NV 0x20CB -#define GLX_VIDEO_OUT_STACKED_FIELDS_2_1_NV 0x20CC - -typedef int ( * PFNGLXBINDVIDEOIMAGENVPROC) (Display* dpy, GLXVideoDeviceNV VideoDevice, GLXPbuffer pbuf, int iVideoBuffer); -typedef int ( * PFNGLXGETVIDEODEVICENVPROC) (Display* dpy, int screen, int numVideoDevices, GLXVideoDeviceNV *pVideoDevice); -typedef int ( * PFNGLXGETVIDEOINFONVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice, unsigned long *pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); -typedef int ( * PFNGLXRELEASEVIDEODEVICENVPROC) (Display* dpy, int screen, GLXVideoDeviceNV VideoDevice); -typedef int ( * PFNGLXRELEASEVIDEOIMAGENVPROC) (Display* dpy, GLXPbuffer pbuf); -typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display* dpy, GLXPbuffer pbuf, int iBufferType, unsigned long *pulCounterPbuffer, GLboolean bBlock); - -#define glXBindVideoImageNV GLXEW_GET_FUN(__glewXBindVideoImageNV) -#define glXGetVideoDeviceNV GLXEW_GET_FUN(__glewXGetVideoDeviceNV) -#define glXGetVideoInfoNV GLXEW_GET_FUN(__glewXGetVideoInfoNV) -#define glXReleaseVideoDeviceNV GLXEW_GET_FUN(__glewXReleaseVideoDeviceNV) -#define glXReleaseVideoImageNV GLXEW_GET_FUN(__glewXReleaseVideoImageNV) -#define glXSendPbufferToVideoNV GLXEW_GET_FUN(__glewXSendPbufferToVideoNV) - -#define GLXEW_NV_video_output GLXEW_GET_VAR(__GLXEW_NV_video_output) - -#endif /* GLX_NV_video_output */ - -/* -------------------------- GLX_OML_swap_method -------------------------- */ - -#ifndef GLX_OML_swap_method -#define GLX_OML_swap_method 1 - -#define GLX_SWAP_METHOD_OML 0x8060 -#define GLX_SWAP_EXCHANGE_OML 0x8061 -#define GLX_SWAP_COPY_OML 0x8062 -#define GLX_SWAP_UNDEFINED_OML 0x8063 - -#define GLXEW_OML_swap_method GLXEW_GET_VAR(__GLXEW_OML_swap_method) - -#endif /* GLX_OML_swap_method */ - -/* -------------------------- GLX_OML_sync_control ------------------------- */ - -#ifndef GLX_OML_sync_control -#define GLX_OML_sync_control 1 - -typedef Bool ( * PFNGLXGETMSCRATEOMLPROC) (Display* dpy, GLXDrawable drawable, int32_t* numerator, int32_t* denominator); -typedef Bool ( * PFNGLXGETSYNCVALUESOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t* ust, int64_t* msc, int64_t* sbc); -typedef int64_t ( * PFNGLXSWAPBUFFERSMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder); -typedef Bool ( * PFNGLXWAITFORMSCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_msc, int64_t divisor, int64_t remainder, int64_t* ust, int64_t* msc, int64_t* sbc); -typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, int64_t target_sbc, int64_t* ust, int64_t* msc, int64_t* sbc); - -#define glXGetMscRateOML GLXEW_GET_FUN(__glewXGetMscRateOML) -#define glXGetSyncValuesOML GLXEW_GET_FUN(__glewXGetSyncValuesOML) -#define glXSwapBuffersMscOML GLXEW_GET_FUN(__glewXSwapBuffersMscOML) -#define glXWaitForMscOML GLXEW_GET_FUN(__glewXWaitForMscOML) -#define glXWaitForSbcOML GLXEW_GET_FUN(__glewXWaitForSbcOML) - -#define GLXEW_OML_sync_control GLXEW_GET_VAR(__GLXEW_OML_sync_control) - -#endif /* GLX_OML_sync_control */ - -/* ------------------------ GLX_SGIS_blended_overlay ----------------------- */ - -#ifndef GLX_SGIS_blended_overlay -#define GLX_SGIS_blended_overlay 1 - -#define GLX_BLENDED_RGBA_SGIS 0x8025 - -#define GLXEW_SGIS_blended_overlay GLXEW_GET_VAR(__GLXEW_SGIS_blended_overlay) - -#endif /* GLX_SGIS_blended_overlay */ - -/* -------------------------- GLX_SGIS_color_range ------------------------- */ - -#ifndef GLX_SGIS_color_range -#define GLX_SGIS_color_range 1 - -#define GLXEW_SGIS_color_range GLXEW_GET_VAR(__GLXEW_SGIS_color_range) - -#endif /* GLX_SGIS_color_range */ - -/* -------------------------- GLX_SGIS_multisample ------------------------- */ - -#ifndef GLX_SGIS_multisample -#define GLX_SGIS_multisample 1 - -#define GLX_SAMPLE_BUFFERS_SGIS 100000 -#define GLX_SAMPLES_SGIS 100001 - -#define GLXEW_SGIS_multisample GLXEW_GET_VAR(__GLXEW_SGIS_multisample) - -#endif /* GLX_SGIS_multisample */ - -/* ---------------------- GLX_SGIS_shared_multisample ---------------------- */ - -#ifndef GLX_SGIS_shared_multisample -#define GLX_SGIS_shared_multisample 1 - -#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026 -#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027 - -#define GLXEW_SGIS_shared_multisample GLXEW_GET_VAR(__GLXEW_SGIS_shared_multisample) - -#endif /* GLX_SGIS_shared_multisample */ - -/* --------------------------- GLX_SGIX_fbconfig --------------------------- */ - -#ifndef GLX_SGIX_fbconfig -#define GLX_SGIX_fbconfig 1 - -#define GLX_WINDOW_BIT_SGIX 0x00000001 -#define GLX_RGBA_BIT_SGIX 0x00000001 -#define GLX_PIXMAP_BIT_SGIX 0x00000002 -#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002 -#define GLX_SCREEN_EXT 0x800C -#define GLX_DRAWABLE_TYPE_SGIX 0x8010 -#define GLX_RENDER_TYPE_SGIX 0x8011 -#define GLX_X_RENDERABLE_SGIX 0x8012 -#define GLX_FBCONFIG_ID_SGIX 0x8013 -#define GLX_RGBA_TYPE_SGIX 0x8014 -#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015 - -typedef XID GLXFBConfigIDSGIX; -typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; - -typedef GLXFBConfigSGIX* ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements); -typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct); -typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display* dpy, GLXFBConfig config, Pixmap pixmap); -typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display* dpy, GLXFBConfigSGIX config, int attribute, int *value); -typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display* dpy, XVisualInfo *vis); -typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfig config); - -#define glXChooseFBConfigSGIX GLXEW_GET_FUN(__glewXChooseFBConfigSGIX) -#define glXCreateContextWithConfigSGIX GLXEW_GET_FUN(__glewXCreateContextWithConfigSGIX) -#define glXCreateGLXPixmapWithConfigSGIX GLXEW_GET_FUN(__glewXCreateGLXPixmapWithConfigSGIX) -#define glXGetFBConfigAttribSGIX GLXEW_GET_FUN(__glewXGetFBConfigAttribSGIX) -#define glXGetFBConfigFromVisualSGIX GLXEW_GET_FUN(__glewXGetFBConfigFromVisualSGIX) -#define glXGetVisualFromFBConfigSGIX GLXEW_GET_FUN(__glewXGetVisualFromFBConfigSGIX) - -#define GLXEW_SGIX_fbconfig GLXEW_GET_VAR(__GLXEW_SGIX_fbconfig) - -#endif /* GLX_SGIX_fbconfig */ - -/* --------------------------- GLX_SGIX_hyperpipe -------------------------- */ - -#ifndef GLX_SGIX_hyperpipe -#define GLX_SGIX_hyperpipe 1 - -#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001 -#define GLX_PIPE_RECT_SGIX 0x00000001 -#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002 -#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002 -#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003 -#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004 -#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80 -#define GLX_BAD_HYPERPIPE_CONFIG_SGIX 91 -#define GLX_BAD_HYPERPIPE_SGIX 92 -#define GLX_HYPERPIPE_ID_SGIX 0x8030 - -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int networkId; -} GLXHyperpipeNetworkSGIX; -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int XOrigin; - int YOrigin; - int maxHeight; - int maxWidth; -} GLXPipeRectLimits; -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int channel; - unsigned int participationType; - int timeSlice; -} GLXHyperpipeConfigSGIX; -typedef struct { - char pipeName[GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX]; - int srcXOrigin; - int srcYOrigin; - int srcWidth; - int srcHeight; - int destXOrigin; - int destYOrigin; - int destWidth; - int destHeight; -} GLXPipeRect; - -typedef int ( * PFNGLXBINDHYPERPIPESGIXPROC) (Display *dpy, int hpId); -typedef int ( * PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId); -typedef int ( * PFNGLXHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList); -typedef int ( * PFNGLXHYPERPIPECONFIGSGIXPROC) (Display *dpy, int networkId, int npipes, GLXHyperpipeConfigSGIX *cfg, int *hpId); -typedef int ( * PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *returnAttribList); -typedef int ( * PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC) (Display *dpy, int timeSlice, int attrib, int size, void *attribList, void *returnAttribList); -typedef GLXHyperpipeConfigSGIX * ( * PFNGLXQUERYHYPERPIPECONFIGSGIXPROC) (Display *dpy, int hpId, int *npipes); -typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Display *dpy, int *npipes); - -#define glXBindHyperpipeSGIX GLXEW_GET_FUN(__glewXBindHyperpipeSGIX) -#define glXDestroyHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXDestroyHyperpipeConfigSGIX) -#define glXHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXHyperpipeAttribSGIX) -#define glXHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXHyperpipeConfigSGIX) -#define glXQueryHyperpipeAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeAttribSGIX) -#define glXQueryHyperpipeBestAttribSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeBestAttribSGIX) -#define glXQueryHyperpipeConfigSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeConfigSGIX) -#define glXQueryHyperpipeNetworkSGIX GLXEW_GET_FUN(__glewXQueryHyperpipeNetworkSGIX) - -#define GLXEW_SGIX_hyperpipe GLXEW_GET_VAR(__GLXEW_SGIX_hyperpipe) - -#endif /* GLX_SGIX_hyperpipe */ - -/* ---------------------------- GLX_SGIX_pbuffer --------------------------- */ - -#ifndef GLX_SGIX_pbuffer -#define GLX_SGIX_pbuffer 1 - -#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001 -#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002 -#define GLX_PBUFFER_BIT_SGIX 0x00000004 -#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004 -#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008 -#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010 -#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020 -#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040 -#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080 -#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100 -#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016 -#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017 -#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018 -#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019 -#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A -#define GLX_PRESERVED_CONTENTS_SGIX 0x801B -#define GLX_LARGEST_PBUFFER_SGIX 0x801C -#define GLX_WIDTH_SGIX 0x801D -#define GLX_HEIGHT_SGIX 0x801E -#define GLX_EVENT_MASK_SGIX 0x801F -#define GLX_DAMAGED_SGIX 0x8020 -#define GLX_SAVED_SGIX 0x8021 -#define GLX_WINDOW_SGIX 0x8022 -#define GLX_PBUFFER_SGIX 0x8023 -#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000 - -typedef XID GLXPbufferSGIX; -typedef struct { int type; unsigned long serial; Bool send_event; Display *display; GLXDrawable drawable; int event_type; int draw_type; unsigned int mask; int x, y; int width, height; int count; } GLXBufferClobberEventSGIX; - -typedef GLXPbuffer ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display* dpy, GLXFBConfig config, unsigned int width, unsigned int height, int *attrib_list); -typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf); -typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long *mask); -typedef void ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display* dpy, GLXPbuffer pbuf, int attribute, unsigned int *value); -typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display* dpy, GLXDrawable drawable, unsigned long mask); - -#define glXCreateGLXPbufferSGIX GLXEW_GET_FUN(__glewXCreateGLXPbufferSGIX) -#define glXDestroyGLXPbufferSGIX GLXEW_GET_FUN(__glewXDestroyGLXPbufferSGIX) -#define glXGetSelectedEventSGIX GLXEW_GET_FUN(__glewXGetSelectedEventSGIX) -#define glXQueryGLXPbufferSGIX GLXEW_GET_FUN(__glewXQueryGLXPbufferSGIX) -#define glXSelectEventSGIX GLXEW_GET_FUN(__glewXSelectEventSGIX) - -#define GLXEW_SGIX_pbuffer GLXEW_GET_VAR(__GLXEW_SGIX_pbuffer) - -#endif /* GLX_SGIX_pbuffer */ - -/* ------------------------- GLX_SGIX_swap_barrier ------------------------- */ - -#ifndef GLX_SGIX_swap_barrier -#define GLX_SGIX_swap_barrier 1 - -typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier); -typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max); - -#define glXBindSwapBarrierSGIX GLXEW_GET_FUN(__glewXBindSwapBarrierSGIX) -#define glXQueryMaxSwapBarriersSGIX GLXEW_GET_FUN(__glewXQueryMaxSwapBarriersSGIX) - -#define GLXEW_SGIX_swap_barrier GLXEW_GET_VAR(__GLXEW_SGIX_swap_barrier) - -#endif /* GLX_SGIX_swap_barrier */ - -/* -------------------------- GLX_SGIX_swap_group -------------------------- */ - -#ifndef GLX_SGIX_swap_group -#define GLX_SGIX_swap_group 1 - -typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member); - -#define glXJoinSwapGroupSGIX GLXEW_GET_FUN(__glewXJoinSwapGroupSGIX) - -#define GLXEW_SGIX_swap_group GLXEW_GET_VAR(__GLXEW_SGIX_swap_group) - -#endif /* GLX_SGIX_swap_group */ - -/* ------------------------- GLX_SGIX_video_resize ------------------------- */ - -#ifndef GLX_SGIX_video_resize -#define GLX_SGIX_video_resize 1 - -#define GLX_SYNC_FRAME_SGIX 0x00000000 -#define GLX_SYNC_SWAP_SGIX 0x00000001 - -typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display* display, int screen, int channel, Window window); -typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int x, int y, int w, int h); -typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display* display, int screen, int channel, GLenum synctype); -typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display* display, int screen, int channel, int *x, int *y, int *w, int *h); -typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display* display, int screen, int channel, int *dx, int *dy, int *dw, int *dh); - -#define glXBindChannelToWindowSGIX GLXEW_GET_FUN(__glewXBindChannelToWindowSGIX) -#define glXChannelRectSGIX GLXEW_GET_FUN(__glewXChannelRectSGIX) -#define glXChannelRectSyncSGIX GLXEW_GET_FUN(__glewXChannelRectSyncSGIX) -#define glXQueryChannelDeltasSGIX GLXEW_GET_FUN(__glewXQueryChannelDeltasSGIX) -#define glXQueryChannelRectSGIX GLXEW_GET_FUN(__glewXQueryChannelRectSGIX) - -#define GLXEW_SGIX_video_resize GLXEW_GET_VAR(__GLXEW_SGIX_video_resize) - -#endif /* GLX_SGIX_video_resize */ - -/* ---------------------- GLX_SGIX_visual_select_group --------------------- */ - -#ifndef GLX_SGIX_visual_select_group -#define GLX_SGIX_visual_select_group 1 - -#define GLX_VISUAL_SELECT_GROUP_SGIX 0x8028 - -#define GLXEW_SGIX_visual_select_group GLXEW_GET_VAR(__GLXEW_SGIX_visual_select_group) - -#endif /* GLX_SGIX_visual_select_group */ - -/* ---------------------------- GLX_SGI_cushion ---------------------------- */ - -#ifndef GLX_SGI_cushion -#define GLX_SGI_cushion 1 - -typedef void ( * PFNGLXCUSHIONSGIPROC) (Display* dpy, Window window, float cushion); - -#define glXCushionSGI GLXEW_GET_FUN(__glewXCushionSGI) - -#define GLXEW_SGI_cushion GLXEW_GET_VAR(__GLXEW_SGI_cushion) - -#endif /* GLX_SGI_cushion */ - -/* ----------------------- GLX_SGI_make_current_read ----------------------- */ - -#ifndef GLX_SGI_make_current_read -#define GLX_SGI_make_current_read 1 - -typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void); -typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx); - -#define glXGetCurrentReadDrawableSGI GLXEW_GET_FUN(__glewXGetCurrentReadDrawableSGI) -#define glXMakeCurrentReadSGI GLXEW_GET_FUN(__glewXMakeCurrentReadSGI) - -#define GLXEW_SGI_make_current_read GLXEW_GET_VAR(__GLXEW_SGI_make_current_read) - -#endif /* GLX_SGI_make_current_read */ - -/* -------------------------- GLX_SGI_swap_control ------------------------- */ - -#ifndef GLX_SGI_swap_control -#define GLX_SGI_swap_control 1 - -typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval); - -#define glXSwapIntervalSGI GLXEW_GET_FUN(__glewXSwapIntervalSGI) - -#define GLXEW_SGI_swap_control GLXEW_GET_VAR(__GLXEW_SGI_swap_control) - -#endif /* GLX_SGI_swap_control */ - -/* --------------------------- GLX_SGI_video_sync -------------------------- */ - -#ifndef GLX_SGI_video_sync -#define GLX_SGI_video_sync 1 - -typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int* count); -typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int* count); - -#define glXGetVideoSyncSGI GLXEW_GET_FUN(__glewXGetVideoSyncSGI) -#define glXWaitVideoSyncSGI GLXEW_GET_FUN(__glewXWaitVideoSyncSGI) - -#define GLXEW_SGI_video_sync GLXEW_GET_VAR(__GLXEW_SGI_video_sync) - -#endif /* GLX_SGI_video_sync */ - -/* --------------------- GLX_SUN_get_transparent_index --------------------- */ - -#ifndef GLX_SUN_get_transparent_index -#define GLX_SUN_get_transparent_index 1 - -typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display* dpy, Window overlay, Window underlay, unsigned long *pTransparentIndex); - -#define glXGetTransparentIndexSUN GLXEW_GET_FUN(__glewXGetTransparentIndexSUN) - -#define GLXEW_SUN_get_transparent_index GLXEW_GET_VAR(__GLXEW_SUN_get_transparent_index) - -#endif /* GLX_SUN_get_transparent_index */ - -/* -------------------------- GLX_SUN_video_resize ------------------------- */ - -#ifndef GLX_SUN_video_resize -#define GLX_SUN_video_resize 1 - -#define GLX_VIDEO_RESIZE_SUN 0x8171 -#define GL_VIDEO_RESIZE_COMPENSATION_SUN 0x85CD - -typedef int ( * PFNGLXGETVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float* factor); -typedef int ( * PFNGLXVIDEORESIZESUNPROC) (Display* display, GLXDrawable window, float factor); - -#define glXGetVideoResizeSUN GLXEW_GET_FUN(__glewXGetVideoResizeSUN) -#define glXVideoResizeSUN GLXEW_GET_FUN(__glewXVideoResizeSUN) - -#define GLXEW_SUN_video_resize GLXEW_GET_VAR(__GLXEW_SUN_video_resize) - -#endif /* GLX_SUN_video_resize */ - -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT -#else -#define GLXEW_FUN_EXPORT GLEW_FUN_EXPORT -#define GLXEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ - -GLXEW_FUN_EXPORT PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay; - -GLXEW_FUN_EXPORT PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig; -GLXEW_FUN_EXPORT PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext; -GLXEW_FUN_EXPORT PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer; -GLXEW_FUN_EXPORT PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap; -GLXEW_FUN_EXPORT PFNGLXCREATEWINDOWPROC __glewXCreateWindow; -GLXEW_FUN_EXPORT PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer; -GLXEW_FUN_EXPORT PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap; -GLXEW_FUN_EXPORT PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow; -GLXEW_FUN_EXPORT PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs; -GLXEW_FUN_EXPORT PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent; -GLXEW_FUN_EXPORT PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig; -GLXEW_FUN_EXPORT PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent; -GLXEW_FUN_EXPORT PFNGLXQUERYCONTEXTPROC __glewXQueryContext; -GLXEW_FUN_EXPORT PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable; -GLXEW_FUN_EXPORT PFNGLXSELECTEVENTPROC __glewXSelectEvent; - -GLXEW_FUN_EXPORT PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC __glewXBlitContextFramebufferAMD; -GLXEW_FUN_EXPORT PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC __glewXCreateAssociatedContextAMD; -GLXEW_FUN_EXPORT PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __glewXCreateAssociatedContextAttribsAMD; -GLXEW_FUN_EXPORT PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC __glewXDeleteAssociatedContextAMD; -GLXEW_FUN_EXPORT PFNGLXGETCONTEXTGPUIDAMDPROC __glewXGetContextGPUIDAMD; -GLXEW_FUN_EXPORT PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC __glewXGetCurrentAssociatedContextAMD; -GLXEW_FUN_EXPORT PFNGLXGETGPUIDSAMDPROC __glewXGetGPUIDsAMD; -GLXEW_FUN_EXPORT PFNGLXGETGPUINFOAMDPROC __glewXGetGPUInfoAMD; -GLXEW_FUN_EXPORT PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __glewXMakeAssociatedContextCurrentAMD; - -GLXEW_FUN_EXPORT PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB; - -GLXEW_FUN_EXPORT PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI; -GLXEW_FUN_EXPORT PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI; -GLXEW_FUN_EXPORT PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI; - -GLXEW_FUN_EXPORT PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT; -GLXEW_FUN_EXPORT PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT; -GLXEW_FUN_EXPORT PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT; -GLXEW_FUN_EXPORT PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT; - -GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALEXTPROC __glewXSwapIntervalEXT; - -GLXEW_FUN_EXPORT PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT; -GLXEW_FUN_EXPORT PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT; - -GLXEW_FUN_EXPORT PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA; - -GLXEW_FUN_EXPORT PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA; - -GLXEW_FUN_EXPORT PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA; - -GLXEW_FUN_EXPORT PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA; - -GLXEW_FUN_EXPORT PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA; - -GLXEW_FUN_EXPORT PFNGLXGETSWAPINTERVALMESAPROC __glewXGetSwapIntervalMESA; -GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALMESAPROC __glewXSwapIntervalMESA; - -GLXEW_FUN_EXPORT PFNGLXCOPYIMAGESUBDATANVPROC __glewXCopyImageSubDataNV; - -GLXEW_FUN_EXPORT PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV; -GLXEW_FUN_EXPORT PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV; - -GLXEW_FUN_EXPORT PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV; -GLXEW_FUN_EXPORT PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV; -GLXEW_FUN_EXPORT PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV; -GLXEW_FUN_EXPORT PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV; -GLXEW_FUN_EXPORT PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV; -GLXEW_FUN_EXPORT PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV; - -GLXEW_FUN_EXPORT PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV; -GLXEW_FUN_EXPORT PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV; - -GLXEW_FUN_EXPORT PFNGLXBINDVIDEOCAPTUREDEVICENVPROC __glewXBindVideoCaptureDeviceNV; -GLXEW_FUN_EXPORT PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC __glewXEnumerateVideoCaptureDevicesNV; -GLXEW_FUN_EXPORT PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC __glewXLockVideoCaptureDeviceNV; -GLXEW_FUN_EXPORT PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC __glewXQueryVideoCaptureDeviceNV; -GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC __glewXReleaseVideoCaptureDeviceNV; - -GLXEW_FUN_EXPORT PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV; -GLXEW_FUN_EXPORT PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV; -GLXEW_FUN_EXPORT PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV; -GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV; -GLXEW_FUN_EXPORT PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV; -GLXEW_FUN_EXPORT PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV; - -GLXEW_FUN_EXPORT PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML; -GLXEW_FUN_EXPORT PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML; -GLXEW_FUN_EXPORT PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML; -GLXEW_FUN_EXPORT PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML; -GLXEW_FUN_EXPORT PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML; - -GLXEW_FUN_EXPORT PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX; -GLXEW_FUN_EXPORT PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX; - -GLXEW_FUN_EXPORT PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX; -GLXEW_FUN_EXPORT PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX; - -GLXEW_FUN_EXPORT PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX; -GLXEW_FUN_EXPORT PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX; -GLXEW_FUN_EXPORT PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX; -GLXEW_FUN_EXPORT PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX; - -GLXEW_FUN_EXPORT PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX; - -GLXEW_FUN_EXPORT PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX; - -GLXEW_FUN_EXPORT PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX; -GLXEW_FUN_EXPORT PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX; -GLXEW_FUN_EXPORT PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX; -GLXEW_FUN_EXPORT PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX; - -GLXEW_FUN_EXPORT PFNGLXCUSHIONSGIPROC __glewXCushionSGI; - -GLXEW_FUN_EXPORT PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI; -GLXEW_FUN_EXPORT PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI; - -GLXEW_FUN_EXPORT PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI; - -GLXEW_FUN_EXPORT PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI; -GLXEW_FUN_EXPORT PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI; - -GLXEW_FUN_EXPORT PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN; - -GLXEW_FUN_EXPORT PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN; -GLXEW_FUN_EXPORT PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN; - -#if defined(GLEW_MX) -struct GLXEWContextStruct -{ -#endif /* GLEW_MX */ - -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_3; -GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_4; -GLXEW_VAR_EXPORT GLboolean __GLXEW_3DFX_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_AMD_gpu_association; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_profile; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_create_context_robustness; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_fbconfig_float; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_framebuffer_sRGB; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_get_proc_address; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_robustness_application_isolation; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_robustness_share_group_isolation; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ARB_vertex_buffer_object; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_pixel_format_float; -GLXEW_VAR_EXPORT GLboolean __GLXEW_ATI_render_texture; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_buffer_age; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es2_profile; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_create_context_es_profile; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_import_context; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_scene_marker; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control_tear; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_texture_from_pixmap; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_visual_info; -GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_visual_rating; -GLXEW_VAR_EXPORT GLboolean __GLXEW_INTEL_swap_event; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_agp_offset; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_copy_sub_buffer; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_pixmap_colormap; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_release_buffers; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_set_3dfx_mode; -GLXEW_VAR_EXPORT GLboolean __GLXEW_MESA_swap_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_copy_image; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_float_buffer; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_multisample_coverage; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_present_video; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_swap_group; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_vertex_array_range; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_capture; -GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_output; -GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_swap_method; -GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_sync_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_blended_overlay; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_color_range; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_shared_multisample; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_fbconfig; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_hyperpipe; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_pbuffer; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_swap_barrier; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_swap_group; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_video_resize; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIX_visual_select_group; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_cushion; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_make_current_read; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_swap_control; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SGI_video_sync; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_get_transparent_index; -GLXEW_VAR_EXPORT GLboolean __GLXEW_SUN_video_resize; - -#ifdef GLEW_MX -}; /* GLXEWContextStruct */ -#endif /* GLEW_MX */ - -/* ------------------------------------------------------------------------ */ - -#ifdef GLEW_MX - -typedef struct GLXEWContextStruct GLXEWContext; -GLEWAPI GLenum GLEWAPIENTRY glxewContextInit (GLXEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY glxewContextIsSupported (const GLXEWContext *ctx, const char *name); - -#define glxewInit() glxewContextInit(glxewGetContext()) -#define glxewIsSupported(x) glxewContextIsSupported(glxewGetContext(), x) - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&(glxewGetContext()->x)) -#define GLXEW_GET_FUN(x) x - -#else /* GLEW_MX */ - -#define GLXEW_GET_VAR(x) (*(const GLboolean*)&x) -#define GLXEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY glxewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY glxewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* __glxew_h__ */ diff --git a/Engine/lib/glew/include/GL/wglew.h b/Engine/lib/glew/include/GL/wglew.h deleted file mode 100644 index 8659841d35..0000000000 --- a/Engine/lib/glew/include/GL/wglew.h +++ /dev/null @@ -1,1421 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -/* -** Copyright (c) 2007 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -#ifndef __wglew_h__ -#define __wglew_h__ -#define __WGLEW_H__ - -#ifdef __wglext_h_ -#error wglext.h included before wglew.h -#endif - -#define __wglext_h_ - -#if !defined(WINAPI) -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN 1 -# endif -#include -# undef WIN32_LEAN_AND_MEAN -#endif - -/* - * GLEW_STATIC needs to be set when using the static version. - * GLEW_BUILD is set when building the DLL version. - */ -#ifdef GLEW_STATIC -# define GLEWAPI extern -#else -# ifdef GLEW_BUILD -# define GLEWAPI extern __declspec(dllexport) -# else -# define GLEWAPI extern __declspec(dllimport) -# endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/* -------------------------- WGL_3DFX_multisample ------------------------- */ - -#ifndef WGL_3DFX_multisample -#define WGL_3DFX_multisample 1 - -#define WGL_SAMPLE_BUFFERS_3DFX 0x2060 -#define WGL_SAMPLES_3DFX 0x2061 - -#define WGLEW_3DFX_multisample WGLEW_GET_VAR(__WGLEW_3DFX_multisample) - -#endif /* WGL_3DFX_multisample */ - -/* ------------------------- WGL_3DL_stereo_control ------------------------ */ - -#ifndef WGL_3DL_stereo_control -#define WGL_3DL_stereo_control 1 - -#define WGL_STEREO_EMITTER_ENABLE_3DL 0x2055 -#define WGL_STEREO_EMITTER_DISABLE_3DL 0x2056 -#define WGL_STEREO_POLARITY_NORMAL_3DL 0x2057 -#define WGL_STEREO_POLARITY_INVERT_3DL 0x2058 - -typedef BOOL (WINAPI * PFNWGLSETSTEREOEMITTERSTATE3DLPROC) (HDC hDC, UINT uState); - -#define wglSetStereoEmitterState3DL WGLEW_GET_FUN(__wglewSetStereoEmitterState3DL) - -#define WGLEW_3DL_stereo_control WGLEW_GET_VAR(__WGLEW_3DL_stereo_control) - -#endif /* WGL_3DL_stereo_control */ - -/* ------------------------ WGL_AMD_gpu_association ------------------------ */ - -#ifndef WGL_AMD_gpu_association -#define WGL_AMD_gpu_association 1 - -#define WGL_GPU_VENDOR_AMD 0x1F00 -#define WGL_GPU_RENDERER_STRING_AMD 0x1F01 -#define WGL_GPU_OPENGL_VERSION_STRING_AMD 0x1F02 -#define WGL_GPU_FASTEST_TARGET_GPUS_AMD 0x21A2 -#define WGL_GPU_RAM_AMD 0x21A3 -#define WGL_GPU_CLOCK_AMD 0x21A4 -#define WGL_GPU_NUM_PIPES_AMD 0x21A5 -#define WGL_GPU_NUM_SIMD_AMD 0x21A6 -#define WGL_GPU_NUM_RB_AMD 0x21A7 -#define WGL_GPU_NUM_SPI_AMD 0x21A8 - -typedef VOID (WINAPI * PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC) (HGLRC dstCtx, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC) (UINT id); -typedef HGLRC (WINAPI * PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC) (UINT id, HGLRC hShareContext, const int* attribList); -typedef BOOL (WINAPI * PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC) (HGLRC hglrc); -typedef UINT (WINAPI * PFNWGLGETCONTEXTGPUIDAMDPROC) (HGLRC hglrc); -typedef HGLRC (WINAPI * PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC) (void); -typedef UINT (WINAPI * PFNWGLGETGPUIDSAMDPROC) (UINT maxCount, UINT* ids); -typedef INT (WINAPI * PFNWGLGETGPUINFOAMDPROC) (UINT id, INT property, GLenum dataType, UINT size, void* data); -typedef BOOL (WINAPI * PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC) (HGLRC hglrc); - -#define wglBlitContextFramebufferAMD WGLEW_GET_FUN(__wglewBlitContextFramebufferAMD) -#define wglCreateAssociatedContextAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAMD) -#define wglCreateAssociatedContextAttribsAMD WGLEW_GET_FUN(__wglewCreateAssociatedContextAttribsAMD) -#define wglDeleteAssociatedContextAMD WGLEW_GET_FUN(__wglewDeleteAssociatedContextAMD) -#define wglGetContextGPUIDAMD WGLEW_GET_FUN(__wglewGetContextGPUIDAMD) -#define wglGetCurrentAssociatedContextAMD WGLEW_GET_FUN(__wglewGetCurrentAssociatedContextAMD) -#define wglGetGPUIDsAMD WGLEW_GET_FUN(__wglewGetGPUIDsAMD) -#define wglGetGPUInfoAMD WGLEW_GET_FUN(__wglewGetGPUInfoAMD) -#define wglMakeAssociatedContextCurrentAMD WGLEW_GET_FUN(__wglewMakeAssociatedContextCurrentAMD) - -#define WGLEW_AMD_gpu_association WGLEW_GET_VAR(__WGLEW_AMD_gpu_association) - -#endif /* WGL_AMD_gpu_association */ - -/* ------------------------- WGL_ARB_buffer_region ------------------------- */ - -#ifndef WGL_ARB_buffer_region -#define WGL_ARB_buffer_region 1 - -#define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 -#define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 -#define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 -#define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 - -typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); -typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); -typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); -typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); - -#define wglCreateBufferRegionARB WGLEW_GET_FUN(__wglewCreateBufferRegionARB) -#define wglDeleteBufferRegionARB WGLEW_GET_FUN(__wglewDeleteBufferRegionARB) -#define wglRestoreBufferRegionARB WGLEW_GET_FUN(__wglewRestoreBufferRegionARB) -#define wglSaveBufferRegionARB WGLEW_GET_FUN(__wglewSaveBufferRegionARB) - -#define WGLEW_ARB_buffer_region WGLEW_GET_VAR(__WGLEW_ARB_buffer_region) - -#endif /* WGL_ARB_buffer_region */ - -/* ------------------------- WGL_ARB_create_context ------------------------ */ - -#ifndef WGL_ARB_create_context -#define WGL_ARB_create_context 1 - -#define WGL_CONTEXT_DEBUG_BIT_ARB 0x0001 -#define WGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x0002 -#define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 -#define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 -#define WGL_CONTEXT_LAYER_PLANE_ARB 0x2093 -#define WGL_CONTEXT_FLAGS_ARB 0x2094 -#define ERROR_INVALID_VERSION_ARB 0x2095 -#define ERROR_INVALID_PROFILE_ARB 0x2096 - -typedef HGLRC (WINAPI * PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC, HGLRC hShareContext, const int* attribList); - -#define wglCreateContextAttribsARB WGLEW_GET_FUN(__wglewCreateContextAttribsARB) - -#define WGLEW_ARB_create_context WGLEW_GET_VAR(__WGLEW_ARB_create_context) - -#endif /* WGL_ARB_create_context */ - -/* --------------------- WGL_ARB_create_context_profile -------------------- */ - -#ifndef WGL_ARB_create_context_profile -#define WGL_ARB_create_context_profile 1 - -#define WGL_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001 -#define WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002 -#define WGL_CONTEXT_PROFILE_MASK_ARB 0x9126 - -#define WGLEW_ARB_create_context_profile WGLEW_GET_VAR(__WGLEW_ARB_create_context_profile) - -#endif /* WGL_ARB_create_context_profile */ - -/* ------------------- WGL_ARB_create_context_robustness ------------------- */ - -#ifndef WGL_ARB_create_context_robustness -#define WGL_ARB_create_context_robustness 1 - -#define WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004 -#define WGL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 -#define WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 -#define WGL_NO_RESET_NOTIFICATION_ARB 0x8261 - -#define WGLEW_ARB_create_context_robustness WGLEW_GET_VAR(__WGLEW_ARB_create_context_robustness) - -#endif /* WGL_ARB_create_context_robustness */ - -/* ----------------------- WGL_ARB_extensions_string ----------------------- */ - -#ifndef WGL_ARB_extensions_string -#define WGL_ARB_extensions_string 1 - -typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); - -#define wglGetExtensionsStringARB WGLEW_GET_FUN(__wglewGetExtensionsStringARB) - -#define WGLEW_ARB_extensions_string WGLEW_GET_VAR(__WGLEW_ARB_extensions_string) - -#endif /* WGL_ARB_extensions_string */ - -/* ------------------------ WGL_ARB_framebuffer_sRGB ----------------------- */ - -#ifndef WGL_ARB_framebuffer_sRGB -#define WGL_ARB_framebuffer_sRGB 1 - -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20A9 - -#define WGLEW_ARB_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_ARB_framebuffer_sRGB) - -#endif /* WGL_ARB_framebuffer_sRGB */ - -/* ----------------------- WGL_ARB_make_current_read ----------------------- */ - -#ifndef WGL_ARB_make_current_read -#define WGL_ARB_make_current_read 1 - -#define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 -#define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 - -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); - -#define wglGetCurrentReadDCARB WGLEW_GET_FUN(__wglewGetCurrentReadDCARB) -#define wglMakeContextCurrentARB WGLEW_GET_FUN(__wglewMakeContextCurrentARB) - -#define WGLEW_ARB_make_current_read WGLEW_GET_VAR(__WGLEW_ARB_make_current_read) - -#endif /* WGL_ARB_make_current_read */ - -/* -------------------------- WGL_ARB_multisample -------------------------- */ - -#ifndef WGL_ARB_multisample -#define WGL_ARB_multisample 1 - -#define WGL_SAMPLE_BUFFERS_ARB 0x2041 -#define WGL_SAMPLES_ARB 0x2042 - -#define WGLEW_ARB_multisample WGLEW_GET_VAR(__WGLEW_ARB_multisample) - -#endif /* WGL_ARB_multisample */ - -/* ---------------------------- WGL_ARB_pbuffer ---------------------------- */ - -#ifndef WGL_ARB_pbuffer -#define WGL_ARB_pbuffer 1 - -#define WGL_DRAW_TO_PBUFFER_ARB 0x202D -#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E -#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 -#define WGL_PBUFFER_LARGEST_ARB 0x2033 -#define WGL_PBUFFER_WIDTH_ARB 0x2034 -#define WGL_PBUFFER_HEIGHT_ARB 0x2035 -#define WGL_PBUFFER_LOST_ARB 0x2036 - -DECLARE_HANDLE(HPBUFFERARB); - -typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int* piValue); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); - -#define wglCreatePbufferARB WGLEW_GET_FUN(__wglewCreatePbufferARB) -#define wglDestroyPbufferARB WGLEW_GET_FUN(__wglewDestroyPbufferARB) -#define wglGetPbufferDCARB WGLEW_GET_FUN(__wglewGetPbufferDCARB) -#define wglQueryPbufferARB WGLEW_GET_FUN(__wglewQueryPbufferARB) -#define wglReleasePbufferDCARB WGLEW_GET_FUN(__wglewReleasePbufferDCARB) - -#define WGLEW_ARB_pbuffer WGLEW_GET_VAR(__WGLEW_ARB_pbuffer) - -#endif /* WGL_ARB_pbuffer */ - -/* -------------------------- WGL_ARB_pixel_format ------------------------- */ - -#ifndef WGL_ARB_pixel_format -#define WGL_ARB_pixel_format 1 - -#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 -#define WGL_DRAW_TO_WINDOW_ARB 0x2001 -#define WGL_DRAW_TO_BITMAP_ARB 0x2002 -#define WGL_ACCELERATION_ARB 0x2003 -#define WGL_NEED_PALETTE_ARB 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 -#define WGL_SWAP_METHOD_ARB 0x2007 -#define WGL_NUMBER_OVERLAYS_ARB 0x2008 -#define WGL_NUMBER_UNDERLAYS_ARB 0x2009 -#define WGL_TRANSPARENT_ARB 0x200A -#define WGL_SHARE_DEPTH_ARB 0x200C -#define WGL_SHARE_STENCIL_ARB 0x200D -#define WGL_SHARE_ACCUM_ARB 0x200E -#define WGL_SUPPORT_GDI_ARB 0x200F -#define WGL_SUPPORT_OPENGL_ARB 0x2010 -#define WGL_DOUBLE_BUFFER_ARB 0x2011 -#define WGL_STEREO_ARB 0x2012 -#define WGL_PIXEL_TYPE_ARB 0x2013 -#define WGL_COLOR_BITS_ARB 0x2014 -#define WGL_RED_BITS_ARB 0x2015 -#define WGL_RED_SHIFT_ARB 0x2016 -#define WGL_GREEN_BITS_ARB 0x2017 -#define WGL_GREEN_SHIFT_ARB 0x2018 -#define WGL_BLUE_BITS_ARB 0x2019 -#define WGL_BLUE_SHIFT_ARB 0x201A -#define WGL_ALPHA_BITS_ARB 0x201B -#define WGL_ALPHA_SHIFT_ARB 0x201C -#define WGL_ACCUM_BITS_ARB 0x201D -#define WGL_ACCUM_RED_BITS_ARB 0x201E -#define WGL_ACCUM_GREEN_BITS_ARB 0x201F -#define WGL_ACCUM_BLUE_BITS_ARB 0x2020 -#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 -#define WGL_DEPTH_BITS_ARB 0x2022 -#define WGL_STENCIL_BITS_ARB 0x2023 -#define WGL_AUX_BUFFERS_ARB 0x2024 -#define WGL_NO_ACCELERATION_ARB 0x2025 -#define WGL_GENERIC_ACCELERATION_ARB 0x2026 -#define WGL_FULL_ACCELERATION_ARB 0x2027 -#define WGL_SWAP_EXCHANGE_ARB 0x2028 -#define WGL_SWAP_COPY_ARB 0x2029 -#define WGL_SWAP_UNDEFINED_ARB 0x202A -#define WGL_TYPE_RGBA_ARB 0x202B -#define WGL_TYPE_COLORINDEX_ARB 0x202C -#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 -#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 -#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 -#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A -#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B - -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int* piAttributes, int *piValues); - -#define wglChoosePixelFormatARB WGLEW_GET_FUN(__wglewChoosePixelFormatARB) -#define wglGetPixelFormatAttribfvARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvARB) -#define wglGetPixelFormatAttribivARB WGLEW_GET_FUN(__wglewGetPixelFormatAttribivARB) - -#define WGLEW_ARB_pixel_format WGLEW_GET_VAR(__WGLEW_ARB_pixel_format) - -#endif /* WGL_ARB_pixel_format */ - -/* ----------------------- WGL_ARB_pixel_format_float ---------------------- */ - -#ifndef WGL_ARB_pixel_format_float -#define WGL_ARB_pixel_format_float 1 - -#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0 - -#define WGLEW_ARB_pixel_format_float WGLEW_GET_VAR(__WGLEW_ARB_pixel_format_float) - -#endif /* WGL_ARB_pixel_format_float */ - -/* ------------------------- WGL_ARB_render_texture ------------------------ */ - -#ifndef WGL_ARB_render_texture -#define WGL_ARB_render_texture 1 - -#define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 -#define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 -#define WGL_TEXTURE_FORMAT_ARB 0x2072 -#define WGL_TEXTURE_TARGET_ARB 0x2073 -#define WGL_MIPMAP_TEXTURE_ARB 0x2074 -#define WGL_TEXTURE_RGB_ARB 0x2075 -#define WGL_TEXTURE_RGBA_ARB 0x2076 -#define WGL_NO_TEXTURE_ARB 0x2077 -#define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 -#define WGL_TEXTURE_1D_ARB 0x2079 -#define WGL_TEXTURE_2D_ARB 0x207A -#define WGL_MIPMAP_LEVEL_ARB 0x207B -#define WGL_CUBE_MAP_FACE_ARB 0x207C -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 -#define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 -#define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 -#define WGL_FRONT_LEFT_ARB 0x2083 -#define WGL_FRONT_RIGHT_ARB 0x2084 -#define WGL_BACK_LEFT_ARB 0x2085 -#define WGL_BACK_RIGHT_ARB 0x2086 -#define WGL_AUX0_ARB 0x2087 -#define WGL_AUX1_ARB 0x2088 -#define WGL_AUX2_ARB 0x2089 -#define WGL_AUX3_ARB 0x208A -#define WGL_AUX4_ARB 0x208B -#define WGL_AUX5_ARB 0x208C -#define WGL_AUX6_ARB 0x208D -#define WGL_AUX7_ARB 0x208E -#define WGL_AUX8_ARB 0x208F -#define WGL_AUX9_ARB 0x2090 - -typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); -typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int* piAttribList); - -#define wglBindTexImageARB WGLEW_GET_FUN(__wglewBindTexImageARB) -#define wglReleaseTexImageARB WGLEW_GET_FUN(__wglewReleaseTexImageARB) -#define wglSetPbufferAttribARB WGLEW_GET_FUN(__wglewSetPbufferAttribARB) - -#define WGLEW_ARB_render_texture WGLEW_GET_VAR(__WGLEW_ARB_render_texture) - -#endif /* WGL_ARB_render_texture */ - -/* ---------------- WGL_ARB_robustness_application_isolation --------------- */ - -#ifndef WGL_ARB_robustness_application_isolation -#define WGL_ARB_robustness_application_isolation 1 - -#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define WGLEW_ARB_robustness_application_isolation WGLEW_GET_VAR(__WGLEW_ARB_robustness_application_isolation) - -#endif /* WGL_ARB_robustness_application_isolation */ - -/* ---------------- WGL_ARB_robustness_share_group_isolation --------------- */ - -#ifndef WGL_ARB_robustness_share_group_isolation -#define WGL_ARB_robustness_share_group_isolation 1 - -#define WGL_CONTEXT_RESET_ISOLATION_BIT_ARB 0x00000008 - -#define WGLEW_ARB_robustness_share_group_isolation WGLEW_GET_VAR(__WGLEW_ARB_robustness_share_group_isolation) - -#endif /* WGL_ARB_robustness_share_group_isolation */ - -/* ----------------------- WGL_ATI_pixel_format_float ---------------------- */ - -#ifndef WGL_ATI_pixel_format_float -#define WGL_ATI_pixel_format_float 1 - -#define WGL_TYPE_RGBA_FLOAT_ATI 0x21A0 -#define GL_RGBA_FLOAT_MODE_ATI 0x8820 -#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 - -#define WGLEW_ATI_pixel_format_float WGLEW_GET_VAR(__WGLEW_ATI_pixel_format_float) - -#endif /* WGL_ATI_pixel_format_float */ - -/* -------------------- WGL_ATI_render_texture_rectangle ------------------- */ - -#ifndef WGL_ATI_render_texture_rectangle -#define WGL_ATI_render_texture_rectangle 1 - -#define WGL_TEXTURE_RECTANGLE_ATI 0x21A5 - -#define WGLEW_ATI_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_ATI_render_texture_rectangle) - -#endif /* WGL_ATI_render_texture_rectangle */ - -/* ------------------- WGL_EXT_create_context_es2_profile ------------------ */ - -#ifndef WGL_EXT_create_context_es2_profile -#define WGL_EXT_create_context_es2_profile 1 - -#define WGL_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004 - -#define WGLEW_EXT_create_context_es2_profile WGLEW_GET_VAR(__WGLEW_EXT_create_context_es2_profile) - -#endif /* WGL_EXT_create_context_es2_profile */ - -/* ------------------- WGL_EXT_create_context_es_profile ------------------- */ - -#ifndef WGL_EXT_create_context_es_profile -#define WGL_EXT_create_context_es_profile 1 - -#define WGL_CONTEXT_ES_PROFILE_BIT_EXT 0x00000004 - -#define WGLEW_EXT_create_context_es_profile WGLEW_GET_VAR(__WGLEW_EXT_create_context_es_profile) - -#endif /* WGL_EXT_create_context_es_profile */ - -/* -------------------------- WGL_EXT_depth_float -------------------------- */ - -#ifndef WGL_EXT_depth_float -#define WGL_EXT_depth_float 1 - -#define WGL_DEPTH_FLOAT_EXT 0x2040 - -#define WGLEW_EXT_depth_float WGLEW_GET_VAR(__WGLEW_EXT_depth_float) - -#endif /* WGL_EXT_depth_float */ - -/* ---------------------- WGL_EXT_display_color_table ---------------------- */ - -#ifndef WGL_EXT_display_color_table -#define WGL_EXT_display_color_table 1 - -typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef void (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); -typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (GLushort* table, GLuint length); - -#define wglBindDisplayColorTableEXT WGLEW_GET_FUN(__wglewBindDisplayColorTableEXT) -#define wglCreateDisplayColorTableEXT WGLEW_GET_FUN(__wglewCreateDisplayColorTableEXT) -#define wglDestroyDisplayColorTableEXT WGLEW_GET_FUN(__wglewDestroyDisplayColorTableEXT) -#define wglLoadDisplayColorTableEXT WGLEW_GET_FUN(__wglewLoadDisplayColorTableEXT) - -#define WGLEW_EXT_display_color_table WGLEW_GET_VAR(__WGLEW_EXT_display_color_table) - -#endif /* WGL_EXT_display_color_table */ - -/* ----------------------- WGL_EXT_extensions_string ----------------------- */ - -#ifndef WGL_EXT_extensions_string -#define WGL_EXT_extensions_string 1 - -typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); - -#define wglGetExtensionsStringEXT WGLEW_GET_FUN(__wglewGetExtensionsStringEXT) - -#define WGLEW_EXT_extensions_string WGLEW_GET_VAR(__WGLEW_EXT_extensions_string) - -#endif /* WGL_EXT_extensions_string */ - -/* ------------------------ WGL_EXT_framebuffer_sRGB ----------------------- */ - -#ifndef WGL_EXT_framebuffer_sRGB -#define WGL_EXT_framebuffer_sRGB 1 - -#define WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x20A9 - -#define WGLEW_EXT_framebuffer_sRGB WGLEW_GET_VAR(__WGLEW_EXT_framebuffer_sRGB) - -#endif /* WGL_EXT_framebuffer_sRGB */ - -/* ----------------------- WGL_EXT_make_current_read ----------------------- */ - -#ifndef WGL_EXT_make_current_read -#define WGL_EXT_make_current_read 1 - -#define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 - -typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); - -#define wglGetCurrentReadDCEXT WGLEW_GET_FUN(__wglewGetCurrentReadDCEXT) -#define wglMakeContextCurrentEXT WGLEW_GET_FUN(__wglewMakeContextCurrentEXT) - -#define WGLEW_EXT_make_current_read WGLEW_GET_VAR(__WGLEW_EXT_make_current_read) - -#endif /* WGL_EXT_make_current_read */ - -/* -------------------------- WGL_EXT_multisample -------------------------- */ - -#ifndef WGL_EXT_multisample -#define WGL_EXT_multisample 1 - -#define WGL_SAMPLE_BUFFERS_EXT 0x2041 -#define WGL_SAMPLES_EXT 0x2042 - -#define WGLEW_EXT_multisample WGLEW_GET_VAR(__WGLEW_EXT_multisample) - -#endif /* WGL_EXT_multisample */ - -/* ---------------------------- WGL_EXT_pbuffer ---------------------------- */ - -#ifndef WGL_EXT_pbuffer -#define WGL_EXT_pbuffer 1 - -#define WGL_DRAW_TO_PBUFFER_EXT 0x202D -#define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E -#define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F -#define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 -#define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 -#define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 -#define WGL_PBUFFER_LARGEST_EXT 0x2033 -#define WGL_PBUFFER_WIDTH_EXT 0x2034 -#define WGL_PBUFFER_HEIGHT_EXT 0x2035 - -DECLARE_HANDLE(HPBUFFEREXT); - -typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int* piAttribList); -typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); -typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); -typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int* piValue); -typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); - -#define wglCreatePbufferEXT WGLEW_GET_FUN(__wglewCreatePbufferEXT) -#define wglDestroyPbufferEXT WGLEW_GET_FUN(__wglewDestroyPbufferEXT) -#define wglGetPbufferDCEXT WGLEW_GET_FUN(__wglewGetPbufferDCEXT) -#define wglQueryPbufferEXT WGLEW_GET_FUN(__wglewQueryPbufferEXT) -#define wglReleasePbufferDCEXT WGLEW_GET_FUN(__wglewReleasePbufferDCEXT) - -#define WGLEW_EXT_pbuffer WGLEW_GET_VAR(__WGLEW_EXT_pbuffer) - -#endif /* WGL_EXT_pbuffer */ - -/* -------------------------- WGL_EXT_pixel_format ------------------------- */ - -#ifndef WGL_EXT_pixel_format -#define WGL_EXT_pixel_format 1 - -#define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 -#define WGL_DRAW_TO_WINDOW_EXT 0x2001 -#define WGL_DRAW_TO_BITMAP_EXT 0x2002 -#define WGL_ACCELERATION_EXT 0x2003 -#define WGL_NEED_PALETTE_EXT 0x2004 -#define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 -#define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 -#define WGL_SWAP_METHOD_EXT 0x2007 -#define WGL_NUMBER_OVERLAYS_EXT 0x2008 -#define WGL_NUMBER_UNDERLAYS_EXT 0x2009 -#define WGL_TRANSPARENT_EXT 0x200A -#define WGL_TRANSPARENT_VALUE_EXT 0x200B -#define WGL_SHARE_DEPTH_EXT 0x200C -#define WGL_SHARE_STENCIL_EXT 0x200D -#define WGL_SHARE_ACCUM_EXT 0x200E -#define WGL_SUPPORT_GDI_EXT 0x200F -#define WGL_SUPPORT_OPENGL_EXT 0x2010 -#define WGL_DOUBLE_BUFFER_EXT 0x2011 -#define WGL_STEREO_EXT 0x2012 -#define WGL_PIXEL_TYPE_EXT 0x2013 -#define WGL_COLOR_BITS_EXT 0x2014 -#define WGL_RED_BITS_EXT 0x2015 -#define WGL_RED_SHIFT_EXT 0x2016 -#define WGL_GREEN_BITS_EXT 0x2017 -#define WGL_GREEN_SHIFT_EXT 0x2018 -#define WGL_BLUE_BITS_EXT 0x2019 -#define WGL_BLUE_SHIFT_EXT 0x201A -#define WGL_ALPHA_BITS_EXT 0x201B -#define WGL_ALPHA_SHIFT_EXT 0x201C -#define WGL_ACCUM_BITS_EXT 0x201D -#define WGL_ACCUM_RED_BITS_EXT 0x201E -#define WGL_ACCUM_GREEN_BITS_EXT 0x201F -#define WGL_ACCUM_BLUE_BITS_EXT 0x2020 -#define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 -#define WGL_DEPTH_BITS_EXT 0x2022 -#define WGL_STENCIL_BITS_EXT 0x2023 -#define WGL_AUX_BUFFERS_EXT 0x2024 -#define WGL_NO_ACCELERATION_EXT 0x2025 -#define WGL_GENERIC_ACCELERATION_EXT 0x2026 -#define WGL_FULL_ACCELERATION_EXT 0x2027 -#define WGL_SWAP_EXCHANGE_EXT 0x2028 -#define WGL_SWAP_COPY_EXT 0x2029 -#define WGL_SWAP_UNDEFINED_EXT 0x202A -#define WGL_TYPE_RGBA_EXT 0x202B -#define WGL_TYPE_COLORINDEX_EXT 0x202C - -typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int* piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, FLOAT *pfValues); -typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int* piAttributes, int *piValues); - -#define wglChoosePixelFormatEXT WGLEW_GET_FUN(__wglewChoosePixelFormatEXT) -#define wglGetPixelFormatAttribfvEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribfvEXT) -#define wglGetPixelFormatAttribivEXT WGLEW_GET_FUN(__wglewGetPixelFormatAttribivEXT) - -#define WGLEW_EXT_pixel_format WGLEW_GET_VAR(__WGLEW_EXT_pixel_format) - -#endif /* WGL_EXT_pixel_format */ - -/* ------------------- WGL_EXT_pixel_format_packed_float ------------------- */ - -#ifndef WGL_EXT_pixel_format_packed_float -#define WGL_EXT_pixel_format_packed_float 1 - -#define WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT 0x20A8 - -#define WGLEW_EXT_pixel_format_packed_float WGLEW_GET_VAR(__WGLEW_EXT_pixel_format_packed_float) - -#endif /* WGL_EXT_pixel_format_packed_float */ - -/* -------------------------- WGL_EXT_swap_control ------------------------- */ - -#ifndef WGL_EXT_swap_control -#define WGL_EXT_swap_control 1 - -typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); -typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); - -#define wglGetSwapIntervalEXT WGLEW_GET_FUN(__wglewGetSwapIntervalEXT) -#define wglSwapIntervalEXT WGLEW_GET_FUN(__wglewSwapIntervalEXT) - -#define WGLEW_EXT_swap_control WGLEW_GET_VAR(__WGLEW_EXT_swap_control) - -#endif /* WGL_EXT_swap_control */ - -/* ----------------------- WGL_EXT_swap_control_tear ----------------------- */ - -#ifndef WGL_EXT_swap_control_tear -#define WGL_EXT_swap_control_tear 1 - -#define WGLEW_EXT_swap_control_tear WGLEW_GET_VAR(__WGLEW_EXT_swap_control_tear) - -#endif /* WGL_EXT_swap_control_tear */ - -/* --------------------- WGL_I3D_digital_video_control --------------------- */ - -#ifndef WGL_I3D_digital_video_control -#define WGL_I3D_digital_video_control 1 - -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 -#define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 -#define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 -#define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 - -typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); -typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); - -#define wglGetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewGetDigitalVideoParametersI3D) -#define wglSetDigitalVideoParametersI3D WGLEW_GET_FUN(__wglewSetDigitalVideoParametersI3D) - -#define WGLEW_I3D_digital_video_control WGLEW_GET_VAR(__WGLEW_I3D_digital_video_control) - -#endif /* WGL_I3D_digital_video_control */ - -/* ----------------------------- WGL_I3D_gamma ----------------------------- */ - -#ifndef WGL_I3D_gamma -#define WGL_I3D_gamma 1 - -#define WGL_GAMMA_TABLE_SIZE_I3D 0x204E -#define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F - -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT* puRed, USHORT *puGreen, USHORT *puBlue); -typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int* piValue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT* puRed, const USHORT *puGreen, const USHORT *puBlue); -typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int* piValue); - -#define wglGetGammaTableI3D WGLEW_GET_FUN(__wglewGetGammaTableI3D) -#define wglGetGammaTableParametersI3D WGLEW_GET_FUN(__wglewGetGammaTableParametersI3D) -#define wglSetGammaTableI3D WGLEW_GET_FUN(__wglewSetGammaTableI3D) -#define wglSetGammaTableParametersI3D WGLEW_GET_FUN(__wglewSetGammaTableParametersI3D) - -#define WGLEW_I3D_gamma WGLEW_GET_VAR(__WGLEW_I3D_gamma) - -#endif /* WGL_I3D_gamma */ - -/* ---------------------------- WGL_I3D_genlock ---------------------------- */ - -#ifndef WGL_I3D_genlock -#define WGL_I3D_genlock 1 - -#define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 -#define WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D 0x2045 -#define WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D 0x2046 -#define WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D 0x2047 -#define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 -#define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 -#define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A -#define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B -#define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C - -typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); -typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); -typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT* uRate); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT* uDelay); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT* uEdge); -typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT* uSource); -typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL* pFlag); -typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT* uMaxLineDelay, UINT *uMaxPixelDelay); - -#define wglDisableGenlockI3D WGLEW_GET_FUN(__wglewDisableGenlockI3D) -#define wglEnableGenlockI3D WGLEW_GET_FUN(__wglewEnableGenlockI3D) -#define wglGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGenlockSampleRateI3D) -#define wglGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGenlockSourceDelayI3D) -#define wglGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGenlockSourceEdgeI3D) -#define wglGenlockSourceI3D WGLEW_GET_FUN(__wglewGenlockSourceI3D) -#define wglGetGenlockSampleRateI3D WGLEW_GET_FUN(__wglewGetGenlockSampleRateI3D) -#define wglGetGenlockSourceDelayI3D WGLEW_GET_FUN(__wglewGetGenlockSourceDelayI3D) -#define wglGetGenlockSourceEdgeI3D WGLEW_GET_FUN(__wglewGetGenlockSourceEdgeI3D) -#define wglGetGenlockSourceI3D WGLEW_GET_FUN(__wglewGetGenlockSourceI3D) -#define wglIsEnabledGenlockI3D WGLEW_GET_FUN(__wglewIsEnabledGenlockI3D) -#define wglQueryGenlockMaxSourceDelayI3D WGLEW_GET_FUN(__wglewQueryGenlockMaxSourceDelayI3D) - -#define WGLEW_I3D_genlock WGLEW_GET_VAR(__WGLEW_I3D_genlock) - -#endif /* WGL_I3D_genlock */ - -/* -------------------------- WGL_I3D_image_buffer ------------------------- */ - -#ifndef WGL_I3D_image_buffer -#define WGL_I3D_image_buffer 1 - -#define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 -#define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 - -typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, HANDLE* pEvent, LPVOID *pAddress, DWORD *pSize, UINT count); -typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); -typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); -typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hdc, LPVOID* pAddress, UINT count); - -#define wglAssociateImageBufferEventsI3D WGLEW_GET_FUN(__wglewAssociateImageBufferEventsI3D) -#define wglCreateImageBufferI3D WGLEW_GET_FUN(__wglewCreateImageBufferI3D) -#define wglDestroyImageBufferI3D WGLEW_GET_FUN(__wglewDestroyImageBufferI3D) -#define wglReleaseImageBufferEventsI3D WGLEW_GET_FUN(__wglewReleaseImageBufferEventsI3D) - -#define WGLEW_I3D_image_buffer WGLEW_GET_VAR(__WGLEW_I3D_image_buffer) - -#endif /* WGL_I3D_image_buffer */ - -/* ------------------------ WGL_I3D_swap_frame_lock ------------------------ */ - -#ifndef WGL_I3D_swap_frame_lock -#define WGL_I3D_swap_frame_lock 1 - -typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (VOID); -typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL* pFlag); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL* pFlag); - -#define wglDisableFrameLockI3D WGLEW_GET_FUN(__wglewDisableFrameLockI3D) -#define wglEnableFrameLockI3D WGLEW_GET_FUN(__wglewEnableFrameLockI3D) -#define wglIsEnabledFrameLockI3D WGLEW_GET_FUN(__wglewIsEnabledFrameLockI3D) -#define wglQueryFrameLockMasterI3D WGLEW_GET_FUN(__wglewQueryFrameLockMasterI3D) - -#define WGLEW_I3D_swap_frame_lock WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_lock) - -#endif /* WGL_I3D_swap_frame_lock */ - -/* ------------------------ WGL_I3D_swap_frame_usage ----------------------- */ - -#ifndef WGL_I3D_swap_frame_usage -#define WGL_I3D_swap_frame_usage 1 - -typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); -typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float* pUsage); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD* pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); - -#define wglBeginFrameTrackingI3D WGLEW_GET_FUN(__wglewBeginFrameTrackingI3D) -#define wglEndFrameTrackingI3D WGLEW_GET_FUN(__wglewEndFrameTrackingI3D) -#define wglGetFrameUsageI3D WGLEW_GET_FUN(__wglewGetFrameUsageI3D) -#define wglQueryFrameTrackingI3D WGLEW_GET_FUN(__wglewQueryFrameTrackingI3D) - -#define WGLEW_I3D_swap_frame_usage WGLEW_GET_VAR(__WGLEW_I3D_swap_frame_usage) - -#endif /* WGL_I3D_swap_frame_usage */ - -/* --------------------------- WGL_NV_DX_interop --------------------------- */ - -#ifndef WGL_NV_DX_interop -#define WGL_NV_DX_interop 1 - -#define WGL_ACCESS_READ_ONLY_NV 0x0000 -#define WGL_ACCESS_READ_WRITE_NV 0x0001 -#define WGL_ACCESS_WRITE_DISCARD_NV 0x0002 - -typedef BOOL (WINAPI * PFNWGLDXCLOSEDEVICENVPROC) (HANDLE hDevice); -typedef BOOL (WINAPI * PFNWGLDXLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects); -typedef BOOL (WINAPI * PFNWGLDXOBJECTACCESSNVPROC) (HANDLE hObject, GLenum access); -typedef HANDLE (WINAPI * PFNWGLDXOPENDEVICENVPROC) (void* dxDevice); -typedef HANDLE (WINAPI * PFNWGLDXREGISTEROBJECTNVPROC) (HANDLE hDevice, void* dxObject, GLuint name, GLenum type, GLenum access); -typedef BOOL (WINAPI * PFNWGLDXSETRESOURCESHAREHANDLENVPROC) (void* dxObject, HANDLE shareHandle); -typedef BOOL (WINAPI * PFNWGLDXUNLOCKOBJECTSNVPROC) (HANDLE hDevice, GLint count, HANDLE* hObjects); -typedef BOOL (WINAPI * PFNWGLDXUNREGISTEROBJECTNVPROC) (HANDLE hDevice, HANDLE hObject); - -#define wglDXCloseDeviceNV WGLEW_GET_FUN(__wglewDXCloseDeviceNV) -#define wglDXLockObjectsNV WGLEW_GET_FUN(__wglewDXLockObjectsNV) -#define wglDXObjectAccessNV WGLEW_GET_FUN(__wglewDXObjectAccessNV) -#define wglDXOpenDeviceNV WGLEW_GET_FUN(__wglewDXOpenDeviceNV) -#define wglDXRegisterObjectNV WGLEW_GET_FUN(__wglewDXRegisterObjectNV) -#define wglDXSetResourceShareHandleNV WGLEW_GET_FUN(__wglewDXSetResourceShareHandleNV) -#define wglDXUnlockObjectsNV WGLEW_GET_FUN(__wglewDXUnlockObjectsNV) -#define wglDXUnregisterObjectNV WGLEW_GET_FUN(__wglewDXUnregisterObjectNV) - -#define WGLEW_NV_DX_interop WGLEW_GET_VAR(__WGLEW_NV_DX_interop) - -#endif /* WGL_NV_DX_interop */ - -/* --------------------------- WGL_NV_DX_interop2 -------------------------- */ - -#ifndef WGL_NV_DX_interop2 -#define WGL_NV_DX_interop2 1 - -#define WGLEW_NV_DX_interop2 WGLEW_GET_VAR(__WGLEW_NV_DX_interop2) - -#endif /* WGL_NV_DX_interop2 */ - -/* --------------------------- WGL_NV_copy_image --------------------------- */ - -#ifndef WGL_NV_copy_image -#define WGL_NV_copy_image 1 - -typedef BOOL (WINAPI * PFNWGLCOPYIMAGESUBDATANVPROC) (HGLRC hSrcRC, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, HGLRC hDstRC, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); - -#define wglCopyImageSubDataNV WGLEW_GET_FUN(__wglewCopyImageSubDataNV) - -#define WGLEW_NV_copy_image WGLEW_GET_VAR(__WGLEW_NV_copy_image) - -#endif /* WGL_NV_copy_image */ - -/* -------------------------- WGL_NV_float_buffer -------------------------- */ - -#ifndef WGL_NV_float_buffer -#define WGL_NV_float_buffer 1 - -#define WGL_FLOAT_COMPONENTS_NV 0x20B0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 -#define WGL_TEXTURE_FLOAT_R_NV 0x20B5 -#define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 -#define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 -#define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 - -#define WGLEW_NV_float_buffer WGLEW_GET_VAR(__WGLEW_NV_float_buffer) - -#endif /* WGL_NV_float_buffer */ - -/* -------------------------- WGL_NV_gpu_affinity -------------------------- */ - -#ifndef WGL_NV_gpu_affinity -#define WGL_NV_gpu_affinity 1 - -#define WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV 0x20D0 -#define WGL_ERROR_MISSING_AFFINITY_MASK_NV 0x20D1 - -DECLARE_HANDLE(HGPUNV); -typedef struct _GPU_DEVICE { - DWORD cb; - CHAR DeviceName[32]; - CHAR DeviceString[128]; - DWORD Flags; - RECT rcVirtualScreen; -} GPU_DEVICE, *PGPU_DEVICE; - -typedef HDC (WINAPI * PFNWGLCREATEAFFINITYDCNVPROC) (const HGPUNV *phGpuList); -typedef BOOL (WINAPI * PFNWGLDELETEDCNVPROC) (HDC hdc); -typedef BOOL (WINAPI * PFNWGLENUMGPUDEVICESNVPROC) (HGPUNV hGpu, UINT iDeviceIndex, PGPU_DEVICE lpGpuDevice); -typedef BOOL (WINAPI * PFNWGLENUMGPUSFROMAFFINITYDCNVPROC) (HDC hAffinityDC, UINT iGpuIndex, HGPUNV *hGpu); -typedef BOOL (WINAPI * PFNWGLENUMGPUSNVPROC) (UINT iGpuIndex, HGPUNV *phGpu); - -#define wglCreateAffinityDCNV WGLEW_GET_FUN(__wglewCreateAffinityDCNV) -#define wglDeleteDCNV WGLEW_GET_FUN(__wglewDeleteDCNV) -#define wglEnumGpuDevicesNV WGLEW_GET_FUN(__wglewEnumGpuDevicesNV) -#define wglEnumGpusFromAffinityDCNV WGLEW_GET_FUN(__wglewEnumGpusFromAffinityDCNV) -#define wglEnumGpusNV WGLEW_GET_FUN(__wglewEnumGpusNV) - -#define WGLEW_NV_gpu_affinity WGLEW_GET_VAR(__WGLEW_NV_gpu_affinity) - -#endif /* WGL_NV_gpu_affinity */ - -/* ---------------------- WGL_NV_multisample_coverage ---------------------- */ - -#ifndef WGL_NV_multisample_coverage -#define WGL_NV_multisample_coverage 1 - -#define WGL_COVERAGE_SAMPLES_NV 0x2042 -#define WGL_COLOR_SAMPLES_NV 0x20B9 - -#define WGLEW_NV_multisample_coverage WGLEW_GET_VAR(__WGLEW_NV_multisample_coverage) - -#endif /* WGL_NV_multisample_coverage */ - -/* -------------------------- WGL_NV_present_video ------------------------- */ - -#ifndef WGL_NV_present_video -#define WGL_NV_present_video 1 - -#define WGL_NUM_VIDEO_SLOTS_NV 0x20F0 - -DECLARE_HANDLE(HVIDEOOUTPUTDEVICENV); - -typedef BOOL (WINAPI * PFNWGLBINDVIDEODEVICENVPROC) (HDC hDc, unsigned int uVideoSlot, HVIDEOOUTPUTDEVICENV hVideoDevice, const int* piAttribList); -typedef int (WINAPI * PFNWGLENUMERATEVIDEODEVICESNVPROC) (HDC hDc, HVIDEOOUTPUTDEVICENV* phDeviceList); -typedef BOOL (WINAPI * PFNWGLQUERYCURRENTCONTEXTNVPROC) (int iAttribute, int* piValue); - -#define wglBindVideoDeviceNV WGLEW_GET_FUN(__wglewBindVideoDeviceNV) -#define wglEnumerateVideoDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoDevicesNV) -#define wglQueryCurrentContextNV WGLEW_GET_FUN(__wglewQueryCurrentContextNV) - -#define WGLEW_NV_present_video WGLEW_GET_VAR(__WGLEW_NV_present_video) - -#endif /* WGL_NV_present_video */ - -/* ---------------------- WGL_NV_render_depth_texture ---------------------- */ - -#ifndef WGL_NV_render_depth_texture -#define WGL_NV_render_depth_texture 1 - -#define WGL_NO_TEXTURE_ARB 0x2077 -#define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 -#define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 -#define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 -#define WGL_DEPTH_COMPONENT_NV 0x20A7 - -#define WGLEW_NV_render_depth_texture WGLEW_GET_VAR(__WGLEW_NV_render_depth_texture) - -#endif /* WGL_NV_render_depth_texture */ - -/* -------------------- WGL_NV_render_texture_rectangle -------------------- */ - -#ifndef WGL_NV_render_texture_rectangle -#define WGL_NV_render_texture_rectangle 1 - -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 -#define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 -#define WGL_TEXTURE_RECTANGLE_NV 0x20A2 - -#define WGLEW_NV_render_texture_rectangle WGLEW_GET_VAR(__WGLEW_NV_render_texture_rectangle) - -#endif /* WGL_NV_render_texture_rectangle */ - -/* --------------------------- WGL_NV_swap_group --------------------------- */ - -#ifndef WGL_NV_swap_group -#define WGL_NV_swap_group 1 - -typedef BOOL (WINAPI * PFNWGLBINDSWAPBARRIERNVPROC) (GLuint group, GLuint barrier); -typedef BOOL (WINAPI * PFNWGLJOINSWAPGROUPNVPROC) (HDC hDC, GLuint group); -typedef BOOL (WINAPI * PFNWGLQUERYFRAMECOUNTNVPROC) (HDC hDC, GLuint* count); -typedef BOOL (WINAPI * PFNWGLQUERYMAXSWAPGROUPSNVPROC) (HDC hDC, GLuint* maxGroups, GLuint *maxBarriers); -typedef BOOL (WINAPI * PFNWGLQUERYSWAPGROUPNVPROC) (HDC hDC, GLuint* group, GLuint *barrier); -typedef BOOL (WINAPI * PFNWGLRESETFRAMECOUNTNVPROC) (HDC hDC); - -#define wglBindSwapBarrierNV WGLEW_GET_FUN(__wglewBindSwapBarrierNV) -#define wglJoinSwapGroupNV WGLEW_GET_FUN(__wglewJoinSwapGroupNV) -#define wglQueryFrameCountNV WGLEW_GET_FUN(__wglewQueryFrameCountNV) -#define wglQueryMaxSwapGroupsNV WGLEW_GET_FUN(__wglewQueryMaxSwapGroupsNV) -#define wglQuerySwapGroupNV WGLEW_GET_FUN(__wglewQuerySwapGroupNV) -#define wglResetFrameCountNV WGLEW_GET_FUN(__wglewResetFrameCountNV) - -#define WGLEW_NV_swap_group WGLEW_GET_VAR(__WGLEW_NV_swap_group) - -#endif /* WGL_NV_swap_group */ - -/* ----------------------- WGL_NV_vertex_array_range ----------------------- */ - -#ifndef WGL_NV_vertex_array_range -#define WGL_NV_vertex_array_range 1 - -typedef void * (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readFrequency, GLfloat writeFrequency, GLfloat priority); -typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); - -#define wglAllocateMemoryNV WGLEW_GET_FUN(__wglewAllocateMemoryNV) -#define wglFreeMemoryNV WGLEW_GET_FUN(__wglewFreeMemoryNV) - -#define WGLEW_NV_vertex_array_range WGLEW_GET_VAR(__WGLEW_NV_vertex_array_range) - -#endif /* WGL_NV_vertex_array_range */ - -/* -------------------------- WGL_NV_video_capture ------------------------- */ - -#ifndef WGL_NV_video_capture -#define WGL_NV_video_capture 1 - -#define WGL_UNIQUE_ID_NV 0x20CE -#define WGL_NUM_VIDEO_CAPTURE_SLOTS_NV 0x20CF - -DECLARE_HANDLE(HVIDEOINPUTDEVICENV); - -typedef BOOL (WINAPI * PFNWGLBINDVIDEOCAPTUREDEVICENVPROC) (UINT uVideoSlot, HVIDEOINPUTDEVICENV hDevice); -typedef UINT (WINAPI * PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC) (HDC hDc, HVIDEOINPUTDEVICENV* phDeviceList); -typedef BOOL (WINAPI * PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); -typedef BOOL (WINAPI * PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice, int iAttribute, int* piValue); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC) (HDC hDc, HVIDEOINPUTDEVICENV hDevice); - -#define wglBindVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewBindVideoCaptureDeviceNV) -#define wglEnumerateVideoCaptureDevicesNV WGLEW_GET_FUN(__wglewEnumerateVideoCaptureDevicesNV) -#define wglLockVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewLockVideoCaptureDeviceNV) -#define wglQueryVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewQueryVideoCaptureDeviceNV) -#define wglReleaseVideoCaptureDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoCaptureDeviceNV) - -#define WGLEW_NV_video_capture WGLEW_GET_VAR(__WGLEW_NV_video_capture) - -#endif /* WGL_NV_video_capture */ - -/* -------------------------- WGL_NV_video_output -------------------------- */ - -#ifndef WGL_NV_video_output -#define WGL_NV_video_output 1 - -#define WGL_BIND_TO_VIDEO_RGB_NV 0x20C0 -#define WGL_BIND_TO_VIDEO_RGBA_NV 0x20C1 -#define WGL_BIND_TO_VIDEO_RGB_AND_DEPTH_NV 0x20C2 -#define WGL_VIDEO_OUT_COLOR_NV 0x20C3 -#define WGL_VIDEO_OUT_ALPHA_NV 0x20C4 -#define WGL_VIDEO_OUT_DEPTH_NV 0x20C5 -#define WGL_VIDEO_OUT_COLOR_AND_ALPHA_NV 0x20C6 -#define WGL_VIDEO_OUT_COLOR_AND_DEPTH_NV 0x20C7 -#define WGL_VIDEO_OUT_FRAME 0x20C8 -#define WGL_VIDEO_OUT_FIELD_1 0x20C9 -#define WGL_VIDEO_OUT_FIELD_2 0x20CA -#define WGL_VIDEO_OUT_STACKED_FIELDS_1_2 0x20CB -#define WGL_VIDEO_OUT_STACKED_FIELDS_2_1 0x20CC - -DECLARE_HANDLE(HPVIDEODEV); - -typedef BOOL (WINAPI * PFNWGLBINDVIDEOIMAGENVPROC) (HPVIDEODEV hVideoDevice, HPBUFFERARB hPbuffer, int iVideoBuffer); -typedef BOOL (WINAPI * PFNWGLGETVIDEODEVICENVPROC) (HDC hDC, int numDevices, HPVIDEODEV* hVideoDevice); -typedef BOOL (WINAPI * PFNWGLGETVIDEOINFONVPROC) (HPVIDEODEV hpVideoDevice, unsigned long* pulCounterOutputPbuffer, unsigned long *pulCounterOutputVideo); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEODEVICENVPROC) (HPVIDEODEV hVideoDevice); -typedef BOOL (WINAPI * PFNWGLRELEASEVIDEOIMAGENVPROC) (HPBUFFERARB hPbuffer, int iVideoBuffer); -typedef BOOL (WINAPI * PFNWGLSENDPBUFFERTOVIDEONVPROC) (HPBUFFERARB hPbuffer, int iBufferType, unsigned long* pulCounterPbuffer, BOOL bBlock); - -#define wglBindVideoImageNV WGLEW_GET_FUN(__wglewBindVideoImageNV) -#define wglGetVideoDeviceNV WGLEW_GET_FUN(__wglewGetVideoDeviceNV) -#define wglGetVideoInfoNV WGLEW_GET_FUN(__wglewGetVideoInfoNV) -#define wglReleaseVideoDeviceNV WGLEW_GET_FUN(__wglewReleaseVideoDeviceNV) -#define wglReleaseVideoImageNV WGLEW_GET_FUN(__wglewReleaseVideoImageNV) -#define wglSendPbufferToVideoNV WGLEW_GET_FUN(__wglewSendPbufferToVideoNV) - -#define WGLEW_NV_video_output WGLEW_GET_VAR(__WGLEW_NV_video_output) - -#endif /* WGL_NV_video_output */ - -/* -------------------------- WGL_OML_sync_control ------------------------- */ - -#ifndef WGL_OML_sync_control -#define WGL_OML_sync_control 1 - -typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32* numerator, INT32 *denominator); -typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64* ust, INT64 *msc, INT64 *sbc); -typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, INT fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); -typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64* ust, INT64 *msc, INT64 *sbc); -typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64* ust, INT64 *msc, INT64 *sbc); - -#define wglGetMscRateOML WGLEW_GET_FUN(__wglewGetMscRateOML) -#define wglGetSyncValuesOML WGLEW_GET_FUN(__wglewGetSyncValuesOML) -#define wglSwapBuffersMscOML WGLEW_GET_FUN(__wglewSwapBuffersMscOML) -#define wglSwapLayerBuffersMscOML WGLEW_GET_FUN(__wglewSwapLayerBuffersMscOML) -#define wglWaitForMscOML WGLEW_GET_FUN(__wglewWaitForMscOML) -#define wglWaitForSbcOML WGLEW_GET_FUN(__wglewWaitForSbcOML) - -#define WGLEW_OML_sync_control WGLEW_GET_VAR(__WGLEW_OML_sync_control) - -#endif /* WGL_OML_sync_control */ - -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX -#define WGLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT -#else -#define WGLEW_FUN_EXPORT GLEW_FUN_EXPORT -#define WGLEW_VAR_EXPORT GLEW_VAR_EXPORT -#endif /* GLEW_MX */ - -#ifdef GLEW_MX -struct WGLEWContextStruct -{ -#endif /* GLEW_MX */ - -WGLEW_FUN_EXPORT PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL; - -WGLEW_FUN_EXPORT PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC __wglewBlitContextFramebufferAMD; -WGLEW_FUN_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC __wglewCreateAssociatedContextAMD; -WGLEW_FUN_EXPORT PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __wglewCreateAssociatedContextAttribsAMD; -WGLEW_FUN_EXPORT PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC __wglewDeleteAssociatedContextAMD; -WGLEW_FUN_EXPORT PFNWGLGETCONTEXTGPUIDAMDPROC __wglewGetContextGPUIDAMD; -WGLEW_FUN_EXPORT PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC __wglewGetCurrentAssociatedContextAMD; -WGLEW_FUN_EXPORT PFNWGLGETGPUIDSAMDPROC __wglewGetGPUIDsAMD; -WGLEW_FUN_EXPORT PFNWGLGETGPUINFOAMDPROC __wglewGetGPUInfoAMD; -WGLEW_FUN_EXPORT PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __wglewMakeAssociatedContextCurrentAMD; - -WGLEW_FUN_EXPORT PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB; -WGLEW_FUN_EXPORT PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB; -WGLEW_FUN_EXPORT PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB; -WGLEW_FUN_EXPORT PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB; - -WGLEW_FUN_EXPORT PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB; - -WGLEW_FUN_EXPORT PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB; - -WGLEW_FUN_EXPORT PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB; -WGLEW_FUN_EXPORT PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB; - -WGLEW_FUN_EXPORT PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB; -WGLEW_FUN_EXPORT PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB; -WGLEW_FUN_EXPORT PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB; -WGLEW_FUN_EXPORT PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB; -WGLEW_FUN_EXPORT PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB; - -WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB; - -WGLEW_FUN_EXPORT PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB; -WGLEW_FUN_EXPORT PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB; -WGLEW_FUN_EXPORT PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB; - -WGLEW_FUN_EXPORT PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT; -WGLEW_FUN_EXPORT PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT; -WGLEW_FUN_EXPORT PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT; -WGLEW_FUN_EXPORT PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT; - -WGLEW_FUN_EXPORT PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT; - -WGLEW_FUN_EXPORT PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT; -WGLEW_FUN_EXPORT PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT; - -WGLEW_FUN_EXPORT PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT; -WGLEW_FUN_EXPORT PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT; -WGLEW_FUN_EXPORT PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT; -WGLEW_FUN_EXPORT PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT; -WGLEW_FUN_EXPORT PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT; - -WGLEW_FUN_EXPORT PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT; -WGLEW_FUN_EXPORT PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT; - -WGLEW_FUN_EXPORT PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT; -WGLEW_FUN_EXPORT PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT; - -WGLEW_FUN_EXPORT PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D; -WGLEW_FUN_EXPORT PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D; - -WGLEW_FUN_EXPORT PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D; -WGLEW_FUN_EXPORT PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D; -WGLEW_FUN_EXPORT PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D; -WGLEW_FUN_EXPORT PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D; - -WGLEW_FUN_EXPORT PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D; -WGLEW_FUN_EXPORT PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D; -WGLEW_FUN_EXPORT PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D; -WGLEW_FUN_EXPORT PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D; -WGLEW_FUN_EXPORT PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D; -WGLEW_FUN_EXPORT PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D; - -WGLEW_FUN_EXPORT PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D; -WGLEW_FUN_EXPORT PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D; -WGLEW_FUN_EXPORT PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D; -WGLEW_FUN_EXPORT PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D; - -WGLEW_FUN_EXPORT PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D; -WGLEW_FUN_EXPORT PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D; -WGLEW_FUN_EXPORT PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D; -WGLEW_FUN_EXPORT PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D; - -WGLEW_FUN_EXPORT PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D; -WGLEW_FUN_EXPORT PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D; -WGLEW_FUN_EXPORT PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D; -WGLEW_FUN_EXPORT PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D; - -WGLEW_FUN_EXPORT PFNWGLDXCLOSEDEVICENVPROC __wglewDXCloseDeviceNV; -WGLEW_FUN_EXPORT PFNWGLDXLOCKOBJECTSNVPROC __wglewDXLockObjectsNV; -WGLEW_FUN_EXPORT PFNWGLDXOBJECTACCESSNVPROC __wglewDXObjectAccessNV; -WGLEW_FUN_EXPORT PFNWGLDXOPENDEVICENVPROC __wglewDXOpenDeviceNV; -WGLEW_FUN_EXPORT PFNWGLDXREGISTEROBJECTNVPROC __wglewDXRegisterObjectNV; -WGLEW_FUN_EXPORT PFNWGLDXSETRESOURCESHAREHANDLENVPROC __wglewDXSetResourceShareHandleNV; -WGLEW_FUN_EXPORT PFNWGLDXUNLOCKOBJECTSNVPROC __wglewDXUnlockObjectsNV; -WGLEW_FUN_EXPORT PFNWGLDXUNREGISTEROBJECTNVPROC __wglewDXUnregisterObjectNV; - -WGLEW_FUN_EXPORT PFNWGLCOPYIMAGESUBDATANVPROC __wglewCopyImageSubDataNV; - -WGLEW_FUN_EXPORT PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV; -WGLEW_FUN_EXPORT PFNWGLDELETEDCNVPROC __wglewDeleteDCNV; -WGLEW_FUN_EXPORT PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV; -WGLEW_FUN_EXPORT PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV; -WGLEW_FUN_EXPORT PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV; - -WGLEW_FUN_EXPORT PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV; -WGLEW_FUN_EXPORT PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV; -WGLEW_FUN_EXPORT PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV; - -WGLEW_FUN_EXPORT PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV; -WGLEW_FUN_EXPORT PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV; -WGLEW_FUN_EXPORT PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV; -WGLEW_FUN_EXPORT PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV; -WGLEW_FUN_EXPORT PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV; -WGLEW_FUN_EXPORT PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV; - -WGLEW_FUN_EXPORT PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV; -WGLEW_FUN_EXPORT PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV; - -WGLEW_FUN_EXPORT PFNWGLBINDVIDEOCAPTUREDEVICENVPROC __wglewBindVideoCaptureDeviceNV; -WGLEW_FUN_EXPORT PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC __wglewEnumerateVideoCaptureDevicesNV; -WGLEW_FUN_EXPORT PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC __wglewLockVideoCaptureDeviceNV; -WGLEW_FUN_EXPORT PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC __wglewQueryVideoCaptureDeviceNV; -WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC __wglewReleaseVideoCaptureDeviceNV; - -WGLEW_FUN_EXPORT PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV; -WGLEW_FUN_EXPORT PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV; -WGLEW_FUN_EXPORT PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV; -WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV; -WGLEW_FUN_EXPORT PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV; -WGLEW_FUN_EXPORT PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV; - -WGLEW_FUN_EXPORT PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML; -WGLEW_FUN_EXPORT PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML; -WGLEW_FUN_EXPORT PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML; -WGLEW_FUN_EXPORT PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML; -WGLEW_FUN_EXPORT PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML; -WGLEW_FUN_EXPORT PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML; -WGLEW_VAR_EXPORT GLboolean __WGLEW_3DFX_multisample; -WGLEW_VAR_EXPORT GLboolean __WGLEW_3DL_stereo_control; -WGLEW_VAR_EXPORT GLboolean __WGLEW_AMD_gpu_association; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_buffer_region; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_profile; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_create_context_robustness; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_extensions_string; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_framebuffer_sRGB; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_make_current_read; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_multisample; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pbuffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_pixel_format_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_render_texture; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_application_isolation; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ARB_robustness_share_group_isolation; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_pixel_format_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_ATI_render_texture_rectangle; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es2_profile; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_create_context_es_profile; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_depth_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_display_color_table; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_extensions_string; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_framebuffer_sRGB; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_make_current_read; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_multisample; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pbuffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pixel_format; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_pixel_format_packed_float; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_swap_control; -WGLEW_VAR_EXPORT GLboolean __WGLEW_EXT_swap_control_tear; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_digital_video_control; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_gamma; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_genlock; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_image_buffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_swap_frame_lock; -WGLEW_VAR_EXPORT GLboolean __WGLEW_I3D_swap_frame_usage; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_DX_interop; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_DX_interop2; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_copy_image; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_float_buffer; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_gpu_affinity; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_multisample_coverage; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_present_video; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_render_depth_texture; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_render_texture_rectangle; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_swap_group; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_vertex_array_range; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_capture; -WGLEW_VAR_EXPORT GLboolean __WGLEW_NV_video_output; -WGLEW_VAR_EXPORT GLboolean __WGLEW_OML_sync_control; - -#ifdef GLEW_MX -}; /* WGLEWContextStruct */ -#endif /* GLEW_MX */ - -/* ------------------------------------------------------------------------- */ - -#ifdef GLEW_MX - -typedef struct WGLEWContextStruct WGLEWContext; -GLEWAPI GLenum GLEWAPIENTRY wglewContextInit (WGLEWContext *ctx); -GLEWAPI GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext *ctx, const char *name); - -#define wglewInit() wglewContextInit(wglewGetContext()) -#define wglewIsSupported(x) wglewContextIsSupported(wglewGetContext(), x) - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&(wglewGetContext()->x)) -#define WGLEW_GET_FUN(x) wglewGetContext()->x - -#else /* GLEW_MX */ - -#define WGLEW_GET_VAR(x) (*(const GLboolean*)&x) -#define WGLEW_GET_FUN(x) x - -GLEWAPI GLboolean GLEWAPIENTRY wglewIsSupported (const char *name); - -#endif /* GLEW_MX */ - -GLEWAPI GLboolean GLEWAPIENTRY wglewGetExtension (const char *name); - -#ifdef __cplusplus -} -#endif - -#undef GLEWAPI - -#endif /* __wglew_h__ */ diff --git a/Engine/lib/glew/src/glew.c b/Engine/lib/glew/src/glew.c deleted file mode 100644 index d075b52488..0000000000 --- a/Engine/lib/glew/src/glew.c +++ /dev/null @@ -1,18123 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include - -#if defined(_WIN32) -# include -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -# include -#endif - -/* - * Define glewGetContext and related helper macros. - */ -#ifdef GLEW_MX -# define glewGetContext() ctx -# ifdef _WIN32 -# define GLEW_CONTEXT_ARG_DEF_INIT GLEWContext* ctx -# define GLEW_CONTEXT_ARG_VAR_INIT ctx -# define wglewGetContext() ctx -# define WGLEW_CONTEXT_ARG_DEF_INIT WGLEWContext* ctx -# define WGLEW_CONTEXT_ARG_DEF_LIST WGLEWContext* ctx -# else /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define glxewGetContext() ctx -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST GLXEWContext* ctx -# endif /* _WIN32 */ -# define GLEW_CONTEXT_ARG_DEF_LIST GLEWContext* ctx -#else /* GLEW_MX */ -# define GLEW_CONTEXT_ARG_DEF_INIT void -# define GLEW_CONTEXT_ARG_VAR_INIT -# define GLEW_CONTEXT_ARG_DEF_LIST void -# define WGLEW_CONTEXT_ARG_DEF_INIT void -# define WGLEW_CONTEXT_ARG_DEF_LIST void -# define GLXEW_CONTEXT_ARG_DEF_INIT void -# define GLXEW_CONTEXT_ARG_DEF_LIST void -#endif /* GLEW_MX */ - -#if defined(__sgi) || defined (__sun) || defined(GLEW_APPLE_GLX) -#include -#include -#include - -void* dlGetProcAddress (const GLubyte* name) -{ - static void* h = NULL; - static void* gpa; - - if (h == NULL) - { - if ((h = dlopen(NULL, RTLD_LAZY | RTLD_LOCAL)) == NULL) return NULL; - gpa = dlsym(h, "glXGetProcAddress"); - } - - if (gpa != NULL) - return ((void*(*)(const GLubyte*))gpa)(name); - else - return dlsym(h, (const char*)name); -} -#endif /* __sgi || __sun || GLEW_APPLE_GLX */ - -#if defined(__APPLE__) -#include -#include -#include - -#ifdef MAC_OS_X_VERSION_10_3 - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static void* image = NULL; - void* addr; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = dlopen("libRegal.dylib", RTLD_LAZY); -#else - image = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_LAZY); -#endif - } - if( !image ) return NULL; - addr = dlsym(image, (const char*)name); - if( addr ) return addr; -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#else - -#include - -void* NSGLGetProcAddress (const GLubyte *name) -{ - static const struct mach_header* image = NULL; - NSSymbol symbol; - char* symbolName; - if (NULL == image) - { -#ifdef GLEW_REGAL - image = NSAddImage("libRegal.dylib", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#else - image = NSAddImage("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", NSADDIMAGE_OPTION_RETURN_ON_ERROR); -#endif - } - /* prepend a '_' for the Unix C symbol mangling convention */ - symbolName = malloc(strlen((const char*)name) + 2); - strcpy(symbolName+1, (const char*)name); - symbolName[0] = '_'; - symbol = NULL; - /* if (NSIsSymbolNameDefined(symbolName)) - symbol = NSLookupAndBindSymbol(symbolName); */ - symbol = image ? NSLookupSymbolInImage(image, symbolName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR) : NULL; - free(symbolName); - if( symbol ) return NSAddressOfSymbol(symbol); -#ifdef GLEW_APPLE_GLX - return dlGetProcAddress( name ); // try next for glx symbols -#else - return NULL; -#endif -} -#endif /* MAC_OS_X_VERSION_10_3 */ -#endif /* __APPLE__ */ - -/* - * Define glewGetProcAddress. - */ -#if defined(_WIN32) -# define glewGetProcAddress(name) wglGetProcAddress((LPCSTR)name) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) -# define glewGetProcAddress(name) NSGLGetProcAddress(name) -#elif defined(__sgi) || defined(__sun) -# define glewGetProcAddress(name) dlGetProcAddress(name) -#elif defined(__ANDROID__) -# define glewGetProcAddress(name) NULL /* TODO */ -#elif defined(__native_client__) -# define glewGetProcAddress(name) NULL /* TODO */ -#else /* __linux */ -# define glewGetProcAddress(name) (*glXGetProcAddressARB)(name) -#endif - -/* - * Define GLboolean const cast. - */ -#define CONST_CAST(x) (*(GLboolean*)&x) - -/* - * GLEW, just like OpenGL or GLU, does not rely on the standard C library. - * These functions implement the functionality required in this file. - */ -static GLuint _glewStrLen (const GLubyte* s) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0') i++; - return i; -} - -static GLuint _glewStrCLen (const GLubyte* s, GLubyte c) -{ - GLuint i=0; - if (s == NULL) return 0; - while (s[i] != '\0' && s[i] != c) i++; - return (s[i] == '\0' || s[i] == c) ? i : 0; -} - -static GLboolean _glewStrSame (const GLubyte* a, const GLubyte* b, GLuint n) -{ - GLuint i=0; - if(a == NULL || b == NULL) - return (a == NULL && b == NULL && n == 0) ? GL_TRUE : GL_FALSE; - while (i < n && a[i] != '\0' && b[i] != '\0' && a[i] == b[i]) i++; - return i == n ? GL_TRUE : GL_FALSE; -} - -static GLboolean _glewStrSame1 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - while (*na > 0 && (**a == ' ' || **a == '\n' || **a == '\r' || **a == '\t')) - { - (*a)++; - (*na)--; - } - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame2 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if(i == nb) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -static GLboolean _glewStrSame3 (GLubyte** a, GLuint* na, const GLubyte* b, GLuint nb) -{ - if(*na >= nb) - { - GLuint i=0; - while (i < nb && (*a)+i != NULL && b+i != NULL && (*a)[i] == b[i]) i++; - if (i == nb && (*na == nb || (*a)[i] == ' ' || (*a)[i] == '\n' || (*a)[i] == '\r' || (*a)[i] == '\t')) - { - *a = *a + nb; - *na = *na - nb; - return GL_TRUE; - } - } - return GL_FALSE; -} - -/* - * Search for name in the extensions string. Use of strstr() - * is not sufficient because extension names can be prefixes of - * other extension names. Could use strtok() but the constant - * string returned by glGetString might be in read-only memory. - */ -static GLboolean _glewSearchExtension (const char* name, const GLubyte *start, const GLubyte *end) -{ - const GLubyte* p; - GLuint len = _glewStrLen((const GLubyte*)name); - p = start; - while (p < end) - { - GLuint n = _glewStrCLen(p, ' '); - if (len == n && _glewStrSame((const GLubyte*)name, p, n)) return GL_TRUE; - p += n+1; - } - return GL_FALSE; -} - -#if !defined(_WIN32) || !defined(GLEW_MX) - -PFNGLCOPYTEXSUBIMAGE3DPROC __glewCopyTexSubImage3D = NULL; -PFNGLDRAWRANGEELEMENTSPROC __glewDrawRangeElements = NULL; -PFNGLTEXIMAGE3DPROC __glewTexImage3D = NULL; -PFNGLTEXSUBIMAGE3DPROC __glewTexSubImage3D = NULL; - -PFNGLACTIVETEXTUREPROC __glewActiveTexture = NULL; -PFNGLCLIENTACTIVETEXTUREPROC __glewClientActiveTexture = NULL; -PFNGLCOMPRESSEDTEXIMAGE1DPROC __glewCompressedTexImage1D = NULL; -PFNGLCOMPRESSEDTEXIMAGE2DPROC __glewCompressedTexImage2D = NULL; -PFNGLCOMPRESSEDTEXIMAGE3DPROC __glewCompressedTexImage3D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC __glewCompressedTexSubImage1D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC __glewCompressedTexSubImage2D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC __glewCompressedTexSubImage3D = NULL; -PFNGLGETCOMPRESSEDTEXIMAGEPROC __glewGetCompressedTexImage = NULL; -PFNGLLOADTRANSPOSEMATRIXDPROC __glewLoadTransposeMatrixd = NULL; -PFNGLLOADTRANSPOSEMATRIXFPROC __glewLoadTransposeMatrixf = NULL; -PFNGLMULTTRANSPOSEMATRIXDPROC __glewMultTransposeMatrixd = NULL; -PFNGLMULTTRANSPOSEMATRIXFPROC __glewMultTransposeMatrixf = NULL; -PFNGLMULTITEXCOORD1DPROC __glewMultiTexCoord1d = NULL; -PFNGLMULTITEXCOORD1DVPROC __glewMultiTexCoord1dv = NULL; -PFNGLMULTITEXCOORD1FPROC __glewMultiTexCoord1f = NULL; -PFNGLMULTITEXCOORD1FVPROC __glewMultiTexCoord1fv = NULL; -PFNGLMULTITEXCOORD1IPROC __glewMultiTexCoord1i = NULL; -PFNGLMULTITEXCOORD1IVPROC __glewMultiTexCoord1iv = NULL; -PFNGLMULTITEXCOORD1SPROC __glewMultiTexCoord1s = NULL; -PFNGLMULTITEXCOORD1SVPROC __glewMultiTexCoord1sv = NULL; -PFNGLMULTITEXCOORD2DPROC __glewMultiTexCoord2d = NULL; -PFNGLMULTITEXCOORD2DVPROC __glewMultiTexCoord2dv = NULL; -PFNGLMULTITEXCOORD2FPROC __glewMultiTexCoord2f = NULL; -PFNGLMULTITEXCOORD2FVPROC __glewMultiTexCoord2fv = NULL; -PFNGLMULTITEXCOORD2IPROC __glewMultiTexCoord2i = NULL; -PFNGLMULTITEXCOORD2IVPROC __glewMultiTexCoord2iv = NULL; -PFNGLMULTITEXCOORD2SPROC __glewMultiTexCoord2s = NULL; -PFNGLMULTITEXCOORD2SVPROC __glewMultiTexCoord2sv = NULL; -PFNGLMULTITEXCOORD3DPROC __glewMultiTexCoord3d = NULL; -PFNGLMULTITEXCOORD3DVPROC __glewMultiTexCoord3dv = NULL; -PFNGLMULTITEXCOORD3FPROC __glewMultiTexCoord3f = NULL; -PFNGLMULTITEXCOORD3FVPROC __glewMultiTexCoord3fv = NULL; -PFNGLMULTITEXCOORD3IPROC __glewMultiTexCoord3i = NULL; -PFNGLMULTITEXCOORD3IVPROC __glewMultiTexCoord3iv = NULL; -PFNGLMULTITEXCOORD3SPROC __glewMultiTexCoord3s = NULL; -PFNGLMULTITEXCOORD3SVPROC __glewMultiTexCoord3sv = NULL; -PFNGLMULTITEXCOORD4DPROC __glewMultiTexCoord4d = NULL; -PFNGLMULTITEXCOORD4DVPROC __glewMultiTexCoord4dv = NULL; -PFNGLMULTITEXCOORD4FPROC __glewMultiTexCoord4f = NULL; -PFNGLMULTITEXCOORD4FVPROC __glewMultiTexCoord4fv = NULL; -PFNGLMULTITEXCOORD4IPROC __glewMultiTexCoord4i = NULL; -PFNGLMULTITEXCOORD4IVPROC __glewMultiTexCoord4iv = NULL; -PFNGLMULTITEXCOORD4SPROC __glewMultiTexCoord4s = NULL; -PFNGLMULTITEXCOORD4SVPROC __glewMultiTexCoord4sv = NULL; -PFNGLSAMPLECOVERAGEPROC __glewSampleCoverage = NULL; - -PFNGLBLENDCOLORPROC __glewBlendColor = NULL; -PFNGLBLENDEQUATIONPROC __glewBlendEquation = NULL; -PFNGLBLENDFUNCSEPARATEPROC __glewBlendFuncSeparate = NULL; -PFNGLFOGCOORDPOINTERPROC __glewFogCoordPointer = NULL; -PFNGLFOGCOORDDPROC __glewFogCoordd = NULL; -PFNGLFOGCOORDDVPROC __glewFogCoorddv = NULL; -PFNGLFOGCOORDFPROC __glewFogCoordf = NULL; -PFNGLFOGCOORDFVPROC __glewFogCoordfv = NULL; -PFNGLMULTIDRAWARRAYSPROC __glewMultiDrawArrays = NULL; -PFNGLMULTIDRAWELEMENTSPROC __glewMultiDrawElements = NULL; -PFNGLPOINTPARAMETERFPROC __glewPointParameterf = NULL; -PFNGLPOINTPARAMETERFVPROC __glewPointParameterfv = NULL; -PFNGLPOINTPARAMETERIPROC __glewPointParameteri = NULL; -PFNGLPOINTPARAMETERIVPROC __glewPointParameteriv = NULL; -PFNGLSECONDARYCOLOR3BPROC __glewSecondaryColor3b = NULL; -PFNGLSECONDARYCOLOR3BVPROC __glewSecondaryColor3bv = NULL; -PFNGLSECONDARYCOLOR3DPROC __glewSecondaryColor3d = NULL; -PFNGLSECONDARYCOLOR3DVPROC __glewSecondaryColor3dv = NULL; -PFNGLSECONDARYCOLOR3FPROC __glewSecondaryColor3f = NULL; -PFNGLSECONDARYCOLOR3FVPROC __glewSecondaryColor3fv = NULL; -PFNGLSECONDARYCOLOR3IPROC __glewSecondaryColor3i = NULL; -PFNGLSECONDARYCOLOR3IVPROC __glewSecondaryColor3iv = NULL; -PFNGLSECONDARYCOLOR3SPROC __glewSecondaryColor3s = NULL; -PFNGLSECONDARYCOLOR3SVPROC __glewSecondaryColor3sv = NULL; -PFNGLSECONDARYCOLOR3UBPROC __glewSecondaryColor3ub = NULL; -PFNGLSECONDARYCOLOR3UBVPROC __glewSecondaryColor3ubv = NULL; -PFNGLSECONDARYCOLOR3UIPROC __glewSecondaryColor3ui = NULL; -PFNGLSECONDARYCOLOR3UIVPROC __glewSecondaryColor3uiv = NULL; -PFNGLSECONDARYCOLOR3USPROC __glewSecondaryColor3us = NULL; -PFNGLSECONDARYCOLOR3USVPROC __glewSecondaryColor3usv = NULL; -PFNGLSECONDARYCOLORPOINTERPROC __glewSecondaryColorPointer = NULL; -PFNGLWINDOWPOS2DPROC __glewWindowPos2d = NULL; -PFNGLWINDOWPOS2DVPROC __glewWindowPos2dv = NULL; -PFNGLWINDOWPOS2FPROC __glewWindowPos2f = NULL; -PFNGLWINDOWPOS2FVPROC __glewWindowPos2fv = NULL; -PFNGLWINDOWPOS2IPROC __glewWindowPos2i = NULL; -PFNGLWINDOWPOS2IVPROC __glewWindowPos2iv = NULL; -PFNGLWINDOWPOS2SPROC __glewWindowPos2s = NULL; -PFNGLWINDOWPOS2SVPROC __glewWindowPos2sv = NULL; -PFNGLWINDOWPOS3DPROC __glewWindowPos3d = NULL; -PFNGLWINDOWPOS3DVPROC __glewWindowPos3dv = NULL; -PFNGLWINDOWPOS3FPROC __glewWindowPos3f = NULL; -PFNGLWINDOWPOS3FVPROC __glewWindowPos3fv = NULL; -PFNGLWINDOWPOS3IPROC __glewWindowPos3i = NULL; -PFNGLWINDOWPOS3IVPROC __glewWindowPos3iv = NULL; -PFNGLWINDOWPOS3SPROC __glewWindowPos3s = NULL; -PFNGLWINDOWPOS3SVPROC __glewWindowPos3sv = NULL; - -PFNGLBEGINQUERYPROC __glewBeginQuery = NULL; -PFNGLBINDBUFFERPROC __glewBindBuffer = NULL; -PFNGLBUFFERDATAPROC __glewBufferData = NULL; -PFNGLBUFFERSUBDATAPROC __glewBufferSubData = NULL; -PFNGLDELETEBUFFERSPROC __glewDeleteBuffers = NULL; -PFNGLDELETEQUERIESPROC __glewDeleteQueries = NULL; -PFNGLENDQUERYPROC __glewEndQuery = NULL; -PFNGLGENBUFFERSPROC __glewGenBuffers = NULL; -PFNGLGENQUERIESPROC __glewGenQueries = NULL; -PFNGLGETBUFFERPARAMETERIVPROC __glewGetBufferParameteriv = NULL; -PFNGLGETBUFFERPOINTERVPROC __glewGetBufferPointerv = NULL; -PFNGLGETBUFFERSUBDATAPROC __glewGetBufferSubData = NULL; -PFNGLGETQUERYOBJECTIVPROC __glewGetQueryObjectiv = NULL; -PFNGLGETQUERYOBJECTUIVPROC __glewGetQueryObjectuiv = NULL; -PFNGLGETQUERYIVPROC __glewGetQueryiv = NULL; -PFNGLISBUFFERPROC __glewIsBuffer = NULL; -PFNGLISQUERYPROC __glewIsQuery = NULL; -PFNGLMAPBUFFERPROC __glewMapBuffer = NULL; -PFNGLUNMAPBUFFERPROC __glewUnmapBuffer = NULL; - -PFNGLATTACHSHADERPROC __glewAttachShader = NULL; -PFNGLBINDATTRIBLOCATIONPROC __glewBindAttribLocation = NULL; -PFNGLBLENDEQUATIONSEPARATEPROC __glewBlendEquationSeparate = NULL; -PFNGLCOMPILESHADERPROC __glewCompileShader = NULL; -PFNGLCREATEPROGRAMPROC __glewCreateProgram = NULL; -PFNGLCREATESHADERPROC __glewCreateShader = NULL; -PFNGLDELETEPROGRAMPROC __glewDeleteProgram = NULL; -PFNGLDELETESHADERPROC __glewDeleteShader = NULL; -PFNGLDETACHSHADERPROC __glewDetachShader = NULL; -PFNGLDISABLEVERTEXATTRIBARRAYPROC __glewDisableVertexAttribArray = NULL; -PFNGLDRAWBUFFERSPROC __glewDrawBuffers = NULL; -PFNGLENABLEVERTEXATTRIBARRAYPROC __glewEnableVertexAttribArray = NULL; -PFNGLGETACTIVEATTRIBPROC __glewGetActiveAttrib = NULL; -PFNGLGETACTIVEUNIFORMPROC __glewGetActiveUniform = NULL; -PFNGLGETATTACHEDSHADERSPROC __glewGetAttachedShaders = NULL; -PFNGLGETATTRIBLOCATIONPROC __glewGetAttribLocation = NULL; -PFNGLGETPROGRAMINFOLOGPROC __glewGetProgramInfoLog = NULL; -PFNGLGETPROGRAMIVPROC __glewGetProgramiv = NULL; -PFNGLGETSHADERINFOLOGPROC __glewGetShaderInfoLog = NULL; -PFNGLGETSHADERSOURCEPROC __glewGetShaderSource = NULL; -PFNGLGETSHADERIVPROC __glewGetShaderiv = NULL; -PFNGLGETUNIFORMLOCATIONPROC __glewGetUniformLocation = NULL; -PFNGLGETUNIFORMFVPROC __glewGetUniformfv = NULL; -PFNGLGETUNIFORMIVPROC __glewGetUniformiv = NULL; -PFNGLGETVERTEXATTRIBPOINTERVPROC __glewGetVertexAttribPointerv = NULL; -PFNGLGETVERTEXATTRIBDVPROC __glewGetVertexAttribdv = NULL; -PFNGLGETVERTEXATTRIBFVPROC __glewGetVertexAttribfv = NULL; -PFNGLGETVERTEXATTRIBIVPROC __glewGetVertexAttribiv = NULL; -PFNGLISPROGRAMPROC __glewIsProgram = NULL; -PFNGLISSHADERPROC __glewIsShader = NULL; -PFNGLLINKPROGRAMPROC __glewLinkProgram = NULL; -PFNGLSHADERSOURCEPROC __glewShaderSource = NULL; -PFNGLSTENCILFUNCSEPARATEPROC __glewStencilFuncSeparate = NULL; -PFNGLSTENCILMASKSEPARATEPROC __glewStencilMaskSeparate = NULL; -PFNGLSTENCILOPSEPARATEPROC __glewStencilOpSeparate = NULL; -PFNGLUNIFORM1FPROC __glewUniform1f = NULL; -PFNGLUNIFORM1FVPROC __glewUniform1fv = NULL; -PFNGLUNIFORM1IPROC __glewUniform1i = NULL; -PFNGLUNIFORM1IVPROC __glewUniform1iv = NULL; -PFNGLUNIFORM2FPROC __glewUniform2f = NULL; -PFNGLUNIFORM2FVPROC __glewUniform2fv = NULL; -PFNGLUNIFORM2IPROC __glewUniform2i = NULL; -PFNGLUNIFORM2IVPROC __glewUniform2iv = NULL; -PFNGLUNIFORM3FPROC __glewUniform3f = NULL; -PFNGLUNIFORM3FVPROC __glewUniform3fv = NULL; -PFNGLUNIFORM3IPROC __glewUniform3i = NULL; -PFNGLUNIFORM3IVPROC __glewUniform3iv = NULL; -PFNGLUNIFORM4FPROC __glewUniform4f = NULL; -PFNGLUNIFORM4FVPROC __glewUniform4fv = NULL; -PFNGLUNIFORM4IPROC __glewUniform4i = NULL; -PFNGLUNIFORM4IVPROC __glewUniform4iv = NULL; -PFNGLUNIFORMMATRIX2FVPROC __glewUniformMatrix2fv = NULL; -PFNGLUNIFORMMATRIX3FVPROC __glewUniformMatrix3fv = NULL; -PFNGLUNIFORMMATRIX4FVPROC __glewUniformMatrix4fv = NULL; -PFNGLUSEPROGRAMPROC __glewUseProgram = NULL; -PFNGLVALIDATEPROGRAMPROC __glewValidateProgram = NULL; -PFNGLVERTEXATTRIB1DPROC __glewVertexAttrib1d = NULL; -PFNGLVERTEXATTRIB1DVPROC __glewVertexAttrib1dv = NULL; -PFNGLVERTEXATTRIB1FPROC __glewVertexAttrib1f = NULL; -PFNGLVERTEXATTRIB1FVPROC __glewVertexAttrib1fv = NULL; -PFNGLVERTEXATTRIB1SPROC __glewVertexAttrib1s = NULL; -PFNGLVERTEXATTRIB1SVPROC __glewVertexAttrib1sv = NULL; -PFNGLVERTEXATTRIB2DPROC __glewVertexAttrib2d = NULL; -PFNGLVERTEXATTRIB2DVPROC __glewVertexAttrib2dv = NULL; -PFNGLVERTEXATTRIB2FPROC __glewVertexAttrib2f = NULL; -PFNGLVERTEXATTRIB2FVPROC __glewVertexAttrib2fv = NULL; -PFNGLVERTEXATTRIB2SPROC __glewVertexAttrib2s = NULL; -PFNGLVERTEXATTRIB2SVPROC __glewVertexAttrib2sv = NULL; -PFNGLVERTEXATTRIB3DPROC __glewVertexAttrib3d = NULL; -PFNGLVERTEXATTRIB3DVPROC __glewVertexAttrib3dv = NULL; -PFNGLVERTEXATTRIB3FPROC __glewVertexAttrib3f = NULL; -PFNGLVERTEXATTRIB3FVPROC __glewVertexAttrib3fv = NULL; -PFNGLVERTEXATTRIB3SPROC __glewVertexAttrib3s = NULL; -PFNGLVERTEXATTRIB3SVPROC __glewVertexAttrib3sv = NULL; -PFNGLVERTEXATTRIB4NBVPROC __glewVertexAttrib4Nbv = NULL; -PFNGLVERTEXATTRIB4NIVPROC __glewVertexAttrib4Niv = NULL; -PFNGLVERTEXATTRIB4NSVPROC __glewVertexAttrib4Nsv = NULL; -PFNGLVERTEXATTRIB4NUBPROC __glewVertexAttrib4Nub = NULL; -PFNGLVERTEXATTRIB4NUBVPROC __glewVertexAttrib4Nubv = NULL; -PFNGLVERTEXATTRIB4NUIVPROC __glewVertexAttrib4Nuiv = NULL; -PFNGLVERTEXATTRIB4NUSVPROC __glewVertexAttrib4Nusv = NULL; -PFNGLVERTEXATTRIB4BVPROC __glewVertexAttrib4bv = NULL; -PFNGLVERTEXATTRIB4DPROC __glewVertexAttrib4d = NULL; -PFNGLVERTEXATTRIB4DVPROC __glewVertexAttrib4dv = NULL; -PFNGLVERTEXATTRIB4FPROC __glewVertexAttrib4f = NULL; -PFNGLVERTEXATTRIB4FVPROC __glewVertexAttrib4fv = NULL; -PFNGLVERTEXATTRIB4IVPROC __glewVertexAttrib4iv = NULL; -PFNGLVERTEXATTRIB4SPROC __glewVertexAttrib4s = NULL; -PFNGLVERTEXATTRIB4SVPROC __glewVertexAttrib4sv = NULL; -PFNGLVERTEXATTRIB4UBVPROC __glewVertexAttrib4ubv = NULL; -PFNGLVERTEXATTRIB4UIVPROC __glewVertexAttrib4uiv = NULL; -PFNGLVERTEXATTRIB4USVPROC __glewVertexAttrib4usv = NULL; -PFNGLVERTEXATTRIBPOINTERPROC __glewVertexAttribPointer = NULL; - -PFNGLUNIFORMMATRIX2X3FVPROC __glewUniformMatrix2x3fv = NULL; -PFNGLUNIFORMMATRIX2X4FVPROC __glewUniformMatrix2x4fv = NULL; -PFNGLUNIFORMMATRIX3X2FVPROC __glewUniformMatrix3x2fv = NULL; -PFNGLUNIFORMMATRIX3X4FVPROC __glewUniformMatrix3x4fv = NULL; -PFNGLUNIFORMMATRIX4X2FVPROC __glewUniformMatrix4x2fv = NULL; -PFNGLUNIFORMMATRIX4X3FVPROC __glewUniformMatrix4x3fv = NULL; - -PFNGLBEGINCONDITIONALRENDERPROC __glewBeginConditionalRender = NULL; -PFNGLBEGINTRANSFORMFEEDBACKPROC __glewBeginTransformFeedback = NULL; -PFNGLBINDFRAGDATALOCATIONPROC __glewBindFragDataLocation = NULL; -PFNGLCLAMPCOLORPROC __glewClampColor = NULL; -PFNGLCLEARBUFFERFIPROC __glewClearBufferfi = NULL; -PFNGLCLEARBUFFERFVPROC __glewClearBufferfv = NULL; -PFNGLCLEARBUFFERIVPROC __glewClearBufferiv = NULL; -PFNGLCLEARBUFFERUIVPROC __glewClearBufferuiv = NULL; -PFNGLCOLORMASKIPROC __glewColorMaski = NULL; -PFNGLDISABLEIPROC __glewDisablei = NULL; -PFNGLENABLEIPROC __glewEnablei = NULL; -PFNGLENDCONDITIONALRENDERPROC __glewEndConditionalRender = NULL; -PFNGLENDTRANSFORMFEEDBACKPROC __glewEndTransformFeedback = NULL; -PFNGLGETBOOLEANI_VPROC __glewGetBooleani_v = NULL; -PFNGLGETFRAGDATALOCATIONPROC __glewGetFragDataLocation = NULL; -PFNGLGETSTRINGIPROC __glewGetStringi = NULL; -PFNGLGETTEXPARAMETERIIVPROC __glewGetTexParameterIiv = NULL; -PFNGLGETTEXPARAMETERIUIVPROC __glewGetTexParameterIuiv = NULL; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC __glewGetTransformFeedbackVarying = NULL; -PFNGLGETUNIFORMUIVPROC __glewGetUniformuiv = NULL; -PFNGLGETVERTEXATTRIBIIVPROC __glewGetVertexAttribIiv = NULL; -PFNGLGETVERTEXATTRIBIUIVPROC __glewGetVertexAttribIuiv = NULL; -PFNGLISENABLEDIPROC __glewIsEnabledi = NULL; -PFNGLTEXPARAMETERIIVPROC __glewTexParameterIiv = NULL; -PFNGLTEXPARAMETERIUIVPROC __glewTexParameterIuiv = NULL; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC __glewTransformFeedbackVaryings = NULL; -PFNGLUNIFORM1UIPROC __glewUniform1ui = NULL; -PFNGLUNIFORM1UIVPROC __glewUniform1uiv = NULL; -PFNGLUNIFORM2UIPROC __glewUniform2ui = NULL; -PFNGLUNIFORM2UIVPROC __glewUniform2uiv = NULL; -PFNGLUNIFORM3UIPROC __glewUniform3ui = NULL; -PFNGLUNIFORM3UIVPROC __glewUniform3uiv = NULL; -PFNGLUNIFORM4UIPROC __glewUniform4ui = NULL; -PFNGLUNIFORM4UIVPROC __glewUniform4uiv = NULL; -PFNGLVERTEXATTRIBI1IPROC __glewVertexAttribI1i = NULL; -PFNGLVERTEXATTRIBI1IVPROC __glewVertexAttribI1iv = NULL; -PFNGLVERTEXATTRIBI1UIPROC __glewVertexAttribI1ui = NULL; -PFNGLVERTEXATTRIBI1UIVPROC __glewVertexAttribI1uiv = NULL; -PFNGLVERTEXATTRIBI2IPROC __glewVertexAttribI2i = NULL; -PFNGLVERTEXATTRIBI2IVPROC __glewVertexAttribI2iv = NULL; -PFNGLVERTEXATTRIBI2UIPROC __glewVertexAttribI2ui = NULL; -PFNGLVERTEXATTRIBI2UIVPROC __glewVertexAttribI2uiv = NULL; -PFNGLVERTEXATTRIBI3IPROC __glewVertexAttribI3i = NULL; -PFNGLVERTEXATTRIBI3IVPROC __glewVertexAttribI3iv = NULL; -PFNGLVERTEXATTRIBI3UIPROC __glewVertexAttribI3ui = NULL; -PFNGLVERTEXATTRIBI3UIVPROC __glewVertexAttribI3uiv = NULL; -PFNGLVERTEXATTRIBI4BVPROC __glewVertexAttribI4bv = NULL; -PFNGLVERTEXATTRIBI4IPROC __glewVertexAttribI4i = NULL; -PFNGLVERTEXATTRIBI4IVPROC __glewVertexAttribI4iv = NULL; -PFNGLVERTEXATTRIBI4SVPROC __glewVertexAttribI4sv = NULL; -PFNGLVERTEXATTRIBI4UBVPROC __glewVertexAttribI4ubv = NULL; -PFNGLVERTEXATTRIBI4UIPROC __glewVertexAttribI4ui = NULL; -PFNGLVERTEXATTRIBI4UIVPROC __glewVertexAttribI4uiv = NULL; -PFNGLVERTEXATTRIBI4USVPROC __glewVertexAttribI4usv = NULL; -PFNGLVERTEXATTRIBIPOINTERPROC __glewVertexAttribIPointer = NULL; - -PFNGLDRAWARRAYSINSTANCEDPROC __glewDrawArraysInstanced = NULL; -PFNGLDRAWELEMENTSINSTANCEDPROC __glewDrawElementsInstanced = NULL; -PFNGLPRIMITIVERESTARTINDEXPROC __glewPrimitiveRestartIndex = NULL; -PFNGLTEXBUFFERPROC __glewTexBuffer = NULL; - -PFNGLFRAMEBUFFERTEXTUREPROC __glewFramebufferTexture = NULL; -PFNGLGETBUFFERPARAMETERI64VPROC __glewGetBufferParameteri64v = NULL; -PFNGLGETINTEGER64I_VPROC __glewGetInteger64i_v = NULL; - -PFNGLVERTEXATTRIBDIVISORPROC __glewVertexAttribDivisor = NULL; - -PFNGLBLENDEQUATIONSEPARATEIPROC __glewBlendEquationSeparatei = NULL; -PFNGLBLENDEQUATIONIPROC __glewBlendEquationi = NULL; -PFNGLBLENDFUNCSEPARATEIPROC __glewBlendFuncSeparatei = NULL; -PFNGLBLENDFUNCIPROC __glewBlendFunci = NULL; -PFNGLMINSAMPLESHADINGPROC __glewMinSampleShading = NULL; - -PFNGLTBUFFERMASK3DFXPROC __glewTbufferMask3DFX = NULL; - -PFNGLDEBUGMESSAGECALLBACKAMDPROC __glewDebugMessageCallbackAMD = NULL; -PFNGLDEBUGMESSAGEENABLEAMDPROC __glewDebugMessageEnableAMD = NULL; -PFNGLDEBUGMESSAGEINSERTAMDPROC __glewDebugMessageInsertAMD = NULL; -PFNGLGETDEBUGMESSAGELOGAMDPROC __glewGetDebugMessageLogAMD = NULL; - -PFNGLBLENDEQUATIONINDEXEDAMDPROC __glewBlendEquationIndexedAMD = NULL; -PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC __glewBlendEquationSeparateIndexedAMD = NULL; -PFNGLBLENDFUNCINDEXEDAMDPROC __glewBlendFuncIndexedAMD = NULL; -PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC __glewBlendFuncSeparateIndexedAMD = NULL; - -PFNGLVERTEXATTRIBPARAMETERIAMDPROC __glewVertexAttribParameteriAMD = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC __glewMultiDrawArraysIndirectAMD = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC __glewMultiDrawElementsIndirectAMD = NULL; - -PFNGLDELETENAMESAMDPROC __glewDeleteNamesAMD = NULL; -PFNGLGENNAMESAMDPROC __glewGenNamesAMD = NULL; -PFNGLISNAMEAMDPROC __glewIsNameAMD = NULL; - -PFNGLBEGINPERFMONITORAMDPROC __glewBeginPerfMonitorAMD = NULL; -PFNGLDELETEPERFMONITORSAMDPROC __glewDeletePerfMonitorsAMD = NULL; -PFNGLENDPERFMONITORAMDPROC __glewEndPerfMonitorAMD = NULL; -PFNGLGENPERFMONITORSAMDPROC __glewGenPerfMonitorsAMD = NULL; -PFNGLGETPERFMONITORCOUNTERDATAAMDPROC __glewGetPerfMonitorCounterDataAMD = NULL; -PFNGLGETPERFMONITORCOUNTERINFOAMDPROC __glewGetPerfMonitorCounterInfoAMD = NULL; -PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC __glewGetPerfMonitorCounterStringAMD = NULL; -PFNGLGETPERFMONITORCOUNTERSAMDPROC __glewGetPerfMonitorCountersAMD = NULL; -PFNGLGETPERFMONITORGROUPSTRINGAMDPROC __glewGetPerfMonitorGroupStringAMD = NULL; -PFNGLGETPERFMONITORGROUPSAMDPROC __glewGetPerfMonitorGroupsAMD = NULL; -PFNGLSELECTPERFMONITORCOUNTERSAMDPROC __glewSelectPerfMonitorCountersAMD = NULL; - -PFNGLSETMULTISAMPLEFVAMDPROC __glewSetMultisamplefvAMD = NULL; - -PFNGLTEXSTORAGESPARSEAMDPROC __glewTexStorageSparseAMD = NULL; -PFNGLTEXTURESTORAGESPARSEAMDPROC __glewTextureStorageSparseAMD = NULL; - -PFNGLSTENCILOPVALUEAMDPROC __glewStencilOpValueAMD = NULL; - -PFNGLTESSELLATIONFACTORAMDPROC __glewTessellationFactorAMD = NULL; -PFNGLTESSELLATIONMODEAMDPROC __glewTessellationModeAMD = NULL; - -PFNGLBLITFRAMEBUFFERANGLEPROC __glewBlitFramebufferANGLE = NULL; - -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC __glewRenderbufferStorageMultisampleANGLE = NULL; - -PFNGLDRAWARRAYSINSTANCEDANGLEPROC __glewDrawArraysInstancedANGLE = NULL; -PFNGLDRAWELEMENTSINSTANCEDANGLEPROC __glewDrawElementsInstancedANGLE = NULL; -PFNGLVERTEXATTRIBDIVISORANGLEPROC __glewVertexAttribDivisorANGLE = NULL; - -PFNGLBEGINQUERYANGLEPROC __glewBeginQueryANGLE = NULL; -PFNGLDELETEQUERIESANGLEPROC __glewDeleteQueriesANGLE = NULL; -PFNGLENDQUERYANGLEPROC __glewEndQueryANGLE = NULL; -PFNGLGENQUERIESANGLEPROC __glewGenQueriesANGLE = NULL; -PFNGLGETQUERYOBJECTI64VANGLEPROC __glewGetQueryObjecti64vANGLE = NULL; -PFNGLGETQUERYOBJECTIVANGLEPROC __glewGetQueryObjectivANGLE = NULL; -PFNGLGETQUERYOBJECTUI64VANGLEPROC __glewGetQueryObjectui64vANGLE = NULL; -PFNGLGETQUERYOBJECTUIVANGLEPROC __glewGetQueryObjectuivANGLE = NULL; -PFNGLGETQUERYIVANGLEPROC __glewGetQueryivANGLE = NULL; -PFNGLISQUERYANGLEPROC __glewIsQueryANGLE = NULL; -PFNGLQUERYCOUNTERANGLEPROC __glewQueryCounterANGLE = NULL; - -PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC __glewGetTranslatedShaderSourceANGLE = NULL; - -PFNGLDRAWELEMENTARRAYAPPLEPROC __glewDrawElementArrayAPPLE = NULL; -PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC __glewDrawRangeElementArrayAPPLE = NULL; -PFNGLELEMENTPOINTERAPPLEPROC __glewElementPointerAPPLE = NULL; -PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC __glewMultiDrawElementArrayAPPLE = NULL; -PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC __glewMultiDrawRangeElementArrayAPPLE = NULL; - -PFNGLDELETEFENCESAPPLEPROC __glewDeleteFencesAPPLE = NULL; -PFNGLFINISHFENCEAPPLEPROC __glewFinishFenceAPPLE = NULL; -PFNGLFINISHOBJECTAPPLEPROC __glewFinishObjectAPPLE = NULL; -PFNGLGENFENCESAPPLEPROC __glewGenFencesAPPLE = NULL; -PFNGLISFENCEAPPLEPROC __glewIsFenceAPPLE = NULL; -PFNGLSETFENCEAPPLEPROC __glewSetFenceAPPLE = NULL; -PFNGLTESTFENCEAPPLEPROC __glewTestFenceAPPLE = NULL; -PFNGLTESTOBJECTAPPLEPROC __glewTestObjectAPPLE = NULL; - -PFNGLBUFFERPARAMETERIAPPLEPROC __glewBufferParameteriAPPLE = NULL; -PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC __glewFlushMappedBufferRangeAPPLE = NULL; - -PFNGLGETOBJECTPARAMETERIVAPPLEPROC __glewGetObjectParameterivAPPLE = NULL; -PFNGLOBJECTPURGEABLEAPPLEPROC __glewObjectPurgeableAPPLE = NULL; -PFNGLOBJECTUNPURGEABLEAPPLEPROC __glewObjectUnpurgeableAPPLE = NULL; - -PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC __glewGetTexParameterPointervAPPLE = NULL; -PFNGLTEXTURERANGEAPPLEPROC __glewTextureRangeAPPLE = NULL; - -PFNGLBINDVERTEXARRAYAPPLEPROC __glewBindVertexArrayAPPLE = NULL; -PFNGLDELETEVERTEXARRAYSAPPLEPROC __glewDeleteVertexArraysAPPLE = NULL; -PFNGLGENVERTEXARRAYSAPPLEPROC __glewGenVertexArraysAPPLE = NULL; -PFNGLISVERTEXARRAYAPPLEPROC __glewIsVertexArrayAPPLE = NULL; - -PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC __glewFlushVertexArrayRangeAPPLE = NULL; -PFNGLVERTEXARRAYPARAMETERIAPPLEPROC __glewVertexArrayParameteriAPPLE = NULL; -PFNGLVERTEXARRAYRANGEAPPLEPROC __glewVertexArrayRangeAPPLE = NULL; - -PFNGLDISABLEVERTEXATTRIBAPPLEPROC __glewDisableVertexAttribAPPLE = NULL; -PFNGLENABLEVERTEXATTRIBAPPLEPROC __glewEnableVertexAttribAPPLE = NULL; -PFNGLISVERTEXATTRIBENABLEDAPPLEPROC __glewIsVertexAttribEnabledAPPLE = NULL; -PFNGLMAPVERTEXATTRIB1DAPPLEPROC __glewMapVertexAttrib1dAPPLE = NULL; -PFNGLMAPVERTEXATTRIB1FAPPLEPROC __glewMapVertexAttrib1fAPPLE = NULL; -PFNGLMAPVERTEXATTRIB2DAPPLEPROC __glewMapVertexAttrib2dAPPLE = NULL; -PFNGLMAPVERTEXATTRIB2FAPPLEPROC __glewMapVertexAttrib2fAPPLE = NULL; - -PFNGLCLEARDEPTHFPROC __glewClearDepthf = NULL; -PFNGLDEPTHRANGEFPROC __glewDepthRangef = NULL; -PFNGLGETSHADERPRECISIONFORMATPROC __glewGetShaderPrecisionFormat = NULL; -PFNGLRELEASESHADERCOMPILERPROC __glewReleaseShaderCompiler = NULL; -PFNGLSHADERBINARYPROC __glewShaderBinary = NULL; - -PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC __glewDrawArraysInstancedBaseInstance = NULL; -PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC __glewDrawElementsInstancedBaseInstance = NULL; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC __glewDrawElementsInstancedBaseVertexBaseInstance = NULL; - -PFNGLGETIMAGEHANDLEARBPROC __glewGetImageHandleARB = NULL; -PFNGLGETTEXTUREHANDLEARBPROC __glewGetTextureHandleARB = NULL; -PFNGLGETTEXTURESAMPLERHANDLEARBPROC __glewGetTextureSamplerHandleARB = NULL; -PFNGLGETVERTEXATTRIBLUI64VARBPROC __glewGetVertexAttribLui64vARB = NULL; -PFNGLISIMAGEHANDLERESIDENTARBPROC __glewIsImageHandleResidentARB = NULL; -PFNGLISTEXTUREHANDLERESIDENTARBPROC __glewIsTextureHandleResidentARB = NULL; -PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC __glewMakeImageHandleNonResidentARB = NULL; -PFNGLMAKEIMAGEHANDLERESIDENTARBPROC __glewMakeImageHandleResidentARB = NULL; -PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC __glewMakeTextureHandleNonResidentARB = NULL; -PFNGLMAKETEXTUREHANDLERESIDENTARBPROC __glewMakeTextureHandleResidentARB = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC __glewProgramUniformHandleui64ARB = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC __glewProgramUniformHandleui64vARB = NULL; -PFNGLUNIFORMHANDLEUI64ARBPROC __glewUniformHandleui64ARB = NULL; -PFNGLUNIFORMHANDLEUI64VARBPROC __glewUniformHandleui64vARB = NULL; -PFNGLVERTEXATTRIBL1UI64ARBPROC __glewVertexAttribL1ui64ARB = NULL; -PFNGLVERTEXATTRIBL1UI64VARBPROC __glewVertexAttribL1ui64vARB = NULL; - -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC __glewBindFragDataLocationIndexed = NULL; -PFNGLGETFRAGDATAINDEXPROC __glewGetFragDataIndex = NULL; - -PFNGLBUFFERSTORAGEPROC __glewBufferStorage = NULL; -PFNGLNAMEDBUFFERSTORAGEEXTPROC __glewNamedBufferStorageEXT = NULL; - -PFNGLCREATESYNCFROMCLEVENTARBPROC __glewCreateSyncFromCLeventARB = NULL; - -PFNGLCLEARBUFFERDATAPROC __glewClearBufferData = NULL; -PFNGLCLEARBUFFERSUBDATAPROC __glewClearBufferSubData = NULL; -PFNGLCLEARNAMEDBUFFERDATAEXTPROC __glewClearNamedBufferDataEXT = NULL; -PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC __glewClearNamedBufferSubDataEXT = NULL; - -PFNGLCLEARTEXIMAGEPROC __glewClearTexImage = NULL; -PFNGLCLEARTEXSUBIMAGEPROC __glewClearTexSubImage = NULL; - -PFNGLCLAMPCOLORARBPROC __glewClampColorARB = NULL; - -PFNGLDISPATCHCOMPUTEPROC __glewDispatchCompute = NULL; -PFNGLDISPATCHCOMPUTEINDIRECTPROC __glewDispatchComputeIndirect = NULL; - -PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC __glewDispatchComputeGroupSizeARB = NULL; - -PFNGLCOPYBUFFERSUBDATAPROC __glewCopyBufferSubData = NULL; - -PFNGLCOPYIMAGESUBDATAPROC __glewCopyImageSubData = NULL; - -PFNGLDEBUGMESSAGECALLBACKARBPROC __glewDebugMessageCallbackARB = NULL; -PFNGLDEBUGMESSAGECONTROLARBPROC __glewDebugMessageControlARB = NULL; -PFNGLDEBUGMESSAGEINSERTARBPROC __glewDebugMessageInsertARB = NULL; -PFNGLGETDEBUGMESSAGELOGARBPROC __glewGetDebugMessageLogARB = NULL; - -PFNGLDRAWBUFFERSARBPROC __glewDrawBuffersARB = NULL; - -PFNGLBLENDEQUATIONSEPARATEIARBPROC __glewBlendEquationSeparateiARB = NULL; -PFNGLBLENDEQUATIONIARBPROC __glewBlendEquationiARB = NULL; -PFNGLBLENDFUNCSEPARATEIARBPROC __glewBlendFuncSeparateiARB = NULL; -PFNGLBLENDFUNCIARBPROC __glewBlendFunciARB = NULL; - -PFNGLDRAWELEMENTSBASEVERTEXPROC __glewDrawElementsBaseVertex = NULL; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC __glewDrawElementsInstancedBaseVertex = NULL; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC __glewDrawRangeElementsBaseVertex = NULL; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC __glewMultiDrawElementsBaseVertex = NULL; - -PFNGLDRAWARRAYSINDIRECTPROC __glewDrawArraysIndirect = NULL; -PFNGLDRAWELEMENTSINDIRECTPROC __glewDrawElementsIndirect = NULL; - -PFNGLFRAMEBUFFERPARAMETERIPROC __glewFramebufferParameteri = NULL; -PFNGLGETFRAMEBUFFERPARAMETERIVPROC __glewGetFramebufferParameteriv = NULL; -PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC __glewGetNamedFramebufferParameterivEXT = NULL; -PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC __glewNamedFramebufferParameteriEXT = NULL; - -PFNGLBINDFRAMEBUFFERPROC __glewBindFramebuffer = NULL; -PFNGLBINDRENDERBUFFERPROC __glewBindRenderbuffer = NULL; -PFNGLBLITFRAMEBUFFERPROC __glewBlitFramebuffer = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSPROC __glewCheckFramebufferStatus = NULL; -PFNGLDELETEFRAMEBUFFERSPROC __glewDeleteFramebuffers = NULL; -PFNGLDELETERENDERBUFFERSPROC __glewDeleteRenderbuffers = NULL; -PFNGLFRAMEBUFFERRENDERBUFFERPROC __glewFramebufferRenderbuffer = NULL; -PFNGLFRAMEBUFFERTEXTURE1DPROC __glewFramebufferTexture1D = NULL; -PFNGLFRAMEBUFFERTEXTURE2DPROC __glewFramebufferTexture2D = NULL; -PFNGLFRAMEBUFFERTEXTURE3DPROC __glewFramebufferTexture3D = NULL; -PFNGLFRAMEBUFFERTEXTURELAYERPROC __glewFramebufferTextureLayer = NULL; -PFNGLGENFRAMEBUFFERSPROC __glewGenFramebuffers = NULL; -PFNGLGENRENDERBUFFERSPROC __glewGenRenderbuffers = NULL; -PFNGLGENERATEMIPMAPPROC __glewGenerateMipmap = NULL; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC __glewGetFramebufferAttachmentParameteriv = NULL; -PFNGLGETRENDERBUFFERPARAMETERIVPROC __glewGetRenderbufferParameteriv = NULL; -PFNGLISFRAMEBUFFERPROC __glewIsFramebuffer = NULL; -PFNGLISRENDERBUFFERPROC __glewIsRenderbuffer = NULL; -PFNGLRENDERBUFFERSTORAGEPROC __glewRenderbufferStorage = NULL; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC __glewRenderbufferStorageMultisample = NULL; - -PFNGLFRAMEBUFFERTEXTUREARBPROC __glewFramebufferTextureARB = NULL; -PFNGLFRAMEBUFFERTEXTUREFACEARBPROC __glewFramebufferTextureFaceARB = NULL; -PFNGLFRAMEBUFFERTEXTURELAYERARBPROC __glewFramebufferTextureLayerARB = NULL; -PFNGLPROGRAMPARAMETERIARBPROC __glewProgramParameteriARB = NULL; - -PFNGLGETPROGRAMBINARYPROC __glewGetProgramBinary = NULL; -PFNGLPROGRAMBINARYPROC __glewProgramBinary = NULL; -PFNGLPROGRAMPARAMETERIPROC __glewProgramParameteri = NULL; - -PFNGLGETUNIFORMDVPROC __glewGetUniformdv = NULL; -PFNGLUNIFORM1DPROC __glewUniform1d = NULL; -PFNGLUNIFORM1DVPROC __glewUniform1dv = NULL; -PFNGLUNIFORM2DPROC __glewUniform2d = NULL; -PFNGLUNIFORM2DVPROC __glewUniform2dv = NULL; -PFNGLUNIFORM3DPROC __glewUniform3d = NULL; -PFNGLUNIFORM3DVPROC __glewUniform3dv = NULL; -PFNGLUNIFORM4DPROC __glewUniform4d = NULL; -PFNGLUNIFORM4DVPROC __glewUniform4dv = NULL; -PFNGLUNIFORMMATRIX2DVPROC __glewUniformMatrix2dv = NULL; -PFNGLUNIFORMMATRIX2X3DVPROC __glewUniformMatrix2x3dv = NULL; -PFNGLUNIFORMMATRIX2X4DVPROC __glewUniformMatrix2x4dv = NULL; -PFNGLUNIFORMMATRIX3DVPROC __glewUniformMatrix3dv = NULL; -PFNGLUNIFORMMATRIX3X2DVPROC __glewUniformMatrix3x2dv = NULL; -PFNGLUNIFORMMATRIX3X4DVPROC __glewUniformMatrix3x4dv = NULL; -PFNGLUNIFORMMATRIX4DVPROC __glewUniformMatrix4dv = NULL; -PFNGLUNIFORMMATRIX4X2DVPROC __glewUniformMatrix4x2dv = NULL; -PFNGLUNIFORMMATRIX4X3DVPROC __glewUniformMatrix4x3dv = NULL; - -PFNGLCOLORSUBTABLEPROC __glewColorSubTable = NULL; -PFNGLCOLORTABLEPROC __glewColorTable = NULL; -PFNGLCOLORTABLEPARAMETERFVPROC __glewColorTableParameterfv = NULL; -PFNGLCOLORTABLEPARAMETERIVPROC __glewColorTableParameteriv = NULL; -PFNGLCONVOLUTIONFILTER1DPROC __glewConvolutionFilter1D = NULL; -PFNGLCONVOLUTIONFILTER2DPROC __glewConvolutionFilter2D = NULL; -PFNGLCONVOLUTIONPARAMETERFPROC __glewConvolutionParameterf = NULL; -PFNGLCONVOLUTIONPARAMETERFVPROC __glewConvolutionParameterfv = NULL; -PFNGLCONVOLUTIONPARAMETERIPROC __glewConvolutionParameteri = NULL; -PFNGLCONVOLUTIONPARAMETERIVPROC __glewConvolutionParameteriv = NULL; -PFNGLCOPYCOLORSUBTABLEPROC __glewCopyColorSubTable = NULL; -PFNGLCOPYCOLORTABLEPROC __glewCopyColorTable = NULL; -PFNGLCOPYCONVOLUTIONFILTER1DPROC __glewCopyConvolutionFilter1D = NULL; -PFNGLCOPYCONVOLUTIONFILTER2DPROC __glewCopyConvolutionFilter2D = NULL; -PFNGLGETCOLORTABLEPROC __glewGetColorTable = NULL; -PFNGLGETCOLORTABLEPARAMETERFVPROC __glewGetColorTableParameterfv = NULL; -PFNGLGETCOLORTABLEPARAMETERIVPROC __glewGetColorTableParameteriv = NULL; -PFNGLGETCONVOLUTIONFILTERPROC __glewGetConvolutionFilter = NULL; -PFNGLGETCONVOLUTIONPARAMETERFVPROC __glewGetConvolutionParameterfv = NULL; -PFNGLGETCONVOLUTIONPARAMETERIVPROC __glewGetConvolutionParameteriv = NULL; -PFNGLGETHISTOGRAMPROC __glewGetHistogram = NULL; -PFNGLGETHISTOGRAMPARAMETERFVPROC __glewGetHistogramParameterfv = NULL; -PFNGLGETHISTOGRAMPARAMETERIVPROC __glewGetHistogramParameteriv = NULL; -PFNGLGETMINMAXPROC __glewGetMinmax = NULL; -PFNGLGETMINMAXPARAMETERFVPROC __glewGetMinmaxParameterfv = NULL; -PFNGLGETMINMAXPARAMETERIVPROC __glewGetMinmaxParameteriv = NULL; -PFNGLGETSEPARABLEFILTERPROC __glewGetSeparableFilter = NULL; -PFNGLHISTOGRAMPROC __glewHistogram = NULL; -PFNGLMINMAXPROC __glewMinmax = NULL; -PFNGLRESETHISTOGRAMPROC __glewResetHistogram = NULL; -PFNGLRESETMINMAXPROC __glewResetMinmax = NULL; -PFNGLSEPARABLEFILTER2DPROC __glewSeparableFilter2D = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC __glewMultiDrawArraysIndirectCountARB = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC __glewMultiDrawElementsIndirectCountARB = NULL; - -PFNGLDRAWARRAYSINSTANCEDARBPROC __glewDrawArraysInstancedARB = NULL; -PFNGLDRAWELEMENTSINSTANCEDARBPROC __glewDrawElementsInstancedARB = NULL; -PFNGLVERTEXATTRIBDIVISORARBPROC __glewVertexAttribDivisorARB = NULL; - -PFNGLGETINTERNALFORMATIVPROC __glewGetInternalformativ = NULL; - -PFNGLGETINTERNALFORMATI64VPROC __glewGetInternalformati64v = NULL; - -PFNGLINVALIDATEBUFFERDATAPROC __glewInvalidateBufferData = NULL; -PFNGLINVALIDATEBUFFERSUBDATAPROC __glewInvalidateBufferSubData = NULL; -PFNGLINVALIDATEFRAMEBUFFERPROC __glewInvalidateFramebuffer = NULL; -PFNGLINVALIDATESUBFRAMEBUFFERPROC __glewInvalidateSubFramebuffer = NULL; -PFNGLINVALIDATETEXIMAGEPROC __glewInvalidateTexImage = NULL; -PFNGLINVALIDATETEXSUBIMAGEPROC __glewInvalidateTexSubImage = NULL; - -PFNGLFLUSHMAPPEDBUFFERRANGEPROC __glewFlushMappedBufferRange = NULL; -PFNGLMAPBUFFERRANGEPROC __glewMapBufferRange = NULL; - -PFNGLCURRENTPALETTEMATRIXARBPROC __glewCurrentPaletteMatrixARB = NULL; -PFNGLMATRIXINDEXPOINTERARBPROC __glewMatrixIndexPointerARB = NULL; -PFNGLMATRIXINDEXUBVARBPROC __glewMatrixIndexubvARB = NULL; -PFNGLMATRIXINDEXUIVARBPROC __glewMatrixIndexuivARB = NULL; -PFNGLMATRIXINDEXUSVARBPROC __glewMatrixIndexusvARB = NULL; - -PFNGLBINDBUFFERSBASEPROC __glewBindBuffersBase = NULL; -PFNGLBINDBUFFERSRANGEPROC __glewBindBuffersRange = NULL; -PFNGLBINDIMAGETEXTURESPROC __glewBindImageTextures = NULL; -PFNGLBINDSAMPLERSPROC __glewBindSamplers = NULL; -PFNGLBINDTEXTURESPROC __glewBindTextures = NULL; -PFNGLBINDVERTEXBUFFERSPROC __glewBindVertexBuffers = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTPROC __glewMultiDrawArraysIndirect = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTPROC __glewMultiDrawElementsIndirect = NULL; - -PFNGLSAMPLECOVERAGEARBPROC __glewSampleCoverageARB = NULL; - -PFNGLACTIVETEXTUREARBPROC __glewActiveTextureARB = NULL; -PFNGLCLIENTACTIVETEXTUREARBPROC __glewClientActiveTextureARB = NULL; -PFNGLMULTITEXCOORD1DARBPROC __glewMultiTexCoord1dARB = NULL; -PFNGLMULTITEXCOORD1DVARBPROC __glewMultiTexCoord1dvARB = NULL; -PFNGLMULTITEXCOORD1FARBPROC __glewMultiTexCoord1fARB = NULL; -PFNGLMULTITEXCOORD1FVARBPROC __glewMultiTexCoord1fvARB = NULL; -PFNGLMULTITEXCOORD1IARBPROC __glewMultiTexCoord1iARB = NULL; -PFNGLMULTITEXCOORD1IVARBPROC __glewMultiTexCoord1ivARB = NULL; -PFNGLMULTITEXCOORD1SARBPROC __glewMultiTexCoord1sARB = NULL; -PFNGLMULTITEXCOORD1SVARBPROC __glewMultiTexCoord1svARB = NULL; -PFNGLMULTITEXCOORD2DARBPROC __glewMultiTexCoord2dARB = NULL; -PFNGLMULTITEXCOORD2DVARBPROC __glewMultiTexCoord2dvARB = NULL; -PFNGLMULTITEXCOORD2FARBPROC __glewMultiTexCoord2fARB = NULL; -PFNGLMULTITEXCOORD2FVARBPROC __glewMultiTexCoord2fvARB = NULL; -PFNGLMULTITEXCOORD2IARBPROC __glewMultiTexCoord2iARB = NULL; -PFNGLMULTITEXCOORD2IVARBPROC __glewMultiTexCoord2ivARB = NULL; -PFNGLMULTITEXCOORD2SARBPROC __glewMultiTexCoord2sARB = NULL; -PFNGLMULTITEXCOORD2SVARBPROC __glewMultiTexCoord2svARB = NULL; -PFNGLMULTITEXCOORD3DARBPROC __glewMultiTexCoord3dARB = NULL; -PFNGLMULTITEXCOORD3DVARBPROC __glewMultiTexCoord3dvARB = NULL; -PFNGLMULTITEXCOORD3FARBPROC __glewMultiTexCoord3fARB = NULL; -PFNGLMULTITEXCOORD3FVARBPROC __glewMultiTexCoord3fvARB = NULL; -PFNGLMULTITEXCOORD3IARBPROC __glewMultiTexCoord3iARB = NULL; -PFNGLMULTITEXCOORD3IVARBPROC __glewMultiTexCoord3ivARB = NULL; -PFNGLMULTITEXCOORD3SARBPROC __glewMultiTexCoord3sARB = NULL; -PFNGLMULTITEXCOORD3SVARBPROC __glewMultiTexCoord3svARB = NULL; -PFNGLMULTITEXCOORD4DARBPROC __glewMultiTexCoord4dARB = NULL; -PFNGLMULTITEXCOORD4DVARBPROC __glewMultiTexCoord4dvARB = NULL; -PFNGLMULTITEXCOORD4FARBPROC __glewMultiTexCoord4fARB = NULL; -PFNGLMULTITEXCOORD4FVARBPROC __glewMultiTexCoord4fvARB = NULL; -PFNGLMULTITEXCOORD4IARBPROC __glewMultiTexCoord4iARB = NULL; -PFNGLMULTITEXCOORD4IVARBPROC __glewMultiTexCoord4ivARB = NULL; -PFNGLMULTITEXCOORD4SARBPROC __glewMultiTexCoord4sARB = NULL; -PFNGLMULTITEXCOORD4SVARBPROC __glewMultiTexCoord4svARB = NULL; - -PFNGLBEGINQUERYARBPROC __glewBeginQueryARB = NULL; -PFNGLDELETEQUERIESARBPROC __glewDeleteQueriesARB = NULL; -PFNGLENDQUERYARBPROC __glewEndQueryARB = NULL; -PFNGLGENQUERIESARBPROC __glewGenQueriesARB = NULL; -PFNGLGETQUERYOBJECTIVARBPROC __glewGetQueryObjectivARB = NULL; -PFNGLGETQUERYOBJECTUIVARBPROC __glewGetQueryObjectuivARB = NULL; -PFNGLGETQUERYIVARBPROC __glewGetQueryivARB = NULL; -PFNGLISQUERYARBPROC __glewIsQueryARB = NULL; - -PFNGLPOINTPARAMETERFARBPROC __glewPointParameterfARB = NULL; -PFNGLPOINTPARAMETERFVARBPROC __glewPointParameterfvARB = NULL; - -PFNGLGETPROGRAMINTERFACEIVPROC __glewGetProgramInterfaceiv = NULL; -PFNGLGETPROGRAMRESOURCEINDEXPROC __glewGetProgramResourceIndex = NULL; -PFNGLGETPROGRAMRESOURCELOCATIONPROC __glewGetProgramResourceLocation = NULL; -PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC __glewGetProgramResourceLocationIndex = NULL; -PFNGLGETPROGRAMRESOURCENAMEPROC __glewGetProgramResourceName = NULL; -PFNGLGETPROGRAMRESOURCEIVPROC __glewGetProgramResourceiv = NULL; - -PFNGLPROVOKINGVERTEXPROC __glewProvokingVertex = NULL; - -PFNGLGETGRAPHICSRESETSTATUSARBPROC __glewGetGraphicsResetStatusARB = NULL; -PFNGLGETNCOLORTABLEARBPROC __glewGetnColorTableARB = NULL; -PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC __glewGetnCompressedTexImageARB = NULL; -PFNGLGETNCONVOLUTIONFILTERARBPROC __glewGetnConvolutionFilterARB = NULL; -PFNGLGETNHISTOGRAMARBPROC __glewGetnHistogramARB = NULL; -PFNGLGETNMAPDVARBPROC __glewGetnMapdvARB = NULL; -PFNGLGETNMAPFVARBPROC __glewGetnMapfvARB = NULL; -PFNGLGETNMAPIVARBPROC __glewGetnMapivARB = NULL; -PFNGLGETNMINMAXARBPROC __glewGetnMinmaxARB = NULL; -PFNGLGETNPIXELMAPFVARBPROC __glewGetnPixelMapfvARB = NULL; -PFNGLGETNPIXELMAPUIVARBPROC __glewGetnPixelMapuivARB = NULL; -PFNGLGETNPIXELMAPUSVARBPROC __glewGetnPixelMapusvARB = NULL; -PFNGLGETNPOLYGONSTIPPLEARBPROC __glewGetnPolygonStippleARB = NULL; -PFNGLGETNSEPARABLEFILTERARBPROC __glewGetnSeparableFilterARB = NULL; -PFNGLGETNTEXIMAGEARBPROC __glewGetnTexImageARB = NULL; -PFNGLGETNUNIFORMDVARBPROC __glewGetnUniformdvARB = NULL; -PFNGLGETNUNIFORMFVARBPROC __glewGetnUniformfvARB = NULL; -PFNGLGETNUNIFORMIVARBPROC __glewGetnUniformivARB = NULL; -PFNGLGETNUNIFORMUIVARBPROC __glewGetnUniformuivARB = NULL; -PFNGLREADNPIXELSARBPROC __glewReadnPixelsARB = NULL; - -PFNGLMINSAMPLESHADINGARBPROC __glewMinSampleShadingARB = NULL; - -PFNGLBINDSAMPLERPROC __glewBindSampler = NULL; -PFNGLDELETESAMPLERSPROC __glewDeleteSamplers = NULL; -PFNGLGENSAMPLERSPROC __glewGenSamplers = NULL; -PFNGLGETSAMPLERPARAMETERIIVPROC __glewGetSamplerParameterIiv = NULL; -PFNGLGETSAMPLERPARAMETERIUIVPROC __glewGetSamplerParameterIuiv = NULL; -PFNGLGETSAMPLERPARAMETERFVPROC __glewGetSamplerParameterfv = NULL; -PFNGLGETSAMPLERPARAMETERIVPROC __glewGetSamplerParameteriv = NULL; -PFNGLISSAMPLERPROC __glewIsSampler = NULL; -PFNGLSAMPLERPARAMETERIIVPROC __glewSamplerParameterIiv = NULL; -PFNGLSAMPLERPARAMETERIUIVPROC __glewSamplerParameterIuiv = NULL; -PFNGLSAMPLERPARAMETERFPROC __glewSamplerParameterf = NULL; -PFNGLSAMPLERPARAMETERFVPROC __glewSamplerParameterfv = NULL; -PFNGLSAMPLERPARAMETERIPROC __glewSamplerParameteri = NULL; -PFNGLSAMPLERPARAMETERIVPROC __glewSamplerParameteriv = NULL; - -PFNGLACTIVESHADERPROGRAMPROC __glewActiveShaderProgram = NULL; -PFNGLBINDPROGRAMPIPELINEPROC __glewBindProgramPipeline = NULL; -PFNGLCREATESHADERPROGRAMVPROC __glewCreateShaderProgramv = NULL; -PFNGLDELETEPROGRAMPIPELINESPROC __glewDeleteProgramPipelines = NULL; -PFNGLGENPROGRAMPIPELINESPROC __glewGenProgramPipelines = NULL; -PFNGLGETPROGRAMPIPELINEINFOLOGPROC __glewGetProgramPipelineInfoLog = NULL; -PFNGLGETPROGRAMPIPELINEIVPROC __glewGetProgramPipelineiv = NULL; -PFNGLISPROGRAMPIPELINEPROC __glewIsProgramPipeline = NULL; -PFNGLPROGRAMUNIFORM1DPROC __glewProgramUniform1d = NULL; -PFNGLPROGRAMUNIFORM1DVPROC __glewProgramUniform1dv = NULL; -PFNGLPROGRAMUNIFORM1FPROC __glewProgramUniform1f = NULL; -PFNGLPROGRAMUNIFORM1FVPROC __glewProgramUniform1fv = NULL; -PFNGLPROGRAMUNIFORM1IPROC __glewProgramUniform1i = NULL; -PFNGLPROGRAMUNIFORM1IVPROC __glewProgramUniform1iv = NULL; -PFNGLPROGRAMUNIFORM1UIPROC __glewProgramUniform1ui = NULL; -PFNGLPROGRAMUNIFORM1UIVPROC __glewProgramUniform1uiv = NULL; -PFNGLPROGRAMUNIFORM2DPROC __glewProgramUniform2d = NULL; -PFNGLPROGRAMUNIFORM2DVPROC __glewProgramUniform2dv = NULL; -PFNGLPROGRAMUNIFORM2FPROC __glewProgramUniform2f = NULL; -PFNGLPROGRAMUNIFORM2FVPROC __glewProgramUniform2fv = NULL; -PFNGLPROGRAMUNIFORM2IPROC __glewProgramUniform2i = NULL; -PFNGLPROGRAMUNIFORM2IVPROC __glewProgramUniform2iv = NULL; -PFNGLPROGRAMUNIFORM2UIPROC __glewProgramUniform2ui = NULL; -PFNGLPROGRAMUNIFORM2UIVPROC __glewProgramUniform2uiv = NULL; -PFNGLPROGRAMUNIFORM3DPROC __glewProgramUniform3d = NULL; -PFNGLPROGRAMUNIFORM3DVPROC __glewProgramUniform3dv = NULL; -PFNGLPROGRAMUNIFORM3FPROC __glewProgramUniform3f = NULL; -PFNGLPROGRAMUNIFORM3FVPROC __glewProgramUniform3fv = NULL; -PFNGLPROGRAMUNIFORM3IPROC __glewProgramUniform3i = NULL; -PFNGLPROGRAMUNIFORM3IVPROC __glewProgramUniform3iv = NULL; -PFNGLPROGRAMUNIFORM3UIPROC __glewProgramUniform3ui = NULL; -PFNGLPROGRAMUNIFORM3UIVPROC __glewProgramUniform3uiv = NULL; -PFNGLPROGRAMUNIFORM4DPROC __glewProgramUniform4d = NULL; -PFNGLPROGRAMUNIFORM4DVPROC __glewProgramUniform4dv = NULL; -PFNGLPROGRAMUNIFORM4FPROC __glewProgramUniform4f = NULL; -PFNGLPROGRAMUNIFORM4FVPROC __glewProgramUniform4fv = NULL; -PFNGLPROGRAMUNIFORM4IPROC __glewProgramUniform4i = NULL; -PFNGLPROGRAMUNIFORM4IVPROC __glewProgramUniform4iv = NULL; -PFNGLPROGRAMUNIFORM4UIPROC __glewProgramUniform4ui = NULL; -PFNGLPROGRAMUNIFORM4UIVPROC __glewProgramUniform4uiv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2DVPROC __glewProgramUniformMatrix2dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2FVPROC __glewProgramUniformMatrix2fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC __glewProgramUniformMatrix2x3dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC __glewProgramUniformMatrix2x3fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC __glewProgramUniformMatrix2x4dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC __glewProgramUniformMatrix2x4fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3DVPROC __glewProgramUniformMatrix3dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3FVPROC __glewProgramUniformMatrix3fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC __glewProgramUniformMatrix3x2dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC __glewProgramUniformMatrix3x2fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC __glewProgramUniformMatrix3x4dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC __glewProgramUniformMatrix3x4fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4DVPROC __glewProgramUniformMatrix4dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4FVPROC __glewProgramUniformMatrix4fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC __glewProgramUniformMatrix4x2dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC __glewProgramUniformMatrix4x2fv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC __glewProgramUniformMatrix4x3dv = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC __glewProgramUniformMatrix4x3fv = NULL; -PFNGLUSEPROGRAMSTAGESPROC __glewUseProgramStages = NULL; -PFNGLVALIDATEPROGRAMPIPELINEPROC __glewValidateProgramPipeline = NULL; - -PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC __glewGetActiveAtomicCounterBufferiv = NULL; - -PFNGLBINDIMAGETEXTUREPROC __glewBindImageTexture = NULL; -PFNGLMEMORYBARRIERPROC __glewMemoryBarrier = NULL; - -PFNGLATTACHOBJECTARBPROC __glewAttachObjectARB = NULL; -PFNGLCOMPILESHADERARBPROC __glewCompileShaderARB = NULL; -PFNGLCREATEPROGRAMOBJECTARBPROC __glewCreateProgramObjectARB = NULL; -PFNGLCREATESHADEROBJECTARBPROC __glewCreateShaderObjectARB = NULL; -PFNGLDELETEOBJECTARBPROC __glewDeleteObjectARB = NULL; -PFNGLDETACHOBJECTARBPROC __glewDetachObjectARB = NULL; -PFNGLGETACTIVEUNIFORMARBPROC __glewGetActiveUniformARB = NULL; -PFNGLGETATTACHEDOBJECTSARBPROC __glewGetAttachedObjectsARB = NULL; -PFNGLGETHANDLEARBPROC __glewGetHandleARB = NULL; -PFNGLGETINFOLOGARBPROC __glewGetInfoLogARB = NULL; -PFNGLGETOBJECTPARAMETERFVARBPROC __glewGetObjectParameterfvARB = NULL; -PFNGLGETOBJECTPARAMETERIVARBPROC __glewGetObjectParameterivARB = NULL; -PFNGLGETSHADERSOURCEARBPROC __glewGetShaderSourceARB = NULL; -PFNGLGETUNIFORMLOCATIONARBPROC __glewGetUniformLocationARB = NULL; -PFNGLGETUNIFORMFVARBPROC __glewGetUniformfvARB = NULL; -PFNGLGETUNIFORMIVARBPROC __glewGetUniformivARB = NULL; -PFNGLLINKPROGRAMARBPROC __glewLinkProgramARB = NULL; -PFNGLSHADERSOURCEARBPROC __glewShaderSourceARB = NULL; -PFNGLUNIFORM1FARBPROC __glewUniform1fARB = NULL; -PFNGLUNIFORM1FVARBPROC __glewUniform1fvARB = NULL; -PFNGLUNIFORM1IARBPROC __glewUniform1iARB = NULL; -PFNGLUNIFORM1IVARBPROC __glewUniform1ivARB = NULL; -PFNGLUNIFORM2FARBPROC __glewUniform2fARB = NULL; -PFNGLUNIFORM2FVARBPROC __glewUniform2fvARB = NULL; -PFNGLUNIFORM2IARBPROC __glewUniform2iARB = NULL; -PFNGLUNIFORM2IVARBPROC __glewUniform2ivARB = NULL; -PFNGLUNIFORM3FARBPROC __glewUniform3fARB = NULL; -PFNGLUNIFORM3FVARBPROC __glewUniform3fvARB = NULL; -PFNGLUNIFORM3IARBPROC __glewUniform3iARB = NULL; -PFNGLUNIFORM3IVARBPROC __glewUniform3ivARB = NULL; -PFNGLUNIFORM4FARBPROC __glewUniform4fARB = NULL; -PFNGLUNIFORM4FVARBPROC __glewUniform4fvARB = NULL; -PFNGLUNIFORM4IARBPROC __glewUniform4iARB = NULL; -PFNGLUNIFORM4IVARBPROC __glewUniform4ivARB = NULL; -PFNGLUNIFORMMATRIX2FVARBPROC __glewUniformMatrix2fvARB = NULL; -PFNGLUNIFORMMATRIX3FVARBPROC __glewUniformMatrix3fvARB = NULL; -PFNGLUNIFORMMATRIX4FVARBPROC __glewUniformMatrix4fvARB = NULL; -PFNGLUSEPROGRAMOBJECTARBPROC __glewUseProgramObjectARB = NULL; -PFNGLVALIDATEPROGRAMARBPROC __glewValidateProgramARB = NULL; - -PFNGLSHADERSTORAGEBLOCKBINDINGPROC __glewShaderStorageBlockBinding = NULL; - -PFNGLGETACTIVESUBROUTINENAMEPROC __glewGetActiveSubroutineName = NULL; -PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC __glewGetActiveSubroutineUniformName = NULL; -PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC __glewGetActiveSubroutineUniformiv = NULL; -PFNGLGETPROGRAMSTAGEIVPROC __glewGetProgramStageiv = NULL; -PFNGLGETSUBROUTINEINDEXPROC __glewGetSubroutineIndex = NULL; -PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC __glewGetSubroutineUniformLocation = NULL; -PFNGLGETUNIFORMSUBROUTINEUIVPROC __glewGetUniformSubroutineuiv = NULL; -PFNGLUNIFORMSUBROUTINESUIVPROC __glewUniformSubroutinesuiv = NULL; - -PFNGLCOMPILESHADERINCLUDEARBPROC __glewCompileShaderIncludeARB = NULL; -PFNGLDELETENAMEDSTRINGARBPROC __glewDeleteNamedStringARB = NULL; -PFNGLGETNAMEDSTRINGARBPROC __glewGetNamedStringARB = NULL; -PFNGLGETNAMEDSTRINGIVARBPROC __glewGetNamedStringivARB = NULL; -PFNGLISNAMEDSTRINGARBPROC __glewIsNamedStringARB = NULL; -PFNGLNAMEDSTRINGARBPROC __glewNamedStringARB = NULL; - -PFNGLTEXPAGECOMMITMENTARBPROC __glewTexPageCommitmentARB = NULL; -PFNGLTEXTUREPAGECOMMITMENTEXTPROC __glewTexturePageCommitmentEXT = NULL; - -PFNGLCLIENTWAITSYNCPROC __glewClientWaitSync = NULL; -PFNGLDELETESYNCPROC __glewDeleteSync = NULL; -PFNGLFENCESYNCPROC __glewFenceSync = NULL; -PFNGLGETINTEGER64VPROC __glewGetInteger64v = NULL; -PFNGLGETSYNCIVPROC __glewGetSynciv = NULL; -PFNGLISSYNCPROC __glewIsSync = NULL; -PFNGLWAITSYNCPROC __glewWaitSync = NULL; - -PFNGLPATCHPARAMETERFVPROC __glewPatchParameterfv = NULL; -PFNGLPATCHPARAMETERIPROC __glewPatchParameteri = NULL; - -PFNGLTEXBUFFERARBPROC __glewTexBufferARB = NULL; - -PFNGLTEXBUFFERRANGEPROC __glewTexBufferRange = NULL; -PFNGLTEXTUREBUFFERRANGEEXTPROC __glewTextureBufferRangeEXT = NULL; - -PFNGLCOMPRESSEDTEXIMAGE1DARBPROC __glewCompressedTexImage1DARB = NULL; -PFNGLCOMPRESSEDTEXIMAGE2DARBPROC __glewCompressedTexImage2DARB = NULL; -PFNGLCOMPRESSEDTEXIMAGE3DARBPROC __glewCompressedTexImage3DARB = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC __glewCompressedTexSubImage1DARB = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC __glewCompressedTexSubImage2DARB = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC __glewCompressedTexSubImage3DARB = NULL; -PFNGLGETCOMPRESSEDTEXIMAGEARBPROC __glewGetCompressedTexImageARB = NULL; - -PFNGLGETMULTISAMPLEFVPROC __glewGetMultisamplefv = NULL; -PFNGLSAMPLEMASKIPROC __glewSampleMaski = NULL; -PFNGLTEXIMAGE2DMULTISAMPLEPROC __glewTexImage2DMultisample = NULL; -PFNGLTEXIMAGE3DMULTISAMPLEPROC __glewTexImage3DMultisample = NULL; - -PFNGLTEXSTORAGE1DPROC __glewTexStorage1D = NULL; -PFNGLTEXSTORAGE2DPROC __glewTexStorage2D = NULL; -PFNGLTEXSTORAGE3DPROC __glewTexStorage3D = NULL; -PFNGLTEXTURESTORAGE1DEXTPROC __glewTextureStorage1DEXT = NULL; -PFNGLTEXTURESTORAGE2DEXTPROC __glewTextureStorage2DEXT = NULL; -PFNGLTEXTURESTORAGE3DEXTPROC __glewTextureStorage3DEXT = NULL; - -PFNGLTEXSTORAGE2DMULTISAMPLEPROC __glewTexStorage2DMultisample = NULL; -PFNGLTEXSTORAGE3DMULTISAMPLEPROC __glewTexStorage3DMultisample = NULL; -PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC __glewTextureStorage2DMultisampleEXT = NULL; -PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC __glewTextureStorage3DMultisampleEXT = NULL; - -PFNGLTEXTUREVIEWPROC __glewTextureView = NULL; - -PFNGLGETQUERYOBJECTI64VPROC __glewGetQueryObjecti64v = NULL; -PFNGLGETQUERYOBJECTUI64VPROC __glewGetQueryObjectui64v = NULL; -PFNGLQUERYCOUNTERPROC __glewQueryCounter = NULL; - -PFNGLBINDTRANSFORMFEEDBACKPROC __glewBindTransformFeedback = NULL; -PFNGLDELETETRANSFORMFEEDBACKSPROC __glewDeleteTransformFeedbacks = NULL; -PFNGLDRAWTRANSFORMFEEDBACKPROC __glewDrawTransformFeedback = NULL; -PFNGLGENTRANSFORMFEEDBACKSPROC __glewGenTransformFeedbacks = NULL; -PFNGLISTRANSFORMFEEDBACKPROC __glewIsTransformFeedback = NULL; -PFNGLPAUSETRANSFORMFEEDBACKPROC __glewPauseTransformFeedback = NULL; -PFNGLRESUMETRANSFORMFEEDBACKPROC __glewResumeTransformFeedback = NULL; - -PFNGLBEGINQUERYINDEXEDPROC __glewBeginQueryIndexed = NULL; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC __glewDrawTransformFeedbackStream = NULL; -PFNGLENDQUERYINDEXEDPROC __glewEndQueryIndexed = NULL; -PFNGLGETQUERYINDEXEDIVPROC __glewGetQueryIndexediv = NULL; - -PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC __glewDrawTransformFeedbackInstanced = NULL; -PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC __glewDrawTransformFeedbackStreamInstanced = NULL; - -PFNGLLOADTRANSPOSEMATRIXDARBPROC __glewLoadTransposeMatrixdARB = NULL; -PFNGLLOADTRANSPOSEMATRIXFARBPROC __glewLoadTransposeMatrixfARB = NULL; -PFNGLMULTTRANSPOSEMATRIXDARBPROC __glewMultTransposeMatrixdARB = NULL; -PFNGLMULTTRANSPOSEMATRIXFARBPROC __glewMultTransposeMatrixfARB = NULL; - -PFNGLBINDBUFFERBASEPROC __glewBindBufferBase = NULL; -PFNGLBINDBUFFERRANGEPROC __glewBindBufferRange = NULL; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC __glewGetActiveUniformBlockName = NULL; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC __glewGetActiveUniformBlockiv = NULL; -PFNGLGETACTIVEUNIFORMNAMEPROC __glewGetActiveUniformName = NULL; -PFNGLGETACTIVEUNIFORMSIVPROC __glewGetActiveUniformsiv = NULL; -PFNGLGETINTEGERI_VPROC __glewGetIntegeri_v = NULL; -PFNGLGETUNIFORMBLOCKINDEXPROC __glewGetUniformBlockIndex = NULL; -PFNGLGETUNIFORMINDICESPROC __glewGetUniformIndices = NULL; -PFNGLUNIFORMBLOCKBINDINGPROC __glewUniformBlockBinding = NULL; - -PFNGLBINDVERTEXARRAYPROC __glewBindVertexArray = NULL; -PFNGLDELETEVERTEXARRAYSPROC __glewDeleteVertexArrays = NULL; -PFNGLGENVERTEXARRAYSPROC __glewGenVertexArrays = NULL; -PFNGLISVERTEXARRAYPROC __glewIsVertexArray = NULL; - -PFNGLGETVERTEXATTRIBLDVPROC __glewGetVertexAttribLdv = NULL; -PFNGLVERTEXATTRIBL1DPROC __glewVertexAttribL1d = NULL; -PFNGLVERTEXATTRIBL1DVPROC __glewVertexAttribL1dv = NULL; -PFNGLVERTEXATTRIBL2DPROC __glewVertexAttribL2d = NULL; -PFNGLVERTEXATTRIBL2DVPROC __glewVertexAttribL2dv = NULL; -PFNGLVERTEXATTRIBL3DPROC __glewVertexAttribL3d = NULL; -PFNGLVERTEXATTRIBL3DVPROC __glewVertexAttribL3dv = NULL; -PFNGLVERTEXATTRIBL4DPROC __glewVertexAttribL4d = NULL; -PFNGLVERTEXATTRIBL4DVPROC __glewVertexAttribL4dv = NULL; -PFNGLVERTEXATTRIBLPOINTERPROC __glewVertexAttribLPointer = NULL; - -PFNGLBINDVERTEXBUFFERPROC __glewBindVertexBuffer = NULL; -PFNGLVERTEXATTRIBBINDINGPROC __glewVertexAttribBinding = NULL; -PFNGLVERTEXATTRIBFORMATPROC __glewVertexAttribFormat = NULL; -PFNGLVERTEXATTRIBIFORMATPROC __glewVertexAttribIFormat = NULL; -PFNGLVERTEXATTRIBLFORMATPROC __glewVertexAttribLFormat = NULL; -PFNGLVERTEXBINDINGDIVISORPROC __glewVertexBindingDivisor = NULL; - -PFNGLVERTEXBLENDARBPROC __glewVertexBlendARB = NULL; -PFNGLWEIGHTPOINTERARBPROC __glewWeightPointerARB = NULL; -PFNGLWEIGHTBVARBPROC __glewWeightbvARB = NULL; -PFNGLWEIGHTDVARBPROC __glewWeightdvARB = NULL; -PFNGLWEIGHTFVARBPROC __glewWeightfvARB = NULL; -PFNGLWEIGHTIVARBPROC __glewWeightivARB = NULL; -PFNGLWEIGHTSVARBPROC __glewWeightsvARB = NULL; -PFNGLWEIGHTUBVARBPROC __glewWeightubvARB = NULL; -PFNGLWEIGHTUIVARBPROC __glewWeightuivARB = NULL; -PFNGLWEIGHTUSVARBPROC __glewWeightusvARB = NULL; - -PFNGLBINDBUFFERARBPROC __glewBindBufferARB = NULL; -PFNGLBUFFERDATAARBPROC __glewBufferDataARB = NULL; -PFNGLBUFFERSUBDATAARBPROC __glewBufferSubDataARB = NULL; -PFNGLDELETEBUFFERSARBPROC __glewDeleteBuffersARB = NULL; -PFNGLGENBUFFERSARBPROC __glewGenBuffersARB = NULL; -PFNGLGETBUFFERPARAMETERIVARBPROC __glewGetBufferParameterivARB = NULL; -PFNGLGETBUFFERPOINTERVARBPROC __glewGetBufferPointervARB = NULL; -PFNGLGETBUFFERSUBDATAARBPROC __glewGetBufferSubDataARB = NULL; -PFNGLISBUFFERARBPROC __glewIsBufferARB = NULL; -PFNGLMAPBUFFERARBPROC __glewMapBufferARB = NULL; -PFNGLUNMAPBUFFERARBPROC __glewUnmapBufferARB = NULL; - -PFNGLBINDPROGRAMARBPROC __glewBindProgramARB = NULL; -PFNGLDELETEPROGRAMSARBPROC __glewDeleteProgramsARB = NULL; -PFNGLDISABLEVERTEXATTRIBARRAYARBPROC __glewDisableVertexAttribArrayARB = NULL; -PFNGLENABLEVERTEXATTRIBARRAYARBPROC __glewEnableVertexAttribArrayARB = NULL; -PFNGLGENPROGRAMSARBPROC __glewGenProgramsARB = NULL; -PFNGLGETPROGRAMENVPARAMETERDVARBPROC __glewGetProgramEnvParameterdvARB = NULL; -PFNGLGETPROGRAMENVPARAMETERFVARBPROC __glewGetProgramEnvParameterfvARB = NULL; -PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC __glewGetProgramLocalParameterdvARB = NULL; -PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC __glewGetProgramLocalParameterfvARB = NULL; -PFNGLGETPROGRAMSTRINGARBPROC __glewGetProgramStringARB = NULL; -PFNGLGETPROGRAMIVARBPROC __glewGetProgramivARB = NULL; -PFNGLGETVERTEXATTRIBPOINTERVARBPROC __glewGetVertexAttribPointervARB = NULL; -PFNGLGETVERTEXATTRIBDVARBPROC __glewGetVertexAttribdvARB = NULL; -PFNGLGETVERTEXATTRIBFVARBPROC __glewGetVertexAttribfvARB = NULL; -PFNGLGETVERTEXATTRIBIVARBPROC __glewGetVertexAttribivARB = NULL; -PFNGLISPROGRAMARBPROC __glewIsProgramARB = NULL; -PFNGLPROGRAMENVPARAMETER4DARBPROC __glewProgramEnvParameter4dARB = NULL; -PFNGLPROGRAMENVPARAMETER4DVARBPROC __glewProgramEnvParameter4dvARB = NULL; -PFNGLPROGRAMENVPARAMETER4FARBPROC __glewProgramEnvParameter4fARB = NULL; -PFNGLPROGRAMENVPARAMETER4FVARBPROC __glewProgramEnvParameter4fvARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4DARBPROC __glewProgramLocalParameter4dARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4DVARBPROC __glewProgramLocalParameter4dvARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4FARBPROC __glewProgramLocalParameter4fARB = NULL; -PFNGLPROGRAMLOCALPARAMETER4FVARBPROC __glewProgramLocalParameter4fvARB = NULL; -PFNGLPROGRAMSTRINGARBPROC __glewProgramStringARB = NULL; -PFNGLVERTEXATTRIB1DARBPROC __glewVertexAttrib1dARB = NULL; -PFNGLVERTEXATTRIB1DVARBPROC __glewVertexAttrib1dvARB = NULL; -PFNGLVERTEXATTRIB1FARBPROC __glewVertexAttrib1fARB = NULL; -PFNGLVERTEXATTRIB1FVARBPROC __glewVertexAttrib1fvARB = NULL; -PFNGLVERTEXATTRIB1SARBPROC __glewVertexAttrib1sARB = NULL; -PFNGLVERTEXATTRIB1SVARBPROC __glewVertexAttrib1svARB = NULL; -PFNGLVERTEXATTRIB2DARBPROC __glewVertexAttrib2dARB = NULL; -PFNGLVERTEXATTRIB2DVARBPROC __glewVertexAttrib2dvARB = NULL; -PFNGLVERTEXATTRIB2FARBPROC __glewVertexAttrib2fARB = NULL; -PFNGLVERTEXATTRIB2FVARBPROC __glewVertexAttrib2fvARB = NULL; -PFNGLVERTEXATTRIB2SARBPROC __glewVertexAttrib2sARB = NULL; -PFNGLVERTEXATTRIB2SVARBPROC __glewVertexAttrib2svARB = NULL; -PFNGLVERTEXATTRIB3DARBPROC __glewVertexAttrib3dARB = NULL; -PFNGLVERTEXATTRIB3DVARBPROC __glewVertexAttrib3dvARB = NULL; -PFNGLVERTEXATTRIB3FARBPROC __glewVertexAttrib3fARB = NULL; -PFNGLVERTEXATTRIB3FVARBPROC __glewVertexAttrib3fvARB = NULL; -PFNGLVERTEXATTRIB3SARBPROC __glewVertexAttrib3sARB = NULL; -PFNGLVERTEXATTRIB3SVARBPROC __glewVertexAttrib3svARB = NULL; -PFNGLVERTEXATTRIB4NBVARBPROC __glewVertexAttrib4NbvARB = NULL; -PFNGLVERTEXATTRIB4NIVARBPROC __glewVertexAttrib4NivARB = NULL; -PFNGLVERTEXATTRIB4NSVARBPROC __glewVertexAttrib4NsvARB = NULL; -PFNGLVERTEXATTRIB4NUBARBPROC __glewVertexAttrib4NubARB = NULL; -PFNGLVERTEXATTRIB4NUBVARBPROC __glewVertexAttrib4NubvARB = NULL; -PFNGLVERTEXATTRIB4NUIVARBPROC __glewVertexAttrib4NuivARB = NULL; -PFNGLVERTEXATTRIB4NUSVARBPROC __glewVertexAttrib4NusvARB = NULL; -PFNGLVERTEXATTRIB4BVARBPROC __glewVertexAttrib4bvARB = NULL; -PFNGLVERTEXATTRIB4DARBPROC __glewVertexAttrib4dARB = NULL; -PFNGLVERTEXATTRIB4DVARBPROC __glewVertexAttrib4dvARB = NULL; -PFNGLVERTEXATTRIB4FARBPROC __glewVertexAttrib4fARB = NULL; -PFNGLVERTEXATTRIB4FVARBPROC __glewVertexAttrib4fvARB = NULL; -PFNGLVERTEXATTRIB4IVARBPROC __glewVertexAttrib4ivARB = NULL; -PFNGLVERTEXATTRIB4SARBPROC __glewVertexAttrib4sARB = NULL; -PFNGLVERTEXATTRIB4SVARBPROC __glewVertexAttrib4svARB = NULL; -PFNGLVERTEXATTRIB4UBVARBPROC __glewVertexAttrib4ubvARB = NULL; -PFNGLVERTEXATTRIB4UIVARBPROC __glewVertexAttrib4uivARB = NULL; -PFNGLVERTEXATTRIB4USVARBPROC __glewVertexAttrib4usvARB = NULL; -PFNGLVERTEXATTRIBPOINTERARBPROC __glewVertexAttribPointerARB = NULL; - -PFNGLBINDATTRIBLOCATIONARBPROC __glewBindAttribLocationARB = NULL; -PFNGLGETACTIVEATTRIBARBPROC __glewGetActiveAttribARB = NULL; -PFNGLGETATTRIBLOCATIONARBPROC __glewGetAttribLocationARB = NULL; - -PFNGLCOLORP3UIPROC __glewColorP3ui = NULL; -PFNGLCOLORP3UIVPROC __glewColorP3uiv = NULL; -PFNGLCOLORP4UIPROC __glewColorP4ui = NULL; -PFNGLCOLORP4UIVPROC __glewColorP4uiv = NULL; -PFNGLMULTITEXCOORDP1UIPROC __glewMultiTexCoordP1ui = NULL; -PFNGLMULTITEXCOORDP1UIVPROC __glewMultiTexCoordP1uiv = NULL; -PFNGLMULTITEXCOORDP2UIPROC __glewMultiTexCoordP2ui = NULL; -PFNGLMULTITEXCOORDP2UIVPROC __glewMultiTexCoordP2uiv = NULL; -PFNGLMULTITEXCOORDP3UIPROC __glewMultiTexCoordP3ui = NULL; -PFNGLMULTITEXCOORDP3UIVPROC __glewMultiTexCoordP3uiv = NULL; -PFNGLMULTITEXCOORDP4UIPROC __glewMultiTexCoordP4ui = NULL; -PFNGLMULTITEXCOORDP4UIVPROC __glewMultiTexCoordP4uiv = NULL; -PFNGLNORMALP3UIPROC __glewNormalP3ui = NULL; -PFNGLNORMALP3UIVPROC __glewNormalP3uiv = NULL; -PFNGLSECONDARYCOLORP3UIPROC __glewSecondaryColorP3ui = NULL; -PFNGLSECONDARYCOLORP3UIVPROC __glewSecondaryColorP3uiv = NULL; -PFNGLTEXCOORDP1UIPROC __glewTexCoordP1ui = NULL; -PFNGLTEXCOORDP1UIVPROC __glewTexCoordP1uiv = NULL; -PFNGLTEXCOORDP2UIPROC __glewTexCoordP2ui = NULL; -PFNGLTEXCOORDP2UIVPROC __glewTexCoordP2uiv = NULL; -PFNGLTEXCOORDP3UIPROC __glewTexCoordP3ui = NULL; -PFNGLTEXCOORDP3UIVPROC __glewTexCoordP3uiv = NULL; -PFNGLTEXCOORDP4UIPROC __glewTexCoordP4ui = NULL; -PFNGLTEXCOORDP4UIVPROC __glewTexCoordP4uiv = NULL; -PFNGLVERTEXATTRIBP1UIPROC __glewVertexAttribP1ui = NULL; -PFNGLVERTEXATTRIBP1UIVPROC __glewVertexAttribP1uiv = NULL; -PFNGLVERTEXATTRIBP2UIPROC __glewVertexAttribP2ui = NULL; -PFNGLVERTEXATTRIBP2UIVPROC __glewVertexAttribP2uiv = NULL; -PFNGLVERTEXATTRIBP3UIPROC __glewVertexAttribP3ui = NULL; -PFNGLVERTEXATTRIBP3UIVPROC __glewVertexAttribP3uiv = NULL; -PFNGLVERTEXATTRIBP4UIPROC __glewVertexAttribP4ui = NULL; -PFNGLVERTEXATTRIBP4UIVPROC __glewVertexAttribP4uiv = NULL; -PFNGLVERTEXP2UIPROC __glewVertexP2ui = NULL; -PFNGLVERTEXP2UIVPROC __glewVertexP2uiv = NULL; -PFNGLVERTEXP3UIPROC __glewVertexP3ui = NULL; -PFNGLVERTEXP3UIVPROC __glewVertexP3uiv = NULL; -PFNGLVERTEXP4UIPROC __glewVertexP4ui = NULL; -PFNGLVERTEXP4UIVPROC __glewVertexP4uiv = NULL; - -PFNGLDEPTHRANGEARRAYVPROC __glewDepthRangeArrayv = NULL; -PFNGLDEPTHRANGEINDEXEDPROC __glewDepthRangeIndexed = NULL; -PFNGLGETDOUBLEI_VPROC __glewGetDoublei_v = NULL; -PFNGLGETFLOATI_VPROC __glewGetFloati_v = NULL; -PFNGLSCISSORARRAYVPROC __glewScissorArrayv = NULL; -PFNGLSCISSORINDEXEDPROC __glewScissorIndexed = NULL; -PFNGLSCISSORINDEXEDVPROC __glewScissorIndexedv = NULL; -PFNGLVIEWPORTARRAYVPROC __glewViewportArrayv = NULL; -PFNGLVIEWPORTINDEXEDFPROC __glewViewportIndexedf = NULL; -PFNGLVIEWPORTINDEXEDFVPROC __glewViewportIndexedfv = NULL; - -PFNGLWINDOWPOS2DARBPROC __glewWindowPos2dARB = NULL; -PFNGLWINDOWPOS2DVARBPROC __glewWindowPos2dvARB = NULL; -PFNGLWINDOWPOS2FARBPROC __glewWindowPos2fARB = NULL; -PFNGLWINDOWPOS2FVARBPROC __glewWindowPos2fvARB = NULL; -PFNGLWINDOWPOS2IARBPROC __glewWindowPos2iARB = NULL; -PFNGLWINDOWPOS2IVARBPROC __glewWindowPos2ivARB = NULL; -PFNGLWINDOWPOS2SARBPROC __glewWindowPos2sARB = NULL; -PFNGLWINDOWPOS2SVARBPROC __glewWindowPos2svARB = NULL; -PFNGLWINDOWPOS3DARBPROC __glewWindowPos3dARB = NULL; -PFNGLWINDOWPOS3DVARBPROC __glewWindowPos3dvARB = NULL; -PFNGLWINDOWPOS3FARBPROC __glewWindowPos3fARB = NULL; -PFNGLWINDOWPOS3FVARBPROC __glewWindowPos3fvARB = NULL; -PFNGLWINDOWPOS3IARBPROC __glewWindowPos3iARB = NULL; -PFNGLWINDOWPOS3IVARBPROC __glewWindowPos3ivARB = NULL; -PFNGLWINDOWPOS3SARBPROC __glewWindowPos3sARB = NULL; -PFNGLWINDOWPOS3SVARBPROC __glewWindowPos3svARB = NULL; - -PFNGLDRAWBUFFERSATIPROC __glewDrawBuffersATI = NULL; - -PFNGLDRAWELEMENTARRAYATIPROC __glewDrawElementArrayATI = NULL; -PFNGLDRAWRANGEELEMENTARRAYATIPROC __glewDrawRangeElementArrayATI = NULL; -PFNGLELEMENTPOINTERATIPROC __glewElementPointerATI = NULL; - -PFNGLGETTEXBUMPPARAMETERFVATIPROC __glewGetTexBumpParameterfvATI = NULL; -PFNGLGETTEXBUMPPARAMETERIVATIPROC __glewGetTexBumpParameterivATI = NULL; -PFNGLTEXBUMPPARAMETERFVATIPROC __glewTexBumpParameterfvATI = NULL; -PFNGLTEXBUMPPARAMETERIVATIPROC __glewTexBumpParameterivATI = NULL; - -PFNGLALPHAFRAGMENTOP1ATIPROC __glewAlphaFragmentOp1ATI = NULL; -PFNGLALPHAFRAGMENTOP2ATIPROC __glewAlphaFragmentOp2ATI = NULL; -PFNGLALPHAFRAGMENTOP3ATIPROC __glewAlphaFragmentOp3ATI = NULL; -PFNGLBEGINFRAGMENTSHADERATIPROC __glewBeginFragmentShaderATI = NULL; -PFNGLBINDFRAGMENTSHADERATIPROC __glewBindFragmentShaderATI = NULL; -PFNGLCOLORFRAGMENTOP1ATIPROC __glewColorFragmentOp1ATI = NULL; -PFNGLCOLORFRAGMENTOP2ATIPROC __glewColorFragmentOp2ATI = NULL; -PFNGLCOLORFRAGMENTOP3ATIPROC __glewColorFragmentOp3ATI = NULL; -PFNGLDELETEFRAGMENTSHADERATIPROC __glewDeleteFragmentShaderATI = NULL; -PFNGLENDFRAGMENTSHADERATIPROC __glewEndFragmentShaderATI = NULL; -PFNGLGENFRAGMENTSHADERSATIPROC __glewGenFragmentShadersATI = NULL; -PFNGLPASSTEXCOORDATIPROC __glewPassTexCoordATI = NULL; -PFNGLSAMPLEMAPATIPROC __glewSampleMapATI = NULL; -PFNGLSETFRAGMENTSHADERCONSTANTATIPROC __glewSetFragmentShaderConstantATI = NULL; - -PFNGLMAPOBJECTBUFFERATIPROC __glewMapObjectBufferATI = NULL; -PFNGLUNMAPOBJECTBUFFERATIPROC __glewUnmapObjectBufferATI = NULL; - -PFNGLPNTRIANGLESFATIPROC __glewPNTrianglesfATI = NULL; -PFNGLPNTRIANGLESIATIPROC __glewPNTrianglesiATI = NULL; - -PFNGLSTENCILFUNCSEPARATEATIPROC __glewStencilFuncSeparateATI = NULL; -PFNGLSTENCILOPSEPARATEATIPROC __glewStencilOpSeparateATI = NULL; - -PFNGLARRAYOBJECTATIPROC __glewArrayObjectATI = NULL; -PFNGLFREEOBJECTBUFFERATIPROC __glewFreeObjectBufferATI = NULL; -PFNGLGETARRAYOBJECTFVATIPROC __glewGetArrayObjectfvATI = NULL; -PFNGLGETARRAYOBJECTIVATIPROC __glewGetArrayObjectivATI = NULL; -PFNGLGETOBJECTBUFFERFVATIPROC __glewGetObjectBufferfvATI = NULL; -PFNGLGETOBJECTBUFFERIVATIPROC __glewGetObjectBufferivATI = NULL; -PFNGLGETVARIANTARRAYOBJECTFVATIPROC __glewGetVariantArrayObjectfvATI = NULL; -PFNGLGETVARIANTARRAYOBJECTIVATIPROC __glewGetVariantArrayObjectivATI = NULL; -PFNGLISOBJECTBUFFERATIPROC __glewIsObjectBufferATI = NULL; -PFNGLNEWOBJECTBUFFERATIPROC __glewNewObjectBufferATI = NULL; -PFNGLUPDATEOBJECTBUFFERATIPROC __glewUpdateObjectBufferATI = NULL; -PFNGLVARIANTARRAYOBJECTATIPROC __glewVariantArrayObjectATI = NULL; - -PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC __glewGetVertexAttribArrayObjectfvATI = NULL; -PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC __glewGetVertexAttribArrayObjectivATI = NULL; -PFNGLVERTEXATTRIBARRAYOBJECTATIPROC __glewVertexAttribArrayObjectATI = NULL; - -PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC __glewClientActiveVertexStreamATI = NULL; -PFNGLNORMALSTREAM3BATIPROC __glewNormalStream3bATI = NULL; -PFNGLNORMALSTREAM3BVATIPROC __glewNormalStream3bvATI = NULL; -PFNGLNORMALSTREAM3DATIPROC __glewNormalStream3dATI = NULL; -PFNGLNORMALSTREAM3DVATIPROC __glewNormalStream3dvATI = NULL; -PFNGLNORMALSTREAM3FATIPROC __glewNormalStream3fATI = NULL; -PFNGLNORMALSTREAM3FVATIPROC __glewNormalStream3fvATI = NULL; -PFNGLNORMALSTREAM3IATIPROC __glewNormalStream3iATI = NULL; -PFNGLNORMALSTREAM3IVATIPROC __glewNormalStream3ivATI = NULL; -PFNGLNORMALSTREAM3SATIPROC __glewNormalStream3sATI = NULL; -PFNGLNORMALSTREAM3SVATIPROC __glewNormalStream3svATI = NULL; -PFNGLVERTEXBLENDENVFATIPROC __glewVertexBlendEnvfATI = NULL; -PFNGLVERTEXBLENDENVIATIPROC __glewVertexBlendEnviATI = NULL; -PFNGLVERTEXSTREAM1DATIPROC __glewVertexStream1dATI = NULL; -PFNGLVERTEXSTREAM1DVATIPROC __glewVertexStream1dvATI = NULL; -PFNGLVERTEXSTREAM1FATIPROC __glewVertexStream1fATI = NULL; -PFNGLVERTEXSTREAM1FVATIPROC __glewVertexStream1fvATI = NULL; -PFNGLVERTEXSTREAM1IATIPROC __glewVertexStream1iATI = NULL; -PFNGLVERTEXSTREAM1IVATIPROC __glewVertexStream1ivATI = NULL; -PFNGLVERTEXSTREAM1SATIPROC __glewVertexStream1sATI = NULL; -PFNGLVERTEXSTREAM1SVATIPROC __glewVertexStream1svATI = NULL; -PFNGLVERTEXSTREAM2DATIPROC __glewVertexStream2dATI = NULL; -PFNGLVERTEXSTREAM2DVATIPROC __glewVertexStream2dvATI = NULL; -PFNGLVERTEXSTREAM2FATIPROC __glewVertexStream2fATI = NULL; -PFNGLVERTEXSTREAM2FVATIPROC __glewVertexStream2fvATI = NULL; -PFNGLVERTEXSTREAM2IATIPROC __glewVertexStream2iATI = NULL; -PFNGLVERTEXSTREAM2IVATIPROC __glewVertexStream2ivATI = NULL; -PFNGLVERTEXSTREAM2SATIPROC __glewVertexStream2sATI = NULL; -PFNGLVERTEXSTREAM2SVATIPROC __glewVertexStream2svATI = NULL; -PFNGLVERTEXSTREAM3DATIPROC __glewVertexStream3dATI = NULL; -PFNGLVERTEXSTREAM3DVATIPROC __glewVertexStream3dvATI = NULL; -PFNGLVERTEXSTREAM3FATIPROC __glewVertexStream3fATI = NULL; -PFNGLVERTEXSTREAM3FVATIPROC __glewVertexStream3fvATI = NULL; -PFNGLVERTEXSTREAM3IATIPROC __glewVertexStream3iATI = NULL; -PFNGLVERTEXSTREAM3IVATIPROC __glewVertexStream3ivATI = NULL; -PFNGLVERTEXSTREAM3SATIPROC __glewVertexStream3sATI = NULL; -PFNGLVERTEXSTREAM3SVATIPROC __glewVertexStream3svATI = NULL; -PFNGLVERTEXSTREAM4DATIPROC __glewVertexStream4dATI = NULL; -PFNGLVERTEXSTREAM4DVATIPROC __glewVertexStream4dvATI = NULL; -PFNGLVERTEXSTREAM4FATIPROC __glewVertexStream4fATI = NULL; -PFNGLVERTEXSTREAM4FVATIPROC __glewVertexStream4fvATI = NULL; -PFNGLVERTEXSTREAM4IATIPROC __glewVertexStream4iATI = NULL; -PFNGLVERTEXSTREAM4IVATIPROC __glewVertexStream4ivATI = NULL; -PFNGLVERTEXSTREAM4SATIPROC __glewVertexStream4sATI = NULL; -PFNGLVERTEXSTREAM4SVATIPROC __glewVertexStream4svATI = NULL; - -PFNGLGETUNIFORMBUFFERSIZEEXTPROC __glewGetUniformBufferSizeEXT = NULL; -PFNGLGETUNIFORMOFFSETEXTPROC __glewGetUniformOffsetEXT = NULL; -PFNGLUNIFORMBUFFEREXTPROC __glewUniformBufferEXT = NULL; - -PFNGLBLENDCOLOREXTPROC __glewBlendColorEXT = NULL; - -PFNGLBLENDEQUATIONSEPARATEEXTPROC __glewBlendEquationSeparateEXT = NULL; - -PFNGLBLENDFUNCSEPARATEEXTPROC __glewBlendFuncSeparateEXT = NULL; - -PFNGLBLENDEQUATIONEXTPROC __glewBlendEquationEXT = NULL; - -PFNGLCOLORSUBTABLEEXTPROC __glewColorSubTableEXT = NULL; -PFNGLCOPYCOLORSUBTABLEEXTPROC __glewCopyColorSubTableEXT = NULL; - -PFNGLLOCKARRAYSEXTPROC __glewLockArraysEXT = NULL; -PFNGLUNLOCKARRAYSEXTPROC __glewUnlockArraysEXT = NULL; - -PFNGLCONVOLUTIONFILTER1DEXTPROC __glewConvolutionFilter1DEXT = NULL; -PFNGLCONVOLUTIONFILTER2DEXTPROC __glewConvolutionFilter2DEXT = NULL; -PFNGLCONVOLUTIONPARAMETERFEXTPROC __glewConvolutionParameterfEXT = NULL; -PFNGLCONVOLUTIONPARAMETERFVEXTPROC __glewConvolutionParameterfvEXT = NULL; -PFNGLCONVOLUTIONPARAMETERIEXTPROC __glewConvolutionParameteriEXT = NULL; -PFNGLCONVOLUTIONPARAMETERIVEXTPROC __glewConvolutionParameterivEXT = NULL; -PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC __glewCopyConvolutionFilter1DEXT = NULL; -PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC __glewCopyConvolutionFilter2DEXT = NULL; -PFNGLGETCONVOLUTIONFILTEREXTPROC __glewGetConvolutionFilterEXT = NULL; -PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC __glewGetConvolutionParameterfvEXT = NULL; -PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC __glewGetConvolutionParameterivEXT = NULL; -PFNGLGETSEPARABLEFILTEREXTPROC __glewGetSeparableFilterEXT = NULL; -PFNGLSEPARABLEFILTER2DEXTPROC __glewSeparableFilter2DEXT = NULL; - -PFNGLBINORMALPOINTEREXTPROC __glewBinormalPointerEXT = NULL; -PFNGLTANGENTPOINTEREXTPROC __glewTangentPointerEXT = NULL; - -PFNGLCOPYTEXIMAGE1DEXTPROC __glewCopyTexImage1DEXT = NULL; -PFNGLCOPYTEXIMAGE2DEXTPROC __glewCopyTexImage2DEXT = NULL; -PFNGLCOPYTEXSUBIMAGE1DEXTPROC __glewCopyTexSubImage1DEXT = NULL; -PFNGLCOPYTEXSUBIMAGE2DEXTPROC __glewCopyTexSubImage2DEXT = NULL; -PFNGLCOPYTEXSUBIMAGE3DEXTPROC __glewCopyTexSubImage3DEXT = NULL; - -PFNGLCULLPARAMETERDVEXTPROC __glewCullParameterdvEXT = NULL; -PFNGLCULLPARAMETERFVEXTPROC __glewCullParameterfvEXT = NULL; - -PFNGLINSERTEVENTMARKEREXTPROC __glewInsertEventMarkerEXT = NULL; -PFNGLPOPGROUPMARKEREXTPROC __glewPopGroupMarkerEXT = NULL; -PFNGLPUSHGROUPMARKEREXTPROC __glewPushGroupMarkerEXT = NULL; - -PFNGLDEPTHBOUNDSEXTPROC __glewDepthBoundsEXT = NULL; - -PFNGLBINDMULTITEXTUREEXTPROC __glewBindMultiTextureEXT = NULL; -PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC __glewCheckNamedFramebufferStatusEXT = NULL; -PFNGLCLIENTATTRIBDEFAULTEXTPROC __glewClientAttribDefaultEXT = NULL; -PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC __glewCompressedMultiTexImage1DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC __glewCompressedMultiTexImage2DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC __glewCompressedMultiTexImage3DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC __glewCompressedMultiTexSubImage1DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC __glewCompressedMultiTexSubImage2DEXT = NULL; -PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC __glewCompressedMultiTexSubImage3DEXT = NULL; -PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC __glewCompressedTextureImage1DEXT = NULL; -PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC __glewCompressedTextureImage2DEXT = NULL; -PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC __glewCompressedTextureImage3DEXT = NULL; -PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC __glewCompressedTextureSubImage1DEXT = NULL; -PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC __glewCompressedTextureSubImage2DEXT = NULL; -PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC __glewCompressedTextureSubImage3DEXT = NULL; -PFNGLCOPYMULTITEXIMAGE1DEXTPROC __glewCopyMultiTexImage1DEXT = NULL; -PFNGLCOPYMULTITEXIMAGE2DEXTPROC __glewCopyMultiTexImage2DEXT = NULL; -PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC __glewCopyMultiTexSubImage1DEXT = NULL; -PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC __glewCopyMultiTexSubImage2DEXT = NULL; -PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC __glewCopyMultiTexSubImage3DEXT = NULL; -PFNGLCOPYTEXTUREIMAGE1DEXTPROC __glewCopyTextureImage1DEXT = NULL; -PFNGLCOPYTEXTUREIMAGE2DEXTPROC __glewCopyTextureImage2DEXT = NULL; -PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC __glewCopyTextureSubImage1DEXT = NULL; -PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC __glewCopyTextureSubImage2DEXT = NULL; -PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC __glewCopyTextureSubImage3DEXT = NULL; -PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC __glewDisableClientStateIndexedEXT = NULL; -PFNGLDISABLECLIENTSTATEIEXTPROC __glewDisableClientStateiEXT = NULL; -PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC __glewDisableVertexArrayAttribEXT = NULL; -PFNGLDISABLEVERTEXARRAYEXTPROC __glewDisableVertexArrayEXT = NULL; -PFNGLENABLECLIENTSTATEINDEXEDEXTPROC __glewEnableClientStateIndexedEXT = NULL; -PFNGLENABLECLIENTSTATEIEXTPROC __glewEnableClientStateiEXT = NULL; -PFNGLENABLEVERTEXARRAYATTRIBEXTPROC __glewEnableVertexArrayAttribEXT = NULL; -PFNGLENABLEVERTEXARRAYEXTPROC __glewEnableVertexArrayEXT = NULL; -PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC __glewFlushMappedNamedBufferRangeEXT = NULL; -PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC __glewFramebufferDrawBufferEXT = NULL; -PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC __glewFramebufferDrawBuffersEXT = NULL; -PFNGLFRAMEBUFFERREADBUFFEREXTPROC __glewFramebufferReadBufferEXT = NULL; -PFNGLGENERATEMULTITEXMIPMAPEXTPROC __glewGenerateMultiTexMipmapEXT = NULL; -PFNGLGENERATETEXTUREMIPMAPEXTPROC __glewGenerateTextureMipmapEXT = NULL; -PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC __glewGetCompressedMultiTexImageEXT = NULL; -PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC __glewGetCompressedTextureImageEXT = NULL; -PFNGLGETDOUBLEINDEXEDVEXTPROC __glewGetDoubleIndexedvEXT = NULL; -PFNGLGETDOUBLEI_VEXTPROC __glewGetDoublei_vEXT = NULL; -PFNGLGETFLOATINDEXEDVEXTPROC __glewGetFloatIndexedvEXT = NULL; -PFNGLGETFLOATI_VEXTPROC __glewGetFloati_vEXT = NULL; -PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC __glewGetFramebufferParameterivEXT = NULL; -PFNGLGETMULTITEXENVFVEXTPROC __glewGetMultiTexEnvfvEXT = NULL; -PFNGLGETMULTITEXENVIVEXTPROC __glewGetMultiTexEnvivEXT = NULL; -PFNGLGETMULTITEXGENDVEXTPROC __glewGetMultiTexGendvEXT = NULL; -PFNGLGETMULTITEXGENFVEXTPROC __glewGetMultiTexGenfvEXT = NULL; -PFNGLGETMULTITEXGENIVEXTPROC __glewGetMultiTexGenivEXT = NULL; -PFNGLGETMULTITEXIMAGEEXTPROC __glewGetMultiTexImageEXT = NULL; -PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC __glewGetMultiTexLevelParameterfvEXT = NULL; -PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC __glewGetMultiTexLevelParameterivEXT = NULL; -PFNGLGETMULTITEXPARAMETERIIVEXTPROC __glewGetMultiTexParameterIivEXT = NULL; -PFNGLGETMULTITEXPARAMETERIUIVEXTPROC __glewGetMultiTexParameterIuivEXT = NULL; -PFNGLGETMULTITEXPARAMETERFVEXTPROC __glewGetMultiTexParameterfvEXT = NULL; -PFNGLGETMULTITEXPARAMETERIVEXTPROC __glewGetMultiTexParameterivEXT = NULL; -PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC __glewGetNamedBufferParameterivEXT = NULL; -PFNGLGETNAMEDBUFFERPOINTERVEXTPROC __glewGetNamedBufferPointervEXT = NULL; -PFNGLGETNAMEDBUFFERSUBDATAEXTPROC __glewGetNamedBufferSubDataEXT = NULL; -PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetNamedFramebufferAttachmentParameterivEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC __glewGetNamedProgramLocalParameterIivEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC __glewGetNamedProgramLocalParameterIuivEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC __glewGetNamedProgramLocalParameterdvEXT = NULL; -PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC __glewGetNamedProgramLocalParameterfvEXT = NULL; -PFNGLGETNAMEDPROGRAMSTRINGEXTPROC __glewGetNamedProgramStringEXT = NULL; -PFNGLGETNAMEDPROGRAMIVEXTPROC __glewGetNamedProgramivEXT = NULL; -PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC __glewGetNamedRenderbufferParameterivEXT = NULL; -PFNGLGETPOINTERINDEXEDVEXTPROC __glewGetPointerIndexedvEXT = NULL; -PFNGLGETPOINTERI_VEXTPROC __glewGetPointeri_vEXT = NULL; -PFNGLGETTEXTUREIMAGEEXTPROC __glewGetTextureImageEXT = NULL; -PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC __glewGetTextureLevelParameterfvEXT = NULL; -PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC __glewGetTextureLevelParameterivEXT = NULL; -PFNGLGETTEXTUREPARAMETERIIVEXTPROC __glewGetTextureParameterIivEXT = NULL; -PFNGLGETTEXTUREPARAMETERIUIVEXTPROC __glewGetTextureParameterIuivEXT = NULL; -PFNGLGETTEXTUREPARAMETERFVEXTPROC __glewGetTextureParameterfvEXT = NULL; -PFNGLGETTEXTUREPARAMETERIVEXTPROC __glewGetTextureParameterivEXT = NULL; -PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC __glewGetVertexArrayIntegeri_vEXT = NULL; -PFNGLGETVERTEXARRAYINTEGERVEXTPROC __glewGetVertexArrayIntegervEXT = NULL; -PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC __glewGetVertexArrayPointeri_vEXT = NULL; -PFNGLGETVERTEXARRAYPOINTERVEXTPROC __glewGetVertexArrayPointervEXT = NULL; -PFNGLMAPNAMEDBUFFEREXTPROC __glewMapNamedBufferEXT = NULL; -PFNGLMAPNAMEDBUFFERRANGEEXTPROC __glewMapNamedBufferRangeEXT = NULL; -PFNGLMATRIXFRUSTUMEXTPROC __glewMatrixFrustumEXT = NULL; -PFNGLMATRIXLOADIDENTITYEXTPROC __glewMatrixLoadIdentityEXT = NULL; -PFNGLMATRIXLOADTRANSPOSEDEXTPROC __glewMatrixLoadTransposedEXT = NULL; -PFNGLMATRIXLOADTRANSPOSEFEXTPROC __glewMatrixLoadTransposefEXT = NULL; -PFNGLMATRIXLOADDEXTPROC __glewMatrixLoaddEXT = NULL; -PFNGLMATRIXLOADFEXTPROC __glewMatrixLoadfEXT = NULL; -PFNGLMATRIXMULTTRANSPOSEDEXTPROC __glewMatrixMultTransposedEXT = NULL; -PFNGLMATRIXMULTTRANSPOSEFEXTPROC __glewMatrixMultTransposefEXT = NULL; -PFNGLMATRIXMULTDEXTPROC __glewMatrixMultdEXT = NULL; -PFNGLMATRIXMULTFEXTPROC __glewMatrixMultfEXT = NULL; -PFNGLMATRIXORTHOEXTPROC __glewMatrixOrthoEXT = NULL; -PFNGLMATRIXPOPEXTPROC __glewMatrixPopEXT = NULL; -PFNGLMATRIXPUSHEXTPROC __glewMatrixPushEXT = NULL; -PFNGLMATRIXROTATEDEXTPROC __glewMatrixRotatedEXT = NULL; -PFNGLMATRIXROTATEFEXTPROC __glewMatrixRotatefEXT = NULL; -PFNGLMATRIXSCALEDEXTPROC __glewMatrixScaledEXT = NULL; -PFNGLMATRIXSCALEFEXTPROC __glewMatrixScalefEXT = NULL; -PFNGLMATRIXTRANSLATEDEXTPROC __glewMatrixTranslatedEXT = NULL; -PFNGLMATRIXTRANSLATEFEXTPROC __glewMatrixTranslatefEXT = NULL; -PFNGLMULTITEXBUFFEREXTPROC __glewMultiTexBufferEXT = NULL; -PFNGLMULTITEXCOORDPOINTEREXTPROC __glewMultiTexCoordPointerEXT = NULL; -PFNGLMULTITEXENVFEXTPROC __glewMultiTexEnvfEXT = NULL; -PFNGLMULTITEXENVFVEXTPROC __glewMultiTexEnvfvEXT = NULL; -PFNGLMULTITEXENVIEXTPROC __glewMultiTexEnviEXT = NULL; -PFNGLMULTITEXENVIVEXTPROC __glewMultiTexEnvivEXT = NULL; -PFNGLMULTITEXGENDEXTPROC __glewMultiTexGendEXT = NULL; -PFNGLMULTITEXGENDVEXTPROC __glewMultiTexGendvEXT = NULL; -PFNGLMULTITEXGENFEXTPROC __glewMultiTexGenfEXT = NULL; -PFNGLMULTITEXGENFVEXTPROC __glewMultiTexGenfvEXT = NULL; -PFNGLMULTITEXGENIEXTPROC __glewMultiTexGeniEXT = NULL; -PFNGLMULTITEXGENIVEXTPROC __glewMultiTexGenivEXT = NULL; -PFNGLMULTITEXIMAGE1DEXTPROC __glewMultiTexImage1DEXT = NULL; -PFNGLMULTITEXIMAGE2DEXTPROC __glewMultiTexImage2DEXT = NULL; -PFNGLMULTITEXIMAGE3DEXTPROC __glewMultiTexImage3DEXT = NULL; -PFNGLMULTITEXPARAMETERIIVEXTPROC __glewMultiTexParameterIivEXT = NULL; -PFNGLMULTITEXPARAMETERIUIVEXTPROC __glewMultiTexParameterIuivEXT = NULL; -PFNGLMULTITEXPARAMETERFEXTPROC __glewMultiTexParameterfEXT = NULL; -PFNGLMULTITEXPARAMETERFVEXTPROC __glewMultiTexParameterfvEXT = NULL; -PFNGLMULTITEXPARAMETERIEXTPROC __glewMultiTexParameteriEXT = NULL; -PFNGLMULTITEXPARAMETERIVEXTPROC __glewMultiTexParameterivEXT = NULL; -PFNGLMULTITEXRENDERBUFFEREXTPROC __glewMultiTexRenderbufferEXT = NULL; -PFNGLMULTITEXSUBIMAGE1DEXTPROC __glewMultiTexSubImage1DEXT = NULL; -PFNGLMULTITEXSUBIMAGE2DEXTPROC __glewMultiTexSubImage2DEXT = NULL; -PFNGLMULTITEXSUBIMAGE3DEXTPROC __glewMultiTexSubImage3DEXT = NULL; -PFNGLNAMEDBUFFERDATAEXTPROC __glewNamedBufferDataEXT = NULL; -PFNGLNAMEDBUFFERSUBDATAEXTPROC __glewNamedBufferSubDataEXT = NULL; -PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC __glewNamedCopyBufferSubDataEXT = NULL; -PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC __glewNamedFramebufferRenderbufferEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC __glewNamedFramebufferTexture1DEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC __glewNamedFramebufferTexture2DEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC __glewNamedFramebufferTexture3DEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC __glewNamedFramebufferTextureEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC __glewNamedFramebufferTextureFaceEXT = NULL; -PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC __glewNamedFramebufferTextureLayerEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC __glewNamedProgramLocalParameter4dEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC __glewNamedProgramLocalParameter4dvEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC __glewNamedProgramLocalParameter4fEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC __glewNamedProgramLocalParameter4fvEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC __glewNamedProgramLocalParameterI4iEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC __glewNamedProgramLocalParameterI4ivEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC __glewNamedProgramLocalParameterI4uiEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC __glewNamedProgramLocalParameterI4uivEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC __glewNamedProgramLocalParameters4fvEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC __glewNamedProgramLocalParametersI4ivEXT = NULL; -PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC __glewNamedProgramLocalParametersI4uivEXT = NULL; -PFNGLNAMEDPROGRAMSTRINGEXTPROC __glewNamedProgramStringEXT = NULL; -PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC __glewNamedRenderbufferStorageEXT = NULL; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC __glewNamedRenderbufferStorageMultisampleCoverageEXT = NULL; -PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewNamedRenderbufferStorageMultisampleEXT = NULL; -PFNGLPROGRAMUNIFORM1FEXTPROC __glewProgramUniform1fEXT = NULL; -PFNGLPROGRAMUNIFORM1FVEXTPROC __glewProgramUniform1fvEXT = NULL; -PFNGLPROGRAMUNIFORM1IEXTPROC __glewProgramUniform1iEXT = NULL; -PFNGLPROGRAMUNIFORM1IVEXTPROC __glewProgramUniform1ivEXT = NULL; -PFNGLPROGRAMUNIFORM1UIEXTPROC __glewProgramUniform1uiEXT = NULL; -PFNGLPROGRAMUNIFORM1UIVEXTPROC __glewProgramUniform1uivEXT = NULL; -PFNGLPROGRAMUNIFORM2FEXTPROC __glewProgramUniform2fEXT = NULL; -PFNGLPROGRAMUNIFORM2FVEXTPROC __glewProgramUniform2fvEXT = NULL; -PFNGLPROGRAMUNIFORM2IEXTPROC __glewProgramUniform2iEXT = NULL; -PFNGLPROGRAMUNIFORM2IVEXTPROC __glewProgramUniform2ivEXT = NULL; -PFNGLPROGRAMUNIFORM2UIEXTPROC __glewProgramUniform2uiEXT = NULL; -PFNGLPROGRAMUNIFORM2UIVEXTPROC __glewProgramUniform2uivEXT = NULL; -PFNGLPROGRAMUNIFORM3FEXTPROC __glewProgramUniform3fEXT = NULL; -PFNGLPROGRAMUNIFORM3FVEXTPROC __glewProgramUniform3fvEXT = NULL; -PFNGLPROGRAMUNIFORM3IEXTPROC __glewProgramUniform3iEXT = NULL; -PFNGLPROGRAMUNIFORM3IVEXTPROC __glewProgramUniform3ivEXT = NULL; -PFNGLPROGRAMUNIFORM3UIEXTPROC __glewProgramUniform3uiEXT = NULL; -PFNGLPROGRAMUNIFORM3UIVEXTPROC __glewProgramUniform3uivEXT = NULL; -PFNGLPROGRAMUNIFORM4FEXTPROC __glewProgramUniform4fEXT = NULL; -PFNGLPROGRAMUNIFORM4FVEXTPROC __glewProgramUniform4fvEXT = NULL; -PFNGLPROGRAMUNIFORM4IEXTPROC __glewProgramUniform4iEXT = NULL; -PFNGLPROGRAMUNIFORM4IVEXTPROC __glewProgramUniform4ivEXT = NULL; -PFNGLPROGRAMUNIFORM4UIEXTPROC __glewProgramUniform4uiEXT = NULL; -PFNGLPROGRAMUNIFORM4UIVEXTPROC __glewProgramUniform4uivEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC __glewProgramUniformMatrix2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC __glewProgramUniformMatrix2x3fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC __glewProgramUniformMatrix2x4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC __glewProgramUniformMatrix3fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC __glewProgramUniformMatrix3x2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC __glewProgramUniformMatrix3x4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC __glewProgramUniformMatrix4fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC __glewProgramUniformMatrix4x2fvEXT = NULL; -PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC __glewProgramUniformMatrix4x3fvEXT = NULL; -PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC __glewPushClientAttribDefaultEXT = NULL; -PFNGLTEXTUREBUFFEREXTPROC __glewTextureBufferEXT = NULL; -PFNGLTEXTUREIMAGE1DEXTPROC __glewTextureImage1DEXT = NULL; -PFNGLTEXTUREIMAGE2DEXTPROC __glewTextureImage2DEXT = NULL; -PFNGLTEXTUREIMAGE3DEXTPROC __glewTextureImage3DEXT = NULL; -PFNGLTEXTUREPARAMETERIIVEXTPROC __glewTextureParameterIivEXT = NULL; -PFNGLTEXTUREPARAMETERIUIVEXTPROC __glewTextureParameterIuivEXT = NULL; -PFNGLTEXTUREPARAMETERFEXTPROC __glewTextureParameterfEXT = NULL; -PFNGLTEXTUREPARAMETERFVEXTPROC __glewTextureParameterfvEXT = NULL; -PFNGLTEXTUREPARAMETERIEXTPROC __glewTextureParameteriEXT = NULL; -PFNGLTEXTUREPARAMETERIVEXTPROC __glewTextureParameterivEXT = NULL; -PFNGLTEXTURERENDERBUFFEREXTPROC __glewTextureRenderbufferEXT = NULL; -PFNGLTEXTURESUBIMAGE1DEXTPROC __glewTextureSubImage1DEXT = NULL; -PFNGLTEXTURESUBIMAGE2DEXTPROC __glewTextureSubImage2DEXT = NULL; -PFNGLTEXTURESUBIMAGE3DEXTPROC __glewTextureSubImage3DEXT = NULL; -PFNGLUNMAPNAMEDBUFFEREXTPROC __glewUnmapNamedBufferEXT = NULL; -PFNGLVERTEXARRAYCOLOROFFSETEXTPROC __glewVertexArrayColorOffsetEXT = NULL; -PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC __glewVertexArrayEdgeFlagOffsetEXT = NULL; -PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC __glewVertexArrayFogCoordOffsetEXT = NULL; -PFNGLVERTEXARRAYINDEXOFFSETEXTPROC __glewVertexArrayIndexOffsetEXT = NULL; -PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC __glewVertexArrayMultiTexCoordOffsetEXT = NULL; -PFNGLVERTEXARRAYNORMALOFFSETEXTPROC __glewVertexArrayNormalOffsetEXT = NULL; -PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC __glewVertexArraySecondaryColorOffsetEXT = NULL; -PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC __glewVertexArrayTexCoordOffsetEXT = NULL; -PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC __glewVertexArrayVertexAttribIOffsetEXT = NULL; -PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC __glewVertexArrayVertexAttribOffsetEXT = NULL; -PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC __glewVertexArrayVertexOffsetEXT = NULL; - -PFNGLCOLORMASKINDEXEDEXTPROC __glewColorMaskIndexedEXT = NULL; -PFNGLDISABLEINDEXEDEXTPROC __glewDisableIndexedEXT = NULL; -PFNGLENABLEINDEXEDEXTPROC __glewEnableIndexedEXT = NULL; -PFNGLGETBOOLEANINDEXEDVEXTPROC __glewGetBooleanIndexedvEXT = NULL; -PFNGLGETINTEGERINDEXEDVEXTPROC __glewGetIntegerIndexedvEXT = NULL; -PFNGLISENABLEDINDEXEDEXTPROC __glewIsEnabledIndexedEXT = NULL; - -PFNGLDRAWARRAYSINSTANCEDEXTPROC __glewDrawArraysInstancedEXT = NULL; -PFNGLDRAWELEMENTSINSTANCEDEXTPROC __glewDrawElementsInstancedEXT = NULL; - -PFNGLDRAWRANGEELEMENTSEXTPROC __glewDrawRangeElementsEXT = NULL; - -PFNGLFOGCOORDPOINTEREXTPROC __glewFogCoordPointerEXT = NULL; -PFNGLFOGCOORDDEXTPROC __glewFogCoorddEXT = NULL; -PFNGLFOGCOORDDVEXTPROC __glewFogCoorddvEXT = NULL; -PFNGLFOGCOORDFEXTPROC __glewFogCoordfEXT = NULL; -PFNGLFOGCOORDFVEXTPROC __glewFogCoordfvEXT = NULL; - -PFNGLFRAGMENTCOLORMATERIALEXTPROC __glewFragmentColorMaterialEXT = NULL; -PFNGLFRAGMENTLIGHTMODELFEXTPROC __glewFragmentLightModelfEXT = NULL; -PFNGLFRAGMENTLIGHTMODELFVEXTPROC __glewFragmentLightModelfvEXT = NULL; -PFNGLFRAGMENTLIGHTMODELIEXTPROC __glewFragmentLightModeliEXT = NULL; -PFNGLFRAGMENTLIGHTMODELIVEXTPROC __glewFragmentLightModelivEXT = NULL; -PFNGLFRAGMENTLIGHTFEXTPROC __glewFragmentLightfEXT = NULL; -PFNGLFRAGMENTLIGHTFVEXTPROC __glewFragmentLightfvEXT = NULL; -PFNGLFRAGMENTLIGHTIEXTPROC __glewFragmentLightiEXT = NULL; -PFNGLFRAGMENTLIGHTIVEXTPROC __glewFragmentLightivEXT = NULL; -PFNGLFRAGMENTMATERIALFEXTPROC __glewFragmentMaterialfEXT = NULL; -PFNGLFRAGMENTMATERIALFVEXTPROC __glewFragmentMaterialfvEXT = NULL; -PFNGLFRAGMENTMATERIALIEXTPROC __glewFragmentMaterialiEXT = NULL; -PFNGLFRAGMENTMATERIALIVEXTPROC __glewFragmentMaterialivEXT = NULL; -PFNGLGETFRAGMENTLIGHTFVEXTPROC __glewGetFragmentLightfvEXT = NULL; -PFNGLGETFRAGMENTLIGHTIVEXTPROC __glewGetFragmentLightivEXT = NULL; -PFNGLGETFRAGMENTMATERIALFVEXTPROC __glewGetFragmentMaterialfvEXT = NULL; -PFNGLGETFRAGMENTMATERIALIVEXTPROC __glewGetFragmentMaterialivEXT = NULL; -PFNGLLIGHTENVIEXTPROC __glewLightEnviEXT = NULL; - -PFNGLBLITFRAMEBUFFEREXTPROC __glewBlitFramebufferEXT = NULL; - -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC __glewRenderbufferStorageMultisampleEXT = NULL; - -PFNGLBINDFRAMEBUFFEREXTPROC __glewBindFramebufferEXT = NULL; -PFNGLBINDRENDERBUFFEREXTPROC __glewBindRenderbufferEXT = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC __glewCheckFramebufferStatusEXT = NULL; -PFNGLDELETEFRAMEBUFFERSEXTPROC __glewDeleteFramebuffersEXT = NULL; -PFNGLDELETERENDERBUFFERSEXTPROC __glewDeleteRenderbuffersEXT = NULL; -PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC __glewFramebufferRenderbufferEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE1DEXTPROC __glewFramebufferTexture1DEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE2DEXTPROC __glewFramebufferTexture2DEXT = NULL; -PFNGLFRAMEBUFFERTEXTURE3DEXTPROC __glewFramebufferTexture3DEXT = NULL; -PFNGLGENFRAMEBUFFERSEXTPROC __glewGenFramebuffersEXT = NULL; -PFNGLGENRENDERBUFFERSEXTPROC __glewGenRenderbuffersEXT = NULL; -PFNGLGENERATEMIPMAPEXTPROC __glewGenerateMipmapEXT = NULL; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC __glewGetFramebufferAttachmentParameterivEXT = NULL; -PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC __glewGetRenderbufferParameterivEXT = NULL; -PFNGLISFRAMEBUFFEREXTPROC __glewIsFramebufferEXT = NULL; -PFNGLISRENDERBUFFEREXTPROC __glewIsRenderbufferEXT = NULL; -PFNGLRENDERBUFFERSTORAGEEXTPROC __glewRenderbufferStorageEXT = NULL; - -PFNGLFRAMEBUFFERTEXTUREEXTPROC __glewFramebufferTextureEXT = NULL; -PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC __glewFramebufferTextureFaceEXT = NULL; -PFNGLPROGRAMPARAMETERIEXTPROC __glewProgramParameteriEXT = NULL; - -PFNGLPROGRAMENVPARAMETERS4FVEXTPROC __glewProgramEnvParameters4fvEXT = NULL; -PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC __glewProgramLocalParameters4fvEXT = NULL; - -PFNGLBINDFRAGDATALOCATIONEXTPROC __glewBindFragDataLocationEXT = NULL; -PFNGLGETFRAGDATALOCATIONEXTPROC __glewGetFragDataLocationEXT = NULL; -PFNGLGETUNIFORMUIVEXTPROC __glewGetUniformuivEXT = NULL; -PFNGLGETVERTEXATTRIBIIVEXTPROC __glewGetVertexAttribIivEXT = NULL; -PFNGLGETVERTEXATTRIBIUIVEXTPROC __glewGetVertexAttribIuivEXT = NULL; -PFNGLUNIFORM1UIEXTPROC __glewUniform1uiEXT = NULL; -PFNGLUNIFORM1UIVEXTPROC __glewUniform1uivEXT = NULL; -PFNGLUNIFORM2UIEXTPROC __glewUniform2uiEXT = NULL; -PFNGLUNIFORM2UIVEXTPROC __glewUniform2uivEXT = NULL; -PFNGLUNIFORM3UIEXTPROC __glewUniform3uiEXT = NULL; -PFNGLUNIFORM3UIVEXTPROC __glewUniform3uivEXT = NULL; -PFNGLUNIFORM4UIEXTPROC __glewUniform4uiEXT = NULL; -PFNGLUNIFORM4UIVEXTPROC __glewUniform4uivEXT = NULL; -PFNGLVERTEXATTRIBI1IEXTPROC __glewVertexAttribI1iEXT = NULL; -PFNGLVERTEXATTRIBI1IVEXTPROC __glewVertexAttribI1ivEXT = NULL; -PFNGLVERTEXATTRIBI1UIEXTPROC __glewVertexAttribI1uiEXT = NULL; -PFNGLVERTEXATTRIBI1UIVEXTPROC __glewVertexAttribI1uivEXT = NULL; -PFNGLVERTEXATTRIBI2IEXTPROC __glewVertexAttribI2iEXT = NULL; -PFNGLVERTEXATTRIBI2IVEXTPROC __glewVertexAttribI2ivEXT = NULL; -PFNGLVERTEXATTRIBI2UIEXTPROC __glewVertexAttribI2uiEXT = NULL; -PFNGLVERTEXATTRIBI2UIVEXTPROC __glewVertexAttribI2uivEXT = NULL; -PFNGLVERTEXATTRIBI3IEXTPROC __glewVertexAttribI3iEXT = NULL; -PFNGLVERTEXATTRIBI3IVEXTPROC __glewVertexAttribI3ivEXT = NULL; -PFNGLVERTEXATTRIBI3UIEXTPROC __glewVertexAttribI3uiEXT = NULL; -PFNGLVERTEXATTRIBI3UIVEXTPROC __glewVertexAttribI3uivEXT = NULL; -PFNGLVERTEXATTRIBI4BVEXTPROC __glewVertexAttribI4bvEXT = NULL; -PFNGLVERTEXATTRIBI4IEXTPROC __glewVertexAttribI4iEXT = NULL; -PFNGLVERTEXATTRIBI4IVEXTPROC __glewVertexAttribI4ivEXT = NULL; -PFNGLVERTEXATTRIBI4SVEXTPROC __glewVertexAttribI4svEXT = NULL; -PFNGLVERTEXATTRIBI4UBVEXTPROC __glewVertexAttribI4ubvEXT = NULL; -PFNGLVERTEXATTRIBI4UIEXTPROC __glewVertexAttribI4uiEXT = NULL; -PFNGLVERTEXATTRIBI4UIVEXTPROC __glewVertexAttribI4uivEXT = NULL; -PFNGLVERTEXATTRIBI4USVEXTPROC __glewVertexAttribI4usvEXT = NULL; -PFNGLVERTEXATTRIBIPOINTEREXTPROC __glewVertexAttribIPointerEXT = NULL; - -PFNGLGETHISTOGRAMEXTPROC __glewGetHistogramEXT = NULL; -PFNGLGETHISTOGRAMPARAMETERFVEXTPROC __glewGetHistogramParameterfvEXT = NULL; -PFNGLGETHISTOGRAMPARAMETERIVEXTPROC __glewGetHistogramParameterivEXT = NULL; -PFNGLGETMINMAXEXTPROC __glewGetMinmaxEXT = NULL; -PFNGLGETMINMAXPARAMETERFVEXTPROC __glewGetMinmaxParameterfvEXT = NULL; -PFNGLGETMINMAXPARAMETERIVEXTPROC __glewGetMinmaxParameterivEXT = NULL; -PFNGLHISTOGRAMEXTPROC __glewHistogramEXT = NULL; -PFNGLMINMAXEXTPROC __glewMinmaxEXT = NULL; -PFNGLRESETHISTOGRAMEXTPROC __glewResetHistogramEXT = NULL; -PFNGLRESETMINMAXEXTPROC __glewResetMinmaxEXT = NULL; - -PFNGLINDEXFUNCEXTPROC __glewIndexFuncEXT = NULL; - -PFNGLINDEXMATERIALEXTPROC __glewIndexMaterialEXT = NULL; - -PFNGLAPPLYTEXTUREEXTPROC __glewApplyTextureEXT = NULL; -PFNGLTEXTURELIGHTEXTPROC __glewTextureLightEXT = NULL; -PFNGLTEXTUREMATERIALEXTPROC __glewTextureMaterialEXT = NULL; - -PFNGLMULTIDRAWARRAYSEXTPROC __glewMultiDrawArraysEXT = NULL; -PFNGLMULTIDRAWELEMENTSEXTPROC __glewMultiDrawElementsEXT = NULL; - -PFNGLSAMPLEMASKEXTPROC __glewSampleMaskEXT = NULL; -PFNGLSAMPLEPATTERNEXTPROC __glewSamplePatternEXT = NULL; - -PFNGLCOLORTABLEEXTPROC __glewColorTableEXT = NULL; -PFNGLGETCOLORTABLEEXTPROC __glewGetColorTableEXT = NULL; -PFNGLGETCOLORTABLEPARAMETERFVEXTPROC __glewGetColorTableParameterfvEXT = NULL; -PFNGLGETCOLORTABLEPARAMETERIVEXTPROC __glewGetColorTableParameterivEXT = NULL; - -PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC __glewGetPixelTransformParameterfvEXT = NULL; -PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC __glewGetPixelTransformParameterivEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERFEXTPROC __glewPixelTransformParameterfEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC __glewPixelTransformParameterfvEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERIEXTPROC __glewPixelTransformParameteriEXT = NULL; -PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC __glewPixelTransformParameterivEXT = NULL; - -PFNGLPOINTPARAMETERFEXTPROC __glewPointParameterfEXT = NULL; -PFNGLPOINTPARAMETERFVEXTPROC __glewPointParameterfvEXT = NULL; - -PFNGLPOLYGONOFFSETEXTPROC __glewPolygonOffsetEXT = NULL; - -PFNGLPROVOKINGVERTEXEXTPROC __glewProvokingVertexEXT = NULL; - -PFNGLBEGINSCENEEXTPROC __glewBeginSceneEXT = NULL; -PFNGLENDSCENEEXTPROC __glewEndSceneEXT = NULL; - -PFNGLSECONDARYCOLOR3BEXTPROC __glewSecondaryColor3bEXT = NULL; -PFNGLSECONDARYCOLOR3BVEXTPROC __glewSecondaryColor3bvEXT = NULL; -PFNGLSECONDARYCOLOR3DEXTPROC __glewSecondaryColor3dEXT = NULL; -PFNGLSECONDARYCOLOR3DVEXTPROC __glewSecondaryColor3dvEXT = NULL; -PFNGLSECONDARYCOLOR3FEXTPROC __glewSecondaryColor3fEXT = NULL; -PFNGLSECONDARYCOLOR3FVEXTPROC __glewSecondaryColor3fvEXT = NULL; -PFNGLSECONDARYCOLOR3IEXTPROC __glewSecondaryColor3iEXT = NULL; -PFNGLSECONDARYCOLOR3IVEXTPROC __glewSecondaryColor3ivEXT = NULL; -PFNGLSECONDARYCOLOR3SEXTPROC __glewSecondaryColor3sEXT = NULL; -PFNGLSECONDARYCOLOR3SVEXTPROC __glewSecondaryColor3svEXT = NULL; -PFNGLSECONDARYCOLOR3UBEXTPROC __glewSecondaryColor3ubEXT = NULL; -PFNGLSECONDARYCOLOR3UBVEXTPROC __glewSecondaryColor3ubvEXT = NULL; -PFNGLSECONDARYCOLOR3UIEXTPROC __glewSecondaryColor3uiEXT = NULL; -PFNGLSECONDARYCOLOR3UIVEXTPROC __glewSecondaryColor3uivEXT = NULL; -PFNGLSECONDARYCOLOR3USEXTPROC __glewSecondaryColor3usEXT = NULL; -PFNGLSECONDARYCOLOR3USVEXTPROC __glewSecondaryColor3usvEXT = NULL; -PFNGLSECONDARYCOLORPOINTEREXTPROC __glewSecondaryColorPointerEXT = NULL; - -PFNGLACTIVEPROGRAMEXTPROC __glewActiveProgramEXT = NULL; -PFNGLCREATESHADERPROGRAMEXTPROC __glewCreateShaderProgramEXT = NULL; -PFNGLUSESHADERPROGRAMEXTPROC __glewUseShaderProgramEXT = NULL; - -PFNGLBINDIMAGETEXTUREEXTPROC __glewBindImageTextureEXT = NULL; -PFNGLMEMORYBARRIEREXTPROC __glewMemoryBarrierEXT = NULL; - -PFNGLACTIVESTENCILFACEEXTPROC __glewActiveStencilFaceEXT = NULL; - -PFNGLTEXSUBIMAGE1DEXTPROC __glewTexSubImage1DEXT = NULL; -PFNGLTEXSUBIMAGE2DEXTPROC __glewTexSubImage2DEXT = NULL; -PFNGLTEXSUBIMAGE3DEXTPROC __glewTexSubImage3DEXT = NULL; - -PFNGLTEXIMAGE3DEXTPROC __glewTexImage3DEXT = NULL; - -PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC __glewFramebufferTextureLayerEXT = NULL; - -PFNGLTEXBUFFEREXTPROC __glewTexBufferEXT = NULL; - -PFNGLCLEARCOLORIIEXTPROC __glewClearColorIiEXT = NULL; -PFNGLCLEARCOLORIUIEXTPROC __glewClearColorIuiEXT = NULL; -PFNGLGETTEXPARAMETERIIVEXTPROC __glewGetTexParameterIivEXT = NULL; -PFNGLGETTEXPARAMETERIUIVEXTPROC __glewGetTexParameterIuivEXT = NULL; -PFNGLTEXPARAMETERIIVEXTPROC __glewTexParameterIivEXT = NULL; -PFNGLTEXPARAMETERIUIVEXTPROC __glewTexParameterIuivEXT = NULL; - -PFNGLARETEXTURESRESIDENTEXTPROC __glewAreTexturesResidentEXT = NULL; -PFNGLBINDTEXTUREEXTPROC __glewBindTextureEXT = NULL; -PFNGLDELETETEXTURESEXTPROC __glewDeleteTexturesEXT = NULL; -PFNGLGENTEXTURESEXTPROC __glewGenTexturesEXT = NULL; -PFNGLISTEXTUREEXTPROC __glewIsTextureEXT = NULL; -PFNGLPRIORITIZETEXTURESEXTPROC __glewPrioritizeTexturesEXT = NULL; - -PFNGLTEXTURENORMALEXTPROC __glewTextureNormalEXT = NULL; - -PFNGLGETQUERYOBJECTI64VEXTPROC __glewGetQueryObjecti64vEXT = NULL; -PFNGLGETQUERYOBJECTUI64VEXTPROC __glewGetQueryObjectui64vEXT = NULL; - -PFNGLBEGINTRANSFORMFEEDBACKEXTPROC __glewBeginTransformFeedbackEXT = NULL; -PFNGLBINDBUFFERBASEEXTPROC __glewBindBufferBaseEXT = NULL; -PFNGLBINDBUFFEROFFSETEXTPROC __glewBindBufferOffsetEXT = NULL; -PFNGLBINDBUFFERRANGEEXTPROC __glewBindBufferRangeEXT = NULL; -PFNGLENDTRANSFORMFEEDBACKEXTPROC __glewEndTransformFeedbackEXT = NULL; -PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC __glewGetTransformFeedbackVaryingEXT = NULL; -PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC __glewTransformFeedbackVaryingsEXT = NULL; - -PFNGLARRAYELEMENTEXTPROC __glewArrayElementEXT = NULL; -PFNGLCOLORPOINTEREXTPROC __glewColorPointerEXT = NULL; -PFNGLDRAWARRAYSEXTPROC __glewDrawArraysEXT = NULL; -PFNGLEDGEFLAGPOINTEREXTPROC __glewEdgeFlagPointerEXT = NULL; -PFNGLINDEXPOINTEREXTPROC __glewIndexPointerEXT = NULL; -PFNGLNORMALPOINTEREXTPROC __glewNormalPointerEXT = NULL; -PFNGLTEXCOORDPOINTEREXTPROC __glewTexCoordPointerEXT = NULL; -PFNGLVERTEXPOINTEREXTPROC __glewVertexPointerEXT = NULL; - -PFNGLGETVERTEXATTRIBLDVEXTPROC __glewGetVertexAttribLdvEXT = NULL; -PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC __glewVertexArrayVertexAttribLOffsetEXT = NULL; -PFNGLVERTEXATTRIBL1DEXTPROC __glewVertexAttribL1dEXT = NULL; -PFNGLVERTEXATTRIBL1DVEXTPROC __glewVertexAttribL1dvEXT = NULL; -PFNGLVERTEXATTRIBL2DEXTPROC __glewVertexAttribL2dEXT = NULL; -PFNGLVERTEXATTRIBL2DVEXTPROC __glewVertexAttribL2dvEXT = NULL; -PFNGLVERTEXATTRIBL3DEXTPROC __glewVertexAttribL3dEXT = NULL; -PFNGLVERTEXATTRIBL3DVEXTPROC __glewVertexAttribL3dvEXT = NULL; -PFNGLVERTEXATTRIBL4DEXTPROC __glewVertexAttribL4dEXT = NULL; -PFNGLVERTEXATTRIBL4DVEXTPROC __glewVertexAttribL4dvEXT = NULL; -PFNGLVERTEXATTRIBLPOINTEREXTPROC __glewVertexAttribLPointerEXT = NULL; - -PFNGLBEGINVERTEXSHADEREXTPROC __glewBeginVertexShaderEXT = NULL; -PFNGLBINDLIGHTPARAMETEREXTPROC __glewBindLightParameterEXT = NULL; -PFNGLBINDMATERIALPARAMETEREXTPROC __glewBindMaterialParameterEXT = NULL; -PFNGLBINDPARAMETEREXTPROC __glewBindParameterEXT = NULL; -PFNGLBINDTEXGENPARAMETEREXTPROC __glewBindTexGenParameterEXT = NULL; -PFNGLBINDTEXTUREUNITPARAMETEREXTPROC __glewBindTextureUnitParameterEXT = NULL; -PFNGLBINDVERTEXSHADEREXTPROC __glewBindVertexShaderEXT = NULL; -PFNGLDELETEVERTEXSHADEREXTPROC __glewDeleteVertexShaderEXT = NULL; -PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC __glewDisableVariantClientStateEXT = NULL; -PFNGLENABLEVARIANTCLIENTSTATEEXTPROC __glewEnableVariantClientStateEXT = NULL; -PFNGLENDVERTEXSHADEREXTPROC __glewEndVertexShaderEXT = NULL; -PFNGLEXTRACTCOMPONENTEXTPROC __glewExtractComponentEXT = NULL; -PFNGLGENSYMBOLSEXTPROC __glewGenSymbolsEXT = NULL; -PFNGLGENVERTEXSHADERSEXTPROC __glewGenVertexShadersEXT = NULL; -PFNGLGETINVARIANTBOOLEANVEXTPROC __glewGetInvariantBooleanvEXT = NULL; -PFNGLGETINVARIANTFLOATVEXTPROC __glewGetInvariantFloatvEXT = NULL; -PFNGLGETINVARIANTINTEGERVEXTPROC __glewGetInvariantIntegervEXT = NULL; -PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC __glewGetLocalConstantBooleanvEXT = NULL; -PFNGLGETLOCALCONSTANTFLOATVEXTPROC __glewGetLocalConstantFloatvEXT = NULL; -PFNGLGETLOCALCONSTANTINTEGERVEXTPROC __glewGetLocalConstantIntegervEXT = NULL; -PFNGLGETVARIANTBOOLEANVEXTPROC __glewGetVariantBooleanvEXT = NULL; -PFNGLGETVARIANTFLOATVEXTPROC __glewGetVariantFloatvEXT = NULL; -PFNGLGETVARIANTINTEGERVEXTPROC __glewGetVariantIntegervEXT = NULL; -PFNGLGETVARIANTPOINTERVEXTPROC __glewGetVariantPointervEXT = NULL; -PFNGLINSERTCOMPONENTEXTPROC __glewInsertComponentEXT = NULL; -PFNGLISVARIANTENABLEDEXTPROC __glewIsVariantEnabledEXT = NULL; -PFNGLSETINVARIANTEXTPROC __glewSetInvariantEXT = NULL; -PFNGLSETLOCALCONSTANTEXTPROC __glewSetLocalConstantEXT = NULL; -PFNGLSHADEROP1EXTPROC __glewShaderOp1EXT = NULL; -PFNGLSHADEROP2EXTPROC __glewShaderOp2EXT = NULL; -PFNGLSHADEROP3EXTPROC __glewShaderOp3EXT = NULL; -PFNGLSWIZZLEEXTPROC __glewSwizzleEXT = NULL; -PFNGLVARIANTPOINTEREXTPROC __glewVariantPointerEXT = NULL; -PFNGLVARIANTBVEXTPROC __glewVariantbvEXT = NULL; -PFNGLVARIANTDVEXTPROC __glewVariantdvEXT = NULL; -PFNGLVARIANTFVEXTPROC __glewVariantfvEXT = NULL; -PFNGLVARIANTIVEXTPROC __glewVariantivEXT = NULL; -PFNGLVARIANTSVEXTPROC __glewVariantsvEXT = NULL; -PFNGLVARIANTUBVEXTPROC __glewVariantubvEXT = NULL; -PFNGLVARIANTUIVEXTPROC __glewVariantuivEXT = NULL; -PFNGLVARIANTUSVEXTPROC __glewVariantusvEXT = NULL; -PFNGLWRITEMASKEXTPROC __glewWriteMaskEXT = NULL; - -PFNGLVERTEXWEIGHTPOINTEREXTPROC __glewVertexWeightPointerEXT = NULL; -PFNGLVERTEXWEIGHTFEXTPROC __glewVertexWeightfEXT = NULL; -PFNGLVERTEXWEIGHTFVEXTPROC __glewVertexWeightfvEXT = NULL; - -PFNGLIMPORTSYNCEXTPROC __glewImportSyncEXT = NULL; - -PFNGLFRAMETERMINATORGREMEDYPROC __glewFrameTerminatorGREMEDY = NULL; - -PFNGLSTRINGMARKERGREMEDYPROC __glewStringMarkerGREMEDY = NULL; - -PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC __glewGetImageTransformParameterfvHP = NULL; -PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC __glewGetImageTransformParameterivHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERFHPPROC __glewImageTransformParameterfHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERFVHPPROC __glewImageTransformParameterfvHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERIHPPROC __glewImageTransformParameteriHP = NULL; -PFNGLIMAGETRANSFORMPARAMETERIVHPPROC __glewImageTransformParameterivHP = NULL; - -PFNGLMULTIMODEDRAWARRAYSIBMPROC __glewMultiModeDrawArraysIBM = NULL; -PFNGLMULTIMODEDRAWELEMENTSIBMPROC __glewMultiModeDrawElementsIBM = NULL; - -PFNGLCOLORPOINTERLISTIBMPROC __glewColorPointerListIBM = NULL; -PFNGLEDGEFLAGPOINTERLISTIBMPROC __glewEdgeFlagPointerListIBM = NULL; -PFNGLFOGCOORDPOINTERLISTIBMPROC __glewFogCoordPointerListIBM = NULL; -PFNGLINDEXPOINTERLISTIBMPROC __glewIndexPointerListIBM = NULL; -PFNGLNORMALPOINTERLISTIBMPROC __glewNormalPointerListIBM = NULL; -PFNGLSECONDARYCOLORPOINTERLISTIBMPROC __glewSecondaryColorPointerListIBM = NULL; -PFNGLTEXCOORDPOINTERLISTIBMPROC __glewTexCoordPointerListIBM = NULL; -PFNGLVERTEXPOINTERLISTIBMPROC __glewVertexPointerListIBM = NULL; - -PFNGLMAPTEXTURE2DINTELPROC __glewMapTexture2DINTEL = NULL; -PFNGLSYNCTEXTUREINTELPROC __glewSyncTextureINTEL = NULL; -PFNGLUNMAPTEXTURE2DINTELPROC __glewUnmapTexture2DINTEL = NULL; - -PFNGLCOLORPOINTERVINTELPROC __glewColorPointervINTEL = NULL; -PFNGLNORMALPOINTERVINTELPROC __glewNormalPointervINTEL = NULL; -PFNGLTEXCOORDPOINTERVINTELPROC __glewTexCoordPointervINTEL = NULL; -PFNGLVERTEXPOINTERVINTELPROC __glewVertexPointervINTEL = NULL; - -PFNGLTEXSCISSORFUNCINTELPROC __glewTexScissorFuncINTEL = NULL; -PFNGLTEXSCISSORINTELPROC __glewTexScissorINTEL = NULL; - -PFNGLDEBUGMESSAGECALLBACKPROC __glewDebugMessageCallback = NULL; -PFNGLDEBUGMESSAGECONTROLPROC __glewDebugMessageControl = NULL; -PFNGLDEBUGMESSAGEINSERTPROC __glewDebugMessageInsert = NULL; -PFNGLGETDEBUGMESSAGELOGPROC __glewGetDebugMessageLog = NULL; -PFNGLGETOBJECTLABELPROC __glewGetObjectLabel = NULL; -PFNGLGETOBJECTPTRLABELPROC __glewGetObjectPtrLabel = NULL; -PFNGLOBJECTLABELPROC __glewObjectLabel = NULL; -PFNGLOBJECTPTRLABELPROC __glewObjectPtrLabel = NULL; -PFNGLPOPDEBUGGROUPPROC __glewPopDebugGroup = NULL; -PFNGLPUSHDEBUGGROUPPROC __glewPushDebugGroup = NULL; - -PFNGLBUFFERREGIONENABLEDPROC __glewBufferRegionEnabled = NULL; -PFNGLDELETEBUFFERREGIONPROC __glewDeleteBufferRegion = NULL; -PFNGLDRAWBUFFERREGIONPROC __glewDrawBufferRegion = NULL; -PFNGLNEWBUFFERREGIONPROC __glewNewBufferRegion = NULL; -PFNGLREADBUFFERREGIONPROC __glewReadBufferRegion = NULL; - -PFNGLRESIZEBUFFERSMESAPROC __glewResizeBuffersMESA = NULL; - -PFNGLWINDOWPOS2DMESAPROC __glewWindowPos2dMESA = NULL; -PFNGLWINDOWPOS2DVMESAPROC __glewWindowPos2dvMESA = NULL; -PFNGLWINDOWPOS2FMESAPROC __glewWindowPos2fMESA = NULL; -PFNGLWINDOWPOS2FVMESAPROC __glewWindowPos2fvMESA = NULL; -PFNGLWINDOWPOS2IMESAPROC __glewWindowPos2iMESA = NULL; -PFNGLWINDOWPOS2IVMESAPROC __glewWindowPos2ivMESA = NULL; -PFNGLWINDOWPOS2SMESAPROC __glewWindowPos2sMESA = NULL; -PFNGLWINDOWPOS2SVMESAPROC __glewWindowPos2svMESA = NULL; -PFNGLWINDOWPOS3DMESAPROC __glewWindowPos3dMESA = NULL; -PFNGLWINDOWPOS3DVMESAPROC __glewWindowPos3dvMESA = NULL; -PFNGLWINDOWPOS3FMESAPROC __glewWindowPos3fMESA = NULL; -PFNGLWINDOWPOS3FVMESAPROC __glewWindowPos3fvMESA = NULL; -PFNGLWINDOWPOS3IMESAPROC __glewWindowPos3iMESA = NULL; -PFNGLWINDOWPOS3IVMESAPROC __glewWindowPos3ivMESA = NULL; -PFNGLWINDOWPOS3SMESAPROC __glewWindowPos3sMESA = NULL; -PFNGLWINDOWPOS3SVMESAPROC __glewWindowPos3svMESA = NULL; -PFNGLWINDOWPOS4DMESAPROC __glewWindowPos4dMESA = NULL; -PFNGLWINDOWPOS4DVMESAPROC __glewWindowPos4dvMESA = NULL; -PFNGLWINDOWPOS4FMESAPROC __glewWindowPos4fMESA = NULL; -PFNGLWINDOWPOS4FVMESAPROC __glewWindowPos4fvMESA = NULL; -PFNGLWINDOWPOS4IMESAPROC __glewWindowPos4iMESA = NULL; -PFNGLWINDOWPOS4IVMESAPROC __glewWindowPos4ivMESA = NULL; -PFNGLWINDOWPOS4SMESAPROC __glewWindowPos4sMESA = NULL; -PFNGLWINDOWPOS4SVMESAPROC __glewWindowPos4svMESA = NULL; - -PFNGLBEGINCONDITIONALRENDERNVXPROC __glewBeginConditionalRenderNVX = NULL; -PFNGLENDCONDITIONALRENDERNVXPROC __glewEndConditionalRenderNVX = NULL; - -PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC __glewMultiDrawArraysIndirectBindlessNV = NULL; -PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC __glewMultiDrawElementsIndirectBindlessNV = NULL; - -PFNGLGETIMAGEHANDLENVPROC __glewGetImageHandleNV = NULL; -PFNGLGETTEXTUREHANDLENVPROC __glewGetTextureHandleNV = NULL; -PFNGLGETTEXTURESAMPLERHANDLENVPROC __glewGetTextureSamplerHandleNV = NULL; -PFNGLISIMAGEHANDLERESIDENTNVPROC __glewIsImageHandleResidentNV = NULL; -PFNGLISTEXTUREHANDLERESIDENTNVPROC __glewIsTextureHandleResidentNV = NULL; -PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC __glewMakeImageHandleNonResidentNV = NULL; -PFNGLMAKEIMAGEHANDLERESIDENTNVPROC __glewMakeImageHandleResidentNV = NULL; -PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC __glewMakeTextureHandleNonResidentNV = NULL; -PFNGLMAKETEXTUREHANDLERESIDENTNVPROC __glewMakeTextureHandleResidentNV = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC __glewProgramUniformHandleui64NV = NULL; -PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC __glewProgramUniformHandleui64vNV = NULL; -PFNGLUNIFORMHANDLEUI64NVPROC __glewUniformHandleui64NV = NULL; -PFNGLUNIFORMHANDLEUI64VNVPROC __glewUniformHandleui64vNV = NULL; - -PFNGLBLENDBARRIERNVPROC __glewBlendBarrierNV = NULL; -PFNGLBLENDPARAMETERINVPROC __glewBlendParameteriNV = NULL; - -PFNGLBEGINCONDITIONALRENDERNVPROC __glewBeginConditionalRenderNV = NULL; -PFNGLENDCONDITIONALRENDERNVPROC __glewEndConditionalRenderNV = NULL; - -PFNGLCOPYIMAGESUBDATANVPROC __glewCopyImageSubDataNV = NULL; - -PFNGLCLEARDEPTHDNVPROC __glewClearDepthdNV = NULL; -PFNGLDEPTHBOUNDSDNVPROC __glewDepthBoundsdNV = NULL; -PFNGLDEPTHRANGEDNVPROC __glewDepthRangedNV = NULL; - -PFNGLDRAWTEXTURENVPROC __glewDrawTextureNV = NULL; - -PFNGLEVALMAPSNVPROC __glewEvalMapsNV = NULL; -PFNGLGETMAPATTRIBPARAMETERFVNVPROC __glewGetMapAttribParameterfvNV = NULL; -PFNGLGETMAPATTRIBPARAMETERIVNVPROC __glewGetMapAttribParameterivNV = NULL; -PFNGLGETMAPCONTROLPOINTSNVPROC __glewGetMapControlPointsNV = NULL; -PFNGLGETMAPPARAMETERFVNVPROC __glewGetMapParameterfvNV = NULL; -PFNGLGETMAPPARAMETERIVNVPROC __glewGetMapParameterivNV = NULL; -PFNGLMAPCONTROLPOINTSNVPROC __glewMapControlPointsNV = NULL; -PFNGLMAPPARAMETERFVNVPROC __glewMapParameterfvNV = NULL; -PFNGLMAPPARAMETERIVNVPROC __glewMapParameterivNV = NULL; - -PFNGLGETMULTISAMPLEFVNVPROC __glewGetMultisamplefvNV = NULL; -PFNGLSAMPLEMASKINDEXEDNVPROC __glewSampleMaskIndexedNV = NULL; -PFNGLTEXRENDERBUFFERNVPROC __glewTexRenderbufferNV = NULL; - -PFNGLDELETEFENCESNVPROC __glewDeleteFencesNV = NULL; -PFNGLFINISHFENCENVPROC __glewFinishFenceNV = NULL; -PFNGLGENFENCESNVPROC __glewGenFencesNV = NULL; -PFNGLGETFENCEIVNVPROC __glewGetFenceivNV = NULL; -PFNGLISFENCENVPROC __glewIsFenceNV = NULL; -PFNGLSETFENCENVPROC __glewSetFenceNV = NULL; -PFNGLTESTFENCENVPROC __glewTestFenceNV = NULL; - -PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC __glewGetProgramNamedParameterdvNV = NULL; -PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC __glewGetProgramNamedParameterfvNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4DNVPROC __glewProgramNamedParameter4dNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC __glewProgramNamedParameter4dvNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4FNVPROC __glewProgramNamedParameter4fNV = NULL; -PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC __glewProgramNamedParameter4fvNV = NULL; - -PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC __glewRenderbufferStorageMultisampleCoverageNV = NULL; - -PFNGLPROGRAMVERTEXLIMITNVPROC __glewProgramVertexLimitNV = NULL; - -PFNGLPROGRAMENVPARAMETERI4INVPROC __glewProgramEnvParameterI4iNV = NULL; -PFNGLPROGRAMENVPARAMETERI4IVNVPROC __glewProgramEnvParameterI4ivNV = NULL; -PFNGLPROGRAMENVPARAMETERI4UINVPROC __glewProgramEnvParameterI4uiNV = NULL; -PFNGLPROGRAMENVPARAMETERI4UIVNVPROC __glewProgramEnvParameterI4uivNV = NULL; -PFNGLPROGRAMENVPARAMETERSI4IVNVPROC __glewProgramEnvParametersI4ivNV = NULL; -PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC __glewProgramEnvParametersI4uivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4INVPROC __glewProgramLocalParameterI4iNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC __glewProgramLocalParameterI4ivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4UINVPROC __glewProgramLocalParameterI4uiNV = NULL; -PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC __glewProgramLocalParameterI4uivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC __glewProgramLocalParametersI4ivNV = NULL; -PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC __glewProgramLocalParametersI4uivNV = NULL; - -PFNGLGETUNIFORMI64VNVPROC __glewGetUniformi64vNV = NULL; -PFNGLGETUNIFORMUI64VNVPROC __glewGetUniformui64vNV = NULL; -PFNGLPROGRAMUNIFORM1I64NVPROC __glewProgramUniform1i64NV = NULL; -PFNGLPROGRAMUNIFORM1I64VNVPROC __glewProgramUniform1i64vNV = NULL; -PFNGLPROGRAMUNIFORM1UI64NVPROC __glewProgramUniform1ui64NV = NULL; -PFNGLPROGRAMUNIFORM1UI64VNVPROC __glewProgramUniform1ui64vNV = NULL; -PFNGLPROGRAMUNIFORM2I64NVPROC __glewProgramUniform2i64NV = NULL; -PFNGLPROGRAMUNIFORM2I64VNVPROC __glewProgramUniform2i64vNV = NULL; -PFNGLPROGRAMUNIFORM2UI64NVPROC __glewProgramUniform2ui64NV = NULL; -PFNGLPROGRAMUNIFORM2UI64VNVPROC __glewProgramUniform2ui64vNV = NULL; -PFNGLPROGRAMUNIFORM3I64NVPROC __glewProgramUniform3i64NV = NULL; -PFNGLPROGRAMUNIFORM3I64VNVPROC __glewProgramUniform3i64vNV = NULL; -PFNGLPROGRAMUNIFORM3UI64NVPROC __glewProgramUniform3ui64NV = NULL; -PFNGLPROGRAMUNIFORM3UI64VNVPROC __glewProgramUniform3ui64vNV = NULL; -PFNGLPROGRAMUNIFORM4I64NVPROC __glewProgramUniform4i64NV = NULL; -PFNGLPROGRAMUNIFORM4I64VNVPROC __glewProgramUniform4i64vNV = NULL; -PFNGLPROGRAMUNIFORM4UI64NVPROC __glewProgramUniform4ui64NV = NULL; -PFNGLPROGRAMUNIFORM4UI64VNVPROC __glewProgramUniform4ui64vNV = NULL; -PFNGLUNIFORM1I64NVPROC __glewUniform1i64NV = NULL; -PFNGLUNIFORM1I64VNVPROC __glewUniform1i64vNV = NULL; -PFNGLUNIFORM1UI64NVPROC __glewUniform1ui64NV = NULL; -PFNGLUNIFORM1UI64VNVPROC __glewUniform1ui64vNV = NULL; -PFNGLUNIFORM2I64NVPROC __glewUniform2i64NV = NULL; -PFNGLUNIFORM2I64VNVPROC __glewUniform2i64vNV = NULL; -PFNGLUNIFORM2UI64NVPROC __glewUniform2ui64NV = NULL; -PFNGLUNIFORM2UI64VNVPROC __glewUniform2ui64vNV = NULL; -PFNGLUNIFORM3I64NVPROC __glewUniform3i64NV = NULL; -PFNGLUNIFORM3I64VNVPROC __glewUniform3i64vNV = NULL; -PFNGLUNIFORM3UI64NVPROC __glewUniform3ui64NV = NULL; -PFNGLUNIFORM3UI64VNVPROC __glewUniform3ui64vNV = NULL; -PFNGLUNIFORM4I64NVPROC __glewUniform4i64NV = NULL; -PFNGLUNIFORM4I64VNVPROC __glewUniform4i64vNV = NULL; -PFNGLUNIFORM4UI64NVPROC __glewUniform4ui64NV = NULL; -PFNGLUNIFORM4UI64VNVPROC __glewUniform4ui64vNV = NULL; - -PFNGLCOLOR3HNVPROC __glewColor3hNV = NULL; -PFNGLCOLOR3HVNVPROC __glewColor3hvNV = NULL; -PFNGLCOLOR4HNVPROC __glewColor4hNV = NULL; -PFNGLCOLOR4HVNVPROC __glewColor4hvNV = NULL; -PFNGLFOGCOORDHNVPROC __glewFogCoordhNV = NULL; -PFNGLFOGCOORDHVNVPROC __glewFogCoordhvNV = NULL; -PFNGLMULTITEXCOORD1HNVPROC __glewMultiTexCoord1hNV = NULL; -PFNGLMULTITEXCOORD1HVNVPROC __glewMultiTexCoord1hvNV = NULL; -PFNGLMULTITEXCOORD2HNVPROC __glewMultiTexCoord2hNV = NULL; -PFNGLMULTITEXCOORD2HVNVPROC __glewMultiTexCoord2hvNV = NULL; -PFNGLMULTITEXCOORD3HNVPROC __glewMultiTexCoord3hNV = NULL; -PFNGLMULTITEXCOORD3HVNVPROC __glewMultiTexCoord3hvNV = NULL; -PFNGLMULTITEXCOORD4HNVPROC __glewMultiTexCoord4hNV = NULL; -PFNGLMULTITEXCOORD4HVNVPROC __glewMultiTexCoord4hvNV = NULL; -PFNGLNORMAL3HNVPROC __glewNormal3hNV = NULL; -PFNGLNORMAL3HVNVPROC __glewNormal3hvNV = NULL; -PFNGLSECONDARYCOLOR3HNVPROC __glewSecondaryColor3hNV = NULL; -PFNGLSECONDARYCOLOR3HVNVPROC __glewSecondaryColor3hvNV = NULL; -PFNGLTEXCOORD1HNVPROC __glewTexCoord1hNV = NULL; -PFNGLTEXCOORD1HVNVPROC __glewTexCoord1hvNV = NULL; -PFNGLTEXCOORD2HNVPROC __glewTexCoord2hNV = NULL; -PFNGLTEXCOORD2HVNVPROC __glewTexCoord2hvNV = NULL; -PFNGLTEXCOORD3HNVPROC __glewTexCoord3hNV = NULL; -PFNGLTEXCOORD3HVNVPROC __glewTexCoord3hvNV = NULL; -PFNGLTEXCOORD4HNVPROC __glewTexCoord4hNV = NULL; -PFNGLTEXCOORD4HVNVPROC __glewTexCoord4hvNV = NULL; -PFNGLVERTEX2HNVPROC __glewVertex2hNV = NULL; -PFNGLVERTEX2HVNVPROC __glewVertex2hvNV = NULL; -PFNGLVERTEX3HNVPROC __glewVertex3hNV = NULL; -PFNGLVERTEX3HVNVPROC __glewVertex3hvNV = NULL; -PFNGLVERTEX4HNVPROC __glewVertex4hNV = NULL; -PFNGLVERTEX4HVNVPROC __glewVertex4hvNV = NULL; -PFNGLVERTEXATTRIB1HNVPROC __glewVertexAttrib1hNV = NULL; -PFNGLVERTEXATTRIB1HVNVPROC __glewVertexAttrib1hvNV = NULL; -PFNGLVERTEXATTRIB2HNVPROC __glewVertexAttrib2hNV = NULL; -PFNGLVERTEXATTRIB2HVNVPROC __glewVertexAttrib2hvNV = NULL; -PFNGLVERTEXATTRIB3HNVPROC __glewVertexAttrib3hNV = NULL; -PFNGLVERTEXATTRIB3HVNVPROC __glewVertexAttrib3hvNV = NULL; -PFNGLVERTEXATTRIB4HNVPROC __glewVertexAttrib4hNV = NULL; -PFNGLVERTEXATTRIB4HVNVPROC __glewVertexAttrib4hvNV = NULL; -PFNGLVERTEXATTRIBS1HVNVPROC __glewVertexAttribs1hvNV = NULL; -PFNGLVERTEXATTRIBS2HVNVPROC __glewVertexAttribs2hvNV = NULL; -PFNGLVERTEXATTRIBS3HVNVPROC __glewVertexAttribs3hvNV = NULL; -PFNGLVERTEXATTRIBS4HVNVPROC __glewVertexAttribs4hvNV = NULL; -PFNGLVERTEXWEIGHTHNVPROC __glewVertexWeighthNV = NULL; -PFNGLVERTEXWEIGHTHVNVPROC __glewVertexWeighthvNV = NULL; - -PFNGLBEGINOCCLUSIONQUERYNVPROC __glewBeginOcclusionQueryNV = NULL; -PFNGLDELETEOCCLUSIONQUERIESNVPROC __glewDeleteOcclusionQueriesNV = NULL; -PFNGLENDOCCLUSIONQUERYNVPROC __glewEndOcclusionQueryNV = NULL; -PFNGLGENOCCLUSIONQUERIESNVPROC __glewGenOcclusionQueriesNV = NULL; -PFNGLGETOCCLUSIONQUERYIVNVPROC __glewGetOcclusionQueryivNV = NULL; -PFNGLGETOCCLUSIONQUERYUIVNVPROC __glewGetOcclusionQueryuivNV = NULL; -PFNGLISOCCLUSIONQUERYNVPROC __glewIsOcclusionQueryNV = NULL; - -PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC __glewProgramBufferParametersIivNV = NULL; -PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC __glewProgramBufferParametersIuivNV = NULL; -PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC __glewProgramBufferParametersfvNV = NULL; - -PFNGLCOPYPATHNVPROC __glewCopyPathNV = NULL; -PFNGLCOVERFILLPATHINSTANCEDNVPROC __glewCoverFillPathInstancedNV = NULL; -PFNGLCOVERFILLPATHNVPROC __glewCoverFillPathNV = NULL; -PFNGLCOVERSTROKEPATHINSTANCEDNVPROC __glewCoverStrokePathInstancedNV = NULL; -PFNGLCOVERSTROKEPATHNVPROC __glewCoverStrokePathNV = NULL; -PFNGLDELETEPATHSNVPROC __glewDeletePathsNV = NULL; -PFNGLGENPATHSNVPROC __glewGenPathsNV = NULL; -PFNGLGETPATHCOLORGENFVNVPROC __glewGetPathColorGenfvNV = NULL; -PFNGLGETPATHCOLORGENIVNVPROC __glewGetPathColorGenivNV = NULL; -PFNGLGETPATHCOMMANDSNVPROC __glewGetPathCommandsNV = NULL; -PFNGLGETPATHCOORDSNVPROC __glewGetPathCoordsNV = NULL; -PFNGLGETPATHDASHARRAYNVPROC __glewGetPathDashArrayNV = NULL; -PFNGLGETPATHLENGTHNVPROC __glewGetPathLengthNV = NULL; -PFNGLGETPATHMETRICRANGENVPROC __glewGetPathMetricRangeNV = NULL; -PFNGLGETPATHMETRICSNVPROC __glewGetPathMetricsNV = NULL; -PFNGLGETPATHPARAMETERFVNVPROC __glewGetPathParameterfvNV = NULL; -PFNGLGETPATHPARAMETERIVNVPROC __glewGetPathParameterivNV = NULL; -PFNGLGETPATHSPACINGNVPROC __glewGetPathSpacingNV = NULL; -PFNGLGETPATHTEXGENFVNVPROC __glewGetPathTexGenfvNV = NULL; -PFNGLGETPATHTEXGENIVNVPROC __glewGetPathTexGenivNV = NULL; -PFNGLINTERPOLATEPATHSNVPROC __glewInterpolatePathsNV = NULL; -PFNGLISPATHNVPROC __glewIsPathNV = NULL; -PFNGLISPOINTINFILLPATHNVPROC __glewIsPointInFillPathNV = NULL; -PFNGLISPOINTINSTROKEPATHNVPROC __glewIsPointInStrokePathNV = NULL; -PFNGLPATHCOLORGENNVPROC __glewPathColorGenNV = NULL; -PFNGLPATHCOMMANDSNVPROC __glewPathCommandsNV = NULL; -PFNGLPATHCOORDSNVPROC __glewPathCoordsNV = NULL; -PFNGLPATHCOVERDEPTHFUNCNVPROC __glewPathCoverDepthFuncNV = NULL; -PFNGLPATHDASHARRAYNVPROC __glewPathDashArrayNV = NULL; -PFNGLPATHFOGGENNVPROC __glewPathFogGenNV = NULL; -PFNGLPATHGLYPHRANGENVPROC __glewPathGlyphRangeNV = NULL; -PFNGLPATHGLYPHSNVPROC __glewPathGlyphsNV = NULL; -PFNGLPATHPARAMETERFNVPROC __glewPathParameterfNV = NULL; -PFNGLPATHPARAMETERFVNVPROC __glewPathParameterfvNV = NULL; -PFNGLPATHPARAMETERINVPROC __glewPathParameteriNV = NULL; -PFNGLPATHPARAMETERIVNVPROC __glewPathParameterivNV = NULL; -PFNGLPATHSTENCILDEPTHOFFSETNVPROC __glewPathStencilDepthOffsetNV = NULL; -PFNGLPATHSTENCILFUNCNVPROC __glewPathStencilFuncNV = NULL; -PFNGLPATHSTRINGNVPROC __glewPathStringNV = NULL; -PFNGLPATHSUBCOMMANDSNVPROC __glewPathSubCommandsNV = NULL; -PFNGLPATHSUBCOORDSNVPROC __glewPathSubCoordsNV = NULL; -PFNGLPATHTEXGENNVPROC __glewPathTexGenNV = NULL; -PFNGLPOINTALONGPATHNVPROC __glewPointAlongPathNV = NULL; -PFNGLSTENCILFILLPATHINSTANCEDNVPROC __glewStencilFillPathInstancedNV = NULL; -PFNGLSTENCILFILLPATHNVPROC __glewStencilFillPathNV = NULL; -PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC __glewStencilStrokePathInstancedNV = NULL; -PFNGLSTENCILSTROKEPATHNVPROC __glewStencilStrokePathNV = NULL; -PFNGLTRANSFORMPATHNVPROC __glewTransformPathNV = NULL; -PFNGLWEIGHTPATHSNVPROC __glewWeightPathsNV = NULL; - -PFNGLFLUSHPIXELDATARANGENVPROC __glewFlushPixelDataRangeNV = NULL; -PFNGLPIXELDATARANGENVPROC __glewPixelDataRangeNV = NULL; - -PFNGLPOINTPARAMETERINVPROC __glewPointParameteriNV = NULL; -PFNGLPOINTPARAMETERIVNVPROC __glewPointParameterivNV = NULL; - -PFNGLGETVIDEOI64VNVPROC __glewGetVideoi64vNV = NULL; -PFNGLGETVIDEOIVNVPROC __glewGetVideoivNV = NULL; -PFNGLGETVIDEOUI64VNVPROC __glewGetVideoui64vNV = NULL; -PFNGLGETVIDEOUIVNVPROC __glewGetVideouivNV = NULL; -PFNGLPRESENTFRAMEDUALFILLNVPROC __glewPresentFrameDualFillNV = NULL; -PFNGLPRESENTFRAMEKEYEDNVPROC __glewPresentFrameKeyedNV = NULL; - -PFNGLPRIMITIVERESTARTINDEXNVPROC __glewPrimitiveRestartIndexNV = NULL; -PFNGLPRIMITIVERESTARTNVPROC __glewPrimitiveRestartNV = NULL; - -PFNGLCOMBINERINPUTNVPROC __glewCombinerInputNV = NULL; -PFNGLCOMBINEROUTPUTNVPROC __glewCombinerOutputNV = NULL; -PFNGLCOMBINERPARAMETERFNVPROC __glewCombinerParameterfNV = NULL; -PFNGLCOMBINERPARAMETERFVNVPROC __glewCombinerParameterfvNV = NULL; -PFNGLCOMBINERPARAMETERINVPROC __glewCombinerParameteriNV = NULL; -PFNGLCOMBINERPARAMETERIVNVPROC __glewCombinerParameterivNV = NULL; -PFNGLFINALCOMBINERINPUTNVPROC __glewFinalCombinerInputNV = NULL; -PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC __glewGetCombinerInputParameterfvNV = NULL; -PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC __glewGetCombinerInputParameterivNV = NULL; -PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC __glewGetCombinerOutputParameterfvNV = NULL; -PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC __glewGetCombinerOutputParameterivNV = NULL; -PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC __glewGetFinalCombinerInputParameterfvNV = NULL; -PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC __glewGetFinalCombinerInputParameterivNV = NULL; - -PFNGLCOMBINERSTAGEPARAMETERFVNVPROC __glewCombinerStageParameterfvNV = NULL; -PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC __glewGetCombinerStageParameterfvNV = NULL; - -PFNGLGETBUFFERPARAMETERUI64VNVPROC __glewGetBufferParameterui64vNV = NULL; -PFNGLGETINTEGERUI64VNVPROC __glewGetIntegerui64vNV = NULL; -PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC __glewGetNamedBufferParameterui64vNV = NULL; -PFNGLISBUFFERRESIDENTNVPROC __glewIsBufferResidentNV = NULL; -PFNGLISNAMEDBUFFERRESIDENTNVPROC __glewIsNamedBufferResidentNV = NULL; -PFNGLMAKEBUFFERNONRESIDENTNVPROC __glewMakeBufferNonResidentNV = NULL; -PFNGLMAKEBUFFERRESIDENTNVPROC __glewMakeBufferResidentNV = NULL; -PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC __glewMakeNamedBufferNonResidentNV = NULL; -PFNGLMAKENAMEDBUFFERRESIDENTNVPROC __glewMakeNamedBufferResidentNV = NULL; -PFNGLPROGRAMUNIFORMUI64NVPROC __glewProgramUniformui64NV = NULL; -PFNGLPROGRAMUNIFORMUI64VNVPROC __glewProgramUniformui64vNV = NULL; -PFNGLUNIFORMUI64NVPROC __glewUniformui64NV = NULL; -PFNGLUNIFORMUI64VNVPROC __glewUniformui64vNV = NULL; - -PFNGLTEXTUREBARRIERNVPROC __glewTextureBarrierNV = NULL; - -PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTexImage2DMultisampleCoverageNV = NULL; -PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTexImage3DMultisampleCoverageNV = NULL; -PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC __glewTextureImage2DMultisampleCoverageNV = NULL; -PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC __glewTextureImage2DMultisampleNV = NULL; -PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC __glewTextureImage3DMultisampleCoverageNV = NULL; -PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC __glewTextureImage3DMultisampleNV = NULL; - -PFNGLACTIVEVARYINGNVPROC __glewActiveVaryingNV = NULL; -PFNGLBEGINTRANSFORMFEEDBACKNVPROC __glewBeginTransformFeedbackNV = NULL; -PFNGLBINDBUFFERBASENVPROC __glewBindBufferBaseNV = NULL; -PFNGLBINDBUFFEROFFSETNVPROC __glewBindBufferOffsetNV = NULL; -PFNGLBINDBUFFERRANGENVPROC __glewBindBufferRangeNV = NULL; -PFNGLENDTRANSFORMFEEDBACKNVPROC __glewEndTransformFeedbackNV = NULL; -PFNGLGETACTIVEVARYINGNVPROC __glewGetActiveVaryingNV = NULL; -PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC __glewGetTransformFeedbackVaryingNV = NULL; -PFNGLGETVARYINGLOCATIONNVPROC __glewGetVaryingLocationNV = NULL; -PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC __glewTransformFeedbackAttribsNV = NULL; -PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC __glewTransformFeedbackVaryingsNV = NULL; - -PFNGLBINDTRANSFORMFEEDBACKNVPROC __glewBindTransformFeedbackNV = NULL; -PFNGLDELETETRANSFORMFEEDBACKSNVPROC __glewDeleteTransformFeedbacksNV = NULL; -PFNGLDRAWTRANSFORMFEEDBACKNVPROC __glewDrawTransformFeedbackNV = NULL; -PFNGLGENTRANSFORMFEEDBACKSNVPROC __glewGenTransformFeedbacksNV = NULL; -PFNGLISTRANSFORMFEEDBACKNVPROC __glewIsTransformFeedbackNV = NULL; -PFNGLPAUSETRANSFORMFEEDBACKNVPROC __glewPauseTransformFeedbackNV = NULL; -PFNGLRESUMETRANSFORMFEEDBACKNVPROC __glewResumeTransformFeedbackNV = NULL; - -PFNGLVDPAUFININVPROC __glewVDPAUFiniNV = NULL; -PFNGLVDPAUGETSURFACEIVNVPROC __glewVDPAUGetSurfaceivNV = NULL; -PFNGLVDPAUINITNVPROC __glewVDPAUInitNV = NULL; -PFNGLVDPAUISSURFACENVPROC __glewVDPAUIsSurfaceNV = NULL; -PFNGLVDPAUMAPSURFACESNVPROC __glewVDPAUMapSurfacesNV = NULL; -PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC __glewVDPAURegisterOutputSurfaceNV = NULL; -PFNGLVDPAUREGISTERVIDEOSURFACENVPROC __glewVDPAURegisterVideoSurfaceNV = NULL; -PFNGLVDPAUSURFACEACCESSNVPROC __glewVDPAUSurfaceAccessNV = NULL; -PFNGLVDPAUUNMAPSURFACESNVPROC __glewVDPAUUnmapSurfacesNV = NULL; -PFNGLVDPAUUNREGISTERSURFACENVPROC __glewVDPAUUnregisterSurfaceNV = NULL; - -PFNGLFLUSHVERTEXARRAYRANGENVPROC __glewFlushVertexArrayRangeNV = NULL; -PFNGLVERTEXARRAYRANGENVPROC __glewVertexArrayRangeNV = NULL; - -PFNGLGETVERTEXATTRIBLI64VNVPROC __glewGetVertexAttribLi64vNV = NULL; -PFNGLGETVERTEXATTRIBLUI64VNVPROC __glewGetVertexAttribLui64vNV = NULL; -PFNGLVERTEXATTRIBL1I64NVPROC __glewVertexAttribL1i64NV = NULL; -PFNGLVERTEXATTRIBL1I64VNVPROC __glewVertexAttribL1i64vNV = NULL; -PFNGLVERTEXATTRIBL1UI64NVPROC __glewVertexAttribL1ui64NV = NULL; -PFNGLVERTEXATTRIBL1UI64VNVPROC __glewVertexAttribL1ui64vNV = NULL; -PFNGLVERTEXATTRIBL2I64NVPROC __glewVertexAttribL2i64NV = NULL; -PFNGLVERTEXATTRIBL2I64VNVPROC __glewVertexAttribL2i64vNV = NULL; -PFNGLVERTEXATTRIBL2UI64NVPROC __glewVertexAttribL2ui64NV = NULL; -PFNGLVERTEXATTRIBL2UI64VNVPROC __glewVertexAttribL2ui64vNV = NULL; -PFNGLVERTEXATTRIBL3I64NVPROC __glewVertexAttribL3i64NV = NULL; -PFNGLVERTEXATTRIBL3I64VNVPROC __glewVertexAttribL3i64vNV = NULL; -PFNGLVERTEXATTRIBL3UI64NVPROC __glewVertexAttribL3ui64NV = NULL; -PFNGLVERTEXATTRIBL3UI64VNVPROC __glewVertexAttribL3ui64vNV = NULL; -PFNGLVERTEXATTRIBL4I64NVPROC __glewVertexAttribL4i64NV = NULL; -PFNGLVERTEXATTRIBL4I64VNVPROC __glewVertexAttribL4i64vNV = NULL; -PFNGLVERTEXATTRIBL4UI64NVPROC __glewVertexAttribL4ui64NV = NULL; -PFNGLVERTEXATTRIBL4UI64VNVPROC __glewVertexAttribL4ui64vNV = NULL; -PFNGLVERTEXATTRIBLFORMATNVPROC __glewVertexAttribLFormatNV = NULL; - -PFNGLBUFFERADDRESSRANGENVPROC __glewBufferAddressRangeNV = NULL; -PFNGLCOLORFORMATNVPROC __glewColorFormatNV = NULL; -PFNGLEDGEFLAGFORMATNVPROC __glewEdgeFlagFormatNV = NULL; -PFNGLFOGCOORDFORMATNVPROC __glewFogCoordFormatNV = NULL; -PFNGLGETINTEGERUI64I_VNVPROC __glewGetIntegerui64i_vNV = NULL; -PFNGLINDEXFORMATNVPROC __glewIndexFormatNV = NULL; -PFNGLNORMALFORMATNVPROC __glewNormalFormatNV = NULL; -PFNGLSECONDARYCOLORFORMATNVPROC __glewSecondaryColorFormatNV = NULL; -PFNGLTEXCOORDFORMATNVPROC __glewTexCoordFormatNV = NULL; -PFNGLVERTEXATTRIBFORMATNVPROC __glewVertexAttribFormatNV = NULL; -PFNGLVERTEXATTRIBIFORMATNVPROC __glewVertexAttribIFormatNV = NULL; -PFNGLVERTEXFORMATNVPROC __glewVertexFormatNV = NULL; - -PFNGLAREPROGRAMSRESIDENTNVPROC __glewAreProgramsResidentNV = NULL; -PFNGLBINDPROGRAMNVPROC __glewBindProgramNV = NULL; -PFNGLDELETEPROGRAMSNVPROC __glewDeleteProgramsNV = NULL; -PFNGLEXECUTEPROGRAMNVPROC __glewExecuteProgramNV = NULL; -PFNGLGENPROGRAMSNVPROC __glewGenProgramsNV = NULL; -PFNGLGETPROGRAMPARAMETERDVNVPROC __glewGetProgramParameterdvNV = NULL; -PFNGLGETPROGRAMPARAMETERFVNVPROC __glewGetProgramParameterfvNV = NULL; -PFNGLGETPROGRAMSTRINGNVPROC __glewGetProgramStringNV = NULL; -PFNGLGETPROGRAMIVNVPROC __glewGetProgramivNV = NULL; -PFNGLGETTRACKMATRIXIVNVPROC __glewGetTrackMatrixivNV = NULL; -PFNGLGETVERTEXATTRIBPOINTERVNVPROC __glewGetVertexAttribPointervNV = NULL; -PFNGLGETVERTEXATTRIBDVNVPROC __glewGetVertexAttribdvNV = NULL; -PFNGLGETVERTEXATTRIBFVNVPROC __glewGetVertexAttribfvNV = NULL; -PFNGLGETVERTEXATTRIBIVNVPROC __glewGetVertexAttribivNV = NULL; -PFNGLISPROGRAMNVPROC __glewIsProgramNV = NULL; -PFNGLLOADPROGRAMNVPROC __glewLoadProgramNV = NULL; -PFNGLPROGRAMPARAMETER4DNVPROC __glewProgramParameter4dNV = NULL; -PFNGLPROGRAMPARAMETER4DVNVPROC __glewProgramParameter4dvNV = NULL; -PFNGLPROGRAMPARAMETER4FNVPROC __glewProgramParameter4fNV = NULL; -PFNGLPROGRAMPARAMETER4FVNVPROC __glewProgramParameter4fvNV = NULL; -PFNGLPROGRAMPARAMETERS4DVNVPROC __glewProgramParameters4dvNV = NULL; -PFNGLPROGRAMPARAMETERS4FVNVPROC __glewProgramParameters4fvNV = NULL; -PFNGLREQUESTRESIDENTPROGRAMSNVPROC __glewRequestResidentProgramsNV = NULL; -PFNGLTRACKMATRIXNVPROC __glewTrackMatrixNV = NULL; -PFNGLVERTEXATTRIB1DNVPROC __glewVertexAttrib1dNV = NULL; -PFNGLVERTEXATTRIB1DVNVPROC __glewVertexAttrib1dvNV = NULL; -PFNGLVERTEXATTRIB1FNVPROC __glewVertexAttrib1fNV = NULL; -PFNGLVERTEXATTRIB1FVNVPROC __glewVertexAttrib1fvNV = NULL; -PFNGLVERTEXATTRIB1SNVPROC __glewVertexAttrib1sNV = NULL; -PFNGLVERTEXATTRIB1SVNVPROC __glewVertexAttrib1svNV = NULL; -PFNGLVERTEXATTRIB2DNVPROC __glewVertexAttrib2dNV = NULL; -PFNGLVERTEXATTRIB2DVNVPROC __glewVertexAttrib2dvNV = NULL; -PFNGLVERTEXATTRIB2FNVPROC __glewVertexAttrib2fNV = NULL; -PFNGLVERTEXATTRIB2FVNVPROC __glewVertexAttrib2fvNV = NULL; -PFNGLVERTEXATTRIB2SNVPROC __glewVertexAttrib2sNV = NULL; -PFNGLVERTEXATTRIB2SVNVPROC __glewVertexAttrib2svNV = NULL; -PFNGLVERTEXATTRIB3DNVPROC __glewVertexAttrib3dNV = NULL; -PFNGLVERTEXATTRIB3DVNVPROC __glewVertexAttrib3dvNV = NULL; -PFNGLVERTEXATTRIB3FNVPROC __glewVertexAttrib3fNV = NULL; -PFNGLVERTEXATTRIB3FVNVPROC __glewVertexAttrib3fvNV = NULL; -PFNGLVERTEXATTRIB3SNVPROC __glewVertexAttrib3sNV = NULL; -PFNGLVERTEXATTRIB3SVNVPROC __glewVertexAttrib3svNV = NULL; -PFNGLVERTEXATTRIB4DNVPROC __glewVertexAttrib4dNV = NULL; -PFNGLVERTEXATTRIB4DVNVPROC __glewVertexAttrib4dvNV = NULL; -PFNGLVERTEXATTRIB4FNVPROC __glewVertexAttrib4fNV = NULL; -PFNGLVERTEXATTRIB4FVNVPROC __glewVertexAttrib4fvNV = NULL; -PFNGLVERTEXATTRIB4SNVPROC __glewVertexAttrib4sNV = NULL; -PFNGLVERTEXATTRIB4SVNVPROC __glewVertexAttrib4svNV = NULL; -PFNGLVERTEXATTRIB4UBNVPROC __glewVertexAttrib4ubNV = NULL; -PFNGLVERTEXATTRIB4UBVNVPROC __glewVertexAttrib4ubvNV = NULL; -PFNGLVERTEXATTRIBPOINTERNVPROC __glewVertexAttribPointerNV = NULL; -PFNGLVERTEXATTRIBS1DVNVPROC __glewVertexAttribs1dvNV = NULL; -PFNGLVERTEXATTRIBS1FVNVPROC __glewVertexAttribs1fvNV = NULL; -PFNGLVERTEXATTRIBS1SVNVPROC __glewVertexAttribs1svNV = NULL; -PFNGLVERTEXATTRIBS2DVNVPROC __glewVertexAttribs2dvNV = NULL; -PFNGLVERTEXATTRIBS2FVNVPROC __glewVertexAttribs2fvNV = NULL; -PFNGLVERTEXATTRIBS2SVNVPROC __glewVertexAttribs2svNV = NULL; -PFNGLVERTEXATTRIBS3DVNVPROC __glewVertexAttribs3dvNV = NULL; -PFNGLVERTEXATTRIBS3FVNVPROC __glewVertexAttribs3fvNV = NULL; -PFNGLVERTEXATTRIBS3SVNVPROC __glewVertexAttribs3svNV = NULL; -PFNGLVERTEXATTRIBS4DVNVPROC __glewVertexAttribs4dvNV = NULL; -PFNGLVERTEXATTRIBS4FVNVPROC __glewVertexAttribs4fvNV = NULL; -PFNGLVERTEXATTRIBS4SVNVPROC __glewVertexAttribs4svNV = NULL; -PFNGLVERTEXATTRIBS4UBVNVPROC __glewVertexAttribs4ubvNV = NULL; - -PFNGLBEGINVIDEOCAPTURENVPROC __glewBeginVideoCaptureNV = NULL; -PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC __glewBindVideoCaptureStreamBufferNV = NULL; -PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC __glewBindVideoCaptureStreamTextureNV = NULL; -PFNGLENDVIDEOCAPTURENVPROC __glewEndVideoCaptureNV = NULL; -PFNGLGETVIDEOCAPTURESTREAMDVNVPROC __glewGetVideoCaptureStreamdvNV = NULL; -PFNGLGETVIDEOCAPTURESTREAMFVNVPROC __glewGetVideoCaptureStreamfvNV = NULL; -PFNGLGETVIDEOCAPTURESTREAMIVNVPROC __glewGetVideoCaptureStreamivNV = NULL; -PFNGLGETVIDEOCAPTUREIVNVPROC __glewGetVideoCaptureivNV = NULL; -PFNGLVIDEOCAPTURENVPROC __glewVideoCaptureNV = NULL; -PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC __glewVideoCaptureStreamParameterdvNV = NULL; -PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC __glewVideoCaptureStreamParameterfvNV = NULL; -PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC __glewVideoCaptureStreamParameterivNV = NULL; - -PFNGLCLEARDEPTHFOESPROC __glewClearDepthfOES = NULL; -PFNGLCLIPPLANEFOESPROC __glewClipPlanefOES = NULL; -PFNGLDEPTHRANGEFOESPROC __glewDepthRangefOES = NULL; -PFNGLFRUSTUMFOESPROC __glewFrustumfOES = NULL; -PFNGLGETCLIPPLANEFOESPROC __glewGetClipPlanefOES = NULL; -PFNGLORTHOFOESPROC __glewOrthofOES = NULL; - -PFNGLALPHAFUNCXPROC __glewAlphaFuncx = NULL; -PFNGLCLEARCOLORXPROC __glewClearColorx = NULL; -PFNGLCLEARDEPTHXPROC __glewClearDepthx = NULL; -PFNGLCOLOR4XPROC __glewColor4x = NULL; -PFNGLDEPTHRANGEXPROC __glewDepthRangex = NULL; -PFNGLFOGXPROC __glewFogx = NULL; -PFNGLFOGXVPROC __glewFogxv = NULL; -PFNGLFRUSTUMFPROC __glewFrustumf = NULL; -PFNGLFRUSTUMXPROC __glewFrustumx = NULL; -PFNGLLIGHTMODELXPROC __glewLightModelx = NULL; -PFNGLLIGHTMODELXVPROC __glewLightModelxv = NULL; -PFNGLLIGHTXPROC __glewLightx = NULL; -PFNGLLIGHTXVPROC __glewLightxv = NULL; -PFNGLLINEWIDTHXPROC __glewLineWidthx = NULL; -PFNGLLOADMATRIXXPROC __glewLoadMatrixx = NULL; -PFNGLMATERIALXPROC __glewMaterialx = NULL; -PFNGLMATERIALXVPROC __glewMaterialxv = NULL; -PFNGLMULTMATRIXXPROC __glewMultMatrixx = NULL; -PFNGLMULTITEXCOORD4XPROC __glewMultiTexCoord4x = NULL; -PFNGLNORMAL3XPROC __glewNormal3x = NULL; -PFNGLORTHOFPROC __glewOrthof = NULL; -PFNGLORTHOXPROC __glewOrthox = NULL; -PFNGLPOINTSIZEXPROC __glewPointSizex = NULL; -PFNGLPOLYGONOFFSETXPROC __glewPolygonOffsetx = NULL; -PFNGLROTATEXPROC __glewRotatex = NULL; -PFNGLSAMPLECOVERAGEXPROC __glewSampleCoveragex = NULL; -PFNGLSCALEXPROC __glewScalex = NULL; -PFNGLTEXENVXPROC __glewTexEnvx = NULL; -PFNGLTEXENVXVPROC __glewTexEnvxv = NULL; -PFNGLTEXPARAMETERXPROC __glewTexParameterx = NULL; -PFNGLTRANSLATEXPROC __glewTranslatex = NULL; - -PFNGLCLIPPLANEFPROC __glewClipPlanef = NULL; -PFNGLCLIPPLANEXPROC __glewClipPlanex = NULL; -PFNGLGETCLIPPLANEFPROC __glewGetClipPlanef = NULL; -PFNGLGETCLIPPLANEXPROC __glewGetClipPlanex = NULL; -PFNGLGETFIXEDVPROC __glewGetFixedv = NULL; -PFNGLGETLIGHTXVPROC __glewGetLightxv = NULL; -PFNGLGETMATERIALXVPROC __glewGetMaterialxv = NULL; -PFNGLGETTEXENVXVPROC __glewGetTexEnvxv = NULL; -PFNGLGETTEXPARAMETERXVPROC __glewGetTexParameterxv = NULL; -PFNGLPOINTPARAMETERXPROC __glewPointParameterx = NULL; -PFNGLPOINTPARAMETERXVPROC __glewPointParameterxv = NULL; -PFNGLPOINTSIZEPOINTEROESPROC __glewPointSizePointerOES = NULL; -PFNGLTEXPARAMETERXVPROC __glewTexParameterxv = NULL; - -PFNGLERRORSTRINGREGALPROC __glewErrorStringREGAL = NULL; - -PFNGLGETEXTENSIONREGALPROC __glewGetExtensionREGAL = NULL; -PFNGLISSUPPORTEDREGALPROC __glewIsSupportedREGAL = NULL; - -PFNGLLOGMESSAGECALLBACKREGALPROC __glewLogMessageCallbackREGAL = NULL; - -PFNGLDETAILTEXFUNCSGISPROC __glewDetailTexFuncSGIS = NULL; -PFNGLGETDETAILTEXFUNCSGISPROC __glewGetDetailTexFuncSGIS = NULL; - -PFNGLFOGFUNCSGISPROC __glewFogFuncSGIS = NULL; -PFNGLGETFOGFUNCSGISPROC __glewGetFogFuncSGIS = NULL; - -PFNGLSAMPLEMASKSGISPROC __glewSampleMaskSGIS = NULL; -PFNGLSAMPLEPATTERNSGISPROC __glewSamplePatternSGIS = NULL; - -PFNGLGETSHARPENTEXFUNCSGISPROC __glewGetSharpenTexFuncSGIS = NULL; -PFNGLSHARPENTEXFUNCSGISPROC __glewSharpenTexFuncSGIS = NULL; - -PFNGLTEXIMAGE4DSGISPROC __glewTexImage4DSGIS = NULL; -PFNGLTEXSUBIMAGE4DSGISPROC __glewTexSubImage4DSGIS = NULL; - -PFNGLGETTEXFILTERFUNCSGISPROC __glewGetTexFilterFuncSGIS = NULL; -PFNGLTEXFILTERFUNCSGISPROC __glewTexFilterFuncSGIS = NULL; - -PFNGLASYNCMARKERSGIXPROC __glewAsyncMarkerSGIX = NULL; -PFNGLDELETEASYNCMARKERSSGIXPROC __glewDeleteAsyncMarkersSGIX = NULL; -PFNGLFINISHASYNCSGIXPROC __glewFinishAsyncSGIX = NULL; -PFNGLGENASYNCMARKERSSGIXPROC __glewGenAsyncMarkersSGIX = NULL; -PFNGLISASYNCMARKERSGIXPROC __glewIsAsyncMarkerSGIX = NULL; -PFNGLPOLLASYNCSGIXPROC __glewPollAsyncSGIX = NULL; - -PFNGLFLUSHRASTERSGIXPROC __glewFlushRasterSGIX = NULL; - -PFNGLTEXTUREFOGSGIXPROC __glewTextureFogSGIX = NULL; - -PFNGLFRAGMENTCOLORMATERIALSGIXPROC __glewFragmentColorMaterialSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELFSGIXPROC __glewFragmentLightModelfSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELFVSGIXPROC __glewFragmentLightModelfvSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELISGIXPROC __glewFragmentLightModeliSGIX = NULL; -PFNGLFRAGMENTLIGHTMODELIVSGIXPROC __glewFragmentLightModelivSGIX = NULL; -PFNGLFRAGMENTLIGHTFSGIXPROC __glewFragmentLightfSGIX = NULL; -PFNGLFRAGMENTLIGHTFVSGIXPROC __glewFragmentLightfvSGIX = NULL; -PFNGLFRAGMENTLIGHTISGIXPROC __glewFragmentLightiSGIX = NULL; -PFNGLFRAGMENTLIGHTIVSGIXPROC __glewFragmentLightivSGIX = NULL; -PFNGLFRAGMENTMATERIALFSGIXPROC __glewFragmentMaterialfSGIX = NULL; -PFNGLFRAGMENTMATERIALFVSGIXPROC __glewFragmentMaterialfvSGIX = NULL; -PFNGLFRAGMENTMATERIALISGIXPROC __glewFragmentMaterialiSGIX = NULL; -PFNGLFRAGMENTMATERIALIVSGIXPROC __glewFragmentMaterialivSGIX = NULL; -PFNGLGETFRAGMENTLIGHTFVSGIXPROC __glewGetFragmentLightfvSGIX = NULL; -PFNGLGETFRAGMENTLIGHTIVSGIXPROC __glewGetFragmentLightivSGIX = NULL; -PFNGLGETFRAGMENTMATERIALFVSGIXPROC __glewGetFragmentMaterialfvSGIX = NULL; -PFNGLGETFRAGMENTMATERIALIVSGIXPROC __glewGetFragmentMaterialivSGIX = NULL; - -PFNGLFRAMEZOOMSGIXPROC __glewFrameZoomSGIX = NULL; - -PFNGLPIXELTEXGENSGIXPROC __glewPixelTexGenSGIX = NULL; - -PFNGLREFERENCEPLANESGIXPROC __glewReferencePlaneSGIX = NULL; - -PFNGLSPRITEPARAMETERFSGIXPROC __glewSpriteParameterfSGIX = NULL; -PFNGLSPRITEPARAMETERFVSGIXPROC __glewSpriteParameterfvSGIX = NULL; -PFNGLSPRITEPARAMETERISGIXPROC __glewSpriteParameteriSGIX = NULL; -PFNGLSPRITEPARAMETERIVSGIXPROC __glewSpriteParameterivSGIX = NULL; - -PFNGLTAGSAMPLEBUFFERSGIXPROC __glewTagSampleBufferSGIX = NULL; - -PFNGLCOLORTABLEPARAMETERFVSGIPROC __glewColorTableParameterfvSGI = NULL; -PFNGLCOLORTABLEPARAMETERIVSGIPROC __glewColorTableParameterivSGI = NULL; -PFNGLCOLORTABLESGIPROC __glewColorTableSGI = NULL; -PFNGLCOPYCOLORTABLESGIPROC __glewCopyColorTableSGI = NULL; -PFNGLGETCOLORTABLEPARAMETERFVSGIPROC __glewGetColorTableParameterfvSGI = NULL; -PFNGLGETCOLORTABLEPARAMETERIVSGIPROC __glewGetColorTableParameterivSGI = NULL; -PFNGLGETCOLORTABLESGIPROC __glewGetColorTableSGI = NULL; - -PFNGLFINISHTEXTURESUNXPROC __glewFinishTextureSUNX = NULL; - -PFNGLGLOBALALPHAFACTORBSUNPROC __glewGlobalAlphaFactorbSUN = NULL; -PFNGLGLOBALALPHAFACTORDSUNPROC __glewGlobalAlphaFactordSUN = NULL; -PFNGLGLOBALALPHAFACTORFSUNPROC __glewGlobalAlphaFactorfSUN = NULL; -PFNGLGLOBALALPHAFACTORISUNPROC __glewGlobalAlphaFactoriSUN = NULL; -PFNGLGLOBALALPHAFACTORSSUNPROC __glewGlobalAlphaFactorsSUN = NULL; -PFNGLGLOBALALPHAFACTORUBSUNPROC __glewGlobalAlphaFactorubSUN = NULL; -PFNGLGLOBALALPHAFACTORUISUNPROC __glewGlobalAlphaFactoruiSUN = NULL; -PFNGLGLOBALALPHAFACTORUSSUNPROC __glewGlobalAlphaFactorusSUN = NULL; - -PFNGLREADVIDEOPIXELSSUNPROC __glewReadVideoPixelsSUN = NULL; - -PFNGLREPLACEMENTCODEPOINTERSUNPROC __glewReplacementCodePointerSUN = NULL; -PFNGLREPLACEMENTCODEUBSUNPROC __glewReplacementCodeubSUN = NULL; -PFNGLREPLACEMENTCODEUBVSUNPROC __glewReplacementCodeubvSUN = NULL; -PFNGLREPLACEMENTCODEUISUNPROC __glewReplacementCodeuiSUN = NULL; -PFNGLREPLACEMENTCODEUIVSUNPROC __glewReplacementCodeuivSUN = NULL; -PFNGLREPLACEMENTCODEUSSUNPROC __glewReplacementCodeusSUN = NULL; -PFNGLREPLACEMENTCODEUSVSUNPROC __glewReplacementCodeusvSUN = NULL; - -PFNGLCOLOR3FVERTEX3FSUNPROC __glewColor3fVertex3fSUN = NULL; -PFNGLCOLOR3FVERTEX3FVSUNPROC __glewColor3fVertex3fvSUN = NULL; -PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewColor4fNormal3fVertex3fSUN = NULL; -PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewColor4fNormal3fVertex3fvSUN = NULL; -PFNGLCOLOR4UBVERTEX2FSUNPROC __glewColor4ubVertex2fSUN = NULL; -PFNGLCOLOR4UBVERTEX2FVSUNPROC __glewColor4ubVertex2fvSUN = NULL; -PFNGLCOLOR4UBVERTEX3FSUNPROC __glewColor4ubVertex3fSUN = NULL; -PFNGLCOLOR4UBVERTEX3FVSUNPROC __glewColor4ubVertex3fvSUN = NULL; -PFNGLNORMAL3FVERTEX3FSUNPROC __glewNormal3fVertex3fSUN = NULL; -PFNGLNORMAL3FVERTEX3FVSUNPROC __glewNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC __glewReplacementCodeuiColor3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiColor4fNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC __glewReplacementCodeuiColor4ubVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC __glewReplacementCodeuiColor4ubVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC __glewReplacementCodeuiTexCoord2fVertex3fvSUN = NULL; -PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC __glewReplacementCodeuiVertex3fSUN = NULL; -PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC __glewReplacementCodeuiVertex3fvSUN = NULL; -PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC __glewTexCoord2fColor3fVertex3fSUN = NULL; -PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC __glewTexCoord2fColor3fVertex3fvSUN = NULL; -PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fSUN = NULL; -PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fColor4fNormal3fVertex3fvSUN = NULL; -PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC __glewTexCoord2fColor4ubVertex3fSUN = NULL; -PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC __glewTexCoord2fColor4ubVertex3fvSUN = NULL; -PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC __glewTexCoord2fNormal3fVertex3fSUN = NULL; -PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC __glewTexCoord2fNormal3fVertex3fvSUN = NULL; -PFNGLTEXCOORD2FVERTEX3FSUNPROC __glewTexCoord2fVertex3fSUN = NULL; -PFNGLTEXCOORD2FVERTEX3FVSUNPROC __glewTexCoord2fVertex3fvSUN = NULL; -PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fSUN = NULL; -PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC __glewTexCoord4fColor4fNormal3fVertex4fvSUN = NULL; -PFNGLTEXCOORD4FVERTEX4FSUNPROC __glewTexCoord4fVertex4fSUN = NULL; -PFNGLTEXCOORD4FVERTEX4FVSUNPROC __glewTexCoord4fVertex4fvSUN = NULL; - -PFNGLADDSWAPHINTRECTWINPROC __glewAddSwapHintRectWIN = NULL; - -#endif /* !WIN32 || !GLEW_MX */ - -#if !defined(GLEW_MX) - -GLboolean __GLEW_VERSION_1_1 = GL_FALSE; -GLboolean __GLEW_VERSION_1_2 = GL_FALSE; -GLboolean __GLEW_VERSION_1_2_1 = GL_FALSE; -GLboolean __GLEW_VERSION_1_3 = GL_FALSE; -GLboolean __GLEW_VERSION_1_4 = GL_FALSE; -GLboolean __GLEW_VERSION_1_5 = GL_FALSE; -GLboolean __GLEW_VERSION_2_0 = GL_FALSE; -GLboolean __GLEW_VERSION_2_1 = GL_FALSE; -GLboolean __GLEW_VERSION_3_0 = GL_FALSE; -GLboolean __GLEW_VERSION_3_1 = GL_FALSE; -GLboolean __GLEW_VERSION_3_2 = GL_FALSE; -GLboolean __GLEW_VERSION_3_3 = GL_FALSE; -GLboolean __GLEW_VERSION_4_0 = GL_FALSE; -GLboolean __GLEW_VERSION_4_1 = GL_FALSE; -GLboolean __GLEW_VERSION_4_2 = GL_FALSE; -GLboolean __GLEW_VERSION_4_3 = GL_FALSE; -GLboolean __GLEW_VERSION_4_4 = GL_FALSE; -GLboolean __GLEW_3DFX_multisample = GL_FALSE; -GLboolean __GLEW_3DFX_tbuffer = GL_FALSE; -GLboolean __GLEW_3DFX_texture_compression_FXT1 = GL_FALSE; -GLboolean __GLEW_AMD_blend_minmax_factor = GL_FALSE; -GLboolean __GLEW_AMD_conservative_depth = GL_FALSE; -GLboolean __GLEW_AMD_debug_output = GL_FALSE; -GLboolean __GLEW_AMD_depth_clamp_separate = GL_FALSE; -GLboolean __GLEW_AMD_draw_buffers_blend = GL_FALSE; -GLboolean __GLEW_AMD_interleaved_elements = GL_FALSE; -GLboolean __GLEW_AMD_multi_draw_indirect = GL_FALSE; -GLboolean __GLEW_AMD_name_gen_delete = GL_FALSE; -GLboolean __GLEW_AMD_performance_monitor = GL_FALSE; -GLboolean __GLEW_AMD_pinned_memory = GL_FALSE; -GLboolean __GLEW_AMD_query_buffer_object = GL_FALSE; -GLboolean __GLEW_AMD_sample_positions = GL_FALSE; -GLboolean __GLEW_AMD_seamless_cubemap_per_texture = GL_FALSE; -GLboolean __GLEW_AMD_shader_stencil_export = GL_FALSE; -GLboolean __GLEW_AMD_shader_trinary_minmax = GL_FALSE; -GLboolean __GLEW_AMD_sparse_texture = GL_FALSE; -GLboolean __GLEW_AMD_stencil_operation_extended = GL_FALSE; -GLboolean __GLEW_AMD_texture_texture4 = GL_FALSE; -GLboolean __GLEW_AMD_transform_feedback3_lines_triangles = GL_FALSE; -GLboolean __GLEW_AMD_vertex_shader_layer = GL_FALSE; -GLboolean __GLEW_AMD_vertex_shader_tessellator = GL_FALSE; -GLboolean __GLEW_AMD_vertex_shader_viewport_index = GL_FALSE; -GLboolean __GLEW_ANGLE_depth_texture = GL_FALSE; -GLboolean __GLEW_ANGLE_framebuffer_blit = GL_FALSE; -GLboolean __GLEW_ANGLE_framebuffer_multisample = GL_FALSE; -GLboolean __GLEW_ANGLE_instanced_arrays = GL_FALSE; -GLboolean __GLEW_ANGLE_pack_reverse_row_order = GL_FALSE; -GLboolean __GLEW_ANGLE_program_binary = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_compression_dxt1 = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_compression_dxt3 = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_compression_dxt5 = GL_FALSE; -GLboolean __GLEW_ANGLE_texture_usage = GL_FALSE; -GLboolean __GLEW_ANGLE_timer_query = GL_FALSE; -GLboolean __GLEW_ANGLE_translated_shader_source = GL_FALSE; -GLboolean __GLEW_APPLE_aux_depth_stencil = GL_FALSE; -GLboolean __GLEW_APPLE_client_storage = GL_FALSE; -GLboolean __GLEW_APPLE_element_array = GL_FALSE; -GLboolean __GLEW_APPLE_fence = GL_FALSE; -GLboolean __GLEW_APPLE_float_pixels = GL_FALSE; -GLboolean __GLEW_APPLE_flush_buffer_range = GL_FALSE; -GLboolean __GLEW_APPLE_object_purgeable = GL_FALSE; -GLboolean __GLEW_APPLE_pixel_buffer = GL_FALSE; -GLboolean __GLEW_APPLE_rgb_422 = GL_FALSE; -GLboolean __GLEW_APPLE_row_bytes = GL_FALSE; -GLboolean __GLEW_APPLE_specular_vector = GL_FALSE; -GLboolean __GLEW_APPLE_texture_range = GL_FALSE; -GLboolean __GLEW_APPLE_transform_hint = GL_FALSE; -GLboolean __GLEW_APPLE_vertex_array_object = GL_FALSE; -GLboolean __GLEW_APPLE_vertex_array_range = GL_FALSE; -GLboolean __GLEW_APPLE_vertex_program_evaluators = GL_FALSE; -GLboolean __GLEW_APPLE_ycbcr_422 = GL_FALSE; -GLboolean __GLEW_ARB_ES2_compatibility = GL_FALSE; -GLboolean __GLEW_ARB_ES3_compatibility = GL_FALSE; -GLboolean __GLEW_ARB_arrays_of_arrays = GL_FALSE; -GLboolean __GLEW_ARB_base_instance = GL_FALSE; -GLboolean __GLEW_ARB_bindless_texture = GL_FALSE; -GLboolean __GLEW_ARB_blend_func_extended = GL_FALSE; -GLboolean __GLEW_ARB_buffer_storage = GL_FALSE; -GLboolean __GLEW_ARB_cl_event = GL_FALSE; -GLboolean __GLEW_ARB_clear_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_clear_texture = GL_FALSE; -GLboolean __GLEW_ARB_color_buffer_float = GL_FALSE; -GLboolean __GLEW_ARB_compatibility = GL_FALSE; -GLboolean __GLEW_ARB_compressed_texture_pixel_storage = GL_FALSE; -GLboolean __GLEW_ARB_compute_shader = GL_FALSE; -GLboolean __GLEW_ARB_compute_variable_group_size = GL_FALSE; -GLboolean __GLEW_ARB_conservative_depth = GL_FALSE; -GLboolean __GLEW_ARB_copy_buffer = GL_FALSE; -GLboolean __GLEW_ARB_copy_image = GL_FALSE; -GLboolean __GLEW_ARB_debug_output = GL_FALSE; -GLboolean __GLEW_ARB_depth_buffer_float = GL_FALSE; -GLboolean __GLEW_ARB_depth_clamp = GL_FALSE; -GLboolean __GLEW_ARB_depth_texture = GL_FALSE; -GLboolean __GLEW_ARB_draw_buffers = GL_FALSE; -GLboolean __GLEW_ARB_draw_buffers_blend = GL_FALSE; -GLboolean __GLEW_ARB_draw_elements_base_vertex = GL_FALSE; -GLboolean __GLEW_ARB_draw_indirect = GL_FALSE; -GLboolean __GLEW_ARB_draw_instanced = GL_FALSE; -GLboolean __GLEW_ARB_enhanced_layouts = GL_FALSE; -GLboolean __GLEW_ARB_explicit_attrib_location = GL_FALSE; -GLboolean __GLEW_ARB_explicit_uniform_location = GL_FALSE; -GLboolean __GLEW_ARB_fragment_coord_conventions = GL_FALSE; -GLboolean __GLEW_ARB_fragment_layer_viewport = GL_FALSE; -GLboolean __GLEW_ARB_fragment_program = GL_FALSE; -GLboolean __GLEW_ARB_fragment_program_shadow = GL_FALSE; -GLboolean __GLEW_ARB_fragment_shader = GL_FALSE; -GLboolean __GLEW_ARB_framebuffer_no_attachments = GL_FALSE; -GLboolean __GLEW_ARB_framebuffer_object = GL_FALSE; -GLboolean __GLEW_ARB_framebuffer_sRGB = GL_FALSE; -GLboolean __GLEW_ARB_geometry_shader4 = GL_FALSE; -GLboolean __GLEW_ARB_get_program_binary = GL_FALSE; -GLboolean __GLEW_ARB_gpu_shader5 = GL_FALSE; -GLboolean __GLEW_ARB_gpu_shader_fp64 = GL_FALSE; -GLboolean __GLEW_ARB_half_float_pixel = GL_FALSE; -GLboolean __GLEW_ARB_half_float_vertex = GL_FALSE; -GLboolean __GLEW_ARB_imaging = GL_FALSE; -GLboolean __GLEW_ARB_indirect_parameters = GL_FALSE; -GLboolean __GLEW_ARB_instanced_arrays = GL_FALSE; -GLboolean __GLEW_ARB_internalformat_query = GL_FALSE; -GLboolean __GLEW_ARB_internalformat_query2 = GL_FALSE; -GLboolean __GLEW_ARB_invalidate_subdata = GL_FALSE; -GLboolean __GLEW_ARB_map_buffer_alignment = GL_FALSE; -GLboolean __GLEW_ARB_map_buffer_range = GL_FALSE; -GLboolean __GLEW_ARB_matrix_palette = GL_FALSE; -GLboolean __GLEW_ARB_multi_bind = GL_FALSE; -GLboolean __GLEW_ARB_multi_draw_indirect = GL_FALSE; -GLboolean __GLEW_ARB_multisample = GL_FALSE; -GLboolean __GLEW_ARB_multitexture = GL_FALSE; -GLboolean __GLEW_ARB_occlusion_query = GL_FALSE; -GLboolean __GLEW_ARB_occlusion_query2 = GL_FALSE; -GLboolean __GLEW_ARB_pixel_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_point_parameters = GL_FALSE; -GLboolean __GLEW_ARB_point_sprite = GL_FALSE; -GLboolean __GLEW_ARB_program_interface_query = GL_FALSE; -GLboolean __GLEW_ARB_provoking_vertex = GL_FALSE; -GLboolean __GLEW_ARB_query_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_robust_buffer_access_behavior = GL_FALSE; -GLboolean __GLEW_ARB_robustness = GL_FALSE; -GLboolean __GLEW_ARB_robustness_application_isolation = GL_FALSE; -GLboolean __GLEW_ARB_robustness_share_group_isolation = GL_FALSE; -GLboolean __GLEW_ARB_sample_shading = GL_FALSE; -GLboolean __GLEW_ARB_sampler_objects = GL_FALSE; -GLboolean __GLEW_ARB_seamless_cube_map = GL_FALSE; -GLboolean __GLEW_ARB_seamless_cubemap_per_texture = GL_FALSE; -GLboolean __GLEW_ARB_separate_shader_objects = GL_FALSE; -GLboolean __GLEW_ARB_shader_atomic_counters = GL_FALSE; -GLboolean __GLEW_ARB_shader_bit_encoding = GL_FALSE; -GLboolean __GLEW_ARB_shader_draw_parameters = GL_FALSE; -GLboolean __GLEW_ARB_shader_group_vote = GL_FALSE; -GLboolean __GLEW_ARB_shader_image_load_store = GL_FALSE; -GLboolean __GLEW_ARB_shader_image_size = GL_FALSE; -GLboolean __GLEW_ARB_shader_objects = GL_FALSE; -GLboolean __GLEW_ARB_shader_precision = GL_FALSE; -GLboolean __GLEW_ARB_shader_stencil_export = GL_FALSE; -GLboolean __GLEW_ARB_shader_storage_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_shader_subroutine = GL_FALSE; -GLboolean __GLEW_ARB_shader_texture_lod = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_100 = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_420pack = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_include = GL_FALSE; -GLboolean __GLEW_ARB_shading_language_packing = GL_FALSE; -GLboolean __GLEW_ARB_shadow = GL_FALSE; -GLboolean __GLEW_ARB_shadow_ambient = GL_FALSE; -GLboolean __GLEW_ARB_sparse_texture = GL_FALSE; -GLboolean __GLEW_ARB_stencil_texturing = GL_FALSE; -GLboolean __GLEW_ARB_sync = GL_FALSE; -GLboolean __GLEW_ARB_tessellation_shader = GL_FALSE; -GLboolean __GLEW_ARB_texture_border_clamp = GL_FALSE; -GLboolean __GLEW_ARB_texture_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_texture_buffer_object_rgb32 = GL_FALSE; -GLboolean __GLEW_ARB_texture_buffer_range = GL_FALSE; -GLboolean __GLEW_ARB_texture_compression = GL_FALSE; -GLboolean __GLEW_ARB_texture_compression_bptc = GL_FALSE; -GLboolean __GLEW_ARB_texture_compression_rgtc = GL_FALSE; -GLboolean __GLEW_ARB_texture_cube_map = GL_FALSE; -GLboolean __GLEW_ARB_texture_cube_map_array = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_add = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_combine = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_crossbar = GL_FALSE; -GLboolean __GLEW_ARB_texture_env_dot3 = GL_FALSE; -GLboolean __GLEW_ARB_texture_float = GL_FALSE; -GLboolean __GLEW_ARB_texture_gather = GL_FALSE; -GLboolean __GLEW_ARB_texture_mirror_clamp_to_edge = GL_FALSE; -GLboolean __GLEW_ARB_texture_mirrored_repeat = GL_FALSE; -GLboolean __GLEW_ARB_texture_multisample = GL_FALSE; -GLboolean __GLEW_ARB_texture_non_power_of_two = GL_FALSE; -GLboolean __GLEW_ARB_texture_query_levels = GL_FALSE; -GLboolean __GLEW_ARB_texture_query_lod = GL_FALSE; -GLboolean __GLEW_ARB_texture_rectangle = GL_FALSE; -GLboolean __GLEW_ARB_texture_rg = GL_FALSE; -GLboolean __GLEW_ARB_texture_rgb10_a2ui = GL_FALSE; -GLboolean __GLEW_ARB_texture_stencil8 = GL_FALSE; -GLboolean __GLEW_ARB_texture_storage = GL_FALSE; -GLboolean __GLEW_ARB_texture_storage_multisample = GL_FALSE; -GLboolean __GLEW_ARB_texture_swizzle = GL_FALSE; -GLboolean __GLEW_ARB_texture_view = GL_FALSE; -GLboolean __GLEW_ARB_timer_query = GL_FALSE; -GLboolean __GLEW_ARB_transform_feedback2 = GL_FALSE; -GLboolean __GLEW_ARB_transform_feedback3 = GL_FALSE; -GLboolean __GLEW_ARB_transform_feedback_instanced = GL_FALSE; -GLboolean __GLEW_ARB_transpose_matrix = GL_FALSE; -GLboolean __GLEW_ARB_uniform_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_vertex_array_bgra = GL_FALSE; -GLboolean __GLEW_ARB_vertex_array_object = GL_FALSE; -GLboolean __GLEW_ARB_vertex_attrib_64bit = GL_FALSE; -GLboolean __GLEW_ARB_vertex_attrib_binding = GL_FALSE; -GLboolean __GLEW_ARB_vertex_blend = GL_FALSE; -GLboolean __GLEW_ARB_vertex_buffer_object = GL_FALSE; -GLboolean __GLEW_ARB_vertex_program = GL_FALSE; -GLboolean __GLEW_ARB_vertex_shader = GL_FALSE; -GLboolean __GLEW_ARB_vertex_type_10f_11f_11f_rev = GL_FALSE; -GLboolean __GLEW_ARB_vertex_type_2_10_10_10_rev = GL_FALSE; -GLboolean __GLEW_ARB_viewport_array = GL_FALSE; -GLboolean __GLEW_ARB_window_pos = GL_FALSE; -GLboolean __GLEW_ATIX_point_sprites = GL_FALSE; -GLboolean __GLEW_ATIX_texture_env_combine3 = GL_FALSE; -GLboolean __GLEW_ATIX_texture_env_route = GL_FALSE; -GLboolean __GLEW_ATIX_vertex_shader_output_point_size = GL_FALSE; -GLboolean __GLEW_ATI_draw_buffers = GL_FALSE; -GLboolean __GLEW_ATI_element_array = GL_FALSE; -GLboolean __GLEW_ATI_envmap_bumpmap = GL_FALSE; -GLboolean __GLEW_ATI_fragment_shader = GL_FALSE; -GLboolean __GLEW_ATI_map_object_buffer = GL_FALSE; -GLboolean __GLEW_ATI_meminfo = GL_FALSE; -GLboolean __GLEW_ATI_pn_triangles = GL_FALSE; -GLboolean __GLEW_ATI_separate_stencil = GL_FALSE; -GLboolean __GLEW_ATI_shader_texture_lod = GL_FALSE; -GLboolean __GLEW_ATI_text_fragment_shader = GL_FALSE; -GLboolean __GLEW_ATI_texture_compression_3dc = GL_FALSE; -GLboolean __GLEW_ATI_texture_env_combine3 = GL_FALSE; -GLboolean __GLEW_ATI_texture_float = GL_FALSE; -GLboolean __GLEW_ATI_texture_mirror_once = GL_FALSE; -GLboolean __GLEW_ATI_vertex_array_object = GL_FALSE; -GLboolean __GLEW_ATI_vertex_attrib_array_object = GL_FALSE; -GLboolean __GLEW_ATI_vertex_streams = GL_FALSE; -GLboolean __GLEW_EXT_422_pixels = GL_FALSE; -GLboolean __GLEW_EXT_Cg_shader = GL_FALSE; -GLboolean __GLEW_EXT_abgr = GL_FALSE; -GLboolean __GLEW_EXT_bgra = GL_FALSE; -GLboolean __GLEW_EXT_bindable_uniform = GL_FALSE; -GLboolean __GLEW_EXT_blend_color = GL_FALSE; -GLboolean __GLEW_EXT_blend_equation_separate = GL_FALSE; -GLboolean __GLEW_EXT_blend_func_separate = GL_FALSE; -GLboolean __GLEW_EXT_blend_logic_op = GL_FALSE; -GLboolean __GLEW_EXT_blend_minmax = GL_FALSE; -GLboolean __GLEW_EXT_blend_subtract = GL_FALSE; -GLboolean __GLEW_EXT_clip_volume_hint = GL_FALSE; -GLboolean __GLEW_EXT_cmyka = GL_FALSE; -GLboolean __GLEW_EXT_color_subtable = GL_FALSE; -GLboolean __GLEW_EXT_compiled_vertex_array = GL_FALSE; -GLboolean __GLEW_EXT_convolution = GL_FALSE; -GLboolean __GLEW_EXT_coordinate_frame = GL_FALSE; -GLboolean __GLEW_EXT_copy_texture = GL_FALSE; -GLboolean __GLEW_EXT_cull_vertex = GL_FALSE; -GLboolean __GLEW_EXT_debug_marker = GL_FALSE; -GLboolean __GLEW_EXT_depth_bounds_test = GL_FALSE; -GLboolean __GLEW_EXT_direct_state_access = GL_FALSE; -GLboolean __GLEW_EXT_draw_buffers2 = GL_FALSE; -GLboolean __GLEW_EXT_draw_instanced = GL_FALSE; -GLboolean __GLEW_EXT_draw_range_elements = GL_FALSE; -GLboolean __GLEW_EXT_fog_coord = GL_FALSE; -GLboolean __GLEW_EXT_fragment_lighting = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_blit = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_multisample = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_multisample_blit_scaled = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_object = GL_FALSE; -GLboolean __GLEW_EXT_framebuffer_sRGB = GL_FALSE; -GLboolean __GLEW_EXT_geometry_shader4 = GL_FALSE; -GLboolean __GLEW_EXT_gpu_program_parameters = GL_FALSE; -GLboolean __GLEW_EXT_gpu_shader4 = GL_FALSE; -GLboolean __GLEW_EXT_histogram = GL_FALSE; -GLboolean __GLEW_EXT_index_array_formats = GL_FALSE; -GLboolean __GLEW_EXT_index_func = GL_FALSE; -GLboolean __GLEW_EXT_index_material = GL_FALSE; -GLboolean __GLEW_EXT_index_texture = GL_FALSE; -GLboolean __GLEW_EXT_light_texture = GL_FALSE; -GLboolean __GLEW_EXT_misc_attribute = GL_FALSE; -GLboolean __GLEW_EXT_multi_draw_arrays = GL_FALSE; -GLboolean __GLEW_EXT_multisample = GL_FALSE; -GLboolean __GLEW_EXT_packed_depth_stencil = GL_FALSE; -GLboolean __GLEW_EXT_packed_float = GL_FALSE; -GLboolean __GLEW_EXT_packed_pixels = GL_FALSE; -GLboolean __GLEW_EXT_paletted_texture = GL_FALSE; -GLboolean __GLEW_EXT_pixel_buffer_object = GL_FALSE; -GLboolean __GLEW_EXT_pixel_transform = GL_FALSE; -GLboolean __GLEW_EXT_pixel_transform_color_table = GL_FALSE; -GLboolean __GLEW_EXT_point_parameters = GL_FALSE; -GLboolean __GLEW_EXT_polygon_offset = GL_FALSE; -GLboolean __GLEW_EXT_provoking_vertex = GL_FALSE; -GLboolean __GLEW_EXT_rescale_normal = GL_FALSE; -GLboolean __GLEW_EXT_scene_marker = GL_FALSE; -GLboolean __GLEW_EXT_secondary_color = GL_FALSE; -GLboolean __GLEW_EXT_separate_shader_objects = GL_FALSE; -GLboolean __GLEW_EXT_separate_specular_color = GL_FALSE; -GLboolean __GLEW_EXT_shader_image_load_store = GL_FALSE; -GLboolean __GLEW_EXT_shadow_funcs = GL_FALSE; -GLboolean __GLEW_EXT_shared_texture_palette = GL_FALSE; -GLboolean __GLEW_EXT_stencil_clear_tag = GL_FALSE; -GLboolean __GLEW_EXT_stencil_two_side = GL_FALSE; -GLboolean __GLEW_EXT_stencil_wrap = GL_FALSE; -GLboolean __GLEW_EXT_subtexture = GL_FALSE; -GLboolean __GLEW_EXT_texture = GL_FALSE; -GLboolean __GLEW_EXT_texture3D = GL_FALSE; -GLboolean __GLEW_EXT_texture_array = GL_FALSE; -GLboolean __GLEW_EXT_texture_buffer_object = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_dxt1 = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_latc = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_rgtc = GL_FALSE; -GLboolean __GLEW_EXT_texture_compression_s3tc = GL_FALSE; -GLboolean __GLEW_EXT_texture_cube_map = GL_FALSE; -GLboolean __GLEW_EXT_texture_edge_clamp = GL_FALSE; -GLboolean __GLEW_EXT_texture_env = GL_FALSE; -GLboolean __GLEW_EXT_texture_env_add = GL_FALSE; -GLboolean __GLEW_EXT_texture_env_combine = GL_FALSE; -GLboolean __GLEW_EXT_texture_env_dot3 = GL_FALSE; -GLboolean __GLEW_EXT_texture_filter_anisotropic = GL_FALSE; -GLboolean __GLEW_EXT_texture_integer = GL_FALSE; -GLboolean __GLEW_EXT_texture_lod_bias = GL_FALSE; -GLboolean __GLEW_EXT_texture_mirror_clamp = GL_FALSE; -GLboolean __GLEW_EXT_texture_object = GL_FALSE; -GLboolean __GLEW_EXT_texture_perturb_normal = GL_FALSE; -GLboolean __GLEW_EXT_texture_rectangle = GL_FALSE; -GLboolean __GLEW_EXT_texture_sRGB = GL_FALSE; -GLboolean __GLEW_EXT_texture_sRGB_decode = GL_FALSE; -GLboolean __GLEW_EXT_texture_shared_exponent = GL_FALSE; -GLboolean __GLEW_EXT_texture_snorm = GL_FALSE; -GLboolean __GLEW_EXT_texture_swizzle = GL_FALSE; -GLboolean __GLEW_EXT_timer_query = GL_FALSE; -GLboolean __GLEW_EXT_transform_feedback = GL_FALSE; -GLboolean __GLEW_EXT_vertex_array = GL_FALSE; -GLboolean __GLEW_EXT_vertex_array_bgra = GL_FALSE; -GLboolean __GLEW_EXT_vertex_attrib_64bit = GL_FALSE; -GLboolean __GLEW_EXT_vertex_shader = GL_FALSE; -GLboolean __GLEW_EXT_vertex_weighting = GL_FALSE; -GLboolean __GLEW_EXT_x11_sync_object = GL_FALSE; -GLboolean __GLEW_GREMEDY_frame_terminator = GL_FALSE; -GLboolean __GLEW_GREMEDY_string_marker = GL_FALSE; -GLboolean __GLEW_HP_convolution_border_modes = GL_FALSE; -GLboolean __GLEW_HP_image_transform = GL_FALSE; -GLboolean __GLEW_HP_occlusion_test = GL_FALSE; -GLboolean __GLEW_HP_texture_lighting = GL_FALSE; -GLboolean __GLEW_IBM_cull_vertex = GL_FALSE; -GLboolean __GLEW_IBM_multimode_draw_arrays = GL_FALSE; -GLboolean __GLEW_IBM_rasterpos_clip = GL_FALSE; -GLboolean __GLEW_IBM_static_data = GL_FALSE; -GLboolean __GLEW_IBM_texture_mirrored_repeat = GL_FALSE; -GLboolean __GLEW_IBM_vertex_array_lists = GL_FALSE; -GLboolean __GLEW_INGR_color_clamp = GL_FALSE; -GLboolean __GLEW_INGR_interlace_read = GL_FALSE; -GLboolean __GLEW_INTEL_map_texture = GL_FALSE; -GLboolean __GLEW_INTEL_parallel_arrays = GL_FALSE; -GLboolean __GLEW_INTEL_texture_scissor = GL_FALSE; -GLboolean __GLEW_KHR_debug = GL_FALSE; -GLboolean __GLEW_KHR_texture_compression_astc_ldr = GL_FALSE; -GLboolean __GLEW_KTX_buffer_region = GL_FALSE; -GLboolean __GLEW_MESAX_texture_stack = GL_FALSE; -GLboolean __GLEW_MESA_pack_invert = GL_FALSE; -GLboolean __GLEW_MESA_resize_buffers = GL_FALSE; -GLboolean __GLEW_MESA_window_pos = GL_FALSE; -GLboolean __GLEW_MESA_ycbcr_texture = GL_FALSE; -GLboolean __GLEW_NVX_conditional_render = GL_FALSE; -GLboolean __GLEW_NVX_gpu_memory_info = GL_FALSE; -GLboolean __GLEW_NV_bindless_multi_draw_indirect = GL_FALSE; -GLboolean __GLEW_NV_bindless_texture = GL_FALSE; -GLboolean __GLEW_NV_blend_equation_advanced = GL_FALSE; -GLboolean __GLEW_NV_blend_equation_advanced_coherent = GL_FALSE; -GLboolean __GLEW_NV_blend_square = GL_FALSE; -GLboolean __GLEW_NV_compute_program5 = GL_FALSE; -GLboolean __GLEW_NV_conditional_render = GL_FALSE; -GLboolean __GLEW_NV_copy_depth_to_color = GL_FALSE; -GLboolean __GLEW_NV_copy_image = GL_FALSE; -GLboolean __GLEW_NV_deep_texture3D = GL_FALSE; -GLboolean __GLEW_NV_depth_buffer_float = GL_FALSE; -GLboolean __GLEW_NV_depth_clamp = GL_FALSE; -GLboolean __GLEW_NV_depth_range_unclamped = GL_FALSE; -GLboolean __GLEW_NV_draw_texture = GL_FALSE; -GLboolean __GLEW_NV_evaluators = GL_FALSE; -GLboolean __GLEW_NV_explicit_multisample = GL_FALSE; -GLboolean __GLEW_NV_fence = GL_FALSE; -GLboolean __GLEW_NV_float_buffer = GL_FALSE; -GLboolean __GLEW_NV_fog_distance = GL_FALSE; -GLboolean __GLEW_NV_fragment_program = GL_FALSE; -GLboolean __GLEW_NV_fragment_program2 = GL_FALSE; -GLboolean __GLEW_NV_fragment_program4 = GL_FALSE; -GLboolean __GLEW_NV_fragment_program_option = GL_FALSE; -GLboolean __GLEW_NV_framebuffer_multisample_coverage = GL_FALSE; -GLboolean __GLEW_NV_geometry_program4 = GL_FALSE; -GLboolean __GLEW_NV_geometry_shader4 = GL_FALSE; -GLboolean __GLEW_NV_gpu_program4 = GL_FALSE; -GLboolean __GLEW_NV_gpu_program5 = GL_FALSE; -GLboolean __GLEW_NV_gpu_program5_mem_extended = GL_FALSE; -GLboolean __GLEW_NV_gpu_program_fp64 = GL_FALSE; -GLboolean __GLEW_NV_gpu_shader5 = GL_FALSE; -GLboolean __GLEW_NV_half_float = GL_FALSE; -GLboolean __GLEW_NV_light_max_exponent = GL_FALSE; -GLboolean __GLEW_NV_multisample_coverage = GL_FALSE; -GLboolean __GLEW_NV_multisample_filter_hint = GL_FALSE; -GLboolean __GLEW_NV_occlusion_query = GL_FALSE; -GLboolean __GLEW_NV_packed_depth_stencil = GL_FALSE; -GLboolean __GLEW_NV_parameter_buffer_object = GL_FALSE; -GLboolean __GLEW_NV_parameter_buffer_object2 = GL_FALSE; -GLboolean __GLEW_NV_path_rendering = GL_FALSE; -GLboolean __GLEW_NV_pixel_data_range = GL_FALSE; -GLboolean __GLEW_NV_point_sprite = GL_FALSE; -GLboolean __GLEW_NV_present_video = GL_FALSE; -GLboolean __GLEW_NV_primitive_restart = GL_FALSE; -GLboolean __GLEW_NV_register_combiners = GL_FALSE; -GLboolean __GLEW_NV_register_combiners2 = GL_FALSE; -GLboolean __GLEW_NV_shader_atomic_counters = GL_FALSE; -GLboolean __GLEW_NV_shader_atomic_float = GL_FALSE; -GLboolean __GLEW_NV_shader_buffer_load = GL_FALSE; -GLboolean __GLEW_NV_shader_storage_buffer_object = GL_FALSE; -GLboolean __GLEW_NV_tessellation_program5 = GL_FALSE; -GLboolean __GLEW_NV_texgen_emboss = GL_FALSE; -GLboolean __GLEW_NV_texgen_reflection = GL_FALSE; -GLboolean __GLEW_NV_texture_barrier = GL_FALSE; -GLboolean __GLEW_NV_texture_compression_vtc = GL_FALSE; -GLboolean __GLEW_NV_texture_env_combine4 = GL_FALSE; -GLboolean __GLEW_NV_texture_expand_normal = GL_FALSE; -GLboolean __GLEW_NV_texture_multisample = GL_FALSE; -GLboolean __GLEW_NV_texture_rectangle = GL_FALSE; -GLboolean __GLEW_NV_texture_shader = GL_FALSE; -GLboolean __GLEW_NV_texture_shader2 = GL_FALSE; -GLboolean __GLEW_NV_texture_shader3 = GL_FALSE; -GLboolean __GLEW_NV_transform_feedback = GL_FALSE; -GLboolean __GLEW_NV_transform_feedback2 = GL_FALSE; -GLboolean __GLEW_NV_vdpau_interop = GL_FALSE; -GLboolean __GLEW_NV_vertex_array_range = GL_FALSE; -GLboolean __GLEW_NV_vertex_array_range2 = GL_FALSE; -GLboolean __GLEW_NV_vertex_attrib_integer_64bit = GL_FALSE; -GLboolean __GLEW_NV_vertex_buffer_unified_memory = GL_FALSE; -GLboolean __GLEW_NV_vertex_program = GL_FALSE; -GLboolean __GLEW_NV_vertex_program1_1 = GL_FALSE; -GLboolean __GLEW_NV_vertex_program2 = GL_FALSE; -GLboolean __GLEW_NV_vertex_program2_option = GL_FALSE; -GLboolean __GLEW_NV_vertex_program3 = GL_FALSE; -GLboolean __GLEW_NV_vertex_program4 = GL_FALSE; -GLboolean __GLEW_NV_video_capture = GL_FALSE; -GLboolean __GLEW_OES_byte_coordinates = GL_FALSE; -GLboolean __GLEW_OES_compressed_paletted_texture = GL_FALSE; -GLboolean __GLEW_OES_read_format = GL_FALSE; -GLboolean __GLEW_OES_single_precision = GL_FALSE; -GLboolean __GLEW_OML_interlace = GL_FALSE; -GLboolean __GLEW_OML_resample = GL_FALSE; -GLboolean __GLEW_OML_subsample = GL_FALSE; -GLboolean __GLEW_PGI_misc_hints = GL_FALSE; -GLboolean __GLEW_PGI_vertex_hints = GL_FALSE; -GLboolean __GLEW_REGAL_ES1_0_compatibility = GL_FALSE; -GLboolean __GLEW_REGAL_ES1_1_compatibility = GL_FALSE; -GLboolean __GLEW_REGAL_enable = GL_FALSE; -GLboolean __GLEW_REGAL_error_string = GL_FALSE; -GLboolean __GLEW_REGAL_extension_query = GL_FALSE; -GLboolean __GLEW_REGAL_log = GL_FALSE; -GLboolean __GLEW_REND_screen_coordinates = GL_FALSE; -GLboolean __GLEW_S3_s3tc = GL_FALSE; -GLboolean __GLEW_SGIS_color_range = GL_FALSE; -GLboolean __GLEW_SGIS_detail_texture = GL_FALSE; -GLboolean __GLEW_SGIS_fog_function = GL_FALSE; -GLboolean __GLEW_SGIS_generate_mipmap = GL_FALSE; -GLboolean __GLEW_SGIS_multisample = GL_FALSE; -GLboolean __GLEW_SGIS_pixel_texture = GL_FALSE; -GLboolean __GLEW_SGIS_point_line_texgen = GL_FALSE; -GLboolean __GLEW_SGIS_sharpen_texture = GL_FALSE; -GLboolean __GLEW_SGIS_texture4D = GL_FALSE; -GLboolean __GLEW_SGIS_texture_border_clamp = GL_FALSE; -GLboolean __GLEW_SGIS_texture_edge_clamp = GL_FALSE; -GLboolean __GLEW_SGIS_texture_filter4 = GL_FALSE; -GLboolean __GLEW_SGIS_texture_lod = GL_FALSE; -GLboolean __GLEW_SGIS_texture_select = GL_FALSE; -GLboolean __GLEW_SGIX_async = GL_FALSE; -GLboolean __GLEW_SGIX_async_histogram = GL_FALSE; -GLboolean __GLEW_SGIX_async_pixel = GL_FALSE; -GLboolean __GLEW_SGIX_blend_alpha_minmax = GL_FALSE; -GLboolean __GLEW_SGIX_clipmap = GL_FALSE; -GLboolean __GLEW_SGIX_convolution_accuracy = GL_FALSE; -GLboolean __GLEW_SGIX_depth_texture = GL_FALSE; -GLboolean __GLEW_SGIX_flush_raster = GL_FALSE; -GLboolean __GLEW_SGIX_fog_offset = GL_FALSE; -GLboolean __GLEW_SGIX_fog_texture = GL_FALSE; -GLboolean __GLEW_SGIX_fragment_specular_lighting = GL_FALSE; -GLboolean __GLEW_SGIX_framezoom = GL_FALSE; -GLboolean __GLEW_SGIX_interlace = GL_FALSE; -GLboolean __GLEW_SGIX_ir_instrument1 = GL_FALSE; -GLboolean __GLEW_SGIX_list_priority = GL_FALSE; -GLboolean __GLEW_SGIX_pixel_texture = GL_FALSE; -GLboolean __GLEW_SGIX_pixel_texture_bits = GL_FALSE; -GLboolean __GLEW_SGIX_reference_plane = GL_FALSE; -GLboolean __GLEW_SGIX_resample = GL_FALSE; -GLboolean __GLEW_SGIX_shadow = GL_FALSE; -GLboolean __GLEW_SGIX_shadow_ambient = GL_FALSE; -GLboolean __GLEW_SGIX_sprite = GL_FALSE; -GLboolean __GLEW_SGIX_tag_sample_buffer = GL_FALSE; -GLboolean __GLEW_SGIX_texture_add_env = GL_FALSE; -GLboolean __GLEW_SGIX_texture_coordinate_clamp = GL_FALSE; -GLboolean __GLEW_SGIX_texture_lod_bias = GL_FALSE; -GLboolean __GLEW_SGIX_texture_multi_buffer = GL_FALSE; -GLboolean __GLEW_SGIX_texture_range = GL_FALSE; -GLboolean __GLEW_SGIX_texture_scale_bias = GL_FALSE; -GLboolean __GLEW_SGIX_vertex_preclip = GL_FALSE; -GLboolean __GLEW_SGIX_vertex_preclip_hint = GL_FALSE; -GLboolean __GLEW_SGIX_ycrcb = GL_FALSE; -GLboolean __GLEW_SGI_color_matrix = GL_FALSE; -GLboolean __GLEW_SGI_color_table = GL_FALSE; -GLboolean __GLEW_SGI_texture_color_table = GL_FALSE; -GLboolean __GLEW_SUNX_constant_data = GL_FALSE; -GLboolean __GLEW_SUN_convolution_border_modes = GL_FALSE; -GLboolean __GLEW_SUN_global_alpha = GL_FALSE; -GLboolean __GLEW_SUN_mesh_array = GL_FALSE; -GLboolean __GLEW_SUN_read_video_pixels = GL_FALSE; -GLboolean __GLEW_SUN_slice_accum = GL_FALSE; -GLboolean __GLEW_SUN_triangle_list = GL_FALSE; -GLboolean __GLEW_SUN_vertex = GL_FALSE; -GLboolean __GLEW_WIN_phong_shading = GL_FALSE; -GLboolean __GLEW_WIN_specular_fog = GL_FALSE; -GLboolean __GLEW_WIN_swap_hint = GL_FALSE; - -#endif /* !GLEW_MX */ - -#ifdef GL_VERSION_1_2 - -static GLboolean _glewInit_GL_VERSION_1_2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3D")) == NULL) || r; - r = ((glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElements")) == NULL) || r; - r = ((glTexImage3D = (PFNGLTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexImage3D")) == NULL) || r; - r = ((glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3D")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_2 */ - -#ifdef GL_VERSION_1_2_1 - -#endif /* GL_VERSION_1_2_1 */ - -#ifdef GL_VERSION_1_3 - -static GLboolean _glewInit_GL_VERSION_1_3 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveTexture = (PFNGLACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glActiveTexture")) == NULL) || r; - r = ((glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTexture")) == NULL) || r; - r = ((glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1D")) == NULL) || r; - r = ((glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2D")) == NULL) || r; - r = ((glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3D")) == NULL) || r; - r = ((glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1D")) == NULL) || r; - r = ((glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2D")) == NULL) || r; - r = ((glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3D")) == NULL) || r; - r = ((glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImage")) == NULL) || r; - r = ((glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixd")) == NULL) || r; - r = ((glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixf")) == NULL) || r; - r = ((glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixd")) == NULL) || r; - r = ((glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixf")) == NULL) || r; - r = ((glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1d")) == NULL) || r; - r = ((glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dv")) == NULL) || r; - r = ((glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1f")) == NULL) || r; - r = ((glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fv")) == NULL) || r; - r = ((glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1i")) == NULL) || r; - r = ((glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iv")) == NULL) || r; - r = ((glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1s")) == NULL) || r; - r = ((glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sv")) == NULL) || r; - r = ((glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2d")) == NULL) || r; - r = ((glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dv")) == NULL) || r; - r = ((glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2f")) == NULL) || r; - r = ((glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fv")) == NULL) || r; - r = ((glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2i")) == NULL) || r; - r = ((glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iv")) == NULL) || r; - r = ((glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2s")) == NULL) || r; - r = ((glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sv")) == NULL) || r; - r = ((glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3d")) == NULL) || r; - r = ((glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dv")) == NULL) || r; - r = ((glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3f")) == NULL) || r; - r = ((glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fv")) == NULL) || r; - r = ((glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3i")) == NULL) || r; - r = ((glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iv")) == NULL) || r; - r = ((glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3s")) == NULL) || r; - r = ((glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sv")) == NULL) || r; - r = ((glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4d")) == NULL) || r; - r = ((glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dv")) == NULL) || r; - r = ((glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4f")) == NULL) || r; - r = ((glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fv")) == NULL) || r; - r = ((glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4i")) == NULL) || r; - r = ((glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iv")) == NULL) || r; - r = ((glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4s")) == NULL) || r; - r = ((glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sv")) == NULL) || r; - r = ((glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverage")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_3 */ - -#ifdef GL_VERSION_1_4 - -static GLboolean _glewInit_GL_VERSION_1_4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendColor = (PFNGLBLENDCOLORPROC)glewGetProcAddress((const GLubyte*)"glBlendColor")) == NULL) || r; - r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; - r = ((glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparate")) == NULL) || r; - r = ((glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointer")) == NULL) || r; - r = ((glFogCoordd = (PFNGLFOGCOORDDPROC)glewGetProcAddress((const GLubyte*)"glFogCoordd")) == NULL) || r; - r = ((glFogCoorddv = (PFNGLFOGCOORDDVPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddv")) == NULL) || r; - r = ((glFogCoordf = (PFNGLFOGCOORDFPROC)glewGetProcAddress((const GLubyte*)"glFogCoordf")) == NULL) || r; - r = ((glFogCoordfv = (PFNGLFOGCOORDFVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfv")) == NULL) || r; - r = ((glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArrays")) == NULL) || r; - r = ((glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElements")) == NULL) || r; - r = ((glPointParameterf = (PFNGLPOINTPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glPointParameterf")) == NULL) || r; - r = ((glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfv")) == NULL) || r; - r = ((glPointParameteri = (PFNGLPOINTPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPointParameteri")) == NULL) || r; - r = ((glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriv")) == NULL) || r; - r = ((glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3b")) == NULL) || r; - r = ((glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bv")) == NULL) || r; - r = ((glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3d")) == NULL) || r; - r = ((glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dv")) == NULL) || r; - r = ((glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3f")) == NULL) || r; - r = ((glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fv")) == NULL) || r; - r = ((glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3i")) == NULL) || r; - r = ((glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iv")) == NULL) || r; - r = ((glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3s")) == NULL) || r; - r = ((glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sv")) == NULL) || r; - r = ((glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ub")) == NULL) || r; - r = ((glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubv")) == NULL) || r; - r = ((glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ui")) == NULL) || r; - r = ((glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiv")) == NULL) || r; - r = ((glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3us")) == NULL) || r; - r = ((glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usv")) == NULL) || r; - r = ((glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointer")) == NULL) || r; - r = ((glWindowPos2d = (PFNGLWINDOWPOS2DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2d")) == NULL) || r; - r = ((glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dv")) == NULL) || r; - r = ((glWindowPos2f = (PFNGLWINDOWPOS2FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2f")) == NULL) || r; - r = ((glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fv")) == NULL) || r; - r = ((glWindowPos2i = (PFNGLWINDOWPOS2IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2i")) == NULL) || r; - r = ((glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iv")) == NULL) || r; - r = ((glWindowPos2s = (PFNGLWINDOWPOS2SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2s")) == NULL) || r; - r = ((glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sv")) == NULL) || r; - r = ((glWindowPos3d = (PFNGLWINDOWPOS3DPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3d")) == NULL) || r; - r = ((glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dv")) == NULL) || r; - r = ((glWindowPos3f = (PFNGLWINDOWPOS3FPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3f")) == NULL) || r; - r = ((glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fv")) == NULL) || r; - r = ((glWindowPos3i = (PFNGLWINDOWPOS3IPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3i")) == NULL) || r; - r = ((glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iv")) == NULL) || r; - r = ((glWindowPos3s = (PFNGLWINDOWPOS3SPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3s")) == NULL) || r; - r = ((glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sv")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_4 */ - -#ifdef GL_VERSION_1_5 - -static GLboolean _glewInit_GL_VERSION_1_5 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQuery = (PFNGLBEGINQUERYPROC)glewGetProcAddress((const GLubyte*)"glBeginQuery")) == NULL) || r; - r = ((glBindBuffer = (PFNGLBINDBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindBuffer")) == NULL) || r; - r = ((glBufferData = (PFNGLBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferData")) == NULL) || r; - r = ((glBufferSubData = (PFNGLBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glBufferSubData")) == NULL) || r; - r = ((glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffers")) == NULL) || r; - r = ((glDeleteQueries = (PFNGLDELETEQUERIESPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueries")) == NULL) || r; - r = ((glEndQuery = (PFNGLENDQUERYPROC)glewGetProcAddress((const GLubyte*)"glEndQuery")) == NULL) || r; - r = ((glGenBuffers = (PFNGLGENBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenBuffers")) == NULL) || r; - r = ((glGenQueries = (PFNGLGENQUERIESPROC)glewGetProcAddress((const GLubyte*)"glGenQueries")) == NULL) || r; - r = ((glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteriv")) == NULL) || r; - r = ((glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointerv")) == NULL) || r; - r = ((glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubData")) == NULL) || r; - r = ((glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectiv")) == NULL) || r; - r = ((glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuiv")) == NULL) || r; - r = ((glGetQueryiv = (PFNGLGETQUERYIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryiv")) == NULL) || r; - r = ((glIsBuffer = (PFNGLISBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsBuffer")) == NULL) || r; - r = ((glIsQuery = (PFNGLISQUERYPROC)glewGetProcAddress((const GLubyte*)"glIsQuery")) == NULL) || r; - r = ((glMapBuffer = (PFNGLMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glMapBuffer")) == NULL) || r; - r = ((glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glUnmapBuffer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_1_5 */ - -#ifdef GL_VERSION_2_0 - -static GLboolean _glewInit_GL_VERSION_2_0 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAttachShader = (PFNGLATTACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glAttachShader")) == NULL) || r; - r = ((glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocation")) == NULL) || r; - r = ((glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparate")) == NULL) || r; - r = ((glCompileShader = (PFNGLCOMPILESHADERPROC)glewGetProcAddress((const GLubyte*)"glCompileShader")) == NULL) || r; - r = ((glCreateProgram = (PFNGLCREATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glCreateProgram")) == NULL) || r; - r = ((glCreateShader = (PFNGLCREATESHADERPROC)glewGetProcAddress((const GLubyte*)"glCreateShader")) == NULL) || r; - r = ((glDeleteProgram = (PFNGLDELETEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgram")) == NULL) || r; - r = ((glDeleteShader = (PFNGLDELETESHADERPROC)glewGetProcAddress((const GLubyte*)"glDeleteShader")) == NULL) || r; - r = ((glDetachShader = (PFNGLDETACHSHADERPROC)glewGetProcAddress((const GLubyte*)"glDetachShader")) == NULL) || r; - r = ((glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArray")) == NULL) || r; - r = ((glDrawBuffers = (PFNGLDRAWBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffers")) == NULL) || r; - r = ((glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArray")) == NULL) || r; - r = ((glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttrib")) == NULL) || r; - r = ((glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniform")) == NULL) || r; - r = ((glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedShaders")) == NULL) || r; - r = ((glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocation")) == NULL) || r; - r = ((glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInfoLog")) == NULL) || r; - r = ((glGetProgramiv = (PFNGLGETPROGRAMIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramiv")) == NULL) || r; - r = ((glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetShaderInfoLog")) == NULL) || r; - r = ((glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSource")) == NULL) || r; - r = ((glGetShaderiv = (PFNGLGETSHADERIVPROC)glewGetProcAddress((const GLubyte*)"glGetShaderiv")) == NULL) || r; - r = ((glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocation")) == NULL) || r; - r = ((glGetUniformfv = (PFNGLGETUNIFORMFVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfv")) == NULL) || r; - r = ((glGetUniformiv = (PFNGLGETUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformiv")) == NULL) || r; - r = ((glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointerv")) == NULL) || r; - r = ((glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdv")) == NULL) || r; - r = ((glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfv")) == NULL) || r; - r = ((glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribiv")) == NULL) || r; - r = ((glIsProgram = (PFNGLISPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glIsProgram")) == NULL) || r; - r = ((glIsShader = (PFNGLISSHADERPROC)glewGetProcAddress((const GLubyte*)"glIsShader")) == NULL) || r; - r = ((glLinkProgram = (PFNGLLINKPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glLinkProgram")) == NULL) || r; - r = ((glShaderSource = (PFNGLSHADERSOURCEPROC)glewGetProcAddress((const GLubyte*)"glShaderSource")) == NULL) || r; - r = ((glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparate")) == NULL) || r; - r = ((glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilMaskSeparate")) == NULL) || r; - r = ((glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparate")) == NULL) || r; - r = ((glUniform1f = (PFNGLUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glUniform1f")) == NULL) || r; - r = ((glUniform1fv = (PFNGLUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glUniform1fv")) == NULL) || r; - r = ((glUniform1i = (PFNGLUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glUniform1i")) == NULL) || r; - r = ((glUniform1iv = (PFNGLUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glUniform1iv")) == NULL) || r; - r = ((glUniform2f = (PFNGLUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glUniform2f")) == NULL) || r; - r = ((glUniform2fv = (PFNGLUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glUniform2fv")) == NULL) || r; - r = ((glUniform2i = (PFNGLUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glUniform2i")) == NULL) || r; - r = ((glUniform2iv = (PFNGLUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glUniform2iv")) == NULL) || r; - r = ((glUniform3f = (PFNGLUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glUniform3f")) == NULL) || r; - r = ((glUniform3fv = (PFNGLUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glUniform3fv")) == NULL) || r; - r = ((glUniform3i = (PFNGLUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glUniform3i")) == NULL) || r; - r = ((glUniform3iv = (PFNGLUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glUniform3iv")) == NULL) || r; - r = ((glUniform4f = (PFNGLUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glUniform4f")) == NULL) || r; - r = ((glUniform4fv = (PFNGLUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glUniform4fv")) == NULL) || r; - r = ((glUniform4i = (PFNGLUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glUniform4i")) == NULL) || r; - r = ((glUniform4iv = (PFNGLUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glUniform4iv")) == NULL) || r; - r = ((glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fv")) == NULL) || r; - r = ((glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fv")) == NULL) || r; - r = ((glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fv")) == NULL) || r; - r = ((glUseProgram = (PFNGLUSEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glUseProgram")) == NULL) || r; - r = ((glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glValidateProgram")) == NULL) || r; - r = ((glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1d")) == NULL) || r; - r = ((glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dv")) == NULL) || r; - r = ((glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1f")) == NULL) || r; - r = ((glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fv")) == NULL) || r; - r = ((glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1s")) == NULL) || r; - r = ((glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sv")) == NULL) || r; - r = ((glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2d")) == NULL) || r; - r = ((glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dv")) == NULL) || r; - r = ((glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2f")) == NULL) || r; - r = ((glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fv")) == NULL) || r; - r = ((glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2s")) == NULL) || r; - r = ((glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sv")) == NULL) || r; - r = ((glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3d")) == NULL) || r; - r = ((glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dv")) == NULL) || r; - r = ((glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3f")) == NULL) || r; - r = ((glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fv")) == NULL) || r; - r = ((glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3s")) == NULL) || r; - r = ((glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sv")) == NULL) || r; - r = ((glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nbv")) == NULL) || r; - r = ((glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Niv")) == NULL) || r; - r = ((glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nsv")) == NULL) || r; - r = ((glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nub")) == NULL) || r; - r = ((glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nubv")) == NULL) || r; - r = ((glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nuiv")) == NULL) || r; - r = ((glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4Nusv")) == NULL) || r; - r = ((glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bv")) == NULL) || r; - r = ((glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4d")) == NULL) || r; - r = ((glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dv")) == NULL) || r; - r = ((glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4f")) == NULL) || r; - r = ((glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fv")) == NULL) || r; - r = ((glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4iv")) == NULL) || r; - r = ((glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4s")) == NULL) || r; - r = ((glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sv")) == NULL) || r; - r = ((glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubv")) == NULL) || r; - r = ((glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uiv")) == NULL) || r; - r = ((glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usv")) == NULL) || r; - r = ((glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_2_0 */ - -#ifdef GL_VERSION_2_1 - -static GLboolean _glewInit_GL_VERSION_2_1 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3fv")) == NULL) || r; - r = ((glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4fv")) == NULL) || r; - r = ((glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2fv")) == NULL) || r; - r = ((glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4fv")) == NULL) || r; - r = ((glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2fv")) == NULL) || r; - r = ((glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3fv")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_2_1 */ - -#ifdef GL_VERSION_3_0 - -static GLboolean _glewInit_GL_VERSION_3_0 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRender")) == NULL) || r; - r = ((glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedback")) == NULL) || r; - r = ((glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocation")) == NULL) || r; - r = ((glClampColor = (PFNGLCLAMPCOLORPROC)glewGetProcAddress((const GLubyte*)"glClampColor")) == NULL) || r; - r = ((glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfi")) == NULL) || r; - r = ((glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferfv")) == NULL) || r; - r = ((glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferiv")) == NULL) || r; - r = ((glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)glewGetProcAddress((const GLubyte*)"glClearBufferuiv")) == NULL) || r; - r = ((glColorMaski = (PFNGLCOLORMASKIPROC)glewGetProcAddress((const GLubyte*)"glColorMaski")) == NULL) || r; - r = ((glDisablei = (PFNGLDISABLEIPROC)glewGetProcAddress((const GLubyte*)"glDisablei")) == NULL) || r; - r = ((glEnablei = (PFNGLENABLEIPROC)glewGetProcAddress((const GLubyte*)"glEnablei")) == NULL) || r; - r = ((glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRender")) == NULL) || r; - r = ((glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedback")) == NULL) || r; - r = ((glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)glewGetProcAddress((const GLubyte*)"glGetBooleani_v")) == NULL) || r; - r = ((glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocation")) == NULL) || r; - r = ((glGetStringi = (PFNGLGETSTRINGIPROC)glewGetProcAddress((const GLubyte*)"glGetStringi")) == NULL) || r; - r = ((glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIiv")) == NULL) || r; - r = ((glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuiv")) == NULL) || r; - r = ((glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVarying")) == NULL) || r; - r = ((glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuiv")) == NULL) || r; - r = ((glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIiv")) == NULL) || r; - r = ((glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuiv")) == NULL) || r; - r = ((glIsEnabledi = (PFNGLISENABLEDIPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledi")) == NULL) || r; - r = ((glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIiv")) == NULL) || r; - r = ((glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuiv")) == NULL) || r; - r = ((glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryings")) == NULL) || r; - r = ((glUniform1ui = (PFNGLUNIFORM1UIPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui")) == NULL) || r; - r = ((glUniform1uiv = (PFNGLUNIFORM1UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiv")) == NULL) || r; - r = ((glUniform2ui = (PFNGLUNIFORM2UIPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui")) == NULL) || r; - r = ((glUniform2uiv = (PFNGLUNIFORM2UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiv")) == NULL) || r; - r = ((glUniform3ui = (PFNGLUNIFORM3UIPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui")) == NULL) || r; - r = ((glUniform3uiv = (PFNGLUNIFORM3UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiv")) == NULL) || r; - r = ((glUniform4ui = (PFNGLUNIFORM4UIPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui")) == NULL) || r; - r = ((glUniform4uiv = (PFNGLUNIFORM4UIVPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiv")) == NULL) || r; - r = ((glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1i")) == NULL) || r; - r = ((glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iv")) == NULL) || r; - r = ((glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ui")) == NULL) || r; - r = ((glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiv")) == NULL) || r; - r = ((glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2i")) == NULL) || r; - r = ((glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iv")) == NULL) || r; - r = ((glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ui")) == NULL) || r; - r = ((glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiv")) == NULL) || r; - r = ((glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3i")) == NULL) || r; - r = ((glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iv")) == NULL) || r; - r = ((glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ui")) == NULL) || r; - r = ((glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiv")) == NULL) || r; - r = ((glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bv")) == NULL) || r; - r = ((glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4i")) == NULL) || r; - r = ((glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iv")) == NULL) || r; - r = ((glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4sv")) == NULL) || r; - r = ((glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubv")) == NULL) || r; - r = ((glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ui")) == NULL) || r; - r = ((glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiv")) == NULL) || r; - r = ((glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usv")) == NULL) || r; - r = ((glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_0 */ - -#ifdef GL_VERSION_3_1 - -static GLboolean _glewInit_GL_VERSION_3_1 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstanced")) == NULL) || r; - r = ((glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstanced")) == NULL) || r; - r = ((glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndex")) == NULL) || r; - r = ((glTexBuffer = (PFNGLTEXBUFFERPROC)glewGetProcAddress((const GLubyte*)"glTexBuffer")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_1 */ - -#ifdef GL_VERSION_3_2 - -static GLboolean _glewInit_GL_VERSION_3_2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture")) == NULL) || r; - r = ((glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameteri64v")) == NULL) || r; - r = ((glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)glewGetProcAddress((const GLubyte*)"glGetInteger64i_v")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_2 */ - -#ifdef GL_VERSION_3_3 - -static GLboolean _glewInit_GL_VERSION_3_3 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisor")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_3_3 */ - -#ifdef GL_VERSION_4_0 - -static GLboolean _glewInit_GL_VERSION_4_0 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationSeparatei = (PFNGLBLENDEQUATIONSEPARATEIPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparatei")) == NULL) || r; - r = ((glBlendEquationi = (PFNGLBLENDEQUATIONIPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationi")) == NULL) || r; - r = ((glBlendFuncSeparatei = (PFNGLBLENDFUNCSEPARATEIPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparatei")) == NULL) || r; - r = ((glBlendFunci = (PFNGLBLENDFUNCIPROC)glewGetProcAddress((const GLubyte*)"glBlendFunci")) == NULL) || r; - r = ((glMinSampleShading = (PFNGLMINSAMPLESHADINGPROC)glewGetProcAddress((const GLubyte*)"glMinSampleShading")) == NULL) || r; - - return r; -} - -#endif /* GL_VERSION_4_0 */ - -#ifdef GL_VERSION_4_1 - -#endif /* GL_VERSION_4_1 */ - -#ifdef GL_VERSION_4_2 - -#endif /* GL_VERSION_4_2 */ - -#ifdef GL_VERSION_4_3 - -#endif /* GL_VERSION_4_3 */ - -#ifdef GL_VERSION_4_4 - -#endif /* GL_VERSION_4_4 */ - -#ifdef GL_3DFX_multisample - -#endif /* GL_3DFX_multisample */ - -#ifdef GL_3DFX_tbuffer - -static GLboolean _glewInit_GL_3DFX_tbuffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTbufferMask3DFX = (PFNGLTBUFFERMASK3DFXPROC)glewGetProcAddress((const GLubyte*)"glTbufferMask3DFX")) == NULL) || r; - - return r; -} - -#endif /* GL_3DFX_tbuffer */ - -#ifdef GL_3DFX_texture_compression_FXT1 - -#endif /* GL_3DFX_texture_compression_FXT1 */ - -#ifdef GL_AMD_blend_minmax_factor - -#endif /* GL_AMD_blend_minmax_factor */ - -#ifdef GL_AMD_conservative_depth - -#endif /* GL_AMD_conservative_depth */ - -#ifdef GL_AMD_debug_output - -static GLboolean _glewInit_GL_AMD_debug_output (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallbackAMD")) == NULL) || r; - r = ((glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageEnableAMD")) == NULL) || r; - r = ((glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsertAMD")) == NULL) || r; - r = ((glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLogAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_debug_output */ - -#ifdef GL_AMD_depth_clamp_separate - -#endif /* GL_AMD_depth_clamp_separate */ - -#ifdef GL_AMD_draw_buffers_blend - -static GLboolean _glewInit_GL_AMD_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationIndexedAMD = (PFNGLBLENDEQUATIONINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationIndexedAMD")) == NULL) || r; - r = ((glBlendEquationSeparateIndexedAMD = (PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateIndexedAMD")) == NULL) || r; - r = ((glBlendFuncIndexedAMD = (PFNGLBLENDFUNCINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncIndexedAMD")) == NULL) || r; - r = ((glBlendFuncSeparateIndexedAMD = (PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateIndexedAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_draw_buffers_blend */ - -#ifdef GL_AMD_interleaved_elements - -static GLboolean _glewInit_GL_AMD_interleaved_elements (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexAttribParameteriAMD = (PFNGLVERTEXATTRIBPARAMETERIAMDPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribParameteriAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_interleaved_elements */ - -#ifdef GL_AMD_multi_draw_indirect - -static GLboolean _glewInit_GL_AMD_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirectAMD = (PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectAMD")) == NULL) || r; - r = ((glMultiDrawElementsIndirectAMD = (PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_multi_draw_indirect */ - -#ifdef GL_AMD_name_gen_delete - -static GLboolean _glewInit_GL_AMD_name_gen_delete (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDeleteNamesAMD = (PFNGLDELETENAMESAMDPROC)glewGetProcAddress((const GLubyte*)"glDeleteNamesAMD")) == NULL) || r; - r = ((glGenNamesAMD = (PFNGLGENNAMESAMDPROC)glewGetProcAddress((const GLubyte*)"glGenNamesAMD")) == NULL) || r; - r = ((glIsNameAMD = (PFNGLISNAMEAMDPROC)glewGetProcAddress((const GLubyte*)"glIsNameAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_name_gen_delete */ - -#ifdef GL_AMD_performance_monitor - -static GLboolean _glewInit_GL_AMD_performance_monitor (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginPerfMonitorAMD = (PFNGLBEGINPERFMONITORAMDPROC)glewGetProcAddress((const GLubyte*)"glBeginPerfMonitorAMD")) == NULL) || r; - r = ((glDeletePerfMonitorsAMD = (PFNGLDELETEPERFMONITORSAMDPROC)glewGetProcAddress((const GLubyte*)"glDeletePerfMonitorsAMD")) == NULL) || r; - r = ((glEndPerfMonitorAMD = (PFNGLENDPERFMONITORAMDPROC)glewGetProcAddress((const GLubyte*)"glEndPerfMonitorAMD")) == NULL) || r; - r = ((glGenPerfMonitorsAMD = (PFNGLGENPERFMONITORSAMDPROC)glewGetProcAddress((const GLubyte*)"glGenPerfMonitorsAMD")) == NULL) || r; - r = ((glGetPerfMonitorCounterDataAMD = (PFNGLGETPERFMONITORCOUNTERDATAAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterDataAMD")) == NULL) || r; - r = ((glGetPerfMonitorCounterInfoAMD = (PFNGLGETPERFMONITORCOUNTERINFOAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterInfoAMD")) == NULL) || r; - r = ((glGetPerfMonitorCounterStringAMD = (PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCounterStringAMD")) == NULL) || r; - r = ((glGetPerfMonitorCountersAMD = (PFNGLGETPERFMONITORCOUNTERSAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorCountersAMD")) == NULL) || r; - r = ((glGetPerfMonitorGroupStringAMD = (PFNGLGETPERFMONITORGROUPSTRINGAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorGroupStringAMD")) == NULL) || r; - r = ((glGetPerfMonitorGroupsAMD = (PFNGLGETPERFMONITORGROUPSAMDPROC)glewGetProcAddress((const GLubyte*)"glGetPerfMonitorGroupsAMD")) == NULL) || r; - r = ((glSelectPerfMonitorCountersAMD = (PFNGLSELECTPERFMONITORCOUNTERSAMDPROC)glewGetProcAddress((const GLubyte*)"glSelectPerfMonitorCountersAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_performance_monitor */ - -#ifdef GL_AMD_pinned_memory - -#endif /* GL_AMD_pinned_memory */ - -#ifdef GL_AMD_query_buffer_object - -#endif /* GL_AMD_query_buffer_object */ - -#ifdef GL_AMD_sample_positions - -static GLboolean _glewInit_GL_AMD_sample_positions (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSetMultisamplefvAMD = (PFNGLSETMULTISAMPLEFVAMDPROC)glewGetProcAddress((const GLubyte*)"glSetMultisamplefvAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_sample_positions */ - -#ifdef GL_AMD_seamless_cubemap_per_texture - -#endif /* GL_AMD_seamless_cubemap_per_texture */ - -#ifdef GL_AMD_shader_stencil_export - -#endif /* GL_AMD_shader_stencil_export */ - -#ifdef GL_AMD_shader_trinary_minmax - -#endif /* GL_AMD_shader_trinary_minmax */ - -#ifdef GL_AMD_sparse_texture - -static GLboolean _glewInit_GL_AMD_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexStorageSparseAMD = (PFNGLTEXSTORAGESPARSEAMDPROC)glewGetProcAddress((const GLubyte*)"glTexStorageSparseAMD")) == NULL) || r; - r = ((glTextureStorageSparseAMD = (PFNGLTEXTURESTORAGESPARSEAMDPROC)glewGetProcAddress((const GLubyte*)"glTextureStorageSparseAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_sparse_texture */ - -#ifdef GL_AMD_stencil_operation_extended - -static GLboolean _glewInit_GL_AMD_stencil_operation_extended (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glStencilOpValueAMD = (PFNGLSTENCILOPVALUEAMDPROC)glewGetProcAddress((const GLubyte*)"glStencilOpValueAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_stencil_operation_extended */ - -#ifdef GL_AMD_texture_texture4 - -#endif /* GL_AMD_texture_texture4 */ - -#ifdef GL_AMD_transform_feedback3_lines_triangles - -#endif /* GL_AMD_transform_feedback3_lines_triangles */ - -#ifdef GL_AMD_vertex_shader_layer - -#endif /* GL_AMD_vertex_shader_layer */ - -#ifdef GL_AMD_vertex_shader_tessellator - -static GLboolean _glewInit_GL_AMD_vertex_shader_tessellator (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTessellationFactorAMD = (PFNGLTESSELLATIONFACTORAMDPROC)glewGetProcAddress((const GLubyte*)"glTessellationFactorAMD")) == NULL) || r; - r = ((glTessellationModeAMD = (PFNGLTESSELLATIONMODEAMDPROC)glewGetProcAddress((const GLubyte*)"glTessellationModeAMD")) == NULL) || r; - - return r; -} - -#endif /* GL_AMD_vertex_shader_tessellator */ - -#ifdef GL_AMD_vertex_shader_viewport_index - -#endif /* GL_AMD_vertex_shader_viewport_index */ - -#ifdef GL_ANGLE_depth_texture - -#endif /* GL_ANGLE_depth_texture */ - -#ifdef GL_ANGLE_framebuffer_blit - -static GLboolean _glewInit_GL_ANGLE_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlitFramebufferANGLE = (PFNGLBLITFRAMEBUFFERANGLEPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_framebuffer_blit */ - -#ifdef GL_ANGLE_framebuffer_multisample - -static GLboolean _glewInit_GL_ANGLE_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glRenderbufferStorageMultisampleANGLE = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_framebuffer_multisample */ - -#ifdef GL_ANGLE_instanced_arrays - -static GLboolean _glewInit_GL_ANGLE_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedANGLE = (PFNGLDRAWARRAYSINSTANCEDANGLEPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedANGLE")) == NULL) || r; - r = ((glDrawElementsInstancedANGLE = (PFNGLDRAWELEMENTSINSTANCEDANGLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedANGLE")) == NULL) || r; - r = ((glVertexAttribDivisorANGLE = (PFNGLVERTEXATTRIBDIVISORANGLEPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisorANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_instanced_arrays */ - -#ifdef GL_ANGLE_pack_reverse_row_order - -#endif /* GL_ANGLE_pack_reverse_row_order */ - -#ifdef GL_ANGLE_program_binary - -#endif /* GL_ANGLE_program_binary */ - -#ifdef GL_ANGLE_texture_compression_dxt1 - -#endif /* GL_ANGLE_texture_compression_dxt1 */ - -#ifdef GL_ANGLE_texture_compression_dxt3 - -#endif /* GL_ANGLE_texture_compression_dxt3 */ - -#ifdef GL_ANGLE_texture_compression_dxt5 - -#endif /* GL_ANGLE_texture_compression_dxt5 */ - -#ifdef GL_ANGLE_texture_usage - -#endif /* GL_ANGLE_texture_usage */ - -#ifdef GL_ANGLE_timer_query - -static GLboolean _glewInit_GL_ANGLE_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQueryANGLE = (PFNGLBEGINQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryANGLE")) == NULL) || r; - r = ((glDeleteQueriesANGLE = (PFNGLDELETEQUERIESANGLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesANGLE")) == NULL) || r; - r = ((glEndQueryANGLE = (PFNGLENDQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glEndQueryANGLE")) == NULL) || r; - r = ((glGenQueriesANGLE = (PFNGLGENQUERIESANGLEPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesANGLE")) == NULL) || r; - r = ((glGetQueryObjecti64vANGLE = (PFNGLGETQUERYOBJECTI64VANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vANGLE")) == NULL) || r; - r = ((glGetQueryObjectivANGLE = (PFNGLGETQUERYOBJECTIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivANGLE")) == NULL) || r; - r = ((glGetQueryObjectui64vANGLE = (PFNGLGETQUERYOBJECTUI64VANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vANGLE")) == NULL) || r; - r = ((glGetQueryObjectuivANGLE = (PFNGLGETQUERYOBJECTUIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivANGLE")) == NULL) || r; - r = ((glGetQueryivANGLE = (PFNGLGETQUERYIVANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivANGLE")) == NULL) || r; - r = ((glIsQueryANGLE = (PFNGLISQUERYANGLEPROC)glewGetProcAddress((const GLubyte*)"glIsQueryANGLE")) == NULL) || r; - r = ((glQueryCounterANGLE = (PFNGLQUERYCOUNTERANGLEPROC)glewGetProcAddress((const GLubyte*)"glQueryCounterANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_timer_query */ - -#ifdef GL_ANGLE_translated_shader_source - -static GLboolean _glewInit_GL_ANGLE_translated_shader_source (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTranslatedShaderSourceANGLE = (PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC)glewGetProcAddress((const GLubyte*)"glGetTranslatedShaderSourceANGLE")) == NULL) || r; - - return r; -} - -#endif /* GL_ANGLE_translated_shader_source */ - -#ifdef GL_APPLE_aux_depth_stencil - -#endif /* GL_APPLE_aux_depth_stencil */ - -#ifdef GL_APPLE_client_storage - -#endif /* GL_APPLE_client_storage */ - -#ifdef GL_APPLE_element_array - -static GLboolean _glewInit_GL_APPLE_element_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawElementArrayAPPLE = (PFNGLDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayAPPLE")) == NULL) || r; - r = ((glDrawRangeElementArrayAPPLE = (PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayAPPLE")) == NULL) || r; - r = ((glElementPointerAPPLE = (PFNGLELEMENTPOINTERAPPLEPROC)glewGetProcAddress((const GLubyte*)"glElementPointerAPPLE")) == NULL) || r; - r = ((glMultiDrawElementArrayAPPLE = (PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementArrayAPPLE")) == NULL) || r; - r = ((glMultiDrawRangeElementArrayAPPLE = (PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawRangeElementArrayAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_element_array */ - -#ifdef GL_APPLE_fence - -static GLboolean _glewInit_GL_APPLE_fence (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDeleteFencesAPPLE = (PFNGLDELETEFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesAPPLE")) == NULL) || r; - r = ((glFinishFenceAPPLE = (PFNGLFINISHFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceAPPLE")) == NULL) || r; - r = ((glFinishObjectAPPLE = (PFNGLFINISHOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFinishObjectAPPLE")) == NULL) || r; - r = ((glGenFencesAPPLE = (PFNGLGENFENCESAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenFencesAPPLE")) == NULL) || r; - r = ((glIsFenceAPPLE = (PFNGLISFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsFenceAPPLE")) == NULL) || r; - r = ((glSetFenceAPPLE = (PFNGLSETFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glSetFenceAPPLE")) == NULL) || r; - r = ((glTestFenceAPPLE = (PFNGLTESTFENCEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestFenceAPPLE")) == NULL) || r; - r = ((glTestObjectAPPLE = (PFNGLTESTOBJECTAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTestObjectAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_fence */ - -#ifdef GL_APPLE_float_pixels - -#endif /* GL_APPLE_float_pixels */ - -#ifdef GL_APPLE_flush_buffer_range - -static GLboolean _glewInit_GL_APPLE_flush_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferParameteriAPPLE = (PFNGLBUFFERPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBufferParameteriAPPLE")) == NULL) || r; - r = ((glFlushMappedBufferRangeAPPLE = (PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRangeAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_flush_buffer_range */ - -#ifdef GL_APPLE_object_purgeable - -static GLboolean _glewInit_GL_APPLE_object_purgeable (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetObjectParameterivAPPLE = (PFNGLGETOBJECTPARAMETERIVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivAPPLE")) == NULL) || r; - r = ((glObjectPurgeableAPPLE = (PFNGLOBJECTPURGEABLEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glObjectPurgeableAPPLE")) == NULL) || r; - r = ((glObjectUnpurgeableAPPLE = (PFNGLOBJECTUNPURGEABLEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glObjectUnpurgeableAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_object_purgeable */ - -#ifdef GL_APPLE_pixel_buffer - -#endif /* GL_APPLE_pixel_buffer */ - -#ifdef GL_APPLE_rgb_422 - -#endif /* GL_APPLE_rgb_422 */ - -#ifdef GL_APPLE_row_bytes - -#endif /* GL_APPLE_row_bytes */ - -#ifdef GL_APPLE_specular_vector - -#endif /* GL_APPLE_specular_vector */ - -#ifdef GL_APPLE_texture_range - -static GLboolean _glewInit_GL_APPLE_texture_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTexParameterPointervAPPLE = (PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterPointervAPPLE")) == NULL) || r; - r = ((glTextureRangeAPPLE = (PFNGLTEXTURERANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glTextureRangeAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_texture_range */ - -#ifdef GL_APPLE_transform_hint - -#endif /* GL_APPLE_transform_hint */ - -#ifdef GL_APPLE_vertex_array_object - -static GLboolean _glewInit_GL_APPLE_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindVertexArrayAPPLE = (PFNGLBINDVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArrayAPPLE")) == NULL) || r; - r = ((glDeleteVertexArraysAPPLE = (PFNGLDELETEVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArraysAPPLE")) == NULL) || r; - r = ((glGenVertexArraysAPPLE = (PFNGLGENVERTEXARRAYSAPPLEPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArraysAPPLE")) == NULL) || r; - r = ((glIsVertexArrayAPPLE = (PFNGLISVERTEXARRAYAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArrayAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_vertex_array_object */ - -#ifdef GL_APPLE_vertex_array_range - -static GLboolean _glewInit_GL_APPLE_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushVertexArrayRangeAPPLE = (PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeAPPLE")) == NULL) || r; - r = ((glVertexArrayParameteriAPPLE = (PFNGLVERTEXARRAYPARAMETERIAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayParameteriAPPLE")) == NULL) || r; - r = ((glVertexArrayRangeAPPLE = (PFNGLVERTEXARRAYRANGEAPPLEPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_vertex_array_range */ - -#ifdef GL_APPLE_vertex_program_evaluators - -static GLboolean _glewInit_GL_APPLE_vertex_program_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDisableVertexAttribAPPLE = (PFNGLDISABLEVERTEXATTRIBAPPLEPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribAPPLE")) == NULL) || r; - r = ((glEnableVertexAttribAPPLE = (PFNGLENABLEVERTEXATTRIBAPPLEPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribAPPLE")) == NULL) || r; - r = ((glIsVertexAttribEnabledAPPLE = (PFNGLISVERTEXATTRIBENABLEDAPPLEPROC)glewGetProcAddress((const GLubyte*)"glIsVertexAttribEnabledAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib1dAPPLE = (PFNGLMAPVERTEXATTRIB1DAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib1dAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib1fAPPLE = (PFNGLMAPVERTEXATTRIB1FAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib1fAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib2dAPPLE = (PFNGLMAPVERTEXATTRIB2DAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib2dAPPLE")) == NULL) || r; - r = ((glMapVertexAttrib2fAPPLE = (PFNGLMAPVERTEXATTRIB2FAPPLEPROC)glewGetProcAddress((const GLubyte*)"glMapVertexAttrib2fAPPLE")) == NULL) || r; - - return r; -} - -#endif /* GL_APPLE_vertex_program_evaluators */ - -#ifdef GL_APPLE_ycbcr_422 - -#endif /* GL_APPLE_ycbcr_422 */ - -#ifdef GL_ARB_ES2_compatibility - -static GLboolean _glewInit_GL_ARB_ES2_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearDepthf = (PFNGLCLEARDEPTHFPROC)glewGetProcAddress((const GLubyte*)"glClearDepthf")) == NULL) || r; - r = ((glDepthRangef = (PFNGLDEPTHRANGEFPROC)glewGetProcAddress((const GLubyte*)"glDepthRangef")) == NULL) || r; - r = ((glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)glewGetProcAddress((const GLubyte*)"glGetShaderPrecisionFormat")) == NULL) || r; - r = ((glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)glewGetProcAddress((const GLubyte*)"glReleaseShaderCompiler")) == NULL) || r; - r = ((glShaderBinary = (PFNGLSHADERBINARYPROC)glewGetProcAddress((const GLubyte*)"glShaderBinary")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_ES2_compatibility */ - -#ifdef GL_ARB_ES3_compatibility - -#endif /* GL_ARB_ES3_compatibility */ - -#ifdef GL_ARB_arrays_of_arrays - -#endif /* GL_ARB_arrays_of_arrays */ - -#ifdef GL_ARB_base_instance - -static GLboolean _glewInit_GL_ARB_base_instance (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedBaseInstance = (PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedBaseInstance")) == NULL) || r; - r = ((glDrawElementsInstancedBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseInstance")) == NULL) || r; - r = ((glDrawElementsInstancedBaseVertexBaseInstance = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseVertexBaseInstance")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_base_instance */ - -#ifdef GL_ARB_bindless_texture - -static GLboolean _glewInit_GL_ARB_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetImageHandleARB = (PFNGLGETIMAGEHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetImageHandleARB")) == NULL) || r; - r = ((glGetTextureHandleARB = (PFNGLGETTEXTUREHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetTextureHandleARB")) == NULL) || r; - r = ((glGetTextureSamplerHandleARB = (PFNGLGETTEXTURESAMPLERHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetTextureSamplerHandleARB")) == NULL) || r; - r = ((glGetVertexAttribLui64vARB = (PFNGLGETVERTEXATTRIBLUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLui64vARB")) == NULL) || r; - r = ((glIsImageHandleResidentARB = (PFNGLISIMAGEHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glIsImageHandleResidentARB")) == NULL) || r; - r = ((glIsTextureHandleResidentARB = (PFNGLISTEXTUREHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glIsTextureHandleResidentARB")) == NULL) || r; - r = ((glMakeImageHandleNonResidentARB = (PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleNonResidentARB")) == NULL) || r; - r = ((glMakeImageHandleResidentARB = (PFNGLMAKEIMAGEHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleResidentARB")) == NULL) || r; - r = ((glMakeTextureHandleNonResidentARB = (PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleNonResidentARB")) == NULL) || r; - r = ((glMakeTextureHandleResidentARB = (PFNGLMAKETEXTUREHANDLERESIDENTARBPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleResidentARB")) == NULL) || r; - r = ((glProgramUniformHandleui64ARB = (PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64ARB")) == NULL) || r; - r = ((glProgramUniformHandleui64vARB = (PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64vARB")) == NULL) || r; - r = ((glUniformHandleui64ARB = (PFNGLUNIFORMHANDLEUI64ARBPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64ARB")) == NULL) || r; - r = ((glUniformHandleui64vARB = (PFNGLUNIFORMHANDLEUI64VARBPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64vARB")) == NULL) || r; - r = ((glVertexAttribL1ui64ARB = (PFNGLVERTEXATTRIBL1UI64ARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64ARB")) == NULL) || r; - r = ((glVertexAttribL1ui64vARB = (PFNGLVERTEXATTRIBL1UI64VARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64vARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_bindless_texture */ - -#ifdef GL_ARB_blend_func_extended - -static GLboolean _glewInit_GL_ARB_blend_func_extended (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationIndexed")) == NULL) || r; - r = ((glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataIndex")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_blend_func_extended */ - -#ifdef GL_ARB_buffer_storage - -static GLboolean _glewInit_GL_ARB_buffer_storage (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferStorage = (PFNGLBUFFERSTORAGEPROC)glewGetProcAddress((const GLubyte*)"glBufferStorage")) == NULL) || r; - r = ((glNamedBufferStorageEXT = (PFNGLNAMEDBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferStorageEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_buffer_storage */ - -#ifdef GL_ARB_cl_event - -static GLboolean _glewInit_GL_ARB_cl_event (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCreateSyncFromCLeventARB = (PFNGLCREATESYNCFROMCLEVENTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateSyncFromCLeventARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_cl_event */ - -#ifdef GL_ARB_clear_buffer_object - -static GLboolean _glewInit_GL_ARB_clear_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearBufferData = (PFNGLCLEARBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glClearBufferData")) == NULL) || r; - r = ((glClearBufferSubData = (PFNGLCLEARBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glClearBufferSubData")) == NULL) || r; - r = ((glClearNamedBufferDataEXT = (PFNGLCLEARNAMEDBUFFERDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glClearNamedBufferDataEXT")) == NULL) || r; - r = ((glClearNamedBufferSubDataEXT = (PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glClearNamedBufferSubDataEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_clear_buffer_object */ - -#ifdef GL_ARB_clear_texture - -static GLboolean _glewInit_GL_ARB_clear_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearTexImage = (PFNGLCLEARTEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glClearTexImage")) == NULL) || r; - r = ((glClearTexSubImage = (PFNGLCLEARTEXSUBIMAGEPROC)glewGetProcAddress((const GLubyte*)"glClearTexSubImage")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_clear_texture */ - -#ifdef GL_ARB_color_buffer_float - -static GLboolean _glewInit_GL_ARB_color_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClampColorARB = (PFNGLCLAMPCOLORARBPROC)glewGetProcAddress((const GLubyte*)"glClampColorARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_color_buffer_float */ - -#ifdef GL_ARB_compatibility - -#endif /* GL_ARB_compatibility */ - -#ifdef GL_ARB_compressed_texture_pixel_storage - -#endif /* GL_ARB_compressed_texture_pixel_storage */ - -#ifdef GL_ARB_compute_shader - -static GLboolean _glewInit_GL_ARB_compute_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDispatchCompute = (PFNGLDISPATCHCOMPUTEPROC)glewGetProcAddress((const GLubyte*)"glDispatchCompute")) == NULL) || r; - r = ((glDispatchComputeIndirect = (PFNGLDISPATCHCOMPUTEINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDispatchComputeIndirect")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_compute_shader */ - -#ifdef GL_ARB_compute_variable_group_size - -static GLboolean _glewInit_GL_ARB_compute_variable_group_size (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDispatchComputeGroupSizeARB = (PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC)glewGetProcAddress((const GLubyte*)"glDispatchComputeGroupSizeARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_compute_variable_group_size */ - -#ifdef GL_ARB_conservative_depth - -#endif /* GL_ARB_conservative_depth */ - -#ifdef GL_ARB_copy_buffer - -static GLboolean _glewInit_GL_ARB_copy_buffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glCopyBufferSubData")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_copy_buffer */ - -#ifdef GL_ARB_copy_image - -static GLboolean _glewInit_GL_ARB_copy_image (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyImageSubData = (PFNGLCOPYIMAGESUBDATAPROC)glewGetProcAddress((const GLubyte*)"glCopyImageSubData")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_copy_image */ - -#ifdef GL_ARB_debug_output - -static GLboolean _glewInit_GL_ARB_debug_output (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallbackARB")) == NULL) || r; - r = ((glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageControlARB")) == NULL) || r; - r = ((glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsertARB")) == NULL) || r; - r = ((glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLogARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_debug_output */ - -#ifdef GL_ARB_depth_buffer_float - -#endif /* GL_ARB_depth_buffer_float */ - -#ifdef GL_ARB_depth_clamp - -#endif /* GL_ARB_depth_clamp */ - -#ifdef GL_ARB_depth_texture - -#endif /* GL_ARB_depth_texture */ - -#ifdef GL_ARB_draw_buffers - -static GLboolean _glewInit_GL_ARB_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_buffers */ - -#ifdef GL_ARB_draw_buffers_blend - -static GLboolean _glewInit_GL_ARB_draw_buffers_blend (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateiARB")) == NULL) || r; - r = ((glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationiARB")) == NULL) || r; - r = ((glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateiARB")) == NULL) || r; - r = ((glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC)glewGetProcAddress((const GLubyte*)"glBlendFunciARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_buffers_blend */ - -#ifdef GL_ARB_draw_elements_base_vertex - -static GLboolean _glewInit_GL_ARB_draw_elements_base_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsBaseVertex")) == NULL) || r; - r = ((glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedBaseVertex")) == NULL) || r; - r = ((glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsBaseVertex")) == NULL) || r; - r = ((glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsBaseVertex")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_elements_base_vertex */ - -#ifdef GL_ARB_draw_indirect - -static GLboolean _glewInit_GL_ARB_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysIndirect = (PFNGLDRAWARRAYSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysIndirect")) == NULL) || r; - r = ((glDrawElementsIndirect = (PFNGLDRAWELEMENTSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsIndirect")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_draw_indirect */ - -#ifdef GL_ARB_draw_instanced - -#endif /* GL_ARB_draw_instanced */ - -#ifdef GL_ARB_enhanced_layouts - -#endif /* GL_ARB_enhanced_layouts */ - -#ifdef GL_ARB_explicit_attrib_location - -#endif /* GL_ARB_explicit_attrib_location */ - -#ifdef GL_ARB_explicit_uniform_location - -#endif /* GL_ARB_explicit_uniform_location */ - -#ifdef GL_ARB_fragment_coord_conventions - -#endif /* GL_ARB_fragment_coord_conventions */ - -#ifdef GL_ARB_fragment_layer_viewport - -#endif /* GL_ARB_fragment_layer_viewport */ - -#ifdef GL_ARB_fragment_program - -#endif /* GL_ARB_fragment_program */ - -#ifdef GL_ARB_fragment_program_shadow - -#endif /* GL_ARB_fragment_program_shadow */ - -#ifdef GL_ARB_fragment_shader - -#endif /* GL_ARB_fragment_shader */ - -#ifdef GL_ARB_framebuffer_no_attachments - -static GLboolean _glewInit_GL_ARB_framebuffer_no_attachments (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferParameteri = (PFNGLFRAMEBUFFERPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glFramebufferParameteri")) == NULL) || r; - r = ((glGetFramebufferParameteriv = (PFNGLGETFRAMEBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferParameteriv")) == NULL) || r; - r = ((glGetNamedFramebufferParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedFramebufferParameterivEXT")) == NULL) || r; - r = ((glNamedFramebufferParameteriEXT = (PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferParameteriEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_framebuffer_no_attachments */ - -#ifdef GL_ARB_framebuffer_object - -static GLboolean _glewInit_GL_ARB_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindFramebuffer")) == NULL) || r; - r = ((glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbuffer")) == NULL) || r; - r = ((glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebuffer")) == NULL) || r; - r = ((glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatus")) == NULL) || r; - r = ((glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffers")) == NULL) || r; - r = ((glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffers")) == NULL) || r; - r = ((glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbuffer")) == NULL) || r; - r = ((glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1D")) == NULL) || r; - r = ((glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2D")) == NULL) || r; - r = ((glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3D")) == NULL) || r; - r = ((glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayer")) == NULL) || r; - r = ((glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffers")) == NULL) || r; - r = ((glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffers")) == NULL) || r; - r = ((glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmap")) == NULL) || r; - r = ((glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameteriv")) == NULL) || r; - r = ((glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameteriv")) == NULL) || r; - r = ((glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsFramebuffer")) == NULL) || r; - r = ((glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbuffer")) == NULL) || r; - r = ((glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorage")) == NULL) || r; - r = ((glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisample")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_framebuffer_object */ - -#ifdef GL_ARB_framebuffer_sRGB - -#endif /* GL_ARB_framebuffer_sRGB */ - -#ifdef GL_ARB_geometry_shader4 - -static GLboolean _glewInit_GL_ARB_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTextureARB = (PFNGLFRAMEBUFFERTEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureARB")) == NULL) || r; - r = ((glFramebufferTextureFaceARB = (PFNGLFRAMEBUFFERTEXTUREFACEARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceARB")) == NULL) || r; - r = ((glFramebufferTextureLayerARB = (PFNGLFRAMEBUFFERTEXTURELAYERARBPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerARB")) == NULL) || r; - r = ((glProgramParameteriARB = (PFNGLPROGRAMPARAMETERIARBPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_geometry_shader4 */ - -#ifdef GL_ARB_get_program_binary - -static GLboolean _glewInit_GL_ARB_get_program_binary (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetProgramBinary = (PFNGLGETPROGRAMBINARYPROC)glewGetProcAddress((const GLubyte*)"glGetProgramBinary")) == NULL) || r; - r = ((glProgramBinary = (PFNGLPROGRAMBINARYPROC)glewGetProcAddress((const GLubyte*)"glProgramBinary")) == NULL) || r; - r = ((glProgramParameteri = (PFNGLPROGRAMPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteri")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_get_program_binary */ - -#ifdef GL_ARB_gpu_shader5 - -#endif /* GL_ARB_gpu_shader5 */ - -#ifdef GL_ARB_gpu_shader_fp64 - -static GLboolean _glewInit_GL_ARB_gpu_shader_fp64 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetUniformdv = (PFNGLGETUNIFORMDVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformdv")) == NULL) || r; - r = ((glUniform1d = (PFNGLUNIFORM1DPROC)glewGetProcAddress((const GLubyte*)"glUniform1d")) == NULL) || r; - r = ((glUniform1dv = (PFNGLUNIFORM1DVPROC)glewGetProcAddress((const GLubyte*)"glUniform1dv")) == NULL) || r; - r = ((glUniform2d = (PFNGLUNIFORM2DPROC)glewGetProcAddress((const GLubyte*)"glUniform2d")) == NULL) || r; - r = ((glUniform2dv = (PFNGLUNIFORM2DVPROC)glewGetProcAddress((const GLubyte*)"glUniform2dv")) == NULL) || r; - r = ((glUniform3d = (PFNGLUNIFORM3DPROC)glewGetProcAddress((const GLubyte*)"glUniform3d")) == NULL) || r; - r = ((glUniform3dv = (PFNGLUNIFORM3DVPROC)glewGetProcAddress((const GLubyte*)"glUniform3dv")) == NULL) || r; - r = ((glUniform4d = (PFNGLUNIFORM4DPROC)glewGetProcAddress((const GLubyte*)"glUniform4d")) == NULL) || r; - r = ((glUniform4dv = (PFNGLUNIFORM4DVPROC)glewGetProcAddress((const GLubyte*)"glUniform4dv")) == NULL) || r; - r = ((glUniformMatrix2dv = (PFNGLUNIFORMMATRIX2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2dv")) == NULL) || r; - r = ((glUniformMatrix2x3dv = (PFNGLUNIFORMMATRIX2X3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x3dv")) == NULL) || r; - r = ((glUniformMatrix2x4dv = (PFNGLUNIFORMMATRIX2X4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2x4dv")) == NULL) || r; - r = ((glUniformMatrix3dv = (PFNGLUNIFORMMATRIX3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3dv")) == NULL) || r; - r = ((glUniformMatrix3x2dv = (PFNGLUNIFORMMATRIX3X2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x2dv")) == NULL) || r; - r = ((glUniformMatrix3x4dv = (PFNGLUNIFORMMATRIX3X4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3x4dv")) == NULL) || r; - r = ((glUniformMatrix4dv = (PFNGLUNIFORMMATRIX4DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4dv")) == NULL) || r; - r = ((glUniformMatrix4x2dv = (PFNGLUNIFORMMATRIX4X2DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x2dv")) == NULL) || r; - r = ((glUniformMatrix4x3dv = (PFNGLUNIFORMMATRIX4X3DVPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4x3dv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_gpu_shader_fp64 */ - -#ifdef GL_ARB_half_float_pixel - -#endif /* GL_ARB_half_float_pixel */ - -#ifdef GL_ARB_half_float_vertex - -#endif /* GL_ARB_half_float_vertex */ - -#ifdef GL_ARB_imaging - -static GLboolean _glewInit_GL_ARB_imaging (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)"glBlendEquation")) == NULL) || r; - r = ((glColorSubTable = (PFNGLCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorSubTable")) == NULL) || r; - r = ((glColorTable = (PFNGLCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glColorTable")) == NULL) || r; - r = ((glColorTableParameterfv = (PFNGLCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfv")) == NULL) || r; - r = ((glColorTableParameteriv = (PFNGLCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameteriv")) == NULL) || r; - r = ((glConvolutionFilter1D = (PFNGLCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1D")) == NULL) || r; - r = ((glConvolutionFilter2D = (PFNGLCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2D")) == NULL) || r; - r = ((glConvolutionParameterf = (PFNGLCONVOLUTIONPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterf")) == NULL) || r; - r = ((glConvolutionParameterfv = (PFNGLCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfv")) == NULL) || r; - r = ((glConvolutionParameteri = (PFNGLCONVOLUTIONPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteri")) == NULL) || r; - r = ((glConvolutionParameteriv = (PFNGLCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriv")) == NULL) || r; - r = ((glCopyColorSubTable = (PFNGLCOPYCOLORSUBTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTable")) == NULL) || r; - r = ((glCopyColorTable = (PFNGLCOPYCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTable")) == NULL) || r; - r = ((glCopyConvolutionFilter1D = (PFNGLCOPYCONVOLUTIONFILTER1DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1D")) == NULL) || r; - r = ((glCopyConvolutionFilter2D = (PFNGLCOPYCONVOLUTIONFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2D")) == NULL) || r; - r = ((glGetColorTable = (PFNGLGETCOLORTABLEPROC)glewGetProcAddress((const GLubyte*)"glGetColorTable")) == NULL) || r; - r = ((glGetColorTableParameterfv = (PFNGLGETCOLORTABLEPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfv")) == NULL) || r; - r = ((glGetColorTableParameteriv = (PFNGLGETCOLORTABLEPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameteriv")) == NULL) || r; - r = ((glGetConvolutionFilter = (PFNGLGETCONVOLUTIONFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilter")) == NULL) || r; - r = ((glGetConvolutionParameterfv = (PFNGLGETCONVOLUTIONPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfv")) == NULL) || r; - r = ((glGetConvolutionParameteriv = (PFNGLGETCONVOLUTIONPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameteriv")) == NULL) || r; - r = ((glGetHistogram = (PFNGLGETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glGetHistogram")) == NULL) || r; - r = ((glGetHistogramParameterfv = (PFNGLGETHISTOGRAMPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfv")) == NULL) || r; - r = ((glGetHistogramParameteriv = (PFNGLGETHISTOGRAMPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameteriv")) == NULL) || r; - r = ((glGetMinmax = (PFNGLGETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glGetMinmax")) == NULL) || r; - r = ((glGetMinmaxParameterfv = (PFNGLGETMINMAXPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfv")) == NULL) || r; - r = ((glGetMinmaxParameteriv = (PFNGLGETMINMAXPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameteriv")) == NULL) || r; - r = ((glGetSeparableFilter = (PFNGLGETSEPARABLEFILTERPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilter")) == NULL) || r; - r = ((glHistogram = (PFNGLHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glHistogram")) == NULL) || r; - r = ((glMinmax = (PFNGLMINMAXPROC)glewGetProcAddress((const GLubyte*)"glMinmax")) == NULL) || r; - r = ((glResetHistogram = (PFNGLRESETHISTOGRAMPROC)glewGetProcAddress((const GLubyte*)"glResetHistogram")) == NULL) || r; - r = ((glResetMinmax = (PFNGLRESETMINMAXPROC)glewGetProcAddress((const GLubyte*)"glResetMinmax")) == NULL) || r; - r = ((glSeparableFilter2D = (PFNGLSEPARABLEFILTER2DPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2D")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_imaging */ - -#ifdef GL_ARB_indirect_parameters - -static GLboolean _glewInit_GL_ARB_indirect_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirectCountARB = (PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectCountARB")) == NULL) || r; - r = ((glMultiDrawElementsIndirectCountARB = (PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectCountARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_indirect_parameters */ - -#ifdef GL_ARB_instanced_arrays - -static GLboolean _glewInit_GL_ARB_instanced_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedARB = (PFNGLDRAWARRAYSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedARB")) == NULL) || r; - r = ((glDrawElementsInstancedARB = (PFNGLDRAWELEMENTSINSTANCEDARBPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedARB")) == NULL) || r; - r = ((glVertexAttribDivisorARB = (PFNGLVERTEXATTRIBDIVISORARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribDivisorARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_instanced_arrays */ - -#ifdef GL_ARB_internalformat_query - -static GLboolean _glewInit_GL_ARB_internalformat_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetInternalformativ = (PFNGLGETINTERNALFORMATIVPROC)glewGetProcAddress((const GLubyte*)"glGetInternalformativ")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_internalformat_query */ - -#ifdef GL_ARB_internalformat_query2 - -static GLboolean _glewInit_GL_ARB_internalformat_query2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetInternalformati64v = (PFNGLGETINTERNALFORMATI64VPROC)glewGetProcAddress((const GLubyte*)"glGetInternalformati64v")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_internalformat_query2 */ - -#ifdef GL_ARB_invalidate_subdata - -static GLboolean _glewInit_GL_ARB_invalidate_subdata (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glInvalidateBufferData = (PFNGLINVALIDATEBUFFERDATAPROC)glewGetProcAddress((const GLubyte*)"glInvalidateBufferData")) == NULL) || r; - r = ((glInvalidateBufferSubData = (PFNGLINVALIDATEBUFFERSUBDATAPROC)glewGetProcAddress((const GLubyte*)"glInvalidateBufferSubData")) == NULL) || r; - r = ((glInvalidateFramebuffer = (PFNGLINVALIDATEFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glInvalidateFramebuffer")) == NULL) || r; - r = ((glInvalidateSubFramebuffer = (PFNGLINVALIDATESUBFRAMEBUFFERPROC)glewGetProcAddress((const GLubyte*)"glInvalidateSubFramebuffer")) == NULL) || r; - r = ((glInvalidateTexImage = (PFNGLINVALIDATETEXIMAGEPROC)glewGetProcAddress((const GLubyte*)"glInvalidateTexImage")) == NULL) || r; - r = ((glInvalidateTexSubImage = (PFNGLINVALIDATETEXSUBIMAGEPROC)glewGetProcAddress((const GLubyte*)"glInvalidateTexSubImage")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_invalidate_subdata */ - -#ifdef GL_ARB_map_buffer_alignment - -#endif /* GL_ARB_map_buffer_alignment */ - -#ifdef GL_ARB_map_buffer_range - -static GLboolean _glewInit_GL_ARB_map_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedBufferRange")) == NULL) || r; - r = ((glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glMapBufferRange")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_map_buffer_range */ - -#ifdef GL_ARB_matrix_palette - -static GLboolean _glewInit_GL_ARB_matrix_palette (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCurrentPaletteMatrixARB = (PFNGLCURRENTPALETTEMATRIXARBPROC)glewGetProcAddress((const GLubyte*)"glCurrentPaletteMatrixARB")) == NULL) || r; - r = ((glMatrixIndexPointerARB = (PFNGLMATRIXINDEXPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexPointerARB")) == NULL) || r; - r = ((glMatrixIndexubvARB = (PFNGLMATRIXINDEXUBVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexubvARB")) == NULL) || r; - r = ((glMatrixIndexuivARB = (PFNGLMATRIXINDEXUIVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexuivARB")) == NULL) || r; - r = ((glMatrixIndexusvARB = (PFNGLMATRIXINDEXUSVARBPROC)glewGetProcAddress((const GLubyte*)"glMatrixIndexusvARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_matrix_palette */ - -#ifdef GL_ARB_multi_bind - -static GLboolean _glewInit_GL_ARB_multi_bind (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindBuffersBase = (PFNGLBINDBUFFERSBASEPROC)glewGetProcAddress((const GLubyte*)"glBindBuffersBase")) == NULL) || r; - r = ((glBindBuffersRange = (PFNGLBINDBUFFERSRANGEPROC)glewGetProcAddress((const GLubyte*)"glBindBuffersRange")) == NULL) || r; - r = ((glBindImageTextures = (PFNGLBINDIMAGETEXTURESPROC)glewGetProcAddress((const GLubyte*)"glBindImageTextures")) == NULL) || r; - r = ((glBindSamplers = (PFNGLBINDSAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glBindSamplers")) == NULL) || r; - r = ((glBindTextures = (PFNGLBINDTEXTURESPROC)glewGetProcAddress((const GLubyte*)"glBindTextures")) == NULL) || r; - r = ((glBindVertexBuffers = (PFNGLBINDVERTEXBUFFERSPROC)glewGetProcAddress((const GLubyte*)"glBindVertexBuffers")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multi_bind */ - -#ifdef GL_ARB_multi_draw_indirect - -static GLboolean _glewInit_GL_ARB_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirect = (PFNGLMULTIDRAWARRAYSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirect")) == NULL) || r; - r = ((glMultiDrawElementsIndirect = (PFNGLMULTIDRAWELEMENTSINDIRECTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirect")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multi_draw_indirect */ - -#ifdef GL_ARB_multisample - -static GLboolean _glewInit_GL_ARB_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)glewGetProcAddress((const GLubyte*)"glSampleCoverageARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multisample */ - -#ifdef GL_ARB_multitexture - -static GLboolean _glewInit_GL_ARB_multitexture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glActiveTextureARB")) == NULL) || r; - r = ((glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)glewGetProcAddress((const GLubyte*)"glClientActiveTextureARB")) == NULL) || r; - r = ((glMultiTexCoord1dARB = (PFNGLMULTITEXCOORD1DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dARB")) == NULL) || r; - r = ((glMultiTexCoord1dvARB = (PFNGLMULTITEXCOORD1DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1dvARB")) == NULL) || r; - r = ((glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fARB")) == NULL) || r; - r = ((glMultiTexCoord1fvARB = (PFNGLMULTITEXCOORD1FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1fvARB")) == NULL) || r; - r = ((glMultiTexCoord1iARB = (PFNGLMULTITEXCOORD1IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1iARB")) == NULL) || r; - r = ((glMultiTexCoord1ivARB = (PFNGLMULTITEXCOORD1IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1ivARB")) == NULL) || r; - r = ((glMultiTexCoord1sARB = (PFNGLMULTITEXCOORD1SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1sARB")) == NULL) || r; - r = ((glMultiTexCoord1svARB = (PFNGLMULTITEXCOORD1SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1svARB")) == NULL) || r; - r = ((glMultiTexCoord2dARB = (PFNGLMULTITEXCOORD2DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dARB")) == NULL) || r; - r = ((glMultiTexCoord2dvARB = (PFNGLMULTITEXCOORD2DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2dvARB")) == NULL) || r; - r = ((glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fARB")) == NULL) || r; - r = ((glMultiTexCoord2fvARB = (PFNGLMULTITEXCOORD2FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2fvARB")) == NULL) || r; - r = ((glMultiTexCoord2iARB = (PFNGLMULTITEXCOORD2IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2iARB")) == NULL) || r; - r = ((glMultiTexCoord2ivARB = (PFNGLMULTITEXCOORD2IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2ivARB")) == NULL) || r; - r = ((glMultiTexCoord2sARB = (PFNGLMULTITEXCOORD2SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2sARB")) == NULL) || r; - r = ((glMultiTexCoord2svARB = (PFNGLMULTITEXCOORD2SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2svARB")) == NULL) || r; - r = ((glMultiTexCoord3dARB = (PFNGLMULTITEXCOORD3DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dARB")) == NULL) || r; - r = ((glMultiTexCoord3dvARB = (PFNGLMULTITEXCOORD3DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3dvARB")) == NULL) || r; - r = ((glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fARB")) == NULL) || r; - r = ((glMultiTexCoord3fvARB = (PFNGLMULTITEXCOORD3FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3fvARB")) == NULL) || r; - r = ((glMultiTexCoord3iARB = (PFNGLMULTITEXCOORD3IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3iARB")) == NULL) || r; - r = ((glMultiTexCoord3ivARB = (PFNGLMULTITEXCOORD3IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3ivARB")) == NULL) || r; - r = ((glMultiTexCoord3sARB = (PFNGLMULTITEXCOORD3SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3sARB")) == NULL) || r; - r = ((glMultiTexCoord3svARB = (PFNGLMULTITEXCOORD3SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3svARB")) == NULL) || r; - r = ((glMultiTexCoord4dARB = (PFNGLMULTITEXCOORD4DARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dARB")) == NULL) || r; - r = ((glMultiTexCoord4dvARB = (PFNGLMULTITEXCOORD4DVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4dvARB")) == NULL) || r; - r = ((glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fARB")) == NULL) || r; - r = ((glMultiTexCoord4fvARB = (PFNGLMULTITEXCOORD4FVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4fvARB")) == NULL) || r; - r = ((glMultiTexCoord4iARB = (PFNGLMULTITEXCOORD4IARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4iARB")) == NULL) || r; - r = ((glMultiTexCoord4ivARB = (PFNGLMULTITEXCOORD4IVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4ivARB")) == NULL) || r; - r = ((glMultiTexCoord4sARB = (PFNGLMULTITEXCOORD4SARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4sARB")) == NULL) || r; - r = ((glMultiTexCoord4svARB = (PFNGLMULTITEXCOORD4SVARBPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4svARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_multitexture */ - -#ifdef GL_ARB_occlusion_query - -static GLboolean _glewInit_GL_ARB_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQueryARB = (PFNGLBEGINQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryARB")) == NULL) || r; - r = ((glDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteQueriesARB")) == NULL) || r; - r = ((glEndQueryARB = (PFNGLENDQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glEndQueryARB")) == NULL) || r; - r = ((glGenQueriesARB = (PFNGLGENQUERIESARBPROC)glewGetProcAddress((const GLubyte*)"glGenQueriesARB")) == NULL) || r; - r = ((glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectivARB")) == NULL) || r; - r = ((glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectuivARB")) == NULL) || r; - r = ((glGetQueryivARB = (PFNGLGETQUERYIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetQueryivARB")) == NULL) || r; - r = ((glIsQueryARB = (PFNGLISQUERYARBPROC)glewGetProcAddress((const GLubyte*)"glIsQueryARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_occlusion_query */ - -#ifdef GL_ARB_occlusion_query2 - -#endif /* GL_ARB_occlusion_query2 */ - -#ifdef GL_ARB_pixel_buffer_object - -#endif /* GL_ARB_pixel_buffer_object */ - -#ifdef GL_ARB_point_parameters - -static GLboolean _glewInit_GL_ARB_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfARB")) == NULL) || r; - r = ((glPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_point_parameters */ - -#ifdef GL_ARB_point_sprite - -#endif /* GL_ARB_point_sprite */ - -#ifdef GL_ARB_program_interface_query - -static GLboolean _glewInit_GL_ARB_program_interface_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetProgramInterfaceiv = (PFNGLGETPROGRAMINTERFACEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramInterfaceiv")) == NULL) || r; - r = ((glGetProgramResourceIndex = (PFNGLGETPROGRAMRESOURCEINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceIndex")) == NULL) || r; - r = ((glGetProgramResourceLocation = (PFNGLGETPROGRAMRESOURCELOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceLocation")) == NULL) || r; - r = ((glGetProgramResourceLocationIndex = (PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceLocationIndex")) == NULL) || r; - r = ((glGetProgramResourceName = (PFNGLGETPROGRAMRESOURCENAMEPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceName")) == NULL) || r; - r = ((glGetProgramResourceiv = (PFNGLGETPROGRAMRESOURCEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramResourceiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_program_interface_query */ - -#ifdef GL_ARB_provoking_vertex - -static GLboolean _glewInit_GL_ARB_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)glewGetProcAddress((const GLubyte*)"glProvokingVertex")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_provoking_vertex */ - -#ifdef GL_ARB_query_buffer_object - -#endif /* GL_ARB_query_buffer_object */ - -#ifdef GL_ARB_robust_buffer_access_behavior - -#endif /* GL_ARB_robust_buffer_access_behavior */ - -#ifdef GL_ARB_robustness - -static GLboolean _glewInit_GL_ARB_robustness (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetGraphicsResetStatusARB = (PFNGLGETGRAPHICSRESETSTATUSARBPROC)glewGetProcAddress((const GLubyte*)"glGetGraphicsResetStatusARB")) == NULL) || r; - r = ((glGetnColorTableARB = (PFNGLGETNCOLORTABLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnColorTableARB")) == NULL) || r; - r = ((glGetnCompressedTexImageARB = (PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnCompressedTexImageARB")) == NULL) || r; - r = ((glGetnConvolutionFilterARB = (PFNGLGETNCONVOLUTIONFILTERARBPROC)glewGetProcAddress((const GLubyte*)"glGetnConvolutionFilterARB")) == NULL) || r; - r = ((glGetnHistogramARB = (PFNGLGETNHISTOGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glGetnHistogramARB")) == NULL) || r; - r = ((glGetnMapdvARB = (PFNGLGETNMAPDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapdvARB")) == NULL) || r; - r = ((glGetnMapfvARB = (PFNGLGETNMAPFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapfvARB")) == NULL) || r; - r = ((glGetnMapivARB = (PFNGLGETNMAPIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMapivARB")) == NULL) || r; - r = ((glGetnMinmaxARB = (PFNGLGETNMINMAXARBPROC)glewGetProcAddress((const GLubyte*)"glGetnMinmaxARB")) == NULL) || r; - r = ((glGetnPixelMapfvARB = (PFNGLGETNPIXELMAPFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapfvARB")) == NULL) || r; - r = ((glGetnPixelMapuivARB = (PFNGLGETNPIXELMAPUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapuivARB")) == NULL) || r; - r = ((glGetnPixelMapusvARB = (PFNGLGETNPIXELMAPUSVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPixelMapusvARB")) == NULL) || r; - r = ((glGetnPolygonStippleARB = (PFNGLGETNPOLYGONSTIPPLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnPolygonStippleARB")) == NULL) || r; - r = ((glGetnSeparableFilterARB = (PFNGLGETNSEPARABLEFILTERARBPROC)glewGetProcAddress((const GLubyte*)"glGetnSeparableFilterARB")) == NULL) || r; - r = ((glGetnTexImageARB = (PFNGLGETNTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetnTexImageARB")) == NULL) || r; - r = ((glGetnUniformdvARB = (PFNGLGETNUNIFORMDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformdvARB")) == NULL) || r; - r = ((glGetnUniformfvARB = (PFNGLGETNUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformfvARB")) == NULL) || r; - r = ((glGetnUniformivARB = (PFNGLGETNUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformivARB")) == NULL) || r; - r = ((glGetnUniformuivARB = (PFNGLGETNUNIFORMUIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetnUniformuivARB")) == NULL) || r; - r = ((glReadnPixelsARB = (PFNGLREADNPIXELSARBPROC)glewGetProcAddress((const GLubyte*)"glReadnPixelsARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_robustness */ - -#ifdef GL_ARB_robustness_application_isolation - -#endif /* GL_ARB_robustness_application_isolation */ - -#ifdef GL_ARB_robustness_share_group_isolation - -#endif /* GL_ARB_robustness_share_group_isolation */ - -#ifdef GL_ARB_sample_shading - -static GLboolean _glewInit_GL_ARB_sample_shading (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMinSampleShadingARB = (PFNGLMINSAMPLESHADINGARBPROC)glewGetProcAddress((const GLubyte*)"glMinSampleShadingARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sample_shading */ - -#ifdef GL_ARB_sampler_objects - -static GLboolean _glewInit_GL_ARB_sampler_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindSampler = (PFNGLBINDSAMPLERPROC)glewGetProcAddress((const GLubyte*)"glBindSampler")) == NULL) || r; - r = ((glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glDeleteSamplers")) == NULL) || r; - r = ((glGenSamplers = (PFNGLGENSAMPLERSPROC)glewGetProcAddress((const GLubyte*)"glGenSamplers")) == NULL) || r; - r = ((glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterIiv")) == NULL) || r; - r = ((glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterIuiv")) == NULL) || r; - r = ((glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameterfv")) == NULL) || r; - r = ((glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glGetSamplerParameteriv")) == NULL) || r; - r = ((glIsSampler = (PFNGLISSAMPLERPROC)glewGetProcAddress((const GLubyte*)"glIsSampler")) == NULL) || r; - r = ((glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterIiv")) == NULL) || r; - r = ((glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterIuiv")) == NULL) || r; - r = ((glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterf")) == NULL) || r; - r = ((glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameterfv")) == NULL) || r; - r = ((glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameteri")) == NULL) || r; - r = ((glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)glewGetProcAddress((const GLubyte*)"glSamplerParameteriv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sampler_objects */ - -#ifdef GL_ARB_seamless_cube_map - -#endif /* GL_ARB_seamless_cube_map */ - -#ifdef GL_ARB_seamless_cubemap_per_texture - -#endif /* GL_ARB_seamless_cubemap_per_texture */ - -#ifdef GL_ARB_separate_shader_objects - -static GLboolean _glewInit_GL_ARB_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)glewGetProcAddress((const GLubyte*)"glActiveShaderProgram")) == NULL) || r; - r = ((glBindProgramPipeline = (PFNGLBINDPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glBindProgramPipeline")) == NULL) || r; - r = ((glCreateShaderProgramv = (PFNGLCREATESHADERPROGRAMVPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderProgramv")) == NULL) || r; - r = ((glDeleteProgramPipelines = (PFNGLDELETEPROGRAMPIPELINESPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramPipelines")) == NULL) || r; - r = ((glGenProgramPipelines = (PFNGLGENPROGRAMPIPELINESPROC)glewGetProcAddress((const GLubyte*)"glGenProgramPipelines")) == NULL) || r; - r = ((glGetProgramPipelineInfoLog = (PFNGLGETPROGRAMPIPELINEINFOLOGPROC)glewGetProcAddress((const GLubyte*)"glGetProgramPipelineInfoLog")) == NULL) || r; - r = ((glGetProgramPipelineiv = (PFNGLGETPROGRAMPIPELINEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramPipelineiv")) == NULL) || r; - r = ((glIsProgramPipeline = (PFNGLISPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glIsProgramPipeline")) == NULL) || r; - r = ((glProgramUniform1d = (PFNGLPROGRAMUNIFORM1DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1d")) == NULL) || r; - r = ((glProgramUniform1dv = (PFNGLPROGRAMUNIFORM1DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1dv")) == NULL) || r; - r = ((glProgramUniform1f = (PFNGLPROGRAMUNIFORM1FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1f")) == NULL) || r; - r = ((glProgramUniform1fv = (PFNGLPROGRAMUNIFORM1FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fv")) == NULL) || r; - r = ((glProgramUniform1i = (PFNGLPROGRAMUNIFORM1IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i")) == NULL) || r; - r = ((glProgramUniform1iv = (PFNGLPROGRAMUNIFORM1IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iv")) == NULL) || r; - r = ((glProgramUniform1ui = (PFNGLPROGRAMUNIFORM1UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui")) == NULL) || r; - r = ((glProgramUniform1uiv = (PFNGLPROGRAMUNIFORM1UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiv")) == NULL) || r; - r = ((glProgramUniform2d = (PFNGLPROGRAMUNIFORM2DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2d")) == NULL) || r; - r = ((glProgramUniform2dv = (PFNGLPROGRAMUNIFORM2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2dv")) == NULL) || r; - r = ((glProgramUniform2f = (PFNGLPROGRAMUNIFORM2FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2f")) == NULL) || r; - r = ((glProgramUniform2fv = (PFNGLPROGRAMUNIFORM2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fv")) == NULL) || r; - r = ((glProgramUniform2i = (PFNGLPROGRAMUNIFORM2IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i")) == NULL) || r; - r = ((glProgramUniform2iv = (PFNGLPROGRAMUNIFORM2IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iv")) == NULL) || r; - r = ((glProgramUniform2ui = (PFNGLPROGRAMUNIFORM2UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui")) == NULL) || r; - r = ((glProgramUniform2uiv = (PFNGLPROGRAMUNIFORM2UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiv")) == NULL) || r; - r = ((glProgramUniform3d = (PFNGLPROGRAMUNIFORM3DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3d")) == NULL) || r; - r = ((glProgramUniform3dv = (PFNGLPROGRAMUNIFORM3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3dv")) == NULL) || r; - r = ((glProgramUniform3f = (PFNGLPROGRAMUNIFORM3FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3f")) == NULL) || r; - r = ((glProgramUniform3fv = (PFNGLPROGRAMUNIFORM3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fv")) == NULL) || r; - r = ((glProgramUniform3i = (PFNGLPROGRAMUNIFORM3IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i")) == NULL) || r; - r = ((glProgramUniform3iv = (PFNGLPROGRAMUNIFORM3IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iv")) == NULL) || r; - r = ((glProgramUniform3ui = (PFNGLPROGRAMUNIFORM3UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui")) == NULL) || r; - r = ((glProgramUniform3uiv = (PFNGLPROGRAMUNIFORM3UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiv")) == NULL) || r; - r = ((glProgramUniform4d = (PFNGLPROGRAMUNIFORM4DPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4d")) == NULL) || r; - r = ((glProgramUniform4dv = (PFNGLPROGRAMUNIFORM4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4dv")) == NULL) || r; - r = ((glProgramUniform4f = (PFNGLPROGRAMUNIFORM4FPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4f")) == NULL) || r; - r = ((glProgramUniform4fv = (PFNGLPROGRAMUNIFORM4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fv")) == NULL) || r; - r = ((glProgramUniform4i = (PFNGLPROGRAMUNIFORM4IPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i")) == NULL) || r; - r = ((glProgramUniform4iv = (PFNGLPROGRAMUNIFORM4IVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iv")) == NULL) || r; - r = ((glProgramUniform4ui = (PFNGLPROGRAMUNIFORM4UIPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui")) == NULL) || r; - r = ((glProgramUniform4uiv = (PFNGLPROGRAMUNIFORM4UIVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiv")) == NULL) || r; - r = ((glProgramUniformMatrix2dv = (PFNGLPROGRAMUNIFORMMATRIX2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2dv")) == NULL) || r; - r = ((glProgramUniformMatrix2fv = (PFNGLPROGRAMUNIFORMMATRIX2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fv")) == NULL) || r; - r = ((glProgramUniformMatrix2x3dv = (PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3dv")) == NULL) || r; - r = ((glProgramUniformMatrix2x3fv = (PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fv")) == NULL) || r; - r = ((glProgramUniformMatrix2x4dv = (PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4dv")) == NULL) || r; - r = ((glProgramUniformMatrix2x4fv = (PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fv")) == NULL) || r; - r = ((glProgramUniformMatrix3dv = (PFNGLPROGRAMUNIFORMMATRIX3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3dv")) == NULL) || r; - r = ((glProgramUniformMatrix3fv = (PFNGLPROGRAMUNIFORMMATRIX3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fv")) == NULL) || r; - r = ((glProgramUniformMatrix3x2dv = (PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2dv")) == NULL) || r; - r = ((glProgramUniformMatrix3x2fv = (PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fv")) == NULL) || r; - r = ((glProgramUniformMatrix3x4dv = (PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4dv")) == NULL) || r; - r = ((glProgramUniformMatrix3x4fv = (PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fv")) == NULL) || r; - r = ((glProgramUniformMatrix4dv = (PFNGLPROGRAMUNIFORMMATRIX4DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4dv")) == NULL) || r; - r = ((glProgramUniformMatrix4fv = (PFNGLPROGRAMUNIFORMMATRIX4FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fv")) == NULL) || r; - r = ((glProgramUniformMatrix4x2dv = (PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2dv")) == NULL) || r; - r = ((glProgramUniformMatrix4x2fv = (PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fv")) == NULL) || r; - r = ((glProgramUniformMatrix4x3dv = (PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3dv")) == NULL) || r; - r = ((glProgramUniformMatrix4x3fv = (PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fv")) == NULL) || r; - r = ((glUseProgramStages = (PFNGLUSEPROGRAMSTAGESPROC)glewGetProcAddress((const GLubyte*)"glUseProgramStages")) == NULL) || r; - r = ((glValidateProgramPipeline = (PFNGLVALIDATEPROGRAMPIPELINEPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramPipeline")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_separate_shader_objects */ - -#ifdef GL_ARB_shader_atomic_counters - -static GLboolean _glewInit_GL_ARB_shader_atomic_counters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetActiveAtomicCounterBufferiv = (PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAtomicCounterBufferiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_atomic_counters */ - -#ifdef GL_ARB_shader_bit_encoding - -#endif /* GL_ARB_shader_bit_encoding */ - -#ifdef GL_ARB_shader_draw_parameters - -#endif /* GL_ARB_shader_draw_parameters */ - -#ifdef GL_ARB_shader_group_vote - -#endif /* GL_ARB_shader_group_vote */ - -#ifdef GL_ARB_shader_image_load_store - -static GLboolean _glewInit_GL_ARB_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)glewGetProcAddress((const GLubyte*)"glBindImageTexture")) == NULL) || r; - r = ((glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)glewGetProcAddress((const GLubyte*)"glMemoryBarrier")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_image_load_store */ - -#ifdef GL_ARB_shader_image_size - -#endif /* GL_ARB_shader_image_size */ - -#ifdef GL_ARB_shader_objects - -static GLboolean _glewInit_GL_ARB_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glAttachObjectARB")) == NULL) || r; - r = ((glCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderARB")) == NULL) || r; - r = ((glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateProgramObjectARB")) == NULL) || r; - r = ((glCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderObjectARB")) == NULL) || r; - r = ((glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteObjectARB")) == NULL) || r; - r = ((glDetachObjectARB = (PFNGLDETACHOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glDetachObjectARB")) == NULL) || r; - r = ((glGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformARB")) == NULL) || r; - r = ((glGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttachedObjectsARB")) == NULL) || r; - r = ((glGetHandleARB = (PFNGLGETHANDLEARBPROC)glewGetProcAddress((const GLubyte*)"glGetHandleARB")) == NULL) || r; - r = ((glGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)glewGetProcAddress((const GLubyte*)"glGetInfoLogARB")) == NULL) || r; - r = ((glGetObjectParameterfvARB = (PFNGLGETOBJECTPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterfvARB")) == NULL) || r; - r = ((glGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetObjectParameterivARB")) == NULL) || r; - r = ((glGetShaderSourceARB = (PFNGLGETSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glGetShaderSourceARB")) == NULL) || r; - r = ((glGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformLocationARB")) == NULL) || r; - r = ((glGetUniformfvARB = (PFNGLGETUNIFORMFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformfvARB")) == NULL) || r; - r = ((glGetUniformivARB = (PFNGLGETUNIFORMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetUniformivARB")) == NULL) || r; - r = ((glLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glLinkProgramARB")) == NULL) || r; - r = ((glShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)glewGetProcAddress((const GLubyte*)"glShaderSourceARB")) == NULL) || r; - r = ((glUniform1fARB = (PFNGLUNIFORM1FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fARB")) == NULL) || r; - r = ((glUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1fvARB")) == NULL) || r; - r = ((glUniform1iARB = (PFNGLUNIFORM1IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1iARB")) == NULL) || r; - r = ((glUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform1ivARB")) == NULL) || r; - r = ((glUniform2fARB = (PFNGLUNIFORM2FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fARB")) == NULL) || r; - r = ((glUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2fvARB")) == NULL) || r; - r = ((glUniform2iARB = (PFNGLUNIFORM2IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2iARB")) == NULL) || r; - r = ((glUniform2ivARB = (PFNGLUNIFORM2IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform2ivARB")) == NULL) || r; - r = ((glUniform3fARB = (PFNGLUNIFORM3FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fARB")) == NULL) || r; - r = ((glUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3fvARB")) == NULL) || r; - r = ((glUniform3iARB = (PFNGLUNIFORM3IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3iARB")) == NULL) || r; - r = ((glUniform3ivARB = (PFNGLUNIFORM3IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform3ivARB")) == NULL) || r; - r = ((glUniform4fARB = (PFNGLUNIFORM4FARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fARB")) == NULL) || r; - r = ((glUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4fvARB")) == NULL) || r; - r = ((glUniform4iARB = (PFNGLUNIFORM4IARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4iARB")) == NULL) || r; - r = ((glUniform4ivARB = (PFNGLUNIFORM4IVARBPROC)glewGetProcAddress((const GLubyte*)"glUniform4ivARB")) == NULL) || r; - r = ((glUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix2fvARB")) == NULL) || r; - r = ((glUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix3fvARB")) == NULL) || r; - r = ((glUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)glewGetProcAddress((const GLubyte*)"glUniformMatrix4fvARB")) == NULL) || r; - r = ((glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)glewGetProcAddress((const GLubyte*)"glUseProgramObjectARB")) == NULL) || r; - r = ((glValidateProgramARB = (PFNGLVALIDATEPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glValidateProgramARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_objects */ - -#ifdef GL_ARB_shader_precision - -#endif /* GL_ARB_shader_precision */ - -#ifdef GL_ARB_shader_stencil_export - -#endif /* GL_ARB_shader_stencil_export */ - -#ifdef GL_ARB_shader_storage_buffer_object - -static GLboolean _glewInit_GL_ARB_shader_storage_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glShaderStorageBlockBinding = (PFNGLSHADERSTORAGEBLOCKBINDINGPROC)glewGetProcAddress((const GLubyte*)"glShaderStorageBlockBinding")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_storage_buffer_object */ - -#ifdef GL_ARB_shader_subroutine - -static GLboolean _glewInit_GL_ARB_shader_subroutine (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetActiveSubroutineName = (PFNGLGETACTIVESUBROUTINENAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineName")) == NULL) || r; - r = ((glGetActiveSubroutineUniformName = (PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineUniformName")) == NULL) || r; - r = ((glGetActiveSubroutineUniformiv = (PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveSubroutineUniformiv")) == NULL) || r; - r = ((glGetProgramStageiv = (PFNGLGETPROGRAMSTAGEIVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStageiv")) == NULL) || r; - r = ((glGetSubroutineIndex = (PFNGLGETSUBROUTINEINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetSubroutineIndex")) == NULL) || r; - r = ((glGetSubroutineUniformLocation = (PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC)glewGetProcAddress((const GLubyte*)"glGetSubroutineUniformLocation")) == NULL) || r; - r = ((glGetUniformSubroutineuiv = (PFNGLGETUNIFORMSUBROUTINEUIVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformSubroutineuiv")) == NULL) || r; - r = ((glUniformSubroutinesuiv = (PFNGLUNIFORMSUBROUTINESUIVPROC)glewGetProcAddress((const GLubyte*)"glUniformSubroutinesuiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shader_subroutine */ - -#ifdef GL_ARB_shader_texture_lod - -#endif /* GL_ARB_shader_texture_lod */ - -#ifdef GL_ARB_shading_language_100 - -#endif /* GL_ARB_shading_language_100 */ - -#ifdef GL_ARB_shading_language_420pack - -#endif /* GL_ARB_shading_language_420pack */ - -#ifdef GL_ARB_shading_language_include - -static GLboolean _glewInit_GL_ARB_shading_language_include (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCompileShaderIncludeARB = (PFNGLCOMPILESHADERINCLUDEARBPROC)glewGetProcAddress((const GLubyte*)"glCompileShaderIncludeARB")) == NULL) || r; - r = ((glDeleteNamedStringARB = (PFNGLDELETENAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteNamedStringARB")) == NULL) || r; - r = ((glGetNamedStringARB = (PFNGLGETNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetNamedStringARB")) == NULL) || r; - r = ((glGetNamedStringivARB = (PFNGLGETNAMEDSTRINGIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetNamedStringivARB")) == NULL) || r; - r = ((glIsNamedStringARB = (PFNGLISNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glIsNamedStringARB")) == NULL) || r; - r = ((glNamedStringARB = (PFNGLNAMEDSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glNamedStringARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_shading_language_include */ - -#ifdef GL_ARB_shading_language_packing - -#endif /* GL_ARB_shading_language_packing */ - -#ifdef GL_ARB_shadow - -#endif /* GL_ARB_shadow */ - -#ifdef GL_ARB_shadow_ambient - -#endif /* GL_ARB_shadow_ambient */ - -#ifdef GL_ARB_sparse_texture - -static GLboolean _glewInit_GL_ARB_sparse_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexPageCommitmentARB = (PFNGLTEXPAGECOMMITMENTARBPROC)glewGetProcAddress((const GLubyte*)"glTexPageCommitmentARB")) == NULL) || r; - r = ((glTexturePageCommitmentEXT = (PFNGLTEXTUREPAGECOMMITMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glTexturePageCommitmentEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sparse_texture */ - -#ifdef GL_ARB_stencil_texturing - -#endif /* GL_ARB_stencil_texturing */ - -#ifdef GL_ARB_sync - -static GLboolean _glewInit_GL_ARB_sync (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"glClientWaitSync")) == NULL) || r; - r = ((glDeleteSync = (PFNGLDELETESYNCPROC)glewGetProcAddress((const GLubyte*)"glDeleteSync")) == NULL) || r; - r = ((glFenceSync = (PFNGLFENCESYNCPROC)glewGetProcAddress((const GLubyte*)"glFenceSync")) == NULL) || r; - r = ((glGetInteger64v = (PFNGLGETINTEGER64VPROC)glewGetProcAddress((const GLubyte*)"glGetInteger64v")) == NULL) || r; - r = ((glGetSynciv = (PFNGLGETSYNCIVPROC)glewGetProcAddress((const GLubyte*)"glGetSynciv")) == NULL) || r; - r = ((glIsSync = (PFNGLISSYNCPROC)glewGetProcAddress((const GLubyte*)"glIsSync")) == NULL) || r; - r = ((glWaitSync = (PFNGLWAITSYNCPROC)glewGetProcAddress((const GLubyte*)"glWaitSync")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_sync */ - -#ifdef GL_ARB_tessellation_shader - -static GLboolean _glewInit_GL_ARB_tessellation_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPatchParameterfv = (PFNGLPATCHPARAMETERFVPROC)glewGetProcAddress((const GLubyte*)"glPatchParameterfv")) == NULL) || r; - r = ((glPatchParameteri = (PFNGLPATCHPARAMETERIPROC)glewGetProcAddress((const GLubyte*)"glPatchParameteri")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_tessellation_shader */ - -#ifdef GL_ARB_texture_border_clamp - -#endif /* GL_ARB_texture_border_clamp */ - -#ifdef GL_ARB_texture_buffer_object - -static GLboolean _glewInit_GL_ARB_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexBufferARB = (PFNGLTEXBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glTexBufferARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_buffer_object */ - -#ifdef GL_ARB_texture_buffer_object_rgb32 - -#endif /* GL_ARB_texture_buffer_object_rgb32 */ - -#ifdef GL_ARB_texture_buffer_range - -static GLboolean _glewInit_GL_ARB_texture_buffer_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexBufferRange = (PFNGLTEXBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glTexBufferRange")) == NULL) || r; - r = ((glTextureBufferRangeEXT = (PFNGLTEXTUREBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferRangeEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_buffer_range */ - -#ifdef GL_ARB_texture_compression - -static GLboolean _glewInit_GL_ARB_texture_compression (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage1DARB")) == NULL) || r; - r = ((glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage2DARB")) == NULL) || r; - r = ((glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexImage3DARB")) == NULL) || r; - r = ((glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage1DARB")) == NULL) || r; - r = ((glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage2DARB")) == NULL) || r; - r = ((glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)glewGetProcAddress((const GLubyte*)"glCompressedTexSubImage3DARB")) == NULL) || r; - r = ((glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTexImageARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_compression */ - -#ifdef GL_ARB_texture_compression_bptc - -#endif /* GL_ARB_texture_compression_bptc */ - -#ifdef GL_ARB_texture_compression_rgtc - -#endif /* GL_ARB_texture_compression_rgtc */ - -#ifdef GL_ARB_texture_cube_map - -#endif /* GL_ARB_texture_cube_map */ - -#ifdef GL_ARB_texture_cube_map_array - -#endif /* GL_ARB_texture_cube_map_array */ - -#ifdef GL_ARB_texture_env_add - -#endif /* GL_ARB_texture_env_add */ - -#ifdef GL_ARB_texture_env_combine - -#endif /* GL_ARB_texture_env_combine */ - -#ifdef GL_ARB_texture_env_crossbar - -#endif /* GL_ARB_texture_env_crossbar */ - -#ifdef GL_ARB_texture_env_dot3 - -#endif /* GL_ARB_texture_env_dot3 */ - -#ifdef GL_ARB_texture_float - -#endif /* GL_ARB_texture_float */ - -#ifdef GL_ARB_texture_gather - -#endif /* GL_ARB_texture_gather */ - -#ifdef GL_ARB_texture_mirror_clamp_to_edge - -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ - -#ifdef GL_ARB_texture_mirrored_repeat - -#endif /* GL_ARB_texture_mirrored_repeat */ - -#ifdef GL_ARB_texture_multisample - -static GLboolean _glewInit_GL_ARB_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)glewGetProcAddress((const GLubyte*)"glGetMultisamplefv")) == NULL) || r; - r = ((glSampleMaski = (PFNGLSAMPLEMASKIPROC)glewGetProcAddress((const GLubyte*)"glSampleMaski")) == NULL) || r; - r = ((glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexImage2DMultisample")) == NULL) || r; - r = ((glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DMultisample")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_multisample */ - -#ifdef GL_ARB_texture_non_power_of_two - -#endif /* GL_ARB_texture_non_power_of_two */ - -#ifdef GL_ARB_texture_query_levels - -#endif /* GL_ARB_texture_query_levels */ - -#ifdef GL_ARB_texture_query_lod - -#endif /* GL_ARB_texture_query_lod */ - -#ifdef GL_ARB_texture_rectangle - -#endif /* GL_ARB_texture_rectangle */ - -#ifdef GL_ARB_texture_rg - -#endif /* GL_ARB_texture_rg */ - -#ifdef GL_ARB_texture_rgb10_a2ui - -#endif /* GL_ARB_texture_rgb10_a2ui */ - -#ifdef GL_ARB_texture_stencil8 - -#endif /* GL_ARB_texture_stencil8 */ - -#ifdef GL_ARB_texture_storage - -static GLboolean _glewInit_GL_ARB_texture_storage (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexStorage1D = (PFNGLTEXSTORAGE1DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage1D")) == NULL) || r; - r = ((glTexStorage2D = (PFNGLTEXSTORAGE2DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage2D")) == NULL) || r; - r = ((glTexStorage3D = (PFNGLTEXSTORAGE3DPROC)glewGetProcAddress((const GLubyte*)"glTexStorage3D")) == NULL) || r; - r = ((glTextureStorage1DEXT = (PFNGLTEXTURESTORAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage1DEXT")) == NULL) || r; - r = ((glTextureStorage2DEXT = (PFNGLTEXTURESTORAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage2DEXT")) == NULL) || r; - r = ((glTextureStorage3DEXT = (PFNGLTEXTURESTORAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_storage */ - -#ifdef GL_ARB_texture_storage_multisample - -static GLboolean _glewInit_GL_ARB_texture_storage_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexStorage2DMultisample = (PFNGLTEXSTORAGE2DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexStorage2DMultisample")) == NULL) || r; - r = ((glTexStorage3DMultisample = (PFNGLTEXSTORAGE3DMULTISAMPLEPROC)glewGetProcAddress((const GLubyte*)"glTexStorage3DMultisample")) == NULL) || r; - r = ((glTextureStorage2DMultisampleEXT = (PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage2DMultisampleEXT")) == NULL) || r; - r = ((glTextureStorage3DMultisampleEXT = (PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureStorage3DMultisampleEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_storage_multisample */ - -#ifdef GL_ARB_texture_swizzle - -#endif /* GL_ARB_texture_swizzle */ - -#ifdef GL_ARB_texture_view - -static GLboolean _glewInit_GL_ARB_texture_view (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureView = (PFNGLTEXTUREVIEWPROC)glewGetProcAddress((const GLubyte*)"glTextureView")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_texture_view */ - -#ifdef GL_ARB_timer_query - -static GLboolean _glewInit_GL_ARB_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64v")) == NULL) || r; - r = ((glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64v")) == NULL) || r; - r = ((glQueryCounter = (PFNGLQUERYCOUNTERPROC)glewGetProcAddress((const GLubyte*)"glQueryCounter")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_timer_query */ - -#ifdef GL_ARB_transform_feedback2 - -static GLboolean _glewInit_GL_ARB_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindTransformFeedback = (PFNGLBINDTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glBindTransformFeedback")) == NULL) || r; - r = ((glDeleteTransformFeedbacks = (PFNGLDELETETRANSFORMFEEDBACKSPROC)glewGetProcAddress((const GLubyte*)"glDeleteTransformFeedbacks")) == NULL) || r; - r = ((glDrawTransformFeedback = (PFNGLDRAWTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedback")) == NULL) || r; - r = ((glGenTransformFeedbacks = (PFNGLGENTRANSFORMFEEDBACKSPROC)glewGetProcAddress((const GLubyte*)"glGenTransformFeedbacks")) == NULL) || r; - r = ((glIsTransformFeedback = (PFNGLISTRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glIsTransformFeedback")) == NULL) || r; - r = ((glPauseTransformFeedback = (PFNGLPAUSETRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glPauseTransformFeedback")) == NULL) || r; - r = ((glResumeTransformFeedback = (PFNGLRESUMETRANSFORMFEEDBACKPROC)glewGetProcAddress((const GLubyte*)"glResumeTransformFeedback")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transform_feedback2 */ - -#ifdef GL_ARB_transform_feedback3 - -static GLboolean _glewInit_GL_ARB_transform_feedback3 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginQueryIndexed = (PFNGLBEGINQUERYINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glBeginQueryIndexed")) == NULL) || r; - r = ((glDrawTransformFeedbackStream = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackStream")) == NULL) || r; - r = ((glEndQueryIndexed = (PFNGLENDQUERYINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glEndQueryIndexed")) == NULL) || r; - r = ((glGetQueryIndexediv = (PFNGLGETQUERYINDEXEDIVPROC)glewGetProcAddress((const GLubyte*)"glGetQueryIndexediv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transform_feedback3 */ - -#ifdef GL_ARB_transform_feedback_instanced - -static GLboolean _glewInit_GL_ARB_transform_feedback_instanced (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawTransformFeedbackInstanced = (PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackInstanced")) == NULL) || r; - r = ((glDrawTransformFeedbackStreamInstanced = (PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackStreamInstanced")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transform_feedback_instanced */ - -#ifdef GL_ARB_transpose_matrix - -static GLboolean _glewInit_GL_ARB_transpose_matrix (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glLoadTransposeMatrixdARB = (PFNGLLOADTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixdARB")) == NULL) || r; - r = ((glLoadTransposeMatrixfARB = (PFNGLLOADTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glLoadTransposeMatrixfARB")) == NULL) || r; - r = ((glMultTransposeMatrixdARB = (PFNGLMULTTRANSPOSEMATRIXDARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixdARB")) == NULL) || r; - r = ((glMultTransposeMatrixfARB = (PFNGLMULTTRANSPOSEMATRIXFARBPROC)glewGetProcAddress((const GLubyte*)"glMultTransposeMatrixfARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_transpose_matrix */ - -#ifdef GL_ARB_uniform_buffer_object - -static GLboolean _glewInit_GL_ARB_uniform_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBase")) == NULL) || r; - r = ((glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRange")) == NULL) || r; - r = ((glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformBlockName")) == NULL) || r; - r = ((glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformBlockiv")) == NULL) || r; - r = ((glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformName")) == NULL) || r; - r = ((glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveUniformsiv")) == NULL) || r; - r = ((glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)glewGetProcAddress((const GLubyte*)"glGetIntegeri_v")) == NULL) || r; - r = ((glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBlockIndex")) == NULL) || r; - r = ((glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)glewGetProcAddress((const GLubyte*)"glGetUniformIndices")) == NULL) || r; - r = ((glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)glewGetProcAddress((const GLubyte*)"glUniformBlockBinding")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_uniform_buffer_object */ - -#ifdef GL_ARB_vertex_array_bgra - -#endif /* GL_ARB_vertex_array_bgra */ - -#ifdef GL_ARB_vertex_array_object - -static GLboolean _glewInit_GL_ARB_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glBindVertexArray")) == NULL) || r; - r = ((glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexArrays")) == NULL) || r; - r = ((glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)glewGetProcAddress((const GLubyte*)"glGenVertexArrays")) == NULL) || r; - r = ((glIsVertexArray = (PFNGLISVERTEXARRAYPROC)glewGetProcAddress((const GLubyte*)"glIsVertexArray")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_array_object */ - -#ifdef GL_ARB_vertex_attrib_64bit - -static GLboolean _glewInit_GL_ARB_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribLdv = (PFNGLGETVERTEXATTRIBLDVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLdv")) == NULL) || r; - r = ((glVertexAttribL1d = (PFNGLVERTEXATTRIBL1DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1d")) == NULL) || r; - r = ((glVertexAttribL1dv = (PFNGLVERTEXATTRIBL1DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dv")) == NULL) || r; - r = ((glVertexAttribL2d = (PFNGLVERTEXATTRIBL2DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2d")) == NULL) || r; - r = ((glVertexAttribL2dv = (PFNGLVERTEXATTRIBL2DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dv")) == NULL) || r; - r = ((glVertexAttribL3d = (PFNGLVERTEXATTRIBL3DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3d")) == NULL) || r; - r = ((glVertexAttribL3dv = (PFNGLVERTEXATTRIBL3DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dv")) == NULL) || r; - r = ((glVertexAttribL4d = (PFNGLVERTEXATTRIBL4DPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4d")) == NULL) || r; - r = ((glVertexAttribL4dv = (PFNGLVERTEXATTRIBL4DVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dv")) == NULL) || r; - r = ((glVertexAttribLPointer = (PFNGLVERTEXATTRIBLPOINTERPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLPointer")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_attrib_64bit */ - -#ifdef GL_ARB_vertex_attrib_binding - -static GLboolean _glewInit_GL_ARB_vertex_attrib_binding (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)glewGetProcAddress((const GLubyte*)"glBindVertexBuffer")) == NULL) || r; - r = ((glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribBinding")) == NULL) || r; - r = ((glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribFormat")) == NULL) || r; - r = ((glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIFormat")) == NULL) || r; - r = ((glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLFormat")) == NULL) || r; - r = ((glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)glewGetProcAddress((const GLubyte*)"glVertexBindingDivisor")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_attrib_binding */ - -#ifdef GL_ARB_vertex_blend - -static GLboolean _glewInit_GL_ARB_vertex_blend (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexBlendARB = (PFNGLVERTEXBLENDARBPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendARB")) == NULL) || r; - r = ((glWeightPointerARB = (PFNGLWEIGHTPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glWeightPointerARB")) == NULL) || r; - r = ((glWeightbvARB = (PFNGLWEIGHTBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightbvARB")) == NULL) || r; - r = ((glWeightdvARB = (PFNGLWEIGHTDVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightdvARB")) == NULL) || r; - r = ((glWeightfvARB = (PFNGLWEIGHTFVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightfvARB")) == NULL) || r; - r = ((glWeightivARB = (PFNGLWEIGHTIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightivARB")) == NULL) || r; - r = ((glWeightsvARB = (PFNGLWEIGHTSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightsvARB")) == NULL) || r; - r = ((glWeightubvARB = (PFNGLWEIGHTUBVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightubvARB")) == NULL) || r; - r = ((glWeightuivARB = (PFNGLWEIGHTUIVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightuivARB")) == NULL) || r; - r = ((glWeightusvARB = (PFNGLWEIGHTUSVARBPROC)glewGetProcAddress((const GLubyte*)"glWeightusvARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_blend */ - -#ifdef GL_ARB_vertex_buffer_object - -static GLboolean _glewInit_GL_ARB_vertex_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindBufferARB = (PFNGLBINDBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glBindBufferARB")) == NULL) || r; - r = ((glBufferDataARB = (PFNGLBUFFERDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferDataARB")) == NULL) || r; - r = ((glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glBufferSubDataARB")) == NULL) || r; - r = ((glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteBuffersARB")) == NULL) || r; - r = ((glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)glewGetProcAddress((const GLubyte*)"glGenBuffersARB")) == NULL) || r; - r = ((glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterivARB")) == NULL) || r; - r = ((glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferPointervARB")) == NULL) || r; - r = ((glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)glewGetProcAddress((const GLubyte*)"glGetBufferSubDataARB")) == NULL) || r; - r = ((glIsBufferARB = (PFNGLISBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glIsBufferARB")) == NULL) || r; - r = ((glMapBufferARB = (PFNGLMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glMapBufferARB")) == NULL) || r; - r = ((glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"glUnmapBufferARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_buffer_object */ - -#ifdef GL_ARB_vertex_program - -static GLboolean _glewInit_GL_ARB_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glBindProgramARB")) == NULL) || r; - r = ((glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsARB")) == NULL) || r; - r = ((glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexAttribArrayARB")) == NULL) || r; - r = ((glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexAttribArrayARB")) == NULL) || r; - r = ((glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsARB")) == NULL) || r; - r = ((glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterdvARB")) == NULL) || r; - r = ((glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramEnvParameterfvARB")) == NULL) || r; - r = ((glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterdvARB")) == NULL) || r; - r = ((glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramLocalParameterfvARB")) == NULL) || r; - r = ((glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringARB")) == NULL) || r; - r = ((glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivARB")) == NULL) || r; - r = ((glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervARB")) == NULL) || r; - r = ((glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvARB")) == NULL) || r; - r = ((glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvARB")) == NULL) || r; - r = ((glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivARB")) == NULL) || r; - r = ((glIsProgramARB = (PFNGLISPROGRAMARBPROC)glewGetProcAddress((const GLubyte*)"glIsProgramARB")) == NULL) || r; - r = ((glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dARB")) == NULL) || r; - r = ((glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4dvARB")) == NULL) || r; - r = ((glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fARB")) == NULL) || r; - r = ((glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameter4fvARB")) == NULL) || r; - r = ((glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dARB")) == NULL) || r; - r = ((glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4dvARB")) == NULL) || r; - r = ((glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fARB")) == NULL) || r; - r = ((glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameter4fvARB")) == NULL) || r; - r = ((glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"glProgramStringARB")) == NULL) || r; - r = ((glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dARB")) == NULL) || r; - r = ((glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvARB")) == NULL) || r; - r = ((glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fARB")) == NULL) || r; - r = ((glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvARB")) == NULL) || r; - r = ((glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sARB")) == NULL) || r; - r = ((glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svARB")) == NULL) || r; - r = ((glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dARB")) == NULL) || r; - r = ((glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvARB")) == NULL) || r; - r = ((glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fARB")) == NULL) || r; - r = ((glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvARB")) == NULL) || r; - r = ((glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sARB")) == NULL) || r; - r = ((glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svARB")) == NULL) || r; - r = ((glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dARB")) == NULL) || r; - r = ((glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvARB")) == NULL) || r; - r = ((glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fARB")) == NULL) || r; - r = ((glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvARB")) == NULL) || r; - r = ((glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sARB")) == NULL) || r; - r = ((glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svARB")) == NULL) || r; - r = ((glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NbvARB")) == NULL) || r; - r = ((glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NivARB")) == NULL) || r; - r = ((glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NsvARB")) == NULL) || r; - r = ((glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubARB")) == NULL) || r; - r = ((glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NubvARB")) == NULL) || r; - r = ((glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NuivARB")) == NULL) || r; - r = ((glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4NusvARB")) == NULL) || r; - r = ((glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4bvARB")) == NULL) || r; - r = ((glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dARB")) == NULL) || r; - r = ((glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvARB")) == NULL) || r; - r = ((glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fARB")) == NULL) || r; - r = ((glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvARB")) == NULL) || r; - r = ((glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ivARB")) == NULL) || r; - r = ((glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sARB")) == NULL) || r; - r = ((glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svARB")) == NULL) || r; - r = ((glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvARB")) == NULL) || r; - r = ((glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4uivARB")) == NULL) || r; - r = ((glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4usvARB")) == NULL) || r; - r = ((glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_program */ - -#ifdef GL_ARB_vertex_shader - -static GLboolean _glewInit_GL_ARB_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glBindAttribLocationARB")) == NULL) || r; - r = ((glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"glGetActiveAttribARB")) == NULL) || r; - r = ((glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)glewGetProcAddress((const GLubyte*)"glGetAttribLocationARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_shader */ - -#ifdef GL_ARB_vertex_type_10f_11f_11f_rev - -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ - -#ifdef GL_ARB_vertex_type_2_10_10_10_rev - -static GLboolean _glewInit_GL_ARB_vertex_type_2_10_10_10_rev (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorP3ui = (PFNGLCOLORP3UIPROC)glewGetProcAddress((const GLubyte*)"glColorP3ui")) == NULL) || r; - r = ((glColorP3uiv = (PFNGLCOLORP3UIVPROC)glewGetProcAddress((const GLubyte*)"glColorP3uiv")) == NULL) || r; - r = ((glColorP4ui = (PFNGLCOLORP4UIPROC)glewGetProcAddress((const GLubyte*)"glColorP4ui")) == NULL) || r; - r = ((glColorP4uiv = (PFNGLCOLORP4UIVPROC)glewGetProcAddress((const GLubyte*)"glColorP4uiv")) == NULL) || r; - r = ((glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP1ui")) == NULL) || r; - r = ((glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP1uiv")) == NULL) || r; - r = ((glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP2ui")) == NULL) || r; - r = ((glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP2uiv")) == NULL) || r; - r = ((glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP3ui")) == NULL) || r; - r = ((glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP3uiv")) == NULL) || r; - r = ((glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP4ui")) == NULL) || r; - r = ((glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordP4uiv")) == NULL) || r; - r = ((glNormalP3ui = (PFNGLNORMALP3UIPROC)glewGetProcAddress((const GLubyte*)"glNormalP3ui")) == NULL) || r; - r = ((glNormalP3uiv = (PFNGLNORMALP3UIVPROC)glewGetProcAddress((const GLubyte*)"glNormalP3uiv")) == NULL) || r; - r = ((glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorP3ui")) == NULL) || r; - r = ((glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorP3uiv")) == NULL) || r; - r = ((glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP1ui")) == NULL) || r; - r = ((glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP1uiv")) == NULL) || r; - r = ((glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP2ui")) == NULL) || r; - r = ((glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP2uiv")) == NULL) || r; - r = ((glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP3ui")) == NULL) || r; - r = ((glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP3uiv")) == NULL) || r; - r = ((glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP4ui")) == NULL) || r; - r = ((glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordP4uiv")) == NULL) || r; - r = ((glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP1ui")) == NULL) || r; - r = ((glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP1uiv")) == NULL) || r; - r = ((glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP2ui")) == NULL) || r; - r = ((glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP2uiv")) == NULL) || r; - r = ((glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP3ui")) == NULL) || r; - r = ((glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP3uiv")) == NULL) || r; - r = ((glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP4ui")) == NULL) || r; - r = ((glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribP4uiv")) == NULL) || r; - r = ((glVertexP2ui = (PFNGLVERTEXP2UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP2ui")) == NULL) || r; - r = ((glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP2uiv")) == NULL) || r; - r = ((glVertexP3ui = (PFNGLVERTEXP3UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP3ui")) == NULL) || r; - r = ((glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP3uiv")) == NULL) || r; - r = ((glVertexP4ui = (PFNGLVERTEXP4UIPROC)glewGetProcAddress((const GLubyte*)"glVertexP4ui")) == NULL) || r; - r = ((glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)glewGetProcAddress((const GLubyte*)"glVertexP4uiv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ - -#ifdef GL_ARB_viewport_array - -static GLboolean _glewInit_GL_ARB_viewport_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDepthRangeArrayv = (PFNGLDEPTHRANGEARRAYVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangeArrayv")) == NULL) || r; - r = ((glDepthRangeIndexed = (PFNGLDEPTHRANGEINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glDepthRangeIndexed")) == NULL) || r; - r = ((glGetDoublei_v = (PFNGLGETDOUBLEI_VPROC)glewGetProcAddress((const GLubyte*)"glGetDoublei_v")) == NULL) || r; - r = ((glGetFloati_v = (PFNGLGETFLOATI_VPROC)glewGetProcAddress((const GLubyte*)"glGetFloati_v")) == NULL) || r; - r = ((glScissorArrayv = (PFNGLSCISSORARRAYVPROC)glewGetProcAddress((const GLubyte*)"glScissorArrayv")) == NULL) || r; - r = ((glScissorIndexed = (PFNGLSCISSORINDEXEDPROC)glewGetProcAddress((const GLubyte*)"glScissorIndexed")) == NULL) || r; - r = ((glScissorIndexedv = (PFNGLSCISSORINDEXEDVPROC)glewGetProcAddress((const GLubyte*)"glScissorIndexedv")) == NULL) || r; - r = ((glViewportArrayv = (PFNGLVIEWPORTARRAYVPROC)glewGetProcAddress((const GLubyte*)"glViewportArrayv")) == NULL) || r; - r = ((glViewportIndexedf = (PFNGLVIEWPORTINDEXEDFPROC)glewGetProcAddress((const GLubyte*)"glViewportIndexedf")) == NULL) || r; - r = ((glViewportIndexedfv = (PFNGLVIEWPORTINDEXEDFVPROC)glewGetProcAddress((const GLubyte*)"glViewportIndexedfv")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_viewport_array */ - -#ifdef GL_ARB_window_pos - -static GLboolean _glewInit_GL_ARB_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glWindowPos2dARB = (PFNGLWINDOWPOS2DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dARB")) == NULL) || r; - r = ((glWindowPos2dvARB = (PFNGLWINDOWPOS2DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvARB")) == NULL) || r; - r = ((glWindowPos2fARB = (PFNGLWINDOWPOS2FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fARB")) == NULL) || r; - r = ((glWindowPos2fvARB = (PFNGLWINDOWPOS2FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvARB")) == NULL) || r; - r = ((glWindowPos2iARB = (PFNGLWINDOWPOS2IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iARB")) == NULL) || r; - r = ((glWindowPos2ivARB = (PFNGLWINDOWPOS2IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivARB")) == NULL) || r; - r = ((glWindowPos2sARB = (PFNGLWINDOWPOS2SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sARB")) == NULL) || r; - r = ((glWindowPos2svARB = (PFNGLWINDOWPOS2SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svARB")) == NULL) || r; - r = ((glWindowPos3dARB = (PFNGLWINDOWPOS3DARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dARB")) == NULL) || r; - r = ((glWindowPos3dvARB = (PFNGLWINDOWPOS3DVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvARB")) == NULL) || r; - r = ((glWindowPos3fARB = (PFNGLWINDOWPOS3FARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fARB")) == NULL) || r; - r = ((glWindowPos3fvARB = (PFNGLWINDOWPOS3FVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvARB")) == NULL) || r; - r = ((glWindowPos3iARB = (PFNGLWINDOWPOS3IARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iARB")) == NULL) || r; - r = ((glWindowPos3ivARB = (PFNGLWINDOWPOS3IVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivARB")) == NULL) || r; - r = ((glWindowPos3sARB = (PFNGLWINDOWPOS3SARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sARB")) == NULL) || r; - r = ((glWindowPos3svARB = (PFNGLWINDOWPOS3SVARBPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svARB")) == NULL) || r; - - return r; -} - -#endif /* GL_ARB_window_pos */ - -#ifdef GL_ATIX_point_sprites - -#endif /* GL_ATIX_point_sprites */ - -#ifdef GL_ATIX_texture_env_combine3 - -#endif /* GL_ATIX_texture_env_combine3 */ - -#ifdef GL_ATIX_texture_env_route - -#endif /* GL_ATIX_texture_env_route */ - -#ifdef GL_ATIX_vertex_shader_output_point_size - -#endif /* GL_ATIX_vertex_shader_output_point_size */ - -#ifdef GL_ATI_draw_buffers - -static GLboolean _glewInit_GL_ATI_draw_buffers (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC)glewGetProcAddress((const GLubyte*)"glDrawBuffersATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_draw_buffers */ - -#ifdef GL_ATI_element_array - -static GLboolean _glewInit_GL_ATI_element_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawElementArrayATI")) == NULL) || r; - r = ((glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementArrayATI")) == NULL) || r; - r = ((glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)glewGetProcAddress((const GLubyte*)"glElementPointerATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_element_array */ - -#ifdef GL_ATI_envmap_bumpmap - -static GLboolean _glewInit_GL_ATI_envmap_bumpmap (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTexBumpParameterfvATI = (PFNGLGETTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterfvATI")) == NULL) || r; - r = ((glGetTexBumpParameterivATI = (PFNGLGETTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetTexBumpParameterivATI")) == NULL) || r; - r = ((glTexBumpParameterfvATI = (PFNGLTEXBUMPPARAMETERFVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterfvATI")) == NULL) || r; - r = ((glTexBumpParameterivATI = (PFNGLTEXBUMPPARAMETERIVATIPROC)glewGetProcAddress((const GLubyte*)"glTexBumpParameterivATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_envmap_bumpmap */ - -#ifdef GL_ATI_fragment_shader - -static GLboolean _glewInit_GL_ATI_fragment_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp1ATI")) == NULL) || r; - r = ((glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp2ATI")) == NULL) || r; - r = ((glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glAlphaFragmentOp3ATI")) == NULL) || r; - r = ((glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBeginFragmentShaderATI")) == NULL) || r; - r = ((glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glBindFragmentShaderATI")) == NULL) || r; - r = ((glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp1ATI")) == NULL) || r; - r = ((glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp2ATI")) == NULL) || r; - r = ((glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)glewGetProcAddress((const GLubyte*)"glColorFragmentOp3ATI")) == NULL) || r; - r = ((glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glDeleteFragmentShaderATI")) == NULL) || r; - r = ((glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)glewGetProcAddress((const GLubyte*)"glEndFragmentShaderATI")) == NULL) || r; - r = ((glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)glewGetProcAddress((const GLubyte*)"glGenFragmentShadersATI")) == NULL) || r; - r = ((glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)glewGetProcAddress((const GLubyte*)"glPassTexCoordATI")) == NULL) || r; - r = ((glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)glewGetProcAddress((const GLubyte*)"glSampleMapATI")) == NULL) || r; - r = ((glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)glewGetProcAddress((const GLubyte*)"glSetFragmentShaderConstantATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_fragment_shader */ - -#ifdef GL_ATI_map_object_buffer - -static GLboolean _glewInit_GL_ATI_map_object_buffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMapObjectBufferATI = (PFNGLMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glMapObjectBufferATI")) == NULL) || r; - r = ((glUnmapObjectBufferATI = (PFNGLUNMAPOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUnmapObjectBufferATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_map_object_buffer */ - -#ifdef GL_ATI_meminfo - -#endif /* GL_ATI_meminfo */ - -#ifdef GL_ATI_pn_triangles - -static GLboolean _glewInit_GL_ATI_pn_triangles (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPNTrianglesfATI = (PFNGLPNTRIANGLESFATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesfATI")) == NULL) || r; - r = ((glPNTrianglesiATI = (PFNGLPNTRIANGLESIATIPROC)glewGetProcAddress((const GLubyte*)"glPNTrianglesiATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_pn_triangles */ - -#ifdef GL_ATI_separate_stencil - -static GLboolean _glewInit_GL_ATI_separate_stencil (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilFuncSeparateATI")) == NULL) || r; - r = ((glStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)glewGetProcAddress((const GLubyte*)"glStencilOpSeparateATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_separate_stencil */ - -#ifdef GL_ATI_shader_texture_lod - -#endif /* GL_ATI_shader_texture_lod */ - -#ifdef GL_ATI_text_fragment_shader - -#endif /* GL_ATI_text_fragment_shader */ - -#ifdef GL_ATI_texture_compression_3dc - -#endif /* GL_ATI_texture_compression_3dc */ - -#ifdef GL_ATI_texture_env_combine3 - -#endif /* GL_ATI_texture_env_combine3 */ - -#ifdef GL_ATI_texture_float - -#endif /* GL_ATI_texture_float */ - -#ifdef GL_ATI_texture_mirror_once - -#endif /* GL_ATI_texture_mirror_once */ - -#ifdef GL_ATI_vertex_array_object - -static GLboolean _glewInit_GL_ATI_vertex_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glArrayObjectATI")) == NULL) || r; - r = ((glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glFreeObjectBufferATI")) == NULL) || r; - r = ((glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectfvATI")) == NULL) || r; - r = ((glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetArrayObjectivATI")) == NULL) || r; - r = ((glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferfvATI")) == NULL) || r; - r = ((glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetObjectBufferivATI")) == NULL) || r; - r = ((glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectfvATI")) == NULL) || r; - r = ((glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVariantArrayObjectivATI")) == NULL) || r; - r = ((glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glIsObjectBufferATI")) == NULL) || r; - r = ((glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glNewObjectBufferATI")) == NULL) || r; - r = ((glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)glewGetProcAddress((const GLubyte*)"glUpdateObjectBufferATI")) == NULL) || r; - r = ((glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVariantArrayObjectATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_vertex_array_object */ - -#ifdef GL_ATI_vertex_attrib_array_object - -static GLboolean _glewInit_GL_ATI_vertex_attrib_array_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribArrayObjectfvATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectfvATI")) == NULL) || r; - r = ((glGetVertexAttribArrayObjectivATI = (PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribArrayObjectivATI")) == NULL) || r; - r = ((glVertexAttribArrayObjectATI = (PFNGLVERTEXATTRIBARRAYOBJECTATIPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribArrayObjectATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_vertex_attrib_array_object */ - -#ifdef GL_ATI_vertex_streams - -static GLboolean _glewInit_GL_ATI_vertex_streams (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClientActiveVertexStreamATI = (PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC)glewGetProcAddress((const GLubyte*)"glClientActiveVertexStreamATI")) == NULL) || r; - r = ((glNormalStream3bATI = (PFNGLNORMALSTREAM3BATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bATI")) == NULL) || r; - r = ((glNormalStream3bvATI = (PFNGLNORMALSTREAM3BVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3bvATI")) == NULL) || r; - r = ((glNormalStream3dATI = (PFNGLNORMALSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dATI")) == NULL) || r; - r = ((glNormalStream3dvATI = (PFNGLNORMALSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3dvATI")) == NULL) || r; - r = ((glNormalStream3fATI = (PFNGLNORMALSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fATI")) == NULL) || r; - r = ((glNormalStream3fvATI = (PFNGLNORMALSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3fvATI")) == NULL) || r; - r = ((glNormalStream3iATI = (PFNGLNORMALSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3iATI")) == NULL) || r; - r = ((glNormalStream3ivATI = (PFNGLNORMALSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3ivATI")) == NULL) || r; - r = ((glNormalStream3sATI = (PFNGLNORMALSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3sATI")) == NULL) || r; - r = ((glNormalStream3svATI = (PFNGLNORMALSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glNormalStream3svATI")) == NULL) || r; - r = ((glVertexBlendEnvfATI = (PFNGLVERTEXBLENDENVFATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnvfATI")) == NULL) || r; - r = ((glVertexBlendEnviATI = (PFNGLVERTEXBLENDENVIATIPROC)glewGetProcAddress((const GLubyte*)"glVertexBlendEnviATI")) == NULL) || r; - r = ((glVertexStream1dATI = (PFNGLVERTEXSTREAM1DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1dATI")) == NULL) || r; - r = ((glVertexStream1dvATI = (PFNGLVERTEXSTREAM1DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1dvATI")) == NULL) || r; - r = ((glVertexStream1fATI = (PFNGLVERTEXSTREAM1FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1fATI")) == NULL) || r; - r = ((glVertexStream1fvATI = (PFNGLVERTEXSTREAM1FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1fvATI")) == NULL) || r; - r = ((glVertexStream1iATI = (PFNGLVERTEXSTREAM1IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1iATI")) == NULL) || r; - r = ((glVertexStream1ivATI = (PFNGLVERTEXSTREAM1IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1ivATI")) == NULL) || r; - r = ((glVertexStream1sATI = (PFNGLVERTEXSTREAM1SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1sATI")) == NULL) || r; - r = ((glVertexStream1svATI = (PFNGLVERTEXSTREAM1SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream1svATI")) == NULL) || r; - r = ((glVertexStream2dATI = (PFNGLVERTEXSTREAM2DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dATI")) == NULL) || r; - r = ((glVertexStream2dvATI = (PFNGLVERTEXSTREAM2DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2dvATI")) == NULL) || r; - r = ((glVertexStream2fATI = (PFNGLVERTEXSTREAM2FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fATI")) == NULL) || r; - r = ((glVertexStream2fvATI = (PFNGLVERTEXSTREAM2FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2fvATI")) == NULL) || r; - r = ((glVertexStream2iATI = (PFNGLVERTEXSTREAM2IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2iATI")) == NULL) || r; - r = ((glVertexStream2ivATI = (PFNGLVERTEXSTREAM2IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2ivATI")) == NULL) || r; - r = ((glVertexStream2sATI = (PFNGLVERTEXSTREAM2SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2sATI")) == NULL) || r; - r = ((glVertexStream2svATI = (PFNGLVERTEXSTREAM2SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream2svATI")) == NULL) || r; - r = ((glVertexStream3dATI = (PFNGLVERTEXSTREAM3DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dATI")) == NULL) || r; - r = ((glVertexStream3dvATI = (PFNGLVERTEXSTREAM3DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3dvATI")) == NULL) || r; - r = ((glVertexStream3fATI = (PFNGLVERTEXSTREAM3FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fATI")) == NULL) || r; - r = ((glVertexStream3fvATI = (PFNGLVERTEXSTREAM3FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3fvATI")) == NULL) || r; - r = ((glVertexStream3iATI = (PFNGLVERTEXSTREAM3IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3iATI")) == NULL) || r; - r = ((glVertexStream3ivATI = (PFNGLVERTEXSTREAM3IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3ivATI")) == NULL) || r; - r = ((glVertexStream3sATI = (PFNGLVERTEXSTREAM3SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3sATI")) == NULL) || r; - r = ((glVertexStream3svATI = (PFNGLVERTEXSTREAM3SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream3svATI")) == NULL) || r; - r = ((glVertexStream4dATI = (PFNGLVERTEXSTREAM4DATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dATI")) == NULL) || r; - r = ((glVertexStream4dvATI = (PFNGLVERTEXSTREAM4DVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4dvATI")) == NULL) || r; - r = ((glVertexStream4fATI = (PFNGLVERTEXSTREAM4FATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fATI")) == NULL) || r; - r = ((glVertexStream4fvATI = (PFNGLVERTEXSTREAM4FVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4fvATI")) == NULL) || r; - r = ((glVertexStream4iATI = (PFNGLVERTEXSTREAM4IATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4iATI")) == NULL) || r; - r = ((glVertexStream4ivATI = (PFNGLVERTEXSTREAM4IVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4ivATI")) == NULL) || r; - r = ((glVertexStream4sATI = (PFNGLVERTEXSTREAM4SATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4sATI")) == NULL) || r; - r = ((glVertexStream4svATI = (PFNGLVERTEXSTREAM4SVATIPROC)glewGetProcAddress((const GLubyte*)"glVertexStream4svATI")) == NULL) || r; - - return r; -} - -#endif /* GL_ATI_vertex_streams */ - -#ifdef GL_EXT_422_pixels - -#endif /* GL_EXT_422_pixels */ - -#ifdef GL_EXT_Cg_shader - -#endif /* GL_EXT_Cg_shader */ - -#ifdef GL_EXT_abgr - -#endif /* GL_EXT_abgr */ - -#ifdef GL_EXT_bgra - -#endif /* GL_EXT_bgra */ - -#ifdef GL_EXT_bindable_uniform - -static GLboolean _glewInit_GL_EXT_bindable_uniform (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetUniformBufferSizeEXT = (PFNGLGETUNIFORMBUFFERSIZEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformBufferSizeEXT")) == NULL) || r; - r = ((glGetUniformOffsetEXT = (PFNGLGETUNIFORMOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformOffsetEXT")) == NULL) || r; - r = ((glUniformBufferEXT = (PFNGLUNIFORMBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUniformBufferEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_bindable_uniform */ - -#ifdef GL_EXT_blend_color - -static GLboolean _glewInit_GL_EXT_blend_color (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)glewGetProcAddress((const GLubyte*)"glBlendColorEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_color */ - -#ifdef GL_EXT_blend_equation_separate - -static GLboolean _glewInit_GL_EXT_blend_equation_separate (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationSeparateEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_equation_separate */ - -#ifdef GL_EXT_blend_func_separate - -static GLboolean _glewInit_GL_EXT_blend_func_separate (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendFuncSeparateEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_func_separate */ - -#ifdef GL_EXT_blend_logic_op - -#endif /* GL_EXT_blend_logic_op */ - -#ifdef GL_EXT_blend_minmax - -static GLboolean _glewInit_GL_EXT_blend_minmax (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBlendEquationEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_blend_minmax */ - -#ifdef GL_EXT_blend_subtract - -#endif /* GL_EXT_blend_subtract */ - -#ifdef GL_EXT_clip_volume_hint - -#endif /* GL_EXT_clip_volume_hint */ - -#ifdef GL_EXT_cmyka - -#endif /* GL_EXT_cmyka */ - -#ifdef GL_EXT_color_subtable - -static GLboolean _glewInit_GL_EXT_color_subtable (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorSubTableEXT = (PFNGLCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorSubTableEXT")) == NULL) || r; - r = ((glCopyColorSubTableEXT = (PFNGLCOPYCOLORSUBTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyColorSubTableEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_color_subtable */ - -#ifdef GL_EXT_compiled_vertex_array - -static GLboolean _glewInit_GL_EXT_compiled_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glLockArraysEXT = (PFNGLLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glLockArraysEXT")) == NULL) || r; - r = ((glUnlockArraysEXT = (PFNGLUNLOCKARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glUnlockArraysEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_compiled_vertex_array */ - -#ifdef GL_EXT_convolution - -static GLboolean _glewInit_GL_EXT_convolution (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glConvolutionFilter1DEXT = (PFNGLCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter1DEXT")) == NULL) || r; - r = ((glConvolutionFilter2DEXT = (PFNGLCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionFilter2DEXT")) == NULL) || r; - r = ((glConvolutionParameterfEXT = (PFNGLCONVOLUTIONPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfEXT")) == NULL) || r; - r = ((glConvolutionParameterfvEXT = (PFNGLCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterfvEXT")) == NULL) || r; - r = ((glConvolutionParameteriEXT = (PFNGLCONVOLUTIONPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameteriEXT")) == NULL) || r; - r = ((glConvolutionParameterivEXT = (PFNGLCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glConvolutionParameterivEXT")) == NULL) || r; - r = ((glCopyConvolutionFilter1DEXT = (PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter1DEXT")) == NULL) || r; - r = ((glCopyConvolutionFilter2DEXT = (PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyConvolutionFilter2DEXT")) == NULL) || r; - r = ((glGetConvolutionFilterEXT = (PFNGLGETCONVOLUTIONFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionFilterEXT")) == NULL) || r; - r = ((glGetConvolutionParameterfvEXT = (PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterfvEXT")) == NULL) || r; - r = ((glGetConvolutionParameterivEXT = (PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetConvolutionParameterivEXT")) == NULL) || r; - r = ((glGetSeparableFilterEXT = (PFNGLGETSEPARABLEFILTEREXTPROC)glewGetProcAddress((const GLubyte*)"glGetSeparableFilterEXT")) == NULL) || r; - r = ((glSeparableFilter2DEXT = (PFNGLSEPARABLEFILTER2DEXTPROC)glewGetProcAddress((const GLubyte*)"glSeparableFilter2DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_convolution */ - -#ifdef GL_EXT_coordinate_frame - -static GLboolean _glewInit_GL_EXT_coordinate_frame (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBinormalPointerEXT = (PFNGLBINORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glBinormalPointerEXT")) == NULL) || r; - r = ((glTangentPointerEXT = (PFNGLTANGENTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTangentPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_coordinate_frame */ - -#ifdef GL_EXT_copy_texture - -static GLboolean _glewInit_GL_EXT_copy_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyTexImage1DEXT = (PFNGLCOPYTEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage1DEXT")) == NULL) || r; - r = ((glCopyTexImage2DEXT = (PFNGLCOPYTEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexImage2DEXT")) == NULL) || r; - r = ((glCopyTexSubImage1DEXT = (PFNGLCOPYTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage1DEXT")) == NULL) || r; - r = ((glCopyTexSubImage2DEXT = (PFNGLCOPYTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage2DEXT")) == NULL) || r; - r = ((glCopyTexSubImage3DEXT = (PFNGLCOPYTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTexSubImage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_copy_texture */ - -#ifdef GL_EXT_cull_vertex - -static GLboolean _glewInit_GL_EXT_cull_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCullParameterdvEXT = (PFNGLCULLPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterdvEXT")) == NULL) || r; - r = ((glCullParameterfvEXT = (PFNGLCULLPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glCullParameterfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_cull_vertex */ - -#ifdef GL_EXT_debug_marker - -static GLboolean _glewInit_GL_EXT_debug_marker (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glInsertEventMarkerEXT")) == NULL) || r; - r = ((glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glPopGroupMarkerEXT")) == NULL) || r; - r = ((glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC)glewGetProcAddress((const GLubyte*)"glPushGroupMarkerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_debug_marker */ - -#ifdef GL_EXT_depth_bounds_test - -static GLboolean _glewInit_GL_EXT_depth_bounds_test (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDepthBoundsEXT = (PFNGLDEPTHBOUNDSEXTPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_depth_bounds_test */ - -#ifdef GL_EXT_direct_state_access - -static GLboolean _glewInit_GL_EXT_direct_state_access (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindMultiTextureEXT = (PFNGLBINDMULTITEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindMultiTextureEXT")) == NULL) || r; - r = ((glCheckNamedFramebufferStatusEXT = (PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckNamedFramebufferStatusEXT")) == NULL) || r; - r = ((glClientAttribDefaultEXT = (PFNGLCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glClientAttribDefaultEXT")) == NULL) || r; - r = ((glCompressedMultiTexImage1DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage1DEXT")) == NULL) || r; - r = ((glCompressedMultiTexImage2DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage2DEXT")) == NULL) || r; - r = ((glCompressedMultiTexImage3DEXT = (PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexImage3DEXT")) == NULL) || r; - r = ((glCompressedMultiTexSubImage1DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage1DEXT")) == NULL) || r; - r = ((glCompressedMultiTexSubImage2DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage2DEXT")) == NULL) || r; - r = ((glCompressedMultiTexSubImage3DEXT = (PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedMultiTexSubImage3DEXT")) == NULL) || r; - r = ((glCompressedTextureImage1DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage1DEXT")) == NULL) || r; - r = ((glCompressedTextureImage2DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage2DEXT")) == NULL) || r; - r = ((glCompressedTextureImage3DEXT = (PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureImage3DEXT")) == NULL) || r; - r = ((glCompressedTextureSubImage1DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage1DEXT")) == NULL) || r; - r = ((glCompressedTextureSubImage2DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage2DEXT")) == NULL) || r; - r = ((glCompressedTextureSubImage3DEXT = (PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCompressedTextureSubImage3DEXT")) == NULL) || r; - r = ((glCopyMultiTexImage1DEXT = (PFNGLCOPYMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage1DEXT")) == NULL) || r; - r = ((glCopyMultiTexImage2DEXT = (PFNGLCOPYMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexImage2DEXT")) == NULL) || r; - r = ((glCopyMultiTexSubImage1DEXT = (PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage1DEXT")) == NULL) || r; - r = ((glCopyMultiTexSubImage2DEXT = (PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage2DEXT")) == NULL) || r; - r = ((glCopyMultiTexSubImage3DEXT = (PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyMultiTexSubImage3DEXT")) == NULL) || r; - r = ((glCopyTextureImage1DEXT = (PFNGLCOPYTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage1DEXT")) == NULL) || r; - r = ((glCopyTextureImage2DEXT = (PFNGLCOPYTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureImage2DEXT")) == NULL) || r; - r = ((glCopyTextureSubImage1DEXT = (PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage1DEXT")) == NULL) || r; - r = ((glCopyTextureSubImage2DEXT = (PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage2DEXT")) == NULL) || r; - r = ((glCopyTextureSubImage3DEXT = (PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glCopyTextureSubImage3DEXT")) == NULL) || r; - r = ((glDisableClientStateIndexedEXT = (PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableClientStateIndexedEXT")) == NULL) || r; - r = ((glDisableClientStateiEXT = (PFNGLDISABLECLIENTSTATEIEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableClientStateiEXT")) == NULL) || r; - r = ((glDisableVertexArrayAttribEXT = (PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexArrayAttribEXT")) == NULL) || r; - r = ((glDisableVertexArrayEXT = (PFNGLDISABLEVERTEXARRAYEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVertexArrayEXT")) == NULL) || r; - r = ((glEnableClientStateIndexedEXT = (PFNGLENABLECLIENTSTATEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableClientStateIndexedEXT")) == NULL) || r; - r = ((glEnableClientStateiEXT = (PFNGLENABLECLIENTSTATEIEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableClientStateiEXT")) == NULL) || r; - r = ((glEnableVertexArrayAttribEXT = (PFNGLENABLEVERTEXARRAYATTRIBEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexArrayAttribEXT")) == NULL) || r; - r = ((glEnableVertexArrayEXT = (PFNGLENABLEVERTEXARRAYEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVertexArrayEXT")) == NULL) || r; - r = ((glFlushMappedNamedBufferRangeEXT = (PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glFlushMappedNamedBufferRangeEXT")) == NULL) || r; - r = ((glFramebufferDrawBufferEXT = (PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBufferEXT")) == NULL) || r; - r = ((glFramebufferDrawBuffersEXT = (PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferDrawBuffersEXT")) == NULL) || r; - r = ((glFramebufferReadBufferEXT = (PFNGLFRAMEBUFFERREADBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferReadBufferEXT")) == NULL) || r; - r = ((glGenerateMultiTexMipmapEXT = (PFNGLGENERATEMULTITEXMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMultiTexMipmapEXT")) == NULL) || r; - r = ((glGenerateTextureMipmapEXT = (PFNGLGENERATETEXTUREMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateTextureMipmapEXT")) == NULL) || r; - r = ((glGetCompressedMultiTexImageEXT = (PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedMultiTexImageEXT")) == NULL) || r; - r = ((glGetCompressedTextureImageEXT = (PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetCompressedTextureImageEXT")) == NULL) || r; - r = ((glGetDoubleIndexedvEXT = (PFNGLGETDOUBLEINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetDoubleIndexedvEXT")) == NULL) || r; - r = ((glGetDoublei_vEXT = (PFNGLGETDOUBLEI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetDoublei_vEXT")) == NULL) || r; - r = ((glGetFloatIndexedvEXT = (PFNGLGETFLOATINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFloatIndexedvEXT")) == NULL) || r; - r = ((glGetFloati_vEXT = (PFNGLGETFLOATI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFloati_vEXT")) == NULL) || r; - r = ((glGetFramebufferParameterivEXT = (PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferParameterivEXT")) == NULL) || r; - r = ((glGetMultiTexEnvfvEXT = (PFNGLGETMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvfvEXT")) == NULL) || r; - r = ((glGetMultiTexEnvivEXT = (PFNGLGETMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexEnvivEXT")) == NULL) || r; - r = ((glGetMultiTexGendvEXT = (PFNGLGETMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGendvEXT")) == NULL) || r; - r = ((glGetMultiTexGenfvEXT = (PFNGLGETMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenfvEXT")) == NULL) || r; - r = ((glGetMultiTexGenivEXT = (PFNGLGETMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexGenivEXT")) == NULL) || r; - r = ((glGetMultiTexImageEXT = (PFNGLGETMULTITEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexImageEXT")) == NULL) || r; - r = ((glGetMultiTexLevelParameterfvEXT = (PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterfvEXT")) == NULL) || r; - r = ((glGetMultiTexLevelParameterivEXT = (PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexLevelParameterivEXT")) == NULL) || r; - r = ((glGetMultiTexParameterIivEXT = (PFNGLGETMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIivEXT")) == NULL) || r; - r = ((glGetMultiTexParameterIuivEXT = (PFNGLGETMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterIuivEXT")) == NULL) || r; - r = ((glGetMultiTexParameterfvEXT = (PFNGLGETMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterfvEXT")) == NULL) || r; - r = ((glGetMultiTexParameterivEXT = (PFNGLGETMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMultiTexParameterivEXT")) == NULL) || r; - r = ((glGetNamedBufferParameterivEXT = (PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferParameterivEXT")) == NULL) || r; - r = ((glGetNamedBufferPointervEXT = (PFNGLGETNAMEDBUFFERPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferPointervEXT")) == NULL) || r; - r = ((glGetNamedBufferSubDataEXT = (PFNGLGETNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferSubDataEXT")) == NULL) || r; - r = ((glGetNamedFramebufferAttachmentParameterivEXT = (PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedFramebufferAttachmentParameterivEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterIivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIivEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterIuivEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterIuivEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterdvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterdvEXT")) == NULL) || r; - r = ((glGetNamedProgramLocalParameterfvEXT = (PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramLocalParameterfvEXT")) == NULL) || r; - r = ((glGetNamedProgramStringEXT = (PFNGLGETNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramStringEXT")) == NULL) || r; - r = ((glGetNamedProgramivEXT = (PFNGLGETNAMEDPROGRAMIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedProgramivEXT")) == NULL) || r; - r = ((glGetNamedRenderbufferParameterivEXT = (PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetNamedRenderbufferParameterivEXT")) == NULL) || r; - r = ((glGetPointerIndexedvEXT = (PFNGLGETPOINTERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointerIndexedvEXT")) == NULL) || r; - r = ((glGetPointeri_vEXT = (PFNGLGETPOINTERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPointeri_vEXT")) == NULL) || r; - r = ((glGetTextureImageEXT = (PFNGLGETTEXTUREIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureImageEXT")) == NULL) || r; - r = ((glGetTextureLevelParameterfvEXT = (PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterfvEXT")) == NULL) || r; - r = ((glGetTextureLevelParameterivEXT = (PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureLevelParameterivEXT")) == NULL) || r; - r = ((glGetTextureParameterIivEXT = (PFNGLGETTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIivEXT")) == NULL) || r; - r = ((glGetTextureParameterIuivEXT = (PFNGLGETTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterIuivEXT")) == NULL) || r; - r = ((glGetTextureParameterfvEXT = (PFNGLGETTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterfvEXT")) == NULL) || r; - r = ((glGetTextureParameterivEXT = (PFNGLGETTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTextureParameterivEXT")) == NULL) || r; - r = ((glGetVertexArrayIntegeri_vEXT = (PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayIntegeri_vEXT")) == NULL) || r; - r = ((glGetVertexArrayIntegervEXT = (PFNGLGETVERTEXARRAYINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayIntegervEXT")) == NULL) || r; - r = ((glGetVertexArrayPointeri_vEXT = (PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayPointeri_vEXT")) == NULL) || r; - r = ((glGetVertexArrayPointervEXT = (PFNGLGETVERTEXARRAYPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexArrayPointervEXT")) == NULL) || r; - r = ((glMapNamedBufferEXT = (PFNGLMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMapNamedBufferEXT")) == NULL) || r; - r = ((glMapNamedBufferRangeEXT = (PFNGLMAPNAMEDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glMapNamedBufferRangeEXT")) == NULL) || r; - r = ((glMatrixFrustumEXT = (PFNGLMATRIXFRUSTUMEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixFrustumEXT")) == NULL) || r; - r = ((glMatrixLoadIdentityEXT = (PFNGLMATRIXLOADIDENTITYEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadIdentityEXT")) == NULL) || r; - r = ((glMatrixLoadTransposedEXT = (PFNGLMATRIXLOADTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposedEXT")) == NULL) || r; - r = ((glMatrixLoadTransposefEXT = (PFNGLMATRIXLOADTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadTransposefEXT")) == NULL) || r; - r = ((glMatrixLoaddEXT = (PFNGLMATRIXLOADDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoaddEXT")) == NULL) || r; - r = ((glMatrixLoadfEXT = (PFNGLMATRIXLOADFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixLoadfEXT")) == NULL) || r; - r = ((glMatrixMultTransposedEXT = (PFNGLMATRIXMULTTRANSPOSEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposedEXT")) == NULL) || r; - r = ((glMatrixMultTransposefEXT = (PFNGLMATRIXMULTTRANSPOSEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultTransposefEXT")) == NULL) || r; - r = ((glMatrixMultdEXT = (PFNGLMATRIXMULTDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultdEXT")) == NULL) || r; - r = ((glMatrixMultfEXT = (PFNGLMATRIXMULTFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixMultfEXT")) == NULL) || r; - r = ((glMatrixOrthoEXT = (PFNGLMATRIXORTHOEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixOrthoEXT")) == NULL) || r; - r = ((glMatrixPopEXT = (PFNGLMATRIXPOPEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPopEXT")) == NULL) || r; - r = ((glMatrixPushEXT = (PFNGLMATRIXPUSHEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixPushEXT")) == NULL) || r; - r = ((glMatrixRotatedEXT = (PFNGLMATRIXROTATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatedEXT")) == NULL) || r; - r = ((glMatrixRotatefEXT = (PFNGLMATRIXROTATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixRotatefEXT")) == NULL) || r; - r = ((glMatrixScaledEXT = (PFNGLMATRIXSCALEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScaledEXT")) == NULL) || r; - r = ((glMatrixScalefEXT = (PFNGLMATRIXSCALEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixScalefEXT")) == NULL) || r; - r = ((glMatrixTranslatedEXT = (PFNGLMATRIXTRANSLATEDEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatedEXT")) == NULL) || r; - r = ((glMatrixTranslatefEXT = (PFNGLMATRIXTRANSLATEFEXTPROC)glewGetProcAddress((const GLubyte*)"glMatrixTranslatefEXT")) == NULL) || r; - r = ((glMultiTexBufferEXT = (PFNGLMULTITEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexBufferEXT")) == NULL) || r; - r = ((glMultiTexCoordPointerEXT = (PFNGLMULTITEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoordPointerEXT")) == NULL) || r; - r = ((glMultiTexEnvfEXT = (PFNGLMULTITEXENVFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfEXT")) == NULL) || r; - r = ((glMultiTexEnvfvEXT = (PFNGLMULTITEXENVFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvfvEXT")) == NULL) || r; - r = ((glMultiTexEnviEXT = (PFNGLMULTITEXENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnviEXT")) == NULL) || r; - r = ((glMultiTexEnvivEXT = (PFNGLMULTITEXENVIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexEnvivEXT")) == NULL) || r; - r = ((glMultiTexGendEXT = (PFNGLMULTITEXGENDEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendEXT")) == NULL) || r; - r = ((glMultiTexGendvEXT = (PFNGLMULTITEXGENDVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGendvEXT")) == NULL) || r; - r = ((glMultiTexGenfEXT = (PFNGLMULTITEXGENFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfEXT")) == NULL) || r; - r = ((glMultiTexGenfvEXT = (PFNGLMULTITEXGENFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenfvEXT")) == NULL) || r; - r = ((glMultiTexGeniEXT = (PFNGLMULTITEXGENIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGeniEXT")) == NULL) || r; - r = ((glMultiTexGenivEXT = (PFNGLMULTITEXGENIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexGenivEXT")) == NULL) || r; - r = ((glMultiTexImage1DEXT = (PFNGLMULTITEXIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage1DEXT")) == NULL) || r; - r = ((glMultiTexImage2DEXT = (PFNGLMULTITEXIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage2DEXT")) == NULL) || r; - r = ((glMultiTexImage3DEXT = (PFNGLMULTITEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexImage3DEXT")) == NULL) || r; - r = ((glMultiTexParameterIivEXT = (PFNGLMULTITEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIivEXT")) == NULL) || r; - r = ((glMultiTexParameterIuivEXT = (PFNGLMULTITEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterIuivEXT")) == NULL) || r; - r = ((glMultiTexParameterfEXT = (PFNGLMULTITEXPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfEXT")) == NULL) || r; - r = ((glMultiTexParameterfvEXT = (PFNGLMULTITEXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterfvEXT")) == NULL) || r; - r = ((glMultiTexParameteriEXT = (PFNGLMULTITEXPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameteriEXT")) == NULL) || r; - r = ((glMultiTexParameterivEXT = (PFNGLMULTITEXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexParameterivEXT")) == NULL) || r; - r = ((glMultiTexRenderbufferEXT = (PFNGLMULTITEXRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexRenderbufferEXT")) == NULL) || r; - r = ((glMultiTexSubImage1DEXT = (PFNGLMULTITEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage1DEXT")) == NULL) || r; - r = ((glMultiTexSubImage2DEXT = (PFNGLMULTITEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage2DEXT")) == NULL) || r; - r = ((glMultiTexSubImage3DEXT = (PFNGLMULTITEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiTexSubImage3DEXT")) == NULL) || r; - r = ((glNamedBufferDataEXT = (PFNGLNAMEDBUFFERDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferDataEXT")) == NULL) || r; - r = ((glNamedBufferSubDataEXT = (PFNGLNAMEDBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedBufferSubDataEXT")) == NULL) || r; - r = ((glNamedCopyBufferSubDataEXT = (PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedCopyBufferSubDataEXT")) == NULL) || r; - r = ((glNamedFramebufferRenderbufferEXT = (PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferRenderbufferEXT")) == NULL) || r; - r = ((glNamedFramebufferTexture1DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture1DEXT")) == NULL) || r; - r = ((glNamedFramebufferTexture2DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture2DEXT")) == NULL) || r; - r = ((glNamedFramebufferTexture3DEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTexture3DEXT")) == NULL) || r; - r = ((glNamedFramebufferTextureEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureEXT")) == NULL) || r; - r = ((glNamedFramebufferTextureFaceEXT = (PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureFaceEXT")) == NULL) || r; - r = ((glNamedFramebufferTextureLayerEXT = (PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glNamedFramebufferTextureLayerEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4dEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4dvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4dvEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4fEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameter4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameter4fvEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4iEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4iEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4ivEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4uiEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uiEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameterI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameterI4uivEXT")) == NULL) || r; - r = ((glNamedProgramLocalParameters4fvEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParameters4fvEXT")) == NULL) || r; - r = ((glNamedProgramLocalParametersI4ivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4ivEXT")) == NULL) || r; - r = ((glNamedProgramLocalParametersI4uivEXT = (PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramLocalParametersI4uivEXT")) == NULL) || r; - r = ((glNamedProgramStringEXT = (PFNGLNAMEDPROGRAMSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedProgramStringEXT")) == NULL) || r; - r = ((glNamedRenderbufferStorageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageEXT")) == NULL) || r; - r = ((glNamedRenderbufferStorageMultisampleCoverageEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleCoverageEXT")) == NULL) || r; - r = ((glNamedRenderbufferStorageMultisampleEXT = (PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glNamedRenderbufferStorageMultisampleEXT")) == NULL) || r; - r = ((glProgramUniform1fEXT = (PFNGLPROGRAMUNIFORM1FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fEXT")) == NULL) || r; - r = ((glProgramUniform1fvEXT = (PFNGLPROGRAMUNIFORM1FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1fvEXT")) == NULL) || r; - r = ((glProgramUniform1iEXT = (PFNGLPROGRAMUNIFORM1IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1iEXT")) == NULL) || r; - r = ((glProgramUniform1ivEXT = (PFNGLPROGRAMUNIFORM1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ivEXT")) == NULL) || r; - r = ((glProgramUniform1uiEXT = (PFNGLPROGRAMUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uiEXT")) == NULL) || r; - r = ((glProgramUniform1uivEXT = (PFNGLPROGRAMUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1uivEXT")) == NULL) || r; - r = ((glProgramUniform2fEXT = (PFNGLPROGRAMUNIFORM2FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fEXT")) == NULL) || r; - r = ((glProgramUniform2fvEXT = (PFNGLPROGRAMUNIFORM2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2fvEXT")) == NULL) || r; - r = ((glProgramUniform2iEXT = (PFNGLPROGRAMUNIFORM2IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2iEXT")) == NULL) || r; - r = ((glProgramUniform2ivEXT = (PFNGLPROGRAMUNIFORM2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ivEXT")) == NULL) || r; - r = ((glProgramUniform2uiEXT = (PFNGLPROGRAMUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uiEXT")) == NULL) || r; - r = ((glProgramUniform2uivEXT = (PFNGLPROGRAMUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2uivEXT")) == NULL) || r; - r = ((glProgramUniform3fEXT = (PFNGLPROGRAMUNIFORM3FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fEXT")) == NULL) || r; - r = ((glProgramUniform3fvEXT = (PFNGLPROGRAMUNIFORM3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3fvEXT")) == NULL) || r; - r = ((glProgramUniform3iEXT = (PFNGLPROGRAMUNIFORM3IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3iEXT")) == NULL) || r; - r = ((glProgramUniform3ivEXT = (PFNGLPROGRAMUNIFORM3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ivEXT")) == NULL) || r; - r = ((glProgramUniform3uiEXT = (PFNGLPROGRAMUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uiEXT")) == NULL) || r; - r = ((glProgramUniform3uivEXT = (PFNGLPROGRAMUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3uivEXT")) == NULL) || r; - r = ((glProgramUniform4fEXT = (PFNGLPROGRAMUNIFORM4FEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fEXT")) == NULL) || r; - r = ((glProgramUniform4fvEXT = (PFNGLPROGRAMUNIFORM4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4fvEXT")) == NULL) || r; - r = ((glProgramUniform4iEXT = (PFNGLPROGRAMUNIFORM4IEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4iEXT")) == NULL) || r; - r = ((glProgramUniform4ivEXT = (PFNGLPROGRAMUNIFORM4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ivEXT")) == NULL) || r; - r = ((glProgramUniform4uiEXT = (PFNGLPROGRAMUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uiEXT")) == NULL) || r; - r = ((glProgramUniform4uivEXT = (PFNGLPROGRAMUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4uivEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x3fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix2x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix2x4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix3x4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix3x4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4x2fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x2fvEXT")) == NULL) || r; - r = ((glProgramUniformMatrix4x3fvEXT = (PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformMatrix4x3fvEXT")) == NULL) || r; - r = ((glPushClientAttribDefaultEXT = (PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC)glewGetProcAddress((const GLubyte*)"glPushClientAttribDefaultEXT")) == NULL) || r; - r = ((glTextureBufferEXT = (PFNGLTEXTUREBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureBufferEXT")) == NULL) || r; - r = ((glTextureImage1DEXT = (PFNGLTEXTUREIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage1DEXT")) == NULL) || r; - r = ((glTextureImage2DEXT = (PFNGLTEXTUREIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DEXT")) == NULL) || r; - r = ((glTextureImage3DEXT = (PFNGLTEXTUREIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DEXT")) == NULL) || r; - r = ((glTextureParameterIivEXT = (PFNGLTEXTUREPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIivEXT")) == NULL) || r; - r = ((glTextureParameterIuivEXT = (PFNGLTEXTUREPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterIuivEXT")) == NULL) || r; - r = ((glTextureParameterfEXT = (PFNGLTEXTUREPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfEXT")) == NULL) || r; - r = ((glTextureParameterfvEXT = (PFNGLTEXTUREPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterfvEXT")) == NULL) || r; - r = ((glTextureParameteriEXT = (PFNGLTEXTUREPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameteriEXT")) == NULL) || r; - r = ((glTextureParameterivEXT = (PFNGLTEXTUREPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureParameterivEXT")) == NULL) || r; - r = ((glTextureRenderbufferEXT = (PFNGLTEXTURERENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTextureRenderbufferEXT")) == NULL) || r; - r = ((glTextureSubImage1DEXT = (PFNGLTEXTURESUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage1DEXT")) == NULL) || r; - r = ((glTextureSubImage2DEXT = (PFNGLTEXTURESUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage2DEXT")) == NULL) || r; - r = ((glTextureSubImage3DEXT = (PFNGLTEXTURESUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureSubImage3DEXT")) == NULL) || r; - r = ((glUnmapNamedBufferEXT = (PFNGLUNMAPNAMEDBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glUnmapNamedBufferEXT")) == NULL) || r; - r = ((glVertexArrayColorOffsetEXT = (PFNGLVERTEXARRAYCOLOROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayColorOffsetEXT")) == NULL) || r; - r = ((glVertexArrayEdgeFlagOffsetEXT = (PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayEdgeFlagOffsetEXT")) == NULL) || r; - r = ((glVertexArrayFogCoordOffsetEXT = (PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayFogCoordOffsetEXT")) == NULL) || r; - r = ((glVertexArrayIndexOffsetEXT = (PFNGLVERTEXARRAYINDEXOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayIndexOffsetEXT")) == NULL) || r; - r = ((glVertexArrayMultiTexCoordOffsetEXT = (PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayMultiTexCoordOffsetEXT")) == NULL) || r; - r = ((glVertexArrayNormalOffsetEXT = (PFNGLVERTEXARRAYNORMALOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayNormalOffsetEXT")) == NULL) || r; - r = ((glVertexArraySecondaryColorOffsetEXT = (PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArraySecondaryColorOffsetEXT")) == NULL) || r; - r = ((glVertexArrayTexCoordOffsetEXT = (PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayTexCoordOffsetEXT")) == NULL) || r; - r = ((glVertexArrayVertexAttribIOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribIOffsetEXT")) == NULL) || r; - r = ((glVertexArrayVertexAttribOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribOffsetEXT")) == NULL) || r; - r = ((glVertexArrayVertexOffsetEXT = (PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexOffsetEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_direct_state_access */ - -#ifdef GL_EXT_draw_buffers2 - -static GLboolean _glewInit_GL_EXT_draw_buffers2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorMaskIndexedEXT = (PFNGLCOLORMASKINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glColorMaskIndexedEXT")) == NULL) || r; - r = ((glDisableIndexedEXT = (PFNGLDISABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableIndexedEXT")) == NULL) || r; - r = ((glEnableIndexedEXT = (PFNGLENABLEINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableIndexedEXT")) == NULL) || r; - r = ((glGetBooleanIndexedvEXT = (PFNGLGETBOOLEANINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetBooleanIndexedvEXT")) == NULL) || r; - r = ((glGetIntegerIndexedvEXT = (PFNGLGETINTEGERINDEXEDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerIndexedvEXT")) == NULL) || r; - r = ((glIsEnabledIndexedEXT = (PFNGLISENABLEDINDEXEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsEnabledIndexedEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_draw_buffers2 */ - -#ifdef GL_EXT_draw_instanced - -static GLboolean _glewInit_GL_EXT_draw_instanced (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawArraysInstancedEXT = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysInstancedEXT")) == NULL) || r; - r = ((glDrawElementsInstancedEXT = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawElementsInstancedEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_draw_instanced */ - -#ifdef GL_EXT_draw_range_elements - -static GLboolean _glewInit_GL_EXT_draw_range_elements (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawRangeElementsEXT = (PFNGLDRAWRANGEELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawRangeElementsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_draw_range_elements */ - -#ifdef GL_EXT_fog_coord - -static GLboolean _glewInit_GL_EXT_fog_coord (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerEXT")) == NULL) || r; - r = ((glFogCoorddEXT = (PFNGLFOGCOORDDEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddEXT")) == NULL) || r; - r = ((glFogCoorddvEXT = (PFNGLFOGCOORDDVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoorddvEXT")) == NULL) || r; - r = ((glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfEXT")) == NULL) || r; - r = ((glFogCoordfvEXT = (PFNGLFOGCOORDFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFogCoordfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_fog_coord */ - -#ifdef GL_EXT_fragment_lighting - -static GLboolean _glewInit_GL_EXT_fragment_lighting (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFragmentColorMaterialEXT = (PFNGLFRAGMENTCOLORMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialEXT")) == NULL) || r; - r = ((glFragmentLightModelfEXT = (PFNGLFRAGMENTLIGHTMODELFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfEXT")) == NULL) || r; - r = ((glFragmentLightModelfvEXT = (PFNGLFRAGMENTLIGHTMODELFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvEXT")) == NULL) || r; - r = ((glFragmentLightModeliEXT = (PFNGLFRAGMENTLIGHTMODELIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliEXT")) == NULL) || r; - r = ((glFragmentLightModelivEXT = (PFNGLFRAGMENTLIGHTMODELIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivEXT")) == NULL) || r; - r = ((glFragmentLightfEXT = (PFNGLFRAGMENTLIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfEXT")) == NULL) || r; - r = ((glFragmentLightfvEXT = (PFNGLFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvEXT")) == NULL) || r; - r = ((glFragmentLightiEXT = (PFNGLFRAGMENTLIGHTIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiEXT")) == NULL) || r; - r = ((glFragmentLightivEXT = (PFNGLFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivEXT")) == NULL) || r; - r = ((glFragmentMaterialfEXT = (PFNGLFRAGMENTMATERIALFEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfEXT")) == NULL) || r; - r = ((glFragmentMaterialfvEXT = (PFNGLFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvEXT")) == NULL) || r; - r = ((glFragmentMaterialiEXT = (PFNGLFRAGMENTMATERIALIEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiEXT")) == NULL) || r; - r = ((glFragmentMaterialivEXT = (PFNGLFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivEXT")) == NULL) || r; - r = ((glGetFragmentLightfvEXT = (PFNGLGETFRAGMENTLIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvEXT")) == NULL) || r; - r = ((glGetFragmentLightivEXT = (PFNGLGETFRAGMENTLIGHTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivEXT")) == NULL) || r; - r = ((glGetFragmentMaterialfvEXT = (PFNGLGETFRAGMENTMATERIALFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvEXT")) == NULL) || r; - r = ((glGetFragmentMaterialivEXT = (PFNGLGETFRAGMENTMATERIALIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivEXT")) == NULL) || r; - r = ((glLightEnviEXT = (PFNGLLIGHTENVIEXTPROC)glewGetProcAddress((const GLubyte*)"glLightEnviEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_fragment_lighting */ - -#ifdef GL_EXT_framebuffer_blit - -static GLboolean _glewInit_GL_EXT_framebuffer_blit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBlitFramebufferEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_framebuffer_blit */ - -#ifdef GL_EXT_framebuffer_multisample - -static GLboolean _glewInit_GL_EXT_framebuffer_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_framebuffer_multisample */ - -#ifdef GL_EXT_framebuffer_multisample_blit_scaled - -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ - -#ifdef GL_EXT_framebuffer_object - -static GLboolean _glewInit_GL_EXT_framebuffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindFramebufferEXT")) == NULL) || r; - r = ((glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindRenderbufferEXT")) == NULL) || r; - r = ((glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)glewGetProcAddress((const GLubyte*)"glCheckFramebufferStatusEXT")) == NULL) || r; - r = ((glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteFramebuffersEXT")) == NULL) || r; - r = ((glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteRenderbuffersEXT")) == NULL) || r; - r = ((glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferRenderbufferEXT")) == NULL) || r; - r = ((glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture1DEXT")) == NULL) || r; - r = ((glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture2DEXT")) == NULL) || r; - r = ((glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTexture3DEXT")) == NULL) || r; - r = ((glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenFramebuffersEXT")) == NULL) || r; - r = ((glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenRenderbuffersEXT")) == NULL) || r; - r = ((glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)glewGetProcAddress((const GLubyte*)"glGenerateMipmapEXT")) == NULL) || r; - r = ((glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFramebufferAttachmentParameterivEXT")) == NULL) || r; - r = ((glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetRenderbufferParameterivEXT")) == NULL) || r; - r = ((glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsFramebufferEXT")) == NULL) || r; - r = ((glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glIsRenderbufferEXT")) == NULL) || r; - r = ((glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_framebuffer_object */ - -#ifdef GL_EXT_framebuffer_sRGB - -#endif /* GL_EXT_framebuffer_sRGB */ - -#ifdef GL_EXT_geometry_shader4 - -static GLboolean _glewInit_GL_EXT_geometry_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureEXT")) == NULL) || r; - r = ((glFramebufferTextureFaceEXT = (PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureFaceEXT")) == NULL) || r; - r = ((glProgramParameteriEXT = (PFNGLPROGRAMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramParameteriEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_geometry_shader4 */ - -#ifdef GL_EXT_gpu_program_parameters - -static GLboolean _glewInit_GL_EXT_gpu_program_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramEnvParameters4fvEXT = (PFNGLPROGRAMENVPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameters4fvEXT")) == NULL) || r; - r = ((glProgramLocalParameters4fvEXT = (PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameters4fvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_gpu_program_parameters */ - -#ifdef GL_EXT_gpu_shader4 - -static GLboolean _glewInit_GL_EXT_gpu_shader4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindFragDataLocationEXT = (PFNGLBINDFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glBindFragDataLocationEXT")) == NULL) || r; - r = ((glGetFragDataLocationEXT = (PFNGLGETFRAGDATALOCATIONEXTPROC)glewGetProcAddress((const GLubyte*)"glGetFragDataLocationEXT")) == NULL) || r; - r = ((glGetUniformuivEXT = (PFNGLGETUNIFORMUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetUniformuivEXT")) == NULL) || r; - r = ((glGetVertexAttribIivEXT = (PFNGLGETVERTEXATTRIBIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIivEXT")) == NULL) || r; - r = ((glGetVertexAttribIuivEXT = (PFNGLGETVERTEXATTRIBIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribIuivEXT")) == NULL) || r; - r = ((glUniform1uiEXT = (PFNGLUNIFORM1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uiEXT")) == NULL) || r; - r = ((glUniform1uivEXT = (PFNGLUNIFORM1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform1uivEXT")) == NULL) || r; - r = ((glUniform2uiEXT = (PFNGLUNIFORM2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uiEXT")) == NULL) || r; - r = ((glUniform2uivEXT = (PFNGLUNIFORM2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform2uivEXT")) == NULL) || r; - r = ((glUniform3uiEXT = (PFNGLUNIFORM3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uiEXT")) == NULL) || r; - r = ((glUniform3uivEXT = (PFNGLUNIFORM3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform3uivEXT")) == NULL) || r; - r = ((glUniform4uiEXT = (PFNGLUNIFORM4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uiEXT")) == NULL) || r; - r = ((glUniform4uivEXT = (PFNGLUNIFORM4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glUniform4uivEXT")) == NULL) || r; - r = ((glVertexAttribI1iEXT = (PFNGLVERTEXATTRIBI1IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1iEXT")) == NULL) || r; - r = ((glVertexAttribI1ivEXT = (PFNGLVERTEXATTRIBI1IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1ivEXT")) == NULL) || r; - r = ((glVertexAttribI1uiEXT = (PFNGLVERTEXATTRIBI1UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uiEXT")) == NULL) || r; - r = ((glVertexAttribI1uivEXT = (PFNGLVERTEXATTRIBI1UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI1uivEXT")) == NULL) || r; - r = ((glVertexAttribI2iEXT = (PFNGLVERTEXATTRIBI2IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2iEXT")) == NULL) || r; - r = ((glVertexAttribI2ivEXT = (PFNGLVERTEXATTRIBI2IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2ivEXT")) == NULL) || r; - r = ((glVertexAttribI2uiEXT = (PFNGLVERTEXATTRIBI2UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uiEXT")) == NULL) || r; - r = ((glVertexAttribI2uivEXT = (PFNGLVERTEXATTRIBI2UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI2uivEXT")) == NULL) || r; - r = ((glVertexAttribI3iEXT = (PFNGLVERTEXATTRIBI3IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3iEXT")) == NULL) || r; - r = ((glVertexAttribI3ivEXT = (PFNGLVERTEXATTRIBI3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3ivEXT")) == NULL) || r; - r = ((glVertexAttribI3uiEXT = (PFNGLVERTEXATTRIBI3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uiEXT")) == NULL) || r; - r = ((glVertexAttribI3uivEXT = (PFNGLVERTEXATTRIBI3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI3uivEXT")) == NULL) || r; - r = ((glVertexAttribI4bvEXT = (PFNGLVERTEXATTRIBI4BVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4bvEXT")) == NULL) || r; - r = ((glVertexAttribI4iEXT = (PFNGLVERTEXATTRIBI4IEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4iEXT")) == NULL) || r; - r = ((glVertexAttribI4ivEXT = (PFNGLVERTEXATTRIBI4IVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ivEXT")) == NULL) || r; - r = ((glVertexAttribI4svEXT = (PFNGLVERTEXATTRIBI4SVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4svEXT")) == NULL) || r; - r = ((glVertexAttribI4ubvEXT = (PFNGLVERTEXATTRIBI4UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4ubvEXT")) == NULL) || r; - r = ((glVertexAttribI4uiEXT = (PFNGLVERTEXATTRIBI4UIEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uiEXT")) == NULL) || r; - r = ((glVertexAttribI4uivEXT = (PFNGLVERTEXATTRIBI4UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4uivEXT")) == NULL) || r; - r = ((glVertexAttribI4usvEXT = (PFNGLVERTEXATTRIBI4USVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribI4usvEXT")) == NULL) || r; - r = ((glVertexAttribIPointerEXT = (PFNGLVERTEXATTRIBIPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_gpu_shader4 */ - -#ifdef GL_EXT_histogram - -static GLboolean _glewInit_GL_EXT_histogram (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetHistogramEXT = (PFNGLGETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramEXT")) == NULL) || r; - r = ((glGetHistogramParameterfvEXT = (PFNGLGETHISTOGRAMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterfvEXT")) == NULL) || r; - r = ((glGetHistogramParameterivEXT = (PFNGLGETHISTOGRAMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetHistogramParameterivEXT")) == NULL) || r; - r = ((glGetMinmaxEXT = (PFNGLGETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxEXT")) == NULL) || r; - r = ((glGetMinmaxParameterfvEXT = (PFNGLGETMINMAXPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterfvEXT")) == NULL) || r; - r = ((glGetMinmaxParameterivEXT = (PFNGLGETMINMAXPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetMinmaxParameterivEXT")) == NULL) || r; - r = ((glHistogramEXT = (PFNGLHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glHistogramEXT")) == NULL) || r; - r = ((glMinmaxEXT = (PFNGLMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glMinmaxEXT")) == NULL) || r; - r = ((glResetHistogramEXT = (PFNGLRESETHISTOGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glResetHistogramEXT")) == NULL) || r; - r = ((glResetMinmaxEXT = (PFNGLRESETMINMAXEXTPROC)glewGetProcAddress((const GLubyte*)"glResetMinmaxEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_histogram */ - -#ifdef GL_EXT_index_array_formats - -#endif /* GL_EXT_index_array_formats */ - -#ifdef GL_EXT_index_func - -static GLboolean _glewInit_GL_EXT_index_func (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glIndexFuncEXT = (PFNGLINDEXFUNCEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexFuncEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_index_func */ - -#ifdef GL_EXT_index_material - -static GLboolean _glewInit_GL_EXT_index_material (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glIndexMaterialEXT = (PFNGLINDEXMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glIndexMaterialEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_index_material */ - -#ifdef GL_EXT_index_texture - -#endif /* GL_EXT_index_texture */ - -#ifdef GL_EXT_light_texture - -static GLboolean _glewInit_GL_EXT_light_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glApplyTextureEXT = (PFNGLAPPLYTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glApplyTextureEXT")) == NULL) || r; - r = ((glTextureLightEXT = (PFNGLTEXTURELIGHTEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureLightEXT")) == NULL) || r; - r = ((glTextureMaterialEXT = (PFNGLTEXTUREMATERIALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureMaterialEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_light_texture */ - -#ifdef GL_EXT_misc_attribute - -#endif /* GL_EXT_misc_attribute */ - -#ifdef GL_EXT_multi_draw_arrays - -static GLboolean _glewInit_GL_EXT_multi_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysEXT = (PFNGLMULTIDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysEXT")) == NULL) || r; - r = ((glMultiDrawElementsEXT = (PFNGLMULTIDRAWELEMENTSEXTPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_multi_draw_arrays */ - -#ifdef GL_EXT_multisample - -static GLboolean _glewInit_GL_EXT_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSampleMaskEXT = (PFNGLSAMPLEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskEXT")) == NULL) || r; - r = ((glSamplePatternEXT = (PFNGLSAMPLEPATTERNEXTPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_multisample */ - -#ifdef GL_EXT_packed_depth_stencil - -#endif /* GL_EXT_packed_depth_stencil */ - -#ifdef GL_EXT_packed_float - -#endif /* GL_EXT_packed_float */ - -#ifdef GL_EXT_packed_pixels - -#endif /* GL_EXT_packed_pixels */ - -#ifdef GL_EXT_paletted_texture - -static GLboolean _glewInit_GL_EXT_paletted_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorTableEXT = (PFNGLCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glColorTableEXT")) == NULL) || r; - r = ((glGetColorTableEXT = (PFNGLGETCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableEXT")) == NULL) || r; - r = ((glGetColorTableParameterfvEXT = (PFNGLGETCOLORTABLEPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvEXT")) == NULL) || r; - r = ((glGetColorTableParameterivEXT = (PFNGLGETCOLORTABLEPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_paletted_texture */ - -#ifdef GL_EXT_pixel_buffer_object - -#endif /* GL_EXT_pixel_buffer_object */ - -#ifdef GL_EXT_pixel_transform - -static GLboolean _glewInit_GL_EXT_pixel_transform (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetPixelTransformParameterfvEXT = (PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterfvEXT")) == NULL) || r; - r = ((glGetPixelTransformParameterivEXT = (PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetPixelTransformParameterivEXT")) == NULL) || r; - r = ((glPixelTransformParameterfEXT = (PFNGLPIXELTRANSFORMPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfEXT")) == NULL) || r; - r = ((glPixelTransformParameterfvEXT = (PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterfvEXT")) == NULL) || r; - r = ((glPixelTransformParameteriEXT = (PFNGLPIXELTRANSFORMPARAMETERIEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameteriEXT")) == NULL) || r; - r = ((glPixelTransformParameterivEXT = (PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC)glewGetProcAddress((const GLubyte*)"glPixelTransformParameterivEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_pixel_transform */ - -#ifdef GL_EXT_pixel_transform_color_table - -#endif /* GL_EXT_pixel_transform_color_table */ - -#ifdef GL_EXT_point_parameters - -static GLboolean _glewInit_GL_EXT_point_parameters (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPointParameterfEXT = (PFNGLPOINTPARAMETERFEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfEXT")) == NULL) || r; - r = ((glPointParameterfvEXT = (PFNGLPOINTPARAMETERFVEXTPROC)glewGetProcAddress((const GLubyte*)"glPointParameterfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_point_parameters */ - -#ifdef GL_EXT_polygon_offset - -static GLboolean _glewInit_GL_EXT_polygon_offset (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPolygonOffsetEXT = (PFNGLPOLYGONOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_polygon_offset */ - -#ifdef GL_EXT_provoking_vertex - -static GLboolean _glewInit_GL_EXT_provoking_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProvokingVertexEXT = (PFNGLPROVOKINGVERTEXEXTPROC)glewGetProcAddress((const GLubyte*)"glProvokingVertexEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_provoking_vertex */ - -#ifdef GL_EXT_rescale_normal - -#endif /* GL_EXT_rescale_normal */ - -#ifdef GL_EXT_scene_marker - -static GLboolean _glewInit_GL_EXT_scene_marker (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginSceneEXT = (PFNGLBEGINSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginSceneEXT")) == NULL) || r; - r = ((glEndSceneEXT = (PFNGLENDSCENEEXTPROC)glewGetProcAddress((const GLubyte*)"glEndSceneEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_scene_marker */ - -#ifdef GL_EXT_secondary_color - -static GLboolean _glewInit_GL_EXT_secondary_color (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSecondaryColor3bEXT = (PFNGLSECONDARYCOLOR3BEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bEXT")) == NULL) || r; - r = ((glSecondaryColor3bvEXT = (PFNGLSECONDARYCOLOR3BVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3bvEXT")) == NULL) || r; - r = ((glSecondaryColor3dEXT = (PFNGLSECONDARYCOLOR3DEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dEXT")) == NULL) || r; - r = ((glSecondaryColor3dvEXT = (PFNGLSECONDARYCOLOR3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3dvEXT")) == NULL) || r; - r = ((glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fEXT")) == NULL) || r; - r = ((glSecondaryColor3fvEXT = (PFNGLSECONDARYCOLOR3FVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3fvEXT")) == NULL) || r; - r = ((glSecondaryColor3iEXT = (PFNGLSECONDARYCOLOR3IEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3iEXT")) == NULL) || r; - r = ((glSecondaryColor3ivEXT = (PFNGLSECONDARYCOLOR3IVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ivEXT")) == NULL) || r; - r = ((glSecondaryColor3sEXT = (PFNGLSECONDARYCOLOR3SEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3sEXT")) == NULL) || r; - r = ((glSecondaryColor3svEXT = (PFNGLSECONDARYCOLOR3SVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3svEXT")) == NULL) || r; - r = ((glSecondaryColor3ubEXT = (PFNGLSECONDARYCOLOR3UBEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubEXT")) == NULL) || r; - r = ((glSecondaryColor3ubvEXT = (PFNGLSECONDARYCOLOR3UBVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3ubvEXT")) == NULL) || r; - r = ((glSecondaryColor3uiEXT = (PFNGLSECONDARYCOLOR3UIEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uiEXT")) == NULL) || r; - r = ((glSecondaryColor3uivEXT = (PFNGLSECONDARYCOLOR3UIVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3uivEXT")) == NULL) || r; - r = ((glSecondaryColor3usEXT = (PFNGLSECONDARYCOLOR3USEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usEXT")) == NULL) || r; - r = ((glSecondaryColor3usvEXT = (PFNGLSECONDARYCOLOR3USVEXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3usvEXT")) == NULL) || r; - r = ((glSecondaryColorPointerEXT = (PFNGLSECONDARYCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_secondary_color */ - -#ifdef GL_EXT_separate_shader_objects - -static GLboolean _glewInit_GL_EXT_separate_shader_objects (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveProgramEXT = (PFNGLACTIVEPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveProgramEXT")) == NULL) || r; - r = ((glCreateShaderProgramEXT = (PFNGLCREATESHADERPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glCreateShaderProgramEXT")) == NULL) || r; - r = ((glUseShaderProgramEXT = (PFNGLUSESHADERPROGRAMEXTPROC)glewGetProcAddress((const GLubyte*)"glUseShaderProgramEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_separate_shader_objects */ - -#ifdef GL_EXT_separate_specular_color - -#endif /* GL_EXT_separate_specular_color */ - -#ifdef GL_EXT_shader_image_load_store - -static GLboolean _glewInit_GL_EXT_shader_image_load_store (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindImageTextureEXT = (PFNGLBINDIMAGETEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindImageTextureEXT")) == NULL) || r; - r = ((glMemoryBarrierEXT = (PFNGLMEMORYBARRIEREXTPROC)glewGetProcAddress((const GLubyte*)"glMemoryBarrierEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_shader_image_load_store */ - -#ifdef GL_EXT_shadow_funcs - -#endif /* GL_EXT_shadow_funcs */ - -#ifdef GL_EXT_shared_texture_palette - -#endif /* GL_EXT_shared_texture_palette */ - -#ifdef GL_EXT_stencil_clear_tag - -#endif /* GL_EXT_stencil_clear_tag */ - -#ifdef GL_EXT_stencil_two_side - -static GLboolean _glewInit_GL_EXT_stencil_two_side (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveStencilFaceEXT = (PFNGLACTIVESTENCILFACEEXTPROC)glewGetProcAddress((const GLubyte*)"glActiveStencilFaceEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_stencil_two_side */ - -#ifdef GL_EXT_stencil_wrap - -#endif /* GL_EXT_stencil_wrap */ - -#ifdef GL_EXT_subtexture - -static GLboolean _glewInit_GL_EXT_subtexture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexSubImage1DEXT = (PFNGLTEXSUBIMAGE1DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage1DEXT")) == NULL) || r; - r = ((glTexSubImage2DEXT = (PFNGLTEXSUBIMAGE2DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage2DEXT")) == NULL) || r; - r = ((glTexSubImage3DEXT = (PFNGLTEXSUBIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_subtexture */ - -#ifdef GL_EXT_texture - -#endif /* GL_EXT_texture */ - -#ifdef GL_EXT_texture3D - -static GLboolean _glewInit_GL_EXT_texture3D (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexImage3DEXT = (PFNGLTEXIMAGE3DEXTPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture3D */ - -#ifdef GL_EXT_texture_array - -static GLboolean _glewInit_GL_EXT_texture_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFramebufferTextureLayerEXT = (PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC)glewGetProcAddress((const GLubyte*)"glFramebufferTextureLayerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_array */ - -#ifdef GL_EXT_texture_buffer_object - -static GLboolean _glewInit_GL_EXT_texture_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexBufferEXT = (PFNGLTEXBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexBufferEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_buffer_object */ - -#ifdef GL_EXT_texture_compression_dxt1 - -#endif /* GL_EXT_texture_compression_dxt1 */ - -#ifdef GL_EXT_texture_compression_latc - -#endif /* GL_EXT_texture_compression_latc */ - -#ifdef GL_EXT_texture_compression_rgtc - -#endif /* GL_EXT_texture_compression_rgtc */ - -#ifdef GL_EXT_texture_compression_s3tc - -#endif /* GL_EXT_texture_compression_s3tc */ - -#ifdef GL_EXT_texture_cube_map - -#endif /* GL_EXT_texture_cube_map */ - -#ifdef GL_EXT_texture_edge_clamp - -#endif /* GL_EXT_texture_edge_clamp */ - -#ifdef GL_EXT_texture_env - -#endif /* GL_EXT_texture_env */ - -#ifdef GL_EXT_texture_env_add - -#endif /* GL_EXT_texture_env_add */ - -#ifdef GL_EXT_texture_env_combine - -#endif /* GL_EXT_texture_env_combine */ - -#ifdef GL_EXT_texture_env_dot3 - -#endif /* GL_EXT_texture_env_dot3 */ - -#ifdef GL_EXT_texture_filter_anisotropic - -#endif /* GL_EXT_texture_filter_anisotropic */ - -#ifdef GL_EXT_texture_integer - -static GLboolean _glewInit_GL_EXT_texture_integer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearColorIiEXT = (PFNGLCLEARCOLORIIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIiEXT")) == NULL) || r; - r = ((glClearColorIuiEXT = (PFNGLCLEARCOLORIUIEXTPROC)glewGetProcAddress((const GLubyte*)"glClearColorIuiEXT")) == NULL) || r; - r = ((glGetTexParameterIivEXT = (PFNGLGETTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIivEXT")) == NULL) || r; - r = ((glGetTexParameterIuivEXT = (PFNGLGETTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterIuivEXT")) == NULL) || r; - r = ((glTexParameterIivEXT = (PFNGLTEXPARAMETERIIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIivEXT")) == NULL) || r; - r = ((glTexParameterIuivEXT = (PFNGLTEXPARAMETERIUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glTexParameterIuivEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_integer */ - -#ifdef GL_EXT_texture_lod_bias - -#endif /* GL_EXT_texture_lod_bias */ - -#ifdef GL_EXT_texture_mirror_clamp - -#endif /* GL_EXT_texture_mirror_clamp */ - -#ifdef GL_EXT_texture_object - -static GLboolean _glewInit_GL_EXT_texture_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAreTexturesResidentEXT = (PFNGLARETEXTURESRESIDENTEXTPROC)glewGetProcAddress((const GLubyte*)"glAreTexturesResidentEXT")) == NULL) || r; - r = ((glBindTextureEXT = (PFNGLBINDTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureEXT")) == NULL) || r; - r = ((glDeleteTexturesEXT = (PFNGLDELETETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteTexturesEXT")) == NULL) || r; - r = ((glGenTexturesEXT = (PFNGLGENTEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glGenTexturesEXT")) == NULL) || r; - r = ((glIsTextureEXT = (PFNGLISTEXTUREEXTPROC)glewGetProcAddress((const GLubyte*)"glIsTextureEXT")) == NULL) || r; - r = ((glPrioritizeTexturesEXT = (PFNGLPRIORITIZETEXTURESEXTPROC)glewGetProcAddress((const GLubyte*)"glPrioritizeTexturesEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_object */ - -#ifdef GL_EXT_texture_perturb_normal - -static GLboolean _glewInit_GL_EXT_texture_perturb_normal (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureNormalEXT = (PFNGLTEXTURENORMALEXTPROC)glewGetProcAddress((const GLubyte*)"glTextureNormalEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_texture_perturb_normal */ - -#ifdef GL_EXT_texture_rectangle - -#endif /* GL_EXT_texture_rectangle */ - -#ifdef GL_EXT_texture_sRGB - -#endif /* GL_EXT_texture_sRGB */ - -#ifdef GL_EXT_texture_sRGB_decode - -#endif /* GL_EXT_texture_sRGB_decode */ - -#ifdef GL_EXT_texture_shared_exponent - -#endif /* GL_EXT_texture_shared_exponent */ - -#ifdef GL_EXT_texture_snorm - -#endif /* GL_EXT_texture_snorm */ - -#ifdef GL_EXT_texture_swizzle - -#endif /* GL_EXT_texture_swizzle */ - -#ifdef GL_EXT_timer_query - -static GLboolean _glewInit_GL_EXT_timer_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetQueryObjecti64vEXT = (PFNGLGETQUERYOBJECTI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjecti64vEXT")) == NULL) || r; - r = ((glGetQueryObjectui64vEXT = (PFNGLGETQUERYOBJECTUI64VEXTPROC)glewGetProcAddress((const GLubyte*)"glGetQueryObjectui64vEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_timer_query */ - -#ifdef GL_EXT_transform_feedback - -static GLboolean _glewInit_GL_EXT_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginTransformFeedbackEXT = (PFNGLBEGINTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackEXT")) == NULL) || r; - r = ((glBindBufferBaseEXT = (PFNGLBINDBUFFERBASEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseEXT")) == NULL) || r; - r = ((glBindBufferOffsetEXT = (PFNGLBINDBUFFEROFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetEXT")) == NULL) || r; - r = ((glBindBufferRangeEXT = (PFNGLBINDBUFFERRANGEEXTPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeEXT")) == NULL) || r; - r = ((glEndTransformFeedbackEXT = (PFNGLENDTRANSFORMFEEDBACKEXTPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackEXT")) == NULL) || r; - r = ((glGetTransformFeedbackVaryingEXT = (PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingEXT")) == NULL) || r; - r = ((glTransformFeedbackVaryingsEXT = (PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_transform_feedback */ - -#ifdef GL_EXT_vertex_array - -static GLboolean _glewInit_GL_EXT_vertex_array (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)glewGetProcAddress((const GLubyte*)"glArrayElementEXT")) == NULL) || r; - r = ((glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glColorPointerEXT")) == NULL) || r; - r = ((glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)glewGetProcAddress((const GLubyte*)"glDrawArraysEXT")) == NULL) || r; - r = ((glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerEXT")) == NULL) || r; - r = ((glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerEXT")) == NULL) || r; - r = ((glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerEXT")) == NULL) || r; - r = ((glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerEXT")) == NULL) || r; - r = ((glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_array */ - -#ifdef GL_EXT_vertex_array_bgra - -#endif /* GL_EXT_vertex_array_bgra */ - -#ifdef GL_EXT_vertex_attrib_64bit - -static GLboolean _glewInit_GL_EXT_vertex_attrib_64bit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribLdvEXT = (PFNGLGETVERTEXATTRIBLDVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLdvEXT")) == NULL) || r; - r = ((glVertexArrayVertexAttribLOffsetEXT = (PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayVertexAttribLOffsetEXT")) == NULL) || r; - r = ((glVertexAttribL1dEXT = (PFNGLVERTEXATTRIBL1DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dEXT")) == NULL) || r; - r = ((glVertexAttribL1dvEXT = (PFNGLVERTEXATTRIBL1DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1dvEXT")) == NULL) || r; - r = ((glVertexAttribL2dEXT = (PFNGLVERTEXATTRIBL2DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dEXT")) == NULL) || r; - r = ((glVertexAttribL2dvEXT = (PFNGLVERTEXATTRIBL2DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2dvEXT")) == NULL) || r; - r = ((glVertexAttribL3dEXT = (PFNGLVERTEXATTRIBL3DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dEXT")) == NULL) || r; - r = ((glVertexAttribL3dvEXT = (PFNGLVERTEXATTRIBL3DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3dvEXT")) == NULL) || r; - r = ((glVertexAttribL4dEXT = (PFNGLVERTEXATTRIBL4DEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dEXT")) == NULL) || r; - r = ((glVertexAttribL4dvEXT = (PFNGLVERTEXATTRIBL4DVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4dvEXT")) == NULL) || r; - r = ((glVertexAttribLPointerEXT = (PFNGLVERTEXATTRIBLPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLPointerEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_attrib_64bit */ - -#ifdef GL_EXT_vertex_shader - -static GLboolean _glewInit_GL_EXT_vertex_shader (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBeginVertexShaderEXT")) == NULL) || r; - r = ((glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindLightParameterEXT")) == NULL) || r; - r = ((glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindMaterialParameterEXT")) == NULL) || r; - r = ((glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindParameterEXT")) == NULL) || r; - r = ((glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTexGenParameterEXT")) == NULL) || r; - r = ((glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindTextureUnitParameterEXT")) == NULL) || r; - r = ((glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glBindVertexShaderEXT")) == NULL) || r; - r = ((glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glDeleteVertexShaderEXT")) == NULL) || r; - r = ((glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glDisableVariantClientStateEXT")) == NULL) || r; - r = ((glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)glewGetProcAddress((const GLubyte*)"glEnableVariantClientStateEXT")) == NULL) || r; - r = ((glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)glewGetProcAddress((const GLubyte*)"glEndVertexShaderEXT")) == NULL) || r; - r = ((glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glExtractComponentEXT")) == NULL) || r; - r = ((glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenSymbolsEXT")) == NULL) || r; - r = ((glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)glewGetProcAddress((const GLubyte*)"glGenVertexShadersEXT")) == NULL) || r; - r = ((glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantBooleanvEXT")) == NULL) || r; - r = ((glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantFloatvEXT")) == NULL) || r; - r = ((glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetInvariantIntegervEXT")) == NULL) || r; - r = ((glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantBooleanvEXT")) == NULL) || r; - r = ((glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantFloatvEXT")) == NULL) || r; - r = ((glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetLocalConstantIntegervEXT")) == NULL) || r; - r = ((glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantBooleanvEXT")) == NULL) || r; - r = ((glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantFloatvEXT")) == NULL) || r; - r = ((glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantIntegervEXT")) == NULL) || r; - r = ((glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)glewGetProcAddress((const GLubyte*)"glGetVariantPointervEXT")) == NULL) || r; - r = ((glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)glewGetProcAddress((const GLubyte*)"glInsertComponentEXT")) == NULL) || r; - r = ((glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)glewGetProcAddress((const GLubyte*)"glIsVariantEnabledEXT")) == NULL) || r; - r = ((glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetInvariantEXT")) == NULL) || r; - r = ((glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)glewGetProcAddress((const GLubyte*)"glSetLocalConstantEXT")) == NULL) || r; - r = ((glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp1EXT")) == NULL) || r; - r = ((glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp2EXT")) == NULL) || r; - r = ((glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)glewGetProcAddress((const GLubyte*)"glShaderOp3EXT")) == NULL) || r; - r = ((glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)glewGetProcAddress((const GLubyte*)"glSwizzleEXT")) == NULL) || r; - r = ((glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVariantPointerEXT")) == NULL) || r; - r = ((glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantbvEXT")) == NULL) || r; - r = ((glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantdvEXT")) == NULL) || r; - r = ((glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantfvEXT")) == NULL) || r; - r = ((glVariantivEXT = (PFNGLVARIANTIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantivEXT")) == NULL) || r; - r = ((glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantsvEXT")) == NULL) || r; - r = ((glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantubvEXT")) == NULL) || r; - r = ((glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantuivEXT")) == NULL) || r; - r = ((glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)glewGetProcAddress((const GLubyte*)"glVariantusvEXT")) == NULL) || r; - r = ((glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)glewGetProcAddress((const GLubyte*)"glWriteMaskEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_shader */ - -#ifdef GL_EXT_vertex_weighting - -static GLboolean _glewInit_GL_EXT_vertex_weighting (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVertexWeightPointerEXT = (PFNGLVERTEXWEIGHTPOINTEREXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightPointerEXT")) == NULL) || r; - r = ((glVertexWeightfEXT = (PFNGLVERTEXWEIGHTFEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfEXT")) == NULL) || r; - r = ((glVertexWeightfvEXT = (PFNGLVERTEXWEIGHTFVEXTPROC)glewGetProcAddress((const GLubyte*)"glVertexWeightfvEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_vertex_weighting */ - -#ifdef GL_EXT_x11_sync_object - -static GLboolean _glewInit_GL_EXT_x11_sync_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glImportSyncEXT = (PFNGLIMPORTSYNCEXTPROC)glewGetProcAddress((const GLubyte*)"glImportSyncEXT")) == NULL) || r; - - return r; -} - -#endif /* GL_EXT_x11_sync_object */ - -#ifdef GL_GREMEDY_frame_terminator - -static GLboolean _glewInit_GL_GREMEDY_frame_terminator (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFrameTerminatorGREMEDY = (PFNGLFRAMETERMINATORGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glFrameTerminatorGREMEDY")) == NULL) || r; - - return r; -} - -#endif /* GL_GREMEDY_frame_terminator */ - -#ifdef GL_GREMEDY_string_marker - -static GLboolean _glewInit_GL_GREMEDY_string_marker (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glStringMarkerGREMEDY = (PFNGLSTRINGMARKERGREMEDYPROC)glewGetProcAddress((const GLubyte*)"glStringMarkerGREMEDY")) == NULL) || r; - - return r; -} - -#endif /* GL_GREMEDY_string_marker */ - -#ifdef GL_HP_convolution_border_modes - -#endif /* GL_HP_convolution_border_modes */ - -#ifdef GL_HP_image_transform - -static GLboolean _glewInit_GL_HP_image_transform (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetImageTransformParameterfvHP = (PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterfvHP")) == NULL) || r; - r = ((glGetImageTransformParameterivHP = (PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glGetImageTransformParameterivHP")) == NULL) || r; - r = ((glImageTransformParameterfHP = (PFNGLIMAGETRANSFORMPARAMETERFHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfHP")) == NULL) || r; - r = ((glImageTransformParameterfvHP = (PFNGLIMAGETRANSFORMPARAMETERFVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterfvHP")) == NULL) || r; - r = ((glImageTransformParameteriHP = (PFNGLIMAGETRANSFORMPARAMETERIHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameteriHP")) == NULL) || r; - r = ((glImageTransformParameterivHP = (PFNGLIMAGETRANSFORMPARAMETERIVHPPROC)glewGetProcAddress((const GLubyte*)"glImageTransformParameterivHP")) == NULL) || r; - - return r; -} - -#endif /* GL_HP_image_transform */ - -#ifdef GL_HP_occlusion_test - -#endif /* GL_HP_occlusion_test */ - -#ifdef GL_HP_texture_lighting - -#endif /* GL_HP_texture_lighting */ - -#ifdef GL_IBM_cull_vertex - -#endif /* GL_IBM_cull_vertex */ - -#ifdef GL_IBM_multimode_draw_arrays - -static GLboolean _glewInit_GL_IBM_multimode_draw_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiModeDrawArraysIBM = (PFNGLMULTIMODEDRAWARRAYSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawArraysIBM")) == NULL) || r; - r = ((glMultiModeDrawElementsIBM = (PFNGLMULTIMODEDRAWELEMENTSIBMPROC)glewGetProcAddress((const GLubyte*)"glMultiModeDrawElementsIBM")) == NULL) || r; - - return r; -} - -#endif /* GL_IBM_multimode_draw_arrays */ - -#ifdef GL_IBM_rasterpos_clip - -#endif /* GL_IBM_rasterpos_clip */ - -#ifdef GL_IBM_static_data - -#endif /* GL_IBM_static_data */ - -#ifdef GL_IBM_texture_mirrored_repeat - -#endif /* GL_IBM_texture_mirrored_repeat */ - -#ifdef GL_IBM_vertex_array_lists - -static GLboolean _glewInit_GL_IBM_vertex_array_lists (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorPointerListIBM = (PFNGLCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glColorPointerListIBM")) == NULL) || r; - r = ((glEdgeFlagPointerListIBM = (PFNGLEDGEFLAGPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagPointerListIBM")) == NULL) || r; - r = ((glFogCoordPointerListIBM = (PFNGLFOGCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glFogCoordPointerListIBM")) == NULL) || r; - r = ((glIndexPointerListIBM = (PFNGLINDEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glIndexPointerListIBM")) == NULL) || r; - r = ((glNormalPointerListIBM = (PFNGLNORMALPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glNormalPointerListIBM")) == NULL) || r; - r = ((glSecondaryColorPointerListIBM = (PFNGLSECONDARYCOLORPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorPointerListIBM")) == NULL) || r; - r = ((glTexCoordPointerListIBM = (PFNGLTEXCOORDPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointerListIBM")) == NULL) || r; - r = ((glVertexPointerListIBM = (PFNGLVERTEXPOINTERLISTIBMPROC)glewGetProcAddress((const GLubyte*)"glVertexPointerListIBM")) == NULL) || r; - - return r; -} - -#endif /* GL_IBM_vertex_array_lists */ - -#ifdef GL_INGR_color_clamp - -#endif /* GL_INGR_color_clamp */ - -#ifdef GL_INGR_interlace_read - -#endif /* GL_INGR_interlace_read */ - -#ifdef GL_INTEL_map_texture - -static GLboolean _glewInit_GL_INTEL_map_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMapTexture2DINTEL = (PFNGLMAPTEXTURE2DINTELPROC)glewGetProcAddress((const GLubyte*)"glMapTexture2DINTEL")) == NULL) || r; - r = ((glSyncTextureINTEL = (PFNGLSYNCTEXTUREINTELPROC)glewGetProcAddress((const GLubyte*)"glSyncTextureINTEL")) == NULL) || r; - r = ((glUnmapTexture2DINTEL = (PFNGLUNMAPTEXTURE2DINTELPROC)glewGetProcAddress((const GLubyte*)"glUnmapTexture2DINTEL")) == NULL) || r; - - return r; -} - -#endif /* GL_INTEL_map_texture */ - -#ifdef GL_INTEL_parallel_arrays - -static GLboolean _glewInit_GL_INTEL_parallel_arrays (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorPointervINTEL = (PFNGLCOLORPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glColorPointervINTEL")) == NULL) || r; - r = ((glNormalPointervINTEL = (PFNGLNORMALPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glNormalPointervINTEL")) == NULL) || r; - r = ((glTexCoordPointervINTEL = (PFNGLTEXCOORDPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glTexCoordPointervINTEL")) == NULL) || r; - r = ((glVertexPointervINTEL = (PFNGLVERTEXPOINTERVINTELPROC)glewGetProcAddress((const GLubyte*)"glVertexPointervINTEL")) == NULL) || r; - - return r; -} - -#endif /* GL_INTEL_parallel_arrays */ - -#ifdef GL_INTEL_texture_scissor - -static GLboolean _glewInit_GL_INTEL_texture_scissor (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexScissorFuncINTEL = (PFNGLTEXSCISSORFUNCINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorFuncINTEL")) == NULL) || r; - r = ((glTexScissorINTEL = (PFNGLTEXSCISSORINTELPROC)glewGetProcAddress((const GLubyte*)"glTexScissorINTEL")) == NULL) || r; - - return r; -} - -#endif /* GL_INTEL_texture_scissor */ - -#ifdef GL_KHR_debug - -static GLboolean _glewInit_GL_KHR_debug (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDebugMessageCallback = (PFNGLDEBUGMESSAGECALLBACKPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageCallback")) == NULL) || r; - r = ((glDebugMessageControl = (PFNGLDEBUGMESSAGECONTROLPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageControl")) == NULL) || r; - r = ((glDebugMessageInsert = (PFNGLDEBUGMESSAGEINSERTPROC)glewGetProcAddress((const GLubyte*)"glDebugMessageInsert")) == NULL) || r; - r = ((glGetDebugMessageLog = (PFNGLGETDEBUGMESSAGELOGPROC)glewGetProcAddress((const GLubyte*)"glGetDebugMessageLog")) == NULL) || r; - r = ((glGetObjectLabel = (PFNGLGETOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectLabel")) == NULL) || r; - r = ((glGetObjectPtrLabel = (PFNGLGETOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glGetObjectPtrLabel")) == NULL) || r; - r = ((glObjectLabel = (PFNGLOBJECTLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectLabel")) == NULL) || r; - r = ((glObjectPtrLabel = (PFNGLOBJECTPTRLABELPROC)glewGetProcAddress((const GLubyte*)"glObjectPtrLabel")) == NULL) || r; - r = ((glPopDebugGroup = (PFNGLPOPDEBUGGROUPPROC)glewGetProcAddress((const GLubyte*)"glPopDebugGroup")) == NULL) || r; - r = ((glPushDebugGroup = (PFNGLPUSHDEBUGGROUPPROC)glewGetProcAddress((const GLubyte*)"glPushDebugGroup")) == NULL) || r; - - return r; -} - -#endif /* GL_KHR_debug */ - -#ifdef GL_KHR_texture_compression_astc_ldr - -#endif /* GL_KHR_texture_compression_astc_ldr */ - -#ifdef GL_KTX_buffer_region - -static GLboolean _glewInit_GL_KTX_buffer_region (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferRegionEnabled = (PFNGLBUFFERREGIONENABLEDPROC)glewGetProcAddress((const GLubyte*)"glBufferRegionEnabled")) == NULL) || r; - r = ((glDeleteBufferRegion = (PFNGLDELETEBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glDeleteBufferRegion")) == NULL) || r; - r = ((glDrawBufferRegion = (PFNGLDRAWBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glDrawBufferRegion")) == NULL) || r; - r = ((glNewBufferRegion = (PFNGLNEWBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glNewBufferRegion")) == NULL) || r; - r = ((glReadBufferRegion = (PFNGLREADBUFFERREGIONPROC)glewGetProcAddress((const GLubyte*)"glReadBufferRegion")) == NULL) || r; - - return r; -} - -#endif /* GL_KTX_buffer_region */ - -#ifdef GL_MESAX_texture_stack - -#endif /* GL_MESAX_texture_stack */ - -#ifdef GL_MESA_pack_invert - -#endif /* GL_MESA_pack_invert */ - -#ifdef GL_MESA_resize_buffers - -static GLboolean _glewInit_GL_MESA_resize_buffers (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glResizeBuffersMESA = (PFNGLRESIZEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glResizeBuffersMESA")) == NULL) || r; - - return r; -} - -#endif /* GL_MESA_resize_buffers */ - -#ifdef GL_MESA_window_pos - -static GLboolean _glewInit_GL_MESA_window_pos (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glWindowPos2dMESA = (PFNGLWINDOWPOS2DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dMESA")) == NULL) || r; - r = ((glWindowPos2dvMESA = (PFNGLWINDOWPOS2DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2dvMESA")) == NULL) || r; - r = ((glWindowPos2fMESA = (PFNGLWINDOWPOS2FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fMESA")) == NULL) || r; - r = ((glWindowPos2fvMESA = (PFNGLWINDOWPOS2FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2fvMESA")) == NULL) || r; - r = ((glWindowPos2iMESA = (PFNGLWINDOWPOS2IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2iMESA")) == NULL) || r; - r = ((glWindowPos2ivMESA = (PFNGLWINDOWPOS2IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2ivMESA")) == NULL) || r; - r = ((glWindowPos2sMESA = (PFNGLWINDOWPOS2SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2sMESA")) == NULL) || r; - r = ((glWindowPos2svMESA = (PFNGLWINDOWPOS2SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos2svMESA")) == NULL) || r; - r = ((glWindowPos3dMESA = (PFNGLWINDOWPOS3DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dMESA")) == NULL) || r; - r = ((glWindowPos3dvMESA = (PFNGLWINDOWPOS3DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3dvMESA")) == NULL) || r; - r = ((glWindowPos3fMESA = (PFNGLWINDOWPOS3FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fMESA")) == NULL) || r; - r = ((glWindowPos3fvMESA = (PFNGLWINDOWPOS3FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3fvMESA")) == NULL) || r; - r = ((glWindowPos3iMESA = (PFNGLWINDOWPOS3IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3iMESA")) == NULL) || r; - r = ((glWindowPos3ivMESA = (PFNGLWINDOWPOS3IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3ivMESA")) == NULL) || r; - r = ((glWindowPos3sMESA = (PFNGLWINDOWPOS3SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3sMESA")) == NULL) || r; - r = ((glWindowPos3svMESA = (PFNGLWINDOWPOS3SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos3svMESA")) == NULL) || r; - r = ((glWindowPos4dMESA = (PFNGLWINDOWPOS4DMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dMESA")) == NULL) || r; - r = ((glWindowPos4dvMESA = (PFNGLWINDOWPOS4DVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4dvMESA")) == NULL) || r; - r = ((glWindowPos4fMESA = (PFNGLWINDOWPOS4FMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fMESA")) == NULL) || r; - r = ((glWindowPos4fvMESA = (PFNGLWINDOWPOS4FVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4fvMESA")) == NULL) || r; - r = ((glWindowPos4iMESA = (PFNGLWINDOWPOS4IMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4iMESA")) == NULL) || r; - r = ((glWindowPos4ivMESA = (PFNGLWINDOWPOS4IVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4ivMESA")) == NULL) || r; - r = ((glWindowPos4sMESA = (PFNGLWINDOWPOS4SMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4sMESA")) == NULL) || r; - r = ((glWindowPos4svMESA = (PFNGLWINDOWPOS4SVMESAPROC)glewGetProcAddress((const GLubyte*)"glWindowPos4svMESA")) == NULL) || r; - - return r; -} - -#endif /* GL_MESA_window_pos */ - -#ifdef GL_MESA_ycbcr_texture - -#endif /* GL_MESA_ycbcr_texture */ - -#ifdef GL_NVX_conditional_render - -static GLboolean _glewInit_GL_NVX_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginConditionalRenderNVX = (PFNGLBEGINCONDITIONALRENDERNVXPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRenderNVX")) == NULL) || r; - r = ((glEndConditionalRenderNVX = (PFNGLENDCONDITIONALRENDERNVXPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRenderNVX")) == NULL) || r; - - return r; -} - -#endif /* GL_NVX_conditional_render */ - -#ifdef GL_NVX_gpu_memory_info - -#endif /* GL_NVX_gpu_memory_info */ - -#ifdef GL_NV_bindless_multi_draw_indirect - -static GLboolean _glewInit_GL_NV_bindless_multi_draw_indirect (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glMultiDrawArraysIndirectBindlessNV = (PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawArraysIndirectBindlessNV")) == NULL) || r; - r = ((glMultiDrawElementsIndirectBindlessNV = (PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC)glewGetProcAddress((const GLubyte*)"glMultiDrawElementsIndirectBindlessNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_bindless_multi_draw_indirect */ - -#ifdef GL_NV_bindless_texture - -static GLboolean _glewInit_GL_NV_bindless_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetImageHandleNV = (PFNGLGETIMAGEHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetImageHandleNV")) == NULL) || r; - r = ((glGetTextureHandleNV = (PFNGLGETTEXTUREHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetTextureHandleNV")) == NULL) || r; - r = ((glGetTextureSamplerHandleNV = (PFNGLGETTEXTURESAMPLERHANDLENVPROC)glewGetProcAddress((const GLubyte*)"glGetTextureSamplerHandleNV")) == NULL) || r; - r = ((glIsImageHandleResidentNV = (PFNGLISIMAGEHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsImageHandleResidentNV")) == NULL) || r; - r = ((glIsTextureHandleResidentNV = (PFNGLISTEXTUREHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsTextureHandleResidentNV")) == NULL) || r; - r = ((glMakeImageHandleNonResidentNV = (PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleNonResidentNV")) == NULL) || r; - r = ((glMakeImageHandleResidentNV = (PFNGLMAKEIMAGEHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeImageHandleResidentNV")) == NULL) || r; - r = ((glMakeTextureHandleNonResidentNV = (PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleNonResidentNV")) == NULL) || r; - r = ((glMakeTextureHandleResidentNV = (PFNGLMAKETEXTUREHANDLERESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeTextureHandleResidentNV")) == NULL) || r; - r = ((glProgramUniformHandleui64NV = (PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64NV")) == NULL) || r; - r = ((glProgramUniformHandleui64vNV = (PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformHandleui64vNV")) == NULL) || r; - r = ((glUniformHandleui64NV = (PFNGLUNIFORMHANDLEUI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64NV")) == NULL) || r; - r = ((glUniformHandleui64vNV = (PFNGLUNIFORMHANDLEUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniformHandleui64vNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_bindless_texture */ - -#ifdef GL_NV_blend_equation_advanced - -static GLboolean _glewInit_GL_NV_blend_equation_advanced (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBlendBarrierNV = (PFNGLBLENDBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glBlendBarrierNV")) == NULL) || r; - r = ((glBlendParameteriNV = (PFNGLBLENDPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glBlendParameteriNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_blend_equation_advanced */ - -#ifdef GL_NV_blend_equation_advanced_coherent - -#endif /* GL_NV_blend_equation_advanced_coherent */ - -#ifdef GL_NV_blend_square - -#endif /* GL_NV_blend_square */ - -#ifdef GL_NV_compute_program5 - -#endif /* GL_NV_compute_program5 */ - -#ifdef GL_NV_conditional_render - -static GLboolean _glewInit_GL_NV_conditional_render (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginConditionalRenderNV = (PFNGLBEGINCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glBeginConditionalRenderNV")) == NULL) || r; - r = ((glEndConditionalRenderNV = (PFNGLENDCONDITIONALRENDERNVPROC)glewGetProcAddress((const GLubyte*)"glEndConditionalRenderNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_conditional_render */ - -#ifdef GL_NV_copy_depth_to_color - -#endif /* GL_NV_copy_depth_to_color */ - -#ifdef GL_NV_copy_image - -static GLboolean _glewInit_GL_NV_copy_image (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyImageSubDataNV = (PFNGLCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glCopyImageSubDataNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_copy_image */ - -#ifdef GL_NV_deep_texture3D - -#endif /* GL_NV_deep_texture3D */ - -#ifdef GL_NV_depth_buffer_float - -static GLboolean _glewInit_GL_NV_depth_buffer_float (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearDepthdNV = (PFNGLCLEARDEPTHDNVPROC)glewGetProcAddress((const GLubyte*)"glClearDepthdNV")) == NULL) || r; - r = ((glDepthBoundsdNV = (PFNGLDEPTHBOUNDSDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthBoundsdNV")) == NULL) || r; - r = ((glDepthRangedNV = (PFNGLDEPTHRANGEDNVPROC)glewGetProcAddress((const GLubyte*)"glDepthRangedNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_depth_buffer_float */ - -#ifdef GL_NV_depth_clamp - -#endif /* GL_NV_depth_clamp */ - -#ifdef GL_NV_depth_range_unclamped - -#endif /* GL_NV_depth_range_unclamped */ - -#ifdef GL_NV_draw_texture - -static GLboolean _glewInit_GL_NV_draw_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDrawTextureNV = (PFNGLDRAWTEXTURENVPROC)glewGetProcAddress((const GLubyte*)"glDrawTextureNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_draw_texture */ - -#ifdef GL_NV_evaluators - -static GLboolean _glewInit_GL_NV_evaluators (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glEvalMapsNV = (PFNGLEVALMAPSNVPROC)glewGetProcAddress((const GLubyte*)"glEvalMapsNV")) == NULL) || r; - r = ((glGetMapAttribParameterfvNV = (PFNGLGETMAPATTRIBPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterfvNV")) == NULL) || r; - r = ((glGetMapAttribParameterivNV = (PFNGLGETMAPATTRIBPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapAttribParameterivNV")) == NULL) || r; - r = ((glGetMapControlPointsNV = (PFNGLGETMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapControlPointsNV")) == NULL) || r; - r = ((glGetMapParameterfvNV = (PFNGLGETMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterfvNV")) == NULL) || r; - r = ((glGetMapParameterivNV = (PFNGLGETMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMapParameterivNV")) == NULL) || r; - r = ((glMapControlPointsNV = (PFNGLMAPCONTROLPOINTSNVPROC)glewGetProcAddress((const GLubyte*)"glMapControlPointsNV")) == NULL) || r; - r = ((glMapParameterfvNV = (PFNGLMAPPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterfvNV")) == NULL) || r; - r = ((glMapParameterivNV = (PFNGLMAPPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glMapParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_evaluators */ - -#ifdef GL_NV_explicit_multisample - -static GLboolean _glewInit_GL_NV_explicit_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetMultisamplefvNV = (PFNGLGETMULTISAMPLEFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetMultisamplefvNV")) == NULL) || r; - r = ((glSampleMaskIndexedNV = (PFNGLSAMPLEMASKINDEXEDNVPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskIndexedNV")) == NULL) || r; - r = ((glTexRenderbufferNV = (PFNGLTEXRENDERBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glTexRenderbufferNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_explicit_multisample */ - -#ifdef GL_NV_fence - -static GLboolean _glewInit_GL_NV_fence (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDeleteFencesNV = (PFNGLDELETEFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteFencesNV")) == NULL) || r; - r = ((glFinishFenceNV = (PFNGLFINISHFENCENVPROC)glewGetProcAddress((const GLubyte*)"glFinishFenceNV")) == NULL) || r; - r = ((glGenFencesNV = (PFNGLGENFENCESNVPROC)glewGetProcAddress((const GLubyte*)"glGenFencesNV")) == NULL) || r; - r = ((glGetFenceivNV = (PFNGLGETFENCEIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFenceivNV")) == NULL) || r; - r = ((glIsFenceNV = (PFNGLISFENCENVPROC)glewGetProcAddress((const GLubyte*)"glIsFenceNV")) == NULL) || r; - r = ((glSetFenceNV = (PFNGLSETFENCENVPROC)glewGetProcAddress((const GLubyte*)"glSetFenceNV")) == NULL) || r; - r = ((glTestFenceNV = (PFNGLTESTFENCENVPROC)glewGetProcAddress((const GLubyte*)"glTestFenceNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_fence */ - -#ifdef GL_NV_float_buffer - -#endif /* GL_NV_float_buffer */ - -#ifdef GL_NV_fog_distance - -#endif /* GL_NV_fog_distance */ - -#ifdef GL_NV_fragment_program - -static GLboolean _glewInit_GL_NV_fragment_program (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetProgramNamedParameterdvNV = (PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterdvNV")) == NULL) || r; - r = ((glGetProgramNamedParameterfvNV = (PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramNamedParameterfvNV")) == NULL) || r; - r = ((glProgramNamedParameter4dNV = (PFNGLPROGRAMNAMEDPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dNV")) == NULL) || r; - r = ((glProgramNamedParameter4dvNV = (PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4dvNV")) == NULL) || r; - r = ((glProgramNamedParameter4fNV = (PFNGLPROGRAMNAMEDPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fNV")) == NULL) || r; - r = ((glProgramNamedParameter4fvNV = (PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramNamedParameter4fvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_fragment_program */ - -#ifdef GL_NV_fragment_program2 - -#endif /* GL_NV_fragment_program2 */ - -#ifdef GL_NV_fragment_program4 - -#endif /* GL_NV_fragment_program4 */ - -#ifdef GL_NV_fragment_program_option - -#endif /* GL_NV_fragment_program_option */ - -#ifdef GL_NV_framebuffer_multisample_coverage - -static GLboolean _glewInit_GL_NV_framebuffer_multisample_coverage (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glRenderbufferStorageMultisampleCoverageNV = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glRenderbufferStorageMultisampleCoverageNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_framebuffer_multisample_coverage */ - -#ifdef GL_NV_geometry_program4 - -static GLboolean _glewInit_GL_NV_geometry_program4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramVertexLimitNV = (PFNGLPROGRAMVERTEXLIMITNVPROC)glewGetProcAddress((const GLubyte*)"glProgramVertexLimitNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_geometry_program4 */ - -#ifdef GL_NV_geometry_shader4 - -#endif /* GL_NV_geometry_shader4 */ - -#ifdef GL_NV_gpu_program4 - -static GLboolean _glewInit_GL_NV_gpu_program4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramEnvParameterI4iNV = (PFNGLPROGRAMENVPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4iNV")) == NULL) || r; - r = ((glProgramEnvParameterI4ivNV = (PFNGLPROGRAMENVPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4ivNV")) == NULL) || r; - r = ((glProgramEnvParameterI4uiNV = (PFNGLPROGRAMENVPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uiNV")) == NULL) || r; - r = ((glProgramEnvParameterI4uivNV = (PFNGLPROGRAMENVPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParameterI4uivNV")) == NULL) || r; - r = ((glProgramEnvParametersI4ivNV = (PFNGLPROGRAMENVPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4ivNV")) == NULL) || r; - r = ((glProgramEnvParametersI4uivNV = (PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramEnvParametersI4uivNV")) == NULL) || r; - r = ((glProgramLocalParameterI4iNV = (PFNGLPROGRAMLOCALPARAMETERI4INVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4iNV")) == NULL) || r; - r = ((glProgramLocalParameterI4ivNV = (PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4ivNV")) == NULL) || r; - r = ((glProgramLocalParameterI4uiNV = (PFNGLPROGRAMLOCALPARAMETERI4UINVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uiNV")) == NULL) || r; - r = ((glProgramLocalParameterI4uivNV = (PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParameterI4uivNV")) == NULL) || r; - r = ((glProgramLocalParametersI4ivNV = (PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4ivNV")) == NULL) || r; - r = ((glProgramLocalParametersI4uivNV = (PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramLocalParametersI4uivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_gpu_program4 */ - -#ifdef GL_NV_gpu_program5 - -#endif /* GL_NV_gpu_program5 */ - -#ifdef GL_NV_gpu_program5_mem_extended - -#endif /* GL_NV_gpu_program5_mem_extended */ - -#ifdef GL_NV_gpu_program_fp64 - -#endif /* GL_NV_gpu_program_fp64 */ - -#ifdef GL_NV_gpu_shader5 - -static GLboolean _glewInit_GL_NV_gpu_shader5 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetUniformi64vNV = (PFNGLGETUNIFORMI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformi64vNV")) == NULL) || r; - r = ((glGetUniformui64vNV = (PFNGLGETUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetUniformui64vNV")) == NULL) || r; - r = ((glProgramUniform1i64NV = (PFNGLPROGRAMUNIFORM1I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i64NV")) == NULL) || r; - r = ((glProgramUniform1i64vNV = (PFNGLPROGRAMUNIFORM1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1i64vNV")) == NULL) || r; - r = ((glProgramUniform1ui64NV = (PFNGLPROGRAMUNIFORM1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui64NV")) == NULL) || r; - r = ((glProgramUniform1ui64vNV = (PFNGLPROGRAMUNIFORM1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform1ui64vNV")) == NULL) || r; - r = ((glProgramUniform2i64NV = (PFNGLPROGRAMUNIFORM2I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i64NV")) == NULL) || r; - r = ((glProgramUniform2i64vNV = (PFNGLPROGRAMUNIFORM2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2i64vNV")) == NULL) || r; - r = ((glProgramUniform2ui64NV = (PFNGLPROGRAMUNIFORM2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui64NV")) == NULL) || r; - r = ((glProgramUniform2ui64vNV = (PFNGLPROGRAMUNIFORM2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform2ui64vNV")) == NULL) || r; - r = ((glProgramUniform3i64NV = (PFNGLPROGRAMUNIFORM3I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i64NV")) == NULL) || r; - r = ((glProgramUniform3i64vNV = (PFNGLPROGRAMUNIFORM3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3i64vNV")) == NULL) || r; - r = ((glProgramUniform3ui64NV = (PFNGLPROGRAMUNIFORM3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui64NV")) == NULL) || r; - r = ((glProgramUniform3ui64vNV = (PFNGLPROGRAMUNIFORM3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform3ui64vNV")) == NULL) || r; - r = ((glProgramUniform4i64NV = (PFNGLPROGRAMUNIFORM4I64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i64NV")) == NULL) || r; - r = ((glProgramUniform4i64vNV = (PFNGLPROGRAMUNIFORM4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4i64vNV")) == NULL) || r; - r = ((glProgramUniform4ui64NV = (PFNGLPROGRAMUNIFORM4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui64NV")) == NULL) || r; - r = ((glProgramUniform4ui64vNV = (PFNGLPROGRAMUNIFORM4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniform4ui64vNV")) == NULL) || r; - r = ((glUniform1i64NV = (PFNGLUNIFORM1I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform1i64NV")) == NULL) || r; - r = ((glUniform1i64vNV = (PFNGLUNIFORM1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform1i64vNV")) == NULL) || r; - r = ((glUniform1ui64NV = (PFNGLUNIFORM1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui64NV")) == NULL) || r; - r = ((glUniform1ui64vNV = (PFNGLUNIFORM1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform1ui64vNV")) == NULL) || r; - r = ((glUniform2i64NV = (PFNGLUNIFORM2I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform2i64NV")) == NULL) || r; - r = ((glUniform2i64vNV = (PFNGLUNIFORM2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform2i64vNV")) == NULL) || r; - r = ((glUniform2ui64NV = (PFNGLUNIFORM2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui64NV")) == NULL) || r; - r = ((glUniform2ui64vNV = (PFNGLUNIFORM2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform2ui64vNV")) == NULL) || r; - r = ((glUniform3i64NV = (PFNGLUNIFORM3I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform3i64NV")) == NULL) || r; - r = ((glUniform3i64vNV = (PFNGLUNIFORM3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform3i64vNV")) == NULL) || r; - r = ((glUniform3ui64NV = (PFNGLUNIFORM3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui64NV")) == NULL) || r; - r = ((glUniform3ui64vNV = (PFNGLUNIFORM3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform3ui64vNV")) == NULL) || r; - r = ((glUniform4i64NV = (PFNGLUNIFORM4I64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform4i64NV")) == NULL) || r; - r = ((glUniform4i64vNV = (PFNGLUNIFORM4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform4i64vNV")) == NULL) || r; - r = ((glUniform4ui64NV = (PFNGLUNIFORM4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui64NV")) == NULL) || r; - r = ((glUniform4ui64vNV = (PFNGLUNIFORM4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniform4ui64vNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_gpu_shader5 */ - -#ifdef GL_NV_half_float - -static GLboolean _glewInit_GL_NV_half_float (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColor3hNV = (PFNGLCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hNV")) == NULL) || r; - r = ((glColor3hvNV = (PFNGLCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor3hvNV")) == NULL) || r; - r = ((glColor4hNV = (PFNGLCOLOR4HNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hNV")) == NULL) || r; - r = ((glColor4hvNV = (PFNGLCOLOR4HVNVPROC)glewGetProcAddress((const GLubyte*)"glColor4hvNV")) == NULL) || r; - r = ((glFogCoordhNV = (PFNGLFOGCOORDHNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhNV")) == NULL) || r; - r = ((glFogCoordhvNV = (PFNGLFOGCOORDHVNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordhvNV")) == NULL) || r; - r = ((glMultiTexCoord1hNV = (PFNGLMULTITEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hNV")) == NULL) || r; - r = ((glMultiTexCoord1hvNV = (PFNGLMULTITEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord1hvNV")) == NULL) || r; - r = ((glMultiTexCoord2hNV = (PFNGLMULTITEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hNV")) == NULL) || r; - r = ((glMultiTexCoord2hvNV = (PFNGLMULTITEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord2hvNV")) == NULL) || r; - r = ((glMultiTexCoord3hNV = (PFNGLMULTITEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hNV")) == NULL) || r; - r = ((glMultiTexCoord3hvNV = (PFNGLMULTITEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord3hvNV")) == NULL) || r; - r = ((glMultiTexCoord4hNV = (PFNGLMULTITEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hNV")) == NULL) || r; - r = ((glMultiTexCoord4hvNV = (PFNGLMULTITEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4hvNV")) == NULL) || r; - r = ((glNormal3hNV = (PFNGLNORMAL3HNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hNV")) == NULL) || r; - r = ((glNormal3hvNV = (PFNGLNORMAL3HVNVPROC)glewGetProcAddress((const GLubyte*)"glNormal3hvNV")) == NULL) || r; - r = ((glSecondaryColor3hNV = (PFNGLSECONDARYCOLOR3HNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hNV")) == NULL) || r; - r = ((glSecondaryColor3hvNV = (PFNGLSECONDARYCOLOR3HVNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColor3hvNV")) == NULL) || r; - r = ((glTexCoord1hNV = (PFNGLTEXCOORD1HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hNV")) == NULL) || r; - r = ((glTexCoord1hvNV = (PFNGLTEXCOORD1HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord1hvNV")) == NULL) || r; - r = ((glTexCoord2hNV = (PFNGLTEXCOORD2HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hNV")) == NULL) || r; - r = ((glTexCoord2hvNV = (PFNGLTEXCOORD2HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2hvNV")) == NULL) || r; - r = ((glTexCoord3hNV = (PFNGLTEXCOORD3HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hNV")) == NULL) || r; - r = ((glTexCoord3hvNV = (PFNGLTEXCOORD3HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord3hvNV")) == NULL) || r; - r = ((glTexCoord4hNV = (PFNGLTEXCOORD4HNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hNV")) == NULL) || r; - r = ((glTexCoord4hvNV = (PFNGLTEXCOORD4HVNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4hvNV")) == NULL) || r; - r = ((glVertex2hNV = (PFNGLVERTEX2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hNV")) == NULL) || r; - r = ((glVertex2hvNV = (PFNGLVERTEX2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex2hvNV")) == NULL) || r; - r = ((glVertex3hNV = (PFNGLVERTEX3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hNV")) == NULL) || r; - r = ((glVertex3hvNV = (PFNGLVERTEX3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex3hvNV")) == NULL) || r; - r = ((glVertex4hNV = (PFNGLVERTEX4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hNV")) == NULL) || r; - r = ((glVertex4hvNV = (PFNGLVERTEX4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertex4hvNV")) == NULL) || r; - r = ((glVertexAttrib1hNV = (PFNGLVERTEXATTRIB1HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hNV")) == NULL) || r; - r = ((glVertexAttrib1hvNV = (PFNGLVERTEXATTRIB1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1hvNV")) == NULL) || r; - r = ((glVertexAttrib2hNV = (PFNGLVERTEXATTRIB2HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hNV")) == NULL) || r; - r = ((glVertexAttrib2hvNV = (PFNGLVERTEXATTRIB2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2hvNV")) == NULL) || r; - r = ((glVertexAttrib3hNV = (PFNGLVERTEXATTRIB3HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hNV")) == NULL) || r; - r = ((glVertexAttrib3hvNV = (PFNGLVERTEXATTRIB3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3hvNV")) == NULL) || r; - r = ((glVertexAttrib4hNV = (PFNGLVERTEXATTRIB4HNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hNV")) == NULL) || r; - r = ((glVertexAttrib4hvNV = (PFNGLVERTEXATTRIB4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4hvNV")) == NULL) || r; - r = ((glVertexAttribs1hvNV = (PFNGLVERTEXATTRIBS1HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1hvNV")) == NULL) || r; - r = ((glVertexAttribs2hvNV = (PFNGLVERTEXATTRIBS2HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2hvNV")) == NULL) || r; - r = ((glVertexAttribs3hvNV = (PFNGLVERTEXATTRIBS3HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3hvNV")) == NULL) || r; - r = ((glVertexAttribs4hvNV = (PFNGLVERTEXATTRIBS4HVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4hvNV")) == NULL) || r; - r = ((glVertexWeighthNV = (PFNGLVERTEXWEIGHTHNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthNV")) == NULL) || r; - r = ((glVertexWeighthvNV = (PFNGLVERTEXWEIGHTHVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexWeighthvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_half_float */ - -#ifdef GL_NV_light_max_exponent - -#endif /* GL_NV_light_max_exponent */ - -#ifdef GL_NV_multisample_coverage - -#endif /* GL_NV_multisample_coverage */ - -#ifdef GL_NV_multisample_filter_hint - -#endif /* GL_NV_multisample_filter_hint */ - -#ifdef GL_NV_occlusion_query - -static GLboolean _glewInit_GL_NV_occlusion_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glBeginOcclusionQueryNV")) == NULL) || r; - r = ((glDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteOcclusionQueriesNV")) == NULL) || r; - r = ((glEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glEndOcclusionQueryNV")) == NULL) || r; - r = ((glGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC)glewGetProcAddress((const GLubyte*)"glGenOcclusionQueriesNV")) == NULL) || r; - r = ((glGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryivNV")) == NULL) || r; - r = ((glGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetOcclusionQueryuivNV")) == NULL) || r; - r = ((glIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC)glewGetProcAddress((const GLubyte*)"glIsOcclusionQueryNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_occlusion_query */ - -#ifdef GL_NV_packed_depth_stencil - -#endif /* GL_NV_packed_depth_stencil */ - -#ifdef GL_NV_parameter_buffer_object - -static GLboolean _glewInit_GL_NV_parameter_buffer_object (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glProgramBufferParametersIivNV = (PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIivNV")) == NULL) || r; - r = ((glProgramBufferParametersIuivNV = (PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersIuivNV")) == NULL) || r; - r = ((glProgramBufferParametersfvNV = (PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramBufferParametersfvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_parameter_buffer_object */ - -#ifdef GL_NV_parameter_buffer_object2 - -#endif /* GL_NV_parameter_buffer_object2 */ - -#ifdef GL_NV_path_rendering - -static GLboolean _glewInit_GL_NV_path_rendering (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCopyPathNV = (PFNGLCOPYPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCopyPathNV")) == NULL) || r; - r = ((glCoverFillPathInstancedNV = (PFNGLCOVERFILLPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glCoverFillPathInstancedNV")) == NULL) || r; - r = ((glCoverFillPathNV = (PFNGLCOVERFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCoverFillPathNV")) == NULL) || r; - r = ((glCoverStrokePathInstancedNV = (PFNGLCOVERSTROKEPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glCoverStrokePathInstancedNV")) == NULL) || r; - r = ((glCoverStrokePathNV = (PFNGLCOVERSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glCoverStrokePathNV")) == NULL) || r; - r = ((glDeletePathsNV = (PFNGLDELETEPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glDeletePathsNV")) == NULL) || r; - r = ((glGenPathsNV = (PFNGLGENPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glGenPathsNV")) == NULL) || r; - r = ((glGetPathColorGenfvNV = (PFNGLGETPATHCOLORGENFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathColorGenfvNV")) == NULL) || r; - r = ((glGetPathColorGenivNV = (PFNGLGETPATHCOLORGENIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathColorGenivNV")) == NULL) || r; - r = ((glGetPathCommandsNV = (PFNGLGETPATHCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathCommandsNV")) == NULL) || r; - r = ((glGetPathCoordsNV = (PFNGLGETPATHCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathCoordsNV")) == NULL) || r; - r = ((glGetPathDashArrayNV = (PFNGLGETPATHDASHARRAYNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathDashArrayNV")) == NULL) || r; - r = ((glGetPathLengthNV = (PFNGLGETPATHLENGTHNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathLengthNV")) == NULL) || r; - r = ((glGetPathMetricRangeNV = (PFNGLGETPATHMETRICRANGENVPROC)glewGetProcAddress((const GLubyte*)"glGetPathMetricRangeNV")) == NULL) || r; - r = ((glGetPathMetricsNV = (PFNGLGETPATHMETRICSNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathMetricsNV")) == NULL) || r; - r = ((glGetPathParameterfvNV = (PFNGLGETPATHPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathParameterfvNV")) == NULL) || r; - r = ((glGetPathParameterivNV = (PFNGLGETPATHPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathParameterivNV")) == NULL) || r; - r = ((glGetPathSpacingNV = (PFNGLGETPATHSPACINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathSpacingNV")) == NULL) || r; - r = ((glGetPathTexGenfvNV = (PFNGLGETPATHTEXGENFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathTexGenfvNV")) == NULL) || r; - r = ((glGetPathTexGenivNV = (PFNGLGETPATHTEXGENIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetPathTexGenivNV")) == NULL) || r; - r = ((glInterpolatePathsNV = (PFNGLINTERPOLATEPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glInterpolatePathsNV")) == NULL) || r; - r = ((glIsPathNV = (PFNGLISPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPathNV")) == NULL) || r; - r = ((glIsPointInFillPathNV = (PFNGLISPOINTINFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPointInFillPathNV")) == NULL) || r; - r = ((glIsPointInStrokePathNV = (PFNGLISPOINTINSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glIsPointInStrokePathNV")) == NULL) || r; - r = ((glPathColorGenNV = (PFNGLPATHCOLORGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathColorGenNV")) == NULL) || r; - r = ((glPathCommandsNV = (PFNGLPATHCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathCommandsNV")) == NULL) || r; - r = ((glPathCoordsNV = (PFNGLPATHCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathCoordsNV")) == NULL) || r; - r = ((glPathCoverDepthFuncNV = (PFNGLPATHCOVERDEPTHFUNCNVPROC)glewGetProcAddress((const GLubyte*)"glPathCoverDepthFuncNV")) == NULL) || r; - r = ((glPathDashArrayNV = (PFNGLPATHDASHARRAYNVPROC)glewGetProcAddress((const GLubyte*)"glPathDashArrayNV")) == NULL) || r; - r = ((glPathFogGenNV = (PFNGLPATHFOGGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathFogGenNV")) == NULL) || r; - r = ((glPathGlyphRangeNV = (PFNGLPATHGLYPHRANGENVPROC)glewGetProcAddress((const GLubyte*)"glPathGlyphRangeNV")) == NULL) || r; - r = ((glPathGlyphsNV = (PFNGLPATHGLYPHSNVPROC)glewGetProcAddress((const GLubyte*)"glPathGlyphsNV")) == NULL) || r; - r = ((glPathParameterfNV = (PFNGLPATHPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterfNV")) == NULL) || r; - r = ((glPathParameterfvNV = (PFNGLPATHPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterfvNV")) == NULL) || r; - r = ((glPathParameteriNV = (PFNGLPATHPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPathParameteriNV")) == NULL) || r; - r = ((glPathParameterivNV = (PFNGLPATHPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPathParameterivNV")) == NULL) || r; - r = ((glPathStencilDepthOffsetNV = (PFNGLPATHSTENCILDEPTHOFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glPathStencilDepthOffsetNV")) == NULL) || r; - r = ((glPathStencilFuncNV = (PFNGLPATHSTENCILFUNCNVPROC)glewGetProcAddress((const GLubyte*)"glPathStencilFuncNV")) == NULL) || r; - r = ((glPathStringNV = (PFNGLPATHSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glPathStringNV")) == NULL) || r; - r = ((glPathSubCommandsNV = (PFNGLPATHSUBCOMMANDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathSubCommandsNV")) == NULL) || r; - r = ((glPathSubCoordsNV = (PFNGLPATHSUBCOORDSNVPROC)glewGetProcAddress((const GLubyte*)"glPathSubCoordsNV")) == NULL) || r; - r = ((glPathTexGenNV = (PFNGLPATHTEXGENNVPROC)glewGetProcAddress((const GLubyte*)"glPathTexGenNV")) == NULL) || r; - r = ((glPointAlongPathNV = (PFNGLPOINTALONGPATHNVPROC)glewGetProcAddress((const GLubyte*)"glPointAlongPathNV")) == NULL) || r; - r = ((glStencilFillPathInstancedNV = (PFNGLSTENCILFILLPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glStencilFillPathInstancedNV")) == NULL) || r; - r = ((glStencilFillPathNV = (PFNGLSTENCILFILLPATHNVPROC)glewGetProcAddress((const GLubyte*)"glStencilFillPathNV")) == NULL) || r; - r = ((glStencilStrokePathInstancedNV = (PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC)glewGetProcAddress((const GLubyte*)"glStencilStrokePathInstancedNV")) == NULL) || r; - r = ((glStencilStrokePathNV = (PFNGLSTENCILSTROKEPATHNVPROC)glewGetProcAddress((const GLubyte*)"glStencilStrokePathNV")) == NULL) || r; - r = ((glTransformPathNV = (PFNGLTRANSFORMPATHNVPROC)glewGetProcAddress((const GLubyte*)"glTransformPathNV")) == NULL) || r; - r = ((glWeightPathsNV = (PFNGLWEIGHTPATHSNVPROC)glewGetProcAddress((const GLubyte*)"glWeightPathsNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_path_rendering */ - -#ifdef GL_NV_pixel_data_range - -static GLboolean _glewInit_GL_NV_pixel_data_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushPixelDataRangeNV = (PFNGLFLUSHPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushPixelDataRangeNV")) == NULL) || r; - r = ((glPixelDataRangeNV = (PFNGLPIXELDATARANGENVPROC)glewGetProcAddress((const GLubyte*)"glPixelDataRangeNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_pixel_data_range */ - -#ifdef GL_NV_point_sprite - -static GLboolean _glewInit_GL_NV_point_sprite (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPointParameteriNV = (PFNGLPOINTPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glPointParameteriNV")) == NULL) || r; - r = ((glPointParameterivNV = (PFNGLPOINTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_point_sprite */ - -#ifdef GL_NV_present_video - -static GLboolean _glewInit_GL_NV_present_video (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVideoi64vNV = (PFNGLGETVIDEOI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoi64vNV")) == NULL) || r; - r = ((glGetVideoivNV = (PFNGLGETVIDEOIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoivNV")) == NULL) || r; - r = ((glGetVideoui64vNV = (PFNGLGETVIDEOUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoui64vNV")) == NULL) || r; - r = ((glGetVideouivNV = (PFNGLGETVIDEOUIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideouivNV")) == NULL) || r; - r = ((glPresentFrameDualFillNV = (PFNGLPRESENTFRAMEDUALFILLNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameDualFillNV")) == NULL) || r; - r = ((glPresentFrameKeyedNV = (PFNGLPRESENTFRAMEKEYEDNVPROC)glewGetProcAddress((const GLubyte*)"glPresentFrameKeyedNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_present_video */ - -#ifdef GL_NV_primitive_restart - -static GLboolean _glewInit_GL_NV_primitive_restart (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPrimitiveRestartIndexNV = (PFNGLPRIMITIVERESTARTINDEXNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartIndexNV")) == NULL) || r; - r = ((glPrimitiveRestartNV = (PFNGLPRIMITIVERESTARTNVPROC)glewGetProcAddress((const GLubyte*)"glPrimitiveRestartNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_primitive_restart */ - -#ifdef GL_NV_register_combiners - -static GLboolean _glewInit_GL_NV_register_combiners (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCombinerInputNV = (PFNGLCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerInputNV")) == NULL) || r; - r = ((glCombinerOutputNV = (PFNGLCOMBINEROUTPUTNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerOutputNV")) == NULL) || r; - r = ((glCombinerParameterfNV = (PFNGLCOMBINERPARAMETERFNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfNV")) == NULL) || r; - r = ((glCombinerParameterfvNV = (PFNGLCOMBINERPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterfvNV")) == NULL) || r; - r = ((glCombinerParameteriNV = (PFNGLCOMBINERPARAMETERINVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameteriNV")) == NULL) || r; - r = ((glCombinerParameterivNV = (PFNGLCOMBINERPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerParameterivNV")) == NULL) || r; - r = ((glFinalCombinerInputNV = (PFNGLFINALCOMBINERINPUTNVPROC)glewGetProcAddress((const GLubyte*)"glFinalCombinerInputNV")) == NULL) || r; - r = ((glGetCombinerInputParameterfvNV = (PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterfvNV")) == NULL) || r; - r = ((glGetCombinerInputParameterivNV = (PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerInputParameterivNV")) == NULL) || r; - r = ((glGetCombinerOutputParameterfvNV = (PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterfvNV")) == NULL) || r; - r = ((glGetCombinerOutputParameterivNV = (PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerOutputParameterivNV")) == NULL) || r; - r = ((glGetFinalCombinerInputParameterfvNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterfvNV")) == NULL) || r; - r = ((glGetFinalCombinerInputParameterivNV = (PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetFinalCombinerInputParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_register_combiners */ - -#ifdef GL_NV_register_combiners2 - -static GLboolean _glewInit_GL_NV_register_combiners2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glCombinerStageParameterfvNV = (PFNGLCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glCombinerStageParameterfvNV")) == NULL) || r; - r = ((glGetCombinerStageParameterfvNV = (PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetCombinerStageParameterfvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_register_combiners2 */ - -#ifdef GL_NV_shader_atomic_counters - -#endif /* GL_NV_shader_atomic_counters */ - -#ifdef GL_NV_shader_atomic_float - -#endif /* GL_NV_shader_atomic_float */ - -#ifdef GL_NV_shader_buffer_load - -static GLboolean _glewInit_GL_NV_shader_buffer_load (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetBufferParameterui64vNV = (PFNGLGETBUFFERPARAMETERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetBufferParameterui64vNV")) == NULL) || r; - r = ((glGetIntegerui64vNV = (PFNGLGETINTEGERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerui64vNV")) == NULL) || r; - r = ((glGetNamedBufferParameterui64vNV = (PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetNamedBufferParameterui64vNV")) == NULL) || r; - r = ((glIsBufferResidentNV = (PFNGLISBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsBufferResidentNV")) == NULL) || r; - r = ((glIsNamedBufferResidentNV = (PFNGLISNAMEDBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glIsNamedBufferResidentNV")) == NULL) || r; - r = ((glMakeBufferNonResidentNV = (PFNGLMAKEBUFFERNONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeBufferNonResidentNV")) == NULL) || r; - r = ((glMakeBufferResidentNV = (PFNGLMAKEBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeBufferResidentNV")) == NULL) || r; - r = ((glMakeNamedBufferNonResidentNV = (PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeNamedBufferNonResidentNV")) == NULL) || r; - r = ((glMakeNamedBufferResidentNV = (PFNGLMAKENAMEDBUFFERRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glMakeNamedBufferResidentNV")) == NULL) || r; - r = ((glProgramUniformui64NV = (PFNGLPROGRAMUNIFORMUI64NVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformui64NV")) == NULL) || r; - r = ((glProgramUniformui64vNV = (PFNGLPROGRAMUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glProgramUniformui64vNV")) == NULL) || r; - r = ((glUniformui64NV = (PFNGLUNIFORMUI64NVPROC)glewGetProcAddress((const GLubyte*)"glUniformui64NV")) == NULL) || r; - r = ((glUniformui64vNV = (PFNGLUNIFORMUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glUniformui64vNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_shader_buffer_load */ - -#ifdef GL_NV_shader_storage_buffer_object - -#endif /* GL_NV_shader_storage_buffer_object */ - -#ifdef GL_NV_tessellation_program5 - -#endif /* GL_NV_tessellation_program5 */ - -#ifdef GL_NV_texgen_emboss - -#endif /* GL_NV_texgen_emboss */ - -#ifdef GL_NV_texgen_reflection - -#endif /* GL_NV_texgen_reflection */ - -#ifdef GL_NV_texture_barrier - -static GLboolean _glewInit_GL_NV_texture_barrier (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureBarrierNV = (PFNGLTEXTUREBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glTextureBarrierNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_texture_barrier */ - -#ifdef GL_NV_texture_compression_vtc - -#endif /* GL_NV_texture_compression_vtc */ - -#ifdef GL_NV_texture_env_combine4 - -#endif /* GL_NV_texture_env_combine4 */ - -#ifdef GL_NV_texture_expand_normal - -#endif /* GL_NV_texture_expand_normal */ - -#ifdef GL_NV_texture_multisample - -static GLboolean _glewInit_GL_NV_texture_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexImage2DMultisampleCoverageNV = (PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTexImage2DMultisampleCoverageNV")) == NULL) || r; - r = ((glTexImage3DMultisampleCoverageNV = (PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTexImage3DMultisampleCoverageNV")) == NULL) || r; - r = ((glTextureImage2DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DMultisampleCoverageNV")) == NULL) || r; - r = ((glTextureImage2DMultisampleNV = (PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage2DMultisampleNV")) == NULL) || r; - r = ((glTextureImage3DMultisampleCoverageNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DMultisampleCoverageNV")) == NULL) || r; - r = ((glTextureImage3DMultisampleNV = (PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC)glewGetProcAddress((const GLubyte*)"glTextureImage3DMultisampleNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_texture_multisample */ - -#ifdef GL_NV_texture_rectangle - -#endif /* GL_NV_texture_rectangle */ - -#ifdef GL_NV_texture_shader - -#endif /* GL_NV_texture_shader */ - -#ifdef GL_NV_texture_shader2 - -#endif /* GL_NV_texture_shader2 */ - -#ifdef GL_NV_texture_shader3 - -#endif /* GL_NV_texture_shader3 */ - -#ifdef GL_NV_transform_feedback - -static GLboolean _glewInit_GL_NV_transform_feedback (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glActiveVaryingNV = (PFNGLACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glActiveVaryingNV")) == NULL) || r; - r = ((glBeginTransformFeedbackNV = (PFNGLBEGINTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBeginTransformFeedbackNV")) == NULL) || r; - r = ((glBindBufferBaseNV = (PFNGLBINDBUFFERBASENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferBaseNV")) == NULL) || r; - r = ((glBindBufferOffsetNV = (PFNGLBINDBUFFEROFFSETNVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferOffsetNV")) == NULL) || r; - r = ((glBindBufferRangeNV = (PFNGLBINDBUFFERRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBindBufferRangeNV")) == NULL) || r; - r = ((glEndTransformFeedbackNV = (PFNGLENDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glEndTransformFeedbackNV")) == NULL) || r; - r = ((glGetActiveVaryingNV = (PFNGLGETACTIVEVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetActiveVaryingNV")) == NULL) || r; - r = ((glGetTransformFeedbackVaryingNV = (PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetTransformFeedbackVaryingNV")) == NULL) || r; - r = ((glGetVaryingLocationNV = (PFNGLGETVARYINGLOCATIONNVPROC)glewGetProcAddress((const GLubyte*)"glGetVaryingLocationNV")) == NULL) || r; - r = ((glTransformFeedbackAttribsNV = (PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackAttribsNV")) == NULL) || r; - r = ((glTransformFeedbackVaryingsNV = (PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC)glewGetProcAddress((const GLubyte*)"glTransformFeedbackVaryingsNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_transform_feedback */ - -#ifdef GL_NV_transform_feedback2 - -static GLboolean _glewInit_GL_NV_transform_feedback2 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBindTransformFeedbackNV = (PFNGLBINDTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glBindTransformFeedbackNV")) == NULL) || r; - r = ((glDeleteTransformFeedbacksNV = (PFNGLDELETETRANSFORMFEEDBACKSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteTransformFeedbacksNV")) == NULL) || r; - r = ((glDrawTransformFeedbackNV = (PFNGLDRAWTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glDrawTransformFeedbackNV")) == NULL) || r; - r = ((glGenTransformFeedbacksNV = (PFNGLGENTRANSFORMFEEDBACKSNVPROC)glewGetProcAddress((const GLubyte*)"glGenTransformFeedbacksNV")) == NULL) || r; - r = ((glIsTransformFeedbackNV = (PFNGLISTRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glIsTransformFeedbackNV")) == NULL) || r; - r = ((glPauseTransformFeedbackNV = (PFNGLPAUSETRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glPauseTransformFeedbackNV")) == NULL) || r; - r = ((glResumeTransformFeedbackNV = (PFNGLRESUMETRANSFORMFEEDBACKNVPROC)glewGetProcAddress((const GLubyte*)"glResumeTransformFeedbackNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_transform_feedback2 */ - -#ifdef GL_NV_vdpau_interop - -static GLboolean _glewInit_GL_NV_vdpau_interop (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glVDPAUFiniNV = (PFNGLVDPAUFININVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUFiniNV")) == NULL) || r; - r = ((glVDPAUGetSurfaceivNV = (PFNGLVDPAUGETSURFACEIVNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUGetSurfaceivNV")) == NULL) || r; - r = ((glVDPAUInitNV = (PFNGLVDPAUINITNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUInitNV")) == NULL) || r; - r = ((glVDPAUIsSurfaceNV = (PFNGLVDPAUISSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUIsSurfaceNV")) == NULL) || r; - r = ((glVDPAUMapSurfacesNV = (PFNGLVDPAUMAPSURFACESNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUMapSurfacesNV")) == NULL) || r; - r = ((glVDPAURegisterOutputSurfaceNV = (PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAURegisterOutputSurfaceNV")) == NULL) || r; - r = ((glVDPAURegisterVideoSurfaceNV = (PFNGLVDPAUREGISTERVIDEOSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAURegisterVideoSurfaceNV")) == NULL) || r; - r = ((glVDPAUSurfaceAccessNV = (PFNGLVDPAUSURFACEACCESSNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUSurfaceAccessNV")) == NULL) || r; - r = ((glVDPAUUnmapSurfacesNV = (PFNGLVDPAUUNMAPSURFACESNVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUUnmapSurfacesNV")) == NULL) || r; - r = ((glVDPAUUnregisterSurfaceNV = (PFNGLVDPAUUNREGISTERSURFACENVPROC)glewGetProcAddress((const GLubyte*)"glVDPAUUnregisterSurfaceNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vdpau_interop */ - -#ifdef GL_NV_vertex_array_range - -static GLboolean _glewInit_GL_NV_vertex_array_range (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushVertexArrayRangeNV = (PFNGLFLUSHVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glFlushVertexArrayRangeNV")) == NULL) || r; - r = ((glVertexArrayRangeNV = (PFNGLVERTEXARRAYRANGENVPROC)glewGetProcAddress((const GLubyte*)"glVertexArrayRangeNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_array_range */ - -#ifdef GL_NV_vertex_array_range2 - -#endif /* GL_NV_vertex_array_range2 */ - -#ifdef GL_NV_vertex_attrib_integer_64bit - -static GLboolean _glewInit_GL_NV_vertex_attrib_integer_64bit (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetVertexAttribLi64vNV = (PFNGLGETVERTEXATTRIBLI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLi64vNV")) == NULL) || r; - r = ((glGetVertexAttribLui64vNV = (PFNGLGETVERTEXATTRIBLUI64VNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribLui64vNV")) == NULL) || r; - r = ((glVertexAttribL1i64NV = (PFNGLVERTEXATTRIBL1I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1i64NV")) == NULL) || r; - r = ((glVertexAttribL1i64vNV = (PFNGLVERTEXATTRIBL1I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1i64vNV")) == NULL) || r; - r = ((glVertexAttribL1ui64NV = (PFNGLVERTEXATTRIBL1UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64NV")) == NULL) || r; - r = ((glVertexAttribL1ui64vNV = (PFNGLVERTEXATTRIBL1UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL1ui64vNV")) == NULL) || r; - r = ((glVertexAttribL2i64NV = (PFNGLVERTEXATTRIBL2I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2i64NV")) == NULL) || r; - r = ((glVertexAttribL2i64vNV = (PFNGLVERTEXATTRIBL2I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2i64vNV")) == NULL) || r; - r = ((glVertexAttribL2ui64NV = (PFNGLVERTEXATTRIBL2UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2ui64NV")) == NULL) || r; - r = ((glVertexAttribL2ui64vNV = (PFNGLVERTEXATTRIBL2UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL2ui64vNV")) == NULL) || r; - r = ((glVertexAttribL3i64NV = (PFNGLVERTEXATTRIBL3I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3i64NV")) == NULL) || r; - r = ((glVertexAttribL3i64vNV = (PFNGLVERTEXATTRIBL3I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3i64vNV")) == NULL) || r; - r = ((glVertexAttribL3ui64NV = (PFNGLVERTEXATTRIBL3UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3ui64NV")) == NULL) || r; - r = ((glVertexAttribL3ui64vNV = (PFNGLVERTEXATTRIBL3UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL3ui64vNV")) == NULL) || r; - r = ((glVertexAttribL4i64NV = (PFNGLVERTEXATTRIBL4I64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4i64NV")) == NULL) || r; - r = ((glVertexAttribL4i64vNV = (PFNGLVERTEXATTRIBL4I64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4i64vNV")) == NULL) || r; - r = ((glVertexAttribL4ui64NV = (PFNGLVERTEXATTRIBL4UI64NVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4ui64NV")) == NULL) || r; - r = ((glVertexAttribL4ui64vNV = (PFNGLVERTEXATTRIBL4UI64VNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribL4ui64vNV")) == NULL) || r; - r = ((glVertexAttribLFormatNV = (PFNGLVERTEXATTRIBLFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribLFormatNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_attrib_integer_64bit */ - -#ifdef GL_NV_vertex_buffer_unified_memory - -static GLboolean _glewInit_GL_NV_vertex_buffer_unified_memory (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBufferAddressRangeNV = (PFNGLBUFFERADDRESSRANGENVPROC)glewGetProcAddress((const GLubyte*)"glBufferAddressRangeNV")) == NULL) || r; - r = ((glColorFormatNV = (PFNGLCOLORFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glColorFormatNV")) == NULL) || r; - r = ((glEdgeFlagFormatNV = (PFNGLEDGEFLAGFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glEdgeFlagFormatNV")) == NULL) || r; - r = ((glFogCoordFormatNV = (PFNGLFOGCOORDFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glFogCoordFormatNV")) == NULL) || r; - r = ((glGetIntegerui64i_vNV = (PFNGLGETINTEGERUI64I_VNVPROC)glewGetProcAddress((const GLubyte*)"glGetIntegerui64i_vNV")) == NULL) || r; - r = ((glIndexFormatNV = (PFNGLINDEXFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glIndexFormatNV")) == NULL) || r; - r = ((glNormalFormatNV = (PFNGLNORMALFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glNormalFormatNV")) == NULL) || r; - r = ((glSecondaryColorFormatNV = (PFNGLSECONDARYCOLORFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glSecondaryColorFormatNV")) == NULL) || r; - r = ((glTexCoordFormatNV = (PFNGLTEXCOORDFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glTexCoordFormatNV")) == NULL) || r; - r = ((glVertexAttribFormatNV = (PFNGLVERTEXATTRIBFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribFormatNV")) == NULL) || r; - r = ((glVertexAttribIFormatNV = (PFNGLVERTEXATTRIBIFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribIFormatNV")) == NULL) || r; - r = ((glVertexFormatNV = (PFNGLVERTEXFORMATNVPROC)glewGetProcAddress((const GLubyte*)"glVertexFormatNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_buffer_unified_memory */ - -#ifdef GL_NV_vertex_program - -static GLboolean _glewInit_GL_NV_vertex_program (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAreProgramsResidentNV = (PFNGLAREPROGRAMSRESIDENTNVPROC)glewGetProcAddress((const GLubyte*)"glAreProgramsResidentNV")) == NULL) || r; - r = ((glBindProgramNV = (PFNGLBINDPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glBindProgramNV")) == NULL) || r; - r = ((glDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glDeleteProgramsNV")) == NULL) || r; - r = ((glExecuteProgramNV = (PFNGLEXECUTEPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glExecuteProgramNV")) == NULL) || r; - r = ((glGenProgramsNV = (PFNGLGENPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glGenProgramsNV")) == NULL) || r; - r = ((glGetProgramParameterdvNV = (PFNGLGETPROGRAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterdvNV")) == NULL) || r; - r = ((glGetProgramParameterfvNV = (PFNGLGETPROGRAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramParameterfvNV")) == NULL) || r; - r = ((glGetProgramStringNV = (PFNGLGETPROGRAMSTRINGNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramStringNV")) == NULL) || r; - r = ((glGetProgramivNV = (PFNGLGETPROGRAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetProgramivNV")) == NULL) || r; - r = ((glGetTrackMatrixivNV = (PFNGLGETTRACKMATRIXIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetTrackMatrixivNV")) == NULL) || r; - r = ((glGetVertexAttribPointervNV = (PFNGLGETVERTEXATTRIBPOINTERVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribPointervNV")) == NULL) || r; - r = ((glGetVertexAttribdvNV = (PFNGLGETVERTEXATTRIBDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribdvNV")) == NULL) || r; - r = ((glGetVertexAttribfvNV = (PFNGLGETVERTEXATTRIBFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribfvNV")) == NULL) || r; - r = ((glGetVertexAttribivNV = (PFNGLGETVERTEXATTRIBIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVertexAttribivNV")) == NULL) || r; - r = ((glIsProgramNV = (PFNGLISPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glIsProgramNV")) == NULL) || r; - r = ((glLoadProgramNV = (PFNGLLOADPROGRAMNVPROC)glewGetProcAddress((const GLubyte*)"glLoadProgramNV")) == NULL) || r; - r = ((glProgramParameter4dNV = (PFNGLPROGRAMPARAMETER4DNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dNV")) == NULL) || r; - r = ((glProgramParameter4dvNV = (PFNGLPROGRAMPARAMETER4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4dvNV")) == NULL) || r; - r = ((glProgramParameter4fNV = (PFNGLPROGRAMPARAMETER4FNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fNV")) == NULL) || r; - r = ((glProgramParameter4fvNV = (PFNGLPROGRAMPARAMETER4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameter4fvNV")) == NULL) || r; - r = ((glProgramParameters4dvNV = (PFNGLPROGRAMPARAMETERS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4dvNV")) == NULL) || r; - r = ((glProgramParameters4fvNV = (PFNGLPROGRAMPARAMETERS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glProgramParameters4fvNV")) == NULL) || r; - r = ((glRequestResidentProgramsNV = (PFNGLREQUESTRESIDENTPROGRAMSNVPROC)glewGetProcAddress((const GLubyte*)"glRequestResidentProgramsNV")) == NULL) || r; - r = ((glTrackMatrixNV = (PFNGLTRACKMATRIXNVPROC)glewGetProcAddress((const GLubyte*)"glTrackMatrixNV")) == NULL) || r; - r = ((glVertexAttrib1dNV = (PFNGLVERTEXATTRIB1DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dNV")) == NULL) || r; - r = ((glVertexAttrib1dvNV = (PFNGLVERTEXATTRIB1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1dvNV")) == NULL) || r; - r = ((glVertexAttrib1fNV = (PFNGLVERTEXATTRIB1FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fNV")) == NULL) || r; - r = ((glVertexAttrib1fvNV = (PFNGLVERTEXATTRIB1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1fvNV")) == NULL) || r; - r = ((glVertexAttrib1sNV = (PFNGLVERTEXATTRIB1SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1sNV")) == NULL) || r; - r = ((glVertexAttrib1svNV = (PFNGLVERTEXATTRIB1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib1svNV")) == NULL) || r; - r = ((glVertexAttrib2dNV = (PFNGLVERTEXATTRIB2DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dNV")) == NULL) || r; - r = ((glVertexAttrib2dvNV = (PFNGLVERTEXATTRIB2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2dvNV")) == NULL) || r; - r = ((glVertexAttrib2fNV = (PFNGLVERTEXATTRIB2FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fNV")) == NULL) || r; - r = ((glVertexAttrib2fvNV = (PFNGLVERTEXATTRIB2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2fvNV")) == NULL) || r; - r = ((glVertexAttrib2sNV = (PFNGLVERTEXATTRIB2SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2sNV")) == NULL) || r; - r = ((glVertexAttrib2svNV = (PFNGLVERTEXATTRIB2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib2svNV")) == NULL) || r; - r = ((glVertexAttrib3dNV = (PFNGLVERTEXATTRIB3DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dNV")) == NULL) || r; - r = ((glVertexAttrib3dvNV = (PFNGLVERTEXATTRIB3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3dvNV")) == NULL) || r; - r = ((glVertexAttrib3fNV = (PFNGLVERTEXATTRIB3FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fNV")) == NULL) || r; - r = ((glVertexAttrib3fvNV = (PFNGLVERTEXATTRIB3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3fvNV")) == NULL) || r; - r = ((glVertexAttrib3sNV = (PFNGLVERTEXATTRIB3SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3sNV")) == NULL) || r; - r = ((glVertexAttrib3svNV = (PFNGLVERTEXATTRIB3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib3svNV")) == NULL) || r; - r = ((glVertexAttrib4dNV = (PFNGLVERTEXATTRIB4DNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dNV")) == NULL) || r; - r = ((glVertexAttrib4dvNV = (PFNGLVERTEXATTRIB4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4dvNV")) == NULL) || r; - r = ((glVertexAttrib4fNV = (PFNGLVERTEXATTRIB4FNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fNV")) == NULL) || r; - r = ((glVertexAttrib4fvNV = (PFNGLVERTEXATTRIB4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4fvNV")) == NULL) || r; - r = ((glVertexAttrib4sNV = (PFNGLVERTEXATTRIB4SNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4sNV")) == NULL) || r; - r = ((glVertexAttrib4svNV = (PFNGLVERTEXATTRIB4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4svNV")) == NULL) || r; - r = ((glVertexAttrib4ubNV = (PFNGLVERTEXATTRIB4UBNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubNV")) == NULL) || r; - r = ((glVertexAttrib4ubvNV = (PFNGLVERTEXATTRIB4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttrib4ubvNV")) == NULL) || r; - r = ((glVertexAttribPointerNV = (PFNGLVERTEXATTRIBPOINTERNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribPointerNV")) == NULL) || r; - r = ((glVertexAttribs1dvNV = (PFNGLVERTEXATTRIBS1DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1dvNV")) == NULL) || r; - r = ((glVertexAttribs1fvNV = (PFNGLVERTEXATTRIBS1FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1fvNV")) == NULL) || r; - r = ((glVertexAttribs1svNV = (PFNGLVERTEXATTRIBS1SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs1svNV")) == NULL) || r; - r = ((glVertexAttribs2dvNV = (PFNGLVERTEXATTRIBS2DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2dvNV")) == NULL) || r; - r = ((glVertexAttribs2fvNV = (PFNGLVERTEXATTRIBS2FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2fvNV")) == NULL) || r; - r = ((glVertexAttribs2svNV = (PFNGLVERTEXATTRIBS2SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs2svNV")) == NULL) || r; - r = ((glVertexAttribs3dvNV = (PFNGLVERTEXATTRIBS3DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3dvNV")) == NULL) || r; - r = ((glVertexAttribs3fvNV = (PFNGLVERTEXATTRIBS3FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3fvNV")) == NULL) || r; - r = ((glVertexAttribs3svNV = (PFNGLVERTEXATTRIBS3SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs3svNV")) == NULL) || r; - r = ((glVertexAttribs4dvNV = (PFNGLVERTEXATTRIBS4DVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4dvNV")) == NULL) || r; - r = ((glVertexAttribs4fvNV = (PFNGLVERTEXATTRIBS4FVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4fvNV")) == NULL) || r; - r = ((glVertexAttribs4svNV = (PFNGLVERTEXATTRIBS4SVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4svNV")) == NULL) || r; - r = ((glVertexAttribs4ubvNV = (PFNGLVERTEXATTRIBS4UBVNVPROC)glewGetProcAddress((const GLubyte*)"glVertexAttribs4ubvNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_vertex_program */ - -#ifdef GL_NV_vertex_program1_1 - -#endif /* GL_NV_vertex_program1_1 */ - -#ifdef GL_NV_vertex_program2 - -#endif /* GL_NV_vertex_program2 */ - -#ifdef GL_NV_vertex_program2_option - -#endif /* GL_NV_vertex_program2_option */ - -#ifdef GL_NV_vertex_program3 - -#endif /* GL_NV_vertex_program3 */ - -#ifdef GL_NV_vertex_program4 - -#endif /* GL_NV_vertex_program4 */ - -#ifdef GL_NV_video_capture - -static GLboolean _glewInit_GL_NV_video_capture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glBeginVideoCaptureNV = (PFNGLBEGINVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glBeginVideoCaptureNV")) == NULL) || r; - r = ((glBindVideoCaptureStreamBufferNV = (PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC)glewGetProcAddress((const GLubyte*)"glBindVideoCaptureStreamBufferNV")) == NULL) || r; - r = ((glBindVideoCaptureStreamTextureNV = (PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC)glewGetProcAddress((const GLubyte*)"glBindVideoCaptureStreamTextureNV")) == NULL) || r; - r = ((glEndVideoCaptureNV = (PFNGLENDVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glEndVideoCaptureNV")) == NULL) || r; - r = ((glGetVideoCaptureStreamdvNV = (PFNGLGETVIDEOCAPTURESTREAMDVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamdvNV")) == NULL) || r; - r = ((glGetVideoCaptureStreamfvNV = (PFNGLGETVIDEOCAPTURESTREAMFVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamfvNV")) == NULL) || r; - r = ((glGetVideoCaptureStreamivNV = (PFNGLGETVIDEOCAPTURESTREAMIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureStreamivNV")) == NULL) || r; - r = ((glGetVideoCaptureivNV = (PFNGLGETVIDEOCAPTUREIVNVPROC)glewGetProcAddress((const GLubyte*)"glGetVideoCaptureivNV")) == NULL) || r; - r = ((glVideoCaptureNV = (PFNGLVIDEOCAPTURENVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureNV")) == NULL) || r; - r = ((glVideoCaptureStreamParameterdvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterdvNV")) == NULL) || r; - r = ((glVideoCaptureStreamParameterfvNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterfvNV")) == NULL) || r; - r = ((glVideoCaptureStreamParameterivNV = (PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC)glewGetProcAddress((const GLubyte*)"glVideoCaptureStreamParameterivNV")) == NULL) || r; - - return r; -} - -#endif /* GL_NV_video_capture */ - -#ifdef GL_OES_byte_coordinates - -#endif /* GL_OES_byte_coordinates */ - -#ifdef GL_OES_compressed_paletted_texture - -#endif /* GL_OES_compressed_paletted_texture */ - -#ifdef GL_OES_read_format - -#endif /* GL_OES_read_format */ - -#ifdef GL_OES_single_precision - -static GLboolean _glewInit_GL_OES_single_precision (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClearDepthfOES = (PFNGLCLEARDEPTHFOESPROC)glewGetProcAddress((const GLubyte*)"glClearDepthfOES")) == NULL) || r; - r = ((glClipPlanefOES = (PFNGLCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glClipPlanefOES")) == NULL) || r; - r = ((glDepthRangefOES = (PFNGLDEPTHRANGEFOESPROC)glewGetProcAddress((const GLubyte*)"glDepthRangefOES")) == NULL) || r; - r = ((glFrustumfOES = (PFNGLFRUSTUMFOESPROC)glewGetProcAddress((const GLubyte*)"glFrustumfOES")) == NULL) || r; - r = ((glGetClipPlanefOES = (PFNGLGETCLIPPLANEFOESPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanefOES")) == NULL) || r; - r = ((glOrthofOES = (PFNGLORTHOFOESPROC)glewGetProcAddress((const GLubyte*)"glOrthofOES")) == NULL) || r; - - return r; -} - -#endif /* GL_OES_single_precision */ - -#ifdef GL_OML_interlace - -#endif /* GL_OML_interlace */ - -#ifdef GL_OML_resample - -#endif /* GL_OML_resample */ - -#ifdef GL_OML_subsample - -#endif /* GL_OML_subsample */ - -#ifdef GL_PGI_misc_hints - -#endif /* GL_PGI_misc_hints */ - -#ifdef GL_PGI_vertex_hints - -#endif /* GL_PGI_vertex_hints */ - -#ifdef GL_REGAL_ES1_0_compatibility - -static GLboolean _glewInit_GL_REGAL_ES1_0_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAlphaFuncx = (PFNGLALPHAFUNCXPROC)glewGetProcAddress((const GLubyte*)"glAlphaFuncx")) == NULL) || r; - r = ((glClearColorx = (PFNGLCLEARCOLORXPROC)glewGetProcAddress((const GLubyte*)"glClearColorx")) == NULL) || r; - r = ((glClearDepthx = (PFNGLCLEARDEPTHXPROC)glewGetProcAddress((const GLubyte*)"glClearDepthx")) == NULL) || r; - r = ((glColor4x = (PFNGLCOLOR4XPROC)glewGetProcAddress((const GLubyte*)"glColor4x")) == NULL) || r; - r = ((glDepthRangex = (PFNGLDEPTHRANGEXPROC)glewGetProcAddress((const GLubyte*)"glDepthRangex")) == NULL) || r; - r = ((glFogx = (PFNGLFOGXPROC)glewGetProcAddress((const GLubyte*)"glFogx")) == NULL) || r; - r = ((glFogxv = (PFNGLFOGXVPROC)glewGetProcAddress((const GLubyte*)"glFogxv")) == NULL) || r; - r = ((glFrustumf = (PFNGLFRUSTUMFPROC)glewGetProcAddress((const GLubyte*)"glFrustumf")) == NULL) || r; - r = ((glFrustumx = (PFNGLFRUSTUMXPROC)glewGetProcAddress((const GLubyte*)"glFrustumx")) == NULL) || r; - r = ((glLightModelx = (PFNGLLIGHTMODELXPROC)glewGetProcAddress((const GLubyte*)"glLightModelx")) == NULL) || r; - r = ((glLightModelxv = (PFNGLLIGHTMODELXVPROC)glewGetProcAddress((const GLubyte*)"glLightModelxv")) == NULL) || r; - r = ((glLightx = (PFNGLLIGHTXPROC)glewGetProcAddress((const GLubyte*)"glLightx")) == NULL) || r; - r = ((glLightxv = (PFNGLLIGHTXVPROC)glewGetProcAddress((const GLubyte*)"glLightxv")) == NULL) || r; - r = ((glLineWidthx = (PFNGLLINEWIDTHXPROC)glewGetProcAddress((const GLubyte*)"glLineWidthx")) == NULL) || r; - r = ((glLoadMatrixx = (PFNGLLOADMATRIXXPROC)glewGetProcAddress((const GLubyte*)"glLoadMatrixx")) == NULL) || r; - r = ((glMaterialx = (PFNGLMATERIALXPROC)glewGetProcAddress((const GLubyte*)"glMaterialx")) == NULL) || r; - r = ((glMaterialxv = (PFNGLMATERIALXVPROC)glewGetProcAddress((const GLubyte*)"glMaterialxv")) == NULL) || r; - r = ((glMultMatrixx = (PFNGLMULTMATRIXXPROC)glewGetProcAddress((const GLubyte*)"glMultMatrixx")) == NULL) || r; - r = ((glMultiTexCoord4x = (PFNGLMULTITEXCOORD4XPROC)glewGetProcAddress((const GLubyte*)"glMultiTexCoord4x")) == NULL) || r; - r = ((glNormal3x = (PFNGLNORMAL3XPROC)glewGetProcAddress((const GLubyte*)"glNormal3x")) == NULL) || r; - r = ((glOrthof = (PFNGLORTHOFPROC)glewGetProcAddress((const GLubyte*)"glOrthof")) == NULL) || r; - r = ((glOrthox = (PFNGLORTHOXPROC)glewGetProcAddress((const GLubyte*)"glOrthox")) == NULL) || r; - r = ((glPointSizex = (PFNGLPOINTSIZEXPROC)glewGetProcAddress((const GLubyte*)"glPointSizex")) == NULL) || r; - r = ((glPolygonOffsetx = (PFNGLPOLYGONOFFSETXPROC)glewGetProcAddress((const GLubyte*)"glPolygonOffsetx")) == NULL) || r; - r = ((glRotatex = (PFNGLROTATEXPROC)glewGetProcAddress((const GLubyte*)"glRotatex")) == NULL) || r; - r = ((glSampleCoveragex = (PFNGLSAMPLECOVERAGEXPROC)glewGetProcAddress((const GLubyte*)"glSampleCoveragex")) == NULL) || r; - r = ((glScalex = (PFNGLSCALEXPROC)glewGetProcAddress((const GLubyte*)"glScalex")) == NULL) || r; - r = ((glTexEnvx = (PFNGLTEXENVXPROC)glewGetProcAddress((const GLubyte*)"glTexEnvx")) == NULL) || r; - r = ((glTexEnvxv = (PFNGLTEXENVXVPROC)glewGetProcAddress((const GLubyte*)"glTexEnvxv")) == NULL) || r; - r = ((glTexParameterx = (PFNGLTEXPARAMETERXPROC)glewGetProcAddress((const GLubyte*)"glTexParameterx")) == NULL) || r; - r = ((glTranslatex = (PFNGLTRANSLATEXPROC)glewGetProcAddress((const GLubyte*)"glTranslatex")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_ES1_0_compatibility */ - -#ifdef GL_REGAL_ES1_1_compatibility - -static GLboolean _glewInit_GL_REGAL_ES1_1_compatibility (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glClipPlanef = (PFNGLCLIPPLANEFPROC)glewGetProcAddress((const GLubyte*)"glClipPlanef")) == NULL) || r; - r = ((glClipPlanex = (PFNGLCLIPPLANEXPROC)glewGetProcAddress((const GLubyte*)"glClipPlanex")) == NULL) || r; - r = ((glGetClipPlanef = (PFNGLGETCLIPPLANEFPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanef")) == NULL) || r; - r = ((glGetClipPlanex = (PFNGLGETCLIPPLANEXPROC)glewGetProcAddress((const GLubyte*)"glGetClipPlanex")) == NULL) || r; - r = ((glGetFixedv = (PFNGLGETFIXEDVPROC)glewGetProcAddress((const GLubyte*)"glGetFixedv")) == NULL) || r; - r = ((glGetLightxv = (PFNGLGETLIGHTXVPROC)glewGetProcAddress((const GLubyte*)"glGetLightxv")) == NULL) || r; - r = ((glGetMaterialxv = (PFNGLGETMATERIALXVPROC)glewGetProcAddress((const GLubyte*)"glGetMaterialxv")) == NULL) || r; - r = ((glGetTexEnvxv = (PFNGLGETTEXENVXVPROC)glewGetProcAddress((const GLubyte*)"glGetTexEnvxv")) == NULL) || r; - r = ((glGetTexParameterxv = (PFNGLGETTEXPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glGetTexParameterxv")) == NULL) || r; - r = ((glPointParameterx = (PFNGLPOINTPARAMETERXPROC)glewGetProcAddress((const GLubyte*)"glPointParameterx")) == NULL) || r; - r = ((glPointParameterxv = (PFNGLPOINTPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glPointParameterxv")) == NULL) || r; - r = ((glPointSizePointerOES = (PFNGLPOINTSIZEPOINTEROESPROC)glewGetProcAddress((const GLubyte*)"glPointSizePointerOES")) == NULL) || r; - r = ((glTexParameterxv = (PFNGLTEXPARAMETERXVPROC)glewGetProcAddress((const GLubyte*)"glTexParameterxv")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_ES1_1_compatibility */ - -#ifdef GL_REGAL_enable - -#endif /* GL_REGAL_enable */ - -#ifdef GL_REGAL_error_string - -static GLboolean _glewInit_GL_REGAL_error_string (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glErrorStringREGAL = (PFNGLERRORSTRINGREGALPROC)glewGetProcAddress((const GLubyte*)"glErrorStringREGAL")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_error_string */ - -#ifdef GL_REGAL_extension_query - -static GLboolean _glewInit_GL_REGAL_extension_query (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetExtensionREGAL = (PFNGLGETEXTENSIONREGALPROC)glewGetProcAddress((const GLubyte*)"glGetExtensionREGAL")) == NULL) || r; - r = ((glIsSupportedREGAL = (PFNGLISSUPPORTEDREGALPROC)glewGetProcAddress((const GLubyte*)"glIsSupportedREGAL")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_extension_query */ - -#ifdef GL_REGAL_log - -static GLboolean _glewInit_GL_REGAL_log (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glLogMessageCallbackREGAL = (PFNGLLOGMESSAGECALLBACKREGALPROC)glewGetProcAddress((const GLubyte*)"glLogMessageCallbackREGAL")) == NULL) || r; - - return r; -} - -#endif /* GL_REGAL_log */ - -#ifdef GL_REND_screen_coordinates - -#endif /* GL_REND_screen_coordinates */ - -#ifdef GL_S3_s3tc - -#endif /* GL_S3_s3tc */ - -#ifdef GL_SGIS_color_range - -#endif /* GL_SGIS_color_range */ - -#ifdef GL_SGIS_detail_texture - -static GLboolean _glewInit_GL_SGIS_detail_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glDetailTexFuncSGIS = (PFNGLDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glDetailTexFuncSGIS")) == NULL) || r; - r = ((glGetDetailTexFuncSGIS = (PFNGLGETDETAILTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetDetailTexFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_detail_texture */ - -#ifdef GL_SGIS_fog_function - -static GLboolean _glewInit_GL_SGIS_fog_function (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFogFuncSGIS = (PFNGLFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glFogFuncSGIS")) == NULL) || r; - r = ((glGetFogFuncSGIS = (PFNGLGETFOGFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetFogFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_fog_function */ - -#ifdef GL_SGIS_generate_mipmap - -#endif /* GL_SGIS_generate_mipmap */ - -#ifdef GL_SGIS_multisample - -static GLboolean _glewInit_GL_SGIS_multisample (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSampleMaskSGIS = (PFNGLSAMPLEMASKSGISPROC)glewGetProcAddress((const GLubyte*)"glSampleMaskSGIS")) == NULL) || r; - r = ((glSamplePatternSGIS = (PFNGLSAMPLEPATTERNSGISPROC)glewGetProcAddress((const GLubyte*)"glSamplePatternSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_multisample */ - -#ifdef GL_SGIS_pixel_texture - -#endif /* GL_SGIS_pixel_texture */ - -#ifdef GL_SGIS_point_line_texgen - -#endif /* GL_SGIS_point_line_texgen */ - -#ifdef GL_SGIS_sharpen_texture - -static GLboolean _glewInit_GL_SGIS_sharpen_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetSharpenTexFuncSGIS = (PFNGLGETSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetSharpenTexFuncSGIS")) == NULL) || r; - r = ((glSharpenTexFuncSGIS = (PFNGLSHARPENTEXFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glSharpenTexFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_sharpen_texture */ - -#ifdef GL_SGIS_texture4D - -static GLboolean _glewInit_GL_SGIS_texture4D (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTexImage4DSGIS = (PFNGLTEXIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexImage4DSGIS")) == NULL) || r; - r = ((glTexSubImage4DSGIS = (PFNGLTEXSUBIMAGE4DSGISPROC)glewGetProcAddress((const GLubyte*)"glTexSubImage4DSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_texture4D */ - -#ifdef GL_SGIS_texture_border_clamp - -#endif /* GL_SGIS_texture_border_clamp */ - -#ifdef GL_SGIS_texture_edge_clamp - -#endif /* GL_SGIS_texture_edge_clamp */ - -#ifdef GL_SGIS_texture_filter4 - -static GLboolean _glewInit_GL_SGIS_texture_filter4 (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGetTexFilterFuncSGIS = (PFNGLGETTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glGetTexFilterFuncSGIS")) == NULL) || r; - r = ((glTexFilterFuncSGIS = (PFNGLTEXFILTERFUNCSGISPROC)glewGetProcAddress((const GLubyte*)"glTexFilterFuncSGIS")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIS_texture_filter4 */ - -#ifdef GL_SGIS_texture_lod - -#endif /* GL_SGIS_texture_lod */ - -#ifdef GL_SGIS_texture_select - -#endif /* GL_SGIS_texture_select */ - -#ifdef GL_SGIX_async - -static GLboolean _glewInit_GL_SGIX_async (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAsyncMarkerSGIX = (PFNGLASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glAsyncMarkerSGIX")) == NULL) || r; - r = ((glDeleteAsyncMarkersSGIX = (PFNGLDELETEASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glDeleteAsyncMarkersSGIX")) == NULL) || r; - r = ((glFinishAsyncSGIX = (PFNGLFINISHASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glFinishAsyncSGIX")) == NULL) || r; - r = ((glGenAsyncMarkersSGIX = (PFNGLGENASYNCMARKERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glGenAsyncMarkersSGIX")) == NULL) || r; - r = ((glIsAsyncMarkerSGIX = (PFNGLISASYNCMARKERSGIXPROC)glewGetProcAddress((const GLubyte*)"glIsAsyncMarkerSGIX")) == NULL) || r; - r = ((glPollAsyncSGIX = (PFNGLPOLLASYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glPollAsyncSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_async */ - -#ifdef GL_SGIX_async_histogram - -#endif /* GL_SGIX_async_histogram */ - -#ifdef GL_SGIX_async_pixel - -#endif /* GL_SGIX_async_pixel */ - -#ifdef GL_SGIX_blend_alpha_minmax - -#endif /* GL_SGIX_blend_alpha_minmax */ - -#ifdef GL_SGIX_clipmap - -#endif /* GL_SGIX_clipmap */ - -#ifdef GL_SGIX_convolution_accuracy - -#endif /* GL_SGIX_convolution_accuracy */ - -#ifdef GL_SGIX_depth_texture - -#endif /* GL_SGIX_depth_texture */ - -#ifdef GL_SGIX_flush_raster - -static GLboolean _glewInit_GL_SGIX_flush_raster (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFlushRasterSGIX = (PFNGLFLUSHRASTERSGIXPROC)glewGetProcAddress((const GLubyte*)"glFlushRasterSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_flush_raster */ - -#ifdef GL_SGIX_fog_offset - -#endif /* GL_SGIX_fog_offset */ - -#ifdef GL_SGIX_fog_texture - -static GLboolean _glewInit_GL_SGIX_fog_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTextureFogSGIX = (PFNGLTEXTUREFOGSGIXPROC)glewGetProcAddress((const GLubyte*)"glTextureFogSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_fog_texture */ - -#ifdef GL_SGIX_fragment_specular_lighting - -static GLboolean _glewInit_GL_SGIX_fragment_specular_lighting (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFragmentColorMaterialSGIX = (PFNGLFRAGMENTCOLORMATERIALSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentColorMaterialSGIX")) == NULL) || r; - r = ((glFragmentLightModelfSGIX = (PFNGLFRAGMENTLIGHTMODELFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfSGIX")) == NULL) || r; - r = ((glFragmentLightModelfvSGIX = (PFNGLFRAGMENTLIGHTMODELFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelfvSGIX")) == NULL) || r; - r = ((glFragmentLightModeliSGIX = (PFNGLFRAGMENTLIGHTMODELISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModeliSGIX")) == NULL) || r; - r = ((glFragmentLightModelivSGIX = (PFNGLFRAGMENTLIGHTMODELIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightModelivSGIX")) == NULL) || r; - r = ((glFragmentLightfSGIX = (PFNGLFRAGMENTLIGHTFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfSGIX")) == NULL) || r; - r = ((glFragmentLightfvSGIX = (PFNGLFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightfvSGIX")) == NULL) || r; - r = ((glFragmentLightiSGIX = (PFNGLFRAGMENTLIGHTISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightiSGIX")) == NULL) || r; - r = ((glFragmentLightivSGIX = (PFNGLFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentLightivSGIX")) == NULL) || r; - r = ((glFragmentMaterialfSGIX = (PFNGLFRAGMENTMATERIALFSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfSGIX")) == NULL) || r; - r = ((glFragmentMaterialfvSGIX = (PFNGLFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialfvSGIX")) == NULL) || r; - r = ((glFragmentMaterialiSGIX = (PFNGLFRAGMENTMATERIALISGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialiSGIX")) == NULL) || r; - r = ((glFragmentMaterialivSGIX = (PFNGLFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glFragmentMaterialivSGIX")) == NULL) || r; - r = ((glGetFragmentLightfvSGIX = (PFNGLGETFRAGMENTLIGHTFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightfvSGIX")) == NULL) || r; - r = ((glGetFragmentLightivSGIX = (PFNGLGETFRAGMENTLIGHTIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentLightivSGIX")) == NULL) || r; - r = ((glGetFragmentMaterialfvSGIX = (PFNGLGETFRAGMENTMATERIALFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialfvSGIX")) == NULL) || r; - r = ((glGetFragmentMaterialivSGIX = (PFNGLGETFRAGMENTMATERIALIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glGetFragmentMaterialivSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_fragment_specular_lighting */ - -#ifdef GL_SGIX_framezoom - -static GLboolean _glewInit_GL_SGIX_framezoom (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFrameZoomSGIX = (PFNGLFRAMEZOOMSGIXPROC)glewGetProcAddress((const GLubyte*)"glFrameZoomSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_framezoom */ - -#ifdef GL_SGIX_interlace - -#endif /* GL_SGIX_interlace */ - -#ifdef GL_SGIX_ir_instrument1 - -#endif /* GL_SGIX_ir_instrument1 */ - -#ifdef GL_SGIX_list_priority - -#endif /* GL_SGIX_list_priority */ - -#ifdef GL_SGIX_pixel_texture - -static GLboolean _glewInit_GL_SGIX_pixel_texture (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glPixelTexGenSGIX = (PFNGLPIXELTEXGENSGIXPROC)glewGetProcAddress((const GLubyte*)"glPixelTexGenSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_pixel_texture */ - -#ifdef GL_SGIX_pixel_texture_bits - -#endif /* GL_SGIX_pixel_texture_bits */ - -#ifdef GL_SGIX_reference_plane - -static GLboolean _glewInit_GL_SGIX_reference_plane (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glReferencePlaneSGIX = (PFNGLREFERENCEPLANESGIXPROC)glewGetProcAddress((const GLubyte*)"glReferencePlaneSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_reference_plane */ - -#ifdef GL_SGIX_resample - -#endif /* GL_SGIX_resample */ - -#ifdef GL_SGIX_shadow - -#endif /* GL_SGIX_shadow */ - -#ifdef GL_SGIX_shadow_ambient - -#endif /* GL_SGIX_shadow_ambient */ - -#ifdef GL_SGIX_sprite - -static GLboolean _glewInit_GL_SGIX_sprite (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glSpriteParameterfSGIX = (PFNGLSPRITEPARAMETERFSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfSGIX")) == NULL) || r; - r = ((glSpriteParameterfvSGIX = (PFNGLSPRITEPARAMETERFVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterfvSGIX")) == NULL) || r; - r = ((glSpriteParameteriSGIX = (PFNGLSPRITEPARAMETERISGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameteriSGIX")) == NULL) || r; - r = ((glSpriteParameterivSGIX = (PFNGLSPRITEPARAMETERIVSGIXPROC)glewGetProcAddress((const GLubyte*)"glSpriteParameterivSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_sprite */ - -#ifdef GL_SGIX_tag_sample_buffer - -static GLboolean _glewInit_GL_SGIX_tag_sample_buffer (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glTagSampleBufferSGIX = (PFNGLTAGSAMPLEBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glTagSampleBufferSGIX")) == NULL) || r; - - return r; -} - -#endif /* GL_SGIX_tag_sample_buffer */ - -#ifdef GL_SGIX_texture_add_env - -#endif /* GL_SGIX_texture_add_env */ - -#ifdef GL_SGIX_texture_coordinate_clamp - -#endif /* GL_SGIX_texture_coordinate_clamp */ - -#ifdef GL_SGIX_texture_lod_bias - -#endif /* GL_SGIX_texture_lod_bias */ - -#ifdef GL_SGIX_texture_multi_buffer - -#endif /* GL_SGIX_texture_multi_buffer */ - -#ifdef GL_SGIX_texture_range - -#endif /* GL_SGIX_texture_range */ - -#ifdef GL_SGIX_texture_scale_bias - -#endif /* GL_SGIX_texture_scale_bias */ - -#ifdef GL_SGIX_vertex_preclip - -#endif /* GL_SGIX_vertex_preclip */ - -#ifdef GL_SGIX_vertex_preclip_hint - -#endif /* GL_SGIX_vertex_preclip_hint */ - -#ifdef GL_SGIX_ycrcb - -#endif /* GL_SGIX_ycrcb */ - -#ifdef GL_SGI_color_matrix - -#endif /* GL_SGI_color_matrix */ - -#ifdef GL_SGI_color_table - -static GLboolean _glewInit_GL_SGI_color_table (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColorTableParameterfvSGI = (PFNGLCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterfvSGI")) == NULL) || r; - r = ((glColorTableParameterivSGI = (PFNGLCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableParameterivSGI")) == NULL) || r; - r = ((glColorTableSGI = (PFNGLCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glColorTableSGI")) == NULL) || r; - r = ((glCopyColorTableSGI = (PFNGLCOPYCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glCopyColorTableSGI")) == NULL) || r; - r = ((glGetColorTableParameterfvSGI = (PFNGLGETCOLORTABLEPARAMETERFVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterfvSGI")) == NULL) || r; - r = ((glGetColorTableParameterivSGI = (PFNGLGETCOLORTABLEPARAMETERIVSGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableParameterivSGI")) == NULL) || r; - r = ((glGetColorTableSGI = (PFNGLGETCOLORTABLESGIPROC)glewGetProcAddress((const GLubyte*)"glGetColorTableSGI")) == NULL) || r; - - return r; -} - -#endif /* GL_SGI_color_table */ - -#ifdef GL_SGI_texture_color_table - -#endif /* GL_SGI_texture_color_table */ - -#ifdef GL_SUNX_constant_data - -static GLboolean _glewInit_GL_SUNX_constant_data (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glFinishTextureSUNX = (PFNGLFINISHTEXTURESUNXPROC)glewGetProcAddress((const GLubyte*)"glFinishTextureSUNX")) == NULL) || r; - - return r; -} - -#endif /* GL_SUNX_constant_data */ - -#ifdef GL_SUN_convolution_border_modes - -#endif /* GL_SUN_convolution_border_modes */ - -#ifdef GL_SUN_global_alpha - -static GLboolean _glewInit_GL_SUN_global_alpha (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glGlobalAlphaFactorbSUN = (PFNGLGLOBALALPHAFACTORBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorbSUN")) == NULL) || r; - r = ((glGlobalAlphaFactordSUN = (PFNGLGLOBALALPHAFACTORDSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactordSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorfSUN = (PFNGLGLOBALALPHAFACTORFSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorfSUN")) == NULL) || r; - r = ((glGlobalAlphaFactoriSUN = (PFNGLGLOBALALPHAFACTORISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoriSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorsSUN = (PFNGLGLOBALALPHAFACTORSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorsSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorubSUN = (PFNGLGLOBALALPHAFACTORUBSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorubSUN")) == NULL) || r; - r = ((glGlobalAlphaFactoruiSUN = (PFNGLGLOBALALPHAFACTORUISUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactoruiSUN")) == NULL) || r; - r = ((glGlobalAlphaFactorusSUN = (PFNGLGLOBALALPHAFACTORUSSUNPROC)glewGetProcAddress((const GLubyte*)"glGlobalAlphaFactorusSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_global_alpha */ - -#ifdef GL_SUN_mesh_array - -#endif /* GL_SUN_mesh_array */ - -#ifdef GL_SUN_read_video_pixels - -static GLboolean _glewInit_GL_SUN_read_video_pixels (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glReadVideoPixelsSUN = (PFNGLREADVIDEOPIXELSSUNPROC)glewGetProcAddress((const GLubyte*)"glReadVideoPixelsSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_read_video_pixels */ - -#ifdef GL_SUN_slice_accum - -#endif /* GL_SUN_slice_accum */ - -#ifdef GL_SUN_triangle_list - -static GLboolean _glewInit_GL_SUN_triangle_list (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glReplacementCodePointerSUN = (PFNGLREPLACEMENTCODEPOINTERSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodePointerSUN")) == NULL) || r; - r = ((glReplacementCodeubSUN = (PFNGLREPLACEMENTCODEUBSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubSUN")) == NULL) || r; - r = ((glReplacementCodeubvSUN = (PFNGLREPLACEMENTCODEUBVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeubvSUN")) == NULL) || r; - r = ((glReplacementCodeuiSUN = (PFNGLREPLACEMENTCODEUISUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiSUN")) == NULL) || r; - r = ((glReplacementCodeuivSUN = (PFNGLREPLACEMENTCODEUIVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuivSUN")) == NULL) || r; - r = ((glReplacementCodeusSUN = (PFNGLREPLACEMENTCODEUSSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusSUN")) == NULL) || r; - r = ((glReplacementCodeusvSUN = (PFNGLREPLACEMENTCODEUSVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeusvSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_triangle_list */ - -#ifdef GL_SUN_vertex - -static GLboolean _glewInit_GL_SUN_vertex (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glColor3fVertex3fSUN = (PFNGLCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fSUN")) == NULL) || r; - r = ((glColor3fVertex3fvSUN = (PFNGLCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor3fVertex3fvSUN")) == NULL) || r; - r = ((glColor4fNormal3fVertex3fSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glColor4fNormal3fVertex3fvSUN = (PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glColor4ubVertex2fSUN = (PFNGLCOLOR4UBVERTEX2FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fSUN")) == NULL) || r; - r = ((glColor4ubVertex2fvSUN = (PFNGLCOLOR4UBVERTEX2FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex2fvSUN")) == NULL) || r; - r = ((glColor4ubVertex3fSUN = (PFNGLCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fSUN")) == NULL) || r; - r = ((glColor4ubVertex3fvSUN = (PFNGLCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glColor4ubVertex3fvSUN")) == NULL) || r; - r = ((glNormal3fVertex3fSUN = (PFNGLNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fSUN")) == NULL) || r; - r = ((glNormal3fVertex3fvSUN = (PFNGLNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4ubVertex3fSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiColor4ubVertex3fvSUN = (PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiColor4ubVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fVertex3fSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiTexCoord2fVertex3fvSUN = (PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiTexCoord2fVertex3fvSUN")) == NULL) || r; - r = ((glReplacementCodeuiVertex3fSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fSUN")) == NULL) || r; - r = ((glReplacementCodeuiVertex3fvSUN = (PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glReplacementCodeuiVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fColor3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fColor3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor3fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fColor4fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fColor4fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fColor4ubVertex3fSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fColor4ubVertex3fvSUN = (PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fColor4ubVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fNormal3fVertex3fSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fNormal3fVertex3fvSUN = (PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fNormal3fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord2fVertex3fSUN = (PFNGLTEXCOORD2FVERTEX3FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fSUN")) == NULL) || r; - r = ((glTexCoord2fVertex3fvSUN = (PFNGLTEXCOORD2FVERTEX3FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord2fVertex3fvSUN")) == NULL) || r; - r = ((glTexCoord4fColor4fNormal3fVertex4fSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fSUN")) == NULL) || r; - r = ((glTexCoord4fColor4fNormal3fVertex4fvSUN = (PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fColor4fNormal3fVertex4fvSUN")) == NULL) || r; - r = ((glTexCoord4fVertex4fSUN = (PFNGLTEXCOORD4FVERTEX4FSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fSUN")) == NULL) || r; - r = ((glTexCoord4fVertex4fvSUN = (PFNGLTEXCOORD4FVERTEX4FVSUNPROC)glewGetProcAddress((const GLubyte*)"glTexCoord4fVertex4fvSUN")) == NULL) || r; - - return r; -} - -#endif /* GL_SUN_vertex */ - -#ifdef GL_WIN_phong_shading - -#endif /* GL_WIN_phong_shading */ - -#ifdef GL_WIN_specular_fog - -#endif /* GL_WIN_specular_fog */ - -#ifdef GL_WIN_swap_hint - -static GLboolean _glewInit_GL_WIN_swap_hint (GLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glAddSwapHintRectWIN = (PFNGLADDSWAPHINTRECTWINPROC)glewGetProcAddress((const GLubyte*)"glAddSwapHintRectWIN")) == NULL) || r; - - return r; -} - -#endif /* GL_WIN_swap_hint */ - -/* ------------------------------------------------------------------------- */ - -GLboolean GLEWAPIENTRY glewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - start = (const GLubyte*)glGetString(GL_EXTENSIONS); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -/* ------------------------------------------------------------------------- */ - -#ifndef GLEW_MX -static -#endif -GLenum GLEWAPIENTRY glewContextInit (GLEW_CONTEXT_ARG_DEF_LIST) -{ - const GLubyte* s; - GLuint dot; - GLint major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* query opengl version */ - s = glGetString(GL_VERSION); - dot = _glewStrCLen(s, '.'); - if (dot == 0) - return GLEW_ERROR_NO_GL_VERSION; - - major = s[dot-1]-'0'; - minor = s[dot+1]-'0'; - - if (minor < 0 || minor > 9) - minor = 0; - if (major<0 || major>9) - return GLEW_ERROR_NO_GL_VERSION; - - - if (major == 1 && minor == 0) - { - return GLEW_ERROR_GL_VERSION_10_ONLY; - } - else - { - CONST_CAST(GLEW_VERSION_4_4) = ( major > 4 ) || ( major == 4 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_3) = GLEW_VERSION_4_4 == GL_TRUE || ( major == 4 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_2) = GLEW_VERSION_4_3 == GL_TRUE || ( major == 4 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_1) = GLEW_VERSION_4_2 == GL_TRUE || ( major == 4 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_4_0) = GLEW_VERSION_4_1 == GL_TRUE || ( major == 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_3) = GLEW_VERSION_4_0 == GL_TRUE || ( major == 3 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_2) = GLEW_VERSION_3_3 == GL_TRUE || ( major == 3 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_1) = GLEW_VERSION_3_2 == GL_TRUE || ( major == 3 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_3_0) = GLEW_VERSION_3_1 == GL_TRUE || ( major == 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_1) = GLEW_VERSION_3_0 == GL_TRUE || ( major == 2 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_2_0) = GLEW_VERSION_2_1 == GL_TRUE || ( major == 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_5) = GLEW_VERSION_2_0 == GL_TRUE || ( major == 1 && minor >= 5 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_4) = GLEW_VERSION_1_5 == GL_TRUE || ( major == 1 && minor >= 4 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_3) = GLEW_VERSION_1_4 == GL_TRUE || ( major == 1 && minor >= 3 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2_1) = GLEW_VERSION_1_3 == GL_TRUE ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_2) = GLEW_VERSION_1_2_1 == GL_TRUE || ( major == 1 && minor >= 2 ) ? GL_TRUE : GL_FALSE; - CONST_CAST(GLEW_VERSION_1_1) = GLEW_VERSION_1_2 == GL_TRUE || ( major == 1 && minor >= 1 ) ? GL_TRUE : GL_FALSE; - } - - /* query opengl extensions string */ - extStart = glGetString(GL_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte*)""; - extEnd = extStart + _glewStrLen(extStart); - - /* initialize extensions */ -#ifdef GL_VERSION_1_2 - if (glewExperimental || GLEW_VERSION_1_2) CONST_CAST(GLEW_VERSION_1_2) = !_glewInit_GL_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_2 */ -#ifdef GL_VERSION_1_2_1 -#endif /* GL_VERSION_1_2_1 */ -#ifdef GL_VERSION_1_3 - if (glewExperimental || GLEW_VERSION_1_3) CONST_CAST(GLEW_VERSION_1_3) = !_glewInit_GL_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_3 */ -#ifdef GL_VERSION_1_4 - if (glewExperimental || GLEW_VERSION_1_4) CONST_CAST(GLEW_VERSION_1_4) = !_glewInit_GL_VERSION_1_4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_4 */ -#ifdef GL_VERSION_1_5 - if (glewExperimental || GLEW_VERSION_1_5) CONST_CAST(GLEW_VERSION_1_5) = !_glewInit_GL_VERSION_1_5(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_1_5 */ -#ifdef GL_VERSION_2_0 - if (glewExperimental || GLEW_VERSION_2_0) CONST_CAST(GLEW_VERSION_2_0) = !_glewInit_GL_VERSION_2_0(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_2_0 */ -#ifdef GL_VERSION_2_1 - if (glewExperimental || GLEW_VERSION_2_1) CONST_CAST(GLEW_VERSION_2_1) = !_glewInit_GL_VERSION_2_1(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_2_1 */ -#ifdef GL_VERSION_3_0 - if (glewExperimental || GLEW_VERSION_3_0) CONST_CAST(GLEW_VERSION_3_0) = !_glewInit_GL_VERSION_3_0(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_0 */ -#ifdef GL_VERSION_3_1 - if (glewExperimental || GLEW_VERSION_3_1) CONST_CAST(GLEW_VERSION_3_1) = !_glewInit_GL_VERSION_3_1(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_1 */ -#ifdef GL_VERSION_3_2 - if (glewExperimental || GLEW_VERSION_3_2) CONST_CAST(GLEW_VERSION_3_2) = !_glewInit_GL_VERSION_3_2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_2 */ -#ifdef GL_VERSION_3_3 - if (glewExperimental || GLEW_VERSION_3_3) CONST_CAST(GLEW_VERSION_3_3) = !_glewInit_GL_VERSION_3_3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_3_3 */ -#ifdef GL_VERSION_4_0 - if (glewExperimental || GLEW_VERSION_4_0) CONST_CAST(GLEW_VERSION_4_0) = !_glewInit_GL_VERSION_4_0(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_VERSION_4_0 */ -#ifdef GL_VERSION_4_1 -#endif /* GL_VERSION_4_1 */ -#ifdef GL_VERSION_4_2 -#endif /* GL_VERSION_4_2 */ -#ifdef GL_VERSION_4_3 -#endif /* GL_VERSION_4_3 */ -#ifdef GL_VERSION_4_4 -#endif /* GL_VERSION_4_4 */ -#ifdef GL_3DFX_multisample - CONST_CAST(GLEW_3DFX_multisample) = _glewSearchExtension("GL_3DFX_multisample", extStart, extEnd); -#endif /* GL_3DFX_multisample */ -#ifdef GL_3DFX_tbuffer - CONST_CAST(GLEW_3DFX_tbuffer) = _glewSearchExtension("GL_3DFX_tbuffer", extStart, extEnd); - if (glewExperimental || GLEW_3DFX_tbuffer) CONST_CAST(GLEW_3DFX_tbuffer) = !_glewInit_GL_3DFX_tbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_3DFX_tbuffer */ -#ifdef GL_3DFX_texture_compression_FXT1 - CONST_CAST(GLEW_3DFX_texture_compression_FXT1) = _glewSearchExtension("GL_3DFX_texture_compression_FXT1", extStart, extEnd); -#endif /* GL_3DFX_texture_compression_FXT1 */ -#ifdef GL_AMD_blend_minmax_factor - CONST_CAST(GLEW_AMD_blend_minmax_factor) = _glewSearchExtension("GL_AMD_blend_minmax_factor", extStart, extEnd); -#endif /* GL_AMD_blend_minmax_factor */ -#ifdef GL_AMD_conservative_depth - CONST_CAST(GLEW_AMD_conservative_depth) = _glewSearchExtension("GL_AMD_conservative_depth", extStart, extEnd); -#endif /* GL_AMD_conservative_depth */ -#ifdef GL_AMD_debug_output - CONST_CAST(GLEW_AMD_debug_output) = _glewSearchExtension("GL_AMD_debug_output", extStart, extEnd); - if (glewExperimental || GLEW_AMD_debug_output) CONST_CAST(GLEW_AMD_debug_output) = !_glewInit_GL_AMD_debug_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_debug_output */ -#ifdef GL_AMD_depth_clamp_separate - CONST_CAST(GLEW_AMD_depth_clamp_separate) = _glewSearchExtension("GL_AMD_depth_clamp_separate", extStart, extEnd); -#endif /* GL_AMD_depth_clamp_separate */ -#ifdef GL_AMD_draw_buffers_blend - CONST_CAST(GLEW_AMD_draw_buffers_blend) = _glewSearchExtension("GL_AMD_draw_buffers_blend", extStart, extEnd); - if (glewExperimental || GLEW_AMD_draw_buffers_blend) CONST_CAST(GLEW_AMD_draw_buffers_blend) = !_glewInit_GL_AMD_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_draw_buffers_blend */ -#ifdef GL_AMD_interleaved_elements - CONST_CAST(GLEW_AMD_interleaved_elements) = _glewSearchExtension("GL_AMD_interleaved_elements", extStart, extEnd); - if (glewExperimental || GLEW_AMD_interleaved_elements) CONST_CAST(GLEW_AMD_interleaved_elements) = !_glewInit_GL_AMD_interleaved_elements(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_interleaved_elements */ -#ifdef GL_AMD_multi_draw_indirect - CONST_CAST(GLEW_AMD_multi_draw_indirect) = _glewSearchExtension("GL_AMD_multi_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_AMD_multi_draw_indirect) CONST_CAST(GLEW_AMD_multi_draw_indirect) = !_glewInit_GL_AMD_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_multi_draw_indirect */ -#ifdef GL_AMD_name_gen_delete - CONST_CAST(GLEW_AMD_name_gen_delete) = _glewSearchExtension("GL_AMD_name_gen_delete", extStart, extEnd); - if (glewExperimental || GLEW_AMD_name_gen_delete) CONST_CAST(GLEW_AMD_name_gen_delete) = !_glewInit_GL_AMD_name_gen_delete(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_name_gen_delete */ -#ifdef GL_AMD_performance_monitor - CONST_CAST(GLEW_AMD_performance_monitor) = _glewSearchExtension("GL_AMD_performance_monitor", extStart, extEnd); - if (glewExperimental || GLEW_AMD_performance_monitor) CONST_CAST(GLEW_AMD_performance_monitor) = !_glewInit_GL_AMD_performance_monitor(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_performance_monitor */ -#ifdef GL_AMD_pinned_memory - CONST_CAST(GLEW_AMD_pinned_memory) = _glewSearchExtension("GL_AMD_pinned_memory", extStart, extEnd); -#endif /* GL_AMD_pinned_memory */ -#ifdef GL_AMD_query_buffer_object - CONST_CAST(GLEW_AMD_query_buffer_object) = _glewSearchExtension("GL_AMD_query_buffer_object", extStart, extEnd); -#endif /* GL_AMD_query_buffer_object */ -#ifdef GL_AMD_sample_positions - CONST_CAST(GLEW_AMD_sample_positions) = _glewSearchExtension("GL_AMD_sample_positions", extStart, extEnd); - if (glewExperimental || GLEW_AMD_sample_positions) CONST_CAST(GLEW_AMD_sample_positions) = !_glewInit_GL_AMD_sample_positions(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_sample_positions */ -#ifdef GL_AMD_seamless_cubemap_per_texture - CONST_CAST(GLEW_AMD_seamless_cubemap_per_texture) = _glewSearchExtension("GL_AMD_seamless_cubemap_per_texture", extStart, extEnd); -#endif /* GL_AMD_seamless_cubemap_per_texture */ -#ifdef GL_AMD_shader_stencil_export - CONST_CAST(GLEW_AMD_shader_stencil_export) = _glewSearchExtension("GL_AMD_shader_stencil_export", extStart, extEnd); -#endif /* GL_AMD_shader_stencil_export */ -#ifdef GL_AMD_shader_trinary_minmax - CONST_CAST(GLEW_AMD_shader_trinary_minmax) = _glewSearchExtension("GL_AMD_shader_trinary_minmax", extStart, extEnd); -#endif /* GL_AMD_shader_trinary_minmax */ -#ifdef GL_AMD_sparse_texture - CONST_CAST(GLEW_AMD_sparse_texture) = _glewSearchExtension("GL_AMD_sparse_texture", extStart, extEnd); - if (glewExperimental || GLEW_AMD_sparse_texture) CONST_CAST(GLEW_AMD_sparse_texture) = !_glewInit_GL_AMD_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_sparse_texture */ -#ifdef GL_AMD_stencil_operation_extended - CONST_CAST(GLEW_AMD_stencil_operation_extended) = _glewSearchExtension("GL_AMD_stencil_operation_extended", extStart, extEnd); - if (glewExperimental || GLEW_AMD_stencil_operation_extended) CONST_CAST(GLEW_AMD_stencil_operation_extended) = !_glewInit_GL_AMD_stencil_operation_extended(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_stencil_operation_extended */ -#ifdef GL_AMD_texture_texture4 - CONST_CAST(GLEW_AMD_texture_texture4) = _glewSearchExtension("GL_AMD_texture_texture4", extStart, extEnd); -#endif /* GL_AMD_texture_texture4 */ -#ifdef GL_AMD_transform_feedback3_lines_triangles - CONST_CAST(GLEW_AMD_transform_feedback3_lines_triangles) = _glewSearchExtension("GL_AMD_transform_feedback3_lines_triangles", extStart, extEnd); -#endif /* GL_AMD_transform_feedback3_lines_triangles */ -#ifdef GL_AMD_vertex_shader_layer - CONST_CAST(GLEW_AMD_vertex_shader_layer) = _glewSearchExtension("GL_AMD_vertex_shader_layer", extStart, extEnd); -#endif /* GL_AMD_vertex_shader_layer */ -#ifdef GL_AMD_vertex_shader_tessellator - CONST_CAST(GLEW_AMD_vertex_shader_tessellator) = _glewSearchExtension("GL_AMD_vertex_shader_tessellator", extStart, extEnd); - if (glewExperimental || GLEW_AMD_vertex_shader_tessellator) CONST_CAST(GLEW_AMD_vertex_shader_tessellator) = !_glewInit_GL_AMD_vertex_shader_tessellator(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_AMD_vertex_shader_tessellator */ -#ifdef GL_AMD_vertex_shader_viewport_index - CONST_CAST(GLEW_AMD_vertex_shader_viewport_index) = _glewSearchExtension("GL_AMD_vertex_shader_viewport_index", extStart, extEnd); -#endif /* GL_AMD_vertex_shader_viewport_index */ -#ifdef GL_ANGLE_depth_texture - CONST_CAST(GLEW_ANGLE_depth_texture) = _glewSearchExtension("GL_ANGLE_depth_texture", extStart, extEnd); -#endif /* GL_ANGLE_depth_texture */ -#ifdef GL_ANGLE_framebuffer_blit - CONST_CAST(GLEW_ANGLE_framebuffer_blit) = _glewSearchExtension("GL_ANGLE_framebuffer_blit", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_framebuffer_blit) CONST_CAST(GLEW_ANGLE_framebuffer_blit) = !_glewInit_GL_ANGLE_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_framebuffer_blit */ -#ifdef GL_ANGLE_framebuffer_multisample - CONST_CAST(GLEW_ANGLE_framebuffer_multisample) = _glewSearchExtension("GL_ANGLE_framebuffer_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_framebuffer_multisample) CONST_CAST(GLEW_ANGLE_framebuffer_multisample) = !_glewInit_GL_ANGLE_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_framebuffer_multisample */ -#ifdef GL_ANGLE_instanced_arrays - CONST_CAST(GLEW_ANGLE_instanced_arrays) = _glewSearchExtension("GL_ANGLE_instanced_arrays", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_instanced_arrays) CONST_CAST(GLEW_ANGLE_instanced_arrays) = !_glewInit_GL_ANGLE_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_instanced_arrays */ -#ifdef GL_ANGLE_pack_reverse_row_order - CONST_CAST(GLEW_ANGLE_pack_reverse_row_order) = _glewSearchExtension("GL_ANGLE_pack_reverse_row_order", extStart, extEnd); -#endif /* GL_ANGLE_pack_reverse_row_order */ -#ifdef GL_ANGLE_program_binary - CONST_CAST(GLEW_ANGLE_program_binary) = _glewSearchExtension("GL_ANGLE_program_binary", extStart, extEnd); -#endif /* GL_ANGLE_program_binary */ -#ifdef GL_ANGLE_texture_compression_dxt1 - CONST_CAST(GLEW_ANGLE_texture_compression_dxt1) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt1", extStart, extEnd); -#endif /* GL_ANGLE_texture_compression_dxt1 */ -#ifdef GL_ANGLE_texture_compression_dxt3 - CONST_CAST(GLEW_ANGLE_texture_compression_dxt3) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt3", extStart, extEnd); -#endif /* GL_ANGLE_texture_compression_dxt3 */ -#ifdef GL_ANGLE_texture_compression_dxt5 - CONST_CAST(GLEW_ANGLE_texture_compression_dxt5) = _glewSearchExtension("GL_ANGLE_texture_compression_dxt5", extStart, extEnd); -#endif /* GL_ANGLE_texture_compression_dxt5 */ -#ifdef GL_ANGLE_texture_usage - CONST_CAST(GLEW_ANGLE_texture_usage) = _glewSearchExtension("GL_ANGLE_texture_usage", extStart, extEnd); -#endif /* GL_ANGLE_texture_usage */ -#ifdef GL_ANGLE_timer_query - CONST_CAST(GLEW_ANGLE_timer_query) = _glewSearchExtension("GL_ANGLE_timer_query", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_timer_query) CONST_CAST(GLEW_ANGLE_timer_query) = !_glewInit_GL_ANGLE_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_timer_query */ -#ifdef GL_ANGLE_translated_shader_source - CONST_CAST(GLEW_ANGLE_translated_shader_source) = _glewSearchExtension("GL_ANGLE_translated_shader_source", extStart, extEnd); - if (glewExperimental || GLEW_ANGLE_translated_shader_source) CONST_CAST(GLEW_ANGLE_translated_shader_source) = !_glewInit_GL_ANGLE_translated_shader_source(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ANGLE_translated_shader_source */ -#ifdef GL_APPLE_aux_depth_stencil - CONST_CAST(GLEW_APPLE_aux_depth_stencil) = _glewSearchExtension("GL_APPLE_aux_depth_stencil", extStart, extEnd); -#endif /* GL_APPLE_aux_depth_stencil */ -#ifdef GL_APPLE_client_storage - CONST_CAST(GLEW_APPLE_client_storage) = _glewSearchExtension("GL_APPLE_client_storage", extStart, extEnd); -#endif /* GL_APPLE_client_storage */ -#ifdef GL_APPLE_element_array - CONST_CAST(GLEW_APPLE_element_array) = _glewSearchExtension("GL_APPLE_element_array", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_element_array) CONST_CAST(GLEW_APPLE_element_array) = !_glewInit_GL_APPLE_element_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_element_array */ -#ifdef GL_APPLE_fence - CONST_CAST(GLEW_APPLE_fence) = _glewSearchExtension("GL_APPLE_fence", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_fence) CONST_CAST(GLEW_APPLE_fence) = !_glewInit_GL_APPLE_fence(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_fence */ -#ifdef GL_APPLE_float_pixels - CONST_CAST(GLEW_APPLE_float_pixels) = _glewSearchExtension("GL_APPLE_float_pixels", extStart, extEnd); -#endif /* GL_APPLE_float_pixels */ -#ifdef GL_APPLE_flush_buffer_range - CONST_CAST(GLEW_APPLE_flush_buffer_range) = _glewSearchExtension("GL_APPLE_flush_buffer_range", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_flush_buffer_range) CONST_CAST(GLEW_APPLE_flush_buffer_range) = !_glewInit_GL_APPLE_flush_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_flush_buffer_range */ -#ifdef GL_APPLE_object_purgeable - CONST_CAST(GLEW_APPLE_object_purgeable) = _glewSearchExtension("GL_APPLE_object_purgeable", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_object_purgeable) CONST_CAST(GLEW_APPLE_object_purgeable) = !_glewInit_GL_APPLE_object_purgeable(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_object_purgeable */ -#ifdef GL_APPLE_pixel_buffer - CONST_CAST(GLEW_APPLE_pixel_buffer) = _glewSearchExtension("GL_APPLE_pixel_buffer", extStart, extEnd); -#endif /* GL_APPLE_pixel_buffer */ -#ifdef GL_APPLE_rgb_422 - CONST_CAST(GLEW_APPLE_rgb_422) = _glewSearchExtension("GL_APPLE_rgb_422", extStart, extEnd); -#endif /* GL_APPLE_rgb_422 */ -#ifdef GL_APPLE_row_bytes - CONST_CAST(GLEW_APPLE_row_bytes) = _glewSearchExtension("GL_APPLE_row_bytes", extStart, extEnd); -#endif /* GL_APPLE_row_bytes */ -#ifdef GL_APPLE_specular_vector - CONST_CAST(GLEW_APPLE_specular_vector) = _glewSearchExtension("GL_APPLE_specular_vector", extStart, extEnd); -#endif /* GL_APPLE_specular_vector */ -#ifdef GL_APPLE_texture_range - CONST_CAST(GLEW_APPLE_texture_range) = _glewSearchExtension("GL_APPLE_texture_range", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_texture_range) CONST_CAST(GLEW_APPLE_texture_range) = !_glewInit_GL_APPLE_texture_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_texture_range */ -#ifdef GL_APPLE_transform_hint - CONST_CAST(GLEW_APPLE_transform_hint) = _glewSearchExtension("GL_APPLE_transform_hint", extStart, extEnd); -#endif /* GL_APPLE_transform_hint */ -#ifdef GL_APPLE_vertex_array_object - CONST_CAST(GLEW_APPLE_vertex_array_object) = _glewSearchExtension("GL_APPLE_vertex_array_object", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_vertex_array_object) CONST_CAST(GLEW_APPLE_vertex_array_object) = !_glewInit_GL_APPLE_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_vertex_array_object */ -#ifdef GL_APPLE_vertex_array_range - CONST_CAST(GLEW_APPLE_vertex_array_range) = _glewSearchExtension("GL_APPLE_vertex_array_range", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_vertex_array_range) CONST_CAST(GLEW_APPLE_vertex_array_range) = !_glewInit_GL_APPLE_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_vertex_array_range */ -#ifdef GL_APPLE_vertex_program_evaluators - CONST_CAST(GLEW_APPLE_vertex_program_evaluators) = _glewSearchExtension("GL_APPLE_vertex_program_evaluators", extStart, extEnd); - if (glewExperimental || GLEW_APPLE_vertex_program_evaluators) CONST_CAST(GLEW_APPLE_vertex_program_evaluators) = !_glewInit_GL_APPLE_vertex_program_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_APPLE_vertex_program_evaluators */ -#ifdef GL_APPLE_ycbcr_422 - CONST_CAST(GLEW_APPLE_ycbcr_422) = _glewSearchExtension("GL_APPLE_ycbcr_422", extStart, extEnd); -#endif /* GL_APPLE_ycbcr_422 */ -#ifdef GL_ARB_ES2_compatibility - CONST_CAST(GLEW_ARB_ES2_compatibility) = _glewSearchExtension("GL_ARB_ES2_compatibility", extStart, extEnd); - if (glewExperimental || GLEW_ARB_ES2_compatibility) CONST_CAST(GLEW_ARB_ES2_compatibility) = !_glewInit_GL_ARB_ES2_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_ES2_compatibility */ -#ifdef GL_ARB_ES3_compatibility - CONST_CAST(GLEW_ARB_ES3_compatibility) = _glewSearchExtension("GL_ARB_ES3_compatibility", extStart, extEnd); -#endif /* GL_ARB_ES3_compatibility */ -#ifdef GL_ARB_arrays_of_arrays - CONST_CAST(GLEW_ARB_arrays_of_arrays) = _glewSearchExtension("GL_ARB_arrays_of_arrays", extStart, extEnd); -#endif /* GL_ARB_arrays_of_arrays */ -#ifdef GL_ARB_base_instance - CONST_CAST(GLEW_ARB_base_instance) = _glewSearchExtension("GL_ARB_base_instance", extStart, extEnd); - if (glewExperimental || GLEW_ARB_base_instance) CONST_CAST(GLEW_ARB_base_instance) = !_glewInit_GL_ARB_base_instance(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_base_instance */ -#ifdef GL_ARB_bindless_texture - CONST_CAST(GLEW_ARB_bindless_texture) = _glewSearchExtension("GL_ARB_bindless_texture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_bindless_texture) CONST_CAST(GLEW_ARB_bindless_texture) = !_glewInit_GL_ARB_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_bindless_texture */ -#ifdef GL_ARB_blend_func_extended - CONST_CAST(GLEW_ARB_blend_func_extended) = _glewSearchExtension("GL_ARB_blend_func_extended", extStart, extEnd); - if (glewExperimental || GLEW_ARB_blend_func_extended) CONST_CAST(GLEW_ARB_blend_func_extended) = !_glewInit_GL_ARB_blend_func_extended(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_blend_func_extended */ -#ifdef GL_ARB_buffer_storage - CONST_CAST(GLEW_ARB_buffer_storage) = _glewSearchExtension("GL_ARB_buffer_storage", extStart, extEnd); - if (glewExperimental || GLEW_ARB_buffer_storage) CONST_CAST(GLEW_ARB_buffer_storage) = !_glewInit_GL_ARB_buffer_storage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_buffer_storage */ -#ifdef GL_ARB_cl_event - CONST_CAST(GLEW_ARB_cl_event) = _glewSearchExtension("GL_ARB_cl_event", extStart, extEnd); - if (glewExperimental || GLEW_ARB_cl_event) CONST_CAST(GLEW_ARB_cl_event) = !_glewInit_GL_ARB_cl_event(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_cl_event */ -#ifdef GL_ARB_clear_buffer_object - CONST_CAST(GLEW_ARB_clear_buffer_object) = _glewSearchExtension("GL_ARB_clear_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_clear_buffer_object) CONST_CAST(GLEW_ARB_clear_buffer_object) = !_glewInit_GL_ARB_clear_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_clear_buffer_object */ -#ifdef GL_ARB_clear_texture - CONST_CAST(GLEW_ARB_clear_texture) = _glewSearchExtension("GL_ARB_clear_texture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_clear_texture) CONST_CAST(GLEW_ARB_clear_texture) = !_glewInit_GL_ARB_clear_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_clear_texture */ -#ifdef GL_ARB_color_buffer_float - CONST_CAST(GLEW_ARB_color_buffer_float) = _glewSearchExtension("GL_ARB_color_buffer_float", extStart, extEnd); - if (glewExperimental || GLEW_ARB_color_buffer_float) CONST_CAST(GLEW_ARB_color_buffer_float) = !_glewInit_GL_ARB_color_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_color_buffer_float */ -#ifdef GL_ARB_compatibility - CONST_CAST(GLEW_ARB_compatibility) = _glewSearchExtension("GL_ARB_compatibility", extStart, extEnd); -#endif /* GL_ARB_compatibility */ -#ifdef GL_ARB_compressed_texture_pixel_storage - CONST_CAST(GLEW_ARB_compressed_texture_pixel_storage) = _glewSearchExtension("GL_ARB_compressed_texture_pixel_storage", extStart, extEnd); -#endif /* GL_ARB_compressed_texture_pixel_storage */ -#ifdef GL_ARB_compute_shader - CONST_CAST(GLEW_ARB_compute_shader) = _glewSearchExtension("GL_ARB_compute_shader", extStart, extEnd); - if (glewExperimental || GLEW_ARB_compute_shader) CONST_CAST(GLEW_ARB_compute_shader) = !_glewInit_GL_ARB_compute_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_compute_shader */ -#ifdef GL_ARB_compute_variable_group_size - CONST_CAST(GLEW_ARB_compute_variable_group_size) = _glewSearchExtension("GL_ARB_compute_variable_group_size", extStart, extEnd); - if (glewExperimental || GLEW_ARB_compute_variable_group_size) CONST_CAST(GLEW_ARB_compute_variable_group_size) = !_glewInit_GL_ARB_compute_variable_group_size(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_compute_variable_group_size */ -#ifdef GL_ARB_conservative_depth - CONST_CAST(GLEW_ARB_conservative_depth) = _glewSearchExtension("GL_ARB_conservative_depth", extStart, extEnd); -#endif /* GL_ARB_conservative_depth */ -#ifdef GL_ARB_copy_buffer - CONST_CAST(GLEW_ARB_copy_buffer) = _glewSearchExtension("GL_ARB_copy_buffer", extStart, extEnd); - if (glewExperimental || GLEW_ARB_copy_buffer) CONST_CAST(GLEW_ARB_copy_buffer) = !_glewInit_GL_ARB_copy_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_copy_buffer */ -#ifdef GL_ARB_copy_image - CONST_CAST(GLEW_ARB_copy_image) = _glewSearchExtension("GL_ARB_copy_image", extStart, extEnd); - if (glewExperimental || GLEW_ARB_copy_image) CONST_CAST(GLEW_ARB_copy_image) = !_glewInit_GL_ARB_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_copy_image */ -#ifdef GL_ARB_debug_output - CONST_CAST(GLEW_ARB_debug_output) = _glewSearchExtension("GL_ARB_debug_output", extStart, extEnd); - if (glewExperimental || GLEW_ARB_debug_output) CONST_CAST(GLEW_ARB_debug_output) = !_glewInit_GL_ARB_debug_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_debug_output */ -#ifdef GL_ARB_depth_buffer_float - CONST_CAST(GLEW_ARB_depth_buffer_float) = _glewSearchExtension("GL_ARB_depth_buffer_float", extStart, extEnd); -#endif /* GL_ARB_depth_buffer_float */ -#ifdef GL_ARB_depth_clamp - CONST_CAST(GLEW_ARB_depth_clamp) = _glewSearchExtension("GL_ARB_depth_clamp", extStart, extEnd); -#endif /* GL_ARB_depth_clamp */ -#ifdef GL_ARB_depth_texture - CONST_CAST(GLEW_ARB_depth_texture) = _glewSearchExtension("GL_ARB_depth_texture", extStart, extEnd); -#endif /* GL_ARB_depth_texture */ -#ifdef GL_ARB_draw_buffers - CONST_CAST(GLEW_ARB_draw_buffers) = _glewSearchExtension("GL_ARB_draw_buffers", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_buffers) CONST_CAST(GLEW_ARB_draw_buffers) = !_glewInit_GL_ARB_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_buffers */ -#ifdef GL_ARB_draw_buffers_blend - CONST_CAST(GLEW_ARB_draw_buffers_blend) = _glewSearchExtension("GL_ARB_draw_buffers_blend", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_buffers_blend) CONST_CAST(GLEW_ARB_draw_buffers_blend) = !_glewInit_GL_ARB_draw_buffers_blend(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_buffers_blend */ -#ifdef GL_ARB_draw_elements_base_vertex - CONST_CAST(GLEW_ARB_draw_elements_base_vertex) = _glewSearchExtension("GL_ARB_draw_elements_base_vertex", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_elements_base_vertex) CONST_CAST(GLEW_ARB_draw_elements_base_vertex) = !_glewInit_GL_ARB_draw_elements_base_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_elements_base_vertex */ -#ifdef GL_ARB_draw_indirect - CONST_CAST(GLEW_ARB_draw_indirect) = _glewSearchExtension("GL_ARB_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_ARB_draw_indirect) CONST_CAST(GLEW_ARB_draw_indirect) = !_glewInit_GL_ARB_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_draw_indirect */ -#ifdef GL_ARB_draw_instanced - CONST_CAST(GLEW_ARB_draw_instanced) = _glewSearchExtension("GL_ARB_draw_instanced", extStart, extEnd); -#endif /* GL_ARB_draw_instanced */ -#ifdef GL_ARB_enhanced_layouts - CONST_CAST(GLEW_ARB_enhanced_layouts) = _glewSearchExtension("GL_ARB_enhanced_layouts", extStart, extEnd); -#endif /* GL_ARB_enhanced_layouts */ -#ifdef GL_ARB_explicit_attrib_location - CONST_CAST(GLEW_ARB_explicit_attrib_location) = _glewSearchExtension("GL_ARB_explicit_attrib_location", extStart, extEnd); -#endif /* GL_ARB_explicit_attrib_location */ -#ifdef GL_ARB_explicit_uniform_location - CONST_CAST(GLEW_ARB_explicit_uniform_location) = _glewSearchExtension("GL_ARB_explicit_uniform_location", extStart, extEnd); -#endif /* GL_ARB_explicit_uniform_location */ -#ifdef GL_ARB_fragment_coord_conventions - CONST_CAST(GLEW_ARB_fragment_coord_conventions) = _glewSearchExtension("GL_ARB_fragment_coord_conventions", extStart, extEnd); -#endif /* GL_ARB_fragment_coord_conventions */ -#ifdef GL_ARB_fragment_layer_viewport - CONST_CAST(GLEW_ARB_fragment_layer_viewport) = _glewSearchExtension("GL_ARB_fragment_layer_viewport", extStart, extEnd); -#endif /* GL_ARB_fragment_layer_viewport */ -#ifdef GL_ARB_fragment_program - CONST_CAST(GLEW_ARB_fragment_program) = _glewSearchExtension("GL_ARB_fragment_program", extStart, extEnd); -#endif /* GL_ARB_fragment_program */ -#ifdef GL_ARB_fragment_program_shadow - CONST_CAST(GLEW_ARB_fragment_program_shadow) = _glewSearchExtension("GL_ARB_fragment_program_shadow", extStart, extEnd); -#endif /* GL_ARB_fragment_program_shadow */ -#ifdef GL_ARB_fragment_shader - CONST_CAST(GLEW_ARB_fragment_shader) = _glewSearchExtension("GL_ARB_fragment_shader", extStart, extEnd); -#endif /* GL_ARB_fragment_shader */ -#ifdef GL_ARB_framebuffer_no_attachments - CONST_CAST(GLEW_ARB_framebuffer_no_attachments) = _glewSearchExtension("GL_ARB_framebuffer_no_attachments", extStart, extEnd); - if (glewExperimental || GLEW_ARB_framebuffer_no_attachments) CONST_CAST(GLEW_ARB_framebuffer_no_attachments) = !_glewInit_GL_ARB_framebuffer_no_attachments(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_framebuffer_no_attachments */ -#ifdef GL_ARB_framebuffer_object - CONST_CAST(GLEW_ARB_framebuffer_object) = _glewSearchExtension("GL_ARB_framebuffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_framebuffer_object) CONST_CAST(GLEW_ARB_framebuffer_object) = !_glewInit_GL_ARB_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_framebuffer_object */ -#ifdef GL_ARB_framebuffer_sRGB - CONST_CAST(GLEW_ARB_framebuffer_sRGB) = _glewSearchExtension("GL_ARB_framebuffer_sRGB", extStart, extEnd); -#endif /* GL_ARB_framebuffer_sRGB */ -#ifdef GL_ARB_geometry_shader4 - CONST_CAST(GLEW_ARB_geometry_shader4) = _glewSearchExtension("GL_ARB_geometry_shader4", extStart, extEnd); - if (glewExperimental || GLEW_ARB_geometry_shader4) CONST_CAST(GLEW_ARB_geometry_shader4) = !_glewInit_GL_ARB_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_geometry_shader4 */ -#ifdef GL_ARB_get_program_binary - CONST_CAST(GLEW_ARB_get_program_binary) = _glewSearchExtension("GL_ARB_get_program_binary", extStart, extEnd); - if (glewExperimental || GLEW_ARB_get_program_binary) CONST_CAST(GLEW_ARB_get_program_binary) = !_glewInit_GL_ARB_get_program_binary(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_get_program_binary */ -#ifdef GL_ARB_gpu_shader5 - CONST_CAST(GLEW_ARB_gpu_shader5) = _glewSearchExtension("GL_ARB_gpu_shader5", extStart, extEnd); -#endif /* GL_ARB_gpu_shader5 */ -#ifdef GL_ARB_gpu_shader_fp64 - CONST_CAST(GLEW_ARB_gpu_shader_fp64) = _glewSearchExtension("GL_ARB_gpu_shader_fp64", extStart, extEnd); - if (glewExperimental || GLEW_ARB_gpu_shader_fp64) CONST_CAST(GLEW_ARB_gpu_shader_fp64) = !_glewInit_GL_ARB_gpu_shader_fp64(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_gpu_shader_fp64 */ -#ifdef GL_ARB_half_float_pixel - CONST_CAST(GLEW_ARB_half_float_pixel) = _glewSearchExtension("GL_ARB_half_float_pixel", extStart, extEnd); -#endif /* GL_ARB_half_float_pixel */ -#ifdef GL_ARB_half_float_vertex - CONST_CAST(GLEW_ARB_half_float_vertex) = _glewSearchExtension("GL_ARB_half_float_vertex", extStart, extEnd); -#endif /* GL_ARB_half_float_vertex */ -#ifdef GL_ARB_imaging - CONST_CAST(GLEW_ARB_imaging) = _glewSearchExtension("GL_ARB_imaging", extStart, extEnd); - if (glewExperimental || GLEW_ARB_imaging) CONST_CAST(GLEW_ARB_imaging) = !_glewInit_GL_ARB_imaging(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_imaging */ -#ifdef GL_ARB_indirect_parameters - CONST_CAST(GLEW_ARB_indirect_parameters) = _glewSearchExtension("GL_ARB_indirect_parameters", extStart, extEnd); - if (glewExperimental || GLEW_ARB_indirect_parameters) CONST_CAST(GLEW_ARB_indirect_parameters) = !_glewInit_GL_ARB_indirect_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_indirect_parameters */ -#ifdef GL_ARB_instanced_arrays - CONST_CAST(GLEW_ARB_instanced_arrays) = _glewSearchExtension("GL_ARB_instanced_arrays", extStart, extEnd); - if (glewExperimental || GLEW_ARB_instanced_arrays) CONST_CAST(GLEW_ARB_instanced_arrays) = !_glewInit_GL_ARB_instanced_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_instanced_arrays */ -#ifdef GL_ARB_internalformat_query - CONST_CAST(GLEW_ARB_internalformat_query) = _glewSearchExtension("GL_ARB_internalformat_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_internalformat_query) CONST_CAST(GLEW_ARB_internalformat_query) = !_glewInit_GL_ARB_internalformat_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_internalformat_query */ -#ifdef GL_ARB_internalformat_query2 - CONST_CAST(GLEW_ARB_internalformat_query2) = _glewSearchExtension("GL_ARB_internalformat_query2", extStart, extEnd); - if (glewExperimental || GLEW_ARB_internalformat_query2) CONST_CAST(GLEW_ARB_internalformat_query2) = !_glewInit_GL_ARB_internalformat_query2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_internalformat_query2 */ -#ifdef GL_ARB_invalidate_subdata - CONST_CAST(GLEW_ARB_invalidate_subdata) = _glewSearchExtension("GL_ARB_invalidate_subdata", extStart, extEnd); - if (glewExperimental || GLEW_ARB_invalidate_subdata) CONST_CAST(GLEW_ARB_invalidate_subdata) = !_glewInit_GL_ARB_invalidate_subdata(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_invalidate_subdata */ -#ifdef GL_ARB_map_buffer_alignment - CONST_CAST(GLEW_ARB_map_buffer_alignment) = _glewSearchExtension("GL_ARB_map_buffer_alignment", extStart, extEnd); -#endif /* GL_ARB_map_buffer_alignment */ -#ifdef GL_ARB_map_buffer_range - CONST_CAST(GLEW_ARB_map_buffer_range) = _glewSearchExtension("GL_ARB_map_buffer_range", extStart, extEnd); - if (glewExperimental || GLEW_ARB_map_buffer_range) CONST_CAST(GLEW_ARB_map_buffer_range) = !_glewInit_GL_ARB_map_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_map_buffer_range */ -#ifdef GL_ARB_matrix_palette - CONST_CAST(GLEW_ARB_matrix_palette) = _glewSearchExtension("GL_ARB_matrix_palette", extStart, extEnd); - if (glewExperimental || GLEW_ARB_matrix_palette) CONST_CAST(GLEW_ARB_matrix_palette) = !_glewInit_GL_ARB_matrix_palette(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_matrix_palette */ -#ifdef GL_ARB_multi_bind - CONST_CAST(GLEW_ARB_multi_bind) = _glewSearchExtension("GL_ARB_multi_bind", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multi_bind) CONST_CAST(GLEW_ARB_multi_bind) = !_glewInit_GL_ARB_multi_bind(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multi_bind */ -#ifdef GL_ARB_multi_draw_indirect - CONST_CAST(GLEW_ARB_multi_draw_indirect) = _glewSearchExtension("GL_ARB_multi_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multi_draw_indirect) CONST_CAST(GLEW_ARB_multi_draw_indirect) = !_glewInit_GL_ARB_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multi_draw_indirect */ -#ifdef GL_ARB_multisample - CONST_CAST(GLEW_ARB_multisample) = _glewSearchExtension("GL_ARB_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multisample) CONST_CAST(GLEW_ARB_multisample) = !_glewInit_GL_ARB_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multisample */ -#ifdef GL_ARB_multitexture - CONST_CAST(GLEW_ARB_multitexture) = _glewSearchExtension("GL_ARB_multitexture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_multitexture) CONST_CAST(GLEW_ARB_multitexture) = !_glewInit_GL_ARB_multitexture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_multitexture */ -#ifdef GL_ARB_occlusion_query - CONST_CAST(GLEW_ARB_occlusion_query) = _glewSearchExtension("GL_ARB_occlusion_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_occlusion_query) CONST_CAST(GLEW_ARB_occlusion_query) = !_glewInit_GL_ARB_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_occlusion_query */ -#ifdef GL_ARB_occlusion_query2 - CONST_CAST(GLEW_ARB_occlusion_query2) = _glewSearchExtension("GL_ARB_occlusion_query2", extStart, extEnd); -#endif /* GL_ARB_occlusion_query2 */ -#ifdef GL_ARB_pixel_buffer_object - CONST_CAST(GLEW_ARB_pixel_buffer_object) = _glewSearchExtension("GL_ARB_pixel_buffer_object", extStart, extEnd); -#endif /* GL_ARB_pixel_buffer_object */ -#ifdef GL_ARB_point_parameters - CONST_CAST(GLEW_ARB_point_parameters) = _glewSearchExtension("GL_ARB_point_parameters", extStart, extEnd); - if (glewExperimental || GLEW_ARB_point_parameters) CONST_CAST(GLEW_ARB_point_parameters) = !_glewInit_GL_ARB_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_point_parameters */ -#ifdef GL_ARB_point_sprite - CONST_CAST(GLEW_ARB_point_sprite) = _glewSearchExtension("GL_ARB_point_sprite", extStart, extEnd); -#endif /* GL_ARB_point_sprite */ -#ifdef GL_ARB_program_interface_query - CONST_CAST(GLEW_ARB_program_interface_query) = _glewSearchExtension("GL_ARB_program_interface_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_program_interface_query) CONST_CAST(GLEW_ARB_program_interface_query) = !_glewInit_GL_ARB_program_interface_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_program_interface_query */ -#ifdef GL_ARB_provoking_vertex - CONST_CAST(GLEW_ARB_provoking_vertex) = _glewSearchExtension("GL_ARB_provoking_vertex", extStart, extEnd); - if (glewExperimental || GLEW_ARB_provoking_vertex) CONST_CAST(GLEW_ARB_provoking_vertex) = !_glewInit_GL_ARB_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_provoking_vertex */ -#ifdef GL_ARB_query_buffer_object - CONST_CAST(GLEW_ARB_query_buffer_object) = _glewSearchExtension("GL_ARB_query_buffer_object", extStart, extEnd); -#endif /* GL_ARB_query_buffer_object */ -#ifdef GL_ARB_robust_buffer_access_behavior - CONST_CAST(GLEW_ARB_robust_buffer_access_behavior) = _glewSearchExtension("GL_ARB_robust_buffer_access_behavior", extStart, extEnd); -#endif /* GL_ARB_robust_buffer_access_behavior */ -#ifdef GL_ARB_robustness - CONST_CAST(GLEW_ARB_robustness) = _glewSearchExtension("GL_ARB_robustness", extStart, extEnd); - if (glewExperimental || GLEW_ARB_robustness) CONST_CAST(GLEW_ARB_robustness) = !_glewInit_GL_ARB_robustness(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_robustness */ -#ifdef GL_ARB_robustness_application_isolation - CONST_CAST(GLEW_ARB_robustness_application_isolation) = _glewSearchExtension("GL_ARB_robustness_application_isolation", extStart, extEnd); -#endif /* GL_ARB_robustness_application_isolation */ -#ifdef GL_ARB_robustness_share_group_isolation - CONST_CAST(GLEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("GL_ARB_robustness_share_group_isolation", extStart, extEnd); -#endif /* GL_ARB_robustness_share_group_isolation */ -#ifdef GL_ARB_sample_shading - CONST_CAST(GLEW_ARB_sample_shading) = _glewSearchExtension("GL_ARB_sample_shading", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sample_shading) CONST_CAST(GLEW_ARB_sample_shading) = !_glewInit_GL_ARB_sample_shading(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sample_shading */ -#ifdef GL_ARB_sampler_objects - CONST_CAST(GLEW_ARB_sampler_objects) = _glewSearchExtension("GL_ARB_sampler_objects", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sampler_objects) CONST_CAST(GLEW_ARB_sampler_objects) = !_glewInit_GL_ARB_sampler_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sampler_objects */ -#ifdef GL_ARB_seamless_cube_map - CONST_CAST(GLEW_ARB_seamless_cube_map) = _glewSearchExtension("GL_ARB_seamless_cube_map", extStart, extEnd); -#endif /* GL_ARB_seamless_cube_map */ -#ifdef GL_ARB_seamless_cubemap_per_texture - CONST_CAST(GLEW_ARB_seamless_cubemap_per_texture) = _glewSearchExtension("GL_ARB_seamless_cubemap_per_texture", extStart, extEnd); -#endif /* GL_ARB_seamless_cubemap_per_texture */ -#ifdef GL_ARB_separate_shader_objects - CONST_CAST(GLEW_ARB_separate_shader_objects) = _glewSearchExtension("GL_ARB_separate_shader_objects", extStart, extEnd); - if (glewExperimental || GLEW_ARB_separate_shader_objects) CONST_CAST(GLEW_ARB_separate_shader_objects) = !_glewInit_GL_ARB_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_separate_shader_objects */ -#ifdef GL_ARB_shader_atomic_counters - CONST_CAST(GLEW_ARB_shader_atomic_counters) = _glewSearchExtension("GL_ARB_shader_atomic_counters", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_atomic_counters) CONST_CAST(GLEW_ARB_shader_atomic_counters) = !_glewInit_GL_ARB_shader_atomic_counters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_atomic_counters */ -#ifdef GL_ARB_shader_bit_encoding - CONST_CAST(GLEW_ARB_shader_bit_encoding) = _glewSearchExtension("GL_ARB_shader_bit_encoding", extStart, extEnd); -#endif /* GL_ARB_shader_bit_encoding */ -#ifdef GL_ARB_shader_draw_parameters - CONST_CAST(GLEW_ARB_shader_draw_parameters) = _glewSearchExtension("GL_ARB_shader_draw_parameters", extStart, extEnd); -#endif /* GL_ARB_shader_draw_parameters */ -#ifdef GL_ARB_shader_group_vote - CONST_CAST(GLEW_ARB_shader_group_vote) = _glewSearchExtension("GL_ARB_shader_group_vote", extStart, extEnd); -#endif /* GL_ARB_shader_group_vote */ -#ifdef GL_ARB_shader_image_load_store - CONST_CAST(GLEW_ARB_shader_image_load_store) = _glewSearchExtension("GL_ARB_shader_image_load_store", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_image_load_store) CONST_CAST(GLEW_ARB_shader_image_load_store) = !_glewInit_GL_ARB_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_image_load_store */ -#ifdef GL_ARB_shader_image_size - CONST_CAST(GLEW_ARB_shader_image_size) = _glewSearchExtension("GL_ARB_shader_image_size", extStart, extEnd); -#endif /* GL_ARB_shader_image_size */ -#ifdef GL_ARB_shader_objects - CONST_CAST(GLEW_ARB_shader_objects) = _glewSearchExtension("GL_ARB_shader_objects", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_objects) CONST_CAST(GLEW_ARB_shader_objects) = !_glewInit_GL_ARB_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_objects */ -#ifdef GL_ARB_shader_precision - CONST_CAST(GLEW_ARB_shader_precision) = _glewSearchExtension("GL_ARB_shader_precision", extStart, extEnd); -#endif /* GL_ARB_shader_precision */ -#ifdef GL_ARB_shader_stencil_export - CONST_CAST(GLEW_ARB_shader_stencil_export) = _glewSearchExtension("GL_ARB_shader_stencil_export", extStart, extEnd); -#endif /* GL_ARB_shader_stencil_export */ -#ifdef GL_ARB_shader_storage_buffer_object - CONST_CAST(GLEW_ARB_shader_storage_buffer_object) = _glewSearchExtension("GL_ARB_shader_storage_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_storage_buffer_object) CONST_CAST(GLEW_ARB_shader_storage_buffer_object) = !_glewInit_GL_ARB_shader_storage_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_storage_buffer_object */ -#ifdef GL_ARB_shader_subroutine - CONST_CAST(GLEW_ARB_shader_subroutine) = _glewSearchExtension("GL_ARB_shader_subroutine", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shader_subroutine) CONST_CAST(GLEW_ARB_shader_subroutine) = !_glewInit_GL_ARB_shader_subroutine(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shader_subroutine */ -#ifdef GL_ARB_shader_texture_lod - CONST_CAST(GLEW_ARB_shader_texture_lod) = _glewSearchExtension("GL_ARB_shader_texture_lod", extStart, extEnd); -#endif /* GL_ARB_shader_texture_lod */ -#ifdef GL_ARB_shading_language_100 - CONST_CAST(GLEW_ARB_shading_language_100) = _glewSearchExtension("GL_ARB_shading_language_100", extStart, extEnd); -#endif /* GL_ARB_shading_language_100 */ -#ifdef GL_ARB_shading_language_420pack - CONST_CAST(GLEW_ARB_shading_language_420pack) = _glewSearchExtension("GL_ARB_shading_language_420pack", extStart, extEnd); -#endif /* GL_ARB_shading_language_420pack */ -#ifdef GL_ARB_shading_language_include - CONST_CAST(GLEW_ARB_shading_language_include) = _glewSearchExtension("GL_ARB_shading_language_include", extStart, extEnd); - if (glewExperimental || GLEW_ARB_shading_language_include) CONST_CAST(GLEW_ARB_shading_language_include) = !_glewInit_GL_ARB_shading_language_include(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_shading_language_include */ -#ifdef GL_ARB_shading_language_packing - CONST_CAST(GLEW_ARB_shading_language_packing) = _glewSearchExtension("GL_ARB_shading_language_packing", extStart, extEnd); -#endif /* GL_ARB_shading_language_packing */ -#ifdef GL_ARB_shadow - CONST_CAST(GLEW_ARB_shadow) = _glewSearchExtension("GL_ARB_shadow", extStart, extEnd); -#endif /* GL_ARB_shadow */ -#ifdef GL_ARB_shadow_ambient - CONST_CAST(GLEW_ARB_shadow_ambient) = _glewSearchExtension("GL_ARB_shadow_ambient", extStart, extEnd); -#endif /* GL_ARB_shadow_ambient */ -#ifdef GL_ARB_sparse_texture - CONST_CAST(GLEW_ARB_sparse_texture) = _glewSearchExtension("GL_ARB_sparse_texture", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sparse_texture) CONST_CAST(GLEW_ARB_sparse_texture) = !_glewInit_GL_ARB_sparse_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sparse_texture */ -#ifdef GL_ARB_stencil_texturing - CONST_CAST(GLEW_ARB_stencil_texturing) = _glewSearchExtension("GL_ARB_stencil_texturing", extStart, extEnd); -#endif /* GL_ARB_stencil_texturing */ -#ifdef GL_ARB_sync - CONST_CAST(GLEW_ARB_sync) = _glewSearchExtension("GL_ARB_sync", extStart, extEnd); - if (glewExperimental || GLEW_ARB_sync) CONST_CAST(GLEW_ARB_sync) = !_glewInit_GL_ARB_sync(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_sync */ -#ifdef GL_ARB_tessellation_shader - CONST_CAST(GLEW_ARB_tessellation_shader) = _glewSearchExtension("GL_ARB_tessellation_shader", extStart, extEnd); - if (glewExperimental || GLEW_ARB_tessellation_shader) CONST_CAST(GLEW_ARB_tessellation_shader) = !_glewInit_GL_ARB_tessellation_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_tessellation_shader */ -#ifdef GL_ARB_texture_border_clamp - CONST_CAST(GLEW_ARB_texture_border_clamp) = _glewSearchExtension("GL_ARB_texture_border_clamp", extStart, extEnd); -#endif /* GL_ARB_texture_border_clamp */ -#ifdef GL_ARB_texture_buffer_object - CONST_CAST(GLEW_ARB_texture_buffer_object) = _glewSearchExtension("GL_ARB_texture_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_buffer_object) CONST_CAST(GLEW_ARB_texture_buffer_object) = !_glewInit_GL_ARB_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_buffer_object */ -#ifdef GL_ARB_texture_buffer_object_rgb32 - CONST_CAST(GLEW_ARB_texture_buffer_object_rgb32) = _glewSearchExtension("GL_ARB_texture_buffer_object_rgb32", extStart, extEnd); -#endif /* GL_ARB_texture_buffer_object_rgb32 */ -#ifdef GL_ARB_texture_buffer_range - CONST_CAST(GLEW_ARB_texture_buffer_range) = _glewSearchExtension("GL_ARB_texture_buffer_range", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_buffer_range) CONST_CAST(GLEW_ARB_texture_buffer_range) = !_glewInit_GL_ARB_texture_buffer_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_buffer_range */ -#ifdef GL_ARB_texture_compression - CONST_CAST(GLEW_ARB_texture_compression) = _glewSearchExtension("GL_ARB_texture_compression", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_compression) CONST_CAST(GLEW_ARB_texture_compression) = !_glewInit_GL_ARB_texture_compression(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_compression */ -#ifdef GL_ARB_texture_compression_bptc - CONST_CAST(GLEW_ARB_texture_compression_bptc) = _glewSearchExtension("GL_ARB_texture_compression_bptc", extStart, extEnd); -#endif /* GL_ARB_texture_compression_bptc */ -#ifdef GL_ARB_texture_compression_rgtc - CONST_CAST(GLEW_ARB_texture_compression_rgtc) = _glewSearchExtension("GL_ARB_texture_compression_rgtc", extStart, extEnd); -#endif /* GL_ARB_texture_compression_rgtc */ -#ifdef GL_ARB_texture_cube_map - CONST_CAST(GLEW_ARB_texture_cube_map) = _glewSearchExtension("GL_ARB_texture_cube_map", extStart, extEnd); -#endif /* GL_ARB_texture_cube_map */ -#ifdef GL_ARB_texture_cube_map_array - CONST_CAST(GLEW_ARB_texture_cube_map_array) = _glewSearchExtension("GL_ARB_texture_cube_map_array", extStart, extEnd); -#endif /* GL_ARB_texture_cube_map_array */ -#ifdef GL_ARB_texture_env_add - CONST_CAST(GLEW_ARB_texture_env_add) = _glewSearchExtension("GL_ARB_texture_env_add", extStart, extEnd); -#endif /* GL_ARB_texture_env_add */ -#ifdef GL_ARB_texture_env_combine - CONST_CAST(GLEW_ARB_texture_env_combine) = _glewSearchExtension("GL_ARB_texture_env_combine", extStart, extEnd); -#endif /* GL_ARB_texture_env_combine */ -#ifdef GL_ARB_texture_env_crossbar - CONST_CAST(GLEW_ARB_texture_env_crossbar) = _glewSearchExtension("GL_ARB_texture_env_crossbar", extStart, extEnd); -#endif /* GL_ARB_texture_env_crossbar */ -#ifdef GL_ARB_texture_env_dot3 - CONST_CAST(GLEW_ARB_texture_env_dot3) = _glewSearchExtension("GL_ARB_texture_env_dot3", extStart, extEnd); -#endif /* GL_ARB_texture_env_dot3 */ -#ifdef GL_ARB_texture_float - CONST_CAST(GLEW_ARB_texture_float) = _glewSearchExtension("GL_ARB_texture_float", extStart, extEnd); -#endif /* GL_ARB_texture_float */ -#ifdef GL_ARB_texture_gather - CONST_CAST(GLEW_ARB_texture_gather) = _glewSearchExtension("GL_ARB_texture_gather", extStart, extEnd); -#endif /* GL_ARB_texture_gather */ -#ifdef GL_ARB_texture_mirror_clamp_to_edge - CONST_CAST(GLEW_ARB_texture_mirror_clamp_to_edge) = _glewSearchExtension("GL_ARB_texture_mirror_clamp_to_edge", extStart, extEnd); -#endif /* GL_ARB_texture_mirror_clamp_to_edge */ -#ifdef GL_ARB_texture_mirrored_repeat - CONST_CAST(GLEW_ARB_texture_mirrored_repeat) = _glewSearchExtension("GL_ARB_texture_mirrored_repeat", extStart, extEnd); -#endif /* GL_ARB_texture_mirrored_repeat */ -#ifdef GL_ARB_texture_multisample - CONST_CAST(GLEW_ARB_texture_multisample) = _glewSearchExtension("GL_ARB_texture_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_multisample) CONST_CAST(GLEW_ARB_texture_multisample) = !_glewInit_GL_ARB_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_multisample */ -#ifdef GL_ARB_texture_non_power_of_two - CONST_CAST(GLEW_ARB_texture_non_power_of_two) = _glewSearchExtension("GL_ARB_texture_non_power_of_two", extStart, extEnd); -#endif /* GL_ARB_texture_non_power_of_two */ -#ifdef GL_ARB_texture_query_levels - CONST_CAST(GLEW_ARB_texture_query_levels) = _glewSearchExtension("GL_ARB_texture_query_levels", extStart, extEnd); -#endif /* GL_ARB_texture_query_levels */ -#ifdef GL_ARB_texture_query_lod - CONST_CAST(GLEW_ARB_texture_query_lod) = _glewSearchExtension("GL_ARB_texture_query_lod", extStart, extEnd); -#endif /* GL_ARB_texture_query_lod */ -#ifdef GL_ARB_texture_rectangle - CONST_CAST(GLEW_ARB_texture_rectangle) = _glewSearchExtension("GL_ARB_texture_rectangle", extStart, extEnd); -#endif /* GL_ARB_texture_rectangle */ -#ifdef GL_ARB_texture_rg - CONST_CAST(GLEW_ARB_texture_rg) = _glewSearchExtension("GL_ARB_texture_rg", extStart, extEnd); -#endif /* GL_ARB_texture_rg */ -#ifdef GL_ARB_texture_rgb10_a2ui - CONST_CAST(GLEW_ARB_texture_rgb10_a2ui) = _glewSearchExtension("GL_ARB_texture_rgb10_a2ui", extStart, extEnd); -#endif /* GL_ARB_texture_rgb10_a2ui */ -#ifdef GL_ARB_texture_stencil8 - CONST_CAST(GLEW_ARB_texture_stencil8) = _glewSearchExtension("GL_ARB_texture_stencil8", extStart, extEnd); -#endif /* GL_ARB_texture_stencil8 */ -#ifdef GL_ARB_texture_storage - CONST_CAST(GLEW_ARB_texture_storage) = _glewSearchExtension("GL_ARB_texture_storage", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_storage) CONST_CAST(GLEW_ARB_texture_storage) = !_glewInit_GL_ARB_texture_storage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_storage */ -#ifdef GL_ARB_texture_storage_multisample - CONST_CAST(GLEW_ARB_texture_storage_multisample) = _glewSearchExtension("GL_ARB_texture_storage_multisample", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_storage_multisample) CONST_CAST(GLEW_ARB_texture_storage_multisample) = !_glewInit_GL_ARB_texture_storage_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_storage_multisample */ -#ifdef GL_ARB_texture_swizzle - CONST_CAST(GLEW_ARB_texture_swizzle) = _glewSearchExtension("GL_ARB_texture_swizzle", extStart, extEnd); -#endif /* GL_ARB_texture_swizzle */ -#ifdef GL_ARB_texture_view - CONST_CAST(GLEW_ARB_texture_view) = _glewSearchExtension("GL_ARB_texture_view", extStart, extEnd); - if (glewExperimental || GLEW_ARB_texture_view) CONST_CAST(GLEW_ARB_texture_view) = !_glewInit_GL_ARB_texture_view(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_texture_view */ -#ifdef GL_ARB_timer_query - CONST_CAST(GLEW_ARB_timer_query) = _glewSearchExtension("GL_ARB_timer_query", extStart, extEnd); - if (glewExperimental || GLEW_ARB_timer_query) CONST_CAST(GLEW_ARB_timer_query) = !_glewInit_GL_ARB_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_timer_query */ -#ifdef GL_ARB_transform_feedback2 - CONST_CAST(GLEW_ARB_transform_feedback2) = _glewSearchExtension("GL_ARB_transform_feedback2", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transform_feedback2) CONST_CAST(GLEW_ARB_transform_feedback2) = !_glewInit_GL_ARB_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transform_feedback2 */ -#ifdef GL_ARB_transform_feedback3 - CONST_CAST(GLEW_ARB_transform_feedback3) = _glewSearchExtension("GL_ARB_transform_feedback3", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transform_feedback3) CONST_CAST(GLEW_ARB_transform_feedback3) = !_glewInit_GL_ARB_transform_feedback3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transform_feedback3 */ -#ifdef GL_ARB_transform_feedback_instanced - CONST_CAST(GLEW_ARB_transform_feedback_instanced) = _glewSearchExtension("GL_ARB_transform_feedback_instanced", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transform_feedback_instanced) CONST_CAST(GLEW_ARB_transform_feedback_instanced) = !_glewInit_GL_ARB_transform_feedback_instanced(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transform_feedback_instanced */ -#ifdef GL_ARB_transpose_matrix - CONST_CAST(GLEW_ARB_transpose_matrix) = _glewSearchExtension("GL_ARB_transpose_matrix", extStart, extEnd); - if (glewExperimental || GLEW_ARB_transpose_matrix) CONST_CAST(GLEW_ARB_transpose_matrix) = !_glewInit_GL_ARB_transpose_matrix(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_transpose_matrix */ -#ifdef GL_ARB_uniform_buffer_object - CONST_CAST(GLEW_ARB_uniform_buffer_object) = _glewSearchExtension("GL_ARB_uniform_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_uniform_buffer_object) CONST_CAST(GLEW_ARB_uniform_buffer_object) = !_glewInit_GL_ARB_uniform_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_uniform_buffer_object */ -#ifdef GL_ARB_vertex_array_bgra - CONST_CAST(GLEW_ARB_vertex_array_bgra) = _glewSearchExtension("GL_ARB_vertex_array_bgra", extStart, extEnd); -#endif /* GL_ARB_vertex_array_bgra */ -#ifdef GL_ARB_vertex_array_object - CONST_CAST(GLEW_ARB_vertex_array_object) = _glewSearchExtension("GL_ARB_vertex_array_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_array_object) CONST_CAST(GLEW_ARB_vertex_array_object) = !_glewInit_GL_ARB_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_array_object */ -#ifdef GL_ARB_vertex_attrib_64bit - CONST_CAST(GLEW_ARB_vertex_attrib_64bit) = _glewSearchExtension("GL_ARB_vertex_attrib_64bit", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_attrib_64bit) CONST_CAST(GLEW_ARB_vertex_attrib_64bit) = !_glewInit_GL_ARB_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_attrib_64bit */ -#ifdef GL_ARB_vertex_attrib_binding - CONST_CAST(GLEW_ARB_vertex_attrib_binding) = _glewSearchExtension("GL_ARB_vertex_attrib_binding", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_attrib_binding) CONST_CAST(GLEW_ARB_vertex_attrib_binding) = !_glewInit_GL_ARB_vertex_attrib_binding(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_attrib_binding */ -#ifdef GL_ARB_vertex_blend - CONST_CAST(GLEW_ARB_vertex_blend) = _glewSearchExtension("GL_ARB_vertex_blend", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_blend) CONST_CAST(GLEW_ARB_vertex_blend) = !_glewInit_GL_ARB_vertex_blend(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_blend */ -#ifdef GL_ARB_vertex_buffer_object - CONST_CAST(GLEW_ARB_vertex_buffer_object) = _glewSearchExtension("GL_ARB_vertex_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_buffer_object) CONST_CAST(GLEW_ARB_vertex_buffer_object) = !_glewInit_GL_ARB_vertex_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_buffer_object */ -#ifdef GL_ARB_vertex_program - CONST_CAST(GLEW_ARB_vertex_program) = _glewSearchExtension("GL_ARB_vertex_program", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_program) CONST_CAST(GLEW_ARB_vertex_program) = !_glewInit_GL_ARB_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_program */ -#ifdef GL_ARB_vertex_shader - CONST_CAST(GLEW_ARB_vertex_shader) = _glewSearchExtension("GL_ARB_vertex_shader", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_shader) CONST_CAST(GLEW_ARB_vertex_shader) = !_glewInit_GL_ARB_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_shader */ -#ifdef GL_ARB_vertex_type_10f_11f_11f_rev - CONST_CAST(GLEW_ARB_vertex_type_10f_11f_11f_rev) = _glewSearchExtension("GL_ARB_vertex_type_10f_11f_11f_rev", extStart, extEnd); -#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ -#ifdef GL_ARB_vertex_type_2_10_10_10_rev - CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = _glewSearchExtension("GL_ARB_vertex_type_2_10_10_10_rev", extStart, extEnd); - if (glewExperimental || GLEW_ARB_vertex_type_2_10_10_10_rev) CONST_CAST(GLEW_ARB_vertex_type_2_10_10_10_rev) = !_glewInit_GL_ARB_vertex_type_2_10_10_10_rev(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ -#ifdef GL_ARB_viewport_array - CONST_CAST(GLEW_ARB_viewport_array) = _glewSearchExtension("GL_ARB_viewport_array", extStart, extEnd); - if (glewExperimental || GLEW_ARB_viewport_array) CONST_CAST(GLEW_ARB_viewport_array) = !_glewInit_GL_ARB_viewport_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_viewport_array */ -#ifdef GL_ARB_window_pos - CONST_CAST(GLEW_ARB_window_pos) = _glewSearchExtension("GL_ARB_window_pos", extStart, extEnd); - if (glewExperimental || GLEW_ARB_window_pos) CONST_CAST(GLEW_ARB_window_pos) = !_glewInit_GL_ARB_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ARB_window_pos */ -#ifdef GL_ATIX_point_sprites - CONST_CAST(GLEW_ATIX_point_sprites) = _glewSearchExtension("GL_ATIX_point_sprites", extStart, extEnd); -#endif /* GL_ATIX_point_sprites */ -#ifdef GL_ATIX_texture_env_combine3 - CONST_CAST(GLEW_ATIX_texture_env_combine3) = _glewSearchExtension("GL_ATIX_texture_env_combine3", extStart, extEnd); -#endif /* GL_ATIX_texture_env_combine3 */ -#ifdef GL_ATIX_texture_env_route - CONST_CAST(GLEW_ATIX_texture_env_route) = _glewSearchExtension("GL_ATIX_texture_env_route", extStart, extEnd); -#endif /* GL_ATIX_texture_env_route */ -#ifdef GL_ATIX_vertex_shader_output_point_size - CONST_CAST(GLEW_ATIX_vertex_shader_output_point_size) = _glewSearchExtension("GL_ATIX_vertex_shader_output_point_size", extStart, extEnd); -#endif /* GL_ATIX_vertex_shader_output_point_size */ -#ifdef GL_ATI_draw_buffers - CONST_CAST(GLEW_ATI_draw_buffers) = _glewSearchExtension("GL_ATI_draw_buffers", extStart, extEnd); - if (glewExperimental || GLEW_ATI_draw_buffers) CONST_CAST(GLEW_ATI_draw_buffers) = !_glewInit_GL_ATI_draw_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_draw_buffers */ -#ifdef GL_ATI_element_array - CONST_CAST(GLEW_ATI_element_array) = _glewSearchExtension("GL_ATI_element_array", extStart, extEnd); - if (glewExperimental || GLEW_ATI_element_array) CONST_CAST(GLEW_ATI_element_array) = !_glewInit_GL_ATI_element_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_element_array */ -#ifdef GL_ATI_envmap_bumpmap - CONST_CAST(GLEW_ATI_envmap_bumpmap) = _glewSearchExtension("GL_ATI_envmap_bumpmap", extStart, extEnd); - if (glewExperimental || GLEW_ATI_envmap_bumpmap) CONST_CAST(GLEW_ATI_envmap_bumpmap) = !_glewInit_GL_ATI_envmap_bumpmap(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_envmap_bumpmap */ -#ifdef GL_ATI_fragment_shader - CONST_CAST(GLEW_ATI_fragment_shader) = _glewSearchExtension("GL_ATI_fragment_shader", extStart, extEnd); - if (glewExperimental || GLEW_ATI_fragment_shader) CONST_CAST(GLEW_ATI_fragment_shader) = !_glewInit_GL_ATI_fragment_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_fragment_shader */ -#ifdef GL_ATI_map_object_buffer - CONST_CAST(GLEW_ATI_map_object_buffer) = _glewSearchExtension("GL_ATI_map_object_buffer", extStart, extEnd); - if (glewExperimental || GLEW_ATI_map_object_buffer) CONST_CAST(GLEW_ATI_map_object_buffer) = !_glewInit_GL_ATI_map_object_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_map_object_buffer */ -#ifdef GL_ATI_meminfo - CONST_CAST(GLEW_ATI_meminfo) = _glewSearchExtension("GL_ATI_meminfo", extStart, extEnd); -#endif /* GL_ATI_meminfo */ -#ifdef GL_ATI_pn_triangles - CONST_CAST(GLEW_ATI_pn_triangles) = _glewSearchExtension("GL_ATI_pn_triangles", extStart, extEnd); - if (glewExperimental || GLEW_ATI_pn_triangles) CONST_CAST(GLEW_ATI_pn_triangles) = !_glewInit_GL_ATI_pn_triangles(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_pn_triangles */ -#ifdef GL_ATI_separate_stencil - CONST_CAST(GLEW_ATI_separate_stencil) = _glewSearchExtension("GL_ATI_separate_stencil", extStart, extEnd); - if (glewExperimental || GLEW_ATI_separate_stencil) CONST_CAST(GLEW_ATI_separate_stencil) = !_glewInit_GL_ATI_separate_stencil(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_separate_stencil */ -#ifdef GL_ATI_shader_texture_lod - CONST_CAST(GLEW_ATI_shader_texture_lod) = _glewSearchExtension("GL_ATI_shader_texture_lod", extStart, extEnd); -#endif /* GL_ATI_shader_texture_lod */ -#ifdef GL_ATI_text_fragment_shader - CONST_CAST(GLEW_ATI_text_fragment_shader) = _glewSearchExtension("GL_ATI_text_fragment_shader", extStart, extEnd); -#endif /* GL_ATI_text_fragment_shader */ -#ifdef GL_ATI_texture_compression_3dc - CONST_CAST(GLEW_ATI_texture_compression_3dc) = _glewSearchExtension("GL_ATI_texture_compression_3dc", extStart, extEnd); -#endif /* GL_ATI_texture_compression_3dc */ -#ifdef GL_ATI_texture_env_combine3 - CONST_CAST(GLEW_ATI_texture_env_combine3) = _glewSearchExtension("GL_ATI_texture_env_combine3", extStart, extEnd); -#endif /* GL_ATI_texture_env_combine3 */ -#ifdef GL_ATI_texture_float - CONST_CAST(GLEW_ATI_texture_float) = _glewSearchExtension("GL_ATI_texture_float", extStart, extEnd); -#endif /* GL_ATI_texture_float */ -#ifdef GL_ATI_texture_mirror_once - CONST_CAST(GLEW_ATI_texture_mirror_once) = _glewSearchExtension("GL_ATI_texture_mirror_once", extStart, extEnd); -#endif /* GL_ATI_texture_mirror_once */ -#ifdef GL_ATI_vertex_array_object - CONST_CAST(GLEW_ATI_vertex_array_object) = _glewSearchExtension("GL_ATI_vertex_array_object", extStart, extEnd); - if (glewExperimental || GLEW_ATI_vertex_array_object) CONST_CAST(GLEW_ATI_vertex_array_object) = !_glewInit_GL_ATI_vertex_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_vertex_array_object */ -#ifdef GL_ATI_vertex_attrib_array_object - CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = _glewSearchExtension("GL_ATI_vertex_attrib_array_object", extStart, extEnd); - if (glewExperimental || GLEW_ATI_vertex_attrib_array_object) CONST_CAST(GLEW_ATI_vertex_attrib_array_object) = !_glewInit_GL_ATI_vertex_attrib_array_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_vertex_attrib_array_object */ -#ifdef GL_ATI_vertex_streams - CONST_CAST(GLEW_ATI_vertex_streams) = _glewSearchExtension("GL_ATI_vertex_streams", extStart, extEnd); - if (glewExperimental || GLEW_ATI_vertex_streams) CONST_CAST(GLEW_ATI_vertex_streams) = !_glewInit_GL_ATI_vertex_streams(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_ATI_vertex_streams */ -#ifdef GL_EXT_422_pixels - CONST_CAST(GLEW_EXT_422_pixels) = _glewSearchExtension("GL_EXT_422_pixels", extStart, extEnd); -#endif /* GL_EXT_422_pixels */ -#ifdef GL_EXT_Cg_shader - CONST_CAST(GLEW_EXT_Cg_shader) = _glewSearchExtension("GL_EXT_Cg_shader", extStart, extEnd); -#endif /* GL_EXT_Cg_shader */ -#ifdef GL_EXT_abgr - CONST_CAST(GLEW_EXT_abgr) = _glewSearchExtension("GL_EXT_abgr", extStart, extEnd); -#endif /* GL_EXT_abgr */ -#ifdef GL_EXT_bgra - CONST_CAST(GLEW_EXT_bgra) = _glewSearchExtension("GL_EXT_bgra", extStart, extEnd); -#endif /* GL_EXT_bgra */ -#ifdef GL_EXT_bindable_uniform - CONST_CAST(GLEW_EXT_bindable_uniform) = _glewSearchExtension("GL_EXT_bindable_uniform", extStart, extEnd); - if (glewExperimental || GLEW_EXT_bindable_uniform) CONST_CAST(GLEW_EXT_bindable_uniform) = !_glewInit_GL_EXT_bindable_uniform(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_bindable_uniform */ -#ifdef GL_EXT_blend_color - CONST_CAST(GLEW_EXT_blend_color) = _glewSearchExtension("GL_EXT_blend_color", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_color) CONST_CAST(GLEW_EXT_blend_color) = !_glewInit_GL_EXT_blend_color(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_color */ -#ifdef GL_EXT_blend_equation_separate - CONST_CAST(GLEW_EXT_blend_equation_separate) = _glewSearchExtension("GL_EXT_blend_equation_separate", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_equation_separate) CONST_CAST(GLEW_EXT_blend_equation_separate) = !_glewInit_GL_EXT_blend_equation_separate(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_equation_separate */ -#ifdef GL_EXT_blend_func_separate - CONST_CAST(GLEW_EXT_blend_func_separate) = _glewSearchExtension("GL_EXT_blend_func_separate", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_func_separate) CONST_CAST(GLEW_EXT_blend_func_separate) = !_glewInit_GL_EXT_blend_func_separate(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_func_separate */ -#ifdef GL_EXT_blend_logic_op - CONST_CAST(GLEW_EXT_blend_logic_op) = _glewSearchExtension("GL_EXT_blend_logic_op", extStart, extEnd); -#endif /* GL_EXT_blend_logic_op */ -#ifdef GL_EXT_blend_minmax - CONST_CAST(GLEW_EXT_blend_minmax) = _glewSearchExtension("GL_EXT_blend_minmax", extStart, extEnd); - if (glewExperimental || GLEW_EXT_blend_minmax) CONST_CAST(GLEW_EXT_blend_minmax) = !_glewInit_GL_EXT_blend_minmax(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_blend_minmax */ -#ifdef GL_EXT_blend_subtract - CONST_CAST(GLEW_EXT_blend_subtract) = _glewSearchExtension("GL_EXT_blend_subtract", extStart, extEnd); -#endif /* GL_EXT_blend_subtract */ -#ifdef GL_EXT_clip_volume_hint - CONST_CAST(GLEW_EXT_clip_volume_hint) = _glewSearchExtension("GL_EXT_clip_volume_hint", extStart, extEnd); -#endif /* GL_EXT_clip_volume_hint */ -#ifdef GL_EXT_cmyka - CONST_CAST(GLEW_EXT_cmyka) = _glewSearchExtension("GL_EXT_cmyka", extStart, extEnd); -#endif /* GL_EXT_cmyka */ -#ifdef GL_EXT_color_subtable - CONST_CAST(GLEW_EXT_color_subtable) = _glewSearchExtension("GL_EXT_color_subtable", extStart, extEnd); - if (glewExperimental || GLEW_EXT_color_subtable) CONST_CAST(GLEW_EXT_color_subtable) = !_glewInit_GL_EXT_color_subtable(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_color_subtable */ -#ifdef GL_EXT_compiled_vertex_array - CONST_CAST(GLEW_EXT_compiled_vertex_array) = _glewSearchExtension("GL_EXT_compiled_vertex_array", extStart, extEnd); - if (glewExperimental || GLEW_EXT_compiled_vertex_array) CONST_CAST(GLEW_EXT_compiled_vertex_array) = !_glewInit_GL_EXT_compiled_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_compiled_vertex_array */ -#ifdef GL_EXT_convolution - CONST_CAST(GLEW_EXT_convolution) = _glewSearchExtension("GL_EXT_convolution", extStart, extEnd); - if (glewExperimental || GLEW_EXT_convolution) CONST_CAST(GLEW_EXT_convolution) = !_glewInit_GL_EXT_convolution(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_convolution */ -#ifdef GL_EXT_coordinate_frame - CONST_CAST(GLEW_EXT_coordinate_frame) = _glewSearchExtension("GL_EXT_coordinate_frame", extStart, extEnd); - if (glewExperimental || GLEW_EXT_coordinate_frame) CONST_CAST(GLEW_EXT_coordinate_frame) = !_glewInit_GL_EXT_coordinate_frame(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_coordinate_frame */ -#ifdef GL_EXT_copy_texture - CONST_CAST(GLEW_EXT_copy_texture) = _glewSearchExtension("GL_EXT_copy_texture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_copy_texture) CONST_CAST(GLEW_EXT_copy_texture) = !_glewInit_GL_EXT_copy_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_copy_texture */ -#ifdef GL_EXT_cull_vertex - CONST_CAST(GLEW_EXT_cull_vertex) = _glewSearchExtension("GL_EXT_cull_vertex", extStart, extEnd); - if (glewExperimental || GLEW_EXT_cull_vertex) CONST_CAST(GLEW_EXT_cull_vertex) = !_glewInit_GL_EXT_cull_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_cull_vertex */ -#ifdef GL_EXT_debug_marker - CONST_CAST(GLEW_EXT_debug_marker) = _glewSearchExtension("GL_EXT_debug_marker", extStart, extEnd); - if (glewExperimental || GLEW_EXT_debug_marker) CONST_CAST(GLEW_EXT_debug_marker) = !_glewInit_GL_EXT_debug_marker(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_debug_marker */ -#ifdef GL_EXT_depth_bounds_test - CONST_CAST(GLEW_EXT_depth_bounds_test) = _glewSearchExtension("GL_EXT_depth_bounds_test", extStart, extEnd); - if (glewExperimental || GLEW_EXT_depth_bounds_test) CONST_CAST(GLEW_EXT_depth_bounds_test) = !_glewInit_GL_EXT_depth_bounds_test(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_depth_bounds_test */ -#ifdef GL_EXT_direct_state_access - CONST_CAST(GLEW_EXT_direct_state_access) = _glewSearchExtension("GL_EXT_direct_state_access", extStart, extEnd); - if (glewExperimental || GLEW_EXT_direct_state_access) CONST_CAST(GLEW_EXT_direct_state_access) = !_glewInit_GL_EXT_direct_state_access(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_direct_state_access */ -#ifdef GL_EXT_draw_buffers2 - CONST_CAST(GLEW_EXT_draw_buffers2) = _glewSearchExtension("GL_EXT_draw_buffers2", extStart, extEnd); - if (glewExperimental || GLEW_EXT_draw_buffers2) CONST_CAST(GLEW_EXT_draw_buffers2) = !_glewInit_GL_EXT_draw_buffers2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_draw_buffers2 */ -#ifdef GL_EXT_draw_instanced - CONST_CAST(GLEW_EXT_draw_instanced) = _glewSearchExtension("GL_EXT_draw_instanced", extStart, extEnd); - if (glewExperimental || GLEW_EXT_draw_instanced) CONST_CAST(GLEW_EXT_draw_instanced) = !_glewInit_GL_EXT_draw_instanced(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_draw_instanced */ -#ifdef GL_EXT_draw_range_elements - CONST_CAST(GLEW_EXT_draw_range_elements) = _glewSearchExtension("GL_EXT_draw_range_elements", extStart, extEnd); - if (glewExperimental || GLEW_EXT_draw_range_elements) CONST_CAST(GLEW_EXT_draw_range_elements) = !_glewInit_GL_EXT_draw_range_elements(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_draw_range_elements */ -#ifdef GL_EXT_fog_coord - CONST_CAST(GLEW_EXT_fog_coord) = _glewSearchExtension("GL_EXT_fog_coord", extStart, extEnd); - if (glewExperimental || GLEW_EXT_fog_coord) CONST_CAST(GLEW_EXT_fog_coord) = !_glewInit_GL_EXT_fog_coord(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_fog_coord */ -#ifdef GL_EXT_fragment_lighting - CONST_CAST(GLEW_EXT_fragment_lighting) = _glewSearchExtension("GL_EXT_fragment_lighting", extStart, extEnd); - if (glewExperimental || GLEW_EXT_fragment_lighting) CONST_CAST(GLEW_EXT_fragment_lighting) = !_glewInit_GL_EXT_fragment_lighting(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_fragment_lighting */ -#ifdef GL_EXT_framebuffer_blit - CONST_CAST(GLEW_EXT_framebuffer_blit) = _glewSearchExtension("GL_EXT_framebuffer_blit", extStart, extEnd); - if (glewExperimental || GLEW_EXT_framebuffer_blit) CONST_CAST(GLEW_EXT_framebuffer_blit) = !_glewInit_GL_EXT_framebuffer_blit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_framebuffer_blit */ -#ifdef GL_EXT_framebuffer_multisample - CONST_CAST(GLEW_EXT_framebuffer_multisample) = _glewSearchExtension("GL_EXT_framebuffer_multisample", extStart, extEnd); - if (glewExperimental || GLEW_EXT_framebuffer_multisample) CONST_CAST(GLEW_EXT_framebuffer_multisample) = !_glewInit_GL_EXT_framebuffer_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_framebuffer_multisample */ -#ifdef GL_EXT_framebuffer_multisample_blit_scaled - CONST_CAST(GLEW_EXT_framebuffer_multisample_blit_scaled) = _glewSearchExtension("GL_EXT_framebuffer_multisample_blit_scaled", extStart, extEnd); -#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ -#ifdef GL_EXT_framebuffer_object - CONST_CAST(GLEW_EXT_framebuffer_object) = _glewSearchExtension("GL_EXT_framebuffer_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_framebuffer_object) CONST_CAST(GLEW_EXT_framebuffer_object) = !_glewInit_GL_EXT_framebuffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_framebuffer_object */ -#ifdef GL_EXT_framebuffer_sRGB - CONST_CAST(GLEW_EXT_framebuffer_sRGB) = _glewSearchExtension("GL_EXT_framebuffer_sRGB", extStart, extEnd); -#endif /* GL_EXT_framebuffer_sRGB */ -#ifdef GL_EXT_geometry_shader4 - CONST_CAST(GLEW_EXT_geometry_shader4) = _glewSearchExtension("GL_EXT_geometry_shader4", extStart, extEnd); - if (glewExperimental || GLEW_EXT_geometry_shader4) CONST_CAST(GLEW_EXT_geometry_shader4) = !_glewInit_GL_EXT_geometry_shader4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_geometry_shader4 */ -#ifdef GL_EXT_gpu_program_parameters - CONST_CAST(GLEW_EXT_gpu_program_parameters) = _glewSearchExtension("GL_EXT_gpu_program_parameters", extStart, extEnd); - if (glewExperimental || GLEW_EXT_gpu_program_parameters) CONST_CAST(GLEW_EXT_gpu_program_parameters) = !_glewInit_GL_EXT_gpu_program_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_gpu_program_parameters */ -#ifdef GL_EXT_gpu_shader4 - CONST_CAST(GLEW_EXT_gpu_shader4) = _glewSearchExtension("GL_EXT_gpu_shader4", extStart, extEnd); - if (glewExperimental || GLEW_EXT_gpu_shader4) CONST_CAST(GLEW_EXT_gpu_shader4) = !_glewInit_GL_EXT_gpu_shader4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_gpu_shader4 */ -#ifdef GL_EXT_histogram - CONST_CAST(GLEW_EXT_histogram) = _glewSearchExtension("GL_EXT_histogram", extStart, extEnd); - if (glewExperimental || GLEW_EXT_histogram) CONST_CAST(GLEW_EXT_histogram) = !_glewInit_GL_EXT_histogram(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_histogram */ -#ifdef GL_EXT_index_array_formats - CONST_CAST(GLEW_EXT_index_array_formats) = _glewSearchExtension("GL_EXT_index_array_formats", extStart, extEnd); -#endif /* GL_EXT_index_array_formats */ -#ifdef GL_EXT_index_func - CONST_CAST(GLEW_EXT_index_func) = _glewSearchExtension("GL_EXT_index_func", extStart, extEnd); - if (glewExperimental || GLEW_EXT_index_func) CONST_CAST(GLEW_EXT_index_func) = !_glewInit_GL_EXT_index_func(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_index_func */ -#ifdef GL_EXT_index_material - CONST_CAST(GLEW_EXT_index_material) = _glewSearchExtension("GL_EXT_index_material", extStart, extEnd); - if (glewExperimental || GLEW_EXT_index_material) CONST_CAST(GLEW_EXT_index_material) = !_glewInit_GL_EXT_index_material(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_index_material */ -#ifdef GL_EXT_index_texture - CONST_CAST(GLEW_EXT_index_texture) = _glewSearchExtension("GL_EXT_index_texture", extStart, extEnd); -#endif /* GL_EXT_index_texture */ -#ifdef GL_EXT_light_texture - CONST_CAST(GLEW_EXT_light_texture) = _glewSearchExtension("GL_EXT_light_texture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_light_texture) CONST_CAST(GLEW_EXT_light_texture) = !_glewInit_GL_EXT_light_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_light_texture */ -#ifdef GL_EXT_misc_attribute - CONST_CAST(GLEW_EXT_misc_attribute) = _glewSearchExtension("GL_EXT_misc_attribute", extStart, extEnd); -#endif /* GL_EXT_misc_attribute */ -#ifdef GL_EXT_multi_draw_arrays - CONST_CAST(GLEW_EXT_multi_draw_arrays) = _glewSearchExtension("GL_EXT_multi_draw_arrays", extStart, extEnd); - if (glewExperimental || GLEW_EXT_multi_draw_arrays) CONST_CAST(GLEW_EXT_multi_draw_arrays) = !_glewInit_GL_EXT_multi_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_multi_draw_arrays */ -#ifdef GL_EXT_multisample - CONST_CAST(GLEW_EXT_multisample) = _glewSearchExtension("GL_EXT_multisample", extStart, extEnd); - if (glewExperimental || GLEW_EXT_multisample) CONST_CAST(GLEW_EXT_multisample) = !_glewInit_GL_EXT_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_multisample */ -#ifdef GL_EXT_packed_depth_stencil - CONST_CAST(GLEW_EXT_packed_depth_stencil) = _glewSearchExtension("GL_EXT_packed_depth_stencil", extStart, extEnd); -#endif /* GL_EXT_packed_depth_stencil */ -#ifdef GL_EXT_packed_float - CONST_CAST(GLEW_EXT_packed_float) = _glewSearchExtension("GL_EXT_packed_float", extStart, extEnd); -#endif /* GL_EXT_packed_float */ -#ifdef GL_EXT_packed_pixels - CONST_CAST(GLEW_EXT_packed_pixels) = _glewSearchExtension("GL_EXT_packed_pixels", extStart, extEnd); -#endif /* GL_EXT_packed_pixels */ -#ifdef GL_EXT_paletted_texture - CONST_CAST(GLEW_EXT_paletted_texture) = _glewSearchExtension("GL_EXT_paletted_texture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_paletted_texture) CONST_CAST(GLEW_EXT_paletted_texture) = !_glewInit_GL_EXT_paletted_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_paletted_texture */ -#ifdef GL_EXT_pixel_buffer_object - CONST_CAST(GLEW_EXT_pixel_buffer_object) = _glewSearchExtension("GL_EXT_pixel_buffer_object", extStart, extEnd); -#endif /* GL_EXT_pixel_buffer_object */ -#ifdef GL_EXT_pixel_transform - CONST_CAST(GLEW_EXT_pixel_transform) = _glewSearchExtension("GL_EXT_pixel_transform", extStart, extEnd); - if (glewExperimental || GLEW_EXT_pixel_transform) CONST_CAST(GLEW_EXT_pixel_transform) = !_glewInit_GL_EXT_pixel_transform(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_pixel_transform */ -#ifdef GL_EXT_pixel_transform_color_table - CONST_CAST(GLEW_EXT_pixel_transform_color_table) = _glewSearchExtension("GL_EXT_pixel_transform_color_table", extStart, extEnd); -#endif /* GL_EXT_pixel_transform_color_table */ -#ifdef GL_EXT_point_parameters - CONST_CAST(GLEW_EXT_point_parameters) = _glewSearchExtension("GL_EXT_point_parameters", extStart, extEnd); - if (glewExperimental || GLEW_EXT_point_parameters) CONST_CAST(GLEW_EXT_point_parameters) = !_glewInit_GL_EXT_point_parameters(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_point_parameters */ -#ifdef GL_EXT_polygon_offset - CONST_CAST(GLEW_EXT_polygon_offset) = _glewSearchExtension("GL_EXT_polygon_offset", extStart, extEnd); - if (glewExperimental || GLEW_EXT_polygon_offset) CONST_CAST(GLEW_EXT_polygon_offset) = !_glewInit_GL_EXT_polygon_offset(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_polygon_offset */ -#ifdef GL_EXT_provoking_vertex - CONST_CAST(GLEW_EXT_provoking_vertex) = _glewSearchExtension("GL_EXT_provoking_vertex", extStart, extEnd); - if (glewExperimental || GLEW_EXT_provoking_vertex) CONST_CAST(GLEW_EXT_provoking_vertex) = !_glewInit_GL_EXT_provoking_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_provoking_vertex */ -#ifdef GL_EXT_rescale_normal - CONST_CAST(GLEW_EXT_rescale_normal) = _glewSearchExtension("GL_EXT_rescale_normal", extStart, extEnd); -#endif /* GL_EXT_rescale_normal */ -#ifdef GL_EXT_scene_marker - CONST_CAST(GLEW_EXT_scene_marker) = _glewSearchExtension("GL_EXT_scene_marker", extStart, extEnd); - if (glewExperimental || GLEW_EXT_scene_marker) CONST_CAST(GLEW_EXT_scene_marker) = !_glewInit_GL_EXT_scene_marker(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_scene_marker */ -#ifdef GL_EXT_secondary_color - CONST_CAST(GLEW_EXT_secondary_color) = _glewSearchExtension("GL_EXT_secondary_color", extStart, extEnd); - if (glewExperimental || GLEW_EXT_secondary_color) CONST_CAST(GLEW_EXT_secondary_color) = !_glewInit_GL_EXT_secondary_color(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_secondary_color */ -#ifdef GL_EXT_separate_shader_objects - CONST_CAST(GLEW_EXT_separate_shader_objects) = _glewSearchExtension("GL_EXT_separate_shader_objects", extStart, extEnd); - if (glewExperimental || GLEW_EXT_separate_shader_objects) CONST_CAST(GLEW_EXT_separate_shader_objects) = !_glewInit_GL_EXT_separate_shader_objects(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_separate_shader_objects */ -#ifdef GL_EXT_separate_specular_color - CONST_CAST(GLEW_EXT_separate_specular_color) = _glewSearchExtension("GL_EXT_separate_specular_color", extStart, extEnd); -#endif /* GL_EXT_separate_specular_color */ -#ifdef GL_EXT_shader_image_load_store - CONST_CAST(GLEW_EXT_shader_image_load_store) = _glewSearchExtension("GL_EXT_shader_image_load_store", extStart, extEnd); - if (glewExperimental || GLEW_EXT_shader_image_load_store) CONST_CAST(GLEW_EXT_shader_image_load_store) = !_glewInit_GL_EXT_shader_image_load_store(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_shader_image_load_store */ -#ifdef GL_EXT_shadow_funcs - CONST_CAST(GLEW_EXT_shadow_funcs) = _glewSearchExtension("GL_EXT_shadow_funcs", extStart, extEnd); -#endif /* GL_EXT_shadow_funcs */ -#ifdef GL_EXT_shared_texture_palette - CONST_CAST(GLEW_EXT_shared_texture_palette) = _glewSearchExtension("GL_EXT_shared_texture_palette", extStart, extEnd); -#endif /* GL_EXT_shared_texture_palette */ -#ifdef GL_EXT_stencil_clear_tag - CONST_CAST(GLEW_EXT_stencil_clear_tag) = _glewSearchExtension("GL_EXT_stencil_clear_tag", extStart, extEnd); -#endif /* GL_EXT_stencil_clear_tag */ -#ifdef GL_EXT_stencil_two_side - CONST_CAST(GLEW_EXT_stencil_two_side) = _glewSearchExtension("GL_EXT_stencil_two_side", extStart, extEnd); - if (glewExperimental || GLEW_EXT_stencil_two_side) CONST_CAST(GLEW_EXT_stencil_two_side) = !_glewInit_GL_EXT_stencil_two_side(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_stencil_two_side */ -#ifdef GL_EXT_stencil_wrap - CONST_CAST(GLEW_EXT_stencil_wrap) = _glewSearchExtension("GL_EXT_stencil_wrap", extStart, extEnd); -#endif /* GL_EXT_stencil_wrap */ -#ifdef GL_EXT_subtexture - CONST_CAST(GLEW_EXT_subtexture) = _glewSearchExtension("GL_EXT_subtexture", extStart, extEnd); - if (glewExperimental || GLEW_EXT_subtexture) CONST_CAST(GLEW_EXT_subtexture) = !_glewInit_GL_EXT_subtexture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_subtexture */ -#ifdef GL_EXT_texture - CONST_CAST(GLEW_EXT_texture) = _glewSearchExtension("GL_EXT_texture", extStart, extEnd); -#endif /* GL_EXT_texture */ -#ifdef GL_EXT_texture3D - CONST_CAST(GLEW_EXT_texture3D) = _glewSearchExtension("GL_EXT_texture3D", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture3D) CONST_CAST(GLEW_EXT_texture3D) = !_glewInit_GL_EXT_texture3D(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture3D */ -#ifdef GL_EXT_texture_array - CONST_CAST(GLEW_EXT_texture_array) = _glewSearchExtension("GL_EXT_texture_array", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_array) CONST_CAST(GLEW_EXT_texture_array) = !_glewInit_GL_EXT_texture_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_array */ -#ifdef GL_EXT_texture_buffer_object - CONST_CAST(GLEW_EXT_texture_buffer_object) = _glewSearchExtension("GL_EXT_texture_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_buffer_object) CONST_CAST(GLEW_EXT_texture_buffer_object) = !_glewInit_GL_EXT_texture_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_buffer_object */ -#ifdef GL_EXT_texture_compression_dxt1 - CONST_CAST(GLEW_EXT_texture_compression_dxt1) = _glewSearchExtension("GL_EXT_texture_compression_dxt1", extStart, extEnd); -#endif /* GL_EXT_texture_compression_dxt1 */ -#ifdef GL_EXT_texture_compression_latc - CONST_CAST(GLEW_EXT_texture_compression_latc) = _glewSearchExtension("GL_EXT_texture_compression_latc", extStart, extEnd); -#endif /* GL_EXT_texture_compression_latc */ -#ifdef GL_EXT_texture_compression_rgtc - CONST_CAST(GLEW_EXT_texture_compression_rgtc) = _glewSearchExtension("GL_EXT_texture_compression_rgtc", extStart, extEnd); -#endif /* GL_EXT_texture_compression_rgtc */ -#ifdef GL_EXT_texture_compression_s3tc - CONST_CAST(GLEW_EXT_texture_compression_s3tc) = _glewSearchExtension("GL_EXT_texture_compression_s3tc", extStart, extEnd); -#endif /* GL_EXT_texture_compression_s3tc */ -#ifdef GL_EXT_texture_cube_map - CONST_CAST(GLEW_EXT_texture_cube_map) = _glewSearchExtension("GL_EXT_texture_cube_map", extStart, extEnd); -#endif /* GL_EXT_texture_cube_map */ -#ifdef GL_EXT_texture_edge_clamp - CONST_CAST(GLEW_EXT_texture_edge_clamp) = _glewSearchExtension("GL_EXT_texture_edge_clamp", extStart, extEnd); -#endif /* GL_EXT_texture_edge_clamp */ -#ifdef GL_EXT_texture_env - CONST_CAST(GLEW_EXT_texture_env) = _glewSearchExtension("GL_EXT_texture_env", extStart, extEnd); -#endif /* GL_EXT_texture_env */ -#ifdef GL_EXT_texture_env_add - CONST_CAST(GLEW_EXT_texture_env_add) = _glewSearchExtension("GL_EXT_texture_env_add", extStart, extEnd); -#endif /* GL_EXT_texture_env_add */ -#ifdef GL_EXT_texture_env_combine - CONST_CAST(GLEW_EXT_texture_env_combine) = _glewSearchExtension("GL_EXT_texture_env_combine", extStart, extEnd); -#endif /* GL_EXT_texture_env_combine */ -#ifdef GL_EXT_texture_env_dot3 - CONST_CAST(GLEW_EXT_texture_env_dot3) = _glewSearchExtension("GL_EXT_texture_env_dot3", extStart, extEnd); -#endif /* GL_EXT_texture_env_dot3 */ -#ifdef GL_EXT_texture_filter_anisotropic - CONST_CAST(GLEW_EXT_texture_filter_anisotropic) = _glewSearchExtension("GL_EXT_texture_filter_anisotropic", extStart, extEnd); -#endif /* GL_EXT_texture_filter_anisotropic */ -#ifdef GL_EXT_texture_integer - CONST_CAST(GLEW_EXT_texture_integer) = _glewSearchExtension("GL_EXT_texture_integer", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_integer) CONST_CAST(GLEW_EXT_texture_integer) = !_glewInit_GL_EXT_texture_integer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_integer */ -#ifdef GL_EXT_texture_lod_bias - CONST_CAST(GLEW_EXT_texture_lod_bias) = _glewSearchExtension("GL_EXT_texture_lod_bias", extStart, extEnd); -#endif /* GL_EXT_texture_lod_bias */ -#ifdef GL_EXT_texture_mirror_clamp - CONST_CAST(GLEW_EXT_texture_mirror_clamp) = _glewSearchExtension("GL_EXT_texture_mirror_clamp", extStart, extEnd); -#endif /* GL_EXT_texture_mirror_clamp */ -#ifdef GL_EXT_texture_object - CONST_CAST(GLEW_EXT_texture_object) = _glewSearchExtension("GL_EXT_texture_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_object) CONST_CAST(GLEW_EXT_texture_object) = !_glewInit_GL_EXT_texture_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_object */ -#ifdef GL_EXT_texture_perturb_normal - CONST_CAST(GLEW_EXT_texture_perturb_normal) = _glewSearchExtension("GL_EXT_texture_perturb_normal", extStart, extEnd); - if (glewExperimental || GLEW_EXT_texture_perturb_normal) CONST_CAST(GLEW_EXT_texture_perturb_normal) = !_glewInit_GL_EXT_texture_perturb_normal(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_texture_perturb_normal */ -#ifdef GL_EXT_texture_rectangle - CONST_CAST(GLEW_EXT_texture_rectangle) = _glewSearchExtension("GL_EXT_texture_rectangle", extStart, extEnd); -#endif /* GL_EXT_texture_rectangle */ -#ifdef GL_EXT_texture_sRGB - CONST_CAST(GLEW_EXT_texture_sRGB) = _glewSearchExtension("GL_EXT_texture_sRGB", extStart, extEnd); -#endif /* GL_EXT_texture_sRGB */ -#ifdef GL_EXT_texture_sRGB_decode - CONST_CAST(GLEW_EXT_texture_sRGB_decode) = _glewSearchExtension("GL_EXT_texture_sRGB_decode", extStart, extEnd); -#endif /* GL_EXT_texture_sRGB_decode */ -#ifdef GL_EXT_texture_shared_exponent - CONST_CAST(GLEW_EXT_texture_shared_exponent) = _glewSearchExtension("GL_EXT_texture_shared_exponent", extStart, extEnd); -#endif /* GL_EXT_texture_shared_exponent */ -#ifdef GL_EXT_texture_snorm - CONST_CAST(GLEW_EXT_texture_snorm) = _glewSearchExtension("GL_EXT_texture_snorm", extStart, extEnd); -#endif /* GL_EXT_texture_snorm */ -#ifdef GL_EXT_texture_swizzle - CONST_CAST(GLEW_EXT_texture_swizzle) = _glewSearchExtension("GL_EXT_texture_swizzle", extStart, extEnd); -#endif /* GL_EXT_texture_swizzle */ -#ifdef GL_EXT_timer_query - CONST_CAST(GLEW_EXT_timer_query) = _glewSearchExtension("GL_EXT_timer_query", extStart, extEnd); - if (glewExperimental || GLEW_EXT_timer_query) CONST_CAST(GLEW_EXT_timer_query) = !_glewInit_GL_EXT_timer_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_timer_query */ -#ifdef GL_EXT_transform_feedback - CONST_CAST(GLEW_EXT_transform_feedback) = _glewSearchExtension("GL_EXT_transform_feedback", extStart, extEnd); - if (glewExperimental || GLEW_EXT_transform_feedback) CONST_CAST(GLEW_EXT_transform_feedback) = !_glewInit_GL_EXT_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_transform_feedback */ -#ifdef GL_EXT_vertex_array - CONST_CAST(GLEW_EXT_vertex_array) = _glewSearchExtension("GL_EXT_vertex_array", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_array) CONST_CAST(GLEW_EXT_vertex_array) = !_glewInit_GL_EXT_vertex_array(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_array */ -#ifdef GL_EXT_vertex_array_bgra - CONST_CAST(GLEW_EXT_vertex_array_bgra) = _glewSearchExtension("GL_EXT_vertex_array_bgra", extStart, extEnd); -#endif /* GL_EXT_vertex_array_bgra */ -#ifdef GL_EXT_vertex_attrib_64bit - CONST_CAST(GLEW_EXT_vertex_attrib_64bit) = _glewSearchExtension("GL_EXT_vertex_attrib_64bit", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_attrib_64bit) CONST_CAST(GLEW_EXT_vertex_attrib_64bit) = !_glewInit_GL_EXT_vertex_attrib_64bit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_attrib_64bit */ -#ifdef GL_EXT_vertex_shader - CONST_CAST(GLEW_EXT_vertex_shader) = _glewSearchExtension("GL_EXT_vertex_shader", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_shader) CONST_CAST(GLEW_EXT_vertex_shader) = !_glewInit_GL_EXT_vertex_shader(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_shader */ -#ifdef GL_EXT_vertex_weighting - CONST_CAST(GLEW_EXT_vertex_weighting) = _glewSearchExtension("GL_EXT_vertex_weighting", extStart, extEnd); - if (glewExperimental || GLEW_EXT_vertex_weighting) CONST_CAST(GLEW_EXT_vertex_weighting) = !_glewInit_GL_EXT_vertex_weighting(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_vertex_weighting */ -#ifdef GL_EXT_x11_sync_object - CONST_CAST(GLEW_EXT_x11_sync_object) = _glewSearchExtension("GL_EXT_x11_sync_object", extStart, extEnd); - if (glewExperimental || GLEW_EXT_x11_sync_object) CONST_CAST(GLEW_EXT_x11_sync_object) = !_glewInit_GL_EXT_x11_sync_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_EXT_x11_sync_object */ -#ifdef GL_GREMEDY_frame_terminator - CONST_CAST(GLEW_GREMEDY_frame_terminator) = _glewSearchExtension("GL_GREMEDY_frame_terminator", extStart, extEnd); - if (glewExperimental || GLEW_GREMEDY_frame_terminator) CONST_CAST(GLEW_GREMEDY_frame_terminator) = !_glewInit_GL_GREMEDY_frame_terminator(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_GREMEDY_frame_terminator */ -#ifdef GL_GREMEDY_string_marker - CONST_CAST(GLEW_GREMEDY_string_marker) = _glewSearchExtension("GL_GREMEDY_string_marker", extStart, extEnd); - if (glewExperimental || GLEW_GREMEDY_string_marker) CONST_CAST(GLEW_GREMEDY_string_marker) = !_glewInit_GL_GREMEDY_string_marker(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_GREMEDY_string_marker */ -#ifdef GL_HP_convolution_border_modes - CONST_CAST(GLEW_HP_convolution_border_modes) = _glewSearchExtension("GL_HP_convolution_border_modes", extStart, extEnd); -#endif /* GL_HP_convolution_border_modes */ -#ifdef GL_HP_image_transform - CONST_CAST(GLEW_HP_image_transform) = _glewSearchExtension("GL_HP_image_transform", extStart, extEnd); - if (glewExperimental || GLEW_HP_image_transform) CONST_CAST(GLEW_HP_image_transform) = !_glewInit_GL_HP_image_transform(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_HP_image_transform */ -#ifdef GL_HP_occlusion_test - CONST_CAST(GLEW_HP_occlusion_test) = _glewSearchExtension("GL_HP_occlusion_test", extStart, extEnd); -#endif /* GL_HP_occlusion_test */ -#ifdef GL_HP_texture_lighting - CONST_CAST(GLEW_HP_texture_lighting) = _glewSearchExtension("GL_HP_texture_lighting", extStart, extEnd); -#endif /* GL_HP_texture_lighting */ -#ifdef GL_IBM_cull_vertex - CONST_CAST(GLEW_IBM_cull_vertex) = _glewSearchExtension("GL_IBM_cull_vertex", extStart, extEnd); -#endif /* GL_IBM_cull_vertex */ -#ifdef GL_IBM_multimode_draw_arrays - CONST_CAST(GLEW_IBM_multimode_draw_arrays) = _glewSearchExtension("GL_IBM_multimode_draw_arrays", extStart, extEnd); - if (glewExperimental || GLEW_IBM_multimode_draw_arrays) CONST_CAST(GLEW_IBM_multimode_draw_arrays) = !_glewInit_GL_IBM_multimode_draw_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_IBM_multimode_draw_arrays */ -#ifdef GL_IBM_rasterpos_clip - CONST_CAST(GLEW_IBM_rasterpos_clip) = _glewSearchExtension("GL_IBM_rasterpos_clip", extStart, extEnd); -#endif /* GL_IBM_rasterpos_clip */ -#ifdef GL_IBM_static_data - CONST_CAST(GLEW_IBM_static_data) = _glewSearchExtension("GL_IBM_static_data", extStart, extEnd); -#endif /* GL_IBM_static_data */ -#ifdef GL_IBM_texture_mirrored_repeat - CONST_CAST(GLEW_IBM_texture_mirrored_repeat) = _glewSearchExtension("GL_IBM_texture_mirrored_repeat", extStart, extEnd); -#endif /* GL_IBM_texture_mirrored_repeat */ -#ifdef GL_IBM_vertex_array_lists - CONST_CAST(GLEW_IBM_vertex_array_lists) = _glewSearchExtension("GL_IBM_vertex_array_lists", extStart, extEnd); - if (glewExperimental || GLEW_IBM_vertex_array_lists) CONST_CAST(GLEW_IBM_vertex_array_lists) = !_glewInit_GL_IBM_vertex_array_lists(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_IBM_vertex_array_lists */ -#ifdef GL_INGR_color_clamp - CONST_CAST(GLEW_INGR_color_clamp) = _glewSearchExtension("GL_INGR_color_clamp", extStart, extEnd); -#endif /* GL_INGR_color_clamp */ -#ifdef GL_INGR_interlace_read - CONST_CAST(GLEW_INGR_interlace_read) = _glewSearchExtension("GL_INGR_interlace_read", extStart, extEnd); -#endif /* GL_INGR_interlace_read */ -#ifdef GL_INTEL_map_texture - CONST_CAST(GLEW_INTEL_map_texture) = _glewSearchExtension("GL_INTEL_map_texture", extStart, extEnd); - if (glewExperimental || GLEW_INTEL_map_texture) CONST_CAST(GLEW_INTEL_map_texture) = !_glewInit_GL_INTEL_map_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_INTEL_map_texture */ -#ifdef GL_INTEL_parallel_arrays - CONST_CAST(GLEW_INTEL_parallel_arrays) = _glewSearchExtension("GL_INTEL_parallel_arrays", extStart, extEnd); - if (glewExperimental || GLEW_INTEL_parallel_arrays) CONST_CAST(GLEW_INTEL_parallel_arrays) = !_glewInit_GL_INTEL_parallel_arrays(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_INTEL_parallel_arrays */ -#ifdef GL_INTEL_texture_scissor - CONST_CAST(GLEW_INTEL_texture_scissor) = _glewSearchExtension("GL_INTEL_texture_scissor", extStart, extEnd); - if (glewExperimental || GLEW_INTEL_texture_scissor) CONST_CAST(GLEW_INTEL_texture_scissor) = !_glewInit_GL_INTEL_texture_scissor(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_INTEL_texture_scissor */ -#ifdef GL_KHR_debug - CONST_CAST(GLEW_KHR_debug) = _glewSearchExtension("GL_KHR_debug", extStart, extEnd); - if (glewExperimental || GLEW_KHR_debug) CONST_CAST(GLEW_KHR_debug) = !_glewInit_GL_KHR_debug(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_KHR_debug */ -#ifdef GL_KHR_texture_compression_astc_ldr - CONST_CAST(GLEW_KHR_texture_compression_astc_ldr) = _glewSearchExtension("GL_KHR_texture_compression_astc_ldr", extStart, extEnd); -#endif /* GL_KHR_texture_compression_astc_ldr */ -#ifdef GL_KTX_buffer_region - CONST_CAST(GLEW_KTX_buffer_region) = _glewSearchExtension("GL_KTX_buffer_region", extStart, extEnd); - if (glewExperimental || GLEW_KTX_buffer_region) CONST_CAST(GLEW_KTX_buffer_region) = !_glewInit_GL_KTX_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_KTX_buffer_region */ -#ifdef GL_MESAX_texture_stack - CONST_CAST(GLEW_MESAX_texture_stack) = _glewSearchExtension("GL_MESAX_texture_stack", extStart, extEnd); -#endif /* GL_MESAX_texture_stack */ -#ifdef GL_MESA_pack_invert - CONST_CAST(GLEW_MESA_pack_invert) = _glewSearchExtension("GL_MESA_pack_invert", extStart, extEnd); -#endif /* GL_MESA_pack_invert */ -#ifdef GL_MESA_resize_buffers - CONST_CAST(GLEW_MESA_resize_buffers) = _glewSearchExtension("GL_MESA_resize_buffers", extStart, extEnd); - if (glewExperimental || GLEW_MESA_resize_buffers) CONST_CAST(GLEW_MESA_resize_buffers) = !_glewInit_GL_MESA_resize_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_MESA_resize_buffers */ -#ifdef GL_MESA_window_pos - CONST_CAST(GLEW_MESA_window_pos) = _glewSearchExtension("GL_MESA_window_pos", extStart, extEnd); - if (glewExperimental || GLEW_MESA_window_pos) CONST_CAST(GLEW_MESA_window_pos) = !_glewInit_GL_MESA_window_pos(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_MESA_window_pos */ -#ifdef GL_MESA_ycbcr_texture - CONST_CAST(GLEW_MESA_ycbcr_texture) = _glewSearchExtension("GL_MESA_ycbcr_texture", extStart, extEnd); -#endif /* GL_MESA_ycbcr_texture */ -#ifdef GL_NVX_conditional_render - CONST_CAST(GLEW_NVX_conditional_render) = _glewSearchExtension("GL_NVX_conditional_render", extStart, extEnd); - if (glewExperimental || GLEW_NVX_conditional_render) CONST_CAST(GLEW_NVX_conditional_render) = !_glewInit_GL_NVX_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NVX_conditional_render */ -#ifdef GL_NVX_gpu_memory_info - CONST_CAST(GLEW_NVX_gpu_memory_info) = _glewSearchExtension("GL_NVX_gpu_memory_info", extStart, extEnd); -#endif /* GL_NVX_gpu_memory_info */ -#ifdef GL_NV_bindless_multi_draw_indirect - CONST_CAST(GLEW_NV_bindless_multi_draw_indirect) = _glewSearchExtension("GL_NV_bindless_multi_draw_indirect", extStart, extEnd); - if (glewExperimental || GLEW_NV_bindless_multi_draw_indirect) CONST_CAST(GLEW_NV_bindless_multi_draw_indirect) = !_glewInit_GL_NV_bindless_multi_draw_indirect(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_bindless_multi_draw_indirect */ -#ifdef GL_NV_bindless_texture - CONST_CAST(GLEW_NV_bindless_texture) = _glewSearchExtension("GL_NV_bindless_texture", extStart, extEnd); - if (glewExperimental || GLEW_NV_bindless_texture) CONST_CAST(GLEW_NV_bindless_texture) = !_glewInit_GL_NV_bindless_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_bindless_texture */ -#ifdef GL_NV_blend_equation_advanced - CONST_CAST(GLEW_NV_blend_equation_advanced) = _glewSearchExtension("GL_NV_blend_equation_advanced", extStart, extEnd); - if (glewExperimental || GLEW_NV_blend_equation_advanced) CONST_CAST(GLEW_NV_blend_equation_advanced) = !_glewInit_GL_NV_blend_equation_advanced(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_blend_equation_advanced */ -#ifdef GL_NV_blend_equation_advanced_coherent - CONST_CAST(GLEW_NV_blend_equation_advanced_coherent) = _glewSearchExtension("GL_NV_blend_equation_advanced_coherent", extStart, extEnd); -#endif /* GL_NV_blend_equation_advanced_coherent */ -#ifdef GL_NV_blend_square - CONST_CAST(GLEW_NV_blend_square) = _glewSearchExtension("GL_NV_blend_square", extStart, extEnd); -#endif /* GL_NV_blend_square */ -#ifdef GL_NV_compute_program5 - CONST_CAST(GLEW_NV_compute_program5) = _glewSearchExtension("GL_NV_compute_program5", extStart, extEnd); -#endif /* GL_NV_compute_program5 */ -#ifdef GL_NV_conditional_render - CONST_CAST(GLEW_NV_conditional_render) = _glewSearchExtension("GL_NV_conditional_render", extStart, extEnd); - if (glewExperimental || GLEW_NV_conditional_render) CONST_CAST(GLEW_NV_conditional_render) = !_glewInit_GL_NV_conditional_render(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_conditional_render */ -#ifdef GL_NV_copy_depth_to_color - CONST_CAST(GLEW_NV_copy_depth_to_color) = _glewSearchExtension("GL_NV_copy_depth_to_color", extStart, extEnd); -#endif /* GL_NV_copy_depth_to_color */ -#ifdef GL_NV_copy_image - CONST_CAST(GLEW_NV_copy_image) = _glewSearchExtension("GL_NV_copy_image", extStart, extEnd); - if (glewExperimental || GLEW_NV_copy_image) CONST_CAST(GLEW_NV_copy_image) = !_glewInit_GL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_copy_image */ -#ifdef GL_NV_deep_texture3D - CONST_CAST(GLEW_NV_deep_texture3D) = _glewSearchExtension("GL_NV_deep_texture3D", extStart, extEnd); -#endif /* GL_NV_deep_texture3D */ -#ifdef GL_NV_depth_buffer_float - CONST_CAST(GLEW_NV_depth_buffer_float) = _glewSearchExtension("GL_NV_depth_buffer_float", extStart, extEnd); - if (glewExperimental || GLEW_NV_depth_buffer_float) CONST_CAST(GLEW_NV_depth_buffer_float) = !_glewInit_GL_NV_depth_buffer_float(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_depth_buffer_float */ -#ifdef GL_NV_depth_clamp - CONST_CAST(GLEW_NV_depth_clamp) = _glewSearchExtension("GL_NV_depth_clamp", extStart, extEnd); -#endif /* GL_NV_depth_clamp */ -#ifdef GL_NV_depth_range_unclamped - CONST_CAST(GLEW_NV_depth_range_unclamped) = _glewSearchExtension("GL_NV_depth_range_unclamped", extStart, extEnd); -#endif /* GL_NV_depth_range_unclamped */ -#ifdef GL_NV_draw_texture - CONST_CAST(GLEW_NV_draw_texture) = _glewSearchExtension("GL_NV_draw_texture", extStart, extEnd); - if (glewExperimental || GLEW_NV_draw_texture) CONST_CAST(GLEW_NV_draw_texture) = !_glewInit_GL_NV_draw_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_draw_texture */ -#ifdef GL_NV_evaluators - CONST_CAST(GLEW_NV_evaluators) = _glewSearchExtension("GL_NV_evaluators", extStart, extEnd); - if (glewExperimental || GLEW_NV_evaluators) CONST_CAST(GLEW_NV_evaluators) = !_glewInit_GL_NV_evaluators(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_evaluators */ -#ifdef GL_NV_explicit_multisample - CONST_CAST(GLEW_NV_explicit_multisample) = _glewSearchExtension("GL_NV_explicit_multisample", extStart, extEnd); - if (glewExperimental || GLEW_NV_explicit_multisample) CONST_CAST(GLEW_NV_explicit_multisample) = !_glewInit_GL_NV_explicit_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_explicit_multisample */ -#ifdef GL_NV_fence - CONST_CAST(GLEW_NV_fence) = _glewSearchExtension("GL_NV_fence", extStart, extEnd); - if (glewExperimental || GLEW_NV_fence) CONST_CAST(GLEW_NV_fence) = !_glewInit_GL_NV_fence(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_fence */ -#ifdef GL_NV_float_buffer - CONST_CAST(GLEW_NV_float_buffer) = _glewSearchExtension("GL_NV_float_buffer", extStart, extEnd); -#endif /* GL_NV_float_buffer */ -#ifdef GL_NV_fog_distance - CONST_CAST(GLEW_NV_fog_distance) = _glewSearchExtension("GL_NV_fog_distance", extStart, extEnd); -#endif /* GL_NV_fog_distance */ -#ifdef GL_NV_fragment_program - CONST_CAST(GLEW_NV_fragment_program) = _glewSearchExtension("GL_NV_fragment_program", extStart, extEnd); - if (glewExperimental || GLEW_NV_fragment_program) CONST_CAST(GLEW_NV_fragment_program) = !_glewInit_GL_NV_fragment_program(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_fragment_program */ -#ifdef GL_NV_fragment_program2 - CONST_CAST(GLEW_NV_fragment_program2) = _glewSearchExtension("GL_NV_fragment_program2", extStart, extEnd); -#endif /* GL_NV_fragment_program2 */ -#ifdef GL_NV_fragment_program4 - CONST_CAST(GLEW_NV_fragment_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); -#endif /* GL_NV_fragment_program4 */ -#ifdef GL_NV_fragment_program_option - CONST_CAST(GLEW_NV_fragment_program_option) = _glewSearchExtension("GL_NV_fragment_program_option", extStart, extEnd); -#endif /* GL_NV_fragment_program_option */ -#ifdef GL_NV_framebuffer_multisample_coverage - CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = _glewSearchExtension("GL_NV_framebuffer_multisample_coverage", extStart, extEnd); - if (glewExperimental || GLEW_NV_framebuffer_multisample_coverage) CONST_CAST(GLEW_NV_framebuffer_multisample_coverage) = !_glewInit_GL_NV_framebuffer_multisample_coverage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_framebuffer_multisample_coverage */ -#ifdef GL_NV_geometry_program4 - CONST_CAST(GLEW_NV_geometry_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); - if (glewExperimental || GLEW_NV_geometry_program4) CONST_CAST(GLEW_NV_geometry_program4) = !_glewInit_GL_NV_geometry_program4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_geometry_program4 */ -#ifdef GL_NV_geometry_shader4 - CONST_CAST(GLEW_NV_geometry_shader4) = _glewSearchExtension("GL_NV_geometry_shader4", extStart, extEnd); -#endif /* GL_NV_geometry_shader4 */ -#ifdef GL_NV_gpu_program4 - CONST_CAST(GLEW_NV_gpu_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); - if (glewExperimental || GLEW_NV_gpu_program4) CONST_CAST(GLEW_NV_gpu_program4) = !_glewInit_GL_NV_gpu_program4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_gpu_program4 */ -#ifdef GL_NV_gpu_program5 - CONST_CAST(GLEW_NV_gpu_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); -#endif /* GL_NV_gpu_program5 */ -#ifdef GL_NV_gpu_program5_mem_extended - CONST_CAST(GLEW_NV_gpu_program5_mem_extended) = _glewSearchExtension("GL_NV_gpu_program5_mem_extended", extStart, extEnd); -#endif /* GL_NV_gpu_program5_mem_extended */ -#ifdef GL_NV_gpu_program_fp64 - CONST_CAST(GLEW_NV_gpu_program_fp64) = _glewSearchExtension("GL_NV_gpu_program_fp64", extStart, extEnd); -#endif /* GL_NV_gpu_program_fp64 */ -#ifdef GL_NV_gpu_shader5 - CONST_CAST(GLEW_NV_gpu_shader5) = _glewSearchExtension("GL_NV_gpu_shader5", extStart, extEnd); - if (glewExperimental || GLEW_NV_gpu_shader5) CONST_CAST(GLEW_NV_gpu_shader5) = !_glewInit_GL_NV_gpu_shader5(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_gpu_shader5 */ -#ifdef GL_NV_half_float - CONST_CAST(GLEW_NV_half_float) = _glewSearchExtension("GL_NV_half_float", extStart, extEnd); - if (glewExperimental || GLEW_NV_half_float) CONST_CAST(GLEW_NV_half_float) = !_glewInit_GL_NV_half_float(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_half_float */ -#ifdef GL_NV_light_max_exponent - CONST_CAST(GLEW_NV_light_max_exponent) = _glewSearchExtension("GL_NV_light_max_exponent", extStart, extEnd); -#endif /* GL_NV_light_max_exponent */ -#ifdef GL_NV_multisample_coverage - CONST_CAST(GLEW_NV_multisample_coverage) = _glewSearchExtension("GL_NV_multisample_coverage", extStart, extEnd); -#endif /* GL_NV_multisample_coverage */ -#ifdef GL_NV_multisample_filter_hint - CONST_CAST(GLEW_NV_multisample_filter_hint) = _glewSearchExtension("GL_NV_multisample_filter_hint", extStart, extEnd); -#endif /* GL_NV_multisample_filter_hint */ -#ifdef GL_NV_occlusion_query - CONST_CAST(GLEW_NV_occlusion_query) = _glewSearchExtension("GL_NV_occlusion_query", extStart, extEnd); - if (glewExperimental || GLEW_NV_occlusion_query) CONST_CAST(GLEW_NV_occlusion_query) = !_glewInit_GL_NV_occlusion_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_occlusion_query */ -#ifdef GL_NV_packed_depth_stencil - CONST_CAST(GLEW_NV_packed_depth_stencil) = _glewSearchExtension("GL_NV_packed_depth_stencil", extStart, extEnd); -#endif /* GL_NV_packed_depth_stencil */ -#ifdef GL_NV_parameter_buffer_object - CONST_CAST(GLEW_NV_parameter_buffer_object) = _glewSearchExtension("GL_NV_parameter_buffer_object", extStart, extEnd); - if (glewExperimental || GLEW_NV_parameter_buffer_object) CONST_CAST(GLEW_NV_parameter_buffer_object) = !_glewInit_GL_NV_parameter_buffer_object(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_parameter_buffer_object */ -#ifdef GL_NV_parameter_buffer_object2 - CONST_CAST(GLEW_NV_parameter_buffer_object2) = _glewSearchExtension("GL_NV_parameter_buffer_object2", extStart, extEnd); -#endif /* GL_NV_parameter_buffer_object2 */ -#ifdef GL_NV_path_rendering - CONST_CAST(GLEW_NV_path_rendering) = _glewSearchExtension("GL_NV_path_rendering", extStart, extEnd); - if (glewExperimental || GLEW_NV_path_rendering) CONST_CAST(GLEW_NV_path_rendering) = !_glewInit_GL_NV_path_rendering(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_path_rendering */ -#ifdef GL_NV_pixel_data_range - CONST_CAST(GLEW_NV_pixel_data_range) = _glewSearchExtension("GL_NV_pixel_data_range", extStart, extEnd); - if (glewExperimental || GLEW_NV_pixel_data_range) CONST_CAST(GLEW_NV_pixel_data_range) = !_glewInit_GL_NV_pixel_data_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_pixel_data_range */ -#ifdef GL_NV_point_sprite - CONST_CAST(GLEW_NV_point_sprite) = _glewSearchExtension("GL_NV_point_sprite", extStart, extEnd); - if (glewExperimental || GLEW_NV_point_sprite) CONST_CAST(GLEW_NV_point_sprite) = !_glewInit_GL_NV_point_sprite(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_point_sprite */ -#ifdef GL_NV_present_video - CONST_CAST(GLEW_NV_present_video) = _glewSearchExtension("GL_NV_present_video", extStart, extEnd); - if (glewExperimental || GLEW_NV_present_video) CONST_CAST(GLEW_NV_present_video) = !_glewInit_GL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_present_video */ -#ifdef GL_NV_primitive_restart - CONST_CAST(GLEW_NV_primitive_restart) = _glewSearchExtension("GL_NV_primitive_restart", extStart, extEnd); - if (glewExperimental || GLEW_NV_primitive_restart) CONST_CAST(GLEW_NV_primitive_restart) = !_glewInit_GL_NV_primitive_restart(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_primitive_restart */ -#ifdef GL_NV_register_combiners - CONST_CAST(GLEW_NV_register_combiners) = _glewSearchExtension("GL_NV_register_combiners", extStart, extEnd); - if (glewExperimental || GLEW_NV_register_combiners) CONST_CAST(GLEW_NV_register_combiners) = !_glewInit_GL_NV_register_combiners(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_register_combiners */ -#ifdef GL_NV_register_combiners2 - CONST_CAST(GLEW_NV_register_combiners2) = _glewSearchExtension("GL_NV_register_combiners2", extStart, extEnd); - if (glewExperimental || GLEW_NV_register_combiners2) CONST_CAST(GLEW_NV_register_combiners2) = !_glewInit_GL_NV_register_combiners2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_register_combiners2 */ -#ifdef GL_NV_shader_atomic_counters - CONST_CAST(GLEW_NV_shader_atomic_counters) = _glewSearchExtension("GL_NV_shader_atomic_counters", extStart, extEnd); -#endif /* GL_NV_shader_atomic_counters */ -#ifdef GL_NV_shader_atomic_float - CONST_CAST(GLEW_NV_shader_atomic_float) = _glewSearchExtension("GL_NV_shader_atomic_float", extStart, extEnd); -#endif /* GL_NV_shader_atomic_float */ -#ifdef GL_NV_shader_buffer_load - CONST_CAST(GLEW_NV_shader_buffer_load) = _glewSearchExtension("GL_NV_shader_buffer_load", extStart, extEnd); - if (glewExperimental || GLEW_NV_shader_buffer_load) CONST_CAST(GLEW_NV_shader_buffer_load) = !_glewInit_GL_NV_shader_buffer_load(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_shader_buffer_load */ -#ifdef GL_NV_shader_storage_buffer_object - CONST_CAST(GLEW_NV_shader_storage_buffer_object) = _glewSearchExtension("GL_NV_shader_storage_buffer_object", extStart, extEnd); -#endif /* GL_NV_shader_storage_buffer_object */ -#ifdef GL_NV_tessellation_program5 - CONST_CAST(GLEW_NV_tessellation_program5) = _glewSearchExtension("GL_NV_gpu_program5", extStart, extEnd); -#endif /* GL_NV_tessellation_program5 */ -#ifdef GL_NV_texgen_emboss - CONST_CAST(GLEW_NV_texgen_emboss) = _glewSearchExtension("GL_NV_texgen_emboss", extStart, extEnd); -#endif /* GL_NV_texgen_emboss */ -#ifdef GL_NV_texgen_reflection - CONST_CAST(GLEW_NV_texgen_reflection) = _glewSearchExtension("GL_NV_texgen_reflection", extStart, extEnd); -#endif /* GL_NV_texgen_reflection */ -#ifdef GL_NV_texture_barrier - CONST_CAST(GLEW_NV_texture_barrier) = _glewSearchExtension("GL_NV_texture_barrier", extStart, extEnd); - if (glewExperimental || GLEW_NV_texture_barrier) CONST_CAST(GLEW_NV_texture_barrier) = !_glewInit_GL_NV_texture_barrier(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_texture_barrier */ -#ifdef GL_NV_texture_compression_vtc - CONST_CAST(GLEW_NV_texture_compression_vtc) = _glewSearchExtension("GL_NV_texture_compression_vtc", extStart, extEnd); -#endif /* GL_NV_texture_compression_vtc */ -#ifdef GL_NV_texture_env_combine4 - CONST_CAST(GLEW_NV_texture_env_combine4) = _glewSearchExtension("GL_NV_texture_env_combine4", extStart, extEnd); -#endif /* GL_NV_texture_env_combine4 */ -#ifdef GL_NV_texture_expand_normal - CONST_CAST(GLEW_NV_texture_expand_normal) = _glewSearchExtension("GL_NV_texture_expand_normal", extStart, extEnd); -#endif /* GL_NV_texture_expand_normal */ -#ifdef GL_NV_texture_multisample - CONST_CAST(GLEW_NV_texture_multisample) = _glewSearchExtension("GL_NV_texture_multisample", extStart, extEnd); - if (glewExperimental || GLEW_NV_texture_multisample) CONST_CAST(GLEW_NV_texture_multisample) = !_glewInit_GL_NV_texture_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_texture_multisample */ -#ifdef GL_NV_texture_rectangle - CONST_CAST(GLEW_NV_texture_rectangle) = _glewSearchExtension("GL_NV_texture_rectangle", extStart, extEnd); -#endif /* GL_NV_texture_rectangle */ -#ifdef GL_NV_texture_shader - CONST_CAST(GLEW_NV_texture_shader) = _glewSearchExtension("GL_NV_texture_shader", extStart, extEnd); -#endif /* GL_NV_texture_shader */ -#ifdef GL_NV_texture_shader2 - CONST_CAST(GLEW_NV_texture_shader2) = _glewSearchExtension("GL_NV_texture_shader2", extStart, extEnd); -#endif /* GL_NV_texture_shader2 */ -#ifdef GL_NV_texture_shader3 - CONST_CAST(GLEW_NV_texture_shader3) = _glewSearchExtension("GL_NV_texture_shader3", extStart, extEnd); -#endif /* GL_NV_texture_shader3 */ -#ifdef GL_NV_transform_feedback - CONST_CAST(GLEW_NV_transform_feedback) = _glewSearchExtension("GL_NV_transform_feedback", extStart, extEnd); - if (glewExperimental || GLEW_NV_transform_feedback) CONST_CAST(GLEW_NV_transform_feedback) = !_glewInit_GL_NV_transform_feedback(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_transform_feedback */ -#ifdef GL_NV_transform_feedback2 - CONST_CAST(GLEW_NV_transform_feedback2) = _glewSearchExtension("GL_NV_transform_feedback2", extStart, extEnd); - if (glewExperimental || GLEW_NV_transform_feedback2) CONST_CAST(GLEW_NV_transform_feedback2) = !_glewInit_GL_NV_transform_feedback2(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_transform_feedback2 */ -#ifdef GL_NV_vdpau_interop - CONST_CAST(GLEW_NV_vdpau_interop) = _glewSearchExtension("GL_NV_vdpau_interop", extStart, extEnd); - if (glewExperimental || GLEW_NV_vdpau_interop) CONST_CAST(GLEW_NV_vdpau_interop) = !_glewInit_GL_NV_vdpau_interop(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vdpau_interop */ -#ifdef GL_NV_vertex_array_range - CONST_CAST(GLEW_NV_vertex_array_range) = _glewSearchExtension("GL_NV_vertex_array_range", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_array_range) CONST_CAST(GLEW_NV_vertex_array_range) = !_glewInit_GL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_array_range */ -#ifdef GL_NV_vertex_array_range2 - CONST_CAST(GLEW_NV_vertex_array_range2) = _glewSearchExtension("GL_NV_vertex_array_range2", extStart, extEnd); -#endif /* GL_NV_vertex_array_range2 */ -#ifdef GL_NV_vertex_attrib_integer_64bit - CONST_CAST(GLEW_NV_vertex_attrib_integer_64bit) = _glewSearchExtension("GL_NV_vertex_attrib_integer_64bit", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_attrib_integer_64bit) CONST_CAST(GLEW_NV_vertex_attrib_integer_64bit) = !_glewInit_GL_NV_vertex_attrib_integer_64bit(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_attrib_integer_64bit */ -#ifdef GL_NV_vertex_buffer_unified_memory - CONST_CAST(GLEW_NV_vertex_buffer_unified_memory) = _glewSearchExtension("GL_NV_vertex_buffer_unified_memory", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_buffer_unified_memory) CONST_CAST(GLEW_NV_vertex_buffer_unified_memory) = !_glewInit_GL_NV_vertex_buffer_unified_memory(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_buffer_unified_memory */ -#ifdef GL_NV_vertex_program - CONST_CAST(GLEW_NV_vertex_program) = _glewSearchExtension("GL_NV_vertex_program", extStart, extEnd); - if (glewExperimental || GLEW_NV_vertex_program) CONST_CAST(GLEW_NV_vertex_program) = !_glewInit_GL_NV_vertex_program(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_vertex_program */ -#ifdef GL_NV_vertex_program1_1 - CONST_CAST(GLEW_NV_vertex_program1_1) = _glewSearchExtension("GL_NV_vertex_program1_1", extStart, extEnd); -#endif /* GL_NV_vertex_program1_1 */ -#ifdef GL_NV_vertex_program2 - CONST_CAST(GLEW_NV_vertex_program2) = _glewSearchExtension("GL_NV_vertex_program2", extStart, extEnd); -#endif /* GL_NV_vertex_program2 */ -#ifdef GL_NV_vertex_program2_option - CONST_CAST(GLEW_NV_vertex_program2_option) = _glewSearchExtension("GL_NV_vertex_program2_option", extStart, extEnd); -#endif /* GL_NV_vertex_program2_option */ -#ifdef GL_NV_vertex_program3 - CONST_CAST(GLEW_NV_vertex_program3) = _glewSearchExtension("GL_NV_vertex_program3", extStart, extEnd); -#endif /* GL_NV_vertex_program3 */ -#ifdef GL_NV_vertex_program4 - CONST_CAST(GLEW_NV_vertex_program4) = _glewSearchExtension("GL_NV_gpu_program4", extStart, extEnd); -#endif /* GL_NV_vertex_program4 */ -#ifdef GL_NV_video_capture - CONST_CAST(GLEW_NV_video_capture) = _glewSearchExtension("GL_NV_video_capture", extStart, extEnd); - if (glewExperimental || GLEW_NV_video_capture) CONST_CAST(GLEW_NV_video_capture) = !_glewInit_GL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_NV_video_capture */ -#ifdef GL_OES_byte_coordinates - CONST_CAST(GLEW_OES_byte_coordinates) = _glewSearchExtension("GL_OES_byte_coordinates", extStart, extEnd); -#endif /* GL_OES_byte_coordinates */ -#ifdef GL_OES_compressed_paletted_texture - CONST_CAST(GLEW_OES_compressed_paletted_texture) = _glewSearchExtension("GL_OES_compressed_paletted_texture", extStart, extEnd); -#endif /* GL_OES_compressed_paletted_texture */ -#ifdef GL_OES_read_format - CONST_CAST(GLEW_OES_read_format) = _glewSearchExtension("GL_OES_read_format", extStart, extEnd); -#endif /* GL_OES_read_format */ -#ifdef GL_OES_single_precision - CONST_CAST(GLEW_OES_single_precision) = _glewSearchExtension("GL_OES_single_precision", extStart, extEnd); - if (glewExperimental || GLEW_OES_single_precision) CONST_CAST(GLEW_OES_single_precision) = !_glewInit_GL_OES_single_precision(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_OES_single_precision */ -#ifdef GL_OML_interlace - CONST_CAST(GLEW_OML_interlace) = _glewSearchExtension("GL_OML_interlace", extStart, extEnd); -#endif /* GL_OML_interlace */ -#ifdef GL_OML_resample - CONST_CAST(GLEW_OML_resample) = _glewSearchExtension("GL_OML_resample", extStart, extEnd); -#endif /* GL_OML_resample */ -#ifdef GL_OML_subsample - CONST_CAST(GLEW_OML_subsample) = _glewSearchExtension("GL_OML_subsample", extStart, extEnd); -#endif /* GL_OML_subsample */ -#ifdef GL_PGI_misc_hints - CONST_CAST(GLEW_PGI_misc_hints) = _glewSearchExtension("GL_PGI_misc_hints", extStart, extEnd); -#endif /* GL_PGI_misc_hints */ -#ifdef GL_PGI_vertex_hints - CONST_CAST(GLEW_PGI_vertex_hints) = _glewSearchExtension("GL_PGI_vertex_hints", extStart, extEnd); -#endif /* GL_PGI_vertex_hints */ -#ifdef GL_REGAL_ES1_0_compatibility - CONST_CAST(GLEW_REGAL_ES1_0_compatibility) = _glewSearchExtension("GL_REGAL_ES1_0_compatibility", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_ES1_0_compatibility) CONST_CAST(GLEW_REGAL_ES1_0_compatibility) = !_glewInit_GL_REGAL_ES1_0_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_ES1_0_compatibility */ -#ifdef GL_REGAL_ES1_1_compatibility - CONST_CAST(GLEW_REGAL_ES1_1_compatibility) = _glewSearchExtension("GL_REGAL_ES1_1_compatibility", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_ES1_1_compatibility) CONST_CAST(GLEW_REGAL_ES1_1_compatibility) = !_glewInit_GL_REGAL_ES1_1_compatibility(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_ES1_1_compatibility */ -#ifdef GL_REGAL_enable - CONST_CAST(GLEW_REGAL_enable) = _glewSearchExtension("GL_REGAL_enable", extStart, extEnd); -#endif /* GL_REGAL_enable */ -#ifdef GL_REGAL_error_string - CONST_CAST(GLEW_REGAL_error_string) = _glewSearchExtension("GL_REGAL_error_string", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_error_string) CONST_CAST(GLEW_REGAL_error_string) = !_glewInit_GL_REGAL_error_string(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_error_string */ -#ifdef GL_REGAL_extension_query - CONST_CAST(GLEW_REGAL_extension_query) = _glewSearchExtension("GL_REGAL_extension_query", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_extension_query) CONST_CAST(GLEW_REGAL_extension_query) = !_glewInit_GL_REGAL_extension_query(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_extension_query */ -#ifdef GL_REGAL_log - CONST_CAST(GLEW_REGAL_log) = _glewSearchExtension("GL_REGAL_log", extStart, extEnd); - if (glewExperimental || GLEW_REGAL_log) CONST_CAST(GLEW_REGAL_log) = !_glewInit_GL_REGAL_log(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_REGAL_log */ -#ifdef GL_REND_screen_coordinates - CONST_CAST(GLEW_REND_screen_coordinates) = _glewSearchExtension("GL_REND_screen_coordinates", extStart, extEnd); -#endif /* GL_REND_screen_coordinates */ -#ifdef GL_S3_s3tc - CONST_CAST(GLEW_S3_s3tc) = _glewSearchExtension("GL_S3_s3tc", extStart, extEnd); -#endif /* GL_S3_s3tc */ -#ifdef GL_SGIS_color_range - CONST_CAST(GLEW_SGIS_color_range) = _glewSearchExtension("GL_SGIS_color_range", extStart, extEnd); -#endif /* GL_SGIS_color_range */ -#ifdef GL_SGIS_detail_texture - CONST_CAST(GLEW_SGIS_detail_texture) = _glewSearchExtension("GL_SGIS_detail_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_detail_texture) CONST_CAST(GLEW_SGIS_detail_texture) = !_glewInit_GL_SGIS_detail_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_detail_texture */ -#ifdef GL_SGIS_fog_function - CONST_CAST(GLEW_SGIS_fog_function) = _glewSearchExtension("GL_SGIS_fog_function", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_fog_function) CONST_CAST(GLEW_SGIS_fog_function) = !_glewInit_GL_SGIS_fog_function(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_fog_function */ -#ifdef GL_SGIS_generate_mipmap - CONST_CAST(GLEW_SGIS_generate_mipmap) = _glewSearchExtension("GL_SGIS_generate_mipmap", extStart, extEnd); -#endif /* GL_SGIS_generate_mipmap */ -#ifdef GL_SGIS_multisample - CONST_CAST(GLEW_SGIS_multisample) = _glewSearchExtension("GL_SGIS_multisample", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_multisample) CONST_CAST(GLEW_SGIS_multisample) = !_glewInit_GL_SGIS_multisample(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_multisample */ -#ifdef GL_SGIS_pixel_texture - CONST_CAST(GLEW_SGIS_pixel_texture) = _glewSearchExtension("GL_SGIS_pixel_texture", extStart, extEnd); -#endif /* GL_SGIS_pixel_texture */ -#ifdef GL_SGIS_point_line_texgen - CONST_CAST(GLEW_SGIS_point_line_texgen) = _glewSearchExtension("GL_SGIS_point_line_texgen", extStart, extEnd); -#endif /* GL_SGIS_point_line_texgen */ -#ifdef GL_SGIS_sharpen_texture - CONST_CAST(GLEW_SGIS_sharpen_texture) = _glewSearchExtension("GL_SGIS_sharpen_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_sharpen_texture) CONST_CAST(GLEW_SGIS_sharpen_texture) = !_glewInit_GL_SGIS_sharpen_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_sharpen_texture */ -#ifdef GL_SGIS_texture4D - CONST_CAST(GLEW_SGIS_texture4D) = _glewSearchExtension("GL_SGIS_texture4D", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_texture4D) CONST_CAST(GLEW_SGIS_texture4D) = !_glewInit_GL_SGIS_texture4D(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_texture4D */ -#ifdef GL_SGIS_texture_border_clamp - CONST_CAST(GLEW_SGIS_texture_border_clamp) = _glewSearchExtension("GL_SGIS_texture_border_clamp", extStart, extEnd); -#endif /* GL_SGIS_texture_border_clamp */ -#ifdef GL_SGIS_texture_edge_clamp - CONST_CAST(GLEW_SGIS_texture_edge_clamp) = _glewSearchExtension("GL_SGIS_texture_edge_clamp", extStart, extEnd); -#endif /* GL_SGIS_texture_edge_clamp */ -#ifdef GL_SGIS_texture_filter4 - CONST_CAST(GLEW_SGIS_texture_filter4) = _glewSearchExtension("GL_SGIS_texture_filter4", extStart, extEnd); - if (glewExperimental || GLEW_SGIS_texture_filter4) CONST_CAST(GLEW_SGIS_texture_filter4) = !_glewInit_GL_SGIS_texture_filter4(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIS_texture_filter4 */ -#ifdef GL_SGIS_texture_lod - CONST_CAST(GLEW_SGIS_texture_lod) = _glewSearchExtension("GL_SGIS_texture_lod", extStart, extEnd); -#endif /* GL_SGIS_texture_lod */ -#ifdef GL_SGIS_texture_select - CONST_CAST(GLEW_SGIS_texture_select) = _glewSearchExtension("GL_SGIS_texture_select", extStart, extEnd); -#endif /* GL_SGIS_texture_select */ -#ifdef GL_SGIX_async - CONST_CAST(GLEW_SGIX_async) = _glewSearchExtension("GL_SGIX_async", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_async) CONST_CAST(GLEW_SGIX_async) = !_glewInit_GL_SGIX_async(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_async */ -#ifdef GL_SGIX_async_histogram - CONST_CAST(GLEW_SGIX_async_histogram) = _glewSearchExtension("GL_SGIX_async_histogram", extStart, extEnd); -#endif /* GL_SGIX_async_histogram */ -#ifdef GL_SGIX_async_pixel - CONST_CAST(GLEW_SGIX_async_pixel) = _glewSearchExtension("GL_SGIX_async_pixel", extStart, extEnd); -#endif /* GL_SGIX_async_pixel */ -#ifdef GL_SGIX_blend_alpha_minmax - CONST_CAST(GLEW_SGIX_blend_alpha_minmax) = _glewSearchExtension("GL_SGIX_blend_alpha_minmax", extStart, extEnd); -#endif /* GL_SGIX_blend_alpha_minmax */ -#ifdef GL_SGIX_clipmap - CONST_CAST(GLEW_SGIX_clipmap) = _glewSearchExtension("GL_SGIX_clipmap", extStart, extEnd); -#endif /* GL_SGIX_clipmap */ -#ifdef GL_SGIX_convolution_accuracy - CONST_CAST(GLEW_SGIX_convolution_accuracy) = _glewSearchExtension("GL_SGIX_convolution_accuracy", extStart, extEnd); -#endif /* GL_SGIX_convolution_accuracy */ -#ifdef GL_SGIX_depth_texture - CONST_CAST(GLEW_SGIX_depth_texture) = _glewSearchExtension("GL_SGIX_depth_texture", extStart, extEnd); -#endif /* GL_SGIX_depth_texture */ -#ifdef GL_SGIX_flush_raster - CONST_CAST(GLEW_SGIX_flush_raster) = _glewSearchExtension("GL_SGIX_flush_raster", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_flush_raster) CONST_CAST(GLEW_SGIX_flush_raster) = !_glewInit_GL_SGIX_flush_raster(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_flush_raster */ -#ifdef GL_SGIX_fog_offset - CONST_CAST(GLEW_SGIX_fog_offset) = _glewSearchExtension("GL_SGIX_fog_offset", extStart, extEnd); -#endif /* GL_SGIX_fog_offset */ -#ifdef GL_SGIX_fog_texture - CONST_CAST(GLEW_SGIX_fog_texture) = _glewSearchExtension("GL_SGIX_fog_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_fog_texture) CONST_CAST(GLEW_SGIX_fog_texture) = !_glewInit_GL_SGIX_fog_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_fog_texture */ -#ifdef GL_SGIX_fragment_specular_lighting - CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = _glewSearchExtension("GL_SGIX_fragment_specular_lighting", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_fragment_specular_lighting) CONST_CAST(GLEW_SGIX_fragment_specular_lighting) = !_glewInit_GL_SGIX_fragment_specular_lighting(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_fragment_specular_lighting */ -#ifdef GL_SGIX_framezoom - CONST_CAST(GLEW_SGIX_framezoom) = _glewSearchExtension("GL_SGIX_framezoom", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_framezoom) CONST_CAST(GLEW_SGIX_framezoom) = !_glewInit_GL_SGIX_framezoom(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_framezoom */ -#ifdef GL_SGIX_interlace - CONST_CAST(GLEW_SGIX_interlace) = _glewSearchExtension("GL_SGIX_interlace", extStart, extEnd); -#endif /* GL_SGIX_interlace */ -#ifdef GL_SGIX_ir_instrument1 - CONST_CAST(GLEW_SGIX_ir_instrument1) = _glewSearchExtension("GL_SGIX_ir_instrument1", extStart, extEnd); -#endif /* GL_SGIX_ir_instrument1 */ -#ifdef GL_SGIX_list_priority - CONST_CAST(GLEW_SGIX_list_priority) = _glewSearchExtension("GL_SGIX_list_priority", extStart, extEnd); -#endif /* GL_SGIX_list_priority */ -#ifdef GL_SGIX_pixel_texture - CONST_CAST(GLEW_SGIX_pixel_texture) = _glewSearchExtension("GL_SGIX_pixel_texture", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_pixel_texture) CONST_CAST(GLEW_SGIX_pixel_texture) = !_glewInit_GL_SGIX_pixel_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_pixel_texture */ -#ifdef GL_SGIX_pixel_texture_bits - CONST_CAST(GLEW_SGIX_pixel_texture_bits) = _glewSearchExtension("GL_SGIX_pixel_texture_bits", extStart, extEnd); -#endif /* GL_SGIX_pixel_texture_bits */ -#ifdef GL_SGIX_reference_plane - CONST_CAST(GLEW_SGIX_reference_plane) = _glewSearchExtension("GL_SGIX_reference_plane", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_reference_plane) CONST_CAST(GLEW_SGIX_reference_plane) = !_glewInit_GL_SGIX_reference_plane(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_reference_plane */ -#ifdef GL_SGIX_resample - CONST_CAST(GLEW_SGIX_resample) = _glewSearchExtension("GL_SGIX_resample", extStart, extEnd); -#endif /* GL_SGIX_resample */ -#ifdef GL_SGIX_shadow - CONST_CAST(GLEW_SGIX_shadow) = _glewSearchExtension("GL_SGIX_shadow", extStart, extEnd); -#endif /* GL_SGIX_shadow */ -#ifdef GL_SGIX_shadow_ambient - CONST_CAST(GLEW_SGIX_shadow_ambient) = _glewSearchExtension("GL_SGIX_shadow_ambient", extStart, extEnd); -#endif /* GL_SGIX_shadow_ambient */ -#ifdef GL_SGIX_sprite - CONST_CAST(GLEW_SGIX_sprite) = _glewSearchExtension("GL_SGIX_sprite", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_sprite) CONST_CAST(GLEW_SGIX_sprite) = !_glewInit_GL_SGIX_sprite(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_sprite */ -#ifdef GL_SGIX_tag_sample_buffer - CONST_CAST(GLEW_SGIX_tag_sample_buffer) = _glewSearchExtension("GL_SGIX_tag_sample_buffer", extStart, extEnd); - if (glewExperimental || GLEW_SGIX_tag_sample_buffer) CONST_CAST(GLEW_SGIX_tag_sample_buffer) = !_glewInit_GL_SGIX_tag_sample_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGIX_tag_sample_buffer */ -#ifdef GL_SGIX_texture_add_env - CONST_CAST(GLEW_SGIX_texture_add_env) = _glewSearchExtension("GL_SGIX_texture_add_env", extStart, extEnd); -#endif /* GL_SGIX_texture_add_env */ -#ifdef GL_SGIX_texture_coordinate_clamp - CONST_CAST(GLEW_SGIX_texture_coordinate_clamp) = _glewSearchExtension("GL_SGIX_texture_coordinate_clamp", extStart, extEnd); -#endif /* GL_SGIX_texture_coordinate_clamp */ -#ifdef GL_SGIX_texture_lod_bias - CONST_CAST(GLEW_SGIX_texture_lod_bias) = _glewSearchExtension("GL_SGIX_texture_lod_bias", extStart, extEnd); -#endif /* GL_SGIX_texture_lod_bias */ -#ifdef GL_SGIX_texture_multi_buffer - CONST_CAST(GLEW_SGIX_texture_multi_buffer) = _glewSearchExtension("GL_SGIX_texture_multi_buffer", extStart, extEnd); -#endif /* GL_SGIX_texture_multi_buffer */ -#ifdef GL_SGIX_texture_range - CONST_CAST(GLEW_SGIX_texture_range) = _glewSearchExtension("GL_SGIX_texture_range", extStart, extEnd); -#endif /* GL_SGIX_texture_range */ -#ifdef GL_SGIX_texture_scale_bias - CONST_CAST(GLEW_SGIX_texture_scale_bias) = _glewSearchExtension("GL_SGIX_texture_scale_bias", extStart, extEnd); -#endif /* GL_SGIX_texture_scale_bias */ -#ifdef GL_SGIX_vertex_preclip - CONST_CAST(GLEW_SGIX_vertex_preclip) = _glewSearchExtension("GL_SGIX_vertex_preclip", extStart, extEnd); -#endif /* GL_SGIX_vertex_preclip */ -#ifdef GL_SGIX_vertex_preclip_hint - CONST_CAST(GLEW_SGIX_vertex_preclip_hint) = _glewSearchExtension("GL_SGIX_vertex_preclip_hint", extStart, extEnd); -#endif /* GL_SGIX_vertex_preclip_hint */ -#ifdef GL_SGIX_ycrcb - CONST_CAST(GLEW_SGIX_ycrcb) = _glewSearchExtension("GL_SGIX_ycrcb", extStart, extEnd); -#endif /* GL_SGIX_ycrcb */ -#ifdef GL_SGI_color_matrix - CONST_CAST(GLEW_SGI_color_matrix) = _glewSearchExtension("GL_SGI_color_matrix", extStart, extEnd); -#endif /* GL_SGI_color_matrix */ -#ifdef GL_SGI_color_table - CONST_CAST(GLEW_SGI_color_table) = _glewSearchExtension("GL_SGI_color_table", extStart, extEnd); - if (glewExperimental || GLEW_SGI_color_table) CONST_CAST(GLEW_SGI_color_table) = !_glewInit_GL_SGI_color_table(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SGI_color_table */ -#ifdef GL_SGI_texture_color_table - CONST_CAST(GLEW_SGI_texture_color_table) = _glewSearchExtension("GL_SGI_texture_color_table", extStart, extEnd); -#endif /* GL_SGI_texture_color_table */ -#ifdef GL_SUNX_constant_data - CONST_CAST(GLEW_SUNX_constant_data) = _glewSearchExtension("GL_SUNX_constant_data", extStart, extEnd); - if (glewExperimental || GLEW_SUNX_constant_data) CONST_CAST(GLEW_SUNX_constant_data) = !_glewInit_GL_SUNX_constant_data(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUNX_constant_data */ -#ifdef GL_SUN_convolution_border_modes - CONST_CAST(GLEW_SUN_convolution_border_modes) = _glewSearchExtension("GL_SUN_convolution_border_modes", extStart, extEnd); -#endif /* GL_SUN_convolution_border_modes */ -#ifdef GL_SUN_global_alpha - CONST_CAST(GLEW_SUN_global_alpha) = _glewSearchExtension("GL_SUN_global_alpha", extStart, extEnd); - if (glewExperimental || GLEW_SUN_global_alpha) CONST_CAST(GLEW_SUN_global_alpha) = !_glewInit_GL_SUN_global_alpha(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_global_alpha */ -#ifdef GL_SUN_mesh_array - CONST_CAST(GLEW_SUN_mesh_array) = _glewSearchExtension("GL_SUN_mesh_array", extStart, extEnd); -#endif /* GL_SUN_mesh_array */ -#ifdef GL_SUN_read_video_pixels - CONST_CAST(GLEW_SUN_read_video_pixels) = _glewSearchExtension("GL_SUN_read_video_pixels", extStart, extEnd); - if (glewExperimental || GLEW_SUN_read_video_pixels) CONST_CAST(GLEW_SUN_read_video_pixels) = !_glewInit_GL_SUN_read_video_pixels(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_read_video_pixels */ -#ifdef GL_SUN_slice_accum - CONST_CAST(GLEW_SUN_slice_accum) = _glewSearchExtension("GL_SUN_slice_accum", extStart, extEnd); -#endif /* GL_SUN_slice_accum */ -#ifdef GL_SUN_triangle_list - CONST_CAST(GLEW_SUN_triangle_list) = _glewSearchExtension("GL_SUN_triangle_list", extStart, extEnd); - if (glewExperimental || GLEW_SUN_triangle_list) CONST_CAST(GLEW_SUN_triangle_list) = !_glewInit_GL_SUN_triangle_list(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_triangle_list */ -#ifdef GL_SUN_vertex - CONST_CAST(GLEW_SUN_vertex) = _glewSearchExtension("GL_SUN_vertex", extStart, extEnd); - if (glewExperimental || GLEW_SUN_vertex) CONST_CAST(GLEW_SUN_vertex) = !_glewInit_GL_SUN_vertex(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_SUN_vertex */ -#ifdef GL_WIN_phong_shading - CONST_CAST(GLEW_WIN_phong_shading) = _glewSearchExtension("GL_WIN_phong_shading", extStart, extEnd); -#endif /* GL_WIN_phong_shading */ -#ifdef GL_WIN_specular_fog - CONST_CAST(GLEW_WIN_specular_fog) = _glewSearchExtension("GL_WIN_specular_fog", extStart, extEnd); -#endif /* GL_WIN_specular_fog */ -#ifdef GL_WIN_swap_hint - CONST_CAST(GLEW_WIN_swap_hint) = _glewSearchExtension("GL_WIN_swap_hint", extStart, extEnd); - if (glewExperimental || GLEW_WIN_swap_hint) CONST_CAST(GLEW_WIN_swap_hint) = !_glewInit_GL_WIN_swap_hint(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GL_WIN_swap_hint */ - - return GLEW_OK; -} - - -#if defined(_WIN32) - -#if !defined(GLEW_MX) - -PFNWGLSETSTEREOEMITTERSTATE3DLPROC __wglewSetStereoEmitterState3DL = NULL; - -PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC __wglewBlitContextFramebufferAMD = NULL; -PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC __wglewCreateAssociatedContextAMD = NULL; -PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __wglewCreateAssociatedContextAttribsAMD = NULL; -PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC __wglewDeleteAssociatedContextAMD = NULL; -PFNWGLGETCONTEXTGPUIDAMDPROC __wglewGetContextGPUIDAMD = NULL; -PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC __wglewGetCurrentAssociatedContextAMD = NULL; -PFNWGLGETGPUIDSAMDPROC __wglewGetGPUIDsAMD = NULL; -PFNWGLGETGPUINFOAMDPROC __wglewGetGPUInfoAMD = NULL; -PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __wglewMakeAssociatedContextCurrentAMD = NULL; - -PFNWGLCREATEBUFFERREGIONARBPROC __wglewCreateBufferRegionARB = NULL; -PFNWGLDELETEBUFFERREGIONARBPROC __wglewDeleteBufferRegionARB = NULL; -PFNWGLRESTOREBUFFERREGIONARBPROC __wglewRestoreBufferRegionARB = NULL; -PFNWGLSAVEBUFFERREGIONARBPROC __wglewSaveBufferRegionARB = NULL; - -PFNWGLCREATECONTEXTATTRIBSARBPROC __wglewCreateContextAttribsARB = NULL; - -PFNWGLGETEXTENSIONSSTRINGARBPROC __wglewGetExtensionsStringARB = NULL; - -PFNWGLGETCURRENTREADDCARBPROC __wglewGetCurrentReadDCARB = NULL; -PFNWGLMAKECONTEXTCURRENTARBPROC __wglewMakeContextCurrentARB = NULL; - -PFNWGLCREATEPBUFFERARBPROC __wglewCreatePbufferARB = NULL; -PFNWGLDESTROYPBUFFERARBPROC __wglewDestroyPbufferARB = NULL; -PFNWGLGETPBUFFERDCARBPROC __wglewGetPbufferDCARB = NULL; -PFNWGLQUERYPBUFFERARBPROC __wglewQueryPbufferARB = NULL; -PFNWGLRELEASEPBUFFERDCARBPROC __wglewReleasePbufferDCARB = NULL; - -PFNWGLCHOOSEPIXELFORMATARBPROC __wglewChoosePixelFormatARB = NULL; -PFNWGLGETPIXELFORMATATTRIBFVARBPROC __wglewGetPixelFormatAttribfvARB = NULL; -PFNWGLGETPIXELFORMATATTRIBIVARBPROC __wglewGetPixelFormatAttribivARB = NULL; - -PFNWGLBINDTEXIMAGEARBPROC __wglewBindTexImageARB = NULL; -PFNWGLRELEASETEXIMAGEARBPROC __wglewReleaseTexImageARB = NULL; -PFNWGLSETPBUFFERATTRIBARBPROC __wglewSetPbufferAttribARB = NULL; - -PFNWGLBINDDISPLAYCOLORTABLEEXTPROC __wglewBindDisplayColorTableEXT = NULL; -PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC __wglewCreateDisplayColorTableEXT = NULL; -PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC __wglewDestroyDisplayColorTableEXT = NULL; -PFNWGLLOADDISPLAYCOLORTABLEEXTPROC __wglewLoadDisplayColorTableEXT = NULL; - -PFNWGLGETEXTENSIONSSTRINGEXTPROC __wglewGetExtensionsStringEXT = NULL; - -PFNWGLGETCURRENTREADDCEXTPROC __wglewGetCurrentReadDCEXT = NULL; -PFNWGLMAKECONTEXTCURRENTEXTPROC __wglewMakeContextCurrentEXT = NULL; - -PFNWGLCREATEPBUFFEREXTPROC __wglewCreatePbufferEXT = NULL; -PFNWGLDESTROYPBUFFEREXTPROC __wglewDestroyPbufferEXT = NULL; -PFNWGLGETPBUFFERDCEXTPROC __wglewGetPbufferDCEXT = NULL; -PFNWGLQUERYPBUFFEREXTPROC __wglewQueryPbufferEXT = NULL; -PFNWGLRELEASEPBUFFERDCEXTPROC __wglewReleasePbufferDCEXT = NULL; - -PFNWGLCHOOSEPIXELFORMATEXTPROC __wglewChoosePixelFormatEXT = NULL; -PFNWGLGETPIXELFORMATATTRIBFVEXTPROC __wglewGetPixelFormatAttribfvEXT = NULL; -PFNWGLGETPIXELFORMATATTRIBIVEXTPROC __wglewGetPixelFormatAttribivEXT = NULL; - -PFNWGLGETSWAPINTERVALEXTPROC __wglewGetSwapIntervalEXT = NULL; -PFNWGLSWAPINTERVALEXTPROC __wglewSwapIntervalEXT = NULL; - -PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC __wglewGetDigitalVideoParametersI3D = NULL; -PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC __wglewSetDigitalVideoParametersI3D = NULL; - -PFNWGLGETGAMMATABLEI3DPROC __wglewGetGammaTableI3D = NULL; -PFNWGLGETGAMMATABLEPARAMETERSI3DPROC __wglewGetGammaTableParametersI3D = NULL; -PFNWGLSETGAMMATABLEI3DPROC __wglewSetGammaTableI3D = NULL; -PFNWGLSETGAMMATABLEPARAMETERSI3DPROC __wglewSetGammaTableParametersI3D = NULL; - -PFNWGLDISABLEGENLOCKI3DPROC __wglewDisableGenlockI3D = NULL; -PFNWGLENABLEGENLOCKI3DPROC __wglewEnableGenlockI3D = NULL; -PFNWGLGENLOCKSAMPLERATEI3DPROC __wglewGenlockSampleRateI3D = NULL; -PFNWGLGENLOCKSOURCEDELAYI3DPROC __wglewGenlockSourceDelayI3D = NULL; -PFNWGLGENLOCKSOURCEEDGEI3DPROC __wglewGenlockSourceEdgeI3D = NULL; -PFNWGLGENLOCKSOURCEI3DPROC __wglewGenlockSourceI3D = NULL; -PFNWGLGETGENLOCKSAMPLERATEI3DPROC __wglewGetGenlockSampleRateI3D = NULL; -PFNWGLGETGENLOCKSOURCEDELAYI3DPROC __wglewGetGenlockSourceDelayI3D = NULL; -PFNWGLGETGENLOCKSOURCEEDGEI3DPROC __wglewGetGenlockSourceEdgeI3D = NULL; -PFNWGLGETGENLOCKSOURCEI3DPROC __wglewGetGenlockSourceI3D = NULL; -PFNWGLISENABLEDGENLOCKI3DPROC __wglewIsEnabledGenlockI3D = NULL; -PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC __wglewQueryGenlockMaxSourceDelayI3D = NULL; - -PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC __wglewAssociateImageBufferEventsI3D = NULL; -PFNWGLCREATEIMAGEBUFFERI3DPROC __wglewCreateImageBufferI3D = NULL; -PFNWGLDESTROYIMAGEBUFFERI3DPROC __wglewDestroyImageBufferI3D = NULL; -PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC __wglewReleaseImageBufferEventsI3D = NULL; - -PFNWGLDISABLEFRAMELOCKI3DPROC __wglewDisableFrameLockI3D = NULL; -PFNWGLENABLEFRAMELOCKI3DPROC __wglewEnableFrameLockI3D = NULL; -PFNWGLISENABLEDFRAMELOCKI3DPROC __wglewIsEnabledFrameLockI3D = NULL; -PFNWGLQUERYFRAMELOCKMASTERI3DPROC __wglewQueryFrameLockMasterI3D = NULL; - -PFNWGLBEGINFRAMETRACKINGI3DPROC __wglewBeginFrameTrackingI3D = NULL; -PFNWGLENDFRAMETRACKINGI3DPROC __wglewEndFrameTrackingI3D = NULL; -PFNWGLGETFRAMEUSAGEI3DPROC __wglewGetFrameUsageI3D = NULL; -PFNWGLQUERYFRAMETRACKINGI3DPROC __wglewQueryFrameTrackingI3D = NULL; - -PFNWGLDXCLOSEDEVICENVPROC __wglewDXCloseDeviceNV = NULL; -PFNWGLDXLOCKOBJECTSNVPROC __wglewDXLockObjectsNV = NULL; -PFNWGLDXOBJECTACCESSNVPROC __wglewDXObjectAccessNV = NULL; -PFNWGLDXOPENDEVICENVPROC __wglewDXOpenDeviceNV = NULL; -PFNWGLDXREGISTEROBJECTNVPROC __wglewDXRegisterObjectNV = NULL; -PFNWGLDXSETRESOURCESHAREHANDLENVPROC __wglewDXSetResourceShareHandleNV = NULL; -PFNWGLDXUNLOCKOBJECTSNVPROC __wglewDXUnlockObjectsNV = NULL; -PFNWGLDXUNREGISTEROBJECTNVPROC __wglewDXUnregisterObjectNV = NULL; - -PFNWGLCOPYIMAGESUBDATANVPROC __wglewCopyImageSubDataNV = NULL; - -PFNWGLCREATEAFFINITYDCNVPROC __wglewCreateAffinityDCNV = NULL; -PFNWGLDELETEDCNVPROC __wglewDeleteDCNV = NULL; -PFNWGLENUMGPUDEVICESNVPROC __wglewEnumGpuDevicesNV = NULL; -PFNWGLENUMGPUSFROMAFFINITYDCNVPROC __wglewEnumGpusFromAffinityDCNV = NULL; -PFNWGLENUMGPUSNVPROC __wglewEnumGpusNV = NULL; - -PFNWGLBINDVIDEODEVICENVPROC __wglewBindVideoDeviceNV = NULL; -PFNWGLENUMERATEVIDEODEVICESNVPROC __wglewEnumerateVideoDevicesNV = NULL; -PFNWGLQUERYCURRENTCONTEXTNVPROC __wglewQueryCurrentContextNV = NULL; - -PFNWGLBINDSWAPBARRIERNVPROC __wglewBindSwapBarrierNV = NULL; -PFNWGLJOINSWAPGROUPNVPROC __wglewJoinSwapGroupNV = NULL; -PFNWGLQUERYFRAMECOUNTNVPROC __wglewQueryFrameCountNV = NULL; -PFNWGLQUERYMAXSWAPGROUPSNVPROC __wglewQueryMaxSwapGroupsNV = NULL; -PFNWGLQUERYSWAPGROUPNVPROC __wglewQuerySwapGroupNV = NULL; -PFNWGLRESETFRAMECOUNTNVPROC __wglewResetFrameCountNV = NULL; - -PFNWGLALLOCATEMEMORYNVPROC __wglewAllocateMemoryNV = NULL; -PFNWGLFREEMEMORYNVPROC __wglewFreeMemoryNV = NULL; - -PFNWGLBINDVIDEOCAPTUREDEVICENVPROC __wglewBindVideoCaptureDeviceNV = NULL; -PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC __wglewEnumerateVideoCaptureDevicesNV = NULL; -PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC __wglewLockVideoCaptureDeviceNV = NULL; -PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC __wglewQueryVideoCaptureDeviceNV = NULL; -PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC __wglewReleaseVideoCaptureDeviceNV = NULL; - -PFNWGLBINDVIDEOIMAGENVPROC __wglewBindVideoImageNV = NULL; -PFNWGLGETVIDEODEVICENVPROC __wglewGetVideoDeviceNV = NULL; -PFNWGLGETVIDEOINFONVPROC __wglewGetVideoInfoNV = NULL; -PFNWGLRELEASEVIDEODEVICENVPROC __wglewReleaseVideoDeviceNV = NULL; -PFNWGLRELEASEVIDEOIMAGENVPROC __wglewReleaseVideoImageNV = NULL; -PFNWGLSENDPBUFFERTOVIDEONVPROC __wglewSendPbufferToVideoNV = NULL; - -PFNWGLGETMSCRATEOMLPROC __wglewGetMscRateOML = NULL; -PFNWGLGETSYNCVALUESOMLPROC __wglewGetSyncValuesOML = NULL; -PFNWGLSWAPBUFFERSMSCOMLPROC __wglewSwapBuffersMscOML = NULL; -PFNWGLSWAPLAYERBUFFERSMSCOMLPROC __wglewSwapLayerBuffersMscOML = NULL; -PFNWGLWAITFORMSCOMLPROC __wglewWaitForMscOML = NULL; -PFNWGLWAITFORSBCOMLPROC __wglewWaitForSbcOML = NULL; -GLboolean __WGLEW_3DFX_multisample = GL_FALSE; -GLboolean __WGLEW_3DL_stereo_control = GL_FALSE; -GLboolean __WGLEW_AMD_gpu_association = GL_FALSE; -GLboolean __WGLEW_ARB_buffer_region = GL_FALSE; -GLboolean __WGLEW_ARB_create_context = GL_FALSE; -GLboolean __WGLEW_ARB_create_context_profile = GL_FALSE; -GLboolean __WGLEW_ARB_create_context_robustness = GL_FALSE; -GLboolean __WGLEW_ARB_extensions_string = GL_FALSE; -GLboolean __WGLEW_ARB_framebuffer_sRGB = GL_FALSE; -GLboolean __WGLEW_ARB_make_current_read = GL_FALSE; -GLboolean __WGLEW_ARB_multisample = GL_FALSE; -GLboolean __WGLEW_ARB_pbuffer = GL_FALSE; -GLboolean __WGLEW_ARB_pixel_format = GL_FALSE; -GLboolean __WGLEW_ARB_pixel_format_float = GL_FALSE; -GLboolean __WGLEW_ARB_render_texture = GL_FALSE; -GLboolean __WGLEW_ARB_robustness_application_isolation = GL_FALSE; -GLboolean __WGLEW_ARB_robustness_share_group_isolation = GL_FALSE; -GLboolean __WGLEW_ATI_pixel_format_float = GL_FALSE; -GLboolean __WGLEW_ATI_render_texture_rectangle = GL_FALSE; -GLboolean __WGLEW_EXT_create_context_es2_profile = GL_FALSE; -GLboolean __WGLEW_EXT_create_context_es_profile = GL_FALSE; -GLboolean __WGLEW_EXT_depth_float = GL_FALSE; -GLboolean __WGLEW_EXT_display_color_table = GL_FALSE; -GLboolean __WGLEW_EXT_extensions_string = GL_FALSE; -GLboolean __WGLEW_EXT_framebuffer_sRGB = GL_FALSE; -GLboolean __WGLEW_EXT_make_current_read = GL_FALSE; -GLboolean __WGLEW_EXT_multisample = GL_FALSE; -GLboolean __WGLEW_EXT_pbuffer = GL_FALSE; -GLboolean __WGLEW_EXT_pixel_format = GL_FALSE; -GLboolean __WGLEW_EXT_pixel_format_packed_float = GL_FALSE; -GLboolean __WGLEW_EXT_swap_control = GL_FALSE; -GLboolean __WGLEW_EXT_swap_control_tear = GL_FALSE; -GLboolean __WGLEW_I3D_digital_video_control = GL_FALSE; -GLboolean __WGLEW_I3D_gamma = GL_FALSE; -GLboolean __WGLEW_I3D_genlock = GL_FALSE; -GLboolean __WGLEW_I3D_image_buffer = GL_FALSE; -GLboolean __WGLEW_I3D_swap_frame_lock = GL_FALSE; -GLboolean __WGLEW_I3D_swap_frame_usage = GL_FALSE; -GLboolean __WGLEW_NV_DX_interop = GL_FALSE; -GLboolean __WGLEW_NV_DX_interop2 = GL_FALSE; -GLboolean __WGLEW_NV_copy_image = GL_FALSE; -GLboolean __WGLEW_NV_float_buffer = GL_FALSE; -GLboolean __WGLEW_NV_gpu_affinity = GL_FALSE; -GLboolean __WGLEW_NV_multisample_coverage = GL_FALSE; -GLboolean __WGLEW_NV_present_video = GL_FALSE; -GLboolean __WGLEW_NV_render_depth_texture = GL_FALSE; -GLboolean __WGLEW_NV_render_texture_rectangle = GL_FALSE; -GLboolean __WGLEW_NV_swap_group = GL_FALSE; -GLboolean __WGLEW_NV_vertex_array_range = GL_FALSE; -GLboolean __WGLEW_NV_video_capture = GL_FALSE; -GLboolean __WGLEW_NV_video_output = GL_FALSE; -GLboolean __WGLEW_OML_sync_control = GL_FALSE; - -#endif /* !GLEW_MX */ - -#ifdef WGL_3DFX_multisample - -#endif /* WGL_3DFX_multisample */ - -#ifdef WGL_3DL_stereo_control - -static GLboolean _glewInit_WGL_3DL_stereo_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglSetStereoEmitterState3DL = (PFNWGLSETSTEREOEMITTERSTATE3DLPROC)glewGetProcAddress((const GLubyte*)"wglSetStereoEmitterState3DL")) == NULL) || r; - - return r; -} - -#endif /* WGL_3DL_stereo_control */ - -#ifdef WGL_AMD_gpu_association - -static GLboolean _glewInit_WGL_AMD_gpu_association (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBlitContextFramebufferAMD = (PFNWGLBLITCONTEXTFRAMEBUFFERAMDPROC)glewGetProcAddress((const GLubyte*)"wglBlitContextFramebufferAMD")) == NULL) || r; - r = ((wglCreateAssociatedContextAMD = (PFNWGLCREATEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglCreateAssociatedContextAMD")) == NULL) || r; - r = ((wglCreateAssociatedContextAttribsAMD = (PFNWGLCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)glewGetProcAddress((const GLubyte*)"wglCreateAssociatedContextAttribsAMD")) == NULL) || r; - r = ((wglDeleteAssociatedContextAMD = (PFNWGLDELETEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglDeleteAssociatedContextAMD")) == NULL) || r; - r = ((wglGetContextGPUIDAMD = (PFNWGLGETCONTEXTGPUIDAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetContextGPUIDAMD")) == NULL) || r; - r = ((wglGetCurrentAssociatedContextAMD = (PFNWGLGETCURRENTASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentAssociatedContextAMD")) == NULL) || r; - r = ((wglGetGPUIDsAMD = (PFNWGLGETGPUIDSAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetGPUIDsAMD")) == NULL) || r; - r = ((wglGetGPUInfoAMD = (PFNWGLGETGPUINFOAMDPROC)glewGetProcAddress((const GLubyte*)"wglGetGPUInfoAMD")) == NULL) || r; - r = ((wglMakeAssociatedContextCurrentAMD = (PFNWGLMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)glewGetProcAddress((const GLubyte*)"wglMakeAssociatedContextCurrentAMD")) == NULL) || r; - - return r; -} - -#endif /* WGL_AMD_gpu_association */ - -#ifdef WGL_ARB_buffer_region - -static GLboolean _glewInit_WGL_ARB_buffer_region (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreateBufferRegionARB = (PFNWGLCREATEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateBufferRegionARB")) == NULL) || r; - r = ((wglDeleteBufferRegionARB = (PFNWGLDELETEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglDeleteBufferRegionARB")) == NULL) || r; - r = ((wglRestoreBufferRegionARB = (PFNWGLRESTOREBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglRestoreBufferRegionARB")) == NULL) || r; - r = ((wglSaveBufferRegionARB = (PFNWGLSAVEBUFFERREGIONARBPROC)glewGetProcAddress((const GLubyte*)"wglSaveBufferRegionARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_buffer_region */ - -#ifdef WGL_ARB_create_context - -static GLboolean _glewInit_WGL_ARB_create_context (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreateContextAttribsARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"wglCreateContextAttribsARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_create_context */ - -#ifdef WGL_ARB_create_context_profile - -#endif /* WGL_ARB_create_context_profile */ - -#ifdef WGL_ARB_create_context_robustness - -#endif /* WGL_ARB_create_context_robustness */ - -#ifdef WGL_ARB_extensions_string - -static GLboolean _glewInit_WGL_ARB_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_extensions_string */ - -#ifdef WGL_ARB_framebuffer_sRGB - -#endif /* WGL_ARB_framebuffer_sRGB */ - -#ifdef WGL_ARB_make_current_read - -static GLboolean _glewInit_WGL_ARB_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetCurrentReadDCARB = (PFNWGLGETCURRENTREADDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCARB")) == NULL) || r; - r = ((wglMakeContextCurrentARB = (PFNWGLMAKECONTEXTCURRENTARBPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_make_current_read */ - -#ifdef WGL_ARB_multisample - -#endif /* WGL_ARB_multisample */ - -#ifdef WGL_ARB_pbuffer - -static GLboolean _glewInit_WGL_ARB_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreatePbufferARB = (PFNWGLCREATEPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferARB")) == NULL) || r; - r = ((wglDestroyPbufferARB = (PFNWGLDESTROYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferARB")) == NULL) || r; - r = ((wglGetPbufferDCARB = (PFNWGLGETPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCARB")) == NULL) || r; - r = ((wglQueryPbufferARB = (PFNWGLQUERYPBUFFERARBPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferARB")) == NULL) || r; - r = ((wglReleasePbufferDCARB = (PFNWGLRELEASEPBUFFERDCARBPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_pbuffer */ - -#ifdef WGL_ARB_pixel_format - -static GLboolean _glewInit_WGL_ARB_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglChoosePixelFormatARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatARB")) == NULL) || r; - r = ((wglGetPixelFormatAttribfvARB = (PFNWGLGETPIXELFORMATATTRIBFVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvARB")) == NULL) || r; - r = ((wglGetPixelFormatAttribivARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_pixel_format */ - -#ifdef WGL_ARB_pixel_format_float - -#endif /* WGL_ARB_pixel_format_float */ - -#ifdef WGL_ARB_render_texture - -static GLboolean _glewInit_WGL_ARB_render_texture (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindTexImageARB = (PFNWGLBINDTEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglBindTexImageARB")) == NULL) || r; - r = ((wglReleaseTexImageARB = (PFNWGLRELEASETEXIMAGEARBPROC)glewGetProcAddress((const GLubyte*)"wglReleaseTexImageARB")) == NULL) || r; - r = ((wglSetPbufferAttribARB = (PFNWGLSETPBUFFERATTRIBARBPROC)glewGetProcAddress((const GLubyte*)"wglSetPbufferAttribARB")) == NULL) || r; - - return r; -} - -#endif /* WGL_ARB_render_texture */ - -#ifdef WGL_ARB_robustness_application_isolation - -#endif /* WGL_ARB_robustness_application_isolation */ - -#ifdef WGL_ARB_robustness_share_group_isolation - -#endif /* WGL_ARB_robustness_share_group_isolation */ - -#ifdef WGL_ATI_pixel_format_float - -#endif /* WGL_ATI_pixel_format_float */ - -#ifdef WGL_ATI_render_texture_rectangle - -#endif /* WGL_ATI_render_texture_rectangle */ - -#ifdef WGL_EXT_create_context_es2_profile - -#endif /* WGL_EXT_create_context_es2_profile */ - -#ifdef WGL_EXT_create_context_es_profile - -#endif /* WGL_EXT_create_context_es_profile */ - -#ifdef WGL_EXT_depth_float - -#endif /* WGL_EXT_depth_float */ - -#ifdef WGL_EXT_display_color_table - -static GLboolean _glewInit_WGL_EXT_display_color_table (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindDisplayColorTableEXT = (PFNWGLBINDDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglBindDisplayColorTableEXT")) == NULL) || r; - r = ((wglCreateDisplayColorTableEXT = (PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglCreateDisplayColorTableEXT")) == NULL) || r; - r = ((wglDestroyDisplayColorTableEXT = (PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyDisplayColorTableEXT")) == NULL) || r; - r = ((wglLoadDisplayColorTableEXT = (PFNWGLLOADDISPLAYCOLORTABLEEXTPROC)glewGetProcAddress((const GLubyte*)"wglLoadDisplayColorTableEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_display_color_table */ - -#ifdef WGL_EXT_extensions_string - -static GLboolean _glewInit_WGL_EXT_extensions_string (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_extensions_string */ - -#ifdef WGL_EXT_framebuffer_sRGB - -#endif /* WGL_EXT_framebuffer_sRGB */ - -#ifdef WGL_EXT_make_current_read - -static GLboolean _glewInit_WGL_EXT_make_current_read (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetCurrentReadDCEXT = (PFNWGLGETCURRENTREADDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetCurrentReadDCEXT")) == NULL) || r; - r = ((wglMakeContextCurrentEXT = (PFNWGLMAKECONTEXTCURRENTEXTPROC)glewGetProcAddress((const GLubyte*)"wglMakeContextCurrentEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_make_current_read */ - -#ifdef WGL_EXT_multisample - -#endif /* WGL_EXT_multisample */ - -#ifdef WGL_EXT_pbuffer - -static GLboolean _glewInit_WGL_EXT_pbuffer (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreatePbufferEXT = (PFNWGLCREATEPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglCreatePbufferEXT")) == NULL) || r; - r = ((wglDestroyPbufferEXT = (PFNWGLDESTROYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglDestroyPbufferEXT")) == NULL) || r; - r = ((wglGetPbufferDCEXT = (PFNWGLGETPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPbufferDCEXT")) == NULL) || r; - r = ((wglQueryPbufferEXT = (PFNWGLQUERYPBUFFEREXTPROC)glewGetProcAddress((const GLubyte*)"wglQueryPbufferEXT")) == NULL) || r; - r = ((wglReleasePbufferDCEXT = (PFNWGLRELEASEPBUFFERDCEXTPROC)glewGetProcAddress((const GLubyte*)"wglReleasePbufferDCEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_pbuffer */ - -#ifdef WGL_EXT_pixel_format - -static GLboolean _glewInit_WGL_EXT_pixel_format (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglChoosePixelFormatEXT = (PFNWGLCHOOSEPIXELFORMATEXTPROC)glewGetProcAddress((const GLubyte*)"wglChoosePixelFormatEXT")) == NULL) || r; - r = ((wglGetPixelFormatAttribfvEXT = (PFNWGLGETPIXELFORMATATTRIBFVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribfvEXT")) == NULL) || r; - r = ((wglGetPixelFormatAttribivEXT = (PFNWGLGETPIXELFORMATATTRIBIVEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetPixelFormatAttribivEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_pixel_format */ - -#ifdef WGL_EXT_pixel_format_packed_float - -#endif /* WGL_EXT_pixel_format_packed_float */ - -#ifdef WGL_EXT_swap_control - -static GLboolean _glewInit_WGL_EXT_swap_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetSwapIntervalEXT")) == NULL) || r; - r = ((wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"wglSwapIntervalEXT")) == NULL) || r; - - return r; -} - -#endif /* WGL_EXT_swap_control */ - -#ifdef WGL_EXT_swap_control_tear - -#endif /* WGL_EXT_swap_control_tear */ - -#ifdef WGL_I3D_digital_video_control - -static GLboolean _glewInit_WGL_I3D_digital_video_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetDigitalVideoParametersI3D = (PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetDigitalVideoParametersI3D")) == NULL) || r; - r = ((wglSetDigitalVideoParametersI3D = (PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetDigitalVideoParametersI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_digital_video_control */ - -#ifdef WGL_I3D_gamma - -static GLboolean _glewInit_WGL_I3D_gamma (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetGammaTableI3D = (PFNWGLGETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableI3D")) == NULL) || r; - r = ((wglGetGammaTableParametersI3D = (PFNWGLGETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGammaTableParametersI3D")) == NULL) || r; - r = ((wglSetGammaTableI3D = (PFNWGLSETGAMMATABLEI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableI3D")) == NULL) || r; - r = ((wglSetGammaTableParametersI3D = (PFNWGLSETGAMMATABLEPARAMETERSI3DPROC)glewGetProcAddress((const GLubyte*)"wglSetGammaTableParametersI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_gamma */ - -#ifdef WGL_I3D_genlock - -static GLboolean _glewInit_WGL_I3D_genlock (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglDisableGenlockI3D = (PFNWGLDISABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableGenlockI3D")) == NULL) || r; - r = ((wglEnableGenlockI3D = (PFNWGLENABLEGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableGenlockI3D")) == NULL) || r; - r = ((wglGenlockSampleRateI3D = (PFNWGLGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSampleRateI3D")) == NULL) || r; - r = ((wglGenlockSourceDelayI3D = (PFNWGLGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceDelayI3D")) == NULL) || r; - r = ((wglGenlockSourceEdgeI3D = (PFNWGLGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceEdgeI3D")) == NULL) || r; - r = ((wglGenlockSourceI3D = (PFNWGLGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGenlockSourceI3D")) == NULL) || r; - r = ((wglGetGenlockSampleRateI3D = (PFNWGLGETGENLOCKSAMPLERATEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSampleRateI3D")) == NULL) || r; - r = ((wglGetGenlockSourceDelayI3D = (PFNWGLGETGENLOCKSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceDelayI3D")) == NULL) || r; - r = ((wglGetGenlockSourceEdgeI3D = (PFNWGLGETGENLOCKSOURCEEDGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceEdgeI3D")) == NULL) || r; - r = ((wglGetGenlockSourceI3D = (PFNWGLGETGENLOCKSOURCEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetGenlockSourceI3D")) == NULL) || r; - r = ((wglIsEnabledGenlockI3D = (PFNWGLISENABLEDGENLOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledGenlockI3D")) == NULL) || r; - r = ((wglQueryGenlockMaxSourceDelayI3D = (PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryGenlockMaxSourceDelayI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_genlock */ - -#ifdef WGL_I3D_image_buffer - -static GLboolean _glewInit_WGL_I3D_image_buffer (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglAssociateImageBufferEventsI3D = (PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglAssociateImageBufferEventsI3D")) == NULL) || r; - r = ((wglCreateImageBufferI3D = (PFNWGLCREATEIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglCreateImageBufferI3D")) == NULL) || r; - r = ((wglDestroyImageBufferI3D = (PFNWGLDESTROYIMAGEBUFFERI3DPROC)glewGetProcAddress((const GLubyte*)"wglDestroyImageBufferI3D")) == NULL) || r; - r = ((wglReleaseImageBufferEventsI3D = (PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC)glewGetProcAddress((const GLubyte*)"wglReleaseImageBufferEventsI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_image_buffer */ - -#ifdef WGL_I3D_swap_frame_lock - -static GLboolean _glewInit_WGL_I3D_swap_frame_lock (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglDisableFrameLockI3D = (PFNWGLDISABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglDisableFrameLockI3D")) == NULL) || r; - r = ((wglEnableFrameLockI3D = (PFNWGLENABLEFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglEnableFrameLockI3D")) == NULL) || r; - r = ((wglIsEnabledFrameLockI3D = (PFNWGLISENABLEDFRAMELOCKI3DPROC)glewGetProcAddress((const GLubyte*)"wglIsEnabledFrameLockI3D")) == NULL) || r; - r = ((wglQueryFrameLockMasterI3D = (PFNWGLQUERYFRAMELOCKMASTERI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameLockMasterI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_swap_frame_lock */ - -#ifdef WGL_I3D_swap_frame_usage - -static GLboolean _glewInit_WGL_I3D_swap_frame_usage (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBeginFrameTrackingI3D = (PFNWGLBEGINFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglBeginFrameTrackingI3D")) == NULL) || r; - r = ((wglEndFrameTrackingI3D = (PFNWGLENDFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglEndFrameTrackingI3D")) == NULL) || r; - r = ((wglGetFrameUsageI3D = (PFNWGLGETFRAMEUSAGEI3DPROC)glewGetProcAddress((const GLubyte*)"wglGetFrameUsageI3D")) == NULL) || r; - r = ((wglQueryFrameTrackingI3D = (PFNWGLQUERYFRAMETRACKINGI3DPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameTrackingI3D")) == NULL) || r; - - return r; -} - -#endif /* WGL_I3D_swap_frame_usage */ - -#ifdef WGL_NV_DX_interop - -static GLboolean _glewInit_WGL_NV_DX_interop (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglDXCloseDeviceNV = (PFNWGLDXCLOSEDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglDXCloseDeviceNV")) == NULL) || r; - r = ((wglDXLockObjectsNV = (PFNWGLDXLOCKOBJECTSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXLockObjectsNV")) == NULL) || r; - r = ((wglDXObjectAccessNV = (PFNWGLDXOBJECTACCESSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXObjectAccessNV")) == NULL) || r; - r = ((wglDXOpenDeviceNV = (PFNWGLDXOPENDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglDXOpenDeviceNV")) == NULL) || r; - r = ((wglDXRegisterObjectNV = (PFNWGLDXREGISTEROBJECTNVPROC)glewGetProcAddress((const GLubyte*)"wglDXRegisterObjectNV")) == NULL) || r; - r = ((wglDXSetResourceShareHandleNV = (PFNWGLDXSETRESOURCESHAREHANDLENVPROC)glewGetProcAddress((const GLubyte*)"wglDXSetResourceShareHandleNV")) == NULL) || r; - r = ((wglDXUnlockObjectsNV = (PFNWGLDXUNLOCKOBJECTSNVPROC)glewGetProcAddress((const GLubyte*)"wglDXUnlockObjectsNV")) == NULL) || r; - r = ((wglDXUnregisterObjectNV = (PFNWGLDXUNREGISTEROBJECTNVPROC)glewGetProcAddress((const GLubyte*)"wglDXUnregisterObjectNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_DX_interop */ - -#ifdef WGL_NV_DX_interop2 - -#endif /* WGL_NV_DX_interop2 */ - -#ifdef WGL_NV_copy_image - -static GLboolean _glewInit_WGL_NV_copy_image (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCopyImageSubDataNV = (PFNWGLCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"wglCopyImageSubDataNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_copy_image */ - -#ifdef WGL_NV_float_buffer - -#endif /* WGL_NV_float_buffer */ - -#ifdef WGL_NV_gpu_affinity - -static GLboolean _glewInit_WGL_NV_gpu_affinity (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglCreateAffinityDCNV = (PFNWGLCREATEAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglCreateAffinityDCNV")) == NULL) || r; - r = ((wglDeleteDCNV = (PFNWGLDELETEDCNVPROC)glewGetProcAddress((const GLubyte*)"wglDeleteDCNV")) == NULL) || r; - r = ((wglEnumGpuDevicesNV = (PFNWGLENUMGPUDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpuDevicesNV")) == NULL) || r; - r = ((wglEnumGpusFromAffinityDCNV = (PFNWGLENUMGPUSFROMAFFINITYDCNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusFromAffinityDCNV")) == NULL) || r; - r = ((wglEnumGpusNV = (PFNWGLENUMGPUSNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumGpusNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_gpu_affinity */ - -#ifdef WGL_NV_multisample_coverage - -#endif /* WGL_NV_multisample_coverage */ - -#ifdef WGL_NV_present_video - -static GLboolean _glewInit_WGL_NV_present_video (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindVideoDeviceNV = (PFNWGLBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoDeviceNV")) == NULL) || r; - r = ((wglEnumerateVideoDevicesNV = (PFNWGLENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumerateVideoDevicesNV")) == NULL) || r; - r = ((wglQueryCurrentContextNV = (PFNWGLQUERYCURRENTCONTEXTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryCurrentContextNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_present_video */ - -#ifdef WGL_NV_render_depth_texture - -#endif /* WGL_NV_render_depth_texture */ - -#ifdef WGL_NV_render_texture_rectangle - -#endif /* WGL_NV_render_texture_rectangle */ - -#ifdef WGL_NV_swap_group - -static GLboolean _glewInit_WGL_NV_swap_group (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindSwapBarrierNV = (PFNWGLBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"wglBindSwapBarrierNV")) == NULL) || r; - r = ((wglJoinSwapGroupNV = (PFNWGLJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglJoinSwapGroupNV")) == NULL) || r; - r = ((wglQueryFrameCountNV = (PFNWGLQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryFrameCountNV")) == NULL) || r; - r = ((wglQueryMaxSwapGroupsNV = (PFNWGLQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"wglQueryMaxSwapGroupsNV")) == NULL) || r; - r = ((wglQuerySwapGroupNV = (PFNWGLQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"wglQuerySwapGroupNV")) == NULL) || r; - r = ((wglResetFrameCountNV = (PFNWGLRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"wglResetFrameCountNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_swap_group */ - -#ifdef WGL_NV_vertex_array_range - -static GLboolean _glewInit_WGL_NV_vertex_array_range (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglAllocateMemoryNV = (PFNWGLALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglAllocateMemoryNV")) == NULL) || r; - r = ((wglFreeMemoryNV = (PFNWGLFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"wglFreeMemoryNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_vertex_array_range */ - -#ifdef WGL_NV_video_capture - -static GLboolean _glewInit_WGL_NV_video_capture (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindVideoCaptureDeviceNV = (PFNWGLBINDVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoCaptureDeviceNV")) == NULL) || r; - r = ((wglEnumerateVideoCaptureDevicesNV = (PFNWGLENUMERATEVIDEOCAPTUREDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"wglEnumerateVideoCaptureDevicesNV")) == NULL) || r; - r = ((wglLockVideoCaptureDeviceNV = (PFNWGLLOCKVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglLockVideoCaptureDeviceNV")) == NULL) || r; - r = ((wglQueryVideoCaptureDeviceNV = (PFNWGLQUERYVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglQueryVideoCaptureDeviceNV")) == NULL) || r; - r = ((wglReleaseVideoCaptureDeviceNV = (PFNWGLRELEASEVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoCaptureDeviceNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_video_capture */ - -#ifdef WGL_NV_video_output - -static GLboolean _glewInit_WGL_NV_video_output (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglBindVideoImageNV = (PFNWGLBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglBindVideoImageNV")) == NULL) || r; - r = ((wglGetVideoDeviceNV = (PFNWGLGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoDeviceNV")) == NULL) || r; - r = ((wglGetVideoInfoNV = (PFNWGLGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"wglGetVideoInfoNV")) == NULL) || r; - r = ((wglReleaseVideoDeviceNV = (PFNWGLRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoDeviceNV")) == NULL) || r; - r = ((wglReleaseVideoImageNV = (PFNWGLRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"wglReleaseVideoImageNV")) == NULL) || r; - r = ((wglSendPbufferToVideoNV = (PFNWGLSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"wglSendPbufferToVideoNV")) == NULL) || r; - - return r; -} - -#endif /* WGL_NV_video_output */ - -#ifdef WGL_OML_sync_control - -static GLboolean _glewInit_WGL_OML_sync_control (WGLEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((wglGetMscRateOML = (PFNWGLGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetMscRateOML")) == NULL) || r; - r = ((wglGetSyncValuesOML = (PFNWGLGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"wglGetSyncValuesOML")) == NULL) || r; - r = ((wglSwapBuffersMscOML = (PFNWGLSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapBuffersMscOML")) == NULL) || r; - r = ((wglSwapLayerBuffersMscOML = (PFNWGLSWAPLAYERBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglSwapLayerBuffersMscOML")) == NULL) || r; - r = ((wglWaitForMscOML = (PFNWGLWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForMscOML")) == NULL) || r; - r = ((wglWaitForSbcOML = (PFNWGLWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"wglWaitForSbcOML")) == NULL) || r; - - return r; -} - -#endif /* WGL_OML_sync_control */ - -/* ------------------------------------------------------------------------- */ - -static PFNWGLGETEXTENSIONSSTRINGARBPROC _wglewGetExtensionsStringARB = NULL; -static PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglewGetExtensionsStringEXT = NULL; - -GLboolean GLEWAPIENTRY wglewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - return GL_FALSE; - else - start = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - start = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - if (start == 0) - return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum GLEWAPIENTRY wglewContextInit (WGLEW_CONTEXT_ARG_DEF_LIST) -{ - GLboolean crippled; - const GLubyte* extStart; - const GLubyte* extEnd; - /* find wgl extension string query functions */ - _wglewGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringARB"); - _wglewGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)glewGetProcAddress((const GLubyte*)"wglGetExtensionsStringEXT"); - /* query wgl extension string */ - if (_wglewGetExtensionsStringARB == NULL) - if (_wglewGetExtensionsStringEXT == NULL) - extStart = (const GLubyte*)""; - else - extStart = (const GLubyte*)_wglewGetExtensionsStringEXT(); - else - extStart = (const GLubyte*)_wglewGetExtensionsStringARB(wglGetCurrentDC()); - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ - crippled = _wglewGetExtensionsStringARB == NULL && _wglewGetExtensionsStringEXT == NULL; -#ifdef WGL_3DFX_multisample - CONST_CAST(WGLEW_3DFX_multisample) = _glewSearchExtension("WGL_3DFX_multisample", extStart, extEnd); -#endif /* WGL_3DFX_multisample */ -#ifdef WGL_3DL_stereo_control - CONST_CAST(WGLEW_3DL_stereo_control) = _glewSearchExtension("WGL_3DL_stereo_control", extStart, extEnd); - if (glewExperimental || WGLEW_3DL_stereo_control|| crippled) CONST_CAST(WGLEW_3DL_stereo_control)= !_glewInit_WGL_3DL_stereo_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_3DL_stereo_control */ -#ifdef WGL_AMD_gpu_association - CONST_CAST(WGLEW_AMD_gpu_association) = _glewSearchExtension("WGL_AMD_gpu_association", extStart, extEnd); - if (glewExperimental || WGLEW_AMD_gpu_association|| crippled) CONST_CAST(WGLEW_AMD_gpu_association)= !_glewInit_WGL_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_AMD_gpu_association */ -#ifdef WGL_ARB_buffer_region - CONST_CAST(WGLEW_ARB_buffer_region) = _glewSearchExtension("WGL_ARB_buffer_region", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_buffer_region|| crippled) CONST_CAST(WGLEW_ARB_buffer_region)= !_glewInit_WGL_ARB_buffer_region(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_buffer_region */ -#ifdef WGL_ARB_create_context - CONST_CAST(WGLEW_ARB_create_context) = _glewSearchExtension("WGL_ARB_create_context", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_create_context|| crippled) CONST_CAST(WGLEW_ARB_create_context)= !_glewInit_WGL_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_create_context */ -#ifdef WGL_ARB_create_context_profile - CONST_CAST(WGLEW_ARB_create_context_profile) = _glewSearchExtension("WGL_ARB_create_context_profile", extStart, extEnd); -#endif /* WGL_ARB_create_context_profile */ -#ifdef WGL_ARB_create_context_robustness - CONST_CAST(WGLEW_ARB_create_context_robustness) = _glewSearchExtension("WGL_ARB_create_context_robustness", extStart, extEnd); -#endif /* WGL_ARB_create_context_robustness */ -#ifdef WGL_ARB_extensions_string - CONST_CAST(WGLEW_ARB_extensions_string) = _glewSearchExtension("WGL_ARB_extensions_string", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_extensions_string|| crippled) CONST_CAST(WGLEW_ARB_extensions_string)= !_glewInit_WGL_ARB_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_extensions_string */ -#ifdef WGL_ARB_framebuffer_sRGB - CONST_CAST(WGLEW_ARB_framebuffer_sRGB) = _glewSearchExtension("WGL_ARB_framebuffer_sRGB", extStart, extEnd); -#endif /* WGL_ARB_framebuffer_sRGB */ -#ifdef WGL_ARB_make_current_read - CONST_CAST(WGLEW_ARB_make_current_read) = _glewSearchExtension("WGL_ARB_make_current_read", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_make_current_read|| crippled) CONST_CAST(WGLEW_ARB_make_current_read)= !_glewInit_WGL_ARB_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_make_current_read */ -#ifdef WGL_ARB_multisample - CONST_CAST(WGLEW_ARB_multisample) = _glewSearchExtension("WGL_ARB_multisample", extStart, extEnd); -#endif /* WGL_ARB_multisample */ -#ifdef WGL_ARB_pbuffer - CONST_CAST(WGLEW_ARB_pbuffer) = _glewSearchExtension("WGL_ARB_pbuffer", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_pbuffer|| crippled) CONST_CAST(WGLEW_ARB_pbuffer)= !_glewInit_WGL_ARB_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_pbuffer */ -#ifdef WGL_ARB_pixel_format - CONST_CAST(WGLEW_ARB_pixel_format) = _glewSearchExtension("WGL_ARB_pixel_format", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_pixel_format|| crippled) CONST_CAST(WGLEW_ARB_pixel_format)= !_glewInit_WGL_ARB_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_pixel_format */ -#ifdef WGL_ARB_pixel_format_float - CONST_CAST(WGLEW_ARB_pixel_format_float) = _glewSearchExtension("WGL_ARB_pixel_format_float", extStart, extEnd); -#endif /* WGL_ARB_pixel_format_float */ -#ifdef WGL_ARB_render_texture - CONST_CAST(WGLEW_ARB_render_texture) = _glewSearchExtension("WGL_ARB_render_texture", extStart, extEnd); - if (glewExperimental || WGLEW_ARB_render_texture|| crippled) CONST_CAST(WGLEW_ARB_render_texture)= !_glewInit_WGL_ARB_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_ARB_render_texture */ -#ifdef WGL_ARB_robustness_application_isolation - CONST_CAST(WGLEW_ARB_robustness_application_isolation) = _glewSearchExtension("WGL_ARB_robustness_application_isolation", extStart, extEnd); -#endif /* WGL_ARB_robustness_application_isolation */ -#ifdef WGL_ARB_robustness_share_group_isolation - CONST_CAST(WGLEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("WGL_ARB_robustness_share_group_isolation", extStart, extEnd); -#endif /* WGL_ARB_robustness_share_group_isolation */ -#ifdef WGL_ATI_pixel_format_float - CONST_CAST(WGLEW_ATI_pixel_format_float) = _glewSearchExtension("WGL_ATI_pixel_format_float", extStart, extEnd); -#endif /* WGL_ATI_pixel_format_float */ -#ifdef WGL_ATI_render_texture_rectangle - CONST_CAST(WGLEW_ATI_render_texture_rectangle) = _glewSearchExtension("WGL_ATI_render_texture_rectangle", extStart, extEnd); -#endif /* WGL_ATI_render_texture_rectangle */ -#ifdef WGL_EXT_create_context_es2_profile - CONST_CAST(WGLEW_EXT_create_context_es2_profile) = _glewSearchExtension("WGL_EXT_create_context_es2_profile", extStart, extEnd); -#endif /* WGL_EXT_create_context_es2_profile */ -#ifdef WGL_EXT_create_context_es_profile - CONST_CAST(WGLEW_EXT_create_context_es_profile) = _glewSearchExtension("WGL_EXT_create_context_es_profile", extStart, extEnd); -#endif /* WGL_EXT_create_context_es_profile */ -#ifdef WGL_EXT_depth_float - CONST_CAST(WGLEW_EXT_depth_float) = _glewSearchExtension("WGL_EXT_depth_float", extStart, extEnd); -#endif /* WGL_EXT_depth_float */ -#ifdef WGL_EXT_display_color_table - CONST_CAST(WGLEW_EXT_display_color_table) = _glewSearchExtension("WGL_EXT_display_color_table", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_display_color_table|| crippled) CONST_CAST(WGLEW_EXT_display_color_table)= !_glewInit_WGL_EXT_display_color_table(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_display_color_table */ -#ifdef WGL_EXT_extensions_string - CONST_CAST(WGLEW_EXT_extensions_string) = _glewSearchExtension("WGL_EXT_extensions_string", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_extensions_string|| crippled) CONST_CAST(WGLEW_EXT_extensions_string)= !_glewInit_WGL_EXT_extensions_string(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_extensions_string */ -#ifdef WGL_EXT_framebuffer_sRGB - CONST_CAST(WGLEW_EXT_framebuffer_sRGB) = _glewSearchExtension("WGL_EXT_framebuffer_sRGB", extStart, extEnd); -#endif /* WGL_EXT_framebuffer_sRGB */ -#ifdef WGL_EXT_make_current_read - CONST_CAST(WGLEW_EXT_make_current_read) = _glewSearchExtension("WGL_EXT_make_current_read", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_make_current_read|| crippled) CONST_CAST(WGLEW_EXT_make_current_read)= !_glewInit_WGL_EXT_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_make_current_read */ -#ifdef WGL_EXT_multisample - CONST_CAST(WGLEW_EXT_multisample) = _glewSearchExtension("WGL_EXT_multisample", extStart, extEnd); -#endif /* WGL_EXT_multisample */ -#ifdef WGL_EXT_pbuffer - CONST_CAST(WGLEW_EXT_pbuffer) = _glewSearchExtension("WGL_EXT_pbuffer", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_pbuffer|| crippled) CONST_CAST(WGLEW_EXT_pbuffer)= !_glewInit_WGL_EXT_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_pbuffer */ -#ifdef WGL_EXT_pixel_format - CONST_CAST(WGLEW_EXT_pixel_format) = _glewSearchExtension("WGL_EXT_pixel_format", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_pixel_format|| crippled) CONST_CAST(WGLEW_EXT_pixel_format)= !_glewInit_WGL_EXT_pixel_format(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_pixel_format */ -#ifdef WGL_EXT_pixel_format_packed_float - CONST_CAST(WGLEW_EXT_pixel_format_packed_float) = _glewSearchExtension("WGL_EXT_pixel_format_packed_float", extStart, extEnd); -#endif /* WGL_EXT_pixel_format_packed_float */ -#ifdef WGL_EXT_swap_control - CONST_CAST(WGLEW_EXT_swap_control) = _glewSearchExtension("WGL_EXT_swap_control", extStart, extEnd); - if (glewExperimental || WGLEW_EXT_swap_control|| crippled) CONST_CAST(WGLEW_EXT_swap_control)= !_glewInit_WGL_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_EXT_swap_control */ -#ifdef WGL_EXT_swap_control_tear - CONST_CAST(WGLEW_EXT_swap_control_tear) = _glewSearchExtension("WGL_EXT_swap_control_tear", extStart, extEnd); -#endif /* WGL_EXT_swap_control_tear */ -#ifdef WGL_I3D_digital_video_control - CONST_CAST(WGLEW_I3D_digital_video_control) = _glewSearchExtension("WGL_I3D_digital_video_control", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_digital_video_control|| crippled) CONST_CAST(WGLEW_I3D_digital_video_control)= !_glewInit_WGL_I3D_digital_video_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_digital_video_control */ -#ifdef WGL_I3D_gamma - CONST_CAST(WGLEW_I3D_gamma) = _glewSearchExtension("WGL_I3D_gamma", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_gamma|| crippled) CONST_CAST(WGLEW_I3D_gamma)= !_glewInit_WGL_I3D_gamma(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_gamma */ -#ifdef WGL_I3D_genlock - CONST_CAST(WGLEW_I3D_genlock) = _glewSearchExtension("WGL_I3D_genlock", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_genlock|| crippled) CONST_CAST(WGLEW_I3D_genlock)= !_glewInit_WGL_I3D_genlock(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_genlock */ -#ifdef WGL_I3D_image_buffer - CONST_CAST(WGLEW_I3D_image_buffer) = _glewSearchExtension("WGL_I3D_image_buffer", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_image_buffer|| crippled) CONST_CAST(WGLEW_I3D_image_buffer)= !_glewInit_WGL_I3D_image_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_image_buffer */ -#ifdef WGL_I3D_swap_frame_lock - CONST_CAST(WGLEW_I3D_swap_frame_lock) = _glewSearchExtension("WGL_I3D_swap_frame_lock", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_swap_frame_lock|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_lock)= !_glewInit_WGL_I3D_swap_frame_lock(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_swap_frame_lock */ -#ifdef WGL_I3D_swap_frame_usage - CONST_CAST(WGLEW_I3D_swap_frame_usage) = _glewSearchExtension("WGL_I3D_swap_frame_usage", extStart, extEnd); - if (glewExperimental || WGLEW_I3D_swap_frame_usage|| crippled) CONST_CAST(WGLEW_I3D_swap_frame_usage)= !_glewInit_WGL_I3D_swap_frame_usage(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_I3D_swap_frame_usage */ -#ifdef WGL_NV_DX_interop - CONST_CAST(WGLEW_NV_DX_interop) = _glewSearchExtension("WGL_NV_DX_interop", extStart, extEnd); - if (glewExperimental || WGLEW_NV_DX_interop|| crippled) CONST_CAST(WGLEW_NV_DX_interop)= !_glewInit_WGL_NV_DX_interop(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_DX_interop */ -#ifdef WGL_NV_DX_interop2 - CONST_CAST(WGLEW_NV_DX_interop2) = _glewSearchExtension("WGL_NV_DX_interop2", extStart, extEnd); -#endif /* WGL_NV_DX_interop2 */ -#ifdef WGL_NV_copy_image - CONST_CAST(WGLEW_NV_copy_image) = _glewSearchExtension("WGL_NV_copy_image", extStart, extEnd); - if (glewExperimental || WGLEW_NV_copy_image|| crippled) CONST_CAST(WGLEW_NV_copy_image)= !_glewInit_WGL_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_copy_image */ -#ifdef WGL_NV_float_buffer - CONST_CAST(WGLEW_NV_float_buffer) = _glewSearchExtension("WGL_NV_float_buffer", extStart, extEnd); -#endif /* WGL_NV_float_buffer */ -#ifdef WGL_NV_gpu_affinity - CONST_CAST(WGLEW_NV_gpu_affinity) = _glewSearchExtension("WGL_NV_gpu_affinity", extStart, extEnd); - if (glewExperimental || WGLEW_NV_gpu_affinity|| crippled) CONST_CAST(WGLEW_NV_gpu_affinity)= !_glewInit_WGL_NV_gpu_affinity(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_gpu_affinity */ -#ifdef WGL_NV_multisample_coverage - CONST_CAST(WGLEW_NV_multisample_coverage) = _glewSearchExtension("WGL_NV_multisample_coverage", extStart, extEnd); -#endif /* WGL_NV_multisample_coverage */ -#ifdef WGL_NV_present_video - CONST_CAST(WGLEW_NV_present_video) = _glewSearchExtension("WGL_NV_present_video", extStart, extEnd); - if (glewExperimental || WGLEW_NV_present_video|| crippled) CONST_CAST(WGLEW_NV_present_video)= !_glewInit_WGL_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_present_video */ -#ifdef WGL_NV_render_depth_texture - CONST_CAST(WGLEW_NV_render_depth_texture) = _glewSearchExtension("WGL_NV_render_depth_texture", extStart, extEnd); -#endif /* WGL_NV_render_depth_texture */ -#ifdef WGL_NV_render_texture_rectangle - CONST_CAST(WGLEW_NV_render_texture_rectangle) = _glewSearchExtension("WGL_NV_render_texture_rectangle", extStart, extEnd); -#endif /* WGL_NV_render_texture_rectangle */ -#ifdef WGL_NV_swap_group - CONST_CAST(WGLEW_NV_swap_group) = _glewSearchExtension("WGL_NV_swap_group", extStart, extEnd); - if (glewExperimental || WGLEW_NV_swap_group|| crippled) CONST_CAST(WGLEW_NV_swap_group)= !_glewInit_WGL_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_swap_group */ -#ifdef WGL_NV_vertex_array_range - CONST_CAST(WGLEW_NV_vertex_array_range) = _glewSearchExtension("WGL_NV_vertex_array_range", extStart, extEnd); - if (glewExperimental || WGLEW_NV_vertex_array_range|| crippled) CONST_CAST(WGLEW_NV_vertex_array_range)= !_glewInit_WGL_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_vertex_array_range */ -#ifdef WGL_NV_video_capture - CONST_CAST(WGLEW_NV_video_capture) = _glewSearchExtension("WGL_NV_video_capture", extStart, extEnd); - if (glewExperimental || WGLEW_NV_video_capture|| crippled) CONST_CAST(WGLEW_NV_video_capture)= !_glewInit_WGL_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_video_capture */ -#ifdef WGL_NV_video_output - CONST_CAST(WGLEW_NV_video_output) = _glewSearchExtension("WGL_NV_video_output", extStart, extEnd); - if (glewExperimental || WGLEW_NV_video_output|| crippled) CONST_CAST(WGLEW_NV_video_output)= !_glewInit_WGL_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_NV_video_output */ -#ifdef WGL_OML_sync_control - CONST_CAST(WGLEW_OML_sync_control) = _glewSearchExtension("WGL_OML_sync_control", extStart, extEnd); - if (glewExperimental || WGLEW_OML_sync_control|| crippled) CONST_CAST(WGLEW_OML_sync_control)= !_glewInit_WGL_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* WGL_OML_sync_control */ - - return GLEW_OK; -} - -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) - -PFNGLXGETCURRENTDISPLAYPROC __glewXGetCurrentDisplay = NULL; - -PFNGLXCHOOSEFBCONFIGPROC __glewXChooseFBConfig = NULL; -PFNGLXCREATENEWCONTEXTPROC __glewXCreateNewContext = NULL; -PFNGLXCREATEPBUFFERPROC __glewXCreatePbuffer = NULL; -PFNGLXCREATEPIXMAPPROC __glewXCreatePixmap = NULL; -PFNGLXCREATEWINDOWPROC __glewXCreateWindow = NULL; -PFNGLXDESTROYPBUFFERPROC __glewXDestroyPbuffer = NULL; -PFNGLXDESTROYPIXMAPPROC __glewXDestroyPixmap = NULL; -PFNGLXDESTROYWINDOWPROC __glewXDestroyWindow = NULL; -PFNGLXGETCURRENTREADDRAWABLEPROC __glewXGetCurrentReadDrawable = NULL; -PFNGLXGETFBCONFIGATTRIBPROC __glewXGetFBConfigAttrib = NULL; -PFNGLXGETFBCONFIGSPROC __glewXGetFBConfigs = NULL; -PFNGLXGETSELECTEDEVENTPROC __glewXGetSelectedEvent = NULL; -PFNGLXGETVISUALFROMFBCONFIGPROC __glewXGetVisualFromFBConfig = NULL; -PFNGLXMAKECONTEXTCURRENTPROC __glewXMakeContextCurrent = NULL; -PFNGLXQUERYCONTEXTPROC __glewXQueryContext = NULL; -PFNGLXQUERYDRAWABLEPROC __glewXQueryDrawable = NULL; -PFNGLXSELECTEVENTPROC __glewXSelectEvent = NULL; - -PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC __glewXBlitContextFramebufferAMD = NULL; -PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC __glewXCreateAssociatedContextAMD = NULL; -PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC __glewXCreateAssociatedContextAttribsAMD = NULL; -PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC __glewXDeleteAssociatedContextAMD = NULL; -PFNGLXGETCONTEXTGPUIDAMDPROC __glewXGetContextGPUIDAMD = NULL; -PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC __glewXGetCurrentAssociatedContextAMD = NULL; -PFNGLXGETGPUIDSAMDPROC __glewXGetGPUIDsAMD = NULL; -PFNGLXGETGPUINFOAMDPROC __glewXGetGPUInfoAMD = NULL; -PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC __glewXMakeAssociatedContextCurrentAMD = NULL; - -PFNGLXCREATECONTEXTATTRIBSARBPROC __glewXCreateContextAttribsARB = NULL; - -PFNGLXBINDTEXIMAGEATIPROC __glewXBindTexImageATI = NULL; -PFNGLXDRAWABLEATTRIBATIPROC __glewXDrawableAttribATI = NULL; -PFNGLXRELEASETEXIMAGEATIPROC __glewXReleaseTexImageATI = NULL; - -PFNGLXFREECONTEXTEXTPROC __glewXFreeContextEXT = NULL; -PFNGLXGETCONTEXTIDEXTPROC __glewXGetContextIDEXT = NULL; -PFNGLXIMPORTCONTEXTEXTPROC __glewXImportContextEXT = NULL; -PFNGLXQUERYCONTEXTINFOEXTPROC __glewXQueryContextInfoEXT = NULL; - -PFNGLXSWAPINTERVALEXTPROC __glewXSwapIntervalEXT = NULL; - -PFNGLXBINDTEXIMAGEEXTPROC __glewXBindTexImageEXT = NULL; -PFNGLXRELEASETEXIMAGEEXTPROC __glewXReleaseTexImageEXT = NULL; - -PFNGLXGETAGPOFFSETMESAPROC __glewXGetAGPOffsetMESA = NULL; - -PFNGLXCOPYSUBBUFFERMESAPROC __glewXCopySubBufferMESA = NULL; - -PFNGLXCREATEGLXPIXMAPMESAPROC __glewXCreateGLXPixmapMESA = NULL; - -PFNGLXRELEASEBUFFERSMESAPROC __glewXReleaseBuffersMESA = NULL; - -PFNGLXSET3DFXMODEMESAPROC __glewXSet3DfxModeMESA = NULL; - -PFNGLXGETSWAPINTERVALMESAPROC __glewXGetSwapIntervalMESA = NULL; -PFNGLXSWAPINTERVALMESAPROC __glewXSwapIntervalMESA = NULL; - -PFNGLXCOPYIMAGESUBDATANVPROC __glewXCopyImageSubDataNV = NULL; - -PFNGLXBINDVIDEODEVICENVPROC __glewXBindVideoDeviceNV = NULL; -PFNGLXENUMERATEVIDEODEVICESNVPROC __glewXEnumerateVideoDevicesNV = NULL; - -PFNGLXBINDSWAPBARRIERNVPROC __glewXBindSwapBarrierNV = NULL; -PFNGLXJOINSWAPGROUPNVPROC __glewXJoinSwapGroupNV = NULL; -PFNGLXQUERYFRAMECOUNTNVPROC __glewXQueryFrameCountNV = NULL; -PFNGLXQUERYMAXSWAPGROUPSNVPROC __glewXQueryMaxSwapGroupsNV = NULL; -PFNGLXQUERYSWAPGROUPNVPROC __glewXQuerySwapGroupNV = NULL; -PFNGLXRESETFRAMECOUNTNVPROC __glewXResetFrameCountNV = NULL; - -PFNGLXALLOCATEMEMORYNVPROC __glewXAllocateMemoryNV = NULL; -PFNGLXFREEMEMORYNVPROC __glewXFreeMemoryNV = NULL; - -PFNGLXBINDVIDEOCAPTUREDEVICENVPROC __glewXBindVideoCaptureDeviceNV = NULL; -PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC __glewXEnumerateVideoCaptureDevicesNV = NULL; -PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC __glewXLockVideoCaptureDeviceNV = NULL; -PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC __glewXQueryVideoCaptureDeviceNV = NULL; -PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC __glewXReleaseVideoCaptureDeviceNV = NULL; - -PFNGLXBINDVIDEOIMAGENVPROC __glewXBindVideoImageNV = NULL; -PFNGLXGETVIDEODEVICENVPROC __glewXGetVideoDeviceNV = NULL; -PFNGLXGETVIDEOINFONVPROC __glewXGetVideoInfoNV = NULL; -PFNGLXRELEASEVIDEODEVICENVPROC __glewXReleaseVideoDeviceNV = NULL; -PFNGLXRELEASEVIDEOIMAGENVPROC __glewXReleaseVideoImageNV = NULL; -PFNGLXSENDPBUFFERTOVIDEONVPROC __glewXSendPbufferToVideoNV = NULL; - -PFNGLXGETMSCRATEOMLPROC __glewXGetMscRateOML = NULL; -PFNGLXGETSYNCVALUESOMLPROC __glewXGetSyncValuesOML = NULL; -PFNGLXSWAPBUFFERSMSCOMLPROC __glewXSwapBuffersMscOML = NULL; -PFNGLXWAITFORMSCOMLPROC __glewXWaitForMscOML = NULL; -PFNGLXWAITFORSBCOMLPROC __glewXWaitForSbcOML = NULL; - -PFNGLXCHOOSEFBCONFIGSGIXPROC __glewXChooseFBConfigSGIX = NULL; -PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC __glewXCreateContextWithConfigSGIX = NULL; -PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC __glewXCreateGLXPixmapWithConfigSGIX = NULL; -PFNGLXGETFBCONFIGATTRIBSGIXPROC __glewXGetFBConfigAttribSGIX = NULL; -PFNGLXGETFBCONFIGFROMVISUALSGIXPROC __glewXGetFBConfigFromVisualSGIX = NULL; -PFNGLXGETVISUALFROMFBCONFIGSGIXPROC __glewXGetVisualFromFBConfigSGIX = NULL; - -PFNGLXBINDHYPERPIPESGIXPROC __glewXBindHyperpipeSGIX = NULL; -PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC __glewXDestroyHyperpipeConfigSGIX = NULL; -PFNGLXHYPERPIPEATTRIBSGIXPROC __glewXHyperpipeAttribSGIX = NULL; -PFNGLXHYPERPIPECONFIGSGIXPROC __glewXHyperpipeConfigSGIX = NULL; -PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC __glewXQueryHyperpipeAttribSGIX = NULL; -PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC __glewXQueryHyperpipeBestAttribSGIX = NULL; -PFNGLXQUERYHYPERPIPECONFIGSGIXPROC __glewXQueryHyperpipeConfigSGIX = NULL; -PFNGLXQUERYHYPERPIPENETWORKSGIXPROC __glewXQueryHyperpipeNetworkSGIX = NULL; - -PFNGLXCREATEGLXPBUFFERSGIXPROC __glewXCreateGLXPbufferSGIX = NULL; -PFNGLXDESTROYGLXPBUFFERSGIXPROC __glewXDestroyGLXPbufferSGIX = NULL; -PFNGLXGETSELECTEDEVENTSGIXPROC __glewXGetSelectedEventSGIX = NULL; -PFNGLXQUERYGLXPBUFFERSGIXPROC __glewXQueryGLXPbufferSGIX = NULL; -PFNGLXSELECTEVENTSGIXPROC __glewXSelectEventSGIX = NULL; - -PFNGLXBINDSWAPBARRIERSGIXPROC __glewXBindSwapBarrierSGIX = NULL; -PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC __glewXQueryMaxSwapBarriersSGIX = NULL; - -PFNGLXJOINSWAPGROUPSGIXPROC __glewXJoinSwapGroupSGIX = NULL; - -PFNGLXBINDCHANNELTOWINDOWSGIXPROC __glewXBindChannelToWindowSGIX = NULL; -PFNGLXCHANNELRECTSGIXPROC __glewXChannelRectSGIX = NULL; -PFNGLXCHANNELRECTSYNCSGIXPROC __glewXChannelRectSyncSGIX = NULL; -PFNGLXQUERYCHANNELDELTASSGIXPROC __glewXQueryChannelDeltasSGIX = NULL; -PFNGLXQUERYCHANNELRECTSGIXPROC __glewXQueryChannelRectSGIX = NULL; - -PFNGLXCUSHIONSGIPROC __glewXCushionSGI = NULL; - -PFNGLXGETCURRENTREADDRAWABLESGIPROC __glewXGetCurrentReadDrawableSGI = NULL; -PFNGLXMAKECURRENTREADSGIPROC __glewXMakeCurrentReadSGI = NULL; - -PFNGLXSWAPINTERVALSGIPROC __glewXSwapIntervalSGI = NULL; - -PFNGLXGETVIDEOSYNCSGIPROC __glewXGetVideoSyncSGI = NULL; -PFNGLXWAITVIDEOSYNCSGIPROC __glewXWaitVideoSyncSGI = NULL; - -PFNGLXGETTRANSPARENTINDEXSUNPROC __glewXGetTransparentIndexSUN = NULL; - -PFNGLXGETVIDEORESIZESUNPROC __glewXGetVideoResizeSUN = NULL; -PFNGLXVIDEORESIZESUNPROC __glewXVideoResizeSUN = NULL; - -#if !defined(GLEW_MX) - -GLboolean __GLXEW_VERSION_1_0 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_1 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_2 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_3 = GL_FALSE; -GLboolean __GLXEW_VERSION_1_4 = GL_FALSE; -GLboolean __GLXEW_3DFX_multisample = GL_FALSE; -GLboolean __GLXEW_AMD_gpu_association = GL_FALSE; -GLboolean __GLXEW_ARB_create_context = GL_FALSE; -GLboolean __GLXEW_ARB_create_context_profile = GL_FALSE; -GLboolean __GLXEW_ARB_create_context_robustness = GL_FALSE; -GLboolean __GLXEW_ARB_fbconfig_float = GL_FALSE; -GLboolean __GLXEW_ARB_framebuffer_sRGB = GL_FALSE; -GLboolean __GLXEW_ARB_get_proc_address = GL_FALSE; -GLboolean __GLXEW_ARB_multisample = GL_FALSE; -GLboolean __GLXEW_ARB_robustness_application_isolation = GL_FALSE; -GLboolean __GLXEW_ARB_robustness_share_group_isolation = GL_FALSE; -GLboolean __GLXEW_ARB_vertex_buffer_object = GL_FALSE; -GLboolean __GLXEW_ATI_pixel_format_float = GL_FALSE; -GLboolean __GLXEW_ATI_render_texture = GL_FALSE; -GLboolean __GLXEW_EXT_buffer_age = GL_FALSE; -GLboolean __GLXEW_EXT_create_context_es2_profile = GL_FALSE; -GLboolean __GLXEW_EXT_create_context_es_profile = GL_FALSE; -GLboolean __GLXEW_EXT_fbconfig_packed_float = GL_FALSE; -GLboolean __GLXEW_EXT_framebuffer_sRGB = GL_FALSE; -GLboolean __GLXEW_EXT_import_context = GL_FALSE; -GLboolean __GLXEW_EXT_scene_marker = GL_FALSE; -GLboolean __GLXEW_EXT_swap_control = GL_FALSE; -GLboolean __GLXEW_EXT_swap_control_tear = GL_FALSE; -GLboolean __GLXEW_EXT_texture_from_pixmap = GL_FALSE; -GLboolean __GLXEW_EXT_visual_info = GL_FALSE; -GLboolean __GLXEW_EXT_visual_rating = GL_FALSE; -GLboolean __GLXEW_INTEL_swap_event = GL_FALSE; -GLboolean __GLXEW_MESA_agp_offset = GL_FALSE; -GLboolean __GLXEW_MESA_copy_sub_buffer = GL_FALSE; -GLboolean __GLXEW_MESA_pixmap_colormap = GL_FALSE; -GLboolean __GLXEW_MESA_release_buffers = GL_FALSE; -GLboolean __GLXEW_MESA_set_3dfx_mode = GL_FALSE; -GLboolean __GLXEW_MESA_swap_control = GL_FALSE; -GLboolean __GLXEW_NV_copy_image = GL_FALSE; -GLboolean __GLXEW_NV_float_buffer = GL_FALSE; -GLboolean __GLXEW_NV_multisample_coverage = GL_FALSE; -GLboolean __GLXEW_NV_present_video = GL_FALSE; -GLboolean __GLXEW_NV_swap_group = GL_FALSE; -GLboolean __GLXEW_NV_vertex_array_range = GL_FALSE; -GLboolean __GLXEW_NV_video_capture = GL_FALSE; -GLboolean __GLXEW_NV_video_output = GL_FALSE; -GLboolean __GLXEW_OML_swap_method = GL_FALSE; -GLboolean __GLXEW_OML_sync_control = GL_FALSE; -GLboolean __GLXEW_SGIS_blended_overlay = GL_FALSE; -GLboolean __GLXEW_SGIS_color_range = GL_FALSE; -GLboolean __GLXEW_SGIS_multisample = GL_FALSE; -GLboolean __GLXEW_SGIS_shared_multisample = GL_FALSE; -GLboolean __GLXEW_SGIX_fbconfig = GL_FALSE; -GLboolean __GLXEW_SGIX_hyperpipe = GL_FALSE; -GLboolean __GLXEW_SGIX_pbuffer = GL_FALSE; -GLboolean __GLXEW_SGIX_swap_barrier = GL_FALSE; -GLboolean __GLXEW_SGIX_swap_group = GL_FALSE; -GLboolean __GLXEW_SGIX_video_resize = GL_FALSE; -GLboolean __GLXEW_SGIX_visual_select_group = GL_FALSE; -GLboolean __GLXEW_SGI_cushion = GL_FALSE; -GLboolean __GLXEW_SGI_make_current_read = GL_FALSE; -GLboolean __GLXEW_SGI_swap_control = GL_FALSE; -GLboolean __GLXEW_SGI_video_sync = GL_FALSE; -GLboolean __GLXEW_SUN_get_transparent_index = GL_FALSE; -GLboolean __GLXEW_SUN_video_resize = GL_FALSE; - -#endif /* !GLEW_MX */ - -#ifdef GLX_VERSION_1_2 - -static GLboolean _glewInit_GLX_VERSION_1_2 (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetCurrentDisplay = (PFNGLXGETCURRENTDISPLAYPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentDisplay")) == NULL) || r; - - return r; -} - -#endif /* GLX_VERSION_1_2 */ - -#ifdef GLX_VERSION_1_3 - -static GLboolean _glewInit_GLX_VERSION_1_3 (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXChooseFBConfig = (PFNGLXCHOOSEFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfig")) == NULL) || r; - r = ((glXCreateNewContext = (PFNGLXCREATENEWCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXCreateNewContext")) == NULL) || r; - r = ((glXCreatePbuffer = (PFNGLXCREATEPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXCreatePbuffer")) == NULL) || r; - r = ((glXCreatePixmap = (PFNGLXCREATEPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXCreatePixmap")) == NULL) || r; - r = ((glXCreateWindow = (PFNGLXCREATEWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXCreateWindow")) == NULL) || r; - r = ((glXDestroyPbuffer = (PFNGLXDESTROYPBUFFERPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPbuffer")) == NULL) || r; - r = ((glXDestroyPixmap = (PFNGLXDESTROYPIXMAPPROC)glewGetProcAddress((const GLubyte*)"glXDestroyPixmap")) == NULL) || r; - r = ((glXDestroyWindow = (PFNGLXDESTROYWINDOWPROC)glewGetProcAddress((const GLubyte*)"glXDestroyWindow")) == NULL) || r; - r = ((glXGetCurrentReadDrawable = (PFNGLXGETCURRENTREADDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawable")) == NULL) || r; - r = ((glXGetFBConfigAttrib = (PFNGLXGETFBCONFIGATTRIBPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttrib")) == NULL) || r; - r = ((glXGetFBConfigs = (PFNGLXGETFBCONFIGSPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigs")) == NULL) || r; - r = ((glXGetSelectedEvent = (PFNGLXGETSELECTEDEVENTPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEvent")) == NULL) || r; - r = ((glXGetVisualFromFBConfig = (PFNGLXGETVISUALFROMFBCONFIGPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfig")) == NULL) || r; - r = ((glXMakeContextCurrent = (PFNGLXMAKECONTEXTCURRENTPROC)glewGetProcAddress((const GLubyte*)"glXMakeContextCurrent")) == NULL) || r; - r = ((glXQueryContext = (PFNGLXQUERYCONTEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContext")) == NULL) || r; - r = ((glXQueryDrawable = (PFNGLXQUERYDRAWABLEPROC)glewGetProcAddress((const GLubyte*)"glXQueryDrawable")) == NULL) || r; - r = ((glXSelectEvent = (PFNGLXSELECTEVENTPROC)glewGetProcAddress((const GLubyte*)"glXSelectEvent")) == NULL) || r; - - return r; -} - -#endif /* GLX_VERSION_1_3 */ - -#ifdef GLX_VERSION_1_4 - -#endif /* GLX_VERSION_1_4 */ - -#ifdef GLX_3DFX_multisample - -#endif /* GLX_3DFX_multisample */ - -#ifdef GLX_AMD_gpu_association - -static GLboolean _glewInit_GLX_AMD_gpu_association (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBlitContextFramebufferAMD = (PFNGLXBLITCONTEXTFRAMEBUFFERAMDPROC)glewGetProcAddress((const GLubyte*)"glXBlitContextFramebufferAMD")) == NULL) || r; - r = ((glXCreateAssociatedContextAMD = (PFNGLXCREATEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXCreateAssociatedContextAMD")) == NULL) || r; - r = ((glXCreateAssociatedContextAttribsAMD = (PFNGLXCREATEASSOCIATEDCONTEXTATTRIBSAMDPROC)glewGetProcAddress((const GLubyte*)"glXCreateAssociatedContextAttribsAMD")) == NULL) || r; - r = ((glXDeleteAssociatedContextAMD = (PFNGLXDELETEASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXDeleteAssociatedContextAMD")) == NULL) || r; - r = ((glXGetContextGPUIDAMD = (PFNGLXGETCONTEXTGPUIDAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetContextGPUIDAMD")) == NULL) || r; - r = ((glXGetCurrentAssociatedContextAMD = (PFNGLXGETCURRENTASSOCIATEDCONTEXTAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentAssociatedContextAMD")) == NULL) || r; - r = ((glXGetGPUIDsAMD = (PFNGLXGETGPUIDSAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetGPUIDsAMD")) == NULL) || r; - r = ((glXGetGPUInfoAMD = (PFNGLXGETGPUINFOAMDPROC)glewGetProcAddress((const GLubyte*)"glXGetGPUInfoAMD")) == NULL) || r; - r = ((glXMakeAssociatedContextCurrentAMD = (PFNGLXMAKEASSOCIATEDCONTEXTCURRENTAMDPROC)glewGetProcAddress((const GLubyte*)"glXMakeAssociatedContextCurrentAMD")) == NULL) || r; - - return r; -} - -#endif /* GLX_AMD_gpu_association */ - -#ifdef GLX_ARB_create_context - -static GLboolean _glewInit_GLX_ARB_create_context (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextAttribsARB")) == NULL) || r; - - return r; -} - -#endif /* GLX_ARB_create_context */ - -#ifdef GLX_ARB_create_context_profile - -#endif /* GLX_ARB_create_context_profile */ - -#ifdef GLX_ARB_create_context_robustness - -#endif /* GLX_ARB_create_context_robustness */ - -#ifdef GLX_ARB_fbconfig_float - -#endif /* GLX_ARB_fbconfig_float */ - -#ifdef GLX_ARB_framebuffer_sRGB - -#endif /* GLX_ARB_framebuffer_sRGB */ - -#ifdef GLX_ARB_get_proc_address - -#endif /* GLX_ARB_get_proc_address */ - -#ifdef GLX_ARB_multisample - -#endif /* GLX_ARB_multisample */ - -#ifdef GLX_ARB_robustness_application_isolation - -#endif /* GLX_ARB_robustness_application_isolation */ - -#ifdef GLX_ARB_robustness_share_group_isolation - -#endif /* GLX_ARB_robustness_share_group_isolation */ - -#ifdef GLX_ARB_vertex_buffer_object - -#endif /* GLX_ARB_vertex_buffer_object */ - -#ifdef GLX_ATI_pixel_format_float - -#endif /* GLX_ATI_pixel_format_float */ - -#ifdef GLX_ATI_render_texture - -static GLboolean _glewInit_GLX_ATI_render_texture (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindTexImageATI = (PFNGLXBINDTEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageATI")) == NULL) || r; - r = ((glXDrawableAttribATI = (PFNGLXDRAWABLEATTRIBATIPROC)glewGetProcAddress((const GLubyte*)"glXDrawableAttribATI")) == NULL) || r; - r = ((glXReleaseTexImageATI = (PFNGLXRELEASETEXIMAGEATIPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageATI")) == NULL) || r; - - return r; -} - -#endif /* GLX_ATI_render_texture */ - -#ifdef GLX_EXT_buffer_age - -#endif /* GLX_EXT_buffer_age */ - -#ifdef GLX_EXT_create_context_es2_profile - -#endif /* GLX_EXT_create_context_es2_profile */ - -#ifdef GLX_EXT_create_context_es_profile - -#endif /* GLX_EXT_create_context_es_profile */ - -#ifdef GLX_EXT_fbconfig_packed_float - -#endif /* GLX_EXT_fbconfig_packed_float */ - -#ifdef GLX_EXT_framebuffer_sRGB - -#endif /* GLX_EXT_framebuffer_sRGB */ - -#ifdef GLX_EXT_import_context - -static GLboolean _glewInit_GLX_EXT_import_context (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXFreeContextEXT = (PFNGLXFREECONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXFreeContextEXT")) == NULL) || r; - r = ((glXGetContextIDEXT = (PFNGLXGETCONTEXTIDEXTPROC)glewGetProcAddress((const GLubyte*)"glXGetContextIDEXT")) == NULL) || r; - r = ((glXImportContextEXT = (PFNGLXIMPORTCONTEXTEXTPROC)glewGetProcAddress((const GLubyte*)"glXImportContextEXT")) == NULL) || r; - r = ((glXQueryContextInfoEXT = (PFNGLXQUERYCONTEXTINFOEXTPROC)glewGetProcAddress((const GLubyte*)"glXQueryContextInfoEXT")) == NULL) || r; - - return r; -} - -#endif /* GLX_EXT_import_context */ - -#ifdef GLX_EXT_scene_marker - -#endif /* GLX_EXT_scene_marker */ - -#ifdef GLX_EXT_swap_control - -static GLboolean _glewInit_GLX_EXT_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalEXT")) == NULL) || r; - - return r; -} - -#endif /* GLX_EXT_swap_control */ - -#ifdef GLX_EXT_swap_control_tear - -#endif /* GLX_EXT_swap_control_tear */ - -#ifdef GLX_EXT_texture_from_pixmap - -static GLboolean _glewInit_GLX_EXT_texture_from_pixmap (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXBindTexImageEXT")) == NULL) || r; - r = ((glXReleaseTexImageEXT = (PFNGLXRELEASETEXIMAGEEXTPROC)glewGetProcAddress((const GLubyte*)"glXReleaseTexImageEXT")) == NULL) || r; - - return r; -} - -#endif /* GLX_EXT_texture_from_pixmap */ - -#ifdef GLX_EXT_visual_info - -#endif /* GLX_EXT_visual_info */ - -#ifdef GLX_EXT_visual_rating - -#endif /* GLX_EXT_visual_rating */ - -#ifdef GLX_INTEL_swap_event - -#endif /* GLX_INTEL_swap_event */ - -#ifdef GLX_MESA_agp_offset - -static GLboolean _glewInit_GLX_MESA_agp_offset (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetAGPOffsetMESA = (PFNGLXGETAGPOFFSETMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetAGPOffsetMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_agp_offset */ - -#ifdef GLX_MESA_copy_sub_buffer - -static GLboolean _glewInit_GLX_MESA_copy_sub_buffer (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCopySubBufferMESA = (PFNGLXCOPYSUBBUFFERMESAPROC)glewGetProcAddress((const GLubyte*)"glXCopySubBufferMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_copy_sub_buffer */ - -#ifdef GLX_MESA_pixmap_colormap - -static GLboolean _glewInit_GLX_MESA_pixmap_colormap (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCreateGLXPixmapMESA = (PFNGLXCREATEGLXPIXMAPMESAPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_pixmap_colormap */ - -#ifdef GLX_MESA_release_buffers - -static GLboolean _glewInit_GLX_MESA_release_buffers (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXReleaseBuffersMESA = (PFNGLXRELEASEBUFFERSMESAPROC)glewGetProcAddress((const GLubyte*)"glXReleaseBuffersMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_release_buffers */ - -#ifdef GLX_MESA_set_3dfx_mode - -static GLboolean _glewInit_GLX_MESA_set_3dfx_mode (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXSet3DfxModeMESA = (PFNGLXSET3DFXMODEMESAPROC)glewGetProcAddress((const GLubyte*)"glXSet3DfxModeMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_set_3dfx_mode */ - -#ifdef GLX_MESA_swap_control - -static GLboolean _glewInit_GLX_MESA_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetSwapIntervalMESA = (PFNGLXGETSWAPINTERVALMESAPROC)glewGetProcAddress((const GLubyte*)"glXGetSwapIntervalMESA")) == NULL) || r; - r = ((glXSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalMESA")) == NULL) || r; - - return r; -} - -#endif /* GLX_MESA_swap_control */ - -#ifdef GLX_NV_copy_image - -static GLboolean _glewInit_GLX_NV_copy_image (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCopyImageSubDataNV = (PFNGLXCOPYIMAGESUBDATANVPROC)glewGetProcAddress((const GLubyte*)"glXCopyImageSubDataNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_copy_image */ - -#ifdef GLX_NV_float_buffer - -#endif /* GLX_NV_float_buffer */ - -#ifdef GLX_NV_multisample_coverage - -#endif /* GLX_NV_multisample_coverage */ - -#ifdef GLX_NV_present_video - -static GLboolean _glewInit_GLX_NV_present_video (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindVideoDeviceNV = (PFNGLXBINDVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoDeviceNV")) == NULL) || r; - r = ((glXEnumerateVideoDevicesNV = (PFNGLXENUMERATEVIDEODEVICESNVPROC)glewGetProcAddress((const GLubyte*)"glXEnumerateVideoDevicesNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_present_video */ - -#ifdef GLX_NV_swap_group - -static GLboolean _glewInit_GLX_NV_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindSwapBarrierNV = (PFNGLXBINDSWAPBARRIERNVPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierNV")) == NULL) || r; - r = ((glXJoinSwapGroupNV = (PFNGLXJOINSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupNV")) == NULL) || r; - r = ((glXQueryFrameCountNV = (PFNGLXQUERYFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryFrameCountNV")) == NULL) || r; - r = ((glXQueryMaxSwapGroupsNV = (PFNGLXQUERYMAXSWAPGROUPSNVPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapGroupsNV")) == NULL) || r; - r = ((glXQuerySwapGroupNV = (PFNGLXQUERYSWAPGROUPNVPROC)glewGetProcAddress((const GLubyte*)"glXQuerySwapGroupNV")) == NULL) || r; - r = ((glXResetFrameCountNV = (PFNGLXRESETFRAMECOUNTNVPROC)glewGetProcAddress((const GLubyte*)"glXResetFrameCountNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_swap_group */ - -#ifdef GLX_NV_vertex_array_range - -static GLboolean _glewInit_GLX_NV_vertex_array_range (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXAllocateMemoryNV = (PFNGLXALLOCATEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXAllocateMemoryNV")) == NULL) || r; - r = ((glXFreeMemoryNV = (PFNGLXFREEMEMORYNVPROC)glewGetProcAddress((const GLubyte*)"glXFreeMemoryNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_vertex_array_range */ - -#ifdef GLX_NV_video_capture - -static GLboolean _glewInit_GLX_NV_video_capture (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindVideoCaptureDeviceNV = (PFNGLXBINDVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoCaptureDeviceNV")) == NULL) || r; - r = ((glXEnumerateVideoCaptureDevicesNV = (PFNGLXENUMERATEVIDEOCAPTUREDEVICESNVPROC)glewGetProcAddress((const GLubyte*)"glXEnumerateVideoCaptureDevicesNV")) == NULL) || r; - r = ((glXLockVideoCaptureDeviceNV = (PFNGLXLOCKVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXLockVideoCaptureDeviceNV")) == NULL) || r; - r = ((glXQueryVideoCaptureDeviceNV = (PFNGLXQUERYVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXQueryVideoCaptureDeviceNV")) == NULL) || r; - r = ((glXReleaseVideoCaptureDeviceNV = (PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoCaptureDeviceNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_video_capture */ - -#ifdef GLX_NV_video_output - -static GLboolean _glewInit_GLX_NV_video_output (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindVideoImageNV = (PFNGLXBINDVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXBindVideoImageNV")) == NULL) || r; - r = ((glXGetVideoDeviceNV = (PFNGLXGETVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoDeviceNV")) == NULL) || r; - r = ((glXGetVideoInfoNV = (PFNGLXGETVIDEOINFONVPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoInfoNV")) == NULL) || r; - r = ((glXReleaseVideoDeviceNV = (PFNGLXRELEASEVIDEODEVICENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoDeviceNV")) == NULL) || r; - r = ((glXReleaseVideoImageNV = (PFNGLXRELEASEVIDEOIMAGENVPROC)glewGetProcAddress((const GLubyte*)"glXReleaseVideoImageNV")) == NULL) || r; - r = ((glXSendPbufferToVideoNV = (PFNGLXSENDPBUFFERTOVIDEONVPROC)glewGetProcAddress((const GLubyte*)"glXSendPbufferToVideoNV")) == NULL) || r; - - return r; -} - -#endif /* GLX_NV_video_output */ - -#ifdef GLX_OML_swap_method - -#endif /* GLX_OML_swap_method */ - -#ifdef GLX_OML_sync_control - -static GLboolean _glewInit_GLX_OML_sync_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetMscRateOML = (PFNGLXGETMSCRATEOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetMscRateOML")) == NULL) || r; - r = ((glXGetSyncValuesOML = (PFNGLXGETSYNCVALUESOMLPROC)glewGetProcAddress((const GLubyte*)"glXGetSyncValuesOML")) == NULL) || r; - r = ((glXSwapBuffersMscOML = (PFNGLXSWAPBUFFERSMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXSwapBuffersMscOML")) == NULL) || r; - r = ((glXWaitForMscOML = (PFNGLXWAITFORMSCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForMscOML")) == NULL) || r; - r = ((glXWaitForSbcOML = (PFNGLXWAITFORSBCOMLPROC)glewGetProcAddress((const GLubyte*)"glXWaitForSbcOML")) == NULL) || r; - - return r; -} - -#endif /* GLX_OML_sync_control */ - -#ifdef GLX_SGIS_blended_overlay - -#endif /* GLX_SGIS_blended_overlay */ - -#ifdef GLX_SGIS_color_range - -#endif /* GLX_SGIS_color_range */ - -#ifdef GLX_SGIS_multisample - -#endif /* GLX_SGIS_multisample */ - -#ifdef GLX_SGIS_shared_multisample - -#endif /* GLX_SGIS_shared_multisample */ - -#ifdef GLX_SGIX_fbconfig - -static GLboolean _glewInit_GLX_SGIX_fbconfig (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXChooseFBConfigSGIX = (PFNGLXCHOOSEFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChooseFBConfigSGIX")) == NULL) || r; - r = ((glXCreateContextWithConfigSGIX = (PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateContextWithConfigSGIX")) == NULL) || r; - r = ((glXCreateGLXPixmapWithConfigSGIX = (PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPixmapWithConfigSGIX")) == NULL) || r; - r = ((glXGetFBConfigAttribSGIX = (PFNGLXGETFBCONFIGATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigAttribSGIX")) == NULL) || r; - r = ((glXGetFBConfigFromVisualSGIX = (PFNGLXGETFBCONFIGFROMVISUALSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetFBConfigFromVisualSGIX")) == NULL) || r; - r = ((glXGetVisualFromFBConfigSGIX = (PFNGLXGETVISUALFROMFBCONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetVisualFromFBConfigSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_fbconfig */ - -#ifdef GLX_SGIX_hyperpipe - -static GLboolean _glewInit_GLX_SGIX_hyperpipe (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindHyperpipeSGIX = (PFNGLXBINDHYPERPIPESGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindHyperpipeSGIX")) == NULL) || r; - r = ((glXDestroyHyperpipeConfigSGIX = (PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyHyperpipeConfigSGIX")) == NULL) || r; - r = ((glXHyperpipeAttribSGIX = (PFNGLXHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeAttribSGIX")) == NULL) || r; - r = ((glXHyperpipeConfigSGIX = (PFNGLXHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXHyperpipeConfigSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeAttribSGIX = (PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeAttribSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeBestAttribSGIX = (PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeBestAttribSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeConfigSGIX = (PFNGLXQUERYHYPERPIPECONFIGSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeConfigSGIX")) == NULL) || r; - r = ((glXQueryHyperpipeNetworkSGIX = (PFNGLXQUERYHYPERPIPENETWORKSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryHyperpipeNetworkSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_hyperpipe */ - -#ifdef GLX_SGIX_pbuffer - -static GLboolean _glewInit_GLX_SGIX_pbuffer (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCreateGLXPbufferSGIX = (PFNGLXCREATEGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXCreateGLXPbufferSGIX")) == NULL) || r; - r = ((glXDestroyGLXPbufferSGIX = (PFNGLXDESTROYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXDestroyGLXPbufferSGIX")) == NULL) || r; - r = ((glXGetSelectedEventSGIX = (PFNGLXGETSELECTEDEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXGetSelectedEventSGIX")) == NULL) || r; - r = ((glXQueryGLXPbufferSGIX = (PFNGLXQUERYGLXPBUFFERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryGLXPbufferSGIX")) == NULL) || r; - r = ((glXSelectEventSGIX = (PFNGLXSELECTEVENTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXSelectEventSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_pbuffer */ - -#ifdef GLX_SGIX_swap_barrier - -static GLboolean _glewInit_GLX_SGIX_swap_barrier (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindSwapBarrierSGIX = (PFNGLXBINDSWAPBARRIERSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindSwapBarrierSGIX")) == NULL) || r; - r = ((glXQueryMaxSwapBarriersSGIX = (PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryMaxSwapBarriersSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_swap_barrier */ - -#ifdef GLX_SGIX_swap_group - -static GLboolean _glewInit_GLX_SGIX_swap_group (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXJoinSwapGroupSGIX = (PFNGLXJOINSWAPGROUPSGIXPROC)glewGetProcAddress((const GLubyte*)"glXJoinSwapGroupSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_swap_group */ - -#ifdef GLX_SGIX_video_resize - -static GLboolean _glewInit_GLX_SGIX_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXBindChannelToWindowSGIX = (PFNGLXBINDCHANNELTOWINDOWSGIXPROC)glewGetProcAddress((const GLubyte*)"glXBindChannelToWindowSGIX")) == NULL) || r; - r = ((glXChannelRectSGIX = (PFNGLXCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSGIX")) == NULL) || r; - r = ((glXChannelRectSyncSGIX = (PFNGLXCHANNELRECTSYNCSGIXPROC)glewGetProcAddress((const GLubyte*)"glXChannelRectSyncSGIX")) == NULL) || r; - r = ((glXQueryChannelDeltasSGIX = (PFNGLXQUERYCHANNELDELTASSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelDeltasSGIX")) == NULL) || r; - r = ((glXQueryChannelRectSGIX = (PFNGLXQUERYCHANNELRECTSGIXPROC)glewGetProcAddress((const GLubyte*)"glXQueryChannelRectSGIX")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGIX_video_resize */ - -#ifdef GLX_SGIX_visual_select_group - -#endif /* GLX_SGIX_visual_select_group */ - -#ifdef GLX_SGI_cushion - -static GLboolean _glewInit_GLX_SGI_cushion (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXCushionSGI = (PFNGLXCUSHIONSGIPROC)glewGetProcAddress((const GLubyte*)"glXCushionSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_cushion */ - -#ifdef GLX_SGI_make_current_read - -static GLboolean _glewInit_GLX_SGI_make_current_read (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetCurrentReadDrawableSGI = (PFNGLXGETCURRENTREADDRAWABLESGIPROC)glewGetProcAddress((const GLubyte*)"glXGetCurrentReadDrawableSGI")) == NULL) || r; - r = ((glXMakeCurrentReadSGI = (PFNGLXMAKECURRENTREADSGIPROC)glewGetProcAddress((const GLubyte*)"glXMakeCurrentReadSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_make_current_read */ - -#ifdef GLX_SGI_swap_control - -static GLboolean _glewInit_GLX_SGI_swap_control (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glewGetProcAddress((const GLubyte*)"glXSwapIntervalSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_swap_control */ - -#ifdef GLX_SGI_video_sync - -static GLboolean _glewInit_GLX_SGI_video_sync (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetVideoSyncSGI = (PFNGLXGETVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoSyncSGI")) == NULL) || r; - r = ((glXWaitVideoSyncSGI = (PFNGLXWAITVIDEOSYNCSGIPROC)glewGetProcAddress((const GLubyte*)"glXWaitVideoSyncSGI")) == NULL) || r; - - return r; -} - -#endif /* GLX_SGI_video_sync */ - -#ifdef GLX_SUN_get_transparent_index - -static GLboolean _glewInit_GLX_SUN_get_transparent_index (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetTransparentIndexSUN = (PFNGLXGETTRANSPARENTINDEXSUNPROC)glewGetProcAddress((const GLubyte*)"glXGetTransparentIndexSUN")) == NULL) || r; - - return r; -} - -#endif /* GLX_SUN_get_transparent_index */ - -#ifdef GLX_SUN_video_resize - -static GLboolean _glewInit_GLX_SUN_video_resize (GLXEW_CONTEXT_ARG_DEF_INIT) -{ - GLboolean r = GL_FALSE; - - r = ((glXGetVideoResizeSUN = (PFNGLXGETVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXGetVideoResizeSUN")) == NULL) || r; - r = ((glXVideoResizeSUN = (PFNGLXVIDEORESIZESUNPROC)glewGetProcAddress((const GLubyte*)"glXVideoResizeSUN")) == NULL) || r; - - return r; -} - -#endif /* GLX_SUN_video_resize */ - -/* ------------------------------------------------------------------------ */ - -GLboolean glxewGetExtension (const char* name) -{ - const GLubyte* start; - const GLubyte* end; - - if (glXGetCurrentDisplay == NULL) return GL_FALSE; - start = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (0 == start) return GL_FALSE; - end = start + _glewStrLen(start); - return _glewSearchExtension(name, start, end); -} - -GLenum glxewContextInit (GLXEW_CONTEXT_ARG_DEF_LIST) -{ - int major, minor; - const GLubyte* extStart; - const GLubyte* extEnd; - /* initialize core GLX 1.2 */ - if (_glewInit_GLX_VERSION_1_2(GLEW_CONTEXT_ARG_VAR_INIT)) return GLEW_ERROR_GLX_VERSION_11_ONLY; - /* initialize flags */ - CONST_CAST(GLXEW_VERSION_1_0) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_1) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_2) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_TRUE; - CONST_CAST(GLXEW_VERSION_1_4) = GL_TRUE; - /* query GLX version */ - glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); - if (major == 1 && minor <= 3) - { - switch (minor) - { - case 3: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - break; - case 2: - CONST_CAST(GLXEW_VERSION_1_4) = GL_FALSE; - CONST_CAST(GLXEW_VERSION_1_3) = GL_FALSE; - break; - default: - return GLEW_ERROR_GLX_VERSION_11_ONLY; - break; - } - } - /* query GLX extension string */ - extStart = 0; - if (glXGetCurrentDisplay != NULL) - extStart = (const GLubyte*)glXGetClientString(glXGetCurrentDisplay(), GLX_EXTENSIONS); - if (extStart == 0) - extStart = (const GLubyte *)""; - extEnd = extStart + _glewStrLen(extStart); - /* initialize extensions */ -#ifdef GLX_VERSION_1_3 - if (glewExperimental || GLXEW_VERSION_1_3) CONST_CAST(GLXEW_VERSION_1_3) = !_glewInit_GLX_VERSION_1_3(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_VERSION_1_3 */ -#ifdef GLX_3DFX_multisample - CONST_CAST(GLXEW_3DFX_multisample) = _glewSearchExtension("GLX_3DFX_multisample", extStart, extEnd); -#endif /* GLX_3DFX_multisample */ -#ifdef GLX_AMD_gpu_association - CONST_CAST(GLXEW_AMD_gpu_association) = _glewSearchExtension("GLX_AMD_gpu_association", extStart, extEnd); - if (glewExperimental || GLXEW_AMD_gpu_association) CONST_CAST(GLXEW_AMD_gpu_association) = !_glewInit_GLX_AMD_gpu_association(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_AMD_gpu_association */ -#ifdef GLX_ARB_create_context - CONST_CAST(GLXEW_ARB_create_context) = _glewSearchExtension("GLX_ARB_create_context", extStart, extEnd); - if (glewExperimental || GLXEW_ARB_create_context) CONST_CAST(GLXEW_ARB_create_context) = !_glewInit_GLX_ARB_create_context(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_ARB_create_context */ -#ifdef GLX_ARB_create_context_profile - CONST_CAST(GLXEW_ARB_create_context_profile) = _glewSearchExtension("GLX_ARB_create_context_profile", extStart, extEnd); -#endif /* GLX_ARB_create_context_profile */ -#ifdef GLX_ARB_create_context_robustness - CONST_CAST(GLXEW_ARB_create_context_robustness) = _glewSearchExtension("GLX_ARB_create_context_robustness", extStart, extEnd); -#endif /* GLX_ARB_create_context_robustness */ -#ifdef GLX_ARB_fbconfig_float - CONST_CAST(GLXEW_ARB_fbconfig_float) = _glewSearchExtension("GLX_ARB_fbconfig_float", extStart, extEnd); -#endif /* GLX_ARB_fbconfig_float */ -#ifdef GLX_ARB_framebuffer_sRGB - CONST_CAST(GLXEW_ARB_framebuffer_sRGB) = _glewSearchExtension("GLX_ARB_framebuffer_sRGB", extStart, extEnd); -#endif /* GLX_ARB_framebuffer_sRGB */ -#ifdef GLX_ARB_get_proc_address - CONST_CAST(GLXEW_ARB_get_proc_address) = _glewSearchExtension("GLX_ARB_get_proc_address", extStart, extEnd); -#endif /* GLX_ARB_get_proc_address */ -#ifdef GLX_ARB_multisample - CONST_CAST(GLXEW_ARB_multisample) = _glewSearchExtension("GLX_ARB_multisample", extStart, extEnd); -#endif /* GLX_ARB_multisample */ -#ifdef GLX_ARB_robustness_application_isolation - CONST_CAST(GLXEW_ARB_robustness_application_isolation) = _glewSearchExtension("GLX_ARB_robustness_application_isolation", extStart, extEnd); -#endif /* GLX_ARB_robustness_application_isolation */ -#ifdef GLX_ARB_robustness_share_group_isolation - CONST_CAST(GLXEW_ARB_robustness_share_group_isolation) = _glewSearchExtension("GLX_ARB_robustness_share_group_isolation", extStart, extEnd); -#endif /* GLX_ARB_robustness_share_group_isolation */ -#ifdef GLX_ARB_vertex_buffer_object - CONST_CAST(GLXEW_ARB_vertex_buffer_object) = _glewSearchExtension("GLX_ARB_vertex_buffer_object", extStart, extEnd); -#endif /* GLX_ARB_vertex_buffer_object */ -#ifdef GLX_ATI_pixel_format_float - CONST_CAST(GLXEW_ATI_pixel_format_float) = _glewSearchExtension("GLX_ATI_pixel_format_float", extStart, extEnd); -#endif /* GLX_ATI_pixel_format_float */ -#ifdef GLX_ATI_render_texture - CONST_CAST(GLXEW_ATI_render_texture) = _glewSearchExtension("GLX_ATI_render_texture", extStart, extEnd); - if (glewExperimental || GLXEW_ATI_render_texture) CONST_CAST(GLXEW_ATI_render_texture) = !_glewInit_GLX_ATI_render_texture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_ATI_render_texture */ -#ifdef GLX_EXT_buffer_age - CONST_CAST(GLXEW_EXT_buffer_age) = _glewSearchExtension("GLX_EXT_buffer_age", extStart, extEnd); -#endif /* GLX_EXT_buffer_age */ -#ifdef GLX_EXT_create_context_es2_profile - CONST_CAST(GLXEW_EXT_create_context_es2_profile) = _glewSearchExtension("GLX_EXT_create_context_es2_profile", extStart, extEnd); -#endif /* GLX_EXT_create_context_es2_profile */ -#ifdef GLX_EXT_create_context_es_profile - CONST_CAST(GLXEW_EXT_create_context_es_profile) = _glewSearchExtension("GLX_EXT_create_context_es_profile", extStart, extEnd); -#endif /* GLX_EXT_create_context_es_profile */ -#ifdef GLX_EXT_fbconfig_packed_float - CONST_CAST(GLXEW_EXT_fbconfig_packed_float) = _glewSearchExtension("GLX_EXT_fbconfig_packed_float", extStart, extEnd); -#endif /* GLX_EXT_fbconfig_packed_float */ -#ifdef GLX_EXT_framebuffer_sRGB - CONST_CAST(GLXEW_EXT_framebuffer_sRGB) = _glewSearchExtension("GLX_EXT_framebuffer_sRGB", extStart, extEnd); -#endif /* GLX_EXT_framebuffer_sRGB */ -#ifdef GLX_EXT_import_context - CONST_CAST(GLXEW_EXT_import_context) = _glewSearchExtension("GLX_EXT_import_context", extStart, extEnd); - if (glewExperimental || GLXEW_EXT_import_context) CONST_CAST(GLXEW_EXT_import_context) = !_glewInit_GLX_EXT_import_context(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_EXT_import_context */ -#ifdef GLX_EXT_scene_marker - CONST_CAST(GLXEW_EXT_scene_marker) = _glewSearchExtension("GLX_EXT_scene_marker", extStart, extEnd); -#endif /* GLX_EXT_scene_marker */ -#ifdef GLX_EXT_swap_control - CONST_CAST(GLXEW_EXT_swap_control) = _glewSearchExtension("GLX_EXT_swap_control", extStart, extEnd); - if (glewExperimental || GLXEW_EXT_swap_control) CONST_CAST(GLXEW_EXT_swap_control) = !_glewInit_GLX_EXT_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_EXT_swap_control */ -#ifdef GLX_EXT_swap_control_tear - CONST_CAST(GLXEW_EXT_swap_control_tear) = _glewSearchExtension("GLX_EXT_swap_control_tear", extStart, extEnd); -#endif /* GLX_EXT_swap_control_tear */ -#ifdef GLX_EXT_texture_from_pixmap - CONST_CAST(GLXEW_EXT_texture_from_pixmap) = _glewSearchExtension("GLX_EXT_texture_from_pixmap", extStart, extEnd); - if (glewExperimental || GLXEW_EXT_texture_from_pixmap) CONST_CAST(GLXEW_EXT_texture_from_pixmap) = !_glewInit_GLX_EXT_texture_from_pixmap(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_EXT_texture_from_pixmap */ -#ifdef GLX_EXT_visual_info - CONST_CAST(GLXEW_EXT_visual_info) = _glewSearchExtension("GLX_EXT_visual_info", extStart, extEnd); -#endif /* GLX_EXT_visual_info */ -#ifdef GLX_EXT_visual_rating - CONST_CAST(GLXEW_EXT_visual_rating) = _glewSearchExtension("GLX_EXT_visual_rating", extStart, extEnd); -#endif /* GLX_EXT_visual_rating */ -#ifdef GLX_INTEL_swap_event - CONST_CAST(GLXEW_INTEL_swap_event) = _glewSearchExtension("GLX_INTEL_swap_event", extStart, extEnd); -#endif /* GLX_INTEL_swap_event */ -#ifdef GLX_MESA_agp_offset - CONST_CAST(GLXEW_MESA_agp_offset) = _glewSearchExtension("GLX_MESA_agp_offset", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_agp_offset) CONST_CAST(GLXEW_MESA_agp_offset) = !_glewInit_GLX_MESA_agp_offset(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_agp_offset */ -#ifdef GLX_MESA_copy_sub_buffer - CONST_CAST(GLXEW_MESA_copy_sub_buffer) = _glewSearchExtension("GLX_MESA_copy_sub_buffer", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_copy_sub_buffer) CONST_CAST(GLXEW_MESA_copy_sub_buffer) = !_glewInit_GLX_MESA_copy_sub_buffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_copy_sub_buffer */ -#ifdef GLX_MESA_pixmap_colormap - CONST_CAST(GLXEW_MESA_pixmap_colormap) = _glewSearchExtension("GLX_MESA_pixmap_colormap", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_pixmap_colormap) CONST_CAST(GLXEW_MESA_pixmap_colormap) = !_glewInit_GLX_MESA_pixmap_colormap(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_pixmap_colormap */ -#ifdef GLX_MESA_release_buffers - CONST_CAST(GLXEW_MESA_release_buffers) = _glewSearchExtension("GLX_MESA_release_buffers", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_release_buffers) CONST_CAST(GLXEW_MESA_release_buffers) = !_glewInit_GLX_MESA_release_buffers(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_release_buffers */ -#ifdef GLX_MESA_set_3dfx_mode - CONST_CAST(GLXEW_MESA_set_3dfx_mode) = _glewSearchExtension("GLX_MESA_set_3dfx_mode", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_set_3dfx_mode) CONST_CAST(GLXEW_MESA_set_3dfx_mode) = !_glewInit_GLX_MESA_set_3dfx_mode(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_set_3dfx_mode */ -#ifdef GLX_MESA_swap_control - CONST_CAST(GLXEW_MESA_swap_control) = _glewSearchExtension("GLX_MESA_swap_control", extStart, extEnd); - if (glewExperimental || GLXEW_MESA_swap_control) CONST_CAST(GLXEW_MESA_swap_control) = !_glewInit_GLX_MESA_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_MESA_swap_control */ -#ifdef GLX_NV_copy_image - CONST_CAST(GLXEW_NV_copy_image) = _glewSearchExtension("GLX_NV_copy_image", extStart, extEnd); - if (glewExperimental || GLXEW_NV_copy_image) CONST_CAST(GLXEW_NV_copy_image) = !_glewInit_GLX_NV_copy_image(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_copy_image */ -#ifdef GLX_NV_float_buffer - CONST_CAST(GLXEW_NV_float_buffer) = _glewSearchExtension("GLX_NV_float_buffer", extStart, extEnd); -#endif /* GLX_NV_float_buffer */ -#ifdef GLX_NV_multisample_coverage - CONST_CAST(GLXEW_NV_multisample_coverage) = _glewSearchExtension("GLX_NV_multisample_coverage", extStart, extEnd); -#endif /* GLX_NV_multisample_coverage */ -#ifdef GLX_NV_present_video - CONST_CAST(GLXEW_NV_present_video) = _glewSearchExtension("GLX_NV_present_video", extStart, extEnd); - if (glewExperimental || GLXEW_NV_present_video) CONST_CAST(GLXEW_NV_present_video) = !_glewInit_GLX_NV_present_video(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_present_video */ -#ifdef GLX_NV_swap_group - CONST_CAST(GLXEW_NV_swap_group) = _glewSearchExtension("GLX_NV_swap_group", extStart, extEnd); - if (glewExperimental || GLXEW_NV_swap_group) CONST_CAST(GLXEW_NV_swap_group) = !_glewInit_GLX_NV_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_swap_group */ -#ifdef GLX_NV_vertex_array_range - CONST_CAST(GLXEW_NV_vertex_array_range) = _glewSearchExtension("GLX_NV_vertex_array_range", extStart, extEnd); - if (glewExperimental || GLXEW_NV_vertex_array_range) CONST_CAST(GLXEW_NV_vertex_array_range) = !_glewInit_GLX_NV_vertex_array_range(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_vertex_array_range */ -#ifdef GLX_NV_video_capture - CONST_CAST(GLXEW_NV_video_capture) = _glewSearchExtension("GLX_NV_video_capture", extStart, extEnd); - if (glewExperimental || GLXEW_NV_video_capture) CONST_CAST(GLXEW_NV_video_capture) = !_glewInit_GLX_NV_video_capture(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_video_capture */ -#ifdef GLX_NV_video_output - CONST_CAST(GLXEW_NV_video_output) = _glewSearchExtension("GLX_NV_video_output", extStart, extEnd); - if (glewExperimental || GLXEW_NV_video_output) CONST_CAST(GLXEW_NV_video_output) = !_glewInit_GLX_NV_video_output(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_NV_video_output */ -#ifdef GLX_OML_swap_method - CONST_CAST(GLXEW_OML_swap_method) = _glewSearchExtension("GLX_OML_swap_method", extStart, extEnd); -#endif /* GLX_OML_swap_method */ -#ifdef GLX_OML_sync_control - CONST_CAST(GLXEW_OML_sync_control) = _glewSearchExtension("GLX_OML_sync_control", extStart, extEnd); - if (glewExperimental || GLXEW_OML_sync_control) CONST_CAST(GLXEW_OML_sync_control) = !_glewInit_GLX_OML_sync_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_OML_sync_control */ -#ifdef GLX_SGIS_blended_overlay - CONST_CAST(GLXEW_SGIS_blended_overlay) = _glewSearchExtension("GLX_SGIS_blended_overlay", extStart, extEnd); -#endif /* GLX_SGIS_blended_overlay */ -#ifdef GLX_SGIS_color_range - CONST_CAST(GLXEW_SGIS_color_range) = _glewSearchExtension("GLX_SGIS_color_range", extStart, extEnd); -#endif /* GLX_SGIS_color_range */ -#ifdef GLX_SGIS_multisample - CONST_CAST(GLXEW_SGIS_multisample) = _glewSearchExtension("GLX_SGIS_multisample", extStart, extEnd); -#endif /* GLX_SGIS_multisample */ -#ifdef GLX_SGIS_shared_multisample - CONST_CAST(GLXEW_SGIS_shared_multisample) = _glewSearchExtension("GLX_SGIS_shared_multisample", extStart, extEnd); -#endif /* GLX_SGIS_shared_multisample */ -#ifdef GLX_SGIX_fbconfig - CONST_CAST(GLXEW_SGIX_fbconfig) = _glewSearchExtension("GLX_SGIX_fbconfig", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_fbconfig) CONST_CAST(GLXEW_SGIX_fbconfig) = !_glewInit_GLX_SGIX_fbconfig(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_fbconfig */ -#ifdef GLX_SGIX_hyperpipe - CONST_CAST(GLXEW_SGIX_hyperpipe) = _glewSearchExtension("GLX_SGIX_hyperpipe", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_hyperpipe) CONST_CAST(GLXEW_SGIX_hyperpipe) = !_glewInit_GLX_SGIX_hyperpipe(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_hyperpipe */ -#ifdef GLX_SGIX_pbuffer - CONST_CAST(GLXEW_SGIX_pbuffer) = _glewSearchExtension("GLX_SGIX_pbuffer", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_pbuffer) CONST_CAST(GLXEW_SGIX_pbuffer) = !_glewInit_GLX_SGIX_pbuffer(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_pbuffer */ -#ifdef GLX_SGIX_swap_barrier - CONST_CAST(GLXEW_SGIX_swap_barrier) = _glewSearchExtension("GLX_SGIX_swap_barrier", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_swap_barrier) CONST_CAST(GLXEW_SGIX_swap_barrier) = !_glewInit_GLX_SGIX_swap_barrier(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_swap_barrier */ -#ifdef GLX_SGIX_swap_group - CONST_CAST(GLXEW_SGIX_swap_group) = _glewSearchExtension("GLX_SGIX_swap_group", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_swap_group) CONST_CAST(GLXEW_SGIX_swap_group) = !_glewInit_GLX_SGIX_swap_group(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_swap_group */ -#ifdef GLX_SGIX_video_resize - CONST_CAST(GLXEW_SGIX_video_resize) = _glewSearchExtension("GLX_SGIX_video_resize", extStart, extEnd); - if (glewExperimental || GLXEW_SGIX_video_resize) CONST_CAST(GLXEW_SGIX_video_resize) = !_glewInit_GLX_SGIX_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGIX_video_resize */ -#ifdef GLX_SGIX_visual_select_group - CONST_CAST(GLXEW_SGIX_visual_select_group) = _glewSearchExtension("GLX_SGIX_visual_select_group", extStart, extEnd); -#endif /* GLX_SGIX_visual_select_group */ -#ifdef GLX_SGI_cushion - CONST_CAST(GLXEW_SGI_cushion) = _glewSearchExtension("GLX_SGI_cushion", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_cushion) CONST_CAST(GLXEW_SGI_cushion) = !_glewInit_GLX_SGI_cushion(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_cushion */ -#ifdef GLX_SGI_make_current_read - CONST_CAST(GLXEW_SGI_make_current_read) = _glewSearchExtension("GLX_SGI_make_current_read", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_make_current_read) CONST_CAST(GLXEW_SGI_make_current_read) = !_glewInit_GLX_SGI_make_current_read(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_make_current_read */ -#ifdef GLX_SGI_swap_control - CONST_CAST(GLXEW_SGI_swap_control) = _glewSearchExtension("GLX_SGI_swap_control", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_swap_control) CONST_CAST(GLXEW_SGI_swap_control) = !_glewInit_GLX_SGI_swap_control(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_swap_control */ -#ifdef GLX_SGI_video_sync - CONST_CAST(GLXEW_SGI_video_sync) = _glewSearchExtension("GLX_SGI_video_sync", extStart, extEnd); - if (glewExperimental || GLXEW_SGI_video_sync) CONST_CAST(GLXEW_SGI_video_sync) = !_glewInit_GLX_SGI_video_sync(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SGI_video_sync */ -#ifdef GLX_SUN_get_transparent_index - CONST_CAST(GLXEW_SUN_get_transparent_index) = _glewSearchExtension("GLX_SUN_get_transparent_index", extStart, extEnd); - if (glewExperimental || GLXEW_SUN_get_transparent_index) CONST_CAST(GLXEW_SUN_get_transparent_index) = !_glewInit_GLX_SUN_get_transparent_index(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SUN_get_transparent_index */ -#ifdef GLX_SUN_video_resize - CONST_CAST(GLXEW_SUN_video_resize) = _glewSearchExtension("GLX_SUN_video_resize", extStart, extEnd); - if (glewExperimental || GLXEW_SUN_video_resize) CONST_CAST(GLXEW_SUN_video_resize) = !_glewInit_GLX_SUN_video_resize(GLEW_CONTEXT_ARG_VAR_INIT); -#endif /* GLX_SUN_video_resize */ - - return GLEW_OK; -} - -#endif /* !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */ - -/* ------------------------------------------------------------------------ */ - -const GLubyte * GLEWAPIENTRY glewGetErrorString (GLenum error) -{ - static const GLubyte* _glewErrorString[] = - { - (const GLubyte*)"No error", - (const GLubyte*)"Missing GL version", - (const GLubyte*)"GL 1.1 and up are not supported", - (const GLubyte*)"GLX 1.2 and up are not supported", - (const GLubyte*)"Unknown error" - }; - const int max_error = sizeof(_glewErrorString)/sizeof(*_glewErrorString) - 1; - return _glewErrorString[(int)error > max_error ? max_error : (int)error]; -} - -const GLubyte * GLEWAPIENTRY glewGetString (GLenum name) -{ - static const GLubyte* _glewString[] = - { - (const GLubyte*)NULL, - (const GLubyte*)"1.10.0", - (const GLubyte*)"1", - (const GLubyte*)"10", - (const GLubyte*)"0" - }; - const int max_string = sizeof(_glewString)/sizeof(*_glewString) - 1; - return _glewString[(int)name > max_string ? 0 : (int)name]; -} - -/* ------------------------------------------------------------------------ */ - -GLboolean glewExperimental = GL_FALSE; - -#if !defined(GLEW_MX) - -#if defined(_WIN32) -extern GLenum GLEWAPIENTRY wglewContextInit (void); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) -extern GLenum GLEWAPIENTRY glxewContextInit (void); -#endif /* _WIN32 */ - -GLenum GLEWAPIENTRY glewInit (void) -{ - GLenum r; - r = glewContextInit(); - if ( r != 0 ) return r; -#if defined(_WIN32) - return wglewContextInit(); -#elif !defined(__ANDROID__) && !defined(__native_client__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) /* _UNIX */ - return glxewContextInit(); -#else - return r; -#endif /* _WIN32 */ -} - -#endif /* !GLEW_MX */ -#ifdef GLEW_MX -GLboolean GLEWAPIENTRY glewContextIsSupported (const GLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY glewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"GL_", 3)) - { - if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) - { -#ifdef GL_VERSION_1_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) - { - ret = GLEW_VERSION_1_2; - continue; - } -#endif -#ifdef GL_VERSION_1_2_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2_1", 5)) - { - ret = GLEW_VERSION_1_2_1; - continue; - } -#endif -#ifdef GL_VERSION_1_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) - { - ret = GLEW_VERSION_1_3; - continue; - } -#endif -#ifdef GL_VERSION_1_4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) - { - ret = GLEW_VERSION_1_4; - continue; - } -#endif -#ifdef GL_VERSION_1_5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_5", 3)) - { - ret = GLEW_VERSION_1_5; - continue; - } -#endif -#ifdef GL_VERSION_2_0 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_0", 3)) - { - ret = GLEW_VERSION_2_0; - continue; - } -#endif -#ifdef GL_VERSION_2_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"2_1", 3)) - { - ret = GLEW_VERSION_2_1; - continue; - } -#endif -#ifdef GL_VERSION_3_0 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_0", 3)) - { - ret = GLEW_VERSION_3_0; - continue; - } -#endif -#ifdef GL_VERSION_3_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_1", 3)) - { - ret = GLEW_VERSION_3_1; - continue; - } -#endif -#ifdef GL_VERSION_3_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_2", 3)) - { - ret = GLEW_VERSION_3_2; - continue; - } -#endif -#ifdef GL_VERSION_3_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"3_3", 3)) - { - ret = GLEW_VERSION_3_3; - continue; - } -#endif -#ifdef GL_VERSION_4_0 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_0", 3)) - { - ret = GLEW_VERSION_4_0; - continue; - } -#endif -#ifdef GL_VERSION_4_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_1", 3)) - { - ret = GLEW_VERSION_4_1; - continue; - } -#endif -#ifdef GL_VERSION_4_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_2", 3)) - { - ret = GLEW_VERSION_4_2; - continue; - } -#endif -#ifdef GL_VERSION_4_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_3", 3)) - { - ret = GLEW_VERSION_4_3; - continue; - } -#endif -#ifdef GL_VERSION_4_4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"4_4", 3)) - { - ret = GLEW_VERSION_4_4; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) - { -#ifdef GL_3DFX_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_3DFX_multisample; - continue; - } -#endif -#ifdef GL_3DFX_tbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tbuffer", 7)) - { - ret = GLEW_3DFX_tbuffer; - continue; - } -#endif -#ifdef GL_3DFX_texture_compression_FXT1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_FXT1", 24)) - { - ret = GLEW_3DFX_texture_compression_FXT1; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) - { -#ifdef GL_AMD_blend_minmax_factor - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax_factor", 19)) - { - ret = GLEW_AMD_blend_minmax_factor; - continue; - } -#endif -#ifdef GL_AMD_conservative_depth - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_depth", 18)) - { - ret = GLEW_AMD_conservative_depth; - continue; - } -#endif -#ifdef GL_AMD_debug_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_output", 12)) - { - ret = GLEW_AMD_debug_output; - continue; - } -#endif -#ifdef GL_AMD_depth_clamp_separate - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp_separate", 20)) - { - ret = GLEW_AMD_depth_clamp_separate; - continue; - } -#endif -#ifdef GL_AMD_draw_buffers_blend - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers_blend", 18)) - { - ret = GLEW_AMD_draw_buffers_blend; - continue; - } -#endif -#ifdef GL_AMD_interleaved_elements - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interleaved_elements", 20)) - { - ret = GLEW_AMD_interleaved_elements; - continue; - } -#endif -#ifdef GL_AMD_multi_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) - { - ret = GLEW_AMD_multi_draw_indirect; - continue; - } -#endif -#ifdef GL_AMD_name_gen_delete - if (_glewStrSame3(&pos, &len, (const GLubyte*)"name_gen_delete", 15)) - { - ret = GLEW_AMD_name_gen_delete; - continue; - } -#endif -#ifdef GL_AMD_performance_monitor - if (_glewStrSame3(&pos, &len, (const GLubyte*)"performance_monitor", 19)) - { - ret = GLEW_AMD_performance_monitor; - continue; - } -#endif -#ifdef GL_AMD_pinned_memory - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pinned_memory", 13)) - { - ret = GLEW_AMD_pinned_memory; - continue; - } -#endif -#ifdef GL_AMD_query_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"query_buffer_object", 19)) - { - ret = GLEW_AMD_query_buffer_object; - continue; - } -#endif -#ifdef GL_AMD_sample_positions - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sample_positions", 16)) - { - ret = GLEW_AMD_sample_positions; - continue; - } -#endif -#ifdef GL_AMD_seamless_cubemap_per_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cubemap_per_texture", 28)) - { - ret = GLEW_AMD_seamless_cubemap_per_texture; - continue; - } -#endif -#ifdef GL_AMD_shader_stencil_export - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_stencil_export", 21)) - { - ret = GLEW_AMD_shader_stencil_export; - continue; - } -#endif -#ifdef GL_AMD_shader_trinary_minmax - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_trinary_minmax", 21)) - { - ret = GLEW_AMD_shader_trinary_minmax; - continue; - } -#endif -#ifdef GL_AMD_sparse_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sparse_texture", 14)) - { - ret = GLEW_AMD_sparse_texture; - continue; - } -#endif -#ifdef GL_AMD_stencil_operation_extended - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_operation_extended", 26)) - { - ret = GLEW_AMD_stencil_operation_extended; - continue; - } -#endif -#ifdef GL_AMD_texture_texture4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_texture4", 16)) - { - ret = GLEW_AMD_texture_texture4; - continue; - } -#endif -#ifdef GL_AMD_transform_feedback3_lines_triangles - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback3_lines_triangles", 35)) - { - ret = GLEW_AMD_transform_feedback3_lines_triangles; - continue; - } -#endif -#ifdef GL_AMD_vertex_shader_layer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_layer", 19)) - { - ret = GLEW_AMD_vertex_shader_layer; - continue; - } -#endif -#ifdef GL_AMD_vertex_shader_tessellator - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_tessellator", 25)) - { - ret = GLEW_AMD_vertex_shader_tessellator; - continue; - } -#endif -#ifdef GL_AMD_vertex_shader_viewport_index - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_viewport_index", 28)) - { - ret = GLEW_AMD_vertex_shader_viewport_index; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ANGLE_", 6)) - { -#ifdef GL_ANGLE_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) - { - ret = GLEW_ANGLE_depth_texture; - continue; - } -#endif -#ifdef GL_ANGLE_framebuffer_blit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) - { - ret = GLEW_ANGLE_framebuffer_blit; - continue; - } -#endif -#ifdef GL_ANGLE_framebuffer_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) - { - ret = GLEW_ANGLE_framebuffer_multisample; - continue; - } -#endif -#ifdef GL_ANGLE_instanced_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) - { - ret = GLEW_ANGLE_instanced_arrays; - continue; - } -#endif -#ifdef GL_ANGLE_pack_reverse_row_order - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_reverse_row_order", 22)) - { - ret = GLEW_ANGLE_pack_reverse_row_order; - continue; - } -#endif -#ifdef GL_ANGLE_program_binary - if (_glewStrSame3(&pos, &len, (const GLubyte*)"program_binary", 14)) - { - ret = GLEW_ANGLE_program_binary; - continue; - } -#endif -#ifdef GL_ANGLE_texture_compression_dxt1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) - { - ret = GLEW_ANGLE_texture_compression_dxt1; - continue; - } -#endif -#ifdef GL_ANGLE_texture_compression_dxt3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt3", 24)) - { - ret = GLEW_ANGLE_texture_compression_dxt3; - continue; - } -#endif -#ifdef GL_ANGLE_texture_compression_dxt5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt5", 24)) - { - ret = GLEW_ANGLE_texture_compression_dxt5; - continue; - } -#endif -#ifdef GL_ANGLE_texture_usage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_usage", 13)) - { - ret = GLEW_ANGLE_texture_usage; - continue; - } -#endif -#ifdef GL_ANGLE_timer_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) - { - ret = GLEW_ANGLE_timer_query; - continue; - } -#endif -#ifdef GL_ANGLE_translated_shader_source - if (_glewStrSame3(&pos, &len, (const GLubyte*)"translated_shader_source", 24)) - { - ret = GLEW_ANGLE_translated_shader_source; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"APPLE_", 6)) - { -#ifdef GL_APPLE_aux_depth_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"aux_depth_stencil", 17)) - { - ret = GLEW_APPLE_aux_depth_stencil; - continue; - } -#endif -#ifdef GL_APPLE_client_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"client_storage", 14)) - { - ret = GLEW_APPLE_client_storage; - continue; - } -#endif -#ifdef GL_APPLE_element_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) - { - ret = GLEW_APPLE_element_array; - continue; - } -#endif -#ifdef GL_APPLE_fence - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) - { - ret = GLEW_APPLE_fence; - continue; - } -#endif -#ifdef GL_APPLE_float_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_pixels", 12)) - { - ret = GLEW_APPLE_float_pixels; - continue; - } -#endif -#ifdef GL_APPLE_flush_buffer_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_buffer_range", 18)) - { - ret = GLEW_APPLE_flush_buffer_range; - continue; - } -#endif -#ifdef GL_APPLE_object_purgeable - if (_glewStrSame3(&pos, &len, (const GLubyte*)"object_purgeable", 16)) - { - ret = GLEW_APPLE_object_purgeable; - continue; - } -#endif -#ifdef GL_APPLE_pixel_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer", 12)) - { - ret = GLEW_APPLE_pixel_buffer; - continue; - } -#endif -#ifdef GL_APPLE_rgb_422 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"rgb_422", 7)) - { - ret = GLEW_APPLE_rgb_422; - continue; - } -#endif -#ifdef GL_APPLE_row_bytes - if (_glewStrSame3(&pos, &len, (const GLubyte*)"row_bytes", 9)) - { - ret = GLEW_APPLE_row_bytes; - continue; - } -#endif -#ifdef GL_APPLE_specular_vector - if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_vector", 15)) - { - ret = GLEW_APPLE_specular_vector; - continue; - } -#endif -#ifdef GL_APPLE_texture_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) - { - ret = GLEW_APPLE_texture_range; - continue; - } -#endif -#ifdef GL_APPLE_transform_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_hint", 14)) - { - ret = GLEW_APPLE_transform_hint; - continue; - } -#endif -#ifdef GL_APPLE_vertex_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) - { - ret = GLEW_APPLE_vertex_array_object; - continue; - } -#endif -#ifdef GL_APPLE_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = GLEW_APPLE_vertex_array_range; - continue; - } -#endif -#ifdef GL_APPLE_vertex_program_evaluators - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program_evaluators", 25)) - { - ret = GLEW_APPLE_vertex_program_evaluators; - continue; - } -#endif -#ifdef GL_APPLE_ycbcr_422 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_422", 9)) - { - ret = GLEW_APPLE_ycbcr_422; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) - { -#ifdef GL_ARB_ES2_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES2_compatibility", 17)) - { - ret = GLEW_ARB_ES2_compatibility; - continue; - } -#endif -#ifdef GL_ARB_ES3_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES3_compatibility", 17)) - { - ret = GLEW_ARB_ES3_compatibility; - continue; - } -#endif -#ifdef GL_ARB_arrays_of_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"arrays_of_arrays", 16)) - { - ret = GLEW_ARB_arrays_of_arrays; - continue; - } -#endif -#ifdef GL_ARB_base_instance - if (_glewStrSame3(&pos, &len, (const GLubyte*)"base_instance", 13)) - { - ret = GLEW_ARB_base_instance; - continue; - } -#endif -#ifdef GL_ARB_bindless_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_texture", 16)) - { - ret = GLEW_ARB_bindless_texture; - continue; - } -#endif -#ifdef GL_ARB_blend_func_extended - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_extended", 19)) - { - ret = GLEW_ARB_blend_func_extended; - continue; - } -#endif -#ifdef GL_ARB_buffer_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_storage", 14)) - { - ret = GLEW_ARB_buffer_storage; - continue; - } -#endif -#ifdef GL_ARB_cl_event - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cl_event", 8)) - { - ret = GLEW_ARB_cl_event; - continue; - } -#endif -#ifdef GL_ARB_clear_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clear_buffer_object", 19)) - { - ret = GLEW_ARB_clear_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_clear_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clear_texture", 13)) - { - ret = GLEW_ARB_clear_texture; - continue; - } -#endif -#ifdef GL_ARB_color_buffer_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_buffer_float", 18)) - { - ret = GLEW_ARB_color_buffer_float; - continue; - } -#endif -#ifdef GL_ARB_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compatibility", 13)) - { - ret = GLEW_ARB_compatibility; - continue; - } -#endif -#ifdef GL_ARB_compressed_texture_pixel_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_texture_pixel_storage", 32)) - { - ret = GLEW_ARB_compressed_texture_pixel_storage; - continue; - } -#endif -#ifdef GL_ARB_compute_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_shader", 14)) - { - ret = GLEW_ARB_compute_shader; - continue; - } -#endif -#ifdef GL_ARB_compute_variable_group_size - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_variable_group_size", 27)) - { - ret = GLEW_ARB_compute_variable_group_size; - continue; - } -#endif -#ifdef GL_ARB_conservative_depth - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conservative_depth", 18)) - { - ret = GLEW_ARB_conservative_depth; - continue; - } -#endif -#ifdef GL_ARB_copy_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_buffer", 11)) - { - ret = GLEW_ARB_copy_buffer; - continue; - } -#endif -#ifdef GL_ARB_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = GLEW_ARB_copy_image; - continue; - } -#endif -#ifdef GL_ARB_debug_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_output", 12)) - { - ret = GLEW_ARB_debug_output; - continue; - } -#endif -#ifdef GL_ARB_depth_buffer_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) - { - ret = GLEW_ARB_depth_buffer_float; - continue; - } -#endif -#ifdef GL_ARB_depth_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) - { - ret = GLEW_ARB_depth_clamp; - continue; - } -#endif -#ifdef GL_ARB_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) - { - ret = GLEW_ARB_depth_texture; - continue; - } -#endif -#ifdef GL_ARB_draw_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) - { - ret = GLEW_ARB_draw_buffers; - continue; - } -#endif -#ifdef GL_ARB_draw_buffers_blend - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers_blend", 18)) - { - ret = GLEW_ARB_draw_buffers_blend; - continue; - } -#endif -#ifdef GL_ARB_draw_elements_base_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_elements_base_vertex", 25)) - { - ret = GLEW_ARB_draw_elements_base_vertex; - continue; - } -#endif -#ifdef GL_ARB_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_indirect", 13)) - { - ret = GLEW_ARB_draw_indirect; - continue; - } -#endif -#ifdef GL_ARB_draw_instanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) - { - ret = GLEW_ARB_draw_instanced; - continue; - } -#endif -#ifdef GL_ARB_enhanced_layouts - if (_glewStrSame3(&pos, &len, (const GLubyte*)"enhanced_layouts", 16)) - { - ret = GLEW_ARB_enhanced_layouts; - continue; - } -#endif -#ifdef GL_ARB_explicit_attrib_location - if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_attrib_location", 24)) - { - ret = GLEW_ARB_explicit_attrib_location; - continue; - } -#endif -#ifdef GL_ARB_explicit_uniform_location - if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_uniform_location", 25)) - { - ret = GLEW_ARB_explicit_uniform_location; - continue; - } -#endif -#ifdef GL_ARB_fragment_coord_conventions - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_coord_conventions", 26)) - { - ret = GLEW_ARB_fragment_coord_conventions; - continue; - } -#endif -#ifdef GL_ARB_fragment_layer_viewport - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_layer_viewport", 23)) - { - ret = GLEW_ARB_fragment_layer_viewport; - continue; - } -#endif -#ifdef GL_ARB_fragment_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) - { - ret = GLEW_ARB_fragment_program; - continue; - } -#endif -#ifdef GL_ARB_fragment_program_shadow - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_shadow", 23)) - { - ret = GLEW_ARB_fragment_program_shadow; - continue; - } -#endif -#ifdef GL_ARB_fragment_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) - { - ret = GLEW_ARB_fragment_shader; - continue; - } -#endif -#ifdef GL_ARB_framebuffer_no_attachments - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_no_attachments", 26)) - { - ret = GLEW_ARB_framebuffer_no_attachments; - continue; - } -#endif -#ifdef GL_ARB_framebuffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) - { - ret = GLEW_ARB_framebuffer_object; - continue; - } -#endif -#ifdef GL_ARB_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLEW_ARB_framebuffer_sRGB; - continue; - } -#endif -#ifdef GL_ARB_geometry_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) - { - ret = GLEW_ARB_geometry_shader4; - continue; - } -#endif -#ifdef GL_ARB_get_program_binary - if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_program_binary", 18)) - { - ret = GLEW_ARB_get_program_binary; - continue; - } -#endif -#ifdef GL_ARB_gpu_shader5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader5", 11)) - { - ret = GLEW_ARB_gpu_shader5; - continue; - } -#endif -#ifdef GL_ARB_gpu_shader_fp64 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader_fp64", 15)) - { - ret = GLEW_ARB_gpu_shader_fp64; - continue; - } -#endif -#ifdef GL_ARB_half_float_pixel - if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_pixel", 16)) - { - ret = GLEW_ARB_half_float_pixel; - continue; - } -#endif -#ifdef GL_ARB_half_float_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float_vertex", 17)) - { - ret = GLEW_ARB_half_float_vertex; - continue; - } -#endif -#ifdef GL_ARB_imaging - if (_glewStrSame3(&pos, &len, (const GLubyte*)"imaging", 7)) - { - ret = GLEW_ARB_imaging; - continue; - } -#endif -#ifdef GL_ARB_indirect_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"indirect_parameters", 19)) - { - ret = GLEW_ARB_indirect_parameters; - continue; - } -#endif -#ifdef GL_ARB_instanced_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"instanced_arrays", 16)) - { - ret = GLEW_ARB_instanced_arrays; - continue; - } -#endif -#ifdef GL_ARB_internalformat_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"internalformat_query", 20)) - { - ret = GLEW_ARB_internalformat_query; - continue; - } -#endif -#ifdef GL_ARB_internalformat_query2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"internalformat_query2", 21)) - { - ret = GLEW_ARB_internalformat_query2; - continue; - } -#endif -#ifdef GL_ARB_invalidate_subdata - if (_glewStrSame3(&pos, &len, (const GLubyte*)"invalidate_subdata", 18)) - { - ret = GLEW_ARB_invalidate_subdata; - continue; - } -#endif -#ifdef GL_ARB_map_buffer_alignment - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_buffer_alignment", 20)) - { - ret = GLEW_ARB_map_buffer_alignment; - continue; - } -#endif -#ifdef GL_ARB_map_buffer_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_buffer_range", 16)) - { - ret = GLEW_ARB_map_buffer_range; - continue; - } -#endif -#ifdef GL_ARB_matrix_palette - if (_glewStrSame3(&pos, &len, (const GLubyte*)"matrix_palette", 14)) - { - ret = GLEW_ARB_matrix_palette; - continue; - } -#endif -#ifdef GL_ARB_multi_bind - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_bind", 10)) - { - ret = GLEW_ARB_multi_bind; - continue; - } -#endif -#ifdef GL_ARB_multi_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_indirect", 19)) - { - ret = GLEW_ARB_multi_draw_indirect; - continue; - } -#endif -#ifdef GL_ARB_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_ARB_multisample; - continue; - } -#endif -#ifdef GL_ARB_multitexture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multitexture", 12)) - { - ret = GLEW_ARB_multitexture; - continue; - } -#endif -#ifdef GL_ARB_occlusion_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) - { - ret = GLEW_ARB_occlusion_query; - continue; - } -#endif -#ifdef GL_ARB_occlusion_query2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query2", 16)) - { - ret = GLEW_ARB_occlusion_query2; - continue; - } -#endif -#ifdef GL_ARB_pixel_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) - { - ret = GLEW_ARB_pixel_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_point_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) - { - ret = GLEW_ARB_point_parameters; - continue; - } -#endif -#ifdef GL_ARB_point_sprite - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) - { - ret = GLEW_ARB_point_sprite; - continue; - } -#endif -#ifdef GL_ARB_program_interface_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"program_interface_query", 23)) - { - ret = GLEW_ARB_program_interface_query; - continue; - } -#endif -#ifdef GL_ARB_provoking_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"provoking_vertex", 16)) - { - ret = GLEW_ARB_provoking_vertex; - continue; - } -#endif -#ifdef GL_ARB_query_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"query_buffer_object", 19)) - { - ret = GLEW_ARB_query_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_robust_buffer_access_behavior - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robust_buffer_access_behavior", 29)) - { - ret = GLEW_ARB_robust_buffer_access_behavior; - continue; - } -#endif -#ifdef GL_ARB_robustness - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness", 10)) - { - ret = GLEW_ARB_robustness; - continue; - } -#endif -#ifdef GL_ARB_robustness_application_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) - { - ret = GLEW_ARB_robustness_application_isolation; - continue; - } -#endif -#ifdef GL_ARB_robustness_share_group_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) - { - ret = GLEW_ARB_robustness_share_group_isolation; - continue; - } -#endif -#ifdef GL_ARB_sample_shading - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sample_shading", 14)) - { - ret = GLEW_ARB_sample_shading; - continue; - } -#endif -#ifdef GL_ARB_sampler_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sampler_objects", 15)) - { - ret = GLEW_ARB_sampler_objects; - continue; - } -#endif -#ifdef GL_ARB_seamless_cube_map - if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cube_map", 17)) - { - ret = GLEW_ARB_seamless_cube_map; - continue; - } -#endif -#ifdef GL_ARB_seamless_cubemap_per_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"seamless_cubemap_per_texture", 28)) - { - ret = GLEW_ARB_seamless_cubemap_per_texture; - continue; - } -#endif -#ifdef GL_ARB_separate_shader_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_shader_objects", 23)) - { - ret = GLEW_ARB_separate_shader_objects; - continue; - } -#endif -#ifdef GL_ARB_shader_atomic_counters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_counters", 22)) - { - ret = GLEW_ARB_shader_atomic_counters; - continue; - } -#endif -#ifdef GL_ARB_shader_bit_encoding - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_bit_encoding", 19)) - { - ret = GLEW_ARB_shader_bit_encoding; - continue; - } -#endif -#ifdef GL_ARB_shader_draw_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_draw_parameters", 22)) - { - ret = GLEW_ARB_shader_draw_parameters; - continue; - } -#endif -#ifdef GL_ARB_shader_group_vote - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_group_vote", 17)) - { - ret = GLEW_ARB_shader_group_vote; - continue; - } -#endif -#ifdef GL_ARB_shader_image_load_store - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_load_store", 23)) - { - ret = GLEW_ARB_shader_image_load_store; - continue; - } -#endif -#ifdef GL_ARB_shader_image_size - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_size", 17)) - { - ret = GLEW_ARB_shader_image_size; - continue; - } -#endif -#ifdef GL_ARB_shader_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_objects", 14)) - { - ret = GLEW_ARB_shader_objects; - continue; - } -#endif -#ifdef GL_ARB_shader_precision - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_precision", 16)) - { - ret = GLEW_ARB_shader_precision; - continue; - } -#endif -#ifdef GL_ARB_shader_stencil_export - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_stencil_export", 21)) - { - ret = GLEW_ARB_shader_stencil_export; - continue; - } -#endif -#ifdef GL_ARB_shader_storage_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_storage_buffer_object", 28)) - { - ret = GLEW_ARB_shader_storage_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_shader_subroutine - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_subroutine", 17)) - { - ret = GLEW_ARB_shader_subroutine; - continue; - } -#endif -#ifdef GL_ARB_shader_texture_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) - { - ret = GLEW_ARB_shader_texture_lod; - continue; - } -#endif -#ifdef GL_ARB_shading_language_100 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_100", 20)) - { - ret = GLEW_ARB_shading_language_100; - continue; - } -#endif -#ifdef GL_ARB_shading_language_420pack - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_420pack", 24)) - { - ret = GLEW_ARB_shading_language_420pack; - continue; - } -#endif -#ifdef GL_ARB_shading_language_include - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_include", 24)) - { - ret = GLEW_ARB_shading_language_include; - continue; - } -#endif -#ifdef GL_ARB_shading_language_packing - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shading_language_packing", 24)) - { - ret = GLEW_ARB_shading_language_packing; - continue; - } -#endif -#ifdef GL_ARB_shadow - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) - { - ret = GLEW_ARB_shadow; - continue; - } -#endif -#ifdef GL_ARB_shadow_ambient - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) - { - ret = GLEW_ARB_shadow_ambient; - continue; - } -#endif -#ifdef GL_ARB_sparse_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sparse_texture", 14)) - { - ret = GLEW_ARB_sparse_texture; - continue; - } -#endif -#ifdef GL_ARB_stencil_texturing - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_texturing", 17)) - { - ret = GLEW_ARB_stencil_texturing; - continue; - } -#endif -#ifdef GL_ARB_sync - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync", 4)) - { - ret = GLEW_ARB_sync; - continue; - } -#endif -#ifdef GL_ARB_tessellation_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_shader", 19)) - { - ret = GLEW_ARB_tessellation_shader; - continue; - } -#endif -#ifdef GL_ARB_texture_border_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) - { - ret = GLEW_ARB_texture_border_clamp; - continue; - } -#endif -#ifdef GL_ARB_texture_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) - { - ret = GLEW_ARB_texture_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_texture_buffer_object_rgb32 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object_rgb32", 27)) - { - ret = GLEW_ARB_texture_buffer_object_rgb32; - continue; - } -#endif -#ifdef GL_ARB_texture_buffer_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_range", 20)) - { - ret = GLEW_ARB_texture_buffer_range; - continue; - } -#endif -#ifdef GL_ARB_texture_compression - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression", 19)) - { - ret = GLEW_ARB_texture_compression; - continue; - } -#endif -#ifdef GL_ARB_texture_compression_bptc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_bptc", 24)) - { - ret = GLEW_ARB_texture_compression_bptc; - continue; - } -#endif -#ifdef GL_ARB_texture_compression_rgtc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) - { - ret = GLEW_ARB_texture_compression_rgtc; - continue; - } -#endif -#ifdef GL_ARB_texture_cube_map - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) - { - ret = GLEW_ARB_texture_cube_map; - continue; - } -#endif -#ifdef GL_ARB_texture_cube_map_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map_array", 22)) - { - ret = GLEW_ARB_texture_cube_map_array; - continue; - } -#endif -#ifdef GL_ARB_texture_env_add - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) - { - ret = GLEW_ARB_texture_env_add; - continue; - } -#endif -#ifdef GL_ARB_texture_env_combine - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) - { - ret = GLEW_ARB_texture_env_combine; - continue; - } -#endif -#ifdef GL_ARB_texture_env_crossbar - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_crossbar", 20)) - { - ret = GLEW_ARB_texture_env_crossbar; - continue; - } -#endif -#ifdef GL_ARB_texture_env_dot3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) - { - ret = GLEW_ARB_texture_env_dot3; - continue; - } -#endif -#ifdef GL_ARB_texture_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) - { - ret = GLEW_ARB_texture_float; - continue; - } -#endif -#ifdef GL_ARB_texture_gather - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_gather", 14)) - { - ret = GLEW_ARB_texture_gather; - continue; - } -#endif -#ifdef GL_ARB_texture_mirror_clamp_to_edge - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp_to_edge", 28)) - { - ret = GLEW_ARB_texture_mirror_clamp_to_edge; - continue; - } -#endif -#ifdef GL_ARB_texture_mirrored_repeat - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) - { - ret = GLEW_ARB_texture_mirrored_repeat; - continue; - } -#endif -#ifdef GL_ARB_texture_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multisample", 19)) - { - ret = GLEW_ARB_texture_multisample; - continue; - } -#endif -#ifdef GL_ARB_texture_non_power_of_two - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_non_power_of_two", 24)) - { - ret = GLEW_ARB_texture_non_power_of_two; - continue; - } -#endif -#ifdef GL_ARB_texture_query_levels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_query_levels", 20)) - { - ret = GLEW_ARB_texture_query_levels; - continue; - } -#endif -#ifdef GL_ARB_texture_query_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_query_lod", 17)) - { - ret = GLEW_ARB_texture_query_lod; - continue; - } -#endif -#ifdef GL_ARB_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) - { - ret = GLEW_ARB_texture_rectangle; - continue; - } -#endif -#ifdef GL_ARB_texture_rg - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rg", 10)) - { - ret = GLEW_ARB_texture_rg; - continue; - } -#endif -#ifdef GL_ARB_texture_rgb10_a2ui - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rgb10_a2ui", 18)) - { - ret = GLEW_ARB_texture_rgb10_a2ui; - continue; - } -#endif -#ifdef GL_ARB_texture_stencil8 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stencil8", 16)) - { - ret = GLEW_ARB_texture_stencil8; - continue; - } -#endif -#ifdef GL_ARB_texture_storage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_storage", 15)) - { - ret = GLEW_ARB_texture_storage; - continue; - } -#endif -#ifdef GL_ARB_texture_storage_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_storage_multisample", 27)) - { - ret = GLEW_ARB_texture_storage_multisample; - continue; - } -#endif -#ifdef GL_ARB_texture_swizzle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_swizzle", 15)) - { - ret = GLEW_ARB_texture_swizzle; - continue; - } -#endif -#ifdef GL_ARB_texture_view - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_view", 12)) - { - ret = GLEW_ARB_texture_view; - continue; - } -#endif -#ifdef GL_ARB_timer_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) - { - ret = GLEW_ARB_timer_query; - continue; - } -#endif -#ifdef GL_ARB_transform_feedback2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback2", 19)) - { - ret = GLEW_ARB_transform_feedback2; - continue; - } -#endif -#ifdef GL_ARB_transform_feedback3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback3", 19)) - { - ret = GLEW_ARB_transform_feedback3; - continue; - } -#endif -#ifdef GL_ARB_transform_feedback_instanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback_instanced", 28)) - { - ret = GLEW_ARB_transform_feedback_instanced; - continue; - } -#endif -#ifdef GL_ARB_transpose_matrix - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transpose_matrix", 16)) - { - ret = GLEW_ARB_transpose_matrix; - continue; - } -#endif -#ifdef GL_ARB_uniform_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"uniform_buffer_object", 21)) - { - ret = GLEW_ARB_uniform_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_vertex_array_bgra - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_bgra", 17)) - { - ret = GLEW_ARB_vertex_array_bgra; - continue; - } -#endif -#ifdef GL_ARB_vertex_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) - { - ret = GLEW_ARB_vertex_array_object; - continue; - } -#endif -#ifdef GL_ARB_vertex_attrib_64bit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_64bit", 19)) - { - ret = GLEW_ARB_vertex_attrib_64bit; - continue; - } -#endif -#ifdef GL_ARB_vertex_attrib_binding - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_binding", 21)) - { - ret = GLEW_ARB_vertex_attrib_binding; - continue; - } -#endif -#ifdef GL_ARB_vertex_blend - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_blend", 12)) - { - ret = GLEW_ARB_vertex_blend; - continue; - } -#endif -#ifdef GL_ARB_vertex_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) - { - ret = GLEW_ARB_vertex_buffer_object; - continue; - } -#endif -#ifdef GL_ARB_vertex_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) - { - ret = GLEW_ARB_vertex_program; - continue; - } -#endif -#ifdef GL_ARB_vertex_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) - { - ret = GLEW_ARB_vertex_shader; - continue; - } -#endif -#ifdef GL_ARB_vertex_type_10f_11f_11f_rev - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_type_10f_11f_11f_rev", 27)) - { - ret = GLEW_ARB_vertex_type_10f_11f_11f_rev; - continue; - } -#endif -#ifdef GL_ARB_vertex_type_2_10_10_10_rev - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_type_2_10_10_10_rev", 26)) - { - ret = GLEW_ARB_vertex_type_2_10_10_10_rev; - continue; - } -#endif -#ifdef GL_ARB_viewport_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"viewport_array", 14)) - { - ret = GLEW_ARB_viewport_array; - continue; - } -#endif -#ifdef GL_ARB_window_pos - if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) - { - ret = GLEW_ARB_window_pos; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATIX_", 5)) - { -#ifdef GL_ATIX_point_sprites - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprites", 13)) - { - ret = GLEW_ATIX_point_sprites; - continue; - } -#endif -#ifdef GL_ATIX_texture_env_combine3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) - { - ret = GLEW_ATIX_texture_env_combine3; - continue; - } -#endif -#ifdef GL_ATIX_texture_env_route - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_route", 17)) - { - ret = GLEW_ATIX_texture_env_route; - continue; - } -#endif -#ifdef GL_ATIX_vertex_shader_output_point_size - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader_output_point_size", 31)) - { - ret = GLEW_ATIX_vertex_shader_output_point_size; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) - { -#ifdef GL_ATI_draw_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers", 12)) - { - ret = GLEW_ATI_draw_buffers; - continue; - } -#endif -#ifdef GL_ATI_element_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"element_array", 13)) - { - ret = GLEW_ATI_element_array; - continue; - } -#endif -#ifdef GL_ATI_envmap_bumpmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"envmap_bumpmap", 14)) - { - ret = GLEW_ATI_envmap_bumpmap; - continue; - } -#endif -#ifdef GL_ATI_fragment_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_shader", 15)) - { - ret = GLEW_ATI_fragment_shader; - continue; - } -#endif -#ifdef GL_ATI_map_object_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_object_buffer", 17)) - { - ret = GLEW_ATI_map_object_buffer; - continue; - } -#endif -#ifdef GL_ATI_meminfo - if (_glewStrSame3(&pos, &len, (const GLubyte*)"meminfo", 7)) - { - ret = GLEW_ATI_meminfo; - continue; - } -#endif -#ifdef GL_ATI_pn_triangles - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pn_triangles", 12)) - { - ret = GLEW_ATI_pn_triangles; - continue; - } -#endif -#ifdef GL_ATI_separate_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_stencil", 16)) - { - ret = GLEW_ATI_separate_stencil; - continue; - } -#endif -#ifdef GL_ATI_shader_texture_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_texture_lod", 18)) - { - ret = GLEW_ATI_shader_texture_lod; - continue; - } -#endif -#ifdef GL_ATI_text_fragment_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"text_fragment_shader", 20)) - { - ret = GLEW_ATI_text_fragment_shader; - continue; - } -#endif -#ifdef GL_ATI_texture_compression_3dc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_3dc", 23)) - { - ret = GLEW_ATI_texture_compression_3dc; - continue; - } -#endif -#ifdef GL_ATI_texture_env_combine3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine3", 20)) - { - ret = GLEW_ATI_texture_env_combine3; - continue; - } -#endif -#ifdef GL_ATI_texture_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_float", 13)) - { - ret = GLEW_ATI_texture_float; - continue; - } -#endif -#ifdef GL_ATI_texture_mirror_once - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_once", 19)) - { - ret = GLEW_ATI_texture_mirror_once; - continue; - } -#endif -#ifdef GL_ATI_vertex_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_object", 19)) - { - ret = GLEW_ATI_vertex_array_object; - continue; - } -#endif -#ifdef GL_ATI_vertex_attrib_array_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_array_object", 26)) - { - ret = GLEW_ATI_vertex_attrib_array_object; - continue; - } -#endif -#ifdef GL_ATI_vertex_streams - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_streams", 14)) - { - ret = GLEW_ATI_vertex_streams; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) - { -#ifdef GL_EXT_422_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"422_pixels", 10)) - { - ret = GLEW_EXT_422_pixels; - continue; - } -#endif -#ifdef GL_EXT_Cg_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"Cg_shader", 9)) - { - ret = GLEW_EXT_Cg_shader; - continue; - } -#endif -#ifdef GL_EXT_abgr - if (_glewStrSame3(&pos, &len, (const GLubyte*)"abgr", 4)) - { - ret = GLEW_EXT_abgr; - continue; - } -#endif -#ifdef GL_EXT_bgra - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bgra", 4)) - { - ret = GLEW_EXT_bgra; - continue; - } -#endif -#ifdef GL_EXT_bindable_uniform - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindable_uniform", 16)) - { - ret = GLEW_EXT_bindable_uniform; - continue; - } -#endif -#ifdef GL_EXT_blend_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_color", 11)) - { - ret = GLEW_EXT_blend_color; - continue; - } -#endif -#ifdef GL_EXT_blend_equation_separate - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_separate", 23)) - { - ret = GLEW_EXT_blend_equation_separate; - continue; - } -#endif -#ifdef GL_EXT_blend_func_separate - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_func_separate", 19)) - { - ret = GLEW_EXT_blend_func_separate; - continue; - } -#endif -#ifdef GL_EXT_blend_logic_op - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_logic_op", 14)) - { - ret = GLEW_EXT_blend_logic_op; - continue; - } -#endif -#ifdef GL_EXT_blend_minmax - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_minmax", 12)) - { - ret = GLEW_EXT_blend_minmax; - continue; - } -#endif -#ifdef GL_EXT_blend_subtract - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_subtract", 14)) - { - ret = GLEW_EXT_blend_subtract; - continue; - } -#endif -#ifdef GL_EXT_clip_volume_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clip_volume_hint", 16)) - { - ret = GLEW_EXT_clip_volume_hint; - continue; - } -#endif -#ifdef GL_EXT_cmyka - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cmyka", 5)) - { - ret = GLEW_EXT_cmyka; - continue; - } -#endif -#ifdef GL_EXT_color_subtable - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_subtable", 14)) - { - ret = GLEW_EXT_color_subtable; - continue; - } -#endif -#ifdef GL_EXT_compiled_vertex_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compiled_vertex_array", 21)) - { - ret = GLEW_EXT_compiled_vertex_array; - continue; - } -#endif -#ifdef GL_EXT_convolution - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution", 11)) - { - ret = GLEW_EXT_convolution; - continue; - } -#endif -#ifdef GL_EXT_coordinate_frame - if (_glewStrSame3(&pos, &len, (const GLubyte*)"coordinate_frame", 16)) - { - ret = GLEW_EXT_coordinate_frame; - continue; - } -#endif -#ifdef GL_EXT_copy_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_texture", 12)) - { - ret = GLEW_EXT_copy_texture; - continue; - } -#endif -#ifdef GL_EXT_cull_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) - { - ret = GLEW_EXT_cull_vertex; - continue; - } -#endif -#ifdef GL_EXT_debug_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug_marker", 12)) - { - ret = GLEW_EXT_debug_marker; - continue; - } -#endif -#ifdef GL_EXT_depth_bounds_test - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_bounds_test", 17)) - { - ret = GLEW_EXT_depth_bounds_test; - continue; - } -#endif -#ifdef GL_EXT_direct_state_access - if (_glewStrSame3(&pos, &len, (const GLubyte*)"direct_state_access", 19)) - { - ret = GLEW_EXT_direct_state_access; - continue; - } -#endif -#ifdef GL_EXT_draw_buffers2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_buffers2", 13)) - { - ret = GLEW_EXT_draw_buffers2; - continue; - } -#endif -#ifdef GL_EXT_draw_instanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_instanced", 14)) - { - ret = GLEW_EXT_draw_instanced; - continue; - } -#endif -#ifdef GL_EXT_draw_range_elements - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_range_elements", 19)) - { - ret = GLEW_EXT_draw_range_elements; - continue; - } -#endif -#ifdef GL_EXT_fog_coord - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_coord", 9)) - { - ret = GLEW_EXT_fog_coord; - continue; - } -#endif -#ifdef GL_EXT_fragment_lighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_lighting", 17)) - { - ret = GLEW_EXT_fragment_lighting; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_blit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_blit", 16)) - { - ret = GLEW_EXT_framebuffer_blit; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample", 23)) - { - ret = GLEW_EXT_framebuffer_multisample; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_multisample_blit_scaled - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_blit_scaled", 35)) - { - ret = GLEW_EXT_framebuffer_multisample_blit_scaled; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_object", 18)) - { - ret = GLEW_EXT_framebuffer_object; - continue; - } -#endif -#ifdef GL_EXT_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLEW_EXT_framebuffer_sRGB; - continue; - } -#endif -#ifdef GL_EXT_geometry_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) - { - ret = GLEW_EXT_geometry_shader4; - continue; - } -#endif -#ifdef GL_EXT_gpu_program_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_parameters", 22)) - { - ret = GLEW_EXT_gpu_program_parameters; - continue; - } -#endif -#ifdef GL_EXT_gpu_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader4", 11)) - { - ret = GLEW_EXT_gpu_shader4; - continue; - } -#endif -#ifdef GL_EXT_histogram - if (_glewStrSame3(&pos, &len, (const GLubyte*)"histogram", 9)) - { - ret = GLEW_EXT_histogram; - continue; - } -#endif -#ifdef GL_EXT_index_array_formats - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_array_formats", 19)) - { - ret = GLEW_EXT_index_array_formats; - continue; - } -#endif -#ifdef GL_EXT_index_func - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_func", 10)) - { - ret = GLEW_EXT_index_func; - continue; - } -#endif -#ifdef GL_EXT_index_material - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_material", 14)) - { - ret = GLEW_EXT_index_material; - continue; - } -#endif -#ifdef GL_EXT_index_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"index_texture", 13)) - { - ret = GLEW_EXT_index_texture; - continue; - } -#endif -#ifdef GL_EXT_light_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_texture", 13)) - { - ret = GLEW_EXT_light_texture; - continue; - } -#endif -#ifdef GL_EXT_misc_attribute - if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_attribute", 14)) - { - ret = GLEW_EXT_misc_attribute; - continue; - } -#endif -#ifdef GL_EXT_multi_draw_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multi_draw_arrays", 17)) - { - ret = GLEW_EXT_multi_draw_arrays; - continue; - } -#endif -#ifdef GL_EXT_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_EXT_multisample; - continue; - } -#endif -#ifdef GL_EXT_packed_depth_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) - { - ret = GLEW_EXT_packed_depth_stencil; - continue; - } -#endif -#ifdef GL_EXT_packed_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_float", 12)) - { - ret = GLEW_EXT_packed_float; - continue; - } -#endif -#ifdef GL_EXT_packed_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_pixels", 13)) - { - ret = GLEW_EXT_packed_pixels; - continue; - } -#endif -#ifdef GL_EXT_paletted_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"paletted_texture", 16)) - { - ret = GLEW_EXT_paletted_texture; - continue; - } -#endif -#ifdef GL_EXT_pixel_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_buffer_object", 19)) - { - ret = GLEW_EXT_pixel_buffer_object; - continue; - } -#endif -#ifdef GL_EXT_pixel_transform - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform", 15)) - { - ret = GLEW_EXT_pixel_transform; - continue; - } -#endif -#ifdef GL_EXT_pixel_transform_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_transform_color_table", 27)) - { - ret = GLEW_EXT_pixel_transform_color_table; - continue; - } -#endif -#ifdef GL_EXT_point_parameters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_parameters", 16)) - { - ret = GLEW_EXT_point_parameters; - continue; - } -#endif -#ifdef GL_EXT_polygon_offset - if (_glewStrSame3(&pos, &len, (const GLubyte*)"polygon_offset", 14)) - { - ret = GLEW_EXT_polygon_offset; - continue; - } -#endif -#ifdef GL_EXT_provoking_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"provoking_vertex", 16)) - { - ret = GLEW_EXT_provoking_vertex; - continue; - } -#endif -#ifdef GL_EXT_rescale_normal - if (_glewStrSame3(&pos, &len, (const GLubyte*)"rescale_normal", 14)) - { - ret = GLEW_EXT_rescale_normal; - continue; - } -#endif -#ifdef GL_EXT_scene_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) - { - ret = GLEW_EXT_scene_marker; - continue; - } -#endif -#ifdef GL_EXT_secondary_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"secondary_color", 15)) - { - ret = GLEW_EXT_secondary_color; - continue; - } -#endif -#ifdef GL_EXT_separate_shader_objects - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_shader_objects", 23)) - { - ret = GLEW_EXT_separate_shader_objects; - continue; - } -#endif -#ifdef GL_EXT_separate_specular_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"separate_specular_color", 23)) - { - ret = GLEW_EXT_separate_specular_color; - continue; - } -#endif -#ifdef GL_EXT_shader_image_load_store - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_image_load_store", 23)) - { - ret = GLEW_EXT_shader_image_load_store; - continue; - } -#endif -#ifdef GL_EXT_shadow_funcs - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_funcs", 12)) - { - ret = GLEW_EXT_shadow_funcs; - continue; - } -#endif -#ifdef GL_EXT_shared_texture_palette - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_texture_palette", 22)) - { - ret = GLEW_EXT_shared_texture_palette; - continue; - } -#endif -#ifdef GL_EXT_stencil_clear_tag - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_clear_tag", 17)) - { - ret = GLEW_EXT_stencil_clear_tag; - continue; - } -#endif -#ifdef GL_EXT_stencil_two_side - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_two_side", 16)) - { - ret = GLEW_EXT_stencil_two_side; - continue; - } -#endif -#ifdef GL_EXT_stencil_wrap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stencil_wrap", 12)) - { - ret = GLEW_EXT_stencil_wrap; - continue; - } -#endif -#ifdef GL_EXT_subtexture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"subtexture", 10)) - { - ret = GLEW_EXT_subtexture; - continue; - } -#endif -#ifdef GL_EXT_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture", 7)) - { - ret = GLEW_EXT_texture; - continue; - } -#endif -#ifdef GL_EXT_texture3D - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture3D", 9)) - { - ret = GLEW_EXT_texture3D; - continue; - } -#endif -#ifdef GL_EXT_texture_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_array", 13)) - { - ret = GLEW_EXT_texture_array; - continue; - } -#endif -#ifdef GL_EXT_texture_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_buffer_object", 21)) - { - ret = GLEW_EXT_texture_buffer_object; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_dxt1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_dxt1", 24)) - { - ret = GLEW_EXT_texture_compression_dxt1; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_latc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_latc", 24)) - { - ret = GLEW_EXT_texture_compression_latc; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_rgtc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_rgtc", 24)) - { - ret = GLEW_EXT_texture_compression_rgtc; - continue; - } -#endif -#ifdef GL_EXT_texture_compression_s3tc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_s3tc", 24)) - { - ret = GLEW_EXT_texture_compression_s3tc; - continue; - } -#endif -#ifdef GL_EXT_texture_cube_map - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_cube_map", 16)) - { - ret = GLEW_EXT_texture_cube_map; - continue; - } -#endif -#ifdef GL_EXT_texture_edge_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) - { - ret = GLEW_EXT_texture_edge_clamp; - continue; - } -#endif -#ifdef GL_EXT_texture_env - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env", 11)) - { - ret = GLEW_EXT_texture_env; - continue; - } -#endif -#ifdef GL_EXT_texture_env_add - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_add", 15)) - { - ret = GLEW_EXT_texture_env_add; - continue; - } -#endif -#ifdef GL_EXT_texture_env_combine - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine", 19)) - { - ret = GLEW_EXT_texture_env_combine; - continue; - } -#endif -#ifdef GL_EXT_texture_env_dot3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_dot3", 16)) - { - ret = GLEW_EXT_texture_env_dot3; - continue; - } -#endif -#ifdef GL_EXT_texture_filter_anisotropic - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter_anisotropic", 26)) - { - ret = GLEW_EXT_texture_filter_anisotropic; - continue; - } -#endif -#ifdef GL_EXT_texture_integer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_integer", 15)) - { - ret = GLEW_EXT_texture_integer; - continue; - } -#endif -#ifdef GL_EXT_texture_lod_bias - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) - { - ret = GLEW_EXT_texture_lod_bias; - continue; - } -#endif -#ifdef GL_EXT_texture_mirror_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirror_clamp", 20)) - { - ret = GLEW_EXT_texture_mirror_clamp; - continue; - } -#endif -#ifdef GL_EXT_texture_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_object", 14)) - { - ret = GLEW_EXT_texture_object; - continue; - } -#endif -#ifdef GL_EXT_texture_perturb_normal - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_perturb_normal", 22)) - { - ret = GLEW_EXT_texture_perturb_normal; - continue; - } -#endif -#ifdef GL_EXT_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) - { - ret = GLEW_EXT_texture_rectangle; - continue; - } -#endif -#ifdef GL_EXT_texture_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB", 12)) - { - ret = GLEW_EXT_texture_sRGB; - continue; - } -#endif -#ifdef GL_EXT_texture_sRGB_decode - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_sRGB_decode", 19)) - { - ret = GLEW_EXT_texture_sRGB_decode; - continue; - } -#endif -#ifdef GL_EXT_texture_shared_exponent - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shared_exponent", 23)) - { - ret = GLEW_EXT_texture_shared_exponent; - continue; - } -#endif -#ifdef GL_EXT_texture_snorm - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_snorm", 13)) - { - ret = GLEW_EXT_texture_snorm; - continue; - } -#endif -#ifdef GL_EXT_texture_swizzle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_swizzle", 15)) - { - ret = GLEW_EXT_texture_swizzle; - continue; - } -#endif -#ifdef GL_EXT_timer_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"timer_query", 11)) - { - ret = GLEW_EXT_timer_query; - continue; - } -#endif -#ifdef GL_EXT_transform_feedback - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) - { - ret = GLEW_EXT_transform_feedback; - continue; - } -#endif -#ifdef GL_EXT_vertex_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array", 12)) - { - ret = GLEW_EXT_vertex_array; - continue; - } -#endif -#ifdef GL_EXT_vertex_array_bgra - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_bgra", 17)) - { - ret = GLEW_EXT_vertex_array_bgra; - continue; - } -#endif -#ifdef GL_EXT_vertex_attrib_64bit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_64bit", 19)) - { - ret = GLEW_EXT_vertex_attrib_64bit; - continue; - } -#endif -#ifdef GL_EXT_vertex_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_shader", 13)) - { - ret = GLEW_EXT_vertex_shader; - continue; - } -#endif -#ifdef GL_EXT_vertex_weighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_weighting", 16)) - { - ret = GLEW_EXT_vertex_weighting; - continue; - } -#endif -#ifdef GL_EXT_x11_sync_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"x11_sync_object", 15)) - { - ret = GLEW_EXT_x11_sync_object; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"GREMEDY_", 8)) - { -#ifdef GL_GREMEDY_frame_terminator - if (_glewStrSame3(&pos, &len, (const GLubyte*)"frame_terminator", 16)) - { - ret = GLEW_GREMEDY_frame_terminator; - continue; - } -#endif -#ifdef GL_GREMEDY_string_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"string_marker", 13)) - { - ret = GLEW_GREMEDY_string_marker; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"HP_", 3)) - { -#ifdef GL_HP_convolution_border_modes - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) - { - ret = GLEW_HP_convolution_border_modes; - continue; - } -#endif -#ifdef GL_HP_image_transform - if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_transform", 15)) - { - ret = GLEW_HP_image_transform; - continue; - } -#endif -#ifdef GL_HP_occlusion_test - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_test", 14)) - { - ret = GLEW_HP_occlusion_test; - continue; - } -#endif -#ifdef GL_HP_texture_lighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lighting", 16)) - { - ret = GLEW_HP_texture_lighting; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"IBM_", 4)) - { -#ifdef GL_IBM_cull_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cull_vertex", 11)) - { - ret = GLEW_IBM_cull_vertex; - continue; - } -#endif -#ifdef GL_IBM_multimode_draw_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multimode_draw_arrays", 21)) - { - ret = GLEW_IBM_multimode_draw_arrays; - continue; - } -#endif -#ifdef GL_IBM_rasterpos_clip - if (_glewStrSame3(&pos, &len, (const GLubyte*)"rasterpos_clip", 14)) - { - ret = GLEW_IBM_rasterpos_clip; - continue; - } -#endif -#ifdef GL_IBM_static_data - if (_glewStrSame3(&pos, &len, (const GLubyte*)"static_data", 11)) - { - ret = GLEW_IBM_static_data; - continue; - } -#endif -#ifdef GL_IBM_texture_mirrored_repeat - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_mirrored_repeat", 23)) - { - ret = GLEW_IBM_texture_mirrored_repeat; - continue; - } -#endif -#ifdef GL_IBM_vertex_array_lists - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_lists", 18)) - { - ret = GLEW_IBM_vertex_array_lists; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"INGR_", 5)) - { -#ifdef GL_INGR_color_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_clamp", 11)) - { - ret = GLEW_INGR_color_clamp; - continue; - } -#endif -#ifdef GL_INGR_interlace_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace_read", 14)) - { - ret = GLEW_INGR_interlace_read; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) - { -#ifdef GL_INTEL_map_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"map_texture", 11)) - { - ret = GLEW_INTEL_map_texture; - continue; - } -#endif -#ifdef GL_INTEL_parallel_arrays - if (_glewStrSame3(&pos, &len, (const GLubyte*)"parallel_arrays", 15)) - { - ret = GLEW_INTEL_parallel_arrays; - continue; - } -#endif -#ifdef GL_INTEL_texture_scissor - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scissor", 15)) - { - ret = GLEW_INTEL_texture_scissor; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"KHR_", 4)) - { -#ifdef GL_KHR_debug - if (_glewStrSame3(&pos, &len, (const GLubyte*)"debug", 5)) - { - ret = GLEW_KHR_debug; - continue; - } -#endif -#ifdef GL_KHR_texture_compression_astc_ldr - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_astc_ldr", 28)) - { - ret = GLEW_KHR_texture_compression_astc_ldr; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"KTX_", 4)) - { -#ifdef GL_KTX_buffer_region - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) - { - ret = GLEW_KTX_buffer_region; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESAX_", 6)) - { -#ifdef GL_MESAX_texture_stack - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_stack", 13)) - { - ret = GLEW_MESAX_texture_stack; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) - { -#ifdef GL_MESA_pack_invert - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pack_invert", 11)) - { - ret = GLEW_MESA_pack_invert; - continue; - } -#endif -#ifdef GL_MESA_resize_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"resize_buffers", 14)) - { - ret = GLEW_MESA_resize_buffers; - continue; - } -#endif -#ifdef GL_MESA_window_pos - if (_glewStrSame3(&pos, &len, (const GLubyte*)"window_pos", 10)) - { - ret = GLEW_MESA_window_pos; - continue; - } -#endif -#ifdef GL_MESA_ycbcr_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycbcr_texture", 13)) - { - ret = GLEW_MESA_ycbcr_texture; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NVX_", 4)) - { -#ifdef GL_NVX_conditional_render - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) - { - ret = GLEW_NVX_conditional_render; - continue; - } -#endif -#ifdef GL_NVX_gpu_memory_info - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_memory_info", 15)) - { - ret = GLEW_NVX_gpu_memory_info; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) - { -#ifdef GL_NV_bindless_multi_draw_indirect - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_multi_draw_indirect", 28)) - { - ret = GLEW_NV_bindless_multi_draw_indirect; - continue; - } -#endif -#ifdef GL_NV_bindless_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"bindless_texture", 16)) - { - ret = GLEW_NV_bindless_texture; - continue; - } -#endif -#ifdef GL_NV_blend_equation_advanced - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_advanced", 23)) - { - ret = GLEW_NV_blend_equation_advanced; - continue; - } -#endif -#ifdef GL_NV_blend_equation_advanced_coherent - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_equation_advanced_coherent", 32)) - { - ret = GLEW_NV_blend_equation_advanced_coherent; - continue; - } -#endif -#ifdef GL_NV_blend_square - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_square", 12)) - { - ret = GLEW_NV_blend_square; - continue; - } -#endif -#ifdef GL_NV_compute_program5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compute_program5", 16)) - { - ret = GLEW_NV_compute_program5; - continue; - } -#endif -#ifdef GL_NV_conditional_render - if (_glewStrSame3(&pos, &len, (const GLubyte*)"conditional_render", 18)) - { - ret = GLEW_NV_conditional_render; - continue; - } -#endif -#ifdef GL_NV_copy_depth_to_color - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_depth_to_color", 19)) - { - ret = GLEW_NV_copy_depth_to_color; - continue; - } -#endif -#ifdef GL_NV_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = GLEW_NV_copy_image; - continue; - } -#endif -#ifdef GL_NV_deep_texture3D - if (_glewStrSame3(&pos, &len, (const GLubyte*)"deep_texture3D", 14)) - { - ret = GLEW_NV_deep_texture3D; - continue; - } -#endif -#ifdef GL_NV_depth_buffer_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_buffer_float", 18)) - { - ret = GLEW_NV_depth_buffer_float; - continue; - } -#endif -#ifdef GL_NV_depth_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_clamp", 11)) - { - ret = GLEW_NV_depth_clamp; - continue; - } -#endif -#ifdef GL_NV_depth_range_unclamped - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_range_unclamped", 21)) - { - ret = GLEW_NV_depth_range_unclamped; - continue; - } -#endif -#ifdef GL_NV_draw_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"draw_texture", 12)) - { - ret = GLEW_NV_draw_texture; - continue; - } -#endif -#ifdef GL_NV_evaluators - if (_glewStrSame3(&pos, &len, (const GLubyte*)"evaluators", 10)) - { - ret = GLEW_NV_evaluators; - continue; - } -#endif -#ifdef GL_NV_explicit_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"explicit_multisample", 20)) - { - ret = GLEW_NV_explicit_multisample; - continue; - } -#endif -#ifdef GL_NV_fence - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fence", 5)) - { - ret = GLEW_NV_fence; - continue; - } -#endif -#ifdef GL_NV_float_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) - { - ret = GLEW_NV_float_buffer; - continue; - } -#endif -#ifdef GL_NV_fog_distance - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_distance", 12)) - { - ret = GLEW_NV_fog_distance; - continue; - } -#endif -#ifdef GL_NV_fragment_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program", 16)) - { - ret = GLEW_NV_fragment_program; - continue; - } -#endif -#ifdef GL_NV_fragment_program2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program2", 17)) - { - ret = GLEW_NV_fragment_program2; - continue; - } -#endif -#ifdef GL_NV_fragment_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program4", 17)) - { - ret = GLEW_NV_fragment_program4; - continue; - } -#endif -#ifdef GL_NV_fragment_program_option - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_program_option", 23)) - { - ret = GLEW_NV_fragment_program_option; - continue; - } -#endif -#ifdef GL_NV_framebuffer_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_multisample_coverage", 32)) - { - ret = GLEW_NV_framebuffer_multisample_coverage; - continue; - } -#endif -#ifdef GL_NV_geometry_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_program4", 17)) - { - ret = GLEW_NV_geometry_program4; - continue; - } -#endif -#ifdef GL_NV_geometry_shader4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"geometry_shader4", 16)) - { - ret = GLEW_NV_geometry_shader4; - continue; - } -#endif -#ifdef GL_NV_gpu_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program4", 12)) - { - ret = GLEW_NV_gpu_program4; - continue; - } -#endif -#ifdef GL_NV_gpu_program5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program5", 12)) - { - ret = GLEW_NV_gpu_program5; - continue; - } -#endif -#ifdef GL_NV_gpu_program5_mem_extended - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program5_mem_extended", 25)) - { - ret = GLEW_NV_gpu_program5_mem_extended; - continue; - } -#endif -#ifdef GL_NV_gpu_program_fp64 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_program_fp64", 16)) - { - ret = GLEW_NV_gpu_program_fp64; - continue; - } -#endif -#ifdef GL_NV_gpu_shader5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_shader5", 11)) - { - ret = GLEW_NV_gpu_shader5; - continue; - } -#endif -#ifdef GL_NV_half_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"half_float", 10)) - { - ret = GLEW_NV_half_float; - continue; - } -#endif -#ifdef GL_NV_light_max_exponent - if (_glewStrSame3(&pos, &len, (const GLubyte*)"light_max_exponent", 18)) - { - ret = GLEW_NV_light_max_exponent; - continue; - } -#endif -#ifdef GL_NV_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) - { - ret = GLEW_NV_multisample_coverage; - continue; - } -#endif -#ifdef GL_NV_multisample_filter_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_filter_hint", 23)) - { - ret = GLEW_NV_multisample_filter_hint; - continue; - } -#endif -#ifdef GL_NV_occlusion_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"occlusion_query", 15)) - { - ret = GLEW_NV_occlusion_query; - continue; - } -#endif -#ifdef GL_NV_packed_depth_stencil - if (_glewStrSame3(&pos, &len, (const GLubyte*)"packed_depth_stencil", 20)) - { - ret = GLEW_NV_packed_depth_stencil; - continue; - } -#endif -#ifdef GL_NV_parameter_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object", 23)) - { - ret = GLEW_NV_parameter_buffer_object; - continue; - } -#endif -#ifdef GL_NV_parameter_buffer_object2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"parameter_buffer_object2", 24)) - { - ret = GLEW_NV_parameter_buffer_object2; - continue; - } -#endif -#ifdef GL_NV_path_rendering - if (_glewStrSame3(&pos, &len, (const GLubyte*)"path_rendering", 14)) - { - ret = GLEW_NV_path_rendering; - continue; - } -#endif -#ifdef GL_NV_pixel_data_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_data_range", 16)) - { - ret = GLEW_NV_pixel_data_range; - continue; - } -#endif -#ifdef GL_NV_point_sprite - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_sprite", 12)) - { - ret = GLEW_NV_point_sprite; - continue; - } -#endif -#ifdef GL_NV_present_video - if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) - { - ret = GLEW_NV_present_video; - continue; - } -#endif -#ifdef GL_NV_primitive_restart - if (_glewStrSame3(&pos, &len, (const GLubyte*)"primitive_restart", 17)) - { - ret = GLEW_NV_primitive_restart; - continue; - } -#endif -#ifdef GL_NV_register_combiners - if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners", 18)) - { - ret = GLEW_NV_register_combiners; - continue; - } -#endif -#ifdef GL_NV_register_combiners2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"register_combiners2", 19)) - { - ret = GLEW_NV_register_combiners2; - continue; - } -#endif -#ifdef GL_NV_shader_atomic_counters - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_counters", 22)) - { - ret = GLEW_NV_shader_atomic_counters; - continue; - } -#endif -#ifdef GL_NV_shader_atomic_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_atomic_float", 19)) - { - ret = GLEW_NV_shader_atomic_float; - continue; - } -#endif -#ifdef GL_NV_shader_buffer_load - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_buffer_load", 18)) - { - ret = GLEW_NV_shader_buffer_load; - continue; - } -#endif -#ifdef GL_NV_shader_storage_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shader_storage_buffer_object", 28)) - { - ret = GLEW_NV_shader_storage_buffer_object; - continue; - } -#endif -#ifdef GL_NV_tessellation_program5 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tessellation_program5", 21)) - { - ret = GLEW_NV_tessellation_program5; - continue; - } -#endif -#ifdef GL_NV_texgen_emboss - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_emboss", 13)) - { - ret = GLEW_NV_texgen_emboss; - continue; - } -#endif -#ifdef GL_NV_texgen_reflection - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texgen_reflection", 17)) - { - ret = GLEW_NV_texgen_reflection; - continue; - } -#endif -#ifdef GL_NV_texture_barrier - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_barrier", 15)) - { - ret = GLEW_NV_texture_barrier; - continue; - } -#endif -#ifdef GL_NV_texture_compression_vtc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_compression_vtc", 23)) - { - ret = GLEW_NV_texture_compression_vtc; - continue; - } -#endif -#ifdef GL_NV_texture_env_combine4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_env_combine4", 20)) - { - ret = GLEW_NV_texture_env_combine4; - continue; - } -#endif -#ifdef GL_NV_texture_expand_normal - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_expand_normal", 21)) - { - ret = GLEW_NV_texture_expand_normal; - continue; - } -#endif -#ifdef GL_NV_texture_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multisample", 19)) - { - ret = GLEW_NV_texture_multisample; - continue; - } -#endif -#ifdef GL_NV_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_rectangle", 17)) - { - ret = GLEW_NV_texture_rectangle; - continue; - } -#endif -#ifdef GL_NV_texture_shader - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader", 14)) - { - ret = GLEW_NV_texture_shader; - continue; - } -#endif -#ifdef GL_NV_texture_shader2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader2", 15)) - { - ret = GLEW_NV_texture_shader2; - continue; - } -#endif -#ifdef GL_NV_texture_shader3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_shader3", 15)) - { - ret = GLEW_NV_texture_shader3; - continue; - } -#endif -#ifdef GL_NV_transform_feedback - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback", 18)) - { - ret = GLEW_NV_transform_feedback; - continue; - } -#endif -#ifdef GL_NV_transform_feedback2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"transform_feedback2", 19)) - { - ret = GLEW_NV_transform_feedback2; - continue; - } -#endif -#ifdef GL_NV_vdpau_interop - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vdpau_interop", 13)) - { - ret = GLEW_NV_vdpau_interop; - continue; - } -#endif -#ifdef GL_NV_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = GLEW_NV_vertex_array_range; - continue; - } -#endif -#ifdef GL_NV_vertex_array_range2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range2", 19)) - { - ret = GLEW_NV_vertex_array_range2; - continue; - } -#endif -#ifdef GL_NV_vertex_attrib_integer_64bit - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_attrib_integer_64bit", 27)) - { - ret = GLEW_NV_vertex_attrib_integer_64bit; - continue; - } -#endif -#ifdef GL_NV_vertex_buffer_unified_memory - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_unified_memory", 28)) - { - ret = GLEW_NV_vertex_buffer_unified_memory; - continue; - } -#endif -#ifdef GL_NV_vertex_program - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program", 14)) - { - ret = GLEW_NV_vertex_program; - continue; - } -#endif -#ifdef GL_NV_vertex_program1_1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program1_1", 17)) - { - ret = GLEW_NV_vertex_program1_1; - continue; - } -#endif -#ifdef GL_NV_vertex_program2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2", 15)) - { - ret = GLEW_NV_vertex_program2; - continue; - } -#endif -#ifdef GL_NV_vertex_program2_option - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program2_option", 22)) - { - ret = GLEW_NV_vertex_program2_option; - continue; - } -#endif -#ifdef GL_NV_vertex_program3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program3", 15)) - { - ret = GLEW_NV_vertex_program3; - continue; - } -#endif -#ifdef GL_NV_vertex_program4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_program4", 15)) - { - ret = GLEW_NV_vertex_program4; - continue; - } -#endif -#ifdef GL_NV_video_capture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) - { - ret = GLEW_NV_video_capture; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OES_", 4)) - { -#ifdef GL_OES_byte_coordinates - if (_glewStrSame3(&pos, &len, (const GLubyte*)"byte_coordinates", 16)) - { - ret = GLEW_OES_byte_coordinates; - continue; - } -#endif -#ifdef GL_OES_compressed_paletted_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"compressed_paletted_texture", 27)) - { - ret = GLEW_OES_compressed_paletted_texture; - continue; - } -#endif -#ifdef GL_OES_read_format - if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_format", 11)) - { - ret = GLEW_OES_read_format; - continue; - } -#endif -#ifdef GL_OES_single_precision - if (_glewStrSame3(&pos, &len, (const GLubyte*)"single_precision", 16)) - { - ret = GLEW_OES_single_precision; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) - { -#ifdef GL_OML_interlace - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) - { - ret = GLEW_OML_interlace; - continue; - } -#endif -#ifdef GL_OML_resample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) - { - ret = GLEW_OML_resample; - continue; - } -#endif -#ifdef GL_OML_subsample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"subsample", 9)) - { - ret = GLEW_OML_subsample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"PGI_", 4)) - { -#ifdef GL_PGI_misc_hints - if (_glewStrSame3(&pos, &len, (const GLubyte*)"misc_hints", 10)) - { - ret = GLEW_PGI_misc_hints; - continue; - } -#endif -#ifdef GL_PGI_vertex_hints - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_hints", 12)) - { - ret = GLEW_PGI_vertex_hints; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"REGAL_", 6)) - { -#ifdef GL_REGAL_ES1_0_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES1_0_compatibility", 19)) - { - ret = GLEW_REGAL_ES1_0_compatibility; - continue; - } -#endif -#ifdef GL_REGAL_ES1_1_compatibility - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ES1_1_compatibility", 19)) - { - ret = GLEW_REGAL_ES1_1_compatibility; - continue; - } -#endif -#ifdef GL_REGAL_enable - if (_glewStrSame3(&pos, &len, (const GLubyte*)"enable", 6)) - { - ret = GLEW_REGAL_enable; - continue; - } -#endif -#ifdef GL_REGAL_error_string - if (_glewStrSame3(&pos, &len, (const GLubyte*)"error_string", 12)) - { - ret = GLEW_REGAL_error_string; - continue; - } -#endif -#ifdef GL_REGAL_extension_query - if (_glewStrSame3(&pos, &len, (const GLubyte*)"extension_query", 15)) - { - ret = GLEW_REGAL_extension_query; - continue; - } -#endif -#ifdef GL_REGAL_log - if (_glewStrSame3(&pos, &len, (const GLubyte*)"log", 3)) - { - ret = GLEW_REGAL_log; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"REND_", 5)) - { -#ifdef GL_REND_screen_coordinates - if (_glewStrSame3(&pos, &len, (const GLubyte*)"screen_coordinates", 18)) - { - ret = GLEW_REND_screen_coordinates; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"S3_", 3)) - { -#ifdef GL_S3_s3tc - if (_glewStrSame3(&pos, &len, (const GLubyte*)"s3tc", 4)) - { - ret = GLEW_S3_s3tc; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) - { -#ifdef GL_SGIS_color_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) - { - ret = GLEW_SGIS_color_range; - continue; - } -#endif -#ifdef GL_SGIS_detail_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"detail_texture", 14)) - { - ret = GLEW_SGIS_detail_texture; - continue; - } -#endif -#ifdef GL_SGIS_fog_function - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_function", 12)) - { - ret = GLEW_SGIS_fog_function; - continue; - } -#endif -#ifdef GL_SGIS_generate_mipmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"generate_mipmap", 15)) - { - ret = GLEW_SGIS_generate_mipmap; - continue; - } -#endif -#ifdef GL_SGIS_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLEW_SGIS_multisample; - continue; - } -#endif -#ifdef GL_SGIS_pixel_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) - { - ret = GLEW_SGIS_pixel_texture; - continue; - } -#endif -#ifdef GL_SGIS_point_line_texgen - if (_glewStrSame3(&pos, &len, (const GLubyte*)"point_line_texgen", 17)) - { - ret = GLEW_SGIS_point_line_texgen; - continue; - } -#endif -#ifdef GL_SGIS_sharpen_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sharpen_texture", 15)) - { - ret = GLEW_SGIS_sharpen_texture; - continue; - } -#endif -#ifdef GL_SGIS_texture4D - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture4D", 9)) - { - ret = GLEW_SGIS_texture4D; - continue; - } -#endif -#ifdef GL_SGIS_texture_border_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_border_clamp", 20)) - { - ret = GLEW_SGIS_texture_border_clamp; - continue; - } -#endif -#ifdef GL_SGIS_texture_edge_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_edge_clamp", 18)) - { - ret = GLEW_SGIS_texture_edge_clamp; - continue; - } -#endif -#ifdef GL_SGIS_texture_filter4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_filter4", 15)) - { - ret = GLEW_SGIS_texture_filter4; - continue; - } -#endif -#ifdef GL_SGIS_texture_lod - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod", 11)) - { - ret = GLEW_SGIS_texture_lod; - continue; - } -#endif -#ifdef GL_SGIS_texture_select - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_select", 14)) - { - ret = GLEW_SGIS_texture_select; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) - { -#ifdef GL_SGIX_async - if (_glewStrSame3(&pos, &len, (const GLubyte*)"async", 5)) - { - ret = GLEW_SGIX_async; - continue; - } -#endif -#ifdef GL_SGIX_async_histogram - if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_histogram", 15)) - { - ret = GLEW_SGIX_async_histogram; - continue; - } -#endif -#ifdef GL_SGIX_async_pixel - if (_glewStrSame3(&pos, &len, (const GLubyte*)"async_pixel", 11)) - { - ret = GLEW_SGIX_async_pixel; - continue; - } -#endif -#ifdef GL_SGIX_blend_alpha_minmax - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blend_alpha_minmax", 18)) - { - ret = GLEW_SGIX_blend_alpha_minmax; - continue; - } -#endif -#ifdef GL_SGIX_clipmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"clipmap", 7)) - { - ret = GLEW_SGIX_clipmap; - continue; - } -#endif -#ifdef GL_SGIX_convolution_accuracy - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_accuracy", 20)) - { - ret = GLEW_SGIX_convolution_accuracy; - continue; - } -#endif -#ifdef GL_SGIX_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_texture", 13)) - { - ret = GLEW_SGIX_depth_texture; - continue; - } -#endif -#ifdef GL_SGIX_flush_raster - if (_glewStrSame3(&pos, &len, (const GLubyte*)"flush_raster", 12)) - { - ret = GLEW_SGIX_flush_raster; - continue; - } -#endif -#ifdef GL_SGIX_fog_offset - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_offset", 10)) - { - ret = GLEW_SGIX_fog_offset; - continue; - } -#endif -#ifdef GL_SGIX_fog_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fog_texture", 11)) - { - ret = GLEW_SGIX_fog_texture; - continue; - } -#endif -#ifdef GL_SGIX_fragment_specular_lighting - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fragment_specular_lighting", 26)) - { - ret = GLEW_SGIX_fragment_specular_lighting; - continue; - } -#endif -#ifdef GL_SGIX_framezoom - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framezoom", 9)) - { - ret = GLEW_SGIX_framezoom; - continue; - } -#endif -#ifdef GL_SGIX_interlace - if (_glewStrSame3(&pos, &len, (const GLubyte*)"interlace", 9)) - { - ret = GLEW_SGIX_interlace; - continue; - } -#endif -#ifdef GL_SGIX_ir_instrument1 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ir_instrument1", 14)) - { - ret = GLEW_SGIX_ir_instrument1; - continue; - } -#endif -#ifdef GL_SGIX_list_priority - if (_glewStrSame3(&pos, &len, (const GLubyte*)"list_priority", 13)) - { - ret = GLEW_SGIX_list_priority; - continue; - } -#endif -#ifdef GL_SGIX_pixel_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture", 13)) - { - ret = GLEW_SGIX_pixel_texture; - continue; - } -#endif -#ifdef GL_SGIX_pixel_texture_bits - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_texture_bits", 18)) - { - ret = GLEW_SGIX_pixel_texture_bits; - continue; - } -#endif -#ifdef GL_SGIX_reference_plane - if (_glewStrSame3(&pos, &len, (const GLubyte*)"reference_plane", 15)) - { - ret = GLEW_SGIX_reference_plane; - continue; - } -#endif -#ifdef GL_SGIX_resample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"resample", 8)) - { - ret = GLEW_SGIX_resample; - continue; - } -#endif -#ifdef GL_SGIX_shadow - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow", 6)) - { - ret = GLEW_SGIX_shadow; - continue; - } -#endif -#ifdef GL_SGIX_shadow_ambient - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shadow_ambient", 14)) - { - ret = GLEW_SGIX_shadow_ambient; - continue; - } -#endif -#ifdef GL_SGIX_sprite - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sprite", 6)) - { - ret = GLEW_SGIX_sprite; - continue; - } -#endif -#ifdef GL_SGIX_tag_sample_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"tag_sample_buffer", 17)) - { - ret = GLEW_SGIX_tag_sample_buffer; - continue; - } -#endif -#ifdef GL_SGIX_texture_add_env - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_add_env", 15)) - { - ret = GLEW_SGIX_texture_add_env; - continue; - } -#endif -#ifdef GL_SGIX_texture_coordinate_clamp - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_coordinate_clamp", 24)) - { - ret = GLEW_SGIX_texture_coordinate_clamp; - continue; - } -#endif -#ifdef GL_SGIX_texture_lod_bias - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_lod_bias", 16)) - { - ret = GLEW_SGIX_texture_lod_bias; - continue; - } -#endif -#ifdef GL_SGIX_texture_multi_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_multi_buffer", 20)) - { - ret = GLEW_SGIX_texture_multi_buffer; - continue; - } -#endif -#ifdef GL_SGIX_texture_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_range", 13)) - { - ret = GLEW_SGIX_texture_range; - continue; - } -#endif -#ifdef GL_SGIX_texture_scale_bias - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_scale_bias", 18)) - { - ret = GLEW_SGIX_texture_scale_bias; - continue; - } -#endif -#ifdef GL_SGIX_vertex_preclip - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip", 14)) - { - ret = GLEW_SGIX_vertex_preclip; - continue; - } -#endif -#ifdef GL_SGIX_vertex_preclip_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_preclip_hint", 19)) - { - ret = GLEW_SGIX_vertex_preclip_hint; - continue; - } -#endif -#ifdef GL_SGIX_ycrcb - if (_glewStrSame3(&pos, &len, (const GLubyte*)"ycrcb", 5)) - { - ret = GLEW_SGIX_ycrcb; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) - { -#ifdef GL_SGI_color_matrix - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_matrix", 12)) - { - ret = GLEW_SGI_color_matrix; - continue; - } -#endif -#ifdef GL_SGI_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_table", 11)) - { - ret = GLEW_SGI_color_table; - continue; - } -#endif -#ifdef GL_SGI_texture_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_color_table", 19)) - { - ret = GLEW_SGI_texture_color_table; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUNX_", 5)) - { -#ifdef GL_SUNX_constant_data - if (_glewStrSame3(&pos, &len, (const GLubyte*)"constant_data", 13)) - { - ret = GLEW_SUNX_constant_data; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) - { -#ifdef GL_SUN_convolution_border_modes - if (_glewStrSame3(&pos, &len, (const GLubyte*)"convolution_border_modes", 24)) - { - ret = GLEW_SUN_convolution_border_modes; - continue; - } -#endif -#ifdef GL_SUN_global_alpha - if (_glewStrSame3(&pos, &len, (const GLubyte*)"global_alpha", 12)) - { - ret = GLEW_SUN_global_alpha; - continue; - } -#endif -#ifdef GL_SUN_mesh_array - if (_glewStrSame3(&pos, &len, (const GLubyte*)"mesh_array", 10)) - { - ret = GLEW_SUN_mesh_array; - continue; - } -#endif -#ifdef GL_SUN_read_video_pixels - if (_glewStrSame3(&pos, &len, (const GLubyte*)"read_video_pixels", 17)) - { - ret = GLEW_SUN_read_video_pixels; - continue; - } -#endif -#ifdef GL_SUN_slice_accum - if (_glewStrSame3(&pos, &len, (const GLubyte*)"slice_accum", 11)) - { - ret = GLEW_SUN_slice_accum; - continue; - } -#endif -#ifdef GL_SUN_triangle_list - if (_glewStrSame3(&pos, &len, (const GLubyte*)"triangle_list", 13)) - { - ret = GLEW_SUN_triangle_list; - continue; - } -#endif -#ifdef GL_SUN_vertex - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex", 6)) - { - ret = GLEW_SUN_vertex; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"WIN_", 4)) - { -#ifdef GL_WIN_phong_shading - if (_glewStrSame3(&pos, &len, (const GLubyte*)"phong_shading", 13)) - { - ret = GLEW_WIN_phong_shading; - continue; - } -#endif -#ifdef GL_WIN_specular_fog - if (_glewStrSame3(&pos, &len, (const GLubyte*)"specular_fog", 12)) - { - ret = GLEW_WIN_specular_fog; - continue; - } -#endif -#ifdef GL_WIN_swap_hint - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_hint", 9)) - { - ret = GLEW_WIN_swap_hint; - continue; - } -#endif - } - } - ret = (len == 0); - } - return ret; -} - -#if defined(_WIN32) - -#if defined(GLEW_MX) -GLboolean GLEWAPIENTRY wglewContextIsSupported (const WGLEWContext* ctx, const char* name) -#else -GLboolean GLEWAPIENTRY wglewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if (_glewStrSame1(&pos, &len, (const GLubyte*)"WGL_", 4)) - { - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) - { -#ifdef WGL_3DFX_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = WGLEW_3DFX_multisample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DL_", 4)) - { -#ifdef WGL_3DL_stereo_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"stereo_control", 14)) - { - ret = WGLEW_3DL_stereo_control; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) - { -#ifdef WGL_AMD_gpu_association - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_association", 15)) - { - ret = WGLEW_AMD_gpu_association; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) - { -#ifdef WGL_ARB_buffer_region - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_region", 13)) - { - ret = WGLEW_ARB_buffer_region; - continue; - } -#endif -#ifdef WGL_ARB_create_context - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) - { - ret = WGLEW_ARB_create_context; - continue; - } -#endif -#ifdef WGL_ARB_create_context_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_profile", 22)) - { - ret = WGLEW_ARB_create_context_profile; - continue; - } -#endif -#ifdef WGL_ARB_create_context_robustness - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_robustness", 25)) - { - ret = WGLEW_ARB_create_context_robustness; - continue; - } -#endif -#ifdef WGL_ARB_extensions_string - if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) - { - ret = WGLEW_ARB_extensions_string; - continue; - } -#endif -#ifdef WGL_ARB_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = WGLEW_ARB_framebuffer_sRGB; - continue; - } -#endif -#ifdef WGL_ARB_make_current_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) - { - ret = WGLEW_ARB_make_current_read; - continue; - } -#endif -#ifdef WGL_ARB_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = WGLEW_ARB_multisample; - continue; - } -#endif -#ifdef WGL_ARB_pbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) - { - ret = WGLEW_ARB_pbuffer; - continue; - } -#endif -#ifdef WGL_ARB_pixel_format - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) - { - ret = WGLEW_ARB_pixel_format; - continue; - } -#endif -#ifdef WGL_ARB_pixel_format_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) - { - ret = WGLEW_ARB_pixel_format_float; - continue; - } -#endif -#ifdef WGL_ARB_render_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) - { - ret = WGLEW_ARB_render_texture; - continue; - } -#endif -#ifdef WGL_ARB_robustness_application_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) - { - ret = WGLEW_ARB_robustness_application_isolation; - continue; - } -#endif -#ifdef WGL_ARB_robustness_share_group_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) - { - ret = WGLEW_ARB_robustness_share_group_isolation; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) - { -#ifdef WGL_ATI_pixel_format_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) - { - ret = WGLEW_ATI_pixel_format_float; - continue; - } -#endif -#ifdef WGL_ATI_render_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) - { - ret = WGLEW_ATI_render_texture_rectangle; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) - { -#ifdef WGL_EXT_create_context_es2_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es2_profile", 26)) - { - ret = WGLEW_EXT_create_context_es2_profile; - continue; - } -#endif -#ifdef WGL_EXT_create_context_es_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es_profile", 25)) - { - ret = WGLEW_EXT_create_context_es_profile; - continue; - } -#endif -#ifdef WGL_EXT_depth_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"depth_float", 11)) - { - ret = WGLEW_EXT_depth_float; - continue; - } -#endif -#ifdef WGL_EXT_display_color_table - if (_glewStrSame3(&pos, &len, (const GLubyte*)"display_color_table", 19)) - { - ret = WGLEW_EXT_display_color_table; - continue; - } -#endif -#ifdef WGL_EXT_extensions_string - if (_glewStrSame3(&pos, &len, (const GLubyte*)"extensions_string", 17)) - { - ret = WGLEW_EXT_extensions_string; - continue; - } -#endif -#ifdef WGL_EXT_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = WGLEW_EXT_framebuffer_sRGB; - continue; - } -#endif -#ifdef WGL_EXT_make_current_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) - { - ret = WGLEW_EXT_make_current_read; - continue; - } -#endif -#ifdef WGL_EXT_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = WGLEW_EXT_multisample; - continue; - } -#endif -#ifdef WGL_EXT_pbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) - { - ret = WGLEW_EXT_pbuffer; - continue; - } -#endif -#ifdef WGL_EXT_pixel_format - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format", 12)) - { - ret = WGLEW_EXT_pixel_format; - continue; - } -#endif -#ifdef WGL_EXT_pixel_format_packed_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_packed_float", 25)) - { - ret = WGLEW_EXT_pixel_format_packed_float; - continue; - } -#endif -#ifdef WGL_EXT_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = WGLEW_EXT_swap_control; - continue; - } -#endif -#ifdef WGL_EXT_swap_control_tear - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control_tear", 17)) - { - ret = WGLEW_EXT_swap_control_tear; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"I3D_", 4)) - { -#ifdef WGL_I3D_digital_video_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"digital_video_control", 21)) - { - ret = WGLEW_I3D_digital_video_control; - continue; - } -#endif -#ifdef WGL_I3D_gamma - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gamma", 5)) - { - ret = WGLEW_I3D_gamma; - continue; - } -#endif -#ifdef WGL_I3D_genlock - if (_glewStrSame3(&pos, &len, (const GLubyte*)"genlock", 7)) - { - ret = WGLEW_I3D_genlock; - continue; - } -#endif -#ifdef WGL_I3D_image_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"image_buffer", 12)) - { - ret = WGLEW_I3D_image_buffer; - continue; - } -#endif -#ifdef WGL_I3D_swap_frame_lock - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_lock", 15)) - { - ret = WGLEW_I3D_swap_frame_lock; - continue; - } -#endif -#ifdef WGL_I3D_swap_frame_usage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_frame_usage", 16)) - { - ret = WGLEW_I3D_swap_frame_usage; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) - { -#ifdef WGL_NV_DX_interop - if (_glewStrSame3(&pos, &len, (const GLubyte*)"DX_interop", 10)) - { - ret = WGLEW_NV_DX_interop; - continue; - } -#endif -#ifdef WGL_NV_DX_interop2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"DX_interop2", 11)) - { - ret = WGLEW_NV_DX_interop2; - continue; - } -#endif -#ifdef WGL_NV_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = WGLEW_NV_copy_image; - continue; - } -#endif -#ifdef WGL_NV_float_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) - { - ret = WGLEW_NV_float_buffer; - continue; - } -#endif -#ifdef WGL_NV_gpu_affinity - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_affinity", 12)) - { - ret = WGLEW_NV_gpu_affinity; - continue; - } -#endif -#ifdef WGL_NV_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) - { - ret = WGLEW_NV_multisample_coverage; - continue; - } -#endif -#ifdef WGL_NV_present_video - if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) - { - ret = WGLEW_NV_present_video; - continue; - } -#endif -#ifdef WGL_NV_render_depth_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_depth_texture", 20)) - { - ret = WGLEW_NV_render_depth_texture; - continue; - } -#endif -#ifdef WGL_NV_render_texture_rectangle - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture_rectangle", 24)) - { - ret = WGLEW_NV_render_texture_rectangle; - continue; - } -#endif -#ifdef WGL_NV_swap_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) - { - ret = WGLEW_NV_swap_group; - continue; - } -#endif -#ifdef WGL_NV_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = WGLEW_NV_vertex_array_range; - continue; - } -#endif -#ifdef WGL_NV_video_capture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) - { - ret = WGLEW_NV_video_capture; - continue; - } -#endif -#ifdef WGL_NV_video_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) - { - ret = WGLEW_NV_video_output; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) - { -#ifdef WGL_OML_sync_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) - { - ret = WGLEW_OML_sync_control; - continue; - } -#endif - } - } - ret = (len == 0); - } - return ret; -} - -#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - -#if defined(GLEW_MX) -GLboolean glxewContextIsSupported (const GLXEWContext* ctx, const char* name) -#else -GLboolean glxewIsSupported (const char* name) -#endif -{ - GLubyte* pos = (GLubyte*)name; - GLuint len = _glewStrLen(pos); - GLboolean ret = GL_TRUE; - while (ret && len > 0) - { - if(_glewStrSame1(&pos, &len, (const GLubyte*)"GLX_", 4)) - { - if (_glewStrSame2(&pos, &len, (const GLubyte*)"VERSION_", 8)) - { -#ifdef GLX_VERSION_1_2 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_2", 3)) - { - ret = GLXEW_VERSION_1_2; - continue; - } -#endif -#ifdef GLX_VERSION_1_3 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_3", 3)) - { - ret = GLXEW_VERSION_1_3; - continue; - } -#endif -#ifdef GLX_VERSION_1_4 - if (_glewStrSame3(&pos, &len, (const GLubyte*)"1_4", 3)) - { - ret = GLXEW_VERSION_1_4; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"3DFX_", 5)) - { -#ifdef GLX_3DFX_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLXEW_3DFX_multisample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"AMD_", 4)) - { -#ifdef GLX_AMD_gpu_association - if (_glewStrSame3(&pos, &len, (const GLubyte*)"gpu_association", 15)) - { - ret = GLXEW_AMD_gpu_association; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ARB_", 4)) - { -#ifdef GLX_ARB_create_context - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context", 14)) - { - ret = GLXEW_ARB_create_context; - continue; - } -#endif -#ifdef GLX_ARB_create_context_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_profile", 22)) - { - ret = GLXEW_ARB_create_context_profile; - continue; - } -#endif -#ifdef GLX_ARB_create_context_robustness - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_robustness", 25)) - { - ret = GLXEW_ARB_create_context_robustness; - continue; - } -#endif -#ifdef GLX_ARB_fbconfig_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_float", 14)) - { - ret = GLXEW_ARB_fbconfig_float; - continue; - } -#endif -#ifdef GLX_ARB_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLXEW_ARB_framebuffer_sRGB; - continue; - } -#endif -#ifdef GLX_ARB_get_proc_address - if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_proc_address", 16)) - { - ret = GLXEW_ARB_get_proc_address; - continue; - } -#endif -#ifdef GLX_ARB_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLXEW_ARB_multisample; - continue; - } -#endif -#ifdef GLX_ARB_robustness_application_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_application_isolation", 32)) - { - ret = GLXEW_ARB_robustness_application_isolation; - continue; - } -#endif -#ifdef GLX_ARB_robustness_share_group_isolation - if (_glewStrSame3(&pos, &len, (const GLubyte*)"robustness_share_group_isolation", 32)) - { - ret = GLXEW_ARB_robustness_share_group_isolation; - continue; - } -#endif -#ifdef GLX_ARB_vertex_buffer_object - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_buffer_object", 20)) - { - ret = GLXEW_ARB_vertex_buffer_object; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"ATI_", 4)) - { -#ifdef GLX_ATI_pixel_format_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixel_format_float", 18)) - { - ret = GLXEW_ATI_pixel_format_float; - continue; - } -#endif -#ifdef GLX_ATI_render_texture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"render_texture", 14)) - { - ret = GLXEW_ATI_render_texture; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"EXT_", 4)) - { -#ifdef GLX_EXT_buffer_age - if (_glewStrSame3(&pos, &len, (const GLubyte*)"buffer_age", 10)) - { - ret = GLXEW_EXT_buffer_age; - continue; - } -#endif -#ifdef GLX_EXT_create_context_es2_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es2_profile", 26)) - { - ret = GLXEW_EXT_create_context_es2_profile; - continue; - } -#endif -#ifdef GLX_EXT_create_context_es_profile - if (_glewStrSame3(&pos, &len, (const GLubyte*)"create_context_es_profile", 25)) - { - ret = GLXEW_EXT_create_context_es_profile; - continue; - } -#endif -#ifdef GLX_EXT_fbconfig_packed_float - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig_packed_float", 21)) - { - ret = GLXEW_EXT_fbconfig_packed_float; - continue; - } -#endif -#ifdef GLX_EXT_framebuffer_sRGB - if (_glewStrSame3(&pos, &len, (const GLubyte*)"framebuffer_sRGB", 16)) - { - ret = GLXEW_EXT_framebuffer_sRGB; - continue; - } -#endif -#ifdef GLX_EXT_import_context - if (_glewStrSame3(&pos, &len, (const GLubyte*)"import_context", 14)) - { - ret = GLXEW_EXT_import_context; - continue; - } -#endif -#ifdef GLX_EXT_scene_marker - if (_glewStrSame3(&pos, &len, (const GLubyte*)"scene_marker", 12)) - { - ret = GLXEW_EXT_scene_marker; - continue; - } -#endif -#ifdef GLX_EXT_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = GLXEW_EXT_swap_control; - continue; - } -#endif -#ifdef GLX_EXT_swap_control_tear - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control_tear", 17)) - { - ret = GLXEW_EXT_swap_control_tear; - continue; - } -#endif -#ifdef GLX_EXT_texture_from_pixmap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"texture_from_pixmap", 19)) - { - ret = GLXEW_EXT_texture_from_pixmap; - continue; - } -#endif -#ifdef GLX_EXT_visual_info - if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_info", 11)) - { - ret = GLXEW_EXT_visual_info; - continue; - } -#endif -#ifdef GLX_EXT_visual_rating - if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_rating", 13)) - { - ret = GLXEW_EXT_visual_rating; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"INTEL_", 6)) - { -#ifdef GLX_INTEL_swap_event - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_event", 10)) - { - ret = GLXEW_INTEL_swap_event; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"MESA_", 5)) - { -#ifdef GLX_MESA_agp_offset - if (_glewStrSame3(&pos, &len, (const GLubyte*)"agp_offset", 10)) - { - ret = GLXEW_MESA_agp_offset; - continue; - } -#endif -#ifdef GLX_MESA_copy_sub_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_sub_buffer", 15)) - { - ret = GLXEW_MESA_copy_sub_buffer; - continue; - } -#endif -#ifdef GLX_MESA_pixmap_colormap - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pixmap_colormap", 15)) - { - ret = GLXEW_MESA_pixmap_colormap; - continue; - } -#endif -#ifdef GLX_MESA_release_buffers - if (_glewStrSame3(&pos, &len, (const GLubyte*)"release_buffers", 15)) - { - ret = GLXEW_MESA_release_buffers; - continue; - } -#endif -#ifdef GLX_MESA_set_3dfx_mode - if (_glewStrSame3(&pos, &len, (const GLubyte*)"set_3dfx_mode", 13)) - { - ret = GLXEW_MESA_set_3dfx_mode; - continue; - } -#endif -#ifdef GLX_MESA_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = GLXEW_MESA_swap_control; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"NV_", 3)) - { -#ifdef GLX_NV_copy_image - if (_glewStrSame3(&pos, &len, (const GLubyte*)"copy_image", 10)) - { - ret = GLXEW_NV_copy_image; - continue; - } -#endif -#ifdef GLX_NV_float_buffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"float_buffer", 12)) - { - ret = GLXEW_NV_float_buffer; - continue; - } -#endif -#ifdef GLX_NV_multisample_coverage - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample_coverage", 20)) - { - ret = GLXEW_NV_multisample_coverage; - continue; - } -#endif -#ifdef GLX_NV_present_video - if (_glewStrSame3(&pos, &len, (const GLubyte*)"present_video", 13)) - { - ret = GLXEW_NV_present_video; - continue; - } -#endif -#ifdef GLX_NV_swap_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) - { - ret = GLXEW_NV_swap_group; - continue; - } -#endif -#ifdef GLX_NV_vertex_array_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"vertex_array_range", 18)) - { - ret = GLXEW_NV_vertex_array_range; - continue; - } -#endif -#ifdef GLX_NV_video_capture - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_capture", 13)) - { - ret = GLXEW_NV_video_capture; - continue; - } -#endif -#ifdef GLX_NV_video_output - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_output", 12)) - { - ret = GLXEW_NV_video_output; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"OML_", 4)) - { -#ifdef GLX_OML_swap_method - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_method", 11)) - { - ret = GLXEW_OML_swap_method; - continue; - } -#endif -#ifdef GLX_OML_sync_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"sync_control", 12)) - { - ret = GLXEW_OML_sync_control; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIS_", 5)) - { -#ifdef GLX_SGIS_blended_overlay - if (_glewStrSame3(&pos, &len, (const GLubyte*)"blended_overlay", 15)) - { - ret = GLXEW_SGIS_blended_overlay; - continue; - } -#endif -#ifdef GLX_SGIS_color_range - if (_glewStrSame3(&pos, &len, (const GLubyte*)"color_range", 11)) - { - ret = GLXEW_SGIS_color_range; - continue; - } -#endif -#ifdef GLX_SGIS_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"multisample", 11)) - { - ret = GLXEW_SGIS_multisample; - continue; - } -#endif -#ifdef GLX_SGIS_shared_multisample - if (_glewStrSame3(&pos, &len, (const GLubyte*)"shared_multisample", 18)) - { - ret = GLXEW_SGIS_shared_multisample; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGIX_", 5)) - { -#ifdef GLX_SGIX_fbconfig - if (_glewStrSame3(&pos, &len, (const GLubyte*)"fbconfig", 8)) - { - ret = GLXEW_SGIX_fbconfig; - continue; - } -#endif -#ifdef GLX_SGIX_hyperpipe - if (_glewStrSame3(&pos, &len, (const GLubyte*)"hyperpipe", 9)) - { - ret = GLXEW_SGIX_hyperpipe; - continue; - } -#endif -#ifdef GLX_SGIX_pbuffer - if (_glewStrSame3(&pos, &len, (const GLubyte*)"pbuffer", 7)) - { - ret = GLXEW_SGIX_pbuffer; - continue; - } -#endif -#ifdef GLX_SGIX_swap_barrier - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_barrier", 12)) - { - ret = GLXEW_SGIX_swap_barrier; - continue; - } -#endif -#ifdef GLX_SGIX_swap_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_group", 10)) - { - ret = GLXEW_SGIX_swap_group; - continue; - } -#endif -#ifdef GLX_SGIX_video_resize - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) - { - ret = GLXEW_SGIX_video_resize; - continue; - } -#endif -#ifdef GLX_SGIX_visual_select_group - if (_glewStrSame3(&pos, &len, (const GLubyte*)"visual_select_group", 19)) - { - ret = GLXEW_SGIX_visual_select_group; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SGI_", 4)) - { -#ifdef GLX_SGI_cushion - if (_glewStrSame3(&pos, &len, (const GLubyte*)"cushion", 7)) - { - ret = GLXEW_SGI_cushion; - continue; - } -#endif -#ifdef GLX_SGI_make_current_read - if (_glewStrSame3(&pos, &len, (const GLubyte*)"make_current_read", 17)) - { - ret = GLXEW_SGI_make_current_read; - continue; - } -#endif -#ifdef GLX_SGI_swap_control - if (_glewStrSame3(&pos, &len, (const GLubyte*)"swap_control", 12)) - { - ret = GLXEW_SGI_swap_control; - continue; - } -#endif -#ifdef GLX_SGI_video_sync - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_sync", 10)) - { - ret = GLXEW_SGI_video_sync; - continue; - } -#endif - } - if (_glewStrSame2(&pos, &len, (const GLubyte*)"SUN_", 4)) - { -#ifdef GLX_SUN_get_transparent_index - if (_glewStrSame3(&pos, &len, (const GLubyte*)"get_transparent_index", 21)) - { - ret = GLXEW_SUN_get_transparent_index; - continue; - } -#endif -#ifdef GLX_SUN_video_resize - if (_glewStrSame3(&pos, &len, (const GLubyte*)"video_resize", 12)) - { - ret = GLXEW_SUN_video_resize; - continue; - } -#endif - } - } - ret = (len == 0); - } - return ret; -} - -#endif /* _WIN32 */ diff --git a/Engine/lib/glew/src/glewinfo.c b/Engine/lib/glew/src/glewinfo.c deleted file mode 100644 index ad44f7256c..0000000000 --- a/Engine/lib/glew/src/glewinfo.c +++ /dev/null @@ -1,10681 +0,0 @@ -/* -** The OpenGL Extension Wrangler Library -** Copyright (C) 2002-2008, Milan Ikits -** Copyright (C) 2002-2008, Marcelo E. Magallon -** Copyright (C) 2002, Lev Povalahev -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are met: -** -** * Redistributions of source code must retain the above copyright notice, -** this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright notice, -** this list of conditions and the following disclaimer in the documentation -** and/or other materials provided with the distribution. -** * The name of the author may be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -** THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include -#include -#include -#include -#if defined(_WIN32) -#include -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -#include -#endif - -#ifdef GLEW_REGAL -#include -#endif - -static FILE* f; - -#ifdef GLEW_MX -GLEWContext _glewctx; -#define glewGetContext() (&_glewctx) -#ifdef _WIN32 -WGLEWContext _wglewctx; -#define wglewGetContext() (&_wglewctx) -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLXEWContext _glxewctx; -#define glxewGetContext() (&_glxewctx) -#endif -#endif - -#if defined(_WIN32) -GLboolean glewCreateContext (int* pixelformat); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewCreateContext (const char* display, int* visual); -#else -GLboolean glewCreateContext (); -#endif - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual); -#endif - -void glewDestroyContext (); - -/* ------------------------------------------------------------------------- */ - -static void glewPrintExt (const char* name, GLboolean def1, GLboolean def2, GLboolean def3) -{ - unsigned int i; - fprintf(f, "\n%s:", name); - for (i=0; i<62-strlen(name); i++) fprintf(f, " "); - fprintf(f, "%s ", def1 ? "OK" : "MISSING"); - if (def1 != def2) - fprintf(f, "[%s] ", def2 ? "OK" : "MISSING"); - if (def1 != def3) - fprintf(f, "[%s]\n", def3 ? "OK" : "MISSING"); - else - fprintf(f, "\n"); - for (i=0; i]\n"); -#else - fprintf(stderr, "Usage: glewinfo [-display ] [-visual ]\n"); -#endif - return 1; - } -#endif - -#if defined(_WIN32) - if (GL_TRUE == glewCreateContext(&visual)) -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - if (GL_TRUE == glewCreateContext()) -#else - if (GL_TRUE == glewCreateContext(display, &visual)) -#endif - { - fprintf(stderr, "Error: glewCreateContext failed\n"); - glewDestroyContext(); - return 1; - } - glewExperimental = GL_TRUE; -#ifdef GLEW_MX - err = glewContextInit(glewGetContext()); -#ifdef _WIN32 - err = err || wglewContextInit(wglewGetContext()); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - err = err || glxewContextInit(glxewGetContext()); -#endif - -#else - err = glewInit(); -#endif - if (GLEW_OK != err) - { - fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); - glewDestroyContext(); - return 1; - } -#if defined(_WIN32) - f = fopen("glewinfo.txt", "w"); - if (f == NULL) f = stdout; -#else - f = stdout; -#endif - fprintf(f, "---------------------------\n"); - fprintf(f, " GLEW Extension Info\n"); - fprintf(f, "---------------------------\n\n"); - fprintf(f, "GLEW version %s\n", glewGetString(GLEW_VERSION)); -#if defined(_WIN32) - fprintf(f, "Reporting capabilities of pixelformat %d\n", visual); -#elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - fprintf(f, "Reporting capabilities of display %s, visual 0x%x\n", - display == NULL ? getenv("DISPLAY") : display, visual); -#endif - fprintf(f, "Running on a %s from %s\n", - glGetString(GL_RENDERER), glGetString(GL_VENDOR)); - fprintf(f, "OpenGL version %s is supported\n", glGetString(GL_VERSION)); - glewInfo(); -#if defined(_WIN32) - wglewInfo(); -#else - glxewInfo(); -#endif - if (f != stdout) fclose(f); - glewDestroyContext(); - return 0; -} - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) || !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLboolean glewParseArgs (int argc, char** argv, char** display, int* visual) -{ - int p = 0; - while (p < argc) - { -#if defined(_WIN32) - if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) - { - if (++p >= argc) return GL_TRUE; - *display = 0; - *visual = strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#else - if (!strcmp(argv[p], "-display")) - { - if (++p >= argc) return GL_TRUE; - *display = argv[p++]; - } - else if (!strcmp(argv[p], "-visual")) - { - if (++p >= argc) return GL_TRUE; - *visual = (int)strtol(argv[p++], NULL, 0); - } - else - return GL_TRUE; -#endif - } - return GL_FALSE; -} -#endif - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) - -HWND wnd = NULL; -HDC dc = NULL; -HGLRC rc = NULL; - -GLboolean glewCreateContext (int* pixelformat) -{ - WNDCLASS wc; - PIXELFORMATDESCRIPTOR pfd; - /* register window class */ - ZeroMemory(&wc, sizeof(WNDCLASS)); - wc.hInstance = GetModuleHandle(NULL); - wc.lpfnWndProc = DefWindowProc; - wc.lpszClassName = "GLEW"; - if (0 == RegisterClass(&wc)) return GL_TRUE; - /* create window */ - wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), NULL); - if (NULL == wnd) return GL_TRUE; - /* get the device context */ - dc = GetDC(wnd); - if (NULL == dc) return GL_TRUE; - /* find pixel format */ - ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); - if (*pixelformat == -1) /* find default */ - { - pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - *pixelformat = ChoosePixelFormat(dc, &pfd); - if (*pixelformat == 0) return GL_TRUE; - } - /* set the pixel format for the dc */ - if (FALSE == SetPixelFormat(dc, *pixelformat, &pfd)) return GL_TRUE; - /* create rendering context */ - rc = wglCreateContext(dc); - if (NULL == rc) return GL_TRUE; - if (FALSE == wglMakeCurrent(dc, rc)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != rc) wglMakeCurrent(NULL, NULL); - if (NULL != rc) wglDeleteContext(rc); - if (NULL != wnd && NULL != dc) ReleaseDC(wnd, dc); - if (NULL != wnd) DestroyWindow(wnd); - UnregisterClass("GLEW", GetModuleHandle(NULL)); -} - -/* ------------------------------------------------------------------------ */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -#include - -AGLContext ctx, octx; - -GLboolean glewCreateContext () -{ - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - /*int major, minor; - SetPortWindowPort(wnd); - aglGetVersion(&major, &minor); - fprintf(stderr, "GL %d.%d\n", major, minor);*/ - pf = aglChoosePixelFormat(NULL, 0, attrib); - if (NULL == pf) return GL_TRUE; - ctx = aglCreateContext(pf, NULL); - if (NULL == ctx || AGL_NO_ERROR != aglGetError()) return GL_TRUE; - aglDestroyPixelFormat(pf); - /*aglSetDrawable(ctx, GetWindowPort(wnd));*/ - octx = aglGetCurrentContext(); - if (GL_FALSE == aglSetCurrentContext(ctx)) return GL_TRUE; - /* Needed for Regal on the Mac */ - #if defined(GLEW_REGAL) && defined(__APPLE__) - RegalMakeCurrent(octx); - #endif - return GL_FALSE; -} - -void glewDestroyContext () -{ - aglSetCurrentContext(octx); - if (NULL != ctx) aglDestroyContext(ctx); -} - -/* ------------------------------------------------------------------------ */ - -#else /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -Display* dpy = NULL; -XVisualInfo* vi = NULL; -XVisualInfo* vis = NULL; -GLXContext ctx = NULL; -Window wnd = 0; -Colormap cmap = 0; - -GLboolean glewCreateContext (const char* display, int* visual) -{ - int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; - int erb, evb; - XSetWindowAttributes swa; - /* open display */ - dpy = XOpenDisplay(display); - if (NULL == dpy) return GL_TRUE; - /* query for glx */ - if (!glXQueryExtension(dpy, &erb, &evb)) return GL_TRUE; - /* choose visual */ - if (*visual == -1) - { - vi = glXChooseVisual(dpy, DefaultScreen(dpy), attrib); - if (NULL == vi) return GL_TRUE; - *visual = (int)XVisualIDFromVisual(vi->visual); - } - else - { - int n_vis, i; - vis = XGetVisualInfo(dpy, 0, NULL, &n_vis); - for (i=0; iscreen), 0, 0, 1, 1, 1, 0, 0);*/ - cmap = XCreateColormap(dpy, RootWindow(dpy, vi->screen), vi->visual, AllocNone); - swa.border_pixel = 0; - swa.colormap = cmap; - wnd = XCreateWindow(dpy, RootWindow(dpy, vi->screen), - 0, 0, 1, 1, 0, vi->depth, InputOutput, vi->visual, - CWBorderPixel | CWColormap, &swa); - /* make context current */ - if (!glXMakeCurrent(dpy, wnd, ctx)) return GL_TRUE; - return GL_FALSE; -} - -void glewDestroyContext () -{ - if (NULL != dpy && NULL != ctx) glXDestroyContext(dpy, ctx); - if (NULL != dpy && 0 != wnd) XDestroyWindow(dpy, wnd); - if (NULL != dpy && 0 != cmap) XFreeColormap(dpy, cmap); - if (NULL != vis) - XFree(vis); - else if (NULL != vi) - XFree(vi); - if (NULL != dpy) XCloseDisplay(dpy); -} - -#endif /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ diff --git a/Engine/lib/glew/src/visualinfo.c b/Engine/lib/glew/src/visualinfo.c deleted file mode 100644 index b8bb59ef60..0000000000 --- a/Engine/lib/glew/src/visualinfo.c +++ /dev/null @@ -1,1178 +0,0 @@ -/* -** visualinfo.c -** -** Copyright (C) Nate Robins, 1997 -** Michael Wimmer, 1999 -** Milan Ikits, 2002-2008 -** -** visualinfo is a small utility that displays all available visuals, -** aka. pixelformats, in an OpenGL system along with renderer version -** information. It shows a table of all the visuals that support OpenGL -** along with their capabilities. The format of the table is similar to -** that of glxinfo on Unix systems: -** -** visual ~= pixel format descriptor -** id = visual id (integer from 1 - max visuals) -** tp = type (wn: window, pb: pbuffer, wp: window & pbuffer, bm: bitmap) -** ac = acceleration (ge: generic, fu: full, no: none) -** fm = format (i: integer, f: float, c: color index) -** db = double buffer (y = yes) -** sw = swap method (x: exchange, c: copy, u: undefined) -** st = stereo (y = yes) -** sz = total # bits -** r = # bits of red -** g = # bits of green -** b = # bits of blue -** a = # bits of alpha -** axbf = # aux buffers -** dpth = # bits of depth -** stcl = # bits of stencil -*/ - -#include -#include -#include -#include -#if defined(_WIN32) -#include -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) -#include -#else -#include -#endif - -#ifdef GLEW_MX -GLEWContext _glewctx; -# define glewGetContext() (&_glewctx) -# ifdef _WIN32 -WGLEWContext _wglewctx; -# define wglewGetContext() (&_wglewctx) -# elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) -GLXEWContext _glxewctx; -# define glxewGetContext() (&_glxewctx) -# endif -#endif /* GLEW_MX */ - -typedef struct GLContextStruct -{ -#ifdef _WIN32 - HWND wnd; - HDC dc; - HGLRC rc; -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - AGLContext ctx, octx; -#else - Display* dpy; - XVisualInfo* vi; - GLXContext ctx; - Window wnd; - Colormap cmap; -#endif -} GLContext; - -void InitContext (GLContext* ctx); -GLboolean CreateContext (GLContext* ctx); -void DestroyContext (GLContext* ctx); -void VisualInfo (GLContext* ctx); -void PrintExtensions (const char* s); -GLboolean ParseArgs (int argc, char** argv); - -int showall = 0; -int displaystdout = 0; -int verbose = 0; -int drawableonly = 0; - -char* display = NULL; -int visual = -1; - -FILE* file = 0; - -int -main (int argc, char** argv) -{ - GLenum err; - GLContext ctx; - - /* ---------------------------------------------------------------------- */ - /* parse arguments */ - if (GL_TRUE == ParseArgs(argc-1, argv+1)) - { -#if defined(_WIN32) - fprintf(stderr, "Usage: visualinfo [-a] [-s] [-h] [-pf ]\n"); - fprintf(stderr, " -a: show all visuals\n"); - fprintf(stderr, " -s: display to stdout instead of visualinfo.txt\n"); - fprintf(stderr, " -pf : use given pixelformat\n"); - fprintf(stderr, " -h: this screen\n"); -#else - fprintf(stderr, "Usage: visualinfo [-h] [-display ] [-visual ]\n"); - fprintf(stderr, " -h: this screen\n"); - fprintf(stderr, " -display : use given display\n"); - fprintf(stderr, " -visual : use given visual\n"); -#endif - return 1; - } - - /* ---------------------------------------------------------------------- */ - /* create OpenGL rendering context */ - InitContext(&ctx); - if (GL_TRUE == CreateContext(&ctx)) - { - fprintf(stderr, "Error: CreateContext failed\n"); - DestroyContext(&ctx); - return 1; - } - - /* ---------------------------------------------------------------------- */ - /* initialize GLEW */ - glewExperimental = GL_TRUE; -#ifdef GLEW_MX - err = glewContextInit(glewGetContext()); -# ifdef _WIN32 - err = err || wglewContextInit(wglewGetContext()); -# elif !defined(__APPLE__) || defined(GLEW_APPLE_GLX) - err = err || glxewContextInit(glxewGetContext()); -# endif -#else - err = glewInit(); -#endif - if (GLEW_OK != err) - { - fprintf(stderr, "Error [main]: glewInit failed: %s\n", glewGetErrorString(err)); - DestroyContext(&ctx); - return 1; - } - - /* ---------------------------------------------------------------------- */ - /* open file */ -#if defined(_WIN32) - if (!displaystdout) - file = fopen("visualinfo.txt", "w"); - if (file == NULL) - file = stdout; -#else - file = stdout; -#endif - - /* ---------------------------------------------------------------------- */ - /* output header information */ - /* OpenGL extensions */ - fprintf(file, "OpenGL vendor string: %s\n", glGetString(GL_VENDOR)); - fprintf(file, "OpenGL renderer string: %s\n", glGetString(GL_RENDERER)); - fprintf(file, "OpenGL version string: %s\n", glGetString(GL_VERSION)); - fprintf(file, "OpenGL extensions (GL_): \n"); - PrintExtensions((char*)glGetString(GL_EXTENSIONS)); - -#ifndef GLEW_NO_GLU - /* GLU extensions */ - fprintf(file, "GLU version string: %s\n", gluGetString(GLU_VERSION)); - fprintf(file, "GLU extensions (GLU_): \n"); - PrintExtensions((char*)gluGetString(GLU_EXTENSIONS)); -#endif - - /* ---------------------------------------------------------------------- */ - /* extensions string */ -#if defined(_WIN32) - /* WGL extensions */ - if (WGLEW_ARB_extensions_string || WGLEW_EXT_extensions_string) - { - fprintf(file, "WGL extensions (WGL_): \n"); - PrintExtensions(wglGetExtensionsStringARB ? - (char*)wglGetExtensionsStringARB(ctx.dc) : - (char*)wglGetExtensionsStringEXT()); - } -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -#else - /* GLX extensions */ - fprintf(file, "GLX extensions (GLX_): \n"); - PrintExtensions(glXQueryExtensionsString(glXGetCurrentDisplay(), - DefaultScreen(glXGetCurrentDisplay()))); -#endif - - /* ---------------------------------------------------------------------- */ - /* enumerate all the formats */ - VisualInfo(&ctx); - - /* ---------------------------------------------------------------------- */ - /* release resources */ - DestroyContext(&ctx); - if (file != stdout) - fclose(file); - return 0; -} - -/* do the magic to separate all extensions with comma's, except - for the last one that _may_ terminate in a space. */ -void PrintExtensions (const char* s) -{ - char t[80]; - int i=0; - char* p=0; - - t[79] = '\0'; - while (*s) - { - t[i++] = *s; - if(*s == ' ') - { - if (*(s+1) != '\0') { - t[i-1] = ','; - t[i] = ' '; - p = &t[i++]; - } - else /* zoinks! last one terminated in a space! */ - { - t[i-1] = '\0'; - } - } - if(i > 80 - 5) - { - *p = t[i] = '\0'; - fprintf(file, " %s\n", t); - p++; - i = (int)strlen(p); - strcpy(t, p); - } - s++; - } - t[i] = '\0'; - fprintf(file, " %s.\n", t); -} - -/* ---------------------------------------------------------------------- */ - -#if defined(_WIN32) - -void -VisualInfoARB (GLContext* ctx) -{ - int attrib[32], value[32], n_attrib, n_pbuffer=0, n_float=0; - int i, pf, maxpf; - unsigned int c; - - /* to get pbuffer capable pixel formats */ - attrib[0] = WGL_DRAW_TO_PBUFFER_ARB; - attrib[1] = GL_TRUE; - attrib[2] = 0; - wglChoosePixelFormatARB(ctx->dc, attrib, 0, 1, &pf, &c); - /* query number of pixel formats */ - attrib[0] = WGL_NUMBER_PIXEL_FORMATS_ARB; - wglGetPixelFormatAttribivARB(ctx->dc, 0, 0, 1, attrib, value); - maxpf = value[0]; - for (i=0; i<32; i++) - value[i] = 0; - - attrib[0] = WGL_SUPPORT_OPENGL_ARB; - attrib[1] = WGL_DRAW_TO_WINDOW_ARB; - attrib[2] = WGL_DRAW_TO_BITMAP_ARB; - attrib[3] = WGL_ACCELERATION_ARB; - /* WGL_NO_ACCELERATION_ARB, WGL_GENERIC_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB */ - attrib[4] = WGL_SWAP_METHOD_ARB; - /* WGL_SWAP_EXCHANGE_ARB, WGL_SWAP_COPY_ARB, WGL_SWAP_UNDEFINED_ARB */ - attrib[5] = WGL_DOUBLE_BUFFER_ARB; - attrib[6] = WGL_STEREO_ARB; - attrib[7] = WGL_PIXEL_TYPE_ARB; - /* WGL_TYPE_RGBA_ARB, WGL_TYPE_COLORINDEX_ARB, - WGL_TYPE_RGBA_FLOAT_ATI (WGL_ATI_pixel_format_float) */ - /* Color buffer information */ - attrib[8] = WGL_COLOR_BITS_ARB; - attrib[9] = WGL_RED_BITS_ARB; - attrib[10] = WGL_GREEN_BITS_ARB; - attrib[11] = WGL_BLUE_BITS_ARB; - attrib[12] = WGL_ALPHA_BITS_ARB; - /* Accumulation buffer information */ - attrib[13] = WGL_ACCUM_BITS_ARB; - attrib[14] = WGL_ACCUM_RED_BITS_ARB; - attrib[15] = WGL_ACCUM_GREEN_BITS_ARB; - attrib[16] = WGL_ACCUM_BLUE_BITS_ARB; - attrib[17] = WGL_ACCUM_ALPHA_BITS_ARB; - /* Depth, stencil, and aux buffer information */ - attrib[18] = WGL_DEPTH_BITS_ARB; - attrib[19] = WGL_STENCIL_BITS_ARB; - attrib[20] = WGL_AUX_BUFFERS_ARB; - /* Layer information */ - attrib[21] = WGL_NUMBER_OVERLAYS_ARB; - attrib[22] = WGL_NUMBER_UNDERLAYS_ARB; - attrib[23] = WGL_SWAP_LAYER_BUFFERS_ARB; - attrib[24] = WGL_SAMPLES_ARB; - attrib[25] = WGL_SUPPORT_GDI_ARB; - n_attrib = 26; - if (WGLEW_ARB_pbuffer) - { - attrib[n_attrib] = WGL_DRAW_TO_PBUFFER_ARB; - n_pbuffer = n_attrib; - n_attrib++; - } - if (WGLEW_NV_float_buffer) - { - attrib[n_attrib] = WGL_FLOAT_COMPONENTS_NV; - n_float = n_attrib; - n_attrib++; - } - - if (!verbose) - { - /* print table header */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - fprintf(file, " | | visual | color | ax dp st | accum | layer |\n"); - fprintf(file, " | id | tp ac gd fm db sw st ms | sz r g b a | bf th cl | sz r g b a | ov un sw |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - wglGetPixelFormatAttribivARB(ctx->dc, i, 0, n_attrib, attrib, value); - /* only describe this format if it supports OpenGL */ - if (!value[0]) continue; - /* by default show only fully accelerated window or pbuffer capable visuals */ - if (!showall - && ((value[2] && !value[1]) - || (!WGLEW_ARB_pbuffer || !value[n_pbuffer]) - || (value[3] != WGL_FULL_ACCELERATION_ARB))) continue; - /* print out the information for this visual */ - /* visual id */ - fprintf(file, " |% 4d | ", i); - /* visual type */ - if (value[1]) - { - if (WGLEW_ARB_pbuffer && value[n_pbuffer]) fprintf(file, "wp "); - else fprintf(file, "wn "); - } - else - { - if (value[2]) fprintf(file, "bm "); - else if (WGLEW_ARB_pbuffer && value[n_pbuffer]) fprintf(file, "pb "); - } - /* acceleration */ - fprintf(file, "%s ", value[3] == WGL_FULL_ACCELERATION_ARB ? "fu" : - value[3] == WGL_GENERIC_ACCELERATION_ARB ? "ge" : - value[3] == WGL_NO_ACCELERATION_ARB ? "no" : ". "); - /* gdi support */ - fprintf(file, " %c ", value[25] ? 'y' : '.'); - /* format */ - if (WGLEW_NV_float_buffer && value[n_float]) fprintf(file, " f "); - else if (WGLEW_ATI_pixel_format_float && value[7] == WGL_TYPE_RGBA_FLOAT_ATI) fprintf(file, " f "); - else if (value[7] == WGL_TYPE_RGBA_ARB) fprintf(file, " i "); - else if (value[7] == WGL_TYPE_COLORINDEX_ARB) fprintf(file, " c "); - else if (value[7] == WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT) fprintf(file," p "); - else fprintf(file," ? "); - /* double buffer */ - fprintf(file, " %c ", value[5] ? 'y' : '.'); - /* swap method */ - if (value[4] == WGL_SWAP_EXCHANGE_ARB) fprintf(file, " x "); - else if (value[4] == WGL_SWAP_COPY_ARB) fprintf(file, " c "); - else if (value[4] == WGL_SWAP_UNDEFINED_ARB) fprintf(file, " . "); - else fprintf(file, " . "); - /* stereo */ - fprintf(file, " %c ", value[6] ? 'y' : '.'); - /* multisample */ - if (value[24] > 0) - fprintf(file, "%2d | ", value[24]); - else - fprintf(file, " . | "); - /* color size */ - if (value[8]) fprintf(file, "%3d ", value[8]); - else fprintf(file, " . "); - /* red */ - if (value[9]) fprintf(file, "%2d ", value[9]); - else fprintf(file, " . "); - /* green */ - if (value[10]) fprintf(file, "%2d ", value[10]); - else fprintf(file, " . "); - /* blue */ - if (value[11]) fprintf(file, "%2d ", value[11]); - else fprintf(file, " . "); - /* alpha */ - if (value[12]) fprintf(file, "%2d | ", value[12]); - else fprintf(file, " . | "); - /* aux buffers */ - if (value[20]) fprintf(file, "%2d ", value[20]); - else fprintf(file, " . "); - /* depth */ - if (value[18]) fprintf(file, "%2d ", value[18]); - else fprintf(file, " . "); - /* stencil */ - if (value[19]) fprintf(file, "%2d | ", value[19]); - else fprintf(file, " . | "); - /* accum size */ - if (value[13]) fprintf(file, "%3d ", value[13]); - else fprintf(file, " . "); - /* accum red */ - if (value[14]) fprintf(file, "%2d ", value[14]); - else fprintf(file, " . "); - /* accum green */ - if (value[15]) fprintf(file, "%2d ", value[15]); - else fprintf(file, " . "); - /* accum blue */ - if (value[16]) fprintf(file, "%2d ", value[16]); - else fprintf(file, " . "); - /* accum alpha */ - if (value[17]) fprintf(file, "%2d | ", value[17]); - else fprintf(file, " . | "); - /* overlay */ - if (value[21]) fprintf(file, "%2d ", value[21]); - else fprintf(file, " . "); - /* underlay */ - if (value[22]) fprintf(file, "%2d ", value[22]); - else fprintf(file, " . "); - /* layer swap */ - if (value[23]) fprintf(file, "y "); - else fprintf(file, " . "); - fprintf(file, "|\n"); - } - /* print table footer */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - fprintf(file, " | | visual | color | ax dp st | accum | layer |\n"); - fprintf(file, " | id | tp ac gd fm db sw st ms | sz r g b a | bf th cl | sz r g b a | ov un sw |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-----------------+----------+\n"); - } - else /* verbose */ - { -#if 0 - fprintf(file, "\n"); - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - DescribePixelFormat(ctx->dc, i, sizeof(PIXELFORMATDESCRIPTOR), &pfd); - /* only describe this format if it supports OpenGL */ - if(!(pfd.dwFlags & PFD_SUPPORT_OPENGL) - || (drawableonly && !(pfd.dwFlags & PFD_DRAW_TO_WINDOW))) continue; - fprintf(file, "Visual ID: %2d depth=%d class=%s\n", i, pfd.cDepthBits, - pfd.cColorBits <= 8 ? "PseudoColor" : "TrueColor"); - fprintf(file, " bufferSize=%d level=%d renderType=%s doubleBuffer=%d stereo=%d\n", pfd.cColorBits, pfd.bReserved, pfd.iPixelType == PFD_TYPE_RGBA ? "rgba" : "ci", pfd.dwFlags & PFD_DOUBLEBUFFER, pfd.dwFlags & PFD_STEREO); - fprintf(file, " generic=%d generic accelerated=%d\n", (pfd.dwFlags & PFD_GENERIC_FORMAT) == PFD_GENERIC_FORMAT, (pfd.dwFlags & PFD_GENERIC_ACCELERATED) == PFD_GENERIC_ACCELERATED); - fprintf(file, " rgba: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits); - fprintf(file, " auxBuffers=%d depthSize=%d stencilSize=%d\n", pfd.cAuxBuffers, pfd.cDepthBits, pfd.cStencilBits); - fprintf(file, " accum: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cAccumRedBits, pfd.cAccumGreenBits, pfd.cAccumBlueBits, pfd.cAccumAlphaBits); - fprintf(file, " multiSample=%d multisampleBuffers=%d\n", 0, 0); - fprintf(file, " Opaque.\n"); - } -#endif - } -} - -void -VisualInfoGDI (GLContext* ctx) -{ - int i, maxpf; - PIXELFORMATDESCRIPTOR pfd; - - /* calling DescribePixelFormat() with NULL pfd (!!!) return maximum - number of pixel formats */ - maxpf = DescribePixelFormat(ctx->dc, 1, 0, NULL); - - if (!verbose) - { - fprintf(file, "-----------------------------------------------------------------------------\n"); - fprintf(file, " visual x bf lv rg d st ge ge r g b a ax dp st accum buffs ms \n"); - fprintf(file, " id dep tp sp sz l ci b ro ne ac sz sz sz sz bf th cl sz r g b a ns b\n"); - fprintf(file, "-----------------------------------------------------------------------------\n"); - - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - DescribePixelFormat(ctx->dc, i, sizeof(PIXELFORMATDESCRIPTOR), &pfd); - /* only describe this format if it supports OpenGL */ - if(!(pfd.dwFlags & PFD_SUPPORT_OPENGL) - || (drawableonly && (pfd.dwFlags & PFD_DRAW_TO_BITMAP))) continue; - /* other criteria could be tested here for actual pixel format - choosing in an application: - - for (...each pixel format...) { - if (pfd.dwFlags & PFD_SUPPORT_OPENGL && - pfd.dwFlags & PFD_DOUBLEBUFFER && - pfd.cDepthBits >= 24 && - pfd.cColorBits >= 24) - { - goto found; - } - } - ... not found so exit ... - found: - ... found so use it ... - */ - /* print out the information for this pixel format */ - fprintf(file, "0x%02x ", i); - fprintf(file, "%3d ", pfd.cColorBits); - if(pfd.dwFlags & PFD_DRAW_TO_WINDOW) fprintf(file, "wn "); - else if(pfd.dwFlags & PFD_DRAW_TO_BITMAP) fprintf(file, "bm "); - else fprintf(file, "pb "); - /* should find transparent pixel from LAYERPLANEDESCRIPTOR */ - fprintf(file, " . "); - fprintf(file, "%3d ", pfd.cColorBits); - /* bReserved field indicates number of over/underlays */ - if(pfd.bReserved) fprintf(file, " %d ", pfd.bReserved); - else fprintf(file, " . "); - fprintf(file, " %c ", pfd.iPixelType == PFD_TYPE_RGBA ? 'r' : 'c'); - fprintf(file, "%c ", pfd.dwFlags & PFD_DOUBLEBUFFER ? 'y' : '.'); - fprintf(file, " %c ", pfd.dwFlags & PFD_STEREO ? 'y' : '.'); - /* added: */ - fprintf(file, " %c ", pfd.dwFlags & PFD_GENERIC_FORMAT ? 'y' : '.'); - fprintf(file, " %c ", pfd.dwFlags & PFD_GENERIC_ACCELERATED ? 'y' : '.'); - if(pfd.cRedBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cRedBits); - else fprintf(file, " . "); - if(pfd.cGreenBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cGreenBits); - else fprintf(file, " . "); - if(pfd.cBlueBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cBlueBits); - else fprintf(file, " . "); - if(pfd.cAlphaBits && pfd.iPixelType == PFD_TYPE_RGBA) - fprintf(file, "%2d ", pfd.cAlphaBits); - else fprintf(file, " . "); - if(pfd.cAuxBuffers) fprintf(file, "%2d ", pfd.cAuxBuffers); - else fprintf(file, " . "); - if(pfd.cDepthBits) fprintf(file, "%2d ", pfd.cDepthBits); - else fprintf(file, " . "); - if(pfd.cStencilBits) fprintf(file, "%2d ", pfd.cStencilBits); - else fprintf(file, " . "); - if(pfd.cAccumBits) fprintf(file, "%3d ", pfd.cAccumBits); - else fprintf(file, " . "); - if(pfd.cAccumRedBits) fprintf(file, "%2d ", pfd.cAccumRedBits); - else fprintf(file, " . "); - if(pfd.cAccumGreenBits) fprintf(file, "%2d ", pfd.cAccumGreenBits); - else fprintf(file, " . "); - if(pfd.cAccumBlueBits) fprintf(file, "%2d ", pfd.cAccumBlueBits); - else fprintf(file, " . "); - if(pfd.cAccumAlphaBits) fprintf(file, "%2d ", pfd.cAccumAlphaBits); - else fprintf(file, " . "); - /* no multisample in win32 */ - fprintf(file, " . .\n"); - } - /* print table footer */ - fprintf(file, "-----------------------------------------------------------------------------\n"); - fprintf(file, " visual x bf lv rg d st ge ge r g b a ax dp st accum buffs ms \n"); - fprintf(file, " id dep tp sp sz l ci b ro ne ac sz sz sz sz bf th cl sz r g b a ns b\n"); - fprintf(file, "-----------------------------------------------------------------------------\n"); - } - else /* verbose */ - { - fprintf(file, "\n"); - /* loop through all the pixel formats */ - for(i = 1; i <= maxpf; i++) - { - DescribePixelFormat(ctx->dc, i, sizeof(PIXELFORMATDESCRIPTOR), &pfd); - /* only describe this format if it supports OpenGL */ - if(!(pfd.dwFlags & PFD_SUPPORT_OPENGL) - || (drawableonly && !(pfd.dwFlags & PFD_DRAW_TO_WINDOW))) continue; - fprintf(file, "Visual ID: %2d depth=%d class=%s\n", i, pfd.cDepthBits, - pfd.cColorBits <= 8 ? "PseudoColor" : "TrueColor"); - fprintf(file, " bufferSize=%d level=%d renderType=%s doubleBuffer=%ld stereo=%ld\n", pfd.cColorBits, pfd.bReserved, pfd.iPixelType == PFD_TYPE_RGBA ? "rgba" : "ci", pfd.dwFlags & PFD_DOUBLEBUFFER, pfd.dwFlags & PFD_STEREO); - fprintf(file, " generic=%d generic accelerated=%d\n", (pfd.dwFlags & PFD_GENERIC_FORMAT) == PFD_GENERIC_FORMAT, (pfd.dwFlags & PFD_GENERIC_ACCELERATED) == PFD_GENERIC_ACCELERATED); - fprintf(file, " rgba: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cRedBits, pfd.cGreenBits, pfd.cBlueBits, pfd.cAlphaBits); - fprintf(file, " auxBuffers=%d depthSize=%d stencilSize=%d\n", pfd.cAuxBuffers, pfd.cDepthBits, pfd.cStencilBits); - fprintf(file, " accum: redSize=%d greenSize=%d blueSize=%d alphaSize=%d\n", pfd.cAccumRedBits, pfd.cAccumGreenBits, pfd.cAccumBlueBits, pfd.cAccumAlphaBits); - fprintf(file, " multiSample=%d multisampleBuffers=%d\n", 0, 0); - fprintf(file, " Opaque.\n"); - } - } -} - -void -VisualInfo (GLContext* ctx) -{ - if (WGLEW_ARB_pixel_format) - VisualInfoARB(ctx); - else - VisualInfoGDI(ctx); -} - -/* ---------------------------------------------------------------------- */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -void -VisualInfo (GLContext* ctx) -{ -/* - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - GLint value; - pf = aglChoosePixelFormat(NULL, 0, attrib); - while (pf != NULL) - { - aglDescribePixelFormat(pf, GL_RGBA, &value); - fprintf(stderr, "%d\n", value); - pf = aglNextPixelFormat(pf); - } -*/ -} - -#else /* GLX */ - -void -VisualInfo (GLContext* ctx) -{ - int n_fbc; - GLXFBConfig* fbc; - int value, ret, i; - - fbc = glXGetFBConfigs(ctx->dpy, DefaultScreen(ctx->dpy), &n_fbc); - - if (fbc) - { - if (!verbose) - { - /* print table header */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - fprintf(file, " | | visual | color | ax dp st | accum | ms | cav |\n"); - fprintf(file, " | id | tp xr cl fm db st lv xp | sz r g b a | bf th cl | r g b a | ns b | eat |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - /* loop through all the fbcs */ - for (i=0; idpy, fbc[i], GLX_FBCONFIG_ID, &value); - if (ret != Success) - { - fprintf(file, "| ? |"); - } - else - { - fprintf(file, " |% 4d | ", value); - } - /* visual type */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_DRAWABLE_TYPE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - if (value & GLX_WINDOW_BIT) - { - if (value & GLX_PBUFFER_BIT) - { - fprintf(file, "wp "); - } - else - { - fprintf(file, "wn "); - } - } - else - { - if (value & GLX_PBUFFER_BIT) - { - fprintf(file, "pb "); - } - else if (value & GLX_PIXMAP_BIT) - { - fprintf(file, "pm "); - } - else - { - fprintf(file, " ? "); - } - } - } - /* x renderable */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_X_RENDERABLE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - fprintf(file, value ? " y " : " n "); - } - /* class */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_X_VISUAL_TYPE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - if (GLX_TRUE_COLOR == value) - fprintf(file, "tc "); - else if (GLX_DIRECT_COLOR == value) - fprintf(file, "dc "); - else if (GLX_PSEUDO_COLOR == value) - fprintf(file, "pc "); - else if (GLX_STATIC_COLOR == value) - fprintf(file, "sc "); - else if (GLX_GRAY_SCALE == value) - fprintf(file, "gs "); - else if (GLX_STATIC_GRAY == value) - fprintf(file, "sg "); - else if (GLX_X_VISUAL_TYPE == value) - fprintf(file, " . "); - else - fprintf(file, " ? "); - } - /* format */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_RENDER_TYPE, &value); - if (ret != Success) - { - fprintf(file, " ? "); - } - else - { - if (GLXEW_NV_float_buffer) - { - int ret2, value2; - ret2 = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_FLOAT_COMPONENTS_NV, &value2); - if (Success == ret2 && GL_TRUE == value2) - { - fprintf(file, " f "); - } - else if (value & GLX_RGBA_BIT) - fprintf(file, " i "); - else if (value & GLX_COLOR_INDEX_BIT) - fprintf(file, " c "); - else - fprintf(file, " ? "); - } - else - { - if (value & GLX_RGBA_FLOAT_ATI_BIT) - fprintf(file, " f "); - else if (value & GLX_RGBA_BIT) - fprintf(file, " i "); - else if (value & GLX_COLOR_INDEX_BIT) - fprintf(file, " c "); - else - fprintf(file, " ? "); - } - } - /* double buffer */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_DOUBLEBUFFER, &value); - fprintf(file, " %c ", Success != ret ? '?' : (value ? 'y' : '.')); - /* stereo */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_STEREO, &value); - fprintf(file, " %c ", Success != ret ? '?' : (value ? 'y' : '.')); - /* level */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_LEVEL, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - fprintf(file, "%2d ", value); - } - /* transparency */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_TRANSPARENT_TYPE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (GLX_TRANSPARENT_RGB == value) - fprintf(file, " r | "); - else if (GLX_TRANSPARENT_INDEX == value) - fprintf(file, " i | "); - else if (GLX_NONE == value) - fprintf(file, " . | "); - else - fprintf(file, " ? | "); - } - /* color size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_BUFFER_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%3d ", value); - else - fprintf(file, " . "); - } - /* red size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_RED_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* green size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_GREEN_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* blue size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_BLUE_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* alpha size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ALPHA_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (value) - fprintf(file, "%2d | ", value); - else - fprintf(file, " . | "); - } - /* aux buffers */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_AUX_BUFFERS, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* depth size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_DEPTH_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* stencil size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_STENCIL_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (value) - fprintf(file, "%2d | ", value); - else - fprintf(file, " . | "); - } - /* accum red size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_RED_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* accum green size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_GREEN_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* accum blue size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_BLUE_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - if (value) - fprintf(file, "%2d ", value); - else - fprintf(file, " . "); - } - /* accum alpha size */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_ACCUM_ALPHA_SIZE, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - if (value) - fprintf(file, "%2d | ", value); - else - fprintf(file, " . | "); - } - /* multisample */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_SAMPLES, &value); - if (Success != ret) - { - fprintf(file, " ? "); - } - else - { - fprintf(file, "%2d ", value); - } - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_SAMPLE_BUFFERS, &value); - if (Success != ret) - { - fprintf(file, " ? | "); - } - else - { - fprintf(file, "%2d | ", value); - } - /* caveat */ - ret = glXGetFBConfigAttrib(ctx->dpy, fbc[i], GLX_CONFIG_CAVEAT, &value); - if (Success != ret) - { - fprintf(file, "???? |"); - } - else - { - if (GLX_NONE == value) - fprintf(file, "none |\n"); - else if (GLX_SLOW_CONFIG == value) - fprintf(file, "slow |\n"); - else if (GLX_NON_CONFORMANT_CONFIG == value) - fprintf(file, "ncft |\n"); - else - fprintf(file, "???? |\n"); - } - } - /* print table footer */ - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - fprintf(file, " | id | tp xr cl fm db st lv xp | sz r g b a | bf th cl | r g b a | ns b | eat |\n"); - fprintf(file, " | | visual | color | ax dp st | accum | ms | cav |\n"); - fprintf(file, " +-----+-------------------------+-----------------+----------+-------------+-------+------+\n"); - } - } -} - -#endif - -/* ------------------------------------------------------------------------ */ - -#if defined(_WIN32) - -void InitContext (GLContext* ctx) -{ - ctx->wnd = NULL; - ctx->dc = NULL; - ctx->rc = NULL; -} - -GLboolean CreateContext (GLContext* ctx) -{ - WNDCLASS wc; - PIXELFORMATDESCRIPTOR pfd; - /* check for input */ - if (NULL == ctx) return GL_TRUE; - /* register window class */ - ZeroMemory(&wc, sizeof(WNDCLASS)); - wc.hInstance = GetModuleHandle(NULL); - wc.lpfnWndProc = DefWindowProc; - wc.lpszClassName = "GLEW"; - if (0 == RegisterClass(&wc)) return GL_TRUE; - /* create window */ - ctx->wnd = CreateWindow("GLEW", "GLEW", 0, CW_USEDEFAULT, CW_USEDEFAULT, - CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, - GetModuleHandle(NULL), NULL); - if (NULL == ctx->wnd) return GL_TRUE; - /* get the device context */ - ctx->dc = GetDC(ctx->wnd); - if (NULL == ctx->dc) return GL_TRUE; - /* find pixel format */ - ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); - if (visual == -1) /* find default */ - { - pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); - pfd.nVersion = 1; - pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL; - visual = ChoosePixelFormat(ctx->dc, &pfd); - if (0 == visual) return GL_TRUE; - } - /* set the pixel format for the dc */ - if (FALSE == SetPixelFormat(ctx->dc, visual, &pfd)) return GL_TRUE; - /* create rendering context */ - ctx->rc = wglCreateContext(ctx->dc); - if (NULL == ctx->rc) return GL_TRUE; - if (FALSE == wglMakeCurrent(ctx->dc, ctx->rc)) return GL_TRUE; - return GL_FALSE; -} - -void DestroyContext (GLContext* ctx) -{ - if (NULL == ctx) return; - if (NULL != ctx->rc) wglMakeCurrent(NULL, NULL); - if (NULL != ctx->rc) wglDeleteContext(wglGetCurrentContext()); - if (NULL != ctx->wnd && NULL != ctx->dc) ReleaseDC(ctx->wnd, ctx->dc); - if (NULL != ctx->wnd) DestroyWindow(ctx->wnd); - UnregisterClass("GLEW", GetModuleHandle(NULL)); -} - -/* ------------------------------------------------------------------------ */ - -#elif defined(__APPLE__) && !defined(GLEW_APPLE_GLX) - -void InitContext (GLContext* ctx) -{ - ctx->ctx = NULL; - ctx->octx = NULL; -} - -GLboolean CreateContext (GLContext* ctx) -{ - int attrib[] = { AGL_RGBA, AGL_NONE }; - AGLPixelFormat pf; - /* check input */ - if (NULL == ctx) return GL_TRUE; - /*int major, minor; - SetPortWindowPort(wnd); - aglGetVersion(&major, &minor); - fprintf(stderr, "GL %d.%d\n", major, minor);*/ - pf = aglChoosePixelFormat(NULL, 0, attrib); - if (NULL == pf) return GL_TRUE; - ctx->ctx = aglCreateContext(pf, NULL); - if (NULL == ctx->ctx || AGL_NO_ERROR != aglGetError()) return GL_TRUE; - aglDestroyPixelFormat(pf); - /*aglSetDrawable(ctx, GetWindowPort(wnd));*/ - ctx->octx = aglGetCurrentContext(); - if (GL_FALSE == aglSetCurrentContext(ctx->ctx)) return GL_TRUE; - return GL_FALSE; -} - -void DestroyContext (GLContext* ctx) -{ - if (NULL == ctx) return; - aglSetCurrentContext(ctx->octx); - if (NULL != ctx->ctx) aglDestroyContext(ctx->ctx); -} - -/* ------------------------------------------------------------------------ */ - -#else /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -void InitContext (GLContext* ctx) -{ - ctx->dpy = NULL; - ctx->vi = NULL; - ctx->ctx = NULL; - ctx->wnd = 0; - ctx->cmap = 0; -} - -GLboolean CreateContext (GLContext* ctx) -{ - int attrib[] = { GLX_RGBA, GLX_DOUBLEBUFFER, None }; - int erb, evb; - XSetWindowAttributes swa; - /* check input */ - if (NULL == ctx) return GL_TRUE; - /* open display */ - ctx->dpy = XOpenDisplay(display); - if (NULL == ctx->dpy) return GL_TRUE; - /* query for glx */ - if (!glXQueryExtension(ctx->dpy, &erb, &evb)) return GL_TRUE; - /* choose visual */ - ctx->vi = glXChooseVisual(ctx->dpy, DefaultScreen(ctx->dpy), attrib); - if (NULL == ctx->vi) return GL_TRUE; - /* create context */ - ctx->ctx = glXCreateContext(ctx->dpy, ctx->vi, None, True); - if (NULL == ctx->ctx) return GL_TRUE; - /* create window */ - /*wnd = XCreateSimpleWindow(dpy, RootWindow(dpy, vi->screen), 0, 0, 1, 1, 1, 0, 0);*/ - ctx->cmap = XCreateColormap(ctx->dpy, RootWindow(ctx->dpy, ctx->vi->screen), - ctx->vi->visual, AllocNone); - swa.border_pixel = 0; - swa.colormap = ctx->cmap; - ctx->wnd = XCreateWindow(ctx->dpy, RootWindow(ctx->dpy, ctx->vi->screen), - 0, 0, 1, 1, 0, ctx->vi->depth, InputOutput, ctx->vi->visual, - CWBorderPixel | CWColormap, &swa); - /* make context current */ - if (!glXMakeCurrent(ctx->dpy, ctx->wnd, ctx->ctx)) return GL_TRUE; - return GL_FALSE; -} - -void DestroyContext (GLContext* ctx) -{ - if (NULL != ctx->dpy && NULL != ctx->ctx) glXDestroyContext(ctx->dpy, ctx->ctx); - if (NULL != ctx->dpy && 0 != ctx->wnd) XDestroyWindow(ctx->dpy, ctx->wnd); - if (NULL != ctx->dpy && 0 != ctx->cmap) XFreeColormap(ctx->dpy, ctx->cmap); - if (NULL != ctx->vi) XFree(ctx->vi); - if (NULL != ctx->dpy) XCloseDisplay(ctx->dpy); -} - -#endif /* __UNIX || (__APPLE__ && GLEW_APPLE_GLX) */ - -GLboolean ParseArgs (int argc, char** argv) -{ - int p = 0; - while (p < argc) - { -#if defined(_WIN32) - if (!strcmp(argv[p], "-pf") || !strcmp(argv[p], "-pixelformat")) - { - if (++p >= argc) return GL_TRUE; - display = NULL; - visual = strtol(argv[p], NULL, 0); - } - else if (!strcmp(argv[p], "-a")) - { - showall = 1; - } - else if (!strcmp(argv[p], "-s")) - { - displaystdout = 1; - } - else if (!strcmp(argv[p], "-h")) - { - return GL_TRUE; - } - else - return GL_TRUE; -#else - if (!strcmp(argv[p], "-display")) - { - if (++p >= argc) return GL_TRUE; - display = argv[p]; - } - else if (!strcmp(argv[p], "-visual")) - { - if (++p >= argc) return GL_TRUE; - visual = (int)strtol(argv[p], NULL, 0); - } - else if (!strcmp(argv[p], "-h")) - { - return GL_TRUE; - } - else - return GL_TRUE; -#endif - p++; - } - return GL_FALSE; -} From 7b35ce3212b3d629c7df806cc12b58ee39eed656 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 13:38:14 -0400 Subject: [PATCH 167/324] move gl_generated_dispatch.c --- Engine/lib/epoxy/src/{egl => }/gl_generated_dispatch.c | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Engine/lib/epoxy/src/{egl => }/gl_generated_dispatch.c (100%) diff --git a/Engine/lib/epoxy/src/egl/gl_generated_dispatch.c b/Engine/lib/epoxy/src/gl_generated_dispatch.c similarity index 100% rename from Engine/lib/epoxy/src/egl/gl_generated_dispatch.c rename to Engine/lib/epoxy/src/gl_generated_dispatch.c From b89d2a116eebdf2bf9c529064a79ad6a038d00aa Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 13:38:40 -0400 Subject: [PATCH 168/324] cmake for epoxy and rip glew --- Tools/CMake/libraries/epoxy.cmake | 39 +++++++++++++++++++++++++++++++ Tools/CMake/torque3d.cmake | 18 +++++--------- 2 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 Tools/CMake/libraries/epoxy.cmake diff --git a/Tools/CMake/libraries/epoxy.cmake b/Tools/CMake/libraries/epoxy.cmake new file mode 100644 index 0000000000..8422d86905 --- /dev/null +++ b/Tools/CMake/libraries/epoxy.cmake @@ -0,0 +1,39 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2016 GarageGames, LLC +# +# 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. +# ----------------------------------------------------------------------------- + +project(epoxy) + +addPath("${libDir}/epoxy/src") + +# TODO EGL support if we ever use EGL instead of GLX +if (WIN32) + addPath("${libDir}/epoxy/src/wgl") + addDef(BUILD_WGL) +else() + addPath("${libDir}/epoxy/src/glx") + addDef(BUILD_GLX) +endif() + +addInclude("${libDir}/epoxy/include") +addInclude("${libDir}/epoxy/src") + +finishLibrary() diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 83cf636234..80003b501f 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -473,12 +473,9 @@ if( TORQUE_OPENGL ) if( TORQUE_OPENGL AND NOT TORQUE_DEDICATED ) addPath("${srcDir}/gfx/gl") addPath("${srcDir}/gfx/gl/tGL") - addPath("${srcDir}/shaderGen/GLSL") + addPath("${srcDir}/shaderGen/GLSL") addPath("${srcDir}/terrain/glsl") addPath("${srcDir}/forest/glsl") - - # glew - LIST(APPEND ${PROJECT_NAME}_files "${libDir}/glew/src/glew.c") endif() if(WIN32 AND NOT TORQUE_SDL) @@ -531,6 +528,9 @@ addLib(squish) addLib(collada) addLib(pcre) addLib(convexDecomp) +if (TORQUE_OPENGL) + addLib(epoxy) +endif() if(WIN32) # copy pasted from T3D build system, some might not be needed @@ -590,9 +590,6 @@ endif() if(TORQUE_OPENGL) addDef(TORQUE_OPENGL) - if(WIN32) - addDef(GLEW_STATIC) - endif() endif() if(TORQUE_SDL) @@ -624,7 +621,8 @@ addInclude("${libDir}/opcode") addInclude("${libDir}/collada/include") addInclude("${libDir}/collada/include/1.4") if(TORQUE_OPENGL) - addInclude("${libDir}/glew/include") + addInclude("${libDir}/epoxy/include") + addInclude("${libDir}/epoxy/src") endif() if(UNIX) @@ -632,10 +630,6 @@ if(UNIX) addInclude("/usr/include/freetype2") endif() -if(TORQUE_OPENGL) - addInclude("${libDir}/glew/include") -endif() - # external things if(WIN32) set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY INCLUDE_DIRECTORIES $ENV{DXSDK_DIR}/Include) From 6e692ea9cff3fa644bda40f7416f6678175c8513 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 13:41:38 -0400 Subject: [PATCH 169/324] torque windows integration of epoxy --- Engine/source/gfx/gl/gfxGLDevice.cpp | 4 ++-- Engine/source/gfx/gl/tGL/tGL.cpp | 12 +++++++++--- Engine/source/gfx/gl/tGL/tWGL.h | 4 ++-- Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp | 2 +- Engine/source/platformWin32/WinPlatformGL.cpp | 8 ++++---- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 01bbd02ea4..862cde3458 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -81,8 +81,8 @@ void loadGLExtensions(void *context) GL::gglPerformExtensionBinds(context); } -void STDCALL glDebugCallback(GLenum source, GLenum type, GLuint id, - GLenum severity, GLsizei length, const GLchar* message, void* userParam) +void STDCALL glDebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, + const GLchar *message, const void *userParam) { if (severity == GL_DEBUG_SEVERITY_HIGH) Con::errorf("OPENGL: %s", message); diff --git a/Engine/source/gfx/gl/tGL/tGL.cpp b/Engine/source/gfx/gl/tGL/tGL.cpp index 8d62a7fd18..d56faa05e0 100644 --- a/Engine/source/gfx/gl/tGL/tGL.cpp +++ b/Engine/source/gfx/gl/tGL/tGL.cpp @@ -25,13 +25,19 @@ #include "core/strings/stringFunctions.h" #include "console/console.h" +#ifdef TORQUE_OS_WIN + #include "tWGL.h" +#endif + namespace GL { void gglPerformBinds() { - glewExperimental = GL_TRUE; - GLenum err = glewInit(); - AssertFatal(GLEW_OK == err, avar("Error: %s\n", glewGetErrorString(err)) ); + // JTH: epoxy has one oddity with windows. You need to bind the context + // after creating the context to udpate the internals of epoxy. +#ifdef TORQUE_OS_WIN + epoxy_handle_external_wglMakeCurrent(); +#endif } void gglPerformExtensionBinds(void *context) diff --git a/Engine/source/gfx/gl/tGL/tWGL.h b/Engine/source/gfx/gl/tGL/tWGL.h index af905dca0b..18025e8861 100644 --- a/Engine/source/gfx/gl/tGL/tWGL.h +++ b/Engine/source/gfx/gl/tGL/tWGL.h @@ -28,9 +28,9 @@ #ifdef TORQUE_OPENGL #include "tGL.h" -#include "GL/wglew.h" +#include -#define gglHasWExtension(EXTENSION) WGLEW_##EXTENSION +#define gglHasWExtension(window, EXTENSION) epoxy_has_wgl_extension(window, "WGL_" # EXTENSION) #endif //TORQUE_OPENGL diff --git a/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp b/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp index 6d4d09d0bf..045b2aa6ff 100644 --- a/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp +++ b/Engine/source/gfx/gl/win32/gfxGLDevice.win.cpp @@ -272,7 +272,7 @@ void GFXGLDevice::init( const GFXVideoMode &mode, PlatformWindow *window ) int debugFlag = 0; #endif - if( gglHasWExtension(ARB_create_context) ) + if( gglHasWExtension(hdcGL, ARB_create_context) ) { int const create_attribs[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, OGL_MAJOR, diff --git a/Engine/source/platformWin32/WinPlatformGL.cpp b/Engine/source/platformWin32/WinPlatformGL.cpp index a85245ef13..a30212bad5 100644 --- a/Engine/source/platformWin32/WinPlatformGL.cpp +++ b/Engine/source/platformWin32/WinPlatformGL.cpp @@ -5,10 +5,10 @@ void PlatformGL::setVSync(const int i) { - if (WGLEW_EXT_swap_control) - { - wglSwapIntervalEXT(i); - } + if (gglHasWExtension(wglGetCurrentDC(), EXT_swap_control)) + { + wglSwapIntervalEXT(i); + } } #endif From 4cf6a30e058d28643cf2d3472bcd067a56161c05 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 13:44:22 -0400 Subject: [PATCH 170/324] cleanup --- Engine/source/gfx/gl/tGL/tGL.h | 13 +++++-------- Engine/source/gfx/gl/tGL/tXGL.h | 5 +++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Engine/source/gfx/gl/tGL/tGL.h b/Engine/source/gfx/gl/tGL/tGL.h index bb21422b7d..8a0731ae58 100644 --- a/Engine/source/gfx/gl/tGL/tGL.h +++ b/Engine/source/gfx/gl/tGL/tGL.h @@ -22,15 +22,12 @@ #ifndef T_GL_H #define T_GL_H -#include "GL/glew.h" -#if defined (TORQUE_OS_WIN) -// This doesn't work on Mesa drivers. -#define gglHasExtension(EXTENSION) GLEW_##EXTENSION -#else -// Slower but reliably detects extensions on Mesa. -#define gglHasExtension(EXTENSION) glewGetExtension("GL_" # EXTENSION) -#endif +#include + +// JTH: This is slow, we should probably check extensions once and cache them +// directly inside of some compatability table. +#define gglHasExtension(EXTENSION) epoxy_has_gl_extension("GL_" #EXTENSION) #endif diff --git a/Engine/source/gfx/gl/tGL/tXGL.h b/Engine/source/gfx/gl/tGL/tXGL.h index 0cf2df966e..370d59d0de 100644 --- a/Engine/source/gfx/gl/tGL/tXGL.h +++ b/Engine/source/gfx/gl/tGL/tXGL.h @@ -28,9 +28,10 @@ #ifdef TORQUE_OS_LINUX #include "tGL.h" -#include "GL/glxew.h" +#include -#define gglHasXExtension(EXTENSION) GLXEW##EXTENSION +// TODO glx +#define gglHasXExtension(EXTENSION) #endif //TORQUE_OS_LINUX From df3cb6cb4444585b81eabf4d05495c04297e75f5 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Fri, 25 Mar 2016 18:46:25 -0500 Subject: [PATCH 171/324] case sensitivity typofix --- .../shaders/common/lighting/advanced/gl/deferredShadingP.glsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl index 4ee4b1d81f..8af37ef0cc 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/gl/deferredShadingP.glsl @@ -22,7 +22,7 @@ #include "../../../gl/hlslCompat.glsl" #include "shadergen:/autogenConditioners.h" -#include "../../../postfx/gl/postFx.glsl" +#include "../../../postFx/gl/postFX.glsl" #include "../../../gl/torque.glsl" uniform sampler2D colorBufferTex; From 7317848080b5eb065328b6ea5ac70e61969fdf8d Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 21:03:01 -0400 Subject: [PATCH 172/324] epoxy GLX extension interface --- Engine/source/gfx/gl/tGL/tXGL.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Engine/source/gfx/gl/tGL/tXGL.h b/Engine/source/gfx/gl/tGL/tXGL.h index 370d59d0de..5e08048404 100644 --- a/Engine/source/gfx/gl/tGL/tXGL.h +++ b/Engine/source/gfx/gl/tGL/tXGL.h @@ -30,8 +30,7 @@ #include "tGL.h" #include -// TODO glx -#define gglHasXExtension(EXTENSION) +#define gglHasXExtension(display, screen, EXTENSION) epoxy_has_glx_extension(display, screen, "GLX_" # EXTENSION) #endif //TORQUE_OS_LINUX From 3bb4fda47a165129933944d05252f5c8e1a24784 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Fri, 25 Mar 2016 21:11:42 -0400 Subject: [PATCH 173/324] SDL epoxy stuff. --- Engine/source/platformSDL/sdlPlatformGL.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Engine/source/platformSDL/sdlPlatformGL.cpp b/Engine/source/platformSDL/sdlPlatformGL.cpp index b71846d8b3..bc663cef61 100644 --- a/Engine/source/platformSDL/sdlPlatformGL.cpp +++ b/Engine/source/platformSDL/sdlPlatformGL.cpp @@ -2,6 +2,10 @@ #include "windowManager/sdl/sdlWindow.h" #include "console/console.h" +#ifdef TORQUE_OS_WIN +#include "gfx/gl/tGL/tWGL.h" +#endif + namespace PlatformGL { @@ -64,6 +68,11 @@ namespace PlatformGL Con::printf( err ); AssertFatal(0, err ); } + + #ifdef TORQUE_OS_WIN + // JTH: Update the internals of epoxy on windows. + epoxy_handle_external_wglMakeCurrent(); + #endif } void setVSync(const int i) From 12621f876b42683c6ef46a62a6b3cfc79fd278a4 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Mon, 28 Mar 2016 10:05:16 +1000 Subject: [PATCH 174/324] Added GFXFormatR8G8B8A8_SRGB format. --- Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp | 1 + Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp | 1 + Engine/source/gfx/gfxEnums.h | 3 +++ Engine/source/gfx/gl/gfxGLEnumTranslate.cpp | 2 ++ 4 files changed, 7 insertions(+) diff --git a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp index 24f1952478..54c43fa384 100644 --- a/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp +++ b/Engine/source/gfx/D3D11/gfxD3D11EnumTranslate.cpp @@ -72,6 +72,7 @@ void GFXD3D11EnumTranslate::init() GFXD3D11TextureFormat[GFXFormatD24S8] = DXGI_FORMAT_D24_UNORM_S8_UINT; GFXD3D11TextureFormat[GFXFormatD24FS8] = DXGI_FORMAT_UNKNOWN; GFXD3D11TextureFormat[GFXFormatD16] = DXGI_FORMAT_D16_UNORM; + GFXD3D11TextureFormat[GFXFormatR8G8B8A8_SRGB] = DXGI_FORMAT_B8G8R8A8_UNORM_SRGB; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ GFXD3D11TextureFilter[GFXTextureFilterNone] = D3D11_FILTER_MIN_MAG_MIP_POINT; diff --git a/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp b/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp index 77ea67041d..93bc86ee9f 100644 --- a/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp +++ b/Engine/source/gfx/D3D9/pc/gfxD3D9EnumTranslate.pc.cpp @@ -114,6 +114,7 @@ void GFXD3D9EnumTranslate::init() GFXD3D9TextureFormat[GFXFormatD24S8] = D3DFMT_D24S8; GFXD3D9TextureFormat[GFXFormatD24FS8] = D3DFMT_D24FS8; GFXD3D9TextureFormat[GFXFormatD16] = D3DFMT_D16; + GFXD3D9TextureFormat[GFXFormatR8G8B8A8_SRGB] = D3DFMT_UNKNOWN; VALIDATE_LOOKUPTABLE( GFXD3D9TextureFormat, GFXFormat); //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ diff --git a/Engine/source/gfx/gfxEnums.h b/Engine/source/gfx/gfxEnums.h index 0e38781540..238af2f941 100644 --- a/Engine/source/gfx/gfxEnums.h +++ b/Engine/source/gfx/gfxEnums.h @@ -205,6 +205,9 @@ enum GFXFormat GFXFormatDXT4, GFXFormatDXT5, + // sRGB formats + GFXFormatR8G8B8A8_SRGB, + GFXFormat_COUNT, GFXFormat_8BIT = GFXFormatA8, diff --git a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp index 7955590e1d..c5af360bd6 100644 --- a/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp +++ b/Engine/source/gfx/gl/gfxGLEnumTranslate.cpp @@ -190,6 +190,8 @@ void GFXGLEnumTranslate::init() GFXGLTextureType[GFXFormatDXT4] = GL_ZERO; GFXGLTextureType[GFXFormatDXT5] = GL_UNSIGNED_BYTE; + GFXGLTextureType[GFXFormatR8G8B8A8_SRGB] = GL_SRGB8_ALPHA8; + static GLint Swizzle_GFXFormatA8[] = { GL_NONE, GL_NONE, GL_NONE, GL_RED }; static GLint Swizzle_GFXFormatL[] = { GL_RED, GL_RED, GL_RED, GL_ALPHA }; GFXGLTextureSwizzle[GFXFormatA8] = Swizzle_GFXFormatA8; // old GL_ALPHA8 From b9d8df5a4a49c1eb68c03a9f09064b3b599c713a Mon Sep 17 00:00:00 2001 From: Areloch Date: Mon, 28 Mar 2016 22:47:22 -0500 Subject: [PATCH 175/324] Includes a formatting fix for the SimPath change to make it compatible with DX11. --- Engine/source/scene/simPath.cpp | 4 ++-- Engine/source/scene/simPath.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Engine/source/scene/simPath.cpp b/Engine/source/scene/simPath.cpp index edf7b1051d..906eb10b77 100644 --- a/Engine/source/scene/simPath.cpp +++ b/Engine/source/scene/simPath.cpp @@ -273,7 +273,7 @@ DefineEngineMethod( Path, getPathId, S32, (),, //-------------------------------------------------------------------------- GFXStateBlockRef Marker::smStateBlock; -GFXVertexBufferHandle Marker::smVertexBuffer; +GFXVertexBufferHandle Marker::smVertexBuffer; GFXPrimitiveBufferHandle Marker::smPrimitiveBuffer; static Point3F wedgePoints[4] = { @@ -295,7 +295,7 @@ void Marker::initGFXResources() smStateBlock = GFX->createStateBlock(d); smVertexBuffer.set(GFX, 4, GFXBufferTypeStatic); - GFXVertexPC* verts = smVertexBuffer.lock(); + GFXVertexPCT* verts = smVertexBuffer.lock(); verts[0].point = wedgePoints[0] * 1.25f; verts[1].point = wedgePoints[1] * 1.25f; verts[2].point = wedgePoints[2] * 1.25f; diff --git a/Engine/source/scene/simPath.h b/Engine/source/scene/simPath.h index 9e172bdf48..4633e0a109 100644 --- a/Engine/source/scene/simPath.h +++ b/Engine/source/scene/simPath.h @@ -132,7 +132,7 @@ class Marker : public SceneObject static void initGFXResources(); static GFXStateBlockRef smStateBlock; - static GFXVertexBufferHandle smVertexBuffer; + static GFXVertexBufferHandle smVertexBuffer; static GFXPrimitiveBufferHandle smPrimitiveBuffer; public: From 4d190b1982be1a61378451a108baa2c071928de3 Mon Sep 17 00:00:00 2001 From: Areloch Date: Tue, 29 Mar 2016 00:08:18 -0500 Subject: [PATCH 176/324] Roll back the changes to simPath temporarily in order to merge in DX11 --- Engine/source/scene/simPath.cpp | 18 ++++++++---------- Engine/source/scene/simPath.h | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/Engine/source/scene/simPath.cpp b/Engine/source/scene/simPath.cpp index 906eb10b77..c25764ad11 100644 --- a/Engine/source/scene/simPath.cpp +++ b/Engine/source/scene/simPath.cpp @@ -273,7 +273,7 @@ DefineEngineMethod( Path, getPathId, S32, (),, //-------------------------------------------------------------------------- GFXStateBlockRef Marker::smStateBlock; -GFXVertexBufferHandle Marker::smVertexBuffer; +GFXVertexBufferHandle Marker::smVertexBuffer; GFXPrimitiveBufferHandle Marker::smPrimitiveBuffer; static Point3F wedgePoints[4] = { @@ -295,14 +295,12 @@ void Marker::initGFXResources() smStateBlock = GFX->createStateBlock(d); smVertexBuffer.set(GFX, 4, GFXBufferTypeStatic); - GFXVertexPCT* verts = smVertexBuffer.lock(); - verts[0].point = wedgePoints[0] * 1.25f; - verts[1].point = wedgePoints[1] * 1.25f; - verts[2].point = wedgePoints[2] * 1.25f; - verts[3].point = wedgePoints[3] * 1.25f; - verts[1].color = GFXVertexColor(ColorI(255, 0, 0, 255)); - verts[0].color = verts[2].color = verts[3].color = GFXVertexColor(ColorI(0, 0, 255, 255)); - + GFXVertexPC* verts = smVertexBuffer.lock(); + verts[0].point = wedgePoints[0] * 0.25f; + verts[1].point = wedgePoints[1] * 0.25f; + verts[2].point = wedgePoints[2] * 0.25f; + verts[3].point = wedgePoints[3] * 0.25f; + verts[0].color = verts[1].color = verts[2].color = verts[3].color = GFXVertexColor(ColorI(0, 255, 0, 255)); smVertexBuffer.unlock(); smPrimitiveBuffer.set(GFX, 24, 12, GFXBufferTypeStatic); @@ -419,7 +417,7 @@ bool Marker::onAdd() if(!Parent::onAdd()) return false; - mObjBox = Box3F(Point3F(-1.25, -1.25, -1.25), Point3F(1.25, 1.25, 1.25)); + mObjBox = Box3F(Point3F(-.25, -.25, -.25), Point3F(.25, .25, .25)); resetWorldBox(); if(gEditingMission) diff --git a/Engine/source/scene/simPath.h b/Engine/source/scene/simPath.h index 4633e0a109..9e172bdf48 100644 --- a/Engine/source/scene/simPath.h +++ b/Engine/source/scene/simPath.h @@ -132,7 +132,7 @@ class Marker : public SceneObject static void initGFXResources(); static GFXStateBlockRef smStateBlock; - static GFXVertexBufferHandle smVertexBuffer; + static GFXVertexBufferHandle smVertexBuffer; static GFXPrimitiveBufferHandle smPrimitiveBuffer; public: From 2073a94a7a9e189a27f3d343766dad0a7814b183 Mon Sep 17 00:00:00 2001 From: rextimmy Date: Sat, 2 Apr 2016 22:30:56 +1000 Subject: [PATCH 177/324] ScreenShotD3D11 delete fix. --- Engine/source/gfx/D3D11/screenshotD3D11.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Engine/source/gfx/D3D11/screenshotD3D11.cpp b/Engine/source/gfx/D3D11/screenshotD3D11.cpp index 89fa5f90cd..264c8b5fe0 100644 --- a/Engine/source/gfx/D3D11/screenshotD3D11.cpp +++ b/Engine/source/gfx/D3D11/screenshotD3D11.cpp @@ -52,7 +52,7 @@ GBitmap* ScreenShotD3D11::_captureBackBuffer() if (FAILED(hr)) { //cleanup - SAFE_DELETE(pData); + SAFE_DELETE_ARRAY(pData); SAFE_RELEASE(pNewTexture); return NULL; } @@ -88,7 +88,7 @@ GBitmap* ScreenShotD3D11::_captureBackBuffer() } //cleanup - SAFE_DELETE(pData); + SAFE_DELETE_ARRAY(pData); SAFE_RELEASE(pNewTexture); From bac14875f4e4c38f66999ac473005a1f10835336 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Mon, 4 Apr 2016 09:38:24 -0500 Subject: [PATCH 178/324] allows navmeshes to generate for most scene objects, and adds a NavMeshIgnore method for object-instances to filter them out. --- Engine/source/navigation/navMesh.cpp | 14 +++++++++++++- Engine/source/scene/sceneObject.cpp | 1 + Engine/source/scene/sceneObject.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Engine/source/navigation/navMesh.cpp b/Engine/source/navigation/navMesh.cpp index f029c5debd..db70d1cc31 100644 --- a/Engine/source/navigation/navMesh.cpp +++ b/Engine/source/navigation/navMesh.cpp @@ -145,6 +145,17 @@ DefineConsoleFunction(NavMeshUpdateAroundObject, void, (S32 objid, bool remove), obj->enableCollision(); } + +DefineConsoleFunction(NavMeshIgnore, void, (S32 objid, bool _ignore), (0, true), + "@brief Flag this object as not generating a navmesh result.") +{ + SceneObject *obj; + if(!Sim::findObject(objid, obj)) + return; + + obj->mPathfindingIgnore = _ignore; +} + DefineConsoleFunction(NavMeshUpdateOne, void, (S32 meshid, S32 objid, bool remove), (0, 0, false), "@brief Update all tiles in a given NavMesh that intersect the given object's world box.") { @@ -839,6 +850,7 @@ void NavMesh::buildNextTile() static void buildCallback(SceneObject* object,void *key) { SceneContainer::CallbackInfo* info = reinterpret_cast(key); + if (!object->mPathfindingIgnore) object->buildPolyList(info->context,info->polyList,info->boundingBox,info->boundingSphere); } @@ -861,7 +873,7 @@ unsigned char *NavMesh::buildTileData(const Tile &tile, TileData &data, U32 &dat data.geom.clear(); info.polyList = &data.geom; info.key = this; - getContainer()->findObjects(box, StaticShapeObjectType | TerrainObjectType, buildCallback, &info); + getContainer()->findObjects(box, StaticObjectType | DynamicShapeObjectType, buildCallback, &info); // Parse water objects into the same list, but remember how much geometry was /not/ water. U32 nonWaterVertCount = data.geom.getVertCount(); diff --git a/Engine/source/scene/sceneObject.cpp b/Engine/source/scene/sceneObject.cpp index 1420bac11b..1d16377af3 100644 --- a/Engine/source/scene/sceneObject.cpp +++ b/Engine/source/scene/sceneObject.cpp @@ -144,6 +144,7 @@ SceneObject::SceneObject() mIsScopeAlways = false; mAccuTex = NULL; + mPathfindingIgnore = false; } //----------------------------------------------------------------------------- diff --git a/Engine/source/scene/sceneObject.h b/Engine/source/scene/sceneObject.h index 42c3c53ed2..3985d372c2 100644 --- a/Engine/source/scene/sceneObject.h +++ b/Engine/source/scene/sceneObject.h @@ -371,6 +371,7 @@ class SceneObject : public NetObject, private SceneContainer::Link, public Proce SceneObject(); virtual ~SceneObject(); + bool mPathfindingIgnore; /// Triggered when a SceneObject onAdd is called. static Signal< void( SceneObject* ) > smSceneObjectAdd; From 223e9a8264820b2f64de28cbb131e881b03fe4be Mon Sep 17 00:00:00 2001 From: Azaezel Date: Tue, 5 Apr 2016 20:36:13 -0500 Subject: [PATCH 179/324] corrects projection matricies for opengl --- Engine/source/math/mathUtils.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Engine/source/math/mathUtils.cpp b/Engine/source/math/mathUtils.cpp index 5ffd9a8707..ea57d93c3b 100644 --- a/Engine/source/math/mathUtils.cpp +++ b/Engine/source/math/mathUtils.cpp @@ -30,6 +30,7 @@ #include "platform/profiler.h" #include "core/tAlgorithm.h" +#include "gfx/gfxDevice.h" namespace MathUtils { @@ -1449,6 +1450,7 @@ void makeProjection( MatrixF *outMatrix, F32 farPlane, bool gfxRotate ) { + bool isGL = GFX->getAdapterType() == OpenGL; Point4F row; row.x = 2.0*nearPlane / (right-left); @@ -1465,13 +1467,13 @@ void makeProjection( MatrixF *outMatrix, row.x = (left+right) / (right-left); row.y = (top+bottom) / (top-bottom); - row.z = farPlane / (nearPlane-farPlane); + row.z = isGL ? -(farPlane + nearPlane) / (farPlane - nearPlane) : farPlane / (nearPlane - farPlane); row.w = -1.0; outMatrix->setRow( 2, row ); row.x = 0.0; row.y = 0.0; - row.z = nearPlane * farPlane / (nearPlane-farPlane); + row.z = isGL ? 2 * nearPlane * farPlane / (nearPlane - farPlane) : nearPlane * farPlane / (nearPlane - farPlane); row.w = 0.0; outMatrix->setRow( 3, row ); @@ -1492,6 +1494,8 @@ void makeOrthoProjection( MatrixF *outMatrix, F32 farPlane, bool gfxRotate ) { + bool isGL = GFX->getAdapterType() == OpenGL; + Point4F row; row.x = 2.0f / (right - left); row.y = 0.0f; @@ -1509,15 +1513,15 @@ void makeOrthoProjection( MatrixF *outMatrix, row.y = 0.0f; row.w = 0.0f; - // This may need be modified to work with OpenGL (d3d has 0..1 + // This needs to be modified to work with OpenGL (d3d has 0..1 // projection for z, vs -1..1 in OpenGL) - row.z = 1.0f / (nearPlane - farPlane); + row.z = isGL ? 2.0f / (nearPlane - farPlane) : 1.0f / (nearPlane - farPlane); outMatrix->setRow( 2, row ); row.x = (left + right) / (left - right); row.y = (top + bottom) / (bottom - top); - row.z = nearPlane / (nearPlane - farPlane); + row.z = isGL ? (nearPlane + farPlane) / (nearPlane - farPlane) : nearPlane / (nearPlane - farPlane); row.w = 1.0f; outMatrix->setRow( 3, row ); From 131090f1b7933637626d3bc67e7535ee3eceb02a Mon Sep 17 00:00:00 2001 From: Areloch Date: Wed, 6 Apr 2016 21:21:55 -0500 Subject: [PATCH 180/324] Made the cmake SDL flag a regular, non-advanced option so that it's not hidden from the base setup on Windows. --- Tools/CMake/torque3d.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/Tools/CMake/torque3d.cmake b/Tools/CMake/torque3d.cmake index 7b846d6a12..fd95bbf86b 100644 --- a/Tools/CMake/torque3d.cmake +++ b/Tools/CMake/torque3d.cmake @@ -64,7 +64,6 @@ option(TORQUE_EXTENDED_MOVE "Extended move support" OFF) mark_as_advanced(TORQUE_EXTENDED_MOVE) if(WIN32) option(TORQUE_SDL "Use SDL for window and input" OFF) - mark_as_advanced(TORQUE_SDL) else() set(TORQUE_SDL ON) # we need sdl to work on Linux/Mac endif() From b63ef177f4d64a7aa27e820820510f28b2a729e1 Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 7 Apr 2016 00:40:06 -0500 Subject: [PATCH 181/324] Updates SDL to version 2.0.4, which makes it compatible with VS2015. --- Engine/lib/sdl/Android.mk | 6 +- Engine/lib/sdl/CMakeLists.txt | 348 +- Engine/lib/sdl/COPYING.txt | 2 +- Engine/lib/sdl/INSTALL.txt | 8 +- Engine/lib/sdl/Makefile.in | 32 +- Engine/lib/sdl/Makefile.wiz | 4 +- Engine/lib/sdl/README-android.txt | 438 - Engine/lib/sdl/README-cmake.txt | 31 - Engine/lib/sdl/README-directfb.txt | 106 - Engine/lib/sdl/README-dynapi.txt | 130 - Engine/lib/sdl/README-gesture.txt | 72 - Engine/lib/sdl/README-hg.txt | 23 - Engine/lib/sdl/README-ios.txt | 222 - Engine/lib/sdl/README-linux.txt | 80 - Engine/lib/sdl/README-macosx.txt | 226 - Engine/lib/sdl/README-pandora.txt | 16 - Engine/lib/sdl/README-platforms.txt | 30 - Engine/lib/sdl/README-porting.txt | 61 - Engine/lib/sdl/README-psp.txt | 17 - Engine/lib/sdl/README-raspberrypi.txt | 161 - Engine/lib/sdl/README-touch.txt | 84 - Engine/lib/sdl/README-wince.txt | 8 - Engine/lib/sdl/README-windows.txt | 42 - Engine/lib/sdl/README.txt | 25 +- Engine/lib/sdl/SDL2.spec | 16 +- Engine/lib/sdl/SDL2.spec.in | 14 +- Engine/lib/sdl/VisualC.html | 10 +- Engine/lib/sdl/VisualC/clean.sh | 9 +- Engine/lib/sdl/WhatsNew.txt | 91 + Engine/lib/sdl/Xcode-iOS/Demos/Default.png | Bin 18383 -> 0 bytes .../Demos/Demos.xcodeproj/project.pbxproj | 1019 -- Engine/lib/sdl/Xcode-iOS/Demos/Icon.png | Bin 2409 -> 0 bytes Engine/lib/sdl/Xcode-iOS/Demos/Info.plist | 30 - Engine/lib/sdl/Xcode-iOS/Demos/README | 43 - .../Demos/data/bitmapfont/kromasky_16x16.bmp | Bin 45368 -> 0 bytes .../Demos/data/bitmapfont/license.txt | 258 - .../Demos/data/drums/ds_brush_snare.wav | Bin 194604 -> 0 bytes .../Xcode-iOS/Demos/data/drums/ds_china.wav | Bin 984604 -> 0 bytes .../Demos/data/drums/ds_kick_big_amb.wav | Bin 307080 -> 0 bytes .../Demos/data/drums/ds_loose_skin_mute.wav | Bin 127052 -> 0 bytes Engine/lib/sdl/Xcode-iOS/Demos/data/ship.bmp | Bin 12344 -> 0 bytes Engine/lib/sdl/Xcode-iOS/Demos/data/space.bmp | Bin 460856 -> 0 bytes .../lib/sdl/Xcode-iOS/Demos/data/stroke.bmp | Bin 3128 -> 0 bytes .../sdl/Xcode-iOS/Demos/src/accelerometer.c | 239 - Engine/lib/sdl/Xcode-iOS/Demos/src/common.c | 36 - Engine/lib/sdl/Xcode-iOS/Demos/src/common.h | 12 - .../lib/sdl/Xcode-iOS/Demos/src/fireworks.c | 475 - Engine/lib/sdl/Xcode-iOS/Demos/src/happy.c | 177 - Engine/lib/sdl/Xcode-iOS/Demos/src/keyboard.c | 310 - Engine/lib/sdl/Xcode-iOS/Demos/src/mixer.c | 353 - .../lib/sdl/Xcode-iOS/Demos/src/rectangles.c | 81 - Engine/lib/sdl/Xcode-iOS/Demos/src/touch.c | 125 - .../SDL/SDL.xcodeproj/project.pbxproj | 1335 -- .../SDL2test.xcodeproj/project.pbxproj | 272 - .../Template/SDL iOS Application/Default.png | Bin 18383 -> 0 bytes .../Template/SDL iOS Application/Icon.png | Bin 2409 -> 0 bytes .../Template/SDL iOS Application/Info.plist | 28 - .../TemplateIcon.icns | Bin 34248 -> 0 bytes .../TemplateInfo.plist | 10 - .../project.pbxproj | 403 - .../Template/SDL iOS Application/main.c | 98 - Engine/lib/sdl/Xcode-iOS/Test/Info.plist | 28 - Engine/lib/sdl/Xcode-iOS/Test/README | 22 - .../TestiPhoneOS.xcodeproj/project.pbxproj | 2267 --- Engine/lib/sdl/Xcode/SDL/Info-Framework.plist | 4 +- .../Xcode/SDL/SDL.xcodeproj/project.pbxproj | 126 +- .../SDL/pkg-support/codesign-frameworks.sh | 43 - .../SDL/pkg-support/resources/License.txt | 2 +- .../SDLTest/SDLTest.xcodeproj/project.pbxproj | 374 +- Engine/lib/sdl/acinclude/libtool.m4 | 17 +- .../sdl/android-project/AndroidManifest.xml | 44 - Engine/lib/sdl/android-project/ant.properties | 17 - .../lib/sdl/android-project/build.properties | 17 - Engine/lib/sdl/android-project/build.xml | 93 - .../sdl/android-project/default.properties | 11 - Engine/lib/sdl/android-project/jni/Android.mk | 1 - .../sdl/android-project/jni/Application.mk | 6 - .../sdl/android-project/jni/src/Android.mk | 19 - .../android-project/jni/src/Android_static.mk | 12 - .../sdl/android-project/proguard-project.txt | 20 - .../sdl/android-project/project.properties | 14 - .../res/drawable-hdpi/ic_launcher.png | Bin 2683 -> 0 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 1698 -> 0 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 3872 -> 0 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 6874 -> 0 bytes .../sdl/android-project/res/layout/main.xml | 13 - .../android-project/res/values/strings.xml | 4 - .../src/org/libsdl/app/SDLActivity.java | 1074 -- Engine/lib/sdl/build-scripts/androidbuild.sh | 2 +- .../lib/sdl/build-scripts/checker-buildbot.sh | 93 + Engine/lib/sdl/build-scripts/config.guess | 1 + Engine/lib/sdl/build-scripts/config.sub | 29 + .../sdl/build-scripts/emscripten-buildbot.sh | 72 + Engine/lib/sdl/build-scripts/g++-fat.sh | 4 +- Engine/lib/sdl/build-scripts/gcc-fat.sh | 2 +- Engine/lib/sdl/build-scripts/nacl-buildbot.sh | 57 + Engine/lib/sdl/build-scripts/naclbuild.sh | 105 + .../sdl/build-scripts/raspberrypi-buildbot.sh | 6 +- .../lib/sdl/build-scripts/update-copyright.sh | 9 + .../build-scripts/windows-buildbot-zipper.bat | 31 + Engine/lib/sdl/build-scripts/winrtbuild.bat | 8 + Engine/lib/sdl/build-scripts/winrtbuild.ps1 | 294 + Engine/lib/sdl/cmake/macros.cmake | 2 +- Engine/lib/sdl/cmake/sdlchecks.cmake | 398 +- Engine/lib/sdl/cmake_uninstall.cmake.in | 18 + Engine/lib/sdl/configure | 802 +- Engine/lib/sdl/configure.in | 507 +- Engine/lib/sdl/debian/control | 1 + Engine/lib/sdl/debian/copyright | 12 +- Engine/lib/sdl/include/SDL.h | 47 +- Engine/lib/sdl/include/SDL_assert.h | 45 +- Engine/lib/sdl/include/SDL_atomic.h | 12 +- Engine/lib/sdl/include/SDL_audio.h | 109 +- Engine/lib/sdl/include/SDL_bits.h | 2 +- Engine/lib/sdl/include/SDL_blendmode.h | 4 +- Engine/lib/sdl/include/SDL_clipboard.h | 2 +- Engine/lib/sdl/include/SDL_config.h | 2 +- Engine/lib/sdl/include/SDL_config.h.cmake | 46 +- Engine/lib/sdl/include/SDL_config.h.in | 32 +- Engine/lib/sdl/include/SDL_config_android.h | 13 +- Engine/lib/sdl/include/SDL_config_iphoneos.h | 19 +- Engine/lib/sdl/include/SDL_config_macosx.h | 6 +- Engine/lib/sdl/include/SDL_config_minimal.h | 2 +- Engine/lib/sdl/include/SDL_config_pandora.h | 5 +- Engine/lib/sdl/include/SDL_config_psp.h | 5 +- Engine/lib/sdl/include/SDL_config_windows.h | 13 +- Engine/lib/sdl/include/SDL_config_winrt.h | 42 +- Engine/lib/sdl/include/SDL_config_wiz.h | 6 +- Engine/lib/sdl/include/SDL_copying.h | 2 +- Engine/lib/sdl/include/SDL_cpuinfo.h | 7 +- Engine/lib/sdl/include/SDL_egl.h | 1801 ++- Engine/lib/sdl/include/SDL_endian.h | 6 +- Engine/lib/sdl/include/SDL_error.h | 4 +- Engine/lib/sdl/include/SDL_events.h | 43 +- Engine/lib/sdl/include/SDL_filesystem.h | 4 +- Engine/lib/sdl/include/SDL_gamecontroller.h | 17 +- Engine/lib/sdl/include/SDL_gesture.h | 2 +- Engine/lib/sdl/include/SDL_haptic.h | 34 +- Engine/lib/sdl/include/SDL_hints.h | 232 +- Engine/lib/sdl/include/SDL_joystick.h | 30 +- Engine/lib/sdl/include/SDL_keyboard.h | 2 +- Engine/lib/sdl/include/SDL_keycode.h | 2 +- Engine/lib/sdl/include/SDL_loadso.h | 2 +- Engine/lib/sdl/include/SDL_log.h | 18 +- Engine/lib/sdl/include/SDL_main.h | 20 +- Engine/lib/sdl/include/SDL_messagebox.h | 2 +- Engine/lib/sdl/include/SDL_mouse.h | 78 +- Engine/lib/sdl/include/SDL_mutex.h | 2 +- Engine/lib/sdl/include/SDL_name.h | 2 +- Engine/lib/sdl/include/SDL_opengl.h | 12526 +++------------- Engine/lib/sdl/include/SDL_opengl_glext.h | 11177 ++++++++++++++ Engine/lib/sdl/include/SDL_opengles.h | 2 +- Engine/lib/sdl/include/SDL_opengles2.h | 2756 +--- Engine/lib/sdl/include/SDL_opengles2_gl2.h | 621 + Engine/lib/sdl/include/SDL_opengles2_gl2ext.h | 2050 +++ .../sdl/include/SDL_opengles2_gl2platform.h | 30 + .../sdl/include/SDL_opengles2_khrplatform.h | 282 + Engine/lib/sdl/include/SDL_pixels.h | 33 +- Engine/lib/sdl/include/SDL_platform.h | 27 +- Engine/lib/sdl/include/SDL_power.h | 2 +- Engine/lib/sdl/include/SDL_quit.h | 2 +- Engine/lib/sdl/include/SDL_rect.h | 12 +- Engine/lib/sdl/include/SDL_render.h | 26 +- Engine/lib/sdl/include/SDL_revision.h | 4 +- Engine/lib/sdl/include/SDL_rwops.h | 5 +- Engine/lib/sdl/include/SDL_scancode.h | 2 +- Engine/lib/sdl/include/SDL_shape.h | 2 +- Engine/lib/sdl/include/SDL_stdinc.h | 156 +- Engine/lib/sdl/include/SDL_surface.h | 2 +- Engine/lib/sdl/include/SDL_system.h | 55 +- Engine/lib/sdl/include/SDL_syswm.h | 47 +- Engine/lib/sdl/include/SDL_test.h | 4 +- Engine/lib/sdl/include/SDL_test_assert.h | 10 +- Engine/lib/sdl/include/SDL_test_common.h | 2 +- Engine/lib/sdl/include/SDL_test_compare.h | 6 +- Engine/lib/sdl/include/SDL_test_crc32.h | 26 +- Engine/lib/sdl/include/SDL_test_font.h | 2 +- Engine/lib/sdl/include/SDL_test_fuzzer.h | 6 +- Engine/lib/sdl/include/SDL_test_harness.h | 2 +- Engine/lib/sdl/include/SDL_test_images.h | 2 +- Engine/lib/sdl/include/SDL_test_log.h | 6 +- Engine/lib/sdl/include/SDL_test_md5.h | 20 +- Engine/lib/sdl/include/SDL_test_random.h | 2 +- Engine/lib/sdl/include/SDL_thread.h | 6 +- Engine/lib/sdl/include/SDL_timer.h | 4 +- Engine/lib/sdl/include/SDL_touch.h | 2 +- Engine/lib/sdl/include/SDL_types.h | 2 +- Engine/lib/sdl/include/SDL_version.h | 4 +- Engine/lib/sdl/include/SDL_video.h | 168 +- Engine/lib/sdl/include/begin_code.h | 12 +- Engine/lib/sdl/include/close_code.h | 2 +- Engine/lib/sdl/include/doxyfile | 1555 -- Engine/lib/sdl/sdl2-config.cmake.in | 10 + Engine/lib/sdl/src/SDL.c | 8 +- Engine/lib/sdl/src/SDL_assert.c | 2 +- Engine/lib/sdl/src/SDL_assert_c.h | 2 +- Engine/lib/sdl/src/SDL_error.c | 42 +- Engine/lib/sdl/src/SDL_error_c.h | 2 +- Engine/lib/sdl/src/SDL_hints.c | 8 +- Engine/lib/sdl/src/SDL_internal.h | 2 +- Engine/lib/sdl/src/SDL_log.c | 31 +- Engine/lib/sdl/src/atomic/SDL_atomic.c | 29 +- Engine/lib/sdl/src/atomic/SDL_spinlock.c | 21 +- Engine/lib/sdl/src/audio/SDL_audio.c | 906 +- Engine/lib/sdl/src/audio/SDL_audio_c.h | 2 +- Engine/lib/sdl/src/audio/SDL_audiocvt.c | 2 +- Engine/lib/sdl/src/audio/SDL_audiodev.c | 36 +- Engine/lib/sdl/src/audio/SDL_audiodev_c.h | 5 +- Engine/lib/sdl/src/audio/SDL_audiomem.h | 2 +- Engine/lib/sdl/src/audio/SDL_audiotypecvt.c | 202 +- Engine/lib/sdl/src/audio/SDL_mixer.c | 2 +- Engine/lib/sdl/src/audio/SDL_sysaudio.h | 81 +- Engine/lib/sdl/src/audio/SDL_wave.c | 17 +- Engine/lib/sdl/src/audio/SDL_wave.h | 4 +- .../lib/sdl/src/audio/alsa/SDL_alsa_audio.c | 6 +- .../lib/sdl/src/audio/alsa/SDL_alsa_audio.h | 2 +- .../sdl/src/audio/android/SDL_androidaudio.c | 50 +- .../sdl/src/audio/android/SDL_androidaudio.h | 4 +- Engine/lib/sdl/src/audio/arts/SDL_artsaudio.c | 8 +- Engine/lib/sdl/src/audio/arts/SDL_artsaudio.h | 2 +- Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.c | 14 +- Engine/lib/sdl/src/audio/bsd/SDL_bsdaudio.h | 2 +- .../sdl/src/audio/coreaudio/SDL_coreaudio.c | 339 +- .../sdl/src/audio/coreaudio/SDL_coreaudio.h | 2 +- .../src/audio/directsound/SDL_directsound.c | 67 +- .../src/audio/directsound/SDL_directsound.h | 4 +- Engine/lib/sdl/src/audio/disk/SDL_diskaudio.c | 19 +- Engine/lib/sdl/src/audio/disk/SDL_diskaudio.h | 2 +- Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.c | 12 +- Engine/lib/sdl/src/audio/dsp/SDL_dspaudio.h | 2 +- .../lib/sdl/src/audio/dummy/SDL_dummyaudio.c | 4 +- .../lib/sdl/src/audio/dummy/SDL_dummyaudio.h | 2 +- .../audio/emscripten/SDL_emscriptenaudio.c | 279 + .../audio/emscripten/SDL_emscriptenaudio.h | 42 + Engine/lib/sdl/src/audio/esd/SDL_esdaudio.c | 8 +- Engine/lib/sdl/src/audio/esd/SDL_esdaudio.h | 2 +- .../sdl/src/audio/fusionsound/SDL_fsaudio.c | 6 +- .../sdl/src/audio/fusionsound/SDL_fsaudio.h | 2 +- .../lib/sdl/src/audio/haiku/SDL_haikuaudio.cc | 4 +- .../lib/sdl/src/audio/haiku/SDL_haikuaudio.h | 2 +- Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.c | 152 + Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.h | 41 + Engine/lib/sdl/src/audio/nas/SDL_nasaudio.c | 4 +- Engine/lib/sdl/src/audio/nas/SDL_nasaudio.h | 2 +- Engine/lib/sdl/src/audio/paudio/SDL_paudio.c | 10 +- Engine/lib/sdl/src/audio/paudio/SDL_paudio.h | 2 +- Engine/lib/sdl/src/audio/psp/SDL_pspaudio.c | 10 +- Engine/lib/sdl/src/audio/psp/SDL_pspaudio.h | 4 +- .../sdl/src/audio/pulseaudio/SDL_pulseaudio.c | 357 +- .../sdl/src/audio/pulseaudio/SDL_pulseaudio.h | 5 +- Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.c | 114 +- Engine/lib/sdl/src/audio/qsa/SDL_qsa_audio.h | 2 +- Engine/lib/sdl/src/audio/sdlgenaudiocvt.pl | 5 +- .../lib/sdl/src/audio/sndio/SDL_sndioaudio.c | 41 +- .../lib/sdl/src/audio/sndio/SDL_sndioaudio.h | 2 +- Engine/lib/sdl/src/audio/sun/SDL_sunaudio.c | 14 +- Engine/lib/sdl/src/audio/sun/SDL_sunaudio.h | 2 +- Engine/lib/sdl/src/audio/winmm/SDL_winmm.c | 65 +- Engine/lib/sdl/src/audio/winmm/SDL_winmm.h | 2 +- .../lib/sdl/src/audio/xaudio2/SDL_xaudio2.c | 107 +- .../lib/sdl/src/audio/xaudio2/SDL_xaudio2.h | 386 + .../xaudio2/SDL_xaudio2_winrthelpers.cpp | 2 +- .../audio/xaudio2/SDL_xaudio2_winrthelpers.h | 2 +- Engine/lib/sdl/src/core/android/SDL_android.c | 282 +- Engine/lib/sdl/src/core/android/SDL_android.h | 24 +- Engine/lib/sdl/src/core/linux/SDL_dbus.c | 239 + Engine/lib/sdl/src/core/linux/SDL_dbus.h | 82 + Engine/lib/sdl/src/core/linux/SDL_evdev.c | 51 +- Engine/lib/sdl/src/core/linux/SDL_evdev.h | 2 +- Engine/lib/sdl/src/core/linux/SDL_ibus.c | 680 + Engine/lib/sdl/src/core/linux/SDL_ibus.h | 58 + Engine/lib/sdl/src/core/linux/SDL_udev.c | 148 +- Engine/lib/sdl/src/core/linux/SDL_udev.h | 4 +- .../directx.h => core/windows/SDL_directx.h} | 21 +- Engine/lib/sdl/src/core/windows/SDL_windows.c | 40 +- Engine/lib/sdl/src/core/windows/SDL_windows.h | 5 +- Engine/lib/sdl/src/core/windows/SDL_xinput.c | 139 + .../windows/SDL_xinput.h} | 148 +- .../src/core/winrt/SDL_winrtapp_common.cpp | 2 +- .../sdl/src/core/winrt/SDL_winrtapp_common.h | 2 +- .../src/core/winrt/SDL_winrtapp_direct3d.cpp | 515 +- .../src/core/winrt/SDL_winrtapp_direct3d.h | 18 +- .../sdl/src/core/winrt/SDL_winrtapp_xaml.cpp | 2 +- .../sdl/src/core/winrt/SDL_winrtapp_xaml.h | 4 +- Engine/lib/sdl/src/cpuinfo/SDL_cpuinfo.c | 126 +- Engine/lib/sdl/src/dynapi/SDL_dynapi.c | 41 +- Engine/lib/sdl/src/dynapi/SDL_dynapi.h | 11 +- .../lib/sdl/src/dynapi/SDL_dynapi_overrides.h | 24 +- Engine/lib/sdl/src/dynapi/SDL_dynapi_procs.h | 69 +- Engine/lib/sdl/src/dynapi/gendynapi.pl | 2 +- .../lib/sdl/src/events/SDL_clipboardevents.c | 2 +- .../sdl/src/events/SDL_clipboardevents_c.h | 2 +- Engine/lib/sdl/src/events/SDL_dropevents.c | 2 +- Engine/lib/sdl/src/events/SDL_dropevents_c.h | 2 +- Engine/lib/sdl/src/events/SDL_events.c | 43 +- Engine/lib/sdl/src/events/SDL_events_c.h | 5 +- Engine/lib/sdl/src/events/SDL_gesture.c | 79 +- Engine/lib/sdl/src/events/SDL_gesture_c.h | 2 +- Engine/lib/sdl/src/events/SDL_keyboard.c | 159 +- Engine/lib/sdl/src/events/SDL_keyboard_c.h | 5 +- Engine/lib/sdl/src/events/SDL_mouse.c | 154 +- Engine/lib/sdl/src/events/SDL_mouse_c.h | 15 +- Engine/lib/sdl/src/events/SDL_quit.c | 50 +- Engine/lib/sdl/src/events/SDL_sysevents.h | 2 +- Engine/lib/sdl/src/events/SDL_touch.c | 7 +- Engine/lib/sdl/src/events/SDL_touch_c.h | 2 +- Engine/lib/sdl/src/events/SDL_windowevents.c | 4 +- .../lib/sdl/src/events/SDL_windowevents_c.h | 2 +- Engine/lib/sdl/src/events/blank_cursor.h | 2 +- Engine/lib/sdl/src/events/default_cursor.h | 4 +- Engine/lib/sdl/src/events/scancodes_darwin.h | 2 +- Engine/lib/sdl/src/events/scancodes_linux.h | 2 +- Engine/lib/sdl/src/events/scancodes_windows.h | 6 +- Engine/lib/sdl/src/events/scancodes_xfree86.h | 18 +- Engine/lib/sdl/src/file/SDL_rwops.c | 10 +- .../src/file/cocoa/SDL_rwopsbundlesupport.h | 2 +- .../src/file/cocoa/SDL_rwopsbundlesupport.m | 22 +- .../filesystem/android/SDL_sysfilesystem.c | 62 + .../src/filesystem/cocoa/SDL_sysfilesystem.m | 17 +- .../src/filesystem/dummy/SDL_sysfilesystem.c | 2 +- .../filesystem/emscripten/SDL_sysfilesystem.c | 69 + .../src/filesystem/haiku/SDL_sysfilesystem.cc | 2 +- .../nacl/SDL_sysfilesystem.c} | 38 +- .../src/filesystem/unix/SDL_sysfilesystem.c | 4 +- .../filesystem/windows/SDL_sysfilesystem.c | 54 +- .../filesystem/winrt/SDL_sysfilesystem.cpp | 87 +- Engine/lib/sdl/src/haptic/SDL_haptic.c | 5 +- Engine/lib/sdl/src/haptic/SDL_haptic_c.h | 2 +- Engine/lib/sdl/src/haptic/SDL_syshaptic.h | 14 +- .../lib/sdl/src/haptic/darwin/SDL_syshaptic.c | 172 +- .../sdl/src/haptic/darwin/SDL_syshaptic_c.h | 2 +- .../lib/sdl/src/haptic/dummy/SDL_syshaptic.c | 4 +- .../lib/sdl/src/haptic/linux/SDL_syshaptic.c | 120 +- .../{SDL_syshaptic.c => SDL_dinputhaptic.c} | 1150 +- .../src/haptic/windows/SDL_dinputhaptic_c.h | 47 + .../src/haptic/windows/SDL_windowshaptic.c | 449 + .../src/haptic/windows/SDL_windowshaptic_c.h | 88 + .../sdl/src/haptic/windows/SDL_xinputhaptic.c | 495 + .../src/haptic/windows/SDL_xinputhaptic_c.h | 47 + .../lib/sdl/src/joystick/SDL_gamecontroller.c | 717 +- .../sdl/src/joystick/SDL_gamecontrollerdb.h | 52 +- Engine/lib/sdl/src/joystick/SDL_joystick.c | 191 +- Engine/lib/sdl/src/joystick/SDL_joystick_c.h | 7 +- Engine/lib/sdl/src/joystick/SDL_sysjoystick.h | 25 +- .../src/joystick/android/SDL_sysjoystick.c | 32 +- .../src/joystick/android/SDL_sysjoystick_c.h | 4 +- .../sdl/src/joystick/bsd/SDL_sysjoystick.c | 59 +- .../sdl/src/joystick/darwin/SDL_sysjoystick.c | 272 +- .../src/joystick/darwin/SDL_sysjoystick_c.h | 7 +- .../sdl/src/joystick/dummy/SDL_sysjoystick.c | 16 +- .../src/joystick/emscripten/SDL_sysjoystick.c | 427 + .../joystick/emscripten/SDL_sysjoystick_c.h | 52 + .../src/joystick/haiku/SDL_haikujoystick.cc | 15 +- .../iphoneos/SDLUIAccelerationDelegate.m | 141 - .../src/joystick/iphoneos/SDL_sysjoystick.m | 604 +- .../src/joystick/iphoneos/SDL_sysjoystick_c.h | 55 + .../sdl/src/joystick/linux/SDL_sysjoystick.c | 38 +- .../src/joystick/linux/SDL_sysjoystick_c.h | 2 +- .../sdl/src/joystick/psp/SDL_sysjoystick.c | 24 +- .../lib/sdl/src/joystick/sort_controllers.py | 16 +- .../src/joystick/windows/SDL_dinputjoystick.c | 906 ++ .../joystick/windows/SDL_dinputjoystick_c.h | 30 + .../sdl/src/joystick/windows/SDL_dxjoystick.c | 1683 --- .../sdl/src/joystick/windows/SDL_mmjoystick.c | 16 +- .../joystick/windows/SDL_windowsjoystick.c | 569 + .../joystick/windows/SDL_windowsjoystick_c.h | 88 + .../src/joystick/windows/SDL_xinputjoystick.c | 425 + .../joystick/windows/SDL_xinputjoystick_c.h | 33 + .../src/joystick/winrt/SDL_xinputjoystick.c | 537 - Engine/lib/sdl/src/libm/k_rem_pio2.c | 5 + Engine/lib/sdl/src/libm/k_tan.c | 118 + Engine/lib/sdl/src/libm/math_libm.h | 3 +- Engine/lib/sdl/src/libm/math_private.h | 1 + Engine/lib/sdl/src/libm/s_tan.c | 67 + .../lib/sdl/src/loadso/dlopen/SDL_sysloadso.c | 2 +- .../lib/sdl/src/loadso/dummy/SDL_sysloadso.c | 2 +- .../lib/sdl/src/loadso/haiku/SDL_sysloadso.c | 2 +- .../sdl/src/loadso/windows/SDL_sysloadso.c | 2 +- .../sdl/src/main/android/SDL_android_main.c | 54 +- Engine/lib/sdl/src/main/haiku/SDL_BApp.h | 4 +- Engine/lib/sdl/src/main/haiku/SDL_BeApp.cc | 2 +- Engine/lib/sdl/src/main/haiku/SDL_BeApp.h | 2 +- Engine/lib/sdl/src/main/nacl/SDL_nacl_main.c | 93 + Engine/lib/sdl/src/main/psp/SDL_psp_main.c | 7 + .../sdl/src/main/windows/SDL_windows_main.c | 72 +- Engine/lib/sdl/src/main/windows/version.rc | 10 +- Engine/lib/sdl/src/power/SDL_power.c | 12 +- .../lib/sdl/src/power/android/SDL_syspower.c | 2 +- .../sdl/src/power/emscripten/SDL_syspower.c | 62 + Engine/lib/sdl/src/power/haiku/SDL_syspower.c | 2 +- Engine/lib/sdl/src/power/linux/SDL_syspower.c | 106 +- .../lib/sdl/src/power/macosx/SDL_syspower.c | 6 +- Engine/lib/sdl/src/power/psp/SDL_syspower.c | 2 +- Engine/lib/sdl/src/power/uikit/SDL_syspower.h | 2 +- Engine/lib/sdl/src/power/uikit/SDL_syspower.m | 39 +- .../lib/sdl/src/power/windows/SDL_syspower.c | 2 +- .../lib/sdl/src/power/winrt/SDL_syspower.cpp | 2 +- Engine/lib/sdl/src/render/SDL_d3dmath.c | 7 +- Engine/lib/sdl/src/render/SDL_d3dmath.h | 5 +- Engine/lib/sdl/src/render/SDL_render.c | 74 +- Engine/lib/sdl/src/render/SDL_sysrender.h | 6 +- Engine/lib/sdl/src/render/SDL_yuv_mmx.c | 2 +- Engine/lib/sdl/src/render/SDL_yuv_sw.c | 9 +- Engine/lib/sdl/src/render/SDL_yuv_sw_c.h | 2 +- .../sdl/src/render/direct3d/SDL_render_d3d.c | 469 +- .../src/render/direct3d11/SDL_render_d3d11.c | 182 +- .../render/direct3d11/SDL_render_winrt.cpp | 9 +- .../src/render/direct3d11/SDL_render_winrt.h | 2 +- .../lib/sdl/src/render/opengl/SDL_glfuncs.h | 2 +- .../lib/sdl/src/render/opengl/SDL_render_gl.c | 210 +- .../sdl/src/render/opengl/SDL_shaders_gl.c | 119 +- .../sdl/src/render/opengl/SDL_shaders_gl.h | 6 +- .../sdl/src/render/opengles/SDL_glesfuncs.h | 2 +- .../sdl/src/render/opengles/SDL_render_gles.c | 132 +- .../sdl/src/render/opengles2/SDL_gles2funcs.h | 10 +- .../src/render/opengles2/SDL_render_gles2.c | 882 +- .../src/render/opengles2/SDL_shaders_gles2.c | 147 +- .../src/render/opengles2/SDL_shaders_gles2.h | 7 +- .../lib/sdl/src/render/psp/SDL_render_psp.c | 4 +- .../src/render/software/SDL_blendfillrect.c | 2 +- .../src/render/software/SDL_blendfillrect.h | 2 +- .../sdl/src/render/software/SDL_blendline.c | 2 +- .../sdl/src/render/software/SDL_blendline.h | 2 +- .../sdl/src/render/software/SDL_blendpoint.c | 2 +- .../sdl/src/render/software/SDL_blendpoint.h | 2 +- Engine/lib/sdl/src/render/software/SDL_draw.h | 5 +- .../sdl/src/render/software/SDL_drawline.c | 2 +- .../sdl/src/render/software/SDL_drawline.h | 2 +- .../sdl/src/render/software/SDL_drawpoint.c | 2 +- .../sdl/src/render/software/SDL_drawpoint.h | 2 +- .../sdl/src/render/software/SDL_render_sw.c | 201 +- .../sdl/src/render/software/SDL_render_sw_c.h | 2 +- .../lib/sdl/src/render/software/SDL_rotate.c | 71 +- .../lib/sdl/src/render/software/SDL_rotate.h | 2 +- Engine/lib/sdl/src/stdlib/SDL_getenv.c | 42 +- Engine/lib/sdl/src/stdlib/SDL_iconv.c | 10 +- Engine/lib/sdl/src/stdlib/SDL_malloc.c | 8 +- Engine/lib/sdl/src/stdlib/SDL_qsort.c | 5 + Engine/lib/sdl/src/stdlib/SDL_stdlib.c | 84 +- Engine/lib/sdl/src/stdlib/SDL_string.c | 59 +- Engine/lib/sdl/src/test/SDL_test_assert.c | 12 +- Engine/lib/sdl/src/test/SDL_test_common.c | 53 +- Engine/lib/sdl/src/test/SDL_test_compare.c | 10 +- Engine/lib/sdl/src/test/SDL_test_crc32.c | 2 +- Engine/lib/sdl/src/test/SDL_test_font.c | 2 +- Engine/lib/sdl/src/test/SDL_test_fuzzer.c | 3 +- Engine/lib/sdl/src/test/SDL_test_harness.c | 16 +- Engine/lib/sdl/src/test/SDL_test_imageBlit.c | 2 +- .../sdl/src/test/SDL_test_imageBlitBlend.c | 2 +- Engine/lib/sdl/src/test/SDL_test_imageFace.c | 2 +- .../sdl/src/test/SDL_test_imagePrimitives.c | 2 +- .../src/test/SDL_test_imagePrimitivesBlend.c | 2 +- Engine/lib/sdl/src/test/SDL_test_log.c | 6 +- Engine/lib/sdl/src/test/SDL_test_md5.c | 2 +- Engine/lib/sdl/src/test/SDL_test_random.c | 2 +- Engine/lib/sdl/src/thread/SDL_systhread.h | 2 +- Engine/lib/sdl/src/thread/SDL_thread.c | 8 +- Engine/lib/sdl/src/thread/SDL_thread_c.h | 2 +- .../lib/sdl/src/thread/generic/SDL_syscond.c | 2 +- .../lib/sdl/src/thread/generic/SDL_sysmutex.c | 2 +- .../sdl/src/thread/generic/SDL_sysmutex_c.h | 2 +- .../lib/sdl/src/thread/generic/SDL_syssem.c | 2 +- .../sdl/src/thread/generic/SDL_systhread.c | 2 +- .../sdl/src/thread/generic/SDL_systhread_c.h | 2 +- .../lib/sdl/src/thread/generic/SDL_systls.c | 2 +- Engine/lib/sdl/src/thread/psp/SDL_syscond.c | 6 +- Engine/lib/sdl/src/thread/psp/SDL_sysmutex.c | 6 +- .../lib/sdl/src/thread/psp/SDL_sysmutex_c.h | 2 +- Engine/lib/sdl/src/thread/psp/SDL_syssem.c | 9 +- Engine/lib/sdl/src/thread/psp/SDL_systhread.c | 6 +- .../lib/sdl/src/thread/psp/SDL_systhread_c.h | 2 +- .../lib/sdl/src/thread/pthread/SDL_syscond.c | 12 +- .../lib/sdl/src/thread/pthread/SDL_sysmutex.c | 6 +- .../sdl/src/thread/pthread/SDL_sysmutex_c.h | 2 +- .../lib/sdl/src/thread/pthread/SDL_syssem.c | 32 +- .../sdl/src/thread/pthread/SDL_systhread.c | 29 +- .../sdl/src/thread/pthread/SDL_systhread_c.h | 2 +- .../lib/sdl/src/thread/pthread/SDL_systls.c | 2 +- .../lib/sdl/src/thread/stdcpp/SDL_syscond.cpp | 4 +- .../sdl/src/thread/stdcpp/SDL_sysmutex.cpp | 2 +- .../sdl/src/thread/stdcpp/SDL_sysmutex_c.h | 2 +- .../sdl/src/thread/stdcpp/SDL_systhread.cpp | 2 +- .../sdl/src/thread/stdcpp/SDL_systhread_c.h | 2 +- .../lib/sdl/src/thread/windows/SDL_sysmutex.c | 6 +- .../lib/sdl/src/thread/windows/SDL_syssem.c | 10 +- .../sdl/src/thread/windows/SDL_systhread.c | 8 +- .../sdl/src/thread/windows/SDL_systhread_c.h | 2 +- .../lib/sdl/src/thread/windows/SDL_systls.c | 2 +- Engine/lib/sdl/src/timer/SDL_timer.c | 2 +- Engine/lib/sdl/src/timer/SDL_timer_c.h | 2 +- Engine/lib/sdl/src/timer/dummy/SDL_systimer.c | 2 +- Engine/lib/sdl/src/timer/haiku/SDL_systimer.c | 2 +- Engine/lib/sdl/src/timer/psp/SDL_systimer.c | 7 +- Engine/lib/sdl/src/timer/unix/SDL_systimer.c | 30 +- .../lib/sdl/src/timer/windows/SDL_systimer.c | 84 +- Engine/lib/sdl/src/video/SDL_RLEaccel.c | 589 +- Engine/lib/sdl/src/video/SDL_RLEaccel_c.h | 2 +- Engine/lib/sdl/src/video/SDL_blit.c | 2 +- Engine/lib/sdl/src/video/SDL_blit.h | 20 +- Engine/lib/sdl/src/video/SDL_blit_0.c | 2 +- Engine/lib/sdl/src/video/SDL_blit_1.c | 2 +- Engine/lib/sdl/src/video/SDL_blit_A.c | 8 +- Engine/lib/sdl/src/video/SDL_blit_N.c | 42 +- Engine/lib/sdl/src/video/SDL_blit_auto.c | 580 +- Engine/lib/sdl/src/video/SDL_blit_auto.h | 2 +- Engine/lib/sdl/src/video/SDL_blit_copy.c | 2 +- Engine/lib/sdl/src/video/SDL_blit_copy.h | 2 +- Engine/lib/sdl/src/video/SDL_blit_slow.c | 2 +- Engine/lib/sdl/src/video/SDL_blit_slow.h | 2 +- Engine/lib/sdl/src/video/SDL_bmp.c | 155 +- Engine/lib/sdl/src/video/SDL_clipboard.c | 16 +- Engine/lib/sdl/src/video/SDL_egl.c | 225 +- Engine/lib/sdl/src/video/SDL_egl_c.h | 2 +- Engine/lib/sdl/src/video/SDL_fillrect.c | 30 +- Engine/lib/sdl/src/video/SDL_pixels.c | 8 +- Engine/lib/sdl/src/video/SDL_pixels_c.h | 2 +- Engine/lib/sdl/src/video/SDL_rect.c | 2 +- Engine/lib/sdl/src/video/SDL_rect_c.h | 2 +- Engine/lib/sdl/src/video/SDL_shape.c | 31 +- .../lib/sdl/src/video/SDL_shape_internals.h | 2 +- Engine/lib/sdl/src/video/SDL_stretch.c | 2 +- Engine/lib/sdl/src/video/SDL_surface.c | 266 +- Engine/lib/sdl/src/video/SDL_sysvideo.h | 31 +- Engine/lib/sdl/src/video/SDL_video.c | 611 +- .../src/video/android/SDL_androidclipboard.c | 2 +- .../src/video/android/SDL_androidclipboard.h | 2 +- .../sdl/src/video/android/SDL_androidevents.c | 19 +- .../sdl/src/video/android/SDL_androidevents.h | 2 +- .../lib/sdl/src/video/android/SDL_androidgl.c | 12 +- .../src/video/android/SDL_androidkeyboard.c | 59 +- .../src/video/android/SDL_androidkeyboard.h | 2 +- .../src/video/android/SDL_androidmessagebox.c | 37 + .../android/SDL_androidmessagebox.h} | 13 +- .../sdl/src/video/android/SDL_androidmouse.c | 84 + .../sdl/src/video/android/SDL_androidmouse.h | 31 + .../sdl/src/video/android/SDL_androidtouch.c | 69 +- .../sdl/src/video/android/SDL_androidtouch.h | 3 +- .../sdl/src/video/android/SDL_androidvideo.c | 21 +- .../sdl/src/video/android/SDL_androidvideo.h | 4 +- .../sdl/src/video/android/SDL_androidwindow.c | 23 +- .../sdl/src/video/android/SDL_androidwindow.h | 3 +- .../sdl/src/video/cocoa/SDL_cocoaclipboard.h | 2 +- .../sdl/src/video/cocoa/SDL_cocoaclipboard.m | 32 +- .../lib/sdl/src/video/cocoa/SDL_cocoaevents.h | 3 +- .../lib/sdl/src/video/cocoa/SDL_cocoaevents.m | 185 +- .../sdl/src/video/cocoa/SDL_cocoakeyboard.h | 2 +- .../sdl/src/video/cocoa/SDL_cocoakeyboard.m | 161 +- .../sdl/src/video/cocoa/SDL_cocoamessagebox.h | 2 +- .../sdl/src/video/cocoa/SDL_cocoamessagebox.m | 25 +- .../lib/sdl/src/video/cocoa/SDL_cocoamodes.h | 2 +- .../lib/sdl/src/video/cocoa/SDL_cocoamodes.m | 87 +- .../lib/sdl/src/video/cocoa/SDL_cocoamouse.h | 2 +- .../lib/sdl/src/video/cocoa/SDL_cocoamouse.m | 157 +- .../sdl/src/video/cocoa/SDL_cocoamousetap.h | 2 +- .../sdl/src/video/cocoa/SDL_cocoamousetap.m | 5 +- .../lib/sdl/src/video/cocoa/SDL_cocoaopengl.h | 2 +- .../lib/sdl/src/video/cocoa/SDL_cocoaopengl.m | 67 +- .../lib/sdl/src/video/cocoa/SDL_cocoashape.h | 2 +- .../lib/sdl/src/video/cocoa/SDL_cocoashape.m | 22 +- .../lib/sdl/src/video/cocoa/SDL_cocoavideo.h | 7 +- .../lib/sdl/src/video/cocoa/SDL_cocoavideo.m | 19 +- .../lib/sdl/src/video/cocoa/SDL_cocoawindow.h | 19 +- .../lib/sdl/src/video/cocoa/SDL_cocoawindow.m | 584 +- .../sdl/src/video/directfb/SDL_DirectFB_WM.c | 4 +- .../sdl/src/video/directfb/SDL_DirectFB_WM.h | 2 +- .../sdl/src/video/directfb/SDL_DirectFB_dyn.c | 2 +- .../sdl/src/video/directfb/SDL_DirectFB_dyn.h | 2 +- .../src/video/directfb/SDL_DirectFB_events.c | 2 +- .../src/video/directfb/SDL_DirectFB_events.h | 2 +- .../src/video/directfb/SDL_DirectFB_modes.c | 2 +- .../src/video/directfb/SDL_DirectFB_modes.h | 2 +- .../src/video/directfb/SDL_DirectFB_mouse.c | 2 +- .../src/video/directfb/SDL_DirectFB_mouse.h | 2 +- .../src/video/directfb/SDL_DirectFB_opengl.c | 2 +- .../src/video/directfb/SDL_DirectFB_opengl.h | 2 +- .../src/video/directfb/SDL_DirectFB_render.c | 4 +- .../src/video/directfb/SDL_DirectFB_render.h | 2 +- .../src/video/directfb/SDL_DirectFB_shape.c | 2 +- .../src/video/directfb/SDL_DirectFB_shape.h | 2 +- .../src/video/directfb/SDL_DirectFB_video.c | 6 +- .../src/video/directfb/SDL_DirectFB_video.h | 2 +- .../src/video/directfb/SDL_DirectFB_window.c | 4 +- .../src/video/directfb/SDL_DirectFB_window.h | 2 +- .../lib/sdl/src/video/dummy/SDL_nullevents.c | 2 +- .../sdl/src/video/dummy/SDL_nullevents_c.h | 2 +- .../sdl/src/video/dummy/SDL_nullframebuffer.c | 2 +- .../src/video/dummy/SDL_nullframebuffer_c.h | 2 +- .../lib/sdl/src/video/dummy/SDL_nullvideo.c | 3 +- .../lib/sdl/src/video/dummy/SDL_nullvideo.h | 2 +- .../video/emscripten/SDL_emscriptenevents.c | 644 + .../video/emscripten/SDL_emscriptenevents.h | 36 + .../emscripten/SDL_emscriptenframebuffer.c | 136 + .../emscripten/SDL_emscriptenframebuffer.h | 32 + .../video/emscripten/SDL_emscriptenmouse.c | 232 + .../video/emscripten/SDL_emscriptenmouse.h | 39 + .../video/emscripten/SDL_emscriptenopengles.c | 117 + .../video/emscripten/SDL_emscriptenopengles.h | 49 + .../video/emscripten/SDL_emscriptenvideo.c | 319 + .../video/emscripten/SDL_emscriptenvideo.h | 52 + Engine/lib/sdl/src/video/haiku/SDL_BWin.h | 2 +- .../lib/sdl/src/video/haiku/SDL_bclipboard.cc | 2 +- .../lib/sdl/src/video/haiku/SDL_bclipboard.h | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bevents.cc | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bevents.h | 2 +- .../sdl/src/video/haiku/SDL_bframebuffer.cc | 2 +- .../sdl/src/video/haiku/SDL_bframebuffer.h | 2 +- .../lib/sdl/src/video/haiku/SDL_bkeyboard.cc | 2 +- .../lib/sdl/src/video/haiku/SDL_bkeyboard.h | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bmodes.cc | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bmodes.h | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bopengl.cc | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bopengl.h | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bvideo.cc | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bvideo.h | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bwindow.cc | 2 +- Engine/lib/sdl/src/video/haiku/SDL_bwindow.h | 2 +- Engine/lib/sdl/src/video/mir/SDL_mirdyn.c | 2 +- Engine/lib/sdl/src/video/mir/SDL_mirdyn.h | 2 +- Engine/lib/sdl/src/video/mir/SDL_mirevents.c | 30 +- Engine/lib/sdl/src/video/mir/SDL_mirevents.h | 2 +- .../sdl/src/video/mir/SDL_mirframebuffer.c | 4 +- .../sdl/src/video/mir/SDL_mirframebuffer.h | 2 +- Engine/lib/sdl/src/video/mir/SDL_mirmouse.c | 9 +- Engine/lib/sdl/src/video/mir/SDL_mirmouse.h | 2 +- Engine/lib/sdl/src/video/mir/SDL_miropengl.c | 2 +- Engine/lib/sdl/src/video/mir/SDL_miropengl.h | 2 +- Engine/lib/sdl/src/video/mir/SDL_mirsym.h | 7 +- Engine/lib/sdl/src/video/mir/SDL_mirvideo.c | 4 +- Engine/lib/sdl/src/video/mir/SDL_mirvideo.h | 4 +- Engine/lib/sdl/src/video/mir/SDL_mirwindow.c | 21 +- Engine/lib/sdl/src/video/mir/SDL_mirwindow.h | 4 +- .../lib/sdl/src/video/nacl/SDL_naclevents.c | 438 + .../lib/sdl/src/video/nacl/SDL_naclevents_c.h | 30 + Engine/lib/sdl/src/video/nacl/SDL_naclglue.c | 24 + .../lib/sdl/src/video/nacl/SDL_naclopengles.c | 171 + .../lib/sdl/src/video/nacl/SDL_naclopengles.h | 38 + Engine/lib/sdl/src/video/nacl/SDL_naclvideo.c | 183 + Engine/lib/sdl/src/video/nacl/SDL_naclvideo.h | 67 + .../lib/sdl/src/video/nacl/SDL_naclwindow.c | 79 + .../lib/sdl/src/video/nacl/SDL_naclwindow.h | 32 + .../lib/sdl/src/video/pandora/SDL_pandora.c | 2 +- .../lib/sdl/src/video/pandora/SDL_pandora.h | 2 +- .../src/video/pandora/SDL_pandora_events.c | 2 +- .../src/video/pandora/SDL_pandora_events.h | 2 +- Engine/lib/sdl/src/video/psp/SDL_pspevents.c | 12 +- .../lib/sdl/src/video/psp/SDL_pspevents_c.h | 2 +- Engine/lib/sdl/src/video/psp/SDL_pspgl.c | 8 +- Engine/lib/sdl/src/video/psp/SDL_pspgl_c.h | 2 +- Engine/lib/sdl/src/video/psp/SDL_pspmouse.c | 8 +- Engine/lib/sdl/src/video/psp/SDL_pspmouse_c.h | 2 +- Engine/lib/sdl/src/video/psp/SDL_pspvideo.c | 6 +- Engine/lib/sdl/src/video/psp/SDL_pspvideo.h | 8 +- .../sdl/src/video/raspberry/SDL_rpievents.c | 2 +- .../sdl/src/video/raspberry/SDL_rpievents_c.h | 2 +- .../sdl/src/video/raspberry/SDL_rpimouse.c | 16 +- .../sdl/src/video/raspberry/SDL_rpimouse.h | 2 +- .../sdl/src/video/raspberry/SDL_rpiopengles.c | 2 +- .../sdl/src/video/raspberry/SDL_rpiopengles.h | 2 +- .../sdl/src/video/raspberry/SDL_rpivideo.c | 13 +- .../sdl/src/video/raspberry/SDL_rpivideo.h | 2 +- Engine/lib/sdl/src/video/sdlgenblit.pl | 79 +- .../src/video/uikit/SDL_uikitappdelegate.h | 17 +- .../src/video/uikit/SDL_uikitappdelegate.m | 367 +- .../lib/sdl/src/video/uikit/SDL_uikitevents.h | 2 +- .../lib/sdl/src/video/uikit/SDL_uikitevents.m | 5 +- .../sdl/src/video/uikit/SDL_uikitmessagebox.h | 2 +- .../sdl/src/video/uikit/SDL_uikitmessagebox.m | 182 +- .../lib/sdl/src/video/uikit/SDL_uikitmodes.h | 22 +- .../lib/sdl/src/video/uikit/SDL_uikitmodes.m | 218 +- .../sdl/src/video/uikit/SDL_uikitopengles.h | 4 +- .../sdl/src/video/uikit/SDL_uikitopengles.m | 239 +- .../sdl/src/video/uikit/SDL_uikitopenglview.h | 74 +- .../sdl/src/video/uikit/SDL_uikitopenglview.m | 382 +- .../lib/sdl/src/video/uikit/SDL_uikitvideo.h | 18 +- .../lib/sdl/src/video/uikit/SDL_uikitvideo.m | 49 +- .../lib/sdl/src/video/uikit/SDL_uikitview.h | 49 +- .../lib/sdl/src/video/uikit/SDL_uikitview.m | 471 +- .../src/video/uikit/SDL_uikitviewcontroller.h | 52 +- .../src/video/uikit/SDL_uikitviewcontroller.m | 378 +- .../lib/sdl/src/video/uikit/SDL_uikitwindow.h | 25 +- .../lib/sdl/src/video/uikit/SDL_uikitwindow.m | 470 +- Engine/lib/sdl/src/video/uikit/keyinfotable.h | 4 +- .../src/video/vivante/SDL_vivanteopengles.c | 47 + .../src/video/vivante/SDL_vivanteopengles.h | 48 + .../src/video/vivante/SDL_vivanteplatform.c | 44 + .../src/video/vivante/SDL_vivanteplatform.h | 45 + .../sdl/src/video/vivante/SDL_vivantevideo.c | 399 + .../sdl/src/video/vivante/SDL_vivantevideo.h | 91 + .../sdl/src/video/wayland/SDL_waylanddyn.c | 2 +- .../sdl/src/video/wayland/SDL_waylanddyn.h | 2 +- .../sdl/src/video/wayland/SDL_waylandevents.c | 67 +- .../src/video/wayland/SDL_waylandevents_c.h | 2 +- .../sdl/src/video/wayland/SDL_waylandmouse.c | 67 +- .../sdl/src/video/wayland/SDL_waylandmouse.h | 2 +- .../src/video/wayland/SDL_waylandopengles.c | 2 +- .../src/video/wayland/SDL_waylandopengles.h | 2 +- .../sdl/src/video/wayland/SDL_waylandsym.h | 2 +- .../sdl/src/video/wayland/SDL_waylandtouch.c | 23 +- .../sdl/src/video/wayland/SDL_waylandtouch.h | 2 +- .../sdl/src/video/wayland/SDL_waylandvideo.c | 208 +- .../sdl/src/video/wayland/SDL_waylandvideo.h | 17 +- .../sdl/src/video/wayland/SDL_waylandwindow.c | 35 +- .../sdl/src/video/wayland/SDL_waylandwindow.h | 3 +- Engine/lib/sdl/src/video/windows/SDL_msctf.h | 2 +- Engine/lib/sdl/src/video/windows/SDL_vkeys.h | 2 +- .../src/video/windows/SDL_windowsclipboard.c | 2 +- .../src/video/windows/SDL_windowsclipboard.h | 2 +- .../sdl/src/video/windows/SDL_windowsevents.c | 419 +- .../sdl/src/video/windows/SDL_windowsevents.h | 2 +- .../video/windows/SDL_windowsframebuffer.c | 5 +- .../video/windows/SDL_windowsframebuffer.h | 2 +- .../src/video/windows/SDL_windowskeyboard.c | 48 +- .../src/video/windows/SDL_windowskeyboard.h | 2 +- .../src/video/windows/SDL_windowsmessagebox.c | 11 +- .../src/video/windows/SDL_windowsmessagebox.h | 2 +- .../sdl/src/video/windows/SDL_windowsmodes.c | 135 +- .../sdl/src/video/windows/SDL_windowsmodes.h | 10 +- .../sdl/src/video/windows/SDL_windowsmouse.c | 105 +- .../sdl/src/video/windows/SDL_windowsmouse.h | 2 +- .../sdl/src/video/windows/SDL_windowsopengl.c | 60 +- .../sdl/src/video/windows/SDL_windowsopengl.h | 3 +- .../src/video/windows/SDL_windowsopengles.c | 5 +- .../src/video/windows/SDL_windowsopengles.h | 2 +- .../sdl/src/video/windows/SDL_windowsshape.c | 2 +- .../sdl/src/video/windows/SDL_windowsshape.h | 2 +- .../sdl/src/video/windows/SDL_windowsvideo.c | 359 +- .../sdl/src/video/windows/SDL_windowsvideo.h | 23 +- .../sdl/src/video/windows/SDL_windowswindow.c | 103 +- .../sdl/src/video/windows/SDL_windowswindow.h | 11 +- Engine/lib/sdl/src/video/windows/wmmsg.h | 12 +- .../sdl/src/video/winrt/SDL_winrtevents.cpp | 2 +- .../sdl/src/video/winrt/SDL_winrtevents_c.h | 5 +- .../sdl/src/video/winrt/SDL_winrtkeyboard.cpp | 471 +- .../src/video/winrt/SDL_winrtmessagebox.cpp | 112 + .../sdl/src/video/winrt/SDL_winrtmessagebox.h | 29 + .../sdl/src/video/winrt/SDL_winrtmouse.cpp | 2 +- .../sdl/src/video/winrt/SDL_winrtmouse_c.h | 4 +- .../sdl/src/video/winrt/SDL_winrtopengles.cpp | 164 +- .../sdl/src/video/winrt/SDL_winrtopengles.h | 26 +- .../src/video/winrt/SDL_winrtpointerinput.cpp | 40 +- .../sdl/src/video/winrt/SDL_winrtvideo.cpp | 605 +- .../sdl/src/video/winrt/SDL_winrtvideo_cpp.h | 56 +- .../lib/sdl/src/video/x11/SDL_x11clipboard.c | 19 +- .../lib/sdl/src/video/x11/SDL_x11clipboard.h | 3 +- Engine/lib/sdl/src/video/x11/SDL_x11dyn.c | 4 +- Engine/lib/sdl/src/video/x11/SDL_x11dyn.h | 5 +- Engine/lib/sdl/src/video/x11/SDL_x11events.c | 613 +- Engine/lib/sdl/src/video/x11/SDL_x11events.h | 2 +- .../sdl/src/video/x11/SDL_x11framebuffer.c | 2 +- .../sdl/src/video/x11/SDL_x11framebuffer.h | 2 +- .../lib/sdl/src/video/x11/SDL_x11keyboard.c | 125 +- .../lib/sdl/src/video/x11/SDL_x11keyboard.h | 5 +- .../lib/sdl/src/video/x11/SDL_x11messagebox.c | 91 +- .../lib/sdl/src/video/x11/SDL_x11messagebox.h | 2 +- Engine/lib/sdl/src/video/x11/SDL_x11modes.c | 439 +- Engine/lib/sdl/src/video/x11/SDL_x11modes.h | 6 +- Engine/lib/sdl/src/video/x11/SDL_x11mouse.c | 77 +- Engine/lib/sdl/src/video/x11/SDL_x11mouse.h | 2 +- Engine/lib/sdl/src/video/x11/SDL_x11opengl.c | 243 +- Engine/lib/sdl/src/video/x11/SDL_x11opengl.h | 5 +- .../lib/sdl/src/video/x11/SDL_x11opengles.c | 6 +- .../lib/sdl/src/video/x11/SDL_x11opengles.h | 2 +- Engine/lib/sdl/src/video/x11/SDL_x11shape.c | 2 +- Engine/lib/sdl/src/video/x11/SDL_x11shape.h | 2 +- Engine/lib/sdl/src/video/x11/SDL_x11sym.h | 23 +- Engine/lib/sdl/src/video/x11/SDL_x11touch.c | 2 +- Engine/lib/sdl/src/video/x11/SDL_x11touch.h | 2 +- Engine/lib/sdl/src/video/x11/SDL_x11video.c | 228 +- Engine/lib/sdl/src/video/x11/SDL_x11video.h | 19 +- Engine/lib/sdl/src/video/x11/SDL_x11window.c | 123 +- Engine/lib/sdl/src/video/x11/SDL_x11window.h | 6 +- Engine/lib/sdl/src/video/x11/SDL_x11xinput2.c | 24 +- Engine/lib/sdl/src/video/x11/SDL_x11xinput2.h | 2 +- Engine/lib/sdl/src/video/x11/edid-parse.c | 2 +- Engine/lib/sdl/test/COPYING | 8 + Engine/lib/sdl/test/Makefile.in | 283 + Engine/lib/sdl/test/README | 23 +- Engine/lib/sdl/test/acinclude.m4 | 359 + Engine/lib/sdl/test/aclocal.m4 | 359 + Engine/lib/sdl/test/autogen.sh | 12 + Engine/lib/sdl/test/axis.bmp | Bin 0 -> 3746 bytes Engine/lib/sdl/test/button.bmp | Bin 0 -> 3746 bytes Engine/lib/sdl/test/checkkeys.c | 236 + Engine/lib/sdl/test/configure | 5124 +++++++ Engine/lib/sdl/test/configure.in | 191 + Engine/lib/sdl/test/controllermap.bmp | Bin 0 -> 163450 bytes Engine/lib/sdl/test/controllermap.c | 440 + .../lib/sdl/test/emscripten/joystick-pre.js | 25 + Engine/lib/sdl/test/gcc-fat.sh | 110 + .../{Xcode-iOS/Demos/data => test}/icon.bmp | Bin Engine/lib/sdl/test/loopwave.c | 161 + Engine/lib/sdl/test/loopwavequeue.c | 150 + Engine/lib/sdl/test/moose.dat | Bin 0 -> 56320 bytes Engine/lib/sdl/test/nacl/Makefile | 63 + Engine/lib/sdl/test/nacl/background.js | 40 + Engine/lib/sdl/test/nacl/common.js | 469 + Engine/lib/sdl/test/nacl/index.html | 21 + Engine/lib/sdl/test/nacl/manifest.json | 22 + Engine/lib/sdl/test/picture.xbm | 14 + Engine/lib/sdl/test/relative_mode.markdown | 58 + Engine/lib/sdl/test/sample.bmp | Bin 0 -> 69202 bytes Engine/lib/sdl/test/sample.wav | Bin 0 -> 121946 bytes Engine/lib/sdl/test/shapes/p01_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p01_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p01_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p02_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p02_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p02_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p03_shape24.bmp | Bin 0 -> 1228938 bytes Engine/lib/sdl/test/shapes/p03_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p04_shape1.bmp | Bin 0 -> 51346 bytes Engine/lib/sdl/test/shapes/p04_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p04_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p04_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p05_shape8.bmp | Bin 0 -> 410678 bytes .../lib/sdl/test/shapes/p06_shape1alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p06_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p06_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p06_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p07_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p07_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p07_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p08_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p08_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p08_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p09_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p09_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p09_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p10_shape1.bmp | Bin 0 -> 51346 bytes Engine/lib/sdl/test/shapes/p10_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p10_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p10_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p11_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p11_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p11_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p12_shape24.bmp | Bin 0 -> 1228938 bytes Engine/lib/sdl/test/shapes/p12_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p13_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p13_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p13_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p14_shape24.bmp | Bin 0 -> 1228938 bytes Engine/lib/sdl/test/shapes/p14_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p15_shape24.bmp | Bin 0 -> 1228938 bytes .../lib/sdl/test/shapes/p15_shape32alpha.bmp | Bin 0 -> 1638538 bytes Engine/lib/sdl/test/shapes/p15_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/p16_shape1.bmp | Bin 0 -> 51346 bytes Engine/lib/sdl/test/shapes/p16_shape24.bmp | Bin 0 -> 1228938 bytes Engine/lib/sdl/test/shapes/p16_shape8.bmp | Bin 0 -> 410678 bytes Engine/lib/sdl/test/shapes/trollface_24.bmp | Bin 0 -> 196662 bytes .../lib/sdl/test/shapes/trollface_32alpha.bmp | Bin 0 -> 262198 bytes Engine/lib/sdl/test/testatomic.c | 724 + Engine/lib/sdl/test/testaudiohotplug.c | 183 + Engine/lib/sdl/test/testaudioinfo.c | 70 + Engine/lib/sdl/test/testautomation.c | 124 + Engine/lib/sdl/test/testautomation_audio.c | 1038 ++ .../lib/sdl/test/testautomation_clipboard.c | 184 + Engine/lib/sdl/test/testautomation_events.c | 201 + Engine/lib/sdl/test/testautomation_hints.c | 168 + Engine/lib/sdl/test/testautomation_keyboard.c | 713 + Engine/lib/sdl/test/testautomation_main.c | 157 + Engine/lib/sdl/test/testautomation_mouse.c | 594 + Engine/lib/sdl/test/testautomation_pixels.c | 529 + Engine/lib/sdl/test/testautomation_platform.c | 584 + Engine/lib/sdl/test/testautomation_rect.c | 1696 +++ Engine/lib/sdl/test/testautomation_render.c | 1099 ++ Engine/lib/sdl/test/testautomation_rwops.c | 748 + Engine/lib/sdl/test/testautomation_sdltest.c | 1315 ++ Engine/lib/sdl/test/testautomation_stdlib.c | 279 + Engine/lib/sdl/test/testautomation_suites.h | 54 + Engine/lib/sdl/test/testautomation_surface.c | 647 + Engine/lib/sdl/test/testautomation_syswm.c | 61 + Engine/lib/sdl/test/testautomation_timer.c | 201 + Engine/lib/sdl/test/testautomation_video.c | 1811 +++ Engine/lib/sdl/test/testdisplayinfo.c | 89 + Engine/lib/sdl/test/testdraw2.c | 305 + Engine/lib/sdl/test/testdrawchessboard.c | 135 + Engine/lib/sdl/test/testdropfile.c | 93 + Engine/lib/sdl/test/testerror.c | 77 + Engine/lib/sdl/test/testfile.c | 283 + Engine/lib/sdl/test/testfilesystem.c | 52 + Engine/lib/sdl/test/testgamecontroller.c | 348 + Engine/lib/sdl/test/testgesture.c | 310 + Engine/lib/sdl/test/testgl2.c | 416 + Engine/lib/sdl/test/testgles.c | 355 + Engine/lib/sdl/test/testgles2.c | 731 + Engine/lib/sdl/test/testhaptic.c | 369 + Engine/lib/sdl/test/testhittesting.c | 134 + Engine/lib/sdl/test/testhotplug.c | 162 + Engine/lib/sdl/test/testiconv.c | 88 + Engine/lib/sdl/test/testime.c | 373 + Engine/lib/sdl/test/testintersections.c | 363 + Engine/lib/sdl/test/testjoystick.c | 346 + Engine/lib/sdl/test/testkeys.c | 40 + Engine/lib/sdl/test/testloadso.c | 82 + Engine/lib/sdl/test/testlock.c | 126 + Engine/lib/sdl/test/testmessage.c | 193 + Engine/lib/sdl/test/testmultiaudio.c | 200 + Engine/lib/sdl/test/testnative.c | 237 + Engine/lib/sdl/test/testnative.h | 46 + Engine/lib/sdl/test/testnativecocoa.m | 51 + Engine/lib/sdl/test/testnativew32.c | 86 + Engine/lib/sdl/test/testnativex11.c | 53 + Engine/lib/sdl/test/testoverlay2.c | 511 + Engine/lib/sdl/test/testplatform.c | 204 + Engine/lib/sdl/test/testpower.c | 80 + Engine/lib/sdl/test/testrelative.c | 126 + Engine/lib/sdl/test/testrendercopyex.c | 233 + Engine/lib/sdl/test/testrendertarget.c | 335 + Engine/lib/sdl/test/testresample.c | 118 + Engine/lib/sdl/test/testrumble.c | 152 + Engine/lib/sdl/test/testscale.c | 224 + Engine/lib/sdl/test/testsem.c | 130 + Engine/lib/sdl/test/testshader.c | 500 + Engine/lib/sdl/test/testshape.c | 201 + Engine/lib/sdl/test/testsprite2.c | 401 + Engine/lib/sdl/test/testspriteminimal.c | 194 + Engine/lib/sdl/test/teststreaming.c | 190 + Engine/lib/sdl/test/testthread.c | 98 + Engine/lib/sdl/test/testtimer.c | 122 + Engine/lib/sdl/test/testver.c | 47 + Engine/lib/sdl/test/testviewport.c | 217 + Engine/lib/sdl/test/testwm2.c | 159 + Engine/lib/sdl/test/torturethread.c | 113 + Engine/lib/sdl/test/utf8.txt | 287 + 924 files changed, 78781 insertions(+), 39474 deletions(-) delete mode 100644 Engine/lib/sdl/README-android.txt delete mode 100644 Engine/lib/sdl/README-cmake.txt delete mode 100644 Engine/lib/sdl/README-directfb.txt delete mode 100644 Engine/lib/sdl/README-dynapi.txt delete mode 100644 Engine/lib/sdl/README-gesture.txt delete mode 100644 Engine/lib/sdl/README-hg.txt delete mode 100644 Engine/lib/sdl/README-ios.txt delete mode 100644 Engine/lib/sdl/README-linux.txt delete mode 100644 Engine/lib/sdl/README-macosx.txt delete mode 100644 Engine/lib/sdl/README-pandora.txt delete mode 100644 Engine/lib/sdl/README-platforms.txt delete mode 100644 Engine/lib/sdl/README-porting.txt delete mode 100644 Engine/lib/sdl/README-psp.txt delete mode 100644 Engine/lib/sdl/README-raspberrypi.txt delete mode 100644 Engine/lib/sdl/README-touch.txt delete mode 100644 Engine/lib/sdl/README-wince.txt delete mode 100644 Engine/lib/sdl/README-windows.txt delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/Default.png delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/Demos.xcodeproj/project.pbxproj delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/Icon.png delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/Info.plist delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/README delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/kromasky_16x16.bmp delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/license.txt delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_brush_snare.wav delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_china.wav delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_kick_big_amb.wav delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_loose_skin_mute.wav delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/ship.bmp delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/space.bmp delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/data/stroke.bmp delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/accelerometer.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/common.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/common.h delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/fireworks.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/happy.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/keyboard.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/mixer.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/rectangles.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Demos/src/touch.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/SDL/SDL.xcodeproj/project.pbxproj delete mode 100644 Engine/lib/sdl/Xcode-iOS/SDLtest/SDL2test.xcodeproj/project.pbxproj delete mode 100644 Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Default.png delete mode 100644 Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Icon.png delete mode 100644 Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/Info.plist delete mode 100644 Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateIcon.icns delete mode 100644 Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/TemplateInfo.plist delete mode 100644 Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/___PROJECTNAME___.xcodeproj/project.pbxproj delete mode 100644 Engine/lib/sdl/Xcode-iOS/Template/SDL iOS Application/main.c delete mode 100644 Engine/lib/sdl/Xcode-iOS/Test/Info.plist delete mode 100644 Engine/lib/sdl/Xcode-iOS/Test/README delete mode 100644 Engine/lib/sdl/Xcode-iOS/Test/TestiPhoneOS.xcodeproj/project.pbxproj delete mode 100644 Engine/lib/sdl/Xcode/SDL/pkg-support/codesign-frameworks.sh delete mode 100644 Engine/lib/sdl/android-project/AndroidManifest.xml delete mode 100644 Engine/lib/sdl/android-project/ant.properties delete mode 100644 Engine/lib/sdl/android-project/build.properties delete mode 100644 Engine/lib/sdl/android-project/build.xml delete mode 100644 Engine/lib/sdl/android-project/default.properties delete mode 100644 Engine/lib/sdl/android-project/jni/Android.mk delete mode 100644 Engine/lib/sdl/android-project/jni/Application.mk delete mode 100644 Engine/lib/sdl/android-project/jni/src/Android.mk delete mode 100644 Engine/lib/sdl/android-project/jni/src/Android_static.mk delete mode 100644 Engine/lib/sdl/android-project/proguard-project.txt delete mode 100644 Engine/lib/sdl/android-project/project.properties delete mode 100644 Engine/lib/sdl/android-project/res/drawable-hdpi/ic_launcher.png delete mode 100644 Engine/lib/sdl/android-project/res/drawable-mdpi/ic_launcher.png delete mode 100644 Engine/lib/sdl/android-project/res/drawable-xhdpi/ic_launcher.png delete mode 100644 Engine/lib/sdl/android-project/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 Engine/lib/sdl/android-project/res/layout/main.xml delete mode 100644 Engine/lib/sdl/android-project/res/values/strings.xml delete mode 100644 Engine/lib/sdl/android-project/src/org/libsdl/app/SDLActivity.java create mode 100644 Engine/lib/sdl/build-scripts/checker-buildbot.sh create mode 100644 Engine/lib/sdl/build-scripts/emscripten-buildbot.sh create mode 100644 Engine/lib/sdl/build-scripts/nacl-buildbot.sh create mode 100644 Engine/lib/sdl/build-scripts/naclbuild.sh create mode 100644 Engine/lib/sdl/build-scripts/update-copyright.sh create mode 100644 Engine/lib/sdl/build-scripts/windows-buildbot-zipper.bat create mode 100644 Engine/lib/sdl/build-scripts/winrtbuild.bat create mode 100644 Engine/lib/sdl/build-scripts/winrtbuild.ps1 create mode 100644 Engine/lib/sdl/cmake_uninstall.cmake.in create mode 100644 Engine/lib/sdl/include/SDL_opengl_glext.h create mode 100644 Engine/lib/sdl/include/SDL_opengles2_gl2.h create mode 100644 Engine/lib/sdl/include/SDL_opengles2_gl2ext.h create mode 100644 Engine/lib/sdl/include/SDL_opengles2_gl2platform.h create mode 100644 Engine/lib/sdl/include/SDL_opengles2_khrplatform.h delete mode 100644 Engine/lib/sdl/include/doxyfile create mode 100644 Engine/lib/sdl/sdl2-config.cmake.in create mode 100644 Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.c create mode 100644 Engine/lib/sdl/src/audio/emscripten/SDL_emscriptenaudio.h create mode 100644 Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.c create mode 100644 Engine/lib/sdl/src/audio/nacl/SDL_naclaudio.h create mode 100644 Engine/lib/sdl/src/audio/xaudio2/SDL_xaudio2.h create mode 100644 Engine/lib/sdl/src/core/linux/SDL_dbus.c create mode 100644 Engine/lib/sdl/src/core/linux/SDL_dbus.h create mode 100644 Engine/lib/sdl/src/core/linux/SDL_ibus.c create mode 100644 Engine/lib/sdl/src/core/linux/SDL_ibus.h rename Engine/lib/sdl/src/{audio/directsound/directx.h => core/windows/SDL_directx.h} (84%) create mode 100644 Engine/lib/sdl/src/core/windows/SDL_xinput.c rename Engine/lib/sdl/src/{joystick/windows/SDL_dxjoystick_c.h => core/windows/SDL_xinput.h} (55%) create mode 100644 Engine/lib/sdl/src/filesystem/android/SDL_sysfilesystem.c create mode 100644 Engine/lib/sdl/src/filesystem/emscripten/SDL_sysfilesystem.c rename Engine/lib/sdl/src/{joystick/iphoneos/SDLUIAccelerationDelegate.h => filesystem/nacl/SDL_sysfilesystem.c} (60%) rename Engine/lib/sdl/src/haptic/windows/{SDL_syshaptic.c => SDL_dinputhaptic.c} (52%) create mode 100644 Engine/lib/sdl/src/haptic/windows/SDL_dinputhaptic_c.h create mode 100644 Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic.c create mode 100644 Engine/lib/sdl/src/haptic/windows/SDL_windowshaptic_c.h create mode 100644 Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic.c create mode 100644 Engine/lib/sdl/src/haptic/windows/SDL_xinputhaptic_c.h create mode 100644 Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick.c create mode 100644 Engine/lib/sdl/src/joystick/emscripten/SDL_sysjoystick_c.h delete mode 100644 Engine/lib/sdl/src/joystick/iphoneos/SDLUIAccelerationDelegate.m create mode 100644 Engine/lib/sdl/src/joystick/iphoneos/SDL_sysjoystick_c.h create mode 100644 Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick.c create mode 100644 Engine/lib/sdl/src/joystick/windows/SDL_dinputjoystick_c.h delete mode 100644 Engine/lib/sdl/src/joystick/windows/SDL_dxjoystick.c create mode 100644 Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick.c create mode 100644 Engine/lib/sdl/src/joystick/windows/SDL_windowsjoystick_c.h create mode 100644 Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick.c create mode 100644 Engine/lib/sdl/src/joystick/windows/SDL_xinputjoystick_c.h delete mode 100644 Engine/lib/sdl/src/joystick/winrt/SDL_xinputjoystick.c create mode 100644 Engine/lib/sdl/src/libm/k_tan.c create mode 100644 Engine/lib/sdl/src/libm/s_tan.c create mode 100644 Engine/lib/sdl/src/main/nacl/SDL_nacl_main.c create mode 100644 Engine/lib/sdl/src/power/emscripten/SDL_syspower.c create mode 100644 Engine/lib/sdl/src/video/android/SDL_androidmessagebox.c rename Engine/lib/sdl/src/{haptic/windows/SDL_syshaptic_c.h => video/android/SDL_androidmessagebox.h} (72%) create mode 100644 Engine/lib/sdl/src/video/android/SDL_androidmouse.c create mode 100644 Engine/lib/sdl/src/video/android/SDL_androidmouse.h create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.c create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenevents.h create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.c create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenframebuffer.h create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.c create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenmouse.h create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.c create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenopengles.h create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.c create mode 100644 Engine/lib/sdl/src/video/emscripten/SDL_emscriptenvideo.h create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclevents.c create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclevents_c.h create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclglue.c create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclopengles.c create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclopengles.h create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclvideo.c create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclvideo.h create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclwindow.c create mode 100644 Engine/lib/sdl/src/video/nacl/SDL_naclwindow.h create mode 100644 Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.c create mode 100644 Engine/lib/sdl/src/video/vivante/SDL_vivanteopengles.h create mode 100644 Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.c create mode 100644 Engine/lib/sdl/src/video/vivante/SDL_vivanteplatform.h create mode 100644 Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.c create mode 100644 Engine/lib/sdl/src/video/vivante/SDL_vivantevideo.h create mode 100644 Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.cpp create mode 100644 Engine/lib/sdl/src/video/winrt/SDL_winrtmessagebox.h create mode 100644 Engine/lib/sdl/test/COPYING create mode 100644 Engine/lib/sdl/test/Makefile.in create mode 100644 Engine/lib/sdl/test/acinclude.m4 create mode 100644 Engine/lib/sdl/test/aclocal.m4 create mode 100644 Engine/lib/sdl/test/autogen.sh create mode 100644 Engine/lib/sdl/test/axis.bmp create mode 100644 Engine/lib/sdl/test/button.bmp create mode 100644 Engine/lib/sdl/test/checkkeys.c create mode 100644 Engine/lib/sdl/test/configure create mode 100644 Engine/lib/sdl/test/configure.in create mode 100644 Engine/lib/sdl/test/controllermap.bmp create mode 100644 Engine/lib/sdl/test/controllermap.c create mode 100644 Engine/lib/sdl/test/emscripten/joystick-pre.js create mode 100644 Engine/lib/sdl/test/gcc-fat.sh rename Engine/lib/sdl/{Xcode-iOS/Demos/data => test}/icon.bmp (100%) create mode 100644 Engine/lib/sdl/test/loopwave.c create mode 100644 Engine/lib/sdl/test/loopwavequeue.c create mode 100644 Engine/lib/sdl/test/moose.dat create mode 100644 Engine/lib/sdl/test/nacl/Makefile create mode 100644 Engine/lib/sdl/test/nacl/background.js create mode 100644 Engine/lib/sdl/test/nacl/common.js create mode 100644 Engine/lib/sdl/test/nacl/index.html create mode 100644 Engine/lib/sdl/test/nacl/manifest.json create mode 100644 Engine/lib/sdl/test/picture.xbm create mode 100644 Engine/lib/sdl/test/relative_mode.markdown create mode 100644 Engine/lib/sdl/test/sample.bmp create mode 100644 Engine/lib/sdl/test/sample.wav create mode 100644 Engine/lib/sdl/test/shapes/p01_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p01_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p01_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p02_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p02_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p02_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p03_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p03_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p04_shape1.bmp create mode 100644 Engine/lib/sdl/test/shapes/p04_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p04_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p04_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p05_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p06_shape1alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p06_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p06_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p06_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p07_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p07_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p07_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p08_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p08_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p08_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p09_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p09_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p09_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p10_shape1.bmp create mode 100644 Engine/lib/sdl/test/shapes/p10_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p10_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p10_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p11_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p11_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p11_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p12_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p12_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p13_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p13_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p13_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p14_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p14_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p15_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p15_shape32alpha.bmp create mode 100644 Engine/lib/sdl/test/shapes/p15_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/p16_shape1.bmp create mode 100644 Engine/lib/sdl/test/shapes/p16_shape24.bmp create mode 100644 Engine/lib/sdl/test/shapes/p16_shape8.bmp create mode 100644 Engine/lib/sdl/test/shapes/trollface_24.bmp create mode 100644 Engine/lib/sdl/test/shapes/trollface_32alpha.bmp create mode 100644 Engine/lib/sdl/test/testatomic.c create mode 100644 Engine/lib/sdl/test/testaudiohotplug.c create mode 100644 Engine/lib/sdl/test/testaudioinfo.c create mode 100644 Engine/lib/sdl/test/testautomation.c create mode 100644 Engine/lib/sdl/test/testautomation_audio.c create mode 100644 Engine/lib/sdl/test/testautomation_clipboard.c create mode 100644 Engine/lib/sdl/test/testautomation_events.c create mode 100644 Engine/lib/sdl/test/testautomation_hints.c create mode 100644 Engine/lib/sdl/test/testautomation_keyboard.c create mode 100644 Engine/lib/sdl/test/testautomation_main.c create mode 100644 Engine/lib/sdl/test/testautomation_mouse.c create mode 100644 Engine/lib/sdl/test/testautomation_pixels.c create mode 100644 Engine/lib/sdl/test/testautomation_platform.c create mode 100644 Engine/lib/sdl/test/testautomation_rect.c create mode 100644 Engine/lib/sdl/test/testautomation_render.c create mode 100644 Engine/lib/sdl/test/testautomation_rwops.c create mode 100644 Engine/lib/sdl/test/testautomation_sdltest.c create mode 100644 Engine/lib/sdl/test/testautomation_stdlib.c create mode 100644 Engine/lib/sdl/test/testautomation_suites.h create mode 100644 Engine/lib/sdl/test/testautomation_surface.c create mode 100644 Engine/lib/sdl/test/testautomation_syswm.c create mode 100644 Engine/lib/sdl/test/testautomation_timer.c create mode 100644 Engine/lib/sdl/test/testautomation_video.c create mode 100644 Engine/lib/sdl/test/testdisplayinfo.c create mode 100644 Engine/lib/sdl/test/testdraw2.c create mode 100644 Engine/lib/sdl/test/testdrawchessboard.c create mode 100644 Engine/lib/sdl/test/testdropfile.c create mode 100644 Engine/lib/sdl/test/testerror.c create mode 100644 Engine/lib/sdl/test/testfile.c create mode 100644 Engine/lib/sdl/test/testfilesystem.c create mode 100644 Engine/lib/sdl/test/testgamecontroller.c create mode 100644 Engine/lib/sdl/test/testgesture.c create mode 100644 Engine/lib/sdl/test/testgl2.c create mode 100644 Engine/lib/sdl/test/testgles.c create mode 100644 Engine/lib/sdl/test/testgles2.c create mode 100644 Engine/lib/sdl/test/testhaptic.c create mode 100644 Engine/lib/sdl/test/testhittesting.c create mode 100644 Engine/lib/sdl/test/testhotplug.c create mode 100644 Engine/lib/sdl/test/testiconv.c create mode 100644 Engine/lib/sdl/test/testime.c create mode 100644 Engine/lib/sdl/test/testintersections.c create mode 100644 Engine/lib/sdl/test/testjoystick.c create mode 100644 Engine/lib/sdl/test/testkeys.c create mode 100644 Engine/lib/sdl/test/testloadso.c create mode 100644 Engine/lib/sdl/test/testlock.c create mode 100644 Engine/lib/sdl/test/testmessage.c create mode 100644 Engine/lib/sdl/test/testmultiaudio.c create mode 100644 Engine/lib/sdl/test/testnative.c create mode 100644 Engine/lib/sdl/test/testnative.h create mode 100644 Engine/lib/sdl/test/testnativecocoa.m create mode 100644 Engine/lib/sdl/test/testnativew32.c create mode 100644 Engine/lib/sdl/test/testnativex11.c create mode 100644 Engine/lib/sdl/test/testoverlay2.c create mode 100644 Engine/lib/sdl/test/testplatform.c create mode 100644 Engine/lib/sdl/test/testpower.c create mode 100644 Engine/lib/sdl/test/testrelative.c create mode 100644 Engine/lib/sdl/test/testrendercopyex.c create mode 100644 Engine/lib/sdl/test/testrendertarget.c create mode 100644 Engine/lib/sdl/test/testresample.c create mode 100644 Engine/lib/sdl/test/testrumble.c create mode 100644 Engine/lib/sdl/test/testscale.c create mode 100644 Engine/lib/sdl/test/testsem.c create mode 100644 Engine/lib/sdl/test/testshader.c create mode 100644 Engine/lib/sdl/test/testshape.c create mode 100644 Engine/lib/sdl/test/testsprite2.c create mode 100644 Engine/lib/sdl/test/testspriteminimal.c create mode 100644 Engine/lib/sdl/test/teststreaming.c create mode 100644 Engine/lib/sdl/test/testthread.c create mode 100644 Engine/lib/sdl/test/testtimer.c create mode 100644 Engine/lib/sdl/test/testver.c create mode 100644 Engine/lib/sdl/test/testviewport.c create mode 100644 Engine/lib/sdl/test/testwm2.c create mode 100644 Engine/lib/sdl/test/torturethread.c create mode 100644 Engine/lib/sdl/test/utf8.txt diff --git a/Engine/lib/sdl/Android.mk b/Engine/lib/sdl/Android.mk index 4f94082042..13d765f579 100644 --- a/Engine/lib/sdl/Android.mk +++ b/Engine/lib/sdl/Android.mk @@ -34,7 +34,7 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/loadso/dlopen/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/*.c) \ $(wildcard $(LOCAL_PATH)/src/power/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/filesystem/dummy/*.c) \ + $(wildcard $(LOCAL_PATH)/src/filesystem/android/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*.c) \ $(wildcard $(LOCAL_PATH)/src/render/*/*.c) \ $(wildcard $(LOCAL_PATH)/src/stdlib/*.c) \ @@ -44,7 +44,7 @@ LOCAL_SRC_FILES := \ $(wildcard $(LOCAL_PATH)/src/timer/unix/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/*.c) \ $(wildcard $(LOCAL_PATH)/src/video/android/*.c) \ - $(wildcard $(LOCAL_PATH)/src/test/*.c)) + $(wildcard $(LOCAL_PATH)/src/test/*.c)) LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES LOCAL_LDLIBS := -ldl -lGLESv1_CM -lGLESv2 -llog -landroid @@ -61,7 +61,7 @@ LOCAL_MODULE := SDL2_static LOCAL_MODULE_FILENAME := libSDL2 -LOCAL_SRC_FILES += $(LOCAL_PATH)/src/main/android/SDL_android_main.c +LOCAL_SRC_FILES += $(subst $(LOCAL_PATH)/,,$(LOCAL_PATH)/src/main/android/SDL_android_main.c) LOCAL_LDLIBS := LOCAL_EXPORT_LDLIBS := -Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit -ldl -lGLESv1_CM -lGLESv2 -llog -landroid diff --git a/Engine/lib/sdl/CMakeLists.txt b/Engine/lib/sdl/CMakeLists.txt index 75a89378b8..74356b60f0 100644 --- a/Engine/lib/sdl/CMakeLists.txt +++ b/Engine/lib/sdl/CMakeLists.txt @@ -2,7 +2,7 @@ if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL source code and call cmake from there") endif() -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8) project(SDL2 C) include(CheckFunctionExists) include(CheckLibraryExists) @@ -29,9 +29,9 @@ include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake) # set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0. set(SDL_MAJOR_VERSION 2) set(SDL_MINOR_VERSION 0) -set(SDL_MICRO_VERSION 3) -set(SDL_INTERFACE_AGE 1) -set(SDL_BINARY_AGE 3) +set(SDL_MICRO_VERSION 4) +set(SDL_INTERFACE_AGE 0) +set(SDL_BINARY_AGE 4) set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}") # Calculate a libtool-like version number @@ -117,6 +117,12 @@ else() set(UNIX_OR_MAC_SYS OFF) endif() +if (UNIX_OR_MAC_SYS AND NOT EMSCRIPTEN) # JavaScript does not yet have threading support, so disable pthreads when building for Emscripten. + set(SDL_PTHREADS_ENABLED_BY_DEFAULT ON) +else() + set(SDL_PTHREADS_ENABLED_BY_DEFAULT OFF) +endif() + # Default option knobs if(APPLE OR ARCH_64) set(OPT_DEF_SSEMATH ON) @@ -144,7 +150,7 @@ if("$ENV{CFLAGS}" STREQUAL "") if(USE_GCC OR USE_CLANG) set(CMAKE_C_FLAGS "-g -O3") endif() -else("$ENV{CFLAGS}" STREQUAL "") +else() set(CMAKE_C_FLAGS "$ENV{CFLAGS}") list(APPEND EXTRA_CFLAGS "$ENV{CFLAGS}") endif() @@ -161,8 +167,15 @@ if(MSVC) if(${flag_var} MATCHES "/MD") string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") endif() - endforeach(flag_var) + endforeach() endif() + + # Make sure /RTC1 is disabled, otherwise it will use functions from the CRT + foreach(flag_var + CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE + CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO) + string(REGEX REPLACE "/RTC(su|[1su])" "" ${flag_var} "${${flag_var}}") + endforeach(flag_var) endif() # Those are used for pkg-config and friends, so that the SDL2.pc, sdl2-config, @@ -170,13 +183,19 @@ endif() set(SDL_LIBS "-lSDL2") set(SDL_CFLAGS "") +# Emscripten toolchain has a nonempty default value for this, and the checks +# in this file need to change that, so remember the original value, and +# restore back to that afterwards. For check_function_exists() to work in +# Emscripten, this value must be at its default value. +set(ORIG_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS}) + if(CYGWIN) # We build SDL on cygwin without the UNIX emulation layer include_directories("-I/usr/include/mingw") set(CMAKE_REQUIRED_FLAGS "-mno-cygwin") check_c_source_compiles("int main(int argc, char **argv) {}" HAVE_GCC_NO_CYGWIN) - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) if(HAVE_GCC_NO_CYGWIN) list(APPEND EXTRA_LDFLAGS "-mno-cygwin") list(APPEND SDL_LIBS "-mno-cygwin") @@ -188,12 +207,35 @@ add_definitions(-DUSING_GENERATED_CONFIG_H) # General includes include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include) +# All these ENABLED_BY_DEFAULT vars will default to ON if not specified, so +# you only need to have a platform override them if they are disabling. +set(OPT_DEF_ASM TRUE) +if(EMSCRIPTEN) + # Set up default values for the currently supported set of subsystems: + # Emscripten/Javascript does not have assembly support, a dynamic library + # loading architecture, low-level CPU inspection or multithreading. + set(OPT_DEF_ASM FALSE) + set(SDL_SHARED_ENABLED_BY_DEFAULT OFF) + set(SDL_ATOMIC_ENABLED_BY_DEFAULT OFF) + set(SDL_THREADS_ENABLED_BY_DEFAULT OFF) + set(SDL_LOADSO_ENABLED_BY_DEFAULT OFF) + set(SDL_CPUINFO_ENABLED_BY_DEFAULT OFF) + set(SDL_DLOPEN_ENABLED_BY_DEFAULT OFF) +endif() + +if (NOT DEFINED SDL_SHARED_ENABLED_BY_DEFAULT) + set(SDL_SHARED_ENABLED_BY_DEFAULT ON) +endif() + set(SDL_SUBSYSTEMS Atomic Audio Video Render Events Joystick Haptic Power Threads Timers - File Loadso CPUinfo Filesystem) + File Loadso CPUinfo Filesystem Dlopen) foreach(_SUB ${SDL_SUBSYSTEMS}) string(TOUPPER ${_SUB} _OPT) - option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ON) + if (NOT DEFINED SDL_${_OPT}_ENABLED_BY_DEFAULT) + set(SDL_${_OPT}_ENABLED_BY_DEFAULT ON) + endif() + option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ${SDL_${_OPT}_ENABLED_BY_DEFAULT}) endforeach() option_string(ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto") @@ -212,13 +254,13 @@ set_option(DUMMYAUDIO "Support the dummy audio driver" ON) set_option(VIDEO_DIRECTFB "Use DirectFB video driver" OFF) dep_option(DIRECTFB_SHARED "Dynamically load directfb support" ON "VIDEO_DIRECTFB" OFF) set_option(FUSIONSOUND "Use FusionSound audio driver" OFF) -dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND_SHARED" OFF) +dep_option(FUSIONSOUND_SHARED "Dynamically load fusionsound audio support" ON "FUSIONSOUND" OFF) set_option(VIDEO_DUMMY "Use dummy video driver" ON) set_option(VIDEO_OPENGL "Include OpenGL support" ON) set_option(VIDEO_OPENGLES "Include OpenGL ES support" ON) -set_option(PTHREADS "Use POSIX threads for multi-threading" ${UNIX_OR_MAC_SYS}) +set_option(PTHREADS "Use POSIX threads for multi-threading" ${SDL_PTHREADS_ENABLED_BY_DEFAULT}) dep_option(PTHREADS_SEM "Use pthread semaphores" ON "PTHREADS" OFF) -set_option(SDL_DLOPEN "Use dlopen for shared object loading" ON) +set_option(SDL_DLOPEN "Use dlopen for shared object loading" ${SDL_DLOPEN_ENABLED_BY_DEFAULT}) set_option(OSS "Support the OSS audio API" ${UNIX_SYS}) set_option(ALSA "Support the ALSA audio API" ${UNIX_SYS}) dep_option(ALSA_SHARED "Dynamically load ALSA audio support" ON "ALSA" OFF) @@ -235,8 +277,12 @@ set_option(RPATH "Use an rpath when linking SDL" ${UNIX_SYS}) set_option(CLOCK_GETTIME "Use clock_gettime() instead of gettimeofday()" OFF) set_option(INPUT_TSLIB "Use the Touchscreen library for input" ${UNIX_SYS}) set_option(VIDEO_X11 "Use X11 video driver" ${UNIX_SYS}) -set_option(VIDEO_WAYLAND "Use Wayland video driver" OFF) #${UNIX_SYS}) -set_option(VIDEO_MIR "Use Mir video driver" OFF) #${UNIX_SYS}) +set_option(VIDEO_WAYLAND "Use Wayland video driver" ${UNIX_SYS}) +dep_option(WAYLAND_SHARED "Dynamically load Wayland support" ON "VIDEO_WAYLAND" OFF) +dep_option(VIDEO_WAYLAND_QT_TOUCH "QtWayland server support for Wayland video driver" ON "VIDEO_WAYLAND" OFF) +set_option(VIDEO_MIR "Use Mir video driver" ${UNIX_SYS}) +dep_option(MIR_SHARED "Dynamically load Mir support" ON "VIDEO_MIR" OFF) +set_option(VIDEO_RPI "Use Raspberry Pi video driver" ${UNIX_SYS}) dep_option(X11_SHARED "Dynamically load X11 support" ON "VIDEO_X11" OFF) set(SDL_X11_OPTIONS Xcursor Xinerama XInput Xrandr Xscrnsaver XShape Xvm) foreach(_SUB ${SDL_X11_OPTIONS}) @@ -246,10 +292,11 @@ endforeach() set_option(VIDEO_COCOA "Use Cocoa video driver" ${APPLE}) set_option(DIRECTX "Use DirectX for Windows audio/video" ${WINDOWS}) set_option(RENDER_D3D "Enable the Direct3D render driver" ${WINDOWS}) +set_option(VIDEO_VIVANTE "Use Vivante EGL video driver" ${UNIX_SYS}) # TODO: We should (should we?) respect cmake's ${BUILD_SHARED_LIBS} flag here # The options below are for compatibility to configure's default behaviour. -set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library") +set(SDL_SHARED ${SDL_SHARED_ENABLED_BY_DEFAULT} CACHE BOOL "Build a shared version of the library") set(SDL_STATIC ON CACHE BOOL "Build a static version of the library") # General source files @@ -315,7 +362,7 @@ if(USE_GCC OR USE_CLANG) set(CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2") check_c_source_compiles("int x = 0; int main(int argc, char **argv) {}" HAVE_GCC_PREFERRED_STACK_BOUNDARY) - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror") check_c_source_compiles(" @@ -326,14 +373,26 @@ if(USE_GCC OR USE_CLANG) if(HAVE_GCC_FVISIBILITY) list(APPEND EXTRA_CFLAGS "-fvisibility=hidden") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) check_c_compiler_flag(-Wall HAVE_GCC_WALL) if(HAVE_GCC_WALL) + list(APPEND EXTRA_CFLAGS "-Wall") if(HAIKU) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar") endif() endif() + check_c_compiler_flag(-Wshadow HAVE_GCC_WSHADOW) + if(HAVE_GCC_WSHADOW) + list(APPEND EXTRA_CFLAGS "-Wshadow") + endif() + + set(CMAKE_REQUIRED_FLAGS "-Wl,--no-undefined") + check_c_compiler_flag("" HAVE_NO_UNDEFINED) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) + if(HAVE_NO_UNDEFINED) + list(APPEND EXTRA_LDFLAGS "-Wl,--no-undefined") + endif() endif() if(ASSEMBLY) @@ -362,7 +421,7 @@ if(ASSEMBLY) if(HAVE_MMX) list(APPEND EXTRA_CFLAGS "-mmmx") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(3DNOW) @@ -379,7 +438,7 @@ if(ASSEMBLY) if(HAVE_3DNOW) list(APPEND EXTRA_CFLAGS "-m3dnow") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SSE) @@ -402,7 +461,7 @@ if(ASSEMBLY) if(HAVE_SSE) list(APPEND EXTRA_CFLAGS "-msse") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SSE2) @@ -425,7 +484,7 @@ if(ASSEMBLY) if(HAVE_SSE2) list(APPEND EXTRA_CFLAGS "-msse2") endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SSEMATH) @@ -450,7 +509,7 @@ if(ASSEMBLY) return vec_splat_u32(0); } int main(int argc, char **argv) { }" HAVE_ALTIVEC) - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) if(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR) set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set list(APPEND EXTRA_CFLAGS "-maltivec") @@ -472,7 +531,7 @@ if(ASSEMBLY) set(SDL_ASSEMBLY_ROUTINES 1) endif() # TODO: -#else(ASSEMBLY) +#else() # if(USE_GCC OR USE_CLANG) # list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-mmx") # endif() @@ -494,7 +553,7 @@ if(LIBC) strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp _stricmp _strnicmp sscanf atan atan2 acos asin ceil copysign cos - cosf fabs floor log pow scalbn sin sinf sqrt) + cosf fabs floor log pow scalbn sin sinf sqrt sqrtf tan tanf) string(TOUPPER ${_FN} _UPPER) set(HAVE_${_UPPER} 1) endforeach() @@ -504,7 +563,7 @@ if(LIBC) set(HAVE_M_PI 1) add_definitions(-D_USE_MATH_DEFINES) # needed for M_PI set(STDC_HEADERS 1) - else(WINDOWS AND NOT MINGW) + else() set(HAVE_LIBC TRUE) check_include_file(sys/types.h HAVE_SYS_TYPES_H) foreach(_HEADER @@ -541,7 +600,7 @@ if(LIBC) set(CMAKE_REQUIRED_LIBRARIES m) foreach(_FN atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin - sinf sqrt) + sinf sqrt sqrtf tan tanf acos asin) string(TOUPPER ${_FN} _UPPER) set(_HAVEVAR "HAVE_${_UPPER}") check_function_exists("${_FN}" ${_HAVEVAR}) @@ -553,11 +612,20 @@ if(LIBC) check_library_exists(iconv iconv_open "" HAVE_LIBICONV) if(HAVE_LIBICONV) list(APPEND EXTRA_LIBS iconv) + set(HAVE_ICONV 1) + endif() + + if(NOT APPLE) + check_include_file(alloca.h HAVE_ALLOCA_H) + check_function_exists(alloca HAVE_ALLOCA) + else() + set(HAVE_ALLOCA_H 1) + set(HAVE_ALLOCA 1) endif() check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION) endif() -else(LIBC) +else() if(WINDOWS) set(HAVE_STDARG_H 1) set(HAVE_STDDEF_H 1) @@ -627,8 +695,96 @@ if(SDL_VIDEO) endif() endif() +if(ANDROID) + file(GLOB ANDROID_CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_CORE_SOURCES}) + file(GLOB ANDROID_MAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_MAIN_SOURCES}) + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_ANDROID 1) + file(GLOB ANDROID_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_AUDIO_SOURCES}) + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_ANDROID 1) + file(GLOB ANDROID_FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_FILESYSTEM_SOURCES}) + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_ANDROID 1) + file(GLOB ANDROID_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_JOYSTICK_SOURCES}) + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_ANDROID 1) + file(GLOB ANDROID_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_POWER_SOURCES}) + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_ANDROID 1) + file(GLOB ANDROID_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/android/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${ANDROID_VIDEO_SOURCES}) + set(HAVE_SDL_VIDEO TRUE) + + #enable gles + if(VIDEO_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(HAVE_VIDEO_OPENGLES TRUE) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + endif() + endif() + list(APPEND EXTRA_LDFLAGS "-Wl,--undefined=Java_org_libsdl_app_SDLActivity_nativeInit") +endif() + # Platform-specific options and settings -if(UNIX AND NOT APPLE) +if(EMSCRIPTEN) + # Hide noisy warnings that intend to aid mostly during initial stages of porting a new + # project. Uncomment at will for verbose cross-compiling -I/../ path info. + add_definitions(-Wno-warn-absolute-paths) + if(SDL_AUDIO) + set(SDL_AUDIO_DRIVER_EMSCRIPTEN 1) + file(GLOB EM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_AUDIO_SOURCES}) + set(HAVE_SDL_AUDIO TRUE) + endif() + if(SDL_FILESYSTEM) + set(SDL_FILESYSTEM_EMSCRIPTEN 1) + file(GLOB EM_FILESYSTEM_SOURCES ${SDL2_SOURCE_DIR}/src/filesystem/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_FILESYSTEM_SOURCES}) + set(HAVE_SDL_FILESYSTEM TRUE) + endif() + if(SDL_JOYSTICK) + set(SDL_JOYSTICK_EMSCRIPTEN 1) + file(GLOB EM_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_JOYSTICK_SOURCES}) + set(HAVE_SDL_JOYSTICK TRUE) + endif() + if(SDL_POWER) + set(SDL_POWER_EMSCRIPTEN 1) + file(GLOB EM_POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_POWER_SOURCES}) + set(HAVE_SDL_POWER TRUE) + endif() + if(SDL_VIDEO) + set(SDL_VIDEO_DRIVER_EMSCRIPTEN 1) + file(GLOB EM_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/emscripten/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${EM_VIDEO_SOURCES}) + set(HAVE_SDL_VIDEO TRUE) + + #enable gles + if(VIDEO_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(HAVE_VIDEO_OPENGLES TRUE) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + endif() + endif() +elseif(UNIX AND NOT APPLE) if(SDL_AUDIO) if(SYSV5 OR SOLARIS OR HPUX) set(SDL_AUDIO_DRIVER_SUNAUDIO 1) @@ -657,12 +813,15 @@ if(UNIX AND NOT APPLE) endif() if(SDL_VIDEO) + # Need to check for Raspberry PI first and add platform specific compiler flags, otherwise the test for GLES fails! + CheckRPI() CheckX11() CheckMir() CheckDirectFB() CheckOpenGLX11() CheckOpenGLESX11() CheckWayland() + CheckVivante() endif() if(LINUX) @@ -720,7 +879,7 @@ if(UNIX AND NOT APPLE) if(SDL_JOYSTICK) CheckUSBHID() # seems to be BSD specific - limit the test to BSD only? - if(LINUX) + if(LINUX AND NOT ANDROID) set(SDL_JOYSTICK_LINUX 1) file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) @@ -735,7 +894,7 @@ if(UNIX AND NOT APPLE) if(FOUND_CLOCK_GETTIME) list(APPEND EXTRA_LIBS rt) set(HAVE_CLOCK_GETTIME 1) - else(FOUND_CLOCK_GETTIME) + else() check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME) if(FOUND_CLOCK_GETTIME) set(HAVE_CLOCK_GETTIME 1) @@ -792,25 +951,52 @@ elseif(WINDOWS) file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES}) + if(MSVC) + # Prevent codegen that would use the VC runtime libraries. + add_definitions(/GS-) + if(NOT ARCH_64) + add_definitions(/arch:SSE) + endif() + endif() + # Check for DirectX if(DIRECTX) - if("$ENV{DXSDK_DIR}" STREQUAL "") - message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set") + if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700) + set(USE_WINSDK_DIRECTX TRUE) + endif() + if(NOT CMAKE_COMPILER_IS_MINGW AND NOT USE_WINSDK_DIRECTX) + if("$ENV{DXSDK_DIR}" STREQUAL "") + message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set") + endif() + set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"") + endif() + + if(HAVE_WIN32_CC) + # xinput.h may need windows.h, but doesn't include it itself. + check_c_source_compiles(" + #include + #include + int main(int argc, char **argv) { }" HAVE_XINPUT_H) + else() + check_include_file(xinput.h HAVE_XINPUT_H) endif() - set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"") + check_include_file(d3d9.h HAVE_D3D_H) check_include_file(d3d11_1.h HAVE_D3D11_H) check_include_file(ddraw.h HAVE_DDRAW_H) check_include_file(dsound.h HAVE_DSOUND_H) check_include_file(dinput.h HAVE_DINPUT_H) check_include_file(xaudio2.h HAVE_XAUDIO2_H) + check_include_file(dxgi.h HAVE_DXGI_H) if(HAVE_D3D_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H) set(HAVE_DIRECTX TRUE) + if(NOT CMAKE_COMPILER_IS_MINGW AND NOT USE_WINSDK_DIRECTX) # TODO: change $ENV{DXSDL_DIR} to get the path from the include checks - link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}) - include_directories($ENV{DXSDK_DIR}\\Include) + link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}) + include_directories($ENV{DXSDK_DIR}\\Include) + endif() endif() - set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS}) endif() if(SDL_AUDIO) @@ -905,24 +1091,51 @@ elseif(WINDOWS) set(SDL_VIDEO_RENDER_OGL 1) set(HAVE_VIDEO_OPENGL TRUE) endif() + + if(VIDEO_OPENGLES) + set(SDL_VIDEO_OPENGL_EGL 1) + set(SDL_VIDEO_OPENGL_ES2 1) + set(SDL_VIDEO_RENDER_OGL_ES2 1) + set(HAVE_VIDEO_OPENGLES TRUE) + endif() endif() if(SDL_JOYSTICK) + file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/windows/*.c) + set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES}) if(HAVE_DINPUT_H) set(SDL_JOYSTICK_DINPUT 1) - set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_dxjoystick.c) - list(APPEND EXTRA_LIBS dinput8 dxguid dxerr) - else() + list(APPEND EXTRA_LIBS dinput8 dxguid) + if(CMAKE_COMPILER_IS_MINGW) + list(APPEND EXTRA_LIBS dxerr8) + elseif (NOT USE_WINSDK_DIRECTX) + list(APPEND EXTRA_LIBS dxerr) + endif() + endif() + if(HAVE_XINPUT_H) + set(SDL_JOYSTICK_XINPUT 1) + endif() + if(NOT HAVE_DINPUT_H AND NOT HAVE_XINPUT_H) set(SDL_JOYSTICK_WINMM 1) - set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_mmjoystick.c) endif() set(HAVE_SDL_JOYSTICK TRUE) - endif() - if(SDL_HAPTIC AND HAVE_DINPUT_H) - set(SDL_HAPTIC_DINPUT 1) - set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/haptic/windows/SDL_syshaptic.c) - set(HAVE_SDL_HAPTIC TRUE) + if(SDL_HAPTIC) + if(HAVE_DINPUT_H OR HAVE_XINPUT_H) + file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/windows/*.c) + if(HAVE_DINPUT_H) + set(SDL_HAPTIC_DINPUT 1) + endif() + if(HAVE_XINPUT_H) + set(SDL_HAPTIC_XINPUT 1) + endif() + else() + file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c) + set(SDL_HAPTIC_DUMMY 1) + endif() + set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES}) + set(HAVE_SDL_HAPTIC TRUE) + endif() endif() file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc) @@ -938,17 +1151,18 @@ elseif(APPLE) # Requires the darwin file implementation if(SDL_FILE) - file(GLOB EXTRA_SOURCES ${PROJECT_SOURCE_DIR}/src/file/cocoa/*.m) + file(GLOB EXTRA_SOURCES ${SDL2_SOURCE_DIR}/src/file/cocoa/*.m) set(SOURCE_FILES ${EXTRA_SOURCES} ${SOURCE_FILES}) set_source_files_properties(${EXTRA_SOURCES} PROPERTIES LANGUAGE C) set(HAVE_SDL_FILE TRUE) set(SDL_FRAMEWORK_COCOA 1) + set(SDL_FRAMEWORK_COREVIDEO 1) else() message_error("SDL_FILE must be enabled to build on MacOS X") endif() if(SDL_AUDIO) - set(MACOSX_COREAUDIO 1) + set(SDL_AUDIO_DRIVER_COREAUDIO 1) file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.c) set(SOURCE_FILES ${SOURCE_FILES} ${AUDIO_SOURCES}) set(HAVE_SDL_AUDIO TRUE) @@ -1002,6 +1216,10 @@ elseif(APPLE) endif() # Actually load the frameworks at the end so we don't duplicate include. + if(SDL_FRAMEWORK_COREVIDEO) + find_library(COREVIDEO CoreVideo) + list(APPEND EXTRA_LIBS ${COREVIDEO}) + endif() if(SDL_FRAMEWORK_COCOA) find_library(COCOA_LIBRARY Cocoa) list(APPEND EXTRA_LIBS ${COCOA_LIBRARY}) @@ -1034,10 +1252,6 @@ elseif(APPLE) set(SDL_VIDEO_OPENGL 1) set(SDL_VIDEO_OPENGL_CGL 1) set(SDL_VIDEO_RENDER_OGL 1) - if(DARWIN) - find_library(OpenGL_LIBRARY OpenGL) - list(APPEND EXTRA_LIBRARIES ${OpenGL_LIBRARY}) - endif() set(HAVE_VIDEO_OPENGL TRUE) endif() endif() @@ -1159,14 +1373,14 @@ if(NOT WINDOWS OR CYGWIN) if(SDL_STATIC) set(ENABLE_STATIC_TRUE "") set(ENABLE_STATIC_FALSE "#") - else(SDL_STATIC) + else() set(ENABLE_STATIC_TRUE "#") set(ENABLE_STATIC_FALSE "") endif() if(SDL_SHARED) set(ENABLE_SHARED_TRUE "") set(ENABLE_SHARED_FALSE "#") - else(SDL_SHARED) + else() set(ENABLE_SHARED_TRUE "#") set(ENABLE_SHARED_FALSE "") endif() @@ -1247,14 +1461,20 @@ if(SDL_SHARED) VERSION ${LT_VERSION} SOVERSION ${LT_REVISION} OUTPUT_NAME "SDL2-${LT_RELEASE}") - else(UNIX) + else() set_target_properties(SDL2 PROPERTIES VERSION ${SDL_VERSION} SOVERSION ${LT_REVISION} OUTPUT_NAME "SDL2") endif() - set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) - target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) + if(MSVC) + # Don't try to link with the default set of libraries. + set_target_properties(SDL2 PROPERTIES LINK_FLAGS_RELEASE "/NODEFAULTLIB") + set_target_properties(SDL2 PROPERTIES LINK_FLAGS_DEBUG "/NODEFAULTLIB") + set_target_properties(SDL2 PROPERTIES STATIC_LIBRARY_FLAGS "/NODEFAULTLIB") + endif() + set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS}) + target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS}) endif() if(SDL_STATIC) @@ -1275,7 +1495,8 @@ endif() ##### Installation targets ##### install(TARGETS ${_INSTALL_LIBS} LIBRARY DESTINATION "lib${LIB_SUFFIX}" - ARCHIVE DESTINATION "lib${LIB_SUFFIX}") + ARCHIVE DESTINATION "lib${LIB_SUFFIX}" + RUNTIME DESTINATION bin) file(GLOB INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/*.h) file(GLOB BIN_INCLUDE_FILES ${SDL2_BINARY_DIR}/include/*.h) @@ -1296,14 +1517,21 @@ if(NOT WINDOWS OR CYGWIN) if(FREEBSD) # FreeBSD uses ${PREFIX}/libdata/pkgconfig install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "libdata/pkgconfig") - else(FREEBSD) + else() install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "lib${LIB_SUFFIX}/pkgconfig") endif() install(PROGRAMS ${SDL2_BINARY_DIR}/sdl2-config DESTINATION bin) # TODO: what about the .spec file? Is it only needed for RPM creation? install(FILES "${SDL2_SOURCE_DIR}/sdl2.m4" DESTINATION "share/aclocal") -else() - install(TARGETS SDL2 RUNTIME DESTINATION bin) endif() +##### Uninstall target ##### + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" + IMMEDIATE @ONLY) + +add_custom_target(uninstall + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) diff --git a/Engine/lib/sdl/COPYING.txt b/Engine/lib/sdl/COPYING.txt index a17cd0dcf6..dd9574e06e 100644 --- a/Engine/lib/sdl/COPYING.txt +++ b/Engine/lib/sdl/COPYING.txt @@ -1,6 +1,6 @@ Simple DirectMedia Layer -Copyright (C) 1997-2014 Sam Lantinga +Copyright (C) 1997-2016 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/Engine/lib/sdl/INSTALL.txt b/Engine/lib/sdl/INSTALL.txt index 5bd27c51f4..66e5706f78 100644 --- a/Engine/lib/sdl/INSTALL.txt +++ b/Engine/lib/sdl/INSTALL.txt @@ -9,7 +9,7 @@ To compile and install SDL: * Run './configure; make; make install' Mac OS X with Xcode: - * Read README-macosx.txt + * Read docs/README-macosx.md Mac OS X from the command line: * Run './configure; make; make install' @@ -18,13 +18,13 @@ To compile and install SDL: * Run './configure; make; make install' Android: - * Read README-android.txt + * Read docs/README-android.md iOS: - * Read README-ios.txt + * Read docs/README-ios.md Using Cmake: - * Read README-cmake.txt + * Read docs/README-cmake.md 2. Look at the example programs in ./test, and check out the online documentation at http://wiki.libsdl.org/ diff --git a/Engine/lib/sdl/Makefile.in b/Engine/lib/sdl/Makefile.in index da42661c51..b66e0f5e24 100644 --- a/Engine/lib/sdl/Makefile.in +++ b/Engine/lib/sdl/Makefile.in @@ -39,18 +39,28 @@ SDLMAIN_OBJECTS = @SDLMAIN_OBJECTS@ SDLTEST_TARGET = libSDL2_test.a SDLTEST_OBJECTS = @SDLTEST_OBJECTS@ -SRC_DIST = *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake configure configure.in debian include Makefile.* sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in src test VisualC.html VisualC Xcode Xcode-iOS +SRC_DIST = *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.in debian docs include Makefile.* sdl2-config.cmake.in sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in src test VisualC.html VisualC VisualC-WinRT Xcode Xcode-iOS GEN_DIST = SDL2.spec +ifneq ($V,1) +RUN_CMD_AR = @echo " AR " $@; +RUN_CMD_CC = @echo " CC " $@; +RUN_CMD_CXX = @echo " CXX " $@; +RUN_CMD_LTLINK = @echo " LTLINK" $@; +RUN_CMD_RANLIB = @echo " RANLIB" $@; +LIBTOOL += --quiet +endif + HDRS = \ SDL.h \ SDL_assert.h \ SDL_atomic.h \ SDL_audio.h \ - SDL_bits.h \ + SDL_bits.h \ SDL_blendmode.h \ SDL_clipboard.h \ SDL_cpuinfo.h \ + SDL_egl.h \ SDL_endian.h \ SDL_error.h \ SDL_events.h \ @@ -70,8 +80,13 @@ HDRS = \ SDL_mutex.h \ SDL_name.h \ SDL_opengl.h \ + SDL_opengl_glext.h \ SDL_opengles.h \ + SDL_opengles2_gl2ext.h \ + SDL_opengles2_gl2.h \ + SDL_opengles2_gl2platform.h \ SDL_opengles2.h \ + SDL_opengles2_khrplatform.h \ SDL_pixels.h \ SDL_platform.h \ SDL_power.h \ @@ -123,15 +138,15 @@ update-revision: .PHONY: all update-revision install install-bin install-hdrs install-lib install-data uninstall uninstall-bin uninstall-hdrs uninstall-lib uninstall-data clean distclean dist $(OBJECTS:.lo=.d) $(objects)/$(TARGET): $(OBJECTS) $(VERSION_OBJECTS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) + $(RUN_CMD_LTLINK)$(LIBTOOL) --tag=CC --mode=link $(CC) -o $@ $(OBJECTS) $(VERSION_OBJECTS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(LT_LDFLAGS) $(objects)/$(SDLMAIN_TARGET): $(SDLMAIN_OBJECTS) - $(AR) cru $@ $(SDLMAIN_OBJECTS) - $(RANLIB) $@ + $(RUN_CMD_AR)$(AR) cru $@ $(SDLMAIN_OBJECTS) + $(RUN_CMD_RANLIB)$(RANLIB) $@ $(objects)/$(SDLTEST_TARGET): $(SDLTEST_OBJECTS) - $(AR) cru $@ $(SDLTEST_OBJECTS) - $(RANLIB) $@ + $(RUN_CMD_AR)$(AR) cru $@ $(SDLTEST_OBJECTS) + $(RUN_CMD_RANLIB)$(RANLIB) $@ install: all install-bin install-hdrs install-lib install-data install-bin: @@ -161,6 +176,8 @@ install-data: $(INSTALL) -m 644 $(srcdir)/sdl2.m4 $(DESTDIR)$(datadir)/aclocal/sdl2.m4 $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(libdir)/pkgconfig $(INSTALL) -m 644 sdl2.pc $(DESTDIR)$(libdir)/pkgconfig + $(SHELL) $(auxdir)/mkinstalldirs $(DESTDIR)$(libdir)/cmake/SDL2 + $(INSTALL) -m 644 sdl2-config.cmake $(DESTDIR)$(libdir)/cmake/SDL2 uninstall: uninstall-bin uninstall-hdrs uninstall-lib uninstall-data uninstall-bin: @@ -179,6 +196,7 @@ uninstall-lib: uninstall-data: rm -f $(DESTDIR)$(datadir)/aclocal/sdl2.m4 rm -f $(DESTDIR)$(libdir)/pkgconfig/sdl2.pc + rm -f $(DESTDIR)$(libdir)/cmake/SDL2/sdl2-config.cmake clean: rm -rf $(objects) diff --git a/Engine/lib/sdl/Makefile.wiz b/Engine/lib/sdl/Makefile.wiz index 82619f076c..bb7705789f 100644 --- a/Engine/lib/sdl/Makefile.wiz +++ b/Engine/lib/sdl/Makefile.wiz @@ -12,13 +12,13 @@ CFLAGS = -Wall -fPIC -I./include -I$(WIZSDK)/include -DWIZ_GLES_LITE TARGET_STATIC = libSDL13.a TARGET_SHARED = libSDL13.so -SOURCES = ./src/*.c ./src/audio/*.c ./src/cdrom/*.c ./src/cpuinfo/*.c ./src/events/*.c \ +SOURCES = ./src/*.c ./src/audio/*.c ./src/cpuinfo/*.c ./src/events/*.c \ ./src/file/*.c ./src/stdlib/*.c ./src/thread/*.c ./src/timer/*.c ./src/video/*.c \ ./src/joystick/*.c ./src/haptic/*.c ./src/video/dummy/*.c ./src/audio/disk/*.c \ ./src/audio/dummy/*.c ./src/loadso/dlopen/*.c ./src/audio/dsp/*.c \ ./src/thread/pthread/SDL_systhread.c ./src/thread/pthread/SDL_syssem.c \ ./src/thread/pthread/SDL_sysmutex.c ./src/thread/pthread/SDL_syscond.c \ - ./src/joystick/linux/*.c ./src/haptic/linux/*.c ./src/timer/unix/*.c ./src/cdrom/dummy/*.c \ + ./src/joystick/linux/*.c ./src/haptic/linux/*.c ./src/timer/unix/*.c \ ./src/video/pandora/SDL_pandora.o ./src/video/pandora/SDL_pandora_events.o diff --git a/Engine/lib/sdl/README-android.txt b/Engine/lib/sdl/README-android.txt deleted file mode 100644 index 08a2592d49..0000000000 --- a/Engine/lib/sdl/README-android.txt +++ /dev/null @@ -1,438 +0,0 @@ -================================================================================ -Simple DirectMedia Layer for Android -================================================================================ - -Requirements: - -Android SDK (version 12 or later) -http://developer.android.com/sdk/index.html - -Android NDK r7 or later -http://developer.android.com/tools/sdk/ndk/index.html - -Minimum API level supported by SDL: 10 (Android 2.3.3) -Joystick support is available for API level >=12 devices. - -================================================================================ - How the port works -================================================================================ - -- Android applications are Java-based, optionally with parts written in C -- As SDL apps are C-based, we use a small Java shim that uses JNI to talk to -the SDL library -- This means that your application C code must be placed inside an Android -Java project, along with some C support code that communicates with Java -- This eventually produces a standard Android .apk package - -The Android Java code implements an "Activity" and can be found in: -android-project/src/org/libsdl/app/SDLActivity.java - -The Java code loads your game code, the SDL shared library, and -dispatches to native functions implemented in the SDL library: -src/core/android/SDL_android.c - -Your project must include some glue code that starts your main() routine: -src/main/android/SDL_android_main.c - - -================================================================================ - Building an app -================================================================================ - -For simple projects you can use the script located at build-scripts/androidbuild.sh - -There's two ways of using it: - -androidbuild.sh com.yourcompany.yourapp < sources.list -androidbuild.sh com.yourcompany.yourapp source1.c source2.c ...sourceN.c - -sources.list should be a text file with a source file name in each line -Filenames should be specified relative to the current directory, for example if -you are in the build-scripts directory and want to create the testgles.c test, you'll -run: - -./androidbuild.sh org.libsdl.testgles ../test/testgles.c - -One limitation of this script is that all sources provided will be aggregated into -a single directory, thus all your source files should have a unique name. - -Once the project is complete the script will tell you where the debug APK is located. -If you want to create a signed release APK, you can use the project created by this -utility to generate it. - -Finally, a word of caution: re running androidbuild.sh wipes any changes you may have -done in the build directory for the app! - - -For more complex projects, follow these instructions: - -1. Copy the android-project directory wherever you want to keep your projects - and rename it to the name of your project. -2. Move or symlink this SDL directory into the /jni directory -3. Edit /jni/src/Android.mk to include your source files -4. Run 'ndk-build' (a script provided by the NDK). This compiles the C source - -If you want to use the Eclipse IDE, skip to the Eclipse section below. - -5. Create /local.properties and use that to point to the Android SDK directory, by writing a line with the following form: -sdk.dir=PATH_TO_ANDROID_SDK -6. Run 'ant debug' in android/project. This compiles the .java and eventually - creates a .apk with the native code embedded -7. 'ant debug install' will push the apk to the device or emulator (if connected) - -Here's an explanation of the files in the Android project, so you can customize them: - -android-project/ - AndroidManifest.xml - package manifest. Among others, it contains the class name - of the main Activity and the package name of the application. - build.properties - empty - build.xml - build description file, used by ant. The actual application name - is specified here. - default.properties - holds the target ABI for the application, android-10 and up - project.properties - holds the target ABI for the application, android-10 and up - local.properties - holds the SDK path, you should change this to the path to your SDK - jni/ - directory holding native code - jni/Android.mk - Android makefile that can call recursively the Android.mk files - in all subdirectories - jni/SDL/ - (symlink to) directory holding the SDL library files - jni/SDL/Android.mk - Android makefile for creating the SDL shared library - jni/src/ - directory holding your C/C++ source - jni/src/Android.mk - Android makefile that you should customize to include your - source code and any library references - res/ - directory holding resources for your application - res/drawable-* - directories holding icons for different phone hardware. Could be - one dir called "drawable". - res/layout/main.xml - Usually contains a file main.xml, which declares the screen layout. - We don't need it because we use the SDL video output. - res/values/strings.xml - strings used in your application, including the application name - shown on the phone. - src/org/libsdl/app/SDLActivity.java - the Java class handling the initialization and binding - to SDL. Be very careful changing this, as the SDL library relies - on this implementation. - - -================================================================================ - Build an app with static linking of libSDL -================================================================================ - -This build uses the Android NDK module system. - -Instructions: -1. Copy the android-project directory wherever you want to keep your projects - and rename it to the name of your project. -2. Rename /jni/src/Android_static.mk to /jni/src/Android.mk - (overwrite the existing one) -3. Edit /jni/src/Android.mk to include your source files -4. create and export an environment variable named NDK_MODULE_PATH that points - to the parent directory of this SDL directory. e.g.: - - export NDK_MODULE_PATH="$PWD"/.. - -5. Edit /src/org/libsdl/app/SDLActivity.java and remove the call to - System.loadLibrary("SDL2") line 42. -6. Run 'ndk-build' (a script provided by the NDK). This compiles the C source - - -================================================================================ - Customizing your application name -================================================================================ - -To customize your application name, edit AndroidManifest.xml and replace -"org.libsdl.app" with an identifier for your product package. - -Then create a Java class extending SDLActivity and place it in a directory -under src matching your package, e.g. - src/com/gamemaker/game/MyGame.java - -Here's an example of a minimal class file: ---- MyGame.java -------------------------- -package com.gamemaker.game; - -import org.libsdl.app.SDLActivity; - -/* - * A sample wrapper class that just calls SDLActivity - */ - -public class MyGame extends SDLActivity { } - ------------------------------------------- - -Then replace "SDLActivity" in AndroidManifest.xml with the name of your -class, .e.g. "MyGame" - -================================================================================ - Customizing your application icon -================================================================================ - -Conceptually changing your icon is just replacing the "ic_launcher.png" files in -the drawable directories under the res directory. There are four directories for -different screen sizes. These can be replaced with one dir called "drawable", -containing an icon file "ic_launcher.png" with dimensions 48x48 or 72x72. - -You may need to change the name of your icon in AndroidManifest.xml to match -this icon filename. - -================================================================================ - Loading assets -================================================================================ - -Any files you put in the "assets" directory of your android-project directory -will get bundled into the application package and you can load them using the -standard functions in SDL_rwops.h. - -There are also a few Android specific functions that allow you to get other -useful paths for saving and loading data: -SDL_AndroidGetInternalStoragePath() -SDL_AndroidGetExternalStorageState() -SDL_AndroidGetExternalStoragePath() - -See SDL_system.h for more details on these functions. - -The asset packaging system will, by default, compress certain file extensions. -SDL includes two asset file access mechanisms, the preferred one is the so -called "File Descriptor" method, which is faster and doesn't involve the Dalvik -GC, but given this method does not work on compressed assets, there is also the -"Input Stream" method, which is automatically used as a fall back by SDL. You -may want to keep this fact in mind when building your APK, specially when large -files are involved. -For more information on which extensions get compressed by default and how to -disable this behaviour, see for example: - -http://ponystyle.com/blog/2010/03/26/dealing-with-asset-compression-in-android-apps/ - -================================================================================ - Pause / Resume behaviour -================================================================================ - -If SDL is compiled with SDL_ANDROID_BLOCK_ON_PAUSE defined (the default), -the event loop will block itself when the app is paused (ie, when the user -returns to the main Android dashboard). Blocking is better in terms of battery -use, and it allows your app to spring back to life instantaneously after resume -(versus polling for a resume message). - -Upon resume, SDL will attempt to restore the GL context automatically. -In modern devices (Android 3.0 and up) this will most likely succeed and your -app can continue to operate as it was. - -However, there's a chance (on older hardware, or on systems under heavy load), -where the GL context can not be restored. In that case you have to listen for -a specific message, (which is not yet implemented!) and restore your textures -manually or quit the app (which is actually the kind of behaviour you'll see -under iOS, if the OS can not restore your GL context it will just kill your app) - -================================================================================ - Threads and the Java VM -================================================================================ - -For a quick tour on how Linux native threads interoperate with the Java VM, take -a look here: http://developer.android.com/guide/practices/jni.html -If you want to use threads in your SDL app, it's strongly recommended that you -do so by creating them using SDL functions. This way, the required attach/detach -handling is managed by SDL automagically. If you have threads created by other -means and they make calls to SDL functions, make sure that you call -Android_JNI_SetupThread before doing anything else otherwise SDL will attach -your thread automatically anyway (when you make an SDL call), but it'll never -detach it. - -================================================================================ - Using STL -================================================================================ - -You can use STL in your project by creating an Application.mk file in the jni -folder and adding the following line: -APP_STL := stlport_static - -For more information check out CPLUSPLUS-SUPPORT.html in the NDK documentation. - -================================================================================ - Additional documentation -================================================================================ - -The documentation in the NDK docs directory is very helpful in understanding the -build process and how to work with native code on the Android platform. - -The best place to start is with docs/OVERVIEW.TXT - - -================================================================================ - Using Eclipse -================================================================================ - -First make sure that you've installed Eclipse and the Android extensions as described here: - http://developer.android.com/tools/sdk/eclipse-adt.html - -Once you've copied the SDL android project and customized it, you can create an Eclipse project from it: - * File -> New -> Other - * Select the Android -> Android Project wizard and click Next - * Enter the name you'd like your project to have - * Select "Create project from existing source" and browse for your project directory - * Make sure the Build Target is set to Android 2.0 - * Click Finish - - -================================================================================ - Using the emulator -================================================================================ - -There are some good tips and tricks for getting the most out of the -emulator here: http://developer.android.com/tools/devices/emulator.html - -Especially useful is the info on setting up OpenGL ES 2.0 emulation. - -Notice that this software emulator is incredibly slow and needs a lot of disk space. -Using a real device works better. - -================================================================================ - Troubleshooting -================================================================================ - -You can create and run an emulator from the Eclipse IDE: - * Window -> Android SDK and AVD Manager - -You can see if adb can see any devices with the following command: - adb devices - -You can see the output of log messages on the default device with: - adb logcat - -You can push files to the device with: - adb push local_file remote_path_and_file - -You can push files to the SD Card at /sdcard, for example: - adb push moose.dat /sdcard/moose.dat - -You can see the files on the SD card with a shell command: - adb shell ls /sdcard/ - -You can start a command shell on the default device with: - adb shell - -You can remove the library files of your project (and not the SDL lib files) with: - ndk-build clean - -You can do a build with the following command: - ndk-build - -You can see the complete command line that ndk-build is using by passing V=1 on the command line: - ndk-build V=1 - -If your application crashes in native code, you can use addr2line to convert the -addresses in the stack trace to lines in your code. - -For example, if your crash looks like this: -I/DEBUG ( 31): signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 400085d0 -I/DEBUG ( 31): r0 00000000 r1 00001000 r2 00000003 r3 400085d4 -I/DEBUG ( 31): r4 400085d0 r5 40008000 r6 afd41504 r7 436c6a7c -I/DEBUG ( 31): r8 436c6b30 r9 435c6fb0 10 435c6f9c fp 4168d82c -I/DEBUG ( 31): ip 8346aff0 sp 436c6a60 lr afd1c8ff pc afd1c902 cpsr 60000030 -I/DEBUG ( 31): #00 pc 0001c902 /system/lib/libc.so -I/DEBUG ( 31): #01 pc 0001ccf6 /system/lib/libc.so -I/DEBUG ( 31): #02 pc 000014bc /data/data/org.libsdl.app/lib/libmain.so -I/DEBUG ( 31): #03 pc 00001506 /data/data/org.libsdl.app/lib/libmain.so - -You can see that there's a crash in the C library being called from the main code. -I run addr2line with the debug version of my code: - arm-eabi-addr2line -C -f -e obj/local/armeabi/libmain.so -and then paste in the number after "pc" in the call stack, from the line that I care about: -000014bc - -I get output from addr2line showing that it's in the quit function, in testspriteminimal.c, on line 23. - -You can add logging to your code to help show what's happening: - -#include - - __android_log_print(ANDROID_LOG_INFO, "foo", "Something happened! x = %d", x); - -If you need to build without optimization turned on, you can create a file called -"Application.mk" in the jni directory, with the following line in it: -APP_OPTIM := debug - - -================================================================================ - Memory debugging -================================================================================ - -The best (and slowest) way to debug memory issues on Android is valgrind. -Valgrind has support for Android out of the box, just grab code using: - svn co svn://svn.valgrind.org/valgrind/trunk valgrind -... and follow the instructions in the file README.android to build it. - -One thing I needed to do on Mac OS X was change the path to the toolchain, -and add ranlib to the environment variables: -export RANLIB=$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi-ranlib - -Once valgrind is built, you can create a wrapper script to launch your -application with it, changing org.libsdl.app to your package identifier: ---- start_valgrind_app ------------------- -#!/system/bin/sh -export TMPDIR=/data/data/org.libsdl.app -exec /data/local/Inst/bin/valgrind --log-file=/sdcard/valgrind.log --error-limit=no $* ------------------------------------------- - -Then push it to the device: - adb push start_valgrind_app /data/local - -and make it executable: - adb shell chmod 755 /data/local/start_valgrind_app - -and tell Android to use the script to launch your application: - adb shell setprop wrap.org.libsdl.app "logwrapper /data/local/start_valgrind_app" - -If the setprop command says "could not set property", it's likely that -your package name is too long and you should make it shorter by changing -AndroidManifest.xml and the path to your class file in android-project/src - -You can then launch your application normally and waaaaaaaiiittt for it. -You can monitor the startup process with the logcat command above, and -when it's done (or even while it's running) you can grab the valgrind -output file: - adb pull /sdcard/valgrind.log - -When you're done instrumenting with valgrind, you can disable the wrapper: - adb shell setprop wrap.org.libsdl.app "" - -================================================================================ - Why is API level 10 the minimum required? -================================================================================ - -API level 10 is the minimum required level at runtime (that is, on the device) -because SDL requires some functionality for running not -available on older devices. Since the incorporation of joystick support into SDL, -the minimum SDK required to *build* SDL is version 12. Devices running API levels -10-11 are still supported, only with the joystick functionality disabled. - -Support for native OpenGL ES and ES2 applications was introduced in the NDK for -API level 4 and 8. EGL was made a stable API in the NDK for API level 9, which -has since then been obsoleted, with the recommendation to developers to bump the -required API level to 10. -As of this writing, according to http://developer.android.com/about/dashboards/index.html -about 90% of the Android devices accessing Google Play support API level 10 or -higher (March 2013). - -================================================================================ - A note regarding the use of the "dirty rectangles" rendering technique -================================================================================ - -If your app uses a variation of the "dirty rectangles" rendering technique, -where you only update a portion of the screen on each frame, you may notice a -variety of visual glitches on Android, that are not present on other platforms. -This is caused by SDL's use of EGL as the support system to handle OpenGL ES/ES2 -contexts, in particular the use of the eglSwapBuffers function. As stated in the -documentation for the function "The contents of ancillary buffers are always -undefined after calling eglSwapBuffers". -Setting the EGL_SWAP_BEHAVIOR attribute of the surface to EGL_BUFFER_PRESERVED -is not possible for SDL as it requires EGL 1.4, available only on the API level -17+, so the only workaround available on this platform is to redraw the entire -screen each frame. - -Reference: http://www.khronos.org/registry/egl/specs/EGLTechNote0001.html - -================================================================================ - Known issues -================================================================================ - -- The number of buttons reported for each joystick is hardcoded to be 36, which -is the current maximum number of buttons Android can report. - diff --git a/Engine/lib/sdl/README-cmake.txt b/Engine/lib/sdl/README-cmake.txt deleted file mode 100644 index 7f5ac80ddc..0000000000 --- a/Engine/lib/sdl/README-cmake.txt +++ /dev/null @@ -1,31 +0,0 @@ -================================================================================ -CMake build system for SDL (www.cmake.org) -================================================================================ - -SDL's build system was traditionally based on autotools. Over time, this -approach has suffered from several issues across the different supported -platforms. -To solve these problems, a new build system based on CMake is under development. -It works in parallel to the legacy system, so users can experiment with it -without complication. -While still experimental, the build system should be usable on the following -platforms: - - * FreeBSD - * Linux - * VS.NET 2010 - * MinGW and Msys - * OS X with support for XCode - -================================================================================ -Usage -================================================================================ - -Assuming the source for SDL is located at ~/sdl - -cd ~ -mkdir build -cd build -cmake ../sdl - -This will build the static and dynamic versions of SDL in the ~/build directory. diff --git a/Engine/lib/sdl/README-directfb.txt b/Engine/lib/sdl/README-directfb.txt deleted file mode 100644 index 9c16a7b67e..0000000000 --- a/Engine/lib/sdl/README-directfb.txt +++ /dev/null @@ -1,106 +0,0 @@ -SDL on DirectFB - -Supports: - -- Hardware YUV overlays -- OpenGL - software only -- 2D/3D accelerations (depends on directfb driver) -- multiple displays -- windows - -What you need: - -DirectFB 1.0.1, 1.2.x, 1.3.0 -Kernel-Framebuffer support: required: vesafb, radeonfb .... -Mesa 7.0.x - optional for OpenGL - -/etc/directfbrc - -This file should contain the following lines to make -your joystick work and avoid crashes: ------------------------- -disable-module=joystick -disable-module=cle266 -disable-module=cyber5k -no-linux-input-grab ------------------------- - -To disable to use x11 backend when DISPLAY variable is found use - -export SDL_DIRECTFB_X11_CHECK=0 - -To disable the use of linux input devices, i.e. multimice/multikeyboard support, -use - -export SDL_DIRECTFB_LINUX_INPUT=0 - -To use hardware accelerated YUV-overlays for YUV-textures, use: - -export SDL_DIRECTFB_YUV_DIRECT=1 - -This is disabled by default. It will only support one -YUV texture, namely the first. Every other YUV texture will be -rendered in software. - -In addition, you may use (directfb-1.2.x) - -export SDL_DIRECTFB_YUV_UNDERLAY=1 - -to make the YUV texture an underlay. This will make the cursor to -be shown. - -Simple Window Manager -===================== - -The driver has support for a very, very basic window manager you may -want to use when running with "wm=default". Use - -export SDL_DIRECTFB_WM=1 - -to enable basic window borders. In order to have the window title rendered, -you need to have the following font installed: - -/usr/share/fonts/truetype/freefont/FreeSans.ttf - -OpenGL Support -============== - -The following instructions will give you *software* OpenGL. However this -works at least on all directfb supported platforms. - -As of this writing 20100802 you need to pull Mesa from git and do the following: - ------------------------- -git clone git://anongit.freedesktop.org/git/mesa/mesa -cd mesa -git checkout 2c9fdaf7292423c157fc79b5ce43f0f199dd753a ------------------------- - -Edit configs/linux-directfb so that the Directories-section looks like ------------------------- -# Directories -SRC_DIRS = mesa glu -GLU_DIRS = sgi -DRIVER_DIRS = directfb -PROGRAM_DIRS = ------------------------- - -make linux-directfb -make - -echo Installing - please enter sudo pw. - -sudo make install INSTALL_DIR=/usr/local/dfb_GL -cd src/mesa/drivers/directfb -make -sudo make install INSTALL_DIR=/usr/local/dfb_GL ------------------------- - -To run the SDL - testprograms: - -export SDL_VIDEODRIVER=directfb -export LD_LIBRARY_PATH=/usr/local/dfb_GL/lib -export LD_PRELOAD=/usr/local/dfb_GL/libGL.so.7 - -./testgl - diff --git a/Engine/lib/sdl/README-dynapi.txt b/Engine/lib/sdl/README-dynapi.txt deleted file mode 100644 index da52f3a328..0000000000 --- a/Engine/lib/sdl/README-dynapi.txt +++ /dev/null @@ -1,130 +0,0 @@ -================================================================================ -Dynamic API -================================================================================ -Originally posted by Ryan at https://plus.google.com/103391075724026391227/posts/TB8UfnDYu4U - -Background: - -- The Steam Runtime has (at least in theory) a really kick-ass build of SDL2, - but developers are shipping their own SDL2 with individual Steam games. - These games might stop getting updates, but a newer SDL2 might be needed later. - Certainly we'll always be fixing bugs in SDL, even if a new video target isn't - ever needed, and these fixes won't make it to a game shipping its own SDL. -- Even if we replace the SDL2 in those games with a compatible one, that is to - say, edit a developer's Steam depot (yuck!), there are developers that are - statically linking SDL2 that we can't do this for. We can't even force the - dynamic loader to ignore their SDL2 in this case, of course. -- If you don't ship an SDL2 with the game in some form, people that disabled the - Steam Runtime, or just tried to run the game from the command line instead of - Steam might find themselves unable to run the game, due to a missing dependency. -- If you want to ship on non-Steam platforms like GOG or Humble Bundle, or target - generic Linux boxes that may or may not have SDL2 installed, you have to ship - the library or risk a total failure to launch. So now, you might have to have - a non-Steam build plus a Steam build (that is, one with and one without SDL2 - included), which is inconvenient if you could have had one universal build - that works everywhere. -- We like the zlib license, but the biggest complaint from the open source - community about the license change is the static linking. The LGPL forced this - as a legal, not technical issue, but zlib doesn't care. Even those that aren't - concerned about the GNU freedoms found themselves solving the same problems: - swapping in a newer SDL to an older game often times can save the day. - Static linking stops this dead. - -So here's what we did: - -SDL now has, internally, a table of function pointers. So, this is what SDL_Init -now looks like: - - UInt32 SDL_Init(Uint32 flags) - { - return jump_table.SDL_Init(flags); - } - -Except that is all done with a bunch of macro magic so we don't have to maintain -every one of these. - -What is jump_table.SDL_init()? Eventually, that's a function pointer of the real -SDL_Init() that you've been calling all this time. But at startup, it looks more -like this: - - Uint32 SDL_Init_DEFAULT(Uint32 flags) - { - SDL_InitDynamicAPI(); - return jump_table.SDL_Init(flags); - } - -SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function -pointers, which means that this _DEFAULT function never gets called again. -First call to any SDL function sets the whole thing up. - -So you might be asking, what was the value in that? Isn't this what the operating -system's dynamic loader was supposed to do for us? Yes, but now we've got this -level of indirection, we can do things like this: - - export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0 - ./MyGameThatIsStaticallyLinkedToSDL2 - -And now, this game that is staticallly linked to SDL, can still be overridden -with a newer, or better, SDL. The statically linked one will only be used as -far as calling into the jump table in this case. But in cases where no override -is desired, the statically linked version will provide its own jump table, -and everyone is happy. - -So now: -- Developers can statically link SDL, and users can still replace it. - (We'd still rather you ship a shared library, though!) -- Developers can ship an SDL with their game, Valve can override it for, say, - new features on SteamOS, or distros can override it for their own needs, - but it'll also just work in the default case. -- Developers can ship the same package to everyone (Humble Bundle, GOG, etc), - and it'll do the right thing. -- End users (and Valve) can update a game's SDL in almost any case, - to keep abandoned games running on newer platforms. -- Everyone develops with SDL exactly as they have been doing all along. - Same headers, same ABI. Just get the latest version to enable this magic. - - -A little more about SDL_InitDynamicAPI(): - -Internally, InitAPI does some locking to make sure everything waits until a -single thread initializes everything (although even SDL_CreateThread() goes -through here before spinning a thread, too), and then decides if it should use -an external SDL library. If not, it sets up the jump table using the current -SDL's function pointers (which might be statically linked into a program, or in -a shared library of its own). If so, it loads that library and looks for and -calls a single function: - - SInt32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize); - -That function takes a version number (more on that in a moment), the address of -the jump table, and the size, in bytes, of the table. -Now, we've got policy here: this table's layout never changes; new stuff gets -added to the end. Therefore SDL_DYNAPI_entry() knows that it can provide all -the needed functions if tablesize <= sizeof its own jump table. If tablesize is -bigger (say, SDL 2.0.4 is trying to load SDL 2.0.3), then we know to abort, but -if it's smaller, we know we can provide the entire API that the caller needs. - -The version variable is a failsafe switch. -Right now it's always 1. This number changes when there are major API changes -(so we know if the tablesize might be smaller, or entries in it have changed). -Right now SDL_DYNAPI_entry gives up if the version doesn't match, but it's not -inconceivable to have a small dispatch library that only supplies this one -function and loads different, otherwise-incompatible SDL libraries and has the -right one initialize the jump table based on the version. For something that -must generically catch lots of different versions of SDL over time, like the -Steam Client, this isn't a bad option. - -Finally, I'm sure some people are reading this and thinking -"I don't want that overhead in my project!" -To which I would point out that the extra function call through the jump table -probably wouldn't even show up in a profile, but lucky you: this can all be -disabled. You can build SDL without this if you absolutely must, but we would -encourage you not to do that. However, on heavily locked down platforms like -iOS, or maybe when debugging, it makes sense to disable it. The way this is -designed in SDL, you just have to change one #define, and the entire system -vaporizes out, and SDL functions exactly like it always did. Most of it is -macro magic, so the system is contained to one C file and a few headers. -However, this is on by default and you have to edit a header file to turn it -off. Our hopes is that if we make it easy to disable, but not too easy, -everyone will ultimately be able to get what they want, but we've gently -nudged everyone towards what we think is the best solution. diff --git a/Engine/lib/sdl/README-gesture.txt b/Engine/lib/sdl/README-gesture.txt deleted file mode 100644 index 205fb97d39..0000000000 --- a/Engine/lib/sdl/README-gesture.txt +++ /dev/null @@ -1,72 +0,0 @@ -=========================================================================== -Dollar Gestures -=========================================================================== -SDL Provides an implementation of the $1 gesture recognition system. This allows for recording, saving, loading, and performing single stroke gestures. - -Gestures can be performed with any number of fingers (the centroid of the fingers must follow the path of the gesture), but the number of fingers must be constant (a finger cannot go down in the middle of a gesture). The path of a gesture is considered the path from the time when the final finger went down, to the first time any finger comes up. - -Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this case, simply re-recording one of the gestures should result in a different ID. - -Recording: ----------- -To begin recording on a touch device call: -SDL_RecordGesture(SDL_TouchID touchId), where touchId is the id of the touch device you wish to record on, or -1 to record on all connected devices. - -Recording terminates as soon as a finger comes up. Recording is acknowledged by an SDL_DOLLARRECORD event. -A SDL_DOLLARRECORD event is a dgesture with the following fields: - -event.dgesture.touchId - the Id of the touch used to record the gesture. -event.dgesture.gestureId - the unique id of the recorded gesture. - - -Performing: ------------ -As long as there is a dollar gesture assigned to a touch, every finger-up event will also cause an SDL_DOLLARGESTURE event with the following fields: - -event.dgesture.touchId - the Id of the touch which performed the gesture. -event.dgesture.gestureId - the unique id of the closest gesture to the performed stroke. -event.dgesture.error - the difference between the gesture template and the actual performed gesture. Lower error is a better match. -event.dgesture.numFingers - the number of fingers used to draw the stroke. - -Most programs will want to define an appropriate error threshold and check to be sure that the error of a gesture is not abnormally high (an indicator that no gesture was performed). - - - -Saving: -------- -To save a template, call SDL_SaveDollarTemplate(gestureId, dst) where gestureId is the id of the gesture you want to save, and dst is an SDL_RWops pointer to the file where the gesture will be stored. - -To save all currently loaded templates, call SDL_SaveAllDollarTemplates(dst) where dst is an SDL_RWops pointer to the file where the gesture will be stored. - -Both functions return the number of gestures successfully saved. - - -Loading: --------- -To load templates from a file, call SDL_LoadDollarTemplates(touchId,src) where touchId is the id of the touch to load to (or -1 to load to all touch devices), and src is an SDL_RWops pointer to a gesture save file. - -SDL_LoadDollarTemplates returns the number of templates successfully loaded. - - - -=========================================================================== -Multi Gestures -=========================================================================== -SDL provides simple support for pinch/rotate/swipe gestures. -Every time a finger is moved an SDL_MULTIGESTURE event is sent with the following fields: - -event.mgesture.touchId - the Id of the touch on which the gesture was performed. -event.mgesture.x - the normalized x coordinate of the gesture. (0..1) -event.mgesture.y - the normalized y coordinate of the gesture. (0..1) -event.mgesture.dTheta - the amount that the fingers rotated during this motion. -event.mgesture.dDist - the amount that the fingers pinched during this motion. -event.mgesture.numFingers - the number of fingers used in the gesture. - - -=========================================================================== -Notes -=========================================================================== -For a complete example see test/testgesture.c - -Please direct questions/comments to: - jim.tla+sdl_touch@gmail.com diff --git a/Engine/lib/sdl/README-hg.txt b/Engine/lib/sdl/README-hg.txt deleted file mode 100644 index 616307c6ca..0000000000 --- a/Engine/lib/sdl/README-hg.txt +++ /dev/null @@ -1,23 +0,0 @@ -The latest development version of SDL is available via Mercurial. -Mercurial allows you to get up-to-the-minute fixes and enhancements; -as a developer works on a source tree, you can use "hg" to mirror that -source tree instead of waiting for an official release. Please look -at the Mercurial website ( http://mercurial.selenic.com/ ) for more -information on using hg, where you can also download software for -Mac OS X, Windows, and Unix systems. - - hg clone http://hg.libsdl.org/SDL - -If you are building SDL with an IDE, you will need to copy the file -include/SDL_config.h.default to include/SDL_config.h before building. - -If you are building SDL via configure, you will need to run autogen.sh -before running configure. - -There is a web interface to the subversion repository at: - - http://hg.libsdl.org/SDL/ - -There is an RSS feed available at that URL, for those that want to -track commits in real time. - diff --git a/Engine/lib/sdl/README-ios.txt b/Engine/lib/sdl/README-ios.txt deleted file mode 100644 index 60f3391dc8..0000000000 --- a/Engine/lib/sdl/README-ios.txt +++ /dev/null @@ -1,222 +0,0 @@ -============================================================================== -Building the Simple DirectMedia Layer for iPhone OS 2.0 -============================================================================== - -Requirements: Mac OS X v10.5 or later and the iPhone SDK. - -Instructions: -1. Open SDL.xcodeproj (located in Xcode-iOS/SDL) in XCode. -2. Select your desired target, and hit build. - -There are three build targets: -- libSDL.a: - Build SDL as a statically linked library -- testsdl - Build a test program (there are known test failures which are fine) -- Template: - Package a project template together with the SDL for iPhone static libraries and copies of the SDL headers. The template includes proper references to the SDL library and headers, skeleton code for a basic SDL program, and placeholder graphics for the application icon and startup screen. - -============================================================================== -Build SDL for iOS from the command line -============================================================================== - -1. cd (PATH WHERE THE SDL CODE IS)/build-scripts -2. ./iosbuild.sh - -If everything goes fine, you should see a build/ios directory, inside there's -two directories "lib" and "include". -"include" contains a copy of the SDL headers that you'll need for your project, -make sure to configure XCode to look for headers there. -"lib" contains find two files, libSDL2.a and libSDL2main.a, you have to add both -to your XCode project. These libraries contain three architectures in them, -armv6 for legacy devices, armv7, and i386 (for the simulator). -By default, iosbuild.sh will autodetect the SDK version you have installed using -xcodebuild -showsdks, and build for iOS >= 3.0, you can override this behaviour -by setting the MIN_OS_VERSION variable, ie: - -MIN_OS_VERSION=4.2 ./iosbuild.sh - -============================================================================== -Using the Simple DirectMedia Layer for iOS -============================================================================== - -FIXME: This needs to be updated for the latest methods - -Here is the easiest method: -1. Build the SDL libraries (libSDL.a and libSDLSimulator.a) and the iPhone SDL Application template. -1. Install the iPhone SDL Application template by copying it to one of XCode's template directories. I recommend creating a directory called "SDL" in "/Developer/Platforms/iOS.platform/Developer/Library/XCode/Project Templates/" and placing it there. -2. Start a new project using the template. The project should be immediately ready for use with SDL. - -Here is a more manual method: -1. Create a new iPhone view based application. -2. Build the SDL static libraries (libSDL.a and libSDLSimulator.a) for iPhone and include them in your project. XCode will ignore the library that is not currently of the correct architecture, hence your app will work both on iPhone and in the iPhone Simulator. -3. Include the SDL header files in your project. -4. Remove the ApplicationDelegate.h and ApplicationDelegate.m files -- SDL for iPhone provides its own UIApplicationDelegate. Remove MainWindow.xib -- SDL for iPhone produces its user interface programmatically. -5. Delete the contents of main.m and program your app as a regular SDL program instead. You may replace main.m with your own main.c, but you must tell XCode not to use the project prefix file, as it includes Objective-C code. - -============================================================================== -Notes -- Application events -============================================================================== - -On iOS the application goes through a fixed life cycle and you will get -notifications of state changes via application events. When these events -are delivered you must handle them in an event callback because the OS may -not give you any processing time after the events are delivered. - -e.g. - -int HandleAppEvents(void *userdata, SDL_Event *event) -{ - switch (event->type) - { - case SDL_APP_TERMINATING: - /* Terminate the app. - Shut everything down before returning from this function. - */ - return 0; - case SDL_APP_LOWMEMORY: - /* You will get this when your app is paused and iOS wants more memory. - Release as much memory as possible. - */ - return 0; - case SDL_APP_WILLENTERBACKGROUND: - /* Prepare your app to go into the background. Stop loops, etc. - This gets called when the user hits the home button, or gets a call. - */ - return 0; - case SDL_APP_DIDENTERBACKGROUND: - /* This will get called if the user accepted whatever sent your app to the background. - If the user got a phone call and canceled it, you'll instead get an SDL_APP_DIDENTERFOREGROUND event and restart your loops. - When you get this, you have 5 seconds to save all your state or the app will be terminated. - Your app is NOT active at this point. - */ - return 0; - case SDL_APP_WILLENTERFOREGROUND: - /* This call happens when your app is coming back to the foreground. - Restore all your state here. - */ - return 0; - case SDL_APP_DIDENTERFOREGROUND: - /* Restart your loops here. - Your app is interactive and getting CPU again. - */ - return 0; - default: - /* No special processing, add it to the event queue */ - return 1; - } -} - -int main(int argc, char *argv[]) -{ - SDL_SetEventFilter(HandleAppEvents, NULL); - - ... run your main loop - - return 0; -} - - -============================================================================== -Notes -- Accelerometer as Joystick -============================================================================== - -SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory. - -The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF. - -============================================================================== -Notes -- OpenGL ES -============================================================================== - -Your SDL application for iPhone uses OpenGL ES for video by default. - -OpenGL ES for iPhone supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute. - -If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0. - -Finally, if your application completely redraws the screen each frame, you may find significant performance improvement by setting the attribute SDL_GL_RETAINED_BACKING to 1. - -============================================================================== -Notes -- Keyboard -============================================================================== - -The SDL keyboard API has been extended to support on-screen keyboards: - -void SDL_StartTextInput() - -- enables text events and reveals the onscreen keyboard. -void SDL_StopTextInput() - -- disables text events and hides the onscreen keyboard. -SDL_bool SDL_IsTextInputActive() - -- returns whether or not text events are enabled (and the onscreen keyboard is visible) - -============================================================================== -Notes -- Reading and Writing files -============================================================================== - -Each application installed on iPhone resides in a sandbox which includes its own Application Home directory. Your application may not access files outside this directory. - -Once your application is installed its directory tree looks like: - -MySDLApp Home/ - MySDLApp.app - Documents/ - Library/ - Preferences/ - tmp/ - -When your SDL based iPhone application starts up, it sets the working directory to the main bundle (MySDLApp Home/MySDLApp.app), where your application resources are stored. You cannot write to this directory. Instead, I advise you to write document files to "../Documents/" and preferences to "../Library/Preferences". - -More information on this subject is available here: -http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html - -============================================================================== -Notes -- iPhone SDL limitations -============================================================================== - -Windows: - Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow the flag SDL_WINDOW_BORDERLESS). - -Textures: - The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats. - -Loading Shared Objects: - This is disabled by default since it seems to break the terms of the iPhone SDK agreement. It can be re-enabled in SDL_config_iphoneos.h. - -============================================================================== -Game Center -============================================================================== - -Game Center integration requires that you break up your main loop in order to yield control back to the system. In other words, instead of running an endless main loop, you run each frame in a callback function, using: - -int SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, void (*callback)(void*), void *callbackParam); - -This will set up the given function to be called back on the animation callback, and then you have to return from main() to let the Cocoa event loop run. - -e.g. - -extern "C" -void ShowFrame(void*) -{ - ... do event handling, frame logic and rendering -} - -int main(int argc, char *argv[]) -{ - ... initialize game ... - -#if __IPHONEOS__ - // Initialize the Game Center for scoring and matchmaking - InitGameCenter(); - - // Set up the game to run in the window animation callback on iOS - // so that Game Center and so forth works correctly. - SDL_iPhoneSetAnimationCallback(window, 1, ShowFrame, NULL); -#else - while ( running ) { - ShowFrame(0); - DelayFrame(); - } -#endif - return 0; -} diff --git a/Engine/lib/sdl/README-linux.txt b/Engine/lib/sdl/README-linux.txt deleted file mode 100644 index e0f029d810..0000000000 --- a/Engine/lib/sdl/README-linux.txt +++ /dev/null @@ -1,80 +0,0 @@ -================================================================================ -Simple DirectMedia Layer for Linux -================================================================================ - -By default SDL will only link against glibc, the rest of the features will be -enabled dynamically at runtime depending on the available features on the target -system. So, for example if you built SDL with Xinerama support and the target -system does not have the Xinerama libraries installed, it will be disabled -at runtime, and you won't get a missing library error, at least with the -default configuration parameters. - - -================================================================================ -Build Dependencies -================================================================================ - -Ubuntu 13.04, all available features enabled: - -sudo apt-get install build-essential mercurial make cmake autoconf automake \ -libtool libasound2-dev libpulse-dev libaudio-dev libx11-dev libxext-dev \ -libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev \ -libxss-dev libgl1-mesa-dev libesd0-dev libdbus-1-dev libudev-dev \ -libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev - -NOTES: -- This includes all the audio targets except arts, because Ubuntu pulled the - artsc0-dev package, but in theory SDL still supports it. -- DirectFB isn't included because the configure script (currently) fails to find - it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the - configure script to include DirectFB support. Send patches. :) - - -================================================================================ -Joystick does not work -================================================================================ - -If you compiled or are using a version of SDL with udev support (and you should!) -there's a few issues that may cause SDL to fail to detect your joystick. To -debug this, start by installing the evtest utility. On Ubuntu/Debian: - - sudo apt-get install evtest - -Then run: - - sudo evtest - -You'll hopefully see your joystick listed along with a name like "/dev/input/eventXX" -Now run: - - cat /dev/input/event/XX - -If you get a permission error, you need to set a udev rule to change the mode of -your device (see below) - -Also, try: - - sudo udevadm info --query=all --name=input/eventXX - -If you see a line stating ID_INPUT_JOYSTICK=1, great, if you don't see it, -you need to set up an udev rule to force this variable. - -A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks -like: - - SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" - SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" - -You can set up similar rules for your device by changing the values listed in -idProduct and idVendor. To obtain these values, try: - - sudo udevadm info -a --name=input/eventXX | grep idVendor - sudo udevadm info -a --name=input/eventXX | grep idProduct - -If multiple values come up for each of these, the one you want is the first one of each. - -On other systems which ship with an older udev (such as CentOS), you may need -to set up a rule such as: - - SUBSYSTEM=="input", ENV{ID_CLASS}=="joystick", ENV{ID_INPUT_JOYSTICK}="1" - diff --git a/Engine/lib/sdl/README-macosx.txt b/Engine/lib/sdl/README-macosx.txt deleted file mode 100644 index 35d70b7591..0000000000 --- a/Engine/lib/sdl/README-macosx.txt +++ /dev/null @@ -1,226 +0,0 @@ -============================================================================== -Using the Simple DirectMedia Layer with Mac OS X -============================================================================== - -These instructions are for people using Apple's Mac OS X (pronounced -"ten"). - -From the developer's point of view, OS X is a sort of hybrid Mac and -Unix system, and you have the option of using either traditional -command line tools or Apple's IDE Xcode. - -To build SDL using the command line, use the standard configure and make -process: - - ./configure - make - sudo make install - -You can also build SDL as a Universal library (a single binary for both -32-bit and 64-bit Intel architectures), on Mac OS X 10.7 and newer, by using -the fatbuild.sh script in build-scripts: - sh build-scripts/fatbuild.sh - sudo build-scripts/fatbuild.sh install -This script builds SDL with 10.5 ABI compatibility on i386 and 10.6 -ABI compatibility on x86_64 architectures. For best compatibility you -should compile your application the same way. A script which wraps -gcc to make this easy is provided in test/gcc-fat.sh - -Please note that building SDL requires at least Xcode 4.6 and the 10.7 SDK -(even if you target back to 10.5 systems). PowerPC support for Mac OS X has -been officially dropped as of SDL 2.0.2. - -To use the library once it's built, you essential have two possibilities: -use the traditional autoconf/automake/make method, or use Xcode. - -============================================================================== -Caveats for using SDL with Mac OS X -============================================================================== - -Some things you have to be aware of when using SDL on Mac OS X: - -- If you register your own NSApplicationDelegate (using [NSApp setDelegate:]), - SDL will not register its own. This means that SDL will not terminate using - SDL_Quit if it receives a termination request, it will terminate like a - normal app, and it will not send a SDL_DROPFILE when you request to open a - file with the app. To solve these issues, put the following code in your - NSApplicationDelegate implementation: - - - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender - { - if (SDL_GetEventState(SDL_QUIT) == SDL_ENABLE) { - SDL_Event event; - event.type = SDL_QUIT; - SDL_PushEvent(&event); - } - - return NSTerminateCancel; - } - - - (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename - { - if (SDL_GetEventState(SDL_DROPFILE) == SDL_ENABLE) { - SDL_Event event; - event.type = SDL_DROPFILE; - event.drop.file = SDL_strdup([filename UTF8String]); - return (SDL_PushEvent(&event) > 0); - } - - return NO; - } - -============================================================================== -Using the Simple DirectMedia Layer with a traditional Makefile -============================================================================== - -An existing autoconf/automake build system for your SDL app has good chances -to work almost unchanged on OS X. However, to produce a "real" Mac OS X binary -that you can distribute to users, you need to put the generated binary into a -so called "bundle", which basically is a fancy folder with a name like -"MyCoolGame.app". - -To get this build automatically, add something like the following rule to -your Makefile.am: - -bundle_contents = APP_NAME.app/Contents -APP_NAME_bundle: EXE_NAME - mkdir -p $(bundle_contents)/MacOS - mkdir -p $(bundle_contents)/Resources - echo "APPL????" > $(bundle_contents)/PkgInfo - $(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/ - -You should replace EXE_NAME with the name of the executable. APP_NAME is what -will be visible to the user in the Finder. Usually it will be the same -as EXE_NAME but capitalized. E.g. if EXE_NAME is "testgame" then APP_NAME -usually is "TestGame". You might also want to use @PACKAGE@ to use the package -name as specified in your configure.in file. - -If your project builds more than one application, you will have to do a bit -more. For each of your target applications, you need a separate rule. - -If you want the created bundles to be installed, you may want to add this -rule to your Makefile.am: - -install-exec-hook: APP_NAME_bundle - rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app - mkdir -p $(DESTDIR)$(prefix)/Applications/ - cp -r $< /$(DESTDIR)$(prefix)Applications/ - -This rule takes the Bundle created by the rule from step 3 and installs them -into $(DESTDIR)$(prefix)/Applications/. - -Again, if you want to install multiple applications, you will have to augment -the make rule accordingly. - - -But beware! That is only part of the story! With the above, you end up with -a bare bone .app bundle, which is double clickable from the Finder. But -there are some more things you should do before shipping your product... - -1) The bundle right now probably is dynamically linked against SDL. That - means that when you copy it to another computer, *it will not run*, - unless you also install SDL on that other computer. A good solution - for this dilemma is to static link against SDL. On OS X, you can - achieve that by linking against the libraries listed by - sdl-config --static-libs - instead of those listed by - sdl-config --libs - Depending on how exactly SDL is integrated into your build systems, the - way to achieve that varies, so I won't describe it here in detail -2) Add an 'Info.plist' to your application. That is a special XML file which - contains some meta-information about your application (like some copyright - information, the version of your app, the name of an optional icon file, - and other things). Part of that information is displayed by the Finder - when you click on the .app, or if you look at the "Get Info" window. - More information about Info.plist files can be found on Apple's homepage. - - -As a final remark, let me add that I use some of the techniques (and some -variations of them) in Exult and ScummVM; both are available in source on -the net, so feel free to take a peek at them for inspiration! - - -============================================================================== -Using the Simple DirectMedia Layer with Xcode -============================================================================== - -These instructions are for using Apple's Xcode IDE to build SDL applications. - -- First steps - -The first thing to do is to unpack the Xcode.tar.gz archive in the -top level SDL directory (where the Xcode.tar.gz archive resides). -Because Stuffit Expander will unpack the archive into a subdirectory, -you should unpack the archive manually from the command line: - cd [path_to_SDL_source] - tar zxf Xcode.tar.gz -This will create a new folder called Xcode, which you can browse -normally from the Finder. - -- Building the Framework - -The SDL Library is packaged as a framework bundle, an organized -relocatable folder hierarchy of executable code, interface headers, -and additional resources. For practical purposes, you can think of a -framework as a more user and system-friendly shared library, whose library -file behaves more or less like a standard UNIX shared library. - -To build the framework, simply open the framework project and build it. -By default, the framework bundle "SDL.framework" is installed in -/Library/Frameworks. Therefore, the testers and project stationary expect -it to be located there. However, it will function the same in any of the -following locations: - - ~/Library/Frameworks - /Local/Library/Frameworks - /System/Library/Frameworks - -- Build Options - There are two "Build Styles" (See the "Targets" tab) for SDL. - "Deployment" should be used if you aren't tweaking the SDL library. - "Development" should be used to debug SDL apps or the library itself. - -- Building the Testers - Open the SDLTest project and build away! - -- Using the Project Stationary - Copy the stationary to the indicated folders to access it from - the "New Project" and "Add target" menus. What could be easier? - -- Setting up a new project by hand - Some of you won't want to use the Stationary so I'll give some tips: - * Create a new "Cocoa Application" - * Add src/main/macosx/SDLMain.m , .h and .nib to your project - * Remove "main.c" from your project - * Remove "MainMenu.nib" from your project - * Add "$(HOME)/Library/Frameworks/SDL.framework/Headers" to include path - * Add "$(HOME)/Library/Frameworks" to the frameworks search path - * Add "-framework SDL -framework Foundation -framework AppKit" to "OTHER_LDFLAGS" - * Set the "Main Nib File" under "Application Settings" to "SDLMain.nib" - * Add your files - * Clean and build - -- Building from command line - Use pbxbuild in the same directory as your .pbproj file - -- Running your app - You can send command line args to your app by either invoking it from - the command line (in *.app/Contents/MacOS) or by entering them in the - "Executables" panel of the target settings. - -- Implementation Notes - Some things that may be of interest about how it all works... - * Working directory - As defined in the SDL_main.m file, the working directory of your SDL app - is by default set to its parent. You may wish to change this to better - suit your needs. - * You have a Cocoa App! - Your SDL app is essentially a Cocoa application. When your app - starts up and the libraries finish loading, a Cocoa procedure is called, - which sets up the working directory and calls your main() method. - You are free to modify your Cocoa app with generally no consequence - to SDL. You cannot, however, easily change the SDL window itself. - Functionality may be added in the future to help this. - - -Known bugs are listed in the file "BUGS" diff --git a/Engine/lib/sdl/README-pandora.txt b/Engine/lib/sdl/README-pandora.txt deleted file mode 100644 index d522bc77aa..0000000000 --- a/Engine/lib/sdl/README-pandora.txt +++ /dev/null @@ -1,16 +0,0 @@ -SDL 2.0 with open pandora console support ( http://openpandora.org/ ) -===================================================================== - -- A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES -support to work on the pandora under the framebuffer. This driver do not have -input support for now, so if you use it you will have to add your own control code. -The video driver name is "pandora" so if you have problem running it from -the framebuffer, try to set the following variable before starting your application : -"export SDL_VIDEODRIVER=pandora" - -- OpenGL ES support was added to the x11 driver, so it's working like the normal -x11 driver one with OpenGLX support, with SDL input event's etc.. - - -David Carré (Cpasjuste) -cpasjuste@gmail.com diff --git a/Engine/lib/sdl/README-platforms.txt b/Engine/lib/sdl/README-platforms.txt deleted file mode 100644 index 2a099cd4b6..0000000000 --- a/Engine/lib/sdl/README-platforms.txt +++ /dev/null @@ -1,30 +0,0 @@ - -This is a list of the platforms SDL supports, and who maintains them. - -Officially supported platforms -============================== -(code compiles, and thoroughly tested for release) -============================== -Windows XP/Vista/7/8 -Mac OS X 10.5+ -Linux 2.6+ -iOS 5.1.1+ -Android 2.3.3+ - -Unofficially supported platforms -================================ -(code compiles, but not thoroughly tested) -================================ -FreeBSD -NetBSD -OpenBSD -Solaris - -Platforms supported by volunteers -================================= -Haiku - maintained by Axel Dörfler -PSP - maintained by 527721088@qq.com -Pandora - maintained by Scott Smith - -Platforms that need maintainers -=============================== diff --git a/Engine/lib/sdl/README-porting.txt b/Engine/lib/sdl/README-porting.txt deleted file mode 100644 index f8540b600b..0000000000 --- a/Engine/lib/sdl/README-porting.txt +++ /dev/null @@ -1,61 +0,0 @@ - -* Porting To A New Platform - - The first thing you have to do when porting to a new platform, is look at -include/SDL_platform.h and create an entry there for your operating system. -The standard format is __PLATFORM__, where PLATFORM is the name of the OS. -Ideally SDL_platform.h will be able to auto-detect the system it's building -on based on C preprocessor symbols. - -There are two basic ways of building SDL at the moment: - -1. The "UNIX" way: ./configure; make; make install - - If you have a GNUish system, then you might try this. Edit configure.in, - take a look at the large section labelled: - "Set up the configuration based on the target platform!" - Add a section for your platform, and then re-run autogen.sh and build! - -2. Using an IDE: - - If you're using an IDE or other non-configure build system, you'll probably - want to create a custom SDL_config.h for your platform. Edit SDL_config.h, - add a section for your platform, and create a custom SDL_config_{platform}.h, - based on SDL_config.h.minimal and SDL_config.h.in - - Add the top level include directory to the header search path, and then add - the following sources to the project: - src/*.c - src/atomic/*.c - src/audio/*.c - src/cpuinfo/*.c - src/events/*.c - src/file/*.c - src/haptic/*.c - src/joystick/*.c - src/power/*.c - src/render/*.c - src/stdlib/*.c - src/thread/*.c - src/timer/*.c - src/video/*.c - src/audio/disk/*.c - src/audio/dummy/*.c - src/video/dummy/*.c - src/haptic/dummy/*.c - src/joystick/dummy/*.c - src/main/dummy/*.c - src/thread/generic/*.c - src/timer/dummy/*.c - src/loadso/dummy/*.c - - -Once you have a working library without any drivers, you can go back to each -of the major subsystems and start implementing drivers for your platform. - -If you have any questions, don't hesitate to ask on the SDL mailing list: - http://www.libsdl.org/mailing-list.php - -Enjoy! - Sam Lantinga (slouken@libsdl.org) - diff --git a/Engine/lib/sdl/README-psp.txt b/Engine/lib/sdl/README-psp.txt deleted file mode 100644 index d30842057a..0000000000 --- a/Engine/lib/sdl/README-psp.txt +++ /dev/null @@ -1,17 +0,0 @@ -SDL port for the Sony PSP contributed by - Captian Lex - -Credit to - Marcus R.Brown,Jim Paris,Matthew H for the original SDL 1.2 for PSP - Geecko for his PSP GU lib "Glib2d" - -Building --------- -To build for the PSP, make sure psp-config is in the path and run: - make -f Makefile.psp - - - -To Do ------- -PSP Screen Keyboard diff --git a/Engine/lib/sdl/README-raspberrypi.txt b/Engine/lib/sdl/README-raspberrypi.txt deleted file mode 100644 index bfc3f8b8c0..0000000000 --- a/Engine/lib/sdl/README-raspberrypi.txt +++ /dev/null @@ -1,161 +0,0 @@ -================================================================================ -SDL2 for Raspberry Pi -================================================================================ - -Requirements: - -Raspbian (other Linux distros may work as well). - -================================================================================ - Features -================================================================================ - -* Works without X11 -* Hardware accelerated OpenGL ES 2.x -* Sound via ALSA -* Input (mouse/keyboard/joystick) via EVDEV -* Hotplugging of input devices via UDEV - -================================================================================ - Raspbian Build Dependencies -================================================================================ - -sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev - -You also need the VideoCore binary stuff that ships in /opt/vc for EGL and -OpenGL ES 2.x, it usually comes pre installed, but in any case: - -sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev - -================================================================================ - Cross compiling from x86 Linux -================================================================================ - -To cross compile SDL for Raspbian from your desktop machine, you'll need a -Raspbian system root and the cross compilation tools. We'll assume these tools -will be placed in /opt/rpi-tools - - sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools - -You'll also need a Rasbian binary image. -Get it from: http://downloads.raspberrypi.org/raspbian_latest -After unzipping, you'll get file with a name like: -wheezy-raspbian.img -Let's assume the sysroot will be built in /opt/rpi-sysroot. - - export SYSROOT=/opt/rpi-sysroot - sudo kpartx -a -v .img - sudo mount -o loop /dev/mapper/loop0p2 /mnt - sudo cp -r /mnt $SYSROOT - sudo apt-get install qemu binfmt-support qemu-user-static - sudo cp /usr/bin/qemu-arm-static $SYSROOT/usr/bin - sudo mount --bind /dev $SYSROOT/dev - sudo mount --bind /proc $SYSROOT/proc - sudo mount --bind /sys $SYSROOT/sys - -Now, before chrooting into the ARM sysroot, you'll need to apply a workaround, -edit $SYSROOT/etc/ld.so.preload and comment out all lines in it. - - sudo chroot $SYSROOT - apt-get install libudev-dev libasound2-dev libdbus-1-dev libraspberrypi0 libraspberrypi-bin libraspberrypi-dev libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev libxss-dev - exit - sudo umount $SYSROOT/dev - sudo umount $SYSROOT/proc - sudo umount $SYSROOT/sys - sudo umount /mnt - -There's one more fix required, as the libdl.so symlink uses an absolute path -which doesn't quite work in our setup. - - sudo rm -rf $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so - sudo ln -s ../../../lib/arm-linux-gnueabihf/libdl.so.2 $SYSROOT/usr/lib/arm-linux-gnueabihf/libdl.so - -The final step is compiling SDL itself. - - export CC="/opt/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc --sysroot=$SYSROOT -I$SYSROOT/opt/vc/include -I$SYSROOT/usr/include -I$SYSROOT/opt/vc/include/interface/vcos/pthreads -I$SYSROOT/opt/vc/include/interface/vmcs_host/linux" - cd - mkdir -p build;cd build - ../configure --with-sysroot=$SYSROOT --host=arm-raspberry-linux-gnueabihf --prefix=$PWD/rpi-sdl2-installed --disable-pulseaudio --disable-esd - make - make install - -To be able to deploy this to /usr/local in the Raspbian system you need to fix up a few paths: - - perl -w -pi -e "s#$PWD/rpi-sdl2-installed#/usr/local#g;" ./rpi-sdl2-installed/lib/libSDL2.la ./rpi-sdl2-installed/lib/pkgconfig/sdl2.pc ./rpi-sdl2-installed/bin/sdl2-config - -================================================================================ - Apps don't work or poor video/audio performance -================================================================================ - -If you get sound problems, buffer underruns, etc, run "sudo rpi-update" to -update the RPi's firmware. Note that doing so will fix these problems, but it -will also render the CMA - Dynamic Memory Split functionality useless. - -Also, by default the Raspbian distro configures the GPU RAM at 64MB, this is too -low in general, specially if a 1080p TV is hooked up. - -See here how to configure this setting: http://elinux.org/RPiconfig - -Using a fixed gpu_mem=128 is the best option (specially if you updated the -firmware, using CMA probably won't work, at least it's the current case). - -================================================================================ - No input -================================================================================ - -Make sure you belong to the "input" group. - - sudo usermod -aG input `whoami` - -================================================================================ - No HDMI Audio -================================================================================ - -If you notice that ALSA works but there's no audio over HDMI, try adding: - - hdmi_drive=2 - -to your config.txt file and reboot. - -Reference: http://www.raspberrypi.org/phpBB3/viewtopic.php?t=5062 - -================================================================================ - Text Input API support -================================================================================ - -The Text Input API is supported, with translation of scan codes done via the -kernel symbol tables. For this to work, SDL needs access to a valid console. -If you notice there's no SDL_TEXTINPUT message being emitted, double check that -your app has read access to one of the following: - -* /proc/self/fd/0 -* /dev/tty -* /dev/tty[0...6] -* /dev/vc/0 -* /dev/console - -This is usually not a problem if you run from the physical terminal (as opposed -to running from a pseudo terminal, such as via SSH). If running from a PTS, a -quick workaround is to run your app as root or add yourself to the tty group, -then re login to the system. - - sudo usermod -aG tty `whoami` - -The keyboard layout used by SDL is the same as the one the kernel uses. -To configure the layout on Raspbian: - - sudo dpkg-reconfigure keyboard-configuration - -To configure the locale, which controls which keys are interpreted as letters, -this determining the CAPS LOCK behavior: - - sudo dpkg-reconfigure locales - -================================================================================ - Notes -================================================================================ - -* When launching apps remotely (via SSH), SDL can prevent local keystrokes from - leaking into the console only if it has root privileges. Launching apps locally - does not suffer from this issue. - - diff --git a/Engine/lib/sdl/README-touch.txt b/Engine/lib/sdl/README-touch.txt deleted file mode 100644 index 6b41707ed5..0000000000 --- a/Engine/lib/sdl/README-touch.txt +++ /dev/null @@ -1,84 +0,0 @@ -=========================================================================== -System Specific Notes -=========================================================================== -Linux: -The linux touch system is currently based off event streams, and proc/bus/devices. The active user must be given permissions to read /dev/input/TOUCHDEVICE, where TOUCHDEVICE is the event stream for your device. Currently only Wacom tablets are supported. If you have an unsupported tablet contact me at jim.tla+sdl_touch@gmail.com and I will help you get support for it. - -Mac: -The Mac and iPhone APIs are pretty. If your touch device supports them then you'll be fine. If it doesn't, then there isn't much we can do. - -iPhone: -Works out of box. - -Windows: -Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com - -=========================================================================== -Events -=========================================================================== -SDL_FINGERDOWN: -Sent when a finger (or stylus) is placed on a touch device. -Fields: -event.tfinger.touchId - the Id of the touch device. -event.tfinger.fingerId - the Id of the finger which just went down. -event.tfinger.x - the x coordinate of the touch (0..1) -event.tfinger.y - the y coordinate of the touch (0..1) -event.tfinger.pressure - the pressure of the touch (0..1) - -SDL_FINGERMOTION: -Sent when a finger (or stylus) is moved on the touch device. -Fields: -Same as SDL_FINGERDOWN but with additional: -event.tfinger.dx - change in x coordinate during this motion event. -event.tfinger.dy - change in y coordinate during this motion event. - -SDL_FINGERUP: -Sent when a finger (or stylus) is lifted from the touch device. -Fields: -Same as SDL_FINGERDOWN. - - -=========================================================================== -Functions -=========================================================================== -SDL provides the ability to access the underlying Finger structures. -These structures should _never_ be modified. - -The following functions are included from SDL_touch.h - -To get a SDL_TouchID call SDL_GetTouchDevice(index). -This returns a SDL_TouchID. -IMPORTANT: If the touch has been removed, or there is no touch with the given ID, SDL_GetTouchID will return 0. Be sure to check for this! - -The number of touch devices can be queried with SDL_GetNumTouchDevices(). - -A SDL_TouchID may be used to get pointers to SDL_Finger. - -SDL_GetNumTouchFingers(touchID) may be used to get the number of fingers currently down on the device. - -The most common reason to access SDL_Finger is to query the fingers outside the event. In most cases accessing the fingers is using the event. This would be accomplished by code like the following: - - float x = event.tfinger.x; - float y = event.tfinger.y; - - - -To get a SDL_Finger, call SDL_GetTouchFinger(touchID,index), where touchID is a SDL_TouchID, and index is the requested finger. -This returns a SDL_Finger*, or NULL if the finger does not exist, or has been removed. -A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled. -As a result, be very careful to check for NULL return values. - -A SDL_Finger has the following fields: ->x,y,pressure: - The current coordinates of the touch. ->pressure: - The pressure of the touch. - -=========================================================================== -Notes -=========================================================================== -For a complete example see test/testgesture.c - -Please direct questions/comments to: - jim.tla+sdl_touch@gmail.com - (original author, API was changed since) diff --git a/Engine/lib/sdl/README-wince.txt b/Engine/lib/sdl/README-wince.txt deleted file mode 100644 index 9ebc695a72..0000000000 --- a/Engine/lib/sdl/README-wince.txt +++ /dev/null @@ -1,8 +0,0 @@ - -Windows CE is no longer supported by SDL. - -We have left the CE support in SDL 1.2 for those that must have it, and we -have support for Windows Phone 8 and WinRT in SDL2, as of SDL 2.0.3. - ---ryan. - diff --git a/Engine/lib/sdl/README-windows.txt b/Engine/lib/sdl/README-windows.txt deleted file mode 100644 index 7f9c4a35f2..0000000000 --- a/Engine/lib/sdl/README-windows.txt +++ /dev/null @@ -1,42 +0,0 @@ -================================================================================ -Simple DirectMedia Layer for Windows -================================================================================ - -================================================================================ -OpenGL ES 2.x support -================================================================================ - -SDL has support for OpenGL ES 2.x under Windows via two alternative -implementations. -The most straightforward method consists in running your app in a system with -a graphic card paired with a relatively recent (as of November of 2013) driver -which supports the WGL_EXT_create_context_es2_profile extension. Vendors known -to ship said extension on Windows currently include nVidia and Intel. - -The other method involves using the ANGLE library (https://code.google.com/p/angleproject/) -If an OpenGL ES 2.x context is requested and no WGL_EXT_create_context_es2_profile -extension is found, SDL will try to load the libEGL.dll library provided by -ANGLE. -To obtain the ANGLE binaries, you can either compile from source from -https://chromium.googlesource.com/angle/angle or copy the relevant binaries from -a recent Chrome/Chromium install for Windows. The files you need are: - - * libEGL.dll - * libGLESv2.dll - * d3dcompiler_46.dll (supports Windows Vista or later, better shader compiler) - or... - * d3dcompiler_43.dll (supports Windows XP or later) - -If you compile ANGLE from source, you can configure it so it does not need the -d3dcompiler_* DLL at all (for details on this, see their documentation). -However, by default SDL will try to preload the d3dcompiler_46.dll to -comply with ANGLE's requirements. If you wish SDL to preload d3dcompiler_43.dll (to -support Windows XP) or to skip this step at all, you can use the -SDL_HINT_VIDEO_WIN_D3DCOMPILER hint (see SDL_hints.h for more details). - -Known Bugs: - - * SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears - that there's a bug in the library which prevents the window contents from - refreshing if this is set to anything other than the default value. - diff --git a/Engine/lib/sdl/README.txt b/Engine/lib/sdl/README.txt index b9f80ee737..f76a633ba5 100644 --- a/Engine/lib/sdl/README.txt +++ b/Engine/lib/sdl/README.txt @@ -14,29 +14,8 @@ hardware via OpenGL and Direct3D. It is used by video playback software, emulators, and popular games including Valve's award winning catalog and many Humble Bundle games. -SDL officially supports Windows, Mac OS X, Linux, iOS, and Android. -Support for other platforms may be found in the source code. - -SDL is written in C, works natively with C++, and there are bindings -available for several other languages, including C# and Python. - -This library is distributed under the zlib license, which can be found -in the file "COPYING.txt". - -The best way to learn how to use SDL is to check out the header files in -the "include" subdirectory and the programs in the "test" subdirectory. -The header files and test programs are well commented and always up to date. -More documentation and FAQs are available online at: - http://wiki.libsdl.org/ - -If you need help with the library, or just want to discuss SDL related -issues, you can join the developers mailing list: - http://www.libsdl.org/mailing-list.php - -If you want to report bugs or contribute patches, please submit them to -bugzilla: - http://bugzilla.libsdl.org/ +More extensive documentation is available in the docs directory, starting +with README.md Enjoy! Sam Lantinga (slouken@libsdl.org) - diff --git a/Engine/lib/sdl/SDL2.spec b/Engine/lib/sdl/SDL2.spec index e8220c170f..0fe57540f1 100644 --- a/Engine/lib/sdl/SDL2.spec +++ b/Engine/lib/sdl/SDL2.spec @@ -1,7 +1,7 @@ Summary: Simple DirectMedia Layer Name: SDL2 -Version: 2.0.3 -Release: 1 +Version: 2.0.4 +Release: 2 Source: http://www.libsdl.org/release/%{name}-%{version}.tar.gz URL: http://www.libsdl.org/ License: zlib @@ -63,12 +63,12 @@ rm -rf $RPM_BUILD_ROOT %files %{__defattr} -%doc README-SDL.txt COPYING.txt CREDITS.txt BUGS.txt +%doc README*.txt COPYING.txt CREDITS.txt BUGS.txt %{_libdir}/lib*.%{__soext}.* %files devel %{__defattr} -%doc README README-SDL.txt COPYING CREDITS BUGS WhatsNew +%doc docs/README*.md %{_bindir}/*-config %{_libdir}/lib*.a %{_libdir}/lib*.la @@ -78,13 +78,19 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/aclocal/* %changelog +* Thu Jun 04 2015 Ryan C. Gordon +- Fixed README paths. + +* Sun Dec 07 2014 Simone Contini +- Fixed changelog date issue and docs filenames + * Sun Jan 22 2012 Sam Lantinga - Updated for SDL 2.0 * Tue May 16 2006 Sam Lantinga - Removed support for Darwin, due to build problems on ps2linux -* Mon Jan 03 2004 Anders Bjorklund +* Sat Jan 03 2004 Anders Bjorklund - Added support for Darwin, updated spec file * Wed Jan 19 2000 Sam Lantinga diff --git a/Engine/lib/sdl/SDL2.spec.in b/Engine/lib/sdl/SDL2.spec.in index 2a5c479242..dba240037f 100644 --- a/Engine/lib/sdl/SDL2.spec.in +++ b/Engine/lib/sdl/SDL2.spec.in @@ -1,7 +1,7 @@ Summary: Simple DirectMedia Layer Name: SDL2 Version: @SDL_VERSION@ -Release: 1 +Release: 2 Source: http://www.libsdl.org/release/%{name}-%{version}.tar.gz URL: http://www.libsdl.org/ License: zlib @@ -63,12 +63,12 @@ rm -rf $RPM_BUILD_ROOT %files %{__defattr} -%doc README-SDL.txt COPYING.txt CREDITS.txt BUGS.txt +%doc README*.txt COPYING.txt CREDITS.txt BUGS.txt %{_libdir}/lib*.%{__soext}.* %files devel %{__defattr} -%doc README README-SDL.txt COPYING CREDITS BUGS WhatsNew +%doc docs/README*.md %{_bindir}/*-config %{_libdir}/lib*.a %{_libdir}/lib*.la @@ -78,13 +78,19 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/aclocal/* %changelog +* Thu Jun 04 2015 Ryan C. Gordon +- Fixed README paths. + +* Sun Dec 07 2014 Simone Contini +- Fixed changelog date issue and docs filenames + * Sun Jan 22 2012 Sam Lantinga - Updated for SDL 2.0 * Tue May 16 2006 Sam Lantinga - Removed support for Darwin, due to build problems on ps2linux -* Mon Jan 03 2004 Anders Bjorklund +* Sat Jan 03 2004 Anders Bjorklund - Added support for Darwin, updated spec file * Wed Jan 19 2000 Sam Lantinga diff --git a/Engine/lib/sdl/VisualC.html b/Engine/lib/sdl/VisualC.html index a25907bd93..89035d6776 100644 --- a/Engine/lib/sdl/VisualC.html +++ b/Engine/lib/sdl/VisualC.html @@ -22,8 +22,7 @@

There are different solution files for the various versions of the IDE. Please use the appropiate version - 2008, 2010 or 2012; the 2010EE and 2012EE files - should be used with the "Express Edition" releases. + 2008, 2010, 2012 or 2013.

Build the .dll and .lib files. @@ -111,8 +110,8 @@

Now create the basic body of your project. The body of your program should take - the following form: -

+			the following form:
+			

 #include "SDL.h"
 
 int main( int argc, char* argv[] )
@@ -120,8 +119,7 @@ 

// Body of the program goes here. return 0; } -

- +

That's it! diff --git a/Engine/lib/sdl/VisualC/clean.sh b/Engine/lib/sdl/VisualC/clean.sh index f90a11e970..fd16f9a127 100644 --- a/Engine/lib/sdl/VisualC/clean.sh +++ b/Engine/lib/sdl/VisualC/clean.sh @@ -1,5 +1,4 @@ -find . -type d -name 'Debug' -exec rm -rv {} \; -find . -type d -name 'Release' -exec rm -rv {} \; -find . -type f -name '*.user' -exec rm -v {} \; -find . -type f -name '*.ncb' -exec rm -v {} \; -find . -type f -name '*.suo' -exec rm -v {} \; +#!/bin/sh +find . -type f \( -name '*.user' -o -name '*.sdf' -o -name '*.ncb' -o -name '*.suo' \) -print -delete +find . -type f \( -name '*.bmp' -o -name '*.wav' -o -name '*.dat' \) -print -delete +find . -depth -type d \( -name Win32 -o -name x64 \) -exec rm -rv {} \; diff --git a/Engine/lib/sdl/WhatsNew.txt b/Engine/lib/sdl/WhatsNew.txt index d0e5f6d38e..9b7139f5d8 100644 --- a/Engine/lib/sdl/WhatsNew.txt +++ b/Engine/lib/sdl/WhatsNew.txt @@ -1,6 +1,97 @@ This is a list of major changes in SDL's version history. +--------------------------------------------------------------------------- +2.0.4: +--------------------------------------------------------------------------- + +General: +* Added support for web applications using Emscripten, see docs/README-emscripten.md for more information +* Added support for web applications using Native Client (NaCl), see docs/README-nacl.md for more information +* Added an API to queue audio instead of using the audio callback: + SDL_QueueAudio(), SDL_GetQueuedAudioSize(), SDL_ClearQueuedAudio() +* Added events for audio device hot plug support: + SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED +* Added SDL_PointInRect() +* Added SDL_HasAVX2() to detect CPUs with AVX2 support +* Added SDL_SetWindowHitTest() to let apps treat parts of their SDL window like traditional window decorations (drag areas, resize areas) +* Added SDL_GetGrabbedWindow() to get the window that currently has input grab, if any +* Added SDL_RenderIsClipEnabled() to tell whether clipping is currently enabled in a renderer +* Added SDL_CaptureMouse() to capture the mouse to get events while the mouse is not in your window +* Added SDL_WarpMouseGlobal() to warp the mouse cursor in global screen space +* Added SDL_GetGlobalMouseState() to get the current mouse state outside of an SDL window +* Added a direction field to mouse wheel events to tell whether they are flipped (natural) or not +* Added GL_CONTEXT_RELEASE_BEHAVIOR GL attribute (maps to [WGL|GLX]_ARB_context_flush_control extension) +* Added EGL_KHR_create_context support to allow OpenGL ES version selection on some platforms +* Added NV12 and NV21 YUV texture support for OpenGL and OpenGL ES 2.0 renderers +* Added a Vivante video driver that is used on various SoC platforms +* Added an event SDL_RENDER_DEVICE_RESET that is sent from the D3D renderers when the D3D device is lost, and from Android's event loop when the GLES context had to be recreated +* Added a hint SDL_HINT_NO_SIGNAL_HANDLERS to disable SDL's built in signal handling +* Added a hint SDL_HINT_THREAD_STACK_SIZE to set the stack size of SDL's threads +* Added SDL_sqrtf(), SDL_tan(), and SDL_tanf() to the stdlib routines +* Improved support for WAV and BMP files with unusual chunks in them +* Renamed SDL_assert_data to SDL_AssertData and SDL_assert_state to SDL_AssertState +* Added a hint SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN to prevent window interaction while cursor is hidden +* Added SDL_GetDisplayDPI() to get the DPI information for a display +* Added SDL_JoystickCurrentPowerLevel() to get the battery level of a joystick +* Added SDL_JoystickFromInstanceID(), as a helper function, to get the SDL_Joystick* that an event is referring to. +* Added SDL_GameControllerFromInstanceID(), as a helper function, to get the SDL_GameController* that an event is referring to. + +Windows: +* Added support for Windows Phone 8.1 and Windows 10/UWP (Universal Windows Platform) +* Timer resolution is now 1 ms by default, adjustable with the SDL_HINT_TIMER_RESOLUTION hint +* SDLmain no longer depends on the C runtime, so you can use the same .lib in both Debug and Release builds +* Added SDL_SetWindowsMessageHook() to set a function to be called for every windows message before TranslateMessage() +* Added a hint SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP to control whether SDL_PumpEvents() processes the Windows message loop +* You can distinguish between real mouse and touch events by looking for SDL_TOUCH_MOUSEID in the mouse event "which" field +* SDL_SysWMinfo now contains the window HDC +* Added support for Unicode command line options +* Prevent beeping when Alt-key combos are pressed +* SDL_SetTextInputRect() re-positions the OS-rendered IME +* Added a hint SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 to prevent generating SDL_WINDOWEVENT_CLOSE events when Alt-F4 is pressed +* Added a hint SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING to use the old axis and button mapping for XInput devices (deprecated) + +Mac OS X: +* Implemented drag-and-drop support +* Improved joystick hot-plug detection +* The SDL_WINDOWEVENT_EXPOSED window event is triggered in the appropriate situations +* Fixed relative mouse mode when the application loses/regains focus +* Fixed bugs related to transitioning to and from Spaces-aware fullscreen-desktop mode +* Fixed the refresh rate of display modes +* SDL_SysWMInfo is now ARC-compatible +* Added a hint SDL_HINT_MAC_BACKGROUND_APP to prevent forcing the application to become a foreground process + +Linux: +* Enabled building with Mir and Wayland support by default. +* Added IBus IME support +* Added a hint SDL_HINT_IME_INTERNAL_EDITING to control whether IBus should handle text editing internally instead of sending SDL_TEXTEDITING events +* Added a hint SDL_HINT_VIDEO_X11_NET_WM_PING to allow disabling _NET_WM_PING protocol handling in SDL_CreateWindow() +* Added support for multiple audio devices when using Pulseaudio +* Fixed duplicate mouse events when using relative mouse motion + +iOS: +* Added support for iOS 8 +* The SDL_WINDOW_ALLOW_HIGHDPI window flag now enables high-dpi support, and SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() gets the window resolution in pixels +* SDL_GetWindowSize() and display mode sizes are in the "DPI-independent points" / "screen coordinates" coordinate space rather than pixels (matches OS X behavior) +* Added native resolution support for the iPhone 6 Plus +* Added support for MFi game controllers +* Added support for the hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK +* Added sRGB OpenGL ES context support on iOS 7+ +* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER +* SDL_SysWMinfo now contains the OpenGL ES framebuffer and color renderbuffer objects used by the window's active GLES view +* Fixed various rotation and orientation issues +* Fixed memory leaks + +Android: +* Added a hint SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH to prevent mouse events from being registered as touch events +* Added hints SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION and SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION +* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER +* Added support for SDL_ShowMessageBox() and SDL_ShowSimpleMessageBox() + +Raspberry Pi: +* Added support for the Raspberry Pi 2 + + --------------------------------------------------------------------------- 2.0.3: --------------------------------------------------------------------------- diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/Default.png b/Engine/lib/sdl/Xcode-iOS/Demos/Default.png deleted file mode 100644 index f91282875ae2654ee5ff9f347921620f358fd85e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18383 zcmce;1yI~U6E8>zAtZQkcXxLPgvElp`vSq;VFN4@G{IeiE$(i?f^G=zvccVT;r4q{ z_ui|!dRJFhSGCl#GyCu9?wRTNP0M~$SCz+nPx>AS2?D5QX-v$~oqQ&Th z4iEA6&Q-y{0|^No@jp7=E2PY9Vnic~t+a|X5>j1!;G;$o;xo0Cf~E=*l0O3y($_E~ zr27}d`#utq7dH~pfjJVAXgU%SkxQc4pd1pCJU~%aTHAN&Xw}Dfe)jq8nTO8 zj&{V?*SCVxyC$0(aRi&!szwXv!5x_P90fF1zs{ANg+Q*Jz+w99n zSeSwh{Qav}>(BryFD}}3?7Y+6Yl%m4WflO^*P(ZxzP|d3^csn}7YPZC8wm%&2nvGv zSExuI|DSarA!GbsKk+|z{D<;?8{>b|@&An8|G@MAhTeY{=6~VfKLq}(l>hHK{v$L( zVgDKYeei>xMZo`if8RH|Yh#9hcToScZsT&Xb&(|eQ^J*$PSFHIXBEaUcG>8^n z@b~(Q_mTZ11OygM`v2uSAs;t9`$)j*fyR~0(Ks9Jt%L5=%x^>MY1vq5@N;^!QLR!f zeB<#Lq&I}aq^*fjDV5ID2nf>fb2*~Xuw4l8W{DkUFj;z&QT91_pL`yt4)!d3#^K ze>My5k=ng`r}QQ3N;`F%y7%Sk=1s!CfACKG>Cx+DRicz+y;gBasb5hr;ZzG^<98O? zaM%x8Fmqv)rVL9VSUnC$Wfn&URin{hf=19IP+1!~=~Qzv%OX(jXYGq-^W3+4mQDY-)yC9qR$u+8qcH^DE>yU*vi;O4lIU@9>7w^k>;CCEgSKUU z_>vszhB2nkQ35*CT9C20U!>x?X-D}QNurtF(OetnsV;0Snr>`Uu8UeVk1 zj4AB($ZoPpn9Tbb3N%OszR8`xG(K@9NK0`U6Xo|fY2o={(IwVG5ir)2v)s~bI03r( z4$kPAPmoJ;qwwwax{95Waz!QsBsBmQX+^ z#>BjqHa!`bn)tJnG4JaSPy4FMTvs3W4qwYjb?&s}kPm07pf;~btr5q*$!$oF6NeJu zr%Yx)s>~PQF{))ueLVCc_F!j=4xP2!5^2say9$GX_V_NID_jCyXWN}{+C+cVJ1V(X z=yKpusOrsizkXx;o~GAs@n9lIeogAJB99m~D=uPe%`Ab3(09^a@E&--_f0D<|A+TU zC`&P!&ryfPucZD{U&raWuJ0|Pf5kZk1w<6JnzCVS^7RQ{GQGo5(=|n}Cl*_t4%_IM zE~*H%J~?RDV$ktJ7LPId(_=pjdyLJwkO-bkbujg~x91aI=n`cP$^w73?C9SpTWtO) zTI@65h(>ocX!DqnfOZQ9VGS)Xe>+p2u?%tKA$eEqLCCr90fS$5o4&vO$q9}OZ=O&P z%2FX~J~HU`|KtZ4B*5Qzng$?vyy^ftROx!)nQ8?2eYVP)HP$y4JwKlxmU^n6-VX`T zJaiO1#2#xAzk7N)0om+a2#}E(Cbd?(>u4JXUk=!|*ih6PaGc@HSfIb5(ZIn#b$f34 zTtfms>!WLPRkJs7D^KzdWY|{C<8r0tIz5{@ir@p)sYd(=mG=8ZSK|m3wQI<*sFH=x zlvU|op1fZCbn5H*9J~8?eS&uTldwzTcoVTr!3*q+xNo*M_CxvH)h88PR&fXk<`v&P ztsFL_!Y{IB-|tuH5jGUm{yf@w%r$8D=Ua(0v~J08>9W|^sOV^MNb2Kdmn&=iX$@V2 zOB*PTqTANdBXA=Bv{I_|5!{vIcb2Q(C3pLEx-V)nLfs zv}{d1P94ie9xq|=h#c}U>3!`mEbC^HTt=}9g9uj!9+E$HeC-RbFZ>W^4(662rjz|q z@}<7gw^K50`SARn01z&&1*X?HLq&#B2D^>L!*SXSi3mv(r$oc;P^^wT+q{n#cW)oF zRLSm&pusB*FHy7J%q4~o@-bact z2}vD(^qwoo4lUFKQAd$DewV#*#}e}j|nms8QY=1r)*Wxf7yB@`Cn$tLk zl_Qrh&U`-49ZR`)4jtlg51Hmk(ehg#(BYl5!5{wM97-L2sWoc%R5<)gb9|HamTGd+ zsNLrBuRxE}N?jU`JufM7$#dutI!g8NJnUZ42Um#|BmmY?x%7vFzkj4=uCV{8@${U( z4CCOe5cWTsne2*0k5=Ltk_*#jv)W14tXORHhTRCg+}@+Bt-StG;YIT0OEmjSvs2y} z%q4AYtGD3O@p5z3OVdizy?;gUswwP&W@rI+UEF9V2^#V+5iK#>O8Hq#Us6mj`B1YQ zY}j_*QG6Jz|6DOf#+?A6LdNm6ksFs&z=bCAyu<@|M1q#4s2c0nJ)<{j!A0}&fpQ#)uoAy^CRfx8o9rh zTG}!jn^M?n7duDO;30Ia=ixA;DB{+~FAxGT*-FX8_B_!cJHfFno zb4>y){SOZMFJU3BQw49;B8;KUSRN4xitx@DgdShYGB{UD8)mZN>eXJHY5)|r-e7PCTwZG zF3%XN>_k9@#!5a$F(OiOs=NFf*;rdM-ofxOjew!SNeP}U;dOgFUjyIi;t|5Q@P|i3 z1pmqZdp;N9%!C_y`j*WTwI=s5#RFr;SS24Eaer2O1DjRuJsdgY|a=tTx zsOW3q%%w`t>EsWoz=wxMmX}=L$Eb)W*Tyl0hn=FdBV7+_{Y#?(-q`;AXZI;qG^3m@ z6%zKbFJK%Ql2jHpE-BYN1=u@o0Hw=Bg&%u=uCNzLs)6ZjLw_<8D_eLwkJ|AlE~Tr}}VDyw24M*dQ)?uB%h-2W^x7 zFz>kJCM<^SY(w!SC(*LOP)BE$Z`@7!zvPn z$LD?1XYxMl!6p@8{kD>D?tX67G}}c|{Sz}i-&_Yuq6+5s3{mPz?*M4WQl1Ls4U$WS z=&t%vP4*|j6X+xr`yVI2O<^nV2f>3*Cm(F)*XSPnfFGF@x30td-*Ofdgpk<0XeNbu-oc`U{FTVw|QjxRj$8?<^_mswA1~l6_aR=Y-vbbG+ka8~zm}pZ!1Wz)KsyH{ngbe_n;v znNn*-hep>soffEw-SS{q;e_AWXh?`Q?=RCe0A(C21{N05qu91z^_AI{HfQ-9*BE>y zi8Ya2ZrlJhPDvY1xp?; z=k*7>lk#@qaullp%OUD-4_cpDCfJz8{kLX1PgCEC6WKR-pQiKN9h@BhHEe<^IA4&d zV^A$zcKNNFC;@lxMy7F^+g+K(POlcXAQBuHw0S-ytt*>Y=uN&s-7uz$r52~@kFR5K z4(7Z1ch_qw6J*e=LUt?SU%dRgq^cIL`bRMnndzB^R>dnpd6XF@eACK|pOONVmP!}~ zWg`evbY>jS8EstMGG71EB{F0ZNQjANXJ?sKOTBrU@^gnrw?SHmKh+}MhU&AbJ+N|i zwZY!w_N!4f)%PENw=``?XV}Nd$1-D4D+UKHjlI|Q%TEJ&eaHWu^fPv!uZ1#-bd1^X z0l<-VhM12}B&cbrpS~W-IyU?k$_wBY6`$F@@C^zXu)!6=-k&^Yr$MnmfS1cl2S0b9 zQ);hn#h01u*CpK|pYb`NejsA2uG<*ROpl8zt(qXaY)M=Fmt4d~f%kTsq?fo$;*HhQ z2%^&nU~muDhXa7om1oG0-HugdZ2qf9i7B zyKOsiNKIp}_*p4w%51ow>enzW+Vk*`Kf#-h95vd|=3r2i@`EZj;&H4K+S3y)mR3v{id6-t(v zBZ-}044bmn?*QI5Sy55EoQdxlPfgruUhSfJ!RCZ~dGe6&t+rmEUG&s~?FGn02xNz*i@Ql< z7R=32V354Lyg_Ox4mDse5t7n(U50CQt_>|=4G@14CzXs@l!Z`?%Cj(l?J{*W4VUr} z>vYs^)qNzi9CVxml*L^YpR3zw5!m=}nXij=H(K z@5(D>wStD(BUm^&%Uy-Z{J-MLAa3>RK@X#1T2z8jh0BL@m`CMx3srf6_tTYcV#rpL zHm@HYvMrQY#_EwVkmn_e`lyw*+T!;hbk!Qv#O!QbE-0_&4l9yQJFZ&>sn)s6Y9M8Z zN!uJCrnBZJ$qlg5En5CrIKD4ew(}}gcFJBry7zz-dWoti>O;PLueC2AW6bFTL#wU! za{pB*Qo~_(rrL8t@l9^U)GRK+t;~dcI8{e@4gN1{=-T>Uj<^=g>FQmvP12PbHV8$4 ztxHyeK2uIXN20y{UQ1hZDIK};aJ~bU>9TGDpN-9mFb49H8dKIt5zlb?;LSJ+a@++E z<_5`=O(kh)>zcx}&iLcNi%yJTuaI@I^&`qzeaj`2WzmLO8yg#k8Wur%$g?jsGYt+M zxhBgw<6KWCyI$y^hwZ!aQ1{4~U6EXveroy4s}B)!znQ4Xa>HazK zUPDJ^6fW2A)&A5`;&M^C&!zR75xDMctEM&c_D%dHA6nbNcj@v}#0|jxqjf^i)0_vk z7jzsAy$&_3e(V?%1qjeNY$#_}+Cl*J2hx$++TlYs4xbs}UhtnYZZX-4>T-zp)=Wmy zJpd~$O`4cb-vu2{iA5$P|Hyq_hVPCSgweo0Ehb(>No^7U%DEUeqDq-!`zik`B}D3z*C zOPSYqpHFxH<;?NN0W)R>(hK0cDsmdLXmV&4m0t|0aU8E+Rde!+Tf4rTggyF{Ca3DP zs^&^|_zgc}8a2d|OBrbHFmw2n$tKB$z=TV%AdAt3HhI5Y@L!pBJ6A~IG|qW`=8mvf z`q>DMoy`&GaqijAwG|KfD*b_H2qNcA{+px9HGyJrnEL#I6<+*O}~tT zeP*uCwwyt^0*qFKoT( zu$gPh%9EU>kK+eu#aG7(J??%%yHXZByb3ZW`-xqVYB&3dq{#%bxHPi5DJ3Ku=n9EA zRAdBHWCE6ZI;J%*3*V;Y6Y>lj9pMnnWeU!OK5F+SjSd@;8+BFF{vI;G;PxWZMR=yS z^hoqy4nBzjKYseEcx~a8w+)xEAYsllUxeTOWN#Vs_b@y)ouR!X&QJD8w?04Sx84U~qYnpl*Ggry7 z`sf-y!tn%tCzd9)$uN>2$zs#+>J*XAIN!94nV(==#`U)QQiGNR;(zCNoaf%P>27|V zxe;AzZ)pBi3|4Rf*~nwv@~Sg%8rrRz(yI@qXg1DG)oV)do1$WbrD&BEs$v`XADjvk z4Tm^#T$baZFBb2JTGVt){XYeKjf%2WK+@kk~>d$~r@O01?qFMJ*k*CCUpzeKSs7o#fXJ`z5w0_%aXEwqj&>qEzYJ~ZHg3GApwi7@6(=LHbjl)4 z%Oc|U}v0Y;#xzi*7hUd{2VXb1$c&Th9mKqYvCr=ra~)CguAb5#1xiY`ZE{T>r` z=I-#KHCfS~@+;aA=1Dqg^`lQzaGL4=9t4&iQ;`A(wTjpc|QfhHQl$bd!ST&?M7F(`z^~ zzp^nveb+g{j4PWL3@aiVlF9(Jmp!{=NS+rDRejz2eI|vqZsN_E=5rMU-Ts#&X#DFg zRSM^5wr#ZuUhoKcPEJk9<>0g-PR%wOGc$PjQ0OM^Aecd_^c5;pZZKyl$Z6VD4*mVO z3+k%u{tQXHAjM`Zhoq)vf6a&x_~_qUcJv@dwchHHw`lz_je9Tu_vpU>7pIHiZUJVI zVYR!!XL|Y$eGKZC6j=B1u8P3N&sFbg1R2-o5DTXdau^+2|WHz5ag=~0*`O5?5mRJ`_ zuZnYiv)%d4y0C#(o9$uVNcdaOY1PcRGRT#qe>mKNf99#c0KLZv9TP$Hi7MA zDy4|G`&jjB00WR6O2SpZ1rHtN3p=~|l0-`%mI4bVZT2NBLdc<7H8s=ZpU z_E$x17LH%cLDW4`t;EzRI0X~QOqfZYN-g(j0R z=HkA5Wfo0s0G;-fwh9BJ1Xtw~aRWQux6oPp>cNgzhQ=5X$HL;CjOe1fy&C-`o`L_V}y0yF^iTwJP3duCcU`no+qj0 z4%u+DP&5dZK0gVP$J)vMt}|=RZ*0j_^&y!m)3u@CMiM{pc=0Qq0 zbz5KemyF4ZMeL91&2F!M8^ctcUBPSWX~RaFuCrcW!=ArFsbn$Ny2BzNnlY2}`8>2} z2;isaNNHwN<0V4GSBp{9V#rclI!Q=1#zhULRw9W=k?muSmMa4D$Pu&DADrJmNgHTr zOVEV&#uQR3re%sEc4?W}?V)`@RJcX@n9g)Rv6xBj+Nx;h?I`G=YBvK&tZRNC+M8Lz zqx{LmF;Cd%LE0IH4pTx%>e2z#Qns4 z=|5!qsAqTV1LAOs=)0f(bu~R&ah>LPwsmFfkL2|Ty=l&^q_Tbgx!bJ0JHHH{Zibz8 z<&?#WWWf9<*X>}+8`tfgu;`U$6+?Y}yQKGL04iBRSi5P}k(b}I*!CtT#osJt{~S&= z8~+QR1~bL7hD}lR)sBW9zeiXNBAO@bA0DHbH9NyoH!;k8H$HyxAv|X@8o9US* z_)4YLH^gPVId$I3%s|IZrhNFAgs1G(_Eg0QdDp=n?7O z`M4WtWgeT8`&F(H(y$O#zrxZGblJKPL2RxreK0ug_dxJ=aFQ49KLyBg;l2RN@iQ!nCfOFOfD zPKxHnZJ;%sh$>Imd!{L_d*=F$a-#3__h2;%{$`Iz{@;IrZikq!iP#Ox zp^feOH7IfMwY0{5tQP92%eK}(8JPtBASJW`U42{OmjE^)#|cp_?O*RY>EA2APTx>v zxqd(vA71tD&)3U)*0U_4FrH%47?T#6aV8UOe0=S*wov24q%Z~K-#c&?GFf)n+|to~ z3_rXGt0$!by5JI(Fq2l1fBN;h`oM(fvm}ChaVRF)jKe~{DU)jM{n7IFq2TFS+imUG z>8_t?r?Mg=`0nXds>R!@1OEM7jegV{`&hMa5c~SVG6?HgppCy$O|{c0sX(Wb9NTZT zPu!2krNX&z?|sn-i)$83|1hCC1BKH`MPw+1RGRn=atNh~Xes^dNQdrNjy_@msstUK zl<%EzEZ>4UtdDQHB5x@~ciaQ?;|WkgY93Q5(_5e)DA(afLqe>kT1xva|e! zE=y`?!yY`i7W*t5hD;0?$LmF)yvew({j~vo_7aW$_B8xFQKN(FxA@Uz(*IzEpAzwY z@eD;nEMmXOVI*3pzqI?K9YToO<>#9v+MA2PCyRMqzJn26kqJPG@ewI4*{kC;zj)Zf z5=28?Nk=6K2+$Hx#20H;+|SIAyeXkc`zxu92sGTSB+r~Um1nE#d6|n9qgh2*pycvp z#TMv#G^9t>;uz^iaY!=Odpyo%IB6CZ{W{n*(8f>k4?IB?pGv0%2ZlfhGBNvd;cru` zO|zDG+r8K#)I-&`O^+dR--8v?7-9>XXgalD0ZNE-c=<#!pUxrK$_ztsZ}?jZG! zSsOmHR9hZ_^82#o2%&!>oA@*asW3}gvftPEX{j7{4@NTIAh;Z-{&jsJGo<88&$`(M zt8t!6<_ozne9I#)o1#99w@+Wk zY$tcks$QHBkoF_dvZ}&M==^SvckgV=n&+ogUH32jxnEy>{M6t$%eBt_d|$ZBsvT~S zy1nC8mmuNUGoszXfcf_HEfQ#bj-rE*!+`O9Xzncfs1*F=gN&>+vDiauyDAsT9o408 z5HU?ypL$po%~QzNk`H0hkUo<5zWhq&_grU%)W+58Cc5|{%;=#XadrNU1@fc;Zt7rp zL2!;SUiPuQkt$PA^?MI$9CDvS4i3Dm`F@5vuFf;$fr~;knu>X+V5f(pgq>jc*aL^O zfp=S{o{7*+n26cB@DXVToa#1X)gM}KVaQC6Gmh^@wk(kbyCt<8+bjm zJhXBw4Ecl%qj6k;G2Z4S`O#k`jJRT{`e)ij7|~5Zb!`(*F8L>!r!ZB z|H0zAVU{zw7j!T}v=;2}Fx)vpyv%Mt-Ms1{mHqM?@8#rgfs?xK0O_%Sj<%+5I%tQh z*{nFZThi+0`M9GEN37qx?H4c>E$DuKBte{;v)aJZ=239MlJ&%|yEK^NNo}{I8K83C~AE(l5Xw1~&h%tCB9+)L1eTc+5 z>hO7)YU**Gbj(}paq$7G_hl5OI0zBo69StR4?#LUNmJj=T)ju4y%OmOb2$K=KQ)}L z;y(F%eM$RH40@7%ZpU1X9veF%bV#VqpjgUz0mw>!Oq|tp>R2z_s`nym-X_T26lvD# zh|OIUwWfl4bcj1G|IAd8>yi5IwGq`v-Q<+h=``ORXXK+)=sBSy!TUEces`OQDCK7< zLt3g%86-7xrSN(Bajg=u&eE9A8toHAjoY>fAQ)V!Kn8Jk&#hLmtF?E4-WAyG(f;tcv@h`~x-y&l8meMW+bwq{fd;ztZ>LOM)&IeZm0@i;KfQ z*n4hI*s#)e?{`gOl%mpr#amY-9@+y30FPMIcNXJrM`V1G85c|AjWhI-WAH0lGAKsNhG$;BTpzL zcg)@lt47gyOXGYWu@fYff5jd8~=Pdz%(REULF1S!p+J#8F+mtlGnonOF>8oU!0G5@q*I%tndlavj6K+lXOYS z)%0!tH^Sn={(MlBr(6BF0dJ$|@LcG+?Y;hlif9aL4_N=KL}3=#Ma< z9De!1#&efX&CBx%DDE;jx%=|jSQeM*o0vCM`o&N{4&Sn);qxGNUf1x&(TgNpGd1O) zraC8!d!a?1Xy7uk!Gn!8JBo-nVpE?G_rnKEqo@1FL}_FA<>)SD*Gmh~Oq_3jtuT}i zMisd8A9ZBRSl%w3dU#jfdG3tS)llqtwAXZ$tpBJQD-plXKez}zEO2pl157W$o(;s)x6L57NZ%R`@Jgg!o&A6plmFs8Ip)QhsOyaD8 zBbjD3WGhe{JouoG6kC0}@4caQlO045R&;MAZ}PHS&$ZL@V)%#Z&UJDg0-=d5r0ef_ z_?Pnq`qXi!MV zY=$ZT#C`Z52fF(gJEci^PH1#=Bq;MrzC^mm^M#(>_2YfW8b+Wq8J*7yB;)l*-?ZK& zsQK|R-6l^l*P(ucwMrRL#o)NNu0T75gZk%kP!->g*7u^Dh&4H_b2|CV^&u>>r2mtw z;i0t#KC|4|ytDl*kedO&PWh%zTmuJ(<~Fti`0vc&;DqAVAMPV@adEC?3prKaJ-^p= z5eb~mSIz?b7OBzm8qY%jO|HfNH(VX?}d4%Tz4? zw08MfM_=2qDbs~i(DiU9N3G{h)!Fp<5c(odhcB}F$(c;#WDYk|j$Xr@`*Nx?JW3rz ztzLS1H)X|iOEuB8!L64Ivj(uSyGJalfXlR{3XTH7AO2<7rCj9A{(ySJm_gTcDK`+y++bf+KD$_Xq?8co(*CY)A z*j+*WOK}{0e^ z*+RdSp>=Q6u=jwg2_GqwrjwRIwmI5(Iz(a!P62QmD{YyK2rp-@UB@)|)jJf3ni&(A zHdZx{#s6|uZ9VXGI&JNNdsjA>hyCa0;pS~DTfguybyBq7c+NdMqJsVobCRgA=b(<; z)73ZuG9jl$AWpIOK8w4$L02&P5OKM^i5kh(TcG=STD~*@Zj#al*-=I-yqa8=^EwP% zjCTnAaJPjpLq<)?zAw{UYcJ-Ug}+HDFM7l9a&rSuFTAoU<>29=_r67*b~|lZ5r!3L*$h>-luA5Zu?0mY z5HQdXe}BB%GuHXkY%qRPc1D%2-|#unT#&SiMlc?R zBaSt zjXzUw(wVz#^*8(+qD-Vz4L-c7Sha7+WLgyxJe}G9;?ni1OG ze$Ul$L#Y%SQzsWeMz5GCTd_D(XVNayn3q=VJZ~%O9s{o3LxVH!(QDMof&Jj!9E2ippXXB1W{Dwtqex=Nk@Q5X`7MF&9yD26CUK5U4LzgRLTvG6ZtAqfI zZk=RszLf9q94UW;O(?tN%#HJXEl=m6)GK#0MFxIH^=aPmN6x}vYcJv(&?@j_2%j0 zZ{K3=a{m7Ebxs9@_m}HAn zGgKM_gLe?w$f?Q6r&8G*Z1!^Ynt{fRW5=s0Ueq`kCC&C0f@E)`YnRzW%>V3rlF^UY z3p_r(YFW18CuS#1D*1sp@l^9f9Qa9>elkQxhT{{Y*iZ=n6>S45d&&aBryT`pVC`l*69%1J%1g8RjpArXQ~8XQ(oUct%}*A{>v{cv!D@7 z1xCiVyWFd>?M!CyAWk5-*w`rfBercoQ1?#Vgl6IgAOPXJ6wCsAIP`9U&CE*$pRe9C z7D-NEX(?F)J}X9%FR)cz#GZ`q>nUhx=fY0N`9vFa60?s5$x6uUyquNtHlI_i zqU0d%h^zRNUApUVl~>lvP#Qv-gV;Dbi-T zRVL6{< zXsP~k-T#|ah^s=JB3W|_8%39C;3ga4}1#&|jgdP%+F9 zp()Wqb;ZgZ5ZU7bheF9IDS9`0Isq3TvoJX{4S)uZ9Q^TSAEe{b9l!e>QC=cUHF#?S z>M);rp8$2i2|ujfhhO~^VA+-(*JOPzMl-?cB z6~pph!Ig*PYQ1<6Pf{3pAD#MKhIRHH%4g?~_APIyycV-9VL~Ce{?+W<6wOD&&-}LN z7hN@#sIW*m(CR+Lf|1ZpG=7`lcQmVx7&R*00JpM6TZ{#F*m;}4yC~XN=E46Gl8i3o zW)JYnGu693_~NM0->Jggo2;oaO&noCtdIUKn2A^XpQYNHCZpK&a&h;=6@M^<$5cgQ zmhjy~4aGuF$auWt)~mUe1`T|Gj*cQ^ycb{4TBE+%TIZUxZ%CHQ#xr`~Cev$C6Ar<1vXuC)Op7;%|qj;lG_vpHS{ zu?t~a{lhL}6FL#|to*1e5DzpQl*c+)W#nBcVYb&P|ICsC%z(A3W*m3;?BkP?{`Cdj z%B_FfzPt~WCZVxzGBAibPXXh&@7djie3DoFmqRNH^P{Bundh(J+Wc$tCL_+$Q5&t_ z5+DMC)K)S_{cW5{b~X`Z7#J3~$@(MfUtr?wLya?l77kvxUS<7=w{v}eLm}+RE_CZD zO(PSvD-3p<)yI*G+9pP|QYtI7Z*)&ZP0>lQGaMTLBj^;O$K2T;J2vy}={jdi4Ok#bXkRFamfNf%8)yD8 zx@yYeVVt!Ip^Ic=B@BONc~=*y&u-(pN0xSvp60ZW3Sc>2X}*^5F|Ii!EWu6mU>Dl; zJsHuum+Z;g6^^h77W!#KuyjCDqOGe9wzHJEj6Ys3K``bY#Gv9$8#%r2DY^=QWO9_$ z{`n)fH0%p3*efVq_XnN$L;-Q+6g1@Hh_4Y4+jQ#r>8tw zDmD!xRA|EFlZZUe2FJQZ$M@)%xQD)=PwKBbux#j*GVB2i&`Y3d4ZR}%8)$KpI~J;3 z^54aekW+*diX>0#nKK5=~*(TWL!4)hTNJ&m6j$IY}raDCA zsZI08TftzKNrsF=!-Gqeb8I&@zuaXI7B{mbSx*>o;lPoR3$x}Yj%6%bbR;A_)5X9{ z8iw&@an;Apo!;hgaI$c+aB$TybFd`=Nvsgw?XZl4m`7q%bn((WkpXi#UHqmC1tG{6 zL{I<~c2@g`@Y}n(3CqGF+RcbhUn}&gf;d~25uUz4$vB*l-3gnd5$iP3=9NBh3l?nL*u4N}9wZuk8k4uP)OK?C9yZ?jwY;@Jf)U~zi9S|7u6?*6) zoI`-cG!$heqWHl{H>Q7|%zYR!QgMggghNiYD{zf1Z~gT0Va{dAR9n}gDHB%)8JZ$y zf;bZnR|Rr*Mc}waQMCTmjb-GI<*ZVyFN#qmU%;BQ(K6cB*7|l)rfLxvgviF9P{R-k zqy}3Xocl@y=dDv=pgz4q0J6(R6KAuEov8v{EjKrfsM+3ga_D&|H5&4|cAf}8qf7EX zgFn80peIQi{`8JT+=%%syU<>I7y=pMb<{@WyJ3Wp1f9Lrh&^ljkw5z24y>!djl=oH zTRCBa*@Re_0fEMR9TTVtRN4iH;Pum6-_8(o^;ASzoQ}>X;&Oq%HX{d4Qk6?vS9eE*(_Zintez5w?Gc%t3N9@r zTpBP=9L}h@BR}b9JSoK_q#Fas)i_t7J zHYT$MBvDJVbSQIMjI`uktc*vn3XFot;t&c{sa$oYwNp*R)N(x)v@*L6&gQi>ZUBBA*jgpx_*sRgT$W;?V8f#sJbc7~z}X$K3uwAl9VaS-Ut{^GU6NaGsO`+U%IJ3`_A(h>UAr53UTc zMXJ?Ov+B_rkCVfk2H5U)yixU7>)oLEu%1z+JkMNrd zd$@Eu+G*dJDt7!A?wL4r$xzA_gg;)G-GLe2S=3Ynur?Rc{)31ddk`gd?PN+`b|h6Nz@ zLv&?XW(foWDXTBE%Y@h)0vj3(MFO95MAKYj>zL0VC2s6^7_6jIkiRAzmwUgsjJc6N zv-F#5Y_JqRe^l3LvWKgrP_ZI3gP1-%6lwf7xx0S3X|hw+yrdYYiue{_LSzh9u_0|8 z9ejW;zQlrmTGeySXm$l@v8>DXUk^U2Nxj|*owTWNErvg*s%J82dj0k6P&e}7gJV}j zZSj9nNoL+5_K|wE%-22!#wTMg9f1@PCjS^cY{A0h4>H_g*E$UkfB1*eEf70-xPH9t zXFW#0_A^yF@2mem>dF7lG5$X)H2?3V>Hlj5I-+j;|F&?Qp8;bfl+>uluZ6=apTo=i zQ%5bXkHnYH6v8f>e-GvtpEKRgQl$}P@0e(BTk=N^=NpPH_v~A-)sg?(FAca_@mt;e zs&Eecc=}LZjFtT`$7Jx<<9X6&O=Q2AO3(2Q)-qw#+IX5koc4gz(vLfm;ZcdR5F!gEw=MOxvj`5lz`V0h^7(CmG^y zp0h+0oY1IqHRH1!sp^F@STtr5Q+)2tf`pD)Ha}4AdSGXpNHvoeCL6rD-UC4h(-wSr zav%+NyRYfte4yr$+^I1e+`Q-wc+YS~AgflhYM*<*WxYE!J6Tk5TYY~NK@)^4qqY9< z(_iMwQiMm+=6QUV>u&O3aJ4i1^L39v@KtS+Sg4AmXWG-G=_{jNm%GHVcLIE(ghJvuy4E?Jhs=w@%OoVUg;nsu3?cf}I1$rwl@0j&^FFuV)?SZ+ zI6~CPy!$|%O;G>$?u3;9HkmU2=j;D6-aTL5dX+Gx;L|-MRWG;x&ks6CD0ib5LRlr3 zgq%5uiPYivKepX@_7tFnKu5oN>`=AhOT*vDlable|EjP5lpfCxEQ-{Ol`Zx67o0z8 z)&BVtxAyD9xj|nh_}9J`w%uhMU$tb_ggpwAtLlTU9h7N5UF_%>^_4mM;imJkK!G{j zSr>nKAGWT(>8Ku7yJJ_nd&`A>ZL>dxvs&cB_x4=vHno+wEVp}kmC^Hm`>f{9oVX_a zNB`9~JL}^a=@1IuvpP84_YkBjvS$=pK)_pOsov(b%K2X%MHmluk|Er0`$(EtK ze!wy-vi$jy>8sotR-dx{yWXev_2gCWOLo{yUUp^%Fh$?b&-uUqOZdg?ufM#lW90sB z`u{@<==-bb*}XenpWOdX$;y1<>1kFUn*LcbgueLoP29Wbc)y(4=c6Y%7J}mUd6Ca7 zqs6N_SI-6||K`JGt1JJ!NCcYjxA17&EBkN2)b@2n_*NUBrfts?&VkbJ%b3vnmcYcb zrrC1q)UH+GGr#}#+nU*b*SP%QCHt@kj8hKy1}D{=S>J6p18C+|>B+#%^{@0I`_<=x zN-b&oEOu7?wKP_)1g7ri=WF8rcVE?hXdFMs2I!|Kbw~cIG*z9gw>4Tt#3B|x}JU} zt^ycdU&M^IG%n=gm0GtlzxGqQcHQr61IIzGGSXco^y63!VE!aO#)}8NV z^wnZM;6WI84?RIWSp?^iBRD0{P8LBNtb!(idVmPjRj}hg5Cy)%0iq94q3qBTw3-Fs y0(6PC-8hbmAu{C9!h!Mt0>>xF@*lJR00009a7bBm000XU z000XU0RWnu7ytkO1ZP1_K>z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ^-$_J4RCwC#nt4!F*BQXiId^;e$|fMlrlP2zxEmK# zj0@J?u@jqUJGIudsWn4YlBsFjvN*=LO=Q%V*j5s2#JCX~Yt*;Sxj1u@IPiyR8^K`j^%isdklbri$$4#%|4Y| zSYG9jWd%aW^Q_%sj*SW*Iv{ak>I*TQ!Zz>Nv-2N0dYz_Givqy2tl4A;4Gu_7j2|^5 zIlyjd`m;w*=KcBoOsz&B6hH_ztXR|~CgPzC7~`u&CE=k#W|Qgur|kV+duz?swV7E? zr&|zshGl$56TOn7)_J+;=H7i@@7$A7iW3-y>E1QAva0&KbA^3-_jpJSWUT(^FYjhz zLd<3(fY9re00js^Sy3cO<~UX`>Sb900Pq|KbQ+yjqtj}%8UbUXVoV5O7-Tf)j0RnK zm1D`<8>am_qu$wYP?lksdn!7u2BF8uzyP~llGUOc#cg>Yx8TYLnOS_j>W|e-~V)6lesV=eX?s zM;GX|AFq3pK~GgM5Q0MnBo!21{%r4|8I#7g4v_QBS+D3dnT?nbtwz|j`R#6&Q%y4mV`4TM)~{HIAo4}g{v#(}dvoobifWC(8!e`tyAO{WIcV0T z(NCY#X0x^M>am{Ji@J7>YbAs#@798Q-w8qpK+F6#8})DeVa}edD=7tpkS3u|U2gH7 zB1lUelJ(JYomPV}fe^AByMEhlN-085TeYJiI=q!WuehY7va+%j0E@{0CdO)%3NnkU)fB+xIbj6XRc+lIjt?006BQ zWFP#R64Ek+2J}vV2vQ0l1U%2){Gn{&vULWXwnI=rLf7aQM+_L3GB7+e=n*ZA8#!q6 zCwqO)6ur{LYsKx=Mh+j(udXal9Wf{}GP0QmMh@vSHf5l*wvJLtDd0KIWY7Z$Zs7@Aj5NGWXw!1LVp zwQo$CkmB-)PM1efRZ1y>kmp!~UTZSy>*`$@D>g1zy5?Szv{}CqY8v#aircF_^E?+E z9B`+!tiImaGOL0DtY2(foxS~?Y2$|n*{zDI);rxUk4Pv50B{^@u$Z>~{mXL~uIaRz zw$0QzU7{p6a6)J`8{6v|6JuQMaMrtAj+z>_)i=^c4@nz6q}ow??fYB#7q1^Xou6~; z3?`Ie5P}e^`0%ka48yc-Cb!^@h*0(2T0+_i2~m``?K&Xv8~{L;<*10zg!pJl zmfHoOfA8*NQ<4ojUQyI$01KC`do5#)qqhEjovGu7+bkwburDJmW`nP7H8zc=5#{!H zf4k(pi`R+;fd>Fc9`Br)<9Uv2kp>!pe=>j`@i7xpdh2yO&kM~$NLBEM8$SK#w|TG3 z7(X^;U|dwV?*tW9jq;w`J2=Eji;Ao<=ClnT8-e9OTMFDa~eJ2mk-R$cUWbmJZkR?` z=5B5M#Fx_vrGyYw#T>^P^*R7Rozoo_61a8E60=d?8~_3U<}ZG)MOJ&{j!Mvjw+GD@0MEga8Nt1*)p@92?#tXy(sG{b|8V zW|N`8_>YwyHr9SY;H_q3mzap@X(=<(Mm8=3J{8ogIkY@1Vwkq)rC#0QdL(y6K#d6R z(63KY>l>NNEnX?QdHH(Dow6!Xk`O|HHcR&|QHcqit!Cr@cT3)%b7bG)96-VRxvwPk zOnAsn{7i`?$!Bu&KH2rTqN-_QMo*uV*7{2MY)Z!JEm`}H4DTBS03AB8|I~@&AGi}g zgQBXqva$@zB36`?VS{E(o!m4}p7jvAeW!Ha!JOif5|(9ChP{xQGQ35ddPY4U$;#Y6 zuIdzO)AMRYRdqyo*!VG{8rR6j1|WnGN*RP;I}P-0i`(r!lbfG^{z6TaEoD&831dbN z9@tN()jsykT#E@-RaHtU%d#x{llX0W))&XXiD z#@OqXWJMtuE2?_8#u?KooMjo7Wo1R>xd-~kBT53#K?o#C7DX|A`KH*&ki_`NimGY= zfZb*d2@VPm3kwPic=Y>=r>a7fQm~y&aA*B@#yUo%uG}vaf+U-`8@k!czdzMj*F~(SyWm!=a zMNw6?rp_gBEJV}gpv5|`ST0$00000NkvXXu0mjff{t_O diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/Info.plist b/Engine/lib/sdl/Xcode-iOS/Demos/Info.plist deleted file mode 100644 index 0398f008b8..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleSignature - ???? - CFBundleVersion - 1.0 - NSMainNibFile - - UISupportedInterfaceOrientations - - - diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/README b/Engine/lib/sdl/Xcode-iOS/Demos/README deleted file mode 100644 index 55f8066d66..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/README +++ /dev/null @@ -1,43 +0,0 @@ -============================================================================== -About the iPhone OS Demo Applications -============================================================================== - -Demos.xcodeproj contains several targets for iPhone oriented SDL demos. These demos are written strictly using SDL 1.3 calls. All the demos except for Fireworks (which requires OpenGL ES) should work on platforms other than iPhone OS, though you'll need to write your own compile script. To run them on your favorite platform, you may wish to set the macros SCREEN_WIDTH and SCREEN_HEIGHT, located in common.h. - -Common files: - - common.c and common.h contain code common to all demo applications. This includes macros about the screen dimensions (in pixels), simple error handling, and functions for generating random numbers. - -Rectangles (rectangles.c): - - Draws randomly sized and colored rectangles all over the screen by using SDL_RenderFill. This is the simplest of all the demos. - -Happy (happy.c): - - Loads the classic happy-face bitmap and draws a large number of happy faces bouncing around the screen. Shows how you can load a bitmap into an SDL_Texture. - -Accelerometer (accelerometer.c): - - Uses the iPhone's accelerometer as a joystick device to move a spaceship around the screen. Note the use of the macro SDL_IPHONE_MAX_GFORCE (normally defined in SDL_config_iphoneos.h) which converts between the Sint16 number returned by SDL_JoystickGetAxis, and the floating point units of g-force reported natively by the iPhone. - -Touch (touch.c): - - Acts as a finger-paint type program. Demonstrates how you can use SDL mouse input to accept touch input from the iPhone. If SDL for iPhone is compiled with multitouch as multiple mouse emulation (SDL_IPHONE_MULTIPLE_MICE in SDL_config_iphoneos.h) then the program will accept multiple finger inputs simultaneously. - -Mixer (mixer.c): - - Displays several rectangular buttons which can be used as a virtual drumkit. Demonstrates how you can play .wav sounds in SDL and how you can use SDL_MixAudioFormat to build a software mixer that can play multiple sounds at once. - -Keyboard (keyboard.c): - - Loads a bitmap font and let's the user type words, numbers, and symbols using the iPhone's virtual keyboard. The iPhone's onscreen keyboard visibility is toggled when the user taps the screen. If the user types ':)' a happy face is displayed. Demonstrates how to use functions added to the iPhone implementation of SDL to toggle keyboard onscreen visibility. - -Fireworks (fireworks.c): - - Displays a fireworks show. When you tap the iPhone's screen, fireworks fly from the bottom of the screen and explode at the point that you tapped. Demonstrates how you can use SDL on iPhone to build an OpenGL ES based application. Shows you how you can use SDL_LoadBMP to load a bmp image and convert it to an OpenGL ES texture. Of lesser importance, shows how you can use OpenGL ES point sprites to build an efficient particle system. - -============================================================================== -Building and Running the demos -============================================================================== - -Before building the demos you must first build SDL as a static library for BOTH the iPhone Simulator and the iPhone itself. See the iPhone SDL main README file for directions on how to do this. Once this is done, simply launch XCode, select the target you'd like to build, select the active SDK (simulator or device), and then build and go. diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/kromasky_16x16.bmp b/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/kromasky_16x16.bmp deleted file mode 100644 index c0b6fb964fd176d5770cf7000088fe1c87b220bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45368 zcmeHPF{`CX6&y7%FcCK~G8Qut)Nm0L4EzVi`xD$Bp_$Qwk*f;^D{7`-WV$SDCJ2h4 z*{Wb5h{Chpt9@n7sXqO6fA`**eY(TlZ>mq%sZ)LWd*AK3duP7(t*`$4*~70dQc8Et4vTyOxTdFfapyc~ z>DW`cxN{skzr!7WH@>UC%fGcB*C(b!kGtpHxaT@v(Q%Gr*CFPt$2yw~!BiG`0I$eC%4|P&4BlC52{7d|}x9jSst8@D9 zu+yA#GK-P*taYZ>VwOj|Zi%Zzi4TV&0}Khnpl6-H)cnRbzy97Yzl#?DBPXPkBA=3_ zxL;KWWF z*02`pGSRPYCUGgmVbT;K;iaF4wLo@8L-{O#gq7z5nYw?}=f!yL6eFF^RrnD9(pSC+ zhgfy-xvMXqrGXk=OTXx-F5|d%&KVa?V9qc47?Qsm@2VW?uz_@&OL$p+w5S5NnDhI80hblsJ^__*#fS zR%GPG`8FnS0q$%wzD3Ry7k8vsCCKuqS`+X^R@i#|nsbtOeVTrku5 zFa3c6naSUc7c&^H_{l8R^?vSRD*WNyxAnT6=3=b}+FP%^cK5~`cf%ub>cG4jsD%Jr zzLwp7-iVKd=&cQJaQp@E(4RYgV$3(eG~n$zY>1QD$-|VaIEk$2C&%|U#fN;q4TQ^D zIK)*100mWu5$AMRxkYo%S0RC{$Os8JJJ;Xk%LYK^x|4H$*0WY>C1=;a^MNVo=V3$& z$A{!EeqVxQTwUMQ9E&XAvyMUF^8t?n;Ge$zi|@StI-U{$7?$S))%>1eWIgV=jyoOa zIDT1t*7XKD&OW$j$DRLq9JQPP+-YJ;Wao6)Wu3Dd_gu#-I^-~Gg}6#)&1E~Z12#>4Z^ zzx}m5?CLn5no#4*n*gjh0H-1s9}DB8cZVbKJMRpR#LR+Kmjb5wTuU)t449B1x| zez(7<<$}Ph?wXEyV>3dgr)Ta8$MuDI`!OBY^iSs8553J@adurl)#Mpq?k97#OtmpN zEBf6kcKuLCW(r7eb3W2Z;Cc1OKl%xWejS#WoQFM^7_wJ94^xxR2Vk6m(LWX`78cQt0kWP-CkE~&XG7k>Zc}Xut$fB zd@muq(g%?NoWI^5W_5h&gFvSD>I8O^R}_5zkMH6oaSqG1lzSL{a2VE+c=#zX6VZVp zsGg`U8X~+1vWHB}_$0DetI±ON6)oPT0-)6e1kqZEp-^VM4&S@TFNaRQcDKM$vJ5p-ENXG7F;ZBB>P_Rz1_^^-nVYOQc~eWL$v2G|?r zQywoE#)fruC-6q4n&)=vKi5Ce9~N@AD&Zc0)ydPK2wtv9LA*iW<(Lt_a+b~?@N}Y}gYO9s zM`E3aWuPl6f~p8;N5>&F1P(bn*D8qSkZ~mfbh#@WuOh5OMGBA~ z-KetBF_EGv>T8%l`kn>adR$A8vH330gLB-K>K?9_S>nsT`;jFtQ3z$|OyWW)L-Fy+ z13$$r*C8KnK^y9qbPoN~k|M|y#SXuR;J_t>l1-&nQrZDY`D!Et`d`vMHU8 z3IWg+BhD}48hWntUu4{C0e3x@JvNy`&lLe+7*{`4!fC>(lY4!R!xEW$dE7OL^H$WR zlYn7H=;T~~nCqIr4C?BgJcm_a#;Ea`%2JCk`g>j}X-R9p35i3q!u; z5%5T?_q)e_-W%}}j%9Mb1kjS;Ix9F8RDGx~K54uA3rnu=4jGp|03*8`=L?s+j#W~h zd?%BW%ak$!X}TWrktH%fQ5z1)_x`9wS#E0yTV#2g`0=F`!)55qpZ*1j^!?f*BF{kS{apo~!AfhA5rsR@&9= z;$Dj!FT{v*gp)k<-zhNO&8mt(mdo7a$P%YS=yEeI0|N8?QVDOP@QOYQk(vBk$F)oc zTJq2jnc#Rz=hHb#Bw3qPq%s8&rA&Ie&LPtaF>-mltVKh4BT(Eu5MyectaPQYKUu|P z)x%2wOWdEa9)EQu$edr@Huc1Rlz;Ab&LRr{Ct-Xw0xunjGXk2IkT^U)r+atjs}OAw zct4p!ao2QC!A!wh9=Fxs`-TRRnSy*f<6#)zABGMr5#WlGFkhfyis_{mmr#PG(BiO& z91a&{hct?>?62PdZYkp`G!$o09DpIsWre$35d{2RVwR>lK$@-{O>vc2)ED2^PE3W| z1;$re8dun_6XQgPz4;yBplE0>AGt2hMYOwPkY5eAEt4@tIrjoRovH$S)6|Hx99LnN8*ftCjC-c zL+Q(sN-qL$CR0+=IR!Ii@i0uXj>H@e1^M@7;G{bbgHX~r}fx{g!dJvf$0 zfdBdUVL!ba!fLD{lU|Wb=F94*S9j0l2E#BT&R_TMtCoU`12e8>o(9x$Z^T7EXnT<2sEoS$S6{39S>eP4o~ z4CCq_4!Z(9T&p3j{K7Do(Cx1;(3jc8X**{cgW0&PD`DPbk1F;V5H3J zI$x{yV8Q8Xu75dSt|n`7j^oaob1uXzF*y&P&@VmrVfGXHAgn(hsFpe>;^jxO^NCtu z&i_80`$>#+igU5R&hfehzjS{3lqFeBj;27?OF;)+ZpO=IfiTxm-2#~9`W>F@r_TQa z-`5Dt-j<;EvrK`{NXNN#+^f4cudAQda?5r6d0b0&8nBD2V!2m$hb-Z1A!b}^N$Vmq z?`~5ck+OsbL4Aez{;R?np&w4T<_Fy8TLc2*TEz*_)tX2#Wq!W(^c6li`uFyE7}iM` z!2i8{7YAmpUkl+$4C%kzRK6&`A397v*GrsC=QtDbB$o(tbuF_w6tjpk?tDhvkIxRV zix>UE7t{6UDO6D63K=Qq_;lsobQ_dsh%?XeQ{gbeMP2bctS*&p$|0F>NU->PAUV}C zA}0Vjn~^QPljr(nmzkK=OJrT2iC5&il)Lgcuumlx+3)0emQo5$asA-rlHCCL-JQ=_ z=MzJGQ9pATkxzh*?wC=uLiBqK9#uzd# zg+dcSiHaaa#x$Ge#Rs`m@zRn?n#5fSw2Vvt1fYQ}O{QG;JglzbQy~72(N`b8GmIfW z8TJ;HmC_QgW$FnH=|A_P#PeojME41oJj^N_XM*1;7kw)4@^f7oaX*^vT*(H(gfFJ+ zpZ4GRfdLf)nD{CEq$^!rgjiEUu*)BcOoG&Z@#kUnlip}!<@rG7djD_4r>w3+KM3km zWo^NtA1S|JzV@ZmEpg0tKPimMzwhrPtLS4`evamTlCOprP;^R_)EV+~?VbN*mWoeQ zpSJzlt(0+R0w4Cd>*wjX--l`G)_$<$#r~Arb$3|$tYOhnd;*j*;gl(*Y=I(zA=A6~ zmUtoWYLb8T^Dtb=3EuVeQn1)AL()p{$qltw0WLwqL*Ps9$j&*Z-zjH&UEf`$P8a#` z=+oi4ALskpfqk)MYB=2G4@J5l#jkiCMjl@JsbcO95OZA0cLfx8NU(V%>!rM zE^;G3D%a`n#wAz)bvm^|#;{|ai+gp)S+|RHbwA>>1J~+Lr*qwSs%2!pu50n<_YbR_ zzNYw4%4xZ-lH%kJmz1rcYkFcAcg`-}(j@s7=V97*GsL^gdD47ezAwb%9d$#3S%j1cic?*43^eX8gBhLTOV%om$c^He$Ze(QGlhd?$V$Np7 z{p4&$7WqySPPL4P43M)KxfZ|E>Eh{x5$6+k%;Y=Mb#~*P>)3U?y2s~yXSxEjayBC$ a>CgMt_2-hf@6IJUzMH!`p6mG0+kXHiqKaAo diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/license.txt b/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/license.txt deleted file mode 100644 index 6949ec444b..0000000000 --- a/Engine/lib/sdl/Xcode-iOS/Demos/data/bitmapfont/license.txt +++ /dev/null @@ -1,258 +0,0 @@ - __ _ _ - / _| | | | | -| |_ ___ _ __ | |_ _ __ __ _ ___| | __ -| _/ _ \| '_ \| __| '_ \ / _` |/ __| |/ / -| || (_) | | | | |_| |_) | (_| | (__| < -|_| \___/|_| |_|\__| .__/ \__,_|\___|_|\_\ - | | - |_| ----------------------------------------------------------------------- -Product : font-pack.zip -Website : http://www.spicypixel.net -Author : Marc Russell -Released: 16th January 2008 ----------------------------------------------------------------------- - -What is this? -------------- -font-pack is a package of free art assets to be used under the terms of this document. It is available to game developers and hobbyists alike. - -Contents --------- -The contents of the font-pack ZIP file include 20 bitmap fonts - -Usage License & Restrictions ----------------------------- -font-pack is distributed under the "Common Public License Version 1.0." -The terms of which are given below. If you do not understand the terms of the license please refer to a solicitor. It should however, be relatively clear how this package can be used. - -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON -PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF -THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - - a) in the case of the initial Contributor, the initial code and - documentation distributed under this Agreement, and - - b) in the case of each subsequent Contributor: - - i) changes to the Program, and - - ii) additions to the Program; - - where such changes and/or additions to the Program originate from - and are distributed by that particular Contributor. A Contribution - 'originates' from a Contributor if it was added to the Program by - such Contributor itself or anyone acting on such Contributor's - behalf. Contributions do not include additions to the Program which: - (i) are separate modules of software distributed in conjunction with - the Program under their own license agreement, and (ii) are not - derivative works of the Program. - -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents " mean patent claims licensable by a Contributor which -are necessarily infringed by the use or sale of its Contribution alone -or when combined with the Program. - -"Program" means the Contributions distributed in accordance with this -Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, -including all Contributors. - -2. GRANT OF RIGHTS - - a) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free copyright - license to reproduce, prepare derivative works of, publicly display, - publicly perform, distribute and sublicense the Contribution of such - Contributor, if any, and such derivative works, in source code and - object code form. - - b) Subject to the terms of this Agreement, each Contributor hereby - grants Recipient a non-exclusive, worldwide, royalty-free patent - license under Licensed Patents to make, use, sell, offer to sell, - import and otherwise transfer the Contribution of such Contributor, - if any, in source code and object code form. This patent license - shall apply to the combination of the Contribution and the Program - if, at the time the Contribution is added by the Contributor, such - addition of the Contribution causes such combination to be covered - by the Licensed Patents. The patent license shall not apply to any - other combinations which include the Contribution. No hardware per - se is licensed hereunder. - - c) Recipient understands that although each Contributor grants the - licenses to its Contributions set forth herein, no assurances are - provided by any Contributor that the Program does not infringe the - patent or other intellectual property rights of any other entity. - Each Contributor disclaims any liability to Recipient for claims - brought by any other entity based on infringement of intellectual - property rights or otherwise. As a condition to exercising the - rights and licenses granted hereunder, each Recipient hereby assumes - sole responsibility to secure any other intellectual property rights - needed, if any. For example, if a third party patent license is - required to allow Recipient to distribute the Program, it is - Recipient's responsibility to acquire that license before - distributing the Program. - - d) Each Contributor represents that to its knowledge it has - sufficient copyright rights in its Contribution, if any, to grant - the copyright license set forth in this Agreement. - -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form -under its own license agreement, provided that: - - a) it complies with the terms and conditions of this Agreement; and - - b) its license agreement: - - i) effectively disclaims on behalf of all Contributors all - warranties and conditions, express and implied, including warranties - or conditions of title and non-infringement, and implied warranties - or conditions of merchantability and fitness for a particular - purpose; - - ii) effectively excludes on behalf of all Contributors all liability - for damages, including direct, indirect, special, incidental and - consequential damages, such as lost profits; - - iii) states that any provisions which differ from this Agreement are - offered by that Contributor alone and not by any other party; and - - iv) states that source code for the Program is available from such - Contributor, and informs licensees how to obtain it in a reasonable - manner on or through a medium customarily used for software - exchange. - -When the Program is made available in source code form: - - a) it must be made available under this Agreement; and - - b) a copy of this Agreement must be included with each copy of the - Program. - -Contributors may not remove or alter any copyright notices contained -within the Program. - -Each Contributor must identify itself as the originator of its -Contribution, if any, in a manner that reasonably allows subsequent -Recipients to identify the originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities -with respect to end users, business partners and the like. While this -license is intended to facilitate the commercial use of the Program, the -Contributor who includes the Program in a commercial product offering -should do so in a manner which does not create potential liability for -other Contributors. Therefore, if a Contributor includes the Program in -a commercial product offering, such Contributor ("Commercial -Contributor") hereby agrees to defend and indemnify every other -Contributor ("Indemnified Contributor") against any losses, damages and -costs (collectively "Losses") arising from claims, lawsuits and other -legal actions brought by a third party against the Indemnified -Contributor to the extent caused by the acts or omissions of such -Commercial Contributor in connection with its distribution of the -Program in a commercial product offering. The obligations in this -section do not apply to any claims or Losses relating to any actual or -alleged intellectual property infringement. In order to qualify, an -Indemnified Contributor must: a) promptly notify the Commercial -Contributor in writing of such claim, and b) allow the Commercial -Contributor to control, and cooperate with the Commercial Contributor -in, the defense and any related settlement negotiations. The Indemnified -Contributor may participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial -product offering, Product X. That Contributor is then a Commercial -Contributor. If that Commercial Contributor then makes performance -claims, or offers warranties related to Product X, those performance -claims and warranties are such Commercial Contributor's responsibility -alone. Under this section, the Commercial Contributor would have to -defend claims against the other Contributors related to those -performance claims and warranties, and if a court requires any other -Contributor to pay any damages as a result, the Commercial Contributor -must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED -ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES -OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR -A PARTICULAR PURPOSE. Each Recipient is solely responsible for -determining the appropriateness of using and distributing the Program -and assumes all risks associated with its exercise of rights under this -Agreement, including but not limited to the risks and costs of program -errors, compliance with applicable laws, damage to or loss of data, -programs or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR -ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING -WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR -DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED -HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of -the remainder of the terms of this Agreement, and without further action -by the parties hereto, such provision shall be reformed to the minimum -extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against a Contributor with -respect to a patent applicable to software (including a cross-claim or -counterclaim in a lawsuit), then any patent licenses granted by that -Contributor to such Recipient under this Agreement shall terminate as of -the date such litigation is filed. In addition, if Recipient institutes -patent litigation against any entity (including a cross-claim or -counterclaim in a lawsuit) alleging that the Program itself (excluding -combinations of the Program with other software or hardware) infringes -such Recipient's patent(s), then such Recipient's rights granted under -Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails -to comply with any of the material terms or conditions of this Agreement -and does not cure such failure in a reasonable period of time after -becoming aware of such noncompliance. If all Recipient's rights under -this Agreement terminate, Recipient agrees to cease use and distribution -of the Program as soon as reasonably practicable. However, Recipient's -obligations under this Agreement and any licenses granted by Recipient -relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, -but in order to avoid inconsistency the Agreement is copyrighted and may -only be modified in the following manner. The Agreement Steward reserves -the right to publish new versions (including revisions) of this -Agreement from time to time. No one other than the Agreement Steward has -the right to modify this Agreement. IBM is the initial Agreement -Steward. IBM may assign the responsibility to serve as the Agreement -Steward to a suitable separate entity. Each new version of the Agreement -will be given a distinguishing version number. The Program (including -Contributions) may always be distributed subject to the version of the -Agreement under which it was received. In addition, after a new version -of the Agreement is published, Contributor may elect to distribute the -Program (including its Contributions) under the new version. Except as -expressly stated in Sections 2(a) and 2(b) above, Recipient receives no -rights or licenses to the intellectual property of any Contributor under -this Agreement, whether expressly, by implication, estoppel or -otherwise. All rights in the Program not expressly granted under this -Agreement are reserved. - -This Agreement is governed by the laws of the State of New York and the -intellectual property laws of the United States of America. No party to -this Agreement will bring a legal action under this Agreement more than -one year after the cause of action arose. Each party waives its rights -to a jury trial in any resulting litigation. - diff --git a/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_brush_snare.wav b/Engine/lib/sdl/Xcode-iOS/Demos/data/drums/ds_brush_snare.wav deleted file mode 100644 index fa752637a0e32359a2339d235d0c069d61f4494d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194604 zcmWieb$AnL+r`H%F4fejK%ux4hsB*2cXx+{MHhE1vbejuyL+*gwv1eo&`LGv~+X0RR922gWf=m1?LGP zsi#%fxZRG?Rn6H8&TmqH9fi)8gEeiiwd&)VC@@i-9cTp1^zIE9-GsNTbCx@`Y?@=R zm|i9t6?s6|57UC^lCW#WHPH)%W%_yG4<3hyLcTyNs2x8su$K6rK;nsHU1S7yS9<{I z6?9V&!qKXkMR89rs25mT2PibUU!muV!na(B0mNn!N-`^hSXOD z87-0TRU0j1qHbYV!`5gk(AY>w9|&p~`AYrTd{sL@jf6(%W`r*fZDlA4OH{?_vxCQ} zDkAQL z9ooiNKvsmGFkRAJ3?Hp2)@t>Xb{Ta_mlPVHddF=KOHKL}_amxDk`(?kvXNzuFE}?CvIB*>+9ua; zn>y6?G^c%Hx_dOWEa};=IcP8MvYb@SGNvcPs)mTC{b`;(;zxI1_f7tVXQ4lrpY9m% zYZAEU7*-J*sPDO4w%VNLd(U1m*Z*|fx9=ABF6H~STYvoBf9~@1Wu^eTJqyWS;BS01 znaQ@q|KUdm(t}2dTeP{sZ(VWfrx|}atj`*MU+-%6d_$WwCNC+z{X=IUwtoP1oRYKH zLB1-fO;tDgwC`tSdN2^66MBdJrC8(leOIg`VV4+sdS^GI6nP=3Zyn(wEv=!JMJtt(AmWhg^ z!ZjVtlxmV@qxmH^QQgqo3Qvnq4=QPplMqz*LBr4L>2;n~Z6Qy%dsV(p_(iAm+nLC8XL)PI}SZrh;wxEABvj;Md9Ii7g3UYVt7LZ_%{7Ei-v(W6^#Zv3oiOv^vb9yT@A zyVoo-K}?xk<4e3^NvR>}!z@+05&8uoL-bFhiO>cq|HW)*Sf}o-THy_U)_7YprDkT0 zOSN{_{2tSy)~v9s=y#SjVfhw^r81$^QnTf!ImQ=~sO z()-h~+h*{h&KmqU?=ut-KHwuUo!AN&9iMo)m~`Z3nv1)AeVY+pZupjpvXxb28FqoM zK`wO8?u3MN%f%zstcq^eVau5wjzdHzYq#FEvn=1#a=>w1^# zDxLm2B{#3Cb6yKKZzZanuH>>QmB(#;%VOCLc8#pzGCcRB5k)QC`Nii7`+6RiwB-hR zpE0T2O>cK*mTQ1F!JFzz7tVOsLu*7?S_Rphym<2 z2K|6Wsn&ZtfNkspJ!74?eWU-d^BvfT$)PSmKTs#toqdX&cP0jodOACkfl*$!W+o`< z4`@e{2lT6@F+^b?O`Id-28K#6gob=$=|izBy3KD2y^RYfJl*N*cf zt&DG5cSp_22DZ9~>%}$vli0W3jEL~Wnh}u!q- z#BHnbGBUOPxp=7g;0CQz=QJ;BAU3O&JfeX<{!p#qac^qOO_&;ItW%I+Y_*#^{`RlSIaZvWr_Fibdh};BHs7--=nKBok{DbsWT@q< zxku&~q*Hj~2w!k+*fP_J;4@f`afMq!EM@6VpTk&I zD7AI%hCa&Aq+ZZv`ETh8L@FNf0QAa3iE}D)-QgvV%758Lm-O@hvNz;1{N3dJoErQk zmvDZ7bO2m-MSFW)SB=UQTut{5u?fE-Fj3s$iw!9L^S)cYx=f;Ls*ksRamrQYR;#0< z6=jY)IjM>%P>#u$gbHOO^N(=A*N)lc|L$8r-|{DU#?oo7R-OqJ!(A!AmzL*cZ^-?e z-!MkMK|9#yg(* zq@vCC_^ispCm9QV{?3cablNNbAmR|`D9|Q05!!eydA?ibhJmWdCQXd1S6Su)L&^h=l_#C?pmlD6R6!boEoS%Vw zw9nwkq8+wvzd{N(=SKfxN&>kp94|^6x{oxKXv`_KId;0kH zc^hy!zGu>V?iA2T*2uZQAg)A8X1j6a+%)!^*p+{+)R(4%AwZ?F9Xux7S6VY2ge>L~KusG8#Vt7>-DDd()JGh83n5ac-jfv7-!sr^KnF;$ales6qhU`_Q+ z^9?=1W|)#KbHmuspW)v^_l2fd-h=`XX3J;Gdy6algar#b8@@2;dZ^Y21Z_2bHtYz# zVjN>B4?Yup*77ATKU!O(AZ}L7_qY~O2{8$=HKV>JrNuT)Zd9{bB9VM4?o)y-{(Kyr z+%bV`u&MUrrpp@MO@*2nny05y&EV#Vjh-|;m6F-;OuQ*&Ok_!o)aW{q(aELJ&Zb>! z&uYsyoAQ^?_FB6`fBk8`qFrvC`puc>%-T0C6QZ-DotDU&TVm4dvo-UZZf-Cvbx1R~ z>BQ8f4Ktg}sym_K!NjP#WE7mZC;WEg+weQ#Y`7GziELp3W0yzXiT^itZz7z~Ea6Gw zvq*P*o{5hr)-^KGCP_CdY`VE5sx0hEY|rQg5oxiDbtfzv!S33V+!0_hJCutN7O`KX z8NyKZiNv|L2THxy+~M5+=nQ@am&F|Ci(IXl8qU71cI*si9NLfTh223{DxXj-|6LCE zt>ON%_Mmlt!m5UTd;Gibeb=wUK8$$p{<`VI+{}*OGBXBeuKYGHBjStl^}kHr7pi3K z&uXnw+PFBUD*KyM*zkGVuPINuJe&3I-oSMH9{!GZZ zQTh8%ntNZ>KG!q%2U~YnPUTu#_u>tei?h}j<$PTB^UV9^AGd!~eHfHA_SNahpAyn-LzkIuL5Y;QYHfg5xE?U_@4+NmqdFWXUME?im`RlL6BbJ^uzu_blB zeb4EbiGMp*JmTj_XF=scEU#JNq-{>Q? zKj1ZbgF6-KUTJk6tZY*`zUo#bVV_f_rYG4W^$U|ZaOp$F@+ zHQJ@<>&HaZtMekv7@1h3X87~kaQwyk&FdU$Of~pb|3TxqajtsdW>qY#Z)HjgZL0Uh ztPHCgS{3sVyBWM5xQWg{j{rCHQJ5U@)$l&%MdaF$(=m;~`oW#uBb3XG)AgLJ%jWB& zR59dp{UTs8F;R{OdcbGpecB|%5}KpiWSAb>6;0Ex#TjIaZYj}}%G0$%wv(f%WymUZ zj0y(h)g66SrKjgEJt45ma~x{Rj?le>NmCDfbMl4pkJy8F?Ny5@t`6Qm{y8of^)h+)b#p3*uh6Z#!ef)t-^kXK|$eo4B0*re+jkipUH{R5#SBk*-a=79QCVzVY6c^Xy=Y7|ADPo zRGDON9r(9=fQ@r)D=!cTk4CI3Ze`X8lWE!ifN4$t6l(^$ikS3;z9(F9+P#F}bN;K| zD8j~-8Xft`Q0ae&r&uTWY~E;VA`tJJ0Nw!J072j=G6b9y)Rp=c-XJ)|xGDU)s-_{! zRIK_E{=)n;#1TGN-#cU*dQsO1{Dpi{T?d_EDVkxHAK~+LIpL|Q3)-V0Whx-n6S^_F zZ*1qtvC+Mv#zmfrIu>;;cvVye`7`JfNRa2`qu^_PgItS0%_qtK@?Pkw{0{64FOlYh z|0&C)T0n{NQ;q@-O8IhYZld%|2;~kC`^1}u4`gGl-|!W?pxFUV$NGzPz+D0^UIOxj z#ZVYHM`;IrhWjYvH5-s$)K^Up<`$V;Sko7lj}(ll`ko(SbypRY->Ukrs<3>2)x)Y* zrCqBA|6WznIrm7ey8KOUj6J73%UW!^;{0sAYJcvGDlf8~t+-Q`=&)8Cb@q2au9?m{ z-XNFVmFPWO*~fLJFu!8?AE+>^aOs~eWtO4^*1ctmou904tL8fo6?!Yni;acveT5|} zq47*@=>^oo6)A40?C4B#ZL8eRC%TVIDZ(M;kkkpWD~E_}$W*O{+(;hLn*AM#S7qJl z8da0a6hCP_g^dgxH)2GNxx1;W_Lq6CJVkTc+f$14Z}le2Zodl#m4)bFqyxAP?ZG|* z*7%1A!o5^`gnyuk7%Oa2@5hbMF!dJ(1ebAJnGMhYJ_@zKJ&-2o((3OU zGTuVbf`7`|AS4n&)O=)=jqCX4hPf30j6 zAFI;6`i85^q+-?dn$eR{oOnzQY^Ctn<~faBk%(ABYj)VF>|(JQU8zsA@=~M z@itNoeb)@4&IQG23!@eX_YG4=^JI8vBI+UzsV1TK)Q}pdCaX~mMEQ(!G!Dy3)43Y= zB1~~bHHL_G@iZHU%~1wwa5-wi$*Iw~YIO~ zD>Ik;Z4=8@xS!f2`hmNHyO55sZFjA=XIYy#4%y#V<=ZRm>#F_&9y{FOQ=sqRgCZXC zo=~#f6G)=HWv2*@|GMT5IUD<*<`(b>Rg`~#W+11~$Z#+nPDW=2YQgVp4Vg90;kMnv zSeJ|(5pPo)(GqP-)eOq2y#oIrn<|6hNTEt*c}#dN))AJ9R`Hhbuee&V2_9b9fv!mfvjmIy=Vu!VRh{RAQk zKcZ8JmO5DfhO}uEfkCZ5l!9pY!h{6Ad#;e=m zZ$lLINb}Ip&Wd7u?%OY27OlR0zy!%7j{+v(dZl0RGU7z^u#k+H%4jrvNlY$P8afzQ zPA-CYr8e>k%Hq$$yWIDK*L~=k|NY1CP0T;sM}<^NDb=^1LIi>SX1$%8)A3 z@uspLz1{(H&*(JpAlC}iL96`>fMnkd-!15uuba6W(!iV&1OTC?>8=)XzT4|OC|>u> zAnr?TbOXqy)I8m3c|5sPPLRJ59hLj)J!GXiTiw{yT@xA^Zyp(y9yu(Ci)?KCW_AT1 zGlqsv3u$YTLz=5z8h@jgs83i1I)x0y7ZU5q{a9zhgzdt7s2O`p)xcgE*QoTScBYBy z2Sy8psOM^CQs3}Hnh|0Zc3yG{0=`TxAa4+hg+63b#dA(q^rx)5ZE?{Te|P(Ku4T2l zKFB=|$lP>pML>XDTq&9c9|X6cCD34SD47Zq+LvTgeS-F?u7Q3XIas$8x=)OT43HLG z2EB*PD8{#dd$`KkKAv=ESCOmc##YhHE|N)&coudk(cBo10CD{?!hiZif%3RsSZ^r5@V^rL2m#3YGHj4 z|4r#&5+8wxP!zHS`5)wlS70-sBGQNtfS!;$+h4<`=jSsQy#*X@&GXc>J*xWG_r*3voa9dh%0&aT5f~||p;z8R z!YOw*Zw>D!_hL_!m+=nvjOKdLKcqaaCI3O1>zctWDjncFTJ*NWRFz)zkNZv4G1npY zBU>|9R>dUSsN#tg@de+DewW1+^!I%)eF5*SOz)93y3 z>Gl%HEFz-h7V0GO2N9-@z;_Z|u>_n4Loq_$3G#p}J)=&7xAc2dvo(+O(YRmz3OI^w z1?B*^NfKNU{Fv$)xhbTUp+RJVuubIW>O9P6*jhqdEL7=%Nw^?Nm(xDzy{Ty!xZ|fF?}y3}2$z1dw51`eavMCixi4-zw3W}mdcu=6Mtrv^ps6rkFika_ zHp0e1hD#=$afbQ6i8A&ukD#_0x`S)Tb<#uN7uQqj;BCc8uE(Bnbfo))kU?v!bycV; zkEjJ)rbt?&OsP!pHYmPd@pmy^1<+03)p-OAb2gWIwlTYY_O z7olwbF6geV{#2 z)smS<@2dI-C;YcfzleaLj(G-LcF%UzsnMiSZut-D88j z1<(y{oPfZbJDL9|Fz#?wKM6*6stO#7;fi9d{Xt+=Nk2^uUc&M7z@k(PeIk?H{lb-Etxvcfd`rW`mGir=gw={1dHmHo6a-s)5 zUUSrgV$*E~cMx{f{wVx4p)o~S4q;A1Cs>0GM>@mH)K8G$u$`Jw;dxr+%fZ^n((pJ-tw>LBet3rdNN`Q8hW?z?37uVik29g8VqbM5I78=9 zhp8UwQhEX+b~^|LtuspU==<_!N5*HL#2=U8PGW5k!DVKX~Zt9cUX%5CGv||?+Yhv zfn?)aGL?)oe&-?Lasc8V!pZE1kk;tjxPf6~&4c2O1o{|bZO8lb~1J4$V_%ZM%X&`@IcUMk~Y-IRfqh8T@qaxC=M&hbZ#g~lUus?!26W7!UWju+{E9qc5v=+=37(QCaxaXc+PF!iLbVp zf)5!dS}vhm3{%A%NO|Y0lTj z)_9t6hv=@Jqe>TFS8XBi)YL>5tJ!1Pj*V82!$)DKk$HHU7=SByMD)V-1YR#9&CQn$ z^>z8C2f9z%!y&Qy8xgHSPlcR~kjcxzPn8eE8EB%Cq8SB0)V$aH1^Csi{8ss}g!nO2 zxH2o|pt)Am+n7(<4v~Gp4w?+K9N>csFm>{dP=887?d1`clw9?r@aII5`ZG9&7z${> zt~xDvGw5G^q^f<;6gZfA47Z29a1Q(d5nurWP_?=#Ru>KCQ?)ai=&_%Wd{ zaXzeTSQYUt^f8l!-(d><2Z2?A5P$~;K@Swj*b06SM48-}!_2cQ(KLTDniti|Ud>6Q2{~4bkZt))kPe>oZ$DjrL2<}u!u#vK> zdKZK#SGan@Lm{8r!T%5n`G0s+iWX7=9+7j-Vmi|=oH389rmvH z#6O>X$i4E1!z+0cmJSngB|6X-C#A6wzA^B24uD+nL3S{Blds1fMpg^Y6aszeSR~(e zKCvg^k#0@oc(PR_74?p45|INmBxCh0!Aa3MhS?DxqWA00TZ)xl+FD|XTtQqBhlZq5 z*DZBJ&zq)MHc@wt91%rrQt8R7+8?S!eTnwD8qwRZmg+b7A*@Q0Z zx;f@y<}#|(^b(QCJ;XgEQNt6x^+Pl*gHGsELjDU<8<=1PuA^_r+=s@~Q~mR#PxN(F zb+&7MsOB{v&4;8H>IL*TaXXFDX3*plOjn?#!FbRa_;8TuIt%8ylU@CkKc4#NaNs1M zLcb`TfY*3kpq}msaY{8oR{&H{zxg15Rm%B~)JNc(;jF4ur!%Ia{d61n7D#LW=l>4G z1W;~wpbMAG9cE&=$^KM)QMYks69c=Y#K3nZNZAzlPE;s>Y7&_Z9;RXg8GyyNl^Ml^ z`&vu4nZ>AEdQEuI9;!0JZaA-6ZJKZFOleH_;T5DFSO=qQnt}x82kt3*122%tfC~2^ z|04(B8N?)VpgN1VZ4}hov}HybeyJHJcY=$gW^!#slKj9h1t8jjnYuip7jD-*^;M#v zeKXzD?YA{%Irj+u8QYWX#9t7Gu<=r?xGV5moaJvF_!BtbZz(om_26~U1WyN9Kn>5A z-vS6YPVRs&2X_)D@ma(SVw3h7u{5})ZfelS;Be}-nFYegC%^?@C725g#SVbY)C#s0 zYp*^7yhh(67XS=zf&PMjU}4B9_zy82=|LrvweU!47W5sna2enrZ*#VdFv2^IS|IM$ zwNkZGFV@|{KdI`XWAO^ujS@GH$de2Fea%V4p(>wFnn>C5IGvX#CsN;mEd+zvQ| z=fK&TaH4^_zIMLykE)6pAfK+*tdG#SVl%uKwnur1z2SYb(Lamt;+p4+a+qAJD!$wI zl&UMjsxFoe@~2mILmn`r00*+dlc+54``j(TL(CxQAQ;5#5vTLKKLTqj%-0z3@Az^} zxvXG)fj#nNEEj-r3O@(j#+vYI;2~4ajil!>2mQV1NVy>six$Zl*dnwP{e_JJAE0x@ zGC-0Ci9B&gsiiL`uTp>M9pYn>_xpqhj`c@KtGEJaq4a~?2xnj#s+(lQ3b~VFO}>=t z7C`ycEEOn))ZAP06MP1~O{Rzy(0(>u_{j`ppKujSZPCcD6q|}ym6O#^vMF}?6`%z& zWi>e!V1q)bx*-RHUu%yBH&?}KSF2m8ep1WT2)dZ+DGfnnDMM_aekOl257*o@d^V?; zW*VS~$EMv82O?tCuPvd%463a#o^Ju=3JS0Y%1~|s9mv{1vau(n)eSZ7Mdxb~@dk2P zSS!>+QpC?H5n)M_dcWL}6q)1FR6dVshDHe&sRV4A(25#gv4h)DzPvolKdE9iG>_?m z*M`4h({ML@30tRJgO>;NN~G%nL-_KY=fRr(SIQ75&V5IoWRG%H1q8cADrb*+Ux|Ws zw{!E9_x3#jiW1w?$2j5~nUHLY^**ZlVjXPzTvbk=vKbMb|GTDV^*pnh(^v*|AMA%c72-iem?kt9BLpp{ z5hMApY=yFh&jyo$)o>+v6TS?)q)G69!VD<|cqLo|{soo^Gk}O{)>#W)!|T*R$S&=4 z^=s{I?PT;{th!O$&%#?JZ+L4NYC&W3Cwrvn?2dq8_& z8o~erk#k5K7>-;V|a)c(4`S4q2ZbMO?5GWHZkq5b`7e19g?FDUPs&m;%v$yjPH_Ja5b zudLQ>4d4NuB(}`g*mG50>klUnE2;QKQWhs-nfxR%K`7!^RC}ZC>Qv==NT#N~*%9)T z7;7?#ck##mIzlr4-2YX1$&UsR;1j$U{DQ|L{YedRgd9W?&804ZYEzrf0Vq3^Z zI5}{KuuSlP+uZy3-_{}*ZM|n*<4U&ifdu#8(rI=%e@I$h?dO8Z<~hBk$4k4r*OoPq zS9&TyPQt1sXL3SwHsR%TidO|r=Kd4@s5cL>U zs%9x!N3}sUkNn$EraEC}3_;XTb943}(UGnf*v_q^F91pWb|e8@2p>hRgPq{5&^d4} zbQtOdbcFK3M!tEj;&6;s>}|`Ip+hIVU-1*jo6?oPV(geW0+69U?aoeDGcQ6xb1Idd43t-Udhk~~m?z(-^)~f<^WlzXZpBeye?oV164EGNZK6V2s0k1w zk&c=%{xCSlyUf>2`J2Y6iNIKVFf~}dgCzvcN|^UDGu8LoV^b{tr<5O9s2`_VZ2F`> zs@rTD4t~^L_VUVbXP)OCv(q_)@&$sUx~UJxnxk8rwXs^|w(-4doK)#=GP0_Z{MC%%9Gc?V0ZSgsphRAcQIo=PMO0LF#sMeF` zb&+aC=hSthp6Zsu=gIeq8qSjTC<)RnsSDIy+N;sR3k@^0UqPqd>)@2OcF}%A2zKnG zk|m9%gNnm5)PIBj;9sgIzybY`)~K(;M|CwcJ&EzU0m?-D7Rbv#)ia@?`hA*N7^7P# z4nnWXQKFt0p|m8=5KpBm#9`l2v7WHPhZCJdK=YQEt_j!dQBBhffi0>}(k`eR_$=K7 zl0c6%5vT#t(kAjQ^g)GE6VP?4S>h>V3j0H#xzX%wsV?6SdM$N8E*`)BUGjSsN*1Jd$|hJXJ5_^_ zsYD}nH7Cb4?(^Ie?>*Nxc^h35`&&6f{EKF#3F4mG?2-#clOQ zRX%p@F56f^JFR6Ug25dFUJ%2)gD~HjuFrBmFPM`fE%Hc zh(zR=wvrfPFjW)Dc7~StIQ3MF#!gd5u;m&;)k?cX6RR7hO;ziwQ?D}BOtLxoklaju z!A_D0wiBC9G{NSf^N6Dgj{YaMQBtcD$Ve_qn8FmXD*`{@fLLjka))<|jRODjHR(KNu&2WNnjTd>*~z|PkdLp8 z*&rE+!T_cPFwK?VUq%mg9pfW?u_7ouVR@m0Zvt!d6wq-@u;&}-V_pz9p)%+>(JSBp zYxoW```E$0Brc!b8=%?7;`P7`;ITMHSpd`ndn?n>b)W~mfR+Mx(T?&w-~=>7o}-jO zm}8neBfqz8Wm#N)Q{GjsB|Zx&_)_Aqauv%D_~cV`zd#NDX8IvF!+%Pt%RhlafmzaN zXeE6`6rAbai%guW2u%;n)e?9CwpcsTe+0c|C4C26>#dT!&kd>j0>jjM)mxAp)kP3P z)X)P^kSf55;(lpp^}E&yc@7>$1|kR0vxtU#hh~u@$rZ>>@-7^KY*!~ClySUfHf1xM z7blQ(;IVKT9LDY?cSCA*9;uinsr3}ACkxLZRA(7fS6AX zrOF6{W;-=a+d*?gJxQy^d#IbiJFs6!L)ZX|$WCD^bb=2TWJTgnD&2tPVlQPFxJCpp z5Q>q1p!=D6(g5ynrV7a69uu3vbNW$ac~Eo1cq16x5<63_Y3rp5- z(#}`u_383e>Yn$Y)Y8|?+Xo8rH&bt}PWgtZuLGyBY?8XJT(6d>%j!@&)8Bsh-J zpB?Qvi_a}TqvRm9{@6YP~To)fo+vpy?W^^I_(p!hVM}PEw^ykv;Su zz~&3vxuJZ%kQJ!OpQSehc6f)lyw`m)fc!azoztnA~3aE2B3qFc^h49#Aa31mxd<3k3?!z0oDbR7>EjCTA^gYmJ zD>p+$eUbibXd^UTcLzLz^h6$jPE9(J7F?!nVYnGwA8DfRA$Nf1LzCtC&^u_g07H`m zjZle7)q3$O<|L1*H{*xM&g33EkDNy~C%%w5cnpzB(fDo6CMrhrOVg7qQ18O^q@GN} zGgUoFLQANR>ziu78A|o5RVNMg;k%Ru$$=WGHXvh+KU6hC?8ZuS=a8A&+2$>jsJV^~ zpb|wC9muT`9?JW;Sx_V81bP(GP%=7!>P;2lsniMh93CT>V2y7izlMH9f8{>VGl0d_ zit!LIfkCA>M)Hr8*E6?>_R28zVDc^ATK!h3i`Qc)rGsa&-w+ts1nh8tz zchVf8fm9@|3RH>R+__AJtITC#`@7Zh54HuTl6QHxv3=0$%3L zU{|Oey9Uts_XU<#XS=)5(UJ=FpflwC2q0tfa%8w%f>Y>q=rw+am%s~bd;T;3iLEOX z^JAn`p)2xPdWO72E{d&@H$tL#9EcU4$-jZkzC?MI<1jst`OonZJ{WKS-H}os0!*k* z0af17u8#bAZ!x47vcR5jKHn8=#Vz9>^TW8s!Y3Y+b_f@M_R=DV21=E2)l~huvK!o3 z?H*r)E3r~|3UnCz;#mr|E${8#pbbOAF{v=CO(?W>#=f5E~r?jxq0}7b+_P zE$ExXCe{_!iyCJ66mHfY3opcE^$9Eo+ae9bUV3JV=je`}4&V|Wq@D_yHS^S2_&fDP zcmVzz=>fOKBG8&3hFy`a0fq8;X_QRM@8q6xa~M`U$RT(_wWmJo=_{=8_wi%``;1aTT zU^#G3zysT{G|_-XvTlS(Dpq~c%FdjNPu#c(5z73q0 zX0l6xSlPz+21@9^_yT$}eK(NgyTp0}nf|rxY5yVrW5MZ90Xm5mr6X_v5aj+C4)%i9 zU?Kb}@CE;c;{;G}1l|h~{>_0%zOjEd{DaSdqYw+%44y^*#jXj=r0akQ>_v3(#31;=uYc)X|L&8sK#moSOxVGx`ZXmBcX$mO%kAN=`?j1c2MCe zGc=FdA`SpMLx;t$Dgzv>8>c>|LUnbB#;PPLfk;%(p^jmo`leKXrf^Zx03P5*!5KV5 zBq4i|QX&jWMA{+spkGiwq(68Z>VfcqpWHvlTHG_Og3{^x~sZVE|u;}2jmm{a>>TcujVBz z_lcjw@2+-Li{wH%$`8un?w-DF{&wygoSIQd)gjt${;w44Wl1m0Pgm zQC|K6A3`^Z!{B?2U1%5B$SmR41Uib>`I_J&QA<1n?c_qDPjz}xAb&)kS9_~(KxuU@ zGpSmgT*j7*v*4yuj2MaBm2M)7kq}@e(vCZ>{O3K!_VhINE@5|hPJ=zTB(y%1fYd|h zf(+b3ZVX0AfP6-2Egg`)C@(#Bv9JA^+a!FpJ5{g6O6stBwydVU3J0XUXg^U!4Z~_6 zKgi#}Ubqt)01i?g(K=KX)d@Db@|O!e!7f zw3jp$ItjZ`g1(42b5)Kl7uhncrTH>rVY0l5ToQl(%pHbwXsOkuwB@q8!~ zk6C%At~UNkH&h>vch)_T{=ybj?}AHAt-v$M$4n$I${%#?sHN&cofh+}7C;x#&p;ZA%cVd$xZ?K3dv{*Faz$1YD5Vd6c{g1(x^ZN!AK0XjSP~;P?KCI z1kUSs4gvSa5p&%)h&C`;zLSAE%w+au zU@<$1E#SAYouqi-tN1@DjlUv33iRhUFzW;N0=pR-mmOFx#qc^PS1PDZ8J9yIeIZ-{2^?70SV0q&w<_3z6;BO_hFP3s55z z3oX!N_+?W zve?F-k5@@QH2aBb)ojykHQ)>Ah14B13Nxi# zDO@-UHj!6BIbbEY7`g~mfd4>mpxJVJC`Gi$4ynEfLyhGZ$T(;b^a_bo5}-_(mj{B9 zd<$F)M)Nbl!QLL+Z+|`SQE4M{2GGfzav9hKR4GBwT|igu180MN07v$L=aAY+1a=u& zO^(6x@zZ21ybQk}zk!nYF7gJ!!}WqVK}Iv7bX0>W*k`mDuY->Uuj5<%i-Ga(2fk=_ zn|ldbkNc<^gUzY#(R{~ikrpBYukO7PgQ3%CxlBO+N$2G8;8kfc`W@T}uSb`I-QnHP z3h*{?3|b-%2gXZXL=*H_+6|9`PC{$pap*;;H~Ah-A!m|C!c5|niO8WkP|cvN)FQS4 zSjp93cY$;G6g&wUODx8N;3mXTaUQgdA0&PaOyl=eyUrNggQ4!#6r6zc;%#sXJy;Ow1bT$9(6?AF z6&_3T9mre922G}P58b-kUWAP4Xu~=RiB1|4#5zZ16h=BKtDjML}JH*v*bbS z7Q|2<{S`-~@LI9-QEA!QE|< zwV8SEb$9*xC+Ex|*$F$-ue<8jy|=2zm~5DrZ!!mcbNHd~7=Kl{D12L}rFfJa4Bl78 z0u~>o^Fl6OP+cTOUVBx8ZQS3J-UXTjCMTs2jtf|UP@pVnh!x!5L(SdFZi3s{-RXRE zzXygotCNlgwkPyV`aQ5O;h@PF?8+E&h&?P6ct9d=dTNS?8i^nJ0}o32lo zW8Qk69bd6qyo*}I+BqM+_Iixd9nb1Gw+zmAX1f#cp3~UM3c{Xiov=Pzcl}SSePKU_ z?Gk;%^6QjhzjsF!#+%+lxtSahWi3nGw@<3^e392x-N*BuWz~ZM{tnj6ux9=j#C~6t zoBb`>Z}J7N!gh=7q8uA9a>^KXCv1o8=no6OC0t)8zC>JQP5D4^jo7%uqI~!T-_x*P z!{^AgVF%S`QNb&xCb7xhdw*WuD5`(h6LMsZlD#9yO)Qq1k9wW_X3m6{w=z?NS^l2K2(8sKYa49zm$R4n_WFaOm9H}2B@SB6`Lc-Ob|5@1A}1dfzQ%3A);V?D;rf#E zP$ugJ;S(&M)jHe>WtYPfGKM-N_e_}Y-AkT}QuTrpG=-uA6oh-YSu}&XKA*fP+xqV6 zM)Jo{9sNV_Zg84v8QjP->Ru9gUuY=*aGny8U%+`|+Bv%xfl6OUMG zxFwj{jzhe=UTrneE2~ZW9WdcWCA*w4N-_DMU&cg{X$*SAjERjD#Ku3tklauXq6Y+CvHisxYq ze3v7l!jJhMMm*Cw{KXS5s~+(?6CMP&#XsgNL&YO5i01y@5y~v}xoUvP0|m6fhHzh9 zM)Z~|&*WECp%l(D#h|S2ZG5_b?vELWzd42X-Mp-Ia3}D!P1MCRIoQP==ZY>D?nyG0V7V!K2Wv5raKe(}=&(Ko@mX>Vcmt=nE1mKbQ|l?xsX_{>uJyVenc ztitER8oXo0!xp=+J(~}(uj>5#fICzlaaXvh)eUz!p`8_03h3Yy_H&lcm&U8W9Ot+j zt8%$}z3FOWaDbOK(1M;~nZO!6;|`G=&inq8&&4U!2^}X|v-2z{dZ^Yc zzsaj=T1QPCYn`>62V@g#9dBr_wYox>eMi5+nVg&aw##?Ra-?gvl#wbOu`rg36kAOr z>sOIUwxU>dU7RGO(9ByJviVbQx*Wp&a+17Hqg7hy)%;u1TJ<(*LefChF}XYQ=^ywq zCPaGv$|^3R?ez8%cwm)qG$ch^g2`W#cEYq}7G@_6@c^_@I@*LPE#CB`~2MLOU92w~l~E3=z&w|N17!9H`4--itHF27}!lTXDn z+Lr@`Wjg5<)_8Ntm(!jq{_q`TCBzwaiY>&QY=vrpxy*3&k2TwTOEK9VmU?o^pTlEP zpXB|+Ht<*;^d)mQypKP>{WLrVW?I?sGp0A0@PhuTqXjqh!*+VNzt`AtjTe<#>IAw~>o<7rxf3 zptG4B-e5Mu+`#GVnll8u1{yjUy%B*`>>uwqp^N!u9NUEbO&y6C;1lFYZxnwQs_M;h z6GJ(@U2Yt``<{E(X@a@D5@rDo4<6JPlf#0~L!XjQdWD_JhUyv^XDXY@kjDM0hXzkL zg`Ix%eCN>#nq|DCU)6xbQArO&ClWgmd$|%<>PU7JbF&<*HAJ(rrW)jNziBsg&pD}! zIR~MLNn`dvVfT#A9DMF<4}1?ScCG|G<2YT!0JN+XVy>0hviUHpyqdza1{E$xnL^gD z@{I_$&dRqUz5PzEurk_d?Ri#D-_Q0Jd#G=fyks{Lz2sr5ofz#G_E>weKLt(h_?;B! zy1KRAg<)7umX__BYXG)5l`T`{lyF=_epyE!5$_q(GIUp7^Rr?E5GEQ zW|i>={N=?*pAW9`HOvoj>^iGKHDk5pbzXzyk4Yu;(d6s=o&L(=c`tT_wS^(9h9jYL z!opB=VnTd;aCG8Vr)ucW(0j)?V?(iGjN2}%1M$t5qYm&u#2NLTT=^%|Me8B7v{Tq4 zSVo$N;sHXe&g);!^82Uw6U|oNh+qygEm%63!#NT>70Ty)aSn!Zm@;k^diI%F8+HUG z`^&7rGC0TFhEAA7ok~sMBV592Fau6v6LAu*vB9MBw`LOq@yW{W-0@5MPqEAY!HeUsL%qH4-q%oFXr+p?kuVeUu|(Yl%Rq>7 z@)C#>kL5l+L-g^g>Vi1OYa`}jV{5fIEt*;x*h~=zpWzG;*WyiwoWY}RWv@uk$8Qjq zJ%(b|U)Ef9QIrvr*+DT#ti=hGCx5|d-XpKSUh4gZ>-A1Eh^o|qW?HC%+gNW8edRB- z;CV!2y_?nY0;(EuQt^DFnQhe;abmIcLN5|E0+n@>q<@paTak30?e)rvbi9KoD&|?E z#8&Gc>k=DeWn(kgMA@9h${n&SD2Rrz(Ss;N4{GIdwpfIoz=YIy0ygro_? zqI62yYQ6^}MGO{|mBn$EOV)Rru$75_I!Vd>5`WO61LI)1ZVfYG3Z0f4Y!_RgH?dEF zG`dLAkiZ6~Q4-^=-CwQgJc9PXU_8d}s4`gBU8MeW^SagXk()y7#8RS&7|64UZ>$G@ z4sTe96x3qQD*Y(objJuqyWWvDWJBG34nVLv(FePtRsb=`GllykwVj`Mtl z?259#uRA;!Z?GgZ;Q+OX&00zxswvhodnRvaO(x9QU#??${AXm3h*f%eHK%-X;TITEW`S7a}%f;H6|Y`x|EtxLFsmx670R&)n{SbiB5H7Klm z)Gtv@{iUMr<96Q#uL=&qt6ni%VH^Knb|zWWzZ$lPD`E{?3ac*uoNf+bL3dVA6!22AehH)9KfXPTZyLPw?JblDb(4JvJr9y6v9Va|wM9?^ zy>q6T8jT-JGEBftvLfqbeUK|LCrv5f_&z8c9ZU$O3cL!A34BSO)^3EIt#s;^X`$1ra5GG=G=6g& z4x39n9wzbUyfC!mF~;Ca6K%Rc1m@Gf!i>;imC|V!8mgK(OVnEBdLvYN$fcs>RH}0G zQ9iE8zmiY$B=IvZAfZ;ALnC z@60h++&rU7vcJG~!O4RhI3Fw?w&EUcV43dc=qv!8R)HG;evUo9H5T)Z>4hmHS+|6tT{z zN?t~l!p%V4@zL&dRY@(PX#ks&^9Q#$_mjVR+S#g%SHYZB44avo7=|f`)97vh7J2#1 z9k-*`Mkl*x%%6IW-e?y)vv!_+4Hww0w|g!pGRl#mDelc7@3D5j*Ut z$d`uMqf{@`7w4)%)-~K1w!`Y~I~g{F2kq{nJpUSYLo|&V8t(I#j5-LdeBD?NnC^ef z&PSvU+vVF4F_Y!@y}_T@4v`85`66XY|0x_DfH`RJo43ks_-V@VXt$DOv(`qKe?9Z4=E^!CrWT%!pT_12h zvm|n*7v+ywhtM zIKXPE?u3k(^Bt2Cx`nbP>_|u-Y?R=~UBOgx4b~Oqq=(@m3a{fn6NZsyoq4UL*{vSx zaJ5*`DOATD?X?XIbBZSC4!jRkPyQB4N0nQYGfd5JZ|XHFi+)1xmn3yFaNlVi+8YSh z$3rc3HT~GlrHi;H-L`Ha_p}%59?|h$MSWe5_oDR@ue*1V_>9~<8?I%Q_z3LJwwZRA zNzWxz`$e_a$sX~Cx`I`nMf;{(f6G+9`_M^#$7N8AN5V7Sh3A5kyqSK83A(iYmzOq? zzS5$#{WCET(RN9(QuG(4g=LW{?5l3Awh#H{iZ1qL)>4#VN7x2dn#J%VtN~@{`@~8* z_*xN%0TOqygXWUiAd*dlFPbVZzwZc){1JtZw-q3w#Q*gG<;^u<;`Zp{Klk`tG4=3nI@e~(|isB9%N&TDKSZ^82F8a>M zjlOrj<<=D6d*0Q`3_H1}Ut<#KCtXEpbmTE{7B0yfx;<<#*Ysw+%k)_VL zFYJQM7kN1>$(J+oHnjI`GhLw;zhE+j9pmYvHixwiOC9BjJN^UWgedF#ELQl(((6!v zKGQ+;)$eo}SfFRiSplI^a+ zeySn6jmvpg_FWv}8zr&8Vy!HSANUsa(kxetsJdRN>IWyf?*i$AOWn-DZu*Nml6LzBHDdc7~1p=p>zk^YM87f7n0=`g7O>La3$C+Gu zs_v=M=^LtzYDm+#ILyZX+>2P9`24nBGjh{E@G^?rY&B#ON8J*TI@G|e?PduzASNb< z?yN4DvidQ8H2LrmP0onKmEH&~-TvNF*KR zXIaEnR!7zmX$3jTsn!m+9`FT(LGFuDR(7$UqD&@H3$pVAIvVP#@%j^VRB`@=>_u3Y zu`q8%tk18lZ+7^#B^CjWU}UOoN0 zDWE&y64Ms?;R`+qO2|xNDEm>SRT;>|vC6v^m>>Mt`5dUNv$}UwA3fS#PrIUxJ5FVD ztHWh=k&TC*aE8@1m0+M7X)-2TZra2nN$UeKiPv@hphGHJ*ou_9%Hr4 zEi7${nO)GrY~$a^>a(5KFc)Bw$!0Fdt7df6B&&J~6*W_wi+UaC$!jGQ3rwZDqY5vl zu86r@S~tWiUwJFpm&zaHCwv2Sf8I}1e;4uX-K}rzxwXiuCC^!}2}@)Xp9Grse5yOo z)Nz};3-w^P5C2Xa$ay~8I%sVaZLKU~k}#s6h!7wrvk$x@8_vo?8y2q^TvG>?k45SZ zyfqt%<#`k_8B4v7Y883x=i_DX6V=a?eRZwhtm(ePRH^51i(CX=3luJviVY3oveJmL)718|HV@1icx_g}X;@&!0M}j33KdX}J5vewiaUY! z<3)X1t#&t(%Gc6uf<4`_>?AQDZCDP9szI);81i2C#IgF8>VoM) z{ng&U)!l;OKii{{($%t z9;A+(yW!QSLuQ*@PBsnGc51s?*d?~pn!r}FL4>7-$v;IAYrM?hZ)Zh^ckti0W%v!& z)2<2A*%HoOe(cMZ=w#DYjnnHDbt1w;^+DudwI#@qY$nG@Zk=JxnaA(McGN&!LE_gFfe}*U)(zO7 zmsM7^U7aJx;$9VtyUD${5&guyj$~ZCpsv=cYNdW+TGKhrjx=M1wd2*;4L*`@XD2wh zxmjO04{x9cC>Dey7R4V@ZS24$c*UaFcYMln>y3CuN9bz!RlhOy@EP7WUqnWlT2V>% zq7Kz3vbnvRRKrcQ|9ex7mYUBtzxpQgF#meretFCHLHsTci)68ns{X%Be^7d%G42z+ zFZ8!NQvDn1B5a+XD!qy#lf4+9@HD0??p0bp_U5UzG%x#%jKHShjV)i;xbO;m73q3g z*=?sW^=2G$Izxi{v-KGk%Z}D%XeB@C;gD8e(an|oKii@1>Ab24&up?&9oOEjZ?6%R z?T*k~+&1~hkM+n@2aOBOPmmf%nX9Y@4rcLexA}#Io3RvCvY2(eD|8Vzc~9O#oaAlz zDC+}%Z*8%P^P^TlbDe$Hu1e+8ndid{+a_K6Ovk zF;`V(>}A%NYE(asH}9x^nXVJP)3{$hgtyq1p5RKX4Y6h}PIb$e8-X0uS@=(2v^g4j zEu*l#RoOBaX6;q8F^}0wbH+NEnQ#GY8~~fCJ}auG==W|4bB$qcn@?f23D3+X=iYdB-5Snk__Em@ zQixt+fb7Al64_CV{pRh|ZBz?yiJqvAtA%=v_m{HOd~XnxQQS&^ z7?IUV57+rwmIA5>!y2<<0w62vKy&C1VHaYx=Jjeg+GRBQEfa(X-_T{afd zDwk$K#d{anR2?PK@Otox&(}V9>UP$@g#L8bhH{76xMxDO-GOcgr-ZxEX-ucej zYj2^MtmE|(Q$pR;552TBwJOm&=DkzXyd_?O+3!WO%6JTaV6)VCOyf0C*Hl*TmDXwk zy+1Fpc`vAzEzZ(FB(KiSva~!Cu4fIsn4`Deo>1FUv6O8VuCQss-dOS~+$2O=o6hkatOx1L zeo{da^kUshZ=ur>7yQk8p1eM|JM=zzuldor&9Y%UJfhwD2uj05sHQVP1vg%`_hQ^i zW`$=|8&f~DLmdw|!FKMWfFEwS&&3e9#kBax`;85B>d-8Q#ZGQJ!3^;4uv7B_{t@)w zrB~eh$&~RNnq1Wj9a`gV*o}{eVbsl4&s1iyI<09ze9}GgF~piv*i1JiUaGua<&5(R zyOSI=L)^7;0@k#@lLl1Uj)LW4kvfUlR0kD>b<`c=#%i*M(3`ho5qu1JUlLg+IgvH8 zyGthN|AM{ZFx)03;Tm~lp1>i#0^+Q2k%|yZOBru{=H+E(c9u7%XZaH9Vo$piTM_oe zUf^FB*4H=G|G;YLJ1O^D5%wAB*+uO1Rc{yQ=6*fQDh4eV44lVLhOu)kA6gS(Q*nu$x*>oI?^j zNPPA!mWcm>QkO8^Jwa~5mu_Qsr#qNDcbTZ(TxaU4op{T9qlz*ov5^a%{vi9l`pTIieNuI&|MoRZFXNB_@`R+bZZ;eeg)lS^!ebCZd?B(?Qq#w zMUastz#{m-JV=(Q`8ld>zRD}UgJzJN;MFi&)DSNY->Egc2;39rd27-h4~q73Jj@c) zRAIv3)zoG)#cM25VuD;I8i+5l0HhMLFdh$zQ@GbkC(ptR>#0{Be$j`#`J{B5mhYLg zzsf`@>}C8MvB1Ole4dAQraJNYt!m({f{*Gt{{Wr&Gk%d~ ziFQ+C@uT;%N{=bjR?LY5G`R-0qT)lIXbTQS8Iyn~U zTGYKZK|6%IXxf#&p<8L2#pyP7f11{G*iIo&_*R+KVw_vlJfKsy3bT8qWl9)r4J9-( z*s8^A%i0*p9}uVWw|S&T!X2}jEr)#k0K3Ucaq>#?TF{Zb5uIQxbws|l*ZG&hDEq03 zhNU`zEK@LC(RnViy}DtBH6qO0E@e zMNRgn$V1-xf8GDQX!FT^4!ukw1i{5;Pz2v%SCbQsZcPe+(Hh5@`j{SSc~O|)IPMi4 z?T%vwX`bnNW^`tD-`lU5dF*9n^~@?(om@E6Syw#=pL^x>NbmgrCu4eNsggURZ|Ui3 zr_QDNs|u!+x(Xvn$%upTgyGwGr3q=Z_Wscul~yNpY4@HA4}Nua1m6Xwd!K?z-}8o< zRAz%7ZGLfw=z>myvskxtV!_jQO%Hggx0%Ak828Y*NwaCGTbZsp$;1+a8Z^Dkzos1a zA?>0SCW3-)gq`1!gSIIoLCBPV-T2v5=TC9HoWKiP=VcEOP1(1CFtD3l!;jFHa^gzL z*^(VIeMMz9NzN6d6cVOwCqKe|-iO_SI&v)w$Pw~1e<%mCMLYu^#7^>`_yK;3W-0%} zJ=s(chh@#jco9-R;VQJWp)>dqLu`oIfnUglG1_j#yZQdLXNq5ZZ%nj!WOkVX%!mIF zW^PAyaU8T{Tkt-N(UWkE*O=CJGO?L6JxPeZDCB`?%t-T3GLbttB@EHIp}w0(pLYwp z4Gr^R*lJT=G-L~`Skb{cWR+(5t!erKw8g&qpgf8teOatOWM1D~np%3*w19=?glS4T z$bHkm44_lB7iPg_*i6oa2hbG;vp7?R<~V#b&1jy^9IV4;>z0_#jMt~Jq}d6NF~E+& z5Rr{*F&T6x~*e*qBm5RrGA_7REa+jTV-j=*DLfFY_7-a_qvO2 zX%ciw>_F;8UQCBeu`EVlRcMS$ur4ejx7RQ|Liab*^)&OlNjB4rV=Szt-mI8# z%5Rd@J+}%rJ zX^XOJls97NH_xE+9ghpWdWL(QymLCAH-%0W%@4-WK)!s6Zo6kpcn1^OY~ z1YlFY@EBg2m1X0&4+hfj) z!>TQHbhm-*S`VK+=Ys~;;$szF05 zudkiRWW}>eH1+HfTW9*viP~r?(zhv~(i4|kLEVH?qzXKSV^|Y9lh-5{@ehqLB`n4U z_zKtJb@LFl+Gb+aW7SEIRLk@beOb-YG>b&d#S}WNc!Cv0HJW$h6MI5N_oMkDZm@sg zoL3^$A7WHHb`ZKz-$PUVlWAr;Q=QYn3{`jZB-K%s(<@aLRbGRaM2I%RTSWej&Q^%# z19Y(JkZ)52jymzdA`)fy?H>2?n+EacBAX` znH?x^jw8n+<{>MFIjI(F!7>R=oQ`MSnkJAD*AoN%BVmUi-6$0sb<5SvGji=aQe>>UwFx!|)pdFVU#mHe!ooTo%MGs~6RQIc$bnE9!f^np1Lh8$zvBt?qgwxikxs!c&?!?Z(i6FC|T=H$NbH$P;Fu=pR8i+5l^HUX4~;SO5BVU%zJYdD;bx3FtcP?;qa-lJ09gjRR&z3Tc}Iykq*in zyfOLn-czi<3|sj#I0eV?F-@OcF>#=7nedFs;8ESR&1y|A-?h+#0OvE z78^!dY5*qaEO@~T*BL2-hKZ(p3dYeC(1JJxSF3~K8{Xs3L|O9(FXlbgC1@&3RntZJ zOe@o02Xsm5$@qmP^0$Y&?2^h0Pf1~}=bUs#ISrkT?l?!P@opWRot(*CbPr%Eb7LqUkA{Fh9RYSt5q-B*y*+ zuOp5L9&p!(+68Nv5cMnGFehc4ILbH6OfZ%AHJ|9Db}|a8Q1zLLrNcW=-Nc!!P{(ZL zZJ`wLl}*`?Vie|Li(vo`6W3uQb=`5fPF~<~Vk+A~jLk^qAw3kt#Gt2 z3m<3Q*B4kU^#qjE-My2K0(#VGs0CRX$7*8wzZOcY7JlBTCBTo9{GNi3r$n8G@SdV7FPm3HY6_DNSqm$;$w#38TKWe625Cg;QgeM$SwA$>&OGN<$o^1IC7 z|G^_#^9*!O(wOJq_pa!o?gO`us_qUm6Vz5>#_O|lc!3aYLGgrkOIA^VqF0!cc$hfMoyK*)(f6rIF}?{Yde^Zb3Z8%sWI3w3JIU*m zA2d5k3~);B6Ms{uXl4;EE69rcJ;jiGyo_B|RPpsC_9UP0D;rO|$yN3T@g^^EBu#RA zgQeJM>h6kR0uymAI;Ji^gpQcQ@3J`27?!eSW5&FLhgJ>E-d((z=*byd$_y!F`K4Exu zf!y$&ESY;|4Esx+F_XQ~>ZUiwOVS^`7OcD>29{le$2^;v1@AQK)r4J35tsi~<)F&{ zf|}zE^7g8=^rthbi#n+Vzm^wl>BedlD)U>fDU>rRvL34H|NnL=UDKq(Cpssujm0UV<|AD%KPFJsmkQfatjbMFg65r|56>>buoQ1@ zuAAL3l(6nA%5)Zw!id&WG#Z5SGLAuBtLggEHTGH6A z@d+}gOc3K`n0O?12_I#dOJa=pO**WD=tUT25Y&UEVgBUoP5niIt)f&qaGx1)Gfo}HCvbfdPUIcNnt@k4_jnv_a zDZT7gZJ6lmZPh16_%-v}ae6rGu1``;IEL!fHpZxUU0ubgLtZJh(%s^fbHUK!xFF>)o#s2e-$T}c>k4ooFpVIyoOuhLIAn!TdB=Qc3h zLcM&uVFOFTx!^K@4|MJ_O51Yqp2(36!i|YgP&7Y8_9~YnkMi@M+p2|_g({e3SkU}OH{+Bhro9uq;NhYh?&C?+ zg}L3k=K0K3uLIqKmI$L^5yiw<>pDM9YQ2wGi>r7J>a$lkia3-`6k+1At?AE;K}|M+ zk2R^-eR{Gb@V#zMktYu+-?LdMy3u1Y%S8Tyy>!-V$Rws@7g@!URvD|FHBscX)<7je zOcC_Krg#R1VrdZ%J!N-d@Y?;~!NBw3W9);4uq*u&4Y4?j6@~GH5NndhrW7m2t3Wn3 zopM%jzK%Lq>hh!HpZP?QDhEgU_rm1XDbDNj)fAluQv4$sfa2e7eH1Qw!}L>qp7frg zrYyz7enzlEbT)6BvpPi65$8e#jHg>0I_YLORoA7wwN1NthB&Pc_%Gc9Qr25TZryy| z9dfR{zzFjhld*<*fIC$*IW$+OWu)koBWC;yTR`)>((~e`2a8hQbQfa0y6Q2ikshGm zsp`6rey<`a3yxBpoFYS2N^DB&R|Z#O8;H~+NSC^!`jg7n(;MkF)Kfjz{I1cY#=eBP zvk?Qo8%yG9;w={G@g~B|)>$zJoy>xyur{QXdqRAQB=xsHZzL9wr?irwpRk+i14YIY z>Q8bLjg@bh63b;eI4!EG!}!cgqtJw_7pyMzNIGmc%SM=H3!4db*j3UjpTiY$?nkmh zglmSg^s*QhWQ-i`O=Ml_hL|pw+68UTns3jNAFYe5y-Z8bKRr#hTuMmfmV6+-@PB1@ z;%XwW5@aJ4^dhSbdx=B;WTq11`PQT$7WNNWU0#QdvapVY?k1hS%8!`rG@;-ikCeUm zYU+p{%BNF}kP~{b!NiZ2B-~dAi(?$L!@E2e`^H{zG{@O?eSvh_?b_fOQeB;g+C&sD`G!S_h*|1%4Uw(%#!fYxR`Yst8rI6IfwB2fMMssws|fi_zrG z;qGM|LzAEV@GI%fi^!{99!8VWmz{WyVbtaSN+IR0=y!PM;=W%UF!B32}iI~RmDw00_#bg2t zKGUfz0{hJu7)U689Odh$xK+D0 z+9yl-UZ^Wh(Cn?Ef_fC;grQmBc-!p7mYA7cz?8f)%g$2q42ZBoe-65Q&qp3Z}qRSRIl4x)rG3 zxjyj~9{s+t#Gdq1&Gb^$n;7-w#N|9yHOaT|fa2(Vd;iLTzjp_pbfgF_w_#2qd zmXQuxg{^~btRB0AP1!<Az>Osi_JtFrIp1Pw6|N+|FK4Hy!zK zes{~`LDITnk>VLV$1JppPcg4aNmW30QWW->-1H4bDu+4|YpG`{*)4#i0nu5VrSg-y zI9wH{I5dOxH!J9KpTViTw(5^Vy-bAPW_bq)7jqF}x!HGqfw;16a0XMdq3{DuMPC9L z$aymnYLO~^lJvbuQg_m_ABkcCz;798=4@8(G& z947GM`aJGamaYX4)LY_^qwT^L4Z5IdE8BSn;``sg&!&zjKt7XZVku_edr7^QbVgrL z-1}W0!Z*5w?#psh55pE#j;-f6NJIR9$8k2(Xo&;tZ=O=zg9X%`x`F&l`%OIY0u%nv zNy7?r4hldH^80PURJ2bwp+_2g4)e-*v~E`+556LG;WWJ~rJiE~+OMm_kH%#~U?6FZ z(bS7H&U_$;YD4m298mvwF-j5=%|!PrB|$6GjVjvfd;rfX9`J@dv-m&eW^;PyjBcmc;r6TMHJA7{}g38~qgWD480 zU-Rcy4XU~qY8%NTsW%aKoQqt7DM_8WMZEW4@{6b;SId&3B+blCFXAy7u7X4C{!6G# zC#1Z|L3gF6F+*{ZUPX*hBt^9S#44Dor=)3gGTdMQ?# zWGq5X10VDzevgzR*yttdQtmJ>KY8+VcqQE3s)E;=*z1cp(iDbglml`Qqkh*MH&snY zA2YYqBl_EJt33Ep=cSxGhd8!K;^#k5jhke?{hyb|D}-7vtL50IQJWPPr%gK6 zlQ4WPRa+TTUA^KBv5=Kl?32G(qxpP!9P09cq=}Rz6?HnR%oekW>=>uJp2Q<^S?{On z;40l@)rj>cOxqZS((|ZB2)!d@Al36b*t{)!0Tsn)mQJ=82Si4yB({m1a;!LRm6BD6 zzszIT_njj5*#!8V*yFzNivPkU^APnLwBU8n!?Dne6#6w(54<9WZcfsD+p|r?aty=m z9-Yofflmy4SG;Ceg`Ya`LToa`l4#KuH$7;O}+AjMt`FxNnS+akG7e=%zW~u zPxpH12=_Pdu&bQe`kh-6Zt9nmXX5Y)=^w)tev`-@VdCFmPDHlz}#W=-`!~`?kye2-s73!XyErcNKt8?&n9&nnN}VnyOBKU3dr05{UUZ9!))7kS!?^3v4zo}I5I zkLPY;HRi%;n$WTu_K<()1003P_!el|BmSkL$o;ZSS**ILB%8ATWUMUA50Jk8nti42 z)eOMRG~Ntu(yW`#jCPDE!$OKC%$hIi1T;5m*n4QtRn(+QOf@LMY=MkOK?A8a#1+_5JidU{8i@#w>0<|yIz84}r9 zxknZe+vEnGN^r5A@8ZbUv(@DEn8CWT9ngy=;%s1jh_#wexabO zz|O-t7K@vSxoCo$N$-hO3v^4b0adH5yzO*v$tAprae6CGR~Jdu8LX~S6}w#jzi)K| zaV*buN4-r?r#z5Ed2#{W3i6oNy*YKvRnmFzv&u?e^4&$Bv&S5uKA z<}5Lj_ryyvfI0(zpl8+rXjedM&=g?;lrx)gN$#fRG)HPOugQPs=XovS0iN)pR&jYz zmbE&FzvUj{v_8{nU*ichP30t4n2DVuUSm9a3#-{Ua_wzloy2LrivK2-!$`W}wio=r zqWKXX(`P6T9SD71rCMCTL7H=?F*Vx*u3TYu!Qrt4f)XdY7qW z-jnuopAgj$9wN6;FTP8ag56FVb;OzFv`~+n4aAu>X3ywMH)Ti7F!-kC8gh=P&)80H zV|l1}KS27?D~OMcSkY2kH3y~XIQ14)S zIB6Xb`w8D~W20p%!rsfk50eR#t|0Gv1Y5{r$&WCfbixG`#{-0ShO%VVjm5IM>^DM6 z)yXTHg~J!^YxHJOqod5c?01G>AOrKJL@0 zDDR)vIjDz{eAdi{<1Crxw}gAg)B}&xY&=d=W_lA(aEI2nKHo`RgxX#oo!0x=yR7nh z(~t~<>=+?vKkE+V;UQ(x(K5BjCC12C5KrpUaaaxl`m)``4Gd=0@iZ_(tXWNxoPoD}ewP2^=uY5uDz`s?@4e4K5v7zQlm^p9hMP$iUEx7MB? z{iF}$V#XoeQs41iA4Vmjp6U<FYrgI&6QhIZ(pur z7v8!2H~rF^n1Tl>A9lsnlDm1dfvLiAk5uQ>#&|e(^(PvmsmbW9hv|yDWqlHVPJ4O4 zB$$s)n7fwZp+d6A9!^c(Q3oD^>lmZcuz&nsJOdJahh@GMXAg2fKzGU|3$n2q5bMoO z`~7^&j<9Jk!+umX7w7t5zWnn=^QYD(|BAM!UQSBJ%Tj-suCx@Re^a1wMGye2!n5WXJ0 zMrCps+qxy$oBSMnmAo3|7LVSFat60Wmnd*I(nmB+4$=VhPKw|k3ntg=Gbx{#v#J;K z^NfE*2Q${I+*5m*erHCM8u;Pl13cx<9)kcQiQ2lX*ptVrFKBc}q>M ztju~b?s4UhXn%ZPX6cM)qq{OYVpH!-9#&bp9!nKrM#}~#a# zd{8<$Espk)Gfj`1CP(bb>G-&s{_pX>f}+VpoN_ZUac0!cY^XP*+VDte{c2^z!Y%eH zigtx>M7g7>(G>V=Oq3lnJ;=JaYY)Ek)+AKBA0`i~8BC3*MSa{idu4QUFfIBqbs#yM z+RjGLry#_*wrD;hqmO5qoskXhDS*>Yv-JIv@?nm+UQ*d?{v1JjYM&G~YChg)mTJ1) zj=QFQNuPcAVYsO-c`&g##i^cn_k|QTQLuuA97)clD$^50DoPjQ<;mn^Y_iJUjeu`& zN-FSCIq`u5<5ZkG=||sFHfamN4iDQ!$knP zc@_BTAzm%n;a#5!&rs4AiT*NGV?p#&#ubtC|8OgZ&5nwp)Oob^B|SJvpPWvLsprUfTc1HwBG_>ZF3ZB=uG5p?G4}a?In1tTQUF zt6iIBEy{|so`gyBrMkz3;>z*Au|XAixNFQysuCa03gb>$pJz3VpU>JByb?d|vtCGQ zz};V}m^@=1S)aI$%1FVmIed~MEJf-2Xjly*>KeAfO^w8s3|6b}PSZ0lg|NK`T?MbT3@*cvtpdf1KK8N+Cdc4v&vSedaU8j|rR#$<7LIQ$=-;-K(II0;97 z4brmtR#TfHnln;X3kfwoRw z2v_P^FJ&zPYKQz$Df5@Am^G0*qm7KWq}=bftSBCm`V}WIOO8@4jeK~Dmy>)lyQ4H# z`%)|Ustu`klLM(XstApue&G=PxE;g3(Gu%Y177SFJZhK52J^z+I;H1^p9U|4i<6l= z_RQpaocL?;?)VO!8%@+k7Ro@PV0O?n$V&Fh8`scbe4?AHVzMMI7&PF2N(Pz1qk2WM zk}9yseH5wd?N0M}lNeMh?ny7wC44V_HJTMZ;C@w;Qs&)Nxq1ydXGcteeMlj4Cc$i{*g?lJ1Yk7Wlze$p<9D0F!_OCeeiTR zIGGXL%rBqhn^x0^KNYQxRt9yVuJJ1@;<5PY@YA?K#(UvsQS*$SgUNb$)={CQtK!s$ za=it~hjG4O9iNaZXfB`mAgekx=7OwKG+cM!c)tzGnYDB%=;+M-(|PX|mz96NgwdLu z+@K5QKA&N0oP+*%T6}NZjyAC-R$;##*qVH=t7*}dP44@&QLk|C)Nsgk8Kp#d6I@#3 zbk^(en3MVlXErf)OK@X6GyE5?yg;A8FF|q0_G9X*4};H>N5i!cbHi{r1h+fYDW0#o z-6Yr&e}H3~537$2-!;{2a;W-7wLd;w7wD%5R;e4NGo`bpFqxi9m-2^1OdLv#Ef1c_be5JGe)!?j{Ff{rrdOPS8-LHoA77lE0uuRqVH}7ajI4SvF zC+NWBspP+Es)OL}JYj>3h0z;yln=#^g|nRJxvA+{ZIW%6@Lox|xIHPtt!XWG9H?AY zPGUOkqDfcrC4bx_{tJ_}HtSf{^%VPclL~mTCzAD9d*hv#$7l7svgvZ4)GXZsZ|DH) z7`LWc>!yA+NhIHKx>#uaB0f}+f&FP09(1BAfl{=Y^d$=dw$-jDt(*1R5VhcgF84<^51&F@zA zxHf6y{1(+gzE@?p3|^yZaDQ-LdbX1ceNfy05Huq0{!GWb&eu z)s@;~ur+DH4^;}P=%vzEtfH}k4rB$@XdfEgIeN0bji>4ET^`>b&r4Mbo{WdVA)lLw zRTSs3G0uUV-x;^T+)oeM2L-}Ka`8LDoiN=!!FFnvilz;GM_cj}HTFPR-B%c<8W^~D zlegfC>fvlU(sEABO3Y+0=c1RLXhhZdh`ecj{0FSrmFjYyJKEl^?xy!NRW_MHW7xvF zOcGbx1SjbrKBo(84JmdE`v)0e56Z&dRZ|)Tt%C`WT0@nvDj2Z)b@vq2U$jcZ`Zeo- zUd~(1ODhxR%-E{pKSeDxCuU^}4_7JJ98^p0GN-##l0R7_o4=RpaNAXmJwKLZX(}gM z|4-^kT>Bw5IGV1h2d=1%9QIXJs9CbM>U{UwxQxosD%QFMw3oaZ`9MzFtM+cw9gDoge5GG3G1 zEET~8sCqO{)gH?FEoklQQ1FLN?C(5&lJ3SA#LWh>vdoO9&4MqT5ky%Td6M}g-CZX?3%RULrOWr{jvrHUu0FyJQ%!}(LNIf z$+$M_+T`~uN9EzUvc^+B^$Fe&?tq=U!ErB`EnZ%(m0zssp|+=X51V3aimy-Fv(hh(nuG5zb}( zl(o*aTN>}E)J_RrXUCI+QR-OvaL;S)Zjs%{+U z5c_q}7Ze)TMYl&4qZ^_kx^!;Q7nWAzoeyuIM|{cI??lC)Qx*HE-~x`KLvSIyEqu&# zToW}?c|RA9NfzLB2PY@OTY?-J*F{w*+pY#8#%392CyvR#b58hC@uC5l_OROx#viGOng2R`Ik!`Wm%{;n>JU`TXca|Kg^WV_Ie&_y;HG#-yj(w2mteo{j+Zc^cesmUk>m;+d)6noWHQ3x z%BjiBc^^GyiZS2oYFBLUG!qTawUVA*1Npy<`p<_YP2(HBD4RG+VFM3EVg`- zYVj^L)4pnFPbJTZ{GF05yj^V=yA%!If5K|vxNu!KRENbA_?wRE%XiV|^x{pr2R(!O zu04WBfJUnH&c$A05;H{qja z1RYJO?N0a9D{hgT!CqFuD(zLLS{on0F@35&HY4ta4{ND!?PON*5BXhQIUvJ*~+|irTKx++b}qTGs!5)ECxU?K6E7 zd@ZLvDR-R_jtRGf=Ytoqfxp7FvjY8O;z%Lq=0iyLZh7puV2sYX>*!d|(!KW$&xB=I z_YpnO+jv*X6&;0l@>`>Dt4G6PaowPgdr!O`znD74e-Cm(GS$E4#J?xm;<2*fJaJZX zzdoK&XU)sWlrPJc~J4zihI_NmH3ah=imc+Q{VQ<%H&ox^4rzV)f{!DCm3rM|v$ z|CL8fw=4yT)Nyu->P4A|3BCY({Udb@8o9@uj*sA_8?X+Y-NWw&n%LV@Y7$tv4IcTi zYWW>vd`nsMV|om-1<&D4cgmUf=@#pj{HU7Sm%{SxWPsHwE-sgKe!p?=fPbq&6o&iX z)(f{-&rTUVlRM+`@c}mWt!P-nD%Z`Z7ZrmcheQQ3mYBJ5I$Dc${yD123%nFP8s3vR z#~r&XWwwg;=*IeIR29>^h8C}iNdiq}H+9?xV7|K1NVv5LOV1&fsZZ0;jlN*M`1*>9 z$n5Y{Rh&5@%NW(oCc#%Qf=NNC_w`=23%4h)nXRxVdM7%il6)Z99{#E>QzYI)8&Wl{ z91RTq3?Gl8V0XA#K3l+qg4U_*SfnQOdtaos&~S~B74L`#=uKV~?{$xuDQY19mn?|? z#NoUb|Cqd#H6UJnrA5|AJ(anGWvK;nf@;aT!H878q_n>A_9hf;N`{;2djKC}kmO7y@15duGrkZ!kM?vMge;TJi}@#;@Mn*5q>B zT}9ogqF?x)*DDnM;wiT; z^%@M<^WK$vePS&$J*aefVPEGrvsyh{b!JU;chu7+pENoiq{$z0Ye$X}=6IOH=v-y!ZbHP|zn@{l!<$`um z4;@flq7gJOABqk==m*^8J^I1C(2BuEwfS7ZuGGkQK2B_AyugXyz{}JN2FIt92O!59 zNnLobsXTCv$h1s^tKj-?EB}Emm=_cG?}Iv9hZB>&^5>Uz5v|cJQ^%yteaS>x>{(eu zvM!pLvtI?E3(od`__>-m&U>NrEvfu6qxGr6X1vwlFTRK$O)U*m@sx~n;U#@3Rdq+4 zx^g--EbH)<|HkvOmg*e6!XMn=t|G%(_V=>!oWYODEBx9w@gRO_6Q=D}G3fgE1Rk-s zI@yguZx|~K*2C_jl6CRFsYe>BrZ(|T&&1VbbE)_&WyxA`Enl!mKa+{lKJ_>p)of~$ zJvv_&vX475cB$Hx%h(^xitd%yu5c%T9PV%OxQbF7wxTe}DF^FHiTYCIT zW8vzknNISRZ2Va~<Ja~L zqVGI=J^?E|GZ;!CHyS=FC$1NzA9yp|N%!?l>Obawo}d$ZSj;RXuc{hMr4K%4mQy*k z*9co?!du)SXb!FQ2yTeCCA0DE?>YlDl9jm0I?1f$|Lo3Gv0-OiA@zOgbk;v~bezuG zi0z4JHBXxOnPpG=>+>!yh8N`hHmU)Rqmj#jWzUaKnhsw)mb{uANg7i5o|6&ug87Fg zd-Peh@&0-QL)k{p;4H=AIuWRgH7+R!zglw$2H+Q-qzmXCbfxLN1c6oe98}28|1Rur zQF@E1{7x^^O-}gym7vQRsuI1$<0-nL*Ww=D3)}M53-A=TtL^=&sxcCec}?_uM#tcP zuz8)JW84Z)+uZc&o9MDGD8z`;YgkJ=QMS+{dk%M$O zi}~nzqEtgYZ-?WDbiwTvyYx?r)=kCR_xX*J@kEvTAIt@r8`t9(y1^DToYO zQ9C`6`V;~hk!*y2rs9c<2UYm!l-#K$|6Dq0m%NDm>g?GIA8AJUbrXFSsc) zxLK#x4I0#`H>e=yly7^Zb-A3*p_~s)Jp_kwFt2<1l)nOZcpY zvh%?(`3qs6s7UZsSTfCNB=;ou1OsRjOJdU=X5Y{d=E8v;3SoE&pC^=}BPT5^*pqs_PH2U1H7k9WB0{PW2i%0c?QV{!hf$n?N z%WSkFCG|5d#^-le=ldpjCLEot3GRzKB&k%vc&NO72c74NcpJR&Sv)PC3VBb9k7eBz zpONvro4Ru4{@@2b>xp0h{L);fPLlPg{){YogX-$gXH)I1^P9=DqTfWZuTRn}E~NK} zzRAzNN%AFy<>*7O@N?qf>O-@2+D)XCxTl83>v(ahO$-WrpwuZePly|M;c~W@z zWz;^q;(6-RtLn92{%UkEJ5&m1 z!Gv$)U~h~ThWE*Z_UmKrK+F0p#mF{3;*0PbYqCDvWp7W@qt7+xsJ_Qnjar32Mvq5z zqocUvit^b3Va{;0Z2BS{`-Y@kFcM!^i&E;j@ISQ2CES0rD3sX+o4f@-bTU{GHV?k# zM_NFSMZ*Wxqkq(Q)lOY+e9|5hGC3KVyf0ID5fbi45tAcG-?!*lC+-KQ;-_R64d@;f z{)}XdxVi(z?1{O3#$$KE=TBl|TE&g@A9U0s5cyvDJsnxsFuJAOVRwKw&Noa!5Dya8hOvXp6Q_G5_( z?;vuA8i|x=+~@PqUp`wO6n-+@$Z|bG(6GbMruMQD+&Ck+_wT zU?jBNJQ$sfR6YHZZeVKkHt}?{N!BncCdr4`3qQXsI2XZTvZPd7Pgwc#O9c?-&I&z zsOlF<9*R4}Pf=-Hj5}Xd{WP`KpW>D(#q(4y?u)DP*W0YilH?#eUZ32ad`&lat@?eV z_)#AH6Dp7QlQo#+&G`8u;p^i1Gis8Pp{-xz*Zk~nxO-vJLB{tDEz%j$agUf#9A93{ z`)L>a6Pwf~$OwwE^e}i2a{txp%?nOK)$e1|JBXZh-S6NV*ygC}#b?pFaIU#J^DsI4 zW%o71^vwJqx;fg2FF0t`The^?!3OM&%+QN|jEdpaE5{d|$NO}C?TVY)!(W1?VQnhw z$MhrL7eByv7K<~e>(2*wTj5JOX5OWM9Eqzx2%~%=dzzV)lzkMXp!r$$`GPepK-1Ah zR{9z?aTsQ?Q~V--@T}E*JFcE8A0NspOS|+_R=N1O)Qd?S3h`-l3_Cnyr7#x_`y?Dw zJFyRwi?MsjER@&v4mPEz|24HwJeZT(64y(;lDY&Fe`4Zh2cPT3Sid%(^?oXMs%ElA zJ@P5h@ex(dZgR=H^*Ogz>piJ%SQgUX%GcAU$wEfcUbuIN$IQ@!O(m18#t0r$hdJeL zXbpo}rXk#w(MA>GAM~`-qV718U*(`9aj?H6!-KJE1Fy)74_mtmIFb|m_u256b-%># zWLf!b;h-oVW@ZT0cTx4%mvzmq#t@WHCtSo@&+zQI!~L`~^TY3*ow+KFt?708Qnz=Z zecY>hTF~C5QFwhhZ4t3#2{d*fn58CKffoN$IpiHsKyP08Qu0F5MHS~oSbt0~ST6kP z)x0=`8{H%}mVvoD^4pEX?K@fQdAV#~RU!B@*gyk2BmMv%|B7Dfo@xO*S@Zn(U)b*5 z{#BVKptL$w8IkoL@~j$OZz{Y~5jrX69n?2V{#A_rDKWhuo@IS}4UT^c++S0Ly_Vm| zt;$*6O1INB@vdsu(WEZFb47&zLk%Z=GOF0O*YFhMlVL#(N~Lk~s-dZuQ~l#{sUhmm zW1~gEKDpro(0=|PugvoHpk!15qAMFsH5;-mOjkYZ!UH@OcB4`%0>$0Lr;QMua^ULn zhWW*aQgCL0s34uli#+$DppSF0GI%Q-5`Kl>=?%d?F2Y~O=T8i;qmdmz0pBLr<(!w4 zdo&5kt1vZWr^~S+@5@*Ai}9mWoG0^%H_%G_63=iF+tH=CS9x?AQr>OO>QDNLX0V$b zG?L?JHVe~5Z&AT-Ya;4KH7JwJMbU%FFzjg0_$3jvw=T?gX*1q}51%vD`)mD+9aQt~ zR7)Af&!i{ZH;xacy2zilr(U3s$wgUwFYaK8y2?h{wflUp3k~Hg70sby*QY$oAHhm> zk z;^BWYQ(z8u;SNg5J3Z^q!Se9d@P4S}xcbw7&DSrSu{~p7a6WoP^=quVqohQK^I@K- zH|}^mv~ndFEnhtby-rV_;QN0zp(Q7U@nqL->|lesTF9CXs7GYSaV$vv4fic_e~oYB z*Z9sV^3ppogV)73$y#pFm-H<*aE-`wDS4G1;_K9qxNvGy>Xca?y=n9QP7SeEp;a8s zx0i#~hG0Mnh}XYhzGu^5!CuhbB@Lr4XxNqTB=E6Q5l276lNlzN&W%z;zt=0|h9>0^f8SIgrAj90M8&3oc z_<(mI=l`(c>(!q(n|<3~{r#v)U@xBGEL>SRJQZX_kA#)Y;ope)T@|j;ueFi4I4O?K z@S9Iz%+q&H{2MCjFN@0Xy{;n9l5nr;%yekuQ23!*;x0)2Z4r5*PgM>3*@+Igy$WHg z@H_A10<3%1@22ZuI!mHWrk7Py-$-jeU&Z4+C?j|#s2ujB7+wg~{%oPRgW}V!TNhZw9rnM>B&O;m79F-AYf`HkHes^-UGQ#(bzht~0Omj;Q@} zJU1>OW=`boPvC2o_zb;p70Y4&%X&?ogigB1?W*|KZ>a+A)N>#;BGt{=nv@zTdVeT} zug8$*R$tpH&#EZ)bP_$9V$VxMY}3N(Gz&9vT?0h8J7uB;!kRea>o8i+IvW>cTr!E#r8~JDj@QQInuAW!^IUz@0GY7qZg>UGP+oo43Xf8FpqcC$a$$wueMcn>L-z-a57h)*kVl0 zi*V~vb?>j^{{|Pb-i{wi{g`!$Mqrgn-$T&DnYgTYcLuhro=iwS!XCfOUrmy+WQ%X7 z-^oKw*EG)5bNa7zXH#mN>Uetk$|N%(?{s&AF;2(rGPN6Z_SN9aR>Za9xq2D8<8dE_ zoCbvpNSr}z( z@KkgTd({>WxiM;E6^qI8PhrcyHDxDfxW}iv0SiBp%BE~sGx;BVMgyw)I=Ve3Kq%Kl z=f%|ACV3SWJrBC4NH=x91?qLJX>r@iwZ5i&?;9Nn`%?~VfHE)9l=g#Mi@;(1UAxt_3-PwBa=~16#~L~bYPze?8YglQ?b1PeBGqpQV<$y$;;z2{C^?ecpR44WDec~;Z~=(4u#P!Hg>=%EGusr7wij` z@lgAr`@vX%TdYx5G6ZK|I(ij;EKj?!Oy_tHjLtC{#W8g0b;8xU%Vve^VU;Q2Mr!Hq z@`!>w)Oj_gL-g1;277ddWK-oRMjJIejbNfszrg|Q!z|uqnVrlg7OW4hsAO%yn(XBt z^9HeL4UYsj=(B7CDU9&=NqFMVRpY*P_MgDxZ1J=G*xeVxrMiaK!2bK>o5SFmf~roF zf?__+40F|%c)pbHo{!T^*c$s)2^7*RoLxqa~$qb^V37X(+5=1D>k4}PtjN35zG7seE2%H>j(4Y-o&Ha!QXxZ2NiWa?wM+_>k@LH zA5 zSaIrtzcC~SXw~m_4nDRw+i&X%tCAEE?rpW^$bzz#BDQZhE#nWJ8SQz zHR8Dj@+`xw*NYhPQZz0%@Hh{|KU=pQCM386hb*-+W$JFHDlfEiK7LoGyvUzT{aMWDs zEoP(-fGS^(Ugjx&6e)Z2A1B4$SE$r`L+EKnv3mHBy{a7E2&vo>Z5PB^^KEos=Eg;TZOt#pZ>Hf;A5mj*&pGjVMEJCP`t`VO z0yER#zOOg9m2R@J!3=yzj<|2KoWC9~Kbr1m$N7;Za`SV1|0B-i=hopkCF=lHihsv1 zm?7BBj?Gd%ui_3hUx@7A!1e=q`8y#X_b}%d_Ndpr5`RSzGFn#E1LAy7H6v07OR$(7 z#ffvc%%!-QAE*;|_}3M?w_Mj>5h!h+h*VV-Zb7m#^&*|$C#ibLH8jf4@mm|Q?Pp=* z4l?yVd`NjpfMLAC17Rasl)PCTsGw|ka6B1{H;xiA7k+n+8eU^Qvq;zqCss*~^$~k9 zP&~~Z9fD~W^K1X&na+6iv+UqrJpOjPay@Ij34?hGpZPbOa+tsGE|0jG-eZYKep1b< zqO&wNC?Bqcccxjh^sI!kK|w0>VzTVD{6q_$qHt0Rr@Y#fssE)`>9Y7URhE{ZuindC z^5XS)*^O*(1@zh&mdI@-XNhpn$aEI_`5b;O;y?H5v8f-gi%-i(x9}J1?R8$iH9gMe z)0*6l(>#nVoMK&vt1^9KcP_&hx9i(_mj~X(3mh@Y@r2dt4%_#KZhMPiP2jA1spDqApMNJ4tj#afPP%cE zvhhpQqHF2TzDz!&A6P=uo<`f3+$(4qezyZQu_OlY2MqY;_#PdM8&XA5*HP3wA%f0z zLUQ5l52hk_uRD-x5Z}z-G>B`b_NPXv`hBPx`yu7nN_CYD=2-XC%ep?RrE1`stZH%D zR0WgxYQZL_;|Im!6BwJbaWzrnAM(JnUN?_A-)^U69)_!0xD3Z#OFrKzoF*S#5KLoL zX}qONet3+a<3XZjKE zyCpahRuZU{v}UBmzL{{Fs-7Doh2lPPv%pqhC$y!192 zfOqiff5>lM$3AsoLGxsJeX(mg#3=;xyU$Ur?^j-Xn_FOvPA;M@?~Ezy|JyH2Mca z%+TK9x5iUA_GJ@KC!Oe|>bY~@zvRwk)d0SrdGE#F?GwQ-o3K<8EB};JQ4bTC-(EE3 zZ5Bf{O|NoOHTkD!M2*I{h4Er>)o^OC7hc>fYr5A-SjisW#u`)d;=2EBdh4_B$i!f` zQ&x_*ewfa&E&X;Q-gTzW@LvqC?%?1dzJG>&S&VIHjaj4U48~ZMwJ^j(;SpSF6Nq&f zEZSSoz-k`2r95Vws^lHZ2IkPx<*PvZ`tEIUeRsyvkNtUmq&c{A})HF<*SA+u5()+QuBb zVgwwUt;I!tw;N_9n~G9{;G%rK2IRLB+Br@;_8M;NHs|D=U7d^t=qEBx zg8aY03$770*J9clKs{Gj=q0>lp>VPt=tH%1jjo0C41zPk`*MQgeERgDxk#Jaec_5k z1u#DOBlnLFd#D*VPC8q&=BfzaLH%Q4&*iG6H&IfLVTawl%bN0)y7;A(NYRT=Jd`|@ zRN`ZMsoj?_&oq;E>{@EDop5<)w)!S^pa%Qu?5qUl&n|XXI7+*$16gmTUd#F+UY_d2 zTMWnZoQPjcc9~Q?ms-nrzsfMY4Vr}w?C=2lqE0+ywX&R zO*`Cg7wUqXSoogNC)Rzm_~H(~a+f{M&PS}OKK8r-t9pSVFjIb903&uR}T2{s1#C77O zaSK%ycMZccR;318X1yQAB#+`5N5;?L>F>l|<`p~InZ0`4J~x9R(i**a&f)iV;XFJw zg0)nG>({e|)z-Ye3fk5*D+ya1_I_`ck)?CfTb+ReeAoS$nz_(LQL(w0b*kWdA38ZJ z*m>RPORQww=oht((Xz|uf)P+c7i@Pw-N}1`*RceZ?8s&|Jxfizqvyz}&b19bd>%K} z-PylUCe#PMEXY$;g*Lz9MfbS3#W4T68J9QTS$N-Co?s*UtY|Z6B1{^ne1tSL6X+a9 z`1$JKTxzfhm;b}~wMyNWnQ?ZD=#!q7ck*g4?soQr>|jSKEfZBm{6m4>{Vsbc5^Ws`Hn({U<8 zm05bhbdG8_FL>vJRjJRZxZWs7P2s7xS;czL$^HCHEAs^o(W>qfXIBPam~Hd6bzH}X zJz)i}h#~9kRznq^YBG!$gY5L11LW)1^QnEr(V<=uvlrH5G5KWO$D#XaDudsvclCEN z2eareaUR$3L%DFJ8CLXr9Pn&))$cGLM_76V2>ghCg{3^lL{a`p&(N7>WP>Wtd~tPf zyjYdAFP4jTM4ZS{bIM~qUW(m|SXCq4{raw2;ohtXsfXOL@;5wNMV0a@-t*fg87DaQ z{qbcg%OmD?9P#Hp6XyPiXTg)@#PPmXe;#bnA9pa%YF_7i{jj^Od~c*~o#*APBk-8b z)FTS=$jfC>+i>^uv8xZjwu|gVK{L5)hWFqMtD8|U6Q-*ZyvZZy%lKI5M$U}7VWlV= zYo3Fn{1@e38C@O2b>h_2mA;WKvR3q!?)67?untoJ9702%8NDx0orcgw`Hrxnqn!~tC5yQZ5C2nyQSE!MgqjBx`Lbt%q`uenTV z_pPdSJzl1<*Dejw&Zp054 zJhyw^l#@~rhRWeYoHfs7Fk7z|n0sde(QQ26Tk_lvV$%bdqwAd!`GA^hV;ZpeEcq^< z_ja+N(N#TJYkd0_D(|*o;plj{Qyq0mupzvKm#D8xr4636rIWjkhHeslV+uR=KWqIt z)Oid_sAjdQhmF-W9)*Q2$*GowUt_DP(nL3;Qk{gi#0ZB^L1E>1=HXb}4{#}0aJb#9 zcw=YrRhUTMt{TO0EBObsT+Pm4h~qW!Z#ds~WI+X>sWU21&%y7MxVo3Vi$Ag^%k9g9 zGS>yP8}G4GEI`~*bi5YcUx|a+%a0dg%@5kQ=fs1fFrO-2GKNohNd0XE4)SroU($Q) zB(A!*i22#~U~TvD!lhlyB&p>lW&wfAFa-Ra^F%HSsgW*~dC^pNZB- zqt*R$nv?jnom!`=k;ZtNpuB%N1vkS9gLvMf&dk^F$UC^1BYgBEK7S^y#S)oNPWI~# zgF#E2`3bRhK4#`LroJVA-wr07%u*Y<9#E zX7l8wpW3f{IGvB=oYmELvQsexJbeS1X8Lze*{i{7%0kv+k7eFlf!9j2ePn-rGd$E#WQBUVT? z3LiNKGx&FsI~o_{%_xJR$)9m=*xLVYz`(v5R11H^r#*;6xm)#XGc?%OZcR`#Ii+fQ zmd5e7U~u#{&E!~`>=m-rs!?H_Z+pN0KX-}Thrg@k)UD73F$Pjy3sv^BqBX60RaL2e zCUo4XF7pHgRGZhm6{j*!Eo7ZFt_P)s*1TuvD*YMK&! ztxmVy`m~n9+7Ei{vACRfaY&v}+W&{h7)m>XTjM6~*zi2=y(XVtSB~47JyhWBpBIa7 zpybMc>NfF_`8;QDp5+C9y6}Syg7!Rp9Sl`9RfjgTVbz@DU(He}CWm_4DHx44cukc5 z5xP%7eHZX7h18<@tFC?+9#@PL-fW&Z`o0%51q&Ng8DhPnLO94t{P>K*PlIJV&F{5N7Lyd+$tlR}Y#W z;?pg+dd;m!9$vH`i|>b--5z&_3)jVCSnPS08&DQrND`029KoPBVO4Gy6GE$Z3*X!j zBUuDe*})h8O;2_rxkhzf4j`-CAX>Mw$LXKv;lrEwy&2YatvFM`Dw_HQ5vT7oR*=$t z1B)9F{0<@C99`C7kt3?W#%|$97V4hw3=_t>E}BI-FtshBj$wtU2>u`HoD>iG$FcABwNC4u>sCC`VKY^BCPDm*Zi0)cw^S}l@-%53%vm_+EbhE7 zRQC(t@)jh2DSlHH^ecO=fFE9&`aQlAmvE7?qay3fE~?gMtFol{KKbcQG#kIB#;S)` zlaHrZ{y=fHH;y@vII ztmmjaun*3)i|qC^_V9v0qtGLm2PU=GU3F#G2O~%0Pzo&+$s?lQvF#1Zkv<$yC zUq*DVE`l;~QT2{0vbOKzD(w3O(fEAoIjrTS)K)W`wx}Q;a&5xXOp`U$R3F@7=L*0{ zCq>{~>2(xWAC|`smM?wfe`Vp|je4)T$eX_67pm)LI*)BHE*5mhFAU&+hU%xDO3(40 z3@DFv_*VXLS9Dt6aMfrwl-Sg|&$IiB)OWuZ$%;7*J7rc6sKR}LM?a`ftP#|`hA-GI zyIf`;R>^d)1PgT-pOJs1egAx%!WF*%MSC)ig7OatqBl;Ws~znVoS^L72-E+E7yrWf z&a~Qh+2{RyY;D+mNnACVN&%41b(UOcCy##+kNcHtGf~*RlvFXkk1NZ63gZ#zzO+-a)TENj>P-W2E%_+S{&vb=QPs+)Gvg2qll!xY z7;jncXVX*UM7_&0{~Or&YIkZFK#tb#3hcSmo`FS;CC@nYi^dQ@q!KTVv z!vTQGrE`WMem|?##nM?u=*P z#x_DcqvCsLuRk)K@``=i;97=f-^`{zSL?nRANIJI+CWseL45cLLMomdH#MWYX`y>O z^7eq1L%+cfa;<(>D_7|{UpuGaS!%zgVty0n?WB{qME2HJoNXq8Hh>U&h0oEH4>2)n zK^W1{Qhdvx3W)YYX*lMxv`$#Lwi$@wB7OxW+D=5idJi zvs{?QQtI2YF)~@I)%DbLANJbkDVj38$4}Ls2SL|;%%$6j52yzpn-`5^7$r8ERUl{m zRt~mE?Yjgv;{$6n5}z=@UOXY94uKE@`O}?pt+V<^0?$0tcV37`nJ?HbEnS>3y}XIp2rUJ!F{wLgVKX8A8BpuPS6hnRXZ9AkQ{ zbET_FT+T+DT2znC6(?q^zLJmPuTv+Ts(KLNB#7;TSk_(~X(d-b;atxVJOA`)+KW$l z?OFj!%jM4QNZ|qOyEscf3Mw(KEcO`1(hpaw=KEsP z2B=qC#_eQRZ^BJeu1;i_!gjkkZ{1l?`h*>l@fB8~7%JEK0dw$qa1o2JQQU3|QRUW6 z{)#hwkSF+&H6L@$9scC;Im4Gkpz(0et#p+iTakX@r{Q=#7loj=`{DR9vdb)AS4HIO7p@c|>${eZ+US|A6=gDTUV zyiY@TrK+Cf`>k0qK72Ri(H?%Dj!En(N{&`9T?}29)EoK;D}Pok;x~Lu26e~~d{?@w zv^77!Bvm^;n)*ne**RGKkY1WqQ2I5hLFb*Y4bH?6ShE8E9od&3;Qr%~*4^;;t2%P; z;1wr&woyJ)p5TS6doz%C>kMiA18dp=pRtR*FOn%v#y{1w<|jq718O`Mc^mixPRogz zsTJPJPt<`1>#2U$4_n!z>-g<^T*tr)*)i>t%_6%knq#udT~RJIzu%KT*ydq6+zUGK z4+mki6^^+Cvt~k;d1Rt8&iJu);$jgi@*LYA?5wuOU4A3?`XSz6rq(7kzH=#eFN;Tu4ogL_ zS!&^rTBYAo)u>xe;w-zs<+U+~ry-3mS#l+Hz1{xk!*Oj%!EulmpPHPG-Qf|+Sp@Aa z#rD?CVCgJf0cdKi!j0> zR`x0{HOzH}yd)i=s>$Iuh>BS-*Hm%9U7K-ABQX`K?Sp=!4ReGZ#!&!w<#hJnCE3R@?P@^8`u?OPksNBD0|J7Jz zZgr#oz$Hr|p#^H%&77m5Sf0|!>u}>+@f-1v6a;7Zp(W1TO1jzcqVy0P?`m4FF1%<3 zt58{_+;5$K5TQ*fr@p!6YIH7+fn2H9cD*=Q!{@q2H6b@UK1I8F*q+R0vsLiN9n=~h zk{y*?PcVQ-?ZPT1)0cfLZjN_u zW=a7x zZ;kM8mQ+m*bS*VfEB3XJ{boWV*M(J0!pOt2C&=yV;^byJ3zd1H8F-TZ*70t=?NuPe zLHcf5;eQ`c6K#6c=Qj>>iyc3}4(nt)lduH~)(r?PtW)NMm?$-tefSh#pU#6)qtmqDPniJ zU+@8))%1^JLH5Jb!|h2ASY(w9@;~f-D>^APVcE$d&`&D6Z{avE#HaO1je=*6vx>UB z?HZksulQW+Oai+}Hg`AeB)}q@T*~*8?h!s#kJ9FBMX;Si_gxqE03_xiFg{BHZ1uoR_G2~+K$A97tcYAzWNa&L9?67`+@F(|U&#@h{!SU3=%OTP+Voh!9Yfr`Vw=owt zLhQdlSW~=09XRPHEb>?JVSBSDUX1zK3H?u0v+2&453;r$oW$N&dCDPpsXtW^a?{y< zC34K;ZphPvJd7d(_&hwD4z@cNbX4 z3gT@SDC$|LwTg4u6qZ^gKiR^5wmBisrPUW$|2LB+@h#9#r?6xQ?U)x(DA+6_cAz+# z1LwWT7FW9N5{VbHwtD>1O0~BsZ22#Urvet`dcO4A_&PkmPBo|Ax}qw^``Py}y&yZR z*?4icFpWpbxoVH!Sr0)@$IA_1*GsMCdhfcculi2mNc_|abtO{`tmsNS(|5A=mRQ8J z^-p1I_1Ix^{d1F`yF-)+r7$ zMrYGtWP@cU>+9^la@s~pS_gnkCB59g~+=)GSM)zcA zdw9}R=FYO8=h$XxYnVs=yPHO#tDpC$>box)9$)6&Q!L{-Y;Z}o`?za;tYjPO{gwX* z_@XZ2!zxvv!+M)v(X((yoIH&C{O+oTeV@Fvf_0y37Y<;8-JeQbpdx)vZT`AHtg==Y z;SLts4l|zao9}>0D1}+-0LhPGiG7{xGfw|0D_ky0>A5KpJ%?k=6ekME5l7OtU*O^L ziy<9g(u*{c8|e?`Q;VJDJ&ItKU$}|`2f+b@pqGD(xAS%8TpKQOKar|lFTZ%7oqyWE zht1`mL%s8LAb>n#4K*T6w@(z_q|#6VJ3dL3Z6ltl2-|KUdtE6i6bWA8kKAK6$rpD} zdAl>lkIEC%{V~7r6z$bQ=E_AMq2s%WU+^zg+o!~uqxxH#h}Q0cBSXzAT0G_XF0lS$ zFw;8we-qv0Xh`SH*z8e}dM@T`D!(*T#dne@?;gl_kOx$Po8gCZ<5v&L2e#mjhO47I z?5s=|seAG^3DlQ}qsw5N7hvkfRySSg%f;I~2B@|8{u4Ph6iEIixA{g-DFpA zkXQJQw;=Zu_@2^ufl~ZZ%%=K!mOa+hR8l&z>vhRItoqa#;;HU+ZVew*gF0}PS>NN` z;0@JSYK4EuztSCJmzIYOp+aDmxw$PqRxe#a-2-euasq80e>KgKn6eC9>jCe9yg9QLVyXRga&6t=jT#BWQv*dgKW+PY1Erp`zCcr}9r0 zkq7dM)N(KR3|(;$RXkH`O3Ws~qb6eiQ=Ri(pZ!kVu4%1DBfNJaUQ}|PO{s!w*1`;3 zp~*YgW>fsuSe(~ss3m*+y$;LEspD|^Ci|F2Cb3!`lh)hZ3Dexe&a1h;06X@>dp4Fy zF7gb2vd`w$Wpn(9TKMLxJkWJMVL$lodn&#EgOvL7?PFaJi_f`P_HNhVBEfc_Y_wSL zIR#$-;J=V^4?9$X#r+d2Fw+YCXt&F=<~(6V!S~`lNIlgr)8^zTO(;@#h!2+!>y|qT9HlYXv)&o$h6?^*^I0u8eqE zgH6=t9f!)4?uE~{h=qf&#P^vq^SRjGQ?2A#+2$SW^WE?t*uoF=wJ(88I^lC`g@dtZ z0nb|#QqEv$&toI&!Zs&lVDG@2v+dQxGWnaM<`hhKMtg&=y@S;}NNp$QGkknYec$84 zn)c}|8!ckh|0QE824DRGU#B&8|56W}fwNhu7O)ZiddHc`hwp7IsuqSIygNMm8?uf< zY^94R-WQs05ftKgpQA)_Z!k5t`!Owpc!TwEKAxcx415A2=@lQ11GvRK$x`2{?row6 zxn34>KeVsSG z@C`p*%~#;Aovr>9te=~R+S=~C1Q(RHsw?dG7|->dPrge{z#8Uoyc{VgKX{Tc7Rjt1i=>iJCZ@IiR>HEJhoVUqhNZLQ;@kw6BmfZobR230N zSc#JS?0sPY=rGI4m$^Z(Y5ih%+)RJ>%52J3>sZhF7~D*=I7Wse!a~szon+s#n9_2T zuBt`Php(uSyc~Wd`+S6*p7Sb;@Vk@votR&FMWpY@gUOJ*w_jk$g8cdbmFkvI=UuEW zlO}K*tDOtYry2JeJWd}B&`~Viqc{$e&eSKKwqon7$SUt~sdfJo)-A_Rm4mK!(yKnh z2Nv|G)hs;|(tlW%`mMFtntWmQ;XHZ$%s8c5al2O?D{7RnhOP0tJNT|!*kO7mjw%S= z`A4{NIp041D!=@HDpA#Wv=3p-XL!P)X-g1w59&E7%}b5(9AENkJNUO{I(m+JZ?!$s z?5q68`z-1mKL2_s;dR#yRyjXJbs9chN2PF16zzbq+RCag`_%jS`>t1~evE^eFIcyK z$fPpejp8dA?H1FAe`2S9tC?gAFT(0EoO!E^zY1^iG%qy{gSk+3WO4YTF4ea&|C2Dj zePs=8VbX!F{hh<7{Oh02*hJ^?CoJGe{B~L=eVq0rJ)gUp^V(8uILF5?VBO`fDorb3 znsUp>uGoo%kV;8EtKw5Eb=FtlQ2IlU6LB~FXkoTuZ=Rzz`%&-pNSLV{;E#Gj)spoYR%vF1O)2zc^Q;qe7$wN9n&3X3qHEHFinOY% z^rg5u4tK2l>awi2kZ70N&X#aO2ErO&S;;T$+yFSUnjH8Je&{T;vxT1EN4fDMe!3Wb z{}QIJo4h1vzAhORPxa`tyjvaUBYi)}Vq)%D-CXJ3zO?4_EBQnL+(~iSxRV-q3G}8$3(SEHRFOFxs^{GX~nu(tq~C7c-QJsTN*nS zv)a>TORGe(?Gz2y@j#Ek9z*3~!yu&sUVAu{lb_|L)k?3xi5s1bfqYjS_mK6Ti!)u_ znN*zLEemR(mnOxIpXagL^C8o%>~UFI3EAcyrrA%EiEV(j2Gi2^QcrrvJ3q?Lchl+i znLW%Y8ph7)Sh;d-xH>%-vT-hQZ7AaPyThgq8iN=TTj-iKXq%thkV`3DDk${Fm9fvd^>y_jgVTI}2~qW*4Ol zDa8J(VsExUe?PF+5>CQooZk0%hz)qi$5b><%4v&2t8rYwu3uw+C-7;@WX6N(d5)=} zZ4B-<-RJvMmX6t-sooS)^{L;+;tD>rmYZGw?J>V%ByRBd*|cG2V31$r_MfrDo)G+_ zuJwHWC*)cE{N7qtb4dn&oZSzDc&bt#ylti0VpYC?H`nU&Yey&cj%b`i4W_JFTKi>i zUBh3^a_Pwj4RW4h7B|rAjF#h`ga|jW1oukjdpnB84}~wP!#=L!JvSMfq}J9YSyMi9^}aPk8A%-oYchR|WXJRQMPyQz?8_MdSzFD{uQG z%S3`lc%_8ZmEezOK!1hsWksBU9$1#WmKTGM=}F{C}I1@rHcsqVHFw3@FVH zje`3R>%1JNF7;I~n6Gx94qm8=ovkb@4yYlwi-pG^*$ygP`#kTbb|$C&o(8{t1N(Fk zf!2t-%kAyjOgff}a4Uo|vtF6#D?b9JZHXqLPWJ3T4?tHdJuu(w4xkB@wY zx=!{cKJ#@kf0F&&;%v6&|5EU2O*PP}V&($OMQ((p%w{ zpP`pse8qA4Y$t{{Si^1`IT3|bty|-1zH=(BRjXRh8$WEta-0BNpt_lAf(4&fR&KjYLPSDy|Pta^E3o7osE?jq26@T2Jv(|DJV|I zE0Y;fGviN&+aQw-qjS^w% z!icXxWw$_F_hPwLs+X80??D&~*iLi2nR`BBJaVf3<$@JzS>L|=$!qLu1shJ+ z8P>QSX0vyM?qM3R1Xu9iM znB*samsjaoze(cGCy_u3YB;;vO8%oSF*dmCZMEwVuR zDww#UX(Cn4Q(S`OD=#}Lg;#u9Ha-nXJ7gZ+!+hHa9T4|A<9*mxJ!ox;I50!zR6F@b zzIg+0JxmTeo?okjI|*5{u8#ONd-ffi9$Vc)x&brn!x3Fm`{)zC3si>Em7t$t?8H}dk+!i%*Pw0r zKM}BqbNGbc$p@jYPV$S%zgzh;a?K%-Mm;CL4DPm+^_Y(FU51nVhGNp)TjR|3{Oo?5_j8b7N-kLn-}??^evtZdkW6g7Guzes*yWKU z`Im=z{C=*}J$4vevm}kwa02UbkLl_CV?+UKFSBZ4#lOR{-5dUkFF#FD@|f#iPTqC; z*j`ofIBoXHP|Q~Qs}Zn0|2NKA-fF#1vc5|`QF@xmY(8U#lYSV|h@pqi> zH${y@aC_jSAGW?DD714^53FXj%VhPLVs2+BW{xv{LT%!D+Qz?gQYUE>+!@* zy@NL>)~IV_7|ZF9so&`kF6qvhr7rl9T(=gsAgAcij5jIHHgCs)Oy_%RgvZUXT_1nJ zYkm@Ur)X#>RxIU#r^0wo@E^tDw13LY8;W+P)f~Eew<~dU(?q;1mi;}fGF#nq5IbMa z4y)mW`@@xWsK~w%OCOSf<+VevJ0nH04DE3Z^{jOc++&u^^=2{lW1b^FpLP>IdKin_ z%rm{lrxbu1Bj4)+i!O(i7O;V7aMgRRgPgcKM58}dK(^sn`|~YB`HE_kvOkI~ui3ft zeAy+LN(pM25>AK;p|6K{ph|Qg>zw@x)~^(7H<9J7(p~Y49drjV>si?D&0*_Ht>Jzc zWx0ucGihbM!L?WAd&WT?GkKpzQ2KvG;l>^@i1xQ-@@iZgli9?%=q(eN9=A?<>wx`G z1u*CTvvePDH`o3Dz^`N9MrKAblI^x-gp81VqmV5WA}b?gmz^zJW;SK-5m^x$vXYV8 zh>X%*#<~8_&-wiy*W-My>pJIqzT-V!@7MeNS-9sW@wyN++{1I8MAsWx`5;X8BD300gai)4_kD7OFn{DLJRm>xeu&L95hsseH;a7woj!tWyuUYpJ%yzw zlCPfDPKV8VY4TCrQ8N2Sh7}M!tw{T_9PEx2m)?skvi{Nv{nyL%k#y4^yNia7>NTv# z-xosMULsG{$j7m`@wd2fUR3P@zvl4So;Yz)HK~iD&L#I_UuvlNo*K@duyro0dt2PB z&F=eS;U`)5A>KFu_Vf`iS3&84F#0)YXZ21DXf97WAUkg%(*6xED#=+-iL2Sggj;f- z7JMW}?~+XUWkm*u|4rcbfJO{CZd#@2%7>9L%1yzg6FGnMatpf+?vZ2H@HqAn0= z2gWl8-oA)`U6espHkYK1{-ih5%3jg_rMk9WR@)DX)sr8+4Mofz6Is8c z>9FH?>X6Oa+a!~BKf^G`^Vb}*q~}GQ*Z6iA0ltc*PqZ4u0kQOv-ngRTeQ&vN4?O=L zelP^$3~kWiK11&u}<%p3DyEtLi1X4iOiQ!H|>md0r)_sV9lLYCLb4KR${br*=3!|%I5+LnB%5sehpJ}0Jzow&OCJ)2#3gFx}oPO6!I zsq;)ze;=xX_iOYrJlml@wkF1R*TS3RxL09#vjNw+DZ>~aWz#Z++t%1<17X|XS}A=0IJT!F-Ee|vM}XEQJ@F>IY7?W@X4qQ^E&(<4`=6#$LS->#KmVLOTE`x zEU4nUZ)?}9haJO2SBkx#>Hq#pb?Y8kW>=TU9La6|a0ctjjN*$oN$p#^3)bO3e~9CD z(J_y?gFNFs=XlrEpX#-qh9!qR3BF<92O!IK_?H+%9t_vMVgaFtq!iA&-SgHY$81of z34GZITk^>TN8<@KSWJ6Y+Y_y;y09af-H}b?l{;~x{G?_+q{xsNyDX-v`>ej}Gtr8A zxi-PW^CWu>791tty6)l#KDw1}MAVB0vx>yLFpFGk7#?TkAr_t)nr@8Gi~rriC1%M; zM#e_Y42NosalP-Mk2NXSTq~I0ge`@YQC>4vqc>S}_uMV`TIdJ)!+p0^1AYZt-=a!3 zSQa)y?%L29tFpYsYADH!DtI099;aWao^g?@^gcZgXI8_GL1cDU1!XBNm?-k4@yE$U z-&|@qQBOZrKJg+PiGzZP%{JW!5vs@xpAkXd(Es$*h~C9Kb1@%C&Q^Npi~CzY&q28G zKRsmy)lr^@+{O4q=v(e>Msx*hYKIXnKSqa&Z6&eM?~KvD22aZIpMmN-|A*jVRM`Zw ztYfv4-Lj;9(c;cN8k+p$h@4nJE6lr5v~qkkYeXc8ug`zXbKw7I084?0e{vkS>n#g2B!)fyaDFXH!Ml zP~EEN91St0G4Aqnku%IaJI9-TFwY^UaVm{?UMurXvpdf+6_=AVxsSdosk_XVZGIqg z{XX_A5A<9wq`~p@I0&W;@!4LHG%B(k!XY!M5A?ze2dKBl%l#Y6Gy54yvD4AN;yc^K zz_Q}N65~2X;5G63i$*(UCce`_jA$!jjuIb6L96=msuCje7<}Y5j&ofUUB>c9Liasd zt2FSv#8z5gX|1eXa@$(bxgj$P;}zsx%^hcj4rl7@_gJ{n#+kCpqpGltbL#GPoF%Jx z5}zfSCc@YrI$t9UVjb-G3F?1^T`t35zQg&Rjhuronb>ne{envz(NcY&2}ajQUvzF7 zDr)4B6%ZrYAjf~a>ahRX{;PurWr*bFBX5fOhuO0(L$|7v9q{D$$h?9(?!v~N!2|}xY6`tP>D%NtUd;Vi zZnz!hkj%^K;N_doT7*8v5{k! z)n6|0nMCB-RIThM5_m3BiM`tcj2!;an}5sbu7WUr8X1M2lS9T~oWtpJsOnZE_tWx# z*P)L6JY=E~Sabq*OeD{);%+Cgv>BwXLpNQ>Y!zSI$0Oe5QQyMuUNWS0o~aZ(Y|c9h z&_zY<66h87(;4K>;*Fr$7t5W(=)^_x(T*_s6>+Z=%lS9SRD-IWv6>#Zaxbx9iX-NV zW^ajn|58P_(xkY&5d+GH^;M5%wChs|y-=B=!_6n&+z}M z#z#FdhW%r_@q0e;a~LzFy`)W`lKT()yn)-^ptED7x|P1JI9GYtG7%RUqKEB!W7A(? zAggC z)`Pc{WjBZ66C5A!8jWR7(~O~+=BKH-e~I;^%$NPXhDo+@AFJ@oX|9tW1|?;G%~j17 z>ggLQQm2;N?u9s3RU_SXEN32BEnr8RS$*mZKbz%;_d{@p|iSUR9{{ztFe7= zjOkvLuMA|{#8}fD>*vz=3@3ZxblipkwV-9NwD zZ$EQis=Cvoym1h$|J}^8TgH{ufbR9=JAql3hbGhEjPVw7{yk(EPbc~DzKr^mjzRWr z>^&3B+#T$blpqEvZ;z%oR@yd(09ithl);xB9qmgOGkR@e_zfkCa~qZ_)Q^C z^A{iQXWXZ?LD*?3m4hlV?$MG(reU$Yee#T+seuq{K5lHKN!kxPIhVC2%5qvtufmhX zSvJF>A~MLdDmHs)Xd;iY`c1U75vgCZ_@S8TkFa}+YD5%zedjL57{~Lu{_q59=^6C@ zPF7#Lp~v+!j#;1NhZ@n8gHHBGzjhy0_4hT3v5>k@vmtBk&*nny>oY$qaP4`Js|`$T z06{*`!&2KA&Trx12D`VF<{bxE#A;V740#jqgPizwDva%W(PR&P7ayM`@`(|Xxv-k< z#uZP(kj|6;TI@?<284uFI3hi~j zN6SBE@{@iEU~`-@e4UsgLXzbulRh1M|cx^`S^`_Q!3 z=k>r{+~ONy9?CjZyU*mXB{80nY^{y4YIjAks>XGkjXxMIqeAjE6#pXn4nH4Cx=XbC zwDaZZi&*7va@gazNFA}HtUU8mF?EjjYx^sKzt^e(TTj^B)mB(}KfL^F$dv?AzfGej zRT;h!C#qWi;EF!f8?9^ zjm31q?(&Fq+1Tn*f8B!cA7F}!vGxosZUDc$4-=jz+v9p+%_Zd}1t9!!bEuM8d*irT z+55(Sb&K4P#xdvNB>6nc;pp>fEeGLmVtq5) zjFs=idpEGLs^)ArW}U~QkJx$xyx~0N){_)R>y2G1j`pCJ3ZirkmOp}Ix511dqT)T{ zgTK|^@s{dAQs2n0pX?NQ+B@CojYi_gExGD;9&j$&T!!{J9USG0J8AZ~>P9+8S0cMS ztR=npl@D9bZfwL89{va9Ovq-E%2qCEw}{Wz;b{#P`&!_X?t6x_obYTVzw2_2QS&mV!zP-22Y;SV4q%G6SVs;r=!h*efg@*l z?&o~u1br-_>sEYghjxyfu4pWqETOmP711v>26>uQ|EO}34NEK?>B6o8Po5<6|4NKa zZ$+O5#^AkdUiH89qbATpeOKiD!hEH!VnTCmYn)~n-t(vE)mmLWvmWl=Y&!I7WHB}^ zw;3hf;MrCD@e*u&o(#&vovQd_Z|y!>*&=IdfbU#o1q*Pt5%|nR?Vp}}1Um_=>m65p z!FBSoq%17!f|xcRw-`ikvq=@ALw|`4wij8$_?O-4QxnzKdO(zQ-p>g`o`)fmWmg4d zugys32XP{eD(_EmsUi(?sCtkS;VQq z{B@{vg^@QijQc6dJ~!AyG36<0TM5?Mn@52Ay=DQtu#&Y<4KqQ<9=X;0^ zli2@s{`rwwg3iOo=t_^M`8X|O#CRht#MClNbmz~0cR+QllGKxPG<9` z={T)w%M-|QotLF$L$A8qG8pr3vXMFTzM2)-8`U$F@zh(`@Imqz$%~sn@>h-Q_{+5i zxUV`8e6D=GG$}4r;TlB>RWSIrBHIG*%=XR2*!&Tka4G%RiIoOdkn95gf9A8^^jS%a zNR3gJ!8Z^4el|Ve|D%n$JmE#YWA`Kx0{<0B2B~2t601iUOHc_WbYLOhi~nKdcYXH} z*8d5k`VP5vH+HfegYU`57eJ5W?D{%y{)>gBgP=yi8}(EMPQ;6T9YnkoxI}yL;s!(r zD^VOKxmI%jY(a5FOOPiM)BjX=%+@?v^0~Y0K6;3 zOAi`p(~!y}4x+Q&DGl4_|JtvYH%T zU(@H-&^V^Vk*|&8-({_zKD5=$D5R8y01YJ+;56-KAhzAu8>Ks2AkkC7{s@aDN^K-Hi>OWrsODk-C+va3AaL z>|4Fa$j%CQW8jm?wJTJ&zK$-8w#Clph^^Jdl&rAlZCE}`rklp`gE6E5`jZM6Wq>=; z>qA(bDlV0{@k=x@-hWB;*&b4OYFcM4O;a6cZz??>a4(^DQwGEShc(QIWgAm4-?{SD zTl}{MX^+6WtKjDwRVa7H-+-QBExUx~u>N2~^lI#6C$4@7$}eKQGh`okG0E^9#|^fTPMZ%yh_ak8Cn(B_D)ZJ*uSqQiy$3;`Vj)M_ z=U%+>AB?b&QIipN8*e1WM=Btp&0 zb2MHcqX+7CM*rcQ!!gu)P^Tx1T8pVJrH5fWYn>RCgr$`AR0YZLcV}41I%m4SGivUy zx$E}o9Qrjy*RRR>1kKpFh5g=RD+$%PfAo!MG_>A)zn4`EK37*6$2wmlgHUT|ql!EX z22FVtVa>cc@{EJl>TJq6la-5K(f3FRw8_|;**2y@+h92|gf?{nFapltOHHONiM8?5&tKC?RiwqQzs5!6?AT*kQM0tqeh#K__@t}r%mI7GaSDW%5@(|D42&v=XmR>QG4k{_h@@i952BC)aF z*(|oq(;HGevIa&MjmY)ra#w8ZP9fvonvq#s*47G>nLdo7%yV z&)HY%$QMSNX0)HGxXO%h0+n3>hvH9ijce9fWn5%E9T{5N0BtdV-Z- zQ}sHb#?Vj1c!YP(m+Q}Badv<8lwmE4Upz$^i*wA{+{MK3;c#s$|2&A>SG3;v8*J}i zGS~gaJI#ZXppoz72BGeeTO6u~Zx$towf?gL4*MBmyio$yIA0a; zEF3t+%BP8r6-hEZGS8f5gHD>SxSW#<$9i6XjqP*KlpCmi!Jon()MQM=jMOGOd5Kr9jz6cOsuTOS!) z5uW=E|Gg|9ugR<4HJZ}Oq--+O;ajoR%w+uxJFf{DJK^jVIVNFFN z`!K-5kwyAZ$FQUQaQi1V_7yz@Bo1rD+=6J2#J0M=-$&+Ofj$4EZoC&76cSJLN6CNp zkmEJS4PycKZH$Fx72#tG%;Fgt=3jVt#z-P{<$p!?I`biT@ghmr zCH-RVE{pq4q&>oKr;+3=+~GL?NbbtHMS;6;_8XXVHh3r z70&)i^edJ*I-1!kDhIH`C78~c=uGo*4(baX5nYD^WtKmMwT`lg+1LHIp9g-6neWrK zgH(S;TZpQ6}AuzeiFlZVnw~38*Sx+yAHCvE5j3FIMrPGY_J*(X3;V8g6@fN^GpcPIBLCOh;z^@c|s03K!eb zUIJ1(5aVFCap9zT1FDLk#d%-`*>^p6-VAnK=Cz$ws_NkpJt4~u81NnR9z#YM>DB&9 z7|es{ESzK|_PGQ)9TyWHJL)#}eOSy~fv30kNeY%~XGEicFZwxaEYnr>$HuHI4y!F= z&CZkJ#~bc?fUBmXo!8=iihi!|>bM%*is&SIJP~R>vXL+nZ>|_JmfY8Azwoox&mylm z{4*tF-Nldgl3)R~l%M!hIu*!nvEIy{kYgojtW+iFORCNEtgemgZEREpW00CLTbt@3iyjY?AMWX#KYL zyJ^EL_BXX9^t--C`fJ;xP{J+UYnX3!UBkBPJgMcV=Fu&~IO1a?=^ZiX?b zpm$0ZwVl?g!`S~tE9>+#pTkLPhxoCA{-%l`tHtAqP^mJBHWTx=Vldy}l9N^c+sVTkvjF?H_@r z4_xf3XUM?!n~`rDTrCSrzVDp^de@qG)@JbIL+`7&vd>T0e_K}j27CR0l~4EX92Psw zdu?TxALv=#>e$2Lz!>9U%E7NRBJhhO`KHR|5X`W>Zx?Y~E7|ZVXSl{_$=Xgl|lO&kup)HQO3L9*6Hu>7XyTZcn@hs$R+gDz2APIZCCYPnlI>jNAi zpZl-MQ-2nFGqCJs(WqFuEV^B_B{{~EOx|&j<{G(b3H~ufE6QJj@pqu`iSa9uF0BOtJS6_oku+XshUv>*ZNJ&OBwkSn@IxsPw0Q! zOE&XGy7r_|-#0#%4PAkTCsfo^7^BdNTn6BbIavB(^9{;i@7*J*wJnS!m}<6fb&O*o z-gX}**1;x^%Ze*uO=XRR+Qdul#ji52|7Xvh&vQM7!>uugBUs-N&$xlr-1Aq#xI59U z@dGi5UyW#)2un7wxT*N@GVMA{Vw(K^bANx!HkUwva%?%7Sov>lCssZmBiX>`0}3>P zNn!MixiQAa9W&x17Y&uuhn~<}=;``QbI1P|rk_=-yrUx7%k^HgzG+jolv3V*60RI^ zSF<5kJ=juB?%z4aO}n~__l>vQstyqLt@(@=nzOmE4se{TB%)q>g9TlHUCHDvjl2f2 z=YbHQH*20OQf`L`yHwt1iJ0@%a&H*_o+`4!_@NJ>P-o1%zX<=f?}c@p=kk&QGOreq zV#XgdR+WD?G7{&vN0W@L2kfatdpR-C_r!+-H2fJ`=xqGbZfn#w#CGc&XY-kS?;aeO zMlPLxyRt-o`7dgbs zUGk?2us5vVKUvkWm9zHJQ`b>HYQA{x5lxHH)Ds;R!inWH)|zh0V*q{Gb{MDjmj5$g zMtQ{VFdBQ5$TEtzY+&CHc;1gZq!(>B^yy@}yn_W4f-=vGOTWma!~P6Kc;tt8cOO1t ze;A)WBlCJ%#rtWjsI8SwU6qzC5X= z_iD3&h5X^EEa-{s_Ye*3Tb!e}apD-%&TV5SjxUZ}|O8(2#C4N&etwoXz zJo_2;QW@8(=$q-B;R+O+=d%y+hB0heks{ zlhZ`H`EY2U&pP{dUw+e3Zd%3fqPR{0QMnQe9xGagvBQg@!&L3tEcR6v-qgLc5kEV! z^SvPoGQ24w3#gZgSpT44 z^-YnlJR8l+;;N`o)hC-mWF0Rm+{3pjV8}rOdEjtr{eElp-!;K@nmTf-_Aq~cN@mZf z*qnhqW8nQjb()Y*9l%#ZpX?g#M(r0^Y-@h-yPlxj5biHNQc1mGwCcZkF>;hm?p)R( z1_h?mQ=3eEf2R8gD^G=STy3D^JNzZTGd=W#VJ*lbEO}tk?nxzo~fqRneT^nl^(;Er~3IC>+#zLb2gJ|W0HRwtrbQQL>uVK`hw2BH7{wB zHisI*b5QGZI!eP*zh$Xmd|Mcsuo$w0%Em_Ra(A-W&oF2;j#e`2saz&cn!?7f>PZMA z_QU9$DrRDiCd231_EhJZM)PKX7>kw{Yv0VeiH&X07l zPcC;@p0&uU0-R5zGTA|!Rt2-O*isa8ol9?Fyl)o1@`@U9S#2X;6f)RiZ1%j7b~T*s zpJ*i!`G3(inEn^g=L2?|N^E}F|L4Wfm)KBsPZj2XX7el&wVTfH_y>sGSG!4-YzU3T z8A-Xv{g;3pkFk&DDvjTZs=HxcUTC!vH$Klg&zmp#J@oxd`zn0T$iFIK)-(A2l~^_5 zDpvC?tqm5jYvGu0$jnAziYH+FEyyxmL@0#^z3QhEO_t|z`Jvr=u*}XP^0d3gCavL{ zVOQS3lZUXFFz>M|n_SE~v#55wEfVK-mi2PT1vtuiIJynyr1E#4XacpB9j9u!+oe`&L=(kWyEi*#G#0ZGgWrs&jAhI1+2RKfYr44j zq4ye*v2R4agCt2{&mKrsU*$ynqUBOh=T-CPZy8%Qm*-5Pt$w_%y3ZQ0`bBK}p!2`u z+gAS(^URUaw!_^=vX)`mX82K7Say-TPpiC_d3zsGjJ?=mG6W# zOg|7|inHm~+Os?*qqFSNmU7<080kV;KuSGfY1AriXwPA~Kk}6Aa@(!W{2j|UKzegjXu9z&V5h@e#JQ8Mm%VNjHDlV-G;K=afDXTd$g#zR$RIzPbvVpb31Q{rpxt< zFED=f7LIA9Zx-@9H0h%+s6Tw#C8{2yk1!S}?EKW$u}`8ctWER3Xmx$83!(Hz@vbk8 z6{m^n=7!CK+q>v*72FS*!4coy=`3SOwwIdEVC|<++zODSx7oY9T_Nnlx1VN?Ioldc zZ<#oJm*7@1w4NjZ7g*KE24`)(BTls@zoMt9r&R;49m zVv3#u!dRP)YaiRr}gG(L;tk?G_k>0CECj$45g`-`NFpv-bz{f&6;(uIfcOqH=Q}I**?uGotMu_r6;dW;tnxJ$16HRY`S9Hv z?x43%yW#HpamklFN0_tNozK1i&rj%OK5Oi0O_n#2<+c~~3p%Q>wiJmQ%kSt9al9{h z{dG0oa^~6em0K3ESI8&~rv+X8>U)hNca3vu66uWb#LEC)fLiS!@*B`7%*oo!x1N;~ z{m)Ue`Ok2eGhf@45B+YQO6Y@s;2GXy;ZxvT19ABe`R#SKUW5(5Dw2j>pyu)YQ)-bZ z+;(gTMq-+LM)vs; zmKIhHZ{+!Fy6dbs`c)Wpn2-L5F<+Ja9&+ueYIBo~?MTMoSCQ>q@?NT{kkd@pW7zds z=gBJ$zQO0)k<%b7Bdj4al@0cU@hw5qZQR|67%Md2SN+EBLpbSGXZTwUu$;O=J$GaGG1g!-f-4-v z23onZWcct;>~t$>u2Q=^1YK`>LhHh)Wv+l1t6|z^e}z3b+mi3gq}PR)jD-(<;lyw@ zzSi$^eC{&eo9T|qVT_g7|6ma|%);*J9zPOg1G=OlmFHo3YP{laS~<=t)+S{&FQ^hEz@x${b%|J21|!7^^6uB!_q&)tbI1|a;0WU^ z3cE%NHvb99&Jh!bk$h`xuexV1f$ev~#-eo4%bLNh`9OrtAJs#07;cU8$|edwBa7Ka(7QD}9?FUqu;ZzobTyllX+hdCdRhF>*MGB~l-kCuW{RwS6FG+YNPA=KZ#Rq|;U|ob908XX zv%Ar(xdwzS4J(GKM{b7M)1W|qS%AIcWSJjhDl?)B~hna0sVXGk1K5rn@eiIo1-H{)35^m z1(lQOEOi)7^&`oO@HiD#SW4R&%Nz`w$ExF6F&qEsZKiyBj3&&N?}bY~6;G|^C0{71 zo#guYj6@nr#_eEdYH|(r=M{W0jAN_muIrM$N+k3t>+hQEypG&FUu@NbzRnQVY+El& z&8?DkP$fN#VM++CLQN*@l=_)=BbyzjeVOcYyH*KUR3qjgwfIa+J`z?BEkt@RK#iL8 zF+yaptDl!$o%v@$+~tt0=M=_K$~zsgnsIF4m~VZ7qh|}NdGXJsj=Up>D}r;Sa`Y~_ z=Q+M!%1VS`{KhO?;yt#uoo!{|4TXKzI^f>D1;<0yo|N9sYiG)*=8^P8HX0`%N=6nD z7P!HGuR@{{(50QMsV(W|hS^u5S&iAa7!5tI;uU_KgwJ-vkl({EO2nlg(~)x8Z~4&@ zK2l6(loJ+y>+WWg;}yD~^HWUFAOY{I2HH29T$n|67qt6_O}QgJt1PeQ~%W&j>4K3>P(K zd2a=*X{REelD-P^mN6<3lWDg+{I~;E{>1-^(drwp? zon~PzN3fq(Vq122-4HAJ*6;Lq@lCpz3*To!>aZ67S>8TK&YGUhU$Hh=ge1GkS5L65 z{f_8BkLAVCj@ntQ{8RO;fnsi$gB(Uy4uA5aMMvUV(($%k=viKVJos{28@7cXSb6bly4lLZl9)`)~EJs@mR|eL(zUuDgi_ zd%9A4ad)=%cc0`Cd6KJ;q+%;IAWrKTsHC!&(RZ zSluYmte$FO68QbR5ljoAa+1hEIj6ZOY%VW*%}P@>Np}FIK3Cop#_U~$GoR6+wPN{P zE7$75E5`axm=pL!?sde-o95~RN!(AU%!a+P&yZJo45fuCL|rz0Q+wGv$hC*JXH1BjT>*`0b661 zvJE>pqO$oAuLz?Y2STK7B0*VFZ3KB2!TaNo{UG#Milq#X+5PK|tLpQG@F?_x{11Ph zj*q_0SHdbGfybtFZ^h`oK8;kR&#c;iaN7%NSNHLhGHm1>_uddbg|%m&s>uAJ26Bu| zoR`PkV;4!;es0!~T86#Yv(#c?!^PBu){Tf0d-}>|ahnXFx)FUq)7|EYSU6LUY`n=I#ujD7f3KUNUNZ>C@weKD`mtfi=Sr3|~XPiEs&H=zFWzSWR) zy5NnWPofoT94J2>>G-MIO)zMc7}_|-|LVZsKh=fps)=39##tKqJdB%P3GeOIVpL69 z{d##skW`Vs;vUJV{)RP|9JP!mgudBD?sSMJuZ*>qbcS~@`UTFu$vrG0)puzA1=e?0 z?h`Drh3s&Qd@wWqG{rHi=&Ze5=^hLS`@ijnzq>KJ(JESX#l+n3HV^Obx0?gGZzt#ethEuA(E*#B5aX0#PF8BnCZ8zT+cma8nlq05Uez+JH8Cj0 zS3bb{OF@O=V!~9|@|Uq7kNv;H8OM=!AC^*1_4+4#Y?GWejz5LjJ@aUN3cqLv7Yfm0 z$k)O;e(gL%TJiS??i>1j+o)MI!9ljGR#p|+da#2B_+xp@rKH}`gt*xuPdNdS_kzly zwJs-QUPThC;l>z}e~aCAhwfn>!5;rF)P6*+Bh}bPX{XcU9BqA){v}#f?frZ-X2>1|5_tMzv{8uPCvxmlzLAt==YamNi>~8&Ll{RNd}1`j-sG%1 zoOK|NX-HzmePHVO;e2B_I}2{lc6`|D;u)BfLgXpnugcC}Nn1g+xPbOLPP-a|{DwU~ zE7}&3w*^jGQd`Nne#e1~mxH%GJY5q!=#Y8nEm>S=`(Xble%5B8+-Po z@1kY|L{EySH|hHr>{&@S6G?p{jqD{OyFl~gr(*RVG4}F4{{E4_rqV;m!iOHFt(W|l9QRCs6eagl17ci7(FqHJ3?*%a{Gk%lOZzIHEYna)2#w+$RVeJi5TfaI z7;qWqIl%sR;-i~sV=)w&3jL>&_k8v|%TE{y{0W;G<5iC(#KEiwo;k1cH0FQRXf3BU zy?f8=-h=i!iI6#Yz)BIgo9CYd%P)~fK2f-+d%r+KVawQvqTYuAP?>rVqQ{pjydVeda zS!)$~XCcWHdSi2_WwjK87eMNB0GlP)=+PdFviHbj`T~zgkF>Gkl{D zeK&+&9dY*gG0iT(dqTZyN6hZmz@Kxt%6W19ihE6=k2nkee#B-{vGGtV=*za+LEie> zcgbWXYY$^1%iwG`Y4SK$kWVbQLITAjcT~y$9Z3Ua?$Tvp*wl^hkKh-B*=^wUVWr8? zyO$GZc`3$b%Fsn^$Cjp#LUd3U`ZuPh;$)VUoo9&kk3P$zCVO{_bHAb8uL|EE{?8PX z!n$CguP2$i{@q_&@vuJpxg(kEgdNYzARp05TkI$)S=2XX?1HFVMD~)3eXWuk^cQ7k z`PLGVG~_>R;K(TLWY!zjcj`cn|JU0cR*UPyV!u#bI{}lzc=eNP^AFX~OsuCmTdi%? zoJV|Sgfmp3jrJsUOr~TPZO?s`zHjozf86J;yM7z6>4zwHAyh#n!dqa#4>Jlj zW5!{%@)v0>kE4sI&pdA~dzih{558|x*9c5(qui{WJr%d9UR7kvfs?dmkCUM8608tT zM^jrnW}cp;-Zzu%FoyHrXis)Om@oCj z_TTcmmbO|9scOi2t%}H3l99(5@o`5iQ{IkA&U5!+Uy80|y~Wsp=iTF*_*f^l`5sAk zr=_rZX;Iaw-)Q0&kt<}7m7sDLb(JOTe*>wFgtIO2%s0rj6|Cq_hU1*6H$Q1cBk$2t zK=K)CV2iCC@kqW}IWk<a1=8pvhvNf8^4#KMBK?!+ zRrPimU67PsM>_Kw=+lm0M9BO{3_D~a)_H^r*JI4=I*a~M?w5j{J+J2SE1L~-9apfp z{i4(Fo;|GMm=@1JjvIC-$ucBZ1xEMBTNcyG48AoSBb@_{_wl8bqC^MmF+_n^>8*k~ z`*Ys=7t5`wBC*f)Gs&*A(tO~ITQSPX+L=&lJBE9RFK!{xJ@Tv2E0)pI<$|3#@vi4Z zvLt^0B`zd@`k9T+jhKJAJJvtdSxxE^DJRfFdR4nx{kuLrq-Dcld~PQ>Q4Zd5lNXl4 zj1Gzo&ql(E99bgYtD+y(leIzHnB0=Xm#n<2v@7SK>7wr9RoIn{SN!TJE{Z>CSzj2l z*;M{;RUi9DY-bWyv5ZW@ob=YLF7$RTAh8Q%`cS>{jP?kQk_OwXOt$w`bNWE0s_g6y zG8-lzUBTiHiLtk|Pe|hD7;mu#4B2+W7lU2)rHl75?PfSkJMnWPnFoXj^HF|+Utf#a zi?v}b;<3JEpJ4L*Mf>O)g=LwY=`?y}9lBq2F&1 z3HDdTYKe=#t6d~V{Z@|iwVvtO5Tp;>=)tDjs-zV0d1jVbUK`fA9_zjSyuscGs$CVK zd{HrYfSTKHss>4niP__uBe2fCETg`-l8(-v%1<+pdBFYGNWPqV3RSo|(CuATQI`gv zp@Expe*yElL7r)4vejt#Z49|J?(!lVGfy6--1eM*lEOCpuZ^d#N@hJ+>7-bWIhDl6 zc#R^{QS{JVfAoJ;dJE`T`WId1W1piS`$qA$qwFX%#%_l*Hou+D+d5xf=c^|kFQJj( zKU?_EcHdf}Z6fYGjn-3fFxMXcIpzFUeeW1N|6PPAEqVnuU7F>EwWWW9_+gH5V>VY2 zdYo4sn5Z7H+CAn_NnJq>Pa(`BW4~5wi_*hCqH8s=U^V7Ki$|$Dv}SqHYs^RVbLodqd6fC+=R{f`DJO0EFCR|F=cZhQ7vAdT@9-Q3AZ83 zLF~69N!Ry#FiHL*H%jhYH~9M^zSd4&`>I%63-)xD(=L_;+=N2e*=AsWvs|k@8&3_N zvgp%m0eQAMS6II|hwLWg*dOtWiYl7T)!X#k!}i&vzZP;HXFFlke>K+E%3rlfIguE( zik|z44YSq8(n5T7MjY`WAIhR8(8hmbSmZ>~{6NHQ0(&aSD9h7Yby5#_6IL}3dk0^F z*I&Y;eqn4DAr$f*$zJER&LMrhxRW>NpWiMvOz zl)@szV6o#Ye2DjH*fV6kPt<0N1qnNB9}q7K;csDum?GqJRgHE&HaL_F2axGB@gS`A za29U=0kK|?r&fdkp|2(6s&je7IsQ^c{CSgn%CVxT+V+q1W(9Du^8t*hB<~tVa$&Yk zIoVpH`7H3XZ|oKfsU5&h-{Boqd|E^leMQ?=oEWN|tD>{b*$%sQ7dP zk}xMDqwn{GAje$cTQ$uYUSUO*<%xzhEZbANog@YNun9tz=z~Nb&%`y+T@XB6rCB zuDG8x?5I5bre-Y@d1xz4|C?PD}}VqGyIAk8p(>G>{ys=VFCVw1-6LZ(RE!yLkp?hb$_qXNhC=-}A!jQ0aBg z`W+oT)I&N0gMR_WJi$~8Xj`(%wh*KX1PC+OKj#AtN$r{uf|ta?S4n6Gs}2=|&GOZ< zeC80IdQfD_Bfsb+&X1zuiQ2g|I!LaRna_Pqs$p%ll#sg+^eGx+1*P0q9_RiCcf7@8 zGhmltmTf{SDXmfu7)rKl9G}pg6@=9f+3Ortnl_kB4S%)tL}C1GV&}-Mo^^pGe*~M} z_RTK1$uLqI=l`%bZ8!M;zOgqotV(t-S_gMO34@{{?LBQ$*4T)wy7B%pZ049ceGhp= zdy#y#bNxl~VWdGVxG@|Obd*abBB?Vh;7{ksElP%co`%8Qe%el~F|5DQ0CH646CZ2$ zlXKXOA`{s>lv7sHu2nyX$|WDjrbe>!46OA5X@vb3!#YA8;n^bX1t|3=U$90iom_=n zpOMPTvACOGThLE3uTwC6FCG8w-mB7oeJB;?cIJYtRpCuob)_Uf`W^~}oi%sE_5?E7 zyzuL{*qS9*gmF^}ml?c`nWg`#yT%4Tuk@gB3`VHqPgb#Fq2Vtj~f*45}_EiZw zEFkB5?D!F@-);TnrmQ#Y)BO-Gzr&Lr(N_^;uaid#M=t3N+$X9|RFmvXV{bTDSX({t zjBzafoTzb%M#4DMTq1XJu{!i)G|_f<<|^X&Z+O)nOzf1Hbps+l)rR?W@6tyFpND-a z{_+&RyZ+BG=m}Pm%N=E+qa^P41=dy5-=*2kFLX7I4mx9z9o0~V^MbwpzE8)OSl@C8 zHiRGahUHVC`UX{m$uPGk4_K%@FKY-n#coHB5rL~YLoO_}vi4K|B``X+9G|?)0~=V)DU|uB>Jl94^5h&XN5o=e_U0RG!wjQ5>>`HZ!iD3+DI2 zk;0lhM`6w+wO@N?$M{QG@~-4etw?JMeVl~!cDW_>d(h`wS_pYo0U1+i`Pv}gT_hrW zLW|9PuZ(Y2B;~U1C@WhJ>$ir;7}o1NC)apt?sywNGw`pb*7iLrl7&^Q!#KI=h|%`9ULZ0#lZQjcu=VDy*n+({$yboXirW5f4>iJij$256sfx=eXl^wb^6C|nT2C=0*zUW|GTb@m z(Fg9tPvrUHW&3#&#b}I9W(!4RRNEJplW#=`C>Efm* z{D~~i!iy7-`*W@Nda*gXxGQU0K%${H^HZMV3|luiVw)%4g%i%zz6aOe5i>`K1fg%~ zb28jRUVGrj5}(hPBb?v~SyX9?#;l~M@tyi-yjK-Y4RD3;e6IjBZ-u9|j~p(;%mhEahk;=|l$Xf7DNBDHN2)6x*3#O~S61ItUq=|Tx1Rim zt7s-x!`g=Z-_XBS2ik<03T0gIeb&x-cZ%a- zCHP#hI|<7Qqt=qJ+H<Fnf-`)jXbWI&Z!M1+HL!z45=K>f#A~+R}5b!V7n@*D!ar zCA_T^%fDWREbVA+s`o!E$k)qvDb8(nM5Ot{B;((#6yJNE`LXSyoev;TWn>~Nc7Q=?u@Yo&0_y-JhLdK`hgpt_^GZFYvRT4o{PGJfF*gi)3@v ze^~W#%qHwxnSn?g7HAKyvn6TMzA?;cjOpY%e{_gN_T3>jB) zzN#$!dEDq}EUpAi9P{lLdFwp#yCDAkpq-#C$&#~suRX~uj9KymQu+|SgndL3vfBcf z%qUFejQa6yw!e#&SqIuR{%;gQ)cDKPFsPlX@@y5INzU00TPlc0rgBWk1Rvpjzp4K{ zHl8ORuX>#?zOF`--Po;*X@fU5KWX*$c?&6Rq1Ek7H;w@p;5=U)um4$vL`)e@`Z+Dg@ zu)L*AwhFxr7BM%+IO_z=ez|zC9*aG~y8ot^bmaa-_O#B`I{0?D{sCD+3ers@LZv1D zm)KV;m_C#Y!WvdBWj&eMc{vt2koUJE+XA>nd2$%Ude=H8tf2h^PIHx{!`cK(wP8$q zP15Wt!fk=?zmWR@OnG(K$WW6;_M+iA4$MQ z<6@QGgx)Vi;}!f@&}fu6zH04Kvd_s1RLjjLewE8}5>FO1j&N0rg~$?M2r?iC3dm7Gs&GY8^nJA(xU?;1^>v8nc&K-_{6>&VjE{_j$25R`bqns)1 zEwG1Xd&?LP7>QCTCY30U3R&TcDod?spbMYxp`9*T?h!kekZ%zPe@Nva%%#e!t}>b@ zY`{fBHS;~%4C6r-^MJ7b~~Z@=px>@(NpEZs0Oh6K6G5)c`K5Cd3vcvJ2j!x zi`uIg&~7La_EWvirvBy^!9PyH{DYYHQO|6~wH3bA-hWVwJ7w zE3Cs4SRucKHcQCo8``?=yH_#BU9!x%q%hBMYsh*%3I5+4w7DX9OS&x&8^)@5rf{DP zpmas}lT`oQVcMPNjyB?1aj>-}n{LK3UJ_{@U|FZx$b%T}FB5^jSz$ExOOxu8rLeF|K{*nz+WD(~gJSClLR>1l~FJNA; zT(G)2$%R?OOL^5QF?haqEX3)pR@q!EcomN<$_BzHtdQ|v=AU7unf$K#I$JN`zRuEX z$O6ME!xzbDFCC1ggE0DS9c=!a&E91nGwGux2{#fk+u$$LpznF_#>4VI@QtH#%*oEu znoa&k+gJa`I_=layV`mCkVhrR@GSX0HqYQ6{Ycr&Q)r}yGtXHQlW-GKY33&#&bLS$ zZo_tlyV_y>R$)ZcLP*w{&cd1#m-tpA(WO0!=H}Tq*w1Ae&Y|Ymo2^Y?kG)BwE6H0G zknFp#zqTy8zlzo(2r&o8ZiYWZ$oi7=q=w_2jLbe}4o9j;2Ynr9Fv6>@`8G{$ai;Z{ z`*xQ9gDh*OZ1!FMr*rni@H~vIo(*X>IQuN`m*qirI<(H&=Pb^MLSA-?Zf05?s0!xv zNN>_*cJtJyIcYdQJ4vbi6$?2}M~PWgsP!C^l^3FwB)H-z>t#G4iVP z^WF6qRaQyKsNXLm>}^SU$H^${NpseFeK5*~YG=*W#A@kX%7-CU5S3@sblCNKhuG1B z9^S)P7qjK>MVfm&D6BGR)o&Ki#MSLE&l@Lr=Z1TGk)7sq$C=q#0ncB<)7NL24WNA$ zb%P|h)M4ng&i(Gt=knMbz}MxRAF|BuB;75BOT`^q9FNHiQ<6AiX3Vo@%pdB~#|-tG zqhi4!k#;4o8NugXXVov!Yzy3EJib1Zt+#Z(W`4ixEN_x+ej2?`x<8Y{-@G>|?+I-J zcbe24hSdlfI$t|i5B5`)4zoKZ;=6IM@*(-`g%gu$f1xvd&o}P*>nxlN)!=vF_FM2E z^psfx(PuBGlw7-jwe+}D~ zh;6&^?7y@j-e+guPhiS#5b%jgKu+4I4U3y-vyjjZtbP{jzQc#Qi0@NLyczzHjUK|d zq@FNn71^(W1;a(fE^ud{$k>;?))g`9(99(MavV+^f+g$K&34GK_UX@?BZj^NMJ~#& zPeIu~Jli8S`IOeestKFP?k*%ctajN$Z8JCPe_kG5N*m_v)gj#$+M4Vln>HCug}UW4 z+A|{OD(Cwge_Kgz1yzFju53G#%#qt9t* z4tc%BqKm=f+A^k@5auecxxv<#i@jlmgo+qXL7x@V57=IvatGguI_G76Hjz~ir|Vm^ zT89kFd#>NHlOzIF76u|UJb3P z^P+!ZJm4eu75bT8hc}7I^?_@ohUYK3eqrYcylFM&xyxDJrI#qLIz?mW+1#(%FjhGq z`+32=o@7&DRC#;MdYd-8TrdT@S|Wyqxxm4)SI2)s%Bx_;E|&LWEN5CnRy}F#KeE>z z+O1;i@6h`e3l8g3yw5j!;dYC>{|mkRLlb*ha|c?hE{66|li9;J!kpO$jt_ZY*z2_x z|BhpeyJC@khr8Vg?=CyXeSe>g#rMEKa`!qqw&mGuo&9A>b=w zW0b}J0;B#C=L^$7Lr78!L&yg!(n9f6uq-ird=TR_VT8Dqf4!5C-op5*FgwrwSdLD} z3%1ijsHdD_rD2V(-}u2o(g^GBk0#M?$@~JlU*(ynu->o^?++w< ztMrE>yM@^0MM! zrD6Bul&s)9)ZFLF8{B2+Y1t&Bx+)%|p{2Z@DI4!i&aa=xZQk;lLRz7!5_X}P>GvFe z&0?b?Nv5`^PwxCFFrTVE?`D+UJiSrBsC@n9zwM6bN}{!)RoHX8u{aWTzy|E%|N#bS1-(1yLVisPqwMe{g1x=Y@_v5~J> z=s;3=hh2`~&kID#BM{_oc9Vo|!*>Ip3G=Ey!140YMQ&WDnZHJ3drL@qAA3F^`hCWt z$HIk>@q}H2wvy3mZCG3D4d-u-mv+`R78hREe(be@M{N*0mXqo%dRR_Z*XT7ldpSod zpSki*_!j2(WMs#o7yB-KeB-|VZ-=$x5Gm|m9#-6YEygWEKaEwEi~;%6zPWEf>+O(X zHwle`wP9{WVxE%F|9MFDReEYprlZAxxg^ucc?zh%yaek7h|! z+UZE@U1+e9yGjbF;`m2-3}^_C9qPES%3Ln`NX~w4seSx{lO>{ukjbT^p$8EBhG#y` z4rh3lkK+Fgeg2IJtb<0y$*&}2UaMN3P9-%hed>|J!Y{;sNYVpIbsqHH>FJg3uljV=@_bA@6SS?>c*TGFmS8`^#DL7%`dL_{%MDy{9vF z^VteKGSt=!km@TCIrKu-z=5;*orEOvil8;fJ8+suR;@|HcEef(`{Bo@(7!fbQbYz> z(y_0Qa221n)OYovs2AoZH^)a(hzH+TyZ3JVW$Zt!wl_c>A$8pQkSWwd%|&+hQtt0{ z5uvqMQP4Rq>&H9EA8)aZgkniXN9KeiS+zM~)pO)-hbG6|c0}kwI0>mvL}Hg4j3 z&vV3G-&I)*qbM`VE&dX5LiKL8Xt4;lxGlG@!~4Vhi`iI8sGE1k_`+Psa_lm!($kLg z`iZu^1sz*13mu)HelQx`@Fl&7!vV+=p6ciNt&{tZn^hy?>h;B}-t51ut- zbwOTP`N?aLqY;}f$OFtCBISI1sFMFazN- zrhSoR9VDw@$y+_wC6c==YOYZE>WK9fmI-BLsc(vrhj?+6y!XfAY8Ti(hujyC${U0BWqZ9Aw#rmiEy$AQd=N@wDCn&|5mA)6LU$Gi`)I@bgeJ0bu5f)vAAg<-|dB`k3jDeZQ)BigXn z-Yh5+*6w?YTzl|}bu{o_@10}?MOrVi)KDD@z3w5h^`n=iFedD4 z+nGkfI)!CfaA4nYBogMJ)euD{z~@!+fluVE_4rX{S4qe3iinz(wbkHyLmGOM&DUi8 zCHPi0`g)9+ea$jMtXs(r&#;v+Qah}ESksxpXu#9h=R$fIO_m?S;*f2A;{SaAMl=zgrKncV3QNV1G&uExxdczuuG{U{2Y^4<|z`-Ua&Q6m_y zTGAY5yhZLGJM)^@k)c-bIr+?kx1Z9=3|KKoJ6pSi)Yr4-wR9D#lM@}WOuLPS0?(OF zH?w)lTHl-L?{{3OCrsPM3!<(ZczW2^;=X7e)>%9pyRSpyk}(P7{Rz*{qi=3KZ7pge=1b{3Q6lf&WK9?8^Z|cvy|>H?57cOoI>!th4vhIl$8|}bq8l?Zx$95 zYU<;)y|KqoeeWh3gni~h{pJ+ut#Qo9v^tw7g%!!dSdrUs;u;(bG36VG71l#oK|5hB zxidU#8?7(&{|~elR)R`|Rs0N7_OhRCjtW^r&_YdC_8OZHYni^`t_P9Thxkd$Sg%J5 z5_<(M1iw!MVM6;v98M2aYKXC&p;AY-S`#+pf)x6N$a5Dz8L0wU59*il*~{7%-vfZDq1~Ohn8NUuQ+#g9%5dB#bIPyO7DanRuc2NYu*Xt zxYl~2hOm9)Xl)XS(tMcR(L)}u0N3U49F4cGS9?5&v^&h$I0{_lH%2vOfTZ?x5z%^ zC^zLOBgxrL9`UcmYAm%xXuH?)nq02C1LlTxP)lPlVU3wZvHs8%z7bZZ3RwK3$gq*! zkHqOiy=-tSru^jdRj_CRtDeF;)@j2YaR=!su=rHc+^Q<&6J(_I(= zoxx8^ujjP&S^H$Da-0sX>-*cN2QbuRepUV1?;gTVGY#nfZ3xqwe8G`e+Y{xQl&%Jn0T#p(ELQs1k?OZqAX!U770lGNJK2 zqZ>W1;bWn1DjD8%l}5jSSws0lQ|MIzH)=zh2eI57GKuW+w6F%n8Xo#BWQZ4C{_%}N z5a~;D|4o10D`eQ5?c{c6fsG!Es1bAr+w&aq;`$=G=zFg)`53jg~DO2=MLg#U2*qSZ8Pms(KzaQVXW)#+EFx6 z(K%k@FP}LkR79(|_mX6km_)BZpMY!k)X9F={^-8;^M+8bH=>=5-;CjO0hU|S@vq}0 zMOfT@S=<@lOQ?M%?qBe?64b8-396~`zNLS3mRiBrve&&Ve=_Mem*JEbSwr-!NX`vN zI*b8n$d<#7Pi>*mt7Kmyrh%|?L1S0zpluGDLjPlkxkcgmTdX$htneD|y6Wmb^VqU5 z{ViI|4wrt0jX#jn84|ljs_EnYYh*@dI(^06X0@KdDf(FBll`LC8CbD{jQXkQR)GBf zfdH#W9qsmZ}+p&nRfd5%J;)A6AM)Z2GLko z^8AG7U62(Ogz}~6?559WKU5JGeTLP+!~da;cQxZnbAVVt;R z;u6~_6DK!!CVkSJOcJL!)hV`P6UTPq5^%4W-oYSxM+k`~0g^y~kht&fY@drq=Q&&F z|MhRJwO3zj|9%+$c>jyZeyr#Dc+{Zt953gZ=VwRrr$uQWN-F+xmd(4;L{1M*;x{|? zCS>pvJ>T+<-Q1b4Nca3uM|`NG-`yzoFZR4sFu$jn_&~I>G|fUT(r;!{y((HhZlZNo z8;}h6Y@FvEX^guE^BM6by(M1Ueclkv#Mk$aUijUQ5B}`q6C3q^(8u;IjYo8^)$#so zq96XECXRGt@3Tdg$l<~G z9Z9*L4I8p$o`~~5-`!r^ea;Bl`$dsk2PJu1uSr(_R?z#kw4hfvE(wae#;fGyzqGHF ztS^caeYp8?Qr?84yWeYq&r2J34`*A1gW2hd2Q;4E^O#%5g!^MU=ETN*`>u+EekbV3 zQ&h|Jsm8mbz+Ics3%ZB8x0};^Z;cAoN$uSG&FJbpJ>N{bkO^sBw#(u=`pkbjD*SHa z*BbvY=)NK7zO9@veS)5h>YsmpL(tls9&=+c(vS2#JFJ|Yy!f+bn~r36bp>3C7xO>E z$G^qRb$wNNb$dMJhhh1Ladx`xbJ58b;oz~Zc3V(XwJc({YjE5zc6!%x<|c2&|pF+q$5(Hp#U`l4eObIk4WJ*Va#i4_7bSUr9r`E)3q5 z4E|)A;s+W(5X^LPzA>qLalby@@6R=JF3b}8el-8l^qF4@wmKKyo5l1*9OujFgTLLc z|45&*n$?W-#1+k=6%*Xu+plj$As=u2bQZvsQOxR|W2-26cKX_m&H3$;_&aCW9~1q_ z`gr36dT$CMuM9q<#^LETr)RtVLQoO;dtKWP3rxM_U!lGU1#^^_txESb?>kye9Q>KI~8Bp6#ZJa>34(bN8$iC1(R*!18c&{*Wxgu z-T#t>^fy7_PlCqB)4IPKf4O=>hvG1=?499zYuTvA7Mw#>fDKL{?(4B z?O&fJ`Te$?8$7?#Y`iL7@=!D7$!J8R;z@nyhufQ?DR-q>b|!%9+>RC zHA|bda#Otdlx#osou`DyYvS;HQlATcPqlB?^xzGR7e(hE5B63xzofmlO*ER@g75WF z+SOf&5Ba7v9A4f_nju!!_;TBL6I4H49ykA+^!VRQm-+Lye!eqQb6lJJ{Xtv*Ed2di zNBv7&Ek8Q;(LOZK9gs4%zumG-x*|2>uV;Fio9gA!~e1A`0oy~XLiN`VQs&l zzjx!aaq=hPm@2uB>S@iLOPkl9=so^1>J`sf7X9581RrhO)VLxo@!FvCNVrv%ql4_< zq%;3y@cEg1?0=RX^Y6`oe+oapl}!A-`244uG2d(ezykM6`%_?}U$M)5v-uD`B@7-7Tp0@=3 z&&Rv|I+%`{jB`8kx{0Rur@{W*AbN9NgF70p>u9xKG?Z)Fvn(pr58~^MUurxjn0_G) z$vRg3c2Bs~hk03i|Ge&TZbz-`*MeY6a}yK0EgbRIZD{|}DEKFX+pk8`KbIvlFPMES z%J|jz*!j(+UGl=78V24FtZ|w{d*5B-HZN;l{BghkwR!Nr8c%E9i{z@zJGAd9&4aTV z|9epWiKtf|%`rjs$Y6GS)O}X>{O$JrQCwc%;hAZjYm@ovtCmIsZ%uCgMBMGDWWbhP zQG{SsZ}NQKS=o+i4rD-H5S3jX^?fEC<K_8b_MhJ(ndbKHD*04Wf4kS8{Vh6#Znhytc2-=;w7mU9;cU_~FLS z$BE8Op0}z*xcYu@*BRuFtcB0?6u%x-w+2pd*B@w3y2X_}`T5~Z7VOdS#4~!w*ZqhS z?;a)Hk(Tp=@J&;imF2snd4EQ*{FRQ;%kx9o_J@Y08A18{my=SeCK^}CDzgnLG`j`)#roVIUV`= z&i!)ZvS!Ak(eW)|=WCN0W6i8@^cUOi!8qQEu&p=8g-Np;qlx)J?eOrhxhI>$^hZe=RUme8W*E}#=&Ir0@#T(<-KND|x zUr>El8K$8~1HIJUG5FTKtW!^-t;ZA8vec|KA*?>uqh_q=jX)|4y*~-ME&x z){?G1r#o)!DL1DN%Zi)R?AUd(b&oWj#ckgyOYoU+@L({yJ4h_+H=c2KuvPtG_1V8` z##lvFJZNFEVT=08|3lt@(~_5`x95Kc3;r(s^e>!n`E$}Jtp;>nwEmxs-|nb8;$U~j z!Tu|#{-3V?f5PuShq*5{e{OE;{N(?Odb(5kEJ`chvU}Z|#JMzTz9c!|qwKs3qPIGqrXkic`@y>4B>!Q~s%?DP%$-&^%c=U^# zJ1_2YLf=!`D%V|2k1Y0=c89k`>mN!A{89L{X51lZm9)mKgUPYcJ&SdRzIvWq(eqvx zl`fB$J{uLO@?V;qc+rFgPR`>tyDrGz3o?HhB+o5wKO;`|@~)>l^%LpXDjenMozpSr z1yB6{vr+%o;~+ZiKOQ`9kBU_ooD=^zC%AmIZRdBS5tpGU-5=i81#Q%k`DiS z$7epqtpB}R_&91}kDb;P-W-2tF>DM@>wD6J8fo(U2%Q$ie=tqtm*d~R+W2e5v41iC|GN0psX_XE;qITB z7y6&RCtuo2;^S!kW$isHIR8YWe!^^&O+~Oh=c&O|NAve|EUj~&&f1|l1)n!ZMR!DB z+oy@0*3s&vPVRg?T`o+TiuS1Bx+4f(5bb^=xLlXiTi@U7J6F!Tx&SnPZE$`ti0L(D zEw^hMFAA=x{C@@0Un+k6*F~_u8eh^i`E$*ek2M>9FI)B3vdMIurAw-ISQ$Lz3x6kU z{%6O2rEyu~`mT@OABny%X^x)X9o%KbL;~O6y>Cr#SskS<=sk~#WA4-2&xv~XXs#X- z*EzoT(`oO7@UlbDmZL-;JUzYRt?4>%ZU1ZIImg9e4(z*s)VR2GN| z>uh;xbHdi*X33dB{yiQ0y8b$Qeo3O>o!{7G`AyJRAMp-(Q!+p+D33hhgJ` z6Z!d`Wa-cL*B^D{f5s7R=*V@^n5s=#q_ey7{oUaQVZqvZ-wd|Pq6nRe=1ih_=f)4M z6L4u5+}K?=^|`lSk2EKD2*$g{$DfVHuJ8WhR`ZjyZw}h;h<=WXzV{6Npm1u>eo8Z9 z=U^^(QU;~9#$VB>m(9<2>`w>RS2ms+ou1XG22Zup@m=fW&U;UMgm3pl&74!>Ogpz{ zyRbN?_tC8i^u+Ge0rJwxBf2KuxFRY#G!AoS{N|XhyeSTIe^Aro;DNa9y^Zu`I>tqf z*97&edzVY1>>Jv$F+A+lb)RhJ>T~y3LG172#NUc?^;kK-Grkw>%!#YJl3DQE@q+)E zZ}NAd`acL4m7>v{6_L^aX#Cd()b?;BdzjY58RhU(;w)}*GxG4 z(#ChEmwYH#zCCT{Em8ED6D*+o)8aI5>pH*DwqKt}Tz;w3gC}|YlCE@Acw8FozoPN= zaT9)^4|M+ThLhh&4!oxO?=;~(bDJZZ({uNX>%6`@z9Tt#M6iD>D!wGt%quYPB@h=p2JIhot&fJWKkxIo;LUonKE{=OZjE={-*`*o#nFK4sIR)D|E>M?Ox)$U zsNjdu_&2)iRb6LIf3a5&X#O7+l$K2NgZ;zJ-0Vc2m|dgzMbY8nzE;mVG??rk?d_0U z8+~o{-9D?cf1weF|HX99_cs$h7&P^-J*)qZ59%j3lU^6?<4mW;osS6eM+SfP4NLjZ zelLhmS)WEvLVobwn%%F9v%NMf9-oeSK*!06eHlq&9T4iq^}cMP6ccfET9G)6)O3 zedh$bYvMHWm}e(p)&}9blE61LGd>r8`hUA8Khd)8_GEAsXuE#ZmJ^| z!~u8gD!8M32@%WE*+yG+1^H30?iqfvt*3V`9PHaTzj0jmBTUTh^z0*5N$*aZ`CuIWmpYb>^!lio7yZAr z_igd_w@2|mlOOE;?RjT7czt_c8^qrn7GK-FWcF?uF1MTT9(woD*=+jQ{aoXFnmea; zkG+c#Gqig#WemH$^X`=!R~f+MPYELhx}&Vh&DFq!8! z#APmzo1EAG?9FcmImfLEmaCg7%Y*s%^8bFMoP(cBi~QN(_>DMCdhFHP$pw-d zbVW1tx~OPv^LBC8_p5^sf5OsWL1TGo~SxwrU2i>970a zF1YLGk#GJtnWiA>Buw@~mRD>wEvZg9)wIs$UQG{9B~iJQoHYp5SEE z*LaJ4g7T)M=;OhA>#)9SI)Q$W*H37YU8*O|KleE=c-`2j#zPeDU%U2ihmQ|O%k0e6 z@%4?t?V8@|!#%-Iwf(2_(5QX2KFb5a=+^kk*Q10_rPb(ab7}wUOm3Bn3)-`+|Lmcy2(e(xKfQ$O*<8GC=kES`YgVsgsx*f{fxxTY? zbNF;e|Bv{|yNdMvdhyrKhplB{bxpiv{e(L`8I3=XHhEds(ChuexZs`PZ+RHMax&k3 z5PqNRYBQs(2a?O@H}a1Du&2_s<)EnUfIKmK_l9I7zO!ea!~4=cjtLf9#c6PY?HlzI z(;w)i@#MkvPwH5CkcW209^q<1czSs_`T020&qSYx2jR_=dcv0mzt?u=Y0ZOEyZV8R z&!xNH*F0Jqz3-6(J*g|59=@zsIy>mENDEn?&T>@GFY>!M{?=;O_20QXs{2gx@ABSC zpZ%E~_gwV$WN*JN33yj<`F<4ptqISkV}$JRwMFvc$>{jO__j)=uXo%zaiVX;?d}MF zeC8{I-VIT1Ytwh+72)=r?(_LDcw<_RRVFX$na=Ajw{`aXIHkNi^szc^@rLksbr4<= zCam7EFj`RsMTgiss<9gMF9d`4Cm)XqQan$~n{#~8ye1!tc7Hz|@jdb4lcU@NgS70_ z1H;sDjb{f3eaL^Zk=JW>`p$NJ7WC_g;0Hf%2!8skEDqjuloQ+jlfhNLpI0>wo#~(; zH?Mnd=w0vby>1Lv4%qv{=s$@2 z%K=y!4LYBn{V${9bMgVm>Akq|^2Tom*H87Eto%rlRgLREr}4;tasCfG|38BN-*(Qq zjVpukw%H0}4dX3~;ocD^`)1#dCm+sf`%T4~X7u(uN1?Mi(ppI?q6pr<*+FmrDD6d2 z)5|7OkM`!@o_V-l64YMTcD*z94Z7Blkk9+tF!QeVyfgjf>~Qd!_|nVcBxeUzzJd2e z->;0mz+Q;*G15a$oNGReL=bw2qo^%cbFJ?}^{U8|+uo^GnU`4wUQmgxO~q|QA- z_JU-qo z?B5m4-`d}=iHgr?=Da;fzc={HBGB_;Zu9%uc*0XruMtz#M4}QF(*4B9}%3m9gT^}v2?k!|{+}-ovIiYQO%d%#|4Z)A6 z>cSv!ZnSt_xVUNJah}`tZfy2{x&5DOyV~QgPN-T(I5D~PU2{V-f#nGcmzDo}S1^(_ zxgxt3xA{o-K;O4!A8p-de$cZnz>47i!=7td(ubwZ?<))Pq_D70zKi?gOyB4Z7pLPq zSO4ZCdhg?tTnl>BIZ^e2LGty%^c{WQofh}*aPa!z!27kZYtb)X)Ev-H=8Rx-V)JT` z@Vc&Nyt_K24dsp=JK<3OJ0E};_<>z%O|<=dFgrEO{!CEUhiPHlW{2*+Lm$;ythy~5 zXY|<=t;$Eawzt12T3X$>b&%g8OG}3KxzXppPJFnZ?yrlAI?ZTqs_8$teQToZ|0t96 zf0iYqllBLK;-{kEYog>^!^x%n^{&o_pjt&*pY1VgLo9UGM15KZGQuZ&atx4u8$Q6KC|JSHdh>t*TX zKNlo_yT9HUC7UOQHp`BP?sX74CjRoyG@t+3l|I;3UKkvVS9rhXiL3u)PkDOJwxsz% zgLx{tnAdTKrfbfxL&0rn34H0F%xkeM`rRr0YH@EkH*9U5=#{%f1y4kUmxiS;^!lT%hCUDHGVgL@$5X*vILF{W(#^t+2zZ_D1XK!J^9VydvkZu z-DuyA*u8guzUN&P#%_vNii1DduOq_U*}?4Wc(_%tb`6R%dS7wTS9jL`8~lDLE%7zM z^6+4{PY{=Hv{%qt(s=YlqQcwD({*0e^Sr1d4iA!t2iHU6=yS5-9&B#Q1lK)T7i~2q z$MyfoJ=@amwQp}L2b^_1#>bLd%aRJ$1UHg*Q*h>ed9snV$4C6-2~~fwUzhZ~sqf7} zROax_z1^)rlErjMcenm74*(y7RX%0W{BDxuFN#%vKRB6Vqy~$MSCN%0$46JY^tM|D&CPMw z&Asunz3Ibg5jXbKcL(dI`s>+Xw<=xc@_73Sk+b0`uD=e*Q5K(x|WRY>$=ys!pr9x|D%!j?B4Fhzb=Mi zr7ST?eh6IY`;E^9(FHyEj!~gJ^Ci8d{tH_NJv|AwYTUnPJTzSG83gC{whKD?z{W#* z|05bt465=Z-`n_>xbo3SLiVPJ?0cf$pUGaL74F%Q{8?hHFA8#pHL6HHwd=k&IR0G6 zot{P`BY1Ulbo-z!8}cpT<#mlZTP^84bhB&t-MMF((|%PBGWO)*tZQ!E8-?81dx8hL z<9l5d&B)@D(YLub=0{r@X2dK$-#$42m&J8%3^tcd`1VD`v_Bqi`0X^5-)dHTJcxZG zxUxmnd0iakJ`)$3-zpIG8BK@${YF*YGD)6lX2|W{82#UxL_0SOeWkmooZZkp?`qav z*sS_~$I3dpwZHUB)d~DXLG>jQi||E3@Z_lT@a{CfnZBVnlXHwNw+>FTn;UxjEQ~w9 zHmJX=v(5^l`upM-a{CUSU`kB<)Zh-5r#0@=Upr1Px??ip(9Yu9eN$IDCLHbEGwc`l zIyD}4_5{06G~@J+ULN0=7vv5O_ISJgCkJ#T5%QBd>yTuJeiG}$!>V++H9`K#pu~Q? zw6nk8NXOeHF09`H`}m^Z^U2=-uY&Qv#g%VKPHbPqXpitJ1}ww+?yhxNRR8thZXKW> zc8!PQEPD8_3YQ{wU+?PQ4NKQHCp_m7veGlxrwD+-={8LfTrrt)jgbr(GCk?GNwtf4a%f}{qbzEyB{CaqC06^FCd9+pzk4{AIhYx+sj%gccSB z7OA|wrxp(t{aqc5WYEZ?)t!2Nl(T)$xJ^9X$`04Xk-ref_)KSA7^Loq)~}y%@U?B> zkH0Za{hhXbzESPs=O*K4JNG|=@|V)kFA0v;7PGd6tkbV`z4Lm4i-I}p_QCG5s`IW2 zbE2yt)d`AD&t%B=g(f;%Ge>kj+ zil0gs(Z7^kIw~r5X@09`GUpfc|Kg8FybC#H+YN)Tsyd*l0> z9Y380`T7ZOdR^z66ARjF9b7VoE^}Bo*)MEtA60B_-aZ>9o=?-=K5c+s>A3FrqMmj4 z^qB{f0{5q1&F$>t(^>XQhOG)d-;Te2B?`N|{f|X|+mr+UWZd|=X!qN_;g!+j6G49a z;;w7cTK+4p@rP;ce;>5Jl(zH5AZvZ6OM-~5xLc(+t;ojuRQ9XBZ-3EDlJz9V?4fA= zhPcVM`hK-}^YyNBPSF4Rj`>cs{bYBUKk-jr*|8S}_nR8k7aS4PUlDa3mqj=?NXg1x z*EM(UoMWTNrS03h?PS8NX2O#_$L8MV=+1jz(8bU946=9Ud0ibv9@T7rZ`d%DW zpO&0Cr6-n4yeTd2$tY+=&!eZ?UD1+Ux%;E9)p40;gYugAB-tz9@%s3{6@4#i6otJt zI6Tqu;Ipv%&+3_E0DP*W|0Hewqv?xZ%U32JW@g&o&do+W!>;dnWJdl)qVXarSAOApms;r^sL~>x4V5;Tb)!`9yV6?{MM(sKRV-$8@*E( zb|*FI_{xid#qPmcq;^SIdTo^U=3shwJo?!@YVw3{pYVa(tBs#k{>a?w5W1z=^>~<8$$Ut&YiYPYv6*&2c@{d_ zUlLV+KPdk&OxztrZU{c|!#*8dd?W5+{r0utU{w?=yZv7$dW#DDzlvAwKsdrj9^ z-*M;n{j;`wG%b`@mrrg+H1Sj;dGeqA{fRu8mo#qf2z9qAZ?Ebv8ThKp?n%GVv0%sE zX=PU4mA%K!%{v(=2S#y+L|;2MZtTtI!fSfMS?PGzlsPSaqkiTUL5o&DtGB&B?5*jl z2R3`o?p%Gx*Hm%YJ{p$E}r z!B3A?G4zL{_nYD$YLE4lzoTEzcFpG+d7|{P+oB5pCmOHs30VW18c&+=lv5^DctqoV zy)Buml4ay9&I|&_2bEWJM1ZGWqNwd51k!f}(#W&_APtp7GK92^ukwG&n z%W!sQKHM312HVxWE6xrEeCpq6{9%yb1-`ja#RpDtck|}zXommyn&|oIj+)(DJr+DK z?fUY~u5A>H<8>3kcK@3j)j)l*xgyV9wf3E9K@a`tzR!i%orB9kz2}}mYh4lTA9k+j zArB{+vVB`w=(KiqTzZenu@!k+8XWbERbRijQOxwUag#Hn_cP<^r!}e|)|c#rj<8ys zDkW84R)X3bhT-L{!TXn+13#4qfxO(WtCO#byZW(RQ~cuHop)wZ`hc#zZQFFPpVhcS zG61jMBJM-B?$KZDWI1FTvWZx#7l#4sndninv2okZlZ{}#aP#?Vy|EbF{Xy%Y#%0an zuXpS}2d|Gdes;p^t+M^yU?~4dg!KBp{E5qxir1v;eKRoUA|jR!VAt&~8Ezd0`dZz3d`<{!r-TjJ9B+)5zoAiv z(!q@^1G>?O(^-RWLEk;Xyber9WY4}e{`9`?c2=|Ipr~S}&e^fOJH?Oo2m^bBgW27E zMt7iXo!IpbZ9Z&0q4ygmG<`!5yC%r5hyUf9)xVpj5O z=Vaf=_4}vx{z-m>zstXMah@`r*H$;G3TOYU?w3g5imtU{0 z2N4~{Z*QJ#-7_o#ZISG7rU7Kvn+T zSK5bvY-sQ7=>PHdUEaOE8&+`U8=~>c;~E!-C*H9Y{ko;^#r<_zP`xo&$qRh6BkybL z4N?9j(YF4!Uyh=`9cNqCwO0jC5=R#2mc88$!EauYbaQXDJPh62^F7{G##8Rt`|KVy zZ5zbqM?;6kfe)L=uS0|0?!D)3L57Fsh;YNg+?4e`Gm1YVo?<*b-f%?lJs=1l73UWz zJuQ5^tgXX~czmBtNlNhxGE?^DnQi}xM)j}@!_1#kkoE_9www(v>$mk0! zWdrOKC&wFhY7al>!r-Q=)Veb-503Jx@ezHR_1nXBj*sHy{mJt?A$ZH>pno12PWJ1n z2XvLAngMX41H=J+j_-S7_~5VS>EW?Iu$iHLST^~L=yplZ;OJvJ#`WiPH5vN)z|&iv zYn&04JkkumtlwV%i$saV5k)llU3S{$( z;9nmP`g#!lX5)p?`t{9)Ys1+Oy5jePvJBTdCUR33liRziZhEWJ1ZH=axjoIyo^f+m z5!F}k`D{{#XI*W|&B^Q=nvE;d8|U=)N5&71@4N-UcxI5>E$EB4vF=CYOy&XZfQXu>5HC5>5WJNJI7w>E^)wc&GS+U8N|_dgY8)Zm{mvGL9QXL}DGpLccN z_a<#$8lRuljG(XLrB6nwPX{Nu;a&Y+9lW;g3eN?}yV~>p-uf%SfE>L&c&p^NKDxiE z>)si6u@;^Rr)xX=x<)hN;kM{SK=b?8&O0xyUapzi64vBB-A9~H&6ED{GU>N(uE_&@ zBq%!fp+>!0Xaf)QuIG2w6Os$^LY7@v(5C29xx7I6CDYBTvNX{6YO=e`rlazt$mth^P^Sv3EA~jJZfDy(wA4fjTW+N zw7o}gJTR!gIO|mBjCVE*-q0OnE9lw2eVj!G6pQQC@pRhF+2Qfb_K@G(hCxz%$DV7C zuDe@MU6AxRJe<8DEWR@?b7oJqe{{boDBKrJ`4a9+lhmtd@A%(A>5V(2SFQ>IGIehW z&bl;_3hSaYoO5G)SA`S#+K)%mD}wmdL0laM-CDS3=k{A^Vnj{$XzRRY zja%Jz8=|I0^a!oakvIJxd=ySNar?KWG+fxm}g0`wFcXgSZ zJZ$=s-`n$C7Tnk+R)3rszSlPEX%Tk>fBN6~jh~MbeK|N@)W|oef5);3#APSl*4-b7 zz8>kUr#o-maw^N^WYa)B#6( zZikA1ZR2FG3=bmKzfkmAPL zx{KaL+ZSKBHyT&_d28~2xAvdbIj;y43*$jg_J+DPs<6AK_hlKW9MYLqudn4Dq2JfK zDDuwWeQiAC!Z^aWg4_4v307*hT8OH4nc7xo{!|vw-zA6Dl37QD@BF?fU&bQ~_lB;1 zZ})Tu*Sxu7FYLPKwf{Te@7A8yCXcYgQiQstIRX8P(t0oAFLu*HfxSwSw*Q;r6*;Ek{kp)a|`L|K-zBwtf6D z)(VxeVBTHTwp)Uf2*9k~W&7xH`#y7~<7&0pTJq_hsc2X)qQ@drI2=LetN<1?o=XWrC3jtRoshG{Vl zBfV>5zKxlkaY%PQuBX^1TkpBvU;J)mcij+u@Pu#M(^^Agb~wNTuIo+BVb4A{m~WeX z`tXD*>4nxxy{Y%N3WB=eo1%4V>Z-t>8E<{K7|EB~@+WblzsvV{QKLS;+l7-2jk?-? zI(k+^e0LTp4RmhL`Fxy2eCc~Z{gYw$-zV81pH1IUuQD^5V+X0eI3PK>L-Uk(&X)&R zchcvxS4EZfjpx$O3h3oYFSA(k!uUgS~3iUE(AMB~M=;blwyMjt*nHws%g) z4R51NGjUdRBuhI(S1NgbZ4>)=yuKgL*oV~MPrBc?mE)!(^)EWwhjtgg@e7L zI?i_?=nJf*4 zx>|{R9~xE;?)c*y)oLG}{>op00>pxM?K7ue`l|3*sKAuIUmt#NYbIUN>=8+{m%emIPxQU^s4zaayIdD0pYJM*gXRG};r7wm zQ{712M!&co9d_LQhw zPUOgDki92Pzg_2zoS~cJ7kK8pW-u%r*!?$W)m|0lpVvNg%Ns0q^k5V!roe)cqsg;! zL3^){tK8FHazgN-A2eRqo>g)5XM%`hSv$9M?gd@vJLyGasEp+q@x?Wb`mEg1-;Z^T z=Xx7@*z=vaYkW^$_Fj$RORD8bW}4KaUCZ0-6E%r{?$mqIifK0dyyB}Ws%bTY5>F0d zFA8=j6Aho-{sTH|erN2~-}|H|9$cjK_34ivh}+Y_t-;9ZT`=LxJ525+BVj?j?ASiK zz#SdTXpEaDIlOyzJ#na~gY#1peNu#%Jwe-iDwsUlJ8tL~3;d}#{T9tk7S(- zE^ghdn3+}v=9dL?xjA2)j9>1r%d;)y35fn2633a7PmTpF!hK^D{BSh3WwfPh*W%uC zLD1f%W94S;Fo}n*>nbYMPYoY0iB}xamoH2&gX0)+Ik8(Zn$Ha->kX$v+hTL zo_J%Bw%&^BUQp9?zoch;4`%oWJp`@^7B-nT1fer3LNt8$3{eKVT9 zJ1njV#*YSjbbnP8eMu7Zdtt_!tCvOjGO-_tR(bQyqKm@nx1-t%yP68tRb9o*5@qCf zxqc#{^djY-q&eN(Q4hvhcIYW|Tce*p8kJqwR^3B3cAbNgwWKN^w=xv=Yuwn`vWrE<<#1X9;m|(2^y}%K=b>gb$@^&3^k|<4o9#CT1O1n*F~2e@ zrMKvXVN@3*%6CCL=#j>4qD>V7k4A}dYp#wH+|ejD9=E5vkg)A&lrVN<_-WLwl3FUhizmr5_>E06`eb6XZ>@5nRI1CLIBQg2ME z<3L+R<$Jajy}vAIFYT-a6ZtS?0DdPcZ(dj76Xl2XL^nd++ka>T=ZvQl|9)1R&UXRpP=QuC;-`)v@1-M_m=K5ogpnPF2FK%@ZC2^+D{bP2FApPT4^EG3ZPq z3Vdrv^XsdaAi);*#@3P97&WrRtzJ))UJ}&kBPRys6B@1cF1kmDfDN@gJOOg(_6)Mt z-2+LL8X_M24cD@<2{e;uNJFlmeGV~vRG&gdmRo_QD^3H5)vVh&pVpV;Dr#=^y*Y&-pzs1t|1)l6&eOR{% z_OxJrKvjF&H;%1*s~yr2=E+X|J~kM#)y0wYwZ&Ump}RJ+9M|`bPj-)4{aPIK#jAC2 zJ0z%zdAvIOoZh&9;}*e)4ZTBLP%klkQ*>5V2QQ1@!Jhc}AVurajcAW>vLXE6pT4p( zSd7|q5=IYzb$w-`Kam8W1{gaKVrq8GQ&WH+S>+TgK_^;*#Ju&=k+PZC&KQAaQNh3KvjquDk zwI0`R4em!Z@8`!W7AHqf3&v-Jz2hb{&X+6VeN2);REc*+=LtQ`RUI7D$U@Mg8IM1; z`<@kEbvK{aIcvj={*1c^^<&y6!Zf4vEL*MumP`SjkhOc?93%bmR$LSH^->=Xob~?`rOERi0;}?p4tr%Ug}WjNWL^=t`#cmW?9J zBH532%ymKU;wV=~wRJ(>9C@IT&sSXs9aQ}Y8v!@?b}-R_TqYhL7#Y2)x$t;j_K@1& zS-qoYcrc#A9|n?J#|5n$$c9$4vOJjMEgPfrhdNGf&z&8&s;k;!ZCP+~Z@#fzdOx-g z4>uidZlgXaOB+Q*t?je2GuL;8UE(g*sCjYpxwMh3Doc2uX#J3&&6A)Oeo1?GYP%@a z@Y$%mksH9%tdo^KPK(;VsM&|kpPO(lT~X=!oPY$NVwv=2kw5W2eR=76 zclK`jf3Il&nnu}3{Cx7iZ~&fIp5U)0FTayE!yBW9RX+xCbGGXf9V6QFMC0w9e_8j@ z@8gd4ujnp!cV}|@!p;#p;q_4&{y@)iOMlTdWjX0Sxot3(g-F)%J&6(WKJMT1$Qxh} z=`S-QIB(ONqWeADLSMA*lNl~gfp`AY^hj${sXLN2qrVIZpyw<(dFVvfIV6aQqVUPd z`cf+^&p-vualx7=Y+*REE*YsogXbl%7BYPaexdij)O;&GBR>9>u5xu-@9sDmO1B4l8vWJX1rxl=d&&QiXDhXyq`7#$p^>oI1zBhZgadlR_nLMvApTn*}2G>vTqlS4sEecjx6t2g;ja<`*#jVvX1oKzYee=QG-(t1ODX zN8X@lpLMH;Z;Ai!ww}zYx$;u^H%6Vu1rr&{Gs9CR+sVASvb%_4$+27C)mDddS>{%0-Q2Gy!{CEm zNv8o+tE$6V+pEK(4%xS+lRsC!wW^I{d*4M99Bw($+_q}A^9{igP@b4Li5zSs3N)+PYe3#iES*J_~7)=(vwDY%&|dQUEgj&o{tOj3Ff-`s5lWNQ4gKWsq1);qjoWqYr-C;=BI9U5&!yIOk9g0_?zy)4A=a_7 zkG#2Qeup|hIZt{Z^4?g{lID+6VM6vC8vsAheL}XWT6@1nb($3;NqQFVi0R$hk-E{) z2hA>Pmh*_}ltVw&f8(xj#ZG>@ry=#pTNcPJJ-ci?HPkwb=^G%MMxO#cRaS@`r>%Qx z@hW*6GlP!0DY}7`{P+xHbFfG0J36K89js_XykxRZcWoTLFx54SyT;yKaYlPKRVgqx zh#wr}Pnhs_IAygx+Ot|m7<9k~Y{Y;)m#izid{tZYJzf`0ZWG<8i{tZquqVGE*p2Q! zx=Nvb8H%!SSn+oScezH7PyUkiA##0vG`y@)KCd{boF)ExK1Nx7YQrvWK)c)Y)!Zj`h6M9&MNbK{t#l2ytd3rl*w>G~s{bWo7pFBo`t5z3jt zR-TyHpAKaD(kzPOSnc7UzG6w@NP5N}6x0vuh$A}x@J2B!t7*~8t;HoDVbmxe*m;K~ zXX!MjcD19st4eOtcJFYZ&!RePU2^yC+DA=}QQ0H^hmJ{$ro%nj`|%^P0$`NhE5DLV zek|I=UF0c|kdFixdck9jYZ~QYT-W%mxWc#N5msRy{ZmDK9*$$&nAb&K_BZ?ciuTD` z!Mk+SwsOziZMidw7kOfJS>0&hYgP9&=Y04Q$bdBy>d;pVMrCHgkLMvBTs#tUzo2+XBTaBo^v)+QlT=O!OKEhd@&8!01rA2G zi1^EHL3qE$rJYL-AJ(W7wEUQzCz9H_hjW`5W}W^DyvlkL@kSmHy!Y=(W!djIk+t4@ zdGBu>zrCX+R3cX%_um*NCDAVJ&FP5`cO3hcl;9JW$;yi+F9b~2^uO9a`MT;&Wy4rg zNqki1@Xehs*L78Y59`e}tT*Qxw}qX%J6Z;;+`KiD`HEjX9~Ysa&=mLV$z=13#y!yc z@c|k2&9vT)3{?7|DoXw?IFVPR8#}L|-0Q`SU@I;s>r1y=nkKDf+r~YjWP4eqdJXZR zZPB*P&A4eFha=ig`=?K;proI$*Y%5C*cmdZc4~a0r@p@TQJ;5L<1;~E=ODXxcig3W zZq*%B$Eo=cmy;iJe)4Zwf2kr{AH~tF9tsY$`P;h6Sl^6PC2Ow_GwdN%@9ctmqFnj! z>S~q+-K)C#UGWK)#hyLgj^R|^FnHe)^wgN~Mc)>b@0&c^{9v_3&&AI{#><=Bv-jsa zw9Yx34u)BYcn{toCV_Y8Q6l$f*N$J(8{!^^2PZyal*=CDb)+A?HeT}9{586j@!ZR4 zlqX1I-8LABnY^MIBTjCuggISB4#|#DxQsBqq8)n*zRM;3MT%^UF7$ZUiEg*ayxYBV zbkN%(9LXqI6P}(5O8QgLy}{_FAa+OG);fPWn+)xm7I=A(;pbBKstWazMtvjhZ{$a? zG6=iqnyzt09Nk*3`k`B!MPCGbhF|C6#>?XSa^^)vc5VCO zAbxmTNO2OD4}v`2tt0o2$FNLMy1Knx`l{&Aont}LRxb9?li*-PXZSO4!|l=xbZmU4 zk+k2GUuo;Ex>MKKEj(=dqx=cgkE+ga*$qKsQ~;1|YkNQ4r$}%$Q!M+df+ioldONiU ztSLUW)j@-l5XS>=RT4B(GGFJ;+k&tzAI@3bk!tnv6;a>~ePrRV>)hS14N-#e;m#%J zH?^IQc(>jk|B&s@-zC>l7aqRj`Hkx7#g(jsYW*kPmLnR$SXL#!7mub+C9*=S2~RGY z5o(3;ZQY6F52{4lp}%ELv66X3?BBkWr^aDQHGwI4DghK+JUbaz}@ z#{p5B90B^czSZnonzz`qHO*)@v>2UX)D1Y6PPwozPH(L}QK3WneRv~|L=NIbxQKk% zJ$s&|{msjBaJtdlt~5Ig;BjK8YUuZE#^{RkP|r;xw$kNg@Toj_Ivl7g!xLFjB7t(Z z_Y1}&j&o>m*gtse8g)M$cVguV!i55!|U*H<0GA; zKcy~*Xj`u#7A!4s)aY&MToFDwu`&qQLvl}W63>IrsJq1_M>LjAcmL#h^u>B?BCp9b zbUG&r=6@2CpE>z8tGCxlV_sCMBO-d&7tvZ0v^#6B$dq2x6+~O*i121P3y&V_qR^M< zDQqfS1t;^Ia~c2BhM|0T zx$tBeS-=9-#Q^P!d|cm$CQkn1C2acP>6K%QW_4c>=aVJRzpQE>jKq!TxZ5-z)h@&A zy^}95#k$Vaw{X`Wwny;TxpAA|wJ~W#pH#<#m(rWXH~FVjQ}5jG`F-Wd(Jbcoog2)= z2KmPLZ14}++tzIwz8ovD>>nie3u0qdxGs%cX1uL%A!BDrzvSVtsfK=u?~{&fVx9i! zPW*1W_BURK^W%6b6}IiIH%B>W2Tjoch8;`mTiM&I_N715EA(QxvypBN6L<8zv5|Ii zd84j-a*8&0oVc92C+p9sulZ)W4h!qv#?`@}j8SbbPIy_gF4IY7)BRmrkB3JlyoPkO z0`+}u;TM+ut`bERBF$@PVGE-)u?q3&=aOMovgVuGy0_aUeDR|1*Zy6C=Lnm&OB~1g&-4=hn?v)`%c!oMYU#3xHWxN42Lg9hgbE&TlO~ms^ZUZ!&()&<|meA$Es(a@B!l(G;PtSeS#q! zU*t?gSJV%`r+v#T*k^K#K5zT<;Y+qA){^Fuu3Nl7;<@}{!(KMOX7^jYmfTt~VmyfU zsM8pW%U5=uzfe7yDrcMg-LbbaXVqGY9*DKE@K;5D@<)fyfImSjlx`@e;_j{_qJ@j- zZ-Apb6lFiqtk6S9^}waURBkFC8?Pv@#qe~BeUU5r`9Im$emX4ro!?u~!}&7!?)mum z#dqoLT|Lk^QFn31;^nt@i)K)zc1jTGX8-#gG%_ms|v^rEJJIj-9Xq3aG-s9dN zrQU-Kk>h+{kjE+waPWaOe zjW_ib)t1R&)~t)V^)x{Xy6)-oM#r=r-CFMp{X93p0)E27Nk*vFG($yt%v1lwLuhh4 z#Vuqx9~Rv7ap1oZ<=#Fj-#K07z_!XSkl#Vu#Fu0-iLQz%9h+a*dK@RU_lU4S589=p zR5I+`mi@YhY$z4uGGg~@FRzz)l6t)@qV_HOrOTNt9a;9~huF;A{@y9d5o@NK@g~X) zTGxnodV5)_XLvT|+2NpUd!X}1cZut&}>2&VK% z^<*?g90qsVqpQ-VL^k#g>Y}^24Si>uKD3@~q9j!y^fD1Wo>!HLw29%1AACd1OETL`wC%oNV-E3y@$=H3^vJc=pm{(NsCkqhrKbvM z`gCV*IpG+nf2(L19~5C{H$4^%)Fta%Oh>d@G0sLO(_>Op^T^(BNk>_OL^SA`ALZNZ z6m80u(}xn&Rc4E@%KSRCGi+Nt*>+&GD-I=FL#~~eAh}3W+P;yF!dEYkTO>oC-kkR1 zC)N(%xsm5#_pV46a|KI zMV&66&~=S6c;;qlh;!oFM)6d7`p_?FaUwu8knJXtOy(*$h&Pjq)}@u(NJq8q6Ps5q z-%)*e<@sVs)&n|bleW&WrFdY(_Ewr9IuqYFyDcV%X}jRZx-!G;>}=QBb-dKJ#!;q6zX^ z@*wbL>R3pN(JO^k4~H~JE85a!#8iefuy&~|K`ZZ&Pfs_xzZv0~Hug;0G$;63_?%<{ zTalfIPqu-|G&tC~?chY48<8lPanFS}x*g9IEmLk6PmEd`IU&QhGb*ZaVL4FqI|7cz zdM@bRmDO^99@v?k__=4|amJ6xWSC)_@#2l=Wa065J=WXM-sltPj>n9|rNN=c5oe%p z%ET4>mPaJxk;h9Ul#d^e!gtqp27dfVUl5fOre0Y*o8MmMf^5NiyB7WYiMS4aAU{&2 zpR?g^_2ddNsMfU~MW~+R5oR~CP54yxUXYi)P1{Az;9z#YX9XcuGdwf0nAGdquS1f4 zVEp%Z1Wqt?6+U9wFmgBKijswn9l8zAJl`Y=-#uImJ67%jyrWxJcU|2q@fH3}Rpdrb z$9GRw(AaoRd6}MQl&?o`#%Jkv>_(cUK1lol>V@Q8iFMr6$6BFuOL~X+KWM=X%XMfg z{AMbTZ|m>TP59oZ9lzmupu_7m%y%s22QD zuE_J*==A#;$=xlB=cpg%HM~1m&`sF?d@Z#7sZFJ#gSS9O2{{ELMo1q)yL1@xRXkQN z19e&Q%R~pC?+CfEDyOa3$KNRvm~AXF2=`XUCTqc)ZNx5nq|wZgQw9?Af(l>BqhUzT zVIJ7+JBPJIXV))AtVM0Wz}CnwQx`?P>RiB6MqA+@&^ML!i9f^1=HSMUg`?0#9Y=EN zul;;7h$W;iDv!LpNL3N!06t|7*eb({ZxxNvWkxJszVxAcvRfHF96QrzQOx{|X z8An>wXTLuFVsWut@ie3J`Dx_C51mGylwSk7+Xi1AFg^E;xWDJ&`JeK2Fz0!c8;Q~% z3I^siI>DdC9)`7ud(f%b?W!)+)7={15F=$1iHo2+UQ8?C3|S%GMABY6p=v$i<;Uap zq^w>XGHu9K8I%unHqWSx z?9_-8i=HlNT#_a;wM(}T)@lvx$F-jq1L8U%Nd87Qhki{Luj+*H4(>Rm55Av4`82yXJOy)56i$B z{$V-{9LQgxf;!J8ChOgHzmK+}dNaJ;M z*IDssJd)L~)8yd)<^_K5`Dx1HZ@BTjQMnEUILDa(HrkP8}MA2O=6&W*szya^=x|lMNY>H`pzyv&Dru#Wij%hk<2`4 zu*09m^J_eyxuL^6JyCRJ@D3gXoD82*g8+AOk>!)ne@7nHuo1wP%B%C#y5C2d&|16_Si1U3g(L%Nnf%8RzQ{SM@(<%G~~5TA+m?(rGZ<$ zQs+h1v%8=a891~9JwjAi;Gu)x4*7-K;4p9j>Y$GUkI&%oxX|z>@FS|3*XvonhCY1e zgsbo~^R2OTMf2E0B=SAM`nF)n-hDiL@yF>eC;m&Lr9G;*hm8@_mLa^ZW7M+J6l4jI zTxt)7?4kwZ|Ku$`BUggOE@p&^`Lt+3e6+X`3Ln`TW3Gt1j*8TsI}(@T699L;Iu<1b z$N@R4d-bF$P(L3b70+>Zy(@7=aMtUN7tH^nP5gGx^iCiIrg)1O>!3Oms1GDx z+4$hxpode4yUKtUcjfsSwUD@t{Kt`RM?RV(Iw6h^f55PPRdS->TPD{M7g5Q>)~BzC zU>IFN)&?&C4IX9Vr64Evw;`HwtgHjnL$<0r6bs}#(Z7Ja+hzidZKA~C(-Kn^(ZE0O z6P!b4CD}?6kPh@gK7~CS)urms$=^S8m{CQAy5)0-HQFNcY+hgUg`GFL1DcgQ6gtG{ zYb8U4l{n(Xa3`iswvwsfFN*v`Z>4wnu$e~2HlHK@z&gUC2k*xDRaM>_JmsmX)3Exh z%D?qdwHgLmG2?j=$3lNdoehhT-9+@B`6f=`3hod{1Nqe>3}7N}x$&_Ms2ZkwwecNvb{AG9s+>Iam-wF*lq? z>!HQ4V^#a9&0`PY+PZtvGiijR0?&{6Lbo9ihQG&^%`C_8#K{$4b%DDt-Zi`!c$nuC z&rngpMjADi;!dbVuCoY&`bv>hoPnf8eP+cN>4K=2qyuf*Huw*(0e=gQB*RN=nn!2X zWamCjj8e z%AP=7pe@UN*r%WbmZ*Ak*5+Xpr9@ZtMA{~*{BH-=AZj}!-a?erUkf&__k*W2}gcGoqz!ZN0X_%qY%baFkPJITnZ*dB- zCv>jviS9EzJ0L#10s~`%ONm9{?Xm_y6nuFFSWM&t-JL#yJ>jG`FCaR@xrsPK$OHBzRu}6^h&ddp6*_xBAo??f?4y1#)BKGpr7_+o95Bt zhGIMT@bGg@b(`TAr&r2%q|@8ReT`LcZ1jH2uWMv zdmK4)=$l?ayP%)2K3Sb8dYW@1Uv=7}Y~-5hOfzCyvRUzbe*G~!L{dbuc;s+69Nw>~ zw`SO`Bf>iB40t$H_MvB9Oj#T_kNC*Q=1}p+M>Fz>KoZ^JBYY;Kj&GLmi&?|V*uskG$Z7vq~B{N;P_-P4EYHzV6y6qR4WY@)#rnL4Ar^!TYigI!Kv z0e4?Ll?L2JU2R8YL!&{90}rfy{FomYkM+ zx~a?+v%stAf2>}37@h^*?8c0T{-3PgO6@%cC!)5R&d2n zXo0Ahj%g0?2!N~auEEcoz*h#BQExo>`=ERl*pyGPgVDTe(IJPwW^gyNf`-G&@GRmS zY*K4k;P32We+?Tq(t6GKHk{j1Hp~tXW<0mcPxHd33^BU{4UcPHu#y^VB(=e zrm8DO@h~;yD*jGKf=zxH6fDoz8UW72-B@EJx~CpCo+p>hp)-?+H-Ct%E!C7_MJSub zF&#(dir7CGf*$TM)g9@6ykBS-{7Hckp&RsWE6mt7{m_jZH>jQV!;8QpWdrihYh}tG|%5go4#zu#V`GxH%3Xqf!+x zUELg@!%U$K-n4kI9zHL;g`LEHprik|SJ`vWWl3H*b{=U%`!Y9Zzjz`nyb%8wQ7iHb zub-}o2ToHMcwZVldLG_!GePDmJCn{n>{on$;D=|&ykOyiEu6|d;=!jwia4={tv@;Z zpD0~z!_-d(>M$eERet2?DLwo%>>-@qyMv#(?b%7H5o;#-hG*PIwajL^3>$@(Z$98h zBLfjH9bPg#UF2B=LVn$_s-||+=!DHvk1K;ec;fPGSx1YPqwQ%-10Kg#Gv$R3z5?dc z58Uz};7j~q>ihV_nv20Q4uq09C+Td&DO>`}X!(X(( z;iD&Q^+9nYm`?qeFoIJJJrRHBVRxU=*A4E-k*6AmRXywnm=Tc|d-j$fI<+0?GUDF+ zQhf8^IF*~cX7s?}J!6yNAfPv3=#T#?H}-4zLGW~OiV*=>JK@DLpK#+J zxBnf5^WzZwHa=5cPX?oWaK%kvWcu;jy@%JCmj=i8RIIn5WugT-4B0gFfC^?n6VO z*}y0+FBV338TC+O)_E$testB~J*MsQ+vtY!OfX`#$Q`meF%BeCUUtp!1rM*K3J^BZ z3$#v7PPxwD%C3UChopufR~~+c!J7v68Y8HS>)|mhW`CP2>}Ecg(M1P0VYQOBa522s zFyolvi>18{dN;CjrZy5U7Oo8LB5;5)gE%mNLKP^L~zJ`G~=yau$pLS@+M?azyXMeZVZlq1E4{b&|8@gwvnlLsV#ILa?Ct1`-dHgJJT=B0wYa>tkw0J*M6G&f_~}!BVNVN z33q%4u;@Ir4STkjS+I`7@m);mVdPqQo*uK2KFNn89%7cVTR_<8o#hJ2JK&RN4GsUS z8DUP)ym<~tQQonk(ctv7M%-oi2L_D~9zL=JhR1%4WCcl0Uh6C8ny!kslQ?JsB*j<9q^UOBT#wCa+EVLYk>-urh@B64;MC9$r$j63x2%dhnWIhYmVLtAjp4W$5&LE`z5J-`KE=Kz7UvUKeys zUgIiqPkDZMaQJ5UU`G7hFV}Q!IX(24F*B!gadgY!FQDIu-)sz8Y$WneRytb}$C0@% zGkX1xq$1Db@E73Iv=({`Ivu=d(7u@f2g4^x(&F+%;*Q_rOy{8QVL=VLhvN}B;g5ej zsOk+dq!ZeQ3xA7+cn=i?XvuGygc*;Ak66dx7efypR7#7)W6X}JETt3j)(_7XkFKuq zyZ~Y(v>Ez7uYz+&oMhYsuflPr_AU-I>Mu!n{=4C|8@!OWX2>O;V*Ext#M>Crkl)Yu zhCJe^p9dU0(!2+}jl+WCA7Eqh+lYtIhh#GH;ggb2PtJoavtsI1gB4QNaZ`VnnCdk4 z0w=Cd;;>T5Q`~$!JKu~MOLoBkElvL3sBanG18*owZk7*^oB54wxE<)C#`CH!Re4j(XGX2=RYpfLwvz+dp7`_Rl{Bdl_9BwS~VbhW9cipIc39J(Zp zZg>W0)`Q;h8Xgu_D!X)Wax{&~$z&b{vjgW=w=D+6mta1O+=FTM7!N3&hG%YgWz3;r zLk&O8&~%*tdCou3!j@ss0AU`7N!$-h_fm)_E2y4XigZ<#;qZSu`NB^`n z#}1tlHyG4CbU$1eq-5L3=o3d8GL+0DcSXZT1lBK7cSvK`8Qx0}M&m{^%>P4EXC;j& z%!q-pOZ{SXn5|O{0k^?#XlUm5h~9(z;G$y7WC00=B8R<%OAMdN@Z{J&@??fSP8yHT z@FJ4PJeK^Dv>6zrCk^e=->^n!9q|@e0C_V^+=G8WPt;L&fQRs<;y7TB`o*FKwVMBE zc4*gPZD^36nEh%l(DX-?lx(DP<3OWV3CM%*l&=rJ3+vR@ffrtfF^9+%_#1u*qb=Z0 z4tX|w(bKxGnfT-IhXwEC4R9QJP58!CUm05Z@T7n{{T;pgqTt~<5N%>T;qB8L>Y;t| zr%$=PIe?l+zL}gHJ_u*fMENzr8;4=F(mRLF0{g=c&&H<3z{T(r@Jr&N(>Xw^!Sl`b z=^P(ES=0$1eDh*+vWrv)inGE5*p6D%Y0V&xBu8T^ZyhDWK*UPs5o(`a6OMW0T~%=-Zo@ESVF|Lt2Lh4FH>sAvZIA2E%gXO3!Nc~5Lw zo=R4ldygD3dMFv<>a>5HUW|bB_grixzt~IW@1PqaTX1MQ!|x~3KsLSrb3A$Ik9=P= z8#Ig~`G6fMJJn;Rxi*8l&}xPZp!dVakPw60pmX-puvPiqht59oX89j^EJp4B$oTb) zyuvgyTypq6hHnal&GcK7*5wJmKLlWIc|KRcII7 zVFCXcSO7QNVeG^6?K9dkd^$s$B&nSbk3*91Nt!t$21T~mKCtK@{mUq91d7x z==+5a&Vs|>=0ooqvVKS+RKoK#V#Y&j7@0J-3~oAfefe8(0!sMr@S>njpD8Ee10MP$ zc!JsR+dF#TVrqkpXyK3*BXb028G6mAIB};T--mwV2}qq`d7zs?F*3z)bl4car{NQ! z&+}0YZDV+8!NJ@gRu+mJb`T46d`R4ZnUS+JUg*y_H0d!;x7#bE9i z$*-YX4?Z$t&gd9j;?QIvn1bXOhweBu&%u8j=QH9d!=FEVXJf96Ipe$`FJyw_bFeW+ zGJMM0dx8J!-zx zaR%;aGjPBf8=BGJ?qe>{>xWJ={05*8!fX!GXy^xMjiof=O6Uo<8ShP-9CpJy+VDP|7sN^{uz3I>Bz{aCRzHBA(=$)&HN%fA!3`WDNSr{s5ySCS&HJ z4SU_i*J(QF$!=FvvKRDVt=bRIX=e&sY0FBOc5s-O6HDkX^F*I)IsdAa{Rq6v?^@|E z{iBDhPl*lqIKL7d!$QAvh51Bze&g!?SDFHnXoNd9=(IUXUB|jB);>F0-d;P3j~&=| zGv4eQEih-lMxEh2TEm)&Z?)4u`fu+$8`}^syBG|42a#CTR7U^1n~}ZzCD@`2mQ%)^4Ot&SJ}KZ9Fu9BVLy5g{zF z-G<7aA2?Hb25WcV@gOw|dm3McIV@3QNa?G+R%h6mg!f#fKV130m8v%21LKLPVW2)i zorh==-}nt+dXf)NpLT#TScACpHCDhH?*8L#{gwcH`QV?j!hWKf%%R3K@Lo-cYibQ= z;!5>|brD#pIIfaLOH>e0ZT)2AlJdC5r3_DL-Jp^XO<`ewPlD?34D7&fXNcQD9Sd-{ z56PGu6%jGY&phC7JB%@yS&8wBYd{O+Py=eXay}j(;9FGmp7ZeAxx%?Lb>V5|iKloM z9!Fp3iF*U?(XeaHs)If{qdHnN2M@-Z_jjx4hHUrSIIcjWwJSP;n!sIHGalJ$&gZHMRqUYJ@1xC+2J8_2WRZ~>?@Q?q@ zk2@AeV_2K2J*YghGP=ZfR;XF_LuFjS<_D~nK^z49@Fe*Dhdedp}YJNd(pw7=g- z&a5x~;qH8;7dyjh1ELB3hTqJ8#NEUk>??>8SAIuFykgWTzVII_p-9fZ)DqWV5lWnw z*>OO(`kh{yVoa;DujkmlZXF&ufd&a58qRv z_i&pQJWqvESJZarTNDT-vj^+~^&2Mb&lSCOW^#^Vp5h>4z~e;|rs)Ng5jhgy#9?rq z*;Fl$-Dy2-v;>~u6Jx-zKQ4oKe_(-O&=iqueNuF(zsHfhQD;Gbi(HwJTF2Nuqn~VJzyeJcxKuE#8fV zIiniM?xfzRib^VTBdoDkb@WdH^4d>qXIfI2WU!JzT|i zENJA3R{0G#b*LGZcQ1zdo_Pr5{k0Na5a(S*{kZ(`VKgv|*%j8cKZQmV*MSjr#@)u| z;745U9pGkUKQ>X%^Odw6>!CqL@}MsM*Z|whd%p*R_izN>!;{w6;ZOh79dJ+W$(bk8 zP)T6EIc!lp2*$+ns=j+(uKd$^*IL<;JFPLssa%ZN{cW~km&iS_VqE&lhwEY+xzD&& z128A2_UP$+Pv!d6-!Y*e&X2@0s)lNfKcL~P`B^JrG0sLjsuL~HdSmvPU-JU2;CzGH z&|5|kr#=SoaSh%?aK#nQa$GS7wm$}QU4M!{TA>1=;;y2IcLsCu)fYTd!tCK2)Ox(8 zwGy)}sJE5|_nC+0ic!FI_GKL5_Iof=+c{$g6ab{%83T0>QC8*QHqlMHH7I>?CN|k~ z1)85-u((Lef0YkQVR_1|M+05G8p|6Sz#f06n$8znV2@%&uqTEQKVuKIM(#52qWYZi z4Gw2d?o-vn9ukRJvMgW z+=>VWZ;avfL^bUE0M9XS{QCJ;pa0Q}+vq;X&Tmt~@#q$H5b1 z(P}juKF=Y-mhE#bYK;w?#d(v5kt^1K0qQ!s;x}eL=<(x2&qr&R!J1Lw6jvTF4I7{& zSFAt`UvS#<29<%A>ZdrkI)#nz?|yL+Wbmf!yIPp2K)4Pv?a_f0R!}& zHfV&=N&4+fIv9@jhx62lEl+39%kMQ%zB%X*f7Gfw{(mUj55%1BLHI2?cyQLA<$H4_ zcn`8hHKM8|xRW^*{Na3YrwT;OV~mc~Jc?bgrb^;D>kw&yyK3T2HTc6E<4E|e|AxIR zbG_R4+i({Zk(ca@gS#<&v3Z=GITM>;p;ku5kHtA?(T;Vpa-83Gp@+pXFlI;ajLqG6 zIUnoeJ2n6hq8qRcS!}^90AkcPH{u)MsgHQ(dSmR41aH`$)f?44<9NA_Z}J(PAvYgJ zC(l@^_`NphZJkIT(3;{yv5wiM@VooudiaB=_TcR9K>EUOk=dhBTj*JRrC;oh#d)w+ zJIy&-#vcA!pcR$-2WkqM4~Nwmc}!#i*Hvs(NpFDd>b~=+HW+L1e2%Qg9GYF=I2_^Z zn#r|lk)kRCt5A|63G=gt72Q-K^eE*>ceIB3@2rZ2tQBKs>3yJJ9@MC6Djq5W@?gE! z9cev$W2LmmTs$on@i-RCWVnx3fV+xQuIsHhpw6{tY}4F|y79hYdfrBa<$(=g0)IQE zOkY5m_zg~>J^WF}+67iJ`@vr$$IWd^DT&wErukPjQB|}9PtX?J6Zf&Bk&V$iT%Zr& z4$eOavp&V{!)?c=2QW(Pu{jQ+&7k52qdlBS2YXB9Ja$2w@DYwIg4Jl3=BG?MW(0XG zK;P&Y3dzSg6{Jt5vxe2H-S-BGVm*}swAAnTzVU;zR}P~oyRA6ej$74a zrr!r8&8=yS>K@i;ya!&d=DL3)7UW^#*a3dR*Yrk?%izk!1F{NpfxBX0?|WdhT7%8e zlIvVg89JHYihSIb^LqJcE_gG?hTP1EF&q|)XC-mh^01ceXp7eAH+s&c`G;J0=5fZ+ z=ja_dywtfB-W$uPG0n4SjXoa#z})yfG~x0bU~LJxRK$Aj2=C^SW(@Ux^n4|G3%)jm-xULi(aczd>Y7VZ_6H~2GnKSInvwD%wRz@kU;r z*LL|t(A;mz;AdB_H#`Ot>FFvXr@gn`CQx5c53-KhtLw0(;H)hQDwN})s9-6 z9oGt8dnSgN{TAMW+HsJoIJ{L2)FV}%Vlqd;nD~8| z-(!ZAD<=`L3{;x|oBxaqu?324lp>e6eN^+Ahq){J@FXziO{jbNZgeH@(Hj+>YgpoU z@bLUxyD-;|mJeDdqbmn(6(8OY!f?4eXdB;Wt*c^Tui?EjOPUAgVSBzP_nTkc<4|c- zeQe-dONy#G)9!dCmXpo_mY_KtRy~{_n2Yg^jq~hFh&`UAj`L=E;lcdhC$7UC$Ar3& zcP}J6fIqAh!NCzcL8}mPkJW|i~bo{ylOk^*J zd2k(GqOInD zBzO}w?wFC(Um@kKZ-es8;zwjc`|9g6LMx9jomhp`x!?hNlqMSiZyg}uz@?13HNdKv@j zj;i@IWi`4Ooe4=I9q<#eG-Ssw+Xm!icXv6@QX1QN7Ek02&Mo$VGrcN)p|ARh$F-yGeJ~ZYLW33L-;EV_QM-SbTWQJlCdT_`)p1d1f zF`^L%d;oMnY2%r`r1$QMi9VPQ^5#W6YfSBqUA3|^!1e(>083~U?J{#OoZ5$4gwGHE zvjld?2VC{bep#QD#xJVPcSg%oa}b9C;jFe46Og9sSM0%Dv|(PHcTJN{fYjzF=9GN)tU1v9ldN$)q{yALML2Qb+H@fmIK>4LYk89n_Bq}+F)(mRI0Z*+YIYLy-%EX zmI8U>Gx47>!u7BRCoM6tPCl^Xnea_zvO_rU`tqamS>3dmo*t#|X-#XV<}bz;v#>yM zjrdTa>W@v(pz~0bV70BfqkGb875Y4b^vt99XUs6A-{M>BF3zFd$Ok9U2|rRwI+F|k z9glPWXnygICEeXSw64k~yYoV48h>@tI2e&1um|_%)AC_1f?R<V3NUCJ#2>&C_G7(a7@KeA}5#t;Ys(&T}}Gg5TYtCT(T9YlY>;hkB!L z^3CMqx?V}ohe?et+?!YR|5QM{!yF7nU#p}=VO<)gwB1-!Psx4;xO3=RzBm6O#TNR5 zzokiEWYy?su}l7+Em+xvX{cVg55nok_6d>quIj~I+d89r=6&D|7s%5yjE!T8W;9gNKK!iZF_}5FwEx9y||QJ=ZAE<_X(H#b6Sb<;4JF4rH*&R=|{9JfgSaEbVhCA+W68vfpEE|;CaPT zr5QEa7>B;Ht0e zv?u08+PayB)E?!T_OUZ*_{%DJCn{kx>=z~3JSY#cl+7AS3(?xP`#hWn=bjtp>U&7T zeDa>t`bM-d2WfQ$9*)vecID~59?Vl8n0|lUd5S*qXoIk)k9<`4xIfsd@Tt7x-u|BM zQnt&(ZTm)ej@7=F>m8w9pJX>oku_=yW07TzIws0fuflau6?JOw@TZ-BgZ;)kKOs%k zLN$Etm%X&tGN$o_a(f^fJM!taxe%6_)eYk(2fNdos}9xb`mQWTd6v zd%F(j-d(ymAMS&>To?H{kJf~|R@mG=aRgTnV#T=%anmfQ?I`PsS<^W-4s71nyWqcK zpAFm_cJ!?pxr&cs?iKm)%NE&(l)BRHpC?Vs$n#TiQgDU~;r)?ar|@rlSYZ^M(Vs^; zbk!B{3{~+A)y?B;*?zij-pV(L_>*;Zw#<<$d9(wp@{?c3$#~oKHQhF;?dw#GX`@B8Y`hB;8Q zdu#c%#p88c#}eBPaXoI+%kbX$V?dXSxHcBaCMRCktBw0u?QAs|`}E7JpI+W!&UoT| zoG+FW2j{!f>qBVLZKEs8#dceBo~*ao1NyQ*PY3d|Vq-k)1Hsq&u`#~Oi~H#KeqJ`o zB3eMT$<|w6_81u3#yUhmBh14iTZC);-1iLnle^ZR&sAUOLvv*uw`_R6`&}Nqx29~3 zB@a#>ua| z3q9I8n`aaHnBGj96&}<4KwM(x*V1Pga(8$R(o^;s#*E?aGyLC(Jmy8-@(|wh?BgAl zXvNc(+XmEZoay8C2d~y{YSh<2f}5Sm=ERc z9lMox?zWVi91q>+X}G%rX~dI?isVD;zw`={4GI?hq#zg-9^N9H!UZIy_ zoLG+qxc46WX+!;Eo3GfT5jD;|{#W@|n8)XRf3~a)mD~PRxhcJ|p4=;}w*~HS-=`Sca4Bc$d5)bYZgc0xk5Zr26X&kV&!>MK^F7Kt{GZ|U zto)J1VOhH0xGj2?pV;cP*D-$QI%MPLAXp7g6Y1yAoql8!@8(X9^YazngQJ|A^Y5_3 zGy6<=c;DLv{AaZ1xUN@X;P^MLcX@TB8K4>TsxIDnUuvC*Uwd+YtsNXuqkfeR{_=A$ zd!DOh&lOeL^LaeiuJq*l{W$JQ2m6_4!EF$}v%;OiU)%AvE2F0eo7=nZjpr^MT%Y53 zSEHufDa&2!DHC_Gzw6JlGRO0r{h|V1Vsu6Bueg3?i?NEiZJTFfto#)^gCx0o{Nr}d z`z*~1uYI1Lle-?&RRIy+B&7>^|^?cP%Et4(&Sj&#@4?yk*lUtZfZ!tbYJ zF>_sS+k6M(XFa&G$7@Ex9i~~KvHg{4?>zCl_VU?izE&PXX&t(xyS$p7SpCM|_F1Nu zruU_1oBOMfr#AevfF)P_<-X@@-S57xPp5qzMBUgyYp-{d~)dA8C%e~Oi+x99jo`HIWg=GU(DvhVxazN2T5`Um@G zO#dcdc-^aN!_<*^we!{Qn&+M_nD4ylSLXpo zJcxzGHBEo6acKN?2-7$;EW+T%%|BB5%8_V!A&VG)=+yiQ_ zKZ7&vy88Sc`u%xNJ{#RXTW|ko+>Pj3zR?Jw-PU?*&ajq590p5D?sy}PTwBW*>*yIRAVzt;R6z4`h( zHqKwa>pLw^Tm1F!`%d3}Pg};MmY!qXPk*fGju26odeZQ^r$LsF6Ps4FgvxL??mAY&)dGF}F>nnSf z`sC|*-g~W?p6@nO`d8*>Wg(@yz2_d5^(@r|&0_INhNxwFsj=*6G;jAv*(E8nB6 zjp_6AwPxF@xN|@Ee<>e^|4U?! z#R$bv!cde%io|}B7>W@}QY3Cgk8Zba-TG+eIODvnHS7IeXYKi8VCIh*?sebyb$#Bh z|0h2$&q-LJvj3|z_y2v=_zxQdK`?|s|My1-vi)xa!XO(|UD;Ua!>v#<^hs~kFF_W) zMz_Fe`ZAmar$N*3SAar4!FzBW5kNKEiS%nYTmhbGhtLbqjb4JULT%`bwxiE$pR^$` zr)@#YU=u~*4k`sJq_?Oll%g+#6{J~(K#`QAUKJyxT=AxONhuQtp<$&G+Jq9JG^iD= zfOfENXbQHC&7)D+d-Mx>8-9s~0|M^VeA*5Dz4j55=+Bfo&??_jAh|&vQ62I(*r`n* zD6$QABYDUsyoudM(#SM?7fmMH^#=5=c2obQUe{8USyhlIB|+w-a;Q*#XSxP^Op#0^ z{?s%Df5q0J9{4u242A1gpc{Y(&EN_s11~|Yd>x3vMd>8?A=n{Z=1w$Cs)7;#K}|_F(O6BPbNTGBBCdF;>g`OaN zK~d-yvW>QAd+;z+tZ8@xJWFO1ZNw`18A>N!Dya}EUQy!31L2+Vv{%GQXuPHf_zu&cxl)QpwtT~IReMDIs#Baz5+qydgXrnLh2n_Qy32H)iYLryxM91TD~pF(W#47!E9MW@kSbQIl#x6!9y81^ce zpi}vw1Ssl<1+S8zJCsYPI| z&<@#(rQ;%b5Bh>-sVtN&E-5Qgyx1tya)eSRuV@9ztS)ODD(K7Dbu#!_GzMs*a< zfD!#C(gaVS%ZQ9_p>FUQJ=F$51z^E#?JBsgS85xeLa)`nf~#t=@y#Vw!#@HKH9+9V z8;S$Z;1M8zIPeNggJi&IQy@WI)sl?&T%;B3;jfSe>M}6`-=OML7qq0cs?F-Mwx-sq z8`7*=Db`DI+DGvw^jup-9z!`8YP>SBX=EQs$2JiJy@riJ-;u{~AGCR%J zjOat^bKR!bVAHzWgy5Z267y19Cdb5Y>Rn|<1WK<`rkpB!#wRCa)ArFCsD?WNOm zf!rh@wGDovPAX&YhB}L($am}*!;!bx7;*}Cpx+P;ev00PHsJ{UDpaT;`h*&*9YL$= zD*h0@gr4HV+AK0J=V(8a5AsjtSXq?@6hT^)yvANX)#H^CDiZ2q1gZedWwwNTGeWgcUR5YbZ z9#P&aOevjDR5OY296kVvP%QirVsr|= zuk9FBzg$bvo@whKRqKSK^=!Qj9tNm>S6=`N`aOLSaqAr@XYBSfv=9G<#iK2FJnTbu zG#Ltr4ceseSsV&Y2(4UA=!(?EC1AAtf8jBiLso5zT|&A}E>#w_(}n zj9!S@lpA`rxGqNvX=1k+Ck!Yb#b~3dB$FTD0MSe?LazviUIInvvHDfj1Dsm4+62{V z51P#R_RnaOh)_ z7a!7>na9Ly`)#%|%x90Zq=%uVpXMFx13jtcW7m0Ex#L^qJYJixluPj~@^82VZjkQ? zIk-5zM%`*Q}!ku&8}eqstc~h_K-@r4}s8e zDI94H9*TF39``C(!)*r}f@}!oc;!K82wzrD=@Md`4A3}|MPAmPz&3STb?FIe6p{}u z%3e5=C*%e74sRzvX>(LRIgG!gKH$&r31SJKK%0m}tR8J8TCq~Ng*cMtq4iL$lq1ZB z-b$rH7Vt<_@Yw&KsY^%(2`RmBQm94lQl2r%#%jg6UdL8+Uv_WY`KYk3A;*XF@ zG#_umFQcXAa3a^dZSF^x*hFO(*%yDw@5Eo?j5H+H%j?p-SSs7a*W$Y5FgheIJEb+{ z8b2+55i|Kr=$;gfe}e#V55Ix)L<#J|N$c4Cd zl(sRmNDGbVDToKQ=nCD8+_%n~zSHH_B*;x2YR~m`qa$|7!=RXFZCr;xk>7ApesDJEy3N0J_i2_;t$t$s@^$?L zKw1Qzr+3kVcriUs?~$prXxbw`Il7qss5j1)C?q;MyfX^1v|T7BvdoY5FL(tv0!q#v z1k+AASNz$f)5c)mnWEg|fc8M`&?AkVUDSUe@vwuUP=a|xH4)pUSbY(120y?kybQ81 z4;)RjV_zYf5IB!M;ej|L(CMia`vbZ1g!oe*l0Onpp#vHaZEURR$TY_G<9()F^g1r1 zd1xUjqXZmQ%WHY=xtTcI+!C1elX)xDt^G6(7;0J#H2 z5gl3!M5&G1kcz15$cb7>H=?CPJI#Vu_;=;Gwjlpd7R7OSTly}JgJ?N`UDZ4A+xSnU z22VjJ5z1f{0$WW{3~r{7XQo8?E?gh_Bn^b}Ld)WEs9xs94Rt`yhT^n0@C)d`=u!AKSLY_$#GB&|4>R2BKcFLTX+C&sGM2{ zL}^(q6L+L^wMD#zuB$JI4KxmKAttaBY!vOrjQfI4YFSW*{LomtM@od93XToKiVn~R z>WrQSb*VON7CJT9Q3ByY@6-2*`{W&Z1iT}js6Vwm<2M)aXIKLI9sdS9(2vkKT%dPA zBU+07P#Myi_*CU#fa3(QGhjzvNgUpX)WFC1f_eZoK=bMW>VsnSLv&Fb1ef_TF*`)@ ziC`hrOr_{OmK++ecx;3IM0V9c51aF04bD8ZVDRfl#N+39N7^g^Mx3E?*($!F$$0ma$HAB%Q+A zOg>68XPWX@#1fB9Fo$|O`War;8;pz4u~<0{A%Jz`;g-AR0iwek4X@%8x(hlHTJ(pW7=iHMp7=nOr&ah6 zSX1J}YL!=(RHr%tO{x#5blAb-bT37)F?c3*gj?`MbQ>>HuAt$e5t)(_Li6C2bQP;G zSYaoYDPKnpgHNT!z*}Q2c#y)nq_@m0mc$M-9J$ZDLEn?7@F=>gyWt*aS5Jhejg_rH z#Y%_D>UWhrv{4Tbnb;LNjtrPO=$Dj}Sw#}4Qg9pDQPaV&3TY$qgt{m^l&_1;!WFev z?ADu98MNsx`5h<|Udtc(Tfz-tgCCNg2@}vyd4h7n-xxdngdAmxA(>!hpB@z&mxe_= zG@@UZ3JtD*A8thVWCMi@`EoNz5$7-f#)&nok(wfo%wMSy$74&P?U!Q@zi-Xd5IjnJ zum0rcgc5#|m&Hl`hc+P1KvAF`IfSCn2Edo14~ICdMy^0Iz`9XaQ;=n2 zr55DA{vPUqk_`?x3?*T87>-)7GVC_$LE5o-coMmVO~WVT6Re%NL+#QWvxPL%EOZT- zgiiHb{UH>gtb%=RM&1Z4ac{-^AZzS-7L={O))JxT%3bY5t5-DWGMLiS;V#gpN8z6U zVfuuJqrd1nqbfUT5&Fq2(+yYylc&5vp9c-S=Im|2D9ElXckW3Gf7R2b6@+SuTcFMC zB%j!SnnxY4?N9BG9F&=}P0?_uoVa~PTnSTqCbNg6_1Vzw6Yg(VU58K*&^2kW2h7*!xm1zvkuy}$PZQ#JSX3XqhKnKF2;K-fdN;&`>`j_ zl@^-w^g(jSjwiw2&`A6W@(vx+DI{BFbz1l;{RlaPOPmtgI2VFhzWVbnrO&s4KTr$J zV??Lpn&pl|cGTK39CK{8?G~BBPEZ?!!)&83Q-$U|L%k}*f50~^+xVD$(UL)5wkxWS zd=nIvX*U;`a(BA#`+&R5SLsu{X}%+WneRsMNgz>r7u1Losn6ykS#y`|9e$I|MPl(B z)rs8ZW)zMK=UTO1{vp``8ZA}S74rwncVdj?;7meLo8VEYRUMG(r4OMpX~Ay`)dl70bcgzuUP!ph|m7zQ0h}01(l=q}msX#7~f%p>?$v1Qbzgl`X1WTaw4oD(xPFV%M1$OeMB#dWH~K4z-HR zTile>nr%I#Gpt)kBfX(4!#&cmOlcpan_yVGr9A?Lpi~>yi@^kF*4wm);00(k)VdY0 zt!#sr!gr-NU=xx9%YNg(0t|{OqeLz0#(YEp*um~XIUs_)0oR(pvL0lI&5+6vEr?3P zd;*uJg@^XBX6>nI5cAM!CVALs`UllUzk^cD_4JhOlDWj5Xn%^~_HjQz z)_&jiB_H4WJ$Z8TxXX8P5~Df%18}oe2X(>Y*lVcIT#s+to?0@Pa65q=m|kli&>YdC zJ?006M(&vFkZQOeaHKp!K0_{<@~Lz*-*m!XMVdYPTYW+8j3zo#b?9$8b6JU0H))`jeDdFYA|uWFHFJ#p~!D5J|S7k;D!127H4^3Vnb!&QG~o z->vhLz_`yM-U!YiwPGq8j>fSM*;brlw+-}ED%5MeVu6qWM@aYRA^54ehkkE5ZxkJ=WWh%Wx;^MP8sSXsgk6t{6-sl~k}5cG0MMKh2GFthF58 zp=99+boi$|G`h|I20PyWNc4~Xmz``5zOh$Q<&HIbiY?E96CbQsC4fzMd&I}?e($Vr z-km0A_z%$~Ih)MJ>PVKHHC-bo*j*ECu*4~~jzIaZN>%V7_bXHyIkXV6vYD))I^agxnX>4VZHlBX-=eKd)gp(g2P zObYdq&ZJhzQNlyk!v(~1=^IoZm=;fhMS*_(8@FfKgW@haZ2h*_iya`|$_ckL8z?lG zeJ2?4j7$0MDR;LJ;qgJO;tZAt-$CDFGvFH9uB?F;`K$6!_#}4)GKDff6Nuv$d?(WT zU>tr`?s4Q2aWRw5r?Ky1I-LozBHHK35oz?7zgH;owfhG{3%*6DO{gPZ!)eqi8BaQ? z7uZK4N_}DA%xg*lzt5*}GUt+-xjT53;-aUBOo}n3v(eO5=OmkDi*imv`<5TUS{*vS z9AwvWv#%s&9b4APD3eB zBT)nA+8A;)Lb1J#$hi16tUQ9JzS(85lYHsU5L!I5XI=gw58`{~Up(LU_Hx>J3f#`; zm`0I%rX;3@Y%;Z>aU`Q>p!0@DvTEF#rQmz6Q}__91(iZLdJWWK`$!o+fF8vS6iPWJ#0#F3#xT>`6J!9Ytp~y_VUw#bZIvfkou%#c~>fh z66AN(JoM1epYu!=%mEQ@s)c%px6+AzC>2TzaE+W#wj=vw4;f2`Q?2Yh`o6i2l?t}M%HS4mTA6;j^6_xY%9&3;4 z0Ef($?9sBs3Hhi0u2AIn`Do#q{}sp)+L0x&0Y5<=;t@yzT}#A}r}Pc{GU>o_@mfSc z*Weq-5A{Br!@pCyLb=?up>{^XL;5wf2yPOcsw{Vkqgat5Tkqi+;X5|gF&r-755r!D zIdG(uU_tE6%H zDfCJDX!-%KTD?rCCEZqJ(#(xy7yX=o$RVPRc#MA`67_VvnU4nH!8Y!Rcsux5Iu*Ob z*U~#BRYKKkDlhR$yedkS&|~!py#n2v+2K>ML*{4XTyW zHMv|Gmy*OqN#LSI!5_hO24ejU;?2No_@}r;W+JzlYU-DTVfz`z+72I?WH}LjFXt+G z>Nhz}jZ>GzY2~|kU0l?C;yivCQpf{5*~C(fv`F8;7O87s6pfK-a4hG@`GyMc1BReA zv>Nf?rI;Jx@nO9QnLzI8m&ko&gSLETW9)uMU%Q+HO)l&I` zmZ{y=<3I%(3H`)&(6?9%woQ#-MNAnzhy_feVix+-n=G{XZhDva6#t6wIP^nt3Dx>1 zrAv4Xay?0*?m)cf30%xY()UppzC|Y>U-1;G3?VFs6i-Z>DQE#F@YgzOX~Bn_zbwx1 zOBbG6UtQ=R(k#tj8_(w+fPHr|cYOBEJ?mA@?g?4GX)r5Hzz;wzNPw5bWsMOl!~{tb zoJx@thsCOO>>gfbsxU7RU8dXEXW~#TMBVa~@)KT>7Y!b>3#DQa(j&;`n-%-d7QOjC z@vKSx;O`;6YK_z|p_l^XYS=XfgxzpdnYzOg(Pp|x?LeCRtIF2zcfR&Nw|{eT^y!B% zkGk^rrnANQAm%%q;b;nFLGdA;_exnINZpjKXg`%0c_MYm2CohcA*JIv=Z(Y0=GtW##_w#A;1}__r9ph1#H&K4r$&XBRvKP3>U(|*(8{)~= zhSvL&YZNbWGr>bXpL-E-@v`S;p!u9RZwqkexR@B6hJJ{5=sEbnH7xvCx!)}KS>pZipuUabPh3d82#0m7&DiHaOV%uvf)^R9#$zE@#bnL$4y&p>T93VG@5~2cK!;W#B zEWzBST_Vj!Go|68Eiv2@(PGBKPvJ%Oi;@cus$+)Jc%t4zs-Yq%5_zf#`k~gV^@1c& zt!#jPu3d?67jXD#)0xZr?T;)ve6%(pUV-9OigrR%mS|HlQD?1`L_C5klr*lCOHw=d zHlkRYVdlt(bPO8_&r>Dxj(!!qly=Dsuxjoiv(1!wk!WYb!8PI@_d$z0TM5qoA^eMs8vN=?0VNzo27trXLC#;iV_S-v zxfm7kB}%5X@B<-|CfuITy+4$@_s`Ei2WLlrhTN{RC0B+!%Qxw=Xgj`mc2!%5E;dKU zum9b6p(f5pJa)wCX}DMBwHc*Pc5BJ%lKcQfiv`LhB};lG$Eq)bh}_1P2XgRJ{vOjo zOzTBVwcM(A>#a(OeiKSHT$)B|A8b1Isf3GhPPhG8#B*fUM!PS=(OWgH@Bc3Re~14O z`1exp_Yh#@;LcHRj|F%>2!g|$if)9RH-h}pp^;ome&!*rV_yJRB zDAgZ@LD?ow3)6b5SjL_}8DWR!23x5kpFXhF2qVyzxx8dc;F`Z|)GS&WCxy_a6 z+jAG67Rmi?JJYK$Hje#j(rk~3MN=l?#hbJe!@pls$8aZjWJZW83uor&$5sLhXWWV% z^YPrMw8@yd>lQ2cJM*D8j9eDrC;YA!C22L&vEFs=Q1@UTAbHSX|`!+9-L+^ z^Y!T5LC<;d9{=BYC)xX5!pqYt^R9Fn`@s4t-WFGJ@qYYk=1N2ZfK1=HYVE*3%mM$3 ze>BkP-{Ca>7v&8XZKxSM9Zp=Pn@sPBUFtd!L) znGF51*-s6xMyf<4KcE4smnj;um;SZ9zD=1N(tYn6KcXt00)CxmkFHJ=k-r3{B_MJDFP5V{y zF0+EaAPsOh=g4Yg92G#4~0ZGmmizWnSr@N5P@oD^U`_(<#(wgXM+snEa12(DJB{qd40VkqYiEr>5qehoI@@&y|#(B@QZLf!S zO>fj5_<>fU+H_odqKhEW&`_G?1MQu7EUoGVVlP_`#e~(E-KOhdqlV(T7<#QW1qVV} z@Kdne(9#yP4$-Gv)vgKk>KxCAed5*7i11qc?!7M5o?iBTcV9X+JR*-5Ymgh5O?=y$ z#Y{NfTi5Je4v1y!CsZs$5D%#e!^gW7V!`F$Y$!97!7Zq#AsN1_2C!YI7rTNzhdk&s zBI|?Ze6-7!Y<-H?*yYf5yv&s!I{w$!(}$;)qcZufYn5$Qrk(fA4fXYx^XZ@$6 z+>*NvM1&ZcfIRjt(>H5wSQ|NRDZn2Q^@jJirO%=F!4as%dqIWWNpj)ojtuLEh+7b6 zdCc$Yfxs5m&j0dXldf|OO16lA1^E~9LmS2yk=sNy{*|sEQrWkrYTU)%6VvePzHMPQ zIPANu6z~TstJY|unyYqeA|FtCeb@N|KkMt3k^?L}FTEpgL8+E#a@=gU&#Sg22VeRjfU{!TliTvtyX@t4mg$hV=4 z@H_Njcy+|{u)>IZ=T2Cm^T??&4re<4#&p$43=|oj!Piila>eiD-*~?II^3_$GkxLb z-z45|@OfpN=_X#%GfX`kPC1Nj*CE}M2q{MFQlrJ|M4S4A{Yl6S&oay|>!xrv58k5= z#ph64s9U@%H3@T|N~uBZ@V1_U5Ar^JFnE_MGoE~u`A{#j-7tTmldQM(HF8gwGL+3! zp%|%9>X3N!iPny6tK(WbG^`oS1KKb+M9uk(nDXb2$LlFP*#nX1P4;(?5G6ROVu_gI z*ztdihrf&!(4q?-{}JpyZSuvrb51J)^4TT6EAWEL;lGAHa07C+kS<%4Drr{YpaxqEq8&)SiN^L{qxJC2A-z6v57gFUqHAh@P5G@9-MxJOmR05}K zrRV~DUr9$Bf~X<}n}c6u)W`_U$~WaZdP$&4zT?XXEC^41P1I}ga(F9EU+4>8HT63w zaLpteNbIBgm$%+m>i!-)@ukWEE{%|tKI?Zf&DLmpLp9jG=~2|Wrh#mvRI4Gz;AT9{ za6UKC75E5BfJVC)gMqB@GoltH6NB?i?h@?D$y!Sy0n4h`wPV< zt`T46NtMg{r|)DXuz&gq+v3t}Ux_+Hg&&h*iHCfZ5GQ7HZ{&I5GT1Y+2{HP&uuIfX z_=zLOx)EMWmRh^fPh_4xfu4qTL7V?^s8Y-iEW=LuKIlg9V4t??_WAcbPu$~yHBYh9 z7I2a=3Tu&xQIo^6gWfT1;*;o_?E#S-(P>9*Ohh?mw@zv0XoC1zb@(`*VC7OXJM2sh|_Q*v6u?Jiu)SGT^Ghf1;HkDITR0#sK1aJXccv#vCs-0t*0W1L>FXd zdx$NQhk1?NH&qz?H$T)S?{SMqSuJ&%239^h7jzdUxdnC}gHh?j<4 zcRDb|KBsITPIXHjQE1FV27H56FF2^#84W#aXrzjDm-zghl% zo1AoM^%m+p50f3;6sDYmzev|1m}b~)6(Vq0WMqi0s(N~{Sth^_xU%}cSbTJ6U1p*paG=- zPsbZBrGqI`97J`{sZ9EkgBf1Yo94;$JoXN{BE)G=GICRV$zH*RE(WYu|FIGEA}TE| zk{yZMP*zS2nl4^y3>r=UzC7QKoDuqiBD1=xzGQ;z!6bQTjx`F#uC z_D$0%P=@(2jhGWHJi(jCK^a*rIdr?4CqEztwS03HIb}HR5LQK%sOxZVuv2b1zZAF{ z$UX0nqq$F@$e4im3U#VUdY5`?An<0b(=UjZ{C58~DD$^l#`Jkhw60136U$BMG$Z9|E#x(XRxLJ#W>nAVj68nKp&|Vo9^5GLhC6 zOEvq_Ic>dXec@czKbjr7yGd+l0vI~EYL?M4|#JX*zQRT=d`$!-H`QV=P zclh_t#$>Nggf7W0y%VZ4@=QzWlG>)-(I(_+tyBIa6Ud@5kI{-$n}F#HB-6$G1HH%n zA((g4c830`Iw|p`o<@Nq|GWj&BmeqnDRHb{EP*)N7WWXK{0FW~TIJKASlL4_Ky274 zz2nTcr#LP-*UgoV5^TW|C*8$0&xDlwJK_B1*_YoL>Y#g*ex)7TanpEYx4qu+?xIWj zXp25v4WYZK2gSd0{;O5I_ou>?FE9N?vv|@%v@bE`-#&!RB(UOB>)`KtzJIU%*uGc3 zm*leVx2s+5FJy)uPW+$+HHYjKMfFI(B#xQ{J=$Dv8e}YN3wvtnHa%pwaTk4p)M9y{ z18$HWY2UR$sh_mykCI}4>EeaL>V!2l!L`CinU6R7}1kq(Wh6>G9jEitHkY0#egdDJM zI3#Rn++R*tib_m0+nw_4A9pUjOaW1C$u*Sn*Jfym$T@$*KRucDJUs0G-F%pMkbF{h za5n&c7ieX{uX-Vfgf2sK#3$&UwV7P8)>zBf`_?bkMK&?aXX~S#jw^CLO`kmw7mphL zESzm0z6(X4b%O7qT`XO%!T~;`^$-t3?VvjV3BczH>P-=bXMJ?EX|(ZP%-$({PIPk=sOr*}c8ky_0}$BcYjHdLpr$^j}{`x$WnkrstUS|TUO#c-~10e?_E#%(X(}w=X!1N*!{3r`y*yQtR1?~B>27q z{vgqF=P>=hTfILHtJM~NGcpF+$vW%``;>l6_nI^H0-6pz0vo&~Gz7kcW|(T-9sZV? zxcL48YOfD(BQ(n;r5`UnZXvy+R^rpTDD)9`y9g63l39M!l>alz+ zK#!tr>>VS0x5w`0;diB5qVE!lK}slgJhZO|?LQZ?c{((gDg zKYx4n_I$}T;eN_p_4x2OQLy*YefA7zf$6^eGU*}rP1)FIwvTd<2otH5;A5dy<*MM~ zE0i7~4Rxsw1|lknDzj6lBCeco@oB*k&w^4D^h(J}doW(4g|SXiT+iE)-mAgB(xF0j{2$4-w1C3>&~68S^~T`X$_4I&pfPz%1tZqbt^}=GAouGEQ|3FO&A)MOMbf85N5MKh$@KPv$Z7`;jaBSm8>}Z2CAqXRg*yXW~y&A5pH@ z7XLcda6))Fm*eDfsMP&Q=fx;^3%&-&py`I^EEt$wQC@%qBR4%6T9Dr=3!ySol3HOX zZg;Ih*c#fv?gJ5eiagK`jM;@$+g;Pour%9CTTIw8?z9eg88l_{=h?*ao%Q_xoL_G6 zKHp8ykNjWFUiez{WqaN~nb=#g9SNhhA2HS1XG_v~t`hi-cv@YLPi~3_?kV)Oav3KG z1&byI@d<1heu0*UYC+$Lk*z!?j`z5hqiTALzZQ|n+>U-5Y5S`@=8`olir2qe7el`w z%0Db@oW=N`duPvc@lxTnuoPfLXHb4qU)2FXYIl)a0(anTzV=XiXv7fQBY_rB2f&O1B@ z>J4uUTMQZ;-R4AFmh%*zvd(yWpqM}5Uf=oRpJQdnD^h8y-9AsBSZl%(u{b;7cViRB zAN~9paDz{$ZcIqQ`^1_`L3cuV%Dx-t zk6elFPx8&PVP~VVkw`fM|HqGi)K(4Yw>dC zhu(SY52xl`) zSg(Wv@KrAqT5`pmUq1hK`dl75Uo-(__F_8giHL|SCh{USxg*?hPV;N$)1LWIz_Wp{ zp=x>>PBcxCN7NJ*fwoeeDuWd$3br;<>MmU-b=~7lzioG4ctINE=cHmn0s0j{{ku zPu?xOL|CMppLHy4+k_(kO64faMvjkL~0pFfbJPI2G-NrkI3 z@Z!&Rq$0RLjG;SfCFKbD^fe_*-Uj_(QMdwH_#G|=dJ|}|C4f7TuPkd9M#G<)OB`-| zntcIH5woBa#^GDWROS*KFAPEPXUp99S>Ndj?{yEWvT&+qXddyBdR=G`k04FxvlJo$ z>o-d+(P{al(D+24TAA`S2W_I)KZOj43f+bz(c^S9mPwbv1ilVkMG$NmilGU#i7X`N zw0F4CHMM$aK-@LvH$IUJL9@}O8*Dbq>5ZmazI_dxfAiMM&wRPKtd6jDa@tbJrjY`3 zBv+uX{5itXdGERG`Q=V>|8%>&?z3>Q!#AP{!XSE2U13HLDlCh=cd@|9{-Y%7MZ$F4 zXza&-&RgzBLt=~R=J9K;L!Eet^vj3cX3brLx&2_#@rw?}J@O8U9Z9 z-tT01z<1BOj$I4G?G4uCus-6l1y`c66#kl!#eeqg2}%A1*~fjpE=2&vrly6!>ykxfe2=0;Js2;IZ84nDLjHlh7cHZx9;SSEd+9+Ra+5)@I6;u7i zx(kn;-y)}|r3*=lO#S~9y?sa&4g2;#JG1k)J3IU8uIrknm)_p`)t^2-`YjA23MEOR zD2z~&BoU=ZLQxDOltM|wFbpXYLlMPL#88w%6vLjRUw-q}%S$i4d|mhbZD!|fXZD%r zZ~szvXU_9Hj^lGAGoN@{br(B6*=)Q6c zszbgAcfmfoT4)Tu4-fisLuw1pR=-BC$S=(Y+xcLDsy+0_Y(3F8Bm z+tQ>TH&4g(l8G_9K({7|P62l1OH-y$P7eZ@E7huDs)!$ zXH$j2r@>-K<5tB6?)U5H1>Jj|>x;4&0Bd96k0ux0fDY55I8cpaa~X z@d2I}+i%P;6vWg)dQBQNE~&i^|4>+RrJ+0YnEnoSO~8A8hn*l( zd;;mZ1Tg-YekXCmc92qWwjuS_zs#}M{@Lh&qtB#bb=qH3kE#N$ICoDzp_$xxK zbdBdd_agX#$qUzn-%`6wEmbVB;aZI(+2a?r>1RJA{)ih-o;25=DJI5ZFVkt7yuBSd zXY*)p;_o+`7hUClSMc8)HXLE6wUuZY(yyJRM$sbgad?L-57eSkk5O6uXEMRO8$IwGuW?-E9?z`&glIPX8bOIrF=GOM94%AiZpOjolh-?~LF`1$-3W^81Ut`kaP87J z?xiNE_+c5+6&VlJM2A6SJJ zLJ#pJaTdM|ofk(H6~Up%MZ1X}+kN6H-Mw+p;mqA1h2D7Ng$22uIGRC6iXNAMYhQ06)G%_eVblW<%DXAiKBJg0&ZN+z^4N$90Ygncx!YP5&poL2fNC*+R zNo1+Ns0iIIp02@^Gx8*SPLX#w6)68bu-CWM^gl19%D-Qv4JxmlzxrQW*{kPC+tUA+ z1~IV}UIfTL&Uan*{XYB&WUI%Q3q-So_m7`KLu8oI>`=mggw_C$-g@A$3gtjaBKpB-|}XdhYz5C~(F zz~AnxOs2>0%H-lbzc7KTkJ*-AZ*wuVR<*5G^TxvRi|WDS8ZPCp=EG-)1%E!^dJeNy zZNg8YjQEHwYu-gcbY9k=8-+WZUJA0Xu)=q-sceVDGxczR;s_g7Efd9BQUw@_gsa3k zPl+(%COuB(wR;9{XKq`Y@x*vttj#zUI}bf3=R=R8CEl^XTl$9Yiej6&rdb15_3N5h z^r8L^vw`T`7s4h-l?(LDJ2vS>?*{;8&f`hIu&PsbU@TycFae%(-JmnQfOAgy+*^~# zBEA3KPSVGBrGJNu;$H+`AY)E8H0gQjE|LAzkN9e;KDx^NjFwA@yhWM|rn5y}yZ=JK z?H&_{15R}nU^Fh0=Zs6nDRr-*NRdJegKw3?#2w5|HtM(F4BaYw53&R%LwSK8&UODq zS$*Gir%@L@31D+rEjurR8ohc~_e5Jm3I+$VsZAEM(RAunWFi2{KEi2V8rvD1;cF=y zN^lkC^XL!T&loypEp8qE9wU2ZanET1JNi$8{qgb8KjZ$nlcmVLU_1sy-MSTZzR7A{ zFkH5-5f98=Af)}xwn6WF4J>#HczfJEC%+;!?nUHrJLHuTj^-iPIbXC~ zY>4bD>J>(C6s`d?;bBmO)*_;!Cs4-Md474n(iT@Q=nuXk=A=G?M$O7JEKOA1L1IvNT=9Z^I2R zRm-q8_?3T$KWD$-PdUmyZu9f|v&f=v!8C$8O)cgPve@z)p3;Ac{>FBpr{GV`7HrYo zC2K%Y;|M$wXF{asD&!6{sWu=m3aX9XeTj5uc|X$!?$<(ocu*=5rj(h|9YTcmG%4yU zvj3dnbK&ves*vUKg*Kf=&s%oeQ=t1Ad7H3c+=_XdFbb#*5B&S|_yJiUEV&o$b6 z45{p|vq^@B2?a^T#;$}fz>>b$JtX!xX5_PUf@2Vd`BqIL)^B;L$KxN`h7HqaDi!#}*Q`t|7L}mFn)Gk6d5DDT-0Q0tRH2i-wETx!@i$ zizLHGazgGqhahUdkxlarc$V2A_XkZeGkhjPGaKuRZ^n(WHxy}VyG#Zsj=qNq!~N2z z>y`YpxpvyhOHRGc7Wrx0)i;{?_&w!0^M}9^IDYK+em{76^xiHVZut70NO(AyEB$1g z*qdmR+KE4cAmRdBt=tZc$x1)VK2VG+8pIX2n;#at<&<+BO7czEvV4g(1F!HZFeRoy z_2Z8W>+kf7|6WM$%#6z+KG=IOXR_Bk7wXNoBy=`4gb~S zeQ?mnRRwz$U?dk$2d!8GI;pq^XUmgloo*aTu(oPh%aqwimYF0)ulfoj0f|&PNAkJM zSD-193AD*Xj?d9=@`g>4=an1y6U|rZ67D$qOvl@y)8Sx|voe}Ty+CWD_tA8;0d}Hh zY!aD3%h5MtKQtL=V;==ydj;jkAY(Z|AI3hjm1xW2lI85)BG!SQ3x5ZX4yyv=do72- z6Y}s}Aj3t=D%h&>y6m^ggL@Oc#WY#)1fOyu<~uzH4zNq~0J_R|s3H8D_)%3LtBr0? zTj08P-cvv?dG3MJ^k;k&Duv5b_2N6_74f220FOk!VySosG^@U#cmk&>o1rB+yQ3F6 zz&rdfk1HnGyDFWOtKCIg(mqS##(kObLZV0gjLm=`rMy zbd1S>kgVy2Fr)eDdM|9a2i)(aEuUNe3c6u_6!VF=X-<(Ys~-E4`9^P=TPLl${kkk* z%*>h^boFrqFmBvozaU0`11otOy(OMi_vUGtYt27>T8dPK?itVHGg_bV6+BKhM)H*c zv(GQ`J>fd2o!?fOlnvyN3L>pUw^H_AhRdSAT-BijyVb?I5>79N4?IEX5<3SC0j0=& z*sMB_S;=xDiEPwe(>&J|>jt$f2^sdHHQEeMixjkvJ3a1C$7B$2wXj3}R_QW3CVSN! zGIuQ-Spqr?Z_p}RuQA=S6=y-8#v}+Mh@4dr^YCxrjw(fUAAW>?5*|Tg)Gz*L@GhO< zC#fIq;=mhMN5b8x;CxMY?&GJgPS+3QxzwGH zl!-ZHscKaFOKZcrv^&guti^qae;2snhoVDtI^GEuktUfQlBw-OoOl}QQP{~PD8q17 z^OP9Sw*sFDh|W`Ngm&p*fNdllSSRF-iu|pf&}?hFjZgJo z<6EqDTXFJTV`5@6`O~ z9(Gq?)$?q9f?IvVI38afoF}2bF1Xcywftw^eS51~`PFAOmEjdu(wc9+bf!~<#||lm zR6&?fwBWtUz6gzUIQO`m!!AenF?S~33MZ=Vp1Lp?F7>8MM^u?u!_QI!jLkda z%M4NO6-8mVR%=4q4EOYj_;X!Oq)Caei_B*h59fzoahAY(xGr*sxkYqBYS}Y8AJ=Hh zFr?dR(0u(kd>1KKb;vpK9J~t7#&5}NyJs?G?wvRr*$I9PzjuA`CY-K0)yL`1YtBYT zC3nr=2CqoB@f@rjYr=Y_)oK8-xujGC`VJ)3umX%woYp9`&fa z+tmJ*zMpss>|6qSotf4;<%{?O>k9GRR;>7>oCG#~gBekSWkkdVUY_-Z-hJRVMEQ{`k-G1I2)mUa@i^eJbWld3Q<{$;og z%HS-%8SG8qv!)G90<8E|IgvfEqM1L6ZD$0Mk28!Wfgo&`3BT0ZX?wI zto@A?YM<)tiaPBmH3Ikpme3FCoZrIDgkH&4ARqckxv!w{C-f|MA@Do=nyC!+M=o&{ zj1U2RP2myuqNg~p=0*f(XjAb}>QY{WB;pf9$NE+0;b`ra9yhK7OyS9(ALpi52 zo`b;1VLklCU#NKtr>Rni-{_v4_iBcp@Ux0n)C=x5yH4#zi@7fBo+4MbufC1t#84r< zCjO+189GWho$(c(Fz?3>K$WE9C z#vxP}FKKnj-(nYxduQT#J4w42m_^TTPjdLVZxt9~65uD`rgRe-rzfNl`W}@X=?HxS zlDR2lO1w-Y!ELCh{wQ={3)GtUh-nDxMEO$-&I%x&4Uqq6M1(a%ALvO%1N;uU(u=O`(s-dm{eQbXvntm!`$rVW>fPbN#;Wz|(nr?KfR*=ggqpVbnl@~f)XAnm&2^^Ftko@1l<8ja0H&B zlJFbOMSGb%xYGTc1p|w|4AMI?wgYLc9 z7wG)i7qN>r{!Av4X-;x=L|<(e*gN*VY_C!05AUPLd@}Tbm~+W{8#Frc#<*1TThmY+gB%$)q6F*#`lSz2 zUbKm|MOs*1RuvQ33}vaf4etXPieWi#{F}WNP7W5Z-via$1mk3iBIPnKL5KDsWhq+& z`8LHzzIy)%=L{9f6Ic^{2`CHwW{&B5K|$byJMb}AN}QKTEAuK$p@YvuRnblLTWC$& zL$s;&y03~%0-^fBPi`~yGQ8=w$Z!6~(hR)j=A~g*p0`7~?CaMf;JcU|{V0}eSZB^b zdBMS;$V_|9(Gt2y_EX9EIbbEytgwoyG6VA+@KiMmTg(>X`&q&4Ia`tRDyAsulA<|g zz;Ok*{r7-fIyP^Ebot?D`dXmbyBnyXAG)6srts_;k!-Vdo&BQydghmMUVojvf(|%k zb-=mgnF1=jC2?sGo7fb$LbRX3s1hvM-sS5%&OMfnnUkTzGRK1b%IP|@OaIJ5;TtVEWR3R|2=8aj*P#2cA1nl>q1be#sm2>>KkSjhNRwXd! z^%m@CB$?jg0hugV6CDfZLJ#>-43~-xSKzzx7YvKGiwPC@ zVtj$;3pTPdL9@^hc#bu5*_J(gEXiYS{^MMVV0)Q*RV~Jk z`?v6$f2uvj>+S3Jk9OCr+}z;}Wj5CbJytrSPh{rRvO%bj^ zX2HoCrGDl+m&z6TQ>f8Uy(o2A>gv_~h&YaU1B z>cN1sVZVC+({c7upR--wSXM(9*j(-2 zn`Bx-P_+4+L<+ZMMDStVEkieUq`wsHQ+I{0fkpI7HVe2LF46gb>DULlCc{n38qy=Z3BbfvV>C?AMBiQ|rTTF52{jE;s$jE;` zEx>aGlI&7}gpRy`*Qs-neEg9#fiS^sY2I}$H04}z)duv=NjXtdYkLe8*&OBpq|n?P zYE{ZROz5uTj??0Q=McmPp{qnK_|^Q5Ota0$SWJLr49eC14lOIjU9agfFXHQG>I2O{ z8rOiWL|*+hgj6-Aql!%wjX_GzZAas=kTF!eRciosrxsCuee6z z9}t6yjfu_H#^fs96I%khqb-eWLd(A6aG3*i%=)NNZ$ww2)%N}>kFJ-#b8tcI8 zY<>z;7kNL?>mkB-Oo=jO=zuB<%>|v2ME0)C7Mqvdl$pY3;68JKvj@BAvS4%YGw?Q4 z5}N}(O1K}Fk6b@vJASSB{Cj1O{PV~EZ}FVp7(<_X9Epf3TlNH9%IwcgKUfPiUA=7Id;5_>b7&edw(VTbL{)^&n=Zer|EOZXH zhiBPts+3&~kzAon+7hEfZtipNjKc9DBjGW5*(g-Ui}u2+82*(2QbmEsgvZ%V*=EW;*IcROxM$;7PD z1U_=w9lqm$Px`pI<6ImJUzOq49yO_I0%x&e_8w5jo|DN<=U9nri~Q#5B0e!!TmbAq zui~yuO$;LW(GO@LB@?Ec%hWIDx~nKs;>j`BiowLU`c%`TsTn+v^5N%P9^EeU)Dk&K zbO3drgsei@s)xu!d=4+i*Rc`20o|8xiG%0|bO0NGlhAclFJy@+MIrsVmJwg6UbypE z;AFy4?0R!@oqp$L#5Vd9SS%5WDS3x|rg-DI#it+IeQzD{r^ZN{_X9Z~wc6Tr594pf zx9A70GW$=(2X1p}*QOJqX6*;yEN#P^kWK8WOqxv~O3*6x9i>nG|1{x3=7BgWy8v2c zlK1DBOzfL=$<$>|vi9rx%;V7nU5WER?AhD1gMTmXG#w=U^&_O)e~&d&O_ndJLR*7% z*6`Ri1gGocrFYPguq3SU1?)$DH|*d#xlQ_lXblVsU+I?cgd&fXoncW%xFwNn6`dnl zLygFykfobP=FYSmGLw%J)w;@LiO$pgw*O>*?YFu0$9lVi$#>1G`o+uYDT0m~v4zMT z{yTJ$HRFxocg(HM26M@KOd`@5ddtjmqk*|-Ged)wVikH{(T7eW-=G0Rhmv41*{iH3 zNOdRl6`POt$UJ{c62**YE&Y~X4&IP;+<%Is_eW+K23o`>%!l6ORcHUnOLl`_0FRpNIjg zOlZ`BAq!l6p!W+WFLu?y#p9GXzoIg^Az>xP_Ag2rxAeKL00Z__59FV6#xq61N0DA; z0nHXD(-HK@+OJ8_PieQLuV}OPB9~$Jcq?ej0|(!tOENbjQAogO;e!c)Zktz0 zGn%Gt4y*y?$BDiz&v|h)O;C;7=xrA~?w?qZa6{jWTsDnrX3!e#OUkdP^BaAixEa?A zFd?i*8bCjotX`HdwNqS&$HZ@nN77@tl_EF#E7}~Dn-d~XD2rNVYJ7bl8|v1|#1dN% z-eo(mRDD?*h>uYdtFCe)XpJE9EBfS`!s&5-)bcat&NOR_01=SN4Wxj z5zx*(<7*{-_&M{QD-Y?EV{CyT1DP}>nRif!#V4ew3YkyhlVCg3;JxF&6%w7FIjg@y zXka!J^ZdBF4m{G{Bd(Bbx-!J6*%TI)^XxI-qQLk9ZK<-(l%_B z?h1WZ7`As(KV9ceSAfgj2K53+$%LOG=`uKpCPpu6_42KMnoPles*05#l(oPZu*~L3 zd9DlLl7D{Kul_Ukccz#AryIN*x@}CxzsI*&TCLa5oFj~}=YeKoOYlIq`3%KvIg@|q zq$@ObyniynT(VQ@V|Kt;pt8pl$#2BxnzzJ}x;r|njAtJRh0H8dDrfo97&7ufY!T-b z4A_QEDan{7?3s=<*jZcyxgK)ue%Rl|SA{X?SYotUaD40=&7dC8Ex`gh!=^=(+|Oyx z=_A*C;ES_Yl;~vTxcoa&C`Pp78x~%j`|mvSR#JV+T|O;d{QWHa>(}~!CXOF%=$Hh@ zl=Oziq#E8%J>f?@>mhsiySG}i#5SC*BrpD9Jo_@{X7YE%jhL%}DX8D!qxsWLZ@xF* zbwSbSeP@dY)06G-KU80n4!obRoYRkH^M@j^zMUSdf-d`kbr-sy%cs02cxegzD zl4;oU=46I{>9`3lb1Q&eVO1G1{UFUQi5_m z`WR@9P6CZmu9O9S`-fJ6*|~1N9k_ScjZ@67_7`zihif~{M?^yGwys8h zLtlj*t8qZi^@L#H{^=}L8w8yz_|MRFT_b*1fs;=IE8-6_IUH3~q~rXrX6uDw>6r zscgVS*c~b1d$|Jom5&I0am;$_=%6oCwIf|O8w~?7=i+8GZ8D>73ElJDXY-Gp_Qy>7 z(V{%F2{B!UQJgRhE3DYIl%dE1;-wj7e)Kx}1Kh+Kp>aG1YQRm(FG?FCgqOi}dn)~2 z&IvU*FCDgV*Stf@QXm6+uFfJ02uqw>YmF<9dk4EM?fw+-<*CItZx@_Lu5@n+^M%5Y z8F>TDQ$Ha($qUMS)E6BQZ$e2j>2U-e;L6e4!43Hdkw9BNC$75bujAbkY;g0~{AcG7QiUpToaCAoj9-piDaeXNVR2MswW zs?uZiv`3pm77LE-r(Uw%O}w6(jhu@UT{541KX{tz*x#QGr?`6fqi{iJkp1Nj`dgWI z9xUdYRQtckv%mj)_Pjs2`oD8zuSltPMX(%yJ-&bZLOcJjdQ8>Z2Q`AhvESHGs&9c9y>hLhKiQhPxZ7jNVc7VK1;`&8n;< zWBOs=cg5_!SJ^ZnNzhXveE0nHz)j;6=hJk(#xW+?$w_eM5YcP`d9Irv5%U0ROqO-?B5dU+(DJet>;F{cih? z`Az$A16ZGaO661LXwtA6#YNQyH7e?Zbl`=YM_+K3`k&ahoP}JLBPesuBjCxx9n4=&apw^h0x8bVJdPC zvnz*@9z=)SfYYTPFc{vDmYLg3AzQ$}To=`#($hm{^RSyqw-YaEr_bI3FX`Hp*~ z7G*y62<_tsmFJJ9+06C)qwMYMjcdWtJs3`9%myB5j(aIzR&3@MihlAA*A6}xo{1Uq z6E!t{2A?=P7q?~ll<)wu#(ed*BYE4^L2!-yJNQ4kwZ+}7|G5~<{ihv&M_o)fz$gDb z5|@>7C%MLSa7I#;>Ym7y4#xR}y6!XiTBMuQnsEX$#Wz_!>h+{Wwo5k?e9w>g=6$z( z>-JHh`J@IJrbeUnit3^jKYDN2!6OW z(RSlg8je=@?SULuo$Imp-s!_gr>{lkvgu=T)L+kBF+Dw-YrAFh#XTXaWVaJ2-+}Eu zwYT;3oct8k3%%hX&<4a~J@}5=qMOug8ZThKjQ50#>c`#>g6PlnTmd?~bFwpdP4Q zlF5HBO*LV?CdYn`-Sec`H-THu9_0$x%C$;!d^gvn1c8Ub13b;qF4j9{olCUOSq*%r zt-1;zKRM0NlTw>nue*^p8k#q599MFyo*d76p*#2sGV?b4D6*o-1Xk3m%2b6LoMZdB z(XfSn={1IHjuX5PC7k3K?A%6tR@{`fIi&;aHka~Fc?O9W3;xV-EpAZ%xg45V8;M_V zjs355H54@Sum6N-^`{C8o0wPVA&{XNyRJ7rF%(VWl`C0r! zAjx*kc@L_vXSmnh^hx#cz0=@!)9#c<+PrQ^^MR>PVy;=;sfCK3*tL*ZR`Tm8Bg;}B z{jDL7=ZpJ*hWs{hS!x7(@E7V?jU{G5KNOoAv#!w#mtGX~IK0Js&JSd_v{+il@_l=uP zZ0jBq^Nub0qc-MEZ1366&@+=y=E>G8TA3u(k7x?qie>X#&@J(p8&TQB4b?XKRI(vi z{$~Pz_{cwXnsl0^==Qf+?D&lB@tGuj`I!W8Nte&T;1l+M-J`G5W*_0Tx*bPH{>3AR zxB99T?U6_DTe%PF1~G;9XiCY8gbl&R$?|4e7kuS? z5MA|MQ8$Qh)Qwm*nT}1z-6aMR6XVhhFB2MQxAy9vbjY|~@Yics)|Lkz@Hc6BT-I-l z^T9#%x|}AuPl5bCd0ANuJ zMjMHj*fL=?X29dxWd#Vu1Hbs^;zj0#cpN@2W^vZY2i7j%P%f)8#7ff@^{AGxTvvQD z_4(K2&(>qAefRMZ<^_))L_6p#xDFXcDeV8{b6=wc${*04RH`Zv$4!Z7qIt!*LyX7l zDyP-Qif8idunF9853}bT1MVDZ$e9M*q)b3v51usk<>iY4FHq)Z}yU$#{a>*_BRLiDWgXZdQj2#SF5-O3BE>`S9-I}qgWsoN^n%QcNM=6s-`QOD zqujkyAhpU}T@ND<;D+b`@=kGE+>6%wbE$`c@AiG}soNqZ@{ge^(61X)+hZBi0-+f0BOp~Ja!*?nT0tJT8-q08>73R>;hK~p z{L8-!ZHX}hXD5Rxhq_gjL z3QjG%z~2Zpcl1&HLi}Yk87ziuV;kwj%T>d-SQB@3xO)% zujpjBT2lx=(U0mLsE+l+&>MU`ny*X`-&16Vrov8TX0X--DxP6^#JX1>eSBErc;{+4 zWW!H=Yuv6-F5Z?lG(Etrvk98MGuzg9j52mG6^d%Qh1rue?pJcoE{86L_vm_Hj^_Ca zxdp|dv+)hqEn#j@D4@@0y0rF$c z<2d=qa8LNIN(~h8Ak`DFvODypkVEM9%&|_dFVxA^(M9TKk}iIl=t~x@WZaK4o5+^I z9KInv@aFsW9s8~vSG!x}S^_yF5>1o8aZ}0;Le{FHlu*MA!_|@*Tf#kfyk?$cNCqD^ z=)gSUsqzYV4!)_#=ATPPp5@?ecbdb`Ot=crb*=`rVgNsY-j#W10Jfln(KN$Hep>y8 zeJ;1zmec*=4*Fi0_jQ4@fd=Jy1s`-OuXxg^ds4gayXFP(lU&yTC`mjAzJl+;^P&%b zq%a#=H_)6d+ ze@&VWcL?u%kHY6Ywf?Lq75EhY0cp>Wl4j%6{!0&cS#Pi=U_H(c{e~=Z1tN(&OnY?poa~J_PrgWA5eIc2 ze0Rhy$D>2W4jt{=uO45aF1R!Bf@oUoplLT|H6a!K7~_#>U>S&KrlXGqT&CHK zNrREMstOP{6l;czb2>ynt|7r8^oP5PJvwf)?*{Tt&Pi@66|gEGq#N2c{8HUF{EG2M zpX=0~OrhBM((xkv!x68nWC}KD1iC2HA@jkyg%9DR(0!Tfw@PnE6Zl)&1?-1$+teo$9*(eeaub?@Z!5lvjQpm3 ziskVg=u5fXc1+n6nT-}AdElZZNApZot6PQ}(3L0*lm z9?Ch0%h4mgC~{jlFZX7S;OUAKWiGJ66HqhP3ceL(!iTskVZ1sDa|s;GUG_hvvRT0Q zEq0dQ{@>;^x6-=)dzz#E^ic?9rWOqzy|I6BQhy%+=iRBgFUU(>Ud${~X8ahwgpImN+25|)9wc1g z$$=iTYnV(rBbUiM6CRVPu8dXlj;! zkUJQo?JAj+jP&AH;cRSMwBoD&A@GU+n0lgk9(=358@-3Ug3IvF;8%60Oe-73t${^p z-J22c@GJfdbW!S85*nD>#+vWvew?egSg) z`Rrs^M>`{a$s*o^cfsort!|WCo`WhJF7&|D ze`-?d-4D;4SN@3Gw^53BF=A*%?wqX&yqAJ}ytJw)RM3hq$bB>(WyvDt5;+>(LtA7I zQnu`@hzFjzA=N?Xys-fsjrnM}t;@6RLSwPd{Cg_$Fr9XuX4(beqGwFi38WztB;&6} z-yJM_Q(doiD;2^CrSnONx;*}+83XGc4e?sIs8T#N4*5W~-uHFCcmEO+I_gERaWX+eA=7R<_|SKt1LW)etYejFtc;K$*Nla@$7c zahyHXla{7!N}Ob$V@=-MfwItf`<7JZ&A={+ZaK>`!d$~{xXOk3_AFI-d8f+iRfy((*0j8bwd`KPEvCqTP$VINp@)Vi26TSldF6sbt~ag&q6C-500Chg_oi65YkRju$lq!e`kuOSxrN+*anyjOy$)Q;~ONb(zGJO0REGA*mG$1KwT zac6%t)OuL`Ppy+Yl9dz36AE(-V^>1vSUb94E46N#pC>-ir&tR$cgW|_V)&ZtcX;+h zCZbV;P73%XZ7S{&7o~RmGti|dL8cXnXeC^N#rz-%ys-n}_s(DL%y6l15%|Fl$=%Uq{!ww=-|i*w3x33Q zSyg5#iQiQgnpkNUs)bUeN!5ACMm|&369bw-q)QD;@087Kg`j8q!qxOFQ|3AjCm-MU z{s^v~wyS8$Ci_39WQMLzYEqOdyTm!I8*SFxVoHz&6Dt#a(m0UYmRSWsD#+0CXRus_ z%RQ@tN>U^c6^eA|F1D$dfg52`&YoPgQ~r;qHK(t+CErtg984xJ=)QcGO zl-=j_+zRIo*G8@dVfJ(ArLRi*?XAZd?k?Vmuo8(5@=)ZX+;a1YFp9mZCAbHUN0+cp zG?{ow=7SfECG@E386*4nqRq-ZnZT6B7!^-NEPRUyvgZvH^co#SK2mD&&B;A)%4y?K zAvfp%Rh5x_5+U+2UQ3E?_&L5%(nSH;k@y_|*mIys?!kPH9?=u#RLr53!nn)h zS`5scU{Im=xw$=BakkJnVL3Rv1psGWcn8pLJ|_5468#(CjR+*zBQN+OYCO6?Gt#5T z6xSCy3fFT-vg_(Iv@a&9J#tTSmHHOkg4v*Zie|7uZVJAn81)kzOpgYBMAXa_zbswm zeuNedT%JeH_+PSzNw+J7|bJ#})lv!xN6%v6aj62$U zBpU-M&Bk5IuOdz_3iiVU_tYVM0y^{TCBlSf6?-P;;A7}Gwhg@{mw_zH1U3?@HZ!W5 z)?x0ks)AbJzOx&QDN-bN6!06mN@!2O`?i2|QtFw(~`aGC?*^4(uN#o<=(B0y7D)i(f-VM>!6 zw`lns_u=dwTyu8ov5KXX<+PN@$l=Z^Uw8A z$Nmk`>Gxrs5`HFCYf1+GRiSQ7dmDs^Cx=a;jBWF2(YCm6KECqL2s2^7i(KNY>O|xw zVZu_0R20@NAfIAnudc2|XG4e7-_i5RYovt8TwhHJ1K``PMWNVni@JR}73g&5dF!It z{`=M-Q1Gv9OHa~B(pTMg+c6VQ_?@NU_f(;KJ2FZ=Vw3sw@Dh{4T=>5fy?sa&ZQuVt zJG1k&GyA;mYI^FamtNj>CrT(vQHWwFMHosUg;E%y6p9o^QAnXEh8RjAMWQHCD26CW zVT6(xhU72N+fz?XQ`cShadu|sX=mnleE$teSa)WQ`F!5**Gqa1Qg8{}JP-DNg5NN! zrP?a>-{U}|$PVap)@m@58v&-Ga;k>2sz{(VG+aGvSlcz3^ac!k5H$hC2^|YsFi|T?}uCN+8KT%kTfsw&OwOM0Smcc#Xn6lP|9JEIzKcQKkBnF0 z>O|kMo|M~ZeTmH9`*c>q8)cl_mLA8_;Ih~gGELut6&bz&gFxY4UwCZ)&hL`&y`8uG zfWJ@t5WNE}N-;6iOpmoYzWV~Y!!jn`pc-QoD z9_A+x`Aeb1&|`8}ZZw`SRGFq65AlZympIJgI0%Z|pLXv%FY3u)yZoo&<_K%c(3tqg zrd89p{e*gwEawY_a_DKe%g9O|YYsV!pEEB=-Jm&OS3e+mx>}gR5!MPf{(c)C{%7U) zwCBd}N#tHwiho78k9~@NU}l{s(C5^Sa2!tZZ*k9q?xQ57Fq}s}(h3t+jf2j#V+Fb= z&f##bj);6@v%#Hc2W`@&Q6{`o@5BnV4CM=)AQmBu>att~XGtG51$f0ynk**X;Ihi< zcfBRN%sg~=>=n4>t+Ft;mjwu|3^AkcFee(nnqOKjL&uG9pik}$o;q59FNa(0`#9$a z#j8etLL!Mcz7zH43?hr>#gl0BpWN`(?Kl72j@xZ@Wf!B(%fqBSrd=x7 zNOJr7%@C@D{5~$pHy12rZu%bR2AL1$5VW3lG zz(LuQZpL0IjncT*ueHWJ+PrR78Z|8`w``kOHNoOT(s3<2c$GWn+YVfhHiWw|ue$FD znuc86$2y6PgdO%VkrlWSA-O9@t5PO29Q`apkrSf84~qTjV{H{uVJ`MV_mQbm7=IP( z5M7}TyhUs=IMC;~fHfJC(Br@hQ;9z^&uM3f1^B$`!W`PBHV)_VlKM;T6Wg&LnhNKT zmsmSy@np*nJ)Pl_XjAYZ_CfHNZ=>0EufbuzZ1`yYf@20ue-l~JGJz539_TK=))MhS z^*Fg3YbH^)2tDm{M^7?tPo~mxgz7FtWc@|aW%22s$0a#$8?XE|gb0pa`4PTx1o7Lu zdB69=kJh@8TyHBjpguryfLmk*<+(bD6q@)7tWhNBG{Zxs!Y%|;iQxzr>(`%$ObM`g z=Wo;B4_z

gZ-Wf-E2pSeie1RC8z#T-bdbx#X^9t$q}o(VXxM*X*bvUL|}=$spP@ z9*fVcl#Ya^4Hu9xy$3Ih-qFs7rb4yShPM=MW8JDO7ilHHZuTbTlCP=_?69DQbEAF1 zuY4Zg9sNo4D;u_LYSw<)VlfpP`{7!=P25wPqKjg$P$#Bq6VfdrPZ6wn$WmOlQJ{0; zo{Mc3V4H`={CxC2H!ogL`(rM$S&;#i{$>nQr`dMa9-Ry?@PpAT@GUuM1d9|)Z`@7n zhux&h0{ZKZ%C@ma%K|eQ0WBj_m0rA%?L%M>CoS$g3UY@v-T~RcWZ;_`iNX3B-6cRf z{~?S*-=i70Aga_?E!|>4$E{Z>m$Am^M=s#`97t8Wf3mIaN`E)|C0Iwik%Nw>^q6fi z4x#;)T!bJyKv#Vua*cn+r?Cp3!dLP=LXDa!j#A)c;al17%t zdzCr5kDJxz{nlvE%lJ!$m5kN&Uge}|Dcje$HQQXmxS`1P7W!fw5$?k<`$#y+q%x10 zbHNkBL?Bb0W9GF4K21L^KE+#ge)$Vt=;y${rf~yAuX;LR)h5U1{Iza3xpG}U%>7Pa z!$K>qIoxCId89lz$L;&yFptAde<+;cm4o@dwg3V+R*#e>?l?ZCE@4hg0SvK6{5~(> zkAydlQF`7|aO|tu=d5x1Qygr0l5`4hn{XiG}L zC1L?fwY6y%EH|YYSi$Hv%?mhWVv>8rhqIB$W-m*gqxt3koDOr!7?IiS=+ zSfcI_JZlNCiDZ+*C5}gPOs6#05>zR}l zVN<;<2IbF+OKno$qCH4DN*Y?wHtdS=xW0|*$KS_Bb=3?Xc^@$aFu@e5k`&3S=D_cu zdxme)bt;XU1yAkItVgY7?7GV`uZ}`j$t4JKWg5moo;n5lWxXZOqN!p>>`Sy#{K9ob zx1x#B8;mJh0BDqMvCV%Mwea&M1|=+y?B}WH@h?!`c~;8<=>Q(C)%A*RwO-+gxX*7! zCAJk9Yp3)p>Sxf3WkBjBo1(yzu9tX%o<#n#anf77f}e_cL%)RE`(zOFRqd>46^AK? zQS~F~G!?6Dwk%H{e&XNGAhkcZUC25AoI|9*uI-%!r~Nck{%195D?a%@s$(jdbTJX3->q)&C&@{%)Vix)Fw*);xCG|FZoCX4 z5mHwO=;?#F3?YEjWzywqmvm`jBis}!j(y^$!+tcKdraR%&LermqI6en(dvav&|M`p z7TbU>!Jo)IT|VW(Zz75KdFZmn0k7XG>sD0n!|=HXcX$rD8@X%pz}2P!8r9!3-jR#3 za`v7!<-5zTMJj?xL>?#dI~%Noo29QrL1Tj zHV5w@Te0L=hOU+k8Xic+R65~6OUx`J82-$>?*=%DoSK5BT=S_@}=gnO(uG)F+09|2>tw zl%4RutH<2gPedZ2<98GHdUNHUS#ReW5(CF=I7erNKN>hZkpj|qa~_otHze#B`MoMW zp+1z@OV*}LIwp(_2~VUn>xxi@m1vLPLHW5> z7FuU79g&CozV<(5;gbDlO52fS8Tnd%wSV6T=UA|vRDR+2%3+p&_Rue8hF9@f zzB}T$tF(*E4pJI2hi|&%>@P4a*-J|$}k(t1IB%4bHW|r?% z6YZcfNydN@#acDavh(6?@kF3ZZVO)khJzO0kiU?5>U*QqvJm=1^$->4dE$)WyOwL% zj&0~h&QObjlqrRW9B%s5GmmH*)Fz9K|qACSe=HG ziCNBsE+2)Wd7)3fS#WmbNh_9z_~~Epl0KJ4kt>#u2F$>j09}@>;BUlI})MZlOv|?z;K$hP(4?(OlnI{6fFAlSky@tJJ+BRWFH>7$ zGF?l&(?6pJ_4C9v>La;=bJJ+?>rO&-%z>VvbF`(aGl>tH?~aQ`;2MO$;a(?@Fr zCM|=WORk}om?Sf44lp2xT{CgFk_L{wbJoSbMEZ@7Lj&^3qc{FsrqXvU_KkfaPpV5t z?drGP#t2A=2G4-XPp758^psw*fSn%6bG7n*^o%crwj8~(De_6j8M?vp#-@NtPM<#C za#?#wC$OXXp}nWP6^2VFMYS3)T66G4+ZOJltFUDXR&#-^tXyJn zf&XAD03IZ_jiNZa1QOE^nUs?&d-u?GL$G7@FOzfXeqL%{SOj zwioCH;*@bz*d^_OX5FRWlzdKj1Kz&}b;U?4#6$0;9QZ|aS-%uxl@|Rek<;EGjY>7q zO3I;8x^pc*@^-g;;}p^8&PY$ebF<2i6{lK~vf>5jB%N=|6o(8i4+~60gsS4g|wN@&=>Uu zj#8=IKq-Rijpb{Xg*;%xbqH4RNpxIZXDRUAXt%W^d2!puN=v!58+&h-`5yACe^$Z# z8SG{MT5usU=Jlh6fpfMc4Ky(6Z2mMp82$?0A-_nw#BFHY{)TvJ`eCy`!}J4TNxdTV@%Lk$Qjk-$`+<+K zFU&G`NjJf-m|I~mKQnscS1nxpl6BcyZ4)q)aY3Fz(t|Grr)S*P?J4rCc=@B5a9Z$@ z_EhLMHRE^f^Y$Wa+u9px)N+AOpiNlx4T0`Snrgwyge>G6@)GK^7SO*8s_i>SOYBB2 zdApQH2MsvMezib|kdSI0urK}Hp;aU<^HW4m>^xipw)E`&vuN?&;LhpD%YOuH^`ODh zrq)rFRv-Gw@s*snHd{KZls&^rnkn-W_%-lT$m&Di{oqve@sST+5*pzteT&qlYmKxC zW1;o%b?%P;hORDHK-`gA-~s)<@(AkD%_&w$(I;_@gwJ0EGtqIS!{Efef_=@txgl=I zyovQW>eNT}aorWF9&6StI2u{jJ@C~F*L;g%Is7RE7_(6#25eG_Hci&JA-!tA(MZpC)(4&xBM z;i%&BXp4VcPWI1-n1J7Vi!mKuS1P?XjS8O-=ceCV?#5rHG95fULx! zy2HQW=G6Bhgyd=Wb)TUElv5gwqwo;9N(Pk)!?VcZp=?86nYo!OPf#3|vLkPOT(vQ`vH)0b<@x@%-BQAfOvJ4vrQ zD3?SxyUNLLmP++G(dXybc6Zt~7i`=Z5x#?s##51Ez|4s)mw$k_qf5pG%xy2T{vbx| zlC*)|7G8+e>NBZj+wE`%TF(p8Q}64@)x9!rW$3xbucHK+IH8|3bi*~4G~Ihkr@;ZA zu-=R`l1~^_TLSLu0cM-O5w!%)LKVSe{ie95m161uM zRngX1F;~W22cP$^(D+f8oO4u(ws7avw`wc5D>NauBU>&?KWaOkP%5jA)sROUi46gF zM@3AEvtX~|zkyWHS^E_`m(WRGjbDrMrndiMP;oG|X*S_h0>I}}* z=D&{96-i&UY73|TNSomHxDAij*s(PR@+!NO-U$8#e z8jp7Z z=*3R^(qgOb#K67a@uSgbUgW*{jAxAQ*me7+fiONd%cf+iH|~{LFh7eUbazab1UK|p zUX{N=>(DQ?SU=7cYSe+11^Dc}qJQ7~v%-Ge?IpXT81RKR;kg>5_C(*SpV>|0G*tBW z{e-&;Q%Vf3UB3?v7|>Iq_C9H@qc+Gv;w6DUCU2 znAt7jp8V_B^Ka*GoOaLuvnMjUv~yqdWF#ec{(}C;hYuw^iMnB@kQJoWGr;Ov6HPq4 z8M=4i^Soxh2dj`%P_Icg=GrT)r|e~xyS7)BTjorAKdf4=hfw(OL0@3VGqS%OkqhgK2%(oX8%Za6uaKE~5U@!7x(RT@!aWA2H_@vSD$ z&~Ig@IQ+_81@DPJseHpD%T;TlkQmw#@M3he)KA6Qg^^@$ez9# zD>LxKDN?nZ#_t`QqS#~i9Cr*KSEBjq{AnaWDlM{ToQ(~l#b~2~X z@r<&RGvvMGyTL@%2Uybz=L=kr_l4VHn+l9XYN_%z)~*{9bMPXGGmgN`RFh?z|LR!V zo6xuK^nt6>aWE()?aS0=_@ea-(qZi~tUBhXUdNjCp2_E$1QV+&-5sl-V%UgYRWq<8 z{g}+)%S^wT$d&-9##4VOPB3eR6KW3hLN7-^BRf3H_6aciT^m%Um4|w()~TH!o~pBC z7O=1O;jh7z;j9K2vTy-p*Ct_>Ur>A4NmM59yi%Q*@pB z)99t%Xm?CIelW}Qj0Vypsh$SyI&(`ORQ>vD{Uf{>`;IOcZcA1}O?X==Q{OVViJ1E9 zf6|Xh#|AScBsGy$6L6Z`)>oltjl*n-{*2!hE()DI;)9t%OVIB-FMjn7A|>1dcmlLS zixdbawN0v@Y&4MIv~h~AlP9(;TKEvFW z@E-r+cC9}6b=q)bItkom}%wj*5&f8dt_$$_8TxzL#KiO&&N_@~kpu1QSezKV-n z8}vrnCkeE`?lkwsdEzQfv-T$j!te-mCUT9O>Ah5Gs@m?2!M}F*<&CQC5s$;u!taGo zfp^Va*LkwqR&8@ps-eV+V#6Ta+Geb?rP6+apzou*dItUlb{IVH$P@Tc`;5oPF{ ze+6^%dDII2S_3SgV20A_PVzH;_a9Fz<7kS?Q6@}ZjKA<)OOs)cd}6Byysk0JHZqPk z#O}y1rR&iTV879h))Na*y_pqOh%b>{Wjd72&4!g=pEwt8)qj(7$TFPLGo%|Tg$2y2 zf(aBnfP6%%IIrjk@xD~0J;0H}@F~ESduZ^QyMUADIH1U`N^1~kipe#e%UpZpSwuB` zfUcy?ITw>!Qwp&~dsdiLOTFEJ6o2ATdDs_ZBJbEbHi;_|v%)K6Ka-JE4~G(G<4p7o z=QOg2bHqHnLM$6Ra;~9-d7+F32KYJOWOO||7d{&s4hT9qjB59zSJYNv0pHa!EU5V= zG3Q*4WEe_4w<15;V&7A&TmE1kp*O6lwh`-yrNBH6tSobe0xkvIQ&%J7N~&^AapH|& zr@5jbM2M|JX7-vRul}@ePl+f0rNG8y-1*4@8cfG9W!lR4r!?MoGk8nu^IeWFkW2nk zVeU=1=_&&`N}A14tB4%ZG*T;aFYhBykf*&>OZ_Y6jg9o7GLjThb2Ir|g(Y zu_ar#;e~75_}Ki?w4)a3Gno|r!oh>k%dJzM(Sr&=zW0W{8&dS=foZwa;xJ(#f1d@M z^xw5)vR2L_N#zSN0Vlv~z-qdnO-pCAxo{@fqL(9Yl_JGX0yY5d3+>3opqsh{Q9P{! z-2(NcHm|mVHo_?Jkt_n+6Ux*}AjVdB0RIq`Sh5cn}4*@wWUvdYnnE}5!h6xkf=f+0_4 z6b|+J7PXfkkCsEi33G}2Mn16^n!z5ba-BH3@7`1%I2g zJ*zvkDNHgR&)aB&-xq<|`|KJwEzwdoigyhD4w?|=MPj-?)kY);*F;tLxYSKu7i z@6b77lYCuJL9VZe*+ER;4MRp>;5B%mZGv*eVC0rbj$t`^);sm zx3Mbas`)M1MUPlG_$>V{`cVDsbq3cDy$6=)vTqHuC^P0yh7c7re~2X+0C!fbJjg%j zi%#wgInb#5-=}e(jycmiWRIQoT;WcI?j0`0Qn+hK4<+u<)k-SPzJ<9Mh+t5lPKTz+#+lFVrx0RVA%#H=exEw;iRF@mjcLQyt`T{IAGo8a$Ui1)31eZ%B`?FaynAaxMEkLtnRHc z4c*XM;cc;;^on&LIa(x~KraPODo&1(8=)nfM;6Ry;4fqYIV8bZMU>ACPvvFS>%XMGHcm`eAPewFkKK$Mut7&frSiO+b!i{(Tdd5=H|g z96TsIyv^SKQ)WCJNld6WY#JUr8pNPMVaj1PP!HvJD#X5h>Bw|=W2cF2-d)0{Baa>L z>Dstg@gE#5w%g9HhRnEMh5^$ZbC>$WdK}zml7&lZg3ha76j$(P%z(Hn&Ibu}Pq>M# zV-qqkarhN^@u=r$fxUD1Bo+)jh0kzv*j4o!b`2XqAD|O}T1A+ zZ9K_5EoPYO!r4$>EIm?=Ulevhrz?$NrQxH>@aNF0P?MO&ujo?ba)VvDVETaECLP9o zD93UOOa(qDZlpn^wK{&9%h#8N3LFjcb=wFzuRX(`2S%i1@3Tl|#1kFVUjh5RG}Dx` z$XQ4DtasTw-D}TaVBSA{Fe8-)NTgQng0Ll23eg^T8AF%tbQ>I(T>Js|N#JC*r zm-4b0>+_S$*`v(Rsqppi6rU0;iBrPMyu(TpJI%dhUo(yVRX#f~6cf0YNV@WlTEmaq+igEx`|&f@(S#=5J*y*7 z2%p$Cg)_I2{atqWaLxErO)^(os-S+{5o_o2fx6LTUO=9j{H6v&v9TU6MO%BP*?kB)I=e3;58Qk>NoND`D6-4m+V3gK1gE|)LX2R~Zw3C|J>EVqnOqm*;M%C3MPv84)7G_HFcn^}78lx^BEI1$C#xfMLx^Y=Zu_vTI193GAzR2h7Qj zLo>R^{DRyS%n5#Bt{)=&gP@z6;eLr%xO2p)6mo&zkc`9^9=nq?W?qR;Mk~$rfL+q! zW0{^mBY!5nTiZ*JDR|bkO#ln_vE!Cp=Se)BDAise7sC|HdjzpDyc{i89;?$@2C77d z)b>zzpi4M=(27|i7Q6>^{x8x$v@v+xb`idpPylvkPpxedgtYVB{JeNv><}NTg^H{S zXh_S)(~u681Cyw2-Wz%zPEjV=Jm>=KVCrGFe>L1L$$=XEN9`H5K|eL0G2c&Ga8xAD z9m_YqwzX(ex(Uh3t!hh5w|+qyg);STqz|}L5>N!B|4&L~(te;e+~&@4t49y^XT^`f z26G8il77aarr%0GX(Q6=bf>Jfz&ZL}-cT>f-GHRJ6Fu|0(RcdagzaaMq2G(cTJ*Vi2b=`Y=(}`&&`-$0 zAYzi}QdRgBBeP}xPac+;^7_@!(O<|kqQIGW9&wYrPR`o1p>jta_&odZAIe2|QCG}d zR=wem+!XSWuQpHUczq?pGIiX?Nd93iKFf5)&6yJ{{C~=o)|7<+L%#KIMX&iAg0g$z z&>Ikbrz00U?=8*R1N#Zk4obF7;w@%I+DFdFzxYymT)rMJ7;CIq&K~q3oeL$RFI5_y zkTc;6p*ksR%k3Lm|GrriEZcyLSHtT`Ge&1(%3qb1xx{+>iX{W9!dT)4I)I(Re~6H- z(AySCa6k6sglT`0FeOrar*b^j6dg9ajh5J_fn8+LJg9s(EsF0@Nh4rbXF@&-2}&h< zFI=uVgN;&rM6iOBssVe`I*pesRdw~t@(E4wT#FJ zcUC&VSO5jB939px(g?B6W<#H(E+G|lNDg`c{zW~Zdh~PjD4?-4M&C%>q?PPO9$;lu zpV*6rm|Og+_AP9(&1kLGdUHLJO;-ZmWK|TAh**-m2Rz2x;tlO#bX?jDmxxesi^IZ= z%qaIIoEf{pxU{p;G-yd=h^Lz5OfeBjjel+0Cz88N-|Rl?D^n*`WO4G}vD16smh<)JCS=8?vmDmTQ6kSs$%;$(@>alH2-vsF39{m_nh@^{O z)KA_)W@q#Ke(Arv8}A~_&Lir$v}H$4owf~gr)kO1fUn?pV-~=BcmokC2_Ue54216c}Y8)mk^h+E}f^=&XDtpkE(yHQ66){Jel}&-;g7>K0-y7TX!Pd9x zyEu>ajG@ettrQW@qPOK-ZV7P1ouQscBX}O)_if3}$VI~d+-T2^YsVc)t>Fgh@ljL6 zFFy<1ww{FQor%s-K)M-KUs#;nTVQXkJaPtRe!C+VeyiHRkxF-|ryUs<(uldzpi$$H z@BjuxTa}91B|BaqK673{Y7;9h!|_tW1MALTxoC0x6Y&B8MSQ?5GVK$NI{(xL)_>>l zbM75@G&+qSxT;OjBgB+3Bkql3-d640fr^Nq%q4c5=?y#!cJb=YYyR=}Ij=MP%x%$i zMX#gzuwbB(SxY`(xaSfHmUqM;wMb!F$S}{JhJFeHNOmTics(C!Bwv`XB5x@3X(}{!x6;zF#H7F31_ z;3-)|DN8op?E+ro`1e%4>k3(7{AAdY9-_`rlIUdH*a^ukZHs-tnC@2y71N6KX?Pi| z(3#>i*%kSsbxJ*g2l*@#SdZk`1e3>S-#U zvnUU_d!ZoeXM9!&9jBV@C)IZIXtWeg3Kxol2fa+wR{vr8@6uiG!H)xfqtWt-a zU(6$>q_{H(LjFQNDd$X1^}9nwUmGlBo_b1q0~#zpB=DJplC?A5-so*#YS1gr`F>f; zxzCv|sG{TR>DQfT&RykP`nkwk%eUw@;)|YDi~N0&#)B8Y9+a~lG$BW>zi%1N9$QR$ zqm3ne`>i53{<#25aQ^M<>I>gz{JCfa_J#qc(>&yG$KTZ-kGC-AvBc16rds$Ix+YDE zj6%qn1~^tnmm=BnDP3*gP3WuG<9SQ;O1E*2tVJMv4FNf1_zZbg_tbbC{!Y7L2(tr# z5SZgee??chJIp)I&-Dn^au%T673n6(BK;n<1X?)bSfjcQSc%2j90b7^u^dVwr%i8- zA5FguiRKG%6_`V%s|i9f`;*@e?uSE6!(MfGdH1S&oTU%Jj9gqdml^zEzIDa&i>|b% znAYr=?YzluJq@oJUIsICS9Vvz(hlT)b})T#D*V9xN$)+XHG5@F-$*vc*3llroUT9d zlQA>?a>4`Ms_nUdRlXNZ^eT8s)T(PElerPVF1@Br(@zbwamOJbrl+*DTf85Z+I=zu=19aoHX zIORz5w^7OeDs1`wnSCLY=p}q@;nUu6@372zewx#jUe}B*&z_k$NbJRZmv4}Dfsbw>F|^K;iyd7;TvQH<}l6@XRICOvqrmPRmn14bX(<58@szLd*lBItoxuCON-t) zmZU$O@xf(DNKJpI>yAGe8HJ`IfanG_am9{wWGeMEXy>e_48b=Yjoz;@dHs=ldFAx_ zo87L}4fUye&Cv|E9J_6|S~1s*+HY!zl*OhZQMe33rs$8|rH5#<^*CH9lm${OX;HxgxNn&B)6 z5-n4ADaq>78cf5Hhq^DJo6#E38#^w4mUFctU9DQ8bLh*|1S%aQ?6Zw5v`ChTRcc7G zL|TyiNCU3OAIVBEuTCe1uscSNm}z(hQh4RD2JVgS1-}++5&DH9)-CU`lWMWj3ydH2 zL10%u>Wy6we*iy|&#zlwAoDKTbQO%@gXk;D5CpjptqZ(J33J~pe= zfYfq5vFmG)z#Y-OqW13u?H$3HgnP(0TP2-l8Z*vVwydCDmT(`R`zw>T*quzj=H@?e zg>patMdCz3s+I1pFKZpr?57&gkp*PG!>7u_yRlx@QgM2BNBc(^r%RiMym{mWacIXD&ty@(GkS~&l zHc6kItUkwa!*a>=()7guQV}4NSn4a)&_D~v2*4nwY@wU#ranZ@K^v|$?3}&Wd{()I zmHR&julcV3$qBtYOlHr7zbH4N-)U8Can%}U;@0E8=z%lB?AgYmB0qwhaiYM7F%4CF)v{hp{?jFZzXR7rnl1wT3O%Z9*rYhxoqSiBCkbk*od|d5v>M zAwy~GlcUa1Vn(emFp6g26M9NluB^vOxe*ZyF!GDQb=_UDLT|@Gr_NZWl^fbb8q6$J zC0S13S4<~jDG8SitogPvTYCl?vu~Nt92a6@cVp|&6FON5I-Uy^fGAi=yo|lmI+2g! z7>V(+p*@<3jS6iFrre3HuV{ zA?-z!G~7e{Xg=7|_QOx0erXF>ch<41re^tub&?&&9!O`^axGiyR>zbZ@VJ;{s8db@ zAMP_{6AJpv!U;zs`>D}M-;{1!`G4=ltF)@WVb8&KoT|ZUFEaY@RQjoqN1#W&TJcd1 zcUL^k$$A%b0Ublrloyaw=;SMvZyea=Do+$e_bCEvnW1fA7Nl9~2^X9W=6yUmYFv_9 z5K8{Q?;$8}C4Xr?dsZ3nL z-vTn)S-6UNg}$RsT3+a_jyW~i_!XSda->11hv(HE<&8p9eQ*+;XIzlxsKIua-k)s%;voQv+_^<3$5X zh+{l_sVXSEE*I(6()Ct#Reca!mQ(mNT@~xce@ZKWe{%zVZ)p|38RwWw+8Myv`WpLi zaDqC{zB6}G^LVA}rS7_w#7`SasLRG4grO&;5(qr;xOa-mcM0jS>Z6h9#l6cOJ5%=O zJ(3xo)J;N7(F;l)`;>hrX9yH=OTX`Iuok3ZNzJKGQvC4)2~WsjV^4HN&Gr_B`@P?e zoRRb4Ot~$#uH@{4$Nq<-7b1r>mOft&84ij_3{Tck!vjok{@8|LLZmam2~OQrP$)okfkGKq12 z2XEP1JV^JxwrQ6Y+jv=v1zD7A2c%lw@pNReJGyWZ{#L^AB&;lSx^E9LlIA|ozc9L3* zSxEQMC-F0|uu58&^ne`K&k+UWDg7H@;9bPCb&Yy8c161wOO$fqIXMS(kE-BqatBao zm(d-%5#OR7!MBm1jPluBPjJjP?o0R0fgbmczaH4RJ_{$6T8Y$_-eFi}o z-jlWP7M-WR3i{p^Q7DEfj_^M4US+_abY0LV{Zn-g{}{geq`?m1OBA~ z>J9wf)B;k76q*F4N@`q-0kWKNTJ(403N^^|9_C3BTgEYD1aw~R#m3|nu230ZFGuU6 z30@})c}&dX(6acF^Fsr%R>gx>NPA#A!qJ1sFVaIct67E~c1~vpYJ^wlu5{gXTAv7* zvG?M;6VG9zj;vT3y1*mKY-C@UXC@=tk)+Uv$ZT+f84f$RhmkgUG`gcJR}-}+oZuz= zo1CaK8E17J@gBpzW7+Z?Jz;#!2ele5ja>k5%MDSLD}>JR)rNL0+n9&_q&Bc>qy_5` zl68PEAyyJQu@3AEc~QtG2U(|D5*rh*skLA_e_Jl$%cDUE%r+3W=7{+qYphrWjVA1s zxy~_c_<9UHn=CJUb{S>v`CsUMgo5-%?XK}Mg#sV)2Kt#yhM(wfh|94@;nMKi@XNy> z*8%2k?fwD7xELbSs2y?Av>%~h6h5cCH7{b>#uVDG@6o?S9xJEy6`D)mpz9%qVFy)- zZ^8G;46z+4k@A(x>Xw=(%|W$MBz8|xq_6sSfOb=0c*#4Vm*NHPC)nR^0Pf8Oo1-~{ zwbArQZMa@u;_j*#$TU?!JIbe6DqJeg;G}%Z0Jc0-A8I!*q7z#O@3Il*mU-x(}g zrcjZ0NTPaPe;UuiMh(+=FWm;8rgy~S`g7c4{$_L;aEs4`5i~^_(|uMtp-#R6pA|mi zlHR3dQ+cr;B!r|J$MAGJ3wWiu%6qg$mlb6nX9(7h@h@VR@jCBB_~cQ+UOt=e8;%r-OW|oDK|;7qG+Vw*hA?0W zpf{y8eV*DYbrF7X!~6hFww$BZ3`@pq`YU9kh9aGOf_m@hI{WirU|){h-6_Mj7?xJZ z5H)Xo;JE0>On8~{ix~R5nsbuntcjTshC(lx_Q(RrNZ!z$I?A$@s<{@@nu-=XUP9BB zYp@HProY<1M}5ZegG7GTy|kICmTxRs+atBsE^-F$ria*cgbB4uYkZ5ashg7v^)I0X zsa2a}N~1f<>+qJnT|1f3;J8N@Ixp!zU}w-RS98QlwK zi~PdeA8v>DdC_uSv??9T4Gt7dxInV0?}DGE^%BMGHYj8K#! z3?(r{Q4~oOMG?hN6iE^z3PnjmQHm%MLy5vr@{+vtQvB(ur+&57b=SR{*}0$jAHRq7 zsC4(3V?Lkv`}L}k$4_sAn{n>jyjLm_)ZUDT2;O0g65cn`{#=;EG0gTkT1TX??g12 zvI&IwfiI$VVpRC7^_=FNeLg(=FKDamDF=J5Ojn(6PFNOt>Gyc4ebn+g(qSGrpJuI$ zNj*Q!Ub--DtU7P_ri|62l;b;RNjtX<$59sjQlQOUcnSN2y~30`w?x17)!!-h8W zB!BC8AI=EimRg0eui>RkHC=$4$#OWE`XkrSM_e*`LAb5hv=4HbepkJw4@hySCSEo- z!qN6&_CD*2tRu%A6w+QfbsiB!Tk6-Bh&smVTRF6`kN5%TNZC&+w5HOAJa;@Bk7ojg$Fu ziTYKdq@gpXne{Kny(G4yvtr!nd~}~zAb%YMIlEgq{VWs&PLOY6mw8>Cv-Kkd^cvY> zc+f$7MBA`EC3cDT5k-M&y7zP-JQ&ys0ep@U4D+fVWGmB21Q|o)&{c5%%fau1rf|YyfMP{v61_g$Q4srEg zx2(6%|M=H6)0k}+TG6}o4tYTd_*5GTXPFWcNQopItyg^=1gU9$jjF7(HcLv_HX~f#2dKqzUOm zJlIDSGy}Y4P`_*1XA76Q0U;I4f)nT$fYH!xd13Nkpr06aA`Se6@L5ifM8Ix|R#yO> z>>*Z;))So;o~p52H0Od1p$FM8w#eIX0tOVIp)73WA3uM1RC{s+Tu!-STLA0=`BCSH zvHS0#h@JEA;&0L^(aWKS=!=7N@6CT+?zy>Ym)}&ZgYRO*qqxKv+E(beqzd>2pU6-8 z9(f<~=D-^0r4I|O#&f_9zN}o;8z~NbYah2hw?su1!t?Ay5oBxmWRUV$KXYNZ{4n;( zm{#5cela8oMznk#{-Nh0ExOmVt-rEYkbP7#8zao)RlX-eO?ZcQ81K->`l7W(37Sjv zB(xij(tK#Ve3xldQtk5yZ|MWZ?$>ydR*v5D{nCG&{^91u(Lf9VDenNQje?W45^6}w zH~H}f`KC45y@D%eOX3%GLT=V~)os-gsDubNK{`WAYzk;T??=ucug^jJoW<@#jXB;M znn6B=Zn3@Ep9qDnVP3P##vt)l+)%59PhuKyet}U8up0T$CA}WWCfA59EFSPl?!(XY z4xt-~5|-f#5s<&ataLy8HW(D5d}U!=jOMGT?|Pv%+XC*I{%pUs;Z-V-uN!}xT4VMX@f|Ewu(O0GJ@A@ft z(wr`l#VUjq5^3r*3aLJ*6(ca45!;d90Zd7G?IG+-h}tdE&((rdeeXS2N^z0pWPM7*-D+fTj*Vs>Br zGymVX|74yGA8yNvP=wCYjg~L=y{KkKVI1VB|5tnDwqxsDK9pn|J9EkL#|@U>@l=fnyCM zk5P>;1?1N+mPc5OEy})R9(I5PB^wibf-{E`oZr3S%2O7-I^ed{NkrN=19`s!kZiVVYFYqg&igW8Q3-Uk%=x_EraE}&)3HKfCo25@#L@tUlxcBnm zb@1k~AwLWRjXQDyo{cq|dYLVg$NZIEp@xWh4464UTcU-#6KeD|^C$j4QV%yPzm-OX zBw(IzP^;P7*hyS_3=p$<%khH89`md2AfR(ZV+a38twROyNKsM23#x}knz5p4}UTstS ztn`E*h}Wg0@HkYU7oj}ejOLko$jfLkVBqyyT+jsb2<<}`u#4c?{8Jwz_oRMP70CbL zzQte(m*M(`tew2EJk$D3y8RN8;ryZfAd9tfrCRUgZ)*>@EI|oD!Cyfl@I0IlS~S|= zU*y;GhY_3q=STeFc`are>q1lbCug+(==e$CYv7)ksnrm7@hSU7OP{?uVhe0lCw+OC zw)4aP{Xf@_o_VjkGmNX@i?(d2BQDOgd7g@>HdWa!0y{y5J6fnZdvZ3fX9Z#{F3k?w zT{VoKJ~FzI))2VI`wjw$a(-ArUgOIKZ_YIO@grJ?$H3X!Vd=D`=r@@|&z!pVPp+rW zd-Lcuy5a**C&Xd9!Bi261mLoR6XGS9?A|vfvu0ok6JSN9ZX;yzsbFp%HSf!ZW_lB%ZRCrX*PEN zw#L%g5z_fjj*#t=eK$i5XSK>>?+zU6p;#hxcdZ94#8pBc6mK%cFt@?(bM-xB%$Uc(L8Ty23ye;PdCYjWI>;-XLJ4wF0L zj+V<#NE+6rzkvGDS4bL4frhpYH3A~%b-mbV0p#H#wG|yXZB+LEnRBy#{U`|@<Tn;5m1-j|t+QMPyMJvg}j!SU&qa+yEyCB3}x}$S#n2PXO-I8M#P}5{vlX zq866rVWZp#;yuVB;fKdC(V$R9dj*|nf5b|Bj(bXHYFk(x(QI5G+{QhmhJFGkM`RKY zEEUWobdSCyE+d=Ll-7>+>pkY@c%9{lnLt)deDH_ibzcmwpE|wG{zHF?=oNmUs8Pzk z!AnhbrY^n~qyJ6?f4Og*T$C4s0!bqiHk!$cShLvK3#M7h1K)+}en>^gTM> zv_>uA?{o(|E5|5}P-QS4yXmck%z=GXR`#??(-brjHH9IuGjwv)ZL^1Q(97sYga&=` zBI70SEjX~Foz{TsFl)crIC3R9-|O$37j47DTU)=FO?&`PKVNVcdK{dD3&dwi0#+WL zW;%r&=DX5JzcJpEGl)%n1h;rat|joy{S4g*{WjI(-{1yQu3*FF!1;NB+QIG4u?SaG zRE*;EM6H_3Z8gwm&{oieX0=2z2OjDfyC?k8=H?N5(6m?2RUIud&ft}}&v;k#)yQe) zqC=q)EgbQa{iEM9@5v2ttue0P$dJAOU4lB%OyIJ(30x$XhKx@wY0NCB2nox-$u2FB1(+zuu@S_RG($Sv58DmgtDZziBaN9 zaa{9?S@@iC0V{%s^m6>Uj+@fZQR|Y)LB3)W&$6J>|FpTbju!S3wC90~=1+7r(P2B{ z%b>kbshgrsTvIWnT7u(7M7&yUzwN&UrRk9P#~viUM%+KQgycJ>I2T};KJjj;pc|ye z=^upxboMMof8=cl%!cou`n1O!WGv}`-HYBe@l-m?+A7Vj?YTs%`M3T7tyGHTG!)|B zvscwodY;Z-lvttvu1KO$CI(W62!{rJ1*0?2nE=4XH_l4<`9wEMl@3`5ev=^vuOW~-eP1Sn@IEC)jcQG{2-W0J(q^VEbw(VLcfF|yqcROCzTy& z3ro=la1?RlldyxTLMI6w%*9_>MC%?|YQ93|BLr~~8dF-0524F~DE$dMMS|kI@f_OI z4z$~*aqU`U3-ibHH5w21S;suI))S!kP34M|hiLktUZ_725BW;|l7GebJh0|^;JbF( zak8jy`8J(6QU9-$^TEje^E0MC(;xb+USMxV7aWbYIde;tEZ=Z^*^k32HkVH1Bj?WN z@XuouaB9CuQ_>e?N}QxR;9JxQ_1^T6OtJEqnccxkiOZN*dkklS*+MhyLIteTw1&-_ zWAOs!62a0l2nx>BoA3o+UND)z;YyT~Pg8}Pf#*tW=(FXTdJr?g&RUz!*|i>a)87JB zowi9U!Od_Ek*hs&CNh(@L)%064tbe>Djx7p14$Ynv};*Pzg8m0!^8Rqz@ko+_J{@j zp{NQtWiBMc;}~Xp?7RW*c($kk&pN_GnOLa^b?&ke4x0s>YBRho0wh{ldzANnn za<#{yKjB`kP_Xm9@I&q1nWoO1CHwD6S>9&k3cqB^SC1@f_)lQy8q>#_OXzcA19O<} zij$^K?vLvFDeD=7Zn)QDIOW%cDQk{%F`@^1WU7;18hdhuJOJ3%ZKRWVie#Ic?XE1?a&-Csx7ih%WqZBxIPQIH4N56>g{z%v zvk?sCItTU`mTK_`x)@%Q^EoG<8D{-%sXZ_!EeZGd=kmA&46x=KDsnE_b~1MZTSC6{%imL^TmgU3v_un(NT@fo@-=hV#=a) z`>%70NUAMOylgZm$y^r+JgD|^tlvgi`iNx96S<2V3EY4N1N%}AU!olPYoI#dj;->Y z1Q@8uUv92Z_VKT{621;vdx=~E85h>sIQ#O*(HY1ye0egdu z(}Q%g@2yzltvzm)aMuDAC$G?{5qGs;k>7+eTvLnX2E9m`l}bU*>zm*Vr}C9TG*_-H z@B(bt7Kt~+AeL_4qc_PMa+o@Py zeU83iJBoY~zkpu^zo$~7T=yFJGJ}+z<)|Zn3Gcpl{GSCq(R1I_YSf#{Eq$g<`v)@J z#!yM7m-IXQ9&Sg=&<5=uGok%9{iK(|+m;!3j8?|m{5$eCcjV*vF3-r>wlNgAaQ+5X zbMa@?cjtEWI2mne(f2|3GYvm+mC1XjmBG9K@B@d-_zDzs*=cGBYRan%#@)o=gQCK0Cfc_*GR44s4&;c*F$3r=M>)CC3Lm#(gJ8jI(NO0pO z6+TB^3I@F$${+Wp#&M_;uXyQNRr}W^=1*)^Y$H7%y)JZ7t^RstIOG=!!ozARxGx`} z4Qe}k4LPw^Qbnc#;v)RsaE9&Dwl|p@_JYkK;Evjs&I*$dOPtSK|A4 zQXhmoGg6tL8QJK(-a|Tt94IOHnrjt)`Y)4PVqMf5vh@55`*viM?X7is5110wJ3aozVh{}d1t+$BRv0fujU#u%yXIzU)xld%qCSIG z=KvE_n~gqUFi@kV269c=>gDK4OHah5xNUVivervzrDt=e@4{1_i(qG40J@u+T&Ndd zIF?KOG`GNYmMQH8EJHyPtHdJx znX(>A##RHP%#!A1?we}x3QM_kg@l4{tP-?LKD#c|0v zaIpc)SC6uzT@xP2i2rlwyI=N1Y017KbFVsRb210C+x!%YL;K}6(JS8yw<(vE3t-oO zPb*NifWbl!W$TUnYq?b$mKEk3+!}p@y&d@k{4_2yql_J6$zQ}T| zFSXpo1Z+z>5fZ{Ictd|1YUkby*MjL9NTNY?(hc;x9!I{!w(uBdCNcf*cn5y&XWSU% zwpE;M%X6O3z69|ecNcBdbIBAyK%NFx@eKWi=mV30Z-GyM4*Qrp5^0H$uj0AJ4a1{1 zsEg5E*1@Ql7$)l8xncVy=T+eE?B-sDdEl8RLf<^)0w0RgQNZic>G-o@s{Ygs&c8{% z8-Ey1vBt}p)~CiR>M`6;*BMz6l{jafvd_rt)?Ka>B&D9|C9o3#@88g1XbKEAuLi1u zbAcB^Cl3KS*sXK1j!et@=r2kuej-kA&){gG1#d<65f1xctQtkqRrOP_UL4^shp%Bb z6|Xak+>FX|OkoX|Y;2Mp4ycb@BqGiCY;d`MIs8%CbjeNmAwC9^0 z=5b3kTF=Dmu~eu04I0qJvs|R+pk1sx-8^IU?(j2e6JIvPv(wBMcAF_R?Sr|Frn;qk z?q;wyu;_goPWFxK6H+homH3FhGk-&VFb(K5SxH0WHRdIKpSXu@BDcYuZB7PdX*J3J zHM|`bxemQpPd5sPO=A?Dfl9R=-7E${yZSl0sg&at#3DLF&7mxsiRXc>(iYN(&0_*y zf`7uy#BXg4nc*pQ(BCY`-kI>^nIGJ*!Kxh+1-q#d(u zP$2gRpZPVd=p#0IJ`2&4RW@2wxpFS7~+#L22DuG0abkzyXh1;Z5m5{EZ zMF@p(lt;UVE6}XLk!BG%$70c%oxd?DV*Z4y2r&=9eC4PeaKq7jFsw29QTBH!U z4^<-Z=nLc{au3|5V|31F6JHq*xNjP84@rk0<h>bR5 zmyPdef_6`Tr#;jbq#B%%`psA2Kc)@34$U;Zl~2%F-==c&bT8BqE&%?pO!cXKjV`rv z)?236W;@b^z6h6wD}tbJEf=3sdyU{%@hy3S#<4nfh*`5%I!du@N4@Y7o9A=F zV^UvmLOtY%^#ZLD{(*MW^;nLx1n-I5F-_2n*)QJ4Zk|$7iEGBYI3>&=CHauSJ61)bLJ_^SWeUw$i?c4cY@m(_MPMehGE!E$AO21DTI# z$A82On%_n3L|kEJ90f*}xl^tM2JT_LUc46U_0RbZ&KAx_!jLedf5-2^%`6Yqo43$8 zJdG6LN$8Uy0v6g+VG1NMQdA10T(a1C{9Z&1^4MC3HshPfJ|qL)MjxKRR}ziENBRTq zns6v?1~*ZEkT)NxrKS$*kMV?Q4h8Y)(=B<~dk{DX>!EFZSF3^rbPZmBIKnS~v&O22 zw!6qEIEztv9I6)j)LBC?>d8J+ERkZT^aqw!K|vSzJ+)b_k!pz!&5dMXYx0cV4%LgR z#4U)^*06irgxI95c>N3th_h9u2G~Q{2o1VwBG6uZ1&c>ekX*cqRf50qbGN8B?$64u z`vmN`c=tQ=V(3HE3eiKiMKtqQsH>qF9tCWdEh@!$4{hNip<#XNbT8QGz3k@IKd0jn ziTcQe!pP3pgMYuFtKypYW%K;sTIp~<=J>vQ>c4AB#_>&yD3+hQYWj6fh~8ws{Oc{2 zbFLf7vUDSvc(2q3{qin}(Pt0+%R;QL68aq!srTXMmgjmMkxuMrU3e+<6#YoFQ?H>P ztk2s|ZSB3}yocQf&y~e}B(gjB`QK$!^SLy~5;7W4rACWkL+g=5 z10sBq4ws8<@(cdC9>;&OWWc|iv~!qkiFt;3tTfk#UN~yya*tC^fAd#DU$kjpT3f^4 zlSM>_2_*rG8o5sF$ywNhFb=;HH_;gV9(JEj0UW~_$W8T_S_#GSgnkQu0G<9f(vYXl z>k@|oeMmN(1K*}vj6d)+G_6EIqjJ9XS~(D(YajV8?H2z?iIOtJSoE7{XT~9~sf2V; z&BP6I96cazV+$a`QVn^b7U1yR=D#YglNa(ucW3x1@TbrOiaoXFS?m$0y_31jJ_4+y zcbG?hMdYeW(2$m`zmh%h1^oh)ho?*1$cb1lMH&9^M>tzcFjA0y13?l275+W}GPc0p z^+e^=n_9f&M#kZ6uyO1P)iKLwZ{*h@?QFrg?PsYjxqz5NZXgtP0xh77uA$5FPh$e= zmA2^yWsv*=je(g_y*j5ILbs3%Gz+DN~j~XYnXhWJ(e#TNm!b zbC_!B0lXpkg$u}-wvYFj(urIvVZLdhBNwe%5f3Bt^&kt}q*9cp_IOgbeA*><@hkrJ z@Qst_XHWeO_iZ>e_|&q2^jOMlKZx0ge#FZ(!TW$VIjkMRfE|QvfJXc$ES22DWRUF2 z(w{Q&T#_!U3t|&s zZe=Qca#|=hbT^#tdxoLH9kzjJWiA6cU9@f6L9<(tc*H{lvgRLmDsg+<-{`-e|9Rwp zcg10Eps<$UIW09`N7TZY78ZJBT7^Soy>>3J#`@!~;A4hwhiv4wE$CF4_8#~k# zT}-m3Iy8v_?quYm-_NBAUwq5(|8Bs4Qfo#MQGyLZO>7LY?#QzrMSOMsWLIsAFlTz< zeX5E_vwwdF=>JAR+rA;3zz*>wmZmeTL)J@HpKXZ!Li@=rgV%DEG4N^Hksm>oAj<-* zXCV}3Ln~^xTBh5PXJD$m1^4Jr`5pMcU!#t3DdCb}o1EY;(ksKu$~URR@JeY6k8e7D z#XPltO0eVRm<~P_pEyB6oky2W)=$13MXad#q^(`N0t&=ah|74eX)G9IAMp(rf|Y!Y|WD%7c_U_H{;l;F1q(pwEWroZ`eGj4Atzg!^`G`bCd~{*MZ+Z#g91)%^N@Z6dM;mJD&Qif zlgtKYx@3MudV5;#?R0;1xdKC;2H>bqML)qdVvc0!9}H_QWLs#5r5|z=TVlM?D6Y!a z4MpMTairYtwe(xMoj)ML(!@=u9|PS!zjW8ThID|wT#I4@)UMlnWAF)0CN}E zuF#k0EmOM1r{%F%{fi3AwH~i)H%|+p4zUXDh3Cm9rbqaR^#R!90Uj-akafTvHLP6| zHSw|69WtLW0YZuu^U)Oii>cP^rhl88kqQig2E~uYJFZS2_R?t6~BQrYmG?$Sw@)qoAFmZj@kblE;wGGzpK%!ALqDV%(HHg#c#Wiwp;Chcg}2BZK2EF_oxWOG@d@F|;5J_nC^vp{4yFiAV-{_fsgJ;< z7|T@Qou(EehX8d{0s$Ew4h&sI=FNKSs?;u@pSzQHpxQ8%~+#_=7IsAaV z4o@;``VJ~0Rr)wZL$}bEC>1VOKlz2T870ee+q9+hQ3dQpK;nxRQqV>rN6IvU+;wxV zoC}z`j~%US0{Y9G64=p-eE>5dy!2lMGo2xEOGWh}H5Y4vHj%qzr~a7vr4^e?4T4Tb zar72phSH%LC632^yPg?Jua^#+dUWuL4h|6Wmjpaa;uRML|(CAs?CzH^EMk zhBg!eb{k9Z65R|>MqHZt)N_MYLP z$zYP74%UPi|FZ9Sc*fm>?)q)Eb?8RK8|x5SZrk#IF;32k&PG8pa0}c`t3U$Btvjh2 zV9nXn-x-K8XnZ!(k>}bg;w5-S_CmGl789+cTE;+s?2zmSH``G}cTzzA18lJv1(N%?hkBfRMUF9U0$0_(txeJ|ESsXveFKb)achG+LwbBP z@K-xq{d+@Be9bYLo1MqmmR(Q9p^PqKJ$MnarHj zVfh1$ySbEE>Hl%qUd3$u zTQNM5ZT@28@a${I^Bd;@tJ|@C>XvOsSN`^$og9dUHz+cGs)gx{xQHH_QBEktt#J!;0dAOFj`5%ngLrRHrlq4&i4{yP6-f8_6`zsEIgX#7Vk z35`b-q5#+|lHunNVSrh#^i~~|7KC*4j`)f#L{{yGYzgxtLV*rU8sDn_@!+BRr^D_8 zZsha=>5;Nx;;g=ZXI(I#t4~;fYNI~6+}iwqat=RvZvIaUed#3Sd>gJu#YY!1JI)he z$NP$~crx5f+*9A;oLCH=+LRd2`}t^ojAz7_uq^I{vjvKOuYBMWsQb{Jh%dHPTg>?! zY}r}GSD|-Ko&Njo(tnb;Xa6X=9GHi<;Cyt8*fZ^sU+rn;3|lQQHlE1~aGw5CsPP7FsBis8?Lc(#cuU@GX?qlCT*V1hH2oDia_#9-%hjlx?ply@Sph~h1AH*y0 zG^`&fSCWl+e_Z$=Nc-C0Pkc4&!XMa=?AKY{@qiq#Ue`+Sk9-VB!aWEKYxjj1!^MxpU~wl15)ec-@2gv7Jowp0a5%K-1849qrqNaYKSHp!RBxS*%f~PGI)})jkrLj z=RVUAdCR_GU$d2)zR)E^8J$g_P_vnL zL5{DTC_rx^e&9Er!_D{z{9Qi*yxawB9Nc^sp*b}NDGlzzt?qY{-`^AXp!S60;M-6+ zogtZhx$= zTTVQ7weqO@pEh^Q|8#T6K@+;=+jU%pAN;F5A}MAjE|qGDk;O98VW<}DUEhoAf?p^S zx`ZF$8NOE~_(?iW>aaV}Ea0Je56-xY+6};vy9z#knRXU;S;w_FEI*v1)CXULqt*RT zw)uQYU;xg5*F#J6 zFKL&UQE|g*Zq{E%XOVt8#DWA8`OcFn9J;Q#d$|G65dKG-HeF#E__1||Ple|>ci>2F z0X(8%?h?JB;dB-t7>-)rg%?Q9pQ;6eZ^E<2RCt*MK0tPeu7Fa=n_`x-Xgn7_&@o6o z-DCzi7Uqr-ORR)aVB2YdM4z$TCvlYb61&n+Bn?%ZbJL$Fv$Z$uB_4C-lG|7fl@e>> zzIIQ&4zfc#!6)1!DNfndcF`?x+pC32;3SMN#>p}$fjU8!@j_w~xn^2})|mTH258Au zp^0RV@toM#tC0yc-^fRP*WjYp_WyRo8>B(I|P(h|(M71O?SLlosqG z%2JgkCmKWbs0*4b)rVh)6NK*~Di)J1>Nk4@<1u}V1l$a^1{2W-1c!7;f1qVgVaR*7 zdr~Wn`zl~v@xY(aF)ah0l261t>U*vOzAEuV5%S5rOPeDQy9@9b`_YBP$MF)Cg? zK%a1Z+?2o4?LF&r-wQRJo#-jTG`)!bVn0~tZ8L1Dy@uwjpNLHJ5)NTqNUHE$N$_TK zU1v>Pqwp2FCEv9=#7-*%y~8F=-OvNl4rYqkyj!PzQ?Qvs$Vw&O)`c>5zx5jAh?+P{ zXKtTWD!;|zFa;$8qBH?g+m*sEKf(6}hq)s4x9EY3;Vz^X?X=7oE3rR`zL=mRNDoBL z3741*_XQboqo=lT`^h@`g>zfdL0|o=b;x|#`2n3br$Gluo&H^`)RIK-9>%>jm8q#X zLKh1eROMNP7IWGs+&sG}XxgBhZCxOq*t#Q@(La`?aFcQnw0Xe(?(Bu7-)OKMu;0lZ z>jB(KxKS6hhUCINZBlE4CP4>iSAv9f<^I_;n6vGM{8ESFMmLG?n9qu9Pc1g(F7zJR z4VT~*f?q2Z$CQq6K3obub2iehx6vzd9=f5gsdZGdUTx*c99z5fve{`VB1aJ(d#j{_ z&7`cX=r{N|rIJgOKM57a3n>mu)>(9cm_!Rqz}-ML;%gZ2K*4q$(MPpmXh#J^9(V{U zAk1MMo$z<6PTtMO7%kiaIxem0>G~rsQ)xJ*f-di@yGDECYXDvF9$TFw&omg#kt-1? z^fl`MF4JE95fr6gRB$u~x`}+mcg0%$J@?}5GBkVq-M$~bV)rpC%8I$s`%pUMn|%$` zU3I~B0q|G-Q3CqZo^2#rR<&t*6iUUeXbiLq_M5_~crq{4{-sQVT#>zy@>2uWYsv`u zJ}|0m`dYbEZY$)Le}$jJPGyR&h6inj!1z<(*igZrLO=Mf@O$qEv^CrkIY{jOdkk1A z|HNGusw1BK&jj~;=V+@*pm!!LOZ;v2E0Y4xv3|LcbRwx_khsl`Vi^_$e~qIUh4o7c zddcSmJdH&k*s6FG{jq-pfxwe;O!*DJlJ-bKDFb$t*1a z`X<#YWjmLkJWDHa2*1%q;|)kyr0dyy9`ySZ?1WFd&qjk|0nlgzv*3ATfPG`iwcWOi zTarxz;Ut?C5yOL-P*$j4z9}KnZS}TDp@L9szHB&{D)O_gU^<7YN_b!VqrcVt=vPc6 zrhsh(!XY9D^{a7ON5~N-e9uGg!WXz3)OV@ZT7nG`b<~LNLK~n4xDC(4@=Pvrh%IDR zOb^Vr3>vEd`}Ntt3Xh)kNYUOn@4XcO3r%(-!htsW3u!l@8m~Z4bC^#Ru9n7{8tj_jWy@!>G zP26f|$FmZ=;{L2T&${VZwTrrA%7%yN2Iv-ChNl^0^gI@AzF^`_HOxb(n7VZa8Sf5$ z`_ln&EJqTL>&+j;6WfNVp2)Usfh5M7J_n{z+gKj_5}P)L^#Np1q(MS++WbkcV)OA6 zdX%OhoL&nrU_nkX1i_{!2&3vI_l92;C(qhYHV|h?*PKMHsl)%8di6I}`Vkxs_L4!( zan51=5H}hF*$Sf*q&EbhKl@|3s=u!xJO~n|s33F11NAd>gLU|&U@auU!C+x1;HA09B!lsnLcZ;bYcM)_Qu&b^)1SWJST2g+7Coakb9qS06x2$_;pxe@SHW_ox-)osmJOgja~8u-n*E zp6GcB0a~-4#2{i57A=>NK{nIsgPyW(?~KNrWP{VKH54Q?!p02PTTMapf{7wVh)eKy z1s7X=fEavw=a3G5aK(X*aE#$MaAOaj)_Af?kE1rRDXPePi-~7N)2?Y3e?s-a&5Qz= z>Cu)Wy57EnD^wMC%iH`!tcZd>Z3xOL)ivL zOLQ)FVD>8uDhFSZSg^ZnRd+3jzYHx26@(kLKLVn?*Q&*NsS(^8o1l2(k&z6Zj0G49 zJ|h}=h586T#Jy^pnk{$pV)#!;;p}|2G%lgFP4I8_6IEf}qrYI!$Vur0 zx#atxZk=)A4%sL8vCD88j+hGIOH8tHh5V^@ATL0#vRx|?+pt#o1Nj}D$HwUiZ3AEB zw`CNtXo8&R?~?2IOte!*Og`uja|a)$NAX=0kVTaP+$BV#)8ejPC2^`#EmC%{kBSFS zp{_A2bOp+iHYFQg2t6?FhG_jn`>BqaDxd@N6dp_O{_iBvC^LQ<-CTv16hr_SB$mI2 z4$I)K4rfP95$X0vOfB}-v=OdHi2$mm`-g;F{}Sg8wS?}f7eF#?N`Fqi#rAMuOh9MJ zcq)q&ZA+$A`;?s{O6}7+$epV1;m5*`KIDHdZgVy+1Kt!X@LIS}d<^ZJ-uD*=+y04$ zD^ACWZ6yPDVvC?B`;D=)_sB+PH=JpiCLX{dTa6T(TTLa@6V$G9#^(t?d|K)M(ajd`SWK=%jo*0Yp z3G$uh0DHcS%CSws_vtJ0y3!V2@U4ZbPcLaX{-oM-QX~Xp~2dpTbXN5OJz^ zh$yrP%qzdB*EG%W>z#5hJ{B^gbNsBDs*7?W^If|e$>E8XL?%j{(PPdUP7xk)11bsd zo0VWC@NG=A0E}kjFuP0FvwtM7-p4%(-Vv7gXYxDHh?oT&wFdk)F-p~1XtQWOU|*qM z=vDZm5u^m8og5}g01+1V(!9@O^IYdXdUK>Y;MolFdtsF4q#E9fzEl|NTk?xz&rxLU zijE^UK-*Qv_Ki12w|>9!SD|iXi zM>IvWAg`Q_$aVHT-Aq?l6X{vAMl2Gwa21@PCnz7(pTR7t@Wd1HyDs>~LreavA zTpK-iekKZMUqy?m%T(sW&rVUmCHP__+U5}k4FUXt$T_k5`KIZP%m$g*HBKM(Q#=;+TknIGN}vM z$NlII+m3uU?L+aPzjjA{!~Nk)&R&BYUPs_iR=7#xk+DHR%s2d}gk=y$|ToW9`3cy};%X|c7 z;4{Vx@ijKeEt6e}7nPCU`Wg}qr9pr2`>2cFq(v&%Qi}i|uXGJf3lz$_Cp&o0cMG&! z8$JJ*qW5v7`~Uy{AHRQ|a~wOKyuIv8eCDf(CJ}9IEo<5$Su}~JEo)gsBBDvw7Fi-| z5?PZavS<-mv}m$OG);^6^5N~t4(He7aUQ=PkMHgE4{SJ(^SIyc*W2}axthd~cbHEC zH)jnI1?O{7Xmp4f@*%>&c3f#e2XHzT)MW3mIO(+s4+9teEUid*N{RYc{w_Df{B{=M z5x~$)BaewYCS%*zzB!7`J=*~m3Q7A58DVdqr5ofK<2jcWJqUWFmFmZ4xAI9`M7DkH z46csZ{$R<@Oy;@clj9ljJLI$4L&hk>a7%h8?_e{?rum6HP|9)8SRdmHn(M97(xFO#TcK8o8 zr+7y@)etG%a)YN-LN~Qs`z>tS8O>b}ZREBb-CQ*Jn{QJcbdDTqMO&seO(k0z^8zcQ zs;j)kdFgDd@rp8p@rnFNl^KL*h62_ zab{gw#AS6weMZUBCUaO{g>4bb_ zl<%hURQ(}8r6SA{*L!B=KULxB|CC?-O(%twSQXSqV1<1Y_k+*<+Qp<2=avbZ{1M-x zPlPdM?&7hU5{&heNR5<=dST=KOl8Re=`~jm)XGyD3C59s1X+EEwJRmgIr5IHFf`kl za%GsS3_aK7kd=!E*iZM?P@rD2cCG(3E>y}(G7h8i8d=RkF|%~z#Ggo>?$Gw z4YV97F(mwkK8|OQ4~Z71o3lA%Lx=HB`%_u7?gzU45x%;MdTH9XK)kdV*5;6~M(44S z$NrakS%zfj*O3J6wjrza`htR+e)W~fn0dw%D^tt2ertD-b99QBAs++LEP^rBn}(=A z5fUiqymbs}SjY@s&Ga%7lFxdL12V&4k>wsDkA+{JFBdz)+U2%h7-%JbXsy7L zo5t4g8124RZJq{goDD1B3$HlL$k2zvxtR)mN{_J_DUH1V=TRKHMD#-AQ7Si&HBnxx zAIa7el_eufOhwe7U~bDZMycjU7O>lNj_rt959RS*yI*&qIXW;<4Zkl;uM$2evV2vo zG^2Hj7=V7wCiy0E*UVLt7?1j$zX?>zXk-I9)OWOO{f)Y3L2oQIVZ7os5!|1?0(o2M z_T|yNQtOqc*z!Nm?dxog>$)_|KJ*<2BeZ%?6J05{fa5|n=YfC!i)aZv(SNIZzz(>n z8Q25O$!XeQ=oVJxsNiGqVZL4Mpf7|Q_@X$jzA%r1zhE!8&Ua9cZ1CNz1HwpH#M;bMQo_T~Z? zq)Dy~SP<>xbAuxDgM-Gd_({#t_w^AbAJam*Ig0sehbC4WIou zbcyODbCDA2hSFfVeYb?=%Yw^8?~*qj+?Z>`nf&z1DAobZtTo(p$T*VDg&Dng3AD#H zA_C4^J6OHt*1NGnwFbK|?khiyAO3njP(|G&yQ@CpD)|mP+a9CW5$VAv29Mnu`hog&$4#`HIkcQQ77Fws)qCSaWkXr1w7R^5Whn}OK%a!;i zeUOQ#56P$8G`@v@#c!aUdJn!Kj3B9Eu?dt3^uC^fW{_8rr}hdWIiwueV95;hJ)rlj zX?aMU@h0hE?r5~wlc9U$k_%j~{nvn#bVBYiiXgdngH;`$>~DEnNGs@&S-`n{W?q91 zp*v=r-iovY=ky`@iCTg!SjF5h`-3~R7ZJDFLVXHYCLK}>`XM;WWa;Vj12h4-j#lbT z$W^Ns8zPe_mZ|5yfXf{;ek(t?AUx2Lg&Z_a=ZQ&d3m+ihm?Rz;wTNGPq|ZXT$PSu- zO9*%qkp=6Ir70aMB6kG)gd=S@;2=)aHFAyE1}4<7+(pER1Nw~6B&F-Wg3a7VE7Dc& z0GfIDl%p(SnoH&HGuk*3sd(0RDo`)ZIj;9A)z2SEbs&ByMWW zfjoPO>2aQhtYLjulErLtRlrnJnNn-DN3dyL(w;i+>HSgXY^n=DlxUapelXQ~@1F_g z`4Z%1!Kv>VA1s6{z-p;nG?~paOupG*sfTEl3N-}cA}UE=tqQG2AJDcyKOluq`ik%n zUr@7nmhdohe61eEWU6`EI@zLB@GaysN(3rZCdUgUh$ch_L$$bImij^65O=}vH7L%a zUlliX1g&Og><;Y*-hVx_zyP%q3ny&WCuxr z9p$<05X8uLM8WTLq~eg0dK0XaA4?0;1L2x=D_B96BV!~&pOK@)4%3Z2w^dPL{0G}( z!~?VKG}5M?O36gL(N2xf9>mRNYI%5$wxpAgFW)dPjBBQ9^c#I<7~-*RkP`Zw(l8Z& zZe7I+wFo3yD={DHNqU?y0W(OZRil^FgZLrU?r2coJAgQB&0D>~h%HoKpaptT`a)h6 zrXYv<1o~=o%mnQhxJY`GH$Z-PN#Il)?55t58nuhSL@gg^J3-mcA{Bzfu3CTiKGsjy zbGzV*Dy2@a_lS#l>(4@5XPd%;`_^ToR4V`z38tt)Pzauop>#F%(z;0|>lgnm<^uHB<*X29@Om@%+`zMC=yWTq&$#}?o)+71Q zjx%dLG>Xg^S`0K$OMb70>!b2J@QswHZN`0zRi1`yn~{;?GolE{e40D@ z3o)K)RAt);^_kzcSF=qaMQn|;hbst;<-lf8teQi}p%*>fcl<{EZr- zO)5pm9W~p0YsING%zHJ~R*9`4nd~=@A44t{MM~cb7>-utQ}{i{Py4p>i7`w67H;U0 zbR@siN)1C^HxbF9KG5f-b*x;!g_FoFq}LcQ3$zil-S}*tS|0rYBsAO9DKkwzA`H2Z ziqa7@5oy%6@p1hb{RiXuhwNjU#*T8SNFSac0*OvCFK^-FQl%}0V(nG7MYNV>eEUZC zMYs34oZ*WnBB0;SMyK0P>~rLxGu*gsn^Gx?2d_D(85U_PK(Fz8L^fHAH(0j~QJ#j| zg4^@%V(M%w2snnx?qMU&*n1jindqAS+R6~(g_>Zfw_RNkH;gx0B9ewo7!^dQR!$6I>o^-KFu7qV&Nk9v zkCqK>O4BX}VMn3iX=obJ$fZ+XLvQ0Q*O0NyIJI*1hFTJ+k|%`-S(0yRF5^3ri!9Kv z&E6r_%!kAcvryDj$Dt~JG9^zmd z=y^U3Np!A5uV1XwFsp1~>I=PB3k^&eHu0`?p;j9wRhphB!~73}*R&n!knBPQ z_K^L-4#Q`X$Yh&USTe4f?^%s5Mc;>P2M2&$J1rlhx0OVsS@-H{aMdUalxT^PLrzy` z)fzn$xdvOUdUBptYg+oAd)c2B| zffZ0S#1b7(&k{U!3xVeY{AS^JwmCqS}?zEb0=`qR$iaMjN=2my}6qBDm`N z7zmZS0*6SSR%omtpXCH~8C?w4ISZl9;;r*)NZJ**JSjE%Hc-G^-v0 zK{J9b({F-XVJ&RKev3_U%mridWUoW+7ekdai7{7%ZuzCw?0G}a2PifLIfN$3IiJFL(eTv(GRq+SC9sKzZ$!>?%gq@KIcF9ac9w4uE3@b(Vj1KIDT%adQ*Mmh$ zt8m{~6aSENO0qKtzp$4%QjAbXwYLEc6N;r=b3?(wBfL&x)GVFKwUGCLvRcIC>rONW zh~7!kj(^EK3hc5o`g%wMUBN$u{l7unlrGdy!d=NJ6==u$Dx3ht)-&b;dyfBNBIQ`d zdpW5$U&MO9cq1?GOMQWUf>Z}xn^^XLuG+Bw=?KXSowiSqrCckpW2(TbQu24t@4S5C z4_Bu|jd7Td?Cmr|;_N4_5j|JqwVy~VyfYq9U(Byetek+g2FDcAd?tEr7fS0t^-P#8 zKP*8#c4*!LYu)dGDHEL1W|7a0>;(Ln!-%4%87EWVv|)Yr5wjDVOMaOm=H(~UvbxPV z(4X`)pRT@ge7yXO*I&+vUxg}Z1Lo> zMx~_JR*`<&kxjT_a>JWrv;JQ(l=(kDv^7WQMYD3%-S6!cp9ph zt_mMvdJu4rsT*jjN03|GF84vO>)%#_g5=6AtkM?EpF65-U7;QJceXsoO=6X~FeUVb z(r9If4~ketKw6>*e0#G9ou?OR%tkp**ke0rvbYdrp4|Eh6)s6Zi}E8oFo#xj!fqKV{Jh!)^ss ze9+yjCk4`jPw}tP!>~ta{C^@GYtF7K<7Pi=^Q^0{-O;`+c%MZe-_%9wCH9E!qI1ni z+8O+AJ~2!=%>D*_19Y5xgK;$f?Ns*uT{vkM#s7PZ#|WqFOL!Y)+si^oUJkFbrH386 zVkm#8O~=V_CBi_!pStb;4e!z&`HjRYiNRH+B#;xVRbB;h$!zTpzsgi`tM*sSK6R5_ zu-Zt`j4{9IyV|H+ZOO_b;v3|kSC~6!0sjGQgl*teatYbNmputu#?dXe?Ih=acYMDu zZ=)~O!w?tQ5uORmm;BIjM-%^m$fKOW2Z+L5h4>B(6)zI$FG2?4Rym>OSYdd$aX_c)`_#5pk1gttbuW5X@ltnMPL zu-mpqZUb9{xVcP?U2GadXJY~tc3I2IqJ{9Upy{v-1%G6>+7LkAnW)oy3jnp8n8xlpRL5gAm_Oa zceDufH~3lC(Q&$!NU%TWp0jn19W|dVyl`nb=Zt5-lXg)TsP>=vN%5wv`B{pU+>UVk zlsjOrVjs!Z=7O1wB^nr;k6*PVJ4z`&tX2PR8&Nb<&~M7MNR@mYpVt=5YGedHlTM%+ zj7k2>9W+k#*v75L{~U1IKO0wOxm?$zQoyRd_v#%fQ}}AE$OY!1(Wy096_O2|48Fz$ zNH8y$XR72xb3m^2WuQ;|8nEOT@*Ct^ z)-Z~bh){meHc34W?Zp!93#f}MM52&Q*d7+?e%*%df|qigm@s&nQoE4P#&@X|kpi+p z2C}^Imnr_JvnA`PFC08sHs)Da0k--NsF5M6xWeT+xr7}||KF{3b>I)XUm9%wObNs~VJy zG4nmMWx41Y^cEk1mzl5+lqgUTDw8Q@KY(qW%({a;He&{=MUV>pTAIGODFssu$d4H*F8Y z!=0Eb%{4@QyOJ*Va1+oocOP0(-FoHUPW)aV8R?aC)okDfe9`jJS!|wK;yyE>4ufgr z-*S+@cI1)o`1{*s^QU4J9&ygw-vGG&z^rLcc{OXicm;itPs zW@CL^7Ws-Rqi?eF#8d7WmdFia(ezbtyewl9Yyni^y529f>b#MJ3dVO(T%Z}x5T!!v zoA%QhLQBy~a)@vfhss$i8OIY>lFTZu~2Fm(SDwU6K;r zPW-Ksk6xpAWs`oVj$y5|fh~vbao&(;&Pl4=X6PeWzceF%S4;fWsNuhbf0JtQRjm!Y z&Aa3WGRqnz>$UG#l|kYc)=j(?X|~>3zqA(Pr3Q{9J=E&4y3kPa1QTh4h=Q)-bNq(w zBiTnKu|?uG8F3n?#JfkmPqa2^4}qjRDCCD|uh>b8Y6+P_J~Zn{S&uOf5swm&m`aM; ztK>+K&r??sFY<~+mQ)_jDp?FQ3tBu2Mcl`n=6S%o_`Hqv0v$PmQI} zhmQN9Ij%E%s$+uC$P4ME{@7a-aQZtu;cBhGp!KE)J0xCMg`_BDqltc-8W(skc4%I? z9^Osyb{m^z?`FR-sW8EuST9tUHV;kfcTp$!F&~pf%02KlgqihLk(G?9qs~Vl7>+@00J1LfUEc(c$Pbw3~Vfd!+{Tr}+ViRZ@XN zvWz;>M)=qAjY1rDLFg@{0KIKbqrZopgrtR3hZf-7s|a!S+~j$V2pTP=qaTEZ=}p{8K)Wd=WA#i0sMnxmX8KW zo8+(+8DAZbVV=vT-WZjT+03@4y#Wk>%boE( zSK1s8L+h?IJJ%iIA@dx|U?DiU6;j5pfOD==`Dub)D-1)Fvt4bJ>x4BaHtt9^jUqjSh{>H`W~J?NxNcco(9 zh~IvbJ32iG3dhX9G3U(xZ4LbTcUfH%-e8cRa2_FvQHfk)*l}nH{*r&I^yqICCTQx1 zdJ%F)@1U5y8u`jLTkGg7D2`?3Q^hM|N~glBtDx=Nqn{BUuzgC_USn1ID2PBoKv^<8W-GGchpZ`aY_s;3x zgi<;kJGae-l<*Z-Vp!NOQ6KqoBbMX6%jnHBHt_qh9)5T7Jd(;4-`Q*NueL3FIuRO@ zXD%~P{fG|$?{i!S2N9;J4b(6?4}B=j#&>*6a_N3)!+)ZSJ__y7Q?L*8eM@HUYb^Rw zYgG>PU&C?7Eq$d0&+weazp#|ZEu4BhHpgWIq^PYF+-pRgy{^<1~HLT6z2^e${t z9Mo|o7n(GAe9aewoeEv*IC2+qk~ZSZswA$O35X3zGH(%ny`Mib_pcN&SHn-Pbh+}v z=cwwCl|Z?%cfN8~e%XDz?eYF)FH610!jk_48`Q5l8X0$JT*wJO78(Ybjk}@@dGj=d zB<`6nuDrZk{pxgxrOo zm3oI>VCJGJXcXivpIMA^op{REuy3t%q8MoIKLg%il%fT{YX^!)`Kfj(@3l>}z`~8! zSUTE_-=ltEvur9>NL^rYdXF_2ydz!HH^n?i=)SV<(Xo0IT7*58r@0!nlB>qbu^g&H zJ|N_P3q4fdTctEl9&k%G7rDm2#-CzenPi<|hmCcs(mD@r0nsQ^oj@yKx-Z7oj9~;3 zqe1{I4U-SPt|8^b+x#QdBcWK7TMN9M{U?=wICenf!SUOe9&QQ6| zT6%ylV_S_>vOmD+W8S0St;?oh^+hZYXu#TF-SLmw#?6K+N463Bx$_gc!j#J^+GKD% z;DWPc9Chmmox#;$Raav5ZTo8=QT%Xb;$2s|7(a1?ih*p@m{2IfychgKjl*~IK6%6H z!p5vy(A-WM8TuXdtC0q$cM&YB>Wu{2Ja}EoweY5VK|#GfE)#16wX% z>{z58f$lqJRMDUj61n(}xrujb5$KjCScAqGl48}NP6XKd=ufMJj73s``rVGzpm9Ly zcqQd4J;DLFYhL(P%_LQWr?uX=MwVNBK>pvf4ubErVWCfWZQc@kxlOZ|zsVugbAAqg z%!tS}c1qcTUbh7+%nAbzN3wB`$s|Y66CxigMn|ZxKv`+R&yA}_i{cIJtM&c|#(nv= zHD|OTcQGfpsa51U^$Su2wbBK0RX*2d^gVSOrF5RHwUX>*)IDm5{iBp%RbsVdXoiqT zu4#4b03Jh+(Bo(vbD>w0DxAGZTC#X-3<>$L(L2{(qnl_M@sWHFsVIhOfGx*8^tam0 zWLTf54C*fMvEscs`V%h@Z6rnwLmybB&|ZMqo5-8?GWI^(&FvGrL@l&FGFq=hO4ot| z(l4peXi_urFlf2BK(8ZN_)jDWJHpbiQ&Yp<$%PSFge z11H%g@*P9M?C}#_ux=6#t(K}YM-T>w-^wh3e%w#qBq7#68<FDOmps#Ai9Do#YhPHpYEEfNN{bx7-z4L!Jl#R<(ejI-qu@x20sN|B9{(SYT$cp{&UCJUttv8H=%wta&hKQsO)j0DD@S?_$MzM!m#g^zXM}q#; z{$B9oOH#l79;?)&ZI3~H{mPVa8k@m*>0@A;otl$K7Wzin!|T;jWx>FpuX^lntJ`l* zd**F3=q)B9e` zDiYH5+WX*nU^f`)>oZe(eT!Vdyy${4WvrN++74-;Gfb)dJ~HEEgh z<;sFRF|15|!FGGsm6HGze5t?1F0)3NSIgxxq0V0_$|iw%%Rg^YLBOe@g560?toPg2_4)KdgaBW@2)WF z$u%N^?N*qPV?8$Gi8T|Ps`v=oOO3OgbR2MF!r2LCkh)90M~9IC{e$`gc`8+KKdc!x z4RS=?A-LE>G2*&Wp`@u-jb&|1sWTDZZ#nJq&c#a!`}>)EC+*vs>7TX)2V>u}53@@) z-nvFM1#{#+5euvwu?8sk>%i@A6f>3U;!nd9_=tT7 zmY_>;s(sZ`fveVw*if8YWs>-P$4JPRE01m6S3;?0wqCNEtf1e*`?VY!4P4g{Uz^Wq zX#Tf!Bs7=3WV`iK@`3zHOVl*+s!=5s>zVRX^P5x-`P@!!)w&OTcL~fpJ{G;>tkNDh zJ0*-S6!OqeAtm@k9`UYNzx|2iN5}@gZ3RUR4J!6=e6YUvqr3xCPn)Jt)fm;~GB@<4rXH&CI9ayY0zn_Mpy$~QY78c#x8 zffr~?uv^+N%j7?VSKENx-v-Q_yJSD{9qXYQOoL3(y38fb9RPLKJA{n{MYPMRHs2DA z77zVh=h%q(8QFtRUEnf^PBxzWjVyn}684dg2{8BZtT&0lzv z5swtZUAU3>jpX2ui8|{$@mT}KM%>aKc+vtcU$=WxpZ1-QHHeEoVOO~}cEgp$w*Rwa zUt#l{xK$p*eX2;jzLd+ALv-K@}WMe4M4Y4HwJk$vr-?Fx3y^%*LJ8RZYlTnv7FvgoA?4g#xB)TR6jdj$K}jg6zThNA$Z(Ih{w>SyJ5PC9C!wQ zp~W0VHP8zoh~y5PJPX53_o;7M;V-Y_a$uSqQ!=Pyy#m~@Y3wq2LKf4p*eoy--jR%T zmyS?|iFabO@m_Ju#|U&EQODRI@GpO{r?$_?3KymRF)1S{*lA+&s=A`&N&CSmc=x!a z439y=#oblHxSaAoRd@&N4oo~+$y%hS4qF5Nh#O-%C(TZ-}v2y|Qkf!b|P@whn?} zG`!O6Vkj(&+-2wVPr&=j(Q?6$a*oa;UDg}=frJy`;ytwyZXU_hAa;wZx2<6}?X!Uh z^u4>vQ!5RgeP><;>l}}%7j!Liq9$>^JdO zPVYZ^WbXfX;SC+{uTqxP2Hy`xk|%)WeOq6m=A?1W4Gi34^15NtAFSJSfwfHJqEE33 ze8sxJPJv$Kk|iZy?@^v(Pmu!BMfZRo^cCC8wbBo4zwmReos6PC(SuYv`kRo{YtV|= z6xha0G0pO;6=II^{qjX1`?AK@?4J{cl(EGMkW}orcKf^RM=@>=cag|Du^;x+E`t_$ErXflUq%rrk6!o#;G&ig-C{KFH zkMsl^Mckz{^HBF|jnG#v$R7n>Qv+Fgp?njxv>V7bJOe!-%B&u`%QP7;K8l~yxq1Sm zeRqO=_>r_rN0F68LdZGt&h{FcAwOfWSSo#A{&?bAC1PXb2*6=atd8$1p?HypwV?DU!)$2`WKaR%}lPD(@V z0#1d^`&!Jpzyq)RiT)-eBRFVZN8dnmXHz61)n43w%SUp?wwYoPhoB=biC2UF&a+a8eJ(os! z7dB>h@-mOvQlP(S9Q{IeLX%cyPy@x}n=0zZ8cD@NQ~4OxO>FY2JdRXjno#`DRnzg$ zw*4wzY(EP`;{Cn|q9gloyy!cmbakY(t}j4zb8+6R(n4W;d~jZCOo_IUUy= zWWHGn#DE4gn%$Le5%JJkzp0-n?Z_I|tH0uEpo?ct%-5b^ZNVF%%jPdv5!=Y80*N;p zeT~lQjj(P0q#Wu_AUrwLWN3yRLY#UAmTN{J@g^{Elw9pl9F{ZX?^><(8Gp=fu{PH* zFGTk7Wsw!O`yr#eX&sZL0;`t?n#3LH4Qzwz%sq1*G?6AWJV5Cu=cBMM>^;8`?SO+RZ(no7q*WlxfAYfH;;+Eg^$gI#G}GfGUib*NlGQP=>ZG z=|^zOsDjS1LTZOCa)fck;m_>Dq2*V)jPJbvqCt|pZU2Vr^MAAPeA!7IVJ2EfXDion zNoms^L=tkF-Ua?*7_kVh?K@Hp+)+OSm&szJktUfee1NUd{*bJgXtjx}a*ci@KEYY3 zk^ZjavZVQwe22GL)5JS{3XL@@%u- zml%6WGu`pumRZONv|}H^|B_-tBPK9Q59xSf1h2r-%q`%-Jy345N04BRupeN~kVn!c z74OT?u6srAwy*GPLy9|;2pjBB7mZ3#KhnkdV3FS=xcwd(o-S}^c5z!| zf5;~r6SD6JV-s!D;1Bo&dRQ%R+9a9RTU960tFEEH?F=SSGm>bpgtoU*CQEjbwHI-! z`{Fl{!E5~8hyfk)o!9}L%zVP4m~O2b`zSOi*}{tNNGl0ckULte{VsF_WisdXZ`@n{ zGnZj|!jI73Y=5LWO89pS|i3R zHYhfilam)?+Rl2&n_aIn1cIo(e5+z2XN1h|<=u zUKYfR2mUXj3h&xPn7Ut+52-jjg3iI7;t|v>;0@#w>p%;&`5u~W{>6YpW4tbWN?4@7 z8RrxQ)a@DIC6wW&eS%BH%A94MSgPl|P3)2%`S-YdWXw5xrH8uvKV!-$x2@F6lZ;94-g<5KV%{tIwete~&E+|ED3N%cb)=VKL&1L3l*+9bYX%%s z&&XC#?|YRb=o(lQM!7|`fy+bVsT=qVHjkg_GUPA))-vRn{8T%BjlZw~J=6Zi=qKjn zU8UFE8)k-s80U7$IK2NV- z%2xYd?Q&9*&Rk5VRD30rjlOagA~7r6bL$w1GCI^U1lQxSQ4FR#`a)a9GmR7@6G_xF zkR)_pPbYKLkJxA9n;wgQ(|@B`Xsfo16w6-KslFEvj1r*^3zs{nSSyA9Nk&|`XDba` zyz+?qe5F?5*?JFR9C8RlcFu;J(GgC+F0hoWVwI3Nd?#o|h8r5h+`4X9n?fdZhKROy?-JNk|Cm8-K}QO`}8C{Z_PmpM%@v8&i%XpfoWsMkx$ zM_PiJWBTC&nD|23o)OkXd9# z?S?&6ExrvW&n&eIRC?1&!42ycf>NirjfcukAPbu3{H+Q>8&?HyBFwI@5ye(rTs8!j0JF=U)h04fdY>J4((n$(SAyTk>yaxwO z6rG@|6`Z`~yRT&n)&4My36|QQp%IRGGLCVfQRJbqO)&&)E^X6+yJVd^+$`i zqK)e$r^ypr3^LD+S!XcyJhM`eudu&JRZ{34Bb|*VzaUHGDda4Vefgf3+Ms8ZNiepc zms&(xoLO=vdoTD5Q{_n5pNyF?WHoe{MA2SQU>cDr{RTIt$A|pH+xTZ>74Zw+M1qX? z?)c5Wsh2-IyS^Uzp?V)rLU~&Ro6Tj1?wdCpFH{8ijcq8M^gh-DTa8uux>=>W0-@*| z;URXSmXrC`3iTO0)p1O^`HF}^qb(a=gG3mwh}__PtW25#I_0qTU3;qM8)I5O@xVG^ z!{|(UlyxH+;l$3yGE5is%Akk@@Ya08pW+$B z9U_gAsW03yKg6v%uEO?lOsO^tWw=WyUxj*U5?UMve3G>9YqI)+Nmzy+VM_X*)u54l z3)UP`=j&v}ztuLSCrX%j zO^OrSc)Rn8;WJGQLX$mQH=8#qyEsJi-Y#IgFa8KqbYWgowNJxEaX`$=0@O&48%k=~P6kRc@$lu5bmCN)~3;YSB(UQqr_8mOO z14fHhDwj$nVi+`As=*`erLhh_9Rg3?67k+@=f5%ebgw-Xjis8QnXiP(wW9Dhc&rtT ztBThg@UMyc;A-*ek1s2zKJAbN#5@HAH!aT|3%jW#y)FEAX zUlU*SF>c=Wi0%(Wku>?Kw5dd>laMHR zk1om#8fCam&`Hr5{1>&N_mZl#WUi|YT|(ZQJb7vjk|)+%;sa7myhN(;Do8z-o7u<- zP>fHYiDruyjhkd$@T*oUM2X`{yzqjg)MmS%aIz(ws@)=Lz3-*39^~SivhA+J`=t&- z#BlU2J%%2!TU2MrDl_i-MMO9zux!vV1my^LgnmfF9UwdCo&`)UYl=A0Wz3Sg z!XW8_CyDF2TbzQ-6p|NZW0ia5|t4*uWo{?bvJmhIvhO>RIX!(`JO> zF=#PNbZwwCbQ!m_MWfI-)8~;K;~dhI?btEdgFoUuWIxx)BvGC8GM-G9qE*mWyNG_! zCEcsOg!hVDc8Qz8E=88ojat1+y>F;ev*Oh9)n!A#czu$s)(&VJ{sGSpnWWBL8}<&z zOIsGPj2TLcEQ@EpGl>c$sxeAEH2KxSJ?b_!iS$vg&?+(yc|nGw*YI;@3rpx^SLe~pZ0}vc&yPwa*Yg6J20Z}!E-e)qS!q2ehZY6 z5yPN6{GkO?NV^NNRgJhS4SdO*CEa!`Jrpkambv$!Ae46e>F5he3Ke><;Vb`Z z3~TnBI}r!{hH`M+-RIZAjdDu(4p(yY=R4| zgLp_bdZFBMI!J-23REc;x$ITO#8l}o{DxD(i8aPkcmXOyJ3L4{p+DHaf6Xd6j6HhI z+0n1CDPA7l=E_tjT{-A6NyG8n<9>qfYKzKi@Z!%u6K>I;}s_3;AxUNA zM8v1bYvGgp4NN>!Kti91!0I~>SW8hQ@FLH;it!v8S8g7ZI)AriA3G}CpT~>F6}3q{ z5Z1#!nBSG})C(xEb23sdsFFPCx+`Y74Eehlt%kEK{9oeamwxqMpH2Q*XgBbhczBsq2o3vGZ=F5l ziHDsJ7=uuSd_amJ??2MB#}ylQP*AH3QOA0KPaYW_nSO}tSaoc z2i!-lF6#yCD?MfeYog!GGeD+`w`ADq-;s1{SpAO6h+i4AO6Av~PBde_rw6#odKWh0 zwEr*Oz37dOYEwG?SBO(IXzZYNAk_Q}QDY!f9^5x(jz8&N0~7x2$+Y#66mMld-T5AeZ3yUlt;3Y|iw5mLAozDJhC zB%UZn8>gMW!KYRi4X5XnF`>!(*X?&jM(hchz!Zedm7T4BWy|_QyWV<8B{PZZp%l_* zJ`{`5Dag}h10l65beF?v3U1@YPK)?jN>NhO-*StbCS;LS`h;)Vv%nnrXx&#JVXme) zYa|hxo0oY@=&n_70y)9C&L~iKuCjXUrjw|Xj)RSF7|8C;tX#ZEv)!G}LD(O)UzZU0?#b^V%L%{P@8<2o%i_$bzSeILX29g~3AS4_Uqt3h%SVC_@Oo^iToj^e6DrvpW z28q#P4FpU8l@ublDdZjNk7+O!bc(o)c>HZ*mkl zZ#UvJ{cMnuvf~>kip7VnkKse$zxadBigm(w=_PGe?gg{aL})&^%bpy?fg$aOHgETP zro|X{kvob+hIy?)^*tE1=4m~o4Z9&TJMO%eyM$`#3O?;*q6+gO{bQVjC#yH~$sW?b zS}nlEk99h%1?MrjFPzeb-qeG7Kfe*w^jbR*+;?5z%~4Oo2E$rTHaZ<)>1HwOw)TUc=oMWDe|x^M31_i~ z7IggirtqD-ML!8)KUj^GZX~eJ`a@-aO^1I~Mo*-BG3?>;>`CQys75HF;7j9_bQ>4R zUeM5ISp3mzF*Wp>Tx3s#EawWo?r8WoYUGKS>z%0c_#9P@1=x!8I1%EyJouk2Pe^xu z;zs&G*|R%56XbT7cIs(Vr-}Z{!FF#8o5p$vA_7QJ}6v;S?z+gN-M=q zo~}H>?J&DZK%9+3zUQ%gQ|`j)u6Dan+Jr>UEa}84LXw&rye$}qiGFxI{hO9QTFYvu z@{~ML|2kPXk>rBm{j}|kdL(}He)AUNzVIefQX|28DZzJ^I-^#T-RF>_3|_cb8{+;x zzZVx+gGz_kDgF_!2?p$BbL}fa6RVbBrmU!PG;m5bA+z<)oTE>V278*t~l&Ymcg9(X)X1)Rf+ zAmxx-I!g^>0a(`6{27mic3Pyc zBj-xQ-LB0kL2c9N5$~}pkhWl~T4BJD@5IschFu@PfrLOmq?%tHcbaX+s&(70G3WS{ zjvQd2IOFnfav`F{^XA022wf`lWC-JMYO90BL>0_>>a76%Y57f{DOfr7ALkc4BZfnZ zKLStKvAoe9v~D=D_BEW0#z~@hAIwr8#4_ofa$m{R*4#I=Ay2*X4qQHM!iH{yR?S!c z_67CmE2)F6@+8_dPLWJtid_lbgZc3jVa`kurmYHA;>;S9G(qz5ErYE&7#X8+G0eVi zJJ%p#{~4@k>Ac1E(mIr9?n&{^p33Cw>Y|oF)|Fc5o<6e2aJw@~uHbi~CHy273!?o0 zp6b4z{-68j_u_)tyXo3Ws3&?U>~WO(|Go6gN6xEW*JpGfehmcKobOL)F*vEOnF0C& zd`RbMT2Lijy5)X`<2@~&LM(eS42H`?Z>%c%%NRnt6pI?_mP^IQidT`8ui_KA7_H+D zltEV@36c*E@O{0A#p_-0TdarH>ySJL_8*@*00|?%`5xU04gv#%hQ{F@SPO)qBsMDk zfHz99xPb4%M#(FEvkTQH?1Q$1*1<6x1yi#XA%Q?gn*@(@9rw{k=us|0%Bhm&p-+%2 ze8c~S-Isxn(C`|=pB6Yk?jFjbujsiF})#b>O`=7?~YW-CR) zpleQAcKv`P(P?lgHOni;kZ{@BV?O$nf7Sb$9N5s$8W^TuTHt|NYZbb5d|AAsj#Dm; zTDhnmL1tc3@dUgLW65uE(SqhosD{1NNAmPco>yn_Nl3y!5-w?ASPdwFD|`(v(JxYU@EpD!TA-DJOyk`#PDNN2*0db)H8=qZ{Zm%O0XxbIUOk?} zJFHs$qFfOYwRie?m;+tY52Yl%)P2k8f!k9I^9sAxBzuKY_;2!+oMSUGf=>NcqeE{e zV|oYd72bNsT|H8jE77jTMQoS#gFmfQ@GBF>9U&&<(HrQ+U_9=z;-muffmFhz=RKZ> zxzHFfSz6V{#+F*>@V7E$BqAbKn<@gi2 zEJZqRgi-FXtF1*!^-plu-=sfjN;E<4M?55i#3 zuhv+%Jr_g+Y%ZtSqWGJJv&TXPE0ualA8cgjZAln$#_hAx61qX2$U)jH4(J^WnG5E3 znn-`zaWFCQp!L8T)^J=9%44^W!##a0FLDK%WxWxt+JJUdsS+-!^{7ZbOLSUF0=~x# z`!5>@=3S~=i6|???7P9m&?&n#6rt?ck=`H5P4^z~MX7h2l__oZ6V~s{1q}K0aZA`a zTH~$~&!P+B&EvQ9!G8MjxqsWxBy9>l13UU#c}h-|egdofvr-PMN}rkx`=K9N3s03l z1zW9%P~ov*yY&q5JSx^olyum)w<~R0it|(aZoalNSeXHqKNd?ah*#MeDcSgqzK1%Y zVH#o9uzsrp_cAP(I9GwS+Xm*&WmZocAYqcD_Dds*+r5q-xw4$E(pwH(Fcf7s;55pJ zWH$&e?Ef6qU+lY1BOR76n|o@JzJ#Yk$zXoV)UjO2w>*&=cD?ZAlRcTEK6G6mkN_>@ zqu|zfe%u!74)h<*()A;PWA$)yi>)H~E(!*&!!M*LAx&N27u8ergFI?P;e9@88?K+w zS)37?T(ja&{#y70uAhfNRexrV>)FmSYsZqbDHbVk7?w7G9M$D|r`4mc>YgzHIg>u4 zjRB{}%4cVwt9k}XJ)hxuRdk}#ogVh;#34`9mX112cDV3w>G+(l+n5N-Jk@F!de~b` z`Af2aZcFc^IQgY(LhRBir2$d^H_&p}jC2PIaJ>Jexolq4SIAwvRL#ZxlAk0BtvCpb z+tc=n(`0?H=ABD=ney1~R{x4gq+O|Cvyi#Uv|sT?D-KdrQ|JNP-5)&+RGE!vsD{Hhjw z)&UyjkAyrNBVU&~T;H|(T7+jFvLyrNnA3I~53QEvW7wjY>r$QAt-N$`$mCvN&C=R& zuibt8+}|SXA0?dFb#A$*JUcc#-2?YSJ)yVY`|JsIiQ_n)ENjKKC4&u)Cpv`&*Eqd! z;;%BVl}5}8vEh%MZP=||Chwde_!jdJG9NO?M(R)5?C~dbDfnKvOyh(LXbi2RTDA*B z+5ebAF`*p#Fq9`HJCQ0^5AmV4?)b?QI1TQ@=T)V?lB-FH`hk{98RjR)vY)Yd;k2W=W_JHN5AE|D3vAN(K zD@xDQ-N-V|x-taAUF+(XrrlLSg7gX4{D)wfUh~GdUx`(ohR|0M{SWIgN5)~Twc`Kl zB+@GQ=6cOn4zaS~^GbmR-v_)cpI7shLTy#KAjiuA;Tt$z-q0mF8%i->K*u&5_Wzef zw@_tYCNn?^Y_qmQKgFB&X{|#_Rfe^zz&5W#X-cD=0ZrRvIw@kiUunPzBulQg{lX& zqW~zzb!^=9Im*qyP=G2kIYlMgtx$j%R1AMPpPi3r?Hw z%>$|dcfM7)Lq>%>B}4k8ymnv3-6w)pI?PU{ogVv_H6l#V4O!z6svn&ri^4by@@RU& z{sM-S2f&Z;ICr4+SAqhHffC$F!aXeorWX&$C7{Y!pQhPnT%ZFz?^jhb9X_^M1%4Y_|Ky}d&Yq@ zNfVq-@`**ts&fwa@+#PR)#Ddz(i!LXLJ8Irzv^Ey{~Ya+JN6G{Q>h_O-1V$ien;QH z{l3u&T3!_6WC}xg7hi%~>KagAc4YShfmE8$L~ z8jJr3Q#jdL6GlRrf;W`yTsvMcqx`eLU;6T|6~7HGit)}U{Js^Z#6`{ZQk`hLW7R?28cJ z8*e<#gsX4leN-kaq9*&Ic8Ds&-nx6Ggz!`=N*xK6Q(|?6V(f3$9xZn)b`vcL7CJ9H z$7KwtXVB31Nf(7`$U$C*-D4}iLSLIn#-OpGZ?pF_3uwcUs9Wi>TPL5o7Aq!y63$U=ZZF;3(xgiKtXN@y;MK( zo6sq}Wy48He*^TEpkB_hSqJ;UCy>vs70>VoV6?ts?$U1kv*91+7L5wVD9%5Nnd zS?VM6J23w8X_~vm$vyEy%apppQjEJ&e`wLHbS~&Ug@K)le3t7yy>^XzB=Csu8!N$LX$^QpRK9;gI*|>WurrV_+@$$D zTmKlW4mBNKweI};BCH4ADe;&Ad-E|L3`?`x@ER?IHo-;fEH>B{{)1b1G_XRN$TcI2 zm71D~^#pw@I1q@mKLvJ36@4Y`3B9nZY{XHh4mYA9@&L#_n%G0UuCwfohnPR)6jKI@ z=_i^dz2{Y~Ug?f9qP`X?#V?Q)?iPk=toWH1z&SdP{CC$?g*;O3yq08X7I|H(hF_|I z&Wzt^)*m@#MlAYB%gw9S-=H3NNDl*P@PruxO3!ccJy_uE*dNy88WQ87+fgN8>#_BYz^)uP^KqDmabsAz9jdc(&F_H&o^pH>jCS+x zE;g^dllPoy-^{S)zH-OYvFY;JZy?RJyE8NA1*DNGrc@jBR>VP>qyiECzo zl7V#T58jtxkq-BZ1F=|4mV#22yrFu4y9Y!JTx;|iw`g(TKp26ucC&a2OO+IvbXfO3xKK;D@!|KxG z#T5QSs{kMJIoEgRqj<(yc3$&a4zZ_sHoXR)ON7uOf0UYCBicLg9?Iqv&o?4MpM+<| zuA&jQn5kZ3UXo82Xg@!+I!QZZ^fsg|8c*E8T(e#;4qR}aSzk#R*@Hay2+UIMvJ(3| zDWRQOtn=DcOPg48qZbvr}`MuBWXNdxXFthZnyJsozv$>GocuN>ak>R zg&O7O&a##w>hdriLs`ykI|!$w_jZX~CJw4Tca%8ong>t!L)dZcnwM!it+WP(CX)e8 zq*Pm%vV{TVvrdKn<2G6uDlk9Ve<^GRoRfkq+!q><54wi%=G3N8q~_--;=0|#=Gl9_ z110KZ&UNbo8=|irX4i;4!j5uFeyX+r%OO&6!=xzH$#;@boB(87LTD3s43~ja5{nGg z68l}x<(txX9I*GS2l_)uz&tpf3RDK4n9)WmIL3kWtnA}?&Fjoa>AVa!#cQmZVALel zis4FwlBj}LQ5gr~h^uTcv6#4_=&4sLaNU_wYtYpsPFqZcFvTs2C$NqHC|5T34ObEVf%U z&`G%h_S|ZA%gJ><2>IY?yai3Wd1uXOx2FWdK0|KfNSv=U@T>BGzQfD?vw?zO=}{Y- zG2%!TIC!Jrtv`ne{03@aa~}<yH(7?=QMy2Vadtr&#PO&a>j@O92U=VJSpw}y&ou zKd@Sstp+7v`Cv;hf}?SaS>Zek7SL34%v|B;ZSJTjj=gqL>_$2YeT|2>kwpP7$xmA0 zbag{$BR;e&cFNySojV>*zIUK&yh~o7HQ|YPmQJ87yUw_W-@pG)i^;6h2V7e5GrHV&Lf`2*_rXXkNWj%(@ zAFmo4ftll*R^`zsnh&%|JJxCKjd0UtX#>j5@GoLI5TK^C$6^QEvi491n3JzEZ2vOL z>{7d$<>55Uafy5b+HPO?46w$k>}(NiCnO8qvY)e7|BiX-uricvw(Cu5Ecy=Y#5&RI z9ss9UgVAuj1)haI=Q&U29nvZKL`hyf+5Pc5&7B->H{m;)1T#3ORdpNLt^ugLYydyjho+VFNA1Vq7tV*>XBWX;wPnxRhrt&6_VEfm2XoMT z{WV>%Vr_}9+nez3V&G9{C{u1gzoj*}?^cQ`IwLpOjp8Sk2KV>^r&?~pKQZuMoO#;J zwv4kh*Y=xm{;;NmZhHh}^UG`o`bZw}jg>Doqc=je%xNUJ-XEc#Vl=-Jc1ZTU*mKF% z;=PP3UHe9_aOmp@E&D3|U82jrR9SYovgnbdniH+WuN4RsCRu0s2df@9c}vHW>JwvH zd591AJ=JYyDcP2V+i5YsWi%N(!RX`bMykKoz8t#E-_ze{*clMtl6W~>CGwW`L)p=C z)J4~0U>4Qu51b`|96Xd|Ny)D`69Um8M8td{VB*zoftDnON*x zK{uT&XwW>JKSl8?HSG$opQ)cT_m8;BZ5Zu{5qDty|T@;3P* zR1lBV!Sv8cz0|G>4$BqRVb~$A536y#A{WB?L(i1qbtcg>UVt^JODGPeI>AB)4ucwfAalB74FFtmcv#)wm)zf@-h z4V=pF`8&e+4Vdpv(G6h<@+n153u|(|TBX2SJ7p92y+)FDm_7cLde9z@K+_HucAeis zGfEVTIFak^XORBcfS%|{`w7psBVb;)Ih zd#m6`2QO9uNOlby5|F4+`XWb2AKX8cJ~d9;<&~tu>b5*iwAm~kLd#(fFQZeCZ~ARd zz$qK7dUV&mf{N@SY0-Eprt9z62OFCRPPD(|ev}C`o(oPIdk0(gUZIg?J3g4QE?ZrY zDH}kokjdG^ec~{=1udVqQh^+$zIJWM8DUqP1$9D4yxh1M46yB>=0wxq^fc_L%2}7_ z#amjx>#FoEtk{NMiZN-e0{8SfwSpgbg_$AjvM8ZS$U?EgSpmURECw2V1=1_LD&B*p z&I9;n*4n)^*QhYwS>?fWaovo9?9(0m*afaPxz}z1+e;jn=AJuWu$RAeqU-~nX?uAx z`(fwudF!up+Wf#@(zn)t5NjpE{xl6$X;XTI_RBmed{hqE<%l`*+^wk}*kiE<_{WpR zJK8Nw17o!xcoN-Y-+FB3IIYKv$_Jy+&3Y1=21E6T-3Dzl%q!u{ zb(wrr&ne}=RM@oK@^auS&{v3&X7^D@La;Y99G+--p&}`tmEf!RuA@2W!hJiJ6d+E5 z&|KUiLAjk&K$qvTT}IMFZKy1?V8^p@wnFm2B0a76oo+a{q}s(w0>7bM5evjNm~df~ z!0z+Mwk*72?}>~O#AxWJKj67sWyv(wB-Sjr5qE-9p-pCQz;GIa{onM_oxgz zOZ74|Y6HiGd_DA@ey4ZrF=#DNJChpr8|$vK&vMCmQY#I^X2HOp#J>&`M}>>zr1Zj> zAotiH*vBL63=YNzK8QYo52yhgO565rUH4Y>*qwK~ig;<*7!ewWUAPKhUb+1pc7Msi)CZ<*Igzq_{r;bE-|NkQ#xh&<%Hu zljgpC3VKQXbi)2@%jh00pA$50=0=Vam0nr6^ZCm12!@ zUA`(^5D%5xR*_V2{E(LFIP?L$mHjvlHqO&PFezaL5+ zPG-N^X*Omjw|?m z^FiQ}QehN@?Gi8S&i!URYty&<%jTN@xAD?^AG!l1{35%>X{Vdud+eo;5I7(>H$U5- z&=u#2v_~wtPim1S#4#+Bhd@04ExZM8(L2-Qc+63!kaY@|#AGt0LRMTIB0+H-Rlr@( z!+xV08{r5pqlb_IjKxVPlQhAf@jbFB-WQ`G0c6Q=8-&j1o*B@6N6%4l;D_wz4@IPo zu3UAz9!A&0Uz4C_#w|wc=OT83M-1)*Y zNC(_QcjV7xOo$adG{Em0&BjCUVQ&FTu+Cem~sbp&F}~2dg(1?h5n zoHfDEx5NVs?G0&_mykT51vfeCeAqn0FCTXpw?bLR`A)rlK^S+oX_hl>EgMC`y!k_V z3GB=u`06#7*6pDh_fHHNH?>N6;F{z`;!FDlJQ-HlD7^9KfvGP$?E+zS&V3+awNoHs z{@1#B=trodH2ym7bR_R|E%vj2yU_sk1hkrpI;kVu% ziet;x3g095fh)pXOB_gCK%%`BICK1f?*FS+QUX6c9`sR(QU{$K)w0r6*?OV$(bHl9 zr|cd~x;x-cIMd0uYTyL(T^^S&NDthz_^pyEJ_c_6HeYl%%*b%Icj?ySA$;L)F zyRGj#8O9o!fm`Mcfsr9#nyj-N+hZHY(>Tlj0&W%8wN62kXT)3hzRc}q=^i+@v#m## z4^kUxs)U~^(b^jBaup#J&c2P(7>7Ql(MKbKHU1aS@_&I7t^0x@XBwZBmg9K)620dK zzC@@oVh|@s%(>5bGs3F0BuJ11WN)wlEeCq-W%IrRJV4Z744E&1CenrKp>uEnQWGD= zE*!2trkzp_Y+qXJYF^|layR}+Cz3YGf*P_=sbrv=`&}}+BZ7*ZDUsm zXV(Ra!dW5uW%%iqfs8h%z*tpv{?zkLT~>o(Jw);Z`KsJ!wxY(+1M`XXIhaBEtOs(8 zR3Qv#=h+9b2AxFvq)K4WXYQ~v=u0*ed_WG&D4|Zc1KSxHNJ;U+J}MP6h)m}33h*z3 zbi~YMPmDS+%Su8guvFfF@$pbfk-7aeV z$wPfgr1;D0(=NEu!@ki4sqHvIUpCGi?xFL6Oq|KuV44`~5L6*vaX!0Z#Z~2;`>Z|f znmqR6l;F5^ja>#iVLpx!uF6Gh3GE1DR=E44lj})!A*{MHLPbai2eKbd3T^TjC%|{` zz+S39;PJn3&V-g-5mJ|1508*?X(1FRy!GGJ zr$dqcda$cROFa%yw_uYuC0)a9f`-3=bz%ZKM8(2wJPvuiyW${h*QbF%G0Y6%5&LNu zp=GlHHrp|Xz-$5hMDYE(%`{-tei90S9D?Oh{0XL!9rP2+G5W1Xp#d`|bknGyy51}e z&`HlTe92X;)Db2n2r@~=0cg8a%h{+(o^Y;1D{NR;gZl?IE?HT6wV_$J&AWE5-2*4% zBt8qy5N?gSW9_eQOBltq(t?$YFWF!DH=!K0;(eG8ZVD&OA|7v?27kdxpm6s(7Va0@ zoNwX~y!A5CA#YROI+splOFr+G%YbJo4t}Spfnoou5M#Xdd{N+gAHEU*UfI8@K)UV$ zCrX>HkvqVg`wh3>bud)RLW%YncR26SeM5t$`B`fL+)v-_3Zxl+6d!1?ZyBG>cvQyw z!8-QCwIkmElT@@8t6j#iknYyG#`b9^%tEsGK`0J?0M5V{*62LPGocOKaXjnH8K2k_ zlU^=MAvussI&A}P4?El|UWO+O{1+;B&G*tH^A}L5x9M%ZqQ|0`V5!gq9Mu$B z0KM--ICT!Pn^LQJn_L0Q+!^4FjPnKOP|O#KwE-~f8qoSr!41Nwa9#OHg3vHL?GA`u zc@vNDLH+=m$>)P@!3O`O5cBT@hOM#V8ms{^qE1L5Bk~WDs&xo|v|Ji4f6_~#19ZdO z6x(UMryB=cUFu0(qEwovohe{rLYqkMHsbkPN$Y5LI1iwmdqAuJ7tgesFuoKDCoguo4 zVy!DU4t#nK;A~xuPMXc`PCDf^gj^+;T;u_M&b&ci8TU=YzH1Jm6-cqS0+T8U8rIh> z=qaF?@BvS@Mk8KY<=Rs)8-Mce15a>Mp9&QlYxb6&qz=-N@CETg*c150A$83zbmnk2 zD{v8URej=0g!GO|-vV)cjb*Yd=Oi6-N-Q9eg6}$<`OQNi*T_>!X^N5|{19^SC%b~j z(-=FSU4rbf&$;ak2v_YqFlxp*FUUhOA+Ncv;Uv##yII_&v39nQ0rbBI&RuC*XcA;p zZj}3ozXx1M+1O{zN)qH~Ai0W$<KIZalDE|Q8% zq*~JKo|n&u-*KAw5-`k-%BmWZmq$xQM&Q`7BMItGMFtdH3 zPCN0+ZQ6w9=nL9xx7uk|1s^a1Kx>V&U)t;ZJR3l3{4Y;OSL{}BVE_}v{3@Se`R-fr zdkko~@;&!9n~^q*UEXRY!!70Y! zsZX>Eazq}z>Pij{^Od9Fz)Ilj(M2{DS{9%3U&=4CrSwWU${A@)o+iE0HK1**62H}r z8sYSH9=zl2YM=ZPb*cOMN%F|>@C9_0Ux6LTXSs~~oeI-yLm~Sx}F*@m5Jlu=%IffxRIs$CpH(#Q+@Pu*d=ksHKkmTykaVf zztgs$$1e3(@~gqqkPyrydDu%zq%t%N=BT&gD_}h3If-Hv zx(12<74l1nCH24#dZq1)DzLg_wF&a8Gp zFT@l25Lk`h(-Gw6)957-Hg@bjVUzCsXCMMQa;~^6U%;K@5;Rq>pa=W`JG4^4BeEo~ zvIp{eiL$Tq8my((tfwrVH}YEEHY;=^CEN^t%8gEzH=Wqm(xxq z@rw&efooP9bCl{;(QqIobl^B?3Mhd?R+3)K+I*EH;rK0nVaMu= z&fvdM{j&bW4=Grd8C7s1GwjRB1>WS%HqIf$^2|K^1)2qWXdF6IzpN@Foa|X=)dgWp zx+1OfQzY4n;8j+;)ef|Qc;bOv_YLtKkCNU|Afs5t(EiDXoF|6WBdqB8Rhb3B3nqjnn*sKBq|bPp>SchV^+CMRyoR({LXe!O0%1SZcSsgqOBW>PGPRq;NjCt;X>vtw8?D zzsPk*NzChOI!cF)YK|ubIw>>Z=fy|i(Slcr!KaWPWw2p(ihiMumO=m62`mEL;unRt z%tGnb2wygv&0^uAzN#TUujMFiQmr=ezi_ImfSF|$5XwHQRjAzk%^6VOX^zK$q1VZO z!v3)U=2=y&$~cI(8iW4hD!KRF%WtbUjQoqxxG{CH9hW=*t zz;%#=>&MT7&;Bj**S<#AG&}7DznS_9EVE!Kf_!uX&T&fd9F|ax6v2GrC+fvZ+<;8~ zQ|AMQ3Apu=CkL#+sD96vj=26t{7sgHYBi5ZutC%LPq7^(%ahWKQ!JgdE-|=khL*(p z)?a0XoFm2RCHuTo4;__6$P`;d5|&AW*oB(KO6Q3Hu%u2W^)G6$^a;HvOP zzov}wabTy{KudQva9STQBG1L@#f1k2$aj2LI=>cwKl4pIif7ci!_= zI~QmJBVg{ci~Ko!nyq|+ykpPQI^cl36K}vi<6WTA%nX(URrU#-1KDD~oa`xrQo4iI)8iM1#wpB3K72?Eew;a8K3RxP*SwaUa5dxb3E9J($oANz#@;{t;}176@B zB`1~Z(B3E%%Fq)#26n$YK;T+%GM!b6Iwhf9UKBWEe+33Iw65VDo+zY6l*=EzuiQ6e z9Ci-~UCICLUd&80*_aDV>luL^V_d&(C9q=qEJ{VoV4{8CWRg*66Stwi(q}RQ{mKA( z3Ba*^{>XXCw{R8^syL+4 zzmXqWx0t0=D?glC;h!#{F#*DN^(|0S(JEpVrv(PmvYJa@eP-drgytUp+d zFCS$c_psQ1-R_I}1NTe(h<_!K{%QKgcQxp?fMy`+;3$XzzQKf8FSIyq;EU@}ZjfecY?IXK52Z=%c0+2ZtVpASgA%T`(|xJ0_c|V&=s$| z5AT*byz$DQwx(K&B^gqjV}MEFTIfaK@F@Ja-G3!88%VJ#jCSFGuaOn;JNU?=NiELM z&XNnBGPy;O;HE7J)h4vXtUlea{XjLi;KUf5Uj)X$DbeHXdlu9Kc%BX@E8Z=vLz^NO zSVn`^A?#QW;Z(ms9>Mpt2fqp2F8<5Bh;v{*0H1K5edl#xa(@f&;t617O|T8ER9JRT zDi}`WK5Ig_7|JpK9CrlW$G+gLV69O_k^M}>g2!8-J_>I}rYzE>% zioT%q+B5FY%2{FB-5YT?Z=$eo! z+&~BnvOcX&ex)&213sl)qUQv^nL^{??S0ER$7)##KWo<7&Bmhnft3QKuvdtXTjefk zLwZftu!SN8kFyKkxP3OrZrSsePUEb63aJ+O^yAPCiNI6mu{6)FlU7!TBJjF!MqZY# zC_m){$l?a&b-X0T;U1WB+%hYzwSXM_6j zLugoCq1VJpo-Uk$f8!psnFe5+o+YG{xA1$ag-s$YQYXK!#HNhfgPk!O{CDcu!?&M8TBg#Wc* zdIw$Fv-~@F48J?mU}9ZHKUgOo1`2xwnL{xB76|IarO^6?*|4xAXksQFA)kOf^no;l z0(L;ZXgp@IbQ#B?JCMBiE3YVd+^w7rK7m$tgTGY>Kk9eAhBH^0-ZSEVGW3XA~1?Q^7?YSII{K&o~A;+MG6*%Dh}lDY(0n!jMW z+(P5P7Z^vs`AhQ#pY_$4XAU3u=R>nc^}qp3*Z=r>`3uPV|F)3|-gi~k zwxm}YOs0T$_uEQv;>;}m0J#6l><*8D zPTyuX`AK`t&USLFa!5Q>!D-rubAh1O0-MfdwcGUpc8C%@KW;lIw2M9gXZl6p^R0_J zWLwx(RT~&}^bQ$z4#*ZHBs+lAHXJO{GxX}C_dLbF1D;G3?39;yE4xVVLbiC9-4na< zQ|OfCf}?1K%u4UYtK>DLxrc-TdD$G6--EAFHr8mHeHVO5QP9Zsn!}LMpK;3BBqYaP zvMWLw-4;fTB|Zk(jK9t}@TFje?%`UW+vn}oD&T4H7+RV)Ipm$JDC?$mQolrL=$E~x zL;t~ChqvtjxT@-Tg1cKfFMrgQooCXrv+m@PGWc#SlAnAImjGL)63+u2`HGVW{G~0L zXO25b<|0_yu1n`}9$^tw${PsO;8`4alN#LF9a>KHINoO zpp(IMCBRZod{dLc-g`aLq~|=Fm$Ix2oZ8i3x6L#cjhoit(HVVT|9tG0Cryv*jpRq$ zYCQdep1}+*QEdel;vMOf{8d>H3Y0=2My|vEKSyUDQq}T@`&l#VZM)5r*GM8Mltc{0 z5JgdpD2k*A#YjXk5+jTxi9{)iPz=S0q%b5&3PTLV5JOQEDGEc8q%fi=j6w>%`m_DA z)|xdl_v!v|4(D(>k$bN-^L=@q&+}S8p|xqhWR^H6Oc0Si$nQ}~;@tunT4wAQ4an%)fy9;K$N@6WXW^ww;)G(BBma22#beT}_3P!< zq`t?_&`nIX;*jfJpqKkS^t;pKq00?t(FymN>J!JM;M26+H%+7<=(C1HD)nb#Ki$V? z$Tzo3-GKtRM|iYRyNGS%dox@A!D8ulRjs9a$R}~H;X9(JV^IyVp-7^5J^V@8~Ctvtk~~*_Up0 zlttqB$H=r-(&8dnvJ7J7*nbK9X{g> zL+$i3IwumHWF!qtK?QUMB*3oNcfs^+jsGRb4#$-RtAeRkz5U&P#y0;q;eGwTC0oOx z=Kqa~-A;vJlM#DW&ow{kZ?&t$Bx8OydFo#wJ+eTR(r?}_^Hg+P-wvJBAo&3jKL@We zRy}aJNJQd80Qrv3%}TAw95T|iHujXi#CMV7uE}|KG;oDJjk^?gz)Fq>Y1VA}JK%JL zGXEZQKSvJxabQ9G_HD1&<9@fZXe|rz-|j$c+{=@L!#U^11`cz}M~x%qTL%H&RLF zwdeXM_5vNM6l$h4Kd5~HvHBT)2jX58)zKdE(9fY~v2&e7!pt0nf<-+w`qUNZL|=*; zl?m3%Y3~oJog0`fXW0dmLZcSNtf$*(Lmv2RdpPDBJr{Ta(&5@hfm8oKvI(Wp-$vuS zd}4pmyWreh5Z9o+I~Tdf!=V+VDJ@#<@W8!7F5O5VgYPwNc<;IMJms?g)L5%rZ{_j>s*w^_xDR;`Ss z%WUj1j*?68_7$jEY@ zo`N0hU7GDyg2?no6aH1Plb8Bq?j2dpKhb3M*vw;9pi(4i?dBuz4cqHXs#S0`TcG8< zY4;g-%pCg%8Kh+(ZO)24$V!U!2cS}D)|Y~Z3O4vp4ZEaH+0!ZXRUM|cmD;@ zpQ7TMVaU7YBDt@L=xhaZ9TOciX@za6j@}#f2WpV7Oi0!*ldbbgCYeEc0m#pEdgY zXJ)PT!3Y|q_HDBwcFjI&hXb~FN$qI7ljE|;Zf^6hQA3;v9dY-&?cp|ak305X8QTob z2C{Tw&C{FgF#TX$Lp36!1+>O%lw586OO?hw83(;~KbX@OFuNLzev@rZ2Y$wV^a&Cq zbF?w~8_uE)b`mVl8(tH+6{+*?hea&PRwFg)VEC~+=Z-r}*dp6MMvi(NBo=v_-=WptDKE<+byP`$yaZ!_ ztOkO}j~LYVo2&FFohL>9A2kh6!=n3AZYO! z51UKaS;W(FazwlD9rLeo<~Cp-K97p|q&jJ(cu={y2a#XVhYjf&>?~v5{rpX&Ky^E# zdJc%t>t<=-aqO^V#Dy3Ma&ZtDtsYr+hWuFhi;vS>;b9)_&|3AFz9S6V+X4*wv<(q#yT>f_`dehl*(!9&4are1-aK&9Vi5d^K*`7TfTcmYc zul_mv;dv-wH|0%jh8__8?r*kuur(Ds5*oQrCzB+_7*&62UpeC^#y@cf}7(gF3*w+ovSFWdZh;ms!(<#q?M`c3$wT zzF_BI*K%Bb#9N90rN_pr}PBV{UGzow01L)<3w!GsLL zH+2|K=smhiUB*N zFy^)QP0#vY4KgB5gp2=Pja-l$U_VT-<(OV;!K^fg*bB0xmx*WkTau?53~Yw<33-J& zaG0jboixqO<{x=axB$)x$IhhBjMEnM>w0&z!=H@AIUU|zRBJEPZLOMSKqs@rrnNeQ z&=>SEIU@qt8y|_3U?*1^c%<*Oe{QQ5Jof%pFa5mvJNhdU`dcY`!sRT*J;x-xHPs+^ ztou{wTNX%-{>%>{-1MfI5V;3`+M1DJ%B zhO(l^+-B$zz-EYPX0QJ{6SKCh;=eoWMeI%}kXM|K&Ldvv4*JbdWW4aDU*PAX+k@1~m-04Pi62OxHiZug2$Vp?OKA!*2*;Ip9D)}$h}U(UX@*8?9^L=w|Ip)5y?XT_1wKIUOFAf zGMzPS*+84L1k|dD*iJ5!0&*6KKDSjZX5$PsIm6WOKB6KNHE+i`c3jHBJohwjgcznw@c?NpLy=srSY+kae zVjq}Ev3rcy_A%D07s5w2M!V7P+$Gn=bFIUDAR8RUpGNaMGxFZ+kEZY~QSPVe=VXZ$ zmJ`-bxuO42O=OT9mzksvz0V}6(yl36OM&;hJaUGIBd^_lct)x9P`wE(LI3^BEK>&h z;d1=`x8-r{P}^7{*kbqeN#uB+0a3m{+;gAkrq>uK(yrNq=2f%DiW*<79KFjvtO~45 zub7s*9dOsDBSAb{91WlHXSRMu&B(p*8mL7_XrWAmoBORfq(${pY*^l=_58kABmwZR zpzkq1Yd2{olojLHgB&sLvvGTsw%cd0HGi+&(c7@wiNfhLt4B$T4hk0PRU7?AJRb@l zlVSH5b}u9RpzMZ^E#$06Zo7A#Mm~oPQy86ok`&ticPtv%>Y}Dw7F%al$CYfajIraBjIY5ZQfyumZ?)t8za7C9 z{t5czQ=|vGjYVEefAf#}O_hyY+$HZL-5d49W4`7$!$XBUP4k^NL#N%}NWVN4`l32O zE(^&QS{2Zo>yPqH)a zerWp(QJocervhW*=(a9>N6-#*vLbV@|58Lj3vUKHpqY-!lVn!^=#A>Nk$z=HuX`sr zrroH0!*qxt2?NQZRd%l0W&D&6oQ*WiJ(ADz-^czKZ|bEh(9p3t;hfK20Z&Z zV;3fG|56P?x z4+YZA1J=1<7(S!`*!Ve;s*~{7{$Vqs*y^IoG~W8^r5e|Gy;?A@tBklslUkub15$Ix z{#WaL`a2xi?mxnowpUz2UD6)?1d5s$tx#`y8W?NegC$^TjK(yY-PQ+fmV9Tu;)Okh zY3@G#h4v2f{$_M92g2)-{ZO@U_@|@!E1I_&;$l|ZqYniQm2Z`f`HpvQUzWrT)ZgO*6erAuIJaN*C_Z+q4H$$Vn z>b6SnZ(Fn`Jhav5_k`cja#?O{=*Nu=aMkvr|9DR3?L2lH_vH!WvArO789R7~y3Gf8 zt@!S(_;>vbcUAm}w)&^wE-#De)5d}y>_Tm~^~U)qf;`|Al2$MPPU$E8VY?>#W%B)oV!cFc$n37ROAeey2T7@_nw}iSuv>>}HAT zhPI+T)<)M{s_H>_KuzIX&#{RaN{nk0)^EYe9Nl<$=sQtER|#>A|Ja;xE(JIOiIX zD)1z5lx|sb#v~ckEB_@F@#}CC@AGey%b3BpV3XBgN;A>yGaJF;K23_`Nf~rM@JrF% zPKg%|zm$W~Qf#fqNvf8p{$K(zt3S{^bDf?DOp6|~N>q?|xUsU329S?j_-`(@zTrbr zyqW*It6dGnGwR>P4cMdd;MndpxE#>GL)R08PT-vJk-UL=;3u64q{!oV!`~u_{hQha zg6)jx0K@ zls++UlQks1oFseHS18Im#hCU(Jb|x#dvF0Hj~eqZlTaDf$$5T)|0LB&cUaQ?z!MY; z4}2;5Y}4NW<=~B)a(~J7aKL{RUX9!kuR^cQOix(N^dwC&gxpI9wGSky@7L!^hIQKC zF!Dq!YlY|cEam^m>FSsN$IVnAQPOs(#E#H&dW(5mC0pm*MD3o};UYW48;vP4gk8C9 zSe=jA>zp9FoH(z=|LlE|o#Gifpo4tDEyKQZFeXDhib*i0FoDX7{y@rYjR$g~zZ**U zPsp8f$aZtmy{~0Pb7Y0nC?4^*{u%g6bG0AxD)~S`5oCvbP9@7L+A!NtSE!9i?q&HXbjvvq&D^Tir^7?2ULOU|ZLcML+fF+mR6Az$ zt~eAuL{srbMU6WCQhx-Eki*+~B9u7+tp+sd$H;&yA-&ohuizTJ2z9_tt;9V?`kYI`MD1T-HmZ`CUfhV+jUo^<40_f2p-xz>a=*R{ zseS7_>ZkaH{*XXLDnZ!wpGOD$%J3O+@1K_xQ{NPDwGw%$T*Cy*#++%$F0sD_7wDrP zl0&Wi>I=P(Jy8ku6s7P((%_w07(lJLM#3iJ$Z% zaKikyr|6xS7fy;k78>HEP;Tamb(hGHGtSpSyZtYJi)guLf`wliNDnsXC+t6F$}?$^RooQDZc2j=*fMVk9bJPg&jUSuZxOcgspTd3-o zQBWM71uto*gTFkK&$vMlP{=vO6Zgih_&ASF_46@n+>HFoAicKNA^s zvLatX7r-z7MGANVy(~*rqkJz;$OKjc$IPPrD)xEYVOAJSaVE*HP`6v_UgagwWf^J) z3aLu*UH)(z*b-l{9&5X-WTePF)AJ(>;J0*ztNp^rV^ZbsBz@33)@UQ9P3K~g^lI~t z{@YI^Pn}czyLVC4`~9@dZ=`~xC>#E>Td~8&4tv%*qS?kK@(#HF30sJI5{!hr9g+6X zlIZ?>Jn)V;|5q9a2A%kzRvQ=V9|Wa8jCsy^{|>n%ce??`W0(&X(7r%T%z4w;_K@C=Ss@?HH9WUM9F}X|ORvG%<1&{!2~cWI$lLxktzX?W zQuQ482)fv5xHfE6uhKkE`wiV;l6J^DFTWvU`iGJ0FWY;}1sV$U`q@UQcZ}R|-io0} zmghwuMkf8Z=sZ4&D@LV%!}4UNHHx?Wqjif$?L_UN-7Oca3hwBu?n8B%7hp1V!|4b4 z5*cM$D>d|c>K!I47kQEns;|M2D7k4Rdau}+`%)B&WS%20df2}>`*~lq7FF^+){I?L zGjuJF**E!6UB_gml~wEe>5YJpWic=PTJy2|MXK41s?!O3Npke>(8P6uCc24C?-7~6 zPskhY3ve&5fNH-N`8-Zwlg*ilF@0jnJP+3S@4v}Tk_S=|EmJ4Vb~9Bk3!KyXO;k~E z1^fb;{S|A{*;liVTF z=Y9hHqD8)B464jG&^w)1CuBGOL(2IS_}i865nShRql*r=n5_GP%xNQV@Gp`KmIc*& zrn;})gz91ej=}`&eonIje$2YU!xnBC^FDR}PvIrGic`MDPM~LldyyW&U7Hp0EzeL( z&Le1X=lncW*d=}d8_f+h8MzH!+pK-sZeldZ#9`xB3-yNz@oh*sm_tT6GWLUn$nQzmEN;2b00;Ch31 zMKi2DY{`0S3jMgb4no=oyVV#D%mx!!U+kQFM(+xLbUU5V@ILX`+3@f9t!^pzoX^pI zXh4?rWN*=aFKf&$Z4&#A`=mi#)_UnddDJ}aEU-T3y?8?RNU|;0S`P;Pi>jT$)$kel zDdL4&WxQL*0$Nym#-M^!ryUN}M8N$>T12|us~u;9?c{&hUOuK)v$hAsF!Qk^wYGBeb&?2PyH4?l?B!9S0a6W+WQ4u z00|A<>=wC!@1%y6nuYMZRk_dkljwT%BlN(dY(qXaLUfQWvvyL)@@b|18#;}R{2Nek{XhC@FyO^X}c=QoTu)AzfYn+|03xx`Uy!z zPeITph$lht)Hca>R!SbS zhu|EZBe|@EcGD%=O{PenjQXF{61TPY>WAM+MTdB?o*sQk=G=ghr1cu$Y5q(70Fhq0r~I%t?;PYEAbKT>Cek7c zP-W#9InaTuiHp!!Y=W;=WJqviUj(+GA5BBPn~)=H5|v7RsAj9!8{cYF&;1oS#tz7@ zTA?;4VvRI8feen2Rt-&|iG;JK{#}0Bx#b^nQb<0}whzG*zW(%8&$z$a1|0Q zlbHIrR*l@iU&uCE3V(7s!rot#KZ+!X3UrHA{?~9^bQ!gIECpAUonW7ld}ttzXh17R z4qdYT$(jvB^~Jy$@FU;*9ytuJL%&u?NA+f_k^Tag@rKsz?e-peCnI(8d}JEbqy2#^ z*r$DiyFbxPbNkf`XO}m}pSuC*W3xf-{@@k59UgJMp{l$9f5JVx&svW$V@kmeuBK4Zr!UxGjX7M_(iYJzwQ--uR#di=F@T>Ea_#EE{zXohTZ!=4qCE%G(^i=Rij zjHmuHE6Kb_-vwrnCUe8hc0bEw&OUuvt{6vHvmvx8)~Vu26%qx@33V@M(~%`|E_zVl zboMq(Ccg!SjV~IKvItW{XTcw^j0+WipH zw2$k3yi9uwCe2IjIT$-Da!K3ElKq|fYj=s960PExHYf|pW3ABNf$uE<9qKdBQ`^xA zW@snijQ*}~XM=Pn-JyQM9k2u6Zn@ZD{?S&jCy$MJYxcxcna8YS_6PrT9g31jiMlX4RaH1Ru|CWcsgX%zJ1|4srb&ECFeKCXj$zZjrU`Ir{ zcUZ-{JHfD^S|XV3op!2&q+u`U_o_i8s7|UsS^;TC<#kjoqmw!=M#&xci;rkeQG0v? z+ZNH| zXTXbE@9pyU@lo)1caS6cytqxD$gjMPmAN@)rA#w^Bhxu(%m+)%&bVL53A+({!vjJ2 zZ$D29N0GQx?WFUNx9aWW2DBk(yz8zZcJM*%x;SY3Bt`H;ENfHdtlVcjz**m9WP*#3 zp-*c&*$(J5iFW%QiHVT0(f)sR-=|u}I$EL@zHqf~j>4 z=ALER99dQ=aJt3$NN|#A$m7g{7x*3X=rxjM%&0j`qSk0y@QPW6o&8U-&T7$pyc0?C zrQAtQif8htNavm8IheZN;fmj{HH){{U53R2>jd<`1GIn!>3O~?%iJV?l0%J(T(Rd! zp}nqV$y>dREn}_{8yL42=n(^cK6TjL?w3I``Wa65L{aGzzm0GD4_rwO@fB2+Cy^~2 zb$)xv;koc`=V$m7oCxEwwRUUV&;K^8gWEP#yWYhM<#~TXd?$t47yX;Q#k!3yQAabQ z!~R6XfFt0Kw-cY~TYC$q=Pdj(=d@j@Krd2>x4#~_->Kpau|+1P3zd8lXpMXB_Gm$* zSw7=IkEZy6$?jd(~4f)zjyoj%1##iIldsFnb*c%d%n&FzRZ$$!kLLH~#Li`IzaV9Dn|>Asf_ zvllX+O7c#WD~|hhnw--**jsZa`D{=fPoTJc%^rAv^gMnHl(1uX zqb6wx=iDKq&t9^I&0~Rmw8%~XAbr9e($0Y^v>Sw&2jZ-XB`Kgi&bx)6pBM5E?lQD8 z0aoDrv6}g$Jx88eZ;c7PJMdN>4K%t9bkchY)y9;U4NlE~vqk@G<%lccW6lw|#nf~MG?&Aqn$K!C@JX-mEAoVYSoZsEnhjrHgZ{|M1F!!<%wwF2 zX}GyEWQ)3oxm!6Dh9l}dD2rs3TX*WP5vHiXDVLqS6@IGWe75F6^0GqVx83ZOm@AGqne15X|Q>e*tRcOzeIx z>6b(g{66RX_h7@Jj*?>_y|>Y;a>;HZK*p#MgG;5*0@OlS@w4FIZH?*r(?6|x;^6FUNl^oLoG{KNxL%O=YOCtLh*ugi7s zj=baVfx_T4U!a%dJ9*$#5aycdW0>J^y`_TpoGoYt{Z`he;O z@Aa3uPy0z8z0NAd+kYfm_*}>Q72~_S6*EKY13~kH-fzvS9Ba~l&#s9TnWGB)-7?j$ zhJ*Qr#78yc3tIP?Nbrofb`8I^pMf5D$X9l4V_>Zx{Ddx4(r z6?D^MDh}!LiF84WGcaq17w)IF=GXgsWz;!Erksz+-%B_5sg}SCqc}Jpvk_Pe3RV|* z>DlaRsM)<1zVr8u^CE(j7XPTX6Srzmrqk0Tgr0OK{PQc=iS8ijS{^^}50z%;P?Z+llNJzyZ`#vys<{Iyvliu)QGq zY$_q^$cWdA2_5GlOgLgeLC&UA#$okb-z{tCYmu%Mf&o7S9ok2F6`cC>{*a&PO?j&k zR0ok;{-Apki8~Y9B~#q@B@top7ephw$<`{cJ)PWOPq>P5rOF-)3%(|)hp z*sWsqSaKWOlXi6%9e6dKqT}Q~X3dv*6`ADI@`*J42kesHVN8%`w1EA=^gR*x+A4@k zxgbbac_Z4Ca}H$nQfQe3dYFfpaP`xWoK|~Cm;6NRe-20NBDc#{%<;=vxhm1h$P1Mz zUa>TPzx`PYn=4ipyJVZ%j6qd1z2IGzOQCb#udR*fVgwu+aT6LAiJ3o`o&P3c>L72Y zvEF--^oF$#@UE|dWVveIWIF@*v|lENM?Pp@Gb)3(E!$49_7RURdi#+|u>#)gEm7&* z;z6efgn-jdvzX_J+AOjnD%8(Ft~wpqP9ADQ+XvC9`iNi+(APdFt2Ev zI?)ZIjZwXohP44aQM-t#*3~dSucdMURo5i+Pp9N@e-r)NG$C>vdgtVSGbhqSzo~or zV|ZCJ%}>S%8?q1bH)c}!hb)IaY)oEp^7Wv|G?8Fp?V)eX6Rd+e6z*|V7_H$oZrC}9 zjgD;+a@4#5;@$*!uJ5cowUe#NBv7G`BHg;s>y#(NQ@27+xkp4HiB+@u2T&Laz!QB9 z!a*<30cmp$KhrRI%N*3IbE;Gwz@+(weuXUPpXdUdsg3k1IUqssiPVUSzq>IFnT#CL zY0hL28zZg*dd$f z_h;x6twCE+H=yU~6G?u)i%pyR19=HaWIs}_8|fAAsG0=N-e!CbZK#U>J&Tq_Ui>eQhC?MWiRv3T^40nx zi?S^3ppnUz>27nsxU9d5Zpshg8TY(*&uK!A!7r=9n4sO}5-%n-NZj$XsC>t|^a9mt z40xX~d0OUQv{yXASd&mRLUlP!&eQ$)9JV8i`k^Z0e?*I4E&Gw)^HEFDkJ2eRqFn~7 zt^tm;9CF-$El#S#epsszQtOdbm=2gwo{k|yhG8R7q1VuII~CrWbt^!hS;hVVX1ML* ztb5dx{ugALRLBhQJ0IxB^!K<44r?K8FWpbl^jY$TrO;P0K|2}U=db>K7v6LahQ{?} zUTdeAgr2s#JzG8Senj(;I{MMd*WzMM1fE$twsGwSGWZ@NIrJ@F%v)ZIIO8Rd-QpmP zg3}0JFsY^4{5aVkUFT`ht4`3%a1M(n-ljY+*5M8eVmdizozdUhgZ3ud6NtqGq#XSH z<7TPf4NmMo+RJf}YkJ%fY%&MTUK^6|d;hRIQ+LNp#c*x#o z7h;*30cTV%CKR{iI@0ZaL_5@C1o~lr-o30}QG?(V?9>aaU$R157@pDZ-UqMBDN!p<2K}en^vF$Z z9~8`ssE&egM_hDvsHl4dz338X#;=vsZ^=Bc_fFAgNRO;F$F((W7+#A4QG-n1Hk^Xf zeBH0Y9rs+lLR!}e{~YvACrQ2PV^uWP>NS2?yX*=p)m}B9n=|lowz33TMW#WCUKCH< zpr7WQ}L}Al9%2 zO@K;um)h-aYU#2Jo5%oidMn^1p1^GRnU+HP$eOwA?}Fxg0F(9+K1a8M+HzRUKo@Zt zgfc-dfD$sS9RLd~RXxE(rb%t#s>!8c#^Iqwzi{3xFBkD|aCRx?gO z+b>eIU2IeZt#SXikpRs=x47UVcR*}66Odrqho`WCY$Azk+)eWC@IPLmddDx&>td2# zhugFZli?BC#0tQ{pP_rr{rYi`1;_s7e)ySm6Eub++6j`R7D%)ASZ;SN!uQ)8ea{~{ zA+h3LCZ+gk7ukY7$M)%U^qH2YC97Jp1GMO7dIWm38``>g)#%Zx%>%p(6z*K-j9Lm~ zhU~q-ZFSnupnu#!VtNlmthgdBX@|9=@bcH0U1peO>lALEIZ@_y(mVboqnje#T>lEb zORg9J!KQ+&ssrqvCbdLkC$jbWwHaOLld8&0WvzDyLg~K0^7O{|MxGg&EG-ly{qyeeDUx295kp0WsSb6ZX3H<3)D%)(8JWL z8IT$Rs#WcR&c~tP1;|Nogcn)6Zv=MHM7(noqErK$UXAs}TMm|LQM=0;#kY9b zNkqC*8g9!vbxQ3up!zksy;{s>emGt9xc8N9f|GC%e2<4Rq^giQKgMtmC}#zTxqpQ1fAqhK1>S-u;G_SFTnBabfK~&NOMoV_L-K)o&&QApy5yGVzvN|W zz<8q%Vg9&j#5*f;K3eIVL`uOSp5?TAFWp|e6%IM<9k#O-kNIu=GKOMJRcx=wOznhO zqm^$9BHeOj+gVv_C4?%xJ)zdW-@Nu{F*LZn@-zJf)ndm#LXBPqPh$>9p|Qx3K7a{E zlR7|}$c#Kp`qUrsMcWG%*O0tUeyCsKnVLYpPdO^IGTgfB4EDgTaXmH+n#Q4^Gw=}vEg8RaG zV+^6Pc>#^wNqok|;387=N=J6A zD&8-J`xHGzllKeLu?CQcSH)g+P5Y(9iNkM(ZVMgEX#ISTGcsZpX|H7;A9F{L=d zI&kj9lNLB(OQU1Xb9X%&tD;^3e65?}x61Y=;S%4?8^tlP=3ka2V38cczG_s~`P+?H z(rrIysm8jV@2`=K$d=p6pJA(3LW;~=_Dwox|C9qDW_tdle%bG`&Jn0c;om((-l7A{ zVav)fE+GT1(aJOjts-b3ANbd`YyML;BRjMad4hfQL*%)ikInpTKZ}=%{gDN)c`Gw4 z{|^3dg@6CsV_xKBTep5cW^c?9)@CQEqcm4-iNorm%!YRG5q6-bwLWZ!>M%WQ^#|ei z{e}FHNoX&gidu1xl;XaLs_{UI`Q4h1Sz-?Y4{5G32U_)vJVAa%Zu$wKJ<)nD!gI!o ze;gTqwO~6w^^3H7e8YP#&=qNE$V6(^4J$dYMgt%NR$yvbBktjCPk|@$lDq&)ijAt^ zkX&|$yh^vodFsD%&(WRotnnPg%QN~gv=&uJwNxs2P0v0B((emX7vR$1cA7rsgP=~}7c~cw`mE@ROCnt4BtQ!AZGF>EI zJ;CqvLfLFh&=Kk;9)_s3X` z^ntT{-7Uv9pbxHy5v_~uQAfp2`O=*hUGPfQt9M=o@|7E920WaURy$omI1OT7+6AT^ zc%zo-782AmLnqv-zhAoIUqMr$52774-bc&;(gI(s?S{`%~&!rT%F|luvnKX#%gMrRoN*lm&6_e^kpRnR=-n(o0MORIen}$h!S{ z*(0t&~{+M?pEeB)DKuN{Qba#FYLDfr$}MF`uX-SP+dC0FPi zr~=36C2&j1Wr)v_d49?mR!7apnERbFhIpLz!F%I}q1%0g)Rt;+Rc&p-=5!rHch z1Oh$8w00ZW>uvv^Fx13PL1UlkXZfS>i>`@*NV0!6`q|lolRSf(^itrrbvkZG%u0aR zQIW6xj!2wJx7>$XGd6c`Sr75h8P13(rmRh5Qr-X~=%9G2E;%=OD0(e2Atu8aY{DC6 zqwvj#@x+uGqhP!pgnupFVC$Rg@1S+{B-U{9D4;wp}grnrX zs->Oq6&;3tBHhf=PSd@b0Y10mmhr1@5(xQm{zLDKnBlt`P~9Delop|>7slQS|yI_M9Ng8aG;ZPy0B#J*tqbO_Yf`|Ki83 zEs?|M(#M@@xfiaM$6(YxQQhJxo28}jp&!!Dus&HT3uS`;1%8G~H3(hGD{T@vkx9mV zYY*Pl=lmvW%v$FxYLEt!r|p-hdEk6|&Wer0#^t~f?S-B0muauuE_cI8jqGwiggZev z+n@*e6YGXHY`+GPk#EFd#7ft+O@e6U^lIk;|D!AKc%@4J<7q@;Uu^r~NJ zz9Ki6U~B3LL)Q;otf8OLxAgB?g$^Y=I}XZ;gIRkl?x9Uy7cJzkqkphV8UUv>kv(Qb zc?2gqg zd$9xjMTguj